<?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>206479</bug_id>
          
          <creation_ts>2020-01-18 20:52:32 -0800</creation_ts>
          <short_desc>[LFC][IFC] Move away from placing individual InlineItems on the line</short_desc>
          <delta_ts>2020-01-19 08:02:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</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>1608511</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-01-18 20:52:32 -0800</bug_when>
    <thetext>to a more performant add and expand setup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608512</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-18 20:52:52 -0800</bug_when>
    <thetext>&lt;rdar://problem/58716223&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608521</commentid>
    <comment_count>2</comment_count>
      <attachid>388170</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-01-18 22:23:12 -0800</bug_when>
    <thetext>Created attachment 388170
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608539</commentid>
    <comment_count>3</comment_count>
      <attachid>388170</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-01-19 00:21:43 -0800</bug_when>
    <thetext>Comment on attachment 388170
Patch

Looks like http/tests/misc/acid3.html need rebasing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608540</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-01-19 00:22:10 -0800</bug_when>
    <thetext>Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608566</commentid>
    <comment_count>5</comment_count>
      <attachid>388186</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-01-19 06:31:38 -0800</bug_when>
    <thetext>Created attachment 388186
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608573</commentid>
    <comment_count>6</comment_count>
      <attachid>388186</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-19 08:02:06 -0800</bug_when>
    <thetext>Comment on attachment 388186
Patch

Clearing flags on attachment: 388186

Committed r254805: &lt;https://trac.webkit.org/changeset/254805&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608574</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-19 08:02:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388170</attachid>
            <date>2020-01-18 22:23:12 -0800</date>
            <delta_ts>2020-01-19 06:31:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206479-20200118222310.patch</filename>
            <type>text/plain</type>
            <size>66972</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDA2N2IxOTVhZmQ4YzFj
