<?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>217468</bug_id>
          
          <creation_ts>2020-10-08 02:21:18 -0700</creation_ts>
          <short_desc>[LFC][Integration] Convert RenderText::positionForPoint use iterator</short_desc>
          <delta_ts>2020-10-08 11:19:37 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1695832</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-10-08 02:21:18 -0700</bug_when>
    <thetext>No need to ensureLineBoxes anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695833</commentid>
    <comment_count>1</comment_count>
      <attachid>410821</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-10-08 02:23:49 -0700</bug_when>
    <thetext>Created attachment 410821
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695846</commentid>
    <comment_count>2</comment_count>
      <attachid>410829</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-10-08 04:39:16 -0700</bug_when>
    <thetext>Created attachment 410829
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695969</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-08 11:18:35 -0700</bug_when>
    <thetext>Committed r268195: &lt;https://trac.webkit.org/changeset/268195&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 410829.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695972</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-08 11:19:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/70101788&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410821</attachid>
            <date>2020-10-08 02:23:49 -0700</date>
            <delta_ts>2020-10-08 04:39:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>positionForPoint.patch</filename>
            <type>text/plain</type>
            <size>32572</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiMWI4OWFjZWM4YzIuLmNiYmViMmQ4ZWQ4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDU5IEBACisyMDIwLTEwLTA4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQ29udmVydCBSZW5kZXJUZXh0Ojpwb3Np
