<?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>56869</bug_id>
          
          <creation_ts>2011-03-22 15:13:30 -0700</creation_ts>
          <short_desc>Make horizontal writing mode a bit on RenderObject for speed</short_desc>
          <delta_ts>2011-03-22 16:26:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>371701</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-03-22 15:13:30 -0700</bug_when>
    <thetext>If it&apos;s a simple bit on an inlined RenderObject accessor, that should help with the speed of the question.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371713</commentid>
    <comment_count>1</comment_count>
      <attachid>86520</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-03-22 15:27:54 -0700</bug_when>
    <thetext>Created attachment 86520
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371720</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-22 15:30:19 -0700</bug_when>
    <thetext>Attachment 86520 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/rendering/RenderTableCell.cpp:1049:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/rendering/RenderBlock.h:468:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/rendering/RenderBlock.h:476:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 3 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371756</commentid>
    <comment_count>3</comment_count>
      <attachid>86520</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-03-22 15:59:38 -0700</bug_when>
    <thetext>Comment on attachment 86520
Patch

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

&gt; Source/WebCore/rendering/RenderObject.h:864
&gt; +    bool m_horizontalWritingMode : 1;

Unaligned!

What does this to do:

    // 32 bits have been used here. THERE ARE NO FREE BITS AVAILABLE.

Though by my count this is the 32nd bit. I&apos;m sure we could get rid of m_isDragging if we need to. What a waste of a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371785</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-03-22 16:22:08 -0700</bug_when>
    <thetext>Fixed in r81716.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371792</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-22 16:26:03 -0700</bug_when>
    <thetext>I guess the scary comment on line 840 of RenderObject.h is accurate now :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86520</attachid>
            <date>2011-03-22 15:27:54 -0700</date>
            <delta_ts>2011-03-22 15:59:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>66857</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNzA4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE1IEBACisyMDExLTAzLTIyICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTY4NjkKKyAgICAgICAgCisgICAgICAgIE1ha2UgaG9yaXpvbnRhbCB3cml0aW5nIG1vZGUgYSBi