MmExYWZiMjFjOTRjZjRhZTkxZWQxOWIyNi4uZWNiNWJmODgyMGUyMGYyZjZlM2M2NGZkMTRhYzNh
ZmQ5ZDE5NmQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAyMC0wMS0xOCAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gTW92ZSBh
d2F5IGZyb20gcGxhY2luZyBpbmRpdmlkdWFsIElubGluZUl0ZW1zIG9uIHRoZSBsaW5lCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY0NzkKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE2MjIzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIDxkaXY+IHRleHQgY29udGVudCBhbmQgIG1vcmUgICAgPC9k
aXY+CisgICAgICAgIFsgXVt0ZXh0XVsgXVtjb250ZW50XVsgXVthbmRdWyAgXW1vcmVbICAgXQor
CisgICAgICAgIEluc3RlYWQgb2YgcGxhY2luZyBhbGwgdGhlc2UgXl4gaW5saW5lIGl0ZW1zIG9u
IHRoZSBsaW5lIChMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bikgYW5kIG1lcmdlIHRoZW0gYXQg
SW5saW5lQnVpbGRlcjo6Y2xvc2UoKSwKKyAgICAgICAgbGV0J3MgZXhwYW5kIGV4aXN0aW5nIHJ1
bnMoTGluZUJ1aWxkZXI6OlJ1bikgd2hlbiBwb3NzaWJsZSAoW3RleHQgY29udGVudCBhbmQgXVtt
b3JlXSkuCisgICAgICAgIFRoaXMgaGVscHMgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBjb25zdW1w
dGlvbiB3aGVuIHRoZSBsaW5lIGVuZHMgdXAgaGF2aW5nIG1hbnkgaW5saW5lIGl0bWVzIChlLmcu
IHdoaXRlLXNwYWNlOiBub3dyYXApLgorCisgICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rp
c3BsYXlSdW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQ6
OmV4cGFuZCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZSk6CisgICAgICAgICogbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpsaW5l
RGVzY2VudE5lZWRzQ29sbGFwc2luZyBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjph
bGlnbkNvbnRlbnRWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6Omp1c3RpZnlSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxk
ZXI6OmFsaWduSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OnJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjp2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29u
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjb2xsZWN0SGFu
Z2luZ0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFwcGVuZE5vbkJy
ZWFrYWJsZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFw
cGVuZElubGluZUNvbnRhaW5lckVuZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjphcHBlbmRUZXh0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCdWlsZGVyOjphcHBlbmROb25SZXBsYWNlZElubGluZUJveCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjphcHBlbmRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6aXNWaXN1YWxseU5vbkVtcHR5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVu
dDo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRkRnVsbHlUcmltbWFibGVD
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJs
ZVRyYWlsaW5nQ29udGVudDo6YWRkUGFydGlhbGx5VHJpbW1hYmxlQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6
OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFi
bGVUcmFpbGluZ0NvbnRlbnQ6OnJlbW92ZVBhcnRpYWxseVRyaW1tYWJsZUNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpSdW4pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjptX3RleHRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OlJ1bjo6ZXhwYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlJ1bjo6aGFzVHJhaWxpbmdMZXR0ZXJTcGFjaW5nIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6dHJhaWxpbmdMZXR0ZXJTcGFj
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6
cmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlJ1bjo6cmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6dmlzdWFsbHlDb2xsYXBzZVRyYWlsaW5n
V2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46
OmFkanVzdEV4cGFuc2lvbkJlaGF2aW9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OlJ1bjo6ZXhwYW5zaW9uQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpzZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Q29udGludW91c0Nv
bnRlbnQ6OmNhbklubGluZUl0ZW1SdW5CZUV4cGFuZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OkNvbnRpbnVvdXNDb250ZW50OjpDb250aW51b3Vz
Q29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpDb250aW51b3VzQ29udGVudDo6aXNFbGlnaWJsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpDb250aW51b3VzQ29udGVudDo6YXBwZW5k
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OkNvbnRp
bnVvdXNDb250ZW50OjpjbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
Om1faXNDb2xsYXBzZWRUb1Zpc3VhbGx5RW1wdHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpzaG91bGRQcmVzZXJ2ZUxlYWRpbmdDb250ZW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OnJldmVydCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpqdXN0aWZ5UnVucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFibGVU
cmFpbGluZ0NvbnRlbnQ6OmFwcGVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OnJlbW92ZVRyYWlsaW5n
UnVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6Oklu
bGluZUl0ZW1SdW46OklubGluZUl0ZW1SdW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6aXNUcmltbWFibGVXaGl0ZXNwYWNl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OklubGluZUl0ZW1SdW46Omhhc1RyYWlsaW5nTGV0dGVyU3BhY2luZyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjp0
cmFpbGluZ0xldHRlclNwYWNpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6c2V0Q29sbGFwc2VzVG9aZXJvQWR2
YW5jZVdpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxk
ZXI6OklubGluZUl0ZW1SdW46OnJlbW92ZVRyYWlsaW5nTGV0dGVyU3BhY2luZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjpo
YXNFbXB0eVRleHRDb250ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpsb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpzaHJpbmtIb3Jpem9udGFsbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjphZGp1c3RMb2dpY2FsVG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFzVHJhaWxp
bmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxk
ZXI6OlJ1bjo6aGFzQ29sbGFwc2libGVUcmFpbGluZ1doaXRlc3BhY2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpoYXNDb2xsYXBzZWRUcmFpbGlu
Z1doaXRlc3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRl
cjo6UnVuOjp0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OndpZHRoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRy
YWlsaW5nQ29udGVudDo6aXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVu
dDo6aXNUcmFpbGluZ1J1blBhcnRpYWxseVRyaW1tYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6dHJhaWxpbmdX
aGl0ZXNwYWNlVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWls
ZGVyOjpSdW46OmlzQ29sbGFwc2VkVG9WaXN1YWxseUVtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46OmxheW91
dEJveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWls
ZGVyOjpJbmxpbmVJdGVtUnVuOjpzdHlsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjpsb2dpY2FsTGVmdCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxp
bmVJdGVtUnVuOjpsb2dpY2FsV2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6dGV4dENvbnRleHQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6SW5saW5l
SXRlbVJ1bjo6aXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46OmlzQm94IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46OmlzQ29u
dGFpbmVyU3RhcnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6aXNDb250YWluZXJFbmQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6
aXNMaW5lQnJlYWsgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjppc0NvbGxhcHNl
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpJbmxpbmVJdGVtUnVuOjptb3ZlSG9yaXpvbnRhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46OmFkanVzdExvZ2ljYWxX
aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJ
bmxpbmVJdGVtUnVuOjppc0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVu
Ojppc0NvbGxhcHNpYmxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46OmlzV2hpdGVzcGFjZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVu
OjpoYXNFeHBhbnNpb25PcHBvcnR1bml0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjpvcGVyYXRvcj09IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OklubGlu
ZUl0ZW1SdW46Om9wZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50OjpmaXJzdFJ1bklu
ZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5
b3V0Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250
ZXh0OjpsYXlvdXRMaW5lKToKKwogMjAyMC0wMS0xOCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNTQ3OTApOiBVcGRhdGUgRGVyaXZl
ZFNvdXJjZXMte2lucHV0LG91dHB1dH0ueGNmaWxlbGlzdCB0byBmaXggYnVpbGQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJ1bi5oCmluZGV4IGI3NTViMDlj
ZTRlNWU1NTQyZmY4MWQwZDYwZmYyOTg2MTZhZGJmY2EuLjZlY2QzZDM4N2IyNDM2NmQ5NzQxNzI2
NGI2MmRlZmY4OTIzNTkzOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNw
bGF5dHJlZS9EaXNwbGF5UnVuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0
cmVlL0Rpc3BsYXlSdW4uaApAQCAtNTIsNyArNTIsNyBAQCBzdHJ1Y3QgUnVuIHsKICAgICAgICAg
U3RyaW5nVmlldyBjb250ZW50KCkgY29uc3QgeyByZXR1cm4gU3RyaW5nVmlldyhtX2NvbnRlbnRT
dHJpbmcpLnN1YnN0cmluZyhtX3N0YXJ0LCBtX2xlbmd0aCk7IH0KIAogICAgICAgICBzdHJ1Y3Qg
RXhwYW5zaW9uQ29udGV4dCB7Ci0gICAgICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBiZWhhdmlv
cjsKKyAgICAgICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGJlaGF2aW9yIHsgRGVmYXVsdEV4cGFu
c2lvbiB9OwogICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBob3Jpem9udGFsRXhwYW5zaW9u
IHsgMCB9OwogICAgICAgICB9OwogICAgICAgICB2b2lkIHNldEV4cGFuc2lvbihFeHBhbnNpb25D
b250ZXh0IGV4cGFuc2lvbkNvbnRleHQpIHsgbV9leHBhbnNpb25Db250ZXh0ID0gZXhwYW5zaW9u
Q29udGV4dDsgfQpAQCAtNjAsNyArNjAsNyBAQCBzdHJ1Y3QgUnVuIHsKIAogICAgICAgICBib29s
IG5lZWRzSHlwaGVuKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0h5cGhlbjsgfQogCi0gICAgICAg
IHZvaWQgZXhwYW5kKHVuc2lnbmVkIGV4cGFuZGVkTGVuZ3RoKTsKKyAgICAgICAgdm9pZCBleHBh
bmQodW5zaWduZWQgZGVsdGEpIHsgbV9sZW5ndGggKz0gZGVsdGE7IH0KICAgICAgICAgdm9pZCBz
ZXROZWVkc0h5cGhlbigpIHsgbV9uZWVkc0h5cGhlbiA9IHRydWU7IH0KIAogICAgIHByaXZhdGU6
CkBAIC0xMzMsMTEgKzEzMyw2IEBAIGlubGluZSBSdW46OlRleHRDb250ZXh0OjpUZXh0Q29udGV4
dCh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpCiB7CiB9CiAKLWlu
bGluZSB2b2lkIFJ1bjo6VGV4dENvbnRleHQ6OmV4cGFuZCh1bnNpZ25lZCBleHBhbmRlZExlbmd0
aCkKLXsKLSAgICBtX2xlbmd0aCA9IGV4cGFuZGVkTGVuZ3RoOwotfQotCiB9CiB9CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCBiMmE1MzE4YjY0YjM3MzJh
MzE5ZDVlNDViNGFlNGVhZmZhNTc0OWRjLi43MzMzOTM4Y2Y3YWM3MzZlZDcwOGIxZTY3MjllNGVk
YTkxNmJhMThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC00ODUs
NyArNDg1LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVz
Rm9yTGluZShjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGkKIAogICAgICAgICAvLyBBZGQgZmlu
YWwgZGlzcGxheSBydW5zIHRvIHN0YXRlIGZpcnN0LgogICAgICAgICAvLyBJbmxpbmUgbGV2ZWwg
Y29udGFpbmVycyAoPHNwYW4+KSBkb24ndCBnZW5lcmF0ZSBkaXNwbGF5IHJ1bnMgYW5kIG5laXRo
ZXIgZG8gY29tcGxldGVseSBjb2xsYXBzZWQgcnVucy4KLSAgICAgICAgYXV0byBpbml0aWF0ZXNJ
bmxpbmVSdW4gPSAhbGluZVJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgJiYgIWxpbmVSdW4uaXNDb250
YWluZXJFbmQoKSAmJiAhbGluZVJ1bi5pc0NvbGxhcHNlZFRvVmlzdWFsbHlFbXB0eSgpOworICAg
ICAgICBhdXRvIGluaXRpYXRlc0lubGluZVJ1biA9ICFsaW5lUnVuLmlzQ29udGFpbmVyU3RhcnQo
KSAmJiAhbGluZVJ1bi5pc0NvbnRhaW5lckVuZCgpOwogICAgICAgICBpZiAoaW5pdGlhdGVzSW5s
aW5lUnVuKSB7CiAgICAgICAgICAgICBhdXRvIGNvbXB1dGVkSW5rT3ZlcmZsb3cgPSBbJl0gewog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm9uLXRleHQgaW5rIG92
ZXJmbG93LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmlu
ZGV4IDA4OTY5NzI1OTg4ZTg4Yjk3NDZkNjhiNjZmM2Y5MGRkYmE4OWU0MjQuLmUzNTFjNWVkYzQ4
ODZiMGU2Y2MxNzNiMDUwMzFjYTYyMjQ1ZTdhNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKQEAgLTQ5LDExICs0OSw4IEBAIGJvb2wgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bGluZURlc2NlbnROZWVkc0NvbGxhcHNpbmcoY29uc3Qg
TGluZUJ1aWxkCiAKICAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAocnVuLmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoIXJ1bi5pc0NvbGxhcHNlZFRvVmlzdWFsbHlFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisgICAgICAgIGlm
IChydW4uaXNUZXh0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChy
dW4uaXNDb250YWluZXJTdGFydCgpKSB7CiAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9
IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKICAgICAgICAg
ICAgIGlmIChib3hHZW9tZXRyeS5ob3Jpem9udGFsQm9yZGVyKCkgfHwgKGJveEdlb21ldHJ5Lmhv
cml6b250YWxQYWRkaW5nKCkgJiYgYm94R2VvbWV0cnkuaG9yaXpvbnRhbFBhZGRpbmcoKS52YWx1
ZSgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAppbmRleCBmZTY2M2FhNTllYTVlNWVkZTM4MTIy
ZTRkMTAxMTA2ZDQ2YzJmNTQyLi5kN2QzYjg4ZDU1ZTE1YzU4NTAwYTYxYjdjNWFjNzFlZTFkMTNh
YmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVMaW5lQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCkBAIC02NCwxMjkgKzY0LDkgQEAgdm9pZCBI
YW5naW5nQ29udGVudDo6cmVzZXQoKQogICAgIG1fd2lkdGggPSAgMDsKIH0KIAotc3RydWN0IExp
bmVCdWlsZGVyOjpDb250aW51b3VzQ29udGVudCB7Ci1wdWJsaWM6Ci0gICAgQ29udGludW91c0Nv
bnRlbnQoY29uc3QgSW5saW5lSXRlbVJ1biYsIGJvb2wgdGV4dElzQWxpZ25KdXN0aWZ5KTsKLQot
ICAgIGJvb2wgaXNFbGlnaWJsZShjb25zdCBJbmxpbmVJdGVtUnVuJikgY29uc3Q7Ci0gICAgdm9p
ZCBhcHBlbmQoY29uc3QgSW5saW5lSXRlbVJ1biYpOwotICAgIExpbmVCdWlsZGVyOjpSdW4gY2xv
c2UoKTsKLQotICAgIHN0YXRpYyBib29sIGNhbklubGluZUl0ZW1SdW5CZUV4cGFuZGVkKGNvbnN0
IElubGluZUl0ZW1SdW4mIHJ1bikgeyByZXR1cm4gcnVuLmlzVGV4dCgpICYmICFydW4uaXNDb2xs
YXBzZWQoKSAmJiAhcnVuLmlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoKCk7IH0KLQotcHJp
dmF0ZToKLSAgICBjb25zdCBJbmxpbmVJdGVtUnVuJiBtX2luaXRpYWxJbmxpbmVSdW47Ci0gICAg
Y29uc3QgYm9vbCBtX2NvbGxlY3RFeHBhbnNpb25PcHBvcnR1bml0aWVzIHsgZmFsc2UgfTsKLSAg
ICB1bnNpZ25lZCBtX2V4cGFuZGVkTGVuZ3RoIHsgMCB9OwotICAgIElubGluZUxheW91dFVuaXQg
bV9leHBhbmRlZFdpZHRoIHsgMCB9OwotICAgIGJvb2wgbV90cmFpbGluZ1J1bkNhbkJlRXhwYW5k
ZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX2hhc1RyYWlsaW5nRXhwYW5zaW9uT3Bwb3J0dW5pdHkg
eyBmYWxzZSB9OwotICAgIHVuc2lnbmVkIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCB7IDAg
fTsKLX07Ci0KLUxpbmVCdWlsZGVyOjpDb250aW51b3VzQ29udGVudDo6Q29udGludW91c0NvbnRl
bnQoY29uc3QgSW5saW5lSXRlbVJ1biYgaW5pdGlhbElubGluZVJ1biwgYm9vbCB0ZXh0SXNBbGln
bkp1c3RpZnkpCi0gICAgOiBtX2luaXRpYWxJbmxpbmVSdW4oaW5pdGlhbElubGluZVJ1bikKLSAg
ICAsIG1fY29sbGVjdEV4cGFuc2lvbk9wcG9ydHVuaXRpZXModGV4dElzQWxpZ25KdXN0aWZ5ICYm
ICFpc1doaXRlc3BhY2VQcmVzZXJ2ZWQobV9pbml0aWFsSW5saW5lUnVuLnN0eWxlKCkpKSAvLyBE
byBub3QgY29sbGVjdCBleHBhbnNpb24gZGF0YSBvbiBwcmVzZXJ2ZWQgd2hpdGVzcGFjZSBjb250
ZW50ICh3ZSBzaG91bGQgbm90IG11dGF0ZSB0aGUgc3BhY2luZyBiZXR3ZWVuIHJ1bnMgaW4gc3Vj
aCBjYXNlcykuCi17Ci0gICAgLy8gV2Ugc2hvdWxkIG5vdCBjcmVhdGUgYSBDb250aW51b3VzQ29u
dGVudCBvYmplY3Qgd2hlbiBldmVuIHRoZSBpbml0YWwgcnVuIGNhbiBub3QgYmUgZXhwYW5kZWQu
Ci0gICAgQVNTRVJUKGNhbklubGluZUl0ZW1SdW5CZUV4cGFuZGVkKGluaXRpYWxJbmxpbmVSdW4p
KTsKLX0KLQotYm9vbCBMaW5lQnVpbGRlcjo6Q29udGludW91c0NvbnRlbnQ6OmlzRWxpZ2libGUo
Y29uc3QgSW5saW5lSXRlbVJ1biYgaW5saW5lSXRlbVJ1bikgY29uc3QKLXsKLSAgICBpZiAoIW1f
dHJhaWxpbmdSdW5DYW5CZUV4cGFuZGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8g
T25seSBub24tY29sbGFwc2VkIHRleHQgcnVucyB3aXRoIHRoZSBzYW1lIGxheW91dCBib3ggY2Fu
IGJlIGFkZGVkIGFzIGNvbnRpbnVvdXMgY29udGVudC4KLSAgICByZXR1cm4gaW5saW5lSXRlbVJ1
bi5pc1RleHQoKSAmJiAhaW5saW5lSXRlbVJ1bi5pc0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0
aCgpICYmICZtX2luaXRpYWxJbmxpbmVSdW4ubGF5b3V0Qm94KCkgPT0gJmlubGluZUl0ZW1SdW4u
bGF5b3V0Qm94KCk7Ci19Ci0KLXZvaWQgTGluZUJ1aWxkZXI6OkNvbnRpbnVvdXNDb250ZW50Ojph
cHBlbmQoY29uc3QgSW5saW5lSXRlbVJ1biYgaW5saW5lSXRlbVJ1bikKLXsKLSAgICAvLyBNZXJn
ZWQgY29udGVudCBuZWVkcyB0byBiZSBjb250aW51b3VzLgotICAgIEFTU0VSVChpc0VsaWdpYmxl
KGlubGluZUl0ZW1SdW4pKTsKLSAgICBtX3RyYWlsaW5nUnVuQ2FuQmVFeHBhbmRlZCA9IGNhbklu
bGluZUl0ZW1SdW5CZUV4cGFuZGVkKGlubGluZUl0ZW1SdW4pOwotCi0gICAgQVNTRVJUKGlubGlu
ZUl0ZW1SdW4uaXNUZXh0KCkpOwotICAgIG1fZXhwYW5kZWRMZW5ndGggKz0gaW5saW5lSXRlbVJ1
bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKTsKLSAgICBtX2V4cGFuZGVkV2lkdGggKz0gaW5saW5l
SXRlbVJ1bi5sb2dpY2FsV2lkdGgoKTsKLQotICAgIGlmIChtX2NvbGxlY3RFeHBhbnNpb25PcHBv
cnR1bml0aWVzKSB7Ci0gICAgICAgIG1faGFzVHJhaWxpbmdFeHBhbnNpb25PcHBvcnR1bml0eSA9
IGlubGluZUl0ZW1SdW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKTsKLSAgICAgICAgaWYgKG1f
aGFzVHJhaWxpbmdFeHBhbnNpb25PcHBvcnR1bml0eSkKLSAgICAgICAgICAgICsrbV9leHBhbnNp
b25PcHBvcnR1bml0eUNvdW50OwotICAgIH0KLX0KLQotTGluZUJ1aWxkZXI6OlJ1biBMaW5lQnVp
bGRlcjo6Q29udGludW91c0NvbnRlbnQ6OmNsb3NlKCkKLXsKLSAgICBpZiAoIW1fZXhwYW5kZWRM
ZW5ndGgpCi0gICAgICAgIHJldHVybiB7IG1faW5pdGlhbElubGluZVJ1biB9OwotICAgIC8vIEV4
cGFuZCB0aGUgdGV4dCBjb250ZW50IGFuZCBzZXQgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0aWVz
LgotICAgIEFTU0VSVChtX2luaXRpYWxJbmxpbmVSdW4uaXNUZXh0KCkpOwotICAgIGF1dG8gdGV4
dENvbnRleHQgPSAqbV9pbml0aWFsSW5saW5lUnVuLnRleHRDb250ZXh0KCk7Ci0gICAgYXV0byBs
ZW5ndGggPSB0ZXh0Q29udGV4dC5sZW5ndGgoKSArIG1fZXhwYW5kZWRMZW5ndGg7Ci0gICAgdGV4
dENvbnRleHQuZXhwYW5kKGxlbmd0aCk7Ci0KLSAgICBpZiAobV9jb2xsZWN0RXhwYW5zaW9uT3Bw
b3J0dW5pdGllcykgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGV4
cGFuc2lvbiBtZXJnZS4gV2Ugc2hvdWxkIGV2ZW50dWFsbHkgc3dpdGNoIG92ZXIgdG8gRm9udENh
c2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQuCi0gICAgICAgIEV4cGFuc2lvbkJlaGF2
aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gbV9oYXNUcmFpbGluZ0V4cGFuc2lvbk9wcG9ydHVuaXR5
ID8gKEZvcmJpZExlYWRpbmdFeHBhbnNpb24gfCBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSA6IChB
bGxvd0xlYWRpbmdFeHBhbnNpb24gfCBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKTsKLSAgICAgICAg
aWYgKG1faW5pdGlhbElubGluZVJ1bi5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKQotICAgICAg
ICAgICAgKyttX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7Ci0gICAgICAgIHRleHRDb250ZXh0
LnNldEV4cGFuc2lvbih7IGV4cGFuc2lvbkJlaGF2aW9yLCB7IH0gfSk7Ci0gICAgfQotICAgIHJl
dHVybiB7IG1faW5pdGlhbElubGluZVJ1biwgIERpc3BsYXk6OklubGluZVJlY3QgeyAwX2x1LCBt
X2luaXRpYWxJbmxpbmVSdW4ubG9naWNhbExlZnQoKSwgbV9pbml0aWFsSW5saW5lUnVuLmxvZ2lj
YWxXaWR0aCgpICsgbV9leHBhbmRlZFdpZHRoLCAwX2x1IH0sIHRleHRDb250ZXh0LCBtX2V4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQgfTsKLX0KLQotTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNvbnN0
IElubGluZUl0ZW1SdW4mIGlubGluZUl0ZW1SdW4pCi0gICAgOiBtX2xheW91dEJveCgmaW5saW5l
SXRlbVJ1bi5sYXlvdXRCb3goKSkKLSAgICAsIG1fdHlwZShpbmxpbmVJdGVtUnVuLnR5cGUoKSkK
LSAgICAsIG1fbG9naWNhbFJlY3QoeyAwX2x1LCBpbmxpbmVJdGVtUnVuLmxvZ2ljYWxMZWZ0KCks
IGlubGluZUl0ZW1SdW4ubG9naWNhbFdpZHRoKCksIDBfbHUgfSkKLSAgICAsIG1fdGV4dENvbnRl
eHQoaW5saW5lSXRlbVJ1bi50ZXh0Q29udGV4dCgpKQotICAgICwgbV9pc0NvbGxhcHNlZFRvVmlz
dWFsbHlFbXB0eShpbmxpbmVJdGVtUnVuLmlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoKCkp
Ci17Ci0gICAgaWYgKGlubGluZUl0ZW1SdW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgewot
ICAgICAgICBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAxOwotICAgICAgICBBU1NFUlQo
bV90ZXh0Q29udGV4dCk7Ci0gICAgICAgIG1fdGV4dENvbnRleHQtPnNldEV4cGFuc2lvbih7IERl
ZmF1bHRFeHBhbnNpb24sIHsgfSB9KTsKLSAgICB9Ci19Ci0KLUxpbmVCdWlsZGVyOjpSdW46OlJ1
bihjb25zdCBJbmxpbmVJdGVtUnVuJiBpbmxpbmVJdGVtUnVuLCBjb25zdCBEaXNwbGF5OjpJbmxp
bmVSZWN0JiBsb2dpY2FsUmVjdCwgY29uc3QgRGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dCYgdGV4
dENvbnRleHQsIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCi0gICAgOiBtX2xh
eW91dEJveCgmaW5saW5lSXRlbVJ1bi5sYXlvdXRCb3goKSkKLSAgICAsIG1fdHlwZShpbmxpbmVJ
dGVtUnVuLnR5cGUoKSkKLSAgICAsIG1fbG9naWNhbFJlY3QobG9naWNhbFJlY3QpCi0gICAgLCBt
X3RleHRDb250ZXh0KHRleHRDb250ZXh0KQotICAgICwgbV9leHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCi0gICAgLCBtX2lzQ29sbGFwc2VkVG9WaXN1
YWxseUVtcHR5KGlubGluZUl0ZW1SdW4uaXNDb2xsYXBzZWRUb1plcm9BZHZhbmNlV2lkdGgoKSkK
LXsKLX0KLQotdm9pZCBMaW5lQnVpbGRlcjo6UnVuOjphZGp1c3RFeHBhbnNpb25CZWhhdmlvcihF
eHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKLXsKLSAgICBBU1NFUlQoaXNUZXh0
KCkpOwotICAgIEFTU0VSVChoYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKTsKLSAgICBtX3RleHRD
b250ZXh0LT5zZXRFeHBhbnNpb24oeyBleHBhbnNpb25CZWhhdmlvciwgbV90ZXh0Q29udGV4dC0+
ZXhwYW5zaW9uKCktPmhvcml6b250YWxFeHBhbnNpb24gfSk7Ci19Ci0KLWlubGluZSBPcHRpb25h
bDxFeHBhbnNpb25CZWhhdmlvcj4gTGluZUJ1aWxkZXI6OlJ1bjo6ZXhwYW5zaW9uQmVoYXZpb3Io
KSBjb25zdAotewotICAgIEFTU0VSVChpc1RleHQoKSk7Ci0gICAgaWYgKGF1dG8gZXhwYW5zaW9u
Q29udGV4dCA9IG1fdGV4dENvbnRleHQtPmV4cGFuc2lvbigpKQotICAgICAgICByZXR1cm4gZXhw
YW5zaW9uQ29udGV4dC0+YmVoYXZpb3I7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotdm9pZCBMaW5l
QnVpbGRlcjo6UnVuOjpzZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNpb24oSW5saW5lTGF5b3V0
VW5pdCBsb2dpY2FsRXhwYW5zaW9uKQotewotICAgIEFTU0VSVChpc1RleHQoKSk7Ci0gICAgQVNT
RVJUKGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpOwotICAgIG1fbG9naWNhbFJlY3QuZXhwYW5k
SG9yaXpvbnRhbGx5KGxvZ2ljYWxFeHBhbnNpb24pOwotICAgIG1fdGV4dENvbnRleHQtPnNldEV4
cGFuc2lvbih7IG1fdGV4dENvbnRleHQtPmV4cGFuc2lvbigpLT5iZWhhdmlvciwgbG9naWNhbEV4
cGFuc2lvbiB9KTsKLX0KLQogTGluZUJ1aWxkZXI6OkxpbmVCdWlsZGVyKGNvbnN0IElubGluZUZv
cm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgT3B0aW9uYWw8VGV4dEFs
aWduTW9kZT4gaG9yaXpvbnRhbEFsaWdubWVudCwgSW50cmluc2ljU2l6aW5nIGludHJpbnNpY1Np
emluZykKICAgICA6IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQpCi0gICAgLCBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudChtX2lubGluZUl0ZW1SdW5z
KQorICAgICwgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQobV9ydW5zKQogICAgICwgbV9ob3Jp
em9udGFsQWxpZ25tZW50KGhvcml6b250YWxBbGlnbm1lbnQpCiAgICAgLCBtX2lzSW50cmluc2lj
U2l6aW5nKGludHJpbnNpY1NpemluZyA9PSBJbnRyaW5zaWNTaXppbmc6OlllcykKICAgICAsIG1f
c2hvdWxkSWdub3JlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkubGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJs
ZWQoKSkKQEAgLTIxNiwxOSArOTYsMTEgQEAgdm9pZCBMaW5lQnVpbGRlcjo6aW5pdGlhbGl6ZShj
b25zdCBDb25zdHJhaW50cyYgY29uc3RyYWludHMpCiAgICAgbV9saW5lTG9naWNhbFdpZHRoID0g
Y29uc3RyYWludHMuYXZhaWxhYmxlTG9naWNhbFdpZHRoOwogICAgIG1faGFzSW50cnVzaXZlRmxv
YXQgPSBjb25zdHJhaW50cy5saW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQ7CiAKLSAgICBtX2lubGlu
ZUl0ZW1SdW5zLmNsZWFyKCk7CisgICAgbV9ydW5zLmNsZWFyKCk7CiAgICAgbV90cmltbWFibGVU
cmFpbGluZ0NvbnRlbnQucmVzZXQoKTsKICAgICBtX2xpbmVJc1Zpc3VhbGx5RW1wdHlCZWZvcmVU
cmltbWFibGVUcmFpbGluZ0NvbnRlbnQgPSB7IH07CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBz
aG91bGRQcmVzZXJ2ZUxlYWRpbmdDb250ZW50KGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVU
ZXh0SXRlbSkKLXsKLSAgICBpZiAoIWlubGluZVRleHRJdGVtLmlzV2hpdGVzcGFjZSgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBhdXRvIHdoaXRlc3BhY2UgPSBpbmxpbmVUZXh0SXRlbS5z
dHlsZSgpLndoaXRlU3BhY2UoKTsKLSAgICByZXR1cm4gd2hpdGVzcGFjZSA9PSBXaGl0ZVNwYWNl
OjpQcmUgfHwgd2hpdGVzcGFjZSA9PSBXaGl0ZVNwYWNlOjpQcmVXcmFwIHx8IHdoaXRlc3BhY2Ug
PT0gV2hpdGVTcGFjZTo6QnJlYWtTcGFjZXM7Ci19Ci0KIExpbmVCdWlsZGVyOjpSdW5MaXN0IExp
bmVCdWlsZGVyOjpjbG9zZShJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50KQogewogICAgIC8vIDEuIFJlbW92ZSB0cmltbWFibGUgdHJhaWxpbmcg
Y29udGVudC4KQEAgLTIzOCwyOCArMTEwLDggQEAgTGluZUJ1aWxkZXI6OlJ1bkxpc3QgTGluZUJ1
aWxkZXI6OmNsb3NlKElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2kKICAg
ICB2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpOwogICAgIGF1dG8gaGFu
Z2luZ0NvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoaXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KTsKIAotICAgIGF1dG8gbWVyZ2VkSW5saW5lSXRlbVJ1bnMgPSBbJl0gewotICAgICAg
ICBSdW5MaXN0IHJ1bkxpc3Q7Ci0gICAgICAgIHVuc2lnbmVkIHJ1bkluZGV4ID0gMDsKLSAgICAg
ICAgd2hpbGUgKHJ1bkluZGV4IDwgbV9pbmxpbmVJdGVtUnVucy5zaXplKCkpIHsKLSAgICAgICAg
ICAgIC8vIE1lcmdlIGVsaWdpYmxlIHJ1bnMuCi0gICAgICAgICAgICBhdXRvJiBpbmxpbmVJdGVt
UnVuID0gbV9pbmxpbmVJdGVtUnVuc1tydW5JbmRleF07Ci0gICAgICAgICAgICBpZiAoIUNvbnRp
bnVvdXNDb250ZW50OjpjYW5JbmxpbmVJdGVtUnVuQmVFeHBhbmRlZChpbmxpbmVJdGVtUnVuKSkg
ewotICAgICAgICAgICAgICAgIHJ1bkxpc3QuYXBwZW5kKHsgaW5saW5lSXRlbVJ1biB9KTsKLSAg
ICAgICAgICAgICAgICArK3J1bkluZGV4OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYXV0byBtZXJnZWRSdW5zID0gQ29udGludW91c0NvbnRl
bnQgeyBpbmxpbmVJdGVtUnVuLCBpc1RleHRBbGlnbkp1c3RpZnkoKSB9OwotICAgICAgICAgICAg
Zm9yIChydW5JbmRleCA9IHJ1bkluZGV4ICsgMTsgcnVuSW5kZXggPCBtX2lubGluZUl0ZW1SdW5z
LnNpemUoKSAmJiBtZXJnZWRSdW5zLmlzRWxpZ2libGUobV9pbmxpbmVJdGVtUnVuc1tydW5JbmRl
eF0pOyArK3J1bkluZGV4KQotICAgICAgICAgICAgICAgIG1lcmdlZFJ1bnMuYXBwZW5kKG1faW5s
aW5lSXRlbVJ1bnNbcnVuSW5kZXhdKTsKLSAgICAgICAgICAgIHJ1bkxpc3QuYXBwZW5kKG1lcmdl
ZFJ1bnMuY2xvc2UoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJ1bkxpc3Q7Ci0gICAg
fTsKLQotICAgIGF1dG8gcnVuTGlzdCA9IG1lcmdlZElubGluZUl0ZW1SdW5zKCk7CiAgICAgaWYg
KCFtX2lzSW50cmluc2ljU2l6aW5nKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcnVuIDogcnVuTGlz
dCkgeworICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgewogICAgICAgICAgICAgYWRq
dXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KHJ1bik7CiAgICAgICAgICAgICBydW4uc2V0TG9naWNh
bEhlaWdodChydW5Db250ZW50SGVpZ2h0KHJ1bikpOwogICAgICAgICB9CkBAIC0yNjgsNzcgKzEy
MCwyMSBAQCBMaW5lQnVpbGRlcjo6UnVuTGlzdCBMaW5lQnVpbGRlcjo6Y2xvc2UoSXNMYXN0TGlu
ZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaQogICAgICAgICAgICAgbV9saW5lQm94LnNl
dExvZ2ljYWxIZWlnaHQoMF9sdSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gUmVtb3ZlIGRlc2Nl
bnQgd2hlbiBhbGwgY29udGVudCBpcyBiYXNlbGluZSBhbGlnbmVkIGJ1dCBub25lIG9mIHRoZW0g
aGF2ZSBkZXNjZW50LgotICAgICAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5s
aW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhydW5MaXN0KSkgeworICAgICAgICBpZiAoZm9ybWF0
dGluZ0NvbnRleHQoKS5xdWlya3MoKS5saW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhtX3J1bnMp
KSB7CiAgICAgICAgICAgICBtX2xpbmVCb3guc2hyaW5rVmVydGljYWxseShtX2xpbmVCb3guYmFz
ZWxpbmUoKS5kZXNjZW50KCkpOwogICAgICAgICAgICAgbV9saW5lQm94LnJlc2V0RGVzY2VudCgp
OwogICAgICAgICB9Ci0gICAgICAgIGFsaWduQ29udGVudFZlcnRpY2FsbHkocnVuTGlzdCk7Ci0g
ICAgICAgIGFsaWduSG9yaXpvbnRhbGx5KHJ1bkxpc3QsIGhhbmdpbmdDb250ZW50LCBpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQpOwotICAgIH0KLSAgICByZXR1cm4gcnVuTGlzdDsKLX0KLQot
c2l6ZV90IExpbmVCdWlsZGVyOjpyZXZlcnQoY29uc3QgSW5saW5lSXRlbSYgcmV2ZXJ0VG8pCi17
Ci0gICAgaWYgKG1faW5saW5lSXRlbVJ1bnMubGFzdCgpID09IHJldmVydFRvKSB7Ci0gICAgICAg
IC8vIFNpbmNlIHRoZSBMaW5lQnJlYWtlciBkb2VzIG5vdCBrbm93IHdoYXQgaGFzIGJlZW4gcHVz
aGVkIG9uIHRoZSBjdXJyZW50IGxpbmUKLSAgICAgICAgLy8gaW4gc29tZSBjYXNlcyByZXZlcnQo
KSBpcyBjYWxsZWQgd2l0aCB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaW5lLgotICAgICAgICByZXR1
cm4geyB9OwotICAgIH0KLSAgICAvLyAxLiBSZW1vdmUgYW5kIHNocmluayB0aGUgdHJhaWxpbmcg
Y29udGVudC4KLSAgICAvLyAyLiBSZWJ1aWxkIHRyaW1tYWJsZSB0cmFpbGluZyB3aGl0ZXNwYWNl
IGNvbnRlbnQuCi0gICAgQVNTRVJUKCFtX2lubGluZUl0ZW1SdW5zLmlzRW1wdHkoKSk7Ci0gICAg
YXV0byByZXZlcnRlZFdpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgYXV0byBvcmln
aW5hbFNpemUgPSBtX2lubGluZUl0ZW1SdW5zLnNpemUoKTsKLSAgICBpbnQ2NF90IGluZGV4ID0g
c3RhdGljX2Nhc3Q8aW50NjRfdD4ob3JpZ2luYWxTaXplIC0gMSk7Ci0gICAgd2hpbGUgKGluZGV4
ID49IDAgJiYgbV9pbmxpbmVJdGVtUnVuc1tpbmRleF0gIT0gcmV2ZXJ0VG8pCi0gICAgICAgIHJl
dmVydGVkV2lkdGggKz0gbV9pbmxpbmVJdGVtUnVuc1tpbmRleC0tXS5sb2dpY2FsV2lkdGgoKTsK
LSAgICBtX2xpbmVCb3guc2hyaW5rSG9yaXpvbnRhbGx5KHJldmVydGVkV2lkdGgpOwotICAgIG1f
aW5saW5lSXRlbVJ1bnMuc2hyaW5rKGluZGV4ICsgMSk7Ci0gICAgLy8gU2hvdWxkIG5ldmVyIG5l
ZWQgdG8gY2xlYXIgdGhlIGxpbmUuCi0gICAgQVNTRVJUKCFtX2lubGluZUl0ZW1SdW5zLmlzRW1w
dHkoKSk7Ci0KLSAgICAvLyBJdCdzIGVhc2llciBqdXN0IHRvIHJlYnVpbGQgdHJhaWxpbmcgdHJp
bW1hYmxlIGNvbnRlbnQuCi0gICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQucmVzZXQoKTsK
LSAgICBtX2xpbmVJc1Zpc3VhbGx5RW1wdHlCZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQg
PSBpc1Zpc3VhbGx5RW1wdHkoKTsKLSAgICAvLyBGaW5kIHRoZSBmaXJzdCB0cmltbWFibGUgcnVu
LgotICAgIE9wdGlvbmFsPHNpemVfdD4gZmlyc3RUcmltbWFibGVSdW5JbmRleDsKLSAgICBmb3Ig
KGF1dG8gaW5kZXggPSBtX2lubGluZUl0ZW1SdW5zLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAg
ICAgYXV0byYgaW5saW5lSXRlbVJ1biA9IG1faW5saW5lSXRlbVJ1bnNbaW5kZXhdOwotICAgICAg
ICBpZiAoaW5saW5lSXRlbVJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgaW5saW5lSXRlbVJ1bi5p
c0NvbnRhaW5lckVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8gaGFz
VHJhaWxpbmdUcmltbWFibGVDb250ZW50ID0gaW5saW5lSXRlbVJ1bi5pc1RyaW1tYWJsZVdoaXRl
c3BhY2UoKSB8fCBpbmxpbmVJdGVtUnVuLmhhc1RyYWlsaW5nTGV0dGVyU3BhY2luZygpOwotICAg
ICAgICBpZiAoIWhhc1RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBpZiAoaW5saW5lSXRlbVJ1bi5pc1RyaW1tYWJsZVdoaXRlc3BhY2UoKSkgewot
ICAgICAgICAgICAgZmlyc3RUcmltbWFibGVSdW5JbmRleCA9IGluZGV4OwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlubGluZUl0ZW1SdW4uaGFzVHJhaWxp
bmdMZXR0ZXJTcGFjaW5nKCkpIHsKLSAgICAgICAgICAgIC8vIFdoaWxlIHRyYWlsaW5nIGxldHRl
ciBzcGFjaW5nIGlzIGNvbnNpZGVyZWQgdHJpbW1hYmxlLCBpdCBpcyBzdXBwb3NlZCB0byBiZSBs
YXN0IG9uZSBpbiB0aGUgbGlzdC4KLSAgICAgICAgICAgIGZpcnN0VHJpbW1hYmxlUnVuSW5kZXgg
PSBpbmRleDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIEZv
cndhcmQtYXBwZW5kIHJ1bnMgdG8gbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQuIAotICAgIGlm
IChmaXJzdFRyaW1tYWJsZVJ1bkluZGV4KSB7Ci0gICAgICAgIGZvciAoYXV0byBpbmRleCA9ICpm
aXJzdFRyaW1tYWJsZVJ1bkluZGV4OyBpbmRleCA8IG1faW5saW5lSXRlbVJ1bnMuc2l6ZSgpOyAr
K2luZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBpbmxpbmVJdGVtUnVuID0gbV9pbmxpbmVJdGVt
UnVuc1tpbmRleF07Ci0gICAgICAgICAgICBpZiAoaW5saW5lSXRlbVJ1bi5pc0NvbnRhaW5lclN0
YXJ0KCkgfHwgaW5saW5lSXRlbVJ1bi5pc0NvbnRhaW5lckVuZCgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgQVNTRVJUKGlubGluZUl0ZW1SdW4uaXNUZXh0KCkpOwot
ICAgICAgICAgICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQuYXBwZW5kKGluZGV4KTsKLSAg
ICAgICAgfQorICAgICAgICBhbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KCk7CisgICAgICAgIGFsaWdu
SG9yaXpvbnRhbGx5KGhhbmdpbmdDb250ZW50LCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQp
OwogICAgIH0KLSAgICAvLyBDb25zaWRlciBhbHRlcm5hdGl2ZSBzb2x1dGlvbnMgaWYgdGhlIChl
ZGdlIGNhc2UpcmV2ZXJ0IGdldHMgb3Zlcmx5IGNvbXBsaWNhdGVkLgotICAgIHJldHVybiBvcmln
aW5hbFNpemUgLSBtX2lubGluZUl0ZW1SdW5zLnNpemUoKTsKKyAgICByZXR1cm4gV1RGTW92ZSht
X3J1bnMpOwogfQogCi12b2lkIExpbmVCdWlsZGVyOjphbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KFJ1
bkxpc3QmIHJ1bkxpc3QpCit2b2lkIExpbmVCdWlsZGVyOjphbGlnbkNvbnRlbnRWZXJ0aWNhbGx5
KCkKIHsKICAgICBBU1NFUlQoIW1faXNJbnRyaW5zaWNTaXppbmcpOwogICAgIGF1dG8gc2Nyb2xs
YWJsZU92ZXJmbG93UmVjdCA9IG1fbGluZUJveC5sb2dpY2FsUmVjdCgpOwotICAgIGZvciAoYXV0
byYgcnVuIDogcnVuTGlzdCkgeworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CiAgICAg
ICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcCA9IDA7CiAgICAgICAgIGF1dG8mIGxheW91
dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduID0gbGF5
b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpOwpAQCAtMzkzLDE2ICsxODksMTUgQEAgdm9p
ZCBMaW5lQnVpbGRlcjo6YWxpZ25Db250ZW50VmVydGljYWxseShSdW5MaXN0JiBydW5MaXN0KQog
ICAgIG1fbGluZUJveC5zZXRTY3JvbGxhYmxlT3ZlcmZsb3coc2Nyb2xsYWJsZU92ZXJmbG93UmVj
dCk7CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6Omp1c3RpZnlSdW5zKFJ1bkxpc3QmIHJ1bkxpc3Qs
IElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpIGNvbnN0Cit2b2lkIExpbmVCdWlsZGVy
OjpqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQogewotICAgIEFT
U0VSVCghcnVuTGlzdC5pc0VtcHR5KCkpOwogICAgIEFTU0VSVChhdmFpbGFibGVXaWR0aCA+IDAp
OwogICAgIC8vIENvbGxlY3QgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0eSBudW1iZXJzIGFuZCBm
aW5kIHRoZSBsYXN0IHJ1biB3aXRoIGNvbnRlbnQuCiAgICAgYXV0byBleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50ID0gMDsKICAgICBSdW4qIGxhc3RSdW5XaXRoQ29udGVudCA9IG51bGxwdHI7Ci0g
ICAgZm9yIChhdXRvJiBydW4gOiBydW5MaXN0KSB7CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1
bnMpIHsKICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCArPSBydW4uZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudCgpOwotICAgICAgICBpZiAoKHJ1bi5pc1RleHQoKSAmJiAhcnVuLmlz
Q29sbGFwc2VkVG9WaXN1YWxseUVtcHR5KCkpIHx8IHJ1bi5pc0JveCgpKQorICAgICAgICBpZiAo
cnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0JveCgpKQogICAgICAgICAgICAgbGFzdFJ1bldpdGhDb250
ZW50ID0gJnJ1bjsKICAgICB9CiAgICAgLy8gTmVlZCB0byBmaXggdXAgdGhlIGxhc3QgcnVuJ3Mg
dHJhaWxpbmcgZXhwYW5zaW9uLgpAQCAtNDE3LDcgKzIxMiw3IEBAIHZvaWQgTGluZUJ1aWxkZXI6
Omp1c3RpZnlSdW5zKFJ1bkxpc3QmIHJ1bkxpc3QsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgpCiAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2UuCiAgICAgYXV0byBleHBh
bnNpb25Ub0Rpc3RyaWJ1dGUgPSBhdmFpbGFibGVXaWR0aCAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQ7CiAgICAgSW5saW5lTGF5b3V0VW5pdCBhY2N1bXVsYXRlZEV4cGFuc2lvbiA9IDA7Ci0g
ICAgZm9yIChhdXRvJiBydW4gOiBydW5MaXN0KSB7CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1
bnMpIHsKICAgICAgICAgLy8gRXhwYW5kIGFuZCBtb3ZlcyBydW5zIGJ5IHRoZSBhY2N1bXVsYXRl
ZCBleHBhbnNpb24uCiAgICAgICAgIGlmICghcnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkp
IHsKICAgICAgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9u
KTsKQEAgLTQzMSwxNyArMjI2LDE3IEBAIHZvaWQgTGluZUJ1aWxkZXI6Omp1c3RpZnlSdW5zKFJ1
bkxpc3QmIHJ1bkxpc3QsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCiAgICAgfQog
fQogCi12b2lkIExpbmVCdWlsZGVyOjphbGlnbkhvcml6b250YWxseShSdW5MaXN0JiBydW5MaXN0
LCBjb25zdCBIYW5naW5nQ29udGVudCYgaGFuZ2luZ0NvbnRlbnQsIElzTGFzdExpbmVXaXRoSW5s
aW5lQ29udGVudCBsYXN0TGluZSkKK3ZvaWQgTGluZUJ1aWxkZXI6OmFsaWduSG9yaXpvbnRhbGx5
KGNvbnN0IEhhbmdpbmdDb250ZW50JiBoYW5naW5nQ29udGVudCwgSXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50IGxhc3RMaW5lKQogewogICAgIEFTU0VSVCghbV9pc0ludHJpbnNpY1NpemluZyk7
CiAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IHRoaXMtPmF2YWlsYWJsZVdpZHRoKCkgKyBoYW5n
aW5nQ29udGVudC53aWR0aCgpOwotICAgIGlmIChydW5MaXN0LmlzRW1wdHkoKSB8fCBhdmFpbGFi
bGVXaWR0aCA8PSAwKQorICAgIGlmIChtX3J1bnMuaXNFbXB0eSgpIHx8IGF2YWlsYWJsZVdpZHRo
IDw9IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc1RleHRBbGlnbkp1c3RpZnkoKSkg
ewogICAgICAgICAvLyBEbyBub3QganVzdGlmeSBhbGlnbiB0aGUgbGFzdCBsaW5lLgogICAgICAg
ICBpZiAobGFzdExpbmUgPT0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObykKLSAgICAg
ICAgICAgIGp1c3RpZnlSdW5zKHJ1bkxpc3QsIGF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgICAg
IGp1c3RpZnlSdW5zKGF2YWlsYWJsZVdpZHRoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtNDc0LDE4ICsyNjksMTggQEAgdm9pZCBMaW5lQnVpbGRlcjo6YWxpZ25Ib3Jpem9udGFsbHko
UnVuTGlzdCYgcnVuTGlzdCwgY29uc3QgSGFuZ2luZ0NvbnRlbnQmIGhhbmcKICAgICAvLyBlLmcu
IDxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgd2lkdGg6IDEwMHB4OyI+Y2VudGVyZWQg
dGV4dDwvZGl2PiA6IHRoZSBsaW5lIGJveCB3aWxsIGFsc28gYmUgY2VudGVyZWQKICAgICAvLyBh
cyBvcHBvc2VkIHRvIHN0YXJ0IGF0IDBweCBhbGwgdGhlIHdheSB0byBbY2VudGVyZWQgdGV4dF0g
cnVuJ3MgcmlnaHQgZWRnZS4KICAgICBtX2xpbmVCb3gubW92ZUhvcml6b250YWxseSgqYWRqdXN0
bWVudCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBydW5MaXN0KQorICAgIGZvciAoYXV0byYgcnVu
IDogbV9ydW5zKQogICAgICAgICBydW4ubW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7CiB9
CiAKIHZvaWQgTGluZUJ1aWxkZXI6OnJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgpCiB7
Ci0gICAgaWYgKG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LmlzRW1wdHkoKSB8fCBtX2lubGlu
ZUl0ZW1SdW5zLmlzRW1wdHkoKSkKKyAgICBpZiAobV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQu
aXNFbXB0eSgpIHx8IG1fcnVucy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IENvbXBsZXggbGluZSBsYXlvdXQgcXVpcms6IGtlZXAgdGhlIHRyYWlsaW5nIHdoaXRlc3BhY2Ug
YXJvdW5kIHdoZW4gaXQgaXMgZm9sbG93ZWQgYnkgYSBsaW5lIGJyZWFrLCB1bmxlc3MgdGhlIGNv
bnRlbnQgb3ZlcmZsb3dzIHRoZSBsaW5lLgogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFi
bGVkKCkpIHsKLSAgICAgICAgaWYgKG1faW5saW5lSXRlbVJ1bnMubGFzdCgpLmlzTGluZUJyZWFr
KCkgJiYgYXZhaWxhYmxlV2lkdGgoKSA+PSAwICYmICFpc1RleHRBbGlnblJpZ2h0KCkpIHsKKyAg
ICAgICAgaWYgKG1fcnVucy5sYXN0KCkuaXNMaW5lQnJlYWsoKSAmJiBhdmFpbGFibGVXaWR0aCgp
ID49IDAgJiYgIWlzVGV4dEFsaWduUmlnaHQoKSkgewogICAgICAgICAgICAgbV90cmltbWFibGVU
cmFpbGluZ0NvbnRlbnQucmVzZXQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtNDkzLDIxICsyODgsMjEgQEAgdm9pZCBMaW5lQnVpbGRlcjo6cmVtb3ZlVHJhaWxpbmdUcmlt
bWFibGVDb250ZW50KCkKIAogICAgIG1fbGluZUJveC5zaHJpbmtIb3Jpem9udGFsbHkobV90cmlt
bWFibGVUcmFpbGluZ0NvbnRlbnQucmVtb3ZlKCkpOwogICAgIC8vIElmIHdlIHJlbW92ZWQgdGhl
IGZpcnN0IHZpc2libGUgcnVuIG9uIHRoZSBsaW5lLCB3ZSBuZWVkIHRvIHJlLWNoZWNrIHRoZSB2
aXNpYmlsaXR5IHN0YXR1cy4KLSAgICBpZiAoIW1fbGluZUlzVmlzdWFsbHlFbXB0eUJlZm9yZVRy
aW1tYWJsZVRyYWlsaW5nQ29udGVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEp1c3QgYmVj
YXVzZSB0aGUgbGluZSB3YXMgdmlzdWFsbHkgZW1wdHkgYmVmb3JlIHRoZSByZW1vdmVkIGNvbnRl
bnQsIGl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gaXQgaXMgc3RpbGwgdmlzdWFsbHkgZW1w
dHkuCi0gICAgLy8gPHNwYW4+ICA8L3NwYW4+PHNwYW4gc3R5bGU9InBhZGRpbmctbGVmdDogMTBw
eCI+PC9zcGFuPiAgPC0gbm9uLWVtcHR5Ci0gICAgYXV0byBsaW5lSXNWaXN1YWxseUVtcHR5ID0g
WyZdIHsKLSAgICAgICAgZm9yIChhdXRvJiBydW4gOiBtX2lubGluZUl0ZW1SdW5zKSB7Ci0gICAg
ICAgICAgICBpZiAoaXNWaXN1YWxseU5vbkVtcHR5KHJ1bikpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH07Ci0gICAg
Ly8gV2UgY291bGQgb25seSBnbyBmcm9tIHZpc3VhbGx5IG5vbiBlbXB0eSAtPiB0byB2aXN1YWxs
eSBlbXB0eS4gVHJpbW1lZCBydW5zIHNob3VsZCBuZXZlciBtYWtlIHRoZSBsaW5lIHZpc2libGUu
Ci0gICAgaWYgKGxpbmVJc1Zpc3VhbGx5RW1wdHkoKSkKLSAgICAgICAgbV9saW5lQm94LnNldElz
Q29uc2lkZXJlZEVtcHR5KCk7Ci0gICAgbV9saW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1h
YmxlVHJhaWxpbmdDb250ZW50ID0geyB9OworICAgIGlmIChtX2xpbmVJc1Zpc3VhbGx5RW1wdHlC
ZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQpIHsKKyAgICAgICAgLy8gSnVzdCBiZWNhdXNl
IHRoZSBsaW5lIHdhcyB2aXN1YWxseSBlbXB0eSBiZWZvcmUgdGhlIHJlbW92ZWQgY29udGVudCwg
aXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBpdCBpcyBzdGlsbCB2aXN1YWxseSBlbXB0eS4K
KyAgICAgICAgLy8gPHNwYW4+ICA8L3NwYW4+PHNwYW4gc3R5bGU9InBhZGRpbmctbGVmdDogMTBw
eCI+PC9zcGFuPiAgPC0gbm9uLWVtcHR5CisgICAgICAgIGF1dG8gbGluZUlzVmlzdWFsbHlFbXB0
eSA9IFsmXSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgICAg
ICAgICAgICAgIGlmIChpc1Zpc3VhbGx5Tm9uRW1wdHkocnVuKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH07CisgICAgICAgIC8vIFdlIGNvdWxkIG9ubHkgZ28gZnJvbSB2aXN1YWxseSBu
b24gZW1wdHkgLT4gdG8gdmlzdWFsbHkgZW1wdHkuIFRyaW1tZWQgcnVucyBzaG91bGQgbmV2ZXIg
bWFrZSB0aGUgbGluZSB2aXNpYmxlLgorICAgICAgICBpZiAobGluZUlzVmlzdWFsbHlFbXB0eSgp
KQorICAgICAgICAgICAgbV9saW5lQm94LnNldElzQ29uc2lkZXJlZEVtcHR5KCk7CisgICAgICAg
IG1fbGluZUlzVmlzdWFsbHlFbXB0eUJlZm9yZVRyaW1tYWJsZVRyYWlsaW5nQ29udGVudCA9IHsg
fTsKKyAgICB9CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6OnZpc3VhbGx5Q29sbGFwc2VQcmVXcmFw
T3ZlcmZsb3dDb250ZW50KCkKQEAgLTUyMiwyMyArMzE3LDI3IEBAIHZvaWQgTGluZUJ1aWxkZXI6
OnZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KCkKICAgICAvLyBMZXQncyBq
dXN0IGZpbmQgdGhlIHRyYWlsaW5nIHByZS13cmFwIHdoaXRlc3BhY2UgY29udGVudCBmb3Igbm93
IChlLmcgY2hlY2sgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHRyYWlsaW5nIHJ1bnMgd2l0aAogICAg
IC8vIGRpZmZlcmVudCBzZXQgb2Ygd2hpdGUtc3BhY2UgdmFsdWVzIGFuZCBkZWNpZGUgaWYgdGhl
IGluLWJldHdlZW4gcHJlLXdyYXAgY29udGVudCBzaG91bGQgYmUgY29sbGFwc2VkIGFzIHdlbGwu
KQogICAgIElubGluZUxheW91dFVuaXQgdHJpbW1lZENvbnRlbnRXaWR0aCA9IDA7Ci0gICAgZm9y
IChhdXRvJiBpbmxpbmVJdGVtUnVuIDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShtX2lubGluZUl0
ZW1SdW5zKSkgewotICAgICAgICBpZiAoaW5saW5lSXRlbVJ1bi5zdHlsZSgpLndoaXRlU3BhY2Uo
KSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKSB7CisgICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1h
a2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKKyAgICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRl
U3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUg
b25seSBpbnRlcmVzdGVkIGluIHByZS13cmFwIHRyYWlsaW5nIGNvbnRlbnQuCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBhdXRvIHByZVdyYXBWaXN1YWxseUNvbGxhcHNp
YmxlSW5saW5lSXRlbSA9IGlubGluZUl0ZW1SdW4uaXNDb250YWluZXJTdGFydCgpIHx8IGlubGlu
ZUl0ZW1SdW4uaXNDb250YWluZXJFbmQoKSB8fCBpbmxpbmVJdGVtUnVuLmlzV2hpdGVzcGFjZSgp
OworICAgICAgICBhdXRvIHByZVdyYXBWaXN1YWxseUNvbGxhcHNpYmxlSW5saW5lSXRlbSA9IHJ1
bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkgfHwgcnVuLmhhc1Ry
YWlsaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICBpZiAoIXByZVdyYXBWaXN1YWxseUNvbGxhcHNp
YmxlSW5saW5lSXRlbSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBhdXRvIHJ1bkxvZ2lj
YWxXaWR0aCA9IGlubGluZUl0ZW1SdW4ubG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIC8vIE5ldmVy
IHBhcnRpYWxseSBjb2xsYXBzZSBpbmxpbmUgY29udGFpbmVyIHN0YXJ0L2VuZCBpdGVtcy4KLSAg
ICAgICAgYXV0byBpc1BhcnRpYWxDb2xsYXBzaW5nQWxsb3dlZCA9IGlubGluZUl0ZW1SdW4uaXNU
ZXh0KCk7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWx3YXlzIGNvbGxhcHNlIHRoZSBy
dW4gYXQgYSBnbHlwaCBib3VuZGFyeSBhcyB0aGUgc3BlYyBpbmRpY2F0ZXM6ICJjb2xsYXBzZSB0
aGUgY2hhcmFjdGVyIGFkdmFuY2Ugd2lkdGhzIG9mIGFueSB0aGF0IHdvdWxkIG90aGVyd2lzZSBv
dmVyZmxvdyIKLSAgICAgICAgYXV0byBydW5Mb2dpY2FsV2lkdGhBZnRlckNvbGxhcHNpbmcgPSBp
c1BhcnRpYWxDb2xsYXBzaW5nQWxsb3dlZCA/IHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KDAs
IHJ1bkxvZ2ljYWxXaWR0aCAtIG92ZXJmbG93V2lkdGgpIDogMDsKLSAgICAgICAgYXV0byB0cmlt
bWVkID0gcnVuTG9naWNhbFdpZHRoIC0gcnVuTG9naWNhbFdpZHRoQWZ0ZXJDb2xsYXBzaW5nOwot
ICAgICAgICB0cmltbWVkQ29udGVudFdpZHRoICs9IHRyaW1tZWQ7Ci0gICAgICAgIG92ZXJmbG93
V2lkdGggLT0gdHJpbW1lZDsKLSAgICAgICAgaW5saW5lSXRlbVJ1bi5hZGp1c3RMb2dpY2FsV2lk
dGgocnVuTG9naWNhbFdpZHRoQWZ0ZXJDb2xsYXBzaW5nKTsKKyAgICAgICAgQVNTRVJUKCFydW4u
aGFzQ29sbGFwc2libGVUcmFpbGluZ1doaXRlc3BhY2UoKSk7CisgICAgICAgIElubGluZUxheW91
dFVuaXQgdHJpbW1hYmxlV2lkdGggPSB7IH07CisgICAgICAgIGlmIChydW4uaXNUZXh0KCkpIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWx3YXlzIGNvbGxhcHNlIHRoZSBydW4g
YXQgYSBnbHlwaCBib3VuZGFyeSBhcyB0aGUgc3BlYyBpbmRpY2F0ZXM6ICJjb2xsYXBzZSB0aGUg
Y2hhcmFjdGVyIGFkdmFuY2Ugd2lkdGhzIG9mIGFueSB0aGF0IHdvdWxkIG90aGVyd2lzZSBvdmVy
ZmxvdyIKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgdHJpbW1lZCB3aWR0aCBzaG91bGQgYmUgY2Fw
cGVkIGF0IHN0ZDo6bWluKHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpLCBvdmVyZmxvd1dp
ZHRoKSBmb3IgdGV4Z3QgcnVucy4gQm90aCBGRiBhbmQgQ2hyb21lIGFncmVlLgorICAgICAgICAg
ICAgdHJpbW1hYmxlV2lkdGggPSBydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKTsKKyAgICAg
ICAgICAgIHJ1bi52aXN1YWxseUNvbGxhcHNlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB0cmltbWFibGVXaWR0aCA9IHJ1bi5sb2dpY2FsV2lkdGgo
KTsKKyAgICAgICAgICAgIHJ1bi5zaHJpbmtIb3Jpem9udGFsbHkodHJpbW1hYmxlV2lkdGgpOwor
ICAgICAgICB9CisgICAgICAgIHRyaW1tZWRDb250ZW50V2lkdGggKz0gdHJpbW1hYmxlV2lkdGg7
CisgICAgICAgIG92ZXJmbG93V2lkdGggLT0gdHJpbW1hYmxlV2lkdGg7CiAgICAgICAgIGlmIChv
dmVyZmxvd1dpZHRoIDw9IDApCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC01NTIsMjAg
KzM1MSwyMCBAQCBIYW5naW5nQ29udGVudCBMaW5lQnVpbGRlcjo6Y29sbGVjdEhhbmdpbmdDb250
ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpcwogICAgIEFTU0VSVChtX3RyaW1tYWJs
ZVRyYWlsaW5nQ29udGVudC5pc0VtcHR5KCkpOwogICAgIGlmIChpc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQgPT0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCiAgICAgICAgIGhh
bmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKLSAgICBmb3IgKGF1dG8mIGlubGluZUl0
ZW1SdW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1faW5saW5lSXRlbVJ1bnMpKSB7Ci0gICAg
ICAgIGlmIChpbmxpbmVJdGVtUnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBpbmxpbmVJdGVtUnVu
LmlzQ29udGFpbmVyRW5kKCkpCisgICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNl
ZFJhbmdlKG1fcnVucykpIHsKKyAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwg
cnVuLmlzQ29udGFpbmVyRW5kKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KGlubGluZUl0ZW1SdW4uaXNMaW5lQnJlYWsoKSkgeworICAgICAgICBpZiAocnVuLmlzTGluZUJy
ZWFrKCkpIHsKICAgICAgICAgICAgIGhhbmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICghaW5saW5lSXRl
bVJ1bi5pc1RleHQoKSB8fCAhaW5saW5lSXRlbVJ1bi5pc1doaXRlc3BhY2UoKSB8fCBpbmxpbmVJ
dGVtUnVuLmlzQ29sbGFwc2libGUoKSkKKyAgICAgICAgaWYgKCFydW4uaGFzVHJhaWxpbmdXaGl0
ZXNwYWNlKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2
ZSBhIHByZXNlcnZlZCBvciBodW5nIHdoaXRlc3BhY2UuCi0gICAgICAgIGlmIChpbmxpbmVJdGVt
UnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6OlByZVdyYXApCisgICAgICAg
IGlmIChydW4uc3R5bGUoKS53aGl0ZVNwYWNlKCkgIT0gV2hpdGVTcGFjZTo6UHJlV3JhcCkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAvLyBUaGlzIGlzIGVpdGhlciBhIG5vcm1hbCBvciBj
b25kaXRpb25hbGx5IGhhbmdpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgaGFuZ2lu
Z0NvbnRlbnQuZXhwYW5kKGlubGluZUl0ZW1SdW4ubG9naWNhbFdpZHRoKCkpOworICAgICAgICBo
YW5naW5nQ29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkpOwogICAg
IH0KICAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7CiB9CkBAIC02MDMsMTQgKzQwMiwxMyBAQCB2
b2lkIExpbmVCdWlsZGVyOjphcHBlbmQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsVwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAog
ICAgIC8vIENoZWNrIGlmIHRoaXMgZnJlc2hseSBhcHBlbmRlZCBjb250ZW50IG1ha2VzIHRoZSBs
aW5lIHZpc3VhbGx5IG5vbi1lbXB0eS4KLSAgICBBU1NFUlQoIW1faW5saW5lSXRlbVJ1bnMuaXNF
bXB0eSgpKTsKLSAgICBpZiAobV9saW5lQm94LmlzQ29uc2lkZXJlZEVtcHR5KCkgJiYgaXNWaXN1
YWxseU5vbkVtcHR5KG1faW5saW5lSXRlbVJ1bnMubGFzdCgpKSkKKyAgICBpZiAobV9saW5lQm94
LmlzQ29uc2lkZXJlZEVtcHR5KCkgJiYgIW1fcnVucy5pc0VtcHR5KCkgJiYgaXNWaXN1YWxseU5v
bkVtcHR5KG1fcnVucy5sYXN0KCkpKQogICAgICAgICBtX2xpbmVCb3guc2V0SXNDb25zaWRlcmVk
Tm9uRW1wdHkoKTsKIH0KIAogdm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kTm9uQnJlYWthYmxlU3Bh
Y2UoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2Fs
TGVmdCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCiB7Ci0gICAgbV9pbmxpbmVJdGVt
UnVucy5hcHBlbmQoeyBpbmxpbmVJdGVtLCBsb2dpY2FsTGVmdCwgbG9naWNhbFdpZHRoIH0pOwor
ICAgIG1fcnVucy5hcHBlbmQoeyBpbmxpbmVJdGVtLCBsb2dpY2FsTGVmdCwgbG9naWNhbFdpZHRo
IH0pOwogICAgIG1fbGluZUJveC5leHBhbmRIb3Jpem9udGFsbHkobG9naWNhbFdpZHRoKTsKIH0K
IApAQCAtNjI2LDcgKzQyNCw3IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZElubGluZUNvbnRh
aW5lckVuZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMCiAgICAgYXV0byBy
ZW1vdmVUcmFpbGluZ0xldHRlclNwYWNpbmcgPSBbJl0gewogICAgICAgICBpZiAoIW1fdHJpbW1h
YmxlVHJhaWxpbmdDb250ZW50LmlzVHJhaWxpbmdSdW5QYXJ0aWFsbHlUcmltbWFibGUoKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9saW5lQm94LnNocmlua0hvcml6b250YWxseSht
X3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5yZW1vdmVUcmFpbGluZ1J1bigpKTsKKyAgICAgICAg
bV9saW5lQm94LnNocmlua0hvcml6b250YWxseShtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5y
ZW1vdmVQYXJ0aWFsbHlUcmltbWFibGVDb250ZW50KCkpOwogICAgIH07CiAgICAgLy8gUHJldmVu
dCB0cmFpbGluZyBsZXR0ZXItc3BhY2luZyBmcm9tIHNwaWxsaW5nIG91dCBvZiB0aGUgaW5saW5l
IGNvbnRhaW5lci4KICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRleHQtMy8j
bGV0dGVyLXNwYWNpbmctcHJvcGVydHkgU2VlIGV4YW1wbGUgMjEuCkBAIC02MzQsMTQgKzQzMiwx
NSBAQCB2b2lkIExpbmVCdWlsZGVyOjphcHBlbmRJbmxpbmVDb250YWluZXJFbmQoY29uc3QgSW5s
aW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTAogICAgIGFwcGVuZE5vbkJyZWFrYWJsZVNwYWNl
KGlubGluZUl0ZW0sIGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgbG9naWNhbFdpZHRoKTsKIH0KIAot
dm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kVGV4dENvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0m
IGlubGluZUl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQordm9pZCBMaW5lQnVp
bGRlcjo6YXBwZW5kVGV4dENvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZVRleHRJ
dGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKIHsKLSAgICBhdXRvIGlzQ29sbGFw
c2libGUgPSBpbmxpbmVJdGVtLmlzQ29sbGFwc2libGUoKTsKICAgICBhdXRvIHdpbGxDb2xsYXBz
ZUNvbXBsZXRlbHkgPSBbJl0gewotICAgICAgICBpZiAoIWlzQ29sbGFwc2libGUpCisgICAgICAg
IGlmICghaW5saW5lVGV4dEl0ZW0uaXNDb2xsYXBzaWJsZSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoaW5saW5lVGV4dEl0ZW0uaXNFbXB0eUNvbnRlbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdCBpdGVt
IGlzIGNvbGxhcHNlZCBhcyB3ZWxsLgotICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6bWFr
ZVJldmVyc2VkUmFuZ2UobV9pbmxpbmVJdGVtUnVucykpIHsKKyAgICAgICAgZm9yIChhdXRvJiBy
dW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKICAgICAgICAgICAgIGlmIChy
dW4uaXNCb3goKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRleHQtMy8jd2hpdGUtc3BhY2UtcGhhc2Ut
MQpAQCAtNjUwLDMxICs0NDksNDAgQEAgdm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kVGV4dENvbnRl
bnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxheW8KICAgICAgICAg
ICAgIC8vIDogIjxzcGFuPiAgPC9zcGFuPiAiIDwtIHRoZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGNv
bGxhcHNlcyBjb21wbGV0ZWx5LgogICAgICAgICAgICAgLy8gTm90IHRoYXQgd2hlbiB0aGUgaW5s
aW5lIGNvbnRhaW5lciBoYXMgcHJlc2VydmUgd2hpdGVzcGFjZSBzdHlsZSwgIjxzcGFuIHN0eWxl
PSJ3aGl0ZS1zcGFjZTogcHJlIj4gIDwvc3Bhbj4gIiA8LSB0aGlzIHdoaXRlc3BhY2Ugc3RheXMg
YXJvdW5kLgogICAgICAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcnVuLmlzQ29sbGFwc2libGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcnVuLmhh
c0NvbGxhcHNpYmxlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICBBU1NFUlQocnVu
LmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNlLgotICAgICAgICByZXR1cm4gIXNob3VsZFBy
ZXNlcnZlTGVhZGluZ0NvbnRlbnQoaW5saW5lSXRlbSk7CisgICAgICAgIHJldHVybiAhaXNXaGl0
ZXNwYWNlUHJlc2VydmVkKGlubGluZVRleHRJdGVtLnN0eWxlKCkpOwogICAgIH07CiAKLSAgICBh
dXRvIGNvbGxhcHNlc1RvWmVyb0FkdmFuY2VXaWR0aCA9IHdpbGxDb2xsYXBzZUNvbXBsZXRlbHko
KTsKLSAgICBsb2dpY2FsV2lkdGggPSBjb2xsYXBzZXNUb1plcm9BZHZhbmNlV2lkdGggPyAwIDog
bG9naWNhbFdpZHRoOwotICAgIGF1dG8gY29sbGFwc2VkUnVuID0gaXNDb2xsYXBzaWJsZSAmJiBp
bmxpbmVJdGVtLmxlbmd0aCgpID4gMTsKLSAgICBhdXRvIGNvbnRlbnRMZW5ndGggPSAgY29sbGFw
c2VkUnVuID8gMSA6IGlubGluZUl0ZW0ubGVuZ3RoKCk7Ci0gICAgbV9pbmxpbmVJdGVtUnVucy5h
cHBlbmQoeyBpbmxpbmVJdGVtLCBjb250ZW50TG9naWNhbFdpZHRoKCksIGxvZ2ljYWxXaWR0aCwg
Y29sbGFwc2VkUnVuLCBjb2xsYXBzZXNUb1plcm9BZHZhbmNlV2lkdGgsIERpc3BsYXk6OlJ1bjo6
VGV4dENvbnRleHQgeyBpbmxpbmVJdGVtLnN0YXJ0KCksIGNvbnRlbnRMZW5ndGgsIGlubGluZUl0
ZW0ubGF5b3V0Qm94KCkudGV4dENvbnRleHQoKS0+Y29udGVudCB9IH0pOworICAgIGlmICh3aWxs
Q29sbGFwc2VDb21wbGV0ZWx5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gaW5saW5l
VGV4dEl0ZW1OZWVkc05ld1J1biA9IHRydWU7CisgICAgaWYgKCFtX3J1bnMuaXNFbXB0eSgpKSB7
CisgICAgICAgIGF1dG8mIGxhc3RSdW4gPSBtX3J1bnMubGFzdCgpOworICAgICAgICBpbmxpbmVU
ZXh0SXRlbU5lZWRzTmV3UnVuID0gbGFzdFJ1bi5oYXNDb2xsYXBzZWRUcmFpbGluZ1doaXRlc3Bh
Y2UoKSB8fCAhbGFzdFJ1bi5pc1RleHQoKSB8fCAmbGFzdFJ1bi5sYXlvdXRCb3goKSAhPSAmaW5s
aW5lVGV4dEl0ZW0ubGF5b3V0Qm94KCk7CisgICAgICAgIGlmICghaW5saW5lVGV4dEl0ZW1OZWVk
c05ld1J1bikKKyAgICAgICAgICAgIGxhc3RSdW4uZXhwYW5kKGlubGluZVRleHRJdGVtLCBsb2dp
Y2FsV2lkdGgpOworICAgIH0KKyAgICBpZiAoaW5saW5lVGV4dEl0ZW1OZWVkc05ld1J1bikKKyAg
ICAgICAgbV9ydW5zLmFwcGVuZCh7IGlubGluZVRleHRJdGVtLCBjb250ZW50TG9naWNhbFdpZHRo
KCksIGxvZ2ljYWxXaWR0aCB9KTsKKwogICAgIG1fbGluZUJveC5leHBhbmRIb3Jpem9udGFsbHko
bG9naWNhbFdpZHRoKTsKIAotICAgIGlmIChpc0NvbGxhcHNpYmxlICYmICFUZXh0VXRpbDo6c2hv
dWxkUHJlc2VydmVUcmFpbGluZ1doaXRlc3BhY2UoaW5saW5lSXRlbS5zdHlsZSgpKSkgewotICAg
ICAgICAvLyBJZiB3ZSBldmVyIGNvbGxhcHNlIHRoaXMgY29udGVudCwgd2UgbmVlZCB0byBrbm93
IGlmIHRoZSBsaW5lIHZpc2liaWxpdHkgc3RhdGUgbmVlZHMgdG8gYmUgcmVjb21wdXRlZC4KKyAg
ICAvLyBTZXQgdGhlIHRyYWlsaW5nIHRyaW1tYWJsZSBjb250ZW50LgorICAgIGlmIChpbmxpbmVU
ZXh0SXRlbS5pc1doaXRlc3BhY2UoKSAmJiAhVGV4dFV0aWw6OnNob3VsZFByZXNlcnZlVHJhaWxp
bmdXaGl0ZXNwYWNlKGlubGluZVRleHRJdGVtLnN0eWxlKCkpKSB7CisgICAgICAgIG1fdHJpbW1h
YmxlVHJhaWxpbmdDb250ZW50LmFkZEZ1bGx5VHJpbW1hYmxlQ29udGVudChtX3J1bnMuc2l6ZSgp
IC0gMSwgbG9naWNhbFdpZHRoKTsKKyAgICAgICAgLy8gSWYgd2UgZXZlciB0cmltIHRoaXMgY29u
dGVudCwgd2UgbmVlZCB0byBrbm93IGlmIHRoZSBsaW5lIHZpc2liaWxpdHkgc3RhdGUgbmVlZHMg
dG8gYmUgcmVjb21wdXRlZC4KICAgICAgICAgaWYgKG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fbGluZUlzVmlzdWFsbHlFbXB0eUJlZm9yZVRyaW1t
YWJsZVRyYWlsaW5nQ29udGVudCA9IGlzVmlzdWFsbHlFbXB0eSgpOwotICAgICAgICBtX3RyaW1t
YWJsZVRyYWlsaW5nQ29udGVudC5hcHBlbmQobV9pbmxpbmVJdGVtUnVucy5zaXplKCkgLSAxKTsK
LSAgICB9IGVsc2UgewotICAgICAgICAvLyBFeGlzdGluZyB0cmFpbGluZyBjb2xsYXBzaWJsZSBj
b250ZW50IGNhbiBvbmx5IGJlIGV4cGFuZGVkIGlmIHRoZSBjdXJyZW50IHJ1biBpcyBmdWxseSBj
b2xsYXBzaWJsZS4KLSAgICAgICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQucmVzZXQoKTsK
LSAgICAgICAgaWYgKCFtX3Nob3VsZElnbm9yZVRyYWlsaW5nTGV0dGVyU3BhY2luZyAmJiAhaW5s
aW5lSXRlbS5pc1doaXRlc3BhY2UoKSAmJiBpbmxpbmVJdGVtLnN0eWxlKCkubGV0dGVyU3BhY2lu
ZygpID4gMCkKLSAgICAgICAgICAgIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LmFwcGVuZCht
X2lubGluZUl0ZW1SdW5zLnNpemUoKSAtIDEpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IC8vIEFueSBub24td2hpdGVzcGFjZSwgbm8tdHJpbW1hYmxlIGNvbnRlbnQgcmVzZXRzIHRoZSBl
eGlzdGluZyB0cmltbWFibGUuCisgICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQucmVzZXQo
KTsKKyAgICBpZiAoIW1fc2hvdWxkSWdub3JlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nICYmICFpbmxp
bmVUZXh0SXRlbS5pc1doaXRlc3BhY2UoKSAmJiBpbmxpbmVUZXh0SXRlbS5zdHlsZSgpLmxldHRl
clNwYWNpbmcoKSA+IDApCisgICAgICAgIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LmFkZFBh
cnRpYWxseVRyaW1tYWJsZUNvbnRlbnQobV9ydW5zLnNpemUoKSAtIDEsIGxvZ2ljYWxXaWR0aCk7
CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZE5vblJlcGxhY2VkSW5saW5lQm94KGNvbnN0
IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQpA
QCAtNjgyLDcgKzQ5MCw3IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZE5vblJlcGxhY2VkSW5s
aW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluCiAgICAgYXV0byYgbGF5
b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsKICAgICBhdXRvJiBib3hHZW9tZXRyeSA9
IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKICAgICBhdXRv
IGhvcml6b250YWxNYXJnaW4gPSBib3hHZW9tZXRyeS5ob3Jpem9udGFsTWFyZ2luKCk7Ci0gICAg
bV9pbmxpbmVJdGVtUnVucy5hcHBlbmQoeyBpbmxpbmVJdGVtLCBjb250ZW50TG9naWNhbFdpZHRo
KCkgKyBob3Jpem9udGFsTWFyZ2luLnN0YXJ0LCBsb2dpY2FsV2lkdGggfSk7CisgICAgbV9ydW5z
LmFwcGVuZCh7IGlubGluZUl0ZW0sIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSArIGhvcml6b250YWxN
YXJnaW4uc3RhcnQsIGxvZ2ljYWxXaWR0aCB9KTsKICAgICBtX2xpbmVCb3guZXhwYW5kSG9yaXpv
bnRhbGx5KGxvZ2ljYWxXaWR0aCArIGhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBob3Jpem9udGFs
TWFyZ2luLmVuZCk7CiAgICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQucmVzZXQoKTsKIH0K
QEAgLTY5NywxMSArNTA1LDEwIEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZFJlcGxhY2VkSW5s
aW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxhCiB2b2lkIExpbmVC
dWlsZGVyOjphcHBlbmRMaW5lQnJlYWsoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKIHsK
ICAgICBpZiAoaW5saW5lSXRlbS5pc0hhcmRMaW5lQnJlYWsoKSkKLSAgICAgICAgcmV0dXJuIG1f
aW5saW5lSXRlbVJ1bnMuYXBwZW5kKHsgaW5saW5lSXRlbSwgY29udGVudExvZ2ljYWxXaWR0aCgp
LCAwX2x1IH0pOworICAgICAgICByZXR1cm4gbV9ydW5zLmFwcGVuZCh7IGlubGluZUl0ZW0sIGNv
bnRlbnRMb2dpY2FsV2lkdGgoKSwgMF9sdSB9KTsKICAgICAvLyBTb2Z0IGxpbmUgYnJlYWtzIChw
cmVzZXJ2ZWQgbmV3IGxpbmUgY2hhcmFjdGVycykgcmVxdWlyZSBpbmxpbmUgdGV4dCBib3hlcyBm
b3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgogICAgIEFTU0VSVChpbmxpbmVJdGVtLmlzU29mdExp
bmVCcmVhaygpKTsKLSAgICBhdXRvJiBzb2Z0TGluZUJyZWFrSXRlbSA9IGRvd25jYXN0PElubGlu
ZVNvZnRMaW5lQnJlYWtJdGVtPihpbmxpbmVJdGVtKTsKLSAgICBtX2lubGluZUl0ZW1SdW5zLmFw
cGVuZCh7IHNvZnRMaW5lQnJlYWtJdGVtLCBjb250ZW50TG9naWNhbFdpZHRoKCksIDBfbHUsIGZh
bHNlLCBmYWxzZSwgRGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dCB7IHNvZnRMaW5lQnJlYWtJdGVt
LnBvc2l0aW9uKCksIDEsIHNvZnRMaW5lQnJlYWtJdGVtLmxheW91dEJveCgpLnRleHRDb250ZXh0
KCktPmNvbnRlbnQgfSB9KTsKKyAgICBtX3J1bnMuYXBwZW5kKHsgZG93bmNhc3Q8SW5saW5lU29m
dExpbmVCcmVha0l0ZW0+KGlubGluZUl0ZW0pLCBjb250ZW50TG9naWNhbFdpZHRoKCkgfSk7CiB9
CiAKIHZvaWQgTGluZUJ1aWxkZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodChjb25zdCBS
dW4mIHJ1bikKQEAgLTgxMCwxMCArNjE3LDEzIEBAIElubGluZUxheW91dFVuaXQgTGluZUJ1aWxk
ZXI6OnJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgUnVuJiBydW4pIGNvbnN0CiAgICAgcmV0dXJuIGJv
eEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwogfQogCi1ib29sIExpbmVCdWlsZGVyOjppc1Zp
c3VhbGx5Tm9uRW1wdHkoY29uc3QgSW5saW5lSXRlbVJ1biYgcnVuKSBjb25zdAorYm9vbCBMaW5l
QnVpbGRlcjo6aXNWaXN1YWxseU5vbkVtcHR5KGNvbnN0IFJ1biYgcnVuKSBjb25zdAogewogICAg
IGlmIChydW4uaXNUZXh0KCkpCi0gICAgICAgIHJldHVybiAhcnVuLmhhc0VtcHR5VGV4dENvbnRl
bnQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkp
CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qg
Y2hlY2sgd2hldGhlciB0aGUgaW5saW5lIGNvbnRhaW5lciBoYXMgY29udGVudC4gSXQgc2ltcGx5
IGNoZWNrcyBpZiB0aGUgY29udGFpbmVyIGl0c2VsZiBpcyBjb25zaWRlcmVkIG5vbi1lbXB0eS4K
ICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkg
ewpAQCAtODI2LDkgKzYzNiw2IEBAIGJvb2wgTGluZUJ1aWxkZXI6OmlzVmlzdWFsbHlOb25FbXB0
eShjb25zdCBJbmxpbmVJdGVtUnVuJiBydW4pIGNvbnN0CiAgICAgICAgIHJldHVybiBib3hHZW9t
ZXRyeS5ib3JkZXJSaWdodCgpIHx8IChib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKSAmJiBib3hH
ZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZSgpKTsKICAgICB9CiAKLSAgICBpZiAocnVuLmlz
TGluZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCiAgICAgaWYgKHJ1bi5pc0JveCgp
KSB7CiAgICAgICAgIGlmICghcnVuLmxheW91dEJveCgpLmVzdGFibGlzaGVzRm9ybWF0dGluZ0Nv
bnRleHQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtODY2LDE1MyArNjczLDE4MyBA
QCBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgTGluZUJ1aWxkZXI6OmZvcm1hdHRpbmdD
b250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKIH0K
IAotTGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6VHJpbW1hYmxlVHJhaWxp
bmdDb250ZW50KElubGluZUl0ZW1SdW5MaXN0JiBpbmxpbmVJdGVtUnVuTGlzdCkKLSAgICA6IG1f
aW5saW5laXRlbVJ1bkxpc3QoaW5saW5lSXRlbVJ1bkxpc3QpCitMaW5lQnVpbGRlcjo6VHJpbW1h
YmxlVHJhaWxpbmdDb250ZW50OjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQoUnVuTGlzdCYgcnVu
cykKKyAgICA6IG1fcnVucyhydW5zKQogewogfQogCi12b2lkIExpbmVCdWlsZGVyOjpUcmltbWFi
bGVUcmFpbGluZ0NvbnRlbnQ6OmFwcGVuZChzaXplX3QgcnVuSW5kZXgpCit2b2lkIExpbmVCdWls
ZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OmFkZEZ1bGx5VHJpbW1hYmxlQ29udGVudChz
aXplX3QgcnVuSW5kZXgsIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlV2lkdGgpCiB7Ci0gICAg
YXV0byYgdHJpbW1hYmxlUnVuID0gbV9pbmxpbmVpdGVtUnVuTGlzdFtydW5JbmRleF07Ci0gICAg
SW5saW5lTGF5b3V0VW5pdCB0cmltbWFibGVXaWR0aCA9IDA7Ci0gICAgYXV0byBpc0Z1bGx5VHJp
bW1hYmxlID0gdHJpbW1hYmxlUnVuLmlzVHJpbW1hYmxlV2hpdGVzcGFjZSgpOwotICAgIGlmIChp
c0Z1bGx5VHJpbW1hYmxlKQotICAgICAgICB0cmltbWFibGVXaWR0aCA9IHRyaW1tYWJsZVJ1bi5s
b2dpY2FsV2lkdGgoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHRyaW1tYWJsZVJ1bi5o
YXNUcmFpbGluZ0xldHRlclNwYWNpbmcoKSk7Ci0gICAgICAgIHRyaW1tYWJsZVdpZHRoID0gdHJp
bW1hYmxlUnVuLnRyYWlsaW5nTGV0dGVyU3BhY2luZygpOwotICAgIH0KLSAgICBtX3dpZHRoICs9
IHRyaW1tYWJsZVdpZHRoOwotICAgIG1fbGFzdFJ1bklzRnVsbHlUcmltbWFibGUgPSBpc0Z1bGx5
VHJpbW1hYmxlOworICAgIC8vIEFueSBzdWJzZXF1ZW50IHRyaW1tYWJsZSB3aGl0ZXNwYWNlIHNo
b3VsZCBjb2xsYXBzZSB0byB6ZXJvIGFkdmFuY2VkIHdpZHRoIGFuZCBpZ25vcmVkIGF0IDo6YXBw
ZW5kVGV4dENvbnRlbnQoKS4KKyAgICBBU1NFUlQoIW1faGFzRnVsbHlUcmltbWFibGVDb250ZW50
KTsKKyAgICBtX2Z1bGx5VHJpbW1hYmxlV2lkdGggPSB0cmltbWFibGVXaWR0aDsKKyAgICAvLyBO
b3RlIHRoYXQganVzdCBiZWNhc3VlIHRoZSB0cmltbWFibGUgd2lkdGggaXMgMCAoZm9udC1zaXpl
OiAwcHgpLCBpdCBkb2VzIG5vdCBtZWFuIHdlIGRvbid0IGhhdmUgYSB0cmltbWFibGUgdHJhaWxp
bmcgY29udGVudC4KKyAgICBtX2hhc0Z1bGx5VHJpbW1hYmxlQ29udGVudCA9IHRydWU7CiAgICAg
bV9maXJzdFJ1bkluZGV4ID0gbV9maXJzdFJ1bkluZGV4LnZhbHVlT3IocnVuSW5kZXgpOwogfQog
Cit2b2lkIExpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OmFkZFBhcnRpYWxs
eVRyaW1tYWJsZUNvbnRlbnQoc2l6ZV90IHJ1bkluZGV4LCBJbmxpbmVMYXlvdXRVbml0IHRyaW1t
YWJsZVdpZHRoKQoreworICAgIC8vIERvIG5vdCBhZGQgdHJpbW1hYmxlIGxldHRlciBzcGFjaW5n
IGFmdGVyIGEgZnVsbHkgdHJpbW1hYmxlIHdoaXRlc2FwY2UuCisgICAgQVNTRVJUKCFtX2ZpcnN0
UnVuSW5kZXgpOworICAgIEFTU0VSVCghbV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQpOworICAg
IEFTU0VSVCghbV9wYXJ0aWFsbHlUcmltbWFibGVXaWR0aCk7CisgICAgQVNTRVJUKHRyaW1tYWJs
ZVdpZHRoKTsKKyAgICBtX3BhcnRpYWxseVRyaW1tYWJsZVdpZHRoID0gdHJpbW1hYmxlV2lkdGg7
CisgICAgbV9maXJzdFJ1bkluZGV4ID0gcnVuSW5kZXg7Cit9CisKIElubGluZUxheW91dFVuaXQg
TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6cmVtb3ZlKCkKIHsKKyAgICAv
LyBSZW1vdmUgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQgYW5kIG1vdmUgYWxsIHRoZSBzdWJz
ZXF1ZW50IHRyYWlsaW5nIHJ1bnMuCisgICAgLy8gPHNwYW4+IDwvc3Bhbj48c3Bhbj48L3NwYW4+
CisgICAgLy8gW3RyYWlsaW5nIHdoaXRlc3BhY2VdW2NvbnRhaW5lciBlbmRdW2NvbnRhaW5lciBz
dGFydF1bY29udGFpbmVyIGVuZF0KKyAgICAvLyBUcmltIHRoZSB3aGl0ZXNwYWNlIHJ1biBhbmQg
bW92ZSB0aGUgdHJhaWxpbmcgaW5saW5lIGNvbnRhaW5lciBydW5zIHRvIHRoZSBsb2dpY2FsIGxl
ZnQuCiAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYXV0
byBoYXNTZWVuTm9uV2hpdGVzcGFjZVRleHRDb250ZW50ID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAv
LyBSZW1vdmUgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQgYW5kIG1vdmUgYWxsIHRoZSBvdGhl
ciB0cmFpbGluZyBydW5zLgotICAgIC8vIDxzcGFuPiA8L3NwYW4+PHNwYW4+PC9zcGFuPiAtPgot
ICAgIC8vIFt3aGl0ZXNwYWNlXVtjb250YWluZXIgZW5kXVtjb250YWluZXIgc3RhcnRdW2NvbnRh
aW5lciBlbmRdCi0gICAgLy8gUmVtb3ZlIHRoZSB3aGl0ZXNwYWNlIHJ1biBhbmQgbW92ZSB0aGUg
dHJhaWxpbmcgaW5saW5lIGNvbnRhaW5lciBydW5zIHRvIHRoZSBsZWZ0LgotICAgIElubGluZUxh
eW91dFVuaXQgYWNjdW11bGF0ZWRUcmltbWVkV2lkdGggPSAwOwotICAgIGZvciAoYXV0byBpbmRl
eCA9ICptX2ZpcnN0UnVuSW5kZXg7IGluZGV4IDwgbV9pbmxpbmVpdGVtUnVuTGlzdC5zaXplKCk7
ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byYgcnVuID0gbV9pbmxpbmVpdGVtUnVuTGlzdFtpbmRl
eF07Ci0gICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KC1hY2N1bXVsYXRlZFRyaW1tZWRXaWR0
aCk7Ci0gICAgICAgIGlmICghcnVuLmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQocnVu
LmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSB8fCBydW4uaXNMaW5l
QnJlYWsoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
cnVuLmlzV2hpdGVzcGFjZSgpKSB7Ci0gICAgICAgICAgICBhY2N1bXVsYXRlZFRyaW1tZWRXaWR0
aCArPSBydW4ubG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICBydW4uc2V0Q29sbGFwc2VzVG9a
ZXJvQWR2YW5jZVdpZHRoKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQo
IWhhc1NlZW5Ob25XaGl0ZXNwYWNlVGV4dENvbnRlbnQpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgICAgICAgICBoYXNTZWVuTm9uV2hpdGVzcGFjZVRleHRDb250ZW50ID0gdHJ1ZTsKLSNlbmRp
ZgotICAgICAgICAgICAgLy8gTXVzdCBiZSBhIGxldHRlciBzcGFjaW5nIHRyaW1taW5nLgotICAg
ICAgICAgICAgQVNTRVJUKHJ1bi5oYXNUcmFpbGluZ0xldHRlclNwYWNpbmcoKSk7Ci0gICAgICAg
ICAgICBhY2N1bXVsYXRlZFRyaW1tZWRXaWR0aCArPSBydW4udHJhaWxpbmdMZXR0ZXJTcGFjaW5n
KCk7Ci0gICAgICAgICAgICBydW4ucmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCk7Ci0gICAg
ICAgIH0KKyAgICBhdXRvJiB0cmltbWFibGVSdW4gPSBtX3J1bnNbKm1fZmlyc3RSdW5JbmRleF07
CisgICAgQVNTRVJUKHRyaW1tYWJsZVJ1bi5pc1RleHQoKSk7CisKKyAgICBpZiAobV9oYXNGdWxs
eVRyaW1tYWJsZUNvbnRlbnQpCisgICAgICAgIHRyaW1tYWJsZVJ1bi5yZW1vdmVUcmFpbGluZ1do
aXRlc3BhY2UoKTsKKyAgICBpZiAobV9wYXJ0aWFsbHlUcmltbWFibGVXaWR0aCkKKyAgICAgICAg
dHJpbW1hYmxlUnVuLnJlbW92ZVRyYWlsaW5nTGV0dGVyU3BhY2luZygpOworCisgICAgYXV0byB0
cmltbWFibGVXaWR0aCA9IHdpZHRoKCk7CisgICAgZm9yIChhdXRvIGluZGV4ID0gKm1fZmlyc3RS
dW5JbmRleCArIDE7IGluZGV4IDwgbV9ydW5zLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBh
dXRvJiBydW4gPSBtX3J1bnNbaW5kZXhdOworICAgICAgICBBU1NFUlQocnVuLmlzQ29udGFpbmVy
U3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSk7Cisg
ICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KC10cmltbWFibGVXaWR0aCk7CiAgICAgfQotICAg
IEFTU0VSVChhY2N1bXVsYXRlZFRyaW1tZWRXaWR0aCA9PSB3aWR0aCgpKTsKICAgICByZXNldCgp
OwotICAgIHJldHVybiBhY2N1bXVsYXRlZFRyaW1tZWRXaWR0aDsKKyAgICByZXR1cm4gdHJpbW1h
YmxlV2lkdGg7CiB9CiAKLUlubGluZUxheW91dFVuaXQgTGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRy
YWlsaW5nQ29udGVudDo6cmVtb3ZlVHJhaWxpbmdSdW4oKQorSW5saW5lTGF5b3V0VW5pdCBMaW5l
QnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50OjpyZW1vdmVQYXJ0aWFsbHlUcmltbWFi
bGVDb250ZW50KCkKIHsKLSAgICBBU1NFUlQoIWlzRW1wdHkoKSk7Ci0gICAgLy8gRmluZCB0aGUg
bGFzdCB0cmltbWFibGUgcnVuIChpdCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGxhc3QgcnVuIGUu
ZyBbY29udGFpbmVyIHN0YXJ0XVt3aGl0ZXNwYWNlXVtjb250YWluZXIgZW5kXSkKLSAgICBmb3Ig
KGF1dG8gaW5kZXggPSBtX2lubGluZWl0ZW1SdW5MaXN0LnNpemUoKTsgaW5kZXgtLSAmJiAqbV9m
aXJzdFJ1bkluZGV4ID49IGluZGV4OykgewotICAgICAgICBhdXRvJiBydW4gPSBtX2lubGluZWl0
ZW1SdW5MaXN0W2luZGV4XTsKLSAgICAgICAgaWYgKCFydW4uaXNUZXh0KCkpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgp
KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIElubGluZUxheW91
dFVuaXQgdHJpbW1lZFdpZHRoID0gMDsKLSAgICAgICAgaWYgKHJ1bi5pc1doaXRlc3BhY2UoKSkg
ewotICAgICAgICAgICAgdHJpbW1lZFdpZHRoID0gcnVuLmxvZ2ljYWxXaWR0aCgpOwotICAgICAg
ICAgICAgcnVuLnNldENvbGxhcHNlc1RvWmVyb0FkdmFuY2VXaWR0aCgpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgQVNTRVJUKHJ1bi5oYXNUcmFpbGluZ0xldHRlclNwYWNpbmcoKSk7
Ci0gICAgICAgICAgICB0cmltbWVkV2lkdGggPSBydW4udHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCk7
Ci0gICAgICAgICAgICBydW4ucmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgbV93aWR0aCAtPSB0cmltbWVkV2lkdGg7Ci0gICAgICAgIC8vIFdlIG1hbmFn
ZWQgdG8gcmVtb3ZlIHRoZSBsYXN0IHRyaW1tYWJsZSBydW4uCi0gICAgICAgIGlmIChpbmRleCA9
PSAqbV9maXJzdFJ1bkluZGV4KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fd2lkdGgpOwotICAg
ICAgICAgICAgbV9maXJzdFJ1bkluZGV4ID0geyB9OwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB0cmltbWVkV2lkdGg7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiAwX2x1OworICAgIC8vIFBhcnRpYWxseSB0cmltbWFibGUgY29udGVudCBpcyBhbHdheXMg
Z2F0ZWQgYnkgYSBmdWxseSB0cmltbWFibGUgY29udGVudC4KKyAgICAvLyBXZSBjYW4ndCBqdXN0
IHRyaW0gc3BhY2luZyBpbiB0aGUgbWlkZGxlLgorICAgIEFTU0VSVCghbV9mdWxseVRyaW1tYWJs
ZVdpZHRoKTsKKyAgICByZXR1cm4gcmVtb3ZlKCk7CiB9CiAKLUxpbmVCdWlsZGVyOjpJbmxpbmVJ
dGVtUnVuOjpJbmxpbmVJdGVtUnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGlu
ZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQot
ICAgIDogbV9pbmxpbmVJdGVtKGlubGluZUl0ZW0pCi0gICAgLCBtX2xvZ2ljYWxMZWZ0KGxvZ2lj
YWxMZWZ0KQotICAgICwgbV9sb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKQorTGluZUJ1aWxkZXI6
OlJ1bjo6UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxheW91dFVuaXQg
bG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQorICAgIDogbV90eXBl
KGlubGluZUl0ZW0udHlwZSgpKQorICAgICwgbV9sYXlvdXRCb3goJmlubGluZUl0ZW0ubGF5b3V0
Qm94KCkpCisgICAgLCBtX2xvZ2ljYWxSZWN0KHsgMCwgbG9naWNhbExlZnQsIGxvZ2ljYWxXaWR0
aCwgMCB9KQogewogfQogCi1MaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6SW5saW5lSXRlbVJ1
bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBpc0NvbGxhcHNlZCwgYm9v
bCBpc0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCwgRGlzcGxheTo6UnVuOjpUZXh0Q29udGV4
dCYmIHRleHRDb250ZXh0KQotICAgIDogbV9pbmxpbmVJdGVtKGlubGluZUl0ZW0pCi0gICAgLCBt
X2xvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KQotICAgICwgbV9sb2dpY2FsV2lkdGgobG9naWNhbFdp
ZHRoKQotICAgICwgbV90ZXh0Q29udGV4dChXVEZNb3ZlKHRleHRDb250ZXh0KSkKLSAgICAsIG1f
aXNDb2xsYXBzZWQoaXNDb2xsYXBzZWQpCi0gICAgLCBtX2NvbGxhcHNlZFRvWmVyb0FkdmFuY2VX
aWR0aChpc0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCkKK0xpbmVCdWlsZGVyOjpSdW46OlJ1
bihjb25zdCBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbSYgc29mdExpbmVCcmVha0l0ZW0sIElubGlu
ZUxheW91dFVuaXQgbG9naWNhbExlZnQpCisgICAgOiBtX3R5cGUoc29mdExpbmVCcmVha0l0ZW0u
dHlwZSgpKQorICAgICwgbV9sYXlvdXRCb3goJnNvZnRMaW5lQnJlYWtJdGVtLmxheW91dEJveCgp
KQorICAgICwgbV9sb2dpY2FsUmVjdCh7IDAsIGxvZ2ljYWxMZWZ0LCAwLCAwIH0pCisgICAgLCBt
X3RleHRDb250ZXh0KHsgc29mdExpbmVCcmVha0l0ZW0ucG9zaXRpb24oKSwgMSwgc29mdExpbmVC
cmVha0l0ZW0ubGF5b3V0Qm94KCkudGV4dENvbnRleHQoKS0+Y29udGVudCB9KQogewogfQogCi1i
b29sIExpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjppc1RyaW1tYWJsZVdoaXRlc3BhY2UoKSBj
b25zdAorTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVU
ZXh0SXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsV2lkdGgpCisgICAgOiBtX3R5cGUoSW5saW5lSXRlbTo6VHlwZTo6VGV4dCkKKyAgICAs
IG1fbGF5b3V0Qm94KCZpbmxpbmVUZXh0SXRlbS5sYXlvdXRCb3goKSkKKyAgICAsIG1fbG9naWNh
bFJlY3QoeyAwLCBsb2dpY2FsTGVmdCwgbG9naWNhbFdpZHRoLCAwIH0pCisgICAgLCBtX3RyYWls
aW5nV2hpdGVzcGFjZVR5cGUodHJhaWxpbmdXaGl0ZXNwYWNlVHlwZShpbmxpbmVUZXh0SXRlbSkp
CisgICAgLCBtX3RleHRDb250ZXh0KHsgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgbV90cmFpbGlu
Z1doaXRlc3BhY2VUeXBlID09IFRyYWlsaW5nV2hpdGVzcGFjZTo6Q29sbGFwc2VkID8gMSA6IGlu
bGluZVRleHRJdGVtLmxlbmd0aCgpLCBpbmxpbmVUZXh0SXRlbS5sYXlvdXRCb3goKS50ZXh0Q29u
dGV4dCgpLT5jb250ZW50IH0pCiB7Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlICJlbmQtb2Yt
bGluZSBzcGFjZXMiIGNhbiBiZSByZW1vdmVkLgotICAgIC8vIFNlZSBodHRwczovL3d3dy53My5v
cmcvVFIvY3NzLXRleHQtMy8jd2hpdGUtc3BhY2UtcHJvcGVydHkgbWF0cml4LgotICAgIGlmICgh
aXNXaGl0ZXNwYWNlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gIVRleHRV
dGlsOjpzaG91bGRQcmVzZXJ2ZVRyYWlsaW5nV2hpdGVzcGFjZShzdHlsZSgpKTsKKyAgICBpZiAo
bV90cmFpbGluZ1doaXRlc3BhY2VUeXBlICE9IFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZSkgewor
ICAgICAgICBtX3RleHRDb250ZXh0LT5zZXRFeHBhbnNpb24oeyBFeHBhbnNpb25CZWhhdmlvcihE
ZWZhdWx0RXhwYW5zaW9uKSwgeyB9IH0pOworICAgICAgICBpZiAoIWlzV2hpdGVzcGFjZVByZXNl
cnZlZChpbmxpbmVUZXh0SXRlbS5zdHlsZSgpKSkKKyAgICAgICAgICAgIG1fZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudCA9IDE7CisgICAgfQorfQorCit2b2lkIExpbmVCdWlsZGVyOjpSdW46OmV4
cGFuZChjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lVGV4dEl0ZW0sIElubGluZUxheW91dFVu
aXQgbG9naWNhbFdpZHRoKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdmVyeSBzaW1wbGUg
ZXhwYW5zaW9uIG1lcmdlLiBXZSBzaG91bGQgZXZlbnR1YWxseSBzd2l0Y2ggb3ZlciB0byBGb250
Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC4KKyAgICBBU1NFUlQoIWhhc0NvbGxh
cHNlZFRyYWlsaW5nV2hpdGVzcGFjZSgpKTsKKyAgICBBU1NFUlQoaXNUZXh0KCkgJiYgaW5saW5l
VGV4dEl0ZW0uaXNUZXh0KCkpOworICAgIEFTU0VSVChtX2xheW91dEJveCA9PSAmaW5saW5lVGV4
dEl0ZW0ubGF5b3V0Qm94KCkpOworCisgICAgbV9sb2dpY2FsUmVjdC5leHBhbmRIb3Jpem9udGFs
bHkobG9naWNhbFdpZHRoKTsKKyAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgPSB0cmFpbGlu
Z1doaXRlc3BhY2VUeXBlKGlubGluZVRleHRJdGVtKTsKKworICAgIGlmIChtX3RyYWlsaW5nV2hp
dGVzcGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25lKSB7CisgICAgICAgIG1fdHJh
aWxpbmdXaGl0ZXNwYWNlV2lkdGggPSB7IH07CisgICAgICAgIG1fdGV4dENvbnRleHQtPnNldEV4
cGFuc2lvbih7IEV4cGFuc2lvbkJlaGF2aW9yKEFsbG93TGVhZGluZ0V4cGFuc2lvbiB8IEFsbG93
VHJhaWxpbmdFeHBhbnNpb24pLCB7IH0gfSk7CisgICAgICAgIG1fdGV4dENvbnRleHQtPmV4cGFu
ZChpbmxpbmVUZXh0SXRlbS5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
bV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCArPSBsb2dpY2FsV2lkdGg7CisgICAgaWYgKCFpc1do
aXRlc3BhY2VQcmVzZXJ2ZWQoaW5saW5lVGV4dEl0ZW0uc3R5bGUoKSkpCisgICAgICAgICsrbV9l
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50OworICAgIG1fdGV4dENvbnRleHQtPnNldEV4cGFuc2lv
bih7IEV4cGFuc2lvbkJlaGF2aW9yKERlZmF1bHRFeHBhbnNpb24pLCB7IH0gfSk7CisgICAgbV90
ZXh0Q29udGV4dC0+ZXhwYW5kKG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSA9PSBUcmFpbGluZ1do
aXRlc3BhY2U6OkNvbGxhcHNlZCA/IDEgOiBpbmxpbmVUZXh0SXRlbS5sZW5ndGgoKSk7CiB9CiAK
LWJvb2wgTGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46Omhhc1RyYWlsaW5nTGV0dGVyU3BhY2lu
ZygpIGNvbnN0Citib29sIExpbmVCdWlsZGVyOjpSdW46Omhhc1RyYWlsaW5nTGV0dGVyU3BhY2lu
ZygpIGNvbnN0CiB7CiAgICAgLy8gQ29tcGxleCBsaW5lIGxheW91dCBkb2VzIG5vdCBrZWVwIHRy
YWNrIG9mIHRyYWlsaW5nIGxldHRlciBzcGFjaW5nLgogICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRp
b25FbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gIWlzV2hpdGVz
cGFjZSgpICYmIHN0eWxlKCkubGV0dGVyU3BhY2luZygpID4gMDsKKyAgICByZXR1cm4gIWhhc1Ry
YWlsaW5nV2hpdGVzcGFjZSgpICYmIHN0eWxlKCkubGV0dGVyU3BhY2luZygpID4gMDsKIH0KIAot
SW5saW5lTGF5b3V0VW5pdCBMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6dHJhaWxpbmdMZXR0
ZXJTcGFjaW5nKCkgY29uc3QKK0lubGluZUxheW91dFVuaXQgTGluZUJ1aWxkZXI6OlJ1bjo6dHJh
aWxpbmdMZXR0ZXJTcGFjaW5nKCkgY29uc3QKIHsKICAgICBpZiAoIWhhc1RyYWlsaW5nTGV0dGVy
U3BhY2luZygpKQogICAgICAgICByZXR1cm4gMF9sdTsKICAgICByZXR1cm4gSW5saW5lTGF5b3V0
VW5pdCB7IHN0eWxlKCkubGV0dGVyU3BhY2luZygpIH07CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6
OklubGluZUl0ZW1SdW46OnNldENvbGxhcHNlc1RvWmVyb0FkdmFuY2VXaWR0aCgpCit2b2lkIExp
bmVCdWlsZGVyOjpSdW46OnJlbW92ZVRyYWlsaW5nTGV0dGVyU3BhY2luZygpCiB7Ci0gICAgbV9j
b2xsYXBzZWRUb1plcm9BZHZhbmNlV2lkdGggPSB0cnVlOwotICAgIG1fbG9naWNhbFdpZHRoID0g
MF9sdTsKKyAgICBBU1NFUlQoaGFzVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkpOworICAgIHNocmlu
a0hvcml6b250YWxseSh0cmFpbGluZ0xldHRlclNwYWNpbmcoKSk7CisgICAgQVNTRVJUKGxvZ2lj
YWxXaWR0aCgpID4gMCB8fCAoIWxvZ2ljYWxXaWR0aCgpICYmIHN0eWxlKCkubGV0dGVyU3BhY2lu
ZygpID49IGludE1heEZvckxheW91dFVuaXQpKTsKIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6SW5s
aW5lSXRlbVJ1bjo6cmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkKK3ZvaWQgTGluZUJ1aWxk
ZXI6OlJ1bjo6cmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKCkKIHsKLSAgICBBU1NFUlQoaGFzVHJh
aWxpbmdMZXR0ZXJTcGFjaW5nKCkpOwotICAgIG1fbG9naWNhbFdpZHRoIC09IHRyYWlsaW5nTGV0
dGVyU3BhY2luZygpOwotICAgIEFTU0VSVChtX2xvZ2ljYWxXaWR0aCA+IDAgfHwgKCFtX2xvZ2lj
YWxXaWR0aCAmJiBzdHlsZSgpLmxldHRlclNwYWNpbmcoKSA+PSBpbnRNYXhGb3JMYXlvdXRVbml0
KSk7CisgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtdGV4dC0z
LyN3aGl0ZS1zcGFjZS1wcm9wZXJ0eSBtYXRyaXgKKyAgICAvLyBUcmltbWFibGUgd2hpdGVzcGFj
ZSBpcyBhbHdheXMgY29sbGFwc2FibGUgc28gdGhlIGxlbmd0aCBvZiB0aGUgdHJhaWxpbmcgdHJp
bW1hYmxlIHdoaXRlc3BhY2UgaXMgYWx3YXlzIDEgKG9yIG5vbi1leGlzdGVudCkuCisgICAgQVNT
RVJUKG1fdGV4dENvbnRleHQtPmxlbmd0aCgpKTsKKyAgICBtX3RleHRDb250ZXh0LT5leHBhbmQo
LTEpOworICAgIHZpc3VhbGx5Q29sbGFwc2VUcmFpbGluZ1doaXRlc3BhY2UoKTsKIH0KIAotYm9v
bCBMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6aGFzRW1wdHlUZXh0Q29udGVudCgpIGNvbnN0
Cit2b2lkIExpbmVCdWlsZGVyOjpSdW46OnZpc3VhbGx5Q29sbGFwc2VUcmFpbGluZ1doaXRlc3Bh
Y2UoKQoreworICAgIC8vIFRoaXMgaXMganVzdCBhIHZpc3VhbCBhZGp1c3RtZW50LCB0aGUgdGV4
dCBsZW5ndGggc2hvdWxkIHJlbWFpbiB0aGUgc2FtZS4KKyAgICBzaHJpbmtIb3Jpem9udGFsbHko
bV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCk7CisgICAgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0
aCA9IHsgfTsKKyAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgPSBUcmFpbGluZ1doaXRlc3Bh
Y2U6Ok5vbmU7CisKKyAgICBpZiAoIWlzV2hpdGVzcGFjZVByZXNlcnZlZChzdHlsZSgpKSkgewor
ICAgICAgICBBU1NFUlQobV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KTsKKyAgICAgICAgbV9l
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50LS07CisgICAgfQorICAgIG1fdGV4dENvbnRleHQtPnNl
dEV4cGFuc2lvbih7IEV4cGFuc2lvbkJlaGF2aW9yKEFsbG93TGVhZGluZ0V4cGFuc2lvbiB8IEFs
bG93VHJhaWxpbmdFeHBhbnNpb24pLCB7IH0gfSk7Cit9CisKK3ZvaWQgTGluZUJ1aWxkZXI6OlJ1
bjo6YWRqdXN0RXhwYW5zaW9uQmVoYXZpb3IoRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVo
YXZpb3IpCit7CisgICAgQVNTRVJUKGlzVGV4dCgpKTsKKyAgICBBU1NFUlQoaGFzRXhwYW5zaW9u
T3Bwb3J0dW5pdHkoKSk7CisgICAgbV90ZXh0Q29udGV4dC0+c2V0RXhwYW5zaW9uKHsgZXhwYW5z
aW9uQmVoYXZpb3IsIG1fdGV4dENvbnRleHQtPmV4cGFuc2lvbigpLT5ob3Jpem9udGFsRXhwYW5z
aW9uIH0pOworfQorCitpbmxpbmUgT3B0aW9uYWw8RXhwYW5zaW9uQmVoYXZpb3I+IExpbmVCdWls
ZGVyOjpSdW46OmV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNUZXh0
KCkpOwotICAgIHJldHVybiBpc0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCgpIHx8IGRvd25j
YXN0PElubGluZVRleHRJdGVtPihtX2lubGluZUl0ZW0pLmlzRW1wdHlDb250ZW50KCk7CisgICAg
aWYgKGF1dG8gZXhwYW5zaW9uQ29udGV4dCA9IG1fdGV4dENvbnRleHQtPmV4cGFuc2lvbigpKQor
ICAgICAgICByZXR1cm4gZXhwYW5zaW9uQ29udGV4dC0+YmVoYXZpb3I7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpzZXRDb21wdXRlZEhvcml6b250YWxFeHBh
bnNpb24oSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsRXhwYW5zaW9uKQoreworICAgIEFTU0VSVChp
c1RleHQoKSk7CisgICAgQVNTRVJUKGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpOworICAgIG1f
bG9naWNhbFJlY3QuZXhwYW5kSG9yaXpvbnRhbGx5KGxvZ2ljYWxFeHBhbnNpb24pOworICAgIG1f
dGV4dENvbnRleHQtPnNldEV4cGFuc2lvbih7IG1fdGV4dENvbnRleHQtPmV4cGFuc2lvbigpLT5i
ZWhhdmlvciwgbG9naWNhbEV4cGFuc2lvbiB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgK
aW5kZXggOGZmNTljYzU3M2FjM2UyY2ZhODgyNDFiZTc2ZmZhYWQ5NzI1NDAyOC4uMjNhMDgzODRk
NzdkMGQ1MzNhZGUwNmI2Y2I1NmNkOGU5ZGM3MzY0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCkBA
IC0zNyw5ICszNyw5IEBAIG5hbWVzcGFjZSBMYXlvdXQgewogCiBzdHJ1Y3QgSGFuZ2luZ0NvbnRl
bnQ7CiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKK2NsYXNzIElubGluZVNvZnRMaW5l
QnJlYWtJdGVtOwogCiBjbGFzcyBMaW5lQnVpbGRlciB7Ci0gICAgY2xhc3MgSW5saW5lSXRlbVJ1
bjsKICAgICBzdHJ1Y3QgQ29udGludW91c0NvbnRlbnQ7CiAKIHB1YmxpYzoKQEAgLTc0LDExICs3
NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc0ludHJ1c2l2ZUZsb2F0KCkgeyBtX2hhc0lu
dHJ1c2l2ZUZsb2F0ID0gdHJ1ZTsgfQogCiAgICAgc3RydWN0IFJ1biB7Ci0gICAgICAgIFJ1bihj
b25zdCBJbmxpbmVJdGVtUnVuJik7Ci0gICAgICAgIFJ1bihjb25zdCBJbmxpbmVJdGVtUnVuJiwg
Y29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYsIGNvbnN0IERpc3BsYXk6OlJ1bjo6VGV4dENvbnRl
eHQmLCB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KTsKLSAgICAgICAgUnVuKFJ1
biYmKSA9IGRlZmF1bHQ7Ci0gICAgICAgIFJ1biYgb3BlcmF0b3I9KFJ1biYmIG90aGVyKSA9IGRl
ZmF1bHQ7Ci0KICAgICAgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0g
SW5saW5lSXRlbTo6VHlwZTo6VGV4dDsgfQogICAgICAgICBib29sIGlzQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlID09IElubGluZUl0ZW06OlR5cGU6OkJveDsgfQogICAgICAgICBib29sIGlz
TGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IElubGluZUl0ZW06OlR5cGU6Okhh
cmRMaW5lQnJlYWsgfHwgbV90eXBlID09IElubGluZUl0ZW06OlR5cGU6OlNvZnRMaW5lQnJlYWs7
IH0KQEAgLTg5LDEzICs4NCwyNSBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0Qm94LT5zdHlsZSgpOyB9CiAgICAgICAg
IGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIGxvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9sb2dpY2FsUmVjdDsgfQogICAgICAgICBjb25zdCBPcHRpb25hbDxEaXNwbGF5OjpSdW46OlRl
eHRDb250ZXh0PiYgdGV4dENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9
Ci0gICAgICAgIGJvb2wgaXNDb2xsYXBzZWRUb1Zpc3VhbGx5RW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2lzQ29sbGFwc2VkVG9WaXN1YWxseUVtcHR5OyB9CisKKyAgICAgICAgUnVuKFJ1biYmKSA9
IGRlZmF1bHQ7CisgICAgICAgIFJ1biYgb3BlcmF0b3I9KFJ1biYmIG90aGVyKSA9IGRlZmF1bHQ7
CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTGluZUJ1aWxkZXI7CiAKLSAg
ICAgICAgdm9pZCBhZGp1c3RMb2dpY2FsVG9wKElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcCkg
eyBtX2xvZ2ljYWxSZWN0LnNldFRvcChsb2dpY2FsVG9wKTsgfQorICAgICAgICBSdW4oY29uc3Qg
SW5saW5lVGV4dEl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxXaWR0aCk7CisgICAgICAgIFJ1bihjb25zdCBJbmxpbmVTb2Z0TGluZUJy
ZWFrSXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQpOworICAgICAgICBSdW4oY29u
c3QgSW5saW5lSXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91
dFVuaXQgbG9naWNhbFdpZHRoKTsKKworICAgICAgICB2b2lkIGV4cGFuZChjb25zdCBJbmxpbmVU
ZXh0SXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKTsKKworICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3Qu
d2lkdGgoKTsgfQorCiAgICAgICAgIHZvaWQgbW92ZUhvcml6b250YWxseShJbmxpbmVMYXlvdXRV
bml0IG9mZnNldCkgeyBtX2xvZ2ljYWxSZWN0Lm1vdmVIb3Jpem9udGFsbHkob2Zmc2V0KTsgfQor
ICAgICAgICB2b2lkIHNocmlua0hvcml6b250YWxseShJbmxpbmVMYXlvdXRVbml0IHdpZHRoKSB7
IG1fbG9naWNhbFJlY3QuZXhwYW5kSG9yaXpvbnRhbGx5KC13aWR0aCk7IH0KKworICAgICAgICB2
b2lkIGFkanVzdExvZ2ljYWxUb3AoSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsVG9wKSB7IG1fbG9n
aWNhbFJlY3Quc2V0VG9wKGxvZ2ljYWxUb3ApOyB9CiAgICAgICAgIHZvaWQgbW92ZVZlcnRpY2Fs
bHkoSW5saW5lTGF5b3V0VW5pdCBvZmZzZXQpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlVmVydGljYWxs
eShvZmZzZXQpOyB9CiAgICAgICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodChJbmxpbmVMYXlvdXRV
bml0IGxvZ2ljYWxIZWlnaHQpIHsgbV9sb2dpY2FsUmVjdC5zZXRIZWlnaHQobG9naWNhbEhlaWdo
dCk7IH0KIApAQCAtMTA1LDE3ICsxMTIsMzUgQEAgcHVibGljOgogICAgICAgICB2b2lkIHNldENv
bXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxFeHBhbnNp
b24pOwogICAgICAgICB2b2lkIGFkanVzdEV4cGFuc2lvbkJlaGF2aW9yKEV4cGFuc2lvbkJlaGF2
aW9yKTsKIAorICAgICAgICBlbnVtIGNsYXNzIFRyYWlsaW5nV2hpdGVzcGFjZSB7CisgICAgICAg
ICAgICBOb25lLAorICAgICAgICAgICAgTm90Q29sbGFwc2libGUsCisgICAgICAgICAgICBDb2xs
YXBzaWJsZSwKKyAgICAgICAgICAgIENvbGxhcHNlZAorICAgICAgICB9OworICAgICAgICBib29s
IGhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNw
YWNlVHlwZSAhPSBUcmFpbGluZ1doaXRlc3BhY2U6Ok5vbmU7IH0KKyAgICAgICAgYm9vbCBoYXND
b2xsYXBzaWJsZVRyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdX
aGl0ZXNwYWNlVHlwZSA9PSBUcmFpbGluZ1doaXRlc3BhY2U6OkNvbGxhcHNpYmxlIHx8IGhhc0Nv
bGxhcHNlZFRyYWlsaW5nV2hpdGVzcGFjZSgpOyB9CisgICAgICAgIGJvb2wgaGFzQ29sbGFwc2Vk
VHJhaWxpbmdXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VU
eXBlID09IFRyYWlsaW5nV2hpdGVzcGFjZTo6Q29sbGFwc2VkOyB9CisgICAgICAgIElubGluZUxh
eW91dFVuaXQgdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3RyYWls
aW5nV2hpdGVzcGFjZVdpZHRoOyB9CisgICAgICAgIFRyYWlsaW5nV2hpdGVzcGFjZSB0cmFpbGlu
Z1doaXRlc3BhY2VUeXBlKGNvbnN0IElubGluZVRleHRJdGVtJikgY29uc3Q7CisgICAgICAgIHZv
aWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgIHZvaWQgdmlzdWFsbHlDb2xs
YXBzZVRyYWlsaW5nV2hpdGVzcGFjZSgpOworCisgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdMZXR0
ZXJTcGFjaW5nKCkgY29uc3Q7CisgICAgICAgIElubGluZUxheW91dFVuaXQgdHJhaWxpbmdMZXR0
ZXJTcGFjaW5nKCkgY29uc3Q7CisgICAgICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFj
aW5nKCk7CisKKyAgICAgICAgSW5saW5lSXRlbTo6VHlwZSBtX3R5cGUgeyBJbmxpbmVJdGVtOjpU
eXBlOjpUZXh0IH07CiAgICAgICAgIGNvbnN0IEJveCogbV9sYXlvdXRCb3ggeyBudWxscHRyIH07
Ci0gICAgICAgIElubGluZUl0ZW06OlR5cGUgbV90eXBlOwogICAgICAgICBEaXNwbGF5OjpJbmxp
bmVSZWN0IG1fbG9naWNhbFJlY3Q7CisgICAgICAgIFRyYWlsaW5nV2hpdGVzcGFjZSBtX3RyYWls
aW5nV2hpdGVzcGFjZVR5cGUgeyBUcmFpbGluZ1doaXRlc3BhY2U6Ok5vbmUgfTsKKyAgICAgICAg
SW5saW5lTGF5b3V0VW5pdCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9OwogICAgICAg
ICBPcHRpb25hbDxEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0PiBtX3RleHRDb250ZXh0OwogICAg
ICAgICB1bnNpZ25lZCBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgeyAwIH07Ci0gICAgICAg
IGJvb2wgbV9pc0NvbGxhcHNlZFRvVmlzdWFsbHlFbXB0eSB7IGZhbHNlIH07CiAgICAgfTsKLSAg
ICB1c2luZyBSdW5MaXN0ID0gVmVjdG9yPFJ1biwgNTA+OworICAgIHVzaW5nIFJ1bkxpc3QgPSBW
ZWN0b3I8UnVuLCAxMD47CiAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRl
bnQgeyBObywgWWVzIH07CiAgICAgUnVuTGlzdCBjbG9zZShJc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQgPSBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vKTsKLSAgICBzaXplX3QgcmV2
ZXJ0KGNvbnN0IElubGluZUl0ZW0mIHJldmVydFRvKTsKIAogICAgIHN0YXRpYyBEaXNwbGF5OjpM
aW5lQm94OjpCYXNlbGluZSBoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmLCBJ
bmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KTsKIApAQCAtMTQ0LDk2ICsxNjksNDYg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgpOwog
ICAgIHZvaWQgdmlzdWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKTsKICAgICBI
YW5naW5nQ29udGVudCBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KTsKLSAgICB2b2lkIGFsaWduSG9yaXpvbnRhbGx5KFJ1bkxpc3QmLCBjb25zdCBIYW5n
aW5nQ29udGVudCYsIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7Ci0gICAgdm9pZCBhbGln
bkNvbnRlbnRWZXJ0aWNhbGx5KFJ1bkxpc3QmKTsKKyAgICB2b2lkIGFsaWduSG9yaXpvbnRhbGx5
KGNvbnN0IEhhbmdpbmdDb250ZW50JiwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAg
ICB2b2lkIGFsaWduQ29udGVudFZlcnRpY2FsbHkoKTsKIAogICAgIHZvaWQgYWRqdXN0QmFzZWxp
bmVBbmRMaW5lSGVpZ2h0KGNvbnN0IFJ1biYpOwogICAgIElubGluZUxheW91dFVuaXQgcnVuQ29u
dGVudEhlaWdodChjb25zdCBSdW4mKSBjb25zdDsKIAogICAgIGJvb2wgaXNUZXh0QWxpZ25KdXN0
aWZ5KCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsQWxpZ25tZW50ID09IFRleHRBbGlnbk1v
ZGU6Okp1c3RpZnk7IH07CiAgICAgYm9vbCBpc1RleHRBbGlnblJpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9ob3Jpem9udGFsQWxpZ25tZW50ID09IFRleHRBbGlnbk1vZGU6OlJpZ2h0IHx8IG1faG9y
aXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodCB8fCBtX2hvcml6
b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6RW5kOyB9Ci0gICAgdm9pZCBqdXN0aWZ5
UnVucyhSdW5MaXN0JiwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkgY29uc3Q7Cisg
ICAgdm9pZCBqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKIAot
ICAgIGJvb2wgaXNWaXN1YWxseU5vbkVtcHR5KGNvbnN0IElubGluZUl0ZW1SdW4mKSBjb25zdDsK
KyAgICBib29sIGlzVmlzdWFsbHlOb25FbXB0eShjb25zdCBSdW4mKSBjb25zdDsKIAogICAgIExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0OwogICAgIGNvbnN0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0OwogCi0gICAgY2xhc3MgSW5saW5l
SXRlbVJ1biB7Ci0gICAgcHVibGljOgotICAgICAgICBJbmxpbmVJdGVtUnVuKGNvbnN0IElubGlu
ZUl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aCwgYm9vbCBpc0NvbGxhcHNlZCwgYm9vbCBpc0NvbGxhcHNlZFRvWmVyb0FkdmFu
Y2VXaWR0aCwgRGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dCYmKTsKLSAgICAgICAgSW5saW5lSXRl
bVJ1bihjb25zdCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpOwotCi0gICAgICAgIGNvbnN0IEJveCYgbGF5b3V0
Qm94KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtLmxheW91dEJveCgpOyB9Ci0gICAgICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGxheW91dEJveCgpLnN0
eWxlKCk7IH0KLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9naWNhbExlZnQ7IH0KLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2Fs
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxXaWR0aDsgfQotICAgICAgICBjb25zdCBP
cHRpb25hbDxEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0PiYgdGV4dENvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX3RleHRDb250ZXh0OyB9Ci0KLSAgICAgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7
IHJldHVybiBtX2lubGluZUl0ZW0uaXNUZXh0KCk7IH0KLSAgICAgICAgYm9vbCBpc0JveCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5saW5lSXRlbS5pc0JveCgpOyB9Ci0gICAgICAgIGJvb2wgaXNDb250
YWluZXJTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0
KCk7IH0KLSAgICAgICAgYm9vbCBpc0NvbnRhaW5lckVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5s
aW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpOyB9Ci0gICAgICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBj
b25zdCB7IHJldHVybiBtX2lubGluZUl0ZW0uaXNMaW5lQnJlYWsoKTsgfQotICAgICAgICBJbmxp
bmVJdGVtOjpUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW0udHlwZSgpOyB9
Ci0KLSAgICAgICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xsYXBz
ZWQ7IH0KLQotICAgICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCBv
ZmZzZXQpIHsgbV9sb2dpY2FsTGVmdCArPSBvZmZzZXQ7IH0KLSAgICAgICAgdm9pZCBhZGp1c3RM
b2dpY2FsV2lkdGgoSW5saW5lTGF5b3V0VW5pdCBhZGp1c3RlZFdpZHRoKSB7IG1fbG9naWNhbFdp
ZHRoID0gYWRqdXN0ZWRXaWR0aDsgfQotCi0gICAgICAgIGJvb2wgaXNUcmltbWFibGVXaGl0ZXNw
YWNlKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaGFzVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkgY29u
c3Q7Ci0KLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCB0cmFpbGluZ0xldHRlclNwYWNpbmcoKSBj
b25zdDsKLSAgICAgICAgdm9pZCByZW1vdmVUcmFpbGluZ0xldHRlclNwYWNpbmcoKTsKLQotICAg
ICAgICB2b2lkIHNldENvbGxhcHNlc1RvWmVyb0FkdmFuY2VXaWR0aCgpOwotICAgICAgICBib29s
IGlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsYXBz
ZWRUb1plcm9BZHZhbmNlV2lkdGg7IH0KLQotICAgICAgICBib29sIGlzQ29sbGFwc2libGUoKSBj
b25zdCB7IHJldHVybiBpczxJbmxpbmVUZXh0SXRlbT4obV9pbmxpbmVJdGVtKSAmJiBkb3duY2Fz
dDxJbmxpbmVUZXh0SXRlbT4obV9pbmxpbmVJdGVtKS5pc0NvbGxhcHNpYmxlKCk7IH0KLSAgICAg
ICAgYm9vbCBpc1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBpczxJbmxpbmVUZXh0SXRlbT4o
bV9pbmxpbmVJdGVtKSAmJiBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4obV9pbmxpbmVJdGVtKS5p
c1doaXRlc3BhY2UoKTsgfQotICAgICAgICBib29sIGhhc0VtcHR5VGV4dENvbnRlbnQoKSBjb25z
dDsKLQotICAgICAgICBib29sIGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkgY29uc3QgeyByZXR1
cm4gaXNXaGl0ZXNwYWNlKCkgJiYgIWlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoKCk7IH0K
LQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSW5saW5lSXRlbSYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICZvdGhlciA9PSAmbV9pbmxpbmVJdGVtOyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBJbmxpbmVJdGVtJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0mIG1faW5s
aW5lSXRlbTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2xvZ2ljYWxMZWZ0IHsgMCB9Owot
ICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fbG9naWNhbFdpZHRoIHsgMCB9OwotICAgICAgICBj
b25zdCBPcHRpb25hbDxEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0PiBtX3RleHRDb250ZXh0Owot
ICAgICAgICBib29sIG1faXNDb2xsYXBzZWQgeyBmYWxzZSB9OwotICAgICAgICBib29sIG1fY29s
bGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoIHsgZmFsc2UgfTsKLSAgICB9OwotCi0gICAgdXNpbmcg
SW5saW5lSXRlbVJ1bkxpc3QgPSBWZWN0b3I8SW5saW5lSXRlbVJ1biwgNTA+OwotCiAgICAgc3Ry
dWN0IFRyaW1tYWJsZVRyYWlsaW5nQ29udGVudCB7Ci0gICAgICAgIFRyaW1tYWJsZVRyYWlsaW5n
Q29udGVudChJbmxpbmVJdGVtUnVuTGlzdCYpOworICAgICAgICBUcmltbWFibGVUcmFpbGluZ0Nv
bnRlbnQoUnVuTGlzdCYpOwogCi0gICAgICAgIHZvaWQgYXBwZW5kKHNpemVfdCBydW5JbmRleCk7
CisgICAgICAgIHZvaWQgYWRkRnVsbHlUcmltbWFibGVDb250ZW50KHNpemVfdCBydW5JbmRleCwg
SW5saW5lTGF5b3V0VW5pdCB0cmltbWFibGVXaWR0aCk7CisgICAgICAgIHZvaWQgYWRkUGFydGlh
bGx5VHJpbW1hYmxlQ29udGVudChzaXplX3QgcnVuSW5kZXgsIElubGluZUxheW91dFVuaXQgdHJp
bW1hYmxlV2lkdGgpOwogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHJlbW92ZSgpOwotICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IHJlbW92ZVRyYWlsaW5nUnVuKCk7Ci0gICAgICAgIHZvaWQgcmVz
ZXQoKTsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCByZW1vdmVQYXJ0aWFsbHlUcmltbWFibGVD
b250ZW50KCk7CiAKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fd2lkdGg7IH0KLSAgICAgICAgT3B0aW9uYWw8c2l6ZV90PiBmaXJzdFJ1bkluZGV4KCkg
eyByZXR1cm4gbV9maXJzdFJ1bkluZGV4OyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgd2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2Z1bGx5VHJpbW1hYmxlV2lkdGggKyBtX3BhcnRpYWxseVRy
aW1tYWJsZVdpZHRoOyB9CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFt
X2ZpcnN0UnVuSW5kZXguaGFzVmFsdWUoKTsgfQotICAgICAgICBib29sIGlzVHJhaWxpbmdSdW5G
dWxseVRyaW1tYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJ1bklzRnVsbHlUcmltbWFibGU7
IH0KLSAgICAgICAgYm9vbCBpc1RyYWlsaW5nUnVuUGFydGlhbGx5VHJpbW1hYmxlKCkgY29uc3Qg
eyByZXR1cm4gIWlzRW1wdHkoKSAmJiAhaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCk7IH0K
KyAgICAgICAgYm9vbCBpc1RyYWlsaW5nUnVuRnVsbHlUcmltbWFibGUoKSBjb25zdCB7IHJldHVy
biBtX2hhc0Z1bGx5VHJpbW1hYmxlQ29udGVudDsgfQorICAgICAgICBib29sIGlzVHJhaWxpbmdS
dW5QYXJ0aWFsbHlUcmltbWFibGUoKSBjb25zdCB7IHJldHVybiBtX3BhcnRpYWxseVRyaW1tYWJs
ZVdpZHRoOyB9CisKKyAgICAgICAgdm9pZCByZXNldCgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgSW5saW5lSXRlbVJ1bkxpc3QmIG1faW5saW5laXRlbVJ1bkxpc3Q7CisgICAgICAgIFJ1bkxp
c3QmIG1fcnVuczsKICAgICAgICAgT3B0aW9uYWw8c2l6ZV90PiBtX2ZpcnN0UnVuSW5kZXg7Ci0g
ICAgICAgIElubGluZUxheW91dFVuaXQgbV93aWR0aCB7IDAgfTsKLSAgICAgICAgYm9vbCBtX2xh
c3RSdW5Jc0Z1bGx5VHJpbW1hYmxlIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2hhc0Z1bGx5
VHJpbW1hYmxlQ29udGVudCB7IGZhbHNlIH07CisgICAgICAgIElubGluZUxheW91dFVuaXQgbV9m
dWxseVRyaW1tYWJsZVdpZHRoIHsgMCB9OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fcGFy
dGlhbGx5VHJpbW1hYmxlV2lkdGggeyAwIH07CiAgICAgfTsKIAogICAgIGNvbnN0IElubGluZUZv
cm1hdHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OwotICAgIElubGluZUl0
ZW1SdW5MaXN0IG1faW5saW5lSXRlbVJ1bnM7CisgICAgUnVuTGlzdCBtX3J1bnM7CiAgICAgVHJp
bW1hYmxlVHJhaWxpbmdDb250ZW50IG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50OwogICAgIE9w
dGlvbmFsPERpc3BsYXk6OkxpbmVCb3g6OkJhc2VsaW5lPiBtX2luaXRpYWxTdHJ1dDsKICAgICBJ
bmxpbmVMYXlvdXRVbml0IG1fbGluZUxvZ2ljYWxXaWR0aCB7IDAgfTsKQEAgLTI0Nyw5ICsyMjIs
MjEgQEAgcHJpdmF0ZToKIAogaW5saW5lIHZvaWQgTGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWls
aW5nQ29udGVudDo6cmVzZXQoKQogeworICAgIG1faGFzRnVsbHlUcmltbWFibGVDb250ZW50ID0g
ZmFsc2U7CiAgICAgbV9maXJzdFJ1bkluZGV4ID0geyB9OwotICAgIG1fd2lkdGggPSAwX2x1Owot
ICAgIG1fbGFzdFJ1bklzRnVsbHlUcmltbWFibGUgPSBmYWxzZTsKKyAgICBtX2Z1bGx5VHJpbW1h
YmxlV2lkdGggPSB7IH07CisgICAgbV9wYXJ0aWFsbHlUcmltbWFibGVXaWR0aCA9IHsgfTsKK30K
KworaW5saW5lIExpbmVCdWlsZGVyOjpSdW46OlRyYWlsaW5nV2hpdGVzcGFjZSBMaW5lQnVpbGRl
cjo6UnVuOjp0cmFpbGluZ1doaXRlc3BhY2VUeXBlKGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxp
bmVUZXh0SXRlbSkgY29uc3QKK3sKKyAgICBpZiAoIWlubGluZVRleHRJdGVtLmlzV2hpdGVzcGFj
ZSgpKQorICAgICAgICByZXR1cm4gVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25lOworICAgIGlmICgh
aW5saW5lVGV4dEl0ZW0uaXNDb2xsYXBzaWJsZSgpKQorICAgICAgICByZXR1cm4gVHJhaWxpbmdX
aGl0ZXNwYWNlOjpOb3RDb2xsYXBzaWJsZTsKKyAgICBpZiAoaW5saW5lVGV4dEl0ZW0ubGVuZ3Ro
KCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIFRyYWlsaW5nV2hpdGVzcGFjZTo6Q29sbGFwc2libGU7
CisgICAgcmV0dXJuIFRyYWlsaW5nV2hpdGVzcGFjZTo6Q29sbGFwc2VkOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5l
TGF5b3V0Q29udGV4dC5jcHAKaW5kZXggODA1NjZhN2Q4YzU0NTIwMDQyYzE0NTU5NTA1NzcxZDdk
N2YzNjk2NS4uZjVjNzkxNWQ0MTMwZWVlZDFhYTU3Y2ZkZjUwYjljNGZmNDQ4NzhiNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xp
bmVMYXlvdXRDb250ZXh0LmNwcApAQCAtMjg3LDcgKzI4Nyw3IEBAIExpbmVMYXlvdXRDb250ZXh0
OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6bGF5b3V0TGluZShMaW5lQnVpbGRlciYg
bGluZSwKICAgICAgICAgICAgICAgICBBU1NFUlQoIXJlc3VsdC5jb21taXR0ZWRDb3VudCk7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc0VuZE9mTGluZSA9PSBMaW5lQnJlYWtlcjo6
SXNFbmRPZkxpbmU6Olllcyk7CiAgICAgICAgICAgICAgICAgLy8gQW4gZWFybGllciBsaW5lIHdy
YXBwaW5nIG9wcG9ydHVuaXR5IHR1cm5lZCBvdXQgdG8gYmUgdGhlIGZpbmFsIGJyZWFraW5nIHBv
c2l0aW9uLgotICAgICAgICAgICAgICAgIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCAtPSBsaW5l
LnJldmVydCgqcmVzdWx0LnJldmVydFRvKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lN
UExFTUVOVEVEX1lFVCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29tbWl0dGVkSW5s
aW5lSXRlbUNvdW50ICs9IHJlc3VsdC5jb21taXR0ZWRDb3VudDsKICAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNFbmRPZkxpbmUgPT0gTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpZZXMpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388186</attachid>
            <date>2020-01-19 06:31:38 -0800</date>
            <delta_ts>2020-01-19 08:02:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206479-20200119063137.patch</filename>
            <type>text/plain</type>
            <size>67024</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDA2N2IxOTVhZmQ4YzFj
