<?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>137804</bug_id>
          
          <creation_ts>2014-10-16 20:56:14 -0700</creation_ts>
          <short_desc>Use is&lt;&gt;() / downcast&lt;&gt;() for RenderBox</short_desc>
          <delta_ts>2014-10-17 14:25:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137424</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>mihnea</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1042278</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-16 20:56:14 -0700</bug_when>
    <thetext>Use is&lt;&gt;() / downcast&lt;&gt;() for RenderBox</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042283</commentid>
    <comment_count>1</comment_count>
      <attachid>239995</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-16 21:23:29 -0700</bug_when>
    <thetext>Created attachment 239995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042289</commentid>
    <comment_count>2</comment_count>
      <attachid>239996</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-16 21:40:14 -0700</bug_when>
    <thetext>Created attachment 239996
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042452</commentid>
    <comment_count>3</comment_count>
      <attachid>239996</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-10-17 13:48:36 -0700</bug_when>
    <thetext>Comment on attachment 239996
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042477</commentid>
    <comment_count>4</comment_count>
      <attachid>239996</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-17 14:25:11 -0700</bug_when>
    <thetext>Comment on attachment 239996
Patch

Clearing flags on attachment: 239996

Committed r174840: &lt;http://trac.webkit.org/changeset/174840&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042478</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-17 14:25:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239995</attachid>
            <date>2014-10-16 21:23:29 -0700</date>
            <delta_ts>2014-10-16 21:40:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137804-20141016212335.patch</filename>
            <type>text/plain</type>
            <size>163765</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ5M2E4ZDhlZjUyNzYx
NDFiNWJhN2JlNjY2YmFjMGZlYWJhNGE0Yy4uNzNkYzBlOTk2ZDZlMzEzMDI3NGFiYTYxNDk1Zjc4
MTEyYjQ4YjkyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIxOSBAQAogMjAxNC0xMC0xNiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3du
Y2FzdDw+KCkgZm9yIFJlbmRlckJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM3ODA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgUmVuZGVyQm94IGFu
ZCBjbGVhbiB1cCB0aGUgc3Vycm91bmRpbmcKKyAgICAgICAgY29kZS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0
VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpnZXRT
Y3JvbGxhYmxlQXJlYUlmU2Nyb2xsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyk6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET01I
VE1MLm1tOgorICAgICAgICAoLVtET01IVE1MRWxlbWVudCBzY3JvbGxZT2Zmc2V0XSk6CisgICAg
ICAgICgtW0RPTUhUTUxFbGVtZW50IHNldFNjcm9sbFhPZmZzZXQ6c2Nyb2xsWU9mZnNldDphZGp1
c3RGb3JJT1NDYXJldDpdKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5z
aW9ucy5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBib3JkZXJSYWRpaV0pOgorICAgICAgICAqIGNz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2l6
aW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVkVHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6Onpvb21BZGp1c3RlZFBhZGRpbmdPck1hcmdpblBpeGVsVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZSk6CisgICAg
ICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVy
Tm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcik6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9y
RWxlbWVudCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6c2Nyb2xsQnlVbml0cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogZG9tL1Bv
c2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3Rp
bmN0UG9zaXRpb25zKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNEZWxldGFibGVFbGVtZW50KToKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmVydGljYWxTY3Jv
bGxEaXN0YW5jZSk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYXJldEJhc2U6OnBhaW50Q2FyZXQpOgorICAgICAgICAqIGVkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZ1bGx5Q2xpcHNDb250ZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRFbWl0RXh0cmFOZXdsaW5lRm9yTm9kZSk6CisgICAg
ICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphYnNvbHV0
ZUJvdW5kc0ZvckxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6
aXNGb2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjaGVja1NpemVDaGFu
Z2VGb3JTbmFwc2hvdHRpbmcpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpzZXRQb3NpdGlvbkZyb21Q
b2ludCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyk6CisgICAgICAgICogcGFnZS9B
dXRvc2Nyb2xsQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdXRvc2Nyb2xsQ29u
dHJvbGxlcjo6dXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVyKToKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnN0YXJ0UGFuU2Ny
b2xsaW5nKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6OmVtYmVkZGVkQ29udGVudEJveCk6CisgICAgICAgICogcGFnZS9HZXN0dXJl
VGFwSGlnaGxpZ2h0ZXIuY3BwOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxhYmxlTm9kZSk6CisgICAgICAgICogcGFnZS9h
bmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Ymxl
bmRGdW5jKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAg
ICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjppbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojpsb2dpY2FsSGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6YWRqdXN0UG9zaXRpb24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9JbmxpbmVFbGVtZW50Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUVsZW1lbnRCb3g6OmRlbGV0ZUxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRWxl
bWVudEJveDo6ZXh0cmFjdExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRWxlbWVudEJv
eDo6YXR0YWNoTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVFbGVtZW50Qm94OjpwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVFbGVtZW50Qm94Ojpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lRmxvd0JveDo6YWRkVG9MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dC
b3g6OmFkZFJlcGxhY2VkQ2hpbGRPdmVyZmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL0xheW91
dFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpzaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6bWFya0ZpeGVkUG9zaXRpb25PYmplY3RGb3JMYXlvdXRJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2xlYXJQZXJjZW50SGVpZ2h0RGVz
Y2VuZGFudHNGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlQmxv
Y2tQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnJlYnVpbGRGbG9hdGlu
Z09iamVjdFNldEZyb21JbnRydWRpbmdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93Ojpwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvckxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRMaW5lQm94ZXMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpmaW5kQXV0b3Njcm9sbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUJs
b2NrU3RhdGljRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpwb3NpdGlv
bkZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bGF5b3V0T3ZlcmZsb3dS
ZWN0Rm9yUHJvcGFnYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cHJldmlvdXNTaWJsaW5nQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6bmV4dFNpYmxpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpwYXJlbnRCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpmaXJz
dENoaWxkQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bGFzdENoaWxkQm94KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRv
T2Zmc2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpj
b21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVu
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVC
YWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVtb3ZlQ2hpbGRJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpzdHlsZVdpbGxDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVwYWludEFmdGVyTGF5b3V0SWZO
ZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6bGF5b3V0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RmllbGRzZXQ6OmZpbmRMZWdlbmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkanVzdGVkUG9z
aXRpb25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZs
b3dUaHJlYWQ6OmN1cnJlbnRBY3RpdmVSZW5kZXJCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJGbG93VGhyZWFkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnVsbFNjcmVlbjo6dW53cmFwUmVuZGVyZXIp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6bGF5b3V0U2hhZG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklu
bGluZTo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFk
ZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBlcnNwZWN0aXZlVHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZU9yaWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJlbnRMYXllckNyb3NzRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6cmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxz
T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVJlZmVyZW5jZUJveCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXNl
dENvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBv
c2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnVwZGF0ZURpcmVjdGx5Q29tcG9zaXRlZEJhY2tncm91bmRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRlbnRzQm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6YmFja2dyb3VuZEJveEZvclBhaW50aW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6c3RhcnRBbmltYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRyYW5zaXRpb24p
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaW5lQm94TGlzdDo6cmFuZ2VJbnRlcnNlY3RzUmVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpmaXJzdENvbHVtblNldE9yU3Bh
bm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6Om5l
eHRDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkOjpwcmV2aW91c0NvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdP
Zik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnJlc29s
dmVNb3ZlZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRDb2x1bW5TcGFubmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6aGFuZGxlU3Bh
bm5lclJlbW92YWwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjpzaG93UmVnaW9uc0luZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6c2hvd1JlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6Om1hcExvY2FsVG9Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjphZGRBbm5vdGF0ZWRSZWdpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om5vZGVBdFBv
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmxheW91dFNw
ZWNpYWxFeGNsdWRlZENoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjZW50
ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6
YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJp
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpiYXNlbGluZVBvc2l0
aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJl
bmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJWaWV3OjpwYWludEJveERlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZXRMaW5l
QnJlYWtJbmZvKToKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxp
bmVIZWFkZXJzLmg6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZU91
dE9mRmxvd1Bvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0Ojpo
YW5kbGVGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVJl
cGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lQnJlYWtlcjo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lQnJlYWtlcjo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmxheW91dCk6CisgICAgICAgICogc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjplbWJl
ZGRlZENvbnRlbnRCb3gpOgorCisyMDE0LTEwLTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CisKICAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgQmFzaWNTaGFw
ZSBzdWJjbGFzc2VzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzc3NjYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDIwYzgwYmYyNDM1N2FiMjExNjdiNzkx
N2M2NzhhNWYxNzQyNWE2MDMuLmM1MWVhMTIyNmUxYmEwMTcxZTU2MmY3OGEyZDg4MmY3YmY2MWQx
YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNC0xMC0xNiAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2Fz
dDw+KCkgZm9yIFJlbmRlckJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM3ODA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgUmVuZGVyQm94IGFuZCBj
bGVhbiB1cCB0aGUgc3Vycm91bmRpbmcKKyAgICAgICAgY29kZS4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tOgorICAgICAgICAoV2ViQ29udGV4dE1l
bnVDbGllbnQ6OmNsaWVudEZsb2F0UmVjdEZvck5vZGUpOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
RnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIHJlbmRlcmVkU2l6ZU9mTm9kZTpjb25zdHJh
aW5lZFRvV2lkdGg6XSk6CisKIDIwMTQtMTAtMTYgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IHNlbGVjdGlvbiBzZXJ2aWNlcyBtZW51
IGZvciBMZWdhY3kgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggM2UxYzg3MDJjZTcyZjQ1YzIz
MDMxMWFiMWVlYWI4ODIwMTQ4NmY4My4uZGUwNWExYzY1ODc5ZmNlMTkwNTNkZWIyMGI1ZTliYTVk
ZTBhZmM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTEwLTE2ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRv
d25jYXN0PD4oKSBmb3IgUmVuZGVyQm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzc4MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBSZW5kZXJCb3gg
YW5kIGNsZWFuIHVwIHRoZSBzdXJyb3VuZGluZworICAgICAgICBjb2RlLgorCisgICAgICAgICog
V2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpnZXN0dXJlTm90aWZ5KToKKwogMjAxNC0x
MC0xNiAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3NDc1NC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBlMTRjMjgzOGY0
OWJmZmM0ZDRlODI0NWRhNDRmMDVlZDQ5ZTg3NDY1Li4xYmIxNTE4NWE2NjNjNWZkZWRlNjRiMjAx
MWM4NDhjYjRiZWU4NzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTQtMTAtMTYg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBSZW5kZXJCb3gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNzgwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIFJlbmRlckJv
eCBhbmQgY2xlYW4gdXAgdGhlIHN1cnJvdW5kaW5nCisgICAgICAgIGNvZGUuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmRldGVybWluZVByaW1hcnlTbmFwc2hvdHRlZFBsdWdJbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnBsdWdJbklzUHJpbWFyeVNpemUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VuZFRh
cEhpZ2hsaWdodEZvck5vZGVJZk5lY2Vzc2FyeSk6CisKIDIwMTQtMTAtMTYgIFBhc2NhbCBKYWNx
dWVtYXJ0ICA8cC5qYWNxdWVtYXJ0QHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJlbW92aW5nIENV
U1RPTV9QUk9UT0NPTFMgZ3VhcmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDJkNTYwMGJkMGQ5
MTI0NmMzZDg2YzU1OGMwNjAyZTY5MmRkYjVmNDIuLjQyZGIzNTcyMWExZGJmODAwYTM2NGM5YTdj
NzBkZWFkYmQ3MmEzZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMTMyOSw5ICsxMzI5LDkg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21wdXRlQWNjZXNzaWJpbGl0eUlz
SWdub3JlZCgpIGNvbnN0CiAgICAgICAgIGlmIChjYW52YXNIYXNGYWxsYmFja0NvbnRlbnQoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAobV9yZW5kZXJlci0+aXNC
b3goKSkgewotICAgICAgICAgICAgUmVuZGVyQm94KiBjYW52YXNCb3ggPSB0b1JlbmRlckJveCht
X3JlbmRlcmVyKTsKLSAgICAgICAgICAgIGlmIChjYW52YXNCb3gtPmhlaWdodCgpIDw9IDEgfHwg
Y2FudmFzQm94LT53aWR0aCgpIDw9IDEpCisgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCptX3Jl
bmRlcmVyKSkgeworICAgICAgICAgICAgYXV0byYgY2FudmFzQm94ID0gZG93bmNhc3Q8UmVuZGVy
Qm94PigqbV9yZW5kZXJlcik7CisgICAgICAgICAgICBpZiAoY2FudmFzQm94LmhlaWdodCgpIDw9
IDEgfHwgY2FudmFzQm94LndpZHRoKCkgPD0gMSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgICAgICAvLyBPdGhlcndpc2UgZmFsbCB0aHJvdWdoOyB1c2UgcHJl
c2VuY2Ugb2YgaGVscCB0ZXh0LCB0aXRsZSwgb3IgZGVzY3JpcHRpb24gdG8gZGVjaWRlLgpAQCAt
MjE4MCw3ICsyMTgwLDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG8KICAgICAKICAgICBtX3Jl
bmRlcmVyLT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCi0gICAgUmVuZGVyTGF5ZXIqIGxh
eWVyID0gdG9SZW5kZXJCb3gobV9yZW5kZXJlciktPmxheWVyKCk7CisgICAgUmVuZGVyTGF5ZXIq
IGxheWVyID0gZG93bmNhc3Q8UmVuZGVyQm94PigqbV9yZW5kZXJlcikubGF5ZXIoKTsKICAgICAg
CiAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBI
aXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OkFjY2Vzc2liaWxpdHlIaXRU
ZXN0KTsKICAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHQgPSBIaXRUZXN0UmVzdWx0KHBv
aW50KTsKQEAgLTM0NTYsMjcgKzM0NTYsMjYgQEAgU2Nyb2xsYWJsZUFyZWEqIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlKCkgY29uc3QKICAg
ICBpZiAocGFyZW50T2JqZWN0KCkgJiYgcGFyZW50T2JqZWN0KCktPmlzQWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXcoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoIW1fcmVuZGVy
ZXIgfHwgIW1fcmVuZGVyZXItPmlzQm94KCkpCisgICAgaWYgKCFpczxSZW5kZXJCb3g+KG1fcmVu
ZGVyZXIpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlbmRlckJveCogYm94ID0g
dG9SZW5kZXJCb3gobV9yZW5kZXJlcik7Ci0gICAgaWYgKCFib3gtPmNhbkJlU2Nyb2xsZWRBbmRI
YXNTY3JvbGxhYmxlQXJlYSgpKQorICAgIGF1dG8mIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
Km1fcmVuZGVyZXIpOworICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxl
QXJlYSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBib3gtPmxheWVy
KCk7CisgICAgcmV0dXJuIGJveC5sYXllcigpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPmlzQm94KCkpCisgICAgaWYgKCFpczxSZW5k
ZXJCb3g+KG1fcmVuZGVyZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJCb3gqIGJv
eCA9IHRvUmVuZGVyQm94KG1fcmVuZGVyZXIpOwotICAgIGlmICghYm94LT5jYW5CZVNjcm9sbGVk
QW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKKyAgICBhdXRvJiBib3ggPSBkb3duY2FzdDxSZW5kZXJC
b3g+KCptX3JlbmRlcmVyKTsKKyAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xs
YWJsZUFyZWEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0g
Ym94LT5sYXllcigpOwotICAgIGxheWVyLT5zY3JvbGxUb09mZnNldCh0b0ludFNpemUocG9pbnQp
LCBSZW5kZXJMYXllcjo6U2Nyb2xsT2Zmc2V0Q2xhbXBlZCk7CisgICAgYm94LmxheWVyKCktPnNj
cm9sbFRvT2Zmc2V0KHRvSW50U2l6ZShwb2ludCksIFJlbmRlckxheWVyOjpTY3JvbGxPZmZzZXRD
bGFtcGVkKTsKIH0KIAogI2lmIEVOQUJMRShNQVRITUwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTUhUTUwubW0KaW5kZXggMDEyOTE4NGVhMTBiYTM5OTVhMTRkMmI1NDM0YTc0NDlkMTA2
ZThmOS4uZDZjNGRkZmJlYjhjNzQ2NmY4YmQ3YTc0ZGZhZWYxMGM4ZTg5NDcyYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSFRNTC5tbQpAQCAtNzEsMjkgKzcxLDI3IEBAIC0gKGlu
dClzY3JvbGxYT2Zmc2V0CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBpZiAoIXJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxvdygpKQorICAgIGlmICghaXM8UmVu
ZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpKQogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5j
b250YWluaW5nQmxvY2soKTsKIAotICAgIGlmICghcmVuZGVyZXItPmlzQm94KCkgfHwgIXJlbmRl
cmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICBpZiAoIWlzPFJlbmRlckJveD4oKnJlbmRlcmVy
KSB8fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIFJlbmRlckJveCAqcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwotICAgIHJl
dHVybiByZW5kZXJCb3gtPmxheWVyKCktPnNjcm9sbFhPZmZzZXQoKTsKKyAgICByZXR1cm4gZG93
bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCktPnNjcm9sbFhPZmZzZXQoKTsKIH0K
IAogLSAoaW50KXNjcm9sbFlPZmZzZXQKIHsKLSAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0g
Y29yZShzZWxmKS0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29y
ZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIGlmICghcmVuZGVyZXItPmlzUmVuZGVyQmxvY2tGbG93KCkpCisgICAgaWYgKCFp
czxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikpCiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVy
ZXItPmNvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmICghcmVuZGVyZXItPmlzQm94KCkgfHwgIXJl
bmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICBpZiAoIWlzPFJlbmRlckJveD4oKnJlbmRl
cmVyKSB8fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIFJlbmRlckJveCAqcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwotICAg
IHJldHVybiByZW5kZXJCb3gtPmxheWVyKCktPnNjcm9sbFlPZmZzZXQoKTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCktPnNjcm9sbFlPZmZzZXQoKTsK
IH0KIAogLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBzY3JvbGxZT2Zmc2V0OihpbnQp
eQpAQCAtMTAzLDE3ICsxMDEsMTYgQEAgLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBz
Y3JvbGxZT2Zmc2V0OihpbnQpeQogCiAtICh2b2lkKXNldFNjcm9sbFhPZmZzZXQ6KGludCl4IHNj
cm9sbFlPZmZzZXQ6KGludCl5IGFkanVzdEZvcklPU0NhcmV0OihCT09MKWFkanVzdEZvcklPU0Nh
cmV0CiB7Ci0gICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVy
KCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7
CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFyZW5kZXJl
ci0+aXNSZW5kZXJCbG9ja0Zsb3coKSkKKyAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4oKnJl
bmRlcmVyKSkKICAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgaWYgKCFyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXJlbmRlcmVyLT5pc0Jv
eCgpKQorICAgIGlmICghcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpIHx8ICFpczxSZW5kZXJC
b3g+KCpyZW5kZXJlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlckJveCAqcmVuZGVy
Qm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwotICAgIFJlbmRlckxheWVyICpsYXllciA9IHJl
bmRlckJveC0+bGF5ZXIoKTsKKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCiAg
ICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAg
ICAgbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KEludFNpemUoeCwgeSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQppbmRleCBjYTBkODg5
M2I2ODczNGQyNzI5ZmZiNDI3YjMwMjliNzAxYTM3ZDVlLi5iOGQ5MzMwNWE5NzMyMzVjY2E3MzA3
MDVlZTNiNGY0M2Q1ZDQ5MWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQpAQCAtMTkzLDkgKzE5Myw4IEBAIC0gKE5TQXJyYXkg
Kilib3JkZXJSYWRpaQogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlKHNlbGYp
LT5yZW5kZXJlcigpOwogICAgIAotCi0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0Jv
eCgpKSB7Ci0gICAgICAgIFJvdW5kZWRSZWN0OjpSYWRpaSByYWRpaSA9IHRvUmVuZGVyQm94KHJl
bmRlcmVyKS0+Ym9yZGVyUmFkaWkoKTsKKyAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcikp
IHsKKyAgICAgICAgUm91bmRlZFJlY3Q6OlJhZGlpIHJhZGlpID0gZG93bmNhc3Q8UmVuZGVyQm94
PigqcmVuZGVyZXIpLmJvcmRlclJhZGlpKCk7CiAgICAgICAgIHJldHVybiBAW1tOU1ZhbHVlIHZh
bHVlV2l0aFNpemU6KEZsb2F0U2l6ZSlyYWRpaS50b3BMZWZ0KCldLAogICAgICAgICAgICAgICAg
ICBbTlNWYWx1ZSB2YWx1ZVdpdGhTaXplOihGbG9hdFNpemUpcmFkaWkudG9wUmlnaHQoKV0sCiAg
ICAgICAgICAgICAgICAgIFtOU1ZhbHVlIHZhbHVlV2l0aFNpemU6KEZsb2F0U2l6ZSlyYWRpaS5i
b3R0b21MZWZ0KCldLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcAppbmRleCA2NTIwMmE0MjdkMjYzYTNiNzcxMWU2MmExZTI5YzVhYTBj
ZTFiNTk3Li5jNWNjNjk3Njc5MmNjNzMyZGUyNGUyZWQxOTcyM2I5NzI5MjZlZGRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApA
QCAtNzg3LDEzICs3ODcsMTMgQEAgc3RhdGljIFBhc3NSZWY8Q1NTVmFsdWVMaXN0PiBnZXRCb3Jk
ZXJSYWRpdXNTaG9ydGhhbmRWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3QKICAgICByZXR1cm4g
bGlzdDsKIH0KIAotc3RhdGljIExheW91dFJlY3Qgc2l6aW5nQm94KFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCitzdGF0aWMgTGF5b3V0UmVjdCBzaXppbmdCb3goUmVuZGVyT2JqZWN0JiByZW5kZXJl
cikKIHsKLSAgICBpZiAoIXJlbmRlcmVyLT5pc0JveCgpKQorICAgIGlmICghaXM8UmVuZGVyQm94
PihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKLSAgICBSZW5kZXJC
b3gqIGJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKLSAgICByZXR1cm4gYm94LT5zdHlsZSgp
LmJveFNpemluZygpID09IEJPUkRFUl9CT1ggPyBib3gtPmJvcmRlckJveFJlY3QoKSA6IGJveC0+
Y29tcHV0ZWRDU1NDb250ZW50Qm94UmVjdCgpOworICAgIGF1dG8mIGJveCA9IGRvd25jYXN0PFJl
bmRlckJveD4ocmVuZGVyZXIpOworICAgIHJldHVybiBib3guc3R5bGUoKS5ib3hTaXppbmcoKSA9
PSBCT1JERVJfQk9YID8gYm94LmJvcmRlckJveFJlY3QoKSA6IGJveC5jb21wdXRlZENTU0NvbnRl
bnRCb3hSZWN0KCk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmPFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
PiBtYXRyaXhUcmFuc2Zvcm1WYWx1ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCkBAIC04NDEsOCArODQxLDggQEAgc3RhdGlj
IFBhc3NSZWY8Q1NTVmFsdWU+IGNvbXB1dGVkVHJhbnNmb3JtKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlclMKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogCiAgICAgRmxvYXRSZWN0IHBpeGVsU25hcHBl
ZFJlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpKQotICAgICAgICBwaXhlbFNuYXBwZWRS
ZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyh0b1JlbmRlckJveChyZW5kZXJlciktPmJvcmRl
ckJveFJlY3QoKSwgcmVuZGVyZXItPmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Cisg
ICAgaWYgKGlzPFJlbmRlckJveD4oKnJlbmRlcmVyKSkKKyAgICAgICAgcGl4ZWxTbmFwcGVkUmVj
dCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIp
LmJvcmRlckJveFJlY3QoKSwgcmVuZGVyZXItPmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CiAgICAgc3R5bGUtPmFw
cGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkUmVjdCwgUmVuZGVyU3R5bGU6OkV4
Y2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwpAQCAtMTU3Myw5ICsxNTczLDkgQEAgdGVtcGxhdGU8UmVu
ZGVyU3R5bGVMZW5ndGhHZXR0ZXIgbGVuZ3RoR2V0dGVyLCBSZW5kZXJCb3hDb21wdXRlZENTU1Zh
bHVlR2V0dGVyIGMKIGlubGluZSBQYXNzUmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0ZWRQYWRk
aW5nT3JNYXJnaW5QaXhlbFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKIHsKICAgICBMZW5ndGggdW56b29temVkTGVuZ3RoID0gKHN0eWxlLT4qbGVuZ3Ro
R2V0dGVyKSgpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0JveCgpIHx8IHVu
em9vbXplZExlbmd0aC5pc0ZpeGVkKCkpCisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVy
KSB8fCB1bnpvb216ZWRMZW5ndGguaXNGaXhlZCgpKQogICAgICAgICByZXR1cm4gem9vbUFkanVz
dGVkUGl4ZWxWYWx1ZUZvckxlbmd0aCh1bnpvb216ZWRMZW5ndGgsIHN0eWxlKTsKLSAgICByZXR1
cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZSgodG9SZW5kZXJCb3gocmVuZGVyZXIpLT4qY29tcHV0
ZWRDU1NWYWx1ZUdldHRlcikoKSwgc3R5bGUpOworICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhl
bFZhbHVlKChkb3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuKmNvbXB1dGVkQ1NTVmFsdWVH
ZXR0ZXIpKCksIHN0eWxlKTsKIH0KIAogdGVtcGxhdGU8UmVuZGVyU3R5bGVMZW5ndGhHZXR0ZXIg
bGVuZ3RoR2V0dGVyPgpAQCAtMjE4Myw3ICsyMTgzLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnQKICAgICAgICAgICAgICAgICAvLyB0aGUgImhlaWdodCIgcHJvcGVydHkgZG9lcyBub3QgYXBw
bHkgZm9yIG5vbi1yZXBsYWNlZCBpbmxpbmUgZWxlbWVudHMuCiAgICAgICAgICAgICAgICAgaWYg
KCFyZW5kZXJlci0+aXNSZXBsYWNlZCgpICYmIHJlbmRlcmVyLT5pc0lubGluZSgpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQXV0byk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVs
VmFsdWUoc2l6aW5nQm94KHJlbmRlcmVyKS5oZWlnaHQoKSwgc3R5bGUuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHNpemluZ0JveCgqcmVuZGVy
ZXIpLmhlaWdodCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChzdHlsZS0+aGVpZ2h0KCksIHN0
eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6CkBAIC0y
MjQ2LDE2ICsyMjQ2LDE2IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRy
YWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0CiAgICAgICAgICAgICBy
ZXR1cm4gem9vbUFkanVzdGVkUGFkZGluZ09yTWFyZ2luUGl4ZWxWYWx1ZTwmUmVuZGVyU3R5bGU6
Om1hcmdpblRvcCwgJlJlbmRlckJveE1vZGVsT2JqZWN0OjptYXJnaW5Ub3A+KHN0eWxlLmdldCgp
LCByZW5kZXJlcik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5SaWdodDogewogICAg
ICAgICAgICAgTGVuZ3RoIG1hcmdpblJpZ2h0ID0gc3R5bGUtPm1hcmdpblJpZ2h0KCk7Ci0gICAg
ICAgICAgICBpZiAobWFyZ2luUmlnaHQuaXNGaXhlZCgpIHx8ICFyZW5kZXJlciB8fCAhcmVuZGVy
ZXItPmlzQm94KCkpCisgICAgICAgICAgICBpZiAobWFyZ2luUmlnaHQuaXNGaXhlZCgpIHx8ICFp
czxSZW5kZXJCb3g+KHJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVz
dGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChtYXJnaW5SaWdodCwgc3R5bGUuZ2V0KCkpOwogICAgICAg
ICAgICAgZmxvYXQgdmFsdWU7CiAgICAgICAgICAgICBpZiAobWFyZ2luUmlnaHQuaXNQZXJjZW50
KCkpIHsKICAgICAgICAgICAgICAgICAvLyBSZW5kZXJCb3ggZ2l2ZXMgYSBtYXJnaW5SaWdodCgp
IHRoYXQgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHJpZ2h0LWVkZ2Ugb2YgdGhlIGNoaWxk
IGJveAogICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgcmlnaHQtZWRnZSBvZiB0aGUgY29udGFp
bmluZyBib3gsIHdoZW4gZGlzcGxheSA9PSBCTE9DSy4gTGV0J3MgY2FsY3VsYXRlIHRoZSBhYnNv
bHV0ZQogICAgICAgICAgICAgICAgIC8vIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgbWFyZ2luLXJp
Z2h0ICUgaW5zdGVhZCBvZiByZWx5aW5nIG9uIFJlbmRlckJveCdzIG1hcmdpblJpZ2h0KCkgdmFs
dWUuCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBtaW5pbXVtVmFsdWVGb3JMZW5ndGgobWFyZ2lu
UmlnaHQsIHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRo
Rm9yQ29udGVudCgpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG1pbmltdW1WYWx1ZUZvckxl
bmd0aChtYXJnaW5SaWdodCwgZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLmNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+bWFyZ2luUmlnaHQo
KTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVy
KS5tYXJnaW5SaWdodCgpOwogICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFs
dWUodmFsdWUsIHN0eWxlLmdldCgpKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5TWFyZ2luQm90dG9tOgpAQCAtMjQ4Nyw3ICsyNDg3LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnQKICAgICAgICAgICAgICAgICAvLyB0aGUgIndpZHRoIiBwcm9wZXJ0eSBkb2VzIG5vdCBh
cHBseSBmb3Igbm9uLXJlcGxhY2VkIGlubGluZSBlbGVtZW50cy4KICAgICAgICAgICAgICAgICBp
ZiAoIXJlbmRlcmVyLT5pc1JlcGxhY2VkKCkgJiYgcmVuZGVyZXItPmlzSW5saW5lKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZShzaXppbmdCb3gocmVuZGVyZXIpLndpZHRoKCksIHN0eWxlLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzaXppbmdCb3goKnJlbmRl
cmVyKS53aWR0aCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChzdHlsZS0+d2lkdGgoKSwgc3R5
bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V29yZEJyZWFrOgpAQCAtMjcxMyw4
ICsyNzEzLDggQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6
cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnQKICAgICAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7
CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0
IGJveDsKLSAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXItPmlzQm94KCkpCi0gICAgICAgICAg
ICAgICAgICAgIGJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+Ym9yZGVyQm94UmVjdCgpOwor
ICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikpCisgICAgICAgICAg
ICAgICAgICAgIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKS5ib3JkZXJCb3hS
ZWN0KCk7CiAKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxW
YWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWCgpLCBi
b3gud2lkdGgoKSksIHN0eWxlLmdldCgpKSk7CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5k
KHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLT5wZXJz
cGVjdGl2ZU9yaWdpblkoKSwgYm94LmhlaWdodCgpKSwgc3R5bGUuZ2V0KCkpKTsKQEAgLTI3NjYs
OCArMjc2Niw4IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6
OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0CiAgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgp
OwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVj
dCBib3g7Ci0gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpKQotICAgICAgICAg
ICAgICAgICAgICBib3ggPSB0b1JlbmRlckJveChyZW5kZXJlciktPmJvcmRlckJveFJlY3QoKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQm94PigqcmVuZGVyZXIpKQorICAgICAgICAg
ICAgICAgICAgICBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuYm9yZGVyQm94
UmVjdCgpOwogCiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVs
VmFsdWUobWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5YKCksIGJv
eC53aWR0aCgpKSwgc3R5bGUuZ2V0KCkpKTsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
em9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnRyYW5z
Zm9ybU9yaWdpblkoKSwgYm94LmhlaWdodCgpKSwgc3R5bGUuZ2V0KCkpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcAppbmRleCBjMWExOGJlNTdhMjM1MTJmNWU0Njc4NjBkMjQwZTdk
MzU1MzJlYzAwLi4xNDc2ZjIzYTQ4MTVhM2VlMzc5ZDlkNGNmM2JlM2NjNzcxNzdlYWNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCkBAIC04NzAsOCArODcwLDcgQEAgYm9vbCBD
b250YWluZXJOb2RlOjpnZXRMb3dlclJpZ2h0Q29ybmVyKEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAogCiAgICAgUmVuZGVyT2JqZWN0KiBvID0gcmVuZGVyZXIoKTsKICAgICBpZiAoIW8tPmlzSW5s
aW5lKCkgfHwgby0+aXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgIFJlbmRlckJveCogYm94ID0gdG9S
ZW5kZXJCb3gobyk7Ci0gICAgICAgIHBvaW50ID0gby0+bG9jYWxUb0Fic29sdXRlKExheW91dFBv
aW50KGJveC0+c2l6ZSgpKSwgVXNlVHJhbnNmb3Jtcyk7CisgICAgICAgIHBvaW50ID0gby0+bG9j
YWxUb0Fic29sdXRlKExheW91dFBvaW50KGRvd25jYXN0PFJlbmRlckJveD4oKm8pLnNpemUoKSks
IFVzZVRyYW5zZm9ybXMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCmluZGV4IDZlODllYjc2Y2U4MmMyZTc5NDA4NzIyYTU1NjAwOWUzMTYwZDU2
MzMuLjhmNjc2ZjA2MWU1MDc3YWEwN2JjMDhkMDZmZDU5OWM0NmNkZmE2ZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcApAQCAtNTQ1Nyw5ICs1NDU3LDkgQEAgdm9pZCBEb2N1bWVudDo6d2Via2l0
V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKICAgICAvLyBh
IGJveCB3aWxsIGhhdmUgYSBmcmFtZVJlY3QuICBUaGUgcGxhY2Vob2xkZXIgd2lsbCBiZSBjcmVh
dGVkIGluIHNldEZ1bGxTY3JlZW5SZW5kZXJlcigpCiAgICAgLy8gZHVyaW5nIGxheW91dC4KICAg
ICBhdXRvIHJlbmRlcmVyID0gbV9mdWxsU2NyZWVuRWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBi
b29sIHNob3VsZENyZWF0ZVBsYWNlaG9sZGVyID0gcmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzQm94
KCk7CisgICAgYm9vbCBzaG91bGRDcmVhdGVQbGFjZWhvbGRlciA9IGlzPFJlbmRlckJveD4ocmVu
ZGVyZXIpOwogICAgIGlmIChzaG91bGRDcmVhdGVQbGFjZWhvbGRlcikgewotICAgICAgICBtX3Nh
dmVkUGxhY2Vob2xkZXJGcmFtZVJlY3QgPSB0b1JlbmRlckJveChyZW5kZXJlciktPmZyYW1lUmVj
dCgpOworICAgICAgICBtX3NhdmVkUGxhY2Vob2xkZXJGcmFtZVJlY3QgPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KCpyZW5kZXJlcikuZnJhbWVSZWN0KCk7CiAgICAgICAgIG1fc2F2ZWRQbGFjZWhvbGRl
clJlbmRlclN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKCZyZW5kZXJlci0+c3R5bGUoKSk7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggYTViMDQ1ZDY5OTdlZTUyYzdhMDkyYjQ1
ZjhjYTZiMjY2MjEzYzhmZC4uMDRhNmVkZDc1Njc4MWMwOWM5Mjc3NTk5MzJlZWEyNGVlZTQ0ZjU1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtNjA4LDcgKzYwOCw3IEBAIHZvaWQgRWxlbWVu
dDo6c2Nyb2xsQnlVbml0cyhpbnQgdW5pdHMsIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
KQogICAgICAgICB1bml0cyA9IC11bml0czsKICAgICB9CiAgICAgRWxlbWVudCogc3RvcEVsZW1l
bnQgPSB0aGlzOwotICAgIHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5zY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgdW5pdHMsICZzdG9wRWxlbWVudCk7CisgICAgZG93bmNhc3Q8UmVuZGVy
Qm94PigqcmVuZGVyZXIoKSkuc2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHVuaXRzLCAm
c3RvcEVsZW1lbnQpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnNjcm9sbEJ5TGluZXMoaW50IGxpbmVz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCmluZGV4IGJkYWQ2OWJjOWQxYTc5OWJiYjYxMmM3ZDRmYmExMmQ0ZWY4
YmMzODQuLjMxYjMyZjUwZjRkZWQ2N2Y1YWQ1NTZjN2NiMzBiNzI4Njk4Mjk5MWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKQEAgLTIxMjYsMTIgKzIxMjYsMTIgQEAgdm9pZCBOb2RlOjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgICAgICAg
ICAgd2hpbGUgKHJlbmRlcmVyICYmICghcmVuZGVyZXItPmlzQm94KCkgfHwgIXRvUmVuZGVyQm94
KHJlbmRlcmVyKS0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpKQorICAgICAg
ICAgICAgd2hpbGUgKHJlbmRlcmVyICYmICghaXM8UmVuZGVyQm94PigqcmVuZGVyZXIpIHx8ICFk
b3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFi
bGVBcmVhKCkpKQogICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgp
OwogCiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICAgICAgICAgICAgICBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCkuc3RhcnRQYW5TY3JvbGxpbmcodG9SZW5kZXJCb3gocmVuZGVyZXIp
KTsKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLnN0YXJ0UGFuU2Ny
b2xsaW5nKGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogI2VuZGlmCkBAIC0yMTQ5LDcgKzIxNDksNyBAQCB2b2lkIE5vZGU6OmRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIFBM
QVRGT1JNKElPUykKICAgICB9IGVsc2UgaWYgKGlzPFRvdWNoRXZlbnQ+KCpldmVudCkgJiYgZXZl
bnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkgewogICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICAgICAgd2hpbGUgKHJlbmRl
cmVyICYmICghcmVuZGVyZXItPmlzQm94KCkgfHwgIXRvUmVuZGVyQm94KHJlbmRlcmVyKS0+Y2Fu
QmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpKQorICAgICAgICB3aGlsZSAocmVuZGVy
ZXIgJiYgKCFpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikgfHwgIWRvd25jYXN0PFJlbmRlckJveD4o
KnJlbmRlcmVyKS5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkpCiAgICAgICAg
ICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKIAogICAgICAgICBpZiAocmVuZGVy
ZXIgJiYgcmVuZGVyZXItPm5vZGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggNjQy
Y2UyNjY2MGY5YWQ1NDkyMzg3YzIzZTM5YjczYTYxZjMyMzBiNy4uODA1NjEyZTJkMTdmMzU4N2Vj
ODMxODFlMzIzZmE0NGMzYmM5NGQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCkBAIC01MzMs
NyArNTMzLDcgQEAgc3RhdGljIGJvb2wgZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3Np
dGlvbnMoTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFRo
ZXJlIGlzIGEgVmlzaWJsZVBvc2l0aW9uIGluc2lkZSBhbiBlbXB0eSBpbmxpbmUtYmxvY2sgY29u
dGFpbmVyLgotICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkgJiYgY2Fu
SGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhub2RlKSAmJiB0b1JlbmRlckJveChub2RlLT5yZW5kZXJl
cigpKS0+aGVpZ2h0KCkgIT0gMCAmJiAhbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgIHJldHVybiBu
b2RlLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkgJiYgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGlu
Zyhub2RlKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KCpub2RlLT5yZW5kZXJlcigpKS5oZWlnaHQo
KSAmJiAhbm9kZS0+Zmlyc3RDaGlsZCgpOwogfQogCiBzdGF0aWMgTm9kZSogZW5jbG9zaW5nVmlz
dWFsQm91bmRhcnkoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGY3Njc2ZTkwYWFiNTgwMDJiN2RhMmFkYTNk
NDhjNThjMjBhMDkxZDAuLjAyZGY5MzIxYTMzYjI0MTZlNmExNjNkNWFhZTQ0MWI5ZTM5NTcyMjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVy
LmNwcApAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgYm9vbCBpc0RlbGV0YWJsZUVsZW1lbnQoY29u
c3QgTm9kZSogbm9kZSkKICAgICBjb25zdCB1bnNpZ25lZCBtaW5pbXVtVmlzaWJsZUJvcmRlcnMg
PSAxOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzQm94KCkpCisgICAgaWYgKCFpczxSZW5k
ZXJCb3g+KHJlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRGlzYWxs
b3cgdGhlIGJvZHkgZWxlbWVudCBzaW5jZSBpdCBpc24ndCBwcmFjdGljYWwgdG8gZGVsZXRlLCBh
bmQgdGhlIGRlbGV0aW9uIFVJIHdvdWxkIGJlIGNsaXBwZWQuCkBAIC04NywzMCArODcsMzAgQEAg
c3RhdGljIGJvb2wgaXNEZWxldGFibGVFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCiAgICAgaWYg
KGlzTWFpbEJsb2NrcXVvdGUobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJl
bmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwotICAgIEludFJlY3QgYm9yZGVy
Qm91bmRpbmdCb3ggPSBib3gtPmJvcmRlckJvdW5kaW5nQm94KCk7CisgICAgUmVuZGVyQm94JiBi
b3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcik7CisgICAgSW50UmVjdCBib3JkZXJC
b3VuZGluZ0JveCA9IGJveC5ib3JkZXJCb3VuZGluZ0JveCgpOwogICAgIGlmIChib3JkZXJCb3Vu
ZGluZ0JveC53aWR0aCgpIDwgbWluaW11bVdpZHRoIHx8IGJvcmRlckJvdW5kaW5nQm94LmhlaWdo
dCgpIDwgbWluaW11bUhlaWdodCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKChi
b3JkZXJCb3VuZGluZ0JveC53aWR0aCgpICogYm9yZGVyQm91bmRpbmdCb3guaGVpZ2h0KCkpIDwg
bWluaW11bUFyZWEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChib3gtPmlzVGFi
bGUoKSkKKyAgICBpZiAoaXM8UmVuZGVyVGFibGU+KGJveCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUodWxUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
b2xUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkKKyAgICBpZiAoaXM8SFRNTFVM
aXN0RWxlbWVudD4oKm5vZGUpIHx8IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KCpub2RlKSB8fCBpczxI
VE1MSUZyYW1lRWxlbWVudD4oKm5vZGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlm
IChib3gtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgIGlmIChib3guaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGJveC0+aXNSZW5k
ZXJCbG9jaygpICYmICFib3gtPmlzVGFibGVDZWxsKCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlID0gYm94LT5zdHlsZSgpOworICAgIGlmIChpczxSZW5kZXJCbG9jaz4oYm94
KSAmJiAhaXM8UmVuZGVyVGFibGVDZWxsPihib3gpKSB7CisgICAgICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSA9IGJveC5zdHlsZSgpOwogCiAgICAgICAgIC8vIEFsbG93IGJsb2NrcyB0aGF0
IGhhdmUgYmFja2dyb3VuZCBpbWFnZXMKICAgICAgICAgaWYgKHN0eWxlLmhhc0JhY2tncm91bmRJ
bWFnZSgpKSB7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogYmFja2dyb3VuZCA9
IHN0eWxlLmJhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZDsgYmFja2dyb3VuZCA9IGJhY2tn
cm91bmQtPm5leHQoKSkgewotICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kLT5pbWFnZSgp
ICYmIGJhY2tncm91bmQtPmltYWdlKCktPmNhblJlbmRlcihib3gsIDEpKQorICAgICAgICAgICAg
ICAgIGlmIChiYWNrZ3JvdW5kLT5pbWFnZSgpICYmIGJhY2tncm91bmQtPmltYWdlKCktPmNhblJl
bmRlcigmYm94LCAxKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTEyNSwxMyArMTI1LDEzIEBAIHN0YXRpYyBib29sIGlzRGVs
ZXRhYmxlRWxlbWVudChjb25zdCBOb2RlKiBub2RlKQogICAgICAgICBpZiAoIXBhcmVudE5vZGUp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgYXV0byBwYXJlbnRSZW5kZXJl
ciA9IHBhcmVudE5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgIGF1dG8qIHBhcmVudFJlbmRlcmVy
ID0gcGFyZW50Tm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFwYXJlbnRSZW5kZXJlcikK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUgPSBwYXJlbnRSZW5kZXJlci0+c3R5bGUoKTsKIAotICAgICAgICBpZiAoYm94
LT5oYXNCYWNrZ3JvdW5kKCkgJiYgKCFwYXJlbnRSZW5kZXJlci0+aGFzQmFja2dyb3VuZCgpIHx8
IHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikg
IT0gcGFyZW50U3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSkpCisgICAgICAgIGlmIChib3guaGFzQmFja2dyb3VuZCgpICYmICghcGFyZW50UmVu
ZGVyZXItPmhhc0JhY2tncm91bmQoKSB8fCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpICE9IHBhcmVudFN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRl
eCBjMGMxMjg3ZWQyNzA3M2JkMmQzNzBlNTA3NjljZDgzNDRiOTk2YzdiLi41MTFjYjAyYWU4YmYx
Y2RmYjFlNDJkNWRiNzg3OTMwYjI4ZDJmYzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yQ29tbWFuZC5jcHAKQEAgLTI1MSwxMyArMjUxLDEzIEBAIHN0YXRpYyB1bnNpZ25lZCB2ZXJ0
aWNhbFNjcm9sbERpc3RhbmNlKEZyYW1lJiBmcmFtZSkKICAgICBFbGVtZW50KiBmb2N1c2VkRWxl
bWVudCA9IGZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCk7CiAgICAgaWYgKCFmb2N1
c2VkRWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0byByZW5kZXJlciA9IGZvY3Vz
ZWRFbGVtZW50LT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5p
c0JveCgpKQorICAgIGF1dG8qIHJlbmRlcmVyID0gZm9jdXNlZEVsZW1lbnQtPnJlbmRlcmVyKCk7
CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgaWYg
KCEoc3R5bGUub3ZlcmZsb3dZKCkgPT0gT1NDUk9MTCB8fCBzdHlsZS5vdmVyZmxvd1koKSA9PSBP
QVVUTyB8fCBmb2N1c2VkRWxlbWVudC0+aGFzRWRpdGFibGVTdHlsZSgpKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaW50IGhlaWdodCA9IHN0ZDo6bWluPGludD4odG9SZW5kZXJCb3gocmVuZGVy
ZXIpLT5jbGllbnRIZWlnaHQoKSwgZnJhbWUudmlldygpLT52aXNpYmxlSGVpZ2h0KCkpOworICAg
IGludCBoZWlnaHQgPSBzdGQ6Om1pbjxpbnQ+KGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVy
KS5jbGllbnRIZWlnaHQoKSwgZnJhbWUudmlldygpLT52aXNpYmxlSGVpZ2h0KCkpOwogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oU2Nyb2xsYmFyOjpwYWdlU3RlcChoZWlnaHQpKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA4Yzc2
NjIxMjEwOTgwNWQyYjhhMTIzMTM4ZjkwNDU5Nzk1ZTI5ZWZiLi45ZjkzYTg0NmMyNDlkZmEyMzFj
MTUwOTRhYmUzMzFiMGZjOTQ1Nzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcApAQCAtMTQ4Miw4ICsxNDgyLDggQEAgdm9pZCBDYXJldEJhc2U6OnBhaW50Q2Fy
ZXQoTm9kZSogbm9kZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2kK
IAogICAgIExheW91dFJlY3QgZHJhd2luZ1JlY3QgPSBsb2NhbENhcmV0UmVjdFdpdGhvdXRVcGRh
dGUoKTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcmVuZGVyZXJGb3JDYXJldFBhaW50
aW5nKG5vZGUpOwotICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNCb3goKSkKLSAgICAg
ICAgdG9SZW5kZXJCb3gocmVuZGVyZXIpLT5mbGlwRm9yV3JpdGluZ01vZGUoZHJhd2luZ1JlY3Qp
OworICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSkKKyAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyQm94PigqcmVuZGVyZXIpLmZsaXBGb3JXcml0aW5nTW9kZShkcmF3aW5nUmVjdCk7CiAgICAg
ZHJhd2luZ1JlY3QubW92ZUJ5KHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCkpOwogICAgIExh
eW91dFJlY3QgY2FyZXQgPSBpbnRlcnNlY3Rpb24oZHJhd2luZ1JlY3QsIGNsaXBSZWN0KTsKICAg
ICBpZiAoY2FyZXQuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCmluZGV4IDQ4NzVhOTBhMDExMmFmY2EzZjQ1M2EwOGUxMTZmZjI3YjY5NDUzYzQuLjg0NTI1
YmVmOGUyM2FiMzI4OTJhNDgwYWQxMmQ2MGYwODQ2OTIyYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTIwNyw5ICsyMDcsOSBAQCBzdGF0aWMgTm9kZSogbmV4
dEluUHJlT3JkZXJDcm9zc2luZ1NoYWRvd0JvdW5kYXJpZXMoTm9kZSYgcmFuZ2VFbmRDb250YWlu
ZXIsIGludAogc3RhdGljIGlubGluZSBib29sIGZ1bGx5Q2xpcHNDb250ZW50cyhOb2RlJiBub2Rl
KQogewogICAgIGF1dG8qIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpOwotICAgIGlmICghcmVu
ZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0JveCgpIHx8ICFyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlw
KCkpCisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSB8fCAhcmVuZGVyZXItPmhhc092
ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRvUmVuZGVy
Qm94KHJlbmRlcmVyKS0+c2l6ZSgpLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyQm94PigqcmVuZGVyZXIpLnNpemUoKS5pc0VtcHR5KCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpZ25vcmVzQ29udGFpbmVyQ2xpcChOb2RlJiBub2RlKQpAQCAtODgxLDcgKzg4MSw3IEBA
IHN0YXRpYyBib29sIHNob3VsZEVtaXRFeHRyYU5ld2xpbmVGb3JOb2RlKE5vZGUmIG5vZGUpCiAg
ICAgLy8gd2lsbCB3b3JrIHJpZ2h0IGV2ZW4gaWYgYm90aCB0aGUgPGRpdj4gYW5kIHRoZSA8cD4g
aGF2ZSBib3R0b20gbWFyZ2lucy4KIAogICAgIGF1dG8qIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJl
cigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0JveCgpKQorICAgIGlmICgh
aXM8UmVuZGVyQm94PihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IE5PVEU6IFdlIG9ubHkgZG8gdGhpcyBmb3IgYSBzZWxlY3Qgc2V0IG9mIG5vZGVzLCBhbmQgV2lu
SUUgYXBwZWFycyBub3QgdG8gZG8gdGhpcyBhdCBhbGwuCkBAIC04OTIsOCArODkyLDggQEAgc3Rh
dGljIGJvb2wgc2hvdWxkRW1pdEV4dHJhTmV3bGluZUZvck5vZGUoTm9kZSYgbm9kZSkKICAgICBp
ZiAoIWhhc0hlYWRlclRhZyhlbGVtZW50KSAmJiAhaXM8SFRNTFBhcmFncmFwaEVsZW1lbnQ+KGVs
ZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgYm90dG9tTWFyZ2luID0g
dG9SZW5kZXJCb3gocmVuZGVyZXIpLT5jb2xsYXBzZWRNYXJnaW5BZnRlcigpOwotICAgIGludCBm
b250U2l6ZSA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+c3R5bGUoKS5mb250RGVzY3JpcHRpb24o
KS5jb21wdXRlZFBpeGVsU2l6ZSgpOworICAgIGludCBib3R0b21NYXJnaW4gPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KCpyZW5kZXJlcikuY29sbGFwc2VkTWFyZ2luQWZ0ZXIoKTsKKyAgICBpbnQgZm9u
dFNpemUgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuc3R5bGUoKS5mb250RGVzY3Jp
cHRpb24oKS5jb21wdXRlZFBpeGVsU2l6ZSgpOwogICAgIHJldHVybiBib3R0b21NYXJnaW4gKiAy
ID49IGZvbnRTaXplOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0
bWxlZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCmlu
ZGV4IGZkNWFhODE5ZDkxYzA3YWFmZTVkNTQ1MTAxYjRjNmMyY2NkNjRiMGQuLjZmYjRhY2I3YWMw
OTY2MDU2MWY5ZDM4ZWMxZDVhYmJlYTdjMzY4NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwCkBAIC0xMzEwLDggKzEzMTAsOCBAQCBJbnRSZWN0IGFic29sdXRlQm91bmRz
Rm9yTG9jYWxDYXJldFJlY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlckZvckNhcmV0UGFpbnRpbmcs
CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKICAgICBMYXlvdXRSZWN0IGxvY2FsUmVjdChy
ZWN0KTsKLSAgICBpZiAocmVuZGVyZXJGb3JDYXJldFBhaW50aW5nLT5pc0JveCgpKQotICAgICAg
ICB0b1JlbmRlckJveChyZW5kZXJlckZvckNhcmV0UGFpbnRpbmcpLT5mbGlwRm9yV3JpdGluZ01v
ZGUobG9jYWxSZWN0KTsKKyAgICBpZiAoaXM8UmVuZGVyQm94PigqcmVuZGVyZXJGb3JDYXJldFBh
aW50aW5nKSkKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXJGb3JDYXJldFBh
aW50aW5nKS5mbGlwRm9yV3JpdGluZ01vZGUobG9jYWxSZWN0KTsKICAgICByZXR1cm4gcmVuZGVy
ZXJGb3JDYXJldFBhaW50aW5nLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJl
Y3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCBjMmFiMjA5YzM4MGM2MTVkMTZiN2E3
MWRjMTM3MWI3MGRlOGU4MjFkLi5lMzI2MGNiYzVlNzE5OGY2OGI2MzUwYjAyYjcwMmFhNTMyNmQw
Mzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5j
cHAKQEAgLTMwNSw3ICszMDUsNyBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9j
dXNhYmxlKCkgY29uc3QKIHsKICAgICAvLyBJZiB0aGVyZSdzIGEgcmVuZGVyZXIsIG1ha2Ugc3Vy
ZSB0aGUgc2l6ZSBpc24ndCBlbXB0eSwgYnV0IGlmIHRoZXJlJ3Mgbm8gcmVuZGVyZXIsCiAgICAg
Ly8gaXQgbWlnaHQgc3RpbGwgYmUgZm9jdXNhYmxlIGlmIGl0J3MgaW4gYSBjYW52YXMgc3VidHJl
ZSAoaGFuZGxlZCBpbiBOb2RlOjppc0ZvY3VzYWJsZSkuCi0gICAgaWYgKHJlbmRlcmVyKCkgJiYg
KCFyZW5kZXJlcigpLT5pc0JveCgpIHx8IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5zaXplKCku
aXNFbXB0eSgpKSkKKyAgICBpZiAocmVuZGVyZXIoKSAmJiAoIWlzPFJlbmRlckJveD4oKnJlbmRl
cmVyKCkpIHx8IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKCkpLnNpemUoKS5pc0VtcHR5
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gSFRNTEVsZW1lbnQ6OmlzRm9jdXNh
YmxlIGhhbmRsZXMgdmlzaWJpbGl0eSBhbmQgY2FsbHMgc3Vwb3J0c0ZvY3VzIHdoaWNoCiAgICAg
Ly8gd2lsbCBjb3ZlciB0aGUgZGlzYWJsZWQgY2FzZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCmluZGV4IDQwZmEwZGY4MDQ2MzNhZWM5ZGVkZjY5
NmMwNTY4NzJmNzE1YmZhYzUuLmMxZWMyNTcxNzE4YjhmY2ZhODZmYzI5OTA3OGRjNTg1MjE5ZDlm
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNw
cApAQCAtNTQwLDcgKzU0MCw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y2hlY2tT
aXplQ2hhbmdlRm9yU25hcHNob3R0aW5nKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9uZWVk
c0NoZWNrRm9yU2l6ZUNoYW5nZSA9IGZhbHNlOwotICAgIExheW91dFJlY3QgY29udGVudEJveFJl
Y3QgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y29udGVudEJveFJlY3QoKTsKKyAgICBMYXlv
dXRSZWN0IGNvbnRlbnRCb3hSZWN0ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIoKSku
Y29udGVudEJveFJlY3QoKTsKICAgICBpbnQgY29udGVudFdpZHRoID0gY29udGVudEJveFJlY3Qu
d2lkdGgoKTsKICAgICBpbnQgY29udGVudEhlaWdodCA9IGNvbnRlbnRCb3hSZWN0LmhlaWdodCgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmluZGV4IDRmODk4
MzYyZjg1MTI3ZmQxOTMwOTkyZjVhMDUzOWY0OWJlYjIyMGIuLmE4OGFkN2RmZGRhZjVmYjI2YjA0
M2JlYmMzM2JkZTBhY2QxMDU3NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwCkBAIC0xMzYxLDcgKzEzNjEsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojps
aXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAKICAgICAgICAgICAgIG1v
dXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQgJiYgaXM8TW91c2VF
dmVudD4oKmV2ZW50KSAmJiAhdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmNhbkJlU2Nyb2xsZWRB
bmRIYXNTY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCAmJiBpczxNb3VzZUV2ZW50PigqZXZlbnQpICYm
ICFkb3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcigpKS5jYW5CZVNjcm9sbGVkQW5kSGFzU2Ny
b2xsYWJsZUFyZWEoKSkgewogICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNh
c3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKICAgICAgICAgaWYgKG1vdXNlRXZlbnQuYnV0dG9uKCkg
IT0gTGVmdEJ1dHRvbiB8fCAhbW91c2VFdmVudC5idXR0b25Eb3duKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVt
YkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVt
ZW50LmNwcAppbmRleCBkZGM1YTUzYThiN2IyNTY5MGJlOGJkYTY1MzVkZjAyZjIwMTU4ZWQzLi4y
NjJjNjAwNmY1M2Y4MWZmYzdmYWY4MjFjOTZlNmQxMTg4M2NjZGY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKQEAgLTI1Niw3ICsy
NTYsNyBAQCB2b2lkIFNsaWRlclRodW1iRWxlbWVudDo6c2V0UG9zaXRpb25Gcm9tUG9pbnQoY29u
c3QgTGF5b3V0UG9pbnQmIGFic29sdXRlUG9pbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IERvIGFsbCB0aGUgdHJhY2tpbmcgbWF0aCByZWxhdGl2ZSB0byB0aGUgaW5wdXQncyByZW5kZXJl
cidzIGJveC4KLSAgICBSZW5kZXJCb3gmIGlucHV0UmVuZGVyZXIgPSAqdG9SZW5kZXJCb3goaW5w
dXQtPnJlbmRlcmVyKCkpOworICAgIFJlbmRlckJveCYgaW5wdXRSZW5kZXJlciA9IGRvd25jYXN0
PFJlbmRlckJveD4oKmlucHV0LT5yZW5kZXJlcigpKTsKICAgICBSZW5kZXJCb3gmIHRyYWNrUmVu
ZGVyZXIgPSAqdHJhY2tFbGVtZW50LT5yZW5kZXJCb3goKTsKIAogICAgIGJvb2wgaXNWZXJ0aWNh
bCA9IGhhc1ZlcnRpY2FsQXBwZWFyYW5jZShpbnB1dC5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXggOTIzM2U2Y2IzMWE2MmJmMmY5
MGJhZjQzMWYxOTNhZTcwMThhM2Y1YS4uODRkNDkyMjEwNTMyN2I5NmRhOTQ0ZDhkYjBkMzM5MWYy
MTU3MmM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92
ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5
LmNwcApAQCAtNzI5LDkgKzcyOSw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhOb2RlKiBub2RlKQogICAgIH0KIAogI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQotICAgIGlmIChyZW5kZXJlci0+aXNCb3goKSkgewotICAgICAgICBS
ZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKLSAgICAgICAgaWYg
KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNoYXBlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JTaGFw
ZU91dHNpZGUoY29udGFpbmluZ0ZyYW1lLCByZW5kZXJCb3gpKQorICAgIGlmIChpczxSZW5kZXJC
b3g+KCpyZW5kZXJlcikpIHsKKyAgICAgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVu
ZGVyQm94PigqcmVuZGVyZXIpOworICAgICAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
c2hhcGVPYmplY3QgPSBidWlsZE9iamVjdEZvclNoYXBlT3V0c2lkZShjb250YWluaW5nRnJhbWUs
ICZyZW5kZXJCb3gpKQogICAgICAgICAgICAgZWxlbWVudEluZm8tPnNldE9iamVjdCgic2hhcGVP
dXRzaWRlSW5mbyIsIHNoYXBlT2JqZWN0LnJlbGVhc2UoKSk7CiAgICAgfQogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwCmluZGV4IDg0ZTY5ODZh
ZWE1YmU5MGE4ZWExZWM0ZmIwNWQzMjY1OTk0M2E1YjAuLjI5OTcxZTk3MjEwMzNkZmIxZjcwZDdl
Zjk5NzlkNGQ1NmNmZjU3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQXV0b3Nj
cm9sbENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQXV0b3Njcm9sbENv
bnRyb2xsZXIuY3BwCkBAIC0xMzUsOSArMTM1LDkgQEAgdm9pZCBBdXRvc2Nyb2xsQ29udHJvbGxl
cjo6dXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVyKCkKICAgICAgICAgcmVuZGVyZXIgPSBub2RlQXRQ
b2ludC0+cmVuZGVyZXIoKTsKICNlbmRpZgogCi0gICAgd2hpbGUgKHJlbmRlcmVyICYmICEocmVu
ZGVyZXItPmlzQm94KCkgJiYgdG9SZW5kZXJCb3gocmVuZGVyZXIpLT5jYW5BdXRvc2Nyb2xsKCkp
KQorICAgIHdoaWxlIChyZW5kZXJlciAmJiAhKGlzPFJlbmRlckJveD4oKnJlbmRlcmVyKSAmJiBk
b3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuY2FuQXV0b3Njcm9sbCgpKSkKICAgICAgICAg
cmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCk7Ci0gICAgbV9hdXRvc2Nyb2xsUmVuZGVyZXIg
PSByZW5kZXJlciAmJiByZW5kZXJlci0+aXNCb3goKSA/IHRvUmVuZGVyQm94KHJlbmRlcmVyKSA6
IDA7CisgICAgbV9hdXRvc2Nyb2xsUmVuZGVyZXIgPSBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSA/
IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpIDogbnVsbHB0cjsKIH0KIAogdm9pZCBBdXRv
c2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlRHJhZ0FuZERyb3AoTm9kZSogZHJvcFRhcmdldE5vZGUs
IGNvbnN0IEludFBvaW50JiBldmVudFBvc2l0aW9uLCBkb3VibGUgZXZlbnRUaW1lKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGI4NjdjNDdlZDJlMjU1MzU5NTUwN2U2MWJj
M2QzZmE1ZDIyNDQ5MjIuLmU1Y2FkNmJhZmZiZGVjMzc3N2NkODdiZmMwZGY5MjBlNWVjMjA5N2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTEwNjcsOSArMTA2Nyw5IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpkaWRQYW5TY3JvbGxTdG9wKCkKIHZvaWQgRXZlbnRIYW5kbGVy
OjpzdGFydFBhblNjcm9sbGluZyhSZW5kZXJFbGVtZW50KiByZW5kZXJlcikKIHsKICNpZiAhUExB
VEZPUk0oSU9TKQotICAgIGlmICghcmVuZGVyZXItPmlzQm94KCkpCisgICAgaWYgKCFpczxSZW5k
ZXJCb3g+KCpyZW5kZXJlcikpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2F1dG9zY3JvbGxDb250
cm9sbGVyLT5zdGFydFBhblNjcm9sbGluZyh0b1JlbmRlckJveChyZW5kZXJlciksIGxhc3RLbm93
bk1vdXNlUG9zaXRpb24oKSk7CisgICAgbV9hdXRvc2Nyb2xsQ29udHJvbGxlci0+c3RhcnRQYW5T
Y3JvbGxpbmcoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlciksIGxhc3RLbm93bk1vdXNlUG9z
aXRpb24oKSk7CiAgICAgaW52YWxpZGF0ZUNsaWNrKCk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAppbmRleCA3ZTY0NTYwNWRkYzcyNjIwNzM4OTkxOWVmYmZkMGEzMjFjOTg0
YzYzLi4yNDk3OTE5OGY3MTlhMzM3ZjFiZTI3MDlkYmMxNzZjYmExMzM5NDNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xNDA0LDEyICsxNDA0LDEwIEBAIFJlbmRlckJveCogRnJh
bWVWaWV3OjplbWJlZGRlZENvbnRlbnRCb3goKSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IHJlbmRlclZpZXctPmZpcnN0Q2hp
bGQoKTsKLSAgICBpZiAoIWZpcnN0Q2hpbGQgfHwgIWZpcnN0Q2hpbGQtPmlzQm94KCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gQ3VyZW50bHkgb25seSBlbWJlZGRlZCBTVkcg
ZG9jdW1lbnRzIHBhcnRpY2lwYXRlIGluIHRoZSBzaXplLW5lZ290aWF0aW9uIGxvZ2ljLgotICAg
IGlmICh0b1JlbmRlckJveChmaXJzdENoaWxkKS0+aXNTVkdSb290KCkpCi0gICAgICAgIHJldHVy
biB0b1JlbmRlckJveChmaXJzdENoaWxkKTsKKyAgICBpZiAoaXM8UmVuZGVyU1ZHUm9vdD4oZmly
c3RDaGlsZCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJTVkdSb290PihmaXJzdENo
aWxkKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9HZXN0dXJlVGFwSGlnaGxpZ2h0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9H
ZXN0dXJlVGFwSGlnaGxpZ2h0ZXIuY3BwCmluZGV4IDU2Y2JiZDk0NTBiNDc2ZTFjZWQyY2ZlNTA2
MTRkZDQwYWIwMTk2ZDguLjI3OWZhOWU5OGYwNTk2ODY3NzJlZGM2MDNmYTlmMjMzMmMyYjAwOTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvR2VzdHVyZVRhcEhpZ2hsaWdodGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0dlc3R1cmVUYXBIaWdobGlnaHRlci5jcHAKQEAg
LTIyNiw4ICsyMjYsNyBAQCBQYXRoIGFic29sdXRlUGF0aEZvclJlbmRlcmVyKFJlbmRlck9iamVj
dCogY29uc3QgbykKICAgICAgICAgICAgICAgICAgICAgcmluZ1JlY3QgPSBMYXlvdXRSZWN0KCk7
CiAgICAgICAgICAgICAgICAgY3VycmVudFJlbmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsKIAotICAg
ICAgICAgICAgICAgIEFTU0VSVChsYXllclJlbmRlcmVyLT5pc0JveCgpKTsKLSAgICAgICAgICAg
ICAgICByaW5nUmVjdC5pbnRlcnNlY3QodG9SZW5kZXJCb3gobGF5ZXJSZW5kZXJlciktPmJvcmRl
ckJveFJlY3QoKSk7CisgICAgICAgICAgICAgICAgcmluZ1JlY3QuaW50ZXJzZWN0KGRvd25jYXN0
PFJlbmRlckJveD4oKmxheWVyUmVuZGVyZXIpLmJvcmRlckJveFJlY3QoKSk7CiAKICAgICAgICAg
ICAgICAgICBpZiAocmluZ1JlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKaW5kZXggYjE3Nzk2
OGY3YjIxODMyNDdlOGQzY2Q3MTI4OWI2MDNiYWI0N2IxOS4uNjU1MDdmODgyNDFjMWExMWRmZjM2
MDY4ZTFmY2FjNDZjMDRiZDE5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0
aWFsTmF2aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdh
dGlvbi5jcHAKQEAgLTQyNCw3ICs0MjQsNyBAQCBib29sIGlzU2Nyb2xsYWJsZU5vZGUoY29uc3Qg
Tm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXIt
PmlzQm94KCkgJiYgdG9SZW5kZXJCb3gocmVuZGVyZXIpLT5jYW5CZVNjcm9sbGVkQW5kSGFzU2Ny
b2xsYWJsZUFyZWEoKSAmJiBub2RlLT5oYXNDaGlsZE5vZGVzKCk7CisgICAgICAgIHJldHVybiBp
czxSZW5kZXJCb3g+KCpyZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIp
LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpICYmIG5vZGUtPmhhc0NoaWxkTm9k
ZXMoKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAppbmRleCBkNDA4MjkxYjIy
Yjk0MTMzNDc0ODUwYjExNWI3NDhmOTI3YjU5MTU2Li5kMDg3NmFkZjA5YTYzY2RkMDU3MjRhMTJm
ODMzYmIyZDEyYjhkMTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCkBAIC0xMTQsMTEgKzExNCwxMSBAQCBzdGF0
aWMgaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZEZ1bmMoY29uc3QgQW5p
bWF0aW9uQmFzZSogYW5pbSwgYwogICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29s
b3IoKSwgcHJvZ3Jlc3MpKTsKIH0KIAotc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25z
IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiBhbmltLCBjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dy
ZXNzKQorc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBB
bmltYXRpb25CYXNlKiBhbmltYXRpb24sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20s
IGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7Ci0gICAg
aWYgKGFuaW0tPmlzVHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQoKSkKKyAgICBpZiAoYW5pbWF0
aW9uLT5pc1RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0by5i
bGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGZyb20sIHByb2dyZXNzKTsKLSAgICByZXR1cm4gdG8u
YmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbihmcm9tLCBwcm9ncmVzcywgYW5pbS0+cmVu
ZGVyZXIoKS0+aXNCb3goKSA/IHRvUmVuZGVyQm94KGFuaW0tPnJlbmRlcmVyKCkpLT5ib3JkZXJC
b3hSZWN0KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpKTsKKyAgICByZXR1cm4gdG8uYmxlbmRCeVVz
aW5nTWF0cml4SW50ZXJwb2xhdGlvbihmcm9tLCBwcm9ncmVzcywgaXM8UmVuZGVyQm94PigqYW5p
bWF0aW9uLT5yZW5kZXJlcigpKSA/IGRvd25jYXN0PFJlbmRlckJveD4oKmFuaW1hdGlvbi0+cmVu
ZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpLnNpemUoKSA6IExheW91dFNpemUoKSk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0
IEFuaW1hdGlvbkJhc2UqLCBDbGlwUGF0aE9wZXJhdGlvbiogZnJvbSwgQ2xpcFBhdGhPcGVyYXRp
b24qIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCkBAIC0xNjEsMTEgKzE2MSwxMSBAQCBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2Uq
LCBTaGFwZVZhbHVlKgogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiBhbmltLCBGaWx0ZXJP
cGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uKiB0b09wLCBkb3VibGUgcHJvZ3Jlc3Ms
IGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCitzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSogYW5pbWF0
aW9uLCBGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uKiB0b09wLCBkb3Vi
bGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCiB7CiAgICAgQVNT
RVJUKHRvT3ApOwogICAgIGlmICh0b09wLT5ibGVuZGluZ05lZWRzUmVuZGVyZXJTaXplKCkpIHsK
LSAgICAgICAgTGF5b3V0U2l6ZSBzaXplID0gYW5pbS0+cmVuZGVyZXIoKS0+aXNCb3goKSA/IHRv
UmVuZGVyQm94KGFuaW0tPnJlbmRlcmVyKCkpLT5ib3JkZXJCb3hSZWN0KCkuc2l6ZSgpIDogTGF5
b3V0U2l6ZSgpOworICAgICAgICBMYXlvdXRTaXplIHNpemUgPSBpczxSZW5kZXJCb3g+KCphbmlt
YXRpb24tPnJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqYW5pbWF0aW9uLT5yZW5k
ZXJlcigpKS5ib3JkZXJCb3hSZWN0KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpOwogICAgICAgICBy
ZXR1cm4gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgc2l6ZSwgYmxlbmRUb1Bhc3N0aHJv
dWdoKTsKICAgICB9CiAgICAgcmV0dXJuIHRvT3AtPmJsZW5kKGZyb21PcCwgcHJvZ3Jlc3MsIGJs
ZW5kVG9QYXNzdGhyb3VnaCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvUmVuZGVyVGhlbWVFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRl
clRoZW1lRWZsLmNwcAppbmRleCBmYzI2Nzg3MGJhM2Y4ZmVkYTI0NGJiOWFhMDVjYTBmYzViYzBk
N2E5Li5kYmU0ZDAxMTE0OTM4MTgzMzI1OWQ1MmVhOTY0YWU3YzlmOWU2NzQ4IDEwMDc1NQotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAKQEAgLTYzMywxMiAr
NjMzLDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0
IFJlbmRlck9iamVjdCYgb2JqZWN0KSBjb25zdAogCiBpbnQgUmVuZGVyVGhlbWVFZmw6OmJhc2Vs
aW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpIGNvbnN0CiB7Ci0gICAgaWYg
KCFvYmplY3QuaXNCb3goKSkKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ob2JqZWN0KSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBpZiAob2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENo
ZWNrYm94UGFydAogICAgIHx8ICBvYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9Q
YXJ0KQotICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3goJm9iamVjdCktPm1hcmdpblRvcCgpICsg
dG9SZW5kZXJCb3goJm9iamVjdCktPmhlaWdodCgpIC0gMzsKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PFJlbmRlckJveD4ob2JqZWN0KS5tYXJnaW5Ub3AoKSArIGRvd25jYXN0PFJlbmRlckJveD4o
b2JqZWN0KS5oZWlnaHQoKSAtIDM7CiAKICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5l
UG9zaXRpb24ob2JqZWN0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCmlu
ZGV4IGUxY2MyYmZjNjZiZDE3MjBlMjYzMjcyYzViYWYyZjIzNzA0OWVmOGYuLjgxNTM2NGJkY2Ey
ODdmOTA0NWIxNWM1YWJmM2QzYjJiMDE5YWFjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5WaWV3LmNwcApAQCAtMTE4NSwxMSArMTE4NSwxMSBAQCB2b2lkIFBsdWdpblZpZXc6OmludmFs
aWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIAogICAg
IGlmICghbV9lbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47Ci0gICAgUmVuZGVy
Qm94KiByZW5kZXJlciA9IHRvUmVuZGVyQm94KG1fZWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAg
YXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCptX2VsZW1lbnQtPnJlbmRlcmVy
KCkpOwogICAgIAogICAgIEludFJlY3QgZGlydHlSZWN0ID0gcmVjdDsKLSAgICBkaXJ0eVJlY3Qu
bW92ZShyZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCksIHJl
bmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkpOwotICAgIHJlbmRl
cmVyLT5yZXBhaW50UmVjdGFuZ2xlKGRpcnR5UmVjdCk7CisgICAgZGlydHlSZWN0Lm1vdmUocmVu
ZGVyZXIuYm9yZGVyTGVmdCgpICsgcmVuZGVyZXIucGFkZGluZ0xlZnQoKSwgcmVuZGVyZXIuYm9y
ZGVyVG9wKCkgKyByZW5kZXJlci5wYWRkaW5nVG9wKCkpOworICAgIHJlbmRlcmVyLnJlcGFpbnRS
ZWN0YW5nbGUoZGlydHlSZWN0KTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpwYWludE1pc3NpbmdQ
bHVnaW5JY29uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKaW5kZXggNTIxZmNkNGMxNjE1MzBh
OTQ0YjAwNDdhZGIxNTgyYWNmNDE1NTMwNy4uNzI5MmNhYzAzNTE5NmE0NzhlNzIzOGQ4Y2NlNjJl
ODhlZGY0MTg1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKQEAgLTEy
OSw4ICsxMjksOCBAQCBmbG9hdCBJbmxpbmVCb3g6OmxvZ2ljYWxIZWlnaHQoKSBjb25zdAogICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICBp
ZiAocmVuZGVyZXIoKS5pc1RleHRPckxpbmVCcmVhaygpKQogICAgICAgICByZXR1cm4gYmVoYXZl
c0xpa2VUZXh0KCkgPyBsaW5lU3R5bGUuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSA6IDA7Ci0gICAg
aWYgKHJlbmRlcmVyKCkuaXNCb3goKSAmJiBwYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGlzSG9y
aXpvbnRhbCgpID8gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkuaGVpZ2h0KCkgOiB0b1JlbmRlckJv
eChyZW5kZXJlcigpKS53aWR0aCgpOworICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
ICYmIHBhcmVudCgpKQorICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyBkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmhlaWdodCgpIDogZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKS53aWR0aCgpOwogCiAgICAgQVNTRVJUKGlzSW5saW5lRmxvd0JveCgpKTsKICAgICBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogZmxvd09iamVjdCA9IGJveE1vZGVsT2JqZWN0KCk7CkBAIC0x
NzcsNyArMTc3LDcgQEAgdm9pZCBJbmxpbmVCb3g6OmFkanVzdFBvc2l0aW9uKGZsb2F0IGR4LCBm
bG9hdCBkeSkKICAgICBtX3RvcExlZnQubW92ZShkeCwgZHkpOwogCiAgICAgaWYgKG1fcmVuZGVy
ZXIuaXNSZXBsYWNlZCgpKQotICAgICAgICB0b1JlbmRlckJveChyZW5kZXJlcigpKS5tb3ZlKGR4
LCBkeSk7CisgICAgICAgIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkubW92ZShkeCwg
ZHkpOwogfQogCiBjb25zdCBSb290SW5saW5lQm94JiBJbmxpbmVCb3g6OnJvb3QoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUVsZW1lbnRCb3guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUVsZW1lbnRCb3guY3BwCmluZGV4IDE3
OWYyN2QwYWY0NGE0YmE4ZTMwNWZlYmEyMjY2ODRjMmI4YzFmNzIuLjc2MGQzMGFiNzA4YmY2Nzk2
MzYzMmRmYjE4NWUwMGQxOGQ4MmEzOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVFbGVtZW50Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRWxlbWVudEJveC5jcHAKQEAgLTM3LDEwICszNywxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB2b2lkIElubGluZUVsZW1lbnRCb3g6OmRlbGV0ZUxpbmUoKQogewogICAgIGlmICghZXh0
cmFjdGVkKCkpIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkuaXNCb3goKSkKLSAgICAgICAgICAg
IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLnNldElubGluZUJveFdyYXBwZXIobnVsbHB0cik7Ci0g
ICAgICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkuaXNMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgIHRv
UmVuZGVyTGluZUJyZWFrKHJlbmRlcmVyKCkpLnNldElubGluZUJveFdyYXBwZXIobnVsbHB0cik7
CisgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQorICAgICAgICAgICAgZG93
bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5zZXRJbmxpbmVCb3hXcmFwcGVyKG51bGxwdHIp
OworICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKCkpKQorICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlcigpKS5zZXRJbmxpbmVC
b3hXcmFwcGVyKG51bGxwdHIpOwogICAgIH0KICAgICBkZWxldGUgdGhpczsKIH0KQEAgLTQ4LDE5
ICs0OCwxOSBAQCB2b2lkIElubGluZUVsZW1lbnRCb3g6OmRlbGV0ZUxpbmUoKQogdm9pZCBJbmxp
bmVFbGVtZW50Qm94OjpleHRyYWN0TGluZSgpCiB7CiAgICAgc2V0RXh0cmFjdGVkKHRydWUpOwot
ICAgIGlmIChyZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAgIHRvUmVuZGVyQm94KHJlbmRlcmVy
KCkpLnNldElubGluZUJveFdyYXBwZXIobnVsbHB0cik7Ci0gICAgZWxzZSBpZiAocmVuZGVyZXIo
KS5pc0xpbmVCcmVhaygpKQotICAgICAgICB0b1JlbmRlckxpbmVCcmVhayhyZW5kZXJlcigpKS5z
ZXRJbmxpbmVCb3hXcmFwcGVyKG51bGxwdHIpOworICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRl
cmVyKCkpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnNldElubGlu
ZUJveFdyYXBwZXIobnVsbHB0cik7CisgICAgZWxzZSBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihy
ZW5kZXJlcigpKSkKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlcigp
KS5zZXRJbmxpbmVCb3hXcmFwcGVyKG51bGxwdHIpOwogfQogCiB2b2lkIElubGluZUVsZW1lbnRC
b3g6OmF0dGFjaExpbmUoKQogewogICAgIHNldEV4dHJhY3RlZChmYWxzZSk7Ci0gICAgaWYgKHJl
bmRlcmVyKCkuaXNCb3goKSkKLSAgICAgICAgdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkuc2V0SW5s
aW5lQm94V3JhcHBlcih0aGlzKTsKLSAgICBlbHNlIGlmIChyZW5kZXJlcigpLmlzTGluZUJyZWFr
KCkpCi0gICAgICAgIHRvUmVuZGVyTGluZUJyZWFrKHJlbmRlcmVyKCkpLnNldElubGluZUJveFdy
YXBwZXIodGhpcyk7CisgICAgaWYgKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCisgICAgICAg
IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuc2V0SW5saW5lQm94V3JhcHBlcih0aGlz
KTsKKyAgICBlbHNlIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKCkpKQorICAgICAg
ICBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKCkpLnNldElubGluZUJveFdyYXBw
ZXIodGhpcyk7CiB9CiAKIHZvaWQgSW5saW5lRWxlbWVudEJveDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgTGF5b3V0VW5pdCAvKiBs
aW5lVG9wICovLCBMYXlvdXRVbml0IC8qbGluZUJvdHRvbSovKQpAQCAtNjksOCArNjksOCBAQCB2
b2lkIElubGluZUVsZW1lbnRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZQogICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRQb2lu
dCBjaGlsZFBvaW50ID0gcGFpbnRPZmZzZXQ7Ci0gICAgaWYgKHJlbmRlcmVyKCkuaXNCb3goKSAm
JiBwYXJlbnQoKS0+cmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCkpIC8vIEZhc3RlciB0aGFuIGNhbGxpbmcgY29udGFpbmluZ0Jsb2NrKCkuCi0gICAgICAgIGNo
aWxkUG9pbnQgPSByZW5kZXJlcigpLmNvbnRhaW5pbmdCbG9jaygpLT5mbGlwRm9yV3JpdGluZ01v
ZGVGb3JDaGlsZCgmdG9SZW5kZXJCb3gocmVuZGVyZXIoKSksIGNoaWxkUG9pbnQpOworICAgIGlm
IChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpICYmIHBhcmVudCgpLT5yZW5kZXJlcigpLnN0eWxl
KCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgLy8gRmFzdGVyIHRoYW4gY2FsbGluZyBj
b250YWluaW5nQmxvY2soKS4KKyAgICAgICAgY2hpbGRQb2ludCA9IHJlbmRlcmVyKCkuY29udGFp
bmluZ0Jsb2NrKCktPmZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKCZkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpLCBjaGlsZFBvaW50KTsKIAogICAgIC8vIFBhaW50IGFsbCBwaGFzZXMg
b2YgcmVwbGFjZWQgZWxlbWVudHMgYXRvbWljYWxseSwgYXMgdGhvdWdoIHRoZSByZXBsYWNlZCBl
bGVtZW50IGVzdGFibGlzaGVkIGl0cwogICAgIC8vIG93biBzdGFja2luZyBjb250ZXh0LiAgKFNl
ZSBBcHBlbmRpeCBFLjIsIHNlY3Rpb24gNi40IG9uIGlubGluZSBibG9jay90YWJsZSBlbGVtZW50
cyBpbiB0aGUgQ1NTMi4xCkBAIC05Nyw4ICs5Nyw4IEBAIGJvb2wgSW5saW5lRWxlbWVudEJveDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
CiAgICAgLy8gb3duIHN0YWNraW5nIGNvbnRleHQuICAoU2VlIEFwcGVuZGl4IEUuMiwgc2VjdGlv
biA2LjQgb24gaW5saW5lIGJsb2NrL3RhYmxlIGVsZW1lbnRzIGluIHRoZSBDU1MyLjEKICAgICAv
LyBzcGVjaWZpY2F0aW9uLikKICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gYWNjdW11bGF0
ZWRPZmZzZXQ7Ci0gICAgaWYgKHJlbmRlcmVyKCkuaXNCb3goKSAmJiBwYXJlbnQoKS0+cmVuZGVy
ZXIoKS5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIC8vIEZhc3RlciB0aGFu
IGNhbGxpbmcgY29udGFpbmluZ0Jsb2NrKCkuCi0gICAgICAgIGNoaWxkUG9pbnQgPSByZW5kZXJl
cigpLmNvbnRhaW5pbmdCbG9jaygpLT5mbGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZCgmdG9SZW5k
ZXJCb3gocmVuZGVyZXIoKSksIGNoaWxkUG9pbnQpOworICAgIGlmIChpczxSZW5kZXJCb3g+KHJl
bmRlcmVyKCkpICYmIHBhcmVudCgpLT5yZW5kZXJlcigpLnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUoKSkgLy8gRmFzdGVyIHRoYW4gY2FsbGluZyBjb250YWluaW5nQmxvY2soKS4K
KyAgICAgICAgY2hpbGRQb2ludCA9IHJlbmRlcmVyKCkuY29udGFpbmluZ0Jsb2NrKCktPmZsaXBG
b3JXcml0aW5nTW9kZUZvckNoaWxkKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLCBj
aGlsZFBvaW50KTsKIAogICAgIHJldHVybiByZW5kZXJlcigpLmhpdFRlc3QocmVxdWVzdCwgcmVz
dWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBjaGlsZFBvaW50KTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAppbmRleCBjODlkMDJiYTUzZDExOTRkYTA4MmIw
N2M2YzEyNzFhNzIzMDZiYTdlLi4zMmZjMmZhYjc5NDg2YmFhMzcyOWEwMDBjYzk5MmYxMzIwYjU2
MDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCkBAIC0x
NTcsNyArMTU3LDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUb0xpbmUoSW5saW5lQm94KiBj
aGlsZCkKICAgICAgICAgICAgIGlmIChjaGlsZFN0eWxlLT5sZXR0ZXJTcGFjaW5nKCkgPCAwIHx8
IGNoaWxkU3R5bGUtPnRleHRTaGFkb3coKSB8fCBjaGlsZFN0eWxlLT50ZXh0RW1waGFzaXNNYXJr
KCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUgfHwgY2hpbGRTdHlsZS0+dGV4dFN0cm9rZVdpZHRo
KCkpCiAgICAgICAgICAgICAgICAgY2hpbGQtPmNsZWFyS25vd25Ub0hhdmVOb092ZXJmbG93KCk7
CiAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNSZXBsYWNlZCgpKSB7Ci0g
ICAgICAgICAgICBjb25zdCBSZW5kZXJCb3gmIGJveCA9IHRvUmVuZGVyQm94KGNoaWxkLT5yZW5k
ZXJlcigpKTsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlckJveCYgYm94ID0gZG93bmNhc3Q8UmVu
ZGVyQm94PihjaGlsZC0+cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICBpZiAoYm94Lmhhc1JlbmRl
ck92ZXJmbG93KCkgfHwgYm94Lmhhc1NlbGZQYWludGluZ0xheWVyKCkpCiAgICAgICAgICAgICAg
ICAgY2hpbGQtPmNsZWFyS25vd25Ub0hhdmVOb092ZXJmbG93KCk7CiAgICAgICAgIH0gZWxzZSBp
ZiAoIWNoaWxkLT5yZW5kZXJlcigpLmlzTGluZUJyZWFrKCkgJiYgKGNoaWxkU3R5bGUuYm94U2hh
ZG93KCkgfHwgY2hpbGQtPmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkK
QEAgLTg5OSw3ICs4OTksNyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94
VmlzdWFsT3ZlcmZsb3coSW5saW5lVGV4dEJveCYgdGV4dEJveCwgR2x5cAogCiBpbmxpbmUgdm9p
ZCBJbmxpbmVGbG93Qm94OjphZGRSZXBsYWNlZENoaWxkT3ZlcmZsb3coY29uc3QgSW5saW5lQm94
KiBpbmxpbmVCb3gsIExheW91dFJlY3QmIGxvZ2ljYWxMYXlvdXRPdmVyZmxvdywgTGF5b3V0UmVj
dCYgbG9naWNhbFZpc3VhbE92ZXJmbG93KQogewotICAgIGNvbnN0IFJlbmRlckJveCYgYm94ID0g
dG9SZW5kZXJCb3goaW5saW5lQm94LT5yZW5kZXJlcigpKTsKKyAgICBjb25zdCBSZW5kZXJCb3gm
IGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oaW5saW5lQm94LT5yZW5kZXJlcigpKTsKICAgICAK
ICAgICAvLyBWaXN1YWwgb3ZlcmZsb3cgb25seSBwcm9wYWdhdGVzIGlmIHRoZSBib3ggZG9lc24n
dCBoYXZlIGEgc2VsZi1wYWludGluZyBsYXllci4gIFRoaXMgcmVjdGFuZ2xlIGRvZXMgbm90IGlu
Y2x1ZGUKICAgICAvLyB0cmFuc2Zvcm1zIG9yIHJlbGF0aXZlIHBvc2l0aW9uaW5nIChzaW5jZSB0
aG9zZSBvYmplY3RzIGFsd2F5cyBoYXZlIHNlbGYtcGFpbnRpbmcgbGF5ZXJzKSwgYnV0IGl0IGRv
ZXMgbmVlZCB0byBiZSBhZGp1c3RlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xheW91dFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0
ZS5jcHAKaW5kZXggZTYwYjRiOTBhYWFjZTYzYzk2MzdiZjkxNjU0MjBmOGFjOTQwMzAzYi4uMThm
NTFlMDQ3YmVhZDk2M2QwZjQwNzU1MDU5NmM5NjdmZjM3MWM0OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCkBAIC0xNDIsOSArMTQyLDkgQEAgTGF5b3V0U3RhdGU6
OkxheW91dFN0YXRlKFJlbmRlck9iamVjdCYgcm9vdCkKIAogICAgIGlmIChjb250YWluZXItPmhh
c092ZXJmbG93Q2xpcCgpKSB7CiAgICAgICAgIG1fY2xpcHBlZCA9IHRydWU7Ci0gICAgICAgIFJl
bmRlckJveCogY29udGFpbmVyQm94ID0gdG9SZW5kZXJCb3goY29udGFpbmVyKTsKLSAgICAgICAg
bV9jbGlwUmVjdCA9IExheW91dFJlY3QodG9MYXlvdXRQb2ludChtX3BhaW50T2Zmc2V0KSwgY29u
dGFpbmVyQm94LT5jYWNoZWRTaXplRm9yT3ZlcmZsb3dDbGlwKCkpOwotICAgICAgICBtX3BhaW50
T2Zmc2V0IC09IGNvbnRhaW5lckJveC0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CisgICAgICAg
IGF1dG8mIGNvbnRhaW5lckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKmNvbnRhaW5lcik7Cisg
ICAgICAgIG1fY2xpcFJlY3QgPSBMYXlvdXRSZWN0KHRvTGF5b3V0UG9pbnQobV9wYWludE9mZnNl
dCksIGNvbnRhaW5lckJveC5jYWNoZWRTaXplRm9yT3ZlcmZsb3dDbGlwKCkpOworICAgICAgICBt
X3BhaW50T2Zmc2V0IC09IGNvbnRhaW5lckJveC5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAg
ICB9CiB9CiB2b2lkIExheW91dFN0YXRlOjpjbGVhclBhZ2luYXRpb25JbmZvcm1hdGlvbigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBmMGE3ZDEzNGZlNDBk
MTM0YzdkMzZmNDUzZDc5YjIxZTgwZjAwYmE0Li4yZDhjZGNiMWZkZjFlZGU4OGFiZGM3ODY2MGQx
NzBkNjg5ZWU5MDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
QEAgLTEyMjcsMTQgKzEyMjcsMTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2ltcGxpZmllZE5vcm1h
bEZsb3dMYXlvdXQoKQogICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIExpc3RI
YXNoU2V0PFJvb3RJbmxpbmVCb3gqPiBsaW5lQm94ZXM7CiAgICAgICAgIGZvciAoSW5saW5lV2Fs
a2VyIHdhbGtlcigqdGhpcyk7ICF3YWxrZXIuYXRFbmQoKTsgd2Fsa2VyLmFkdmFuY2UoKSkgewot
ICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gd2Fsa2VyLmN1cnJlbnQoKTsKLSAgICAgICAg
ICAgIGlmICghby0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKG8tPmlzUmVwbGFjZWQoKSB8
fCBvLT5pc0Zsb2F0aW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQm94JiBib3ggPSB0
b1JlbmRlckJveCgqbyk7CisgICAgICAgICAgICBSZW5kZXJPYmplY3QmIHJlbmRlcmVyID0gKndh
bGtlci5jdXJyZW50KCk7CisgICAgICAgICAgICBpZiAoIXJlbmRlcmVyLmlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpICYmIChyZW5kZXJlci5pc1JlcGxhY2VkKCkgfHwgcmVuZGVyZXIuaXNGbG9hdGlu
ZygpKSkgeworICAgICAgICAgICAgICAgIFJlbmRlckJveCYgYm94ID0gZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcik7CiAgICAgICAgICAgICAgICAgYm94LmxheW91dElmTmVlZGVkKCk7CiAg
ICAgICAgICAgICAgICAgaWYgKGJveC5pbmxpbmVCb3hXcmFwcGVyKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGxpbmVCb3hlcy5hZGQoJmJveC5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKG8tPmlzVGV4dCgpIHx8IChvLT5pc1JlbmRlcklubGluZSgp
ICYmICF3YWxrZXIuYXRFbmRPZklubGluZSgpKSkKLSAgICAgICAgICAgICAgICBvLT5jbGVhck5l
ZWRzTGF5b3V0KCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRl
cmVyKSB8fCAoaXM8UmVuZGVySW5saW5lPihyZW5kZXJlcikgJiYgIXdhbGtlci5hdEVuZE9mSW5s
aW5lKCkpKQorICAgICAgICAgICAgICAgIHJlbmRlcmVyLmNsZWFyTmVlZHNMYXlvdXQoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FOiBHbHlwaCBvdmVyZmxvdyB3aWxsIGdldCBsb3N0
IGluIHRoaXMgY2FzZSwgYnV0IG5vdCByZWFsbHkgYSBiaWcgZGVhbC4KQEAgLTEzMTEsMTIgKzEz
MTEsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0ZpeGVkUG9zaXRpb25PYmplY3RGb3JMYXlv
dXRJZk5lZWRlZChSZW5kZXJPYmplY3QmIGNoaWxkKQogICAgICAgICByZXR1cm47CiAKICAgICBh
dXRvIG8gPSBjaGlsZC5wYXJlbnQoKTsKLSAgICB3aGlsZSAobyAmJiAhby0+aXNSZW5kZXJWaWV3
KCkgJiYgby0+c3R5bGUoKS5wb3NpdGlvbigpICE9IEFic29sdXRlUG9zaXRpb24pCisgICAgd2hp
bGUgKG8gJiYgIWlzPFJlbmRlclZpZXc+KCpvKSAmJiBvLT5zdHlsZSgpLnBvc2l0aW9uKCkgIT0g
QWJzb2x1dGVQb3NpdGlvbikKICAgICAgICAgbyA9IG8tPnBhcmVudCgpOwogICAgIGlmIChvLT5z
dHlsZSgpLnBvc2l0aW9uKCkgIT0gQWJzb2x1dGVQb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVuZGVyQm94JiBib3ggPSB0b1JlbmRlckJveChjaGlsZCk7CisgICAgYXV0byYgYm94
ID0gZG93bmNhc3Q8UmVuZGVyQm94PihjaGlsZCk7CiAgICAgaWYgKGhhc1N0YXRpY0lubGluZVBv
c2l0aW9uKSB7CiAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRlZFZh
bHVlczsKICAgICAgICAgYm94LmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihjb21wdXRlZFZh
bHVlcyk7CkBAIC0yMjkwLDExICsyMjkwLDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZVBl
cmNlbnRIZWlnaHREZXNjZW5kYW50SWZOZWVkZWQoUmVuZGVyQm94JiBkZXNjZW5kYW50KQogdm9p
ZCBSZW5kZXJCbG9jazo6Y2xlYXJQZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNGcm9tKFJlbmRlckJv
eCYgcGFyZW50KQogewogICAgIEFTU0VSVChnUGVyY2VudEhlaWdodENvbnRhaW5lck1hcCk7Ci0g
ICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBwYXJlbnQuZmlyc3RDaGlsZCgpOyBjdXJyOyBj
dXJyID0gY3Vyci0+bmV4dEluUHJlT3JkZXIoJnBhcmVudCkpIHsKLSAgICAgICAgaWYgKCFjdXJy
LT5pc0JveCgpKQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHBhcmVudC5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0SW5QcmVPcmRlcigmcGFyZW50KSkgewor
ICAgICAgICBpZiAoIWlzPFJlbmRlckJveD4oKmNoaWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogIAotICAgICAgICBSZW5kZXJCb3gmIGJveCA9IHRvUmVuZGVyQm94KCpjdXJyKTsKKyAgICAg
ICAgYXV0byYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqY2hpbGQpOwogICAgICAgICBpZiAo
IWhhc1BlcmNlbnRIZWlnaHREZXNjZW5kYW50KGJveCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IApAQCAtMjc1OSw3ICsyNzU5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUJsb2NrUHJl
ZmVycmVkTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgKICAgICAgICAg
fQogCiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjaGlsZFN0eWxlID0gY2hpbGQtPnN0eWxl
KCk7Ci0gICAgICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZygpIHx8IChjaGlsZC0+aXNCb3goKSAm
JiB0b1JlbmRlckJveChjaGlsZCktPmF2b2lkc0Zsb2F0cygpKSkgeworICAgICAgICBpZiAoY2hp
bGQtPmlzRmxvYXRpbmcoKSB8fCAoaXM8UmVuZGVyQm94PigqY2hpbGQpICYmIGRvd25jYXN0PFJl
bmRlckJveD4oKmNoaWxkKS5hdm9pZHNGbG9hdHMoKSkpIHsKICAgICAgICAgICAgIExheW91dFVu
aXQgZmxvYXRUb3RhbFdpZHRoID0gZmxvYXRMZWZ0V2lkdGggKyBmbG9hdFJpZ2h0V2lkdGg7CiAg
ICAgICAgICAgICBpZiAoY2hpbGRTdHlsZS5jbGVhcigpICYgQ0xFRlQpIHsKICAgICAgICAgICAg
ICAgICBtYXhMb2dpY2FsV2lkdGggPSBzdGQ6Om1heChmbG9hdFRvdGFsV2lkdGgsIG1heExvZ2lj
YWxXaWR0aCk7CkBAIC0yNzg2LDEwICsyNzg2LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1
dGVCbG9ja1ByZWZlcnJlZExvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRo
CiAgICAgICAgIG1hcmdpbiA9IG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5kOwogCiAgICAgICAgIExh
eW91dFVuaXQgY2hpbGRNaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNoaWxkTWF4UHJlZmVycmVk
TG9naWNhbFdpZHRoOwotICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYgY2hpbGQtPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAg
ICAgICAgICAgUmVuZGVyQm94KiBjaGlsZEJveCA9IHRvUmVuZGVyQm94KGNoaWxkKTsKKyAgICAg
ICAgaWYgKGlzPFJlbmRlckJveD4oKmNoaWxkKSAmJiBjaGlsZC0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgICAgICAgICBhdXRv
JiBjaGlsZEJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKmNoaWxkKTsKICAgICAgICAgICAgIExv
Z2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRlZFZhbHVlczsKLSAgICAgICAgICAgIGNo
aWxkQm94LT5jb21wdXRlTG9naWNhbEhlaWdodChjaGlsZEJveC0+Ym9yZGVyQW5kUGFkZGluZ0xv
Z2ljYWxIZWlnaHQoKSwgMCwgY29tcHV0ZWRWYWx1ZXMpOworICAgICAgICAgICAgY2hpbGRCb3gu
Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoY2hpbGRCb3guYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWln
aHQoKSwgMCwgY29tcHV0ZWRWYWx1ZXMpOwogICAgICAgICAgICAgY2hpbGRNaW5QcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSBjaGlsZE1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IGNvbXB1dGVkVmFs
dWVzLm1fZXh0ZW50OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY2hpbGRNaW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGggPSBjaGlsZC0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCk7CkBA
IC0yODA2LDcgKzI4MDYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlQmxvY2tQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aAogICAgICAgICB3ID0g
Y2hpbGRNYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggKyBtYXJnaW47CiAKICAgICAgICAgaWYgKCFj
aGlsZC0+aXNGbG9hdGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYg
dG9SZW5kZXJCb3goY2hpbGQpLT5hdm9pZHNGbG9hdHMoKSkgeworICAgICAgICAgICAgaWYgKGlz
PFJlbmRlckJveD4oKmNoaWxkKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KCpjaGlsZCkuYXZvaWRz
RmxvYXRzKCkpIHsKICAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgYSBsZWZ0IGFuZCByaWdo
dCBtYXggdmFsdWUgYmFzZWQgb2ZmIHdoZXRoZXIgb3Igbm90IHRoZSBmbG9hdHMgY2FuIGZpdCBp
biB0aGUKICAgICAgICAgICAgICAgICAvLyBtYXJnaW5zIG9mIHRoZSBvYmplY3QuICBGb3IgbmVn
YXRpdmUgbWFyZ2lucywgd2Ugd2lsbCBhdHRlbXB0IHRvIG92ZXJsYXAgdGhlIGZsb2F0IGlmIHRo
ZSBuZWdhdGl2ZSBtYXJnaW4KICAgICAgICAgICAgICAgICAvLyBpcyBzbWFsbGVyIHRoYW4gdGhl
IGZsb2F0IHdpZHRoLgpAQCAtMzQ3MSwxNiArMzQ3MSwxNiBAQCB2b2lkIFJlbmRlckJsb2NrOjph
ZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2lu
dCYgYQogICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgICAgIGFkZEZvY3Vz
UmluZ1JlY3RzRm9ySW5saW5lQ2hpbGRyZW4ocmVjdHMsIGFkZGl0aW9uYWxPZmZzZXQsIHBhaW50
Q29udGFpbmVyKTsKICAgICAKLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJz
dENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAg
ICBpZiAoIWN1cnItPmlzVGV4dCgpICYmICFjdXJyLT5pc0xpc3RNYXJrZXIoKSAmJiBjdXJyLT5p
c0JveCgpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChj
dXJyKTsKKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKCFp
czxSZW5kZXJUZXh0PigqY2hpbGQpICYmICFpczxSZW5kZXJMaXN0TWFya2VyPigqY2hpbGQpICYm
IGlzPFJlbmRlckJveD4oKmNoaWxkKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4oKmNoaWxkKTsKICAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHBv
czsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5
IHdpdGggdHJhbnNmb3Jtcy4KLSAgICAgICAgICAgICAgICBpZiAoYm94LT5sYXllcigpKSAKLSAg
ICAgICAgICAgICAgICAgICAgcG9zID0gY3Vyci0+bG9jYWxUb0NvbnRhaW5lclBvaW50KEZsb2F0
UG9pbnQoKSwgcGFpbnRDb250YWluZXIpOworICAgICAgICAgICAgICAgIGlmIChib3gubGF5ZXIo
KSkKKyAgICAgICAgICAgICAgICAgICAgcG9zID0gY2hpbGQtPmxvY2FsVG9Db250YWluZXJQb2lu
dChGbG9hdFBvaW50KCksIHBhaW50Q29udGFpbmVyKTsKICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHBvcyA9IEZsb2F0UG9pbnQoYWRkaXRpb25hbE9mZnNldC54KCkg
KyBib3gtPngoKSwgYWRkaXRpb25hbE9mZnNldC55KCkgKyBib3gtPnkoKSk7Ci0gICAgICAgICAg
ICAgICAgYm94LT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBvaW50KHBv
cyksIHBhaW50Q29udGFpbmVyKTsKKyAgICAgICAgICAgICAgICAgICAgcG9zID0gRmxvYXRQb2lu
dChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGJveC54KCksIGFkZGl0aW9uYWxPZmZzZXQueSgpICsg
Ym94LnkoKSk7CisgICAgICAgICAgICAgICAgYm94LmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBm
bG9vcmVkTGF5b3V0UG9pbnQocG9zKSwgcGFpbnRDb250YWluZXIpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcAppbmRleCBiY2Y1OGE4NDQzOWNhMTI3NjdiMDZjMWEyOTdiYzE0M2Q3YWRjZGExLi45
MTk3YTliYmUyOGE5NzNiNWQ0NWYxN2I5N2M0ZTNlNWQzM2Q1M2M4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMjUwLDcgKzI1MCw3IEBAIHZv
aWQgUmVuZGVyQmxvY2tGbG93OjpyZWJ1aWxkRmxvYXRpbmdPYmplY3RTZXRGcm9tSW50cnVkaW5n
RmxvYXRzKCkKICAgICAKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gMDsKICAg
ICBpZiAocHJldikKLSAgICAgICAgbG9naWNhbFRvcE9mZnNldCAtPSB0b1JlbmRlckJveChwcmV2
KS0+bG9naWNhbFRvcCgpOworICAgICAgICBsb2dpY2FsVG9wT2Zmc2V0IC09IGRvd25jYXN0PFJl
bmRlckJveD4oKnByZXYpLmxvZ2ljYWxUb3AoKTsKICAgICBlbHNlIHsKICAgICAgICAgcHJldiA9
ICZwYXJlbnRCbG9jazsKICAgICAgICAgbG9naWNhbExlZnRPZmZzZXQgKz0gcGFyZW50QmxvY2su
bG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCk7CkBAIC0zMzQ0LDcgKzMzNDQsNyBAQCBWaXNp
YmxlUG9zaXRpb24gUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNo
aWxkcmVuKGNvbnN0IExheW91dAogICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCiAgICAgICAgICAgICBwb2ludCA9IHBvaW50LnRyYW5zcG9zZWRQb2ludCgpOwogICAgICAg
ICBpZiAoY2xvc2VzdEJveC0+cmVuZGVyZXIoKS5pc1JlcGxhY2VkKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcygqdGhpcywg
dG9SZW5kZXJCb3goY2xvc2VzdEJveC0+cmVuZGVyZXIoKSksIHBvaW50KTsKKyAgICAgICAgICAg
IHJldHVybiBwb3NpdGlvbkZvclBvaW50UmVzcGVjdGluZ0VkaXRpbmdCb3VuZGFyaWVzKCp0aGlz
LCBkb3duY2FzdDxSZW5kZXJCb3g+KGNsb3Nlc3RCb3gtPnJlbmRlcmVyKCkpLCBwb2ludCk7CiAg
ICAgICAgIHJldHVybiBjbG9zZXN0Qm94LT5yZW5kZXJlcigpLnBvc2l0aW9uRm9yUG9pbnQocG9p
bnQsIG51bGxwdHIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCA1OGY0NTVkM2E3NTRiZDRmMDU2ZTE0YmRm
YTMyNWExODZiOTc5NWU5Li40ZjRhOWY1MTczNDE4YjAwM2Q3MDEwNWRkNTJkNzEyOTQ0MDA1NDNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcApAQCAtNjg2LDcgKzY4Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRl
SW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94KiBsaW5lCiAgICAg
Ym9vbCBuZWVkc1dvcmRTcGFjaW5nOwogCiAgICAgaWYgKGZpcnN0UnVuICYmIGZpcnN0UnVuLT5y
ZW5kZXJlcigpLmlzUmVwbGFjZWQoKSkgewotICAgICAgICBSZW5kZXJCb3gmIHJlbmRlckJveCA9
IHRvUmVuZGVyQm94KGZpcnN0UnVuLT5yZW5kZXJlcigpKTsKKyAgICAgICAgUmVuZGVyQm94JiBy
ZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KGZpcnN0UnVuLT5yZW5kZXJlcigpKTsKICAg
ICAgICAgdXBkYXRlTG9naWNhbElubGluZVBvc2l0aW9ucygqdGhpcywgbGluZUxvZ2ljYWxMZWZ0
LCBsaW5lTG9naWNhbFJpZ2h0LCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGlzRmlyc3RMaW5lLCBz
aG91bGRJbmRlbnRUZXh0LCByZW5kZXJCb3gubG9naWNhbEhlaWdodCgpKTsKICAgICB9CiAKQEAg
LTE0NjYsNyArMTQ2Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRMaW5lQm94ZXMo
Ym9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50CiAgICAgICAgICAgICAg
ICAgaGFzSW5saW5lQ2hpbGQgPSB0cnVlOwogCiAgICAgICAgICAgICBpZiAoby5pc1JlcGxhY2Vk
KCkgfHwgby5pc0Zsb2F0aW5nKCkgfHwgby5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAg
ICAgICAgICAgICAgIFJlbmRlckJveCYgYm94ID0gdG9SZW5kZXJCb3gobyk7CisgICAgICAgICAg
ICAgICAgUmVuZGVyQm94JiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KG8pOwogCiAgICAgICAg
ICAgICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4gfHwgYm94Lmhhc1JlbGF0aXZlRGltZW5zaW9u
cygpKQogICAgICAgICAgICAgICAgICAgICBib3guc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25s
eVRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBhYTQ4NjM4
OTBmODQ5YTVkYmIzMzZjZWYzYmJlZmI0ZjAxZTZlMDVmLi41MWZkN2Q1MmQ4OTYzMzhiZTc2NTJj
YzNhNTQzMjVjNWRjOTc0OTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cApAQCAtOTE5LDE0ICs5MTksMTQgQEAgSW50U2l6ZSBSZW5kZXJCb3g6OmNhbGN1bGF0ZUF1dG9z
Y3JvbGxEaXJlY3Rpb24oY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KSBjb24KIAogUmVuZGVy
Qm94KiBSZW5kZXJCb3g6OmZpbmRBdXRvc2Nyb2xsYWJsZShSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQogewotICAgIHdoaWxlIChyZW5kZXJlciAmJiAhKHJlbmRlcmVyLT5pc0JveCgpICYmIHRvUmVu
ZGVyQm94KHJlbmRlcmVyKS0+Y2FuQXV0b3Njcm9sbCgpKSkgewotICAgICAgICBpZiAocmVuZGVy
ZXItPmlzUmVuZGVyVmlldygpICYmIHJlbmRlcmVyLT5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgp
KQorICAgIHdoaWxlIChyZW5kZXJlciAmJiAhKGlzPFJlbmRlckJveD4oKnJlbmRlcmVyKSAmJiBk
b3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuY2FuQXV0b3Njcm9sbCgpKSkgeworICAgICAg
ICBpZiAoaXM8UmVuZGVyVmlldz4oKnJlbmRlcmVyKSAmJiByZW5kZXJlci0+ZG9jdW1lbnQoKS5v
d25lckVsZW1lbnQoKSkKICAgICAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPmRvY3VtZW50
KCkub3duZXJFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogICAgIH0KIAotICAgIHJldHVybiByZW5k
ZXJlciAmJiByZW5kZXJlci0+aXNCb3goKSA/IHRvUmVuZGVyQm94KHJlbmRlcmVyKSA6IDA7Cisg
ICAgcmV0dXJuIGlzPFJlbmRlckJveD4ocmVuZGVyZXIpID8gZG93bmNhc3Q8UmVuZGVyQm94Pihy
ZW5kZXJlcikgOiBudWxscHRyOwogfQogCiB2b2lkIFJlbmRlckJveDo6cGFuU2Nyb2xsKGNvbnN0
IEludFBvaW50JiBzb3VyY2UpCkBAIC0zNTU5LDkgKzM1NTksOSBAQCBzdGF0aWMgdm9pZCBjb21w
dXRlQmxvY2tTdGF0aWNEaXN0YW5jZShMZW5ndGgmIGxvZ2ljYWxUb3AsIExlbmd0aCYgbG9naWNh
bEJvdHRvbQogICAgIAogICAgIC8vIEZJWE1FOiBUaGUgc3RhdGljIGRpc3RhbmNlIGNvbXB1dGF0
aW9uIGhhcyBub3QgYmVlbiBwYXRjaGVkIGZvciBtaXhlZCB3cml0aW5nIG1vZGVzLgogICAgIExh
eW91dFVuaXQgc3RhdGljTG9naWNhbFRvcCA9IGNoaWxkLT5sYXllcigpLT5zdGF0aWNCbG9ja1Bv
c2l0aW9uKCkgLSBjb250YWluZXJCbG9jay0+Ym9yZGVyQmVmb3JlKCk7Ci0gICAgZm9yIChSZW5k
ZXJFbGVtZW50KiBjdXJyID0gY2hpbGQtPnBhcmVudCgpOyBjdXJyICYmIGN1cnIgIT0gY29udGFp
bmVyQmxvY2s7IGN1cnIgPSBjdXJyLT5jb250YWluZXIoKSkgewotICAgICAgICBpZiAoY3Vyci0+
aXNCb3goKSAmJiAhY3Vyci0+aXNUYWJsZVJvdygpKQotICAgICAgICAgICAgc3RhdGljTG9naWNh
bFRvcCArPSB0b1JlbmRlckJveChjdXJyKS0+bG9naWNhbFRvcCgpOworICAgIGZvciAoUmVuZGVy
RWxlbWVudCogY29udGFpbmVyID0gY2hpbGQtPnBhcmVudCgpOyBjb250YWluZXIgJiYgY29udGFp
bmVyICE9IGNvbnRhaW5lckJsb2NrOyBjb250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5lcigp
KSB7CisgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpjb250YWluZXIpICYmICFpczxSZW5kZXJU
YWJsZVJvdz4oKmNvbnRhaW5lcikpCisgICAgICAgICAgICBzdGF0aWNMb2dpY2FsVG9wICs9IGRv
d25jYXN0PFJlbmRlckJveD4oKmNvbnRhaW5lcikubG9naWNhbFRvcCgpOwogICAgIH0KICAgICBs
b2dpY2FsVG9wLnNldFZhbHVlKEZpeGVkLCBzdGF0aWNMb2dpY2FsVG9wKTsKIH0KQEAgLTQxOTks
MzAgKzQxOTksMzAgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2lu
dChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbmQKICAgICAgICAgYWRqdXN0ZWRQ
b2ludC5tb3ZlQnkobG9jYXRpb24oKSk7CiAKICAgICBmb3IgKFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0ID0gZmlyc3RDaGlsZCgpOyByZW5kZXJPYmplY3Q7IHJlbmRlck9iamVjdCA9IHJlbmRl
ck9iamVjdC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNC
b3goKSkKKyAgICAgICAgaWYgKCFpczxSZW5kZXJCb3g+KCpyZW5kZXJPYmplY3QpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGlzUmVuZGVyRmxvd1RocmVhZCgpKSB7Cisg
ICAgICAgIGlmIChpczxSZW5kZXJGbG93VGhyZWFkPigqdGhpcykpIHsKICAgICAgICAgICAgIEFT
U0VSVChyZWdpb24pOwotICAgICAgICAgICAgaWYgKCF0b1JlbmRlckZsb3dUaHJlYWQodGhpcykt
Pm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHJlbmRlck9iamVjdCwgcmVnaW9uKSkK
KyAgICAgICAgICAgIGlmICghZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKnRoaXMpLm9iamVj
dFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHJlbmRlck9iamVjdCwgcmVnaW9uKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJlbmRlckJveCogcmVu
ZGVyZXIgPSB0b1JlbmRlckJveChyZW5kZXJPYmplY3QpOworICAgICAgICBhdXRvJiByZW5kZXJl
ciA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlck9iamVjdCk7CiAKLSAgICAgICAgaWYgKCgh
cmVuZGVyZXItPmZpcnN0Q2hpbGQoKSAmJiAhcmVuZGVyZXItPmlzSW5saW5lKCkgJiYgIXJlbmRl
cmVyLT5pc1JlbmRlckJsb2NrRmxvdygpICkKLSAgICAgICAgICAgIHx8IHJlbmRlcmVyLT5zdHls
ZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAgICBpZiAoKCFyZW5kZXJlci5maXJz
dENoaWxkKCkgJiYgIXJlbmRlcmVyLmlzSW5saW5lKCkgJiYgIWlzPFJlbmRlckJsb2NrRmxvdz4o
cmVuZGVyZXIpKQorICAgICAgICAgICAgfHwgcmVuZGVyZXIuc3R5bGUoKS52aXNpYmlsaXR5KCkg
IT0gVklTSUJMRSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIExheW91dFVuaXQg
dG9wID0gcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSArIChp
c1RhYmxlUm93KCkgPyBMYXlvdXRVbml0KCkgOiByZW5kZXJlci0+eSgpKTsKLSAgICAgICAgTGF5
b3V0VW5pdCBib3R0b20gPSB0b3AgKyByZW5kZXJlci0+Y29udGVudEhlaWdodCgpOwotICAgICAg
ICBMYXlvdXRVbml0IGxlZnQgPSByZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygpID8gTGF5b3V0VW5pdCgpIDogcmVuZGVyZXItPngo
KSk7Ci0gICAgICAgIExheW91dFVuaXQgcmlnaHQgPSBsZWZ0ICsgcmVuZGVyZXItPmNvbnRlbnRX
aWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IHRvcCA9IHJlbmRlcmVyLmJvcmRlclRvcCgpICsg
cmVuZGVyZXIucGFkZGluZ1RvcCgpICsgKGlzPFJlbmRlclRhYmxlUm93PigqdGhpcykgPyBMYXlv
dXRVbml0KCkgOiByZW5kZXJlci55KCkpOworICAgICAgICBMYXlvdXRVbml0IGJvdHRvbSA9IHRv
cCArIHJlbmRlcmVyLmNvbnRlbnRIZWlnaHQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBsZWZ0ID0g
cmVuZGVyZXIuYm9yZGVyTGVmdCgpICsgcmVuZGVyZXIucGFkZGluZ0xlZnQoKSArIChpczxSZW5k
ZXJUYWJsZVJvdz4oKnRoaXMpID8gTGF5b3V0VW5pdCgpIDogcmVuZGVyZXIueCgpKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCByaWdodCA9IGxlZnQgKyByZW5kZXJlci5jb250ZW50V2lkdGgoKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChwb2ludC54KCkgPD0gcmlnaHQgJiYgcG9pbnQueCgpID49IGxl
ZnQgJiYgcG9pbnQueSgpIDw9IHRvcCAmJiBwb2ludC55KCkgPj0gYm90dG9tKSB7Ci0gICAgICAg
ICAgICBpZiAocmVuZGVyZXItPmlzVGFibGVSb3coKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQocG9pbnQgKyBhZGp1c3RlZFBvaW50IC0gcmVuZGVy
ZXItPmxvY2F0aW9uT2Zmc2V0KCksIHJlZ2lvbik7Ci0gICAgICAgICAgICByZXR1cm4gcmVuZGVy
ZXItPnBvc2l0aW9uRm9yUG9pbnQocG9pbnQgLSByZW5kZXJlci0+bG9jYXRpb25PZmZzZXQoKSwg
cmVnaW9uKTsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJUYWJsZVJvdz4ocmVuZGVyZXIpKQor
ICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJlci5wb3NpdGlvbkZvclBvaW50KHBvaW50ICsg
YWRqdXN0ZWRQb2ludCAtIHJlbmRlcmVyLmxvY2F0aW9uT2Zmc2V0KCksIHJlZ2lvbik7CisgICAg
ICAgICAgICByZXR1cm4gcmVuZGVyZXIucG9zaXRpb25Gb3JQb2ludChwb2ludCAtIHJlbmRlcmVy
LmxvY2F0aW9uT2Zmc2V0KCksIHJlZ2lvbik7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGaW5k
IHRoZSBkaXN0YW5jZSBmcm9tICh4LCB5KSB0byB0aGUgYm94LiAgU3BsaXQgdGhlIHNwYWNlIGFy
b3VuZCB0aGUgYm94IGludG8gOCBwaWVjZXMKQEAgLTQyNTMsNyArNDI1Myw3IEBAIFZpc2libGVQ
b3NpdGlvbiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50LCBjb25zdCBSZW5kCiAKICAgICAgICAgTGF5b3V0VW5pdCBkaXN0ID0gZGlmZmVyZW5jZS53
aWR0aCgpICogZGlmZmVyZW5jZS53aWR0aCgpICsgZGlmZmVyZW5jZS5oZWlnaHQoKSAqIGRpZmZl
cmVuY2UuaGVpZ2h0KCk7CiAgICAgICAgIGlmIChkaXN0IDwgbWluRGlzdCkgewotICAgICAgICAg
ICAgY2xvc2VzdFJlbmRlcmVyID0gcmVuZGVyZXI7CisgICAgICAgICAgICBjbG9zZXN0UmVuZGVy
ZXIgPSAmcmVuZGVyZXI7CiAgICAgICAgICAgICBtaW5EaXN0ID0gZGlzdDsKICAgICAgICAgfQog
ICAgIH0KQEAgLTQ3NjQsMjggKzQ3NjQsMjggQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJCb3g6OnNw
bGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWwKICAg
ICBib29sIGRpZFNwbGl0UGFyZW50QW5vbnltb3VzQm94ZXMgPSBmYWxzZTsKIAogICAgIHdoaWxl
IChiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykgewotICAgICAgICBSZW5kZXJCb3gqIGJv
eFRvU3BsaXQgPSB0b1JlbmRlckJveChiZWZvcmVDaGlsZC0+cGFyZW50KCkpOwotICAgICAgICBp
ZiAoYm94VG9TcGxpdC0+Zmlyc3RDaGlsZCgpICE9IGJlZm9yZUNoaWxkICYmIGJveFRvU3BsaXQt
PmlzQW5vbnltb3VzKCkpIHsKKyAgICAgICAgYXV0byYgYm94VG9TcGxpdCA9IGRvd25jYXN0PFJl
bmRlckJveD4oKmJlZm9yZUNoaWxkLT5wYXJlbnQoKSk7CisgICAgICAgIGlmIChib3hUb1NwbGl0
LmZpcnN0Q2hpbGQoKSAhPSBiZWZvcmVDaGlsZCAmJiBib3hUb1NwbGl0LmlzQW5vbnltb3VzKCkp
IHsKICAgICAgICAgICAgIGRpZFNwbGl0UGFyZW50QW5vbnltb3VzQm94ZXMgPSB0cnVlOwogCiAg
ICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHNwbGl0IHRoZSBwYXJlbnQgYm94IGludG8gdHdvIGJv
eGVzIGFuZCBtb3ZlIGNoaWxkcmVuCiAgICAgICAgICAgICAvLyBmcm9tIHxiZWZvcmVDaGlsZHwg
dG8gZW5kIGludG8gdGhlIG5ldyBwb3N0IGJveC4KLSAgICAgICAgICAgIFJlbmRlckJveCogcG9z
dEJveCA9IGJveFRvU3BsaXQtPmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKHRoaXMp
OwotICAgICAgICAgICAgcG9zdEJveC0+c2V0Q2hpbGRyZW5JbmxpbmUoYm94VG9TcGxpdC0+Y2hp
bGRyZW5JbmxpbmUoKSk7Ci0gICAgICAgICAgICBSZW5kZXJCb3gqIHBhcmVudEJveCA9IHRvUmVu
ZGVyQm94KGJveFRvU3BsaXQtPnBhcmVudCgpKTsKKyAgICAgICAgICAgIFJlbmRlckJveCogcG9z
dEJveCA9IGJveFRvU3BsaXQuY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXModGhpcyk7
CisgICAgICAgICAgICBwb3N0Qm94LT5zZXRDaGlsZHJlbklubGluZShib3hUb1NwbGl0LmNoaWxk
cmVuSW5saW5lKCkpOworICAgICAgICAgICAgUmVuZGVyQm94KiBwYXJlbnRCb3ggPSBkb3duY2Fz
dDxSZW5kZXJCb3g+KGJveFRvU3BsaXQucGFyZW50KCkpOwogICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byBpbnZhbGlkYXRlIHRoZSB8cGFyZW50Qm94fCBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBuZXcg
bm9kZQogICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUgdGFibGUgcmVwYWludGluZyBsb2dpYyBr
bm93cyB0aGUgc3RydWN0dXJlIGlzIGRpcnR5LgogICAgICAgICAgICAgLy8gU2VlIGZvciBleGFt
cGxlIFJlbmRlclRhYmxlQ2VsbDpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludC4KICAgICAg
ICAgICAgIG1hcmtCb3hGb3JSZWxheW91dEFmdGVyU3BsaXQoKnBhcmVudEJveCk7Ci0gICAgICAg
ICAgICBwYXJlbnRCb3gtPmluc2VydENoaWxkSW50ZXJuYWwocG9zdEJveCwgYm94VG9TcGxpdC0+
bmV4dFNpYmxpbmcoKSwgTm90aWZ5Q2hpbGRyZW4pOwotICAgICAgICAgICAgYm94VG9TcGxpdC0+
bW92ZUNoaWxkcmVuVG8ocG9zdEJveCwgYmVmb3JlQ2hpbGQsIDAsIHRydWUpOworICAgICAgICAg
ICAgcGFyZW50Qm94LT5pbnNlcnRDaGlsZEludGVybmFsKHBvc3RCb3gsIGJveFRvU3BsaXQubmV4
dFNpYmxpbmcoKSwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICAgICAgYm94VG9TcGxpdC5tb3Zl
Q2hpbGRyZW5Ubyhwb3N0Qm94LCBiZWZvcmVDaGlsZCwgMCwgdHJ1ZSk7CiAKLSAgICAgICAgICAg
IG1hcmtCb3hGb3JSZWxheW91dEFmdGVyU3BsaXQoKmJveFRvU3BsaXQpOworICAgICAgICAgICAg
bWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdChib3hUb1NwbGl0KTsKICAgICAgICAgICAgIG1h
cmtCb3hGb3JSZWxheW91dEFmdGVyU3BsaXQoKnBvc3RCb3gpOwogCiAgICAgICAgICAgICBiZWZv
cmVDaGlsZCA9IHBvc3RCb3g7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmVmb3JlQ2hp
bGQgPSBib3hUb1NwbGl0OworICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSAmYm94VG9TcGxpdDsK
ICAgICB9CiAKICAgICBpZiAoZGlkU3BsaXRQYXJlbnRBbm9ueW1vdXNCb3hlcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCA2NTI3YTBjNGU1MmNiMmI1NjhjYTcyNTUxOWM0
N2ZjMDY3YjBjMTk3Li4wM2VjNzFkYmFkYzMwOGFhNjk3MzIxNDlmZDgwMWI5MDdkMWVmYzk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC03MjMsMzEgKzcyMywyOSBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBib29sIHNfaGFkT3ZlcmZsb3dDbGlwOwogfTsKIAotUkVOREVS
X09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlckJveCwgaXNCb3goKSkKLQogaW5saW5lIFJlbmRlckJv
eCogUmVuZGVyQm94OjpwcmV2aW91c1NpYmxpbmdCb3goKSBjb25zdAogewotICAgIHJldHVybiB0
b1JlbmRlckJveChwcmV2aW91c1NpYmxpbmcoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
ckJveD4ocHJldmlvdXNTaWJsaW5nKCkpOwogfQogCiBpbmxpbmUgUmVuZGVyQm94KiBSZW5kZXJC
b3g6Om5leHRTaWJsaW5nQm94KCkgY29uc3QKIHsgCi0gICAgcmV0dXJuIHRvUmVuZGVyQm94KG5l
eHRTaWJsaW5nKCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KG5leHRTaWJsaW5n
KCkpOwogfQogCiBpbmxpbmUgUmVuZGVyQm94KiBSZW5kZXJCb3g6OnBhcmVudEJveCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHRvUmVuZGVyQm94KHBhcmVudCgpKTsKKyAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyQm94PihwYXJlbnQoKSk7CiB9CiAKIGlubGluZSBSZW5kZXJCb3gqIFJlbmRlckJv
eDo6Zmlyc3RDaGlsZEJveCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvUmVuZGVyQm94KGZpcnN0
Q2hpbGQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4oZmlyc3RDaGlsZCgpKTsK
IH0KIAogaW5saW5lIFJlbmRlckJveCogUmVuZGVyQm94OjpsYXN0Q2hpbGRCb3goKSBjb25zdAog
ewotICAgIHJldHVybiB0b1JlbmRlckJveChsYXN0Q2hpbGQoKSk7CisgICAgcmV0dXJuIGRvd25j
YXN0PFJlbmRlckJveD4obGFzdENoaWxkKCkpOwogfQogCiBpbmxpbmUgdm9pZCBSZW5kZXJCb3g6
OnNldElubGluZUJveFdyYXBwZXIoSW5saW5lRWxlbWVudEJveCogYm94V3JhcHBlcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4
IGU2NWM0YmU3ZTdmYTllMWQ3MTVkZjAyYTkzYWJmMDQ2YTFjNmIyMDguLjQwNzRjNzU1MmZjMzUy
YjFhMGJlNzRlNzg4NmNhYTA0ZTQ3Y2U3MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1
ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgog
I2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKICNp
bmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dEZyYWdtZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzEwLDggKzMxMSw4IEBAIExheW91dFBvaW50IFJl
bmRlckJveE1vZGVsT2JqZWN0OjphZGp1c3RlZFBvc2l0aW9uUmVsYXRpdmVUb09mZnNldFBhcmVu
dChjb25zdCBMCiAgICAgLy8gcmV0dXJuIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBjYW52YXMg
b3JpZ2luIGFuZCB0aGUgbGVmdCBib3JkZXIgZWRnZSAKICAgICAvLyBvZiB0aGUgZWxlbWVudCBh
bmQgc3RvcCB0aGlzIGFsZ29yaXRobS4KICAgICBpZiAoY29uc3QgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIG9mZnNldFBhcmVudCA9IHRoaXMtPm9mZnNldFBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChv
ZmZzZXRQYXJlbnQtPmlzQm94KCkgJiYgIW9mZnNldFBhcmVudC0+aXNCb2R5KCkgJiYgIW9mZnNl
dFBhcmVudC0+aXNUYWJsZSgpKQotICAgICAgICAgICAgcmVmZXJlbmNlUG9pbnQubW92ZSgtdG9S
ZW5kZXJCb3gob2Zmc2V0UGFyZW50KS0+Ym9yZGVyTGVmdCgpLCAtdG9SZW5kZXJCb3gob2Zmc2V0
UGFyZW50KS0+Ym9yZGVyVG9wKCkpOworICAgICAgICBpZiAoaXM8UmVuZGVyQm94Pigqb2Zmc2V0
UGFyZW50KSAmJiAhb2Zmc2V0UGFyZW50LT5pc0JvZHkoKSAmJiAhaXM8UmVuZGVyVGFibGU+KCpv
ZmZzZXRQYXJlbnQpKQorICAgICAgICAgICAgcmVmZXJlbmNlUG9pbnQubW92ZSgtZG93bmNhc3Q8
UmVuZGVyQm94Pigqb2Zmc2V0UGFyZW50KS5ib3JkZXJMZWZ0KCksIC1kb3duY2FzdDxSZW5kZXJC
b3g+KCpvZmZzZXRQYXJlbnQpLmJvcmRlclRvcCgpKTsKICAgICAgICAgaWYgKCFpc091dE9mRmxv
d1Bvc2l0aW9uZWQoKSB8fCBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAg
ICAgIGlmIChpc1JlbFBvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICByZWZlcmVuY2VQb2lu
dC5tb3ZlKHJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKSk7CkBAIC0zMjEsMjkgKzMyMiwyOSBAQCBM
YXlvdXRQb2ludCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZl
VG9PZmZzZXRQYXJlbnQoY29uc3QgTAogICAgICAgICAgICAgLy8gQ1NTIHJlZ2lvbnMgc3BlY2lm
aWNhdGlvbiBzYXlzIHRoYXQgcmVnaW9uIGZsb3dzIHNob3VsZCByZXR1cm4gdGhlIGJvZHkgZWxl
bWVudCBhcyB0aGVpciBvZmZzZXRQYXJlbnQuCiAgICAgICAgICAgICAvLyBTaW5jZSB3ZSB3aWxs
IGJ5cGFzcyB0aGUgYm9keeKAmXMgcmVuZGVyZXIgYW55d2F5LCBqdXN0IGVuZCB0aGUgbG9vcCBp
ZiB3ZSBlbmNvdW50ZXIgYSByZWdpb24gZmxvdyAobmFtZWQgZmxvdyB0aHJlYWQpLgogICAgICAg
ICAgICAgLy8gU2VlIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1yZWdpb25zLyNjc3NvbXZp
ZXctb2Zmc2V0LWF0dHJpYnV0ZXMKLSAgICAgICAgICAgIGF1dG8gY3VyciA9IHBhcmVudCgpOwot
ICAgICAgICAgICAgd2hpbGUgKGN1cnIgIT0gb2Zmc2V0UGFyZW50ICYmICFjdXJyLT5pc1JlbmRl
ck5hbWVkRmxvd1RocmVhZCgpKSB7CisgICAgICAgICAgICBhdXRvKiBhbmNlc3RvciA9IHBhcmVu
dCgpOworICAgICAgICAgICAgd2hpbGUgKGFuY2VzdG9yICE9IG9mZnNldFBhcmVudCAmJiAhaXM8
UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqYW5jZXN0b3IpKSB7CiAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdoYXQgYXJlIHdlIHN1cHBvc2VkIHRvIGRvIGluc2lkZSBTVkcgY29udGVudD8KICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoY3Vyci0+aXNJbkZsb3dSZW5kZXJG
bG93VGhyZWFkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkPigqYW5jZXN0b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQg
dG8gYXBwbHkgYSB0cmFuc2xhdGlvbiBiYXNlZCBvZmYgd2hhdCByZWdpb24gd2UgYXJlIGluc2lk
ZS4KLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSB0b1JlbmRlck11
bHRpQ29sdW1uRmxvd1RocmVhZChjdXJyKS0+cGh5c2ljYWxUcmFuc2xhdGlvbkZyb21GbG93VG9S
ZWdpb24ocmVmZXJlbmNlUG9pbnQpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJSZWdpb24q
IHJlZ2lvbiA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZD4oKmFuY2VzdG9y
KS5waHlzaWNhbFRyYW5zbGF0aW9uRnJvbUZsb3dUb1JlZ2lvbihyZWZlcmVuY2VQb2ludCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZWdpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWZlcmVuY2VQb2ludC5tb3ZlQnkocmVnaW9uLT50b3BMZWZ0TG9jYXRpb24oKSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICghaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGN1cnItPmlzQm94KCkgJiYgIWN1cnItPmlzVGFibGVSb3coKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVBvaW50Lm1vdmVCeSh0b1JlbmRlckJveChj
dXJyKS0+dG9wTGVmdExvY2F0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXM8UmVu
ZGVyQm94PigqYW5jZXN0b3IpICYmICFpczxSZW5kZXJUYWJsZVJvdz4oKmFuY2VzdG9yKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVBvaW50Lm1vdmVCeShkb3duY2FzdDxSZW5k
ZXJCb3g+KCphbmNlc3RvcikudG9wTGVmdExvY2F0aW9uKCkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci0+cGFyZW50KCk7
CisgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBw
b3NpdGlvbiBmb3IgZWxlbWVudHMgaW5zaWRlIG5hbWVkIGZsb3cgdGhyZWFkcyBmb3Igd2hpY2gg
dGhlIG9mZnNldFBhcmVudCB3YXMgdGhlIGJvZHkuCiAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTg5OQotICAgICAgICAgICAgaWYg
KGN1cnItPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpCi0gICAgICAgICAgICAgICAgcmVmZXJl
bmNlUG9pbnQgPSB0b1JlbmRlck5hbWVkRmxvd1RocmVhZChjdXJyKS0+YWRqdXN0ZWRQb3NpdGlv
blJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoKnRoaXMsIHJlZmVyZW5jZVBvaW50KTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKG9mZnNldFBhcmVudC0+aXNCb3goKSAmJiBvZmZzZXRQYXJlbnQtPmlzQm9k
eSgpICYmICFvZmZzZXRQYXJlbnQtPmlzUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgIHJl
ZmVyZW5jZVBvaW50Lm1vdmVCeSh0b1JlbmRlckJveChvZmZzZXRQYXJlbnQpLT50b3BMZWZ0TG9j
YXRpb24oKSk7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqYW5j
ZXN0b3IpKQorICAgICAgICAgICAgICAgIHJlZmVyZW5jZVBvaW50ID0gZG93bmNhc3Q8UmVuZGVy
TmFtZWRGbG93VGhyZWFkPigqYW5jZXN0b3IpLmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zm
c2V0UGFyZW50KCp0aGlzLCByZWZlcmVuY2VQb2ludCk7CisgICAgICAgICAgICBlbHNlIGlmIChp
czxSZW5kZXJCb3g+KCpvZmZzZXRQYXJlbnQpICYmIG9mZnNldFBhcmVudC0+aXNCb2R5KCkgJiYg
IW9mZnNldFBhcmVudC0+aXNQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICAgICAgcmVmZXJlbmNl
UG9pbnQubW92ZUJ5KGRvd25jYXN0PFJlbmRlckJveD4oKm9mZnNldFBhcmVudCkudG9wTGVmdExv
Y2F0aW9uKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNTYsNyArMzU3LDcgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMoU3Rp
Y2t5UG9zaXRpb25WaWV3cG8KIAogICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sgPSB0
aGlzLT5jb250YWluaW5nQmxvY2soKTsKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQ2xpcHBp
bmdMYXllciA9IGxheWVyKCktPmVuY2xvc2luZ092ZXJmbG93Q2xpcExheWVyKEV4Y2x1ZGVTZWxm
KTsKLSAgICBSZW5kZXJCb3gmIGVuY2xvc2luZ0NsaXBwaW5nQm94ID0gZW5jbG9zaW5nQ2xpcHBp
bmdMYXllciA/IHRvUmVuZGVyQm94KGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnJlbmRlcmVyKCkp
IDogdmlldygpOworICAgIFJlbmRlckJveCYgZW5jbG9zaW5nQ2xpcHBpbmdCb3ggPSBlbmNsb3Np
bmdDbGlwcGluZ0xheWVyID8gZG93bmNhc3Q8UmVuZGVyQm94PihlbmNsb3NpbmdDbGlwcGluZ0xh
eWVyLT5yZW5kZXJlcigpKSA6IHZpZXcoKTsKIAogICAgIExheW91dFJlY3QgY29udGFpbmVyQ29u
dGVudFJlY3Q7CiAgICAgaWYgKCFlbmNsb3NpbmdDbGlwcGluZ0xheWVyIHx8IChjb250YWluaW5n
QmxvY2sgIT0gJmVuY2xvc2luZ0NsaXBwaW5nQm94KSkKQEAgLTQzNiw3ICs0MzcsNyBAQCBGbG9h
dFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbnN0cmFpbmluZ1JlY3RGb3JTdGlja3lQb3Np
dGlvbigpIGNvbnN0CiB7CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIg
PSBsYXllcigpLT5lbmNsb3NpbmdPdmVyZmxvd0NsaXBMYXllcihFeGNsdWRlU2VsZik7CiAgICAg
aWYgKGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpIHsKLSAgICAgICAgUmVuZGVyQm94JiBlbmNsb3Np
bmdDbGlwcGluZ0JveCA9IHRvUmVuZGVyQm94KGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnJlbmRl
cmVyKCkpOworICAgICAgICBSZW5kZXJCb3gmIGVuY2xvc2luZ0NsaXBwaW5nQm94ID0gZG93bmNh
c3Q8UmVuZGVyQm94PihlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5yZW5kZXJlcigpKTsKICAgICAg
ICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94Lm92ZXJmbG93Q2xp
cFJlY3QoTGF5b3V0UG9pbnQoKSwgMCk7IC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayBpbiByZWdp
b25zLgogICAgICAgICBjbGlwUmVjdC5jb250cmFjdChMYXlvdXRTaXplKGVuY2xvc2luZ0NsaXBw
aW5nQm94LnBhZGRpbmdMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nUmlnaHQo
KSwKICAgICAgICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdUb3AoKSArIGVuY2xv
c2luZ0NsaXBwaW5nQm94LnBhZGRpbmdCb3R0b20oKSkpOwpAQCAtNzE5LDExICs3MjAsMTEgQEAg
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY28KICAgICBMYXlvdXRSZWN0IHNjcm9sbGVkUGFpbnRSZWN0
ID0gcmVjdDsKICAgICBpZiAoY2xpcHBlZFdpdGhMb2NhbFNjcm9sbGluZykgewogICAgICAgICAv
LyBDbGlwIHRvIHRoZSBvdmVyZmxvdyBhcmVhLgotICAgICAgICBSZW5kZXJCb3gqIHRoaXNCb3gg
PSB0b1JlbmRlckJveCh0aGlzKTsKLSAgICAgICAgY29udGV4dC0+Y2xpcCh0aGlzQm94LT5vdmVy
Zmxvd0NsaXBSZWN0KHJlY3QubG9jYXRpb24oKSwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KCkpKTsKKyAgICAgICAgYXV0byYgdGhpc0JveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnRo
aXMpOworICAgICAgICBjb250ZXh0LT5jbGlwKHRoaXNCb3gub3ZlcmZsb3dDbGlwUmVjdChyZWN0
LmxvY2F0aW9uKCksIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKSk7CiAgICAgICAg
IAogICAgICAgICAvLyBBZGp1c3QgdGhlIHBhaW50IHJlY3QgdG8gcmVmbGVjdCBhIHNjcm9sbGVk
IGNvbnRlbnQgYm94IHdpdGggYm9yZGVycyBhdCB0aGUgZW5kcy4KLSAgICAgICAgSW50U2l6ZSBv
ZmZzZXQgPSB0aGlzQm94LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKyAgICAgICAgSW50U2l6
ZSBvZmZzZXQgPSB0aGlzQm94LnNjcm9sbGVkQ29udGVudE9mZnNldCgpOwogICAgICAgICBzY3Jv
bGxlZFBhaW50UmVjdC5tb3ZlKC1vZmZzZXQpOwogICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5z
ZXRXaWR0aChiTGVmdCArIGxheWVyKCktPnNjcm9sbFdpZHRoKCkgKyBiUmlnaHQpOwogICAgICAg
ICBzY3JvbGxlZFBhaW50UmVjdC5zZXRIZWlnaHQoYm9yZGVyVG9wKCkgKyBsYXllcigpLT5zY3Jv
bGxIZWlnaHQoKSArIGJvcmRlckJvdHRvbSgpKTsKQEAgLTExMTAsNyArMTExMSw3IEBAIHZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KGNv
bnN0IFJlbmRlckxheWVyTW9kCiAgICAgICAgIC8vIGl0cyBtYXJnaW5zLiBTaW5jZSB0aG9zZSB3
ZXJlIGFkZGVkIGluIGFscmVhZHksIHdlIGhhdmUgdG8gZmFjdG9yIHRoZW0gb3V0IHdoZW4gY29t
cHV0aW5nCiAgICAgICAgIC8vIHRoZSBiYWNrZ3JvdW5kIHBvc2l0aW9uaW5nIGFyZWEuCiAgICAg
ICAgIGlmIChpc1Jvb3QoKSkgewotICAgICAgICAgICAgcG9zaXRpb25pbmdBcmVhU2l6ZSA9IHRv
UmVuZGVyQm94KHRoaXMpLT5zaXplKCkgLSBMYXlvdXRTaXplKGxlZnQgKyByaWdodCwgdG9wICsg
Ym90dG9tKTsKKyAgICAgICAgICAgIHBvc2l0aW9uaW5nQXJlYVNpemUgPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KCp0aGlzKS5zaXplKCkgLSBMYXlvdXRTaXplKGxlZnQgKyByaWdodCwgdG9wICsgYm90
dG9tKTsKICAgICAgICAgICAgIGlmICh2aWV3KCkuZnJhbWVWaWV3KCkuaGFzRXh0ZW5kZWRCYWNr
Z3JvdW5kUmVjdEZvclBhaW50aW5nKCkpIHsKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGV4
dGVuZGVkQmFja2dyb3VuZFJlY3QgPSB2aWV3KCkuZnJhbWVWaWV3KCkuZXh0ZW5kZWRCYWNrZ3Jv
dW5kUmVjdEZvclBhaW50aW5nKCk7CiAgICAgICAgICAgICAgICAgbGVmdCArPSAobWFyZ2luTGVm
dCgpIC0gZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdC54KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuY3BwCmluZGV4IDE4Njc0ZWFhZjU4MGQ2YzY0ZTkxYmZmOWQzNzgz
OGQyYmNkZjU3ZDIuLjRjYTBlMGJmN2YwOGYwODE5NDI0N2VmZDc4NjI4NzAzZWM2NjJhMDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKQEAgLTU4OSw3ICs1
ODksNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckVsZW1lbnQ6OnJlbW92ZUNoaWxkSW50ZXJuYWwo
UmVuZGVyT2JqZWN0JiBvbGRDaGlsZCwgTm90aWZ5QwogICAgIEFTU0VSVChvbGRDaGlsZC5wYXJl
bnQoKSA9PSB0aGlzKTsKIAogICAgIGlmIChvbGRDaGlsZC5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCi0gICAgICAgIHRvUmVuZGVyQm94KG9sZENoaWxkKS5yZW1vdmVGbG9hdGlu
Z09yUG9zaXRpb25lZENoaWxkRnJvbUJsb2NrTGlzdHMoKTsKKyAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyQm94PihvbGRDaGlsZCkucmVtb3ZlRmxvYXRpbmdPclBvc2l0aW9uZWRDaGlsZEZyb21CbG9j
a0xpc3RzKCk7CiAKICAgICAvLyBTbyB0aGF0IHdlJ2xsIGdldCB0aGUgYXBwcm9wcmlhdGUgZGly
dHkgYml0IHNldCAoZWl0aGVyIHRoYXQgYSBub3JtYWwgZmxvdyBjaGlsZCBnb3QgeWFua2VkIG9y
CiAgICAgLy8gdGhhdCBhIHBvc2l0aW9uZWQgY2hpbGQgZ290IHlhbmtlZCkuIFdlIGFsc28gcmVw
YWludCwgc28gdGhhdCB0aGUgYXJlYSBleHBvc2VkIHdoZW4gdGhlIGNoaWxkCkBAIC02MDQsMTAg
KzYwNCwxMCBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckVsZW1lbnQ6OnJlbW92ZUNoaWxkSW50ZXJu
YWwoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCwgTm90aWZ5QwogICAgIH0KIAogICAgIC8vIElmIHdl
IGhhdmUgYSBsaW5lIGJveCB3cmFwcGVyLCBkZWxldGUgaXQuCi0gICAgaWYgKG9sZENoaWxkLmlz
Qm94KCkpCi0gICAgICAgIHRvUmVuZGVyQm94KG9sZENoaWxkKS5kZWxldGVMaW5lQm94V3JhcHBl
cigpOwotICAgIGVsc2UgaWYgKG9sZENoaWxkLmlzTGluZUJyZWFrKCkpCi0gICAgICAgIHRvUmVu
ZGVyTGluZUJyZWFrKG9sZENoaWxkKS5kZWxldGVJbmxpbmVCb3hXcmFwcGVyKCk7CisgICAgaWYg
KGlzPFJlbmRlckJveD4ob2xkQ2hpbGQpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3g+KG9s
ZENoaWxkKS5kZWxldGVMaW5lQm94V3JhcHBlcigpOworICAgIGVsc2UgaWYgKGlzPFJlbmRlckxp
bmVCcmVhaz4ob2xkQ2hpbGQpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KG9s
ZENoaWxkKS5kZWxldGVJbmxpbmVCb3hXcmFwcGVyKCk7CiAKICAgICAvLyBJZiBvbGRDaGlsZCBp
cyB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIHRoZW4gY2xlYXIgdGhlIHNlbGVj
dGlvbiB0bwogICAgIC8vIGF2b2lkIHByb2JsZW1zIG9mIGludmFsaWQgcG9pbnRlcnMuCkBAIC04
MzcsMTEgKzgzNywxMSBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OnN0eWxlV2lsbENoYW5nZShTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ldwogICAgICAgICBpZiAoaXNG
bG9hdGluZygpICYmIChtX3N0eWxlLT5mbG9hdGluZygpICE9IG5ld1N0eWxlLmZsb2F0aW5nKCkp
KQogICAgICAgICAgICAgLy8gRm9yIGNoYW5nZXMgaW4gZmxvYXQgc3R5bGVzLCB3ZSBuZWVkIHRv
IGNvbmNlaXZhYmx5IHJlbW92ZSBvdXJzZWx2ZXMKICAgICAgICAgICAgIC8vIGZyb20gdGhlIGZs
b2F0aW5nIG9iamVjdHMgbGlzdC4KLSAgICAgICAgICAgIHRvUmVuZGVyQm94KHRoaXMpLT5yZW1v
dmVGbG9hdGluZ09yUG9zaXRpb25lZENoaWxkRnJvbUJsb2NrTGlzdHMoKTsKKyAgICAgICAgICAg
IGRvd25jYXN0PFJlbmRlckJveD4oKnRoaXMpLnJlbW92ZUZsb2F0aW5nT3JQb3NpdGlvbmVkQ2hp
bGRGcm9tQmxvY2tMaXN0cygpOwogICAgICAgICBlbHNlIGlmIChpc091dE9mRmxvd1Bvc2l0aW9u
ZWQoKSAmJiAobV9zdHlsZS0+cG9zaXRpb24oKSAhPSBuZXdTdHlsZS5wb3NpdGlvbigpKSkKICAg
ICAgICAgICAgIC8vIEZvciBjaGFuZ2VzIGluIHBvc2l0aW9uaW5nIHN0eWxlcywgd2UgbmVlZCB0
byBjb25jZWl2YWJseSByZW1vdmUgb3Vyc2VsdmVzCiAgICAgICAgICAgICAvLyBmcm9tIHRoZSBw
b3NpdGlvbmVkIG9iamVjdHMgbGlzdC4KLSAgICAgICAgICAgIHRvUmVuZGVyQm94KHRoaXMpLT5y
ZW1vdmVGbG9hdGluZ09yUG9zaXRpb25lZENoaWxkRnJvbUJsb2NrTGlzdHMoKTsKKyAgICAgICAg
ICAgIGRvd25jYXN0PFJlbmRlckJveD4oKnRoaXMpLnJlbW92ZUZsb2F0aW5nT3JQb3NpdGlvbmVk
Q2hpbGRGcm9tQmxvY2tMaXN0cygpOwogCiAgICAgICAgIHNfYWZmZWN0c1BhcmVudEJsb2NrID0g
aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpCiAgICAgICAgICAgICAmJiAoIW5ld1N0
eWxlLmlzRmxvYXRpbmcoKSAmJiAhbmV3U3R5bGUuaGFzT3V0T2ZGbG93UG9zaXRpb24oKSkKQEAg
LTEyNDAsOCArMTI0MCw4IEBAIGJvb2wgUmVuZGVyRWxlbWVudDo6cmVwYWludEFmdGVyTGF5b3V0
SWZOZWVkZWQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwCiAgICAgICAgIExheW91
dFVuaXQgc2hhZG93TGVmdDsKICAgICAgICAgTGF5b3V0VW5pdCBzaGFkb3dSaWdodDsKICAgICAg
ICAgc3R5bGUoKS5nZXRCb3hTaGFkb3dIb3Jpem9udGFsRXh0ZW50KHNoYWRvd0xlZnQsIHNoYWRv
d1JpZ2h0KTsKLSAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJSaWdodCA9IGlzQm94KCkgPyB0b1Jl
bmRlckJveCh0aGlzKS0+Ym9yZGVyUmlnaHQoKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKTsK
LSAgICAgICAgTGF5b3V0VW5pdCBib3hXaWR0aCA9IGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlz
KS0+d2lkdGgoKSA6IExheW91dFVuaXQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJSaWdo
dCA9IGlzPFJlbmRlckJveD4oKnRoaXMpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqdGhpcykuYm9y
ZGVyUmlnaHQoKSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKTsKKyAgICAgICAgTGF5b3V0VW5p
dCBib3hXaWR0aCA9IGlzPFJlbmRlckJveD4oKnRoaXMpID8gZG93bmNhc3Q8UmVuZGVyQm94Pigq
dGhpcykud2lkdGgoKSA6IExheW91dFVuaXQoKTsKICAgICAgICAgTGF5b3V0VW5pdCBtaW5JbnNl
dFJpZ2h0U2hhZG93RXh0ZW50ID0gc3RkOjptaW48TGF5b3V0VW5pdD4oLWluc2V0U2hhZG93RXh0
ZW50LnJpZ2h0KCksIHN0ZDo6bWluPExheW91dFVuaXQ+KG5ld0JvdW5kcy53aWR0aCgpLCBvbGRC
b3VuZHMud2lkdGgoKSkpOwogICAgICAgICBMYXlvdXRVbml0IGJvcmRlcldpZHRoID0gc3RkOjpt
YXg8TGF5b3V0VW5pdD4oYm9yZGVyUmlnaHQsIHN0ZDo6bWF4PExheW91dFVuaXQ+KHZhbHVlRm9y
TGVuZ3RoKHN0eWxlKCkuYm9yZGVyVG9wUmlnaHRSYWRpdXMoKS53aWR0aCgpLCBib3hXaWR0aCks
IHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS53aWR0aCgp
LCBib3hXaWR0aCkpKTsKICAgICAgICAgTGF5b3V0VW5pdCBkZWNvcmF0aW9uc1dpZHRoID0gc3Rk
OjptYXg8TGF5b3V0VW5pdD4oLW91dGxpbmVTdHlsZS5vdXRsaW5lT2Zmc2V0KCksIGJvcmRlcldp
ZHRoICsgbWluSW5zZXRSaWdodFNoYWRvd0V4dGVudCkgKyBzdGQ6Om1heDxMYXlvdXRVbml0Pihv
dXRsaW5lV2lkdGgsIHNoYWRvd1JpZ2h0KTsKQEAgLTEyNjAsOCArMTI2MCw4IEBAIGJvb2wgUmVu
ZGVyRWxlbWVudDo6cmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQoY29uc3QgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCogcmVwCiAgICAgICAgIExheW91dFVuaXQgc2hhZG93VG9wOwogICAgICAgICBM
YXlvdXRVbml0IHNoYWRvd0JvdHRvbTsKICAgICAgICAgc3R5bGUoKS5nZXRCb3hTaGFkb3dWZXJ0
aWNhbEV4dGVudChzaGFkb3dUb3AsIHNoYWRvd0JvdHRvbSk7Ci0gICAgICAgIExheW91dFVuaXQg
Ym9yZGVyQm90dG9tID0gaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT5ib3JkZXJCb3R0b20o
KSA6IExheW91dFVuaXQ6OmZyb21QaXhlbCgwKTsKLSAgICAgICAgTGF5b3V0VW5pdCBib3hIZWln
aHQgPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPmhlaWdodCgpIDogTGF5b3V0VW5pdCgp
OworICAgICAgICBMYXlvdXRVbml0IGJvcmRlckJvdHRvbSA9IGlzPFJlbmRlckJveD4oKnRoaXMp
ID8gZG93bmNhc3Q8UmVuZGVyQm94PigqdGhpcykuYm9yZGVyQm90dG9tKCkgOiBMYXlvdXRVbml0
Ojpmcm9tUGl4ZWwoMCk7CisgICAgICAgIExheW91dFVuaXQgYm94SGVpZ2h0ID0gaXM8UmVuZGVy
Qm94PigqdGhpcykgPyBkb3duY2FzdDxSZW5kZXJCb3g+KCp0aGlzKS5oZWlnaHQoKSA6IExheW91
dFVuaXQoKTsKICAgICAgICAgTGF5b3V0VW5pdCBtaW5JbnNldEJvdHRvbVNoYWRvd0V4dGVudCA9
IHN0ZDo6bWluPExheW91dFVuaXQ+KC1pbnNldFNoYWRvd0V4dGVudC5ib3R0b20oKSwgc3RkOjpt
aW48TGF5b3V0VW5pdD4obmV3Qm91bmRzLmhlaWdodCgpLCBvbGRCb3VuZHMuaGVpZ2h0KCkpKTsK
ICAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJIZWlnaHQgPSBzdGQ6Om1heDxMYXlvdXRVbml0Pihi
b3JkZXJCb3R0b20sIHN0ZDo6bWF4PExheW91dFVuaXQ+KHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCku
Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLmhlaWdodCgpLCBib3hIZWlnaHQpLAogICAgICAgICAg
ICAgdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLmhlaWdo
dCgpLCBib3hIZWlnaHQpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmNwcAppbmRleCBmYmQ0MGUzMjVlODM3OTllZDBmMTA0NmNiM2VhOGM1
MzMwMjY0NmIzLi41Y2E1MGFhMGJhOTEzMTQ2ZDk5YTc2ZTU2NzBiNmQ4Y2YxMGE4ZmE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAK
QEAgLTUxMSwxMiArNTExLDkgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6bGF5b3V0KCkK
ICAgICBpZiAoIWNoaWxkKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJCb3gqIGNoaWxk
Qm94ID0gdG9SZW5kZXJCb3goY2hpbGQpOworICAgIGF1dG8mIGNoaWxkQm94ID0gZG93bmNhc3Q8
UmVuZGVyQm94PigqY2hpbGQpOwogCi0gICAgaWYgKCFjaGlsZEJveCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG5ld1NpemUgPT0gb2xkU2l6ZSAmJiAhY2hpbGRCb3gtPm5lZWRzTGF5b3V0
KCkpCisgICAgaWYgKG5ld1NpemUgPT0gb2xkU2l6ZSAmJiAhY2hpbGRCb3gubmVlZHNMYXlvdXQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFdoZW4gY2FsbGluZyBsYXlvdXQoKSBv
biBhIGNoaWxkIG5vZGUsIGEgcGFyZW50IG11c3QgZWl0aGVyIHB1c2ggYSBMYXlvdXRTdGF0ZU1h
aW50YWludGVyLCBvcgpAQCAtNTI0LDExICs1MjEsMTEgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9i
amVjdDo6bGF5b3V0KCkKICAgICAvLyBhbmQgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgbWFu
eSB0aW1lcyBwZXIgc2Vjb25kIGR1cmluZyBwbGF5YmFjaywgdXNlIGEgTGF5b3V0U3RhdGVNYWlu
dGFpbmVyOgogICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksICp0
aGlzLCBsb2NhdGlvbk9mZnNldCgpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkg
fHwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKICAgICAKLSAgICBjaGls
ZEJveC0+c2V0TG9jYXRpb24oTGF5b3V0UG9pbnQoYm9yZGVyTGVmdCgpLCBib3JkZXJUb3AoKSkg
KyBMYXlvdXRTaXplKHBhZGRpbmdMZWZ0KCksIHBhZGRpbmdUb3AoKSkpOwotICAgIGNoaWxkQm94
LT5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAg
ICBjaGlsZEJveC0+c3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhl
ZCkpOwotICAgIGNoaWxkQm94LT5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwotICAgIGNo
aWxkQm94LT5sYXlvdXQoKTsKKyAgICBjaGlsZEJveC5zZXRMb2NhdGlvbihMYXlvdXRQb2ludChi
b3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKSArIExheW91dFNpemUocGFkZGluZ0xlZnQoKSwgcGFk
ZGluZ1RvcCgpKSk7CisgICAgY2hpbGRCb3guc3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKG5ld1Np
emUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgY2hpbGRCb3guc3R5bGUoKS5zZXRXaWR0aChMZW5n
dGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIGNoaWxkQm94LnNldE5lZWRzTGF5b3V0
KE1hcmtPbmx5VGhpcyk7CisgICAgY2hpbGRCb3gubGF5b3V0KCk7CiAgICAgY2xlYXJDaGlsZE5l
ZWRzTGF5b3V0KCk7CiAgICAgCiAgICAgc3RhdGVQdXNoZXIucG9wKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAppbmRleCAwNGZkNjQ3ZGM2OGQxOGQ4ODVh
MzJkNjM1N2VjMmJmMGM3ZmIxODViLi4yODFkM2FmODhjMWJkNDY4MTk2OGQzY2IzMzQzZTQ1MzBi
ZGZiOGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRz
ZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAK
QEAgLTEzMCw4ICsxMzAsOCBAQCBSZW5kZXJCb3gqIFJlbmRlckZpZWxkc2V0OjpmaW5kTGVnZW5k
KEZpbmRMZWdlbmRPcHRpb24gb3B0aW9uKSBjb25zdAogICAgICAgICBpZiAob3B0aW9uID09IEln
bm9yZUZsb2F0aW5nT3JPdXRPZkZsb3cgJiYgbGVnZW5kLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIGlm
IChsZWdlbmQtPm5vZGUoKSAmJiAobGVnZW5kLT5ub2RlKCktPmhhc1RhZ05hbWUobGVnZW5kVGFn
KSkpCi0gICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3gobGVnZW5kKTsKKyAgICAgICAgaWYg
KGlzPEhUTUxMZWdlbmRFbGVtZW50PihsZWdlbmQtPm5vZGUoKSkpCisgICAgICAgICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyQm94PihsZWdlbmQpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApp
bmRleCAwNzgxZDZjOWZkOWFiYjk1YzY5MGE4ZGU2NGMyNGZmOWQwNjgzYzA4Li5kMmIwMDgwYTk2
MmQxN2E5OTAzMDM3ZjgxZDQwMTY2Y2MwOGVlZWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCkBAIC00MzEsOCArNDMxLDggQEAgTGF5b3V0UG9p
bnQgUmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJl
bnQoY29uc3QgUmVuZGUKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gU2luY2Ugd2UncmUg
bG9va2luZyBmb3IgdGhlIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgYm9keSwgd2UgbXVzdCBhbHNv
CiAgICAgICAgICAgICAvLyB0YWtlIGludG8gY29uc2lkZXJhdGlvbiB0aGUgYm9yZGVycyBvZiB0
aGUgcmVnaW9uJ3Mgb2Zmc2V0UGFyZW50LgotICAgICAgICAgICAgaWYgKGN1cnJPZmZzZXRQYXJl
bnQtPmlzQm94KCkgJiYgIWN1cnJPZmZzZXRQYXJlbnQtPmlzQm9keSgpKQotICAgICAgICAgICAg
ICAgIHJlZmVyZW5jZVBvaW50Lm1vdmUodG9SZW5kZXJCb3goY3Vyck9mZnNldFBhcmVudCktPmJv
cmRlckxlZnQoKSwgdG9SZW5kZXJCb3goY3Vyck9mZnNldFBhcmVudCktPmJvcmRlclRvcCgpKTsK
KyAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpjdXJyT2Zmc2V0UGFyZW50KSAmJiAhY3Vy
ck9mZnNldFBhcmVudC0+aXNCb2R5KCkpCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlUG9pbnQu
bW92ZShkb3duY2FzdDxSZW5kZXJCb3g+KCpjdXJyT2Zmc2V0UGFyZW50KS5ib3JkZXJMZWZ0KCks
IGRvd25jYXN0PFJlbmRlckJveD4oKmN1cnJPZmZzZXRQYXJlbnQpLmJvcmRlclRvcCgpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY3Vyck9iamVjdCA9IGN1cnJPZmZzZXRQYXJlbnQ7CiAg
ICAgICAgIH0KQEAgLTQ1Myw5ICs0NTMsOSBAQCBMYXlvdXRQb2ludCBSZW5kZXJGbG93VGhyZWFk
OjphZGp1c3RlZFBvc2l0aW9uUmVsYXRpdmVUb09mZnNldFBhcmVudChjb25zdCBSZW5kZQogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAod2FzQ29tcHV0ZWRSZWxhdGl2ZVRvT3RoZXJS
ZWdpb24pIHsKLSAgICAgICAgICAgIGlmIChib3hNb2RlbE9iamVjdC5pc0JveCgpKSB7CisgICAg
ICAgICAgICBpZiAoaXM8UmVuZGVyQm94Pihib3hNb2RlbE9iamVjdCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBVc2UgYm9yZGVyQm94UmVjdEluUmVnaW9uIHRvIGFjY291bnQgZm9yIHZhcmlhdGlv
bnMgc3VjaCBhcyBwZXJjZW50YWdlIG1hcmdpbnMuCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVj
dCBib3JkZXJCb3hSZWN0ID0gdG9SZW5kZXJCb3goYm94TW9kZWxPYmplY3QpLmJvcmRlckJveFJl
Y3RJblJlZ2lvbihzdGFydFJlZ2lvbiwgUmVuZGVyQm94OjpEb05vdENhY2hlUmVuZGVyQm94UmVn
aW9uSW5mbyk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0ID0gZG93
bmNhc3Q8UmVuZGVyQm94Pihib3hNb2RlbE9iamVjdCkuYm9yZGVyQm94UmVjdEluUmVnaW9uKHN0
YXJ0UmVnaW9uLCBSZW5kZXJCb3g6OkRvTm90Q2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKTsKICAg
ICAgICAgICAgICAgICByZWZlcmVuY2VQb2ludC5tb3ZlKGJvcmRlckJveFJlY3QubG9jYXRpb24o
KS54KCksIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMTg3LDcgKzExODcs
NyBAQCBjb25zdCBSZW5kZXJCb3gqIFJlbmRlckZsb3dUaHJlYWQ6OmN1cnJlbnRBY3RpdmVSZW5k
ZXJCb3goKSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGNvbnN0IFJlbmRl
ck9iamVjdCogY3VycmVudE9iamVjdCA9IG1fYWN0aXZlT2JqZWN0c1N0YWNrLmxhc3QoKTsKLSAg
ICByZXR1cm4gY3VycmVudE9iamVjdC0+aXNCb3goKSA/IHRvUmVuZGVyQm94KGN1cnJlbnRPYmpl
Y3QpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaXM8UmVuZGVyQm94PigqY3VycmVudE9iamVjdCkg
PyBkb3duY2FzdDxSZW5kZXJCb3g+KGN1cnJlbnRPYmplY3QpIDogbnVsbHB0cjsKIH0KIAogdm9p
ZCBSZW5kZXJGbG93VGhyZWFkOjpwdXNoRmxvd1RocmVhZExheW91dFN0YXRlKGNvbnN0IFJlbmRl
ck9iamVjdCYgb2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsb3dUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmgKaW5kZXggNGM2ZDE4ZTMwYjE2ZmYxNDI4ZDQ1M2M3ZGFjMDI4NmU0YmM2YzU2Yy4uODRk
MDM1NmQ5YmQ0ZGFkMjc5YTg3NzZmNmIzMWZjZjM5MGE1ZWE4YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGbG93Q2hpbGRJbmZvKFJlbmRlck9iamVjdCopOwog
I2lmbmRlZiBOREVCVUcKLSAgICBib29sIGhhc0NoaWxkSW5mbyhSZW5kZXJPYmplY3QqIGNoaWxk
KSBjb25zdCB7IHJldHVybiBjaGlsZCAmJiBjaGlsZC0+aXNCb3goKSAmJiBtX3JlZ2lvblJhbmdl
TWFwLmNvbnRhaW5zKHRvUmVuZGVyQm94KGNoaWxkKSk7IH0KKyAgICBib29sIGhhc0NoaWxkSW5m
byhSZW5kZXJPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBpczxSZW5kZXJCb3g+KGNoaWxk
KSAmJiBtX3JlZ2lvblJhbmdlTWFwLmNvbnRhaW5zKGRvd25jYXN0PFJlbmRlckJveD4oY2hpbGQp
KTsgfQogI2VuZGlmCiAKICNpZiAhQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT05fRElT
QUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2Ny
ZWVuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcApp
bmRleCA3NDUxMjIxYzJjYzE1MGIwZDkyMjgzYjBmNjM5OTliZTE5NzM2MGUwLi5lMTE1ZjdmZGUz
MWVjMTFhMDUzYTcxMGRkYTg5Y2E5NmFmN2ViZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCkBAIC0xNjcsOCArMTY3LDggQEAgdm9pZCBSZW5k
ZXJGdWxsU2NyZWVuOjp1bndyYXBSZW5kZXJlcihib29sJiByZXF1aXJlc1JlbmRlclRyZWVSZWJ1
aWxkKQogICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBjbGVhciB0aGUgb3ZlcnJpZGUgc2l6ZSwg
YmVjYXVzZSBhcyBhIGZsZXhib3gsIHdlCiAgICAgICAgICAgICAvLyBtYXkgaGF2ZSBzZXQgb25l
IG9uIHRoZSBjaGlsZCwgYW5kIHdlIGRvbid0IHdhbnQgdG8gbGVhdmUgdGhhdAogICAgICAgICAg
ICAgLy8gbHlpbmcgYXJvdW5kIG9uIHRoZSBjaGlsZC4KLSAgICAgICAgICAgIGlmIChjaGlsZC0+
aXNCb3goKSkKLSAgICAgICAgICAgICAgICB0b1JlbmRlckJveChjaGlsZCktPmNsZWFyT3ZlcnJp
ZGVTaXplKCk7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQm94PigqY2hpbGQpKQorICAgICAg
ICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJveD4oKmNoaWxkKS5jbGVhck92ZXJyaWRlU2l6ZSgp
OwogICAgICAgICAgICAgY2hpbGQtPnJlbW92ZUZyb21QYXJlbnQoKTsKICAgICAgICAgICAgIHBh
cmVudCgpLT5hZGRDaGlsZChjaGlsZCwgdGhpcyk7CiAgICAgICAgICAgICBwYXJlbnQoKS0+c2V0
TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcAppbmRleCA3NWU0NmYyOGEyNTUwZGRmOGZjYjMyMWIyZTgzODc5OGQx
ZWUzMzc4Li5mYTU3NDI0ZWJmMjk0OTliNmFlZDk1OWE3MWUwYWVjOTQ3NjhlYTVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKQEAgLTY4NSw3ICs2ODUsNyBAQCB2
b2lkIFJlbmRlckltYWdlOjpsYXlvdXQoKQogCiB2b2lkIFJlbmRlckltYWdlOjpsYXlvdXRTaGFk
b3dDb250cm9scyhjb25zdCBMYXlvdXRTaXplJiBvbGRTaXplKQogewotICAgIFJlbmRlckJveCog
Y29udHJvbHNSZW5kZXJlciA9IHRvUmVuZGVyQm94KGZpcnN0Q2hpbGQoKSk7CisgICAgYXV0byog
Y29udHJvbHNSZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oZmlyc3RDaGlsZCgpKTsKICAg
ICBpZiAoIWNvbnRyb2xzUmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTcyNywx
MCArNzI3LDEwIEBAIHZvaWQgUmVuZGVySW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9y
bWF0aW9uKEZsb2F0U2l6ZSYgaW50cmluc2ljU2l6ZSwgZG91CiAgICAgLy8gT3VyIGludHJpbnNp
Y1NpemUgaXMgZW1wdHkgaWYgd2UncmUgcmVuZGVyaW5nIGdlbmVyYXRlZCBpbWFnZXMgd2l0aCBy
ZWxhdGl2ZSB3aWR0aC9oZWlnaHQuIEZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGludHJpbnNpYyBzaXpl
IHRvIHVzZS4KICAgICBpZiAoaW50cmluc2ljU2l6ZS5pc0VtcHR5KCkgJiYgKGltYWdlUmVzb3Vy
Y2UoKS5pbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSB8fCBpbWFnZVJlc291cmNlKCkuaW1hZ2VIYXNS
ZWxhdGl2ZUhlaWdodCgpKSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5pbmdCbG9j
ayA9IGlzT3V0T2ZGbG93UG9zaXRpb25lZCgpID8gY29udGFpbmVyKCkgOiB0aGlzLT5jb250YWlu
aW5nQmxvY2soKTsKLSAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aXNCb3goKSkgewotICAg
ICAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChjb250YWluaW5nQmxvY2spOwot
ICAgICAgICAgICAgaW50cmluc2ljU2l6ZS5zZXRXaWR0aChib3gtPmF2YWlsYWJsZUxvZ2ljYWxX
aWR0aCgpKTsKLSAgICAgICAgICAgIGludHJpbnNpY1NpemUuc2V0SGVpZ2h0KGJveC0+YXZhaWxh
YmxlTG9naWNhbEhlaWdodChJbmNsdWRlTWFyZ2luQm9yZGVyUGFkZGluZykpOworICAgICAgICBp
ZiAoaXM8UmVuZGVyQm94PigqY29udGFpbmluZ0Jsb2NrKSkgeworICAgICAgICAgICAgYXV0byYg
Ym94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgICAg
IGludHJpbnNpY1NpemUuc2V0V2lkdGgoYm94LmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpKTsKKyAg
ICAgICAgICAgIGludHJpbnNpY1NpemUuc2V0SGVpZ2h0KGJveC5hdmFpbGFibGVMb2dpY2FsSGVp
Z2h0KEluY2x1ZGVNYXJnaW5Cb3JkZXJQYWRkaW5nKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ly8gRG9uJ3QgY29tcHV0ZSBhbiBpbnRyaW5zaWMgcmF0aW8gdG8gcHJlc2VydmUgaGlzdG9yaWNh
bCBXZWJLaXQgYmVoYXZpb3IgaWYgd2UncmUgcGFpbnRpbmcgYWx0IHRleHQgYW5kL29yIGEgYnJv
a2VuIGltYWdlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRl
eCA2ZTQ0MGU3NDA2NjJlOTY3ODk5NjczNzhhZTAxZDU1ZTQzY2E1MGFjLi5lYmRhOTljMDgxMzFl
ZjlmNzY5ZjRhZDJhY2I2NGNkODdlYWRiYjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQnJl
YWsuaCIKKyNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCkBAIC02NjUsOSArNjY2LDkgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFic29sdXRl
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3UKICAg
ICBnZW5lcmF0ZUxpbmVCb3hSZWN0cyhjb250ZXh0KTsKIAogICAgIGlmIChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogY29udGludWF0aW9uID0gdGhpcy0+Y29udGludWF0aW9uKCkpIHsKLSAgICAgICAg
aWYgKGNvbnRpbnVhdGlvbi0+aXNCb3goKSkgewotICAgICAgICAgICAgUmVuZGVyQm94KiBib3gg
PSB0b1JlbmRlckJveChjb250aW51YXRpb24pOwotICAgICAgICAgICAgY29udGludWF0aW9uLT5h
YnNvbHV0ZVJlY3RzKHJlY3RzLCB0b0xheW91dFBvaW50KGFjY3VtdWxhdGVkT2Zmc2V0IC0gY29u
dGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkgKyBib3gtPmxvY2F0aW9uT2Zmc2V0KCkpKTsKKyAg
ICAgICAgaWYgKGlzPFJlbmRlckJveD4oKmNvbnRpbnVhdGlvbikpIHsKKyAgICAgICAgICAgIGF1
dG8mIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKmNvbnRpbnVhdGlvbik7CisgICAgICAgICAg
ICBjb250aW51YXRpb24tPmFic29sdXRlUmVjdHMocmVjdHMsIHRvTGF5b3V0UG9pbnQoYWNjdW11
bGF0ZWRPZmZzZXQgLSBjb250YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSArIGJveC5sb2NhdGlv
bk9mZnNldCgpKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY29udGludWF0aW9uLT5h
YnNvbHV0ZVJlY3RzKHJlY3RzLCB0b0xheW91dFBvaW50KGFjY3VtdWxhdGVkT2Zmc2V0IC0gY29u
dGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkpKTsKICAgICB9CkBAIC0xNDY4LDE0ICsxNDY5LDE0
IEBAIHZvaWQgUmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4m
IHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYKICAgICBnZW5lcmF0ZUxpbmVCb3hSZWN0cyhjb250
ZXh0KTsKIAogICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVt
ZW50PigqdGhpcykpIHsKLSAgICAgICAgaWYgKGNoaWxkLmlzTGlzdE1hcmtlcigpKQorICAgICAg
ICBpZiAoaXM8UmVuZGVyTGlzdE1hcmtlcj4oY2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIEZsb2F0UG9pbnQgcG9zKGFkZGl0aW9uYWxPZmZzZXQpOwogICAgICAgICAvLyBG
SVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KICAgICAg
ICAgaWYgKGNoaWxkLmhhc0xheWVyKCkpCiAgICAgICAgICAgICBwb3MgPSBjaGlsZC5sb2NhbFRv
Q29udGFpbmVyUG9pbnQoRmxvYXRQb2ludCgpLCBwYWludENvbnRhaW5lcik7Ci0gICAgICAgIGVs
c2UgaWYgKGNoaWxkLmlzQm94KCkpCi0gICAgICAgICAgICBwb3MubW92ZSh0b1JlbmRlckJveChj
aGlsZCkubG9jYXRpb25PZmZzZXQoKSk7CisgICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlckJveD4o
Y2hpbGQpKQorICAgICAgICAgICAgcG9zLm1vdmUoZG93bmNhc3Q8UmVuZGVyQm94PihjaGlsZCku
bG9jYXRpb25PZmZzZXQoKSk7CiAgICAgICAgIGNoaWxkLmFkZEZvY3VzUmluZ1JlY3RzKHJlY3Rz
LCBmbG9vcmVkSW50UG9pbnQocG9zKSwgcGFpbnRDb250YWluZXIpOwogICAgIH0KIApAQCAtMTQ4
Myw3ICsxNDg0LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JgogICAgICAgICBpZiAoY29udGlu
dWF0aW9uLT5pc0lubGluZSgpKQogICAgICAgICAgICAgY29udGludWF0aW9uLT5hZGRGb2N1c1Jp
bmdSZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBvaW50KExheW91dFBvaW50KGFkZGl0aW9uYWxP
ZmZzZXQgKyBjb250aW51YXRpb24tPmNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpIC0gY29u
dGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkpKSwgcGFpbnRDb250YWluZXIpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjb250aW51YXRpb24tPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBm
bG9vcmVkTGF5b3V0UG9pbnQoTGF5b3V0UG9pbnQoYWRkaXRpb25hbE9mZnNldCArIHRvUmVuZGVy
Qm94KGNvbnRpbnVhdGlvbiktPmxvY2F0aW9uKCkgLSBjb250YWluaW5nQmxvY2soKS0+bG9jYXRp
b24oKSkpLCBwYWludENvbnRhaW5lcik7CisgICAgICAgICAgICBjb250aW51YXRpb24tPmFkZEZv
Y3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkTGF5b3V0UG9pbnQoTGF5b3V0UG9pbnQoYWRkaXRp
b25hbE9mZnNldCArIGRvd25jYXN0PFJlbmRlckJveD4oKmNvbnRpbnVhdGlvbikubG9jYXRpb24o
KSAtIGNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpKSksIHBhaW50Q29udGFpbmVyKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDY2
MjRjNzk4NDcyMTAyYjI1ZDQ5YmI4NTc3YjdhMTU1ZDEwNDFmOWUuLjA4ZjdiNTQ3M2VhMGE3M2Zj
YTVjMmM0YzEyZTlmZGVlNWU3NTkyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcApAQCAtMTIxMywxOCArMTIxMywxOCBAQCBib29sIFJlbmRlckxheWVyOjp1cGRh
dGVMYXllclBvc2l0aW9uKCkKICAgICBpZiAoIXJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlv
bmVkKCkgJiYgcmVuZGVyZXIoKS5wYXJlbnQoKSkgewogICAgICAgICAvLyBXZSBtdXN0IGFkanVz
dCBvdXIgcG9zaXRpb24gYnkgd2Fsa2luZyB1cCB0aGUgcmVuZGVyIHRyZWUgbG9va2luZyBmb3Ig
dGhlCiAgICAgICAgIC8vIG5lYXJlc3QgZW5jbG9zaW5nIG9iamVjdCB3aXRoIGEgbGF5ZXIuCi0g
ICAgICAgIFJlbmRlckVsZW1lbnQqIGN1cnIgPSByZW5kZXJlcigpLnBhcmVudCgpOwotICAgICAg
ICB3aGlsZSAoY3VyciAmJiAhY3Vyci0+aGFzTGF5ZXIoKSkgewotICAgICAgICAgICAgaWYgKGN1
cnItPmlzQm94KCkgJiYgIWN1cnItPmlzVGFibGVSb3coKSkgeworICAgICAgICBSZW5kZXJFbGVt
ZW50KiBhbmNlc3RvciA9IHJlbmRlcmVyKCkucGFyZW50KCk7CisgICAgICAgIHdoaWxlIChhbmNl
c3RvciAmJiAhYW5jZXN0b3ItPmhhc0xheWVyKCkpIHsKKyAgICAgICAgICAgIGlmIChpczxSZW5k
ZXJCb3g+KCphbmNlc3RvcikgJiYgIWlzPFJlbmRlclRhYmxlUm93PigqYW5jZXN0b3IpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gUm93cyBhbmQgY2VsbHMgc2hhcmUgdGhlIHNhbWUgY29vcmRpbmF0
ZSBzcGFjZSAodGhhdCBvZiB0aGUgc2VjdGlvbikuCiAgICAgICAgICAgICAgICAgLy8gT21pdCB0
aGVtIHdoZW4gY29tcHV0aW5nIG91ciB4cG9zL3lwb3MuCi0gICAgICAgICAgICAgICAgbG9jYWxQ
b2ludCArPSB0b1JlbmRlckJveChjdXJyKS0+dG9wTGVmdExvY2F0aW9uT2Zmc2V0KCk7CisgICAg
ICAgICAgICAgICAgbG9jYWxQb2ludCArPSBkb3duY2FzdDxSZW5kZXJCb3g+KCphbmNlc3Rvciku
dG9wTGVmdExvY2F0aW9uT2Zmc2V0KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJy
ID0gY3Vyci0+cGFyZW50KCk7CisgICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJl
bnQoKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY3Vyci0+aXNCb3goKSAmJiBjdXJyLT5pc1Rh
YmxlUm93KCkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oKmFuY2VzdG9yKSAmJiBpczxS
ZW5kZXJUYWJsZVJvdz4oKmFuY2VzdG9yKSkgewogICAgICAgICAgICAgLy8gUHV0IG91cnNlbHZl
cyBpbnRvIHRoZSByb3cgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAgICAgICAgIGxvY2FsUG9pbnQg
LT0gdG9SZW5kZXJCb3goY3VyciktPnRvcExlZnRMb2NhdGlvbk9mZnNldCgpOworICAgICAgICAg
ICAgbG9jYWxQb2ludCAtPSBkb3duY2FzdDxSZW5kZXJCb3g+KCphbmNlc3RvcikudG9wTGVmdExv
Y2F0aW9uT2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0xMjM5LDcgKzEyMzks
NyBAQCBib29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKCkKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkg
JiYgcG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKS5pc0luRmxvd1Bvc2l0aW9uZWQoKSAmJiBp
czxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkpKSB7Ci0gICAgICAg
ICAgICBMYXlvdXRTaXplIG9mZnNldCA9IGRvd25jYXN0PFJlbmRlcklubGluZT4ocG9zaXRpb25l
ZFBhcmVudC0+cmVuZGVyZXIoKSkub2Zmc2V0Rm9ySW5GbG93UG9zaXRpb25lZElubGluZSgmdG9S
ZW5kZXJCb3gocmVuZGVyZXIoKSkpOworICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBk
b3duY2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkpLm9mZnNl
dEZvckluRmxvd1Bvc2l0aW9uZWRJbmxpbmUoJmRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIo
KSkpOwogICAgICAgICAgICAgbG9jYWxQb2ludCArPSBvZmZzZXQ7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKHBhcmVudCgpKSB7CkBAIC0xMjc3LDcgKzEyNzcsNyBAQCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBSZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVUcmFuc2Zvcm0oKSBjb25zdAogICAgICAg
ICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKIAogICAgIC8vIE1heWJlIGZldGNoIHRo
ZSBwZXJzcGVjdGl2ZSBmcm9tIHRoZSBiYWNraW5nPwotICAgIGNvbnN0IEludFJlY3QgYm9yZGVy
Qm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkucGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCgp
OworICAgIGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKS5waXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCk7CiAgICAgY29uc3QgZmxvYXQgYm94
V2lkdGggPSBib3JkZXJCb3gud2lkdGgoKTsKICAgICBjb25zdCBmbG9hdCBib3hIZWlnaHQgPSBi
b3JkZXJCb3guaGVpZ2h0KCk7CiAKQEAgLTEzMDIsNyArMTMwMiw3IEBAIEZsb2F0UG9pbnQgUmVu
ZGVyTGF5ZXI6OnBlcnNwZWN0aXZlT3JpZ2luKCkgY29uc3QKICAgICBpZiAoIXJlbmRlcmVyKCku
aGFzVHJhbnNmb3JtKCkpCiAgICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7CiAKLSAgICBjb25z
dCBMYXlvdXRSZWN0IGJvcmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmJvcmRlckJv
eFJlY3QoKTsKKyAgICBjb25zdCBMYXlvdXRSZWN0IGJvcmRlckJveCA9IGRvd25jYXN0PFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpOwogICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsKIAogICAgIHJldHVybiBGbG9hdFBvaW50KGZs
b2F0VmFsdWVGb3JMZW5ndGgoc3R5bGUucGVyc3BlY3RpdmVPcmlnaW5YKCksIGJvcmRlckJveC53
aWR0aCgpKSwKQEAgLTEzNDYsMTEgKzEzNDYsMTEgQEAgc3RhdGljIFJlbmRlckxheWVyKiBwYXJl
bnRMYXllckNyb3NzRnJhbWUoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQogCiAgICAgSFRNTEZy
YW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQgPSBsYXllci0+cmVuZGVyZXIoKS5kb2N1bWVu
dCgpLm93bmVyRWxlbWVudCgpOwogICAgIGlmICghb3duZXJFbGVtZW50KQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZW5kZXJFbGVtZW50KiBvd25l
clJlbmRlcmVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJlcigpOwogICAgIGlmICghb3duZXJSZW5k
ZXJlcikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
cmV0dXJuIG93bmVyUmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7CiB9CkBAIC0xMzU4LDExICsx
MzU4LDExIEBAIHN0YXRpYyBSZW5kZXJMYXllciogcGFyZW50TGF5ZXJDcm9zc0ZyYW1lKGNvbnN0
IFJlbmRlckxheWVyKiBsYXllcikKIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5n
U2Nyb2xsYWJsZUxheWVyKCkgY29uc3QKIHsKICAgICBmb3IgKFJlbmRlckxheWVyKiBuZXh0TGF5
ZXIgPSBwYXJlbnRMYXllckNyb3NzRnJhbWUodGhpcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0g
cGFyZW50TGF5ZXJDcm9zc0ZyYW1lKG5leHRMYXllcikpIHsKLSAgICAgICAgaWYgKG5leHRMYXll
ci0+cmVuZGVyZXIoKS5pc0JveCgpICYmIHRvUmVuZGVyQm94KG5leHRMYXllci0+cmVuZGVyZXIo
KSkuY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpCisgICAgICAgIGlmIChpczxS
ZW5kZXJCb3g+KG5leHRMYXllci0+cmVuZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94Pihu
ZXh0TGF5ZXItPnJlbmRlcmVyKCkpLmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgp
KQogICAgICAgICAgICAgcmV0dXJuIG5leHRMYXllcjsKICAgICB9CiAKLSAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogSW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsYWJs
ZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0CkBAIC0yNTMwLDcgKzI1MzAsNyBAQCB2b2lkIFJlbmRl
ckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91
dFNpemUmIG9sZE9mZgogICAgIC8vIEZJWE1FOiBUaGUgb25seSBjYXNlIHdoZXJlIHJlbmRlcmVy
LT5lbGVtZW50KCktPnJlbmRlcmVyKCkgIT0gcmVuZGVyZXIgaXMgd2l0aCBjb250aW51YXRpb25z
LiBEbyB0aGV5IG1hdHRlciBoZXJlPwogICAgIC8vIElmIHRoZXkgZG8gaXQgd291bGQgc3RpbGwg
YmUgYmV0dGVyIHRvIGRlYWwgd2l0aCB0aGVtIGV4cGxpY2l0bHkuCiAgICAgRWxlbWVudCogZWxl
bWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpOwotICAgIFJlbmRlckJveCogcmVuZGVyZXIgPSB0
b1JlbmRlckJveChlbGVtZW50LT5yZW5kZXJlcigpKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGRv
d25jYXN0PFJlbmRlckJveD4oZWxlbWVudC0+cmVuZGVyZXIoKSk7CiAKICAgICBEb2N1bWVudCYg
ZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQuZnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCkubW91c2VQcmVzc2VkKCkpCkBAIC0yOTc3LDEwICsyOTc3LDEwIEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pCiAKIGJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVyZmxvdygpIGNvbnN0
CiB7Ci0gICAgaWYgKCFyZW5kZXJlcigpLmlzQm94KCkpCisgICAgaWYgKCFpczxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gdG9SZW5k
ZXJCb3gocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7CisgICAgcmV0dXJuIGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7CiB9CiAKIHZvaWQgUmVu
ZGVyTGF5ZXI6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCkBA
IC0zODgwLDcgKzM4ODAsNyBAQCBzdGF0aWMgaW5saW5lIExheW91dFJlY3QgY29tcHV0ZVJlZmVy
ZW5jZUJveChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdAogICAgICAgICByZXR1
cm4gcm9vdFJlbGF0aXZlQm91bmRzOwogCiAgICAgTGF5b3V0UmVjdCByZWZlcmVuY2VCb3g7Ci0g
ICAgY29uc3QgUmVuZGVyQm94JiBib3ggPSB0b1JlbmRlckJveChyZW5kZXJlcik7CisgICAgY29u
c3QgYXV0byYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7CiAgICAgc3dpdGNo
IChjbGlwcGluZ1BhdGgucmVmZXJlbmNlQm94KCkpIHsKICAgICBjYXNlIENvbnRlbnRCb3g6CiAg
ICAgICAgIHJlZmVyZW5jZUJveCA9IGJveC5jb250ZW50Qm94UmVjdCgpOwpAQCAtNTMwMywxNCAr
NTMwMywxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMoY29uc3QgQ2xp
cFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgQwogICAgICAgICAgICAgb2Zmc2V0IC09
IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRp
b24oKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
KSB7Ci0gICAgICAgICAgICBDbGlwUmVjdCBuZXdPdmVyZmxvd0NsaXAgPSB0b1JlbmRlckJveChy
ZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMob2Zmc2V0LCBjdXJyZW50
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSk7CisgICAgICAgICAgICBDbGlwUmVjdCBuZXdPdmVyZmxvd0NsaXAg
PSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3RGb3JDaGls
ZExheWVycyhvZmZzZXQsIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpLCBjbGlwUmVj
dHNDb250ZXh0Lm92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5KTsKICAgICAgICAgICAgIG5l
d092ZXJmbG93Q2xpcC5zZXRIYXNSYWRpdXMocmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJh
ZGl1cygpKTsKICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRPdmVyZmxvd0NsaXBSZWN0KGludGVy
c2VjdGlvbihuZXdPdmVyZmxvd0NsaXAsIGNsaXBSZWN0cy5vdmVyZmxvd0NsaXBSZWN0KCkpKTsK
ICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLmlzUG9zaXRpb25lZCgpKQogICAgICAgICAgICAg
ICAgIGNsaXBSZWN0cy5zZXRQb3NDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3T3ZlcmZsb3dDbGlw
LCBjbGlwUmVjdHMucG9zQ2xpcFJlY3QoKSkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZW5k
ZXJlcigpLmhhc0NsaXAoKSkgewotICAgICAgICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlwID0g
dG9SZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3Qob2Zmc2V0LCBjdXJyZW50UmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQoKSk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSBk
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmNsaXBSZWN0KG9mZnNldCwgY3VycmVudFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNldFBvc0Ns
aXBSZWN0KGludGVyc2VjdGlvbihuZXdQb3NDbGlwLCBjbGlwUmVjdHMucG9zQ2xpcFJlY3QoKSkp
OwogICAgICAgICAgICAgY2xpcFJlY3RzLnNldE92ZXJmbG93Q2xpcFJlY3QoaW50ZXJzZWN0aW9u
KG5ld1Bvc0NsaXAsIGNsaXBSZWN0cy5vdmVyZmxvd0NsaXBSZWN0KCkpKTsKICAgICAgICAgICAg
IGNsaXBSZWN0cy5zZXRGaXhlZENsaXBSZWN0KGludGVyc2VjdGlvbihuZXdQb3NDbGlwLCBjbGlw
UmVjdHMuZml4ZWRDbGlwUmVjdCgpKSk7CkBAIC01NDI3LDE0ICs1NDI3LDE0IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0
c0NvbnRleHQsIGNvbnN0CiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcE9yT3ZlcmZsb3dDbGlw
KCkpIHsKICAgICAgICAgLy8gVGhpcyBsYXllciBlc3RhYmxpc2hlcyBhIGNsaXAgb2Ygc29tZSBr
aW5kLgogICAgICAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAodGhpcyAh
PSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RP
dmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkpIHsKLSAgICAgICAgICAgIGZvcmVn
cm91bmRSZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBS
ZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbVJvb3RMb2NhbCksIG5hbWVkRmxvd0ZyYWdtZW50
LCBjbGlwUmVjdHNDb250ZXh0Lm92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5KSk7CisgICAg
ICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbVJvb3RMb2Nh
bCksIG5hbWVkRmxvd0ZyYWdtZW50LCBjbGlwUmVjdHNDb250ZXh0Lm92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5KSk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhhc0Jv
cmRlclJhZGl1cygpKQogICAgICAgICAgICAgICAgIGZvcmVncm91bmRSZWN0LnNldEhhc1JhZGl1
cyh0cnVlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkg
ewogICAgICAgICAgICAgLy8gQ2xpcCBhcHBsaWVzIHRvICp1cyogYXMgd2VsbCwgc28gZ28gYWhl
YWQgYW5kIHVwZGF0ZSB0aGUgZGFtYWdlUmVjdC4KLSAgICAgICAgICAgIExheW91dFJlY3QgbmV3
UG9zQ2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNsaXBSZWN0KHRvTGF5b3V0UG9pbnQo
b2Zmc2V0RnJvbVJvb3RMb2NhbCksIG5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICAgICAgICAgIExh
eW91dFJlY3QgbmV3UG9zQ2xpcCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuY2xp
cFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRGcm9tUm9vdExvY2FsKSwgbmFtZWRGbG93RnJhZ21l
bnQpOwogICAgICAgICAgICAgYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0KG5ld1Bvc0NsaXApOwog
ICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KG5ld1Bvc0NsaXApOwogICAgICAg
ICAgICAgb3V0bGluZVJlY3QuaW50ZXJzZWN0KG5ld1Bvc0NsaXApOwpAQCAtNTUyMCw3ICs1NTIw
LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxDbGlwUmVjdChib29sJiBjbGlwRXhj
ZWVkc0JvdW5kcykgY29uc3QKIAogICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkgewogICAg
ICAgICAvLyBDU1MgY2xpcCBtYXkgYmUgbGFyZ2VyIHRoYW4gb3VyIGJvcmRlciBib3guCi0gICAg
ICAgIExheW91dFJlY3QgY3NzQ2xpcFJlY3QgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlw
UmVjdCh0b0xheW91dFBvaW50KG9mZnNldEZyb21Sb290KSwgY3VycmVudFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KCkpOworICAgICAgICBMYXlvdXRSZWN0IGNzc0NsaXBSZWN0ID0gZG93bmNhc3Q8
UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdCh0b0xheW91dFBvaW50KG9mZnNldEZyb21S
b290KSwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpOwogICAgICAgICBjbGlwRXhj
ZWVkc0JvdW5kcyA9ICFjbGlwUmVjdC5jb250YWlucyhjc3NDbGlwUmVjdCk7CiAgICAgfQogCkBA
IC01NTUxLDkgKzU1NTEsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rp
b25HYXBzKCkKICAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5k
czsKICAgICByZWN0Lm1vdmUoLXNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsKICAgICBpZiAocmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkK
LSAgICAgICAgcmVjdC5pbnRlcnNlY3QodG9SZW5kZXJCb3gocmVuZGVyZXIoKSkub3ZlcmZsb3dD
bGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBh
Y2NvdW50ZWQgZm9yLgorICAgICAgICByZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAv
LyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KICAgICBpZiAocmVuZGVyZXIoKS5o
YXNDbGlwKCkpCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkp
LmNsaXBSZWN0KExheW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90
IGFjY291bnRlZCBmb3IuCisgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIoKSkuY2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAvLyBGSVhN
RTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KICAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CiB9CkBAIC01NzA2LDgg
KzU3MDYsOCBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhj
b25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgYwogCiAgICAgTGF5b3V0UmVjdCBib3Vu
ZGluZ0JveFJlY3QgPSBsb2NhbEJvdW5kaW5nQm94KGZsYWdzKTsKIAotICAgIGlmIChyZW5kZXJl
cigpLmlzQm94KCkpCi0gICAgICAgIHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmZsaXBGb3JXcml0
aW5nTW9kZShib3VuZGluZ0JveFJlY3QpOworICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmZsaXBGb3JXcml0
aW5nTW9kZShib3VuZGluZ0JveFJlY3QpOwogICAgIGVsc2UKICAgICAgICAgcmVuZGVyZXIoKS5j
b250YWluaW5nQmxvY2soKS0+ZmxpcEZvcldyaXRpbmdNb2RlKGJvdW5kaW5nQm94UmVjdCk7CiAK
QEAgLTY2OTcsNyArNjY5Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmZpbHRlck5lZWRzUmVwYWlu
dCgpCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TmFtZWRGbG93VGhyZWFkSW5zaWRlUmVnaW9u
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIHJlZ2lv
biwgTGF5b3V0UmVjdCBwYWludERpcnR5UmVjdCwgTGF5b3V0UG9pbnQgcGFpbnRPZmZzZXQsIFBh
aW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCiB7
Ci0gICAgTGF5b3V0UmVjdCByZWdpb25Db250ZW50Qm94ID0gdG9SZW5kZXJCb3gocmVnaW9uLT5s
YXllck93bmVyKCkpLmNvbnRlbnRCb3hSZWN0KCk7CisgICAgTGF5b3V0UmVjdCByZWdpb25Db250
ZW50Qm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZWdpb24tPmxheWVyT3duZXIoKSkuY29udGVu
dEJveFJlY3QoKTsKICAgICBDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lciByZWdpb25NYWlu
dGFpbmVyKCpyZWdpb24pOwogICAgIHJlZ2lvbi0+c2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxl
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggMWE0MDlmMTI0
OWI5OTlkZjk3OGUwZjM5ZDNhZWY3MjJmZWZjOTdjMS4uOTY0MmQ4NDcwZDVhN2Y3MDRmOGI4OTNk
MGI3MDg1Y2I2N2Y2ODE4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgK
QEAgLTM0NCw3ICszNDQsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKIAog
ICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJlcjsgfQotICAgIFJlbmRlckJveCogcmVuZGVyQm94KCkgY29uc3QgeyByZXR1cm4gcmVu
ZGVyZXIoKS5pc0JveCgpID8gJnRvUmVuZGVyQm94KHJlbmRlcmVyKCkpIDogbnVsbHB0cjsgfQor
ICAgIFJlbmRlckJveCogcmVuZGVyQm94KCkgY29uc3QgeyByZXR1cm4gaXM8UmVuZGVyQm94Pihy
ZW5kZXJlcigpKSA/ICZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpIDogbnVsbHB0cjsg
fQogICAgIFJlbmRlckxheWVyKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQog
ICAgIFJlbmRlckxheWVyKiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByZXZp
b3VzOyB9CiAgICAgUmVuZGVyTGF5ZXIqIG5leHRTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9u
ZXh0OyB9CkBAIC05NjYsNyArOTY2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldEZpcnN0Q2hp
bGQoUmVuZGVyTGF5ZXIqIGZpcnN0KSB7IG1fZmlyc3QgPSBmaXJzdDsgfQogICAgIHZvaWQgc2V0
TGFzdENoaWxkKFJlbmRlckxheWVyKiBsYXN0KSB7IG1fbGFzdCA9IGxhc3Q7IH0KIAotICAgIExh
eW91dFBvaW50IHJlbmRlckJveExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5p
c0JveCgpID8gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkubG9jYXRpb24oKSA6IExheW91dFBvaW50
KCk7IH0KKyAgICBMYXlvdXRQb2ludCByZW5kZXJCb3hMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpLmxvY2F0aW9uKCkgOiBMYXlvdXRQb2ludCgpOyB9CiAKICAgICB2b2lkIGNvbGxlY3RMYXll
cnMoYm9vbCBpbmNsdWRlSGlkZGVuTGF5ZXJzLCBDb2xsZWN0TGF5ZXJzQmVoYXZpb3IsIHN0ZDo6
dW5pcXVlX3B0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPj4mLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9y
PFJlbmRlckxheWVyKj4+Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAKaW5kZXggOWE5NTUzZDFlMTUzYTU2Yjc4YWRiZWE1NmU4NGNiZDA4
MThlOWZlZC4uMDM0ZGJjZTIyZjEyNTk4N2IyYjdmNTEwNGM3ODVhY2NkNGU4Y2FkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTM1
Niw3ICszNTYsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlVHJhbnNmb3JtKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICAvLyBiYWtlZCBpbnRvIGl0LCBhbmQgd2UgZG9u
J3Qgd2FudCB0aGF0LgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHQ7CiAgICAgaWYgKG1fb3du
aW5nTGF5ZXIuaGFzVHJhbnNmb3JtKCkpIHsKLSAgICAgICAgUmVuZGVyQm94JiByZW5kZXJCb3gg
PSB0b1JlbmRlckJveChyZW5kZXJlcigpKTsKKyAgICAgICAgYXV0byYgcmVuZGVyQm94ID0gZG93
bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKICAgICAgICAgc3R5bGUuYXBwbHlUcmFuc2Zv
cm0odCwgc25hcFJlY3RUb0RldmljZVBpeGVscyhyZW5kZXJCb3guYm9yZGVyQm94UmVjdCgpLCBk
ZXZpY2VTY2FsZUZhY3RvcigpKSwgUmVuZGVyU3R5bGU6OkV4Y2x1ZGVUcmFuc2Zvcm1PcmlnaW4p
OwogICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZSh0LCBjb21wb3NpdG9yKCkuY2FuUmVuZGVy
M0RUcmFuc2Zvcm1zKCkpOwogICAgIH0KQEAgLTcyMCw3ICs3MjAsNyBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoKQogICAgICAgICAvLyBJZiB0aGUgY29tcG9zaXRp
bmcgYW5jZXN0b3IgaGFzIGEgbGF5ZXIgdG8gY2xpcCBjaGlsZHJlbiwgd2UgcGFyZW50IGluIHRo
YXQsIGFuZCB0aGVyZWZvcmUKICAgICAgICAgLy8gcG9zaXRpb24gcmVsYXRpdmUgdG8gaXQuCiAg
ICAgICAgIC8vIEZJWE1FOiBuZWVkIHRvIGRvIHNvbWUgcGl4ZWwgc25hcHBpbmcgaGVyZS4KLSAg
ICAgICAgTGF5b3V0UmVjdCBjbGlwcGluZ0JveCA9IGNsaXBCb3godG9SZW5kZXJCb3goY29tcEFu
Y2VzdG9yLT5yZW5kZXJlcigpKSk7CisgICAgICAgIExheW91dFJlY3QgY2xpcHBpbmdCb3ggPSBj
bGlwQm94KGRvd25jYXN0PFJlbmRlckJveD4oY29tcEFuY2VzdG9yLT5yZW5kZXJlcigpKSk7CiAg
ICAgICAgIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbiA9IGNsaXBwaW5nQm94LmxvY2F0aW9u
KCk7CiAgICAgfSBlbHNlIGlmIChjb21wQW5jZXN0b3IpCiAgICAgICAgIGdyYXBoaWNzTGF5ZXJQ
YXJlbnRMb2NhdGlvbiA9IGFuY2VzdG9yQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKTsKQEAg
LTcyOSwxMCArNzI5LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRy
eSgpCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgaWYgKGNvbXBBbmNlc3RvciAmJiBjb21wQW5j
ZXN0b3ItPmhhc1RvdWNoU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKLSAgICAgICAgUmVuZGVyQm94
KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveCgmY29tcEFuY2VzdG9yLT5yZW5kZXJlcigpKTsKLSAg
ICAgICAgTGF5b3V0UmVjdCBwYWRkaW5nQm94KHJlbmRlckJveC0+Ym9yZGVyTGVmdCgpLCByZW5k
ZXJCb3gtPmJvcmRlclRvcCgpLAotICAgICAgICAgICAgcmVuZGVyQm94LT53aWR0aCgpIC0gcmVu
ZGVyQm94LT5ib3JkZXJMZWZ0KCkgLSByZW5kZXJCb3gtPmJvcmRlclJpZ2h0KCksCi0gICAgICAg
ICAgICByZW5kZXJCb3gtPmhlaWdodCgpIC0gcmVuZGVyQm94LT5ib3JkZXJUb3AoKSAtIHJlbmRl
ckJveC0+Ym9yZGVyQm90dG9tKCkpOworICAgICAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2Fz
dDxSZW5kZXJCb3g+KGNvbXBBbmNlc3Rvci0+cmVuZGVyZXIoKSk7CisgICAgICAgIExheW91dFJl
Y3QgcGFkZGluZ0JveChyZW5kZXJCb3guYm9yZGVyTGVmdCgpLCByZW5kZXJCb3guYm9yZGVyVG9w
KCksCisgICAgICAgICAgICByZW5kZXJCb3gud2lkdGgoKSAtIHJlbmRlckJveC5ib3JkZXJMZWZ0
KCkgLSByZW5kZXJCb3guYm9yZGVyUmlnaHQoKSwKKyAgICAgICAgICAgIHJlbmRlckJveC5oZWln
aHQoKSAtIHJlbmRlckJveC5ib3JkZXJUb3AoKSAtIHJlbmRlckJveC5ib3JkZXJCb3R0b20oKSk7
CiAKICAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXQgPSBjb21wQW5jZXN0b3ItPnNjcm9sbGVk
Q29udGVudE9mZnNldCgpOwogICAgICAgICAvLyBGSVhNRTogcGl4ZWwgc25hcCB0aGUgcGFkZGlu
ZyBib3guCkBAIC03NDAsNyArNzQwLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZUdlb21ldHJ5KCkKICAgICB9CiAjZWxzZQogICAgIGlmIChjb21wQW5jZXN0b3IgJiYgY29tcEFu
Y2VzdG9yLT5uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICBSZW5kZXJCb3gm
IHJlbmRlckJveCA9IHRvUmVuZGVyQm94KGNvbXBBbmNlc3Rvci0+cmVuZGVyZXIoKSk7CisgICAg
ICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oY29tcEFuY2VzdG9yLT5y
ZW5kZXJlcigpKTsKICAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQgPSBjb21wQW5jZXN0
b3ItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOwogICAgICAgICBMYXlvdXRQb2ludCBzY3JvbGxP
cmlnaW4ocmVuZGVyQm94LmJvcmRlckxlZnQoKSwgcmVuZGVyQm94LmJvcmRlclRvcCgpKTsKICAg
ICAgICAgZ3JhcGhpY3NMYXllclBhcmVudExvY2F0aW9uID0gc2Nyb2xsT3JpZ2luIC0gc2Nyb2xs
T2Zmc2V0OwpAQCAtNzkzLDcgKzc5Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRh
dGVHZW9tZXRyeSgpCiAgICAgTGF5b3V0UmVjdCBjbGlwcGluZ0JveDsKICAgICBpZiAoR3JhcGhp
Y3NMYXllciogY2xpcExheWVyID0gY2xpcHBpbmdMYXllcigpKSB7CiAgICAgICAgIC8vIEZJWE1F
OiBuZWVkIHRvIGRvIHNvbWUgcGl4ZWwgc25hcHBpbmcgaGVyZS4KLSAgICAgICAgY2xpcHBpbmdC
b3ggPSBjbGlwQm94KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpKTsKKyAgICAgICAgY2xpcHBpbmdC
b3ggPSBjbGlwQm94KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwogICAgICAgICBj
bGlwTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2xpcHBpbmdCb3gubG9jYXRpb24oKSAt
IGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBjbGlwTGF5ZXIt
PnNldFNpemUoY2xpcHBpbmdCb3guc2l6ZSgpKTsKICAgICAgICAgY2xpcExheWVyLT5zZXRPZmZz
ZXRGcm9tUmVuZGVyZXIodG9GbG9hdFNpemUoY2xpcHBpbmdCb3gubG9jYXRpb24oKSkpOwpAQCAt
ODA3LDcgKzgwNyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSgp
CiAgICAgCiAgICAgaWYgKG1fb3duaW5nTGF5ZXIuaGFzVHJhbnNmb3JtKCkpIHsKICAgICAgICAg
Ly8gVXBkYXRlIHByb3BlcnRpZXMgdGhhdCBkZXBlbmQgb24gbGF5ZXIgZGltZW5zaW9ucy4KLSAg
ICAgICAgRmxvYXRQb2ludDNEIHRyYW5zZm9ybU9yaWdpbiA9IGNvbXB1dGVUcmFuc2Zvcm1Pcmln
aW5Gb3JQYWludGluZyh0b1JlbmRlckJveChyZW5kZXJlcigpKS5ib3JkZXJCb3hSZWN0KCkpOwor
ICAgICAgICBGbG9hdFBvaW50M0QgdHJhbnNmb3JtT3JpZ2luID0gY29tcHV0ZVRyYW5zZm9ybU9y
aWdpbkZvclBhaW50aW5nKGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuYm9yZGVyQm94
UmVjdCgpKTsKICAgICAgICAgLy8gR2V0IGxheW91dCBib3VuZHMgaW4gdGhlIGNvb3JkcyBvZiBj
b21wQW5jZXN0b3IgdG8gbWF0Y2ggcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy4KICAgICAgICAg
RmxvYXRQb2ludCBsYXllck9mZnNldCA9IHJvdW5kUG9pbnRUb0RldmljZVBpeGVscyhvZmZzZXRG
cm9tUGFyZW50LCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAgIC8vIENvbXB1dGUgdGhlIGFu
Y2hvciBwb2ludCwgd2hpY2ggaXMgaW4gdGhlIGNlbnRlciBvZiB0aGUgcmVuZGVyZXIgYm94IHVu
bGVzcyB0cmFuc2Zvcm0tb3JpZ2luIGlzIHNldC4KQEAgLTg4NCw3ICs4ODQsNyBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoKQogCiAgICAgaWYgKG1fc2Nyb2xsaW5n
TGF5ZXIpIHsKICAgICAgICAgQVNTRVJUKG1fc2Nyb2xsaW5nQ29udGVudHNMYXllcik7Ci0gICAg
ICAgIFJlbmRlckJveCYgcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSk7CisgICAg
ICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7CiAg
ICAgICAgIExheW91dFJlY3QgcGFkZGluZ0JveChyZW5kZXJCb3guYm9yZGVyTGVmdCgpLCByZW5k
ZXJCb3guYm9yZGVyVG9wKCksIHJlbmRlckJveC53aWR0aCgpIC0gcmVuZGVyQm94LmJvcmRlckxl
ZnQoKSAtIHJlbmRlckJveC5ib3JkZXJSaWdodCgpLCByZW5kZXJCb3guaGVpZ2h0KCkgLSByZW5k
ZXJCb3guYm9yZGVyVG9wKCkgLSByZW5kZXJCb3guYm9yZGVyQm90dG9tKCkpOwogICAgICAgICBM
YXlvdXRTaXplIHNjcm9sbE9mZnNldCA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0KCk7CiAK
QEAgLTEwODEsOCArMTA4MSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXNldENvbnRl
bnRzUmVjdCgpCiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1JlY3Qoc25hcHBlZElu
dFJlY3QoY29udGVudHNCb3goKSkpOwogICAgIAogICAgIExheW91dFJlY3QgY29udGVudHNDbGlw
cGluZ1JlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKCkuaXNCb3goKSkKLSAgICAgICAgY29udGVudHND
bGlwcGluZ1JlY3QgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS5jb250ZW50Qm94UmVjdCgpOwor
ICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQorICAgICAgICBjb250ZW50c0NsaXBw
aW5nUmVjdCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuY29udGVudEJveFJlY3Qo
KTsKIAogICAgIGNvbnRlbnRzQ2xpcHBpbmdSZWN0Lm1vdmUoY29udGVudE9mZnNldEluQ29tcG9z
dGluZ0xheWVyKCkpOwogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNDbGlwcGluZ1Jl
Y3Qoc25hcHBlZEludFJlY3QoY29udGVudHNDbGlwcGluZ1JlY3QpKTsKQEAgLTEyNDMsNyArMTI0
Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNM
YXllcnMoKQogICAgIGlmICghbV9vd25pbmdMYXllci5oYXNTY3JvbGxiYXJzKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gdG9SZW5kZXJCb3gocmVu
ZGVyZXIoKSkucGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCgpOworICAgIGNvbnN0IEludFJlY3Qg
Ym9yZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5waXhlbFNuYXBwZWRC
b3JkZXJCb3hSZWN0KCk7CiAKICAgICBGbG9hdFNpemUgb2Zmc2V0RnJvbVJlbmRlcmVyID0gbV9n
cmFwaGljc0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKICAgICBpZiAoR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewpAQCAtMTU5NCw3ICsx
NTk0LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZURpcmVjdGx5Q29tcG9zaXRl
ZEJhY2tncm91bmRJbWFnZShib29sIGlzU2ltcGxlQ28KICAgICBGbG9hdFNpemUgdGlsZVNpemU7
CiAKICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gc3R5bGUuYmFja2dyb3VuZExheWVycygpLT5p
bWFnZSgpLT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpOwotICAgIHRvUmVuZGVyQm94KHJlbmRlcmVy
KCkpLmdldEdlb21ldHJ5Rm9yQmFja2dyb3VuZEltYWdlKCZyZW5kZXJlcigpLCBkZXN0UmVjdCwg
cGhhc2UsIHRpbGVTaXplKTsKKyAgICBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmdl
dEdlb21ldHJ5Rm9yQmFja2dyb3VuZEltYWdlKCZyZW5kZXJlcigpLCBkZXN0UmVjdCwgcGhhc2Us
IHRpbGVTaXplKTsKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzVGlsZVNpemUodGls
ZVNpemUpOwogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUaWxlUGhhc2UocGhhc2Up
OwogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNSZWN0KGRlc3RSZWN0KTsKQEAgLTE5
MjEsNyArMTkyMSw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250ZW50c0Jv
eCgpIGNvbnN0CiAgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQogICAgICAgICBy
ZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgUmVuZGVyQm94JiByZW5kZXJCb3ggPSBkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOworICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7CiAgICAgTGF5b3V0UmVjdCBjb250ZW50c1JlY3Q7CiAj
aWYgRU5BQkxFKFZJREVPKQogICAgIGlmIChpczxSZW5kZXJWaWRlbz4ocmVuZGVyQm94KSkKQEAg
LTE5NTcsMTAgKzE5NTcsMTAgQEAgc3RhdGljIExheW91dFJlY3QgYmFja2dyb3VuZFJlY3RGb3JC
b3goY29uc3QgUmVuZGVyQm94JiBib3gpCiAKIEZsb2F0UmVjdCBSZW5kZXJMYXllckJhY2tpbmc6
OmJhY2tncm91bmRCb3hGb3JQYWludGluZygpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZW5kZXJlcigp
LmlzQm94KCkpCisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQogICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CiAKLSAgICBMYXlvdXRSZWN0IGJhY2tncm91bmRCb3ggPSBiYWNr
Z3JvdW5kUmVjdEZvckJveCh0b1JlbmRlckJveChyZW5kZXJlcigpKSk7CisgICAgTGF5b3V0UmVj
dCBiYWNrZ3JvdW5kQm94ID0gYmFja2dyb3VuZFJlY3RGb3JCb3goZG93bmNhc3Q8UmVuZGVyQm94
PihyZW5kZXJlcigpKSk7CiAgICAgYmFja2dyb3VuZEJveC5tb3ZlKGNvbnRlbnRPZmZzZXRJbkNv
bXBvc3RpbmdMYXllcigpKTsKICAgICByZXR1cm4gc25hcFJlY3RUb0RldmljZVBpeGVscyhiYWNr
Z3JvdW5kQm94LCBkZXZpY2VTY2FsZUZhY3RvcigpKTsKIH0KQEAgLTIzNTcsNyArMjM1Nyw3IEBA
IGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNl
dCwgY29uc3QgQW5pbWF0aW9uKiBhbmltCiAKICAgICBib29sIGRpZEFuaW1hdGUgPSBmYWxzZTsK
IAotICAgIGlmIChoYXNUcmFuc2Zvcm0gJiYgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24o
dHJhbnNmb3JtVmVjdG9yLCB0b1JlbmRlckJveChyZW5kZXJlcigpKS5waXhlbFNuYXBwZWRCb3Jk
ZXJCb3hSZWN0KCkuc2l6ZSgpLCBhbmltLCBrZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpLCB0aW1l
T2Zmc2V0KSkKKyAgICBpZiAoaGFzVHJhbnNmb3JtICYmIG1fZ3JhcGhpY3NMYXllci0+YWRkQW5p
bWF0aW9uKHRyYW5zZm9ybVZlY3RvciwgZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5w
aXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCkuc2l6ZSgpLCBhbmltLCBrZXlmcmFtZXMuYW5pbWF0
aW9uTmFtZSgpLCB0aW1lT2Zmc2V0KSkKICAgICAgICAgZGlkQW5pbWF0ZSA9IHRydWU7CiAKICAg
ICBpZiAoaGFzT3BhY2l0eSAmJiBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihvcGFjaXR5
VmVjdG9yLCBJbnRTaXplKCksIGFuaW0sIGtleWZyYW1lcy5hbmltYXRpb25OYW1lKCksIHRpbWVP
ZmZzZXQpKQpAQCAtMjQwNiw3ICsyNDA2LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnN0
YXJ0VHJhbnNpdGlvbihkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCBwcm9wZXIKICAg
ICAgICAgICAgIEtleWZyYW1lVmFsdWVMaXN0IHRyYW5zZm9ybVZlY3RvcihBbmltYXRlZFByb3Bl
cnR5V2Via2l0VHJhbnNmb3JtKTsKICAgICAgICAgICAgIHRyYW5zZm9ybVZlY3Rvci5pbnNlcnQo
VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWU6OmNyZWF0ZSgwLCBmcm9tU3R5bGUtPnRyYW5zZm9ybSgp
KSk7CiAgICAgICAgICAgICB0cmFuc2Zvcm1WZWN0b3IuaW5zZXJ0KFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlOjpjcmVhdGUoMSwgdG9TdHlsZS0+dHJhbnNmb3JtKCkpKTsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih0cmFuc2Zvcm1WZWN0b3IsIHRvUmVuZGVy
Qm94KHJlbmRlcmVyKCkpLnBpeGVsU25hcHBlZEJvcmRlckJveFJlY3QoKS5zaXplKCksIHRyYW5z
Zm9ybUFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKEFuaW1h
dGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pLCB0aW1lT2Zmc2V0KSkgeworICAgICAgICAgICAg
aWYgKG1fZ3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKHRyYW5zZm9ybVZlY3RvciwgZG93bmNh
c3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5waXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCkuc2l6
ZSgpLCB0cmFuc2Zvcm1BbmltLCBHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNp
dGlvbihBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKSwgdGltZU9mZnNldCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCB0cmFuc2Zvcm0gaXMg
dmlzaWJsZSB3aGVuIHRoZSBhbmltYXRpb24gZW5kcywgYWxzbyBzZXQgdGhlIGZpbmFsIHRyYW5z
Zm9ybS4KICAgICAgICAgICAgICAgICB1cGRhdGVUcmFuc2Zvcm0oKnRvU3R5bGUpOwogICAgICAg
ICAgICAgICAgIGRpZEFuaW1hdGUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKaW5kZXggYzg2ZmU4ZjY0M2UwMTc2NTM0MDhhNTdmYWNh
ZjBhODUzOGJiNDFmNS4uODZlYmMxN2NlNzg1OGRjMDI3MjEzNWNiMmUzNjQ5YTFhNDJiOTcyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCkBA
IC0xNDksMTEgKzE0OSwxMiBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpkaXJ0eUxpbmVCb3hl
cygpCiAgICAgICAgIGN1cnItPmRpcnR5TGluZUJveGVzKCk7CiB9CiAKKy8vIEZJWE1FOiBUaGlz
IHNob3VsZCB0YWtlIGEgUmVuZGVyQm94TW9kZWxPYmplY3QmLgogYm9vbCBSZW5kZXJMaW5lQm94
TGlzdDo6cmFuZ2VJbnRlcnNlY3RzUmVjdChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIs
IExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tLCBjb25zdCBM
YXlvdXRSZWN0JiByZWN0LCBjb25zdCBMYXlvdXRQb2ludCYgb2Zmc2V0KSBjb25zdAogewogICAg
IFJlbmRlckJveCogYmxvY2s7Ci0gICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpKQotICAgICAgICBi
bG9jayA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKKyAgICBpZiAoaXM8UmVuZGVyQm94PigqcmVu
ZGVyZXIpKQorICAgICAgICBibG9jayA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpOwog
ICAgIGVsc2UKICAgICAgICAgYmxvY2sgPSByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAg
ICAgTGF5b3V0VW5pdCBwaHlzaWNhbFN0YXJ0ID0gYmxvY2stPmZsaXBGb3JXcml0aW5nTW9kZShs
b2dpY2FsVG9wKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmluZGV4IGRhODkyYjA3NmYzZmViY2QxNzI0Nzc3YzBh
ZWU3Nzc1ZDgyY2Q5YzUuLjk1ZmZjNzhkNjA5ZGJhOWY3MWZiNzUwMTA1ZDU1YzYwZjU1MWM4NDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29u
dHJvbEVsZW1lbnRzLmNwcApAQCAtNDQsMTcgKzQ0LDE3IEBAIHZvaWQgUmVuZGVyTWVkaWFWb2x1
bWVTbGlkZXJDb250YWluZXI6OmxheW91dCgpCiB7CiAgICAgUmVuZGVyQmxvY2tGbG93OjpsYXlv
dXQoKTsKIAotICAgIGlmIChzdHlsZSgpLmRpc3BsYXkoKSA9PSBOT05FIHx8ICFuZXh0U2libGlu
ZygpIHx8ICFuZXh0U2libGluZygpLT5pc0JveCgpKQorICAgIGlmIChzdHlsZSgpLmRpc3BsYXko
KSA9PSBOT05FIHx8ICFpczxSZW5kZXJCb3g+KG5leHRTaWJsaW5nKCkpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBSZW5kZXJCb3gqIGJ1dHRvbkJveCA9IHRvUmVuZGVyQm94KG5leHRTaWJsaW5n
KCkpOwotICAgIGludCBhYnNvbHV0ZU9mZnNldFRvcCA9IGJ1dHRvbkJveC0+bG9jYWxUb0Fic29s
dXRlKEZsb2F0UG9pbnQoMCwgLXNpemUoKS5oZWlnaHQoKSkpLnkoKTsKKyAgICBSZW5kZXJCb3gm
IGJ1dHRvbkJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKm5leHRTaWJsaW5nKCkpOworICAgIGlu
dCBhYnNvbHV0ZU9mZnNldFRvcCA9IGJ1dHRvbkJveC5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2lu
dCgwLCAtc2l6ZSgpLmhlaWdodCgpKSkueSgpOwogCiAgICAgTGF5b3V0U3RhdGVEaXNhYmxlciBs
YXlvdXRTdGF0ZURpc2FibGVyKCZ2aWV3KCkpOwogCiAgICAgLy8gSWYgdGhlIHNsaWRlciB3b3Vs
ZCBiZSByZW5kZXJlZCBvdXRzaWRlIHRoZSBwYWdlLCBpdCBzaG91bGQgYmUgbW92ZWQgYmVsb3cg
dGhlIGNvbnRyb2xzLgogICAgIGlmIChVTkxJS0VMWShhYnNvbHV0ZU9mZnNldFRvcCA8IDApKQot
ICAgICAgICBzZXRZKGJ1dHRvbkJveC0+b2Zmc2V0VG9wKCkgKyB0aGVtZSgpLnZvbHVtZVNsaWRl
ck9mZnNldEZyb21NdXRlQnV0dG9uKGJ1dHRvbkJveCwgcGl4ZWxTbmFwcGVkU2l6ZSgpKS55KCkp
OworICAgICAgICBzZXRZKGJ1dHRvbkJveC5vZmZzZXRUb3AoKSArIHRoZW1lKCkudm9sdW1lU2xp
ZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oJmJ1dHRvbkJveCwgcGl4ZWxTbmFwcGVkU2l6ZSgpKS55
KCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3Bw
CmluZGV4IDU3ZjQxYjU5YzM0MTA5M2JiZGNjZDYxZjU5NjFkYThhYmIyZWMxNzQuLmQyMGNiMDNk
YWNkZmI4ODY2NjBhMWM4MjQzNmUyMDY5MWNmNDM2ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCkBAIC05
MCw5ICs5MCw5IEBAIFJlbmRlck11bHRpQ29sdW1uU2V0KiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dU
aHJlYWQ6Omxhc3RNdWx0aUNvbHVtblNldCgpIGNvbnN0CiBSZW5kZXJCb3gqIFJlbmRlck11bHRp
Q29sdW1uRmxvd1RocmVhZDo6Zmlyc3RDb2x1bW5TZXRPclNwYW5uZXIoKSBjb25zdAogewogICAg
IGlmIChSZW5kZXJPYmplY3QqIHNpYmxpbmcgPSBuZXh0U2libGluZygpKSB7Ci0gICAgICAgIEFT
U0VSVChzaWJsaW5nLT5pc0JveCgpKTsKLSAgICAgICAgQVNTRVJUKHNpYmxpbmctPmlzUmVuZGVy
TXVsdGlDb2x1bW5TZXQoKSB8fCBmaW5kQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKHRvUmVuZGVy
Qm94KHNpYmxpbmcpKSk7Ci0gICAgICAgIHJldHVybiB0b1JlbmRlckJveChzaWJsaW5nKTsKKyAg
ICAgICAgQVNTRVJUKGlzPFJlbmRlckJveD4oKnNpYmxpbmcpKTsKKyAgICAgICAgQVNTRVJUKGlz
PFJlbmRlck11bHRpQ29sdW1uU2V0Pigqc2libGluZykgfHwgZmluZENvbHVtblNwYW5uZXJQbGFj
ZWhvbGRlcihkb3duY2FzdDxSZW5kZXJCb3g+KHNpYmxpbmcpKSk7CisgICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJCb3g+KHNpYmxpbmcpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KQEAgLTEwMSwxMCArMTAxLDggQEAgUmVuZGVyQm94KiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dU
aHJlYWQ6Om5leHRDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YoY29uc3QgUmUKIHsKICAgICBp
ZiAoIWNoaWxkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoUmVuZGVyT2JqZWN0
KiBzaWJsaW5nID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgQVNTRVJUKHNpYmxp
bmctPmlzQm94KCkpOwotICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3goc2libGluZyk7Ci0gICAg
fQorICAgIGlmIChSZW5kZXJPYmplY3QqIHNpYmxpbmcgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4oc2libGluZyk7CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKQEAgLTExMywxMCArMTExLDkgQEAgUmVuZGVyQm94KiBSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQ6OnByZXZpb3VzQ29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKGNv
bnMKICAgICBpZiAoIWNoaWxkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoUmVu
ZGVyT2JqZWN0KiBzaWJsaW5nID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAg
IEFTU0VSVChzaWJsaW5nLT5pc0JveCgpKTsKLSAgICAgICAgaWYgKHNpYmxpbmctPmlzUmVuZGVy
Rmxvd1RocmVhZCgpKQorICAgICAgICBpZiAoaXM8UmVuZGVyRmxvd1RocmVhZD4oKnNpYmxpbmcp
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiB0b1JlbmRlckJv
eChzaWJsaW5nKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4oc2libGluZyk7
CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMjIyLDcgKzIxOSw3IEBAIHZvaWQg
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjp3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKQogCiBS
ZW5kZXJPYmplY3QqIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6cmVzb2x2ZU1vdmVkQ2hp
bGQoUmVuZGVyT2JqZWN0KiBjaGlsZCkgY29uc3QKIHsKLSAgICBpZiAoY2hpbGQtPnN0eWxlKCku
Y29sdW1uU3BhbigpICE9IENvbHVtblNwYW5BbGwgfHwgIWNoaWxkLT5pc0JveCgpKSB7CisgICAg
aWYgKGNoaWxkLT5zdHlsZSgpLmNvbHVtblNwYW4oKSAhPSBDb2x1bW5TcGFuQWxsIHx8ICFpczxS
ZW5kZXJCb3g+KCpjaGlsZCkpIHsKICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIHJlc29sdmUg
Zm9yIGNvbHVtbiBzcGFubmVycy4KICAgICAgICAgcmV0dXJuIGNoaWxkOwogICAgIH0KQEAgLTIz
Miw3ICsyMjksNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6
cmVzb2x2ZU1vdmVkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZAogICAgIC8vIGNyZWF0ZSBhbmQg
aW5zZXJ0IGEgcmVuZGVyZXIgZm9yIHRoZSBzaWJsaW5nIG5vZGUgaW1tZWRpYXRlbHkgcHJlY2Vk
aW5nIHRoZSBzcGFubmVyLCB3ZSBuZWVkCiAgICAgLy8gdG8gbWFwIHRoYXQgc3Bhbm5lciByZW5k
ZXJlciB0byB0aGUgc3Bhbm5lcidzIHBsYWNlaG9sZGVyLCB3aGljaCBpcyB3aGVyZSB0aGUgbmV3
IGluc2VydGVkCiAgICAgLy8gcmVuZGVyZXIgYmVsb25ncy4KLSAgICBpZiAoUmVuZGVyTXVsdGlD
b2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIHBsYWNlaG9sZGVyID0gZmluZENvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlcih0b1JlbmRlckJveChjaGlsZCkpKQorICAgIGlmIChSZW5kZXJNdWx0aUNvbHVt
blNwYW5uZXJQbGFjZWhvbGRlciogcGxhY2Vob2xkZXIgPSBmaW5kQ29sdW1uU3Bhbm5lclBsYWNl
aG9sZGVyKGRvd25jYXN0PFJlbmRlckJveD4oY2hpbGQpKSkKICAgICAgICAgcmV0dXJuIHBsYWNl
aG9sZGVyOwogCiAgICAgLy8gVGhpcyBpcyBhbiBpbnZhbGlkIHNwYW5uZXIsIG9yIGl0cyBwbGFj
ZWhvbGRlciBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldC4gVGhpcyBoYXBwZW5zIHdoZW4KQEAgLTI1
MywxMSArMjUwLDExIEBAIHN0YXRpYyBib29sIGlzVmFsaWRDb2x1bW5TcGFubmVyKFJlbmRlck11
bHRpQ29sdW1uRmxvd1RocmVhZCogZmxvd1RocmVhZCwgUmVuZGVyCiAgICAgCiAgICAgLy8gRmly
c3QgbWFrZSBzdXJlIHRoYXQgdGhlIHJlbmRlcmVyIGl0c2VsZiBoYXMgdGhlIHJpZ2h0IHByb3Bl
cnRpZXMgZm9yIGJlY29taW5nIGEgc3Bhbm5lci4KICAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBk
ZXNjZW5kYW50LT5zdHlsZSgpOwotICAgIGlmIChzdHlsZS5jb2x1bW5TcGFuKCkgIT0gQ29sdW1u
U3BhbkFsbCB8fCAhZGVzY2VuZGFudC0+aXNCb3goKSB8fCBkZXNjZW5kYW50LT5pc0Zsb2F0aW5n
T3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgaWYgKHN0eWxlLmNvbHVtblNwYW4oKSAhPSBD
b2x1bW5TcGFuQWxsIHx8ICFpczxSZW5kZXJCb3g+KCpkZXNjZW5kYW50KSB8fCBkZXNjZW5kYW50
LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIFJlbmRlckJsb2NrKiBjb250YWluZXIgPSBkZXNjZW5kYW50LT5jb250YWluaW5n
QmxvY2soKTsKLSAgICBpZiAoIWNvbnRhaW5lci0+aXNSZW5kZXJCbG9ja0Zsb3coKSB8fCBjb250
YWluZXItPmNoaWxkcmVuSW5saW5lKCkpIHsKKyAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4o
KmNvbnRhaW5lcikgfHwgY29udGFpbmVyLT5jaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8v
IE5lZWRzIHRvIGJlIGJsb2NrLWxldmVsLgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpA
QCAtMjY4LDcgKzI2NSw3IEBAIHN0YXRpYyBib29sIGlzVmFsaWRDb2x1bW5TcGFubmVyKFJlbmRl
ck11bHRpQ29sdW1uRmxvd1RocmVhZCogZmxvd1RocmVhZCwgUmVuZGVyCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIHNwYW5uZXIsIGJ1dCBpZiB3ZSdy
ZSBpbnNpZGUgc29tZXRoaW5nIHVuYnJlYWthYmxlLCBpdCdzIG5vdCB0byBiZSB0cmVhdGVkIGFz
IG9uZS4KLSAgICBmb3IgKFJlbmRlckJveCogYW5jZXN0b3IgPSB0b1JlbmRlckJveChkZXNjZW5k
YW50KS0+Y29udGFpbmluZ0Jsb2NrKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5j
b250YWluaW5nQmxvY2soKSkgeworICAgIGZvciAoUmVuZGVyQm94KiBhbmNlc3RvciA9IGRvd25j
YXN0PFJlbmRlckJveD4oKmRlc2NlbmRhbnQpLmNvbnRhaW5pbmdCbG9jaygpOyBhbmNlc3Rvcjsg
YW5jZXN0b3IgPSBhbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgaWYgKGFu
Y2VzdG9yLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkgewogICAgICAgICAgICAgLy8gRG9uJ3QgYWxs
b3cgYW55IGludGVydmVuaW5nIG5vbi1tdWx0aWNvbCBmcmFnbWVudGF0aW9uIGNvbnRleHRzLiBU
aGUgc3BlYyBkb2Vzbid0IHNheQogICAgICAgICAgICAgLy8gYW55dGhpbmcgYWJvdXQgZGlzYWxs
b3dpbmcgdGhpcywgYnV0IGl0J3MganVzdCBnb2luZyB0byBiZSB0b28gY29tcGxpY2F0ZWQgdG8K
QEAgLTQxMCw5ICs0MDcsOSBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Zmxv
d1RocmVhZERlc2NlbmRhbnRJbnNlcnRlZChSZW5kZXJPYmplY3QqIGRlcwogdm9pZCBSZW5kZXJN
dWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmhhbmRsZVNwYW5uZXJSZW1vdmFsKFJlbmRlck9iamVjdCog
c3Bhbm5lcikKIHsKICAgICAgLy8gVGhlIHBsYWNlaG9sZGVyIG1heSBhbHJlYWR5IGhhdmUgYmVl
biByZW1vdmVkLCBidXQgaWYgaXQgaGFzbid0LCBkbyBzbyBub3cuCi0gICAgaWYgKFJlbmRlck11
bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lck1hcC5n
ZXQodG9SZW5kZXJCb3goc3Bhbm5lcikpKSB7CisgICAgaWYgKFJlbmRlck11bHRpQ29sdW1uU3Bh
bm5lclBsYWNlaG9sZGVyKiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lck1hcC5nZXQoZG93bmNhc3Q8
UmVuZGVyQm94PihzcGFubmVyKSkpIHsKICAgICAgICAgcGxhY2Vob2xkZXItPnBhcmVudCgpLT5y
ZW1vdmVDaGlsZCgqcGxhY2Vob2xkZXIpOwotICAgICAgICBtX3NwYW5uZXJNYXAucmVtb3ZlKHRv
UmVuZGVyQm94KHNwYW5uZXIpKTsKKyAgICAgICAgbV9zcGFubmVyTWFwLnJlbW92ZShkb3duY2Fz
dDxSZW5kZXJCb3g+KHNwYW5uZXIpKTsKICAgICB9CiAKICAgICBpZiAoUmVuZGVyT2JqZWN0KiBu
ZXh0ID0gc3Bhbm5lci0+bmV4dFNpYmxpbmcoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAppbmRleCA2ZWE1NjIwZDg5ZGVjMTZm
Y2MwN2E0ZTc5ZmNlM2MwMjcxNTRhODhkLi41Y2JjZmZkNWNjZTZkMjE4ZWE0MWM0YjRjZjhlZTVj
OGQ4NjY5OGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLmNwcApAQCAtNjcyLDggKzY3Miw4IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93
VGhyZWFkOjpnZXRSYW5nZXMoVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiByYW5nZU9iamVjdHMsIGNv
bnN0CiAgICAgICAgICAgICAgICAgYm91bmRpbmdCb3ggPSBkb3duY2FzdDxSZW5kZXJUZXh0Pigq
cmVuZGVyZXIpLmxpbmVzQm91bmRpbmdCb3goKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGlzPFJl
bmRlckxpbmVCcmVhaz4oKnJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICBib3VuZGluZ0JveCA9
IGRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4oKnJlbmRlcmVyKS5saW5lc0JvdW5kaW5nQm94KCk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChyZW5kZXJlci0+aXNCb3goKSkgewotICAgICAgICAgICAg
ICAgIFJlbmRlckJveCYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIp
OworICAgICAgICAgICAgZWxzZSBpZiAoaXM8UmVuZGVyQm94PigqcmVuZGVyZXIpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVy
ZXIpOwogICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94ID0gcmVuZGVyQm94LmZyYW1lUmVjdCgp
OwogICAgICAgICAgICAgICAgIGlmIChyZW5kZXJCb3guaXNSZWxQb3NpdGlvbmVkKCkpCiAgICAg
ICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1vdmUocmVuZGVyQm94LnJlbGF0aXZlUG9zaXRp
b25Mb2dpY2FsT2Zmc2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAppbmRleCA2ZTBmZTVjNTkxMjU5MzViMjgwMzRlNzZmYTRmMGY3ZmI4NjE0YWRhLi44ODgw
ZGRlODRhYTk3N2M0MzY0MmJiYzQ3MDkxNzEyNzg4YjkwMmJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTM1NSwxNSArMTM1NSwxNCBAQCB2b2lkIFJl
bmRlck9iamVjdDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHJlcGFpbnRDbwogICAgIGlmIChyZXBhaW50Q29udGFpbmVyID09IHRoaXMpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvIG8gPSBwYXJlbnQoKSkgewotICAgICAgICBpZiAo
by0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCogYm94UGFyZW50
ID0gdG9SZW5kZXJCb3gobyk7Ci0gICAgICAgICAgICBib3hQYXJlbnQtPmFwcGx5Q2FjaGVkQ2xp
cEFuZFNjcm9sbE9mZnNldEZvclJlcGFpbnQocmVjdCk7CisgICAgaWYgKGF1dG8qIHBhcmVudCA9
IHRoaXMtPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChwYXJlbnQtPmhhc092ZXJmbG93Q2xpcCgp
KSB7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3g+KCpwYXJlbnQpLmFwcGx5Q2FjaGVk
Q2xpcEFuZFNjcm9sbE9mZnNldEZvclJlcGFpbnQocmVjdCk7CiAgICAgICAgICAgICBpZiAocmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgby0+Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHJlY3QsIGZpeGVk
KTsKKyAgICAgICAgcGFyZW50LT5jb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5l
ciwgcmVjdCwgZml4ZWQpOwogICAgIH0KIH0KIApAQCAtMTQwNywxMSArMTQwNiwxMCBAQCB2b2lk
IFJlbmRlck9iamVjdDo6c2hvd0xpbmVUcmVlRm9yVGhpcygpIGNvbnN0CiB2b2lkIFJlbmRlck9i
amVjdDo6c2hvd1JlZ2lvbnNJbmZvcm1hdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKFJlbmRlckZs
b3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpIHsKLSAg
ICAgICAgY29uc3QgUmVuZGVyQm94KiBib3ggPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcykg
OiBudWxscHRyOwotICAgICAgICBpZiAoYm94KSB7CisgICAgICAgIGlmIChpczxSZW5kZXJCb3g+
KCp0aGlzKSkgewogICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiA9IG51bGxw
dHI7CiAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIGVuZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICBmbG93VGhyZWFkLT5nZXRSZWdpb25SYW5nZUZvckJveChib3gsIHN0YXJ0UmVnaW9u
LCBlbmRSZWdpb24pOworICAgICAgICAgICAgZmxvd1RocmVhZC0+Z2V0UmVnaW9uUmFuZ2VGb3JC
b3goZG93bmNhc3Q8UmVuZGVyQm94Pih0aGlzKSwgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbik7CiAg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiBbUnM6JXAgUmU6JXBdIiwgc3RhcnRSZWdpb24s
IGVuZFJlZ2lvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTA5LDkgKzE1MDcsOSBAQCB2b2lk
IFJlbmRlck9iamVjdDo6c2hvd1JlbmRlck9iamVjdChib29sIG1hcmssIGludCBkZXB0aCkgY29u
c3QKICAgICBlbHNlCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpOwogCi0gICAgaWYgKGlzQm94KCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyQm94KiBi
b3ggPSB0b1JlbmRlckJveCh0aGlzKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICglLjJm
LCAlLjJmKSAoJS4yZiwgJS4yZikiLCBib3gtPngoKS50b0Zsb2F0KCksIGJveC0+eSgpLnRvRmxv
YXQoKSwgYm94LT53aWR0aCgpLnRvRmxvYXQoKSwgYm94LT5oZWlnaHQoKS50b0Zsb2F0KCkpOwor
ICAgIGlmIChpczxSZW5kZXJCb3g+KCp0aGlzKSkgeworICAgICAgICBjb25zdCBhdXRvJiBib3gg
PSBkb3duY2FzdDxSZW5kZXJCb3g+KCp0aGlzKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIg
ICglLjJmLCAlLjJmKSAoJS4yZiwgJS4yZikiLCBib3gueCgpLnRvRmxvYXQoKSwgYm94LnkoKS50
b0Zsb2F0KCksIGJveC53aWR0aCgpLnRvRmxvYXQoKSwgYm94LmhlaWdodCgpLnRvRmxvYXQoKSk7
CiAgICAgfQogCiAgICAgZnByaW50ZihzdGRlcnIsICIgcmVuZGVyZXItPiglcCkiLCB0aGlzKTsK
QEAgLTE3MTMsMzYgKzE3MTEsMzYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6Om1hcExvY2FsVG9Db250
YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnQKICAgICBpZiAo
cmVwYWludENvbnRhaW5lciA9PSB0aGlzKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG8g
PSBwYXJlbnQoKTsKLSAgICBpZiAoIW8pCisgICAgYXV0byogcGFyZW50ID0gdGhpcy0+cGFyZW50
KCk7CisgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiB0
aGlzIHNob3VsZCBjYWxsIG9mZnNldEZyb21Db250YWluZXIgdG8gc2hhcmUgY29kZSwgYnV0IEkn
bSBub3Qgc3VyZSBpdCdzIGV2ZXIgY2FsbGVkLgogICAgIExheW91dFBvaW50IGNlbnRlclBvaW50
KHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50KCkpOwotICAgIGlmIChtb2RlICYgQXBwbHlDb250
YWluZXJGbGlwICYmIG8tPmlzQm94KCkpIHsKLSAgICAgICAgaWYgKG8tPnN0eWxlKCkuaXNGbGlw
cGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUo
dG9SZW5kZXJCb3gobyktPmZsaXBGb3JXcml0aW5nTW9kZShMYXlvdXRQb2ludCh0cmFuc2Zvcm1T
dGF0ZS5tYXBwZWRQb2ludCgpKSkgLSBjZW50ZXJQb2ludCk7CisgICAgaWYgKG1vZGUgJiBBcHBs
eUNvbnRhaW5lckZsaXAgJiYgaXM8UmVuZGVyQm94PigqcGFyZW50KSkgeworICAgICAgICBpZiAo
cGFyZW50LT5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCisgICAgICAgICAg
ICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKGRvd25jYXN0PFJlbmRlckJveD4ocGFyZW50KS0+ZmxpcEZv
cldyaXRpbmdNb2RlKExheW91dFBvaW50KHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50KCkpKSAt
IGNlbnRlclBvaW50KTsKICAgICAgICAgbW9kZSAmPSB+QXBwbHlDb250YWluZXJGbGlwOwogICAg
IH0KIAotICAgIGlmIChvLT5pc0JveCgpKQotICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKC10
b1JlbmRlckJveChvKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOworICAgIGlmIChpczxSZW5k
ZXJCb3g+KCpwYXJlbnQpKQorICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKC1kb3duY2FzdDxS
ZW5kZXJCb3g+KCpwYXJlbnQpLnNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsKIAotICAgIG8tPm1h
cExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgdHJhbnNmb3JtU3RhdGUsIG1vZGUs
IHdhc0ZpeGVkKTsKKyAgICBwYXJlbnQtPm1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRh
aW5lciwgdHJhbnNmb3JtU3RhdGUsIG1vZGUsIHdhc0ZpeGVkKTsKIH0KIAogY29uc3QgUmVuZGVy
T2JqZWN0KiBSZW5kZXJPYmplY3Q6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmIGdl
b21ldHJ5TWFwKSBjb25zdAogewogICAgIEFTU0VSVF9VTlVTRUQoYW5jZXN0b3JUb1N0b3BBdCwg
YW5jZXN0b3JUb1N0b3BBdCAhPSB0aGlzKTsKIAotICAgIGF1dG8gY29udGFpbmVyID0gcGFyZW50
KCk7CisgICAgYXV0byogY29udGFpbmVyID0gcGFyZW50KCk7CiAgICAgaWYgKCFjb250YWluZXIp
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEZJ
WE1FOiB0aGlzIHNob3VsZCBjYWxsIG9mZnNldEZyb21Db250YWluZXIgdG8gc2hhcmUgY29kZSwg
YnV0IEknbSBub3Qgc3VyZSBpdCdzIGV2ZXIgY2FsbGVkLgogICAgIExheW91dFNpemUgb2Zmc2V0
OwotICAgIGlmIChjb250YWluZXItPmlzQm94KCkpCi0gICAgICAgIG9mZnNldCA9IC10b1JlbmRl
ckJveChjb250YWluZXIpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKyAgICBpZiAoaXM8UmVu
ZGVyQm94PigqY29udGFpbmVyKSkKKyAgICAgICAgb2Zmc2V0ID0gLWRvd25jYXN0PFJlbmRlckJv
eD4oKmNvbnRhaW5lcikuc2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAKICAgICBnZW9tZXRyeU1h
cC5wdXNoKHRoaXMsIG9mZnNldCwgZmFsc2UpOwogICAgIApAQCAtMTc1MSwxMSArMTc0OSwxMCBA
QCBjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5l
cihjb25zdCBSZW5kZXJMYXllck1vZGVsTwogCiB2b2lkIFJlbmRlck9iamVjdDo6bWFwQWJzb2x1
dGVUb0xvY2FsUG9pbnQoTWFwQ29vcmRpbmF0ZXNGbGFncyBtb2RlLCBUcmFuc2Zvcm1TdGF0ZSYg
dHJhbnNmb3JtU3RhdGUpIGNvbnN0CiB7Ci0gICAgYXV0byBvID0gcGFyZW50KCk7Ci0gICAgaWYg
KG8pIHsKLSAgICAgICAgby0+bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQobW9kZSwgdHJhbnNmb3Jt
U3RhdGUpOwotICAgICAgICBpZiAoby0+aXNCb3goKSkKLSAgICAgICAgICAgIHRyYW5zZm9ybVN0
YXRlLm1vdmUodG9SZW5kZXJCb3gobyktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsKKyAgICBp
ZiAoYXV0byogcGFyZW50ID0gdGhpcy0+cGFyZW50KCkpIHsKKyAgICAgICAgcGFyZW50LT5tYXBB
YnNvbHV0ZVRvTG9jYWxQb2ludChtb2RlLCB0cmFuc2Zvcm1TdGF0ZSk7CisgICAgICAgIGlmIChp
czxSZW5kZXJCb3g+KCpwYXJlbnQpKQorICAgICAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZShk
b3duY2FzdDxSZW5kZXJCb3g+KCpwYXJlbnQpLnNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsKICAg
ICB9CiB9CiAKQEAgLTIzMDMsMTkgKzIzMDAsMTYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmdldFRl
eHREZWNvcmF0aW9uQ29sb3JzKGludCBkZWNvcmF0aW9ucywgQ29sb3ImIHVuZGVybGluZSwgQ28K
IHZvaWQgUmVuZGVyT2JqZWN0OjphZGRBbm5vdGF0ZWRSZWdpb25zKFZlY3RvcjxBbm5vdGF0ZWRS
ZWdpb25WYWx1ZT4mIHJlZ2lvbnMpCiB7CiAgICAgLy8gQ29udmVydCB0aGUgc3R5bGUgcmVnaW9u
cyB0byBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICBpZiAoc3R5bGUoKS52aXNpYmlsaXR5KCkg
IT0gVklTSUJMRSB8fCAhaXNCb3goKSkKKyAgICBpZiAoc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSB8fCAhaXM8UmVuZGVyQm94PigqdGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KHRoaXMpOworICAgIGF1dG8mIGJveCA9
IGRvd25jYXN0PFJlbmRlckJveD4oKnRoaXMpOwogICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9j
YWxUb0Fic29sdXRlKCk7CiAKICAgICBjb25zdCBWZWN0b3I8U3R5bGVEYXNoYm9hcmRSZWdpb24+
JiBzdHlsZVJlZ2lvbnMgPSBzdHlsZSgpLmRhc2hib2FyZFJlZ2lvbnMoKTsKLSAgICB1bnNpZ25l
ZCBpLCBjb3VudCA9IHN0eWxlUmVnaW9ucy5zaXplKCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNv
dW50OyBpKyspIHsKLSAgICAgICAgU3R5bGVEYXNoYm9hcmRSZWdpb24gc3R5bGVSZWdpb24gPSBz
dHlsZVJlZ2lvbnNbaV07Ci0KLSAgICAgICAgTGF5b3V0VW5pdCB3ID0gYm94LT53aWR0aCgpOwot
ICAgICAgICBMYXlvdXRVbml0IGggPSBib3gtPmhlaWdodCgpOworICAgIGZvciAoY29uc3QgYXV0
byYgc3R5bGVSZWdpb24gOiBzdHlsZVJlZ2lvbnMpIHsKKyAgICAgICAgTGF5b3V0VW5pdCB3ID0g
Ym94LndpZHRoKCk7CisgICAgICAgIExheW91dFVuaXQgaCA9IGJveC5oZWlnaHQoKTsKIAogICAg
ICAgICBBbm5vdGF0ZWRSZWdpb25WYWx1ZSByZWdpb247CiAgICAgICAgIHJlZ2lvbi5sYWJlbCA9
IHN0eWxlUmVnaW9uLmxhYmVsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5j
cHAKaW5kZXggZjgyOTNhOWZlYjdkYWFlOGE2ZTUwYTBiMTBhOTU5NDNjMDliNDgxYy4uOTBlNDQ1
MGFhZjdlYjIyOTg1MzJlMDhiNDcwZDJjZjAzYmU5NmMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0xNDk0LDggKzE0OTQsOCBAQCBib29sIFJlbmRlclRh
YmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdQogICAgIC8vIENoZWNrIGtpZHMgZmlyc3QuCiAgICAgaWYgKCFoYXNPdmVyZmxv
d0NsaXAoKSB8fCBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVj
dChhZGp1c3RlZExvY2F0aW9uLCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkpKSB7
CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgIGlmIChjaGls
ZC0+aXNCb3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigp
ICYmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZC0+aXNUYWJsZUNhcHRpb24oKSkp
IHsKLSAgICAgICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRp
bmdNb2RlRm9yQ2hpbGQodG9SZW5kZXJCb3goY2hpbGQpLCBhZGp1c3RlZExvY2F0aW9uKTsKKyAg
ICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpjaGlsZCkgJiYgIWRvd25jYXN0PFJlbmRlckJv
eD4oKmNoaWxkKS5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIChjaGlsZC0+aXNUYWJsZVNlY3Rp
b24oKSB8fCBjaGlsZC0+aXNUYWJsZUNhcHRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICBMYXlv
dXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQoZG93bmNhc3Q8
UmVuZGVyQm94PihjaGlsZCksIGFkanVzdGVkTG9jYXRpb24pOwogICAgICAgICAgICAgICAgIGlm
IChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVy
LCBjaGlsZFBvaW50LCBhY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCB0b0xheW91dFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQo
KSAtIGNoaWxkUG9pbnQpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmNwcAppbmRleCA1MjcxOGRhM2IxNTA1NmU3M2M4MmM1YjcwNjViZDQ2YTU0OTkxY2FhLi40
MGI0YmZkMTQ1MDRiMGVhMzhmZjY3ZDliZThjY2RkMzhjZmI3ZDUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAK
QEAgLTEwNiwxNSArMTA2LDEzIEBAIFBhc3NSZWY8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250
cm9sTXVsdGlMaW5lOjpjcmVhdGVJbm5lclRleHRTdHlsZShjb25zdCBSZW5kCiBSZW5kZXJPYmpl
Y3QqIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGls
ZChib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBwbGFjZWhvbGRl
clJlbmRlcmVyID0gUmVuZGVyVGV4dENvbnRyb2w6OmxheW91dFNwZWNpYWxFeGNsdWRlZENoaWxk
KHJlbGF5b3V0Q2hpbGRyZW4pOwotICAgIGlmICghcGxhY2Vob2xkZXJSZW5kZXJlcikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFwbGFjZWhvbGRlclJlbmRlcmVyLT5pc0JveCgpKQotICAg
ICAgICByZXR1cm4gcGxhY2Vob2xkZXJSZW5kZXJlcjsKLSAgICBSZW5kZXJCb3gqIHBsYWNlaG9s
ZGVyQm94ID0gdG9SZW5kZXJCb3gocGxhY2Vob2xkZXJSZW5kZXJlcik7Ci0gICAgcGxhY2Vob2xk
ZXJCb3gtPnN0eWxlKCkuc2V0TG9naWNhbFdpZHRoKExlbmd0aChjb250ZW50TG9naWNhbFdpZHRo
KCkgLSBwbGFjZWhvbGRlckJveC0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpLCBGaXhl
ZCkpOwotICAgIHBsYWNlaG9sZGVyQm94LT5sYXlvdXRJZk5lZWRlZCgpOwotICAgIHBsYWNlaG9s
ZGVyQm94LT5zZXRYKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwotICAgIHBsYWNlaG9s
ZGVyQm94LT5zZXRZKGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKTsKKyAgICBpZiAoaXM8UmVu
ZGVyQm94PihwbGFjZWhvbGRlclJlbmRlcmVyKSkgeworICAgICAgICBhdXRvJiBwbGFjZWhvbGRl
ckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnBsYWNlaG9sZGVyUmVuZGVyZXIpOworICAgICAg
ICBwbGFjZWhvbGRlckJveC5zdHlsZSgpLnNldExvZ2ljYWxXaWR0aChMZW5ndGgoY29udGVudExv
Z2ljYWxXaWR0aCgpIC0gcGxhY2Vob2xkZXJCb3guYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0
aCgpLCBGaXhlZCkpOworICAgICAgICBwbGFjZWhvbGRlckJveC5sYXlvdXRJZk5lZWRlZCgpOwor
ICAgICAgICBwbGFjZWhvbGRlckJveC5zZXRYKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkp
OworICAgICAgICBwbGFjZWhvbGRlckJveC5zZXRZKGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgp
KTsKKyAgICB9CiAgICAgcmV0dXJuIHBsYWNlaG9sZGVyUmVuZGVyZXI7CiB9CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCA0ZmM2MGI5NjFmZDIxZmVj
YmE4NTJiYTQwOGEwZGE0OTMxZTkyOGM3Li45Njg0MTAzM2MyODRlMDZlMjEwZmVmNjAwZTViNWYz
ZWZhMjc2NmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAg
LTY0OCwxNSArNjQ4LDE1IEBAIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUluYWN0aXZlTGlz
dEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIHBsYXRmb3Jt
SW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKIH0KIAotaW50IFJlbmRlclRoZW1l
OjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKK2ludCBSZW5k
ZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBj
b25zdAogewotICAgIGlmICghby5pc0JveCgpKQorICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5k
ZXJlcikpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3QgUmVuZGVyQm94JiBib3ggPSAq
dG9SZW5kZXJCb3goJm8pOworICAgIGNvbnN0IGF1dG8mIGJveCA9IGRvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIpOwogCiAjaWYgVVNFKE5FV19USEVNRSkKLSAgICByZXR1cm4gYm94LmhlaWdo
dCgpICsgYm94Lm1hcmdpblRvcCgpICsgbV90aGVtZS0+YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1l
bnQoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgKiBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwor
ICAgIHJldHVybiBib3guaGVpZ2h0KCkgKyBib3gubWFyZ2luVG9wKCkgKyBtX3RoZW1lLT5iYXNl
bGluZVBvc2l0aW9uQWRqdXN0bWVudChyZW5kZXJlci5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgKiBy
ZW5kZXJlci5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKICNlbHNlCiAgICAgcmV0dXJuIGJveC5o
ZWlnaHQoKSArIGJveC5tYXJnaW5Ub3AoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKaW5kZXggNzcyNjI4ZDNjYTU5MGE2OTc2ZjJlNTQ3Mjk2
MzQ1ZTBlODM5ZWQzYS4uYzU5ODc1YTY1ZjM0N2M3MDk2NmQ5ODkyZmZhZDVhYjVjNmYzNWJjOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCkBAIC0zNzMs
MTkgKzM3MywxOCBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpjb250cm9sU3VwcG9ydHNUaW50cyhj
b25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiAgICAgcmV0dXJuIGlzRW5hYmxlZChvKTsKIH0K
IAotaW50IFJlbmRlclRoZW1lR3RrOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVj
dCYgbykgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewotICAgIGlmICghby5pc0JveCgpKQorICAg
IGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgc3RyYXRlZ3kgaXMgcG9zc2libHkgaW5jb3JyZWN0IGZvciB0aGUgR1RL
KyBwb3J0LgotICAgIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydAot
ICAgICAgICB8fCBvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkgewotICAgICAg
ICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KCZvKTsKLSAgICAgICAgcmV0dXJu
IGJveC0+bWFyZ2luVG9wKCkgKyBib3gtPmhlaWdodCgpIC0gMjsKKyAgICBpZiAocmVuZGVyZXIu
c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0IHx8IHJlbmRlcmVyLnN0eWxlKCku
YXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkgeworICAgICAgICBjb25zdCBhdXRvJiBib3ggPSBk
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGJveC5tYXJnaW5U
b3AoKSArIGJveC5oZWlnaHQoKSAtIDI7CiAgICAgfQogCi0gICAgcmV0dXJuIFJlbmRlclRoZW1l
OjpiYXNlbGluZVBvc2l0aW9uKG8pOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQ
b3NpdGlvbihyZW5kZXJlcik7CiB9CiAKIHN0YXRpYyBHdGtUZXh0RGlyZWN0aW9uIGd0a1RleHRE
aXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCkBAIC05OTAsMTMgKzk4OSwxMyBAQCBz
dGF0aWMgSW50UmVjdCBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50KGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZAogICAgIE5vZGUqIGlucHV0ID0gcmVuZGVyT2JqZWN0Lm5v
ZGUoKS0+c2hhZG93SG9zdCgpOwogICAgIGlmICghaW5wdXQpCiAgICAgICAgIGlucHV0ID0gcmVu
ZGVyT2JqZWN0Lm5vZGUoKTsKLSAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQor
ICAgIGlmICghaXM8UmVuZGVyQm94PigqaW5wdXQtPnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1
cm4gSW50UmVjdCgpOwogCiAgICAgLy8gSWYgcG9zc2libGUgY2VudGVyIHRoZSB5LWNvb3JkaW5h
dGUgb2YgdGhlIHJlY3QgdmVydGljYWxseSBpbiB0aGUgcGFyZW50IGlucHV0IGVsZW1lbnQuCiAg
ICAgLy8gV2UgYWxzbyBhZGQgb25lIHBpeGVsIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIHkgY29v
cmRpbmF0ZSBpcyByb3VuZGVkIHVwIGZvciBib3ggaGVpZ2h0cwogICAgIC8vIHRoYXQgYXJlIGV2
ZW4sIHdoaWNoIGxvb2tzIGluIHJlbGF0aW9uIHRvIHRoZSBib3ggdGV4dC4KLSAgICBJbnRSZWN0
IGlucHV0Q29udGVudEJveCA9IHRvUmVuZGVyQm94KGlucHV0LT5yZW5kZXJlcigpKS0+YWJzb2x1
dGVDb250ZW50Qm94KCk7CisgICAgSW50UmVjdCBpbnB1dENvbnRlbnRCb3ggPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KCppbnB1dC0+cmVuZGVyZXIoKSkuYWJzb2x1dGVDb250ZW50Qm94KCk7CiAKICAg
ICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHN0YXlzIHNxdWFyZSBhbmQgd2ls
bCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveC4KICAgICBpbnQgaWNvblNpemUgPSBzdGQ6Om1pbihp
bnB1dENvbnRlbnRCb3gud2lkdGgoKSwgc3RkOjptaW4oaW5wdXRDb250ZW50Qm94LmhlaWdodCgp
LCByZWN0LmhlaWdodCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJ
T1MubW0KaW5kZXggM2EwMzU3NGE3OWE5ZWJlYmRkNzVmYjA5NjJjYjk4ZDE3ZWEwYWFjMC4uYTdk
YmU4NTczMjlkMWM2NjdlMjdmMTRhYzkzZTc0Mzk1MzQzNDZlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtNDIyLDEwICs0MjIsMTAgQEAgYm9vbCBS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVj
dCYgYm94LCBjb25zdCBQYWkKIAogaW50IFJlbmRlclRoZW1lSU9TOjpiYXNlbGluZVBvc2l0aW9u
KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZW5kZXJl
ci5pc0JveCgpKQorICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcikpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgY29uc3QgUmVuZGVyQm94JiBib3ggPSAqdG9SZW5kZXJCb3goJnJlbmRl
cmVyKTsKKyAgICBjb25zdCBhdXRvJiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVy
KTsKIAogICAgIGlmIChib3guc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0IHx8
IGJveC5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpCiAgICAgICAgIHJldHVybiBi
b3gubWFyZ2luVG9wKCkgKyBib3guaGVpZ2h0KCkgLSAyOyAvLyBUaGUgYmFzZWxpbmUgaXMgMnB4
IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgY2hlY2tib3gvcmFkaW8gaW4gQXBwS2l0LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAKaW5kZXggY2E4
MzI0ZGNmNTdhZDBkNTc5OGU0NjdmZmQxNGM0NjUwZDczZTllMS4uZjNkYzVhNTE5ZTQ1ZGVlOGEy
MTZhMWJiMjZkODlmZTA1NjQ4ZjQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVTYWZhcmkuY3BwCkBAIC0zMTcsMTcgKzMxNywxNyBAQCBJbnRSZWN0IFJlbmRl
clRoZW1lU2FmYXJpOjppbmZsYXRlUmVjdChjb25zdCBJbnRSZWN0JiByLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBjbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWludCBSZW5kZXJUaGVtZVNhZmFy
aTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CitpbnQgUmVu
ZGVyVGhlbWVTYWZhcmk6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5k
ZXJlcikgY29uc3QKIHsKLSAgICBpZiAoIW8uaXNCb3goKSkKKyAgICBpZiAoIWlzPFJlbmRlckJv
eD4ocmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChvLnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09IENoZWNrYm94UGFydCB8fCBvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJh
ZGlvUGFydCkgewotICAgICAgICBjb25zdCBSZW5kZXJCb3gmIGJveCA9IHRvUmVuZGVyQm94KG8p
OworICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQg
fHwgcmVuZGVyZXIuc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KSB7CisgICAgICAg
IGNvbnN0IGF1dG8mIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpOwogICAgICAg
ICByZXR1cm4gYm94Lm1hcmdpblRvcCgpICsgYm94LmhlaWdodCgpIC0gMjsgLy8gVGhlIGJhc2Vs
aW5lIGlzIDJweCB1cCBmcm9tIHRoZSBib3R0b20gb2YgdGhlIGNoZWNrYm94L3JhZGlvIGluIEFw
cEtpdC4KICAgICB9CiAKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24o
byk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKHJlbmRlcmVyKTsK
IH0KIAogYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZVdpbi5jcHAKaW5kZXggYjdmMjU3YmY5MzBmZjJjYjAyNzc4MDQxNTdjODBmOGMwY2JkNGRl
Yi4uNDBjZTUyOTZmNDBlNTcyNTg3ODUzMWM5YzQ3OGRjN2QxOTkzZGExNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCkBAIC05MjMsMTIgKzkyMywxMCBA
QCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0
IFJlbmRlck9iamVjdCYgbywgY29uc3QgUAogewogICAgIEludFJlY3QgYm91bmRzID0gcjsKICAg
ICBBU1NFUlQoby5wYXJlbnQoKSk7Ci0gICAgaWYgKCFvLnBhcmVudCgpIHx8ICFvLnBhcmVudCgp
LT5pc0JveCgpKQorICAgIGlmICghaXM8UmVuZGVyQm94PihvLnBhcmVudCgpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9S
ZW5kZXJCb3goby5wYXJlbnQoKSk7CiAKLSAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJl
bmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CisgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBk
b3duY2FzdDxSZW5kZXJCb3g+KCpvLnBhcmVudCgpKS5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKICAg
ICAKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBidXR0b24gc3RheXMgc3F1YXJlIGFuZCB3
aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94CiAgICAgYm91bmRzLnNldEhlaWdodChtaW4ocGFy
ZW50Qm94LndpZHRoKCksIG1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkp
KTsKQEAgLTk3NCwxMSArOTcyLDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiBvCiB7CiAgICAg
SW50UmVjdCBib3VuZHMgPSByOwogICAgIEFTU0VSVChvLnBhcmVudCgpKTsKLSAgICBpZiAoIW8u
cGFyZW50KCkgfHwgIW8ucGFyZW50KCktPmlzQm94KCkpCisgICAgaWYgKCFpczxSZW5kZXJCb3g+
KG8ucGFyZW50KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgUmVuZGVyQm94
KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLnBhcmVudCgpKTsKLSAgICBJbnRSZWN0
IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CisgICAg
SW50UmVjdCBwYXJlbnRCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpvLnBhcmVudCgpKS5hYnNv
bHV0ZUNvbnRlbnRCb3goKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNv
cmF0aW9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveAogICAg
IGJvdW5kcy5zZXRIZWlnaHQobWluKHBhcmVudEJveC53aWR0aCgpLCBtaW4ocGFyZW50Qm94Lmhl
aWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7CkBAIC0xMDEwLDExICsxMDA3LDEwIEBAIGJvb2wg
UmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QKICAgICBBU1NFUlQoby5wYXJlbnQoKSk7CiAgICAgaWYgKCFvLnBh
cmVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFvLnBhcmVudCgpIHx8ICFv
LnBhcmVudCgpLT5pc0JveCgpKQorICAgIGlmICghaXM8UmVuZGVyQm94PihvLnBhcmVudCgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVy
Qm94ID0gdG9SZW5kZXJCb3goby5wYXJlbnQoKSk7Ci0gICAgSW50UmVjdCBwYXJlbnRCb3ggPSBw
YXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOworICAgIEludFJlY3QgcGFyZW50
Qm94ID0gZG93bmNhc3Q8UmVuZGVyQm94Pigqby5wYXJlbnQoKSkuYWJzb2x1dGVDb250ZW50Qm94
KCk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiB3aWxsIGZp
dCBpbiBpdHMgcGFyZW50J3MgYm94CiAgICAgYm91bmRzLnNldEhlaWdodChtaW4ocGFyZW50Qm94
LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBhNjRiZTYyZDBiYTU4NGQ4NGI0ZjM2MjhiMmY0
OWFlOWIzNDcwY2MyLi4yNGYwN2E0NzkyMWRiYzc0MzZjOGY2N2MxYmZiOTQxYThkNTg2OWM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC00
NDUsNyArNDQ1LDcgQEAgdm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLAogICAgIH0KICAgICAKICAgICBp
ZiAoYmVoYXZpb3IgJiBSZW5kZXJBc1RleHRTaG93T3ZlcmZsb3cgJiYgaXM8UmVuZGVyQm94Pihv
KSkgewotICAgICAgICBjb25zdCBSZW5kZXJCb3gmIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
byk7CisgICAgICAgIGNvbnN0IGF1dG8mIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4obyk7CiAg
ICAgICAgIGlmIChib3guaGFzUmVuZGVyT3ZlcmZsb3coKSkgewogICAgICAgICAgICAgTGF5b3V0
UmVjdCBsYXlvdXRPdmVyZmxvdyA9IGJveC5sYXlvdXRPdmVyZmxvd1JlY3QoKTsKICAgICAgICAg
ICAgIHRzIDw8ICIgKGxheW91dCBvdmVyZmxvdyAiIDw8IGxheW91dE92ZXJmbG93LngoKS50b0lu
dCgpIDw8ICIsIiA8PCBsYXlvdXRPdmVyZmxvdy55KCkudG9JbnQoKSA8PCAiICIgPDwgbGF5b3V0
T3ZlcmZsb3cud2lkdGgoKS50b0ludCgpIDw8ICJ4IiA8PCBsYXlvdXRPdmVyZmxvdy5oZWlnaHQo
KS50b0ludCgpIDw8ICIpIjsKQEAgLTg3NCwzMCArODc0LDMwIEBAIHN0YXRpYyBTdHJpbmcgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihSZW5kZXJCb3gqIHJlbmRlcmVyLCBSZW5kZXJBc1RleHRCZWhh
dmlvciBiCiAKIFN0cmluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9uKEZyYW1lKiBmcmFtZSwgUmVu
ZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5k
ZXJlci0+aXNCb3goKSkKKyAgICBSZW5kZXJWaWV3KiByZW5kZXJlciA9IGZyYW1lLT5jb250ZW50
UmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAKICAgICBQcmludENvbnRleHQgcHJpbnRDb250ZXh0KGZyYW1lKTsKICAgICBpZiAoYmVoYXZp
b3IgJiBSZW5kZXJBc1RleHRQcmludGluZ01vZGUpCi0gICAgICAgIHByaW50Q29udGV4dC5iZWdp
bih0b1JlbmRlckJveChyZW5kZXJlciktPndpZHRoKCkpOworICAgICAgICBwcmludENvbnRleHQu
YmVnaW4ocmVuZGVyZXItPndpZHRoKCkpOwogICAgIGlmICghKGJlaGF2aW9yICYgUmVuZGVyQXNU
ZXh0RG9udFVwZGF0ZUxheW91dCkpCiAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVM
YXlvdXQoKTsKIAotICAgIHJldHVybiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRvUmVuZGVyQm94
KHJlbmRlcmVyKSwgYmVoYXZpb3IpOworICAgIHJldHVybiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KHJlbmRlcmVyLCBiZWhhdmlvcik7CiB9CiAKIFN0cmluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQogewotICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOwotICAgIGlmICgh
cmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0JveCgpKQorICAgIFJlbmRlckVsZW1lbnQqIHJlbmRl
cmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVy
ZXIpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgLy8gRG9lc24ndCBzdXBwb3J0IHBy
aW50aW5nIG1vZGUuCiAgICAgQVNTRVJUKCEoYmVoYXZpb3IgJiBSZW5kZXJBc1RleHRQcmludGlu
Z01vZGUpKTsKICAgICBpZiAoIShiZWhhdmlvciAmIFJlbmRlckFzVGV4dERvbnRVcGRhdGVMYXlv
dXQpKQogICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwogICAgIAot
ICAgIHJldHVybiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRvUmVuZGVyQm94KHJlbmRlcmVyKSwg
YmVoYXZpb3IgfCBSZW5kZXJBc1RleHRTaG93QWxsTGF5ZXJzKTsKKyAgICByZXR1cm4gZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKSwgYmVoYXZpb3Ig
fCBSZW5kZXJBc1RleHRTaG93QWxsTGF5ZXJzKTsKIH0KIAogc3RhdGljIHZvaWQgd3JpdGVDb3Vu
dGVyVmFsdWVzRnJvbUNoaWxkcmVuKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgUmVuZGVyRWxl
bWVudCogcGFyZW50LCBib29sJiBpc0ZpcnN0Q291bnRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmNwcAppbmRleCAwMDE3NmJjNjBiMGMxMTAxYzI5NWUwMzU0NDk0MTVkMTAw
MmU4ZmU2Li43NjQyMjkxMGUzYjFlOWFjYzhmZGNlYmVjZDM5MjUwYWZiZWEzZmQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC01NjMsOSArNTYzLDkgQEAgdm9p
ZCBSZW5kZXJWaWV3OjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYpCiAgICAgYm9vbCByb290RmlsbHNWaWV3cG9ydCA9IGZhbHNlOwog
ICAgIGJvb2wgcm9vdE9ic2N1cmVzQmFja2dyb3VuZCA9IGZhbHNlOwogICAgIEVsZW1lbnQqIGRv
Y3VtZW50RWxlbWVudCA9IGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgaWYgKFJl
bmRlckVsZW1lbnQqIHJvb3RSZW5kZXJlciA9IGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxl
bWVudC0+cmVuZGVyZXIoKSA6IDApIHsKKyAgICBpZiAoUmVuZGVyRWxlbWVudCogcm9vdFJlbmRl
cmVyID0gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50LT5yZW5kZXJlcigpIDogbnVs
bHB0cikgewogICAgICAgICAvLyBUaGUgZG9jdW1lbnQgZWxlbWVudCdzIHJlbmRlcmVyIGlzIGN1
cnJlbnRseSBmb3JjZWQgdG8gYmUgYSBibG9jaywgYnV0IG1heSBub3QgYWx3YXlzIGJlLgotICAg
ICAgICBSZW5kZXJCb3gqIHJvb3RCb3ggPSByb290UmVuZGVyZXItPmlzQm94KCkgPyB0b1JlbmRl
ckJveChyb290UmVuZGVyZXIpIDogMDsKKyAgICAgICAgUmVuZGVyQm94KiByb290Qm94ID0gaXM8
UmVuZGVyQm94Pigqcm9vdFJlbmRlcmVyKSA/IGRvd25jYXN0PFJlbmRlckJveD4ocm9vdFJlbmRl
cmVyKSA6IG51bGxwdHI7CiAgICAgICAgIHJvb3RGaWxsc1ZpZXdwb3J0ID0gcm9vdEJveCAmJiAh
cm9vdEJveC0+eCgpICYmICFyb290Qm94LT55KCkgJiYgcm9vdEJveC0+d2lkdGgoKSA+PSB3aWR0
aCgpICYmIHJvb3RCb3gtPmhlaWdodCgpID49IGhlaWdodCgpOwogICAgICAgICByb290T2JzY3Vy
ZXNCYWNrZ3JvdW5kID0gcmVuZGVyZXJPYnNjdXJlc0JhY2tncm91bmQocm9vdFJlbmRlcmVyKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKaW5kZXgg
MWNlMjQ4NTRjMTIyODVkNjRhYjAwMzc5Y2U1ZWQ4Yjk0MWRiNDBkMy4uZDVmNzczNzAxNTNjMWFj
YmQ1MmJjOGE2NjIxMTE5NjFhZmNiNjcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCisjaW5j
bHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUg
IlZlcnRpY2FsUG9zaXRpb25DYWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgpAQCAtNzQwLDcgKzc0MSw3IEBAIHZvaWQgUm9vdElubGluZUJveDo6c2V0TGluZUJyZWFrSW5m
byhSZW5kZXJPYmplY3QqIG9iaiwgdW5zaWduZWQgYnJlYWtQb3MsIGNvbnN0CiAgICAgLy8gVGhp
cyBoYXMgc2VjdXJpdHkgaW1wbGljYXRpb25zIGJlY2F1c2UgaWYgdGhlIFJlbmRlck9iamVjdCBk
b2VzIG5vdAogICAgIC8vIHBvaW50IHRvIGF0IGxlYXN0IG9uZSBsaW5lIGJveCwgdGhlbiB0aGF0
IFJlbmRlcklubGluZSBjYW4gYmUgZGVsZXRlZAogICAgIC8vIGxhdGVyIHdpdGhvdXQgcmVzZXR0
aW5nIHRoZSBsaW5lQnJlYWtPYmosIGxlYWRpbmcgdG8gdXNlLWFmdGVyLWZyZWUuCi0gICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW9iaiB8fCBvYmotPmlzVGV4dCgpIHx8ICEo
b2JqLT5pc1JlbmRlcklubGluZSgpICYmIG9iai0+aXNCb3goKSAmJiAhdG9SZW5kZXJCb3gob2Jq
KS0+aW5saW5lQm94V3JhcHBlcigpKSk7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oIW9iaiB8fCBpczxSZW5kZXJUZXh0Pigqb2JqKSB8fCAhKGlzPFJlbmRlcklubGluZT4o
Km9iaikgJiYgaXM8UmVuZGVyQm94Pigqb2JqKSAmJiAhZG93bmNhc3Q8UmVuZGVyQm94Pigqb2Jq
KS5pbmxpbmVCb3hXcmFwcGVyKCkpKTsKIAogICAgIG1fbGluZUJyZWFrT2JqID0gb2JqOwogICAg
IG1fbGluZUJyZWFrUG9zID0gYnJlYWtQb3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgKaW5kZXgg
MDllODBhMzVhZDMwODA3ZTI2ZTM5MDA5NGE4NGZlZTUyZTgxMmQ5ZC4uYjY0Yzc2NDRjNjk4MjAy
OTYyMWUwODQzZDRiZTgxNGYxMjc0MzkzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaApAQCAt
MzA4LDMzICszMDgsMzMgQEAgaW5saW5lIHZvaWQgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVPdXRP
ZkZsb3dQb3NpdGlvbmVkKFZlY3RvcjxSZW5kZXJCb3gqPiYgcG9zaXQKIHsKICAgICAvLyBJZiBv
dXIgb3JpZ2luYWwgZGlzcGxheSB3YXNuJ3QgYW4gaW5saW5lIHR5cGUsIHRoZW4gd2UgY2FuCiAg
ICAgLy8gZ28gYWhlYWQgYW5kIGRldGVybWluZSBvdXIgc3RhdGljIGlubGluZSBwb3NpdGlvbiBu
b3cuCi0gICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChtX2N1cnJlbnQucmVuZGVyZXIo
KSk7Ci0gICAgYm9vbCBpc0lubGluZVR5cGUgPSBib3gtPnN0eWxlKCkuaXNPcmlnaW5hbERpc3Bs
YXlJbmxpbmVUeXBlKCk7CisgICAgYXV0byYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqbV9j
dXJyZW50LnJlbmRlcmVyKCkpOworICAgIGJvb2wgaXNJbmxpbmVUeXBlID0gYm94LnN0eWxlKCku
aXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCk7CiAgICAgaWYgKCFpc0lubGluZVR5cGUpCi0g
ICAgICAgIG1fYmxvY2suc2V0U3RhdGljSW5saW5lUG9zaXRpb25Gb3JDaGlsZCgqYm94LCBtX2Js
b2NrLmxvZ2ljYWxIZWlnaHQoKSwgbV9ibG9jay5zdGFydE9mZnNldEZvckNvbnRlbnQobV9ibG9j
ay5sb2dpY2FsSGVpZ2h0KCkpKTsKKyAgICAgICAgbV9ibG9jay5zZXRTdGF0aWNJbmxpbmVQb3Np
dGlvbkZvckNoaWxkKGJveCwgbV9ibG9jay5sb2dpY2FsSGVpZ2h0KCksIG1fYmxvY2suc3RhcnRP
ZmZzZXRGb3JDb250ZW50KG1fYmxvY2subG9naWNhbEhlaWdodCgpKSk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIC8vIElmIG91ciBvcmlnaW5hbCBkaXNwbGF5IHdhcyBhbiBJTkxJTkUgdHlwZSwgdGhl
biB3ZSBjYW4gZ28gYWhlYWQKICAgICAgICAgLy8gYW5kIGRldGVybWluZSBvdXIgc3RhdGljIHkg
cG9zaXRpb24gbm93LgotICAgICAgICBib3gtPmxheWVyKCktPnNldFN0YXRpY0Jsb2NrUG9zaXRp
b24obV9ibG9jay5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICBib3gubGF5ZXIoKS0+c2V0U3Rh
dGljQmxvY2tQb3NpdGlvbihtX2Jsb2NrLmxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgfQogCiAgICAg
Ly8gSWYgd2UncmUgaWdub3Jpbmcgc3BhY2VzLCB3ZSBoYXZlIHRvIHN0b3AgYW5kIGluY2x1ZGUg
dGhpcyBvYmplY3QgYW5kCiAgICAgLy8gdGhlbiBzdGFydCBpZ25vcmluZyBzcGFjZXMgYWdhaW4u
Ci0gICAgaWYgKGlzSW5saW5lVHlwZSB8fCBib3gtPmNvbnRhaW5lcigpLT5pc1JlbmRlcklubGlu
ZSgpKSB7CisgICAgaWYgKGlzSW5saW5lVHlwZSB8fCBib3guY29udGFpbmVyKCktPmlzUmVuZGVy
SW5saW5lKCkpIHsKICAgICAgICAgaWYgKG1faWdub3JpbmdTcGFjZXMpCi0gICAgICAgICAgICBt
X2xpbmVNaWRwb2ludFN0YXRlLmVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKGJveCk7
Ci0gICAgICAgIG1fdHJhaWxpbmdPYmplY3RzLmFwcGVuZEJveElmTmVlZGVkKGJveCk7CisgICAg
ICAgICAgICBtX2xpbmVNaWRwb2ludFN0YXRlLmVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3Bh
Y2VzKCZib3gpOworICAgICAgICBtX3RyYWlsaW5nT2JqZWN0cy5hcHBlbmRCb3hJZk5lZWRlZCgm
Ym94KTsKICAgICB9IGVsc2UKLSAgICAgICAgcG9zaXRpb25lZE9iamVjdHMuYXBwZW5kKGJveCk7
CisgICAgICAgIHBvc2l0aW9uZWRPYmplY3RzLmFwcGVuZCgmYm94KTsKIAotICAgIG1fd2lkdGgu
YWRkVW5jb21taXR0ZWRXaWR0aChpbmxpbmVMb2dpY2FsV2lkdGgoYm94KSk7CisgICAgbV93aWR0
aC5hZGRVbmNvbW1pdHRlZFdpZHRoKGlubGluZUxvZ2ljYWxXaWR0aCgmYm94KSk7CiAgICAgLy8g
UmVzZXQgcHJpb3IgbGluZSBicmVhayBjb250ZXh0IGNoYXJhY3RlcnMuCiAgICAgbV9yZW5kZXJU
ZXh0SW5mby5tX2xpbmVCcmVha0l0ZXJhdG9yLnJlc2V0UHJpb3JDb250ZXh0KCk7CiB9CiAKIGlu
bGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlRmxvYXQoKQogewotICAgIFJlbmRlckJv
eCYgZmxvYXRCb3ggPSB0b1JlbmRlckJveCgqbV9jdXJyZW50LnJlbmRlcmVyKCkpOworICAgIGF1
dG8mIGZsb2F0Qm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqbV9jdXJyZW50LnJlbmRlcmVyKCkp
OwogICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IG1fbGluZUJyZWFrZXIuaW5z
ZXJ0RmxvYXRpbmdPYmplY3QoZmxvYXRCb3gpOwogICAgIC8vIGNoZWNrIGlmIGl0IGZpdHMgaW4g
dGhlIGN1cnJlbnQgbGluZS4KICAgICAvLyBJZiBpdCBkb2VzLCBwb3NpdGlvbiBpdCBub3csIG90
aGVyd2lzZSwgcG9zaXRpb24KQEAgLTQwNyw3ICs0MDcsNyBAQCBpbmxpbmUgdm9pZCBCcmVha2lu
Z0NvbnRleHQ6OmhhbmRsZUVtcHR5SW5saW5lKCkKIAogaW5saW5lIHZvaWQgQnJlYWtpbmdDb250
ZXh0OjpoYW5kbGVSZXBsYWNlZCgpCiB7Ci0gICAgUmVuZGVyQm94JiByZXBsYWNlZEJveCA9IHRv
UmVuZGVyQm94KCptX2N1cnJlbnQucmVuZGVyZXIoKSk7CisgICAgYXV0byYgcmVwbGFjZWRCb3gg
PSBkb3duY2FzdDxSZW5kZXJCb3g+KCptX2N1cnJlbnQucmVuZGVyZXIoKSk7CiAKICAgICBpZiAo
bV9hdFN0YXJ0KQogICAgICAgICBtX3dpZHRoLnVwZGF0ZUF2YWlsYWJsZVdpZHRoKHJlcGxhY2Vk
Qm94LmxvZ2ljYWxIZWlnaHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbGluZS9MaW5lQnJlYWtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9M
aW5lQnJlYWtlci5jcHAKaW5kZXggZDQ3NzRmZWEzZTc1Y2E0MDMyNTZlMzhkMTNmOGYzNTk5MGZh
ODA5ZS4uYzc3NGE1ODY2Njc2MDE3Yjk0ODY2MDllNWVhNjA2ODgzYjhkMzk5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcApAQCAtNDgsOSArNDgs
OSBAQCB2b2lkIExpbmVCcmVha2VyOjpza2lwVHJhaWxpbmdXaGl0ZXNwYWNlKElubGluZUl0ZXJh
dG9yJiBpdGVyYXRvciwgY29uc3QgTGluZUluZgogICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQo
KSAmJiAhcmVxdWlyZXNMaW5lQm94KGl0ZXJhdG9yLCBsaW5lSW5mbywgVHJhaWxpbmdXaGl0ZXNw
YWNlKSkgewogICAgICAgICBSZW5kZXJPYmplY3QmIG9iamVjdCA9ICppdGVyYXRvci5yZW5kZXJl
cigpOwogICAgICAgICBpZiAob2JqZWN0LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQotICAgICAg
ICAgICAgc2V0U3RhdGljUG9zaXRpb25zKG1fYmxvY2ssIHRvUmVuZGVyQm94KG9iamVjdCkpOwor
ICAgICAgICAgICAgc2V0U3RhdGljUG9zaXRpb25zKG1fYmxvY2ssIGRvd25jYXN0PFJlbmRlckJv
eD4ob2JqZWN0KSk7CiAgICAgICAgIGVsc2UgaWYgKG9iamVjdC5pc0Zsb2F0aW5nKCkpCi0gICAg
ICAgICAgICBtX2Jsb2NrLmluc2VydEZsb2F0aW5nT2JqZWN0KHRvUmVuZGVyQm94KG9iamVjdCkp
OworICAgICAgICAgICAgbV9ibG9jay5pbnNlcnRGbG9hdGluZ09iamVjdChkb3duY2FzdDxSZW5k
ZXJCb3g+KG9iamVjdCkpOwogICAgICAgICBpdGVyYXRvci5pbmNyZW1lbnQoKTsKICAgICB9CiB9
CkBAIC02MCwxMyArNjAsMTMgQEAgdm9pZCBMaW5lQnJlYWtlcjo6c2tpcExlYWRpbmdXaGl0ZXNw
YWNlKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmVJbmZvJgogICAgIHdoaWxlICgh
cmVzb2x2ZXIucG9zaXRpb24oKS5hdEVuZCgpICYmICFyZXF1aXJlc0xpbmVCb3gocmVzb2x2ZXIu
cG9zaXRpb24oKSwgbGluZUluZm8sIExlYWRpbmdXaGl0ZXNwYWNlKSkgewogICAgICAgICBSZW5k
ZXJPYmplY3QmIG9iamVjdCA9ICpyZXNvbHZlci5wb3NpdGlvbigpLnJlbmRlcmVyKCk7CiAgICAg
ICAgIGlmIChvYmplY3QuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAgICAgIHNl
dFN0YXRpY1Bvc2l0aW9ucyhtX2Jsb2NrLCB0b1JlbmRlckJveChvYmplY3QpKTsKKyAgICAgICAg
ICAgIHNldFN0YXRpY1Bvc2l0aW9ucyhtX2Jsb2NrLCBkb3duY2FzdDxSZW5kZXJCb3g+KG9iamVj
dCkpOwogICAgICAgICAgICAgaWYgKG9iamVjdC5zdHlsZSgpLmlzT3JpZ2luYWxEaXNwbGF5SW5s
aW5lVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgcmVzb2x2ZXIucnVucygpLmFkZFJ1bihuZXcg
QmlkaVJ1bigwLCAxLCBvYmplY3QsIHJlc29sdmVyLmNvbnRleHQoKSwgcmVzb2x2ZXIuZGlyKCkp
KTsKICAgICAgICAgICAgICAgICBsaW5lSW5mby5pbmNyZW1lbnRSdW5zRnJvbUxlYWRpbmdXaGl0
ZXNwYWNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0LmlzRmxv
YXRpbmcoKSkKLSAgICAgICAgICAgIG1fYmxvY2sucG9zaXRpb25OZXdGbG9hdE9uTGluZShtX2Js
b2NrLmluc2VydEZsb2F0aW5nT2JqZWN0KHRvUmVuZGVyQm94KG9iamVjdCkpLCBsYXN0RmxvYXRG
cm9tUHJldmlvdXNMaW5lLCBsaW5lSW5mbywgd2lkdGgpOworICAgICAgICAgICAgbV9ibG9jay5w
b3NpdGlvbk5ld0Zsb2F0T25MaW5lKG1fYmxvY2suaW5zZXJ0RmxvYXRpbmdPYmplY3QoZG93bmNh
c3Q8UmVuZGVyQm94PihvYmplY3QpKSwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgbGluZUlu
Zm8sIHdpZHRoKTsKICAgICAgICAgZWxzZSBpZiAob2JqZWN0LmlzVGV4dCgpICYmIG9iamVjdC5z
dHlsZSgpLmhhc1RleHRDb21iaW5lKCkgJiYgb2JqZWN0LmlzQ29tYmluZVRleHQoKSAmJiAhdG9S
ZW5kZXJDb21iaW5lVGV4dChvYmplY3QpLmlzQ29tYmluZWQoKSkgewogICAgICAgICAgICAgdG9S
ZW5kZXJDb21iaW5lVGV4dChvYmplY3QpLmNvbWJpbmVUZXh0KCk7CiAgICAgICAgICAgICBpZiAo
dG9SZW5kZXJDb21iaW5lVGV4dChvYmplY3QpLmlzQ29tYmluZWQoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNw
cAppbmRleCA4MWRiN2I1ZTJjZWFiZjI1ZjVjMmMxZTMwZjY1MWQ2MjczNTA5NzFiLi5kZTQ2OTMx
MmUzYjAyOTY5YzI1NDBjZWVjOGZiYzBlYzI4NWQ3MTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCkBA
IC05MCw4ICs5MCw4IEBAIHZvaWQgUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpsYXlvdXQoKQogCiAg
ICAgICAgIC8vIFNraXBwaW5nIHRoZSBlbWJlbGxpc2hlZCBvcCBkb2VzIG5vdCB3b3JrIGZvciBu
ZXN0ZWQgc3RydWN0dXJlcyBsaWtlCiAgICAgICAgIC8vIDxtdW5kZXI+PG1vdmVyPjxtbz5fPC9t
bz4uLi48L21vdmVyPiA8bW8+XzwvbW8+PC9tdW5kZXI+LgotICAgICAgICBpZiAoY2hpbGQtPmlz
Qm94KCkpCi0gICAgICAgICAgICBzdHJldGNoV2lkdGggPSBzdGQ6Om1heDxMYXlvdXRVbml0Pihz
dHJldGNoV2lkdGgsIHRvUmVuZGVyQm94KGNoaWxkKS0+bG9naWNhbFdpZHRoKCkpOworICAgICAg
ICBpZiAoaXM8UmVuZGVyQm94PigqY2hpbGQpKQorICAgICAgICAgICAgc3RyZXRjaFdpZHRoID0g
c3RkOjptYXg8TGF5b3V0VW5pdD4oc3RyZXRjaFdpZHRoLCBkb3duY2FzdDxSZW5kZXJCb3g+KCpj
aGlsZCkubG9naWNhbFdpZHRoKCkpOwogICAgIH0KIAogICAgIC8vIFNldCB0aGUgc2l6ZXMgb2Yg
KHBvc3NpYmx5IGVtYmVsbGlzaGVkKSBzdHJldGNoeSBvcGVyYXRvciBjaGlsZHJlbi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4IDFlMWZiNTRlMjQwZTQ5NDAx
NmY3ZDU3ZWEzY2M0OWI4YjVhYTA2NjIuLjIyN2UzYTgzODk3YzM4MGU4YWRmOGFhODAwNmYxY2Ew
ZTMxYmVmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcApAQCAt
MjY3LDcgKzI2Nyw3IEBAIFJlbmRlckJveCogU1ZHSW1hZ2U6OmVtYmVkZGVkQ29udGVudEJveCgp
IGNvbnN0CiAgICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1lbnQgPSB0aGlzLT5yb290RWxlbWVu
dCgpOwogICAgIGlmICghcm9vdEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJldHVybiB0b1JlbmRlckJveChyb290RWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgcmV0dXJu
IGRvd25jYXN0PFJlbmRlckJveD4ocm9vdEVsZW1lbnQtPnJlbmRlcmVyKCkpOwogfQogCiBGcmFt
ZVZpZXcqIFNWR0ltYWdlOjpmcmFtZVZpZXcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0gYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQppbmRleCAx
OGY5M2UwMmJkY2YwOTA3NDMzNjU0NDNmN2U4OTVhMmI0NGIwNmU0Li4yNjcxZTM2ZjA3ODRkOGZk
NTlhOWJkNjBjOGEyMmU0MzliNDUyZThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQpAQCAtMzc2LDEyICsz
NzYsMTIgQEAgYm9vbCBXZWJDb250ZXh0TWVudUNsaWVudDo6Y2xpZW50RmxvYXRSZWN0Rm9yTm9k
ZShOb2RlJiBub2RlLCBGbG9hdFJlY3QmIHJlY3QpIGMKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIGlmICghcmVuZGVyZXItPmlzQm94KCkpCisgICAgaWYgKCFpczxSZW5kZXJC
b3g+KCpyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZW5kZXJCb3gqIHJl
bmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKKyAgICBhdXRvJiByZW5kZXJCb3ggPSBk
b3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcik7CiAKLSAgICBMYXlvdXRSZWN0IGxheW91dFJl
Y3QgPSByZW5kZXJCb3gtPmNsaWVudEJveFJlY3QoKTsKLSAgICBGbG9hdFF1YWQgZmxvYXRRdWFk
ID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChsYXlvdXRSZWN0KSk7
CisgICAgTGF5b3V0UmVjdCBsYXlvdXRSZWN0ID0gcmVuZGVyQm94LmNsaWVudEJveFJlY3QoKTsK
KyAgICBGbG9hdFF1YWQgZmxvYXRRdWFkID0gcmVuZGVyQm94LmxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRRdWFkKGxheW91dFJlY3QpKTsKICAgICByZWN0ID0gZmxvYXRRdWFkLmJvdW5kaW5nQm94
KCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CmluZGV4IDQwMmY3ZTdhMjQ5N2JjYWIzOGYzMTc2Y2U0NDBiZTc0YzI1OTM2MGYuLmIzZTIwZTEw
NDQ3NWU5OTg0MmNlOTBjM2NlNWU2NTcxODlhZTMzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQpAQCAtMTMyOSwxMCArMTMyOSwxMCBAQCAtICh2b2lkKXNldE5lZWRzTGF5
b3V0CiAKIC0gKENHU2l6ZSlyZW5kZXJlZFNpemVPZk5vZGU6KERPTU5vZGUgKilub2RlIGNvbnN0
cmFpbmVkVG9XaWR0aDooZmxvYXQpd2lkdGgKIHsKLSAgICBOb2RlICpuID0gY29yZShub2RlKTsK
LSAgICBSZW5kZXJPYmplY3QgKnIgPSBuID8gbi0+cmVuZGVyZXIoKSA6IDA7Ci0gICAgZmxvYXQg
dyA9IHN0ZDo6bWluKChmbG9hdClyLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSwgd2lkdGgp
OwotICAgIHJldHVybiByICYmIHItPmlzQm94KCkgPyBDR1NpemVNYWtlKHcsIHRvUmVuZGVyQm94
KHIpLT5oZWlnaHQoKSkgOiBDR1NpemVNYWtlKDAsMCk7CisgICAgTm9kZSogbiA9IGNvcmUobm9k
ZSk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG4gPyBuLT5yZW5kZXJlcigpIDogbnVs
bHB0cjsKKyAgICBmbG9hdCB3ID0gc3RkOjptaW4oKGZsb2F0KXJlbmRlcmVyLT5tYXhQcmVmZXJy
ZWRMb2dpY2FsV2lkdGgoKSwgd2lkdGgpOworICAgIHJldHVybiBpczxSZW5kZXJCb3g+KHJlbmRl
cmVyKSA/IENHU2l6ZU1ha2UodywgZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLmhlaWdo
dCgpKSA6IENHU2l6ZU1ha2UoMCwgMCk7CiB9CiAKIC0gKERPTU5vZGUgKilkZWVwZXN0Tm9kZUF0
Vmlld3BvcnRMb2NhdGlvbjooQ0dQb2ludClhVmlld3BvcnRMb2NhdGlvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3
LmNwcAppbmRleCBjY2U1MTA5ZDBiYTdhZmFiNDBhOTZlODA0MjI5MGViZGJkODkxNWIwLi5kMzJj
ZmY3MjQ1OGUxY2MwYzRmMTkzOWQzODBhZjg1NmIzYzRmNDZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cApAQCAtMTYyNSw3ICsxNjI1LDcgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlTm90aWZ5KFdQQVJB
TSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgYm9vbCBjYW5CZVNjcm9sbGVkID0gZmFsc2U7
CiAgICAgaWYgKG1fZ2VzdHVyZVRhcmdldE5vZGUpIHsKICAgICAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKTsgcmVuZGVyZXI7
IHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAocmVuZGVy
ZXItPmlzQm94KCkgJiYgdG9SZW5kZXJCb3gocmVuZGVyZXIpLT5jYW5CZVNjcm9sbGVkQW5kSGFz
U2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oKnJlbmRl
cmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuY2FuQmVTY3JvbGxlZEFuZEhh
c1Njcm9sbGFibGVBcmVhKCkpIHsKICAgICAgICAgICAgICAgICBjYW5CZVNjcm9sbGVkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA2ZDQ0OTBiZGIzMDRiMGFk
MjJmNWJkZjZmMGM3NDM1NTMyZTkyMmMxLi45NjU5ZjBkNTRlOWIzNjc1NjY2MmJhNmY3NDgzNThi
N2Y1ODQ1MjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCkBAIC00NTc3LDcgKzQ1NzcsNyBAQCB2b2lkIFdlYlBhZ2U6OmRldGVybWluZVByaW1h
cnlTbmFwc2hvdHRlZFBsdWdJbigpCiAgICAgICAgICAgICBhdXRvIHBsdWdpblJlbmRlcmVyID0g
cGx1Z0luSW1hZ2VFbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAoIXBsdWdpblJl
bmRlcmVyIHx8ICFwbHVnaW5SZW5kZXJlci0+aXNCb3goKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGF1dG8mIHBsdWdpblJlbmRlckJveCA9IHRvUmVuZGVyQm94KCpw
bHVnaW5SZW5kZXJlcik7CisgICAgICAgICAgICBhdXRvJiBwbHVnaW5SZW5kZXJCb3ggPSBkb3du
Y2FzdDxSZW5kZXJCb3g+KCpwbHVnaW5SZW5kZXJlcik7CiAgICAgICAgICAgICBpZiAoIXBsdWdJ
bkludGVyc2VjdHNTZWFyY2hSZWN0KHBsdWdJbkltYWdlRWxlbWVudCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKQEAgLTQ2NjksNyArNDY2OSw3IEBAIGJvb2wgV2ViUGFnZTo6cGx1Z0lu
SW50ZXJzZWN0c1NlYXJjaFJlY3QoSFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z0luSW1hZ2VF
bGVtCiAKIGJvb2wgV2ViUGFnZTo6cGx1Z0luSXNQcmltYXJ5U2l6ZShXZWJDb3JlOjpIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50JiBwbHVnSW5JbWFnZUVsZW1lbnQsIHVuc2lnbmVkJiBjYW5kaWRhdGVQ
bHVnSW5BcmVhKQogewotICAgIGF1dG8mIHBsdWdpblJlbmRlckJveCA9IHRvUmVuZGVyQm94KCoo
cGx1Z0luSW1hZ2VFbGVtZW50LnJlbmRlcmVyKCkpKTsKKyAgICBhdXRvJiBwbHVnaW5SZW5kZXJC
b3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpwbHVnSW5JbWFnZUVsZW1lbnQucmVuZGVyZXIoKSk7
CiAgICAgaWYgKHBsdWdpblJlbmRlckJveC5jb250ZW50V2lkdGgoKSA8IHByaW1hcnlTbmFwc2hv
dHRlZFBsdWdJbk1pbmltdW1XaWR0aCB8fCBwbHVnaW5SZW5kZXJCb3guY29udGVudEhlaWdodCgp
IDwgcHJpbWFyeVNuYXBzaG90dGVkUGx1Z0luTWluaW11bUhlaWdodCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0KaW5kZXggOWYzYmUzYjViZDU0ZGVmYjI1NWQxMDc2ZjcwODU5M2JiNDU0
YjBmZC4uZDZkYzVlY2U2ODZmMGQwNDgyNmU4MTEyMjMxYjdhZmZhZTFmY2FmZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpA
QCAtNTM0LDEwICs1MzQsOCBAQCB2b2lkIFdlYlBhZ2U6OnNlbmRUYXBIaWdobGlnaHRGb3JOb2Rl
SWZOZWNlc3NhcnkodWludDY0X3QgcmVxdWVzdElELCBOb2RlKiBub2RlKQogICAgICAgICB9CiAK
ICAgICAgICAgUm91bmRlZFJlY3Q6OlJhZGlpIGJvcmRlclJhZGlpOwotICAgICAgICBpZiAocmVu
ZGVyZXItPmlzQm94KCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJC
b3gocmVuZGVyZXIpOwotICAgICAgICAgICAgYm9yZGVyUmFkaWkgPSBib3gtPmJvcmRlclJhZGlp
KCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oKnJlbmRlcmVyKSkKKyAg
ICAgICAgICAgIGJvcmRlclJhZGlpID0gZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLmJv
cmRlclJhZGlpKCk7CiAKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRH
ZXRUYXBIaWdobGlnaHRHZW9tZXRyaWVzKHJlcXVlc3RJRCwgaGlnaGxpZ2h0Q29sb3IsIHF1YWRz
LCByb3VuZGVkSW50U2l6ZShib3JkZXJSYWRpaS50b3BMZWZ0KCkpLCByb3VuZGVkSW50U2l6ZShi
b3JkZXJSYWRpaS50b3BSaWdodCgpKSwgcm91bmRlZEludFNpemUoYm9yZGVyUmFkaWkuYm90dG9t
TGVmdCgpKSwgcm91bmRlZEludFNpemUoYm9yZGVyUmFkaWkuYm90dG9tUmlnaHQoKSkpKTsKICAg
ICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239996</attachid>
            <date>2014-10-16 21:40:14 -0700</date>
            <delta_ts>2014-10-17 14:25:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137804-20141016214021.patch</filename>
            <type>text/plain</type>
            <size>163967</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0ODA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ5M2E4ZDhlZjUyNzYx
NDFiNWJhN2JlNjY2YmFjMGZlYWJhNGE0Yy4uNzNkYzBlOTk2ZDZlMzEzMDI3NGFiYTYxNDk1Zjc4
MTEyYjQ4YjkyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIxOSBAQAogMjAxNC0xMC0xNiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3du
Y2FzdDw+KCkgZm9yIFJlbmRlckJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM3ODA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgUmVuZGVyQm94IGFu
ZCBjbGVhbiB1cCB0aGUgc3Vycm91bmRpbmcKKyAgICAgICAgY29kZS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0
VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpnZXRT
Y3JvbGxhYmxlQXJlYUlmU2Nyb2xsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyk6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET01I
VE1MLm1tOgorICAgICAgICAoLVtET01IVE1MRWxlbWVudCBzY3JvbGxZT2Zmc2V0XSk6CisgICAg
ICAgICgtW0RPTUhUTUxFbGVtZW50IHNldFNjcm9sbFhPZmZzZXQ6c2Nyb2xsWU9mZnNldDphZGp1
c3RGb3JJT1NDYXJldDpdKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5z
aW9ucy5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBib3JkZXJSYWRpaV0pOgorICAgICAgICAqIGNz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2l6
aW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVkVHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6Onpvb21BZGp1c3RlZFBhZGRpbmdPck1hcmdpblBpeGVsVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZSk6CisgICAg
ICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVy
Tm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcik6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9y
RWxlbWVudCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6c2Nyb2xsQnlVbml0cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogZG9tL1Bv
c2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3Rp
bmN0UG9zaXRpb25zKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNEZWxldGFibGVFbGVtZW50KToKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmVydGljYWxTY3Jv
bGxEaXN0YW5jZSk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYXJldEJhc2U6OnBhaW50Q2FyZXQpOgorICAgICAgICAqIGVkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZ1bGx5Q2xpcHNDb250ZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRFbWl0RXh0cmFOZXdsaW5lRm9yTm9kZSk6CisgICAg
ICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphYnNvbHV0
ZUJvdW5kc0ZvckxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6
aXNGb2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjaGVja1NpemVDaGFu
Z2VGb3JTbmFwc2hvdHRpbmcpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpzZXRQb3NpdGlvbkZyb21Q
b2ludCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyk6CisgICAgICAgICogcGFnZS9B
dXRvc2Nyb2xsQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdXRvc2Nyb2xsQ29u
dHJvbGxlcjo6dXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVyKToKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnN0YXJ0UGFuU2Ny
b2xsaW5nKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6OmVtYmVkZGVkQ29udGVudEJveCk6CisgICAgICAgICogcGFnZS9HZXN0dXJl
VGFwSGlnaGxpZ2h0ZXIuY3BwOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxhYmxlTm9kZSk6CisgICAgICAgICogcGFnZS9h
bmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Ymxl
bmRGdW5jKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAg
ICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjppbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojpsb2dpY2FsSGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6YWRqdXN0UG9zaXRpb24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9JbmxpbmVFbGVtZW50Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUVsZW1lbnRCb3g6OmRlbGV0ZUxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRWxl
bWVudEJveDo6ZXh0cmFjdExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRWxlbWVudEJv
eDo6YXR0YWNoTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVFbGVtZW50Qm94OjpwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVFbGVtZW50Qm94Ojpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lRmxvd0JveDo6YWRkVG9MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dC
b3g6OmFkZFJlcGxhY2VkQ2hpbGRPdmVyZmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL0xheW91
dFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpzaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6bWFya0ZpeGVkUG9zaXRpb25PYmplY3RGb3JMYXlvdXRJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2xlYXJQZXJjZW50SGVpZ2h0RGVz
Y2VuZGFudHNGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlQmxv
Y2tQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnJlYnVpbGRGbG9hdGlu
Z09iamVjdFNldEZyb21JbnRydWRpbmdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93Ojpwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvckxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRMaW5lQm94ZXMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpmaW5kQXV0b3Njcm9sbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUJs
b2NrU3RhdGljRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpwb3NpdGlv
bkZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bGF5b3V0T3ZlcmZsb3dS
ZWN0Rm9yUHJvcGFnYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cHJldmlvdXNTaWJsaW5nQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6bmV4dFNpYmxpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpwYXJlbnRCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpmaXJz
dENoaWxkQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bGFzdENoaWxkQm94KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRv
T2Zmc2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpj
b21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVu
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVC
YWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVtb3ZlQ2hpbGRJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpzdHlsZVdpbGxDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVwYWludEFmdGVyTGF5b3V0SWZO
ZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6bGF5b3V0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RmllbGRzZXQ6OmZpbmRMZWdlbmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkanVzdGVkUG9z
aXRpb25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZs
b3dUaHJlYWQ6OmN1cnJlbnRBY3RpdmVSZW5kZXJCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJGbG93VGhyZWFkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnVsbFNjcmVlbjo6dW53cmFwUmVuZGVyZXIp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6bGF5b3V0U2hhZG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklu
bGluZTo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFk
ZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBlcnNwZWN0aXZlVHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZU9yaWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJlbnRMYXllckNyb3NzRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6cmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxz
T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVJlZmVyZW5jZUJveCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXNl
dENvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBv
c2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnVwZGF0ZURpcmVjdGx5Q29tcG9zaXRlZEJhY2tncm91bmRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRlbnRzQm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6YmFja2dyb3VuZEJveEZvclBhaW50aW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6c3RhcnRBbmltYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRyYW5zaXRpb24p
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaW5lQm94TGlzdDo6cmFuZ2VJbnRlcnNlY3RzUmVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpmaXJzdENvbHVtblNldE9yU3Bh
bm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6Om5l
eHRDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkOjpwcmV2aW91c0NvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdP
Zik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnJlc29s
dmVNb3ZlZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRDb2x1bW5TcGFubmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6aGFuZGxlU3Bh
bm5lclJlbW92YWwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjpzaG93UmVnaW9uc0luZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6c2hvd1JlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6Om1hcExvY2FsVG9Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjphZGRBbm5vdGF0ZWRSZWdpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om5vZGVBdFBv
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmxheW91dFNw
ZWNpYWxFeGNsdWRlZENoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjZW50
ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6
YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJp
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpiYXNlbGluZVBvc2l0
aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJl
bmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJWaWV3OjpwYWludEJveERlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZXRMaW5l
QnJlYWtJbmZvKToKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxp
bmVIZWFkZXJzLmg6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZU91
dE9mRmxvd1Bvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0Ojpo
YW5kbGVGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVJl
cGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lQnJlYWtlcjo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lQnJlYWtlcjo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmxheW91dCk6CisgICAgICAgICogc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjplbWJl
ZGRlZENvbnRlbnRCb3gpOgorCisyMDE0LTEwLTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CisKICAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgQmFzaWNTaGFw
ZSBzdWJjbGFzc2VzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzc3NjYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDIwYzgwYmYyNDM1N2FiMjExNjdiNzkx
N2M2NzhhNWYxNzQyNWE2MDMuLmM1MWVhMTIyNmUxYmEwMTcxZTU2MmY3OGEyZDg4MmY3YmY2MWQx
YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNC0xMC0xNiAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2Fz
dDw+KCkgZm9yIFJlbmRlckJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM3ODA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgUmVuZGVyQm94IGFuZCBj
bGVhbiB1cCB0aGUgc3Vycm91bmRpbmcKKyAgICAgICAgY29kZS4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tOgorICAgICAgICAoV2ViQ29udGV4dE1l
bnVDbGllbnQ6OmNsaWVudEZsb2F0UmVjdEZvck5vZGUpOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
RnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIHJlbmRlcmVkU2l6ZU9mTm9kZTpjb25zdHJh
aW5lZFRvV2lkdGg6XSk6CisKIDIwMTQtMTAtMTYgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IHNlbGVjdGlvbiBzZXJ2aWNlcyBtZW51
IGZvciBMZWdhY3kgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggM2UxYzg3MDJjZTcyZjQ1YzIz
MDMxMWFiMWVlYWI4ODIwMTQ4NmY4My4uZGUwNWExYzY1ODc5ZmNlMTkwNTNkZWIyMGI1ZTliYTVk
ZTBhZmM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTEwLTE2ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRv
d25jYXN0PD4oKSBmb3IgUmVuZGVyQm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzc4MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBSZW5kZXJCb3gg
YW5kIGNsZWFuIHVwIHRoZSBzdXJyb3VuZGluZworICAgICAgICBjb2RlLgorCisgICAgICAgICog
V2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpnZXN0dXJlTm90aWZ5KToKKwogMjAxNC0x
MC0xNiAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3NDc1NC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBlMTRjMjgzOGY0
OWJmZmM0ZDRlODI0NWRhNDRmMDVlZDQ5ZTg3NDY1Li4xYmIxNTE4NWE2NjNjNWZkZWRlNjRiMjAx
MWM4NDhjYjRiZWU4NzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTQtMTAtMTYg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBSZW5kZXJCb3gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNzgwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIFJlbmRlckJv
eCBhbmQgY2xlYW4gdXAgdGhlIHN1cnJvdW5kaW5nCisgICAgICAgIGNvZGUuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmRldGVybWluZVByaW1hcnlTbmFwc2hvdHRlZFBsdWdJbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnBsdWdJbklzUHJpbWFyeVNpemUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VuZFRh
cEhpZ2hsaWdodEZvck5vZGVJZk5lY2Vzc2FyeSk6CisKIDIwMTQtMTAtMTYgIFBhc2NhbCBKYWNx
dWVtYXJ0ICA8cC5qYWNxdWVtYXJ0QHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJlbW92aW5nIENV
U1RPTV9QUk9UT0NPTFMgZ3VhcmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDJkNTYwMGJkMGQ5
MTI0NmMzZDg2YzU1OGMwNjAyZTY5MmRkYjVmNDIuLjQyZGIzNTcyMWExZGJmODAwYTM2NGM5YTdj
NzBkZWFkYmQ3MmEzZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMTMyOSw5ICsxMzI5LDkg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21wdXRlQWNjZXNzaWJpbGl0eUlz
SWdub3JlZCgpIGNvbnN0CiAgICAgICAgIGlmIChjYW52YXNIYXNGYWxsYmFja0NvbnRlbnQoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAobV9yZW5kZXJlci0+aXNC
b3goKSkgewotICAgICAgICAgICAgUmVuZGVyQm94KiBjYW52YXNCb3ggPSB0b1JlbmRlckJveCht
X3JlbmRlcmVyKTsKLSAgICAgICAgICAgIGlmIChjYW52YXNCb3gtPmhlaWdodCgpIDw9IDEgfHwg
Y2FudmFzQm94LT53aWR0aCgpIDw9IDEpCisgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCptX3Jl
bmRlcmVyKSkgeworICAgICAgICAgICAgYXV0byYgY2FudmFzQm94ID0gZG93bmNhc3Q8UmVuZGVy
Qm94PigqbV9yZW5kZXJlcik7CisgICAgICAgICAgICBpZiAoY2FudmFzQm94LmhlaWdodCgpIDw9
IDEgfHwgY2FudmFzQm94LndpZHRoKCkgPD0gMSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgICAgICAvLyBPdGhlcndpc2UgZmFsbCB0aHJvdWdoOyB1c2UgcHJl
c2VuY2Ugb2YgaGVscCB0ZXh0LCB0aXRsZSwgb3IgZGVzY3JpcHRpb24gdG8gZGVjaWRlLgpAQCAt
MjE4MCw3ICsyMTgwLDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG8KICAgICAKICAgICBtX3Jl
bmRlcmVyLT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCi0gICAgUmVuZGVyTGF5ZXIqIGxh
eWVyID0gdG9SZW5kZXJCb3gobV9yZW5kZXJlciktPmxheWVyKCk7CisgICAgUmVuZGVyTGF5ZXIq
IGxheWVyID0gZG93bmNhc3Q8UmVuZGVyQm94PigqbV9yZW5kZXJlcikubGF5ZXIoKTsKICAgICAg
CiAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBI
aXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OkFjY2Vzc2liaWxpdHlIaXRU
ZXN0KTsKICAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHQgPSBIaXRUZXN0UmVzdWx0KHBv
aW50KTsKQEAgLTM0NTYsMjcgKzM0NTYsMjYgQEAgU2Nyb2xsYWJsZUFyZWEqIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlKCkgY29uc3QKICAg
ICBpZiAocGFyZW50T2JqZWN0KCkgJiYgcGFyZW50T2JqZWN0KCktPmlzQWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXcoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoIW1fcmVuZGVy
ZXIgfHwgIW1fcmVuZGVyZXItPmlzQm94KCkpCisgICAgaWYgKCFpczxSZW5kZXJCb3g+KG1fcmVu
ZGVyZXIpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlbmRlckJveCogYm94ID0g
dG9SZW5kZXJCb3gobV9yZW5kZXJlcik7Ci0gICAgaWYgKCFib3gtPmNhbkJlU2Nyb2xsZWRBbmRI
YXNTY3JvbGxhYmxlQXJlYSgpKQorICAgIGF1dG8mIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
Km1fcmVuZGVyZXIpOworICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxl
QXJlYSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBib3gtPmxheWVy
KCk7CisgICAgcmV0dXJuIGJveC5sYXllcigpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPmlzQm94KCkpCisgICAgaWYgKCFpczxSZW5k
ZXJCb3g+KG1fcmVuZGVyZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJCb3gqIGJv
eCA9IHRvUmVuZGVyQm94KG1fcmVuZGVyZXIpOwotICAgIGlmICghYm94LT5jYW5CZVNjcm9sbGVk
QW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKKyAgICBhdXRvJiBib3ggPSBkb3duY2FzdDxSZW5kZXJC
b3g+KCptX3JlbmRlcmVyKTsKKyAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xs
YWJsZUFyZWEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0g
Ym94LT5sYXllcigpOwotICAgIGxheWVyLT5zY3JvbGxUb09mZnNldCh0b0ludFNpemUocG9pbnQp
LCBSZW5kZXJMYXllcjo6U2Nyb2xsT2Zmc2V0Q2xhbXBlZCk7CisgICAgYm94LmxheWVyKCktPnNj
cm9sbFRvT2Zmc2V0KHRvSW50U2l6ZShwb2ludCksIFJlbmRlckxheWVyOjpTY3JvbGxPZmZzZXRD
bGFtcGVkKTsKIH0KIAogI2lmIEVOQUJMRShNQVRITUwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTUhUTUwubW0KaW5kZXggMDEyOTE4NGVhMTBiYTM5OTVhMTRkMmI1NDM0YTc0NDlkMTA2
ZThmOS4uZDZjNGRkZmJlYjhjNzQ2NmY4YmQ3YTc0ZGZhZWYxMGM4ZTg5NDcyYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSFRNTC5tbQpAQCAtNzEsMjkgKzcxLDI3IEBAIC0gKGlu
dClzY3JvbGxYT2Zmc2V0CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBpZiAoIXJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxvdygpKQorICAgIGlmICghaXM8UmVu
ZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpKQogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5j
b250YWluaW5nQmxvY2soKTsKIAotICAgIGlmICghcmVuZGVyZXItPmlzQm94KCkgfHwgIXJlbmRl
cmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICBpZiAoIWlzPFJlbmRlckJveD4oKnJlbmRlcmVy
KSB8fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIFJlbmRlckJveCAqcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwotICAgIHJl
dHVybiByZW5kZXJCb3gtPmxheWVyKCktPnNjcm9sbFhPZmZzZXQoKTsKKyAgICByZXR1cm4gZG93
bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCktPnNjcm9sbFhPZmZzZXQoKTsKIH0K
IAogLSAoaW50KXNjcm9sbFlPZmZzZXQKIHsKLSAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0g
Y29yZShzZWxmKS0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29y
ZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIGlmICghcmVuZGVyZXItPmlzUmVuZGVyQmxvY2tGbG93KCkpCisgICAgaWYgKCFp
czxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikpCiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVy
ZXItPmNvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmICghcmVuZGVyZXItPmlzQm94KCkgfHwgIXJl
bmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICBpZiAoIWlzPFJlbmRlckJveD4oKnJlbmRl
cmVyKSB8fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIFJlbmRlckJveCAqcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwotICAg
IHJldHVybiByZW5kZXJCb3gtPmxheWVyKCktPnNjcm9sbFlPZmZzZXQoKTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCktPnNjcm9sbFlPZmZzZXQoKTsK
IH0KIAogLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBzY3JvbGxZT2Zmc2V0OihpbnQp
eQpAQCAtMTAzLDE3ICsxMDEsMTYgQEAgLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBz
Y3JvbGxZT2Zmc2V0OihpbnQpeQogCiAtICh2b2lkKXNldFNjcm9sbFhPZmZzZXQ6KGludCl4IHNj
cm9sbFlPZmZzZXQ6KGludCl5IGFkanVzdEZvcklPU0NhcmV0OihCT09MKWFkanVzdEZvcklPU0Nh
cmV0CiB7Ci0gICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVy
KCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7
CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFyZW5kZXJl
ci0+aXNSZW5kZXJCbG9ja0Zsb3coKSkKKyAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4oKnJl
bmRlcmVyKSkKICAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgaWYgKCFyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXJlbmRlcmVyLT5pc0Jv
eCgpKQorICAgIGlmICghcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpIHx8ICFpczxSZW5kZXJC
b3g+KCpyZW5kZXJlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlckJveCAqcmVuZGVy
Qm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwotICAgIFJlbmRlckxheWVyICpsYXllciA9IHJl
bmRlckJveC0+bGF5ZXIoKTsKKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCiAg
ICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAg
ICAgbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KEludFNpemUoeCwgeSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQppbmRleCBjYTBkODg5
M2I2ODczNGQyNzI5ZmZiNDI3YjMwMjliNzAxYTM3ZDVlLi5iOGQ5MzMwNWE5NzMyMzVjY2E3MzA3
MDVlZTNiNGY0M2Q1ZDQ5MWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQpAQCAtMTkzLDkgKzE5Myw4IEBAIC0gKE5TQXJyYXkg
Kilib3JkZXJSYWRpaQogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlKHNlbGYp
LT5yZW5kZXJlcigpOwogICAgIAotCi0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0Jv
eCgpKSB7Ci0gICAgICAgIFJvdW5kZWRSZWN0OjpSYWRpaSByYWRpaSA9IHRvUmVuZGVyQm94KHJl
bmRlcmVyKS0+Ym9yZGVyUmFkaWkoKTsKKyAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcikp
IHsKKyAgICAgICAgUm91bmRlZFJlY3Q6OlJhZGlpIHJhZGlpID0gZG93bmNhc3Q8UmVuZGVyQm94
PigqcmVuZGVyZXIpLmJvcmRlclJhZGlpKCk7CiAgICAgICAgIHJldHVybiBAW1tOU1ZhbHVlIHZh
bHVlV2l0aFNpemU6KEZsb2F0U2l6ZSlyYWRpaS50b3BMZWZ0KCldLAogICAgICAgICAgICAgICAg
ICBbTlNWYWx1ZSB2YWx1ZVdpdGhTaXplOihGbG9hdFNpemUpcmFkaWkudG9wUmlnaHQoKV0sCiAg
ICAgICAgICAgICAgICAgIFtOU1ZhbHVlIHZhbHVlV2l0aFNpemU6KEZsb2F0U2l6ZSlyYWRpaS5i
b3R0b21MZWZ0KCldLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcAppbmRleCA2NTIwMmE0MjdkMjYzYTNiNzcxMWU2MmExZTI5YzVhYTBj
ZTFiNTk3Li5jNWNjNjk3Njc5MmNjNzMyZGUyNGUyZWQxOTcyM2I5NzI5MjZlZGRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApA
QCAtNzg3LDEzICs3ODcsMTMgQEAgc3RhdGljIFBhc3NSZWY8Q1NTVmFsdWVMaXN0PiBnZXRCb3Jk
ZXJSYWRpdXNTaG9ydGhhbmRWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3QKICAgICByZXR1cm4g
bGlzdDsKIH0KIAotc3RhdGljIExheW91dFJlY3Qgc2l6aW5nQm94KFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCitzdGF0aWMgTGF5b3V0UmVjdCBzaXppbmdCb3goUmVuZGVyT2JqZWN0JiByZW5kZXJl
cikKIHsKLSAgICBpZiAoIXJlbmRlcmVyLT5pc0JveCgpKQorICAgIGlmICghaXM8UmVuZGVyQm94
PihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKLSAgICBSZW5kZXJC
b3gqIGJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKLSAgICByZXR1cm4gYm94LT5zdHlsZSgp
LmJveFNpemluZygpID09IEJPUkRFUl9CT1ggPyBib3gtPmJvcmRlckJveFJlY3QoKSA6IGJveC0+
Y29tcHV0ZWRDU1NDb250ZW50Qm94UmVjdCgpOworICAgIGF1dG8mIGJveCA9IGRvd25jYXN0PFJl
bmRlckJveD4ocmVuZGVyZXIpOworICAgIHJldHVybiBib3guc3R5bGUoKS5ib3hTaXppbmcoKSA9
PSBCT1JERVJfQk9YID8gYm94LmJvcmRlckJveFJlY3QoKSA6IGJveC5jb21wdXRlZENTU0NvbnRl
bnRCb3hSZWN0KCk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmPFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
PiBtYXRyaXhUcmFuc2Zvcm1WYWx1ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCkBAIC04NDEsOCArODQxLDggQEAgc3RhdGlj
IFBhc3NSZWY8Q1NTVmFsdWU+IGNvbXB1dGVkVHJhbnNmb3JtKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlclMKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogCiAgICAgRmxvYXRSZWN0IHBpeGVsU25hcHBl
ZFJlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpKQotICAgICAgICBwaXhlbFNuYXBwZWRS
ZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyh0b1JlbmRlckJveChyZW5kZXJlciktPmJvcmRl
ckJveFJlY3QoKSwgcmVuZGVyZXItPmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Cisg
ICAgaWYgKGlzPFJlbmRlckJveD4oKnJlbmRlcmVyKSkKKyAgICAgICAgcGl4ZWxTbmFwcGVkUmVj
dCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIp
LmJvcmRlckJveFJlY3QoKSwgcmVuZGVyZXItPmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CiAgICAgc3R5bGUtPmFw
cGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkUmVjdCwgUmVuZGVyU3R5bGU6OkV4
Y2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwpAQCAtMTU3Myw5ICsxNTczLDkgQEAgdGVtcGxhdGU8UmVu
ZGVyU3R5bGVMZW5ndGhHZXR0ZXIgbGVuZ3RoR2V0dGVyLCBSZW5kZXJCb3hDb21wdXRlZENTU1Zh
bHVlR2V0dGVyIGMKIGlubGluZSBQYXNzUmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0ZWRQYWRk
aW5nT3JNYXJnaW5QaXhlbFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKIHsKICAgICBMZW5ndGggdW56b29temVkTGVuZ3RoID0gKHN0eWxlLT4qbGVuZ3Ro
R2V0dGVyKSgpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0JveCgpIHx8IHVu
em9vbXplZExlbmd0aC5pc0ZpeGVkKCkpCisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVy
KSB8fCB1bnpvb216ZWRMZW5ndGguaXNGaXhlZCgpKQogICAgICAgICByZXR1cm4gem9vbUFkanVz
dGVkUGl4ZWxWYWx1ZUZvckxlbmd0aCh1bnpvb216ZWRMZW5ndGgsIHN0eWxlKTsKLSAgICByZXR1
cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZSgodG9SZW5kZXJCb3gocmVuZGVyZXIpLT4qY29tcHV0
ZWRDU1NWYWx1ZUdldHRlcikoKSwgc3R5bGUpOworICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhl
bFZhbHVlKChkb3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuKmNvbXB1dGVkQ1NTVmFsdWVH
ZXR0ZXIpKCksIHN0eWxlKTsKIH0KIAogdGVtcGxhdGU8UmVuZGVyU3R5bGVMZW5ndGhHZXR0ZXIg
bGVuZ3RoR2V0dGVyPgpAQCAtMjE4Myw3ICsyMTgzLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnQKICAgICAgICAgICAgICAgICAvLyB0aGUgImhlaWdodCIgcHJvcGVydHkgZG9lcyBub3QgYXBw
bHkgZm9yIG5vbi1yZXBsYWNlZCBpbmxpbmUgZWxlbWVudHMuCiAgICAgICAgICAgICAgICAgaWYg
KCFyZW5kZXJlci0+aXNSZXBsYWNlZCgpICYmIHJlbmRlcmVyLT5pc0lubGluZSgpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQXV0byk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVs
VmFsdWUoc2l6aW5nQm94KHJlbmRlcmVyKS5oZWlnaHQoKSwgc3R5bGUuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHNpemluZ0JveCgqcmVuZGVy
ZXIpLmhlaWdodCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChzdHlsZS0+aGVpZ2h0KCksIHN0
eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6CkBAIC0y
MjQ2LDE2ICsyMjQ2LDE2IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRy
YWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0CiAgICAgICAgICAgICBy
ZXR1cm4gem9vbUFkanVzdGVkUGFkZGluZ09yTWFyZ2luUGl4ZWxWYWx1ZTwmUmVuZGVyU3R5bGU6
Om1hcmdpblRvcCwgJlJlbmRlckJveE1vZGVsT2JqZWN0OjptYXJnaW5Ub3A+KHN0eWxlLmdldCgp
LCByZW5kZXJlcik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5SaWdodDogewogICAg
ICAgICAgICAgTGVuZ3RoIG1hcmdpblJpZ2h0ID0gc3R5bGUtPm1hcmdpblJpZ2h0KCk7Ci0gICAg
ICAgICAgICBpZiAobWFyZ2luUmlnaHQuaXNGaXhlZCgpIHx8ICFyZW5kZXJlciB8fCAhcmVuZGVy
ZXItPmlzQm94KCkpCisgICAgICAgICAgICBpZiAobWFyZ2luUmlnaHQuaXNGaXhlZCgpIHx8ICFp
czxSZW5kZXJCb3g+KHJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVz
dGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChtYXJnaW5SaWdodCwgc3R5bGUuZ2V0KCkpOwogICAgICAg
ICAgICAgZmxvYXQgdmFsdWU7CiAgICAgICAgICAgICBpZiAobWFyZ2luUmlnaHQuaXNQZXJjZW50
KCkpIHsKICAgICAgICAgICAgICAgICAvLyBSZW5kZXJCb3ggZ2l2ZXMgYSBtYXJnaW5SaWdodCgp
IHRoYXQgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHJpZ2h0LWVkZ2Ugb2YgdGhlIGNoaWxk
IGJveAogICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgcmlnaHQtZWRnZSBvZiB0aGUgY29udGFp
bmluZyBib3gsIHdoZW4gZGlzcGxheSA9PSBCTE9DSy4gTGV0J3MgY2FsY3VsYXRlIHRoZSBhYnNv
bHV0ZQogICAgICAgICAgICAgICAgIC8vIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgbWFyZ2luLXJp
Z2h0ICUgaW5zdGVhZCBvZiByZWx5aW5nIG9uIFJlbmRlckJveCdzIG1hcmdpblJpZ2h0KCkgdmFs
dWUuCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBtaW5pbXVtVmFsdWVGb3JMZW5ndGgobWFyZ2lu
UmlnaHQsIHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRo
Rm9yQ29udGVudCgpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG1pbmltdW1WYWx1ZUZvckxl
bmd0aChtYXJnaW5SaWdodCwgZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLmNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+bWFyZ2luUmlnaHQo
KTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVy
KS5tYXJnaW5SaWdodCgpOwogICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFs
dWUodmFsdWUsIHN0eWxlLmdldCgpKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5TWFyZ2luQm90dG9tOgpAQCAtMjQ4Nyw3ICsyNDg3LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnQKICAgICAgICAgICAgICAgICAvLyB0aGUgIndpZHRoIiBwcm9wZXJ0eSBkb2VzIG5vdCBh
cHBseSBmb3Igbm9uLXJlcGxhY2VkIGlubGluZSBlbGVtZW50cy4KICAgICAgICAgICAgICAgICBp
ZiAoIXJlbmRlcmVyLT5pc1JlcGxhY2VkKCkgJiYgcmVuZGVyZXItPmlzSW5saW5lKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZShzaXppbmdCb3gocmVuZGVyZXIpLndpZHRoKCksIHN0eWxlLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzaXppbmdCb3goKnJlbmRl
cmVyKS53aWR0aCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChzdHlsZS0+d2lkdGgoKSwgc3R5
bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V29yZEJyZWFrOgpAQCAtMjcxMyw4
ICsyNzEzLDggQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6
cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnQKICAgICAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7
CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0
IGJveDsKLSAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXItPmlzQm94KCkpCi0gICAgICAgICAg
ICAgICAgICAgIGJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+Ym9yZGVyQm94UmVjdCgpOwor
ICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikpCisgICAgICAgICAg
ICAgICAgICAgIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKS5ib3JkZXJCb3hS
ZWN0KCk7CiAKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxW
YWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWCgpLCBi
b3gud2lkdGgoKSksIHN0eWxlLmdldCgpKSk7CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5k
KHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLT5wZXJz
cGVjdGl2ZU9yaWdpblkoKSwgYm94LmhlaWdodCgpKSwgc3R5bGUuZ2V0KCkpKTsKQEAgLTI3NjYs
OCArMjc2Niw4IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6
OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0CiAgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgp
OwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVj
dCBib3g7Ci0gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpKQotICAgICAgICAg
ICAgICAgICAgICBib3ggPSB0b1JlbmRlckJveChyZW5kZXJlciktPmJvcmRlckJveFJlY3QoKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQm94PigqcmVuZGVyZXIpKQorICAgICAgICAg
ICAgICAgICAgICBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuYm9yZGVyQm94
UmVjdCgpOwogCiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVs
VmFsdWUobWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5YKCksIGJv
eC53aWR0aCgpKSwgc3R5bGUuZ2V0KCkpKTsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
em9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnRyYW5z
Zm9ybU9yaWdpblkoKSwgYm94LmhlaWdodCgpKSwgc3R5bGUuZ2V0KCkpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcAppbmRleCBjMWExOGJlNTdhMjM1MTJmNWU0Njc4NjBkMjQwZTdk
MzU1MzJlYzAwLi4xNDc2ZjIzYTQ4MTVhM2VlMzc5ZDlkNGNmM2JlM2NjNzcxNzdlYWNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCkBAIC04NzAsOCArODcwLDcgQEAgYm9vbCBD
b250YWluZXJOb2RlOjpnZXRMb3dlclJpZ2h0Q29ybmVyKEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAogCiAgICAgUmVuZGVyT2JqZWN0KiBvID0gcmVuZGVyZXIoKTsKICAgICBpZiAoIW8tPmlzSW5s
aW5lKCkgfHwgby0+aXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgIFJlbmRlckJveCogYm94ID0gdG9S
ZW5kZXJCb3gobyk7Ci0gICAgICAgIHBvaW50ID0gby0+bG9jYWxUb0Fic29sdXRlKExheW91dFBv
aW50KGJveC0+c2l6ZSgpKSwgVXNlVHJhbnNmb3Jtcyk7CisgICAgICAgIHBvaW50ID0gby0+bG9j
YWxUb0Fic29sdXRlKExheW91dFBvaW50KGRvd25jYXN0PFJlbmRlckJveD4oKm8pLnNpemUoKSks
IFVzZVRyYW5zZm9ybXMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCmluZGV4IDZlODllYjc2Y2U4MmMyZTc5NDA4NzIyYTU1NjAwOWUzMTYwZDU2
MzMuLjhmNjc2ZjA2MWU1MDc3YWEwN2JjMDhkMDZmZDU5OWM0NmNkZmE2ZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcApAQCAtNTQ1Nyw5ICs1NDU3LDkgQEAgdm9pZCBEb2N1bWVudDo6d2Via2l0
V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKICAgICAvLyBh
IGJveCB3aWxsIGhhdmUgYSBmcmFtZVJlY3QuICBUaGUgcGxhY2Vob2xkZXIgd2lsbCBiZSBjcmVh
dGVkIGluIHNldEZ1bGxTY3JlZW5SZW5kZXJlcigpCiAgICAgLy8gZHVyaW5nIGxheW91dC4KICAg
ICBhdXRvIHJlbmRlcmVyID0gbV9mdWxsU2NyZWVuRWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBi
b29sIHNob3VsZENyZWF0ZVBsYWNlaG9sZGVyID0gcmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzQm94
KCk7CisgICAgYm9vbCBzaG91bGRDcmVhdGVQbGFjZWhvbGRlciA9IGlzPFJlbmRlckJveD4ocmVu
ZGVyZXIpOwogICAgIGlmIChzaG91bGRDcmVhdGVQbGFjZWhvbGRlcikgewotICAgICAgICBtX3Nh
dmVkUGxhY2Vob2xkZXJGcmFtZVJlY3QgPSB0b1JlbmRlckJveChyZW5kZXJlciktPmZyYW1lUmVj
dCgpOworICAgICAgICBtX3NhdmVkUGxhY2Vob2xkZXJGcmFtZVJlY3QgPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KCpyZW5kZXJlcikuZnJhbWVSZWN0KCk7CiAgICAgICAgIG1fc2F2ZWRQbGFjZWhvbGRl
clJlbmRlclN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKCZyZW5kZXJlci0+c3R5bGUoKSk7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggYTViMDQ1ZDY5OTdlZTUyYzdhMDkyYjQ1
ZjhjYTZiMjY2MjEzYzhmZC4uMDRhNmVkZDc1Njc4MWMwOWM5Mjc3NTk5MzJlZWEyNGVlZTQ0ZjU1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtNjA4LDcgKzYwOCw3IEBAIHZvaWQgRWxlbWVu
dDo6c2Nyb2xsQnlVbml0cyhpbnQgdW5pdHMsIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
KQogICAgICAgICB1bml0cyA9IC11bml0czsKICAgICB9CiAgICAgRWxlbWVudCogc3RvcEVsZW1l
bnQgPSB0aGlzOwotICAgIHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5zY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgdW5pdHMsICZzdG9wRWxlbWVudCk7CisgICAgZG93bmNhc3Q8UmVuZGVy
Qm94PigqcmVuZGVyZXIoKSkuc2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHVuaXRzLCAm
c3RvcEVsZW1lbnQpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnNjcm9sbEJ5TGluZXMoaW50IGxpbmVz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCmluZGV4IGJkYWQ2OWJjOWQxYTc5OWJiYjYxMmM3ZDRmYmExMmQ0ZWY4
YmMzODQuLjMxYjMyZjUwZjRkZWQ2N2Y1YWQ1NTZjN2NiMzBiNzI4Njk4Mjk5MWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKQEAgLTIxMjYsMTIgKzIxMjYsMTIgQEAgdm9pZCBOb2RlOjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgICAgICAg
ICAgd2hpbGUgKHJlbmRlcmVyICYmICghcmVuZGVyZXItPmlzQm94KCkgfHwgIXRvUmVuZGVyQm94
KHJlbmRlcmVyKS0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpKQorICAgICAg
ICAgICAgd2hpbGUgKHJlbmRlcmVyICYmICghaXM8UmVuZGVyQm94PigqcmVuZGVyZXIpIHx8ICFk
b3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFi
bGVBcmVhKCkpKQogICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgp
OwogCiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICAgICAgICAgICAgICBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCkuc3RhcnRQYW5TY3JvbGxpbmcodG9SZW5kZXJCb3gocmVuZGVyZXIp
KTsKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLnN0YXJ0UGFuU2Ny
b2xsaW5nKGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogI2VuZGlmCkBAIC0yMTQ5LDcgKzIxNDksNyBAQCB2b2lkIE5vZGU6OmRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIFBM
QVRGT1JNKElPUykKICAgICB9IGVsc2UgaWYgKGlzPFRvdWNoRXZlbnQ+KCpldmVudCkgJiYgZXZl
bnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkgewogICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICAgICAgd2hpbGUgKHJlbmRl
cmVyICYmICghcmVuZGVyZXItPmlzQm94KCkgfHwgIXRvUmVuZGVyQm94KHJlbmRlcmVyKS0+Y2Fu
QmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpKQorICAgICAgICB3aGlsZSAocmVuZGVy
ZXIgJiYgKCFpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikgfHwgIWRvd25jYXN0PFJlbmRlckJveD4o
KnJlbmRlcmVyKS5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkpCiAgICAgICAg
ICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKIAogICAgICAgICBpZiAocmVuZGVy
ZXIgJiYgcmVuZGVyZXItPm5vZGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggNjQy
Y2UyNjY2MGY5YWQ1NDkyMzg3YzIzZTM5YjczYTYxZjMyMzBiNy4uODA1NjEyZTJkMTdmMzU4N2Vj
ODMxODFlMzIzZmE0NGMzYmM5NGQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCkBAIC01MzMs
NyArNTMzLDcgQEAgc3RhdGljIGJvb2wgZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3Np
dGlvbnMoTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFRo
ZXJlIGlzIGEgVmlzaWJsZVBvc2l0aW9uIGluc2lkZSBhbiBlbXB0eSBpbmxpbmUtYmxvY2sgY29u
dGFpbmVyLgotICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkgJiYgY2Fu
SGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhub2RlKSAmJiB0b1JlbmRlckJveChub2RlLT5yZW5kZXJl
cigpKS0+aGVpZ2h0KCkgIT0gMCAmJiAhbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgIHJldHVybiBu
b2RlLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkgJiYgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGlu
Zyhub2RlKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KCpub2RlLT5yZW5kZXJlcigpKS5oZWlnaHQo
KSAmJiAhbm9kZS0+Zmlyc3RDaGlsZCgpOwogfQogCiBzdGF0aWMgTm9kZSogZW5jbG9zaW5nVmlz
dWFsQm91bmRhcnkoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGY3Njc2ZTkwYWFiNTgwMDJiN2RhMmFkYTNk
NDhjNThjMjBhMDkxZDAuLmMxZGU0ZGE2MjhhZGM5MTNlNGUwNDgyMzc3NjRhZjgzZjE1YjIxYjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVy
LmNwcApAQCAtMzksNiArMzksOCBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW1v
dmVOb2RlQ29tbWFuZC5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRl
clRhYmxlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0aWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcyLDcgKzc0LDcgQEAgc3Rh
dGljIGJvb2wgaXNEZWxldGFibGVFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCiAgICAgY29uc3Qg
dW5zaWduZWQgbWluaW11bVZpc2libGVCb3JkZXJzID0gMTsKIAogICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRl
cmVyLT5pc0JveCgpKQorICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcikpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIERpc2FsbG93IHRoZSBib2R5IGVsZW1lbnQgc2luY2Ug
aXQgaXNuJ3QgcHJhY3RpY2FsIHRvIGRlbGV0ZSwgYW5kIHRoZSBkZWxldGlvbiBVSSB3b3VsZCBi
ZSBjbGlwcGVkLgpAQCAtODcsMzAgKzg5LDMwIEBAIHN0YXRpYyBib29sIGlzRGVsZXRhYmxlRWxl
bWVudChjb25zdCBOb2RlKiBub2RlKQogICAgIGlmIChpc01haWxCbG9ja3F1b3RlKG5vZGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94
KHJlbmRlcmVyKTsKLSAgICBJbnRSZWN0IGJvcmRlckJvdW5kaW5nQm94ID0gYm94LT5ib3JkZXJC
b3VuZGluZ0JveCgpOworICAgIFJlbmRlckJveCYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94Pigq
cmVuZGVyZXIpOworICAgIEludFJlY3QgYm9yZGVyQm91bmRpbmdCb3ggPSBib3guYm9yZGVyQm91
bmRpbmdCb3goKTsKICAgICBpZiAoYm9yZGVyQm91bmRpbmdCb3gud2lkdGgoKSA8IG1pbmltdW1X
aWR0aCB8fCBib3JkZXJCb3VuZGluZ0JveC5oZWlnaHQoKSA8IG1pbmltdW1IZWlnaHQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICgoYm9yZGVyQm91bmRpbmdCb3gud2lkdGgoKSAq
IGJvcmRlckJvdW5kaW5nQm94LmhlaWdodCgpKSA8IG1pbmltdW1BcmVhKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoYm94LT5pc1RhYmxlKCkpCisgICAgaWYgKGlzPFJlbmRlclRh
YmxlPihib3gpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChub2RlLT5oYXNUYWdO
YW1lKHVsVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKG9sVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1l
KGlmcmFtZVRhZykpCisgICAgaWYgKGlzPEhUTUxVTGlzdEVsZW1lbnQ+KCpub2RlKSB8fCBpczxI
VE1MT0xpc3RFbGVtZW50Pigqbm9kZSkgfHwgaXM8SFRNTElGcmFtZUVsZW1lbnQ+KCpub2RlKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoYm94LT5pc091dE9mRmxvd1Bvc2l0aW9u
ZWQoKSkKKyAgICBpZiAoYm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIGlmIChib3gtPmlzUmVuZGVyQmxvY2soKSAmJiAhYm94LT5pc1RhYmxl
Q2VsbCgpKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IGJveC0+c3R5bGUo
KTsKKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KGJveCkgJiYgIWlzPFJlbmRlclRhYmxlQ2VsbD4o
Ym94KSkgeworICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3guc3R5bGUoKTsK
IAogICAgICAgICAvLyBBbGxvdyBibG9ja3MgdGhhdCBoYXZlIGJhY2tncm91bmQgaW1hZ2VzCiAg
ICAgICAgIGlmIChzdHlsZS5oYXNCYWNrZ3JvdW5kSW1hZ2UoKSkgewogICAgICAgICAgICAgZm9y
IChjb25zdCBGaWxsTGF5ZXIqIGJhY2tncm91bmQgPSBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCk7
IGJhY2tncm91bmQ7IGJhY2tncm91bmQgPSBiYWNrZ3JvdW5kLT5uZXh0KCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYmFja2dyb3VuZC0+aW1hZ2UoKSAmJiBiYWNrZ3JvdW5kLT5pbWFnZSgpLT5j
YW5SZW5kZXIoYm94LCAxKSkKKyAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZC0+aW1hZ2Uo
KSAmJiBiYWNrZ3JvdW5kLT5pbWFnZSgpLT5jYW5SZW5kZXIoJmJveCwgMSkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMjUs
MTMgKzEyNywxMyBAQCBzdGF0aWMgYm9vbCBpc0RlbGV0YWJsZUVsZW1lbnQoY29uc3QgTm9kZSog
bm9kZSkKICAgICAgICAgaWYgKCFwYXJlbnROb2RlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgIGF1dG8gcGFyZW50UmVuZGVyZXIgPSBwYXJlbnROb2RlLT5yZW5kZXJlcigp
OworICAgICAgICBhdXRvKiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudE5vZGUtPnJlbmRlcmVyKCk7
CiAgICAgICAgIGlmICghcGFyZW50UmVuZGVyZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlID0gcGFyZW50UmVuZGVy
ZXItPnN0eWxlKCk7CiAKLSAgICAgICAgaWYgKGJveC0+aGFzQmFja2dyb3VuZCgpICYmICghcGFy
ZW50UmVuZGVyZXItPmhhc0JhY2tncm91bmQoKSB8fCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpICE9IHBhcmVudFN0eWxlLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpKQorICAgICAgICBpZiAoYm94
Lmhhc0JhY2tncm91bmQoKSAmJiAoIXBhcmVudFJlbmRlcmVyLT5oYXNCYWNrZ3JvdW5kKCkgfHwg
c3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSAh
PSBwYXJlbnRTdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggYzBjMTI4N2VkMjcwNzNiZDJkMzcwZTUw
NzY5Y2Q4MzQ0Yjk5NmM3Yi4uNTExY2IwMmFlOGJmMWNkZmIxZTQyZDVkYjc4NzkzMGIyOGQyZmM5
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0yNTEsMTMg
KzI1MSwxMyBAQCBzdGF0aWMgdW5zaWduZWQgdmVydGljYWxTY3JvbGxEaXN0YW5jZShGcmFtZSYg
ZnJhbWUpCiAgICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBmcmFtZS5kb2N1bWVudCgpLT5m
b2N1c2VkRWxlbWVudCgpOwogICAgIGlmICghZm9jdXNlZEVsZW1lbnQpCiAgICAgICAgIHJldHVy
biAwOwotICAgIGF1dG8gcmVuZGVyZXIgPSBmb2N1c2VkRWxlbWVudC0+cmVuZGVyZXIoKTsKLSAg
ICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNCb3goKSkKKyAgICBhdXRvKiByZW5kZXJl
ciA9IGZvY3VzZWRFbGVtZW50LT5yZW5kZXJlcigpOworICAgIGlmICghaXM8UmVuZGVyQm94Pihy
ZW5kZXJlcikpCiAgICAgICAgIHJldHVybiAwOwogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIGlmICghKHN0eWxlLm92ZXJmbG93WSgpID09IE9T
Q1JPTEwgfHwgc3R5bGUub3ZlcmZsb3dZKCkgPT0gT0FVVE8gfHwgZm9jdXNlZEVsZW1lbnQtPmhh
c0VkaXRhYmxlU3R5bGUoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGludCBoZWlnaHQgPSBz
dGQ6Om1pbjxpbnQ+KHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+Y2xpZW50SGVpZ2h0KCksIGZyYW1l
LnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpKTsKKyAgICBpbnQgaGVpZ2h0ID0gc3RkOjptaW48aW50
Pihkb3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuY2xpZW50SGVpZ2h0KCksIGZyYW1lLnZp
ZXcoKS0+dmlzaWJsZUhlaWdodCgpKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFNjcm9sbGJhcjo6cGFnZVN0ZXAoaGVpZ2h0KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggOGM3NjYyMTIxMDk4MDVkMmI4YTEyMzEzOGY5MDQ1
OTc5NWUyOWVmYi4uOWY5M2E4NDZjMjQ5ZGZhMjMxYzE1MDk0YWJlMzMxYjBmYzk0NTc4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTE0ODIsOCArMTQ4
Miw4IEBAIHZvaWQgQ2FyZXRCYXNlOjpwYWludENhcmV0KE5vZGUqIG5vZGUsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UG9pCiAKICAgICBMYXlvdXRSZWN0IGRyYXdpbmdS
ZWN0ID0gbG9jYWxDYXJldFJlY3RXaXRob3V0VXBkYXRlKCk7CiAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHJlbmRlcmVyRm9yQ2FyZXRQYWludGluZyhub2RlKTsKLSAgICBpZiAocmVuZGVy
ZXIgJiYgcmVuZGVyZXItPmlzQm94KCkpCi0gICAgICAgIHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+
ZmxpcEZvcldyaXRpbmdNb2RlKGRyYXdpbmdSZWN0KTsKKyAgICBpZiAoaXM8UmVuZGVyQm94Pihy
ZW5kZXJlcikpCisgICAgICAgIGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKS5mbGlwRm9y
V3JpdGluZ01vZGUoZHJhd2luZ1JlY3QpOwogICAgIGRyYXdpbmdSZWN0Lm1vdmVCeShyb3VuZGVk
SW50UG9pbnQocGFpbnRPZmZzZXQpKTsKICAgICBMYXlvdXRSZWN0IGNhcmV0ID0gaW50ZXJzZWN0
aW9uKGRyYXdpbmdSZWN0LCBjbGlwUmVjdCk7CiAgICAgaWYgKGNhcmV0LmlzRW1wdHkoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCA0ODc1YTkwYTAxMTJhZmNh
M2Y0NTNhMDhlMTE2ZmYyN2I2OTQ1M2M0Li44NDUyNWJlZjhlMjNhYjMyODkyYTQ4MGFkMTJkNjBm
MDg0NjkyMmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0y
MDcsOSArMjA3LDkgQEAgc3RhdGljIE5vZGUqIG5leHRJblByZU9yZGVyQ3Jvc3NpbmdTaGFkb3dC
b3VuZGFyaWVzKE5vZGUmIHJhbmdlRW5kQ29udGFpbmVyLCBpbnQKIHN0YXRpYyBpbmxpbmUgYm9v
bCBmdWxseUNsaXBzQ29udGVudHMoTm9kZSYgbm9kZSkKIHsKICAgICBhdXRvKiByZW5kZXJlciA9
IG5vZGUucmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNCb3go
KSB8fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQorICAgIGlmICghaXM8UmVuZGVyQm94
PihyZW5kZXJlcikgfHwgIXJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiB0b1JlbmRlckJveChyZW5kZXJlciktPnNpemUoKS5pc0Vt
cHR5KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKS5zaXplKCku
aXNFbXB0eSgpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaWdub3Jlc0NvbnRhaW5lckNsaXAo
Tm9kZSYgbm9kZSkKQEAgLTg4MSw3ICs4ODEsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRFbWl0RXh0
cmFOZXdsaW5lRm9yTm9kZShOb2RlJiBub2RlKQogICAgIC8vIHdpbGwgd29yayByaWdodCBldmVu
IGlmIGJvdGggdGhlIDxkaXY+IGFuZCB0aGUgPHA+IGhhdmUgYm90dG9tIG1hcmdpbnMuCiAKICAg
ICBhdXRvKiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8
ICFyZW5kZXJlci0+aXNCb3goKSkKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBOT1RFOiBXZSBvbmx5IGRvIHRoaXMgZm9y
IGEgc2VsZWN0IHNldCBvZiBub2RlcywgYW5kIFdpbklFIGFwcGVhcnMgbm90IHRvIGRvIHRoaXMg
YXQgYWxsLgpAQCAtODkyLDggKzg5Miw4IEBAIHN0YXRpYyBib29sIHNob3VsZEVtaXRFeHRyYU5l
d2xpbmVGb3JOb2RlKE5vZGUmIG5vZGUpCiAgICAgaWYgKCFoYXNIZWFkZXJUYWcoZWxlbWVudCkg
JiYgIWlzPEhUTUxQYXJhZ3JhcGhFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaW50IGJvdHRvbU1hcmdpbiA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+Y29s
bGFwc2VkTWFyZ2luQWZ0ZXIoKTsKLSAgICBpbnQgZm9udFNpemUgPSB0b1JlbmRlckJveChyZW5k
ZXJlciktPnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsKKyAg
ICBpbnQgYm90dG9tTWFyZ2luID0gZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLmNvbGxh
cHNlZE1hcmdpbkFmdGVyKCk7CisgICAgaW50IGZvbnRTaXplID0gZG93bmNhc3Q8UmVuZGVyQm94
PigqcmVuZGVyZXIpLnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUo
KTsKICAgICByZXR1cm4gYm90dG9tTWFyZ2luICogMiA+PSBmb250U2l6ZTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAppbmRleCBmZDVhYTgxOWQ5MWMwN2FhZmU1ZDU0
NTEwMWI0YzZjMmNjZDY0YjBkLi42ZmI0YWNiN2FjMDk2NjA1NjFmOWQzOGVjMWQ1YWJiZWE3YzM2
ODYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcApAQCAtMTMxMCw4ICsx
MzEwLDggQEAgSW50UmVjdCBhYnNvbHV0ZUJvdW5kc0ZvckxvY2FsQ2FyZXRSZWN0KFJlbmRlck9i
amVjdCogcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nLAogICAgICAgICByZXR1cm4gSW50UmVjdCgp
OwogCiAgICAgTGF5b3V0UmVjdCBsb2NhbFJlY3QocmVjdCk7Ci0gICAgaWYgKHJlbmRlcmVyRm9y
Q2FyZXRQYWludGluZy0+aXNCb3goKSkKLSAgICAgICAgdG9SZW5kZXJCb3gocmVuZGVyZXJGb3JD
YXJldFBhaW50aW5nKS0+ZmxpcEZvcldyaXRpbmdNb2RlKGxvY2FsUmVjdCk7CisgICAgaWYgKGlz
PFJlbmRlckJveD4oKnJlbmRlcmVyRm9yQ2FyZXRQYWludGluZykpCisgICAgICAgIGRvd25jYXN0
PFJlbmRlckJveD4oKnJlbmRlcmVyRm9yQ2FyZXRQYWludGluZykuZmxpcEZvcldyaXRpbmdNb2Rl
KGxvY2FsUmVjdCk7CiAgICAgcmV0dXJuIHJlbmRlcmVyRm9yQ2FyZXRQYWludGluZy0+bG9jYWxU
b0Fic29sdXRlUXVhZChGbG9hdFJlY3QobG9jYWxSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3go
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5j
cHAKaW5kZXggYzJhYjIwOWMzODBjNjE1ZDE2YjdhNzFkYzEzNzFiNzBkZThlODIxZC4uZTMyNjBj
YmM1ZTcxOThmNjhiNjM1MGIwMmI3MDJhYTUzMjZkMDM3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0zMDUsNyArMzA1LDcgQEAgYm9v
bCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CiB7CiAgICAgLy8g
SWYgdGhlcmUncyBhIHJlbmRlcmVyLCBtYWtlIHN1cmUgdGhlIHNpemUgaXNuJ3QgZW1wdHksIGJ1
dCBpZiB0aGVyZSdzIG5vIHJlbmRlcmVyLAogICAgIC8vIGl0IG1pZ2h0IHN0aWxsIGJlIGZvY3Vz
YWJsZSBpZiBpdCdzIGluIGEgY2FudmFzIHN1YnRyZWUgKGhhbmRsZWQgaW4gTm9kZTo6aXNGb2N1
c2FibGUpLgotICAgIGlmIChyZW5kZXJlcigpICYmICghcmVuZGVyZXIoKS0+aXNCb3goKSB8fCB0
b1JlbmRlckJveChyZW5kZXJlcigpKS0+c2l6ZSgpLmlzRW1wdHkoKSkpCisgICAgaWYgKHJlbmRl
cmVyKCkgJiYgKCFpczxSZW5kZXJCb3g+KCpyZW5kZXJlcigpKSB8fCBkb3duY2FzdDxSZW5kZXJC
b3g+KCpyZW5kZXJlcigpKS5zaXplKCkuaXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIC8vIEhUTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSBoYW5kbGVzIHZpc2liaWxpdHkgYW5k
IGNhbGxzIHN1cG9ydHNGb2N1cyB3aGljaAogICAgIC8vIHdpbGwgY292ZXIgdGhlIGRpc2FibGVk
IGNhc2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNw
cAppbmRleCA0MGZhMGRmODA0NjMzYWVjOWRlZGY2OTZjMDU2ODcyZjcxNWJmYWM1Li5jMWVjMjU3
MTcxOGI4ZmNmYTg2ZmMyOTkwNzhkYzU4NTIxOWQ5ZjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKQEAgLTU0MCw3ICs1NDAsNyBAQCB2b2lk
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmNoZWNrU2l6ZUNoYW5nZUZvclNuYXBzaG90dGluZygp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fbmVlZHNDaGVja0ZvclNpemVDaGFuZ2UgPSBmYWxz
ZTsKLSAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIo
KSktPmNvbnRlbnRCb3hSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94UmVjdCA9IGRv
d25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKCkpLmNvbnRlbnRCb3hSZWN0KCk7CiAgICAgaW50
IGNvbnRlbnRXaWR0aCA9IGNvbnRlbnRCb3hSZWN0LndpZHRoKCk7CiAgICAgaW50IGNvbnRlbnRI
ZWlnaHQgPSBjb250ZW50Qm94UmVjdC5oZWlnaHQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcAppbmRleCA0Zjg5ODM2MmY4NTEyN2ZkMTkzMDk5MmY1YTA1Mzlm
NDliZWIyMjBiLi5hODhhZDdkZmRkYWY1ZmIyNmIwNDNiZWJjMzNiZGUwYWNkMTA1NzQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcApAQCAtMTM2MSw3ICsxMzYx
LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIo
RXZlbnQqIGV2ZW50KQogCiAgICAgICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5kbGVk
KCk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlbW92ZUV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KCpldmVudCkgJiYgIXRvUmVuZGVy
Qm94KHJlbmRlcmVyKCkpLT5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkgewor
ICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZl
bnQgJiYgaXM8TW91c2VFdmVudD4oKmV2ZW50KSAmJiAhZG93bmNhc3Q8UmVuZGVyQm94PigqcmVu
ZGVyZXIoKSkuY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpIHsKICAgICAgICAg
TW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7CiAg
ICAgICAgIGlmIChtb3VzZUV2ZW50LmJ1dHRvbigpICE9IExlZnRCdXR0b24gfHwgIW1vdXNlRXZl
bnQuYnV0dG9uRG93bigpKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKaW5kZXggZGRjNWE1M2E4Yjdi
MjU2OTBiZThiZGE2NTM1ZGYwMmYyMDE1OGVkMy4uMjYyYzYwMDZmNTNmODFmZmM3ZmFmODIxYzk2
ZTZkMTE4ODNjY2RmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xp
ZGVyVGh1bWJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlk
ZXJUaHVtYkVsZW1lbnQuY3BwCkBAIC0yNTYsNyArMjU2LDcgQEAgdm9pZCBTbGlkZXJUaHVtYkVs
ZW1lbnQ6OnNldFBvc2l0aW9uRnJvbVBvaW50KGNvbnN0IExheW91dFBvaW50JiBhYnNvbHV0ZVBv
aW50KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBEbyBhbGwgdGhlIHRyYWNraW5nIG1hdGgg
cmVsYXRpdmUgdG8gdGhlIGlucHV0J3MgcmVuZGVyZXIncyBib3guCi0gICAgUmVuZGVyQm94JiBp
bnB1dFJlbmRlcmVyID0gKnRvUmVuZGVyQm94KGlucHV0LT5yZW5kZXJlcigpKTsKKyAgICBSZW5k
ZXJCb3gmIGlucHV0UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCppbnB1dC0+cmVuZGVy
ZXIoKSk7CiAgICAgUmVuZGVyQm94JiB0cmFja1JlbmRlcmVyID0gKnRyYWNrRWxlbWVudC0+cmVu
ZGVyQm94KCk7CiAKICAgICBib29sIGlzVmVydGljYWwgPSBoYXNWZXJ0aWNhbEFwcGVhcmFuY2Uo
aW5wdXQuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJs
YXkuY3BwCmluZGV4IDkyMzNlNmNiMzFhNjJiZjJmOTBiYWY0MzFmMTkzYWU3MDE4YTNmNWEuLjg0
ZDQ5MjIxMDUzMjdiOTZkYTk0NGQ4ZGIwZDMzOTFmMjE1NzJjOTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTcyOSw5ICs3MjksOSBAQCBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRWxlbWVudElu
Zm8oTm9kZSogbm9kZSkKICAgICB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBpZiAo
cmVuZGVyZXItPmlzQm94KCkpIHsKLSAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1Jl
bmRlckJveChyZW5kZXJlcik7Ci0gICAgICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBz
aGFwZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yU2hhcGVPdXRzaWRlKGNvbnRhaW5pbmdGcmFtZSwg
cmVuZGVyQm94KSkKKyAgICBpZiAoaXM8UmVuZGVyQm94PigqcmVuZGVyZXIpKSB7CisgICAgICAg
IGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKTsKKyAgICAg
ICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNoYXBlT2JqZWN0ID0gYnVpbGRPYmplY3RG
b3JTaGFwZU91dHNpZGUoY29udGFpbmluZ0ZyYW1lLCAmcmVuZGVyQm94KSkKICAgICAgICAgICAg
IGVsZW1lbnRJbmZvLT5zZXRPYmplY3QoInNoYXBlT3V0c2lkZUluZm8iLCBzaGFwZU9iamVjdC5y
ZWxlYXNlKCkpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9BdXRvc2Nyb2xsQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3Jv
bGxDb250cm9sbGVyLmNwcAppbmRleCA4NGU2OTg2YWVhNWJlOTBhOGVhMWVjNGZiMDVkMzI2NTk5
NDNhNWIwLi4yOTk3MWU5NzIxMDMzZGZiMWY3MGQ3ZWY5OTc5ZDRkNTZjZmY1N2RmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmNwcApAQCAtMTM1LDkgKzEz
NSw5IEBAIHZvaWQgQXV0b3Njcm9sbENvbnRyb2xsZXI6OnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJl
cigpCiAgICAgICAgIHJlbmRlcmVyID0gbm9kZUF0UG9pbnQtPnJlbmRlcmVyKCk7CiAjZW5kaWYK
IAotICAgIHdoaWxlIChyZW5kZXJlciAmJiAhKHJlbmRlcmVyLT5pc0JveCgpICYmIHRvUmVuZGVy
Qm94KHJlbmRlcmVyKS0+Y2FuQXV0b3Njcm9sbCgpKSkKKyAgICB3aGlsZSAocmVuZGVyZXIgJiYg
IShpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVy
ZXIpLmNhbkF1dG9zY3JvbGwoKSkpCiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVu
dCgpOwotICAgIG1fYXV0b3Njcm9sbFJlbmRlcmVyID0gcmVuZGVyZXIgJiYgcmVuZGVyZXItPmlz
Qm94KCkgPyB0b1JlbmRlckJveChyZW5kZXJlcikgOiAwOworICAgIG1fYXV0b3Njcm9sbFJlbmRl
cmVyID0gaXM8UmVuZGVyQm94PihyZW5kZXJlcikgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRl
cmVyKSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgQXV0b3Njcm9sbENvbnRyb2xsZXI6OnVwZGF0ZURy
YWdBbmREcm9wKE5vZGUqIGRyb3BUYXJnZXROb2RlLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3Np
dGlvbiwgZG91YmxlIGV2ZW50VGltZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApp
bmRleCBiODY3YzQ3ZWQyZTI1NTM1OTU1MDdlNjFiYzNkM2ZhNWQyMjQ0OTIyLi5lNWNhZDZiYWZm
YmRlYzM3NzdjZDg3YmZjMGRmOTIwZTVlYzIwOTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCkBAIC0xMDY3LDkgKzEwNjcsOSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGlkUGFu
U2Nyb2xsU3RvcCgpCiB2b2lkIEV2ZW50SGFuZGxlcjo6c3RhcnRQYW5TY3JvbGxpbmcoUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIpCiB7CiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICBpZiAoIXJlbmRl
cmVyLT5pc0JveCgpKQorICAgIGlmICghaXM8UmVuZGVyQm94PigqcmVuZGVyZXIpKQogICAgICAg
ICByZXR1cm47Ci0gICAgbV9hdXRvc2Nyb2xsQ29udHJvbGxlci0+c3RhcnRQYW5TY3JvbGxpbmco
dG9SZW5kZXJCb3gocmVuZGVyZXIpLCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uKCkpOworICAgIG1f
YXV0b3Njcm9sbENvbnRyb2xsZXItPnN0YXJ0UGFuU2Nyb2xsaW5nKGRvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIpLCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uKCkpOwogICAgIGludmFsaWRhdGVD
bGljaygpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggN2U2NDU2
MDVkZGM3MjYyMDczODk5MTllZmJmZDBhMzIxYzk4NGM2My4uMjQ5NzkxOThmNzE5YTMzN2YxYmUy
NzA5ZGJjMTc2Y2JhMTMzOTQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMTQw
NCwxMiArMTQwNCwxMCBAQCBSZW5kZXJCb3gqIEZyYW1lVmlldzo6ZW1iZWRkZWRDb250ZW50Qm94
KCkgY29uc3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZW5kZXJPYmplY3QqIGZp
cnN0Q2hpbGQgPSByZW5kZXJWaWV3LT5maXJzdENoaWxkKCk7Ci0gICAgaWYgKCFmaXJzdENoaWxk
IHx8ICFmaXJzdENoaWxkLT5pc0JveCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IC8vIEN1cmVudGx5IG9ubHkgZW1iZWRkZWQgU1ZHIGRvY3VtZW50cyBwYXJ0aWNpcGF0ZSBpbiB0
aGUgc2l6ZS1uZWdvdGlhdGlvbiBsb2dpYy4KLSAgICBpZiAodG9SZW5kZXJCb3goZmlyc3RDaGls
ZCktPmlzU1ZHUm9vdCgpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3goZmlyc3RDaGlsZCk7
CisgICAgaWYgKGlzPFJlbmRlclNWR1Jvb3Q+KGZpcnN0Q2hpbGQpKQorICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyU1ZHUm9vdD4oZmlyc3RDaGlsZCk7CiAKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvR2VzdHVyZVRhcEhpZ2hsaWdo
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvR2VzdHVyZVRhcEhpZ2hsaWdodGVyLmNwcApp
bmRleCA1NmNiYmQ5NDUwYjQ3NmUxY2VkMmNmZTUwNjE0ZGQ0MGFiMDE5NmQ4Li4yNzlmYTllOThm
MDU5Njg2NzcyZWRjNjAzZmE5ZjIzMzJjMmIwMDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0dlc3R1cmVUYXBIaWdobGlnaHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9HZXN0dXJlVGFwSGlnaGxpZ2h0ZXIuY3BwCkBAIC0yMjYsOCArMjI2LDcgQEAgUGF0aCBhYnNv
bHV0ZVBhdGhGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIGNvbnN0IG8pCiAgICAgICAgICAgICAg
ICAgICAgIHJpbmdSZWN0ID0gTGF5b3V0UmVjdCgpOwogICAgICAgICAgICAgICAgIGN1cnJlbnRS
ZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7CiAKLSAgICAgICAgICAgICAgICBBU1NFUlQobGF5ZXJS
ZW5kZXJlci0+aXNCb3goKSk7Ci0gICAgICAgICAgICAgICAgcmluZ1JlY3QuaW50ZXJzZWN0KHRv
UmVuZGVyQm94KGxheWVyUmVuZGVyZXIpLT5ib3JkZXJCb3hSZWN0KCkpOworICAgICAgICAgICAg
ICAgIHJpbmdSZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KCpsYXllclJlbmRlcmVy
KS5ib3JkZXJCb3hSZWN0KCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKHJpbmdSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3Bh
dGlhbE5hdmlnYXRpb24uY3BwCmluZGV4IGIxNzc5NjhmN2IyMTgzMjQ3ZThkM2NkNzEyODliNjAz
YmFiNDdiMTkuLjY1NTA3Zjg4MjQxYzFhMTFkZmYzNjA2OGUxZmNhYzQ2YzA0YmQxOWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC00MjQsNyArNDI0LDcg
QEAgYm9vbCBpc1Njcm9sbGFibGVOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVy
ZXIoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5pc0JveCgpICYmIHRvUmVuZGVyQm94KHJl
bmRlcmVyKS0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkgJiYgbm9kZS0+aGFz
Q2hpbGROb2RlcygpOworICAgICAgICByZXR1cm4gaXM8UmVuZGVyQm94PigqcmVuZGVyZXIpICYm
IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKS5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xs
YWJsZUFyZWEoKSAmJiBub2RlLT5oYXNDaGlsZE5vZGVzKCk7CiAKICAgICByZXR1cm4gZmFsc2U7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0
eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0
eUFuaW1hdGlvbi5jcHAKaW5kZXggZDQwODI5MWIyMmI5NDEzMzQ3NDg1MGIxMTViNzQ4ZjkyN2I1
OTE1Ni4uZDA4NzZhZGYwOWE2M2NkZDA1NzI0YTEyZjgzM2JiMmQxMmI4ZDEwYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9u
LmNwcApAQCAtMTE0LDExICsxMTQsMTEgQEAgc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8
U2hhZG93RGF0YT4gYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGMKICAgICAg
ICAgYmxlbmQoZnJvbS0+Y29sb3IoKSwgdG8tPmNvbG9yKCksIHByb2dyZXNzKSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9u
QmFzZSogYW5pbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgVHJhbnNm
b3JtT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uLCBj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiB0bywgZG91YmxlIHByb2dyZXNzKQogewotICAgIGlmIChhbmltLT5pc1RyYW5zZm9ybUZ1bmN0
aW9uTGlzdFZhbGlkKCkpCisgICAgaWYgKGFuaW1hdGlvbi0+aXNUcmFuc2Zvcm1GdW5jdGlvbkxp
c3RWYWxpZCgpKQogICAgICAgICByZXR1cm4gdG8uYmxlbmRCeU1hdGNoaW5nT3BlcmF0aW9ucyhm
cm9tLCBwcm9ncmVzcyk7Ci0gICAgcmV0dXJuIHRvLmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9s
YXRpb24oZnJvbSwgcHJvZ3Jlc3MsIGFuaW0tPnJlbmRlcmVyKCktPmlzQm94KCkgPyB0b1JlbmRl
ckJveChhbmltLT5yZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVjdCgpLnNpemUoKSA6IExheW91dFNp
emUoKSk7CisgICAgcmV0dXJuIHRvLmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oZnJv
bSwgcHJvZ3Jlc3MsIGlzPFJlbmRlckJveD4oKmFuaW1hdGlvbi0+cmVuZGVyZXIoKSkgPyBkb3du
Y2FzdDxSZW5kZXJCb3g+KCphbmltYXRpb24tPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKS5z
aXplKCkgOiBMYXlvdXRTaXplKCkpOwogfQogCiBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8Q2xp
cFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiwgQ2xpcFBhdGhP
cGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0aW9uKiB0bywgZG91YmxlIHByb2dyZXNzKQpA
QCAtMTYxLDExICsxNjEsMTEgQEAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+
IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiwgU2hhcGVWYWx1ZSoKIH0KICNlbmRpZgog
Ci1zdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29u
c3QgQW5pbWF0aW9uQmFzZSogYW5pbSwgRmlsdGVyT3BlcmF0aW9uKiBmcm9tT3AsIEZpbHRlck9w
ZXJhdGlvbiogdG9PcCwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9
IGZhbHNlKQorc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRG
dW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbiwgRmlsdGVyT3BlcmF0aW9uKiBmcm9t
T3AsIEZpbHRlck9wZXJhdGlvbiogdG9PcCwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9Q
YXNzdGhyb3VnaCA9IGZhbHNlKQogewogICAgIEFTU0VSVCh0b09wKTsKICAgICBpZiAodG9PcC0+
YmxlbmRpbmdOZWVkc1JlbmRlcmVyU2l6ZSgpKSB7Ci0gICAgICAgIExheW91dFNpemUgc2l6ZSA9
IGFuaW0tPnJlbmRlcmVyKCktPmlzQm94KCkgPyB0b1JlbmRlckJveChhbmltLT5yZW5kZXJlcigp
KS0+Ym9yZGVyQm94UmVjdCgpLnNpemUoKSA6IExheW91dFNpemUoKTsKKyAgICAgICAgTGF5b3V0
U2l6ZSBzaXplID0gaXM8UmVuZGVyQm94PigqYW5pbWF0aW9uLT5yZW5kZXJlcigpKSA/IGRvd25j
YXN0PFJlbmRlckJveD4oKmFuaW1hdGlvbi0+cmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpLnNp
emUoKSA6IExheW91dFNpemUoKTsKICAgICAgICAgcmV0dXJuIHRvT3AtPmJsZW5kKGZyb21PcCwg
cHJvZ3Jlc3MsIHNpemUsIGJsZW5kVG9QYXNzdGhyb3VnaCk7CiAgICAgfQogICAgIHJldHVybiB0
b09wLT5ibGVuZChmcm9tT3AsIHByb2dyZXNzLCBibGVuZFRvUGFzc3Rocm91Z2gpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAKaW5kZXggZmMyNjc4
NzBiYTNmOGZlZGEyNDRiYjlhYTA1Y2EwZmM1YmMwZDdhOS4uZGJlNGQwMTExNDkzODE4MzMyNTlk
NTJlYTk2NGFlN2M5ZjllNjc0OCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL1JlbmRlclRoZW1lRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
UmVuZGVyVGhlbWVFZmwuY3BwCkBAIC02MzMsMTIgKzYzMywxMiBAQCBib29sIFJlbmRlclRoZW1l
RWZsOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkgY29u
c3QKIAogaW50IFJlbmRlclRoZW1lRWZsOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9i
amVjdCYgb2JqZWN0KSBjb25zdAogewotICAgIGlmICghb2JqZWN0LmlzQm94KCkpCisgICAgaWYg
KCFpczxSZW5kZXJCb3g+KG9iamVjdCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKG9i
amVjdC5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQKICAgICB8fCAgb2JqZWN0
LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkKLSAgICAgICAgcmV0dXJuIHRvUmVu
ZGVyQm94KCZvYmplY3QpLT5tYXJnaW5Ub3AoKSArIHRvUmVuZGVyQm94KCZvYmplY3QpLT5oZWln
aHQoKSAtIDM7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KG9iamVjdCkubWFy
Z2luVG9wKCkgKyBkb3duY2FzdDxSZW5kZXJCb3g+KG9iamVjdCkuaGVpZ2h0KCkgLSAzOwogCiAg
ICAgcmV0dXJuIFJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKG9iamVjdCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBlMWNjMmJmYzY2YmQxNzIwZTI2MzI3
MmM1YmFmMmYyMzcwNDllZjhmLi44MTUzNjRiZGNhMjg3ZjkwNDViMTVjNWFiZjNkM2IyYjAxOWFh
YzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTExODUsMTEgKzEx
ODUsMTEgQEAgdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKICAgICAKICAgICBpZiAoIW1fZWxlbWVudC0+cmVuZGVyZXIo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIFJlbmRlckJveCogcmVuZGVyZXIgPSB0b1JlbmRlckJv
eChtX2VsZW1lbnQtPnJlbmRlcmVyKCkpOworICAgIGF1dG8mIHJlbmRlcmVyID0gZG93bmNhc3Q8
UmVuZGVyQm94PigqbV9lbGVtZW50LT5yZW5kZXJlcigpKTsKICAgICAKICAgICBJbnRSZWN0IGRp
cnR5UmVjdCA9IHJlY3Q7Ci0gICAgZGlydHlSZWN0Lm1vdmUocmVuZGVyZXItPmJvcmRlckxlZnQo
KSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLCByZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZW5k
ZXJlci0+cGFkZGluZ1RvcCgpKTsKLSAgICByZW5kZXJlci0+cmVwYWludFJlY3RhbmdsZShkaXJ0
eVJlY3QpOworICAgIGRpcnR5UmVjdC5tb3ZlKHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRl
cmVyLnBhZGRpbmdMZWZ0KCksIHJlbmRlcmVyLmJvcmRlclRvcCgpICsgcmVuZGVyZXIucGFkZGlu
Z1RvcCgpKTsKKyAgICByZW5kZXJlci5yZXBhaW50UmVjdGFuZ2xlKGRpcnR5UmVjdCk7CiB9CiAK
IHZvaWQgUGx1Z2luVmlldzo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVCb3guY3BwCmluZGV4IDUyMWZjZDRjMTYxNTMwYTk0NGIwMDQ3YWRiMTU4MmFjZjQxNTUzMDcu
LjcyOTJjYWMwMzUxOTZhNDc4ZTcyMzhkOGNjZTYyZTg4ZWRmNDE4NTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCkBAIC0xMjksOCArMTI5LDggQEAgZmxvYXQgSW5saW5l
Qm94Ojpsb2dpY2FsSGVpZ2h0KCkgY29uc3QKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0
eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNUZXh0T3JMaW5l
QnJlYWsoKSkKICAgICAgICAgcmV0dXJuIGJlaGF2ZXNMaWtlVGV4dCgpID8gbGluZVN0eWxlLmZv
bnRNZXRyaWNzKCkuaGVpZ2h0KCkgOiAwOwotICAgIGlmIChyZW5kZXJlcigpLmlzQm94KCkgJiYg
cGFyZW50KCkpCi0gICAgICAgIHJldHVybiBpc0hvcml6b250YWwoKSA/IHRvUmVuZGVyQm94KHJl
bmRlcmVyKCkpLmhlaWdodCgpIDogdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkud2lkdGgoKTsKKyAg
ICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSAmJiBwYXJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIGlzSG9yaXpvbnRhbCgpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5oZWln
aHQoKSA6IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkud2lkdGgoKTsKIAogICAgIEFT
U0VSVChpc0lubGluZUZsb3dCb3goKSk7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGZsb3dP
YmplY3QgPSBib3hNb2RlbE9iamVjdCgpOwpAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgSW5saW5l
Qm94OjphZGp1c3RQb3NpdGlvbihmbG9hdCBkeCwgZmxvYXQgZHkpCiAgICAgbV90b3BMZWZ0Lm1v
dmUoZHgsIGR5KTsKIAogICAgIGlmIChtX3JlbmRlcmVyLmlzUmVwbGFjZWQoKSkKLSAgICAgICAg
dG9SZW5kZXJCb3gocmVuZGVyZXIoKSkubW92ZShkeCwgZHkpOworICAgICAgICBkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm1vdmUoZHgsIGR5KTsKIH0KIAogY29uc3QgUm9vdElubGlu
ZUJveCYgSW5saW5lQm94Ojpyb290KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVFbGVtZW50Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVFbGVtZW50Qm94LmNwcAppbmRleCAxNzlmMjdkMGFmNDRhNGJhOGUzMDVmZWJhMjI2
Njg0YzJiOGMxZjcyLi43NjBkMzBhYjcwOGJmNjc5NjM2MzJkZmIxODVlMDBkMThkODJhMzk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRWxlbWVudEJveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUVsZW1lbnRCb3guY3BwCkBAIC0z
NywxMCArMzcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdm9pZCBJbmxpbmVFbGVtZW50Qm94
OjpkZWxldGVMaW5lKCkKIHsKICAgICBpZiAoIWV4dHJhY3RlZCgpKSB7Ci0gICAgICAgIGlmIChy
ZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAgICAgICB0b1JlbmRlckJveChyZW5kZXJlcigpKS5z
ZXRJbmxpbmVCb3hXcmFwcGVyKG51bGxwdHIpOwotICAgICAgICBlbHNlIGlmIChyZW5kZXJlcigp
LmlzTGluZUJyZWFrKCkpCi0gICAgICAgICAgICB0b1JlbmRlckxpbmVCcmVhayhyZW5kZXJlcigp
KS5zZXRJbmxpbmVCb3hXcmFwcGVyKG51bGxwdHIpOworICAgICAgICBpZiAoaXM8UmVuZGVyQm94
PihyZW5kZXJlcigpKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIo
KSkuc2V0SW5saW5lQm94V3JhcHBlcihudWxscHRyKTsKKyAgICAgICAgZWxzZSBpZiAoaXM8UmVu
ZGVyTGluZUJyZWFrPihyZW5kZXJlcigpKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckxp
bmVCcmVhaz4ocmVuZGVyZXIoKSkuc2V0SW5saW5lQm94V3JhcHBlcihudWxscHRyKTsKICAgICB9
CiAgICAgZGVsZXRlIHRoaXM7CiB9CkBAIC00OCwxOSArNDgsMTkgQEAgdm9pZCBJbmxpbmVFbGVt
ZW50Qm94OjpkZWxldGVMaW5lKCkKIHZvaWQgSW5saW5lRWxlbWVudEJveDo6ZXh0cmFjdExpbmUo
KQogewogICAgIHNldEV4dHJhY3RlZCh0cnVlKTsKLSAgICBpZiAocmVuZGVyZXIoKS5pc0JveCgp
KQotICAgICAgICB0b1JlbmRlckJveChyZW5kZXJlcigpKS5zZXRJbmxpbmVCb3hXcmFwcGVyKG51
bGxwdHIpOwotICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkuaXNMaW5lQnJlYWsoKSkKLSAgICAgICAg
dG9SZW5kZXJMaW5lQnJlYWsocmVuZGVyZXIoKSkuc2V0SW5saW5lQm94V3JhcHBlcihudWxscHRy
KTsKKyAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKKyAgICAgICAgZG93bmNhc3Q8
UmVuZGVyQm94PihyZW5kZXJlcigpKS5zZXRJbmxpbmVCb3hXcmFwcGVyKG51bGxwdHIpOworICAg
IGVsc2UgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIoKSkpCisgICAgICAgIGRvd25j
YXN0PFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIoKSkuc2V0SW5saW5lQm94V3JhcHBlcihudWxs
cHRyKTsKIH0KIAogdm9pZCBJbmxpbmVFbGVtZW50Qm94OjphdHRhY2hMaW5lKCkKIHsKICAgICBz
ZXRFeHRyYWN0ZWQoZmFsc2UpOwotICAgIGlmIChyZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAg
IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLnNldElubGluZUJveFdyYXBwZXIodGhpcyk7Ci0gICAg
ZWxzZSBpZiAocmVuZGVyZXIoKS5pc0xpbmVCcmVhaygpKQotICAgICAgICB0b1JlbmRlckxpbmVC
cmVhayhyZW5kZXJlcigpKS5zZXRJbmxpbmVCb3hXcmFwcGVyKHRoaXMpOworICAgIGlmIChpczxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRl
cmVyKCkpLnNldElubGluZUJveFdyYXBwZXIodGhpcyk7CisgICAgZWxzZSBpZiAoaXM8UmVuZGVy
TGluZUJyZWFrPihyZW5kZXJlcigpKSkKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFr
PihyZW5kZXJlcigpKS5zZXRJbmxpbmVCb3hXcmFwcGVyKHRoaXMpOwogfQogCiB2b2lkIElubGlu
ZUVsZW1lbnRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgLyogbGluZVRvcCAqLywgTGF5b3V0VW5pdCAvKmxp
bmVCb3R0b20qLykKQEAgLTY5LDggKzY5LDggQEAgdm9pZCBJbmxpbmVFbGVtZW50Qm94OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2UKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IHBhaW50T2Zmc2V0
OwotICAgIGlmIChyZW5kZXJlcigpLmlzQm94KCkgJiYgcGFyZW50KCktPnJlbmRlcmVyKCkuc3R5
bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSAvLyBGYXN0ZXIgdGhhbiBjYWxsaW5n
IGNvbnRhaW5pbmdCbG9jaygpLgotICAgICAgICBjaGlsZFBvaW50ID0gcmVuZGVyZXIoKS5jb250
YWluaW5nQmxvY2soKS0+ZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQoJnRvUmVuZGVyQm94KHJl
bmRlcmVyKCkpLCBjaGlsZFBvaW50KTsKKyAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcigp
KSAmJiBwYXJlbnQoKS0+cmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdN
b2RlKCkpIC8vIEZhc3RlciB0aGFuIGNhbGxpbmcgY29udGFpbmluZ0Jsb2NrKCkuCisgICAgICAg
IGNoaWxkUG9pbnQgPSByZW5kZXJlcigpLmNvbnRhaW5pbmdCbG9jaygpLT5mbGlwRm9yV3JpdGlu
Z01vZGVGb3JDaGlsZCgmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKSwgY2hpbGRQb2lu
dCk7CiAKICAgICAvLyBQYWludCBhbGwgcGhhc2VzIG9mIHJlcGxhY2VkIGVsZW1lbnRzIGF0b21p
Y2FsbHksIGFzIHRob3VnaCB0aGUgcmVwbGFjZWQgZWxlbWVudCBlc3RhYmxpc2hlZCBpdHMKICAg
ICAvLyBvd24gc3RhY2tpbmcgY29udGV4dC4gIChTZWUgQXBwZW5kaXggRS4yLCBzZWN0aW9uIDYu
NCBvbiBpbmxpbmUgYmxvY2svdGFibGUgZWxlbWVudHMgaW4gdGhlIENTUzIuMQpAQCAtOTcsOCAr
OTcsOCBAQCBib29sIElubGluZUVsZW1lbnRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JgogICAgIC8vIG93biBzdGFja2luZyBjb250
ZXh0LiAgKFNlZSBBcHBlbmRpeCBFLjIsIHNlY3Rpb24gNi40IG9uIGlubGluZSBibG9jay90YWJs
ZSBlbGVtZW50cyBpbiB0aGUgQ1NTMi4xCiAgICAgLy8gc3BlY2lmaWNhdGlvbi4pCiAgICAgTGF5
b3V0UG9pbnQgY2hpbGRQb2ludCA9IGFjY3VtdWxhdGVkT2Zmc2V0OwotICAgIGlmIChyZW5kZXJl
cigpLmlzQm94KCkgJiYgcGFyZW50KCktPnJlbmRlcmVyKCkuc3R5bGUoKS5pc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSgpKSAvLyBGYXN0ZXIgdGhhbiBjYWxsaW5nIGNvbnRhaW5pbmdCbG9jaygp
LgotICAgICAgICBjaGlsZFBvaW50ID0gcmVuZGVyZXIoKS5jb250YWluaW5nQmxvY2soKS0+Zmxp
cEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQoJnRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLCBjaGlsZFBv
aW50KTsKKyAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSAmJiBwYXJlbnQoKS0+cmVu
ZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIC8vIEZhc3RlciB0
aGFuIGNhbGxpbmcgY29udGFpbmluZ0Jsb2NrKCkuCisgICAgICAgIGNoaWxkUG9pbnQgPSByZW5k
ZXJlcigpLmNvbnRhaW5pbmdCbG9jaygpLT5mbGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZCgmZG93
bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKSwgY2hpbGRQb2ludCk7CiAKICAgICByZXR1cm4g
cmVuZGVyZXIoKS5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwg
Y2hpbGRQb2ludCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5j
cHAKaW5kZXggYzg5ZDAyYmE1M2QxMTk0ZGEwODJiMDdjNmMxMjcxYTcyMzA2YmE3ZS4uMzJmYzJm
YWI3OTQ4NmJhYTM3MjlhMDAwY2M5OTJmMTMyMGI1NjAzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgSW5saW5l
Rmxvd0JveDo6YWRkVG9MaW5lKElubGluZUJveCogY2hpbGQpCiAgICAgICAgICAgICBpZiAoY2hp
bGRTdHlsZS0+bGV0dGVyU3BhY2luZygpIDwgMCB8fCBjaGlsZFN0eWxlLT50ZXh0U2hhZG93KCkg
fHwgY2hpbGRTdHlsZS0+dGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25l
IHx8IGNoaWxkU3R5bGUtPnRleHRTdHJva2VXaWR0aCgpKQogICAgICAgICAgICAgICAgIGNoaWxk
LT5jbGVhcktub3duVG9IYXZlTm9PdmVyZmxvdygpOwogICAgICAgICB9IGVsc2UgaWYgKGNoaWxk
LT5yZW5kZXJlcigpLmlzUmVwbGFjZWQoKSkgewotICAgICAgICAgICAgY29uc3QgUmVuZGVyQm94
JiBib3ggPSB0b1JlbmRlckJveChjaGlsZC0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICBjb25z
dCBSZW5kZXJCb3gmIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oY2hpbGQtPnJlbmRlcmVyKCkp
OwogICAgICAgICAgICAgaWYgKGJveC5oYXNSZW5kZXJPdmVyZmxvdygpIHx8IGJveC5oYXNTZWxm
UGFpbnRpbmdMYXllcigpKQogICAgICAgICAgICAgICAgIGNoaWxkLT5jbGVhcktub3duVG9IYXZl
Tm9PdmVyZmxvdygpOwogICAgICAgICB9IGVsc2UgaWYgKCFjaGlsZC0+cmVuZGVyZXIoKS5pc0xp
bmVCcmVhaygpICYmIChjaGlsZFN0eWxlLmJveFNoYWRvdygpIHx8IGNoaWxkLT5ib3hNb2RlbE9i
amVjdCgpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpCkBAIC04OTksNyArODk5LDcgQEAgaW5saW5l
IHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KElubGluZVRleHRC
b3gmIHRleHRCb3gsIEdseXAKIAogaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkUmVwbGFj
ZWRDaGlsZE92ZXJmbG93KGNvbnN0IElubGluZUJveCogaW5saW5lQm94LCBMYXlvdXRSZWN0JiBs
b2dpY2FsTGF5b3V0T3ZlcmZsb3csIExheW91dFJlY3QmIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdykK
IHsKLSAgICBjb25zdCBSZW5kZXJCb3gmIGJveCA9IHRvUmVuZGVyQm94KGlubGluZUJveC0+cmVu
ZGVyZXIoKSk7CisgICAgY29uc3QgUmVuZGVyQm94JiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+
KGlubGluZUJveC0+cmVuZGVyZXIoKSk7CiAgICAgCiAgICAgLy8gVmlzdWFsIG92ZXJmbG93IG9u
bHkgcHJvcGFnYXRlcyBpZiB0aGUgYm94IGRvZXNuJ3QgaGF2ZSBhIHNlbGYtcGFpbnRpbmcgbGF5
ZXIuICBUaGlzIHJlY3RhbmdsZSBkb2VzIG5vdCBpbmNsdWRlCiAgICAgLy8gdHJhbnNmb3JtcyBv
ciByZWxhdGl2ZSBwb3NpdGlvbmluZyAoc2luY2UgdGhvc2Ugb2JqZWN0cyBhbHdheXMgaGF2ZSBz
ZWxmLXBhaW50aW5nIGxheWVycyksIGJ1dCBpdCBkb2VzIG5lZWQgdG8gYmUgYWRqdXN0ZWQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCmluZGV4IGU2MGI0YjkwYWFhY2U2
M2M5NjM3YmY5MTY1NDIwZjhhYzk0MDMwM2IuLjE4ZjUxZTA0N2JlYWQ5NjNkMGY0MDc1NTA1OTZj
OTY3ZmYzNzFjNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRT
dGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcApA
QCAtMTQyLDkgKzE0Miw5IEBAIExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3Qm
IHJvb3QpCiAKICAgICBpZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAg
ICBtX2NsaXBwZWQgPSB0cnVlOwotICAgICAgICBSZW5kZXJCb3gqIGNvbnRhaW5lckJveCA9IHRv
UmVuZGVyQm94KGNvbnRhaW5lcik7Ci0gICAgICAgIG1fY2xpcFJlY3QgPSBMYXlvdXRSZWN0KHRv
TGF5b3V0UG9pbnQobV9wYWludE9mZnNldCksIGNvbnRhaW5lckJveC0+Y2FjaGVkU2l6ZUZvck92
ZXJmbG93Q2xpcCgpKTsKLSAgICAgICAgbV9wYWludE9mZnNldCAtPSBjb250YWluZXJCb3gtPnNj
cm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBhdXRvJiBjb250YWluZXJCb3ggPSBkb3du
Y2FzdDxSZW5kZXJCb3g+KCpjb250YWluZXIpOworICAgICAgICBtX2NsaXBSZWN0ID0gTGF5b3V0
UmVjdCh0b0xheW91dFBvaW50KG1fcGFpbnRPZmZzZXQpLCBjb250YWluZXJCb3guY2FjaGVkU2l6
ZUZvck92ZXJmbG93Q2xpcCgpKTsKKyAgICAgICAgbV9wYWludE9mZnNldCAtPSBjb250YWluZXJC
b3guc2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAgfQogfQogdm9pZCBMYXlvdXRTdGF0ZTo6
Y2xlYXJQYWdpbmF0aW9uSW5mb3JtYXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKaW5kZXggZjBhN2QxMzRmZTQwZDEzNGM3ZDM2ZjQ1M2Q3OWIyMWU4MGYwMGJh
NC4uMmQ4Y2RjYjFmZGYxZWRlODhhYmRjNzg2NjBkMTcwZDY4OWVlOTA0ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xMjI3LDE0ICsxMjI3LDE0IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OnNpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCkKICAgICBpZiAoY2hp
bGRyZW5JbmxpbmUoKSkgewogICAgICAgICBMaXN0SGFzaFNldDxSb290SW5saW5lQm94Kj4gbGlu
ZUJveGVzOwogICAgICAgICBmb3IgKElubGluZVdhbGtlciB3YWxrZXIoKnRoaXMpOyAhd2Fsa2Vy
LmF0RW5kKCk7IHdhbGtlci5hZHZhbmNlKCkpIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCog
byA9IHdhbGtlci5jdXJyZW50KCk7Ci0gICAgICAgICAgICBpZiAoIW8tPmlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpICYmIChvLT5pc1JlcGxhY2VkKCkgfHwgby0+aXNGbG9hdGluZygpKSkgewotICAg
ICAgICAgICAgICAgIFJlbmRlckJveCYgYm94ID0gdG9SZW5kZXJCb3goKm8pOworICAgICAgICAg
ICAgUmVuZGVyT2JqZWN0JiByZW5kZXJlciA9ICp3YWxrZXIuY3VycmVudCgpOworICAgICAgICAg
ICAgaWYgKCFyZW5kZXJlci5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAocmVuZGVyZXIuaXNS
ZXBsYWNlZCgpIHx8IHJlbmRlcmVyLmlzRmxvYXRpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBS
ZW5kZXJCb3gmIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpOwogICAgICAgICAg
ICAgICAgIGJveC5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAgIGlmIChib3guaW5s
aW5lQm94V3JhcHBlcigpKQogICAgICAgICAgICAgICAgICAgICBsaW5lQm94ZXMuYWRkKCZib3gu
aW5saW5lQm94V3JhcHBlcigpLT5yb290KCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChvLT5p
c1RleHQoKSB8fCAoby0+aXNSZW5kZXJJbmxpbmUoKSAmJiAhd2Fsa2VyLmF0RW5kT2ZJbmxpbmUo
KSkpCi0gICAgICAgICAgICAgICAgby0+Y2xlYXJOZWVkc0xheW91dCgpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikgfHwgKGlzPFJlbmRlcklubGluZT4o
cmVuZGVyZXIpICYmICF3YWxrZXIuYXRFbmRPZklubGluZSgpKSkKKyAgICAgICAgICAgICAgICBy
ZW5kZXJlci5jbGVhck5lZWRzTGF5b3V0KCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGSVhN
RTogR2x5cGggb3ZlcmZsb3cgd2lsbCBnZXQgbG9zdCBpbiB0aGlzIGNhc2UsIGJ1dCBub3QgcmVh
bGx5IGEgYmlnIGRlYWwuCkBAIC0xMzExLDEyICsxMzExLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6
Om1hcmtGaXhlZFBvc2l0aW9uT2JqZWN0Rm9yTGF5b3V0SWZOZWVkZWQoUmVuZGVyT2JqZWN0JiBj
aGlsZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBvID0gY2hpbGQucGFyZW50KCk7Ci0g
ICAgd2hpbGUgKG8gJiYgIW8tPmlzUmVuZGVyVmlldygpICYmIG8tPnN0eWxlKCkucG9zaXRpb24o
KSAhPSBBYnNvbHV0ZVBvc2l0aW9uKQorICAgIHdoaWxlIChvICYmICFpczxSZW5kZXJWaWV3Pigq
bykgJiYgby0+c3R5bGUoKS5wb3NpdGlvbigpICE9IEFic29sdXRlUG9zaXRpb24pCiAgICAgICAg
IG8gPSBvLT5wYXJlbnQoKTsKICAgICBpZiAoby0+c3R5bGUoKS5wb3NpdGlvbigpICE9IEFic29s
dXRlUG9zaXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlckJveCYgYm94ID0gdG9S
ZW5kZXJCb3goY2hpbGQpOworICAgIGF1dG8mIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oY2hp
bGQpOwogICAgIGlmIChoYXNTdGF0aWNJbmxpbmVQb3NpdGlvbikgewogICAgICAgICBMb2dpY2Fs
RXh0ZW50Q29tcHV0ZWRWYWx1ZXMgY29tcHV0ZWRWYWx1ZXM7CiAgICAgICAgIGJveC5jb21wdXRl
TG9naWNhbFdpZHRoSW5SZWdpb24oY29tcHV0ZWRWYWx1ZXMpOwpAQCAtMjI5MCwxMSArMjI5MCwx
MSBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFudElmTmVl
ZGVkKFJlbmRlckJveCYgZGVzY2VuZGFudCkKIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyUGVyY2Vu
dEhlaWdodERlc2NlbmRhbnRzRnJvbShSZW5kZXJCb3gmIHBhcmVudCkKIHsKICAgICBBU1NFUlQo
Z1BlcmNlbnRIZWlnaHRDb250YWluZXJNYXApOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJy
ID0gcGFyZW50LmZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRJblByZU9yZGVy
KCZwYXJlbnQpKSB7Ci0gICAgICAgIGlmICghY3Vyci0+aXNCb3goKSkKKyAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBwYXJlbnQuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dEluUHJlT3JkZXIoJnBhcmVudCkpIHsKKyAgICAgICAgaWYgKCFpczxSZW5kZXJCb3g+
KCpjaGlsZCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAKLSAgICAgICAgUmVuZGVyQm94JiBi
b3ggPSB0b1JlbmRlckJveCgqY3Vycik7CisgICAgICAgIGF1dG8mIGJveCA9IGRvd25jYXN0PFJl
bmRlckJveD4oKmNoaWxkKTsKICAgICAgICAgaWYgKCFoYXNQZXJjZW50SGVpZ2h0RGVzY2VuZGFu
dChib3gpKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTI3NTksNyArMjc1OSw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVCbG9ja1ByZWZlcnJlZExvZ2ljYWxXaWR0aHMoTGF5b3V0
VW5pdCYgbWluTG9naWNhbFdpZHRoCiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBSZW5kZXJT
dHlsZSYgY2hpbGRTdHlsZSA9IGNoaWxkLT5zdHlsZSgpOwotICAgICAgICBpZiAoY2hpbGQtPmlz
RmxvYXRpbmcoKSB8fCAoY2hpbGQtPmlzQm94KCkgJiYgdG9SZW5kZXJCb3goY2hpbGQpLT5hdm9p
ZHNGbG9hdHMoKSkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nKCkgfHwgKGlzPFJl
bmRlckJveD4oKmNoaWxkKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KCpjaGlsZCkuYXZvaWRzRmxv
YXRzKCkpKSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGZsb2F0VG90YWxXaWR0aCA9IGZsb2F0
TGVmdFdpZHRoICsgZmxvYXRSaWdodFdpZHRoOwogICAgICAgICAgICAgaWYgKGNoaWxkU3R5bGUu
Y2xlYXIoKSAmIENMRUZUKSB7CiAgICAgICAgICAgICAgICAgbWF4TG9naWNhbFdpZHRoID0gc3Rk
OjptYXgoZmxvYXRUb3RhbFdpZHRoLCBtYXhMb2dpY2FsV2lkdGgpOwpAQCAtMjc4NiwxMCArMjc4
NiwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlQmxvY2tQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aAogICAgICAgICBtYXJnaW4gPSBtYXJnaW5T
dGFydCArIG1hcmdpbkVuZDsKIAogICAgICAgICBMYXlvdXRVbml0IGNoaWxkTWluUHJlZmVycmVk
TG9naWNhbFdpZHRoLCBjaGlsZE1heFByZWZlcnJlZExvZ2ljYWxXaWR0aDsKLSAgICAgICAgaWYg
KGNoaWxkLT5pc0JveCgpICYmIGNoaWxkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCogY2hpbGRC
b3ggPSB0b1JlbmRlckJveChjaGlsZCk7CisgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpjaGls
ZCkgJiYgY2hpbGQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkgeworICAgICAgICAgICAgYXV0byYgY2hpbGRCb3ggPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KCpjaGlsZCk7CiAgICAgICAgICAgICBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMg
Y29tcHV0ZWRWYWx1ZXM7Ci0gICAgICAgICAgICBjaGlsZEJveC0+Y29tcHV0ZUxvZ2ljYWxIZWln
aHQoY2hpbGRCb3gtPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCksIDAsIGNvbXB1dGVk
VmFsdWVzKTsKKyAgICAgICAgICAgIGNoaWxkQm94LmNvbXB1dGVMb2dpY2FsSGVpZ2h0KGNoaWxk
Qm94LmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCksIDAsIGNvbXB1dGVkVmFsdWVzKTsK
ICAgICAgICAgICAgIGNoaWxkTWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gY2hpbGRNYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGggPSBjb21wdXRlZFZhbHVlcy5tX2V4dGVudDsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGNoaWxkTWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gY2hpbGQt
Pm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwpAQCAtMjgwNiw3ICsyODA2LDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6Y29tcHV0ZUJsb2NrUHJlZmVycmVkTG9naWNhbFdpZHRocyhMYXlvdXRVbml0
JiBtaW5Mb2dpY2FsV2lkdGgKICAgICAgICAgdyA9IGNoaWxkTWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoICsgbWFyZ2luOwogCiAgICAgICAgIGlmICghY2hpbGQtPmlzRmxvYXRpbmcoKSkgewotICAg
ICAgICAgICAgaWYgKGNoaWxkLT5pc0JveCgpICYmIHRvUmVuZGVyQm94KGNoaWxkKS0+YXZvaWRz
RmxvYXRzKCkpIHsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpjaGlsZCkgJiYgZG93
bmNhc3Q8UmVuZGVyQm94PigqY2hpbGQpLmF2b2lkc0Zsb2F0cygpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gRGV0ZXJtaW5lIGEgbGVmdCBhbmQgcmlnaHQgbWF4IHZhbHVlIGJhc2VkIG9mZiB3aGV0
aGVyIG9yIG5vdCB0aGUgZmxvYXRzIGNhbiBmaXQgaW4gdGhlCiAgICAgICAgICAgICAgICAgLy8g
bWFyZ2lucyBvZiB0aGUgb2JqZWN0LiAgRm9yIG5lZ2F0aXZlIG1hcmdpbnMsIHdlIHdpbGwgYXR0
ZW1wdCB0byBvdmVybGFwIHRoZSBmbG9hdCBpZiB0aGUgbmVnYXRpdmUgbWFyZ2luCiAgICAgICAg
ICAgICAgICAgLy8gaXMgc21hbGxlciB0aGFuIHRoZSBmbG9hdCB3aWR0aC4KQEAgLTM0NzEsMTYg
KzM0NzEsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGEKICAgICAgICAgaWYgKGNoaWxkcmVu
SW5saW5lKCkpCiAgICAgICAgICAgICBhZGRGb2N1c1JpbmdSZWN0c0ZvcklubGluZUNoaWxkcmVu
KHJlY3RzLCBhZGRpdGlvbmFsT2Zmc2V0LCBwYWludENvbnRhaW5lcik7CiAgICAgCi0gICAgICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vy
ci0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgaWYgKCFjdXJyLT5pc1RleHQoKSAmJiAh
Y3Vyci0+aXNMaXN0TWFya2VyKCkgJiYgY3Vyci0+aXNCb3goKSkgewotICAgICAgICAgICAgICAg
IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goY3Vycik7CisgICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmICghaXM8UmVuZGVyVGV4dD4oKmNoaWxkKSAmJiAh
aXM8UmVuZGVyTGlzdE1hcmtlcj4oKmNoaWxkKSAmJiBpczxSZW5kZXJCb3g+KCpjaGlsZCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpjaGlsZCk7
CiAgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwb3M7CiAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCi0gICAgICAg
ICAgICAgICAgaWYgKGJveC0+bGF5ZXIoKSkgCi0gICAgICAgICAgICAgICAgICAgIHBvcyA9IGN1
cnItPmxvY2FsVG9Db250YWluZXJQb2ludChGbG9hdFBvaW50KCksIHBhaW50Q29udGFpbmVyKTsK
KyAgICAgICAgICAgICAgICBpZiAoYm94LmxheWVyKCkpCisgICAgICAgICAgICAgICAgICAgIHBv
cyA9IGNoaWxkLT5sb2NhbFRvQ29udGFpbmVyUG9pbnQoRmxvYXRQb2ludCgpLCBwYWludENvbnRh
aW5lcik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwb3MgPSBG
bG9hdFBvaW50KGFkZGl0aW9uYWxPZmZzZXQueCgpICsgYm94LT54KCksIGFkZGl0aW9uYWxPZmZz
ZXQueSgpICsgYm94LT55KCkpOwotICAgICAgICAgICAgICAgIGJveC0+YWRkRm9jdXNSaW5nUmVj
dHMocmVjdHMsIGZsb29yZWRMYXlvdXRQb2ludChwb3MpLCBwYWludENvbnRhaW5lcik7CisgICAg
ICAgICAgICAgICAgICAgIHBvcyA9IEZsb2F0UG9pbnQoYWRkaXRpb25hbE9mZnNldC54KCkgKyBi
b3gueCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSArIGJveC55KCkpOworICAgICAgICAgICAgICAg
IGJveC5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBvaW50KHBvcyksIHBh
aW50Q29udGFpbmVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5kZXggYmNmNThhODQ0Mzlj
YTEyNzY3YjA2YzFhMjk3YmMxNDNkN2FkY2RhMS4uOTE5N2E5YmJlMjhhOTczYjVkNDVmMTdiOTdj
NGUzZTVkMzNkNTNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHAKQEAgLTI1MCw3ICsyNTAsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6cmVidWls
ZEZsb2F0aW5nT2JqZWN0U2V0RnJvbUludHJ1ZGluZ0Zsb2F0cygpCiAgICAgCiAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IDA7CiAgICAgaWYgKHByZXYpCi0gICAgICAgIGxvZ2lj
YWxUb3BPZmZzZXQgLT0gdG9SZW5kZXJCb3gocHJldiktPmxvZ2ljYWxUb3AoKTsKKyAgICAgICAg
bG9naWNhbFRvcE9mZnNldCAtPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpwcmV2KS5sb2dpY2FsVG9w
KCk7CiAgICAgZWxzZSB7CiAgICAgICAgIHByZXYgPSAmcGFyZW50QmxvY2s7CiAgICAgICAgIGxv
Z2ljYWxMZWZ0T2Zmc2V0ICs9IHBhcmVudEJsb2NrLmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVu
dCgpOwpAQCAtMzM0NCw3ICszMzQ0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrRmxv
dzo6cG9zaXRpb25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbihjb25zdCBMYXlvdXQKICAgICAg
ICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgcG9pbnQgPSBw
b2ludC50cmFuc3Bvc2VkUG9pbnQoKTsKICAgICAgICAgaWYgKGNsb3Nlc3RCb3gtPnJlbmRlcmVy
KCkuaXNSZXBsYWNlZCgpKQotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnRSZXNw
ZWN0aW5nRWRpdGluZ0JvdW5kYXJpZXMoKnRoaXMsIHRvUmVuZGVyQm94KGNsb3Nlc3RCb3gtPnJl
bmRlcmVyKCkpLCBwb2ludCk7CisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25Gb3JQb2ludFJl
c3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcygqdGhpcywgZG93bmNhc3Q8UmVuZGVyQm94PihjbG9z
ZXN0Qm94LT5yZW5kZXJlcigpKSwgcG9pbnQpOwogICAgICAgICByZXR1cm4gY2xvc2VzdEJveC0+
cmVuZGVyZXIoKS5wb3NpdGlvbkZvclBvaW50KHBvaW50LCBudWxscHRyKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAK
aW5kZXggNThmNDU1ZDNhNzU0YmQ0ZjA1NmUxNGJkZmEzMjVhMTg2Yjk3OTVlOS4uNGY0YTlmNTE3
MzQxOGIwMDNkNzAxMDVkZDUyZDcxMjk0NDAwNTQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTY4Niw3ICs2ODYsNyBA
QCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0Zv
ckxpbmUoUm9vdElubGluZUJveCogbGluZQogICAgIGJvb2wgbmVlZHNXb3JkU3BhY2luZzsKIAog
ICAgIGlmIChmaXJzdFJ1biAmJiBmaXJzdFJ1bi0+cmVuZGVyZXIoKS5pc1JlcGxhY2VkKCkpIHsK
LSAgICAgICAgUmVuZGVyQm94JiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChmaXJzdFJ1bi0+cmVu
ZGVyZXIoKSk7CisgICAgICAgIFJlbmRlckJveCYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVy
Qm94PihmaXJzdFJ1bi0+cmVuZGVyZXIoKSk7CiAgICAgICAgIHVwZGF0ZUxvZ2ljYWxJbmxpbmVQ
b3NpdGlvbnMoKnRoaXMsIGxpbmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxSaWdodCwgYXZhaWxh
YmxlTG9naWNhbFdpZHRoLCBpc0ZpcnN0TGluZSwgc2hvdWxkSW5kZW50VGV4dCwgcmVuZGVyQm94
LmxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgfQogCkBAIC0xNDY2LDcgKzE0NjYsNyBAQCB2b2lkIFJl
bmRlckJsb2NrRmxvdzo6bGF5b3V0TGluZUJveGVzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5
b3V0VW5pdCYgcmVwYWludAogICAgICAgICAgICAgICAgIGhhc0lubGluZUNoaWxkID0gdHJ1ZTsK
IAogICAgICAgICAgICAgaWYgKG8uaXNSZXBsYWNlZCgpIHx8IG8uaXNGbG9hdGluZygpIHx8IG8u
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJCb3gmIGJv
eCA9IHRvUmVuZGVyQm94KG8pOworICAgICAgICAgICAgICAgIFJlbmRlckJveCYgYm94ID0gZG93
bmNhc3Q8UmVuZGVyQm94PihvKTsKIAogICAgICAgICAgICAgICAgIGlmIChyZWxheW91dENoaWxk
cmVuIHx8IGJveC5oYXNSZWxhdGl2ZURpbWVuc2lvbnMoKSkKICAgICAgICAgICAgICAgICAgICAg
Ym94LnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKaW5kZXggYWE0ODYzODkwZjg0OWE1ZGJiMzM2Y2VmM2JiZWZiNGYw
MWU2ZTA1Zi4uNTFmZDdkNTJkODk2MzM4YmU3NjUyY2MzYTU0MzI1YzVkYzk3NDk5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTkxOSwxNCArOTE5LDE0IEBAIElu
dFNpemUgUmVuZGVyQm94OjpjYWxjdWxhdGVBdXRvc2Nyb2xsRGlyZWN0aW9uKGNvbnN0IEludFBv
aW50JiB3aW5kb3dQb2ludCkgY29uCiAKIFJlbmRlckJveCogUmVuZGVyQm94OjpmaW5kQXV0b3Nj
cm9sbGFibGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICB3aGlsZSAocmVuZGVyZXIg
JiYgIShyZW5kZXJlci0+aXNCb3goKSAmJiB0b1JlbmRlckJveChyZW5kZXJlciktPmNhbkF1dG9z
Y3JvbGwoKSkpIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKSAmJiByZW5k
ZXJlci0+ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkKKyAgICB3aGlsZSAocmVuZGVyZXIgJiYg
IShpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVy
ZXIpLmNhbkF1dG9zY3JvbGwoKSkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlclZpZXc+KCpyZW5k
ZXJlcikgJiYgcmVuZGVyZXItPmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpCiAgICAgICAgICAg
ICByZW5kZXJlciA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpLT5yZW5kZXJl
cigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJl
bnQoKTsKICAgICB9CiAKLSAgICByZXR1cm4gcmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzQm94KCkg
PyB0b1JlbmRlckJveChyZW5kZXJlcikgOiAwOworICAgIHJldHVybiBpczxSZW5kZXJCb3g+KHJl
bmRlcmVyKSA/IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpIDogbnVsbHB0cjsKIH0KIAog
dm9pZCBSZW5kZXJCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgc291cmNlKQpAQCAtMzU1
OSw5ICszNTU5LDkgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUJsb2NrU3RhdGljRGlzdGFuY2UoTGVu
Z3RoJiBsb2dpY2FsVG9wLCBMZW5ndGgmIGxvZ2ljYWxCb3R0b20KICAgICAKICAgICAvLyBGSVhN
RTogVGhlIHN0YXRpYyBkaXN0YW5jZSBjb21wdXRhdGlvbiBoYXMgbm90IGJlZW4gcGF0Y2hlZCBm
b3IgbWl4ZWQgd3JpdGluZyBtb2Rlcy4KICAgICBMYXlvdXRVbml0IHN0YXRpY0xvZ2ljYWxUb3Ag
PSBjaGlsZC0+bGF5ZXIoKS0+c3RhdGljQmxvY2tQb3NpdGlvbigpIC0gY29udGFpbmVyQmxvY2st
PmJvcmRlckJlZm9yZSgpOwotICAgIGZvciAoUmVuZGVyRWxlbWVudCogY3VyciA9IGNoaWxkLT5w
YXJlbnQoKTsgY3VyciAmJiBjdXJyICE9IGNvbnRhaW5lckJsb2NrOyBjdXJyID0gY3Vyci0+Y29u
dGFpbmVyKCkpIHsKLSAgICAgICAgaWYgKGN1cnItPmlzQm94KCkgJiYgIWN1cnItPmlzVGFibGVS
b3coKSkKLSAgICAgICAgICAgIHN0YXRpY0xvZ2ljYWxUb3AgKz0gdG9SZW5kZXJCb3goY3Vycikt
PmxvZ2ljYWxUb3AoKTsKKyAgICBmb3IgKFJlbmRlckVsZW1lbnQqIGNvbnRhaW5lciA9IGNoaWxk
LT5wYXJlbnQoKTsgY29udGFpbmVyICYmIGNvbnRhaW5lciAhPSBjb250YWluZXJCbG9jazsgY29u
dGFpbmVyID0gY29udGFpbmVyLT5jb250YWluZXIoKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVy
Qm94PigqY29udGFpbmVyKSAmJiAhaXM8UmVuZGVyVGFibGVSb3c+KCpjb250YWluZXIpKQorICAg
ICAgICAgICAgc3RhdGljTG9naWNhbFRvcCArPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpjb250YWlu
ZXIpLmxvZ2ljYWxUb3AoKTsKICAgICB9CiAgICAgbG9naWNhbFRvcC5zZXRWYWx1ZShGaXhlZCwg
c3RhdGljTG9naWNhbFRvcCk7CiB9CkBAIC00MTk5LDMwICs0MTk5LDMwIEBAIFZpc2libGVQb3Np
dGlvbiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
LCBjb25zdCBSZW5kCiAgICAgICAgIGFkanVzdGVkUG9pbnQubW92ZUJ5KGxvY2F0aW9uKCkpOwog
CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IGZpcnN0Q2hpbGQoKTsgcmVu
ZGVyT2JqZWN0OyByZW5kZXJPYmplY3QgPSByZW5kZXJPYmplY3QtPm5leHRTaWJsaW5nKCkpIHsK
LSAgICAgICAgaWYgKCFyZW5kZXJPYmplY3QtPmlzQm94KCkpCisgICAgICAgIGlmICghaXM8UmVu
ZGVyQm94PigqcmVuZGVyT2JqZWN0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IGlmIChpc1JlbmRlckZsb3dUaHJlYWQoKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyRmxvd1Ro
cmVhZD4oKnRoaXMpKSB7CiAgICAgICAgICAgICBBU1NFUlQocmVnaW9uKTsKLSAgICAgICAgICAg
IGlmICghdG9SZW5kZXJGbG93VGhyZWFkKHRoaXMpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxv
d1JlZ2lvbihyZW5kZXJPYmplY3QsIHJlZ2lvbikpCisgICAgICAgICAgICBpZiAoIWRvd25jYXN0
PFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKS5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lv
bihyZW5kZXJPYmplY3QsIHJlZ2lvbikpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KIAotICAgICAgICBSZW5kZXJCb3gqIHJlbmRlcmVyID0gdG9SZW5kZXJCb3gocmVuZGVy
T2JqZWN0KTsKKyAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpy
ZW5kZXJPYmplY3QpOwogCi0gICAgICAgIGlmICgoIXJlbmRlcmVyLT5maXJzdENoaWxkKCkgJiYg
IXJlbmRlcmVyLT5pc0lubGluZSgpICYmICFyZW5kZXJlci0+aXNSZW5kZXJCbG9ja0Zsb3coKSAp
Ci0gICAgICAgICAgICB8fCByZW5kZXJlci0+c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJM
RSkKKyAgICAgICAgaWYgKCghcmVuZGVyZXIuZmlyc3RDaGlsZCgpICYmICFyZW5kZXJlci5pc0lu
bGluZSgpICYmICFpczxSZW5kZXJCbG9ja0Zsb3c+KHJlbmRlcmVyKSkKKyAgICAgICAgICAgIHx8
IHJlbmRlcmVyLnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBMYXlvdXRVbml0IHRvcCA9IHJlbmRlcmVyLT5ib3JkZXJUb3Ao
KSArIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkgKyAoaXNUYWJsZVJvdygpID8gTGF5b3V0VW5pdCgp
IDogcmVuZGVyZXItPnkoKSk7Ci0gICAgICAgIExheW91dFVuaXQgYm90dG9tID0gdG9wICsgcmVu
ZGVyZXItPmNvbnRlbnRIZWlnaHQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBsZWZ0ID0gcmVuZGVy
ZXItPmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpICsgKGlzVGFibGVSb3co
KSA/IExheW91dFVuaXQoKSA6IHJlbmRlcmVyLT54KCkpOwotICAgICAgICBMYXlvdXRVbml0IHJp
Z2h0ID0gbGVmdCArIHJlbmRlcmVyLT5jb250ZW50V2lkdGgoKTsKKyAgICAgICAgTGF5b3V0VW5p
dCB0b3AgPSByZW5kZXJlci5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKSArIChp
czxSZW5kZXJUYWJsZVJvdz4oKnRoaXMpID8gTGF5b3V0VW5pdCgpIDogcmVuZGVyZXIueSgpKTsK
KyAgICAgICAgTGF5b3V0VW5pdCBib3R0b20gPSB0b3AgKyByZW5kZXJlci5jb250ZW50SGVpZ2h0
KCk7CisgICAgICAgIExheW91dFVuaXQgbGVmdCA9IHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJl
bmRlcmVyLnBhZGRpbmdMZWZ0KCkgKyAoaXM8UmVuZGVyVGFibGVSb3c+KCp0aGlzKSA/IExheW91
dFVuaXQoKSA6IHJlbmRlcmVyLngoKSk7CisgICAgICAgIExheW91dFVuaXQgcmlnaHQgPSBsZWZ0
ICsgcmVuZGVyZXIuY29udGVudFdpZHRoKCk7CiAgICAgICAgIAogICAgICAgICBpZiAocG9pbnQu
eCgpIDw9IHJpZ2h0ICYmIHBvaW50LngoKSA+PSBsZWZ0ICYmIHBvaW50LnkoKSA8PSB0b3AgJiYg
cG9pbnQueSgpID49IGJvdHRvbSkgewotICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1RhYmxl
Um93KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50
KHBvaW50ICsgYWRqdXN0ZWRQb2ludCAtIHJlbmRlcmVyLT5sb2NhdGlvbk9mZnNldCgpLCByZWdp
b24pOwotICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50KHBvaW50
IC0gcmVuZGVyZXItPmxvY2F0aW9uT2Zmc2V0KCksIHJlZ2lvbik7CisgICAgICAgICAgICBpZiAo
aXM8UmVuZGVyVGFibGVSb3c+KHJlbmRlcmVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVu
ZGVyZXIucG9zaXRpb25Gb3JQb2ludChwb2ludCArIGFkanVzdGVkUG9pbnQgLSByZW5kZXJlci5s
b2NhdGlvbk9mZnNldCgpLCByZWdpb24pOworICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLnBv
c2l0aW9uRm9yUG9pbnQocG9pbnQgLSByZW5kZXJlci5sb2NhdGlvbk9mZnNldCgpLCByZWdpb24p
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gRmluZCB0aGUgZGlzdGFuY2UgZnJvbSAoeCwgeSkg
dG8gdGhlIGJveC4gIFNwbGl0IHRoZSBzcGFjZSBhcm91bmQgdGhlIGJveCBpbnRvIDggcGllY2Vz
CkBAIC00MjUzLDcgKzQyNTMsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlv
bkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZAogCiAgICAgICAg
IExheW91dFVuaXQgZGlzdCA9IGRpZmZlcmVuY2Uud2lkdGgoKSAqIGRpZmZlcmVuY2Uud2lkdGgo
KSArIGRpZmZlcmVuY2UuaGVpZ2h0KCkgKiBkaWZmZXJlbmNlLmhlaWdodCgpOwogICAgICAgICBp
ZiAoZGlzdCA8IG1pbkRpc3QpIHsKLSAgICAgICAgICAgIGNsb3Nlc3RSZW5kZXJlciA9IHJlbmRl
cmVyOworICAgICAgICAgICAgY2xvc2VzdFJlbmRlcmVyID0gJnJlbmRlcmVyOwogICAgICAgICAg
ICAgbWluRGlzdCA9IGRpc3Q7CiAgICAgICAgIH0KICAgICB9CkBAIC00NzY0LDI4ICs0NzY0LDI4
IEBAIFJlbmRlck9iamVjdCogUmVuZGVyQm94OjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hp
bGQoUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsCiAgICAgYm9vbCBkaWRTcGxpdFBhcmVudEFub255
bW91c0JveGVzID0gZmFsc2U7CiAKICAgICB3aGlsZSAoYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9
IHRoaXMpIHsKLSAgICAgICAgUmVuZGVyQm94KiBib3hUb1NwbGl0ID0gdG9SZW5kZXJCb3goYmVm
b3JlQ2hpbGQtPnBhcmVudCgpKTsKLSAgICAgICAgaWYgKGJveFRvU3BsaXQtPmZpcnN0Q2hpbGQo
KSAhPSBiZWZvcmVDaGlsZCAmJiBib3hUb1NwbGl0LT5pc0Fub255bW91cygpKSB7CisgICAgICAg
IGF1dG8mIGJveFRvU3BsaXQgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpiZWZvcmVDaGlsZC0+cGFy
ZW50KCkpOworICAgICAgICBpZiAoYm94VG9TcGxpdC5maXJzdENoaWxkKCkgIT0gYmVmb3JlQ2hp
bGQgJiYgYm94VG9TcGxpdC5pc0Fub255bW91cygpKSB7CiAgICAgICAgICAgICBkaWRTcGxpdFBh
cmVudEFub255bW91c0JveGVzID0gdHJ1ZTsKIAogICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBz
cGxpdCB0aGUgcGFyZW50IGJveCBpbnRvIHR3byBib3hlcyBhbmQgbW92ZSBjaGlsZHJlbgogICAg
ICAgICAgICAgLy8gZnJvbSB8YmVmb3JlQ2hpbGR8IHRvIGVuZCBpbnRvIHRoZSBuZXcgcG9zdCBi
b3guCi0gICAgICAgICAgICBSZW5kZXJCb3gqIHBvc3RCb3ggPSBib3hUb1NwbGl0LT5jcmVhdGVB
bm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyh0aGlzKTsKLSAgICAgICAgICAgIHBvc3RCb3gtPnNl
dENoaWxkcmVuSW5saW5lKGJveFRvU3BsaXQtPmNoaWxkcmVuSW5saW5lKCkpOwotICAgICAgICAg
ICAgUmVuZGVyQm94KiBwYXJlbnRCb3ggPSB0b1JlbmRlckJveChib3hUb1NwbGl0LT5wYXJlbnQo
KSk7CisgICAgICAgICAgICBSZW5kZXJCb3gqIHBvc3RCb3ggPSBib3hUb1NwbGl0LmNyZWF0ZUFu
b255bW91c0JveFdpdGhTYW1lVHlwZUFzKHRoaXMpOworICAgICAgICAgICAgcG9zdEJveC0+c2V0
Q2hpbGRyZW5JbmxpbmUoYm94VG9TcGxpdC5jaGlsZHJlbklubGluZSgpKTsKKyAgICAgICAgICAg
IFJlbmRlckJveCogcGFyZW50Qm94ID0gZG93bmNhc3Q8UmVuZGVyQm94Pihib3hUb1NwbGl0LnBh
cmVudCgpKTsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgfHBhcmVu
dEJveHwgYmVmb3JlIGluc2VydGluZyB0aGUgbmV3IG5vZGUKICAgICAgICAgICAgIC8vIHNvIHRo
YXQgdGhlIHRhYmxlIHJlcGFpbnRpbmcgbG9naWMga25vd3MgdGhlIHN0cnVjdHVyZSBpcyBkaXJ0
eS4KICAgICAgICAgICAgIC8vIFNlZSBmb3IgZXhhbXBsZSBSZW5kZXJUYWJsZUNlbGw6Y2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQuCiAgICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRB
ZnRlclNwbGl0KCpwYXJlbnRCb3gpOwotICAgICAgICAgICAgcGFyZW50Qm94LT5pbnNlcnRDaGls
ZEludGVybmFsKHBvc3RCb3gsIGJveFRvU3BsaXQtPm5leHRTaWJsaW5nKCksIE5vdGlmeUNoaWxk
cmVuKTsKLSAgICAgICAgICAgIGJveFRvU3BsaXQtPm1vdmVDaGlsZHJlblRvKHBvc3RCb3gsIGJl
Zm9yZUNoaWxkLCAwLCB0cnVlKTsKKyAgICAgICAgICAgIHBhcmVudEJveC0+aW5zZXJ0Q2hpbGRJ
bnRlcm5hbChwb3N0Qm94LCBib3hUb1NwbGl0Lm5leHRTaWJsaW5nKCksIE5vdGlmeUNoaWxkcmVu
KTsKKyAgICAgICAgICAgIGJveFRvU3BsaXQubW92ZUNoaWxkcmVuVG8ocG9zdEJveCwgYmVmb3Jl
Q2hpbGQsIDAsIHRydWUpOwogCi0gICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNw
bGl0KCpib3hUb1NwbGl0KTsKKyAgICAgICAgICAgIG1hcmtCb3hGb3JSZWxheW91dEFmdGVyU3Bs
aXQoYm94VG9TcGxpdCk7CiAgICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0
KCpwb3N0Qm94KTsKIAogICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBwb3N0Qm94OwogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gYm94VG9TcGxpdDsKKyAgICAgICAg
ICAgIGJlZm9yZUNoaWxkID0gJmJveFRvU3BsaXQ7CiAgICAgfQogCiAgICAgaWYgKGRpZFNwbGl0
UGFyZW50QW5vbnltb3VzQm94ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5k
ZXggNjUyN2EwYzRlNTJjYjJiNTY4Y2E3MjU1MTljNDdmYzA2N2IwYzE5Ny4uMDNlYzcxZGJhZGMz
MDhhYTY5NzMyMTQ5ZmQ4MDFiOTA3ZDFlZmM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guaApAQCAtNzIzLDMxICs3MjMsMjkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBz
X2hhZE92ZXJmbG93Q2xpcDsKIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJC
b3gsIGlzQm94KCkpCi0KIGlubGluZSBSZW5kZXJCb3gqIFJlbmRlckJveDo6cHJldmlvdXNTaWJs
aW5nQm94KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9SZW5kZXJCb3gocHJldmlvdXNTaWJsaW5n
KCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHByZXZpb3VzU2libGluZygpKTsK
IH0KIAogaW5saW5lIFJlbmRlckJveCogUmVuZGVyQm94OjpuZXh0U2libGluZ0JveCgpIGNvbnN0
CiB7IAotICAgIHJldHVybiB0b1JlbmRlckJveChuZXh0U2libGluZygpKTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyQm94PihuZXh0U2libGluZygpKTsKIH0KIAogaW5saW5lIFJlbmRlckJv
eCogUmVuZGVyQm94OjpwYXJlbnRCb3goKSBjb25zdAogewotICAgIHJldHVybiB0b1JlbmRlckJv
eChwYXJlbnQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocGFyZW50KCkpOwog
fQogCiBpbmxpbmUgUmVuZGVyQm94KiBSZW5kZXJCb3g6OmZpcnN0Q2hpbGRCb3goKSBjb25zdAog
ewotICAgIHJldHVybiB0b1JlbmRlckJveChmaXJzdENoaWxkKCkpOworICAgIHJldHVybiBkb3du
Y2FzdDxSZW5kZXJCb3g+KGZpcnN0Q2hpbGQoKSk7CiB9CiAKIGlubGluZSBSZW5kZXJCb3gqIFJl
bmRlckJveDo6bGFzdENoaWxkQm94KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9SZW5kZXJCb3go
bGFzdENoaWxkKCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KGxhc3RDaGlsZCgp
KTsKIH0KIAogaW5saW5lIHZvaWQgUmVuZGVyQm94OjpzZXRJbmxpbmVCb3hXcmFwcGVyKElubGlu
ZUVsZW1lbnRCb3gqIGJveFdyYXBwZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCBlNjVjNGJlN2U3ZmE5ZTFkNzE1ZGYwMmE5
M2FiZjA0NmExYzZiMjA4Li40MDc0Yzc1NTJmYzM1MmIxYTBiZTc0ZTc4ODZjYWEwNGU0N2NlNzMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dUaHJlYWQu
aCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgor
I2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAg
LTMxMCw4ICszMTEsOCBAQCBMYXlvdXRQb2ludCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6YWRqdXN0
ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoY29uc3QgTAogICAgIC8vIHJldHVybiB0
aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgY2FudmFzIG9yaWdpbiBhbmQgdGhlIGxlZnQgYm9yZGVy
IGVkZ2UgCiAgICAgLy8gb2YgdGhlIGVsZW1lbnQgYW5kIHN0b3AgdGhpcyBhbGdvcml0aG0uCiAg
ICAgaWYgKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBvZmZzZXRQYXJlbnQgPSB0aGlzLT5v
ZmZzZXRQYXJlbnQoKSkgewotICAgICAgICBpZiAob2Zmc2V0UGFyZW50LT5pc0JveCgpICYmICFv
ZmZzZXRQYXJlbnQtPmlzQm9keSgpICYmICFvZmZzZXRQYXJlbnQtPmlzVGFibGUoKSkKLSAgICAg
ICAgICAgIHJlZmVyZW5jZVBvaW50Lm1vdmUoLXRvUmVuZGVyQm94KG9mZnNldFBhcmVudCktPmJv
cmRlckxlZnQoKSwgLXRvUmVuZGVyQm94KG9mZnNldFBhcmVudCktPmJvcmRlclRvcCgpKTsKKyAg
ICAgICAgaWYgKGlzPFJlbmRlckJveD4oKm9mZnNldFBhcmVudCkgJiYgIW9mZnNldFBhcmVudC0+
aXNCb2R5KCkgJiYgIWlzPFJlbmRlclRhYmxlPigqb2Zmc2V0UGFyZW50KSkKKyAgICAgICAgICAg
IHJlZmVyZW5jZVBvaW50Lm1vdmUoLWRvd25jYXN0PFJlbmRlckJveD4oKm9mZnNldFBhcmVudCku
Ym9yZGVyTGVmdCgpLCAtZG93bmNhc3Q8UmVuZGVyQm94Pigqb2Zmc2V0UGFyZW50KS5ib3JkZXJU
b3AoKSk7CiAgICAgICAgIGlmICghaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgZmxvd1RocmVh
ZENvbnRhaW5pbmdCbG9jaygpKSB7CiAgICAgICAgICAgICBpZiAoaXNSZWxQb3NpdGlvbmVkKCkp
CiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUG9pbnQubW92ZShyZWxhdGl2ZVBvc2l0aW9uT2Zm
c2V0KCkpOwpAQCAtMzIxLDI5ICszMjIsMjkgQEAgTGF5b3V0UG9pbnQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGNvbnN0IEwKICAg
ICAgICAgICAgIC8vIENTUyByZWdpb25zIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHJlZ2lvbiBm
bG93cyBzaG91bGQgcmV0dXJuIHRoZSBib2R5IGVsZW1lbnQgYXMgdGhlaXIgb2Zmc2V0UGFyZW50
LgogICAgICAgICAgICAgLy8gU2luY2Ugd2Ugd2lsbCBieXBhc3MgdGhlIGJvZHnigJlzIHJlbmRl
cmVyIGFueXdheSwganVzdCBlbmQgdGhlIGxvb3AgaWYgd2UgZW5jb3VudGVyIGEgcmVnaW9uIGZs
b3cgKG5hbWVkIGZsb3cgdGhyZWFkKS4KICAgICAgICAgICAgIC8vIFNlZSBodHRwOi8vZGV2Lncz
Lm9yZy9jc3N3Zy9jc3MtcmVnaW9ucy8jY3Nzb212aWV3LW9mZnNldC1hdHRyaWJ1dGVzCi0gICAg
ICAgICAgICBhdXRvIGN1cnIgPSBwYXJlbnQoKTsKLSAgICAgICAgICAgIHdoaWxlIChjdXJyICE9
IG9mZnNldFBhcmVudCAmJiAhY3Vyci0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkgeworICAg
ICAgICAgICAgYXV0byogYW5jZXN0b3IgPSBwYXJlbnQoKTsKKyAgICAgICAgICAgIHdoaWxlIChh
bmNlc3RvciAhPSBvZmZzZXRQYXJlbnQgJiYgIWlzPFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKmFu
Y2VzdG9yKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGFyZSB3ZSBzdXBwb3Nl
ZCB0byBkbyBpbnNpZGUgU1ZHIGNvbnRlbnQ/CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKGN1cnItPmlzSW5GbG93UmVuZGVyRmxvd1RocmVhZCgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGlzPFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZD4oKmFuY2VzdG9yKSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGFwcGx5IGEgdHJhbnNsYXRpb24gYmFz
ZWQgb2ZmIHdoYXQgcmVnaW9uIHdlIGFyZSBpbnNpZGUuCi0gICAgICAgICAgICAgICAgICAgIFJl
bmRlclJlZ2lvbiogcmVnaW9uID0gdG9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQoY3Vycikt
PnBoeXNpY2FsVHJhbnNsYXRpb25Gcm9tRmxvd1RvUmVnaW9uKHJlZmVyZW5jZVBvaW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSBkb3duY2FzdDxSZW5kZXJN
dWx0aUNvbHVtbkZsb3dUaHJlYWQ+KCphbmNlc3RvcikucGh5c2ljYWxUcmFuc2xhdGlvbkZyb21G
bG93VG9SZWdpb24ocmVmZXJlbmNlUG9pbnQpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVn
aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUG9pbnQubW92ZUJ5KHJlZ2lv
bi0+dG9wTGVmdExvY2F0aW9uKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzT3V0
T2ZGbG93UG9zaXRpb25lZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyLT5pc0Jv
eCgpICYmICFjdXJyLT5pc1RhYmxlUm93KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZWZl
cmVuY2VQb2ludC5tb3ZlQnkodG9SZW5kZXJCb3goY3VyciktPnRvcExlZnRMb2NhdGlvbigpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oKmFuY2VzdG9yKSAmJiAhaXM8
UmVuZGVyVGFibGVSb3c+KCphbmNlc3RvcikpCisgICAgICAgICAgICAgICAgICAgICAgICByZWZl
cmVuY2VQb2ludC5tb3ZlQnkoZG93bmNhc3Q8UmVuZGVyQm94PigqYW5jZXN0b3IpLnRvcExlZnRM
b2NhdGlvbigpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOworICAgICAgICAgICAgICAgIGFuY2VzdG9y
ID0gYW5jZXN0b3ItPnBhcmVudCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgcG9zaXRpb24gZm9yIGVsZW1lbnRzIGluc2lk
ZSBuYW1lZCBmbG93IHRocmVhZHMgZm9yIHdoaWNoIHRoZSBvZmZzZXRQYXJlbnQgd2FzIHRoZSBi
b2R5LgogICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTU4OTkKLSAgICAgICAgICAgIGlmIChjdXJyLT5pc1JlbmRlck5hbWVkRmxvd1Ro
cmVhZCgpKQotICAgICAgICAgICAgICAgIHJlZmVyZW5jZVBvaW50ID0gdG9SZW5kZXJOYW1lZEZs
b3dUaHJlYWQoY3VyciktPmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KCp0
aGlzLCByZWZlcmVuY2VQb2ludCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChvZmZzZXRQYXJlbnQt
PmlzQm94KCkgJiYgb2Zmc2V0UGFyZW50LT5pc0JvZHkoKSAmJiAhb2Zmc2V0UGFyZW50LT5pc1Bv
c2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICByZWZlcmVuY2VQb2ludC5tb3ZlQnkodG9SZW5k
ZXJCb3gob2Zmc2V0UGFyZW50KS0+dG9wTGVmdExvY2F0aW9uKCkpOworICAgICAgICAgICAgaWYg
KGlzPFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKmFuY2VzdG9yKSkKKyAgICAgICAgICAgICAgICBy
ZWZlcmVuY2VQb2ludCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKmFuY2VzdG9y
KS5hZGp1c3RlZFBvc2l0aW9uUmVsYXRpdmVUb09mZnNldFBhcmVudCgqdGhpcywgcmVmZXJlbmNl
UG9pbnQpOworICAgICAgICAgICAgZWxzZSBpZiAoaXM8UmVuZGVyQm94Pigqb2Zmc2V0UGFyZW50
KSAmJiBvZmZzZXRQYXJlbnQtPmlzQm9keSgpICYmICFvZmZzZXRQYXJlbnQtPmlzUG9zaXRpb25l
ZCgpKQorICAgICAgICAgICAgICAgIHJlZmVyZW5jZVBvaW50Lm1vdmVCeShkb3duY2FzdDxSZW5k
ZXJCb3g+KCpvZmZzZXRQYXJlbnQpLnRvcExlZnRMb2NhdGlvbigpKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMzU2LDcgKzM1Nyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1
dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRzKFN0aWNreVBvc2l0aW9uVmlld3BvCiAKICAgICBS
ZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gdGhpcy0+Y29udGFpbmluZ0Jsb2NrKCk7CiAg
ICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIgPSBsYXllcigpLT5lbmNsb3Np
bmdPdmVyZmxvd0NsaXBMYXllcihFeGNsdWRlU2VsZik7Ci0gICAgUmVuZGVyQm94JiBlbmNsb3Np
bmdDbGlwcGluZ0JveCA9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIgPyB0b1JlbmRlckJveChlbmNs
b3NpbmdDbGlwcGluZ0xheWVyLT5yZW5kZXJlcigpKSA6IHZpZXcoKTsKKyAgICBSZW5kZXJCb3gm
IGVuY2xvc2luZ0NsaXBwaW5nQm94ID0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllciA/IGRvd25jYXN0
PFJlbmRlckJveD4oZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+cmVuZGVyZXIoKSkgOiB2aWV3KCk7
CiAKICAgICBMYXlvdXRSZWN0IGNvbnRhaW5lckNvbnRlbnRSZWN0OwogICAgIGlmICghZW5jbG9z
aW5nQ2xpcHBpbmdMYXllciB8fCAoY29udGFpbmluZ0Jsb2NrICE9ICZlbmNsb3NpbmdDbGlwcGlu
Z0JveCkpCkBAIC00MzYsNyArNDM3LDcgQEAgRmxvYXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24oKSBjb25zdAogewogICAgIFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdDbGlwcGluZ0xheWVyID0gbGF5ZXIoKS0+ZW5jbG9zaW5nT3ZlcmZs
b3dDbGlwTGF5ZXIoRXhjbHVkZVNlbGYpOwogICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xheWVy
KSB7Ci0gICAgICAgIFJlbmRlckJveCYgZW5jbG9zaW5nQ2xpcHBpbmdCb3ggPSB0b1JlbmRlckJv
eChlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5yZW5kZXJlcigpKTsKKyAgICAgICAgUmVuZGVyQm94
JiBlbmNsb3NpbmdDbGlwcGluZ0JveCA9IGRvd25jYXN0PFJlbmRlckJveD4oZW5jbG9zaW5nQ2xp
cHBpbmdMYXllci0+cmVuZGVyZXIoKSk7CiAgICAgICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBl
bmNsb3NpbmdDbGlwcGluZ0JveC5vdmVyZmxvd0NsaXBSZWN0KExheW91dFBvaW50KCksIDApOyAv
LyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgaW4gcmVnaW9ucy4KICAgICAgICAgY2xpcFJlY3QuY29u
dHJhY3QoTGF5b3V0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpICsgZW5j
bG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ1JpZ2h0KCksCiAgICAgICAgICAgICBlbmNsb3NpbmdD
bGlwcGluZ0JveC5wYWRkaW5nVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nQm90
dG9tKCkpKTsKQEAgLTcxOSwxMSArNzIwLDExIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OnBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvCiAg
ICAgTGF5b3V0UmVjdCBzY3JvbGxlZFBhaW50UmVjdCA9IHJlY3Q7CiAgICAgaWYgKGNsaXBwZWRX
aXRoTG9jYWxTY3JvbGxpbmcpIHsKICAgICAgICAgLy8gQ2xpcCB0byB0aGUgb3ZlcmZsb3cgYXJl
YS4KLSAgICAgICAgUmVuZGVyQm94KiB0aGlzQm94ID0gdG9SZW5kZXJCb3godGhpcyk7Ci0gICAg
ICAgIGNvbnRleHQtPmNsaXAodGhpc0JveC0+b3ZlcmZsb3dDbGlwUmVjdChyZWN0LmxvY2F0aW9u
KCksIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKSk7CisgICAgICAgIGF1dG8mIHRo
aXNCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCp0aGlzKTsKKyAgICAgICAgY29udGV4dC0+Y2xp
cCh0aGlzQm94Lm92ZXJmbG93Q2xpcFJlY3QocmVjdC5sb2NhdGlvbigpLCBjdXJyZW50UmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQoKSkpOwogICAgICAgICAKICAgICAgICAgLy8gQWRqdXN0IHRoZSBw
YWludCByZWN0IHRvIHJlZmxlY3QgYSBzY3JvbGxlZCBjb250ZW50IGJveCB3aXRoIGJvcmRlcnMg
YXQgdGhlIGVuZHMuCi0gICAgICAgIEludFNpemUgb2Zmc2V0ID0gdGhpc0JveC0+c2Nyb2xsZWRD
b250ZW50T2Zmc2V0KCk7CisgICAgICAgIEludFNpemUgb2Zmc2V0ID0gdGhpc0JveC5zY3JvbGxl
ZENvbnRlbnRPZmZzZXQoKTsKICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3QubW92ZSgtb2Zmc2V0
KTsKICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0V2lkdGgoYkxlZnQgKyBsYXllcigpLT5z
Y3JvbGxXaWR0aCgpICsgYlJpZ2h0KTsKICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0SGVp
Z2h0KGJvcmRlclRvcCgpICsgbGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCkgKyBib3JkZXJCb3R0b20o
KSk7CkBAIC0xMTEwLDcgKzExMTEsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxj
dWxhdGVCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllck1vZAogICAgICAg
ICAvLyBpdHMgbWFyZ2lucy4gU2luY2UgdGhvc2Ugd2VyZSBhZGRlZCBpbiBhbHJlYWR5LCB3ZSBo
YXZlIHRvIGZhY3RvciB0aGVtIG91dCB3aGVuIGNvbXB1dGluZwogICAgICAgICAvLyB0aGUgYmFj
a2dyb3VuZCBwb3NpdGlvbmluZyBhcmVhLgogICAgICAgICBpZiAoaXNSb290KCkpIHsKLSAgICAg
ICAgICAgIHBvc2l0aW9uaW5nQXJlYVNpemUgPSB0b1JlbmRlckJveCh0aGlzKS0+c2l6ZSgpIC0g
TGF5b3V0U2l6ZShsZWZ0ICsgcmlnaHQsIHRvcCArIGJvdHRvbSk7CisgICAgICAgICAgICBwb3Np
dGlvbmluZ0FyZWFTaXplID0gZG93bmNhc3Q8UmVuZGVyQm94PigqdGhpcykuc2l6ZSgpIC0gTGF5
b3V0U2l6ZShsZWZ0ICsgcmlnaHQsIHRvcCArIGJvdHRvbSk7CiAgICAgICAgICAgICBpZiAodmll
dygpLmZyYW1lVmlldygpLmhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygpKSB7
CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBleHRlbmRlZEJhY2tncm91bmRSZWN0ID0gdmll
dygpLmZyYW1lVmlldygpLmV4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygpOwogICAg
ICAgICAgICAgICAgIGxlZnQgKz0gKG1hcmdpbkxlZnQoKSAtIGV4dGVuZGVkQmFja2dyb3VuZFJl
Y3QueCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRl
eCAxODY3NGVhYWY1ODBkNmM2NGU5MWJmZjlkMzc4MzhkMmJjZGY1N2QyLi40Y2EwZTBiZjdmMDhm
MDgxOTQyNDdlZmQ3ODYyODcwM2VjNjYyYTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwCkBAIC01ODksNyArNTg5LDcgQEAgUmVuZGVyT2JqZWN0KiBSZW5k
ZXJFbGVtZW50OjpyZW1vdmVDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQsIE5v
dGlmeUMKICAgICBBU1NFUlQob2xkQ2hpbGQucGFyZW50KCkgPT0gdGhpcyk7CiAKICAgICBpZiAo
b2xkQ2hpbGQuaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQotICAgICAgICB0b1Jl
bmRlckJveChvbGRDaGlsZCkucmVtb3ZlRmxvYXRpbmdPclBvc2l0aW9uZWRDaGlsZEZyb21CbG9j
a0xpc3RzKCk7CisgICAgICAgIGRvd25jYXN0PFJlbmRlckJveD4ob2xkQ2hpbGQpLnJlbW92ZUZs
b2F0aW5nT3JQb3NpdGlvbmVkQ2hpbGRGcm9tQmxvY2tMaXN0cygpOwogCiAgICAgLy8gU28gdGhh
dCB3ZSdsbCBnZXQgdGhlIGFwcHJvcHJpYXRlIGRpcnR5IGJpdCBzZXQgKGVpdGhlciB0aGF0IGEg
bm9ybWFsIGZsb3cgY2hpbGQgZ290IHlhbmtlZCBvcgogICAgIC8vIHRoYXQgYSBwb3NpdGlvbmVk
IGNoaWxkIGdvdCB5YW5rZWQpLiBXZSBhbHNvIHJlcGFpbnQsIHNvIHRoYXQgdGhlIGFyZWEgZXhw
b3NlZCB3aGVuIHRoZSBjaGlsZApAQCAtNjA0LDEwICs2MDQsMTAgQEAgUmVuZGVyT2JqZWN0KiBS
ZW5kZXJFbGVtZW50OjpyZW1vdmVDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQs
IE5vdGlmeUMKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbGluZSBib3ggd3JhcHBlciwg
ZGVsZXRlIGl0LgotICAgIGlmIChvbGRDaGlsZC5pc0JveCgpKQotICAgICAgICB0b1JlbmRlckJv
eChvbGRDaGlsZCkuZGVsZXRlTGluZUJveFdyYXBwZXIoKTsKLSAgICBlbHNlIGlmIChvbGRDaGls
ZC5pc0xpbmVCcmVhaygpKQotICAgICAgICB0b1JlbmRlckxpbmVCcmVhayhvbGRDaGlsZCkuZGVs
ZXRlSW5saW5lQm94V3JhcHBlcigpOworICAgIGlmIChpczxSZW5kZXJCb3g+KG9sZENoaWxkKSkK
KyAgICAgICAgZG93bmNhc3Q8UmVuZGVyQm94PihvbGRDaGlsZCkuZGVsZXRlTGluZUJveFdyYXBw
ZXIoKTsKKyAgICBlbHNlIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KG9sZENoaWxkKSkKKyAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPihvbGRDaGlsZCkuZGVsZXRlSW5saW5lQm94V3Jh
cHBlcigpOwogCiAgICAgLy8gSWYgb2xkQ2hpbGQgaXMgdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUg
c2VsZWN0aW9uLCB0aGVuIGNsZWFyIHRoZSBzZWxlY3Rpb24gdG8KICAgICAvLyBhdm9pZCBwcm9i
bGVtcyBvZiBpbnZhbGlkIHBvaW50ZXJzLgpAQCAtODM3LDExICs4MzcsMTEgQEAgdm9pZCBSZW5k
ZXJFbGVtZW50OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJl
bmRlclN0eWxlJiBuZXcKICAgICAgICAgaWYgKGlzRmxvYXRpbmcoKSAmJiAobV9zdHlsZS0+Zmxv
YXRpbmcoKSAhPSBuZXdTdHlsZS5mbG9hdGluZygpKSkKICAgICAgICAgICAgIC8vIEZvciBjaGFu
Z2VzIGluIGZsb2F0IHN0eWxlcywgd2UgbmVlZCB0byBjb25jZWl2YWJseSByZW1vdmUgb3Vyc2Vs
dmVzCiAgICAgICAgICAgICAvLyBmcm9tIHRoZSBmbG9hdGluZyBvYmplY3RzIGxpc3QuCi0gICAg
ICAgICAgICB0b1JlbmRlckJveCh0aGlzKS0+cmVtb3ZlRmxvYXRpbmdPclBvc2l0aW9uZWRDaGls
ZEZyb21CbG9ja0xpc3RzKCk7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3g+KCp0aGlz
KS5yZW1vdmVGbG9hdGluZ09yUG9zaXRpb25lZENoaWxkRnJvbUJsb2NrTGlzdHMoKTsKICAgICAg
ICAgZWxzZSBpZiAoaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKG1fc3R5bGUtPnBvc2l0aW9u
KCkgIT0gbmV3U3R5bGUucG9zaXRpb24oKSkpCiAgICAgICAgICAgICAvLyBGb3IgY2hhbmdlcyBp
biBwb3NpdGlvbmluZyBzdHlsZXMsIHdlIG5lZWQgdG8gY29uY2VpdmFibHkgcmVtb3ZlIG91cnNl
bHZlcwogICAgICAgICAgICAgLy8gZnJvbSB0aGUgcG9zaXRpb25lZCBvYmplY3RzIGxpc3QuCi0g
ICAgICAgICAgICB0b1JlbmRlckJveCh0aGlzKS0+cmVtb3ZlRmxvYXRpbmdPclBvc2l0aW9uZWRD
aGlsZEZyb21CbG9ja0xpc3RzKCk7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3g+KCp0
aGlzKS5yZW1vdmVGbG9hdGluZ09yUG9zaXRpb25lZENoaWxkRnJvbUJsb2NrTGlzdHMoKTsKIAog
ICAgICAgICBzX2FmZmVjdHNQYXJlbnRCbG9jayA9IGlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0
aW9uZWQoKQogICAgICAgICAgICAgJiYgKCFuZXdTdHlsZS5pc0Zsb2F0aW5nKCkgJiYgIW5ld1N0
eWxlLmhhc091dE9mRmxvd1Bvc2l0aW9uKCkpCkBAIC0xMjQwLDggKzEyNDAsOCBAQCBib29sIFJl
bmRlckVsZW1lbnQ6OnJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIHJlcAogICAgICAgICBMYXlvdXRVbml0IHNoYWRvd0xlZnQ7CiAgICAgICAg
IExheW91dFVuaXQgc2hhZG93UmlnaHQ7CiAgICAgICAgIHN0eWxlKCkuZ2V0Qm94U2hhZG93SG9y
aXpvbnRhbEV4dGVudChzaGFkb3dMZWZ0LCBzaGFkb3dSaWdodCk7Ci0gICAgICAgIExheW91dFVu
aXQgYm9yZGVyUmlnaHQgPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPmJvcmRlclJpZ2h0
KCkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwoMCk7Ci0gICAgICAgIExheW91dFVuaXQgYm94V2lk
dGggPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPndpZHRoKCkgOiBMYXlvdXRVbml0KCk7
CisgICAgICAgIExheW91dFVuaXQgYm9yZGVyUmlnaHQgPSBpczxSZW5kZXJCb3g+KCp0aGlzKSA/
IGRvd25jYXN0PFJlbmRlckJveD4oKnRoaXMpLmJvcmRlclJpZ2h0KCkgOiBMYXlvdXRVbml0Ojpm
cm9tUGl4ZWwoMCk7CisgICAgICAgIExheW91dFVuaXQgYm94V2lkdGggPSBpczxSZW5kZXJCb3g+
KCp0aGlzKSA/IGRvd25jYXN0PFJlbmRlckJveD4oKnRoaXMpLndpZHRoKCkgOiBMYXlvdXRVbml0
KCk7CiAgICAgICAgIExheW91dFVuaXQgbWluSW5zZXRSaWdodFNoYWRvd0V4dGVudCA9IHN0ZDo6
bWluPExheW91dFVuaXQ+KC1pbnNldFNoYWRvd0V4dGVudC5yaWdodCgpLCBzdGQ6Om1pbjxMYXlv
dXRVbml0PihuZXdCb3VuZHMud2lkdGgoKSwgb2xkQm91bmRzLndpZHRoKCkpKTsKICAgICAgICAg
TGF5b3V0VW5pdCBib3JkZXJXaWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KGJvcmRlclJpZ2h0
LCBzdGQ6Om1heDxMYXlvdXRVbml0Pih2YWx1ZUZvckxlbmd0aChzdHlsZSgpLmJvcmRlclRvcFJp
Z2h0UmFkaXVzKCkud2lkdGgoKSwgYm94V2lkdGgpLCB2YWx1ZUZvckxlbmd0aChzdHlsZSgpLmJv
cmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkud2lkdGgoKSwgYm94V2lkdGgpKSk7CiAgICAgICAgIExh
eW91dFVuaXQgZGVjb3JhdGlvbnNXaWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KC1vdXRsaW5l
U3R5bGUub3V0bGluZU9mZnNldCgpLCBib3JkZXJXaWR0aCArIG1pbkluc2V0UmlnaHRTaGFkb3dF
eHRlbnQpICsgc3RkOjptYXg8TGF5b3V0VW5pdD4ob3V0bGluZVdpZHRoLCBzaGFkb3dSaWdodCk7
CkBAIC0xMjYwLDggKzEyNjAsOCBAQCBib29sIFJlbmRlckVsZW1lbnQ6OnJlcGFpbnRBZnRlckxh
eW91dElmTmVlZGVkKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcAogICAgICAgICBM
YXlvdXRVbml0IHNoYWRvd1RvcDsKICAgICAgICAgTGF5b3V0VW5pdCBzaGFkb3dCb3R0b207CiAg
ICAgICAgIHN0eWxlKCkuZ2V0Qm94U2hhZG93VmVydGljYWxFeHRlbnQoc2hhZG93VG9wLCBzaGFk
b3dCb3R0b20pOwotICAgICAgICBMYXlvdXRVbml0IGJvcmRlckJvdHRvbSA9IGlzQm94KCkgPyB0
b1JlbmRlckJveCh0aGlzKS0+Ym9yZGVyQm90dG9tKCkgOiBMYXlvdXRVbml0Ojpmcm9tUGl4ZWwo
MCk7Ci0gICAgICAgIExheW91dFVuaXQgYm94SGVpZ2h0ID0gaXNCb3goKSA/IHRvUmVuZGVyQm94
KHRoaXMpLT5oZWlnaHQoKSA6IExheW91dFVuaXQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBib3Jk
ZXJCb3R0b20gPSBpczxSZW5kZXJCb3g+KCp0aGlzKSA/IGRvd25jYXN0PFJlbmRlckJveD4oKnRo
aXMpLmJvcmRlckJvdHRvbSgpIDogTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDApOworICAgICAgICBM
YXlvdXRVbml0IGJveEhlaWdodCA9IGlzPFJlbmRlckJveD4oKnRoaXMpID8gZG93bmNhc3Q8UmVu
ZGVyQm94PigqdGhpcykuaGVpZ2h0KCkgOiBMYXlvdXRVbml0KCk7CiAgICAgICAgIExheW91dFVu
aXQgbWluSW5zZXRCb3R0b21TaGFkb3dFeHRlbnQgPSBzdGQ6Om1pbjxMYXlvdXRVbml0PigtaW5z
ZXRTaGFkb3dFeHRlbnQuYm90dG9tKCksIHN0ZDo6bWluPExheW91dFVuaXQ+KG5ld0JvdW5kcy5o
ZWlnaHQoKSwgb2xkQm91bmRzLmhlaWdodCgpKSk7CiAgICAgICAgIExheW91dFVuaXQgYm9yZGVy
SGVpZ2h0ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oYm9yZGVyQm90dG9tLCBzdGQ6Om1heDxMYXlv
dXRVbml0Pih2YWx1ZUZvckxlbmd0aChzdHlsZSgpLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS5o
ZWlnaHQoKSwgYm94SGVpZ2h0KSwKICAgICAgICAgICAgIHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCku
Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS5oZWlnaHQoKSwgYm94SGVpZ2h0KSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKaW5kZXgg
ZmJkNDBlMzI1ZTgzNzk5ZWQwZjEwNDZjYjNlYThjNTMzMDI2NDZiMy4uNWNhNTBhYTBiYTkxMzE0
NmQ5OWE3NmU1NjcwYjZkOGNmMTBhOGZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCkBAIC01MTEsMTIgKzUxMSw5IEBAIHZvaWQg
UmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCgpCiAgICAgaWYgKCFjaGlsZCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVuZGVyQm94KiBjaGlsZEJveCA9IHRvUmVuZGVyQm94KGNoaWxkKTsK
KyAgICBhdXRvJiBjaGlsZEJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKmNoaWxkKTsKIAotICAg
IGlmICghY2hpbGRCb3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChuZXdTaXplID09IG9s
ZFNpemUgJiYgIWNoaWxkQm94LT5uZWVkc0xheW91dCgpKQorICAgIGlmIChuZXdTaXplID09IG9s
ZFNpemUgJiYgIWNoaWxkQm94Lm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICAvLyBXaGVuIGNhbGxpbmcgbGF5b3V0KCkgb24gYSBjaGlsZCBub2RlLCBhIHBhcmVudCBt
dXN0IGVpdGhlciBwdXNoIGEgTGF5b3V0U3RhdGVNYWludGFpbnRlciwgb3IKQEAgLTUyNCwxMSAr
NTIxLDExIEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCgpCiAgICAgLy8gYW5k
IHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIG1hbnkgdGltZXMgcGVyIHNlY29uZCBkdXJpbmcg
cGxheWJhY2ssIHVzZSBhIExheW91dFN0YXRlTWFpbnRhaW5lcjoKICAgICBMYXlvdXRTdGF0ZU1h
aW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCAqdGhpcywgbG9jYXRpb25PZmZzZXQoKSwgaGFz
VHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpIHx8IHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUoKSk7CiAgICAgCi0gICAgY2hpbGRCb3gtPnNldExvY2F0aW9uKExheW91dFBv
aW50KGJvcmRlckxlZnQoKSwgYm9yZGVyVG9wKCkpICsgTGF5b3V0U2l6ZShwYWRkaW5nTGVmdCgp
LCBwYWRkaW5nVG9wKCkpKTsKLSAgICBjaGlsZEJveC0+c3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3Ro
KG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgY2hpbGRCb3gtPnN0eWxlKCkuc2V0V2lk
dGgoTGVuZ3RoKG5ld1NpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBjaGlsZEJveC0+c2V0TmVl
ZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICBjaGlsZEJveC0+bGF5b3V0KCk7CisgICAgY2hp
bGRCb3guc2V0TG9jYXRpb24oTGF5b3V0UG9pbnQoYm9yZGVyTGVmdCgpLCBib3JkZXJUb3AoKSkg
KyBMYXlvdXRTaXplKHBhZGRpbmdMZWZ0KCksIHBhZGRpbmdUb3AoKSkpOworICAgIGNoaWxkQm94
LnN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aChuZXdTaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAg
IGNoaWxkQm94LnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKG5ld1NpemUud2lkdGgoKSwgRml4ZWQp
KTsKKyAgICBjaGlsZEJveC5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgIGNoaWxk
Qm94LmxheW91dCgpOwogICAgIGNsZWFyQ2hpbGROZWVkc0xheW91dCgpOwogICAgIAogICAgIHN0
YXRlUHVzaGVyLnBvcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZpZWxkc2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNl
dC5jcHAKaW5kZXggMDRmZDY0N2RjNjhkMThkODg1YTMyZDYzNTdlYzJiZjBjN2ZiMTg1Yi4uMjgx
ZDNhZjg4YzFiZDQ2ODE5NjhkM2NiMzM0M2U0NTMwYmRmYjhhZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCkBAIC0xMzAsOCArMTMwLDggQEAgUmVuZGVy
Qm94KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZChGaW5kTGVnZW5kT3B0aW9uIG9wdGlvbikg
Y29uc3QKICAgICAgICAgaWYgKG9wdGlvbiA9PSBJZ25vcmVGbG9hdGluZ09yT3V0T2ZGbG93ICYm
IGxlZ2VuZC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIAotICAgICAgICBpZiAobGVnZW5kLT5ub2RlKCkgJiYgKGxlZ2Vu
ZC0+bm9kZSgpLT5oYXNUYWdOYW1lKGxlZ2VuZFRhZykpKQotICAgICAgICAgICAgcmV0dXJuIHRv
UmVuZGVyQm94KGxlZ2VuZCk7CisgICAgICAgIGlmIChpczxIVE1MTGVnZW5kRWxlbWVudD4obGVn
ZW5kLT5ub2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4obGVn
ZW5kKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggMDc4MWQ2YzlmZDlhYmI5NWM2OTBh
OGRlNjRjMjRmZjlkMDY4M2MwOC4uZDJiMDA4MGE5NjJkMTdhOTkwMzAzN2Y4MWQ0MDE2NmNjMDhl
ZWVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNw
cApAQCAtNDMxLDggKzQzMSw4IEBAIExheW91dFBvaW50IFJlbmRlckZsb3dUaHJlYWQ6OmFkanVz
dGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGNvbnN0IFJlbmRlCiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBvZmZzZXQgcmVs
YXRpdmUgdG8gdGhlIGJvZHksIHdlIG11c3QgYWxzbwogICAgICAgICAgICAgLy8gdGFrZSBpbnRv
IGNvbnNpZGVyYXRpb24gdGhlIGJvcmRlcnMgb2YgdGhlIHJlZ2lvbidzIG9mZnNldFBhcmVudC4K
LSAgICAgICAgICAgIGlmIChjdXJyT2Zmc2V0UGFyZW50LT5pc0JveCgpICYmICFjdXJyT2Zmc2V0
UGFyZW50LT5pc0JvZHkoKSkKLSAgICAgICAgICAgICAgICByZWZlcmVuY2VQb2ludC5tb3ZlKHRv
UmVuZGVyQm94KGN1cnJPZmZzZXRQYXJlbnQpLT5ib3JkZXJMZWZ0KCksIHRvUmVuZGVyQm94KGN1
cnJPZmZzZXRQYXJlbnQpLT5ib3JkZXJUb3AoKSk7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVy
Qm94PigqY3Vyck9mZnNldFBhcmVudCkgJiYgIWN1cnJPZmZzZXRQYXJlbnQtPmlzQm9keSgpKQor
ICAgICAgICAgICAgICAgIHJlZmVyZW5jZVBvaW50Lm1vdmUoZG93bmNhc3Q8UmVuZGVyQm94Pigq
Y3Vyck9mZnNldFBhcmVudCkuYm9yZGVyTGVmdCgpLCBkb3duY2FzdDxSZW5kZXJCb3g+KCpjdXJy
T2Zmc2V0UGFyZW50KS5ib3JkZXJUb3AoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGN1
cnJPYmplY3QgPSBjdXJyT2Zmc2V0UGFyZW50OwogICAgICAgICB9CkBAIC00NTMsOSArNDUzLDkg
QEAgTGF5b3V0UG9pbnQgUmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZl
VG9PZmZzZXRQYXJlbnQoY29uc3QgUmVuZGUKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
aWYgKHdhc0NvbXB1dGVkUmVsYXRpdmVUb090aGVyUmVnaW9uKSB7Ci0gICAgICAgICAgICBpZiAo
Ym94TW9kZWxPYmplY3QuaXNCb3goKSkgeworICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4o
Ym94TW9kZWxPYmplY3QpKSB7CiAgICAgICAgICAgICAgICAgLy8gVXNlIGJvcmRlckJveFJlY3RJ
blJlZ2lvbiB0byBhY2NvdW50IGZvciB2YXJpYXRpb25zIHN1Y2ggYXMgcGVyY2VudGFnZSBtYXJn
aW5zLgotICAgICAgICAgICAgICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVjdCA9IHRvUmVuZGVy
Qm94KGJveE1vZGVsT2JqZWN0KS5ib3JkZXJCb3hSZWN0SW5SZWdpb24oc3RhcnRSZWdpb24sIFJl
bmRlckJveDo6RG9Ob3RDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pOworICAgICAgICAgICAgICAg
IExheW91dFJlY3QgYm9yZGVyQm94UmVjdCA9IGRvd25jYXN0PFJlbmRlckJveD4oYm94TW9kZWxP
YmplY3QpLmJvcmRlckJveFJlY3RJblJlZ2lvbihzdGFydFJlZ2lvbiwgUmVuZGVyQm94OjpEb05v
dENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbyk7CiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUG9p
bnQubW92ZShib3JkZXJCb3hSZWN0LmxvY2F0aW9uKCkueCgpLCAwKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIApAQCAtMTE4Nyw3ICsxMTg3LDcgQEAgY29uc3QgUmVuZGVyQm94KiBSZW5k
ZXJGbG93VGhyZWFkOjpjdXJyZW50QWN0aXZlUmVuZGVyQm94KCkgY29uc3QKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBjb25zdCBSZW5kZXJPYmplY3QqIGN1cnJlbnRPYmplY3QgPSBt
X2FjdGl2ZU9iamVjdHNTdGFjay5sYXN0KCk7Ci0gICAgcmV0dXJuIGN1cnJlbnRPYmplY3QtPmlz
Qm94KCkgPyB0b1JlbmRlckJveChjdXJyZW50T2JqZWN0KSA6IG51bGxwdHI7CisgICAgcmV0dXJu
IGlzPFJlbmRlckJveD4oKmN1cnJlbnRPYmplY3QpID8gZG93bmNhc3Q8UmVuZGVyQm94PihjdXJy
ZW50T2JqZWN0KSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cHVzaEZs
b3dUaHJlYWRMYXlvdXRTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCmluZGV4IDRjNmQxOGUzMGIxNmZm
MTQyOGQ0NTNjN2RhYzAyODZlNGJjNmM1NmMuLjg0ZDAzNTZkOWJkNGRhZDI3OWE4Nzc2ZjZiMzFm
Y2YzOTBhNWVhOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuaApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
Rmxvd0NoaWxkSW5mbyhSZW5kZXJPYmplY3QqKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBo
YXNDaGlsZEluZm8oUmVuZGVyT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gY2hpbGQgJiYg
Y2hpbGQtPmlzQm94KCkgJiYgbV9yZWdpb25SYW5nZU1hcC5jb250YWlucyh0b1JlbmRlckJveChj
aGlsZCkpOyB9CisgICAgYm9vbCBoYXNDaGlsZEluZm8oUmVuZGVyT2JqZWN0KiBjaGlsZCkgY29u
c3QgeyByZXR1cm4gaXM8UmVuZGVyQm94PihjaGlsZCkgJiYgbV9yZWdpb25SYW5nZU1hcC5jb250
YWlucyhkb3duY2FzdDxSZW5kZXJCb3g+KGNoaWxkKSk7IH0KICNlbmRpZgogCiAjaWYgIUFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OX0RJU0FCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAKaW5kZXggNzQ1MTIyMWMyY2MxNTBiMGQ5MjI4
M2IwZjYzOTk5YmUxOTczNjBlMC4uZTExNWY3ZmRlMzFlYzExYTA1M2E3MTBkZGE4OWNhOTZhZjdl
YmZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3Jl
ZW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNw
cApAQCAtMTY3LDggKzE2Nyw4IEBAIHZvaWQgUmVuZGVyRnVsbFNjcmVlbjo6dW53cmFwUmVuZGVy
ZXIoYm9vbCYgcmVxdWlyZXNSZW5kZXJUcmVlUmVidWlsZCkKICAgICAgICAgICAgIC8vIFdlIGhh
dmUgdG8gY2xlYXIgdGhlIG92ZXJyaWRlIHNpemUsIGJlY2F1c2UgYXMgYSBmbGV4Ym94LCB3ZQog
ICAgICAgICAgICAgLy8gbWF5IGhhdmUgc2V0IG9uZSBvbiB0aGUgY2hpbGQsIGFuZCB3ZSBkb24n
dCB3YW50IHRvIGxlYXZlIHRoYXQKICAgICAgICAgICAgIC8vIGx5aW5nIGFyb3VuZCBvbiB0aGUg
Y2hpbGQuCi0gICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkpCi0gICAgICAgICAgICAgICAg
dG9SZW5kZXJCb3goY2hpbGQpLT5jbGVhck92ZXJyaWRlU2l6ZSgpOworICAgICAgICAgICAgaWYg
KGlzPFJlbmRlckJveD4oKmNoaWxkKSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJC
b3g+KCpjaGlsZCkuY2xlYXJPdmVycmlkZVNpemUoKTsKICAgICAgICAgICAgIGNoaWxkLT5yZW1v
dmVGcm9tUGFyZW50KCk7CiAgICAgICAgICAgICBwYXJlbnQoKS0+YWRkQ2hpbGQoY2hpbGQsIHRo
aXMpOwogICAgICAgICAgICAgcGFyZW50KCktPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1Jl
Y2FsYygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKaW5kZXggNzVl
NDZmMjhhMjU1MGRkZjhmY2IzMjFiMmU4Mzg3OThkMWVlMzM3OC4uZmE1NzQyNGViZjI5NDk5YjZh
ZWQ5NTlhNzFlMGFlYzk0NzY4ZWE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwCkBAIC02ODUsNyArNjg1LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6bGF5b3V0KCkK
IAogdm9pZCBSZW5kZXJJbWFnZTo6bGF5b3V0U2hhZG93Q29udHJvbHMoY29uc3QgTGF5b3V0U2l6
ZSYgb2xkU2l6ZSkKIHsKLSAgICBSZW5kZXJCb3gqIGNvbnRyb2xzUmVuZGVyZXIgPSB0b1JlbmRl
ckJveChmaXJzdENoaWxkKCkpOworICAgIGF1dG8qIGNvbnRyb2xzUmVuZGVyZXIgPSBkb3duY2Fz
dDxSZW5kZXJCb3g+KGZpcnN0Q2hpbGQoKSk7CiAgICAgaWYgKCFjb250cm9sc1JlbmRlcmVyKQog
ICAgICAgICByZXR1cm47CiAgICAgCkBAIC03MjcsMTAgKzcyNywxMCBAQCB2b2lkIFJlbmRlcklt
YWdlOjpjb21wdXRlSW50cmluc2ljUmF0aW9JbmZvcm1hdGlvbihGbG9hdFNpemUmIGludHJpbnNp
Y1NpemUsIGRvdQogICAgIC8vIE91ciBpbnRyaW5zaWNTaXplIGlzIGVtcHR5IGlmIHdlJ3JlIHJl
bmRlcmluZyBnZW5lcmF0ZWQgaW1hZ2VzIHdpdGggcmVsYXRpdmUgd2lkdGgvaGVpZ2h0LiBGaWd1
cmUgb3V0IHRoZSByaWdodCBpbnRyaW5zaWMgc2l6ZSB0byB1c2UuCiAgICAgaWYgKGludHJpbnNp
Y1NpemUuaXNFbXB0eSgpICYmIChpbWFnZVJlc291cmNlKCkuaW1hZ2VIYXNSZWxhdGl2ZVdpZHRo
KCkgfHwgaW1hZ2VSZXNvdXJjZSgpLmltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSkpIHsKICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBjb250YWluaW5nQmxvY2sgPSBpc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSA/IGNvbnRhaW5lcigpIDogdGhpcy0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgIGlmIChj
b250YWluaW5nQmxvY2stPmlzQm94KCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0g
dG9SZW5kZXJCb3goY29udGFpbmluZ0Jsb2NrKTsKLSAgICAgICAgICAgIGludHJpbnNpY1NpemUu
c2V0V2lkdGgoYm94LT5hdmFpbGFibGVMb2dpY2FsV2lkdGgoKSk7Ci0gICAgICAgICAgICBpbnRy
aW5zaWNTaXplLnNldEhlaWdodChib3gtPmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoSW5jbHVkZU1h
cmdpbkJvcmRlclBhZGRpbmcpKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oKmNvbnRhaW5p
bmdCbG9jaykpIHsKKyAgICAgICAgICAgIGF1dG8mIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
KmNvbnRhaW5pbmdCbG9jayk7CisgICAgICAgICAgICBpbnRyaW5zaWNTaXplLnNldFdpZHRoKGJv
eC5hdmFpbGFibGVMb2dpY2FsV2lkdGgoKSk7CisgICAgICAgICAgICBpbnRyaW5zaWNTaXplLnNl
dEhlaWdodChib3guYXZhaWxhYmxlTG9naWNhbEhlaWdodChJbmNsdWRlTWFyZ2luQm9yZGVyUGFk
ZGluZykpOwogICAgICAgICB9CiAgICAgfQogICAgIC8vIERvbid0IGNvbXB1dGUgYW4gaW50cmlu
c2ljIHJhdGlvIHRvIHByZXNlcnZlIGhpc3RvcmljYWwgV2ViS2l0IGJlaGF2aW9yIGlmIHdlJ3Jl
IHBhaW50aW5nIGFsdCB0ZXh0IGFuZC9vciBhIGJyb2tlbiBpbWFnZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggNmU0NDBlNzQwNjYyZTk2Nzg5OTY3Mzc4
YWUwMWQ1NWU0M2NhNTBhYy4uZWJkYTk5YzA4MTMxZWY5Zjc2OWY0YWQyYWNiNjRjZDg3ZWFkYmI1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKQEAgLTM3LDYg
KzM3LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCisjaW5jbHVkZSAiUmVuZGVyTGlz
dE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUg
IlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtNjY1LDkgKzY2Niw5
IEBAIHZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1CiAgICAgZ2VuZXJhdGVMaW5lQm94UmVjdHMoY29u
dGV4dCk7CiAKICAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVhdGlvbiA9IHRo
aXMtPmNvbnRpbnVhdGlvbigpKSB7Ci0gICAgICAgIGlmIChjb250aW51YXRpb24tPmlzQm94KCkp
IHsKLSAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goY29udGludWF0aW9u
KTsKLSAgICAgICAgICAgIGNvbnRpbnVhdGlvbi0+YWJzb2x1dGVSZWN0cyhyZWN0cywgdG9MYXlv
dXRQb2ludChhY2N1bXVsYXRlZE9mZnNldCAtIGNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigp
ICsgYm94LT5sb2NhdGlvbk9mZnNldCgpKSk7CisgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpj
b250aW51YXRpb24pKSB7CisgICAgICAgICAgICBhdXRvJiBib3ggPSBkb3duY2FzdDxSZW5kZXJC
b3g+KCpjb250aW51YXRpb24pOworICAgICAgICAgICAgY29udGludWF0aW9uLT5hYnNvbHV0ZVJl
Y3RzKHJlY3RzLCB0b0xheW91dFBvaW50KGFjY3VtdWxhdGVkT2Zmc2V0IC0gY29udGFpbmluZ0Js
b2NrKCktPmxvY2F0aW9uKCkgKyBib3gubG9jYXRpb25PZmZzZXQoKSkpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIGNvbnRpbnVhdGlvbi0+YWJzb2x1dGVSZWN0cyhyZWN0cywgdG9MYXlv
dXRQb2ludChhY2N1bXVsYXRlZE9mZnNldCAtIGNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigp
KSk7CiAgICAgfQpAQCAtMTQ2OCwxNCArMTQ2OSwxNCBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRk
Rm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQm
CiAgICAgZ2VuZXJhdGVMaW5lQm94UmVjdHMoY29udGV4dCk7CiAKICAgICBmb3IgKGF1dG8mIGNo
aWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgIGlm
IChjaGlsZC5pc0xpc3RNYXJrZXIoKSkKKyAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RNYXJrZXI+
KGNoaWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBGbG9hdFBvaW50IHBvcyhh
ZGRpdGlvbmFsT2Zmc2V0KTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNv
cnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCiAgICAgICAgIGlmIChjaGlsZC5oYXNMYXllcigpKQog
ICAgICAgICAgICAgcG9zID0gY2hpbGQubG9jYWxUb0NvbnRhaW5lclBvaW50KEZsb2F0UG9pbnQo
KSwgcGFpbnRDb250YWluZXIpOwotICAgICAgICBlbHNlIGlmIChjaGlsZC5pc0JveCgpKQotICAg
ICAgICAgICAgcG9zLm1vdmUodG9SZW5kZXJCb3goY2hpbGQpLmxvY2F0aW9uT2Zmc2V0KCkpOwor
ICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJCb3g+KGNoaWxkKSkKKyAgICAgICAgICAgIHBvcy5t
b3ZlKGRvd25jYXN0PFJlbmRlckJveD4oY2hpbGQpLmxvY2F0aW9uT2Zmc2V0KCkpOwogICAgICAg
ICBjaGlsZC5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZEludFBvaW50KHBvcyksIHBh
aW50Q29udGFpbmVyKTsKICAgICB9CiAKQEAgLTE0ODMsNyArMTQ4NCw3IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBM
YXlvdXRQb2ludCYKICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbi0+aXNJbmxpbmUoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVhdGlvbi0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIGZsb29yZWRMYXlv
dXRQb2ludChMYXlvdXRQb2ludChhZGRpdGlvbmFsT2Zmc2V0ICsgY29udGludWF0aW9uLT5jb250
YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSAtIGNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigp
KSksIHBhaW50Q29udGFpbmVyKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGludWF0
aW9uLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBvaW50KExheW91dFBv
aW50KGFkZGl0aW9uYWxPZmZzZXQgKyB0b1JlbmRlckJveChjb250aW51YXRpb24pLT5sb2NhdGlv
bigpIC0gY29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkpKSwgcGFpbnRDb250YWluZXIpOwor
ICAgICAgICAgICAgY29udGludWF0aW9uLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3Jl
ZExheW91dFBvaW50KExheW91dFBvaW50KGFkZGl0aW9uYWxPZmZzZXQgKyBkb3duY2FzdDxSZW5k
ZXJCb3g+KCpjb250aW51YXRpb24pLmxvY2F0aW9uKCkgLSBjb250YWluaW5nQmxvY2soKS0+bG9j
YXRpb24oKSkpLCBwYWludENvbnRhaW5lcik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA2NjI0Yzc5ODQ3MjEwMmIyNWQ0OWJiODU3N2I3
YTE1NWQxMDQxZjllLi4wOGY3YjU0NzNlYTBhNzNmY2E1YzJjNGMxMmU5ZmRlZTVlNzU5MjQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTEyMTMsMTggKzEy
MTMsMTggQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbigpCiAgICAgaWYg
KCFyZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIHJlbmRlcmVyKCkucGFyZW50
KCkpIHsKICAgICAgICAgLy8gV2UgbXVzdCBhZGp1c3Qgb3VyIHBvc2l0aW9uIGJ5IHdhbGtpbmcg
dXAgdGhlIHJlbmRlciB0cmVlIGxvb2tpbmcgZm9yIHRoZQogICAgICAgICAvLyBuZWFyZXN0IGVu
Y2xvc2luZyBvYmplY3Qgd2l0aCBhIGxheWVyLgotICAgICAgICBSZW5kZXJFbGVtZW50KiBjdXJy
ID0gcmVuZGVyZXIoKS5wYXJlbnQoKTsKLSAgICAgICAgd2hpbGUgKGN1cnIgJiYgIWN1cnItPmhh
c0xheWVyKCkpIHsKLSAgICAgICAgICAgIGlmIChjdXJyLT5pc0JveCgpICYmICFjdXJyLT5pc1Rh
YmxlUm93KCkpIHsKKyAgICAgICAgUmVuZGVyRWxlbWVudCogYW5jZXN0b3IgPSByZW5kZXJlcigp
LnBhcmVudCgpOworICAgICAgICB3aGlsZSAoYW5jZXN0b3IgJiYgIWFuY2VzdG9yLT5oYXNMYXll
cigpKSB7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQm94PigqYW5jZXN0b3IpICYmICFpczxS
ZW5kZXJUYWJsZVJvdz4oKmFuY2VzdG9yKSkgewogICAgICAgICAgICAgICAgIC8vIFJvd3MgYW5k
IGNlbGxzIHNoYXJlIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UgKHRoYXQgb2YgdGhlIHNlY3Rp
b24pLgogICAgICAgICAgICAgICAgIC8vIE9taXQgdGhlbSB3aGVuIGNvbXB1dGluZyBvdXIgeHBv
cy95cG9zLgotICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0gdG9SZW5kZXJCb3goY3Vycikt
PnRvcExlZnRMb2NhdGlvbk9mZnNldCgpOworICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0g
ZG93bmNhc3Q8UmVuZGVyQm94PigqYW5jZXN0b3IpLnRvcExlZnRMb2NhdGlvbk9mZnNldCgpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOworICAgICAg
ICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCk7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKGN1cnItPmlzQm94KCkgJiYgY3Vyci0+aXNUYWJsZVJvdygpKSB7CisgICAgICAgIGlmIChp
czxSZW5kZXJCb3g+KCphbmNlc3RvcikgJiYgaXM8UmVuZGVyVGFibGVSb3c+KCphbmNlc3Rvcikp
IHsKICAgICAgICAgICAgIC8vIFB1dCBvdXJzZWx2ZXMgaW50byB0aGUgcm93IGNvb3JkaW5hdGUg
c3BhY2UuCi0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvUmVuZGVyQm94KGN1cnIpLT50b3BM
ZWZ0TG9jYXRpb25PZmZzZXQoKTsKKyAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gZG93bmNhc3Q8
UmVuZGVyQm94PigqYW5jZXN0b3IpLnRvcExlZnRMb2NhdGlvbk9mZnNldCgpOwogICAgICAgICB9
CiAgICAgfQogICAgIApAQCAtMTIzOSw3ICsxMjM5LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBk
YXRlTGF5ZXJQb3NpdGlvbigpCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChyZW5k
ZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRl
cmVyKCkuaXNJbkZsb3dQb3NpdGlvbmVkKCkgJiYgaXM8UmVuZGVySW5saW5lPihwb3NpdGlvbmVk
UGFyZW50LT5yZW5kZXJlcigpKSkgewotICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBk
b3duY2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkpLm9mZnNl
dEZvckluRmxvd1Bvc2l0aW9uZWRJbmxpbmUoJnRvUmVuZGVyQm94KHJlbmRlcmVyKCkpKTsKKyAg
ICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihwb3Np
dGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5l
KCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKICAgICAgICAgICAgIGxvY2FsUG9p
bnQgKz0gb2Zmc2V0OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChwYXJlbnQoKSkgewpAQCAt
MTI3Nyw3ICsxMjc3LDcgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyTGF5ZXI6OnBlcnNw
ZWN0aXZlVHJhbnNmb3JtKCkgY29uc3QKICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0
cml4KCk7CiAKICAgICAvLyBNYXliZSBmZXRjaCB0aGUgcGVyc3BlY3RpdmUgZnJvbSB0aGUgYmFj
a2luZz8KLSAgICBjb25zdCBJbnRSZWN0IGJvcmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVy
KCkpLnBpeGVsU25hcHBlZEJvcmRlckJveFJlY3QoKTsKKyAgICBjb25zdCBJbnRSZWN0IGJvcmRl
ckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkucGl4ZWxTbmFwcGVkQm9yZGVy
Qm94UmVjdCgpOwogICAgIGNvbnN0IGZsb2F0IGJveFdpZHRoID0gYm9yZGVyQm94LndpZHRoKCk7
CiAgICAgY29uc3QgZmxvYXQgYm94SGVpZ2h0ID0gYm9yZGVyQm94LmhlaWdodCgpOwogCkBAIC0x
MzAyLDcgKzEzMDIsNyBAQCBGbG9hdFBvaW50IFJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZU9yaWdp
bigpIGNvbnN0CiAgICAgaWYgKCFyZW5kZXJlcigpLmhhc1RyYW5zZm9ybSgpKQogICAgICAgICBy
ZXR1cm4gRmxvYXRQb2ludCgpOwogCi0gICAgY29uc3QgTGF5b3V0UmVjdCBib3JkZXJCb3ggPSB0
b1JlbmRlckJveChyZW5kZXJlcigpKS5ib3JkZXJCb3hSZWN0KCk7CisgICAgY29uc3QgTGF5b3V0
UmVjdCBib3JkZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJv
eFJlY3QoKTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlcigpLnN0eWxl
KCk7CiAKICAgICByZXR1cm4gRmxvYXRQb2ludChmbG9hdFZhbHVlRm9yTGVuZ3RoKHN0eWxlLnBl
cnNwZWN0aXZlT3JpZ2luWCgpLCBib3JkZXJCb3gud2lkdGgoKSksCkBAIC0xMzQ2LDExICsxMzQ2
LDExIEBAIHN0YXRpYyBSZW5kZXJMYXllciogcGFyZW50TGF5ZXJDcm9zc0ZyYW1lKGNvbnN0IFJl
bmRlckxheWVyKiBsYXllcikKIAogICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVt
ZW50ID0gbGF5ZXItPnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKTsKICAgICBp
ZiAoIW93bmVyRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgUmVuZGVyRWxlbWVudCogb3duZXJSZW5kZXJlciA9IG93bmVyRWxlbWVudC0+
cmVuZGVyZXIoKTsKICAgICBpZiAoIW93bmVyUmVuZGVyZXIpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5lbmNs
b3NpbmdMYXllcigpOwogfQpAQCAtMTM1OCwxMSArMTM1OCwxMSBAQCBzdGF0aWMgUmVuZGVyTGF5
ZXIqIHBhcmVudExheWVyQ3Jvc3NGcmFtZShjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpCiBSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcigpIGNvbnN0CiB7
CiAgICAgZm9yIChSZW5kZXJMYXllciogbmV4dExheWVyID0gcGFyZW50TGF5ZXJDcm9zc0ZyYW1l
KHRoaXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IHBhcmVudExheWVyQ3Jvc3NGcmFtZShuZXh0
TGF5ZXIpKSB7Ci0gICAgICAgIGlmIChuZXh0TGF5ZXItPnJlbmRlcmVyKCkuaXNCb3goKSAmJiB0
b1JlbmRlckJveChuZXh0TGF5ZXItPnJlbmRlcmVyKCkpLmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3Jv
bGxhYmxlQXJlYSgpKQorICAgICAgICBpZiAoaXM8UmVuZGVyQm94PihuZXh0TGF5ZXItPnJlbmRl
cmVyKCkpICYmIGRvd25jYXN0PFJlbmRlckJveD4obmV4dExheWVyLT5yZW5kZXJlcigpKS5jYW5C
ZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAgICAgICAgICAgIHJldHVybiBuZXh0
TGF5ZXI7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IEludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25zdApA
QCAtMjUzMCw3ICsyNTMwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXplJiBvbGRPZmYKICAgICAvLyBGSVhN
RTogVGhlIG9ubHkgY2FzZSB3aGVyZSByZW5kZXJlci0+ZWxlbWVudCgpLT5yZW5kZXJlcigpICE9
IHJlbmRlcmVyIGlzIHdpdGggY29udGludWF0aW9ucy4gRG8gdGhleSBtYXR0ZXIgaGVyZT8KICAg
ICAvLyBJZiB0aGV5IGRvIGl0IHdvdWxkIHN0aWxsIGJlIGJldHRlciB0byBkZWFsIHdpdGggdGhl
bSBleHBsaWNpdGx5LgogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQo
KTsKLSAgICBSZW5kZXJCb3gqIHJlbmRlcmVyID0gdG9SZW5kZXJCb3goZWxlbWVudC0+cmVuZGVy
ZXIoKSk7CisgICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KGVsZW1lbnQt
PnJlbmRlcmVyKCkpOwogCiAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1l
bnQoKTsKICAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLm1vdXNlUHJl
c3NlZCgpKQpAQCAtMjk3NywxMCArMjk3NywxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpkZXN0cm95
U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogCiBib29sIFJlbmRl
ckxheWVyOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAogewotICAgIGlmICghcmVuZGVyZXIoKS5p
c0JveCgpKQorICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLnNjcm9sbHNP
dmVyZmxvdygpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnNj
cm9sbHNPdmVyZmxvdygpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpzZXRIYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQpAQCAtMzg4MCw3ICszODgwLDcgQEAgc3RhdGlj
IGlubGluZSBMYXlvdXRSZWN0IGNvbXB1dGVSZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJlciwgY29uc3QKICAgICAgICAgcmV0dXJuIHJvb3RSZWxhdGl2ZUJvdW5kczsKIAog
ICAgIExheW91dFJlY3QgcmVmZXJlbmNlQm94OwotICAgIGNvbnN0IFJlbmRlckJveCYgYm94ID0g
dG9SZW5kZXJCb3gocmVuZGVyZXIpOworICAgIGNvbnN0IGF1dG8mIGJveCA9IGRvd25jYXN0PFJl
bmRlckJveD4ocmVuZGVyZXIpOwogICAgIHN3aXRjaCAoY2xpcHBpbmdQYXRoLnJlZmVyZW5jZUJv
eCgpKSB7CiAgICAgY2FzZSBDb250ZW50Qm94OgogICAgICAgICByZWZlcmVuY2VCb3ggPSBib3gu
Y29udGVudEJveFJlY3QoKTsKQEAgLTUzMDMsMTQgKzUzMDMsMTQgQEAgdm9pZCBSZW5kZXJMYXll
cjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0Nv
bnRleHQsIEMKICAgICAgICAgICAgIG9mZnNldCAtPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5zY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBp
ZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICAgICAgQ2xpcFJlY3Qg
bmV3T3ZlcmZsb3dDbGlwID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVj
dEZvckNoaWxkTGF5ZXJzKG9mZnNldCwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCks
IGNsaXBSZWN0c0NvbnRleHQub3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kpOworICAgICAg
ICAgICAgQ2xpcFJlY3QgbmV3T3ZlcmZsb3dDbGlwID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMob2Zmc2V0LCBjdXJyZW50UmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQoKSwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFy
U2l6ZVJlbGV2YW5jeSk7CiAgICAgICAgICAgICBuZXdPdmVyZmxvd0NsaXAuc2V0SGFzUmFkaXVz
KHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSk7CiAgICAgICAgICAgICBjbGlw
UmVjdHMuc2V0T3ZlcmZsb3dDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3T3ZlcmZsb3dDbGlwLCBj
bGlwUmVjdHMub3ZlcmZsb3dDbGlwUmVjdCgpKSk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIo
KS5pc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0UG9zQ2xpcFJl
Y3QoaW50ZXJzZWN0aW9uKG5ld092ZXJmbG93Q2xpcCwgY2xpcFJlY3RzLnBvc0NsaXBSZWN0KCkp
KTsKICAgICAgICAgfQogICAgICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpIHsKLSAgICAg
ICAgICAgIExheW91dFJlY3QgbmV3UG9zQ2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNs
aXBSZWN0KG9mZnNldCwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpOworICAgICAg
ICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlwID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJl
cigpKS5jbGlwUmVjdChvZmZzZXQsIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsK
ICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRQb3NDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3UG9z
Q2xpcCwgY2xpcFJlY3RzLnBvc0NsaXBSZWN0KCkpKTsKICAgICAgICAgICAgIGNsaXBSZWN0cy5z
ZXRPdmVyZmxvd0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdQb3NDbGlwLCBjbGlwUmVjdHMub3Zl
cmZsb3dDbGlwUmVjdCgpKSk7CiAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0Rml4ZWRDbGlwUmVj
dChpbnRlcnNlY3Rpb24obmV3UG9zQ2xpcCwgY2xpcFJlY3RzLmZpeGVkQ2xpcFJlY3QoKSkpOwpA
QCAtNTQyNywxNCArNTQyNywxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhj
b25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25zdAogICAgIGlmIChy
ZW5kZXJlcigpLmhhc0NsaXBPck92ZXJmbG93Q2xpcCgpKSB7CiAgICAgICAgIC8vIFRoaXMgbGF5
ZXIgZXN0YWJsaXNoZXMgYSBjbGlwIG9mIHNvbWUga2luZC4KICAgICAgICAgaWYgKHJlbmRlcmVy
KCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgKHRoaXMgIT0gY2xpcFJlY3RzQ29udGV4dC5yb290TGF5
ZXIgfHwgY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09IFJlc3BlY3RPdmVy
Zmxvd0NsaXApKSB7Ci0gICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3QodG9SZW5k
ZXJCb3gocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdCh0b0xheW91dFBvaW50KG9mZnNldEZy
b21Sb290TG9jYWwpLCBuYW1lZEZsb3dGcmFnbWVudCwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSkpOworICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3QuaW50
ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdCh0
b0xheW91dFBvaW50KG9mZnNldEZyb21Sb290TG9jYWwpLCBuYW1lZEZsb3dGcmFnbWVudCwgY2xp
cFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSkpOwogICAgICAgICAg
ICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSkKICAgICAgICAgICAg
ICAgICBmb3JlZ3JvdW5kUmVjdC5zZXRIYXNSYWRpdXModHJ1ZSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpIHsKICAgICAgICAgICAgIC8vIENsaXAgYXBw
bGllcyB0byAqdXMqIGFzIHdlbGwsIHNvIGdvIGFoZWFkIGFuZCB1cGRhdGUgdGhlIGRhbWFnZVJl
Y3QuCi0gICAgICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSB0b1JlbmRlckJveChyZW5k
ZXJlcigpKS5jbGlwUmVjdCh0b0xheW91dFBvaW50KG9mZnNldEZyb21Sb290TG9jYWwpLCBuYW1l
ZEZsb3dGcmFnbWVudCk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSBkb3du
Y2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmNsaXBSZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0
RnJvbVJvb3RMb2NhbCksIG5hbWVkRmxvd0ZyYWdtZW50KTsKICAgICAgICAgICAgIGJhY2tncm91
bmRSZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAgICAgIGZvcmVncm91bmRSZWN0
LmludGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAgICAgIG91dGxpbmVSZWN0LmludGVyc2Vj
dChuZXdQb3NDbGlwKTsKQEAgLTU1MjAsNyArNTUyMCw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5
ZXI6OmxvY2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNCb3VuZHMpIGNvbnN0CiAKICAgICBp
ZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpIHsKICAgICAgICAgLy8gQ1NTIGNsaXAgbWF5IGJlIGxh
cmdlciB0aGFuIG91ciBib3JkZXIgYm94LgotICAgICAgICBMYXlvdXRSZWN0IGNzc0NsaXBSZWN0
ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRG
cm9tUm9vdCksIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsKKyAgICAgICAgTGF5
b3V0UmVjdCBjc3NDbGlwUmVjdCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuY2xp
cFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRGcm9tUm9vdCksIGN1cnJlbnRSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCgpKTsKICAgICAgICAgY2xpcEV4Y2VlZHNCb3VuZHMgPSAhY2xpcFJlY3QuY29u
dGFpbnMoY3NzQ2xpcFJlY3QpOwogICAgIH0KIApAQCAtNTU1MSw5ICs1NTUxLDkgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpCiAgICAgTGF5b3V0UmVjdCBy
ZWN0ID0gbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7CiAgICAgcmVjdC5tb3ZlKC1zY3JvbGxl
ZENvbnRlbnRPZmZzZXQoKSk7CiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkg
JiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0KHRv
UmVuZGVyQm94KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVs
bHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KKyAgICAgICAgcmVj
dC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBS
ZWN0KExheW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90IGFjY291
bnRlZCBmb3IuCiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKQotICAgICAgICByZWN0Lmlu
dGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBu
dWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgICAgICBy
ZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmNsaXBSZWN0KExh
eW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90IGFjY291bnRlZCBm
b3IuCiAgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50
UmVjdGFuZ2xlKHJlY3QpOwogfQpAQCAtNTcwNiw4ICs1NzA2LDggQEAgTGF5b3V0UmVjdCBSZW5k
ZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9y
TGF5ZXIsIGMKIAogICAgIExheW91dFJlY3QgYm91bmRpbmdCb3hSZWN0ID0gbG9jYWxCb3VuZGlu
Z0JveChmbGFncyk7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc0JveCgpKQotICAgICAgICB0b1Jl
bmRlckJveChyZW5kZXJlcigpKS5mbGlwRm9yV3JpdGluZ01vZGUoYm91bmRpbmdCb3hSZWN0KTsK
KyAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKKyAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyQm94PihyZW5kZXJlcigpKS5mbGlwRm9yV3JpdGluZ01vZGUoYm91bmRpbmdCb3hSZWN0KTsK
ICAgICBlbHNlCiAgICAgICAgIHJlbmRlcmVyKCkuY29udGFpbmluZ0Jsb2NrKCktPmZsaXBGb3JX
cml0aW5nTW9kZShib3VuZGluZ0JveFJlY3QpOwogCkBAIC02Njk3LDcgKzY2OTcsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFpbnQoKQogCiB2b2lkIFJlbmRlckxheWVyOjpw
YWludE5hbWVkRmxvd1RocmVhZEluc2lkZVJlZ2lvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZWdpb24sIExheW91dFJlY3QgcGFpbnREaXJ0eVJl
Y3QsIExheW91dFBvaW50IHBhaW50T2Zmc2V0LCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3Is
IFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdzKQogewotICAgIExheW91dFJlY3QgcmVnaW9uQ29u
dGVudEJveCA9IHRvUmVuZGVyQm94KHJlZ2lvbi0+bGF5ZXJPd25lcigpKS5jb250ZW50Qm94UmVj
dCgpOworICAgIExheW91dFJlY3QgcmVnaW9uQ29udGVudEJveCA9IGRvd25jYXN0PFJlbmRlckJv
eD4ocmVnaW9uLT5sYXllck93bmVyKCkpLmNvbnRlbnRCb3hSZWN0KCk7CiAgICAgQ3VycmVudFJl
bmRlclJlZ2lvbk1haW50YWluZXIgcmVnaW9uTWFpbnRhaW5lcigqcmVnaW9uKTsKICAgICByZWdp
b24tPnNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oCmluZGV4IDFhNDA5ZjEyNDliOTk5ZGY5NzhlMGYzOWQzYWVmNzIyZmVm
Yzk3YzEuLjk2NDJkODQ3MGQ1YTdmNzA0ZjhiODkzZDBiNzA4NWNiNjdmNjgxODggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC0zNDQsNyArMzQ0LDcgQEAgcHVibGlj
OgogICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CiAKICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0
JiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KLSAgICBSZW5kZXJCb3gq
IHJlbmRlckJveCgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCkuaXNCb3goKSA/ICZ0b1JlbmRl
ckJveChyZW5kZXJlcigpKSA6IG51bGxwdHI7IH0KKyAgICBSZW5kZXJCb3gqIHJlbmRlckJveCgp
IGNvbnN0IHsgcmV0dXJuIGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkgPyAmZG93bmNhc3Q8UmVu
ZGVyQm94PihyZW5kZXJlcigpKSA6IG51bGxwdHI7IH0KICAgICBSZW5kZXJMYXllciogcGFyZW50
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KICAgICBSZW5kZXJMYXllciogcHJldmlvdXNT
aWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2aW91czsgfQogICAgIFJlbmRlckxheWVyKiBu
ZXh0U2libGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQpAQCAtOTY2LDcgKzk2Niw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzZXRGaXJzdENoaWxkKFJlbmRlckxheWVyKiBmaXJzdCkgeyBt
X2ZpcnN0ID0gZmlyc3Q7IH0KICAgICB2b2lkIHNldExhc3RDaGlsZChSZW5kZXJMYXllciogbGFz
dCkgeyBtX2xhc3QgPSBsYXN0OyB9CiAKLSAgICBMYXlvdXRQb2ludCByZW5kZXJCb3hMb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCkuaXNCb3goKSA/IHRvUmVuZGVyQm94KHJlbmRl
cmVyKCkpLmxvY2F0aW9uKCkgOiBMYXlvdXRQb2ludCgpOyB9CisgICAgTGF5b3V0UG9pbnQgcmVu
ZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
ID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5sb2NhdGlvbigpIDogTGF5b3V0UG9p
bnQoKTsgfQogCiAgICAgdm9pZCBjb2xsZWN0TGF5ZXJzKGJvb2wgaW5jbHVkZUhpZGRlbkxheWVy
cywgQ29sbGVjdExheWVyc0JlaGF2aW9yLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlbmRlckxh
eWVyKj4+Jiwgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSZW5kZXJMYXllcio+PiYpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDlh
OTU1M2QxZTE1M2E1NmI3OGFkYmVhNTZlODRjYmQwODE4ZTlmZWQuLjAzNGRiY2UyMmYxMjU5ODdi
MmI3ZjUxMDRjNzg1YWNjZDRlOGNhZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0zNTYsNyArMzU2LDcgQEAgdm9pZCBSZW5kZXJM
YXllckJhY2tpbmc6OnVwZGF0ZVRyYW5zZm9ybShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAg
ICAgLy8gYmFrZWQgaW50byBpdCwgYW5kIHdlIGRvbid0IHdhbnQgdGhhdC4KICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0OwogICAgIGlmIChtX293bmluZ0xheWVyLmhhc1RyYW5zZm9ybSgpKSB7
Ci0gICAgICAgIFJlbmRlckJveCYgcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSk7
CisgICAgICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIo
KSk7CiAgICAgICAgIHN0eWxlLmFwcGx5VHJhbnNmb3JtKHQsIHNuYXBSZWN0VG9EZXZpY2VQaXhl
bHMocmVuZGVyQm94LmJvcmRlckJveFJlY3QoKSwgZGV2aWNlU2NhbGVGYWN0b3IoKSksIFJlbmRl
clN0eWxlOjpFeGNsdWRlVHJhbnNmb3JtT3JpZ2luKTsKICAgICAgICAgbWFrZU1hdHJpeFJlbmRl
cmFibGUodCwgY29tcG9zaXRvcigpLmNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsKICAgICB9CkBA
IC03MjAsNyArNzIwLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5
KCkKICAgICAgICAgLy8gSWYgdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yIGhhcyBhIGxheWVyIHRv
IGNsaXAgY2hpbGRyZW4sIHdlIHBhcmVudCBpbiB0aGF0LCBhbmQgdGhlcmVmb3JlCiAgICAgICAg
IC8vIHBvc2l0aW9uIHJlbGF0aXZlIHRvIGl0LgogICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBk
byBzb21lIHBpeGVsIHNuYXBwaW5nIGhlcmUuCi0gICAgICAgIExheW91dFJlY3QgY2xpcHBpbmdC
b3ggPSBjbGlwQm94KHRvUmVuZGVyQm94KGNvbXBBbmNlc3Rvci0+cmVuZGVyZXIoKSkpOworICAg
ICAgICBMYXlvdXRSZWN0IGNsaXBwaW5nQm94ID0gY2xpcEJveChkb3duY2FzdDxSZW5kZXJCb3g+
KGNvbXBBbmNlc3Rvci0+cmVuZGVyZXIoKSkpOwogICAgICAgICBncmFwaGljc0xheWVyUGFyZW50
TG9jYXRpb24gPSBjbGlwcGluZ0JveC5sb2NhdGlvbigpOwogICAgIH0gZWxzZSBpZiAoY29tcEFu
Y2VzdG9yKQogICAgICAgICBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24gPSBhbmNlc3RvckNv
bXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCk7CkBAIC03MjksMTAgKzcyOSwxMCBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoKQogCiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgIGlmIChjb21wQW5jZXN0b3IgJiYgY29tcEFuY2VzdG9yLT5oYXNUb3VjaFNjcm9sbGFibGVP
dmVyZmxvdygpKSB7Ci0gICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3go
JmNvbXBBbmNlc3Rvci0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIExheW91dFJlY3QgcGFkZGluZ0Jv
eChyZW5kZXJCb3gtPmJvcmRlckxlZnQoKSwgcmVuZGVyQm94LT5ib3JkZXJUb3AoKSwKLSAgICAg
ICAgICAgIHJlbmRlckJveC0+d2lkdGgoKSAtIHJlbmRlckJveC0+Ym9yZGVyTGVmdCgpIC0gcmVu
ZGVyQm94LT5ib3JkZXJSaWdodCgpLAotICAgICAgICAgICAgcmVuZGVyQm94LT5oZWlnaHQoKSAt
IHJlbmRlckJveC0+Ym9yZGVyVG9wKCkgLSByZW5kZXJCb3gtPmJvcmRlckJvdHRvbSgpKTsKKyAg
ICAgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94Pihjb21wQW5jZXN0b3It
PnJlbmRlcmVyKCkpOworICAgICAgICBMYXlvdXRSZWN0IHBhZGRpbmdCb3gocmVuZGVyQm94LmJv
cmRlckxlZnQoKSwgcmVuZGVyQm94LmJvcmRlclRvcCgpLAorICAgICAgICAgICAgcmVuZGVyQm94
LndpZHRoKCkgLSByZW5kZXJCb3guYm9yZGVyTGVmdCgpIC0gcmVuZGVyQm94LmJvcmRlclJpZ2h0
KCksCisgICAgICAgICAgICByZW5kZXJCb3guaGVpZ2h0KCkgLSByZW5kZXJCb3guYm9yZGVyVG9w
KCkgLSByZW5kZXJCb3guYm9yZGVyQm90dG9tKCkpOwogCiAgICAgICAgIEludFNpemUgc2Nyb2xs
T2Zmc2V0ID0gY29tcEFuY2VzdG9yLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICAgICAg
Ly8gRklYTUU6IHBpeGVsIHNuYXAgdGhlIHBhZGRpbmcgYm94LgpAQCAtNzQwLDcgKzc0MCw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSgpCiAgICAgfQogI2Vsc2UK
ICAgICBpZiAoY29tcEFuY2VzdG9yICYmIGNvbXBBbmNlc3Rvci0+bmVlZHNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkpIHsKLSAgICAgICAgUmVuZGVyQm94JiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChj
b21wQW5jZXN0b3ItPnJlbmRlcmVyKCkpOworICAgICAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3du
Y2FzdDxSZW5kZXJCb3g+KGNvbXBBbmNlc3Rvci0+cmVuZGVyZXIoKSk7CiAgICAgICAgIExheW91
dFNpemUgc2Nyb2xsT2Zmc2V0ID0gY29tcEFuY2VzdG9yLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQo
KTsKICAgICAgICAgTGF5b3V0UG9pbnQgc2Nyb2xsT3JpZ2luKHJlbmRlckJveC5ib3JkZXJMZWZ0
KCksIHJlbmRlckJveC5ib3JkZXJUb3AoKSk7CiAgICAgICAgIGdyYXBoaWNzTGF5ZXJQYXJlbnRM
b2NhdGlvbiA9IHNjcm9sbE9yaWdpbiAtIHNjcm9sbE9mZnNldDsKQEAgLTc5Myw3ICs3OTMsNyBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoKQogICAgIExheW91dFJl
Y3QgY2xpcHBpbmdCb3g7CiAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGNsaXBMYXllciA9IGNsaXBw
aW5nTGF5ZXIoKSkgewogICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBkbyBzb21lIHBpeGVsIHNu
YXBwaW5nIGhlcmUuCi0gICAgICAgIGNsaXBwaW5nQm94ID0gY2xpcEJveCh0b1JlbmRlckJveChy
ZW5kZXJlcigpKSk7CisgICAgICAgIGNsaXBwaW5nQm94ID0gY2xpcEJveChkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpKTsKICAgICAgICAgY2xpcExheWVyLT5zZXRQb3NpdGlvbihGbG9h
dFBvaW50KGNsaXBwaW5nQm94LmxvY2F0aW9uKCkgLSBsb2NhbENvbXBvc2l0aW5nQm91bmRzLmxv
Y2F0aW9uKCkpKTsKICAgICAgICAgY2xpcExheWVyLT5zZXRTaXplKGNsaXBwaW5nQm94LnNpemUo
KSk7CiAgICAgICAgIGNsaXBMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKHRvRmxvYXRTaXpl
KGNsaXBwaW5nQm94LmxvY2F0aW9uKCkpKTsKQEAgLTgwNyw3ICs4MDcsNyBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoKQogICAgIAogICAgIGlmIChtX293bmluZ0xh
eWVyLmhhc1RyYW5zZm9ybSgpKSB7CiAgICAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzIHRoYXQg
ZGVwZW5kIG9uIGxheWVyIGRpbWVuc2lvbnMuCi0gICAgICAgIEZsb2F0UG9pbnQzRCB0cmFuc2Zv
cm1PcmlnaW4gPSBjb21wdXRlVHJhbnNmb3JtT3JpZ2luRm9yUGFpbnRpbmcodG9SZW5kZXJCb3go
cmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpKTsKKyAgICAgICAgRmxvYXRQb2ludDNEIHRyYW5z
Zm9ybU9yaWdpbiA9IGNvbXB1dGVUcmFuc2Zvcm1PcmlnaW5Gb3JQYWludGluZyhkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7CiAgICAgICAgIC8vIEdldCBs
YXlvdXQgYm91bmRzIGluIHRoZSBjb29yZHMgb2YgY29tcEFuY2VzdG9yIHRvIG1hdGNoIHJlbGF0
aXZlQ29tcG9zaXRpbmdCb3VuZHMuCiAgICAgICAgIEZsb2F0UG9pbnQgbGF5ZXJPZmZzZXQgPSBy
b3VuZFBvaW50VG9EZXZpY2VQaXhlbHMob2Zmc2V0RnJvbVBhcmVudCwgZGV2aWNlU2NhbGVGYWN0
b3IpOwogICAgICAgICAvLyBDb21wdXRlIHRoZSBhbmNob3IgcG9pbnQsIHdoaWNoIGlzIGluIHRo
ZSBjZW50ZXIgb2YgdGhlIHJlbmRlcmVyIGJveCB1bmxlc3MgdHJhbnNmb3JtLW9yaWdpbiBpcyBz
ZXQuCkBAIC04ODQsNyArODg0LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdl
b21ldHJ5KCkKIAogICAgIGlmIChtX3Njcm9sbGluZ0xheWVyKSB7CiAgICAgICAgIEFTU0VSVCht
X3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIpOwotICAgICAgICBSZW5kZXJCb3gmIHJlbmRlckJveCA9
IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpOworICAgICAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3du
Y2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHBhZGRpbmdC
b3gocmVuZGVyQm94LmJvcmRlckxlZnQoKSwgcmVuZGVyQm94LmJvcmRlclRvcCgpLCByZW5kZXJC
b3gud2lkdGgoKSAtIHJlbmRlckJveC5ib3JkZXJMZWZ0KCkgLSByZW5kZXJCb3guYm9yZGVyUmln
aHQoKSwgcmVuZGVyQm94LmhlaWdodCgpIC0gcmVuZGVyQm94LmJvcmRlclRvcCgpIC0gcmVuZGVy
Qm94LmJvcmRlckJvdHRvbSgpKTsKICAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQgPSBt
X293bmluZ0xheWVyLnNjcm9sbE9mZnNldCgpOwogCkBAIC0xMDgxLDggKzEwODEsOCBAQCB2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6cmVzZXRDb250ZW50c1JlY3QoKQogICAgIG1fZ3JhcGhpY3NM
YXllci0+c2V0Q29udGVudHNSZWN0KHNuYXBwZWRJbnRSZWN0KGNvbnRlbnRzQm94KCkpKTsKICAg
ICAKICAgICBMYXlvdXRSZWN0IGNvbnRlbnRzQ2xpcHBpbmdSZWN0OwotICAgIGlmIChyZW5kZXJl
cigpLmlzQm94KCkpCi0gICAgICAgIGNvbnRlbnRzQ2xpcHBpbmdSZWN0ID0gdG9SZW5kZXJCb3go
cmVuZGVyZXIoKSkuY29udGVudEJveFJlY3QoKTsKKyAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5k
ZXJlcigpKSkKKyAgICAgICAgY29udGVudHNDbGlwcGluZ1JlY3QgPSBkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpLmNvbnRlbnRCb3hSZWN0KCk7CiAKICAgICBjb250ZW50c0NsaXBwaW5n
UmVjdC5tb3ZlKGNvbnRlbnRPZmZzZXRJbkNvbXBvc3RpbmdMYXllcigpKTsKICAgICBtX2dyYXBo
aWNzTGF5ZXItPnNldENvbnRlbnRzQ2xpcHBpbmdSZWN0KHNuYXBwZWRJbnRSZWN0KGNvbnRlbnRz
Q2xpcHBpbmdSZWN0KSk7CkBAIC0xMjQzLDcgKzEyNDMsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKICAgICBpZiAoIW1fb3duaW5n
TGF5ZXIuaGFzU2Nyb2xsYmFycygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBJbnRS
ZWN0IGJvcmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLnBpeGVsU25hcHBlZEJvcmRl
ckJveFJlY3QoKTsKKyAgICBjb25zdCBJbnRSZWN0IGJvcmRlckJveCA9IGRvd25jYXN0PFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkucGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCgpOwogCiAgICAgRmxv
YXRTaXplIG9mZnNldEZyb21SZW5kZXJlciA9IG1fZ3JhcGhpY3NMYXllci0+b2Zmc2V0RnJvbVJl
bmRlcmVyKCk7CiAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkpIHsKQEAgLTE1OTQsNyArMTU5NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVEaXJlY3RseUNvbXBvc2l0ZWRCYWNrZ3JvdW5kSW1hZ2UoYm9vbCBpc1Np
bXBsZUNvCiAgICAgRmxvYXRTaXplIHRpbGVTaXplOwogCiAgICAgUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IHN0eWxlLmJhY2tncm91bmRMYXllcnMoKS0+aW1hZ2UoKS0+Y2FjaGVkSW1hZ2UoKS0+aW1h
Z2UoKTsKLSAgICB0b1JlbmRlckJveChyZW5kZXJlcigpKS5nZXRHZW9tZXRyeUZvckJhY2tncm91
bmRJbWFnZSgmcmVuZGVyZXIoKSwgZGVzdFJlY3QsIHBoYXNlLCB0aWxlU2l6ZSk7CisgICAgZG93
bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5nZXRHZW9tZXRyeUZvckJhY2tncm91bmRJbWFn
ZSgmcmVuZGVyZXIoKSwgZGVzdFJlY3QsIHBoYXNlLCB0aWxlU2l6ZSk7CiAgICAgbV9ncmFwaGlj
c0xheWVyLT5zZXRDb250ZW50c1RpbGVTaXplKHRpbGVTaXplKTsKICAgICBtX2dyYXBoaWNzTGF5
ZXItPnNldENvbnRlbnRzVGlsZVBoYXNlKHBoYXNlKTsKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNl
dENvbnRlbnRzUmVjdChkZXN0UmVjdCk7CkBAIC0xOTIxLDcgKzE5MjEsNyBAQCBMYXlvdXRSZWN0
IFJlbmRlckxheWVyQmFja2luZzo6Y29udGVudHNCb3goKSBjb25zdAogICAgIGlmICghaXM8UmVu
ZGVyQm94PihyZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAotICAg
IFJlbmRlckJveCYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsK
KyAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOwog
ICAgIExheW91dFJlY3QgY29udGVudHNSZWN0OwogI2lmIEVOQUJMRShWSURFTykKICAgICBpZiAo
aXM8UmVuZGVyVmlkZW8+KHJlbmRlckJveCkpCkBAIC0xOTU3LDEwICsxOTU3LDEwIEBAIHN0YXRp
YyBMYXlvdXRSZWN0IGJhY2tncm91bmRSZWN0Rm9yQm94KGNvbnN0IFJlbmRlckJveCYgYm94KQog
CiBGbG9hdFJlY3QgUmVuZGVyTGF5ZXJCYWNraW5nOjpiYWNrZ3JvdW5kQm94Rm9yUGFpbnRpbmco
KSBjb25zdAogewotICAgIGlmICghcmVuZGVyZXIoKS5pc0JveCgpKQorICAgIGlmICghaXM8UmVu
ZGVyQm94PihyZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCi0gICAg
TGF5b3V0UmVjdCBiYWNrZ3JvdW5kQm94ID0gYmFja2dyb3VuZFJlY3RGb3JCb3godG9SZW5kZXJC
b3gocmVuZGVyZXIoKSkpOworICAgIExheW91dFJlY3QgYmFja2dyb3VuZEJveCA9IGJhY2tncm91
bmRSZWN0Rm9yQm94KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwogICAgIGJhY2tn
cm91bmRCb3gubW92ZShjb250ZW50T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIoKSk7CiAgICAgcmV0
dXJuIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoYmFja2dyb3VuZEJveCwgZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CiB9CkBAIC0yMzU3LDcgKzIzNTcsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6
c3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEFuaW1hdGlvbiogYW5pbQog
CiAgICAgYm9vbCBkaWRBbmltYXRlID0gZmFsc2U7CiAKLSAgICBpZiAoaGFzVHJhbnNmb3JtICYm
IG1fZ3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKHRyYW5zZm9ybVZlY3RvciwgdG9SZW5kZXJC
b3gocmVuZGVyZXIoKSkucGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCgpLnNpemUoKSwgYW5pbSwg
a2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUoKSwgdGltZU9mZnNldCkpCisgICAgaWYgKGhhc1RyYW5z
Zm9ybSAmJiBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih0cmFuc2Zvcm1WZWN0b3IsIGRv
d25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkucGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCgp
LnNpemUoKSwgYW5pbSwga2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUoKSwgdGltZU9mZnNldCkpCiAg
ICAgICAgIGRpZEFuaW1hdGUgPSB0cnVlOwogCiAgICAgaWYgKGhhc09wYWNpdHkgJiYgbV9ncmFw
aGljc0xheWVyLT5hZGRBbmltYXRpb24ob3BhY2l0eVZlY3RvciwgSW50U2l6ZSgpLCBhbmltLCBr
ZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpLCB0aW1lT2Zmc2V0KSkKQEAgLTI0MDYsNyArMjQwNiw3
IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRyYW5zaXRpb24oZG91YmxlIHRpbWVP
ZmZzZXQsIENTU1Byb3BlcnR5SUQgcHJvcGVyCiAgICAgICAgICAgICBLZXlmcmFtZVZhbHVlTGlz
dCB0cmFuc2Zvcm1WZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CiAgICAg
ICAgICAgICB0cmFuc2Zvcm1WZWN0b3IuaW5zZXJ0KFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlOjpj
cmVhdGUoMCwgZnJvbVN0eWxlLT50cmFuc2Zvcm0oKSkpOwogICAgICAgICAgICAgdHJhbnNmb3Jt
VmVjdG9yLmluc2VydChUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZTo6Y3JlYXRlKDEsIHRvU3R5bGUt
PnRyYW5zZm9ybSgpKSk7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaGljc0xheWVyLT5hZGRBbmlt
YXRpb24odHJhbnNmb3JtVmVjdG9yLCB0b1JlbmRlckJveChyZW5kZXJlcigpKS5waXhlbFNuYXBw
ZWRCb3JkZXJCb3hSZWN0KCkuc2l6ZSgpLCB0cmFuc2Zvcm1BbmltLCBHcmFwaGljc0xheWVyOjph
bmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3Jt
KSwgdGltZU9mZnNldCkpIHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFu
aW1hdGlvbih0cmFuc2Zvcm1WZWN0b3IsIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSku
cGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCgpLnNpemUoKSwgdHJhbnNmb3JtQW5pbSwgR3JhcGhp
Y3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybSksIHRpbWVPZmZzZXQpKSB7CiAgICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJl
IHRoYXQgdGhlIGNvcnJlY3QgdHJhbnNmb3JtIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9u
IGVuZHMsIGFsc28gc2V0IHRoZSBmaW5hbCB0cmFuc2Zvcm0uCiAgICAgICAgICAgICAgICAgdXBk
YXRlVHJhbnNmb3JtKCp0b1N0eWxlKTsKICAgICAgICAgICAgICAgICBkaWRBbmltYXRlID0gdHJ1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCmlu
ZGV4IGM4NmZlOGY2NDNlMDE3NjUzNDA4YTU3ZmFjYWYwYTg1MzhiYjQxZjUuLjg2ZWJjMTdjZTc4
NThkYzAyNzIxMzVjYjJlMzY0OWExYTQyYjk3MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcApAQCAtMTQ5LDExICsxNDksMTIgQEAgdm9pZCBS
ZW5kZXJMaW5lQm94TGlzdDo6ZGlydHlMaW5lQm94ZXMoKQogICAgICAgICBjdXJyLT5kaXJ0eUxp
bmVCb3hlcygpOwogfQogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgdGFrZSBhIFJlbmRlckJveE1v
ZGVsT2JqZWN0Ji4KIGJvb2wgUmVuZGVyTGluZUJveExpc3Q6OnJhbmdlSW50ZXJzZWN0c1JlY3Qo
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbSwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgTGF5
b3V0UG9pbnQmIG9mZnNldCkgY29uc3QKIHsKICAgICBSZW5kZXJCb3gqIGJsb2NrOwotICAgIGlm
IChyZW5kZXJlci0+aXNCb3goKSkKLSAgICAgICAgYmxvY2sgPSB0b1JlbmRlckJveChyZW5kZXJl
cik7CisgICAgaWYgKGlzPFJlbmRlckJveD4oKnJlbmRlcmVyKSkKKyAgICAgICAgYmxvY2sgPSBk
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKTsKICAgICBlbHNlCiAgICAgICAgIGJsb2NrID0g
cmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpOwogICAgIExheW91dFVuaXQgcGh5c2ljYWxTdGFy
dCA9IGJsb2NrLT5mbGlwRm9yV3JpdGluZ01vZGUobG9naWNhbFRvcCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApp
bmRleCBkYTg5MmIwNzZmM2ZlYmNkMTcyNDc3N2MwYWVlNzc3NWQ4MmNkOWM1Li45NWZmYzc4ZDYw
OWRiYTlmNzFmYjc1MDEwNWQ1NWM2MGY1NTFjODQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTQ0LDE3
ICs0NCwxNyBAQCB2b2lkIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQo
KQogewogICAgIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0KCk7CiAKLSAgICBpZiAoc3R5bGUoKS5k
aXNwbGF5KCkgPT0gTk9ORSB8fCAhbmV4dFNpYmxpbmcoKSB8fCAhbmV4dFNpYmxpbmcoKS0+aXNC
b3goKSkKKyAgICBpZiAoc3R5bGUoKS5kaXNwbGF5KCkgPT0gTk9ORSB8fCAhaXM8UmVuZGVyQm94
PihuZXh0U2libGluZygpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyQm94KiBidXR0
b25Cb3ggPSB0b1JlbmRlckJveChuZXh0U2libGluZygpKTsKLSAgICBpbnQgYWJzb2x1dGVPZmZz
ZXRUb3AgPSBidXR0b25Cb3gtPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KDAsIC1zaXplKCku
aGVpZ2h0KCkpKS55KCk7CisgICAgUmVuZGVyQm94JiBidXR0b25Cb3ggPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KCpuZXh0U2libGluZygpKTsKKyAgICBpbnQgYWJzb2x1dGVPZmZzZXRUb3AgPSBidXR0
b25Cb3gubG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoMCwgLXNpemUoKS5oZWlnaHQoKSkpLnko
KTsKIAogICAgIExheW91dFN0YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxlcigmdmlldygp
KTsKIAogICAgIC8vIElmIHRoZSBzbGlkZXIgd291bGQgYmUgcmVuZGVyZWQgb3V0c2lkZSB0aGUg
cGFnZSwgaXQgc2hvdWxkIGJlIG1vdmVkIGJlbG93IHRoZSBjb250cm9scy4KICAgICBpZiAoVU5M
SUtFTFkoYWJzb2x1dGVPZmZzZXRUb3AgPCAwKSkKLSAgICAgICAgc2V0WShidXR0b25Cb3gtPm9m
ZnNldFRvcCgpICsgdGhlbWUoKS52b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihidXR0
b25Cb3gsIHBpeGVsU25hcHBlZFNpemUoKSkueSgpKTsKKyAgICAgICAgc2V0WShidXR0b25Cb3gu
b2Zmc2V0VG9wKCkgKyB0aGVtZSgpLnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKCZi
dXR0b25Cb3gsIHBpeGVsU25hcHBlZFNpemUoKSkueSgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAppbmRleCA1N2Y0MWI1OWMzNDEwOTNiYmRj
Y2Q2MWY1OTYxZGE4YWJiMmVjMTc0Li5kMjBjYjAzZGFjZGZiODg2NjYwYTFjODI0MzZlMjA2OTFj
ZjQzNjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcApAQCAtOTAsOSArOTAsOSBAQCBSZW5kZXJNdWx0aUNv
bHVtblNldCogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpsYXN0TXVsdGlDb2x1bW5TZXQo
KSBjb25zdAogUmVuZGVyQm94KiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmZpcnN0Q29s
dW1uU2V0T3JTcGFubmVyKCkgY29uc3QKIHsKICAgICBpZiAoUmVuZGVyT2JqZWN0KiBzaWJsaW5n
ID0gbmV4dFNpYmxpbmcoKSkgewotICAgICAgICBBU1NFUlQoc2libGluZy0+aXNCb3goKSk7Ci0g
ICAgICAgIEFTU0VSVChzaWJsaW5nLT5pc1JlbmRlck11bHRpQ29sdW1uU2V0KCkgfHwgZmluZENv
bHVtblNwYW5uZXJQbGFjZWhvbGRlcih0b1JlbmRlckJveChzaWJsaW5nKSkpOwotICAgICAgICBy
ZXR1cm4gdG9SZW5kZXJCb3goc2libGluZyk7CisgICAgICAgIEFTU0VSVChpczxSZW5kZXJCb3g+
KCpzaWJsaW5nKSk7CisgICAgICAgIEFTU0VSVChpczxSZW5kZXJNdWx0aUNvbHVtblNldD4oKnNp
YmxpbmcpIHx8IGZpbmRDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoZG93bmNhc3Q8UmVuZGVyQm94
PihzaWJsaW5nKSkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihzaWJsaW5n
KTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xMDEsMTAgKzEwMSw4IEBAIFJl
bmRlckJveCogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpuZXh0Q29sdW1uU2V0T3JTcGFu
bmVyU2libGluZ09mKGNvbnN0IFJlCiB7CiAgICAgaWYgKCFjaGlsZCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogc2libGluZyA9IGNoaWxkLT5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgIEFTU0VSVChzaWJsaW5nLT5pc0JveCgpKTsKLSAgICAgICAgcmV0
dXJuIHRvUmVuZGVyQm94KHNpYmxpbmcpOwotICAgIH0KKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBz
aWJsaW5nID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJCb3g+KHNpYmxpbmcpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0xMTMsMTAg
KzExMSw5IEBAIFJlbmRlckJveCogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpwcmV2aW91
c0NvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZihjb25zCiAgICAgaWYgKCFjaGlsZCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKFJlbmRlck9iamVjdCogc2libGluZyA9IGNoaWxk
LT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBBU1NFUlQoc2libGluZy0+aXNCb3goKSk7
Ci0gICAgICAgIGlmIChzaWJsaW5nLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkKKyAgICAgICAgaWYg
KGlzPFJlbmRlckZsb3dUaHJlYWQ+KCpzaWJsaW5nKSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3goc2libGluZyk7CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJCb3g+KHNpYmxpbmcpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KQEAgLTIyMiw3ICsyMTksNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZDo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKCkKIAogUmVuZGVyT2JqZWN0KiBSZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQ6OnJlc29sdmVNb3ZlZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQpIGNv
bnN0CiB7Ci0gICAgaWYgKGNoaWxkLT5zdHlsZSgpLmNvbHVtblNwYW4oKSAhPSBDb2x1bW5TcGFu
QWxsIHx8ICFjaGlsZC0+aXNCb3goKSkgeworICAgIGlmIChjaGlsZC0+c3R5bGUoKS5jb2x1bW5T
cGFuKCkgIT0gQ29sdW1uU3BhbkFsbCB8fCAhaXM8UmVuZGVyQm94PigqY2hpbGQpKSB7CiAgICAg
ICAgIC8vIFdlIG9ubHkgbmVlZCB0byByZXNvbHZlIGZvciBjb2x1bW4gc3Bhbm5lcnMuCiAgICAg
ICAgIHJldHVybiBjaGlsZDsKICAgICB9CkBAIC0yMzIsNyArMjI5LDcgQEAgUmVuZGVyT2JqZWN0
KiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnJlc29sdmVNb3ZlZENoaWxkKFJlbmRlck9i
amVjdCogY2hpbGQKICAgICAvLyBjcmVhdGUgYW5kIGluc2VydCBhIHJlbmRlcmVyIGZvciB0aGUg
c2libGluZyBub2RlIGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUgc3Bhbm5lciwgd2UgbmVlZAog
ICAgIC8vIHRvIG1hcCB0aGF0IHNwYW5uZXIgcmVuZGVyZXIgdG8gdGhlIHNwYW5uZXIncyBwbGFj
ZWhvbGRlciwgd2hpY2ggaXMgd2hlcmUgdGhlIG5ldyBpbnNlcnRlZAogICAgIC8vIHJlbmRlcmVy
IGJlbG9uZ3MuCi0gICAgaWYgKFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBw
bGFjZWhvbGRlciA9IGZpbmRDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIodG9SZW5kZXJCb3goY2hp
bGQpKSkKKyAgICBpZiAoUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIHBsYWNl
aG9sZGVyID0gZmluZENvbHVtblNwYW5uZXJQbGFjZWhvbGRlcihkb3duY2FzdDxSZW5kZXJCb3g+
KGNoaWxkKSkpCiAgICAgICAgIHJldHVybiBwbGFjZWhvbGRlcjsKIAogICAgIC8vIFRoaXMgaXMg
YW4gaW52YWxpZCBzcGFubmVyLCBvciBpdHMgcGxhY2Vob2xkZXIgaGFzbid0IGJlZW4gY3JlYXRl
ZCB5ZXQuIFRoaXMgaGFwcGVucyB3aGVuCkBAIC0yNTMsMTEgKzI1MCwxMSBAQCBzdGF0aWMgYm9v
bCBpc1ZhbGlkQ29sdW1uU3Bhbm5lcihSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqIGZsb3dU
aHJlYWQsIFJlbmRlcgogICAgIAogICAgIC8vIEZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZW5k
ZXJlciBpdHNlbGYgaGFzIHRoZSByaWdodCBwcm9wZXJ0aWVzIGZvciBiZWNvbWluZyBhIHNwYW5u
ZXIuCiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gZGVzY2VuZGFudC0+c3R5bGUoKTsKLSAgICBp
ZiAoc3R5bGUuY29sdW1uU3BhbigpICE9IENvbHVtblNwYW5BbGwgfHwgIWRlc2NlbmRhbnQtPmlz
Qm94KCkgfHwgZGVzY2VuZGFudC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQor
ICAgIGlmIChzdHlsZS5jb2x1bW5TcGFuKCkgIT0gQ29sdW1uU3BhbkFsbCB8fCAhaXM8UmVuZGVy
Qm94PigqZGVzY2VuZGFudCkgfHwgZGVzY2VuZGFudC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9z
aXRpb25lZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZW5kZXJCbG9jayogY29u
dGFpbmVyID0gZGVzY2VuZGFudC0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKCFjb250YWlu
ZXItPmlzUmVuZGVyQmxvY2tGbG93KCkgfHwgY29udGFpbmVyLT5jaGlsZHJlbklubGluZSgpKSB7
CisgICAgaWYgKCFpczxSZW5kZXJCbG9ja0Zsb3c+KCpjb250YWluZXIpIHx8IGNvbnRhaW5lci0+
Y2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICAvLyBOZWVkcyB0byBiZSBibG9jay1sZXZlbC4K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTI2OCw3ICsyNjUsNyBAQCBzdGF0aWMg
Ym9vbCBpc1ZhbGlkQ29sdW1uU3Bhbm5lcihSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqIGZs
b3dUaHJlYWQsIFJlbmRlcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBUaGlzIGxv
b2tzIGxpa2UgYSBzcGFubmVyLCBidXQgaWYgd2UncmUgaW5zaWRlIHNvbWV0aGluZyB1bmJyZWFr
YWJsZSwgaXQncyBub3QgdG8gYmUgdHJlYXRlZCBhcyBvbmUuCi0gICAgZm9yIChSZW5kZXJCb3gq
IGFuY2VzdG9yID0gdG9SZW5kZXJCb3goZGVzY2VuZGFudCktPmNvbnRhaW5pbmdCbG9jaygpOyBh
bmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKKyAgICBm
b3IgKFJlbmRlckJveCogYW5jZXN0b3IgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpkZXNjZW5kYW50
KS5jb250YWluaW5nQmxvY2soKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPmNvbnRh
aW5pbmdCbG9jaygpKSB7CiAgICAgICAgIGlmIChhbmNlc3Rvci0+aXNSZW5kZXJGbG93VGhyZWFk
KCkpIHsKICAgICAgICAgICAgIC8vIERvbid0IGFsbG93IGFueSBpbnRlcnZlbmluZyBub24tbXVs
dGljb2wgZnJhZ21lbnRhdGlvbiBjb250ZXh0cy4gVGhlIHNwZWMgZG9lc24ndCBzYXkKICAgICAg
ICAgICAgIC8vIGFueXRoaW5nIGFib3V0IGRpc2FsbG93aW5nIHRoaXMsIGJ1dCBpdCdzIGp1c3Qg
Z29pbmcgdG8gYmUgdG9vIGNvbXBsaWNhdGVkIHRvCkBAIC00MTAsOSArNDA3LDkgQEAgdm9pZCBS
ZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmZsb3dUaHJlYWREZXNjZW5kYW50SW5zZXJ0ZWQo
UmVuZGVyT2JqZWN0KiBkZXMKIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpoYW5k
bGVTcGFubmVyUmVtb3ZhbChSZW5kZXJPYmplY3QqIHNwYW5uZXIpCiB7CiAgICAgIC8vIFRoZSBw
bGFjZWhvbGRlciBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZCwgYnV0IGlmIGl0IGhhc24n
dCwgZG8gc28gbm93LgotICAgIGlmIChSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
ciogcGxhY2Vob2xkZXIgPSBtX3NwYW5uZXJNYXAuZ2V0KHRvUmVuZGVyQm94KHNwYW5uZXIpKSkg
eworICAgIGlmIChSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciogcGxhY2Vob2xk
ZXIgPSBtX3NwYW5uZXJNYXAuZ2V0KGRvd25jYXN0PFJlbmRlckJveD4oc3Bhbm5lcikpKSB7CiAg
ICAgICAgIHBsYWNlaG9sZGVyLT5wYXJlbnQoKS0+cmVtb3ZlQ2hpbGQoKnBsYWNlaG9sZGVyKTsK
LSAgICAgICAgbV9zcGFubmVyTWFwLnJlbW92ZSh0b1JlbmRlckJveChzcGFubmVyKSk7CisgICAg
ICAgIG1fc3Bhbm5lck1hcC5yZW1vdmUoZG93bmNhc3Q8UmVuZGVyQm94PihzcGFubmVyKSk7CiAg
ICAgfQogCiAgICAgaWYgKFJlbmRlck9iamVjdCogbmV4dCA9IHNwYW5uZXItPm5leHRTaWJsaW5n
KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZs
b3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1Ro
cmVhZC5jcHAKaW5kZXggNmVhNTYyMGQ4OWRlYzE2ZmNjMDdhNGU3OWZjZTNjMDI3MTU0YTg4ZC4u
NWNiY2ZmZDVjY2U2ZDIxOGVhNDFjNGI0Y2Y4ZWU1YzhkODY2OThlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKQEAgLTY3Miw4
ICs2NzIsOCBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlY3RvcjxS
ZWZQdHI8UmFuZ2U+PiYgcmFuZ2VPYmplY3RzLCBjb25zdAogICAgICAgICAgICAgICAgIGJvdW5k
aW5nQm94ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKS5saW5lc0JvdW5kaW5nQm94
KCk7CiAgICAgICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KCpyZW5kZXJlcikp
CiAgICAgICAgICAgICAgICAgYm91bmRpbmdCb3ggPSBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+
KCpyZW5kZXJlcikubGluZXNCb3VuZGluZ0JveCgpOwotICAgICAgICAgICAgZWxzZSBpZiAocmVu
ZGVyZXItPmlzQm94KCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJCb3gmIHJlbmRlckJveCA9
IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlz
PFJlbmRlckJveD4oKnJlbmRlcmVyKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHJlbmRlckJv
eCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKTsKICAgICAgICAgICAgICAgICBib3Vu
ZGluZ0JveCA9IHJlbmRlckJveC5mcmFtZVJlY3QoKTsKICAgICAgICAgICAgICAgICBpZiAocmVu
ZGVyQm94LmlzUmVsUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgICAgICBib3VuZGluZ0Jv
eC5tb3ZlKHJlbmRlckJveC5yZWxhdGl2ZVBvc2l0aW9uTG9naWNhbE9mZnNldCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggNmUwZmU1YzU5MTI1OTM1
YjI4MDM0ZTc2ZmE0ZjBmN2ZiODYxNGFkYS4uODg4MGRkZTg0YWE5NzdjNDM2NDJiYmM0NzA5MTcx
Mjc4OGI5MDJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
QEAgLTEzNTUsMTUgKzEzNTUsMTQgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmNvbXB1dGVSZWN0Rm9y
UmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q28KICAgICBpZiAo
cmVwYWludENvbnRhaW5lciA9PSB0aGlzKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXV0
byBvID0gcGFyZW50KCkpIHsKLSAgICAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKSB7Ci0g
ICAgICAgICAgICBSZW5kZXJCb3gqIGJveFBhcmVudCA9IHRvUmVuZGVyQm94KG8pOwotICAgICAg
ICAgICAgYm94UGFyZW50LT5hcHBseUNhY2hlZENsaXBBbmRTY3JvbGxPZmZzZXRGb3JSZXBhaW50
KHJlY3QpOworICAgIGlmIChhdXRvKiBwYXJlbnQgPSB0aGlzLT5wYXJlbnQoKSkgeworICAgICAg
ICBpZiAocGFyZW50LT5oYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyQm94PigqcGFyZW50KS5hcHBseUNhY2hlZENsaXBBbmRTY3JvbGxPZmZzZXRGb3JSZXBh
aW50KHJlY3QpOwogICAgICAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG8tPmNvbXB1dGVSZWN0Rm9yUmVwYWlu
dChyZXBhaW50Q29udGFpbmVyLCByZWN0LCBmaXhlZCk7CisgICAgICAgIHBhcmVudC0+Y29tcHV0
ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHJlY3QsIGZpeGVkKTsKICAgICB9CiB9
CiAKQEAgLTE0MDcsMTEgKzE0MDYsMTAgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNob3dMaW5lVHJl
ZUZvclRoaXMoKSBjb25zdAogdm9pZCBSZW5kZXJPYmplY3Q6OnNob3dSZWdpb25zSW5mb3JtYXRp
b24oKSBjb25zdAogewogICAgIGlmIChSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxv
d1RocmVhZENvbnRhaW5pbmdCbG9jaygpKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94
ID0gaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpIDogbnVsbHB0cjsKLSAgICAgICAgaWYgKGJv
eCkgeworICAgICAgICBpZiAoaXM8UmVuZGVyQm94PigqdGhpcykpIHsKICAgICAgICAgICAgIFJl
bmRlclJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxscHRyOwogICAgICAgICAgICAgUmVuZGVyUmVn
aW9uKiBlbmRSZWdpb24gPSBudWxscHRyOwotICAgICAgICAgICAgZmxvd1RocmVhZC0+Z2V0UmVn
aW9uUmFuZ2VGb3JCb3goYm94LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsKKyAgICAgICAgICAg
IGZsb3dUaHJlYWQtPmdldFJlZ2lvblJhbmdlRm9yQm94KGRvd25jYXN0PFJlbmRlckJveD4odGhp
cyksIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pOwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgW1JzOiVwIFJlOiVwXSIsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTUwOSw5ICsxNTA3LDkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNob3dSZW5kZXJP
YmplY3QoYm9vbCBtYXJrLCBpbnQgZGVwdGgpIGNvbnN0CiAgICAgZWxzZQogICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiVzIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIAotICAgIGlmIChpc0JveCgp
KSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3godGhpcyk7Ci0g
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAoJS4yZiwgJS4yZikgKCUuMmYsICUuMmYpIiwgYm94
LT54KCkudG9GbG9hdCgpLCBib3gtPnkoKS50b0Zsb2F0KCksIGJveC0+d2lkdGgoKS50b0Zsb2F0
KCksIGJveC0+aGVpZ2h0KCkudG9GbG9hdCgpKTsKKyAgICBpZiAoaXM8UmVuZGVyQm94PigqdGhp
cykpIHsKKyAgICAgICAgY29uc3QgYXV0byYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqdGhp
cyk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAoJS4yZiwgJS4yZikgKCUuMmYsICUuMmYp
IiwgYm94LngoKS50b0Zsb2F0KCksIGJveC55KCkudG9GbG9hdCgpLCBib3gud2lkdGgoKS50b0Zs
b2F0KCksIGJveC5oZWlnaHQoKS50b0Zsb2F0KCkpOwogICAgIH0KIAogICAgIGZwcmludGYoc3Rk
ZXJyLCAiIHJlbmRlcmVyLT4oJXApIiwgdGhpcyk7CkBAIC0xNzEzLDM2ICsxNzExLDM2IEBAIHZv
aWQgUmVuZGVyT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250CiAgICAgaWYgKHJlcGFpbnRDb250YWluZXIgPT0gdGhpcykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBvID0gcGFyZW50KCk7Ci0gICAgaWYgKCFvKQor
ICAgIGF1dG8qIHBhcmVudCA9IHRoaXMtPnBhcmVudCgpOworICAgIGlmICghcGFyZW50KQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgY2FsbCBvZmZzZXRGcm9t
Q29udGFpbmVyIHRvIHNoYXJlIGNvZGUsIGJ1dCBJJ20gbm90IHN1cmUgaXQncyBldmVyIGNhbGxl
ZC4KICAgICBMYXlvdXRQb2ludCBjZW50ZXJQb2ludCh0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2lu
dCgpKTsKLSAgICBpZiAobW9kZSAmIEFwcGx5Q29udGFpbmVyRmxpcCAmJiBvLT5pc0JveCgpKSB7
Ci0gICAgICAgIGlmIChvLT5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCi0g
ICAgICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKHRvUmVuZGVyQm94KG8pLT5mbGlwRm9yV3Jp
dGluZ01vZGUoTGF5b3V0UG9pbnQodHJhbnNmb3JtU3RhdGUubWFwcGVkUG9pbnQoKSkpIC0gY2Vu
dGVyUG9pbnQpOworICAgIGlmIChtb2RlICYgQXBwbHlDb250YWluZXJGbGlwICYmIGlzPFJlbmRl
ckJveD4oKnBhcmVudCkpIHsKKyAgICAgICAgaWYgKHBhcmVudC0+c3R5bGUoKS5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpKQorICAgICAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZShkb3du
Y2FzdDxSZW5kZXJCb3g+KHBhcmVudCktPmZsaXBGb3JXcml0aW5nTW9kZShMYXlvdXRQb2ludCh0
cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKSkgLSBjZW50ZXJQb2ludCk7CiAgICAgICAgIG1v
ZGUgJj0gfkFwcGx5Q29udGFpbmVyRmxpcDsKICAgICB9CiAKLSAgICBpZiAoby0+aXNCb3goKSkK
LSAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZSgtdG9SZW5kZXJCb3gobyktPnNjcm9sbGVkQ29u
dGVudE9mZnNldCgpKTsKKyAgICBpZiAoaXM8UmVuZGVyQm94PigqcGFyZW50KSkKKyAgICAgICAg
dHJhbnNmb3JtU3RhdGUubW92ZSgtZG93bmNhc3Q8UmVuZGVyQm94PigqcGFyZW50KS5zY3JvbGxl
ZENvbnRlbnRPZmZzZXQoKSk7CiAKLSAgICBvLT5tYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRD
b250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2RlLCB3YXNGaXhlZCk7CisgICAgcGFyZW50LT5t
YXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2Rl
LCB3YXNGaXhlZCk7CiB9CiAKIGNvbnN0IFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpwdXNo
TWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9y
VG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKIHsKICAgICBB
U1NFUlRfVU5VU0VEKGFuY2VzdG9yVG9TdG9wQXQsIGFuY2VzdG9yVG9TdG9wQXQgIT0gdGhpcyk7
CiAKLSAgICBhdXRvIGNvbnRhaW5lciA9IHBhcmVudCgpOworICAgIGF1dG8qIGNvbnRhaW5lciA9
IHBhcmVudCgpOwogICAgIGlmICghY29udGFpbmVyKQotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgY2FsbCBvZmZz
ZXRGcm9tQ29udGFpbmVyIHRvIHNoYXJlIGNvZGUsIGJ1dCBJJ20gbm90IHN1cmUgaXQncyBldmVy
IGNhbGxlZC4KICAgICBMYXlvdXRTaXplIG9mZnNldDsKLSAgICBpZiAoY29udGFpbmVyLT5pc0Jv
eCgpKQotICAgICAgICBvZmZzZXQgPSAtdG9SZW5kZXJCb3goY29udGFpbmVyKS0+c2Nyb2xsZWRD
b250ZW50T2Zmc2V0KCk7CisgICAgaWYgKGlzPFJlbmRlckJveD4oKmNvbnRhaW5lcikpCisgICAg
ICAgIG9mZnNldCA9IC1kb3duY2FzdDxSZW5kZXJCb3g+KCpjb250YWluZXIpLnNjcm9sbGVkQ29u
dGVudE9mZnNldCgpOwogCiAgICAgZ2VvbWV0cnlNYXAucHVzaCh0aGlzLCBvZmZzZXQsIGZhbHNl
KTsKICAgICAKQEAgLTE3NTEsMTEgKzE3NDksMTAgQEAgY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5k
ZXJPYmplY3Q6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE8K
IAogdm9pZCBSZW5kZXJPYmplY3Q6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50KE1hcENvb3JkaW5h
dGVzRmxhZ3MgbW9kZSwgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAogewot
ICAgIGF1dG8gbyA9IHBhcmVudCgpOwotICAgIGlmIChvKSB7Ci0gICAgICAgIG8tPm1hcEFic29s
dXRlVG9Mb2NhbFBvaW50KG1vZGUsIHRyYW5zZm9ybVN0YXRlKTsKLSAgICAgICAgaWYgKG8tPmlz
Qm94KCkpCi0gICAgICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKHRvUmVuZGVyQm94KG8pLT5z
Y3JvbGxlZENvbnRlbnRPZmZzZXQoKSk7CisgICAgaWYgKGF1dG8qIHBhcmVudCA9IHRoaXMtPnBh
cmVudCgpKSB7CisgICAgICAgIHBhcmVudC0+bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQobW9kZSwg
dHJhbnNmb3JtU3RhdGUpOworICAgICAgICBpZiAoaXM8UmVuZGVyQm94PigqcGFyZW50KSkKKyAg
ICAgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoZG93bmNhc3Q8UmVuZGVyQm94PigqcGFyZW50
KS5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKSk7CiAgICAgfQogfQogCkBAIC0yMzAzLDE5ICsyMzAw
LDE2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNvbG9ycyhpbnQgZGVj
b3JhdGlvbnMsIENvbG9yJiB1bmRlcmxpbmUsIENvCiB2b2lkIFJlbmRlck9iamVjdDo6YWRkQW5u
b3RhdGVkUmVnaW9ucyhWZWN0b3I8QW5ub3RhdGVkUmVnaW9uVmFsdWU+JiByZWdpb25zKQogewog
ICAgIC8vIENvbnZlcnQgdGhlIHN0eWxlIHJlZ2lvbnMgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMu
Ci0gICAgaWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgIWlzQm94KCkpCisg
ICAgaWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgIWlzPFJlbmRlckJveD4o
KnRoaXMpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgUmVuZGVyQm94KiBib3ggPSB0b1Jl
bmRlckJveCh0aGlzKTsKKyAgICBhdXRvJiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCp0aGlz
KTsKICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZSgpOwogCiAgICAgY29u
c3QgVmVjdG9yPFN0eWxlRGFzaGJvYXJkUmVnaW9uPiYgc3R5bGVSZWdpb25zID0gc3R5bGUoKS5k
YXNoYm9hcmRSZWdpb25zKCk7Ci0gICAgdW5zaWduZWQgaSwgY291bnQgPSBzdHlsZVJlZ2lvbnMu
c2l6ZSgpOwotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIFN0eWxl
RGFzaGJvYXJkUmVnaW9uIHN0eWxlUmVnaW9uID0gc3R5bGVSZWdpb25zW2ldOwotCi0gICAgICAg
IExheW91dFVuaXQgdyA9IGJveC0+d2lkdGgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBoID0gYm94
LT5oZWlnaHQoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0eWxlUmVnaW9uIDogc3R5bGVSZWdp
b25zKSB7CisgICAgICAgIExheW91dFVuaXQgdyA9IGJveC53aWR0aCgpOworICAgICAgICBMYXlv
dXRVbml0IGggPSBib3guaGVpZ2h0KCk7CiAKICAgICAgICAgQW5ub3RhdGVkUmVnaW9uVmFsdWUg
cmVnaW9uOwogICAgICAgICByZWdpb24ubGFiZWwgPSBzdHlsZVJlZ2lvbi5sYWJlbDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IGY4MjkzYTlmZWI3ZGFhZThh
NmU1MGEwYjEwYTk1OTQzYzA5YjQ4MWMuLjkwZTQ0NTBhYWY3ZWIyMjk4NTMyZTA4YjQ3MGQyY2Yw
M2JlOTZjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAt
MTQ5NCw4ICsxNDk0LDggQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICAvLyBDaGVjayBr
aWRzIGZpcnN0LgogICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgbG9jYXRpb25JbkNvbnRh
aW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgY3VycmVu
dFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpKSkgewogICAgICAgICBmb3IgKFJlbmRlck9iamVj
dCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2li
bGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYgIXRvUmVuZGVyQm94
KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFibGVTZWN0aW9u
KCkgfHwgY2hpbGQtPmlzVGFibGVDYXB0aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0
UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKHRvUmVuZGVyQm94
KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlvbik7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQm94
PigqY2hpbGQpICYmICFkb3duY2FzdDxSZW5kZXJCb3g+KCpjaGlsZCkuaGFzU2VsZlBhaW50aW5n
TGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgfHwgY2hpbGQtPmlzVGFibGVDYXB0
aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBG
b3JXcml0aW5nTW9kZUZvckNoaWxkKGRvd25jYXN0PFJlbmRlckJveD4oY2hpbGQpLCBhZGp1c3Rl
ZExvY2F0aW9uKTsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVl
c3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgY2hpbGRQb2ludCwgYWN0aW9uKSkgewog
ICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9MYXlvdXRQ
b2ludChsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSBjaGlsZFBvaW50KSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKaW5kZXggNTI3MThkYTNiMTUw
NTZlNzNjODJjNWI3MDY1YmQ0NmE1NDk5MWNhYS4uNDBiNGJmZDE0NTA0YjBlYTM4ZmY2N2Q5YmU4
Y2NkZDM4Y2ZiN2Q1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCkBAIC0xMDYsMTUgKzEwNiwxMyBAQCBQYXNz
UmVmPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6Y3JlYXRlSW5uZXJU
ZXh0U3R5bGUoY29uc3QgUmVuZAogUmVuZGVyT2JqZWN0KiBSZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZTo6bGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQoYm9vbCByZWxheW91dENoaWxkcmVuKQog
ewogICAgIFJlbmRlck9iamVjdCogcGxhY2Vob2xkZXJSZW5kZXJlciA9IFJlbmRlclRleHRDb250
cm9sOjpsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGlsZChyZWxheW91dENoaWxkcmVuKTsKLSAgICBp
ZiAoIXBsYWNlaG9sZGVyUmVuZGVyZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghcGxh
Y2Vob2xkZXJSZW5kZXJlci0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyUmVu
ZGVyZXI7Ci0gICAgUmVuZGVyQm94KiBwbGFjZWhvbGRlckJveCA9IHRvUmVuZGVyQm94KHBsYWNl
aG9sZGVyUmVuZGVyZXIpOwotICAgIHBsYWNlaG9sZGVyQm94LT5zdHlsZSgpLnNldExvZ2ljYWxX
aWR0aChMZW5ndGgoY29udGVudExvZ2ljYWxXaWR0aCgpIC0gcGxhY2Vob2xkZXJCb3gtPmJvcmRl
ckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSwgRml4ZWQpKTsKLSAgICBwbGFjZWhvbGRlckJveC0+
bGF5b3V0SWZOZWVkZWQoKTsKLSAgICBwbGFjZWhvbGRlckJveC0+c2V0WChib3JkZXJMZWZ0KCkg
KyBwYWRkaW5nTGVmdCgpKTsKLSAgICBwbGFjZWhvbGRlckJveC0+c2V0WShib3JkZXJUb3AoKSAr
IHBhZGRpbmdUb3AoKSk7CisgICAgaWYgKGlzPFJlbmRlckJveD4ocGxhY2Vob2xkZXJSZW5kZXJl
cikpIHsKKyAgICAgICAgYXV0byYgcGxhY2Vob2xkZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+
KCpwbGFjZWhvbGRlclJlbmRlcmVyKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3guc3R5bGUoKS5z
ZXRMb2dpY2FsV2lkdGgoTGVuZ3RoKGNvbnRlbnRMb2dpY2FsV2lkdGgoKSAtIHBsYWNlaG9sZGVy
Qm94LmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSwgRml4ZWQpKTsKKyAgICAgICAgcGxh
Y2Vob2xkZXJCb3gubGF5b3V0SWZOZWVkZWQoKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3guc2V0
WChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gu
c2V0WShib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7CisgICAgfQogICAgIHJldHVybiBwbGFj
ZWhvbGRlclJlbmRlcmVyOwogfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAKaW5kZXggNGZjNjBiOTYxZmQyMWZlY2JhODUyYmE0MDhhMGRhNDkzMWU5MjhjNy4u
OTY4NDEwMzNjMjg0ZTA2ZTIxMGZlZjYwMGU1YjVmM2VmYTI3NjZmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCkBAIC02NDgsMTUgKzY0OCwxNSBAQCBDb2xvciBS
ZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjb25zdAogICAgIHJldHVybiBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9yKCk7CiB9CiAKLWludCBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBS
ZW5kZXJPYmplY3QmIG8pIGNvbnN0CitpbnQgUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24o
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsKLSAgICBpZiAoIW8uaXNCb3go
KSkKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIGNvbnN0IFJlbmRlckJveCYgYm94ID0gKnRvUmVuZGVyQm94KCZvKTsKKyAgICBjb25z
dCBhdXRvJiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKTsKIAogI2lmIFVTRShO
RVdfVEhFTUUpCi0gICAgcmV0dXJuIGJveC5oZWlnaHQoKSArIGJveC5tYXJnaW5Ub3AoKSArIG1f
dGhlbWUtPmJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50KG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkp
ICogby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAgICByZXR1cm4gYm94LmhlaWdodCgpICsg
Ym94Lm1hcmdpblRvcCgpICsgbV90aGVtZS0+YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQocmVu
ZGVyZXIuc3R5bGUoKS5hcHBlYXJhbmNlKCkpICogcmVuZGVyZXIuc3R5bGUoKS5lZmZlY3RpdmVa
b29tKCk7CiAjZWxzZQogICAgIHJldHVybiBib3guaGVpZ2h0KCkgKyBib3gubWFyZ2luVG9wKCk7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCmlu
ZGV4IDc3MjYyOGQzY2E1OTBhNjk3NmYyZTU0NzI5NjM0NWUwZTgzOWVkM2EuLmM1OTg3NWE2NWYz
NDdjNzA5NjZkOTg5MmZmYWQ1YWI1YzZmMzViYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lR3RrLmNwcApAQCAtMzczLDE5ICszNzMsMTggQEAgYm9vbCBSZW5kZXJU
aGVtZUd0azo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25z
dAogICAgIHJldHVybiBpc0VuYWJsZWQobyk7CiB9CiAKLWludCBSZW5kZXJUaGVtZUd0azo6YmFz
ZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CitpbnQgUmVuZGVyVGhl
bWVHdGs6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29u
c3QKIHsKLSAgICBpZiAoIW8uaXNCb3goKSkKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVy
ZXIpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHN0cmF0ZWd5IGlz
IHBvc3NpYmx5IGluY29ycmVjdCBmb3IgdGhlIEdUSysgcG9ydC4KLSAgICBpZiAoby5zdHlsZSgp
LmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQKLSAgICAgICAgfHwgby5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBSYWRpb1BhcnQpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyQm94KiBib3ggPSB0
b1JlbmRlckJveCgmbyk7Ci0gICAgICAgIHJldHVybiBib3gtPm1hcmdpblRvcCgpICsgYm94LT5o
ZWlnaHQoKSAtIDI7CisgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENo
ZWNrYm94UGFydCB8fCByZW5kZXJlci5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQp
IHsKKyAgICAgICAgY29uc3QgYXV0byYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJl
cik7CisgICAgICAgIHJldHVybiBib3gubWFyZ2luVG9wKCkgKyBib3guaGVpZ2h0KCkgLSAyOwog
ICAgIH0KIAotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihvKTsKKyAg
ICByZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24ocmVuZGVyZXIpOwogfQogCiBz
dGF0aWMgR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGly
ZWN0aW9uKQpAQCAtOTkwLDEzICs5ODksMTMgQEAgc3RhdGljIEludFJlY3QgY2VudGVyUmVjdFZl
cnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmQKICAg
ICBOb2RlKiBpbnB1dCA9IHJlbmRlck9iamVjdC5ub2RlKCktPnNoYWRvd0hvc3QoKTsKICAgICBp
ZiAoIWlucHV0KQogICAgICAgICBpbnB1dCA9IHJlbmRlck9iamVjdC5ub2RlKCk7Ci0gICAgaWYg
KCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKKyAgICBpZiAoIWlzPFJlbmRlckJveD4oKmlu
cHV0LT5yZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAogICAgIC8vIElm
IHBvc3NpYmxlIGNlbnRlciB0aGUgeS1jb29yZGluYXRlIG9mIHRoZSByZWN0IHZlcnRpY2FsbHkg
aW4gdGhlIHBhcmVudCBpbnB1dCBlbGVtZW50LgogICAgIC8vIFdlIGFsc28gYWRkIG9uZSBwaXhl
bCBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSB5IGNvb3JkaW5hdGUgaXMgcm91bmRlZCB1cCBmb3Ig
Ym94IGhlaWdodHMKICAgICAvLyB0aGF0IGFyZSBldmVuLCB3aGljaCBsb29rcyBpbiByZWxhdGlv
biB0byB0aGUgYm94IHRleHQuCi0gICAgSW50UmVjdCBpbnB1dENvbnRlbnRCb3ggPSB0b1JlbmRl
ckJveChpbnB1dC0+cmVuZGVyZXIoKSktPmFic29sdXRlQ29udGVudEJveCgpOworICAgIEludFJl
Y3QgaW5wdXRDb250ZW50Qm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqaW5wdXQtPnJlbmRlcmVy
KCkpLmFic29sdXRlQ29udGVudEJveCgpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQg
ZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gu
CiAgICAgaW50IGljb25TaXplID0gc3RkOjptaW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHN0
ZDo6bWluKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwgcmVjdC5oZWlnaHQoKSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IDNhMDM1NzRhNzlhOWVi
ZWJkZDc1ZmIwOTYyY2I5OGQxN2VhMGFhYzAuLmE3ZGJlODU3MzI5ZDFjNjY3ZTI3ZjE0YWM5M2U3
NDM5NTM0MzQ2ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1Mu
bW0KQEAgLTQyMiwxMCArNDIyLDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2ti
b3hEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpCiAKIGludCBS
ZW5kZXJUaGVtZUlPUzo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
cmVyKSBjb25zdAogewotICAgIGlmICghcmVuZGVyZXIuaXNCb3goKSkKKyAgICBpZiAoIWlzPFJl
bmRlckJveD4ocmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNvbnN0IFJlbmRl
ckJveCYgYm94ID0gKnRvUmVuZGVyQm94KCZyZW5kZXJlcik7CisgICAgY29uc3QgYXV0byYgYm94
ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7CiAKICAgICBpZiAoYm94LnN0eWxlKCku
YXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCB8fCBib3guc3R5bGUoKS5hcHBlYXJhbmNlKCkg
PT0gUmFkaW9QYXJ0KQogICAgICAgICByZXR1cm4gYm94Lm1hcmdpblRvcCgpICsgYm94LmhlaWdo
dCgpIC0gMjsgLy8gVGhlIGJhc2VsaW5lIGlzIDJweCB1cCBmcm9tIHRoZSBib3R0b20gb2YgdGhl
IGNoZWNrYm94L3JhZGlvIGluIEFwcEtpdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVTYWZhcmkuY3BwCmluZGV4IGNhODMyNGRjZjU3YWQwZDU3OThlNDY3ZmZkMTRj
NDY1MGQ3M2U5ZTEuLmYzZGM1YTUxOWU0NWRlZThhMjE2YTFiYjI2ZDg5ZmUwNTY0OGY0NDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcApAQCAt
MzE3LDE3ICszMTcsMTcgQEAgSW50UmVjdCBSZW5kZXJUaGVtZVNhZmFyaTo6aW5mbGF0ZVJlY3Qo
Y29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY28KICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1pbnQgUmVuZGVyVGhlbWVTYWZhcmk6OmJhc2VsaW5lUG9zaXRpb24oY29uc3Qg
UmVuZGVyT2JqZWN0JiBvKSBjb25zdAoraW50IFJlbmRlclRoZW1lU2FmYXJpOjpiYXNlbGluZVBv
c2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFv
LmlzQm94KCkpCisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQg
fHwgby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpIHsKLSAgICAgICAgY29uc3Qg
UmVuZGVyQm94JiBib3ggPSB0b1JlbmRlckJveChvKTsKKyAgICBpZiAocmVuZGVyZXIuc3R5bGUo
KS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0IHx8IHJlbmRlcmVyLnN0eWxlKCkuYXBwZWFy
YW5jZSgpID09IFJhZGlvUGFydCkgeworICAgICAgICBjb25zdCBhdXRvJiBib3ggPSBkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuIGJveC5tYXJnaW5Ub3AoKSAr
IGJveC5oZWlnaHQoKSAtIDI7IC8vIFRoZSBiYXNlbGluZSBpcyAycHggdXAgZnJvbSB0aGUgYm90
dG9tIG9mIHRoZSBjaGVja2JveC9yYWRpbyBpbiBBcHBLaXQuCiAgICAgfQogCi0gICAgcmV0dXJu
IFJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKG8pOworICAgIHJldHVybiBSZW5kZXJUaGVt
ZTo6YmFzZWxpbmVQb3NpdGlvbihyZW5kZXJlcik7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVTYWZh
cmk6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCmluZGV4IGI3ZjI1N2Jm
OTMwZmYyY2IwMjc3ODA0MTU3YzgwZjhjMGNiZDRkZWIuLjQwY2U1Mjk2ZjQwZTU3MjU4Nzg1MzFj
OWM0NzhkYzdkMTk5M2RhMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lV2luLmNwcApAQCAtOTIzLDEyICs5MjMsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFp
bnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFAK
IHsKICAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CiAgICAgQVNTRVJUKG8ucGFyZW50KCkpOwotICAg
IGlmICghby5wYXJlbnQoKSB8fCAhby5wYXJlbnQoKS0+aXNCb3goKSkKKyAgICBpZiAoIWlzPFJl
bmRlckJveD4oby5wYXJlbnQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBS
ZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8ucGFyZW50KCkpOwogCi0g
ICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJv
eCgpOworICAgIEludFJlY3QgcGFyZW50Qm94ID0gZG93bmNhc3Q8UmVuZGVyQm94Pigqby5wYXJl
bnQoKSkuYWJzb2x1dGVDb250ZW50Qm94KCk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBz
Y2FsZWQgYnV0dG9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJv
eAogICAgIGJvdW5kcy5zZXRIZWlnaHQobWluKHBhcmVudEJveC53aWR0aCgpLCBtaW4ocGFyZW50
Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7CkBAIC05NzQsMTEgKzk3MiwxMCBAQCBi
b29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KGNvbnN0IFJlbmRlck9iamVjdCYgbwogewogICAgIEludFJlY3QgYm91bmRzID0gcjsKICAgICBB
U1NFUlQoby5wYXJlbnQoKSk7Ci0gICAgaWYgKCFvLnBhcmVudCgpIHx8ICFvLnBhcmVudCgpLT5p
c0JveCgpKQorICAgIGlmICghaXM8UmVuZGVyQm94PihvLnBhcmVudCgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5k
ZXJCb3goby5wYXJlbnQoKSk7Ci0gICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJC
b3gtPmFic29sdXRlQ29udGVudEJveCgpOworICAgIEludFJlY3QgcGFyZW50Qm94ID0gZG93bmNh
c3Q8UmVuZGVyQm94Pigqby5wYXJlbnQoKSkuYWJzb2x1dGVDb250ZW50Qm94KCk7CiAgICAgCiAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdp
bGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKICAgICBib3VuZHMuc2V0SGVpZ2h0KG1pbihwYXJl
bnRCb3gud2lkdGgoKSwgbWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSkp
OwpAQCAtMTAxMCwxMSArMTAwNywxMCBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0CiAgICAgQVNT
RVJUKG8ucGFyZW50KCkpOwogICAgIGlmICghby5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICghby5wYXJlbnQoKSB8fCAhby5wYXJlbnQoKS0+aXNCb3goKSkKKyAgICBp
ZiAoIWlzPFJlbmRlckJveD4oby5wYXJlbnQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8ucGFyZW50
KCkpOwotICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNv
bnRlbnRCb3goKTsKKyAgICBJbnRSZWN0IHBhcmVudEJveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
Km8ucGFyZW50KCkpLmFic29sdXRlQ29udGVudEJveCgpOwogICAgIAogICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveAogICAg
IGJvdW5kcy5zZXRIZWlnaHQobWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91bmRzLmhlaWdodCgp
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5k
ZXggYTY0YmU2MmQwYmE1ODRkODRiNGYzNjI4YjJmNDlhZTliMzQ3MGNjMi4uMjRmMDdhNDc5MjFk
YmM3NDM2YzhmNjdjMWJmYjk0MWE4ZDU4NjljOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDQ1LDcgKzQ0NSw3IEBAIHZvaWQgUmVuZGVy
VHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRl
ck9iamVjdCYgbywKICAgICB9CiAgICAgCiAgICAgaWYgKGJlaGF2aW9yICYgUmVuZGVyQXNUZXh0
U2hvd092ZXJmbG93ICYmIGlzPFJlbmRlckJveD4obykpIHsKLSAgICAgICAgY29uc3QgUmVuZGVy
Qm94JiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KG8pOworICAgICAgICBjb25zdCBhdXRvJiBi
b3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KG8pOwogICAgICAgICBpZiAoYm94Lmhhc1JlbmRlck92
ZXJmbG93KCkpIHsKICAgICAgICAgICAgIExheW91dFJlY3QgbGF5b3V0T3ZlcmZsb3cgPSBib3gu
bGF5b3V0T3ZlcmZsb3dSZWN0KCk7CiAgICAgICAgICAgICB0cyA8PCAiIChsYXlvdXQgb3ZlcmZs
b3cgIiA8PCBsYXlvdXRPdmVyZmxvdy54KCkudG9JbnQoKSA8PCAiLCIgPDwgbGF5b3V0T3ZlcmZs
b3cueSgpLnRvSW50KCkgPDwgIiAiIDw8IGxheW91dE92ZXJmbG93LndpZHRoKCkudG9JbnQoKSA8
PCAieCIgPDwgbGF5b3V0T3ZlcmZsb3cuaGVpZ2h0KCkudG9JbnQoKSA8PCAiKSI7CkBAIC04NzQs
MzAgKzg3NCwzMCBAQCBzdGF0aWMgU3RyaW5nIGV4dGVybmFsUmVwcmVzZW50YXRpb24oUmVuZGVy
Qm94KiByZW5kZXJlciwgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYgogCiBTdHJpbmcgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihGcmFtZSogZnJhbWUsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9y
KQogewotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVy
KCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzQm94KCkpCisgICAgUmVuZGVy
VmlldyogcmVuZGVyZXIgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5k
ZXJlcikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgUHJpbnRDb250ZXh0IHByaW50
Q29udGV4dChmcmFtZSk7CiAgICAgaWYgKGJlaGF2aW9yICYgUmVuZGVyQXNUZXh0UHJpbnRpbmdN
b2RlKQotICAgICAgICBwcmludENvbnRleHQuYmVnaW4odG9SZW5kZXJCb3gocmVuZGVyZXIpLT53
aWR0aCgpKTsKKyAgICAgICAgcHJpbnRDb250ZXh0LmJlZ2luKHJlbmRlcmVyLT53aWR0aCgpKTsK
ICAgICBpZiAoIShiZWhhdmlvciAmIFJlbmRlckFzVGV4dERvbnRVcGRhdGVMYXlvdXQpKQogICAg
ICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKLSAgICByZXR1cm4gZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0b1JlbmRlckJveChyZW5kZXJlciksIGJlaGF2aW9yKTsKKyAg
ICByZXR1cm4gZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihyZW5kZXJlciwgYmVoYXZpb3IpOwogfQog
CiBTdHJpbmcgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJB
c1RleHRCZWhhdmlvciBiZWhhdmlvcikKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
ZWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNC
b3goKSkKKyAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7
CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogICAgIC8vIERvZXNuJ3Qgc3VwcG9ydCBwcmludGluZyBtb2RlLgogICAgIEFTU0VSVCgh
KGJlaGF2aW9yICYgUmVuZGVyQXNUZXh0UHJpbnRpbmdNb2RlKSk7CiAgICAgaWYgKCEoYmVoYXZp
b3IgJiBSZW5kZXJBc1RleHREb250VXBkYXRlTGF5b3V0KSkKICAgICAgICAgZWxlbWVudC0+ZG9j
dW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKICAgICAKLSAgICByZXR1cm4gZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0b1JlbmRlckJveChyZW5kZXJlciksIGJlaGF2aW9yIHwgUmVuZGVyQXNUZXh0U2hv
d0FsbExheWVycyk7CisgICAgcmV0dXJuIGV4dGVybmFsUmVwcmVzZW50YXRpb24oZG93bmNhc3Q8
UmVuZGVyQm94PihyZW5kZXJlciksIGJlaGF2aW9yIHwgUmVuZGVyQXNUZXh0U2hvd0FsbExheWVy
cyk7CiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlQ291bnRlclZhbHVlc0Zyb21DaGlsZHJlbihUZXh0
U3RyZWFtJiBzdHJlYW0sIGNvbnN0IFJlbmRlckVsZW1lbnQqIHBhcmVudCwgYm9vbCYgaXNGaXJz
dENvdW50ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggMDAx
NzZiYzYwYjBjMTEwMWMyOTVlMDM1NDQ5NDE1ZDEwMDJlOGZlNi4uNzY0MjI5MTBlM2IxZTlhY2M4
ZmRjZWJlY2QzOTI1MGFmYmVhM2ZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcApAQCAtNTYzLDkgKzU2Myw5IEBAIHZvaWQgUmVuZGVyVmlldzo6cGFpbnRCb3hEZWNv
cmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmKQogICAgIGJv
b2wgcm9vdEZpbGxzVmlld3BvcnQgPSBmYWxzZTsKICAgICBib29sIHJvb3RPYnNjdXJlc0JhY2tn
cm91bmQgPSBmYWxzZTsKICAgICBFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudCgp
LmRvY3VtZW50RWxlbWVudCgpOwotICAgIGlmIChSZW5kZXJFbGVtZW50KiByb290UmVuZGVyZXIg
PSBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQtPnJlbmRlcmVyKCkgOiAwKSB7Cisg
ICAgaWYgKFJlbmRlckVsZW1lbnQqIHJvb3RSZW5kZXJlciA9IGRvY3VtZW50RWxlbWVudCA/IGRv
Y3VtZW50RWxlbWVudC0+cmVuZGVyZXIoKSA6IG51bGxwdHIpIHsKICAgICAgICAgLy8gVGhlIGRv
Y3VtZW50IGVsZW1lbnQncyByZW5kZXJlciBpcyBjdXJyZW50bHkgZm9yY2VkIHRvIGJlIGEgYmxv
Y2ssIGJ1dCBtYXkgbm90IGFsd2F5cyBiZS4KLSAgICAgICAgUmVuZGVyQm94KiByb290Qm94ID0g
cm9vdFJlbmRlcmVyLT5pc0JveCgpID8gdG9SZW5kZXJCb3gocm9vdFJlbmRlcmVyKSA6IDA7Cisg
ICAgICAgIFJlbmRlckJveCogcm9vdEJveCA9IGlzPFJlbmRlckJveD4oKnJvb3RSZW5kZXJlcikg
PyBkb3duY2FzdDxSZW5kZXJCb3g+KHJvb3RSZW5kZXJlcikgOiBudWxscHRyOwogICAgICAgICBy
b290RmlsbHNWaWV3cG9ydCA9IHJvb3RCb3ggJiYgIXJvb3RCb3gtPngoKSAmJiAhcm9vdEJveC0+
eSgpICYmIHJvb3RCb3gtPndpZHRoKCkgPj0gd2lkdGgoKSAmJiByb290Qm94LT5oZWlnaHQoKSA+
PSBoZWlnaHQoKTsKICAgICAgICAgcm9vdE9ic2N1cmVzQmFja2dyb3VuZCA9IHJlbmRlcmVyT2Jz
Y3VyZXNCYWNrZ3JvdW5kKHJvb3RSZW5kZXJlcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCmluZGV4IDFjZTI0ODU0YzEyMjg1ZDY0YWIwMDM3OWNl
NWVkOGI5NDFkYjQwZDMuLmQ1Zjc3MzcwMTUzYzFhY2JkNTJiYzhhNjYyMTExOTYxYWZjYjY3MmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5j
bHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgorI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaCIK
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTc0MCw3ICs3NDEsNyBAQCB2b2lk
IFJvb3RJbmxpbmVCb3g6OnNldExpbmVCcmVha0luZm8oUmVuZGVyT2JqZWN0KiBvYmosIHVuc2ln
bmVkIGJyZWFrUG9zLCBjb25zdAogICAgIC8vIFRoaXMgaGFzIHNlY3VyaXR5IGltcGxpY2F0aW9u
cyBiZWNhdXNlIGlmIHRoZSBSZW5kZXJPYmplY3QgZG9lcyBub3QKICAgICAvLyBwb2ludCB0byBh
dCBsZWFzdCBvbmUgbGluZSBib3gsIHRoZW4gdGhhdCBSZW5kZXJJbmxpbmUgY2FuIGJlIGRlbGV0
ZWQKICAgICAvLyBsYXRlciB3aXRob3V0IHJlc2V0dGluZyB0aGUgbGluZUJyZWFrT2JqLCBsZWFk
aW5nIHRvIHVzZS1hZnRlci1mcmVlLgotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKCFvYmogfHwgb2JqLT5pc1RleHQoKSB8fCAhKG9iai0+aXNSZW5kZXJJbmxpbmUoKSAmJiBv
YmotPmlzQm94KCkgJiYgIXRvUmVuZGVyQm94KG9iaiktPmlubGluZUJveFdyYXBwZXIoKSkpOwor
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFvYmogfHwgaXM8UmVuZGVyVGV4
dD4oKm9iaikgfHwgIShpczxSZW5kZXJJbmxpbmU+KCpvYmopICYmIGlzPFJlbmRlckJveD4oKm9i
aikgJiYgIWRvd25jYXN0PFJlbmRlckJveD4oKm9iaikuaW5saW5lQm94V3JhcHBlcigpKSk7CiAK
ICAgICBtX2xpbmVCcmVha09iaiA9IG9iajsKICAgICBtX2xpbmVCcmVha1BvcyA9IGJyZWFrUG9z
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250
ZXh0SW5saW5lSGVhZGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtp
bmdDb250ZXh0SW5saW5lSGVhZGVycy5oCmluZGV4IDA5ZTgwYTM1YWQzMDgwN2UyNmUzOTAwOTRh
ODRmZWU1MmU4MTJkOWQuLmI2NGM3NjQ0YzY5ODIwMjk2MjFlMDg0M2Q0YmU4MTRmMTI3NDM5MzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4
dElubGluZUhlYWRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVh
a2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgKQEAgLTMwOCwzMyArMzA4LDMzIEBAIGlubGluZSB2
b2lkIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlT3V0T2ZGbG93UG9zaXRpb25lZChWZWN0b3I8UmVu
ZGVyQm94Kj4mIHBvc2l0CiB7CiAgICAgLy8gSWYgb3VyIG9yaWdpbmFsIGRpc3BsYXkgd2Fzbid0
IGFuIGlubGluZSB0eXBlLCB0aGVuIHdlIGNhbgogICAgIC8vIGdvIGFoZWFkIGFuZCBkZXRlcm1p
bmUgb3VyIHN0YXRpYyBpbmxpbmUgcG9zaXRpb24gbm93LgotICAgIFJlbmRlckJveCogYm94ID0g
dG9SZW5kZXJCb3gobV9jdXJyZW50LnJlbmRlcmVyKCkpOwotICAgIGJvb2wgaXNJbmxpbmVUeXBl
ID0gYm94LT5zdHlsZSgpLmlzT3JpZ2luYWxEaXNwbGF5SW5saW5lVHlwZSgpOworICAgIGF1dG8m
IGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKm1fY3VycmVudC5yZW5kZXJlcigpKTsKKyAgICBi
b29sIGlzSW5saW5lVHlwZSA9IGJveC5zdHlsZSgpLmlzT3JpZ2luYWxEaXNwbGF5SW5saW5lVHlw
ZSgpOwogICAgIGlmICghaXNJbmxpbmVUeXBlKQotICAgICAgICBtX2Jsb2NrLnNldFN0YXRpY0lu
bGluZVBvc2l0aW9uRm9yQ2hpbGQoKmJveCwgbV9ibG9jay5sb2dpY2FsSGVpZ2h0KCksIG1fYmxv
Y2suc3RhcnRPZmZzZXRGb3JDb250ZW50KG1fYmxvY2subG9naWNhbEhlaWdodCgpKSk7CisgICAg
ICAgIG1fYmxvY2suc2V0U3RhdGljSW5saW5lUG9zaXRpb25Gb3JDaGlsZChib3gsIG1fYmxvY2su
bG9naWNhbEhlaWdodCgpLCBtX2Jsb2NrLnN0YXJ0T2Zmc2V0Rm9yQ29udGVudChtX2Jsb2NrLmxv
Z2ljYWxIZWlnaHQoKSkpOwogICAgIGVsc2UgewogICAgICAgICAvLyBJZiBvdXIgb3JpZ2luYWwg
ZGlzcGxheSB3YXMgYW4gSU5MSU5FIHR5cGUsIHRoZW4gd2UgY2FuIGdvIGFoZWFkCiAgICAgICAg
IC8vIGFuZCBkZXRlcm1pbmUgb3VyIHN0YXRpYyB5IHBvc2l0aW9uIG5vdy4KLSAgICAgICAgYm94
LT5sYXllcigpLT5zZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKG1fYmxvY2subG9naWNhbEhlaWdodCgp
KTsKKyAgICAgICAgYm94LmxheWVyKCktPnNldFN0YXRpY0Jsb2NrUG9zaXRpb24obV9ibG9jay5s
b2dpY2FsSGVpZ2h0KCkpOwogICAgIH0KIAogICAgIC8vIElmIHdlJ3JlIGlnbm9yaW5nIHNwYWNl
cywgd2UgaGF2ZSB0byBzdG9wIGFuZCBpbmNsdWRlIHRoaXMgb2JqZWN0IGFuZAogICAgIC8vIHRo
ZW4gc3RhcnQgaWdub3Jpbmcgc3BhY2VzIGFnYWluLgotICAgIGlmIChpc0lubGluZVR5cGUgfHwg
Ym94LT5jb250YWluZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAgIGlmIChpc0lubGluZVR5
cGUgfHwgYm94LmNvbnRhaW5lcigpLT5pc1JlbmRlcklubGluZSgpKSB7CiAgICAgICAgIGlmICht
X2lnbm9yaW5nU3BhY2VzKQotICAgICAgICAgICAgbV9saW5lTWlkcG9pbnRTdGF0ZS5lbnN1cmVM
aW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhib3gpOwotICAgICAgICBtX3RyYWlsaW5nT2JqZWN0
cy5hcHBlbmRCb3hJZk5lZWRlZChib3gpOworICAgICAgICAgICAgbV9saW5lTWlkcG9pbnRTdGF0
ZS5lbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcygmYm94KTsKKyAgICAgICAgbV90cmFp
bGluZ09iamVjdHMuYXBwZW5kQm94SWZOZWVkZWQoJmJveCk7CiAgICAgfSBlbHNlCi0gICAgICAg
IHBvc2l0aW9uZWRPYmplY3RzLmFwcGVuZChib3gpOworICAgICAgICBwb3NpdGlvbmVkT2JqZWN0
cy5hcHBlbmQoJmJveCk7CiAKLSAgICBtX3dpZHRoLmFkZFVuY29tbWl0dGVkV2lkdGgoaW5saW5l
TG9naWNhbFdpZHRoKGJveCkpOworICAgIG1fd2lkdGguYWRkVW5jb21taXR0ZWRXaWR0aChpbmxp
bmVMb2dpY2FsV2lkdGgoJmJveCkpOwogICAgIC8vIFJlc2V0IHByaW9yIGxpbmUgYnJlYWsgY29u
dGV4dCBjaGFyYWN0ZXJzLgogICAgIG1fcmVuZGVyVGV4dEluZm8ubV9saW5lQnJlYWtJdGVyYXRv
ci5yZXNldFByaW9yQ29udGV4dCgpOwogfQogCiBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6
OmhhbmRsZUZsb2F0KCkKIHsKLSAgICBSZW5kZXJCb3gmIGZsb2F0Qm94ID0gdG9SZW5kZXJCb3go
Km1fY3VycmVudC5yZW5kZXJlcigpKTsKKyAgICBhdXRvJiBmbG9hdEJveCA9IGRvd25jYXN0PFJl
bmRlckJveD4oKm1fY3VycmVudC5yZW5kZXJlcigpKTsKICAgICBGbG9hdGluZ09iamVjdCogZmxv
YXRpbmdPYmplY3QgPSBtX2xpbmVCcmVha2VyLmluc2VydEZsb2F0aW5nT2JqZWN0KGZsb2F0Qm94
KTsKICAgICAvLyBjaGVjayBpZiBpdCBmaXRzIGluIHRoZSBjdXJyZW50IGxpbmUuCiAgICAgLy8g
SWYgaXQgZG9lcywgcG9zaXRpb24gaXQgbm93LCBvdGhlcndpc2UsIHBvc2l0aW9uCkBAIC00MDcs
NyArNDA3LDcgQEAgaW5saW5lIHZvaWQgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVFbXB0eUlubGlu
ZSgpCiAKIGlubGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlUmVwbGFjZWQoKQogewot
ICAgIFJlbmRlckJveCYgcmVwbGFjZWRCb3ggPSB0b1JlbmRlckJveCgqbV9jdXJyZW50LnJlbmRl
cmVyKCkpOworICAgIGF1dG8mIHJlcGxhY2VkQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqbV9j
dXJyZW50LnJlbmRlcmVyKCkpOwogCiAgICAgaWYgKG1fYXRTdGFydCkKICAgICAgICAgbV93aWR0
aC51cGRhdGVBdmFpbGFibGVXaWR0aChyZXBsYWNlZEJveC5sb2dpY2FsSGVpZ2h0KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwCmluZGV4IGQ0Nzc0
ZmVhM2U3NWNhNDAzMjU2ZTM4ZDEzZjhmMzU5OTBmYTgwOWUuLmM3NzRhNTg2NjY3NjAxN2I5NDg2
NjA5ZTVlYTYwNjg4M2I4ZDM5OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9saW5lL0xpbmVCcmVha2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZS9MaW5lQnJlYWtlci5jcHAKQEAgLTQ4LDkgKzQ4LDkgQEAgdm9pZCBMaW5lQnJlYWtlcjo6c2tp
cFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRvciYgaXRlcmF0b3IsIGNvbnN0IExpbmVJ
bmYKICAgICB3aGlsZSAoIWl0ZXJhdG9yLmF0RW5kKCkgJiYgIXJlcXVpcmVzTGluZUJveChpdGVy
YXRvciwgbGluZUluZm8sIFRyYWlsaW5nV2hpdGVzcGFjZSkpIHsKICAgICAgICAgUmVuZGVyT2Jq
ZWN0JiBvYmplY3QgPSAqaXRlcmF0b3IucmVuZGVyZXIoKTsKICAgICAgICAgaWYgKG9iamVjdC5p
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHNldFN0YXRpY1Bvc2l0aW9ucyht
X2Jsb2NrLCB0b1JlbmRlckJveChvYmplY3QpKTsKKyAgICAgICAgICAgIHNldFN0YXRpY1Bvc2l0
aW9ucyhtX2Jsb2NrLCBkb3duY2FzdDxSZW5kZXJCb3g+KG9iamVjdCkpOwogICAgICAgICBlbHNl
IGlmIChvYmplY3QuaXNGbG9hdGluZygpKQotICAgICAgICAgICAgbV9ibG9jay5pbnNlcnRGbG9h
dGluZ09iamVjdCh0b1JlbmRlckJveChvYmplY3QpKTsKKyAgICAgICAgICAgIG1fYmxvY2suaW5z
ZXJ0RmxvYXRpbmdPYmplY3QoZG93bmNhc3Q8UmVuZGVyQm94PihvYmplY3QpKTsKICAgICAgICAg
aXRlcmF0b3IuaW5jcmVtZW50KCk7CiAgICAgfQogfQpAQCAtNjAsMTMgKzYwLDEzIEBAIHZvaWQg
TGluZUJyZWFrZXI6OnNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJl
c29sdmVyLCBMaW5lSW5mbyYKICAgICB3aGlsZSAoIXJlc29sdmVyLnBvc2l0aW9uKCkuYXRFbmQo
KSAmJiAhcmVxdWlyZXNMaW5lQm94KHJlc29sdmVyLnBvc2l0aW9uKCksIGxpbmVJbmZvLCBMZWFk
aW5nV2hpdGVzcGFjZSkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0JiBvYmplY3QgPSAqcmVzb2x2
ZXIucG9zaXRpb24oKS5yZW5kZXJlcigpOwogICAgICAgICBpZiAob2JqZWN0LmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpKSB7Ci0gICAgICAgICAgICBzZXRTdGF0aWNQb3NpdGlvbnMobV9ibG9jaywg
dG9SZW5kZXJCb3gob2JqZWN0KSk7CisgICAgICAgICAgICBzZXRTdGF0aWNQb3NpdGlvbnMobV9i
bG9jaywgZG93bmNhc3Q8UmVuZGVyQm94PihvYmplY3QpKTsKICAgICAgICAgICAgIGlmIChvYmpl
Y3Quc3R5bGUoKS5pc09yaWdpbmFsRGlzcGxheUlubGluZVR5cGUoKSkgewogICAgICAgICAgICAg
ICAgIHJlc29sdmVyLnJ1bnMoKS5hZGRSdW4obmV3IEJpZGlSdW4oMCwgMSwgb2JqZWN0LCByZXNv
bHZlci5jb250ZXh0KCksIHJlc29sdmVyLmRpcigpKSk7CiAgICAgICAgICAgICAgICAgbGluZUlu
Zm8uaW5jcmVtZW50UnVuc0Zyb21MZWFkaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgaWYgKG9iamVjdC5pc0Zsb2F0aW5nKCkpCi0gICAgICAgICAgICBtX2Js
b2NrLnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUobV9ibG9jay5pbnNlcnRGbG9hdGluZ09iamVjdCh0
b1JlbmRlckJveChvYmplY3QpKSwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgbGluZUluZm8s
IHdpZHRoKTsKKyAgICAgICAgICAgIG1fYmxvY2sucG9zaXRpb25OZXdGbG9hdE9uTGluZShtX2Js
b2NrLmluc2VydEZsb2F0aW5nT2JqZWN0KGRvd25jYXN0PFJlbmRlckJveD4ob2JqZWN0KSksIGxh
c3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGxpbmVJbmZvLCB3aWR0aCk7CiAgICAgICAgIGVsc2Ug
aWYgKG9iamVjdC5pc1RleHQoKSAmJiBvYmplY3Quc3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYm
IG9iamVjdC5pc0NvbWJpbmVUZXh0KCkgJiYgIXRvUmVuZGVyQ29tYmluZVRleHQob2JqZWN0KS5p
c0NvbWJpbmVkKCkpIHsKICAgICAgICAgICAgIHRvUmVuZGVyQ29tYmluZVRleHQob2JqZWN0KS5j
b21iaW5lVGV4dCgpOwogICAgICAgICAgICAgaWYgKHRvUmVuZGVyQ29tYmluZVRleHQob2JqZWN0
KS5pc0NvbWJpbmVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAKaW5kZXggODFkYjdiNWUyY2VhYmYyNWY1
YzJjMWUzMGY2NTFkNjI3MzUwOTcxYi4uZGU0NjkzMTJlM2IwMjk2OWMyNTQwY2VlYzhmYmMwZWMy
ODVkNzE4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxVbmRlck92ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcApAQCAtOTAsOCArOTAsOCBAQCB2b2lkIFJlbmRl
ck1hdGhNTFVuZGVyT3Zlcjo6bGF5b3V0KCkKIAogICAgICAgICAvLyBTa2lwcGluZyB0aGUgZW1i
ZWxsaXNoZWQgb3AgZG9lcyBub3Qgd29yayBmb3IgbmVzdGVkIHN0cnVjdHVyZXMgbGlrZQogICAg
ICAgICAvLyA8bXVuZGVyPjxtb3Zlcj48bW8+XzwvbW8+Li4uPC9tb3Zlcj4gPG1vPl88L21vPjwv
bXVuZGVyPi4KLSAgICAgICAgaWYgKGNoaWxkLT5pc0JveCgpKQotICAgICAgICAgICAgc3RyZXRj
aFdpZHRoID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oc3RyZXRjaFdpZHRoLCB0b1JlbmRlckJveChj
aGlsZCktPmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oKmNoaWxk
KSkKKyAgICAgICAgICAgIHN0cmV0Y2hXaWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KHN0cmV0
Y2hXaWR0aCwgZG93bmNhc3Q8UmVuZGVyQm94PigqY2hpbGQpLmxvZ2ljYWxXaWR0aCgpKTsKICAg
ICB9CiAKICAgICAvLyBTZXQgdGhlIHNpemVzIG9mIChwb3NzaWJseSBlbWJlbGxpc2hlZCkgc3Ry
ZXRjaHkgb3BlcmF0b3IgY2hpbGRyZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcAppbmRleCAxZTFmYjU0ZTI0MGU0OTQwMTZmN2Q1N2VhM2NjNDliOGI1YWEwNjYyLi4y
MjdlM2E4Mzg5N2MzODBlOGFkZjhhYTgwMDZmMWNhMGUzMWJlZmU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTI2Nyw3ICsyNjcsNyBAQCBSZW5kZXJCb3gq
IFNWR0ltYWdlOjplbWJlZGRlZENvbnRlbnRCb3goKSBjb25zdAogICAgIFNWR1NWR0VsZW1lbnQq
IHJvb3RFbGVtZW50ID0gdGhpcy0+cm9vdEVsZW1lbnQoKTsKICAgICBpZiAoIXJvb3RFbGVtZW50
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gdG9SZW5kZXJCb3gocm9vdEVs
ZW1lbnQtPnJlbmRlcmVyKCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJvb3RF
bGVtZW50LT5yZW5kZXJlcigpKTsKIH0KIAogRnJhbWVWaWV3KiBTVkdJbWFnZTo6ZnJhbWVWaWV3
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNvbnRleHRNZW51Q2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViQ29udGV4dE1lbnVDbGllbnQubW0KaW5kZXggMThmOTNlMDJiZGNmMDkwNzQzMzY1NDQzZjdl
ODk1YTJiNDRiMDZlNC4uMjY3MWUzNmYwNzg0ZDhmZDU5YTliZDYwYzhhMjJlNDM5YjQ1MmU4ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1l
bnVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29u
dGV4dE1lbnVDbGllbnQubW0KQEAgLTM3NiwxMiArMzc2LDEyIEBAIGJvb2wgV2ViQ29udGV4dE1l
bnVDbGllbnQ6OmNsaWVudEZsb2F0UmVjdEZvck5vZGUoTm9kZSYgbm9kZSwgRmxvYXRSZWN0JiBy
ZWN0KSBjCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoIXJlbmRlcmVy
LT5pc0JveCgpKQorICAgIGlmICghaXM8UmVuZGVyQm94PigqcmVuZGVyZXIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChyZW5k
ZXJlcik7CisgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVy
ZXIpOwogCi0gICAgTGF5b3V0UmVjdCBsYXlvdXRSZWN0ID0gcmVuZGVyQm94LT5jbGllbnRCb3hS
ZWN0KCk7Ci0gICAgRmxvYXRRdWFkIGZsb2F0UXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFF1YWQobGF5b3V0UmVjdCkpOworICAgIExheW91dFJlY3QgbGF5b3V0UmVj
dCA9IHJlbmRlckJveC5jbGllbnRCb3hSZWN0KCk7CisgICAgRmxvYXRRdWFkIGZsb2F0UXVhZCA9
IHJlbmRlckJveC5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChsYXlvdXRSZWN0KSk7CiAg
ICAgcmVjdCA9IGZsb2F0UXVhZC5ib3VuZGluZ0JveCgpOwogCiAgICAgcmV0dXJuIHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA0MDJmN2U3YTI0OTdiY2FiMzhm
MzE3NmNlNDQwYmU3NGMyNTkzNjBmLi5iM2UyMGUxMDQ0NzVlOTk4NDJjZTkwYzNjZTVlNjU3MTg5
YWUzM2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTEzMjksMTAg
KzEzMjksMTAgQEAgLSAodm9pZClzZXROZWVkc0xheW91dAogCiAtIChDR1NpemUpcmVuZGVyZWRT
aXplT2ZOb2RlOihET01Ob2RlICopbm9kZSBjb25zdHJhaW5lZFRvV2lkdGg6KGZsb2F0KXdpZHRo
CiB7Ci0gICAgTm9kZSAqbiA9IGNvcmUobm9kZSk7Ci0gICAgUmVuZGVyT2JqZWN0ICpyID0gbiA/
IG4tPnJlbmRlcmVyKCkgOiAwOwotICAgIGZsb2F0IHcgPSBzdGQ6Om1pbigoZmxvYXQpci0+bWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoKCksIHdpZHRoKTsKLSAgICByZXR1cm4gciAmJiByLT5pc0Jv
eCgpID8gQ0dTaXplTWFrZSh3LCB0b1JlbmRlckJveChyKS0+aGVpZ2h0KCkpIDogQ0dTaXplTWFr
ZSgwLDApOworICAgIE5vZGUqIG4gPSBjb3JlKG5vZGUpOworICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBuID8gbi0+cmVuZGVyZXIoKSA6IG51bGxwdHI7CisgICAgZmxvYXQgdyA9IHN0ZDo6
bWluKChmbG9hdClyZW5kZXJlci0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCksIHdpZHRoKTsK
KyAgICByZXR1cm4gaXM8UmVuZGVyQm94PihyZW5kZXJlcikgPyBDR1NpemVNYWtlKHcsIGRvd25j
YXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKS5oZWlnaHQoKSkgOiBDR1NpemVNYWtlKDAsIDApOwog
fQogCiAtIChET01Ob2RlICopZGVlcGVzdE5vZGVBdFZpZXdwb3J0TG9jYXRpb246KENHUG9pbnQp
YVZpZXdwb3J0TG9jYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKaW5kZXggY2NlNTEwOWQwYmE3YWZh
YjQwYTk2ZTgwNDIyOTBlYmRiZDg5MTViMC4uZDMyY2ZmNzI0NThlMWNjMGM0ZjE5MzlkMzgwYWY4
NTZiM2M0ZjQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKQEAgLTE2MjUsNyArMTYyNSw3IEBAIGJv
b2wgV2ViVmlldzo6Z2VzdHVyZU5vdGlmeShXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQog
ICAgIGJvb2wgY2FuQmVTY3JvbGxlZCA9IGZhbHNlOwogICAgIGlmIChtX2dlc3R1cmVUYXJnZXRO
b2RlKSB7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fZ2VzdHVyZVRh
cmdldE5vZGUtPnJlbmRlcmVyKCk7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJl
bnQoKSkgewotICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpICYmIHRvUmVuZGVyQm94
KHJlbmRlcmVyKS0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpIHsKKyAgICAg
ICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94
PigqcmVuZGVyZXIpLmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKSB7CiAgICAg
ICAgICAgICAgICAgY2FuQmVTY3JvbGxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKaW5kZXggNmQ0NDkwYmRiMzA0YjBhZDIyZjViZGY2ZjBjNzQzNTUzMmU5MjJjMS4u
OTY1OWYwZDU0ZTliMzY3NTY2NjJiYTZmNzQ4MzU4YjdmNTg0NTI0MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNDU3Nyw3ICs0NTc3LDcg
QEAgdm9pZCBXZWJQYWdlOjpkZXRlcm1pbmVQcmltYXJ5U25hcHNob3R0ZWRQbHVnSW4oKQogICAg
ICAgICAgICAgYXV0byBwbHVnaW5SZW5kZXJlciA9IHBsdWdJbkltYWdlRWxlbWVudC5yZW5kZXJl
cigpOwogICAgICAgICAgICAgaWYgKCFwbHVnaW5SZW5kZXJlciB8fCAhcGx1Z2luUmVuZGVyZXIt
PmlzQm94KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRvJiBw
bHVnaW5SZW5kZXJCb3ggPSB0b1JlbmRlckJveCgqcGx1Z2luUmVuZGVyZXIpOworICAgICAgICAg
ICAgYXV0byYgcGx1Z2luUmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqcGx1Z2luUmVu
ZGVyZXIpOwogICAgICAgICAgICAgaWYgKCFwbHVnSW5JbnRlcnNlY3RzU2VhcmNoUmVjdChwbHVn
SW5JbWFnZUVsZW1lbnQpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC00NjY5LDcg
KzQ2NjksNyBAQCBib29sIFdlYlBhZ2U6OnBsdWdJbkludGVyc2VjdHNTZWFyY2hSZWN0KEhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdJbkltYWdlRWxlbQogCiBib29sIFdlYlBhZ2U6OnBsdWdJ
bklzUHJpbWFyeVNpemUoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z0luSW1h
Z2VFbGVtZW50LCB1bnNpZ25lZCYgY2FuZGlkYXRlUGx1Z0luQXJlYSkKIHsKLSAgICBhdXRvJiBw
bHVnaW5SZW5kZXJCb3ggPSB0b1JlbmRlckJveCgqKHBsdWdJbkltYWdlRWxlbWVudC5yZW5kZXJl
cigpKSk7CisgICAgYXV0byYgcGx1Z2luUmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94Pigq
cGx1Z0luSW1hZ2VFbGVtZW50LnJlbmRlcmVyKCkpOwogICAgIGlmIChwbHVnaW5SZW5kZXJCb3gu
Y29udGVudFdpZHRoKCkgPCBwcmltYXJ5U25hcHNob3R0ZWRQbHVnSW5NaW5pbXVtV2lkdGggfHwg
cGx1Z2luUmVuZGVyQm94LmNvbnRlbnRIZWlnaHQoKSA8IHByaW1hcnlTbmFwc2hvdHRlZFBsdWdJ
bk1pbmltdW1IZWlnaHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDlmM2Jl
M2I1YmQ1NGRlZmIyNTVkMTA3NmY3MDg1OTNiYjQ1NGIwZmQuLmQ2ZGM1ZWNlNjg2ZjBkMDQ4MjZl
ODExMjIzMWI3YWZmYWUxZmNhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTUzNCwxMCArNTM0LDggQEAgdm9pZCBX
ZWJQYWdlOjpzZW5kVGFwSGlnaGxpZ2h0Rm9yTm9kZUlmTmVjZXNzYXJ5KHVpbnQ2NF90IHJlcXVl
c3RJRCwgTm9kZSogbm9kZSkKICAgICAgICAgfQogCiAgICAgICAgIFJvdW5kZWRSZWN0OjpSYWRp
aSBib3JkZXJSYWRpaTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpKSB7Ci0gICAgICAg
ICAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKLSAgICAgICAgICAg
IGJvcmRlclJhZGlpID0gYm94LT5ib3JkZXJSYWRpaSgpOwotICAgICAgICB9CisgICAgICAgIGlm
IChpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikpCisgICAgICAgICAgICBib3JkZXJSYWRpaSA9IGRv
d25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKS5ib3JkZXJSYWRpaSgpOwogCiAgICAgICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkR2V0VGFwSGlnaGxpZ2h0R2VvbWV0cmllcyhy
ZXF1ZXN0SUQsIGhpZ2hsaWdodENvbG9yLCBxdWFkcywgcm91bmRlZEludFNpemUoYm9yZGVyUmFk
aWkudG9wTGVmdCgpKSwgcm91bmRlZEludFNpemUoYm9yZGVyUmFkaWkudG9wUmlnaHQoKSksIHJv
dW5kZWRJbnRTaXplKGJvcmRlclJhZGlpLmJvdHRvbUxlZnQoKSksIHJvdW5kZWRJbnRTaXplKGJv
cmRlclJhZGlpLmJvdHRvbVJpZ2h0KCkpKSk7CiAgICAgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>