<?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>194080</bug_id>
          
          <creation_ts>2019-01-30 22:33:02 -0800</creation_ts>
          <short_desc>Generalize ScrollingTreeScrollingNodeDelegate for use in macOS too, add a macOS subclass for frame/overflow scrolling</short_desc>
          <delta_ts>2019-01-31 15:28:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>172917</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>jamesr</cc>
    
    <cc>koivisto</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1500433</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-01-30 22:33:02 -0800</bug_when>
    <thetext>Generalize ScrollingTreeScrollingNodeDelegate for use in macOS too, add a macOS subclass for frame/overflow scrolling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500434</commentid>
    <comment_count>1</comment_count>
      <attachid>360693</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-01-30 22:37:32 -0800</bug_when>
    <thetext>Created attachment 360693
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500435</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-01-30 22:38:05 -0800</bug_when>
    <thetext>Probably won&apos;t build without the patch from bug 172917.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500454</commentid>
    <comment_count>3</comment_count>
      <attachid>360693</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-01-30 23:28:23 -0800</bug_when>
    <thetext>Comment on attachment 360693
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        Add a macOS subclass, ScrollingTreeFrameScrollingNodeMac, which takes over the basic scrolling, rubber-banding
&gt; +        and scroll snapping functionality from ScrollingTreeFrameScrollingNodeMac. The delegate owns the ScrollController and

ScrollingTreeFrameScrollingNodeMac is probably not taking over from itself</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500584</commentid>
    <comment_count>4</comment_count>
      <attachid>360729</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-01-31 08:32:54 -0800</bug_when>
    <thetext>Created attachment 360729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500844</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-01-31 15:27:10 -0800</bug_when>
    <thetext>https://trac.webkit.org/r240825</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500845</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-31 15:28:28 -0800</bug_when>
    <thetext>&lt;rdar://problem/47718823&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360693</attachid>
            <date>2019-01-30 22:37:32 -0800</date>
            <delta_ts>2019-01-30 23:28:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194080-20190130223731.patch</filename>
            <type>text/plain</type>
            <size>59338</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDI2NzQ1YTEzNDNiZWUy
