<?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>217803</bug_id>
          
          <creation_ts>2020-10-15 20:14:01 -0700</creation_ts>
          <short_desc>Move even more AudioContext-specific logic out of BaseAudioContext</short_desc>
          <delta_ts>2020-10-16 11:33:16 -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>Web Audio</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>217794</dependson>
          <blocked>212611</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>cdumez</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1698447</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-15 20:14:01 -0700</bug_when>
    <thetext>Move even more AudioContext-specific logic out of BaseAudioContext and into AudioContext. In particular, all the logic related to autoplay restrictions, audible state, and platform media session interruptions only apply to AudioContext and not OfflineAudioContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698448</commentid>
    <comment_count>1</comment_count>
      <attachid>411526</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-15 20:18:02 -0700</bug_when>
    <thetext>Created attachment 411526
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698603</commentid>
    <comment_count>2</comment_count>
      <attachid>411526</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-10-16 08:18:25 -0700</bug_when>
    <thetext>Comment on attachment 411526
Patch

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

&gt; Source/WebCore/Modules/webaudio/AudioContext.cpp:390
&gt; +            RELEASE_LOG_IF_ALLOWED(&quot;visibilityStateChanged() Suspending playback after going to the background&quot;);

Any reason to not use `ALWAYS_LOG(LOGIDENTIFIER, ...)` so the output is in the same format as the rest of the logging from this class?

&gt; Source/WebCore/Modules/webaudio/AudioContext.cpp:395
&gt; +            RELEASE_LOG_IF_ALLOWED(&quot;visibilityStateChanged() Resuming playback after entering foreground&quot;);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698654</commentid>
    <comment_count>3</comment_count>
      <attachid>411590</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-16 10:01:23 -0700</bug_when>
    <thetext>Created attachment 411590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698657</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-16 10:10:31 -0700</bug_when>
    <thetext>ChangeLog entry in LayoutTests/ChangeLog contains OOPS!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698674</commentid>
    <comment_count>5</comment_count>
      <attachid>411596</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-16 10:59:47 -0700</bug_when>
    <thetext>Created attachment 411596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698694</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-16 11:32:05 -0700</bug_when>
    <thetext>Committed r268600: &lt;https://trac.webkit.org/changeset/268600&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 411596.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698695</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-16 11:33:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/70385620&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411526</attachid>
            <date>2020-10-15 20:18:02 -0700</date>
            <delta_ts>2020-10-16 10:01:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217803-20201015201801.patch</filename>
            <type>text/plain</type>
            <size>38975</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzc3M2RjYjU0YTQ3ODg5
