<?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>46191</bug_id>
          
          <creation_ts>2010-09-21 09:13:42 -0700</creation_ts>
          <short_desc>Make collapsed borders in tables work with different block flows</short_desc>
          <delta_ts>2010-11-03 11:04:38 -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>
          
          <blocked>46417</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>282346</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-21 09:13:42 -0700</bug_when>
    <thetext>The borderStart/End/Before/After methods are hardcoded to a specific block flow directionality for collapsed border tables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304107</commentid>
    <comment_count>1</comment_count>
      <attachid>72838</attachid>
    <who name="">mitz</who>
    <bug_when>2010-11-03 10:24:22 -0700</bug_when>
    <thetext>Created attachment 72838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304126</commentid>
    <comment_count>2</comment_count>
      <attachid>72838</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-11-03 10:58:19 -0700</bug_when>
    <thetext>Comment on attachment 72838
Patch

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

r=me

&gt; WebCore/rendering/RenderTableCell.cpp:666
&gt; +CollapsedBorderValue RenderTableCell::collapsedLeftBorder() const
&gt; +{
&gt; +    if (table()-&gt;style()-&gt;isHorizontalWritingMode())
&gt; +        return table()-&gt;style()-&gt;isLeftToRightDirection() ? collapsedStartBorder() : collapsedEndBorder();
&gt; +    return table()-&gt;style()-&gt;isFlippedBlocksWritingMode() ? collapsedAfterBorder() : collapsedBeforeBorder();

I would cache table()-&gt;style() in a local and then use it in the three places where you acccess it.  Ditto for collapsedRight/Top/BottomBorder.

&gt; WebCore/rendering/RenderTableCell.cpp:743
&gt; +int RenderTableCell::borderHalfRight(bool outer) const
&gt; +{
&gt; +    if (table()-&gt;style()-&gt;isHorizontalWritingMode())
&gt; +        return table()-&gt;style()-&gt;isLeftToRightDirection() ? borderHalfEnd(outer) : borderHalfStart(outer);
&gt; +    return table()-&gt;style()-&gt;isFlippedBlocksWritingMode() ? borderHalfBefore(outer) : borderHalfAfter(outer);

Same comment.  Cache table()-&gt;style() in a local.  Same for all of the borderHalf*** functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304128</commentid>
    <comment_count>3</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-11-03 11:04:38 -0700</bug_when>
    <thetext>Landed as &lt;http://trac.webkit.org/projects/webkit/changeset/71251&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72838</attachid>
            <date>2010-11-03 10:24:22 -0700</date>
            <delta_ts>2010-11-03 10:58:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>46191_r1.diff</filename>
            <type>text/plain</type>
            <size>44607</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTI0NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjQgQEAKKzIwMTAtMTEtMDMgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IGNvbGxhcHNlZCBib3JkZXJzIGluIHRhYmxlcyB3b3JrIHdpdGggZGlmZmVyZW50IGJsb2NrIGZs
b3dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjE5
MQorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSB0YWJsZXMgZG9u4oCZdCBzdXBwb3J0IGRp
ZmZlcmVudCBibG9jayBmbG93cyB5ZXQuCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ugc3RpbGwgZG9l
c27igJl0IHN1cHBvcnQgY2VsbHMgd2hvc2UgYmxvY2sgZmxvdyBkaWZmZXJzIGZyb20gdGhlIHRh
Ymxl4oCZcy4KKworICAgICAgICAqIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4pOiBVcGRhdGVkIGZv
ciB0aGUgcmVuYW1pbmcgb2Ygc3R5bGVPckNvbFdpZHRoKCkuCisgICAgICAgIChXZWJDb3JlOjpB
dXRvVGFibGVMYXlvdXQ6OmNhbGNFZmZlY3RpdmVXaWR0aCk6IERpdHRvLgorICAgICAgICAqIHJl
bmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpeGVkVGFi
bGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocyk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
YWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpzdHlsZU9y
Q29sTG9naWNhbFdpZHRoKTogUmVuYW1lZCBzdHlsZU9yQ29sV2lkdGgoKSB0byB0aGlzIGFuZAor
ICAgICAgICBjaGFuZ2VkIHRvIHVzZSBsb2dpY2FsIHdpZHRocy4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBVcGRhdGVk
IGZvciB0aGUgYWJvdmUgcmVuYW1lLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxs
Ojp1cGRhdGVMb2dpY2FsV2lkdGgpOiBSZW5hbWVkIHVwZGF0ZVdpZHRoKCkgdG8gdGhpcyBhbmQg
Y2hhbmdlZAorICAgICAgICB0byBzZXQgdGhlIGxvZ2ljYWwgd2lkdGguCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFN0YXJ0Qm9yZGVyKTogQ2hhbmdlZCBjb2xs
YXBzZWRMZWZ0Qm9yZGVyKCkgaW50byB0aGlzLgorICAgICAgICBOb3RlIHRoYXQg4oCcc3RhcnTi
gJ0gaGVyZSB3aWxsIHJlZmVyIHRvIHRoZSB0YWJsZeKAmXMgYmxvY2sgZmxvdywgbm90IHRoZSBj
ZWxs4oCZcywgb25jZSB3ZSBhbGxvdworICAgICAgICB0aGUgdHdvIHRvIGRpZmZlci4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkRW5kQm9yZGVyKTogU2ltaWxh
ci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkQmVmb3JlQm9y
ZGVyKTogU2ltaWxhci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFw
c2VkQWZ0ZXJCb3JkZXIpOiBTaW1pbGFyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVD
ZWxsOjpjb2xsYXBzZWRMZWZ0Qm9yZGVyKTogUmVzb2x2ZXMg4oCcbGVmdOKAnSB0byBhIGxvZ2lj
YWwgc2lkZSB1c2luZworICAgICAgICB0aGUgdGFibGXigJlzIGJsb2NrIGZsb3cuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFJpZ2h0Qm9yZGVyKTogU2ltaWxh
ci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkVG9wQm9yZGVy
KTogU2ltaWxhci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2Vk
Qm90dG9tQm9yZGVyKTogU2ltaWxhci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2Vs
bDo6Ym9yZGVyU3RhcnQpOiBVc2UgYm9yZGVySGFsZlN0YXJ0KCkuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckVuZCk6IFNpbWlsYXIuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckJlZm9yZSk6IFNpbWlsYXIuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckFmdGVyKTogU2ltaWxhci4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZkxlZnQpOiBSZXNvbHZlcyDigJxsZWZ0
4oCdIHRvIGEgbG9naWNhbCBzaWRlIHVzaW5nIHRoZQorICAgICAgICB0YWJsZeKAmXMgYmxvY2sg
Zmxvdy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZlJpZ2h0
KTogU2ltaWxhci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFs
ZlRvcCk6IFNpbWlsYXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJvcmRl
ckhhbGZCb3R0b20pOiBTaW1pbGFyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxs
Ojpib3JkZXJIYWxmU3RhcnQpOiBBZGRlZC4gVXNlcyBjb2xsYXBzZWRTdGFydEJvcmRlcigpLiBT
cGxpdHMgb2RkCisgICAgICAgIHdpZHRocyBiYXNlZCBvbiBwaHlzaWNhbCBzaWRlLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmRW5kKTogU2ltaWxhci4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZkJlZm9yZSk6IFNpbWls
YXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZBZnRlcik6
IFNpbWlsYXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxlY3RCb3Jk
ZXJTdHlsZXMpOiBVc2UgbG9naWNhbCBtZXRob2RzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVDZWxsOjpwYWludENvbGxhcHNlZEJvcmRlcik6IFVwZGF0ZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpzZXRD
ZWxsV2lkdGhzKTogVXBkYXRlZCBmb3IgdGhlIHJlbmFtaW5nIG9mIHVwZGF0ZVdpZHRoKCkuCisg
ICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjpib3JkZXJCZWZvcmUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclN0eWxlOjpib3JkZXJBZnRlcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU3R5bGU6OmJvcmRlclN0YXJ0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6Ym9yZGVyRW5kKTogQWRlZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmg6CisKIDIwMTAtMTEtMDMgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAkocmV2aXNpb24gNzEyNDIpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4
NSw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4oaW50IGUKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1heENvbnRyaWJ1dG9yID0gY2VsbDsKICAgICAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgICAgIExlbmd0aCB3ID0gY2VsbC0+c3R5bGVPckNvbFdp
ZHRoKCk7CisgICAgICAgICAgICAgICAgICAgIExlbmd0aCB3ID0gY2VsbC0+c3R5bGVPckNvbExv
Z2ljYWxXaWR0aCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpcyB0aGlz
IGFyYml0cmFyeSB2YWx1ZT8KICAgICAgICAgICAgICAgICAgICAgaWYgKHcucmF3VmFsdWUoKSA+
IDMyNzYwKQogICAgICAgICAgICAgICAgICAgICAgICAgdy5zZXRSYXdWYWx1ZSgzMjc2MCk7CkBA
IC0zMDgsNyArMzA4LDcgQEAgaW50IEF1dG9UYWJsZUxheW91dDo6Y2FsY0VmZmVjdGl2ZVdpZHRo
KAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGludCBzcGFuID0gY2VsbC0+Y29sU3Bhbigp
OwogCi0gICAgICAgIExlbmd0aCB3ID0gY2VsbC0+c3R5bGVPckNvbFdpZHRoKCk7CisgICAgICAg
IExlbmd0aCB3ID0gY2VsbC0+c3R5bGVPckNvbExvZ2ljYWxXaWR0aCgpOwogICAgICAgICBpZiAo
IXcuaXNSZWxhdGl2ZSgpICYmIHcuaXNaZXJvKCkpCiAgICAgICAgICAgICB3ID0gTGVuZ3RoKCk7
IC8vIG1ha2UgaXQgQXV0bwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5
b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0
LmNwcAkocmV2aXNpb24gNzEyNDIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5
b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIGludCBGaXhlZFRhYmxl
TGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKICAgICAgICAgICAgICAgICBpZiAoY2VsbC0+cHJl
ZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPmNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAKLSAgICAgICAgICAgICAgICBMZW5ndGgg
dyA9IGNlbGwtPnN0eWxlT3JDb2xXaWR0aCgpOworICAgICAgICAgICAgICAgIExlbmd0aCB3ID0g
Y2VsbC0+c3R5bGVPckNvbExvZ2ljYWxXaWR0aCgpOwogICAgICAgICAgICAgICAgIGludCBzcGFu
ID0gY2VsbC0+Y29sU3BhbigpOwogICAgICAgICAgICAgICAgIGludCBlZmZXaWR0aCA9IDA7CiAg
ICAgICAgICAgICAgICAgaWYgKHcuaXNGaXhlZCgpICYmIHcuaXNQb3NpdGl2ZSgpKQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gNzEyNDIpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MTIsNyArNDcxMiw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2EKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChpc1RhYmxlQ2VsbCgpKSB7Ci0gICAgICAgICAgICBMZW5ndGggdyA9IHRv
UmVuZGVyVGFibGVDZWxsKHRoaXMpLT5zdHlsZU9yQ29sV2lkdGgoKTsKKyAgICAgICAgICAgIExl
bmd0aCB3ID0gdG9SZW5kZXJUYWJsZUNlbGwodGhpcyktPnN0eWxlT3JDb2xMb2dpY2FsV2lkdGgo
KTsKICAgICAgICAgICAgIGlmICh3LmlzRml4ZWQoKSAmJiB3LnZhbHVlKCkgPiAwKQogICAgICAg
ICAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KG1fbWluUHJlZmVycmVk
TG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aCh3LnZhbHVlKCkpKTsK
ICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZp
c2lvbiA3MTI0MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDIwICs4MCwxOCBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6dXBk
YXRlRnJvbUVsZW1lbnQoCiAgICAgfQogfQogCi1MZW5ndGggUmVuZGVyVGFibGVDZWxsOjpzdHls
ZU9yQ29sV2lkdGgoKSBjb25zdAorTGVuZ3RoIFJlbmRlclRhYmxlQ2VsbDo6c3R5bGVPckNvbExv
Z2ljYWxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgTGVuZ3RoIHcgPSBzdHlsZSgpLT53aWR0aCgpOwor
ICAgIExlbmd0aCB3ID0gc3R5bGUoKS0+bG9naWNhbFdpZHRoKCk7CiAgICAgaWYgKCF3LmlzQXV0
bygpKQogICAgICAgICByZXR1cm4gdzsKIAotICAgIFJlbmRlclRhYmxlQ29sKiB0YWJsZUNvbCA9
IHRhYmxlKCktPmNvbEVsZW1lbnQoY29sKCkpOwotCi0gICAgaWYgKHRhYmxlQ29sKSB7CisgICAg
aWYgKFJlbmRlclRhYmxlQ29sKiB0YWJsZUNvbCA9IHRhYmxlKCktPmNvbEVsZW1lbnQoY29sKCkp
KSB7CiAgICAgICAgIGludCBjb2xTcGFuQ291bnQgPSBjb2xTcGFuKCk7CiAKICAgICAgICAgTGVu
Z3RoIGNvbFdpZHRoU3VtID0gTGVuZ3RoKDAsIEZpeGVkKTsKICAgICAgICAgZm9yIChpbnQgaSA9
IDE7IGkgPD0gY29sU3BhbkNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIExlbmd0aCBjb2xXaWR0
aCA9IHRhYmxlQ29sLT5zdHlsZSgpLT53aWR0aCgpOworICAgICAgICAgICAgTGVuZ3RoIGNvbFdp
ZHRoID0gdGFibGVDb2wtPnN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpOwogCiAgICAgICAgICAgICAv
LyBQZXJjZW50YWdlIHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBvbmx5IGZvciBjb2xTcGFuID09
IDEuCiAgICAgICAgICAgICAvLyBPdGhlcndpc2Ugd2UgcmV0dXJuIG9yaWdpbmFsIHdpZHRoIGZv
ciB0aGUgY2VsbC4KQEAgLTExNSw3ICsxMTMsNyBAQCBMZW5ndGggUmVuZGVyVGFibGVDZWxsOjpz
dHlsZU9yQ29sV2lkdGgoCiAgICAgICAgIC8vIFBlcmNlbnRhZ2VzIGRvbid0IG5lZWQgdG8gYmUg
aGFuZGxlZCBzaW5jZSB0aGV5J3JlIGFsd2F5cyB0cmVhdGVkIHRoaXMgd2F5IChldmVuIHdoZW4g
c3BlY2lmaWVkIG9uIHRoZSBjZWxscykuCiAgICAgICAgIC8vIFNlZSBCdWd6aWxsYSBidWcgODEy
NiBmb3IgZGV0YWlscy4KICAgICAgICAgaWYgKGNvbFdpZHRoU3VtLmlzRml4ZWQoKSAmJiBjb2xX
aWR0aFN1bS52YWx1ZSgpID4gMCkKLSAgICAgICAgICAgIGNvbFdpZHRoU3VtID0gTGVuZ3RoKG1h
eCgwLCBjb2xXaWR0aFN1bS52YWx1ZSgpIC0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCkpLCBGaXhl
ZCk7CisgICAgICAgICAgICBjb2xXaWR0aFN1bSA9IExlbmd0aChtYXgoMCwgY29sV2lkdGhTdW0u
dmFsdWUoKSAtIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSksIEZpeGVkKTsKICAgICAg
ICAgcmV0dXJuIGNvbFdpZHRoU3VtOwogICAgIH0KIApAQCAtMTMyLDcgKzEzMCw3IEBAIHZvaWQg
UmVuZGVyVGFibGVDZWxsOjpjb21wdXRlUHJlZmVycmVkTG8KICAgICBSZW5kZXJCbG9jazo6Y29t
cHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICBpZiAobm9kZSgpICYmIHN0eWxlKCkt
PmF1dG9XcmFwKCkpIHsKICAgICAgICAgLy8gU2VlIGlmIG5vd3JhcCB3YXMgc2V0LgotICAgICAg
ICBMZW5ndGggdyA9IHN0eWxlT3JDb2xXaWR0aCgpOworICAgICAgICBMZW5ndGggdyA9IHN0eWxl
T3JDb2xMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgU3RyaW5nIG5vd3JhcCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKCkpLT5nZXRBdHRyaWJ1dGUobm93cmFwQXR0cik7CiAgICAgICAgIGlm
ICghbm93cmFwLmlzTnVsbCgpICYmIHcuaXNGaXhlZCgpKQogICAgICAgICAgICAgLy8gTm93cmFw
IGlzIHNldCwgYnV0IHdlIGRpZG4ndCBhY3R1YWxseSB1c2UgaXQgYmVjYXVzZSBvZiB0aGUKQEAg
LTE0OCwxMiArMTQ2LDEzIEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlTG9naWNhbFdp
ZHQKIHsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnVwZGF0ZVdpZHRoKGludCB3KQordm9p
ZCBSZW5kZXJUYWJsZUNlbGw6OnVwZGF0ZUxvZ2ljYWxXaWR0aChpbnQgdykKIHsKLSAgICBpZiAo
dyAhPSB3aWR0aCgpKSB7Ci0gICAgICAgIHNldFdpZHRoKHcpOwotICAgICAgICBzZXRDZWxsV2lk
dGhDaGFuZ2VkKHRydWUpOwotICAgIH0KKyAgICBpZiAodyA9PSBsb2dpY2FsV2lkdGgoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc2V0TG9naWNhbFdpZHRoKHcpOworICAgIHNldENlbGxXaWR0
aENoYW5nZWQodHJ1ZSk7CiB9CiAKIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpsYXlvdXQoKQpAQCAt
Mzg0LDY5ICszODMsNjIgQEAgc3RhdGljIENvbGxhcHNlZEJvcmRlclZhbHVlIGNob29zZUJvcmRl
cgogICAgIHJldHVybiBib3JkZXIuc3R5bGUoKSA9PSBCSElEREVOID8gQ29sbGFwc2VkQm9yZGVy
VmFsdWUoKSA6IGJvcmRlcjsKIH0KIAotQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVD
ZWxsOjpjb2xsYXBzZWRMZWZ0Qm9yZGVyKGJvb2wgcnRsKSBjb25zdAorQ29sbGFwc2VkQm9yZGVy
VmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRTdGFydEJvcmRlcigpIGNvbnN0CiB7Ci0g
ICAgUmVuZGVyVGFibGUqIHRhYmxlRWx0ID0gdGFibGUoKTsKLSAgICBib29sIGxlZnRtb3N0Q29s
dW1uOwotICAgIGlmICghcnRsKQotICAgICAgICBsZWZ0bW9zdENvbHVtbiA9IGNvbCgpID09IDA7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGludCBlZmZDb2wgPSB0YWJsZUVsdC0+Y29sVG9FZmZDb2wo
Y29sKCkgKyBjb2xTcGFuKCkgLSAxKTsKLSAgICAgICAgbGVmdG1vc3RDb2x1bW4gPSBlZmZDb2wg
PT0gdGFibGVFbHQtPm51bUVmZkNvbHMoKSAtIDE7Ci0gICAgfQotICAgIAotICAgIC8vIEZvciBi
b3JkZXIgbGVmdCwgd2UgbmVlZCB0byBjaGVjaywgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKLSAg
ICAvLyAoMSkgT3VyIGxlZnQgYm9yZGVyLgotICAgIGludCBsZWZ0ID0gQ1NTUHJvcGVydHlCb3Jk
ZXJMZWZ0Q29sb3I7Ci0gICAgaW50IHJpZ2h0ID0gQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9y
OwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHJlc3VsdCgmc3R5bGUoKS0+Ym9yZGVyTGVmdCgp
LCBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IobGVmdCksIEJDRUxMKTsKLSAgICAKLSAg
ICAvLyAoMikgVGhlIHJpZ2h0IGJvcmRlciBvZiB0aGUgY2VsbCB0byB0aGUgbGVmdC4KLSAgICBS
ZW5kZXJUYWJsZUNlbGwqIHByZXZDZWxsID0gcnRsID8gdGFibGVFbHQtPmNlbGxBZnRlcih0aGlz
KSA6IHRhYmxlRWx0LT5jZWxsQmVmb3JlKHRoaXMpOwotICAgIGlmIChwcmV2Q2VsbCkgewotICAg
ICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBwcmV2Q2VsbEJvcmRlciA9IENvbGxhcHNlZEJvcmRl
clZhbHVlKCZwcmV2Q2VsbC0+c3R5bGUoKS0+Ym9yZGVyUmlnaHQoKSwgcHJldkNlbGwtPnN0eWxl
KCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihyaWdodCksIEJDRUxMKTsKLSAgICAgICAgcmVzdWx0
ID0gcnRsID8gY2hvb3NlQm9yZGVyKHJlc3VsdCwgcHJldkNlbGxCb3JkZXIpIDogY2hvb3NlQm9y
ZGVyKHByZXZDZWxsQm9yZGVyLCByZXN1bHQpOwotICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMo
KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSBlbHNlIGlmIChsZWZ0bW9zdENv
bHVtbikgewotICAgICAgICAvLyAoMykgT3VyIHJvdydzIGxlZnQgYm9yZGVyLgotICAgICAgICBy
ZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSgmcGFyZW50
KCktPnN0eWxlKCktPmJvcmRlckxlZnQoKSwgcGFyZW50KCktPnN0eWxlKCktPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihsZWZ0KSwgQlJPVykpOworICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRoaXMt
PnRhYmxlKCk7CisgICAgYm9vbCBpc1N0YXJ0Q29sdW1uID0gY29sKCkgPT0gMDsKKworICAgIC8v
IEZvciB0aGUgc3RhcnQgYm9yZGVyLCB3ZSBuZWVkIHRvIGNoZWNrLCBpbiBvcmRlciBvZiBwcmVj
ZWRlbmNlOgorICAgIC8vICgxKSBPdXIgc3RhcnQgYm9yZGVyLgorICAgIGludCBzdGFydCA9IENT
U1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlclN0YXJ0Q29sb3IsIHRhYmxlLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSwgdGFibGUtPnN0
eWxlKCktPndyaXRpbmdNb2RlKCkpOworICAgIGludCBlbmQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2
ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRDb2xvciwg
dGFibGUtPnN0eWxlKCktPmRpcmVjdGlvbigpLCB0YWJsZS0+c3R5bGUoKS0+d3JpdGluZ01vZGUo
KSk7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0KCZzdHlsZSgpLT5ib3JkZXJTdGFy
dCgpLCBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3Ioc3RhcnQpLCBCQ0VMTCk7CisKKyAg
ICAvLyAoMikgVGhlIGVuZCBib3JkZXIgb2YgdGhlIHByZWNlZGluZyBjZWxsLgorICAgIGlmIChS
ZW5kZXJUYWJsZUNlbGwqIHByZXZDZWxsID0gdGFibGUtPmNlbGxCZWZvcmUodGhpcykpIHsKKyAg
ICAgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcHJldkNlbGxCb3JkZXIgPSBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSgmcHJldkNlbGwtPnN0eWxlKCktPmJvcmRlckVuZCgpLCBwcmV2Q2VsbC0+c3R5bGUo
KS0+dmlzaXRlZERlcGVuZGVudENvbG9yKGVuZCksIEJDRUxMKTsKKyAgICAgICAgcmVzdWx0ID0g
Y2hvb3NlQm9yZGVyKHByZXZDZWxsQm9yZGVyLCByZXN1bHQpOworICAgICAgICBpZiAoIXJlc3Vs
dC5leGlzdHMoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSBlbHNlIGlmIChp
c1N0YXJ0Q29sdW1uKSB7CisgICAgICAgIC8vICgzKSBPdXIgcm93J3Mgc3RhcnQgYm9yZGVyLgor
ICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1
ZSgmcGFyZW50KCktPnN0eWxlKCktPmJvcmRlclN0YXJ0KCksIHBhcmVudCgpLT5zdHlsZSgpLT52
aXNpdGVkRGVwZW5kZW50Q29sb3Ioc3RhcnQpLCBCUk9XKSk7CiAgICAgICAgIGlmICghcmVzdWx0
LmV4aXN0cygpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgCi0gICAgICAg
IC8vICg0KSBPdXIgcm93IGdyb3VwJ3MgbGVmdCBib3JkZXIuCi0gICAgICAgIHJlc3VsdCA9IGNo
b29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKCZzZWN0aW9uKCktPnN0eWxl
KCktPmJvcmRlckxlZnQoKSwgc2VjdGlvbigpLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IobGVmdCksIEJST1dHUk9VUCkpOworICAgICAgICAvLyAoNCkgT3VyIHJvdyBncm91cCdzIHN0
YXJ0IGJvcmRlci4KKyAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFw
c2VkQm9yZGVyVmFsdWUoJnNlY3Rpb24oKS0+c3R5bGUoKS0+Ym9yZGVyU3RhcnQoKSwgc2VjdGlv
bigpLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3Ioc3RhcnQpLCBCUk9XR1JPVVApKTsK
ICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAKLSAgICAvLyAoNSkgT3VyIGNvbHVtbiBhbmQgY29sdW1uIGdyb3VwJ3Mg
bGVmdCBib3JkZXJzLgorICAgIC8vICg1KSBPdXIgY29sdW1uIGFuZCBjb2x1bW4gZ3JvdXAncyBz
dGFydCBib3JkZXJzLgogICAgIGJvb2wgc3RhcnRDb2xFZGdlOwogICAgIGJvb2wgZW5kQ29sRWRn
ZTsKLSAgICBSZW5kZXJUYWJsZUNvbCogY29sRWx0ID0gdGFibGVFbHQtPmNvbEVsZW1lbnQoY29s
KCkgKyAocnRsID8gY29sU3BhbigpIC0gMSA6IDApLCAmc3RhcnRDb2xFZGdlLCAmZW5kQ29sRWRn
ZSk7Ci0gICAgaWYgKGNvbEVsdCAmJiAoIXJ0bCA/IHN0YXJ0Q29sRWRnZSA6IGVuZENvbEVkZ2Up
KSB7Ci0gICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRl
clZhbHVlKCZjb2xFbHQtPnN0eWxlKCktPmJvcmRlckxlZnQoKSwgY29sRWx0LT5zdHlsZSgpLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IobGVmdCksIEJDT0wpKTsKKyAgICBSZW5kZXJUYWJsZUNvbCog
Y29sRWx0ID0gdGFibGUtPmNvbEVsZW1lbnQoY29sKCksICZzdGFydENvbEVkZ2UsICZlbmRDb2xF
ZGdlKTsKKyAgICBpZiAoY29sRWx0ICYmIHN0YXJ0Q29sRWRnZSkgeworICAgICAgICByZXN1bHQg
PSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSgmY29sRWx0LT5zdHls
ZSgpLT5ib3JkZXJTdGFydCgpLCBjb2xFbHQtPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihzdGFydCksIEJDT0wpKTsKICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICBpZiAoY29sRWx0LT5wYXJlbnQoKS0+aXNUYWJs
ZUNvbCgpICYmICghcnRsID8gIWNvbEVsdC0+cHJldmlvdXNTaWJsaW5nKCkgOiAhY29sRWx0LT5u
ZXh0U2libGluZygpKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3Vs
dCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoJmNvbEVsdC0+cGFyZW50KCktPnN0eWxlKCktPmJvcmRl
ckxlZnQoKSwgY29sRWx0LT5wYXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KGxlZnQpLCBCQ09MR1JPVVApKTsKKyAgICAgICAgaWYgKGNvbEVsdC0+cGFyZW50KCktPmlzVGFi
bGVDb2woKSAmJiAhY29sRWx0LT5wcmV2aW91c1NpYmxpbmcoKSkgeworICAgICAgICAgICAgcmVz
dWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoJmNvbEVsdC0+
cGFyZW50KCktPnN0eWxlKCktPmJvcmRlclN0YXJ0KCksIGNvbEVsdC0+cGFyZW50KCktPnN0eWxl
KCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihzdGFydCksIEJDT0xHUk9VUCkpOwogICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyAoNikgVGhlIHJpZ2h0IGJvcmRlciBvZiB0
aGUgY29sdW1uIHRvIHRoZSBsZWZ0LgotICAgIGlmICghbGVmdG1vc3RDb2x1bW4pIHsKLSAgICAg
ICAgY29sRWx0ID0gdGFibGVFbHQtPmNvbEVsZW1lbnQoY29sKCkgKyAocnRsID8gY29sU3Bhbigp
IDogLTEpLCAmc3RhcnRDb2xFZGdlLCAmZW5kQ29sRWRnZSk7Ci0gICAgICAgIGlmIChjb2xFbHQg
JiYgKCFydGwgPyBlbmRDb2xFZGdlIDogc3RhcnRDb2xFZGdlKSkgewotICAgICAgICAgICAgQ29s
bGFwc2VkQm9yZGVyVmFsdWUgcmlnaHRCb3JkZXIgPSBDb2xsYXBzZWRCb3JkZXJWYWx1ZSgmY29s
RWx0LT5zdHlsZSgpLT5ib3JkZXJSaWdodCgpLCBjb2xFbHQtPnN0eWxlKCktPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihyaWdodCksIEJDT0wpOwotICAgICAgICAgICAgcmVzdWx0ID0gcnRsID8gY2hv
b3NlQm9yZGVyKHJlc3VsdCwgcmlnaHRCb3JkZXIpIDogY2hvb3NlQm9yZGVyKHJpZ2h0Qm9yZGVy
LCByZXN1bHQpOworICAgIC8vICg2KSBUaGUgZW5kIGJvcmRlciBvZiB0aGUgcHJlY2VkaW5nIGNv
bHVtbi4KKyAgICBpZiAoIWlzU3RhcnRDb2x1bW4pIHsKKyAgICAgICAgY29sRWx0ID0gdGFibGUt
PmNvbEVsZW1lbnQoY29sKCkgLTEsICZzdGFydENvbEVkZ2UsICZlbmRDb2xFZGdlKTsKKyAgICAg
ICAgaWYgKGNvbEVsdCAmJiBlbmRDb2xFZGdlKSB7CisgICAgICAgICAgICBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSBlbmRCb3JkZXIgPSBDb2xsYXBzZWRCb3JkZXJWYWx1ZSgmY29sRWx0LT5zdHlsZSgp
LT5ib3JkZXJFbmQoKSwgY29sRWx0LT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoZW5k
KSwgQkNPTCk7CisgICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIoZW5kQm9yZGVyLCBy
ZXN1bHQpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vICg3
KSBUaGUgdGFibGUncyBsZWZ0IGJvcmRlci4KLSAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVy
KHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoJnRhYmxlRWx0LT5zdHlsZSgpLT5ib3JkZXJM
ZWZ0KCksIHRhYmxlRWx0LT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IobGVmdCksIEJU
QUJMRSkpOworICAgICAgICAvLyAoNykgVGhlIHRhYmxlJ3Mgc3RhcnQgYm9yZGVyLgorICAgICAg
ICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSgmdGFi
bGUtPnN0eWxlKCktPmJvcmRlclN0YXJ0KCksIHRhYmxlLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3Ioc3RhcnQpLCBCVEFCTEUpKTsKICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkp
CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTQ1NCw3MSArNDQ2LDY1IEBA
IENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y28KICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1Db2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNl
ZFJpZ2h0Qm9yZGVyKGJvb2wgcnRsKSBjb25zdAorQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVy
VGFibGVDZWxsOjpjb2xsYXBzZWRFbmRCb3JkZXIoKSBjb25zdAogewotICAgIFJlbmRlclRhYmxl
KiB0YWJsZUVsdCA9IHRhYmxlKCk7Ci0gICAgYm9vbCByaWdodG1vc3RDb2x1bW47Ci0gICAgaWYg
KHJ0bCkKLSAgICAgICAgcmlnaHRtb3N0Q29sdW1uID0gY29sKCkgPT0gMDsKLSAgICBlbHNlIHsK
LSAgICAgICAgaW50IGVmZkNvbCA9IHRhYmxlRWx0LT5jb2xUb0VmZkNvbChjb2woKSArIGNvbFNw
YW4oKSAtIDEpOwotICAgICAgICByaWdodG1vc3RDb2x1bW4gPSBlZmZDb2wgPT0gdGFibGVFbHQt
Pm51bUVmZkNvbHMoKSAtIDE7Ci0gICAgfQotICAgIAotICAgIC8vIEZvciBib3JkZXIgcmlnaHQs
IHdlIG5lZWQgdG8gY2hlY2ssIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6Ci0gICAgLy8gKDEpIE91
ciByaWdodCBib3JkZXIuCi0gICAgaW50IGxlZnQgPSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xv
cjsKLSAgICBpbnQgcmlnaHQgPSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3I7Ci0gICAgQ29s
bGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0ID0gQ29sbGFwc2VkQm9yZGVyVmFsdWUoJnN0eWxlKCkt
PmJvcmRlclJpZ2h0KCksIHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihyaWdodCksIEJD
RUxMKTsKLSAgICAKLSAgICAvLyAoMikgVGhlIGxlZnQgYm9yZGVyIG9mIHRoZSBjZWxsIHRvIHRo
ZSByaWdodC4KLSAgICBpZiAoIXJpZ2h0bW9zdENvbHVtbikgewotICAgICAgICBSZW5kZXJUYWJs
ZUNlbGwqIG5leHRDZWxsID0gcnRsID8gdGFibGVFbHQtPmNlbGxCZWZvcmUodGhpcykgOiB0YWJs
ZUVsdC0+Y2VsbEFmdGVyKHRoaXMpOworICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRoaXMtPnRh
YmxlKCk7CisgICAgYm9vbCBpc0VuZENvbHVtbiA9IHRhYmxlLT5jb2xUb0VmZkNvbChjb2woKSAr
IGNvbFNwYW4oKSAtIDEpID09IHRhYmxlLT5udW1FZmZDb2xzKCkgLSAxOworCisgICAgLy8gRm9y
IGVuZCBib3JkZXIsIHdlIG5lZWQgdG8gY2hlY2ssIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6Cisg
ICAgLy8gKDEpIE91ciBlbmQgYm9yZGVyLgorICAgIGludCBzdGFydCA9IENTU1Byb3BlcnR5Ojpy
ZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0
Q29sb3IsIHRhYmxlLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSwgdGFibGUtPnN0eWxlKCktPndyaXRp
bmdNb2RlKCkpOworICAgIGludCBlbmQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3
YXJlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRDb2xvciwgdGFibGUtPnN0eWxl
KCktPmRpcmVjdGlvbigpLCB0YWJsZS0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CisgICAgQ29s
bGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0ID0gQ29sbGFwc2VkQm9yZGVyVmFsdWUoJnN0eWxlKCkt
PmJvcmRlckVuZCgpLCBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoZW5kKSwgQkNFTEwp
OworICAgIAorICAgIC8vICgyKSBUaGUgc3RhcnQgYm9yZGVyIG9mIHRoZSBmb2xsb3dpbmcgY2Vs
bC4KKyAgICBpZiAoIWlzRW5kQ29sdW1uKSB7CisgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogbmV4
dENlbGwgPSB0YWJsZS0+Y2VsbEFmdGVyKHRoaXMpOwogICAgICAgICBpZiAobmV4dENlbGwgJiYg
bmV4dENlbGwtPnN0eWxlKCkpIHsKLSAgICAgICAgICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGxl
ZnRCb3JkZXIgPSBDb2xsYXBzZWRCb3JkZXJWYWx1ZSgmbmV4dENlbGwtPnN0eWxlKCktPmJvcmRl
ckxlZnQoKSwgbmV4dENlbGwtPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihsZWZ0KSwg
QkNFTEwpOwotICAgICAgICAgICAgcmVzdWx0ID0gcnRsID8gY2hvb3NlQm9yZGVyKGxlZnRCb3Jk
ZXIsIHJlc3VsdCkgOiBjaG9vc2VCb3JkZXIocmVzdWx0LCBsZWZ0Qm9yZGVyKTsKKyAgICAgICAg
ICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHN0YXJ0Qm9yZGVyID0gQ29sbGFwc2VkQm9yZGVyVmFs
dWUoJm5leHRDZWxsLT5zdHlsZSgpLT5ib3JkZXJTdGFydCgpLCBuZXh0Q2VsbC0+c3R5bGUoKS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKHN0YXJ0KSwgQkNFTEwpOworICAgICAgICAgICAgcmVzdWx0
ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgc3RhcnRCb3JkZXIpOwogICAgICAgICAgICAgaWYgKCFy
ZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vICgzKSBPdXIgcm93J3MgcmlnaHQgYm9yZGVyLgot
ICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1
ZSgmcGFyZW50KCktPnN0eWxlKCktPmJvcmRlclJpZ2h0KCksIHBhcmVudCgpLT5zdHlsZSgpLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IocmlnaHQpLCBCUk9XKSk7CisgICAgICAgIC8vICgzKSBPdXIg
cm93J3MgZW5kIGJvcmRlci4KKyAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwg
Q29sbGFwc2VkQm9yZGVyVmFsdWUoJnBhcmVudCgpLT5zdHlsZSgpLT5ib3JkZXJFbmQoKSwgcGFy
ZW50KCktPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihlbmQpLCBCUk9XKSk7CiAgICAg
ICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgCi0gICAgICAgIC8vICg0KSBPdXIgcm93IGdyb3VwJ3MgcmlnaHQgYm9yZGVyLgotICAg
ICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSgm
c2VjdGlvbigpLT5zdHlsZSgpLT5ib3JkZXJSaWdodCgpLCBzZWN0aW9uKCktPnN0eWxlKCktPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihyaWdodCksIEJST1dHUk9VUCkpOworICAgICAgICAvLyAoNCkg
T3VyIHJvdyBncm91cCdzIGVuZCBib3JkZXIuCisgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRl
cihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKCZzZWN0aW9uKCktPnN0eWxlKCktPmJvcmRl
ckVuZCgpLCBzZWN0aW9uKCktPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihlbmQpLCBC
Uk9XR1JPVVApKTsKICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICAvLyAoNSkgT3VyIGNvbHVtbiBhbmQgY29s
dW1uIGdyb3VwJ3MgcmlnaHQgYm9yZGVycy4KKyAgICAvLyAoNSkgT3VyIGNvbHVtbiBhbmQgY29s
dW1uIGdyb3VwJ3MgZW5kIGJvcmRlcnMuCiAgICAgYm9vbCBzdGFydENvbEVkZ2U7CiAgICAgYm9v
bCBlbmRDb2xFZGdlOwotICAgIFJlbmRlclRhYmxlQ29sKiBjb2xFbHQgPSB0YWJsZUVsdC0+Y29s
RWxlbWVudChjb2woKSArIChydGwgPyAwIDogY29sU3BhbigpIC0gMSksICZzdGFydENvbEVkZ2Us
ICZlbmRDb2xFZGdlKTsKLSAgICBpZiAoY29sRWx0ICYmICghcnRsID8gZW5kQ29sRWRnZSA6IHN0
YXJ0Q29sRWRnZSkpIHsKLSAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29s
bGFwc2VkQm9yZGVyVmFsdWUoJmNvbEVsdC0+c3R5bGUoKS0+Ym9yZGVyUmlnaHQoKSwgY29sRWx0
LT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IocmlnaHQpLCBCQ09MKSk7CisgICAgUmVu
ZGVyVGFibGVDb2wqIGNvbEVsdCA9IHRhYmxlLT5jb2xFbGVtZW50KGNvbCgpICsgY29sU3Bhbigp
IC0gMSwgJnN0YXJ0Q29sRWRnZSwgJmVuZENvbEVkZ2UpOworICAgIGlmIChjb2xFbHQgJiYgZW5k
Q29sRWRnZSkgeworICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZSgmY29sRWx0LT5zdHlsZSgpLT5ib3JkZXJFbmQoKSwgY29sRWx0LT5zdHls
ZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoZW5kKSwgQkNPTCkpOwogICAgICAgICBpZiAoIXJl
c3VsdC5leGlzdHMoKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIGlmIChj
b2xFbHQtPnBhcmVudCgpLT5pc1RhYmxlQ29sKCkgJiYgKCFydGwgPyAhY29sRWx0LT5uZXh0U2li
bGluZygpIDogIWNvbEVsdC0+cHJldmlvdXNTaWJsaW5nKCkpKSB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSgmY29sRWx0LT5w
YXJlbnQoKS0+c3R5bGUoKS0+Ym9yZGVyUmlnaHQoKSwgY29sRWx0LT5wYXJlbnQoKS0+c3R5bGUo
KS0+dmlzaXRlZERlcGVuZGVudENvbG9yKHJpZ2h0KSwgQkNPTEdST1VQKSk7CisgICAgICAgIGlm
IChjb2xFbHQtPnBhcmVudCgpLT5pc1RhYmxlQ29sKCkgJiYgIWNvbEVsdC0+bmV4dFNpYmxpbmco
KSkgeworICAgICAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUoJmNvbEVsdC0+cGFyZW50KCktPnN0eWxlKCktPmJvcmRlckVuZCgpLCBjb2xF
bHQtPnBhcmVudCgpLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoZW5kKSwgQkNPTEdS
T1VQKSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vICg2KSBUaGUg
bGVmdCBib3JkZXIgb2YgdGhlIGNvbHVtbiB0byB0aGUgcmlnaHQuCi0gICAgaWYgKCFyaWdodG1v
c3RDb2x1bW4pIHsKLSAgICAgICAgY29sRWx0ID0gdGFibGVFbHQtPmNvbEVsZW1lbnQoY29sKCkg
KyAocnRsID8gLTEgOiBjb2xTcGFuKCkpLCAmc3RhcnRDb2xFZGdlLCAmZW5kQ29sRWRnZSk7Ci0g
ICAgICAgIGlmIChjb2xFbHQgJiYgKCFydGwgPyBzdGFydENvbEVkZ2UgOiBlbmRDb2xFZGdlKSkg
ewotICAgICAgICAgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgbGVmdEJvcmRlciA9IENvbGxhcHNl
ZEJvcmRlclZhbHVlKCZjb2xFbHQtPnN0eWxlKCktPmJvcmRlckxlZnQoKSwgY29sRWx0LT5zdHls
ZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IobGVmdCksIEJDT0wpOwotICAgICAgICAgICAgcmVz
dWx0ID0gcnRsID8gY2hvb3NlQm9yZGVyKGxlZnRCb3JkZXIsIHJlc3VsdCkgOiBjaG9vc2VCb3Jk
ZXIocmVzdWx0LCBsZWZ0Qm9yZGVyKTsKKyAgICAvLyAoNikgVGhlIHN0YXJ0IGJvcmRlciBvZiB0
aGUgbmV4dCBjb2x1bW4uCisgICAgaWYgKCFpc0VuZENvbHVtbikgeworICAgICAgICBjb2xFbHQg
PSB0YWJsZS0+Y29sRWxlbWVudChjb2woKSArIGNvbFNwYW4oKSwgJnN0YXJ0Q29sRWRnZSwgJmVu
ZENvbEVkZ2UpOworICAgICAgICBpZiAoY29sRWx0ICYmIHN0YXJ0Q29sRWRnZSkgeworICAgICAg
ICAgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgc3RhcnRCb3JkZXIgPSBDb2xsYXBzZWRCb3JkZXJW
YWx1ZSgmY29sRWx0LT5zdHlsZSgpLT5ib3JkZXJTdGFydCgpLCBjb2xFbHQtPnN0eWxlKCktPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihzdGFydCksIEJDT0wpOworICAgICAgICAgICAgcmVzdWx0ID0g
Y2hvb3NlQm9yZGVyKHJlc3VsdCwgc3RhcnRCb3JkZXIpOwogICAgICAgICAgICAgaWYgKCFyZXN1
bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vICg3KSBUaGUgdGFibGUncyByaWdodCBib3JkZXIuCi0g
ICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVl
KCZ0YWJsZUVsdC0+c3R5bGUoKS0+Ym9yZGVyUmlnaHQoKSwgdGFibGVFbHQtPnN0eWxlKCktPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihyaWdodCksIEJUQUJMRSkpOworICAgICAgICAvLyAoNykgVGhl
IHRhYmxlJ3MgZW5kIGJvcmRlci4KKyAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3Vs
dCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoJnRhYmxlLT5zdHlsZSgpLT5ib3JkZXJFbmQoKSwgdGFi
bGUtPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihlbmQpLCBCVEFCTEUpKTsKICAgICAg
ICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KQEAgLTUyNiwyOCArNTEyLDMwIEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxl
Q2VsbDo6Y28KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Db2xsYXBzZWRCb3JkZXJWYWx1ZSBS
ZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFRvcEJvcmRlcigpIGNvbnN0CitDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEJlZm9yZUJvcmRlcigpIGNvbnN0CiB7
Ci0gICAgLy8gRm9yIGJvcmRlciB0b3AsIHdlIG5lZWQgdG8gY2hlY2ssIGluIG9yZGVyIG9mIHBy
ZWNlZGVuY2U6Ci0gICAgLy8gKDEpIE91ciB0b3AgYm9yZGVyLgotICAgIGludCB0b3AgPSBDU1NQ
cm9wZXJ0eUJvcmRlclRvcENvbG9yOwotICAgIGludCBib3R0b20gPSBDU1NQcm9wZXJ0eUJvcmRl
ckJvdHRvbUNvbG9yOwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHJlc3VsdCA9IENvbGxhcHNl
ZEJvcmRlclZhbHVlKCZzdHlsZSgpLT5ib3JkZXJUb3AoKSwgc3R5bGUoKS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKHRvcCksIEJDRUxMKTsKKyAgICBSZW5kZXJUYWJsZSogdGFibGUgPSB0aGlzLT50
YWJsZSgpOworCisgICAgLy8gRm9yIGJlZm9yZSBib3JkZXIsIHdlIG5lZWQgdG8gY2hlY2ssIGlu
IG9yZGVyIG9mIHByZWNlZGVuY2U6CisgICAgLy8gKDEpIE91ciBiZWZvcmUgYm9yZGVyLgorICAg
IGludCBiZWZvcmUgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHko
Q1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVDb2xvciwgdGFibGUtPnN0eWxlKCktPmRpcmVj
dGlvbigpLCB0YWJsZS0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CisgICAgaW50IGFmdGVyID0g
Q1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyQWZ0ZXJDb2xvciwgdGFibGUtPnN0eWxlKCktPmRpcmVjdGlvbigpLCB0YWJsZS0+
c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0
ID0gQ29sbGFwc2VkQm9yZGVyVmFsdWUoJnN0eWxlKCktPmJvcmRlckJlZm9yZSgpLCBzdHlsZSgp
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoYmVmb3JlKSwgQkNFTEwpOwogICAgIAotICAgIFJlbmRl
clRhYmxlQ2VsbCogcHJldkNlbGwgPSB0YWJsZSgpLT5jZWxsQWJvdmUodGhpcyk7CisgICAgUmVu
ZGVyVGFibGVDZWxsKiBwcmV2Q2VsbCA9IHRhYmxlLT5jZWxsQWJvdmUodGhpcyk7CiAgICAgaWYg
KHByZXZDZWxsKSB7Ci0gICAgICAgIC8vICgyKSBBIHByZXZpb3VzIGNlbGwncyBib3R0b20gYm9y
ZGVyLgotICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIoQ29sbGFwc2VkQm9yZGVyVmFsdWUo
JnByZXZDZWxsLT5zdHlsZSgpLT5ib3JkZXJCb3R0b20oKSwgcHJldkNlbGwtPnN0eWxlKCktPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihib3R0b20pLCBCQ0VMTCksIHJlc3VsdCk7Ci0gICAgICAgIGlm
ICghcmVzdWx0LmV4aXN0cygpKSAKKyAgICAgICAgLy8gKDIpIEEgYmVmb3JlIGNlbGwncyBhZnRl
ciBib3JkZXIuCisgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihDb2xsYXBzZWRCb3JkZXJW
YWx1ZSgmcHJldkNlbGwtPnN0eWxlKCktPmJvcmRlckFmdGVyKCksIHByZXZDZWxsLT5zdHlsZSgp
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoYWZ0ZXIpLCBCQ0VMTCksIHJlc3VsdCk7CisgICAgICAg
IGlmICghcmVzdWx0LmV4aXN0cygpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAgICAgCi0gICAgLy8gKDMpIE91ciByb3cncyB0b3AgYm9yZGVyLgotICAgIHJlc3VsdCA9IGNo
b29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKCZwYXJlbnQoKS0+c3R5bGUo
KS0+Ym9yZGVyVG9wKCksIHBhcmVudCgpLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
dG9wKSwgQlJPVykpOworICAgIC8vICgzKSBPdXIgcm93J3MgYmVmb3JlIGJvcmRlci4KKyAgICBy
ZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSgmcGFyZW50
KCktPnN0eWxlKCktPmJvcmRlckJlZm9yZSgpLCBwYXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKGJlZm9yZSksIEJST1cpKTsKICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKLSAgICAvLyAoNCkgVGhlIHByZXZpb3VzIHJv
dydzIGJvdHRvbSBib3JkZXIuCisgICAgLy8gKDQpIFRoZSBwcmV2aW91cyByb3cncyBhZnRlciBi
b3JkZXIuCiAgICAgaWYgKHByZXZDZWxsKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogcHJldlJv
dyA9IDA7CiAgICAgICAgIGlmIChwcmV2Q2VsbC0+c2VjdGlvbigpID09IHNlY3Rpb24oKSkKQEAg
LTU1Niw3ICs1NDQsNyBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNv
CiAgICAgICAgICAgICBwcmV2Um93ID0gcHJldkNlbGwtPnNlY3Rpb24oKS0+bGFzdENoaWxkKCk7
CiAgICAgCiAgICAgICAgIGlmIChwcmV2Um93KSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBjaG9v
c2VCb3JkZXIoQ29sbGFwc2VkQm9yZGVyVmFsdWUoJnByZXZSb3ctPnN0eWxlKCktPmJvcmRlckJv
dHRvbSgpLCBwcmV2Um93LT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoYm90dG9tKSwg
QlJPVyksIHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIoQ29sbGFw
c2VkQm9yZGVyVmFsdWUoJnByZXZSb3ctPnN0eWxlKCktPmJvcmRlckFmdGVyKCksIHByZXZSb3ct
PnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihhZnRlciksIEJST1cpLCByZXN1bHQpOwog
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgfQpAQCAtNTY1LDM3ICs1NTMsMzYgQEAgQ29sbGFwc2VkQm9yZGVy
VmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjbwogICAgIC8vIE5vdyBjaGVjayByb3cgZ3JvdXBzLgog
ICAgIFJlbmRlclRhYmxlU2VjdGlvbiogY3VyclNlY3Rpb24gPSBzZWN0aW9uKCk7CiAgICAgaWYg
KCFyb3coKSkgewotICAgICAgICAvLyAoNSkgT3VyIHJvdyBncm91cCdzIHRvcCBib3JkZXIuCi0g
ICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVl
KCZjdXJyU2VjdGlvbi0+c3R5bGUoKS0+Ym9yZGVyVG9wKCksIGN1cnJTZWN0aW9uLT5zdHlsZSgp
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IodG9wKSwgQlJPV0dST1VQKSk7CisgICAgICAgIC8vICg1
KSBPdXIgcm93IGdyb3VwJ3MgYmVmb3JlIGJvcmRlci4KKyAgICAgICAgcmVzdWx0ID0gY2hvb3Nl
Qm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoJmN1cnJTZWN0aW9uLT5zdHlsZSgp
LT5ib3JkZXJCZWZvcmUoKSwgY3VyclNlY3Rpb24tPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihiZWZvcmUpLCBCUk9XR1JPVVApKTsKICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkp
CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAKLSAgICAgICAgLy8gKDYpIFBy
ZXZpb3VzIHJvdyBncm91cCdzIGJvdHRvbSBib3JkZXIuCi0gICAgICAgIGN1cnJTZWN0aW9uID0g
dGFibGUoKS0+c2VjdGlvbkFib3ZlKGN1cnJTZWN0aW9uKTsKKyAgICAgICAgLy8gKDYpIFByZXZp
b3VzIHJvdyBncm91cCdzIGFmdGVyIGJvcmRlci4KKyAgICAgICAgY3VyclNlY3Rpb24gPSB0YWJs
ZS0+c2VjdGlvbkFib3ZlKGN1cnJTZWN0aW9uKTsKICAgICAgICAgaWYgKGN1cnJTZWN0aW9uKSB7
Ci0gICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIoQ29sbGFwc2VkQm9yZGVyVmFsdWUo
JmN1cnJTZWN0aW9uLT5zdHlsZSgpLT5ib3JkZXJCb3R0b20oKSwgY3VyclNlY3Rpb24tPnN0eWxl
KCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihib3R0b20pLCBCUk9XR1JPVVApLCByZXN1bHQpOwor
ICAgICAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKENvbGxhcHNlZEJvcmRlclZhbHVlKCZj
dXJyU2VjdGlvbi0+c3R5bGUoKS0+Ym9yZGVyQWZ0ZXIoKSwgY3VyclNlY3Rpb24tPnN0eWxlKCkt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihhZnRlciksIEJST1dHUk9VUCksIHJlc3VsdCk7CiAgICAg
ICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGlmICghY3VyclNlY3Rpb24pIHsKLSAg
ICAgICAgLy8gKDgpIE91ciBjb2x1bW4gYW5kIGNvbHVtbiBncm91cCdzIHRvcCBib3JkZXJzLgot
ICAgICAgICBSZW5kZXJUYWJsZUNvbCogY29sRWx0ID0gdGFibGUoKS0+Y29sRWxlbWVudChjb2wo
KSk7CisgICAgICAgIC8vICg4KSBPdXIgY29sdW1uIGFuZCBjb2x1bW4gZ3JvdXAncyBiZWZvcmUg
Ym9yZGVycy4KKyAgICAgICAgUmVuZGVyVGFibGVDb2wqIGNvbEVsdCA9IHRhYmxlLT5jb2xFbGVt
ZW50KGNvbCgpKTsKICAgICAgICAgaWYgKGNvbEVsdCkgewotICAgICAgICAgICAgcmVzdWx0ID0g
Y2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoJmNvbEVsdC0+c3R5bGUo
KS0+Ym9yZGVyVG9wKCksIGNvbEVsdC0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKHRv
cCksIEJDT0wpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENv
bGxhcHNlZEJvcmRlclZhbHVlKCZjb2xFbHQtPnN0eWxlKCktPmJvcmRlckJlZm9yZSgpLCBjb2xF
bHQtPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihiZWZvcmUpLCBCQ09MKSk7CiAgICAg
ICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICAgICAgaWYgKGNvbEVsdC0+cGFyZW50KCktPmlzVGFibGVDb2woKSkgewot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJv
cmRlclZhbHVlKCZjb2xFbHQtPnBhcmVudCgpLT5zdHlsZSgpLT5ib3JkZXJUb3AoKSwgY29sRWx0
LT5wYXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKHRvcCksIEJDT0xHUk9V
UCkpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxh
cHNlZEJvcmRlclZhbHVlKCZjb2xFbHQtPnBhcmVudCgpLT5zdHlsZSgpLT5ib3JkZXJCZWZvcmUo
KSwgY29sRWx0LT5wYXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKGJlZm9y
ZSksIEJDT0xHUk9VUCkpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICAvLyAoOSkgVGhlIHRhYmxlJ3MgdG9wIGJvcmRlci4KLSAg
ICAgICAgUmVuZGVyVGFibGUqIGVuY2xvc2luZ1RhYmxlID0gdGFibGUoKTsKLSAgICAgICAgcmVz
dWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoJmVuY2xvc2lu
Z1RhYmxlLT5zdHlsZSgpLT5ib3JkZXJUb3AoKSwgZW5jbG9zaW5nVGFibGUtPnN0eWxlKCktPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcih0b3ApLCBCVEFCTEUpKTsKKyAgICAgICAgLy8gKDkpIFRoZSB0
YWJsZSdzIGJlZm9yZSBib3JkZXIuCisgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1
bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKCZ0YWJsZS0+c3R5bGUoKS0+Ym9yZGVyQmVmb3JlKCks
IHRhYmxlLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoYmVmb3JlKSwgQlRBQkxFKSk7
CiAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CkBAIC02MDMsMzAgKzU5MCwzMiBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5k
ZXJUYWJsZUNlbGw6OmNvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQ29sbGFwc2VkQm9yZGVy
VmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRCb3R0b21Cb3JkZXIoKSBjb25zdAorQ29s
bGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRBZnRlckJvcmRlcigp
IGNvbnN0CiB7Ci0gICAgLy8gRm9yIGJvcmRlciB0b3AsIHdlIG5lZWQgdG8gY2hlY2ssIGluIG9y
ZGVyIG9mIHByZWNlZGVuY2U6Ci0gICAgLy8gKDEpIE91ciBib3R0b20gYm9yZGVyLgotICAgIGlu
dCB0b3AgPSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOwotICAgIGludCBib3R0b20gPSBDU1NQ
cm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yOwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHJlc3Vs
dCA9IENvbGxhcHNlZEJvcmRlclZhbHVlKCZzdHlsZSgpLT5ib3JkZXJCb3R0b20oKSwgc3R5bGUo
KS0+dmlzaXRlZERlcGVuZGVudENvbG9yKGJvdHRvbSksIEJDRUxMKTsKKyAgICBSZW5kZXJUYWJs
ZSogdGFibGUgPSB0aGlzLT50YWJsZSgpOworCisgICAgLy8gRm9yIGFmdGVyIGJvcmRlciwgd2Ug
bmVlZCB0byBjaGVjaywgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKKyAgICAvLyAoMSkgT3VyIGFm
dGVyIGJvcmRlci4KKyAgICBpbnQgYmVmb3JlID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rp
b25Bd2FyZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlQ29sb3IsIHRhYmxl
LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSwgdGFibGUtPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOwor
ICAgIGludCBhZnRlciA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVyQ29sb3IsIHRhYmxlLT5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSwgdGFibGUtPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOworICAgIENvbGxhcHNlZEJv
cmRlclZhbHVlIHJlc3VsdCA9IENvbGxhcHNlZEJvcmRlclZhbHVlKCZzdHlsZSgpLT5ib3JkZXJB
ZnRlcigpLCBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoYWZ0ZXIpLCBCQ0VMTCk7CiAg
ICAgCi0gICAgUmVuZGVyVGFibGVDZWxsKiBuZXh0Q2VsbCA9IHRhYmxlKCktPmNlbGxCZWxvdyh0
aGlzKTsKKyAgICBSZW5kZXJUYWJsZUNlbGwqIG5leHRDZWxsID0gdGFibGUtPmNlbGxCZWxvdyh0
aGlzKTsKICAgICBpZiAobmV4dENlbGwpIHsKLSAgICAgICAgLy8gKDIpIEEgZm9sbG93aW5nIGNl
bGwncyB0b3AgYm9yZGVyLgotICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBD
b2xsYXBzZWRCb3JkZXJWYWx1ZSgmbmV4dENlbGwtPnN0eWxlKCktPmJvcmRlclRvcCgpLCBuZXh0
Q2VsbC0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKHRvcCksIEJDRUxMKSk7CisgICAg
ICAgIC8vICgyKSBBbiBhZnRlciBjZWxsJ3MgYmVmb3JlIGJvcmRlci4KKyAgICAgICAgcmVzdWx0
ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoJm5leHRDZWxsLT5z
dHlsZSgpLT5ib3JkZXJCZWZvcmUoKSwgbmV4dENlbGwtPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihiZWZvcmUpLCBCQ0VMTCkpOwogICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkK
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIC8vICgzKSBPdXIg
cm93J3MgYm90dG9tIGJvcmRlci4gKEZJWE1FOiBEZWFsIHdpdGggcm93c3BhbiEpCi0gICAgcmVz
dWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoJnBhcmVudCgp
LT5zdHlsZSgpLT5ib3JkZXJCb3R0b20oKSwgcGFyZW50KCktPnN0eWxlKCktPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihib3R0b20pLCBCUk9XKSk7CisgICAgLy8gKDMpIE91ciByb3cncyBhZnRlciBi
b3JkZXIuIChGSVhNRTogRGVhbCB3aXRoIHJvd3NwYW4hKQorICAgIHJlc3VsdCA9IGNob29zZUJv
cmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKCZwYXJlbnQoKS0+c3R5bGUoKS0+Ym9y
ZGVyQWZ0ZXIoKSwgcGFyZW50KCktPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihhZnRl
ciksIEJST1cpKTsKICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICAKLSAgICAvLyAoNCkgVGhlIG5leHQgcm93J3MgdG9wIGJvcmRlci4KKyAgICAv
LyAoNCkgVGhlIG5leHQgcm93J3MgYmVmb3JlIGJvcmRlci4KICAgICBpZiAobmV4dENlbGwpIHsK
LSAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFs
dWUoJm5leHRDZWxsLT5wYXJlbnQoKS0+c3R5bGUoKS0+Ym9yZGVyVG9wKCksIG5leHRDZWxsLT5w
YXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKHRvcCksIEJST1cpKTsKKyAg
ICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUo
Jm5leHRDZWxsLT5wYXJlbnQoKS0+c3R5bGUoKS0+Ym9yZGVyQmVmb3JlKCksIG5leHRDZWxsLT5w
YXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKGJlZm9yZSksIEJST1cpKTsK
ICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KQEAgLTYzNCwzNiArNjIzLDM1IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRl
clRhYmxlQ2VsbDo6Y28KICAgICAvLyBOb3cgY2hlY2sgcm93IGdyb3Vwcy4KICAgICBSZW5kZXJU
YWJsZVNlY3Rpb24qIGN1cnJTZWN0aW9uID0gc2VjdGlvbigpOwogICAgIGlmIChyb3coKSArIHJv
d1NwYW4oKSA+PSBjdXJyU2VjdGlvbi0+bnVtUm93cygpKSB7Ci0gICAgICAgIC8vICg1KSBPdXIg
cm93IGdyb3VwJ3MgYm90dG9tIGJvcmRlci4KLSAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVy
KHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoJmN1cnJTZWN0aW9uLT5zdHlsZSgpLT5ib3Jk
ZXJCb3R0b20oKSwgY3VyclNlY3Rpb24tPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihi
b3R0b20pLCBCUk9XR1JPVVApKTsKKyAgICAgICAgLy8gKDUpIE91ciByb3cgZ3JvdXAncyBhZnRl
ciBib3JkZXIuCisgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNl
ZEJvcmRlclZhbHVlKCZjdXJyU2VjdGlvbi0+c3R5bGUoKS0+Ym9yZGVyQWZ0ZXIoKSwgY3VyclNl
Y3Rpb24tPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihhZnRlciksIEJST1dHUk9VUCkp
OwogICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICAgIAotICAgICAgICAvLyAoNikgRm9sbG93aW5nIHJvdyBncm91cCdzIHRvcCBi
b3JkZXIuCi0gICAgICAgIGN1cnJTZWN0aW9uID0gdGFibGUoKS0+c2VjdGlvbkJlbG93KGN1cnJT
ZWN0aW9uKTsKKyAgICAgICAgLy8gKDYpIEZvbGxvd2luZyByb3cgZ3JvdXAncyBiZWZvcmUgYm9y
ZGVyLgorICAgICAgICBjdXJyU2VjdGlvbiA9IHRhYmxlLT5zZWN0aW9uQmVsb3coY3VyclNlY3Rp
b24pOwogICAgICAgICBpZiAoY3VyclNlY3Rpb24pIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNo
b29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKCZjdXJyU2VjdGlvbi0+c3R5
bGUoKS0+Ym9yZGVyVG9wKCksIGN1cnJTZWN0aW9uLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IodG9wKSwgQlJPV0dST1VQKSk7CisgICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3Jk
ZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSgmY3VyclNlY3Rpb24tPnN0eWxlKCktPmJv
cmRlckJlZm9yZSgpLCBjdXJyU2VjdGlvbi0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KGJlZm9yZSksIEJST1dHUk9VUCkpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KICAgICAK
ICAgICBpZiAoIWN1cnJTZWN0aW9uKSB7Ci0gICAgICAgIC8vICg4KSBPdXIgY29sdW1uIGFuZCBj
b2x1bW4gZ3JvdXAncyBib3R0b20gYm9yZGVycy4KLSAgICAgICAgUmVuZGVyVGFibGVDb2wqIGNv
bEVsdCA9IHRhYmxlKCktPmNvbEVsZW1lbnQoY29sKCkpOworICAgICAgICAvLyAoOCkgT3VyIGNv
bHVtbiBhbmQgY29sdW1uIGdyb3VwJ3MgYWZ0ZXIgYm9yZGVycy4KKyAgICAgICAgUmVuZGVyVGFi
bGVDb2wqIGNvbEVsdCA9IHRhYmxlLT5jb2xFbGVtZW50KGNvbCgpKTsKICAgICAgICAgaWYgKGNv
bEVsdCkgewotICAgICAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFw
c2VkQm9yZGVyVmFsdWUoJmNvbEVsdC0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tKCksIGNvbEVsdC0+
c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKGJvdHRvbSksIEJDT0wpKTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKCZj
b2xFbHQtPnN0eWxlKCktPmJvcmRlckFmdGVyKCksIGNvbEVsdC0+c3R5bGUoKS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKGFmdGVyKSwgQkNPTCkpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXhp
c3RzKCkpIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICBpZiAoY29sRWx0LT5wYXJlbnQoKS0+
aXNUYWJsZUNvbCgpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJl
c3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoJmNvbEVsdC0+cGFyZW50KCktPnN0eWxlKCktPmJv
cmRlckJvdHRvbSgpLCBjb2xFbHQtPnBhcmVudCgpLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoYm90dG9tKSwgQkNPTEdST1VQKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2hv
b3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoJmNvbEVsdC0+cGFyZW50KCkt
PnN0eWxlKCktPmJvcmRlckFmdGVyKCksIGNvbEVsdC0+cGFyZW50KCktPnN0eWxlKCktPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihhZnRlciksIEJDT0xHUk9VUCkpOwogICAgICAgICAgICAgICAgIGlm
ICghcmVzdWx0LmV4aXN0cygpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyAoOSkgVGhlIHRh
YmxlJ3MgYm90dG9tIGJvcmRlci4KLSAgICAgICAgUmVuZGVyVGFibGUqIGVuY2xvc2luZ1RhYmxl
ID0gdGFibGUoKTsKLSAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFw
c2VkQm9yZGVyVmFsdWUoJmVuY2xvc2luZ1RhYmxlLT5zdHlsZSgpLT5ib3JkZXJCb3R0b20oKSwg
ZW5jbG9zaW5nVGFibGUtPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihib3R0b20pLCBC
VEFCTEUpKTsKKyAgICAgICAgLy8gKDkpIFRoZSB0YWJsZSdzIGFmdGVyIGJvcmRlci4KKyAgICAg
ICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoJnRh
YmxlLT5zdHlsZSgpLT5ib3JkZXJBZnRlcigpLCB0YWJsZS0+c3R5bGUoKS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKGFmdGVyKSwgQlRBQkxFKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygp
KQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC02NzEsNiArNjU5LDM0IEBA
IENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y28KICAgICByZXR1cm4gcmVz
dWx0OyAgICAKIH0KIAorQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xs
YXBzZWRMZWZ0Qm9yZGVyKCkgY29uc3QKK3sKKyAgICBpZiAodGFibGUoKS0+c3R5bGUoKS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRhYmxlKCktPnN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKCkgOiBjb2xs
YXBzZWRFbmRCb3JkZXIoKTsKKyAgICByZXR1cm4gdGFibGUoKS0+c3R5bGUoKS0+aXNGbGlwcGVk
QmxvY2tzV3JpdGluZ01vZGUoKSA/IGNvbGxhcHNlZEFmdGVyQm9yZGVyKCkgOiBjb2xsYXBzZWRC
ZWZvcmVCb3JkZXIoKTsKK30KKworQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxs
Ojpjb2xsYXBzZWRSaWdodEJvcmRlcigpIGNvbnN0Cit7CisgICAgaWYgKHRhYmxlKCktPnN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIHJldHVybiB0YWJsZSgpLT5z
dHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBzZWRFbmRCb3JkZXIoKSA6
IGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKCk7CisgICAgcmV0dXJuIHRhYmxlKCktPnN0eWxlKCktPmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBjb2xsYXBzZWRCZWZvcmVCb3JkZXIoKSA6IGNv
bGxhcHNlZEFmdGVyQm9yZGVyKCk7Cit9CisKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRh
YmxlQ2VsbDo6Y29sbGFwc2VkVG9wQm9yZGVyKCkgY29uc3QKK3sKKyAgICBpZiAodGFibGUoKS0+
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRhYmxl
KCktPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBjb2xsYXBzZWRBZnRl
ckJvcmRlcigpIDogY29sbGFwc2VkQmVmb3JlQm9yZGVyKCk7CisgICAgcmV0dXJuIHRhYmxlKCkt
PnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNvbGxhcHNlZFN0YXJ0Qm9yZGVy
KCkgOiBjb2xsYXBzZWRFbmRCb3JkZXIoKTsKK30KKworQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVu
ZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRCb3R0b21Cb3JkZXIoKSBjb25zdAoreworICAgIGlmICh0
YWJsZSgpLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICByZXR1
cm4gdGFibGUoKS0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IGNvbGxh
cHNlZEJlZm9yZUJvcmRlcigpIDogY29sbGFwc2VkQWZ0ZXJCb3JkZXIoKTsKKyAgICByZXR1cm4g
dGFibGUoKS0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY29sbGFwc2VkRW5k
Qm9yZGVyKCkgOiBjb2xsYXBzZWRTdGFydEJvcmRlcigpOworfQorCiBpbnQgUmVuZGVyVGFibGVD
ZWxsOjpib3JkZXJMZWZ0KCkgY29uc3QKIHsKICAgICByZXR1cm4gdGFibGUoKS0+Y29sbGFwc2VC
b3JkZXJzKCkgPyBib3JkZXJIYWxmTGVmdChmYWxzZSkgOiBSZW5kZXJCbG9jazo6Ym9yZGVyTGVm
dCgpOwpAQCAtNjk1LDUzICs3MTEsODEgQEAgaW50IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVyQm90
dG9tKCkgY29ucwogLy8gd29yayB3aXRoIGRpZmZlcmVudCBibG9jayBmbG93IHZhbHVlcyBpbnN0
ZWFkIG9mIGJlaW5nIGhhcmQtY29kZWQgdG8gdG9wLXRvLWJvdHRvbS4KIGludCBSZW5kZXJUYWJs
ZUNlbGw6OmJvcmRlclN0YXJ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGFibGUoKS0+Y29sbGFw
c2VCb3JkZXJzKCkgPyBib3JkZXJIYWxmTGVmdChmYWxzZSkgOiBSZW5kZXJCbG9jazo6Ym9yZGVy
U3RhcnQoKTsKKyAgICByZXR1cm4gdGFibGUoKS0+Y29sbGFwc2VCb3JkZXJzKCkgPyBib3JkZXJI
YWxmU3RhcnQoZmFsc2UpIDogUmVuZGVyQmxvY2s6OmJvcmRlclN0YXJ0KCk7CiB9CiAKIGludCBS
ZW5kZXJUYWJsZUNlbGw6OmJvcmRlckVuZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRhYmxlKCkt
PmNvbGxhcHNlQm9yZGVycygpID8gYm9yZGVySGFsZlJpZ2h0KGZhbHNlKSA6IFJlbmRlckJsb2Nr
Ojpib3JkZXJFbmQoKTsKKyAgICByZXR1cm4gdGFibGUoKS0+Y29sbGFwc2VCb3JkZXJzKCkgPyBi
b3JkZXJIYWxmRW5kKGZhbHNlKSA6IFJlbmRlckJsb2NrOjpib3JkZXJFbmQoKTsKIH0KIAogaW50
IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVyQmVmb3JlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGFi
bGUoKS0+Y29sbGFwc2VCb3JkZXJzKCkgPyBib3JkZXJIYWxmVG9wKGZhbHNlKSA6IFJlbmRlckJs
b2NrOjpib3JkZXJCZWZvcmUoKTsKKyAgICByZXR1cm4gdGFibGUoKS0+Y29sbGFwc2VCb3JkZXJz
KCkgPyBib3JkZXJIYWxmQmVmb3JlKGZhbHNlKSA6IFJlbmRlckJsb2NrOjpib3JkZXJCZWZvcmUo
KTsKIH0KIAogaW50IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVyQWZ0ZXIoKSBjb25zdAogewotICAg
IHJldHVybiB0YWJsZSgpLT5jb2xsYXBzZUJvcmRlcnMoKSA/IGJvcmRlckhhbGZCb3R0b20oZmFs
c2UpIDogUmVuZGVyQmxvY2s6OmJvcmRlckFmdGVyKCk7CisgICAgcmV0dXJuIHRhYmxlKCktPmNv
bGxhcHNlQm9yZGVycygpID8gYm9yZGVySGFsZkFmdGVyKGZhbHNlKSA6IFJlbmRlckJsb2NrOjpi
b3JkZXJBZnRlcigpOwogfQogCiBpbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmTGVmdChi
b29sIG91dGVyKSBjb25zdAogewotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJvcmRlciA9IGNv
bGxhcHNlZExlZnRCb3JkZXIoIXRhYmxlKCktPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSk7CisgICAgaWYgKHRhYmxlKCktPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCisgICAgICAgIHJldHVybiB0YWJsZSgpLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBib3JkZXJIYWxmU3RhcnQob3V0ZXIpIDogYm9yZGVySGFsZkVuZChvdXRlcik7Cisg
ICAgcmV0dXJuIHRhYmxlKCktPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkg
PyBib3JkZXJIYWxmQWZ0ZXIob3V0ZXIpIDogYm9yZGVySGFsZkJlZm9yZShvdXRlcik7Cit9CisK
K2ludCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZSaWdodChib29sIG91dGVyKSBjb25zdAor
eworICAgIGlmICh0YWJsZSgpLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQor
ICAgICAgICByZXR1cm4gdGFibGUoKS0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gYm9yZGVySGFsZkVuZChvdXRlcikgOiBib3JkZXJIYWxmU3RhcnQob3V0ZXIpOworICAgIHJl
dHVybiB0YWJsZSgpLT5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gYm9y
ZGVySGFsZkJlZm9yZShvdXRlcikgOiBib3JkZXJIYWxmQWZ0ZXIob3V0ZXIpOworfQorCitpbnQg
UmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmVG9wKGJvb2wgb3V0ZXIpIGNvbnN0Cit7CisgICAg
aWYgKHRhYmxlKCktPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAg
IHJldHVybiB0YWJsZSgpLT5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8g
Ym9yZGVySGFsZkFmdGVyKG91dGVyKSA6IGJvcmRlckhhbGZCZWZvcmUob3V0ZXIpOworICAgIHJl
dHVybiB0YWJsZSgpLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBib3JkZXJI
YWxmU3RhcnQob3V0ZXIpIDogYm9yZGVySGFsZkVuZChvdXRlcik7Cit9CisKK2ludCBSZW5kZXJU
YWJsZUNlbGw6OmJvcmRlckhhbGZCb3R0b20oYm9vbCBvdXRlcikgY29uc3QKK3sKKyAgICBpZiAo
dGFibGUoKS0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgcmV0
dXJuIHRhYmxlKCktPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBib3Jk
ZXJIYWxmQmVmb3JlKG91dGVyKSA6IGJvcmRlckhhbGZBZnRlcihvdXRlcik7CisgICAgcmV0dXJu
IHRhYmxlKCktPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGJvcmRlckhhbGZF
bmQob3V0ZXIpIDogYm9yZGVySGFsZlN0YXJ0KG91dGVyKTsKK30KKworaW50IFJlbmRlclRhYmxl
Q2VsbDo6Ym9yZGVySGFsZlN0YXJ0KGJvb2wgb3V0ZXIpIGNvbnN0Cit7CisgICAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgYm9yZGVyID0gY29sbGFwc2VkU3RhcnRCb3JkZXIoKTsKICAgICBpZiAoYm9y
ZGVyLmV4aXN0cygpKQotICAgICAgICByZXR1cm4gKGJvcmRlci53aWR0aCgpICsgKG91dGVyID8g
MCA6IDEpKSAvIDI7IC8vIEdpdmUgdGhlIGV4dHJhIHBpeGVsIHRvIHRvcCBhbmQgbGVmdC4KKyAg
ICAgICAgcmV0dXJuIChib3JkZXIud2lkdGgoKSArICgodGFibGUoKS0+c3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpIF4gb3V0ZXIpID8gMSA6IDApKSAvIDI7IC8vIEdpdmUgdGhlIGV4
dHJhIHBpeGVsIHRvIHRvcCBhbmQgbGVmdC4KICAgICByZXR1cm4gMDsKIH0KICAgICAKLWludCBS
ZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZSaWdodChib29sIG91dGVyKSBjb25zdAoraW50IFJl
bmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZkVuZChib29sIG91dGVyKSBjb25zdAogewotICAgIENv
bGxhcHNlZEJvcmRlclZhbHVlIGJvcmRlciA9IGNvbGxhcHNlZFJpZ2h0Qm9yZGVyKCF0YWJsZSgp
LT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOworICAgIENvbGxhcHNlZEJvcmRl
clZhbHVlIGJvcmRlciA9IGNvbGxhcHNlZEVuZEJvcmRlcigpOwogICAgIGlmIChib3JkZXIuZXhp
c3RzKCkpCi0gICAgICAgIHJldHVybiAoYm9yZGVyLndpZHRoKCkgKyAob3V0ZXIgPyAxIDogMCkp
IC8gMjsKKyAgICAgICAgcmV0dXJuIChib3JkZXIud2lkdGgoKSArICgodGFibGUoKS0+c3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIF4gb3V0ZXIpID8gMCA6IDEpKSAvIDI7CiAgICAg
cmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZUb3AoYm9vbCBv
dXRlcikgY29uc3QKK2ludCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZCZWZvcmUoYm9vbCBv
dXRlcikgY29uc3QKIHsKLSAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBib3JkZXIgPSBjb2xsYXBz
ZWRUb3BCb3JkZXIoKTsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBib3JkZXIgPSBjb2xsYXBz
ZWRCZWZvcmVCb3JkZXIoKTsKICAgICBpZiAoYm9yZGVyLmV4aXN0cygpKQotICAgICAgICByZXR1
cm4gKGJvcmRlci53aWR0aCgpICsgKG91dGVyID8gMCA6IDEpKSAvIDI7IC8vIEdpdmUgdGhlIGV4
dHJhIHBpeGVsIHRvIHRvcCBhbmQgbGVmdC4KKyAgICAgICAgcmV0dXJuIChib3JkZXIud2lkdGgo
KSArICgodGFibGUoKS0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSBeIG91
dGVyKSA/IDAgOiAxKSkgLyAyOyAvLyBHaXZlIHRoZSBleHRyYSBwaXhlbCB0byB0b3AgYW5kIGxl
ZnQuCiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZC
b3R0b20oYm9vbCBvdXRlcikgY29uc3QKK2ludCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZB
ZnRlcihib29sIG91dGVyKSBjb25zdAogewotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJvcmRl
ciA9IGNvbGxhcHNlZEJvdHRvbUJvcmRlcigpOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJv
cmRlciA9IGNvbGxhcHNlZEFmdGVyQm9yZGVyKCk7CiAgICAgaWYgKGJvcmRlci5leGlzdHMoKSkK
LSAgICAgICAgcmV0dXJuIChib3JkZXIud2lkdGgoKSArIChvdXRlciA/IDEgOiAwKSkgLyAyOwor
ICAgICAgICByZXR1cm4gKGJvcmRlci53aWR0aCgpICsgKCh0YWJsZSgpLT5zdHlsZSgpLT5pc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpIF4gb3V0ZXIpID8gMSA6IDApKSAvIDI7CiAgICAgcmV0
dXJuIDA7CiB9CiAKQEAgLTgzNSwxMSArODc5LDEwIEBAIHN0YXRpYyB2b2lkIGFkZEJvcmRlclN0
eWxlKFJlbmRlclRhYmxlQ2UKIAogdm9pZCBSZW5kZXJUYWJsZUNlbGw6OmNvbGxlY3RCb3JkZXJT
dHlsZXMoQ29sbGFwc2VkQm9yZGVyU3R5bGVzJiBib3JkZXJTdHlsZXMpIGNvbnN0CiB7Ci0gICAg
Ym9vbCBydGwgPSAhdGFibGUoKS0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwot
ICAgIGFkZEJvcmRlclN0eWxlKGJvcmRlclN0eWxlcywgY29sbGFwc2VkTGVmdEJvcmRlcihydGwp
KTsKLSAgICBhZGRCb3JkZXJTdHlsZShib3JkZXJTdHlsZXMsIGNvbGxhcHNlZFJpZ2h0Qm9yZGVy
KHJ0bCkpOwotICAgIGFkZEJvcmRlclN0eWxlKGJvcmRlclN0eWxlcywgY29sbGFwc2VkVG9wQm9y
ZGVyKCkpOwotICAgIGFkZEJvcmRlclN0eWxlKGJvcmRlclN0eWxlcywgY29sbGFwc2VkQm90dG9t
Qm9yZGVyKCkpOworICAgIGFkZEJvcmRlclN0eWxlKGJvcmRlclN0eWxlcywgY29sbGFwc2VkU3Rh
cnRCb3JkZXIoKSk7CisgICAgYWRkQm9yZGVyU3R5bGUoYm9yZGVyU3R5bGVzLCBjb2xsYXBzZWRF
bmRCb3JkZXIoKSk7CisgICAgYWRkQm9yZGVyU3R5bGUoYm9yZGVyU3R5bGVzLCBjb2xsYXBzZWRC
ZWZvcmVCb3JkZXIoKSk7CisgICAgYWRkQm9yZGVyU3R5bGUoYm9yZGVyU3R5bGVzLCBjb2xsYXBz
ZWRBZnRlckJvcmRlcigpKTsKIH0KIAogc3RhdGljIGludCBjb21wYXJlQm9yZGVyU3R5bGVzRm9y
UVNvcnQoY29uc3Qgdm9pZCogcGEsIGNvbnN0IHZvaWQqIHBiKQpAQCAtODYyLDkgKzkwNSw4IEBA
IHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludENvbGxhcHNlZEJvcmQKICAgICBpZiAoIXRhYmxl
KCktPmN1cnJlbnRCb3JkZXJTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYm9v
bCBydGwgPSAhdGFibGUoKS0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAg
IENvbGxhcHNlZEJvcmRlclZhbHVlIGxlZnRWYWwgPSBjb2xsYXBzZWRMZWZ0Qm9yZGVyKHJ0bCk7
Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmlnaHRWYWwgPSBjb2xsYXBzZWRSaWdodEJvcmRl
cihydGwpOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGxlZnRWYWwgPSBjb2xsYXBzZWRMZWZ0
Qm9yZGVyKCk7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmlnaHRWYWwgPSBjb2xsYXBzZWRS
aWdodEJvcmRlcigpOwogICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHRvcFZhbCA9IGNvbGxhcHNl
ZFRvcEJvcmRlcigpOwogICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJvdHRvbVZhbCA9IGNvbGxh
cHNlZEJvdHRvbUJvcmRlcigpOwogICAgICAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5oCShyZXZpc2lvbiA3MTI0MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEsMTEgQEAgcHVibGljOgogICAgIFJl
bmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRvUmVuZGVyVGFibGVT
ZWN0aW9uKHBhcmVudCgpLT5wYXJlbnQoKSk7IH0KICAgICBSZW5kZXJUYWJsZSogdGFibGUoKSBj
b25zdCB7IHJldHVybiB0b1JlbmRlclRhYmxlKHBhcmVudCgpLT5wYXJlbnQoKS0+cGFyZW50KCkp
OyB9CiAKLSAgICBMZW5ndGggc3R5bGVPckNvbFdpZHRoKCkgY29uc3Q7CisgICAgTGVuZ3RoIHN0
eWxlT3JDb2xMb2dpY2FsV2lkdGgoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogCi0gICAgdm9pZCB1cGRhdGVXaWR0aChpbnQpOwor
ICAgIHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoKGludCk7CiAKICAgICB2aXJ0dWFsIGludCBib3Jk
ZXJMZWZ0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgYm9yZGVyUmlnaHQoKSBjb25zdDsKQEAg
LTcxLDggKzcxLDE4IEBAIHB1YmxpYzoKICAgICBpbnQgYm9yZGVySGFsZlRvcChib29sIG91dGVy
KSBjb25zdDsKICAgICBpbnQgYm9yZGVySGFsZkJvdHRvbShib29sIG91dGVyKSBjb25zdDsKIAot
ICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZExlZnRCb3JkZXIoYm9vbCBydGwpIGNv
bnN0OwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZFJpZ2h0Qm9yZGVyKGJvb2wg
cnRsKSBjb25zdDsKKyAgICBpbnQgYm9yZGVySGFsZlN0YXJ0KGJvb2wgb3V0ZXIpIGNvbnN0Owor
ICAgIGludCBib3JkZXJIYWxmRW5kKGJvb2wgb3V0ZXIpIGNvbnN0OworICAgIGludCBib3JkZXJI
YWxmQmVmb3JlKGJvb2wgb3V0ZXIpIGNvbnN0OworICAgIGludCBib3JkZXJIYWxmQWZ0ZXIoYm9v
bCBvdXRlcikgY29uc3Q7CisKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRTdGFy
dEJvcmRlcigpIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZEVuZEJv
cmRlcigpIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZEJlZm9yZUJv
cmRlcigpIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZEFmdGVyQm9y
ZGVyKCkgY29uc3Q7CisKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRMZWZ0Qm9y
ZGVyKCkgY29uc3Q7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkUmlnaHRCb3Jk
ZXIoKSBjb25zdDsKICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRUb3BCb3JkZXIo
KSBjb25zdDsKICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRCb3R0b21Cb3JkZXIo
KSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
CShyZXZpc2lvbiA3MTI0MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsyODEsNyBAQCB2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6c2V0Q2VsbFdpZHRocygpCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgY2VsbC0+cmVwYWludCgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBjZWxsLT51cGRhdGVXaWR0aCh3KTsKKyAgICAgICAgICAgICAgICBjZWxsLT51cGRh
dGVMb2dpY2FsV2lkdGgodyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lvbiA3MTI0MikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE0OCw2ICsxMTQ4LDUyIEBAIExlbmd0aCBSZW5kZXJTdHlsZTo6bG9naWNhbE1heEhl
aWdodCgpIGMKICAgICByZXR1cm4gbWF4V2lkdGgoKTsKIH0KIAorY29uc3QgQm9yZGVyVmFsdWUm
IFJlbmRlclN0eWxlOjpib3JkZXJCZWZvcmUoKSBjb25zdAoreworICAgIHN3aXRjaCAod3JpdGlu
Z01vZGUoKSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKKyAgICAgICAgcmV0
dXJuIGJvcmRlclRvcCgpOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKKyAgICAg
ICAgcmV0dXJuIGJvcmRlckJvdHRvbSgpOworICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9k
ZToKKyAgICAgICAgcmV0dXJuIGJvcmRlckxlZnQoKTsKKyAgICBjYXNlIFJpZ2h0VG9MZWZ0V3Jp
dGluZ01vZGU6CisgICAgICAgIHJldHVybiBib3JkZXJSaWdodCgpOworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gYm9yZGVyVG9wKCk7Cit9CisKK2NvbnN0IEJv
cmRlclZhbHVlJiBSZW5kZXJTdHlsZTo6Ym9yZGVyQWZ0ZXIoKSBjb25zdAoreworICAgIHN3aXRj
aCAod3JpdGluZ01vZGUoKSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKKyAg
ICAgICAgcmV0dXJuIGJvcmRlckJvdHRvbSgpOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5n
TW9kZToKKyAgICAgICAgcmV0dXJuIGJvcmRlclRvcCgpOworICAgIGNhc2UgTGVmdFRvUmlnaHRX
cml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIGJvcmRlclJpZ2h0KCk7CisgICAgY2FzZSBSaWdo
dFRvTGVmdFdyaXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gYm9yZGVyTGVmdCgpOworICAgIH0K
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gYm9yZGVyQm90dG9tKCk7Cit9
CisKK2NvbnN0IEJvcmRlclZhbHVlJiBSZW5kZXJTdHlsZTo6Ym9yZGVyU3RhcnQoKSBjb25zdAor
eworICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICByZXR1cm4gaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gYm9yZGVyTGVmdCgpIDogYm9yZGVyUmlnaHQoKTsKKyAg
ICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gYm9yZGVyVG9wKCkgOiBib3JkZXJC
b3R0b20oKTsKK30KKworY29uc3QgQm9yZGVyVmFsdWUmIFJlbmRlclN0eWxlOjpib3JkZXJFbmQo
KSBjb25zdAoreworICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICBy
ZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gYm9yZGVyUmlnaHQoKSA6IGJvcmRlckxl
ZnQoKTsKKyAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gYm9yZGVyQm90dG9t
KCkgOiBib3JkZXJUb3AoKTsKK30KKwogdW5zaWduZWQgc2hvcnQgUmVuZGVyU3R5bGU6OmJvcmRl
ckJlZm9yZVdpZHRoKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKCkpIHsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gNzEyNDIpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MDQsNiArNDA0LDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVy
VG9wKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci50b3AoKTsgfQogICAgIGNvbnN0
IEJvcmRlclZhbHVlJiBib3JkZXJCb3R0b20oKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9y
ZGVyLmJvdHRvbSgpOyB9CiAKKyAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyQmVmb3JlKCkg
Y29uc3Q7CisgICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlckFmdGVyKCkgY29uc3Q7CisgICAg
Y29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlclN0YXJ0KCkgY29uc3Q7CisgICAgY29uc3QgQm9yZGVy
VmFsdWUmIGJvcmRlckVuZCgpIGNvbnN0OworCiAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGJv
cmRlckltYWdlKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5pbWFnZSgpOyB9CiAK
ICAgICBjb25zdCBMZW5ndGhTaXplJiBib3JkZXJUb3BMZWZ0UmFkaXVzKCkgY29uc3QgeyByZXR1
cm4gc3Vycm91bmQtPmJvcmRlci50b3BMZWZ0KCk7IH0K
</data>
<flag name="review"
          id="63167"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>