MmExYWZiMjFjOTRjZjRhZTkxZWQxOWIyNi4uMDYzMzQzY2ViNDZkMjM1Y2Y2YWY0Y2I5ZDI3NjJl
MGM4MzVkNTQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAyMC0wMS0xOCAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gTW92ZSBh
d2F5IGZyb20gcGxhY2luZyBpbmRpdmlkdWFsIElubGluZUl0ZW1zIG9uIHRoZSBsaW5lCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY0NzkKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzU4NzE2MjIzPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRp
IEtvaXZpc3RvLgorCisgICAgICAgIDxkaXY+IHRleHQgY29udGVudCBhbmQgIG1vcmUgICAgPC9k
aXY+CisgICAgICAgIFsgXVt0ZXh0XVsgXVtjb250ZW50XVsgXVthbmRdWyAgXW1vcmVbICAgXQor
CisgICAgICAgIEluc3RlYWQgb2YgcGxhY2luZyBhbGwgdGhlc2UgXl4gaW5saW5lIGl0ZW1zIG9u
IHRoZSBsaW5lIChMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bikgYW5kIG1lcmdlIHRoZW0gYXQg
SW5saW5lQnVpbGRlcjo6Y2xvc2UoKSwKKyAgICAgICAgbGV0J3MgZXhwYW5kIGV4aXN0aW5nIHJ1
bnMoTGluZUJ1aWxkZXI6OlJ1bikgd2hlbiBwb3NzaWJsZSAoW3RleHQgY29udGVudCBhbmQgXVtt
b3JlXSkuCisgICAgICAgIFRoaXMgaGVscHMgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBjb25zdW1w
dGlvbiB3aGVuIHRoZSBsaW5lIGVuZHMgdXAgaGF2aW5nIG1hbnkgaW5saW5lIGl0bWVzIChlLmcu
IHdoaXRlLXNwYWNlOiBub3dyYXApLgorCisgICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rp
c3BsYXlSdW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQ6
OmV4cGFuZCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZSk6CisgICAgICAgICogbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpsaW5l
RGVzY2VudE5lZWRzQ29sbGFwc2luZyBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjph
bGlnbkNvbnRlbnRWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6Omp1c3RpZnlSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxk
ZXI6OmFsaWduSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OnJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjp2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29u
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjb2xsZWN0SGFu
Z2luZ0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFwcGVuZE5vbkJy
ZWFrYWJsZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFw
cGVuZElubGluZUNvbnRhaW5lckVuZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjphcHBlbmRUZXh0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCdWlsZGVyOjphcHBlbmROb25SZXBsYWNlZElubGluZUJveCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjphcHBlbmRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6aXNWaXN1YWxseU5vbkVtcHR5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVu
dDo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRkRnVsbHlUcmltbWFibGVD
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJs
ZVRyYWlsaW5nQ29udGVudDo6YWRkUGFydGlhbGx5VHJpbW1hYmxlQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6
OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFi
bGVUcmFpbGluZ0NvbnRlbnQ6OnJlbW92ZVBhcnRpYWxseVRyaW1tYWJsZUNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpSdW4pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjptX3RleHRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OlJ1bjo6ZXhwYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlJ1bjo6aGFzVHJhaWxpbmdMZXR0ZXJTcGFjaW5nIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6dHJhaWxpbmdMZXR0ZXJTcGFj
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6
cmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlJ1bjo6cmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6dmlzdWFsbHlDb2xsYXBzZVRyYWlsaW5n
V2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46
OmFkanVzdEV4cGFuc2lvbkJlaGF2aW9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OlJ1bjo6ZXhwYW5zaW9uQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpzZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Q29udGludW91c0Nv
bnRlbnQ6OmNhbklubGluZUl0ZW1SdW5CZUV4cGFuZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OkNvbnRpbnVvdXNDb250ZW50OjpDb250aW51b3Vz
Q29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpDb250aW51b3VzQ29udGVudDo6aXNFbGlnaWJsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpDb250aW51b3VzQ29udGVudDo6YXBwZW5k
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OkNvbnRp
bnVvdXNDb250ZW50OjpjbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
Om1faXNDb2xsYXBzZWRUb1Zpc3VhbGx5RW1wdHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpzaG91bGRQcmVzZXJ2ZUxlYWRpbmdDb250ZW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OnJldmVydCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpqdXN0aWZ5UnVucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFibGVU
cmFpbGluZ0NvbnRlbnQ6OmFwcGVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OnJlbW92ZVRyYWlsaW5n
UnVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6Oklu
bGluZUl0ZW1SdW46OklubGluZUl0ZW1SdW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6aXNUcmltbWFibGVXaGl0ZXNwYWNl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OklubGluZUl0ZW1SdW46Omhhc1RyYWlsaW5nTGV0dGVyU3BhY2luZyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjp0
cmFpbGluZ0xldHRlclNwYWNpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6c2V0Q29sbGFwc2VzVG9aZXJvQWR2
YW5jZVdpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxk
ZXI6OklubGluZUl0ZW1SdW46OnJlbW92ZVRyYWlsaW5nTGV0dGVyU3BhY2luZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjpo
YXNFbXB0eVRleHRDb250ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpsb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpzaHJpbmtIb3Jpem9udGFsbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjphZGp1c3RMb2dpY2FsVG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6aGFzVHJhaWxp
bmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxk
ZXI6OlJ1bjo6aGFzQ29sbGFwc2libGVUcmFpbGluZ1doaXRlc3BhY2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6UnVuOjpoYXNDb2xsYXBzZWRUcmFpbGlu
Z1doaXRlc3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRl
cjo6UnVuOjp0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OndpZHRoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRy
YWlsaW5nQ29udGVudDo6aXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVu
dDo6aXNUcmFpbGluZ1J1blBhcnRpYWxseVRyaW1tYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6dHJhaWxpbmdX
aGl0ZXNwYWNlVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWls
ZGVyOjpSdW46OmlzQ29sbGFwc2VkVG9WaXN1YWxseUVtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46OmxheW91
dEJveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWls
ZGVyOjpJbmxpbmVJdGVtUnVuOjpzdHlsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjpsb2dpY2FsTGVmdCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxp
bmVJdGVtUnVuOjpsb2dpY2FsV2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6dGV4dENvbnRleHQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6SW5saW5l
SXRlbVJ1bjo6aXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46OmlzQm94IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46OmlzQ29u
dGFpbmVyU3RhcnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6aXNDb250YWluZXJFbmQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6
aXNMaW5lQnJlYWsgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjppc0NvbGxhcHNl
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
OjpJbmxpbmVJdGVtUnVuOjptb3ZlSG9yaXpvbnRhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46OmFkanVzdExvZ2ljYWxX
aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJ
bmxpbmVJdGVtUnVuOjppc0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVu
Ojppc0NvbGxhcHNpYmxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46OmlzV2hpdGVzcGFjZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVu
OjpoYXNFeHBhbnNpb25PcHBvcnR1bml0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjpvcGVyYXRvcj09IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OklubGlu
ZUl0ZW1SdW46Om9wZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50OjpmaXJzdFJ1bklu
ZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5
b3V0Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250
ZXh0OjpsYXlvdXRMaW5lKToKKwogMjAyMC0wMS0xOCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNTQ3OTApOiBVcGRhdGUgRGVyaXZl
ZFNvdXJjZXMte2lucHV0LG91dHB1dH0ueGNmaWxlbGlzdCB0byBmaXggYnVpbGQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJ1bi5oCmluZGV4IGI3NTViMDlj
ZTRlNWU1NTQyZmY4MWQwZDYwZmYyOTg2MTZhZGJmY2EuLjZlY2QzZDM4N2IyNDM2NmQ5NzQxNzI2
NGI2MmRlZmY4OTIzNTkzOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNw
bGF5dHJlZS9EaXNwbGF5UnVuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0
cmVlL0Rpc3BsYXlSdW4uaApAQCAtNTIsNyArNTIsNyBAQCBzdHJ1Y3QgUnVuIHsKICAgICAgICAg
U3RyaW5nVmlldyBjb250ZW50KCkgY29uc3QgeyByZXR1cm4gU3RyaW5nVmlldyhtX2NvbnRlbnRT
dHJpbmcpLnN1YnN0cmluZyhtX3N0YXJ0LCBtX2xlbmd0aCk7IH0KIAogICAgICAgICBzdHJ1Y3Qg
RXhwYW5zaW9uQ29udGV4dCB7Ci0gICAgICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBiZWhhdmlv
cjsKKyAgICAgICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGJlaGF2aW9yIHsgRGVmYXVsdEV4cGFu
c2lvbiB9OwogICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBob3Jpem9udGFsRXhwYW5zaW9u
IHsgMCB9OwogICAgICAgICB9OwogICAgICAgICB2b2lkIHNldEV4cGFuc2lvbihFeHBhbnNpb25D
b250ZXh0IGV4cGFuc2lvbkNvbnRleHQpIHsgbV9leHBhbnNpb25Db250ZXh0ID0gZXhwYW5zaW9u
Q29udGV4dDsgfQpAQCAtNjAsNyArNjAsNyBAQCBzdHJ1Y3QgUnVuIHsKIAogICAgICAgICBib29s
IG5lZWRzSHlwaGVuKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0h5cGhlbjsgfQogCi0gICAgICAg
IHZvaWQgZXhwYW5kKHVuc2lnbmVkIGV4cGFuZGVkTGVuZ3RoKTsKKyAgICAgICAgdm9pZCBleHBh
bmQodW5zaWduZWQgZGVsdGEpIHsgbV9sZW5ndGggKz0gZGVsdGE7IH0KICAgICAgICAgdm9pZCBz
ZXROZWVkc0h5cGhlbigpIHsgbV9uZWVkc0h5cGhlbiA9IHRydWU7IH0KIAogICAgIHByaXZhdGU6
CkBAIC0xMzMsMTEgKzEzMyw2IEBAIGlubGluZSBSdW46OlRleHRDb250ZXh0OjpUZXh0Q29udGV4
dCh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpCiB7CiB9CiAKLWlu
bGluZSB2b2lkIFJ1bjo6VGV4dENvbnRleHQ6OmV4cGFuZCh1bnNpZ25lZCBleHBhbmRlZExlbmd0
aCkKLXsKLSAgICBtX2xlbmd0aCA9IGV4cGFuZGVkTGVuZ3RoOwotfQotCiB9CiB9CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCBiMmE1MzE4YjY0YjM3MzJh
MzE5ZDVlNDViNGFlNGVhZmZhNTc0OWRjLi43MzMzOTM4Y2Y3YWM3MzZlZDcwOGIxZTY3MjllNGVk
YTkxNmJhMThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC00ODUs
NyArNDg1LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVz
Rm9yTGluZShjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGkKIAogICAgICAgICAvLyBBZGQgZmlu
YWwgZGlzcGxheSBydW5zIHRvIHN0YXRlIGZpcnN0LgogICAgICAgICAvLyBJbmxpbmUgbGV2ZWwg
Y29udGFpbmVycyAoPHNwYW4+KSBkb24ndCBnZW5lcmF0ZSBkaXNwbGF5IHJ1bnMgYW5kIG5laXRo
ZXIgZG8gY29tcGxldGVseSBjb2xsYXBzZWQgcnVucy4KLSAgICAgICAgYXV0byBpbml0aWF0ZXNJ
bmxpbmVSdW4gPSAhbGluZVJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgJiYgIWxpbmVSdW4uaXNDb250
YWluZXJFbmQoKSAmJiAhbGluZVJ1bi5pc0NvbGxhcHNlZFRvVmlzdWFsbHlFbXB0eSgpOworICAg
ICAgICBhdXRvIGluaXRpYXRlc0lubGluZVJ1biA9ICFsaW5lUnVuLmlzQ29udGFpbmVyU3RhcnQo
KSAmJiAhbGluZVJ1bi5pc0NvbnRhaW5lckVuZCgpOwogICAgICAgICBpZiAoaW5pdGlhdGVzSW5s
aW5lUnVuKSB7CiAgICAgICAgICAgICBhdXRvIGNvbXB1dGVkSW5rT3ZlcmZsb3cgPSBbJl0gewog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm9uLXRleHQgaW5rIG92
ZXJmbG93LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmlu
ZGV4IDA4OTY5NzI1OTg4ZTg4Yjk3NDZkNjhiNjZmM2Y5MGRkYmE4OWU0MjQuLmUzNTFjNWVkYzQ4
ODZiMGU2Y2MxNzNiMDUwMzFjYTYyMjQ1ZTdhNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKQEAgLTQ5LDExICs0OSw4IEBAIGJvb2wgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bGluZURlc2NlbnROZWVkc0NvbGxhcHNpbmcoY29uc3Qg
TGluZUJ1aWxkCiAKICAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAocnVuLmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoIXJ1bi5pc0NvbGxhcHNlZFRvVmlzdWFsbHlFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisgICAgICAgIGlm
IChydW4uaXNUZXh0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChy
dW4uaXNDb250YWluZXJTdGFydCgpKSB7CiAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9
IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKICAgICAgICAg
ICAgIGlmIChib3hHZW9tZXRyeS5ob3Jpem9udGFsQm9yZGVyKCkgfHwgKGJveEdlb21ldHJ5Lmhv
cml6b250YWxQYWRkaW5nKCkgJiYgYm94R2VvbWV0cnkuaG9yaXpvbnRhbFBhZGRpbmcoKS52YWx1
ZSgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAppbmRleCBmZTY2M2FhNTllYTVlNWVkZTM4MTIy
ZTRkMTAxMTA2ZDQ2YzJmNTQyLi5hMmZkZWJjNGZkYTllZmNiMjRkNDQxMjgwY2ZmMjMzMzI0NGI4
ZWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVMaW5lQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCkBAIC02NCwxMjkgKzY0LDkgQEAgdm9pZCBI
YW5naW5nQ29udGVudDo6cmVzZXQoKQogICAgIG1fd2lkdGggPSAgMDsKIH0KIAotc3RydWN0IExp
bmVCdWlsZGVyOjpDb250aW51b3VzQ29udGVudCB7Ci1wdWJsaWM6Ci0gICAgQ29udGludW91c0Nv
bnRlbnQoY29uc3QgSW5saW5lSXRlbVJ1biYsIGJvb2wgdGV4dElzQWxpZ25KdXN0aWZ5KTsKLQot
ICAgIGJvb2wgaXNFbGlnaWJsZShjb25zdCBJbmxpbmVJdGVtUnVuJikgY29uc3Q7Ci0gICAgdm9p
ZCBhcHBlbmQoY29uc3QgSW5saW5lSXRlbVJ1biYpOwotICAgIExpbmVCdWlsZGVyOjpSdW4gY2xv
c2UoKTsKLQotICAgIHN0YXRpYyBib29sIGNhbklubGluZUl0ZW1SdW5CZUV4cGFuZGVkKGNvbnN0
IElubGluZUl0ZW1SdW4mIHJ1bikgeyByZXR1cm4gcnVuLmlzVGV4dCgpICYmICFydW4uaXNDb2xs
YXBzZWQoKSAmJiAhcnVuLmlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoKCk7IH0KLQotcHJp
dmF0ZToKLSAgICBjb25zdCBJbmxpbmVJdGVtUnVuJiBtX2luaXRpYWxJbmxpbmVSdW47Ci0gICAg
Y29uc3QgYm9vbCBtX2NvbGxlY3RFeHBhbnNpb25PcHBvcnR1bml0aWVzIHsgZmFsc2UgfTsKLSAg
ICB1bnNpZ25lZCBtX2V4cGFuZGVkTGVuZ3RoIHsgMCB9OwotICAgIElubGluZUxheW91dFVuaXQg
bV9leHBhbmRlZFdpZHRoIHsgMCB9OwotICAgIGJvb2wgbV90cmFpbGluZ1J1bkNhbkJlRXhwYW5k
ZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX2hhc1RyYWlsaW5nRXhwYW5zaW9uT3Bwb3J0dW5pdHkg
eyBmYWxzZSB9OwotICAgIHVuc2lnbmVkIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCB7IDAg
fTsKLX07Ci0KLUxpbmVCdWlsZGVyOjpDb250aW51b3VzQ29udGVudDo6Q29udGludW91c0NvbnRl
bnQoY29uc3QgSW5saW5lSXRlbVJ1biYgaW5pdGlhbElubGluZVJ1biwgYm9vbCB0ZXh0SXNBbGln
bkp1c3RpZnkpCi0gICAgOiBtX2luaXRpYWxJbmxpbmVSdW4oaW5pdGlhbElubGluZVJ1bikKLSAg
ICAsIG1fY29sbGVjdEV4cGFuc2lvbk9wcG9ydHVuaXRpZXModGV4dElzQWxpZ25KdXN0aWZ5ICYm
ICFpc1doaXRlc3BhY2VQcmVzZXJ2ZWQobV9pbml0aWFsSW5saW5lUnVuLnN0eWxlKCkpKSAvLyBE
byBub3QgY29sbGVjdCBleHBhbnNpb24gZGF0YSBvbiBwcmVzZXJ2ZWQgd2hpdGVzcGFjZSBjb250
ZW50ICh3ZSBzaG91bGQgbm90IG11dGF0ZSB0aGUgc3BhY2luZyBiZXR3ZWVuIHJ1bnMgaW4gc3Vj
aCBjYXNlcykuCi17Ci0gICAgLy8gV2Ugc2hvdWxkIG5vdCBjcmVhdGUgYSBDb250aW51b3VzQ29u
dGVudCBvYmplY3Qgd2hlbiBldmVuIHRoZSBpbml0YWwgcnVuIGNhbiBub3QgYmUgZXhwYW5kZWQu
Ci0gICAgQVNTRVJUKGNhbklubGluZUl0ZW1SdW5CZUV4cGFuZGVkKGluaXRpYWxJbmxpbmVSdW4p
KTsKLX0KLQotYm9vbCBMaW5lQnVpbGRlcjo6Q29udGludW91c0NvbnRlbnQ6OmlzRWxpZ2libGUo
Y29uc3QgSW5saW5lSXRlbVJ1biYgaW5saW5lSXRlbVJ1bikgY29uc3QKLXsKLSAgICBpZiAoIW1f
dHJhaWxpbmdSdW5DYW5CZUV4cGFuZGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8g
T25seSBub24tY29sbGFwc2VkIHRleHQgcnVucyB3aXRoIHRoZSBzYW1lIGxheW91dCBib3ggY2Fu
IGJlIGFkZGVkIGFzIGNvbnRpbnVvdXMgY29udGVudC4KLSAgICByZXR1cm4gaW5saW5lSXRlbVJ1
bi5pc1RleHQoKSAmJiAhaW5saW5lSXRlbVJ1bi5pc0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0
aCgpICYmICZtX2luaXRpYWxJbmxpbmVSdW4ubGF5b3V0Qm94KCkgPT0gJmlubGluZUl0ZW1SdW4u
bGF5b3V0Qm94KCk7Ci19Ci0KLXZvaWQgTGluZUJ1aWxkZXI6OkNvbnRpbnVvdXNDb250ZW50Ojph
cHBlbmQoY29uc3QgSW5saW5lSXRlbVJ1biYgaW5saW5lSXRlbVJ1bikKLXsKLSAgICAvLyBNZXJn
ZWQgY29udGVudCBuZWVkcyB0byBiZSBjb250aW51b3VzLgotICAgIEFTU0VSVChpc0VsaWdpYmxl
KGlubGluZUl0ZW1SdW4pKTsKLSAgICBtX3RyYWlsaW5nUnVuQ2FuQmVFeHBhbmRlZCA9IGNhbklu
bGluZUl0ZW1SdW5CZUV4cGFuZGVkKGlubGluZUl0ZW1SdW4pOwotCi0gICAgQVNTRVJUKGlubGlu
ZUl0ZW1SdW4uaXNUZXh0KCkpOwotICAgIG1fZXhwYW5kZWRMZW5ndGggKz0gaW5saW5lSXRlbVJ1
bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKTsKLSAgICBtX2V4cGFuZGVkV2lkdGggKz0gaW5saW5l
SXRlbVJ1bi5sb2dpY2FsV2lkdGgoKTsKLQotICAgIGlmIChtX2NvbGxlY3RFeHBhbnNpb25PcHBv
cnR1bml0aWVzKSB7Ci0gICAgICAgIG1faGFzVHJhaWxpbmdFeHBhbnNpb25PcHBvcnR1bml0eSA9
IGlubGluZUl0ZW1SdW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKTsKLSAgICAgICAgaWYgKG1f
aGFzVHJhaWxpbmdFeHBhbnNpb25PcHBvcnR1bml0eSkKLSAgICAgICAgICAgICsrbV9leHBhbnNp
b25PcHBvcnR1bml0eUNvdW50OwotICAgIH0KLX0KLQotTGluZUJ1aWxkZXI6OlJ1biBMaW5lQnVp
bGRlcjo6Q29udGludW91c0NvbnRlbnQ6OmNsb3NlKCkKLXsKLSAgICBpZiAoIW1fZXhwYW5kZWRM
ZW5ndGgpCi0gICAgICAgIHJldHVybiB7IG1faW5pdGlhbElubGluZVJ1biB9OwotICAgIC8vIEV4
cGFuZCB0aGUgdGV4dCBjb250ZW50IGFuZCBzZXQgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0aWVz
LgotICAgIEFTU0VSVChtX2luaXRpYWxJbmxpbmVSdW4uaXNUZXh0KCkpOwotICAgIGF1dG8gdGV4
dENvbnRleHQgPSAqbV9pbml0aWFsSW5saW5lUnVuLnRleHRDb250ZXh0KCk7Ci0gICAgYXV0byBs
ZW5ndGggPSB0ZXh0Q29udGV4dC5sZW5ndGgoKSArIG1fZXhwYW5kZWRMZW5ndGg7Ci0gICAgdGV4
dENvbnRleHQuZXhwYW5kKGxlbmd0aCk7Ci0KLSAgICBpZiAobV9jb2xsZWN0RXhwYW5zaW9uT3Bw
b3J0dW5pdGllcykgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGV4
cGFuc2lvbiBtZXJnZS4gV2Ugc2hvdWxkIGV2ZW50dWFsbHkgc3dpdGNoIG92ZXIgdG8gRm9udENh
c2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQuCi0gICAgICAgIEV4cGFuc2lvbkJlaGF2
aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gbV9oYXNUcmFpbGluZ0V4cGFuc2lvbk9wcG9ydHVuaXR5
ID8gKEZvcmJpZExlYWRpbmdFeHBhbnNpb24gfCBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSA6IChB
bGxvd0xlYWRpbmdFeHBhbnNpb24gfCBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKTsKLSAgICAgICAg
aWYgKG1faW5pdGlhbElubGluZVJ1bi5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKQotICAgICAg
ICAgICAgKyttX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7Ci0gICAgICAgIHRleHRDb250ZXh0
LnNldEV4cGFuc2lvbih7IGV4cGFuc2lvbkJlaGF2aW9yLCB7IH0gfSk7Ci0gICAgfQotICAgIHJl
dHVybiB7IG1faW5pdGlhbElubGluZVJ1biwgIERpc3BsYXk6OklubGluZVJlY3QgeyAwX2x1LCBt
X2luaXRpYWxJbmxpbmVSdW4ubG9naWNhbExlZnQoKSwgbV9pbml0aWFsSW5saW5lUnVuLmxvZ2lj
YWxXaWR0aCgpICsgbV9leHBhbmRlZFdpZHRoLCAwX2x1IH0sIHRleHRDb250ZXh0LCBtX2V4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQgfTsKLX0KLQotTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNvbnN0
IElubGluZUl0ZW1SdW4mIGlubGluZUl0ZW1SdW4pCi0gICAgOiBtX2xheW91dEJveCgmaW5saW5l
SXRlbVJ1bi5sYXlvdXRCb3goKSkKLSAgICAsIG1fdHlwZShpbmxpbmVJdGVtUnVuLnR5cGUoKSkK
LSAgICAsIG1fbG9naWNhbFJlY3QoeyAwX2x1LCBpbmxpbmVJdGVtUnVuLmxvZ2ljYWxMZWZ0KCks
IGlubGluZUl0ZW1SdW4ubG9naWNhbFdpZHRoKCksIDBfbHUgfSkKLSAgICAsIG1fdGV4dENvbnRl
eHQoaW5saW5lSXRlbVJ1bi50ZXh0Q29udGV4dCgpKQotICAgICwgbV9pc0NvbGxhcHNlZFRvVmlz
dWFsbHlFbXB0eShpbmxpbmVJdGVtUnVuLmlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoKCkp
Ci17Ci0gICAgaWYgKGlubGluZUl0ZW1SdW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgewot
ICAgICAgICBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAxOwotICAgICAgICBBU1NFUlQo
bV90ZXh0Q29udGV4dCk7Ci0gICAgICAgIG1fdGV4dENvbnRleHQtPnNldEV4cGFuc2lvbih7IERl
ZmF1bHRFeHBhbnNpb24sIHsgfSB9KTsKLSAgICB9Ci19Ci0KLUxpbmVCdWlsZGVyOjpSdW46OlJ1
bihjb25zdCBJbmxpbmVJdGVtUnVuJiBpbmxpbmVJdGVtUnVuLCBjb25zdCBEaXNwbGF5OjpJbmxp
bmVSZWN0JiBsb2dpY2FsUmVjdCwgY29uc3QgRGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dCYgdGV4
dENvbnRleHQsIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCi0gICAgOiBtX2xh
eW91dEJveCgmaW5saW5lSXRlbVJ1bi5sYXlvdXRCb3goKSkKLSAgICAsIG1fdHlwZShpbmxpbmVJ
dGVtUnVuLnR5cGUoKSkKLSAgICAsIG1fbG9naWNhbFJlY3QobG9naWNhbFJlY3QpCi0gICAgLCBt
X3RleHRDb250ZXh0KHRleHRDb250ZXh0KQotICAgICwgbV9leHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCi0gICAgLCBtX2lzQ29sbGFwc2VkVG9WaXN1
YWxseUVtcHR5KGlubGluZUl0ZW1SdW4uaXNDb2xsYXBzZWRUb1plcm9BZHZhbmNlV2lkdGgoKSkK
LXsKLX0KLQotdm9pZCBMaW5lQnVpbGRlcjo6UnVuOjphZGp1c3RFeHBhbnNpb25CZWhhdmlvcihF
eHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKLXsKLSAgICBBU1NFUlQoaXNUZXh0
KCkpOwotICAgIEFTU0VSVChoYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKTsKLSAgICBtX3RleHRD
b250ZXh0LT5zZXRFeHBhbnNpb24oeyBleHBhbnNpb25CZWhhdmlvciwgbV90ZXh0Q29udGV4dC0+
ZXhwYW5zaW9uKCktPmhvcml6b250YWxFeHBhbnNpb24gfSk7Ci19Ci0KLWlubGluZSBPcHRpb25h
bDxFeHBhbnNpb25CZWhhdmlvcj4gTGluZUJ1aWxkZXI6OlJ1bjo6ZXhwYW5zaW9uQmVoYXZpb3Io
KSBjb25zdAotewotICAgIEFTU0VSVChpc1RleHQoKSk7Ci0gICAgaWYgKGF1dG8gZXhwYW5zaW9u
Q29udGV4dCA9IG1fdGV4dENvbnRleHQtPmV4cGFuc2lvbigpKQotICAgICAgICByZXR1cm4gZXhw
YW5zaW9uQ29udGV4dC0+YmVoYXZpb3I7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotdm9pZCBMaW5l
QnVpbGRlcjo6UnVuOjpzZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNpb24oSW5saW5lTGF5b3V0
VW5pdCBsb2dpY2FsRXhwYW5zaW9uKQotewotICAgIEFTU0VSVChpc1RleHQoKSk7Ci0gICAgQVNT
RVJUKGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpOwotICAgIG1fbG9naWNhbFJlY3QuZXhwYW5k
SG9yaXpvbnRhbGx5KGxvZ2ljYWxFeHBhbnNpb24pOwotICAgIG1fdGV4dENvbnRleHQtPnNldEV4
cGFuc2lvbih7IG1fdGV4dENvbnRleHQtPmV4cGFuc2lvbigpLT5iZWhhdmlvciwgbG9naWNhbEV4
cGFuc2lvbiB9KTsKLX0KLQogTGluZUJ1aWxkZXI6OkxpbmVCdWlsZGVyKGNvbnN0IElubGluZUZv
cm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgT3B0aW9uYWw8VGV4dEFs
aWduTW9kZT4gaG9yaXpvbnRhbEFsaWdubWVudCwgSW50cmluc2ljU2l6aW5nIGludHJpbnNpY1Np
emluZykKICAgICA6IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQpCi0gICAgLCBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudChtX2lubGluZUl0ZW1SdW5z
KQorICAgICwgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQobV9ydW5zKQogICAgICwgbV9ob3Jp
em9udGFsQWxpZ25tZW50KGhvcml6b250YWxBbGlnbm1lbnQpCiAgICAgLCBtX2lzSW50cmluc2lj
U2l6aW5nKGludHJpbnNpY1NpemluZyA9PSBJbnRyaW5zaWNTaXppbmc6OlllcykKICAgICAsIG1f
c2hvdWxkSWdub3JlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkubGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJs
ZWQoKSkKQEAgLTIxNiwxOSArOTYsMTEgQEAgdm9pZCBMaW5lQnVpbGRlcjo6aW5pdGlhbGl6ZShj
b25zdCBDb25zdHJhaW50cyYgY29uc3RyYWludHMpCiAgICAgbV9saW5lTG9naWNhbFdpZHRoID0g
Y29uc3RyYWludHMuYXZhaWxhYmxlTG9naWNhbFdpZHRoOwogICAgIG1faGFzSW50cnVzaXZlRmxv
YXQgPSBjb25zdHJhaW50cy5saW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQ7CiAKLSAgICBtX2lubGlu
ZUl0ZW1SdW5zLmNsZWFyKCk7CisgICAgbV9ydW5zLmNsZWFyKCk7CiAgICAgbV90cmltbWFibGVU
cmFpbGluZ0NvbnRlbnQucmVzZXQoKTsKICAgICBtX2xpbmVJc1Zpc3VhbGx5RW1wdHlCZWZvcmVU
cmltbWFibGVUcmFpbGluZ0NvbnRlbnQgPSB7IH07CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBz
aG91bGRQcmVzZXJ2ZUxlYWRpbmdDb250ZW50KGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVU
ZXh0SXRlbSkKLXsKLSAgICBpZiAoIWlubGluZVRleHRJdGVtLmlzV2hpdGVzcGFjZSgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBhdXRvIHdoaXRlc3BhY2UgPSBpbmxpbmVUZXh0SXRlbS5z
dHlsZSgpLndoaXRlU3BhY2UoKTsKLSAgICByZXR1cm4gd2hpdGVzcGFjZSA9PSBXaGl0ZVNwYWNl
OjpQcmUgfHwgd2hpdGVzcGFjZSA9PSBXaGl0ZVNwYWNlOjpQcmVXcmFwIHx8IHdoaXRlc3BhY2Ug
PT0gV2hpdGVTcGFjZTo6QnJlYWtTcGFjZXM7Ci19Ci0KIExpbmVCdWlsZGVyOjpSdW5MaXN0IExp
bmVCdWlsZGVyOjpjbG9zZShJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50KQogewogICAgIC8vIDEuIFJlbW92ZSB0cmltbWFibGUgdHJhaWxpbmcg
Y29udGVudC4KQEAgLTIzOCwyOCArMTEwLDggQEAgTGluZUJ1aWxkZXI6OlJ1bkxpc3QgTGluZUJ1
aWxkZXI6OmNsb3NlKElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2kKICAg
ICB2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpOwogICAgIGF1dG8gaGFu
Z2luZ0NvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoaXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KTsKIAotICAgIGF1dG8gbWVyZ2VkSW5saW5lSXRlbVJ1bnMgPSBbJl0gewotICAgICAg
ICBSdW5MaXN0IHJ1bkxpc3Q7Ci0gICAgICAgIHVuc2lnbmVkIHJ1bkluZGV4ID0gMDsKLSAgICAg
ICAgd2hpbGUgKHJ1bkluZGV4IDwgbV9pbmxpbmVJdGVtUnVucy5zaXplKCkpIHsKLSAgICAgICAg
ICAgIC8vIE1lcmdlIGVsaWdpYmxlIHJ1bnMuCi0gICAgICAgICAgICBhdXRvJiBpbmxpbmVJdGVt
UnVuID0gbV9pbmxpbmVJdGVtUnVuc1tydW5JbmRleF07Ci0gICAgICAgICAgICBpZiAoIUNvbnRp
bnVvdXNDb250ZW50OjpjYW5JbmxpbmVJdGVtUnVuQmVFeHBhbmRlZChpbmxpbmVJdGVtUnVuKSkg
ewotICAgICAgICAgICAgICAgIHJ1bkxpc3QuYXBwZW5kKHsgaW5saW5lSXRlbVJ1biB9KTsKLSAg
ICAgICAgICAgICAgICArK3J1bkluZGV4OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYXV0byBtZXJnZWRSdW5zID0gQ29udGludW91c0NvbnRl
bnQgeyBpbmxpbmVJdGVtUnVuLCBpc1RleHRBbGlnbkp1c3RpZnkoKSB9OwotICAgICAgICAgICAg
Zm9yIChydW5JbmRleCA9IHJ1bkluZGV4ICsgMTsgcnVuSW5kZXggPCBtX2lubGluZUl0ZW1SdW5z
LnNpemUoKSAmJiBtZXJnZWRSdW5zLmlzRWxpZ2libGUobV9pbmxpbmVJdGVtUnVuc1tydW5JbmRl
eF0pOyArK3J1bkluZGV4KQotICAgICAgICAgICAgICAgIG1lcmdlZFJ1bnMuYXBwZW5kKG1faW5s
aW5lSXRlbVJ1bnNbcnVuSW5kZXhdKTsKLSAgICAgICAgICAgIHJ1bkxpc3QuYXBwZW5kKG1lcmdl
ZFJ1bnMuY2xvc2UoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJ1bkxpc3Q7Ci0gICAg
fTsKLQotICAgIGF1dG8gcnVuTGlzdCA9IG1lcmdlZElubGluZUl0ZW1SdW5zKCk7CiAgICAgaWYg
KCFtX2lzSW50cmluc2ljU2l6aW5nKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcnVuIDogcnVuTGlz
dCkgeworICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgewogICAgICAgICAgICAgYWRq
dXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KHJ1bik7CiAgICAgICAgICAgICBydW4uc2V0TG9naWNh
bEhlaWdodChydW5Db250ZW50SGVpZ2h0KHJ1bikpOwogICAgICAgICB9CkBAIC0yNjgsNzcgKzEy
MCwyMSBAQCBMaW5lQnVpbGRlcjo6UnVuTGlzdCBMaW5lQnVpbGRlcjo6Y2xvc2UoSXNMYXN0TGlu
ZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaQogICAgICAgICAgICAgbV9saW5lQm94LnNl
dExvZ2ljYWxIZWlnaHQoMF9sdSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gUmVtb3ZlIGRlc2Nl
bnQgd2hlbiBhbGwgY29udGVudCBpcyBiYXNlbGluZSBhbGlnbmVkIGJ1dCBub25lIG9mIHRoZW0g
aGF2ZSBkZXNjZW50LgotICAgICAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5s
aW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhydW5MaXN0KSkgeworICAgICAgICBpZiAoZm9ybWF0
dGluZ0NvbnRleHQoKS5xdWlya3MoKS5saW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhtX3J1bnMp
KSB7CiAgICAgICAgICAgICBtX2xpbmVCb3guc2hyaW5rVmVydGljYWxseShtX2xpbmVCb3guYmFz
ZWxpbmUoKS5kZXNjZW50KCkpOwogICAgICAgICAgICAgbV9saW5lQm94LnJlc2V0RGVzY2VudCgp
OwogICAgICAgICB9Ci0gICAgICAgIGFsaWduQ29udGVudFZlcnRpY2FsbHkocnVuTGlzdCk7Ci0g
ICAgICAgIGFsaWduSG9yaXpvbnRhbGx5KHJ1bkxpc3QsIGhhbmdpbmdDb250ZW50LCBpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQpOwotICAgIH0KLSAgICByZXR1cm4gcnVuTGlzdDsKLX0KLQot
c2l6ZV90IExpbmVCdWlsZGVyOjpyZXZlcnQoY29uc3QgSW5saW5lSXRlbSYgcmV2ZXJ0VG8pCi17
Ci0gICAgaWYgKG1faW5saW5lSXRlbVJ1bnMubGFzdCgpID09IHJldmVydFRvKSB7Ci0gICAgICAg
IC8vIFNpbmNlIHRoZSBMaW5lQnJlYWtlciBkb2VzIG5vdCBrbm93IHdoYXQgaGFzIGJlZW4gcHVz
aGVkIG9uIHRoZSBjdXJyZW50IGxpbmUKLSAgICAgICAgLy8gaW4gc29tZSBjYXNlcyByZXZlcnQo
KSBpcyBjYWxsZWQgd2l0aCB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaW5lLgotICAgICAgICByZXR1
cm4geyB9OwotICAgIH0KLSAgICAvLyAxLiBSZW1vdmUgYW5kIHNocmluayB0aGUgdHJhaWxpbmcg
Y29udGVudC4KLSAgICAvLyAyLiBSZWJ1aWxkIHRyaW1tYWJsZSB0cmFpbGluZyB3aGl0ZXNwYWNl
IGNvbnRlbnQuCi0gICAgQVNTRVJUKCFtX2lubGluZUl0ZW1SdW5zLmlzRW1wdHkoKSk7Ci0gICAg
YXV0byByZXZlcnRlZFdpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgYXV0byBvcmln
aW5hbFNpemUgPSBtX2lubGluZUl0ZW1SdW5zLnNpemUoKTsKLSAgICBpbnQ2NF90IGluZGV4ID0g
c3RhdGljX2Nhc3Q8aW50NjRfdD4ob3JpZ2luYWxTaXplIC0gMSk7Ci0gICAgd2hpbGUgKGluZGV4
ID49IDAgJiYgbV9pbmxpbmVJdGVtUnVuc1tpbmRleF0gIT0gcmV2ZXJ0VG8pCi0gICAgICAgIHJl
dmVydGVkV2lkdGggKz0gbV9pbmxpbmVJdGVtUnVuc1tpbmRleC0tXS5sb2dpY2FsV2lkdGgoKTsK
LSAgICBtX2xpbmVCb3guc2hyaW5rSG9yaXpvbnRhbGx5KHJldmVydGVkV2lkdGgpOwotICAgIG1f
aW5saW5lSXRlbVJ1bnMuc2hyaW5rKGluZGV4ICsgMSk7Ci0gICAgLy8gU2hvdWxkIG5ldmVyIG5l
ZWQgdG8gY2xlYXIgdGhlIGxpbmUuCi0gICAgQVNTRVJUKCFtX2lubGluZUl0ZW1SdW5zLmlzRW1w
dHkoKSk7Ci0KLSAgICAvLyBJdCdzIGVhc2llciBqdXN0IHRvIHJlYnVpbGQgdHJhaWxpbmcgdHJp
bW1hYmxlIGNvbnRlbnQuCi0gICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQucmVzZXQoKTsK
LSAgICBtX2xpbmVJc1Zpc3VhbGx5RW1wdHlCZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQg
PSBpc1Zpc3VhbGx5RW1wdHkoKTsKLSAgICAvLyBGaW5kIHRoZSBmaXJzdCB0cmltbWFibGUgcnVu
LgotICAgIE9wdGlvbmFsPHNpemVfdD4gZmlyc3RUcmltbWFibGVSdW5JbmRleDsKLSAgICBmb3Ig
KGF1dG8gaW5kZXggPSBtX2lubGluZUl0ZW1SdW5zLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAg
ICAgYXV0byYgaW5saW5lSXRlbVJ1biA9IG1faW5saW5lSXRlbVJ1bnNbaW5kZXhdOwotICAgICAg
ICBpZiAoaW5saW5lSXRlbVJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgaW5saW5lSXRlbVJ1bi5p
c0NvbnRhaW5lckVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8gaGFz
VHJhaWxpbmdUcmltbWFibGVDb250ZW50ID0gaW5saW5lSXRlbVJ1bi5pc1RyaW1tYWJsZVdoaXRl
c3BhY2UoKSB8fCBpbmxpbmVJdGVtUnVuLmhhc1RyYWlsaW5nTGV0dGVyU3BhY2luZygpOwotICAg
ICAgICBpZiAoIWhhc1RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBpZiAoaW5saW5lSXRlbVJ1bi5pc1RyaW1tYWJsZVdoaXRlc3BhY2UoKSkgewot
ICAgICAgICAgICAgZmlyc3RUcmltbWFibGVSdW5JbmRleCA9IGluZGV4OwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlubGluZUl0ZW1SdW4uaGFzVHJhaWxp
bmdMZXR0ZXJTcGFjaW5nKCkpIHsKLSAgICAgICAgICAgIC8vIFdoaWxlIHRyYWlsaW5nIGxldHRl
ciBzcGFjaW5nIGlzIGNvbnNpZGVyZWQgdHJpbW1hYmxlLCBpdCBpcyBzdXBwb3NlZCB0byBiZSBs
YXN0IG9uZSBpbiB0aGUgbGlzdC4KLSAgICAgICAgICAgIGZpcnN0VHJpbW1hYmxlUnVuSW5kZXgg
PSBpbmRleDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIEZv
cndhcmQtYXBwZW5kIHJ1bnMgdG8gbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQuIAotICAgIGlm
IChmaXJzdFRyaW1tYWJsZVJ1bkluZGV4KSB7Ci0gICAgICAgIGZvciAoYXV0byBpbmRleCA9ICpm
aXJzdFRyaW1tYWJsZVJ1bkluZGV4OyBpbmRleCA8IG1faW5saW5lSXRlbVJ1bnMuc2l6ZSgpOyAr
K2luZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBpbmxpbmVJdGVtUnVuID0gbV9pbmxpbmVJdGVt
UnVuc1tpbmRleF07Ci0gICAgICAgICAgICBpZiAoaW5saW5lSXRlbVJ1bi5pc0NvbnRhaW5lclN0
YXJ0KCkgfHwgaW5saW5lSXRlbVJ1bi5pc0NvbnRhaW5lckVuZCgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgQVNTRVJUKGlubGluZUl0ZW1SdW4uaXNUZXh0KCkpOwot
ICAgICAgICAgICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQuYXBwZW5kKGluZGV4KTsKLSAg
ICAgICAgfQorICAgICAgICBhbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KCk7CisgICAgICAgIGFsaWdu
SG9yaXpvbnRhbGx5KGhhbmdpbmdDb250ZW50LCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQp
OwogICAgIH0KLSAgICAvLyBDb25zaWRlciBhbHRlcm5hdGl2ZSBzb2x1dGlvbnMgaWYgdGhlIChl
ZGdlIGNhc2UpcmV2ZXJ0IGdldHMgb3Zlcmx5IGNvbXBsaWNhdGVkLgotICAgIHJldHVybiBvcmln
aW5hbFNpemUgLSBtX2lubGluZUl0ZW1SdW5zLnNpemUoKTsKKyAgICByZXR1cm4gV1RGTW92ZSht
X3J1bnMpOwogfQogCi12b2lkIExpbmVCdWlsZGVyOjphbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KFJ1
bkxpc3QmIHJ1bkxpc3QpCit2b2lkIExpbmVCdWlsZGVyOjphbGlnbkNvbnRlbnRWZXJ0aWNhbGx5
KCkKIHsKICAgICBBU1NFUlQoIW1faXNJbnRyaW5zaWNTaXppbmcpOwogICAgIGF1dG8gc2Nyb2xs
YWJsZU92ZXJmbG93UmVjdCA9IG1fbGluZUJveC5sb2dpY2FsUmVjdCgpOwotICAgIGZvciAoYXV0
byYgcnVuIDogcnVuTGlzdCkgeworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CiAgICAg
ICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcCA9IDA7CiAgICAgICAgIGF1dG8mIGxheW91
dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduID0gbGF5
b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpOwpAQCAtMzkzLDE2ICsxODksMTUgQEAgdm9p
ZCBMaW5lQnVpbGRlcjo6YWxpZ25Db250ZW50VmVydGljYWxseShSdW5MaXN0JiBydW5MaXN0KQog
ICAgIG1fbGluZUJveC5zZXRTY3JvbGxhYmxlT3ZlcmZsb3coc2Nyb2xsYWJsZU92ZXJmbG93UmVj
dCk7CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6Omp1c3RpZnlSdW5zKFJ1bkxpc3QmIHJ1bkxpc3Qs
IElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpIGNvbnN0Cit2b2lkIExpbmVCdWlsZGVy
OjpqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQogewotICAgIEFT
U0VSVCghcnVuTGlzdC5pc0VtcHR5KCkpOwogICAgIEFTU0VSVChhdmFpbGFibGVXaWR0aCA+IDAp
OwogICAgIC8vIENvbGxlY3QgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0eSBudW1iZXJzIGFuZCBm
aW5kIHRoZSBsYXN0IHJ1biB3aXRoIGNvbnRlbnQuCiAgICAgYXV0byBleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50ID0gMDsKICAgICBSdW4qIGxhc3RSdW5XaXRoQ29udGVudCA9IG51bGxwdHI7Ci0g
ICAgZm9yIChhdXRvJiBydW4gOiBydW5MaXN0KSB7CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1
bnMpIHsKICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCArPSBydW4uZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudCgpOwotICAgICAgICBpZiAoKHJ1bi5pc1RleHQoKSAmJiAhcnVuLmlz
Q29sbGFwc2VkVG9WaXN1YWxseUVtcHR5KCkpIHx8IHJ1bi5pc0JveCgpKQorICAgICAgICBpZiAo
cnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0JveCgpKQogICAgICAgICAgICAgbGFzdFJ1bldpdGhDb250
ZW50ID0gJnJ1bjsKICAgICB9CiAgICAgLy8gTmVlZCB0byBmaXggdXAgdGhlIGxhc3QgcnVuJ3Mg
dHJhaWxpbmcgZXhwYW5zaW9uLgpAQCAtNDE3LDcgKzIxMiw3IEBAIHZvaWQgTGluZUJ1aWxkZXI6
Omp1c3RpZnlSdW5zKFJ1bkxpc3QmIHJ1bkxpc3QsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgpCiAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2UuCiAgICAgYXV0byBleHBh
bnNpb25Ub0Rpc3RyaWJ1dGUgPSBhdmFpbGFibGVXaWR0aCAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQ7CiAgICAgSW5saW5lTGF5b3V0VW5pdCBhY2N1bXVsYXRlZEV4cGFuc2lvbiA9IDA7Ci0g
ICAgZm9yIChhdXRvJiBydW4gOiBydW5MaXN0KSB7CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1
bnMpIHsKICAgICAgICAgLy8gRXhwYW5kIGFuZCBtb3ZlcyBydW5zIGJ5IHRoZSBhY2N1bXVsYXRl
ZCBleHBhbnNpb24uCiAgICAgICAgIGlmICghcnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkp
IHsKICAgICAgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9u
KTsKQEAgLTQzMSwxNyArMjI2LDE3IEBAIHZvaWQgTGluZUJ1aWxkZXI6Omp1c3RpZnlSdW5zKFJ1
bkxpc3QmIHJ1bkxpc3QsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCiAgICAgfQog
fQogCi12b2lkIExpbmVCdWlsZGVyOjphbGlnbkhvcml6b250YWxseShSdW5MaXN0JiBydW5MaXN0
LCBjb25zdCBIYW5naW5nQ29udGVudCYgaGFuZ2luZ0NvbnRlbnQsIElzTGFzdExpbmVXaXRoSW5s
aW5lQ29udGVudCBsYXN0TGluZSkKK3ZvaWQgTGluZUJ1aWxkZXI6OmFsaWduSG9yaXpvbnRhbGx5
KGNvbnN0IEhhbmdpbmdDb250ZW50JiBoYW5naW5nQ29udGVudCwgSXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50IGxhc3RMaW5lKQogewogICAgIEFTU0VSVCghbV9pc0ludHJpbnNpY1NpemluZyk7
CiAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IHRoaXMtPmF2YWlsYWJsZVdpZHRoKCkgKyBoYW5n
aW5nQ29udGVudC53aWR0aCgpOwotICAgIGlmIChydW5MaXN0LmlzRW1wdHkoKSB8fCBhdmFpbGFi
bGVXaWR0aCA8PSAwKQorICAgIGlmIChtX3J1bnMuaXNFbXB0eSgpIHx8IGF2YWlsYWJsZVdpZHRo
IDw9IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc1RleHRBbGlnbkp1c3RpZnkoKSkg
ewogICAgICAgICAvLyBEbyBub3QganVzdGlmeSBhbGlnbiB0aGUgbGFzdCBsaW5lLgogICAgICAg
ICBpZiAobGFzdExpbmUgPT0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObykKLSAgICAg
ICAgICAgIGp1c3RpZnlSdW5zKHJ1bkxpc3QsIGF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgICAg
IGp1c3RpZnlSdW5zKGF2YWlsYWJsZVdpZHRoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtNDc0LDE4ICsyNjksMTggQEAgdm9pZCBMaW5lQnVpbGRlcjo6YWxpZ25Ib3Jpem9udGFsbHko
UnVuTGlzdCYgcnVuTGlzdCwgY29uc3QgSGFuZ2luZ0NvbnRlbnQmIGhhbmcKICAgICAvLyBlLmcu
IDxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgd2lkdGg6IDEwMHB4OyI+Y2VudGVyZWQg
dGV4dDwvZGl2PiA6IHRoZSBsaW5lIGJveCB3aWxsIGFsc28gYmUgY2VudGVyZWQKICAgICAvLyBh
cyBvcHBvc2VkIHRvIHN0YXJ0IGF0IDBweCBhbGwgdGhlIHdheSB0byBbY2VudGVyZWQgdGV4dF0g
cnVuJ3MgcmlnaHQgZWRnZS4KICAgICBtX2xpbmVCb3gubW92ZUhvcml6b250YWxseSgqYWRqdXN0
bWVudCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBydW5MaXN0KQorICAgIGZvciAoYXV0byYgcnVu
IDogbV9ydW5zKQogICAgICAgICBydW4ubW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7CiB9
CiAKIHZvaWQgTGluZUJ1aWxkZXI6OnJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgpCiB7
Ci0gICAgaWYgKG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LmlzRW1wdHkoKSB8fCBtX2lubGlu
ZUl0ZW1SdW5zLmlzRW1wdHkoKSkKKyAgICBpZiAobV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQu
aXNFbXB0eSgpIHx8IG1fcnVucy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IENvbXBsZXggbGluZSBsYXlvdXQgcXVpcms6IGtlZXAgdGhlIHRyYWlsaW5nIHdoaXRlc3BhY2Ug
YXJvdW5kIHdoZW4gaXQgaXMgZm9sbG93ZWQgYnkgYSBsaW5lIGJyZWFrLCB1bmxlc3MgdGhlIGNv
bnRlbnQgb3ZlcmZsb3dzIHRoZSBsaW5lLgogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFi
bGVkKCkpIHsKLSAgICAgICAgaWYgKG1faW5saW5lSXRlbVJ1bnMubGFzdCgpLmlzTGluZUJyZWFr
KCkgJiYgYXZhaWxhYmxlV2lkdGgoKSA+PSAwICYmICFpc1RleHRBbGlnblJpZ2h0KCkpIHsKKyAg
ICAgICAgaWYgKG1fcnVucy5sYXN0KCkuaXNMaW5lQnJlYWsoKSAmJiBhdmFpbGFibGVXaWR0aCgp
ID49IDAgJiYgIWlzVGV4dEFsaWduUmlnaHQoKSkgewogICAgICAgICAgICAgbV90cmltbWFibGVU
cmFpbGluZ0NvbnRlbnQucmVzZXQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtNDkzLDIxICsyODgsMjEgQEAgdm9pZCBMaW5lQnVpbGRlcjo6cmVtb3ZlVHJhaWxpbmdUcmlt
bWFibGVDb250ZW50KCkKIAogICAgIG1fbGluZUJveC5zaHJpbmtIb3Jpem9udGFsbHkobV90cmlt
bWFibGVUcmFpbGluZ0NvbnRlbnQucmVtb3ZlKCkpOwogICAgIC8vIElmIHdlIHJlbW92ZWQgdGhl
IGZpcnN0IHZpc2libGUgcnVuIG9uIHRoZSBsaW5lLCB3ZSBuZWVkIHRvIHJlLWNoZWNrIHRoZSB2
aXNpYmlsaXR5IHN0YXR1cy4KLSAgICBpZiAoIW1fbGluZUlzVmlzdWFsbHlFbXB0eUJlZm9yZVRy
aW1tYWJsZVRyYWlsaW5nQ29udGVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEp1c3QgYmVj
YXVzZSB0aGUgbGluZSB3YXMgdmlzdWFsbHkgZW1wdHkgYmVmb3JlIHRoZSByZW1vdmVkIGNvbnRl
bnQsIGl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gaXQgaXMgc3RpbGwgdmlzdWFsbHkgZW1w
dHkuCi0gICAgLy8gPHNwYW4+ICA8L3NwYW4+PHNwYW4gc3R5bGU9InBhZGRpbmctbGVmdDogMTBw
eCI+PC9zcGFuPiAgPC0gbm9uLWVtcHR5Ci0gICAgYXV0byBsaW5lSXNWaXN1YWxseUVtcHR5ID0g
WyZdIHsKLSAgICAgICAgZm9yIChhdXRvJiBydW4gOiBtX2lubGluZUl0ZW1SdW5zKSB7Ci0gICAg
ICAgICAgICBpZiAoaXNWaXN1YWxseU5vbkVtcHR5KHJ1bikpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH07Ci0gICAg
Ly8gV2UgY291bGQgb25seSBnbyBmcm9tIHZpc3VhbGx5IG5vbiBlbXB0eSAtPiB0byB2aXN1YWxs
eSBlbXB0eS4gVHJpbW1lZCBydW5zIHNob3VsZCBuZXZlciBtYWtlIHRoZSBsaW5lIHZpc2libGUu
Ci0gICAgaWYgKGxpbmVJc1Zpc3VhbGx5RW1wdHkoKSkKLSAgICAgICAgbV9saW5lQm94LnNldElz
Q29uc2lkZXJlZEVtcHR5KCk7Ci0gICAgbV9saW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1h
YmxlVHJhaWxpbmdDb250ZW50ID0geyB9OworICAgIGlmIChtX2xpbmVJc1Zpc3VhbGx5RW1wdHlC
ZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQpIHsKKyAgICAgICAgLy8gSnVzdCBiZWNhdXNl
IHRoZSBsaW5lIHdhcyB2aXN1YWxseSBlbXB0eSBiZWZvcmUgdGhlIHJlbW92ZWQgY29udGVudCwg
aXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBpdCBpcyBzdGlsbCB2aXN1YWxseSBlbXB0eS4K
KyAgICAgICAgLy8gPHNwYW4+ICA8L3NwYW4+PHNwYW4gc3R5bGU9InBhZGRpbmctbGVmdDogMTBw
eCI+PC9zcGFuPiAgPC0gbm9uLWVtcHR5CisgICAgICAgIGF1dG8gbGluZUlzVmlzdWFsbHlFbXB0
eSA9IFsmXSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgICAg
ICAgICAgICAgIGlmIChpc1Zpc3VhbGx5Tm9uRW1wdHkocnVuKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH07CisgICAgICAgIC8vIFdlIGNvdWxkIG9ubHkgZ28gZnJvbSB2aXN1YWxseSBu
b24gZW1wdHkgLT4gdG8gdmlzdWFsbHkgZW1wdHkuIFRyaW1tZWQgcnVucyBzaG91bGQgbmV2ZXIg
bWFrZSB0aGUgbGluZSB2aXNpYmxlLgorICAgICAgICBpZiAobGluZUlzVmlzdWFsbHlFbXB0eSgp
KQorICAgICAgICAgICAgbV9saW5lQm94LnNldElzQ29uc2lkZXJlZEVtcHR5KCk7CisgICAgICAg
IG1fbGluZUlzVmlzdWFsbHlFbXB0eUJlZm9yZVRyaW1tYWJsZVRyYWlsaW5nQ29udGVudCA9IHsg
fTsKKyAgICB9CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6OnZpc3VhbGx5Q29sbGFwc2VQcmVXcmFw
T3ZlcmZsb3dDb250ZW50KCkKQEAgLTUyMiwyMyArMzE3LDI3IEBAIHZvaWQgTGluZUJ1aWxkZXI6
OnZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KCkKICAgICAvLyBMZXQncyBq
dXN0IGZpbmQgdGhlIHRyYWlsaW5nIHByZS13cmFwIHdoaXRlc3BhY2UgY29udGVudCBmb3Igbm93
IChlLmcgY2hlY2sgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHRyYWlsaW5nIHJ1bnMgd2l0aAogICAg
IC8vIGRpZmZlcmVudCBzZXQgb2Ygd2hpdGUtc3BhY2UgdmFsdWVzIGFuZCBkZWNpZGUgaWYgdGhl
IGluLWJldHdlZW4gcHJlLXdyYXAgY29udGVudCBzaG91bGQgYmUgY29sbGFwc2VkIGFzIHdlbGwu
KQogICAgIElubGluZUxheW91dFVuaXQgdHJpbW1lZENvbnRlbnRXaWR0aCA9IDA7Ci0gICAgZm9y
IChhdXRvJiBpbmxpbmVJdGVtUnVuIDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShtX2lubGluZUl0
ZW1SdW5zKSkgewotICAgICAgICBpZiAoaW5saW5lSXRlbVJ1bi5zdHlsZSgpLndoaXRlU3BhY2Uo
KSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKSB7CisgICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1h
a2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKKyAgICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRl
U3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUg
b25seSBpbnRlcmVzdGVkIGluIHByZS13cmFwIHRyYWlsaW5nIGNvbnRlbnQuCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBhdXRvIHByZVdyYXBWaXN1YWxseUNvbGxhcHNp
YmxlSW5saW5lSXRlbSA9IGlubGluZUl0ZW1SdW4uaXNDb250YWluZXJTdGFydCgpIHx8IGlubGlu
ZUl0ZW1SdW4uaXNDb250YWluZXJFbmQoKSB8fCBpbmxpbmVJdGVtUnVuLmlzV2hpdGVzcGFjZSgp
OworICAgICAgICBhdXRvIHByZVdyYXBWaXN1YWxseUNvbGxhcHNpYmxlSW5saW5lSXRlbSA9IHJ1
bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkgfHwgcnVuLmhhc1Ry
YWlsaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICBpZiAoIXByZVdyYXBWaXN1YWxseUNvbGxhcHNp
YmxlSW5saW5lSXRlbSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBhdXRvIHJ1bkxvZ2lj
YWxXaWR0aCA9IGlubGluZUl0ZW1SdW4ubG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIC8vIE5ldmVy
IHBhcnRpYWxseSBjb2xsYXBzZSBpbmxpbmUgY29udGFpbmVyIHN0YXJ0L2VuZCBpdGVtcy4KLSAg
ICAgICAgYXV0byBpc1BhcnRpYWxDb2xsYXBzaW5nQWxsb3dlZCA9IGlubGluZUl0ZW1SdW4uaXNU
ZXh0KCk7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWx3YXlzIGNvbGxhcHNlIHRoZSBy
dW4gYXQgYSBnbHlwaCBib3VuZGFyeSBhcyB0aGUgc3BlYyBpbmRpY2F0ZXM6ICJjb2xsYXBzZSB0
aGUgY2hhcmFjdGVyIGFkdmFuY2Ugd2lkdGhzIG9mIGFueSB0aGF0IHdvdWxkIG90aGVyd2lzZSBv
dmVyZmxvdyIKLSAgICAgICAgYXV0byBydW5Mb2dpY2FsV2lkdGhBZnRlckNvbGxhcHNpbmcgPSBp
c1BhcnRpYWxDb2xsYXBzaW5nQWxsb3dlZCA/IHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KDAs
IHJ1bkxvZ2ljYWxXaWR0aCAtIG92ZXJmbG93V2lkdGgpIDogMDsKLSAgICAgICAgYXV0byB0cmlt
bWVkID0gcnVuTG9naWNhbFdpZHRoIC0gcnVuTG9naWNhbFdpZHRoQWZ0ZXJDb2xsYXBzaW5nOwot
ICAgICAgICB0cmltbWVkQ29udGVudFdpZHRoICs9IHRyaW1tZWQ7Ci0gICAgICAgIG92ZXJmbG93
V2lkdGggLT0gdHJpbW1lZDsKLSAgICAgICAgaW5saW5lSXRlbVJ1bi5hZGp1c3RMb2dpY2FsV2lk
dGgocnVuTG9naWNhbFdpZHRoQWZ0ZXJDb2xsYXBzaW5nKTsKKyAgICAgICAgQVNTRVJUKCFydW4u
aGFzQ29sbGFwc2libGVUcmFpbGluZ1doaXRlc3BhY2UoKSk7CisgICAgICAgIElubGluZUxheW91
dFVuaXQgdHJpbW1hYmxlV2lkdGggPSB7IH07CisgICAgICAgIGlmIChydW4uaXNUZXh0KCkpIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWx3YXlzIGNvbGxhcHNlIHRoZSBydW4g
YXQgYSBnbHlwaCBib3VuZGFyeSBhcyB0aGUgc3BlYyBpbmRpY2F0ZXM6ICJjb2xsYXBzZSB0aGUg
Y2hhcmFjdGVyIGFkdmFuY2Ugd2lkdGhzIG9mIGFueSB0aGF0IHdvdWxkIG90aGVyd2lzZSBvdmVy
ZmxvdyIKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgdHJpbW1lZCB3aWR0aCBzaG91bGQgYmUgY2Fw
cGVkIGF0IHN0ZDo6bWluKHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpLCBvdmVyZmxvd1dp
ZHRoKSBmb3IgdGV4Z3QgcnVucy4gQm90aCBGRiBhbmQgQ2hyb21lIGFncmVlLgorICAgICAgICAg
ICAgdHJpbW1hYmxlV2lkdGggPSBydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKTsKKyAgICAg
ICAgICAgIHJ1bi52aXN1YWxseUNvbGxhcHNlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB0cmltbWFibGVXaWR0aCA9IHJ1bi5sb2dpY2FsV2lkdGgo
KTsKKyAgICAgICAgICAgIHJ1bi5zaHJpbmtIb3Jpem9udGFsbHkodHJpbW1hYmxlV2lkdGgpOwor
ICAgICAgICB9CisgICAgICAgIHRyaW1tZWRDb250ZW50V2lkdGggKz0gdHJpbW1hYmxlV2lkdGg7
CisgICAgICAgIG92ZXJmbG93V2lkdGggLT0gdHJpbW1hYmxlV2lkdGg7CiAgICAgICAgIGlmIChv
dmVyZmxvd1dpZHRoIDw9IDApCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC01NTIsMjAg
KzM1MSwyMCBAQCBIYW5naW5nQ29udGVudCBMaW5lQnVpbGRlcjo6Y29sbGVjdEhhbmdpbmdDb250
ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpcwogICAgIEFTU0VSVChtX3RyaW1tYWJs
ZVRyYWlsaW5nQ29udGVudC5pc0VtcHR5KCkpOwogICAgIGlmIChpc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQgPT0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCiAgICAgICAgIGhh
bmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKLSAgICBmb3IgKGF1dG8mIGlubGluZUl0
ZW1SdW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1faW5saW5lSXRlbVJ1bnMpKSB7Ci0gICAg
ICAgIGlmIChpbmxpbmVJdGVtUnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBpbmxpbmVJdGVtUnVu
LmlzQ29udGFpbmVyRW5kKCkpCisgICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNl
ZFJhbmdlKG1fcnVucykpIHsKKyAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwg
cnVuLmlzQ29udGFpbmVyRW5kKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KGlubGluZUl0ZW1SdW4uaXNMaW5lQnJlYWsoKSkgeworICAgICAgICBpZiAocnVuLmlzTGluZUJy
ZWFrKCkpIHsKICAgICAgICAgICAgIGhhbmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICghaW5saW5lSXRl
bVJ1bi5pc1RleHQoKSB8fCAhaW5saW5lSXRlbVJ1bi5pc1doaXRlc3BhY2UoKSB8fCBpbmxpbmVJ
dGVtUnVuLmlzQ29sbGFwc2libGUoKSkKKyAgICAgICAgaWYgKCFydW4uaGFzVHJhaWxpbmdXaGl0
ZXNwYWNlKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2
ZSBhIHByZXNlcnZlZCBvciBodW5nIHdoaXRlc3BhY2UuCi0gICAgICAgIGlmIChpbmxpbmVJdGVt
UnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6OlByZVdyYXApCisgICAgICAg
IGlmIChydW4uc3R5bGUoKS53aGl0ZVNwYWNlKCkgIT0gV2hpdGVTcGFjZTo6UHJlV3JhcCkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAvLyBUaGlzIGlzIGVpdGhlciBhIG5vcm1hbCBvciBj
b25kaXRpb25hbGx5IGhhbmdpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgaGFuZ2lu
Z0NvbnRlbnQuZXhwYW5kKGlubGluZUl0ZW1SdW4ubG9naWNhbFdpZHRoKCkpOworICAgICAgICBo
YW5naW5nQ29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkpOwogICAg
IH0KICAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7CiB9CkBAIC02MDMsMTQgKzQwMiwxMyBAQCB2
b2lkIExpbmVCdWlsZGVyOjphcHBlbmQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsVwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAog
ICAgIC8vIENoZWNrIGlmIHRoaXMgZnJlc2hseSBhcHBlbmRlZCBjb250ZW50IG1ha2VzIHRoZSBs
aW5lIHZpc3VhbGx5IG5vbi1lbXB0eS4KLSAgICBBU1NFUlQoIW1faW5saW5lSXRlbVJ1bnMuaXNF
bXB0eSgpKTsKLSAgICBpZiAobV9saW5lQm94LmlzQ29uc2lkZXJlZEVtcHR5KCkgJiYgaXNWaXN1
YWxseU5vbkVtcHR5KG1faW5saW5lSXRlbVJ1bnMubGFzdCgpKSkKKyAgICBpZiAobV9saW5lQm94
LmlzQ29uc2lkZXJlZEVtcHR5KCkgJiYgIW1fcnVucy5pc0VtcHR5KCkgJiYgaXNWaXN1YWxseU5v
bkVtcHR5KG1fcnVucy5sYXN0KCkpKQogICAgICAgICBtX2xpbmVCb3guc2V0SXNDb25zaWRlcmVk
Tm9uRW1wdHkoKTsKIH0KIAogdm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kTm9uQnJlYWthYmxlU3Bh
Y2UoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2Fs
TGVmdCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCiB7Ci0gICAgbV9pbmxpbmVJdGVt
UnVucy5hcHBlbmQoeyBpbmxpbmVJdGVtLCBsb2dpY2FsTGVmdCwgbG9naWNhbFdpZHRoIH0pOwor
ICAgIG1fcnVucy5hcHBlbmQoeyBpbmxpbmVJdGVtLCBsb2dpY2FsTGVmdCwgbG9naWNhbFdpZHRo
IH0pOwogICAgIG1fbGluZUJveC5leHBhbmRIb3Jpem9udGFsbHkobG9naWNhbFdpZHRoKTsKIH0K
IApAQCAtNjI2LDcgKzQyNCw3IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZElubGluZUNvbnRh
aW5lckVuZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMCiAgICAgYXV0byBy
ZW1vdmVUcmFpbGluZ0xldHRlclNwYWNpbmcgPSBbJl0gewogICAgICAgICBpZiAoIW1fdHJpbW1h
YmxlVHJhaWxpbmdDb250ZW50LmlzVHJhaWxpbmdSdW5QYXJ0aWFsbHlUcmltbWFibGUoKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9saW5lQm94LnNocmlua0hvcml6b250YWxseSht
X3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5yZW1vdmVUcmFpbGluZ1J1bigpKTsKKyAgICAgICAg
bV9saW5lQm94LnNocmlua0hvcml6b250YWxseShtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5y
ZW1vdmVQYXJ0aWFsbHlUcmltbWFibGVDb250ZW50KCkpOwogICAgIH07CiAgICAgLy8gUHJldmVu
dCB0cmFpbGluZyBsZXR0ZXItc3BhY2luZyBmcm9tIHNwaWxsaW5nIG91dCBvZiB0aGUgaW5saW5l
IGNvbnRhaW5lci4KICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRleHQtMy8j
bGV0dGVyLXNwYWNpbmctcHJvcGVydHkgU2VlIGV4YW1wbGUgMjEuCkBAIC02MzQsMTQgKzQzMiwx
NSBAQCB2b2lkIExpbmVCdWlsZGVyOjphcHBlbmRJbmxpbmVDb250YWluZXJFbmQoY29uc3QgSW5s
aW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTAogICAgIGFwcGVuZE5vbkJyZWFrYWJsZVNwYWNl
KGlubGluZUl0ZW0sIGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgbG9naWNhbFdpZHRoKTsKIH0KIAot
dm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kVGV4dENvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0m
IGlubGluZUl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQordm9pZCBMaW5lQnVp
bGRlcjo6YXBwZW5kVGV4dENvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZVRleHRJ
dGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKIHsKLSAgICBhdXRvIGlzQ29sbGFw
c2libGUgPSBpbmxpbmVJdGVtLmlzQ29sbGFwc2libGUoKTsKICAgICBhdXRvIHdpbGxDb2xsYXBz
ZUNvbXBsZXRlbHkgPSBbJl0gewotICAgICAgICBpZiAoIWlzQ29sbGFwc2libGUpCisgICAgICAg
IGlmICghaW5saW5lVGV4dEl0ZW0uaXNDb2xsYXBzaWJsZSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoaW5saW5lVGV4dEl0ZW0uaXNFbXB0eUNvbnRlbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdCBpdGVt
IGlzIGNvbGxhcHNlZCBhcyB3ZWxsLgotICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6bWFr
ZVJldmVyc2VkUmFuZ2UobV9pbmxpbmVJdGVtUnVucykpIHsKKyAgICAgICAgZm9yIChhdXRvJiBy
dW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKICAgICAgICAgICAgIGlmIChy
dW4uaXNCb3goKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRleHQtMy8jd2hpdGUtc3BhY2UtcGhhc2Ut
MQpAQCAtNjUwLDMxICs0NDksNDAgQEAgdm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kVGV4dENvbnRl
bnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxheW8KICAgICAgICAg
ICAgIC8vIDogIjxzcGFuPiAgPC9zcGFuPiAiIDwtIHRoZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGNv
bGxhcHNlcyBjb21wbGV0ZWx5LgogICAgICAgICAgICAgLy8gTm90IHRoYXQgd2hlbiB0aGUgaW5s
aW5lIGNvbnRhaW5lciBoYXMgcHJlc2VydmUgd2hpdGVzcGFjZSBzdHlsZSwgIjxzcGFuIHN0eWxl
PSJ3aGl0ZS1zcGFjZTogcHJlIj4gIDwvc3Bhbj4gIiA8LSB0aGlzIHdoaXRlc3BhY2Ugc3RheXMg
YXJvdW5kLgogICAgICAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcnVuLmlzQ29sbGFwc2libGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcnVuLmhh
c0NvbGxhcHNpYmxlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICBBU1NFUlQocnVu
LmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNlLgotICAgICAgICByZXR1cm4gIXNob3VsZFBy
ZXNlcnZlTGVhZGluZ0NvbnRlbnQoaW5saW5lSXRlbSk7CisgICAgICAgIHJldHVybiAhaXNXaGl0
ZXNwYWNlUHJlc2VydmVkKGlubGluZVRleHRJdGVtLnN0eWxlKCkpOwogICAgIH07CiAKLSAgICBh
dXRvIGNvbGxhcHNlc1RvWmVyb0FkdmFuY2VXaWR0aCA9IHdpbGxDb2xsYXBzZUNvbXBsZXRlbHko
KTsKLSAgICBsb2dpY2FsV2lkdGggPSBjb2xsYXBzZXNUb1plcm9BZHZhbmNlV2lkdGggPyAwIDog
bG9naWNhbFdpZHRoOwotICAgIGF1dG8gY29sbGFwc2VkUnVuID0gaXNDb2xsYXBzaWJsZSAmJiBp
bmxpbmVJdGVtLmxlbmd0aCgpID4gMTsKLSAgICBhdXRvIGNvbnRlbnRMZW5ndGggPSAgY29sbGFw
c2VkUnVuID8gMSA6IGlubGluZUl0ZW0ubGVuZ3RoKCk7Ci0gICAgbV9pbmxpbmVJdGVtUnVucy5h
cHBlbmQoeyBpbmxpbmVJdGVtLCBjb250ZW50TG9naWNhbFdpZHRoKCksIGxvZ2ljYWxXaWR0aCwg
Y29sbGFwc2VkUnVuLCBjb2xsYXBzZXNUb1plcm9BZHZhbmNlV2lkdGgsIERpc3BsYXk6OlJ1bjo6
VGV4dENvbnRleHQgeyBpbmxpbmVJdGVtLnN0YXJ0KCksIGNvbnRlbnRMZW5ndGgsIGlubGluZUl0
ZW0ubGF5b3V0Qm94KCkudGV4dENvbnRleHQoKS0+Y29udGVudCB9IH0pOworICAgIGlmICh3aWxs
Q29sbGFwc2VDb21wbGV0ZWx5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gaW5saW5l
VGV4dEl0ZW1OZWVkc05ld1J1biA9IHRydWU7CisgICAgaWYgKCFtX3J1bnMuaXNFbXB0eSgpKSB7
CisgICAgICAgIGF1dG8mIGxhc3RSdW4gPSBtX3J1bnMubGFzdCgpOworICAgICAgICBpbmxpbmVU
ZXh0SXRlbU5lZWRzTmV3UnVuID0gbGFzdFJ1bi5oYXNDb2xsYXBzZWRUcmFpbGluZ1doaXRlc3Bh
Y2UoKSB8fCAhbGFzdFJ1bi5pc1RleHQoKSB8fCAmbGFzdFJ1bi5sYXlvdXRCb3goKSAhPSAmaW5s
aW5lVGV4dEl0ZW0ubGF5b3V0Qm94KCk7CisgICAgICAgIGlmICghaW5saW5lVGV4dEl0ZW1OZWVk
c05ld1J1bikKKyAgICAgICAgICAgIGxhc3RSdW4uZXhwYW5kKGlubGluZVRleHRJdGVtLCBsb2dp
Y2FsV2lkdGgpOworICAgIH0KKyAgICBpZiAoaW5saW5lVGV4dEl0ZW1OZWVkc05ld1J1bikKKyAg
ICAgICAgbV9ydW5zLmFwcGVuZCh7IGlubGluZVRleHRJdGVtLCBjb250ZW50TG9naWNhbFdpZHRo
KCksIGxvZ2ljYWxXaWR0aCB9KTsKKwogICAgIG1fbGluZUJveC5leHBhbmRIb3Jpem9udGFsbHko
bG9naWNhbFdpZHRoKTsKIAotICAgIGlmIChpc0NvbGxhcHNpYmxlICYmICFUZXh0VXRpbDo6c2hv
dWxkUHJlc2VydmVUcmFpbGluZ1doaXRlc3BhY2UoaW5saW5lSXRlbS5zdHlsZSgpKSkgewotICAg
ICAgICAvLyBJZiB3ZSBldmVyIGNvbGxhcHNlIHRoaXMgY29udGVudCwgd2UgbmVlZCB0byBrbm93
IGlmIHRoZSBsaW5lIHZpc2liaWxpdHkgc3RhdGUgbmVlZHMgdG8gYmUgcmVjb21wdXRlZC4KKyAg
ICAvLyBTZXQgdGhlIHRyYWlsaW5nIHRyaW1tYWJsZSBjb250ZW50LgorICAgIGlmIChpbmxpbmVU
ZXh0SXRlbS5pc1doaXRlc3BhY2UoKSAmJiAhVGV4dFV0aWw6OnNob3VsZFByZXNlcnZlVHJhaWxp
bmdXaGl0ZXNwYWNlKGlubGluZVRleHRJdGVtLnN0eWxlKCkpKSB7CisgICAgICAgIG1fdHJpbW1h
YmxlVHJhaWxpbmdDb250ZW50LmFkZEZ1bGx5VHJpbW1hYmxlQ29udGVudChtX3J1bnMuc2l6ZSgp
IC0gMSwgbG9naWNhbFdpZHRoKTsKKyAgICAgICAgLy8gSWYgd2UgZXZlciB0cmltIHRoaXMgY29u
dGVudCwgd2UgbmVlZCB0byBrbm93IGlmIHRoZSBsaW5lIHZpc2liaWxpdHkgc3RhdGUgbmVlZHMg
dG8gYmUgcmVjb21wdXRlZC4KICAgICAgICAgaWYgKG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fbGluZUlzVmlzdWFsbHlFbXB0eUJlZm9yZVRyaW1t
YWJsZVRyYWlsaW5nQ29udGVudCA9IGlzVmlzdWFsbHlFbXB0eSgpOwotICAgICAgICBtX3RyaW1t
YWJsZVRyYWlsaW5nQ29udGVudC5hcHBlbmQobV9pbmxpbmVJdGVtUnVucy5zaXplKCkgLSAxKTsK
LSAgICB9IGVsc2UgewotICAgICAgICAvLyBFeGlzdGluZyB0cmFpbGluZyBjb2xsYXBzaWJsZSBj
b250ZW50IGNhbiBvbmx5IGJlIGV4cGFuZGVkIGlmIHRoZSBjdXJyZW50IHJ1biBpcyBmdWxseSBj
b2xsYXBzaWJsZS4KLSAgICAgICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQucmVzZXQoKTsK
LSAgICAgICAgaWYgKCFtX3Nob3VsZElnbm9yZVRyYWlsaW5nTGV0dGVyU3BhY2luZyAmJiAhaW5s
aW5lSXRlbS5pc1doaXRlc3BhY2UoKSAmJiBpbmxpbmVJdGVtLnN0eWxlKCkubGV0dGVyU3BhY2lu
ZygpID4gMCkKLSAgICAgICAgICAgIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LmFwcGVuZCht
X2lubGluZUl0ZW1SdW5zLnNpemUoKSAtIDEpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IC8vIEFueSBub24td2hpdGVzcGFjZSwgbm8tdHJpbW1hYmxlIGNvbnRlbnQgcmVzZXRzIHRoZSBl
eGlzdGluZyB0cmltbWFibGUuCisgICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQucmVzZXQo
KTsKKyAgICBpZiAoIW1fc2hvdWxkSWdub3JlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nICYmICFpbmxp
bmVUZXh0SXRlbS5pc1doaXRlc3BhY2UoKSAmJiBpbmxpbmVUZXh0SXRlbS5zdHlsZSgpLmxldHRl
clNwYWNpbmcoKSA+IDApCisgICAgICAgIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LmFkZFBh
cnRpYWxseVRyaW1tYWJsZUNvbnRlbnQobV9ydW5zLnNpemUoKSAtIDEsIGxvZ2ljYWxXaWR0aCk7
CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZE5vblJlcGxhY2VkSW5saW5lQm94KGNvbnN0
IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQpA
QCAtNjgyLDcgKzQ5MCw3IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZE5vblJlcGxhY2VkSW5s
aW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluCiAgICAgYXV0byYgbGF5
b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsKICAgICBhdXRvJiBib3hHZW9tZXRyeSA9
IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKICAgICBhdXRv
IGhvcml6b250YWxNYXJnaW4gPSBib3hHZW9tZXRyeS5ob3Jpem9udGFsTWFyZ2luKCk7Ci0gICAg
bV9pbmxpbmVJdGVtUnVucy5hcHBlbmQoeyBpbmxpbmVJdGVtLCBjb250ZW50TG9naWNhbFdpZHRo
KCkgKyBob3Jpem9udGFsTWFyZ2luLnN0YXJ0LCBsb2dpY2FsV2lkdGggfSk7CisgICAgbV9ydW5z
LmFwcGVuZCh7IGlubGluZUl0ZW0sIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSArIGhvcml6b250YWxN
YXJnaW4uc3RhcnQsIGxvZ2ljYWxXaWR0aCB9KTsKICAgICBtX2xpbmVCb3guZXhwYW5kSG9yaXpv
bnRhbGx5KGxvZ2ljYWxXaWR0aCArIGhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBob3Jpem9udGFs
TWFyZ2luLmVuZCk7CiAgICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQucmVzZXQoKTsKIH0K
QEAgLTY5NywxMSArNTA1LDEwIEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZFJlcGxhY2VkSW5s
aW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxhCiB2b2lkIExpbmVC
dWlsZGVyOjphcHBlbmRMaW5lQnJlYWsoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKIHsK
ICAgICBpZiAoaW5saW5lSXRlbS5pc0hhcmRMaW5lQnJlYWsoKSkKLSAgICAgICAgcmV0dXJuIG1f
aW5saW5lSXRlbVJ1bnMuYXBwZW5kKHsgaW5saW5lSXRlbSwgY29udGVudExvZ2ljYWxXaWR0aCgp
LCAwX2x1IH0pOworICAgICAgICByZXR1cm4gbV9ydW5zLmFwcGVuZCh7IGlubGluZUl0ZW0sIGNv
bnRlbnRMb2dpY2FsV2lkdGgoKSwgMF9sdSB9KTsKICAgICAvLyBTb2Z0IGxpbmUgYnJlYWtzIChw
cmVzZXJ2ZWQgbmV3IGxpbmUgY2hhcmFjdGVycykgcmVxdWlyZSBpbmxpbmUgdGV4dCBib3hlcyBm
b3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgogICAgIEFTU0VSVChpbmxpbmVJdGVtLmlzU29mdExp
bmVCcmVhaygpKTsKLSAgICBhdXRvJiBzb2Z0TGluZUJyZWFrSXRlbSA9IGRvd25jYXN0PElubGlu
ZVNvZnRMaW5lQnJlYWtJdGVtPihpbmxpbmVJdGVtKTsKLSAgICBtX2lubGluZUl0ZW1SdW5zLmFw
cGVuZCh7IHNvZnRMaW5lQnJlYWtJdGVtLCBjb250ZW50TG9naWNhbFdpZHRoKCksIDBfbHUsIGZh
bHNlLCBmYWxzZSwgRGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dCB7IHNvZnRMaW5lQnJlYWtJdGVt
LnBvc2l0aW9uKCksIDEsIHNvZnRMaW5lQnJlYWtJdGVtLmxheW91dEJveCgpLnRleHRDb250ZXh0
KCktPmNvbnRlbnQgfSB9KTsKKyAgICBtX3J1bnMuYXBwZW5kKHsgZG93bmNhc3Q8SW5saW5lU29m
dExpbmVCcmVha0l0ZW0+KGlubGluZUl0ZW0pLCBjb250ZW50TG9naWNhbFdpZHRoKCkgfSk7CiB9
CiAKIHZvaWQgTGluZUJ1aWxkZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodChjb25zdCBS
dW4mIHJ1bikKQEAgLTgxMCwxMCArNjE3LDEzIEBAIElubGluZUxheW91dFVuaXQgTGluZUJ1aWxk
ZXI6OnJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgUnVuJiBydW4pIGNvbnN0CiAgICAgcmV0dXJuIGJv
eEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwogfQogCi1ib29sIExpbmVCdWlsZGVyOjppc1Zp
c3VhbGx5Tm9uRW1wdHkoY29uc3QgSW5saW5lSXRlbVJ1biYgcnVuKSBjb25zdAorYm9vbCBMaW5l
QnVpbGRlcjo6aXNWaXN1YWxseU5vbkVtcHR5KGNvbnN0IFJ1biYgcnVuKSBjb25zdAogewogICAg
IGlmIChydW4uaXNUZXh0KCkpCi0gICAgICAgIHJldHVybiAhcnVuLmhhc0VtcHR5VGV4dENvbnRl
bnQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkp
CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qg
Y2hlY2sgd2hldGhlciB0aGUgaW5saW5lIGNvbnRhaW5lciBoYXMgY29udGVudC4gSXQgc2ltcGx5
IGNoZWNrcyBpZiB0aGUgY29udGFpbmVyIGl0c2VsZiBpcyBjb25zaWRlcmVkIG5vbi1lbXB0eS4K
ICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkg
ewpAQCAtODI2LDkgKzYzNiw2IEBAIGJvb2wgTGluZUJ1aWxkZXI6OmlzVmlzdWFsbHlOb25FbXB0
eShjb25zdCBJbmxpbmVJdGVtUnVuJiBydW4pIGNvbnN0CiAgICAgICAgIHJldHVybiBib3hHZW9t
ZXRyeS5ib3JkZXJSaWdodCgpIHx8IChib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKSAmJiBib3hH
ZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZSgpKTsKICAgICB9CiAKLSAgICBpZiAocnVuLmlz
TGluZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCiAgICAgaWYgKHJ1bi5pc0JveCgp
KSB7CiAgICAgICAgIGlmICghcnVuLmxheW91dEJveCgpLmVzdGFibGlzaGVzRm9ybWF0dGluZ0Nv
bnRleHQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtODY2LDE1MyArNjczLDE4NCBA
QCBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgTGluZUJ1aWxkZXI6OmZvcm1hdHRpbmdD
b250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKIH0K
IAotTGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6VHJpbW1hYmxlVHJhaWxp
bmdDb250ZW50KElubGluZUl0ZW1SdW5MaXN0JiBpbmxpbmVJdGVtUnVuTGlzdCkKLSAgICA6IG1f
aW5saW5laXRlbVJ1bkxpc3QoaW5saW5lSXRlbVJ1bkxpc3QpCitMaW5lQnVpbGRlcjo6VHJpbW1h
YmxlVHJhaWxpbmdDb250ZW50OjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQoUnVuTGlzdCYgcnVu
cykKKyAgICA6IG1fcnVucyhydW5zKQogewogfQogCi12b2lkIExpbmVCdWlsZGVyOjpUcmltbWFi
bGVUcmFpbGluZ0NvbnRlbnQ6OmFwcGVuZChzaXplX3QgcnVuSW5kZXgpCit2b2lkIExpbmVCdWls
ZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OmFkZEZ1bGx5VHJpbW1hYmxlQ29udGVudChz
aXplX3QgcnVuSW5kZXgsIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlV2lkdGgpCiB7Ci0gICAg
YXV0byYgdHJpbW1hYmxlUnVuID0gbV9pbmxpbmVpdGVtUnVuTGlzdFtydW5JbmRleF07Ci0gICAg
SW5saW5lTGF5b3V0VW5pdCB0cmltbWFibGVXaWR0aCA9IDA7Ci0gICAgYXV0byBpc0Z1bGx5VHJp
bW1hYmxlID0gdHJpbW1hYmxlUnVuLmlzVHJpbW1hYmxlV2hpdGVzcGFjZSgpOwotICAgIGlmIChp
c0Z1bGx5VHJpbW1hYmxlKQotICAgICAgICB0cmltbWFibGVXaWR0aCA9IHRyaW1tYWJsZVJ1bi5s
b2dpY2FsV2lkdGgoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHRyaW1tYWJsZVJ1bi5o
YXNUcmFpbGluZ0xldHRlclNwYWNpbmcoKSk7Ci0gICAgICAgIHRyaW1tYWJsZVdpZHRoID0gdHJp
bW1hYmxlUnVuLnRyYWlsaW5nTGV0dGVyU3BhY2luZygpOwotICAgIH0KLSAgICBtX3dpZHRoICs9
IHRyaW1tYWJsZVdpZHRoOwotICAgIG1fbGFzdFJ1bklzRnVsbHlUcmltbWFibGUgPSBpc0Z1bGx5
VHJpbW1hYmxlOworICAgIC8vIEFueSBzdWJzZXF1ZW50IHRyaW1tYWJsZSB3aGl0ZXNwYWNlIHNo
b3VsZCBjb2xsYXBzZSB0byB6ZXJvIGFkdmFuY2VkIHdpZHRoIGFuZCBpZ25vcmVkIGF0IDo6YXBw
ZW5kVGV4dENvbnRlbnQoKS4KKyAgICBBU1NFUlQoIW1faGFzRnVsbHlUcmltbWFibGVDb250ZW50
KTsKKyAgICBtX2Z1bGx5VHJpbW1hYmxlV2lkdGggPSB0cmltbWFibGVXaWR0aDsKKyAgICAvLyBO
b3RlIHRoYXQganVzdCBiZWNhc3VlIHRoZSB0cmltbWFibGUgd2lkdGggaXMgMCAoZm9udC1zaXpl
OiAwcHgpLCBpdCBkb2VzIG5vdCBtZWFuIHdlIGRvbid0IGhhdmUgYSB0cmltbWFibGUgdHJhaWxp
bmcgY29udGVudC4KKyAgICBtX2hhc0Z1bGx5VHJpbW1hYmxlQ29udGVudCA9IHRydWU7CiAgICAg
bV9maXJzdFJ1bkluZGV4ID0gbV9maXJzdFJ1bkluZGV4LnZhbHVlT3IocnVuSW5kZXgpOwogfQog
Cit2b2lkIExpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OmFkZFBhcnRpYWxs
eVRyaW1tYWJsZUNvbnRlbnQoc2l6ZV90IHJ1bkluZGV4LCBJbmxpbmVMYXlvdXRVbml0IHRyaW1t
YWJsZVdpZHRoKQoreworICAgIC8vIERvIG5vdCBhZGQgdHJpbW1hYmxlIGxldHRlciBzcGFjaW5n
IGFmdGVyIGEgZnVsbHkgdHJpbW1hYmxlIHdoaXRlc2FwY2UuCisgICAgQVNTRVJUKCFtX2ZpcnN0
UnVuSW5kZXgpOworICAgIEFTU0VSVCghbV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQpOworICAg
IEFTU0VSVCghbV9wYXJ0aWFsbHlUcmltbWFibGVXaWR0aCk7CisgICAgQVNTRVJUKHRyaW1tYWJs
ZVdpZHRoKTsKKyAgICBtX3BhcnRpYWxseVRyaW1tYWJsZVdpZHRoID0gdHJpbW1hYmxlV2lkdGg7
CisgICAgbV9maXJzdFJ1bkluZGV4ID0gcnVuSW5kZXg7Cit9CisKIElubGluZUxheW91dFVuaXQg
TGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6cmVtb3ZlKCkKIHsKKyAgICAv
LyBSZW1vdmUgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQgYW5kIG1vdmUgYWxsIHRoZSBzdWJz
ZXF1ZW50IHRyYWlsaW5nIHJ1bnMuCisgICAgLy8gPHNwYW4+IDwvc3Bhbj48c3Bhbj48L3NwYW4+
CisgICAgLy8gW3RyYWlsaW5nIHdoaXRlc3BhY2VdW2NvbnRhaW5lciBlbmRdW2NvbnRhaW5lciBz
dGFydF1bY29udGFpbmVyIGVuZF0KKyAgICAvLyBUcmltIHRoZSB3aGl0ZXNwYWNlIHJ1biBhbmQg
bW92ZSB0aGUgdHJhaWxpbmcgaW5saW5lIGNvbnRhaW5lciBydW5zIHRvIHRoZSBsb2dpY2FsIGxl
ZnQuCiAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYXV0
byBoYXNTZWVuTm9uV2hpdGVzcGFjZVRleHRDb250ZW50ID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAv
LyBSZW1vdmUgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQgYW5kIG1vdmUgYWxsIHRoZSBvdGhl
ciB0cmFpbGluZyBydW5zLgotICAgIC8vIDxzcGFuPiA8L3NwYW4+PHNwYW4+PC9zcGFuPiAtPgot
ICAgIC8vIFt3aGl0ZXNwYWNlXVtjb250YWluZXIgZW5kXVtjb250YWluZXIgc3RhcnRdW2NvbnRh
aW5lciBlbmRdCi0gICAgLy8gUmVtb3ZlIHRoZSB3aGl0ZXNwYWNlIHJ1biBhbmQgbW92ZSB0aGUg
dHJhaWxpbmcgaW5saW5lIGNvbnRhaW5lciBydW5zIHRvIHRoZSBsZWZ0LgotICAgIElubGluZUxh
eW91dFVuaXQgYWNjdW11bGF0ZWRUcmltbWVkV2lkdGggPSAwOwotICAgIGZvciAoYXV0byBpbmRl
eCA9ICptX2ZpcnN0UnVuSW5kZXg7IGluZGV4IDwgbV9pbmxpbmVpdGVtUnVuTGlzdC5zaXplKCk7
ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byYgcnVuID0gbV9pbmxpbmVpdGVtUnVuTGlzdFtpbmRl
eF07Ci0gICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KC1hY2N1bXVsYXRlZFRyaW1tZWRXaWR0
aCk7Ci0gICAgICAgIGlmICghcnVuLmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQocnVu
LmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSB8fCBydW4uaXNMaW5l
QnJlYWsoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
cnVuLmlzV2hpdGVzcGFjZSgpKSB7Ci0gICAgICAgICAgICBhY2N1bXVsYXRlZFRyaW1tZWRXaWR0
aCArPSBydW4ubG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICBydW4uc2V0Q29sbGFwc2VzVG9a
ZXJvQWR2YW5jZVdpZHRoKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQo
IWhhc1NlZW5Ob25XaGl0ZXNwYWNlVGV4dENvbnRlbnQpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgICAgICAgICBoYXNTZWVuTm9uV2hpdGVzcGFjZVRleHRDb250ZW50ID0gdHJ1ZTsKLSNlbmRp
ZgotICAgICAgICAgICAgLy8gTXVzdCBiZSBhIGxldHRlciBzcGFjaW5nIHRyaW1taW5nLgotICAg
ICAgICAgICAgQVNTRVJUKHJ1bi5oYXNUcmFpbGluZ0xldHRlclNwYWNpbmcoKSk7Ci0gICAgICAg
ICAgICBhY2N1bXVsYXRlZFRyaW1tZWRXaWR0aCArPSBydW4udHJhaWxpbmdMZXR0ZXJTcGFjaW5n
KCk7Ci0gICAgICAgICAgICBydW4ucmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCk7Ci0gICAg
ICAgIH0KKyAgICBhdXRvJiB0cmltbWFibGVSdW4gPSBtX3J1bnNbKm1fZmlyc3RSdW5JbmRleF07
CisgICAgQVNTRVJUKHRyaW1tYWJsZVJ1bi5pc1RleHQoKSk7CisKKyAgICBpZiAobV9oYXNGdWxs
eVRyaW1tYWJsZUNvbnRlbnQpCisgICAgICAgIHRyaW1tYWJsZVJ1bi5yZW1vdmVUcmFpbGluZ1do
aXRlc3BhY2UoKTsKKyAgICBpZiAobV9wYXJ0aWFsbHlUcmltbWFibGVXaWR0aCkKKyAgICAgICAg
dHJpbW1hYmxlUnVuLnJlbW92ZVRyYWlsaW5nTGV0dGVyU3BhY2luZygpOworCisgICAgYXV0byB0
cmltbWFibGVXaWR0aCA9IHdpZHRoKCk7CisgICAgZm9yIChhdXRvIGluZGV4ID0gKm1fZmlyc3RS
dW5JbmRleCArIDE7IGluZGV4IDwgbV9ydW5zLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBh
dXRvJiBydW4gPSBtX3J1bnNbaW5kZXhdOworICAgICAgICBBU1NFUlQocnVuLmlzQ29udGFpbmVy
U3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSk7Cisg
ICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KC10cmltbWFibGVXaWR0aCk7CiAgICAgfQotICAg
IEFTU0VSVChhY2N1bXVsYXRlZFRyaW1tZWRXaWR0aCA9PSB3aWR0aCgpKTsKICAgICByZXNldCgp
OwotICAgIHJldHVybiBhY2N1bXVsYXRlZFRyaW1tZWRXaWR0aDsKKyAgICByZXR1cm4gdHJpbW1h
YmxlV2lkdGg7CiB9CiAKLUlubGluZUxheW91dFVuaXQgTGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRy
YWlsaW5nQ29udGVudDo6cmVtb3ZlVHJhaWxpbmdSdW4oKQorSW5saW5lTGF5b3V0VW5pdCBMaW5l
QnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50OjpyZW1vdmVQYXJ0aWFsbHlUcmltbWFi
bGVDb250ZW50KCkKIHsKLSAgICBBU1NFUlQoIWlzRW1wdHkoKSk7Ci0gICAgLy8gRmluZCB0aGUg
bGFzdCB0cmltbWFibGUgcnVuIChpdCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGxhc3QgcnVuIGUu
ZyBbY29udGFpbmVyIHN0YXJ0XVt3aGl0ZXNwYWNlXVtjb250YWluZXIgZW5kXSkKLSAgICBmb3Ig
KGF1dG8gaW5kZXggPSBtX2lubGluZWl0ZW1SdW5MaXN0LnNpemUoKTsgaW5kZXgtLSAmJiAqbV9m
aXJzdFJ1bkluZGV4ID49IGluZGV4OykgewotICAgICAgICBhdXRvJiBydW4gPSBtX2lubGluZWl0
ZW1SdW5MaXN0W2luZGV4XTsKLSAgICAgICAgaWYgKCFydW4uaXNUZXh0KCkpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgp
KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIElubGluZUxheW91
dFVuaXQgdHJpbW1lZFdpZHRoID0gMDsKLSAgICAgICAgaWYgKHJ1bi5pc1doaXRlc3BhY2UoKSkg
ewotICAgICAgICAgICAgdHJpbW1lZFdpZHRoID0gcnVuLmxvZ2ljYWxXaWR0aCgpOwotICAgICAg
ICAgICAgcnVuLnNldENvbGxhcHNlc1RvWmVyb0FkdmFuY2VXaWR0aCgpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgQVNTRVJUKHJ1bi5oYXNUcmFpbGluZ0xldHRlclNwYWNpbmcoKSk7
Ci0gICAgICAgICAgICB0cmltbWVkV2lkdGggPSBydW4udHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCk7
Ci0gICAgICAgICAgICBydW4ucmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgbV93aWR0aCAtPSB0cmltbWVkV2lkdGg7Ci0gICAgICAgIC8vIFdlIG1hbmFn
ZWQgdG8gcmVtb3ZlIHRoZSBsYXN0IHRyaW1tYWJsZSBydW4uCi0gICAgICAgIGlmIChpbmRleCA9
PSAqbV9maXJzdFJ1bkluZGV4KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fd2lkdGgpOwotICAg
ICAgICAgICAgbV9maXJzdFJ1bkluZGV4ID0geyB9OwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB0cmltbWVkV2lkdGg7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiAwX2x1OworICAgIC8vIFBhcnRpYWxseSB0cmltbWFibGUgY29udGVudCBpcyBhbHdheXMg
Z2F0ZWQgYnkgYSBmdWxseSB0cmltbWFibGUgY29udGVudC4KKyAgICAvLyBXZSBjYW4ndCBqdXN0
IHRyaW0gc3BhY2luZyBpbiB0aGUgbWlkZGxlLgorICAgIEFTU0VSVCghbV9mdWxseVRyaW1tYWJs
ZVdpZHRoKTsKKyAgICByZXR1cm4gcmVtb3ZlKCk7CiB9CiAKLUxpbmVCdWlsZGVyOjpJbmxpbmVJ
dGVtUnVuOjpJbmxpbmVJdGVtUnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGlu
ZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQot
ICAgIDogbV9pbmxpbmVJdGVtKGlubGluZUl0ZW0pCi0gICAgLCBtX2xvZ2ljYWxMZWZ0KGxvZ2lj
YWxMZWZ0KQotICAgICwgbV9sb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKQorTGluZUJ1aWxkZXI6
OlJ1bjo6UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxheW91dFVuaXQg
bG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQorICAgIDogbV90eXBl
KGlubGluZUl0ZW0udHlwZSgpKQorICAgICwgbV9sYXlvdXRCb3goJmlubGluZUl0ZW0ubGF5b3V0
Qm94KCkpCisgICAgLCBtX2xvZ2ljYWxSZWN0KHsgMCwgbG9naWNhbExlZnQsIGxvZ2ljYWxXaWR0
aCwgMCB9KQogewogfQogCi1MaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJ1bjo6SW5saW5lSXRlbVJ1
bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBpc0NvbGxhcHNlZCwgYm9v
bCBpc0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCwgRGlzcGxheTo6UnVuOjpUZXh0Q29udGV4
dCYmIHRleHRDb250ZXh0KQotICAgIDogbV9pbmxpbmVJdGVtKGlubGluZUl0ZW0pCi0gICAgLCBt
X2xvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KQotICAgICwgbV9sb2dpY2FsV2lkdGgobG9naWNhbFdp
ZHRoKQotICAgICwgbV90ZXh0Q29udGV4dChXVEZNb3ZlKHRleHRDb250ZXh0KSkKLSAgICAsIG1f
aXNDb2xsYXBzZWQoaXNDb2xsYXBzZWQpCi0gICAgLCBtX2NvbGxhcHNlZFRvWmVyb0FkdmFuY2VX
aWR0aChpc0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCkKK0xpbmVCdWlsZGVyOjpSdW46OlJ1
bihjb25zdCBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbSYgc29mdExpbmVCcmVha0l0ZW0sIElubGlu
ZUxheW91dFVuaXQgbG9naWNhbExlZnQpCisgICAgOiBtX3R5cGUoc29mdExpbmVCcmVha0l0ZW0u
dHlwZSgpKQorICAgICwgbV9sYXlvdXRCb3goJnNvZnRMaW5lQnJlYWtJdGVtLmxheW91dEJveCgp
KQorICAgICwgbV9sb2dpY2FsUmVjdCh7IDAsIGxvZ2ljYWxMZWZ0LCAwLCAwIH0pCisgICAgLCBt
X3RleHRDb250ZXh0KHsgc29mdExpbmVCcmVha0l0ZW0ucG9zaXRpb24oKSwgMSwgc29mdExpbmVC
cmVha0l0ZW0ubGF5b3V0Qm94KCkudGV4dENvbnRleHQoKS0+Y29udGVudCB9KQogewogfQogCi1i
b29sIExpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjppc1RyaW1tYWJsZVdoaXRlc3BhY2UoKSBj
b25zdAorTGluZUJ1aWxkZXI6OlJ1bjo6UnVuKGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVU
ZXh0SXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsV2lkdGgpCisgICAgOiBtX3R5cGUoSW5saW5lSXRlbTo6VHlwZTo6VGV4dCkKKyAgICAs
IG1fbGF5b3V0Qm94KCZpbmxpbmVUZXh0SXRlbS5sYXlvdXRCb3goKSkKKyAgICAsIG1fbG9naWNh
bFJlY3QoeyAwLCBsb2dpY2FsTGVmdCwgbG9naWNhbFdpZHRoLCAwIH0pCisgICAgLCBtX3RyYWls
aW5nV2hpdGVzcGFjZVR5cGUodHJhaWxpbmdXaGl0ZXNwYWNlVHlwZShpbmxpbmVUZXh0SXRlbSkp
CisgICAgLCBtX3RleHRDb250ZXh0KHsgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgbV90cmFpbGlu
Z1doaXRlc3BhY2VUeXBlID09IFRyYWlsaW5nV2hpdGVzcGFjZTo6Q29sbGFwc2VkID8gMSA6IGlu
bGluZVRleHRJdGVtLmxlbmd0aCgpLCBpbmxpbmVUZXh0SXRlbS5sYXlvdXRCb3goKS50ZXh0Q29u
dGV4dCgpLT5jb250ZW50IH0pCiB7Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlICJlbmQtb2Yt
bGluZSBzcGFjZXMiIGNhbiBiZSByZW1vdmVkLgotICAgIC8vIFNlZSBodHRwczovL3d3dy53My5v
cmcvVFIvY3NzLXRleHQtMy8jd2hpdGUtc3BhY2UtcHJvcGVydHkgbWF0cml4LgotICAgIGlmICgh
aXNXaGl0ZXNwYWNlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gIVRleHRV
dGlsOjpzaG91bGRQcmVzZXJ2ZVRyYWlsaW5nV2hpdGVzcGFjZShzdHlsZSgpKTsKKyAgICBpZiAo
bV90cmFpbGluZ1doaXRlc3BhY2VUeXBlICE9IFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZSkgewor
ICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoID0gbG9naWNhbFdpZHRoOyAKKyAgICAg
ICAgbV90ZXh0Q29udGV4dC0+c2V0RXhwYW5zaW9uKHsgRXhwYW5zaW9uQmVoYXZpb3IoRGVmYXVs
dEV4cGFuc2lvbiksIHsgfSB9KTsKKyAgICAgICAgaWYgKCFpc1doaXRlc3BhY2VQcmVzZXJ2ZWQo
aW5saW5lVGV4dEl0ZW0uc3R5bGUoKSkpCisgICAgICAgICAgICBtX2V4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQgPSAxOworICAgIH0KK30KKwordm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpleHBhbmQo
Y29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZVRleHRJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGV4cGFu
c2lvbiBtZXJnZS4gV2Ugc2hvdWxkIGV2ZW50dWFsbHkgc3dpdGNoIG92ZXIgdG8gRm9udENhc2Nh
ZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQuCisgICAgQVNTRVJUKCFoYXNDb2xsYXBzZWRU
cmFpbGluZ1doaXRlc3BhY2UoKSk7CisgICAgQVNTRVJUKGlzVGV4dCgpICYmIGlubGluZVRleHRJ
dGVtLmlzVGV4dCgpKTsKKyAgICBBU1NFUlQobV9sYXlvdXRCb3ggPT0gJmlubGluZVRleHRJdGVt
LmxheW91dEJveCgpKTsKKworICAgIG1fbG9naWNhbFJlY3QuZXhwYW5kSG9yaXpvbnRhbGx5KGxv
Z2ljYWxXaWR0aCk7CisgICAgbV90cmFpbGluZ1doaXRlc3BhY2VUeXBlID0gdHJhaWxpbmdXaGl0
ZXNwYWNlVHlwZShpbmxpbmVUZXh0SXRlbSk7CisKKyAgICBpZiAobV90cmFpbGluZ1doaXRlc3Bh
Y2VUeXBlID09IFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZSkgeworICAgICAgICBtX3RyYWlsaW5n
V2hpdGVzcGFjZVdpZHRoID0geyB9OworICAgICAgICBtX3RleHRDb250ZXh0LT5zZXRFeHBhbnNp
b24oeyBFeHBhbnNpb25CZWhhdmlvcihBbGxvd0xlYWRpbmdFeHBhbnNpb24gfCBBbGxvd1RyYWls
aW5nRXhwYW5zaW9uKSwgeyB9IH0pOworICAgICAgICBtX3RleHRDb250ZXh0LT5leHBhbmQoaW5s
aW5lVGV4dEl0ZW0ubGVuZ3RoKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fdHJh
aWxpbmdXaGl0ZXNwYWNlV2lkdGggKz0gbG9naWNhbFdpZHRoOworICAgIGlmICghaXNXaGl0ZXNw
YWNlUHJlc2VydmVkKGlubGluZVRleHRJdGVtLnN0eWxlKCkpKQorICAgICAgICArK21fZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudDsKKyAgICBtX3RleHRDb250ZXh0LT5zZXRFeHBhbnNpb24oeyBF
eHBhbnNpb25CZWhhdmlvcihEZWZhdWx0RXhwYW5zaW9uKSwgeyB9IH0pOworICAgIG1fdGV4dENv
bnRleHQtPmV4cGFuZChtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNw
YWNlOjpDb2xsYXBzZWQgPyAxIDogaW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCkpOwogfQogCi1ib29s
IExpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjpoYXNUcmFpbGluZ0xldHRlclNwYWNpbmcoKSBj
b25zdAorYm9vbCBMaW5lQnVpbGRlcjo6UnVuOjpoYXNUcmFpbGluZ0xldHRlclNwYWNpbmcoKSBj
b25zdAogewogICAgIC8vIENvbXBsZXggbGluZSBsYXlvdXQgZG9lcyBub3Qga2VlcCB0cmFjayBv
ZiB0cmFpbGluZyBsZXR0ZXIgc3BhY2luZy4KICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuICFpc1doaXRlc3BhY2Uo
KSAmJiBzdHlsZSgpLmxldHRlclNwYWNpbmcoKSA+IDA7CisgICAgcmV0dXJuICFoYXNUcmFpbGlu
Z1doaXRlc3BhY2UoKSAmJiBzdHlsZSgpLmxldHRlclNwYWNpbmcoKSA+IDA7CiB9CiAKLUlubGlu
ZUxheW91dFVuaXQgTGluZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46OnRyYWlsaW5nTGV0dGVyU3Bh
Y2luZygpIGNvbnN0CitJbmxpbmVMYXlvdXRVbml0IExpbmVCdWlsZGVyOjpSdW46OnRyYWlsaW5n
TGV0dGVyU3BhY2luZygpIGNvbnN0CiB7CiAgICAgaWYgKCFoYXNUcmFpbGluZ0xldHRlclNwYWNp
bmcoKSkKICAgICAgICAgcmV0dXJuIDBfbHU7CiAgICAgcmV0dXJuIElubGluZUxheW91dFVuaXQg
eyBzdHlsZSgpLmxldHRlclNwYWNpbmcoKSB9OwogfQogCi12b2lkIExpbmVCdWlsZGVyOjpJbmxp
bmVJdGVtUnVuOjpzZXRDb2xsYXBzZXNUb1plcm9BZHZhbmNlV2lkdGgoKQordm9pZCBMaW5lQnVp
bGRlcjo6UnVuOjpyZW1vdmVUcmFpbGluZ0xldHRlclNwYWNpbmcoKQogewotICAgIG1fY29sbGFw
c2VkVG9aZXJvQWR2YW5jZVdpZHRoID0gdHJ1ZTsKLSAgICBtX2xvZ2ljYWxXaWR0aCA9IDBfbHU7
CisgICAgQVNTRVJUKGhhc1RyYWlsaW5nTGV0dGVyU3BhY2luZygpKTsKKyAgICBzaHJpbmtIb3Jp
em9udGFsbHkodHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkpOworICAgIEFTU0VSVChsb2dpY2FsV2lk
dGgoKSA+IDAgfHwgKCFsb2dpY2FsV2lkdGgoKSAmJiBzdHlsZSgpLmxldHRlclNwYWNpbmcoKSA+
PSBpbnRNYXhGb3JMYXlvdXRVbml0KSk7CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6OklubGluZUl0
ZW1SdW46OnJlbW92ZVRyYWlsaW5nTGV0dGVyU3BhY2luZygpCit2b2lkIExpbmVCdWlsZGVyOjpS
dW46OnJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1RyYWlsaW5n
TGV0dGVyU3BhY2luZygpKTsKLSAgICBtX2xvZ2ljYWxXaWR0aCAtPSB0cmFpbGluZ0xldHRlclNw
YWNpbmcoKTsKLSAgICBBU1NFUlQobV9sb2dpY2FsV2lkdGggPiAwIHx8ICghbV9sb2dpY2FsV2lk
dGggJiYgc3R5bGUoKS5sZXR0ZXJTcGFjaW5nKCkgPj0gaW50TWF4Rm9yTGF5b3V0VW5pdCkpOwor
ICAgIC8vIEFjY29yZGluZyB0byBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRleHQtMy8jd2hp
dGUtc3BhY2UtcHJvcGVydHkgbWF0cml4CisgICAgLy8gVHJpbW1hYmxlIHdoaXRlc3BhY2UgaXMg
YWx3YXlzIGNvbGxhcHNhYmxlIHNvIHRoZSBsZW5ndGggb2YgdGhlIHRyYWlsaW5nIHRyaW1tYWJs
ZSB3aGl0ZXNwYWNlIGlzIGFsd2F5cyAxIChvciBub24tZXhpc3RlbnQpLgorICAgIEFTU0VSVCht
X3RleHRDb250ZXh0LT5sZW5ndGgoKSk7CisgICAgbV90ZXh0Q29udGV4dC0+ZXhwYW5kKC0xKTsK
KyAgICB2aXN1YWxseUNvbGxhcHNlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7CiB9CiAKLWJvb2wgTGlu
ZUJ1aWxkZXI6OklubGluZUl0ZW1SdW46Omhhc0VtcHR5VGV4dENvbnRlbnQoKSBjb25zdAordm9p
ZCBMaW5lQnVpbGRlcjo6UnVuOjp2aXN1YWxseUNvbGxhcHNlVHJhaWxpbmdXaGl0ZXNwYWNlKCkK
K3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgYSB2aXN1YWwgYWRqdXN0bWVudCwgdGhlIHRleHQgbGVu
Z3RoIHNob3VsZCByZW1haW4gdGhlIHNhbWUuCisgICAgc2hyaW5rSG9yaXpvbnRhbGx5KG1fdHJh
aWxpbmdXaGl0ZXNwYWNlV2lkdGgpOworICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggPSB7
IH07CisgICAgbV90cmFpbGluZ1doaXRlc3BhY2VUeXBlID0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpO
b25lOworCisgICAgaWYgKCFpc1doaXRlc3BhY2VQcmVzZXJ2ZWQoc3R5bGUoKSkpIHsKKyAgICAg
ICAgQVNTRVJUKG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCk7CisgICAgICAgIG1fZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudC0tOworICAgIH0KKyAgICBtX3RleHRDb250ZXh0LT5zZXRFeHBh
bnNpb24oeyBFeHBhbnNpb25CZWhhdmlvcihBbGxvd0xlYWRpbmdFeHBhbnNpb24gfCBBbGxvd1Ry
YWlsaW5nRXhwYW5zaW9uKSwgeyB9IH0pOworfQorCit2b2lkIExpbmVCdWlsZGVyOjpSdW46OmFk
anVzdEV4cGFuc2lvbkJlaGF2aW9yKEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9y
KQoreworICAgIEFTU0VSVChpc1RleHQoKSk7CisgICAgQVNTRVJUKGhhc0V4cGFuc2lvbk9wcG9y
dHVuaXR5KCkpOworICAgIG1fdGV4dENvbnRleHQtPnNldEV4cGFuc2lvbih7IGV4cGFuc2lvbkJl
aGF2aW9yLCBtX3RleHRDb250ZXh0LT5leHBhbnNpb24oKS0+aG9yaXpvbnRhbEV4cGFuc2lvbiB9
KTsKK30KKworaW5saW5lIE9wdGlvbmFsPEV4cGFuc2lvbkJlaGF2aW9yPiBMaW5lQnVpbGRlcjo6
UnVuOjpleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVGV4dCgpKTsK
LSAgICByZXR1cm4gaXNDb2xsYXBzZWRUb1plcm9BZHZhbmNlV2lkdGgoKSB8fCBkb3duY2FzdDxJ
bmxpbmVUZXh0SXRlbT4obV9pbmxpbmVJdGVtKS5pc0VtcHR5Q29udGVudCgpOworICAgIGlmIChh
dXRvIGV4cGFuc2lvbkNvbnRleHQgPSBtX3RleHRDb250ZXh0LT5leHBhbnNpb24oKSkKKyAgICAg
ICAgcmV0dXJuIGV4cGFuc2lvbkNvbnRleHQtPmJlaGF2aW9yOworICAgIHJldHVybiB7IH07Cit9
CisKK3ZvaWQgTGluZUJ1aWxkZXI6OlJ1bjo6c2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9u
KElubGluZUxheW91dFVuaXQgbG9naWNhbEV4cGFuc2lvbikKK3sKKyAgICBBU1NFUlQoaXNUZXh0
KCkpOworICAgIEFTU0VSVChoYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKTsKKyAgICBtX2xvZ2lj
YWxSZWN0LmV4cGFuZEhvcml6b250YWxseShsb2dpY2FsRXhwYW5zaW9uKTsKKyAgICBtX3RleHRD
b250ZXh0LT5zZXRFeHBhbnNpb24oeyBtX3RleHRDb250ZXh0LT5leHBhbnNpb24oKS0+YmVoYXZp
b3IsIGxvZ2ljYWxFeHBhbnNpb24gfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCmluZGV4
IDhmZjU5Y2M1NzNhYzNlMmNmYTg4MjQxYmU3NmZmYWFkOTcyNTQwMjguLjIzYTA4Mzg0ZDc3ZDBk
NTMzYWRlMDZiNmNiNTZjZDhlOWRjNzM2NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaApAQCAtMzcs
OSArMzcsOSBAQCBuYW1lc3BhY2UgTGF5b3V0IHsKIAogc3RydWN0IEhhbmdpbmdDb250ZW50Owog
Y2xhc3MgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CitjbGFzcyBJbmxpbmVTb2Z0TGluZUJyZWFr
SXRlbTsKIAogY2xhc3MgTGluZUJ1aWxkZXIgewotICAgIGNsYXNzIElubGluZUl0ZW1SdW47CiAg
ICAgc3RydWN0IENvbnRpbnVvdXNDb250ZW50OwogCiBwdWJsaWM6CkBAIC03NCwxMSArNzQsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNJbnRydXNpdmVGbG9hdCgpIHsgbV9oYXNJbnRydXNp
dmVGbG9hdCA9IHRydWU7IH0KIAogICAgIHN0cnVjdCBSdW4gewotICAgICAgICBSdW4oY29uc3Qg
SW5saW5lSXRlbVJ1biYpOwotICAgICAgICBSdW4oY29uc3QgSW5saW5lSXRlbVJ1biYsIGNvbnN0
IERpc3BsYXk6OklubGluZVJlY3QmLCBjb25zdCBEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0Jiwg
dW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCk7Ci0gICAgICAgIFJ1bihSdW4mJikg
PSBkZWZhdWx0OwotICAgICAgICBSdW4mIG9wZXJhdG9yPShSdW4mJiBvdGhlcikgPSBkZWZhdWx0
OwotCiAgICAgICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IElubGlu
ZUl0ZW06OlR5cGU6OlRleHQ7IH0KICAgICAgICAgYm9vbCBpc0JveCgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZSA9PSBJbmxpbmVJdGVtOjpUeXBlOjpCb3g7IH0KICAgICAgICAgYm9vbCBpc0xpbmVC
cmVhaygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBJbmxpbmVJdGVtOjpUeXBlOjpIYXJkTGlu
ZUJyZWFrIHx8IG1fdHlwZSA9PSBJbmxpbmVJdGVtOjpUeXBlOjpTb2Z0TGluZUJyZWFrOyB9CkBA
IC04OSwxMyArODQsMjUgQEAgcHVibGljOgogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dEJveC0+c3R5bGUoKTsgfQogICAgICAgICBjb25z
dCBEaXNwbGF5OjpJbmxpbmVSZWN0JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9n
aWNhbFJlY3Q7IH0KICAgICAgICAgY29uc3QgT3B0aW9uYWw8RGlzcGxheTo6UnVuOjpUZXh0Q29u
dGV4dD4mIHRleHRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQotICAg
ICAgICBib29sIGlzQ29sbGFwc2VkVG9WaXN1YWxseUVtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9p
c0NvbGxhcHNlZFRvVmlzdWFsbHlFbXB0eTsgfQorCisgICAgICAgIFJ1bihSdW4mJikgPSBkZWZh
dWx0OworICAgICAgICBSdW4mIG9wZXJhdG9yPShSdW4mJiBvdGhlcikgPSBkZWZhdWx0OwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExpbmVCdWlsZGVyOwogCi0gICAgICAg
IHZvaWQgYWRqdXN0TG9naWNhbFRvcChJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxUb3ApIHsgbV9s
b2dpY2FsUmVjdC5zZXRUb3AobG9naWNhbFRvcCk7IH0KKyAgICAgICAgUnVuKGNvbnN0IElubGlu
ZVRleHRJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5p
dCBsb2dpY2FsV2lkdGgpOworICAgICAgICBSdW4oY29uc3QgSW5saW5lU29mdExpbmVCcmVha0l0
ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KTsKKyAgICAgICAgUnVuKGNvbnN0IElu
bGluZUl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0
IGxvZ2ljYWxXaWR0aCk7CisKKyAgICAgICAgdm9pZCBleHBhbmQoY29uc3QgSW5saW5lVGV4dEl0
ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7CisKKyAgICAgICAgSW5saW5lTGF5
b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LndpZHRo
KCk7IH0KKwogICAgICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCBv
ZmZzZXQpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlSG9yaXpvbnRhbGx5KG9mZnNldCk7IH0KKyAgICAg
ICAgdm9pZCBzaHJpbmtIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCB3aWR0aCkgeyBtX2xv
Z2ljYWxSZWN0LmV4cGFuZEhvcml6b250YWxseSgtd2lkdGgpOyB9CisKKyAgICAgICAgdm9pZCBh
ZGp1c3RMb2dpY2FsVG9wKElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcCkgeyBtX2xvZ2ljYWxS
ZWN0LnNldFRvcChsb2dpY2FsVG9wKTsgfQogICAgICAgICB2b2lkIG1vdmVWZXJ0aWNhbGx5KElu
bGluZUxheW91dFVuaXQgb2Zmc2V0KSB7IG1fbG9naWNhbFJlY3QubW92ZVZlcnRpY2FsbHkob2Zm
c2V0KTsgfQogICAgICAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsSGVpZ2h0KSB7IG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOyB9
CiAKQEAgLTEwNSwxNyArMTEyLDM1IEBAIHB1YmxpYzoKICAgICAgICAgdm9pZCBzZXRDb21wdXRl
ZEhvcml6b250YWxFeHBhbnNpb24oSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsRXhwYW5zaW9uKTsK
ICAgICAgICAgdm9pZCBhZGp1c3RFeHBhbnNpb25CZWhhdmlvcihFeHBhbnNpb25CZWhhdmlvcik7
CiAKKyAgICAgICAgZW51bSBjbGFzcyBUcmFpbGluZ1doaXRlc3BhY2UgeworICAgICAgICAgICAg
Tm9uZSwKKyAgICAgICAgICAgIE5vdENvbGxhcHNpYmxlLAorICAgICAgICAgICAgQ29sbGFwc2li
bGUsCisgICAgICAgICAgICBDb2xsYXBzZWQKKyAgICAgICAgfTsKKyAgICAgICAgYm9vbCBoYXNU
cmFpbGluZ1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5
cGUgIT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25lOyB9CisgICAgICAgIGJvb2wgaGFzQ29sbGFw
c2libGVUcmFpbGluZ1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVz
cGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpDb2xsYXBzaWJsZSB8fCBoYXNDb2xsYXBz
ZWRUcmFpbGluZ1doaXRlc3BhY2UoKTsgfQorICAgICAgICBib29sIGhhc0NvbGxhcHNlZFRyYWls
aW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSA9
PSBUcmFpbGluZ1doaXRlc3BhY2U6OkNvbGxhcHNlZDsgfQorICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1do
aXRlc3BhY2VXaWR0aDsgfQorICAgICAgICBUcmFpbGluZ1doaXRlc3BhY2UgdHJhaWxpbmdXaGl0
ZXNwYWNlVHlwZShjb25zdCBJbmxpbmVUZXh0SXRlbSYpIGNvbnN0OworICAgICAgICB2b2lkIHJl
bW92ZVRyYWlsaW5nV2hpdGVzcGFjZSgpOworICAgICAgICB2b2lkIHZpc3VhbGx5Q29sbGFwc2VU
cmFpbGluZ1doaXRlc3BhY2UoKTsKKworICAgICAgICBib29sIGhhc1RyYWlsaW5nTGV0dGVyU3Bh
Y2luZygpIGNvbnN0OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHRyYWlsaW5nTGV0dGVyU3Bh
Y2luZygpIGNvbnN0OworICAgICAgICB2b2lkIHJlbW92ZVRyYWlsaW5nTGV0dGVyU3BhY2luZygp
OworCisgICAgICAgIElubGluZUl0ZW06OlR5cGUgbV90eXBlIHsgSW5saW5lSXRlbTo6VHlwZTo6
VGV4dCB9OwogICAgICAgICBjb25zdCBCb3gqIG1fbGF5b3V0Qm94IHsgbnVsbHB0ciB9OwotICAg
ICAgICBJbmxpbmVJdGVtOjpUeXBlIG1fdHlwZTsKICAgICAgICAgRGlzcGxheTo6SW5saW5lUmVj
dCBtX2xvZ2ljYWxSZWN0OworICAgICAgICBUcmFpbGluZ1doaXRlc3BhY2UgbV90cmFpbGluZ1do
aXRlc3BhY2VUeXBlIHsgVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25lIH07CisgICAgICAgIElubGlu
ZUxheW91dFVuaXQgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCB7IDAgfTsKICAgICAgICAgT3B0
aW9uYWw8RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4dDsKICAgICAgICAg
dW5zaWduZWQgbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50IHsgMCB9OwotICAgICAgICBib29s
IG1faXNDb2xsYXBzZWRUb1Zpc3VhbGx5RW1wdHkgeyBmYWxzZSB9OwogICAgIH07Ci0gICAgdXNp
bmcgUnVuTGlzdCA9IFZlY3RvcjxSdW4sIDUwPjsKKyAgICB1c2luZyBSdW5MaXN0ID0gVmVjdG9y
PFJ1biwgMTA+OwogICAgIGVudW0gY2xhc3MgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IHsg
Tm8sIFllcyB9OwogICAgIFJ1bkxpc3QgY2xvc2UoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
ID0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObyk7Ci0gICAgc2l6ZV90IHJldmVydChj
b25zdCBJbmxpbmVJdGVtJiByZXZlcnRUbyk7CiAKICAgICBzdGF0aWMgRGlzcGxheTo6TGluZUJv
eDo6QmFzZWxpbmUgaGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRNZXRyaWNzJiwgSW5saW5l
TGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCk7CiAKQEAgLTE0NCw5NiArMTY5LDQ2IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCByZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQoKTsKICAgICB2
b2lkIHZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KCk7CiAgICAgSGFuZ2lu
Z0NvbnRlbnQgY29sbGVjdEhhbmdpbmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCk7Ci0gICAgdm9pZCBhbGlnbkhvcml6b250YWxseShSdW5MaXN0JiwgY29uc3QgSGFuZ2luZ0Nv
bnRlbnQmLCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwotICAgIHZvaWQgYWxpZ25Db250
ZW50VmVydGljYWxseShSdW5MaXN0Jik7CisgICAgdm9pZCBhbGlnbkhvcml6b250YWxseShjb25z
dCBIYW5naW5nQ29udGVudCYsIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CisgICAgdm9p
ZCBhbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KCk7CiAKICAgICB2b2lkIGFkanVzdEJhc2VsaW5lQW5k
TGluZUhlaWdodChjb25zdCBSdW4mKTsKICAgICBJbmxpbmVMYXlvdXRVbml0IHJ1bkNvbnRlbnRI
ZWlnaHQoY29uc3QgUnVuJikgY29uc3Q7CiAKICAgICBib29sIGlzVGV4dEFsaWduSnVzdGlmeSgp
IGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpK
dXN0aWZ5OyB9OwogICAgIGJvb2wgaXNUZXh0QWxpZ25SaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
aG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpSaWdodCB8fCBtX2hvcml6b250
YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQgfHwgbV9ob3Jpem9udGFs
QWxpZ25tZW50ID09IFRleHRBbGlnbk1vZGU6OkVuZDsgfQotICAgIHZvaWQganVzdGlmeVJ1bnMo
UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpIGNvbnN0OworICAgIHZv
aWQganVzdGlmeVJ1bnMoSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCk7CiAKLSAgICBi
b29sIGlzVmlzdWFsbHlOb25FbXB0eShjb25zdCBJbmxpbmVJdGVtUnVuJikgY29uc3Q7CisgICAg
Ym9vbCBpc1Zpc3VhbGx5Tm9uRW1wdHkoY29uc3QgUnVuJikgY29uc3Q7CiAKICAgICBMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdDsKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdDsKIAotICAgIGNsYXNzIElubGluZUl0ZW1S
dW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgSW5saW5lSXRlbVJ1bihjb25zdCBJbmxpbmVJdGVt
JiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2Fs
V2lkdGgsIGJvb2wgaXNDb2xsYXBzZWQsIGJvb2wgaXNDb2xsYXBzZWRUb1plcm9BZHZhbmNlV2lk
dGgsIERpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQmJik7Ci0gICAgICAgIElubGluZUl0ZW1SdW4o
Y29uc3QgSW5saW5lSXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxh
eW91dFVuaXQgbG9naWNhbFdpZHRoKTsKLQotICAgICAgICBjb25zdCBCb3gmIGxheW91dEJveCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5saW5lSXRlbS5sYXlvdXRCb3goKTsgfQotICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVybiBsYXlvdXRCb3goKS5zdHlsZSgp
OyB9Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVy
biBtX2xvZ2ljYWxMZWZ0OyB9Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsV2lkdGg7IH0KLSAgICAgICAgY29uc3QgT3B0aW9u
YWw8RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dD4mIHRleHRDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV90ZXh0Q29udGV4dDsgfQotCi0gICAgICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVJdGVtLmlzVGV4dCgpOyB9Ci0gICAgICAgIGJvb2wgaXNCb3goKSBjb25zdCB7
IHJldHVybiBtX2lubGluZUl0ZW0uaXNCb3goKTsgfQotICAgICAgICBib29sIGlzQ29udGFpbmVy
U3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpOyB9
Ci0gICAgICAgIGJvb2wgaXNDb250YWluZXJFbmQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0
ZW0uaXNDb250YWluZXJFbmQoKTsgfQotICAgICAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3Qg
eyByZXR1cm4gbV9pbmxpbmVJdGVtLmlzTGluZUJyZWFrKCk7IH0KLSAgICAgICAgSW5saW5lSXRl
bTo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtLnR5cGUoKTsgfQotCi0g
ICAgICAgIGJvb2wgaXNDb2xsYXBzZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQ29sbGFwc2VkOyB9
Ci0KLSAgICAgICAgdm9pZCBtb3ZlSG9yaXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgb2Zmc2V0
KSB7IG1fbG9naWNhbExlZnQgKz0gb2Zmc2V0OyB9Ci0gICAgICAgIHZvaWQgYWRqdXN0TG9naWNh
bFdpZHRoKElubGluZUxheW91dFVuaXQgYWRqdXN0ZWRXaWR0aCkgeyBtX2xvZ2ljYWxXaWR0aCA9
IGFkanVzdGVkV2lkdGg7IH0KLQotICAgICAgICBib29sIGlzVHJpbW1hYmxlV2hpdGVzcGFjZSgp
IGNvbnN0OwotICAgICAgICBib29sIGhhc1RyYWlsaW5nTGV0dGVyU3BhY2luZygpIGNvbnN0Owot
Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgdHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCk7Ci0KLSAgICAgICAg
dm9pZCBzZXRDb2xsYXBzZXNUb1plcm9BZHZhbmNlV2lkdGgoKTsKLSAgICAgICAgYm9vbCBpc0Nv
bGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGFwc2VkVG9a
ZXJvQWR2YW5jZVdpZHRoOyB9Ci0KLSAgICAgICAgYm9vbCBpc0NvbGxhcHNpYmxlKCkgY29uc3Qg
eyByZXR1cm4gaXM8SW5saW5lVGV4dEl0ZW0+KG1faW5saW5lSXRlbSkgJiYgZG93bmNhc3Q8SW5s
aW5lVGV4dEl0ZW0+KG1faW5saW5lSXRlbSkuaXNDb2xsYXBzaWJsZSgpOyB9Ci0gICAgICAgIGJv
b2wgaXNXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gaXM8SW5saW5lVGV4dEl0ZW0+KG1faW5s
aW5lSXRlbSkgJiYgZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KG1faW5saW5lSXRlbSkuaXNXaGl0
ZXNwYWNlKCk7IH0KLSAgICAgICAgYm9vbCBoYXNFbXB0eVRleHRDb250ZW50KCkgY29uc3Q7Ci0K
LSAgICAgICAgYm9vbCBoYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpIGNvbnN0IHsgcmV0dXJuIGlz
V2hpdGVzcGFjZSgpICYmICFpc0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCgpOyB9Ci0KLSAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElubGluZUl0ZW0mIG90aGVyKSBjb25zdCB7IHJl
dHVybiAmb3RoZXIgPT0gJm1faW5saW5lSXRlbTsgfQotICAgICAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgSW5saW5lSXRlbSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBJbmxpbmVJdGVtJiBtX2lubGluZUl0
ZW07Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbV9sb2dpY2FsTGVmdCB7IDAgfTsKLSAgICAg
ICAgSW5saW5lTGF5b3V0VW5pdCBtX2xvZ2ljYWxXaWR0aCB7IDAgfTsKLSAgICAgICAgY29uc3Qg
T3B0aW9uYWw8RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4dDsKLSAgICAg
ICAgYm9vbCBtX2lzQ29sbGFwc2VkIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBtX2NvbGxhcHNl
ZFRvWmVyb0FkdmFuY2VXaWR0aCB7IGZhbHNlIH07Ci0gICAgfTsKLQotICAgIHVzaW5nIElubGlu
ZUl0ZW1SdW5MaXN0ID0gVmVjdG9yPElubGluZUl0ZW1SdW4sIDUwPjsKLQogICAgIHN0cnVjdCBU
cmltbWFibGVUcmFpbGluZ0NvbnRlbnQgewotICAgICAgICBUcmltbWFibGVUcmFpbGluZ0NvbnRl
bnQoSW5saW5lSXRlbVJ1bkxpc3QmKTsKKyAgICAgICAgVHJpbW1hYmxlVHJhaWxpbmdDb250ZW50
KFJ1bkxpc3QmKTsKIAotICAgICAgICB2b2lkIGFwcGVuZChzaXplX3QgcnVuSW5kZXgpOworICAg
ICAgICB2b2lkIGFkZEZ1bGx5VHJpbW1hYmxlQ29udGVudChzaXplX3QgcnVuSW5kZXgsIElubGlu
ZUxheW91dFVuaXQgdHJpbW1hYmxlV2lkdGgpOworICAgICAgICB2b2lkIGFkZFBhcnRpYWxseVRy
aW1tYWJsZUNvbnRlbnQoc2l6ZV90IHJ1bkluZGV4LCBJbmxpbmVMYXlvdXRVbml0IHRyaW1tYWJs
ZVdpZHRoKTsKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCByZW1vdmUoKTsKLSAgICAgICAgSW5s
aW5lTGF5b3V0VW5pdCByZW1vdmVUcmFpbGluZ1J1bigpOwotICAgICAgICB2b2lkIHJlc2V0KCk7
CisgICAgICAgIElubGluZUxheW91dFVuaXQgcmVtb3ZlUGFydGlhbGx5VHJpbW1hYmxlQ29udGVu
dCgpOwogCi0gICAgICAgIElubGluZUxheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3dpZHRoOyB9Ci0gICAgICAgIE9wdGlvbmFsPHNpemVfdD4gZmlyc3RSdW5JbmRleCgpIHsgcmV0
dXJuIG1fZmlyc3RSdW5JbmRleDsgfQorICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9mdWxseVRyaW1tYWJsZVdpZHRoICsgbV9wYXJ0aWFsbHlUcmltbWFi
bGVXaWR0aDsgfQogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9maXJz
dFJ1bkluZGV4Lmhhc1ZhbHVlKCk7IH0KLSAgICAgICAgYm9vbCBpc1RyYWlsaW5nUnVuRnVsbHlU
cmltbWFibGUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RSdW5Jc0Z1bGx5VHJpbW1hYmxlOyB9Ci0g
ICAgICAgIGJvb2wgaXNUcmFpbGluZ1J1blBhcnRpYWxseVRyaW1tYWJsZSgpIGNvbnN0IHsgcmV0
dXJuICFpc0VtcHR5KCkgJiYgIWlzVHJhaWxpbmdSdW5GdWxseVRyaW1tYWJsZSgpOyB9CisgICAg
ICAgIGJvb2wgaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNGdWxseVRyaW1tYWJsZUNvbnRlbnQ7IH0KKyAgICAgICAgYm9vbCBpc1RyYWlsaW5nUnVuUGFy
dGlhbGx5VHJpbW1hYmxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJ0aWFsbHlUcmltbWFibGVXaWR0
aDsgfQorCisgICAgICAgIHZvaWQgcmVzZXQoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIElu
bGluZUl0ZW1SdW5MaXN0JiBtX2lubGluZWl0ZW1SdW5MaXN0OworICAgICAgICBSdW5MaXN0JiBt
X3J1bnM7CiAgICAgICAgIE9wdGlvbmFsPHNpemVfdD4gbV9maXJzdFJ1bkluZGV4OwotICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IG1fd2lkdGggeyAwIH07Ci0gICAgICAgIGJvb2wgbV9sYXN0UnVu
SXNGdWxseVRyaW1tYWJsZSB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9oYXNGdWxseVRyaW1t
YWJsZUNvbnRlbnQgeyBmYWxzZSB9OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fZnVsbHlU
cmltbWFibGVXaWR0aCB7IDAgfTsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX3BhcnRpYWxs
eVRyaW1tYWJsZVdpZHRoIHsgMCB9OwogICAgIH07CiAKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLSAgICBJbmxpbmVJdGVtUnVu
TGlzdCBtX2lubGluZUl0ZW1SdW5zOworICAgIFJ1bkxpc3QgbV9ydW5zOwogICAgIFRyaW1tYWJs
ZVRyYWlsaW5nQ29udGVudCBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudDsKICAgICBPcHRpb25h
bDxEaXNwbGF5OjpMaW5lQm94OjpCYXNlbGluZT4gbV9pbml0aWFsU3RydXQ7CiAgICAgSW5saW5l
TGF5b3V0VW5pdCBtX2xpbmVMb2dpY2FsV2lkdGggeyAwIH07CkBAIC0yNDcsOSArMjIyLDIxIEBA
IHByaXZhdGU6CiAKIGlubGluZSB2b2lkIExpbmVCdWlsZGVyOjpUcmltbWFibGVUcmFpbGluZ0Nv
bnRlbnQ6OnJlc2V0KCkKIHsKKyAgICBtX2hhc0Z1bGx5VHJpbW1hYmxlQ29udGVudCA9IGZhbHNl
OwogICAgIG1fZmlyc3RSdW5JbmRleCA9IHsgfTsKLSAgICBtX3dpZHRoID0gMF9sdTsKLSAgICBt
X2xhc3RSdW5Jc0Z1bGx5VHJpbW1hYmxlID0gZmFsc2U7CisgICAgbV9mdWxseVRyaW1tYWJsZVdp
ZHRoID0geyB9OworICAgIG1fcGFydGlhbGx5VHJpbW1hYmxlV2lkdGggPSB7IH07Cit9CisKK2lu
bGluZSBMaW5lQnVpbGRlcjo6UnVuOjpUcmFpbGluZ1doaXRlc3BhY2UgTGluZUJ1aWxkZXI6OlJ1
bjo6dHJhaWxpbmdXaGl0ZXNwYWNlVHlwZShjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lVGV4
dEl0ZW0pIGNvbnN0Cit7CisgICAgaWYgKCFpbmxpbmVUZXh0SXRlbS5pc1doaXRlc3BhY2UoKSkK
KyAgICAgICAgcmV0dXJuIFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZTsKKyAgICBpZiAoIWlubGlu
ZVRleHRJdGVtLmlzQ29sbGFwc2libGUoKSkKKyAgICAgICAgcmV0dXJuIFRyYWlsaW5nV2hpdGVz
cGFjZTo6Tm90Q29sbGFwc2libGU7CisgICAgaWYgKGlubGluZVRleHRJdGVtLmxlbmd0aCgpID09
IDEpCisgICAgICAgIHJldHVybiBUcmFpbGluZ1doaXRlc3BhY2U6OkNvbGxhcHNpYmxlOworICAg
IHJldHVybiBUcmFpbGluZ1doaXRlc3BhY2U6OkNvbGxhcHNlZDsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91
dENvbnRleHQuY3BwCmluZGV4IDgwNTY2YTdkOGM1NDUyMDA0MmMxNDU1OTUwNTc3MWQ3ZDdmMzY5
NjUuLmY1Yzc5MTVkNDEzMGVlZWQxYWE1N2NmZGY1MGI5YzRmZjQ0ODc4YjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5
b3V0Q29udGV4dC5jcHAKQEAgLTI4Nyw3ICsyODcsNyBAQCBMaW5lTGF5b3V0Q29udGV4dDo6TGlu
ZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmxheW91dExpbmUoTGluZUJ1aWxkZXImIGxpbmUs
CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHQuY29tbWl0dGVkQ291bnQpOwogICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQuaXNFbmRPZkxpbmUgPT0gTGluZUJyZWFrZXI6OklzRW5k
T2ZMaW5lOjpZZXMpOwogICAgICAgICAgICAgICAgIC8vIEFuIGVhcmxpZXIgbGluZSB3cmFwcGlu
ZyBvcHBvcnR1bml0eSB0dXJuZWQgb3V0IHRvIGJlIHRoZSBmaW5hbCBicmVha2luZyBwb3NpdGlv
bi4KLSAgICAgICAgICAgICAgICBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgLT0gbGluZS5yZXZl
cnQoKnJlc3VsdC5yZXZlcnRUbyk7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1F
TlRFRF9ZRVQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbW1pdHRlZElubGluZUl0
ZW1Db3VudCArPSByZXN1bHQuY29tbWl0dGVkQ291bnQ7CiAgICAgICAgICAgICBpZiAocmVzdWx0
LmlzRW5kT2ZMaW5lID09IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVzKSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>