YWJjNjJlMTQ0ODY3ZjgwN2I1MjQyNTliMS4uOTQ2ZTAzMTQyNjVlOWUwNTY0MWI3ODMxMGMzNjA1
ZmFkMTQ3MTMyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDIwLTEwLTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBldmVuIG1vcmUgQXVk
aW9Db250ZXh0LXNwZWNpZmljIGxvZ2ljIG91dCBvZiBCYXNlQXVkaW9Db250ZXh0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc4MDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGV2ZW4gbW9yZSBB
dWRpb0NvbnRleHQtc3BlY2lmaWMgbG9naWMgb3V0IG9mIEJhc2VBdWRpb0NvbnRleHQgYW5kCisg
ICAgICAgIGludG8gQXVkaW9Db250ZXh0LiBJbiBwYXJ0aWN1bGFyLCBhbGwgdGhlIGxvZ2ljIHJl
bGF0ZWQgdG8gYXV0b3BsYXkKKyAgICAgICAgcmVzdHJpY3Rpb25zLCBhdWRpYmxlIHN0YXRlLCBh
bmQgcGxhdGZvcm0gbWVkaWEgc2Vzc2lvbiBpbnRlcnJ1cHRpb25zCisgICAgICAgIG9ubHkgYXBw
bHkgdG8gQXVkaW9Db250ZXh0IGFuZCBub3QgT2ZmbGluZUF1ZGlvQ29udGV4dC4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIG5vIFdlYi1mYWNpbmcgYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAg
ICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
c2hvdWxkRG9jdW1lbnRBbGxvd1dlYkF1ZGlvVG9BdXRvUGxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Nv
bnRleHQ6OmNvbnN0cnVjdENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6
On5BdWRpb0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojp3aWxsUGF1
c2VQbGF5YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6Om1lZGlhU3RhdGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjptYXlSZXN1bWVQbGF5YmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OndpbGxCZWdpblBsYXliYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnN1c3BlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Db250ZXh0OjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250
ZXh0OjpzdXNwZW5kUGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojpo
b3N0aW5nRG9jdW1lbnRJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Q29udGV4dDo6aXNTdXNwZW5kZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250
ZXh0OjpwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Nv
bnRleHQ6Om1lZGlhQ2FuU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojps
b2dnZXIgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmJlaGF2aW9yUmVzdHJpY3Rpb25zIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6YWRkQmVoYXZpb3JSZXN0cmlj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnJlbW92ZUJlaGF2aW9yUmVz
dHJpY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojp1c2VyR2VzdHVyZVJl
cXVpcmVkRm9yQXVkaW9TdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHQ6OnBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0IGNvbnN0KToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUF1ZGlvQ29udGV4dDo6QmFzZUF1ZGlvQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlQXVkaW9Db250ZXh0Ojp+QmFzZUF1ZGlvQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJhdWRpby9CYXNlQXVkaW9Db250ZXh0Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9P
ZmZsaW5lQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVBdWRpb0Nv
bnRleHQ6OnN0YXJ0T2ZmbGluZVJlbmRlcmluZyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRBdWRpb0NvbnRleHRSZXN0
cmljdGlvbnMpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgICogdGVz
dGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDIwLTEwLTE1ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBMZXNzZW4gdGhlIHJlbGlhbmNlIG9uIFZQQVRIIGluIFdl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCmluZGV4IGQ5NDI4MjlmMzI5ZjNiOTBjOTYwYTFmZTY1
ODAwYjdiZWU2M2FjMTAuLjkwYzRiYjQwZGM1M2YwMmViZDJjNmUzYWQxMjYzNDQ0NDUzMDIzNzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5j
cHAKQEAgLTMxLDggKzMxLDExIEBACiAjaW5jbHVkZSAiQXVkaW9UaW1lc3RhbXAuaCIKICNpbmNs
dWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgorI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGVyZm9ybWFu
Y2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbmNsdWRl
ICJRdWlya3MuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKQEAgLTUxLDYgKzU0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAuLi4pIFJFTEVBU0VfTE9H
X0lGKGRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+cGFnZSgpICYmIGRvY3VtZW50KCktPnBhZ2Uo
KS0+aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIE1lZGlhLCAiJXAgLSBBdWRpb0NvbnRleHQ6
OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorCiAjaWYgT1MoV0lORE9XUykKIC8vIERvbid0
IGFsbG93IG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBzaW11bHRhbmVvdXMgQXVkaW9Db250ZXh0
cyB0YWxraW5nIHRvIGhhcmR3YXJlLgogY29uc3RleHByIHVuc2lnbmVkIG1heEhhcmR3YXJlQ29u
dGV4dHMgPSA0OwpAQCAtNjQsNiArNjksMTMgQEAgc3RhdGljIE9wdGlvbmFsPGZsb2F0PiYgZGVm
YXVsdFNhbXBsZVJhdGVGb3JUZXN0aW5nKCkKICAgICByZXR1cm4gc2FtcGxlUmF0ZTsKIH0KIAor
c3RhdGljIGJvb2wgc2hvdWxkRG9jdW1lbnRBbGxvd1dlYkF1ZGlvVG9BdXRvUGxheShjb25zdCBE
b2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgaWYgKGRvY3VtZW50LnByb2Nlc3NpbmdVc2VyR2Vz
dHVyZUZvck1lZGlhKCkgfHwgZG9jdW1lbnQuaXNDYXB0dXJpbmcoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIGRvY3VtZW50LnF1aXJrcygpLnNob3VsZEF1dG9wbGF5V2ViQXVk
aW9Gb3JBcmJpdHJhcnlVc2VyR2VzdHVyZSgpICYmIGRvY3VtZW50LnRvcERvY3VtZW50KCkuaGFz
SGFkVXNlckludGVyYWN0aW9uKCk7Cit9CisKIHZvaWQgQXVkaW9Db250ZXh0OjpzZXREZWZhdWx0
U2FtcGxlUmF0ZUZvclRlc3RpbmcoT3B0aW9uYWw8ZmxvYXQ+IHNhbXBsZVJhdGUpCiB7CiAgICAg
ZGVmYXVsdFNhbXBsZVJhdGVGb3JUZXN0aW5nKCkgPSBzYW1wbGVSYXRlOwpAQCAtOTYsMTMgKzEw
OCw0NCBAQCBFeGNlcHRpb25PcjxSZWY8QXVkaW9Db250ZXh0Pj4gQXVkaW9Db250ZXh0OjpjcmVh
dGUoRG9jdW1lbnQmIGRvY3VtZW50LCBBdWRpb0NvbgogLy8gQ29uc3RydWN0b3IgZm9yIHJlbmRl
cmluZyB0byB0aGUgYXVkaW8gaGFyZHdhcmUuCiBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEF1ZGlvQ29udGV4dE9wdGlvbnMmIGNvbnRleHRPcHRp
b25zKQogICAgIDogQmFzZUF1ZGlvQ29udGV4dChkb2N1bWVudCwgY29udGV4dE9wdGlvbnMpCisg
ICAgLCBtX21lZGlhU2Vzc2lvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKFBsYXRmb3Jt
TWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLCAqdGhpcykpCiB7CisgICAgY29u
c3RydWN0Q29tbW9uKCk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiBub2Rl
J3MgbXV0ZWQgc3RhdGUgdG8gbWF0Y2ggdGhlIHBhZ2UncyBjdXJyZW50IG11dGVkIHN0YXRlLgor
ICAgIHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCk7CisKKyAgICBkb2N1bWVudC5hZGRBdWRpb1By
b2R1Y2VyKCp0aGlzKTsKKyAgICBkb2N1bWVudC5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNo
YW5nZWRDYWxsYmFja3MoKnRoaXMpOwogfQogCiAvLyBPbmx5IG5lZWRlZCBmb3IgV2ViS2l0T2Zm
bGluZUF1ZGlvQ29udGV4dC4KIEF1ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0KERvY3VtZW50JiBk
b2N1bWVudCwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgUmVmUHRyPEF1ZGlvQnVmZmVyPiYm
IHJlbmRlclRhcmdldCkKICAgICA6IEJhc2VBdWRpb0NvbnRleHQoZG9jdW1lbnQsIG51bWJlck9m
Q2hhbm5lbHMsIFdURk1vdmUocmVuZGVyVGFyZ2V0KSkKKyAgICAsIG1fbWVkaWFTZXNzaW9uKFBs
YXRmb3JtTWVkaWFTZXNzaW9uOjpjcmVhdGUoUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjpz
aGFyZWRNYW5hZ2VyKCksICp0aGlzKSkKIHsKKyAgICBjb25zdHJ1Y3RDb21tb24oKTsKK30KKwor
dm9pZCBBdWRpb0NvbnRleHQ6OmNvbnN0cnVjdENvbW1vbigpCit7CisgICAgQVNTRVJUKGRvY3Vt
ZW50KCkpOworICAgIGlmIChkb2N1bWVudCgpLT5hdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2Vz
dHVyZSgpKQorICAgICAgICBhZGRCZWhhdmlvclJlc3RyaWN0aW9uKFJlcXVpcmVVc2VyR2VzdHVy
ZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7CisgICAgZWxzZQorICAgICAgICBtX3Jlc3RyaWN0
aW9ucyA9IE5vUmVzdHJpY3Rpb25zOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgYWRkQmVo
YXZpb3JSZXN0cmljdGlvbihSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rp
b24pOworI2VuZGlmCit9CisKK0F1ZGlvQ29udGV4dDo6fkF1ZGlvQ29udGV4dCgpCit7CisgICAg
aWYgKCFpc09mZmxpbmVDb250ZXh0KCkgJiYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7Cisg
ICAgICAgIGRvY3VtZW50KCktPnJlbW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMpOworICAgICAgICBk
b2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcygq
dGhpcyk7CisgICAgfQogfQogCiBkb3VibGUgQXVkaW9Db250ZXh0OjpiYXNlTGF0ZW5jeSgpCkBA
IC0yNjMsMjEgKzMwNiwxNjQgQEAgYm9vbCBBdWRpb0NvbnRleHQ6OndpbGxQYXVzZVBsYXliYWNr
KCkKICAgICBpZiAodXNlckdlc3R1cmVSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSkgewogICAgICAg
ICBpZiAoIWRvY3VtZW50LT5wcm9jZXNzaW5nVXNlckdlc3R1cmVGb3JNZWRpYSgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEJh
c2VBdWRpb0NvbnRleHQ6OlJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlv
bik7CisgICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVVzZXJHZXN0dXJl
Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAocGFnZUNvbnNlbnRS
ZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSkgeworICAgICAgICBhdXRvKiBwYWdlID0gZG9jdW1lbnQt
PnBhZ2UoKTsKKyAgICAgICAgaWYgKHBhZ2UgJiYgIXBhZ2UtPmNhblN0YXJ0TWVkaWEoKSkgewor
ICAgICAgICAgICAgZG9jdW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmVtb3ZlQmVoYXZp
b3JSZXN0cmljdGlvbihSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24p
OworICAgIH0KKworICAgIHJldHVybiBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50V2lsbFBhdXNlUGxh
eWJhY2soKTsKK30KKworTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIEF1ZGlvQ29udGV4
dDo6bWVkaWFTdGF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1N0b3BwZWQoKSAmJiBkZXN0aW5h
dGlvbk5vZGUoKSAmJiBkZXN0aW5hdGlvbk5vZGUoKS0+aXNQbGF5aW5nQXVkaW8oKSkKKyAgICAg
ICAgcmV0dXJuIE1lZGlhUHJvZHVjZXI6OklzUGxheWluZ0F1ZGlvOworCisgICAgcmV0dXJuIE1l
ZGlhUHJvZHVjZXI6OklzTm90UGxheWluZzsKK30KKwordm9pZCBBdWRpb0NvbnRleHQ6Om1heVJl
c3VtZVBsYXliYWNrKGJvb2wgc2hvdWxkUmVzdW1lKQoreworICAgIGlmICghZGVzdGluYXRpb25O
b2RlKCkgfHwgc3RhdGUoKSA9PSBTdGF0ZTo6Q2xvc2VkIHx8IHN0YXRlKCkgPT0gU3RhdGU6OlJ1
bm5pbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc2hvdWxkUmVzdW1lKSB7CisgICAg
ICAgIHNldFN0YXRlKFN0YXRlOjpTdXNwZW5kZWQpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCF3aWxsQmVnaW5QbGF5YmFjaygpKQorICAgICAgICByZXR1cm47CisKKyAgICBs
YXp5SW5pdGlhbGl6ZSgpOworCisgICAgZGVzdGluYXRpb25Ob2RlKCktPnJlc3VtZShbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIHNldFN0YXRlKFN0YXRl
OjpSdW5uaW5nKTsKKyAgICB9KTsKK30KKworYm9vbCBBdWRpb0NvbnRleHQ6OndpbGxCZWdpblBs
YXliYWNrKCkKK3sKKyAgICBhdXRvKiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CisgICAg
aWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHVzZXJHZXN0
dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKKyAgICAgICAgaWYgKCFzaG91bGREb2N1bWVu
dEFsbG93V2ViQXVkaW9Ub0F1dG9QbGF5KCpkb2N1bWVudCkpIHsKKyAgICAgICAgICAgIEFMV0FZ
U19MT0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyBmYWxzZSwgbm90IHByb2Nlc3NpbmcgdXNl
ciBnZXN0dXJlIG9yIGNhcHR1cmluZyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVVzZXJHZXN0
dXJlRm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKICAgICB9CiAKICAgICBpZiAocGFnZUNvbnNl
bnRSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSkgewogICAgICAgICBhdXRvKiBwYWdlID0gZG9jdW1l
bnQtPnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIXBhZ2UtPmNhblN0YXJ0TWVkaWEoKSkg
ewogICAgICAgICAgICAgZG9jdW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7
CisgICAgICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJyZXR1cm5pbmcgZmFsc2Us
IHBhZ2UgZG9lc24ndCBhbGxvdyBtZWRpYSB0byBzdGFydCIpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQmFz
ZUF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9u
KTsKKyAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlUGFnZUNvbnNlbnRG
b3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOworICAgIH0KKworICAgIGF1dG8gd2lsbEJlZ2luID0g
bV9tZWRpYVNlc3Npb24tPmNsaWVudFdpbGxCZWdpblBsYXliYWNrKCk7CisgICAgQUxXQVlTX0xP
RyhMT0dJREVOVElGSUVSLCAicmV0dXJuaW5nICIsIHdpbGxCZWdpbik7CisKKyAgICByZXR1cm4g
d2lsbEJlZ2luOworfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6dmlzaWJpbGl0eVN0YXRlQ2hhbmdl
ZCgpCit7CisgICAgLy8gRG8gbm90IHN1c3BlbmQgaWYgYXVkaW8gaXMgYXVkaWJsZS4KKyAgICBp
ZiAoIWRvY3VtZW50KCkgfHwgbWVkaWFTdGF0ZSgpID09IE1lZGlhUHJvZHVjZXI6OklzUGxheWlu
Z0F1ZGlvIHx8IGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZG9jdW1l
bnQoKS0+aGlkZGVuKCkpIHsKKyAgICAgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OlJ1bm5pbmcp
IHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInZpc2liaWxpdHlTdGF0ZUNo
YW5nZWQoKSBTdXNwZW5kaW5nIHBsYXliYWNrIGFmdGVyIGdvaW5nIHRvIHRoZSBiYWNrZ3JvdW5k
Iik7CisgICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YmVnaW5JbnRlcnJ1cHRpb24oUGxhdGZv
cm1NZWRpYVNlc3Npb246OkVudGVyaW5nQmFja2dyb3VuZCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAoc3RhdGUoKSA9PSBTdGF0ZTo6SW50ZXJydXB0ZWQpIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKSBS
ZXN1bWluZyBwbGF5YmFjayBhZnRlciBlbnRlcmluZyBmb3JlZ3JvdW5kIik7CisgICAgICAgICAg
ICBtX21lZGlhU2Vzc2lvbi0+ZW5kSW50ZXJydXB0aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpN
YXlSZXN1bWVQbGF5aW5nKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBBdWRpb0NvbnRl
eHQ6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbikKK3sKKyAgICBpZiAoc3RhdGUoKSA9PSBT
dGF0ZTo6UnVubmluZykgeworICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YmVnaW5JbnRlcnJ1cHRp
b24oUGxhdGZvcm1NZWRpYVNlc3Npb246OlBsYXliYWNrU3VzcGVuZGVkKTsKKyAgICAgICAgZG9j
dW1lbnQoKS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9D
b250ZXh0OjpyZXN1bWUoKQoreworICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpJbnRlcnJ1cHRl
ZCkgeworICAgICAgICBtX21lZGlhU2Vzc2lvbi0+ZW5kSW50ZXJydXB0aW9uKFBsYXRmb3JtTWVk
aWFTZXNzaW9uOjpNYXlSZXN1bWVQbGF5aW5nKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRl
SXNQbGF5aW5nTWVkaWEoKTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpzdXNwZW5k
UGxheWJhY2soKQoreworICAgIGlmICghZGVzdGluYXRpb25Ob2RlKCkgfHwgc3RhdGUoKSA9PSBT
dGF0ZTo6Q2xvc2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc3RhdGUoKSA9PSBTdGF0
ZTo6U3VzcGVuZGVkKSB7CisgICAgICAgIGlmIChtX21lZGlhU2Vzc2lvbi0+c3RhdGUoKSA9PSBQ
bGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQpCisgICAgICAgICAgICBzZXRTdGF0ZShT
dGF0ZTo6SW50ZXJydXB0ZWQpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmV0dXJu
IG1lZGlhU2Vzc2lvbigpLT5jbGllbnRXaWxsUGF1c2VQbGF5YmFjaygpOworICAgIGxhenlJbml0
aWFsaXplKCk7CisKKyAgICBkZXN0aW5hdGlvbk5vZGUoKS0+c3VzcGVuZChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIGJvb2wgaW50ZXJydXB0ZWQgPSBt
X21lZGlhU2Vzc2lvbi0+c3RhdGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0
ZWQ7CisgICAgICAgIHNldFN0YXRlKGludGVycnVwdGVkID8gU3RhdGU6OkludGVycnVwdGVkIDog
U3RhdGU6OlN1c3BlbmRlZCk7CisgICAgfSk7Cit9CisKK0RvY3VtZW50SWRlbnRpZmllciBBdWRp
b0NvbnRleHQ6Omhvc3RpbmdEb2N1bWVudElkZW50aWZpZXIoKSBjb25zdAoreworICAgIGF1dG8q
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7
CisgICAgcmV0dXJuIGRvY3VtZW50ID8gZG9jdW1lbnQtPmlkZW50aWZpZXIoKSA6IERvY3VtZW50
SWRlbnRpZmllciB7IH07CiB9CiAKK2Jvb2wgQXVkaW9Db250ZXh0Ojppc1N1c3BlbmRlZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFkb2N1bWVudCgpIHx8IGRvY3VtZW50KCktPmFjdGl2ZURPTU9i
amVjdHNBcmVTdXNwZW5kZWQoKSB8fCBkb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJlU3Rv
cHBlZCgpOworfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6cGFnZU11dGVkU3RhdGVEaWRDaGFuZ2Uo
KQoreworICAgIGlmIChkZXN0aW5hdGlvbk5vZGUoKSAmJiBkb2N1bWVudCgpICYmIGRvY3VtZW50
KCktPnBhZ2UoKSkKKyAgICAgICAgZGVzdGluYXRpb25Ob2RlKCktPnNldE11dGVkKGRvY3VtZW50
KCktPnBhZ2UoKS0+aXNBdWRpb011dGVkKCkpOworfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6bWVk
aWFDYW5TdGFydChEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgQVNTRVJUX1VOVVNFRChkb2N1
bWVudCwgJmRvY3VtZW50ID09IHRoaXMtPmRvY3VtZW50KCkpOworICAgIHJlbW92ZUJlaGF2aW9y
UmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsK
KyAgICBtYXlSZXN1bWVQbGF5YmFjayh0cnVlKTsKK30KKworI2lmICFSRUxFQVNFX0xPR19ESVNB
QkxFRAorY29uc3QgTG9nZ2VyJiBBdWRpb0NvbnRleHQ6OmxvZ2dlcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEJhc2VBdWRpb0NvbnRleHQ6OmxvZ2dlcigpOworfQorI2VuZGlmCisKICNpZiBFTkFC
TEUoVklERU8pCiAKIEV4Y2VwdGlvbk9yPFJlZjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+
PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50
JiBtZWRpYUVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0NvbnRleHQuaAppbmRleCBmOWMxMzg3NTMwMDNhYmQ3MTYyNjNkNDU0YTA1MzUxOGQzMzJkOGU5
Li42MjRhMTZhNGVlMzc3N2EyNzAzYmRkZDA5NTA5NTUzZmY2MWJkNzZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKQEAgLTI4LDYgKzI4LDEw
IEBACiAjaW5jbHVkZSAiQXVkaW9Db250ZXh0T3B0aW9ucy5oIgogI2luY2x1ZGUgIkJhc2VBdWRp
b0NvbnRleHQuaCIKICNpbmNsdWRlICJEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKyNp
bmNsdWRlICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJNZWRpYVByb2R1Y2Vy
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb24uaCIKKyNpbmNsdWRlICJWaXNpYmls
aXR5Q2hhbmdlQ2xpZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzUsMTEgKzM5
LDE4IEBAIGNsYXNzIERPTVdpbmRvdzsKIAogc3RydWN0IEF1ZGlvVGltZXN0YW1wOwogCi1jbGFz
cyBBdWRpb0NvbnRleHQgOiBwdWJsaWMgQmFzZUF1ZGlvQ29udGV4dCB7CitjbGFzcyBBdWRpb0Nv
bnRleHQKKyAgICA6IHB1YmxpYyBCYXNlQXVkaW9Db250ZXh0CisgICAgLCBwdWJsaWMgTWVkaWFQ
cm9kdWNlcgorICAgICwgcHVibGljIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcgorICAgICwgcHJpdmF0
ZSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbkNsaWVudAorICAgICwgcHJpdmF0ZSBWaXNpYmlsaXR5Q2hh
bmdlQ2xpZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEF1ZGlvQ29udGV4dCk7CiBw
dWJsaWM6CiAgICAgLy8gQ3JlYXRlIGFuIEF1ZGlvQ29udGV4dCBmb3IgcmVuZGVyaW5nIHRvIHRo
ZSBhdWRpbyBoYXJkd2FyZS4KICAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQ29udGV4
dD4+IGNyZWF0ZShEb2N1bWVudCYsIEF1ZGlvQ29udGV4dE9wdGlvbnMmJiA9IHsgfSk7CisgICAg
fkF1ZGlvQ29udGV4dCgpOworCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0RGVm
YXVsdFNhbXBsZVJhdGVGb3JUZXN0aW5nKE9wdGlvbmFsPGZsb2F0Pik7CiAKICAgICB2b2lkIGNs
b3NlKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmKTsKQEAgLTY1LDEzICs3Niw2NiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHN0YXJ0UmVuZGVyaW5nKCk7CiAKKyAgICAvLyBSZXN0cmljdGlvbnMg
dG8gY2hhbmdlIGRlZmF1bHQgYmVoYXZpb3JzLgorICAgIGVudW0gQmVoYXZpb3JSZXN0cmljdGlv
bkZsYWdzIHsKKyAgICAgICAgTm9SZXN0cmljdGlvbnMgPSAwLAorICAgICAgICBSZXF1aXJlVXNl
ckdlc3R1cmVGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24gPSAxIDw8IDAsCisgICAgICAgIFJlcXVp
cmVQYWdlQ29uc2VudEZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbiA9IDEgPDwgMSwKKyAgICB9Owor
ICAgIHR5cGVkZWYgdW5zaWduZWQgQmVoYXZpb3JSZXN0cmljdGlvbnM7CisgICAgQmVoYXZpb3JS
ZXN0cmljdGlvbnMgYmVoYXZpb3JSZXN0cmljdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Jlc3Ry
aWN0aW9uczsgfQorICAgIHZvaWQgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihCZWhhdmlvclJlc3Ry
aWN0aW9ucyByZXN0cmljdGlvbikgeyBtX3Jlc3RyaWN0aW9ucyB8PSByZXN0cmljdGlvbjsgfQor
ICAgIHZvaWQgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihCZWhhdmlvclJlc3RyaWN0aW9ucyBy
ZXN0cmljdGlvbikgeyBtX3Jlc3RyaWN0aW9ucyAmPSB+cmVzdHJpY3Rpb247IH0KKwogcHJvdGVj
dGVkOgogICAgIGV4cGxpY2l0IEF1ZGlvQ29udGV4dChEb2N1bWVudCYsIGNvbnN0IEF1ZGlvQ29u
dGV4dE9wdGlvbnMmID0geyB9KTsKICAgICBBdWRpb0NvbnRleHQoRG9jdW1lbnQmLCB1bnNpZ25l
ZCBudW1iZXJPZkNoYW5uZWxzLCBSZWZQdHI8QXVkaW9CdWZmZXI+JiYgcmVuZGVyVGFyZ2V0KTsK
IAorICAgIGJvb2wgd2lsbEJlZ2luUGxheWJhY2soKTsKKworI2lmICFSRUxFQVNFX0xPR19ESVNB
QkxFRAorICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmluYWw7CisjZW5kaWYKKwog
cHJpdmF0ZToKKyAgICB2b2lkIGNvbnN0cnVjdENvbW1vbigpOworCisgICAgYm9vbCB1c2VyR2Vz
dHVyZVJlcXVpcmVkRm9yQXVkaW9TdGFydCgpIGNvbnN0IHsgcmV0dXJuICFpc09mZmxpbmVDb250
ZXh0KCkgJiYgbV9yZXN0cmljdGlvbnMgJiBSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0
UmVzdHJpY3Rpb247IH0KKyAgICBib29sIHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0
KCkgY29uc3QgeyByZXR1cm4gIWlzT2ZmbGluZUNvbnRleHQoKSAmJiBtX3Jlc3RyaWN0aW9ucyAm
IFJlcXVpcmVQYWdlQ29uc2VudEZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbjsgfQorCiAgICAgYm9v
bCB3aWxsUGF1c2VQbGF5YmFjaygpOwogCisgICAgLy8gTWVkaWFQcm9kdWNlcgorICAgIE1lZGlh
UHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBtZWRpYVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpIG92ZXJyaWRlOworCisgICAgLy8gUGxh
dGZvcm1NZWRpYVNlc3Npb25DbGllbnQKKyAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWVkaWFU
eXBlIG1lZGlhVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRmb3JtTWVkaWFTZXNz
aW9uOjpNZWRpYVR5cGU6OldlYkF1ZGlvOyB9CisgICAgUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1l
ZGlhVHlwZSBwcmVzZW50YXRpb25UeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZv
cm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZTo6V2ViQXVkaW87IH0KKyAgICB2b2lkIG1heVJlc3Vt
ZVBsYXliYWNrKGJvb2wgc2hvdWxkUmVzdW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIHN1c3BlbmRQ
bGF5YmFjaygpIG92ZXJyaWRlOworICAgIGJvb2wgY2FuUmVjZWl2ZVJlbW90ZUNvbnRyb2xDb21t
YW5kcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBkaWRSZWNl
aXZlUmVtb3RlQ29udHJvbENvbW1hbmQoUGxhdGZvcm1NZWRpYVNlc3Npb246OlJlbW90ZUNvbnRy
b2xDb21tYW5kVHlwZSwgY29uc3QgUGxhdGZvcm1NZWRpYVNlc3Npb246OlJlbW90ZUNvbW1hbmRB
cmd1bWVudCopIG92ZXJyaWRlIHsgfQorICAgIGJvb2wgc3VwcG9ydHNTZWVraW5nKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZE92ZXJyaWRlQmFja2dy
b3VuZFBsYXliYWNrUmVzdHJpY3Rpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBjYW5Qcm9k
dWNlQXVkaW8oKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBpc1N1c3Bl
bmRlZCgpIGNvbnN0IGZpbmFsOworICAgIERvY3VtZW50SWRlbnRpZmllciBob3N0aW5nRG9jdW1l
bnRJZGVudGlmaWVyKCkgY29uc3QgZmluYWw7CisKKyAgICAvLyBNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIuCisgICAgdm9pZCBtZWRpYUNhblN0YXJ0KERvY3VtZW50Jikgb3ZlcnJpZGU7CisKKyAgICAv
LyBWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50CisgICAgdm9pZCB2aXNpYmlsaXR5U3RhdGVDaGFuZ2Vk
KCkgZmluYWw7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QKKyAgICB2b2lkIHN1c3BlbmQoUmVh
c29uRm9yU3VzcGVuc2lvbikgZmluYWw7CisgICAgdm9pZCByZXN1bWUoKSBmaW5hbDsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybU1lZGlhU2Vzc2lvbj4gbV9tZWRpYVNlc3Npb247CisK
KyAgICBCZWhhdmlvclJlc3RyaWN0aW9ucyBtX3Jlc3RyaWN0aW9ucyB7IE5vUmVzdHJpY3Rpb25z
IH07CisKICAgICAvLyBbW3N1c3BlbmRlZCBieSB1c2VyXV0gZmxhZyBpbiB0aGUgc3BlY2lmaWNh
dGlvbjoKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXVkaW8vI2RvbS1hdWRpb2Nv
bnRleHQtc3VzcGVuZGVkLWJ5LXVzZXItc2xvdAogICAgIGJvb2wgbV93YXNTdXNwZW5kZWRCeVNj
cmlwdCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0Jhc2VBdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9CYXNlQXVkaW9Db250ZXh0LmNwcAppbmRleCAxZmRjNjE5MDFmNTZjYWM2MzliMTc4OGJkZDIx
NTk3ZjhjZTA1MDJiLi4zYTIxOTg0ZjkyOTA4YmJmODU3NmUzZmRlYTRkMTVmOGE5ZmI3M2E4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29u
dGV4dC5jcHAKQEAgLTc1LDcgKzc1LDYgQEAKICNpbmNsdWRlICJQYW5uZXJOb2RlLmgiCiAjaW5j
bHVkZSAiUGVyaW9kaWNXYXZlLmgiCiAjaW5jbHVkZSAiUGVyaW9kaWNXYXZlT3B0aW9ucy5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIlNjcmlw
dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JpcHRQcm9jZXNzb3JOb2RlLmgiCiAjaW5jbHVk
ZSAiU3RlcmVvUGFubmVyTm9kZS5oIgpAQCAtMTExLDggKzExMCw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEJhc2VBdWRpb0NvbnRleHQpOwog
Ci0jZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lG
KGRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+cGFnZSgpICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+
aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIE1lZGlhLCAiJXAgLSBCYXNlQXVkaW9Db250ZXh0
OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKLSAgICAKIGJvb2wgQmFzZUF1ZGlvQ29udGV4
dDo6aXNTdXBwb3J0ZWRTYW1wbGVSYXRlKGZsb2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgcmV0dXJu
IHNhbXBsZVJhdGUgPj0gMzAwMCAmJiBzYW1wbGVSYXRlIDw9IDM4NDAwMDsKQEAgLTEyOCwyMiAr
MTI1LDE1IEBAIEJhc2VBdWRpb0NvbnRleHQ6OkJhc2VBdWRpb0NvbnRleHQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBBdWRpb0NvbnRleHRPcHRpb25zCiAgICAgLCBtX2xvZ0lkZW50aWZpZXIo
dW5pcXVlTG9nSWRlbnRpZmllcigpKQogI2VuZGlmCiAgICAgLCBtX3dvcmtsZXQoQXVkaW9Xb3Jr
bGV0OjpjcmVhdGUoKnRoaXMpKQotICAgICwgbV9tZWRpYVNlc3Npb24oUGxhdGZvcm1NZWRpYVNl
c3Npb246OmNyZWF0ZShQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIo
KSwgKnRoaXMpKQogewogICAgIC8vIEFjY29yZGluZyB0byBzcGVjIEF1ZGlvQ29udGV4dCBtdXN0
IGRpZSBvbmx5IGFmdGVyIHBhZ2UgbmF2aWdhdGUuCiAgICAgLy8gTGV0cyBtYXJrIGl0IGFzIEFj
dGl2ZURPTU9iamVjdCB3aXRoIHBlbmRpbmcgYWN0aXZpdHkgYW5kIHVubWFyayBpdCBpbiBjbGVh
ciBtZXRob2QuCiAgICAgbWFrZVBlbmRpbmdBY3Rpdml0eSgpOwogCi0gICAgY29uc3RydWN0Q29t
bW9uKCk7CisgICAgRkZURnJhbWU6OmluaXRpYWxpemUoKTsKIAogICAgIG1fZGVzdGluYXRpb25O
b2RlID0gRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpjcmVhdGUoKnRoaXMsIGNvbnRleHRP
cHRpb25zLnNhbXBsZVJhdGUpOwogCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24g
bm9kZSdzIG11dGVkIHN0YXRlIHRvIG1hdGNoIHRoZSBwYWdlJ3MgY3VycmVudCBtdXRlZCBzdGF0
ZS4KLSAgICBwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpOwotCi0gICAgZG9jdW1lbnQuYWRkQXVk
aW9Qcm9kdWNlcigqdGhpcyk7Ci0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3Rh
dGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKLQogICAgIC8vIFVubGlrZSBPZmZsaW5lQXVkaW9D
b250ZXh0LCBBdWRpb0NvbnRleHQgZG9lcyBub3QgcmVxdWlyZSBjYWxsaW5nIHJlc3VtZSgpIHRv
IHN0YXJ0IHJlbmRlcmluZy4KICAgICAvLyBMYXp5IGluaXRpYWxpemF0aW9uIHN0YXJ0cyByZW5k
ZXJpbmcgc28gd2Ugc2NoZWR1bGUgYSB0YXNrIGhlcmUgdG8gbWFrZSBzdXJlIGxhenkgaW5pdGlh
bGl6YXRpb24KICAgICAvLyBlbmRzIHVwIGhhcHBlbmluZywgZXZlbiBpZiBubyBhdWRpbyBub2Rl
IGdldHMgY29uc3RydWN0ZWQuCkBAIC0xNjQsMzAgKzE1NCwxNCBAQCBCYXNlQXVkaW9Db250ZXh0
OjpCYXNlQXVkaW9Db250ZXh0KERvY3VtZW50JiBkb2N1bWVudCwgdW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscwogI2VuZGlmCiAgICAgLCBtX3dvcmtsZXQoQXVkaW9Xb3JrbGV0OjpjcmVhdGUoKnRo
aXMpKQogICAgICwgbV9pc09mZmxpbmVDb250ZXh0KHRydWUpCi0gICAgLCBtX21lZGlhU2Vzc2lv
bihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdl
cjo6c2hhcmVkTWFuYWdlcigpLCAqdGhpcykpCiAgICAgLCBtX3JlbmRlclRhcmdldChXVEZNb3Zl
KHJlbmRlclRhcmdldCkpCiB7Ci0gICAgY29uc3RydWN0Q29tbW9uKCk7CisgICAgRkZURnJhbWU6
OmluaXRpYWxpemUoKTsKIAogICAgIC8vIENyZWF0ZSBhIG5ldyBkZXN0aW5hdGlvbiBmb3Igb2Zm
bGluZSByZW5kZXJpbmcuCiAgICAgbV9kZXN0aW5hdGlvbk5vZGUgPSBPZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGU6OmNyZWF0ZSgqdGhpcywgbnVtYmVyT2ZDaGFubmVscywgbV9yZW5kZXJUYXJn
ZXQuY29weVJlZigpKTsKIH0KIAotdm9pZCBCYXNlQXVkaW9Db250ZXh0Ojpjb25zdHJ1Y3RDb21t
b24oKQotewotICAgIEZGVEZyYW1lOjppbml0aWFsaXplKCk7Ci0KLSAgICBBU1NFUlQoZG9jdW1l
bnQoKSk7Ci0gICAgaWYgKGRvY3VtZW50KCktPmF1ZGlvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0
dXJlKCkpCi0gICAgICAgIGFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVVzZXJHZXN0dXJl
Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcmVzdHJpY3Rp
b25zID0gTm9SZXN0cmljdGlvbnM7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBhZGRCZWhh
dmlvclJlc3RyaWN0aW9uKFJlcXVpcmVQYWdlQ29uc2VudEZvckF1ZGlvU3RhcnRSZXN0cmljdGlv
bik7Ci0jZW5kaWYKLX0KLQogQmFzZUF1ZGlvQ29udGV4dDo6fkJhc2VBdWRpb0NvbnRleHQoKQog
ewogI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCkBAIC0yMDMsMTEgKzE3Nyw2IEBAIEJh
c2VBdWRpb0NvbnRleHQ6On5CYXNlQXVkaW9Db250ZXh0KCkKICAgICAgICAgbV9yZW5kZXJpbmdB
dXRvbWF0aWNQdWxsTm9kZXMucmVzaXplKG1fYXV0b21hdGljUHVsbE5vZGVzLnNpemUoKSk7CiAg
ICAgQVNTRVJUKG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLmlzRW1wdHkoKSk7CiAgICAg
Ly8gRklYTUU6IENhbiB3ZSBhc3NlcnQgdGhhdCBtX2RlZmVycmVkQnJlYWtDb25uZWN0aW9uTGlz
dCBpcyBlbXB0eT8KLQotICAgIGlmICghaXNPZmZsaW5lQ29udGV4dCgpICYmIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSkgewotICAgICAgICBkb2N1bWVudCgpLT5yZW1vdmVBdWRpb1Byb2R1Y2Vy
KCp0aGlzKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0
ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwotICAgIH0KIH0KIAogdm9pZCBCYXNlQXVkaW9Db250
ZXh0OjpsYXp5SW5pdGlhbGl6ZSgpCkBAIC0zMzYsMjIgKzMwNSw2IEBAIHZvaWQgQmFzZUF1ZGlv
Q29udGV4dDo6c3RvcCgpCiAgICAgY2xlYXIoKTsKIH0KIAotdm9pZCBCYXNlQXVkaW9Db250ZXh0
OjpzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pCi17Ci0gICAgaWYgKHN0YXRlKCkgPT0gU3Rh
dGU6OlJ1bm5pbmcpIHsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmJlZ2luSW50ZXJydXB0aW9u
KFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpQbGF5YmFja1N1c3BlbmRlZCk7Ci0gICAgICAgIGRvY3Vt
ZW50KCktPnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7Ci0gICAgfQotfQotCi12b2lkIEJhc2VBdWRp
b0NvbnRleHQ6OnJlc3VtZSgpCi17Ci0gICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkludGVycnVw
dGVkKSB7Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1N
ZWRpYVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOwotICAgICAgICBkb2N1bWVudCgpLT51cGRh
dGVJc1BsYXlpbmdNZWRpYSgpOwotICAgIH0KLX0KLQogY29uc3QgY2hhciogQmFzZUF1ZGlvQ29u
dGV4dDo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJBdWRpb0Nv
bnRleHQiOwpAQCAtMzYyLDQxICszMTUsMTEgQEAgRG9jdW1lbnQqIEJhc2VBdWRpb0NvbnRleHQ6
OmRvY3VtZW50KCkgY29uc3QKICAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CiB9CiAKLURvY3VtZW50SWRlbnRpZmllciBCYXNlQXVkaW9Db250
ZXh0Ojpob3N0aW5nRG9jdW1lbnRJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICBhdXRvKiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAg
IHJldHVybiBkb2N1bWVudCA/IGRvY3VtZW50LT5pZGVudGlmaWVyKCkgOiBEb2N1bWVudElkZW50
aWZpZXIgeyB9OwotfQotCiBmbG9hdCBCYXNlQXVkaW9Db250ZXh0OjpzYW1wbGVSYXRlKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUgPyBtX2Rlc3RpbmF0aW9uTm9kZS0+
c2FtcGxlUmF0ZSgpIDogQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVTYW1wbGVSYXRlKCk7CiB9
CiAKLWJvb2wgQmFzZUF1ZGlvQ29udGV4dDo6aXNTdXNwZW5kZWQoKSBjb25zdAotewotICAgIHJl
dHVybiAhZG9jdW1lbnQoKSB8fCBkb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJlU3VzcGVu
ZGVkKCkgfHwgZG9jdW1lbnQoKS0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKTsKLX0KLQot
dm9pZCBCYXNlQXVkaW9Db250ZXh0Ojp2aXNpYmlsaXR5U3RhdGVDaGFuZ2VkKCkKLXsKLSAgICAv
LyBEbyBub3Qgc3VzcGVuZCBpZiBhdWRpbyBpcyBhdWRpYmxlLgotICAgIGlmICghZG9jdW1lbnQo
KSB8fCBtZWRpYVN0YXRlKCkgPT0gTWVkaWFQcm9kdWNlcjo6SXNQbGF5aW5nQXVkaW8gfHwgbV9p
c1N0b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkb2N1bWVudCgpLT5o
aWRkZW4oKSkgewotICAgICAgICBpZiAoc3RhdGUoKSA9PSBTdGF0ZTo6UnVubmluZykgewotICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgidmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgp
IFN1c3BlbmRpbmcgcGxheWJhY2sgYWZ0ZXIgZ29pbmcgdG8gdGhlIGJhY2tncm91bmQiKTsKLSAg
ICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5iZWdpbkludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlh
U2Vzc2lvbjo6RW50ZXJpbmdCYWNrZ3JvdW5kKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpJbnRlcnJ1cHRlZCkgewotICAgICAgICAgICAg
UkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgidmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgpIFJlc3VtaW5n
IHBsYXliYWNrIGFmdGVyIGVudGVyaW5nIGZvcmVncm91bmQiKTsKLSAgICAgICAgICAgIG1fbWVk
aWFTZXNzaW9uLT5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1heVJlc3Vt
ZVBsYXlpbmcpOwotICAgICAgICB9Ci0gICAgfQotfQotCiBib29sIEJhc2VBdWRpb0NvbnRleHQ6
OndvdWxkVGFpbnRPcmlnaW4oY29uc3QgVVJMJiB1cmwpIGNvbnN0CiB7CiAgICAgaWYgKHVybC5w
cm90b2NvbElzRGF0YSgpKQpAQCAtOTkzLDY0ICs5MTYsNiBAQCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBCYXNlQXVkaW9Db250ZXh0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKICAg
ICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiB9CiAK
LXN0YXRpYyBib29sIHNob3VsZERvY3VtZW50QWxsb3dXZWJBdWRpb1RvQXV0b1BsYXkoY29uc3Qg
RG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIGlmIChkb2N1bWVudC5wcm9jZXNzaW5nVXNlckdl
c3R1cmVGb3JNZWRpYSgpIHx8IGRvY3VtZW50LmlzQ2FwdHVyaW5nKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIHJldHVybiBkb2N1bWVudC5xdWlya3MoKS5zaG91bGRBdXRvcGxheVdlYkF1
ZGlvRm9yQXJiaXRyYXJ5VXNlckdlc3R1cmUoKSAmJiBkb2N1bWVudC50b3BEb2N1bWVudCgpLmhh
c0hhZFVzZXJJbnRlcmFjdGlvbigpOwotfQotCi1ib29sIEJhc2VBdWRpb0NvbnRleHQ6OndpbGxC
ZWdpblBsYXliYWNrKCkKLXsKLSAgICBhdXRvKiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7
Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHVz
ZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKLSAgICAgICAgaWYgKCFzaG91bGRE
b2N1bWVudEFsbG93V2ViQXVkaW9Ub0F1dG9QbGF5KCpkb2N1bWVudCkpIHsKLSAgICAgICAgICAg
IEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyBmYWxzZSwgbm90IHByb2Nlc3Np
bmcgdXNlciBnZXN0dXJlIG9yIGNhcHR1cmluZyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQmFzZUF1ZGlv
Q29udGV4dDo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKLSAg
ICB9Ci0KLSAgICBpZiAocGFnZUNvbnNlbnRSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSkgewotICAg
ICAgICBhdXRvKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKLSAgICAgICAgaWYgKHBhZ2UgJiYg
IXBhZ2UtPmNhblN0YXJ0TWVkaWEoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQtPmFkZE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7Ci0gICAgICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5U
SUZJRVIsICJyZXR1cm5pbmcgZmFsc2UsIHBhZ2UgZG9lc24ndCBhbGxvdyBtZWRpYSB0byBzdGFy
dCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJlbW92
ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQmFzZUF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25zZW50
Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgYXV0byB3aWxsQmVn
aW4gPSBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50V2lsbEJlZ2luUGxheWJhY2soKTsKLSAgICBBTFdB
WVNfTE9HKExPR0lERU5USUZJRVIsICJyZXR1cm5pbmcgIiwgd2lsbEJlZ2luKTsKLSAgICAKLSAg
ICByZXR1cm4gd2lsbEJlZ2luOwotfQotCi12b2lkIEJhc2VBdWRpb0NvbnRleHQ6Om1lZGlhQ2Fu
U3RhcnQoRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIEFTU0VSVF9VTlVTRUQoZG9jdW1lbnQs
ICZkb2N1bWVudCA9PSB0aGlzLT5kb2N1bWVudCgpKTsKLSAgICByZW1vdmVCZWhhdmlvclJlc3Ry
aWN0aW9uKEJhc2VBdWRpb0NvbnRleHQ6OlJlcXVpcmVQYWdlQ29uc2VudEZvckF1ZGlvU3RhcnRS
ZXN0cmljdGlvbik7Ci0gICAgbWF5UmVzdW1lUGxheWJhY2sodHJ1ZSk7Ci19Ci0KLU1lZGlhUHJv
ZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBCYXNlQXVkaW9Db250ZXh0OjptZWRpYVN0YXRlKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1faXNTdG9wU2NoZWR1bGVkICYmIG1fZGVzdGluYXRpb25Ob2RlICYm
IG1fZGVzdGluYXRpb25Ob2RlLT5pc1BsYXlpbmdBdWRpbygpKQotICAgICAgICByZXR1cm4gTWVk
aWFQcm9kdWNlcjo6SXNQbGF5aW5nQXVkaW87Ci0KLSAgICByZXR1cm4gTWVkaWFQcm9kdWNlcjo6
SXNOb3RQbGF5aW5nOwotfQotCi12b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnBhZ2VNdXRlZFN0YXRl
RGlkQ2hhbmdlKCkKLXsKLSAgICBpZiAobV9kZXN0aW5hdGlvbk5vZGUgJiYgZG9jdW1lbnQoKSAm
JiBkb2N1bWVudCgpLT5wYWdlKCkpCi0gICAgICAgIG1fZGVzdGluYXRpb25Ob2RlLT5zZXRNdXRl
ZChkb2N1bWVudCgpLT5wYWdlKCktPmlzQXVkaW9NdXRlZCgpKTsKLX0KLQogdm9pZCBCYXNlQXVk
aW9Db250ZXh0Ojppc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgpCiB7CiAgICAgLy8gTWFrZSBzdXJl
IHRvIGNhbGwgRG9jdW1lbnQ6OnVwZGF0ZUlzUGxheWluZ01lZGlhKCkgb24gdGhlIG1haW4gdGhy
ZWFkLCBzaW5jZQpAQCAtMTEyMyw0NSArOTg4LDYgQEAgdm9pZCBCYXNlQXVkaW9Db250ZXh0Ojpk
aWRTdXNwZW5kUmVuZGVyaW5nKHNpemVfdCkKICAgICBzZXRTdGF0ZShTdGF0ZTo6U3VzcGVuZGVk
KTsKIH0KIAotdm9pZCBCYXNlQXVkaW9Db250ZXh0OjpzdXNwZW5kUGxheWJhY2soKQotewotICAg
IGlmICghbV9kZXN0aW5hdGlvbk5vZGUgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6U3VzcGVuZGVkKSB7Ci0g
ICAgICAgIGlmIChtX21lZGlhU2Vzc2lvbi0+c3RhdGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lv
bjo6SW50ZXJydXB0ZWQpCi0gICAgICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6SW50ZXJydXB0ZWQp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbGF6eUluaXRpYWxpemUoKTsKLQotICAg
IG1fZGVzdGluYXRpb25Ob2RlLT5zdXNwZW5kKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyldIHsKLSAgICAgICAgYm9vbCBpbnRlcnJ1cHRlZCA9IG1fbWVkaWFTZXNzaW9uLT5z
dGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZDsKLSAgICAgICAgc2V0
U3RhdGUoaW50ZXJydXB0ZWQgPyBTdGF0ZTo6SW50ZXJydXB0ZWQgOiBTdGF0ZTo6U3VzcGVuZGVk
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBCYXNlQXVkaW9Db250ZXh0OjptYXlSZXN1bWVQbGF5YmFj
ayhib29sIHNob3VsZFJlc3VtZSkKLXsKLSAgICBpZiAoIW1fZGVzdGluYXRpb25Ob2RlIHx8IG1f
c3RhdGUgPT0gU3RhdGU6OkNsb3NlZCB8fCBtX3N0YXRlID09IFN0YXRlOjpSdW5uaW5nKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNob3VsZFJlc3VtZSkgewotICAgICAgICBzZXRTdGF0
ZShTdGF0ZTo6U3VzcGVuZGVkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
d2lsbEJlZ2luUGxheWJhY2soKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF6eUluaXRpYWxp
emUoKTsKLQotICAgIG1fZGVzdGluYXRpb25Ob2RlLT5yZXN1bWUoW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6UnVubmluZyk7
Ci0gICAgfSk7Ci19Ci0KIHZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6cG9zdFRhc2soV1RGOjpGdW5j
dGlvbjx2b2lkKCk+JiYgdGFzaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CYXNlQXVkaW9Db250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaApp
bmRleCA2NWZjOGY5MDBmMjE2OWZjYjU2MDUyZmUzNmMzNGI5MTI4NDdhMTU4Li5iMzgzNzMzMTdm
NzQxMGY1YWUxNmZmMjc0ZTY2ZTMwMzM0YzYwOGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaApAQCAtMzQsMTMgKzM0LDkgQEAK
ICNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0
LmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKLSNpbmNsdWRlICJNZWRpYUNh
blN0YXJ0TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJNZWRpYVByb2R1Y2VyLmgiCiAjaW5jbHVkZSAi
T3NjaWxsYXRvclR5cGUuaCIKICNpbmNsdWRlICJQZXJpb2RpY1dhdmVDb25zdHJhaW50cy5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtTWVkaWFTZXNzaW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlZpc2liaWxpdHlDaGFuZ2VDbGllbnQuaCIKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9Db25zb2xlVHlwZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9GbG9hdDMyQXJyYXkuaD4KICNpbmNsdWRlIDxhdG9taWM+CkBAIC05OSwyMSArOTUsMTUg
QEAgY2xhc3MgQmFzZUF1ZGlvQ29udGV4dAogICAgIDogcHVibGljIEFjdGl2ZURPTU9iamVjdAog
ICAgICwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEJhc2VBdWRpb0NvbnRleHQ+CiAgICAg
LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YQotICAgICwgcHVibGljIE1lZGlhQ2Fu
U3RhcnRMaXN0ZW5lcgotICAgICwgcHVibGljIE1lZGlhUHJvZHVjZXIKKyAgICAsIHB1YmxpYyBD
YW5NYWtlV2Vha1B0cjxCYXNlQXVkaW9Db250ZXh0PgogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxF
RAogICAgICwgcHVibGljIExvZ2dlckhlbHBlcgogI2VuZGlmCi0gICAgLCBwcml2YXRlIFBsYXRm
b3JtTWVkaWFTZXNzaW9uQ2xpZW50Ci0gICAgLCBwcml2YXRlIFZpc2liaWxpdHlDaGFuZ2VDbGll
bnQKIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEJhc2VBdWRpb0NvbnRleHQpOwogcHVi
bGljOgogICAgIHZpcnR1YWwgfkJhc2VBdWRpb0NvbnRleHQoKTsKIAotICAgIHVzaW5nIFdlYWtW
YWx1ZVR5cGUgPSBNZWRpYUNhblN0YXJ0TGlzdGVuZXI6OldlYWtWYWx1ZVR5cGU7Ci0gICAgdXNp
bmcgTWVkaWFDYW5TdGFydExpc3RlbmVyOjp3ZWFrUHRyRmFjdG9yeTsKLQogICAgIC8vIFJlY29u
Y2lsZSByZWYvZGVyZWYgd2hpY2ggYXJlIGRlZmluZWQgYm90aCBpbiBUaHJlYWRTYWZlUmVmQ291
bnRlZCBhbmQgRXZlbnRUYXJnZXQuCiAgICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ6OnJl
ZjsKICAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291bnRlZDo6ZGVyZWY7CkBAIC0xMjQsOCArMTE0
LDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNPZmZsaW5lQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNPZmZsaW5lQ29udGV4dDsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1dlYktpdEF1ZGlvQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBEb2N1bWVudElkZW50aWZpZXIg
aG9zdGluZ0RvY3VtZW50SWRlbnRpZmllcigpIGNvbnN0IGZpbmFsOwotCiAgICAgQXVkaW9EZXN0
aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9uKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUuZ2V0
KCk7IH0KICAgICBzaXplX3QgY3VycmVudFNhbXBsZUZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvbk5vZGUgPyBtX2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVudFNhbXBsZUZyYW1lKCkg
OiAwOyB9CiAgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5h
dGlvbk5vZGUgPyBtX2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVudFRpbWUoKSA6IDAuOyB9CkBAIC0y
NTksMjMgKzI0NywxMiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdW5zaWduZWQgc19oYXJkd2Fy
ZUNvbnRleHRDb3VudDsKIAotICAgIC8vIFJlc3RyaWN0aW9ucyB0byBjaGFuZ2UgZGVmYXVsdCBi
ZWhhdmlvcnMuCi0gICAgZW51bSBCZWhhdmlvclJlc3RyaWN0aW9uRmxhZ3MgewotICAgICAgICBO
b1Jlc3RyaWN0aW9ucyA9IDAsCi0gICAgICAgIFJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3Rh
cnRSZXN0cmljdGlvbiA9IDEgPDwgMCwKLSAgICAgICAgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVk
aW9TdGFydFJlc3RyaWN0aW9uID0gMSA8PCAxLAotICAgIH07Ci0gICAgdHlwZWRlZiB1bnNpZ25l
ZCBCZWhhdmlvclJlc3RyaWN0aW9uczsKLSAgICBCZWhhdmlvclJlc3RyaWN0aW9ucyBiZWhhdmlv
clJlc3RyaWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3Rpb25zOyB9Ci0gICAgdm9p
ZCBhZGRCZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9u
KSB7IG1fcmVzdHJpY3Rpb25zIHw9IHJlc3RyaWN0aW9uOyB9Ci0gICAgdm9pZCByZW1vdmVCZWhh
dmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9uKSB7IG1fcmVz
dHJpY3Rpb25zICY9IH5yZXN0cmljdGlvbjsgfQotCiAgICAgdm9pZCBpc1BsYXlpbmdBdWRpb0Rp
ZENoYW5nZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIG5vZGVXaWxsQmVnaW5QbGF5YmFjaygpIHsg
fQogCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgY29uc3QgTG9nZ2VyJiBsb2dnZXIo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xvZ2dlci5nZXQoKTsgfQorICAgIGNvbnN0IExvZ2dl
ciYgbG9nZ2VyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KICAg
ICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dJ
ZGVudGlmaWVyOyB9CiAgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFs
OwogICAgIGNvbnN0IHZvaWQqIG5leHRBdWRpb05vZGVMb2dJZGVudGlmaWVyKCkgeyByZXR1cm4g
Y2hpbGRMb2dJZGVudGlmaWVyKG1fbG9nSWRlbnRpZmllciwgKyttX25leHRBdWRpb05vZGVJZGVu
dGlmaWVyKTsgfQpAQCAtMzMzLDggKzMxMCw2IEBAIHByb3RlY3RlZDoKIAogICAgIEF1ZGlvRGVz
dGluYXRpb25Ob2RlKiBkZXN0aW5hdGlvbk5vZGUoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0
aW9uTm9kZS5nZXQoKTsgfQogCi0gICAgYm9vbCB3aWxsQmVnaW5QbGF5YmFjaygpOwotCiAgICAg
dmlydHVhbCB2b2lkIHVuaW5pdGlhbGl6ZSgpOwogCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CkBAIC0zNDYsMjkgKzMyMSwxNSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoT2ZmbGluZVJlbmRlcmluZyhFeGNlcHRpb25PcjxSZWY8QXVkaW9CdWZmZXI+PiYmKSB7
IH0KIAotICAgIGJvb2wgdXNlckdlc3R1cmVSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSBjb25zdCB7
IHJldHVybiAhaXNPZmZsaW5lQ29udGV4dCgpICYmIG1fcmVzdHJpY3Rpb25zICYgUmVxdWlyZVVz
ZXJHZXN0dXJlRm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uOyB9Ci0gICAgYm9vbCBwYWdlQ29uc2Vu
dFJlcXVpcmVkRm9yQXVkaW9TdGFydCgpIGNvbnN0IHsgcmV0dXJuICFpc09mZmxpbmVDb250ZXh0
KCkgJiYgbV9yZXN0cmljdGlvbnMgJiBSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVz
dHJpY3Rpb247IH0KLQotICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uKiBtZWRpYVNlc3Npb24oKSBj
b25zdCB7IHJldHVybiBtX21lZGlhU2Vzc2lvbi5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICB2b2lk
IGNvbnN0cnVjdENvbW1vbigpOwotCiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgdm9pZCBzY2hl
ZHVsZU5vZGVEZWxldGlvbigpOwogCi0gICAgdm9pZCBtZWRpYUNhblN0YXJ0KERvY3VtZW50Jikg
b3ZlcnJpZGU7Ci0KICAgICAvLyBFdmVudFRhcmdldAogICAgIHZvaWQgZGlzcGF0Y2hFdmVudChF
dmVudCYpIGZpbmFsOwogCi0gICAgLy8gTWVkaWFQcm9kdWNlcgotICAgIE1lZGlhUHJvZHVjZXI6
Ok1lZGlhU3RhdGVGbGFncyBtZWRpYVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBw
YWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpIG92ZXJyaWRlOwotCiAgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0IEFQSS4KLSAgICB2b2lkIHN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbikgZmluYWw7Ci0g
ICAgdm9pZCByZXN1bWUoKSBmaW5hbDsKICAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKICAgICBj
b25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTM3
NiwyMCArMzM3LDYgQEAgcHJpdmF0ZToKICAgICAvLyBNYWtlIHN1cmUgdG8gZGVyZWZlcmVuY2Ug
dGhlbSBoZXJlLgogICAgIHZvaWQgZGVyZWZVbmZpbmlzaGVkU291cmNlTm9kZXMoKTsKIAotICAg
IC8vIFBsYXRmb3JtTWVkaWFTZXNzaW9uQ2xpZW50Ci0gICAgUGxhdGZvcm1NZWRpYVNlc3Npb246
Ok1lZGlhVHlwZSBtZWRpYVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbjo6TWVkaWFUeXBlOjpXZWJBdWRpbzsgfQotICAgIFBsYXRmb3JtTWVkaWFTZXNz
aW9uOjpNZWRpYVR5cGUgcHJlc2VudGF0aW9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGU6OldlYkF1ZGlvOyB9Ci0gICAgdm9pZCBt
YXlSZXN1bWVQbGF5YmFjayhib29sIHNob3VsZFJlc3VtZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
dXNwZW5kUGxheWJhY2soKSBvdmVycmlkZTsKLSAgICBib29sIGNhblJlY2VpdmVSZW1vdGVDb250
cm9sQ29tbWFuZHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQg
ZGlkUmVjZWl2ZVJlbW90ZUNvbnRyb2xDb21tYW5kKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpSZW1v
dGVDb250cm9sQ29tbWFuZFR5cGUsIGNvbnN0IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpSZW1vdGVD
b21tYW5kQXJndW1lbnQqKSBvdmVycmlkZSB7IH0KLSAgICBib29sIHN1cHBvcnRzU2Vla2luZygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRPdmVycmlk
ZUJhY2tncm91bmRQbGF5YmFja1Jlc3RyaWN0aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRl
cnJ1cHRpb25UeXBlKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wg
Y2FuUHJvZHVjZUF1ZGlvKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wg
aXNTdXNwZW5kZWQoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgdmlzaWJpbGl0eVN0YXRlQ2hh
bmdlZCgpIGZpbmFsOwotCiAgICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvU3VtbWluZ0p1bmN0aW9u
cygpOwogICAgIHZvaWQgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCk7CiAKQEAgLTQzOCw4
ICszODUsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX2RlZmVycmVkQnJl
YWtDb25uZWN0aW9uTGlzdDsKICAgICBWZWN0b3I8VmVjdG9yPERPTVByb21pc2VEZWZlcnJlZDx2
b2lkPj4+IG1fc3RhdGVSZWFjdGlvbnM7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1N
ZWRpYVNlc3Npb24+IG1fbWVkaWFTZXNzaW9uOwotCiAgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBt
X3JlbmRlclRhcmdldDsKICAgICBSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbk5vZGU+IG1fZGVzdGlu
YXRpb25Ob2RlOwogICAgIFJlZlB0cjxBdWRpb0xpc3RlbmVyPiBtX2xpc3RlbmVyOwpAQCAtNDYy
LDggKzQwNyw2IEBAIHByaXZhdGU6CiAgICAgLy8gTnVtYmVyIG9mIEF1ZGlvQnVmZmVyU291cmNl
Tm9kZXMgdGhhdCBhcmUgYWN0aXZlIChwbGF5aW5nKS4KICAgICBzdGQ6OmF0b21pYzxpbnQ+IG1f
YWN0aXZlU291cmNlQ291bnQgeyAwIH07CiAKLSAgICBCZWhhdmlvclJlc3RyaWN0aW9ucyBtX3Jl
c3RyaWN0aW9ucyB7IE5vUmVzdHJpY3Rpb25zIH07Ci0KICAgICBTdGF0ZSBtX3N0YXRlIHsgU3Rh
dGU6OlN1c3BlbmRlZCB9OwogICAgIFJlZlB0cjxQZW5kaW5nQWN0aXZpdHk8QmFzZUF1ZGlvQ29u
dGV4dD4+IG1fcGVuZGluZ0FjdGl2aXR5OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db250ZXh0LmNwcAppbmRleCAyNGZhMDQzOTk0
YjhmNWFhZThlYTQ3ZTA3YjM4M2ZjYThiNTE1MjJlLi5lNzRkYTg0NDBlYThkZjY2OTBjZTdmNTFj
ZDBhNWM1ODFkMWZiNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4dC5jcHAKQEAgLTk5LDExICs5OSw2IEBAIHZvaWQg
T2ZmbGluZUF1ZGlvQ29udGV4dDo6c3RhcnRPZmZsaW5lUmVuZGVyaW5nKFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghd2ls
bEJlZ2luUGxheWJhY2soKSkgewotICAgICAgICBwcm9taXNlLT5yZWplY3QoRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IsICJSZWZ1c2luZyB0byBzdGFydCByZW5kZXJpbmcgZm9yIHNlY3Vy
aXR5IHJlYXNvbnMiIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKCFyZW5k
ZXJUYXJnZXQoKSkgewogICAgICAgICBwcm9taXNlLT5yZWplY3QoRXhjZXB0aW9uIHsgSW52YWxp
ZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gY3JlYXRlIGF1ZGlvIGJ1ZmZlciJfcyB9KTsKICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGEwOTMwNWYy
ODRjZWNhNjVkNjg0NjE4OWU5N2RkYWI3NzU1MTA2ZDYuLjRhNWRjNTNmMmVmZTI2YmRiNDAzYzI1
MDM5OTBjMjllY2Q0YWIxODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAg
LTQyODQsMTAgKzQyODQsMTAgQEAgYm9vbCBJbnRlcm5hbHM6OmVsZW1lbnRJc0Jsb2NraW5nRGlz
cGxheVNsZWVwKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiAjZW5kaWYgLy8gRU5B
QkxFKFZJREVPKQogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKLXZvaWQgSW50ZXJuYWxzOjpzZXRB
dWRpb0NvbnRleHRSZXN0cmljdGlvbnMoY29uc3QgVmFyaWFudDxSZWZQdHI8QmFzZUF1ZGlvQ29u
dGV4dD4sIFJlZlB0cjxXZWJLaXRBdWRpb0NvbnRleHQ+PiYgY29udGV4dFZhcmlhbnQsIFN0cmlu
Z1ZpZXcgcmVzdHJpY3Rpb25zU3RyaW5nKQordm9pZCBJbnRlcm5hbHM6OnNldEF1ZGlvQ29udGV4
dFJlc3RyaWN0aW9ucyhjb25zdCBWYXJpYW50PFJlZlB0cjxBdWRpb0NvbnRleHQ+LCBSZWZQdHI8
V2ViS2l0QXVkaW9Db250ZXh0Pj4mIGNvbnRleHRWYXJpYW50LCBTdHJpbmdWaWV3IHJlc3RyaWN0
aW9uc1N0cmluZykKIHsKLSAgICBSZWZQdHI8QmFzZUF1ZGlvQ29udGV4dD4gY29udGV4dDsKLSAg
ICBzd2l0Y2hPbihjb250ZXh0VmFyaWFudCwgWyZdKFJlZlB0cjxCYXNlQXVkaW9Db250ZXh0PiBl
bnRyeSkgeworICAgIFJlZlB0cjxBdWRpb0NvbnRleHQ+IGNvbnRleHQ7CisgICAgc3dpdGNoT24o
Y29udGV4dFZhcmlhbnQsIFsmXShSZWZQdHI8QXVkaW9Db250ZXh0PiBlbnRyeSkgewogICAgICAg
ICBjb250ZXh0ID0gZW50cnk7CiAgICAgfSwgWyZdKFJlZlB0cjxXZWJLaXRBdWRpb0NvbnRleHQ+
IGVudHJ5KSB7CiAgICAgICAgIGNvbnRleHQgPSBlbnRyeTsKQEAgLTQyOTYsMTUgKzQyOTYsMTUg
QEAgdm9pZCBJbnRlcm5hbHM6OnNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyhjb25zdCBWYXJp
YW50PFJlZlB0cjxCYXNlQXVkaW9Db250ZXgKICAgICBhdXRvIHJlc3RyaWN0aW9ucyA9IGNvbnRl
eHQtPmJlaGF2aW9yUmVzdHJpY3Rpb25zKCk7CiAgICAgY29udGV4dC0+cmVtb3ZlQmVoYXZpb3JS
ZXN0cmljdGlvbihyZXN0cmljdGlvbnMpOwogCi0gICAgcmVzdHJpY3Rpb25zID0gQmFzZUF1ZGlv
Q29udGV4dDo6Tm9SZXN0cmljdGlvbnM7CisgICAgcmVzdHJpY3Rpb25zID0gQXVkaW9Db250ZXh0
OjpOb1Jlc3RyaWN0aW9uczsKIAogICAgIGZvciAoU3RyaW5nVmlldyByZXN0cmljdGlvblN0cmlu
ZyA6IHJlc3RyaWN0aW9uc1N0cmluZy5zcGxpdCgnLCcpKSB7CiAgICAgICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShyZXN0cmljdGlvblN0cmluZywgIm5vcmVzdHJpY3Rpb25z
IikpCi0gICAgICAgICAgICByZXN0cmljdGlvbnMgfD0gQmFzZUF1ZGlvQ29udGV4dDo6Tm9SZXN0
cmljdGlvbnM7CisgICAgICAgICAgICByZXN0cmljdGlvbnMgfD0gQXVkaW9Db250ZXh0OjpOb1Jl
c3RyaWN0aW9uczsKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHJl
c3RyaWN0aW9uU3RyaW5nLCAicmVxdWlyZXVzZXJnZXN0dXJlZm9yYXVkaW9zdGFydCIpKQotICAg
ICAgICAgICAgcmVzdHJpY3Rpb25zIHw9IEJhc2VBdWRpb0NvbnRleHQ6OlJlcXVpcmVVc2VyR2Vz
dHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbjsKKyAgICAgICAgICAgIHJlc3RyaWN0aW9ucyB8
PSBBdWRpb0NvbnRleHQ6OlJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlv
bjsKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHJlc3RyaWN0aW9u
U3RyaW5nLCAicmVxdWlyZXBhZ2Vjb25zZW50Zm9yYXVkaW9zdGFydCIpKQotICAgICAgICAgICAg
cmVzdHJpY3Rpb25zIHw9IEJhc2VBdWRpb0NvbnRleHQ6OlJlcXVpcmVQYWdlQ29uc2VudEZvckF1
ZGlvU3RhcnRSZXN0cmljdGlvbjsKKyAgICAgICAgICAgIHJlc3RyaWN0aW9ucyB8PSBBdWRpb0Nv
bnRleHQ6OlJlcXVpcmVQYWdlQ29uc2VudEZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbjsKICAgICB9
CiAgICAgY29udGV4dC0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihyZXN0cmljdGlvbnMpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggYTE2Zjk1MmYxNTUwMDFiZDYzNTJhZTUw
OTdhZDY4NjZmNDg3YTI0NS4uZDc0MzdjYTQ5Y2I2MjhmZGVkMzRmZjdkYjVlN2QzMjQzNzA2ODc2
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC00OCw4ICs0OCw4IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFuaW1hdGlvblRpbWVsaW5lOworY2xhc3MgQXVkaW9D
b250ZXh0OwogY2xhc3MgQXVkaW9UcmFjazsKLWNsYXNzIEJhc2VBdWRpb0NvbnRleHQ7CiBjbGFz
cyBDYWNoZVN0b3JhZ2VDb25uZWN0aW9uOwogY2xhc3MgRE9NUmVjdDsKIGNsYXNzIERPTVJlY3RM
aXN0OwpAQCAtNjY5LDcgKzY2OSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdF
Ql9BVURJTykKLSAgICB2b2lkIHNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyhjb25zdCBWYXJp
YW50PFJlZlB0cjxCYXNlQXVkaW9Db250ZXh0PiwgUmVmUHRyPFdlYktpdEF1ZGlvQ29udGV4dD4+
JiwgU3RyaW5nVmlldyByZXN0cmljdGlvbnNTdHJpbmcpOworICAgIHZvaWQgc2V0QXVkaW9Db250
ZXh0UmVzdHJpY3Rpb25zKGNvbnN0IFZhcmlhbnQ8UmVmUHRyPEF1ZGlvQ29udGV4dD4sIFJlZlB0
cjxXZWJLaXRBdWRpb0NvbnRleHQ+PiYsIFN0cmluZ1ZpZXcgcmVzdHJpY3Rpb25zU3RyaW5nKTsK
ICAgICB2b2lkIHVzZU1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EoKTsKICNlbmRpZgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKaW5kZXggYTNmNDU2ZTA4OWY3YmZhMWZmMWE3M2Fl
MzVkNDdhNGNiOWMxOTQxMS4uNDUwNzEyM2NiNWYxYWZjNDNhNTkzYmMyMjNjYzMzY2FiMmVjMmEz
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtNjkxLDcgKzY5MSw3IEBA
IGVudW0gQ29udGVudFNpemVDYXRlZ29yeSB7CiAgICAgW0NvbmRpdGlvbmFsPVZJREVPLCBNYXlU
aHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIHNldE1lZGlhU2Vzc2lvblJlc3RyaWN0aW9ucyhET01T
dHJpbmcgbWVkaWFUeXBlLCBET01TdHJpbmcgcmVzdHJpY3Rpb25zKTsKICAgICBbQ29uZGl0aW9u
YWw9VklERU8sIE1heVRocm93RXhjZXB0aW9uXSBET01TdHJpbmcgbWVkaWFTZXNzaW9uUmVzdHJp
Y3Rpb25zKERPTVN0cmluZyBtZWRpYVR5cGUpOwogICAgIFtDb25kaXRpb25hbD1WSURFT10gdW5k
ZWZpbmVkIHNldE1lZGlhRWxlbWVudFJlc3RyaWN0aW9ucyhIVE1MTWVkaWFFbGVtZW50IGVsZW1l
bnQsIERPTVN0cmluZyByZXN0cmljdGlvbnMpOwotICAgIFtDb25kaXRpb25hbD1XRUJfQVVESU9d
IHVuZGVmaW5lZCBzZXRBdWRpb0NvbnRleHRSZXN0cmljdGlvbnMoKEJhc2VBdWRpb0NvbnRleHQg
b3IgV2ViS2l0QXVkaW9Db250ZXh0KSBjb250ZXh0LCBET01TdHJpbmcgcmVzdHJpY3Rpb25zKTsK
KyAgICBbQ29uZGl0aW9uYWw9V0VCX0FVRElPXSB1bmRlZmluZWQgc2V0QXVkaW9Db250ZXh0UmVz
dHJpY3Rpb25zKChBdWRpb0NvbnRleHQgb3IgV2ViS2l0QXVkaW9Db250ZXh0KSBjb250ZXh0LCBE
T01TdHJpbmcgcmVzdHJpY3Rpb25zKTsKICAgICBbQ29uZGl0aW9uYWw9VklERU8sIE1heVRocm93
RXhjZXB0aW9uXSB1bmRlZmluZWQgcG9zdFJlbW90ZUNvbnRyb2xDb21tYW5kKERPTVN0cmluZyBj
b21tYW5kLCBvcHRpb25hbCB1bnJlc3RyaWN0ZWQgZmxvYXQgYXJndW1lbnQgPSAwKTsKICAgICBb
Q29uZGl0aW9uYWw9V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUXSB1bmRlZmluZWQgc2V0TW9ja01l
ZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7CiAgICAgW0Nv
bmRpdGlvbmFsPVdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCwgTWF5VGhyb3dFeGNlcHRpb25dIHVu
ZGVmaW5lZCBzZXRNb2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlclN0YXRlKERPTVN0cmluZyBk
ZXZpY2VOYW1lLCBET01TdHJpbmcgZGV2aWNlU3RhdGUpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDY0YTFkYTM2YTRmYTBm
NDVkZDBiMjA0ZTg5MDgyMmI5MzU0NGJiMWQuLjdmYTZlMWNiY2ZlNTEzMzQ4YjM3ZTMwOGNlYTRk
NjdhYTM4ZTk1ZDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAyMC0xMC0xNSAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgZXZlbiBtb3JlIEF1ZGlvQ29u
dGV4dC1zcGVjaWZpYyBsb2dpYyBvdXQgb2YgQmFzZUF1ZGlvQ29udGV4dAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3ODAzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHRlc3QgdGhhdCB3YXMg
dHJ5aW5nIHRvIHNldCB0aGUgYXV0b3BsYXkgcmVzdHJpY3Rpb25zIG9uIGFuIE9mZmxpbmVBdWRp
b0NvbnRleHQKKyAgICAgICAgdG8gbWFrZSBzdXJlIHRoZXkgZGlkIG5vdCBhcHBseS4gTm93IHRo
YXQgdGhlIGF1dG9wbGF5IHJlc3RyaWN0aW9ucyBhcmUgb24gQXVkaW9Db250ZXh0CisgICAgICAg
IGluc3RlYWQgb2YgQmFzZUF1ZGlvQ29udGV4dCwgdGhleSBkZWZpbml0ZWx5IGRvIG5vdCBhcHBs
eSB0byBPZmZsaW5lQXVkaW9Db250ZXh0IGFuZCBpdAorICAgICAgICBpcyBub3QgZXZlbiBwb3Nz
aWJsZSB0byBzZXQgdGhlIHJlc3RyaWN0aW9ucyBvbiBhbiBPZmZsaW5lQXVkaW9Db250ZXh0LiBJ
IHVwZGF0ZWQgdGhlCisgICAgICAgIHRlc3QgdG8gdXNlIHdlYmtpdE9mZmxpbmVBdWRpb0NvbnRl
eHQgd2hlbiBhdmFpbGFibGUgc2luY2UgV2ViS2l0T2ZmbGluZUF1ZGlvQ29udGV4dAorICAgICAg
ICBkb2VzIGluaGVyaXQgV2ViS2l0QXVkaW9Db250ZXh0LgorCisgICAgICAgICogd2ViYXVkaW8v
b2ZmbGluZWF1ZGlvY29udGV4dC1yZXN0cmljdGlvbi5odG1sOgorCiAyMDIwLTEwLTE1ICBDYXJs
b3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtX
UEVdIFJlYmFzZWxpbmUgYWZ0ZXIgcjI2ODUyMApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vb2ZmbGluZWF1ZGlvY29udGV4dC1yZXN0cmljdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vb2ZmbGluZWF1ZGlvY29udGV4dC1yZXN0cmljdGlvbi5odG1sCmluZGV4IDNlYzE0
NjVlN2JhOTRmZjAyNTQ1OGFiZTBmODgxODI1Nzc4ZDhjNTUuLjQ0NDc1ODg3MWQxNjk5ZGVhMmI5
MzY0ZTk3MzIxNzEzNDY1MDFkMDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL29m
ZmxpbmVhdWRpb2NvbnRleHQtcmVzdHJpY3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJh
dWRpby9vZmZsaW5lYXVkaW9jb250ZXh0LXJlc3RyaWN0aW9uLmh0bWwKQEAgLTIwLDkgKzIwLDE0
IEBAIHZhciBjYWxsZWRSZXN1bWVXaXRoVXNlckdlc3R1cmUgPSBmYWxzZTsKIGZ1bmN0aW9uIHJ1
blRlc3QoKSB7CiAgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwogCi0gICAgY29udGV4
dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDIsIDEwMDAsIDQ0MTAwKTsKLQotICAgIGlmICh3
aW5kb3cuaW50ZXJuYWxzKQorICAgIGlmICh3aW5kb3cud2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4
dCkKKyAgICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0KDIsIDEw
MDAsIDQ0MTAwKTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlv
Q29udGV4dCgyLCAxMDAwLCA0NDEwMCk7CisKKyAgICAvLyBJdCBpcyBub3QgcG9zc2libGUgdG8g
c2V0IEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyBvbiBhbiBPZmZsaW5lQXVkaW9Db250ZXh0IHNp
bmNlIGl0CisgICAgLy8gZG9lcyBub3Qgc3ViY2xhc3MgQXVkaW9Db250ZXh0IC8gV2ViS2l0QXVk
aW9Db250ZXh0LgorICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRvdy53ZWJraXRPZmZs
aW5lQXVkaW9Db250ZXh0KQogICAgICAgICBpbnRlcm5hbHMuc2V0QXVkaW9Db250ZXh0UmVzdHJp
Y3Rpb25zKGNvbnRleHQsICdSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0Jyk7CiAKICAg
ICBzaG91bGRCZSgnY29udGV4dC5zdGF0ZScsICcic3VzcGVuZGVkIicpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411590</attachid>
            <date>2020-10-16 10:01:23 -0700</date>
            <delta_ts>2020-10-16 10:59:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217803-20201016100122.patch</filename>
            <type>text/plain</type>
            <size>38929</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzc3M2RjYjU0YTQ3ODg5