MzRhNDQ1NjAyNGJiZDVhNDYwMDZlOTFmOC4uMGUwOGFiZjM3MmI2ZWFiYTAwZGY2MDkxZTBkNTM1
OTUzYzQ0ODEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxOS0wMS0zMCAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBHZW5lcmFsaXpl
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUgZm9yIHVzZSBpbiBtYWNPUyB0b28s
IGFkZCBhIG1hY09TIHN1YmNsYXNzIGZvciBmcmFtZS9vdmVyZmxvdyBzY3JvbGxpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA4MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRvIHNoYXJlIGNvZGUg
YmV0d2VlbiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjIGFuZCBTY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTWFjLCBidWlsZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlCisgICAgICAgIGZvciBtYWNPUyB0b28sIGFuZCBhZGQgc29tZSBoZWxwZXIg
ZnVuY3Rpb25zIHRvIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuCisKKyAgICAg
ICAgQWRkIGEgbWFjT1Mgc3ViY2xhc3MsIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVN
YWMsIHdoaWNoIHRha2VzIG92ZXIgdGhlIGJhc2ljIHNjcm9sbGluZywgcnViYmVyLWJhbmRpbmcK
KyAgICAgICAgYW5kIHNjcm9sbCBzbmFwcGluZyBmdW5jdGlvbmFsaXR5IGZyb20gU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy4gVGhlIGRlbGVnYXRlIG93bnMgdGhlIFNjcm9sbENv
bnRyb2xsZXIgYW5kCisgICAgICAgIGltcGxlbWVudHMgU2Nyb2xsQ29udHJvbGxlckNsaWVudC4K
KworICAgICAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjIG5vdyBvd25zIGEg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy4gQSBmdXR1cmUgcGF0Y2gKKyAg
ICAgICAgd2lsbCBhZGQgb25lIHRvIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVN
YWMuCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogU291cmNlc0Nv
Y29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlOjpz
Y3JvbGxCeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlOjpzY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlOjpmcmFtZVNjYWxlRmFjdG9yIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9k
ZTo6aXNSb290Tm9kZSBjb25zdCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZU5vZGUuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZTo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGU6OnNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWlu
dHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6ZXhwZWN0
c1doZWVsRXZlbnRUZXN0VHJpZ2dlciBjb25zdCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHA6CisgICAgICAgICogcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6c2Nyb2xsUG9zaXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZTo6bWluaW11bVNjcm9sbFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGU6Om1heGltdW1TY3JvbGxQb3NpdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlOjpzY3JvbGxhYmxlQXJlYVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6dG90YWxDb250ZW50c1NpemUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6
aGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6aGFzRW5hYmxlZFZlcnRpY2FsU2Ny
b2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGU6Omhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGU6OnZlcnRpY2FsU2Ny
b2xsRWxhc3RpY2l0eSBjb25zdCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OlNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZU1hYzo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpoYW5kbGVXaGVl
bEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGVNYWM6Om1pbmltdW1TY3JvbGxQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bmV3R2VzdHVyZUlzU3RhcnRpbmcpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6
aXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6YWxsb3dzSG9yaXpv
bnRhbFN0cmV0Y2hpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6
OnN0cmV0Y2hBbW91bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6cGlubmVkSW5EaXJlY3Rpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6Y2FuU2Ny
b2xsSG9yaXpvbnRhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmNhblNjcm9sbFZlcnRpY2FsbHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2hv
dWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVN
YWM6OmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1h
Yzo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25U
b0JvdW5kc0lmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9sbE9mZnNldCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpp
bW1lZGlhdGVTY3JvbGxPbkF4aXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6cGFnZVNjYWxlRmFjdG9yIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVN
YWM6OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnN0b3BTY3JvbGxTbmFwVGltZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZU1hYzo6c2Nyb2xsRXh0ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnZpZXdwb3J0U2l6ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
TWFjOjpkZWZlclRlc3RzRm9yUmVhc29uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnJlbW92ZVRlc3REZWZlcnJh
bEZvclJlYXNvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVNYWMuaC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c2V0QWN0aXZlU2Ny
b2xsU25hcEluZGV4Rm9yQXhpcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlTWFjOjphY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVN
YWM6OmFjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpoYW5kbGVXaGVlbEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWM6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
bmV3R2VzdHVyZUlzU3RhcnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6aXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNo
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWM6OnN0cmV0Y2hBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6cGlubmVkSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6Y2FuU2Nyb2xsSG9y
aXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVNYWM6OmNhblNjcm9sbFZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c2hvdWxkUnViYmVyQmFuZEluRGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENv
bnRlbnRFZGdlQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6YWRqdXN0
U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnNjcm9sbE9mZnNldCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFj
OjppbW1lZGlhdGVTY3JvbGxPbkF4aXMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6cGFnZVNjYWxlRmFjdG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnN0YXJ0
U2Nyb2xsU25hcFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVNYWM6OnN0b3BTY3JvbGxTbmFwVGltZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c2Nyb2xsRXh0ZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWM6OnZpZXdwb3J0U2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpkZWZlclRlc3RzRm9yUmVhc29uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6
OnJlbW92ZVRlc3REZWZlcnJhbEZvclJlYXNvbiBjb25zdCk6CisKIDIwMTktMDEtMzAgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gSW1wbGVt
ZW50IGJhc2ljIGhpdCB0ZXN0aW5nIGluIHRoZSBzY3JvbGxpbmcgdHJlZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXND
b2NvYS50eHQKaW5kZXggYzI0MTg1ZjE0ZWU3YWY2NjA4ZDJhNDNjZTA2NjQ5Y2ExZjA1NTJkYS4u
NWEwMGQxMmE1ODAwM2FkNTVhODNkZjEzZmZjODVkODY4MGE2N2JkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
Q29jb2EudHh0CkBAIC0xNTgsNiArMTU4LDcgQEAgcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z1RocmVhZE1hYy5tbQogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUu
bW0KIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
Lm1tCiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZU1hYy5tbQorcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVNYWMubW0KIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlTWFjLmNwcAogcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLm1tCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2ZWFkNzNj
OTg5NDk3NjJlMjI1NDAwMjg4Mzc4MGFkZjRlN2E2YTliLi41MmIxMDkyNGMwMGFhNGE0ODc4NzU1
OGFiNDYwNjQ2MDBjY2VhNWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMTgsNiArMzE4LDcgQEAKIAkJMEYxNURBOEEwRjNB
QUVFNzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1REE4OTBGM0FBRUU3MDAw
MENFNDcgLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAqLzsgfTsKIAkJMEYxNUVE
NUMxQjdFQzdDNTAwRURERkVCIC8qIFdpbGxDaGFuZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1RUQ1QTFCN0VDN0M1MDBFRERGRUIgLyog
V2lsbENoYW5nZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjE3NzQ4MDEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTc3NDdF
MTM3OEI3NzEwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRvcklPUy5oICovOyB9OworCQkwRjM3RjA4
NTIyMDJCRjk4MDBBODlDMEIgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1h
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzN0Yw
ODQyMjAyQUNCNzAwQTg5QzBCIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVN
YWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjNERDQ1MDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkwIC8q
IFNoYWRvd0JsdXIuaCAqLzsgfTsKIAkJMEYzRjBFNUExNTcwMzBDMzAwNkRBNTdGIC8qIFJlbmRl
ckdlb21ldHJ5TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNGMEU1ODE1NzAzMEMzMDA2REE1N0YgLyogUmVuZGVyR2VvbWV0cnlNYXAuaCAqLzsg
fTsKIAkJMEY0NzEwQUYxREI1NkFGQzAwMkRDRUMzIC8qIERPTVJlY3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDcxMEE5MURCNTZBRkMwMDJEQ0VD
MyAvKiBET01SZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTU3MDQsNiArNTcwNSw4IEBACiAJCTBGMjZBN0FEMjA1NjI2MTAwMDkwQTE0MSAv
KiBTVkdVbmtub3duRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdVbmtub3duRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMzZFNzM2MUJEMTgzN0EwMDJEQjg5MSAvKiBMYXlvdXRQb2ludC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRQb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMzZFNzM4MUJEMTg0QjkwMDJEQjg5MSAvKiBMYXlvdXRTaXplLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFNpemUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM3RjA4MzIyMDJBQzhGMDBBODlDMEIgLyog
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzdGMDg0MjIwMkFDQjcwMEE4OUMwQiAvKiBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZG93Qmx1ci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGM0RENDRFMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRvd0JsdXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRjBFNTcxNTcwMzBDMzAwNkRBNTdGIC8qIFJlbmRl
ckdlb21ldHJ5TWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlckdlb21ldHJ5TWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2OTc5
LDYgKzE2OTgyLDggQEAKIAkJCQkwRkU1ODA2MjE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5n
VHJlZU1hYy5oICovLAogCQkJCTBGQzA1MTZBMjE5QjVFQkUwMDMxQzM5RSAvKiBTY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTWFjLmggKi8sCiAJCQkJMEZDMDUxNjgyMTlCNUVCRTAw
MzFDMzlFIC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVNYWMubW0gKi8sCisJ
CQkJMEYzN0YwODQyMjAyQUNCNzAwQTg5QzBCIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVNYWMuaCAqLywKKwkJCQkwRjM3RjA4MzIyMDJBQzhGMDBBODlDMEIgLyogU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbSAqLywKIAkJCQkwRkI4ODkwODE2N0Qy
RkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaCAqLywKIAkJCQkwRkI4ODkw
OTE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUubW0gKi8sCiAJCQkp
OwpAQCAtMzE0NjEsNiArMzE0NjYsNyBAQAogCQkJCTBGRUEzRTgwMTkxQjMxNjkwMDBGMUI1NSAv
KiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MzkxQTk5RDE2MjlENzAwMDAyOTczMzAgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE2RDVBOTlEMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjM3RjA4
NTIyMDJCRjk4MDBBODlDMEIgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1h
Yy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9s
bGluZ1RyZWVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0M1Nzk1RDFEQTVDMzAx
MDA2RjlDOTcgLyogU2Nyb2xsSW50b1ZpZXdPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
QUFGRThEMDE5Q0I4NjcyMDAwRjU2RDggLyogU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuY3BwCmluZGV4IGQwYTlmYjUzMWUy
Njg5MDk5MTZiNmExYzg2MGQzNmZiNjRiZjUwYWQuLjI1OGJiOTNlOTY2MTRmMmJhN2JmOTc1NGMy
ODUyNzFhYTI0YjU2YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuY3BwCkBAIC04
MiwxNiArODIsNiBAQCB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OmNvbW1p
dFN0YXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nUwogICAgICAgICBtX21heExheW91
dFZpZXdwb3J0T3JpZ2luID0gc3RhdGUubWF4TGF5b3V0Vmlld3BvcnRPcmlnaW4oKTsKIH0KIAot
dm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlOjpzY3JvbGxCeShjb25zdCBGbG9h
dFNpemUmIGRlbHRhKQotewotICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkg
KyBkZWx0YSk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6c2Ny
b2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFNpemUmIG9mZnNl
dCkKLXsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRz
KHNjcm9sbFBvc2l0aW9uKCkgKyBvZmZzZXQpOwotfQotCiB2b2lkIFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9s
bFBvc2l0aW9uKQogewogICAgIEZsb2F0UG9pbnQgbmV3U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQ
b3NpdGlvbi5jb25zdHJhaW5lZEJldHdlZW4obWluaW11bVNjcm9sbFBvc2l0aW9uKCksIG1heGlt
dW1TY3JvbGxQb3NpdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaAppbmRleCAx
OGM5MTNmN2I0MGQ3YzNiNjhkY2YzZjBhMTczZjhhOThlZTVhOWEwLi5kMDlmMDQ4YmViY2NhMDFk
MWMwZGYxZTAwM2MxN2MzMTY1NzYyNTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5o
CkBAIC02MCwxMyArNjAsMTEgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0IGZpeGVkUG9zaXRp
b25SZWN0KCkgeyByZXR1cm4gRmxvYXRSZWN0KGxhc3RDb21taXR0ZWRTY3JvbGxQb3NpdGlvbigp
LCBzY3JvbGxhYmxlQXJlYVNpemUoKSk7IH07CiAKKyAgICBmbG9hdCBmcmFtZVNjYWxlRmFjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVNjYWxlRmFjdG9yOyB9CisKIHByb3RlY3RlZDoKICAg
ICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ1RyZWUmLCBTY3JvbGxp
bmdOb2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlEKTsKIAotICAgIHZvaWQgc2Nyb2xsQnkoY29uc3Qg
RmxvYXRTaXplJik7Ci0gICAgdm9pZCBzY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFp
bnRzKGNvbnN0IEZsb2F0U2l6ZSYpOwotCi0gICAgZmxvYXQgZnJhbWVTY2FsZUZhY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fZnJhbWVTY2FsZUZhY3RvcjsgfQogICAgIGludCBoZWFkZXJIZWlnaHQo
KSBjb25zdCB7IHJldHVybiBtX2hlYWRlckhlaWdodDsgfQogICAgIGludCBmb290ZXJIZWlnaHQo
KSBjb25zdCB7IHJldHVybiBtX2Zvb3RlckhlaWdodDsgfQogICAgIGZsb2F0IHRvcENvbnRlbnRJ
bnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wQ29udGVudEluc2V0OyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5jcHAKaW5kZXggNTg1
NWQ1ZWE1NTg4MTYxZjJlZTRjYzNiZWU5YmYzOGU5YmVjYTNiMy4uZDg1NzUxMzFhMDBkZjk4ZmVj
YjYyMjhlOThjODM1NWI4ZDk4NzkwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCiAKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIK
KyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAt
NzEsNiArNzIsMTEgQEAgdm9pZCBTY3JvbGxpbmdUcmVlTm9kZTo6cmVtb3ZlQ2hpbGQoU2Nyb2xs
aW5nVHJlZU5vZGUmIG5vZGUpCiAgICAgICAgIGNoaWxkLT5yZW1vdmVDaGlsZChub2RlKTsKIH0K
IAorYm9vbCBTY3JvbGxpbmdUcmVlTm9kZTo6aXNSb290Tm9kZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc2Nyb2xsaW5nVHJlZS5yb290Tm9kZSgpID09IHRoaXM7Cit9CisKIHZvaWQgU2Nyb2xs
aW5nVHJlZU5vZGU6OmR1bXBQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBTY3JvbGxpbmdTdGF0
ZVRyZWVBc1RleHRCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAgICBpZiAoYmVoYXZpb3Ig
JiBTY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHRCZWhhdmlvckluY2x1ZGVOb2RlSURzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmgKaW5kZXgg
YjUwOTZhYjc4ODBkZDFiM2QwZmI2Mzk4OGMxOTRhYmE1YjE5NTUxNS4uNjc1NGEyNzg3ODFiNDk3
YTA2ODQ5NjU3MzM3YWIwYjU5OWFmODI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5oCkBAIC0zOCw3ICszOCw2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlOwotY2xhc3MgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOwogY2xhc3MgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOwogCkBAIC02Myw2ICs2
Miw4IEBAIHB1YmxpYzoKIAogICAgIFNjcm9sbGluZ1RyZWVOb2RlKiBwYXJlbnQoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudDsgfQogICAgIHZvaWQgc2V0UGFyZW50KFNjcm9sbGluZ1RyZWVOb2Rl
KiBwYXJlbnQpIHsgbV9wYXJlbnQgPSBwYXJlbnQ7IH0KKyAgICAKKyAgICBib29sIGlzUm9vdE5v
ZGUoKSBjb25zdDsKIAogICAgIFZlY3RvcjxSZWZQdHI8U2Nyb2xsaW5nVHJlZU5vZGU+PiogY2hp
bGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuLmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFJl
ZlB0cjxTY3JvbGxpbmdUcmVlTm9kZT4+KiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hp
bGRyZW4uZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAppbmRleCBkY2M5NmYxY2I2MjUx
NzkzMTExOWY5ZjBmNjM3NzgwNjg1MTJhNmY0Li42NDJmMTEwNmNhMzExODU2MTljN2ZiY2M3OTI3
NTRiNWViM2YzZjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCkBAIC05Myw2ICs5Myw5IEBA
IHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRy
ZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOCiAKICAgICBpZiAoc3RhdGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsYWJsZUFyZWFQYXJhbXMpKQog
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhUGFyYW1ldGVycyA9IHN0YXRlLnNjcm9sbGFibGVBcmVh
UGFyYW1ldGVycygpOworCisgICAgaWYgKHN0YXRlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OkV4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIpKQorICAg
ICAgICBtX2V4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIgPSBzdGF0ZS5leHBlY3RzV2hlZWxF
dmVudFRlc3RUcmlnZ2VyKCk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6
OmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRl
Tm9kZSkKQEAgLTE0Miw2ICsxNDUsMTYgQEAgYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZTo6c2Nyb2xsTGltaXRSZWFjaGVkKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2gKICAgICBy
ZXR1cm4gbmV3U2Nyb2xsUG9zaXRpb24gPT0gb2xkU2Nyb2xsUG9zaXRpb247CiB9CiAKK3ZvaWQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgZGVs
dGEpCit7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSArIGRlbHRhKTsK
K30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6c2Nyb2xsQnlXaXRob3V0Q29u
dGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKK3sKKyAgICBzZXRT
Y3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKHNjcm9sbFBvc2l0aW9u
KCkgKyBvZmZzZXQpOworfQorCiBMYXlvdXRQb2ludCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZTo6cGFyZW50VG9Mb2NhbFBvaW50KExheW91dFBvaW50IHBvaW50KSBjb25zdAogewogICAgIHJl
dHVybiBwb2ludCAtIHRvTGF5b3V0U2l6ZShwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0KCku
bG9jYXRpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAppbmRleCBmNjUyYjJkMjYxZTYzNzE4OGM2
OWJkMTNmNDQ3MTE5MmU5YmFhNTczLi5iOGY2NTY4NDI4ZDAwMzljMGZmMWQyODZmNjE1MzI5NzM4
YmI1OTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKQEAgLTMzLDE4ICszMywxNSBAQAogI2luY2x1
ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU5vZGUu
aCIKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi1jbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
U2Nyb2xsaW5nVHJlZTsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTsKIAogY2xh
c3MgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZU5vZGUg
ewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgZnJpZW5kIGNsYXNzIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGU7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGZyaWVuZCBj
bGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOwogI2VuZGlmCiAKIHB1
YmxpYzoKQEAgLTU5LDYgKzU2LDkgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRlbnRFZGdl
Q29uc3RyYWludHMoY29uc3QgRmxvYXRQb2ludCYpOwogCisgICAgdm9pZCBzY3JvbGxCeShjb25z
dCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3Ry
YWludHMoY29uc3QgRmxvYXRTaXplJik7CisKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJz
QWZ0ZXJWaWV3cG9ydENoYW5nZShjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBk
b3VibGUgc2NhbGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJEZWxl
Z2F0ZWRTY3JvbGwoY29uc3QgRmxvYXRQb2ludCYpIHsgfQogCkBAIC0xMDksNiArMTA5LDggQEAg
cHJvdGVjdGVkOgogCiAgICAgYm9vbCBjYW5IYXZlU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxiYXJNb2RlICE9IFNj
cm9sbGJhckFsd2F5c09mZiB8fCBtX3Njcm9sbGFibGVBcmVhUGFyYW1ldGVycy52ZXJ0aWNhbFNj
cm9sbGJhck1vZGUgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmOyB9CiAKKyAgICBib29sIGV4cGVjdHNX
aGVlbEV2ZW50VGVzdFRyaWdnZXIoKSBjb25zdCB7IHJldHVybiBtX2V4cGVjdHNXaGVlbEV2ZW50
VGVzdFRyaWdnZXI7IH0KKwogICAgIFdFQkNPUkVfRVhQT1JUIExheW91dFBvaW50IHBhcmVudFRv
TG9jYWxQb2ludChMYXlvdXRQb2ludCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBP
UlQgTGF5b3V0UG9pbnQgbG9jYWxUb0NvbnRlbnRzUG9pbnQoTGF5b3V0UG9pbnQpIGNvbnN0IG92
ZXJyaWRlOwogCkBAIC0xMjgsNiArMTMwLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2N1
cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4IHsgMCB9OwogI2VuZGlmCiAgICAgU2Nyb2xsYWJs
ZUFyZWFQYXJhbWV0ZXJzIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzOworICAgIGJvb2wgbV9l
eHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2VyIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHAKaW5kZXgg
YjNlNDc4ODRmZWVhZjJmYTZjMDIxMTFjZTRjYTlkMTJkOTYxNDFhNC4uOTczMzJjY2ZlMThlZGJh
OGU0ZTMxZmNjYTY3YmYyNmQzYjYxYTAxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZS5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9y
dCAiU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oIgogCi0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyNpZiBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKQogCiAjaW1wb3J0ICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oIgogCkBA
IC02Niw0ICs2Niw0IEBAIGNvbnN0IEludFBvaW50JiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlOjpzY3JvbGxPcmlnaW4oKSBjb25zdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQorI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlLmgKaW5kZXggNzhjY2MwMWUwYjlmNDdkMjcxMDhhOTZmNjE2YmQ4MjU0
YWQzZmM4Ny4uNGExNWEyZTZiOWM4ZjUxNWMzMTE4MmU1YzkwY2JlNzI2MjYyZDU5NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaApAQCAtMjUsMjAgKzI1LDE3IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7CisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaCIKIAotY2xhc3MgRmxv
YXRQb2ludDsKLWNsYXNzIEZsb2F0U2l6ZTsKLWNsYXNzIEludFBvaW50OwotY2xhc3MgU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGU7Ci1jbGFzcyBTY3JvbGxpbmdUcmVlOworbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlIHsKIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlKFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlJik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZSgpOworCiAg
ICAgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUmIHNjcm9sbGluZ05vZGUoKSB7IHJldHVybiBt
X3Njcm9sbGluZ05vZGU7IH0KICAgICBjb25zdCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYg
c2Nyb2xsaW5nTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZTsgfQogCkBAIC00
OSwxMCArNDYsMjMgQEAgcHJvdGVjdGVkOgogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZsb2F0
U2l6ZSYgcmVhY2hhYmxlQ29udGVudHNTaXplKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
SW50UG9pbnQmIHNjcm9sbE9yaWdpbigpIGNvbnN0OwogCisgICAgRmxvYXRQb2ludCBzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZS5zY3JvbGxQb3NpdGlvbigp
OyB9CisgICAgRmxvYXRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbGluZ05vZGUubWluaW11bVNjcm9sbFBvc2l0aW9uKCk7IH0KKyAgICBGbG9hdFBv
aW50IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTm9k
ZS5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsgfQorCisgICAgRmxvYXRTaXplIHNjcm9sbGFibGVB
cmVhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZS5zY3JvbGxhYmxlQXJlYVNp
emUoKTsgfQorICAgIEZsb2F0U2l6ZSB0b3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsaW5nTm9kZS50b3RhbENvbnRlbnRzU2l6ZSgpOyB9CisKKyAgICBib29sIGhhc0Vu
YWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdOb2Rl
Lmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc0VuYWJsZWRW
ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZS5oYXNFbmFi
bGVkVmVydGljYWxTY3JvbGxiYXIoKTsgfQorCisgICAgU2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9u
dGFsU2Nyb2xsRWxhc3RpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZS5ob3Jp
em9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpOyB9CisgICAgU2Nyb2xsRWxhc3RpY2l0eSB2ZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZ05vZGUudmVydGlj
YWxTY3JvbGxFbGFzdGljaXR5KCk7IH0KKwogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZSYgbV9zY3JvbGxpbmdOb2RlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLmgKaW5kZXggMTc4ZjFhZjY0NGFhZDM3MWMzN2QzZGYz
YTQ1ZDJiNGI5Yzk1MzJhZC4uNWJlMWJiMjhmMmJjZTc2YzZlNzMzOWNlMjE5OWY1NjU0ZjdhODZm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5oCkBAIC0yNywx
NyArMjcsMTcgQEAKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFBMQVRGT1JNKE1B
QykKIAotI2luY2x1ZGUgIlNjcm9sbENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZU1hYy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oIgorI2luY2x1ZGUg
IlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaCIKICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgQ0FMYXllcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
TWFjIDogcHVibGljIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUsIHByaXZhdGUgU2Ny
b2xsQ29udHJvbGxlckNsaWVudCB7CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlTWFjIDogcHVibGljIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZT4gY3JlYXRlKFNjcm9sbGluZ1RyZWUmLCBTY3JvbGxpbmdOb2RlVHlwZSwgU2Nyb2xs
aW5nTm9kZUlEKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
TWFjKCk7CkBAIC01MywxOSArNTMsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBTY3JvbGxpbmdFdmVu
dFJlc3VsdCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJy
aWRlOwogCi0gICAgLy8gU2Nyb2xsQ29udHJvbGxlciBtZW1iZXIgZnVuY3Rpb25zLgotICAgIGJv
b2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikg
b3ZlcnJpZGU7Ci0gICAgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgSW50U2l6ZSBzdHJldGNoQW1vdW50KCkgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBwaW5uZWRJbkRpcmVjdGlvbihjb25zdCBGbG9hdFNpemUmKSBvdmVy
cmlkZTsKLSAgICBib29sIGNhblNjcm9sbEhvcml6b250YWxseSgpIG92ZXJyaWRlOwotICAgIGJv
b2wgY2FuU2Nyb2xsVmVydGljYWxseSgpIG92ZXJyaWRlOwotICAgIGJvb2wgc2hvdWxkUnViYmVy
QmFuZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbW1l
ZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGltbWVk
aWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRTaXpl
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpIG92ZXJyaWRl
OwotICAgIHZvaWQgYWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgb3Zl
cnJpZGU7Ci0KICAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRz
KGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKQEAgLTc5LDI2ICs2Niw5IEBAIHByb3RlY3Rl
ZDoKIAogICAgIHZvaWQgdXBkYXRlTWFpbkZyYW1lUGluU3RhdGUoY29uc3QgRmxvYXRQb2ludCYg
c2Nyb2xsUG9zaXRpb24pOwogCi0gICAgYm9vbCBpc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9m
R2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBTY3JvbGxFdmVudEF4aXMpOwotCi0g
ICAgdm9pZCBkZWZlclRlc3RzRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xs
YWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdn
ZXJSZWFzb24pIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlVGVzdERlZmVycmFsRm9y
UmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBX
aGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0IG92ZXJy
aWRlOwotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQotICAg
IEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbW1l
ZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBkZWx0YSkgb3ZlcnJpZGU7
Ci0gICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
dGFydFNjcm9sbFNuYXBUaW1lcigpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcFNjcm9sbFNuYXBU
aW1lcigpIG92ZXJyaWRlOwotICAgIExheW91dFNpemUgc2Nyb2xsRXh0ZW50KCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IG92ZXJyaWRlOwotI2Vu
ZGlmCi0KICAgICB1bnNpZ25lZCBleHBvc2VkVW5maWxsZWRBcmVhKCkgY29uc3Q7CiAKIHByaXZh
dGU6Ci0gICAgU2Nyb2xsQ29udHJvbGxlciBtX3Njcm9sbENvbnRyb2xsZXI7Ci0KICAgICBSZXRh
aW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXI7CiAgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fY291bnRlclNj
cm9sbGluZ0xheWVyOwpAQCAtMTA5LDkgKzc5LDExIEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRy
PE5TU2Nyb2xsZXJJbXA+IG1fdmVydGljYWxTY3JvbGxlckltcDsKICAgICBSZXRhaW5QdHI8TlNT
Y3JvbGxlckltcD4gbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXA7CiAgICAgRmxvYXRQb2ludCBtX3By
b2JhYmxlTWFpblRocmVhZFNjcm9sbFBvc2l0aW9uOworICAgIAorICAgIFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMgbV9kZWxlZ2F0ZTsKKyAgICAKICAgICBib29sIG1fbGFz
dFNjcm9sbEhhZFVuZmlsbGVkUGl4ZWxzIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFkRmlyc3RV
cGRhdGUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9leHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2Vy
IHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0KaW5kZXggYjcxNjk3OWY5YjBlN2VlOWUzNDA2
NTQwYmQ2ZjVkZDExNjljMDZkYS4uZjY1MGIxYjdiZDM0OTE1ODFiMjU2YmM5ZWUyMWY3YmRhNjE1
MWQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0KQEAg
LTU0LDkgKzU0LDcgQEAgUmVmPFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+IFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmNyZWF0ZSgKIAogU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZU1hYzo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYyhT
Y3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSwg
U2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkKICAgICA6IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGUoc2Nyb2xsaW5nVHJlZSwgbm9kZVR5cGUsIG5vZGVJRCkKLSAgICAsIG1fc2Nyb2xsQ29u
dHJvbGxlcigqdGhpcykKLSAgICAsIG1fdmVydGljYWxTY3JvbGxlckltcChudWxscHRyKQotICAg
ICwgbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXAobnVsbHB0cikKKyAgICAsIG1fZGVsZWdhdGUoKnRo
aXMpCiB7CiB9CiAKQEAgLTE1MCwyMSArMTQ4LDE4IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZU1hYzo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxp
CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpI
b3Jpem9udGFsU25hcE9mZnNldHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFwT2Zm
c2V0UmFuZ2VzKSkKLSAgICAgICAgbV9zY3JvbGxDb250cm9sbGVyLnVwZGF0ZVNjcm9sbFNuYXBQ
b2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhz
Y3JvbGxpbmdTdGF0ZU5vZGUuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpLCBjb252ZXJ0VG9MYXlv
dXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoKSkp
OworICAgICAgICBtX2RlbGVnYXRlLnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsRXZlbnRB
eGlzOjpIb3Jpem9udGFsLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUu
aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdT
dGF0ZU5vZGUuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoKSkpOwogCiAgICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9s
bGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OlZlcnRpY2Fs
U25hcE9mZnNldFJhbmdlcykpCi0gICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci51cGRhdGVTY3Jv
bGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIGNvbnZlcnRUb0xheW91dFVu
aXRzKHNjcm9sbGluZ1N0YXRlTm9kZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpLCBjb252ZXJ0VG9M
YXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUudmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKCkp
KTsKKyAgICAgICAgbV9kZWxlZ2F0ZS51cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50
QXhpczo6VmVydGljYWwsIGNvbnZlcnRUb0xheW91dFVuaXRzKHNjcm9sbGluZ1N0YXRlTm9kZS52
ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0
ZU5vZGUudmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKCkpKTsKIAogICAgIGlmIChzY3JvbGxpbmdT
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
Q3VycmVudEhvcml6b250YWxTbmFwT2Zmc2V0SW5kZXgpKQotICAgICAgICBtX3Njcm9sbENvbnRy
b2xsZXIuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwsIHNjcm9sbGluZ1N0YXRlTm9kZS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludElu
ZGV4KCkpOworICAgICAgICBtX2RlbGVnYXRlLnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4
aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBzY3JvbGxpbmdTdGF0ZU5vZGUuY3VycmVu
dEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpKTsKICAgICAKICAgICBpZiAoc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OkN1
cnJlbnRWZXJ0aWNhbFNuYXBPZmZzZXRJbmRleCkpCi0gICAgICAgIG1fc2Nyb2xsQ29udHJvbGxl
ci5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGlj
YWwsIHNjcm9sbGluZ1N0YXRlTm9kZS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKTsK
KyAgICAgICAgbV9kZWxlZ2F0ZS5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9s
bEV2ZW50QXhpczo6VmVydGljYWwsIHNjcm9sbGluZ1N0YXRlTm9kZS5jdXJyZW50VmVydGljYWxT
bmFwUG9pbnRJbmRleCgpKTsKICNlbmRpZgogCi0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5o
YXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpFeHBlY3RzV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyKSkKLSAgICAgICAgbV9leHBlY3RzV2hlZWxFdmVudFRlc3RUcmln
Z2VyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmV4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIoKTsK
LQogICAgIG1faGFkRmlyc3RVcGRhdGUgPSB0cnVlOwogfQogCkBAIC0xOTksMTkgKzE5NCwyMCBA
QCBTY3JvbGxpbmdFdmVudFJlc3VsdCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
OjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0CiAgICAgfQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkgfHwgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGlmIChtX2V4cGVjdHNXaGVlbEV2
ZW50VGVzdFRyaWdnZXIpIHsKKyAgICBpZiAoZXhwZWN0c1doZWVsRXZlbnRUZXN0VHJpZ2dlcigp
KSB7CiAgICAgICAgIGlmIChzY3JvbGxpbmdUcmVlKCkuc2hvdWxkSGFuZGxlV2hlZWxFdmVudFN5
bmNocm9ub3VzbHkod2hlZWxFdmVudCkpCi0gICAgICAgICAgICByZW1vdmVUZXN0RGVmZXJyYWxG
b3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFi
bGVBcmVhSWRlbnRpZmllcj4oc2Nyb2xsaW5nTm9kZUlEKCkpLCBXaGVlbEV2ZW50VGVzdFRyaWdn
ZXI6OlNjcm9sbGluZ1RocmVhZFN5bmNOZWVkZWQpOworICAgICAgICAgICAgbV9kZWxlZ2F0ZS5y
ZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVz
dFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4oc2Nyb2xsaW5nTm9kZUlEKCkpLCBX
aGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGluZ1RocmVhZFN5bmNOZWVkZWQpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBkZWZlclRlc3RzRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8
V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHNjcm9sbGlu
Z05vZGVJRCgpKSwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxpbmdUaHJlYWRTeW5jTmVl
ZGVkKTsKKyAgICAgICAgICAgIG1fZGVsZWdhdGUuZGVmZXJUZXN0c0ZvclJlYXNvbihyZWludGVy
cHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVy
PihzY3JvbGxpbmdOb2RlSUQoKSksIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsaW5nVGhy
ZWFkU3luY05lZWRlZCk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBtX3Njcm9sbENvbnRyb2xsZXIu
aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICBtX2RlbGVnYXRlLmhhbmRsZVdoZWVs
RXZlbnQod2hlZWxFdmVudCk7CisKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHNj
cm9sbGluZ1RyZWUoKS5zZXRNYWluRnJhbWVJc1Njcm9sbFNuYXBwaW5nKG1fc2Nyb2xsQ29udHJv
bGxlci5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCkpOwotICAgIGlmIChtX3Njcm9sbENvbnRyb2xs
ZXIuYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKCkpCi0gICAgICAgIHNjcm9sbGluZ1Ry
ZWUoKS5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlcyhzY3JvbGxpbmdOb2RlSUQoKSwgbV9zY3Jv
bGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsKSwgbV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZv
ckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOworICAgIHNjcm9sbGluZ1RyZWUoKS5z
ZXRNYWluRnJhbWVJc1Njcm9sbFNuYXBwaW5nKG1fZGVsZWdhdGUuaXNTY3JvbGxTbmFwSW5Qcm9n
cmVzcygpKTsKKyAgICBpZiAobV9kZWxlZ2F0ZS5hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFu
Z2UoKSkKKyAgICAgICAgc2Nyb2xsaW5nVHJlZSgpLnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRpY2Vz
KHNjcm9sbGluZ05vZGVJRCgpLCBtX2RlbGVnYXRlLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4
aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSwgbV9kZWxlZ2F0ZS5hY3RpdmVTY3JvbGxT
bmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKICNlbmRpZgogICAg
IHNjcm9sbGluZ1RyZWUoKS5zZXRPckNsZWFyTGF0Y2hlZE5vZGUod2hlZWxFdmVudCwgc2Nyb2xs
aW5nTm9kZUlEKCkpOwogICAgIHNjcm9sbGluZ1RyZWUoKS5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uo
d2hlZWxFdmVudC5waGFzZSgpKTsKQEAgLTIyMCwxNTQgKzIxNiw2IEBAIFNjcm9sbGluZ0V2ZW50
UmVzdWx0IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmhhbmRsZVdoZWVsRXZl
bnQoY29uc3QKICAgICByZXR1cm4gU2Nyb2xsaW5nRXZlbnRSZXN1bHQ6OkRpZEhhbmRsZUV2ZW50
OwogfQogCi0vLyBGSVhNRTogV2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8gc2hhcmUgc29tZSBvZiB0
aGUgY29kZSBmcm9tIG5ld0dlc3R1cmVJc1N0YXJ0aW5nKCksIGlzQWxyZWFkeVBpbm5lZEluRGly
ZWN0aW9uT2ZHZXN0dXJlKCksCi0vLyBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSwgYW5kIGFs
bG93c0hvcml6b250YWxTdHJldGNoaW5nKCkgd2l0aCB0aGUgaW1wbGVtZW50YXRpb24gaW4gU2Ny
b2xsQW5pbWF0b3JNYWMuCi1zdGF0aWMgYm9vbCBuZXdHZXN0dXJlSXNTdGFydGluZyhjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0gICAgcmV0dXJuIHdoZWVsRXZlbnQu
cGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU1heUJlZ2luIHx8IHdoZWVsRXZlbnQu
cGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuOwotfQotCi1ib29sIFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9u
T2ZHZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgU2Nyb2xsRXZl
bnRBeGlzIGF4aXMpCi17Ci0gICAgc3dpdGNoIChheGlzKSB7Ci0gICAgY2FzZSBTY3JvbGxFdmVu
dEF4aXM6OlZlcnRpY2FsOgotICAgICAgICByZXR1cm4gKHdoZWVsRXZlbnQuZGVsdGFZKCkgPiAw
ICYmIHNjcm9sbFBvc2l0aW9uKCkueSgpIDw9IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSkg
fHwgKHdoZWVsRXZlbnQuZGVsdGFZKCkgPCAwICYmIHNjcm9sbFBvc2l0aW9uKCkueSgpID49IG1h
eGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSk7Ci0gICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWw6Ci0gICAgICAgIHJldHVybiAod2hlZWxFdmVudC5kZWx0YVgoKSA+IDAgJiYgc2Ny
b2xsUG9zaXRpb24oKS54KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgpKSB8fCAod2hl
ZWxFdmVudC5kZWx0YVgoKSA8IDAgJiYgc2Nyb2xsUG9zaXRpb24oKS54KCkgPj0gbWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkueCgpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiB3aGVlbEV2ZW50KQotewotICAgIHN3aXRjaCAoaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNp
dHkoKSkgewotICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogewotICAgICAgICBi
b29sIHNjcm9sbGJhcnNBbGxvd1N0cmV0Y2hpbmcgPSBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9s
bGJhcigpIHx8ICFoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICAgICAgYm9vbCBl
dmVudFByZXZlbnRzU3RyZXRjaGluZyA9IG5ld0dlc3R1cmVJc1N0YXJ0aW5nKHdoZWVsRXZlbnQp
ICYmIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKHdoZWVsRXZlbnQsIFNjcm9s
bEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJzQWxsb3dT
dHJldGNoaW5nICYmICFldmVudFByZXZlbnRzU3RyZXRjaGluZzsKLSAgICB9Ci0gICAgY2FzZSBT
Y3JvbGxFbGFzdGljaXR5Tm9uZToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgU2Ny
b2xsRWxhc3RpY2l0eUFsbG93ZWQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmco
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIHN3aXRjaCAodmVy
dGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRv
bWF0aWM6IHsKLSAgICAgICAgYm9vbCBzY3JvbGxiYXJzQWxsb3dTdHJldGNoaW5nID0gaGFzRW5h
YmxlZFZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgIWhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFy
KCk7Ci0gICAgICAgIGJvb2wgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBuZXdHZXN0dXJlSXNT
dGFydGluZyh3aGVlbEV2ZW50KSAmJiBpc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVy
ZSh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKTsKLSAgICAgICAgcmV0dXJu
IHNjcm9sbGJhcnNBbGxvd1N0cmV0Y2hpbmcgJiYgIWV2ZW50UHJldmVudHNTdHJldGNoaW5nOwot
ICAgIH0KLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1JbnRTaXplIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnN0cmV0
Y2hBbW91bnQoKQotewotICAgIEludFNpemUgc3RyZXRjaDsKLQotICAgIGlmIChzY3JvbGxQb3Np
dGlvbigpLnkoKSA8IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSkKLSAgICAgICAgc3RyZXRj
aC5zZXRIZWlnaHQoc2Nyb2xsUG9zaXRpb24oKS55KCkgLSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24o
KS55KCkpOwotICAgIGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uKCkueSgpID4gbWF4aW11bVNjcm9s
bFBvc2l0aW9uKCkueSgpKQotICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxQb3NpdGlv
bigpLnkoKSAtIG1heGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSk7Ci0KLSAgICBpZiAoc2Nyb2xs
UG9zaXRpb24oKS54KCkgPCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkpCi0gICAgICAgIHN0
cmV0Y2guc2V0V2lkdGgoc2Nyb2xsUG9zaXRpb24oKS54KCkgLSBtaW5pbXVtU2Nyb2xsUG9zaXRp
b24oKS54KCkpOwotICAgIGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uKCkueCgpID4gbWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkueCgpKQotICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbFBvc2l0
aW9uKCkueCgpIC0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueCgpKTsKLQotICAgIGlmIChzY3Jv
bGxpbmdUcmVlKCkucm9vdE5vZGUoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGlmIChzdHJldGNoLmlz
WmVybygpKQotICAgICAgICAgICAgc2Nyb2xsaW5nVHJlZSgpLnNldE1haW5GcmFtZUlzUnViYmVy
QmFuZGluZyhmYWxzZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNjcm9sbGluZ1RyZWUo
KS5zZXRNYWluRnJhbWVJc1J1YmJlckJhbmRpbmcodHJ1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHN0cmV0Y2g7Ci19Ci0KLWJvb2wgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6
cGlubmVkSW5EaXJlY3Rpb24oY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKLXsKLSAgICBGbG9hdFNp
emUgbGltaXREZWx0YTsKLQotICAgIGlmIChmYWJzZihkZWx0YS5oZWlnaHQoKSkgPj0gZmFic2Yo
ZGVsdGEud2lkdGgoKSkpIHsKLSAgICAgICAgaWYgKGRlbHRhLmhlaWdodCgpIDwgMCkgewotICAg
ICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgdXAuIE1ha2Ugc3VyZSB3ZSBhcmUg
bm90IHBpbm5lZCB0byB0aGUgdG9wLgotICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQo
c2Nyb2xsUG9zaXRpb24oKS55KCkgLSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgZG93
bi4gTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSBib3R0b20uCi0gICAgICAgICAg
ICBsaW1pdERlbHRhLnNldEhlaWdodChtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkgLSBzY3Jv
bGxQb3NpdGlvbigpLnkoKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGRlbHRhLndpZHRo
KCkpIHsKLSAgICAgICAgaWYgKGRlbHRhLndpZHRoKCkgPCAwKSB7Ci0gICAgICAgICAgICAvLyBX
ZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCBsZWZ0LiBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQg
dG8gdGhlIGxlZnQuCi0gICAgICAgICAgICBsaW1pdERlbHRhLnNldFdpZHRoKHNjcm9sbFBvc2l0
aW9uKCkueCgpIC0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgpKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHJpZ2h0LiBNYWtlIHN1
cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIHJpZ2h0LgotICAgICAgICAgICAgbGltaXREZWx0
YS5zZXRXaWR0aChtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkgLSBzY3JvbGxQb3NpdGlvbigp
LngoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoKGRlbHRhLndpZHRoKCkgfHwgZGVs
dGEuaGVpZ2h0KCkpICYmIChsaW1pdERlbHRhLndpZHRoKCkgPCAxICYmIGxpbWl0RGVsdGEuaGVp
Z2h0KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6Y2FuU2Nyb2xsSG9y
aXpvbnRhbGx5KCkKLXsKLSAgICByZXR1cm4gaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIo
KTsKLX0KLQotYm9vbCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpjYW5TY3Jv
bGxWZXJ0aWNhbGx5KCkKLXsKLSAgICByZXR1cm4gaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFy
KCk7Ci19Ci0KLWJvb2wgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2hvdWxk
UnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikKLXsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjppbW1lZGlh
dGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIGRlbHRhKQotewotICAgIHNjcm9sbEJ5KGRlbHRh
KTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjppbW1lZGlh
dGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYg
b2Zmc2V0KQotewotICAgIHNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMob2Zm
c2V0KTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpzdG9w
U25hcFJ1YmJlcmJhbmRUaW1lcigpCi17Ci0gICAgc2Nyb2xsaW5nVHJlZSgpLnNldE1haW5GcmFt
ZUlzUnViYmVyQmFuZGluZyhmYWxzZSk7Ci0KLSAgICAvLyBTaW5jZSB0aGUgcnViYmVyYmFuZCB0
aW1lciBoYXMgc3RvcHBlZCwgdG90YWxDb250ZW50c1NpemVGb3JSdWJiZXJCYW5kIGNhbiBiZSBz
eW5jaHJvbml6ZWQgd2l0aCB0b3RhbENvbnRlbnRzU2l6ZS4KLSAgICBzZXRUb3RhbENvbnRlbnRz
U2l6ZUZvclJ1YmJlckJhbmQodG90YWxDb250ZW50c1NpemUoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5k
c0lmTmVjZXNzYXJ5KCkKLXsKLSAgICBGbG9hdFBvaW50IGN1cnJlbnRTY3JvbGxQb3NpdGlvbiA9
IHNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgRmxvYXRQb2ludCBjb25zdHJhaW5lZFBvc2l0aW9uID0g
Y3VycmVudFNjcm9sbFBvc2l0aW9uLmNvbnN0cmFpbmVkQmV0d2VlbihtaW5pbXVtU2Nyb2xsUG9z
aXRpb24oKSwgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGltbWVkaWF0ZVNjcm9sbEJ5
KGNvbnN0cmFpbmVkUG9zaXRpb24gLSBjdXJyZW50U2Nyb2xsUG9zaXRpb24pOwotfQotCiBGbG9h
dFBvaW50IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9sbFBvc2l0aW9u
KCkgY29uc3QKIHsKICAgICBpZiAoc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvblN5bmNo
cm9ub3VzbHkoKSkKQEAgLTUwNCw3ICszNTIsNyBAQCBGbG9hdFBvaW50IFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVNYWM6Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7CiAg
ICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkZy
b21PZmZzZXQoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShzY3JvbGxPcmlnaW4oKSkpOwogICAg
IAotICAgIGlmIChzY3JvbGxpbmdUcmVlKCkucm9vdE5vZGUoKSA9PSB0aGlzICYmIHNjcm9sbGlu
Z1RyZWUoKS5zY3JvbGxQaW5uaW5nQmVoYXZpb3IoKSA9PSBQaW5Ub0JvdHRvbSkKKyAgICBpZiAo
aXNSb290Tm9kZSgpICYmIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxQaW5uaW5nQmVoYXZpb3IoKSA9
PSBQaW5Ub0JvdHRvbSkKICAgICAgICAgcG9zaXRpb24uc2V0WShtYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKS55KCkpOwogCiAgICAgcmV0dXJuIHBvc2l0aW9uOwpAQCAtNTE1LDcgKzM2Myw3IEBAIEZs
b2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6bWF4aW11bVNjcm9s
bFBvc2l0aW9uKCkgY29uc3QKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChGbG9hdFBvaW50KHRvdGFsQ29udGVudHNTaXpl
Rm9yUnViYmVyQmFuZCgpIC0gc2Nyb2xsYWJsZUFyZWFTaXplKCkpLCB0b0Zsb2F0U2l6ZShzY3Jv
bGxPcmlnaW4oKSkpOwogICAgIHBvc2l0aW9uID0gcG9zaXRpb24uZXhwYW5kZWRUbyhGbG9hdFBv
aW50KCkpOwogCi0gICAgaWYgKHNjcm9sbGluZ1RyZWUoKS5yb290Tm9kZSgpID09IHRoaXMgJiYg
c2Nyb2xsaW5nVHJlZSgpLnNjcm9sbFBpbm5pbmdCZWhhdmlvcigpID09IFBpblRvVG9wKQorICAg
IGlmIChpc1Jvb3ROb2RlKCkgJiYgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbFBpbm5pbmdCZWhhdmlv
cigpID09IFBpblRvVG9wKQogICAgICAgICBwb3NpdGlvbi5zZXRZKG1pbmltdW1TY3JvbGxQb3Np
dGlvbigpLnkoKSk7CiAKICAgICByZXR1cm4gcG9zaXRpb247CkBAIC01NjAsNjkgKzQwOCw2IEBA
IHVuc2lnbmVkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmV4cG9zZWRVbmZp
bGxlZEFyZWEoKSBjb25zdAogICAgIHJldHVybiBUaWxlQ29udHJvbGxlcjo6YmxhbmtQaXhlbENv
dW50Rm9yVGlsZXModGlsZXMsIHZpZXdQb3J0UmVjdCwgSW50UG9pbnQoLXNjcm9sbFBvc2l0aW9u
LngoKSwgLXNjcm9sbFBvc2l0aW9uLnkoKSkpOwogfQogCi0jaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKLUZsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2Ny
b2xsT2Zmc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKTsKLX0KLQot
dm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjppbW1lZGlhdGVTY3JvbGxP
bkF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IGRlbHRhKQotewotICAgIGNvbnN0IEZs
b2F0UG9pbnQmIGN1cnJlbnRQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgRmxvYXRQ
b2ludCBjaGFuZ2U7Ci0gICAgaWYgKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
KQotICAgICAgICBjaGFuZ2UgPSBGbG9hdFBvaW50KGN1cnJlbnRQb3NpdGlvbi54KCkgKyBkZWx0
YSwgY3VycmVudFBvc2l0aW9uLnkoKSk7Ci0gICAgZWxzZQotICAgICAgICBjaGFuZ2UgPSBGbG9h
dFBvaW50KGN1cnJlbnRQb3NpdGlvbi54KCksIGN1cnJlbnRQb3NpdGlvbi55KCkgKyBkZWx0YSk7
Ci0KLSAgICBpbW1lZGlhdGVTY3JvbGxCeShjaGFuZ2UgLSBjdXJyZW50UG9zaXRpb24pOwotfQot
Ci1mbG9hdCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpwYWdlU2NhbGVGYWN0
b3IoKSBjb25zdAotewotICAgIHJldHVybiBmcmFtZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLXZvaWQg
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c3RhcnRTY3JvbGxTbmFwVGltZXIo
KQotewotICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRNYWluRnJhbWVJc1Njcm9sbFNuYXBwaW5nKHRy
dWUpOwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnN0b3BT
Y3JvbGxTbmFwVGltZXIoKQotewotICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRNYWluRnJhbWVJc1Nj
cm9sbFNuYXBwaW5nKGZhbHNlKTsKLX0KLSAgICAKLUxheW91dFNpemUgU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2Nyb2xsRXh0ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
TGF5b3V0U2l6ZSh0b3RhbENvbnRlbnRzU2l6ZSgpKTsKLX0KLQotRmxvYXRTaXplIFNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHNjcm9sbGFibGVBcmVhU2l6ZSgpOwotfQotCi0jZW5kaWYKLQotdm9pZCBTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpkZWZlclRlc3RzRm9yUmVhc29uKFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdoZWVs
RXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNvbiByZWFzb24pIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2V4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIExPRyhXaGVlbEV2ZW50VGVzdFRyaWdnZXJzLCAiICBTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlTWFjOjpkZWZlclRlc3RzRm9yUmVhc29uOiBTVEFSVElORyBkZWZlcnJh
bCBmb3IgJXAgYmVjYXVzZSBvZiAlZCIsIGlkZW50aWZpZXIsIHJlYXNvbik7Ci0gICAgc2Nyb2xs
aW5nVHJlZSgpLmRlZmVyVGVzdHNGb3JSZWFzb24oaWRlbnRpZmllciwgcmVhc29uKTsKLX0KLSAg
ICAKLXZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6cmVtb3ZlVGVzdERl
ZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dl
clJlYXNvbiByZWFzb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2V4cGVjdHNXaGVlbEV2ZW50VGVz
dFRyaWdnZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBMT0coV2hlZWxFdmVudFRlc3RU
cmlnZ2VycywgIiAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmRlZmVyVGVz
dHNGb3JSZWFzb246IEVORElORyBkZWZlcnJhbCBmb3IgJXAgYmVjYXVzZSBvZiAlZCIsIGlkZW50
aWZpZXIsIHJlYXNvbik7Ci0gICAgc2Nyb2xsaW5nVHJlZSgpLnJlbW92ZVRlc3REZWZlcnJhbEZv
clJlYXNvbihpZGVudGlmaWVyLCByZWFzb24pOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShNQUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kMTQ0MmNkMGM3MzQ0MWRjOTJmM2I4NGFkYzg4NGIxNTJiODFjMzg0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVNYWMuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
LmgiCisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNp
bmNsdWRlICJTY3JvbGxDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRmxvYXRQb2ludDsKK2NsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEludFBvaW50OworY2xhc3Mg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU7CitjbGFzcyBTY3JvbGxpbmdUcmVlOworCitjbGFz
cyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjIDogcHVibGljIFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUsIHByaXZhdGUgU2Nyb2xsQ29udHJvbGxlckNsaWVu
dCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZU1hYyhTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYpOworICAgIHZpcnR1YWwgflNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMoKTsKKworICAgIGJvb2wgaGFuZGxlV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKworI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCisgICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhp
cywgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiwgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJh
bmdlPExheW91dFVuaXQ+PiYpOworICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9y
QXhpcyhTY3JvbGxFdmVudEF4aXMsIHVuc2lnbmVkKTsKKyAgICBib29sIGFjdGl2ZVNjcm9sbFNu
YXBJbmRleERpZENoYW5nZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGFjdGl2ZVNjcm9sbFNuYXBJ
bmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKKyAgICBib29sIGlzU2Nyb2xsU25h
cEluUHJvZ3Jlc3MoKSBjb25zdDsKKyNlbmRpZgorCisgICAgdm9pZCBkZWZlclRlc3RzRm9yUmVh
c29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVl
bEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgcmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJp
Z2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRl
ZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGJv
b2wgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiwgU2Nyb2xsRXZlbnRBeGlzKTsKKworICAgIC8vIFNjcm9sbENvbnRyb2xsZXJDbGll
bnQuCisgICAgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmKSBvdmVycmlkZTsKKyAgICBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyhj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKyAgICBJbnRTaXplIHN0cmV0Y2hB
bW91bnQoKSBvdmVycmlkZTsKKyAgICBib29sIHBpbm5lZEluRGlyZWN0aW9uKGNvbnN0IEZsb2F0
U2l6ZSYpIG92ZXJyaWRlOworICAgIGJvb2wgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5KCkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBjYW5TY3JvbGxWZXJ0aWNhbGx5KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBz
aG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9uKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOworICAg
IHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25z
dCBGbG9hdFNpemUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVy
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNl
c3NhcnkoKSBvdmVycmlkZTsKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgRmxv
YXRQb2ludCBzY3JvbGxPZmZzZXQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGltbWVkaWF0
ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlbHRhKSBvdmVycmlkZTsKKyAg
ICBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHN0YXJ0
U2Nyb2xsU25hcFRpbWVyKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVy
KCkgb3ZlcnJpZGU7CisgICAgTGF5b3V0U2l6ZSBzY3JvbGxFeHRlbnQoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplKCkgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYK
KworICAgIFNjcm9sbENvbnRyb2xsZXIgbV9zY3JvbGxDb250cm9sbGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42ODIzMTMxZWExMmFlMGQ1YjkyOTI3MGNkYTBiYjU1ZjZmNjMz
ZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KQEAgLTAsMCArMSwyOTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaCIKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKKworI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiU2Ny
b2xsaW5nVHJlZS5oIgorI2ltcG9ydCAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5o
IgorI2ltcG9ydCAiU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjKFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
JiBzY3JvbGxpbmdOb2RlKQorICAgIDogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZShzY3JvbGxpbmdOb2RlKQorICAgICwgbV9zY3JvbGxDb250cm9sbGVyKCp0aGlzKQoreworfQor
CitTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjp+U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYygpID0gZGVmYXVsdDsKKwordm9pZCBTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjp1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2
ZW50QXhpcyBheGlzLCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBjb25z
dCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBzbmFwUmFuZ2VzKQorewor
ICAgIG1fc2Nyb2xsQ29udHJvbGxlci51cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGF4aXMsIHNuYXBP
ZmZzZXRzLCBzbmFwUmFuZ2VzKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlTWFjOjpzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50
QXhpcyBheGlzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBtX3Njcm9sbENvbnRyb2xsZXIuc2V0
QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhheGlzLCBpbmRleCk7Cit9CisKK3Vuc2lnbmVk
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFjdGl2ZVNjcm9sbFNuYXBJ
bmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c2Nyb2xsQ29udHJvbGxlci5hY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKGF4aXMpOworfQor
Citib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFjdGl2ZVNjcm9s
bFNuYXBJbmRleERpZENoYW5nZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsQ29udHJv
bGxlci5hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoKTsKK30KKworYm9vbCBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxDb250
cm9sbGVyLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Cit9CisKK2Jvb2wgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsQ29udHJvbGxlci5pc1Njcm9sbFNuYXBJblByb2dy
ZXNzKCk7Cit9CisKKy8vIEZJWE1FOiBXZSBzaG91bGQgZmluZCBhIHdheSB0byBzaGFyZSBzb21l
IG9mIHRoZSBjb2RlIGZyb20gbmV3R2VzdHVyZUlzU3RhcnRpbmcoKSwgaXNBbHJlYWR5UGlubmVk
SW5EaXJlY3Rpb25PZkdlc3R1cmUoKSwKKy8vIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpLCBh
bmQgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBp
biBTY3JvbGxBbmltYXRvck1hYy4KK3N0YXRpYyBib29sIG5ld0dlc3R1cmVJc1N0YXJ0aW5nKGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICByZXR1cm4gd2hlZWxF
dmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTWF5QmVnaW4gfHwgd2hlZWxF
dmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW47Cit9CisKK2Jvb2wg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6aXNBbHJlYWR5UGlubmVkSW5E
aXJlY3Rpb25PZkdlc3R1cmUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBT
Y3JvbGxFdmVudEF4aXMgYXhpcykKK3sKKyAgICBzd2l0Y2ggKGF4aXMpIHsKKyAgICBjYXNlIFNj
cm9sbEV2ZW50QXhpczo6VmVydGljYWw6CisgICAgICAgIHJldHVybiAod2hlZWxFdmVudC5kZWx0
YVkoKSA+IDAgJiYgc2Nyb2xsUG9zaXRpb24oKS55KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9u
KCkueSgpKSB8fCAod2hlZWxFdmVudC5kZWx0YVkoKSA8IDAgJiYgc2Nyb2xsUG9zaXRpb24oKS55
KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpKTsKKyAgICBjYXNlIFNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbDoKKyAgICAgICAgcmV0dXJuICh3aGVlbEV2ZW50LmRlbHRhWCgpID4g
MCAmJiBzY3JvbGxQb3NpdGlvbigpLngoKSA8PSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkp
IHx8ICh3aGVlbEV2ZW50LmRlbHRhWCgpIDwgMCAmJiBzY3JvbGxQb3NpdGlvbigpLngoKSA+PSBt
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlTWFjOjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgc3dpdGNoIChob3Jpem9udGFsU2Ny
b2xsRWxhc3RpY2l0eSgpKSB7CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljOiB7
CisgICAgICAgIGJvb2wgc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyA9IGhhc0VuYWJsZWRIb3Jp
em9udGFsU2Nyb2xsYmFyKCkgfHwgIWhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcigpOworICAg
ICAgICBib29sIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gbmV3R2VzdHVyZUlzU3RhcnRpbmco
d2hlZWxFdmVudCkgJiYgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUod2hlZWxF
dmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKyAgICAgICAgcmV0dXJuIHNjcm9s
bGJhcnNBbGxvd1N0cmV0Y2hpbmcgJiYgIWV2ZW50UHJldmVudHNTdHJldGNoaW5nOworICAgIH0K
KyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFsbG93c1ZlcnRp
Y2FsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7Cisg
ICAgc3dpdGNoICh2ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKSkgeworICAgIGNhc2UgU2Nyb2xs
RWxhc3RpY2l0eUF1dG9tYXRpYzogeworICAgICAgICBib29sIHNjcm9sbGJhcnNBbGxvd1N0cmV0
Y2hpbmcgPSBoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoKSB8fCAhaGFzRW5hYmxlZEhvcml6
b250YWxTY3JvbGxiYXIoKTsKKyAgICAgICAgYm9vbCBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9
IG5ld0dlc3R1cmVJc1N0YXJ0aW5nKHdoZWVsRXZlbnQpICYmIGlzQWxyZWFkeVBpbm5lZEluRGly
ZWN0aW9uT2ZHZXN0dXJlKHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpOwor
ICAgICAgICByZXR1cm4gc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyAmJiAhZXZlbnRQcmV2ZW50
c1N0cmV0Y2hpbmc7CisgICAgfQorICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eU5vbmU6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBbGxvd2VkOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0ludFNpemUgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZU1hYzo6c3RyZXRjaEFtb3VudCgpCit7CisgICAgSW50U2l6ZSBzdHJldGNoOworCisg
ICAgaWYgKHNjcm9sbFBvc2l0aW9uKCkueSgpIDwgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueSgp
KQorICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxQb3NpdGlvbigpLnkoKSAtIG1pbmlt
dW1TY3JvbGxQb3NpdGlvbigpLnkoKSk7CisgICAgZWxzZSBpZiAoc2Nyb2xsUG9zaXRpb24oKS55
KCkgPiBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpCisgICAgICAgIHN0cmV0Y2guc2V0SGVp
Z2h0KHNjcm9sbFBvc2l0aW9uKCkueSgpIC0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpKTsK
KworICAgIGlmIChzY3JvbGxQb3NpdGlvbigpLngoKSA8IG1pbmltdW1TY3JvbGxQb3NpdGlvbigp
LngoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxQb3NpdGlvbigpLngoKSAtIG1p
bmltdW1TY3JvbGxQb3NpdGlvbigpLngoKSk7CisgICAgZWxzZSBpZiAoc2Nyb2xsUG9zaXRpb24o
KS54KCkgPiBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkpCisgICAgICAgIHN0cmV0Y2guc2V0
V2lkdGgoc2Nyb2xsUG9zaXRpb24oKS54KCkgLSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkp
OworCisgICAgaWYgKHNjcm9sbGluZ05vZGUoKS5pc1Jvb3ROb2RlKCkpIHsKKyAgICAgICAgaWYg
KHN0cmV0Y2guaXNaZXJvKCkpCisgICAgICAgICAgICBzY3JvbGxpbmdUcmVlKCkuc2V0TWFpbkZy
YW1lSXNSdWJiZXJCYW5kaW5nKGZhbHNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2Ny
b2xsaW5nVHJlZSgpLnNldE1haW5GcmFtZUlzUnViYmVyQmFuZGluZyh0cnVlKTsKKyAgICB9CisK
KyAgICByZXR1cm4gc3RyZXRjaDsKK30KKworYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlTWFjOjpwaW5uZWRJbkRpcmVjdGlvbihjb25zdCBGbG9hdFNpemUmIGRlbHRhKQor
eworICAgIEZsb2F0U2l6ZSBsaW1pdERlbHRhOworCisgICAgaWYgKGZhYnNmKGRlbHRhLmhlaWdo
dCgpKSA+PSBmYWJzZihkZWx0YS53aWR0aCgpKSkgeworICAgICAgICBpZiAoZGVsdGEuaGVpZ2h0
KCkgPCAwKSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCB1cC4gTWFr
ZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSB0b3AuCisgICAgICAgICAgICBsaW1pdERl
bHRhLnNldEhlaWdodChzY3JvbGxQb3NpdGlvbigpLnkoKSAtIG1pbmltdW1TY3JvbGxQb3NpdGlv
bigpLnkoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5n
IHRvIHNjcm9sbCBkb3duLiBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGJvdHRv
bS4KKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1heGltdW1TY3JvbGxQb3NpdGlv
bigpLnkoKSAtIHNjcm9sbFBvc2l0aW9uKCkueSgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAoZGVsdGEud2lkdGgoKSkgeworICAgICAgICBpZiAoZGVsdGEud2lkdGgoKSA8IDApIHsKKyAg
ICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGxlZnQuIE1ha2Ugc3VyZSB3ZSBh
cmUgbm90IHBpbm5lZCB0byB0aGUgbGVmdC4KKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lk
dGgoc2Nyb2xsUG9zaXRpb24oKS54KCkgLSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwg
cmlnaHQuIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgcmlnaHQuCisgICAgICAg
ICAgICBsaW1pdERlbHRhLnNldFdpZHRoKG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSAtIHNj
cm9sbFBvc2l0aW9uKCkueCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgoZGVsdGEu
d2lkdGgoKSB8fCBkZWx0YS5oZWlnaHQoKSkgJiYgKGxpbWl0RGVsdGEud2lkdGgoKSA8IDEgJiYg
bGltaXREZWx0YS5oZWlnaHQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
TWFjOjpjYW5TY3JvbGxIb3Jpem9udGFsbHkoKQoreworICAgIHJldHVybiBoYXNFbmFibGVkSG9y
aXpvbnRhbFNjcm9sbGJhcigpOworfQorCitib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVNYWM6OmNhblNjcm9sbFZlcnRpY2FsbHkoKQoreworICAgIHJldHVybiBoYXNFbmFi
bGVkVmVydGljYWxTY3JvbGxiYXIoKTsKK30KKworYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlTWFjOjpzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsRGlyZWN0
aW9uKQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgZGVs
dGEpCit7CisgICAgc2Nyb2xsaW5nTm9kZSgpLnNjcm9sbEJ5KGRlbHRhKTsKK30KKwordm9pZCBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjppbW1lZGlhdGVTY3JvbGxCeVdp
dGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQorewor
ICAgIHNjcm9sbGluZ05vZGUoKS5zY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRz
KG9mZnNldCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1h
Yzo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKQoreworICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRN
YWluRnJhbWVJc1J1YmJlckJhbmRpbmcoZmFsc2UpOworCisgICAgLy8gU2luY2UgdGhlIHJ1YmJl
cmJhbmQgdGltZXIgaGFzIHN0b3BwZWQsIHRvdGFsQ29udGVudHNTaXplRm9yUnViYmVyQmFuZCBj
YW4gYmUgc3luY2hyb25pemVkIHdpdGggdG90YWxDb250ZW50c1NpemUuCisgICAgc2Nyb2xsaW5n
Tm9kZSgpLnNldFRvdGFsQ29udGVudHNTaXplRm9yUnViYmVyQmFuZCh0b3RhbENvbnRlbnRzU2l6
ZSgpKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjph
ZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKQoreworICAgIEZsb2F0UG9p
bnQgY3VycmVudFNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24oKTsKKyAgICBGbG9hdFBv
aW50IGNvbnN0cmFpbmVkUG9zaXRpb24gPSBjdXJyZW50U2Nyb2xsUG9zaXRpb24uY29uc3RyYWlu
ZWRCZXR3ZWVuKG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24o
KSk7CisgICAgaW1tZWRpYXRlU2Nyb2xsQnkoY29uc3RyYWluZWRQb3NpdGlvbiAtIGN1cnJlbnRT
Y3JvbGxQb3NpdGlvbik7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorRmxvYXRQ
b2ludCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpzY3JvbGxPZmZzZXQo
KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbigpOworfQorCit2b2lkIFNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmltbWVkaWF0ZVNjcm9sbE9uQXhpcyhT
Y3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgZGVsdGEpCit7CisgICAgY29uc3QgRmxvYXRQb2lu
dCYgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24oKTsKKyAgICBGbG9hdFBvaW50IGNo
YW5nZTsKKyAgICBpZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpCisgICAg
ICAgIGNoYW5nZSA9IEZsb2F0UG9pbnQoY3VycmVudFBvc2l0aW9uLngoKSArIGRlbHRhLCBjdXJy
ZW50UG9zaXRpb24ueSgpKTsKKyAgICBlbHNlCisgICAgICAgIGNoYW5nZSA9IEZsb2F0UG9pbnQo
Y3VycmVudFBvc2l0aW9uLngoKSwgY3VycmVudFBvc2l0aW9uLnkoKSArIGRlbHRhKTsKKworICAg
IGltbWVkaWF0ZVNjcm9sbEJ5KGNoYW5nZSAtIGN1cnJlbnRQb3NpdGlvbik7Cit9CisKK2Zsb2F0
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnBhZ2VTY2FsZUZhY3Rvcigp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFdoYXQgc2hvdWxkIHRoaXMgcmV0dXJuIGZvciBub24t
cm9vdCBmcmFtZXMsIGFuZCBvdmVyZmxvdz8KKyAgICAvLyBBbHNvLCB0aGlzIHNob3VsZCBub3Qg
aGF2ZSB0byBhY2Nlc3MgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS4KKyAgICBpZiAo
aXM8U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZT4oc2Nyb2xsaW5nTm9kZSgpKSkKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+KHNj
cm9sbGluZ05vZGUoKSkuZnJhbWVTY2FsZUZhY3RvcigpOworCisgICAgcmV0dXJuIDE7Cit9CisK
K3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c3RhcnRTY3JvbGxT
bmFwVGltZXIoKQoreworICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRNYWluRnJhbWVJc1Njcm9sbFNu
YXBwaW5nKHRydWUpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWM6OnN0b3BTY3JvbGxTbmFwVGltZXIoKQoreworICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRN
YWluRnJhbWVJc1Njcm9sbFNuYXBwaW5nKGZhbHNlKTsKK30KKyAgICAKK0xheW91dFNpemUgU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c2Nyb2xsRXh0ZW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gTGF5b3V0U2l6ZSh0b3RhbENvbnRlbnRzU2l6ZSgpKTsKK30KKworRmxv
YXRTaXplIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnZpZXdwb3J0U2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGFibGVBcmVhU2l6ZSgpOworfQorI2VuZGlm
CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6ZGVmZXJUZXN0
c0ZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFz
b24gcmVhc29uKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsaW5nTm9kZSgpLmV4cGVjdHNXaGVl
bEV2ZW50VGVzdFRyaWdnZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HKFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcnMsICIgIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6
OmRlZmVyVGVzdHNGb3JSZWFzb246IFNUQVJUSU5HIGRlZmVycmFsIGZvciAlcCBiZWNhdXNlIG9m
ICVkIiwgaWRlbnRpZmllciwgcmVhc29uKTsKKyAgICBzY3JvbGxpbmdUcmVlKCkuZGVmZXJUZXN0
c0ZvclJlYXNvbihpZGVudGlmaWVyLCByZWFzb24pOworfQorICAgIAordm9pZCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpyZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24o
V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uIHJlYXNvbikg
Y29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbGluZ05vZGUoKS5leHBlY3RzV2hlZWxFdmVudFRlc3RU
cmlnZ2VyKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBMT0coV2hlZWxFdmVudFRlc3RU
cmlnZ2VycywgIiAgIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmRlZmVy
VGVzdHNGb3JSZWFzb246IEVORElORyBkZWZlcnJhbCBmb3IgJXAgYmVjYXVzZSBvZiAlZCIsIGlk
ZW50aWZpZXIsIHJlYXNvbik7CisgICAgc2Nyb2xsaW5nVHJlZSgpLnJlbW92ZVRlc3REZWZlcnJh
bEZvclJlYXNvbihpZGVudGlmaWVyLCByZWFzb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
Cg==
</data>
<flag name="review"
          id="377386"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360729</attachid>
            <date>2019-01-31 08:32:54 -0800</date>
            <delta_ts>2019-01-31 14:01:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194080-20190131083253.patch</filename>
            <type>text/plain</type>
            <size>59338</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmUxOGIzYjYwNDJjMGQy
