<?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>173557</bug_id>
          
          <creation_ts>2017-06-19 11:34:34 -0700</creation_ts>
          <short_desc>[Curl] Extract CurlDownloadManager as shared background task handler</short_desc>
          <delta_ts>2017-06-23 11:38:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>117300</blocked>
    
    <blocked>173629</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>fujii</cc>
    
    <cc>joepeck</cc>
    
    <cc>ossy</cc>
    
    <cc>pvollan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1320754</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-19 11:34:34 -0700</bug_when>
    <thetext>The CurlDownload implementation includes CurlDownloadManager as a companion class for multiple download management. The class can be used from resource handle, so it should be separated from CurlDownload and to be prepare for further usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320862</commentid>
    <comment_count>1</comment_count>
      <attachid>313335</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-19 15:17:17 -0700</bug_when>
    <thetext>Created attachment 313335
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320863</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-19 15:18:46 -0700</bug_when>
    <thetext>Attachment 313335 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:86:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
ERROR: Source/WebCore/platform/network/curl/CookieJarCurl.cpp:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 2 in 8 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>1320864</commentid>
    <comment_count>3</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-19 15:25:59 -0700</bug_when>
    <thetext>gyuyoung.kim@webkit.org, don.olmstead@sony.com, buildbot@hotmail.com, bfulgham@webkit.org, achristensen@apple.com, pvollan@apple.com, utatane.tea@gmail.com, cdumez@apple.com</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320867</commentid>
    <comment_count>4</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-19 15:28:03 -0700</bug_when>
    <thetext>I didn&apos;t fix this style error because I&apos;ve just change the header list on that file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321139</commentid>
    <comment_count>5</comment_count>
      <attachid>313408</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-20 09:39:51 -0700</bug_when>
    <thetext>Created attachment 313408
Fix

Remove duplicated ChangeLog
Borrowed copyright from sibling source file
Remove unused interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321519</commentid>
    <comment_count>6</comment_count>
      <attachid>313408</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-21 09:46:26 -0700</bug_when>
    <thetext>Comment on attachment 313408
Fix

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

&gt; Source/WebCore/platform/network/curl/CookieJarCurl.cpp:252
&gt; +    CURLSH* curlsh = CurlManager::shared().getCurlShareHandle();

We usually use &quot;singleton&quot; in WebKit instead of &quot;shared&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321520</commentid>
    <comment_count>7</comment_count>
      <attachid>313524</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-21 09:48:30 -0700</bug_when>
    <thetext>Created attachment 313524
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321521</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-21 09:49:07 -0700</bug_when>
    <thetext>http://trac.webkit.org/r218637</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321835</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2017-06-22 04:48:27 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #8)
&gt; http://trac.webkit.org/r218637

FYI, it broke the WinCairo build: 
https://build.webkit.org/builders/WinCairo%2064-Bit%20Release/builds/3606</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321900</commentid>
    <comment_count>10</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-22 08:40:44 -0700</bug_when>
    <thetext>Oh, thank you. I am fixing this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322026</commentid>
    <comment_count>11</comment_count>
      <attachid>313653</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-22 13:26:54 -0700</bug_when>
    <thetext>Created attachment 313653
Fix build error

This fix is to solve WinCairo build error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322027</commentid>
    <comment_count>12</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-22 13:29:00 -0700</bug_when>
    <thetext>The previous patch broke the wincairo build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322034</commentid>
    <comment_count>13</comment_count>
      <attachid>313653</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-22 13:54:22 -0700</bug_when>
    <thetext>Comment on attachment 313653
Fix build error

rs=me, but it would be good to describe how this solves the issue in the ChangeLog.

I guess curl.h is smarter about checking if SOCKET is defined already? To avoid the redefinition error:

C:\Program Files (x86)\Windows Kits\8.1\include\um\winsock2.h(111): error C2371: &apos;SOCKET&apos;: redefinition; different basic types</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322047</commentid>
    <comment_count>14</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-22 14:06:15 -0700</bug_when>
    <thetext>I thought so and I can see the ifdef check inside curl/curl.h, but cannot solve this moment. I will keep refactoring this part and will see what&apos;s going on by following patches. I am so sorry about breaking the WinCairo build at this moment, so I hope this patch will be landed quickly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322346</commentid>
    <comment_count>15</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-23 10:55:35 -0700</bug_when>
    <thetext>If this fixes the build, we need the build fixed.  We can&apos;t just have the build broken for many days at a time just because we&apos;re thinking about why a build fix works.  If we need to improve it in the future, we will.

http://trac.webkit.org/r218752</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322362</commentid>
    <comment_count>16</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-23 11:38:52 -0700</bug_when>
    <thetext>Thanks, Alex.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313335</attachid>
            <date>2017-06-19 15:17:17 -0700</date>
            <delta_ts>2017-06-20 09:40:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173557-20170619151716.patch</filename>
            <type>text/plain</type>
            <size>38652</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4MTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNThmNjQ4ODAyYTQ4MDUx