YWJjNjJlMTQ0ODY3ZjgwN2I1MjQyNTliMS4uODQ4MTYyZTZmOWUyYWFiNzRlZmU3NjI2ZDFhYWNm
OGQwODRiMWVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDIwLTEwLTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBldmVuIG1vcmUgQXVk
aW9Db250ZXh0LXNwZWNpZmljIGxvZ2ljIG91dCBvZiBCYXNlQXVkaW9Db250ZXh0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc4MDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgTW92ZSBldmVuIG1vcmUgQXVk
aW9Db250ZXh0LXNwZWNpZmljIGxvZ2ljIG91dCBvZiBCYXNlQXVkaW9Db250ZXh0IGFuZAorICAg
ICAgICBpbnRvIEF1ZGlvQ29udGV4dC4gSW4gcGFydGljdWxhciwgYWxsIHRoZSBsb2dpYyByZWxh
dGVkIHRvIGF1dG9wbGF5CisgICAgICAgIHJlc3RyaWN0aW9ucywgYXVkaWJsZSBzdGF0ZSwgYW5k
IHBsYXRmb3JtIG1lZGlhIHNlc3Npb24gaW50ZXJydXB0aW9ucworICAgICAgICBvbmx5IGFwcGx5
IHRvIEF1ZGlvQ29udGV4dCBhbmQgbm90IE9mZmxpbmVBdWRpb0NvbnRleHQuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBubyBXZWItZmFjaW5nIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNo
b3VsZERvY3VtZW50QWxsb3dXZWJBdWRpb1RvQXV0b1BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250
ZXh0Ojpjb25zdHJ1Y3RDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojp+
QXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6d2lsbFBhdXNl
UGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjptZWRpYVN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bWF5UmVzdW1lUGxheWJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojp3aWxsQmVnaW5QbGF5YmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvQ29udGV4dDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6c3VzcGVuZFBsYXliYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6aG9z
dGluZ0RvY3VtZW50SWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Nv
bnRleHQ6OmlzU3VzcGVuZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6cGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250
ZXh0OjptZWRpYUNhblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bG9n
Z2VyIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpiZWhhdmlvclJlc3RyaWN0aW9ucyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmFkZEJlaGF2aW9yUmVzdHJpY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpyZW1vdmVCZWhhdmlvclJlc3Ry
aWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6dXNlckdlc3R1cmVSZXF1
aXJlZEZvckF1ZGlvU3RhcnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0
OjpwYWdlQ29uc2VudFJlcXVpcmVkRm9yQXVkaW9TdGFydCBjb25zdCk6CisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9CYXNlQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VBdWRpb0NvbnRleHQ6OkJhc2VBdWRpb0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QmFz
ZUF1ZGlvQ29udGV4dDo6fkJhc2VBdWRpb0NvbnRleHQpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vT2Zm
bGluZUF1ZGlvQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9Db250
ZXh0OjpzdGFydE9mZmxpbmVSZW5kZXJpbmcpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0QXVkaW9Db250ZXh0UmVzdHJp
Y3Rpb25zKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3Rp
bmcvSW50ZXJuYWxzLmlkbDoKKwogMjAyMC0xMC0xNSAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgTGVzc2VuIHRoZSByZWxpYW5jZSBvbiBWUEFUSCBpbiBXZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmNwcAppbmRleCBkOTQyODI5ZjMyOWYzYjkwYzk2MGExZmU2NTgw
MGI3YmVlNjNhYzEwLi4zMzhhZjYxNjZmMzUxNDA4ZjdmMGRkOWVlZjA5Nzk0ZWMyOTFjY2U0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3Bw
CkBAIC0zMSw4ICszMSwxMSBAQAogI2luY2x1ZGUgIkF1ZGlvVGltZXN0YW1wLmgiCiAjaW5jbHVk
ZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKKyNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBlcmZvcm1hbmNl
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmgiCisjaW5jbHVkZSAi
UXVpcmtzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAogI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCkBAIC01MSw2ICs1NCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorI2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwgLi4uKSBSRUxFQVNFX0xPR19J
Rihkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPnBhZ2UoKSAmJiBkb2N1bWVudCgpLT5wYWdlKCkt
PmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBNZWRpYSwgIiVwIC0gQXVkaW9Db250ZXh0Ojoi
IGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKwogI2lmIE9TKFdJTkRPV1MpCiAvLyBEb24ndCBh
bGxvdyBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIEF1ZGlvQ29udGV4dHMg
dGFsa2luZyB0byBoYXJkd2FyZS4KIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhIYXJkd2FyZUNvbnRl
eHRzID0gNDsKQEAgLTY0LDYgKzY5LDEzIEBAIHN0YXRpYyBPcHRpb25hbDxmbG9hdD4mIGRlZmF1
bHRTYW1wbGVSYXRlRm9yVGVzdGluZygpCiAgICAgcmV0dXJuIHNhbXBsZVJhdGU7CiB9CiAKK3N0
YXRpYyBib29sIHNob3VsZERvY3VtZW50QWxsb3dXZWJBdWRpb1RvQXV0b1BsYXkoY29uc3QgRG9j
dW1lbnQmIGRvY3VtZW50KQoreworICAgIGlmIChkb2N1bWVudC5wcm9jZXNzaW5nVXNlckdlc3R1
cmVGb3JNZWRpYSgpIHx8IGRvY3VtZW50LmlzQ2FwdHVyaW5nKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBkb2N1bWVudC5xdWlya3MoKS5zaG91bGRBdXRvcGxheVdlYkF1ZGlv
Rm9yQXJiaXRyYXJ5VXNlckdlc3R1cmUoKSAmJiBkb2N1bWVudC50b3BEb2N1bWVudCgpLmhhc0hh
ZFVzZXJJbnRlcmFjdGlvbigpOworfQorCiB2b2lkIEF1ZGlvQ29udGV4dDo6c2V0RGVmYXVsdFNh
bXBsZVJhdGVGb3JUZXN0aW5nKE9wdGlvbmFsPGZsb2F0PiBzYW1wbGVSYXRlKQogewogICAgIGRl
ZmF1bHRTYW1wbGVSYXRlRm9yVGVzdGluZygpID0gc2FtcGxlUmF0ZTsKQEAgLTk2LDEzICsxMDgs
NDQgQEAgRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQ29udGV4dD4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCwgQXVkaW9Db24KIC8vIENvbnN0cnVjdG9yIGZvciByZW5kZXJp
bmcgdG8gdGhlIGF1ZGlvIGhhcmR3YXJlLgogQXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQoRG9j
dW1lbnQmIGRvY3VtZW50LCBjb25zdCBBdWRpb0NvbnRleHRPcHRpb25zJiBjb250ZXh0T3B0aW9u
cykKICAgICA6IEJhc2VBdWRpb0NvbnRleHQoZG9jdW1lbnQsIGNvbnRleHRPcHRpb25zKQorICAg
ICwgbV9tZWRpYVNlc3Npb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OmNyZWF0ZShQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKSwgKnRoaXMpKQogeworICAgIGNvbnN0
cnVjdENvbW1vbigpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gbm9kZSdz
IG11dGVkIHN0YXRlIHRvIG1hdGNoIHRoZSBwYWdlJ3MgY3VycmVudCBtdXRlZCBzdGF0ZS4KKyAg
ICBwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpOworCisgICAgZG9jdW1lbnQuYWRkQXVkaW9Qcm9k
dWNlcigqdGhpcyk7CisgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFu
Z2VkQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogLy8gT25seSBuZWVkZWQgZm9yIFdlYktpdE9mZmxp
bmVBdWRpb0NvbnRleHQuCiBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCYgZG9j
dW1lbnQsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIFJlZlB0cjxBdWRpb0J1ZmZlcj4mJiBy
ZW5kZXJUYXJnZXQpCiAgICAgOiBCYXNlQXVkaW9Db250ZXh0KGRvY3VtZW50LCBudW1iZXJPZkNo
YW5uZWxzLCBXVEZNb3ZlKHJlbmRlclRhcmdldCkpCisgICAgLCBtX21lZGlhU2Vzc2lvbihQbGF0
Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hh
cmVkTWFuYWdlcigpLCAqdGhpcykpCiB7CisgICAgY29uc3RydWN0Q29tbW9uKCk7Cit9CisKK3Zv
aWQgQXVkaW9Db250ZXh0Ojpjb25zdHJ1Y3RDb21tb24oKQoreworICAgIEFTU0VSVChkb2N1bWVu
dCgpKTsKKyAgICBpZiAoZG9jdW1lbnQoKS0+YXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1
cmUoKSkKKyAgICAgICAgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlVXNlckdlc3R1cmVG
b3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgbV9yZXN0cmljdGlv
bnMgPSBOb1Jlc3RyaWN0aW9uczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGFkZEJlaGF2
aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9u
KTsKKyNlbmRpZgorfQorCitBdWRpb0NvbnRleHQ6On5BdWRpb0NvbnRleHQoKQoreworICAgIGlm
ICghaXNPZmZsaW5lQ29udGV4dCgpICYmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgeworICAg
ICAgICBkb2N1bWVudCgpLT5yZW1vdmVBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKKyAgICAgICAgZG9j
dW1lbnQoKS0+dW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRo
aXMpOworICAgIH0KIH0KIAogZG91YmxlIEF1ZGlvQ29udGV4dDo6YmFzZUxhdGVuY3koKQpAQCAt
MjYzLDIxICszMDYsMTY0IEBAIGJvb2wgQXVkaW9Db250ZXh0Ojp3aWxsUGF1c2VQbGF5YmFjaygp
CiAgICAgaWYgKHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAg
aWYgKCFkb2N1bWVudC0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihCYXNl
QXVkaW9Db250ZXh0OjpSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24p
OworICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKFJlcXVpcmVVc2VyR2VzdHVyZUZv
ckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7CisgICAgfQorCisgICAgaWYgKHBhZ2VDb25zZW50UmVx
dWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKKyAgICAgICAgYXV0byogcGFnZSA9IGRvY3VtZW50LT5w
YWdlKCk7CisgICAgICAgIGlmIChwYWdlICYmICFwYWdlLT5jYW5TdGFydE1lZGlhKCkpIHsKKyAg
ICAgICAgICAgIGRvY3VtZW50LT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJlbW92ZUJlaGF2aW9y
UmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsK
KyAgICB9CisKKyAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPmNsaWVudFdpbGxQYXVzZVBsYXli
YWNrKCk7Cit9CisKK01lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBBdWRpb0NvbnRleHQ6
Om1lZGlhU3RhdGUoKSBjb25zdAoreworICAgIGlmICghaXNTdG9wcGVkKCkgJiYgZGVzdGluYXRp
b25Ob2RlKCkgJiYgZGVzdGluYXRpb25Ob2RlKCktPmlzUGxheWluZ0F1ZGlvKCkpCisgICAgICAg
IHJldHVybiBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdBdWRpbzsKKworICAgIHJldHVybiBNZWRp
YVByb2R1Y2VyOjpJc05vdFBsYXlpbmc7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjptYXlSZXN1
bWVQbGF5YmFjayhib29sIHNob3VsZFJlc3VtZSkKK3sKKyAgICBpZiAoIWRlc3RpbmF0aW9uTm9k
ZSgpIHx8IHN0YXRlKCkgPT0gU3RhdGU6OkNsb3NlZCB8fCBzdGF0ZSgpID09IFN0YXRlOjpSdW5u
aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNob3VsZFJlc3VtZSkgeworICAgICAg
ICBzZXRTdGF0ZShTdGF0ZTo6U3VzcGVuZGVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghd2lsbEJlZ2luUGxheWJhY2soKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF6
eUluaXRpYWxpemUoKTsKKworICAgIGRlc3RpbmF0aW9uTm9kZSgpLT5yZXN1bWUoW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6
UnVubmluZyk7CisgICAgfSk7Cit9CisKK2Jvb2wgQXVkaW9Db250ZXh0Ojp3aWxsQmVnaW5QbGF5
YmFjaygpCit7CisgICAgYXV0byogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAgIGlm
ICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh1c2VyR2VzdHVy
ZVJlcXVpcmVkRm9yQXVkaW9TdGFydCgpKSB7CisgICAgICAgIGlmICghc2hvdWxkRG9jdW1lbnRB
bGxvd1dlYkF1ZGlvVG9BdXRvUGxheSgqZG9jdW1lbnQpKSB7CisgICAgICAgICAgICBBTFdBWVNf
TE9HKExPR0lERU5USUZJRVIsICJyZXR1cm5pbmcgZmFsc2UsIG5vdCBwcm9jZXNzaW5nIHVzZXIg
Z2VzdHVyZSBvciBjYXB0dXJpbmciKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKFJlcXVpcmVVc2VyR2VzdHVy
ZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7CiAgICAgfQogCiAgICAgaWYgKHBhZ2VDb25zZW50
UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAgYXV0byogcGFnZSA9IGRvY3VtZW50
LT5wYWdlKCk7CiAgICAgICAgIGlmIChwYWdlICYmICFwYWdlLT5jYW5TdGFydE1lZGlhKCkpIHsK
ICAgICAgICAgICAgIGRvY3VtZW50LT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwor
ICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAicmV0dXJuaW5nIGZhbHNlLCBw
YWdlIGRvZXNuJ3QgYWxsb3cgbWVkaWEgdG8gc3RhcnQiKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQotICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEJhc2VB
dWRpb0NvbnRleHQ6OlJlcXVpcmVQYWdlQ29uc2VudEZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7
CisgICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50Rm9y
QXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKKyAgICB9CisKKyAgICBhdXRvIHdpbGxCZWdpbiA9IG1f
bWVkaWFTZXNzaW9uLT5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpOworICAgIEFMV0FZU19MT0co
TE9HSURFTlRJRklFUiwgInJldHVybmluZyAiLCB3aWxsQmVnaW4pOworCisgICAgcmV0dXJuIHdp
bGxCZWdpbjsKK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQo
KQoreworICAgIC8vIERvIG5vdCBzdXNwZW5kIGlmIGF1ZGlvIGlzIGF1ZGlibGUuCisgICAgaWYg
KCFkb2N1bWVudCgpIHx8IG1lZGlhU3RhdGUoKSA9PSBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdB
dWRpbyB8fCBpc1N0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRvY3VtZW50
KCktPmhpZGRlbigpKSB7CisgICAgICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpSdW5uaW5nKSB7
CisgICAgICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJTdXNwZW5kaW5nIHBsYXli
YWNrIGFmdGVyIGdvaW5nIHRvIHRoZSBiYWNrZ3JvdW5kIik7CisgICAgICAgICAgICBtX21lZGlh
U2Vzc2lvbi0+YmVnaW5JbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OkVudGVyaW5n
QmFja2dyb3VuZCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RhdGUo
KSA9PSBTdGF0ZTo6SW50ZXJydXB0ZWQpIHsKKyAgICAgICAgICAgIEFMV0FZU19MT0coTE9HSURF
TlRJRklFUiwgIlJlc3VtaW5nIHBsYXliYWNrIGFmdGVyIGVudGVyaW5nIGZvcmVncm91bmQiKTsK
KyAgICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRp
YVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IEF1ZGlvQ29udGV4dDo6c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uKQoreworICAgIGlmIChz
dGF0ZSgpID09IFN0YXRlOjpSdW5uaW5nKSB7CisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5iZWdp
bkludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UGxheWJhY2tTdXNwZW5kZWQpOwor
ICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVJc1BsYXlpbmdNZWRpYSgpOworICAgIH0KK30KKwor
dm9pZCBBdWRpb0NvbnRleHQ6OnJlc3VtZSgpCit7CisgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6
OkludGVycnVwdGVkKSB7CisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5lbmRJbnRlcnJ1cHRpb24o
UGxhdGZvcm1NZWRpYVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOworICAgICAgICBkb2N1bWVu
dCgpLT51cGRhdGVJc1BsYXlpbmdNZWRpYSgpOworICAgIH0KK30KKwordm9pZCBBdWRpb0NvbnRl
eHQ6OnN1c3BlbmRQbGF5YmFjaygpCit7CisgICAgaWYgKCFkZXN0aW5hdGlvbk5vZGUoKSB8fCBz
dGF0ZSgpID09IFN0YXRlOjpDbG9zZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdGF0
ZSgpID09IFN0YXRlOjpTdXNwZW5kZWQpIHsKKyAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9uLT5z
dGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZCkKKyAgICAgICAgICAg
IHNldFN0YXRlKFN0YXRlOjpJbnRlcnJ1cHRlZCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICByZXR1cm4gbWVkaWFTZXNzaW9uKCktPmNsaWVudFdpbGxQYXVzZVBsYXliYWNrKCk7Cisg
ICAgbGF6eUluaXRpYWxpemUoKTsKKworICAgIGRlc3RpbmF0aW9uTm9kZSgpLT5zdXNwZW5kKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgYm9vbCBpbnRl
cnJ1cHRlZCA9IG1fbWVkaWFTZXNzaW9uLT5zdGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9u
OjpJbnRlcnJ1cHRlZDsKKyAgICAgICAgc2V0U3RhdGUoaW50ZXJydXB0ZWQgPyBTdGF0ZTo6SW50
ZXJydXB0ZWQgOiBTdGF0ZTo6U3VzcGVuZGVkKTsKKyAgICB9KTsKK30KKworRG9jdW1lbnRJZGVu
dGlmaWVyIEF1ZGlvQ29udGV4dDo6aG9zdGluZ0RvY3VtZW50SWRlbnRpZmllcigpIGNvbnN0Cit7
CisgICAgYXV0byogZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4obV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KTsKKyAgICByZXR1cm4gZG9jdW1lbnQgPyBkb2N1bWVudC0+aWRlbnRpZmllcigp
IDogRG9jdW1lbnRJZGVudGlmaWVyIHsgfTsKIH0KIAorYm9vbCBBdWRpb0NvbnRleHQ6OmlzU3Vz
cGVuZGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWRvY3VtZW50KCkgfHwgZG9jdW1lbnQoKS0+
YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpIHx8IGRvY3VtZW50KCktPmFjdGl2ZURPTU9i
amVjdHNBcmVTdG9wcGVkKCk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpwYWdlTXV0ZWRTdGF0
ZURpZENoYW5nZSgpCit7CisgICAgaWYgKGRlc3RpbmF0aW9uTm9kZSgpICYmIGRvY3VtZW50KCkg
JiYgZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICBkZXN0aW5hdGlvbk5vZGUoKS0+c2V0TXV0
ZWQoZG9jdW1lbnQoKS0+cGFnZSgpLT5pc0F1ZGlvTXV0ZWQoKSk7Cit9CisKK3ZvaWQgQXVkaW9D
b250ZXh0OjptZWRpYUNhblN0YXJ0KERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlRf
VU5VU0VEKGRvY3VtZW50LCAmZG9jdW1lbnQgPT0gdGhpcy0+ZG9jdW1lbnQoKSk7CisgICAgcmVt
b3ZlQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVz
dHJpY3Rpb24pOworICAgIG1heVJlc3VtZVBsYXliYWNrKHRydWUpOworfQorCisjaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECitjb25zdCBMb2dnZXImIEF1ZGlvQ29udGV4dDo6bG9nZ2VyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gQmFzZUF1ZGlvQ29udGV4dDo6bG9nZ2VyKCk7Cit9CisjZW5kaWYK
KwogI2lmIEVOQUJMRShWSURFTykKIAogRXhjZXB0aW9uT3I8UmVmPE1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFFbGVtZW50U291cmNlKEhUTUxN
ZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IGY5YzEzODc1MzAwM2FiZDcxNjI2M2Q0NTRhMDUz
NTE4ZDMzMmQ4ZTkuLjYyNGExNmE0ZWUzNzc3YTI3MDNiZGRkMDk1MDk1NTNmZjYxYmQ3NmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaApAQCAt
MjgsNiArMjgsMTAgQEAKICNpbmNsdWRlICJBdWRpb0NvbnRleHRPcHRpb25zLmgiCiAjaW5jbHVk
ZSAiQmFzZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUgIkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5oIgorI2luY2x1ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIk1l
ZGlhUHJvZHVjZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbi5oIgorI2luY2x1
ZGUgIlZpc2liaWxpdHlDaGFuZ2VDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0zNSwxMSArMzksMTggQEAgY2xhc3MgRE9NV2luZG93OwogCiBzdHJ1Y3QgQXVkaW9UaW1lc3Rh
bXA7CiAKLWNsYXNzIEF1ZGlvQ29udGV4dCA6IHB1YmxpYyBCYXNlQXVkaW9Db250ZXh0IHsKK2Ns
YXNzIEF1ZGlvQ29udGV4dAorICAgIDogcHVibGljIEJhc2VBdWRpb0NvbnRleHQKKyAgICAsIHB1
YmxpYyBNZWRpYVByb2R1Y2VyCisgICAgLCBwdWJsaWMgTWVkaWFDYW5TdGFydExpc3RlbmVyCisg
ICAgLCBwcml2YXRlIFBsYXRmb3JtTWVkaWFTZXNzaW9uQ2xpZW50CisgICAgLCBwcml2YXRlIFZp
c2liaWxpdHlDaGFuZ2VDbGllbnQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQXVkaW9D
b250ZXh0KTsKIHB1YmxpYzoKICAgICAvLyBDcmVhdGUgYW4gQXVkaW9Db250ZXh0IGZvciByZW5k
ZXJpbmcgdG8gdGhlIGF1ZGlvIGhhcmR3YXJlLgogICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8
QXVkaW9Db250ZXh0Pj4gY3JlYXRlKERvY3VtZW50JiwgQXVkaW9Db250ZXh0T3B0aW9ucyYmID0g
eyB9KTsKKyAgICB+QXVkaW9Db250ZXh0KCk7CisKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBzZXREZWZhdWx0U2FtcGxlUmF0ZUZvclRlc3RpbmcoT3B0aW9uYWw8ZmxvYXQ+KTsKIAog
ICAgIHZvaWQgY2xvc2UoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYpOwpAQCAtNjUsMTMgKzc2
LDY2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKIAorICAgIC8vIFJl
c3RyaWN0aW9ucyB0byBjaGFuZ2UgZGVmYXVsdCBiZWhhdmlvcnMuCisgICAgZW51bSBCZWhhdmlv
clJlc3RyaWN0aW9uRmxhZ3MgeworICAgICAgICBOb1Jlc3RyaWN0aW9ucyA9IDAsCisgICAgICAg
IFJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbiA9IDEgPDwgMCwKKyAg
ICAgICAgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uID0gMSA8PCAx
LAorICAgIH07CisgICAgdHlwZWRlZiB1bnNpZ25lZCBCZWhhdmlvclJlc3RyaWN0aW9uczsKKyAg
ICBCZWhhdmlvclJlc3RyaWN0aW9ucyBiZWhhdmlvclJlc3RyaWN0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzdHJpY3Rpb25zOyB9CisgICAgdm9pZCBhZGRCZWhhdmlvclJlc3RyaWN0aW9uKEJl
aGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9uKSB7IG1fcmVzdHJpY3Rpb25zIHw9IHJlc3Ry
aWN0aW9uOyB9CisgICAgdm9pZCByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVz
dHJpY3Rpb25zIHJlc3RyaWN0aW9uKSB7IG1fcmVzdHJpY3Rpb25zICY9IH5yZXN0cmljdGlvbjsg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQXVkaW9Db250ZXh0KERvY3VtZW50JiwgY29u
c3QgQXVkaW9Db250ZXh0T3B0aW9ucyYgPSB7IH0pOwogICAgIEF1ZGlvQ29udGV4dChEb2N1bWVu
dCYsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIFJlZlB0cjxBdWRpb0J1ZmZlcj4mJiByZW5k
ZXJUYXJnZXQpOwogCisgICAgYm9vbCB3aWxsQmVnaW5QbGF5YmFjaygpOworCisjaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECisgICAgY29uc3QgTG9nZ2VyJiBsb2dnZXIoKSBjb25zdCBmaW5hbDsK
KyNlbmRpZgorCiBwcml2YXRlOgorICAgIHZvaWQgY29uc3RydWN0Q29tbW9uKCk7CisKKyAgICBi
b29sIHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkgY29uc3QgeyByZXR1cm4gIWlz
T2ZmbGluZUNvbnRleHQoKSAmJiBtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVVc2VyR2VzdHVyZUZv
ckF1ZGlvU3RhcnRSZXN0cmljdGlvbjsgfQorICAgIGJvb2wgcGFnZUNvbnNlbnRSZXF1aXJlZEZv
ckF1ZGlvU3RhcnQoKSBjb25zdCB7IHJldHVybiAhaXNPZmZsaW5lQ29udGV4dCgpICYmIG1fcmVz
dHJpY3Rpb25zICYgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uOyB9
CisKICAgICBib29sIHdpbGxQYXVzZVBsYXliYWNrKCk7CiAKKyAgICAvLyBNZWRpYVByb2R1Y2Vy
CisgICAgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG1lZGlhU3RhdGUoKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CisK
KyAgICAvLyBQbGF0Zm9ybU1lZGlhU2Vzc2lvbkNsaWVudAorICAgIFBsYXRmb3JtTWVkaWFTZXNz
aW9uOjpNZWRpYVR5cGUgbWVkaWFUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZv
cm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZTo6V2ViQXVkaW87IH0KKyAgICBQbGF0Zm9ybU1lZGlh
U2Vzc2lvbjo6TWVkaWFUeXBlIHByZXNlbnRhdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlOjpXZWJBdWRpbzsgfQorICAgIHZv
aWQgbWF5UmVzdW1lUGxheWJhY2soYm9vbCBzaG91bGRSZXN1bWUpIG92ZXJyaWRlOworICAgIHZv
aWQgc3VzcGVuZFBsYXliYWNrKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBjYW5SZWNlaXZlUmVtb3Rl
Q29udHJvbENvbW1hbmRzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
b2lkIGRpZFJlY2VpdmVSZW1vdGVDb250cm9sQ29tbWFuZChQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6
UmVtb3RlQ29udHJvbENvbW1hbmRUeXBlLCBjb25zdCBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UmVt
b3RlQ29tbWFuZEFyZ3VtZW50Kikgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBzdXBwb3J0c1NlZWtp
bmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkT3Zl
cnJpZGVCYWNrZ3JvdW5kUGxheWJhY2tSZXN0cmljdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6
SW50ZXJydXB0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIGNhblByb2R1Y2VBdWRpbygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBi
b29sIGlzU3VzcGVuZGVkKCkgY29uc3QgZmluYWw7CisgICAgRG9jdW1lbnRJZGVudGlmaWVyIGhv
c3RpbmdEb2N1bWVudElkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKKworICAgIC8vIE1lZGlhQ2Fu
U3RhcnRMaXN0ZW5lci4KKyAgICB2b2lkIG1lZGlhQ2FuU3RhcnQoRG9jdW1lbnQmKSBvdmVycmlk
ZTsKKworICAgIC8vIFZpc2liaWxpdHlDaGFuZ2VDbGllbnQKKyAgICB2b2lkIHZpc2liaWxpdHlT
dGF0ZUNoYW5nZWQoKSBmaW5hbDsKKworICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIHZvaWQg
c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZSgpIGZp
bmFsOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtTWVkaWFTZXNzaW9uPiBtX21lZGlh
U2Vzc2lvbjsKKworICAgIEJlaGF2aW9yUmVzdHJpY3Rpb25zIG1fcmVzdHJpY3Rpb25zIHsgTm9S
ZXN0cmljdGlvbnMgfTsKKwogICAgIC8vIFtbc3VzcGVuZGVkIGJ5IHVzZXJdXSBmbGFnIGluIHRo
ZSBzcGVjaWZpY2F0aW9uOgogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdWRpby8j
ZG9tLWF1ZGlvY29udGV4dC1zdXNwZW5kZWQtYnktdXNlci1zbG90CiAgICAgYm9vbCBtX3dhc1N1
c3BlbmRlZEJ5U2NyaXB0IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuY3BwCmluZGV4IDFmZGM2MTkwMWY1NmNhYzYz
OWIxNzg4YmRkMjE1OTdmOGNlMDUwMmIuLjNhMjE5ODRmOTI5MDhiYmY4NTc2ZTNmZGVhNGQxNWY4
YTlmYjczYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmFz
ZUF1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9C
YXNlQXVkaW9Db250ZXh0LmNwcApAQCAtNzUsNyArNzUsNiBAQAogI2luY2x1ZGUgIlBhbm5lck5v
ZGUuaCIKICNpbmNsdWRlICJQZXJpb2RpY1dhdmUuaCIKICNpbmNsdWRlICJQZXJpb2RpY1dhdmVP
cHRpb25zLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcmlwdFByb2Nlc3Nvck5vZGUu
aCIKICNpbmNsdWRlICJTdGVyZW9QYW5uZXJOb2RlLmgiCkBAIC0xMTEsOCArMTEwLDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoQmFzZUF1ZGlv
Q29udGV4dCk7CiAKLSNkZWZpbmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChmbXQsIC4uLikgUkVM
RUFTRV9MT0dfSUYoZG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5wYWdlKCkgJiYgZG9jdW1lbnQo
KS0+cGFnZSgpLT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgTWVkaWEsICIlcCAtIEJhc2VB
dWRpb0NvbnRleHQ6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQotICAgIAogYm9vbCBCYXNl
QXVkaW9Db250ZXh0Ojppc1N1cHBvcnRlZFNhbXBsZVJhdGUoZmxvYXQgc2FtcGxlUmF0ZSkKIHsK
ICAgICByZXR1cm4gc2FtcGxlUmF0ZSA+PSAzMDAwICYmIHNhbXBsZVJhdGUgPD0gMzg0MDAwOwpA
QCAtMTI4LDIyICsxMjUsMTUgQEAgQmFzZUF1ZGlvQ29udGV4dDo6QmFzZUF1ZGlvQ29udGV4dChE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEF1ZGlvQ29udGV4dE9wdGlvbnMKICAgICAsIG1fbG9n
SWRlbnRpZmllcih1bmlxdWVMb2dJZGVudGlmaWVyKCkpCiAjZW5kaWYKICAgICAsIG1fd29ya2xl
dChBdWRpb1dvcmtsZXQ6OmNyZWF0ZSgqdGhpcykpCi0gICAgLCBtX21lZGlhU2Vzc2lvbihQbGF0
Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hh
cmVkTWFuYWdlcigpLCAqdGhpcykpCiB7CiAgICAgLy8gQWNjb3JkaW5nIHRvIHNwZWMgQXVkaW9D
b250ZXh0IG11c3QgZGllIG9ubHkgYWZ0ZXIgcGFnZSBuYXZpZ2F0ZS4KICAgICAvLyBMZXRzIG1h
cmsgaXQgYXMgQWN0aXZlRE9NT2JqZWN0IHdpdGggcGVuZGluZyBhY3Rpdml0eSBhbmQgdW5tYXJr
IGl0IGluIGNsZWFyIG1ldGhvZC4KICAgICBtYWtlUGVuZGluZ0FjdGl2aXR5KCk7CiAKLSAgICBj
b25zdHJ1Y3RDb21tb24oKTsKKyAgICBGRlRGcmFtZTo6aW5pdGlhbGl6ZSgpOwogCiAgICAgbV9k
ZXN0aW5hdGlvbk5vZGUgPSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNyZWF0ZSgqdGhp
cywgY29udGV4dE9wdGlvbnMuc2FtcGxlUmF0ZSk7CiAKLSAgICAvLyBJbml0aWFsaXplIHRoZSBk
ZXN0aW5hdGlvbiBub2RlJ3MgbXV0ZWQgc3RhdGUgdG8gbWF0Y2ggdGhlIHBhZ2UncyBjdXJyZW50
IG11dGVkIHN0YXRlLgotICAgIHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCk7Ci0KLSAgICBkb2N1
bWVudC5hZGRBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKLSAgICBkb2N1bWVudC5yZWdpc3RlckZvclZp
c2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwotCiAgICAgLy8gVW5saWtlIE9m
ZmxpbmVBdWRpb0NvbnRleHQsIEF1ZGlvQ29udGV4dCBkb2VzIG5vdCByZXF1aXJlIGNhbGxpbmcg
cmVzdW1lKCkgdG8gc3RhcnQgcmVuZGVyaW5nLgogICAgIC8vIExhenkgaW5pdGlhbGl6YXRpb24g
c3RhcnRzIHJlbmRlcmluZyBzbyB3ZSBzY2hlZHVsZSBhIHRhc2sgaGVyZSB0byBtYWtlIHN1cmUg
bGF6eSBpbml0aWFsaXphdGlvbgogICAgIC8vIGVuZHMgdXAgaGFwcGVuaW5nLCBldmVuIGlmIG5v
IGF1ZGlvIG5vZGUgZ2V0cyBjb25zdHJ1Y3RlZC4KQEAgLTE2NCwzMCArMTU0LDE0IEBAIEJhc2VB
dWRpb0NvbnRleHQ6OkJhc2VBdWRpb0NvbnRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCB1bnNpZ25l
ZCBudW1iZXJPZkNoYW5uZWxzCiAjZW5kaWYKICAgICAsIG1fd29ya2xldChBdWRpb1dvcmtsZXQ6
OmNyZWF0ZSgqdGhpcykpCiAgICAgLCBtX2lzT2ZmbGluZUNvbnRleHQodHJ1ZSkKLSAgICAsIG1f
bWVkaWFTZXNzaW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpjcmVhdGUoUGxhdGZvcm1NZWRpYVNl
c3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCksICp0aGlzKSkKICAgICAsIG1fcmVuZGVyVGFy
Z2V0KFdURk1vdmUocmVuZGVyVGFyZ2V0KSkKIHsKLSAgICBjb25zdHJ1Y3RDb21tb24oKTsKKyAg
ICBGRlRGcmFtZTo6aW5pdGlhbGl6ZSgpOwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IGRlc3RpbmF0
aW9uIGZvciBvZmZsaW5lIHJlbmRlcmluZy4KICAgICBtX2Rlc3RpbmF0aW9uTm9kZSA9IE9mZmxp
bmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKCp0aGlzLCBudW1iZXJPZkNoYW5uZWxzLCBt
X3JlbmRlclRhcmdldC5jb3B5UmVmKCkpOwogfQogCi12b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmNv
bnN0cnVjdENvbW1vbigpCi17Ci0gICAgRkZURnJhbWU6OmluaXRpYWxpemUoKTsKLQotICAgIEFT
U0VSVChkb2N1bWVudCgpKTsKLSAgICBpZiAoZG9jdW1lbnQoKS0+YXVkaW9QbGF5YmFja1JlcXVp
cmVzVXNlckdlc3R1cmUoKSkKLSAgICAgICAgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJl
VXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwotICAgIGVsc2UKLSAgICAgICAg
bV9yZXN0cmljdGlvbnMgPSBOb1Jlc3RyaWN0aW9uczsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIGFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFy
dFJlc3RyaWN0aW9uKTsKLSNlbmRpZgotfQotCiBCYXNlQXVkaW9Db250ZXh0Ojp+QmFzZUF1ZGlv
Q29udGV4dCgpCiB7CiAjaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKQEAgLTIwMywxMSAr
MTc3LDYgQEAgQmFzZUF1ZGlvQ29udGV4dDo6fkJhc2VBdWRpb0NvbnRleHQoKQogICAgICAgICBt
X3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy5yZXNpemUobV9hdXRvbWF0aWNQdWxsTm9kZXMu
c2l6ZSgpKTsKICAgICBBU1NFUlQobV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuaXNFbXB0
eSgpKTsKICAgICAvLyBGSVhNRTogQ2FuIHdlIGFzc2VydCB0aGF0IG1fZGVmZXJyZWRCcmVha0Nv
bm5lY3Rpb25MaXN0IGlzIGVtcHR5PwotCi0gICAgaWYgKCFpc09mZmxpbmVDb250ZXh0KCkgJiYg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnJlbW92ZUF1
ZGlvUHJvZHVjZXIoKnRoaXMpOwotICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yVmlz
aWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7Ci0gICAgfQogfQogCiB2b2lkIEJh
c2VBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKCkKQEAgLTMzNiwyMiArMzA1LDYgQEAgdm9p
ZCBCYXNlQXVkaW9Db250ZXh0OjpzdG9wKCkKICAgICBjbGVhcigpOwogfQogCi12b2lkIEJhc2VB
dWRpb0NvbnRleHQ6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbikKLXsKLSAgICBpZiAoc3Rh
dGUoKSA9PSBTdGF0ZTo6UnVubmluZykgewotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YmVnaW5J
bnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OlBsYXliYWNrU3VzcGVuZGVkKTsKLSAg
ICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKLSAgICB9Ci19Ci0KLXZv
aWQgQmFzZUF1ZGlvQ29udGV4dDo6cmVzdW1lKCkKLXsKLSAgICBpZiAoc3RhdGUoKSA9PSBTdGF0
ZTo6SW50ZXJydXB0ZWQpIHsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmVuZEludGVycnVwdGlv
bihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWF5UmVzdW1lUGxheWluZyk7Ci0gICAgICAgIGRvY3Vt
ZW50KCktPnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7Ci0gICAgfQotfQotCiBjb25zdCBjaGFyKiBC
YXNlQXVkaW9Db250ZXh0OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKIHsKICAgICByZXR1
cm4gIkF1ZGlvQ29udGV4dCI7CkBAIC0zNjIsNDEgKzMxNSwxMSBAQCBEb2N1bWVudCogQmFzZUF1
ZGlvQ29udGV4dDo6ZG9jdW1lbnQoKSBjb25zdAogICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVu
dD4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIH0KIAotRG9jdW1lbnRJZGVudGlmaWVyIEJh
c2VBdWRpb0NvbnRleHQ6Omhvc3RpbmdEb2N1bWVudElkZW50aWZpZXIoKSBjb25zdAotewotICAg
IGF1dG8qIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk7Ci0gICAgcmV0dXJuIGRvY3VtZW50ID8gZG9jdW1lbnQtPmlkZW50aWZpZXIoKSA6IERv
Y3VtZW50SWRlbnRpZmllciB7IH07Ci19Ci0KIGZsb2F0IEJhc2VBdWRpb0NvbnRleHQ6OnNhbXBs
ZVJhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGlu
YXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkgOiBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBs
ZVJhdGUoKTsKIH0KIAotYm9vbCBCYXNlQXVkaW9Db250ZXh0Ojppc1N1c3BlbmRlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICFkb2N1bWVudCgpIHx8IGRvY3VtZW50KCktPmFjdGl2ZURPTU9iamVj
dHNBcmVTdXNwZW5kZWQoKSB8fCBkb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBl
ZCgpOwotfQotCi12b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQo
KQotewotICAgIC8vIERvIG5vdCBzdXNwZW5kIGlmIGF1ZGlvIGlzIGF1ZGlibGUuCi0gICAgaWYg
KCFkb2N1bWVudCgpIHx8IG1lZGlhU3RhdGUoKSA9PSBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdB
dWRpbyB8fCBtX2lzU3RvcFNjaGVkdWxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRv
Y3VtZW50KCktPmhpZGRlbigpKSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpSdW5u
aW5nKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ2aXNpYmlsaXR5U3Rh
dGVDaGFuZ2VkKCkgU3VzcGVuZGluZyBwbGF5YmFjayBhZnRlciBnb2luZyB0byB0aGUgYmFja2dy
b3VuZCIpOwotICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmJlZ2luSW50ZXJydXB0aW9uKFBs
YXRmb3JtTWVkaWFTZXNzaW9uOjpFbnRlcmluZ0JhY2tncm91bmQpOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkludGVycnVwdGVkKSB7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ2aXNpYmlsaXR5U3RhdGVDaGFuZ2Vk
KCkgUmVzdW1pbmcgcGxheWJhY2sgYWZ0ZXIgZW50ZXJpbmcgZm9yZWdyb3VuZCIpOwotICAgICAg
ICAgICAgbV9tZWRpYVNlc3Npb24tPmVuZEludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lv
bjo6TWF5UmVzdW1lUGxheWluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIGJvb2wgQmFzZUF1
ZGlvQ29udGV4dDo6d291bGRUYWludE9yaWdpbihjb25zdCBVUkwmIHVybCkgY29uc3QKIHsKICAg
ICBpZiAodXJsLnByb3RvY29sSXNEYXRhKCkpCkBAIC05OTMsNjQgKzkxNiw2IEBAIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIEJhc2VBdWRpb0NvbnRleHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdAogICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkRG9jdW1lbnRBbGxvd1dlYkF1ZGlvVG9BdXRv
UGxheShjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgaWYgKGRvY3VtZW50LnByb2Nl
c3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCkgfHwgZG9jdW1lbnQuaXNDYXB0dXJpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGRvY3VtZW50LnF1aXJrcygpLnNob3VsZEF1
dG9wbGF5V2ViQXVkaW9Gb3JBcmJpdHJhcnlVc2VyR2VzdHVyZSgpICYmIGRvY3VtZW50LnRvcERv
Y3VtZW50KCkuaGFzSGFkVXNlckludGVyYWN0aW9uKCk7Ci19Ci0KLWJvb2wgQmFzZUF1ZGlvQ29u
dGV4dDo6d2lsbEJlZ2luUGxheWJhY2soKQotewotICAgIGF1dG8qIGRvY3VtZW50ID0gdGhpcy0+
ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAodXNlckdlc3R1cmVSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSkgewotICAgICAgICBp
ZiAoIXNob3VsZERvY3VtZW50QWxsb3dXZWJBdWRpb1RvQXV0b1BsYXkoKmRvY3VtZW50KSkgewot
ICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAicmV0dXJuaW5nIGZhbHNlLCBu
b3QgcHJvY2Vzc2luZyB1c2VyIGdlc3R1cmUgb3IgY2FwdHVyaW5nIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlv
bihCYXNlQXVkaW9Db250ZXh0OjpSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0UmVzdHJp
Y3Rpb24pOwotICAgIH0KLQotICAgIGlmIChwYWdlQ29uc2VudFJlcXVpcmVkRm9yQXVkaW9TdGFy
dCgpKSB7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOwotICAgICAgICBp
ZiAocGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVu
dC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKLSAgICAgICAgICAgIEFMV0FZU19M
T0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyBmYWxzZSwgcGFnZSBkb2Vzbid0IGFsbG93IG1l
ZGlhIHRvIHN0YXJ0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihCYXNlQXVkaW9Db250ZXh0OjpSZXF1aXJl
UGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwotICAgIH0KLSAgICAKLSAgICBh
dXRvIHdpbGxCZWdpbiA9IG1fbWVkaWFTZXNzaW9uLT5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygp
OwotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyAiLCB3aWxsQmVnaW4p
OwotICAgIAotICAgIHJldHVybiB3aWxsQmVnaW47Ci19Ci0KLXZvaWQgQmFzZUF1ZGlvQ29udGV4
dDo6bWVkaWFDYW5TdGFydChEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUX1VOVVNF
RChkb2N1bWVudCwgJmRvY3VtZW50ID09IHRoaXMtPmRvY3VtZW50KCkpOwotICAgIHJlbW92ZUJl
aGF2aW9yUmVzdHJpY3Rpb24oQmFzZUF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25zZW50Rm9y
QXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKLSAgICBtYXlSZXN1bWVQbGF5YmFjayh0cnVlKTsKLX0K
LQotTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIEJhc2VBdWRpb0NvbnRleHQ6Om1lZGlh
U3RhdGUoKSBjb25zdAotewotICAgIGlmICghbV9pc1N0b3BTY2hlZHVsZWQgJiYgbV9kZXN0aW5h
dGlvbk5vZGUgJiYgbV9kZXN0aW5hdGlvbk5vZGUtPmlzUGxheWluZ0F1ZGlvKCkpCi0gICAgICAg
IHJldHVybiBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdBdWRpbzsKLQotICAgIHJldHVybiBNZWRp
YVByb2R1Y2VyOjpJc05vdFBsYXlpbmc7Ci19Ci0KLXZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6cGFn
ZU11dGVkU3RhdGVEaWRDaGFuZ2UoKQotewotICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9kZSAmJiBk
b2N1bWVudCgpICYmIGRvY3VtZW50KCktPnBhZ2UoKSkKLSAgICAgICAgbV9kZXN0aW5hdGlvbk5v
ZGUtPnNldE11dGVkKGRvY3VtZW50KCktPnBhZ2UoKS0+aXNBdWRpb011dGVkKCkpOwotfQotCiB2
b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmlzUGxheWluZ0F1ZGlvRGlkQ2hhbmdlKCkKIHsKICAgICAv
LyBNYWtlIHN1cmUgdG8gY2FsbCBEb2N1bWVudDo6dXBkYXRlSXNQbGF5aW5nTWVkaWEoKSBvbiB0
aGUgbWFpbiB0aHJlYWQsIHNpbmNlCkBAIC0xMTIzLDQ1ICs5ODgsNiBAQCB2b2lkIEJhc2VBdWRp
b0NvbnRleHQ6OmRpZFN1c3BlbmRSZW5kZXJpbmcoc2l6ZV90KQogICAgIHNldFN0YXRlKFN0YXRl
OjpTdXNwZW5kZWQpOwogfQogCi12b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnN1c3BlbmRQbGF5YmFj
aygpCi17Ci0gICAgaWYgKCFtX2Rlc3RpbmF0aW9uTm9kZSB8fCBtX3N0YXRlID09IFN0YXRlOjpD
bG9zZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpTdXNw
ZW5kZWQpIHsKLSAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9uLT5zdGF0ZSgpID09IFBsYXRmb3Jt
TWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZCkKLSAgICAgICAgICAgIHNldFN0YXRlKFN0YXRlOjpJ
bnRlcnJ1cHRlZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsYXp5SW5pdGlhbGl6
ZSgpOwotCi0gICAgbV9kZXN0aW5hdGlvbk5vZGUtPnN1c3BlbmQoW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICBib29sIGludGVycnVwdGVkID0gbV9tZWRp
YVNlc3Npb24tPnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGVkOwot
ICAgICAgICBzZXRTdGF0ZShpbnRlcnJ1cHRlZCA/IFN0YXRlOjpJbnRlcnJ1cHRlZCA6IFN0YXRl
OjpTdXNwZW5kZWQpOwotICAgIH0pOwotfQotCi12b2lkIEJhc2VBdWRpb0NvbnRleHQ6Om1heVJl
c3VtZVBsYXliYWNrKGJvb2wgc2hvdWxkUmVzdW1lKQotewotICAgIGlmICghbV9kZXN0aW5hdGlv
bk5vZGUgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkIHx8IG1fc3RhdGUgPT0gU3RhdGU6OlJ1
bm5pbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2hvdWxkUmVzdW1lKSB7Ci0gICAg
ICAgIHNldFN0YXRlKFN0YXRlOjpTdXNwZW5kZWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCF3aWxsQmVnaW5QbGF5YmFjaygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBs
YXp5SW5pdGlhbGl6ZSgpOwotCi0gICAgbV9kZXN0aW5hdGlvbk5vZGUtPnJlc3VtZShbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgIHNldFN0YXRlKFN0YXRl
OjpSdW5uaW5nKTsKLSAgICB9KTsKLX0KLQogdm9pZCBCYXNlQXVkaW9Db250ZXh0Ojpwb3N0VGFz
ayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiB0YXNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VB
dWRpb0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlv
Q29udGV4dC5oCmluZGV4IDY1ZmM4ZjkwMGYyMTY5ZmNiNTYwNTJmZTM2YzM0YjkxMjg0N2ExNTgu
LmIzODM3MzMxN2Y3NDEwZjVhZTE2ZmYyNzRlNjZlMzAzMzRjNjA4Y2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5oCkBAIC0zNCwx
MyArMzQsOSBAQAogI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCiAjaW5jbHVkZSAi
RXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgotI2luY2x1
ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIK
ICNpbmNsdWRlICJPc2NpbGxhdG9yVHlwZS5oIgogI2luY2x1ZGUgIlBlcmlvZGljV2F2ZUNvbnN0
cmFpbnRzLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb24uaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiVmlzaWJpbGl0eUNoYW5nZUNsaWVu
dC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBlcy5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0Zsb2F0MzJBcnJheS5oPgogI2luY2x1ZGUgPGF0b21pYz4KQEAgLTk5
LDIxICs5NSwxNSBAQCBjbGFzcyBCYXNlQXVkaW9Db250ZXh0CiAgICAgOiBwdWJsaWMgQWN0aXZl
RE9NT2JqZWN0CiAgICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmFzZUF1ZGlvQ29u
dGV4dD4KICAgICAsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhCi0gICAgLCBwdWJs
aWMgTWVkaWFDYW5TdGFydExpc3RlbmVyCi0gICAgLCBwdWJsaWMgTWVkaWFQcm9kdWNlcgorICAg
ICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEJhc2VBdWRpb0NvbnRleHQ+CiAjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECiAgICAgLCBwdWJsaWMgTG9nZ2VySGVscGVyCiAjZW5kaWYKLSAgICAsIHBy
aXZhdGUgUGxhdGZvcm1NZWRpYVNlc3Npb25DbGllbnQKLSAgICAsIHByaXZhdGUgVmlzaWJpbGl0
eUNoYW5nZUNsaWVudAogewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQmFzZUF1ZGlvQ29u
dGV4dCk7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QmFzZUF1ZGlvQ29udGV4dCgpOwogCi0gICAg
dXNpbmcgV2Vha1ZhbHVlVHlwZSA9IE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcjo6V2Vha1ZhbHVlVHlw
ZTsKLSAgICB1c2luZyBNZWRpYUNhblN0YXJ0TGlzdGVuZXI6OndlYWtQdHJGYWN0b3J5OwotCiAg
ICAgLy8gUmVjb25jaWxlIHJlZi9kZXJlZiB3aGljaCBhcmUgZGVmaW5lZCBib3RoIGluIFRocmVh
ZFNhZmVSZWZDb3VudGVkIGFuZCBFdmVudFRhcmdldC4KICAgICB1c2luZyBUaHJlYWRTYWZlUmVm
Q291bnRlZDo6cmVmOwogICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkOjpkZXJlZjsKQEAg
LTEyNCw4ICsxMTQsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc09mZmxpbmVDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9pc09mZmxpbmVDb250ZXh0OyB9CiAgICAgdmlydHVhbCBib29sIGlzV2Vi
S2l0QXVkaW9Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIERvY3VtZW50
SWRlbnRpZmllciBob3N0aW5nRG9jdW1lbnRJZGVudGlmaWVyKCkgY29uc3QgZmluYWw7Ci0KICAg
ICBBdWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRpb24oKSB7IHJldHVybiBtX2Rlc3RpbmF0
aW9uTm9kZS5nZXQoKTsgfQogICAgIHNpemVfdCBjdXJyZW50U2FtcGxlRnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50U2Ft
cGxlRnJhbWUoKSA6IDA7IH0KICAgICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCB7IHJldHVy
biBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50VGltZSgpIDog
MC47IH0KQEAgLTI1OSwyMyArMjQ3LDEyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB1bnNpZ25l
ZCBzX2hhcmR3YXJlQ29udGV4dENvdW50OwogCi0gICAgLy8gUmVzdHJpY3Rpb25zIHRvIGNoYW5n
ZSBkZWZhdWx0IGJlaGF2aW9ycy4KLSAgICBlbnVtIEJlaGF2aW9yUmVzdHJpY3Rpb25GbGFncyB7
Ci0gICAgICAgIE5vUmVzdHJpY3Rpb25zID0gMCwKLSAgICAgICAgUmVxdWlyZVVzZXJHZXN0dXJl
Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uID0gMSA8PCAwLAotICAgICAgICBSZXF1aXJlUGFnZUNv
bnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24gPSAxIDw8IDEsCi0gICAgfTsKLSAgICB0eXBl
ZGVmIHVuc2lnbmVkIEJlaGF2aW9yUmVzdHJpY3Rpb25zOwotICAgIEJlaGF2aW9yUmVzdHJpY3Rp
b25zIGJlaGF2aW9yUmVzdHJpY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9yZXN0cmljdGlvbnM7
IH0KLSAgICB2b2lkIGFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oQmVoYXZpb3JSZXN0cmljdGlvbnMg
cmVzdHJpY3Rpb24pIHsgbV9yZXN0cmljdGlvbnMgfD0gcmVzdHJpY3Rpb247IH0KLSAgICB2b2lk
IHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQmVoYXZpb3JSZXN0cmljdGlvbnMgcmVzdHJpY3Rp
b24pIHsgbV9yZXN0cmljdGlvbnMgJj0gfnJlc3RyaWN0aW9uOyB9Ci0KICAgICB2b2lkIGlzUGxh
eWluZ0F1ZGlvRGlkQ2hhbmdlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbm9kZVdpbGxCZWdpblBs
YXliYWNrKCkgeyB9CiAKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBjb25zdCBMb2dn
ZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9CisgICAg
Y29uc3QgTG9nZ2VyJiBsb2dnZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvZ2dlci5n
ZXQoKTsgfQogICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KICAgICBXVEZMb2dDaGFubmVsJiBsb2dDaGFubmVsKCkg
Y29uc3QgZmluYWw7CiAgICAgY29uc3Qgdm9pZCogbmV4dEF1ZGlvTm9kZUxvZ0lkZW50aWZpZXIo
KSB7IHJldHVybiBjaGlsZExvZ0lkZW50aWZpZXIobV9sb2dJZGVudGlmaWVyLCArK21fbmV4dEF1
ZGlvTm9kZUlkZW50aWZpZXIpOyB9CkBAIC0zMzMsOCArMzEwLDYgQEAgcHJvdGVjdGVkOgogCiAg
ICAgQXVkaW9EZXN0aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9uTm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVzdGluYXRpb25Ob2RlLmdldCgpOyB9CiAKLSAgICBib29sIHdpbGxCZWdpblBsYXliYWNr
KCk7Ci0KICAgICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7CiAKICNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKQEAgLTM0NiwyOSArMzIxLDE1IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hPZmZsaW5lUmVuZGVyaW5nKEV4Y2VwdGlvbk9yPFJlZjxBdWRpb0J1
ZmZlcj4+JiYpIHsgfQogCi0gICAgYm9vbCB1c2VyR2VzdHVyZVJlcXVpcmVkRm9yQXVkaW9TdGFy
dCgpIGNvbnN0IHsgcmV0dXJuICFpc09mZmxpbmVDb250ZXh0KCkgJiYgbV9yZXN0cmljdGlvbnMg
JiBSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb247IH0KLSAgICBib29s
IHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkgY29uc3QgeyByZXR1cm4gIWlzT2Zm
bGluZUNvbnRleHQoKSAmJiBtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVQYWdlQ29uc2VudEZvckF1
ZGlvU3RhcnRSZXN0cmljdGlvbjsgfQotCi0gICAgUGxhdGZvcm1NZWRpYVNlc3Npb24qIG1lZGlh
U2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFTZXNzaW9uLmdldCgpOyB9CiBwcml2YXRl
OgotICAgIHZvaWQgY29uc3RydWN0Q29tbW9uKCk7Ci0KICAgICB2b2lkIGNsZWFyKCk7CiAKICAg
ICB2b2lkIHNjaGVkdWxlTm9kZURlbGV0aW9uKCk7CiAKLSAgICB2b2lkIG1lZGlhQ2FuU3RhcnQo
RG9jdW1lbnQmKSBvdmVycmlkZTsKLQogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdm9pZCBkaXNw
YXRjaEV2ZW50KEV2ZW50JikgZmluYWw7CiAKLSAgICAvLyBNZWRpYVByb2R1Y2VyCi0gICAgTWVk
aWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG1lZGlhU3RhdGUoKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBB
Y3RpdmVET01PYmplY3QgQVBJLgotICAgIHZvaWQgc3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9u
KSBmaW5hbDsKLSAgICB2b2lkIHJlc3VtZSgpIGZpbmFsOwogICAgIHZvaWQgc3RvcCgpIG92ZXJy
aWRlOwogICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlk
ZTsKIApAQCAtMzc2LDIwICszMzcsNiBAQCBwcml2YXRlOgogICAgIC8vIE1ha2Ugc3VyZSB0byBk
ZXJlZmVyZW5jZSB0aGVtIGhlcmUuCiAgICAgdm9pZCBkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2Rl
cygpOwogCi0gICAgLy8gUGxhdGZvcm1NZWRpYVNlc3Npb25DbGllbnQKLSAgICBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbjo6TWVkaWFUeXBlIG1lZGlhVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGU6OldlYkF1ZGlvOyB9Ci0gICAgUGxhdGZv
cm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZSBwcmVzZW50YXRpb25UeXBlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZTo6V2ViQXVkaW87IH0K
LSAgICB2b2lkIG1heVJlc3VtZVBsYXliYWNrKGJvb2wgc2hvdWxkUmVzdW1lKSBvdmVycmlkZTsK
LSAgICB2b2lkIHN1c3BlbmRQbGF5YmFjaygpIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUmVjZWl2
ZVJlbW90ZUNvbnRyb2xDb21tYW5kcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVtb3RlQ29udHJvbENvbW1hbmQoUGxhdGZvcm1NZWRpYVNl
c3Npb246OlJlbW90ZUNvbnRyb2xDb21tYW5kVHlwZSwgY29uc3QgUGxhdGZvcm1NZWRpYVNlc3Np
b246OlJlbW90ZUNvbW1hbmRBcmd1bWVudCopIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgc3VwcG9y
dHNTZWVraW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNo
b3VsZE92ZXJyaWRlQmFja2dyb3VuZFBsYXliYWNrUmVzdHJpY3Rpb24oUGxhdGZvcm1NZWRpYVNl
c3Npb246OkludGVycnVwdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgYm9vbCBjYW5Qcm9kdWNlQXVkaW8oKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
Ci0gICAgYm9vbCBpc1N1c3BlbmRlZCgpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCB2aXNpYmls
aXR5U3RhdGVDaGFuZ2VkKCkgZmluYWw7Ci0KICAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9TdW1t
aW5nSnVuY3Rpb25zKCk7CiAgICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKTsK
IApAQCAtNDM4LDggKzM4NSw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEF1ZGlvTm9kZSo+IG1f
ZGVmZXJyZWRCcmVha0Nvbm5lY3Rpb25MaXN0OwogICAgIFZlY3RvcjxWZWN0b3I8RE9NUHJvbWlz
ZURlZmVycmVkPHZvaWQ+Pj4gbV9zdGF0ZVJlYWN0aW9uczsKIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxQbGF0Zm9ybU1lZGlhU2Vzc2lvbj4gbV9tZWRpYVNlc3Npb247Ci0KICAgICBSZWZQdHI8QXVk
aW9CdWZmZXI+IG1fcmVuZGVyVGFyZ2V0OwogICAgIFJlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uTm9k
ZT4gbV9kZXN0aW5hdGlvbk5vZGU7CiAgICAgUmVmUHRyPEF1ZGlvTGlzdGVuZXI+IG1fbGlzdGVu
ZXI7CkBAIC00NjIsOCArNDA3LDYgQEAgcHJpdmF0ZToKICAgICAvLyBOdW1iZXIgb2YgQXVkaW9C
dWZmZXJTb3VyY2VOb2RlcyB0aGF0IGFyZSBhY3RpdmUgKHBsYXlpbmcpLgogICAgIHN0ZDo6YXRv
bWljPGludD4gbV9hY3RpdmVTb3VyY2VDb3VudCB7IDAgfTsKIAotICAgIEJlaGF2aW9yUmVzdHJp
Y3Rpb25zIG1fcmVzdHJpY3Rpb25zIHsgTm9SZXN0cmljdGlvbnMgfTsKLQogICAgIFN0YXRlIG1f
c3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07CiAgICAgUmVmUHRyPFBlbmRpbmdBY3Rpdml0eTxC
YXNlQXVkaW9Db250ZXh0Pj4gbV9wZW5kaW5nQWN0aXZpdHk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQuY3BwCmluZGV4
IDI0ZmEwNDM5OTRiOGY1YWFlOGVhNDdlMDdiMzgzZmNhOGI1MTUyMmUuLmU3NGRhODQ0MGVhOGRm
NjY5MGNlN2Y1MWNkMGE1YzU4MWQxZmI3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db250ZXh0LmNwcApAQCAtOTksMTEgKzk5
LDYgQEAgdm9pZCBPZmZsaW5lQXVkaW9Db250ZXh0OjpzdGFydE9mZmxpbmVSZW5kZXJpbmcoUmVm
PERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKCF3aWxsQmVnaW5QbGF5YmFjaygpKSB7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIlJlZnVzaW5nIHRvIHN0YXJ0IHJlbmRlcmlu
ZyBmb3Igc2VjdXJpdHkgcmVhc29ucyIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBpZiAoIXJlbmRlclRhcmdldCgpKSB7CiAgICAgICAgIHByb21pc2UtPnJlamVjdChFeGNlcHRp
b24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBjcmVhdGUgYXVkaW8gYnVmZmVyIl9z
IH0pOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5k
ZXggYTA5MzA1ZjI4NGNlY2E2NWQ2ODQ2MTg5ZTk3ZGRhYjc3NTUxMDZkNi4uNGE1ZGM1M2YyZWZl
MjZiZGI0MDNjMjUwMzk5MGMyOWVjZDRhYjE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcApAQCAtNDI4NCwxMCArNDI4NCwxMCBAQCBib29sIEludGVybmFsczo6ZWxlbWVudElz
QmxvY2tpbmdEaXNwbGF5U2xlZXAoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkgY29uc3QKICNl
bmRpZiAvLyBFTkFCTEUoVklERU8pCiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQotdm9pZCBJbnRl
cm5hbHM6OnNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyhjb25zdCBWYXJpYW50PFJlZlB0cjxC
YXNlQXVkaW9Db250ZXh0PiwgUmVmUHRyPFdlYktpdEF1ZGlvQ29udGV4dD4+JiBjb250ZXh0VmFy
aWFudCwgU3RyaW5nVmlldyByZXN0cmljdGlvbnNTdHJpbmcpCit2b2lkIEludGVybmFsczo6c2V0
QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKGNvbnN0IFZhcmlhbnQ8UmVmUHRyPEF1ZGlvQ29udGV4
dD4sIFJlZlB0cjxXZWJLaXRBdWRpb0NvbnRleHQ+PiYgY29udGV4dFZhcmlhbnQsIFN0cmluZ1Zp
ZXcgcmVzdHJpY3Rpb25zU3RyaW5nKQogewotICAgIFJlZlB0cjxCYXNlQXVkaW9Db250ZXh0PiBj
b250ZXh0OwotICAgIHN3aXRjaE9uKGNvbnRleHRWYXJpYW50LCBbJl0oUmVmUHRyPEJhc2VBdWRp
b0NvbnRleHQ+IGVudHJ5KSB7CisgICAgUmVmUHRyPEF1ZGlvQ29udGV4dD4gY29udGV4dDsKKyAg
ICBzd2l0Y2hPbihjb250ZXh0VmFyaWFudCwgWyZdKFJlZlB0cjxBdWRpb0NvbnRleHQ+IGVudHJ5
KSB7CiAgICAgICAgIGNvbnRleHQgPSBlbnRyeTsKICAgICB9LCBbJl0oUmVmUHRyPFdlYktpdEF1
ZGlvQ29udGV4dD4gZW50cnkpIHsKICAgICAgICAgY29udGV4dCA9IGVudHJ5OwpAQCAtNDI5Niwx
NSArNDI5NiwxNSBAQCB2b2lkIEludGVybmFsczo6c2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25z
KGNvbnN0IFZhcmlhbnQ8UmVmUHRyPEJhc2VBdWRpb0NvbnRleAogICAgIGF1dG8gcmVzdHJpY3Rp
b25zID0gY29udGV4dC0+YmVoYXZpb3JSZXN0cmljdGlvbnMoKTsKICAgICBjb250ZXh0LT5yZW1v
dmVCZWhhdmlvclJlc3RyaWN0aW9uKHJlc3RyaWN0aW9ucyk7CiAKLSAgICByZXN0cmljdGlvbnMg
PSBCYXNlQXVkaW9Db250ZXh0OjpOb1Jlc3RyaWN0aW9uczsKKyAgICByZXN0cmljdGlvbnMgPSBB
dWRpb0NvbnRleHQ6Ok5vUmVzdHJpY3Rpb25zOwogCiAgICAgZm9yIChTdHJpbmdWaWV3IHJlc3Ry
aWN0aW9uU3RyaW5nIDogcmVzdHJpY3Rpb25zU3RyaW5nLnNwbGl0KCcsJykpIHsKICAgICAgICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHJlc3RyaWN0aW9uU3RyaW5nLCAibm9y
ZXN0cmljdGlvbnMiKSkKLSAgICAgICAgICAgIHJlc3RyaWN0aW9ucyB8PSBCYXNlQXVkaW9Db250
ZXh0OjpOb1Jlc3RyaWN0aW9uczsKKyAgICAgICAgICAgIHJlc3RyaWN0aW9ucyB8PSBBdWRpb0Nv
bnRleHQ6Ok5vUmVzdHJpY3Rpb25zOwogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UocmVzdHJpY3Rpb25TdHJpbmcsICJyZXF1aXJldXNlcmdlc3R1cmVmb3JhdWRpb3N0
YXJ0IikpCi0gICAgICAgICAgICByZXN0cmljdGlvbnMgfD0gQmFzZUF1ZGlvQ29udGV4dDo6UmVx
dWlyZVVzZXJHZXN0dXJlRm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uOworICAgICAgICAgICAgcmVz
dHJpY3Rpb25zIHw9IEF1ZGlvQ29udGV4dDo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yQXVkaW9TdGFy
dFJlc3RyaWN0aW9uOwogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
cmVzdHJpY3Rpb25TdHJpbmcsICJyZXF1aXJlcGFnZWNvbnNlbnRmb3JhdWRpb3N0YXJ0IikpCi0g
ICAgICAgICAgICByZXN0cmljdGlvbnMgfD0gQmFzZUF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VD
b25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uOworICAgICAgICAgICAgcmVzdHJpY3Rpb25z
IHw9IEF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0
aW9uOwogICAgIH0KICAgICBjb250ZXh0LT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKHJlc3RyaWN0
aW9ucyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5o
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCBhMTZmOTUyZjE1NTAw
MWJkNjM1MmFlNTA5N2FkNjg2NmY0ODdhMjQ1Li5kNzQzN2NhNDljYjYyOGZkZWQzNGZmN2RiNWU3
ZDMyNDM3MDY4NzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTQ4LDggKzQ4
LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQW5pbWF0aW9uVGltZWxpbmU7Citj
bGFzcyBBdWRpb0NvbnRleHQ7CiBjbGFzcyBBdWRpb1RyYWNrOwotY2xhc3MgQmFzZUF1ZGlvQ29u
dGV4dDsKIGNsYXNzIENhY2hlU3RvcmFnZUNvbm5lY3Rpb247CiBjbGFzcyBET01SZWN0OwogY2xh
c3MgRE9NUmVjdExpc3Q7CkBAIC02NjksNyArNjY5LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoV0VCX0FVRElPKQotICAgIHZvaWQgc2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25z
KGNvbnN0IFZhcmlhbnQ8UmVmUHRyPEJhc2VBdWRpb0NvbnRleHQ+LCBSZWZQdHI8V2ViS2l0QXVk
aW9Db250ZXh0Pj4mLCBTdHJpbmdWaWV3IHJlc3RyaWN0aW9uc1N0cmluZyk7CisgICAgdm9pZCBz
ZXRBdWRpb0NvbnRleHRSZXN0cmljdGlvbnMoY29uc3QgVmFyaWFudDxSZWZQdHI8QXVkaW9Db250
ZXh0PiwgUmVmUHRyPFdlYktpdEF1ZGlvQ29udGV4dD4+JiwgU3RyaW5nVmlldyByZXN0cmljdGlv
bnNTdHJpbmcpOwogICAgIHZvaWQgdXNlTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYSgpOwogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCBhM2Y0NTZlMDg5Zjdi
ZmExZmYxYTczYWUzNWQ0N2E0Y2I5YzE5NDExLi40NTA3MTIzY2I1ZjFhZmM0M2E1OTNiYzIyM2Nj
MzNjYWIyZWMyYTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC02OTEs
NyArNjkxLDcgQEAgZW51bSBDb250ZW50U2l6ZUNhdGVnb3J5IHsKICAgICBbQ29uZGl0aW9uYWw9
VklERU8sIE1heVRocm93RXhjZXB0aW9uXSB1bmRlZmluZWQgc2V0TWVkaWFTZXNzaW9uUmVzdHJp
Y3Rpb25zKERPTVN0cmluZyBtZWRpYVR5cGUsIERPTVN0cmluZyByZXN0cmljdGlvbnMpOwogICAg
IFtDb25kaXRpb25hbD1WSURFTywgTWF5VGhyb3dFeGNlcHRpb25dIERPTVN0cmluZyBtZWRpYVNl
c3Npb25SZXN0cmljdGlvbnMoRE9NU3RyaW5nIG1lZGlhVHlwZSk7CiAgICAgW0NvbmRpdGlvbmFs
PVZJREVPXSB1bmRlZmluZWQgc2V0TWVkaWFFbGVtZW50UmVzdHJpY3Rpb25zKEhUTUxNZWRpYUVs
ZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIHJlc3RyaWN0aW9ucyk7Ci0gICAgW0NvbmRpdGlvbmFs
PVdFQl9BVURJT10gdW5kZWZpbmVkIHNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucygoQmFzZUF1
ZGlvQ29udGV4dCBvciBXZWJLaXRBdWRpb0NvbnRleHQpIGNvbnRleHQsIERPTVN0cmluZyByZXN0
cmljdGlvbnMpOworICAgIFtDb25kaXRpb25hbD1XRUJfQVVESU9dIHVuZGVmaW5lZCBzZXRBdWRp
b0NvbnRleHRSZXN0cmljdGlvbnMoKEF1ZGlvQ29udGV4dCBvciBXZWJLaXRBdWRpb0NvbnRleHQp
IGNvbnRleHQsIERPTVN0cmluZyByZXN0cmljdGlvbnMpOwogICAgIFtDb25kaXRpb25hbD1WSURF
TywgTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCBwb3N0UmVtb3RlQ29udHJvbENvbW1hbmQo
RE9NU3RyaW5nIGNvbW1hbmQsIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhcmd1bWVudCA9
IDApOwogICAgIFtDb25kaXRpb25hbD1XSVJFTEVTU19QTEFZQkFDS19UQVJHRVRdIHVuZGVmaW5l
ZCBzZXRNb2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckVuYWJsZWQoYm9vbGVhbiBlbmFibGVk
KTsKICAgICBbQ29uZGl0aW9uYWw9V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VULCBNYXlUaHJvd0V4
Y2VwdGlvbl0gdW5kZWZpbmVkIHNldE1vY2tNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyU3RhdGUo
RE9NU3RyaW5nIGRldmljZU5hbWUsIERPTVN0cmluZyBkZXZpY2VTdGF0ZSk7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjRh
MWRhMzZhNGZhMGY0NWRkMGIyMDRlODkwODIyYjkzNTQ0YmIxZC4uN2ZhNmUxY2JjZmU1MTMzNDhi
MzdlMzA4Y2VhNGQ2N2FhMzhlOTVkMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIwLTEwLTE1
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBldmVuIG1v
cmUgQXVkaW9Db250ZXh0LXNwZWNpZmljIGxvZ2ljIG91dCBvZiBCYXNlQXVkaW9Db250ZXh0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc4MDMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGVz
dCB0aGF0IHdhcyB0cnlpbmcgdG8gc2V0IHRoZSBhdXRvcGxheSByZXN0cmljdGlvbnMgb24gYW4g
T2ZmbGluZUF1ZGlvQ29udGV4dAorICAgICAgICB0byBtYWtlIHN1cmUgdGhleSBkaWQgbm90IGFw
cGx5LiBOb3cgdGhhdCB0aGUgYXV0b3BsYXkgcmVzdHJpY3Rpb25zIGFyZSBvbiBBdWRpb0NvbnRl
eHQKKyAgICAgICAgaW5zdGVhZCBvZiBCYXNlQXVkaW9Db250ZXh0LCB0aGV5IGRlZmluaXRlbHkg
ZG8gbm90IGFwcGx5IHRvIE9mZmxpbmVBdWRpb0NvbnRleHQgYW5kIGl0CisgICAgICAgIGlzIG5v
dCBldmVuIHBvc3NpYmxlIHRvIHNldCB0aGUgcmVzdHJpY3Rpb25zIG9uIGFuIE9mZmxpbmVBdWRp
b0NvbnRleHQuIEkgdXBkYXRlZCB0aGUKKyAgICAgICAgdGVzdCB0byB1c2Ugd2Via2l0T2ZmbGlu
ZUF1ZGlvQ29udGV4dCB3aGVuIGF2YWlsYWJsZSBzaW5jZSBXZWJLaXRPZmZsaW5lQXVkaW9Db250
ZXh0CisgICAgICAgIGRvZXMgaW5oZXJpdCBXZWJLaXRBdWRpb0NvbnRleHQuCisKKyAgICAgICAg
KiB3ZWJhdWRpby9vZmZsaW5lYXVkaW9jb250ZXh0LXJlc3RyaWN0aW9uLmh0bWw6CisKIDIwMjAt
MTAtMTUgIENhcmxvcyBBbGJlcnRvIExvcGV6IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW1dQRV0gUmViYXNlbGluZSBhZnRlciByMjY4NTIwCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9vZmZsaW5lYXVkaW9jb250ZXh0LXJlc3RyaWN0aW9uLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9vZmZsaW5lYXVkaW9jb250ZXh0LXJlc3RyaWN0aW9uLmh0bWwK
aW5kZXggM2VjMTQ2NWU3YmE5NGZmMDI1NDU4YWJlMGY4ODE4MjU3NzhkOGM1NS4uNDQ0NzU4ODcx
ZDE2OTlkZWEyYjkzNjRlOTczMjE3MTM0NjUwMWQwOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vb2ZmbGluZWF1ZGlvY29udGV4dC1yZXN0cmljdGlvbi5odG1sCisrKyBiL0xheW91
dFRlc3RzL3dlYmF1ZGlvL29mZmxpbmVhdWRpb2NvbnRleHQtcmVzdHJpY3Rpb24uaHRtbApAQCAt
MjAsOSArMjAsMTQgQEAgdmFyIGNhbGxlZFJlc3VtZVdpdGhVc2VyR2VzdHVyZSA9IGZhbHNlOwog
ZnVuY3Rpb24gcnVuVGVzdCgpIHsKICAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CiAK
LSAgICBjb250ZXh0ID0gbmV3IE9mZmxpbmVBdWRpb0NvbnRleHQoMiwgMTAwMCwgNDQxMDApOwot
Ci0gICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgaWYgKHdpbmRvdy53ZWJraXRPZmZsaW5l
QXVkaW9Db250ZXh0KQorICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdE9mZmxpbmVBdWRpb0Nv
bnRleHQoMiwgMTAwMCwgNDQxMDApOworICAgIGVsc2UKKyAgICAgICAgY29udGV4dCA9IG5ldyBP
ZmZsaW5lQXVkaW9Db250ZXh0KDIsIDEwMDAsIDQ0MTAwKTsKKworICAgIC8vIEl0IGlzIG5vdCBw
b3NzaWJsZSB0byBzZXQgQXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zIG9uIGFuIE9mZmxpbmVBdWRp
b0NvbnRleHQgc2luY2UgaXQKKyAgICAvLyBkb2VzIG5vdCBzdWJjbGFzcyBBdWRpb0NvbnRleHQg
LyBXZWJLaXRBdWRpb0NvbnRleHQuCisgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93
LndlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQpCiAgICAgICAgIGludGVybmFscy5zZXRBdWRpb0Nv
bnRleHRSZXN0cmljdGlvbnMoY29udGV4dCwgJ1JlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3Rh
cnQnKTsKIAogICAgIHNob3VsZEJlKCdjb250ZXh0LnN0YXRlJywgJyJzdXNwZW5kZWQiJyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411596</attachid>
            <date>2020-10-16 10:59:47 -0700</date>
            <delta_ts>2020-10-16 11:32:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217803-20201016105946.patch</filename>
            <type>text/plain</type>
            <size>38927</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzc3M2RjYjU0YTQ3ODg5
