<?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>155775</bug_id>
          
          <creation_ts>2016-03-22 16:37:05 -0700</creation_ts>
          <short_desc>Use references instead of pointers for absolute positioning code</short_desc>
          <delta_ts>2016-03-22 17:58:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jfernandez</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rego</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>svillar</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1177191</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-03-22 16:37:05 -0700</bug_when>
    <thetext>Use references instead of pointers for absolute positioning code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177192</commentid>
    <comment_count>1</comment_count>
      <attachid>274699</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-03-22 16:38:24 -0700</bug_when>
    <thetext>Created attachment 274699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177205</commentid>
    <comment_count>2</comment_count>
      <attachid>274699</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-03-22 16:55:18 -0700</bug_when>
    <thetext>Comment on attachment 274699
Patch

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

&gt; Source/WebCore/rendering/RenderTable.cpp:275
&gt; -    RenderBlock* cb = containingBlock();
&gt; +    RenderBlock&amp; cb = *containingBlock();

Nope. containingBlock() can return nullptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177209</commentid>
    <comment_count>3</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-03-22 17:00:46 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 274699 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=274699&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTable.cpp:275
&gt; &gt; -    RenderBlock* cb = containingBlock();
&gt; &gt; +    RenderBlock&amp; cb = *containingBlock();
&gt; 
&gt; Nope. containingBlock() can return nullptr.

It can, but we immediately dereference it. Therefore, it must not return nullptr here.

Every change in this patch is of this form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177245</commentid>
    <comment_count>4</comment_count>
      <attachid>274699</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-22 17:58:36 -0700</bug_when>
    <thetext>Comment on attachment 274699
Patch

Clearing flags on attachment: 274699

Committed r198568: &lt;http://trac.webkit.org/changeset/198568&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177246</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-22 17:58:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274699</attachid>
            <date>2016-03-22 16:38:24 -0700</date>
            <delta_ts>2016-03-22 17:58:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155775-20160322163825.patch</filename>
            <type>text/plain</type>
            <size>70785</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4NTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU1NTJmMjIyNGI3Yzli