MTgzZGQ2ZTE0ZTQyYTU1ZTQ3MGUyYmUxNi4uZTBkNmQ5ZWMxZjliOTZkZjFmYjhkNzdmMjY3N2I2
ODc3Njc2NGU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNSBAQAorMjAxNy0wNi0xOSAgQmFz
dWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29ueS5jb20+CisKKyAgICAgICAgW0N1cmxdIEV4
dHJhY3QgQ3VybERvd25sb2FkTWFuYWdlciBhcyBzaGFyZWQgYmFja2dyb3VuZCB0YXNrIGhhbmRs
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzU1
NworCisgICAgICAgIEN1cmwgcmVzb3VyY2UgaGFuZGxpbmcgc2hvdWxkIGJlIHNoYXJlZCBieSBv
dGhlciBwYXJ0IG9mIEN1cmwKKyAgICAgICAgbmV0d29yayBzdGFjay4gQ3VybERvd25sb2FkTWFu
YWdlciBpcyBleHRyYWN0ZWQgYXMgc3RhbmQgYWxvbmUKKyAgICAgICAgQ3VybE1hbmFnZXIgc2lu
Z2xldG9uIGNsYXNzIHRvIGJlIHJlYWR5IGZvciBvdGhlcnMKKyAgICAgICAgKGkuZS4gUmVzb3Vy
Y2VIYW5kbGUpLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDb29raWVzRnJv
bURPTSk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9yU2Vzc2lvbik6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsRG93bmxvYWQ6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpz
dGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmNhbmNlbCk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmRpZFJlY2VpdmVIZWFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybERvd25sb2FkOjpoYW5kbGVDdXJsTXNnKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxEb3dubG9hZE1hbmFnZXI6OkN1cmxEb3dubG9hZE1hbmFnZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6fkN1cmxEb3dubG9hZE1hbmFnZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6YWRkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnJlbW92ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5hZ2VyOjpnZXRBY3RpdmVE
b3dubG9hZENvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1h
bmFnZXI6OmdldFBlbmRpbmdEb3dubG9hZENvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6c3RvcFRocmVhZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9wVGhyZWFkSWZJ
ZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnVw
ZGF0ZUhhbmRsZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2Fk
TWFuYWdlcjo6YWRkVG9DdXJsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3du
bG9hZE1hbmFnZXI6OnJlbW92ZUZyb21DdXJsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxEb3dubG9hZE1hbmFnZXI6OmRvd25sb2FkVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsRG93bmxvYWQ6OmdldEN1cmxIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERv
d25sb2FkTWFuYWdlcjo6Z2V0TXVsdGlIYW5kbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6cnVuVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnNldFJ1blRocmVhZCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6Q3VybE1hbmFnZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybE1hbmFnZXI6On5DdXJsTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsTWFu
YWdlcjo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxNYW5hZ2VyOjpyZW1vdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OmdldEFjdGl2ZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxNYW5hZ2VyOjpnZXRQZW5kaW5nQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bE1hbmFnZXI6OnN0b3BUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OnN0
b3BUaHJlYWRJZklkbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OnVwZGF0ZUhh
bmRsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OmFkZFRvQ3VybCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybE1hbmFnZXI6OndvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU2hhcmVk
UmVzb3VyY2VzOjptdXRleEZvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU2hhcmVkUmVzb3Vy
Y2VzOjpsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTaGFyZWRSZXNvdXJjZXM6OnVubG9j
ayk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OnNoYXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsTWFuYWdlcjo6Z2V0Q3VybFNoYXJlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxNYW5hZ2VyOjpnZXRNdWx0aUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsTWFu
YWdlcjo6cnVuVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxNYW5hZ2VyOjpzZXRSdW5U
aHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1h
bmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpSZXNv
dXJjZUhhbmRsZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5h
Z2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUxv
Y2FsUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3RlY3Rpb25TcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpnZXRDdXJsRWZmZWN0aXZlVVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OnNoYXJlZFJlc291cmNlTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3Vy
bF9sb2NrX2NhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmN1cmxfdW5sb2Nr
X2NhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFu
YWdlcjo6Z2V0Q3VybFNoYXJlSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmg6CisKKzIwMTctMDYtMTkgIEJhc3Vr
ZSBTdXp1a2kgIDxiYXN1a2VAbWFjLmNvbT4KKworICAgICAgICBbQ3VybF0gRXh0cmFjdCBDdXJs
RG93bmxvYWRNYW5hZ2VyIGFzIHNoYXJlZCBiYWNrZ3JvdW5kIHRhc2sgaGFuZGxlcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNTU3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChP
T1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnNldENvb2tpZXNGcm9tRE9NKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JTZXNzaW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZDo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsRG93bmxvYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZDo6Y2Fu
Y2VsKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2ZUhlYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmhhbmRsZUN1cmxNc2cpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxEb3dubG9hZDo6Z2V0Q3VybEhhbmRsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJs
TWFuYWdlcjo6Q3VybE1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6On5D
dXJsTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6YWRkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxNYW5hZ2VyOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bE1hbmFnZXI6OmdldEFjdGl2ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxNYW5hZ2Vy
OjpnZXRQZW5kaW5nQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OnN0YXJ0
VGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OnN0b3BUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OnN0b3BUaHJlYWRJZklkbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OmFkZFRvQ3VybCk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFn
ZXI6OndvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsVXRpbHM6OmdldEVmZmVj
dGl2ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU2hhcmVkUmVzb3VyY2VzOjptdXRleEZv
cik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU2hhcmVkUmVzb3VyY2VzOjpsb2NrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxTaGFyZWRSZXNvdXJjZXM6OnVubG9jayk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybE1hbmFnZXI6OnNoYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6
Z2V0Q3VybFNoYXJlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxNYW5hZ2VyOjpnZXRN
dWx0aUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6cnVuVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxNYW5hZ2VyOjpzZXRSdW5UaHJlYWQpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjp+UmVzb3VyY2VIYW5k
bGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUxvY2FsUmVjZWl2ZVJlc3BvbnNl
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1h
bmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oOgorCiAyMDE3LTA2LTEyICBNeWxlcyBDLiBN
YXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBFeHBhbmQg
c3lzdGVtLXVpIHRvIGluY2x1ZGUgZXZlcnkgaXRlbSBpbiB0aGUgQ29yZSBUZXh0IGNhc2NhZGUg
bGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggZWJlNTQ3OWZlNjlm
YTY2MTdkNmMzYmY3YmNjM2FjNWJkNTM4OGQ2ZC4uNTk3NzA1OTc3ZWU4OWUxYzAzYjI3YTg3OWIz
YmUwMjA3MGNkMTk2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWly
by5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0z
NCw2ICszNCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsQ2FjaGVFbnRyeS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybENhY2hlTWFuYWdlci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25s
b2FkLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvRE5TQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvRm9ybURhdGFTdHJlYW1DdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9NdWx0
aXBhcnRIYW5kbGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKaW5kZXggMTk2NDU1MGMxODU0MjYzNDEyY2E3MmI1
OWQ0ODE2NGQwY2M3ZjY5NS4uYjExYjA3MWFkY2Q4M2IxNzRkM2FkNGI5M2M3YTk2NWM4MTM0MDg3
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tp
ZUphckN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
b29raWVKYXJDdXJsLmNwcApAQCAtMjAsOSArMjAsMTAgQEAKICNpZiBVU0UoQ1VSTCkKIAogI2lu
Y2x1ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUgIkN1cmxNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJVUkwuaCIKIAogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0yNDYsNyArMjQ3LDcgQEAgdm9pZCBzZXRD
b29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBVUkwmLCBj
b25zdCBVUkwmIHVybCwKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgY2hhciogY29va2ll
SmFyRmlsZU5hbWUgPSBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCktPmdl
dENvb2tpZUphckZpbGVOYW1lKCk7Ci0gICAgQ1VSTFNIKiBjdXJsc2ggPSBSZXNvdXJjZUhhbmRs
ZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCktPmdldEN1cmxTaGFyZUhhbmRsZSgpOworICAgIENV
UkxTSCogY3VybHNoID0gQ3VybE1hbmFnZXI6OnNoYXJlZCgpLmdldEN1cmxTaGFyZUhhbmRsZSgp
OwogCiAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPT0tJRUpBUiwgY29va2ll
SmFyRmlsZU5hbWUpOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TSEFSRSwg
Y3VybHNoKTsKQEAgLTI3NSw3ICsyNzYsNyBAQCBzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JTZXNz
aW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYsIGNvbnN0CiAgICAg
aWYgKCFjdXJsKQogICAgICAgICByZXR1cm4gY29va2llczsKIAotICAgIENVUkxTSCogY3VybHNo
ID0gUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpLT5nZXRDdXJsU2hhcmVI
YW5kbGUoKTsKKyAgICBDVVJMU0gqIGN1cmxzaCA9IEN1cmxNYW5hZ2VyOjpzaGFyZWQoKS5nZXRD
dXJsU2hhcmVIYW5kbGUoKTsKIAogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9T
SEFSRSwgY3VybHNoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAppbmRleCA0NmNlMzBhNWEzM2UyNWVkN2VkOWYxZTYw
ZmZiNjE1ODUyZDIyMTYzLi5lZDE3ZTUwYWRjNDY1OWVkODg4ODVhYTUwNTA1OWM5OTlmOGIwNzNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bERvd25sb2FkLmNwcApAQCAtMzEsNyArMzEsNiBAQAogCiAjaW5jbHVkZSAiSFRUUEhlYWRlck5h
bWVzLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTQwLDE5NyAr
MzksOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0vLyBDdXJsRG93bmxvYWRNYW5hZ2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ3VybERvd25sb2FkTWFuYWdl
cjo6Q3VybERvd25sb2FkTWFuYWdlcigpCi17Ci0gICAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dM
T0JBTF9BTEwpOwotICAgIG1fY3VybE11bHRpSGFuZGxlID0gY3VybF9tdWx0aV9pbml0KCk7Ci19
Ci0KLUN1cmxEb3dubG9hZE1hbmFnZXI6On5DdXJsRG93bmxvYWRNYW5hZ2VyKCkKLXsKLSAgICBz
dG9wVGhyZWFkKCk7Ci0gICAgY3VybF9tdWx0aV9jbGVhbnVwKG1fY3VybE11bHRpSGFuZGxlKTsK
LSAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7Ci19Ci0KLWJvb2wgQ3VybERvd25sb2FkTWFuYWdl
cjo6YWRkKENVUkwqIGN1cmxIYW5kbGUpCi17Ci0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX211dGV4KTsKLSAgICAgICAgbV9wZW5kaW5nSGFuZGxlTGlzdC5hcHBlbmQoY3VybEhh
bmRsZSk7Ci0gICAgfQotCi0gICAgc3RhcnRUaHJlYWRJZk5lZWRlZCgpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgQ3VybERvd25sb2FkTWFuYWdlcjo6cmVtb3ZlKENVUkwqIGN1cmxI
YW5kbGUpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Ci0KLSAgICBtX3JlbW92
ZWRIYW5kbGVMaXN0LmFwcGVuZChjdXJsSGFuZGxlKTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1pbnQgQ3VybERvd25sb2FkTWFuYWdlcjo6Z2V0QWN0aXZlRG93bmxvYWRDb3VudCgpIGNvbnN0
Ci17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgcmV0dXJuIG1fYWN0aXZl
SGFuZGxlTGlzdC5zaXplKCk7Ci19Ci0KLWludCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpnZXRQZW5k
aW5nRG93bmxvYWRDb3VudCgpIGNvbnN0Ci17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRl
eCk7Ci0gICAgcmV0dXJuIG1fcGVuZGluZ0hhbmRsZUxpc3Quc2l6ZSgpOwotfQotCi12b2lkIEN1
cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQotewotICAgIGlmICghcnVu
VGhyZWFkKCkpIHsKLSAgICAgICAgaWYgKG1fdGhyZWFkKQotICAgICAgICAgICAgbV90aHJlYWQt
PndhaXRGb3JDb21wbGV0aW9uKCk7Ci0gICAgICAgIHNldFJ1blRocmVhZCh0cnVlKTsKLSAgICAg
ICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShkb3dubG9hZFRocmVhZCwgdGhpcywgImRvd25s
b2FkVGhyZWFkIik7Ci0gICAgfQotfQotCi12b2lkIEN1cmxEb3dubG9hZE1hbmFnZXI6OnN0b3BU
aHJlYWQoKQotewotICAgIHNldFJ1blRocmVhZChmYWxzZSk7Ci0KLSAgICBpZiAobV90aHJlYWQp
IHsKLSAgICAgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7Ci0gICAgICAgIG1fdGhy
ZWFkID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLXZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6c3Rv
cFRocmVhZElmSWRsZSgpCi17Ci0gICAgaWYgKCFnZXRBY3RpdmVEb3dubG9hZENvdW50KCkgJiYg
IWdldFBlbmRpbmdEb3dubG9hZENvdW50KCkpCi0gICAgICAgIHNldFJ1blRocmVhZChmYWxzZSk7
Ci19Ci0KLXZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6dXBkYXRlSGFuZGxlTGlzdCgpCi17Ci0g
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Ci0KLSAgICAvLyBSZW1vdmUgY3VybCBlYXN5
IGhhbmRsZXMgZnJvbSBtdWx0aSBsaXN0IAotICAgIGludCBzaXplID0gbV9yZW1vdmVkSGFuZGxl
TGlzdC5zaXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAg
ICAgcmVtb3ZlRnJvbUN1cmwobV9yZW1vdmVkSGFuZGxlTGlzdFswXSk7Ci0gICAgICAgIG1fcmVt
b3ZlZEhhbmRsZUxpc3QucmVtb3ZlKDApOwotICAgIH0KLQotICAgIC8vIEFkZCBwZW5kaW5nIGN1
cmwgZWFzeSBoYW5kbGVzIHRvIG11bHRpIGxpc3QgCi0gICAgc2l6ZSA9IG1fcGVuZGluZ0hhbmRs
ZUxpc3Quc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAg
ICAgIGFkZFRvQ3VybChtX3BlbmRpbmdIYW5kbGVMaXN0WzBdKTsKLSAgICAgICAgbV9wZW5kaW5n
SGFuZGxlTGlzdC5yZW1vdmUoMCk7Ci0gICAgfQotfQotCi1ib29sIEN1cmxEb3dubG9hZE1hbmFn
ZXI6OmFkZFRvQ3VybChDVVJMKiBjdXJsSGFuZGxlKQotewotICAgIENVUkxNY29kZSByZXR2YWwg
PSBjdXJsX211bHRpX2FkZF9oYW5kbGUobV9jdXJsTXVsdGlIYW5kbGUsIGN1cmxIYW5kbGUpOwot
ICAgIGlmIChyZXR2YWwgPT0gQ1VSTE1fT0spIHsKLSAgICAgICAgbV9hY3RpdmVIYW5kbGVMaXN0
LmFwcGVuZChjdXJsSGFuZGxlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpyZW1vdmVGcm9tQ3Vy
bChDVVJMKiBjdXJsSGFuZGxlKQotewotICAgIGludCBoYW5kbGVQb3MgPSBtX2FjdGl2ZUhhbmRs
ZUxpc3QuZmluZChjdXJsSGFuZGxlKTsKLQotICAgIGlmIChoYW5kbGVQb3MgPCAwKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBDVVJMTWNvZGUgcmV0dmFsID0gY3VybF9tdWx0aV9y
ZW1vdmVfaGFuZGxlKG1fY3VybE11bHRpSGFuZGxlLCBjdXJsSGFuZGxlKTsKLSAgICBpZiAocmV0
dmFsID09IENVUkxNX09LKSB7Ci0gICAgICAgIG1fYWN0aXZlSGFuZGxlTGlzdC5yZW1vdmUoaGFu
ZGxlUG9zKTsKLSAgICAgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybEhhbmRsZSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ3VybERv
d25sb2FkTWFuYWdlcjo6ZG93bmxvYWRUaHJlYWQodm9pZCogZGF0YSkKLXsKLSAgICBDdXJsRG93
bmxvYWRNYW5hZ2VyKiBkb3dubG9hZE1hbmFnZXIgPSByZWludGVycHJldF9jYXN0PEN1cmxEb3du
bG9hZE1hbmFnZXIqPihkYXRhKTsKLQotICAgIHdoaWxlIChkb3dubG9hZE1hbmFnZXItPnJ1blRo
cmVhZCgpKSB7Ci0KLSAgICAgICAgZG93bmxvYWRNYW5hZ2VyLT51cGRhdGVIYW5kbGVMaXN0KCk7
Ci0KLSAgICAgICAgLy8gUmV0cnkgJ3NlbGVjdCcgaWYgaXQgd2FzIGludGVycnVwdGVkIGJ5IGEg
cHJvY2VzcyBzaWduYWwuCi0gICAgICAgIGludCByYyA9IDA7Ci0gICAgICAgIGRvIHsKLSAgICAg
ICAgICAgIGZkX3NldCBmZHJlYWQ7Ci0gICAgICAgICAgICBmZF9zZXQgZmR3cml0ZTsKLSAgICAg
ICAgICAgIGZkX3NldCBmZGV4Y2VwOwotCi0gICAgICAgICAgICBpbnQgbWF4ZmQgPSAwOwotCi0g
ICAgICAgICAgICBjb25zdCBpbnQgc2VsZWN0VGltZW91dE1TID0gNTsKLQotICAgICAgICAgICAg
c3RydWN0IHRpbWV2YWwgdGltZW91dDsKLSAgICAgICAgICAgIHRpbWVvdXQudHZfc2VjID0gMDsK
LSAgICAgICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IHNlbGVjdFRpbWVvdXRNUyAqIDEwMDA7IC8v
IHNlbGVjdCB3YWl0cyBtaWNyb3NlY29uZHMKLQotICAgICAgICAgICAgRkRfWkVSTygmZmRyZWFk
KTsKLSAgICAgICAgICAgIEZEX1pFUk8oJmZkd3JpdGUpOwotICAgICAgICAgICAgRkRfWkVSTygm
ZmRleGNlcCk7Ci0gICAgICAgICAgICBjdXJsX211bHRpX2Zkc2V0KGRvd25sb2FkTWFuYWdlci0+
Z2V0TXVsdGlIYW5kbGUoKSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQpOwot
ICAgICAgICAgICAgLy8gV2hlbiB0aGUgMyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBlbXB0eSwgd2lu
c29jayB3aWxsIHJldHVybiAtMQotICAgICAgICAgICAgLy8gYW5kIGJhaWwgb3V0LCBzdG9wcGlu
ZyB0aGUgZmlsZSBkb3dubG9hZC4gU28gbWFrZSBzdXJlIHdlCi0gICAgICAgICAgICAvLyBoYXZl
IHZhbGlkIGZpbGUgZGVzY3JpcHRvcnMgYmVmb3JlIGNhbGxpbmcgc2VsZWN0LgotICAgICAgICAg
ICAgaWYgKG1heGZkID49IDApCi0gICAgICAgICAgICAgICAgcmMgPSA6OnNlbGVjdChtYXhmZCAr
IDEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVvdXQpOwotICAgICAgICB9IHdo
aWxlIChyYyA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7Ci0KLSAgICAgICAgaW50IGFjdGl2ZURv
d25sb2FkQ291bnQgPSAwOwotICAgICAgICB3aGlsZSAoY3VybF9tdWx0aV9wZXJmb3JtKGRvd25s
b2FkTWFuYWdlci0+Z2V0TXVsdGlIYW5kbGUoKSwgJmFjdGl2ZURvd25sb2FkQ291bnQpID09IENV
UkxNX0NBTExfTVVMVElfUEVSRk9STSkgeyB9Ci0KLSAgICAgICAgaW50IG1lc3NhZ2VzSW5RdWV1
ZSA9IDA7Ci0gICAgICAgIENVUkxNc2cqIG1zZyA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKGRvd25s
b2FkTWFuYWdlci0+Z2V0TXVsdGlIYW5kbGUoKSwgJm1lc3NhZ2VzSW5RdWV1ZSk7Ci0KLSAgICAg
ICAgaWYgKCFtc2cpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDdXJsRG93bmxv
YWQqIGRvd25sb2FkID0gMDsKLSAgICAgICAgQ1VSTGNvZGUgZXJyID0gY3VybF9lYXN5X2dldGlu
Zm8obXNnLT5lYXN5X2hhbmRsZSwgQ1VSTElORk9fUFJJVkFURSwgJmRvd25sb2FkKTsKLSAgICAg
ICAgVU5VU0VEX1BBUkFNKGVycik7Ci0KLSAgICAgICAgaWYgKG1zZy0+bXNnID09IENVUkxNU0df
RE9ORSkgewotICAgICAgICAgICAgaWYgKGRvd25sb2FkKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG1zZy0+ZGF0YS5yZXN1bHQgPT0gQ1VSTEVfT0spIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbZG93bmxvYWRdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvd25s
b2FkLT5kaWRGaW5pc2goKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkLT5kZXJl
ZigpOyAvLyBUaGlzIG1hdGNoZXMgdGhlIHJlZigpIGluIEN1cmxEb3dubG9hZDo6c3RhcnQoKS4K
LSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZG93bmxvYWRdIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRvd25sb2FkLT5kaWRGYWlsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkb3dubG9hZC0+ZGVyZWYoKTsgLy8gVGhpcyBtYXRjaGVzIHRoZSByZWYoKSBpbiBDdXJsRG93
bmxvYWQ6OnN0YXJ0KCkuCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRvd25sb2FkTWFuYWdlci0+cmVtb3ZlRnJv
bUN1cmwobXNnLT5lYXN5X2hhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkb3dubG9hZE1h
bmFnZXItPnN0b3BUaHJlYWRJZklkbGUoKTsKLSAgICB9Ci19Ci0KIC8vIEN1cmxEb3dubG9hZCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi1DdXJsRG93bmxvYWRNYW5hZ2VyIEN1cmxEb3dubG9hZDo6bV9k
b3dubG9hZE1hbmFnZXI7Ci0KIEN1cmxEb3dubG9hZDo6Q3VybERvd25sb2FkKCkgPSBkZWZhdWx0
OwogCiBDdXJsRG93bmxvYWQ6On5DdXJsRG93bmxvYWQoKQpAQCAtMjc1LDcgKzg1LDcgQEAgdm9p
ZCBDdXJsRG93bmxvYWQ6OmluaXQoQ3VybERvd25sb2FkTGlzdGVuZXIqIGxpc3RlbmVyLCBjb25z
dCBVUkwmIHVybCkKICAgICBpZiAoY2VydFBhdGgpCiAgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQo
bV9jdXJsSGFuZGxlLCBDVVJMT1BUX0NBSU5GTywgY2VydFBhdGgpOwogCi0gICAgQ1VSTFNIKiBj
dXJsc2ggPSBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCktPmdldEN1cmxT
aGFyZUhhbmRsZSgpOworICAgIENVUkxTSCogY3VybHNoID0gQ3VybE1hbmFnZXI6OnNoYXJlZCgp
LmdldEN1cmxTaGFyZUhhbmRsZSgpOwogICAgIGlmIChjdXJsc2gpCiAgICAgICAgIGN1cmxfZWFz
eV9zZXRvcHQobV9jdXJsSGFuZGxlLCBDVVJMT1BUX1NIQVJFLCBjdXJsc2gpOwogCkBAIC0yOTcs
MTIgKzEwNywxMiBAQCB2b2lkIEN1cmxEb3dubG9hZDo6aW5pdChDdXJsRG93bmxvYWRMaXN0ZW5l
ciogbGlzdGVuZXIsIFJlc291cmNlSGFuZGxlKiwgY29uc3QgUgogYm9vbCBDdXJsRG93bmxvYWQ6
OnN0YXJ0KCkKIHsKICAgICByZWYoKTsgLy8gQ3VybERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRU
aHJlYWQgd2lsbCBjYWxsIGRlcmVmIHdoZW4gdGhlIGRvd25sb2FkIGhhcyBmaW5pc2hlZC4KLSAg
ICByZXR1cm4gbV9kb3dubG9hZE1hbmFnZXIuYWRkKG1fY3VybEhhbmRsZSk7CisgICAgcmV0dXJu
IEN1cmxNYW5hZ2VyOjpzaGFyZWQoKS5hZGQobV9jdXJsSGFuZGxlKTsKIH0KIAogYm9vbCBDdXJs
RG93bmxvYWQ6OmNhbmNlbCgpCiB7Ci0gICAgcmV0dXJuIG1fZG93bmxvYWRNYW5hZ2VyLnJlbW92
ZShtX2N1cmxIYW5kbGUpOworICAgIHJldHVybiBDdXJsTWFuYWdlcjo6c2hhcmVkKCkucmVtb3Zl
KG1fY3VybEhhbmRsZSk7CiB9CiAKIFN0cmluZyBDdXJsRG93bmxvYWQ6OmdldFRlbXBQYXRoKCkg
Y29uc3QKQEAgLTM5Myw3ICsyMDMsNyBAQCB2b2lkIEN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2ZUhl
YWRlcihjb25zdCBTdHJpbmcmIGhlYWRlcikKICAgICAgICAgVU5VU0VEX1BBUkFNKGVycik7CiAK
ICAgICAgICAgaWYgKGh0dHBDb2RlID49IDIwMCAmJiBodHRwQ29kZSA8IDMwMCkgewotICAgICAg
ICAgICAgVVJMIHVybCA9IGdldEN1cmxFZmZlY3RpdmVVUkwobV9jdXJsSGFuZGxlKTsKKyAgICAg
ICAgICAgIFVSTCB1cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChtX2N1cmxIYW5kbGUp
OwogICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgdXJsID0gdXJsLmlzb2xhdGVk
Q29weSgpLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKICAgICAgICAgICAgICAg
ICBtX3Jlc3BvbnNlLnNldFVSTCh1cmwpOwogICAgICAgICAgICAgICAgIG1fcmVzcG9uc2Uuc2V0
TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShtX3Jlc3BvbnNlLmh0dHBIZWFk
ZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKSk7CkBAIC01MDYsNiArMzE2LDI5
IEBAIHZvaWQgQ3VybERvd25sb2FkOjpyZWNlaXZlZFJlc3BvbnNlQ2FsbGJhY2soQ3VybERvd25s
b2FkKiBkb3dubG9hZCkKICAgICAgICAgZG93bmxvYWQtPmRpZFJlY2VpdmVSZXNwb25zZSgpOwog
fQogCitDdXJsSm9iQWN0aW9uIEN1cmxEb3dubG9hZDo6aGFuZGxlQ3VybE1zZyhDVVJMTXNnKiBt
c2cpCit7CisgICAgc3dpdGNoIChtc2ctPm1zZykgeworICAgIGNhc2UgQ1VSTE1TR19ET05FOiB7
CisgICAgICAgIGlmIChtc2ctPmRhdGEucmVzdWx0ID09IENVUkxFX09LKSB7CisgICAgICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgICAgICAgICAgZGlkRmluaXNoKCk7
CisgICAgICAgICAgICAgICAgZGVyZWYoKTsgLy8gVGhpcyBtYXRjaGVzIHRoZSByZWYoKSBpbiBD
dXJsRG93bmxvYWQ6OnN0YXJ0KCkuCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKKyAgICAgICAgICAgICAgICBk
aWRGYWlsKCk7CisgICAgICAgICAgICAgICAgZGVyZWYoKTsgLy8gVGhpcyBtYXRjaGVzIHRoZSBy
ZWYoKSBpbiBDdXJsRG93bmxvYWQ6OnN0YXJ0KCkuCisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gQ3VybEpvYkFjdGlvbjo6RmluaXNoZWQ7CisgICAgfQorICAgIGRl
ZmF1bHQ6IHsKKyAgICAgICAgcmV0dXJuIEN1cmxKb2JBY3Rpb246Ok5vbmU7CisgICAgfQorICAg
IH0KK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaAppbmRleCAwZWYzMTkzMmU2OTdhOWFhYTRiM2FkNDMw
NzkzZjRmMTVmZDJlYWJmLi5jZjVjMzdjZThmOWE2ZDEyNjcxMjc0YjJiZWQyMzQ0NjM3ZGIyMDM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxE
b3dubG9hZC5oCkBAIC0zNiw0NyArMzYsMTAgQEAKICNpbmNsdWRlIDx3aW5zb2NrMi5oPgogI2Vu
ZGlmCiAKLSNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlICJDdXJsTWFuYWdlci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEN1cmxEb3dubG9hZE1hbmFnZXIgewotcHVi
bGljOgotICAgIEN1cmxEb3dubG9hZE1hbmFnZXIoKTsKLSAgICB+Q3VybERvd25sb2FkTWFuYWdl
cigpOwotCi0gICAgYm9vbCBhZGQoQ1VSTCogY3VybEhhbmRsZSk7Ci0gICAgYm9vbCByZW1vdmUo
Q1VSTCogY3VybEhhbmRsZSk7Ci0KLSAgICBpbnQgZ2V0QWN0aXZlRG93bmxvYWRDb3VudCgpIGNv
bnN0OwotICAgIGludCBnZXRQZW5kaW5nRG93bmxvYWRDb3VudCgpIGNvbnN0OwotCi1wcml2YXRl
OgotICAgIHZvaWQgc3RhcnRUaHJlYWRJZk5lZWRlZCgpOwotICAgIHZvaWQgc3RvcFRocmVhZCgp
OwotICAgIHZvaWQgc3RvcFRocmVhZElmSWRsZSgpOwotCi0gICAgdm9pZCB1cGRhdGVIYW5kbGVM
aXN0KCk7Ci0KLSAgICBDVVJMTSogZ2V0TXVsdGlIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2N1
cmxNdWx0aUhhbmRsZTsgfQotCi0gICAgYm9vbCBydW5UaHJlYWQoKSBjb25zdCB7IExvY2tIb2xk
ZXIgbG9ja2VyKG1fbXV0ZXgpOyByZXR1cm4gbV9ydW5UaHJlYWQ7IH0KLSAgICB2b2lkIHNldFJ1
blRocmVhZChib29sIHJ1blRocmVhZCkgeyBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsgbV9y
dW5UaHJlYWQgPSBydW5UaHJlYWQ7IH0KLQotICAgIGJvb2wgYWRkVG9DdXJsKENVUkwqIGN1cmxI
YW5kbGUpOwotICAgIGJvb2wgcmVtb3ZlRnJvbUN1cmwoQ1VSTCogY3VybEhhbmRsZSk7Ci0KLSAg
ICBzdGF0aWMgdm9pZCBkb3dubG9hZFRocmVhZCh2b2lkKiBkYXRhKTsKLQotICAgIFJlZlB0cjxU
aHJlYWQ+IG1fdGhyZWFkOwotICAgIENVUkxNKiBtX2N1cmxNdWx0aUhhbmRsZSB7IG51bGxwdHIg
fTsKLSAgICBWZWN0b3I8Q1VSTCo+IG1fcGVuZGluZ0hhbmRsZUxpc3Q7Ci0gICAgVmVjdG9yPENV
UkwqPiBtX2FjdGl2ZUhhbmRsZUxpc3Q7Ci0gICAgVmVjdG9yPENVUkwqPiBtX3JlbW92ZWRIYW5k
bGVMaXN0OwotICAgIG11dGFibGUgTG9jayBtX211dGV4OwotICAgIGJvb2wgbV9ydW5UaHJlYWQg
eyBmYWxzZSB9OwotfTsKLQogY2xhc3MgQ3VybERvd25sb2FkTGlzdGVuZXIgewogcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoKSB7IH0KQEAgLTg1LDcgKzQ4LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKCkgeyB9CiB9OwogCi1jbGFzcyBD
dXJsRG93bmxvYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q3VybERvd25sb2FkPiB7
CitjbGFzcyBDdXJsRG93bmxvYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q3VybERv
d25sb2FkPiwgcHVibGljIEN1cmxKb2IgewogcHVibGljOgogICAgIEN1cmxEb3dubG9hZCgpOwog
ICAgIH5DdXJsRG93bmxvYWQoKTsKQEAgLTEwNyw2ICs3MCw5IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2V0RGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikgeyBtX2Rlc3RpbmF0
aW9uID0gZGVzdGluYXRpb247IH0KIAorICAgIHZpcnR1YWwgQ1VSTCogZ2V0Q3VybEhhbmRsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3VybEhhbmRsZTsgfTsKKyAgICB2aXJ0dWFsIEN1cmxKb2JBY3Rp
b24gaGFuZGxlQ3VybE1zZyhDVVJMTXNnKik7CisKIHByaXZhdGU6CiAgICAgdm9pZCBjbG9zZUZp
bGUoKTsKICAgICB2b2lkIG1vdmVGaWxlVG9EZXN0aW5hdGlvbigpOwpAQCAtMTQyLDEwICsxMDgs
NiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kZWxldGVzRmlsZVVwb25GYWlsdXJlIHsgZmFsc2Ug
fTsKICAgICBtdXRhYmxlIExvY2sgbV9tdXRleDsKICAgICBDdXJsRG93bmxvYWRMaXN0ZW5lciog
bV9saXN0ZW5lciB7IG51bGxwdHIgfTsKLQotICAgIHN0YXRpYyBDdXJsRG93bmxvYWRNYW5hZ2Vy
IG1fZG93bmxvYWRNYW5hZ2VyOwotCi0gICAgZnJpZW5kIGNsYXNzIEN1cmxEb3dubG9hZE1hbmFn
ZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjJlZWY2NTJjZmY5YTlhYzUxNWYxNTI4
MDYxZTQxODNiMzUyNmEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQ1VSTCkKKyNpbmNsdWRlICJDdXJsTWFuYWdlci5oIgorCisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEN1cmxTaGFyZWRSZXNvdXJjZXMgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGxvY2soQ1VS
TCosIGN1cmxfbG9ja19kYXRhLCBjdXJsX2xvY2tfYWNjZXNzLCB2b2lkKik7CisgICAgc3RhdGlj
IHZvaWQgdW5sb2NrKENVUkwqLCBjdXJsX2xvY2tfZGF0YSwgdm9pZCopOworCitwcml2YXRlOgor
ICAgIHN0YXRpYyBMb2NrKiBtdXRleEZvcihjdXJsX2xvY2tfZGF0YSk7Cit9OworCisvLyBDdXJs
RG93bmxvYWRNYW5hZ2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3VybE1hbmFnZXI6OkN1cmxNYW5hZ2VyKCkK
K3sKKyAgICBjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisgICAgbV9jdXJsTXVs
dGlIYW5kbGUgPSBjdXJsX211bHRpX2luaXQoKTsKKyAgICBtX2N1cmxTaGFyZUhhbmRsZSA9IGN1
cmxfc2hhcmVfaW5pdCgpOworICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxl
LCBDVVJMU0hPUFRfU0hBUkUsIENVUkxfTE9DS19EQVRBX0NPT0tJRSk7CisgICAgY3VybF9zaGFy
ZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9TSEFSRSwgQ1VSTF9MT0NLX0RB
VEFfRE5TKTsKKyAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNI
T1BUX0xPQ0tGVU5DLCBDdXJsU2hhcmVkUmVzb3VyY2VzOjpsb2NrKTsKKyAgICBjdXJsX3NoYXJl
X3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX1VOTE9DS0ZVTkMsIEN1cmxTaGFy
ZWRSZXNvdXJjZXM6OnVubG9jayk7Cit9CisKK0N1cmxNYW5hZ2VyOjp+Q3VybE1hbmFnZXIoKQor
eworICAgIHN0b3BUaHJlYWQoKTsKKyAgICBjdXJsX211bHRpX2NsZWFudXAobV9jdXJsTXVsdGlI
YW5kbGUpOworICAgIGN1cmxfc2hhcmVfY2xlYW51cChtX2N1cmxTaGFyZUhhbmRsZSk7CisgICAg
Y3VybF9nbG9iYWxfY2xlYW51cCgpOworfQorCitib29sIEN1cmxNYW5hZ2VyOjphZGQoQ1VSTCog
Y3VybEhhbmRsZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgbV9wZW5kaW5nSGFuZGxl
TGlzdC5hcHBlbmQoY3VybEhhbmRsZSk7CisgICAgfQorCisgICAgc3RhcnRUaHJlYWRJZk5lZWRl
ZCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ3VybE1hbmFnZXI6OnJlbW92ZShD
VVJMKiBjdXJsSGFuZGxlKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworCisg
ICAgbV9yZW1vdmVkSGFuZGxlTGlzdC5hcHBlbmQoY3VybEhhbmRsZSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworaW50IEN1cmxNYW5hZ2VyOjpnZXRBY3RpdmVDb3VudCgpIGNvbnN0Cit7Cisg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgcmV0dXJuIG1fYWN0aXZlSGFuZGxl
TGlzdC5zaXplKCk7Cit9CisKK2ludCBDdXJsTWFuYWdlcjo6Z2V0UGVuZGluZ0NvdW50KCkgY29u
c3QKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICByZXR1cm4gbV9wZW5k
aW5nSGFuZGxlTGlzdC5zaXplKCk7Cit9CisKK3ZvaWQgQ3VybE1hbmFnZXI6OnN0YXJ0VGhyZWFk
SWZOZWVkZWQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIXJ1
blRocmVhZCgpKSB7CisgICAgICAgIGlmIChtX3RocmVhZCkKKyAgICAgICAgICAgIG1fdGhyZWFk
LT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICBzZXRSdW5UaHJlYWQodHJ1ZSk7CisgICAg
ICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUod29ya2VyVGhyZWFkLCB0aGlzLCAiY3VybFRo
cmVhZCIpOworICAgIH0KK30KKwordm9pZCBDdXJsTWFuYWdlcjo6c3RvcFRocmVhZCgpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHNldFJ1blRocmVhZChmYWxzZSk7CisK
KyAgICBpZiAobV90aHJlYWQpIHsKKyAgICAgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9u
KCk7CisgICAgICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgQ3VybE1h
bmFnZXI6OnN0b3BUaHJlYWRJZklkbGUoKQoreworICAgIGlmICghZ2V0QWN0aXZlQ291bnQoKSAm
JiAhZ2V0UGVuZGluZ0NvdW50KCkpCisgICAgICAgIHNldFJ1blRocmVhZChmYWxzZSk7Cit9CisK
K3ZvaWQgQ3VybE1hbmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QoKQoreworICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fbXV0ZXgpOworCisgICAgLy8gUmVtb3ZlIGN1cmwgZWFzeSBoYW5kbGVzIGZyb20g
bXVsdGkgbGlzdCAKKyAgICBpbnQgc2l6ZSA9IG1fcmVtb3ZlZEhhbmRsZUxpc3Quc2l6ZSgpOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIHJlbW92ZUZyb21D
dXJsKG1fcmVtb3ZlZEhhbmRsZUxpc3RbMF0pOworICAgICAgICBtX3JlbW92ZWRIYW5kbGVMaXN0
LnJlbW92ZSgwKTsKKyAgICB9CisKKyAgICAvLyBBZGQgcGVuZGluZyBjdXJsIGVhc3kgaGFuZGxl
cyB0byBtdWx0aSBsaXN0IAorICAgIHNpemUgPSBtX3BlbmRpbmdIYW5kbGVMaXN0LnNpemUoKTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBhZGRUb0N1cmwo
bV9wZW5kaW5nSGFuZGxlTGlzdFswXSk7CisgICAgICAgIG1fcGVuZGluZ0hhbmRsZUxpc3QucmVt
b3ZlKDApOworICAgIH0KK30KKworYm9vbCBDdXJsTWFuYWdlcjo6YWRkVG9DdXJsKENVUkwqIGN1
cmxIYW5kbGUpCit7CisgICAgQ1VSTE1jb2RlIHJldHZhbCA9IGN1cmxfbXVsdGlfYWRkX2hhbmRs
ZShtX2N1cmxNdWx0aUhhbmRsZSwgY3VybEhhbmRsZSk7CisgICAgaWYgKHJldHZhbCA9PSBDVVJM
TV9PSykgeworICAgICAgICBtX2FjdGl2ZUhhbmRsZUxpc3QuYXBwZW5kKGN1cmxIYW5kbGUpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEN1cmxNYW5hZ2VyOjpyZW1vdmVGcm9tQ3VybChDVVJMKiBjdXJsSGFuZGxlKQoreworICAgIGlu
dCBoYW5kbGVQb3MgPSBtX2FjdGl2ZUhhbmRsZUxpc3QuZmluZChjdXJsSGFuZGxlKTsKKworICAg
IGlmIChoYW5kbGVQb3MgPCAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBDVVJM
TWNvZGUgcmV0dmFsID0gY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKG1fY3VybE11bHRpSGFuZGxl
LCBjdXJsSGFuZGxlKTsKKyAgICBpZiAocmV0dmFsID09IENVUkxNX09LKSB7CisgICAgICAgIG1f
YWN0aXZlSGFuZGxlTGlzdC5yZW1vdmUoaGFuZGxlUG9zKTsKKyAgICAgICAgY3VybF9lYXN5X2Ns
ZWFudXAoY3VybEhhbmRsZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ3VybE1hbmFnZXI6OndvcmtlclRocmVhZCh2b2lkKiBkYXRh
KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgQ3VybE1hbmFnZXIqIG1h
bmFnZXIgPSByZWludGVycHJldF9jYXN0PEN1cmxNYW5hZ2VyKj4oZGF0YSk7CisKKyAgICB3aGls
ZSAobWFuYWdlci0+cnVuVGhyZWFkKCkpIHsKKworICAgICAgICBtYW5hZ2VyLT51cGRhdGVIYW5k
bGVMaXN0KCk7CisKKyAgICAgICAgLy8gUmV0cnkgJ3NlbGVjdCcgaWYgaXQgd2FzIGludGVycnVw
dGVkIGJ5IGEgcHJvY2VzcyBzaWduYWwuCisgICAgICAgIGludCByYyA9IDA7CisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIGZkX3NldCBmZHJlYWQ7CisgICAgICAgICAgICBmZF9zZXQgZmR3cml0
ZTsKKyAgICAgICAgICAgIGZkX3NldCBmZGV4Y2VwOworCisgICAgICAgICAgICBpbnQgbWF4ZmQg
PSAwOworCisgICAgICAgICAgICBjb25zdCBpbnQgc2VsZWN0VGltZW91dE1TID0gNTsKKworICAg
ICAgICAgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICAgICAgICAgIHRpbWVvdXQudHZf
c2VjID0gMDsKKyAgICAgICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IHNlbGVjdFRpbWVvdXRNUyAq
IDEwMDA7IC8vIHNlbGVjdCB3YWl0cyBtaWNyb3NlY29uZHMKKworICAgICAgICAgICAgRkRfWkVS
TygmZmRyZWFkKTsKKyAgICAgICAgICAgIEZEX1pFUk8oJmZkd3JpdGUpOworICAgICAgICAgICAg
RkRfWkVSTygmZmRleGNlcCk7CisgICAgICAgICAgICBjdXJsX211bHRpX2Zkc2V0KG1hbmFnZXIt
PmdldE11bHRpSGFuZGxlKCksICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJm1heGZkKTsK
KyAgICAgICAgICAgIC8vIFdoZW4gdGhlIDMgZmlsZSBkZXNjcmlwdG9ycyBhcmUgZW1wdHksIHdp
bnNvY2sgd2lsbCByZXR1cm4gLTEKKyAgICAgICAgICAgIC8vIGFuZCBiYWlsIG91dCwgc3RvcHBp
bmcgdGhlIGZpbGUgZG93bmxvYWQuIFNvIG1ha2Ugc3VyZSB3ZQorICAgICAgICAgICAgLy8gaGF2
ZSB2YWxpZCBmaWxlIGRlc2NyaXB0b3JzIGJlZm9yZSBjYWxsaW5nIHNlbGVjdC4KKyAgICAgICAg
ICAgIGlmIChtYXhmZCA+PSAwKQorICAgICAgICAgICAgICAgIHJjID0gOjpzZWxlY3QobWF4ZmQg
KyAxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZ0aW1lb3V0KTsKKyAgICAgICAgfSB3
aGlsZSAocmMgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworCisgICAgICAgIGludCBhY3RpdmVD
b3VudCA9IDA7CisgICAgICAgIHdoaWxlIChjdXJsX211bHRpX3BlcmZvcm0obWFuYWdlci0+Z2V0
TXVsdGlIYW5kbGUoKSwgJmFjdGl2ZUNvdW50KSA9PSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0p
IHsgfQorCisgICAgICAgIGludCBtZXNzYWdlc0luUXVldWUgPSAwOworICAgICAgICBDVVJMTXNn
KiBtc2cgPSBjdXJsX211bHRpX2luZm9fcmVhZChtYW5hZ2VyLT5nZXRNdWx0aUhhbmRsZSgpLCAm
bWVzc2FnZXNJblF1ZXVlKTsKKworICAgICAgICBpZiAoIW1zZykKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisKKyAgICAgICAgQ3VybEpvYiogam9iID0gbnVsbHB0cjsKKyAgICAgICAgQ1VSTGNv
ZGUgZXJyID0gY3VybF9lYXN5X2dldGluZm8obXNnLT5lYXN5X2hhbmRsZSwgQ1VSTElORk9fUFJJ
VkFURSwgJmpvYik7CisgICAgICAgIFVOVVNFRF9QQVJBTShlcnIpOworICAgICAgICBBU1NFUlQo
am9iKTsKKworICAgICAgICBDdXJsSm9iQWN0aW9uIGFjdGlvbiA9IGpvYi0+aGFuZGxlQ3VybE1z
Zyhtc2cpOworCisgICAgICAgIGlmIChhY3Rpb24gPT0gQ3VybEpvYkFjdGlvbjo6RmluaXNoZWQp
CisgICAgICAgICAgICBtYW5hZ2VyLT5yZW1vdmVGcm9tQ3VybChtc2ctPmVhc3lfaGFuZGxlKTsK
KworICAgICAgICBtYW5hZ2VyLT5zdG9wVGhyZWFkSWZJZGxlKCk7CisgICAgfQorfQorCisvLyBD
VVJMIFV0aWxpdGllcworCitVUkwgQ3VybFV0aWxzOjpnZXRFZmZlY3RpdmVVUkwoQ1VSTCogaGFu
ZGxlKQoreworICAgIGNvbnN0IGNoYXIqIHVybDsKKyAgICBDVVJMY29kZSBlcnIgPSBjdXJsX2Vh
c3lfZ2V0aW5mbyhoYW5kbGUsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZ1cmwpOworICAgIGlm
IChDVVJMRV9PSyAhPSBlcnIpCisgICAgICAgIHJldHVybiBVUkwoKTsKKyAgICByZXR1cm4gVVJM
KFVSTCgpLCB1cmwpOworfQorCisvLyBTaGFyZWQgUmVzb3VyY2UgbWFuYWdlbWVudCA9PT09PT09
PT09PT09PT09PT09PT09PQorCitMb2NrKiBDdXJsU2hhcmVkUmVzb3VyY2VzOjptdXRleEZvcihj
dXJsX2xvY2tfZGF0YSBkYXRhKQoreworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NB
TChMb2NrLCBjb29raWVNdXRleCwgKCkpOworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19M
T0NBTChMb2NrLCBkbnNNdXRleCwgKCkpOworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19M
T0NBTChMb2NrLCBzaGFyZU11dGV4LCAoKSk7CisKKyAgICBzd2l0Y2ggKGRhdGEpIHsKKyAgICBj
YXNlIENVUkxfTE9DS19EQVRBX0NPT0tJRToKKyAgICAgICAgcmV0dXJuICZjb29raWVNdXRleDsK
KyAgICBjYXNlIENVUkxfTE9DS19EQVRBX0ROUzoKKyAgICAgICAgcmV0dXJuICZkbnNNdXRleDsK
KyAgICBjYXNlIENVUkxfTE9DS19EQVRBX1NIQVJFOgorICAgICAgICByZXR1cm4gJnNoYXJlTXV0
ZXg7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KK30KKworLy8gbGliY3VybCBkb2VzIG5vdCBpbXBsZW1l
bnQgaXRzIG93biB0aHJlYWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuCisvLyB0aGVzZSB0
d28gZnVuY3Rpb25zIHByb3ZpZGUgbXV0ZXhlcyBmb3IgY29va2llcywgYW5kIGZvciB0aGUgZ2xv
YmFsIEROUworLy8gY2FjaGUuCit2b2lkIEN1cmxTaGFyZWRSZXNvdXJjZXM6OmxvY2soQ1VSTCog
LyogaGFuZGxlICovLCBjdXJsX2xvY2tfZGF0YSBkYXRhLCBjdXJsX2xvY2tfYWNjZXNzIC8qIGFj
Y2VzcyAqLywgdm9pZCogLyogdXNlclB0ciAqLykKK3sKKyAgICBpZiAoTG9jayogbXV0ZXggPSBD
dXJsU2hhcmVkUmVzb3VyY2VzOjptdXRleEZvcihkYXRhKSkKKyAgICAgICAgbXV0ZXgtPmxvY2so
KTsKK30KKwordm9pZCBDdXJsU2hhcmVkUmVzb3VyY2VzOjp1bmxvY2soQ1VSTCogLyogaGFuZGxl
ICovLCBjdXJsX2xvY2tfZGF0YSBkYXRhLCB2b2lkKiAvKiB1c2VyUHRyICovKQoreworICAgIGlm
IChMb2NrKiBtdXRleCA9IEN1cmxTaGFyZWRSZXNvdXJjZXM6Om11dGV4Rm9yKGRhdGEpKQorICAg
ICAgICBtdXRleC0+dW5sb2NrKCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4
OGVkZTNiYTIwYTFhM2VhMWRlMmVhMTQ4YTI4N2UyOTY2MzI5NzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIuaApAQCAt
MCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgUExBVEZPUk0o
V0lOKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlm
CisKKyNpbmNsdWRlICJVUkwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNz
IEN1cmxKb2JBY3Rpb24geyBOb25lLCBGaW5pc2hlZCB9OworCitjbGFzcyBDdXJsSm9iIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIENVUkwqIGdldEN1cmxIYW5kbGUoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBDdXJsSm9iQWN0aW9uIGhhbmRsZUN1cmxNc2coQ1VSTE1zZyopID0gMDsKK307CisK
K2NsYXNzIEN1cmxNYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQ3VybE1hbmFnZXImIHNo
YXJlZCgpCisgICAgeworICAgICAgICAvLyBTaW5jZSBpdCdzIGEgc3RhdGljIHZhcmlhYmxlLCBp
ZiB0aGUgY2xhc3MgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLAorICAgICAgICAvLyBJdCB3b24n
dCBiZSBjcmVhdGVkIGFnYWluLgorICAgICAgICAvLyBBbmQgaXQgKippcyoqIHRocmVhZC1zYWZl
IGluIEMrKzExLgorCisgICAgICAgIHN0YXRpYyBDdXJsTWFuYWdlciBzaGFyZWQ7CisgICAgICAg
IHJldHVybiBzaGFyZWQ7CisgICAgfQorCisgICAgQ3VybE1hbmFnZXIoKTsKKyAgICB2aXJ0dWFs
IH5DdXJsTWFuYWdlcigpOworCisgICAgYm9vbCBhZGQoQ1VSTCogY3VybEhhbmRsZSk7CisgICAg
Ym9vbCByZW1vdmUoQ1VSTCogY3VybEhhbmRsZSk7CisKKyAgICBpbnQgZ2V0QWN0aXZlQ291bnQo
KSBjb25zdDsKKyAgICBpbnQgZ2V0UGVuZGluZ0NvdW50KCkgY29uc3Q7CisKKyAgICBDVVJMU0gq
IGdldEN1cmxTaGFyZUhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VybFNoYXJlSGFuZGxlOyB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCBzdGFydFRocmVhZElmTmVlZGVkKCk7CisgICAgdm9pZCBz
dG9wVGhyZWFkKCk7CisgICAgdm9pZCBzdG9wVGhyZWFkSWZJZGxlKCk7CisKKyAgICB2b2lkIHVw
ZGF0ZUhhbmRsZUxpc3QoKTsKKworICAgIENVUkxNKiBnZXRNdWx0aUhhbmRsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VybE11bHRpSGFuZGxlOyB9CisKKyAgICBib29sIHJ1blRocmVhZCgpIGNvbnN0
IHsgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7IHJldHVybiBtX3J1blRocmVhZDsgfQorICAg
IHZvaWQgc2V0UnVuVGhyZWFkKGJvb2wgcnVuVGhyZWFkKSB7IExvY2tIb2xkZXIgbG9ja2VyKG1f
bXV0ZXgpOyBtX3J1blRocmVhZCA9IHJ1blRocmVhZDsgfQorCisgICAgYm9vbCBhZGRUb0N1cmwo
Q1VSTCogY3VybEhhbmRsZSk7CisgICAgYm9vbCByZW1vdmVGcm9tQ3VybChDVVJMKiBjdXJsSGFu
ZGxlKTsKKworICAgIHN0YXRpYyB2b2lkIHdvcmtlclRocmVhZCh2b2lkKiBkYXRhKTsKKworICAg
IFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOworICAgIENVUkxNKiBtX2N1cmxNdWx0aUhhbmRsZSB7
IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8Q1VSTCo+IG1fcGVuZGluZ0hhbmRsZUxpc3Q7CisgICAg
VmVjdG9yPENVUkwqPiBtX2FjdGl2ZUhhbmRsZUxpc3Q7CisgICAgVmVjdG9yPENVUkwqPiBtX3Jl
bW92ZWRIYW5kbGVMaXN0OworICAgIG11dGFibGUgTG9jayBtX211dGV4OworICAgIGJvb2wgbV9y
dW5UaHJlYWQgeyBmYWxzZSB9OworCisgICAgQ1VSTFNIKiBtX2N1cmxTaGFyZUhhbmRsZSB7IG51
bGxwdHIgfTsKKworICAgIGZyaWVuZCBjbGFzcyBDdXJsSm9iOworfTsKKworY2xhc3MgQ3VybFV0
aWxzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgVVJMIGdldEVmZmVjdGl2ZVVSTChDVVJMKiBoYW5k
bGUpOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAppbmRleCBjYWNmYmI1NzVl
OThiODUwYjAyYjBhZDMzMzEwZWVjOGFlZTQxOTMyLi44NjViYTJmZjY2MjYyNjMxOWFhMDQ4ZmU4
NTRkMTEwNzllOTdjOTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcApAQCAtNDIsNiAr
NDIsNyBAQAogCiAjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKICNpbmNsdWRlICJDdXJs
Q2FjaGVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ3VybE1hbmFnZXIuaCIKICNpbmNsdWRlICJIVFRQ
SGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKQEAgLTg3LDE1ICs4OCw2IEBAIHN0YXRpYyBjb25zdCBTZWNvbmRzIHBv
bGxUaW1lIHsgNTBfbXMgfTsKIGNvbnN0IGludCBtYXhSdW5uaW5nSm9icyA9IDEyODsKIGNvbnN0
IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluQ3VybCA9ICJDdXJsRXJyb3JEb21haW4iOwogCi1VUkwg
Z2V0Q3VybEVmZmVjdGl2ZVVSTChDVVJMKiBoYW5kbGUpCi17Ci0gICAgY29uc3QgY2hhciogdXJs
OwotICAgIENVUkxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKGhhbmRsZSwgQ1VSTElORk9f
RUZGRUNUSVZFX1VSTCwgJnVybCk7Ci0gICAgaWYgKENVUkxFX09LICE9IGVycikKLSAgICAgICAg
cmV0dXJuIFVSTCgpOwotICAgIHJldHVybiBVUkwoVVJMKCksIHVybCk7Ci19Ci0KIHN0YXRpYyBj
b25zdCBib29sIGlnbm9yZVNTTEVycm9ycyA9IGdldGVudigiV0VCS0lUX0lHTk9SRV9TU0xfRVJS
T1JTIik7CiAKIHN0YXRpYyBDU3RyaW5nIGNlcnRpZmljYXRlUGF0aCgpCkBAIC0xNTEsMjUgKzE0
Myw2IEBAIHN0YXRpYyBjaGFyKiBjb29raWVKYXJQYXRoKCkKICNlbmRpZgogfQogCi1zdGF0aWMg
TG9jayogc2hhcmVkUmVzb3VyY2VNdXRleChjdXJsX2xvY2tfZGF0YSBkYXRhKQotewotICAgIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBjb29raWVNdXRleCwgKCkpOwotICAg
IERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBkbnNNdXRleCwgKCkpOwotICAg
IERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBzaGFyZU11dGV4LCAoKSk7Ci0K
LSAgICBzd2l0Y2ggKGRhdGEpIHsKLSAgICAgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9DT09LSUU6
Ci0gICAgICAgICAgICByZXR1cm4gJmNvb2tpZU11dGV4OwotICAgICAgICBjYXNlIENVUkxfTE9D
S19EQVRBX0ROUzoKLSAgICAgICAgICAgIHJldHVybiAmZG5zTXV0ZXg7Ci0gICAgICAgIGNhc2Ug
Q1VSTF9MT0NLX0RBVEFfU0hBUkU6Ci0gICAgICAgICAgICByZXR1cm4gJnNoYXJlTXV0ZXg7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQogI2lmIEVOQUJMRShXRUJfVElNSU5HKQog
c3RhdGljIHZvaWQgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKFJlc291cmNlSGFuZGxl
SW50ZXJuYWwqIGQpCiB7CkBAIC0xOTcsMjEgKzE3MCw2IEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0
ZVdlYlRpbWluZ0luZm9ybWF0aW9ucyhSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkKQogfQogI2Vu
ZGlmCiAKLS8vIGxpYmN1cmwgZG9lcyBub3QgaW1wbGVtZW50IGl0cyBvd24gdGhyZWFkIHN5bmNo
cm9uaXphdGlvbiBwcmltaXRpdmVzLgotLy8gdGhlc2UgdHdvIGZ1bmN0aW9ucyBwcm92aWRlIG11
dGV4ZXMgZm9yIGNvb2tpZXMsIGFuZCBmb3IgdGhlIGdsb2JhbCBETlMKLS8vIGNhY2hlLgotc3Rh
dGljIHZvaWQgY3VybF9sb2NrX2NhbGxiYWNrKENVUkwqIC8qIGhhbmRsZSAqLywgY3VybF9sb2Nr
X2RhdGEgZGF0YSwgY3VybF9sb2NrX2FjY2VzcyAvKiBhY2Nlc3MgKi8sIHZvaWQqIC8qIHVzZXJQ
dHIgKi8pCi17Ci0gICAgaWYgKExvY2sqIG11dGV4ID0gc2hhcmVkUmVzb3VyY2VNdXRleChkYXRh
KSkKLSAgICAgICAgbXV0ZXgtPmxvY2soKTsKLX0KLQotc3RhdGljIHZvaWQgY3VybF91bmxvY2tf
Y2FsbGJhY2soQ1VSTCogLyogaGFuZGxlICovLCBjdXJsX2xvY2tfZGF0YSBkYXRhLCB2b2lkKiAv
KiB1c2VyUHRyICovKQotewotICAgIGlmIChMb2NrKiBtdXRleCA9IHNoYXJlZFJlc291cmNlTXV0
ZXgoZGF0YSkpCi0gICAgICAgIG11dGV4LT51bmxvY2soKTsKLX0KLQogaW5saW5lIHN0YXRpYyBi
b29sIGlzSHR0cEluZm8oaW50IHN0YXR1c0NvZGUpCiB7CiAgICAgcmV0dXJuIDEwMCA8PSBzdGF0
dXNDb2RlICYmIHN0YXR1c0NvZGUgPCAyMDA7CkBAIC0yMzUsMTkgKzE5MywxNiBAQCBpbmxpbmUg
c3RhdGljIGJvb2wgaXNIdHRwTm90TW9kaWZpZWQoaW50IHN0YXR1c0NvZGUpCiBSZXNvdXJjZUhh
bmRsZU1hbmFnZXI6OlJlc291cmNlSGFuZGxlTWFuYWdlcigpCiAgICAgOiBtX2Rvd25sb2FkVGlt
ZXIoKnRoaXMsICZSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjaykK
ICAgICAsIG1fY29va2llSmFyRmlsZU5hbWUoY29va2llSmFyUGF0aCgpKQotICAgICwgbV9jZXJ0
aWZpY2F0ZVBhdGggKGNlcnRpZmljYXRlUGF0aCgpKQorICAgICwgbV9jZXJ0aWZpY2F0ZVBhdGgo
Y2VydGlmaWNhdGVQYXRoKCkpCiAgICAgLCBtX3J1bm5pbmdKb2JzKDApCiAjaWZuZGVmIE5ERUJV
RwogICAgICwgbV9sb2dGaWxlKG51bGxwdHIpCiAjZW5kaWYKIHsKLSAgICBjdXJsX2dsb2JhbF9p
bml0KENVUkxfR0xPQkFMX0FMTCk7CisgICAgQ1VSTFNIKiBoID0gQ3VybE1hbmFnZXI6OnNoYXJl
ZCgpLmdldEN1cmxTaGFyZUhhbmRsZSgpOworICAgIG1fY3VybFNoYXJlSGFuZGxlID0gaDsKICAg
ICBtX2N1cmxNdWx0aUhhbmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOwotICAgIG1fY3VybFNoYXJl
SGFuZGxlID0gY3VybF9zaGFyZV9pbml0KCk7Ci0gICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJs
U2hhcmVIYW5kbGUsIENVUkxTSE9QVF9TSEFSRSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFKTsKLSAg
ICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX1NIQVJFLCBD
VVJMX0xPQ0tfREFUQV9ETlMpOwotICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFu
ZGxlLCBDVVJMU0hPUFRfTE9DS0ZVTkMsIGN1cmxfbG9ja19jYWxsYmFjayk7Ci0gICAgY3VybF9z
aGFyZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9VTkxPQ0tGVU5DLCBjdXJs
X3VubG9ja19jYWxsYmFjayk7CisKIAogICAgIGluaXRDb29raWVTZXNzaW9uKCk7CiAKQEAgLTI2
MSwxMCArMjE2LDggQEAgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpSZXNvdXJjZUhhbmRsZU1hbmFn
ZXIoKQogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCkKIHsK
ICAgICBjdXJsX211bHRpX2NsZWFudXAobV9jdXJsTXVsdGlIYW5kbGUpOwotICAgIGN1cmxfc2hh
cmVfY2xlYW51cChtX2N1cmxTaGFyZUhhbmRsZSk7CiAgICAgaWYgKG1fY29va2llSmFyRmlsZU5h
bWUpCiAgICAgICAgIGZhc3RGcmVlKG1fY29va2llSmFyRmlsZU5hbWUpOwotICAgIGN1cmxfZ2xv
YmFsX2NsZWFudXAoKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBpZiAobV9sb2dGaWxlKQpAQCAt
MjcyLDExICsyMjUsNiBAQCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6On5SZXNvdXJjZUhhbmRsZU1h
bmFnZXIoKQogI2VuZGlmCiB9CiAKLUNVUkxTSCogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpnZXRD
dXJsU2hhcmVIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2N1cmxTaGFyZUhhbmRsZTsK
LX0KLQogdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNldENvb2tpZUphckZpbGVOYW1lKGNv
bnN0IGNoYXIqIGNvb2tpZUphckZpbGVOYW1lKQogewogICAgIG1fY29va2llSmFyRmlsZU5hbWUg
PSBmYXN0U3RyRHVwKGNvb2tpZUphckZpbGVOYW1lKTsKQEAgLTMwMiw3ICsyNTAsNyBAQCBzdGF0
aWMgdm9pZCBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSAoQ1VSTCogaGFuZGxlLCBSZXNvdXJj
ZUhhbmRsZSogam9iLCBSZXNvdQogICAgIC8vIHdoaWNoIG1lYW5zIHRoZSBSZXNvdXJjZUxvYWRl
cidzIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gdGhlIFVSTC4KICAgICAvLyBSdW4gdGhlIGNv
ZGUgaGVyZSBmb3IgbG9jYWwgZmlsZXMgdG8gcmVzb2x2ZSB0aGUgaXNzdWUuCiAgICAgLy8gVE9E
TzogU2VlIGlmIHRoZXJlIGlzIGEgYmV0dGVyIGFwcHJvYWNoIGZvciBoYW5kbGluZyB0aGlzLgot
ICAgIFVSTCB1cmwgPSBnZXRDdXJsRWZmZWN0aXZlVVJMKGhhbmRsZSk7CisgICAgVVJMIHVybCA9
IEN1cmxVdGlsczo6Z2V0RWZmZWN0aXZlVVJMKGhhbmRsZSk7CiAgICAgQVNTRVJUKHVybC5pc1Zh
bGlkKCkpOwogICAgIGQtPm1fcmVzcG9uc2Uuc2V0VVJMKHVybCk7CiAgICAgIGlmIChkLT5jbGll
bnQoKSkKQEAgLTQxMyw3ICszNjEsNyBAQCBzdGF0aWMgYm9vbCBnZXRQcm90ZWN0aW9uU3BhY2Uo
Q1VSTCogaCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFByb3RlYwogICAgIGlm
IChlcnIgIT0gQ1VSTEVfT0spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFVSTCB1cmwg
PSBnZXRDdXJsRWZmZWN0aXZlVVJMKGgpOworICAgIFVSTCB1cmwgPSBDdXJsVXRpbHM6OmdldEVm
ZmVjdGl2ZVVSTChoKTsKICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtNTAyLDcgKzQ1MCw3IEBAIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2so
Y2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogICAgICAg
ICBjdXJsX2Vhc3lfZ2V0aW5mbyhoLCBDVVJMSU5GT19DT05URU5UX0xFTkdUSF9ET1dOTE9BRCwg
JmNvbnRlbnRMZW5ndGgpOwogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVu
dExlbmd0aChzdGF0aWNfY2FzdDxsb25nIGxvbmcgaW50Pihjb250ZW50TGVuZ3RoKSk7CiAKLSAg
ICAgICAgZC0+bV9yZXNwb25zZS5zZXRVUkwoZ2V0Q3VybEVmZmVjdGl2ZVVSTChoKSk7CisgICAg
ICAgIGQtPm1fcmVzcG9uc2Uuc2V0VVJMKEN1cmxVdGlsczo6Z2V0RWZmZWN0aXZlVVJMKGgpKTsK
IAogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBDb2RlKTsKICAg
ICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFU
eXBlKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50
VHlwZSkpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpOwpAQCAtNzA5LDcgKzY1Nyw3IEBAIHZv
aWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2soKQogICAgICAg
ICAgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlkRmluaXNoTG9hZGlu
Zygqam9iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFVS
TCB1cmwgPSBnZXRDdXJsRWZmZWN0aXZlVVJMKGQtPm1faGFuZGxlKTsKKyAgICAgICAgICAgIFVS
TCB1cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChkLT5tX2hhbmRsZSk7CiAjaWZuZGVm
IE5ERUJVRwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDdXJsIEVSUk9SIGZvciB1cmw9
JyVzJywgZXJyb3I6ICclcydcbiIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjdXJsX2Vh
c3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyLmgKaW5kZXggMTUzYzMwNTAwZGQ2M2I2M2Y0MDYxOWFiOTMyZjZmY2RlNDQ3YmViOC4uOTI1
ZGJhNDAyOTgwMjg1MjljN2JkNjUyNzIxYzUyNTczMzMwM2Q5OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1h
bmFnZXIuaApAQCAtNTcsOCArNTcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoUmVzb3VyY2VI
YW5kbGUqKTsKICAgICB2b2lkIGNhbmNlbChSZXNvdXJjZUhhbmRsZSopOwogCi0gICAgQ1VSTFNI
KiBnZXRDdXJsU2hhcmVIYW5kbGUoKSBjb25zdDsKLQogICAgIHZvaWQgc2V0Q29va2llSmFyRmls
ZU5hbWUoY29uc3QgY2hhciogY29va2llSmFyRmlsZU5hbWUpOwogICAgIGNvbnN0IGNoYXIqIGdl
dENvb2tpZUphckZpbGVOYW1lKCkgY29uc3Q7CiAKQEAgLTEwMCw4ICs5OCw2IEBAIHByaXZhdGU6
CiAjZW5kaWYKIH07CiAKLVVSTCBnZXRDdXJsRWZmZWN0aXZlVVJMKENVUkwqKTsKLQogfQogCiAj
ZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313408</attachid>
            <date>2017-06-20 09:39:51 -0700</date>
            <delta_ts>2017-06-21 09:48:29 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>173557.diff</filename>
            <type>text/plain</type>
            <size>35826</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1OGY2NDg4MDJhNC4uMTNmMTE5NjlkN2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MCBAQAorMjAxNy0wNi0xOSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIEV4dHJhY3QgQ3VybERvd25sb2FkTWFuYWdlciBhcyBz