dGlvbkZvclBvaW50IHVzZSBpdGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE3NDY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBJbmxpbmVCb3ggdHJhdmVyc2FsIGNvZGUgd2l0aCBh
IGdlbmVyaWMgdmVyc2lvbi4KKworICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRl
Z3JhdGlvbjo6TGluZUl0ZXJhdG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3I6Om9wZXJhdG9yIT0gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhMaW5lOjp0b3Ag
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhMaW5lOjpi
b3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhM
aW5lOjpzZWxlY3Rpb25Ub3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OlBhdGhMaW5lOjpzZWxlY3Rpb25Ub3BGb3JIaXRUZXN0aW5nIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoTGluZTo6c2VsZWN0aW9uQm90dG9t
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoTGluZTo6
b3BlcmF0b3IhPSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRl
Z3JhdGlvbjo6UGF0aExpbmU6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhMaW5lOjpvcGVyYXRvcj09IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3JMZWdhY3lQYXRoLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6
TGVnYWN5TGluZVBhdGg6OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRl
Z3JhdGlvbjo6TGVnYWN5TGluZVBhdGg6OmJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGVnYWN5TGluZVBhdGg6OnNlbGVjdGlvblRvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGVnYWN5TGluZVBhdGg6OnNl
bGVjdGlvblRvcEZvckhpdFRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
SW50ZWdyYXRpb246OkxlZ2FjeUxpbmVQYXRoOjpzZWxlY3Rpb25Cb3R0b20gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxlZ2FjeUxpbmVQYXRoOjpyZWN0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJ
bnRlZ3JhdGlvbjo6TW9kZXJuTGluZVBhdGg6OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXRJbnRlZ3JhdGlvbjo6TW9kZXJuTGluZVBhdGg6OmJvdHRvbSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TW9kZXJuTGluZVBhdGg6OnNlbGVjdGlv
blRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TW9kZXJu
TGluZVBhdGg6OnNlbGVjdGlvblRvcEZvckhpdFRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246Ok1vZGVybkxpbmVQYXRoOjpzZWxlY3Rpb25Cb3R0b20g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246Ok1vZGVybkxpbmVQ
YXRoOjp0cmF2ZXJzZVByZXZpb3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0
aW9uOjpNb2Rlcm5MaW5lUGF0aDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1bjo6b2Zmc2V0Rm9yUG9zaXRp
b24gY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
blJ1bkl0ZXJhdG9yTGVnYWN5UGF0aC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OkxlZ2FjeVBhdGg6Om9mZnNldEZvclBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKiBs
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGgu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpNb2Rlcm5QYXRoOjpvZmZz
ZXRGb3JQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlv
bjo6TW9kZXJuUGF0aDo6dHJhdmVyc2VQcmV2aW91c09uTGluZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGluZURpcmVjdGlvblBvaW50
Rml0c0luQm94KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaXNpYmxlUG9zaXRpb25BZnRlckFkanVzdGlu
Z09mZnNldEZvckJpRGkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6cG9zaXRpb25G
b3JQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwOgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVEaXJlY3Rpb25Qb2lu
dEZpdHNJbkJveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaXNpYmxlUG9z
aXRpb25Gb3JCb3gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVmlzaWJsZVBv
c2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURpKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OnBvc2l0aW9uRm9yUG9pbnQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmg6CisKIDIwMjAt
MTAtMDcgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBz
dXBwb3J0IGZvciBNZWRpYVJlY29yZGVyIHBhdXNlL3Jlc3VtZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
bkxpbmVJdGVyYXRvci5jcHAKaW5kZXggMmYxNDc2YTRmYjJmLi43YWNiN2Y4Yzg0NDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
bkxpbmVJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmNwcApAQCAtNjksNiArNjksMTYgQEAgTGlu
ZUl0ZXJhdG9yJiBMaW5lSXRlcmF0b3I6OnRyYXZlcnNlUHJldmlvdXMoKQogICAgIHJldHVybiAq
dGhpczsKIH0KIAorYm9vbCBMaW5lSXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgTGluZUl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9saW5lLm1fcGF0aFZhcmlhbnQuaW5kZXgo
KSAhPSBvdGhlci5tX2xpbmUubV9wYXRoVmFyaWFudC5pbmRleCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2xpbmUubV9wYXRoVmFyaWFudCwg
WyZdKGNvbnN0IGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGggPT0gV1RGOjpnZXQ8
c3RkOjpkZWNheV90PGRlY2x0eXBlKHBhdGgpPj4ob3RoZXIubV9saW5lLm1fcGF0aFZhcmlhbnQp
OworICAgIH0pOworfQorCiB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgK
aW5kZXggMDk3MDliOGQwMGU5Li41M2IwMWI1MzYzNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxp
bmVJdGVyYXRvci5oCkBAIC00OSwxMCArNDksMTEgQEAgcHVibGljOgogCiAgICAgUGF0aExpbmUo
UGF0aFZhcmlhbnQmJik7CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0OwotCi0gICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFBhdGhMaW5lJikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFBhdGhMaW5lJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
IH0KKyAgICBMYXlvdXRVbml0IHRvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgYm90dG9tKCkg
Y29uc3Q7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AoKSBjb25zdDsKKyAgICBMYXlvdXRV
bml0IHNlbGVjdGlvblRvcEZvckhpdFRlc3RpbmcoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHNl
bGVjdGlvbkJvdHRvbSgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIExp
bmVJdGVyYXRvcjsKQEAgLTc0LDggKzc1LDggQEAgcHVibGljOgogCiAgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9CiAKLSAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgTGluZUl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9saW5lID09
IG90aGVyLm1fbGluZTsgfQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBMaW5lSXRlcmF0b3Im
IG90aGVyKSBjb25zdCB7IHJldHVybiBtX2xpbmUgIT0gb3RoZXIubV9saW5lOyB9CisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IExpbmVJdGVyYXRvciYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBMaW5lSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KEVuZExpbmVJdGVyYXRvcikgY29uc3Qg
eyByZXR1cm4gYXRFbmQoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IhPShFbmRMaW5lSXRlcmF0b3Ip
IGNvbnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9CkBAIC05OCwyMCArOTksMzggQEAgaW5saW5lIFBh
dGhMaW5lOjpQYXRoTGluZShQYXRoVmFyaWFudCYmIHBhdGgpCiB7CiB9CiAKLWlubGluZSBGbG9h
dFJlY3QgUGF0aExpbmU6OnJlY3QoKSBjb25zdAoraW5saW5lIExheW91dFVuaXQgUGF0aExpbmU6
OnRvcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwg
W10oY29uc3QgYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC50b3AoKTsKKyAgICB9
KTsKK30KKworaW5saW5lIExheW91dFVuaXQgUGF0aExpbmU6OmJvdHRvbSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0
aCkgeworICAgICAgICByZXR1cm4gcGF0aC50b3AoKTsKKyAgICB9KTsKK30KKworaW5saW5lIExh
eW91dFVuaXQgUGF0aExpbmU6OnNlbGVjdGlvblRvcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICByZXR1
cm4gcGF0aC5yZWN0KCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwg
W10oY29uc3QgYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5zZWxlY3Rpb25Ub3Ao
KTsKICAgICB9KTsKIH0KIAotaW5saW5lIGJvb2wgUGF0aExpbmU6Om9wZXJhdG9yPT0oY29uc3Qg
UGF0aExpbmUmIG90aGVyKSBjb25zdAoraW5saW5lIExheW91dFVuaXQgUGF0aExpbmU6OnNlbGVj
dGlvblRvcEZvckhpdFRlc3RpbmcoKSBjb25zdAogewotICAgIGlmIChtX3BhdGhWYXJpYW50Lmlu
ZGV4KCkgIT0gb3RoZXIubV9wYXRoVmFyaWFudC5pbmRleCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0
byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5zZWxlY3Rpb25Ub3BGb3JIaXRUZXN0aW5n
KCk7CisgICAgfSk7Cit9CiAKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50
LCBbJl0oY29uc3QgYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aCA9PSBXVEY6Omdl
dDxzdGQ6OmRlY2F5X3Q8ZGVjbHR5cGUocGF0aCk+PihvdGhlci5tX3BhdGhWYXJpYW50KTsKK2lu
bGluZSBMYXlvdXRVbml0IFBhdGhMaW5lOjpzZWxlY3Rpb25Cb3R0b20oKSBjb25zdAoreworICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgp
IHsKKyAgICAgICAgcmV0dXJuIHBhdGguc2VsZWN0aW9uQm90dG9tKCk7CiAgICAgfSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaAppbmRl
eCBiYTdjODFhYjhmYWMuLjFmOWY5NmIwZTc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yTGVnYWN5UGF0
aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3Jh
dGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaApAQCAtNDMsNyArNDMsMTEgQEAgcHVibGljOgog
ICAgIExlZ2FjeUxpbmVQYXRoJiBvcGVyYXRvcj0oY29uc3QgTGVnYWN5TGluZVBhdGgmKSA9IGRl
ZmF1bHQ7CiAgICAgTGVnYWN5TGluZVBhdGgmIG9wZXJhdG9yPShMZWdhY3lMaW5lUGF0aCYmKSA9
IGRlZmF1bHQ7CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElu
bGluZUJveC0+ZnJhbWVSZWN0KCk7IH0KKyAgICBMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0
dXJuIG1fcm9vdElubGluZUJveC0+bGluZVRvcCgpOyB9CisgICAgTGF5b3V0VW5pdCBib3R0b20o
KSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmxpbmVCb3R0b20oKTsgfQorICAgIExh
eW91dFVuaXQgc2VsZWN0aW9uVG9wKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5z
ZWxlY3Rpb25Ub3AoKTsgfQorICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wRm9ySGl0VGVzdGlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+c2VsZWN0aW9uVG9wKFJvb3RJbmxp
bmVCb3g6OkZvckhpdFRlc3Rpbmc6Olllcyk7IH0KKyAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJv
dHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+c2VsZWN0aW9uQm90dG9tKCk7
IH0KIAogICAgIHZvaWQgdHJhdmVyc2VOZXh0KCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JN
b2Rlcm5QYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmgKaW5kZXggMGJhZTc5NGQ4ZjQzLi45OWUz
YmM1NzYxM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvck1vZGVyblBhdGguaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rl
cm5QYXRoLmgKQEAgLTQ3LDcgKzQ3LDExIEBAIHB1YmxpYzoKICAgICBNb2Rlcm5MaW5lUGF0aCYg
b3BlcmF0b3I9KGNvbnN0IE1vZGVybkxpbmVQYXRoJikgPSBkZWZhdWx0OwogICAgIE1vZGVybkxp
bmVQYXRoJiBvcGVyYXRvcj0oTW9kZXJuTGluZVBhdGgmJikgPSBkZWZhdWx0OwogCi0gICAgRmxv
YXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiB2ZXJ0aWNhbGx5Um91bmRlZFJlY3QobGluZSgp
LnJlY3QoKSk7IH0KKyAgICBMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFVu
aXQ6OmZyb21GbG9hdFJvdW5kKGxpbmUoKS5yZWN0KCkueSgpKTsgfQorICAgIExheW91dFVuaXQg
Ym90dG9tKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Um91bmQobGluZSgp
LnJlY3QoKS5tYXhZKCkpOyB9CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AoKSBjb25zdCB7
IHJldHVybiB0b3AoKTsgfQorICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wRm9ySGl0VGVzdGlu
ZygpIGNvbnN0IHsgcmV0dXJuIHRvcCgpOyB9CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0
b20oKSBjb25zdCB7IHJldHVybiBib3R0b20oKTsgfQogCiAgICAgdm9pZCB0cmF2ZXJzZU5leHQo
KQogICAgIHsKQEAgLTU5LDcgKzYzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHRyYXZlcnNlUHJl
dmlvdXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFhdEVuZCgpKTsKLSAgICAgICAgQVNTRVJU
KG1fbGluZUluZGV4KTsKKworICAgICAgICBpZiAoIW1fbGluZUluZGV4KSB7CisgICAgICAgICAg
ICBzZXRBdEVuZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAg
LS1tX2xpbmVJbmRleDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaAppbmRl
eCBiMDdkZTA0ZjA4OTAuLjczZmRiNmJhNmU1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvci5oCkBAIC0xMTEsNiArMTExLDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxvY2FsRW5k
T2Zmc2V0KCkgY29uc3Q7CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKKyAgICB1bnNp
Z25lZCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4KSBjb25zdDsKKwogICAgIGJvb2wgaXNMYXN0
VGV4dFJ1bk9uTGluZSgpIGNvbnN0OwogICAgIGJvb2wgaXNMYXN0VGV4dFJ1bigpIGNvbnN0Owog
CkBAIC0zMzQsNiArMzM2LDEzIEBAIGlubGluZSB1bnNpZ25lZCBQYXRoVGV4dFJ1bjo6bGVuZ3Ro
KCkgY29uc3QKICAgICB9KTsKIH0KIAoraW5saW5lIHVuc2lnbmVkIFBhdGhUZXh0UnVuOjpvZmZz
ZXRGb3JQb3NpdGlvbihmbG9hdCB4KSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG1fcGF0aFZhcmlhbnQsIFsmXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLm9m
ZnNldEZvclBvc2l0aW9uKHgpOworICAgIH0pOworfQorCiBpbmxpbmUgYm9vbCBQYXRoVGV4dFJ1
bjo6aXNMYXN0VGV4dFJ1bk9uTGluZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdh
Y3lQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25SdW5JdGVyYXRvckxlZ2FjeVBhdGguaAppbmRleCBjMzlmNmQwMzEwZWYuLjVmMDQ3NTc4
MmEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRo
LmgKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgY2hhciBiaWRpTGV2
ZWwoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+YmlkaUxldmVsKCk7IH0KIAorCiAgICAg
Ym9vbCB1c2VMaW5lQnJlYWtCb3hSZW5kZXJUcmVlRHVtcFF1aXJrKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiAhbV9pbmxpbmVCb3gtPmJlaGF2ZXNMaWtlVGV4dCgpOwpAQCAtNjUsNiAr
NjYsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbG9jYWxFbmRPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBpbmxpbmVUZXh0Qm94KCktPmVuZCgpOyB9CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5sZW4oKTsgfQogCisgICAgaW5saW5lIHVuc2ln
bmVkIG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRC
b3goKS0+b2Zmc2V0Rm9yUG9zaXRpb24oeCk7IH0KKwogICAgIGJvb2wgaXNMYXN0VGV4dFJ1bk9u
TGluZSgpIGNvbnN0CiAgICAgewogICAgICAgICBhdXRvKiBuZXh0ID0gbmV4dElubGluZVRleHRC
b3hJblRleHRPcmRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1v
ZGVyblBhdGguaAppbmRleCAyYjc2Y2UxZDg1YzQuLmM1ZDExMDBiZDllYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRl
cmF0b3JNb2Rlcm5QYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmgKQEAgLTI3LDYgKzI3LDcg
QEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODAsNiArODEsMzEgQEAgcHVibGljOgogICAg
IHVuc2lnbmVkIGxvY2FsRW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gcnVuKCkudGV4dENvbnRl
bnQoKS0+ZW5kKCk7IH0KICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBydW4o
KS50ZXh0Q29udGVudCgpLT5sZW5ndGgoKTsgfQogCisgICAgaW5saW5lIHVuc2lnbmVkIG9mZnNl
dEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNMaW5lQnJl
YWsoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBhdXRvIHJlY3QgPSB0aGlzLT5y
ZWN0KCk7CisgICAgICAgIGF1dG8gbG9jYWxYID0geCAtIHJlY3QueCgpOworICAgICAgICBpZiAo
bG9jYWxYID4gcmVjdC53aWR0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGxlbmd0aCgpOworICAg
ICAgICBpZiAobG9jYWxYIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGF1
dG8mIHN0eWxlID0gcnVuKCkuc3R5bGUoKTsKKworICAgICAgICBhdXRvIGNyZWF0ZVRleHRSdW4g
PSBbJl0geworICAgICAgICAgICAgYXV0byBleHBhbnNpb24gPSBydW4oKS5leHBhbnNpb24oKTsK
KyAgICAgICAgICAgIGF1dG8geFBvcyA9IHJlY3QueCgpIC0gKGxpbmUoKS5yZWN0KCkueCgpICsg
bGluZSgpLmhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoKSk7CisgICAgICAgICAgICBUZXh0UnVu
IHRleHRSdW4geyB0ZXh0KCksIHhQb3MsIGV4cGFuc2lvbi5ob3Jpem9udGFsRXhwYW5zaW9uLCBl
eHBhbnNpb24uYmVoYXZpb3IgfTsKKyAgICAgICAgICAgIHRleHRSdW4uc2V0VGFiU2l6ZSghc3R5
bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdGV4dFJ1bjsKKyAgICAgICAgfTsKKworICAgICAgICBib29sIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHJ1bigpLnN0eWxlKCkuZm9udENhc2NhZGUo
KS5vZmZzZXRGb3JQb3NpdGlvbihjcmVhdGVUZXh0UnVuKCksIGxvY2FsWCwgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpOworICAgIH0KKwogICAgIGJvb2wgaXNMYXN0VGV4dFJ1bk9uTGluZSgpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAoaXNMYXN0VGV4dFJ1bigpKQpAQCAtMTM4LDcgKzE2NCwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCB0cmF2ZXJzZVByZXZpb3VzT25MaW5lKCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVCghYXRFbmQoKSk7Ci0gICAgICAgIEFTU0VSVChtX3J1bkluZGV4KTsKKworICAg
ICAgICBpZiAoIW1fcnVuSW5kZXgpIHsKKyAgICAgICAgICAgIHNldEF0RW5kKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICBhdXRvIG9sZExpbmVJbmRleCA9IHJ1
bigpLmxpbmVJbmRleCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAK
aW5kZXggMTkyZDYyYmFjYTQ0Li4wNzU1YTI2N2EzN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyc2Vy
SWRpb21zLmgiCiAjaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0
Qm94LmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgpAQCAtNDUyLDEwICs0NTMsMTg0IEBAIFBvc2l0aW9u
IFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQog
ICAgIHJldHVybiBwb3NpdGlvbkZvclBvaW50KHBvaW50LCBudWxscHRyKS5kZWVwRXF1aXZhbGVu
dCgpOwogfQogCitlbnVtIFNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtIHsgQWx3YXlzRG93bnN0
cmVhbSwgQWx3YXlzVXBzdHJlYW0sIFVwc3RyZWFtSWZQb3NpdGlvbklzTm90QXRTdGFydCB9Owor
CitzdGF0aWMgYm9vbCBsaW5lRGlyZWN0aW9uUG9pbnRGaXRzSW5Cb3goaW50IHBvaW50TGluZURp
cmVjdGlvbiwgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciYgdGV4dFJ1
biwgU2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0mIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFt
KQoreworICAgIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtID0gQWx3YXlzRG93bnN0cmVhbTsK
KworICAgIC8vIHRoZSB4IGNvb3JkaW5hdGUgaXMgZXF1YWwgdG8gdGhlIGxlZnQgZWRnZSBvZiB0
aGlzIGJveAorICAgIC8vIHRoZSBhZmZpbml0eSBtdXN0IGJlIGRvd25zdHJlYW0gc28gdGhlIHBv
c2l0aW9uIGRvZXNuJ3QganVtcCBiYWNrIHRvIHRoZSBwcmV2aW91cyBsaW5lCisgICAgLy8gZXhj
ZXB0IHdoZW4gYm94IGlzIHRoZSBmaXJzdCBib3ggaW4gdGhlIGxpbmUKKyAgICBpZiAocG9pbnRM
aW5lRGlyZWN0aW9uIDw9IHRleHRSdW4tPmxvZ2ljYWxMZWZ0KCkpIHsKKyAgICAgICAgc2hvdWxk
QWZmaW5pdHlCZURvd25zdHJlYW0gPSAhdGV4dFJ1bi5wcmV2aW91c09uTGluZSgpID8gVXBzdHJl
YW1JZlBvc2l0aW9uSXNOb3RBdFN0YXJ0IDogQWx3YXlzRG93bnN0cmVhbTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gYW5k
IHRoZSB4IGNvb3JkaW5hdGUgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhp
cyBib3gKKyAgICAvLyBjaGVjayB0byBzZWUgaWYgcG9zaXRpb24gZ29lcyBpbiB0aGlzIGJveAor
ICAgIGlmIChwb2ludExpbmVEaXJlY3Rpb24gPCB0ZXh0UnVuLT5sb2dpY2FsUmlnaHQoKSkgewor
ICAgICAgICBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSA9IFVwc3RyZWFtSWZQb3NpdGlvbklz
Tm90QXRTdGFydDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICAv
LyBib3ggaXMgZmlyc3Qgb24gbGluZQorICAgIC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlzIHRv
IHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCB0ZXh0IGJveCBsZWZ0IGVkZ2UKKyAgICBpZiAoIXRleHRS
dW4ucHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpICYmIHBvaW50TGluZURpcmVjdGlv
biA8IHRleHRSdW4tPmxvZ2ljYWxMZWZ0KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKCF0ZXh0UnVuLm5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpKSB7CisgICAgICAgIC8v
IGJveCBpcyBsYXN0IG9uIGxpbmUKKyAgICAgICAgLy8gYW5kIHRoZSB4IGNvb3JkaW5hdGUgaXMg
dG8gdGhlIHJpZ2h0IG9mIHRoZSBsYXN0IHRleHQgYm94IHJpZ2h0IGVkZ2UKKyAgICAgICAgLy8g
Z2VuZXJhdGUgVmlzaWJsZVBvc2l0aW9uLCB1c2UgQWZmaW5pdHk6OlVwc3RyZWFtIGFmZmluaXR5
IGlmIHBvc3NpYmxlCisgICAgICAgIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtID0gVXBzdHJl
YW1JZlBvc2l0aW9uSXNOb3RBdFN0YXJ0OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gY3JlYXRlVmlz
aWJsZVBvc2l0aW9uRm9yQm94KGNvbnN0IExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciYg
cnVuLCB1bnNpZ25lZCBvZmZzZXQsIFNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtIHNob3VsZEFm
ZmluaXR5QmVEb3duc3RyZWFtKQoreworICAgIGF1dG8gYWZmaW5pdHkgPSBWaXNpYmxlUG9zaXRp
b246OmRlZmF1bHRBZmZpbml0eTsKKyAgICBzd2l0Y2ggKHNob3VsZEFmZmluaXR5QmVEb3duc3Ry
ZWFtKSB7CisgICAgY2FzZSBBbHdheXNEb3duc3RyZWFtOgorICAgICAgICBhZmZpbml0eSA9IEFm
ZmluaXR5OjpEb3duc3RyZWFtOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFsd2F5c1Vwc3Ry
ZWFtOgorICAgICAgICBhZmZpbml0eSA9IEFmZmluaXR5OjpVcHN0cmVhbTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBVcHN0cmVhbUlmUG9zaXRpb25Jc05vdEF0U3RhcnQ6CisgICAgICAgIGFm
ZmluaXR5ID0gb2Zmc2V0ID4gcnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKSA/IEFmZmluaXR5OjpV
cHN0cmVhbSA6IEFmZmluaXR5OjpEb3duc3RyZWFtOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIHJ1bi0+cmVuZGVyZXIoKS5jcmVhdGVWaXNpYmxlUG9zaXRpb24ob2Zmc2V0LCBh
ZmZpbml0eSk7Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gY3JlYXRlVmlzaWJsZVBvc2l0
aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURpKGNvbnN0IExheW91dEludGVncmF0aW9uOjpU
ZXh0UnVuSXRlcmF0b3ImIHJ1biwgdW5zaWduZWQgb2Zmc2V0LCBTaG91bGRBZmZpbml0eUJlRG93
bnN0cmVhbSBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSkKK3sKKyAgICBBU1NFUlQob2Zmc2V0
ID49IDApOworCisgICAgaWYgKG9mZnNldCAmJiBvZmZzZXQgPCBydW4tPmxlbmd0aCgpKQorICAg
ICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94KHJ1biwgcnVuLT5sb2NhbFN0
YXJ0T2Zmc2V0KCkgKyBvZmZzZXQsIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKKworICAg
IGJvb2wgcG9zaXRpb25Jc0F0U3RhcnRPZkJveCA9ICFvZmZzZXQ7CisgICAgaWYgKHBvc2l0aW9u
SXNBdFN0YXJ0T2ZCb3ggPT0gcnVuLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKKyAgICAg
ICAgLy8gb2Zmc2V0IGlzIG9uIHRoZSBsZWZ0IGVkZ2UKKworICAgICAgICBhdXRvIHByZXZpb3Vz
UnVuID0gcnVuLnByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKKyAgICAgICAgaWYg
KChwcmV2aW91c1J1biAmJiBwcmV2aW91c1J1bi0+YmlkaUxldmVsKCkgPT0gcnVuLT5iaWRpTGV2
ZWwoKSkKKyAgICAgICAgICAgIHx8IHJ1bi0+cmVuZGVyZXIoKS5jb250YWluaW5nQmxvY2soKS0+
c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBydW4tPmRpcmVjdGlvbigpKSAvLyBGSVhNRTogbGVmdCBv
biAxMkNCQQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChy
dW4sIHJ1bi0+bGVmdG1vc3RDYXJldE9mZnNldCgpLCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVh
bSk7CisKKyAgICAgICAgaWYgKHByZXZpb3VzUnVuICYmIHByZXZpb3VzUnVuLT5iaWRpTGV2ZWwo
KSA+IHJ1bi0+YmlkaUxldmVsKCkpIHsKKyAgICAgICAgICAgIC8vIGUuZy4gbGVmdCBvZiBCIGlu
IGFEQzEyQkFiCisgICAgICAgICAgICBhdXRvIGxlZnRtb3N0UnVuID0gcHJldmlvdXNSdW47Cisg
ICAgICAgICAgICBmb3IgKDsgcHJldmlvdXNSdW47IHByZXZpb3VzUnVuLnRyYXZlcnNlUHJldmlv
dXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZXZp
b3VzUnVuLT5iaWRpTGV2ZWwoKSA8PSBydW4tPmJpZGlMZXZlbCgpKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBsZWZ0bW9zdFJ1biA9IHByZXZpb3VzUnVuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZv
ckJveChsZWZ0bW9zdFJ1biwgbGVmdG1vc3RSdW4tPnJpZ2h0bW9zdENhcmV0T2Zmc2V0KCksIHNo
b3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghcHJl
dmlvdXNSdW4gfHwgcHJldmlvdXNSdW4tPmJpZGlMZXZlbCgpIDwgcnVuLT5iaWRpTGV2ZWwoKSkg
eworICAgICAgICAgICAgLy8gZS5nLiBsZWZ0IG9mIEQgaW4gYURDMTJCQWIKKyAgICAgICAgICAg
IExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciByaWdodG1vc3RSdW4gPSBydW47CisgICAg
ICAgICAgICBmb3IgKGF1dG8gbmV4dFJ1biA9IHJ1bi5uZXh0T25MaW5lSWdub3JpbmdMaW5lQnJl
YWsoKTsgbmV4dFJ1bjsgbmV4dFJ1bi50cmF2ZXJzZU5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVh
aygpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5leHRSdW4tPmJpZGlMZXZlbCgpIDwgcnVuLT5i
aWRpTGV2ZWwoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
cmlnaHRtb3N0UnVuID0gbmV4dFJ1bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3gocmlnaHRtb3N0UnVuLAorICAgICAgICAgICAg
ICAgIHJ1bi0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmlnaHRtb3N0UnVuLT5tYXhpbXVt
Q2FyZXRPZmZzZXQoKSA6IHJpZ2h0bW9zdFJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCksIHNob3Vs
ZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjcmVh
dGVWaXNpYmxlUG9zaXRpb25Gb3JCb3gocnVuLCBydW4tPnJpZ2h0bW9zdENhcmV0T2Zmc2V0KCks
IHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKKyAgICB9CisKKyAgICBhdXRvIG5leHRSdW4g
PSBydW4ubmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CisgICAgaWYgKChuZXh0UnVuICYm
IG5leHRSdW4tPmJpZGlMZXZlbCgpID09IHJ1bi0+YmlkaUxldmVsKCkpCisgICAgICAgIHx8IHJ1
bi0+cmVuZGVyZXIoKS5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBy
dW4tPmRpcmVjdGlvbigpKQorICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9y
Qm94KHJ1biwgcnVuLT5yaWdodG1vc3RDYXJldE9mZnNldCgpLCBzaG91bGRBZmZpbml0eUJlRG93
bnN0cmVhbSk7CisKKyAgICAvLyBvZmZzZXQgaXMgb24gdGhlIHJpZ2h0IGVkZ2UKKyAgICBpZiAo
bmV4dFJ1biAmJiBuZXh0UnVuLT5iaWRpTGV2ZWwoKSA+IHJ1bi0+YmlkaUxldmVsKCkpIHsKKyAg
ICAgICAgLy8gZS5nLiByaWdodCBvZiBDIGluIGFEQzEyQkFiCisgICAgICAgIGF1dG8gcmlnaHRt
b3N0UnVuID0gbmV4dFJ1bjsKKyAgICAgICAgZm9yICg7IG5leHRSdW47IG5leHRSdW4udHJhdmVy
c2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAgaWYgKG5leHRS
dW4tPmJpZGlMZXZlbCgpIDw9IHJ1bi0+YmlkaUxldmVsKCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICByaWdodG1vc3RSdW4gPSBuZXh0UnVuOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChyaWdodG1vc3RSdW4sIHJp
Z2h0bW9zdFJ1bi0+bGVmdG1vc3RDYXJldE9mZnNldCgpLCBzaG91bGRBZmZpbml0eUJlRG93bnN0
cmVhbSk7CisgICAgfQorCisgICAgaWYgKCFuZXh0UnVuIHx8IG5leHRSdW4tPmJpZGlMZXZlbCgp
IDwgcnVuLT5iaWRpTGV2ZWwoKSkgeworICAgICAgICAvLyBlLmcuIHJpZ2h0IG9mIEEgaW4gYURD
MTJCQWIKKyAgICAgICAgTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIGxlZnRtb3N0UnVu
ID0gcnVuOworICAgICAgICBmb3IgKGF1dG8gcHJldmlvdXNSdW4gPSBydW4ucHJldmlvdXNPbkxp
bmVJZ25vcmluZ0xpbmVCcmVhaygpOyBwcmV2aW91c1J1bjsgcHJldmlvdXNSdW4udHJhdmVyc2VQ
cmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIGlmIChwcmV2
aW91c1J1bi0+YmlkaUxldmVsKCkgPCBydW4tPmJpZGlMZXZlbCgpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgbGVmdG1vc3RSdW4gPSBwcmV2aW91c1J1bjsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3gobGVmdG1vc3RS
dW4sCisgICAgICAgICAgICBydW4tPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxlZnRtb3N0
UnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKSA6IGxlZnRtb3N0UnVuLT5tYXhpbXVtQ2FyZXRPZmZz
ZXQoKSwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOworICAgIH0KKworICAgIHJldHVybiBj
cmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3gocnVuLCBydW4tPmxlZnRtb3N0Q2FyZXRPZmZzZXQo
KSwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOworfQorCisKIFZpc2libGVQb3NpdGlvbiBS
ZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29u
c3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKQogewotICAgIGVuc3VyZUxpbmVCb3hlcygpOwot
ICAgIHJldHVybiBtX2xpbmVCb3hlcy5wb3NpdGlvbkZvclBvaW50KCp0aGlzLCBwb2ludCk7Cisg
ICAgYXV0byBmaXJzdFJ1biA9IExheW91dEludGVncmF0aW9uOjpmaXJzdFRleHRSdW5Gb3IoKnRo
aXMpOworCisgICAgaWYgKCFmaXJzdFJ1biB8fCAhdGV4dCgpLmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIEFmZmluaXR5OjpEb3duc3RyZWFtKTsKKwor
ICAgIExheW91dFVuaXQgcG9pbnRMaW5lRGlyZWN0aW9uID0gZmlyc3RSdW4tPmlzSG9yaXpvbnRh
bCgpID8gcG9pbnQueCgpIDogcG9pbnQueSgpOworICAgIExheW91dFVuaXQgcG9pbnRCbG9ja0Rp
cmVjdGlvbiA9IGZpcnN0UnVuLT5pc0hvcml6b250YWwoKSA/IHBvaW50LnkoKSA6IHBvaW50Lngo
KTsKKyAgICBib29sIGJsb2Nrc0FyZUZsaXBwZWQgPSBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCk7CisKKyAgICBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yIGxh
c3RSdW47CisgICAgZm9yIChhdXRvIHJ1biA9IGZpcnN0UnVuOyBydW47IHJ1bi50cmF2ZXJzZU5l
eHRUZXh0UnVuKCkpIHsKKyAgICAgICAgaWYgKHJ1bi0+aXNMaW5lQnJlYWsoKSAmJiAhcnVuLnBy
ZXZpb3VzT25MaW5lKCkgJiYgcnVuLm5leHRPbkxpbmUoKSAmJiAhcnVuLm5leHRPbkxpbmUoKS0+
aXNMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgIHJ1bi50cmF2ZXJzZU5leHRUZXh0UnVuKCk7CisK
KyAgICAgICAgYXV0byBsaW5lID0gcnVuLmxpbmUoKTsKKyAgICAgICAgTGF5b3V0VW5pdCB0b3Ag
PSBzdGQ6Om1pbihsaW5lLT5zZWxlY3Rpb25Ub3BGb3JIaXRUZXN0aW5nKCksIGxpbmUtPnRvcCgp
KTsKKyAgICAgICAgaWYgKHBvaW50QmxvY2tEaXJlY3Rpb24gPiB0b3AgfHwgKCFibG9ja3NBcmVG
bGlwcGVkICYmIHBvaW50QmxvY2tEaXJlY3Rpb24gPT0gdG9wKSkgeworICAgICAgICAgICAgTGF5
b3V0VW5pdCBib3R0b20gPSBsaW5lLT5zZWxlY3Rpb25Cb3R0b20oKTsKKyAgICAgICAgICAgIGlm
IChhdXRvIG5leHRMaW5lID0gbGluZS5uZXh0KCkpCisgICAgICAgICAgICAgICAgYm90dG9tID0g
c3RkOjptaW4oYm90dG9tLCBuZXh0TGluZS0+dG9wKCkpOworCisgICAgICAgICAgICBpZiAocG9p
bnRCbG9ja0RpcmVjdGlvbiA8IGJvdHRvbSB8fCAoYmxvY2tzQXJlRmxpcHBlZCAmJiBwb2ludEJs
b2NrRGlyZWN0aW9uID09IGJvdHRvbSkpIHsKKyAgICAgICAgICAgICAgICBTaG91bGRBZmZpbml0
eUJlRG93bnN0cmVhbSBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbTsKKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorICAgICAgICAgICAgICAgIGlmIChwb2ludExpbmVEaXJlY3Rpb24gIT0gYm94
LT5sb2dpY2FsTGVmdCgpICYmIHBvaW50LngoKSA8IGJveC0+eCgpICsgYm94LT5sb2dpY2FsV2lk
dGgoKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgaGFsZiA9IGJveC0+eCgpICsgYm94LT5s
b2dpY2FsV2lkdGgoKSAvIDI7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWZmaW5pdHkgPSBw
b2ludC54KCkgPCBoYWxmID8gQWZmaW5pdHk6OkRvd25zdHJlYW0gOiBBZmZpbml0eTo6VXBzdHJl
YW07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJlci5jcmVhdGVWaXNpYmxlUG9z
aXRpb24oYm94LT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludExpbmVEaXJlY3Rpb24pICsgYm94LT5z
dGFydCgpLCBhZmZpbml0eSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAg
ICAgICAgaWYgKGxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveChwb2ludExpbmVEaXJlY3Rpb24s
IHJ1biwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURpKHJ1
biwgcnVuLT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludExpbmVEaXJlY3Rpb24pLCBzaG91bGRBZmZp
bml0eUJlRG93bnN0cmVhbSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbGFz
dFJ1biA9IHJ1bjsKKyAgICB9CisKKyAgICBpZiAobGFzdFJ1bikgeworICAgICAgICBTaG91bGRB
ZmZpbml0eUJlRG93bnN0cmVhbSBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbTsKKyAgICAgICAg
bGluZURpcmVjdGlvblBvaW50Rml0c0luQm94KHBvaW50TGluZURpcmVjdGlvbiwgbGFzdFJ1biwg
c2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOworICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJs
ZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURpKGxhc3RSdW4sIGxhc3RSdW4tPm9m
ZnNldEZvclBvc2l0aW9uKHBvaW50TGluZURpcmVjdGlvbikgKyBsYXN0UnVuLT5sb2NhbFN0YXJ0
T2Zmc2V0KCksIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKKyAgICB9CisgICAgcmV0dXJu
IGNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBBZmZpbml0eTo6RG93bnN0cmVhbSk7CiB9CiAKIExh
eW91dFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gs
IHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hl
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAK
aW5kZXggYjU3Y2QwZWM2NTVmLi5iNzU2MzlhZmY4YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKQEAgLTE3MCwxNzkgKzE3MCw2IEBA
IExheW91dFJlY3QgUmVuZGVyVGV4dExpbmVCb3hlczo6dmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0Jv
eChjb25zdCBSZW5kZXJUZXh0JiByZW5kCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLWVudW0gU2hv
dWxkQWZmaW5pdHlCZURvd25zdHJlYW0geyBBbHdheXNEb3duc3RyZWFtLCBBbHdheXNVcHN0cmVh
bSwgVXBzdHJlYW1JZlBvc2l0aW9uSXNOb3RBdFN0YXJ0IH07Ci0KLXN0YXRpYyBib29sIGxpbmVE
aXJlY3Rpb25Qb2ludEZpdHNJbkJveChpbnQgcG9pbnRMaW5lRGlyZWN0aW9uLCBjb25zdCBJbmxp
bmVUZXh0Qm94JiBib3gsIFNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtJiBzaG91bGRBZmZpbml0
eUJlRG93bnN0cmVhbSkKLXsKLSAgICBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSA9IEFsd2F5
c0Rvd25zdHJlYW07Ci0KLSAgICAvLyB0aGUgeCBjb29yZGluYXRlIGlzIGVxdWFsIHRvIHRoZSBs
ZWZ0IGVkZ2Ugb2YgdGhpcyBib3gKLSAgICAvLyB0aGUgYWZmaW5pdHkgbXVzdCBiZSBkb3duc3Ry
ZWFtIHNvIHRoZSBwb3NpdGlvbiBkb2Vzbid0IGp1bXAgYmFjayB0byB0aGUgcHJldmlvdXMgbGlu
ZQotICAgIC8vIGV4Y2VwdCB3aGVuIGJveCBpcyB0aGUgZmlyc3QgYm94IGluIHRoZSBsaW5lCi0g
ICAgaWYgKHBvaW50TGluZURpcmVjdGlvbiA8PSBib3gubG9naWNhbExlZnQoKSkgewotICAgICAg
ICBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSA9ICFib3gucHJldmlvdXNMZWFmT25MaW5lKCkg
PyBVcHN0cmVhbUlmUG9zaXRpb25Jc05vdEF0U3RhcnQgOiBBbHdheXNEb3duc3RyZWFtOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICAvLyBhbmQgdGhlIHggY29vcmRpbmF0ZSBpcyB0byB0aGUgbGVmdCBvZiB0aGUgcmlnaHQgZWRn
ZSBvZiB0aGlzIGJveAotICAgIC8vIGNoZWNrIHRvIHNlZSBpZiBwb3NpdGlvbiBnb2VzIGluIHRo
aXMgYm94Ci0gICAgaWYgKHBvaW50TGluZURpcmVjdGlvbiA8IGJveC5sb2dpY2FsUmlnaHQoKSkg
ewotICAgICAgICBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSA9IFVwc3RyZWFtSWZQb3NpdGlv
bklzTm90QXRTdGFydDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICAvLyBib3ggaXMgZmlyc3Qgb24gbGluZQotICAgIC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlz
IHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCB0ZXh0IGJveCBsZWZ0IGVkZ2UKLSAgICBpZiAoIWJv
eC5wcmV2aW91c0xlYWZPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpICYmIHBvaW50TGluZURpcmVj
dGlvbiA8IGJveC5sb2dpY2FsTGVmdCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlm
ICghYm94Lm5leHRMZWFmT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSkgewotICAgICAgICAvLyBi
b3ggaXMgbGFzdCBvbiBsaW5lCi0gICAgICAgIC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlzIHRv
IHRoZSByaWdodCBvZiB0aGUgbGFzdCB0ZXh0IGJveCByaWdodCBlZGdlCi0gICAgICAgIC8vIGdl
bmVyYXRlIFZpc2libGVQb3NpdGlvbiwgdXNlIEFmZmluaXR5OjpVcHN0cmVhbSBhZmZpbml0eSBp
ZiBwb3NzaWJsZQotICAgICAgICBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSA9IFVwc3RyZWFt
SWZQb3NpdGlvbklzTm90QXRTdGFydDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2li
bGVQb3NpdGlvbkZvckJveChjb25zdCBJbmxpbmVCb3gmIGJveCwgaW50IG9mZnNldCwgU2hvdWxk
QWZmaW5pdHlCZURvd25zdHJlYW0gc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pCi17Ci0gICAg
YXV0byBhZmZpbml0eSA9IFZpc2libGVQb3NpdGlvbjo6ZGVmYXVsdEFmZmluaXR5OwotICAgIHN3
aXRjaCAoc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pIHsKLSAgICBjYXNlIEFsd2F5c0Rvd25z
dHJlYW06Ci0gICAgICAgIGFmZmluaXR5ID0gQWZmaW5pdHk6OkRvd25zdHJlYW07Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQWx3YXlzVXBzdHJlYW06Ci0gICAgICAgIGFmZmluaXR5ID0gQWZm
aW5pdHk6OlVwc3RyZWFtOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFVwc3RyZWFtSWZQb3Np
dGlvbklzTm90QXRTdGFydDoKLSAgICAgICAgYWZmaW5pdHkgPSBvZmZzZXQgPiBib3guY2FyZXRN
aW5PZmZzZXQoKSA/IEFmZmluaXR5OjpVcHN0cmVhbSA6IEFmZmluaXR5OjpEb3duc3RyZWFtOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGJveC5yZW5kZXJlcigpLmNyZWF0ZVZp
c2libGVQb3NpdGlvbihvZmZzZXQsIGFmZmluaXR5KTsKLX0KLQotc3RhdGljIFZpc2libGVQb3Np
dGlvbiBjcmVhdGVWaXNpYmxlUG9zaXRpb25BZnRlckFkanVzdGluZ09mZnNldEZvckJpRGkoY29u
c3QgSW5saW5lVGV4dEJveCYgYm94LCBpbnQgb2Zmc2V0LCBTaG91bGRBZmZpbml0eUJlRG93bnN0
cmVhbSBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSkKLXsKLSAgICBBU1NFUlQob2Zmc2V0ID49
IDApOwotCi0gICAgaWYgKG9mZnNldCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zmc2V0KSA8
IGJveC5sZW4oKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChi
b3gsIGJveC5zdGFydCgpICsgb2Zmc2V0LCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7Ci0K
LSAgICBib29sIHBvc2l0aW9uSXNBdFN0YXJ0T2ZCb3ggPSAhb2Zmc2V0OwotICAgIGlmIChwb3Np
dGlvbklzQXRTdGFydE9mQm94ID09IGJveC5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKLSAg
ICAgICAgLy8gb2Zmc2V0IGlzIG9uIHRoZSBsZWZ0IGVkZ2UKLQotICAgICAgICBjb25zdCBJbmxp
bmVCb3gqIHByZXZCb3ggPSBib3gucHJldmlvdXNMZWFmT25MaW5lSWdub3JpbmdMaW5lQnJlYWso
KTsKLSAgICAgICAgaWYgKChwcmV2Qm94ICYmIHByZXZCb3gtPmJpZGlMZXZlbCgpID09IGJveC5i
aWRpTGV2ZWwoKSkKLSAgICAgICAgICAgIHx8IGJveC5yZW5kZXJlcigpLmNvbnRhaW5pbmdCbG9j
aygpLT5zdHlsZSgpLmRpcmVjdGlvbigpID09IGJveC5kaXJlY3Rpb24oKSkgLy8gRklYTUU6IGxl
ZnQgb24gMTJDQkEKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JC
b3goYm94LCBib3guY2FyZXRMZWZ0bW9zdE9mZnNldCgpLCBzaG91bGRBZmZpbml0eUJlRG93bnN0
cmVhbSk7Ci0KLSAgICAgICAgaWYgKHByZXZCb3ggJiYgcHJldkJveC0+YmlkaUxldmVsKCkgPiBi
b3guYmlkaUxldmVsKCkpIHsKLSAgICAgICAgICAgIC8vIGUuZy4gbGVmdCBvZiBCIGluIGFEQzEy
QkFiCi0gICAgICAgICAgICBjb25zdCBJbmxpbmVCb3gqIGxlZnRtb3N0Qm94OwotICAgICAgICAg
ICAgZG8gewotICAgICAgICAgICAgICAgIGxlZnRtb3N0Qm94ID0gcHJldkJveDsKLSAgICAgICAg
ICAgICAgICBwcmV2Qm94ID0gbGVmdG1vc3RCb3gtPnByZXZpb3VzTGVhZk9uTGluZUlnbm9yaW5n
TGluZUJyZWFrKCk7Ci0gICAgICAgICAgICB9IHdoaWxlIChwcmV2Qm94ICYmIHByZXZCb3gtPmJp
ZGlMZXZlbCgpID4gYm94LmJpZGlMZXZlbCgpKTsKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVW
aXNpYmxlUG9zaXRpb25Gb3JCb3goKmxlZnRtb3N0Qm94LCBsZWZ0bW9zdEJveC0+Y2FyZXRSaWdo
dG1vc3RPZmZzZXQoKSwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFwcmV2Qm94IHx8IHByZXZCb3gtPmJpZGlMZXZlbCgpIDwgYm94LmJpZGlM
ZXZlbCgpKSB7Ci0gICAgICAgICAgICAvLyBlLmcuIGxlZnQgb2YgRCBpbiBhREMxMkJBYgotICAg
ICAgICAgICAgY29uc3QgSW5saW5lQm94KiByaWdodG1vc3RCb3g7Ci0gICAgICAgICAgICBjb25z
dCBJbmxpbmVCb3gqIG5leHRCb3ggPSAmYm94OwotICAgICAgICAgICAgZG8gewotICAgICAgICAg
ICAgICAgIHJpZ2h0bW9zdEJveCA9IG5leHRCb3g7Ci0gICAgICAgICAgICAgICAgbmV4dEJveCA9
IHJpZ2h0bW9zdEJveC0+bmV4dExlYWZPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOwotICAgICAg
ICAgICAgfSB3aGlsZSAobmV4dEJveCAmJiBuZXh0Qm94LT5iaWRpTGV2ZWwoKSA+PSBib3guYmlk
aUxldmVsKCkpOwotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJv
eCgqcmlnaHRtb3N0Qm94LAotICAgICAgICAgICAgICAgIGJveC5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyByaWdodG1vc3RCb3gtPmNhcmV0TWF4T2Zmc2V0KCkgOiByaWdodG1vc3RCb3gtPmNh
cmV0TWluT2Zmc2V0KCksIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3goYm94LCBib3guY2Fy
ZXRSaWdodG1vc3RPZmZzZXQoKSwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOwotICAgIH0K
LQotICAgIGNvbnN0IElubGluZUJveCogbmV4dEJveCA9IGJveC5uZXh0TGVhZk9uTGluZUlnbm9y
aW5nTGluZUJyZWFrKCk7Ci0gICAgaWYgKChuZXh0Qm94ICYmIG5leHRCb3gtPmJpZGlMZXZlbCgp
ID09IGJveC5iaWRpTGV2ZWwoKSkKLSAgICAgICAgfHwgYm94LnJlbmRlcmVyKCkuY29udGFpbmlu
Z0Jsb2NrKCktPnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gYm94LmRpcmVjdGlvbigpKQotICAgICAg
ICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94KGJveCwgYm94LmNhcmV0UmlnaHRt
b3N0T2Zmc2V0KCksIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKLQotICAgIC8vIG9mZnNl
dCBpcyBvbiB0aGUgcmlnaHQgZWRnZQotICAgIGlmIChuZXh0Qm94ICYmIG5leHRCb3gtPmJpZGlM
ZXZlbCgpID4gYm94LmJpZGlMZXZlbCgpKSB7Ci0gICAgICAgIC8vIGUuZy4gcmlnaHQgb2YgQyBp
biBhREMxMkJBYgotICAgICAgICBjb25zdCBJbmxpbmVCb3gqIHJpZ2h0bW9zdEJveDsKLSAgICAg
ICAgZG8gewotICAgICAgICAgICAgcmlnaHRtb3N0Qm94ID0gbmV4dEJveDsKLSAgICAgICAgICAg
IG5leHRCb3ggPSByaWdodG1vc3RCb3gtPm5leHRMZWFmT25MaW5lSWdub3JpbmdMaW5lQnJlYWso
KTsKLSAgICAgICAgfSB3aGlsZSAobmV4dEJveCAmJiBuZXh0Qm94LT5iaWRpTGV2ZWwoKSA+IGJv
eC5iaWRpTGV2ZWwoKSk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JC
b3goKnJpZ2h0bW9zdEJveCwgcmlnaHRtb3N0Qm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCksIHNo
b3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKLSAgICB9Ci0KLSAgICBpZiAoIW5leHRCb3ggfHwg
bmV4dEJveC0+YmlkaUxldmVsKCkgPCBib3guYmlkaUxldmVsKCkpIHsKLSAgICAgICAgLy8gZS5n
LiByaWdodCBvZiBBIGluIGFEQzEyQkFiCi0gICAgICAgIGNvbnN0IElubGluZUJveCogbGVmdG1v
c3RCb3g7Ci0gICAgICAgIGNvbnN0IElubGluZUJveCogcHJldkJveCA9ICZib3g7Ci0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIGxlZnRtb3N0Qm94ID0gcHJldkJveDsKLSAgICAgICAgICAgIHBy
ZXZCb3ggPSBsZWZ0bW9zdEJveC0+cHJldmlvdXNMZWFmT25MaW5lSWdub3JpbmdMaW5lQnJlYWso
KTsKLSAgICAgICAgfSB3aGlsZSAocHJldkJveCAmJiBwcmV2Qm94LT5iaWRpTGV2ZWwoKSA+PSBi
b3guYmlkaUxldmVsKCkpOwotICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9y
Qm94KCpsZWZ0bW9zdEJveCwKLSAgICAgICAgICAgIGJveC5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyBsZWZ0bW9zdEJveC0+Y2FyZXRNaW5PZmZzZXQoKSA6IGxlZnRtb3N0Qm94LT5jYXJldE1h
eE9mZnNldCgpLCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChib3gsIGJveC5jYXJldExlZnRtb3N0T2Zm
c2V0KCksIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKLX0KLQotVmlzaWJsZVBvc2l0aW9u
IFJlbmRlclRleHRMaW5lQm94ZXM6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgUmVuZGVyVGV4dCYg
cmVuZGVyZXIsIGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
Zmlyc3QgfHwgIXJlbmRlcmVyLnRleHQoKS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRl
cmVyLmNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBBZmZpbml0eTo6RG93bnN0cmVhbSk7Ci0KLSAg
ICBMYXlvdXRVbml0IHBvaW50TGluZURpcmVjdGlvbiA9IG1fZmlyc3QtPmlzSG9yaXpvbnRhbCgp
ID8gcG9pbnQueCgpIDogcG9pbnQueSgpOwotICAgIExheW91dFVuaXQgcG9pbnRCbG9ja0RpcmVj
dGlvbiA9IG1fZmlyc3QtPmlzSG9yaXpvbnRhbCgpID8gcG9pbnQueSgpIDogcG9pbnQueCgpOwot
ICAgIGJvb2wgYmxvY2tzQXJlRmxpcHBlZCA9IHJlbmRlcmVyLnN0eWxlKCkuaXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKTsKLQotICAgIElubGluZVRleHRCb3gqIGxhc3RCb3ggPSBudWxscHRy
OwotICAgIGZvciAoYXV0byogYm94ID0gbV9maXJzdDsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0
Qm94KCkpIHsKLSAgICAgICAgaWYgKGJveC0+aXNMaW5lQnJlYWsoKSAmJiAhYm94LT5wcmV2aW91
c0xlYWZPbkxpbmUoKSAmJiBib3gtPm5leHRMZWFmT25MaW5lKCkgJiYgIWJveC0+bmV4dExlYWZP
bkxpbmUoKS0+aXNMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgIGJveCA9IGJveC0+bmV4dFRleHRC
b3goKTsKLQotICAgICAgICBhdXRvJiByb290Qm94ID0gYm94LT5yb290KCk7Ci0gICAgICAgIExh
eW91dFVuaXQgdG9wID0gc3RkOjptaW4ocm9vdEJveC5zZWxlY3Rpb25Ub3AoUm9vdElubGluZUJv
eDo6Rm9ySGl0VGVzdGluZzo6WWVzKSwgcm9vdEJveC5saW5lVG9wKCkpOwotICAgICAgICBpZiAo
cG9pbnRCbG9ja0RpcmVjdGlvbiA+IHRvcCB8fCAoIWJsb2Nrc0FyZUZsaXBwZWQgJiYgcG9pbnRC
bG9ja0RpcmVjdGlvbiA9PSB0b3ApKSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGJvdHRvbSA9
IHJvb3RCb3guc2VsZWN0aW9uQm90dG9tKCk7Ci0gICAgICAgICAgICBpZiAocm9vdEJveC5uZXh0
Um9vdEJveCgpKQotICAgICAgICAgICAgICAgIGJvdHRvbSA9IHN0ZDo6bWluKGJvdHRvbSwgcm9v
dEJveC5uZXh0Um9vdEJveCgpLT5saW5lVG9wKCkpOwotCi0gICAgICAgICAgICBpZiAocG9pbnRC
bG9ja0RpcmVjdGlvbiA8IGJvdHRvbSB8fCAoYmxvY2tzQXJlRmxpcHBlZCAmJiBwb2ludEJsb2Nr
RGlyZWN0aW9uID09IGJvdHRvbSkpIHsKLSAgICAgICAgICAgICAgICBTaG91bGRBZmZpbml0eUJl
RG93bnN0cmVhbSBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbTsKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgICAgICAgICAgICAgIGlmIChwb2ludExpbmVEaXJlY3Rpb24gIT0gYm94LT5s
b2dpY2FsTGVmdCgpICYmIHBvaW50LngoKSA8IGJveC0+eCgpICsgYm94LT5sb2dpY2FsV2lkdGgo
KSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgaGFsZiA9IGJveC0+eCgpICsgYm94LT5sb2dp
Y2FsV2lkdGgoKSAvIDI7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYWZmaW5pdHkgPSBwb2lu
dC54KCkgPCBoYWxmID8gQWZmaW5pdHk6OkRvd25zdHJlYW0gOiBBZmZpbml0eTo6VXBzdHJlYW07
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJlci5jcmVhdGVWaXNpYmxlUG9zaXRp
b24oYm94LT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludExpbmVEaXJlY3Rpb24pICsgYm94LT5zdGFy
dCgpLCBhZmZpbml0eSk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICAg
ICAgaWYgKGxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveChwb2ludExpbmVEaXJlY3Rpb24sICpi
b3gsIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkFmdGVyQWRqdXN0aW5nT2Zmc2V0Rm9yQmlEaSgqYm94
LCBib3gtPm9mZnNldEZvclBvc2l0aW9uKHBvaW50TGluZURpcmVjdGlvbiksIHNob3VsZEFmZmlu
aXR5QmVEb3duc3RyZWFtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBsYXN0
Qm94ID0gYm94OwotICAgIH0KLQotICAgIGlmIChsYXN0Qm94KSB7Ci0gICAgICAgIFNob3VsZEFm
ZmluaXR5QmVEb3duc3RyZWFtIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtOwotICAgICAgICBs
aW5lRGlyZWN0aW9uUG9pbnRGaXRzSW5Cb3gocG9pbnRMaW5lRGlyZWN0aW9uLCAqbGFzdEJveCwg
c2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOwotICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJs
ZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURpKCpsYXN0Qm94LCBsYXN0Qm94LT5v
ZmZzZXRGb3JQb3NpdGlvbihwb2ludExpbmVEaXJlY3Rpb24pICsgbGFzdEJveC0+c3RhcnQoKSwg
c2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOwotICAgIH0KLSAgICByZXR1cm4gcmVuZGVyZXIu
Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIEFmZmluaXR5OjpEb3duc3RyZWFtKTsKLX0KLQogdm9p
ZCBSZW5kZXJUZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0JiByZW5k
ZXJlciwgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzdGF0ZSkKIHsKICAgICBpZiAoc3Rh
dGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlIHx8IHN0YXRlID09IFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oCmluZGV4IDQ1OTQ5YTMxZDgzZi4uMDJkMzBh
YjNjMGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExp
bmVCb3hlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJv
eGVzLmgKQEAgLTU2LDggKzU2LDYgQEAgcHVibGljOgogCiAgICAgSW5saW5lVGV4dEJveCogZmlu
ZE5leHQoaW50IG9mZnNldCwgaW50JiBwb3NpdGlvbikgY29uc3Q7CiAKLSAgICBWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBSZW5kZXJUZXh0JiwgY29uc3QgTGF5b3V0UG9p
bnQmKSBjb25zdDsKLQogICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoUmVuZGVyVGV4dCYsIFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUpOwogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVj
dEZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpOwogICAgIHZvaWQgY29sbGVj
dFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgVmVj
dG9yPExheW91dFJlY3Q+JiByZWN0cyk7Cg==
</data>
<flag name="commit-queue"
          id="426876"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410829</attachid>
            <date>2020-10-08 04:39:16 -0700</date>
            <delta_ts>2020-10-08 11:18:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>positionForPoint-2.patch</filename>
            <type>text/plain</type>
            <size>32992</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiMWI4OWFjZWM4YzIuLmNiYmViMmQ4ZWQ4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDU5IEBACisyMDIwLTEwLTA4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQ29udmVydCBSZW5kZXJUZXh0Ojpwb3Np