M2MwZjUyZTA1YzEwOWU3Y2EwOGVjMzg4MS4uZWJhYjI2M2M5YjZkZWFkYTMzYWI0YTgxOTYzY2Uw
MzU4MjE1NTI4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxOS0wMS0zMSAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBHZW5lcmFsaXpl
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUgZm9yIHVzZSBpbiBtYWNPUyB0b28s
IGFkZCBhIG1hY09TIHN1YmNsYXNzIGZvciBmcmFtZS9vdmVyZmxvdyBzY3JvbGxpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA4MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIFRvIHNoYXJlIGNvZGUg
YmV0d2VlbiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjIGFuZCBTY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTWFjLCBidWlsZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlCisgICAgICAgIGZvciBtYWNPUyB0b28sIGFuZCBhZGQgc29tZSBoZWxwZXIg
ZnVuY3Rpb25zIHRvIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuCisKKyAgICAg
ICAgQWRkIGEgbWFjT1Mgc3ViY2xhc3MsIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVN
YWMsIHdoaWNoIHRha2VzIG92ZXIgdGhlIGJhc2ljIHNjcm9sbGluZywgcnViYmVyLWJhbmRpbmcK
KyAgICAgICAgYW5kIHNjcm9sbCBzbmFwcGluZyBmdW5jdGlvbmFsaXR5IGZyb20gU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy4gVGhlIGRlbGVnYXRlIG93bnMgdGhlIFNjcm9sbENv
bnRyb2xsZXIgYW5kCisgICAgICAgIGltcGxlbWVudHMgU2Nyb2xsQ29udHJvbGxlckNsaWVudC4K
KworICAgICAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjIG5vdyBvd25zIGEg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy4gQSBmdXR1cmUgcGF0Y2gKKyAg
ICAgICAgd2lsbCBhZGQgb25lIHRvIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVN
YWMuCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogU291cmNlc0Nv
Y29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlOjpz
Y3JvbGxCeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlOjpzY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlOjpmcmFtZVNjYWxlRmFjdG9yIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9k
ZTo6aXNSb290Tm9kZSBjb25zdCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZU5vZGUuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZTo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGU6OnNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWlu
dHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6ZXhwZWN0
c1doZWVsRXZlbnRUZXN0VHJpZ2dlciBjb25zdCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHA6CisgICAgICAgICogcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6c2Nyb2xsUG9zaXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZTo6bWluaW11bVNjcm9sbFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGU6Om1heGltdW1TY3JvbGxQb3NpdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlOjpzY3JvbGxhYmxlQXJlYVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6dG90YWxDb250ZW50c1NpemUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6
aGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6aGFzRW5hYmxlZFZlcnRpY2FsU2Ny
b2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGU6Omhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGU6OnZlcnRpY2FsU2Ny
b2xsRWxhc3RpY2l0eSBjb25zdCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OlNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZU1hYzo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpoYW5kbGVXaGVl
bEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGVNYWM6Om1pbmltdW1TY3JvbGxQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bmV3R2VzdHVyZUlzU3RhcnRpbmcpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6
aXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6YWxsb3dzSG9yaXpv
bnRhbFN0cmV0Y2hpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6
OnN0cmV0Y2hBbW91bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6cGlubmVkSW5EaXJlY3Rpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6Y2FuU2Ny
b2xsSG9yaXpvbnRhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmNhblNjcm9sbFZlcnRpY2FsbHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2hv
dWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVN
YWM6OmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1h
Yzo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25U
b0JvdW5kc0lmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9sbE9mZnNldCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpp
bW1lZGlhdGVTY3JvbGxPbkF4aXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6cGFnZVNjYWxlRmFjdG9yIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVN
YWM6OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnN0b3BTY3JvbGxTbmFwVGltZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZU1hYzo6c2Nyb2xsRXh0ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnZpZXdwb3J0U2l6ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
TWFjOjpkZWZlclRlc3RzRm9yUmVhc29uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnJlbW92ZVRlc3REZWZlcnJh
bEZvclJlYXNvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVNYWMuaC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c2V0QWN0aXZlU2Ny
b2xsU25hcEluZGV4Rm9yQXhpcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlTWFjOjphY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVN
YWM6OmFjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpoYW5kbGVXaGVlbEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWM6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
bmV3R2VzdHVyZUlzU3RhcnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6aXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNo
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWM6OnN0cmV0Y2hBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6cGlubmVkSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6Y2FuU2Nyb2xsSG9y
aXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVNYWM6OmNhblNjcm9sbFZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c2hvdWxkUnViYmVyQmFuZEluRGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENv
bnRlbnRFZGdlQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6YWRqdXN0
U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnNjcm9sbE9mZnNldCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFj
OjppbW1lZGlhdGVTY3JvbGxPbkF4aXMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6cGFnZVNjYWxlRmFjdG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnN0YXJ0
U2Nyb2xsU25hcFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVNYWM6OnN0b3BTY3JvbGxTbmFwVGltZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c2Nyb2xsRXh0ZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWM6OnZpZXdwb3J0U2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpkZWZlclRlc3RzRm9yUmVhc29uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6
OnJlbW92ZVRlc3REZWZlcnJhbEZvclJlYXNvbiBjb25zdCk6CisKIDIwMTktMDEtMzAgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gSW1wbGVt
ZW50IGJhc2ljIGhpdCB0ZXN0aW5nIGluIHRoZSBzY3JvbGxpbmcgdHJlZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXND
b2NvYS50eHQKaW5kZXggYzI0MTg1ZjE0ZWU3YWY2NjA4ZDJhNDNjZTA2NjQ5Y2ExZjA1NTJkYS4u
NWEwMGQxMmE1ODAwM2FkNTVhODNkZjEzZmZjODVkODY4MGE2N2JkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
Q29jb2EudHh0CkBAIC0xNTgsNiArMTU4LDcgQEAgcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z1RocmVhZE1hYy5tbQogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUu
bW0KIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
Lm1tCiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZU1hYy5tbQorcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVNYWMubW0KIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlTWFjLmNwcAogcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLm1tCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2ZWFkNzNj
OTg5NDk3NjJlMjI1NDAwMjg4Mzc4MGFkZjRlN2E2YTliLi41MmIxMDkyNGMwMGFhNGE0ODc4NzU1
OGFiNDYwNjQ2MDBjY2VhNWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMTgsNiArMzE4LDcgQEAKIAkJMEYxNURBOEEwRjNB
QUVFNzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1REE4OTBGM0FBRUU3MDAw
MENFNDcgLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAqLzsgfTsKIAkJMEYxNUVE
NUMxQjdFQzdDNTAwRURERkVCIC8qIFdpbGxDaGFuZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1RUQ1QTFCN0VDN0M1MDBFRERGRUIgLyog
V2lsbENoYW5nZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjE3NzQ4MDEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTc3NDdF
MTM3OEI3NzEwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRvcklPUy5oICovOyB9OworCQkwRjM3RjA4
NTIyMDJCRjk4MDBBODlDMEIgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1h
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzN0Yw
ODQyMjAyQUNCNzAwQTg5QzBCIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVN
YWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjNERDQ1MDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkwIC8q
IFNoYWRvd0JsdXIuaCAqLzsgfTsKIAkJMEYzRjBFNUExNTcwMzBDMzAwNkRBNTdGIC8qIFJlbmRl
ckdlb21ldHJ5TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNGMEU1ODE1NzAzMEMzMDA2REE1N0YgLyogUmVuZGVyR2VvbWV0cnlNYXAuaCAqLzsg
fTsKIAkJMEY0NzEwQUYxREI1NkFGQzAwMkRDRUMzIC8qIERPTVJlY3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDcxMEE5MURCNTZBRkMwMDJEQ0VD
MyAvKiBET01SZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTU3MDQsNiArNTcwNSw4IEBACiAJCTBGMjZBN0FEMjA1NjI2MTAwMDkwQTE0MSAv
KiBTVkdVbmtub3duRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdVbmtub3duRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMzZFNzM2MUJEMTgzN0EwMDJEQjg5MSAvKiBMYXlvdXRQb2ludC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRQb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMzZFNzM4MUJEMTg0QjkwMDJEQjg5MSAvKiBMYXlvdXRTaXplLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFNpemUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM3RjA4MzIyMDJBQzhGMDBBODlDMEIgLyog
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzdGMDg0MjIwMkFDQjcwMEE4OUMwQiAvKiBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZG93Qmx1ci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGM0RENDRFMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRvd0JsdXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRjBFNTcxNTcwMzBDMzAwNkRBNTdGIC8qIFJlbmRl
ckdlb21ldHJ5TWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlckdlb21ldHJ5TWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2OTc5
LDYgKzE2OTgyLDggQEAKIAkJCQkwRkU1ODA2MjE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5n
VHJlZU1hYy5oICovLAogCQkJCTBGQzA1MTZBMjE5QjVFQkUwMDMxQzM5RSAvKiBTY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTWFjLmggKi8sCiAJCQkJMEZDMDUxNjgyMTlCNUVCRTAw
MzFDMzlFIC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVNYWMubW0gKi8sCisJ
CQkJMEYzN0YwODQyMjAyQUNCNzAwQTg5QzBCIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVNYWMuaCAqLywKKwkJCQkwRjM3RjA4MzIyMDJBQzhGMDBBODlDMEIgLyogU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbSAqLywKIAkJCQkwRkI4ODkwODE2N0Qy
RkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaCAqLywKIAkJCQkwRkI4ODkw
OTE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUubW0gKi8sCiAJCQkp
OwpAQCAtMzE0NjEsNiArMzE0NjYsNyBAQAogCQkJCTBGRUEzRTgwMTkxQjMxNjkwMDBGMUI1NSAv
KiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MzkxQTk5RDE2MjlENzAwMDAyOTczMzAgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE2RDVBOTlEMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjM3RjA4
NTIyMDJCRjk4MDBBODlDMEIgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1h
Yy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9s
bGluZ1RyZWVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0M1Nzk1RDFEQTVDMzAx
MDA2RjlDOTcgLyogU2Nyb2xsSW50b1ZpZXdPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
QUFGRThEMDE5Q0I4NjcyMDAwRjU2RDggLyogU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuY3BwCmluZGV4IGQwYTlmYjUzMWUy
Njg5MDk5MTZiNmExYzg2MGQzNmZiNjRiZjUwYWQuLjI1OGJiOTNlOTY2MTRmMmJhN2JmOTc1NGMy
ODUyNzFhYTI0YjU2YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuY3BwCkBAIC04
MiwxNiArODIsNiBAQCB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OmNvbW1p
dFN0YXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nUwogICAgICAgICBtX21heExheW91
dFZpZXdwb3J0T3JpZ2luID0gc3RhdGUubWF4TGF5b3V0Vmlld3BvcnRPcmlnaW4oKTsKIH0KIAot
dm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlOjpzY3JvbGxCeShjb25zdCBGbG9h
dFNpemUmIGRlbHRhKQotewotICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkg
KyBkZWx0YSk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6c2Ny
b2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFNpemUmIG9mZnNl
dCkKLXsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRz
KHNjcm9sbFBvc2l0aW9uKCkgKyBvZmZzZXQpOwotfQotCiB2b2lkIFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9s
bFBvc2l0aW9uKQogewogICAgIEZsb2F0UG9pbnQgbmV3U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQ
b3NpdGlvbi5jb25zdHJhaW5lZEJldHdlZW4obWluaW11bVNjcm9sbFBvc2l0aW9uKCksIG1heGlt
dW1TY3JvbGxQb3NpdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaAppbmRleCAx
OGM5MTNmN2I0MGQ3YzNiNjhkY2YzZjBhMTczZjhhOThlZTVhOWEwLi5kMDlmMDQ4YmViY2NhMDFk
MWMwZGYxZTAwM2MxN2MzMTY1NzYyNTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5o
CkBAIC02MCwxMyArNjAsMTEgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0IGZpeGVkUG9zaXRp
b25SZWN0KCkgeyByZXR1cm4gRmxvYXRSZWN0KGxhc3RDb21taXR0ZWRTY3JvbGxQb3NpdGlvbigp
LCBzY3JvbGxhYmxlQXJlYVNpemUoKSk7IH07CiAKKyAgICBmbG9hdCBmcmFtZVNjYWxlRmFjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVNjYWxlRmFjdG9yOyB9CisKIHByb3RlY3RlZDoKICAg
ICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ1RyZWUmLCBTY3JvbGxp
bmdOb2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlEKTsKIAotICAgIHZvaWQgc2Nyb2xsQnkoY29uc3Qg
RmxvYXRTaXplJik7Ci0gICAgdm9pZCBzY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFp
bnRzKGNvbnN0IEZsb2F0U2l6ZSYpOwotCi0gICAgZmxvYXQgZnJhbWVTY2FsZUZhY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fZnJhbWVTY2FsZUZhY3RvcjsgfQogICAgIGludCBoZWFkZXJIZWlnaHQo
KSBjb25zdCB7IHJldHVybiBtX2hlYWRlckhlaWdodDsgfQogICAgIGludCBmb290ZXJIZWlnaHQo
KSBjb25zdCB7IHJldHVybiBtX2Zvb3RlckhlaWdodDsgfQogICAgIGZsb2F0IHRvcENvbnRlbnRJ
bnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wQ29udGVudEluc2V0OyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5jcHAKaW5kZXggNTg1
NWQ1ZWE1NTg4MTYxZjJlZTRjYzNiZWU5YmYzOGU5YmVjYTNiMy4uZDg1NzUxMzFhMDBkZjk4ZmVj
YjYyMjhlOThjODM1NWI4ZDk4NzkwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCiAKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIK
KyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAt
NzEsNiArNzIsMTEgQEAgdm9pZCBTY3JvbGxpbmdUcmVlTm9kZTo6cmVtb3ZlQ2hpbGQoU2Nyb2xs
aW5nVHJlZU5vZGUmIG5vZGUpCiAgICAgICAgIGNoaWxkLT5yZW1vdmVDaGlsZChub2RlKTsKIH0K
IAorYm9vbCBTY3JvbGxpbmdUcmVlTm9kZTo6aXNSb290Tm9kZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc2Nyb2xsaW5nVHJlZS5yb290Tm9kZSgpID09IHRoaXM7Cit9CisKIHZvaWQgU2Nyb2xs
aW5nVHJlZU5vZGU6OmR1bXBQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBTY3JvbGxpbmdTdGF0
ZVRyZWVBc1RleHRCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAgICBpZiAoYmVoYXZpb3Ig
JiBTY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHRCZWhhdmlvckluY2x1ZGVOb2RlSURzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmgKaW5kZXgg
YjUwOTZhYjc4ODBkZDFiM2QwZmI2Mzk4OGMxOTRhYmE1YjE5NTUxNS4uNjc1NGEyNzg3ODFiNDk3
YTA2ODQ5NjU3MzM3YWIwYjU5OWFmODI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5oCkBAIC0zOCw3ICszOCw2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlOwotY2xhc3MgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOwogY2xhc3MgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOwogCkBAIC02Myw2ICs2
Miw4IEBAIHB1YmxpYzoKIAogICAgIFNjcm9sbGluZ1RyZWVOb2RlKiBwYXJlbnQoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudDsgfQogICAgIHZvaWQgc2V0UGFyZW50KFNjcm9sbGluZ1RyZWVOb2Rl
KiBwYXJlbnQpIHsgbV9wYXJlbnQgPSBwYXJlbnQ7IH0KKyAgICAKKyAgICBib29sIGlzUm9vdE5v
ZGUoKSBjb25zdDsKIAogICAgIFZlY3RvcjxSZWZQdHI8U2Nyb2xsaW5nVHJlZU5vZGU+PiogY2hp
bGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuLmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFJl
ZlB0cjxTY3JvbGxpbmdUcmVlTm9kZT4+KiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hp
bGRyZW4uZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAppbmRleCBkY2M5NmYxY2I2MjUx
NzkzMTExOWY5ZjBmNjM3NzgwNjg1MTJhNmY0Li42NDJmMTEwNmNhMzExODU2MTljN2ZiY2M3OTI3
NTRiNWViM2YzZjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCkBAIC05Myw2ICs5Myw5IEBA
IHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRy
ZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOCiAKICAgICBpZiAoc3RhdGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsYWJsZUFyZWFQYXJhbXMpKQog
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhUGFyYW1ldGVycyA9IHN0YXRlLnNjcm9sbGFibGVBcmVh
UGFyYW1ldGVycygpOworCisgICAgaWYgKHN0YXRlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OkV4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIpKQorICAg
ICAgICBtX2V4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIgPSBzdGF0ZS5leHBlY3RzV2hlZWxF
dmVudFRlc3RUcmlnZ2VyKCk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6
OmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRl
Tm9kZSkKQEAgLTE0Miw2ICsxNDUsMTYgQEAgYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZTo6c2Nyb2xsTGltaXRSZWFjaGVkKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2gKICAgICBy
ZXR1cm4gbmV3U2Nyb2xsUG9zaXRpb24gPT0gb2xkU2Nyb2xsUG9zaXRpb247CiB9CiAKK3ZvaWQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgZGVs
dGEpCit7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSArIGRlbHRhKTsK
K30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6c2Nyb2xsQnlXaXRob3V0Q29u
dGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKK3sKKyAgICBzZXRT
Y3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKHNjcm9sbFBvc2l0aW9u
KCkgKyBvZmZzZXQpOworfQorCiBMYXlvdXRQb2ludCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZTo6cGFyZW50VG9Mb2NhbFBvaW50KExheW91dFBvaW50IHBvaW50KSBjb25zdAogewogICAgIHJl
dHVybiBwb2ludCAtIHRvTGF5b3V0U2l6ZShwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0KCku
bG9jYXRpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAppbmRleCBmNjUyYjJkMjYxZTYzNzE4OGM2
OWJkMTNmNDQ3MTE5MmU5YmFhNTczLi5iOGY2NTY4NDI4ZDAwMzljMGZmMWQyODZmNjE1MzI5NzM4
YmI1OTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKQEAgLTMzLDE4ICszMywxNSBAQAogI2luY2x1
ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU5vZGUu
aCIKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi1jbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
U2Nyb2xsaW5nVHJlZTsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTsKIAogY2xh
c3MgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZU5vZGUg
ewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgZnJpZW5kIGNsYXNzIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGU7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGZyaWVuZCBj
bGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOwogI2VuZGlmCiAKIHB1
YmxpYzoKQEAgLTU5LDYgKzU2LDkgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRlbnRFZGdl
Q29uc3RyYWludHMoY29uc3QgRmxvYXRQb2ludCYpOwogCisgICAgdm9pZCBzY3JvbGxCeShjb25z
dCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3Ry
YWludHMoY29uc3QgRmxvYXRTaXplJik7CisKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJz
QWZ0ZXJWaWV3cG9ydENoYW5nZShjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBk
b3VibGUgc2NhbGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJEZWxl
Z2F0ZWRTY3JvbGwoY29uc3QgRmxvYXRQb2ludCYpIHsgfQogCkBAIC0xMDksNiArMTA5LDggQEAg
cHJvdGVjdGVkOgogCiAgICAgYm9vbCBjYW5IYXZlU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxiYXJNb2RlICE9IFNj
cm9sbGJhckFsd2F5c09mZiB8fCBtX3Njcm9sbGFibGVBcmVhUGFyYW1ldGVycy52ZXJ0aWNhbFNj
cm9sbGJhck1vZGUgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmOyB9CiAKKyAgICBib29sIGV4cGVjdHNX
aGVlbEV2ZW50VGVzdFRyaWdnZXIoKSBjb25zdCB7IHJldHVybiBtX2V4cGVjdHNXaGVlbEV2ZW50
VGVzdFRyaWdnZXI7IH0KKwogICAgIFdFQkNPUkVfRVhQT1JUIExheW91dFBvaW50IHBhcmVudFRv
TG9jYWxQb2ludChMYXlvdXRQb2ludCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBP
UlQgTGF5b3V0UG9pbnQgbG9jYWxUb0NvbnRlbnRzUG9pbnQoTGF5b3V0UG9pbnQpIGNvbnN0IG92
ZXJyaWRlOwogCkBAIC0xMjgsNiArMTMwLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2N1
cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4IHsgMCB9OwogI2VuZGlmCiAgICAgU2Nyb2xsYWJs
ZUFyZWFQYXJhbWV0ZXJzIG1fc2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzOworICAgIGJvb2wgbV9l
eHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2VyIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHAKaW5kZXgg
YjNlNDc4ODRmZWVhZjJmYTZjMDIxMTFjZTRjYTlkMTJkOTYxNDFhNC4uOTczMzJjY2ZlMThlZGJh
OGU0ZTMxZmNjYTY3YmYyNmQzYjYxYTAxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZS5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9y
dCAiU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oIgogCi0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyNpZiBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKQogCiAjaW1wb3J0ICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oIgogCkBA
IC02Niw0ICs2Niw0IEBAIGNvbnN0IEludFBvaW50JiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlOjpzY3JvbGxPcmlnaW4oKSBjb25zdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQorI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlLmgKaW5kZXggNzhjY2MwMWUwYjlmNDdkMjcxMDhhOTZmNjE2YmQ4MjU0
YWQzZmM4Ny4uNGExNWEyZTZiOWM4ZjUxNWMzMTE4MmU1YzkwY2JlNzI2MjYyZDU5NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaApAQCAtMjUsMjAgKzI1LDE3IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7CisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaCIKIAotY2xhc3MgRmxv
YXRQb2ludDsKLWNsYXNzIEZsb2F0U2l6ZTsKLWNsYXNzIEludFBvaW50OwotY2xhc3MgU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGU7Ci1jbGFzcyBTY3JvbGxpbmdUcmVlOworbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlIHsKIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlKFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlJik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZSgpOworCiAg
ICAgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUmIHNjcm9sbGluZ05vZGUoKSB7IHJldHVybiBt
X3Njcm9sbGluZ05vZGU7IH0KICAgICBjb25zdCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYg
c2Nyb2xsaW5nTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZTsgfQogCkBAIC00
OSwxMCArNDYsMjMgQEAgcHJvdGVjdGVkOgogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZsb2F0
U2l6ZSYgcmVhY2hhYmxlQ29udGVudHNTaXplKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
SW50UG9pbnQmIHNjcm9sbE9yaWdpbigpIGNvbnN0OwogCisgICAgRmxvYXRQb2ludCBzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZS5zY3JvbGxQb3NpdGlvbigp
OyB9CisgICAgRmxvYXRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbGluZ05vZGUubWluaW11bVNjcm9sbFBvc2l0aW9uKCk7IH0KKyAgICBGbG9hdFBv
aW50IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTm9k
ZS5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsgfQorCisgICAgRmxvYXRTaXplIHNjcm9sbGFibGVB
cmVhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZS5zY3JvbGxhYmxlQXJlYVNp
emUoKTsgfQorICAgIEZsb2F0U2l6ZSB0b3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsaW5nTm9kZS50b3RhbENvbnRlbnRzU2l6ZSgpOyB9CisKKyAgICBib29sIGhhc0Vu
YWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdOb2Rl
Lmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc0VuYWJsZWRW
ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZS5oYXNFbmFi
bGVkVmVydGljYWxTY3JvbGxiYXIoKTsgfQorCisgICAgU2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9u
dGFsU2Nyb2xsRWxhc3RpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZS5ob3Jp
em9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpOyB9CisgICAgU2Nyb2xsRWxhc3RpY2l0eSB2ZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZ05vZGUudmVydGlj
YWxTY3JvbGxFbGFzdGljaXR5KCk7IH0KKwogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZSYgbV9zY3JvbGxpbmdOb2RlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLmgKaW5kZXggMTc4ZjFhZjY0NGFhZDM3MWMzN2QzZGYz
YTQ1ZDJiNGI5Yzk1MzJhZC4uNWJlMWJiMjhmMmJjZTc2YzZlNzMzOWNlMjE5OWY1NjU0ZjdhODZm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5oCkBAIC0yNywx
NyArMjcsMTcgQEAKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFBMQVRGT1JNKE1B
QykKIAotI2luY2x1ZGUgIlNjcm9sbENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZU1hYy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oIgorI2luY2x1ZGUg
IlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaCIKICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgQ0FMYXllcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBXRUJDT1JFX0VYUE9SVCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
TWFjIDogcHVibGljIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUsIHByaXZhdGUgU2Ny
b2xsQ29udHJvbGxlckNsaWVudCB7CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlTWFjIDogcHVibGljIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZT4gY3JlYXRlKFNjcm9sbGluZ1RyZWUmLCBTY3JvbGxpbmdOb2RlVHlwZSwgU2Nyb2xs
aW5nTm9kZUlEKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
TWFjKCk7CkBAIC01MywxOSArNTMsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBTY3JvbGxpbmdFdmVu
dFJlc3VsdCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJy
aWRlOwogCi0gICAgLy8gU2Nyb2xsQ29udHJvbGxlciBtZW1iZXIgZnVuY3Rpb25zLgotICAgIGJv
b2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikg
b3ZlcnJpZGU7Ci0gICAgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgSW50U2l6ZSBzdHJldGNoQW1vdW50KCkgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBwaW5uZWRJbkRpcmVjdGlvbihjb25zdCBGbG9hdFNpemUmKSBvdmVy
cmlkZTsKLSAgICBib29sIGNhblNjcm9sbEhvcml6b250YWxseSgpIG92ZXJyaWRlOwotICAgIGJv
b2wgY2FuU2Nyb2xsVmVydGljYWxseSgpIG92ZXJyaWRlOwotICAgIGJvb2wgc2hvdWxkUnViYmVy
QmFuZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbW1l
ZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGltbWVk
aWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRTaXpl
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpIG92ZXJyaWRl
OwotICAgIHZvaWQgYWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgb3Zl
cnJpZGU7Ci0KICAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRz
KGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKQEAgLTc5LDI2ICs2Niw5IEBAIHByb3RlY3Rl
ZDoKIAogICAgIHZvaWQgdXBkYXRlTWFpbkZyYW1lUGluU3RhdGUoY29uc3QgRmxvYXRQb2ludCYg
c2Nyb2xsUG9zaXRpb24pOwogCi0gICAgYm9vbCBpc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9m
R2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBTY3JvbGxFdmVudEF4aXMpOwotCi0g
ICAgdm9pZCBkZWZlclRlc3RzRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xs
YWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdn
ZXJSZWFzb24pIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlVGVzdERlZmVycmFsRm9y
UmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBX
aGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0IG92ZXJy
aWRlOwotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQotICAg
IEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbW1l
ZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBkZWx0YSkgb3ZlcnJpZGU7
Ci0gICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
dGFydFNjcm9sbFNuYXBUaW1lcigpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcFNjcm9sbFNuYXBU
aW1lcigpIG92ZXJyaWRlOwotICAgIExheW91dFNpemUgc2Nyb2xsRXh0ZW50KCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IG92ZXJyaWRlOwotI2Vu
ZGlmCi0KICAgICB1bnNpZ25lZCBleHBvc2VkVW5maWxsZWRBcmVhKCkgY29uc3Q7CiAKIHByaXZh
dGU6Ci0gICAgU2Nyb2xsQ29udHJvbGxlciBtX3Njcm9sbENvbnRyb2xsZXI7Ci0KICAgICBSZXRh
aW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXI7CiAgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fY291bnRlclNj
cm9sbGluZ0xheWVyOwpAQCAtMTA5LDkgKzc5LDExIEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRy
PE5TU2Nyb2xsZXJJbXA+IG1fdmVydGljYWxTY3JvbGxlckltcDsKICAgICBSZXRhaW5QdHI8TlNT
Y3JvbGxlckltcD4gbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXA7CiAgICAgRmxvYXRQb2ludCBtX3By
b2JhYmxlTWFpblRocmVhZFNjcm9sbFBvc2l0aW9uOworICAgIAorICAgIFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMgbV9kZWxlZ2F0ZTsKKyAgICAKICAgICBib29sIG1fbGFz
dFNjcm9sbEhhZFVuZmlsbGVkUGl4ZWxzIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFkRmlyc3RV
cGRhdGUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9leHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2Vy
IHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0KaW5kZXggYjcxNjk3OWY5YjBlN2VlOWUzNDA2
NTQwYmQ2ZjVkZDExNjljMDZkYS4uZjY1MGIxYjdiZDM0OTE1ODFiMjU2YmM5ZWUyMWY3YmRhNjE1
MWQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0KQEAg
LTU0LDkgKzU0LDcgQEAgUmVmPFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+IFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmNyZWF0ZSgKIAogU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZU1hYzo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYyhT
Y3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSwg
U2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkKICAgICA6IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGUoc2Nyb2xsaW5nVHJlZSwgbm9kZVR5cGUsIG5vZGVJRCkKLSAgICAsIG1fc2Nyb2xsQ29u
dHJvbGxlcigqdGhpcykKLSAgICAsIG1fdmVydGljYWxTY3JvbGxlckltcChudWxscHRyKQotICAg
ICwgbV9ob3Jpem9udGFsU2Nyb2xsZXJJbXAobnVsbHB0cikKKyAgICAsIG1fZGVsZWdhdGUoKnRo
aXMpCiB7CiB9CiAKQEAgLTE1MCwyMSArMTQ4LDE4IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZU1hYzo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxp
CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpI
b3Jpem9udGFsU25hcE9mZnNldHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFwT2Zm
c2V0UmFuZ2VzKSkKLSAgICAgICAgbV9zY3JvbGxDb250cm9sbGVyLnVwZGF0ZVNjcm9sbFNuYXBQ
b2ludHMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhz
Y3JvbGxpbmdTdGF0ZU5vZGUuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpLCBjb252ZXJ0VG9MYXlv
dXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoKSkp
OworICAgICAgICBtX2RlbGVnYXRlLnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Nyb2xsRXZlbnRB
eGlzOjpIb3Jpem9udGFsLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUu
aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdT
dGF0ZU5vZGUuaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoKSkpOwogCiAgICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9s
bGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OlZlcnRpY2Fs
U25hcE9mZnNldFJhbmdlcykpCi0gICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci51cGRhdGVTY3Jv
bGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIGNvbnZlcnRUb0xheW91dFVu
aXRzKHNjcm9sbGluZ1N0YXRlTm9kZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpLCBjb252ZXJ0VG9M
YXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0ZU5vZGUudmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKCkp
KTsKKyAgICAgICAgbV9kZWxlZ2F0ZS51cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50
QXhpczo6VmVydGljYWwsIGNvbnZlcnRUb0xheW91dFVuaXRzKHNjcm9sbGluZ1N0YXRlTm9kZS52
ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpLCBjb252ZXJ0VG9MYXlvdXRVbml0cyhzY3JvbGxpbmdTdGF0
ZU5vZGUudmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKCkpKTsKIAogICAgIGlmIChzY3JvbGxpbmdT
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
Q3VycmVudEhvcml6b250YWxTbmFwT2Zmc2V0SW5kZXgpKQotICAgICAgICBtX3Njcm9sbENvbnRy
b2xsZXIuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwsIHNjcm9sbGluZ1N0YXRlTm9kZS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludElu
ZGV4KCkpOworICAgICAgICBtX2RlbGVnYXRlLnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4
aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBzY3JvbGxpbmdTdGF0ZU5vZGUuY3VycmVu
dEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpKTsKICAgICAKICAgICBpZiAoc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OkN1
cnJlbnRWZXJ0aWNhbFNuYXBPZmZzZXRJbmRleCkpCi0gICAgICAgIG1fc2Nyb2xsQ29udHJvbGxl
ci5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGlj
YWwsIHNjcm9sbGluZ1N0YXRlTm9kZS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKTsK
KyAgICAgICAgbV9kZWxlZ2F0ZS5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9s
bEV2ZW50QXhpczo6VmVydGljYWwsIHNjcm9sbGluZ1N0YXRlTm9kZS5jdXJyZW50VmVydGljYWxT
bmFwUG9pbnRJbmRleCgpKTsKICNlbmRpZgogCi0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5o
YXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpFeHBlY3RzV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyKSkKLSAgICAgICAgbV9leHBlY3RzV2hlZWxFdmVudFRlc3RUcmln
Z2VyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmV4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIoKTsK
LQogICAgIG1faGFkRmlyc3RVcGRhdGUgPSB0cnVlOwogfQogCkBAIC0xOTksMTkgKzE5NCwyMCBA
QCBTY3JvbGxpbmdFdmVudFJlc3VsdCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
OjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0CiAgICAgfQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkgfHwgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGlmIChtX2V4cGVjdHNXaGVlbEV2
ZW50VGVzdFRyaWdnZXIpIHsKKyAgICBpZiAoZXhwZWN0c1doZWVsRXZlbnRUZXN0VHJpZ2dlcigp
KSB7CiAgICAgICAgIGlmIChzY3JvbGxpbmdUcmVlKCkuc2hvdWxkSGFuZGxlV2hlZWxFdmVudFN5
bmNocm9ub3VzbHkod2hlZWxFdmVudCkpCi0gICAgICAgICAgICByZW1vdmVUZXN0RGVmZXJyYWxG
b3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFi
bGVBcmVhSWRlbnRpZmllcj4oc2Nyb2xsaW5nTm9kZUlEKCkpLCBXaGVlbEV2ZW50VGVzdFRyaWdn
ZXI6OlNjcm9sbGluZ1RocmVhZFN5bmNOZWVkZWQpOworICAgICAgICAgICAgbV9kZWxlZ2F0ZS5y
ZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVz
dFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4oc2Nyb2xsaW5nTm9kZUlEKCkpLCBX
aGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGluZ1RocmVhZFN5bmNOZWVkZWQpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBkZWZlclRlc3RzRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8
V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHNjcm9sbGlu
Z05vZGVJRCgpKSwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxpbmdUaHJlYWRTeW5jTmVl
ZGVkKTsKKyAgICAgICAgICAgIG1fZGVsZWdhdGUuZGVmZXJUZXN0c0ZvclJlYXNvbihyZWludGVy
cHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVy
PihzY3JvbGxpbmdOb2RlSUQoKSksIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsaW5nVGhy
ZWFkU3luY05lZWRlZCk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBtX3Njcm9sbENvbnRyb2xsZXIu
aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICBtX2RlbGVnYXRlLmhhbmRsZVdoZWVs
RXZlbnQod2hlZWxFdmVudCk7CisKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHNj
cm9sbGluZ1RyZWUoKS5zZXRNYWluRnJhbWVJc1Njcm9sbFNuYXBwaW5nKG1fc2Nyb2xsQ29udHJv
bGxlci5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCkpOwotICAgIGlmIChtX3Njcm9sbENvbnRyb2xs
ZXIuYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKCkpCi0gICAgICAgIHNjcm9sbGluZ1Ry
ZWUoKS5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlcyhzY3JvbGxpbmdOb2RlSUQoKSwgbV9zY3Jv
bGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsKSwgbV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZv
ckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOworICAgIHNjcm9sbGluZ1RyZWUoKS5z
ZXRNYWluRnJhbWVJc1Njcm9sbFNuYXBwaW5nKG1fZGVsZWdhdGUuaXNTY3JvbGxTbmFwSW5Qcm9n
cmVzcygpKTsKKyAgICBpZiAobV9kZWxlZ2F0ZS5hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFu
Z2UoKSkKKyAgICAgICAgc2Nyb2xsaW5nVHJlZSgpLnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRpY2Vz
KHNjcm9sbGluZ05vZGVJRCgpLCBtX2RlbGVnYXRlLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4
aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSwgbV9kZWxlZ2F0ZS5hY3RpdmVTY3JvbGxT
bmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKICNlbmRpZgogICAg
IHNjcm9sbGluZ1RyZWUoKS5zZXRPckNsZWFyTGF0Y2hlZE5vZGUod2hlZWxFdmVudCwgc2Nyb2xs
aW5nTm9kZUlEKCkpOwogICAgIHNjcm9sbGluZ1RyZWUoKS5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uo
d2hlZWxFdmVudC5waGFzZSgpKTsKQEAgLTIyMCwxNTQgKzIxNiw2IEBAIFNjcm9sbGluZ0V2ZW50
UmVzdWx0IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmhhbmRsZVdoZWVsRXZl
bnQoY29uc3QKICAgICByZXR1cm4gU2Nyb2xsaW5nRXZlbnRSZXN1bHQ6OkRpZEhhbmRsZUV2ZW50
OwogfQogCi0vLyBGSVhNRTogV2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8gc2hhcmUgc29tZSBvZiB0
aGUgY29kZSBmcm9tIG5ld0dlc3R1cmVJc1N0YXJ0aW5nKCksIGlzQWxyZWFkeVBpbm5lZEluRGly
ZWN0aW9uT2ZHZXN0dXJlKCksCi0vLyBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSwgYW5kIGFs
bG93c0hvcml6b250YWxTdHJldGNoaW5nKCkgd2l0aCB0aGUgaW1wbGVtZW50YXRpb24gaW4gU2Ny
b2xsQW5pbWF0b3JNYWMuCi1zdGF0aWMgYm9vbCBuZXdHZXN0dXJlSXNTdGFydGluZyhjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0gICAgcmV0dXJuIHdoZWVsRXZlbnQu
cGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU1heUJlZ2luIHx8IHdoZWVsRXZlbnQu
cGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuOwotfQotCi1ib29sIFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9u
T2ZHZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgU2Nyb2xsRXZl
bnRBeGlzIGF4aXMpCi17Ci0gICAgc3dpdGNoIChheGlzKSB7Ci0gICAgY2FzZSBTY3JvbGxFdmVu
dEF4aXM6OlZlcnRpY2FsOgotICAgICAgICByZXR1cm4gKHdoZWVsRXZlbnQuZGVsdGFZKCkgPiAw
ICYmIHNjcm9sbFBvc2l0aW9uKCkueSgpIDw9IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSkg
fHwgKHdoZWVsRXZlbnQuZGVsdGFZKCkgPCAwICYmIHNjcm9sbFBvc2l0aW9uKCkueSgpID49IG1h
eGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSk7Ci0gICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWw6Ci0gICAgICAgIHJldHVybiAod2hlZWxFdmVudC5kZWx0YVgoKSA+IDAgJiYgc2Ny
b2xsUG9zaXRpb24oKS54KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgpKSB8fCAod2hl
ZWxFdmVudC5kZWx0YVgoKSA8IDAgJiYgc2Nyb2xsUG9zaXRpb24oKS54KCkgPj0gbWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkueCgpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiB3aGVlbEV2ZW50KQotewotICAgIHN3aXRjaCAoaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNp
dHkoKSkgewotICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogewotICAgICAgICBi
b29sIHNjcm9sbGJhcnNBbGxvd1N0cmV0Y2hpbmcgPSBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9s
bGJhcigpIHx8ICFoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICAgICAgYm9vbCBl
dmVudFByZXZlbnRzU3RyZXRjaGluZyA9IG5ld0dlc3R1cmVJc1N0YXJ0aW5nKHdoZWVsRXZlbnQp
ICYmIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKHdoZWVsRXZlbnQsIFNjcm9s
bEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJzQWxsb3dT
dHJldGNoaW5nICYmICFldmVudFByZXZlbnRzU3RyZXRjaGluZzsKLSAgICB9Ci0gICAgY2FzZSBT
Y3JvbGxFbGFzdGljaXR5Tm9uZToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgU2Ny
b2xsRWxhc3RpY2l0eUFsbG93ZWQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmco
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIHN3aXRjaCAodmVy
dGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRv
bWF0aWM6IHsKLSAgICAgICAgYm9vbCBzY3JvbGxiYXJzQWxsb3dTdHJldGNoaW5nID0gaGFzRW5h
YmxlZFZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgIWhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFy
KCk7Ci0gICAgICAgIGJvb2wgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBuZXdHZXN0dXJlSXNT
dGFydGluZyh3aGVlbEV2ZW50KSAmJiBpc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVy
ZSh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKTsKLSAgICAgICAgcmV0dXJu
IHNjcm9sbGJhcnNBbGxvd1N0cmV0Y2hpbmcgJiYgIWV2ZW50UHJldmVudHNTdHJldGNoaW5nOwot
ICAgIH0KLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1JbnRTaXplIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnN0cmV0
Y2hBbW91bnQoKQotewotICAgIEludFNpemUgc3RyZXRjaDsKLQotICAgIGlmIChzY3JvbGxQb3Np
dGlvbigpLnkoKSA8IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSkKLSAgICAgICAgc3RyZXRj
aC5zZXRIZWlnaHQoc2Nyb2xsUG9zaXRpb24oKS55KCkgLSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24o
KS55KCkpOwotICAgIGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uKCkueSgpID4gbWF4aW11bVNjcm9s
bFBvc2l0aW9uKCkueSgpKQotICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxQb3NpdGlv
bigpLnkoKSAtIG1heGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSk7Ci0KLSAgICBpZiAoc2Nyb2xs
UG9zaXRpb24oKS54KCkgPCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkpCi0gICAgICAgIHN0
cmV0Y2guc2V0V2lkdGgoc2Nyb2xsUG9zaXRpb24oKS54KCkgLSBtaW5pbXVtU2Nyb2xsUG9zaXRp
b24oKS54KCkpOwotICAgIGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uKCkueCgpID4gbWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkueCgpKQotICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbFBvc2l0
aW9uKCkueCgpIC0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueCgpKTsKLQotICAgIGlmIChzY3Jv
bGxpbmdUcmVlKCkucm9vdE5vZGUoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGlmIChzdHJldGNoLmlz
WmVybygpKQotICAgICAgICAgICAgc2Nyb2xsaW5nVHJlZSgpLnNldE1haW5GcmFtZUlzUnViYmVy
QmFuZGluZyhmYWxzZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNjcm9sbGluZ1RyZWUo
KS5zZXRNYWluRnJhbWVJc1J1YmJlckJhbmRpbmcodHJ1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHN0cmV0Y2g7Ci19Ci0KLWJvb2wgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6
cGlubmVkSW5EaXJlY3Rpb24oY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKLXsKLSAgICBGbG9hdFNp
emUgbGltaXREZWx0YTsKLQotICAgIGlmIChmYWJzZihkZWx0YS5oZWlnaHQoKSkgPj0gZmFic2Yo
ZGVsdGEud2lkdGgoKSkpIHsKLSAgICAgICAgaWYgKGRlbHRhLmhlaWdodCgpIDwgMCkgewotICAg
ICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgdXAuIE1ha2Ugc3VyZSB3ZSBhcmUg
bm90IHBpbm5lZCB0byB0aGUgdG9wLgotICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQo
c2Nyb2xsUG9zaXRpb24oKS55KCkgLSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgZG93
bi4gTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSBib3R0b20uCi0gICAgICAgICAg
ICBsaW1pdERlbHRhLnNldEhlaWdodChtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkgLSBzY3Jv
bGxQb3NpdGlvbigpLnkoKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGRlbHRhLndpZHRo
KCkpIHsKLSAgICAgICAgaWYgKGRlbHRhLndpZHRoKCkgPCAwKSB7Ci0gICAgICAgICAgICAvLyBX
ZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCBsZWZ0LiBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQg
dG8gdGhlIGxlZnQuCi0gICAgICAgICAgICBsaW1pdERlbHRhLnNldFdpZHRoKHNjcm9sbFBvc2l0
aW9uKCkueCgpIC0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgpKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHJpZ2h0LiBNYWtlIHN1
cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIHJpZ2h0LgotICAgICAgICAgICAgbGltaXREZWx0
YS5zZXRXaWR0aChtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkgLSBzY3JvbGxQb3NpdGlvbigp
LngoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoKGRlbHRhLndpZHRoKCkgfHwgZGVs
dGEuaGVpZ2h0KCkpICYmIChsaW1pdERlbHRhLndpZHRoKCkgPCAxICYmIGxpbWl0RGVsdGEuaGVp
Z2h0KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6Y2FuU2Nyb2xsSG9y
aXpvbnRhbGx5KCkKLXsKLSAgICByZXR1cm4gaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIo
KTsKLX0KLQotYm9vbCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpjYW5TY3Jv
bGxWZXJ0aWNhbGx5KCkKLXsKLSAgICByZXR1cm4gaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFy
KCk7Ci19Ci0KLWJvb2wgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2hvdWxk
UnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikKLXsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjppbW1lZGlh
dGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIGRlbHRhKQotewotICAgIHNjcm9sbEJ5KGRlbHRh
KTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjppbW1lZGlh
dGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYg
b2Zmc2V0KQotewotICAgIHNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMob2Zm
c2V0KTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpzdG9w
U25hcFJ1YmJlcmJhbmRUaW1lcigpCi17Ci0gICAgc2Nyb2xsaW5nVHJlZSgpLnNldE1haW5GcmFt
ZUlzUnViYmVyQmFuZGluZyhmYWxzZSk7Ci0KLSAgICAvLyBTaW5jZSB0aGUgcnViYmVyYmFuZCB0
aW1lciBoYXMgc3RvcHBlZCwgdG90YWxDb250ZW50c1NpemVGb3JSdWJiZXJCYW5kIGNhbiBiZSBz
eW5jaHJvbml6ZWQgd2l0aCB0b3RhbENvbnRlbnRzU2l6ZS4KLSAgICBzZXRUb3RhbENvbnRlbnRz
U2l6ZUZvclJ1YmJlckJhbmQodG90YWxDb250ZW50c1NpemUoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5k
c0lmTmVjZXNzYXJ5KCkKLXsKLSAgICBGbG9hdFBvaW50IGN1cnJlbnRTY3JvbGxQb3NpdGlvbiA9
IHNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgRmxvYXRQb2ludCBjb25zdHJhaW5lZFBvc2l0aW9uID0g
Y3VycmVudFNjcm9sbFBvc2l0aW9uLmNvbnN0cmFpbmVkQmV0d2VlbihtaW5pbXVtU2Nyb2xsUG9z
aXRpb24oKSwgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGltbWVkaWF0ZVNjcm9sbEJ5
KGNvbnN0cmFpbmVkUG9zaXRpb24gLSBjdXJyZW50U2Nyb2xsUG9zaXRpb24pOwotfQotCiBGbG9h
dFBvaW50IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9sbFBvc2l0aW9u
KCkgY29uc3QKIHsKICAgICBpZiAoc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvblN5bmNo
cm9ub3VzbHkoKSkKQEAgLTUwNCw3ICszNTIsNyBAQCBGbG9hdFBvaW50IFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVNYWM6Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7CiAg
ICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkZy
b21PZmZzZXQoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShzY3JvbGxPcmlnaW4oKSkpOwogICAg
IAotICAgIGlmIChzY3JvbGxpbmdUcmVlKCkucm9vdE5vZGUoKSA9PSB0aGlzICYmIHNjcm9sbGlu
Z1RyZWUoKS5zY3JvbGxQaW5uaW5nQmVoYXZpb3IoKSA9PSBQaW5Ub0JvdHRvbSkKKyAgICBpZiAo
aXNSb290Tm9kZSgpICYmIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxQaW5uaW5nQmVoYXZpb3IoKSA9
PSBQaW5Ub0JvdHRvbSkKICAgICAgICAgcG9zaXRpb24uc2V0WShtYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKS55KCkpOwogCiAgICAgcmV0dXJuIHBvc2l0aW9uOwpAQCAtNTE1LDcgKzM2Myw3IEBAIEZs
b2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6bWF4aW11bVNjcm9s
bFBvc2l0aW9uKCkgY29uc3QKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChGbG9hdFBvaW50KHRvdGFsQ29udGVudHNTaXpl
Rm9yUnViYmVyQmFuZCgpIC0gc2Nyb2xsYWJsZUFyZWFTaXplKCkpLCB0b0Zsb2F0U2l6ZShzY3Jv
bGxPcmlnaW4oKSkpOwogICAgIHBvc2l0aW9uID0gcG9zaXRpb24uZXhwYW5kZWRUbyhGbG9hdFBv
aW50KCkpOwogCi0gICAgaWYgKHNjcm9sbGluZ1RyZWUoKS5yb290Tm9kZSgpID09IHRoaXMgJiYg
c2Nyb2xsaW5nVHJlZSgpLnNjcm9sbFBpbm5pbmdCZWhhdmlvcigpID09IFBpblRvVG9wKQorICAg
IGlmIChpc1Jvb3ROb2RlKCkgJiYgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbFBpbm5pbmdCZWhhdmlv
cigpID09IFBpblRvVG9wKQogICAgICAgICBwb3NpdGlvbi5zZXRZKG1pbmltdW1TY3JvbGxQb3Np
dGlvbigpLnkoKSk7CiAKICAgICByZXR1cm4gcG9zaXRpb247CkBAIC01NjAsNjkgKzQwOCw2IEBA
IHVuc2lnbmVkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmV4cG9zZWRVbmZp
bGxlZEFyZWEoKSBjb25zdAogICAgIHJldHVybiBUaWxlQ29udHJvbGxlcjo6YmxhbmtQaXhlbENv
dW50Rm9yVGlsZXModGlsZXMsIHZpZXdQb3J0UmVjdCwgSW50UG9pbnQoLXNjcm9sbFBvc2l0aW9u
LngoKSwgLXNjcm9sbFBvc2l0aW9uLnkoKSkpOwogfQogCi0jaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKLUZsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2Ny
b2xsT2Zmc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKTsKLX0KLQot
dm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjppbW1lZGlhdGVTY3JvbGxP
bkF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IGRlbHRhKQotewotICAgIGNvbnN0IEZs
b2F0UG9pbnQmIGN1cnJlbnRQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgRmxvYXRQ
b2ludCBjaGFuZ2U7Ci0gICAgaWYgKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
KQotICAgICAgICBjaGFuZ2UgPSBGbG9hdFBvaW50KGN1cnJlbnRQb3NpdGlvbi54KCkgKyBkZWx0
YSwgY3VycmVudFBvc2l0aW9uLnkoKSk7Ci0gICAgZWxzZQotICAgICAgICBjaGFuZ2UgPSBGbG9h
dFBvaW50KGN1cnJlbnRQb3NpdGlvbi54KCksIGN1cnJlbnRQb3NpdGlvbi55KCkgKyBkZWx0YSk7
Ci0KLSAgICBpbW1lZGlhdGVTY3JvbGxCeShjaGFuZ2UgLSBjdXJyZW50UG9zaXRpb24pOwotfQot
Ci1mbG9hdCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpwYWdlU2NhbGVGYWN0
b3IoKSBjb25zdAotewotICAgIHJldHVybiBmcmFtZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLXZvaWQg
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c3RhcnRTY3JvbGxTbmFwVGltZXIo
KQotewotICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRNYWluRnJhbWVJc1Njcm9sbFNuYXBwaW5nKHRy
dWUpOwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnN0b3BT
Y3JvbGxTbmFwVGltZXIoKQotewotICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRNYWluRnJhbWVJc1Nj
cm9sbFNuYXBwaW5nKGZhbHNlKTsKLX0KLSAgICAKLUxheW91dFNpemUgU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2Nyb2xsRXh0ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
TGF5b3V0U2l6ZSh0b3RhbENvbnRlbnRzU2l6ZSgpKTsKLX0KLQotRmxvYXRTaXplIFNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHNjcm9sbGFibGVBcmVhU2l6ZSgpOwotfQotCi0jZW5kaWYKLQotdm9pZCBTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpkZWZlclRlc3RzRm9yUmVhc29uKFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdoZWVs
RXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNvbiByZWFzb24pIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2V4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIExPRyhXaGVlbEV2ZW50VGVzdFRyaWdnZXJzLCAiICBTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlTWFjOjpkZWZlclRlc3RzRm9yUmVhc29uOiBTVEFSVElORyBkZWZlcnJh
bCBmb3IgJXAgYmVjYXVzZSBvZiAlZCIsIGlkZW50aWZpZXIsIHJlYXNvbik7Ci0gICAgc2Nyb2xs
aW5nVHJlZSgpLmRlZmVyVGVzdHNGb3JSZWFzb24oaWRlbnRpZmllciwgcmVhc29uKTsKLX0KLSAg
ICAKLXZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6cmVtb3ZlVGVzdERl
ZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dl
clJlYXNvbiByZWFzb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2V4cGVjdHNXaGVlbEV2ZW50VGVz
dFRyaWdnZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBMT0coV2hlZWxFdmVudFRlc3RU
cmlnZ2VycywgIiAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmRlZmVyVGVz
dHNGb3JSZWFzb246IEVORElORyBkZWZlcnJhbCBmb3IgJXAgYmVjYXVzZSBvZiAlZCIsIGlkZW50
aWZpZXIsIHJlYXNvbik7Ci0gICAgc2Nyb2xsaW5nVHJlZSgpLnJlbW92ZVRlc3REZWZlcnJhbEZv
clJlYXNvbihpZGVudGlmaWVyLCByZWFzb24pOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShNQUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kMTQ0MmNkMGM3MzQ0MWRjOTJmM2I4NGFkYzg4NGIxNTJiODFjMzg0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVNYWMuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
LmgiCisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNp
bmNsdWRlICJTY3JvbGxDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRmxvYXRQb2ludDsKK2NsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEludFBvaW50OworY2xhc3Mg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU7CitjbGFzcyBTY3JvbGxpbmdUcmVlOworCitjbGFz
cyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjIDogcHVibGljIFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUsIHByaXZhdGUgU2Nyb2xsQ29udHJvbGxlckNsaWVu
dCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZU1hYyhTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYpOworICAgIHZpcnR1YWwgflNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMoKTsKKworICAgIGJvb2wgaGFuZGxlV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKworI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCisgICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhp
cywgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiwgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJh
bmdlPExheW91dFVuaXQ+PiYpOworICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9y
QXhpcyhTY3JvbGxFdmVudEF4aXMsIHVuc2lnbmVkKTsKKyAgICBib29sIGFjdGl2ZVNjcm9sbFNu
YXBJbmRleERpZENoYW5nZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGFjdGl2ZVNjcm9sbFNuYXBJ
bmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKKyAgICBib29sIGlzU2Nyb2xsU25h
cEluUHJvZ3Jlc3MoKSBjb25zdDsKKyNlbmRpZgorCisgICAgdm9pZCBkZWZlclRlc3RzRm9yUmVh
c29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVl
bEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgcmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJp
Z2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRl
ZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGJv
b2wgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiwgU2Nyb2xsRXZlbnRBeGlzKTsKKworICAgIC8vIFNjcm9sbENvbnRyb2xsZXJDbGll
bnQuCisgICAgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmKSBvdmVycmlkZTsKKyAgICBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyhj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKyAgICBJbnRTaXplIHN0cmV0Y2hB
bW91bnQoKSBvdmVycmlkZTsKKyAgICBib29sIHBpbm5lZEluRGlyZWN0aW9uKGNvbnN0IEZsb2F0
U2l6ZSYpIG92ZXJyaWRlOworICAgIGJvb2wgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5KCkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBjYW5TY3JvbGxWZXJ0aWNhbGx5KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBz
aG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9uKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOworICAg
IHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25z
dCBGbG9hdFNpemUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVy
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNl
c3NhcnkoKSBvdmVycmlkZTsKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgRmxv
YXRQb2ludCBzY3JvbGxPZmZzZXQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGltbWVkaWF0
ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlbHRhKSBvdmVycmlkZTsKKyAg
ICBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHN0YXJ0
U2Nyb2xsU25hcFRpbWVyKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVy
KCkgb3ZlcnJpZGU7CisgICAgTGF5b3V0U2l6ZSBzY3JvbGxFeHRlbnQoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplKCkgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYK
KworICAgIFNjcm9sbENvbnRyb2xsZXIgbV9zY3JvbGxDb250cm9sbGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42ODIzMTMxZWExMmFlMGQ1YjkyOTI3MGNkYTBiYjU1ZjZmNjMz
ZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KQEAgLTAsMCArMSwyOTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaCIKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKKworI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiU2Ny
b2xsaW5nVHJlZS5oIgorI2ltcG9ydCAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5o
IgorI2ltcG9ydCAiU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjKFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
JiBzY3JvbGxpbmdOb2RlKQorICAgIDogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZShzY3JvbGxpbmdOb2RlKQorICAgICwgbV9zY3JvbGxDb250cm9sbGVyKCp0aGlzKQoreworfQor
CitTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjp+U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYygpID0gZGVmYXVsdDsKKwordm9pZCBTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjp1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2
ZW50QXhpcyBheGlzLCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBjb25z
dCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBzbmFwUmFuZ2VzKQorewor
ICAgIG1fc2Nyb2xsQ29udHJvbGxlci51cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGF4aXMsIHNuYXBP
ZmZzZXRzLCBzbmFwUmFuZ2VzKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlTWFjOjpzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50
QXhpcyBheGlzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBtX3Njcm9sbENvbnRyb2xsZXIuc2V0
QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhheGlzLCBpbmRleCk7Cit9CisKK3Vuc2lnbmVk
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFjdGl2ZVNjcm9sbFNuYXBJ
bmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c2Nyb2xsQ29udHJvbGxlci5hY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKGF4aXMpOworfQor
Citib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFjdGl2ZVNjcm9s
bFNuYXBJbmRleERpZENoYW5nZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsQ29udHJv
bGxlci5hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoKTsKK30KKworYm9vbCBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxDb250
cm9sbGVyLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Cit9CisKK2Jvb2wgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsQ29udHJvbGxlci5pc1Njcm9sbFNuYXBJblByb2dy
ZXNzKCk7Cit9CisKKy8vIEZJWE1FOiBXZSBzaG91bGQgZmluZCBhIHdheSB0byBzaGFyZSBzb21l
IG9mIHRoZSBjb2RlIGZyb20gbmV3R2VzdHVyZUlzU3RhcnRpbmcoKSwgaXNBbHJlYWR5UGlubmVk
SW5EaXJlY3Rpb25PZkdlc3R1cmUoKSwKKy8vIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpLCBh
bmQgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBp
biBTY3JvbGxBbmltYXRvck1hYy4KK3N0YXRpYyBib29sIG5ld0dlc3R1cmVJc1N0YXJ0aW5nKGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICByZXR1cm4gd2hlZWxF
dmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTWF5QmVnaW4gfHwgd2hlZWxF
dmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW47Cit9CisKK2Jvb2wg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6aXNBbHJlYWR5UGlubmVkSW5E
aXJlY3Rpb25PZkdlc3R1cmUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBT
Y3JvbGxFdmVudEF4aXMgYXhpcykKK3sKKyAgICBzd2l0Y2ggKGF4aXMpIHsKKyAgICBjYXNlIFNj
cm9sbEV2ZW50QXhpczo6VmVydGljYWw6CisgICAgICAgIHJldHVybiAod2hlZWxFdmVudC5kZWx0
YVkoKSA+IDAgJiYgc2Nyb2xsUG9zaXRpb24oKS55KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9u
KCkueSgpKSB8fCAod2hlZWxFdmVudC5kZWx0YVkoKSA8IDAgJiYgc2Nyb2xsUG9zaXRpb24oKS55
KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpKTsKKyAgICBjYXNlIFNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbDoKKyAgICAgICAgcmV0dXJuICh3aGVlbEV2ZW50LmRlbHRhWCgpID4g
MCAmJiBzY3JvbGxQb3NpdGlvbigpLngoKSA8PSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkp
IHx8ICh3aGVlbEV2ZW50LmRlbHRhWCgpIDwgMCAmJiBzY3JvbGxQb3NpdGlvbigpLngoKSA+PSBt
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlTWFjOjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgc3dpdGNoIChob3Jpem9udGFsU2Ny
b2xsRWxhc3RpY2l0eSgpKSB7CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljOiB7
CisgICAgICAgIGJvb2wgc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyA9IGhhc0VuYWJsZWRIb3Jp
em9udGFsU2Nyb2xsYmFyKCkgfHwgIWhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcigpOworICAg
ICAgICBib29sIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gbmV3R2VzdHVyZUlzU3RhcnRpbmco
d2hlZWxFdmVudCkgJiYgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUod2hlZWxF
dmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKyAgICAgICAgcmV0dXJuIHNjcm9s
bGJhcnNBbGxvd1N0cmV0Y2hpbmcgJiYgIWV2ZW50UHJldmVudHNTdHJldGNoaW5nOworICAgIH0K
KyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFsbG93c1ZlcnRp
Y2FsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7Cisg
ICAgc3dpdGNoICh2ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKSkgeworICAgIGNhc2UgU2Nyb2xs
RWxhc3RpY2l0eUF1dG9tYXRpYzogeworICAgICAgICBib29sIHNjcm9sbGJhcnNBbGxvd1N0cmV0
Y2hpbmcgPSBoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoKSB8fCAhaGFzRW5hYmxlZEhvcml6
b250YWxTY3JvbGxiYXIoKTsKKyAgICAgICAgYm9vbCBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9
IG5ld0dlc3R1cmVJc1N0YXJ0aW5nKHdoZWVsRXZlbnQpICYmIGlzQWxyZWFkeVBpbm5lZEluRGly
ZWN0aW9uT2ZHZXN0dXJlKHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpOwor
ICAgICAgICByZXR1cm4gc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyAmJiAhZXZlbnRQcmV2ZW50
c1N0cmV0Y2hpbmc7CisgICAgfQorICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eU5vbmU6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBbGxvd2VkOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0ludFNpemUgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZU1hYzo6c3RyZXRjaEFtb3VudCgpCit7CisgICAgSW50U2l6ZSBzdHJldGNoOworCisg
ICAgaWYgKHNjcm9sbFBvc2l0aW9uKCkueSgpIDwgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueSgp
KQorICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxQb3NpdGlvbigpLnkoKSAtIG1pbmlt
dW1TY3JvbGxQb3NpdGlvbigpLnkoKSk7CisgICAgZWxzZSBpZiAoc2Nyb2xsUG9zaXRpb24oKS55
KCkgPiBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpCisgICAgICAgIHN0cmV0Y2guc2V0SGVp
Z2h0KHNjcm9sbFBvc2l0aW9uKCkueSgpIC0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpKTsK
KworICAgIGlmIChzY3JvbGxQb3NpdGlvbigpLngoKSA8IG1pbmltdW1TY3JvbGxQb3NpdGlvbigp
LngoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxQb3NpdGlvbigpLngoKSAtIG1p
bmltdW1TY3JvbGxQb3NpdGlvbigpLngoKSk7CisgICAgZWxzZSBpZiAoc2Nyb2xsUG9zaXRpb24o
KS54KCkgPiBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkpCisgICAgICAgIHN0cmV0Y2guc2V0
V2lkdGgoc2Nyb2xsUG9zaXRpb24oKS54KCkgLSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkp
OworCisgICAgaWYgKHNjcm9sbGluZ05vZGUoKS5pc1Jvb3ROb2RlKCkpIHsKKyAgICAgICAgaWYg
KHN0cmV0Y2guaXNaZXJvKCkpCisgICAgICAgICAgICBzY3JvbGxpbmdUcmVlKCkuc2V0TWFpbkZy
YW1lSXNSdWJiZXJCYW5kaW5nKGZhbHNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2Ny
b2xsaW5nVHJlZSgpLnNldE1haW5GcmFtZUlzUnViYmVyQmFuZGluZyh0cnVlKTsKKyAgICB9CisK
KyAgICByZXR1cm4gc3RyZXRjaDsKK30KKworYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlTWFjOjpwaW5uZWRJbkRpcmVjdGlvbihjb25zdCBGbG9hdFNpemUmIGRlbHRhKQor
eworICAgIEZsb2F0U2l6ZSBsaW1pdERlbHRhOworCisgICAgaWYgKGZhYnNmKGRlbHRhLmhlaWdo
dCgpKSA+PSBmYWJzZihkZWx0YS53aWR0aCgpKSkgeworICAgICAgICBpZiAoZGVsdGEuaGVpZ2h0
KCkgPCAwKSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCB1cC4gTWFr
ZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSB0b3AuCisgICAgICAgICAgICBsaW1pdERl
bHRhLnNldEhlaWdodChzY3JvbGxQb3NpdGlvbigpLnkoKSAtIG1pbmltdW1TY3JvbGxQb3NpdGlv
bigpLnkoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5n
IHRvIHNjcm9sbCBkb3duLiBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGJvdHRv
bS4KKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1heGltdW1TY3JvbGxQb3NpdGlv
bigpLnkoKSAtIHNjcm9sbFBvc2l0aW9uKCkueSgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAoZGVsdGEud2lkdGgoKSkgeworICAgICAgICBpZiAoZGVsdGEud2lkdGgoKSA8IDApIHsKKyAg
ICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGxlZnQuIE1ha2Ugc3VyZSB3ZSBh
cmUgbm90IHBpbm5lZCB0byB0aGUgbGVmdC4KKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lk
dGgoc2Nyb2xsUG9zaXRpb24oKS54KCkgLSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwg
cmlnaHQuIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgcmlnaHQuCisgICAgICAg
ICAgICBsaW1pdERlbHRhLnNldFdpZHRoKG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSAtIHNj
cm9sbFBvc2l0aW9uKCkueCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgoZGVsdGEu
d2lkdGgoKSB8fCBkZWx0YS5oZWlnaHQoKSkgJiYgKGxpbWl0RGVsdGEud2lkdGgoKSA8IDEgJiYg
bGltaXREZWx0YS5oZWlnaHQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
TWFjOjpjYW5TY3JvbGxIb3Jpem9udGFsbHkoKQoreworICAgIHJldHVybiBoYXNFbmFibGVkSG9y
aXpvbnRhbFNjcm9sbGJhcigpOworfQorCitib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVNYWM6OmNhblNjcm9sbFZlcnRpY2FsbHkoKQoreworICAgIHJldHVybiBoYXNFbmFi
bGVkVmVydGljYWxTY3JvbGxiYXIoKTsKK30KKworYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlTWFjOjpzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsRGlyZWN0
aW9uKQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgZGVs
dGEpCit7CisgICAgc2Nyb2xsaW5nTm9kZSgpLnNjcm9sbEJ5KGRlbHRhKTsKK30KKwordm9pZCBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjppbW1lZGlhdGVTY3JvbGxCeVdp
dGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQorewor
ICAgIHNjcm9sbGluZ05vZGUoKS5zY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRz
KG9mZnNldCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1h
Yzo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKQoreworICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRN
YWluRnJhbWVJc1J1YmJlckJhbmRpbmcoZmFsc2UpOworCisgICAgLy8gU2luY2UgdGhlIHJ1YmJl
cmJhbmQgdGltZXIgaGFzIHN0b3BwZWQsIHRvdGFsQ29udGVudHNTaXplRm9yUnViYmVyQmFuZCBj
YW4gYmUgc3luY2hyb25pemVkIHdpdGggdG90YWxDb250ZW50c1NpemUuCisgICAgc2Nyb2xsaW5n
Tm9kZSgpLnNldFRvdGFsQ29udGVudHNTaXplRm9yUnViYmVyQmFuZCh0b3RhbENvbnRlbnRzU2l6
ZSgpKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjph
ZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKQoreworICAgIEZsb2F0UG9p
bnQgY3VycmVudFNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24oKTsKKyAgICBGbG9hdFBv
aW50IGNvbnN0cmFpbmVkUG9zaXRpb24gPSBjdXJyZW50U2Nyb2xsUG9zaXRpb24uY29uc3RyYWlu
ZWRCZXR3ZWVuKG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24o
KSk7CisgICAgaW1tZWRpYXRlU2Nyb2xsQnkoY29uc3RyYWluZWRQb3NpdGlvbiAtIGN1cnJlbnRT
Y3JvbGxQb3NpdGlvbik7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorRmxvYXRQ
b2ludCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpzY3JvbGxPZmZzZXQo
KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbigpOworfQorCit2b2lkIFNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmltbWVkaWF0ZVNjcm9sbE9uQXhpcyhT
Y3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgZGVsdGEpCit7CisgICAgY29uc3QgRmxvYXRQb2lu
dCYgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24oKTsKKyAgICBGbG9hdFBvaW50IGNo
YW5nZTsKKyAgICBpZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpCisgICAg
ICAgIGNoYW5nZSA9IEZsb2F0UG9pbnQoY3VycmVudFBvc2l0aW9uLngoKSArIGRlbHRhLCBjdXJy
ZW50UG9zaXRpb24ueSgpKTsKKyAgICBlbHNlCisgICAgICAgIGNoYW5nZSA9IEZsb2F0UG9pbnQo
Y3VycmVudFBvc2l0aW9uLngoKSwgY3VycmVudFBvc2l0aW9uLnkoKSArIGRlbHRhKTsKKworICAg
IGltbWVkaWF0ZVNjcm9sbEJ5KGNoYW5nZSAtIGN1cnJlbnRQb3NpdGlvbik7Cit9CisKK2Zsb2F0
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnBhZ2VTY2FsZUZhY3Rvcigp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFdoYXQgc2hvdWxkIHRoaXMgcmV0dXJuIGZvciBub24t
cm9vdCBmcmFtZXMsIGFuZCBvdmVyZmxvdz8KKyAgICAvLyBBbHNvLCB0aGlzIHNob3VsZCBub3Qg
aGF2ZSB0byBhY2Nlc3MgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS4KKyAgICBpZiAo
aXM8U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZT4oc2Nyb2xsaW5nTm9kZSgpKSkKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+KHNj
cm9sbGluZ05vZGUoKSkuZnJhbWVTY2FsZUZhY3RvcigpOworCisgICAgcmV0dXJuIDE7Cit9CisK
K3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c3RhcnRTY3JvbGxT
bmFwVGltZXIoKQoreworICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRNYWluRnJhbWVJc1Njcm9sbFNu
YXBwaW5nKHRydWUpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWM6OnN0b3BTY3JvbGxTbmFwVGltZXIoKQoreworICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRN
YWluRnJhbWVJc1Njcm9sbFNuYXBwaW5nKGZhbHNlKTsKK30KKyAgICAKK0xheW91dFNpemUgU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c2Nyb2xsRXh0ZW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gTGF5b3V0U2l6ZSh0b3RhbENvbnRlbnRzU2l6ZSgpKTsKK30KKworRmxv
YXRTaXplIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnZpZXdwb3J0U2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGFibGVBcmVhU2l6ZSgpOworfQorI2VuZGlm
CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6ZGVmZXJUZXN0
c0ZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFz
b24gcmVhc29uKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsaW5nTm9kZSgpLmV4cGVjdHNXaGVl
bEV2ZW50VGVzdFRyaWdnZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HKFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcnMsICIgIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6
OmRlZmVyVGVzdHNGb3JSZWFzb246IFNUQVJUSU5HIGRlZmVycmFsIGZvciAlcCBiZWNhdXNlIG9m
ICVkIiwgaWRlbnRpZmllciwgcmVhc29uKTsKKyAgICBzY3JvbGxpbmdUcmVlKCkuZGVmZXJUZXN0
c0ZvclJlYXNvbihpZGVudGlmaWVyLCByZWFzb24pOworfQorICAgIAordm9pZCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpyZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24o
V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uIHJlYXNvbikg
Y29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbGluZ05vZGUoKS5leHBlY3RzV2hlZWxFdmVudFRlc3RU
cmlnZ2VyKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBMT0coV2hlZWxFdmVudFRlc3RU
cmlnZ2VycywgIiAgIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmRlZmVy
VGVzdHNGb3JSZWFzb246IEVORElORyBkZWZlcnJhbCBmb3IgJXAgYmVjYXVzZSBvZiAlZCIsIGlk
ZW50aWZpZXIsIHJlYXNvbik7CisgICAgc2Nyb2xsaW5nVHJlZSgpLnJlbW92ZVRlc3REZWZlcnJh
bEZvclJlYXNvbihpZGVudGlmaWVyLCByZWFzb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>