<?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>46639</bug_id>
          
          <creation_ts>2010-09-27 11:41:55 -0700</creation_ts>
          <short_desc>Make computeLogicalHeight block-flow-aware.</short_desc>
          <delta_ts>2010-09-27 14:06:08 -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>46123</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>285635</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-27 11:41:55 -0700</bug_when>
    <thetext>Make computeLogicalHeight block-flow-aware, and get layout limping enough that boxes have the correct widths/heights in vertical text mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285660</commentid>
    <comment_count>1</comment_count>
      <attachid>68942</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-27 12:04:38 -0700</bug_when>
    <thetext>Created attachment 68942
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285662</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-27 12:08:14 -0700</bug_when>
    <thetext>Attachment 68942 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/rendering/RenderBox.cpp:1834:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Total errors found: 1 in 16 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>285672</commentid>
    <comment_count>3</comment_count>
      <attachid>68942</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-27 12:23:30 -0700</bug_when>
    <thetext>Comment on attachment 68942
Patch

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

&gt; WebCore/rendering/RenderBox.cpp:1759
&gt; +        if (document()-&gt;printing())
&gt; +            visHeight = static_cast&lt;int&gt;(view()-&gt;pageHeight());
&gt; +        else if (style()-&gt;isVerticalBlockFlow())
&gt; +            visHeight = view()-&gt;viewHeight();
&gt; +        else
&gt; +            visHeight = view()-&gt;viewWidth();

I think this might read clearer as an if-else:

if (document()-&gt;printing()
   foo()
else {
    if (style-&gt;verticalBlockFlow())
       bar()
    else
       baz();
}

That way, when paginated support comes, it is more clear where the branch needs to go.

&gt; LayoutTests/ChangeLog:39
&gt; +2010-09-27  David Hyatt  &lt;hyatt@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Need a short description and bug URL (OOPS!)
&gt; +
&gt; +        * fast/blockflow/auto-margins-across-boundaries-expected.txt: Added.
&gt; +        * fast/blockflow/auto-margins-across-boundaries.html: Added.
&gt; +        * fast/blockflow/block-formatting-context-expected.txt: Added.
&gt; +        * fast/blockflow/block-formatting-context.html: Added.
&gt; +        * fast/blockflow/percentage-padding.html:
&gt; +        * fast/blockflow/relative-positioning-percentages-expected.txt: Added.
&gt; +        * fast/blockflow/relative-positioning-percentages.html: Added.
&gt; +

Double changelog entry!

It think it probably makes sense to add some layout tests that don&apos;t use getClientRects (dumps the render tree the old fashion way) just incase that function is not returning the right results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285681</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-27 12:39:46 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 68942 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=68942&amp;action=review
&gt; 
&gt; &gt; WebCore/rendering/RenderBox.cpp:1759
&gt; &gt; +        if (document()-&gt;printing())
&gt; &gt; +            visHeight = static_cast&lt;int&gt;(view()-&gt;pageHeight());
&gt; &gt; +        else if (style()-&gt;isVerticalBlockFlow())
&gt; &gt; +            visHeight = view()-&gt;viewHeight();
&gt; &gt; +        else
&gt; &gt; +            visHeight = view()-&gt;viewWidth();
&gt; 
&gt; I think this might read clearer as an if-else:
&gt; 
&gt; if (document()-&gt;printing()
&gt;    foo()
&gt; else {
&gt;     if (style-&gt;verticalBlockFlow())
&gt;        bar()
&gt;     else
&gt;        baz();
&gt; }
&gt; 
&gt; That way, when paginated support comes, it is more clear where the branch needs to go.
&gt; 

Yeah, sounds good.

&gt; &gt; LayoutTests/ChangeLog:39
&gt; &gt; +2010-09-27  David Hyatt  &lt;hyatt@apple.com&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        Need a short description and bug URL (OOPS!)
&gt; &gt; +
&gt; &gt; +        * fast/blockflow/auto-margins-across-boundaries-expected.txt: Added.
&gt; &gt; +        * fast/blockflow/auto-margins-across-boundaries.html: Added.
&gt; &gt; +        * fast/blockflow/block-formatting-context-expected.txt: Added.
&gt; &gt; +        * fast/blockflow/block-formatting-context.html: Added.
&gt; &gt; +        * fast/blockflow/percentage-padding.html:
&gt; &gt; +        * fast/blockflow/relative-positioning-percentages-expected.txt: Added.
&gt; &gt; +        * fast/blockflow/relative-positioning-percentages.html: Added.
&gt; &gt; +
&gt; 
&gt; Double changelog entry!
&gt; 
&gt; It think it probably makes sense to add some layout tests that don&apos;t use getClientRects (dumps the render tree the old fashion way) just incase that function is not returning the right results.

The reason I am not doing this yet is just because the x/y positions aren&apos;t right yet.  This way I have tests that pass as long as width/height are good and that won&apos;t break as I work on x/y.   As more of layout comes online, I&apos;ll fall back to traditional render tree dumps yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285682</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-27 12:43:09 -0700</bug_when>
    <thetext>Fixed in r68417.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285719</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-27 14:05:15 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/68417 might have broken Leopard Intel Debug (Tests)
The following changes are on the blame list:
http://trac.webkit.org/changeset/68416
http://trac.webkit.org/changeset/68417
http://trac.webkit.org/changeset/68415</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285724</commentid>
    <comment_count>7</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-27 14:06:08 -0700</bug_when>
    <thetext>It did.

See https://bugs.webkit.org/show_bug.cgi?id=46649

I will have a fix shortly.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68942</attachid>
            <date>2010-09-27 12:04:38 -0700</date>
            <delta_ts>2010-09-27 12:23:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>54901</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODQxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzEgQEAKKzIwMTAtMDktMjcgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjYzOSwgbWFrZSBjb21wdXRlTG9n
aWNhbEhlaWdodCBibG9jay1mbG93LWF3YXJlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBkb2VzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAoMSkgTWFrZXMgY29tcHV0ZUxvZ2lj
YWxIZWlnaHQgYmxvY2stZmxvdy1hd2FyZSAocGF0Y2hpbmcgYWxsIGhlbHBlciBmdW5jdGlvbnMg
YXMgbmVlZGVkIHRvIG1ha2UgdGhpcyB3b3JrKS4KKyAgICAgICAgICAgICgyKSBNYWtlcyBibG9j
ayBmbG93IHJvb3RzIChibG9ja3Mgd2hvc2UgcGFyZW50IGhhcyBhIGRpZmZlcmVudCBibG9jay1m
bG93IGRpcmVjdGlvbmFsaXR5KSBlc3RhYmxpc2ggbmV3IGJsb2NrIGZvcm1hdHRpbmcgY29udGV4
dHMuCisgICAgICAgICAgICAoVGhpcyBjYXVzZXMgdGhlbSB0byBub3QgY29sbGFwc2UgdGhlaXIg
bWFyZ2lucyB3aXRoIHRoZWlyIGNoaWxkcmVuIGFuZCB0byBhdm9pZCBmbG9hdHMpLiAKKyAgICAg
ICAgICAgICgzKSBQYXRjaCBhbGwgb2NjdXJyZW5jZXMgb2Ygc2V0SGVpZ2h0IGluIGJsb2NrIGFu
ZCBsaW5lIGxheW91dCB0byBzZXRMb2dpY2FsSGVpZ2h0IHNvIHRoYXQgaGVpZ2h0IGRvZXNuJ3Qg
Z2V0IGluY29ycmVjdGx5CisgICAgICAgICAgICBvdmVyd3JpdHRlbiBmb3IgbHIvcmwgYmxvY2st
Zmxvdy4gIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHdyaXRlIHRlc3RzIHRoYXQgZXhhbWluZSB0aGUg
d2lkdGgvaGVpZ2h0IG9mIHRoZSBibG9ja3MuCisgICAgICAgIAorICAgICAgICBBZGRlZCBtdWx0
aXBsZSBuZXcgdGVzdHMgaW4gZmFzdC9ibG9ja2Zsb3cuCisgICAgICAgIGZhc3QvY3NzL2xvZ2lj
YWwtcHJvcGVydHktcmVzb2x1dGlvbiBnaXZlcyB0aGUgY29ycmVjdCByZXN1bHRzIG5vdy4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6TWFyZ2luSW5mbzo6TWFyZ2luSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpjbGVhckZsb2F0c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpk
ZXRlcm1pbmVIb3Jpem9udGFsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmhhbmRsZUJvdHRvbU9mQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmxheW91dEJsb2NrQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omxh
eW91dEJsb2NrQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0aW9u
TmV3RmxvYXRPbkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5ld0xpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9y
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zm
c2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Z2V0Q2xlYXJEZWx0
YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29t
cHV0ZUJsb2NrRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmZpdEJlbG93RmxvYXRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bWFyZ2luQmVmb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bWFyZ2luQmVmb3JlVXNpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjptYXJnaW5BZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6Om1hcmdpbkFmdGVyVXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRN
YXJnaW5CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRNYXJnaW5BZnRl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldE1hcmdpbkJlZm9yZVVzaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0TWFyZ2luQWZ0ZXJVc2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZEhlaWdodFVzaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YXZhaWxhYmxlTG9naWNhbEhlaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRVc2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcmdp
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojphdm9pZHNGbG9hdHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
Y29udGVudExvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRl
bnRMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3RyZXRjaGVz
VG9WaWV3SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YXZhaWxhYmxlTG9n
aWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YXZhaWxhYmxlV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjphdmFpbGFibGVIZWlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojppc0Jsb2NrRmxvd1Jvb3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29t
cHV0ZUxvZ2ljYWxXaWR0aCk6CisKIDIwMTAtMDktMjcgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5v
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gNjgzNjIpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDggKzgzLDkgQEAg
UmVuZGVyQmxvY2s6Ok1hcmdpbkluZm86Ok1hcmdpbkluZm8oUmVuZAogICAgIC8vIFdoZXRoZXIg
b3Igbm90IHdlIGNhbiBjb2xsYXBzZSBvdXIgb3duIG1hcmdpbnMgd2l0aCBvdXIgY2hpbGRyZW4u
ICBXZSBkb24ndCBkbyB0aGlzCiAgICAgLy8gaWYgd2UgaGFkIGFueSBib3JkZXIvcGFkZGluZyAo
b2J2aW91c2x5KSwgaWYgd2UncmUgdGhlIHJvb3Qgb3IgSFRNTCBlbGVtZW50cywgb3IgaWYKICAg
ICAvLyB3ZSdyZSBwb3NpdGlvbmVkLCBmbG9hdGluZywgYSB0YWJsZSBjZWxsLgotICAgIG1fY2Fu
Q29sbGFwc2VXaXRoQ2hpbGRyZW4gPSAhYmxvY2stPmlzUmVuZGVyVmlldygpICYmICFibG9jay0+
aXNSb290KCkgJiYgIWJsb2NrLT5pc1Bvc2l0aW9uZWQoKSAmJgotICAgICAgICAhYmxvY2stPmlz
RmxvYXRpbmcoKSAmJiAhYmxvY2stPmlzVGFibGVDZWxsKCkgJiYgIWJsb2NrLT5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAhYmxvY2stPmlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCk7CisgICAgbV9j
YW5Db2xsYXBzZVdpdGhDaGlsZHJlbiA9ICFibG9jay0+aXNSZW5kZXJWaWV3KCkgJiYgIWJsb2Nr
LT5pc1Jvb3QoKSAmJiAhYmxvY2stPmlzUG9zaXRpb25lZCgpCisgICAgICAgICYmICFibG9jay0+
aXNGbG9hdGluZygpICYmICFibG9jay0+aXNUYWJsZUNlbGwoKSAmJiAhYmxvY2stPmhhc092ZXJm
bG93Q2xpcCgpICYmICFibG9jay0+aXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKQorICAgICAg
ICAmJiAhYmxvY2stPmlzQmxvY2tGbG93Um9vdCgpOwogCiAgICAgbV9jYW5Db2xsYXBzZVRvcFdp
dGhDaGlsZHJlbiA9IG1fY2FuQ29sbGFwc2VXaXRoQ2hpbGRyZW4gJiYgKHRvcCA9PSAwKSAmJiBi
bG9jay0+c3R5bGUoKS0+bWFyZ2luVG9wQ29sbGFwc2UoKSAhPSBNU0VQQVJBVEU7CiAKQEAgLTEx
MzQsNyArMTEzNSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkK
ICAgICBjbGVhckZsb2F0cygpOwogCiAgICAgaW50IHByZXZpb3VzSGVpZ2h0ID0gaGVpZ2h0KCk7
Ci0gICAgc2V0SGVpZ2h0KDApOworICAgIHNldExvZ2ljYWxIZWlnaHQoMCk7CiAgICAgYm9vbCBo
YXNTcGVjaWZpZWRQYWdlSGVpZ2h0ID0gZmFsc2U7CiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9
IGNvbHVtbkluZm8oKTsKICAgICBpZiAoaGFzQ29sdW1ucygpKSB7CkBAIC0xMTQ3LDcgKzExNDgs
NyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgICAg
ICAgICAgcGFnZUhlaWdodCA9IGNvbHVtbkhlaWdodDsKICAgICAgICAgICAgICAgICBoYXNTcGVj
aWZpZWRQYWdlSGVpZ2h0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldEhl
aWdodCgwKTsKKyAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQoMCk7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGNvbEluZm8tPmNvbHVtbkhlaWdodCgpICE9IHBhZ2VIZWlnaHQgJiYgbV9ldmVy
SGFkTGF5b3V0KSB7CiAgICAgICAgICAgICBjb2xJbmZvLT5zZXRDb2x1bW5IZWlnaHQocGFnZUhl
aWdodCk7CkBAIC0xMjA4LDcgKzEyMDksNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9j
ayhib29sIHJlbGF5CiAgICAgLy8gRXhwYW5kIG91ciBpbnRyaW5zaWMgaGVpZ2h0IHRvIGVuY29t
cGFzcyBmbG9hdHMuCiAgICAgaW50IHRvQWRkID0gYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90
dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7CiAgICAgaWYgKGZsb2F0Qm90dG9t
KCkgPiAoaGVpZ2h0KCkgLSB0b0FkZCkgJiYgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxv
YXRzKCkpCi0gICAgICAgIHNldEhlaWdodChmbG9hdEJvdHRvbSgpICsgdG9BZGQpOworICAgICAg
ICBzZXRMb2dpY2FsSGVpZ2h0KGZsb2F0Qm90dG9tKCkgKyB0b0FkZCk7CiAgICAgCiAgICAgaWYg
KGxheW91dENvbHVtbnMoaGFzU3BlY2lmaWVkUGFnZUhlaWdodCwgcGFnZUhlaWdodCwgc3RhdGVQ
dXNoZXIpKQogICAgICAgICByZXR1cm47CkBAIC0xMzE1LDcgKzEzMTYsOCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGRPdmVyZmxvd0Zyb21GbG9hdHMoCiAKIGJvb2wgUmVuZGVyQmxvY2s6OmV4cGFu
ZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzSW5s
aW5lQmxvY2tPcklubGluZVRhYmxlKCkgfHwgaXNGbG9hdGluZ09yUG9zaXRpb25lZCgpIHx8IGhh
c092ZXJmbG93Q2xpcCgpIHx8IChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNGbGV4aWJsZUJveCgp
KSB8fCBoYXNDb2x1bW5zKCkgfHwgaXNUYWJsZUNlbGwoKSB8fCBpc0ZpZWxkc2V0KCk7CisgICAg
cmV0dXJuIGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgfHwgaXNGbG9hdGluZ09yUG9zaXRp
b25lZCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNG
bGV4aWJsZUJveCgpKQorICAgICAgICAgICB8fCBoYXNDb2x1bW5zKCkgfHwgaXNUYWJsZUNlbGwo
KSB8fCBpc0ZpZWxkc2V0KCkgfHwgaXNCbG9ja0Zsb3dSb290KCk7CiB9CiAKIHZvaWQgUmVuZGVy
QmxvY2s6OmFkanVzdFBvc2l0aW9uZWRCbG9jayhSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJn
aW5JbmZvJiBtYXJnaW5JbmZvKQpAQCAtMTM2Nyw5ICsxMzY5LDkgQEAgdm9pZCBSZW5kZXJCbG9j
azo6YWRqdXN0RmxvYXRpbmdCbG9jayhjbwogICAgIC8vIGh0dHA6Ly93d3cuaGl4aWUuY2gvdGVz
dHMvYWRob2MvY3NzL2JveC9ibG9jay9tYXJnaW4tY29sbGFwc2UvMDQ2Lmh0bWwgZm9yCiAgICAg
Ly8gYW4gZXhhbXBsZSBvZiB0aGlzIHNjZW5hcmlvLgogICAgIGludCBtYXJnaW5PZmZzZXQgPSBt
YXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aFRvcCgpID8gMCA6IG1hcmdpbkluZm8ubWFyZ2luKCk7
Ci0gICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbWFyZ2luT2Zmc2V0KTsKKyAgICBzZXRMb2dpY2Fs
SGVpZ2h0KGhlaWdodCgpICsgbWFyZ2luT2Zmc2V0KTsKICAgICBwb3NpdGlvbk5ld0Zsb2F0cygp
OwotICAgIHNldEhlaWdodChoZWlnaHQoKSAtIG1hcmdpbk9mZnNldCk7CisgICAgc2V0TG9naWNh
bEhlaWdodChoZWlnaHQoKSAtIG1hcmdpbk9mZnNldCk7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2s6
OmhhbmRsZVNwZWNpYWxDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiBt
YXJnaW5JbmZvKQpAQCAtMTUyOSw3ICsxNTMxLDcgQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBz
ZU1hcmdpbnMoUmVuZGVyQgogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgaWYgKGNoaWxkLT5z
dHlsZSgpLT5tYXJnaW5Ub3BDb2xsYXBzZSgpID09IE1TRVBBUkFURSkgewotICAgICAgICAgICAg
c2V0SGVpZ2h0KGhlaWdodCgpICsgbWFyZ2luSW5mby5tYXJnaW4oKSArIGNoaWxkLT5tYXJnaW5U
b3AoKSk7CisgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGhlaWdodCgpICsgbWFyZ2luSW5m
by5tYXJnaW4oKSArIGNoaWxkLT5tYXJnaW5Ub3AoKSk7CiAgICAgICAgICAgICB5cG9zID0gaGVp
Z2h0KCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoIW1hcmdpbkluZm8uYXRUb3BPZkJs
b2NrKCkgfHwKQEAgLTE1MzcsNyArMTUzOSw3IEBAIGludCBSZW5kZXJCbG9jazo6Y29sbGFwc2VN
YXJnaW5zKFJlbmRlckIKICAgICAgICAgICAgICAmJiAoIWRvY3VtZW50KCktPmluUXVpcmtzTW9k
ZSgpIHx8ICFtYXJnaW5JbmZvLnF1aXJrQ29udGFpbmVyKCkgfHwgIW1hcmdpbkluZm8udG9wUXVp
cmsoKSkpKSB7CiAgICAgICAgICAgICAvLyBXZSdyZSBjb2xsYXBzaW5nIHdpdGggYSBwcmV2aW91
cyBzaWJsaW5nJ3MgbWFyZ2lucyBhbmQgbm90CiAgICAgICAgICAgICAvLyB3aXRoIHRoZSB0b3Ag
b2YgdGhlIGJsb2NrLgotICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbWF4KG1hcmdp
bkluZm8ucG9zTWFyZ2luKCksIHBvc1RvcCkgLSBtYXgobWFyZ2luSW5mby5uZWdNYXJnaW4oKSwg
bmVnVG9wKSk7CisgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGhlaWdodCgpICsgbWF4KG1h
cmdpbkluZm8ucG9zTWFyZ2luKCksIHBvc1RvcCkgLSBtYXgobWFyZ2luSW5mby5uZWdNYXJnaW4o
KSwgbmVnVG9wKSk7CiAgICAgICAgICAgICB5cG9zID0gaGVpZ2h0KCk7CiAgICAgICAgIH0KIApA
QCAtMTU1NCw3ICsxNTU2LDcgQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVu
ZGVyQgogICAgIGlmIChwYWdpbmF0ZWQgJiYgeXBvcyA+IGJlZm9yZUNvbGxhcHNlWSkgewogICAg
ICAgICBpbnQgb2xkWSA9IHlwb3M7CiAgICAgICAgIHlwb3MgPSBtaW4oeXBvcywgbmV4dFBhZ2VU
b3AoYmVmb3JlQ29sbGFwc2VZKSk7Ci0gICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArICh5cG9z
IC0gb2xkWSkpOworICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGhlaWdodCgpICsgKHlwb3MgLSBv
bGRZKSk7CiAgICAgfQogICAgIHJldHVybiB5cG9zOwogfQpAQCAtMTU4OCwxMCArMTU5MCwxMCBA
QCBpbnQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuCiAgICAgICAgIAogICAg
ICAgICAvLyBBZGp1c3Qgb3VyIGhlaWdodCBzdWNoIHRoYXQgd2UgYXJlIHJlYWR5IHRvIGJlIGNv
bGxhcHNlZCB3aXRoIHN1YnNlcXVlbnQgc2libGluZ3MgKG9yIHRoZSBib3R0b20KICAgICAgICAg
Ly8gb2YgdGhlIHBhcmVudCBibG9jaykuCi0gICAgICAgIHNldEhlaWdodChjaGlsZC0+eSgpIC0g
bWF4KDAsIG1hcmdpbkluZm8ubWFyZ2luKCkpKTsKKyAgICAgICAgc2V0TG9naWNhbEhlaWdodChj
aGlsZC0+eSgpIC0gbWF4KDAsIG1hcmdpbkluZm8ubWFyZ2luKCkpKTsKICAgICB9IGVsc2UKICAg
ICAgICAgLy8gSW5jcmVhc2Ugb3VyIGhlaWdodCBieSB0aGUgYW1vdW50IHdlIGhhZCB0byBjbGVh
ci4KLSAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgaGVpZ2h0SW5jcmVhc2UpOworICAgICAg
ICBzZXRMb2dpY2FsSGVpZ2h0KGhlaWdodCgpICsgaGVpZ2h0SW5jcmVhc2UpOwogICAgIAogICAg
IGlmIChtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aFRvcCgpKSB7CiAgICAgICAgIC8vIFdlIGNh
biBubyBsb25nZXIgY29sbGFwc2Ugd2l0aCB0aGUgdG9wIG9mIHRoZSBibG9jayBzaW5jZSBhIGNs
ZWFyCkBAIC0xNjY4LDcgKzE2NzAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVIb3Jp
em9udGFsUG9zCiAgICAgICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50U2l6ZShjaGlsZC0+
eCgpIC0gY2hQb3MsIDApKTsKICAgICAgICAgY2hpbGQtPnNldExvY2F0aW9uKGNoUG9zLCBjaGls
ZC0+eSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICB4UG9zICs9IGF2YWlsYWJsZVdpZHRoKCk7
CisgICAgICAgIHhQb3MgKz0gYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7CiAgICAgICAgIGludCBj
aFBvcyA9IHhQb3MgLSAoY2hpbGQtPndpZHRoKCkgKyBjaGlsZC0+bWFyZ2luUmlnaHQoKSk7CiAg
ICAgICAgIGlmIChjaGlsZC0+YXZvaWRzRmxvYXRzKCkpIHsKICAgICAgICAgICAgIGludCByaWdo
dE9mZiA9IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoaGVpZ2h0KCksIGZhbHNlKTsKQEAgLTE3
MTYsMTQgKzE3MTgsMTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6aGFuZGxlQm90dG9tT2ZCbG9jayhp
bgogICAgIC8vIElmIHdlIGNhbid0IGNvbGxhcHNlIHdpdGggY2hpbGRyZW4gdGhlbiBnbyBhaGVh
ZCBhbmQgYWRkIGluIHRoZSBib3R0b20gbWFyZ2luLgogICAgIGlmICghbWFyZ2luSW5mby5jYW5D
b2xsYXBzZVdpdGhCb3R0b20oKSAmJiAhbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhUb3AoKQog
ICAgICAgICAmJiAoIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpIHx8ICFtYXJnaW5JbmZvLnF1
aXJrQ29udGFpbmVyKCkgfHwgIW1hcmdpbkluZm8uYm90dG9tUXVpcmsoKSkpCi0gICAgICAgIHNl
dEhlaWdodChoZWlnaHQoKSArIG1hcmdpbkluZm8ubWFyZ2luKCkpOworICAgICAgICBzZXRMb2dp
Y2FsSGVpZ2h0KGhlaWdodCgpICsgbWFyZ2luSW5mby5tYXJnaW4oKSk7CiAgICAgICAgIAogICAg
IC8vIE5vdyBhZGQgaW4gb3VyIGJvdHRvbSBib3JkZXIvcGFkZGluZy4KLSAgICBzZXRIZWlnaHQo
aGVpZ2h0KCkgKyBib3R0b20pOworICAgIHNldExvZ2ljYWxIZWlnaHQoaGVpZ2h0KCkgKyBib3R0
b20pOwogCiAgICAgLy8gTmVnYXRpdmUgbWFyZ2lucyBjYW4gY2F1c2Ugb3VyIGhlaWdodCB0byBz
aHJpbmsgYmVsb3cgb3VyIG1pbmltYWwgaGVpZ2h0IChib3JkZXIvcGFkZGluZykuCiAgICAgLy8g
SWYgdGhpcyBoYXBwZW5zLCBlbnN1cmUgdGhhdCB0aGUgY29tcHV0ZWQgaGVpZ2h0IGlzIGluY3Jl
YXNlZCB0byB0aGUgbWluaW1hbCBoZWlnaHQuCi0gICAgc2V0SGVpZ2h0KG1heChoZWlnaHQoKSwg
dG9wICsgYm90dG9tKSk7CisgICAgc2V0TG9naWNhbEhlaWdodChtYXgoaGVpZ2h0KCksIHRvcCAr
IGJvdHRvbSkpOwogCiAgICAgLy8gVXBkYXRlIG91ciBib3R0b20gY29sbGFwc2VkIG1hcmdpbiBp
bmZvLgogICAgIHNldENvbGxhcHNlZEJvdHRvbU1hcmdpbihtYXJnaW5JbmZvKTsKQEAgLTE3NTIs
NyArMTc1NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm8KICAg
ICBpbnQgdG9wID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7CiAgICAgaW50IGJvdHRvbSA9
IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCgpOwogCi0gICAgc2V0SGVpZ2h0KHRvcCk7CisgICAgc2V0TG9naWNhbEhlaWdodCh0b3Ap
OwogCiAgICAgLy8gVGhlIG1hcmdpbiBzdHJ1Y3QgY2FjaGVzIGFsbCBvdXIgY3VycmVudCBtYXJn
aW4gY29sbGFwc2luZyBzdGF0ZS4gIFRoZSBjb21wYWN0IHN0cnVjdCBjYWNoZXMgc3RhdGUgd2hl
biB3ZSBlbmNvdW50ZXIgY29tcGFjdHMsCiAgICAgTWFyZ2luSW5mbyBtYXJnaW5JbmZvKHRoaXMs
IHRvcCwgYm90dG9tKTsKQEAgLTE4OTQsNyArMTg5Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICAgICAgfQogCiAgICAgICAgIC8vIFNpbWlsYXIgdG8g
aG93IHdlIGFwcGx5IGNsZWFyYW5jZS4gIEdvIGFoZWFkIGFuZCBib29zdCBoZWlnaHQoKSB0byBi
ZSB0aGUgcGxhY2Ugd2hlcmUgd2UncmUgZ29pbmcgdG8gcG9zaXRpb24gdGhlIGNoaWxkLgotICAg
ICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyAoeUFmdGVyQ2xlYXIgLSBvbGRZKSk7CisgICAgICAg
IHNldExvZ2ljYWxIZWlnaHQoaGVpZ2h0KCkgKyAoeUFmdGVyQ2xlYXIgLSBvbGRZKSk7CiAgICAg
fQogCiAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShJbnRTaXplKDAsIHlQb3NFc3RpbWF0ZSAt
IHlBZnRlckNsZWFyKSk7CkBAIC0xOTI5LDkgKzE5MzEsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgZGV0ZXJtaW5lSG9yaXpvbnRhbFBvc2l0aW9uKGNo
aWxkKTsKIAogICAgIC8vIFVwZGF0ZSBvdXIgaGVpZ2h0IG5vdyB0aGF0IHRoZSBjaGlsZCBoYXMg
YmVlbiBwbGFjZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb24uCi0gICAgc2V0SGVpZ2h0KGhlaWdo
dCgpICsgY2hpbGQtPmhlaWdodCgpKTsKKyAgICBzZXRMb2dpY2FsSGVpZ2h0KGhlaWdodCgpICsg
Y2hpbGQtPmhlaWdodCgpKTsKICAgICBpZiAoY2hpbGQtPnN0eWxlKCktPm1hcmdpbkJvdHRvbUNv
bGxhcHNlKCkgPT0gTVNFUEFSQVRFKSB7Ci0gICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIGNo
aWxkLT5tYXJnaW5Cb3R0b20oKSk7CisgICAgICAgIHNldExvZ2ljYWxIZWlnaHQoaGVpZ2h0KCkg
KyBjaGlsZC0+bWFyZ2luQm90dG9tKCkpOwogICAgICAgICBtYXJnaW5JbmZvLmNsZWFyTWFyZ2lu
KCk7CiAgICAgfQogICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgb3ZlcmhhbmdpbmcgZmxvYXRzIHRo
YXQgaW50cnVkZSBpbnRvIGZvbGxvd2luZyBzaWJsaW5ncyAob3IgcG9zc2libHkgb3V0CkBAIC0x
OTU5LDcgKzE5NjEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRl
CiAgICAgICAgIC8vIENoZWNrIGZvciBhbiBhZnRlciBwYWdlL2NvbHVtbiBicmVhay4KICAgICAg
ICAgaW50IG5ld0hlaWdodCA9IGFwcGx5QWZ0ZXJCcmVhayhjaGlsZCwgaGVpZ2h0KCksIG1hcmdp
bkluZm8pOwogICAgICAgICBpZiAobmV3SGVpZ2h0ICE9IGhlaWdodCgpKQotICAgICAgICAgICAg
c2V0SGVpZ2h0KG5ld0hlaWdodCk7CisgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KG5ld0hl
aWdodCk7CiAgICAgfQogCiAgICAgQVNTRVJUKG9sZExheW91dERlbHRhID09IHZpZXcoKS0+bGF5
b3V0RGVsdGEoKSk7CkBAIC0zMTE0LDcgKzMxMTYsNyBAQCBib29sIFJlbmRlckJsb2NrOjpwb3Np
dGlvbk5ld0Zsb2F0T25MaW5lCiAgICAgICAgIH0KICAgICB9CiAgICAgICAgIAotICAgIHNldEhl
aWdodChoZWlnaHQoKSArIHBhZ2luYXRpb25TdHJ1dCk7CisgICAgc2V0TG9naWNhbEhlaWdodCho
ZWlnaHQoKSArIHBhZ2luYXRpb25TdHJ1dCk7CiAgICAgCiAgICAgcmV0dXJuIGRpZFBvc2l0aW9u
OwogfQpAQCAtMzEzOCw3ICszMTQwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bmV3TGluZShFQ2xl
YXIgY2xlYXIpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKGhlaWdodCgpIDwg
bmV3WSkKLSAgICAgICAgc2V0SGVpZ2h0KG5ld1kpOworICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0
KG5ld1kpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjphZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFu
dChSZW5kZXJCb3gqIGRlc2NlbmRhbnQpCkBAIC0zMjI3LDcgKzMyMjksNyBAQCBpbnQgUmVuZGVy
QmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluCiAgICAgaWYgKGFwcGx5VGV4dEluZGVudCAm
JiBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgaW50IGN3ID0gMDsKICAg
ICAgICAgaWYgKHN0eWxlKCktPnRleHRJbmRlbnQoKS5pc1BlcmNlbnQoKSkKLSAgICAgICAgICAg
IGN3ID0gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZVdpZHRoKCk7CisgICAgICAgICAgICBj
dyA9IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVMb2dpY2FsV2lkdGgoKTsKICAgICAgICAg
bGVmdCArPSBzdHlsZSgpLT50ZXh0SW5kZW50KCkuY2FsY01pblZhbHVlKGN3KTsKICAgICB9CiAK
QEAgLTMyMzYsNyArMzIzOCw3IEBAIGludCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRG
b3JMaW4KIAogaW50IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIGF2YWls
YWJsZVdpZHRoKCk7CisgICAgcmV0dXJuIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyBh
dmFpbGFibGVMb2dpY2FsV2lkdGgoKTsKIH0KIAogaW50IFJlbmRlckJsb2NrOjpsb2dpY2FsUmln
aHRPZmZzZXRGb3JMaW5lKGludCB5LCBpbnQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5k
ZW50LCBpbnQqIGhlaWdodFJlbWFpbmluZykgY29uc3QKQEAgLTMyNjEsNyArMzI2Myw3IEBAIGlu
dCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGkKICAgICBpZiAoYXBwbHlUZXh0
SW5kZW50ICYmIHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkgewogICAgICAgICBpbnQgY3cg
PSAwOwogICAgICAgICBpZiAoc3R5bGUoKS0+dGV4dEluZGVudCgpLmlzUGVyY2VudCgpKQotICAg
ICAgICAgICAgY3cgPSBjb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlV2lkdGgoKTsKKyAgICAg
ICAgICAgIGN3ID0gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOwog
ICAgICAgICByaWdodCAtPSBzdHlsZSgpLT50ZXh0SW5kZW50KCkuY2FsY01pblZhbHVlKGN3KTsK
ICAgICB9CiAgICAgCkBAIC0zOTMyLDcgKzM5MzQsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmdldENs
ZWFyRGVsdGEoUmVuZGVyQm94CiAgICAgLy8gV2UgYWxzbyBjbGVhciBmbG9hdHMgaWYgd2UgYXJl
IHRvbyBiaWcgdG8gc2l0IG9uIHRoZSBzYW1lIGxpbmUgYXMgYSBmbG9hdCAoYW5kIHdpc2ggdG8g
YXZvaWQgZmxvYXRzIGJ5IGRlZmF1bHQpLgogICAgIGludCByZXN1bHQgPSBjbGVhclNldCA/IG1h
eCgwLCBib3R0b20gLSB5UG9zKSA6IDA7CiAgICAgaWYgKCFyZXN1bHQgJiYgY2hpbGQtPmF2b2lk
c0Zsb2F0cygpKSB7Ci0gICAgICAgIGludCBhdmFpbGFibGVXaWR0aCA9IHRoaXMtPmF2YWlsYWJs
ZVdpZHRoKCk7CisgICAgICAgIGludCBhdmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZUxvZ2ljYWxX
aWR0aCgpOwogICAgICAgICBpZiAoY2hpbGQtPm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpID4g
YXZhaWxhYmxlV2lkdGgpCiAgICAgICAgICAgICByZXR1cm4gMDsKIApAQCAtNDI5NywxNCArNDI5
OSw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om9mZnNldEZvckNvbnRlbnRzKGludCYKICAgICB0eSA9
IGNvbnRlbnRzUG9pbnQueSgpOwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmF2YWlsYWJsZVdpZHRo
KCkgY29uc3QKLXsKLSAgICAvLyBJZiB3ZSBoYXZlIG11bHRpcGxlIGNvbHVtbnMsIHRoZW4gdGhl
IGF2YWlsYWJsZSB3aWR0aCBpcyByZWR1Y2VkIHRvIG91ciBjb2x1bW4gd2lkdGguCi0gICAgaWYg
KGhhc0NvbHVtbnMoKSkKLSAgICAgICAgcmV0dXJuIGRlc2lyZWRDb2x1bW5XaWR0aCgpOwotICAg
IHJldHVybiBSZW5kZXJCb3g6OmF2YWlsYWJsZVdpZHRoKCk7Ci19Ci0KIGludCBSZW5kZXJCbG9j
azo6YXZhaWxhYmxlTG9naWNhbFdpZHRoKCkgY29uc3QKIHsKICAgICAvLyBJZiB3ZSBoYXZlIG11
bHRpcGxlIGNvbHVtbnMsIHRoZW4gdGhlIGF2YWlsYWJsZSBsb2dpY2FsIHdpZHRoIGlzIHJlZHVj
ZWQgdG8gb3VyIGNvbHVtbiB3aWR0aC4KQEAgLTQ0NzgsNyArNDQ3Miw3IEBAIGJvb2wgUmVuZGVy
QmxvY2s6OmxheW91dENvbHVtbnMoYm9vbCBoYXMKICAgICAgICAgICAgIGludCBvdmVyZmxvd1Jp
Z2h0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbWF4KHdpZHRoKCksIGxhc3RSZWN0
LngoKSArIGxhc3RSZWN0LndpZHRoKCkpIDogMDsKICAgICAgICAgICAgIGludCBvdmVyZmxvd0hl
aWdodCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgY29sSW5mby0+Y29sdW1uSGVpZ2h0
KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNldEhlaWdodChvdmVyZmxvd0hlaWdodCAr
IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCgpKTsKKyAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQob3ZlcmZsb3dIZWlnaHQgKyBi
b3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQoKSk7CiAKICAgICAgICAgICAgIG1fb3ZlcmZsb3cuY2xlYXIoKTsKICAgICAgICAgICAgIGFk
ZExheW91dE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0IC0g
b3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdodCkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCShyZXZpc2lvbiA2ODI4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpOwogICAgIAog
ICAgIC8vIEJsb2NrIGZsb3dzIHN1YmNsYXNzIGF2YWlsYWJsZVdpZHRoIHRvIGhhbmRsZSBtdWx0
aSBjb2x1bW4gbGF5b3V0IChzaHJpbmtpbmcgdGhlIHdpZHRoIGF2YWlsYWJsZSB0byBjaGlsZHJl
biB3aGVuIGxheWluZyBvdXQuKQotICAgIHZpcnR1YWwgaW50IGF2YWlsYWJsZVdpZHRoKCkgY29u
c3Q7IC8vIEZJWE1FOiBTaG91bGQgYmUgcG9zc2libGUgdG8gcmVtb3ZlIHRoaXMuIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYxMjcKICAgICB2aXJ0dWFsIGlu
dCBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKSBjb25zdDsKIAogICAgIFJvb3RJbmxpbmVCb3gqIGZp
cnN0Um9vdEJveCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJvb3RJbmxpbmVCb3gqPihm
aXJzdExpbmVCb3goKSk7IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcAkocmV2aXNpb24gNjgyODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTAsNyArNDkwLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvbgogCiB2b2lkIFJlbmRlckJs
b2NrOjpjb21wdXRlQmxvY2tEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gq
IGxpbmVCb3gsIEJpZGlSdW4qIGZpcnN0UnVuLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250
c01hcCYgdGV4dEJveERhdGFNYXApCiB7Ci0gICAgc2V0SGVpZ2h0KGxpbmVCb3gtPmFsaWduQm94
ZXNJbkJsb2NrRGlyZWN0aW9uKGhlaWdodCgpLCB0ZXh0Qm94RGF0YU1hcCkpOworICAgIHNldExv
Z2ljYWxIZWlnaHQobGluZUJveC0+YWxpZ25Cb3hlc0luQmxvY2tEaXJlY3Rpb24oaGVpZ2h0KCks
IHRleHRCb3hEYXRhTWFwKSk7CiAgICAgbGluZUJveC0+c2V0QmxvY2tIZWlnaHQoaGVpZ2h0KCkp
OwogCiAgICAgLy8gTm93IG1ha2Ugc3VyZSB3ZSBwbGFjZSByZXBsYWNlZCByZW5kZXIgb2JqZWN0
cyBjb3JyZWN0bHkuCkBAIC01MzMsNyArNTMzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
SW5saW5lQ2hpbGRyZW4oYgogICAgIAogICAgIG1fb3ZlcmZsb3cuY2xlYXIoKTsKICAgICAgICAg
Ci0gICAgc2V0SGVpZ2h0KGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKTsKKyAgICBzZXRMb2dp
Y2FsSGVpZ2h0KGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKTsKICAgICBpbnQgdG9BZGQgPSBi
b3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQoKTsKIAogICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIGNsZWFyIG91dCBvdXIgbGlu
ZSBib3hlcy4KQEAgLTgxMSwxMyArODExLDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElu
bGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2
ZSB0byBkZWxldGUgdGhpcyBsaW5lLCByZW1vdmUgYWxsIGZsb2F0cyB0aGF0IGdvdCBhZGRlZCwg
YW5kIGxldCBsaW5lIGxheW91dCByZS1ydW4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmVCb3gtPmRlbGV0ZUxpbmUocmVuZGVyQXJlbmEoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KGxhc3RGbG9hdEZyb21Q
cmV2aW91c0xpbmUsIG9sZEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldEhlaWdodChvbGRIZWlnaHQgKyBhZGp1c3RtZW50KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodChvbGRIZWlnaHQgKyBhZGp1c3RtZW50KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24ob2xkRW5k
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gb2xkRW5kOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRIZWlnaHQobGluZUJv
eC0+YmxvY2tIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TG9naWNh
bEhlaWdodChsaW5lQm94LT5ibG9ja0hlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTg2OCwxMiAr
ODY4LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoVmVjdG9yPFJlbmRlckJveCo+OjppdGVyYXRvciBmID0g
Y2xlYW5MaW5lRmxvYXRzLT5iZWdpbigpOyBmICE9IGVuZDsgKytmKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGZsb2F0VG9wID0gKCpmKS0+eSgpIC0gKCpmKS0+bWFyZ2luVG9w
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QoKmYp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEhlaWdodChmbG9hdFRvcCArIGRlbHRh
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGZsb2F0VG9w
ICsgZGVsdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRz
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2V0SGVpZ2h0KGxhc3RSb290Qm94KCkt
PmJsb2NrSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobGFzdFJv
b3RCb3goKS0+YmxvY2tIZWlnaHQoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIC8vIERlbGV0ZSBhbGwgdGhlIHJlbWFpbmluZyBsaW5lcy4KICAgICAgICAgICAgICAg
ICBSb290SW5saW5lQm94KiBsaW5lID0gZW5kTGluZTsKQEAgLTkyNiwxMCArOTI2LDEwIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICB9CiAKICAgICAvLyBO
b3cgYWRkIGluIHRoZSBib3R0b20gYm9yZGVyL3BhZGRpbmcuCi0gICAgc2V0SGVpZ2h0KGhlaWdo
dCgpICsgdG9BZGQpOworICAgIHNldExvZ2ljYWxIZWlnaHQoaGVpZ2h0KCkgKyB0b0FkZCk7CiAK
ICAgICBpZiAoIWZpcnN0TGluZUJveCgpICYmIGhhc0xpbmVJZkVtcHR5KCkpCi0gICAgICAgIHNl
dEhlaWdodChoZWlnaHQoKSArIGxpbmVIZWlnaHQodHJ1ZSwgdHJ1ZSkpOworICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0KGhlaWdodCgpICsgbGluZUhlaWdodCh0cnVlLCB0cnVlKSk7CiAKICAgICAv
LyBTZWUgaWYgd2UgaGF2ZSBhbnkgbGluZXMgdGhhdCBzcGlsbCBvdXQgb2Ygb3VyIGJsb2NrLiAg
SWYgd2UgZG8sIHRoZW4gd2Ugd2lsbCBwb3NzaWJseSBuZWVkIHRvCiAgICAgLy8gdHJ1bmNhdGUg
dGV4dC4KQEAgLTEwNDQsNyArMTA0NCw3IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpk
ZXRlcm1pbmVTdGEKICAgICAgICAgICAgICAgICBWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9y
IGVuZCA9IGNsZWFuTGluZUZsb2F0cy0+ZW5kKCk7CiAgICAgICAgICAgICAgICAgZm9yIChWZWN0
b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGYgPSBjbGVhbkxpbmVGbG9hdHMtPmJlZ2luKCk7IGYg
IT0gZW5kOyArK2YpIHsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3Qo
KmYpOwotICAgICAgICAgICAgICAgICAgICBzZXRIZWlnaHQoKCpmKS0+eSgpIC0gKCpmKS0+bWFy
Z2luVG9wKCkpOworICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KCgqZiktPnko
KSAtICgqZiktPm1hcmdpblRvcCgpKTsKICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25OZXdG
bG9hdHMoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsb2F0c1tudW1DbGVhbkZsb2F0
c10ub2JqZWN0ID09ICpmKTsKICAgICAgICAgICAgICAgICAgICAgbnVtQ2xlYW5GbG9hdHMrKzsK
QEAgLTEwNTIsNyArMTA1Miw3IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1p
bmVTdGEKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJv
eCgpOwogICAgICAgICB9Ci0gICAgICAgIHNldEhlaWdodChzYXZlZEhlaWdodCk7CisgICAgICAg
IHNldExvZ2ljYWxIZWlnaHQoc2F2ZWRIZWlnaHQpOwogICAgIH0KIAogICAgIGZpcnN0TGluZSA9
ICFsYXN0OwpAQCAtMTA2MSw3ICsxMDYxLDcgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6
OmRldGVybWluZVN0YQogICAgIFJlbmRlck9iamVjdCogc3RhcnRPYmo7CiAgICAgaW50IHBvcyA9
IDA7CiAgICAgaWYgKGxhc3QpIHsKLSAgICAgICAgc2V0SGVpZ2h0KGxhc3QtPmJsb2NrSGVpZ2h0
KCkpOworICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxhc3QtPmJsb2NrSGVpZ2h0KCkpOwogICAg
ICAgICBzdGFydE9iaiA9IGxhc3QtPmxpbmVCcmVha09iaigpOwogICAgICAgICBwb3MgPSBsYXN0
LT5saW5lQnJlYWtQb3MoKTsKICAgICAgICAgcmVzb2x2ZXIuc2V0U3RhdHVzKGxhc3QtPmxpbmVC
cmVha0JpZGlTdGF0dXMoKSk7CkBAIC0xMzcyLDcgKzEzNzIsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpmaXRCZWxvd0Zsb2F0cyhpbnQgd2lkCiAgICAgfQogCiAgICAgaWYgKG5ld0xpbmVXaWR0aCA+
IGF2YWlsYWJsZVdpZHRoKSB7Ci0gICAgICAgIHNldEhlaWdodChsYXN0RmxvYXRCb3R0b20pOwor
ICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxhc3RGbG9hdEJvdHRvbSk7CiAgICAgICAgIGF2YWls
YWJsZVdpZHRoID0gbmV3TGluZVdpZHRoOwogICAgIH0KIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAkocmV2aXNpb24gNjgzNjIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDEyIEBAIHZvaWQgUmVuZGVyQm94Ojpz
ZXRMb2dpY2FsSGVpZ2h0KGludCBzaXoKIAogaW50IFJlbmRlckJveDo6bWFyZ2luQmVmb3JlKCkg
Y29uc3QKIHsKLSAgICBzd2l0Y2ggKHN0eWxlKCktPmJsb2NrRmxvdygpKSB7CisgICAgcmV0dXJu
IG1hcmdpbkJlZm9yZVVzaW5nKHN0eWxlKCkpOworfQorCitpbnQgUmVuZGVyQm94OjptYXJnaW5C
ZWZvcmVVc2luZyhjb25zdCBSZW5kZXJTdHlsZSogcykgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHMt
PmJsb2NrRmxvdygpKSB7CiAgICAgY2FzZSBUb3BUb0JvdHRvbUJsb2NrRmxvdzoKICAgICAgICAg
cmV0dXJuIG1fbWFyZ2luVG9wOwogICAgIGNhc2UgQm90dG9tVG9Ub3BCbG9ja0Zsb3c6CkBAIC0x
MjcsNyArMTMyLDEyIEBAIGludCBSZW5kZXJCb3g6Om1hcmdpbkJlZm9yZSgpIGNvbnN0CiAKIGlu
dCBSZW5kZXJCb3g6Om1hcmdpbkFmdGVyKCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKHN0eWxlKCkt
PmJsb2NrRmxvdygpKSB7CisgICAgcmV0dXJuIG1hcmdpbkFmdGVyVXNpbmcoc3R5bGUoKSk7Cit9
CisKK2ludCBSZW5kZXJCb3g6Om1hcmdpbkFmdGVyVXNpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHMp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChzLT5ibG9ja0Zsb3coKSkgewogICAgIGNhc2UgVG9wVG9C
b3R0b21CbG9ja0Zsb3c6CiAgICAgICAgIHJldHVybiBtX21hcmdpbkJvdHRvbTsKICAgICBjYXNl
IEJvdHRvbVRvVG9wQmxvY2tGbG93OgpAQCAtMjA1LDYgKzIxNSw0NiBAQCB2b2lkIFJlbmRlckJv
eDo6c2V0TWFyZ2luRW5kVXNpbmcoY29uc3QgCiAgICAgfQogfQogCit2b2lkIFJlbmRlckJveDo6
c2V0TWFyZ2luQmVmb3JlKGludCBtYXJnaW4pCit7CisgICAgc2V0TWFyZ2luQmVmb3JlVXNpbmco
c3R5bGUoKSwgbWFyZ2luKTsKK30KKwordm9pZCBSZW5kZXJCb3g6OnNldE1hcmdpbkFmdGVyKGlu
dCBtYXJnaW4pCit7CisgICAgc2V0TWFyZ2luQWZ0ZXJVc2luZyhzdHlsZSgpLCBtYXJnaW4pOwor
fQorCit2b2lkIFJlbmRlckJveDo6c2V0TWFyZ2luQmVmb3JlVXNpbmcoY29uc3QgUmVuZGVyU3R5
bGUqIHMsIGludCBtYXJnaW4pCit7CisgICAgaWYgKHMtPmlzVmVydGljYWxCbG9ja0Zsb3coKSkg
eworICAgICAgICBpZiAocy0+ZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgICAgICAgICAgbV9tYXJn
aW5Ub3AgPSBtYXJnaW47CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbWFyZ2luQm90dG9t
ID0gbWFyZ2luOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzLT5kaXJlY3Rpb24oKSA9PSBM
VFIpCisgICAgICAgICAgICBtX21hcmdpbkJvdHRvbSA9IG1hcmdpbjsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9tYXJnaW5Ub3AgPSBtYXJnaW47CisgICAgfQorfQorCit2b2lkIFJlbmRl
ckJveDo6c2V0TWFyZ2luQWZ0ZXJVc2luZyhjb25zdCBSZW5kZXJTdHlsZSogcywgaW50IG1hcmdp
bikKK3sKKyAgICBpZiAocy0+aXNWZXJ0aWNhbEJsb2NrRmxvdygpKSB7CisgICAgICAgIGlmIChz
LT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgICAgICAgICBtX21hcmdpbkJvdHRvbSA9IG1hcmdp
bjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9tYXJnaW5Ub3AgPSBtYXJnaW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKHMtPmRpcmVjdGlvbigpID09IExUUikKKyAgICAgICAgICAg
IG1fbWFyZ2luVG9wID0gbWFyZ2luOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX21hcmdp
bkJvdHRvbSA9IG1hcmdpbjsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyQm94OjpkZXN0cm95KCkK
IHsKICAgICAvLyBBIGxvdCBvZiB0aGUgY29kZSBpbiB0aGlzIGZ1bmN0aW9uIGlzIGp1c3QgcGFz
dGVkIGludG8KQEAgLTE2MTcsMTUgKzE2NjcsMjYgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVM
b2dpY2FsSGVpZ2h0KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTGVuZ3RoIGg7Ci0gICAgaWYg
KGlzUG9zaXRpb25lZCgpKQorICAgIGlmIChpc1Bvc2l0aW9uZWQoKSkgeworICAgICAgICAvLyBG
SVhNRTogVGhpcyBjYWxjdWxhdGlvbiBpcyBub3QgcGF0Y2hlZCBmb3IgYmxvY2stZmxvdyB5ZXQu
CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjUw
MAogICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQoKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgY29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucygpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICBib29s
IGhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2sgPSBjYi0+c3R5bGUoKS0+aXNWZXJ0aWNh
bEJsb2NrRmxvdygpICE9IHN0eWxlKCktPmlzVmVydGljYWxCbG9ja0Zsb3coKTsKKyAgICAKKyAg
ICAgICAgaWYgKCFoYXNQZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrKQorICAgICAgICAgICAg
Y29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucygpOwogCiAgICAgICAgIC8vIEZvciB0YWJsZXMs
IGNhbGN1bGF0ZSBtYXJnaW5zIG9ubHkuCi0gICAgICAgIGlmIChpc1RhYmxlKCkpCisgICAgICAg
IGlmIChpc1RhYmxlKCkpIHsKKyAgICAgICAgICAgIGlmIChoYXNQZXJwZW5kaWN1bGFyQ29udGFp
bmluZ0Jsb2NrKQorICAgICAgICAgICAgICAgIGNvbXB1dGVNYXJnaW5zSW5Db250YWluaW5nQmxv
Y2tJbmxpbmVEaXJlY3Rpb24oY2IsIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRl
bnQoKSwgbG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
CisgICAgICAgIC8vIEZJWE1FOiBBY2NvdW50IGZvciBibG9jay1mbG93IGluIGZsZXhpYmxlIGJv
eGVzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDY0MTgKICAgICAgICAgYm9vbCBpbkhvcml6b250YWxCb3ggPSBwYXJlbnQoKS0+aXNGbGV4aWJs
ZUJveCgpICYmIHBhcmVudCgpLT5zdHlsZSgpLT5ib3hPcmllbnQoKSA9PSBIT1JJWk9OVEFMOwog
ICAgICAgICBib29sIHN0cmV0Y2hpbmcgPSBwYXJlbnQoKS0+c3R5bGUoKS0+Ym94QWxpZ24oKSA9
PSBCU1RSRVRDSDsKICAgICAgICAgYm9vbCB0cmVhdEFzUmVwbGFjZWQgPSBzaG91bGRDb21wdXRl
U2l6ZUFzUmVwbGFjZWQoKSAmJiAoIWluSG9yaXpvbnRhbEJveCB8fCAhc3RyZXRjaGluZyk7CkBA
IC0xNjMzLDMwICsxNjk0LDM0IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdo
dCgpCiAKICAgICAgICAgLy8gVGhlIHBhcmVudCBib3ggaXMgZmxleGluZyB1cywgc28gaXQgaGFz
IGluY3JlYXNlZCBvciBkZWNyZWFzZWQgb3VyIGhlaWdodC4gIFdlIGhhdmUgdG8KICAgICAgICAg
Ly8gZ3JhYiBvdXIgY2FjaGVkIGZsZXhpYmxlIGhlaWdodC4KKyAgICAgICAgLy8gRklYTUU6IEFj
Y291bnQgZm9yIGJsb2NrLWZsb3cgaW4gZmxleGlibGUgYm94ZXMuCisgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjQxOAogICAgICAgICBpZiAoaGFz
T3ZlcnJpZGVTaXplKCkgJiYgcGFyZW50KCktPmlzRmxleGlibGVCb3goKSAmJiBwYXJlbnQoKS0+
c3R5bGUoKS0+Ym94T3JpZW50KCkgPT0gVkVSVElDQUwKICAgICAgICAgICAgICAgICAmJiBwYXJl
bnQoKS0+aXNGbGV4aW5nQ2hpbGRyZW4oKSkKLSAgICAgICAgICAgIGggPSBMZW5ndGgob3ZlcnJp
ZGVTaXplKCkgLSBib3JkZXJBbmRQYWRkaW5nSGVpZ2h0KCksIEZpeGVkKTsKKyAgICAgICAgICAg
IGggPSBMZW5ndGgob3ZlcnJpZGVTaXplKCkgLSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdo
dCgpLCBGaXhlZCk7CiAgICAgICAgIGVsc2UgaWYgKHRyZWF0QXNSZXBsYWNlZCkKICAgICAgICAg
ICAgIGggPSBMZW5ndGgoY29tcHV0ZVJlcGxhY2VkSGVpZ2h0KCksIEZpeGVkKTsKICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBoID0gc3R5bGUoKS0+aGVpZ2h0KCk7CisgICAgICAgICAgICBo
ID0gc3R5bGUoKS0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAgY2hlY2tNaW5NYXhIZWln
aHQgPSB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQmxvY2sgY2hpbGRyZW4gb2YgaG9y
aXpvbnRhbCBmbGV4aWJsZSBib3hlcyBmaWxsIHRoZSBoZWlnaHQgb2YgdGhlIGJveC4KKyAgICAg
ICAgLy8gRklYTUU6IEFjY291bnQgZm9yIGJsb2NrLWZsb3cgaW4gZmxleGlibGUgYm94ZXMuCisg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjQxOAog
ICAgICAgICBpZiAoaC5pc0F1dG8oKSAmJiBwYXJlbnQoKS0+aXNGbGV4aWJsZUJveCgpICYmIHBh
cmVudCgpLT5zdHlsZSgpLT5ib3hPcmllbnQoKSA9PSBIT1JJWk9OVEFMCiAgICAgICAgICAgICAg
ICAgJiYgcGFyZW50KCktPmlzU3RyZXRjaGluZ0NoaWxkcmVuKCkpIHsKLSAgICAgICAgICAgIGgg
PSBMZW5ndGgocGFyZW50Qm94KCktPmNvbnRlbnRIZWlnaHQoKSAtIG1hcmdpblRvcCgpIC0gbWFy
Z2luQm90dG9tKCkgLSBib3JkZXJBbmRQYWRkaW5nSGVpZ2h0KCksIEZpeGVkKTsKKyAgICAgICAg
ICAgIGggPSBMZW5ndGgocGFyZW50Qm94KCktPmNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgLSBtYXJn
aW5CZWZvcmUoKSAtIG1hcmdpbkFmdGVyKCkgLSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdo
dCgpLCBGaXhlZCk7CiAgICAgICAgICAgICBjaGVja01pbk1heEhlaWdodCA9IGZhbHNlOwogICAg
ICAgICB9CiAKICAgICAgICAgaW50IGhlaWdodFJlc3VsdDsKICAgICAgICAgaWYgKGNoZWNrTWlu
TWF4SGVpZ2h0KSB7Ci0gICAgICAgICAgICBoZWlnaHRSZXN1bHQgPSBjb21wdXRlTG9naWNhbEhl
aWdodFVzaW5nKHN0eWxlKCktPmhlaWdodCgpKTsKKyAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9
IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbEhlaWdodCgpKTsKICAg
ICAgICAgICAgIGlmIChoZWlnaHRSZXN1bHQgPT0gLTEpCi0gICAgICAgICAgICAgICAgaGVpZ2h0
UmVzdWx0ID0gaGVpZ2h0KCk7Ci0gICAgICAgICAgICBpbnQgbWluSCA9IGNvbXB1dGVMb2dpY2Fs
SGVpZ2h0VXNpbmcoc3R5bGUoKS0+bWluSGVpZ2h0KCkpOyAvLyBMZWF2ZSBhcyAtMSBpZiB1bnNl
dC4KLSAgICAgICAgICAgIGludCBtYXhIID0gc3R5bGUoKS0+bWF4SGVpZ2h0KCkuaXNVbmRlZmlu
ZWQoKSA/IGhlaWdodFJlc3VsdCA6IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+
bWF4SGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGxvZ2ljYWxIZWln
aHQoKTsKKyAgICAgICAgICAgIGludCBtaW5IID0gY29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyhz
dHlsZSgpLT5sb2dpY2FsTWluSGVpZ2h0KCkpOyAvLyBMZWF2ZSBhcyAtMSBpZiB1bnNldC4KKyAg
ICAgICAgICAgIGludCBtYXhIID0gc3R5bGUoKS0+bG9naWNhbE1heEhlaWdodCgpLmlzVW5kZWZp
bmVkKCkgPyBoZWlnaHRSZXN1bHQgOiBjb21wdXRlTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCkt
PmxvZ2ljYWxNYXhIZWlnaHQoKSk7CiAgICAgICAgICAgICBpZiAobWF4SCA9PSAtMSkKICAgICAg
ICAgICAgICAgICBtYXhIID0gaGVpZ2h0UmVzdWx0OwogICAgICAgICAgICAgaGVpZ2h0UmVzdWx0
ID0gbWluKG1heEgsIGhlaWdodFJlc3VsdCk7CkBAIC0xNjY1LDEwICsxNzMwLDEzIEBAIHZvaWQg
UmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdodCgpCiAgICAgICAgICAgICAvLyBUaGUgb25s
eSB0aW1lcyB3ZSBkb24ndCBjaGVjayBtaW4vbWF4IGhlaWdodCBhcmUgd2hlbiBhIGZpeGVkIGxl
bmd0aCBoYXMKICAgICAgICAgICAgIC8vIGJlZW4gZ2l2ZW4gYXMgYW4gb3ZlcnJpZGUuICBKdXN0
IHVzZSB0aGF0LiAgVGhlIHZhbHVlIGhhcyBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQKICAgICAgICAg
ICAgIC8vIGZvciBib3gtc2l6aW5nLgotICAgICAgICAgICAgaGVpZ2h0UmVzdWx0ID0gaC52YWx1
ZSgpICsgYm9yZGVyQW5kUGFkZGluZ0hlaWdodCgpOworICAgICAgICAgICAgaGVpZ2h0UmVzdWx0
ID0gaC52YWx1ZSgpICsgYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAg
fQogCi0gICAgICAgIHNldEhlaWdodChoZWlnaHRSZXN1bHQpOworICAgICAgICBzZXRMb2dpY2Fs
SGVpZ2h0KGhlaWdodFJlc3VsdCk7CisgICAgICAgIAorICAgICAgICBpZiAoaGFzUGVycGVuZGlj
dWxhckNvbnRhaW5pbmdCbG9jaykKKyAgICAgICAgICAgIGNvbXB1dGVNYXJnaW5zSW5Db250YWlu
aW5nQmxvY2tJbmxpbmVEaXJlY3Rpb24oY2IsIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZv
ckNvbnRlbnQoKSwgaGVpZ2h0UmVzdWx0KTsKICAgICB9CiAKICAgICAvLyBXaW5JRSBxdWlyazog
VGhlIDxodG1sPiBibG9jayBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBjYW52YXMgaW4gcXVpcmtz
IG1vZGUuICBUaGUgPGJvZHk+IGFsd2F5cyBmaWxscyB0aGUKQEAgLTE2NzcsMzMgKzE3NDUsNDEg
QEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCkKICAgICAvLyBoZWlnaHQg
c2luY2Ugd2UgZG9uJ3Qgc2V0IGEgaGVpZ2h0IGluIFJlbmRlclZpZXcgd2hlbiB3ZSdyZSBwcmlu
dGluZy4gU28gd2l0aG91dCB0aGlzIHF1aXJrLCB0aGUgCiAgICAgLy8gaGVpZ2h0IGhhcyBub3Ro
aW5nIHRvIGJlIGEgcGVyY2VudGFnZSBvZiwgYW5kIGl0IGVuZHMgdXAgYmVpbmcgMC4gVGhhdCBp
cyBiYWQuCiAgICAgYm9vbCBwYWdpbmF0ZWRDb250ZW50TmVlZHNCYXNlSGVpZ2h0ID0gZG9jdW1l
bnQoKS0+cHJpbnRpbmcoKSAmJiBoLmlzUGVyY2VudCgpCi0gICAgICAgICYmIChpc1Jvb3QoKSB8
fCAoaXNCb2R5KCkgJiYgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCkt
PnN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSk7CisgICAgICAgICYmIChpc1Jvb3QoKSB8
fCAoaXNCb2R5KCkgJiYgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCkt
PnN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKS5pc1BlcmNlbnQoKSkpOwogICAgIGlmIChzdHJldGNo
ZXNUb1ZpZXdIZWlnaHQoKSB8fCBwYWdpbmF0ZWRDb250ZW50TmVlZHNCYXNlSGVpZ2h0KSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBGaW5pc2ggYWNjb3VudGluZyBmb3IgYmxvY2sgZmxvdyBoZXJlLgor
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY2MDMK
ICAgICAgICAgaW50IG1hcmdpbnMgPSBjb2xsYXBzZWRNYXJnaW5Ub3AoKSArIGNvbGxhcHNlZE1h
cmdpbkJvdHRvbSgpOwotICAgICAgICBpbnQgdmlzSGVpZ2h0ID0gZG9jdW1lbnQoKS0+cHJpbnRp
bmcoKSA/IHN0YXRpY19jYXN0PGludD4odmlldygpLT5wYWdlSGVpZ2h0KCkpIDogdmlldygpLT52
aWV3SGVpZ2h0KCk7CisgICAgICAgIGludCB2aXNIZWlnaHQ7CisgICAgICAgIGlmIChkb2N1bWVu
dCgpLT5wcmludGluZygpKQorICAgICAgICAgICAgdmlzSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50
Pih2aWV3KCktPnBhZ2VIZWlnaHQoKSk7CisgICAgICAgIGVsc2UgaWYgKHN0eWxlKCktPmlzVmVy
dGljYWxCbG9ja0Zsb3coKSkKKyAgICAgICAgICAgIHZpc0hlaWdodCA9IHZpZXcoKS0+dmlld0hl
aWdodCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2aXNIZWlnaHQgPSB2aWV3KCktPnZp
ZXdXaWR0aCgpOwogICAgICAgICBpZiAoaXNSb290KCkpCi0gICAgICAgICAgICBzZXRIZWlnaHQo
bWF4KGhlaWdodCgpLCB2aXNIZWlnaHQgLSBtYXJnaW5zKSk7CisgICAgICAgICAgICBzZXRMb2dp
Y2FsSGVpZ2h0KG1heChsb2dpY2FsSGVpZ2h0KCksIHZpc0hlaWdodCAtIG1hcmdpbnMpKTsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgbWFyZ2luc0JvcmRlcnNQYWRkaW5nID0gbWFy
Z2lucyArIHBhcmVudEJveCgpLT5tYXJnaW5Ub3AoKSArIHBhcmVudEJveCgpLT5tYXJnaW5Cb3R0
b20oKSArIHBhcmVudEJveCgpLT5ib3JkZXJBbmRQYWRkaW5nSGVpZ2h0KCk7Ci0gICAgICAgICAg
ICBzZXRIZWlnaHQobWF4KGhlaWdodCgpLCB2aXNIZWlnaHQgLSBtYXJnaW5zQm9yZGVyc1BhZGRp
bmcpKTsKKyAgICAgICAgICAgIGludCBtYXJnaW5zQm9yZGVyc1BhZGRpbmcgPSBtYXJnaW5zICsg
cGFyZW50Qm94KCktPm1hcmdpbkJlZm9yZSgpICsgcGFyZW50Qm94KCktPm1hcmdpbkFmdGVyKCkg
KyBwYXJlbnRCb3goKS0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAg
ICAgIHNldExvZ2ljYWxIZWlnaHQobWF4KGxvZ2ljYWxIZWlnaHQoKSwgdmlzSGVpZ2h0IC0gbWFy
Z2luc0JvcmRlcnNQYWRkaW5nKSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIGludCBSZW5kZXJC
b3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoY29uc3QgTGVuZ3RoJiBoKQogewotICAgIGlu
dCBoZWlnaHQgPSAtMTsKKyAgICBpbnQgbG9naWNhbEhlaWdodCA9IC0xOwogICAgIGlmICghaC5p
c0F1dG8oKSkgewogICAgICAgICBpZiAoaC5pc0ZpeGVkKCkpCi0gICAgICAgICAgICBoZWlnaHQg
PSBoLnZhbHVlKCk7CisgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0ID0gaC52YWx1ZSgpOwogICAg
ICAgICBlbHNlIGlmIChoLmlzUGVyY2VudCgpKQotICAgICAgICAgICAgaGVpZ2h0ID0gY29tcHV0
ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGgpOwotICAgICAgICBpZiAoaGVpZ2h0ICE9IC0xKSB7
Ci0gICAgICAgICAgICBoZWlnaHQgPSBjb21wdXRlQm9yZGVyQm94TG9naWNhbEhlaWdodChoZWln
aHQpOwotICAgICAgICAgICAgcmV0dXJuIGhlaWdodDsKKyAgICAgICAgICAgIGxvZ2ljYWxIZWln
aHQgPSBjb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxIZWlnaHQoaCk7CisgICAgICAgIGlmIChsb2dp
Y2FsSGVpZ2h0ICE9IC0xKSB7CisgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0ID0gY29tcHV0ZUJv
cmRlckJveExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCk7CisgICAgICAgICAgICByZXR1cm4g
bG9naWNhbEhlaWdodDsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gaGVpZ2h0OworICAg
IHJldHVybiBsb2dpY2FsSGVpZ2h0OwogfQogCiBpbnQgUmVuZGVyQm94Ojpjb21wdXRlUGVyY2Vu
dGFnZUxvZ2ljYWxIZWlnaHQoY29uc3QgTGVuZ3RoJiBoZWlnaHQpCkBAIC0xNzE2LDcgKzE3OTIs
NyBAQCBpbnQgUmVuZGVyQm94Ojpjb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxICiAgICAgICAgIC8v
IGJsb2NrIHRoYXQgbWF5IGhhdmUgYSBzcGVjaWZpZWQgaGVpZ2h0IGFuZCB0aGVuIHVzZSBpdC4g
IEluIHN0cmljdCBtb2RlLCB0aGlzIHZpb2xhdGVzIHRoZQogICAgICAgICAvLyBzcGVjaWZpY2F0
aW9uLCB3aGljaCBzdGF0ZXMgdGhhdCBwZXJjZW50YWdlIGhlaWdodHMganVzdCByZXZlcnQgdG8g
YXV0byBpZiB0aGUgY29udGFpbmluZwogICAgICAgICAvLyBibG9jayBoYXMgYW4gYXV0byBoZWln
aHQuCi0gICAgICAgIHdoaWxlICghY2ItPmlzUmVuZGVyVmlldygpICYmICFjYi0+aXNCb2R5KCkg
JiYgIWNiLT5pc1RhYmxlQ2VsbCgpICYmICFjYi0+aXNQb3NpdGlvbmVkKCkgJiYgY2ItPnN0eWxl
KCktPmhlaWdodCgpLmlzQXV0bygpKSB7CisgICAgICAgIHdoaWxlICghY2ItPmlzUmVuZGVyVmll
dygpICYmICFjYi0+aXNCb2R5KCkgJiYgIWNiLT5pc1RhYmxlQ2VsbCgpICYmICFjYi0+aXNQb3Np
dGlvbmVkKCkgJiYgY2ItPnN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSkgewogICAg
ICAgICAgICAgc2tpcHBlZEF1dG9IZWlnaHRDb250YWluaW5nQmxvY2sgPSB0cnVlOwogICAgICAg
ICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgICAgICBjYi0+YWRkUGVy
Y2VudEhlaWdodERlc2NlbmRhbnQodGhpcyk7CkBAIC0xNzI1LDcgKzE4MDEsOSBAQCBpbnQgUmVu
ZGVyQm94Ojpjb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxICiAKICAgICAvLyBBIHBvc2l0aW9uZWQg
ZWxlbWVudCB0aGF0IHNwZWNpZmllZCBib3RoIHRvcC9ib3R0b20gb3IgdGhhdCBzcGVjaWZpZXMg
aGVpZ2h0IHNob3VsZCBiZSB0cmVhdGVkIGFzIHRob3VnaCBpdCBoYXMgYSBoZWlnaHQKICAgICAv
LyBleHBsaWNpdGx5IHNwZWNpZmllZCB0aGF0IGNhbiBiZSB1c2VkIGZvciBhbnkgcGVyY2VudGFn
ZSBjb21wdXRhdGlvbnMuCi0gICAgYm9vbCBpc1Bvc2l0aW9uZWRXaXRoU3BlY2lmaWVkSGVpZ2h0
ID0gY2ItPmlzUG9zaXRpb25lZCgpICYmICghY2ItPnN0eWxlKCktPmhlaWdodCgpLmlzQXV0bygp
IHx8ICghY2ItPnN0eWxlKCktPnRvcCgpLmlzQXV0bygpICYmICFjYi0+c3R5bGUoKS0+Ym90dG9t
KCkuaXNBdXRvKCkpKTsKKyAgICAvLyBGSVhNRTogV2UgY2FuJ3QganVzdCBjaGVjayB0b3AvYm90
dG9tIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ2NTAwCisgICAgYm9vbCBpc1Bvc2l0aW9uZWRXaXRoU3BlY2lmaWVkSGVpZ2h0ID0gY2ItPmlz
UG9zaXRpb25lZCgpICYmICghY2ItPnN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSB8
fCAoIWNiLT5zdHlsZSgpLT50b3AoKS5pc0F1dG8oKSAmJiAhY2ItPnN0eWxlKCktPmJvdHRvbSgp
LmlzQXV0bygpKSk7CiAKICAgICBib29sIGluY2x1ZGVCb3JkZXJQYWRkaW5nID0gaXNUYWJsZSgp
OwogCkBAIC0xNzQ0LDcgKzE4MjIsNyBAQCBpbnQgUmVuZGVyQm94Ojpjb21wdXRlUGVyY2VudGFn
ZUxvZ2ljYWxICiAgICAgICAgICAgICAgICAgLy8gdG8gZ3JvdyB0byBmaWxsIHRoZSBzcGFjZS4g
IFRoaXMgY291bGQgZW5kIHVwIGJlaW5nIHdyb25nIGluIHNvbWUgY2FzZXMsIGJ1dCBpdCBpcwog
ICAgICAgICAgICAgICAgIC8vIHByZWZlcmFibGUgdG8gdGhlIGFsdGVybmF0aXZlIChzaXppbmcg
aW50cmluc2ljYWxseSBhbmQgbWFraW5nIHRoZSByb3cgZW5kIHVwIHRvbyBiaWcpLgogICAgICAg
ICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IHRvUmVuZGVyVGFibGVDZWxsKGNiKTsK
LSAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsc092ZXJmbG93WSgpICYmICghY2VsbC0+c3R5bGUo
KS0+aGVpZ2h0KCkuaXNBdXRvKCkgfHwgIWNlbGwtPnRhYmxlKCktPnN0eWxlKCktPmhlaWdodCgp
LmlzQXV0bygpKSkKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsc092ZXJmbG93WSgpICYmICgh
Y2VsbC0+c3R5bGUoKS0+bG9naWNhbEhlaWdodCgpLmlzQXV0bygpIHx8ICFjZWxsLT50YWJsZSgp
LT5zdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CkBA
IC0xNzUzLDI0ICsxODMxLDI0IEBAIGludCBSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTG9n
aWNhbEgKICAgICB9CiAgICAgLy8gT3RoZXJ3aXNlIHdlIG9ubHkgdXNlIG91ciBwZXJjZW50YWdl
IGhlaWdodCBpZiBvdXIgY29udGFpbmluZyBibG9jayBoYWQgYSBzcGVjaWZpZWQKICAgICAvLyBo
ZWlnaHQuCi0gICAgZWxzZSBpZiAoY2ItPnN0eWxlKCktPmhlaWdodCgpLmlzRml4ZWQoKSkKLSAg
ICAgICAgcmVzdWx0ID0gY2ItPmNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChjYi0+c3R5
bGUoKS0+aGVpZ2h0KCkudmFsdWUoKSk7Ci0gICAgZWxzZSBpZiAoY2ItPnN0eWxlKCktPmhlaWdo
dCgpLmlzUGVyY2VudCgpICYmICFpc1Bvc2l0aW9uZWRXaXRoU3BlY2lmaWVkSGVpZ2h0KSB7Cisg
ICAgZWxzZSBpZiAoY2ItPnN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKS5pc0ZpeGVkKCkpCisgICAg
ICAgIHJlc3VsdCA9IGNiLT5jb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWlnaHQoY2ItPnN0eWxl
KCktPmxvZ2ljYWxIZWlnaHQoKS52YWx1ZSgpKTsKKyAgICBlbHNlIGlmIChjYi0+c3R5bGUoKS0+
bG9naWNhbEhlaWdodCgpLmlzUGVyY2VudCgpICYmICFpc1Bvc2l0aW9uZWRXaXRoU3BlY2lmaWVk
SGVpZ2h0KSB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVjdXIgYW5kIGNvbXB1dGUgdGhlIHBl
cmNlbnRhZ2UgaGVpZ2h0IGZvciBvdXIgY29udGFpbmluZyBibG9jay4KLSAgICAgICAgcmVzdWx0
ID0gY2ItPmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjYi0+c3R5bGUoKS0+aGVpZ2h0
KCkpOworICAgICAgICByZXN1bHQgPSBjYi0+Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0
KGNiLT5zdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICBpZiAocmVzdWx0ICE9IC0x
KQogICAgICAgICAgICAgcmVzdWx0ID0gY2ItPmNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdo
dChyZXN1bHQpOwogICAgIH0gZWxzZSBpZiAoY2ItPmlzUmVuZGVyVmlldygpIHx8IChjYi0+aXNC
b2R5KCkgJiYgZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpIHx8IGlzUG9zaXRpb25lZFdpdGhT
cGVjaWZpZWRIZWlnaHQpIHsKICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyB0byBhZmZlY3Qg
dGhlIGJsb2NrJyBoZWlnaHQoKSBtZW1iZXIgdmFyaWFibGUsIHNpbmNlIHRoaXMKICAgICAgICAg
Ly8gY2FuIGdldCBjYWxsZWQgd2hpbGUgdGhlIGJsb2NrIGlzIHN0aWxsIGxheWluZyBvdXQgaXRz
IGtpZHMuCi0gICAgICAgIGludCBvbGRIZWlnaHQgPSBjYi0+aGVpZ2h0KCk7CisgICAgICAgIGlu
dCBvbGRIZWlnaHQgPSBjYi0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICBjYi0+Y29tcHV0ZUxv
Z2ljYWxIZWlnaHQoKTsKLSAgICAgICAgcmVzdWx0ID0gY2ItPmNvbnRlbnRIZWlnaHQoKTsKLSAg
ICAgICAgY2ItPnNldEhlaWdodChvbGRIZWlnaHQpOworICAgICAgICByZXN1bHQgPSBjYi0+Y29u
dGVudExvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgY2ItPnNldExvZ2ljYWxIZWlnaHQob2xkSGVp
Z2h0KTsKICAgICB9IGVsc2UgaWYgKGNiLT5pc1Jvb3QoKSAmJiBpc1Bvc2l0aW9uZWQoKSkKICAg
ICAgICAgLy8gTWF0Y2ggdGhlIHBvc2l0aW9uZWQgb2JqZWN0cyBiZWhhdmlvciwgd2hpY2ggaXMg
dGhhdCBwb3NpdGlvbmVkIG9iamVjdHMgd2lsbCBmaWxsIHRoZWlyIHZpZXdwb3J0CiAgICAgICAg
IC8vIGFsd2F5cy4gIE5vdGUgd2UgY291bGQgb25seSBoaXQgdGhpcyBjYXNlIGJ5IHJlY3Vycmlu
ZyBpbnRvIGNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodCBvbiBhIHBvc2l0aW9uZWQgY29u
dGFpbmluZyBibG9jay4KLSAgICAgICAgcmVzdWx0ID0gY2ItPmNvbXB1dGVDb250ZW50Qm94TG9n
aWNhbEhlaWdodChjYi0+YXZhaWxhYmxlSGVpZ2h0KCkpOworICAgICAgICByZXN1bHQgPSBjYi0+
Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGNiLT5hdmFpbGFibGVMb2dpY2FsSGVpZ2h0
KCkpOwogCiAgICAgaWYgKHJlc3VsdCAhPSAtMSkgewogICAgICAgICByZXN1bHQgPSBoZWlnaHQu
Y2FsY1ZhbHVlKHJlc3VsdCk7CkBAIC0xNzc4LDcgKzE4NTYsNyBAQCBpbnQgUmVuZGVyQm94Ojpj
b21wdXRlUGVyY2VudGFnZUxvZ2ljYWxICiAgICAgICAgICAgICAvLyBJdCBpcyBuZWNlc3Nhcnkg
dG8gdXNlIHRoZSBib3JkZXItYm94IHRvIG1hdGNoIFdpbklFJ3MgYnJva2VuCiAgICAgICAgICAg
ICAvLyBib3ggbW9kZWwuICBUaGlzIGlzIGVzc2VudGlhbCBmb3Igc2l6aW5nIGluc2lkZQogICAg
ICAgICAgICAgLy8gdGFibGUgY2VsbHMgdXNpbmcgcGVyY2VudGFnZSBoZWlnaHRzLgotICAgICAg
ICAgICAgcmVzdWx0IC09IGJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKTsKKyAgICAgICAgICAgIHJl
c3VsdCAtPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAgcmVz
dWx0ID0gbWF4KDAsIHJlc3VsdCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xODQ1LDcgKzE5MjMs
NyBAQCBpbnQgUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRIZWlnaHRVc2luCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChoZWlnaHQuY2FsY1Zh
bHVlKG5ld0hlaWdodCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpbnQgYXZhaWxhYmxlSGVpZ2h0ID0gaXNQb3NpdGlvbmVkKCkgPyBjb250YWluaW5nQmxvY2tI
ZWlnaHRGb3JQb3NpdGlvbmVkKHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY2IpKSA6IHRvUmVuZGVy
Qm94KGNiKS0+YXZhaWxhYmxlSGVpZ2h0KCk7CisgICAgICAgICAgICBpbnQgYXZhaWxhYmxlSGVp
Z2h0ID0gaXNQb3NpdGlvbmVkKCkgPyBjb250YWluaW5nQmxvY2tIZWlnaHRGb3JQb3NpdGlvbmVk
KHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY2IpKSA6IHRvUmVuZGVyQm94KGNiKS0+YXZhaWxhYmxl
TG9naWNhbEhlaWdodCgpOwogCiAgICAgICAgICAgICAvLyBJdCBpcyBuZWNlc3NhcnkgdG8gdXNl
IHRoZSBib3JkZXItYm94IHRvIG1hdGNoIFdpbklFJ3MgYnJva2VuCiAgICAgICAgICAgICAvLyBi
b3ggbW9kZWwuICBUaGlzIGlzIGVzc2VudGlhbCBmb3Igc2l6aW5nIGluc2lkZQpAQCAtMTg2NCw2
MSArMTk0Miw1OCBAQCBpbnQgUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRIZWlnaHRVc2luCiAg
ICAgfQogfQogCi1pbnQgUmVuZGVyQm94OjphdmFpbGFibGVIZWlnaHQoKSBjb25zdAoraW50IFJl
bmRlckJveDo6YXZhaWxhYmxlTG9naWNhbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGF2
YWlsYWJsZUhlaWdodFVzaW5nKHN0eWxlKCktPmhlaWdodCgpKTsKKyAgICByZXR1cm4gYXZhaWxh
YmxlTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKSk7CiB9CiAKLWlu
dCBSZW5kZXJCb3g6OmF2YWlsYWJsZUhlaWdodFVzaW5nKGNvbnN0IExlbmd0aCYgaCkgY29uc3QK
K2ludCBSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgm
IGgpIGNvbnN0CiB7CiAgICAgaWYgKGguaXNGaXhlZCgpKQogICAgICAgICByZXR1cm4gY29tcHV0
ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGgudmFsdWUoKSk7CiAKICAgICBpZiAoaXNSZW5kZXJW
aWV3KCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlclZpZXcodGhpcyktPmZyYW1lVmlldygpLT52
aXNpYmxlSGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBzdHlsZSgpLT5pc1ZlcnRpY2FsQmxvY2tG
bG93KCkgPyB0b1JlbmRlclZpZXcodGhpcyktPmZyYW1lVmlldygpLT52aXNpYmxlSGVpZ2h0KCkg
OiB0b1JlbmRlclZpZXcodGhpcyktPmZyYW1lVmlldygpLT52aXNpYmxlV2lkdGgoKTsKIAogICAg
IC8vIFdlIG5lZWQgdG8gc3RvcCBoZXJlLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIGluY3JlYXNl
IHRoZSBoZWlnaHQgb2YgdGhlIHRhYmxlCiAgICAgLy8gYXJ0aWZpY2lhbGx5LiAgV2UncmUgZ29p
bmcgdG8gcmVseSBvbiB0aGlzIGNlbGwgZ2V0dGluZyBleHBhbmRlZCB0byBzb21lIG5ldwogICAg
IC8vIGhlaWdodCwgYW5kIHRoZW4gd2hlbiB3ZSBsYXkgb3V0IGFnYWluIHdlJ2xsIHVzZSB0aGUg
Y2FsY3VsYXRpb24gYmVsb3cuCiAgICAgaWYgKGlzVGFibGVDZWxsKCkgJiYgKGguaXNBdXRvKCkg
fHwgaC5pc1BlcmNlbnQoKSkpCi0gICAgICAgIHJldHVybiBvdmVycmlkZVNpemUoKSAtIGJvcmRl
ckFuZFBhZGRpbmdXaWR0aCgpOworICAgICAgICByZXR1cm4gb3ZlcnJpZGVTaXplKCkgLSBib3Jk
ZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCk7CiAKICAgICBpZiAoaC5pc1BlcmNlbnQoKSkKLSAg
ICAgICByZXR1cm4gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGguY2FsY1ZhbHVlKGNv
bnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVIZWlnaHQoKSkpOworICAgICAgIHJldHVybiBjb21w
dXRlQ29udGVudEJveExvZ2ljYWxIZWlnaHQoaC5jYWxjVmFsdWUoY29udGFpbmluZ0Jsb2NrKCkt
PmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoKSkpOwogCisgICAgLy8gRklYTUU6IFdlIGNhbid0IGp1
c3QgY2hlY2sgdG9wL2JvdHRvbSBoZXJlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NjUwMAogICAgIGlmIChpc1JlbmRlckJsb2NrKCkgJiYgaXNQb3Np
dGlvbmVkKCkgJiYgc3R5bGUoKS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgIShzdHlsZSgpLT50b3Ao
KS5pc0F1dG8oKSB8fCBzdHlsZSgpLT5ib3R0b20oKS5pc0F1dG8oKSkpIHsKICAgICAgICAgUmVu
ZGVyQmxvY2sqIGJsb2NrID0gY29uc3RfY2FzdDxSZW5kZXJCbG9jayo+KHRvUmVuZGVyQmxvY2so
dGhpcykpOwotICAgICAgICBpbnQgb2xkSGVpZ2h0ID0gYmxvY2stPmhlaWdodCgpOworICAgICAg
ICBpbnQgb2xkSGVpZ2h0ID0gYmxvY2stPmxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgYmxvY2st
PmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgIGludCBuZXdIZWlnaHQgPSBibG9jay0+
Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGJsb2NrLT5jb250ZW50SGVpZ2h0KCkpOwot
ICAgICAgICBibG9jay0+c2V0SGVpZ2h0KG9sZEhlaWdodCk7CisgICAgICAgIGludCBuZXdIZWln
aHQgPSBibG9jay0+Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGJsb2NrLT5jb250ZW50
TG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgYmxvY2stPnNldExvZ2ljYWxIZWlnaHQob2xkSGVp
Z2h0KTsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChuZXdI
ZWlnaHQpOwogICAgIH0KIAotICAgIHJldHVybiBjb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxl
SGVpZ2h0KCk7Ci19Ci0KLWludCBSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpIGNv
bnN0Ci17Ci0gICAgaWYgKHN0eWxlKCktPmlzVmVydGljYWxCbG9ja0Zsb3coKSkKLSAgICAgICAg
cmV0dXJuIGNvbnRlbnRXaWR0aCgpOwotICAgIHJldHVybiBjb250ZW50SGVpZ2h0KCk7CisgICAg
cmV0dXJuIGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVMb2dpY2FsSGVpZ2h0KCk7CiB9CiAK
IHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKCkKIHsKICAgICBp
ZiAoaXNUYWJsZUNlbGwoKSkgewotICAgICAgICBtX21hcmdpblRvcCA9IDA7Ci0gICAgICAgIG1f
bWFyZ2luQm90dG9tID0gMDsKKyAgICAgICAgLy8gRklYTUU6IE5vdCByaWdodCBpZiB3ZSBhbGxv
dyBjZWxscyB0byBoYXZlIGRpZmZlcmVudCBkaXJlY3Rpb25hbGl0eSB0aGFuIHRoZSB0YWJsZS4g
IElmIHdlIGRvIGFsbG93IHRoaXMsIHRob3VnaCwKKyAgICAgICAgLy8gd2UgbWF5IGp1c3QgZG8g
aXQgd2l0aCBhbiBleHRyYSBhbm9ueW1vdXMgYmxvY2sgaW5zaWRlIHRoZSBjZWxsLgorICAgICAg
ICBzZXRNYXJnaW5CZWZvcmUoMCk7CisgICAgICAgIHNldE1hcmdpbkFmdGVyKDApOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gbWFyZ2lucyBhcmUgY2FsY3VsYXRlZCB3aXRoIHJl
c3BlY3QgdG8gdGhlIF93aWR0aF8gb2YKKyAgICAvLyBNYXJnaW5zIGFyZSBjYWxjdWxhdGVkIHdp
dGggcmVzcGVjdCB0byB0aGUgbG9naWNhbCB3aWR0aCBvZgogICAgIC8vIHRoZSBjb250YWluaW5n
IGJsb2NrICg4LjMpCi0gICAgaW50IGN3ID0gY29udGFpbmluZ0Jsb2NrKCktPmNvbnRlbnRXaWR0
aCgpOworICAgIGludCBjdyA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQo
KTsKIAotICAgIG1fbWFyZ2luVG9wID0gc3R5bGUoKS0+bWFyZ2luVG9wKCkuY2FsY01pblZhbHVl
KGN3KTsKLSAgICBtX21hcmdpbkJvdHRvbSA9IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgpLmNhbGNN
aW5WYWx1ZShjdyk7CisgICAgc2V0TWFyZ2luQmVmb3JlKHN0eWxlKCktPm1hcmdpbkJlZm9yZSgp
LmNhbGNNaW5WYWx1ZShjdykpOworICAgIHNldE1hcmdpbkFmdGVyKHN0eWxlKCktPm1hcmdpbkFm
dGVyKCkuY2FsY01pblZhbHVlKGN3KSk7CiB9CiAKIGludCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdC
bG9ja1dpZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFp
bmluZ0Jsb2NrKSBjb25zdApAQCAtMzAwOCw3ICszMDgzLDcgQEAgYm9vbCBSZW5kZXJCb3g6OnNo
cmlua1RvQXZvaWRGbG9hdHMoKSBjbwogCiBib29sIFJlbmRlckJveDo6YXZvaWRzRmxvYXRzKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gaXNSZXBsYWNlZCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8
IGlzSFIoKTsKKyAgICByZXR1cm4gaXNSZXBsYWNlZCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8
IGlzSFIoKSB8fCBpc0Jsb2NrRmxvd1Jvb3QoKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmFkZFNo
YWRvd092ZXJmbG93KCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA2ODM2MikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUs
NiArMTE1LDggQEAgcHVibGljOgogCiAgICAgaW50IGNvbnRlbnRXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIGNsaWVudFdpZHRoKCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGluZ1JpZ2h0KCk7IH0KICAg
ICBpbnQgY29udGVudEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNsaWVudEhlaWdodCgpIC0gcGFk
ZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgpOyB9CisgICAgaW50IGNvbnRlbnRMb2dpY2FsV2lk
dGgoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc1ZlcnRpY2FsQmxvY2tGbG93KCkgPyBjb250
ZW50V2lkdGgoKSA6IGNvbnRlbnRIZWlnaHQoKTsgfQorICAgIGludCBjb250ZW50TG9naWNhbEhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzVmVydGljYWxCbG9ja0Zsb3coKSA/IGNv
bnRlbnRIZWlnaHQoKSA6IGNvbnRlbnRXaWR0aCgpOyB9CiAKICAgICAvLyBJRSBleHRlbnNpb25z
LiBVc2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXRXaWR0aC9IZWlnaHQuICBPdmVycmlkZGVuIGJ5IGlu
bGluZXMgKFJlbmRlckZsb3cpCiAgICAgLy8gdG8gcmV0dXJuIHRoZSByZW1haW5pbmcgd2lkdGgg
b24gYSBnaXZlbiBsaW5lIChhbmQgdGhlIGhlaWdodCBvZiBhIHNpbmdsZSBsaW5lKS4KQEAgLTE1
MCw2ICsxNTIsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgbWFyZ2luRW5kKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRNYXJnaW5TdGFydChpbnQpOwogICAgIHZvaWQgc2V0TWFyZ2luRW5kKGlu
dCk7CisgICAgdm9pZCBzZXRNYXJnaW5CZWZvcmUoaW50KTsKKyAgICB2b2lkIHNldE1hcmdpbkFm
dGVyKGludCk7CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIGZpdmUgZnVuY3Rpb25zIGFyZSB1c2Vk
IHRvIGltcGxlbWVudCBjb2xsYXBzaW5nIG1hcmdpbnMuCiAgICAgLy8gQWxsIG9iamVjdHMga25v
dyB0aGVpciBtYXhpbWFsIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW5zLiAgVGhlCkBAIC0y
MjcsNyArMjMxLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBzdHJldGNoZXNUb1ZpZXdIZWlnaHQo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgp
ICYmIHN0eWxlKCktPmhlaWdodCgpLmlzQXV0bygpICYmICFpc0Zsb2F0aW5nT3JQb3NpdGlvbmVk
KCkgJiYgKGlzUm9vdCgpIHx8IGlzQm9keSgpKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50KCkt
PmluUXVpcmtzTW9kZSgpICYmIHN0eWxlKCktPmhlaWdodCgpLmlzQXV0bygpICYmICFpc0Zsb2F0
aW5nT3JQb3NpdGlvbmVkKCkgJiYgKGlzUm9vdCgpIHx8IGlzQm9keSgpKSAmJiAhaXNCbG9ja0Zs
b3dSb290KCk7CiAgICAgfQogCiAgICAgdmlydHVhbCBJbnRTaXplIGludHJpbnNpY1NpemUoKSBj
b25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0KQEAgLTI0OCwxMCArMjUyLDE0IEBAIHB1YmxpYzoK
ICAgICBpbnQgY29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGNvbnN0IExlbmd0aCYgaGVp
Z2h0KTsKIAogICAgIC8vIEJsb2NrIGZsb3dzIHN1YmNsYXNzIGF2YWlsYWJsZVdpZHRoIHRvIGhh
bmRsZSBtdWx0aSBjb2x1bW4gbGF5b3V0IChzaHJpbmtpbmcgdGhlIHdpZHRoIGF2YWlsYWJsZSB0
byBjaGlsZHJlbiB3aGVuIGxheWluZyBvdXQuKQotICAgIHZpcnR1YWwgaW50IGF2YWlsYWJsZVdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gY29udGVudFdpZHRoKCk7IH0gLy8gRklYTUU6IEludmVzdGln
YXRlIHJlbW92aW5nIGV2ZW50dWFsbHkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NjEyNwotICAgIHZpcnR1YWwgaW50IGF2YWlsYWJsZUhlaWdodCgpIGNvbnN0Owot
ICAgIGludCBhdmFpbGFibGVIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGludCBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBjb250ZW50TG9naWNhbFdp
ZHRoKCk7IH0KKyAgICBpbnQgYXZhaWxhYmxlTG9naWNhbEhlaWdodCgpIGNvbnN0OworICAgIGlu
dCBhdmFpbGFibGVMb2dpY2FsSGVpZ2h0VXNpbmcoY29uc3QgTGVuZ3RoJikgY29uc3Q7CisgICAg
CisgICAgLy8gVGhlcmUgYXJlIGEgZmV3IGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gcmVmZXIgc3Bl
Y2lmaWNhbGx5IHRvIHRoZSBhdmFpbGFibGUgcGh5c2ljYWwgd2lkdGggYW5kIGF2YWlsYWJsZSBw
aHlzaWNhbCBoZWlnaHQuCisgICAgLy8gUmVsYXRpdmUgcG9zaXRpb25pbmcgaXMgb25lIG9mIHRo
b3NlIGNhc2VzLCBzaW5jZSBsZWZ0L3RvcCBvZmZzZXRzIGFyZSBwaHlzaWNhbC4KKyAgICBpbnQg
YXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc1ZlcnRpY2FsQmxvY2tG
bG93KCkgPyBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKSA6IGF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQo
KTsgfQorICAgIGludCBhdmFpbGFibGVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5p
c1ZlcnRpY2FsQmxvY2tGbG93KCkgPyBhdmFpbGFibGVMb2dpY2FsSGVpZ2h0KCkgOiBhdmFpbGFi
bGVMb2dpY2FsV2lkdGgoKTsgfQogCiAgICAgdm9pZCBjb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJn
aW5zKCk7CiAKQEAgLTMxMCw2ICszMTgsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChib29sIGluTGF5b3V0ID0gdHJ1
ZSk7CiAgICAgCisgICAgYm9vbCBpc0Jsb2NrRmxvd1Jvb3QoKSBjb25zdCB7IHJldHVybiAhcGFy
ZW50KCkgfHwgcGFyZW50KCktPnN0eWxlKCktPmJsb2NrRmxvdygpICE9IHN0eWxlKCktPmJsb2Nr
RmxvdygpOyB9CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpOwpAQCAtMzYzLDggKzM3MywxMyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBz
ZXRNYXJnaW5TdGFydFVzaW5nKGNvbnN0IFJlbmRlclN0eWxlKiwgaW50KTsKICAgICB2b2lkIHNl
dE1hcmdpbkVuZFVzaW5nKGNvbnN0IFJlbmRlclN0eWxlKiwgaW50KTsKKyAgICB2b2lkIHNldE1h
cmdpbkJlZm9yZVVzaW5nKGNvbnN0IFJlbmRlclN0eWxlKiwgaW50KTsKKyAgICB2b2lkIHNldE1h
cmdpbkFmdGVyVXNpbmcoY29uc3QgUmVuZGVyU3R5bGUqLCBpbnQpOworCiAgICAgaW50IG1hcmdp
blN0YXJ0VXNpbmcoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICBpbnQgbWFyZ2luRW5k
VXNpbmcoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBpbnQgbWFyZ2luQmVmb3JlVXNp
bmcoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBpbnQgbWFyZ2luQWZ0ZXJVc2luZyhj
b25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCiBwcml2YXRlOgogICAgIC8vIFRoZSB3aWR0aC9o
ZWlnaHQgb2YgdGhlIGNvbnRlbnRzICsgYm9yZGVycyArIHBhZGRpbmcuICBUaGUgeC95IGxvY2F0
aW9uIGlzIHJlbGF0aXZlIHRvIG91ciBjb250YWluZXIgKHdoaWNoIGlzIG5vdCBhbHdheXMgb3Vy
IHBhcmVudCkuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiA2ODM2
MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmNvbXB1dGVMb2dpY2FsV2lkdGgo
KQogICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aCgpOwogCiAgICAgUmVuZGVy
QmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaW50IGF2YWlsYWJsZVdpZHRoID0g
Y2ItPmF2YWlsYWJsZVdpZHRoKCk7CisgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gY2ItPmF2YWls
YWJsZUxvZ2ljYWxXaWR0aCgpOwogCiAgICAgTGVuZ3RoVHlwZSB3aWR0aFR5cGUgPSBzdHlsZSgp
LT53aWR0aCgpLnR5cGUoKTsKICAgICBpZiAod2lkdGhUeXBlID4gUmVsYXRpdmUgJiYgc3R5bGUo
KS0+d2lkdGgoKS5pc1Bvc2l0aXZlKCkpIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY4NDEwKQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIw
MTAtMDktMjcgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NjYzOSwgbWFrZSBjb21wdXRlTG9naWNhbEhlaWdodCBibG9jay1m
bG93LWF3YXJlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHRoZSBmb2xsb3dp
bmc6CisgICAgICAgICAgICAoMSkgTWFrZXMgY29tcHV0ZUxvZ2ljYWxIZWlnaHQgYmxvY2stZmxv
dy1hd2FyZSAocGF0Y2hpbmcgYWxsIGhlbHBlciBmdW5jdGlvbnMgYXMgbmVlZGVkIHRvIG1ha2Ug
dGhpcyB3b3JrKS4KKyAgICAgICAgICAgICgyKSBNYWtlcyBibG9jayBmbG93IHJvb3RzIChibG9j
a3Mgd2hvc2UgcGFyZW50IGhhcyBhIGRpZmZlcmVudCBibG9jay1mbG93IGRpcmVjdGlvbmFsaXR5
KSBlc3RhYmxpc2ggbmV3IGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dHMuCisgICAgICAgICAgICAo
VGhpcyBjYXVzZXMgdGhlbSB0byBub3QgY29sbGFwc2UgdGhlaXIgbWFyZ2lucyB3aXRoIHRoZWly
IGNoaWxkcmVuIGFuZCB0byBhdm9pZCBmbG9hdHMpLiAKKyAgICAgICAgICAgICgzKSBQYXRjaCBh
bGwgb2NjdXJyZW5jZXMgb2Ygc2V0SGVpZ2h0IGluIGJsb2NrIGFuZCBsaW5lIGxheW91dCB0byBz
ZXRMb2dpY2FsSGVpZ2h0IHNvIHRoYXQgaGVpZ2h0IGRvZXNuJ3QgZ2V0IGluY29ycmVjdGx5Cisg
ICAgICAgICAgICBvdmVyd3JpdHRlbiBmb3IgbHIvcmwgYmxvY2stZmxvdy4gIFRoaXMgaXMgbmVj
ZXNzYXJ5IHRvIHdyaXRlIHRlc3RzIHRoYXQgZXhhbWluZSB0aGUgd2lkdGgvaGVpZ2h0IG9mIHRo
ZSBibG9ja3MuCisgICAgICAgIAorICAgICAgICBBZGRlZCBtdWx0aXBsZSBuZXcgdGVzdHMgaW4g
ZmFzdC9ibG9ja2Zsb3cuCisgICAgICAgIGZhc3QvY3NzL2xvZ2ljYWwtcHJvcGVydHktcmVzb2x1
dGlvbiBnaXZlcyB0aGUgY29ycmVjdCByZXN1bHRzIG5vdy4KKworICAgICAgICAqIGZhc3QvYmxv
Y2tmbG93L2F1dG8tbWFyZ2lucy1hY3Jvc3MtYm91bmRhcmllcy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvYmxvY2tmbG93L2F1dG8tbWFyZ2lucy1hY3Jvc3MtYm91bmRhcmll
cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Jsb2NrZmxvdy9ibG9jay1mb3JtYXR0aW5n
LWNvbnRleHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Jsb2NrZmxvdy9i
bG9jay1mb3JtYXR0aW5nLWNvbnRleHQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ibG9j
a2Zsb3cvcGVyY2VudGFnZS1wYWRkaW5nLmh0bWw6CisgICAgICAgICogZmFzdC9ibG9ja2Zsb3cv
cmVsYXRpdmUtcG9zaXRpb25pbmctcGVyY2VudGFnZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2Jsb2NrZmxvdy9yZWxhdGl2ZS1wb3NpdGlvbmluZy1wZXJjZW50YWdlcy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9sb2dpY2FsLXByb3BlcnR5LXJlc29sdXRp
b24tZXhwZWN0ZWQudHh0OgorCisyMDEwLTA5LTI3ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
ZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgICog
ZmFzdC9ibG9ja2Zsb3cvYXV0by1tYXJnaW5zLWFjcm9zcy1ib3VuZGFyaWVzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ibG9ja2Zsb3cvYXV0by1tYXJnaW5zLWFjcm9zcy1i
b3VuZGFyaWVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvYmxvY2tmbG93L2Jsb2NrLWZv
cm1hdHRpbmctY29udGV4dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvYmxv
Y2tmbG93L2Jsb2NrLWZvcm1hdHRpbmctY29udGV4dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2Jsb2NrZmxvdy9wZXJjZW50YWdlLXBhZGRpbmcuaHRtbDoKKyAgICAgICAgKiBmYXN0L2Js
b2NrZmxvdy9yZWxhdGl2ZS1wb3NpdGlvbmluZy1wZXJjZW50YWdlcy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvYmxvY2tmbG93L3JlbGF0aXZlLXBvc2l0aW9uaW5nLXBlcmNl
bnRhZ2VzLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA5LTI3ICBBYmhpc2hlayBBcnlhICA8aW5mZXJu
b0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvYmxvY2tmbG93L2F1dG8tbWFyZ2lucy1hY3Jvc3MtYm91bmRhcmll
cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ibG9ja2Zsb3cv
YXV0by1tYXJnaW5zLWFjcm9zcy1ib3VuZGFyaWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvYmxvY2tmbG93L2F1dG8tbWFyZ2lucy1hY3Jvc3MtYm91bmRh
cmllcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorVGhlIGdyZWVu
IExSIGJsb2NrIHNob3VsZCBiZSBjZW50ZXJlZCBob3Jpem9udGFsbHkgd2l0aGluIHRoZSBibGFj
ay1ib3JkZXJlZCBibG9jay4KK1BBU1M6IFRoZSBibG9jayBpcyBpbiB0aGUgY29ycmVjdCBwb3Np
dGlvbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvYmxvY2tmbG93L2F1dG8tbWFyZ2lucy1hY3Jv
c3MtYm91bmRhcmllcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvYmxvY2tm
bG93L2F1dG8tbWFyZ2lucy1hY3Jvc3MtYm91bmRhcmllcy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9ibG9ja2Zsb3cvYXV0by1tYXJnaW5zLWFjcm9zcy1ib3VuZGFyaWVz
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjYgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5
bGU+CisubHIgeyAtd2Via2l0LWJsb2NrLWZsb3c6IGxyOyBibG9jay1mbG93OiBscjsgYmFja2dy
b3VuZC1jb2xvcjpncmVlbjsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87IHdp
ZHRoOjEwMHB4OyBoZWlnaHQ6MTAwcHg7IH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KK1Ro
ZSBncmVlbiBMUiBibG9jayBzaG91bGQgYmUgY2VudGVyZWQgaG9yaXpvbnRhbGx5IHdpdGhpbiB0
aGUgYmxhY2stYm9yZGVyZWQgYmxvY2suCis8ZGl2IHN0eWxlPSJ3aWR0aDozMDBweDsgaGVpZ2h0
OjEwMHB4O2JvcmRlcjoycHggc29saWQgYmxhY2siPgorPGRpdiBjbGFzcz0ibHIiIGlkPSJ0ZXN0
Ij48L2Rpdj4KKzwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgoraWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOwordGVzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0
Iik7CityZWN0ID0gdGVzdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKK2lmIChyZWN0LmxlZnQg
IT0gMTEwKSB7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJIVE1M
ID0gIkZBSUw6IFRoZSBibG9jayBzaG91bGQgYmUgYXQgYW4geC1vZmZzZXQgb2YgMTAwLiI7Cisg
IHRlc3Quc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JlZCc7Cit9IGVsc2UKKyAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwgPSAiUEFTUzogVGhlIGJsb2NrIGlz
IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uLiI7Cis8L3NjcmlwdD4KKworPC9ib2R5PgorCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrZmxvdy9ibG9jay1mb3JtYXR0aW5nLWNvbnRleHQtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvYmxvY2tmbG93L2Jsb2Nr
LWZvcm1hdHRpbmctY29udGV4dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2Jsb2NrZmxvdy9ibG9jay1mb3JtYXR0aW5nLWNvbnRleHQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1RoZSBncmVlbiBMUiBibG9jayBzaG91bGQg
YXZvaWQgdGhlIGJsdWUgZmxvYXQuCitQQVNTOiBUaGUgZmxvYXRpbmcgYmxvY2sgaXMgaW4gdGhl
IGNvcnJlY3QgcG9zaXRpb24uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrZmxvdy9ibG9j
ay1mb3JtYXR0aW5nLWNvbnRleHQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2Jsb2NrZmxvdy9ibG9jay1mb3JtYXR0aW5nLWNvbnRleHQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvYmxvY2tmbG93L2Jsb2NrLWZvcm1hdHRpbmctY29udGV4dC5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgor
LmxyIHsgLXdlYmtpdC1ibG9jay1mbG93OiBscjsgYmxvY2stZmxvdzogbHI7IGJhY2tncm91bmQt
Y29sb3I6Z3JlZW47IG1hcmdpbjoxMHB4OyB3aWR0aDoxMDBweDsgaGVpZ2h0OjEwMHB4OyB9Cisu
ZmxvYXQgeyB3aWR0aDoxMDBweDsgaGVpZ2h0OjEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOmJsdWU7
IGZsb2F0OmxlZnR9Citib2R5IHsgbWFyZ2luOiAwIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eT4KK1RoZSBncmVlbiBMUiBibG9jayBzaG91bGQgYXZvaWQgdGhlIGJsdWUgZmxvYXQuCis8ZGl2
IGNsYXNzPSJmbG9hdCI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJsciIgaWQ9InRlc3QiPjwvZGl2Pgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OwordGVzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Iik7CityZWN0ID0gdGVzdC5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKK2lmIChyZWN0LmxlZnQgIT0gMTAwKSB7CisgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJIVE1MID0gIkZBSUw6IFRoZSBmbG9h
dGluZyBibG9jayBzaG91bGQgYmUgYXQgYW4geC1vZmZzZXQgb2YgMTAwLiI7CisgIHRlc3Quc3R5
bGUuYmFja2dyb3VuZENvbG9yID0gJ3JlZCc7Cit9IGVsc2UKKyAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwgPSAiUEFTUzogVGhlIGZsb2F0aW5nIGJsb2NrIGlz
IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uLiI7Cis8L3NjcmlwdD4KKworPC9ib2R5PgorCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrZmxvdy9wZXJjZW50YWdlLXBhZGRpbmctZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvYmxvY2tmbG93L3BlcmNlbnRhZ2Ut
cGFkZGluZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY4MTc0KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9ibG9ja2Zsb3cvcGVyY2VudGFnZS1wYWRkaW5nLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSArMSBAQAotRkFJTDogVGhlIGZsb2F0aW5nIGJsb2NrIHNob3VsZCBiZSAzMDB4NDAw
IHBpeGVscyBpbiBzaXplLgorUEFTUzogVGhlIGJsb2NrIGlzIHRoZSBjb3JyZWN0IHNpemUuCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrZmxvdy9wZXJjZW50YWdlLXBhZGRpbmcuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrZmxvdy9wZXJjZW50YWdlLXBhZGRp
bmcuaHRtbAkocmV2aXNpb24gNjgxNzQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrZmxvdy9w
ZXJjZW50YWdlLXBhZGRpbmcuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTIgKzIxLDEyIEBA
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiB0ZXN0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInRlc3QiKTsKIHJlY3QgPSB0ZXN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwog
d2lkdGggPSByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OwotaGVpZ2h0ID0gcmVjdC50b3AgLSByZWN0
LmJvdHRvbTsKK2hlaWdodCA9IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7CiBpZiAod2lkdGggIT0g
MzAwIHx8IGhlaWdodCAhPSA0MDApIHsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNv
bGUnKS5pbm5lckhUTUwgPSAiRkFJTDogVGhlIGZsb2F0aW5nIGJsb2NrIHNob3VsZCBiZSAzMDB4
NDAwIHBpeGVscyBpbiBzaXplLiI7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xl
JykuaW5uZXJIVE1MID0gIkZBSUw6IFRoZSBibG9jayBzaG91bGQgYmUgMzAweDQwMCBwaXhlbHMg
aW4gc2l6ZS4iOwogICB0ZXN0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICdyZWQnOwogfSBlbHNl
Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJIVE1MID0gIlBBU1M6
IFRoZSBmbG9hdGluZyBibG9jayBpcyB0aGUgY29ycmVjdCBzaXplLiI7CisgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJIVE1MID0gIlBBU1M6IFRoZSBibG9jayBpcyB0
aGUgY29ycmVjdCBzaXplLiI7CiA8L3NjcmlwdD4KIDwvYm9keT4KIDwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvYmxvY2tmbG93L3JlbGF0aXZlLXBvc2l0aW9uaW5nLXBlcmNlbnRhZ2Vz
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrZmxvdy9y
ZWxhdGl2ZS1wb3NpdGlvbmluZy1wZXJjZW50YWdlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrZmxvdy9yZWxhdGl2ZS1wb3NpdGlvbmluZy1wZXJj
ZW50YWdlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorVGhpcyBp
cyBhIHRlc3QgdGhhdCByZWxhdGl2ZSBwb3NpdGlvbiBwZXJjZW50YWdlcyBhcmUgY29tcHV0ZWQg
d2l0aCByZXNwZWN0IHRvIHBoeXNpY2FsIGRpbWVuc2lvbnMuCitQQVNTOiBUaGUgYmxvY2sgaXMg
aW4gdGhlIGNvcnJlY3QgcG9zaXRpb24uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrZmxv
dy9yZWxhdGl2ZS1wb3NpdGlvbmluZy1wZXJjZW50YWdlcy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvYmxvY2tmbG93L3JlbGF0aXZlLXBvc2l0aW9uaW5nLXBlcmNlbnRhZ2Vz
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrZmxvdy9yZWxhdGl2
ZS1wb3NpdGlvbmluZy1wZXJjZW50YWdlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3
IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorLmxyIHsgLXdlYmtpdC1ibG9jay1mbG93OiBs
cjsgYmxvY2stZmxvdzogbHI7IGJhY2tncm91bmQtY29sb3I6Z3JlZW47IHdpZHRoOjEwMHB4OyBo
ZWlnaHQ6MTAwcHg7IHBvc2l0aW9uOnJlbGF0aXZlOyB0b3A6NTAlOyB9Cis8L3N0eWxlPgorPC9o
ZWFkPgorPGJvZHk+CitUaGlzIGlzIGEgdGVzdCB0aGF0IHJlbGF0aXZlIHBvc2l0aW9uIHBlcmNl
bnRhZ2VzIGFyZSBjb21wdXRlZCB3aXRoIHJlc3BlY3QgdG8gcGh5c2ljYWwgZGltZW5zaW9ucy4K
KzxkaXYgc3R5bGU9IndpZHRoOjMwMHB4OyBoZWlnaHQ6MTAwcHg7Ym9yZGVyOjJweCBzb2xpZCBi
bGFjayI+Cis8ZGl2IGNsYXNzPSJsciIgaWQ9InRlc3QiPjwvZGl2PgorPC9kaXY+Cis8ZGl2IGlk
PSJjb25zb2xlIiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7dG9wOjEwMHB4Ij48L2Rpdj4KKzxz
Y3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cit0ZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInRlc3QiKTsKK3JlY3QgPSB0ZXN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworcGFy
ZW50UmVjdCA9IHRlc3QucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKK2lmIChy
ZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wICE9IDUyKSB7CisgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdjb25zb2xlJykuaW5uZXJIVE1MID0gIkZBSUw6IFRoZSBibG9jayBzaG91bGQgYmUgYXQg
YSB5LW9mZnNldCBvZiA1Mi4iOworICB0ZXN0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICdyZWQn
OworfSBlbHNlCisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJIVE1M
ID0gIlBBU1M6IFRoZSBibG9jayBpcyBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbi4iOworPC9zY3Jp
cHQ+CisKKzwvYm9keT4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvbG9naWNhbC1wcm9w
ZXJ0eS1yZXNvbHV0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2Nzcy9sb2dpY2FsLXByb3BlcnR5LXJlc29sdXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lv
biA2ODM2MikKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2xvZ2ljYWwtcHJvcGVydHktcmVzb2x1
dGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYsMjUgKzYsMjUgQEAgQm9yZGVy
czogMXB4IHNvbGlkIHJnYigwLCAwLCAwKSwgMnB4IGRvdAogV2lkdGg6IDEwMHB4CiBIZWlnaHQ6
IDUwcHgKIEJsb2NrICMyOgotTWFyZ2luczogM3B4IDJweCAxcHggNHB4CitNYXJnaW5zOiAxcHgg
MnB4IDNweCA0cHgKIFBhZGRpbmc6IDJweCAzcHggNHB4IDFweAogQm9yZGVyczogM3B4IGRhc2hl
ZCByZ2IoMjU1LCAyNTUsIDApLCAycHggZG90dGVkIHJnYigwLCAxMjgsIDApLCAxcHggc29saWQg
cmdiKDAsIDAsIDApLCA0cHggZG91YmxlIHJnYigxMjgsIDAsIDEyOCkKIFdpZHRoOiAxMDBweAog
SGVpZ2h0OiA1MHB4CiBCbG9jayAjMzoKLU1hcmdpbnM6IDRweCAwcHggMnB4IDBweAorTWFyZ2lu
czogNHB4IDNweCAycHggMXB4CiBQYWRkaW5nOiAxcHggMnB4IDNweCA0cHgKIEJvcmRlcnM6IDRw
eCBkb3VibGUgcmdiKDEyOCwgMCwgMTI4KSwgM3B4IGRhc2hlZCByZ2IoMjU1LCAyNTUsIDApLCAy
cHggZG90dGVkIHJnYigwLCAxMjgsIDApLCAxcHggc29saWQgcmdiKDAsIDAsIDApCi1XaWR0aDog
LTEwcHgKK1dpZHRoOiA1MHB4CiBIZWlnaHQ6IDEwMHB4CiBCbG9jayAjNDoKLU1hcmdpbnM6IDRw
eCAwcHggMnB4IDBweAorTWFyZ2luczogNHB4IDFweCAycHggM3B4CiBQYWRkaW5nOiAxcHggNHB4
IDNweCAycHgKIEJvcmRlcnM6IDRweCBkb3VibGUgcmdiKDEyOCwgMCwgMTI4KSwgMXB4IHNvbGlk
IHJnYigwLCAwLCAwKSwgMnB4IGRvdHRlZCByZ2IoMCwgMTI4LCAwKSwgM3B4IGRhc2hlZCByZ2Io
MjU1LCAyNTUsIDApCi1XaWR0aDogLTEwcHgKK1dpZHRoOiA1MHB4CiBIZWlnaHQ6IDEwMHB4CiBC
bG9jayAjNToKLU1hcmdpbnM6IDFweCA0cHggM3B4IDJweAorTWFyZ2luczogM3B4IDRweCAxcHgg
MnB4CiBQYWRkaW5nOiA0cHggMXB4IDJweCAzcHgKIEJvcmRlcnM6IDFweCBzb2xpZCByZ2IoMCwg
MCwgMCksIDRweCBkb3VibGUgcmdiKDEyOCwgMCwgMTI4KSwgM3B4IGRhc2hlZCByZ2IoMjU1LCAy
NTUsIDApLCAycHggZG90dGVkIHJnYigwLCAxMjgsIDApCiBXaWR0aDogMTAwcHgKQEAgLTM2LDE1
ICszNiwxNSBAQCBCb3JkZXJzOiAzcHggZGFzaGVkIHJnYigyNTUsIDI1NSwgMCksIDRwCiBXaWR0
aDogMTAwcHgKIEhlaWdodDogNTBweAogQmxvY2sgIzc6Ci1NYXJnaW5zOiAycHggMHB4IDRweCAw
cHgKK01hcmdpbnM6IDJweCAzcHggNHB4IDFweAogUGFkZGluZzogM3B4IDJweCAxcHggNHB4CiBC
b3JkZXJzOiAycHggZG90dGVkIHJnYigwLCAxMjgsIDApLCAzcHggZGFzaGVkIHJnYigyNTUsIDI1
NSwgMCksIDRweCBkb3VibGUgcmdiKDEyOCwgMCwgMTI4KSwgMXB4IHNvbGlkIHJnYigwLCAwLCAw
KQotV2lkdGg6IC0xMHB4CitXaWR0aDogNTBweAogSGVpZ2h0OiAxMDBweAogQmxvY2sgIzg6Ci1N
YXJnaW5zOiAycHggMHB4IDRweCAwcHgKK01hcmdpbnM6IDJweCAxcHggNHB4IDNweAogUGFkZGlu
ZzogM3B4IDRweCAxcHggMnB4CiBCb3JkZXJzOiAycHggZG90dGVkIHJnYigwLCAxMjgsIDApLCAx
cHggc29saWQgcmdiKDAsIDAsIDApLCA0cHggZG91YmxlIHJnYigxMjgsIDAsIDEyOCksIDNweCBk
YXNoZWQgcmdiKDI1NSwgMjU1LCAwKQotV2lkdGg6IC0xMHB4CitXaWR0aDogNTBweAogSGVpZ2h0
OiAxMDBweAogCg==
</data>
<flag name="review"
          id="58542"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>