aXQgb24gUmVuZGVyT2JqZWN0IHdpdGggYSBmYXN0IGlubGluZWQgbWV0aG9kIGZvciBhY2Nlc3Mu
IFRoaXMgc2hvdWxkIGJlCisgICAgICAgIGEgbGl0dGxlIGZhc3RlciB0aGFuIGhhdmluZyB0byBh
Y2Nlc3MgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIFJlbmRlclN0eWxlJ3Mgc3ViLXN0cnVjdHVy
ZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmFkZE92ZXJmbG93RnJvbUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpjb21wdXRlT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmFkanVzdFBvc2l0aW9uZWRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
c2V0TG9naWNhbExlZnRGb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
c2V0TG9naWNhbFRvcEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
YXlvdXRQb3NpdGlvbmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
cGFpbnRDb2x1bW5SdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRD
b2x1bW5Db250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZmxpcEZsb2F0
Rm9yV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6YmxvY2tEaXJlY3Rpb25PZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6aW5saW5lRGlyZWN0aW9uT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbmxpbmVTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlv
bkZvclBvaW50UmVzcGVjdGluZ0VkaXRpbmdCb3VuZGFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpjb2x1bW5SZWN0QXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6YWRqdXN0UmVjdEZvckNvbHVtbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmZsaXBGb3JXcml0aW5nTW9kZUluY2x1ZGluZ0NvbHVtbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdEZvckNvbHVtbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6Omxhc3RMaW5lQm94QmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6Om5leHRQYWdlTG9naWNhbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbGxhcHNlZE1hcmdpbkJlZm9yZUZvckNoaWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb2xsYXBzZWRNYXJnaW5BZnRlckZvckNo
aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXJnaW5TdGFydEZvckNoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXJnaW5FbmRGb3JDaGlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0TWFyZ2luU3RhcnRGb3JDaGlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0TWFyZ2luRW5kRm9yQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1hcmdpblZhbHVlc0ZvckNoaWxkKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpsb2dpY2FsV2lkdGhGb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bG9naWNhbEhlaWdodEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpsb2dpY2FsVG9wRm9yQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omxv
Z2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bG9naWNhbFRvcEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpsb2dpY2FsQm90dG9tRm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmxvZ2ljYWxMZWZ0Rm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmxvZ2ljYWxSaWdodEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
b2dpY2FsV2lkdGhGb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0
TG9naWNhbFRvcEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRM
b2dpY2FsTGVmdEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRM
b2dpY2FsSGVpZ2h0Rm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNl
dExvZ2ljYWxXaWR0aEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp4
UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6eVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmNyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmNoZWNrRmxvYXRzSW5DbGVhbkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U3RhdGljUG9z
aXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcmVh
ayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YmVmb3JlU2lkZVZpc3VhbE92ZXJm
bG93Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWZ0ZXJTaWRlVmlz
dWFsT3ZlcmZsb3dGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpiZWZv
cmVTaWRlTGF5b3V0T3ZlcmZsb3dGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjphZnRlclNpZGVMYXlvdXRPdmVyZmxvd0ZvckxpbmUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjptYXJnaW5TdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om1hcmdpbkVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNldE1hcmdpblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6c2V0TWFyZ2luRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5
bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xs
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YXZhaWxhYmxlTG9naWNhbEhlaWdodFVzaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9y
UG9zaXRpb25lZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cHV0ZUxvZ2ljYWxMZWZ0UG9zaXRpb25lZE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlTG9naWNhbFRvcFBvc2l0aW9uZWRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFJlcGxhY2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0UmVw
bGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjphZGRMYXlvdXRPdmVyZmxvdyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojp1cGRhdGVCb3hNb2RlbEluZm9Gcm9tU3R5bGUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjpSZW5kZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjpzdHlsZVdpbGxDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZXRIb3Jpem9udGFsV3JpdGlu
Z01vZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nVG9wKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0JvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlQ2VsbDo6cGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2Vs
bDo6c2Nyb2xsYmFyc0NoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OlJvb3RJbmxpbmVCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6bGluZVNlbGVjdGlvbkdhcCk6CisgICAg
ICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojp2ZXJ0aWNhbFBvc2l0aW9uRm9yQm94KToKKwog
MjAxMS0wMy0yMiAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAkocmV2aXNpb24gODE2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg0LDcgKzEyODQsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIEludFJlY3QgcmVwYWludFJlY3Q7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKICAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0gSW50UmVjdChyZXBhaW50TG9naWNhbExl
ZnQsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVwYWludExvZ2lj
YWxMZWZ0LCByZXBhaW50TG9naWNhbEJvdHRvbSAtIHJlcGFpbnRMb2dpY2FsVG9wKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgcmVwYWludFJlY3QgPSBJbnRSZWN0KHJlcGFpbnRMb2dpY2Fs
VG9wLCByZXBhaW50TG9naWNhbExlZnQsIHJlcGFpbnRMb2dpY2FsQm90dG9tIC0gcmVwYWludExv
Z2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsUmlnaHQgLSByZXBhaW50TG9naWNhbExlZnQpOwpAQCAt
MTMyMyw3ICsxMzIzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tQ2hpbGRy
ZQogICAgICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwogICAgICAgICBp
ZiAoY29sdW1uQ291bnQoY29sSW5mbykpIHsKICAgICAgICAgICAgIEludFJlY3QgbGFzdFJlY3Qg
PSBjb2x1bW5SZWN0QXQoY29sSW5mbywgY29sdW1uQ291bnQoY29sSW5mbykgLSAxKTsKLSAgICAg
ICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgICAg
ICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICAgICAgICAgIGlu
dCBvdmVyZmxvd0xlZnQgPSAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWlu
KDAsIGxhc3RSZWN0LngoKSkgOiAwOwogICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd1JpZ2h0
ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4KHdpZHRoKCksIGxhc3RS
ZWN0Lm1heFgoKSkgOiAwOwogICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd0hlaWdodCA9IGJv
cmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpICsgY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7
CkBAIC0xMzYwLDcgKzEzNjAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlT3ZlcmZsb3co
aW50IG9sCiAgICAgICAgIC8vIGJlIGNvbnNpZGVyZWQgcmVhY2hhYmxlLgogICAgICAgICBJbnRS
ZWN0IGNsaWVudFJlY3QoY2xpZW50Qm94UmVjdCgpKTsKICAgICAgICAgSW50UmVjdCByZWN0VG9B
cHBseTsKLSAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisg
ICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgcmVjdFRv
QXBwbHkgPSBJbnRSZWN0KGNsaWVudFJlY3QueCgpLCBjbGllbnRSZWN0LnkoKSwgMSwgbWF4KDAs
IG9sZENsaWVudEFmdGVyRWRnZSAtIGNsaWVudFJlY3QueSgpKSk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHJlY3RUb0FwcGx5ID0gSW50UmVjdChjbGllbnRSZWN0LngoKSwgY2xpZW50UmVj
dC55KCksIG1heCgwLCBvbGRDbGllbnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0LngoKSksIDEpOwpA
QCAtMTQxOCw3ICsxNDE4LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6ZXhwYW5kc1RvRW5jbG9zZU92
ZXJoYQogCiB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RQb3NpdGlvbmVkQmxvY2soUmVuZGVyQm94
KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbykKIHsKLSAgICBib29sIGlzSG9y
aXpvbnRhbCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CisgICAgYm9vbCBp
c0hvcml6b250YWwgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgIGJvb2wgaGFzU3Rh
dGljSW5saW5lUG9zaXRpb24gPSBjaGlsZC0+c3R5bGUoKS0+aGFzU3RhdGljSW5saW5lUG9zaXRp
b24oaXNIb3Jpem9udGFsKTsKICAgICBib29sIGhhc1N0YXRpY0Jsb2NrUG9zaXRpb24gPSBjaGls
ZC0+c3R5bGUoKS0+aGFzU3RhdGljQmxvY2tQb3NpdGlvbihpc0hvcml6b250YWwpOwogICAgIFJl
bmRlckxheWVyKiBjaGlsZExheWVyID0gY2hpbGQtPmxheWVyKCk7CkBAIC0xODE0LDcgKzE4MTQs
NyBAQCB2b2lkIFJlbmRlckJsb2NrOjpoYW5kbGVBZnRlclNpZGVPZkJsb2NrCiAKIHZvaWQgUmVu
ZGVyQmxvY2s6OnNldExvZ2ljYWxMZWZ0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50IGxv
Z2ljYWxMZWZ0LCBBcHBseUxheW91dERlbHRhTW9kZSBhcHBseURlbHRhKQogewotICAgIGlmIChz
dHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKGFwcGx5RGVsdGEgPT0gQXBwbHlMYXlvdXRE
ZWx0YSkKICAgICAgICAgICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50U2l6ZShjaGlsZC0+
eCgpIC0gbG9naWNhbExlZnQsIDApKTsKICAgICAgICAgY2hpbGQtPnNldFgobG9naWNhbExlZnQp
OwpAQCAtMTgyNyw3ICsxODI3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0TG9naWNhbExlZnRG
b3JDaGlsZAogCiB2b2lkIFJlbmRlckJsb2NrOjpzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoUmVuZGVy
Qm94KiBjaGlsZCwgaW50IGxvZ2ljYWxUb3AsIEFwcGx5TGF5b3V0RGVsdGFNb2RlIGFwcGx5RGVs
dGEpCiB7Ci0gICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKKyAg
ICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICBpZiAoYXBwbHlEZWx0
YSA9PSBBcHBseUxheW91dERlbHRhKQogICAgICAgICAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0
YShJbnRTaXplKDAsIGNoaWxkLT55KCkgLSBsb2dpY2FsVG9wKSk7CiAgICAgICAgIGNoaWxkLT5z
ZXRZKGxvZ2ljYWxUb3ApOwpAQCAtMjEyNiw3ICsyMTI2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0UG9zaXRpb25lZE9iamVjdAogICAgICAgICAvLyBub24tcG9zaXRpb25lZCBibG9jay4g
IFJhdGhlciB0aGFuIHRyeWluZyB0byBkZXRlY3QgYWxsIG9mIHRoZXNlIG1vdmVtZW50IGNhc2Vz
LCB3ZSBqdXN0IGFsd2F5cyBsYXkgb3V0IHBvc2l0aW9uZWQKICAgICAgICAgLy8gb2JqZWN0cyB0
aGF0IGFyZSBwb3NpdGlvbmVkIGltcGxpY2l0bHkgbGlrZSB0aGlzLiAgU3VjaCBvYmplY3RzIGFy
ZSByYXJlLCBhbmQgc28gaW4gdHlwaWNhbCBESFRNTCBtZW51IHVzYWdlICh3aGVyZSBldmVyeXRo
aW5nIGlzCiAgICAgICAgIC8vIHBvc2l0aW9uZWQgZXhwbGljaXRseSkgdGhpcyBzaG91bGQgbm90
IGluY3VyIGEgcGVyZm9ybWFuY2UgcGVuYWx0eS4KLSAgICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRy
ZW4gfHwgKHItPnN0eWxlKCktPmhhc1N0YXRpY0Jsb2NrUG9zaXRpb24oc3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkgJiYgci0+cGFyZW50KCkgIT0gdGhpcyAmJiByLT5wYXJlbnQo
KS0+aXNCbG9ja0Zsb3coKSkpCisgICAgICAgIGlmIChyZWxheW91dENoaWxkcmVuIHx8IChyLT5z
dHlsZSgpLT5oYXNTdGF0aWNCbG9ja1Bvc2l0aW9uKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
ICYmIHItPnBhcmVudCgpICE9IHRoaXMgJiYgci0+cGFyZW50KCktPmlzQmxvY2tGbG93KCkpKQog
ICAgICAgICAgICAgci0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgLy8gSWYgcmVsYXlvdXRDaGlsZHJlbiBpcyBzZXQgYW5kIHdlIGhhdmUg
cGVyY2VudGFnZSBwYWRkaW5nLCB3ZSBhbHNvIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgY2hpbGQn
cyBwcmVmIHdpZHRocy4KQEAgLTIyNDgsNyArMjI0OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50Q29sdW1uUnVsZXMoUGFpbnQKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291
bnQ7IGkrKykgewogICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5m
bywgaSk7CiAKLSAgICAgICAgaW50IGlubGluZURpcmVjdGlvblNpemUgPSBzdHlsZSgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gY29sUmVjdC53aWR0aCgpIDogY29sUmVjdC5oZWlnaHQo
KTsKKyAgICAgICAgaW50IGlubGluZURpcmVjdGlvblNpemUgPSBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gY29sUmVjdC53aWR0aCgpIDogY29sUmVjdC5oZWlnaHQoKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCiAgICAgICAgIGlmIChzdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKQEAgLTIyNjEsMTAgKzIyNjEsMTAgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWludAogICAgICAgIAogICAgICAgICAv
LyBOb3cgcGFpbnQgdGhlIGNvbHVtbiBydWxlLgogICAgICAgICBpZiAoaSA8IGNvbENvdW50IC0g
MSkgewotICAgICAgICAgICAgaW50IHJ1bGVMZWZ0ID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IHR4ICsgcnVsZUxvZ2ljYWxMZWZ0IC0gcnVsZVdpZHRoIC8gMiArIHJ1bGVB
ZGQgOiB0eCArIGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpOwotICAgICAgICAgICAg
aW50IHJ1bGVSaWdodCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBydWxl
TGVmdCArIHJ1bGVXaWR0aCA6IHJ1bGVMZWZ0ICsgY29udGVudFdpZHRoKCk7Ci0gICAgICAgICAg
ICBpbnQgcnVsZVRvcCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB0eSAr
IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpIDogdHkgKyBydWxlTG9naWNhbExlZnQgLSBydWxl
V2lkdGggLyAyICsgcnVsZUFkZDsKLSAgICAgICAgICAgIGludCBydWxlQm90dG9tID0gc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJ1bGVUb3AgKyBjb250ZW50SGVpZ2h0KCkg
OiBydWxlVG9wICsgcnVsZVdpZHRoOworICAgICAgICAgICAgaW50IHJ1bGVMZWZ0ID0gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IHR4ICsgcnVsZUxvZ2ljYWxMZWZ0IC0gcnVsZVdpZHRoIC8g
MiArIHJ1bGVBZGQgOiB0eCArIGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpOworICAg
ICAgICAgICAgaW50IHJ1bGVSaWdodCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBydWxl
TGVmdCArIHJ1bGVXaWR0aCA6IHJ1bGVMZWZ0ICsgY29udGVudFdpZHRoKCk7CisgICAgICAgICAg
ICBpbnQgcnVsZVRvcCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB0eSArIGJvcmRlclRv
cCgpICsgcGFkZGluZ1RvcCgpIDogdHkgKyBydWxlTG9naWNhbExlZnQgLSBydWxlV2lkdGggLyAy
ICsgcnVsZUFkZDsKKyAgICAgICAgICAgIGludCBydWxlQm90dG9tID0gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IHJ1bGVUb3AgKyBjb250ZW50SGVpZ2h0KCkgOiBydWxlVG9wICsgcnVsZVdp
ZHRoOwogICAgICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKHBhaW50SW5mby5jb250ZXh0LCBy
dWxlTGVmdCwgcnVsZVRvcCwgcnVsZVJpZ2h0LCBydWxlQm90dG9tLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IEJTTGVm
dCA6IEJTUmlnaHQsIHJ1bGVDb2xvciwgcnVsZVN0eWxlLCAwLCAwKTsKICAgICAgICAgfQpAQCAt
MjI4Niw4ICsyMjg2LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5Db250ZW50cyhQ
YQogICAgICAgICAvLyBGb3IgZWFjaCByZWN0LCB3ZSBjbGlwIHRvIHRoZSByZWN0LCBhbmQgdGhl
biB3ZSBhZGp1c3Qgb3VyIGNvb3Jkcy4KICAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1u
UmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUoY29sUmVjdCk7
Ci0gICAgICAgIGludCBsb2dpY2FsTGVmdE9mZnNldCA9IChzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gY29sUmVjdC54KCkgOiBjb2xSZWN0LnkoKSkgLSBsb2dpY2FsTGVmdE9m
ZnNldEZvckNvbnRlbnQoKTsKLSAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBzdHlsZSgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gSW50U2l6ZShsb2dpY2FsTGVmdE9mZnNldCwgY3Vyckxv
Z2ljYWxUb3BPZmZzZXQpIDogSW50U2l6ZShjdXJyTG9naWNhbFRvcE9mZnNldCwgbG9naWNhbExl
ZnRPZmZzZXQpOworICAgICAgICBpbnQgbG9naWNhbExlZnRPZmZzZXQgPSAoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGNvbFJlY3QueCgpIDogY29sUmVjdC55KCkpIC0gbG9naWNhbExlZnRP
ZmZzZXRGb3JDb250ZW50KCk7CisgICAgICAgIEludFNpemUgb2Zmc2V0ID0gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IEludFNpemUobG9naWNhbExlZnRPZmZzZXQsIGN1cnJMb2dpY2FsVG9w
T2Zmc2V0KSA6IEludFNpemUoY3VyckxvZ2ljYWxUb3BPZmZzZXQsIGxvZ2ljYWxMZWZ0T2Zmc2V0
KTsKICAgICAgICAgY29sUmVjdC5tb3ZlKHR4LCB0eSk7CiAgICAgICAgIFBhaW50SW5mbyBpbmZv
KHBhaW50SW5mbyk7CiAgICAgICAgIGluZm8ucmVjdC5pbnRlcnNlY3QoY29sUmVjdCk7CkBAIC0y
MzEwLDcgKzIzMTAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbHVtbkNvbnRlbnRzKFBh
CiAgICAgICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBp
bnQgYmxvY2tEZWx0YSA9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29s
UmVjdC5oZWlnaHQoKSA6IGNvbFJlY3Qud2lkdGgoKSk7CisgICAgICAgIGludCBibG9ja0RlbHRh
ID0gKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjb2xSZWN0LmhlaWdodCgpIDogY29sUmVj
dC53aWR0aCgpKTsKICAgICAgICAgaWYgKHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdN
b2RlKCkpCiAgICAgICAgICAgICBjdXJyTG9naWNhbFRvcE9mZnNldCArPSBibG9ja0RlbHRhOwog
ICAgICAgICBlbHNlCkBAIC0yNDk5LDcgKzI0OTksNyBAQCBJbnRQb2ludCBSZW5kZXJCbG9jazo6
ZmxpcEZsb2F0Rm9yV3JpdGluCiAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBQYXJlbnRU
b0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50IGluIFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2Rl
LiAgV2UgaGF2ZSB0byBzdWJ0cmFjdCBvdXQgb3VyIGxlZnQvdG9wIG9mZnNldHMgdHdpY2UsIHNp
bmNlCiAgICAgLy8gaXQncyBnb2luZyB0byBnZXQgYWRkZWQgYmFjayBpbi4gIFdlIGhpZGUgdGhp
cyBjb21wbGljYXRpb24gaGVyZSBzbyB0aGF0IHRoZSBjYWxsaW5nIGNvZGUgbG9va3Mgbm9ybWFs
IGZvciB0aGUgdW5mbGlwcGVkCiAgICAgLy8gY2FzZS4KLSAgICBpZiAoc3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkKKyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
ICAgICAgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpICsgaGVpZ2h0KCkg
LSBjaGlsZC0+cmVuZGVyZXIoKS0+aGVpZ2h0KCkgLSAyICogeVBvc2l0aW9uRm9yRmxvYXRJbmNs
dWRpbmdNYXJnaW4oY2hpbGQpKTsKICAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpICsgd2lk
dGgoKSAtIGNoaWxkLT53aWR0aCgpIC0gMiAqIHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFy
Z2luKGNoaWxkKSwgcG9pbnQueSgpKTsKIH0KQEAgLTI3MjcsMTggKzI3MjcsMTggQEAgc3RhdGlj
IHZvaWQgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKGNvbgogCiBzdGF0aWMgaW50IGJsb2NrRGly
ZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFNpemUmIG9mZnNl
dEZyb21Sb290QmxvY2spCiB7Ci0gICAgcmV0dXJuIHJvb3RCbG9jay0+c3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgOiBvZmZz
ZXRGcm9tUm9vdEJsb2NrLndpZHRoKCk7CisgICAgcmV0dXJuIHJvb3RCbG9jay0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgOiBvZmZzZXRG
cm9tUm9vdEJsb2NrLndpZHRoKCk7CiB9CiAKIHN0YXRpYyBpbnQgaW5saW5lRGlyZWN0aW9uT2Zm
c2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290
QmxvY2spCiB7Ci0gICAgcmV0dXJuIHJvb3RCbG9jay0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSA6IG9mZnNldEZyb21Sb290
QmxvY2suaGVpZ2h0KCk7CisgICAgcmV0dXJuIHJvb3RCbG9jay0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSA6IG9mZnNldEZyb21Sb290Qmxv
Y2suaGVpZ2h0KCk7CiB9CiAKIEludFJlY3QgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSZWN0VG9QaHlz
aWNhbFJlY3QoY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0
IEludFJlY3QmIGxvZ2ljYWxSZWN0KQogewogICAgIEludFJlY3QgcmVzdWx0OwotICAgIGlmIChz
dHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgIGlmIChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQogICAgICAgICByZXN1bHQgPSBsb2dpY2FsUmVjdDsKICAgICBlbHNlCiAg
ICAgICAgIHJlc3VsdCA9IEludFJlY3QobG9naWNhbFJlY3QueSgpLCBsb2dpY2FsUmVjdC54KCks
IGxvZ2ljYWxSZWN0LmhlaWdodCgpLCBsb2dpY2FsUmVjdC53aWR0aCgpKTsKQEAgLTI4MzUsMTAg
KzI4MzUsMTAgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmlubGluZVNlbGVjdGlvbkdhcAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbFRvcCwgcGFp
bnRJbmZvKSk7CiAgICAgICAgIAogICAgICAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0KGN1cnItPmxv
Z2ljYWxMZWZ0KCksIHNlbFRvcCwgY3Vyci0+bG9naWNhbFdpZHRoKCksIHNlbFRvcCArIHNlbEhl
aWdodCk7Ci0gICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmUoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sgOiBJbnRTaXplKG9mZnNldEZyb21Sb290
QmxvY2suaGVpZ2h0KCksIG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSkpOworICAgICAgICBs
b2dpY2FsUmVjdC5tb3ZlKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBvZmZzZXRGcm9tUm9v
dEJsb2NrIDogSW50U2l6ZShvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpLCBvZmZzZXRGcm9t
Um9vdEJsb2NrLndpZHRoKCkpKTsKICAgICAgICAgSW50UmVjdCBwaHlzaWNhbFJlY3QgPSByb290
QmxvY2stPmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlv
biwgbG9naWNhbFJlY3QpOwotICAgICAgICBpZiAoIXBhaW50SW5mbyB8fCAoc3R5bGUoKS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBwaHlzaWNhbFJlY3QueSgpIDwgcGFpbnRJbmZvLT5y
ZWN0Lm1heFkoKSAmJiBwaHlzaWNhbFJlY3QubWF4WSgpID4gcGFpbnRJbmZvLT5yZWN0LnkoKSkK
LSAgICAgICAgICAgIHx8ICghc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBw
aHlzaWNhbFJlY3QueCgpIDwgcGFpbnRJbmZvLT5yZWN0Lm1heFgoKSAmJiBwaHlzaWNhbFJlY3Qu
bWF4WCgpID4gcGFpbnRJbmZvLT5yZWN0LngoKSkpCisgICAgICAgIGlmICghcGFpbnRJbmZvIHx8
IChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVjdC55KCkgPCBwYWludElu
Zm8tPnJlY3QubWF4WSgpICYmIHBoeXNpY2FsUmVjdC5tYXhZKCkgPiBwYWludEluZm8tPnJlY3Qu
eSgpKQorICAgICAgICAgICAgfHwgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHBoeXNp
Y2FsUmVjdC54KCkgPCBwYWludEluZm8tPnJlY3QubWF4WCgpICYmIHBoeXNpY2FsUmVjdC5tYXhY
KCkgPiBwYWludEluZm8tPnJlY3QueCgpKSkKICAgICAgICAgICAgIHJlc3VsdC51bml0ZShjdXJy
LT5saW5lU2VsZWN0aW9uR2FwKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwg
b2Zmc2V0RnJvbVJvb3RCbG9jaywgc2VsVG9wLCBzZWxIZWlnaHQsIHBhaW50SW5mbykpOwogCiAg
ICAgICAgIGxhc3RTZWxlY3RlZExpbmUgPSBjdXJyOwpAQCAtMzY2NSw4ICszNjY1LDggQEAgaW50
IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZQogICAgICAgICBpZiAobG9naWNh
bEJvdHRvbSA+IGxvZ2ljYWxIZWlnaHQoKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVj
dCBpcyBub3QgaW4gdGhlIGxpc3QsIHdlIGFkZCBpdCBub3cuCiAgICAgICAgICAgICBpZiAoIWNv
bnRhaW5zRmxvYXQoci0+bV9yZW5kZXJlcikpIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVmdE9m
ZnNldCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2dpY2FsTGVmdE9m
ZnNldCA6IGxvZ2ljYWxUb3BPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50IHRvcE9mZnNldCA9
IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2dpY2FsVG9wT2Zmc2V0IDog
bG9naWNhbExlZnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgaW50IGxlZnRPZmZzZXQgPSBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gbG9naWNhbExlZnRPZmZzZXQgOiBsb2dpY2FsVG9wT2Zm
c2V0OworICAgICAgICAgICAgICAgIGludCB0b3BPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gbG9naWNhbFRvcE9mZnNldCA6IGxvZ2ljYWxMZWZ0T2Zmc2V0OwogICAgICAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iaiA9IG5ldyBGbG9hdGluZ09iamVjdChy
LT50eXBlKCksIEludFJlY3Qoci0+eCgpIC0gbGVmdE9mZnNldCwgci0+eSgpIC0gdG9wT2Zmc2V0
LCByLT53aWR0aCgpLCByLT5oZWlnaHQoKSkpOwogICAgICAgICAgICAgICAgIGZsb2F0aW5nT2Jq
LT5tX3JlbmRlcmVyID0gci0+bV9yZW5kZXJlcjsKIApAQCAtMzcxNCw3ICszNzE0LDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKFJlbgogICAgIGlmICghcHJldi0+bV9m
bG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0
ICs9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbWFyZ2luTGVmdCgpIDog
bWFyZ2luVG9wKCkpOworICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ICs9IChpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gbWFyZ2luTGVmdCgpIDogbWFyZ2luVG9wKCkpOwogCiAgICAgRmxvYXRpbmdP
YmplY3RTZXQmIHByZXZTZXQgPSBwcmV2LT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2RW5kID0gcHJldlNldC5lbmQoKTsKQEAgLTM3
MjIsOCArMzcyMiw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyhSZW4K
ICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqcHJldkl0OwogICAgICAgICBpZiAobG9naWNh
bEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcE9mZnNldCkgewogICAgICAgICAgICAgaWYg
KCFtX2Zsb2F0aW5nT2JqZWN0cyB8fCAhbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmNvbnRhaW5z
KHIpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGxlZnRPZmZzZXQgPSBzdHlsZSgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gbG9naWNhbExlZnRPZmZzZXQgOiBsb2dpY2FsVG9wT2Zmc2V0
OwotICAgICAgICAgICAgICAgIGludCB0b3BPZmZzZXQgPSBzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gbG9naWNhbFRvcE9mZnNldCA6IGxvZ2ljYWxMZWZ0T2Zmc2V0OworICAg
ICAgICAgICAgICAgIGludCBsZWZ0T2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGxvZ2ljYWxMZWZ0T2Zmc2V0IDogbG9naWNhbFRvcE9mZnNldDsKKyAgICAgICAgICAgICAgICBp
bnQgdG9wT2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvZ2ljYWxUb3BPZmZz
ZXQgOiBsb2dpY2FsTGVmdE9mZnNldDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmogPSBuZXcgRmxvYXRpbmdPYmplY3Qoci0+dHlw
ZSgpLCBJbnRSZWN0KHItPngoKSAtIGxlZnRPZmZzZXQsIHItPnkoKSAtIHRvcE9mZnNldCwgci0+
d2lkdGgoKSwgci0+aGVpZ2h0KCkpKTsKIApAQCAtMzczMyw3ICszNzMzLDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKFJlbgogICAgICAgICAgICAgICAgIC8vIGludG8g
YWNjb3VudC4gIE9ubHkgYXBwbHkgdGhpcyBjb2RlIGlmIHByZXYgaXMgdGhlIHBhcmVudCwgc2lu
Y2Ugb3RoZXJ3aXNlIHRoZSBsZWZ0IG1hcmdpbgogICAgICAgICAgICAgICAgIC8vIHdpbGwgZ2V0
IGFwcGxpZWQgdHdpY2UuCiAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT0gcGFyZW50KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRpbmdPYmotPnNldFgoZmxvYXRpbmdPYmotPngo
KSArIHByZXYtPm1hcmdpbkxlZnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqLT5zZXRZKGZsb2F0aW5nT2JqLT55KCkgKyBw
cmV2LT5tYXJnaW5Ub3AoKSk7CkBAIC0zOTQ3LDcgKzM5NDcsNyBAQCBib29sIFJlbmRlckJsb2Nr
OjpoaXRUZXN0Q29sdW1ucyhjb25zdCBICiAgICAgaW50IGxvZ2ljYWxMZWZ0ID0gbG9naWNhbExl
ZnRPZmZzZXRGb3JDb250ZW50KCk7CiAgICAgaW50IGN1cnJMb2dpY2FsVG9wT2Zmc2V0ID0gMDsK
ICAgICBpbnQgaTsKLSAgICBib29sIGlzSG9yaXpvbnRhbCA9IHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCk7CisgICAgYm9vbCBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7CiAgICAgICAg
IEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaW50
IGJsb2NrRGVsdGEgPSAgKGlzSG9yaXpvbnRhbCA/IGNvbFJlY3QuaGVpZ2h0KCkgOiBjb2xSZWN0
LndpZHRoKCkpOwpAQCAtNDA0NSw3ICs0MDQ1LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbkZvclBvaW50UgogCiAgICAgLy8gT3RoZXJ3aXNlIHJldHVybiBiZWZvcmUgb3IgYWZ0
ZXIgdGhlIGNoaWxkLCBkZXBlbmRpbmcgb24gaWYgdGhlIGNsaWNrIHdhcyB0byB0aGUgbG9naWNh
bCBsZWZ0IG9yIGxvZ2ljYWwgcmlnaHQgb2YgdGhlIGNoaWxkCiAgICAgaW50IGNoaWxkTWlkZGxl
ID0gcGFyZW50LT5sb2dpY2FsV2lkdGhGb3JDaGlsZChjaGlsZCkgLyAyOwotICAgIGludCBsb2dp
Y2FsTGVmdCA9IHBhcmVudC0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBv
aW50SW5DaGlsZENvb3JkaW5hdGVzLngoKSA6IHBvaW50SW5DaGlsZENvb3JkaW5hdGVzLnkoKTsK
KyAgICBpbnQgbG9naWNhbExlZnQgPSBwYXJlbnQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBwb2ludEluQ2hpbGRDb29yZGluYXRlcy54KCkgOiBwb2ludEluQ2hpbGRDb29yZGluYXRlcy55
KCk7CiAgICAgaWYgKGxvZ2ljYWxMZWZ0IDwgY2hpbGRNaWRkbGUpCiAgICAgICAgIHJldHVybiBh
bmNlc3Rvci0+Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKGNoaWxkTm9kZS0+bm9kZUluZGV4KCksIERP
V05TVFJFQU0pOwogICAgIHJldHVybiBhbmNlc3Rvci0+Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKGNo
aWxkTm9kZS0+bm9kZUluZGV4KCkgKyAxLCBVUFNUUkVBTSk7CkBAIC00MDkyLDcgKzQwOTIsNyBA
QCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yCiAKICAgICAgICAgLy8g
cGFzcyB0aGUgYm94IGEgdG9wIHBvc2l0aW9uIHRoYXQgaXMgaW5zaWRlIGl0CiAgICAgICAgIElu
dFBvaW50IHBvaW50KHBvaW50SW5Mb2dpY2FsQ29udGVudHMueCgpLCBjbG9zZXN0Qm94LT5sb2dp
Y2FsVG9wKCkpOwotICAgICAgICBpZiAoIXN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCisgICAgICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAg
IHBvaW50ID0gcG9pbnQudHJhbnNwb3NlZFBvaW50KCk7CiAgICAgICAgIGlmIChjbG9zZXN0Qm94
LT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkpCiAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25G
b3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcyh0aGlzLCB0b1JlbmRlckJveChjbG9z
ZXN0Qm94LT5yZW5kZXJlcigpKSwgcG9pbnQpOwpAQCAtNDEyMyw4ICs0MTIzLDggQEAgVmlzaWJs
ZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvcgogCiAgICAgaWYgKGlzUmVwbGFjZWQo
KSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyB3cm9uZyB3aGVuIHRoZSBvYmplY3Qn
cyB3cml0aW5nLW1vZGUgZG9lc24ndCBtYXRjaCB0aGUgbGluZSdzIHdyaXRpbmctbW9kZS4KLSAg
ICAgICAgaW50IHBvaW50TG9naWNhbExlZnQgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gcG9pbnQueCgpIDogcG9pbnQueSgpOwotICAgICAgICBpbnQgcG9pbnRMb2dpY2Fs
VG9wID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50LnkoKSA6IHBv
aW50LngoKTsKKyAgICAgICAgaW50IHBvaW50TG9naWNhbExlZnQgPSBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gcG9pbnQueCgpIDogcG9pbnQueSgpOworICAgICAgICBpbnQgcG9pbnRMb2dp
Y2FsVG9wID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50LnkoKSA6IHBvaW50Lngo
KTsKIAogICAgICAgICBpZiAocG9pbnRMb2dpY2FsVG9wIDwgMCB8fCAocG9pbnRMb2dpY2FsVG9w
IDwgbG9naWNhbEhlaWdodCgpICYmIHBvaW50TG9naWNhbExlZnQgPCAwKSkKICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oY2FyZXRNaW5PZmZzZXQoKSwgRE9XTlNUUkVB
TSk7CkBAIC00MTM3LDcgKzQxMzcsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBv
c2l0aW9uRm9yCiAgICAgb2Zmc2V0Rm9yQ29udGVudHMoY29udGVudHNYLCBjb250ZW50c1kpOwog
ICAgIEludFBvaW50IHBvaW50SW5Db250ZW50cyhjb250ZW50c1gsIGNvbnRlbnRzWSk7CiAgICAg
SW50UG9pbnQgcG9pbnRJbkxvZ2ljYWxDb250ZW50cyhwb2ludEluQ29udGVudHMpOwotICAgIGlm
ICghc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICBpZiAoIWlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHBvaW50SW5Mb2dpY2FsQ29udGVudHMgPSBwb2lu
dEluTG9naWNhbENvbnRlbnRzLnRyYW5zcG9zZWRQb2ludCgpOwogCiAgICAgaWYgKGNoaWxkcmVu
SW5saW5lKCkpCkBAIC00MzA1LDcgKzQzMDUsNyBAQCBJbnRSZWN0IFJlbmRlckJsb2NrOjpjb2x1
bW5SZWN0QXQoQ29sdW1uCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yQ29udGVudCgpICsgKGluZGV4ICogKGNvbExvZ2ljYWxXaWR0aCArIGNvbEdhcCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICA6IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpICsg
Y29udGVudExvZ2ljYWxXaWR0aCgpIC0gY29sTG9naWNhbFdpZHRoIC0gKGluZGV4ICogKGNvbExv
Z2ljYWxXaWR0aCArIGNvbEdhcCkpOwogICAgIEludFJlY3QgcmVjdChjb2xMb2dpY2FsTGVmdCwg
Y29sTG9naWNhbFRvcCwgY29sTG9naWNhbFdpZHRoLCBjb2xMb2dpY2FsSGVpZ2h0KTsKLSAgICBp
ZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICBpZiAoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoY29sTG9naWNhbExlZnQs
IGNvbExvZ2ljYWxUb3AsIGNvbExvZ2ljYWxXaWR0aCwgY29sTG9naWNhbEhlaWdodCk7CiAgICAg
cmV0dXJuIEludFJlY3QoY29sTG9naWNhbFRvcCwgY29sTG9naWNhbExlZnQsIGNvbExvZ2ljYWxI
ZWlnaHQsIGNvbExvZ2ljYWxXaWR0aCk7CiB9CkBAIC00MzcyLDcgKzQzNzIsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjphZGp1c3RQb2ludFRvQ29sdW1uQ29uCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7IGkrKykgewogICAgICAgICAvLyBBZGQgaW4g
aGFsZiB0aGUgY29sdW1uIGdhcCB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIHJlY3QuCiAg
ICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKLSAgICAg
ICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgaWYg
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgICAgIEludFJlY3QgZ2FwQW5k
Q29sdW1uUmVjdChjb2xSZWN0LngoKSAtIGhhbGZDb2xHYXAsIGNvbFJlY3QueSgpLCBjb2xSZWN0
LndpZHRoKCkgKyBjb2xHYXAsIGNvbFJlY3QuaGVpZ2h0KCkpOwogICAgICAgICAgICAgaWYgKHBv
aW50LngoKSA+PSBnYXBBbmRDb2x1bW5SZWN0LngoKSAmJiBwb2ludC54KCkgPCBnYXBBbmRDb2x1
bW5SZWN0Lm1heFgoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgY2xhbXBpbmcg
dGhhdCBmb2xsb3dzIGlzIG5vdCBjb21wbGV0ZWx5IHJpZ2h0IGZvciByaWdodC10by1sZWZ0CkBA
IC00NDQyLDcgKzQ0NDIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1u
cyhJCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKICAgICAg
ICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBJ
bnRSZWN0IHJlcGFpbnRSZWN0ID0gcjsKLSAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
IHsKICAgICAgICAgICAgIGludCBjdXJyWE9mZnNldCA9IGNvbFJlY3QueCgpIC0gbG9naWNhbExl
ZnQ7CiAgICAgICAgICAgICByZXBhaW50UmVjdC5tb3ZlKGN1cnJYT2Zmc2V0LCBjdXJyTG9naWNh
bE9mZnNldCk7CiAgICAgICAgICAgICBjdXJyTG9naWNhbE9mZnNldCAtPSBjb2xSZWN0LmhlaWdo
dCgpOwpAQCAtNDQ2Niw3ICs0NDY2LDcgQEAgSW50UG9pbnQgUmVuZGVyQmxvY2s6OmZsaXBGb3JX
cml0aW5nTW9kZQogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7CiAgICAg
aW50IGNvbHVtbkxvZ2ljYWxIZWlnaHQgPSBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKICAgICBp
bnQgZXhwYW5kZWRMb2dpY2FsSGVpZ2h0ID0gYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3Jl
KCkgKyBjb2x1bW5Db3VudChjb2xJbmZvKSAqIGNvbHVtbkxvZ2ljYWxIZWlnaHQgKyBib3JkZXJB
ZnRlcigpICsgcGFkZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7Ci0gICAg
aWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgaWYgKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCksIGV4
cGFuZGVkTG9naWNhbEhlaWdodCAtIHBvaW50LnkoKSk7CiAgICAgcmV0dXJuIEludFBvaW50KGV4
cGFuZGVkTG9naWNhbEhlaWdodCAtIHBvaW50LngoKSwgcG9pbnQueSgpKTsKIH0KQEAgLTQ0ODAs
NyArNDQ4MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmZsaXBGb3JXcml0aW5nTW9kZUluY2wKICAg
ICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwogICAgIGludCBjb2x1bW5Mb2dp
Y2FsSGVpZ2h0ID0gY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7CiAgICAgaW50IGV4cGFuZGVkTG9n
aWNhbEhlaWdodCA9IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpICsgY29sdW1uQ291
bnQoY29sSW5mbykgKiBjb2x1bW5Mb2dpY2FsSGVpZ2h0ICsgYm9yZGVyQWZ0ZXIoKSArIHBhZGRp
bmdBZnRlcigpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwotICAgIGlmIChzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKQogICAgICAgICByZWN0LnNldFkoZXhwYW5kZWRMb2dpY2FsSGVpZ2h0IC0gcmVjdC5tYXhZ
KCkpOwogICAgIGVsc2UKICAgICAgICAgcmVjdC5zZXRYKGV4cGFuZGVkTG9naWNhbEhlaWdodCAt
IHJlY3QubWF4WCgpKTsKQEAgLTQ1MDEsNyArNDUwMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFk
anVzdEZvckNvbHVtbnMoSW50U2kKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbENvdW50
OyArK2kpIHsKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgZWRnZXMgZm9yIGEgZ2l2ZW4gY29sdW1u
IGluIHRoZSBibG9jayBwcm9ncmVzc2lvbiBkaXJlY3Rpb24uCiAgICAgICAgIEludFJlY3Qgc2xp
Y2VSZWN0ID0gSW50UmVjdChsb2dpY2FsTGVmdCwgYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVm
b3JlKCkgKyBpICogY29sTG9naWNhbEhlaWdodCwgY29sTG9naWNhbFdpZHRoLCBjb2xMb2dpY2Fs
SGVpZ2h0KTsKLSAgICAgICAgaWYgKCFzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KQorICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBz
bGljZVJlY3QgPSBzbGljZVJlY3QudHJhbnNwb3NlZFJlY3QoKTsKICAgICAgICAgCiAgICAgICAg
IC8vIElmIHdlIGhhdmUgYSBmbGlwcGVkIGJsb2NrcyB3cml0aW5nIG1vZGUsIHRoZW4gY29udmVy
dCB0aGUgY29sdW1uIHNvIHRoYXQgaXQncyBjb21pbmcgZnJvbSB0aGUgYWZ0ZXIgZWRnZSAoZWl0
aGVyIHRvcCBvciBsZWZ0IGVkZ2UpLgpAQCAtNDUxMCw3ICs0NTEwLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWRqdXN0Rm9yQ29sdW1ucyhJbnRTaQogICAgICAgICBpbnQgbG9naWNhbE9mZnNldCA9
IHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyAoY29sQ291bnQgLSAxIC0g
aSkgKiBjb2xMb2dpY2FsSGVpZ2h0IDogaSAqIGNvbExvZ2ljYWxIZWlnaHQ7CiAKICAgICAgICAg
Ly8gTm93IHdlJ3JlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UgYXMgdGhlIHBvaW50LiAg
U2VlIGlmIGl0IGlzIGluc2lkZSB0aGUgcmVjdGFuZ2xlLgotICAgICAgICBpZiAoc3R5bGUoKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgeworICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkgewogICAgICAgICAgICAgaWYgKHBvaW50LnkoKSA+PSBzbGljZVJlY3QueSgp
ICYmIHBvaW50LnkoKSA8IHNsaWNlUmVjdC5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICBvZmZz
ZXQuZXhwYW5kKGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKS54KCkgLSBsb2dpY2FsTGVmdCwgLWxv
Z2ljYWxPZmZzZXQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTUxNjEsNyArNTE2MSw3
IEBAIGludCBSZW5kZXJCbG9jazo6bGFzdExpbmVCb3hCYXNlbGluZSgpIGMKICAgICBpZiAoIWlz
QmxvY2tGbG93KCkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKSkKICAg
ICAgICAgcmV0dXJuIC0xOwogCi0gICAgTGluZURpcmVjdGlvbk1vZGUgbGluZURpcmVjdGlvbiA9
IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFsTGluZSA6IFZl
cnRpY2FsTGluZTsKKyAgICBMaW5lRGlyZWN0aW9uTW9kZSBsaW5lRGlyZWN0aW9uID0gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lOwogCiAg
ICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgaWYgKCFmaXJzdExpbmVCb3goKSAm
JiBoYXNMaW5lSWZFbXB0eSgpKSB7CkBAIC01OTE3LDcgKzU5MTcsNyBAQCBpbnQgUmVuZGVyQmxv
Y2s6Om5leHRQYWdlTG9naWNhbFRvcChpbnQgCiAgICAgLy8gVGhlIGxvZ2ljYWxPZmZzZXQgaXMg
aW4gb3VyIGNvb3JkaW5hdGUgc3BhY2UuICBXZSBjYW4gYWRkIGluIG91ciBwdXNoZWQgb2Zmc2V0
LgogICAgIGludCBwYWdlTG9naWNhbEhlaWdodCA9IGxheW91dFN0YXRlLT5tX3BhZ2VMb2dpY2Fs
SGVpZ2h0OwogICAgIEludFNpemUgZGVsdGEgPSBsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQg
LSBsYXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0OwotICAgIGludCBvZmZzZXQgPSBzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZGVsdGEuaGVpZ2h0KCkgOiBkZWx0YS53aWR0aCgp
OworICAgIGludCBvZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZGVsdGEuaGVp
Z2h0KCkgOiBkZWx0YS53aWR0aCgpOwogICAgIGludCByZW1haW5pbmdMb2dpY2FsSGVpZ2h0ID0g
KHBhZ2VMb2dpY2FsSGVpZ2h0IC0gKG9mZnNldCArIGxvZ2ljYWxPZmZzZXQpICUgcGFnZUxvZ2lj
YWxIZWlnaHQpICUgcGFnZUxvZ2ljYWxIZWlnaHQ7CiAgICAgcmV0dXJuIGxvZ2ljYWxPZmZzZXQg
KyByZW1haW5pbmdMb2dpY2FsSGVpZ2h0OwogfQpAQCAtNTk3OCw3ICs1OTc4LDcgQEAgaW50IFJl
bmRlckJsb2NrOjphZGp1c3RGb3JVbnNwbGl0dGFibGVDaAogICAgIGlmICghcGFnZUxvZ2ljYWxI
ZWlnaHQgfHwgY2hpbGRMb2dpY2FsSGVpZ2h0ID4gcGFnZUxvZ2ljYWxIZWlnaHQpCiAgICAgICAg
IHJldHVybiBsb2dpY2FsT2Zmc2V0OwogICAgIEludFNpemUgZGVsdGEgPSBsYXlvdXRTdGF0ZS0+
bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0OwotICAgIGludCBvZmZz
ZXQgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZGVsdGEuaGVpZ2h0KCkg
OiBkZWx0YS53aWR0aCgpOworICAgIGludCBvZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gZGVsdGEuaGVpZ2h0KCkgOiBkZWx0YS53aWR0aCgpOwogICAgIGludCByZW1haW5pbmdM
b2dpY2FsSGVpZ2h0ID0gKHBhZ2VMb2dpY2FsSGVpZ2h0IC0gKG9mZnNldCArIGxvZ2ljYWxPZmZz
ZXQpICUgcGFnZUxvZ2ljYWxIZWlnaHQpICUgcGFnZUxvZ2ljYWxIZWlnaHQ7CiAgICAgaWYgKHJl
bWFpbmluZ0xvZ2ljYWxIZWlnaHQgPCBjaGlsZExvZ2ljYWxIZWlnaHQpCiAgICAgICAgIHJldHVy
biBsb2dpY2FsT2Zmc2V0ICsgcmVtYWluaW5nTG9naWNhbEhlaWdodDsKQEAgLTYwMTQsNyArNjAx
NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdExpbmVQb3NpdGlvbkZvclAKICAgICBpZiAo
IXBhZ2VMb2dpY2FsSGVpZ2h0IHx8IGxpbmVIZWlnaHQgPiBwYWdlTG9naWNhbEhlaWdodCkKICAg
ICAgICAgcmV0dXJuOwogICAgIEludFNpemUgb2Zmc2V0RGVsdGEgPSBsYXlvdXRTdGF0ZS0+bV9s
YXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0OwotICAgIGludCBvZmZzZXQg
PSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gb2Zmc2V0RGVsdGEuaGVpZ2h0
KCkgOiBvZmZzZXREZWx0YS53aWR0aCgpOworICAgIGludCBvZmZzZXQgPSBpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gb2Zmc2V0RGVsdGEuaGVpZ2h0KCkgOiBvZmZzZXREZWx0YS53aWR0aCgp
OwogICAgIGludCByZW1haW5pbmdMb2dpY2FsSGVpZ2h0ID0gcGFnZUxvZ2ljYWxIZWlnaHQgLSAo
b2Zmc2V0ICsgbG9naWNhbE9mZnNldCkgJSBwYWdlTG9naWNhbEhlaWdodDsKICAgICBpZiAocmVt
YWluaW5nTG9naWNhbEhlaWdodCA8IGxpbmVIZWlnaHQpIHsKICAgICAgICAgaW50IHRvdGFsTG9n
aWNhbEhlaWdodCA9IGxpbmVIZWlnaHQgKyBtYXgoMCwgbG9naWNhbE9mZnNldCk7CkBAIC02MDM2
LDcgKzYwMzYsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlZE1hcmdpbkJlZm9yZUZvCiAg
ICAgCiAgICAgLy8gVGhlIGNoaWxkIGhhcyBhIGRpZmZlcmVudCBkaXJlY3Rpb25hbGl0eS4gIElm
IHRoZSBjaGlsZCBpcyBwYXJhbGxlbCwgdGhlbiBpdCdzIGp1c3QKICAgICAvLyBmbGlwcGVkIHJl
bGF0aXZlIHRvIHVzLiAgV2UgY2FuIHVzZSB0aGUgY29sbGFwc2VkIG1hcmdpbiBmb3IgdGhlIG9w
cG9zaXRlIGVkZ2UuCi0gICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID09IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgaWYgKGNo
aWxkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCiAgICAgICAgIHJldHVybiBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQWZ0ZXIoKTsKICAgICAK
ICAgICAvLyBUaGUgY2hpbGQgaXMgcGVycGVuZGljdWxhciB0byB1cywgd2hpY2ggbWVhbnMgaXRz
IG1hcmdpbnMgZG9uJ3QgY29sbGFwc2UgYnV0IGFyZSBvbiB0aGUKQEAgLTYwNTMsNyArNjA1Myw3
IEBAIGludCBSZW5kZXJCbG9jazo6Y29sbGFwc2VkTWFyZ2luQWZ0ZXJGb3IKICAgICAKICAgICAv
LyBUaGUgY2hpbGQgaGFzIGEgZGlmZmVyZW50IGRpcmVjdGlvbmFsaXR5LiAgSWYgdGhlIGNoaWxk
IGlzIHBhcmFsbGVsLCB0aGVuIGl0J3MganVzdAogICAgIC8vIGZsaXBwZWQgcmVsYXRpdmUgdG8g
dXMuICBXZSBjYW4gdXNlIHRoZSBjb2xsYXBzZWQgbWFyZ2luIGZvciB0aGUgb3Bwb3NpdGUgZWRn
ZS4KLSAgICBpZiAoY2hpbGQtPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0g
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICBpZiAoY2hpbGQtPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAg
ICAgcmV0dXJuIGNoaWxkLT5jb2xsYXBzZWRNYXJnaW5CZWZvcmUoKTsKICAgICAKICAgICAvLyBU
aGUgY2hpbGQgaXMgcGVycGVuZGljdWxhciB0byB1cywgd2hpY2ggbWVhbnMgaXRzIG1hcmdpbnMg
ZG9uJ3QgY29sbGFwc2UgYnV0IGFyZSBvbiB0aGUKQEAgLTYwOTUsMjEgKzYwOTUsMjEgQEAgaW50
IFJlbmRlckJsb2NrOjptYXJnaW5BZnRlckZvckNoaWxkKFJlbgogICAgIAogaW50IFJlbmRlckJs
b2NrOjptYXJnaW5TdGFydEZvckNoaWxkKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjaGlsZCkgY29u
c3QKIHsKLSAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICBp
ZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHN0eWxlKCktPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNoaWxkLT5tYXJnaW5MZWZ0KCkgOiBjaGlsZC0+bWFy
Z2luUmlnaHQoKTsKICAgICByZXR1cm4gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gY2hpbGQtPm1hcmdpblRvcCgpIDogY2hpbGQtPm1hcmdpbkJvdHRvbSgpOwogfQogCiBpbnQg
UmVuZGVyQmxvY2s6Om1hcmdpbkVuZEZvckNoaWxkKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjaGls
ZCkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
KyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNoaWxkLT5tYXJnaW5SaWdodCgpIDogY2hp
bGQtPm1hcmdpbkxlZnQoKTsKICAgICByZXR1cm4gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gY2hpbGQtPm1hcmdpbkJvdHRvbSgpIDogY2hpbGQtPm1hcmdpblRvcCgpOwogfQog
CiB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXJnaW5TdGFydEZvckNoaWxkKFJlbmRlckJveCogY2hp
bGQsIGludCBtYXJnaW4pCiB7Ci0gICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpIHsKKyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICBp
ZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAgICAgY2hpbGQt
PnNldE1hcmdpbkxlZnQobWFyZ2luKTsKICAgICAgICAgZWxzZQpAQCAtNjEyNCw3ICs2MTI0LDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0TWFyZ2luU3RhcnRGb3JDaGlsZAogCiB2b2lkIFJlbmRl
ckJsb2NrOjpzZXRNYXJnaW5FbmRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbWFyZ2lu
KQogewotICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAg
aWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKHN0eWxlKCktPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIGNoaWxkLT5zZXRNYXJnaW5SaWdo
dChtYXJnaW4pOwogICAgICAgICBlbHNlCkBAIC02MTk3LDcgKzYxOTcsNyBAQCBSZW5kZXJCbG9j
azo6TWFyZ2luVmFsdWVzIFJlbmRlckJsb2NrOjptCiAgICAgICAgICAgICBiZWZvcmVNYXJnaW4g
PSBjaGlsZC0+bWFyZ2luQmVmb3JlKCk7CiAgICAgICAgICAgICBhZnRlck1hcmdpbiA9IGNoaWxk
LT5tYXJnaW5BZnRlcigpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChjaGlsZC0+c3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKSB7CisgICAgfSBlbHNlIGlmIChjaGlsZC0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA9PSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIC8vIFRoZSBjaGls
ZCBoYXMgYSBkaWZmZXJlbnQgZGlyZWN0aW9uYWxpdHkuICBJZiB0aGUgY2hpbGQgaXMgcGFyYWxs
ZWwsIHRoZW4gaXQncyBqdXN0CiAgICAgICAgIC8vIGZsaXBwZWQgcmVsYXRpdmUgdG8gdXMuICBX
ZSBjYW4gdXNlIHRoZSBtYXJnaW5zIGZvciB0aGUgb3Bwb3NpdGUgZWRnZXMuCiAgICAgICAgIGlm
IChjaGlsZFJlbmRlckJsb2NrKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAkocmV2aXNpb24gODE2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDkgKzE3MSw5IEBAIHB1YmxpYzoKIAog
ICAgIC8vIEFjY2Vzc29ycyBmb3IgbG9naWNhbCB3aWR0aC9oZWlnaHQgYW5kIG1hcmdpbnMgaW4g
dGhlIGNvbnRhaW5pbmcgYmxvY2sncyBibG9jay1mbG93IGRpcmVjdGlvbi4KICAgICBlbnVtIEFw
cGx5TGF5b3V0RGVsdGFNb2RlIHsgQXBwbHlMYXlvdXREZWx0YSwgRG9Ob3RBcHBseUxheW91dERl
bHRhIH07Ci0gICAgaW50IGxvZ2ljYWxXaWR0aEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsg
cmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgo
KSA6IGNoaWxkLT5oZWlnaHQoKTsgfQotICAgIGludCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoUmVu
ZGVyQm94KiBjaGlsZCkgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSA/IGNoaWxkLT5oZWlnaHQoKSA6IGNoaWxkLT53aWR0aCgpOyB9Ci0gICAgaW50IGxvZ2ljYWxU
b3BGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPnkoKSA6IGNoaWxkLT54KCk7IH0KKyAgICBpbnQgbG9n
aWNhbFdpZHRoRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCkgeyByZXR1cm4gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGNoaWxkLT53aWR0aCgpIDogY2hpbGQtPmhlaWdodCgpOyB9CisgICAg
aW50IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7IHJldHVybiBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPmhlaWdodCgpIDogY2hpbGQtPndpZHRoKCk7
IH0KKyAgICBpbnQgbG9naWNhbFRvcEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsgcmV0dXJu
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+eSgpIDogY2hpbGQtPngoKTsgfQog
ICAgIHZvaWQgc2V0TG9naWNhbExlZnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbG9n
aWNhbExlZnQsIEFwcGx5TGF5b3V0RGVsdGFNb2RlID0gRG9Ob3RBcHBseUxheW91dERlbHRhKTsK
ICAgICB2b2lkIHNldExvZ2ljYWxUb3BGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbG9n
aWNhbFRvcCwgQXBwbHlMYXlvdXREZWx0YU1vZGUgPSBEb05vdEFwcGx5TGF5b3V0RGVsdGEpOwog
ICAgIGludCBtYXJnaW5CZWZvcmVGb3JDaGlsZChSZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQp
IGNvbnN0OwpAQCAtMjE4LDggKzIxOCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBz
Y3JvbGxiYXJzQ2hhbmdlZChib29sIC8qaG9yaXpvbnRhbFNjcm9sbGJhckNoYW5nZWQqLywgYm9v
bCAvKnZlcnRpY2FsU2Nyb2xsYmFyQ2hhbmdlZCovKSB7IH07CiAKLSAgICBpbnQgbG9naWNhbFJp
Z2h0T2Zmc2V0Rm9yQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgYXZhaWxhYmxl
TG9naWNhbFdpZHRoKCkgOiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIGF2YWlsYWJsZUxv
Z2ljYWxXaWR0aCgpOyB9Ci0gICAgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpIGNv
bnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJM
ZWZ0KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7IH0KKyAg
ICBpbnQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgYXZh
aWxhYmxlTG9naWNhbFdpZHRoKCkgOiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIGF2YWls
YWJsZUxvZ2ljYWxXaWR0aCgpOyB9CisgICAgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVu
dCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJMZWZ0
KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7IH0KIAogcHJv
dGVjdGVkOgogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSB1c2VkIGludGVybmFsbHkg
dG8gbWFuaXB1bGF0ZSB0aGUgcmVuZGVyIHRyZWUgc3RydWN0dXJlIHZpYSByZW1vdmUvaW5zZXJ0
L2FwcGVuZENoaWxkTm9kZS4KQEAgLTQyOSwzNSArNDI5LDM1IEBAIHByaXZhdGU6CiAKICAgICBJ
bnRQb2ludCBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZShjb25zdCBGbG9hdGluZ09iamVjdCosIGNv
bnN0IEludFBvaW50JikgY29uc3Q7CiAKLSAgICBpbnQgbG9naWNhbFRvcEZvckZsb2F0KGNvbnN0
IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT55KCkgOiBjaGlsZC0+eCgpOyB9Ci0gICAgaW50IGxv
Z2ljYWxCb3R0b21Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsg
cmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+bWF4WSgp
IDogY2hpbGQtPm1heFgoKTsgfQotICAgIGludCBsb2dpY2FsTGVmdEZvckZsb2F0KGNvbnN0IEZs
b2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGNoaWxkLT54KCkgOiBjaGlsZC0+eSgpOyB9Ci0gICAgaW50IGxvZ2lj
YWxSaWdodEZvckZsb2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1
cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT5tYXhYKCkgOiBj
aGlsZC0+bWF4WSgpOyB9Ci0gICAgaW50IGxvZ2ljYWxXaWR0aEZvckZsb2F0KGNvbnN0IEZsb2F0
aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGNoaWxkLT53aWR0aCgpIDogY2hpbGQtPmhlaWdodCgpOyB9CisgICAgaW50
IGxvZ2ljYWxUb3BGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsg
cmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+eSgpIDogY2hpbGQtPngo
KTsgfQorICAgIGludCBsb2dpY2FsQm90dG9tRm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3Qq
IGNoaWxkKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQt
Pm1heFkoKSA6IGNoaWxkLT5tYXhYKCk7IH0KKyAgICBpbnQgbG9naWNhbExlZnRGb3JGbG9hdChj
b25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBjaGlsZC0+eCgpIDogY2hpbGQtPnkoKTsgfQorICAgIGludCBsb2dpY2Fs
UmlnaHRGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJu
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+bWF4WCgpIDogY2hpbGQtPm1heFko
KTsgfQorICAgIGludCBsb2dpY2FsV2lkdGhGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCog
Y2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+
d2lkdGgoKSA6IGNoaWxkLT5oZWlnaHQoKTsgfQogICAgIHZvaWQgc2V0TG9naWNhbFRvcEZvckZs
b2F0KEZsb2F0aW5nT2JqZWN0KiBjaGlsZCwgaW50IGxvZ2ljYWxUb3ApCiAgICAgewotICAgICAg
ICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgaWYgKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBjaGlsZC0+c2V0WShsb2dpY2Fs
VG9wKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2hpbGQtPnNldFgobG9naWNhbFRvcCk7
CiAgICAgfQogICAgIHZvaWQgc2V0TG9naWNhbExlZnRGb3JGbG9hdChGbG9hdGluZ09iamVjdCog
Y2hpbGQsIGludCBsb2dpY2FsTGVmdCkKICAgICB7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKICAgICAgICAgICAgIGNoaWxkLT5zZXRYKGxvZ2ljYWxMZWZ0KTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgY2hpbGQtPnNldFkobG9naWNhbExlZnQpOwogICAgIH0KICAgICB2b2lk
IHNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdChGbG9hdGluZ09iamVjdCogY2hpbGQsIGludCBsb2dp
Y2FsSGVpZ2h0KQogICAgIHsKLSAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCisgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAg
ICAgICAgY2hpbGQtPnNldEhlaWdodChsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgY2hpbGQtPnNldFdpZHRoKGxvZ2ljYWxIZWlnaHQpOwogICAgIH0KICAgICB2b2lk
IHNldExvZ2ljYWxXaWR0aEZvckZsb2F0KEZsb2F0aW5nT2JqZWN0KiBjaGlsZCwgaW50IGxvZ2lj
YWxXaWR0aCkKICAgICB7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKQorICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAg
ICAgIGNoaWxkLT5zZXRXaWR0aChsb2dpY2FsV2lkdGgpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBjaGlsZC0+c2V0SGVpZ2h0KGxvZ2ljYWxXaWR0aCk7CkBAIC00NjUsNyArNDY1LDcgQEAg
cHJpdmF0ZToKIAogICAgIGludCB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihjb25z
dCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAoc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gY2hpbGQtPngoKSArIGNoaWxkLT5yZW5k
ZXJlcigpLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBj
aGlsZC0+eCgpICsgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoY2hpbGQtPnJlbmRlcmVyKCkpOwpAQCAt
NDczLDcgKzQ3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgIGludCB5UG9zaXRpb25Gb3JG
bG9hdEluY2x1ZGluZ01hcmdpbihjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0CiAg
ICAgewotICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAg
ICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4g
Y2hpbGQtPnkoKSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkLT5yZW5kZXJlcigpKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNoaWxkLT55KCkgKyBjaGlsZC0+cmVuZGVy
ZXIoKS0+bWFyZ2luVG9wKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gODE2ODQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIyLDcgKzIyMiw3IEBAIElubGluZUZsb3dCb3gqIFJlbmRlckJsb2NrOjpjcmVhdGVM
aW5lQm8KICAgICAgICAgICAgIEFTU0VSVChuZXdCb3gtPmlzSW5saW5lRmxvd0JveCgpKTsKICAg
ICAgICAgICAgIHBhcmVudEJveCA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihuZXdCb3gp
OwogICAgICAgICAgICAgcGFyZW50Qm94LT5zZXRGaXJzdExpbmVTdHlsZUJpdChmaXJzdExpbmUp
OwotICAgICAgICAgICAgcGFyZW50Qm94LT5zZXRJc0hvcml6b250YWwoc3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgICAgICAgICBwYXJlbnRCb3gtPnNldElzSG9yaXpv
bnRhbChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKICAgICAgICAgICAgIGNvbnN0cnVjdGVk
TmV3Qm94ID0gdHJ1ZTsKICAgICAgICAgfQogCkBAIC05ODAsNyArOTgwLDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgIHNldExvZ2ljYWxIZWlnaHQobG9n
aWNhbEhlaWdodCgpICsgbGFzdExpbmVBbm5vdGF0aW9uc0FkanVzdG1lbnQgKyBib3JkZXJBZnRl
cigpICsgcGFkZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCkpOwogCiAgICAg
aWYgKCFmaXJzdExpbmVCb3goKSAmJiBoYXNMaW5lSWZFbXB0eSgpKQotICAgICAgICBzZXRMb2dp
Y2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSArIGxpbmVIZWlnaHQodHJ1ZSwgc3R5bGUoKS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQ
b3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpKTsKKyAgICAgICAgc2V0TG9naWNhbEhlaWdodChs
b2dpY2FsSGVpZ2h0KCkgKyBsaW5lSGVpZ2h0KHRydWUsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGlu
ZUJveGVzKSk7CiAKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhbnkgbGluZXMgdGhhdCBzcGlsbCBv
dXQgb2Ygb3VyIGJsb2NrLiAgSWYgd2UgZG8sIHRoZW4gd2Ugd2lsbCBwb3NzaWJseSBuZWVkIHRv
CiAgICAgLy8gdHJ1bmNhdGUgdGV4dC4KQEAgLTEwMDUsOCArMTAwNSw4IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmNoZWNrRmxvYXRzSW5DbGVhbkxpbmUKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICBpZiAoZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3Quc2l6ZSgpICE9IG5ld1Np
emUpIHsKLSAgICAgICAgICAgIGludCBmbG9hdFRvcCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC55KCkgOiBmbG9hdHNbZmxvYXRJ
bmRleF0ucmVjdC54KCk7Ci0gICAgICAgICAgICBpbnQgZmxvYXRIZWlnaHQgPSBzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbWF4KGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0Lmhl
aWdodCgpLCBuZXdTaXplLmhlaWdodCgpKSAKKyAgICAgICAgICAgIGludCBmbG9hdFRvcCA9IGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC55KCkgOiBm
bG9hdHNbZmxvYXRJbmRleF0ucmVjdC54KCk7CisgICAgICAgICAgICBpbnQgZmxvYXRIZWlnaHQg
PSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbWF4KGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0
LmhlaWdodCgpLCBuZXdTaXplLmhlaWdodCgpKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtYXgoZmxvYXRzW2Zsb2F0
SW5kZXhdLnJlY3Qud2lkdGgoKSwgbmV3U2l6ZS53aWR0aCgpKTsKICAgICAgICAgICAgIGxpbmUt
Pm1hcmtEaXJ0eSgpOwogICAgICAgICAgICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UobGlu
ZS0+YmxvY2tMb2dpY2FsSGVpZ2h0KCksIGZsb2F0VG9wICsgZmxvYXRIZWlnaHQsIGxpbmUpOwpA
QCAtMTMzOSw3ICsxMzM5LDcgQEAgc3RhdGljIHZvaWQgc2V0U3RhdGljUG9zaXRpb25zKFJlbmRl
ckJsbwogICAgICAgICB0b1JlbmRlcklubGluZShjb250YWluZXJCbG9jayktPmxheWVyKCktPnNl
dFN0YXRpY0Jsb2NrUG9zaXRpb24oYmxvY2stPmxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgfQogCi0g
ICAgYm9vbCBpc0hvcml6b250YWwgPSBibG9jay0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKTsKKyAgICBib29sIGlzSG9yaXpvbnRhbCA9IGJsb2NrLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpOwogICAgIGJvb2wgaGFzU3RhdGljSW5saW5lUG9zaXRpb24gPSBjaGlsZC0+c3R5
bGUoKS0+aGFzU3RhdGljSW5saW5lUG9zaXRpb24oaXNIb3Jpem9udGFsKTsKICAgICBib29sIGhh
c1N0YXRpY0Jsb2NrUG9zaXRpb24gPSBjaGlsZC0+c3R5bGUoKS0+aGFzU3RhdGljQmxvY2tQb3Np
dGlvbihpc0hvcml6b250YWwpOwogCkBAIC0xNTk1LDcgKzE1OTUsNyBAQCBJbmxpbmVJdGVyYXRv
ciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgLy8gZ28gYWhlYWQg
YW5kIGRldGVybWluZSBvdXIgc3RhdGljIGlubGluZSBwb3NpdGlvbiBub3cuCiAgICAgICAgICAg
ICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChvKTsKICAgICAgICAgICAgICAgICBi
b29sIGlzSW5saW5lVHlwZSA9IGJveC0+c3R5bGUoKS0+aXNPcmlnaW5hbERpc3BsYXlJbmxpbmVU
eXBlKCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBuZWVkVG9TZXRTdGF0aWNJbmxpbmVQb3NpdGlv
biA9IGJveC0+c3R5bGUoKS0+aGFzU3RhdGljSW5saW5lUG9zaXRpb24oc3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBuZWVkVG9TZXRTdGF0
aWNJbmxpbmVQb3NpdGlvbiA9IGJveC0+c3R5bGUoKS0+aGFzU3RhdGljSW5saW5lUG9zaXRpb24o
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG5lZWRUb1Nl
dFN0YXRpY0lubGluZVBvc2l0aW9uICYmICFpc0lubGluZVR5cGUpIHsKICAgICAgICAgICAgICAg
ICAgICAgYm94LT5sYXllcigpLT5zZXRTdGF0aWNJbmxpbmVQb3NpdGlvbihib3JkZXJBbmRQYWRk
aW5nU3RhcnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5lZWRUb1NldFN0YXRpY0lubGluZVBv
c2l0aW9uID0gZmFsc2U7CkBAIC0xNjAzLDcgKzE2MDMsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5k
ZXJCbG9jazo6ZmluZE5leHRMaW5lCiAKICAgICAgICAgICAgICAgICAvLyBJZiBvdXIgb3JpZ2lu
YWwgZGlzcGxheSB3YXMgYW4gSU5MSU5FIHR5cGUsIHRoZW4gd2UgY2FuIGdvIGFoZWFkCiAgICAg
ICAgICAgICAgICAgLy8gYW5kIGRldGVybWluZSBvdXIgc3RhdGljIHkgcG9zaXRpb24gbm93Lgot
ICAgICAgICAgICAgICAgIGJvb2wgbmVlZFRvU2V0U3RhdGljQmxvY2tQb3NpdGlvbiA9IGJveC0+
c3R5bGUoKS0+aGFzU3RhdGljQmxvY2tQb3NpdGlvbihzdHlsZSgpLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBib29sIG5lZWRUb1NldFN0YXRpY0Jsb2NrUG9z
aXRpb24gPSBib3gtPnN0eWxlKCktPmhhc1N0YXRpY0Jsb2NrUG9zaXRpb24oaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG5lZWRUb1NldFN0YXRpY0Jsb2Nr
UG9zaXRpb24gJiYgaXNJbmxpbmVUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIGJveC0+bGF5
ZXIoKS0+c2V0U3RhdGljQmxvY2tQb3NpdGlvbihsb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICAg
ICAgICAgICAgICBuZWVkVG9TZXRTdGF0aWNCbG9ja1Bvc2l0aW9uID0gZmFsc2U7CkBAIC0yMTMy
LDcgKzIxMzIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21JbmxpbmVDCiBp
bnQgUmVuZGVyQmxvY2s6OmJlZm9yZVNpZGVWaXN1YWxPdmVyZmxvd0ZvckxpbmUoUm9vdElubGlu
ZUJveCogbGluZSkgY29uc3QKIHsKICAgICAvLyBPdmVyZmxvdyBpcyBpbiB0aGUgYmxvY2sncyBj
b29yZGluYXRlIHNwYWNlLCB3aGljaCBtZWFucyBpdCBpc24ndCBwdXJlbHkgcGh5c2ljYWwuCi0g
ICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgaWYgKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBsaW5lLT5taW5ZVmlzdWFsT3Zl
cmZsb3coKTsKICAgICByZXR1cm4gbGluZS0+bWluWFZpc3VhbE92ZXJmbG93KCk7CiB9CkBAIC0y
MTQwLDcgKzIxNDAsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmJlZm9yZVNpZGVWaXN1YWxPdmVyZmxv
CiBpbnQgUmVuZGVyQmxvY2s6OmFmdGVyU2lkZVZpc3VhbE92ZXJmbG93Rm9yTGluZShSb290SW5s
aW5lQm94KiBsaW5lKSBjb25zdAogewogICAgIC8vIE92ZXJmbG93IGlzIGluIHRoZSBibG9jaydz
IGNvb3JkaW5hdGUgc3BhY2UsIHdoaWNoIG1lYW5zIGl0IGlzbid0IHB1cmVseSBwaHlzaWNhbC4K
LSAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICBpZiAoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIGxpbmUtPm1heFlWaXN1YWxP
dmVyZmxvdygpOwogICAgIHJldHVybiBsaW5lLT5tYXhYVmlzdWFsT3ZlcmZsb3coKTsKIH0KQEAg
LTIxNDgsNyArMjE0OCw3IEBAIGludCBSZW5kZXJCbG9jazo6YWZ0ZXJTaWRlVmlzdWFsT3ZlcmZs
b3cKIGludCBSZW5kZXJCbG9jazo6YmVmb3JlU2lkZUxheW91dE92ZXJmbG93Rm9yTGluZShSb290
SW5saW5lQm94KiBsaW5lKSBjb25zdAogewogICAgIC8vIE92ZXJmbG93IGlzIGluIHRoZSBibG9j
aydzIGNvb3JkaW5hdGUgc3BhY2UsIHdoaWNoIG1lYW5zIGl0IGlzbid0IHB1cmVseSBwaHlzaWNh
bC4KLSAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICBpZiAo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIGxpbmUtPm1pbllMYXlv
dXRPdmVyZmxvdygpOwogICAgIHJldHVybiBsaW5lLT5taW5YTGF5b3V0T3ZlcmZsb3coKTsKIH0K
QEAgLTIxNTYsNyArMjE1Niw3IEBAIGludCBSZW5kZXJCbG9jazo6YmVmb3JlU2lkZUxheW91dE92
ZXJmbG8KIGludCBSZW5kZXJCbG9jazo6YWZ0ZXJTaWRlTGF5b3V0T3ZlcmZsb3dGb3JMaW5lKFJv
b3RJbmxpbmVCb3gqIGxpbmUpIGNvbnN0CiB7CiAgICAgLy8gT3ZlcmZsb3cgaXMgaW4gdGhlIGJs
b2NrJ3MgY29vcmRpbmF0ZSBzcGFjZSwgd2hpY2ggbWVhbnMgaXQgaXNuJ3QgcHVyZWx5IHBoeXNp
Y2FsLgotICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgIGlm
IChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gbGluZS0+bWF4WUxh
eW91dE92ZXJmbG93KCk7CiAgICAgcmV0dXJuIGxpbmUtPm1heFhMYXlvdXRPdmVyZmxvdygpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDgx
NjgyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExOSwyMSArMTE5LDIxIEBAIGludCBSZW5kZXJCb3g6Om1hcmdpbkFmdGVyKCkg
Y29uc3QKIAogaW50IFJlbmRlckJveDo6bWFyZ2luU3RhcnQoKSBjb25zdAogewotICAgIGlmIChz
dHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgIGlmIChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gbV9tYXJnaW5MZWZ0IDogbV9tYXJnaW5SaWdodDsKICAgICByZXR1cm4gc3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9tYXJnaW5Ub3AgOiBtX21hcmdpbkJvdHRv
bTsKIH0KIAogaW50IFJlbmRlckJveDo6bWFyZ2luRW5kKCkgY29uc3QKIHsKLSAgICBpZiAoc3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICBpZiAoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IG1fbWFyZ2luUmlnaHQgOiBtX21hcmdpbkxlZnQ7CiAgICAgcmV0dXJuIHN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1fbWFyZ2luQm90dG9tIDogbV9tYXJnaW5Ub3A7
CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRNYXJnaW5TdGFydChpbnQgbWFyZ2luKQogewotICAg
IGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgaWYgKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKHN0eWxlKCktPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1hcmdpbjsKICAgICAg
ICAgZWxzZQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgUmVuZGVyQm94OjpzZXRNYXJnaW5TdGFy
dChpbnQgbWFyZ2kKIAogdm9pZCBSZW5kZXJCb3g6OnNldE1hcmdpbkVuZChpbnQgbWFyZ2luKQog
ewotICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgaWYg
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKHN0eWxlKCktPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXJnaW47
CiAgICAgICAgIGVsc2UKQEAgLTMyNCw4ICszMjQsMTEgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZgogCiAgICAgICAgIGlmICh2aWV3U3R5bGUtPndyaXRpbmdNb2Rl
KCkgIT0gc3R5bGUoKS0+d3JpdGluZ01vZGUoKSAmJiAoaXNSb290UmVuZGVyZXIgfHwgIWRvY3Vt
ZW50KCktPndyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkpIHsKICAgICAgICAgICAg
IHZpZXdTdHlsZS0+c2V0V3JpdGluZ01vZGUoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7Ci0gICAg
ICAgICAgICBpZiAoaXNCb2R5UmVuZGVyZXIpCisgICAgICAgICAgICB2aWV3UmVuZGVyZXItPnNl
dEhvcml6b250YWxXcml0aW5nTW9kZShzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KTsKKyAgICAgICAgICAgIGlmIChpc0JvZHlSZW5kZXJlcikgewogICAgICAgICAgICAgICAgIGRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5zZXRXcml0
aW5nTW9kZShzdHlsZSgpLT53cml0aW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+c2V0SG9yaXpvbnRhbFdyaXRpbmdN
b2RlKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAg
IH0KICAgICB9CkBAIC02MTAsOSArNjEzLDkgQEAgYm9vbCBSZW5kZXJCb3g6OmxvZ2ljYWxTY3Jv
bGwoU2Nyb2xsTG9naQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgLy8gT24gTWFjIG9ubHkg
d2UgcmVzZXQgdGhlIGlubGluZSBkaXJlY3Rpb24gcG9zaXRpb24gd2hlbiBkb2luZyBhIGRvY3Vt
ZW50IHNjcm9sbCAoZS5nLiwgaGl0dGluZyBIb21lL0VuZCkuCiAgICAgICAgIGlmIChncmFudWxh
cml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAgICAgICAgc2Nyb2xsZWQgPSBsLT5zY3Jv
bGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dhcmQsIHN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCkpLCBTY3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAg
IHNjcm9sbGVkID0gbC0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURpcmVj
dGlvbkJhY2t3YXJkLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLT5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlwbGllcik7CiAj
ZW5kaWYKLSAgICAgICAgaWYgKGwtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24s
IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCktPmlzRmxpcHBlZEJs
b2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgICAgIGlm
IChsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpLCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVs
YXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAgICAgc2Nyb2xsZWQgPSB0cnVlOwogICAgICAg
ICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBAIC0xNTI1LDcgKzE1MjgsNyBAQCB2b2lkIFJl
bmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpCiAKICAgICBSZW5kZXJCbG9jayogY2IgPSBj
b250YWluaW5nQmxvY2soKTsKICAgICBpbnQgY29udGFpbmVyTG9naWNhbFdpZHRoID0gbWF4KDAs
IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSk7Ci0gICAgYm9vbCBoYXNQ
ZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrID0gY2ItPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgIT0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKKyAgICBi
b29sIGhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2sgPSBjYi0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgIGludCBjb250YWlu
ZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uID0gY29udGFpbmVyTG9naWNhbFdpZHRoOwogICAgIGlm
IChoYXNQZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrKQogICAgICAgICBjb250YWluZXJXaWR0
aEluSW5saW5lRGlyZWN0aW9uID0gcGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxI
ZWlnaHQoKTsKQEAgLTE3MDAsNyArMTcwMyw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9n
aWNhbEhlaWdodCgpCiAgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodCgpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygp
OwotICAgICAgICBib29sIGhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2sgPSBjYi0+c3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpOworICAgICAgICBib29sIGhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxv
Y2sgPSBjYi0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpOwogICAgIAogICAgICAgICBpZiAoIWhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxv
Y2spCiAgICAgICAgICAgICBjb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKGNiKTsKQEAgLTE3
ODEsNyArMTc4NCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdodCgpCiAg
ICAgICAgIGlmIChkb2N1bWVudCgpLT5wcmludGluZygpKQogICAgICAgICAgICAgdmlzSGVpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50Pih2aWV3KCktPnBhZ2VMb2dpY2FsSGVpZ2h0KCkpOwogICAgICAg
ICBlbHNlICB7Ci0gICAgICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKKyAgICAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAg
ICAgICAgICAgIHZpc0hlaWdodCA9IHZpZXcoKS0+dmlld0hlaWdodCgpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIHZpc0hlaWdodCA9IHZpZXcoKS0+dmlld1dpZHRoKCk7CkBA
IC0xOTkxLDcgKzE5OTQsNyBAQCBpbnQgUmVuZGVyQm94OjphdmFpbGFibGVMb2dpY2FsSGVpZ2h0
VXNpCiAgICAgICAgIHJldHVybiBjb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWlnaHQoaC52YWx1
ZSgpKTsKIAogICAgIGlmIChpc1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuIHN0eWxlKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB0b1JlbmRlclZpZXcodGhpcyktPmZyYW1lVmll
dygpLT52aXNpYmxlSGVpZ2h0KCkgOiB0b1JlbmRlclZpZXcodGhpcyktPmZyYW1lVmlldygpLT52
aXNpYmxlV2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyB0b1JlbmRlclZpZXcodGhpcyktPmZyYW1lVmlldygpLT52aXNpYmxlSGVpZ2h0KCkgOiB0b1Jl
bmRlclZpZXcodGhpcyktPmZyYW1lVmlldygpLT52aXNpYmxlV2lkdGgoKTsKIAogICAgIC8vIFdl
IG5lZWQgdG8gc3RvcCBoZXJlLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIGluY3JlYXNlIHRoZSBo
ZWlnaHQgb2YgdGhlIHRhYmxlCiAgICAgLy8gYXJ0aWZpY2lhbGx5LiAgV2UncmUgZ29pbmcgdG8g
cmVseSBvbiB0aGlzIGNlbGwgZ2V0dGluZyBleHBhbmRlZCB0byBzb21lIG5ldwpAQCAtMjAzNyw3
ICsyMDQwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcgogCiBp
bnQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNv
bnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluaW5nQmxvY2ssIGJvb2wgY2hlY2tGb3JQ
ZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUpIGNvbnN0CiB7Ci0gICAgaWYgKGNoZWNrRm9yUGVycGVu
ZGljdWxhcldyaXRpbmdNb2RlICYmIGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSAhPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQor
ICAgIGlmIChjaGVja0ZvclBlcnBlbmRpY3VsYXJXcml0aW5nTW9kZSAmJiBjb250YWluaW5nQmxv
Y2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlv
bmVkKGNvbnRhaW5pbmdCbG9jaywgZmFsc2UpOwogCiAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+
aXNCb3goKSkKQEAgLTIwNjgsNyArMjA3MSw3IEBAIGludCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWQKIAogaW50IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhl
aWdodEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5pbmdC
bG9jaywgYm9vbCBjaGVja0ZvclBlcnBlbmRpY3VsYXJXcml0aW5nTW9kZSkgY29uc3QKIHsKLSAg
ICBpZiAoY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUgJiYgY29udGFpbmluZ0Jsb2Nr
LT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IHN0eWxlKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCisgICAgaWYgKGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdN
b2RlICYmIGNvbnRhaW5pbmdCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrTG9n
aWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluaW5nQmxvY2ssIGZhbHNlKTsKIAogICAgIGlm
IChjb250YWluaW5nQmxvY2stPmlzQm94KCkpCkBAIC0yMDg2LDcgKzIwODksNyBAQCBpbnQgUmVu
ZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpCiAKICAgICBpbnQgaGVpZ2h0UmVzdWx0
OwogICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSBmbG93LT5saW5lc0JvdW5kaW5nQm94KCk7Ci0g
ICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKKyAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQog
ICAgICAgICBoZWlnaHRSZXN1bHQgPSBib3VuZGluZ0JveC5oZWlnaHQoKTsKICAgICBlbHNlCiAg
ICAgICAgIGhlaWdodFJlc3VsdCA9IGJvdW5kaW5nQm94LndpZHRoKCk7CkBAIC0yMTYyLDcgKzIx
NjUsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgLy8g
aW5zdGVhZCBvZiB0aGUgdGhlIGNvbnRhaW5lciBibG9jaydzLgogICAgIFRleHREaXJlY3Rpb24g
Y29udGFpbmVyRGlyZWN0aW9uID0gKGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKSA/IHBhcmVu
dCgpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA6IGNvbnRhaW5lckJsb2NrLT5zdHlsZSgpLT5kaXJl
Y3Rpb24oKTsKIAotICAgIGJvb2wgaXNIb3Jpem9udGFsID0gc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKTsKKyAgICBib29sIGlzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCk7CiAgICAgY29uc3QgaW50IGJvcmRlcnNQbHVzUGFkZGluZyA9IGJvcmRlckFuZFBh
ZGRpbmdMb2dpY2FsV2lkdGgoKTsKICAgICBjb25zdCBMZW5ndGggbWFyZ2luTG9naWNhbExlZnQg
PSBpc0hvcml6b250YWwgPyBzdHlsZSgpLT5tYXJnaW5MZWZ0KCkgOiBzdHlsZSgpLT5tYXJnaW5U
b3AoKTsKICAgICBjb25zdCBMZW5ndGggbWFyZ2luTG9naWNhbFJpZ2h0ID0gaXNIb3Jpem9udGFs
ID8gc3R5bGUoKS0+bWFyZ2luUmlnaHQoKSA6IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgpOwpAQCAt
MjI2NywxMSArMjI3MCwxMSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlTG9naWNhbExlZnRQb3NpdGlv
bmVkCiB7CiAgICAgLy8gRGVhbCB3aXRoIGRpZmZlcmluZyB3cml0aW5nIG1vZGVzIGhlcmUuICBP
dXIgb2Zmc2V0IG5lZWRzIHRvIGJlIGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0
ZSBzcGFjZS4gSWYgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZmxpcHBlZAogICAgIC8vIGFsb25n
IHRoaXMgYXhpcywgdGhlbiB3ZSBuZWVkIHRvIGZsaXAgdGhlIGNvb3JkaW5hdGUuICBUaGlzIGNh
biBvbmx5IGhhcHBlbiBpZiB0aGUgY29udGFpbmluZyBibG9jayBpcyBib3RoIGEgZmxpcHBlZCBt
b2RlIGFuZCBwZXJwZW5kaWN1bGFyIHRvIHVzLgotICAgIGlmIChjb250YWluZXJCbG9jay0+c3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBjaGlsZC0+c3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSAmJiBjb250YWluZXJCbG9jay0+c3R5bGUoKS0+aXNGbGlwcGVk
QmxvY2tzV3JpdGluZ01vZGUoKSkgeworICAgIGlmIChjb250YWluZXJCbG9jay0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSAhPSBjaGlsZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBj
b250YWluZXJCbG9jay0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewog
ICAgICAgICBsb2dpY2FsTGVmdFBvcyA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAtIGxvZ2ljYWxX
aWR0aFZhbHVlIC0gbG9naWNhbExlZnRQb3M7Ci0gICAgICAgIGxvZ2ljYWxMZWZ0UG9zICs9IChj
aGlsZC0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNvbnRhaW5lckJsb2Nr
LT5ib3JkZXJSaWdodCgpIDogY29udGFpbmVyQmxvY2stPmJvcmRlckJvdHRvbSgpKTsKKyAgICAg
ICAgbG9naWNhbExlZnRQb3MgKz0gKGNoaWxkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
Y29udGFpbmVyQmxvY2stPmJvcmRlclJpZ2h0KCkgOiBjb250YWluZXJCbG9jay0+Ym9yZGVyQm90
dG9tKCkpOwogICAgIH0gZWxzZQotICAgICAgICBsb2dpY2FsTGVmdFBvcyArPSAoY2hpbGQtPnN0
eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjb250YWluZXJCbG9jay0+Ym9yZGVy
TGVmdCgpIDogY29udGFpbmVyQmxvY2stPmJvcmRlclRvcCgpKTsKKyAgICAgICAgbG9naWNhbExl
ZnRQb3MgKz0gKGNoaWxkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29udGFpbmVyQmxv
Y2stPmJvcmRlckxlZnQoKSA6IGNvbnRhaW5lckJsb2NrLT5ib3JkZXJUb3AoKSk7CiB9CiAKIHZv
aWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKExlbmd0aCBs
b2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywg
VGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24sCkBAIC0yNDgwLDcgKzI0ODMsNyBAQCB2
b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAKICAgICBjb25zdCBpbnQg
Y29udGFpbmVyTG9naWNhbEhlaWdodCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQ
b3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrKTsKIAotICAgIGJvb2wgaXNIb3Jpem9udGFsID0gc3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKKyAgICBib29sIGlzSG9yaXpvbnRhbCA9
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgYm9vbCBpc0ZsaXBwZWQgPSBzdHlsZSgp
LT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpOwogICAgIGNvbnN0IGludCBib3JkZXJzUGx1
c1BhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOwogICAgIGNvbnN0IExl
bmd0aCBtYXJnaW5CZWZvcmUgPSBzdHlsZSgpLT5tYXJnaW5CZWZvcmUoKTsKQEAgLTI1NzAsMTgg
KzI1NzMsMTggQEAgc3RhdGljIHZvaWQgY29tcHV0ZUxvZ2ljYWxUb3BQb3NpdGlvbmVkTwogewog
ICAgIC8vIERlYWwgd2l0aCBkaWZmZXJpbmcgd3JpdGluZyBtb2RlcyBoZXJlLiAgT3VyIG9mZnNl
dCBuZWVkcyB0byBiZSBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIGNvb3JkaW5hdGUgc3BhY2Uu
IElmIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGZsaXBwZWQKICAgICAvLyBhbG9uZyB0aGlzIGF4
aXMsIHRoZW4gd2UgbmVlZCB0byBmbGlwIHRoZSBjb29yZGluYXRlLiAgVGhpcyBjYW4gb25seSBo
YXBwZW4gaWYgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgYm90aCBhIGZsaXBwZWQgbW9kZSBhbmQg
cGVycGVuZGljdWxhciB0byB1cy4KLSAgICBpZiAoKGNoaWxkLT5zdHlsZSgpLT5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpICYmIGNoaWxkLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpICE9IGNvbnRhaW5lckJsb2NrLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKQotICAgICAgICB8fCAoY2hpbGQtPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdN
b2RlKCkgIT0gY29udGFpbmVyQmxvY2stPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdN
b2RlKCkgJiYgY2hpbGQtPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29u
dGFpbmVyQmxvY2stPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKQorICAgIGlm
ICgoY2hpbGQtPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgJiYgY2hpbGQt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gY29udGFpbmVyQmxvY2stPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCisgICAgICAgIHx8IChjaGlsZC0+c3R5bGUoKS0+aXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSAhPSBjb250YWluZXJCbG9jay0+c3R5bGUoKS0+aXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSAmJiBjaGlsZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBj
b250YWluZXJCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpCiAgICAgICAgIGxvZ2lj
YWxUb3BQb3MgPSBjb250YWluZXJMb2dpY2FsSGVpZ2h0IC0gbG9naWNhbEhlaWdodFZhbHVlIC0g
bG9naWNhbFRvcFBvczsKIAogICAgIC8vIE91ciBvZmZzZXQgaXMgZnJvbSB0aGUgbG9naWNhbCBi
b3R0b20gZWRnZSBpbiBhIGZsaXBwZWQgZW52aXJvbm1lbnQsIGUuZy4sIHJpZ2h0IGZvciB2ZXJ0
aWNhbC1ybCBhbmQgYm90dG9tIGZvciBob3Jpem9udGFsLWJ0LgotICAgIGlmIChjb250YWluZXJC
bG9jay0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSAmJiBjaGlsZC0+c3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWluZXJCbG9jay0+c3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAgICBpZiAoY2hpbGQtPnN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgaWYgKGNvbnRhaW5lckJsb2NrLT5z
dHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpICYmIGNoaWxkLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5lckJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAg
ICAgICAgICAgIGxvZ2ljYWxUb3BQb3MgKz0gY29udGFpbmVyQmxvY2stPmJvcmRlckJvdHRvbSgp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2dpY2FsVG9wUG9zICs9IGNvbnRhaW5lckJs
b2NrLT5ib3JkZXJSaWdodCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChjaGlsZC0+c3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgaWYgKGNoaWxkLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgbG9naWNhbFRvcFBvcyArPSBjb250
YWluZXJCbG9jay0+Ym9yZGVyVG9wKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvZ2lj
YWxUb3BQb3MgKz0gY29udGFpbmVyQmxvY2stPmJvcmRlckxlZnQoKTsKQEAgLTI3MjcsNyArMjcz
MCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICBUZXh0
RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiA9IChkb2N1bWVudCgpLT5pblF1aXJrc01vZGUo
KSkgPyBwYXJlbnQoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgOiBjb250YWluZXJCbG9jay0+c3R5
bGUoKS0+ZGlyZWN0aW9uKCk7CiAKICAgICAvLyBWYXJpYWJsZXMgdG8gc29sdmUuCi0gICAgYm9v
bCBpc0hvcml6b250YWwgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOworICAg
IGJvb2wgaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKICAgICBMZW5n
dGggbG9naWNhbExlZnQgPSBzdHlsZSgpLT5sb2dpY2FsTGVmdCgpOwogICAgIExlbmd0aCBsb2dp
Y2FsUmlnaHQgPSBzdHlsZSgpLT5sb2dpY2FsUmlnaHQoKTsKICAgICBMZW5ndGggbWFyZ2luTG9n
aWNhbExlZnQgPSBpc0hvcml6b250YWwgPyBzdHlsZSgpLT5tYXJnaW5MZWZ0KCkgOiBzdHlsZSgp
LT5tYXJnaW5Ub3AoKTsKQEAgLTI4ODcsNyArMjg5MCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21w
dXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICBjb25zdCBpbnQgY29udGFpbmVyTG9naWNhbEhlaWdo
dCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJs
b2NrKTsKIAogICAgIC8vIFZhcmlhYmxlcyB0byBzb2x2ZS4KLSAgICBib29sIGlzSG9yaXpvbnRh
bCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CisgICAgYm9vbCBpc0hvcml6
b250YWwgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgIGJvb2wgaXNGbGlwcGVkID0g
c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKTsKICAgICBMZW5ndGggbWFyZ2lu
QmVmb3JlID0gc3R5bGUoKS0+bWFyZ2luQmVmb3JlKCk7CiAgICAgTGVuZ3RoIG1hcmdpbkFmdGVy
ID0gc3R5bGUoKS0+bWFyZ2luQWZ0ZXIoKTsKQEAgLTMxOTUsOCArMzE5OCw4IEBAIHZvaWQgUmVu
ZGVyQm94OjphZGRMYXlvdXRPdmVyZmxvdyhjb25zdCAKICAgICAgICAgLy8gT3ZlcmZsb3cgaXMg
aW4gdGhlIGJsb2NrJ3MgY29vcmRpbmF0ZSBzcGFjZSBhbmQgdGh1cyBpcyBmbGlwcGVkIGZvciBo
b3Jpem9udGFsLWJ0IGFuZCB2ZXJ0aWNhbC1ybCAKICAgICAgICAgLy8gd3JpdGluZyBtb2Rlcy4g
IEF0IHRoaXMgc3RhZ2UgdGhhdCBpcyBhY3R1YWxseSBhIHNpbXBsaWZpY2F0aW9uLCBzaW5jZSB3
ZSBjYW4gdHJlYXQgaG9yaXpvbnRhbC10Yi9idCBhcyB0aGUgc2FtZQogICAgICAgICAvLyBhbmQg
dmVydGljYWwtbHIvcmwgYXMgdGhlIHNhbWUuCi0gICAgICAgIGJvb2wgaGFzVG9wT3ZlcmZsb3cg
PSAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmICFzdHlsZSgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpOwotICAgICAgICBib29sIGhhc0xlZnRPdmVyZmxvdyA9ICFzdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgc3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKTsKKyAgICAgICAgYm9vbCBoYXNUb3BPdmVyZmxvdyA9ICFzdHlsZSgpLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CisgICAg
ICAgIGJvb2wgaGFzTGVmdE92ZXJmbG93ID0gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSAmJiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgICAgICAKICAgICAgICAgaWYg
KCFoYXNUb3BPdmVyZmxvdykKICAgICAgICAgICAgIG92ZXJmbG93UmVjdC5zaGlmdFlFZGdlVG8o
bWF4KG92ZXJmbG93UmVjdC55KCksIGNsaWVudEJveC55KCkpKTsKQEAgLTMzNTUsNyArMzM1OCw3
IEBAIEludFBvaW50IFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKGMKICAgICAKICAgICAv
LyBUaGUgY2hpbGQgaXMgZ29pbmcgdG8gYWRkIGluIGl0cyB4KCkgYW5kIHkoKSwgc28gd2UgaGF2
ZSB0byBtYWtlIHN1cmUgaXQgZW5kcyB1cCBpbgogICAgIC8vIHRoZSByaWdodCBwbGFjZS4KLSAg
ICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICBpZiAoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSwg
cG9pbnQueSgpICsgaGVpZ2h0KCkgLSBjaGlsZC0+aGVpZ2h0KCkgLSBjaGlsZC0+eSgpIC0gKGFk
anVzdG1lbnQgPT0gUGFyZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0bWVudCA/IGNoaWxkLT55KCkg
OiAwKSk7CiAgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSArIHdpZHRoKCkgLSBjaGlsZC0+
d2lkdGgoKSAtIGNoaWxkLT54KCkgLSAoYWRqdXN0bWVudCA9PSBQYXJlbnRUb0NoaWxkRmxpcHBp
bmdBZGp1c3RtZW50ID8gY2hpbGQtPngoKSA6IDApLCBwb2ludC55KCkpOwogfQpAQCAtMzM2NSw3
ICszMzY4LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShJbnRSZQogICAg
IGlmICghc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAg
aWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJlY3Quc2V0WShoZWlnaHQo
KSAtIHJlY3QubWF4WSgpKTsKICAgICBlbHNlCiAgICAgICAgIHJlY3Quc2V0WCh3aWR0aCgpIC0g
cmVjdC5tYXhYKCkpOwpAQCAtMzM4Miw3ICszMzg1LDcgQEAgSW50UG9pbnQgUmVuZGVyQm94Ojpm
bGlwRm9yV3JpdGluZ01vZGUoYwogewogICAgIGlmICghc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwotICAgIHJldHVybiBzdHls
ZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSW50UG9pbnQocG9zaXRpb24ueCgpLCBo
ZWlnaHQoKSAtIHBvc2l0aW9uLnkoKSkgOiBJbnRQb2ludCh3aWR0aCgpIC0gcG9zaXRpb24ueCgp
LCBwb3NpdGlvbi55KCkpOworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
SW50UG9pbnQocG9zaXRpb24ueCgpLCBoZWlnaHQoKSAtIHBvc2l0aW9uLnkoKSkgOiBJbnRQb2lu
dCh3aWR0aCgpIC0gcG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkpOwogfQogCiBJbnRQb2ludCBS
ZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZUluY2x1ZGluZ0NvbHVtbnMoY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdApAQCAtMzM5NiwxNCArMzM5OSwxNCBAQCBJbnRTaXplIFJlbmRlckJv
eDo6ZmxpcEZvcldyaXRpbmdNb2RlKGNvCiB7CiAgICAgaWYgKCFzdHlsZSgpLT5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gb2Zmc2V0OwotICAgIHJldHVybiBz
dHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSW50U2l6ZShvZmZzZXQud2lkdGgo
KSwgaGVpZ2h0KCkgLSBvZmZzZXQuaGVpZ2h0KCkpIDogSW50U2l6ZSh3aWR0aCgpIC0gb2Zmc2V0
LndpZHRoKCksIG9mZnNldC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBJbnRTaXplKG9mZnNldC53aWR0aCgpLCBoZWlnaHQoKSAtIG9mZnNldC5oZWln
aHQoKSkgOiBJbnRTaXplKHdpZHRoKCkgLSBvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgp
KTsKIH0KIAogRmxvYXRQb2ludCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvbikgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmlzRmxpcHBl
ZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKLSAgICByZXR1
cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEZsb2F0UG9pbnQocG9zaXRp
b24ueCgpLCBoZWlnaHQoKSAtIHBvc2l0aW9uLnkoKSkgOiBGbG9hdFBvaW50KHdpZHRoKCkgLSBw
b3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSk7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBGbG9hdFBvaW50KHBvc2l0aW9uLngoKSwgaGVpZ2h0KCkgLSBwb3NpdGlvbi55
KCkpIDogRmxvYXRQb2ludCh3aWR0aCgpIC0gcG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkpOwog
fQogCiB2b2lkIFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKEZsb2F0UmVjdCYgcmVjdCkg
Y29uc3QKQEAgLTM0MTEsNyArMzQxNCw3IEBAIHZvaWQgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGlu
Z01vZGUoRmxvYXQKICAgICBpZiAoIXN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKQorICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICBy
ZWN0LnNldFkoaGVpZ2h0KCkgLSByZWN0Lm1heFkoKSk7CiAgICAgZWxzZQogICAgICAgICByZWN0
LnNldFgod2lkdGgoKSAtIHJlY3QubWF4WCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gODE2ODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzMsNiArMzczLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
dXBkYXRlQm94TW9kZQogICAgIHNldEhhc0JveERlY29yYXRpb25zKGhhc0JhY2tncm91bmQoKSB8
fCBzdHlsZSgpLT5oYXNCb3JkZXIoKSB8fCBzdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkgfHwgc3R5
bGUoKS0+Ym94U2hhZG93KCkpOwogICAgIHNldElubGluZShzdHlsZSgpLT5pc0Rpc3BsYXlJbmxp
bmVUeXBlKCkpOwogICAgIHNldFJlbFBvc2l0aW9uZWQoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBS
ZWxhdGl2ZVBvc2l0aW9uKTsKKyAgICBzZXRIb3Jpem9udGFsV3JpdGluZ01vZGUoc3R5bGUoKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CiB9CiAKIGludCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6cmVsYXRpdmVQb3NpdGlvbk9mZnNldFgoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDgxNjgyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw2
ICsyMDEsNyBAQCBSZW5kZXJPYmplY3Q6OlJlbmRlck9iamVjdChOb2RlKiBub2RlKQogICAgICwg
bV9pc0JveChmYWxzZSkKICAgICAsIG1faW5saW5lKHRydWUpCiAgICAgLCBtX3JlcGxhY2VkKGZh
bHNlKQorICAgICwgbV9ob3Jpem9udGFsV3JpdGluZ01vZGUodHJ1ZSkKICAgICAsIG1faXNEcmFn
Z2luZyhmYWxzZSkKICAgICAsIG1faGFzTGF5ZXIoZmFsc2UpCiAgICAgLCBtX2hhc092ZXJmbG93
Q2xpcChmYWxzZSkKQEAgLTE4MzIsNiArMTgzMyw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzdHls
ZVdpbGxDaGFuZ2UoU3R5bGUKICAgICAgICAgICAgIG1fcG9zaXRpb25lZCA9IGZhbHNlOwogICAg
ICAgICAgICAgbV9yZWxQb3NpdGlvbmVkID0gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgbV9o
b3Jpem9udGFsV3JpdGluZ01vZGUgPSB0cnVlOwogICAgICAgICBtX3BhaW50QmFja2dyb3VuZCA9
IGZhbHNlOwogICAgICAgICBtX2hhc092ZXJmbG93Q2xpcCA9IGZhbHNlOwogICAgICAgICBtX2hh
c1RyYW5zZm9ybSA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaAkocmV2aXNpb24gODE2ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxMCw3ICs0MTAsOCBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc1J1bkluKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+ZGlzcGxheSgpID09IFJV
Tl9JTjsgfSAvLyBydW4taW4gb2JqZWN0CiAgICAgYm9vbCBpc0RyYWdnaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0RyYWdnaW5nOyB9CiAgICAgYm9vbCBpc1JlcGxhY2VkKCkgY29uc3QgeyByZXR1
cm4gbV9yZXBsYWNlZDsgfSAvLyBhICJyZXBsYWNlZCIgZWxlbWVudCAoc2VlIENTUykKLSAgICAK
KyAgICBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jp
em9udGFsV3JpdGluZ01vZGU7IH0KKwogICAgIGJvb2wgaGFzTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX2hhc0xheWVyOyB9CiAgICAgCiAgICAgYm9vbCBoYXNCb3hEZWNvcmF0aW9ucygpIGNvbnN0
IHsgcmV0dXJuIG1fcGFpbnRCYWNrZ3JvdW5kOyB9CkBAIC01MDYsNiArNTA3LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0SXNUZXh0KCkgeyBtX2lzVGV4dCA9IHRydWU7IH0KICAgICB2b2lkIHNl
dElzQm94KCkgeyBtX2lzQm94ID0gdHJ1ZTsgfQogICAgIHZvaWQgc2V0UmVwbGFjZWQoYm9vbCBi
ID0gdHJ1ZSkgeyBtX3JlcGxhY2VkID0gYjsgfQorICAgIHZvaWQgc2V0SG9yaXpvbnRhbFdyaXRp
bmdNb2RlKGJvb2wgYiA9IHRydWUpIHsgbV9ob3Jpem9udGFsV3JpdGluZ01vZGUgPSBiOyB9CiAg
ICAgdm9pZCBzZXRIYXNPdmVyZmxvd0NsaXAoYm9vbCBiID0gdHJ1ZSkgeyBtX2hhc092ZXJmbG93
Q2xpcCA9IGI7IH0KICAgICB2b2lkIHNldEhhc0xheWVyKGJvb2wgYiA9IHRydWUpIHsgbV9oYXNM
YXllciA9IGI7IH0KICAgICB2b2lkIHNldEhhc1RyYW5zZm9ybShib29sIGIgPSB0cnVlKSB7IG1f
aGFzVHJhbnNmb3JtID0gYjsgfQpAQCAtODU5LDYgKzg2MSw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2lzQm94ICAgICAgICAgICAgICAgICAgICAgOiAxOwogICAgIGJvb2wgbV9pbmxpbmUgICAg
ICAgICAgICAgICAgICAgIDogMTsKICAgICBib29sIG1fcmVwbGFjZWQgICAgICAgICAgICAgICAg
ICA6IDE7CisgICAgYm9vbCBtX2hvcml6b250YWxXcml0aW5nTW9kZSA6IDE7CiAgICAgYm9vbCBt
X2lzRHJhZ2dpbmcgICAgICAgICAgICAgICAgOiAxOwogCiAgICAgYm9vbCBtX2hhc0xheWVyICAg
ICAgICAgICAgICAgICAgOiAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDgxNjgyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUs
NyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6bGF5b3V0KCkKIGludCBSZW5kZXJUYWJsZUNlbGw6
OnBhZGRpbmdUb3AoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZykgY29uc3QKIHsKICAgICBp
bnQgcmVzdWx0ID0gUmVuZGVyQmxvY2s6OnBhZGRpbmdUb3AoKTsKLSAgICBpZiAoIWluY2x1ZGVJ
bnRyaW5zaWNQYWRkaW5nIHx8ICFzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQor
ICAgIGlmICghaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgfHwgIWlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgcmV0dXJuIHJlc3VsdCArIChzdHls
ZSgpLT53cml0aW5nTW9kZSgpID09IFRvcFRvQm90dG9tV3JpdGluZ01vZGUgPyBpbnRyaW5zaWNQ
YWRkaW5nQmVmb3JlKCkgOiBpbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKSk7CiB9CkBAIC0xNzMsNyAr
MTczLDcgQEAgaW50IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ1RvcChib29sIGluYwogaW50IFJl
bmRlclRhYmxlQ2VsbDo6cGFkZGluZ0JvdHRvbShib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5n
KSBjb25zdAogewogICAgIGludCByZXN1bHQgPSBSZW5kZXJCbG9jazo6cGFkZGluZ0JvdHRvbSgp
OwotICAgIGlmICghaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgfHwgIXN0eWxlKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCisgICAgaWYgKCFpbmNsdWRlSW50cmluc2ljUGFkZGluZyB8fCAh
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBy
ZXR1cm4gcmVzdWx0ICsgKHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0gVG9wVG9Cb3R0b21Xcml0
aW5nTW9kZSA/IGludHJpbnNpY1BhZGRpbmdBZnRlcigpIDogaW50cmluc2ljUGFkZGluZ0JlZm9y
ZSgpKTsKIH0KQEAgLTE4MSw3ICsxODEsNyBAQCBpbnQgUmVuZGVyVGFibGVDZWxsOjpwYWRkaW5n
Qm90dG9tKGJvb2wgCiBpbnQgUmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nTGVmdChib29sIGluY2x1
ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25zdAogewogICAgIGludCByZXN1bHQgPSBSZW5kZXJCbG9j
azo6cGFkZGluZ0xlZnQoKTsKLSAgICBpZiAoIWluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nIHx8IHN0
eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgaWYgKCFpbmNsdWRlSW50cmlu
c2ljUGFkZGluZyB8fCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIHJldHVybiByZXN1bHQgKyAoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSA9PSBM
ZWZ0VG9SaWdodFdyaXRpbmdNb2RlID8gaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpIDogaW50cmlu
c2ljUGFkZGluZ0FmdGVyKCkpOwogICAgIApAQCAtMTkwLDcgKzE5MCw3IEBAIGludCBSZW5kZXJU
YWJsZUNlbGw6OnBhZGRpbmdMZWZ0KGJvb2wgaW4KIGludCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRp
bmdSaWdodChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25zdAogeyAgIAogICAgIGlu
dCByZXN1bHQgPSBSZW5kZXJCbG9jazo6cGFkZGluZ1JpZ2h0KCk7Ci0gICAgaWYgKCFpbmNsdWRl
SW50cmluc2ljUGFkZGluZyB8fCBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQor
ICAgIGlmICghaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgfHwgaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXR1cm4gcmVzdWx0ICsgKHN0eWxl
KCktPndyaXRpbmdNb2RlKCkgPT0gTGVmdFRvUmlnaHRXcml0aW5nTW9kZSA/IGludHJpbnNpY1Bh
ZGRpbmdBZnRlcigpIDogaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpKTsKIH0KQEAgLTEwNDYsOCAr
MTA0Niw4IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpzY3JvbGxiYXJzQ2hhbmdlZCgKICAgICAg
ICAgcmV0dXJuOyAvLyBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgYmUgZG9pbmcgc29tZXRoaW5nIHdo
ZW4gYSBzY3JvbGxiYXIgZ29lcyBhd2F5IG9yIG5vdC4KICAgICAKICAgICAvLyBXZSBvbmx5IGNh
cmUgaWYgdGhlIHNjcm9sbGJhciB0aGF0IGFmZmVjdHMgb3VyIGludHJpbnNpYyBwYWRkaW5nIGhh
cyBiZWVuIGFkZGVkLgotICAgIGlmICgoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSAmJiAhaG9yaXpvbnRhbFNjcm9sbGJhckNoYW5nZWQpIHx8Ci0gICAgICAgICghc3R5bGUoKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAhdmVydGljYWxTY3JvbGxiYXJDaGFuZ2VkKSkK
KyAgICBpZiAoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgIWhvcml6b250YWxTY3JvbGxi
YXJDaGFuZ2VkKSB8fAorICAgICAgICAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgIXZl
cnRpY2FsU2Nyb2xsYmFyQ2hhbmdlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNocmlu
ayBvdXIgaW50cmluc2ljIHBhZGRpbmcgYXMgbXVjaCBhcyBwb3NzaWJsZSB0byBhY2NvbW1vZGF0
ZSB0aGUgc2Nyb2xsYmFyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcAkocmV2aXNpb24gODE2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgUm9vdElu
bGluZUJveDo6Um9vdElubGluZUJveChSZW5kZXJCbG9jawogICAgICwgbV9oYXNBbm5vdGF0aW9u
c0JlZm9yZShmYWxzZSkKICAgICAsIG1faGFzQW5ub3RhdGlvbnNBZnRlcihmYWxzZSkKIHsKLSAg
ICBzZXRJc0hvcml6b250YWwoYmxvY2stPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpOworICAgIHNldElzSG9yaXpvbnRhbChibG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSk7CiB9CiAKIApAQCAtMzM3LDcgKzMzNyw3IEBAIEdhcFJlY3RzIFJvb3RJbmxpbmVCb3g6Omxp
bmVTZWxlY3Rpb25HYXAKICAgICAgICAgZm9yIChJbmxpbmVCb3gqIGJveCA9IGZpcnN0Qm94LT5u
ZXh0TGVhZkNoaWxkKCk7IGJveDsgYm94ID0gYm94LT5uZXh0TGVhZkNoaWxkKCkpIHsKICAgICAg
ICAgICAgIGlmIChib3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25Ob25lKSB7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBsb2dpY2FsUmVjdChsYXN0TG9naWNh
bExlZnQsIHNlbFRvcCwgYm94LT5sb2dpY2FsTGVmdCgpIC0gbGFzdExvZ2ljYWxMZWZ0LCBzZWxI
ZWlnaHQpOwotICAgICAgICAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmUocmVuZGVyZXIoKS0+c3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sgOiBJ
bnRTaXplKG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCksIG9mZnNldEZyb21Sb290QmxvY2su
d2lkdGgoKSkpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmUocmVuZGVyZXIoKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sgOiBJbnRTaXpl
KG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCksIG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgo
KSkpOwogICAgICAgICAgICAgICAgIEludFJlY3QgZ2FwUmVjdCA9IHJvb3RCbG9jay0+bG9naWNh
bFJlY3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBsb2dpY2FsUmVj
dCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzUHJldmlvdXNCb3hTZWxlY3RlZCAmJiBnYXBSZWN0
LndpZHRoKCkgPiAwICYmIGdhcFJlY3QuaGVpZ2h0KCkgPiAwKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChwYWludEluZm8gJiYgYm94LT5wYXJlbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCkBAIC03MDYsNyArNzA2LDcgQEAgaW50IFJvb3RJbmxp
bmVCb3g6OnZlcnRpY2FsUG9zaXRpb25Gb3JCbwogICAgICAgICBjb25zdCBGb250TWV0cmljcyYg
Zm9udE1ldHJpY3MgPSBmb250LmZvbnRNZXRyaWNzKCk7CiAgICAgICAgIGludCBmb250U2l6ZSA9
IGZvbnQucGl4ZWxTaXplKCk7CiAKLSAgICAgICAgTGluZURpcmVjdGlvbk1vZGUgbGluZURpcmVj
dGlvbiA9IHBhcmVudC0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEhvcml6
b250YWxMaW5lIDogVmVydGljYWxMaW5lOworICAgICAgICBMaW5lRGlyZWN0aW9uTW9kZSBsaW5l
RGlyZWN0aW9uID0gcGFyZW50LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSG9yaXpvbnRh
bExpbmUgOiBWZXJ0aWNhbExpbmU7CiAKICAgICAgICAgaWYgKHZlcnRpY2FsQWxpZ24gPT0gU1VC
KQogICAgICAgICAgICAgdmVydGljYWxQb3NpdGlvbiArPSBmb250U2l6ZSAvIDUgKyAxOwo=
</data>
<flag name="review"
          id="78806"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>