YWJjNjJlMTQ0ODY3ZjgwN2I1MjQyNTliMS4uODQ4MTYyZTZmOWUyYWFiNzRlZmU3NjI2ZDFhYWNm
OGQwODRiMWVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDIwLTEwLTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBldmVuIG1vcmUgQXVk
aW9Db250ZXh0LXNwZWNpZmljIGxvZ2ljIG91dCBvZiBCYXNlQXVkaW9Db250ZXh0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc4MDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgTW92ZSBldmVuIG1vcmUgQXVk
aW9Db250ZXh0LXNwZWNpZmljIGxvZ2ljIG91dCBvZiBCYXNlQXVkaW9Db250ZXh0IGFuZAorICAg
ICAgICBpbnRvIEF1ZGlvQ29udGV4dC4gSW4gcGFydGljdWxhciwgYWxsIHRoZSBsb2dpYyByZWxh
dGVkIHRvIGF1dG9wbGF5CisgICAgICAgIHJlc3RyaWN0aW9ucywgYXVkaWJsZSBzdGF0ZSwgYW5k
IHBsYXRmb3JtIG1lZGlhIHNlc3Npb24gaW50ZXJydXB0aW9ucworICAgICAgICBvbmx5IGFwcGx5
IHRvIEF1ZGlvQ29udGV4dCBhbmQgbm90IE9mZmxpbmVBdWRpb0NvbnRleHQuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBubyBXZWItZmFjaW5nIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNo
b3VsZERvY3VtZW50QWxsb3dXZWJBdWRpb1RvQXV0b1BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250
ZXh0Ojpjb25zdHJ1Y3RDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojp+
QXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6d2lsbFBhdXNl
UGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjptZWRpYVN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bWF5UmVzdW1lUGxheWJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojp3aWxsQmVnaW5QbGF5YmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvQ29udGV4dDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6c3VzcGVuZFBsYXliYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6aG9z
dGluZ0RvY3VtZW50SWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Nv
bnRleHQ6OmlzU3VzcGVuZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6cGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250
ZXh0OjptZWRpYUNhblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bG9n
Z2VyIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpiZWhhdmlvclJlc3RyaWN0aW9ucyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmFkZEJlaGF2aW9yUmVzdHJpY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpyZW1vdmVCZWhhdmlvclJlc3Ry
aWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6dXNlckdlc3R1cmVSZXF1
aXJlZEZvckF1ZGlvU3RhcnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0
OjpwYWdlQ29uc2VudFJlcXVpcmVkRm9yQXVkaW9TdGFydCBjb25zdCk6CisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9CYXNlQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VBdWRpb0NvbnRleHQ6OkJhc2VBdWRpb0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QmFz
ZUF1ZGlvQ29udGV4dDo6fkJhc2VBdWRpb0NvbnRleHQpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vT2Zm
bGluZUF1ZGlvQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9Db250
ZXh0OjpzdGFydE9mZmxpbmVSZW5kZXJpbmcpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0QXVkaW9Db250ZXh0UmVzdHJp
Y3Rpb25zKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3Rp
bmcvSW50ZXJuYWxzLmlkbDoKKwogMjAyMC0xMC0xNSAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgTGVzc2VuIHRoZSByZWxpYW5jZSBvbiBWUEFUSCBpbiBXZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmNwcAppbmRleCBkOTQyODI5ZjMyOWYzYjkwYzk2MGExZmU2NTgw
MGI3YmVlNjNhYzEwLi4zMzhhZjYxNjZmMzUxNDA4ZjdmMGRkOWVlZjA5Nzk0ZWMyOTFjY2U0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3Bw
CkBAIC0zMSw4ICszMSwxMSBAQAogI2luY2x1ZGUgIkF1ZGlvVGltZXN0YW1wLmgiCiAjaW5jbHVk
ZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKKyNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBlcmZvcm1hbmNl
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmgiCisjaW5jbHVkZSAi
UXVpcmtzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAogI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCkBAIC01MSw2ICs1NCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorI2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwgLi4uKSBSRUxFQVNFX0xPR19J
Rihkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPnBhZ2UoKSAmJiBkb2N1bWVudCgpLT5wYWdlKCkt
PmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBNZWRpYSwgIiVwIC0gQXVkaW9Db250ZXh0Ojoi
IGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKwogI2lmIE9TKFdJTkRPV1MpCiAvLyBEb24ndCBh
bGxvdyBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIEF1ZGlvQ29udGV4dHMg
dGFsa2luZyB0byBoYXJkd2FyZS4KIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhIYXJkd2FyZUNvbnRl
eHRzID0gNDsKQEAgLTY0LDYgKzY5LDEzIEBAIHN0YXRpYyBPcHRpb25hbDxmbG9hdD4mIGRlZmF1
bHRTYW1wbGVSYXRlRm9yVGVzdGluZygpCiAgICAgcmV0dXJuIHNhbXBsZVJhdGU7CiB9CiAKK3N0
YXRpYyBib29sIHNob3VsZERvY3VtZW50QWxsb3dXZWJBdWRpb1RvQXV0b1BsYXkoY29uc3QgRG9j
dW1lbnQmIGRvY3VtZW50KQoreworICAgIGlmIChkb2N1bWVudC5wcm9jZXNzaW5nVXNlckdlc3R1
cmVGb3JNZWRpYSgpIHx8IGRvY3VtZW50LmlzQ2FwdHVyaW5nKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBkb2N1bWVudC5xdWlya3MoKS5zaG91bGRBdXRvcGxheVdlYkF1ZGlv
Rm9yQXJiaXRyYXJ5VXNlckdlc3R1cmUoKSAmJiBkb2N1bWVudC50b3BEb2N1bWVudCgpLmhhc0hh
ZFVzZXJJbnRlcmFjdGlvbigpOworfQorCiB2b2lkIEF1ZGlvQ29udGV4dDo6c2V0RGVmYXVsdFNh
bXBsZVJhdGVGb3JUZXN0aW5nKE9wdGlvbmFsPGZsb2F0PiBzYW1wbGVSYXRlKQogewogICAgIGRl
ZmF1bHRTYW1wbGVSYXRlRm9yVGVzdGluZygpID0gc2FtcGxlUmF0ZTsKQEAgLTk2LDEzICsxMDgs
NDQgQEAgRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQ29udGV4dD4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCwgQXVkaW9Db24KIC8vIENvbnN0cnVjdG9yIGZvciByZW5kZXJp
bmcgdG8gdGhlIGF1ZGlvIGhhcmR3YXJlLgogQXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQoRG9j
dW1lbnQmIGRvY3VtZW50LCBjb25zdCBBdWRpb0NvbnRleHRPcHRpb25zJiBjb250ZXh0T3B0aW9u
cykKICAgICA6IEJhc2VBdWRpb0NvbnRleHQoZG9jdW1lbnQsIGNvbnRleHRPcHRpb25zKQorICAg
ICwgbV9tZWRpYVNlc3Npb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OmNyZWF0ZShQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKSwgKnRoaXMpKQogeworICAgIGNvbnN0
cnVjdENvbW1vbigpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gbm9kZSdz
IG11dGVkIHN0YXRlIHRvIG1hdGNoIHRoZSBwYWdlJ3MgY3VycmVudCBtdXRlZCBzdGF0ZS4KKyAg
ICBwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpOworCisgICAgZG9jdW1lbnQuYWRkQXVkaW9Qcm9k
dWNlcigqdGhpcyk7CisgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFu
Z2VkQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogLy8gT25seSBuZWVkZWQgZm9yIFdlYktpdE9mZmxp
bmVBdWRpb0NvbnRleHQuCiBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCYgZG9j
dW1lbnQsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIFJlZlB0cjxBdWRpb0J1ZmZlcj4mJiBy
ZW5kZXJUYXJnZXQpCiAgICAgOiBCYXNlQXVkaW9Db250ZXh0KGRvY3VtZW50LCBudW1iZXJPZkNo
YW5uZWxzLCBXVEZNb3ZlKHJlbmRlclRhcmdldCkpCisgICAgLCBtX21lZGlhU2Vzc2lvbihQbGF0
Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hh
cmVkTWFuYWdlcigpLCAqdGhpcykpCiB7CisgICAgY29uc3RydWN0Q29tbW9uKCk7Cit9CisKK3Zv
aWQgQXVkaW9Db250ZXh0Ojpjb25zdHJ1Y3RDb21tb24oKQoreworICAgIEFTU0VSVChkb2N1bWVu
dCgpKTsKKyAgICBpZiAoZG9jdW1lbnQoKS0+YXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1
cmUoKSkKKyAgICAgICAgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlVXNlckdlc3R1cmVG
b3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgbV9yZXN0cmljdGlv
bnMgPSBOb1Jlc3RyaWN0aW9uczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGFkZEJlaGF2
aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9u
KTsKKyNlbmRpZgorfQorCitBdWRpb0NvbnRleHQ6On5BdWRpb0NvbnRleHQoKQoreworICAgIGlm
ICghaXNPZmZsaW5lQ29udGV4dCgpICYmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgeworICAg
ICAgICBkb2N1bWVudCgpLT5yZW1vdmVBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKKyAgICAgICAgZG9j
dW1lbnQoKS0+dW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRo
aXMpOworICAgIH0KIH0KIAogZG91YmxlIEF1ZGlvQ29udGV4dDo6YmFzZUxhdGVuY3koKQpAQCAt
MjYzLDIxICszMDYsMTY0IEBAIGJvb2wgQXVkaW9Db250ZXh0Ojp3aWxsUGF1c2VQbGF5YmFjaygp
CiAgICAgaWYgKHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAg
aWYgKCFkb2N1bWVudC0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihCYXNl
QXVkaW9Db250ZXh0OjpSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24p
OworICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKFJlcXVpcmVVc2VyR2VzdHVyZUZv
ckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7CisgICAgfQorCisgICAgaWYgKHBhZ2VDb25zZW50UmVx
dWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKKyAgICAgICAgYXV0byogcGFnZSA9IGRvY3VtZW50LT5w
YWdlKCk7CisgICAgICAgIGlmIChwYWdlICYmICFwYWdlLT5jYW5TdGFydE1lZGlhKCkpIHsKKyAg
ICAgICAgICAgIGRvY3VtZW50LT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJlbW92ZUJlaGF2aW9y
UmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsK
KyAgICB9CisKKyAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPmNsaWVudFdpbGxQYXVzZVBsYXli
YWNrKCk7Cit9CisKK01lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBBdWRpb0NvbnRleHQ6
Om1lZGlhU3RhdGUoKSBjb25zdAoreworICAgIGlmICghaXNTdG9wcGVkKCkgJiYgZGVzdGluYXRp
b25Ob2RlKCkgJiYgZGVzdGluYXRpb25Ob2RlKCktPmlzUGxheWluZ0F1ZGlvKCkpCisgICAgICAg
IHJldHVybiBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdBdWRpbzsKKworICAgIHJldHVybiBNZWRp
YVByb2R1Y2VyOjpJc05vdFBsYXlpbmc7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjptYXlSZXN1
bWVQbGF5YmFjayhib29sIHNob3VsZFJlc3VtZSkKK3sKKyAgICBpZiAoIWRlc3RpbmF0aW9uTm9k
ZSgpIHx8IHN0YXRlKCkgPT0gU3RhdGU6OkNsb3NlZCB8fCBzdGF0ZSgpID09IFN0YXRlOjpSdW5u
aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNob3VsZFJlc3VtZSkgeworICAgICAg
ICBzZXRTdGF0ZShTdGF0ZTo6U3VzcGVuZGVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghd2lsbEJlZ2luUGxheWJhY2soKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF6
eUluaXRpYWxpemUoKTsKKworICAgIGRlc3RpbmF0aW9uTm9kZSgpLT5yZXN1bWUoW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6
UnVubmluZyk7CisgICAgfSk7Cit9CisKK2Jvb2wgQXVkaW9Db250ZXh0Ojp3aWxsQmVnaW5QbGF5
YmFjaygpCit7CisgICAgYXV0byogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAgIGlm
ICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh1c2VyR2VzdHVy
ZVJlcXVpcmVkRm9yQXVkaW9TdGFydCgpKSB7CisgICAgICAgIGlmICghc2hvdWxkRG9jdW1lbnRB
bGxvd1dlYkF1ZGlvVG9BdXRvUGxheSgqZG9jdW1lbnQpKSB7CisgICAgICAgICAgICBBTFdBWVNf
TE9HKExPR0lERU5USUZJRVIsICJyZXR1cm5pbmcgZmFsc2UsIG5vdCBwcm9jZXNzaW5nIHVzZXIg
Z2VzdHVyZSBvciBjYXB0dXJpbmciKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKFJlcXVpcmVVc2VyR2VzdHVy
ZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7CiAgICAgfQogCiAgICAgaWYgKHBhZ2VDb25zZW50
UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAgYXV0byogcGFnZSA9IGRvY3VtZW50
LT5wYWdlKCk7CiAgICAgICAgIGlmIChwYWdlICYmICFwYWdlLT5jYW5TdGFydE1lZGlhKCkpIHsK
ICAgICAgICAgICAgIGRvY3VtZW50LT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwor
ICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAicmV0dXJuaW5nIGZhbHNlLCBw
YWdlIGRvZXNuJ3QgYWxsb3cgbWVkaWEgdG8gc3RhcnQiKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQotICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEJhc2VB
dWRpb0NvbnRleHQ6OlJlcXVpcmVQYWdlQ29uc2VudEZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7
CisgICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50Rm9y
QXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKKyAgICB9CisKKyAgICBhdXRvIHdpbGxCZWdpbiA9IG1f
bWVkaWFTZXNzaW9uLT5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpOworICAgIEFMV0FZU19MT0co
TE9HSURFTlRJRklFUiwgInJldHVybmluZyAiLCB3aWxsQmVnaW4pOworCisgICAgcmV0dXJuIHdp
bGxCZWdpbjsKK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQo
KQoreworICAgIC8vIERvIG5vdCBzdXNwZW5kIGlmIGF1ZGlvIGlzIGF1ZGlibGUuCisgICAgaWYg
KCFkb2N1bWVudCgpIHx8IG1lZGlhU3RhdGUoKSA9PSBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdB
dWRpbyB8fCBpc1N0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRvY3VtZW50
KCktPmhpZGRlbigpKSB7CisgICAgICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpSdW5uaW5nKSB7
CisgICAgICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJTdXNwZW5kaW5nIHBsYXli
YWNrIGFmdGVyIGdvaW5nIHRvIHRoZSBiYWNrZ3JvdW5kIik7CisgICAgICAgICAgICBtX21lZGlh
U2Vzc2lvbi0+YmVnaW5JbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OkVudGVyaW5n
QmFja2dyb3VuZCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RhdGUo
KSA9PSBTdGF0ZTo6SW50ZXJydXB0ZWQpIHsKKyAgICAgICAgICAgIEFMV0FZU19MT0coTE9HSURF
TlRJRklFUiwgIlJlc3VtaW5nIHBsYXliYWNrIGFmdGVyIGVudGVyaW5nIGZvcmVncm91bmQiKTsK
KyAgICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRp
YVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IEF1ZGlvQ29udGV4dDo6c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uKQoreworICAgIGlmIChz
dGF0ZSgpID09IFN0YXRlOjpSdW5uaW5nKSB7CisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5iZWdp
bkludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UGxheWJhY2tTdXNwZW5kZWQpOwor
ICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVJc1BsYXlpbmdNZWRpYSgpOworICAgIH0KK30KKwor
dm9pZCBBdWRpb0NvbnRleHQ6OnJlc3VtZSgpCit7CisgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6
OkludGVycnVwdGVkKSB7CisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5lbmRJbnRlcnJ1cHRpb24o
UGxhdGZvcm1NZWRpYVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOworICAgICAgICBkb2N1bWVu
dCgpLT51cGRhdGVJc1BsYXlpbmdNZWRpYSgpOworICAgIH0KK30KKwordm9pZCBBdWRpb0NvbnRl
eHQ6OnN1c3BlbmRQbGF5YmFjaygpCit7CisgICAgaWYgKCFkZXN0aW5hdGlvbk5vZGUoKSB8fCBz
dGF0ZSgpID09IFN0YXRlOjpDbG9zZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdGF0
ZSgpID09IFN0YXRlOjpTdXNwZW5kZWQpIHsKKyAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9uLT5z
dGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZCkKKyAgICAgICAgICAg
IHNldFN0YXRlKFN0YXRlOjpJbnRlcnJ1cHRlZCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICByZXR1cm4gbWVkaWFTZXNzaW9uKCktPmNsaWVudFdpbGxQYXVzZVBsYXliYWNrKCk7Cisg
ICAgbGF6eUluaXRpYWxpemUoKTsKKworICAgIGRlc3RpbmF0aW9uTm9kZSgpLT5zdXNwZW5kKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgYm9vbCBpbnRl
cnJ1cHRlZCA9IG1fbWVkaWFTZXNzaW9uLT5zdGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9u
OjpJbnRlcnJ1cHRlZDsKKyAgICAgICAgc2V0U3RhdGUoaW50ZXJydXB0ZWQgPyBTdGF0ZTo6SW50
ZXJydXB0ZWQgOiBTdGF0ZTo6U3VzcGVuZGVkKTsKKyAgICB9KTsKK30KKworRG9jdW1lbnRJZGVu
dGlmaWVyIEF1ZGlvQ29udGV4dDo6aG9zdGluZ0RvY3VtZW50SWRlbnRpZmllcigpIGNvbnN0Cit7
CisgICAgYXV0byogZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4obV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KTsKKyAgICByZXR1cm4gZG9jdW1lbnQgPyBkb2N1bWVudC0+aWRlbnRpZmllcigp
IDogRG9jdW1lbnRJZGVudGlmaWVyIHsgfTsKIH0KIAorYm9vbCBBdWRpb0NvbnRleHQ6OmlzU3Vz
cGVuZGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWRvY3VtZW50KCkgfHwgZG9jdW1lbnQoKS0+
YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpIHx8IGRvY3VtZW50KCktPmFjdGl2ZURPTU9i
amVjdHNBcmVTdG9wcGVkKCk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpwYWdlTXV0ZWRTdGF0
ZURpZENoYW5nZSgpCit7CisgICAgaWYgKGRlc3RpbmF0aW9uTm9kZSgpICYmIGRvY3VtZW50KCkg
JiYgZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICBkZXN0aW5hdGlvbk5vZGUoKS0+c2V0TXV0
ZWQoZG9jdW1lbnQoKS0+cGFnZSgpLT5pc0F1ZGlvTXV0ZWQoKSk7Cit9CisKK3ZvaWQgQXVkaW9D
b250ZXh0OjptZWRpYUNhblN0YXJ0KERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlRf
VU5VU0VEKGRvY3VtZW50LCAmZG9jdW1lbnQgPT0gdGhpcy0+ZG9jdW1lbnQoKSk7CisgICAgcmVt
b3ZlQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVz
dHJpY3Rpb24pOworICAgIG1heVJlc3VtZVBsYXliYWNrKHRydWUpOworfQorCisjaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECitjb25zdCBMb2dnZXImIEF1ZGlvQ29udGV4dDo6bG9nZ2VyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gQmFzZUF1ZGlvQ29udGV4dDo6bG9nZ2VyKCk7Cit9CisjZW5kaWYK
KwogI2lmIEVOQUJMRShWSURFTykKIAogRXhjZXB0aW9uT3I8UmVmPE1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFFbGVtZW50U291cmNlKEhUTUxN
ZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IGY5YzEzODc1MzAwM2FiZDcxNjI2M2Q0NTRhMDUz
NTE4ZDMzMmQ4ZTkuLjYyNGExNmE0ZWUzNzc3YTI3MDNiZGRkMDk1MDk1NTNmZjYxYmQ3NmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaApAQCAt
MjgsNiArMjgsMTAgQEAKICNpbmNsdWRlICJBdWRpb0NvbnRleHRPcHRpb25zLmgiCiAjaW5jbHVk
ZSAiQmFzZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUgIkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5oIgorI2luY2x1ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIk1l
ZGlhUHJvZHVjZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbi5oIgorI2luY2x1
ZGUgIlZpc2liaWxpdHlDaGFuZ2VDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0zNSwxMSArMzksMTggQEAgY2xhc3MgRE9NV2luZG93OwogCiBzdHJ1Y3QgQXVkaW9UaW1lc3Rh
bXA7CiAKLWNsYXNzIEF1ZGlvQ29udGV4dCA6IHB1YmxpYyBCYXNlQXVkaW9Db250ZXh0IHsKK2Ns
YXNzIEF1ZGlvQ29udGV4dAorICAgIDogcHVibGljIEJhc2VBdWRpb0NvbnRleHQKKyAgICAsIHB1
YmxpYyBNZWRpYVByb2R1Y2VyCisgICAgLCBwdWJsaWMgTWVkaWFDYW5TdGFydExpc3RlbmVyCisg
ICAgLCBwcml2YXRlIFBsYXRmb3JtTWVkaWFTZXNzaW9uQ2xpZW50CisgICAgLCBwcml2YXRlIFZp
c2liaWxpdHlDaGFuZ2VDbGllbnQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQXVkaW9D
b250ZXh0KTsKIHB1YmxpYzoKICAgICAvLyBDcmVhdGUgYW4gQXVkaW9Db250ZXh0IGZvciByZW5k
ZXJpbmcgdG8gdGhlIGF1ZGlvIGhhcmR3YXJlLgogICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8
QXVkaW9Db250ZXh0Pj4gY3JlYXRlKERvY3VtZW50JiwgQXVkaW9Db250ZXh0T3B0aW9ucyYmID0g
eyB9KTsKKyAgICB+QXVkaW9Db250ZXh0KCk7CisKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBzZXREZWZhdWx0U2FtcGxlUmF0ZUZvclRlc3RpbmcoT3B0aW9uYWw8ZmxvYXQ+KTsKIAog
ICAgIHZvaWQgY2xvc2UoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYpOwpAQCAtNjUsMTMgKzc2
LDY2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKIAorICAgIC8vIFJl
c3RyaWN0aW9ucyB0byBjaGFuZ2UgZGVmYXVsdCBiZWhhdmlvcnMuCisgICAgZW51bSBCZWhhdmlv
clJlc3RyaWN0aW9uRmxhZ3MgeworICAgICAgICBOb1Jlc3RyaWN0aW9ucyA9IDAsCisgICAgICAg
IFJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbiA9IDEgPDwgMCwKKyAg
ICAgICAgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uID0gMSA8PCAx
LAorICAgIH07CisgICAgdHlwZWRlZiB1bnNpZ25lZCBCZWhhdmlvclJlc3RyaWN0aW9uczsKKyAg
ICBCZWhhdmlvclJlc3RyaWN0aW9ucyBiZWhhdmlvclJlc3RyaWN0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzdHJpY3Rpb25zOyB9CisgICAgdm9pZCBhZGRCZWhhdmlvclJlc3RyaWN0aW9uKEJl
aGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9uKSB7IG1fcmVzdHJpY3Rpb25zIHw9IHJlc3Ry
aWN0aW9uOyB9CisgICAgdm9pZCByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVz
dHJpY3Rpb25zIHJlc3RyaWN0aW9uKSB7IG1fcmVzdHJpY3Rpb25zICY9IH5yZXN0cmljdGlvbjsg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQXVkaW9Db250ZXh0KERvY3VtZW50JiwgY29u
c3QgQXVkaW9Db250ZXh0T3B0aW9ucyYgPSB7IH0pOwogICAgIEF1ZGlvQ29udGV4dChEb2N1bWVu
dCYsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIFJlZlB0cjxBdWRpb0J1ZmZlcj4mJiByZW5k
ZXJUYXJnZXQpOwogCisgICAgYm9vbCB3aWxsQmVnaW5QbGF5YmFjaygpOworCisjaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECisgICAgY29uc3QgTG9nZ2VyJiBsb2dnZXIoKSBjb25zdCBmaW5hbDsK
KyNlbmRpZgorCiBwcml2YXRlOgorICAgIHZvaWQgY29uc3RydWN0Q29tbW9uKCk7CisKKyAgICBi
b29sIHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkgY29uc3QgeyByZXR1cm4gIWlz
T2ZmbGluZUNvbnRleHQoKSAmJiBtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVVc2VyR2VzdHVyZUZv
ckF1ZGlvU3RhcnRSZXN0cmljdGlvbjsgfQorICAgIGJvb2wgcGFnZUNvbnNlbnRSZXF1aXJlZEZv
ckF1ZGlvU3RhcnQoKSBjb25zdCB7IHJldHVybiAhaXNPZmZsaW5lQ29udGV4dCgpICYmIG1fcmVz
dHJpY3Rpb25zICYgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uOyB9
CisKICAgICBib29sIHdpbGxQYXVzZVBsYXliYWNrKCk7CiAKKyAgICAvLyBNZWRpYVByb2R1Y2Vy
CisgICAgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG1lZGlhU3RhdGUoKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CisK
KyAgICAvLyBQbGF0Zm9ybU1lZGlhU2Vzc2lvbkNsaWVudAorICAgIFBsYXRmb3JtTWVkaWFTZXNz
aW9uOjpNZWRpYVR5cGUgbWVkaWFUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZv
cm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZTo6V2ViQXVkaW87IH0KKyAgICBQbGF0Zm9ybU1lZGlh
U2Vzc2lvbjo6TWVkaWFUeXBlIHByZXNlbnRhdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlOjpXZWJBdWRpbzsgfQorICAgIHZv
aWQgbWF5UmVzdW1lUGxheWJhY2soYm9vbCBzaG91bGRSZXN1bWUpIG92ZXJyaWRlOworICAgIHZv
aWQgc3VzcGVuZFBsYXliYWNrKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBjYW5SZWNlaXZlUmVtb3Rl
Q29udHJvbENvbW1hbmRzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
b2lkIGRpZFJlY2VpdmVSZW1vdGVDb250cm9sQ29tbWFuZChQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6
UmVtb3RlQ29udHJvbENvbW1hbmRUeXBlLCBjb25zdCBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UmVt
b3RlQ29tbWFuZEFyZ3VtZW50Kikgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBzdXBwb3J0c1NlZWtp
bmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkT3Zl
cnJpZGVCYWNrZ3JvdW5kUGxheWJhY2tSZXN0cmljdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6
SW50ZXJydXB0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIGNhblByb2R1Y2VBdWRpbygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBi
b29sIGlzU3VzcGVuZGVkKCkgY29uc3QgZmluYWw7CisgICAgRG9jdW1lbnRJZGVudGlmaWVyIGhv
c3RpbmdEb2N1bWVudElkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKKworICAgIC8vIE1lZGlhQ2Fu
U3RhcnRMaXN0ZW5lci4KKyAgICB2b2lkIG1lZGlhQ2FuU3RhcnQoRG9jdW1lbnQmKSBvdmVycmlk
ZTsKKworICAgIC8vIFZpc2liaWxpdHlDaGFuZ2VDbGllbnQKKyAgICB2b2lkIHZpc2liaWxpdHlT
dGF0ZUNoYW5nZWQoKSBmaW5hbDsKKworICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIHZvaWQg
c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZSgpIGZp
bmFsOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtTWVkaWFTZXNzaW9uPiBtX21lZGlh
U2Vzc2lvbjsKKworICAgIEJlaGF2aW9yUmVzdHJpY3Rpb25zIG1fcmVzdHJpY3Rpb25zIHsgTm9S
ZXN0cmljdGlvbnMgfTsKKwogICAgIC8vIFtbc3VzcGVuZGVkIGJ5IHVzZXJdXSBmbGFnIGluIHRo
ZSBzcGVjaWZpY2F0aW9uOgogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdWRpby8j
ZG9tLWF1ZGlvY29udGV4dC1zdXNwZW5kZWQtYnktdXNlci1zbG90CiAgICAgYm9vbCBtX3dhc1N1
c3BlbmRlZEJ5U2NyaXB0IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuY3BwCmluZGV4IDFmZGM2MTkwMWY1NmNhYzYz
OWIxNzg4YmRkMjE1OTdmOGNlMDUwMmIuLjNhMjE5ODRmOTI5MDhiYmY4NTc2ZTNmZGVhNGQxNWY4
YTlmYjczYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmFz
ZUF1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9C
YXNlQXVkaW9Db250ZXh0LmNwcApAQCAtNzUsNyArNzUsNiBAQAogI2luY2x1ZGUgIlBhbm5lck5v
ZGUuaCIKICNpbmNsdWRlICJQZXJpb2RpY1dhdmUuaCIKICNpbmNsdWRlICJQZXJpb2RpY1dhdmVP
cHRpb25zLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcmlwdFByb2Nlc3Nvck5vZGUu
aCIKICNpbmNsdWRlICJTdGVyZW9QYW5uZXJOb2RlLmgiCkBAIC0xMTEsOCArMTEwLDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoQmFzZUF1ZGlv
Q29udGV4dCk7CiAKLSNkZWZpbmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChmbXQsIC4uLikgUkVM
RUFTRV9MT0dfSUYoZG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5wYWdlKCkgJiYgZG9jdW1lbnQo
KS0+cGFnZSgpLT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgTWVkaWEsICIlcCAtIEJhc2VB
dWRpb0NvbnRleHQ6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQotICAgIAogYm9vbCBCYXNl
QXVkaW9Db250ZXh0Ojppc1N1cHBvcnRlZFNhbXBsZVJhdGUoZmxvYXQgc2FtcGxlUmF0ZSkKIHsK
ICAgICByZXR1cm4gc2FtcGxlUmF0ZSA+PSAzMDAwICYmIHNhbXBsZVJhdGUgPD0gMzg0MDAwOwpA
QCAtMTI4LDIyICsxMjUsMTUgQEAgQmFzZUF1ZGlvQ29udGV4dDo6QmFzZUF1ZGlvQ29udGV4dChE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEF1ZGlvQ29udGV4dE9wdGlvbnMKICAgICAsIG1fbG9n
SWRlbnRpZmllcih1bmlxdWVMb2dJZGVudGlmaWVyKCkpCiAjZW5kaWYKICAgICAsIG1fd29ya2xl
dChBdWRpb1dvcmtsZXQ6OmNyZWF0ZSgqdGhpcykpCi0gICAgLCBtX21lZGlhU2Vzc2lvbihQbGF0
Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hh
cmVkTWFuYWdlcigpLCAqdGhpcykpCiB7CiAgICAgLy8gQWNjb3JkaW5nIHRvIHNwZWMgQXVkaW9D
b250ZXh0IG11c3QgZGllIG9ubHkgYWZ0ZXIgcGFnZSBuYXZpZ2F0ZS4KICAgICAvLyBMZXRzIG1h
cmsgaXQgYXMgQWN0aXZlRE9NT2JqZWN0IHdpdGggcGVuZGluZyBhY3Rpdml0eSBhbmQgdW5tYXJr
IGl0IGluIGNsZWFyIG1ldGhvZC4KICAgICBtYWtlUGVuZGluZ0FjdGl2aXR5KCk7CiAKLSAgICBj
b25zdHJ1Y3RDb21tb24oKTsKKyAgICBGRlRGcmFtZTo6aW5pdGlhbGl6ZSgpOwogCiAgICAgbV9k
ZXN0aW5hdGlvbk5vZGUgPSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNyZWF0ZSgqdGhp
cywgY29udGV4dE9wdGlvbnMuc2FtcGxlUmF0ZSk7CiAKLSAgICAvLyBJbml0aWFsaXplIHRoZSBk
ZXN0aW5hdGlvbiBub2RlJ3MgbXV0ZWQgc3RhdGUgdG8gbWF0Y2ggdGhlIHBhZ2UncyBjdXJyZW50
IG11dGVkIHN0YXRlLgotICAgIHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCk7Ci0KLSAgICBkb2N1
bWVudC5hZGRBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKLSAgICBkb2N1bWVudC5yZWdpc3RlckZvclZp
c2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwotCiAgICAgLy8gVW5saWtlIE9m
ZmxpbmVBdWRpb0NvbnRleHQsIEF1ZGlvQ29udGV4dCBkb2VzIG5vdCByZXF1aXJlIGNhbGxpbmcg
cmVzdW1lKCkgdG8gc3RhcnQgcmVuZGVyaW5nLgogICAgIC8vIExhenkgaW5pdGlhbGl6YXRpb24g
c3RhcnRzIHJlbmRlcmluZyBzbyB3ZSBzY2hlZHVsZSBhIHRhc2sgaGVyZSB0byBtYWtlIHN1cmUg
bGF6eSBpbml0aWFsaXphdGlvbgogICAgIC8vIGVuZHMgdXAgaGFwcGVuaW5nLCBldmVuIGlmIG5v
IGF1ZGlvIG5vZGUgZ2V0cyBjb25zdHJ1Y3RlZC4KQEAgLTE2NCwzMCArMTU0LDE0IEBAIEJhc2VB
dWRpb0NvbnRleHQ6OkJhc2VBdWRpb0NvbnRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCB1bnNpZ25l
ZCBudW1iZXJPZkNoYW5uZWxzCiAjZW5kaWYKICAgICAsIG1fd29ya2xldChBdWRpb1dvcmtsZXQ6
OmNyZWF0ZSgqdGhpcykpCiAgICAgLCBtX2lzT2ZmbGluZUNvbnRleHQodHJ1ZSkKLSAgICAsIG1f
bWVkaWFTZXNzaW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpjcmVhdGUoUGxhdGZvcm1NZWRpYVNl
c3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCksICp0aGlzKSkKICAgICAsIG1fcmVuZGVyVGFy
Z2V0KFdURk1vdmUocmVuZGVyVGFyZ2V0KSkKIHsKLSAgICBjb25zdHJ1Y3RDb21tb24oKTsKKyAg
ICBGRlRGcmFtZTo6aW5pdGlhbGl6ZSgpOwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IGRlc3RpbmF0
aW9uIGZvciBvZmZsaW5lIHJlbmRlcmluZy4KICAgICBtX2Rlc3RpbmF0aW9uTm9kZSA9IE9mZmxp
bmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKCp0aGlzLCBudW1iZXJPZkNoYW5uZWxzLCBt
X3JlbmRlclRhcmdldC5jb3B5UmVmKCkpOwogfQogCi12b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmNv
bnN0cnVjdENvbW1vbigpCi17Ci0gICAgRkZURnJhbWU6OmluaXRpYWxpemUoKTsKLQotICAgIEFT
U0VSVChkb2N1bWVudCgpKTsKLSAgICBpZiAoZG9jdW1lbnQoKS0+YXVkaW9QbGF5YmFja1JlcXVp
cmVzVXNlckdlc3R1cmUoKSkKLSAgICAgICAgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJl
VXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwotICAgIGVsc2UKLSAgICAgICAg
bV9yZXN0cmljdGlvbnMgPSBOb1Jlc3RyaWN0aW9uczsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIGFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFy
dFJlc3RyaWN0aW9uKTsKLSNlbmRpZgotfQotCiBCYXNlQXVkaW9Db250ZXh0Ojp+QmFzZUF1ZGlv
Q29udGV4dCgpCiB7CiAjaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKQEAgLTIwMywxMSAr
MTc3LDYgQEAgQmFzZUF1ZGlvQ29udGV4dDo6fkJhc2VBdWRpb0NvbnRleHQoKQogICAgICAgICBt
X3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy5yZXNpemUobV9hdXRvbWF0aWNQdWxsTm9kZXMu
c2l6ZSgpKTsKICAgICBBU1NFUlQobV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuaXNFbXB0
eSgpKTsKICAgICAvLyBGSVhNRTogQ2FuIHdlIGFzc2VydCB0aGF0IG1fZGVmZXJyZWRCcmVha0Nv
bm5lY3Rpb25MaXN0IGlzIGVtcHR5PwotCi0gICAgaWYgKCFpc09mZmxpbmVDb250ZXh0KCkgJiYg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnJlbW92ZUF1
ZGlvUHJvZHVjZXIoKnRoaXMpOwotICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yVmlz
aWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7Ci0gICAgfQogfQogCiB2b2lkIEJh
c2VBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKCkKQEAgLTMzNiwyMiArMzA1LDYgQEAgdm9p
ZCBCYXNlQXVkaW9Db250ZXh0OjpzdG9wKCkKICAgICBjbGVhcigpOwogfQogCi12b2lkIEJhc2VB
dWRpb0NvbnRleHQ6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbikKLXsKLSAgICBpZiAoc3Rh
dGUoKSA9PSBTdGF0ZTo6UnVubmluZykgewotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YmVnaW5J
bnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OlBsYXliYWNrU3VzcGVuZGVkKTsKLSAg
ICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKLSAgICB9Ci19Ci0KLXZv
aWQgQmFzZUF1ZGlvQ29udGV4dDo6cmVzdW1lKCkKLXsKLSAgICBpZiAoc3RhdGUoKSA9PSBTdGF0
ZTo6SW50ZXJydXB0ZWQpIHsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmVuZEludGVycnVwdGlv
bihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWF5UmVzdW1lUGxheWluZyk7Ci0gICAgICAgIGRvY3Vt
ZW50KCktPnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7Ci0gICAgfQotfQotCiBjb25zdCBjaGFyKiBC
YXNlQXVkaW9Db250ZXh0OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKIHsKICAgICByZXR1
cm4gIkF1ZGlvQ29udGV4dCI7CkBAIC0zNjIsNDEgKzMxNSwxMSBAQCBEb2N1bWVudCogQmFzZUF1
ZGlvQ29udGV4dDo6ZG9jdW1lbnQoKSBjb25zdAogICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVu
dD4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIH0KIAotRG9jdW1lbnRJZGVudGlmaWVyIEJh
c2VBdWRpb0NvbnRleHQ6Omhvc3RpbmdEb2N1bWVudElkZW50aWZpZXIoKSBjb25zdAotewotICAg
IGF1dG8qIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk7Ci0gICAgcmV0dXJuIGRvY3VtZW50ID8gZG9jdW1lbnQtPmlkZW50aWZpZXIoKSA6IERv
Y3VtZW50SWRlbnRpZmllciB7IH07Ci19Ci0KIGZsb2F0IEJhc2VBdWRpb0NvbnRleHQ6OnNhbXBs
ZVJhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGlu
YXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkgOiBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBs
ZVJhdGUoKTsKIH0KIAotYm9vbCBCYXNlQXVkaW9Db250ZXh0Ojppc1N1c3BlbmRlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICFkb2N1bWVudCgpIHx8IGRvY3VtZW50KCktPmFjdGl2ZURPTU9iamVj
dHNBcmVTdXNwZW5kZWQoKSB8fCBkb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBl
ZCgpOwotfQotCi12b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQo
KQotewotICAgIC8vIERvIG5vdCBzdXNwZW5kIGlmIGF1ZGlvIGlzIGF1ZGlibGUuCi0gICAgaWYg
KCFkb2N1bWVudCgpIHx8IG1lZGlhU3RhdGUoKSA9PSBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdB
dWRpbyB8fCBtX2lzU3RvcFNjaGVkdWxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRv
Y3VtZW50KCktPmhpZGRlbigpKSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpSdW5u
aW5nKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ2aXNpYmlsaXR5U3Rh
dGVDaGFuZ2VkKCkgU3VzcGVuZGluZyBwbGF5YmFjayBhZnRlciBnb2luZyB0byB0aGUgYmFja2dy
b3VuZCIpOwotICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmJlZ2luSW50ZXJydXB0aW9uKFBs
YXRmb3JtTWVkaWFTZXNzaW9uOjpFbnRlcmluZ0JhY2tncm91bmQpOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkludGVycnVwdGVkKSB7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ2aXNpYmlsaXR5U3RhdGVDaGFuZ2Vk
KCkgUmVzdW1pbmcgcGxheWJhY2sgYWZ0ZXIgZW50ZXJpbmcgZm9yZWdyb3VuZCIpOwotICAgICAg
ICAgICAgbV9tZWRpYVNlc3Npb24tPmVuZEludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lv
bjo6TWF5UmVzdW1lUGxheWluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIGJvb2wgQmFzZUF1
ZGlvQ29udGV4dDo6d291bGRUYWludE9yaWdpbihjb25zdCBVUkwmIHVybCkgY29uc3QKIHsKICAg
ICBpZiAodXJsLnByb3RvY29sSXNEYXRhKCkpCkBAIC05OTMsNjQgKzkxNiw2IEBAIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIEJhc2VBdWRpb0NvbnRleHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdAogICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkRG9jdW1lbnRBbGxvd1dlYkF1ZGlvVG9BdXRv
UGxheShjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgaWYgKGRvY3VtZW50LnByb2Nl
c3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCkgfHwgZG9jdW1lbnQuaXNDYXB0dXJpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGRvY3VtZW50LnF1aXJrcygpLnNob3VsZEF1
dG9wbGF5V2ViQXVkaW9Gb3JBcmJpdHJhcnlVc2VyR2VzdHVyZSgpICYmIGRvY3VtZW50LnRvcERv
Y3VtZW50KCkuaGFzSGFkVXNlckludGVyYWN0aW9uKCk7Ci19Ci0KLWJvb2wgQmFzZUF1ZGlvQ29u
dGV4dDo6d2lsbEJlZ2luUGxheWJhY2soKQotewotICAgIGF1dG8qIGRvY3VtZW50ID0gdGhpcy0+
ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAodXNlckdlc3R1cmVSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSkgewotICAgICAgICBp
ZiAoIXNob3VsZERvY3VtZW50QWxsb3dXZWJBdWRpb1RvQXV0b1BsYXkoKmRvY3VtZW50KSkgewot
ICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAicmV0dXJuaW5nIGZhbHNlLCBu
b3QgcHJvY2Vzc2luZyB1c2VyIGdlc3R1cmUgb3IgY2FwdHVyaW5nIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlv
bihCYXNlQXVkaW9Db250ZXh0OjpSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0UmVzdHJp
Y3Rpb24pOwotICAgIH0KLQotICAgIGlmIChwYWdlQ29uc2VudFJlcXVpcmVkRm9yQXVkaW9TdGFy
dCgpKSB7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOwotICAgICAgICBp
ZiAocGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVu
dC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKLSAgICAgICAgICAgIEFMV0FZU19M
T0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyBmYWxzZSwgcGFnZSBkb2Vzbid0IGFsbG93IG1l
ZGlhIHRvIHN0YXJ0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihCYXNlQXVkaW9Db250ZXh0OjpSZXF1aXJl
UGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwotICAgIH0KLSAgICAKLSAgICBh
dXRvIHdpbGxCZWdpbiA9IG1fbWVkaWFTZXNzaW9uLT5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygp
OwotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyAiLCB3aWxsQmVnaW4p
OwotICAgIAotICAgIHJldHVybiB3aWxsQmVnaW47Ci19Ci0KLXZvaWQgQmFzZUF1ZGlvQ29udGV4
dDo6bWVkaWFDYW5TdGFydChEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUX1VOVVNF
RChkb2N1bWVudCwgJmRvY3VtZW50ID09IHRoaXMtPmRvY3VtZW50KCkpOwotICAgIHJlbW92ZUJl
aGF2aW9yUmVzdHJpY3Rpb24oQmFzZUF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25zZW50Rm9y
QXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKLSAgICBtYXlSZXN1bWVQbGF5YmFjayh0cnVlKTsKLX0K
LQotTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIEJhc2VBdWRpb0NvbnRleHQ6Om1lZGlh
U3RhdGUoKSBjb25zdAotewotICAgIGlmICghbV9pc1N0b3BTY2hlZHVsZWQgJiYgbV9kZXN0aW5h
dGlvbk5vZGUgJiYgbV9kZXN0aW5hdGlvbk5vZGUtPmlzUGxheWluZ0F1ZGlvKCkpCi0gICAgICAg
IHJldHVybiBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdBdWRpbzsKLQotICAgIHJldHVybiBNZWRp
YVByb2R1Y2VyOjpJc05vdFBsYXlpbmc7Ci19Ci0KLXZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6cGFn
ZU11dGVkU3RhdGVEaWRDaGFuZ2UoKQotewotICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9kZSAmJiBk
b2N1bWVudCgpICYmIGRvY3VtZW50KCktPnBhZ2UoKSkKLSAgICAgICAgbV9kZXN0aW5hdGlvbk5v
ZGUtPnNldE11dGVkKGRvY3VtZW50KCktPnBhZ2UoKS0+aXNBdWRpb011dGVkKCkpOwotfQotCiB2
b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmlzUGxheWluZ0F1ZGlvRGlkQ2hhbmdlKCkKIHsKICAgICAv
LyBNYWtlIHN1cmUgdG8gY2FsbCBEb2N1bWVudDo6dXBkYXRlSXNQbGF5aW5nTWVkaWEoKSBvbiB0
aGUgbWFpbiB0aHJlYWQsIHNpbmNlCkBAIC0xMTIzLDQ1ICs5ODgsNiBAQCB2b2lkIEJhc2VBdWRp
b0NvbnRleHQ6OmRpZFN1c3BlbmRSZW5kZXJpbmcoc2l6ZV90KQogICAgIHNldFN0YXRlKFN0YXRl
OjpTdXNwZW5kZWQpOwogfQogCi12b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnN1c3BlbmRQbGF5YmFj
aygpCi17Ci0gICAgaWYgKCFtX2Rlc3RpbmF0aW9uTm9kZSB8fCBtX3N0YXRlID09IFN0YXRlOjpD
bG9zZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpTdXNw
ZW5kZWQpIHsKLSAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9uLT5zdGF0ZSgpID09IFBsYXRmb3Jt
TWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZCkKLSAgICAgICAgICAgIHNldFN0YXRlKFN0YXRlOjpJ
bnRlcnJ1cHRlZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsYXp5SW5pdGlhbGl6
ZSgpOwotCi0gICAgbV9kZXN0aW5hdGlvbk5vZGUtPnN1c3BlbmQoW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICBib29sIGludGVycnVwdGVkID0gbV9tZWRp
YVNlc3Npb24tPnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGVkOwot
ICAgICAgICBzZXRTdGF0ZShpbnRlcnJ1cHRlZCA/IFN0YXRlOjpJbnRlcnJ1cHRlZCA6IFN0YXRl
OjpTdXNwZW5kZWQpOwotICAgIH0pOwotfQotCi12b2lkIEJhc2VBdWRpb0NvbnRleHQ6Om1heVJl
c3VtZVBsYXliYWNrKGJvb2wgc2hvdWxkUmVzdW1lKQotewotICAgIGlmICghbV9kZXN0aW5hdGlv
bk5vZGUgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkIHx8IG1fc3RhdGUgPT0gU3RhdGU6OlJ1
bm5pbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2hvdWxkUmVzdW1lKSB7Ci0gICAg
ICAgIHNldFN0YXRlKFN0YXRlOjpTdXNwZW5kZWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCF3aWxsQmVnaW5QbGF5YmFjaygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBs
YXp5SW5pdGlhbGl6ZSgpOwotCi0gICAgbV9kZXN0aW5hdGlvbk5vZGUtPnJlc3VtZShbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgIHNldFN0YXRlKFN0YXRl
OjpSdW5uaW5nKTsKLSAgICB9KTsKLX0KLQogdm9pZCBCYXNlQXVkaW9Db250ZXh0Ojpwb3N0VGFz
ayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiB0YXNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VB
dWRpb0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlv
Q29udGV4dC5oCmluZGV4IDY1ZmM4ZjkwMGYyMTY5ZmNiNTYwNTJmZTM2YzM0YjkxMjg0N2ExNTgu
LmIzODM3MzMxN2Y3NDEwZjVhZTE2ZmYyNzRlNjZlMzAzMzRjNjA4Y2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5oCkBAIC0zNCwx
MyArMzQsOSBAQAogI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCiAjaW5jbHVkZSAi
RXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgotI2luY2x1
ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIK
ICNpbmNsdWRlICJPc2NpbGxhdG9yVHlwZS5oIgogI2luY2x1ZGUgIlBlcmlvZGljV2F2ZUNvbnN0
cmFpbnRzLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb24uaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiVmlzaWJpbGl0eUNoYW5nZUNsaWVu
dC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBlcy5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0Zsb2F0MzJBcnJheS5oPgogI2luY2x1ZGUgPGF0b21pYz4KQEAgLTk5
LDIxICs5NSwxNSBAQCBjbGFzcyBCYXNlQXVkaW9Db250ZXh0CiAgICAgOiBwdWJsaWMgQWN0aXZl
RE9NT2JqZWN0CiAgICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmFzZUF1ZGlvQ29u
dGV4dD4KICAgICAsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhCi0gICAgLCBwdWJs
aWMgTWVkaWFDYW5TdGFydExpc3RlbmVyCi0gICAgLCBwdWJsaWMgTWVkaWFQcm9kdWNlcgorICAg
ICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEJhc2VBdWRpb0NvbnRleHQ+CiAjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECiAgICAgLCBwdWJsaWMgTG9nZ2VySGVscGVyCiAjZW5kaWYKLSAgICAsIHBy
aXZhdGUgUGxhdGZvcm1NZWRpYVNlc3Npb25DbGllbnQKLSAgICAsIHByaXZhdGUgVmlzaWJpbGl0
eUNoYW5nZUNsaWVudAogewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQmFzZUF1ZGlvQ29u
dGV4dCk7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QmFzZUF1ZGlvQ29udGV4dCgpOwogCi0gICAg
dXNpbmcgV2Vha1ZhbHVlVHlwZSA9IE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcjo6V2Vha1ZhbHVlVHlw
ZTsKLSAgICB1c2luZyBNZWRpYUNhblN0YXJ0TGlzdGVuZXI6OndlYWtQdHJGYWN0b3J5OwotCiAg
ICAgLy8gUmVjb25jaWxlIHJlZi9kZXJlZiB3aGljaCBhcmUgZGVmaW5lZCBib3RoIGluIFRocmVh
ZFNhZmVSZWZDb3VudGVkIGFuZCBFdmVudFRhcmdldC4KICAgICB1c2luZyBUaHJlYWRTYWZlUmVm
Q291bnRlZDo6cmVmOwogICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkOjpkZXJlZjsKQEAg
LTEyNCw4ICsxMTQsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc09mZmxpbmVDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9pc09mZmxpbmVDb250ZXh0OyB9CiAgICAgdmlydHVhbCBib29sIGlzV2Vi
S2l0QXVkaW9Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIERvY3VtZW50
SWRlbnRpZmllciBob3N0aW5nRG9jdW1lbnRJZGVudGlmaWVyKCkgY29uc3QgZmluYWw7Ci0KICAg
ICBBdWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRpb24oKSB7IHJldHVybiBtX2Rlc3RpbmF0
aW9uTm9kZS5nZXQoKTsgfQogICAgIHNpemVfdCBjdXJyZW50U2FtcGxlRnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50U2Ft
cGxlRnJhbWUoKSA6IDA7IH0KICAgICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCB7IHJldHVy
biBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50VGltZSgpIDog
MC47IH0KQEAgLTI1OSwyMyArMjQ3LDEyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB1bnNpZ25l
ZCBzX2hhcmR3YXJlQ29udGV4dENvdW50OwogCi0gICAgLy8gUmVzdHJpY3Rpb25zIHRvIGNoYW5n
ZSBkZWZhdWx0IGJlaGF2aW9ycy4KLSAgICBlbnVtIEJlaGF2aW9yUmVzdHJpY3Rpb25GbGFncyB7
Ci0gICAgICAgIE5vUmVzdHJpY3Rpb25zID0gMCwKLSAgICAgICAgUmVxdWlyZVVzZXJHZXN0dXJl
Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uID0gMSA8PCAwLAotICAgICAgICBSZXF1aXJlUGFnZUNv
bnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24gPSAxIDw8IDEsCi0gICAgfTsKLSAgICB0eXBl
ZGVmIHVuc2lnbmVkIEJlaGF2aW9yUmVzdHJpY3Rpb25zOwotICAgIEJlaGF2aW9yUmVzdHJpY3Rp
b25zIGJlaGF2aW9yUmVzdHJpY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9yZXN0cmljdGlvbnM7
IH0KLSAgICB2b2lkIGFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oQmVoYXZpb3JSZXN0cmljdGlvbnMg
cmVzdHJpY3Rpb24pIHsgbV9yZXN0cmljdGlvbnMgfD0gcmVzdHJpY3Rpb247IH0KLSAgICB2b2lk
IHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQmVoYXZpb3JSZXN0cmljdGlvbnMgcmVzdHJpY3Rp
b24pIHsgbV9yZXN0cmljdGlvbnMgJj0gfnJlc3RyaWN0aW9uOyB9Ci0KICAgICB2b2lkIGlzUGxh
eWluZ0F1ZGlvRGlkQ2hhbmdlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbm9kZVdpbGxCZWdpblBs
YXliYWNrKCkgeyB9CiAKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBjb25zdCBMb2dn
ZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9CisgICAg
Y29uc3QgTG9nZ2VyJiBsb2dnZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvZ2dlci5n
ZXQoKTsgfQogICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KICAgICBXVEZMb2dDaGFubmVsJiBsb2dDaGFubmVsKCkg
Y29uc3QgZmluYWw7CiAgICAgY29uc3Qgdm9pZCogbmV4dEF1ZGlvTm9kZUxvZ0lkZW50aWZpZXIo
KSB7IHJldHVybiBjaGlsZExvZ0lkZW50aWZpZXIobV9sb2dJZGVudGlmaWVyLCArK21fbmV4dEF1
ZGlvTm9kZUlkZW50aWZpZXIpOyB9CkBAIC0zMzMsOCArMzEwLDYgQEAgcHJvdGVjdGVkOgogCiAg
ICAgQXVkaW9EZXN0aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9uTm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVzdGluYXRpb25Ob2RlLmdldCgpOyB9CiAKLSAgICBib29sIHdpbGxCZWdpblBsYXliYWNr
KCk7Ci0KICAgICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7CiAKICNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKQEAgLTM0NiwyOSArMzIxLDE1IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hPZmZsaW5lUmVuZGVyaW5nKEV4Y2VwdGlvbk9yPFJlZjxBdWRpb0J1
ZmZlcj4+JiYpIHsgfQogCi0gICAgYm9vbCB1c2VyR2VzdHVyZVJlcXVpcmVkRm9yQXVkaW9TdGFy
dCgpIGNvbnN0IHsgcmV0dXJuICFpc09mZmxpbmVDb250ZXh0KCkgJiYgbV9yZXN0cmljdGlvbnMg
JiBSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb247IH0KLSAgICBib29s
IHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkgY29uc3QgeyByZXR1cm4gIWlzT2Zm
bGluZUNvbnRleHQoKSAmJiBtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVQYWdlQ29uc2VudEZvckF1
ZGlvU3RhcnRSZXN0cmljdGlvbjsgfQotCi0gICAgUGxhdGZvcm1NZWRpYVNlc3Npb24qIG1lZGlh
U2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFTZXNzaW9uLmdldCgpOyB9CiBwcml2YXRl
OgotICAgIHZvaWQgY29uc3RydWN0Q29tbW9uKCk7Ci0KICAgICB2b2lkIGNsZWFyKCk7CiAKICAg
ICB2b2lkIHNjaGVkdWxlTm9kZURlbGV0aW9uKCk7CiAKLSAgICB2b2lkIG1lZGlhQ2FuU3RhcnQo
RG9jdW1lbnQmKSBvdmVycmlkZTsKLQogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdm9pZCBkaXNw
YXRjaEV2ZW50KEV2ZW50JikgZmluYWw7CiAKLSAgICAvLyBNZWRpYVByb2R1Y2VyCi0gICAgTWVk
aWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG1lZGlhU3RhdGUoKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBB
Y3RpdmVET01PYmplY3QgQVBJLgotICAgIHZvaWQgc3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9u
KSBmaW5hbDsKLSAgICB2b2lkIHJlc3VtZSgpIGZpbmFsOwogICAgIHZvaWQgc3RvcCgpIG92ZXJy
aWRlOwogICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlk
ZTsKIApAQCAtMzc2LDIwICszMzcsNiBAQCBwcml2YXRlOgogICAgIC8vIE1ha2Ugc3VyZSB0byBk
ZXJlZmVyZW5jZSB0aGVtIGhlcmUuCiAgICAgdm9pZCBkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2Rl
cygpOwogCi0gICAgLy8gUGxhdGZvcm1NZWRpYVNlc3Npb25DbGllbnQKLSAgICBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbjo6TWVkaWFUeXBlIG1lZGlhVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGU6OldlYkF1ZGlvOyB9Ci0gICAgUGxhdGZv
cm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZSBwcmVzZW50YXRpb25UeXBlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZTo6V2ViQXVkaW87IH0K
LSAgICB2b2lkIG1heVJlc3VtZVBsYXliYWNrKGJvb2wgc2hvdWxkUmVzdW1lKSBvdmVycmlkZTsK
LSAgICB2b2lkIHN1c3BlbmRQbGF5YmFjaygpIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUmVjZWl2
ZVJlbW90ZUNvbnRyb2xDb21tYW5kcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVtb3RlQ29udHJvbENvbW1hbmQoUGxhdGZvcm1NZWRpYVNl
c3Npb246OlJlbW90ZUNvbnRyb2xDb21tYW5kVHlwZSwgY29uc3QgUGxhdGZvcm1NZWRpYVNlc3Np
b246OlJlbW90ZUNvbW1hbmRBcmd1bWVudCopIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgc3VwcG9y
dHNTZWVraW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNo
b3VsZE92ZXJyaWRlQmFja2dyb3VuZFBsYXliYWNrUmVzdHJpY3Rpb24oUGxhdGZvcm1NZWRpYVNl
c3Npb246OkludGVycnVwdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgYm9vbCBjYW5Qcm9kdWNlQXVkaW8oKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
Ci0gICAgYm9vbCBpc1N1c3BlbmRlZCgpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCB2aXNpYmls
aXR5U3RhdGVDaGFuZ2VkKCkgZmluYWw7Ci0KICAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9TdW1t
aW5nSnVuY3Rpb25zKCk7CiAgICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKTsK
IApAQCAtNDM4LDggKzM4NSw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEF1ZGlvTm9kZSo+IG1f
ZGVmZXJyZWRCcmVha0Nvbm5lY3Rpb25MaXN0OwogICAgIFZlY3RvcjxWZWN0b3I8RE9NUHJvbWlz
ZURlZmVycmVkPHZvaWQ+Pj4gbV9zdGF0ZVJlYWN0aW9uczsKIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxQbGF0Zm9ybU1lZGlhU2Vzc2lvbj4gbV9tZWRpYVNlc3Npb247Ci0KICAgICBSZWZQdHI8QXVk
aW9CdWZmZXI+IG1fcmVuZGVyVGFyZ2V0OwogICAgIFJlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uTm9k
ZT4gbV9kZXN0aW5hdGlvbk5vZGU7CiAgICAgUmVmUHRyPEF1ZGlvTGlzdGVuZXI+IG1fbGlzdGVu
ZXI7CkBAIC00NjIsOCArNDA3LDYgQEAgcHJpdmF0ZToKICAgICAvLyBOdW1iZXIgb2YgQXVkaW9C
dWZmZXJTb3VyY2VOb2RlcyB0aGF0IGFyZSBhY3RpdmUgKHBsYXlpbmcpLgogICAgIHN0ZDo6YXRv
bWljPGludD4gbV9hY3RpdmVTb3VyY2VDb3VudCB7IDAgfTsKIAotICAgIEJlaGF2aW9yUmVzdHJp
Y3Rpb25zIG1fcmVzdHJpY3Rpb25zIHsgTm9SZXN0cmljdGlvbnMgfTsKLQogICAgIFN0YXRlIG1f
c3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07CiAgICAgUmVmUHRyPFBlbmRpbmdBY3Rpdml0eTxC
YXNlQXVkaW9Db250ZXh0Pj4gbV9wZW5kaW5nQWN0aXZpdHk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQuY3BwCmluZGV4
IDI0ZmEwNDM5OTRiOGY1YWFlOGVhNDdlMDdiMzgzZmNhOGI1MTUyMmUuLmU3NGRhODQ0MGVhOGRm
NjY5MGNlN2Y1MWNkMGE1YzU4MWQxZmI3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db250ZXh0LmNwcApAQCAtOTksMTEgKzk5
LDYgQEAgdm9pZCBPZmZsaW5lQXVkaW9Db250ZXh0OjpzdGFydE9mZmxpbmVSZW5kZXJpbmcoUmVm
PERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKCF3aWxsQmVnaW5QbGF5YmFjaygpKSB7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIlJlZnVzaW5nIHRvIHN0YXJ0IHJlbmRlcmlu
ZyBmb3Igc2VjdXJpdHkgcmVhc29ucyIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBpZiAoIXJlbmRlclRhcmdldCgpKSB7CiAgICAgICAgIHByb21pc2UtPnJlamVjdChFeGNlcHRp
b24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBjcmVhdGUgYXVkaW8gYnVmZmVyIl9z
IH0pOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5k
ZXggYTA5MzA1ZjI4NGNlY2E2NWQ2ODQ2MTg5ZTk3ZGRhYjc3NTUxMDZkNi4uNGE1ZGM1M2YyZWZl
MjZiZGI0MDNjMjUwMzk5MGMyOWVjZDRhYjE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcApAQCAtNDI4NCwxMCArNDI4NCwxMCBAQCBib29sIEludGVybmFsczo6ZWxlbWVudElz
QmxvY2tpbmdEaXNwbGF5U2xlZXAoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkgY29uc3QKICNl
bmRpZiAvLyBFTkFCTEUoVklERU8pCiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQotdm9pZCBJbnRl
cm5hbHM6OnNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyhjb25zdCBWYXJpYW50PFJlZlB0cjxC
YXNlQXVkaW9Db250ZXh0PiwgUmVmUHRyPFdlYktpdEF1ZGlvQ29udGV4dD4+JiBjb250ZXh0VmFy
aWFudCwgU3RyaW5nVmlldyByZXN0cmljdGlvbnNTdHJpbmcpCit2b2lkIEludGVybmFsczo6c2V0
QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKGNvbnN0IFZhcmlhbnQ8UmVmUHRyPEF1ZGlvQ29udGV4
dD4sIFJlZlB0cjxXZWJLaXRBdWRpb0NvbnRleHQ+PiYgY29udGV4dFZhcmlhbnQsIFN0cmluZ1Zp
ZXcgcmVzdHJpY3Rpb25zU3RyaW5nKQogewotICAgIFJlZlB0cjxCYXNlQXVkaW9Db250ZXh0PiBj
b250ZXh0OwotICAgIHN3aXRjaE9uKGNvbnRleHRWYXJpYW50LCBbJl0oUmVmUHRyPEJhc2VBdWRp
b0NvbnRleHQ+IGVudHJ5KSB7CisgICAgUmVmUHRyPEF1ZGlvQ29udGV4dD4gY29udGV4dDsKKyAg
ICBzd2l0Y2hPbihjb250ZXh0VmFyaWFudCwgWyZdKFJlZlB0cjxBdWRpb0NvbnRleHQ+IGVudHJ5
KSB7CiAgICAgICAgIGNvbnRleHQgPSBlbnRyeTsKICAgICB9LCBbJl0oUmVmUHRyPFdlYktpdEF1
ZGlvQ29udGV4dD4gZW50cnkpIHsKICAgICAgICAgY29udGV4dCA9IGVudHJ5OwpAQCAtNDI5Niwx
NSArNDI5NiwxNSBAQCB2b2lkIEludGVybmFsczo6c2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25z
KGNvbnN0IFZhcmlhbnQ8UmVmUHRyPEJhc2VBdWRpb0NvbnRleAogICAgIGF1dG8gcmVzdHJpY3Rp
b25zID0gY29udGV4dC0+YmVoYXZpb3JSZXN0cmljdGlvbnMoKTsKICAgICBjb250ZXh0LT5yZW1v
dmVCZWhhdmlvclJlc3RyaWN0aW9uKHJlc3RyaWN0aW9ucyk7CiAKLSAgICByZXN0cmljdGlvbnMg
PSBCYXNlQXVkaW9Db250ZXh0OjpOb1Jlc3RyaWN0aW9uczsKKyAgICByZXN0cmljdGlvbnMgPSBB
dWRpb0NvbnRleHQ6Ok5vUmVzdHJpY3Rpb25zOwogCiAgICAgZm9yIChTdHJpbmdWaWV3IHJlc3Ry
aWN0aW9uU3RyaW5nIDogcmVzdHJpY3Rpb25zU3RyaW5nLnNwbGl0KCcsJykpIHsKICAgICAgICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHJlc3RyaWN0aW9uU3RyaW5nLCAibm9y
ZXN0cmljdGlvbnMiKSkKLSAgICAgICAgICAgIHJlc3RyaWN0aW9ucyB8PSBCYXNlQXVkaW9Db250
ZXh0OjpOb1Jlc3RyaWN0aW9uczsKKyAgICAgICAgICAgIHJlc3RyaWN0aW9ucyB8PSBBdWRpb0Nv
bnRleHQ6Ok5vUmVzdHJpY3Rpb25zOwogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UocmVzdHJpY3Rpb25TdHJpbmcsICJyZXF1aXJldXNlcmdlc3R1cmVmb3JhdWRpb3N0
YXJ0IikpCi0gICAgICAgICAgICByZXN0cmljdGlvbnMgfD0gQmFzZUF1ZGlvQ29udGV4dDo6UmVx
dWlyZVVzZXJHZXN0dXJlRm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uOworICAgICAgICAgICAgcmVz
dHJpY3Rpb25zIHw9IEF1ZGlvQ29udGV4dDo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yQXVkaW9TdGFy
dFJlc3RyaWN0aW9uOwogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
cmVzdHJpY3Rpb25TdHJpbmcsICJyZXF1aXJlcGFnZWNvbnNlbnRmb3JhdWRpb3N0YXJ0IikpCi0g
ICAgICAgICAgICByZXN0cmljdGlvbnMgfD0gQmFzZUF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VD
b25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uOworICAgICAgICAgICAgcmVzdHJpY3Rpb25z
IHw9IEF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0
aW9uOwogICAgIH0KICAgICBjb250ZXh0LT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKHJlc3RyaWN0
aW9ucyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5o
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCBhMTZmOTUyZjE1NTAw
MWJkNjM1MmFlNTA5N2FkNjg2NmY0ODdhMjQ1Li5kNzQzN2NhNDljYjYyOGZkZWQzNGZmN2RiNWU3
ZDMyNDM3MDY4NzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTQ4LDggKzQ4
LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQW5pbWF0aW9uVGltZWxpbmU7Citj
bGFzcyBBdWRpb0NvbnRleHQ7CiBjbGFzcyBBdWRpb1RyYWNrOwotY2xhc3MgQmFzZUF1ZGlvQ29u
dGV4dDsKIGNsYXNzIENhY2hlU3RvcmFnZUNvbm5lY3Rpb247CiBjbGFzcyBET01SZWN0OwogY2xh
c3MgRE9NUmVjdExpc3Q7CkBAIC02NjksNyArNjY5LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoV0VCX0FVRElPKQotICAgIHZvaWQgc2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25z
KGNvbnN0IFZhcmlhbnQ8UmVmUHRyPEJhc2VBdWRpb0NvbnRleHQ+LCBSZWZQdHI8V2ViS2l0QXVk
aW9Db250ZXh0Pj4mLCBTdHJpbmdWaWV3IHJlc3RyaWN0aW9uc1N0cmluZyk7CisgICAgdm9pZCBz
ZXRBdWRpb0NvbnRleHRSZXN0cmljdGlvbnMoY29uc3QgVmFyaWFudDxSZWZQdHI8QXVkaW9Db250
ZXh0PiwgUmVmUHRyPFdlYktpdEF1ZGlvQ29udGV4dD4+JiwgU3RyaW5nVmlldyByZXN0cmljdGlv
bnNTdHJpbmcpOwogICAgIHZvaWQgdXNlTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYSgpOwogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCBhM2Y0NTZlMDg5Zjdi
ZmExZmYxYTczYWUzNWQ0N2E0Y2I5YzE5NDExLi40NTA3MTIzY2I1ZjFhZmM0M2E1OTNiYzIyM2Nj
MzNjYWIyZWMyYTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC02OTEs
NyArNjkxLDcgQEAgZW51bSBDb250ZW50U2l6ZUNhdGVnb3J5IHsKICAgICBbQ29uZGl0aW9uYWw9
VklERU8sIE1heVRocm93RXhjZXB0aW9uXSB1bmRlZmluZWQgc2V0TWVkaWFTZXNzaW9uUmVzdHJp
Y3Rpb25zKERPTVN0cmluZyBtZWRpYVR5cGUsIERPTVN0cmluZyByZXN0cmljdGlvbnMpOwogICAg
IFtDb25kaXRpb25hbD1WSURFTywgTWF5VGhyb3dFeGNlcHRpb25dIERPTVN0cmluZyBtZWRpYVNl
c3Npb25SZXN0cmljdGlvbnMoRE9NU3RyaW5nIG1lZGlhVHlwZSk7CiAgICAgW0NvbmRpdGlvbmFs
PVZJREVPXSB1bmRlZmluZWQgc2V0TWVkaWFFbGVtZW50UmVzdHJpY3Rpb25zKEhUTUxNZWRpYUVs
ZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIHJlc3RyaWN0aW9ucyk7Ci0gICAgW0NvbmRpdGlvbmFs
PVdFQl9BVURJT10gdW5kZWZpbmVkIHNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucygoQmFzZUF1
ZGlvQ29udGV4dCBvciBXZWJLaXRBdWRpb0NvbnRleHQpIGNvbnRleHQsIERPTVN0cmluZyByZXN0
cmljdGlvbnMpOworICAgIFtDb25kaXRpb25hbD1XRUJfQVVESU9dIHVuZGVmaW5lZCBzZXRBdWRp
b0NvbnRleHRSZXN0cmljdGlvbnMoKEF1ZGlvQ29udGV4dCBvciBXZWJLaXRBdWRpb0NvbnRleHQp
IGNvbnRleHQsIERPTVN0cmluZyByZXN0cmljdGlvbnMpOwogICAgIFtDb25kaXRpb25hbD1WSURF
TywgTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCBwb3N0UmVtb3RlQ29udHJvbENvbW1hbmQo
RE9NU3RyaW5nIGNvbW1hbmQsIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhcmd1bWVudCA9
IDApOwogICAgIFtDb25kaXRpb25hbD1XSVJFTEVTU19QTEFZQkFDS19UQVJHRVRdIHVuZGVmaW5l
ZCBzZXRNb2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckVuYWJsZWQoYm9vbGVhbiBlbmFibGVk
KTsKICAgICBbQ29uZGl0aW9uYWw9V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VULCBNYXlUaHJvd0V4
Y2VwdGlvbl0gdW5kZWZpbmVkIHNldE1vY2tNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyU3RhdGUo
RE9NU3RyaW5nIGRldmljZU5hbWUsIERPTVN0cmluZyBkZXZpY2VTdGF0ZSk7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjRh
MWRhMzZhNGZhMGY0NWRkMGIyMDRlODkwODIyYjkzNTQ0YmIxZC4uYWE1ZGUxMDUyMzZmNGFiNzRi
YjkwOTRhZjY4Njc1MDBkY2I0YjIxYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIwLTEwLTE1
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBldmVuIG1v
cmUgQXVkaW9Db250ZXh0LXNwZWNpZmljIGxvZ2ljIG91dCBvZiBCYXNlQXVkaW9Db250ZXh0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc4MDMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgVXBkYXRlIHRlc3Qg
dGhhdCB3YXMgdHJ5aW5nIHRvIHNldCB0aGUgYXV0b3BsYXkgcmVzdHJpY3Rpb25zIG9uIGFuIE9m
ZmxpbmVBdWRpb0NvbnRleHQKKyAgICAgICAgdG8gbWFrZSBzdXJlIHRoZXkgZGlkIG5vdCBhcHBs
eS4gTm93IHRoYXQgdGhlIGF1dG9wbGF5IHJlc3RyaWN0aW9ucyBhcmUgb24gQXVkaW9Db250ZXh0
CisgICAgICAgIGluc3RlYWQgb2YgQmFzZUF1ZGlvQ29udGV4dCwgdGhleSBkZWZpbml0ZWx5IGRv
IG5vdCBhcHBseSB0byBPZmZsaW5lQXVkaW9Db250ZXh0IGFuZCBpdAorICAgICAgICBpcyBub3Qg
ZXZlbiBwb3NzaWJsZSB0byBzZXQgdGhlIHJlc3RyaWN0aW9ucyBvbiBhbiBPZmZsaW5lQXVkaW9D
b250ZXh0LiBJIHVwZGF0ZWQgdGhlCisgICAgICAgIHRlc3QgdG8gdXNlIHdlYmtpdE9mZmxpbmVB
dWRpb0NvbnRleHQgd2hlbiBhdmFpbGFibGUgc2luY2UgV2ViS2l0T2ZmbGluZUF1ZGlvQ29udGV4
dAorICAgICAgICBkb2VzIGluaGVyaXQgV2ViS2l0QXVkaW9Db250ZXh0LgorCisgICAgICAgICog
d2ViYXVkaW8vb2ZmbGluZWF1ZGlvY29udGV4dC1yZXN0cmljdGlvbi5odG1sOgorCiAyMDIwLTEw
LTE1ICBDYXJsb3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtXUEVdIFJlYmFzZWxpbmUgYWZ0ZXIgcjI2ODUyMApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vb2ZmbGluZWF1ZGlvY29udGV4dC1yZXN0cmljdGlvbi5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vb2ZmbGluZWF1ZGlvY29udGV4dC1yZXN0cmljdGlvbi5odG1sCmlu
ZGV4IDNlYzE0NjVlN2JhOTRmZjAyNTQ1OGFiZTBmODgxODI1Nzc4ZDhjNTUuLjQ0NDc1ODg3MWQx
Njk5ZGVhMmI5MzY0ZTk3MzIxNzEzNDY1MDFkMDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL29mZmxpbmVhdWRpb2NvbnRleHQtcmVzdHJpY3Rpb24uaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9vZmZsaW5lYXVkaW9jb250ZXh0LXJlc3RyaWN0aW9uLmh0bWwKQEAgLTIw
LDkgKzIwLDE0IEBAIHZhciBjYWxsZWRSZXN1bWVXaXRoVXNlckdlc3R1cmUgPSBmYWxzZTsKIGZ1
bmN0aW9uIHJ1blRlc3QoKSB7CiAgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwogCi0g
ICAgY29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDIsIDEwMDAsIDQ0MTAwKTsKLQot
ICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgIGlmICh3aW5kb3cud2Via2l0T2ZmbGluZUF1
ZGlvQ29udGV4dCkKKyAgICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRPZmZsaW5lQXVkaW9Db250
ZXh0KDIsIDEwMDAsIDQ0MTAwKTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQgPSBuZXcgT2Zm
bGluZUF1ZGlvQ29udGV4dCgyLCAxMDAwLCA0NDEwMCk7CisKKyAgICAvLyBJdCBpcyBub3QgcG9z
c2libGUgdG8gc2V0IEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyBvbiBhbiBPZmZsaW5lQXVkaW9D
b250ZXh0IHNpbmNlIGl0CisgICAgLy8gZG9lcyBub3Qgc3ViY2xhc3MgQXVkaW9Db250ZXh0IC8g
V2ViS2l0QXVkaW9Db250ZXh0LgorICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRvdy53
ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0KQogICAgICAgICBpbnRlcm5hbHMuc2V0QXVkaW9Db250
ZXh0UmVzdHJpY3Rpb25zKGNvbnRleHQsICdSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0
Jyk7CiAKICAgICBzaG91bGRCZSgnY29udGV4dC5zdGF0ZScsICcic3VzcGVuZGVkIicpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>