aGFyZWQgYmFja2dyb3VuZCB0YXNrIGhhbmRsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzU1NworCisgICAgICAgIEN1cmwgcmVzb3VyY2UgaGFu
ZGxpbmcgc2hvdWxkIGJlIHNoYXJlZCBieSBvdGhlciBwYXJ0IG9mIEN1cmwKKyAgICAgICAgbmV0
d29yayBzdGFjay4gQ3VybERvd25sb2FkTWFuYWdlciBpcyBleHRyYWN0ZWQgYXMgc3RhbmQgYWxv
bmUKKyAgICAgICAgQ3VybE1hbmFnZXIgc2luZ2xldG9uIGNsYXNzIHRvIGJlIHJlYWR5IGZvciBv
dGhlcnMKKyAgICAgICAgKGkuZS4gUmVzb3VyY2VIYW5kbGUpLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRDb29raWVzRnJvbURPTSk6CisgICAgICAgIChXZWJDb3JlOjpjb29r
aWVzRm9yU2Vzc2lvbik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3du
bG9hZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmluaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
RG93bmxvYWQ6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmRpZFJl
Y2VpdmVIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpoYW5kbGVDdXJs
TXNnKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OkN1cmxEb3dubG9h
ZE1hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdl
cjo6fkN1cmxEb3dubG9hZE1hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bERvd25sb2FkTWFuYWdlcjo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxE
b3dubG9hZE1hbmFnZXI6OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJs
RG93bmxvYWRNYW5hZ2VyOjpnZXRBY3RpdmVEb3dubG9hZENvdW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OmdldFBlbmRpbmdEb3dubG9hZENvdW50
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0
VGhyZWFkSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2Fk
TWFuYWdlcjo6c3RvcFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93
bmxvYWRNYW5hZ2VyOjpzdG9wVGhyZWFkSWZJZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6YWRkVG9DdXJsKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnJlbW92ZUZyb21DdXJsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OmRvd25sb2Fk
VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5hZ2VyOjpnZXRNdWx0
aUhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5hZ2Vy
OjpydW5UaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFu
YWdlcjo6c2V0UnVuVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybE1hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxNYW5h
Z2VyOjpDdXJsTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6fkN1cmxN
YW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxNYW5hZ2VyOjphZGQpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybE1hbmFnZXI6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsTWFu
YWdlcjo6Z2V0QWN0aXZlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6Omdl
dFBlbmRpbmdDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6c3RhcnRUaHJl
YWRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6c3RvcFRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6c3RvcFRocmVhZElmSWRsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6dXBkYXRlSGFuZGxlTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJsTWFuYWdlcjo6YWRkVG9DdXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxN
YW5hZ2VyOjpyZW1vdmVGcm9tQ3VybCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6
d29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxVdGlsczo6Z2V0RWZmZWN0aXZl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTaGFyZWRSZXNvdXJjZXM6Om11dGV4Rm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxTaGFyZWRSZXNvdXJjZXM6OmxvY2spOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybFNoYXJlZFJlc291cmNlczo6dW5sb2NrKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXJsTWFuYWdlcjo6c2hhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxNYW5hZ2VyOjpnZXRD
dXJsU2hhcmVIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OmdldE11bHRp
SGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxNYW5hZ2VyOjpydW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OnNldFJ1blRocmVhZCk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OlJlc291cmNlSGFuZGxlTWFuYWdlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6On5SZXNvdXJjZUhhbmRsZU1h
bmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0UHJvdGVjdGlvblNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OmhlYWRlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdl
cjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEN1cmxFZmZl
Y3RpdmVVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVkUmVzb3VyY2VNdXRl
eCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjdXJsX2xvY2tfY2FsbGJhY2spOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3VybF91bmxvY2tfY2FsbGJhY2spOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpnZXRDdXJsU2hhcmVIYW5k
bGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhh
bmRsZU1hbmFnZXIuaDoKKwogMjAxNy0wNi0xMiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4Zmll
bGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gRXhwYW5kIHN5c3RlbS11aSB0byBpbmNs
dWRlIGV2ZXJ5IGl0ZW0gaW4gdGhlIENvcmUgVGV4dCBjYXNjYWRlIGxpc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybVdpbkNhaXJvLmNtYWtlCmluZGV4IGViZTU0NzlmZTY5Li41OTc3MDU5NzdlZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0zNCw2ICszNCw3IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2Fj
aGVFbnRyeS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5j
cHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAorICAgIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvRE5TQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvRm9ybURhdGFTdHJlYW1D
dXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBhcnRIYW5kbGUuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFy
Q3VybC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFy
Q3VybC5jcHAKaW5kZXggMTk2NDU1MGMxODUuLmQzYjc4NmIzN2U5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCkBA
IC0xLDQgKzEsNiBAQAogLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCkBAIC0yMCw5ICsy
MiwxMCBAQAogI2lmIFVTRShDVVJMKQogCiAjaW5jbHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAi
Q3VybE1hbmFnZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlVS
TC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlTWFuYWdlci5oIgorI2luY2x1ZGUgIlVSTC5o
IgogCiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
QEAgLTI0Niw3ICsyNDksNyBAQCB2b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYgdXJsLAogICAgICAgICByZXR1
cm47CiAKICAgICBjb25zdCBjaGFyKiBjb29raWVKYXJGaWxlTmFtZSA9IFJlc291cmNlSGFuZGxl
TWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKS0+Z2V0Q29va2llSmFyRmlsZU5hbWUoKTsKLSAgICBD
VVJMU0gqIGN1cmxzaCA9IFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKS0+
Z2V0Q3VybFNoYXJlSGFuZGxlKCk7CisgICAgQ1VSTFNIKiBjdXJsc2ggPSBDdXJsTWFuYWdlcjo6
c2hhcmVkKCkuZ2V0Q3VybFNoYXJlSGFuZGxlKCk7CiAKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1
cmwsIENVUkxPUFRfQ09PS0lFSkFSLCBjb29raWVKYXJGaWxlTmFtZSk7CiAgICAgY3VybF9lYXN5
X3NldG9wdChjdXJsLCBDVVJMT1BUX1NIQVJFLCBjdXJsc2gpOwpAQCAtMjc1LDcgKzI3OCw3IEBA
IHN0YXRpYyBTdHJpbmcgY29va2llc0ZvclNlc3Npb24oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiwgY29uc3QgVVJMJiwgY29uc3QKICAgICBpZiAoIWN1cmwpCiAgICAgICAgIHJldHVybiBj
b29raWVzOwogCi0gICAgQ1VSTFNIKiBjdXJsc2ggPSBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNo
YXJlZEluc3RhbmNlKCktPmdldEN1cmxTaGFyZUhhbmRsZSgpOworICAgIENVUkxTSCogY3VybHNo
ID0gQ3VybE1hbmFnZXI6OnNoYXJlZCgpLmdldEN1cmxTaGFyZUhhbmRsZSgpOwogCiAgICAgY3Vy
bF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NIQVJFLCBjdXJsc2gpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCmlu
ZGV4IDQ2Y2UzMGE1YTMzLi5lZDE3ZTUwYWRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKQEAgLTMxLDcgKzMxLDYg
QEAKIAogI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJz
LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CkBAIC00MCwxOTcgKzM5LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ3VybERvd25sb2FkTWFuYWdlciAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLUN1cmxEb3dubG9hZE1hbmFnZXI6OkN1cmxEb3dubG9hZE1hbmFnZXIoKQotewot
ICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKLSAgICBtX2N1cmxNdWx0aUhh
bmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOwotfQotCi1DdXJsRG93bmxvYWRNYW5hZ2VyOjp+Q3Vy
bERvd25sb2FkTWFuYWdlcigpCi17Ci0gICAgc3RvcFRocmVhZCgpOwotICAgIGN1cmxfbXVsdGlf
Y2xlYW51cChtX2N1cmxNdWx0aUhhbmRsZSk7Ci0gICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOwot
fQotCi1ib29sIEN1cmxEb3dubG9hZE1hbmFnZXI6OmFkZChDVVJMKiBjdXJsSGFuZGxlKQotewot
ICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgICAgIG1fcGVu
ZGluZ0hhbmRsZUxpc3QuYXBwZW5kKGN1cmxIYW5kbGUpOwotICAgIH0KLQotICAgIHN0YXJ0VGhy
ZWFkSWZOZWVkZWQoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEN1cmxEb3dubG9h
ZE1hbmFnZXI6OnJlbW92ZShDVVJMKiBjdXJsSGFuZGxlKQotewotICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbXV0ZXgpOwotCi0gICAgbV9yZW1vdmVkSGFuZGxlTGlzdC5hcHBlbmQoY3VybEhhbmRs
ZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IEN1cmxEb3dubG9hZE1hbmFnZXI6Omdl
dEFjdGl2ZURvd25sb2FkQ291bnQoKSBjb25zdAotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
bXV0ZXgpOwotICAgIHJldHVybiBtX2FjdGl2ZUhhbmRsZUxpc3Quc2l6ZSgpOwotfQotCi1pbnQg
Q3VybERvd25sb2FkTWFuYWdlcjo6Z2V0UGVuZGluZ0Rvd25sb2FkQ291bnQoKSBjb25zdAotewot
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgIHJldHVybiBtX3BlbmRpbmdIYW5k
bGVMaXN0LnNpemUoKTsKLX0KLQotdm9pZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdGFydFRocmVh
ZElmTmVlZGVkKCkKLXsKLSAgICBpZiAoIXJ1blRocmVhZCgpKSB7Ci0gICAgICAgIGlmIChtX3Ro
cmVhZCkKLSAgICAgICAgICAgIG1fdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwotICAgICAg
ICBzZXRSdW5UaHJlYWQodHJ1ZSk7Ci0gICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUo
ZG93bmxvYWRUaHJlYWQsIHRoaXMsICJkb3dubG9hZFRocmVhZCIpOwotICAgIH0KLX0KLQotdm9p
ZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9wVGhyZWFkKCkKLXsKLSAgICBzZXRSdW5UaHJlYWQo
ZmFsc2UpOwotCi0gICAgaWYgKG1fdGhyZWFkKSB7Ci0gICAgICAgIG1fdGhyZWFkLT53YWl0Rm9y
Q29tcGxldGlvbigpOwotICAgICAgICBtX3RocmVhZCA9IG51bGxwdHI7Ci0gICAgfQotfQotCi12
b2lkIEN1cmxEb3dubG9hZE1hbmFnZXI6OnN0b3BUaHJlYWRJZklkbGUoKQotewotICAgIGlmICgh
Z2V0QWN0aXZlRG93bmxvYWRDb3VudCgpICYmICFnZXRQZW5kaW5nRG93bmxvYWRDb3VudCgpKQot
ICAgICAgICBzZXRSdW5UaHJlYWQoZmFsc2UpOwotfQotCi12b2lkIEN1cmxEb3dubG9hZE1hbmFn
ZXI6OnVwZGF0ZUhhbmRsZUxpc3QoKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgp
OwotCi0gICAgLy8gUmVtb3ZlIGN1cmwgZWFzeSBoYW5kbGVzIGZyb20gbXVsdGkgbGlzdCAKLSAg
ICBpbnQgc2l6ZSA9IG1fcmVtb3ZlZEhhbmRsZUxpc3Quc2l6ZSgpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIHJlbW92ZUZyb21DdXJsKG1fcmVtb3ZlZEhh
bmRsZUxpc3RbMF0pOwotICAgICAgICBtX3JlbW92ZWRIYW5kbGVMaXN0LnJlbW92ZSgwKTsKLSAg
ICB9Ci0KLSAgICAvLyBBZGQgcGVuZGluZyBjdXJsIGVhc3kgaGFuZGxlcyB0byBtdWx0aSBsaXN0
IAotICAgIHNpemUgPSBtX3BlbmRpbmdIYW5kbGVMaXN0LnNpemUoKTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBhZGRUb0N1cmwobV9wZW5kaW5nSGFuZGxl
TGlzdFswXSk7Ci0gICAgICAgIG1fcGVuZGluZ0hhbmRsZUxpc3QucmVtb3ZlKDApOwotICAgIH0K
LX0KLQotYm9vbCBDdXJsRG93bmxvYWRNYW5hZ2VyOjphZGRUb0N1cmwoQ1VSTCogY3VybEhhbmRs
ZSkKLXsKLSAgICBDVVJMTWNvZGUgcmV0dmFsID0gY3VybF9tdWx0aV9hZGRfaGFuZGxlKG1fY3Vy
bE11bHRpSGFuZGxlLCBjdXJsSGFuZGxlKTsKLSAgICBpZiAocmV0dmFsID09IENVUkxNX09LKSB7
Ci0gICAgICAgIG1fYWN0aXZlSGFuZGxlTGlzdC5hcHBlbmQoY3VybEhhbmRsZSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ3VybERv
d25sb2FkTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwoQ1VSTCogY3VybEhhbmRsZSkKLXsKLSAgICBp
bnQgaGFuZGxlUG9zID0gbV9hY3RpdmVIYW5kbGVMaXN0LmZpbmQoY3VybEhhbmRsZSk7Ci0KLSAg
ICBpZiAoaGFuZGxlUG9zIDwgMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgQ1VS
TE1jb2RlIHJldHZhbCA9IGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShtX2N1cmxNdWx0aUhhbmRs
ZSwgY3VybEhhbmRsZSk7Ci0gICAgaWYgKHJldHZhbCA9PSBDVVJMTV9PSykgewotICAgICAgICBt
X2FjdGl2ZUhhbmRsZUxpc3QucmVtb3ZlKGhhbmRsZVBvcyk7Ci0gICAgICAgIGN1cmxfZWFzeV9j
bGVhbnVwKGN1cmxIYW5kbGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIEN1cmxEb3dubG9hZE1hbmFnZXI6OmRvd25sb2FkVGhyZWFk
KHZvaWQqIGRhdGEpCi17Ci0gICAgQ3VybERvd25sb2FkTWFuYWdlciogZG93bmxvYWRNYW5hZ2Vy
ID0gcmVpbnRlcnByZXRfY2FzdDxDdXJsRG93bmxvYWRNYW5hZ2VyKj4oZGF0YSk7Ci0KLSAgICB3
aGlsZSAoZG93bmxvYWRNYW5hZ2VyLT5ydW5UaHJlYWQoKSkgewotCi0gICAgICAgIGRvd25sb2Fk
TWFuYWdlci0+dXBkYXRlSGFuZGxlTGlzdCgpOwotCi0gICAgICAgIC8vIFJldHJ5ICdzZWxlY3Qn
IGlmIGl0IHdhcyBpbnRlcnJ1cHRlZCBieSBhIHByb2Nlc3Mgc2lnbmFsLgotICAgICAgICBpbnQg
cmMgPSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBmZF9zZXQgZmRyZWFkOwotICAgICAg
ICAgICAgZmRfc2V0IGZkd3JpdGU7Ci0gICAgICAgICAgICBmZF9zZXQgZmRleGNlcDsKLQotICAg
ICAgICAgICAgaW50IG1heGZkID0gMDsKLQotICAgICAgICAgICAgY29uc3QgaW50IHNlbGVjdFRp
bWVvdXRNUyA9IDU7Ci0KLSAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7Ci0gICAg
ICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDA7Ci0gICAgICAgICAgICB0aW1lb3V0LnR2X3VzZWMg
PSBzZWxlY3RUaW1lb3V0TVMgKiAxMDAwOyAvLyBzZWxlY3Qgd2FpdHMgbWljcm9zZWNvbmRzCi0K
LSAgICAgICAgICAgIEZEX1pFUk8oJmZkcmVhZCk7Ci0gICAgICAgICAgICBGRF9aRVJPKCZmZHdy
aXRlKTsKLSAgICAgICAgICAgIEZEX1pFUk8oJmZkZXhjZXApOwotICAgICAgICAgICAgY3VybF9t
dWx0aV9mZHNldChkb3dubG9hZE1hbmFnZXItPmdldE11bHRpSGFuZGxlKCksICZmZHJlYWQsICZm
ZHdyaXRlLCAmZmRleGNlcCwgJm1heGZkKTsKLSAgICAgICAgICAgIC8vIFdoZW4gdGhlIDMgZmls
ZSBkZXNjcmlwdG9ycyBhcmUgZW1wdHksIHdpbnNvY2sgd2lsbCByZXR1cm4gLTEKLSAgICAgICAg
ICAgIC8vIGFuZCBiYWlsIG91dCwgc3RvcHBpbmcgdGhlIGZpbGUgZG93bmxvYWQuIFNvIG1ha2Ug
c3VyZSB3ZQotICAgICAgICAgICAgLy8gaGF2ZSB2YWxpZCBmaWxlIGRlc2NyaXB0b3JzIGJlZm9y
ZSBjYWxsaW5nIHNlbGVjdC4KLSAgICAgICAgICAgIGlmIChtYXhmZCA+PSAwKQotICAgICAgICAg
ICAgICAgIHJjID0gOjpzZWxlY3QobWF4ZmQgKyAxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhj
ZXAsICZ0aW1lb3V0KTsKLSAgICAgICAgfSB3aGlsZSAocmMgPT0gLTEgJiYgZXJybm8gPT0gRUlO
VFIpOwotCi0gICAgICAgIGludCBhY3RpdmVEb3dubG9hZENvdW50ID0gMDsKLSAgICAgICAgd2hp
bGUgKGN1cmxfbXVsdGlfcGVyZm9ybShkb3dubG9hZE1hbmFnZXItPmdldE11bHRpSGFuZGxlKCks
ICZhY3RpdmVEb3dubG9hZENvdW50KSA9PSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pIHsgfQot
Ci0gICAgICAgIGludCBtZXNzYWdlc0luUXVldWUgPSAwOwotICAgICAgICBDVVJMTXNnKiBtc2cg
PSBjdXJsX211bHRpX2luZm9fcmVhZChkb3dubG9hZE1hbmFnZXItPmdldE11bHRpSGFuZGxlKCks
ICZtZXNzYWdlc0luUXVldWUpOwotCi0gICAgICAgIGlmICghbXNnKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgQ3VybERvd25sb2FkKiBkb3dubG9hZCA9IDA7Ci0gICAgICAgIENV
Ukxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKG1zZy0+ZWFzeV9oYW5kbGUsIENVUkxJTkZP
X1BSSVZBVEUsICZkb3dubG9hZCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShlcnIpOwotCi0gICAg
ICAgIGlmIChtc2ctPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKLSAgICAgICAgICAgIGlmIChkb3du
bG9hZCkgewotICAgICAgICAgICAgICAgIGlmIChtc2ctPmRhdGEucmVzdWx0ID09IENVUkxFX09L
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2Rvd25sb2FkXSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkb3dubG9hZC0+ZGVyZWYoKTsgLy8gVGhpcyBtYXRjaGVzIHRoZSByZWYo
KSBpbiBDdXJsRG93bmxvYWQ6OnN0YXJ0KCkuCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoW2Rvd25sb2FkXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZC0+ZGlkRmFp
bCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQtPmRlcmVmKCk7IC8vIFRoaXMg
bWF0Y2hlcyB0aGUgcmVmKCkgaW4gQ3VybERvd25sb2FkOjpzdGFydCgpLgotICAgICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBkb3dubG9hZE1hbmFnZXItPnJlbW92ZUZyb21DdXJsKG1zZy0+ZWFzeV9oYW5kbGUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZG93bmxvYWRNYW5hZ2VyLT5zdG9wVGhyZWFkSWZJZGxlKCk7Ci0g
ICAgfQotfQotCiAvLyBDdXJsRG93bmxvYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ3VybERvd25s
b2FkTWFuYWdlciBDdXJsRG93bmxvYWQ6Om1fZG93bmxvYWRNYW5hZ2VyOwotCiBDdXJsRG93bmxv
YWQ6OkN1cmxEb3dubG9hZCgpID0gZGVmYXVsdDsKIAogQ3VybERvd25sb2FkOjp+Q3VybERvd25s
b2FkKCkKQEAgLTI3NSw3ICs4NSw3IEBAIHZvaWQgQ3VybERvd25sb2FkOjppbml0KEN1cmxEb3du
bG9hZExpc3RlbmVyKiBsaXN0ZW5lciwgY29uc3QgVVJMJiB1cmwpCiAgICAgaWYgKGNlcnRQYXRo
KQogICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9DQUlORk8s
IGNlcnRQYXRoKTsKIAotICAgIENVUkxTSCogY3VybHNoID0gUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
OjpzaGFyZWRJbnN0YW5jZSgpLT5nZXRDdXJsU2hhcmVIYW5kbGUoKTsKKyAgICBDVVJMU0gqIGN1
cmxzaCA9IEN1cmxNYW5hZ2VyOjpzaGFyZWQoKS5nZXRDdXJsU2hhcmVIYW5kbGUoKTsKICAgICBp
ZiAoY3VybHNoKQogICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9Q
VF9TSEFSRSwgY3VybHNoKTsKIApAQCAtMjk3LDEyICsxMDcsMTIgQEAgdm9pZCBDdXJsRG93bmxv
YWQ6OmluaXQoQ3VybERvd25sb2FkTGlzdGVuZXIqIGxpc3RlbmVyLCBSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IFIKIGJvb2wgQ3VybERvd25sb2FkOjpzdGFydCgpCiB7CiAgICAgcmVmKCk7IC8vIEN1
cmxEb3dubG9hZE1hbmFnZXI6OmRvd25sb2FkVGhyZWFkIHdpbGwgY2FsbCBkZXJlZiB3aGVuIHRo
ZSBkb3dubG9hZCBoYXMgZmluaXNoZWQuCi0gICAgcmV0dXJuIG1fZG93bmxvYWRNYW5hZ2VyLmFk
ZChtX2N1cmxIYW5kbGUpOworICAgIHJldHVybiBDdXJsTWFuYWdlcjo6c2hhcmVkKCkuYWRkKG1f
Y3VybEhhbmRsZSk7CiB9CiAKIGJvb2wgQ3VybERvd25sb2FkOjpjYW5jZWwoKQogewotICAgIHJl
dHVybiBtX2Rvd25sb2FkTWFuYWdlci5yZW1vdmUobV9jdXJsSGFuZGxlKTsKKyAgICByZXR1cm4g
Q3VybE1hbmFnZXI6OnNoYXJlZCgpLnJlbW92ZShtX2N1cmxIYW5kbGUpOwogfQogCiBTdHJpbmcg
Q3VybERvd25sb2FkOjpnZXRUZW1wUGF0aCgpIGNvbnN0CkBAIC0zOTMsNyArMjAzLDcgQEAgdm9p
ZCBDdXJsRG93bmxvYWQ6OmRpZFJlY2VpdmVIZWFkZXIoY29uc3QgU3RyaW5nJiBoZWFkZXIpCiAg
ICAgICAgIFVOVVNFRF9QQVJBTShlcnIpOwogCiAgICAgICAgIGlmIChodHRwQ29kZSA+PSAyMDAg
JiYgaHR0cENvZGUgPCAzMDApIHsKLSAgICAgICAgICAgIFVSTCB1cmwgPSBnZXRDdXJsRWZmZWN0
aXZlVVJMKG1fY3VybEhhbmRsZSk7CisgICAgICAgICAgICBVUkwgdXJsID0gQ3VybFV0aWxzOjpn
ZXRFZmZlY3RpdmVVUkwobV9jdXJsSGFuZGxlKTsKICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoW3RoaXMsIHVybCA9IHVybC5pc29sYXRlZENvcHkoKSwgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSB7CiAgICAgICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRVUkwodXJsKTsKICAg
ICAgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21N
ZWRpYVR5cGUobV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRl
bnRUeXBlKSkpOwpAQCAtNTA2LDYgKzMxNiwyOSBAQCB2b2lkIEN1cmxEb3dubG9hZDo6cmVjZWl2
ZWRSZXNwb25zZUNhbGxiYWNrKEN1cmxEb3dubG9hZCogZG93bmxvYWQpCiAgICAgICAgIGRvd25s
b2FkLT5kaWRSZWNlaXZlUmVzcG9uc2UoKTsKIH0KIAorQ3VybEpvYkFjdGlvbiBDdXJsRG93bmxv
YWQ6OmhhbmRsZUN1cmxNc2coQ1VSTE1zZyogbXNnKQoreworICAgIHN3aXRjaCAobXNnLT5tc2cp
IHsKKyAgICBjYXNlIENVUkxNU0dfRE9ORTogeworICAgICAgICBpZiAobXNnLT5kYXRhLnJlc3Vs
dCA9PSBDVVJMRV9PSykgeworICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10gewor
ICAgICAgICAgICAgICAgIGRpZEZpbmlzaCgpOworICAgICAgICAgICAgICAgIGRlcmVmKCk7IC8v
IFRoaXMgbWF0Y2hlcyB0aGUgcmVmKCkgaW4gQ3VybERvd25sb2FkOjpzdGFydCgpLgorICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFk
KFt0aGlzXSB7CisgICAgICAgICAgICAgICAgZGlkRmFpbCgpOworICAgICAgICAgICAgICAgIGRl
cmVmKCk7IC8vIFRoaXMgbWF0Y2hlcyB0aGUgcmVmKCkgaW4gQ3VybERvd25sb2FkOjpzdGFydCgp
LgorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEN1cmxKb2JBY3Rp
b246OkZpbmlzaGVkOworICAgIH0KKyAgICBkZWZhdWx0OiB7CisgICAgICAgIHJldHVybiBDdXJs
Sm9iQWN0aW9uOjpOb25lOworICAgIH0KKyAgICB9Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKaW5k
ZXggMGVmMzE5MzJlNjkuLjMxMmU0NzAwMjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCkBAIC0zNiw0NyArMzYsMTAgQEAK
ICNpbmNsdWRlIDx3aW5zb2NrMi5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxjdXJsL2N1cmwuaD4K
KyNpbmNsdWRlICJDdXJsTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IEN1cmxEb3dubG9hZE1hbmFnZXIgewotcHVibGljOgotICAgIEN1cmxEb3dubG9hZE1hbmFnZXIo
KTsKLSAgICB+Q3VybERvd25sb2FkTWFuYWdlcigpOwotCi0gICAgYm9vbCBhZGQoQ1VSTCogY3Vy
bEhhbmRsZSk7Ci0gICAgYm9vbCByZW1vdmUoQ1VSTCogY3VybEhhbmRsZSk7Ci0KLSAgICBpbnQg
Z2V0QWN0aXZlRG93bmxvYWRDb3VudCgpIGNvbnN0OwotICAgIGludCBnZXRQZW5kaW5nRG93bmxv
YWRDb3VudCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZvaWQgc3RhcnRUaHJlYWRJZk5lZWRl
ZCgpOwotICAgIHZvaWQgc3RvcFRocmVhZCgpOwotICAgIHZvaWQgc3RvcFRocmVhZElmSWRsZSgp
OwotCi0gICAgdm9pZCB1cGRhdGVIYW5kbGVMaXN0KCk7Ci0KLSAgICBDVVJMTSogZ2V0TXVsdGlI
YW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2N1cmxNdWx0aUhhbmRsZTsgfQotCi0gICAgYm9vbCBy
dW5UaHJlYWQoKSBjb25zdCB7IExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOyByZXR1cm4gbV9y
dW5UaHJlYWQ7IH0KLSAgICB2b2lkIHNldFJ1blRocmVhZChib29sIHJ1blRocmVhZCkgeyBMb2Nr
SG9sZGVyIGxvY2tlcihtX211dGV4KTsgbV9ydW5UaHJlYWQgPSBydW5UaHJlYWQ7IH0KLQotICAg
IGJvb2wgYWRkVG9DdXJsKENVUkwqIGN1cmxIYW5kbGUpOwotICAgIGJvb2wgcmVtb3ZlRnJvbUN1
cmwoQ1VSTCogY3VybEhhbmRsZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkb3dubG9hZFRocmVhZCh2
b2lkKiBkYXRhKTsKLQotICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwotICAgIENVUkxNKiBt
X2N1cmxNdWx0aUhhbmRsZSB7IG51bGxwdHIgfTsKLSAgICBWZWN0b3I8Q1VSTCo+IG1fcGVuZGlu
Z0hhbmRsZUxpc3Q7Ci0gICAgVmVjdG9yPENVUkwqPiBtX2FjdGl2ZUhhbmRsZUxpc3Q7Ci0gICAg
VmVjdG9yPENVUkwqPiBtX3JlbW92ZWRIYW5kbGVMaXN0OwotICAgIG11dGFibGUgTG9jayBtX211
dGV4OwotICAgIGJvb2wgbV9ydW5UaHJlYWQgeyBmYWxzZSB9OwotfTsKLQogY2xhc3MgQ3VybERv
d25sb2FkTGlzdGVuZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoKSB7IH0KQEAgLTg1LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsKCkgeyB9CiB9OwogCi1jbGFzcyBDdXJsRG93bmxvYWQgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8Q3VybERvd25sb2FkPiB7CitjbGFzcyBDdXJsRG93bmxvYWQgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q3VybERvd25sb2FkPiwgcHVibGljIEN1cmxKb2IgewogcHVi
bGljOgogICAgIEN1cmxEb3dubG9hZCgpOwogICAgIH5DdXJsRG93bmxvYWQoKTsKQEAgLTEwNyw2
ICs3MCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0RGVzdGluYXRpb24oY29uc3QgU3RyaW5n
JiBkZXN0aW5hdGlvbikgeyBtX2Rlc3RpbmF0aW9uID0gZGVzdGluYXRpb247IH0KIAorICAgIHZp
cnR1YWwgQ3VybEpvYkFjdGlvbiBoYW5kbGVDdXJsTXNnKENVUkxNc2cqKTsKKwogcHJpdmF0ZToK
ICAgICB2b2lkIGNsb3NlRmlsZSgpOwogICAgIHZvaWQgbW92ZUZpbGVUb0Rlc3RpbmF0aW9uKCk7
CkBAIC0xNDIsMTAgKzEwNyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RlbGV0ZXNGaWxlVXBv
bkZhaWx1cmUgeyBmYWxzZSB9OwogICAgIG11dGFibGUgTG9jayBtX211dGV4OwogICAgIEN1cmxE
b3dubG9hZExpc3RlbmVyKiBtX2xpc3RlbmVyIHsgbnVsbHB0ciB9OwotCi0gICAgc3RhdGljIEN1
cmxEb3dubG9hZE1hbmFnZXIgbV9kb3dubG9hZE1hbmFnZXI7Ci0KLSAgICBmcmllbmQgY2xhc3Mg
Q3VybERvd25sb2FkTWFuYWdlcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi44ZjJlZWY2NTJjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5jcHAKQEAgLTAsMCAr
MSwyODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKENVUkwpCisjaW5jbHVkZSAiQ3VybE1h
bmFnZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDdXJsU2hhcmVkUmVzb3VyY2VzIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgdm9pZCBsb2NrKENVUkwqLCBjdXJsX2xvY2tfZGF0YSwgY3VybF9sb2NrX2FjY2Vzcywgdm9p
ZCopOworICAgIHN0YXRpYyB2b2lkIHVubG9jayhDVVJMKiwgY3VybF9sb2NrX2RhdGEsIHZvaWQq
KTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgTG9jayogbXV0ZXhGb3IoY3VybF9sb2NrX2RhdGEp
OworfTsKKworLy8gQ3VybERvd25sb2FkTWFuYWdlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0N1cmxNYW5hZ2Vy
OjpDdXJsTWFuYWdlcigpCit7CisgICAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwp
OworICAgIG1fY3VybE11bHRpSGFuZGxlID0gY3VybF9tdWx0aV9pbml0KCk7CisgICAgbV9jdXJs
U2hhcmVIYW5kbGUgPSBjdXJsX3NoYXJlX2luaXQoKTsKKyAgICBjdXJsX3NoYXJlX3NldG9wdCht
X2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX1NIQVJFLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUp
OworICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hB
UkUsIENVUkxfTE9DS19EQVRBX0ROUyk7CisgICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hh
cmVIYW5kbGUsIENVUkxTSE9QVF9MT0NLRlVOQywgQ3VybFNoYXJlZFJlc291cmNlczo6bG9jayk7
CisgICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9VTkxP
Q0tGVU5DLCBDdXJsU2hhcmVkUmVzb3VyY2VzOjp1bmxvY2spOworfQorCitDdXJsTWFuYWdlcjo6
fkN1cmxNYW5hZ2VyKCkKK3sKKyAgICBzdG9wVGhyZWFkKCk7CisgICAgY3VybF9tdWx0aV9jbGVh
bnVwKG1fY3VybE11bHRpSGFuZGxlKTsKKyAgICBjdXJsX3NoYXJlX2NsZWFudXAobV9jdXJsU2hh
cmVIYW5kbGUpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKK30KKworYm9vbCBDdXJsTWFu
YWdlcjo6YWRkKENVUkwqIGN1cmxIYW5kbGUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAg
IG1fcGVuZGluZ0hhbmRsZUxpc3QuYXBwZW5kKGN1cmxIYW5kbGUpOworICAgIH0KKworICAgIHN0
YXJ0VGhyZWFkSWZOZWVkZWQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEN1cmxN
YW5hZ2VyOjpyZW1vdmUoQ1VSTCogY3VybEhhbmRsZSkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX211dGV4KTsKKworICAgIG1fcmVtb3ZlZEhhbmRsZUxpc3QuYXBwZW5kKGN1cmxIYW5kbGUp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBDdXJsTWFuYWdlcjo6Z2V0QWN0aXZlQ291
bnQoKSBjb25zdAoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIHJldHVy
biBtX2FjdGl2ZUhhbmRsZUxpc3Quc2l6ZSgpOworfQorCitpbnQgQ3VybE1hbmFnZXI6OmdldFBl
bmRpbmdDb3VudCgpIGNvbnN0Cit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Cisg
ICAgcmV0dXJuIG1fcGVuZGluZ0hhbmRsZUxpc3Quc2l6ZSgpOworfQorCit2b2lkIEN1cmxNYW5h
Z2VyOjpzdGFydFRocmVhZElmTmVlZGVkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworCisgICAgaWYgKCFydW5UaHJlYWQoKSkgeworICAgICAgICBpZiAobV90aHJlYWQpCisgICAg
ICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgc2V0UnVuVGhy
ZWFkKHRydWUpOworICAgICAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKHdvcmtlclRocmVh
ZCwgdGhpcywgImN1cmxUaHJlYWQiKTsKKyAgICB9Cit9CisKK3ZvaWQgQ3VybE1hbmFnZXI6OnN0
b3BUaHJlYWQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBzZXRSdW5U
aHJlYWQoZmFsc2UpOworCisgICAgaWYgKG1fdGhyZWFkKSB7CisgICAgICAgIG1fdGhyZWFkLT53
YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICBtX3RocmVhZCA9IG51bGxwdHI7CisgICAgfQor
fQorCit2b2lkIEN1cmxNYW5hZ2VyOjpzdG9wVGhyZWFkSWZJZGxlKCkKK3sKKyAgICBpZiAoIWdl
dEFjdGl2ZUNvdW50KCkgJiYgIWdldFBlbmRpbmdDb3VudCgpKQorICAgICAgICBzZXRSdW5UaHJl
YWQoZmFsc2UpOworfQorCit2b2lkIEN1cmxNYW5hZ2VyOjp1cGRhdGVIYW5kbGVMaXN0KCkKK3sK
KyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKworICAgIC8vIFJlbW92ZSBjdXJsIGVh
c3kgaGFuZGxlcyBmcm9tIG11bHRpIGxpc3QgCisgICAgaW50IHNpemUgPSBtX3JlbW92ZWRIYW5k
bGVMaXN0LnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAg
ICAgICByZW1vdmVGcm9tQ3VybChtX3JlbW92ZWRIYW5kbGVMaXN0WzBdKTsKKyAgICAgICAgbV9y
ZW1vdmVkSGFuZGxlTGlzdC5yZW1vdmUoMCk7CisgICAgfQorCisgICAgLy8gQWRkIHBlbmRpbmcg
Y3VybCBlYXN5IGhhbmRsZXMgdG8gbXVsdGkgbGlzdCAKKyAgICBzaXplID0gbV9wZW5kaW5nSGFu
ZGxlTGlzdC5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAg
ICAgICAgYWRkVG9DdXJsKG1fcGVuZGluZ0hhbmRsZUxpc3RbMF0pOworICAgICAgICBtX3BlbmRp
bmdIYW5kbGVMaXN0LnJlbW92ZSgwKTsKKyAgICB9Cit9CisKK2Jvb2wgQ3VybE1hbmFnZXI6OmFk
ZFRvQ3VybChDVVJMKiBjdXJsSGFuZGxlKQoreworICAgIENVUkxNY29kZSByZXR2YWwgPSBjdXJs
X211bHRpX2FkZF9oYW5kbGUobV9jdXJsTXVsdGlIYW5kbGUsIGN1cmxIYW5kbGUpOworICAgIGlm
IChyZXR2YWwgPT0gQ1VSTE1fT0spIHsKKyAgICAgICAgbV9hY3RpdmVIYW5kbGVMaXN0LmFwcGVu
ZChjdXJsSGFuZGxlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBDdXJsTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwoQ1VSTCogY3VybEhh
bmRsZSkKK3sKKyAgICBpbnQgaGFuZGxlUG9zID0gbV9hY3RpdmVIYW5kbGVMaXN0LmZpbmQoY3Vy
bEhhbmRsZSk7CisKKyAgICBpZiAoaGFuZGxlUG9zIDwgMCkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgCisgICAgQ1VSTE1jb2RlIHJldHZhbCA9IGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSht
X2N1cmxNdWx0aUhhbmRsZSwgY3VybEhhbmRsZSk7CisgICAgaWYgKHJldHZhbCA9PSBDVVJMTV9P
SykgeworICAgICAgICBtX2FjdGl2ZUhhbmRsZUxpc3QucmVtb3ZlKGhhbmRsZVBvcyk7CisgICAg
ICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmxIYW5kbGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEN1cmxNYW5hZ2VyOjp3b3JrZXJU
aHJlYWQodm9pZCogZGF0YSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAg
IEN1cmxNYW5hZ2VyKiBtYW5hZ2VyID0gcmVpbnRlcnByZXRfY2FzdDxDdXJsTWFuYWdlcio+KGRh
dGEpOworCisgICAgd2hpbGUgKG1hbmFnZXItPnJ1blRocmVhZCgpKSB7CisKKyAgICAgICAgbWFu
YWdlci0+dXBkYXRlSGFuZGxlTGlzdCgpOworCisgICAgICAgIC8vIFJldHJ5ICdzZWxlY3QnIGlm
IGl0IHdhcyBpbnRlcnJ1cHRlZCBieSBhIHByb2Nlc3Mgc2lnbmFsLgorICAgICAgICBpbnQgcmMg
PSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBmZF9zZXQgZmRyZWFkOworICAgICAgICAg
ICAgZmRfc2V0IGZkd3JpdGU7CisgICAgICAgICAgICBmZF9zZXQgZmRleGNlcDsKKworICAgICAg
ICAgICAgaW50IG1heGZkID0gMDsKKworICAgICAgICAgICAgY29uc3QgaW50IHNlbGVjdFRpbWVv
dXRNUyA9IDU7CisKKyAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgICAg
ICAgICB0aW1lb3V0LnR2X3NlYyA9IDA7CisgICAgICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSBz
ZWxlY3RUaW1lb3V0TVMgKiAxMDAwOyAvLyBzZWxlY3Qgd2FpdHMgbWljcm9zZWNvbmRzCisKKyAg
ICAgICAgICAgIEZEX1pFUk8oJmZkcmVhZCk7CisgICAgICAgICAgICBGRF9aRVJPKCZmZHdyaXRl
KTsKKyAgICAgICAgICAgIEZEX1pFUk8oJmZkZXhjZXApOworICAgICAgICAgICAgY3VybF9tdWx0
aV9mZHNldChtYW5hZ2VyLT5nZXRNdWx0aUhhbmRsZSgpLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZk
ZXhjZXAsICZtYXhmZCk7CisgICAgICAgICAgICAvLyBXaGVuIHRoZSAzIGZpbGUgZGVzY3JpcHRv
cnMgYXJlIGVtcHR5LCB3aW5zb2NrIHdpbGwgcmV0dXJuIC0xCisgICAgICAgICAgICAvLyBhbmQg
YmFpbCBvdXQsIHN0b3BwaW5nIHRoZSBmaWxlIGRvd25sb2FkLiBTbyBtYWtlIHN1cmUgd2UKKyAg
ICAgICAgICAgIC8vIGhhdmUgdmFsaWQgZmlsZSBkZXNjcmlwdG9ycyBiZWZvcmUgY2FsbGluZyBz
ZWxlY3QuCisgICAgICAgICAgICBpZiAobWF4ZmQgPj0gMCkKKyAgICAgICAgICAgICAgICByYyA9
IDo6c2VsZWN0KG1heGZkICsgMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmdGltZW91
dCk7CisgICAgICAgIH0gd2hpbGUgKHJjID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKworICAg
ICAgICBpbnQgYWN0aXZlQ291bnQgPSAwOworICAgICAgICB3aGlsZSAoY3VybF9tdWx0aV9wZXJm
b3JtKG1hbmFnZXItPmdldE11bHRpSGFuZGxlKCksICZhY3RpdmVDb3VudCkgPT0gQ1VSTE1fQ0FM
TF9NVUxUSV9QRVJGT1JNKSB7IH0KKworICAgICAgICBpbnQgbWVzc2FnZXNJblF1ZXVlID0gMDsK
KyAgICAgICAgQ1VSTE1zZyogbXNnID0gY3VybF9tdWx0aV9pbmZvX3JlYWQobWFuYWdlci0+Z2V0
TXVsdGlIYW5kbGUoKSwgJm1lc3NhZ2VzSW5RdWV1ZSk7CisKKyAgICAgICAgaWYgKCFtc2cpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworCisgICAgICAgIEN1cmxKb2IqIGpvYiA9IG51bGxwdHI7
CisgICAgICAgIENVUkxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKG1zZy0+ZWFzeV9oYW5k
bGUsIENVUkxJTkZPX1BSSVZBVEUsICZqb2IpOworICAgICAgICBVTlVTRURfUEFSQU0oZXJyKTsK
KyAgICAgICAgQVNTRVJUKGpvYik7CisKKyAgICAgICAgQ3VybEpvYkFjdGlvbiBhY3Rpb24gPSBq
b2ItPmhhbmRsZUN1cmxNc2cobXNnKTsKKworICAgICAgICBpZiAoYWN0aW9uID09IEN1cmxKb2JB
Y3Rpb246OkZpbmlzaGVkKQorICAgICAgICAgICAgbWFuYWdlci0+cmVtb3ZlRnJvbUN1cmwobXNn
LT5lYXN5X2hhbmRsZSk7CisKKyAgICAgICAgbWFuYWdlci0+c3RvcFRocmVhZElmSWRsZSgpOwor
ICAgIH0KK30KKworLy8gQ1VSTCBVdGlsaXRpZXMKKworVVJMIEN1cmxVdGlsczo6Z2V0RWZmZWN0
aXZlVVJMKENVUkwqIGhhbmRsZSkKK3sKKyAgICBjb25zdCBjaGFyKiB1cmw7CisgICAgQ1VSTGNv
ZGUgZXJyID0gY3VybF9lYXN5X2dldGluZm8oaGFuZGxlLCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJM
LCAmdXJsKTsKKyAgICBpZiAoQ1VSTEVfT0sgIT0gZXJyKQorICAgICAgICByZXR1cm4gVVJMKCk7
CisgICAgcmV0dXJuIFVSTChVUkwoKSwgdXJsKTsKK30KKworLy8gU2hhcmVkIFJlc291cmNlIG1h
bmFnZW1lbnQgPT09PT09PT09PT09PT09PT09PT09PT0KKworTG9jayogQ3VybFNoYXJlZFJlc291
cmNlczo6bXV0ZXhGb3IoY3VybF9sb2NrX2RhdGEgZGF0YSkKK3sKKyAgICBERVBSRUNBVEVEX0RF
RklORV9TVEFUSUNfTE9DQUwoTG9jaywgY29va2llTXV0ZXgsICgpKTsKKyAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoTG9jaywgZG5zTXV0ZXgsICgpKTsKKyAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoTG9jaywgc2hhcmVNdXRleCwgKCkpOworCisgICAgc3dpdGNo
IChkYXRhKSB7CisgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9DT09LSUU6CisgICAgICAgIHJldHVy
biAmY29va2llTXV0ZXg7CisgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9ETlM6CisgICAgICAgIHJl
dHVybiAmZG5zTXV0ZXg7CisgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9TSEFSRToKKyAgICAgICAg
cmV0dXJuICZzaGFyZU11dGV4OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKKy8vIGxpYmN1cmwg
ZG9lcyBub3QgaW1wbGVtZW50IGl0cyBvd24gdGhyZWFkIHN5bmNocm9uaXphdGlvbiBwcmltaXRp
dmVzLgorLy8gdGhlc2UgdHdvIGZ1bmN0aW9ucyBwcm92aWRlIG11dGV4ZXMgZm9yIGNvb2tpZXMs
IGFuZCBmb3IgdGhlIGdsb2JhbCBETlMKKy8vIGNhY2hlLgordm9pZCBDdXJsU2hhcmVkUmVzb3Vy
Y2VzOjpsb2NrKENVUkwqIC8qIGhhbmRsZSAqLywgY3VybF9sb2NrX2RhdGEgZGF0YSwgY3VybF9s
b2NrX2FjY2VzcyAvKiBhY2Nlc3MgKi8sIHZvaWQqIC8qIHVzZXJQdHIgKi8pCit7CisgICAgaWYg
KExvY2sqIG11dGV4ID0gQ3VybFNoYXJlZFJlc291cmNlczo6bXV0ZXhGb3IoZGF0YSkpCisgICAg
ICAgIG11dGV4LT5sb2NrKCk7Cit9CisKK3ZvaWQgQ3VybFNoYXJlZFJlc291cmNlczo6dW5sb2Nr
KENVUkwqIC8qIGhhbmRsZSAqLywgY3VybF9sb2NrX2RhdGEgZGF0YSwgdm9pZCogLyogdXNlclB0
ciAqLykKK3sKKyAgICBpZiAoTG9jayogbXV0ZXggPSBDdXJsU2hhcmVkUmVzb3VyY2VzOjptdXRl
eEZvcihkYXRhKSkKKyAgICAgICAgbXV0ZXgtPnVubG9jaygpOworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5h
Z2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODk2MWQwNDE1ZTMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bE1hbmFnZXIuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGN1cmwvY3Vy
bC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgor
CisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5z
b2NrMi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJVUkwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitlbnVtIGNsYXNzIEN1cmxKb2JBY3Rpb24geyBOb25lLCBGaW5pc2hlZCB9OworCitjbGFz
cyBDdXJsSm9iIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIEN1cmxKb2JBY3Rpb24gaGFuZGxlQ3Vy
bE1zZyhDVVJMTXNnKikgPSAwOworfTsKKworY2xhc3MgQ3VybE1hbmFnZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBDdXJsTWFuYWdlciYgc2hhcmVkKCkKKyAgICB7CisgICAgICAgIC8vIFNpbmNl
IGl0J3MgYSBzdGF0aWMgdmFyaWFibGUsIGlmIHRoZSBjbGFzcyBoYXMgYWxyZWFkeSBiZWVuIGNy
ZWF0ZWQsCisgICAgICAgIC8vIEl0IHdvbid0IGJlIGNyZWF0ZWQgYWdhaW4uCisgICAgICAgIC8v
IEFuZCBpdCAqKmlzKiogdGhyZWFkLXNhZmUgaW4gQysrMTEuCisKKyAgICAgICAgc3RhdGljIEN1
cmxNYW5hZ2VyIHNoYXJlZDsKKyAgICAgICAgcmV0dXJuIHNoYXJlZDsKKyAgICB9CisKKyAgICBD
dXJsTWFuYWdlcigpOworICAgIHZpcnR1YWwgfkN1cmxNYW5hZ2VyKCk7CisKKyAgICBib29sIGFk
ZChDVVJMKiBjdXJsSGFuZGxlKTsKKyAgICBib29sIHJlbW92ZShDVVJMKiBjdXJsSGFuZGxlKTsK
KworICAgIGludCBnZXRBY3RpdmVDb3VudCgpIGNvbnN0OworICAgIGludCBnZXRQZW5kaW5nQ291
bnQoKSBjb25zdDsKKworICAgIENVUkxTSCogZ2V0Q3VybFNoYXJlSGFuZGxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJsU2hhcmVIYW5kbGU7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHN0YXJ0VGhy
ZWFkSWZOZWVkZWQoKTsKKyAgICB2b2lkIHN0b3BUaHJlYWQoKTsKKyAgICB2b2lkIHN0b3BUaHJl
YWRJZklkbGUoKTsKKworICAgIHZvaWQgdXBkYXRlSGFuZGxlTGlzdCgpOworCisgICAgQ1VSTE0q
IGdldE11bHRpSGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJsTXVsdGlIYW5kbGU7IH0KKwor
ICAgIGJvb2wgcnVuVGhyZWFkKCkgY29uc3QgeyBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsg
cmV0dXJuIG1fcnVuVGhyZWFkOyB9CisgICAgdm9pZCBzZXRSdW5UaHJlYWQoYm9vbCBydW5UaHJl
YWQpIHsgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7IG1fcnVuVGhyZWFkID0gcnVuVGhyZWFk
OyB9CisKKyAgICBib29sIGFkZFRvQ3VybChDVVJMKiBjdXJsSGFuZGxlKTsKKyAgICBib29sIHJl
bW92ZUZyb21DdXJsKENVUkwqIGN1cmxIYW5kbGUpOworCisgICAgc3RhdGljIHZvaWQgd29ya2Vy
VGhyZWFkKHZvaWQqIGRhdGEpOworCisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CisgICAg
Q1VSTE0qIG1fY3VybE11bHRpSGFuZGxlIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxDVVJMKj4g
bV9wZW5kaW5nSGFuZGxlTGlzdDsKKyAgICBWZWN0b3I8Q1VSTCo+IG1fYWN0aXZlSGFuZGxlTGlz
dDsKKyAgICBWZWN0b3I8Q1VSTCo+IG1fcmVtb3ZlZEhhbmRsZUxpc3Q7CisgICAgbXV0YWJsZSBM
b2NrIG1fbXV0ZXg7CisgICAgYm9vbCBtX3J1blRocmVhZCB7IGZhbHNlIH07CisKKyAgICBDVVJM
U0gqIG1fY3VybFNoYXJlSGFuZGxlIHsgbnVsbHB0ciB9OworCisgICAgZnJpZW5kIGNsYXNzIEN1
cmxKb2I7Cit9OworCitjbGFzcyBDdXJsVXRpbHMgeworcHVibGljOgorICAgIHN0YXRpYyBVUkwg
Z2V0RWZmZWN0aXZlVVJMKENVUkwqIGhhbmRsZSk7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1h
bmFnZXIuY3BwCmluZGV4IGNhY2ZiYjU3NWU5Li44NjViYTJmZjY2MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlTWFuYWdlci5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKIAogI2luY2x1ZGUgIkNyZWRlbnRpYWxT
dG9yYWdlLmgiCiAjaW5jbHVkZSAiQ3VybENhY2hlTWFuYWdlci5oIgorI2luY2x1ZGUgIkN1cmxN
YW5hZ2VyLmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCiAjaW5jbHVkZSAiSFRUUFBh
cnNlcnMuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCkBAIC04NywxNSArODgsNiBA
QCBzdGF0aWMgY29uc3QgU2Vjb25kcyBwb2xsVGltZSB7IDUwX21zIH07CiBjb25zdCBpbnQgbWF4
UnVubmluZ0pvYnMgPSAxMjg7CiBjb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpbkN1cmwgPSAi
Q3VybEVycm9yRG9tYWluIjsKIAotVVJMIGdldEN1cmxFZmZlY3RpdmVVUkwoQ1VSTCogaGFuZGxl
KQotewotICAgIGNvbnN0IGNoYXIqIHVybDsKLSAgICBDVVJMY29kZSBlcnIgPSBjdXJsX2Vhc3lf
Z2V0aW5mbyhoYW5kbGUsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZ1cmwpOwotICAgIGlmIChD
VVJMRV9PSyAhPSBlcnIpCi0gICAgICAgIHJldHVybiBVUkwoKTsKLSAgICByZXR1cm4gVVJMKFVS
TCgpLCB1cmwpOwotfQotCiBzdGF0aWMgY29uc3QgYm9vbCBpZ25vcmVTU0xFcnJvcnMgPSBnZXRl
bnYoIldFQktJVF9JR05PUkVfU1NMX0VSUk9SUyIpOwogCiBzdGF0aWMgQ1N0cmluZyBjZXJ0aWZp
Y2F0ZVBhdGgoKQpAQCAtMTUxLDI1ICsxNDMsNiBAQCBzdGF0aWMgY2hhciogY29va2llSmFyUGF0
aCgpCiAjZW5kaWYKIH0KIAotc3RhdGljIExvY2sqIHNoYXJlZFJlc291cmNlTXV0ZXgoY3VybF9s
b2NrX2RhdGEgZGF0YSkKLXsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoTG9j
aywgY29va2llTXV0ZXgsICgpKTsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
TG9jaywgZG5zTXV0ZXgsICgpKTsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
TG9jaywgc2hhcmVNdXRleCwgKCkpOwotCi0gICAgc3dpdGNoIChkYXRhKSB7Ci0gICAgICAgIGNh
c2UgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFOgotICAgICAgICAgICAgcmV0dXJuICZjb29raWVNdXRl
eDsKLSAgICAgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9ETlM6Ci0gICAgICAgICAgICByZXR1cm4g
JmRuc011dGV4OwotICAgICAgICBjYXNlIENVUkxfTE9DS19EQVRBX1NIQVJFOgotICAgICAgICAg
ICAgcmV0dXJuICZzaGFyZU11dGV4OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0K
ICNpZiBFTkFCTEUoV0VCX1RJTUlORykKIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVdlYlRpbWluZ0lu
Zm9ybWF0aW9ucyhSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkKQogewpAQCAtMTk3LDIxICsxNzAs
NiBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMoUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbCogZCkKIH0KICNlbmRpZgogCi0vLyBsaWJjdXJsIGRvZXMgbm90IGltcGxl
bWVudCBpdHMgb3duIHRocmVhZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4KLS8vIHRoZXNl
IHR3byBmdW5jdGlvbnMgcHJvdmlkZSBtdXRleGVzIGZvciBjb29raWVzLCBhbmQgZm9yIHRoZSBn
bG9iYWwgRE5TCi0vLyBjYWNoZS4KLXN0YXRpYyB2b2lkIGN1cmxfbG9ja19jYWxsYmFjayhDVVJM
KiAvKiBoYW5kbGUgKi8sIGN1cmxfbG9ja19kYXRhIGRhdGEsIGN1cmxfbG9ja19hY2Nlc3MgLyog
YWNjZXNzICovLCB2b2lkKiAvKiB1c2VyUHRyICovKQotewotICAgIGlmIChMb2NrKiBtdXRleCA9
IHNoYXJlZFJlc291cmNlTXV0ZXgoZGF0YSkpCi0gICAgICAgIG11dGV4LT5sb2NrKCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGN1cmxfdW5sb2NrX2NhbGxiYWNrKENVUkwqIC8qIGhhbmRsZSAqLywgY3Vy
bF9sb2NrX2RhdGEgZGF0YSwgdm9pZCogLyogdXNlclB0ciAqLykKLXsKLSAgICBpZiAoTG9jayog
bXV0ZXggPSBzaGFyZWRSZXNvdXJjZU11dGV4KGRhdGEpKQotICAgICAgICBtdXRleC0+dW5sb2Nr
KCk7Ci19Ci0KIGlubGluZSBzdGF0aWMgYm9vbCBpc0h0dHBJbmZvKGludCBzdGF0dXNDb2RlKQog
ewogICAgIHJldHVybiAxMDAgPD0gc3RhdHVzQ29kZSAmJiBzdGF0dXNDb2RlIDwgMjAwOwpAQCAt
MjM1LDE5ICsxOTMsMTYgQEAgaW5saW5lIHN0YXRpYyBib29sIGlzSHR0cE5vdE1vZGlmaWVkKGlu
dCBzdGF0dXNDb2RlKQogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpSZXNvdXJjZUhhbmRsZU1hbmFn
ZXIoKQogICAgIDogbV9kb3dubG9hZFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
Ojpkb3dubG9hZFRpbWVyQ2FsbGJhY2spCiAgICAgLCBtX2Nvb2tpZUphckZpbGVOYW1lKGNvb2tp
ZUphclBhdGgoKSkKLSAgICAsIG1fY2VydGlmaWNhdGVQYXRoIChjZXJ0aWZpY2F0ZVBhdGgoKSkK
KyAgICAsIG1fY2VydGlmaWNhdGVQYXRoKGNlcnRpZmljYXRlUGF0aCgpKQogICAgICwgbV9ydW5u
aW5nSm9icygwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fbG9nRmlsZShudWxscHRyKQogI2Vu
ZGlmCiB7Ci0gICAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworICAgIENVUkxT
SCogaCA9IEN1cmxNYW5hZ2VyOjpzaGFyZWQoKS5nZXRDdXJsU2hhcmVIYW5kbGUoKTsKKyAgICBt
X2N1cmxTaGFyZUhhbmRsZSA9IGg7CiAgICAgbV9jdXJsTXVsdGlIYW5kbGUgPSBjdXJsX211bHRp
X2luaXQoKTsKLSAgICBtX2N1cmxTaGFyZUhhbmRsZSA9IGN1cmxfc2hhcmVfaW5pdCgpOwotICAg
IGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hBUkUsIENV
UkxfTE9DS19EQVRBX0NPT0tJRSk7Ci0gICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hhcmVI
YW5kbGUsIENVUkxTSE9QVF9TSEFSRSwgQ1VSTF9MT0NLX0RBVEFfRE5TKTsKLSAgICBjdXJsX3No
YXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX0xPQ0tGVU5DLCBjdXJsX2xv
Y2tfY2FsbGJhY2spOwotICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBD
VVJMU0hPUFRfVU5MT0NLRlVOQywgY3VybF91bmxvY2tfY2FsbGJhY2spOworCiAKICAgICBpbml0
Q29va2llU2Vzc2lvbigpOwogCkBAIC0yNjEsMTAgKzIxNiw4IEBAIFJlc291cmNlSGFuZGxlTWFu
YWdlcjo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCkKIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6flJl
c291cmNlSGFuZGxlTWFuYWdlcigpCiB7CiAgICAgY3VybF9tdWx0aV9jbGVhbnVwKG1fY3VybE11
bHRpSGFuZGxlKTsKLSAgICBjdXJsX3NoYXJlX2NsZWFudXAobV9jdXJsU2hhcmVIYW5kbGUpOwog
ICAgIGlmIChtX2Nvb2tpZUphckZpbGVOYW1lKQogICAgICAgICBmYXN0RnJlZShtX2Nvb2tpZUph
ckZpbGVOYW1lKTsKLSAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CiAKICNpZm5kZWYgTkRFQlVH
CiAgICAgaWYgKG1fbG9nRmlsZSkKQEAgLTI3MiwxMSArMjI1LDYgQEAgUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCkKICNlbmRpZgogfQogCi1DVVJMU0gqIFJl
c291cmNlSGFuZGxlTWFuYWdlcjo6Z2V0Q3VybFNoYXJlSGFuZGxlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9jdXJsU2hhcmVIYW5kbGU7Ci19Ci0KIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
OjpzZXRDb29raWVKYXJGaWxlTmFtZShjb25zdCBjaGFyKiBjb29raWVKYXJGaWxlTmFtZSkKIHsK
ICAgICBtX2Nvb2tpZUphckZpbGVOYW1lID0gZmFzdFN0ckR1cChjb29raWVKYXJGaWxlTmFtZSk7
CkBAIC0zMDIsNyArMjUwLDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9u
c2UgKENVUkwqIGhhbmRsZSwgUmVzb3VyY2VIYW5kbGUqIGpvYiwgUmVzb3UKICAgICAvLyB3aGlj
aCBtZWFucyB0aGUgUmVzb3VyY2VMb2FkZXIncyByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIHRo
ZSBVUkwuCiAgICAgLy8gUnVuIHRoZSBjb2RlIGhlcmUgZm9yIGxvY2FsIGZpbGVzIHRvIHJlc29s
dmUgdGhlIGlzc3VlLgogICAgIC8vIFRPRE86IFNlZSBpZiB0aGVyZSBpcyBhIGJldHRlciBhcHBy
b2FjaCBmb3IgaGFuZGxpbmcgdGhpcy4KLSAgICBVUkwgdXJsID0gZ2V0Q3VybEVmZmVjdGl2ZVVS
TChoYW5kbGUpOworICAgIFVSTCB1cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChoYW5k
bGUpOwogICAgIEFTU0VSVCh1cmwuaXNWYWxpZCgpKTsKICAgICBkLT5tX3Jlc3BvbnNlLnNldFVS
TCh1cmwpOwogICAgICBpZiAoZC0+Y2xpZW50KCkpCkBAIC00MTMsNyArMzYxLDcgQEAgc3RhdGlj
IGJvb2wgZ2V0UHJvdGVjdGlvblNwYWNlKENVUkwqIGgsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBQcm90ZWMKICAgICBpZiAoZXJyICE9IENVUkxFX09LKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBVUkwgdXJsID0gZ2V0Q3VybEVmZmVjdGl2ZVVSTChoKTsKKyAgICBV
UkwgdXJsID0gQ3VybFV0aWxzOjpnZXRFZmZlY3RpdmVVUkwoaCk7CiAgICAgaWYgKCF1cmwuaXNW
YWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUwMiw3ICs0NTAsNyBAQCBzdGF0
aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBu
bWVtYiwgdm9pZCogZGF0YSkKICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oaCwgQ1VSTElORk9f
Q09OVEVOVF9MRU5HVEhfRE9XTkxPQUQsICZjb250ZW50TGVuZ3RoKTsKICAgICAgICAgZC0+bV9y
ZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoc3RhdGljX2Nhc3Q8bG9uZyBsb25nIGlu
dD4oY29udGVudExlbmd0aCkpOwogCi0gICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0VVJMKGdldEN1
cmxFZmZlY3RpdmVVUkwoaCkpOworICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTChDdXJsVXRp
bHM6OmdldEVmZmVjdGl2ZVVSTChoKSk7CiAKICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQ
U3RhdHVzQ29kZShodHRwQ29kZSk7CiAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0TWltZVR5cGUo
ZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgp
KTsKQEAgLTcwOSw3ICs2NTcsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxv
YWRUaW1lckNhbGxiYWNrKCkKICAgICAgICAgICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJ
bnN0YW5jZSgpLmRpZEZpbmlzaExvYWRpbmcoKmpvYik7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBVUkwgdXJsID0gZ2V0Q3VybEVmZmVjdGl2ZVVSTChkLT5t
X2hhbmRsZSk7CisgICAgICAgICAgICBVUkwgdXJsID0gQ3VybFV0aWxzOjpnZXRFZmZlY3RpdmVV
UkwoZC0+bV9oYW5kbGUpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ3VybCBFUlJPUiBmb3IgdXJsPSclcycsIGVycm9yOiAnJXMnXG4iLCB1cmwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgY3VybF9lYXN5X3N0cmVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpKTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCmluZGV4IDE1M2MzMDUwMGRkLi45MjVkYmE0
MDI5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaApAQCAtNTcsOCArNTcsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhZGQoUmVzb3VyY2VIYW5kbGUqKTsKICAgICB2b2lkIGNhbmNlbChSZXNvdXJj
ZUhhbmRsZSopOwogCi0gICAgQ1VSTFNIKiBnZXRDdXJsU2hhcmVIYW5kbGUoKSBjb25zdDsKLQog
ICAgIHZvaWQgc2V0Q29va2llSmFyRmlsZU5hbWUoY29uc3QgY2hhciogY29va2llSmFyRmlsZU5h
bWUpOwogICAgIGNvbnN0IGNoYXIqIGdldENvb2tpZUphckZpbGVOYW1lKCkgY29uc3Q7CiAKQEAg
LTEwMCw4ICs5OCw2IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLVVSTCBnZXRDdXJsRWZmZWN0
aXZlVVJMKENVUkwqKTsKLQogfQogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313524</attachid>
            <date>2017-06-21 09:48:30 -0700</date>
            <delta_ts>2017-06-21 09:48:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173557-20170621094831.patch</filename>
            <type>text/plain</type>
            <size>35509</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE3LTA2LTIxICBCYXN1a2Ug