M2YzMGFhZGJiMWFjNmMwYTBhMTVmYjczNy4uYWE1ZjRkZDJlMmRhYzM1NDlmOGIxM2IwOTE1M2Qw
YTZmNzM4MGRjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY3IEBACiAyMDE2LTAzLTIyICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKKyAgICAgICAgVXNlIHJlZmVy
ZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBmb3IgYWJzb2x1dGUgcG9zaXRpb25pbmcgY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1Nzc1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJl
IG1hbnkgcG9pbnRlcnMgd2hpY2ggd2lsbCBuZXZlciBiZSBudWxsIGluIHRoaXMgY29kZS4gVGhp
cyBwYXRjaAorICAgICAgICBtaWdyYXRlcyB0aGVtIHRvIHVzZSByZWZlcmVuY2VzLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6bWFyZ2luQmVmb3JlRXN0aW1hdGVGb3JDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6Y29uc3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OnNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2lu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25N
YXJnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVuZGVyQm94UmVnaW9uSW5m
byk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2tpcENvbnRhaW5pbmdCbG9ja0ZvclBlcmNl
bnRIZWlnaHRDYWxjdWxhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1
dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6YXZhaWxhYmxlTG9naWNhbEhlaWdodFVzaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVBbmRTZXRCbG9ja0RpcmVjdGlvbk1hcmdp
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2Fs
V2lkdGhGb3JQb3NpdGlvbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGFp
bmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cHV0ZUxvZ2ljYWxMZWZ0UG9zaXRpb25lZE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZUJsb2NrU3RhdGljRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUxvZ2ljYWxUb3BQb3NpdGlvbmVkT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFJlcGxh
Y2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dp
Y2FsSGVpZ2h0UmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6cGVyY2VudGFnZUxvZ2ljYWxI
ZWlnaHRJc1Jlc29sdmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwZXJjZW50
YWdlTG9naWNhbEhlaWdodElzUmVzb2x2YWJsZUZyb21CbG9jayk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6Omhhc0RlZmluaXRlTG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6Omhhc1Vuc3BsaXR0YWJsZVNjcm9sbGluZ092ZXJmbG93KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRlcHJl
Y2F0ZWRGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWxCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJveCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZsZXhpYmxlQm94Ojpjb21wdXRlTWFpbkF4aXNFeHRlbnRGb3JDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6YXBwbHlTdHJldGNoQWxpZ25tZW50VG9DaGlsZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyR3JpZDo6bWluU2l6ZUZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdy
aWQ6OmNvbXB1dGVNYXJnaW5Mb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6dXBk
YXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6OmxheW91dCk6CisKKzIwMTYtMDMt
MjIgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKwogICAgICAgICBb
UlRMIFNjcm9sbGJhcnNdIFBvc2l0aW9uOiBhYnNvbHV0ZSBkaXZzIGFyZSBjb3ZlcmVkIGJ5IHZl
cnRpY2FsIHNjcm9sbGJhcgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU1NTMzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHAKaW5kZXggMmRhZTk5MDk5NmNlYmRlZTNmZDVjNGE0NmU1OWY1ZjNmNmMzOTEwZi4u
MTdhMzc1YzBhYjE1MTcxY2IwMjg3Yzg1MDI4ZmQxMzdkYzAzNmVkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTY1NSw3ICs2NTUsNyBAQCB2
b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBN
YXJnaW5JbmZvJiBtYXJnaW5JbmZvLAogICAgIExheW91dFVuaXQgb2xkTmVnTWFyZ2luQmVmb3Jl
ID0gbWF4TmVnYXRpdmVNYXJnaW5CZWZvcmUoKTsKIAogICAgIC8vIFRoZSBjaGlsZCBpcyBhIG5v
cm1hbCBmbG93IG9iamVjdC4gQ29tcHV0ZSB0aGUgbWFyZ2lucyB3ZSB3aWxsIHVzZSBmb3IgY29s
bGFwc2luZyBub3cuCi0gICAgY2hpbGQuY29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0aW9uTWFyZ2lu
cyh0aGlzKTsKKyAgICBjaGlsZC5jb21wdXRlQW5kU2V0QmxvY2tEaXJlY3Rpb25NYXJnaW5zKCp0
aGlzKTsKIAogICAgIC8vIFRyeSB0byBndWVzcyBvdXIgY29ycmVjdCBsb2dpY2FsIHRvcCBwb3Np
dGlvbi4gSW4gbW9zdCBjYXNlcyB0aGlzIGd1ZXNzIHdpbGwKICAgICAvLyBiZSBjb3JyZWN0LiBP
bmx5IGlmIHdlJ3JlIHdyb25nICh3aGVuIHdlIGNvbXB1dGUgdGhlIHJlYWwgbG9naWNhbCB0b3Ag
cG9zaXRpb24pCkBAIC0xMjM1LDcgKzEyMzUsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bWFy
Z2luQmVmb3JlRXN0aW1hdGVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0Jgog
CiAgICAgLy8gTWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGUgYmxvY2sgbWFyZ2lucyBub3cgZm9yIHRo
ZSBncmFuZGNoaWxkIGJveCBzbyB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgY3VycmVudCB2YWx1ZXMu
CiAgICAgaWYgKGdyYW5kY2hpbGRCb3gtPm5lZWRzTGF5b3V0KCkpIHsKLSAgICAgICAgZ3JhbmRj
aGlsZEJveC0+Y29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0aW9uTWFyZ2lucyh0aGlzKTsKKyAgICAg
ICAgZ3JhbmRjaGlsZEJveC0+Y29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0aW9uTWFyZ2lucygqdGhp
cyk7CiAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4oKmdyYW5kY2hpbGRCb3gpKSB7CiAgICAg
ICAgICAgICBSZW5kZXJCbG9jayYgZ3JhbmRjaGlsZEJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KCpncmFuZGNoaWxkQm94KTsKICAgICAgICAgICAgIGdyYW5kY2hpbGRCbG9jay5zZXRIYXNN
YXJnaW5CZWZvcmVRdWlyayhncmFuZGNoaWxkQm94LT5zdHlsZSgpLmhhc01hcmdpbkJlZm9yZVF1
aXJrKCkpOwpAQCAtMjI3Nyw3ICsyMjc3LDcgQEAgRmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2Nr
Rmxvdzo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94JiBmbG9hdEJveCkKICAgICB9CiAg
ICAgZWxzZSB7CiAgICAgICAgIGZsb2F0Qm94LnVwZGF0ZUxvZ2ljYWxXaWR0aCgpOwotICAgICAg
ICBmbG9hdEJveC5jb21wdXRlQW5kU2V0QmxvY2tEaXJlY3Rpb25NYXJnaW5zKHRoaXMpOworICAg
ICAgICBmbG9hdEJveC5jb21wdXRlQW5kU2V0QmxvY2tEaXJlY3Rpb25NYXJnaW5zKCp0aGlzKTsK
ICAgICB9CiAKICAgICBzZXRMb2dpY2FsV2lkdGhGb3JGbG9hdCgqZmxvYXRpbmdPYmplY3QsIGxv
Z2ljYWxXaWR0aEZvckNoaWxkKGZsb2F0Qm94KSArIG1hcmdpblN0YXJ0Rm9yQ2hpbGQoZmxvYXRC
b3gpICsgbWFyZ2luRW5kRm9yQ2hpbGQoZmxvYXRCb3gpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKaW5kZXggNWNhNTE1MTZhNDBiNGNmM2E3Zjg1MDdkYjVkYWJlOWQxZWFl
YjVjYS4uYzYzNzEwYjM5MzQ2OTg2ZWNiN2Q2MDBhNWNlOTA5ODFiYTQ3ODc1NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTY1MCw3ICs2NTAsNyBAQCB2b2lkIFJl
bmRlckJveDo6dXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKQogICAgICAgICBsYXllcigpLT51cGRhdGVU
cmFuc2Zvcm0oKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnN0cmFpbkxvZ2ljYWxX
aWR0aEluUmVnaW9uQnlNaW5NYXgoTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIExheW91dFVuaXQg
YXZhaWxhYmxlV2lkdGgsIFJlbmRlckJsb2NrKiBjYiwgUmVuZGVyUmVnaW9uKiByZWdpb24pIGNv
bnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6Y29uc3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25C
eU1pbk1heChMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0
aCwgUmVuZGVyQmxvY2smIGNiLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsKICAgICBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgaWYgKCFzdHlsZVRv
VXNlLmxvZ2ljYWxNYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkpCkBAIC0xODU5LDE4ICsxODU5LDE4
IEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpjbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9j
YXRpb24sIFJlbmRlclJlZ2lvbiogcmVnaW9uCiAgICAgcmV0dXJuIGNsaXBSZWN0OwogfQogCi1M
YXlvdXRVbml0IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyhMYXlv
dXRVbml0IGNoaWxkTWFyZ2luU3RhcnQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5FbmQsIGNvbnN0
IFJlbmRlckJsb2NrKiBjYiwgUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CitMYXlvdXRVbml0
IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyhMYXlvdXRVbml0IGNo
aWxkTWFyZ2luU3RhcnQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5FbmQsIGNvbnN0IFJlbmRlckJs
b2NrJiBjYiwgUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CiB7ICAgIAogICAgIFJlbmRlclJl
Z2lvbiogY29udGFpbmluZ0Jsb2NrUmVnaW9uID0gbnVsbHB0cjsKICAgICBMYXlvdXRVbml0IGxv
Z2ljYWxUb3BQb3NpdGlvbiA9IGxvZ2ljYWxUb3AoKTsKICAgICBpZiAocmVnaW9uKSB7CiAgICAg
ICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbiA9IHJlZ2lvbiA/IHJl
Z2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlKCkgOiBMYXlvdXRVbml0KCk7CiAgICAgICAgIGxvZ2ljYWxUb3BQb3Np
dGlvbiA9IHN0ZDo6bWF4KGxvZ2ljYWxUb3BQb3NpdGlvbiwgbG9naWNhbFRvcFBvc2l0aW9uICsg
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbik7Ci0gICAgICAgIGNvbnRhaW5pbmdCbG9ja1Jl
Z2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7CisgICAgICAgIGNv
bnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9u
KTsKICAgICB9CiAKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBjYi0+bG9naWNhbEhl
aWdodEZvckNoaWxkKCp0aGlzKTsKLSAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGNiLT5hdmFpbGFi
bGVMb2dpY2FsV2lkdGhGb3JMaW5lSW5SZWdpb24obG9naWNhbFRvcFBvc2l0aW9uLCBEb05vdElu
ZGVudFRleHQsIGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiwgbG9naWNhbEhlaWdodCkgLSBjaGlsZE1h
cmdpblN0YXJ0IC0gY2hpbGRNYXJnaW5FbmQ7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
ID0gY2IubG9naWNhbEhlaWdodEZvckNoaWxkKCp0aGlzKTsKKyAgICBMYXlvdXRVbml0IHJlc3Vs
dCA9IGNiLmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmVJblJlZ2lvbihsb2dpY2FsVG9wUG9z
aXRpb24sIERvTm90SW5kZW50VGV4dCwgY29udGFpbmluZ0Jsb2NrUmVnaW9uLCBsb2dpY2FsSGVp
Z2h0KSAtIGNoaWxkTWFyZ2luU3RhcnQgLSBjaGlsZE1hcmdpbkVuZDsKIAogICAgIC8vIFdlIG5l
ZWQgdG8gc2VlIGlmIG1hcmdpbnMgb24gZWl0aGVyIHRoZSBzdGFydCBzaWRlIG9yIHRoZSBlbmQg
c2lkZSBjYW4gY29udGFpbiB0aGUgZmxvYXRzIGluIHF1ZXN0aW9uLiBJZiB0aGV5IGNhbiwKICAg
ICAvLyB0aGVuIGp1c3QgdXNpbmcgdGhlIGxpbmUgd2lkdGggaXMgaW5hY2N1cmF0ZS4gSW4gdGhl
IGNhc2Ugd2hlcmUgYSBmbG9hdCBjb21wbGV0ZWx5IGZpdHMsIHdlIGRvbid0IG5lZWQgdG8gdXNl
IHRoZSBsaW5lCkBAIC0xODc4LDkgKzE4NzgsOSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6c2hy
aW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyhMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3Rhcgog
ICAgIC8vIGRvZXNuJ3QgZml0LCB3ZSBjYW4gdXNlIHRoZSBsaW5lIG9mZnNldCwgYnV0IHdlIG5l
ZWQgdG8gZ3JvdyBpdCBieSB0aGUgbWFyZ2luIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB0aGUg
bWFyZ2luIHdhcwogICAgIC8vICJjb25zdW1lZCIgYnkgdGhlIGZsb2F0LiBOZWdhdGl2ZSBtYXJn
aW5zIGFyZW4ndCBjb25zdW1lZCBieSB0aGUgZmxvYXQsIGFuZCBzbyB3ZSBpZ25vcmUgdGhlbS4K
ICAgICBpZiAoY2hpbGRNYXJnaW5TdGFydCA+IDApIHsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGFy
dENvbnRlbnRTaWRlID0gY2ItPnN0YXJ0T2Zmc2V0Rm9yQ29udGVudChjb250YWluaW5nQmxvY2tS
ZWdpb24pOworICAgICAgICBMYXlvdXRVbml0IHN0YXJ0Q29udGVudFNpZGUgPSBjYi5zdGFydE9m
ZnNldEZvckNvbnRlbnQoY29udGFpbmluZ0Jsb2NrUmVnaW9uKTsKICAgICAgICAgTGF5b3V0VW5p
dCBzdGFydENvbnRlbnRTaWRlV2l0aE1hcmdpbiA9IHN0YXJ0Q29udGVudFNpZGUgKyBjaGlsZE1h
cmdpblN0YXJ0OwotICAgICAgICBMYXlvdXRVbml0IHN0YXJ0T2Zmc2V0ID0gY2ItPnN0YXJ0T2Zm
c2V0Rm9yTGluZUluUmVnaW9uKGxvZ2ljYWxUb3BQb3NpdGlvbiwgRG9Ob3RJbmRlbnRUZXh0LCBj
b250YWluaW5nQmxvY2tSZWdpb24sIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICBMYXlvdXRVbml0
IHN0YXJ0T2Zmc2V0ID0gY2Iuc3RhcnRPZmZzZXRGb3JMaW5lSW5SZWdpb24obG9naWNhbFRvcFBv
c2l0aW9uLCBEb05vdEluZGVudFRleHQsIGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiwgbG9naWNhbEhl
aWdodCk7CiAgICAgICAgIGlmIChzdGFydE9mZnNldCA+IHN0YXJ0Q29udGVudFNpZGVXaXRoTWFy
Z2luKQogICAgICAgICAgICAgcmVzdWx0ICs9IGNoaWxkTWFyZ2luU3RhcnQ7CiAgICAgICAgIGVs
c2UKQEAgLTE4ODgsOSArMTg4OCw5IEBAIExheW91dFVuaXQgUmVuZGVyQm94OjpzaHJpbmtMb2dp
Y2FsV2lkdGhUb0F2b2lkRmxvYXRzKExheW91dFVuaXQgY2hpbGRNYXJnaW5TdGFyCiAgICAgfQog
ICAgIAogICAgIGlmIChjaGlsZE1hcmdpbkVuZCA+IDApIHsKLSAgICAgICAgTGF5b3V0VW5pdCBl
bmRDb250ZW50U2lkZSA9IGNiLT5lbmRPZmZzZXRGb3JDb250ZW50KGNvbnRhaW5pbmdCbG9ja1Jl
Z2lvbik7CisgICAgICAgIExheW91dFVuaXQgZW5kQ29udGVudFNpZGUgPSBjYi5lbmRPZmZzZXRG
b3JDb250ZW50KGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7CiAgICAgICAgIExheW91dFVuaXQgZW5k
Q29udGVudFNpZGVXaXRoTWFyZ2luID0gZW5kQ29udGVudFNpZGUgKyBjaGlsZE1hcmdpbkVuZDsK
LSAgICAgICAgTGF5b3V0VW5pdCBlbmRPZmZzZXQgPSBjYi0+ZW5kT2Zmc2V0Rm9yTGluZUluUmVn
aW9uKGxvZ2ljYWxUb3BQb3NpdGlvbiwgRG9Ob3RJbmRlbnRUZXh0LCBjb250YWluaW5nQmxvY2tS
ZWdpb24sIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICBMYXlvdXRVbml0IGVuZE9mZnNldCA9IGNi
LmVuZE9mZnNldEZvckxpbmVJblJlZ2lvbihsb2dpY2FsVG9wUG9zaXRpb24sIERvTm90SW5kZW50
VGV4dCwgY29udGFpbmluZ0Jsb2NrUmVnaW9uLCBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgaWYg
KGVuZE9mZnNldCA+IGVuZENvbnRlbnRTaWRlV2l0aE1hcmdpbikKICAgICAgICAgICAgIHJlc3Vs
dCArPSBjaGlsZE1hcmdpbkVuZDsKICAgICAgICAgZWxzZQpAQCAtMjM4NSw5ICsyMzg1LDkgQEAg
dm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihMb2dpY2FsRXh0ZW50
Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGUKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGVUb1Vz
ZSA9IHN0eWxlKCk7CiAgICAgTGVuZ3RoIGxvZ2ljYWxXaWR0aExlbmd0aCA9IHRyZWF0QXNSZXBs
YWNlZCA/IExlbmd0aChjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoKSwgRml4ZWQpIDogc3R5
bGVUb1VzZS5sb2dpY2FsV2lkdGgoKTsKIAotICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5p
bmdCbG9jaygpOworICAgIFJlbmRlckJsb2NrJiBjYiA9ICpjb250YWluaW5nQmxvY2soKTsKICAg
ICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+
KDAsIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJblJlZ2lvbihyZWdpb24p
KTsKLSAgICBib29sIGhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2sgPSBjYi0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOworICAgIGJv
b2wgaGFzUGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9jayA9IGNiLmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgIT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKIAogICAgIGlmIChpc0lubGlu
ZSgpICYmICFpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpKSB7CiAgICAgICAgIC8vIGp1c3Qg
Y2FsY3VsYXRlIG1hcmdpbnMKQEAgLTI0MjEsMjIgKzI0MjEsMjIgQEAgdm9pZCBSZW5kZXJCb3g6
OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMm
IGNvbXB1dGUKICAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1fZW5kID0gbWluaW11
bVZhbHVlRm9yTGVuZ3RoKHN0eWxlVG9Vc2UubWFyZ2luRW5kKCksIGNvbnRhaW5lckxvZ2ljYWxX
aWR0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2Fs
V2lkdGhGb3JBdXRvTWFyZ2lucyA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aDsKLSAgICAgICAgaWYg
KGF2b2lkc0Zsb2F0cygpICYmIGNiLT5jb250YWluc0Zsb2F0cygpKQorICAgICAgICBpZiAoYXZv
aWRzRmxvYXRzKCkgJiYgY2IuY29udGFpbnNGbG9hdHMoKSkKICAgICAgICAgICAgIGNvbnRhaW5l
ckxvZ2ljYWxXaWR0aEZvckF1dG9NYXJnaW5zID0gY29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGlu
ZVdpZHRoSW5SZWdpb24ocmVnaW9uKTsKLSAgICAgICAgYm9vbCBoYXNJbnZlcnRlZERpcmVjdGlv
biA9IGNiLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAhPSBzdHlsZSgpLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICAgICAgYm9vbCBoYXNJbnZlcnRlZERpcmVjdGlvbiA9
IGNiLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICE9IHN0eWxlKCkuaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpOwogICAgICAgICBjb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucyhj
YiwgY29udGFpbmVyTG9naWNhbFdpZHRoRm9yQXV0b01hcmdpbnMsIGNvbXB1dGVkVmFsdWVzLm1f
ZXh0ZW50LAogICAgICAgICAgICAgaGFzSW52ZXJ0ZWREaXJlY3Rpb24gPyBjb21wdXRlZFZhbHVl
cy5tX21hcmdpbnMubV9lbmQgOiBjb21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9zdGFydCwKICAg
ICAgICAgICAgIGhhc0ludmVydGVkRGlyZWN0aW9uID8gY29tcHV0ZWRWYWx1ZXMubV9tYXJnaW5z
Lm1fc3RhcnQgOiBjb21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9lbmQpOwogICAgIH0KICAgICAK
ICAgICBpZiAoIWhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2sgJiYgY29udGFpbmVyTG9n
aWNhbFdpZHRoICYmIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAhPSAoY29tcHV0ZWRWYWx1ZXMubV9l
eHRlbnQgKyBjb21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9zdGFydCArIGNvbXB1dGVkVmFsdWVz
Lm1fbWFyZ2lucy5tX2VuZCkKLSAgICAgICAgJiYgIWlzRmxvYXRpbmcoKSAmJiAhaXNJbmxpbmUo
KSAmJiAhY2ItPmlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkKKyAgICAgICAgJiYg
IWlzRmxvYXRpbmcoKSAmJiAhaXNJbmxpbmUoKSAmJiAhY2IuaXNGbGV4aWJsZUJveEluY2x1ZGlu
Z0RlcHJlY2F0ZWQoKQogI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAgICAgICYmICFj
Yi0+aXNSZW5kZXJHcmlkKCkKKyAgICAgICAgJiYgIWNiLmlzUmVuZGVyR3JpZCgpCiAjZW5kaWYK
ICAgICAgICAgKSB7Ci0gICAgICAgIExheW91dFVuaXQgbmV3TWFyZ2luID0gY29udGFpbmVyTG9n
aWNhbFdpZHRoIC0gY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgLSBjYi0+bWFyZ2luU3RhcnRGb3JD
aGlsZCgqdGhpcyk7Ci0gICAgICAgIGJvb2wgaGFzSW52ZXJ0ZWREaXJlY3Rpb24gPSBjYi0+c3R5
bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgIT0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCk7CisgICAgICAgIExheW91dFVuaXQgbmV3TWFyZ2luID0gY29udGFpbmVyTG9naWNh
bFdpZHRoIC0gY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgLSBjYi5tYXJnaW5TdGFydEZvckNoaWxk
KCp0aGlzKTsKKyAgICAgICAgYm9vbCBoYXNJbnZlcnRlZERpcmVjdGlvbiA9IGNiLnN0eWxlKCku
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICE9IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpOwogICAgICAgICBpZiAoaGFzSW52ZXJ0ZWREaXJlY3Rpb24pCiAgICAgICAgICAgICBjb21w
dXRlZFZhbHVlcy5tX21hcmdpbnMubV9zdGFydCA9IG5ld01hcmdpbjsKICAgICAgICAgZWxzZQpA
QCAtMjQ4NCw3ICsyNDg0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVJbnRyaW5z
aWNMb2dpY2FsV2lkdGhVc2luZyhMZW5ndGggbG9naWNhbFdpZHRoTGVuZ3QKIH0KIAogTGF5b3V0
VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKFNpemVUeXBl
IHdpZHRoVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dp
Y2FsV2lkdGgsCi0gICAgY29uc3QgUmVuZGVyQmxvY2sqIGNiLCBSZW5kZXJSZWdpb24qIHJlZ2lv
bikgY29uc3QKKyAgICBjb25zdCBSZW5kZXJCbG9jayYgY2IsIFJlbmRlclJlZ2lvbiogcmVnaW9u
KSBjb25zdAogewogICAgIEFTU0VSVCh3aWR0aFR5cGUgPT0gTWluU2l6ZSB8fCB3aWR0aFR5cGUg
PT0gTWFpbk9yUHJlZmVycmVkU2l6ZSB8fCAhbG9naWNhbFdpZHRoLmlzQXV0bygpKTsKICAgICBp
ZiAod2lkdGhUeXBlID09IE1pblNpemUgJiYgbG9naWNhbFdpZHRoLmlzQXV0bygpKQpAQCAtMjUw
Miw3ICsyNTAyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJ
blJlZ2lvblVzaW5nKFNpemVUeXBlIHdpZHRoVHlwZSwgTGVuZ3QKICAgICBMYXlvdXRVbml0IG1h
cmdpbkVuZCA9IDA7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhSZXN1bHQgPSBmaWxsQXZh
aWxhYmxlTWVhc3VyZShhdmFpbGFibGVMb2dpY2FsV2lkdGgsIG1hcmdpblN0YXJ0LCBtYXJnaW5F
bmQpOwogCi0gICAgaWYgKHNocmlua1RvQXZvaWRGbG9hdHMoKSAmJiBjYi0+Y29udGFpbnNGbG9h
dHMoKSkKKyAgICBpZiAoc2hyaW5rVG9Bdm9pZEZsb2F0cygpICYmIGNiLmNvbnRhaW5zRmxvYXRz
KCkpCiAgICAgICAgIGxvZ2ljYWxXaWR0aFJlc3VsdCA9IHN0ZDo6bWluKGxvZ2ljYWxXaWR0aFJl
c3VsdCwgc2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyhtYXJnaW5TdGFydCwgbWFyZ2lu
RW5kLCBjYiwgcmVnaW9uKSk7CiAKICAgICBpZiAod2lkdGhUeXBlID09IE1haW5PclByZWZlcnJl
ZFNpemUgJiYgc2l6ZXNMb2dpY2FsV2lkdGhUb0ZpdENvbnRlbnQod2lkdGhUeXBlKSkKQEAgLTI2
MDksOSArMjYwOSw5IEBAIGJvb2wgUmVuZGVyQm94OjpzaXplc0xvZ2ljYWxXaWR0aFRvRml0Q29u
dGVudChTaXplVHlwZSB3aWR0aFR5cGUpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIFJlbmRlckJveDo6Y29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoUmVuZGVyQmxvY2sq
IGNvbnRhaW5pbmdCbG9jaywgTGF5b3V0VW5pdCBjb250YWluZXJXaWR0aCwgTGF5b3V0VW5pdCBj
aGlsZFdpZHRoLCBMYXlvdXRVbml0JiBtYXJnaW5TdGFydCwgTGF5b3V0VW5pdCYgbWFyZ2luRW5k
KSBjb25zdAordm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKFJl
bmRlckJsb2NrJiBjb250YWluaW5nQmxvY2ssIExheW91dFVuaXQgY29udGFpbmVyV2lkdGgsIExh
eW91dFVuaXQgY2hpbGRXaWR0aCwgTGF5b3V0VW5pdCYgbWFyZ2luU3RhcnQsIExheW91dFVuaXQm
IG1hcmdpbkVuZCkgY29uc3QKIHsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmluZ0Js
b2NrU3R5bGUgPSBjb250YWluaW5nQmxvY2stPnN0eWxlKCk7CisgICAgY29uc3QgUmVuZGVyU3R5
bGUmIGNvbnRhaW5pbmdCbG9ja1N0eWxlID0gY29udGFpbmluZ0Jsb2NrLnN0eWxlKCk7CiAgICAg
TGVuZ3RoIG1hcmdpblN0YXJ0TGVuZ3RoID0gc3R5bGUoKS5tYXJnaW5TdGFydFVzaW5nKCZjb250
YWluaW5nQmxvY2tTdHlsZSk7CiAgICAgTGVuZ3RoIG1hcmdpbkVuZExlbmd0aCA9IHN0eWxlKCku
bWFyZ2luRW5kVXNpbmcoJmNvbnRhaW5pbmdCbG9ja1N0eWxlKTsKIApAQCAtMjYyNCw3ICsyNjI0
LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKFJlbmRl
ckJsb2NrKiBjb250YWluaW5nQmxvY2ssIExheW8KIAogICAgIC8vIENhc2UgT25lOiBUaGUgb2Jq
ZWN0IGlzIGJlaW5nIGNlbnRlcmVkIGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3MgYXZhaWxhYmxl
IGxvZ2ljYWwgd2lkdGguCiAgICAgaWYgKChtYXJnaW5TdGFydExlbmd0aC5pc0F1dG8oKSAmJiBt
YXJnaW5FbmRMZW5ndGguaXNBdXRvKCkgJiYgY2hpbGRXaWR0aCA8IGNvbnRhaW5lcldpZHRoKQot
ICAgICAgICB8fCAoIW1hcmdpblN0YXJ0TGVuZ3RoLmlzQXV0bygpICYmICFtYXJnaW5FbmRMZW5n
dGguaXNBdXRvKCkgJiYgY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpLnRleHRBbGlnbigpID09IFdF
QktJVF9DRU5URVIpKSB7CisgICAgICAgIHx8ICghbWFyZ2luU3RhcnRMZW5ndGguaXNBdXRvKCkg
JiYgIW1hcmdpbkVuZExlbmd0aC5pc0F1dG8oKSAmJiBjb250YWluaW5nQmxvY2suc3R5bGUoKS50
ZXh0QWxpZ24oKSA9PSBXRUJLSVRfQ0VOVEVSKSkgewogICAgICAgICAvLyBPdGhlciBicm93c2Vy
cyBjZW50ZXIgdGhlIG1hcmdpbiBib3ggZm9yIGFsaWduPWNlbnRlciBlbGVtZW50cyBzbyB3ZSBt
YXRjaCB0aGVtIGhlcmUuCiAgICAgICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnRXaWR0aCA9IG1p
bmltdW1WYWx1ZUZvckxlbmd0aChtYXJnaW5TdGFydExlbmd0aCwgY29udGFpbmVyV2lkdGgpOwog
ICAgICAgICBMYXlvdXRVbml0IG1hcmdpbkVuZFdpZHRoID0gbWluaW11bVZhbHVlRm9yTGVuZ3Ro
KG1hcmdpbkVuZExlbmd0aCwgY29udGFpbmVyV2lkdGgpOwpAQCAtMjY3OSwxMCArMjY3OSwxMCBA
QCBSZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJCb3g6OnJlbmRlckJveFJlZ2lvbkluZm8oUmVu
ZGVyUmVnaW9uKiByZWdpb24sIFJlbmRlcgogICAgIGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lv
bihjb21wdXRlZFZhbHVlcywgcmVnaW9uKTsKIAogICAgIC8vIE5vdyBkZXRlcm1pbmUgdGhlIGlu
c2V0cyBiYXNlZCBvZmYgd2hlcmUgdGhpcyBvYmplY3QgaXMgc3VwcG9zZWQgdG8gYmUgcG9zaXRp
b25lZC4KLSAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKLSAgICBSZW5k
ZXJSZWdpb24qIGNsYW1wZWRDb250YWluaW5nQmxvY2tSZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0
QW5kRW5kUmVnaW9ucyhyZWdpb24pOwotICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGNvbnRhaW5p
bmdCbG9ja0luZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhjbGFtcGVkQ29udGFpbmluZ0Js
b2NrUmVnaW9uKTsKLSAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aCA9
IGNiLT5sb2dpY2FsV2lkdGgoKTsKKyAgICBSZW5kZXJCbG9jayYgY2IgPSAqY29udGFpbmluZ0Js
b2NrKCk7CisgICAgUmVuZGVyUmVnaW9uKiBjbGFtcGVkQ29udGFpbmluZ0Jsb2NrUmVnaW9uID0g
Y2IuY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOworICAgIFJlbmRlckJveFJlZ2lv
bkluZm8qIGNvbnRhaW5pbmdCbG9ja0luZm8gPSBjYi5yZW5kZXJCb3hSZWdpb25JbmZvKGNsYW1w
ZWRDb250YWluaW5nQmxvY2tSZWdpb24pOworICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2Nr
TG9naWNhbFdpZHRoID0gY2IubG9naWNhbFdpZHRoKCk7CiAgICAgTGF5b3V0VW5pdCBjb250YWlu
aW5nQmxvY2tMb2dpY2FsV2lkdGhJblJlZ2lvbiA9IGNvbnRhaW5pbmdCbG9ja0luZm8gPyBjb250
YWluaW5nQmxvY2tJbmZvLT5sb2dpY2FsV2lkdGgoKSA6IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxX
aWR0aDsKICAgICAKICAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0SW5SZWdpb24gPSBjb21wdXRl
ZFZhbHVlcy5tX21hcmdpbnMubV9zdGFydDsKQEAgLTI2OTcsMTUgKzI2OTcsMTUgQEAgUmVuZGVy
Qm94UmVnaW9uSW5mbyogUmVuZGVyQm94OjpyZW5kZXJCb3hSZWdpb25JbmZvKFJlbmRlclJlZ2lv
biogcmVnaW9uLCBSZW5kZXIKIAogICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSAw
OwogICAgIAotICAgIGlmICghaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgYXZvaWRzRmxvYXRz
KCkgJiYgY2ItPmNvbnRhaW5zRmxvYXRzKCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGFydFBv
c2l0aW9uRGVsdGEgPSBjYi0+Y29tcHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZvckNoaWxkQXZvaWRp
bmdGbG9hdHMoKnRoaXMsIG1hcmdpblN0YXJ0SW5SZWdpb24sIHJlZ2lvbik7Ci0gICAgICAgIGlm
IChjYi0+c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgaWYgKCFpc091dE9m
Rmxvd1Bvc2l0aW9uZWQoKSAmJiBhdm9pZHNGbG9hdHMoKSAmJiBjYi5jb250YWluc0Zsb2F0cygp
KSB7CisgICAgICAgIExheW91dFVuaXQgc3RhcnRQb3NpdGlvbkRlbHRhID0gY2IuY29tcHV0ZVN0
YXJ0UG9zaXRpb25EZWx0YUZvckNoaWxkQXZvaWRpbmdGbG9hdHMoKnRoaXMsIG1hcmdpblN0YXJ0
SW5SZWdpb24sIHJlZ2lvbik7CisgICAgICAgIGlmIChjYi5zdHlsZSgpLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSkKICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0RGVsdGEgKz0gc3RhcnRQb3NpdGlv
bkRlbHRhOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2dpY2FsUmlnaHREZWx0YSArPSBz
dGFydFBvc2l0aW9uRGVsdGE7CiAgICAgfQogCi0gICAgaWYgKGNiLT5zdHlsZSgpLmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSkKKyAgICBpZiAoY2Iuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpCiAgICAgICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ICs9IGxvZ2ljYWxMZWZ0RGVsdGE7CiAg
ICAgZWxzZQogICAgICAgICBsb2dpY2FsTGVmdE9mZnNldCAtPSAod2lkdGhEZWx0YSArIGxvZ2lj
YWxSaWdodERlbHRhKTsKQEAgLTI3NzEsMTEgKzI3NzEsMTEgQEAgdm9pZCBSZW5kZXJCb3g6OmNv
bXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBs
b2dpY2EKICAgICBpZiAoaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgIGNvbXB1dGVQ
b3NpdGlvbmVkTG9naWNhbEhlaWdodChjb21wdXRlZFZhbHVlcyk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICBib29sIGhh
c1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2sgPSBjYi0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOworICAgICAgICBSZW5kZXJCbG9jayYg
Y2IgPSAqY29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgIGJvb2wgaGFzUGVycGVuZGljdWxhckNv
bnRhaW5pbmdCbG9jayA9IGNiLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKTsKICAgICAKICAgICAgICAgaWYgKCFoYXNQZXJwZW5kaWN1bGFyQ29u
dGFpbmluZ0Jsb2NrKSB7Ci0gICAgICAgICAgICBib29sIHNob3VsZEZsaXBCZWZvcmVBZnRlciA9
IGNiLT5zdHlsZSgpLndyaXRpbmdNb2RlKCkgIT0gc3R5bGUoKS53cml0aW5nTW9kZSgpOworICAg
ICAgICAgICAgYm9vbCBzaG91bGRGbGlwQmVmb3JlQWZ0ZXIgPSBjYi5zdHlsZSgpLndyaXRpbmdN
b2RlKCkgIT0gc3R5bGUoKS53cml0aW5nTW9kZSgpOwogICAgICAgICAgICAgY29tcHV0ZUJsb2Nr
RGlyZWN0aW9uTWFyZ2lucyhjYiwKICAgICAgICAgICAgICAgICBzaG91bGRGbGlwQmVmb3JlQWZ0
ZXIgPyBjb21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9hZnRlciA6IGNvbXB1dGVkVmFsdWVzLm1f
bWFyZ2lucy5tX2JlZm9yZSwKICAgICAgICAgICAgICAgICBzaG91bGRGbGlwQmVmb3JlQWZ0ZXIg
PyBjb21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9iZWZvcmUgOiBjb21wdXRlZFZhbHVlcy5tX21h
cmdpbnMubV9hZnRlcik7CkBAIC0yNzg0LDcgKzI3ODQsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29t
cHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxv
Z2ljYQogICAgICAgICAvLyBGb3IgdGFibGVzLCBjYWxjdWxhdGUgbWFyZ2lucyBvbmx5LgogICAg
ICAgICBpZiAoaXNUYWJsZSgpKSB7CiAgICAgICAgICAgICBpZiAoaGFzUGVycGVuZGljdWxhckNv
bnRhaW5pbmdCbG9jaykgewotICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxkRmxpcEJlZm9yZUFm
dGVyID0gc2hvdWxkRmxpcEJlZm9yZUFmdGVyTWFyZ2lucyhjYi0+c3R5bGUoKSwgJnN0eWxlKCkp
OworICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxkRmxpcEJlZm9yZUFmdGVyID0gc2hvdWxkRmxp
cEJlZm9yZUFmdGVyTWFyZ2lucyhjYi5zdHlsZSgpLCAmc3R5bGUoKSk7CiAgICAgICAgICAgICAg
ICAgY29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoY2IsIGNvbnRhaW5pbmdCbG9ja0xvZ2lj
YWxXaWR0aEZvckNvbnRlbnQoKSwgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQsCiAgICAgICAgICAg
ICAgICAgICAgIHNob3VsZEZsaXBCZWZvcmVBZnRlciA/IGNvbXB1dGVkVmFsdWVzLm1fbWFyZ2lu
cy5tX2FmdGVyIDogY29tcHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1fYmVmb3JlLAogICAgICAgICAg
ICAgICAgICAgICBzaG91bGRGbGlwQmVmb3JlQWZ0ZXIgPyBjb21wdXRlZFZhbHVlcy5tX21hcmdp
bnMubV9iZWZvcmUgOiBjb21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9hZnRlcik7CkBAIC0yODQ5
LDcgKzI4NDksNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYQogICAgICAgICBjb21wdXRlZFZh
bHVlcy5tX2V4dGVudCA9IGhlaWdodFJlc3VsdDsKIAogICAgICAgICBpZiAoaGFzUGVycGVuZGlj
dWxhckNvbnRhaW5pbmdCbG9jaykgewotICAgICAgICAgICAgYm9vbCBzaG91bGRGbGlwQmVmb3Jl
QWZ0ZXIgPSBzaG91bGRGbGlwQmVmb3JlQWZ0ZXJNYXJnaW5zKGNiLT5zdHlsZSgpLCAmc3R5bGUo
KSk7CisgICAgICAgICAgICBib29sIHNob3VsZEZsaXBCZWZvcmVBZnRlciA9IHNob3VsZEZsaXBC
ZWZvcmVBZnRlck1hcmdpbnMoY2Iuc3R5bGUoKSwgJnN0eWxlKCkpOwogICAgICAgICAgICAgY29t
cHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoY2IsIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0
aEZvckNvbnRlbnQoKSwgaGVpZ2h0UmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBzaG91bGRG
bGlwQmVmb3JlQWZ0ZXIgPyBjb21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9hZnRlciA6IGNvbXB1
dGVkVmFsdWVzLm1fbWFyZ2lucy5tX2JlZm9yZSwKICAgICAgICAgICAgICAgICAgICAgc2hvdWxk
RmxpcEJlZm9yZUFmdGVyID8gY29tcHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1fYmVmb3JlIDogY29t
cHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1fYWZ0ZXIpOwpAQCAtMjkxNiwxOCArMjkxNiwxOCBAQCBP
cHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJCb3g6OmNvbXB1dGVDb250ZW50QW5kU2Nyb2xsYmFy
TG9naWNhbEhlaWdodFVzaW5nKFNpegogICAgIHJldHVybiBOdWxsb3B0OwogfQogCi1ib29sIFJl
bmRlckJveDo6c2tpcENvbnRhaW5pbmdCbG9ja0ZvclBlcmNlbnRIZWlnaHRDYWxjdWxhdGlvbihj
b25zdCBSZW5kZXJCb3gqIGNvbnRhaW5pbmdCbG9jaywgYm9vbCBpc1BlcnBlbmRpY3VsYXJXcml0
aW5nTW9kZSkgY29uc3QKK2Jvb2wgUmVuZGVyQm94Ojpza2lwQ29udGFpbmluZ0Jsb2NrRm9yUGVy
Y2VudEhlaWdodENhbGN1bGF0aW9uKGNvbnN0IFJlbmRlckJveCYgY29udGFpbmluZ0Jsb2NrLCBi
b29sIGlzUGVycGVuZGljdWxhcldyaXRpbmdNb2RlKSBjb25zdAogewogICAgIC8vIEZsb3cgdGhy
ZWFkcyBmb3IgbXVsdGljb2wgb3IgcGFnZWQgb3ZlcmZsb3cgc2hvdWxkIGJlIHNraXBwZWQuIFRo
ZXkgYXJlIGludmlzaWJsZSB0byB0aGUgRE9NLAogICAgIC8vIGFuZCBwZXJjZW50IGhlaWdodHMg
b2YgY2hpbGRyZW4gc2hvdWxkIGJlIHJlc29sdmVkIGFnYWluc3QgdGhlIG11bHRpY29sIG9yIHBh
Z2VkIGNvbnRhaW5lci4KLSAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0luRmxvd1JlbmRlckZs
b3dUaHJlYWQoKSAmJiAhaXNQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUpCisgICAgaWYgKGNvbnRh
aW5pbmdCbG9jay5pc0luRmxvd1JlbmRlckZsb3dUaHJlYWQoKSAmJiAhaXNQZXJwZW5kaWN1bGFy
V3JpdGluZ01vZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRm9yIHF1aXJrcyBt
b2RlIGFuZCBhbm9ueW1vdXMgYmxvY2tzLCB3ZSBza2lwIGF1dG8taGVpZ2h0IGNvbnRhaW5pbmdC
bG9ja3Mgd2hlbiBjb21wdXRpbmcgcGVyY2VudGFnZXMuCiAgICAgLy8gRm9yIHN0YW5kYXJkcyBt
b2RlLCB3ZSB0cmVhdCB0aGUgcGVyY2VudGFnZSBhcyBhdXRvIGlmIGl0IGhhcyBhbiBhdXRvLWhl
aWdodCBjb250YWluaW5nIGJsb2NrLgotICAgIGlmICghZG9jdW1lbnQoKS5pblF1aXJrc01vZGUo
KSAmJiAhY29udGFpbmluZ0Jsb2NrLT5pc0Fub255bW91c0Jsb2NrKCkpCisgICAgaWYgKCFkb2N1
bWVudCgpLmluUXVpcmtzTW9kZSgpICYmICFjb250YWluaW5nQmxvY2suaXNBbm9ueW1vdXNCbG9j
aygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuICFjb250YWluaW5nQmxvY2st
PmlzVGFibGVDZWxsKCkgJiYgIWNvbnRhaW5pbmdCbG9jay0+aXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkgJiYgY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSAm
JiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5pbmdCbG9jay0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKTsKKyAgICByZXR1cm4gIWNvbnRhaW5pbmdCbG9jay5pc1RhYmxlQ2Vs
bCgpICYmICFjb250YWluaW5nQmxvY2suaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgY29udGFp
bmluZ0Jsb2NrLnN0eWxlKCkubG9naWNhbEhlaWdodCgpLmlzQXV0bygpICYmIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCk7CiB9CiAKIHN0YXRpYyBib29sIHRhYmxlQ2VsbFNob3VsZEhhdmVaZXJvSW5pdGlhbFNpemUo
Y29uc3QgUmVuZGVyQmxvY2smIGJsb2NrLCBib29sIHNjcm9sbHNPdmVyZmxvd1kpCkBAIC0yOTUy
LDcgKzI5NTIsNyBAQCBPcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJCb3g6OmNvbXB1dGVQZXJj
ZW50YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5ndGgmIGhlaQogICAgIGNvbnN0IFJlbmRlckJv
eCogY29udGFpbmluZ0Jsb2NrQ2hpbGQgPSB0aGlzOwogICAgIExheW91dFVuaXQgcm9vdE1hcmdp
bkJvcmRlclBhZGRpbmdIZWlnaHQgPSAwOwogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKTsKLSAgICB3aGlsZSAoY2IgJiYgIWlzPFJlbmRlclZpZXc+KCpj
YikgJiYgc2tpcENvbnRhaW5pbmdCbG9ja0ZvclBlcmNlbnRIZWlnaHRDYWxjdWxhdGlvbihjYiwg
aXNIb3Jpem9udGFsICE9IGNiLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSkgeworICAgIHdo
aWxlIChjYiAmJiAhaXM8UmVuZGVyVmlldz4oKmNiKSAmJiBza2lwQ29udGFpbmluZ0Jsb2NrRm9y
UGVyY2VudEhlaWdodENhbGN1bGF0aW9uKCpjYiwgaXNIb3Jpem9udGFsICE9IGNiLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKSkgewogICAgICAgICBpZiAoY2ItPmlzQm9keSgpIHx8IGNiLT5p
c0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpCiAgICAgICAgICAgICByb290TWFyZ2luQm9yZGVy
UGFkZGluZ0hlaWdodCArPSBjYi0+bWFyZ2luQmVmb3JlKCkgKyBjYi0+bWFyZ2luQWZ0ZXIoKSAr
IGNiLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOwogICAgICAgICBza2lwcGVkQXV0
b0hlaWdodENvbnRhaW5pbmdCbG9jayA9IHRydWU7CkBAIC0zMDU4LDcgKzMwNTgsNyBAQCBMYXlv
dXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcoU2l6ZVR5
cGUgd2lkdGhUeXBlLCBMZW5ndAogICAgICAgICAgICAgLy8gRklYTUU6IGNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSBpcyB3cm9uZyBpZiB0aGUgcmVwbGFjZWQgZWxlbWVu
dCdzIGJsb2NrLWZsb3cgaXMgcGVycGVuZGljdWxhciB0byB0aGUKICAgICAgICAgICAgIC8vIGNv
bnRhaW5pbmcgYmxvY2sncyBibG9jay1mbG93LgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NDk2Ci0gICAgICAgICAgICBjb25zdCBMYXlv
dXRVbml0IGN3ID0gaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgPyBjb250YWluaW5nQmxvY2tMb2dp
Y2FsV2lkdGhGb3JQb3NpdGlvbmVkKGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0Pihjb250
YWluZXIoKSkpIDogY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpOworICAg
ICAgICAgICAgY29uc3QgTGF5b3V0VW5pdCBjdyA9IGlzT3V0T2ZGbG93UG9zaXRpb25lZCgpID8g
Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChkb3duY2FzdDxSZW5kZXJC
b3hNb2RlbE9iamVjdD4oKmNvbnRhaW5lcigpKSkgOiBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lk
dGhGb3JDb250ZW50KCk7CiAgICAgICAgICAgICBMZW5ndGggY29udGFpbmVyTG9naWNhbFdpZHRo
ID0gY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkubG9naWNhbFdpZHRoKCk7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogSGFuZGxlIGNhc2VzIHdoZW4gY29udGFpbmluZyBibG9jayB3aWR0aCBpcyBj
YWxjdWxhdGVkIG9yIHZpZXdwb3J0IHBlcmNlbnQuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEwNzEKQEAgLTMxMjcsNyArMzEyNyw3IEBA
IExheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmco
U2l6ZVR5cGUgaGVpZ2h0VHlwZSwgTGVuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY0OTYKICAgICAgICAgICAgIExheW91dFVuaXQgYXZh
aWxhYmxlSGVpZ2h0OwogICAgICAgICAgICAgaWYgKGlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQot
ICAgICAgICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxI
ZWlnaHRGb3JQb3NpdGlvbmVkKGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PihjYikpOwor
ICAgICAgICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxI
ZWlnaHRGb3JQb3NpdGlvbmVkKGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqY2IpKTsK
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JDb250ZW50KEluY2x1ZGVNYXJnaW5Cb3JkZXJQ
YWRkaW5nKTsKICAgICAgICAgICAgICAgICAvLyBJdCBpcyBuZWNlc3NhcnkgdG8gdXNlIHRoZSBi
b3JkZXItYm94IHRvIG1hdGNoIFdpbklFJ3MgYnJva2VuCkBAIC0zMTc2LDcgKzMxNzYsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckJveDo6YXZhaWxhYmxlTG9naWNhbEhlaWdodFVzaW5nKGNvbnN0IExl
bmd0aCYgaCwgQXZhaWxhYmxlTG9naQogCiAgICAgaWYgKGguaXNQZXJjZW50T3JDYWxjdWxhdGVk
KCkgJiYgaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgIWlzUmVuZGVyRmxvd1RocmVhZCgpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGlmIHRoZSBjb250YWluaW5nQmxvY2sg
aGFzIGEgcGVycGVuZGljdWxhciB3cml0aW5nIG1vZGUuCi0gICAgICAgIExheW91dFVuaXQgYXZh
aWxhYmxlSGVpZ2h0ID0gY29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQo
Y29udGFpbmluZ0Jsb2NrKCkpOworICAgICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUhlaWdodCA9
IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKCpjb250YWluaW5nQmxv
Y2soKSk7CiAgICAgICAgIHJldHVybiBhZGp1c3RDb250ZW50Qm94TG9naWNhbEhlaWdodEZvckJv
eFNpemluZyh2YWx1ZUZvckxlbmd0aChoLCBhdmFpbGFibGVIZWlnaHQpKTsKICAgICB9CiAKQEAg
LTMyMDIsNyArMzIwMiw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94OjphdmFpbGFibGVMb2dpY2Fs
SGVpZ2h0VXNpbmcoY29uc3QgTGVuZ3RoJiBoLCBBdmFpbGFibGVMb2dpCiAgICAgcmV0dXJuIGF2
YWlsYWJsZUhlaWdodDsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVCbG9ja0RpcmVjdGlv
bk1hcmdpbnMoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jaywgTGF5b3V0VW5pdCYg
bWFyZ2luQmVmb3JlLCBMYXlvdXRVbml0JiBtYXJnaW5BZnRlcikgY29uc3QKK3ZvaWQgUmVuZGVy
Qm94Ojpjb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKGNvbnN0IFJlbmRlckJsb2NrJiBjb250
YWluaW5nQmxvY2ssIExheW91dFVuaXQmIG1hcmdpbkJlZm9yZSwgTGF5b3V0VW5pdCYgbWFyZ2lu
QWZ0ZXIpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGFibGVDZWxsKCkpIHsKICAgICAgICAgLy8gRklY
TUU6IE5vdCByaWdodCBpZiB3ZSBhbGxvdyBjZWxscyB0byBoYXZlIGRpZmZlcmVudCBkaXJlY3Rp
b25hbGl0eSB0aGFuIHRoZSB0YWJsZS4gIElmIHdlIGRvIGFsbG93IHRoaXMsIHRob3VnaCwKQEAg
LTMyMTUsMjMgKzMyMTUsMjMgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVCbG9ja0RpcmVjdGlv
bk1hcmdpbnMoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jaywKICAgICAvLyBNYXJn
aW5zIGFyZSBjYWxjdWxhdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgbG9naWNhbCB3aWR0aCBvZgog
ICAgIC8vIHRoZSBjb250YWluaW5nIGJsb2NrICg4LjMpCiAgICAgTGF5b3V0VW5pdCBjdyA9IGNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKTsKLSAgICBjb25zdCBSZW5kZXJT
dHlsZSYgY29udGFpbmluZ0Jsb2NrU3R5bGUgPSBjb250YWluaW5nQmxvY2stPnN0eWxlKCk7Cisg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIGNvbnRhaW5pbmdCbG9ja1N0eWxlID0gY29udGFpbmluZ0Js
b2NrLnN0eWxlKCk7CiAgICAgbWFyZ2luQmVmb3JlID0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0
eWxlKCkubWFyZ2luQmVmb3JlVXNpbmcoJmNvbnRhaW5pbmdCbG9ja1N0eWxlKSwgY3cpOwogICAg
IG1hcmdpbkFmdGVyID0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkubWFyZ2luQWZ0ZXJV
c2luZygmY29udGFpbmluZ0Jsb2NrU3R5bGUpLCBjdyk7CiB9CiAKLXZvaWQgUmVuZGVyQm94Ojpj
b21wdXRlQW5kU2V0QmxvY2tEaXJlY3Rpb25NYXJnaW5zKGNvbnN0IFJlbmRlckJsb2NrKiBjb250
YWluaW5nQmxvY2spCit2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0aW9u
TWFyZ2lucyhjb25zdCBSZW5kZXJCbG9jayYgY29udGFpbmluZ0Jsb2NrKQogewogICAgIExheW91
dFVuaXQgbWFyZ2luQmVmb3JlOwogICAgIExheW91dFVuaXQgbWFyZ2luQWZ0ZXI7CiAgICAgY29t
cHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucyhjb250YWluaW5nQmxvY2ssIG1hcmdpbkJlZm9yZSwg
bWFyZ2luQWZ0ZXIpOwotICAgIGNvbnRhaW5pbmdCbG9jay0+c2V0TWFyZ2luQmVmb3JlRm9yQ2hp
bGQoKnRoaXMsIG1hcmdpbkJlZm9yZSk7Ci0gICAgY29udGFpbmluZ0Jsb2NrLT5zZXRNYXJnaW5B
ZnRlckZvckNoaWxkKCp0aGlzLCBtYXJnaW5BZnRlcik7CisgICAgY29udGFpbmluZ0Jsb2NrLnNl
dE1hcmdpbkJlZm9yZUZvckNoaWxkKCp0aGlzLCBtYXJnaW5CZWZvcmUpOworICAgIGNvbnRhaW5p
bmdCbG9jay5zZXRNYXJnaW5BZnRlckZvckNoaWxkKCp0aGlzLCBtYXJnaW5BZnRlcik7CiB9CiAK
LUxheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3Np
dGlvbmVkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluaW5nQmxvY2ssIFJlbmRl
clJlZ2lvbiogcmVnaW9uLCBib29sIGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlKSBj
b25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZv
clBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGNvbnRhaW5pbmdCbG9jaywg
UmVuZGVyUmVnaW9uKiByZWdpb24sIGJvb2wgY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01v
ZGUpIGNvbnN0CiB7Ci0gICAgaWYgKGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlICYm
IGNvbnRhaW5pbmdCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKQorICAgIGlmIChjaGVja0ZvclBlcnBlbmRpY3VsYXJXcml0aW5nTW9k
ZSAmJiBjb250YWluaW5nQmxvY2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrTG9naWNh
bEhlaWdodEZvclBvc2l0aW9uZWQoY29udGFpbmluZ0Jsb2NrLCBmYWxzZSk7CiAKICNpZiBFTkFC
TEUoQ1NTX0dSSURfTEFZT1VUKQpAQCAtMzI0MSw0NCArMzI0MSw0NCBAQCBMYXlvdXRVbml0IFJl
bmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb25zdCBS
ZW5kZXJCb3hNbwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGlzPFJlbmRlckJveD4oKmNvbnRh
aW5pbmdCbG9jaykpIHsKKyAgICBpZiAoaXM8UmVuZGVyQm94Pihjb250YWluaW5nQmxvY2spKSB7
CiAgICAgICAgIGJvb2wgaXNGaXhlZFBvc2l0aW9uID0gc3R5bGUoKS5wb3NpdGlvbigpID09IEZp
eGVkUG9zaXRpb247CiAKICAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZs
b3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKICAgICAgICAgaWYgKCFmbG93VGhyZWFkKSB7Ci0g
ICAgICAgICAgICBpZiAoaXNGaXhlZFBvc2l0aW9uICYmIGlzPFJlbmRlclZpZXc+KCpjb250YWlu
aW5nQmxvY2spKQotICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJWaWV3Pigq
Y29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2FsV2lkdGhGb3JGaXhlZFBvc2l0aW9uKCk7Cisg
ICAgICAgICAgICBpZiAoaXNGaXhlZFBvc2l0aW9uICYmIGlzPFJlbmRlclZpZXc+KGNvbnRhaW5p
bmdCbG9jaykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclZpZXc+KGNv
bnRhaW5pbmdCbG9jaykuY2xpZW50TG9naWNhbFdpZHRoRm9yRml4ZWRQb3NpdGlvbigpOwogCi0g
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PigqY29udGFpbmluZ0Jsb2NrKS5j
bGllbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJC
b3g+KGNvbnRhaW5pbmdCbG9jaykuY2xpZW50TG9naWNhbFdpZHRoKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoaXNGaXhlZFBvc2l0aW9uICYmIGlzPFJlbmRlck5hbWVkRmxvd1RocmVhZD4o
KmNvbnRhaW5pbmdCbG9jaykpCi0gICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrLT52
aWV3KCkuY2xpZW50TG9naWNhbFdpZHRoKCk7CisgICAgICAgIGlmIChpc0ZpeGVkUG9zaXRpb24g
JiYgaXM8UmVuZGVyTmFtZWRGbG93VGhyZWFkPihjb250YWluaW5nQmxvY2spKQorICAgICAgICAg
ICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay52aWV3KCkuY2xpZW50TG9naWNhbFdpZHRoKCk7CiAK
LSAgICAgICAgaWYgKCFpczxSZW5kZXJCbG9jaz4oKmNvbnRhaW5pbmdCbG9jaykpCi0gICAgICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PigqY29udGFpbmluZ0Jsb2NrKS5jbGllbnRM
b2dpY2FsV2lkdGgoKTsKKyAgICAgICAgaWYgKCFpczxSZW5kZXJCbG9jaz4oY29udGFpbmluZ0Js
b2NrKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KGNvbnRhaW5pbmdC
bG9jaykuY2xpZW50TG9naWNhbFdpZHRoKCk7CiAKLSAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sm
IGNiID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjb250YWluaW5nQmxvY2spOworICAgICAgICBj
b25zdCBSZW5kZXJCbG9jayYgY2IgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY29udGFpbmluZ0Js
b2NrKTsKICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IG51bGxwdHI7CiAg
ICAgICAgIGlmICghcmVnaW9uKSB7Ci0gICAgICAgICAgICBpZiAoaXM8UmVuZGVyRmxvd1RocmVh
ZD4oKmNvbnRhaW5pbmdCbG9jaykgJiYgIWNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2Rl
KQotICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPigqY29u
dGFpbmluZ0Jsb2NrKS5jb250ZW50TG9naWNhbFdpZHRoT2ZGaXJzdFJlZ2lvbigpOworICAgICAg
ICAgICAgaWYgKGlzPFJlbmRlckZsb3dUaHJlYWQ+KGNvbnRhaW5pbmdCbG9jaykgJiYgIWNoZWNr
Rm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBkb3du
Y2FzdDxSZW5kZXJGbG93VGhyZWFkPihjb250YWluaW5nQmxvY2spLmNvbnRlbnRMb2dpY2FsV2lk
dGhPZkZpcnN0UmVnaW9uKCk7CiAgICAgICAgICAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSkg
ewogICAgICAgICAgICAgICAgIExheW91dFVuaXQgY2JQYWdlT2Zmc2V0ID0gY2Iub2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOwogICAgICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiog
Y2JSZWdpb24gPSBjYi5yZWdpb25BdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNldCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGNiUmVnaW9uKQogICAgICAgICAgICAgICAgICAgICBib3hJbmZvID0gY2Iu
cmVuZGVyQm94UmVnaW9uSW5mbyhjYlJlZ2lvbik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAoZmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWlu
aW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgfSBlbHNlIGlm
IChmbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5pbmdCbG9j
ay5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgICAgICBSZW5kZXJSZWdpb24q
IGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVn
aW9uKTsKICAgICAgICAgICAgIGJveEluZm8gPSBjYi5yZW5kZXJCb3hSZWdpb25JbmZvKGNvbnRh
aW5pbmdCbG9ja1JlZ2lvbik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIChib3hJbmZvKSA/
IHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIGNiLmNsaWVudExvZ2ljYWxXaWR0aCgpIC0gKGNiLmxv
Z2ljYWxXaWR0aCgpIC0gYm94SW5mby0+bG9naWNhbFdpZHRoKCkpKSA6IGNiLmNsaWVudExvZ2lj
YWxXaWR0aCgpOwogICAgIH0KIAotICAgIEFTU0VSVChjb250YWluaW5nQmxvY2stPmlzSW5GbG93
UG9zaXRpb25lZCgpKTsKKyAgICBBU1NFUlQoY29udGFpbmluZ0Jsb2NrLmlzSW5GbG93UG9zaXRp
b25lZCgpKTsKIAotICAgIGNvbnN0IGF1dG8mIGZsb3cgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+
KCpjb250YWluaW5nQmxvY2spOworICAgIGNvbnN0IGF1dG8mIGZsb3cgPSBkb3duY2FzdDxSZW5k
ZXJJbmxpbmU+KGNvbnRhaW5pbmdCbG9jayk7CiAgICAgSW5saW5lRmxvd0JveCogZmlyc3QgPSBm
bG93LmZpcnN0TGluZUJveCgpOwogICAgIElubGluZUZsb3dCb3gqIGxhc3QgPSBmbG93Lmxhc3RM
aW5lQm94KCk7CiAKQEAgLTMyODgsNyArMzI4OCw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpj
b250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1v
CiAKICAgICBMYXlvdXRVbml0IGZyb21MZWZ0OwogICAgIExheW91dFVuaXQgZnJvbVJpZ2h0Owot
ICAgIGlmIChjb250YWluaW5nQmxvY2stPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KSB7CisgICAgaWYgKGNvbnRhaW5pbmdCbG9jay5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkgewogICAgICAgICBmcm9tTGVmdCA9IGZpcnN0LT5sb2dpY2FsTGVmdCgpICsgZmlyc3Qt
PmJvcmRlckxvZ2ljYWxMZWZ0KCk7CiAgICAgICAgIGZyb21SaWdodCA9IGxhc3QtPmxvZ2ljYWxM
ZWZ0KCkgKyBsYXN0LT5sb2dpY2FsV2lkdGgoKSAtIGxhc3QtPmJvcmRlckxvZ2ljYWxSaWdodCgp
OwogICAgIH0gZWxzZSB7CkBAIC0zMjk5LDkgKzMyOTksOSBAQCBMYXlvdXRVbml0IFJlbmRlckJv
eDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJC
b3hNbwogICAgIHJldHVybiBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBmcm9tUmlnaHQgLSBmcm9t
TGVmdCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2Fs
SGVpZ2h0Rm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmlu
Z0Jsb2NrLCBib29sIGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlKSBjb25zdAorTGF5
b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlv
bmVkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBjb250YWluaW5nQmxvY2ssIGJvb2wgY2hl
Y2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUpIGNvbnN0CiB7Ci0gICAgaWYgKGNoZWNrRm9y
UGVycGVuZGljdWxhcldyaXRpbmdNb2RlICYmIGNvbnRhaW5pbmdCbG9jay0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgIGlmIChjaGVj
a0ZvclBlcnBlbmRpY3VsYXJXcml0aW5nTW9kZSAmJiBjb250YWluaW5nQmxvY2suaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICBy
ZXR1cm4gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluaW5n
QmxvY2ssIG51bGxwdHIsIGZhbHNlKTsKIAogI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCkBA
IC0zMzExLDI2ICszMzExLDI2IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxv
Y2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNCiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0JveCgpKSB7CisgICAgaWYgKGNvbnRh
aW5pbmdCbG9jay5pc0JveCgpKSB7CiAgICAgICAgIGJvb2wgaXNGaXhlZFBvc2l0aW9uID0gc3R5
bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb247CiAKLSAgICAgICAgaWYgKGlzRml4ZWRQ
b3NpdGlvbiAmJiBpczxSZW5kZXJWaWV3PigqY29udGFpbmluZ0Jsb2NrKSkKLSAgICAgICAgICAg
IHJldHVybiBkb3duY2FzdDxSZW5kZXJWaWV3PigqY29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dp
Y2FsSGVpZ2h0Rm9yRml4ZWRQb3NpdGlvbigpOworICAgICAgICBpZiAoaXNGaXhlZFBvc2l0aW9u
ICYmIGlzPFJlbmRlclZpZXc+KGNvbnRhaW5pbmdCbG9jaykpCisgICAgICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyVmlldz4oY29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2FsSGVpZ2h0
Rm9yRml4ZWRQb3NpdGlvbigpOwogCi0gICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjYiA9IGlz
PFJlbmRlckJsb2NrPigqY29udGFpbmluZ0Jsb2NrKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihj
b250YWluaW5nQmxvY2spIDogY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKTsKLSAg
ICAgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBjYi0+Y2xpZW50TG9naWNhbEhlaWdodCgpOworICAg
ICAgICBjb25zdCBSZW5kZXJCbG9jayYgY2IgPSBpczxSZW5kZXJCbG9jaz4oY29udGFpbmluZ0Js
b2NrKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihjb250YWluaW5nQmxvY2spIDogKmNvbnRhaW5p
bmdCbG9jay5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBj
Yi5jbGllbnRMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dU
aHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgIGlmIChmbG93VGhy
ZWFkICYmIGlzPFJlbmRlckZsb3dUaHJlYWQ+KCpjb250YWluaW5nQmxvY2spICYmIGZsb3dUaHJl
YWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoaXM8UmVuZGVyTmFtZWRGbG93
VGhyZWFkPigqY29udGFpbmluZ0Jsb2NrKSAmJiBpc0ZpeGVkUG9zaXRpb24pCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay0+dmlldygpLmNsaWVudExvZ2ljYWxIZWlnaHQo
KTsKLSAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPigqY29udGFp
bmluZ0Jsb2NrKS5jb250ZW50TG9naWNhbEhlaWdodE9mRmlyc3RSZWdpb24oKTsKKyAgICAgICAg
aWYgKGZsb3dUaHJlYWQgJiYgaXM8UmVuZGVyRmxvd1RocmVhZD4oY29udGFpbmluZ0Jsb2NrKSAm
JiBmbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5pbmdCbG9j
ay5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVy
TmFtZWRGbG93VGhyZWFkPihjb250YWluaW5nQmxvY2spICYmIGlzRml4ZWRQb3NpdGlvbikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrLnZpZXcoKS5jbGllbnRMb2dpY2Fs
SGVpZ2h0KCk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4o
Y29udGFpbmluZ0Jsb2NrKS5jb250ZW50TG9naWNhbEhlaWdodE9mRmlyc3RSZWdpb24oKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAgICAgCi0gICAgQVNT
RVJUKGNvbnRhaW5pbmdCbG9jay0+aXNJbkZsb3dQb3NpdGlvbmVkKCkpOworICAgIEFTU0VSVChj
b250YWluaW5nQmxvY2suaXNJbkZsb3dQb3NpdGlvbmVkKCkpOwogCi0gICAgY29uc3QgYXV0byYg
ZmxvdyA9IGRvd25jYXN0PFJlbmRlcklubGluZT4oKmNvbnRhaW5pbmdCbG9jayk7CisgICAgY29u
c3QgYXV0byYgZmxvdyA9IGRvd25jYXN0PFJlbmRlcklubGluZT4oY29udGFpbmluZ0Jsb2NrKTsK
ICAgICBJbmxpbmVGbG93Qm94KiBmaXJzdCA9IGZsb3cuZmlyc3RMaW5lQm94KCk7CiAgICAgSW5s
aW5lRmxvd0JveCogbGFzdCA9IGZsb3cubGFzdExpbmVCb3goKTsKIApAQCAtMzM0MCwyMyArMzM0
MCwyMyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdo
dEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TQogCiAgICAgTGF5b3V0VW5pdCBoZWlnaHRS
ZXN1bHQ7CiAgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9IGZsb3cubGluZXNCb3VuZGluZ0Jv
eCgpOwotICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
CisgICAgaWYgKGNvbnRhaW5pbmdCbG9jay5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAg
ICAgICBoZWlnaHRSZXN1bHQgPSBib3VuZGluZ0JveC5oZWlnaHQoKTsKICAgICBlbHNlCiAgICAg
ICAgIGhlaWdodFJlc3VsdCA9IGJvdW5kaW5nQm94LndpZHRoKCk7Ci0gICAgaGVpZ2h0UmVzdWx0
IC09IChjb250YWluaW5nQmxvY2stPmJvcmRlckJlZm9yZSgpICsgY29udGFpbmluZ0Jsb2NrLT5i
b3JkZXJBZnRlcigpKTsKKyAgICBoZWlnaHRSZXN1bHQgLT0gKGNvbnRhaW5pbmdCbG9jay5ib3Jk
ZXJCZWZvcmUoKSArIGNvbnRhaW5pbmdCbG9jay5ib3JkZXJBZnRlcigpKTsKICAgICByZXR1cm4g
aGVpZ2h0UmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBjb21wdXRlSW5saW5lU3RhdGljRGlzdGFu
Y2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3RoJiBsb2dpY2FsUmlnaHQsIGNvbnN0IFJlbmRl
ckJveCogY2hpbGQsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywg
TGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGgsIFJlbmRlclJlZ2lvbiogcmVnaW9uKQor
c3RhdGljIHZvaWQgY29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNhbExl
ZnQsIExlbmd0aCYgbG9naWNhbFJpZ2h0LCBjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBS
ZW5kZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbmVyQmxvY2ssIExheW91dFVuaXQgY29udGFpbmVy
TG9naWNhbFdpZHRoLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKIHsKICAgICBpZiAoIWxvZ2ljYWxM
ZWZ0LmlzQXV0bygpIHx8ICFsb2dpY2FsUmlnaHQuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEZJWE1FOiBUaGUgc3RhdGljIGRpc3RhbmNlIGNvbXB1dGF0aW9uIGhhcyBub3Qg
YmVlbiBwYXRjaGVkIGZvciBtaXhlZCB3cml0aW5nIG1vZGVzIHlldC4KICAgICBpZiAoY2hpbGQt
PnBhcmVudCgpLT5zdHlsZSgpLmRpcmVjdGlvbigpID09IExUUikgewotICAgICAgICBMYXlvdXRV
bml0IHN0YXRpY1Bvc2l0aW9uID0gY2hpbGQtPmxheWVyKCktPnN0YXRpY0lubGluZVBvc2l0aW9u
KCkgLSBjb250YWluZXJCbG9jay0+Ym9yZGVyTG9naWNhbExlZnQoKTsKLSAgICAgICAgZm9yIChh
dXRvKiBjdXJyZW50ID0gY2hpbGQtPnBhcmVudCgpOyBjdXJyZW50ICYmIGN1cnJlbnQgIT0gY29u
dGFpbmVyQmxvY2s7IGN1cnJlbnQgPSBjdXJyZW50LT5jb250YWluZXIoKSkgeworICAgICAgICBM
YXlvdXRVbml0IHN0YXRpY1Bvc2l0aW9uID0gY2hpbGQtPmxheWVyKCktPnN0YXRpY0lubGluZVBv
c2l0aW9uKCkgLSBjb250YWluZXJCbG9jay5ib3JkZXJMb2dpY2FsTGVmdCgpOworICAgICAgICBm
b3IgKGF1dG8qIGN1cnJlbnQgPSBjaGlsZC0+cGFyZW50KCk7IGN1cnJlbnQgJiYgY3VycmVudCAh
PSAmY29udGFpbmVyQmxvY2s7IGN1cnJlbnQgPSBjdXJyZW50LT5jb250YWluZXIoKSkgewogICAg
ICAgICAgICAgaWYgKCFpczxSZW5kZXJCb3g+KCpjdXJyZW50KSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJl
bmRlckJveD4oKmN1cnJlbnQpOwpAQCAtMzM3NCwxMCArMzM3NCwxMCBAQCBzdGF0aWMgdm9pZCBj
b21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3RoJiBs
b2dpY2FsUmlnaAogICAgICAgICBsb2dpY2FsTGVmdC5zZXRWYWx1ZShGaXhlZCwgc3RhdGljUG9z
aXRpb24pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IFJlbmRlckJveCYgZW5jbG9zaW5n
Qm94ID0gY2hpbGQtPnBhcmVudCgpLT5lbmNsb3NpbmdCb3goKTsKLSAgICAgICAgTGF5b3V0VW5p
dCBzdGF0aWNQb3NpdGlvbiA9IGNoaWxkLT5sYXllcigpLT5zdGF0aWNJbmxpbmVQb3NpdGlvbigp
ICsgY29udGFpbmVyTG9naWNhbFdpZHRoICsgY29udGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxM
ZWZ0KCk7CisgICAgICAgIExheW91dFVuaXQgc3RhdGljUG9zaXRpb24gPSBjaGlsZC0+bGF5ZXIo
KS0+c3RhdGljSW5saW5lUG9zaXRpb24oKSArIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCArIGNvbnRh
aW5lckJsb2NrLmJvcmRlckxvZ2ljYWxMZWZ0KCk7CiAgICAgICAgIGZvciAoY29uc3QgUmVuZGVy
RWxlbWVudCogY3VycmVudCA9ICZlbmNsb3NpbmdCb3g7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJy
ZW50LT5jb250YWluZXIoKSkgewogICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oKmN1cnJl
bnQpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT0gY29udGFpbmVyQmxvY2spIHsK
KyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCAhPSAmY29udGFpbmVyQmxvY2spIHsKICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94
PigqY3VycmVudCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IHJlbmRl
ckJveC5sb2dpY2FsTGVmdCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyQm94Lmlz
SW5GbG93UG9zaXRpb25lZCgpKQpAQCAtMzM5MCwxNCArMzM5MCwxNCBAQCBzdGF0aWMgdm9pZCBj
b21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3RoJiBs
b2dpY2FsUmlnaAogICAgICAgICAgICAgICAgICAgICByZWdpb24gPSBjdXJyZW50QmxvY2suY2xh
bXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOwogICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY3VycmVudEJsb2NrLnJlbmRlckJveFJlZ2lvbklu
Zm8ocmVnaW9uKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJveEluZm8pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ICE9IGNvbnRhaW5lckJsb2NrKQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT0gJmNvbnRhaW5lckJsb2NrKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGN1cnJlbnRCbG9jay5sb2dpY2Fs
V2lkdGgoKSAtIChib3hJbmZvLT5sb2dpY2FsTGVmdCgpICsgYm94SW5mby0+bG9naWNhbFdpZHRo
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gJmVuY2xvc2luZ0Jv
eCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBlbmNsb3Np
bmdCb3gubG9naWNhbFdpZHRoKCkgLSBib3hJbmZvLT5sb2dpY2FsV2lkdGgoKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChjdXJyZW50ID09IGNvbnRhaW5lckJsb2NrKQorICAgICAgICAgICAgaWYgKGN1cnJl
bnQgPT0gJmNvbnRhaW5lckJsb2NrKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGxvZ2ljYWxSaWdodC5zZXRWYWx1ZShGaXhlZCwgc3RhdGljUG9zaXRpb24pOwpA
QCAtMzQzMSwxNCArMzQzMSwxNCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsV2lkdGgoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdQogCiAgICAgLy8g
V2UgZG9uJ3QgdXNlIGNvbnRhaW5pbmdCbG9jaygpLCBzaW5jZSB3ZSBtYXkgYmUgcG9zaXRpb25l
ZCBieSBhbiBlbmNsb3NpbmcKICAgICAvLyByZWxhdGl2ZSBwb3NpdGlvbmVkIGlubGluZS4KLSAg
ICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxvY2sgPSBkb3duY2FzdDxS
ZW5kZXJCb3hNb2RlbE9iamVjdD4oY29udGFpbmVyKCkpOworICAgIGNvbnN0IFJlbmRlckJveE1v
ZGVsT2JqZWN0JiBjb250YWluZXJCbG9jayA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0
PigqY29udGFpbmVyKCkpOwogICAgIAogICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyTG9n
aWNhbFdpZHRoID0gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250
YWluZXJCbG9jaywgcmVnaW9uKTsKIAogICAgIC8vIFVzZSB0aGUgY29udGFpbmVyIGJsb2NrJ3Mg
ZGlyZWN0aW9uIGV4Y2VwdCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBzdGF0aWMgZGlzdGFuY2UKICAg
ICAvLyBUaGlzIGNvbmZvcm1zIHdpdGggdGhlIHJlZmVyZW5jZSByZXN1bHRzIGZvciBhYnNwb3Mt
cmVwbGFjZWQtd2lkdGgtbWFyZ2luLTAwMC5odG0KICAgICAvLyBvZiB0aGUgQ1NTIDIuMSB0ZXN0
IHN1aXRlCi0gICAgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24gPSBjb250YWluZXJC
bG9jay0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKKyAgICBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRp
cmVjdGlvbiA9IGNvbnRhaW5lckJsb2NrLnN0eWxlKCkuZGlyZWN0aW9uKCk7CiAKICAgICBib29s
IGlzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgY29uc3QgTGF5
b3V0VW5pdCBib3JkZXJzUGx1c1BhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRo
KCk7CkBAIC0zNTIyLDggKzM1MjIsOCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9u
ZWRMb2dpY2FsV2lkdGgoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdQogI2VuZGlm
CiAKICAgICBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCArPSBib3JkZXJzUGx1c1BhZGRpbmc7Ci0g
ICAgaWYgKGlzPFJlbmRlckJveD4oKmNvbnRhaW5lckJsb2NrKSkgewotICAgICAgICBhdXRvJiBj
b250YWluaW5nQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqY29udGFpbmVyQmxvY2spOworICAg
IGlmIChpczxSZW5kZXJCb3g+KGNvbnRhaW5lckJsb2NrKSkgeworICAgICAgICBhdXRvJiBjb250
YWluaW5nQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94Pihjb250YWluZXJCbG9jayk7CiAgICAgICAg
IGlmIChjb250YWluaW5nQm94LmxheWVyKCkgJiYgY29udGFpbmluZ0JveC5sYXllcigpLT52ZXJ0
aWNhbFNjcm9sbGJhcklzT25MZWZ0KCkpCiAgICAgICAgICAgICBjb21wdXRlZFZhbHVlcy5tX3Bv
c2l0aW9uICs9IGNvbnRhaW5pbmdCb3gudmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwogICAgIH0K
QEAgLTM1MzEsMTAgKzM1MzEsMTAgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVk
TG9naWNhbFdpZHRoKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHUKICAgICAvLyBB
ZGp1c3QgbG9naWNhbExlZnQgaWYgd2UgbmVlZCB0byBmb3IgdGhlIGZsaXBwZWQgdmVyc2lvbiBv
ZiBvdXIgd3JpdGluZyBtb2RlIGluIHJlZ2lvbnMuCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBvdGhlciB0eXBlcyBvZiBvYmplY3RzIGFzIGNvbnRhaW5lckJsb2NrLCBub3Qgb25seSBS
ZW5kZXJCbG9jay4KICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVh
ZENvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChmbG93VGhyZWFkICYmICFyZWdpb24gJiYgaXNX
cml0aW5nTW9kZVJvb3QoKSAmJiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5l
ckJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIGlzPFJlbmRlckJsb2NrPigqY29u
dGFpbmVyQmxvY2spKSB7Ci0gICAgICAgIEFTU0VSVChjb250YWluZXJCbG9jay0+Y2FuSGF2ZUJv
eEluZm9JblJlZ2lvbigpKTsKKyAgICBpZiAoZmxvd1RocmVhZCAmJiAhcmVnaW9uICYmIGlzV3Jp
dGluZ01vZGVSb290KCkgJiYgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWluZXJC
bG9jay5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIGlzPFJlbmRlckJsb2NrPihjb250YWlu
ZXJCbG9jaykpIHsKKyAgICAgICAgQVNTRVJUKGNvbnRhaW5lckJsb2NrLmNhbkhhdmVCb3hJbmZv
SW5SZWdpb24oKSk7CiAgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnRQb3MgPSBjb21wdXRl
ZFZhbHVlcy5tX3Bvc2l0aW9uOwotICAgICAgICBjb25zdCBSZW5kZXJCbG9jayYgcmVuZGVyQmxv
Y2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNvbnRhaW5lckJsb2NrKTsKKyAgICAgICAgY29u
c3QgUmVuZGVyQmxvY2smIHJlbmRlckJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNvbnRh
aW5lckJsb2NrKTsKICAgICAgICAgTGF5b3V0VW5pdCBjYlBhZ2VPZmZzZXQgPSByZW5kZXJCbG9j
ay5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCk7CiAgICAgICAgIFJlbmRlclJlZ2lv
biogY2JSZWdpb24gPSByZW5kZXJCbG9jay5yZWdpb25BdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNl
dCk7CiAgICAgICAgIGlmIChjYlJlZ2lvbikgewpAQCAtMzU0NywxOCArMzU0NywxOCBAQCB2b2lk
IFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgoTG9naWNhbEV4dGVudENv
bXB1dGVkVmFsdWVzJiBjb21wdQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgY29tcHV0ZUxvZ2lj
YWxMZWZ0UG9zaXRpb25lZE9mZnNldChMYXlvdXRVbml0JiBsb2dpY2FsTGVmdFBvcywgY29uc3Qg
UmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhWYWx1ZSwgY29uc3QgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrLCBMYXlvdXRVbml0IGNvbnRhaW5lckxv
Z2ljYWxXaWR0aCkKK3N0YXRpYyB2b2lkIGNvbXB1dGVMb2dpY2FsTGVmdFBvc2l0aW9uZWRPZmZz
ZXQoTGF5b3V0VW5pdCYgbG9naWNhbExlZnRQb3MsIGNvbnN0IFJlbmRlckJveCogY2hpbGQsIExh
eW91dFVuaXQgbG9naWNhbFdpZHRoVmFsdWUsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBj
b250YWluZXJCbG9jaywgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGgpCiB7CiAgICAg
Ly8gRGVhbCB3aXRoIGRpZmZlcmluZyB3cml0aW5nIG1vZGVzIGhlcmUuICBPdXIgb2Zmc2V0IG5l
ZWRzIHRvIGJlIGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzcGFjZS4gSWYg
dGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZmxpcHBlZAogICAgIC8vIGFsb25nIHRoaXMgYXhpcywg
dGhlbiB3ZSBuZWVkIHRvIGZsaXAgdGhlIGNvb3JkaW5hdGUuICBUaGlzIGNhbiBvbmx5IGhhcHBl
biBpZiB0aGUgY29udGFpbmluZyBibG9jayBpcyBib3RoIGEgZmxpcHBlZCBtb2RlIGFuZCBwZXJw
ZW5kaWN1bGFyIHRvIHVzLgotICAgIGlmIChjb250YWluZXJCbG9jay0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSAhPSBjaGlsZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBjb250YWlu
ZXJCbG9jay0+c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CisgICAgaWYg
KGNvbnRhaW5lckJsb2NrLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gY2hpbGQtPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgY29udGFpbmVyQmxvY2suc3R5bGUoKS5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIGxvZ2ljYWxMZWZ0UG9zID0gY29udGFpbmVy
TG9naWNhbFdpZHRoIC0gbG9naWNhbFdpZHRoVmFsdWUgLSBsb2dpY2FsTGVmdFBvczsKLSAgICAg
ICAgbG9naWNhbExlZnRQb3MgKz0gKGNoaWxkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
Y29udGFpbmVyQmxvY2stPmJvcmRlclJpZ2h0KCkgOiBjb250YWluZXJCbG9jay0+Ym9yZGVyQm90
dG9tKCkpOworICAgICAgICBsb2dpY2FsTGVmdFBvcyArPSAoY2hpbGQtPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBjb250YWluZXJCbG9jay5ib3JkZXJSaWdodCgpIDogY29udGFpbmVyQmxv
Y2suYm9yZGVyQm90dG9tKCkpOwogICAgIH0gZWxzZQotICAgICAgICBsb2dpY2FsTGVmdFBvcyAr
PSAoY2hpbGQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjb250YWluZXJCbG9jay0+Ym9y
ZGVyTGVmdCgpIDogY29udGFpbmVyQmxvY2stPmJvcmRlclRvcCgpKTsKKyAgICAgICAgbG9naWNh
bExlZnRQb3MgKz0gKGNoaWxkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29udGFpbmVy
QmxvY2suYm9yZGVyTGVmdCgpIDogY29udGFpbmVyQmxvY2suYm9yZGVyVG9wKCkpOwogfQogCi12
b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhTaXplVHlw
ZSB3aWR0aFR5cGUsIExlbmd0aCBsb2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBjb250YWluZXJCbG9jaywgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24sCit2
b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhTaXplVHlw
ZSB3aWR0aFR5cGUsIExlbmd0aCBsb2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2Jq
ZWN0JiBjb250YWluZXJCbG9jaywgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBib3JkZXJzUGx1c1BhZGRpbmcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5n
dGggbG9naWNhbExlZnQsIExlbmd0aCBsb2dpY2FsUmlnaHQsIExlbmd0aCBtYXJnaW5Mb2dpY2Fs
TGVmdCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxSaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYg
Y29tcHV0ZWRWYWx1ZXMpIGNvbnN0CkBAIC0zNzI5LDggKzM3MjksOCBAQCB2b2lkIFJlbmRlckJv
eDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhTaXplVHlwZSB3aWR0aFR5cGUs
IExlbmd0aCBsbwogICAgIC8vIHBvc2l0aW9uZWQsIGlubGluZSBiZWNhdXNlIHJpZ2h0IG5vdywg
aXQgaXMgdXNpbmcgdGhlIGxvZ2ljYWwgbGVmdCBwb3NpdGlvbgogICAgIC8vIG9mIHRoZSBmaXJz
dCBsaW5lIGJveCB3aGVuIHJlYWxseSBpdCBzaG91bGQgdXNlIHRoZSBsYXN0IGxpbmUgYm94LiAg
V2hlbgogICAgIC8vIHRoaXMgaXMgZml4ZWQgZWxzZXdoZXJlLCB0aGlzIGJsb2NrIHNob3VsZCBi
ZSByZW1vdmVkLgotICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KCpjb250YWluZXJCbG9jaykgJiYg
IWNvbnRhaW5lckJsb2NrLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewotICAg
ICAgICBjb25zdCBhdXRvJiBmbG93ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY29udGFpbmVy
QmxvY2spOworICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KGNvbnRhaW5lckJsb2NrKSAmJiAhY29u
dGFpbmVyQmxvY2suc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKKyAgICAgICAg
Y29uc3QgYXV0byYgZmxvdyA9IGRvd25jYXN0PFJlbmRlcklubGluZT4oY29udGFpbmVyQmxvY2sp
OwogICAgICAgICBJbmxpbmVGbG93Qm94KiBmaXJzdExpbmUgPSBmbG93LmZpcnN0TGluZUJveCgp
OwogICAgICAgICBJbmxpbmVGbG93Qm94KiBsYXN0TGluZSA9IGZsb3cubGFzdExpbmVCb3goKTsK
ICAgICAgICAgaWYgKGZpcnN0TGluZSAmJiBsYXN0TGluZSAmJiBmaXJzdExpbmUgIT0gbGFzdExp
bmUpIHsKQEAgLTM3NDMsMTQgKzM3NDMsMTQgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3Np
dGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoU2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5ndGggbG8KICAg
ICBjb21wdXRlTG9naWNhbExlZnRQb3NpdGlvbmVkT2Zmc2V0KGNvbXB1dGVkVmFsdWVzLm1fcG9z
aXRpb24sIHRoaXMsIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50LCBjb250YWluZXJCbG9jaywgY29u
dGFpbmVyTG9naWNhbFdpZHRoKTsKIH0KIAotc3RhdGljIHZvaWQgY29tcHV0ZUJsb2NrU3RhdGlj
RGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2FsVG9wLCBMZW5ndGgmIGxvZ2ljYWxCb3R0b20sIGNvbnN0
IFJlbmRlckJveCogY2hpbGQsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJC
bG9jaykKK3N0YXRpYyB2b2lkIGNvbXB1dGVCbG9ja1N0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9n
aWNhbFRvcCwgTGVuZ3RoJiBsb2dpY2FsQm90dG9tLCBjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBj
b25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbmVyQmxvY2spCiB7CiAgICAgaWYgKCFs
b2dpY2FsVG9wLmlzQXV0bygpIHx8ICFsb2dpY2FsQm90dG9tLmlzQXV0bygpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgLy8gRklYTUU6IFRoZSBzdGF0aWMgZGlzdGFuY2UgY29tcHV0YXRp
b24gaGFzIG5vdCBiZWVuIHBhdGNoZWQgZm9yIG1peGVkIHdyaXRpbmcgbW9kZXMuCi0gICAgTGF5
b3V0VW5pdCBzdGF0aWNMb2dpY2FsVG9wID0gY2hpbGQtPmxheWVyKCktPnN0YXRpY0Jsb2NrUG9z
aXRpb24oKSAtIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJCZWZvcmUoKTsKLSAgICBmb3IgKFJlbmRl
ckVsZW1lbnQqIGNvbnRhaW5lciA9IGNoaWxkLT5wYXJlbnQoKTsgY29udGFpbmVyICYmIGNvbnRh
aW5lciAhPSBjb250YWluZXJCbG9jazsgY29udGFpbmVyID0gY29udGFpbmVyLT5jb250YWluZXIo
KSkgeworICAgIExheW91dFVuaXQgc3RhdGljTG9naWNhbFRvcCA9IGNoaWxkLT5sYXllcigpLT5z
dGF0aWNCbG9ja1Bvc2l0aW9uKCkgLSBjb250YWluZXJCbG9jay5ib3JkZXJCZWZvcmUoKTsKKyAg
ICBmb3IgKFJlbmRlckVsZW1lbnQqIGNvbnRhaW5lciA9IGNoaWxkLT5wYXJlbnQoKTsgY29udGFp
bmVyICYmIGNvbnRhaW5lciAhPSAmY29udGFpbmVyQmxvY2s7IGNvbnRhaW5lciA9IGNvbnRhaW5l
ci0+Y29udGFpbmVyKCkpIHsKICAgICAgICAgaWYgKCFpczxSZW5kZXJCb3g+KCpjb250YWluZXIp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGNvbnN0IGF1dG8mIHJlbmRlckJveCA9
IGRvd25jYXN0PFJlbmRlckJveD4oKmNvbnRhaW5lcik7CkBAIC0zNzc3LDcgKzM3NzcsNyBAQCB2
b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0KExvZ2ljYWxFeHRl
bnRDb21wdXRlZFZhbHVlcyYgY29tcAogCiAKICAgICAvLyBXZSBkb24ndCB1c2UgY29udGFpbmlu
Z0Jsb2NrKCksIHNpbmNlIHdlIG1heSBiZSBwb3NpdGlvbmVkIGJ5IGFuIGVuY2xvc2luZyByZWxw
b3NpdGlvbmVkIGlubGluZS4KLSAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFp
bmVyQmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oY29udGFpbmVyKCkpOwor
ICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBjb250YWluZXJCbG9jayA9IGRvd25jYXN0
PFJlbmRlckJveE1vZGVsT2JqZWN0PigqY29udGFpbmVyKCkpOwogCiAgICAgY29uc3QgTGF5b3V0
VW5pdCBjb250YWluZXJMb2dpY2FsSGVpZ2h0ID0gY29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdo
dEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2spOwogCkBAIC0zODYxLDEwICszODYxLDEwIEBA
IHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQoTG9naWNhbEV4
dGVudENvbXB1dGVkVmFsdWVzJiBjb21wCiAgICAgLy8gQWRqdXN0IGxvZ2ljYWxUb3AgaWYgd2Ug
bmVlZCB0byBmb3IgcGVycGVuZGljdWxhciB3cml0aW5nIG1vZGVzIGluIHJlZ2lvbnMuCiAgICAg
Ly8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBvZiBvYmplY3RzIGFzIGNvbnRh
aW5lckJsb2NrLCBub3Qgb25seSBSZW5kZXJCbG9jay4KICAgICBSZW5kZXJGbG93VGhyZWFkKiBm
bG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChmbG93VGhy
ZWFkICYmIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gY29udGFpbmVyQmxvY2stPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgaXM8UmVuZGVyQmxvY2s+KCpjb250YWluZXJCbG9jaykp
IHsKLSAgICAgICAgQVNTRVJUKGNvbnRhaW5lckJsb2NrLT5jYW5IYXZlQm94SW5mb0luUmVnaW9u
KCkpOworICAgIGlmIChmbG93VGhyZWFkICYmIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0g
Y29udGFpbmVyQmxvY2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBpczxSZW5kZXJCbG9j
az4oY29udGFpbmVyQmxvY2spKSB7CisgICAgICAgIEFTU0VSVChjb250YWluZXJCbG9jay5jYW5I
YXZlQm94SW5mb0luUmVnaW9uKCkpOwogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BQb3Mg
PSBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uOwotICAgICAgICBjb25zdCBSZW5kZXJCbG9jayYg
cmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjb250YWluZXJCbG9jayk7CisgICAg
ICAgIGNvbnN0IFJlbmRlckJsb2NrJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
Y29udGFpbmVyQmxvY2spOwogICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9IHJlbmRl
ckJveC5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgLSBsb2dpY2FsTGVmdCgpOwog
ICAgICAgICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gcmVuZGVyQm94LnJlZ2lvbkF0QmxvY2tP
ZmZzZXQoY2JQYWdlT2Zmc2V0KTsKICAgICAgICAgaWYgKGNiUmVnaW9uKSB7CkBAIC0zODc3LDI5
ICszODc3LDI5IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWln
aHQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21wCiAgICAgfQogfQogCi1zdGF0aWMg
dm9pZCBjb21wdXRlTG9naWNhbFRvcFBvc2l0aW9uZWRPZmZzZXQoTGF5b3V0VW5pdCYgbG9naWNh
bFRvcFBvcywgY29uc3QgUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
VmFsdWUsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywgTGF5b3V0
VW5pdCBjb250YWluZXJMb2dpY2FsSGVpZ2h0KQorc3RhdGljIHZvaWQgY29tcHV0ZUxvZ2ljYWxU
b3BQb3NpdGlvbmVkT2Zmc2V0KExheW91dFVuaXQmIGxvZ2ljYWxUb3BQb3MsIGNvbnN0IFJlbmRl
ckJveCogY2hpbGQsIExheW91dFVuaXQgbG9naWNhbEhlaWdodFZhbHVlLCBjb25zdCBSZW5kZXJC
b3hNb2RlbE9iamVjdCYgY29udGFpbmVyQmxvY2ssIExheW91dFVuaXQgY29udGFpbmVyTG9naWNh
bEhlaWdodCkKIHsKICAgICAvLyBEZWFsIHdpdGggZGlmZmVyaW5nIHdyaXRpbmcgbW9kZXMgaGVy
ZS4gIE91ciBvZmZzZXQgbmVlZHMgdG8gYmUgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBjb29y
ZGluYXRlIHNwYWNlLiBJZiB0aGUgY29udGFpbmluZyBibG9jayBpcyBmbGlwcGVkCiAgICAgLy8g
YWxvbmcgdGhpcyBheGlzLCB0aGVuIHdlIG5lZWQgdG8gZmxpcCB0aGUgY29vcmRpbmF0ZS4gIFRo
aXMgY2FuIG9ubHkgaGFwcGVuIGlmIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGJvdGggYSBmbGlw
cGVkIG1vZGUgYW5kIHBlcnBlbmRpY3VsYXIgdG8gdXMuCi0gICAgaWYgKChjaGlsZC0+c3R5bGUo
KS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpICYmIGNoaWxkLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpICE9IGNvbnRhaW5lckJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQot
ICAgICAgICB8fCAoY2hpbGQtPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSAh
PSBjb250YWluZXJCbG9jay0+c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpICYm
IGNoaWxkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5lckJsb2NrLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKSkKKyAgICBpZiAoKGNoaWxkLT5zdHlsZSgpLmlzRmxpcHBl
ZEJsb2Nrc1dyaXRpbmdNb2RlKCkgJiYgY2hpbGQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
IT0gY29udGFpbmVyQmxvY2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgfHwg
KGNoaWxkLT5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgIT0gY29udGFpbmVy
QmxvY2suc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpICYmIGNoaWxkLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5lckJsb2NrLmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpKQogICAgICAgICBsb2dpY2FsVG9wUG9zID0gY29udGFpbmVyTG9naWNhbEhlaWdo
dCAtIGxvZ2ljYWxIZWlnaHRWYWx1ZSAtIGxvZ2ljYWxUb3BQb3M7CiAKICAgICAvLyBPdXIgb2Zm
c2V0IGlzIGZyb20gdGhlIGxvZ2ljYWwgYm90dG9tIGVkZ2UgaW4gYSBmbGlwcGVkIGVudmlyb25t
ZW50LCBlLmcuLCByaWdodCBmb3IgdmVydGljYWwtcmwgYW5kIGJvdHRvbSBmb3IgaG9yaXpvbnRh
bC1idC4KLSAgICBpZiAoY29udGFpbmVyQmxvY2stPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSAmJiBjaGlsZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWlu
ZXJCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgeworICAgIGlmIChjb250YWluZXJC
bG9jay5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgJiYgY2hpbGQtPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmVyQmxvY2suaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
Ci0gICAgICAgICAgICBsb2dpY2FsVG9wUG9zICs9IGNvbnRhaW5lckJsb2NrLT5ib3JkZXJCb3R0
b20oKTsKKyAgICAgICAgICAgIGxvZ2ljYWxUb3BQb3MgKz0gY29udGFpbmVyQmxvY2suYm9yZGVy
Qm90dG9tKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvZ2ljYWxUb3BQb3MgKz0gY29u
dGFpbmVyQmxvY2stPmJvcmRlclJpZ2h0KCk7CisgICAgICAgICAgICBsb2dpY2FsVG9wUG9zICs9
IGNvbnRhaW5lckJsb2NrLmJvcmRlclJpZ2h0KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KGNoaWxkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgbG9naWNhbFRv
cFBvcyArPSBjb250YWluZXJCbG9jay0+Ym9yZGVyVG9wKCk7CisgICAgICAgICAgICBsb2dpY2Fs
VG9wUG9zICs9IGNvbnRhaW5lckJsb2NrLmJvcmRlclRvcCgpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBsb2dpY2FsVG9wUG9zICs9IGNvbnRhaW5lckJsb2NrLT5ib3JkZXJMZWZ0KCk7Cisg
ICAgICAgICAgICBsb2dpY2FsVG9wUG9zICs9IGNvbnRhaW5lckJsb2NrLmJvcmRlckxlZnQoKTsK
ICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWln
aHRVc2luZyhTaXplVHlwZSBoZWlnaHRUeXBlLCBMZW5ndGggbG9naWNhbEhlaWdodExlbmd0aCwg
Y29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrLAordm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFVzaW5nKFNpemVUeXBlIGhlaWdodFR5
cGUsIExlbmd0aCBsb2dpY2FsSGVpZ2h0TGVuZ3RoLCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVj
dCYgY29udGFpbmVyQmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBMYXlvdXRV
bml0IGJvcmRlcnNQbHVzUGFkZGluZywgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCBsb2dp
Y2FsVG9wLCBMZW5ndGggbG9naWNhbEJvdHRvbSwgTGVuZ3RoIG1hcmdpbkJlZm9yZSwgTGVuZ3Ro
IG1hcmdpbkFmdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1ZXMpIGNv
bnN0CkBAIC00MDQzLDE0ICs0MDQzLDE0IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRp
b25lZExvZ2ljYWxXaWR0aFJlcGxhY2VkKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlCiAKICAg
ICAvLyBXZSBkb24ndCB1c2UgY29udGFpbmluZ0Jsb2NrKCksIHNpbmNlIHdlIG1heSBiZSBwb3Np
dGlvbmVkIGJ5IGFuIGVuY2xvc2luZwogICAgIC8vIHJlbGF0aXZlIHBvc2l0aW9uZWQgaW5saW5l
LgotICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jayA9IGRvd25j
YXN0PFJlbmRlckJveE1vZGVsT2JqZWN0Pihjb250YWluZXIoKSk7CisgICAgY29uc3QgUmVuZGVy
Qm94TW9kZWxPYmplY3QmIGNvbnRhaW5lckJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxP
YmplY3Q+KCpjb250YWluZXIoKSk7CiAKICAgICBjb25zdCBMYXlvdXRVbml0IGNvbnRhaW5lckxv
Z2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29u
dGFpbmVyQmxvY2spOwogICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyUmVsYXRpdmVMb2dp
Y2FsV2lkdGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRh
aW5lckJsb2NrLCBudWxscHRyLCBmYWxzZSk7CiAKICAgICAvLyBUbyBtYXRjaCBXaW5JRSwgaW4g
cXVpcmtzIG1vZGUgdXNlIHRoZSBwYXJlbnQncyAnZGlyZWN0aW9uJyBwcm9wZXJ0eQogICAgIC8v
IGluc3RlYWQgb2YgdGhlIHRoZSBjb250YWluZXIgYmxvY2sncy4KLSAgICBUZXh0RGlyZWN0aW9u
IGNvbnRhaW5lckRpcmVjdGlvbiA9IGNvbnRhaW5lckJsb2NrLT5zdHlsZSgpLmRpcmVjdGlvbigp
OworICAgIFRleHREaXJlY3Rpb24gY29udGFpbmVyRGlyZWN0aW9uID0gY29udGFpbmVyQmxvY2su
c3R5bGUoKS5kaXJlY3Rpb24oKTsKIAogICAgIC8vIFZhcmlhYmxlcyB0byBzb2x2ZS4KICAgICBi
b29sIGlzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CkBAIC00MTg3LDgg
KzQxODcsOCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhS
ZXBsYWNlZChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZQogICAgIC8vIHBvc2l0aW9uZWQsIGlu
bGluZSBjb250YWluaW5nIGJsb2NrIGJlY2F1c2UgcmlnaHQgbm93LCBpdCBpcyB1c2luZyB0aGUg
bG9naWNhbCBsZWZ0IHBvc2l0aW9uCiAgICAgLy8gb2YgdGhlIGZpcnN0IGxpbmUgYm94IHdoZW4g
cmVhbGx5IGl0IHNob3VsZCB1c2UgdGhlIGxhc3QgbGluZSBib3guICBXaGVuCiAgICAgLy8gdGhp
cyBpcyBmaXhlZCBlbHNld2hlcmUsIHRoaXMgYmxvY2sgc2hvdWxkIGJlIHJlbW92ZWQuCi0gICAg
aWYgKGlzPFJlbmRlcklubGluZT4oKmNvbnRhaW5lckJsb2NrKSAmJiAhY29udGFpbmVyQmxvY2st
PnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7Ci0gICAgICAgIGNvbnN0IGF1dG8m
IGZsb3cgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpjb250YWluZXJCbG9jayk7CisgICAgaWYg
KGlzPFJlbmRlcklubGluZT4oY29udGFpbmVyQmxvY2spICYmICFjb250YWluZXJCbG9jay5zdHls
ZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgeworICAgICAgICBjb25zdCBhdXRvJiBmbG93
ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihjb250YWluZXJCbG9jayk7CiAgICAgICAgIElubGlu
ZUZsb3dCb3gqIGZpcnN0TGluZSA9IGZsb3cuZmlyc3RMaW5lQm94KCk7CiAgICAgICAgIElubGlu
ZUZsb3dCb3gqIGxhc3RMaW5lID0gZmxvdy5sYXN0TGluZUJveCgpOwogICAgICAgICBpZiAoZmly
c3RMaW5lICYmIGxhc3RMaW5lICYmIGZpcnN0TGluZSAhPSBsYXN0TGluZSkgewpAQCAtNDIxMSw3
ICs0MjExLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdo
dFJlcGxhY2VkKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHUKICAgICAvLyB0aGUgbnVtYmVycyBj
b3JyZXNwb25kIHRvIG51bWJlcnMgaW4gc3BlYykKIAogICAgIC8vIFdlIGRvbid0IHVzZSBjb250
YWluaW5nQmxvY2soKSwgc2luY2Ugd2UgbWF5IGJlIHBvc2l0aW9uZWQgYnkgYW4gZW5jbG9zaW5n
IHJlbHBvc2l0aW9uZWQgaW5saW5lLgotICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBj
b250YWluZXJCbG9jayA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0Pihjb250YWluZXIo
KSk7CisgICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGNvbnRhaW5lckJsb2NrID0gZG93
bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpjb250YWluZXIoKSk7CiAKICAgICBjb25zdCBM
YXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgPSBjb250YWluaW5nQmxvY2tMb2dpY2Fs
SGVpZ2h0Rm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jayk7CiAgICAgY29uc3QgTGF5b3V0VW5p
dCBjb250YWluZXJSZWxhdGl2ZUxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxX
aWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2ssIG51bGxwdHIsIGZhbHNlKTsKQEAgLTQ2
NzQsMTkgKzQ2NzQsMTkgQEAgYm9vbCBSZW5kZXJCb3g6Omhhc0RlZmluaXRlTG9naWNhbFdpZHRo
KCkgY29uc3QKICAgICByZXR1cm4gbG9naWNhbFdpZHRoSXNSZXNvbHZhYmxlKCp0aGlzKTsKIH0K
IAotaW5saW5lIHN0YXRpYyBib29sIHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0SXNSZXNvbHZhYmxl
KGNvbnN0IFJlbmRlckJveCogYm94KQoraW5saW5lIHN0YXRpYyBib29sIHBlcmNlbnRhZ2VMb2dp
Y2FsSGVpZ2h0SXNSZXNvbHZhYmxlKGNvbnN0IFJlbmRlckJveCYgYm94KQogewotICAgIHJldHVy
biBSZW5kZXJCb3g6OnBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0SXNSZXNvbHZhYmxlRnJvbUJsb2Nr
KGJveC0+Y29udGFpbmluZ0Jsb2NrKCksIGJveC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCksIGJv
eC0+c2Nyb2xsc092ZXJmbG93WSgpKTsKKyAgICByZXR1cm4gUmVuZGVyQm94OjpwZXJjZW50YWdl
TG9naWNhbEhlaWdodElzUmVzb2x2YWJsZUZyb21CbG9jaygqYm94LmNvbnRhaW5pbmdCbG9jaygp
LCBib3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCksIGJveC5zY3JvbGxzT3ZlcmZsb3dZKCkpOwog
fQogCi1ib29sIFJlbmRlckJveDo6cGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRJc1Jlc29sdmFibGVG
cm9tQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jaywgYm9vbCBpc091dE9m
Rmxvd1Bvc2l0aW9uZWQsIGJvb2wgc2Nyb2xsc092ZXJmbG93WSkKK2Jvb2wgUmVuZGVyQm94Ojpw
ZXJjZW50YWdlTG9naWNhbEhlaWdodElzUmVzb2x2YWJsZUZyb21CbG9jayhjb25zdCBSZW5kZXJC
bG9jayYgY29udGFpbmluZ0Jsb2NrLCBib29sIGlzT3V0T2ZGbG93UG9zaXRpb25lZCwgYm9vbCBz
Y3JvbGxzT3ZlcmZsb3dZKQogewogICAgIC8vIEluIHF1aXJrcyBtb2RlLCBibG9ja3Mgd2l0aCBh
dXRvIGhlaWdodCBhcmUgc2tpcHBlZCwgYW5kIHdlIGtlZXAgbG9va2luZyBmb3IgYW4gZW5jbG9z
aW5nCiAgICAgLy8gYmxvY2sgdGhhdCBtYXkgaGF2ZSBhIHNwZWNpZmllZCBoZWlnaHQgYW5kIHRo
ZW4gdXNlIGl0LiBJbiBzdHJpY3QgbW9kZSwgdGhpcyB2aW9sYXRlcyB0aGUKICAgICAvLyBzcGVj
aWZpY2F0aW9uLCB3aGljaCBzdGF0ZXMgdGhhdCBwZXJjZW50YWdlIGhlaWdodHMganVzdCByZXZl
cnQgdG8gYXV0byBpZiB0aGUgY29udGFpbmluZwogICAgIC8vIGJsb2NrIGhhcyBhbiBhdXRvIGhl
aWdodC4gV2Ugc3RpbGwgc2tpcCBhbm9ueW1vdXMgY29udGFpbmluZyBibG9ja3MgaW4gYm90aCBt
b2RlcywgdGhvdWdoLCBhbmQgbG9vawogICAgIC8vIG9ubHkgYXQgZXhwbGljaXQgY29udGFpbmVy
cy4KLSAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2s7CisgICAgY29u
c3QgUmVuZGVyQmxvY2sqIGNiID0gJmNvbnRhaW5pbmdCbG9jazsKICAgICBib29sIGluUXVpcmtz
TW9kZSA9IGNiLT5kb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpOwogICAgIGJvb2wgc2tpcHBlZEF1
dG9IZWlnaHRDb250YWluaW5nQmxvY2sgPSBmYWxzZTsKICAgICB3aGlsZSAoY2IgJiYgIWlzPFJl
bmRlclZpZXc+KCpjYikgJiYgIWNiLT5pc0JvZHkoKSAmJiAhY2ItPmlzVGFibGVDZWxsKCkgJiYg
IWNiLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiBjYi0+c3R5bGUoKS5sb2dpY2FsSGVpZ2h0
KCkuaXNBdXRvKCkpIHsKQEAgLTQ3MTksNyArNDcxOSw3IEBAIGJvb2wgUmVuZGVyQm94OjpwZXJj
ZW50YWdlTG9naWNhbEhlaWdodElzUmVzb2x2YWJsZUZyb21CbG9jayhjb25zdCBSZW5kZXJCbG9j
ayoKICAgICBpZiAoY2ItPnN0eWxlKCkubG9naWNhbEhlaWdodCgpLmlzRml4ZWQoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGNiLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc1Bl
cmNlbnRPckNhbGN1bGF0ZWQoKSAmJiAhaXNPdXRPZkZsb3dQb3NpdGlvbmVkV2l0aFNwZWNpZmll
ZEhlaWdodCkKLSAgICAgICAgcmV0dXJuIHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0SXNSZXNvbHZh
YmxlRnJvbUJsb2NrKGNiLT5jb250YWluaW5nQmxvY2soKSwgY2ItPmlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpLCBjYi0+c2Nyb2xsc092ZXJmbG93WSgpKTsKKyAgICAgICAgcmV0dXJuIHBlcmNlbnRh
Z2VMb2dpY2FsSGVpZ2h0SXNSZXNvbHZhYmxlRnJvbUJsb2NrKCpjYi0+Y29udGFpbmluZ0Jsb2Nr
KCksIGNiLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSwgY2ItPnNjcm9sbHNPdmVyZmxvd1koKSk7
CiAgICAgaWYgKGNiLT5pc1JlbmRlclZpZXcoKSB8fCBpblF1aXJrc01vZGUgfHwgaXNPdXRPZkZs
b3dQb3NpdGlvbmVkV2l0aFNwZWNpZmllZEhlaWdodCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgaWYgKGNiLT5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkgJiYgaXNPdXRPZkZsb3dQb3Np
dGlvbmVkKSB7CkBAIC00NzQ3LDcgKzQ3NDcsNyBAQCBib29sIFJlbmRlckJveDo6aGFzRGVmaW5p
dGVMb2dpY2FsSGVpZ2h0KCkgY29uc3QKICAgICBpZiAobG9naWNhbEhlaWdodC5pc0ludHJpbnNp
Y09yQXV0bygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gcGVyY2VudGFn
ZUxvZ2ljYWxIZWlnaHRJc1Jlc29sdmFibGUodGhpcyk7CisgICAgcmV0dXJuIHBlcmNlbnRhZ2VM
b2dpY2FsSGVpZ2h0SXNSZXNvbHZhYmxlKCp0aGlzKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6Omhh
c1Vuc3BsaXR0YWJsZVNjcm9sbGluZ092ZXJmbG93KCkgY29uc3QKQEAgLTQ3NjMsOCArNDc2Myw4
IEBAIGJvb2wgUmVuZGVyQm94OjpoYXNVbnNwbGl0dGFibGVTY3JvbGxpbmdPdmVyZmxvdygpIGNv
bnN0CiAgICAgLy8gY29uZGl0aW9ucywgYnV0IGl0IHNob3VsZCB3b3JrIG91dCB0byBiZSBnb29k
IGVub3VnaCBmb3IgY29tbW9uIGNhc2VzLiBQYWdpbmF0aW5nIG92ZXJmbG93CiAgICAgLy8gd2l0
aCBzY3JvbGxiYXJzIHByZXNlbnQgaXMgbm90IHRoZSBlbmQgb2YgdGhlIHdvcmxkIGFuZCBpcyB3
aGF0IHdlIHVzZWQgdG8gZG8gaW4gdGhlIG9sZCBtb2RlbCBhbnl3YXkuCiAgICAgcmV0dXJuICFz
dHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpCi0gICAgICAgIHx8ICgh
c3R5bGUoKS5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUo
KS5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSAmJiAoIXN0eWxlKCkubG9naWNhbE1h
eEhlaWdodCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpIHx8IHBlcmNlbnRhZ2VMb2dpY2FsSGVp
Z2h0SXNSZXNvbHZhYmxlKHRoaXMpKSkKLSAgICAgICAgfHwgKCFzdHlsZSgpLmxvZ2ljYWxNaW5I
ZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpICYmIHN0eWxlKCkubG9naWNhbE1pbkhlaWdodCgp
LmlzUG9zaXRpdmUoKSAmJiAoIXN0eWxlKCkubG9naWNhbE1pbkhlaWdodCgpLmlzUGVyY2VudE9y
Q2FsY3VsYXRlZCgpIHx8IHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0SXNSZXNvbHZhYmxlKHRoaXMp
KSk7CisgICAgICAgIHx8ICghc3R5bGUoKS5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNJbnRyaW5zaWNP
ckF1dG8oKSAmJiAhc3R5bGUoKS5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSAmJiAo
IXN0eWxlKCkubG9naWNhbE1heEhlaWdodCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpIHx8IHBl
cmNlbnRhZ2VMb2dpY2FsSGVpZ2h0SXNSZXNvbHZhYmxlKCp0aGlzKSkpCisgICAgICAgIHx8ICgh
c3R5bGUoKS5sb2dpY2FsTWluSGVpZ2h0KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzdHlsZSgp
LmxvZ2ljYWxNaW5IZWlnaHQoKS5pc1Bvc2l0aXZlKCkgJiYgKCFzdHlsZSgpLmxvZ2ljYWxNaW5I
ZWlnaHQoKS5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKSB8fCBwZXJjZW50YWdlTG9naWNhbEhlaWdo
dElzUmVzb2x2YWJsZSgqdGhpcykpKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OmlzVW5zcGxpdHRh
YmxlRm9yUGFnaW5hdGlvbigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgK
aW5kZXggZWUyOTQ0OGRjYThiOGNmOTBlOTg3MjQxYTgwOWJkZGE2ODhmODc0OC4uMDdlMzMwYzgx
NGQwZWE3ZGQ2NzVkNjFkNTRlNzI1ZGZlNDE3ZGNmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaApAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyB3aWR0aCgpIDogaGVpZ2h0KCk7IH0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQo
KSBjb25zdCB7IHJldHVybiBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBoZWln
aHQoKSA6IHdpZHRoKCk7IH0KIAotICAgIExheW91dFVuaXQgY29uc3RyYWluTG9naWNhbFdpZHRo
SW5SZWdpb25CeU1pbk1heChMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBSZW5kZXJCbG9jayosIFJl
bmRlclJlZ2lvbiogPSBudWxscHRyKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNvbnN0cmFpbkxv
Z2ljYWxXaWR0aEluUmVnaW9uQnlNaW5NYXgoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgUmVuZGVy
QmxvY2smLCBSZW5kZXJSZWdpb24qID0gbnVsbHB0cikgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBj
b25zdHJhaW5Mb2dpY2FsSGVpZ2h0QnlNaW5NYXgoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBP
cHRpb25hbDxMYXlvdXRVbml0PiBpbnRyaW5zaWNDb250ZW50SGVpZ2h0KSBjb25zdDsKICAgICBM
YXlvdXRVbml0IGNvbnN0cmFpbkNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0QnlNaW5NYXgoTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0LCBPcHRpb25hbDxMYXlvdXRVbml0PiBpbnRyaW5zaWNDb250ZW50
SGVpZ2h0KSBjb25zdDsKIApAQCAtMzY2LDExICszNjYsMTEgQEAgcHVibGljOgogICAgIH07CiAg
ICAgLy8gUmVzb2x2ZSBhdXRvIG1hcmdpbnMgaW4gdGhlIGlubGluZSBkaXJlY3Rpb24gb2YgdGhl
IGNvbnRhaW5pbmcgYmxvY2sgc28gdGhhdCBvYmplY3RzIGNhbiBiZSBwdXNoZWQgdG8gdGhlIHN0
YXJ0LCBtaWRkbGUgb3IgZW5kCiAgICAgLy8gb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2suCi0gICAg
dm9pZCBjb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucyhSZW5kZXJCbG9jayogY29udGFpbmlu
Z0Jsb2NrLCBMYXlvdXRVbml0IGNvbnRhaW5lcldpZHRoLCBMYXlvdXRVbml0IGNoaWxkV2lkdGgs
IExheW91dFVuaXQmIG1hcmdpblN0YXJ0LCBMYXlvdXRVbml0JiBtYXJnaW5FbmQpIGNvbnN0Owor
ICAgIHZvaWQgY29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoUmVuZGVyQmxvY2smIGNvbnRh
aW5pbmdCbG9jaywgTGF5b3V0VW5pdCBjb250YWluZXJXaWR0aCwgTGF5b3V0VW5pdCBjaGlsZFdp
ZHRoLCBMYXlvdXRVbml0JiBtYXJnaW5TdGFydCwgTGF5b3V0VW5pdCYgbWFyZ2luRW5kKSBjb25z
dDsKIAogICAgIC8vIFVzZWQgdG8gcmVzb2x2ZSBtYXJnaW5zIGluIHRoZSBjb250YWluaW5nIGJs
b2NrJ3MgYmxvY2stZmxvdyBkaXJlY3Rpb24uCi0gICAgdm9pZCBjb21wdXRlQmxvY2tEaXJlY3Rp
b25NYXJnaW5zKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2ssIExheW91dFVuaXQm
IG1hcmdpbkJlZm9yZSwgTGF5b3V0VW5pdCYgbWFyZ2luQWZ0ZXIpIGNvbnN0OwotICAgIHZvaWQg
Y29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0aW9uTWFyZ2lucyhjb25zdCBSZW5kZXJCbG9jayogY29u
dGFpbmluZ0Jsb2NrKTsKKyAgICB2b2lkIGNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcmdpbnMoY29u
c3QgUmVuZGVyQmxvY2smIGNvbnRhaW5pbmdCbG9jaywgTGF5b3V0VW5pdCYgbWFyZ2luQmVmb3Jl
LCBMYXlvdXRVbml0JiBtYXJnaW5BZnRlcikgY29uc3Q7CisgICAgdm9pZCBjb21wdXRlQW5kU2V0
QmxvY2tEaXJlY3Rpb25NYXJnaW5zKGNvbnN0IFJlbmRlckJsb2NrJiBjb250YWluaW5nQmxvY2sp
OwogCiAgICAgZW51bSBSZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MgeyBDYWNoZVJlbmRlckJveFJl
Z2lvbkluZm8sIERvTm90Q2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvIH07CiAgICAgTGF5b3V0UmVj
dCBib3JkZXJCb3hSZWN0SW5SZWdpb24oUmVuZGVyUmVnaW9uKiwgUmVuZGVyQm94UmVnaW9uSW5m
b0ZsYWdzID0gQ2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKSBjb25zdDsKQEAgLTQyNSw5ICs0MjUs
OSBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1N0cmV0Y2hlZExvZ2ljYWxXaWR0aCgpIGNvbnN0
OwogCi0gICAgTGF5b3V0VW5pdCBzaHJpbmtMb2dpY2FsV2lkdGhUb0F2b2lkRmxvYXRzKExheW91
dFVuaXQgY2hpbGRNYXJnaW5TdGFydCwgTGF5b3V0VW5pdCBjaGlsZE1hcmdpbkVuZCwgY29uc3Qg
UmVuZGVyQmxvY2sqIGNiLCBSZW5kZXJSZWdpb24qKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHNo
cmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMoTGF5b3V0VW5pdCBjaGlsZE1hcmdpblN0YXJ0
LCBMYXlvdXRVbml0IGNoaWxkTWFyZ2luRW5kLCBjb25zdCBSZW5kZXJCbG9jayYgY2IsIFJlbmRl
clJlZ2lvbiopIGNvbnN0OwogCi0gICAgTGF5b3V0VW5pdCBjb21wdXRlTG9naWNhbFdpZHRoSW5S
ZWdpb25Vc2luZyhTaXplVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBhdmFp
bGFibGVMb2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2ssIFJl
bmRlclJlZ2lvbiopIGNvbnN0OworICAgIExheW91dFVuaXQgY29tcHV0ZUxvZ2ljYWxXaWR0aElu
UmVnaW9uVXNpbmcoU2l6ZVR5cGUsIExlbmd0aCBsb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYXZh
aWxhYmxlTG9naWNhbFdpZHRoLCBjb25zdCBSZW5kZXJCbG9jayYgY29udGFpbmluZ0Jsb2NrLCBS
ZW5kZXJSZWdpb24qKSBjb25zdDsKICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlTG9n
aWNhbEhlaWdodFVzaW5nKFNpemVUeXBlLCBjb25zdCBMZW5ndGgmIGhlaWdodCwgT3B0aW9uYWw8
TGF5b3V0VW5pdD4gaW50cmluc2ljQ29udGVudEhlaWdodCkgY29uc3Q7CiAgICAgT3B0aW9uYWw8
TGF5b3V0VW5pdD4gY29tcHV0ZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KFNpemVUeXBlLCBjb25zdCBM
ZW5ndGgmIGhlaWdodCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gaW50cmluc2ljQ29udGVudEhlaWdo
dCkgY29uc3Q7CiAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZUNvbnRlbnRBbmRTY3Jv
bGxiYXJMb2dpY2FsSGVpZ2h0VXNpbmcoU2l6ZVR5cGUsIGNvbnN0IExlbmd0aCYgaGVpZ2h0LCBP
cHRpb25hbDxMYXlvdXRVbml0PiBpbnRyaW5zaWNDb250ZW50SGVpZ2h0KSBjb25zdDsKQEAgLTQ0
MCw3ICs0NDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxIZWlnaHQoKSBjb25zdDsKIAogICAgIGJvb2wgaGFzRGVmaW5pdGVMb2dpY2Fs
V2lkdGgoKSBjb25zdDsKLSAgICBzdGF0aWMgYm9vbCBwZXJjZW50YWdlTG9naWNhbEhlaWdodElz
UmVzb2x2YWJsZUZyb21CbG9jayhjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrLCBi
b29sIG91dE9mRmxvd1Bvc2l0aW9uZWQsIGJvb2wgc2Nyb2xsc092ZXJmbG93WSk7CisgICAgc3Rh
dGljIGJvb2wgcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRJc1Jlc29sdmFibGVGcm9tQmxvY2soY29u
c3QgUmVuZGVyQmxvY2smIGNvbnRhaW5pbmdCbG9jaywgYm9vbCBvdXRPZkZsb3dQb3NpdGlvbmVk
LCBib29sIHNjcm9sbHNPdmVyZmxvd1kpOwogICAgIGJvb2wgaGFzRGVmaW5pdGVMb2dpY2FsSGVp
Z2h0KCkgY29uc3Q7CiAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZVBlcmNlbnRhZ2VM
b2dpY2FsSGVpZ2h0KGNvbnN0IExlbmd0aCYgaGVpZ2h0KSBjb25zdDsKIApAQCAtNjkyLDE5ICs2
OTIsMTkgQEAgcHJpdmF0ZToKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgd2UgZGlkIGEgZnVsbCBy
ZXBhaW50CiAgICAgYm9vbCByZXBhaW50TGF5ZXJSZWN0c0ZvckltYWdlKFdyYXBwZWRJbWFnZVB0
ciBpbWFnZSwgY29uc3QgRmlsbExheWVyKiBsYXllcnMsIGJvb2wgZHJhd2luZ0JhY2tncm91bmQp
OwogCi0gICAgYm9vbCBza2lwQ29udGFpbmluZ0Jsb2NrRm9yUGVyY2VudEhlaWdodENhbGN1bGF0
aW9uKGNvbnN0IFJlbmRlckJveCogY29udGFpbmluZ0Jsb2NrLCBib29sIGlzUGVycGVuZGljdWxh
cldyaXRpbmdNb2RlKSBjb25zdDsKKyAgICBib29sIHNraXBDb250YWluaW5nQmxvY2tGb3JQZXJj
ZW50SGVpZ2h0Q2FsY3VsYXRpb24oY29uc3QgUmVuZGVyQm94JiBjb250YWluaW5nQmxvY2ssIGJv
b2wgaXNQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUpIGNvbnN0OwogICAgCi0gICAgTGF5b3V0VW5p
dCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBjb250YWluaW5nQmxvY2ssIFJlbmRlclJlZ2lvbiogPSBudWxscHRyLCBi
b29sIGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlID0gdHJ1ZSkgY29uc3Q7Ci0gICAg
TGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZChjb25z
dCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmluZ0Jsb2NrLCBib29sIGNoZWNrRm9yUGVy
cGVuZGljdWxhcldyaXRpbmdNb2RlID0gdHJ1ZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vZGVs
T2JqZWN0JiBjb250YWluaW5nQmxvY2ssIFJlbmRlclJlZ2lvbiogPSBudWxscHRyLCBib29sIGNo
ZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlID0gdHJ1ZSkgY29uc3Q7CisgICAgTGF5b3V0
VW5pdCBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZChjb25zdCBSZW5k
ZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbmluZ0Jsb2NrLCBib29sIGNoZWNrRm9yUGVycGVuZGlj
dWxhcldyaXRpbmdNb2RlID0gdHJ1ZSkgY29uc3Q7CiAKICAgICBMYXlvdXRVbml0IHZpZXdMb2dp
Y2FsSGVpZ2h0Rm9yUGVyY2VudGFnZXMoKSBjb25zdDsKIAogICAgIHZvaWQgY29tcHV0ZVBvc2l0
aW9uZWRMb2dpY2FsSGVpZ2h0KExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYpIGNvbnN0Owot
ICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhTaXplVHlwZSwgTGVu
Z3RoIGxvZ2ljYWxXaWR0aCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJs
b2NrLCBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiwKKyAgICB2b2lkIGNvbXB1dGVQ
b3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoU2l6ZVR5cGUsIExlbmd0aCBsb2dpY2FsV2lkdGgs
IGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBjb250YWluZXJCbG9jaywgVGV4dERpcmVjdGlv
biBjb250YWluZXJEaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGJv
cmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTGVuZ3RoIGxvZ2ljYWxMZWZ0LCBMZW5ndGggbG9naWNhbFJpZ2h0LCBMZW5ndGggbWFy
Z2luTG9naWNhbExlZnQsIExlbmd0aCBtYXJnaW5Mb2dpY2FsUmlnaHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVl
cyYpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmco
U2l6ZVR5cGUsIExlbmd0aCBsb2dpY2FsSGVpZ2h0TGVuZ3RoLCBjb25zdCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogY29udGFpbmVyQmxvY2ssCisgICAgdm9pZCBjb21wdXRlUG9zaXRpb25lZExvZ2lj
YWxIZWlnaHRVc2luZyhTaXplVHlwZSwgTGVuZ3RoIGxvZ2ljYWxIZWlnaHRMZW5ndGgsIGNvbnN0
IFJlbmRlckJveE1vZGVsT2JqZWN0JiBjb250YWluZXJCbG9jaywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbEhl
aWdodCwgTGF5b3V0VW5pdCBib3JkZXJzUGx1c1BhZGRpbmcsIExheW91dFVuaXQgbG9naWNhbEhl
aWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0
aCBsb2dpY2FsVG9wLCBMZW5ndGggbG9naWNhbEJvdHRvbSwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxU
b3AsIExlbmd0aCBtYXJnaW5Mb2dpY2FsQm90dG9tLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJikgY29uc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZs
ZXhpYmxlQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3guY3BwCmluZGV4IDA5ZGVhM2M0NDE1YmI3ODM4YTc1NTA4MDAxM2FiZjMzODM4
YTRjMjkuLjk1MWNlOGEzMDcyNzQxYWMxOTg4NjcyY2VmNzA3MzgzNzllNjllMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGli
bGVCb3guY3BwCkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGli
bGVCb3g6OmxheW91dEhvcml6b250YWxCb3goYm9vbCByZWxheW91dENoaWxkcmVuKQogICAgICAg
ICAgICAgTGF5b3V0U2l6ZSYgY2hpbGRMYXlvdXREZWx0YSA9IGNoaWxkTGF5b3V0RGVsdGFzW2No
aWxkSW5kZXgrK107CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGNo
aWxkJ3MgdmVydGljYWwgbWFyZ2lucy4KLSAgICAgICAgICAgIGNoaWxkLT5jb21wdXRlQW5kU2V0
QmxvY2tEaXJlY3Rpb25NYXJnaW5zKHRoaXMpOworICAgICAgICAgICAgY2hpbGQtPmNvbXB1dGVB
bmRTZXRCbG9ja0RpcmVjdGlvbk1hcmdpbnMoKnRoaXMpOwogCiAgICAgICAgICAgICBjaGlsZC0+
bWFya0ZvclBhZ2luYXRpb25SZWxheW91dElmTmVlZGVkKCk7CiAgICAgICAgICAgICAKQEAgLTcz
Myw3ICs3MzMsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6bGF5b3V0VmVy
dGljYWxCb3goYm9vbCByZWxheW91dENoaWxkcmVuKQogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAvLyBDb21wdXRlIHRoZSBjaGlsZCdzIHZlcnRpY2FsIG1hcmdpbnMuCi0gICAgICAgICAg
ICBjaGlsZC0+Y29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0aW9uTWFyZ2lucyh0aGlzKTsKKyAgICAg
ICAgICAgIGNoaWxkLT5jb21wdXRlQW5kU2V0QmxvY2tEaXJlY3Rpb25NYXJnaW5zKCp0aGlzKTsK
IAogICAgICAgICAgICAgLy8gQWRkIGluIHRoZSBjaGlsZCdzIG1hcmdpblRvcCB0byBvdXIgaGVp
Z2h0LgogICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgY2hpbGQtPm1hcmdpblRvcCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCmlu
ZGV4IDY5ZjM3ODFhNmI5MzI3ZTU5ZGZmN2U1ZjlmMTBkMjBjN2MxYTEzZDQuLjg4OWJjOTcyZmRi
MDFlNmJmZTI3NmUyYzU0MTA4OGQ0NzRmNjZhYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcApAQCAtNDYyLDcgKzQ2Miw3IEBAIE9wdGlvbmFs
PExheW91dFVuaXQ+IFJlbmRlckZsZXhpYmxlQm94Ojpjb21wdXRlTWFpbkF4aXNFeHRlbnRGb3JD
aGlsZChSZW5kZXJCb3gmCiAgICAgfQogICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0aGlz
IHNob3VsZCB3b3JrIGZvciByZWdpb25zIGFuZCBwYXNzIGluIHRoZSBhcHByb3ByaWF0ZSB2YWx1
ZXMuCiAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSBudWxscHRyOwotICAgIHJldHVybiBjaGls
ZC5jb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhzaXplVHlwZSwgc2l6ZSwgY29udGVu
dExvZ2ljYWxXaWR0aCgpLCB0aGlzLCByZWdpb24pIC0gY2hpbGQuYm9yZGVyQW5kUGFkZGluZ0xv
Z2ljYWxXaWR0aCgpOworICAgIHJldHVybiBjaGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5SZWdp
b25Vc2luZyhzaXplVHlwZSwgc2l6ZSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCAqdGhpcywgcmVn
aW9uKSAtIGNoaWxkLmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKIH0KIAogV3JpdGlu
Z01vZGUgUmVuZGVyRmxleGlibGVCb3g6OnRyYW5zZm9ybWVkV3JpdGluZ01vZGUoKSBjb25zdApA
QCAtMTM5Nyw3ICsxMzk3LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YXBwbHlTdHJldGNo
QWxpZ25tZW50VG9DaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbmkKICAgICAgICAgLy8g
RklYTUU6IElmIHRoZSBjaGlsZCBkb2Vzbid0IGhhdmUgb3J0aG9nb25hbCBmbG93LCB0aGVuIGl0
IGFscmVhZHkgaGFzIGFuIG92ZXJyaWRlIHdpZHRoIHNldCwgc28gdXNlIGl0LgogICAgICAgICBp
ZiAoaGFzT3J0aG9nb25hbEZsb3coY2hpbGQpKSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGNo
aWxkV2lkdGggPSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBsaW5lQ3Jvc3NBeGlzRXh0ZW50IC0g
Y3Jvc3NBeGlzTWFyZ2luRXh0ZW50Rm9yQ2hpbGQoY2hpbGQpKTsKLSAgICAgICAgICAgIGNoaWxk
V2lkdGggPSBjaGlsZC5jb25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KGNoaWxk
V2lkdGgsIGNoaWxkV2lkdGgsIHRoaXMpOworICAgICAgICAgICAgY2hpbGRXaWR0aCA9IGNoaWxk
LmNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluUmVnaW9uQnlNaW5NYXgoY2hpbGRXaWR0aCwgY2hpbGRX
aWR0aCwgKnRoaXMpOwogCiAgICAgICAgICAgICBpZiAoY2hpbGRXaWR0aCAhPSBjaGlsZC5sb2dp
Y2FsV2lkdGgoKSkgewogICAgICAgICAgICAgICAgIGNoaWxkLnNldE92ZXJyaWRlTG9naWNhbENv
bnRlbnRXaWR0aChjaGlsZFdpZHRoIC0gY2hpbGQuYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0
aCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAppbmRleCA3YjEzYTVl
MjVkZjkyMDQ3ZjRhMTgyZGIzMGY5ODcyOTA4N2U5YTE1Li45OTdmN2MxYWI0ZTEyYjFhMTg2ODc5
NmQxYTkwZDQ2OWQwMGUyYmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQu
Y3BwCkBAIC03NDgsNyArNzQ4LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjptaW5TaXplRm9y
Q2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW8KICAgICAgICAg
cmV0dXJuIG1pbkNvbnRlbnRGb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uLCBjb2x1bW5UcmFja3Mp
OwogCiAgICAgaWYgKGlzUm93QXhpcykKLSAgICAgICAgcmV0dXJuIGNoaWxkLmNvbXB1dGVMb2dp
Y2FsV2lkdGhJblJlZ2lvblVzaW5nKE1pblNpemUsIGNoaWxkTWluU2l6ZSwgY29udGVudExvZ2lj
YWxXaWR0aCgpLCB0aGlzLCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkLmNvbXB1dGVM
b2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKE1pblNpemUsIGNoaWxkTWluU2l6ZSwgY29udGVudExv
Z2ljYWxXaWR0aCgpLCAqdGhpcywgbnVsbHB0cik7CiAKICAgICByZXR1cm4gY2hpbGQuY29tcHV0
ZUNvbnRlbnRBbmRTY3JvbGxiYXJMb2dpY2FsSGVpZ2h0VXNpbmcoTWluU2l6ZSwgY2hpbGRNaW5T
aXplLCBjaGlsZC5sb2dpY2FsSGVpZ2h0KCkpLnZhbHVlT3IoMCk7CiB9CkBAIC0xNjYxLDcgKzE2
NjEsNyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OmNvbXB1dGVNYXJnaW5Mb2dpY2FsSGVpZ2h0
Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZAogCiAgICAgTGF5b3V0VW5pdCBtYXJnaW5C
ZWZvcmU7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5BZnRlcjsKLSAgICBjaGlsZC5jb21wdXRlQmxv
Y2tEaXJlY3Rpb25NYXJnaW5zKHRoaXMsIG1hcmdpbkJlZm9yZSwgbWFyZ2luQWZ0ZXIpOworICAg
IGNoaWxkLmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcmdpbnMoKnRoaXMsIG1hcmdpbkJlZm9yZSwg
bWFyZ2luQWZ0ZXIpOwogCiAgICAgcmV0dXJuIG1hcmdpbkJlZm9yZSArIG1hcmdpbkFmdGVyOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXggZjY2YjBhZDYx
MjUzMjk4MmZkMjExMWM3NjdkZDcyNDMyMWVhZDY1Zi4uYjI0YTVmZDg5NmQ5YmNiODczODViYTI1
YzFlNDhiMTRkMzJiNDVhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCkBAIC0yNzIsMTAgKzI3MiwxMCBAQCB2b2lkIFJlbmRlclRhYmxlOjp1cGRhdGVMb2dpY2Fs
V2lkdGgoKQogICAgICAgICBzZXRNYXJnaW5FbmQoY29tcHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1f
ZW5kKTsKICAgICB9CiAKLSAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsK
KyAgICBSZW5kZXJCbG9jayYgY2IgPSAqY29udGFpbmluZ0Jsb2NrKCk7CiAKICAgICBMYXlvdXRV
bml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZv
ckNvbnRlbnQoKTsKLSAgICBib29sIGhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2sgPSBj
Yi0+c3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IHN0eWxlKCkuaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKTsKKyAgICBib29sIGhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxv
Y2sgPSBjYi5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gc3R5bGUoKS5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpOwogICAgIExheW91dFVuaXQgY29udGFpbmVyV2lkdGhJbklu
bGluZURpcmVjdGlvbiA9IGhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2sgPyBwZXJwZW5k
aWN1bGFyQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCgpIDogYXZhaWxhYmxlTG9naWNhbFdp
ZHRoOwogCiAgICAgTGVuZ3RoIHN0eWxlTG9naWNhbFdpZHRoID0gc3R5bGUoKS5sb2dpY2FsV2lk
dGgoKTsKQEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIFJlbmRlclRhYmxlOjp1cGRhdGVMb2dpY2Fs
V2lkdGgoKQogCiAgICAgICAgIC8vIFN1YnRyYWN0IG91dCBvdXIgbWFyZ2lucyB0byBnZXQgdGhl
IGF2YWlsYWJsZSBjb250ZW50IHdpZHRoLgogICAgICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUNv
bnRlbnRMb2dpY2FsV2lkdGggPSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBjb250YWluZXJXaWR0
aEluSW5saW5lRGlyZWN0aW9uIC0gbWFyZ2luVG90YWwpOwotICAgICAgICBpZiAoc2hyaW5rVG9B
dm9pZEZsb2F0cygpICYmIGNiLT5jb250YWluc0Zsb2F0cygpICYmICFoYXNQZXJwZW5kaWN1bGFy
Q29udGFpbmluZ0Jsb2NrKSB7CisgICAgICAgIGlmIChzaHJpbmtUb0F2b2lkRmxvYXRzKCkgJiYg
Y2IuY29udGFpbnNGbG9hdHMoKSAmJiAhaGFzUGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9jaykg
ewogICAgICAgICAgICAgLy8gRklYTUU6IFdvcmsgd2l0aCByZWdpb25zIHNvbWVkYXkuCiAgICAg
ICAgICAgICBhdmFpbGFibGVDb250ZW50TG9naWNhbFdpZHRoID0gc2hyaW5rTG9naWNhbFdpZHRo
VG9Bdm9pZEZsb2F0cyhtYXJnaW5TdGFydCwgbWFyZ2luRW5kLCBjYiwgMCk7CiAgICAgICAgIH0K
QEAgLTMyMSwxMCArMzIxLDEwIEBAIHZvaWQgUmVuZGVyVGFibGU6OnVwZGF0ZUxvZ2ljYWxXaWR0
aCgpCiAgICAgc2V0TWFyZ2luRW5kKDApOwogICAgIGlmICghaGFzUGVycGVuZGljdWxhckNvbnRh
aW5pbmdCbG9jaykgewogICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZv
ckF1dG9NYXJnaW5zID0gYXZhaWxhYmxlTG9naWNhbFdpZHRoOwotICAgICAgICBpZiAoYXZvaWRz
RmxvYXRzKCkgJiYgY2ItPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgICAgIGlmIChhdm9pZHNGbG9h
dHMoKSAmJiBjYi5jb250YWluc0Zsb2F0cygpKQogICAgICAgICAgICAgY29udGFpbmVyTG9naWNh
bFdpZHRoRm9yQXV0b01hcmdpbnMgPSBjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5lV2lkdGhJ
blJlZ2lvbigwKTsgLy8gRklYTUU6IFdvcmsgd2l0aCByZWdpb25zIHNvbWVkYXkuCiAgICAgICAg
IENvbXB1dGVkTWFyZ2luVmFsdWVzIG1hcmdpblZhbHVlczsKLSAgICAgICAgYm9vbCBoYXNJbnZl
cnRlZERpcmVjdGlvbiA9ICBjYi0+c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPT0g
c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgICAgIGJvb2wgaGFzSW52ZXJ0
ZWREaXJlY3Rpb24gPSAgY2Iuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPT0gc3R5
bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CiAgICAgICAgIGNvbXB1dGVJbmxpbmVEaXJl
Y3Rpb25NYXJnaW5zKGNiLCBjb250YWluZXJMb2dpY2FsV2lkdGhGb3JBdXRvTWFyZ2lucywgbG9n
aWNhbFdpZHRoKCksCiAgICAgICAgICAgICBoYXNJbnZlcnRlZERpcmVjdGlvbiA/IG1hcmdpblZh
bHVlcy5tX3N0YXJ0IDogbWFyZ2luVmFsdWVzLm1fZW5kLAogICAgICAgICAgICAgaGFzSW52ZXJ0
ZWREaXJlY3Rpb24gPyBtYXJnaW5WYWx1ZXMubV9lbmQgOiBtYXJnaW5WYWx1ZXMubV9zdGFydCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAppbmRleCAyYmNi
NGViMWU1NGRiYjUyYTdiN2U0NGE5ZWU0NTZmNTYyNGJmMTgzLi5lMDgzY2E2NzNlMWNjYjA2ZjM0
MGRiMWFmMTIxOTZhYTI2YWI3M2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVSb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVJvdy5jcHAKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFJlbmRlclRhYmxlUm93Ojps
YXlvdXQoKQogICAgICAgICAgICAgY2VsbC0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRo
aXMpOwogCiAgICAgICAgIGlmIChjZWxsLT5uZWVkc0xheW91dCgpKSB7Ci0gICAgICAgICAgICBj
ZWxsLT5jb21wdXRlQW5kU2V0QmxvY2tEaXJlY3Rpb25NYXJnaW5zKHRhYmxlKCkpOworICAgICAg
ICAgICAgY2VsbC0+Y29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0aW9uTWFyZ2lucygqdGFibGUoKSk7
CiAgICAgICAgICAgICBjZWxsLT5sYXlvdXQoKTsKICAgICAgICAgfQogICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>