dGlvbkZvclBvaW50IHVzZSBpdGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE3NDY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBJbmxpbmVCb3ggdHJhdmVyc2FsIGNvZGUgd2l0aCBh
IGdlbmVyaWMgdmVyc2lvbi4KKworICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRl
Z3JhdGlvbjo6TGluZUl0ZXJhdG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3I6Om9wZXJhdG9yIT0gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhMaW5lOjp0b3Ag
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhMaW5lOjpi
b3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhM
aW5lOjpzZWxlY3Rpb25Ub3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OlBhdGhMaW5lOjpzZWxlY3Rpb25Ub3BGb3JIaXRUZXN0aW5nIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoTGluZTo6c2VsZWN0aW9uQm90dG9t
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoTGluZTo6
b3BlcmF0b3IhPSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRl
Z3JhdGlvbjo6UGF0aExpbmU6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhMaW5lOjpvcGVyYXRvcj09IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3JMZWdhY3lQYXRoLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6
TGVnYWN5TGluZVBhdGg6OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRl
Z3JhdGlvbjo6TGVnYWN5TGluZVBhdGg6OmJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGVnYWN5TGluZVBhdGg6OnNlbGVjdGlvblRvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGVnYWN5TGluZVBhdGg6OnNl
bGVjdGlvblRvcEZvckhpdFRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
SW50ZWdyYXRpb246OkxlZ2FjeUxpbmVQYXRoOjpzZWxlY3Rpb25Cb3R0b20gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxlZ2FjeUxpbmVQYXRoOjpyZWN0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJ
bnRlZ3JhdGlvbjo6TW9kZXJuTGluZVBhdGg6OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXRJbnRlZ3JhdGlvbjo6TW9kZXJuTGluZVBhdGg6OmJvdHRvbSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TW9kZXJuTGluZVBhdGg6OnNlbGVjdGlv
blRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TW9kZXJu
TGluZVBhdGg6OnNlbGVjdGlvblRvcEZvckhpdFRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246Ok1vZGVybkxpbmVQYXRoOjpzZWxlY3Rpb25Cb3R0b20g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246Ok1vZGVybkxpbmVQ
YXRoOjp0cmF2ZXJzZVByZXZpb3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0
aW9uOjpNb2Rlcm5MaW5lUGF0aDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1bjo6b2Zmc2V0Rm9yUG9zaXRp
b24gY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
blJ1bkl0ZXJhdG9yTGVnYWN5UGF0aC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OkxlZ2FjeVBhdGg6Om9mZnNldEZvclBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKiBs
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGgu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpNb2Rlcm5QYXRoOjpvZmZz
ZXRGb3JQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlv
bjo6TW9kZXJuUGF0aDo6dHJhdmVyc2VQcmV2aW91c09uTGluZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGluZURpcmVjdGlvblBvaW50
Rml0c0luQm94KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaXNpYmxlUG9zaXRpb25BZnRlckFkanVzdGlu
Z09mZnNldEZvckJpRGkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6cG9zaXRpb25G
b3JQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwOgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVEaXJlY3Rpb25Qb2lu
dEZpdHNJbkJveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaXNpYmxlUG9z
aXRpb25Gb3JCb3gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVmlzaWJsZVBv
c2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURpKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OnBvc2l0aW9uRm9yUG9pbnQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmg6CisKIDIwMjAt
MTAtMDcgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBz
dXBwb3J0IGZvciBNZWRpYVJlY29yZGVyIHBhdXNlL3Jlc3VtZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
bkxpbmVJdGVyYXRvci5jcHAKaW5kZXggMmYxNDc2YTRmYjJmLi43YWNiN2Y4Yzg0NDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
bkxpbmVJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmNwcApAQCAtNjksNiArNjksMTYgQEAgTGlu
ZUl0ZXJhdG9yJiBMaW5lSXRlcmF0b3I6OnRyYXZlcnNlUHJldmlvdXMoKQogICAgIHJldHVybiAq
dGhpczsKIH0KIAorYm9vbCBMaW5lSXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgTGluZUl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9saW5lLm1fcGF0aFZhcmlhbnQuaW5kZXgo
KSAhPSBvdGhlci5tX2xpbmUubV9wYXRoVmFyaWFudC5pbmRleCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2xpbmUubV9wYXRoVmFyaWFudCwg
WyZdKGNvbnN0IGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGggPT0gV1RGOjpnZXQ8
c3RkOjpkZWNheV90PGRlY2x0eXBlKHBhdGgpPj4ob3RoZXIubV9saW5lLm1fcGF0aFZhcmlhbnQp
OworICAgIH0pOworfQorCiB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgK
aW5kZXggMDk3MDliOGQwMGU5Li41M2IwMWI1MzYzNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxp
bmVJdGVyYXRvci5oCkBAIC00OSwxMCArNDksMTEgQEAgcHVibGljOgogCiAgICAgUGF0aExpbmUo
UGF0aFZhcmlhbnQmJik7CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0OwotCi0gICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFBhdGhMaW5lJikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFBhdGhMaW5lJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
IH0KKyAgICBMYXlvdXRVbml0IHRvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgYm90dG9tKCkg
Y29uc3Q7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AoKSBjb25zdDsKKyAgICBMYXlvdXRV
bml0IHNlbGVjdGlvblRvcEZvckhpdFRlc3RpbmcoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHNl
bGVjdGlvbkJvdHRvbSgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIExp
bmVJdGVyYXRvcjsKQEAgLTc0LDggKzc1LDggQEAgcHVibGljOgogCiAgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9CiAKLSAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgTGluZUl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9saW5lID09
IG90aGVyLm1fbGluZTsgfQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBMaW5lSXRlcmF0b3Im
IG90aGVyKSBjb25zdCB7IHJldHVybiBtX2xpbmUgIT0gb3RoZXIubV9saW5lOyB9CisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IExpbmVJdGVyYXRvciYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBMaW5lSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KEVuZExpbmVJdGVyYXRvcikgY29uc3Qg
eyByZXR1cm4gYXRFbmQoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IhPShFbmRMaW5lSXRlcmF0b3Ip
IGNvbnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9CkBAIC05OCwyMCArOTksMzggQEAgaW5saW5lIFBh
dGhMaW5lOjpQYXRoTGluZShQYXRoVmFyaWFudCYmIHBhdGgpCiB7CiB9CiAKLWlubGluZSBGbG9h
dFJlY3QgUGF0aExpbmU6OnJlY3QoKSBjb25zdAoraW5saW5lIExheW91dFVuaXQgUGF0aExpbmU6
OnRvcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwg
W10oY29uc3QgYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC50b3AoKTsKKyAgICB9
KTsKK30KKworaW5saW5lIExheW91dFVuaXQgUGF0aExpbmU6OmJvdHRvbSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0
aCkgeworICAgICAgICByZXR1cm4gcGF0aC50b3AoKTsKKyAgICB9KTsKK30KKworaW5saW5lIExh
eW91dFVuaXQgUGF0aExpbmU6OnNlbGVjdGlvblRvcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICByZXR1
cm4gcGF0aC5yZWN0KCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwg
W10oY29uc3QgYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5zZWxlY3Rpb25Ub3Ao
KTsKICAgICB9KTsKIH0KIAotaW5saW5lIGJvb2wgUGF0aExpbmU6Om9wZXJhdG9yPT0oY29uc3Qg
UGF0aExpbmUmIG90aGVyKSBjb25zdAoraW5saW5lIExheW91dFVuaXQgUGF0aExpbmU6OnNlbGVj
dGlvblRvcEZvckhpdFRlc3RpbmcoKSBjb25zdAogewotICAgIGlmIChtX3BhdGhWYXJpYW50Lmlu
ZGV4KCkgIT0gb3RoZXIubV9wYXRoVmFyaWFudC5pbmRleCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0
byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5zZWxlY3Rpb25Ub3BGb3JIaXRUZXN0aW5n
KCk7CisgICAgfSk7Cit9CiAKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50
LCBbJl0oY29uc3QgYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aCA9PSBXVEY6Omdl
dDxzdGQ6OmRlY2F5X3Q8ZGVjbHR5cGUocGF0aCk+PihvdGhlci5tX3BhdGhWYXJpYW50KTsKK2lu
bGluZSBMYXlvdXRVbml0IFBhdGhMaW5lOjpzZWxlY3Rpb25Cb3R0b20oKSBjb25zdAoreworICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgp
IHsKKyAgICAgICAgcmV0dXJuIHBhdGguc2VsZWN0aW9uQm90dG9tKCk7CiAgICAgfSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaAppbmRl
eCBiYTdjODFhYjhmYWMuLjFmOWY5NmIwZTc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yTGVnYWN5UGF0
aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3Jh
dGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaApAQCAtNDMsNyArNDMsMTEgQEAgcHVibGljOgog
ICAgIExlZ2FjeUxpbmVQYXRoJiBvcGVyYXRvcj0oY29uc3QgTGVnYWN5TGluZVBhdGgmKSA9IGRl
ZmF1bHQ7CiAgICAgTGVnYWN5TGluZVBhdGgmIG9wZXJhdG9yPShMZWdhY3lMaW5lUGF0aCYmKSA9
IGRlZmF1bHQ7CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElu
bGluZUJveC0+ZnJhbWVSZWN0KCk7IH0KKyAgICBMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0
dXJuIG1fcm9vdElubGluZUJveC0+bGluZVRvcCgpOyB9CisgICAgTGF5b3V0VW5pdCBib3R0b20o
KSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmxpbmVCb3R0b20oKTsgfQorICAgIExh
eW91dFVuaXQgc2VsZWN0aW9uVG9wKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5z
ZWxlY3Rpb25Ub3AoKTsgfQorICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wRm9ySGl0VGVzdGlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+c2VsZWN0aW9uVG9wKFJvb3RJbmxp
bmVCb3g6OkZvckhpdFRlc3Rpbmc6Olllcyk7IH0KKyAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJv
dHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+c2VsZWN0aW9uQm90dG9tKCk7
IH0KIAogICAgIHZvaWQgdHJhdmVyc2VOZXh0KCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JN
b2Rlcm5QYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmgKaW5kZXggMGJhZTc5NGQ4ZjQzLi45OWUz
YmM1NzYxM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvck1vZGVyblBhdGguaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rl
cm5QYXRoLmgKQEAgLTQ3LDcgKzQ3LDExIEBAIHB1YmxpYzoKICAgICBNb2Rlcm5MaW5lUGF0aCYg
b3BlcmF0b3I9KGNvbnN0IE1vZGVybkxpbmVQYXRoJikgPSBkZWZhdWx0OwogICAgIE1vZGVybkxp
bmVQYXRoJiBvcGVyYXRvcj0oTW9kZXJuTGluZVBhdGgmJikgPSBkZWZhdWx0OwogCi0gICAgRmxv
YXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiB2ZXJ0aWNhbGx5Um91bmRlZFJlY3QobGluZSgp
LnJlY3QoKSk7IH0KKyAgICBMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFVu
aXQ6OmZyb21GbG9hdFJvdW5kKGxpbmUoKS5yZWN0KCkueSgpKTsgfQorICAgIExheW91dFVuaXQg
Ym90dG9tKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Um91bmQobGluZSgp
LnJlY3QoKS5tYXhZKCkpOyB9CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AoKSBjb25zdCB7
IHJldHVybiB0b3AoKTsgfQorICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wRm9ySGl0VGVzdGlu
ZygpIGNvbnN0IHsgcmV0dXJuIHRvcCgpOyB9CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0
b20oKSBjb25zdCB7IHJldHVybiBib3R0b20oKTsgfQogCiAgICAgdm9pZCB0cmF2ZXJzZU5leHQo
KQogICAgIHsKQEAgLTU5LDcgKzYzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHRyYXZlcnNlUHJl
dmlvdXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFhdEVuZCgpKTsKLSAgICAgICAgQVNTRVJU
KG1fbGluZUluZGV4KTsKKworICAgICAgICBpZiAoIW1fbGluZUluZGV4KSB7CisgICAgICAgICAg
ICBzZXRBdEVuZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAg
LS1tX2xpbmVJbmRleDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaAppbmRl
eCBiMDdkZTA0ZjA4OTAuLjczZmRiNmJhNmU1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvci5oCkBAIC0xMTEsNiArMTExLDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxvY2FsRW5k
T2Zmc2V0KCkgY29uc3Q7CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKKyAgICB1bnNp
Z25lZCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4KSBjb25zdDsKKwogICAgIGJvb2wgaXNMYXN0
VGV4dFJ1bk9uTGluZSgpIGNvbnN0OwogICAgIGJvb2wgaXNMYXN0VGV4dFJ1bigpIGNvbnN0Owog
CkBAIC0zMzQsNiArMzM2LDEzIEBAIGlubGluZSB1bnNpZ25lZCBQYXRoVGV4dFJ1bjo6bGVuZ3Ro
KCkgY29uc3QKICAgICB9KTsKIH0KIAoraW5saW5lIHVuc2lnbmVkIFBhdGhUZXh0UnVuOjpvZmZz
ZXRGb3JQb3NpdGlvbihmbG9hdCB4KSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG1fcGF0aFZhcmlhbnQsIFsmXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLm9m
ZnNldEZvclBvc2l0aW9uKHgpOworICAgIH0pOworfQorCiBpbmxpbmUgYm9vbCBQYXRoVGV4dFJ1
bjo6aXNMYXN0VGV4dFJ1bk9uTGluZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdh
Y3lQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25SdW5JdGVyYXRvckxlZ2FjeVBhdGguaAppbmRleCBjMzlmNmQwMzEwZWYuLjVmMDQ3NTc4
MmEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRo
LmgKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgY2hhciBiaWRpTGV2
ZWwoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+YmlkaUxldmVsKCk7IH0KIAorCiAgICAg
Ym9vbCB1c2VMaW5lQnJlYWtCb3hSZW5kZXJUcmVlRHVtcFF1aXJrKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiAhbV9pbmxpbmVCb3gtPmJlaGF2ZXNMaWtlVGV4dCgpOwpAQCAtNjUsNiAr
NjYsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbG9jYWxFbmRPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBpbmxpbmVUZXh0Qm94KCktPmVuZCgpOyB9CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5sZW4oKTsgfQogCisgICAgaW5saW5lIHVuc2ln
bmVkIG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRC
b3goKS0+b2Zmc2V0Rm9yUG9zaXRpb24oeCk7IH0KKwogICAgIGJvb2wgaXNMYXN0VGV4dFJ1bk9u
TGluZSgpIGNvbnN0CiAgICAgewogICAgICAgICBhdXRvKiBuZXh0ID0gbmV4dElubGluZVRleHRC
b3hJblRleHRPcmRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1v
ZGVyblBhdGguaAppbmRleCAyYjc2Y2UxZDg1YzQuLjYxMTY1MTE2ZWZiMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRl
cmF0b3JNb2Rlcm5QYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmgKQEAgLTI3LDYgKzI3LDcg
QEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjIsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIHJ1bigpLmlzTGluZUJyZWFrKCk7IH0K
IAogICAgIHVuc2lnbmVkIG1pbmltdW1DYXJldE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzVGV4
dCgpID8gbG9jYWxTdGFydE9mZnNldCgpIDogMDsgfQotICAgIHVuc2lnbmVkIG1heGltdW1DYXJl
dE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzVGV4dCgpID8gbG9jYWxTdGFydE9mZnNldCgpIDog
MTsgfQorICAgIHVuc2lnbmVkIG1heGltdW1DYXJldE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlz
VGV4dCgpID8gbG9jYWxFbmRPZmZzZXQoKSA6IDE7IH0KIAogICAgIHVuc2lnbmVkIGNoYXIgYmlk
aUxldmVsKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCkBAIC04MCw2ICs4MSwzMSBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgbG9jYWxFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBydW4oKS50ZXh0
Q29udGVudCgpLT5lbmQoKTsgfQogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IHJ1bigpLnRleHRDb250ZW50KCktPmxlbmd0aCgpOyB9CiAKKyAgICBpbmxpbmUgdW5zaWduZWQg
b2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0xp
bmVCcmVhaygpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGF1dG8gcmVjdCA9IHRo
aXMtPnJlY3QoKTsKKyAgICAgICAgYXV0byBsb2NhbFggPSB4IC0gcmVjdC54KCk7CisgICAgICAg
IGlmIChsb2NhbFggPiByZWN0LndpZHRoKCkpCisgICAgICAgICAgICByZXR1cm4gbGVuZ3RoKCk7
CisgICAgICAgIGlmIChsb2NhbFggPCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAg
ICAgYXV0byYgc3R5bGUgPSBydW4oKS5zdHlsZSgpOworCisgICAgICAgIGF1dG8gY3JlYXRlVGV4
dFJ1biA9IFsmXSB7CisgICAgICAgICAgICBhdXRvIGV4cGFuc2lvbiA9IHJ1bigpLmV4cGFuc2lv
bigpOworICAgICAgICAgICAgYXV0byB4UG9zID0gcmVjdC54KCkgLSAobGluZSgpLnJlY3QoKS54
KCkgKyBsaW5lKCkuaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCgpKTsKKyAgICAgICAgICAgIFRl
eHRSdW4gdGV4dFJ1biB7IHRleHQoKSwgeFBvcywgZXhwYW5zaW9uLmhvcml6b250YWxFeHBhbnNp
b24sIGV4cGFuc2lvbi5iZWhhdmlvciB9OworICAgICAgICAgICAgdGV4dFJ1bi5zZXRUYWJTaXpl
KCFzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0ZXh0UnVuOworICAgICAgICB9OworCisgICAgICAgIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMgPSB0cnVlOworICAgICAgICByZXR1cm4gcnVuKCkuc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLm9mZnNldEZvclBvc2l0aW9uKGNyZWF0ZVRleHRSdW4oKSwgbG9jYWxYLCBpbmNsdWRl
UGFydGlhbEdseXBocyk7CisgICAgfQorCiAgICAgYm9vbCBpc0xhc3RUZXh0UnVuT25MaW5lKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0xhc3RUZXh0UnVuKCkpCkBAIC0xMzgsNyArMTY0
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFhdEVuZCgpKTsKLSAgICAgICAgQVNTRVJUKG1fcnVuSW5kZXgpOwor
CisgICAgICAgIGlmICghbV9ydW5JbmRleCkgeworICAgICAgICAgICAgc2V0QXRFbmQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIGF1dG8gb2xkTGluZUluZGV4
ID0gcnVuKCkubGluZUluZGV4KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAppbmRleCAxOTJkNjJiYWNhNDQuLjdkY2ZiZjQyYmM2MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxQ
YXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgogI2luY2x1ZGUgIklubGlu
ZVRleHRCb3guaCIKKyNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSYW5n
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCkBAIC00NTIsMTAgKzQ1MywxODQgQEAgUG9z
aXRpb24gUmVuZGVyVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9p
bnQpCiAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpLmRlZXBFcXVp
dmFsZW50KCk7CiB9CiAKK2VudW0gU2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0geyBBbHdheXNE
b3duc3RyZWFtLCBBbHdheXNVcHN0cmVhbSwgVXBzdHJlYW1JZlBvc2l0aW9uSXNOb3RBdFN0YXJ0
IH07CisKK3N0YXRpYyBib29sIGxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveChpbnQgcG9pbnRM
aW5lRGlyZWN0aW9uLCBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yJiB0
ZXh0UnVuLCBTaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSYgc2hvdWxkQWZmaW5pdHlCZURvd25z
dHJlYW0pCit7CisgICAgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0gPSBBbHdheXNEb3duc3Ry
ZWFtOworCisgICAgLy8gdGhlIHggY29vcmRpbmF0ZSBpcyBlcXVhbCB0byB0aGUgbGVmdCBlZGdl
IG9mIHRoaXMgYm94CisgICAgLy8gdGhlIGFmZmluaXR5IG11c3QgYmUgZG93bnN0cmVhbSBzbyB0
aGUgcG9zaXRpb24gZG9lc24ndCBqdW1wIGJhY2sgdG8gdGhlIHByZXZpb3VzIGxpbmUKKyAgICAv
LyBleGNlcHQgd2hlbiBib3ggaXMgdGhlIGZpcnN0IGJveCBpbiB0aGUgbGluZQorICAgIGlmIChw
b2ludExpbmVEaXJlY3Rpb24gPD0gdGV4dFJ1bi0+bG9naWNhbExlZnQoKSkgeworICAgICAgICBz
aG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSA9ICF0ZXh0UnVuLnByZXZpb3VzT25MaW5lKCkgPyBV
cHN0cmVhbUlmUG9zaXRpb25Jc05vdEF0U3RhcnQgOiBBbHdheXNEb3duc3RyZWFtOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAv
LyBhbmQgdGhlIHggY29vcmRpbmF0ZSBpcyB0byB0aGUgbGVmdCBvZiB0aGUgcmlnaHQgZWRnZSBv
ZiB0aGlzIGJveAorICAgIC8vIGNoZWNrIHRvIHNlZSBpZiBwb3NpdGlvbiBnb2VzIGluIHRoaXMg
Ym94CisgICAgaWYgKHBvaW50TGluZURpcmVjdGlvbiA8IHRleHRSdW4tPmxvZ2ljYWxSaWdodCgp
KSB7CisgICAgICAgIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtID0gVXBzdHJlYW1JZlBvc2l0
aW9uSXNOb3RBdFN0YXJ0OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKwor
ICAgIC8vIGJveCBpcyBmaXJzdCBvbiBsaW5lCisgICAgLy8gYW5kIHRoZSB4IGNvb3JkaW5hdGUg
aXMgdG8gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IHRleHQgYm94IGxlZnQgZWRnZQorICAgIGlmICgh
dGV4dFJ1bi5wcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkgJiYgcG9pbnRMaW5lRGly
ZWN0aW9uIDwgdGV4dFJ1bi0+bG9naWNhbExlZnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoIXRleHRSdW4ubmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkpIHsKKyAgICAg
ICAgLy8gYm94IGlzIGxhc3Qgb24gbGluZQorICAgICAgICAvLyBhbmQgdGhlIHggY29vcmRpbmF0
ZSBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIGxhc3QgdGV4dCBib3ggcmlnaHQgZWRnZQorICAgICAg
ICAvLyBnZW5lcmF0ZSBWaXNpYmxlUG9zaXRpb24sIHVzZSBBZmZpbml0eTo6VXBzdHJlYW0gYWZm
aW5pdHkgaWYgcG9zc2libGUKKyAgICAgICAgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0gPSBV
cHN0cmVhbUlmUG9zaXRpb25Jc05vdEF0U3RhcnQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIFZpc2libGVQb3NpdGlvbiBjcmVh
dGVWaXNpYmxlUG9zaXRpb25Gb3JCb3goY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJh
dG9yJiBydW4sIHVuc2lnbmVkIG9mZnNldCwgU2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0gc2hv
dWxkQWZmaW5pdHlCZURvd25zdHJlYW0pCit7CisgICAgYXV0byBhZmZpbml0eSA9IFZpc2libGVQ
b3NpdGlvbjo6ZGVmYXVsdEFmZmluaXR5OworICAgIHN3aXRjaCAoc2hvdWxkQWZmaW5pdHlCZURv
d25zdHJlYW0pIHsKKyAgICBjYXNlIEFsd2F5c0Rvd25zdHJlYW06CisgICAgICAgIGFmZmluaXR5
ID0gQWZmaW5pdHk6OkRvd25zdHJlYW07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWx3YXlz
VXBzdHJlYW06CisgICAgICAgIGFmZmluaXR5ID0gQWZmaW5pdHk6OlVwc3RyZWFtOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFVwc3RyZWFtSWZQb3NpdGlvbklzTm90QXRTdGFydDoKKyAgICAg
ICAgYWZmaW5pdHkgPSBvZmZzZXQgPiBydW4tPm1pbmltdW1DYXJldE9mZnNldCgpID8gQWZmaW5p
dHk6OlVwc3RyZWFtIDogQWZmaW5pdHk6OkRvd25zdHJlYW07CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICByZXR1cm4gcnVuLT5yZW5kZXJlcigpLmNyZWF0ZVZpc2libGVQb3NpdGlvbihvZmZz
ZXQsIGFmZmluaXR5KTsKK30KKworc3RhdGljIFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxl
UG9zaXRpb25BZnRlckFkanVzdGluZ09mZnNldEZvckJpRGkoY29uc3QgTGF5b3V0SW50ZWdyYXRp
b246OlRleHRSdW5JdGVyYXRvciYgcnVuLCB1bnNpZ25lZCBvZmZzZXQsIFNob3VsZEFmZmluaXR5
QmVEb3duc3RyZWFtIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKQoreworICAgIEFTU0VSVChv
ZmZzZXQgPj0gMCk7CisKKyAgICBpZiAob2Zmc2V0ICYmIG9mZnNldCA8IHJ1bi0+bGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3gocnVuLCBydW4tPmxv
Y2FsU3RhcnRPZmZzZXQoKSArIG9mZnNldCwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOwor
CisgICAgYm9vbCBwb3NpdGlvbklzQXRTdGFydE9mQm94ID0gIW9mZnNldDsKKyAgICBpZiAocG9z
aXRpb25Jc0F0U3RhcnRPZkJveCA9PSBydW4tPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewor
ICAgICAgICAvLyBvZmZzZXQgaXMgb24gdGhlIGxlZnQgZWRnZQorCisgICAgICAgIGF1dG8gcHJl
dmlvdXNSdW4gPSBydW4ucHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOworICAgICAg
ICBpZiAoKHByZXZpb3VzUnVuICYmIHByZXZpb3VzUnVuLT5iaWRpTGV2ZWwoKSA9PSBydW4tPmJp
ZGlMZXZlbCgpKQorICAgICAgICAgICAgfHwgcnVuLT5yZW5kZXJlcigpLmNvbnRhaW5pbmdCbG9j
aygpLT5zdHlsZSgpLmRpcmVjdGlvbigpID09IHJ1bi0+ZGlyZWN0aW9uKCkpIC8vIEZJWE1FOiBs
ZWZ0IG9uIDEyQ0JBCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9y
Qm94KHJ1biwgcnVuLT5sZWZ0bW9zdENhcmV0T2Zmc2V0KCksIHNob3VsZEFmZmluaXR5QmVEb3du
c3RyZWFtKTsKKworICAgICAgICBpZiAocHJldmlvdXNSdW4gJiYgcHJldmlvdXNSdW4tPmJpZGlM
ZXZlbCgpID4gcnVuLT5iaWRpTGV2ZWwoKSkgeworICAgICAgICAgICAgLy8gZS5nLiBsZWZ0IG9m
IEIgaW4gYURDMTJCQWIKKyAgICAgICAgICAgIGF1dG8gbGVmdG1vc3RSdW4gPSBwcmV2aW91c1J1
bjsKKyAgICAgICAgICAgIGZvciAoOyBwcmV2aW91c1J1bjsgcHJldmlvdXNSdW4udHJhdmVyc2VQ
cmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
cHJldmlvdXNSdW4tPmJpZGlMZXZlbCgpIDw9IHJ1bi0+YmlkaUxldmVsKCkpCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGxlZnRtb3N0UnVuID0gcHJldmlvdXNS
dW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0
aW9uRm9yQm94KGxlZnRtb3N0UnVuLCBsZWZ0bW9zdFJ1bi0+cmlnaHRtb3N0Q2FyZXRPZmZzZXQo
KSwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFwcmV2aW91c1J1biB8fCBwcmV2aW91c1J1bi0+YmlkaUxldmVsKCkgPCBydW4tPmJpZGlMZXZl
bCgpKSB7CisgICAgICAgICAgICAvLyBlLmcuIGxlZnQgb2YgRCBpbiBhREMxMkJBYgorICAgICAg
ICAgICAgTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIHJpZ2h0bW9zdFJ1biA9IHJ1bjsK
KyAgICAgICAgICAgIGZvciAoYXV0byBuZXh0UnVuID0gcnVuLm5leHRPbkxpbmVJZ25vcmluZ0xp
bmVCcmVhaygpOyBuZXh0UnVuOyBuZXh0UnVuLnRyYXZlcnNlTmV4dE9uTGluZUlnbm9yaW5nTGlu
ZUJyZWFrKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobmV4dFJ1bi0+YmlkaUxldmVsKCkgPCBy
dW4tPmJpZGlMZXZlbCgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICByaWdodG1vc3RSdW4gPSBuZXh0UnVuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChyaWdodG1vc3RSdW4sCisgICAgICAg
ICAgICAgICAgcnVuLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByaWdodG1vc3RSdW4tPm1h
eGltdW1DYXJldE9mZnNldCgpIDogcmlnaHRtb3N0UnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKSwg
c2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChydW4sIHJ1bi0+cmlnaHRtb3N0Q2FyZXRPZmZz
ZXQoKSwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOworICAgIH0KKworICAgIGF1dG8gbmV4
dFJ1biA9IHJ1bi5uZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKKyAgICBpZiAoKG5leHRS
dW4gJiYgbmV4dFJ1bi0+YmlkaUxldmVsKCkgPT0gcnVuLT5iaWRpTGV2ZWwoKSkKKyAgICAgICAg
fHwgcnVuLT5yZW5kZXJlcigpLmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLmRpcmVjdGlvbigp
ID09IHJ1bi0+ZGlyZWN0aW9uKCkpCisgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRp
b25Gb3JCb3gocnVuLCBydW4tPnJpZ2h0bW9zdENhcmV0T2Zmc2V0KCksIHNob3VsZEFmZmluaXR5
QmVEb3duc3RyZWFtKTsKKworICAgIC8vIG9mZnNldCBpcyBvbiB0aGUgcmlnaHQgZWRnZQorICAg
IGlmIChuZXh0UnVuICYmIG5leHRSdW4tPmJpZGlMZXZlbCgpID4gcnVuLT5iaWRpTGV2ZWwoKSkg
eworICAgICAgICAvLyBlLmcuIHJpZ2h0IG9mIEMgaW4gYURDMTJCQWIKKyAgICAgICAgYXV0byBy
aWdodG1vc3RSdW4gPSBuZXh0UnVuOworICAgICAgICBmb3IgKDsgbmV4dFJ1bjsgbmV4dFJ1bi50
cmF2ZXJzZU5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpKSB7CisgICAgICAgICAgICBpZiAo
bmV4dFJ1bi0+YmlkaUxldmVsKCkgPD0gcnVuLT5iaWRpTGV2ZWwoKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHJpZ2h0bW9zdFJ1biA9IG5leHRSdW47CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94KHJpZ2h0bW9zdFJ1
biwgcmlnaHRtb3N0UnVuLT5sZWZ0bW9zdENhcmV0T2Zmc2V0KCksIHNob3VsZEFmZmluaXR5QmVE
b3duc3RyZWFtKTsKKyAgICB9CisKKyAgICBpZiAoIW5leHRSdW4gfHwgbmV4dFJ1bi0+YmlkaUxl
dmVsKCkgPCBydW4tPmJpZGlMZXZlbCgpKSB7CisgICAgICAgIC8vIGUuZy4gcmlnaHQgb2YgQSBp
biBhREMxMkJBYgorICAgICAgICBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3IgbGVmdG1v
c3RSdW4gPSBydW47CisgICAgICAgIGZvciAoYXV0byBwcmV2aW91c1J1biA9IHJ1bi5wcmV2aW91
c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7IHByZXZpb3VzUnVuOyBwcmV2aW91c1J1bi50cmF2
ZXJzZVByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAgaWYg
KHByZXZpb3VzUnVuLT5iaWRpTGV2ZWwoKSA8IHJ1bi0+YmlkaUxldmVsKCkpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBsZWZ0bW9zdFJ1biA9IHByZXZpb3VzUnVuOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChsZWZ0
bW9zdFJ1biwKKyAgICAgICAgICAgIHJ1bi0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbGVm
dG1vc3RSdW4tPm1pbmltdW1DYXJldE9mZnNldCgpIDogbGVmdG1vc3RSdW4tPm1heGltdW1DYXJl
dE9mZnNldCgpLCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7CisgICAgfQorCisgICAgcmV0
dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChydW4sIHJ1bi0+bGVmdG1vc3RDYXJldE9m
ZnNldCgpLCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7Cit9CisKKwogVmlzaWJsZVBvc2l0
aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
LCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopCiB7Ci0gICAgZW5zdXJlTGluZUJveGVz
KCk7Ci0gICAgcmV0dXJuIG1fbGluZUJveGVzLnBvc2l0aW9uRm9yUG9pbnQoKnRoaXMsIHBvaW50
KTsKKyAgICBhdXRvIGZpcnN0UnVuID0gTGF5b3V0SW50ZWdyYXRpb246OmZpcnN0VGV4dFJ1bkZv
cigqdGhpcyk7CisKKyAgICBpZiAoIWZpcnN0UnVuIHx8ICF0ZXh0KCkubGVuZ3RoKCkpCisgICAg
ICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgQWZmaW5pdHk6OkRvd25zdHJlYW0p
OworCisgICAgTGF5b3V0VW5pdCBwb2ludExpbmVEaXJlY3Rpb24gPSBmaXJzdFJ1bi0+aXNIb3Jp
em9udGFsKCkgPyBwb2ludC54KCkgOiBwb2ludC55KCk7CisgICAgTGF5b3V0VW5pdCBwb2ludEJs
b2NrRGlyZWN0aW9uID0gZmlyc3RSdW4tPmlzSG9yaXpvbnRhbCgpID8gcG9pbnQueSgpIDogcG9p
bnQueCgpOworICAgIGJvb2wgYmxvY2tzQXJlRmxpcHBlZCA9IHN0eWxlKCkuaXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKTsKKworICAgIExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0
b3IgbGFzdFJ1bjsKKyAgICBmb3IgKGF1dG8gcnVuID0gZmlyc3RSdW47IHJ1bjsgcnVuLnRyYXZl
cnNlTmV4dFRleHRSdW4oKSkgeworICAgICAgICBpZiAocnVuLT5pc0xpbmVCcmVhaygpICYmICFy
dW4ucHJldmlvdXNPbkxpbmUoKSAmJiBydW4ubmV4dE9uTGluZSgpICYmICFydW4ubmV4dE9uTGlu
ZSgpLT5pc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgcnVuLnRyYXZlcnNlTmV4dFRleHRSdW4o
KTsKKworICAgICAgICBhdXRvIGxpbmUgPSBydW4ubGluZSgpOworICAgICAgICBMYXlvdXRVbml0
IHRvcCA9IHN0ZDo6bWluKGxpbmUtPnNlbGVjdGlvblRvcEZvckhpdFRlc3RpbmcoKSwgbGluZS0+
dG9wKCkpOworICAgICAgICBpZiAocG9pbnRCbG9ja0RpcmVjdGlvbiA+IHRvcCB8fCAoIWJsb2Nr
c0FyZUZsaXBwZWQgJiYgcG9pbnRCbG9ja0RpcmVjdGlvbiA9PSB0b3ApKSB7CisgICAgICAgICAg
ICBMYXlvdXRVbml0IGJvdHRvbSA9IGxpbmUtPnNlbGVjdGlvbkJvdHRvbSgpOworICAgICAgICAg
ICAgaWYgKGF1dG8gbmV4dExpbmUgPSBsaW5lLm5leHQoKSkKKyAgICAgICAgICAgICAgICBib3R0
b20gPSBzdGQ6Om1pbihib3R0b20sIG5leHRMaW5lLT50b3AoKSk7CisKKyAgICAgICAgICAgIGlm
IChwb2ludEJsb2NrRGlyZWN0aW9uIDwgYm90dG9tIHx8IChibG9ja3NBcmVGbGlwcGVkICYmIHBv
aW50QmxvY2tEaXJlY3Rpb24gPT0gYm90dG9tKSkgeworICAgICAgICAgICAgICAgIFNob3VsZEFm
ZmluaXR5QmVEb3duc3RyZWFtIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtOworI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisgICAgICAgICAgICAgICAgaWYgKHBvaW50TGluZURpcmVjdGlvbiAh
PSBydW4tPmxvZ2ljYWxMZWZ0KCkgJiYgcG9pbnQueCgpIDwgcnVuLT5yZWN0KCkueCgpICsgcnVu
LT5sb2dpY2FsV2lkdGgoKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgaGFsZiA9IHJ1bi0+
cmVjdCgpLngoKSArIHJ1bi0+bG9naWNhbFdpZHRoKCkgLyAyOworICAgICAgICAgICAgICAgICAg
ICBhdXRvIGFmZmluaXR5ID0gcG9pbnQueCgpIDwgaGFsZiA/IEFmZmluaXR5OjpEb3duc3RyZWFt
IDogQWZmaW5pdHk6OlVwc3RyZWFtOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
VmlzaWJsZVBvc2l0aW9uKHJ1bi0+b2Zmc2V0Rm9yUG9zaXRpb24ocG9pbnRMaW5lRGlyZWN0aW9u
KSArIHJ1bi0+bG9jYWxTdGFydE9mZnNldCgpLCBhZmZpbml0eSk7CisgICAgICAgICAgICAgICAg
fQorI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKGxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJv
eChwb2ludExpbmVEaXJlY3Rpb24sIHJ1biwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJBZGp1
c3RpbmdPZmZzZXRGb3JCaURpKHJ1biwgcnVuLT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludExpbmVE
aXJlY3Rpb24pLCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgbGFzdFJ1biA9IHJ1bjsKKyAgICB9CisKKyAgICBpZiAobGFzdFJ1
bikgeworICAgICAgICBTaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSBzaG91bGRBZmZpbml0eUJl
RG93bnN0cmVhbTsKKyAgICAgICAgbGluZURpcmVjdGlvblBvaW50Rml0c0luQm94KHBvaW50TGlu
ZURpcmVjdGlvbiwgbGFzdFJ1biwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOworICAgICAg
ICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURp
KGxhc3RSdW4sIGxhc3RSdW4tPm9mZnNldEZvclBvc2l0aW9uKHBvaW50TGluZURpcmVjdGlvbikg
KyBsYXN0UnVuLT5sb2NhbFN0YXJ0T2Zmc2V0KCksIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFt
KTsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBBZmZpbml0eTo6
RG93bnN0cmVhbSk7CiB9CiAKIExheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3Qo
SW5saW5lQm94KiBpbmxpbmVCb3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBl
eHRyYVdpZHRoVG9FbmRPZkxpbmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dExpbmVCb3hlcy5jcHAKaW5kZXggYjU3Y2QwZWM2NTVmLi5iNzU2MzlhZmY4YjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAK
QEAgLTE3MCwxNzkgKzE3MCw2IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dExpbmVCb3hlczo6dmlz
dWFsT3ZlcmZsb3dCb3VuZGluZ0JveChjb25zdCBSZW5kZXJUZXh0JiByZW5kCiAgICAgcmV0dXJu
IHJlY3Q7CiB9CiAKLWVudW0gU2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0geyBBbHdheXNEb3du
c3RyZWFtLCBBbHdheXNVcHN0cmVhbSwgVXBzdHJlYW1JZlBvc2l0aW9uSXNOb3RBdFN0YXJ0IH07
Ci0KLXN0YXRpYyBib29sIGxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveChpbnQgcG9pbnRMaW5l
RGlyZWN0aW9uLCBjb25zdCBJbmxpbmVUZXh0Qm94JiBib3gsIFNob3VsZEFmZmluaXR5QmVEb3du
c3RyZWFtJiBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSkKLXsKLSAgICBzaG91bGRBZmZpbml0
eUJlRG93bnN0cmVhbSA9IEFsd2F5c0Rvd25zdHJlYW07Ci0KLSAgICAvLyB0aGUgeCBjb29yZGlu
YXRlIGlzIGVxdWFsIHRvIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhpcyBib3gKLSAgICAvLyB0aGUgYWZm
aW5pdHkgbXVzdCBiZSBkb3duc3RyZWFtIHNvIHRoZSBwb3NpdGlvbiBkb2Vzbid0IGp1bXAgYmFj
ayB0byB0aGUgcHJldmlvdXMgbGluZQotICAgIC8vIGV4Y2VwdCB3aGVuIGJveCBpcyB0aGUgZmly
c3QgYm94IGluIHRoZSBsaW5lCi0gICAgaWYgKHBvaW50TGluZURpcmVjdGlvbiA8PSBib3gubG9n
aWNhbExlZnQoKSkgewotICAgICAgICBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSA9ICFib3gu
cHJldmlvdXNMZWFmT25MaW5lKCkgPyBVcHN0cmVhbUlmUG9zaXRpb25Jc05vdEF0U3RhcnQgOiBB
bHdheXNEb3duc3RyZWFtOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAvLyBhbmQgdGhlIHggY29vcmRpbmF0ZSBpcyB0byB0aGUg
bGVmdCBvZiB0aGUgcmlnaHQgZWRnZSBvZiB0aGlzIGJveAotICAgIC8vIGNoZWNrIHRvIHNlZSBp
ZiBwb3NpdGlvbiBnb2VzIGluIHRoaXMgYm94Ci0gICAgaWYgKHBvaW50TGluZURpcmVjdGlvbiA8
IGJveC5sb2dpY2FsUmlnaHQoKSkgewotICAgICAgICBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVh
bSA9IFVwc3RyZWFtSWZQb3NpdGlvbklzTm90QXRTdGFydDsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBib3ggaXMgZmlyc3Qgb24gbGluZQotICAgIC8vIGFu
ZCB0aGUgeCBjb29yZGluYXRlIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCB0ZXh0IGJveCBs
ZWZ0IGVkZ2UKLSAgICBpZiAoIWJveC5wcmV2aW91c0xlYWZPbkxpbmVJZ25vcmluZ0xpbmVCcmVh
aygpICYmIHBvaW50TGluZURpcmVjdGlvbiA8IGJveC5sb2dpY2FsTGVmdCgpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghYm94Lm5leHRMZWFmT25MaW5lSWdub3JpbmdMaW5lQnJl
YWsoKSkgewotICAgICAgICAvLyBib3ggaXMgbGFzdCBvbiBsaW5lCi0gICAgICAgIC8vIGFuZCB0
aGUgeCBjb29yZGluYXRlIGlzIHRvIHRoZSByaWdodCBvZiB0aGUgbGFzdCB0ZXh0IGJveCByaWdo
dCBlZGdlCi0gICAgICAgIC8vIGdlbmVyYXRlIFZpc2libGVQb3NpdGlvbiwgdXNlIEFmZmluaXR5
OjpVcHN0cmVhbSBhZmZpbml0eSBpZiBwb3NzaWJsZQotICAgICAgICBzaG91bGRBZmZpbml0eUJl
RG93bnN0cmVhbSA9IFVwc3RyZWFtSWZQb3NpdGlvbklzTm90QXRTdGFydDsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgVmlzaWJs
ZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChjb25zdCBJbmxpbmVCb3gmIGJv
eCwgaW50IG9mZnNldCwgU2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0gc2hvdWxkQWZmaW5pdHlC
ZURvd25zdHJlYW0pCi17Ci0gICAgYXV0byBhZmZpbml0eSA9IFZpc2libGVQb3NpdGlvbjo6ZGVm
YXVsdEFmZmluaXR5OwotICAgIHN3aXRjaCAoc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pIHsK
LSAgICBjYXNlIEFsd2F5c0Rvd25zdHJlYW06Ci0gICAgICAgIGFmZmluaXR5ID0gQWZmaW5pdHk6
OkRvd25zdHJlYW07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWx3YXlzVXBzdHJlYW06Ci0g
ICAgICAgIGFmZmluaXR5ID0gQWZmaW5pdHk6OlVwc3RyZWFtOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFVwc3RyZWFtSWZQb3NpdGlvbklzTm90QXRTdGFydDoKLSAgICAgICAgYWZmaW5pdHkg
PSBvZmZzZXQgPiBib3guY2FyZXRNaW5PZmZzZXQoKSA/IEFmZmluaXR5OjpVcHN0cmVhbSA6IEFm
ZmluaXR5OjpEb3duc3RyZWFtOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGJv
eC5yZW5kZXJlcigpLmNyZWF0ZVZpc2libGVQb3NpdGlvbihvZmZzZXQsIGFmZmluaXR5KTsKLX0K
LQotc3RhdGljIFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxlUG9zaXRpb25BZnRlckFkanVz
dGluZ09mZnNldEZvckJpRGkoY29uc3QgSW5saW5lVGV4dEJveCYgYm94LCBpbnQgb2Zmc2V0LCBT
aG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSkKLXsK
LSAgICBBU1NFUlQob2Zmc2V0ID49IDApOwotCi0gICAgaWYgKG9mZnNldCAmJiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ob2Zmc2V0KSA8IGJveC5sZW4oKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVZp
c2libGVQb3NpdGlvbkZvckJveChib3gsIGJveC5zdGFydCgpICsgb2Zmc2V0LCBzaG91bGRBZmZp
bml0eUJlRG93bnN0cmVhbSk7Ci0KLSAgICBib29sIHBvc2l0aW9uSXNBdFN0YXJ0T2ZCb3ggPSAh
b2Zmc2V0OwotICAgIGlmIChwb3NpdGlvbklzQXRTdGFydE9mQm94ID09IGJveC5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpIHsKLSAgICAgICAgLy8gb2Zmc2V0IGlzIG9uIHRoZSBsZWZ0IGVkZ2UK
LQotICAgICAgICBjb25zdCBJbmxpbmVCb3gqIHByZXZCb3ggPSBib3gucHJldmlvdXNMZWFmT25M
aW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKLSAgICAgICAgaWYgKChwcmV2Qm94ICYmIHByZXZCb3gt
PmJpZGlMZXZlbCgpID09IGJveC5iaWRpTGV2ZWwoKSkKLSAgICAgICAgICAgIHx8IGJveC5yZW5k
ZXJlcigpLmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLmRpcmVjdGlvbigpID09IGJveC5kaXJl
Y3Rpb24oKSkgLy8gRklYTUU6IGxlZnQgb24gMTJDQkEKLSAgICAgICAgICAgIHJldHVybiBjcmVh
dGVWaXNpYmxlUG9zaXRpb25Gb3JCb3goYm94LCBib3guY2FyZXRMZWZ0bW9zdE9mZnNldCgpLCBz
aG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7Ci0KLSAgICAgICAgaWYgKHByZXZCb3ggJiYgcHJl
dkJveC0+YmlkaUxldmVsKCkgPiBib3guYmlkaUxldmVsKCkpIHsKLSAgICAgICAgICAgIC8vIGUu
Zy4gbGVmdCBvZiBCIGluIGFEQzEyQkFiCi0gICAgICAgICAgICBjb25zdCBJbmxpbmVCb3gqIGxl
ZnRtb3N0Qm94OwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGxlZnRtb3N0Qm94
ID0gcHJldkJveDsKLSAgICAgICAgICAgICAgICBwcmV2Qm94ID0gbGVmdG1vc3RCb3gtPnByZXZp
b3VzTGVhZk9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7Ci0gICAgICAgICAgICB9IHdoaWxlIChw
cmV2Qm94ICYmIHByZXZCb3gtPmJpZGlMZXZlbCgpID4gYm94LmJpZGlMZXZlbCgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3goKmxlZnRtb3N0Qm94LCBs
ZWZ0bW9zdEJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKSwgc2hvdWxkQWZmaW5pdHlCZURvd25z
dHJlYW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFwcmV2Qm94IHx8IHByZXZCb3gtPmJp
ZGlMZXZlbCgpIDwgYm94LmJpZGlMZXZlbCgpKSB7Ci0gICAgICAgICAgICAvLyBlLmcuIGxlZnQg
b2YgRCBpbiBhREMxMkJBYgotICAgICAgICAgICAgY29uc3QgSW5saW5lQm94KiByaWdodG1vc3RC
b3g7Ci0gICAgICAgICAgICBjb25zdCBJbmxpbmVCb3gqIG5leHRCb3ggPSAmYm94OwotICAgICAg
ICAgICAgZG8gewotICAgICAgICAgICAgICAgIHJpZ2h0bW9zdEJveCA9IG5leHRCb3g7Ci0gICAg
ICAgICAgICAgICAgbmV4dEJveCA9IHJpZ2h0bW9zdEJveC0+bmV4dExlYWZPbkxpbmVJZ25vcmlu
Z0xpbmVCcmVhaygpOwotICAgICAgICAgICAgfSB3aGlsZSAobmV4dEJveCAmJiBuZXh0Qm94LT5i
aWRpTGV2ZWwoKSA+PSBib3guYmlkaUxldmVsKCkpOwotICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZVZpc2libGVQb3NpdGlvbkZvckJveCgqcmlnaHRtb3N0Qm94LAotICAgICAgICAgICAgICAgIGJv
eC5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByaWdodG1vc3RCb3gtPmNhcmV0TWF4T2Zmc2V0
KCkgOiByaWdodG1vc3RCb3gtPmNhcmV0TWluT2Zmc2V0KCksIHNob3VsZEFmZmluaXR5QmVEb3du
c3RyZWFtKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRp
b25Gb3JCb3goYm94LCBib3guY2FyZXRSaWdodG1vc3RPZmZzZXQoKSwgc2hvdWxkQWZmaW5pdHlC
ZURvd25zdHJlYW0pOwotICAgIH0KLQotICAgIGNvbnN0IElubGluZUJveCogbmV4dEJveCA9IGJv
eC5uZXh0TGVhZk9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7Ci0gICAgaWYgKChuZXh0Qm94ICYm
IG5leHRCb3gtPmJpZGlMZXZlbCgpID09IGJveC5iaWRpTGV2ZWwoKSkKLSAgICAgICAgfHwgYm94
LnJlbmRlcmVyKCkuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gYm94
LmRpcmVjdGlvbigpKQotICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94
KGJveCwgYm94LmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCksIHNob3VsZEFmZmluaXR5QmVEb3duc3Ry
ZWFtKTsKLQotICAgIC8vIG9mZnNldCBpcyBvbiB0aGUgcmlnaHQgZWRnZQotICAgIGlmIChuZXh0
Qm94ICYmIG5leHRCb3gtPmJpZGlMZXZlbCgpID4gYm94LmJpZGlMZXZlbCgpKSB7Ci0gICAgICAg
IC8vIGUuZy4gcmlnaHQgb2YgQyBpbiBhREMxMkJBYgotICAgICAgICBjb25zdCBJbmxpbmVCb3gq
IHJpZ2h0bW9zdEJveDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgcmlnaHRtb3N0Qm94ID0g
bmV4dEJveDsKLSAgICAgICAgICAgIG5leHRCb3ggPSByaWdodG1vc3RCb3gtPm5leHRMZWFmT25M
aW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKLSAgICAgICAgfSB3aGlsZSAobmV4dEJveCAmJiBuZXh0
Qm94LT5iaWRpTGV2ZWwoKSA+IGJveC5iaWRpTGV2ZWwoKSk7Ci0gICAgICAgIHJldHVybiBjcmVh
dGVWaXNpYmxlUG9zaXRpb25Gb3JCb3goKnJpZ2h0bW9zdEJveCwgcmlnaHRtb3N0Qm94LT5jYXJl
dExlZnRtb3N0T2Zmc2V0KCksIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKLSAgICB9Ci0K
LSAgICBpZiAoIW5leHRCb3ggfHwgbmV4dEJveC0+YmlkaUxldmVsKCkgPCBib3guYmlkaUxldmVs
KCkpIHsKLSAgICAgICAgLy8gZS5nLiByaWdodCBvZiBBIGluIGFEQzEyQkFiCi0gICAgICAgIGNv
bnN0IElubGluZUJveCogbGVmdG1vc3RCb3g7Ci0gICAgICAgIGNvbnN0IElubGluZUJveCogcHJl
dkJveCA9ICZib3g7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGxlZnRtb3N0Qm94ID0gcHJl
dkJveDsKLSAgICAgICAgICAgIHByZXZCb3ggPSBsZWZ0bW9zdEJveC0+cHJldmlvdXNMZWFmT25M
aW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKLSAgICAgICAgfSB3aGlsZSAocHJldkJveCAmJiBwcmV2
Qm94LT5iaWRpTGV2ZWwoKSA+PSBib3guYmlkaUxldmVsKCkpOwotICAgICAgICByZXR1cm4gY3Jl
YXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94KCpsZWZ0bW9zdEJveCwKLSAgICAgICAgICAgIGJveC5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsZWZ0bW9zdEJveC0+Y2FyZXRNaW5PZmZzZXQoKSA6
IGxlZnRtb3N0Qm94LT5jYXJldE1heE9mZnNldCgpLCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVh
bSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChib3gs
IGJveC5jYXJldExlZnRtb3N0T2Zmc2V0KCksIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsK
LX0KLQotVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHRMaW5lQm94ZXM6OnBvc2l0aW9uRm9yUG9p
bnQoY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIsIGNvbnN0IExheW91dFBvaW50JiBwb2ludCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fZmlyc3QgfHwgIXJlbmRlcmVyLnRleHQoKS5sZW5ndGgoKSkK
LSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLmNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBBZmZpbml0
eTo6RG93bnN0cmVhbSk7Ci0KLSAgICBMYXlvdXRVbml0IHBvaW50TGluZURpcmVjdGlvbiA9IG1f
Zmlyc3QtPmlzSG9yaXpvbnRhbCgpID8gcG9pbnQueCgpIDogcG9pbnQueSgpOwotICAgIExheW91
dFVuaXQgcG9pbnRCbG9ja0RpcmVjdGlvbiA9IG1fZmlyc3QtPmlzSG9yaXpvbnRhbCgpID8gcG9p
bnQueSgpIDogcG9pbnQueCgpOwotICAgIGJvb2wgYmxvY2tzQXJlRmxpcHBlZCA9IHJlbmRlcmVy
LnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKTsKLQotICAgIElubGluZVRleHRC
b3gqIGxhc3RCb3ggPSBudWxscHRyOwotICAgIGZvciAoYXV0byogYm94ID0gbV9maXJzdDsgYm94
OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgaWYgKGJveC0+aXNMaW5lQnJl
YWsoKSAmJiAhYm94LT5wcmV2aW91c0xlYWZPbkxpbmUoKSAmJiBib3gtPm5leHRMZWFmT25MaW5l
KCkgJiYgIWJveC0+bmV4dExlYWZPbkxpbmUoKS0+aXNMaW5lQnJlYWsoKSkKLSAgICAgICAgICAg
IGJveCA9IGJveC0+bmV4dFRleHRCb3goKTsKLQotICAgICAgICBhdXRvJiByb290Qm94ID0gYm94
LT5yb290KCk7Ci0gICAgICAgIExheW91dFVuaXQgdG9wID0gc3RkOjptaW4ocm9vdEJveC5zZWxl
Y3Rpb25Ub3AoUm9vdElubGluZUJveDo6Rm9ySGl0VGVzdGluZzo6WWVzKSwgcm9vdEJveC5saW5l
VG9wKCkpOwotICAgICAgICBpZiAocG9pbnRCbG9ja0RpcmVjdGlvbiA+IHRvcCB8fCAoIWJsb2Nr
c0FyZUZsaXBwZWQgJiYgcG9pbnRCbG9ja0RpcmVjdGlvbiA9PSB0b3ApKSB7Ci0gICAgICAgICAg
ICBMYXlvdXRVbml0IGJvdHRvbSA9IHJvb3RCb3guc2VsZWN0aW9uQm90dG9tKCk7Ci0gICAgICAg
ICAgICBpZiAocm9vdEJveC5uZXh0Um9vdEJveCgpKQotICAgICAgICAgICAgICAgIGJvdHRvbSA9
IHN0ZDo6bWluKGJvdHRvbSwgcm9vdEJveC5uZXh0Um9vdEJveCgpLT5saW5lVG9wKCkpOwotCi0g
ICAgICAgICAgICBpZiAocG9pbnRCbG9ja0RpcmVjdGlvbiA8IGJvdHRvbSB8fCAoYmxvY2tzQXJl
RmxpcHBlZCAmJiBwb2ludEJsb2NrRGlyZWN0aW9uID09IGJvdHRvbSkpIHsKLSAgICAgICAgICAg
ICAgICBTaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVh
bTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICAgICAgICAgIGlmIChwb2ludExp
bmVEaXJlY3Rpb24gIT0gYm94LT5sb2dpY2FsTGVmdCgpICYmIHBvaW50LngoKSA8IGJveC0+eCgp
ICsgYm94LT5sb2dpY2FsV2lkdGgoKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgaGFsZiA9
IGJveC0+eCgpICsgYm94LT5sb2dpY2FsV2lkdGgoKSAvIDI7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gYWZmaW5pdHkgPSBwb2ludC54KCkgPCBoYWxmID8gQWZmaW5pdHk6OkRvd25zdHJlYW0g
OiBBZmZpbml0eTo6VXBzdHJlYW07Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJl
ci5jcmVhdGVWaXNpYmxlUG9zaXRpb24oYm94LT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludExpbmVE
aXJlY3Rpb24pICsgYm94LT5zdGFydCgpLCBhZmZpbml0eSk7Ci0gICAgICAgICAgICAgICAgfQot
I2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKGxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveChw
b2ludExpbmVEaXJlY3Rpb24sICpib3gsIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkFmdGVyQWRqdXN0
aW5nT2Zmc2V0Rm9yQmlEaSgqYm94LCBib3gtPm9mZnNldEZvclBvc2l0aW9uKHBvaW50TGluZURp
cmVjdGlvbiksIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBsYXN0Qm94ID0gYm94OwotICAgIH0KLQotICAgIGlmIChsYXN0Qm94
KSB7Ci0gICAgICAgIFNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtIHNob3VsZEFmZmluaXR5QmVE
b3duc3RyZWFtOwotICAgICAgICBsaW5lRGlyZWN0aW9uUG9pbnRGaXRzSW5Cb3gocG9pbnRMaW5l
RGlyZWN0aW9uLCAqbGFzdEJveCwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOwotICAgICAg
ICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURp
KCpsYXN0Qm94LCBsYXN0Qm94LT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludExpbmVEaXJlY3Rpb24p
ICsgbGFzdEJveC0+c3RhcnQoKSwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOwotICAgIH0K
LSAgICByZXR1cm4gcmVuZGVyZXIuY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIEFmZmluaXR5OjpE
b3duc3RyZWFtKTsKLX0KLQogdm9pZCBSZW5kZXJUZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25T
dGF0ZShSZW5kZXJUZXh0JiByZW5kZXJlciwgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBz
dGF0ZSkKIHsKICAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6
SW5zaWRlIHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVz
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oCmluZGV4
IDQ1OTQ5YTMxZDgzZi4uMDJkMzBhYjNjMGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmgKQEAgLTU2LDggKzU2LDYgQEAgcHVibGljOgogCiAg
ICAgSW5saW5lVGV4dEJveCogZmluZE5leHQoaW50IG9mZnNldCwgaW50JiBwb3NpdGlvbikgY29u
c3Q7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBSZW5kZXJU
ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKLQogICAgIHZvaWQgc2V0U2VsZWN0aW9u
U3RhdGUoUmVuZGVyVGV4dCYsIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUpOwogICAgIExh
eW91dFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBl
bmQpOwogICAgIHZvaWQgY29sbGVjdFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UodW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkIGVuZCwgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cyk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>