U3V6dWtpICA8QmFzdWtlLlN1enVraUBzb255LmNvbT4KKworICAgICAgICBbQ3VybF0gRXh0cmFj
dCBDdXJsRG93bmxvYWRNYW5hZ2VyIGFzIHNoYXJlZCBiYWNrZ3JvdW5kIHRhc2sgaGFuZGxlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNTU3CisK
KyAgICAgICAgQ3VybCByZXNvdXJjZSBoYW5kbGluZyBzaG91bGQgYmUgc2hhcmVkIGJ5IG90aGVy
IHBhcnQgb2YgQ3VybAorICAgICAgICBuZXR3b3JrIHN0YWNrLiBDdXJsRG93bmxvYWRNYW5hZ2Vy
IGlzIGV4dHJhY3RlZCBhcyBzdGFuZCBhbG9uZQorICAgICAgICBDdXJsTWFuYWdlciBzaW5nbGV0
b24gY2xhc3MgdG8gYmUgcmVhZHkgZm9yIG90aGVycworICAgICAgICAoaS5lLiBSZXNvdXJjZUhh
bmRsZSkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAg
ICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckN1cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llc0Zyb21E
T00pOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0ZvclNlc3Npb24pOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybERvd25sb2FkOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZDo6c3Rh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybERvd25sb2FkOjpkaWRSZWNlaXZlSGVhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxEb3dubG9hZDo6aGFuZGxlQ3VybE1zZyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
RG93bmxvYWRNYW5hZ2VyOjpDdXJsRG93bmxvYWRNYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6On5DdXJsRG93bmxvYWRNYW5hZ2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OmFkZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5hZ2VyOjpyZW1vdmUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6Z2V0QWN0aXZlRG93
bmxvYWRDb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5h
Z2VyOjpnZXRQZW5kaW5nRG93bmxvYWRDb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdGFydFRocmVhZElmTmVlZGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0b3BUaHJlYWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6c3RvcFRocmVhZElmSWRs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5hZ2VyOjp1cGRh
dGVIYW5kbGVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1h
bmFnZXI6OmFkZFRvQ3VybCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxv
YWRNYW5hZ2VyOjpyZW1vdmVGcm9tQ3VybCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXJsRG93bmxvYWRNYW5hZ2VyOjpkb3dubG9hZFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybERvd25sb2FkTWFuYWdlcjo6Z2V0TXVsdGlIYW5kbGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6cnVuVGhyZWFkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnNldFJ1blRocmVhZCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6Q3VybE1hbmFnZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybE1hbmFnZXI6On5DdXJsTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsTWFuYWdlcjo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxNYW5hZ2VyOjpyZW1vdmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OmdldEFjdGl2ZUNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxNYW5hZ2VyOjpnZXRQZW5kaW5nQ291bnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybE1hbmFnZXI6OnN0b3BUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFn
ZXI6OnN0b3BUaHJlYWRJZklkbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OnVw
ZGF0ZUhhbmRsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OmFkZFRvQ3Vy
bCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OndvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
U2hhcmVkUmVzb3VyY2VzOjptdXRleEZvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU2hhcmVk
UmVzb3VyY2VzOjpsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTaGFyZWRSZXNvdXJjZXM6
OnVubG9jayk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybE1hbmFnZXI6OnNpbmdsZXRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJsTWFuYWdlcjo6Z2V0Q3VybFNoYXJlSGFuZGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxNYW5hZ2VyOjpnZXRNdWx0aUhhbmRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsTWFuYWdlcjo6cnVuVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxNYW5hZ2Vy
OjpzZXRSdW5UaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5h
Z2VyOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGVNYW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OmhhbmRsZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3Rl
Y3Rpb25TcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpnZXRDdXJsRWZmZWN0aXZlVVJMKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnNoYXJlZFJlc291cmNlTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y3VybF9sb2NrX2NhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmN1
cmxfdW5sb2NrX2NhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlTWFuYWdlcjo6Z2V0Q3VybFNoYXJlSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmg6CisKIDIwMTctMDYt
MjEgIEplcmVteSBKb25lcyAgPGplcmVteWpAYXBwbGUuY29tPgogCiAgICAgICAgIEluY2x1ZGUg
YXVkaW8vdm5kLndhdmUgYXMgYSB2YWxpZCBtaW1lLXR5cGUgZm9yIHdhdiBmaWxlcy4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkocmV2aXNpb24gMjE4NjM1KQorKysg
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxDYWNoZU1hbmFnZXIuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3du
bG9hZC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIuY3BwCiAgICAg
cGxhdGZvcm0vbmV0d29yay9jdXJsL0ROU0N1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Zvcm1EYXRhU3RyZWFtQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVs
dGlwYXJ0SGFuZGxlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAkocmV2aXNpb24gMjE4NjM1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNiBAQAogLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCkBAIC0yMCw5ICsyMiwxMCBAQAogI2lmIFVTRShDVVJMKQogCiAjaW5jbHVkZSAiQ29va2ll
LmgiCisjaW5jbHVkZSAiQ3VybE1hbmFnZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlTWFuYWdlci5oIgor
I2luY2x1ZGUgIlVSTC5oIgogCiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KQEAgLTI0Niw3ICsyNDksNyBAQCB2b2lkIHNldENvb2tpZXNGcm9tRE9N
KGNvbnN0IE5ldHdvcmtTdG9yCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IGNoYXIqIGNv
b2tpZUphckZpbGVOYW1lID0gUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgp
LT5nZXRDb29raWVKYXJGaWxlTmFtZSgpOwotICAgIENVUkxTSCogY3VybHNoID0gUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpLT5nZXRDdXJsU2hhcmVIYW5kbGUoKTsKKyAg
ICBDVVJMU0gqIGN1cmxzaCA9IEN1cmxNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRDdXJsU2hhcmVI
YW5kbGUoKTsKIAogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09LSUVKQVIs
IGNvb2tpZUphckZpbGVOYW1lKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRf
U0hBUkUsIGN1cmxzaCk7CkBAIC0yNzUsNyArMjc4LDcgQEAgc3RhdGljIFN0cmluZyBjb29raWVz
Rm9yU2Vzc2lvbihjb25zdCBOZQogICAgIGlmICghY3VybCkKICAgICAgICAgcmV0dXJuIGNvb2tp
ZXM7CiAKLSAgICBDVVJMU0gqIGN1cmxzaCA9IFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2hhcmVk
SW5zdGFuY2UoKS0+Z2V0Q3VybFNoYXJlSGFuZGxlKCk7CisgICAgQ1VSTFNIKiBjdXJsc2ggPSBD
dXJsTWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0Q3VybFNoYXJlSGFuZGxlKCk7CiAKICAgICBjdXJs
X2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU0hBUkUsIGN1cmxzaCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQu
Y3BwCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybERvd25sb2FkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAog
CiAjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIK
LSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZU1hbmFnZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJl
cXVlc3QuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KQEAgLTQwLDE5NyArMzksOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDdXJsRG93bmxvYWRNYW5hZ2VyIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotQ3VybERvd25sb2FkTWFuYWdlcjo6Q3VybERvd25sb2FkTWFuYWdlcigpCi17Ci0gICAg
Y3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOwotICAgIG1fY3VybE11bHRpSGFuZGxl
ID0gY3VybF9tdWx0aV9pbml0KCk7Ci19Ci0KLUN1cmxEb3dubG9hZE1hbmFnZXI6On5DdXJsRG93
bmxvYWRNYW5hZ2VyKCkKLXsKLSAgICBzdG9wVGhyZWFkKCk7Ci0gICAgY3VybF9tdWx0aV9jbGVh
bnVwKG1fY3VybE11bHRpSGFuZGxlKTsKLSAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7Ci19Ci0K
LWJvb2wgQ3VybERvd25sb2FkTWFuYWdlcjo6YWRkKENVUkwqIGN1cmxIYW5kbGUpCi17Ci0gICAg
ewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKLSAgICAgICAgbV9wZW5kaW5n
SGFuZGxlTGlzdC5hcHBlbmQoY3VybEhhbmRsZSk7Ci0gICAgfQotCi0gICAgc3RhcnRUaHJlYWRJ
Zk5lZWRlZCgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ3VybERvd25sb2FkTWFu
YWdlcjo6cmVtb3ZlKENVUkwqIGN1cmxIYW5kbGUpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9tdXRleCk7Ci0KLSAgICBtX3JlbW92ZWRIYW5kbGVMaXN0LmFwcGVuZChjdXJsSGFuZGxlKTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgQ3VybERvd25sb2FkTWFuYWdlcjo6Z2V0QWN0
aXZlRG93bmxvYWRDb3VudCgpIGNvbnN0Ci17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRl
eCk7Ci0gICAgcmV0dXJuIG1fYWN0aXZlSGFuZGxlTGlzdC5zaXplKCk7Ci19Ci0KLWludCBDdXJs
RG93bmxvYWRNYW5hZ2VyOjpnZXRQZW5kaW5nRG93bmxvYWRDb3VudCgpIGNvbnN0Ci17Ci0gICAg
TG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgcmV0dXJuIG1fcGVuZGluZ0hhbmRsZUxp
c3Quc2l6ZSgpOwotfQotCi12b2lkIEN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZO
ZWVkZWQoKQotewotICAgIGlmICghcnVuVGhyZWFkKCkpIHsKLSAgICAgICAgaWYgKG1fdGhyZWFk
KQotICAgICAgICAgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7Ci0gICAgICAgIHNl
dFJ1blRocmVhZCh0cnVlKTsKLSAgICAgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShkb3du
bG9hZFRocmVhZCwgdGhpcywgImRvd25sb2FkVGhyZWFkIik7Ci0gICAgfQotfQotCi12b2lkIEN1
cmxEb3dubG9hZE1hbmFnZXI6OnN0b3BUaHJlYWQoKQotewotICAgIHNldFJ1blRocmVhZChmYWxz
ZSk7Ci0KLSAgICBpZiAobV90aHJlYWQpIHsKLSAgICAgICAgbV90aHJlYWQtPndhaXRGb3JDb21w
bGV0aW9uKCk7Ci0gICAgICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLXZvaWQg
Q3VybERvd25sb2FkTWFuYWdlcjo6c3RvcFRocmVhZElmSWRsZSgpCi17Ci0gICAgaWYgKCFnZXRB
Y3RpdmVEb3dubG9hZENvdW50KCkgJiYgIWdldFBlbmRpbmdEb3dubG9hZENvdW50KCkpCi0gICAg
ICAgIHNldFJ1blRocmVhZChmYWxzZSk7Ci19Ci0KLXZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6
dXBkYXRlSGFuZGxlTGlzdCgpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Ci0K
LSAgICAvLyBSZW1vdmUgY3VybCBlYXN5IGhhbmRsZXMgZnJvbSBtdWx0aSBsaXN0IAotICAgIGlu
dCBzaXplID0gbV9yZW1vdmVkSGFuZGxlTGlzdC5zaXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgcmVtb3ZlRnJvbUN1cmwobV9yZW1vdmVkSGFuZGxl
TGlzdFswXSk7Ci0gICAgICAgIG1fcmVtb3ZlZEhhbmRsZUxpc3QucmVtb3ZlKDApOwotICAgIH0K
LQotICAgIC8vIEFkZCBwZW5kaW5nIGN1cmwgZWFzeSBoYW5kbGVzIHRvIG11bHRpIGxpc3QgCi0g
ICAgc2l6ZSA9IG1fcGVuZGluZ0hhbmRsZUxpc3Quc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIGFkZFRvQ3VybChtX3BlbmRpbmdIYW5kbGVMaXN0
WzBdKTsKLSAgICAgICAgbV9wZW5kaW5nSGFuZGxlTGlzdC5yZW1vdmUoMCk7Ci0gICAgfQotfQot
Ci1ib29sIEN1cmxEb3dubG9hZE1hbmFnZXI6OmFkZFRvQ3VybChDVVJMKiBjdXJsSGFuZGxlKQot
ewotICAgIENVUkxNY29kZSByZXR2YWwgPSBjdXJsX211bHRpX2FkZF9oYW5kbGUobV9jdXJsTXVs
dGlIYW5kbGUsIGN1cmxIYW5kbGUpOwotICAgIGlmIChyZXR2YWwgPT0gQ1VSTE1fT0spIHsKLSAg
ICAgICAgbV9hY3RpdmVIYW5kbGVMaXN0LmFwcGVuZChjdXJsSGFuZGxlKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDdXJsRG93bmxv
YWRNYW5hZ2VyOjpyZW1vdmVGcm9tQ3VybChDVVJMKiBjdXJsSGFuZGxlKQotewotICAgIGludCBo
YW5kbGVQb3MgPSBtX2FjdGl2ZUhhbmRsZUxpc3QuZmluZChjdXJsSGFuZGxlKTsKLQotICAgIGlm
IChoYW5kbGVQb3MgPCAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBDVVJMTWNv
ZGUgcmV0dmFsID0gY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKG1fY3VybE11bHRpSGFuZGxlLCBj
dXJsSGFuZGxlKTsKLSAgICBpZiAocmV0dmFsID09IENVUkxNX09LKSB7Ci0gICAgICAgIG1fYWN0
aXZlSGFuZGxlTGlzdC5yZW1vdmUoaGFuZGxlUG9zKTsKLSAgICAgICAgY3VybF9lYXN5X2NsZWFu
dXAoY3VybEhhbmRsZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRUaHJlYWQodm9p
ZCogZGF0YSkKLXsKLSAgICBDdXJsRG93bmxvYWRNYW5hZ2VyKiBkb3dubG9hZE1hbmFnZXIgPSBy
ZWludGVycHJldF9jYXN0PEN1cmxEb3dubG9hZE1hbmFnZXIqPihkYXRhKTsKLQotICAgIHdoaWxl
IChkb3dubG9hZE1hbmFnZXItPnJ1blRocmVhZCgpKSB7Ci0KLSAgICAgICAgZG93bmxvYWRNYW5h
Z2VyLT51cGRhdGVIYW5kbGVMaXN0KCk7Ci0KLSAgICAgICAgLy8gUmV0cnkgJ3NlbGVjdCcgaWYg
aXQgd2FzIGludGVycnVwdGVkIGJ5IGEgcHJvY2VzcyBzaWduYWwuCi0gICAgICAgIGludCByYyA9
IDA7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGZkX3NldCBmZHJlYWQ7Ci0gICAgICAgICAg
ICBmZF9zZXQgZmR3cml0ZTsKLSAgICAgICAgICAgIGZkX3NldCBmZGV4Y2VwOwotCi0gICAgICAg
ICAgICBpbnQgbWF4ZmQgPSAwOwotCi0gICAgICAgICAgICBjb25zdCBpbnQgc2VsZWN0VGltZW91
dE1TID0gNTsKLQotICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKLSAgICAgICAg
ICAgIHRpbWVvdXQudHZfc2VjID0gMDsKLSAgICAgICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IHNl
bGVjdFRpbWVvdXRNUyAqIDEwMDA7IC8vIHNlbGVjdCB3YWl0cyBtaWNyb3NlY29uZHMKLQotICAg
ICAgICAgICAgRkRfWkVSTygmZmRyZWFkKTsKLSAgICAgICAgICAgIEZEX1pFUk8oJmZkd3JpdGUp
OwotICAgICAgICAgICAgRkRfWkVSTygmZmRleGNlcCk7Ci0gICAgICAgICAgICBjdXJsX211bHRp
X2Zkc2V0KGRvd25sb2FkTWFuYWdlci0+Z2V0TXVsdGlIYW5kbGUoKSwgJmZkcmVhZCwgJmZkd3Jp
dGUsICZmZGV4Y2VwLCAmbWF4ZmQpOwotICAgICAgICAgICAgLy8gV2hlbiB0aGUgMyBmaWxlIGRl
c2NyaXB0b3JzIGFyZSBlbXB0eSwgd2luc29jayB3aWxsIHJldHVybiAtMQotICAgICAgICAgICAg
Ly8gYW5kIGJhaWwgb3V0LCBzdG9wcGluZyB0aGUgZmlsZSBkb3dubG9hZC4gU28gbWFrZSBzdXJl
IHdlCi0gICAgICAgICAgICAvLyBoYXZlIHZhbGlkIGZpbGUgZGVzY3JpcHRvcnMgYmVmb3JlIGNh
bGxpbmcgc2VsZWN0LgotICAgICAgICAgICAgaWYgKG1heGZkID49IDApCi0gICAgICAgICAgICAg
ICAgcmMgPSA6OnNlbGVjdChtYXhmZCArIDEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwg
JnRpbWVvdXQpOwotICAgICAgICB9IHdoaWxlIChyYyA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7
Ci0KLSAgICAgICAgaW50IGFjdGl2ZURvd25sb2FkQ291bnQgPSAwOwotICAgICAgICB3aGlsZSAo
Y3VybF9tdWx0aV9wZXJmb3JtKGRvd25sb2FkTWFuYWdlci0+Z2V0TXVsdGlIYW5kbGUoKSwgJmFj
dGl2ZURvd25sb2FkQ291bnQpID09IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgeyB9Ci0KLSAg
ICAgICAgaW50IG1lc3NhZ2VzSW5RdWV1ZSA9IDA7Ci0gICAgICAgIENVUkxNc2cqIG1zZyA9IGN1
cmxfbXVsdGlfaW5mb19yZWFkKGRvd25sb2FkTWFuYWdlci0+Z2V0TXVsdGlIYW5kbGUoKSwgJm1l
c3NhZ2VzSW5RdWV1ZSk7Ci0KLSAgICAgICAgaWYgKCFtc2cpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBDdXJsRG93bmxvYWQqIGRvd25sb2FkID0gMDsKLSAgICAgICAgQ1VSTGNv
ZGUgZXJyID0gY3VybF9lYXN5X2dldGluZm8obXNnLT5lYXN5X2hhbmRsZSwgQ1VSTElORk9fUFJJ
VkFURSwgJmRvd25sb2FkKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGVycik7Ci0KLSAgICAgICAg
aWYgKG1zZy0+bXNnID09IENVUkxNU0dfRE9ORSkgewotICAgICAgICAgICAgaWYgKGRvd25sb2Fk
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1zZy0+ZGF0YS5yZXN1bHQgPT0gQ1VSTEVfT0spIHsK
LSAgICAgICAgICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZG93bmxvYWRdIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRvd25sb2FkLT5kaWRGaW5pc2goKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRvd25sb2FkLT5kZXJlZigpOyAvLyBUaGlzIG1hdGNoZXMgdGhlIHJlZigpIGlu
IEN1cmxEb3dubG9hZDo6c3RhcnQoKS4KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
ZG93bmxvYWRdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkLT5kaWRGYWlsKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZC0+ZGVyZWYoKTsgLy8gVGhpcyBtYXRj
aGVzIHRoZSByZWYoKSBpbiBDdXJsRG93bmxvYWQ6OnN0YXJ0KCkuCi0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRv
d25sb2FkTWFuYWdlci0+cmVtb3ZlRnJvbUN1cmwobXNnLT5lYXN5X2hhbmRsZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBkb3dubG9hZE1hbmFnZXItPnN0b3BUaHJlYWRJZklkbGUoKTsKLSAgICB9
Ci19Ci0KIC8vIEN1cmxEb3dubG9hZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1DdXJsRG93bmxvYWRN
YW5hZ2VyIEN1cmxEb3dubG9hZDo6bV9kb3dubG9hZE1hbmFnZXI7Ci0KIEN1cmxEb3dubG9hZDo6
Q3VybERvd25sb2FkKCkgPSBkZWZhdWx0OwogCiBDdXJsRG93bmxvYWQ6On5DdXJsRG93bmxvYWQo
KQpAQCAtMjc1LDcgKzg1LDcgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OmluaXQoQ3VybERvd25sb2Fk
TGlzdAogICAgIGlmIChjZXJ0UGF0aCkKICAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2N1cmxI
YW5kbGUsIENVUkxPUFRfQ0FJTkZPLCBjZXJ0UGF0aCk7CiAKLSAgICBDVVJMU0gqIGN1cmxzaCA9
IFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKS0+Z2V0Q3VybFNoYXJlSGFu
ZGxlKCk7CisgICAgQ1VSTFNIKiBjdXJsc2ggPSBDdXJsTWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0
Q3VybFNoYXJlSGFuZGxlKCk7CiAgICAgaWYgKGN1cmxzaCkKICAgICAgICAgY3VybF9lYXN5X3Nl
dG9wdChtX2N1cmxIYW5kbGUsIENVUkxPUFRfU0hBUkUsIGN1cmxzaCk7CiAKQEAgLTI5NywxMiAr
MTA3LDEyIEBAIHZvaWQgQ3VybERvd25sb2FkOjppbml0KEN1cmxEb3dubG9hZExpc3QKIGJvb2wg
Q3VybERvd25sb2FkOjpzdGFydCgpCiB7CiAgICAgcmVmKCk7IC8vIEN1cmxEb3dubG9hZE1hbmFn
ZXI6OmRvd25sb2FkVGhyZWFkIHdpbGwgY2FsbCBkZXJlZiB3aGVuIHRoZSBkb3dubG9hZCBoYXMg
ZmluaXNoZWQuCi0gICAgcmV0dXJuIG1fZG93bmxvYWRNYW5hZ2VyLmFkZChtX2N1cmxIYW5kbGUp
OworICAgIHJldHVybiBDdXJsTWFuYWdlcjo6c2luZ2xldG9uKCkuYWRkKG1fY3VybEhhbmRsZSk7
CiB9CiAKIGJvb2wgQ3VybERvd25sb2FkOjpjYW5jZWwoKQogewotICAgIHJldHVybiBtX2Rvd25s
b2FkTWFuYWdlci5yZW1vdmUobV9jdXJsSGFuZGxlKTsKKyAgICByZXR1cm4gQ3VybE1hbmFnZXI6
OnNpbmdsZXRvbigpLnJlbW92ZShtX2N1cmxIYW5kbGUpOwogfQogCiBTdHJpbmcgQ3VybERvd25s
b2FkOjpnZXRUZW1wUGF0aCgpIGNvbnN0CkBAIC0zOTMsNyArMjAzLDcgQEAgdm9pZCBDdXJsRG93
bmxvYWQ6OmRpZFJlY2VpdmVIZWFkZXIoY29ucwogICAgICAgICBVTlVTRURfUEFSQU0oZXJyKTsK
IAogICAgICAgICBpZiAoaHR0cENvZGUgPj0gMjAwICYmIGh0dHBDb2RlIDwgMzAwKSB7Ci0gICAg
ICAgICAgICBVUkwgdXJsID0gZ2V0Q3VybEVmZmVjdGl2ZVVSTChtX2N1cmxIYW5kbGUpOworICAg
ICAgICAgICAgVVJMIHVybCA9IEN1cmxVdGlsczo6Z2V0RWZmZWN0aXZlVVJMKG1fY3VybEhhbmRs
ZSk7CiAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB1cmwgPSB1cmwuaXNvbGF0
ZWRDb3B5KCksIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewogICAgICAgICAgICAg
ICAgIG1fcmVzcG9uc2Uuc2V0VVJMKHVybCk7CiAgICAgICAgICAgICAgICAgbV9yZXNwb25zZS5z
ZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKG1fcmVzcG9uc2UuaHR0cEhl
YWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpKTsKQEAgLTUwNiw2ICszMTYs
MjkgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OnJlY2VpdmVkUmVzcG9uc2VDYWxsYgogICAgICAgICBk
b3dubG9hZC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiB9CiAKK0N1cmxKb2JBY3Rpb24gQ3VybERv
d25sb2FkOjpoYW5kbGVDdXJsTXNnKENVUkxNc2cqIG1zZykKK3sKKyAgICBzd2l0Y2ggKG1zZy0+
bXNnKSB7CisgICAgY2FzZSBDVVJMTVNHX0RPTkU6IHsKKyAgICAgICAgaWYgKG1zZy0+ZGF0YS5y
ZXN1bHQgPT0gQ1VSTEVfT0spIHsKKyAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNd
IHsKKyAgICAgICAgICAgICAgICBkaWRGaW5pc2goKTsKKyAgICAgICAgICAgICAgICBkZXJlZigp
OyAvLyBUaGlzIG1hdGNoZXMgdGhlIHJlZigpIGluIEN1cmxEb3dubG9hZDo6c3RhcnQoKS4KKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2FsbE9uTWFpblRo
cmVhZChbdGhpc10geworICAgICAgICAgICAgICAgIGRpZEZhaWwoKTsKKyAgICAgICAgICAgICAg
ICBkZXJlZigpOyAvLyBUaGlzIG1hdGNoZXMgdGhlIHJlZigpIGluIEN1cmxEb3dubG9hZDo6c3Rh
cnQoKS4KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBDdXJsSm9i
QWN0aW9uOjpGaW5pc2hlZDsKKyAgICB9CisgICAgZGVmYXVsdDogeworICAgICAgICByZXR1cm4g
Q3VybEpvYkFjdGlvbjo6Tm9uZTsKKyAgICB9CisgICAgfQorfQorCiB9CiAKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93
bmxvYWQuaAkocmV2aXNpb24gMjE4NjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw0NyArMzYsMTAg
QEAKICNpbmNsdWRlIDx3aW5zb2NrMi5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxjdXJsL2N1cmwu
aD4KKyNpbmNsdWRlICJDdXJsTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEN1cmxEb3dubG9hZE1hbmFnZXIgewotcHVibGljOgotICAgIEN1cmxEb3dubG9hZE1hbmFn
ZXIoKTsKLSAgICB+Q3VybERvd25sb2FkTWFuYWdlcigpOwotCi0gICAgYm9vbCBhZGQoQ1VSTCog
Y3VybEhhbmRsZSk7Ci0gICAgYm9vbCByZW1vdmUoQ1VSTCogY3VybEhhbmRsZSk7Ci0KLSAgICBp
bnQgZ2V0QWN0aXZlRG93bmxvYWRDb3VudCgpIGNvbnN0OwotICAgIGludCBnZXRQZW5kaW5nRG93
bmxvYWRDb3VudCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZvaWQgc3RhcnRUaHJlYWRJZk5l
ZWRlZCgpOwotICAgIHZvaWQgc3RvcFRocmVhZCgpOwotICAgIHZvaWQgc3RvcFRocmVhZElmSWRs
ZSgpOwotCi0gICAgdm9pZCB1cGRhdGVIYW5kbGVMaXN0KCk7Ci0KLSAgICBDVVJMTSogZ2V0TXVs
dGlIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2N1cmxNdWx0aUhhbmRsZTsgfQotCi0gICAgYm9v
bCBydW5UaHJlYWQoKSBjb25zdCB7IExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOyByZXR1cm4g
bV9ydW5UaHJlYWQ7IH0KLSAgICB2b2lkIHNldFJ1blRocmVhZChib29sIHJ1blRocmVhZCkgeyBM
b2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsgbV9ydW5UaHJlYWQgPSBydW5UaHJlYWQ7IH0KLQot
ICAgIGJvb2wgYWRkVG9DdXJsKENVUkwqIGN1cmxIYW5kbGUpOwotICAgIGJvb2wgcmVtb3ZlRnJv
bUN1cmwoQ1VSTCogY3VybEhhbmRsZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkb3dubG9hZFRocmVh
ZCh2b2lkKiBkYXRhKTsKLQotICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwotICAgIENVUkxN
KiBtX2N1cmxNdWx0aUhhbmRsZSB7IG51bGxwdHIgfTsKLSAgICBWZWN0b3I8Q1VSTCo+IG1fcGVu
ZGluZ0hhbmRsZUxpc3Q7Ci0gICAgVmVjdG9yPENVUkwqPiBtX2FjdGl2ZUhhbmRsZUxpc3Q7Ci0g
ICAgVmVjdG9yPENVUkwqPiBtX3JlbW92ZWRIYW5kbGVMaXN0OwotICAgIG11dGFibGUgTG9jayBt
X211dGV4OwotICAgIGJvb2wgbV9ydW5UaHJlYWQgeyBmYWxzZSB9OwotfTsKLQogY2xhc3MgQ3Vy
bERvd25sb2FkTGlzdGVuZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoKSB7IH0KQEAgLTg1LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsKCkgeyB9CiB9OwogCi1jbGFzcyBDdXJsRG93bmxvYWQgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8Q3VybERvd25sb2FkPiB7CitjbGFzcyBDdXJsRG93bmxvYWQgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q3VybERvd25sb2FkPiwgcHVibGljIEN1cmxKb2Igewog
cHVibGljOgogICAgIEN1cmxEb3dubG9hZCgpOwogICAgIH5DdXJsRG93bmxvYWQoKTsKQEAgLTEw
Nyw2ICs3MCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0RGVzdGluYXRpb24oY29uc3QgU3Ry
aW5nJiBkZXN0aW5hdGlvbikgeyBtX2Rlc3RpbmF0aW9uID0gZGVzdGluYXRpb247IH0KIAorICAg
IHZpcnR1YWwgQ3VybEpvYkFjdGlvbiBoYW5kbGVDdXJsTXNnKENVUkxNc2cqKTsKKwogcHJpdmF0
ZToKICAgICB2b2lkIGNsb3NlRmlsZSgpOwogICAgIHZvaWQgbW92ZUZpbGVUb0Rlc3RpbmF0aW9u
KCk7CkBAIC0xNDIsMTAgKzEwNyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RlbGV0ZXNGaWxl
VXBvbkZhaWx1cmUgeyBmYWxzZSB9OwogICAgIG11dGFibGUgTG9jayBtX211dGV4OwogICAgIEN1
cmxEb3dubG9hZExpc3RlbmVyKiBtX2xpc3RlbmVyIHsgbnVsbHB0ciB9OwotCi0gICAgc3RhdGlj
IEN1cmxEb3dubG9hZE1hbmFnZXIgbV9kb3dubG9hZE1hbmFnZXI7Ci0KLSAgICBmcmllbmQgY2xh
c3MgQ3VybERvd25sb2FkTWFuYWdlcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IFVTRShDVVJMKQorI2luY2x1ZGUgIkN1cmxNYW5hZ2VyLmgiCisKKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ3VybFNoYXJlZFJl
c291cmNlcyB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgbG9jayhDVVJMKiwgY3VybF9sb2Nr
X2RhdGEsIGN1cmxfbG9ja19hY2Nlc3MsIHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCB1bmxvY2so
Q1VSTCosIGN1cmxfbG9ja19kYXRhLCB2b2lkKik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIExv
Y2sqIG11dGV4Rm9yKGN1cmxfbG9ja19kYXRhKTsKK307CisKKy8vIEN1cmxEb3dubG9hZE1hbmFn
ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitDdXJsTWFuYWdlcjo6Q3VybE1hbmFnZXIoKQoreworICAgIGN1cmxf
Z2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKyAgICBtX2N1cmxNdWx0aUhhbmRsZSA9IGN1
cmxfbXVsdGlfaW5pdCgpOworICAgIG1fY3VybFNoYXJlSGFuZGxlID0gY3VybF9zaGFyZV9pbml0
KCk7CisgICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9T
SEFSRSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFKTsKKyAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1
cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX1NIQVJFLCBDVVJMX0xPQ0tfREFUQV9ETlMpOworICAg
IGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfTE9DS0ZVTkMs
IEN1cmxTaGFyZWRSZXNvdXJjZXM6OmxvY2spOworICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3Vy
bFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfVU5MT0NLRlVOQywgQ3VybFNoYXJlZFJlc291cmNlczo6
dW5sb2NrKTsKK30KKworQ3VybE1hbmFnZXI6On5DdXJsTWFuYWdlcigpCit7CisgICAgc3RvcFRo
cmVhZCgpOworICAgIGN1cmxfbXVsdGlfY2xlYW51cChtX2N1cmxNdWx0aUhhbmRsZSk7CisgICAg
Y3VybF9zaGFyZV9jbGVhbnVwKG1fY3VybFNoYXJlSGFuZGxlKTsKKyAgICBjdXJsX2dsb2JhbF9j
bGVhbnVwKCk7Cit9CisKK2Jvb2wgQ3VybE1hbmFnZXI6OmFkZChDVVJMKiBjdXJsSGFuZGxlKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICB7CisgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3BlbmRpbmdIYW5kbGVMaXN0LmFwcGVuZChj
dXJsSGFuZGxlKTsKKyAgICB9CisKKyAgICBzdGFydFRocmVhZElmTmVlZGVkKCk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDdXJsTWFuYWdlcjo6cmVtb3ZlKENVUkwqIGN1cmxIYW5k
bGUpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisKKyAgICBtX3JlbW92ZWRI
YW5kbGVMaXN0LmFwcGVuZChjdXJsSGFuZGxlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitp
bnQgQ3VybE1hbmFnZXI6OmdldEFjdGl2ZUNvdW50KCkgY29uc3QKK3sKKyAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX211dGV4KTsKKyAgICByZXR1cm4gbV9hY3RpdmVIYW5kbGVMaXN0LnNpemUoKTsK
K30KKworaW50IEN1cmxNYW5hZ2VyOjpnZXRQZW5kaW5nQ291bnQoKSBjb25zdAoreworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIHJldHVybiBtX3BlbmRpbmdIYW5kbGVMaXN0
LnNpemUoKTsKK30KKwordm9pZCBDdXJsTWFuYWdlcjo6c3RhcnRUaHJlYWRJZk5lZWRlZCgpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghcnVuVGhyZWFkKCkpIHsK
KyAgICAgICAgaWYgKG1fdGhyZWFkKQorICAgICAgICAgICAgbV90aHJlYWQtPndhaXRGb3JDb21w
bGV0aW9uKCk7CisgICAgICAgIHNldFJ1blRocmVhZCh0cnVlKTsKKyAgICAgICAgbV90aHJlYWQg
PSBUaHJlYWQ6OmNyZWF0ZSh3b3JrZXJUaHJlYWQsIHRoaXMsICJjdXJsVGhyZWFkIik7CisgICAg
fQorfQorCit2b2lkIEN1cmxNYW5hZ2VyOjpzdG9wVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKKworICAgIGlmIChtX3Ro
cmVhZCkgeworICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAg
bV90aHJlYWQgPSBudWxscHRyOworICAgIH0KK30KKwordm9pZCBDdXJsTWFuYWdlcjo6c3RvcFRo
cmVhZElmSWRsZSgpCit7CisgICAgaWYgKCFnZXRBY3RpdmVDb3VudCgpICYmICFnZXRQZW5kaW5n
Q291bnQoKSkKKyAgICAgICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKK30KKwordm9pZCBDdXJsTWFu
YWdlcjo6dXBkYXRlSGFuZGxlTGlzdCgpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRl
eCk7CisKKyAgICAvLyBSZW1vdmUgY3VybCBlYXN5IGhhbmRsZXMgZnJvbSBtdWx0aSBsaXN0IAor
ICAgIGludCBzaXplID0gbV9yZW1vdmVkSGFuZGxlTGlzdC5zaXplKCk7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgcmVtb3ZlRnJvbUN1cmwobV9yZW1vdmVk
SGFuZGxlTGlzdFswXSk7CisgICAgICAgIG1fcmVtb3ZlZEhhbmRsZUxpc3QucmVtb3ZlKDApOwor
ICAgIH0KKworICAgIC8vIEFkZCBwZW5kaW5nIGN1cmwgZWFzeSBoYW5kbGVzIHRvIG11bHRpIGxp
c3QgCisgICAgc2l6ZSA9IG1fcGVuZGluZ0hhbmRsZUxpc3Quc2l6ZSgpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGFkZFRvQ3VybChtX3BlbmRpbmdIYW5k
bGVMaXN0WzBdKTsKKyAgICAgICAgbV9wZW5kaW5nSGFuZGxlTGlzdC5yZW1vdmUoMCk7CisgICAg
fQorfQorCitib29sIEN1cmxNYW5hZ2VyOjphZGRUb0N1cmwoQ1VSTCogY3VybEhhbmRsZSkKK3sK
KyAgICBDVVJMTWNvZGUgcmV0dmFsID0gY3VybF9tdWx0aV9hZGRfaGFuZGxlKG1fY3VybE11bHRp
SGFuZGxlLCBjdXJsSGFuZGxlKTsKKyAgICBpZiAocmV0dmFsID09IENVUkxNX09LKSB7CisgICAg
ICAgIG1fYWN0aXZlSGFuZGxlTGlzdC5hcHBlbmQoY3VybEhhbmRsZSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ3VybE1hbmFnZXI6
OnJlbW92ZUZyb21DdXJsKENVUkwqIGN1cmxIYW5kbGUpCit7CisgICAgaW50IGhhbmRsZVBvcyA9
IG1fYWN0aXZlSGFuZGxlTGlzdC5maW5kKGN1cmxIYW5kbGUpOworCisgICAgaWYgKGhhbmRsZVBv
cyA8IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIENVUkxNY29kZSByZXR2YWwg
PSBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUobV9jdXJsTXVsdGlIYW5kbGUsIGN1cmxIYW5kbGUp
OworICAgIGlmIChyZXR2YWwgPT0gQ1VSTE1fT0spIHsKKyAgICAgICAgbV9hY3RpdmVIYW5kbGVM
aXN0LnJlbW92ZShoYW5kbGVQb3MpOworICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsSGFu
ZGxlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBDdXJsTWFuYWdlcjo6d29ya2VyVGhyZWFkKHZvaWQqIGRhdGEpCit7CisgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBDdXJsTWFuYWdlciogbWFuYWdlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Q3VybE1hbmFnZXIqPihkYXRhKTsKKworICAgIHdoaWxlIChtYW5hZ2VyLT5y
dW5UaHJlYWQoKSkgeworCisgICAgICAgIG1hbmFnZXItPnVwZGF0ZUhhbmRsZUxpc3QoKTsKKwor
ICAgICAgICAvLyBSZXRyeSAnc2VsZWN0JyBpZiBpdCB3YXMgaW50ZXJydXB0ZWQgYnkgYSBwcm9j
ZXNzIHNpZ25hbC4KKyAgICAgICAgaW50IHJjID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgZmRfc2V0IGZkcmVhZDsKKyAgICAgICAgICAgIGZkX3NldCBmZHdyaXRlOworICAgICAgICAg
ICAgZmRfc2V0IGZkZXhjZXA7CisKKyAgICAgICAgICAgIGludCBtYXhmZCA9IDA7CisKKyAgICAg
ICAgICAgIGNvbnN0IGludCBzZWxlY3RUaW1lb3V0TVMgPSA1OworCisgICAgICAgICAgICBzdHJ1
Y3QgdGltZXZhbCB0aW1lb3V0OworICAgICAgICAgICAgdGltZW91dC50dl9zZWMgPSAwOworICAg
ICAgICAgICAgdGltZW91dC50dl91c2VjID0gc2VsZWN0VGltZW91dE1TICogMTAwMDsgLy8gc2Vs
ZWN0IHdhaXRzIG1pY3Jvc2Vjb25kcworCisgICAgICAgICAgICBGRF9aRVJPKCZmZHJlYWQpOwor
ICAgICAgICAgICAgRkRfWkVSTygmZmR3cml0ZSk7CisgICAgICAgICAgICBGRF9aRVJPKCZmZGV4
Y2VwKTsKKyAgICAgICAgICAgIGN1cmxfbXVsdGlfZmRzZXQobWFuYWdlci0+Z2V0TXVsdGlIYW5k
bGUoKSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQpOworICAgICAgICAgICAg
Ly8gV2hlbiB0aGUgMyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBlbXB0eSwgd2luc29jayB3aWxsIHJl
dHVybiAtMQorICAgICAgICAgICAgLy8gYW5kIGJhaWwgb3V0LCBzdG9wcGluZyB0aGUgZmlsZSBk
b3dubG9hZC4gU28gbWFrZSBzdXJlIHdlCisgICAgICAgICAgICAvLyBoYXZlIHZhbGlkIGZpbGUg
ZGVzY3JpcHRvcnMgYmVmb3JlIGNhbGxpbmcgc2VsZWN0LgorICAgICAgICAgICAgaWYgKG1heGZk
ID49IDApCisgICAgICAgICAgICAgICAgcmMgPSA6OnNlbGVjdChtYXhmZCArIDEsICZmZHJlYWQs
ICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVvdXQpOworICAgICAgICB9IHdoaWxlIChyYyA9PSAt
MSAmJiBlcnJubyA9PSBFSU5UUik7CisKKyAgICAgICAgaW50IGFjdGl2ZUNvdW50ID0gMDsKKyAg
ICAgICAgd2hpbGUgKGN1cmxfbXVsdGlfcGVyZm9ybShtYW5hZ2VyLT5nZXRNdWx0aUhhbmRsZSgp
LCAmYWN0aXZlQ291bnQpID09IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgeyB9CisKKyAgICAg
ICAgaW50IG1lc3NhZ2VzSW5RdWV1ZSA9IDA7CisgICAgICAgIENVUkxNc2cqIG1zZyA9IGN1cmxf
bXVsdGlfaW5mb19yZWFkKG1hbmFnZXItPmdldE11bHRpSGFuZGxlKCksICZtZXNzYWdlc0luUXVl
dWUpOworCisgICAgICAgIGlmICghbXNnKQorICAgICAgICAgICAgY29udGludWU7CisKKworICAg
ICAgICBDdXJsSm9iKiBqb2IgPSBudWxscHRyOworICAgICAgICBDVVJMY29kZSBlcnIgPSBjdXJs
X2Vhc3lfZ2V0aW5mbyhtc2ctPmVhc3lfaGFuZGxlLCBDVVJMSU5GT19QUklWQVRFLCAmam9iKTsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKGVycik7CisgICAgICAgIEFTU0VSVChqb2IpOworCisgICAg
ICAgIEN1cmxKb2JBY3Rpb24gYWN0aW9uID0gam9iLT5oYW5kbGVDdXJsTXNnKG1zZyk7CisKKyAg
ICAgICAgaWYgKGFjdGlvbiA9PSBDdXJsSm9iQWN0aW9uOjpGaW5pc2hlZCkKKyAgICAgICAgICAg
IG1hbmFnZXItPnJlbW92ZUZyb21DdXJsKG1zZy0+ZWFzeV9oYW5kbGUpOworCisgICAgICAgIG1h
bmFnZXItPnN0b3BUaHJlYWRJZklkbGUoKTsKKyAgICB9Cit9CisKKy8vIENVUkwgVXRpbGl0aWVz
CisKK1VSTCBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChDVVJMKiBoYW5kbGUpCit7CisgICAg
Y29uc3QgY2hhciogdXJsOworICAgIENVUkxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKGhh
bmRsZSwgQ1VSTElORk9fRUZGRUNUSVZFX1VSTCwgJnVybCk7CisgICAgaWYgKENVUkxFX09LICE9
IGVycikKKyAgICAgICAgcmV0dXJuIFVSTCgpOworICAgIHJldHVybiBVUkwoVVJMKCksIHVybCk7
Cit9CisKKy8vIFNoYXJlZCBSZXNvdXJjZSBtYW5hZ2VtZW50ID09PT09PT09PT09PT09PT09PT09
PT09CisKK0xvY2sqIEN1cmxTaGFyZWRSZXNvdXJjZXM6Om11dGV4Rm9yKGN1cmxfbG9ja19kYXRh
IGRhdGEpCit7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKExvY2ssIGNvb2tp
ZU11dGV4LCAoKSk7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKExvY2ssIGRu
c011dGV4LCAoKSk7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKExvY2ssIHNo
YXJlTXV0ZXgsICgpKTsKKworICAgIHN3aXRjaCAoZGF0YSkgeworICAgIGNhc2UgQ1VSTF9MT0NL
X0RBVEFfQ09PS0lFOgorICAgICAgICByZXR1cm4gJmNvb2tpZU11dGV4OworICAgIGNhc2UgQ1VS
TF9MT0NLX0RBVEFfRE5TOgorICAgICAgICByZXR1cm4gJmRuc011dGV4OworICAgIGNhc2UgQ1VS
TF9MT0NLX0RBVEFfU0hBUkU6CisgICAgICAgIHJldHVybiAmc2hhcmVNdXRleDsKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorfQorCisvLyBsaWJjdXJsIGRvZXMgbm90IGltcGxlbWVudCBpdHMgb3duIHRo
cmVhZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4KKy8vIHRoZXNlIHR3byBmdW5jdGlvbnMg
cHJvdmlkZSBtdXRleGVzIGZvciBjb29raWVzLCBhbmQgZm9yIHRoZSBnbG9iYWwgRE5TCisvLyBj
YWNoZS4KK3ZvaWQgQ3VybFNoYXJlZFJlc291cmNlczo6bG9jayhDVVJMKiAvKiBoYW5kbGUgKi8s
IGN1cmxfbG9ja19kYXRhIGRhdGEsIGN1cmxfbG9ja19hY2Nlc3MgLyogYWNjZXNzICovLCB2b2lk
KiAvKiB1c2VyUHRyICovKQoreworICAgIGlmIChMb2NrKiBtdXRleCA9IEN1cmxTaGFyZWRSZXNv
dXJjZXM6Om11dGV4Rm9yKGRhdGEpKQorICAgICAgICBtdXRleC0+bG9jaygpOworfQorCit2b2lk
IEN1cmxTaGFyZWRSZXNvdXJjZXM6OnVubG9jayhDVVJMKiAvKiBoYW5kbGUgKi8sIGN1cmxfbG9j
a19kYXRhIGRhdGEsIHZvaWQqIC8qIHVzZXJQdHIgKi8pCit7CisgICAgaWYgKExvY2sqIG11dGV4
ID0gQ3VybFNoYXJlZFJlc291cmNlczo6bXV0ZXhGb3IoZGF0YSkpCisgICAgICAgIG11dGV4LT51
bmxvY2soKTsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNp
ZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbnNvY2sy
Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgIlVSTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2VudW0gY2xhc3MgQ3VybEpvYkFjdGlvbiB7IE5vbmUsIEZpbmlzaGVkIH07CisKK2NsYXNzIEN1
cmxKb2IgeworcHVibGljOgorICAgIHZpcnR1YWwgQ3VybEpvYkFjdGlvbiBoYW5kbGVDdXJsTXNn
KENVUkxNc2cqKSA9IDA7Cit9OworCitjbGFzcyBDdXJsTWFuYWdlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIEN1cmxNYW5hZ2VyJiBzaW5nbGV0b24oKQorICAgIHsKKyAgICAgICAgLy8gU2luY2Ug
aXQncyBhIHN0YXRpYyB2YXJpYWJsZSwgaWYgdGhlIGNsYXNzIGhhcyBhbHJlYWR5IGJlZW4gY3Jl
YXRlZCwKKyAgICAgICAgLy8gSXQgd29uJ3QgYmUgY3JlYXRlZCBhZ2Fpbi4KKyAgICAgICAgLy8g
QW5kIGl0ICoqaXMqKiB0aHJlYWQtc2FmZSBpbiBDKysxMS4KKworICAgICAgICBzdGF0aWMgQ3Vy
bE1hbmFnZXIgc2hhcmVkOworICAgICAgICByZXR1cm4gc2hhcmVkOworICAgIH0KKworICAgIEN1
cmxNYW5hZ2VyKCk7CisgICAgdmlydHVhbCB+Q3VybE1hbmFnZXIoKTsKKworICAgIGJvb2wgYWRk
KENVUkwqIGN1cmxIYW5kbGUpOworICAgIGJvb2wgcmVtb3ZlKENVUkwqIGN1cmxIYW5kbGUpOwor
CisgICAgaW50IGdldEFjdGl2ZUNvdW50KCkgY29uc3Q7CisgICAgaW50IGdldFBlbmRpbmdDb3Vu
dCgpIGNvbnN0OworCisgICAgQ1VSTFNIKiBnZXRDdXJsU2hhcmVIYW5kbGUoKSBjb25zdCB7IHJl
dHVybiBtX2N1cmxTaGFyZUhhbmRsZTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgc3RhcnRUaHJl
YWRJZk5lZWRlZCgpOworICAgIHZvaWQgc3RvcFRocmVhZCgpOworICAgIHZvaWQgc3RvcFRocmVh
ZElmSWRsZSgpOworCisgICAgdm9pZCB1cGRhdGVIYW5kbGVMaXN0KCk7CisKKyAgICBDVVJMTSog
Z2V0TXVsdGlIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2N1cmxNdWx0aUhhbmRsZTsgfQorCisg
ICAgYm9vbCBydW5UaHJlYWQoKSBjb25zdCB7IExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOyBy
ZXR1cm4gbV9ydW5UaHJlYWQ7IH0KKyAgICB2b2lkIHNldFJ1blRocmVhZChib29sIHJ1blRocmVh
ZCkgeyBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsgbV9ydW5UaHJlYWQgPSBydW5UaHJlYWQ7
IH0KKworICAgIGJvb2wgYWRkVG9DdXJsKENVUkwqIGN1cmxIYW5kbGUpOworICAgIGJvb2wgcmVt
b3ZlRnJvbUN1cmwoQ1VSTCogY3VybEhhbmRsZSk7CisKKyAgICBzdGF0aWMgdm9pZCB3b3JrZXJU
aHJlYWQodm9pZCogZGF0YSk7CisKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKKyAgICBD
VVJMTSogbV9jdXJsTXVsdGlIYW5kbGUgeyBudWxscHRyIH07CisgICAgVmVjdG9yPENVUkwqPiBt
X3BlbmRpbmdIYW5kbGVMaXN0OworICAgIFZlY3RvcjxDVVJMKj4gbV9hY3RpdmVIYW5kbGVMaXN0
OworICAgIFZlY3RvcjxDVVJMKj4gbV9yZW1vdmVkSGFuZGxlTGlzdDsKKyAgICBtdXRhYmxlIExv
Y2sgbV9tdXRleDsKKyAgICBib29sIG1fcnVuVGhyZWFkIHsgZmFsc2UgfTsKKworICAgIENVUkxT
SCogbV9jdXJsU2hhcmVIYW5kbGUgeyBudWxscHRyIH07CisKKyAgICBmcmllbmQgY2xhc3MgQ3Vy
bEpvYjsKK307CisKK2NsYXNzIEN1cmxVdGlscyB7CitwdWJsaWM6CisgICAgc3RhdGljIFVSTCBn
ZXRFZmZlY3RpdmVVUkwoQ1VSTCogaGFuZGxlKTsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhh
bmRsZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNiArNDIsNyBAQAogCiAjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKICNp
bmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ3VybE1hbmFnZXIuaCIKICNp
bmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2lu
Y2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKQEAgLTg3LDE1ICs4OCw2IEBAIHN0YXRpYyBjb25z
dCBTZWNvbmRzIHBvbGxUaW1lIHsgNTBfbXMgfTsKIGNvbnN0IGludCBtYXhSdW5uaW5nSm9icyA9
IDEyODsKIGNvbnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluQ3VybCA9ICJDdXJsRXJyb3JEb21h
aW4iOwogCi1VUkwgZ2V0Q3VybEVmZmVjdGl2ZVVSTChDVVJMKiBoYW5kbGUpCi17Ci0gICAgY29u
c3QgY2hhciogdXJsOwotICAgIENVUkxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKGhhbmRs
ZSwgQ1VSTElORk9fRUZGRUNUSVZFX1VSTCwgJnVybCk7Ci0gICAgaWYgKENVUkxFX09LICE9IGVy
cikKLSAgICAgICAgcmV0dXJuIFVSTCgpOwotICAgIHJldHVybiBVUkwoVVJMKCksIHVybCk7Ci19
Ci0KIHN0YXRpYyBjb25zdCBib29sIGlnbm9yZVNTTEVycm9ycyA9IGdldGVudigiV0VCS0lUX0lH
Tk9SRV9TU0xfRVJST1JTIik7CiAKIHN0YXRpYyBDU3RyaW5nIGNlcnRpZmljYXRlUGF0aCgpCkBA
IC0xNTEsMjUgKzE0Myw2IEBAIHN0YXRpYyBjaGFyKiBjb29raWVKYXJQYXRoKCkKICNlbmRpZgog
fQogCi1zdGF0aWMgTG9jayogc2hhcmVkUmVzb3VyY2VNdXRleChjdXJsX2xvY2tfZGF0YSBkYXRh
KQotewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBjb29raWVNdXRl
eCwgKCkpOwotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBkbnNNdXRl
eCwgKCkpOwotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBzaGFyZU11
dGV4LCAoKSk7Ci0KLSAgICBzd2l0Y2ggKGRhdGEpIHsKLSAgICAgICAgY2FzZSBDVVJMX0xPQ0tf
REFUQV9DT09LSUU6Ci0gICAgICAgICAgICByZXR1cm4gJmNvb2tpZU11dGV4OwotICAgICAgICBj
YXNlIENVUkxfTE9DS19EQVRBX0ROUzoKLSAgICAgICAgICAgIHJldHVybiAmZG5zTXV0ZXg7Ci0g
ICAgICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfU0hBUkU6Ci0gICAgICAgICAgICByZXR1cm4gJnNo
YXJlTXV0ZXg7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQogI2lmIEVOQUJMRShX
RUJfVElNSU5HKQogc3RhdGljIHZvaWQgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKFJl
c291cmNlSGFuZGxlSW50ZXJuYWwqIGQpCiB7CkBAIC0xOTcsMjEgKzE3MCw2IEBAIHN0YXRpYyB2
b2lkIGNhbGN1bGF0ZVdlYlRpbWluZ0luZm9ybWF0aW8KIH0KICNlbmRpZgogCi0vLyBsaWJjdXJs
IGRvZXMgbm90IGltcGxlbWVudCBpdHMgb3duIHRocmVhZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0
aXZlcy4KLS8vIHRoZXNlIHR3byBmdW5jdGlvbnMgcHJvdmlkZSBtdXRleGVzIGZvciBjb29raWVz
LCBhbmQgZm9yIHRoZSBnbG9iYWwgRE5TCi0vLyBjYWNoZS4KLXN0YXRpYyB2b2lkIGN1cmxfbG9j
a19jYWxsYmFjayhDVVJMKiAvKiBoYW5kbGUgKi8sIGN1cmxfbG9ja19kYXRhIGRhdGEsIGN1cmxf
bG9ja19hY2Nlc3MgLyogYWNjZXNzICovLCB2b2lkKiAvKiB1c2VyUHRyICovKQotewotICAgIGlm
IChMb2NrKiBtdXRleCA9IHNoYXJlZFJlc291cmNlTXV0ZXgoZGF0YSkpCi0gICAgICAgIG11dGV4
LT5sb2NrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGN1cmxfdW5sb2NrX2NhbGxiYWNrKENVUkwqIC8q
IGhhbmRsZSAqLywgY3VybF9sb2NrX2RhdGEgZGF0YSwgdm9pZCogLyogdXNlclB0ciAqLykKLXsK
LSAgICBpZiAoTG9jayogbXV0ZXggPSBzaGFyZWRSZXNvdXJjZU11dGV4KGRhdGEpKQotICAgICAg
ICBtdXRleC0+dW5sb2NrKCk7Ci19Ci0KIGlubGluZSBzdGF0aWMgYm9vbCBpc0h0dHBJbmZvKGlu
dCBzdGF0dXNDb2RlKQogewogICAgIHJldHVybiAxMDAgPD0gc3RhdHVzQ29kZSAmJiBzdGF0dXND
b2RlIDwgMjAwOwpAQCAtMjM1LDE5ICsxOTMsMTYgQEAgaW5saW5lIHN0YXRpYyBib29sIGlzSHR0
cE5vdE1vZGlmaWVkKGludAogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpSZXNvdXJjZUhhbmRsZU1h
bmFnZXIoKQogICAgIDogbV9kb3dubG9hZFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2spCiAgICAgLCBtX2Nvb2tpZUphckZpbGVOYW1lKGNv
b2tpZUphclBhdGgoKSkKLSAgICAsIG1fY2VydGlmaWNhdGVQYXRoIChjZXJ0aWZpY2F0ZVBhdGgo
KSkKKyAgICAsIG1fY2VydGlmaWNhdGVQYXRoKGNlcnRpZmljYXRlUGF0aCgpKQogICAgICwgbV9y
dW5uaW5nSm9icygwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fbG9nRmlsZShudWxscHRyKQog
I2VuZGlmCiB7Ci0gICAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworICAgIENV
UkxTSCogaCA9IEN1cmxNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRDdXJsU2hhcmVIYW5kbGUoKTsK
KyAgICBtX2N1cmxTaGFyZUhhbmRsZSA9IGg7CiAgICAgbV9jdXJsTXVsdGlIYW5kbGUgPSBjdXJs
X211bHRpX2luaXQoKTsKLSAgICBtX2N1cmxTaGFyZUhhbmRsZSA9IGN1cmxfc2hhcmVfaW5pdCgp
OwotICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hB
UkUsIENVUkxfTE9DS19EQVRBX0NPT0tJRSk7Ci0gICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJs
U2hhcmVIYW5kbGUsIENVUkxTSE9QVF9TSEFSRSwgQ1VSTF9MT0NLX0RBVEFfRE5TKTsKLSAgICBj
dXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX0xPQ0tGVU5DLCBj
dXJsX2xvY2tfY2FsbGJhY2spOwotICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFu
ZGxlLCBDVVJMU0hPUFRfVU5MT0NLRlVOQywgY3VybF91bmxvY2tfY2FsbGJhY2spOworCiAKICAg
ICBpbml0Q29va2llU2Vzc2lvbigpOwogCkBAIC0yNjEsMTAgKzIxNiw4IEBAIFJlc291cmNlSGFu
ZGxlTWFuYWdlcjo6UmVzb3VyY2VIYW5kbGVNYW4KIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6flJl
c291cmNlSGFuZGxlTWFuYWdlcigpCiB7CiAgICAgY3VybF9tdWx0aV9jbGVhbnVwKG1fY3VybE11
bHRpSGFuZGxlKTsKLSAgICBjdXJsX3NoYXJlX2NsZWFudXAobV9jdXJsU2hhcmVIYW5kbGUpOwog
ICAgIGlmIChtX2Nvb2tpZUphckZpbGVOYW1lKQogICAgICAgICBmYXN0RnJlZShtX2Nvb2tpZUph
ckZpbGVOYW1lKTsKLSAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CiAKICNpZm5kZWYgTkRFQlVH
CiAgICAgaWYgKG1fbG9nRmlsZSkKQEAgLTI3MiwxMSArMjI1LDYgQEAgUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVNYQogI2VuZGlmCiB9CiAKLUNVUkxTSCogUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyOjpnZXRDdXJsU2hhcmVIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiBt
X2N1cmxTaGFyZUhhbmRsZTsKLX0KLQogdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNldENv
b2tpZUphckZpbGVOYW1lKGNvbnN0IGNoYXIqIGNvb2tpZUphckZpbGVOYW1lKQogewogICAgIG1f
Y29va2llSmFyRmlsZU5hbWUgPSBmYXN0U3RyRHVwKGNvb2tpZUphckZpbGVOYW1lKTsKQEAgLTMw
Miw3ICsyNTAsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSAoCiAg
ICAgLy8gd2hpY2ggbWVhbnMgdGhlIFJlc291cmNlTG9hZGVyJ3MgcmVzcG9uc2UgZG9lcyBub3Qg
Y29udGFpbiB0aGUgVVJMLgogICAgIC8vIFJ1biB0aGUgY29kZSBoZXJlIGZvciBsb2NhbCBmaWxl
cyB0byByZXNvbHZlIHRoZSBpc3N1ZS4KICAgICAvLyBUT0RPOiBTZWUgaWYgdGhlcmUgaXMgYSBi
ZXR0ZXIgYXBwcm9hY2ggZm9yIGhhbmRsaW5nIHRoaXMuCi0gICAgVVJMIHVybCA9IGdldEN1cmxF
ZmZlY3RpdmVVUkwoaGFuZGxlKTsKKyAgICBVUkwgdXJsID0gQ3VybFV0aWxzOjpnZXRFZmZlY3Rp
dmVVUkwoaGFuZGxlKTsKICAgICBBU1NFUlQodXJsLmlzVmFsaWQoKSk7CiAgICAgZC0+bV9yZXNw
b25zZS5zZXRVUkwodXJsKTsKICAgICAgaWYgKGQtPmNsaWVudCgpKQpAQCAtNDEzLDcgKzM2MSw3
IEBAIHN0YXRpYyBib29sIGdldFByb3RlY3Rpb25TcGFjZShDVVJMKiBoLCAKICAgICBpZiAoZXJy
ICE9IENVUkxFX09LKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBVUkwgdXJsID0gZ2V0
Q3VybEVmZmVjdGl2ZVVSTChoKTsKKyAgICBVUkwgdXJsID0gQ3VybFV0aWxzOjpnZXRFZmZlY3Rp
dmVVUkwoaCk7CiAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTUwMiw3ICs0NTAsNyBAQCBzdGF0aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIq
IHB0ciwgCiAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGgsIENVUkxJTkZPX0NPTlRFTlRfTEVO
R1RIX0RPV05MT0FELCAmY29udGVudExlbmd0aCk7CiAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0
RXhwZWN0ZWRDb250ZW50TGVuZ3RoKHN0YXRpY19jYXN0PGxvbmcgbG9uZyBpbnQ+KGNvbnRlbnRM
ZW5ndGgpKTsKIAotICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTChnZXRDdXJsRWZmZWN0aXZl
VVJMKGgpKTsKKyAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRVUkwoQ3VybFV0aWxzOjpnZXRFZmZl
Y3RpdmVVUkwoaCkpOwogCiAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUo
aHR0cENvZGUpOwogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1F
VHlwZUZyb21NZWRpYVR5cGUoZC0+bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRl
ck5hbWU6OkNvbnRlbnRUeXBlKSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CkBAIC03MDks
NyArNjU3LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZQogICAg
ICAgICAgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlkRmluaXNoTG9h
ZGluZygqam9iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IFVSTCB1cmwgPSBnZXRDdXJsRWZmZWN0aXZlVVJMKGQtPm1faGFuZGxlKTsKKyAgICAgICAgICAg
IFVSTCB1cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChkLT5tX2hhbmRsZSk7CiAjaWZu
ZGVmIE5ERUJVRwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDdXJsIEVSUk9SIGZvciB1
cmw9JyVzJywgZXJyb3I6ICclcydcbiIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjdXJs
X2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpOwogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlTWFuYWdlci5oCShyZXZpc2lvbiAyMTg2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDggKzU3LDYgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKFJlc291cmNlSGFuZGxlKik7
CiAgICAgdm9pZCBjYW5jZWwoUmVzb3VyY2VIYW5kbGUqKTsKIAotICAgIENVUkxTSCogZ2V0Q3Vy
bFNoYXJlSGFuZGxlKCkgY29uc3Q7Ci0KICAgICB2b2lkIHNldENvb2tpZUphckZpbGVOYW1lKGNv
bnN0IGNoYXIqIGNvb2tpZUphckZpbGVOYW1lKTsKICAgICBjb25zdCBjaGFyKiBnZXRDb29raWVK
YXJGaWxlTmFtZSgpIGNvbnN0OwogCkBAIC0xMDAsOCArOTgsNiBAQCBwcml2YXRlOgogI2VuZGlm
CiB9OwogCi1VUkwgZ2V0Q3VybEVmZmVjdGl2ZVVSTChDVVJMKik7Ci0KIH0KIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313653</attachid>
            <date>2017-06-22 13:26:54 -0700</date>
            <delta_ts>2017-06-22 13:54:22 -0700</delta_ts>
            <desc>Fix build error</desc>
            <filename>173557.diff</filename>
            <type>text/plain</type>
            <size>1130</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxM2YxMTk2OWQ3Yi4uZTA5ZjRhMTFjNzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxNy0wNi0yMiAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgRml4IGJyb2tlbiBXaW5DYWlybyBidWlsZAorCisgICAgICAgIFtD
dXJsXSBFeHRyYWN0IEN1cmxEb3dubG9hZE1hbmFnZXIgYXMgc2hhcmVkIGJhY2tncm91bmQgdGFz
ayBoYW5kbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzM1NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5oOgorCiAyMDE3LTA2LTE5ICBC
YXN1a2UgU3V6dWtpICA8QmFzdWtlLlN1enVraUBzb255LmNvbT4KIAogICAgICAgICBbQ3VybF0g
RXh0cmFjdCBDdXJsRG93bmxvYWRNYW5hZ2VyIGFzIHNoYXJlZCBiYWNrZ3JvdW5kIHRhc2sgaGFu
ZGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1h
bmFnZXIuaAppbmRleCAxZGY5NmQwODQwNi4uOTUyM2Q0Y2Q0M2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5oCkBAIC0yNiw3ICsy
Niw2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKQEAgLTM1LDYgKzM0
LDcgQEAKICNpbmNsdWRlIDx3aW5zb2NrMi5oPgogI2VuZGlmCiAKKyNpbmNsdWRlIDxjdXJsL2N1
cmwuaD4KICNpbmNsdWRlICJVUkwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewo=
</data>
<flag name="review"
          id="334543"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>