<?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>60044</bug_id>
          
          <creation_ts>2011-05-03 11:29:51 -0700</creation_ts>
          <short_desc>Extract LineInfo class</short_desc>
          <delta_ts>2011-05-03 16:58:13 -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>All</rep_platform>
          <op_sys>All</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>57779</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>mitz</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>397216</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-03 11:29:51 -0700</bug_when>
    <thetext>isFirstLine, isLastLine, isEmpty, and previousLineBrokeCleanly are identifiers used repeatedly through RenderBlock/RenderBlockLineLayout to track identifying line information. This could be packaged into a class that represents relevant information about a line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397218</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-03 11:32:05 -0700</bug_when>
    <thetext>Like!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397225</commentid>
    <comment_count>2</comment_count>
      <attachid>92096</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-03 11:37:27 -0700</bug_when>
    <thetext>Created attachment 92096
First patch

Removing some unused arguments that leak references to these boolean values to external code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397244</commentid>
    <comment_count>3</comment_count>
      <attachid>92096</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-03 12:04:56 -0700</bug_when>
    <thetext>Comment on attachment 92096
First patch

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

&gt; Source/WebCore/rendering/RenderBlock.h:492
&gt; +    static bool requiresLineBox(const InlineIterator&amp;, bool isLineEmpty = true, bool previousLineBrokeCleanly = true);

I take it this is called other places with isLineEmpty and previousLineBrokeCleanly?  This patch is just removing some unused plumbing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397247</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-03 12:07:58 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 92096 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92096&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.h:492
&gt; &gt; +    static bool requiresLineBox(const InlineIterator&amp;, bool isLineEmpty = true, bool previousLineBrokeCleanly = true);
&gt; 
&gt; I take it this is called other places with isLineEmpty and previousLineBrokeCleanly?  This patch is just removing some unused plumbing?

Yes, this patch only removes unused arguments from generatesLineBoxesForInlineChild.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397328</commentid>
    <comment_count>5</comment_count>
      <attachid>92117</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-03 13:40:10 -0700</bug_when>
    <thetext>Created attachment 92117
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397334</commentid>
    <comment_count>6</comment_count>
      <attachid>92117</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-03 13:44:45 -0700</bug_when>
    <thetext>Comment on attachment 92117
Patch

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

LGTM.

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:80
&gt; +    void setPreviousLineBrokeCleanly(bool previousLineBrokeCleanly) { m_previousLineBrokeCleanly = previousLineBrokeCleanly; }

I used to think we normally put a \n before private.  But since thsi is the 3rd time I&apos;ve made ethis comment today, I think my sense may be off. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397339</commentid>
    <comment_count>7</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-03 13:45:55 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 92117 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92117&amp;action=review
&gt; 
&gt; LGTM.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:80
&gt; &gt; +    void setPreviousLineBrokeCleanly(bool previousLineBrokeCleanly) { m_previousLineBrokeCleanly = previousLineBrokeCleanly; }
&gt; 
&gt; I used to think we normally put a \n before private.  But since thsi is the 3rd time I&apos;ve made ethis comment today, I think my sense may be off. :)

Thanks for the reviews!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397348</commentid>
    <comment_count>8</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-03 13:49:23 -0700</bug_when>
    <thetext>Committed r85652: &lt;http://trac.webkit.org/changeset/85652&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397350</commentid>
    <comment_count>9</comment_count>
      <attachid>92117</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-03 13:50:37 -0700</bug_when>
    <thetext>Comment on attachment 92117
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.h:46
&gt; +class LineInfo;

Nit: you should declare this right above LineWidth.

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:69
&gt; +        : m_isFirstLine(true)
&gt; +        , m_isLastLine(false)
&gt; +        , m_isEmpty(true)
&gt; +        , m_previousLineBrokeCleanly(true)

I feel like some of these member variables being true by default is arbitrary.  Can we add an enum flags that the constructor takes?

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1445
&gt; -bool RenderBlock::requiresLineBox(const InlineIterator&amp; it, bool isLineEmpty, bool previousLineBrokeCleanly)
&gt; +static bool requiresLineBox(const InlineIterator&amp; it, const LineInfo&amp; lineInfo = LineInfo())

Nice!

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1458
&gt; +    &amp;&amp; !skipNonBreakingSpace(it, lineInfo);

Nit: You need one more indentation here.

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1725
&gt; +    bool startingNewParagraph = lineInfo.previousLineBrokeCleanly();

Maybe previousLineBrokeCleanly is a bad name for the member function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397351</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-03 13:51:06 -0700</bug_when>
    <thetext>Oops, I cleared eric&apos;s r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397543</commentid>
    <comment_count>11</comment_count>
      <attachid>92117</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-05-03 16:58:13 -0700</bug_when>
    <thetext>Comment on attachment 92117
Patch

Clearing review flag to remove this patch from the review queue since it was already committed as per comment 8.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92096</attachid>
            <date>2011-05-03 11:37:27 -0700</date>
            <delta_ts>2011-05-03 13:40:06 -0700</delta_ts>
            <desc>First patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3434</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1NjI2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDUtMDMgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3QgTGluZUluZm8gY2xhc3MKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMDQ0CisKKyAgICAgICAgTW92
aW5nIHJlcXVpcmVzTGluZUJveCB0byBwcml2YXRlIHNjb3BpbmcgYW5kIHJlbW92aW5nIHVudXNl
ZCBhcmd1bWVudHMgZnJvbQorICAgICAgICBnZW5lcmF0ZXNMaW5lQm94ZXNGb3JJbmxpbmVDaGls
ZCAtLSB0aGUgZGVmYXVsdCB2YWx1ZXMgYXJlIGZpbmUuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IHNpbmNlIHRoaXMgaXMganVzdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmdlbmVyYXRlc0xpbmVCb3hlc0Zv
cklubGluZUNoaWxkKToKKwogMjAxMS0wNS0wMyAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA4NTYyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5
Myw3IEBAIHB1YmxpYzoKIAogICAgIFJvb3RJbmxpbmVCb3gqIGNyZWF0ZUFuZEFwcGVuZFJvb3RJ
bmxpbmVCb3goKTsKIAotICAgIGJvb2wgZ2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQo
UmVuZGVyT2JqZWN0KiwgYm9vbCBpc0xpbmVFbXB0eSA9IHRydWUsIGJvb2wgcHJldmlvdXNMaW5l
QnJva2VDbGVhbmx5ID0gdHJ1ZSk7CisgICAgYm9vbCBnZW5lcmF0ZXNMaW5lQm94ZXNGb3JJbmxp
bmVDaGlsZChSZW5kZXJPYmplY3QqKTsKIAogICAgIHZvaWQgbWFya0FsbERlc2NlbmRhbnRzV2l0
aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUgPSAwLCBib29sIGluTGF5
b3V0ID0gdHJ1ZSk7CiAgICAgdm9pZCBtYXJrUG9zaXRpb25lZE9iamVjdHNGb3JMYXlvdXQoKTsK
QEAgLTE1Niw3ICsxNTYsNiBAQCBwdWJsaWM6CiAgICAgUmVuZGVyQmxvY2sqIGNyZWF0ZUFub255
bW91c0Jsb2NrV2l0aFNhbWVUeXBlQXMoUmVuZGVyQmxvY2sqIG90aGVyQW5vbnltb3VzQmxvY2sp
IGNvbnN0OwogICAgIAogICAgIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3QoQmlkaVJ1
bkxpc3Q8QmlkaVJ1bj4mLCBpbnQgc3RhcnQsIGludCBlbmQsIFJlbmRlck9iamVjdCosIElubGlu
ZUJpZGlSZXNvbHZlciYpOwotICAgIHN0YXRpYyBib29sIHJlcXVpcmVzTGluZUJveChjb25zdCBJ
bmxpbmVJdGVyYXRvciYsIGJvb2wgaXNMaW5lRW1wdHkgPSB0cnVlLCBib29sIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSA9IHRydWUpOwogCiAgICAgQ29sdW1uSW5mbyogY29sdW1uSW5mbygpIGNv
bnN0OwogICAgIGludCBjb2x1bW5HYXAoKSBjb25zdDsKQEAgLTQ5MCw2ICs0ODksOCBAQCBwcml2
YXRlOgogICAgIH0KIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zJyBpbXBsZW1lbnRh
dGlvbnMgYXJlIGluIFJlbmRlckJsb2NrTGluZUxheW91dC5jcHAuCisgICAgc3RhdGljIGJvb2wg
cmVxdWlyZXNMaW5lQm94KGNvbnN0IElubGluZUl0ZXJhdG9yJiwgYm9vbCBpc0xpbmVFbXB0eSA9
IHRydWUsIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gdHJ1ZSk7CisKICAgICB2b2lk
IGNoZWNrRmxvYXRzSW5DbGVhbkxpbmUoUm9vdElubGluZUJveCosIFZlY3RvcjxGbG9hdFdpdGhS
ZWN0PiYsIHNpemVfdCYgZmxvYXRJbmRleCwgYm9vbCYgZW5jb3VudGVyZWROZXdGbG9hdCwgYm9v
bCYgZGlydGllZEJ5RmxvYXQpOwogICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWluZVN0YXJ0UG9z
aXRpb24oYm9vbCYgZmlyc3RMaW5lLCBib29sJiBmdWxsTGF5b3V0LCBib29sJiBwcmV2aW91c0xp
bmVCcm9rZUNsZWFubHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbmxpbmVCaWRpUmVzb2x2ZXImLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5z
aWduZWQmIG51bUNsZWFuRmxvYXRzLApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDg1NjI2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MzUsMTIgKzE0MzUsMTIgQEAgYm9vbCBSZW5kZXJCbG9jazo6cmVxdWlyZXNM
aW5lQm94KGNvbnN0IAogICAgICAgICAgICAgJiYgIXNraXBOb25CcmVha2luZ1NwYWNlKGl0LCBp
c0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKIH0KIAotYm9vbCBSZW5kZXJC
bG9jazo6Z2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQoUmVuZGVyT2JqZWN0KiBpbmxp
bmVPYmosIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KQor
Ym9vbCBSZW5kZXJCbG9jazo6Z2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQoUmVuZGVy
T2JqZWN0KiBpbmxpbmVPYmopCiB7CiAgICAgQVNTRVJUKGlubGluZU9iai0+cGFyZW50KCkgPT0g
dGhpcyk7CiAKICAgICBJbmxpbmVJdGVyYXRvciBpdCh0aGlzLCBpbmxpbmVPYmosIDApOwotICAg
IHdoaWxlICghaXQuYXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5lQm94KGl0LCBpc0xpbmVFbXB0eSwg
cHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KSkKKyAgICB3aGlsZSAoIWl0LmF0RW5kKCkgJiYgIXJl
cXVpcmVzTGluZUJveChpdCkpCiAgICAgICAgIGl0LmluY3JlbWVudCgpOwogCiAgICAgcmV0dXJu
ICFpdC5hdEVuZCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92117</attachid>
            <date>2011-05-03 13:40:10 -0700</date>
            <delta_ts>2011-05-03 16:58:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60044-20110503134009.patch</filename>
            <type>text/plain</type>
            <size>33994</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1NjUwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDUtMDMgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3QgTGluZUluZm8gY2xhc3MKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMDQ0CisKKyAgICAgICAgQ3Jl
YXRlZCBhIExpbmVJbmZvIGNsYXNzIGluIFJlbmRlckJsb2NrTGluZUxheW91dC5jcHAgdGhhdCBi
cmluZ3MgdG9nZXRoZXIgdGhlIHJlbGV2YW50CisgICAgICAgIGxheW91dCBpbmZvcm1hdGlvbiBh
Ym91dCBhIGxpbmUuIFRoaXMgc2ltcGxpZmllcyBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCBjbGVh
cnMgdXAgaW5pdGlhbGl6YXRpb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMg
cmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDogVXBkYXRl
ZCBpbnRlcm5hbCBsYXlvdXQgZnVuY3Rpb24gc2lnbmF0dXJlcyB0byB1c2UgTGluZUluZm8uCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMaW5lSW5mbzo6TGluZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TGluZUluZm86
OmlzRmlyc3RMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVJbmZvOjppc0xhc3RMaW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVJbmZvOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkxpbmVJbmZvOjpwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOgorICAgICAgICAoV2ViQ29yZTo6
TGluZUluZm86OnNldEZpcnN0TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lSW5mbzo6c2V0
TGFzdExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUluZm86OnNldEVtcHR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxpbmVJbmZvOjpzZXRQcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29uc3RydWN0TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvckxpbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNraXBOb25CcmVha2luZ1NwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNo
b3VsZENvbGxhcHNlV2hpdGVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXF1aXJlc0xpbmVC
b3gpOiBNb3ZlZCBmcm9tIFJlbmRlckJsb2NrLmggYW5kIG1hZGUgaXQgbG9jYWxseSBzY29wZWQg
dG8gUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmdlbmVyYXRlc0xpbmVCb3hlc0ZvcklubGluZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpza2lwVHJhaWxpbmdXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpza2lwTGVhZGluZ1doaXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKToKKwogMjAxMS0wNS0wMyAgUm9sYW5kIFN0
ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAkocmV2aXNpb24gODU2MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBjbGFzcyBSZW5kZXJUZXh0
OwogCiBzdHJ1Y3QgQmlkaVJ1bjsKIHN0cnVjdCBQYWludEluZm87CitjbGFzcyBMaW5lSW5mbzsK
IAogdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4+IGNsYXNzIEJpZGlSZXNvbHZl
cjsKIHRlbXBsYXRlIDxjbGFzcyBSdW4+IGNsYXNzIEJpZGlSdW5MaXN0OwpAQCAtOTMsNyArOTQs
NyBAQCBwdWJsaWM6CiAKICAgICBSb290SW5saW5lQm94KiBjcmVhdGVBbmRBcHBlbmRSb290SW5s
aW5lQm94KCk7CiAKLSAgICBib29sIGdlbmVyYXRlc0xpbmVCb3hlc0ZvcklubGluZUNoaWxkKFJl
bmRlck9iamVjdCosIGJvb2wgaXNMaW5lRW1wdHkgPSB0cnVlLCBib29sIHByZXZpb3VzTGluZUJy
b2tlQ2xlYW5seSA9IHRydWUpOworICAgIGJvb2wgZ2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5l
Q2hpbGQoUmVuZGVyT2JqZWN0Kik7CiAKICAgICB2b2lkIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhG
bG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlID0gMCwgYm9vbCBpbkxheW91
dCA9IHRydWUpOwogICAgIHZvaWQgbWFya1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5b3V0KCk7CkBA
IC0xNTYsNyArMTU3LDYgQEAgcHVibGljOgogICAgIFJlbmRlckJsb2NrKiBjcmVhdGVBbm9ueW1v
dXNCbG9ja1dpdGhTYW1lVHlwZUFzKFJlbmRlckJsb2NrKiBvdGhlckFub255bW91c0Jsb2NrKSBj
b25zdDsKICAgICAKICAgICBzdGF0aWMgdm9pZCBhcHBlbmRSdW5zRm9yT2JqZWN0KEJpZGlSdW5M
aXN0PEJpZGlSdW4+JiwgaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5kZXJPYmplY3QqLCBJbmxpbmVC
aWRpUmVzb2x2ZXImKTsKLSAgICBzdGF0aWMgYm9vbCByZXF1aXJlc0xpbmVCb3goY29uc3QgSW5s
aW5lSXRlcmF0b3ImLCBib29sIGlzTGluZUVtcHR5ID0gdHJ1ZSwgYm9vbCBwcmV2aW91c0xpbmVC
cm9rZUNsZWFubHkgPSB0cnVlKTsKIAogICAgIENvbHVtbkluZm8qIGNvbHVtbkluZm8oKSBjb25z
dDsKICAgICBpbnQgY29sdW1uR2FwKCkgY29uc3Q7CkBAIC00OTEsMjMgKzQ5MSwyMiBAQCBwcml2
YXRlOgogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMnIGltcGxlbWVudGF0aW9ucyBh
cmUgaW4gUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcC4KICAgICB2b2lkIGNoZWNrRmxvYXRzSW5D
bGVhbkxpbmUoUm9vdElubGluZUJveCosIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYsIHNpemVfdCYg
ZmxvYXRJbmRleCwgYm9vbCYgZW5jb3VudGVyZWROZXdGbG9hdCwgYm9vbCYgZGlydGllZEJ5Rmxv
YXQpOwotICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWluZVN0YXJ0UG9zaXRpb24oYm9vbCYgZmly
c3RMaW5lLCBib29sJiBmdWxsTGF5b3V0LCBib29sJiBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVz
b2x2ZXImLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFu
RmxvYXRzLAorICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWluZVN0YXJ0UG9zaXRpb24oTGluZUlu
Zm8mLCBib29sJiBmdWxsTGF5b3V0LCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBWZWN0b3I8RmxvYXRX
aXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgdXNlUmVwYWludEJvdW5kcywgaW50
JiByZXBhaW50VG9wLCBpbnQmIHJlcGFpbnRCb3R0b20pOwogICAgIFJvb3RJbmxpbmVCb3gqIGRl
dGVybWluZUVuZFBvc2l0aW9uKFJvb3RJbmxpbmVCb3gqIHN0YXJ0Qm94LCBWZWN0b3I8RmxvYXRX
aXRoUmVjdD4mIGZsb2F0cywgc2l6ZV90IGZsb2F0SW5kZXgsIElubGluZUl0ZXJhdG9yJiBjbGVh
bkxpbmVTdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRp
U3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCBpbnQmIHlQb3MpOwogICAgIGJvb2wgbWF0Y2hl
ZEVuZExpbmUoY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiwgY29uc3QgSW5saW5lSXRlcmF0b3Im
IGVuZExpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgZW5kTGluZVN0YXR1cywKICAgICAgICAg
ICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqJiBlbmRMaW5lLCBpbnQmIGVuZFlQb3MsIGlu
dCYgcmVwYWludEJvdHRvbSwgaW50JiByZXBhaW50VG9wKTsKIAotICAgIHZvaWQgc2tpcFRyYWls
aW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRvciYsIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJl
dmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKLSAgICB2b2lkIHNraXBMZWFkaW5nV2hpdGVzcGFjZShJ
bmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGluZUJy
b2tlQ2xlYW5seSwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIExp
bmVXaWR0aCYpOworICAgIHZvaWQgc2tpcFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRv
ciYsIGNvbnN0IExpbmVJbmZvJik7CisgICAgdm9pZCBza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5s
aW5lQmlkaVJlc29sdmVyJiwgY29uc3QgTGluZUluZm8mLCBGbG9hdGluZ09iamVjdCogbGFzdEZs
b2F0RnJvbVByZXZpb3VzTGluZSwgTGluZVdpZHRoJik7CiAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8
UmVuZGVyVGV4dCosIExhenlMaW5lQnJlYWtJdGVyYXRvcj4gTGluZUJyZWFrSXRlcmF0b3JJbmZv
OwotICAgIElubGluZUl0ZXJhdG9yIGZpbmROZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZl
ciYsIGJvb2wgZmlyc3RMaW5lLCBib29sJiBpc0xpbmVFbXB0eSwgTGluZUJyZWFrSXRlcmF0b3JJ
bmZvJiwgYm9vbCYgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCBib29sJiBoeXBoZW5hdGVkLAor
ICAgIElubGluZUl0ZXJhdG9yIGZpbmROZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYs
IExpbmVJbmZvJiwgTGluZUJyZWFrSXRlcmF0b3JJbmZvJiwgYm9vbCYgaHlwaGVuYXRlZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQ2xlYXIqLCBGbG9hdGluZ09iamVj
dCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgVmVjdG9yPFJlbmRlckJveCo+JiBwb3NpdGlv
bmVkT2JqZWN0cyk7Ci0gICAgUm9vdElubGluZUJveCogY29uc3RydWN0TGluZShCaWRpUnVuTGlz
dDxCaWRpUnVuPiYsIGJvb2wgZmlyc3RMaW5lLCBib29sIGxhc3RMaW5lKTsKLSAgICBJbmxpbmVG
bG93Qm94KiBjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2JqZWN0KiwgYm9vbCBmaXJzdExpbmUsIElu
bGluZUJveCogY2hpbGRCb3gpOworICAgIFJvb3RJbmxpbmVCb3gqIGNvbnN0cnVjdExpbmUoQmlk
aVJ1bkxpc3Q8QmlkaVJ1bj4mLCBjb25zdCBMaW5lSW5mbyYpOworICAgIElubGluZUZsb3dCb3gq
IGNyZWF0ZUxpbmVCb3hlcyhSZW5kZXJPYmplY3QqLCBjb25zdCBMaW5lSW5mbyYsIElubGluZUJv
eCogY2hpbGRCb3gpOwogCi0gICAgdm9pZCBjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25z
Rm9yTGluZShSb290SW5saW5lQm94KiwgYm9vbCBmaXJzdExpbmUsIEJpZGlSdW4qIGZpcnN0UnVu
LCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBib29sIHJlYWNoZWRFbmQsIEdseXBoT3ZlcmZs
b3dBbmRGYWxsYmFja0ZvbnRzTWFwJiwgVmVydGljYWxQb3NpdGlvbkNhY2hlJik7CisgICAgdm9p
ZCBjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94Kiwg
Y29uc3QgTGluZUluZm8mLCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogdHJhaWxpbmdTcGFj
ZVJ1biwgYm9vbCByZWFjaGVkRW5kLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYs
IFZlcnRpY2FsUG9zaXRpb25DYWNoZSYpOwogICAgIHZvaWQgY29tcHV0ZUJsb2NrRGlyZWN0aW9u
UG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94KiwgQmlkaVJ1biosIEdseXBoT3ZlcmZsb3dB
bmRGYWxsYmFja0ZvbnRzTWFwJiwgVmVydGljYWxQb3NpdGlvbkNhY2hlJik7CiAgICAgdm9pZCBk
ZWxldGVFbGxpcHNpc0xpbmVCb3hlcygpOwogICAgIHZvaWQgY2hlY2tMaW5lc0ZvclRleHRPdmVy
ZmxvdygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDg1NjIxKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYg
KzU5LDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gV2UgZG9uJ3QgbGV0IG91ciBsaW5l
IGJveCB0cmVlIGZvciBhIHNpbmdsZSBsaW5lIGdldCBhbnkgZGVlcGVyIHRoYW4gdGhpcy4KIGNv
bnN0IHVuc2lnbmVkIGNNYXhMaW5lRGVwdGggPSAyMDA7CisgICAgCitjbGFzcyBMaW5lSW5mbyB7
CitwdWJsaWM6CisgICAgTGluZUluZm8oKQorICAgICAgICA6IG1faXNGaXJzdExpbmUodHJ1ZSkK
KyAgICAgICAgLCBtX2lzTGFzdExpbmUoZmFsc2UpCisgICAgICAgICwgbV9pc0VtcHR5KHRydWUp
CisgICAgICAgICwgbV9wcmV2aW91c0xpbmVCcm9rZUNsZWFubHkodHJ1ZSkKKyAgICB7IH0KKwor
ICAgIGJvb2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RMaW5lOyB9Cisg
ICAgYm9vbCBpc0xhc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pc0xhc3RMaW5lOyB9CisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9pc0VtcHR5OyB9CisgICAgYm9vbCBwcmV2
aW91c0xpbmVCcm9rZUNsZWFubHkoKSBjb25zdCB7IHJldHVybiBtX3ByZXZpb3VzTGluZUJyb2tl
Q2xlYW5seTsgfQorCisgICAgdm9pZCBzZXRGaXJzdExpbmUoYm9vbCBmaXJzdExpbmUpIHsgbV9p
c0ZpcnN0TGluZSA9IGZpcnN0TGluZTsgfQorICAgIHZvaWQgc2V0TGFzdExpbmUoYm9vbCBsYXN0
TGluZSkgeyBtX2lzTGFzdExpbmUgPSBsYXN0TGluZTsgfQorICAgIHZvaWQgc2V0RW1wdHkoYm9v
bCBlbXB0eSkgeyBtX2lzRW1wdHkgPSBlbXB0eTsgfQorICAgIHZvaWQgc2V0UHJldmlvdXNMaW5l
QnJva2VDbGVhbmx5KGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KSB7IG1fcHJldmlvdXNM
aW5lQnJva2VDbGVhbmx5ID0gcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5OyB9Citwcml2YXRlOgor
ICAgIGJvb2wgbV9pc0ZpcnN0TGluZTsKKyAgICBib29sIG1faXNMYXN0TGluZTsKKyAgICBib29s
IG1faXNFbXB0eTsKKyAgICBib29sIG1fcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5OworfTsKIAog
c3RhdGljIGlubGluZSBpbnQgYm9yZGVyUGFkZGluZ01hcmdpblN0YXJ0KFJlbmRlcklubGluZSog
Y2hpbGQpCiB7CkBAIC0yMDQsNyArMjI5LDcgQEAgc3RhdGljIGJvb2wgcGFyZW50SXNDb25zdHJ1
Y3RlZE9ySGF2ZU5leAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSW5saW5lRmxvd0JveCogUmVu
ZGVyQmxvY2s6OmNyZWF0ZUxpbmVCb3hlcyhSZW5kZXJPYmplY3QqIG9iaiwgYm9vbCBmaXJzdExp
bmUsIElubGluZUJveCogY2hpbGRCb3gpCitJbmxpbmVGbG93Qm94KiBSZW5kZXJCbG9jazo6Y3Jl
YXRlTGluZUJveGVzKFJlbmRlck9iamVjdCogb2JqLCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8s
IElubGluZUJveCogY2hpbGRCb3gpCiB7CiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYW4gdW5jb25z
dHJ1Y3RlZCBsaW5lIGJveCBmb3IgdGhpcyBvYmplY3QgdGhhdCBpcyBhbHNvCiAgICAgLy8gdGhl
IGxhc3QgaXRlbSBvbiB0aGUgbGluZS4KQEAgLTIzNCw3ICsyNTksNyBAQCBJbmxpbmVGbG93Qm94
KiBSZW5kZXJCbG9jazo6Y3JlYXRlTGluZUJvCiAgICAgICAgICAgICBJbmxpbmVCb3gqIG5ld0Jv
eCA9IGNyZWF0ZUlubGluZUJveEZvclJlbmRlcmVyKG9iaiwgb2JqID09IHRoaXMpOwogICAgICAg
ICAgICAgQVNTRVJUKG5ld0JveC0+aXNJbmxpbmVGbG93Qm94KCkpOwogICAgICAgICAgICAgcGFy
ZW50Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KG5ld0JveCk7Ci0gICAgICAgICAg
ICBwYXJlbnRCb3gtPnNldEZpcnN0TGluZVN0eWxlQml0KGZpcnN0TGluZSk7CisgICAgICAgICAg
ICBwYXJlbnRCb3gtPnNldEZpcnN0TGluZVN0eWxlQml0KGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkp
OwogICAgICAgICAgICAgcGFyZW50Qm94LT5zZXRJc0hvcml6b250YWwoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSk7CiAgICAgICAgICAgICBpZiAoIWhhc0RlZmF1bHRMaW5lQm94Q29udGFpbikK
ICAgICAgICAgICAgICAgICBwYXJlbnRCb3gtPmNsZWFyRGVzY2VuZGFudHNIYXZlU2FtZUxpbmVI
ZWlnaHRBbmRCYXNlbGluZSgpOwpAQCAtMjg3LDcgKzMxMiw3IEBAIHN0YXRpYyBib29sIHJlYWNo
ZWRFbmRPZlRleHRSZW5kZXJlcihjb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJvb3RJbmxp
bmVCb3gqIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RMaW5lKEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBi
aWRpUnVucywgYm9vbCBmaXJzdExpbmUsIGJvb2wgbGFzdExpbmUpCitSb290SW5saW5lQm94KiBS
ZW5kZXJCbG9jazo6Y29uc3RydWN0TGluZShCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMs
IGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbykKIHsKICAgICBBU1NFUlQoYmlkaVJ1bnMuZmlyc3RS
dW4oKSk7CiAKQEAgLTMxNCw3ICszMzksNyBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6
Y29uc3RydWN0TGluCiAgICAgICAgIC8vIHJ1bidzIGlubGluZSBib3guCiAgICAgICAgIGlmICgh
cGFyZW50Qm94IHx8IHBhcmVudEJveC0+cmVuZGVyZXIoKSAhPSByLT5tX29iamVjdC0+cGFyZW50
KCkpCiAgICAgICAgICAgICAvLyBDcmVhdGUgbmV3IGlubGluZSBib3hlcyBhbGwgdGhlIHdheSBi
YWNrIHRvIHRoZSBhcHByb3ByaWF0ZSBpbnNlcnRpb24gcG9pbnQuCi0gICAgICAgICAgICBwYXJl
bnRCb3ggPSBjcmVhdGVMaW5lQm94ZXMoci0+bV9vYmplY3QtPnBhcmVudCgpLCBmaXJzdExpbmUs
IGJveCk7CisgICAgICAgICAgICBwYXJlbnRCb3ggPSBjcmVhdGVMaW5lQm94ZXMoci0+bV9vYmpl
Y3QtPnBhcmVudCgpLCBsaW5lSW5mbywgYm94KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAvLyBBcHBlbmQgdGhlIGlubGluZSBib3ggdG8gdGhpcyBsaW5lLgogICAgICAgICAgICAgcGFy
ZW50Qm94LT5hZGRUb0xpbmUoYm94KTsKQEAgLTM0Nyw3ICszNzIsNyBAQCBSb290SW5saW5lQm94
KiBSZW5kZXJCbG9jazo6Y29uc3RydWN0TGluCiAgICAgLy8gd2UgZGV0ZXJtaW5lIHRoZSBob3Jp
em9udGFsIHBvc2l0aW9ucyBhbmQgd2lkdGhzIG9mIGFsbCB0aGUgaW5saW5lIGJveGVzIG9uCiAg
ICAgLy8gdGhlIGxpbmUuCiAgICAgYm9vbCBpc0xvZ2ljYWxseUxhc3RSdW5XcmFwcGVkID0gYmlk
aVJ1bnMubG9naWNhbGx5TGFzdFJ1bigpLT5tX29iamVjdCAmJiBiaWRpUnVucy5sb2dpY2FsbHlM
YXN0UnVuKCktPm1fb2JqZWN0LT5pc1RleHQoKSA/ICFyZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIo
YmlkaVJ1bnMpIDogdHJ1ZTsKLSAgICBsYXN0TGluZUJveCgpLT5kZXRlcm1pbmVTcGFjaW5nRm9y
Rmxvd0JveGVzKGxhc3RMaW5lLCBpc0xvZ2ljYWxseUxhc3RSdW5XcmFwcGVkLCBiaWRpUnVucy5s
b2dpY2FsbHlMYXN0UnVuKCktPm1fb2JqZWN0KTsKKyAgICBsYXN0TGluZUJveCgpLT5kZXRlcm1p
bmVTcGFjaW5nRm9yRmxvd0JveGVzKGxpbmVJbmZvLmlzTGFzdExpbmUoKSwgaXNMb2dpY2FsbHlM
YXN0UnVuV3JhcHBlZCwgYmlkaVJ1bnMubG9naWNhbGx5TGFzdFJ1bigpLT5tX29iamVjdCk7CiAK
ICAgICAvLyBOb3cgbWFyayB0aGUgbGluZSBib3hlcyBhcyBiZWluZyBjb25zdHJ1Y3RlZC4KICAg
ICBsYXN0TGluZUJveCgpLT5zZXRDb25zdHJ1Y3RlZCgpOwpAQCAtNDE3LDEyICs0NDIsMTIgQEAg
c3RhdGljIHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoRm9yQ2VudGVyQQogICAgICAgICBsb2dpY2Fs
TGVmdCArPSB0b3RhbExvZ2ljYWxXaWR0aCA+IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA/IChhdmFp
bGFibGVMb2dpY2FsV2lkdGggLSB0b3RhbExvZ2ljYWxXaWR0aCkgOiAoYXZhaWxhYmxlTG9naWNh
bFdpZHRoIC0gdG90YWxMb2dpY2FsV2lkdGgpIC8gMiAtIHRyYWlsaW5nU3BhY2VXaWR0aDsKIH0K
IAotdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0Zvckxp
bmUoUm9vdElubGluZUJveCogbGluZUJveCwgYm9vbCBmaXJzdExpbmUsIEJpZGlSdW4qIGZpcnN0
UnVuLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBib29sIHJlYWNoZWRFbmQsCit2b2lkIFJl
bmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5s
aW5lQm94KiBsaW5lQm94LCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8sIEJpZGlSdW4qIGZpcnN0
UnVuLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBib29sIHJlYWNoZWRFbmQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHlwaE92
ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4dEJveERhdGFNYXAsIFZlcnRpY2FsUG9zaXRp
b25DYWNoZSYgdmVydGljYWxQb3NpdGlvbkNhY2hlKQogewogICAgIEVUZXh0QWxpZ24gdGV4dEFs
aWduID0gdGV4dEFsaWdubWVudEZvckxpbmUoIXJlYWNoZWRFbmQgJiYgIWxpbmVCb3gtPmVuZHNX
aXRoQnJlYWsoKSk7Ci0gICAgZmxvYXQgbG9naWNhbExlZnQgPSBsb2dpY2FsTGVmdE9mZnNldEZv
ckxpbmUobG9naWNhbEhlaWdodCgpLCBmaXJzdExpbmUpOwotICAgIGZsb2F0IGF2YWlsYWJsZUxv
Z2ljYWxXaWR0aCA9IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUobG9naWNhbEhlaWdodCgpLCBm
aXJzdExpbmUpIC0gbG9naWNhbExlZnQ7CisgICAgZmxvYXQgbG9naWNhbExlZnQgPSBsb2dpY2Fs
TGVmdE9mZnNldEZvckxpbmUobG9naWNhbEhlaWdodCgpLCBsaW5lSW5mby5pc0ZpcnN0TGluZSgp
KTsKKyAgICBmbG9hdCBhdmFpbGFibGVMb2dpY2FsV2lkdGggPSBsb2dpY2FsUmlnaHRPZmZzZXRG
b3JMaW5lKGxvZ2ljYWxIZWlnaHQoKSwgbGluZUluZm8uaXNGaXJzdExpbmUoKSkgLSBsb2dpY2Fs
TGVmdDsKIAogICAgIGJvb2wgbmVlZHNXb3JkU3BhY2luZyA9IGZhbHNlOwogICAgIGZsb2F0IHRv
dGFsTG9naWNhbFdpZHRoID0gbGluZUJveC0+Z2V0Rmxvd1NwYWNpbmdMb2dpY2FsV2lkdGgoKTsK
QEAgLTQ0OSw3ICs0NzQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0
aW9uCiAKICAgICAgICAgICAgIGlmIChpbnQgbGVuZ3RoID0gcnQtPnRleHRMZW5ndGgoKSkgewog
ICAgICAgICAgICAgICAgIGlmICghci0+bV9zdGFydCAmJiBuZWVkc1dvcmRTcGFjaW5nICYmIGlz
U3BhY2VPck5ld2xpbmUocnQtPmNoYXJhY3RlcnMoKVtyLT5tX3N0YXJ0XSkpCi0gICAgICAgICAg
ICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IHJ0LT5zdHlsZShmaXJzdExpbmUpLT5mb250
KCkud29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxMb2dpY2FsV2lkdGgg
Kz0gcnQtPnN0eWxlKGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkpLT5mb250KCkud29yZFNwYWNpbmco
KTsKICAgICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFjaW5nID0gIWlzU3BhY2VPck5ld2xpbmUo
cnQtPmNoYXJhY3RlcnMoKVtyLT5tX3N0b3AgLSAxXSkgJiYgci0+bV9zdG9wID09IGxlbmd0aDsg
ICAgICAgICAgCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4gZmFsbGJhY2tGb250czsKQEAgLTQ2MSwxMCArNDg2LDEwIEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb24KICAgICAgICAgICAgICAgICAvLyB3aWxs
IGtlZXAgdXMgZnJvbSBjb21wdXRpbmcgZ2x5cGggYm91bmRzIGluIG5lYXJseSBhbGwgY2FzZXMu
CiAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlUm9vdExpbmUgPSBsaW5lQm94LT5pbmNsdWRl
c1Jvb3RMaW5lQm94Rm9udE9yTGVhZGluZygpOwogICAgICAgICAgICAgICAgIGludCBiYXNlbGlu
ZVNoaWZ0ID0gbGluZUJveC0+dmVydGljYWxQb3NpdGlvbkZvckJveChyLT5tX2JveCwgdmVydGlj
YWxQb3NpdGlvbkNhY2hlKTsKLSAgICAgICAgICAgICAgICBpbnQgcm9vdERlc2NlbnQgPSBpbmNs
dWRlUm9vdExpbmUgPyBsaW5lQm94LT5yZW5kZXJlcigpLT5zdHlsZShmaXJzdExpbmUpLT5mb250
KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgOiAwOwotICAgICAgICAgICAgICAgIGludCByb290
QXNjZW50ID0gaW5jbHVkZVJvb3RMaW5lID8gbGluZUJveC0+cmVuZGVyZXIoKS0+c3R5bGUoZmly
c3RMaW5lKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgOiAwOwotICAgICAgICAgICAg
ICAgIGludCBib3hBc2NlbnQgPSBydC0+c3R5bGUoZmlyc3RMaW5lKS0+Zm9udCgpLmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkgLSBiYXNlbGluZVNoaWZ0OwotICAgICAgICAgICAgICAgIGludCBib3hE
ZXNjZW50ID0gcnQtPnN0eWxlKGZpcnN0TGluZSktPmZvbnQoKS5mb250TWV0cmljcygpLmRlc2Nl
bnQoKSArIGJhc2VsaW5lU2hpZnQ7CisgICAgICAgICAgICAgICAgaW50IHJvb3REZXNjZW50ID0g
aW5jbHVkZVJvb3RMaW5lID8gbGluZUJveC0+cmVuZGVyZXIoKS0+c3R5bGUobGluZUluZm8uaXNG
aXJzdExpbmUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSA6IDA7CisgICAgICAg
ICAgICAgICAgaW50IHJvb3RBc2NlbnQgPSBpbmNsdWRlUm9vdExpbmUgPyBsaW5lQm94LT5yZW5k
ZXJlcigpLT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkgOiAwOworICAgICAgICAgICAgICAgIGludCBib3hBc2NlbnQgPSBydC0+c3R5
bGUobGluZUluZm8uaXNGaXJzdExpbmUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgp
IC0gYmFzZWxpbmVTaGlmdDsKKyAgICAgICAgICAgICAgICBpbnQgYm94RGVzY2VudCA9IHJ0LT5z
dHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuZGVzY2Vu
dCgpICsgYmFzZWxpbmVTaGlmdDsKICAgICAgICAgICAgICAgICBpZiAoYm94QXNjZW50ID4gcm9v
dERlc2NlbnQgfHwgIGJveERlc2NlbnQgPiByb290QXNjZW50KQogICAgICAgICAgICAgICAgICAg
ICBnbHlwaE92ZXJmbG93LmNvbXB1dGVCb3VuZHMgPSB0cnVlOyAKICAgICAgICAgICAgIH0KQEAg
LTQ3Miw5ICs0OTcsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0aW9u
CiAgICAgICAgICAgICBpbnQgaHlwaGVuV2lkdGggPSAwOwogICAgICAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PElubGluZVRleHRCb3gqPihyLT5tX2JveCktPmhhc0h5cGhlbigpKSB7CiAgICAgICAg
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBoeXBoZW5TdHJpbmcgPSBydC0+c3R5bGUoKS0+
aHlwaGVuU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaHlwaGVuV2lkdGggPSBydC0+c3R5bGUo
Zmlyc3RMaW5lKS0+Zm9udCgpLndpZHRoKFRleHRSdW4oaHlwaGVuU3RyaW5nLmNoYXJhY3RlcnMo
KSwgaHlwaGVuU3RyaW5nLmxlbmd0aCgpKSk7CisgICAgICAgICAgICAgICAgaHlwaGVuV2lkdGgg
PSBydC0+c3R5bGUobGluZUluZm8uaXNGaXJzdExpbmUoKSktPmZvbnQoKS53aWR0aChUZXh0UnVu
KGh5cGhlblN0cmluZy5jaGFyYWN0ZXJzKCksIGh5cGhlblN0cmluZy5sZW5ndGgoKSkpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgci0+bV9ib3gtPnNldExvZ2ljYWxXaWR0aChydC0+d2lk
dGgoci0+bV9zdGFydCwgci0+bV9zdG9wIC0gci0+bV9zdGFydCwgdG90YWxMb2dpY2FsV2lkdGgs
IGZpcnN0TGluZSwgJmZhbGxiYWNrRm9udHMsICZnbHlwaE92ZXJmbG93KSArIGh5cGhlbldpZHRo
KTsKKyAgICAgICAgICAgIHItPm1fYm94LT5zZXRMb2dpY2FsV2lkdGgocnQtPndpZHRoKHItPm1f
c3RhcnQsIHItPm1fc3RvcCAtIHItPm1fc3RhcnQsIHRvdGFsTG9naWNhbFdpZHRoLCBsaW5lSW5m
by5pc0ZpcnN0TGluZSgpLCAmZmFsbGJhY2tGb250cywgJmdseXBoT3ZlcmZsb3cpICsgaHlwaGVu
V2lkdGgpOwogICAgICAgICAgICAgaWYgKCFmYWxsYmFja0ZvbnRzLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgICAgIEFTU0VSVChyLT5tX2JveC0+aXNUZXh0KCkpOwogICAgICAgICAgICAgICAg
IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hE
YXRhTWFwLmFkZChzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4oci0+bV9ib3gpLCBtYWtlX3Bh
aXIoVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4oKSwgR2x5cGhPdmVyZmxvdygpKSkuZmly
c3Q7CkBAIC01MDIsNyArNTI3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURp
cmVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IHRvUmVuZGVyUnVieVJ1bihyZW5kZXJCb3gpLT5nZXRPdmVyaGFuZyhmaXJzdExpbmUsIHJlbmRl
ckJveC0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcHJldmlvdXNPYmplY3Qg
OiBuZXh0T2JqZWN0LCByZW5kZXJCb3gtPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IG5leHRPYmplY3QgOiBwcmV2aW91c09iamVjdCwgc3RhcnRPdmVyaGFuZywgZW5kT3Zlcmhh
bmcpOworICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclJ1YnlSdW4ocmVuZGVyQm94KS0+Z2V0
T3ZlcmhhbmcobGluZUluZm8uaXNGaXJzdExpbmUoKSwgcmVuZGVyQm94LT5zdHlsZSgpLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBwcmV2aW91c09iamVjdCA6IG5leHRPYmplY3QsIHJlbmRl
ckJveC0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbmV4dE9iamVjdCA6IHBy
ZXZpb3VzT2JqZWN0LCBzdGFydE92ZXJoYW5nLCBlbmRPdmVyaGFuZyk7CiAgICAgICAgICAgICAg
ICAgICAgIHNldE1hcmdpblN0YXJ0Rm9yQ2hpbGQocmVuZGVyQm94LCAtc3RhcnRPdmVyaGFuZyk7
CiAgICAgICAgICAgICAgICAgICAgIHNldE1hcmdpbkVuZEZvckNoaWxkKHJlbmRlckJveCwgLWVu
ZE92ZXJoYW5nKTsKICAgICAgICAgICAgICAgICB9CkBAIC03OTIsOSArODE3LDggQEAgdm9pZCBS
ZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAvLyBXZSB3YW50IHRv
IHNraXAgYWhlYWQgdG8gdGhlIGZpcnN0IGRpcnR5IGxpbmUKICAgICAgICAgSW5saW5lQmlkaVJl
c29sdmVyIHJlc29sdmVyOwogICAgICAgICB1bnNpZ25lZCBmbG9hdEluZGV4OwotICAgICAgICBi
b29sIGZpcnN0TGluZSA9IHRydWU7Ci0gICAgICAgIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVh
bmx5ID0gdHJ1ZTsKLSAgICAgICAgUm9vdElubGluZUJveCogc3RhcnRMaW5lID0gZGV0ZXJtaW5l
U3RhcnRQb3NpdGlvbihmaXJzdExpbmUsIGZ1bGxMYXlvdXQsIHByZXZpb3VzTGluZUJyb2tlQ2xl
YW5seSwgcmVzb2x2ZXIsIGZsb2F0cywgZmxvYXRJbmRleCwKKyAgICAgICAgTGluZUluZm8gbGlu
ZUluZm87CisgICAgICAgIFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSA9IGRldGVybWluZVN0YXJ0
UG9zaXRpb24obGluZUluZm8sIGZ1bGxMYXlvdXQsIHJlc29sdmVyLCBmbG9hdHMsIGZsb2F0SW5k
ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlUmVwYWludEJvdW5kcywgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2Fs
Qm90dG9tKTsKIAogICAgICAgICBpZiAoZnVsbExheW91dCAmJiBoYXNJbmxpbmVDaGlsZCAmJiAh
c2VsZk5lZWRzTGF5b3V0KCkpIHsKQEAgLTg2MSw3ICs4ODUsNiBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgIGJvb2wgY2hlY2tGb3JFbmRMaW5lTWF0
Y2ggPSBlbmRMaW5lOwogICAgICAgICBib29sIGNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lID0g
ZmFsc2U7CiAKLSAgICAgICAgYm9vbCBpc0xpbmVFbXB0eSA9IHRydWU7CiAgICAgICAgIGJvb2wg
cGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+aXNQYWdpbmF0ZWQoKTsKIAogICAgICAgICBMaW5lQnJlYWtJdGVyYXRvckluZm8gbGluZUJy
ZWFrSXRlcmF0b3JJbmZvOwpAQCAtODc0LDcgKzg5Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dElubGluZUNoaWxkcmVuKGIKIAogICAgICAgICAgICAgbGluZU1pZHBvaW50U3RhdGUucmVz
ZXQoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaXNMaW5lRW1wdHkgPSB0cnVlOworICAg
ICAgICAgICAgbGluZUluZm8uc2V0RW1wdHkodHJ1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIEVDbGVhciBjbGVhciA9IENOT05FOwogICAgICAgICAgICAgYm9vbCBoeXBoZW5hdGVkOwpA
QCAtODgyLDcgKzkwNSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVu
KGIKICAgICAgICAgICAgIAogICAgICAgICAgICAgSW5saW5lSXRlcmF0b3Igb2xkRW5kID0gZW5k
OwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUg
PSAobV9mbG9hdGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5
KCkpID8gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKSA6IDA7Ci0gICAgICAgICAgICBl
bmQgPSBmaW5kTmV4dExpbmVCcmVhayhyZXNvbHZlciwgZmlyc3RMaW5lLCBpc0xpbmVFbXB0eSwg
bGluZUJyZWFrSXRlcmF0b3JJbmZvLCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIGh5cGhlbmF0
ZWQsICZjbGVhciwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgcG9zaXRpb25lZE9iamVjdHMp
OworICAgICAgICAgICAgZW5kID0gZmluZE5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGxpbmVJbmZv
LCBsaW5lQnJlYWtJdGVyYXRvckluZm8sIGh5cGhlbmF0ZWQsICZjbGVhciwgbGFzdEZsb2F0RnJv
bVByZXZpb3VzTGluZSwgcG9zaXRpb25lZE9iamVjdHMpOwogICAgICAgICAgICAgaWYgKHJlc29s
dmVyLnBvc2l0aW9uKCkuYXRFbmQoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGRuJ3QgYmUgY3JlYXRpbmcgYW55IHJ1bnMgaW4gZmluZE5leHRMaW5lQnJlYWsgdG8gYmVn
aW4gd2l0aCEKICAgICAgICAgICAgICAgICAvLyBPbmNlIEJpZGlSdW5MaXN0IGlzIHNlcGFyYXRl
ZCBmcm9tIEJpZGlSZXNvbHZlciB0aGlzIHdpbGwgbm90IGJlIG5lZWRlZC4KQEAgLTg5MywxNyAr
OTE2LDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChlbmQgIT0gcmVzb2x2ZXIucG9zaXRpb24oKSk7
CiAKLSAgICAgICAgICAgIGlmIChpc0xpbmVFbXB0eSkgeworICAgICAgICAgICAgaWYgKGxpbmVJ
bmZvLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGlmIChsYXN0Um9vdEJveCgpKQogICAg
ICAgICAgICAgICAgICAgICBsYXN0Um9vdEJveCgpLT5zZXRMaW5lQnJlYWtJbmZvKGVuZC5tX29i
aiwgZW5kLm1fcG9zLCByZXNvbHZlci5zdGF0dXMoKSk7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIG92ZXJyaWRlID0gKHN0eWxl
KCktPnZpc3VhbGx5T3JkZXJlZCgpID8gKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IFZp
c3VhbExlZnRUb1JpZ2h0T3ZlcnJpZGUgOiBWaXN1YWxSaWdodFRvTGVmdE92ZXJyaWRlKSA6IE5v
VmlzdWFsT3ZlcnJpZGUpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG93bmVyc2hp
cCBpcyByZXZlcnNlZC4gV2Ugc2hvdWxkIG93biB0aGUgQmlkaVJ1bkxpc3QgYW5kIHBhc3MgaXQg
dG8gY3JlYXRlQmlkaVJ1bnNGb3JMaW5lLgogICAgICAgICAgICAgICAgIEJpZGlSdW5MaXN0PEJp
ZGlSdW4+JiBiaWRpUnVucyA9IHJlc29sdmVyLnJ1bnMoKTsKLSAgICAgICAgICAgICAgICByZXNv
bHZlci5jcmVhdGVCaWRpUnVuc0ZvckxpbmUoZW5kLCBvdmVycmlkZSwgcHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5KTsKKyAgICAgICAgICAgICAgICByZXNvbHZlci5jcmVhdGVCaWRpUnVuc0Zvckxp
bmUoZW5kLCBvdmVycmlkZSwgbGluZUluZm8ucHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCkpOwog
ICAgICAgICAgICAgICAgIEFTU0VSVChyZXNvbHZlci5wb3NpdGlvbigpID09IGVuZCk7CiAKLSAg
ICAgICAgICAgICAgICBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuID0gIXByZXZpb3VzTGluZUJy
b2tlQ2xlYW5seSA/IGhhbmRsZVRyYWlsaW5nU3BhY2VzKGJpZGlSdW5zLCByZXNvbHZlci5jb250
ZXh0KCkpIDogMDsKKyAgICAgICAgICAgICAgICBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuID0g
IWxpbmVJbmZvLnByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSgpID8gaGFuZGxlVHJhaWxpbmdTcGFj
ZXMoYmlkaVJ1bnMsIHJlc29sdmVyLmNvbnRleHQoKSkgOiAwOwogCiAgICAgICAgICAgICAgICAg
Ly8gTm93IHRoYXQgdGhlIHJ1bnMgaGF2ZSBiZWVuIG9yZGVyZWQsIHdlIGNyZWF0ZSB0aGUgbGlu
ZSBib3hlcy4KICAgICAgICAgICAgICAgICAvLyBBdCB0aGUgc2FtZSB0aW1lIHdlIGZpZ3VyZSBv
dXQgd2hlcmUgYm9yZGVyL3BhZGRpbmcvbWFyZ2luIHNob3VsZCBiZSBhcHBsaWVkIGZvcgpAQCAt
OTE0LDkgKzkzNywxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihi
CiAgICAgICAgICAgICAgICAgaWYgKGJpZGlSdW5zLnJ1bkNvdW50KCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGh5cGhlbmF0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpUnVu
cy5sb2dpY2FsbHlMYXN0UnVuKCktPm1faGFzSHlwaGVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgbGluZUJveCA9IGNvbnN0cnVjdExpbmUoYmlkaVJ1bnMsIGZpcnN0TGluZSwgIWVuZC5t
X29iaik7CisgICAgICAgICAgICAgICAgICAgIGxpbmVJbmZvLnNldExhc3RMaW5lKCFlbmQubV9v
YmopOworICAgICAgICAgICAgICAgICAgICBsaW5lQm94ID0gY29uc3RydWN0TGluZShiaWRpUnVu
cywgbGluZUluZm8pOwogICAgICAgICAgICAgICAgICAgICBpZiAobGluZUJveCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZUJveC0+c2V0RW5kc1dpdGhCcmVhayhwcmV2aW91c0xpbmVC
cm9rZUNsZWFubHkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZUJveC0+c2V0RW5kc1dp
dGhCcmVhayhsaW5lSW5mby5wcmV2aW91c0xpbmVCcm9rZUNsZWFubHkoKSk7CiAKICNpZiBFTkFC
TEUoU1ZHKQogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NWR1Jvb3RJbmxpbmVCb3gg
PSBsaW5lQm94LT5pc1NWR1Jvb3RJbmxpbmVCb3goKTsKQEAgLTkyOCw3ICs5NTIsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHdlIHBvc2l0aW9uIGFsbCBvZiBvdXIg
dGV4dCBydW5zIGhvcml6b250YWxseS4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNT
VkdSb290SW5saW5lQm94KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVJbmxp
bmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKGxpbmVCb3gsIGZpcnN0TGluZSwgYmlkaVJ1bnMu
Zmlyc3RSdW4oKSwgdHJhaWxpbmdTcGFjZVJ1biwgZW5kLmF0RW5kKCksIHRleHRCb3hEYXRhTWFw
LCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKGxpbmVCb3gsIGxpbmVJbmZvLCBi
aWRpUnVucy5maXJzdFJ1bigpLCB0cmFpbGluZ1NwYWNlUnVuLCBlbmQuYXRFbmQoKSwgdGV4dEJv
eERhdGFNYXAsIHZlcnRpY2FsUG9zaXRpb25DYWNoZSk7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE5vdyBwb3NpdGlvbiBvdXIgdGV4dCBydW5zIHZlcnRpY2FsbHkuCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb21wdXRlQmxvY2tEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKGxpbmVC
b3gsIGJpZGlSdW5zLmZpcnN0UnVuKCksIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBvc2l0aW9u
Q2FjaGUpOwpAQCAtOTcwLDEyICs5OTQsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5s
aW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkanVzdG1lbnQgPSAw
OwogICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlv
bihsaW5lQm94LCBhZGp1c3RtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGp1
c3RtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZExpbmVXaWR0aCA9
IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUob2xkTG9naWNhbEhlaWdodCwgZmlyc3RMaW5l
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkTGluZVdpZHRoID0gYXZhaWxh
YmxlTG9naWNhbFdpZHRoRm9yTGluZShvbGRMb2dpY2FsSGVpZ2h0LCBsaW5lSW5mby5pc0ZpcnN0
TGluZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5hZGp1c3RCbG9j
a0RpcmVjdGlvblBvc2l0aW9uKGFkanVzdG1lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh1c2VSZXBhaW50Qm91bmRzKSAvLyBUaGlzIGNhbiBvbmx5IGJlIGEgcG9zaXRpdmUg
YWRqdXN0bWVudCwgc28gbm8gbmVlZCB0byB1cGRhdGUgcmVwYWludFRvcC4KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwYWludExvZ2ljYWxCb3R0b20gPSBtYXgocmVwYWludExv
Z2ljYWxCb3R0b20sIGxpbmVCb3gtPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUob2xkTG9naWNhbEhlaWdodCArIGFk
anVzdG1lbnQsIGZpcnN0TGluZSkgIT0gb2xkTGluZVdpZHRoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUob2xkTG9naWNhbEhl
aWdodCArIGFkanVzdG1lbnQsIGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkpICE9IG9sZExpbmVXaWR0
aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRlbGV0
ZSB0aGlzIGxpbmUsIHJlbW92ZSBhbGwgZmxvYXRzIHRoYXQgZ290IGFkZGVkLCBhbmQgbGV0IGxp
bmUgbGF5b3V0IHJlLXJ1bi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUJv
eC0+ZGVsZXRlTGluZShyZW5kZXJBcmVuYSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVtb3ZlRmxvYXRpbmdPYmplY3RzQmVsb3cobGFzdEZsb2F0RnJvbVByZXZpb3VzTGlu
ZSwgb2xkTG9naWNhbEhlaWdodCk7CkBAIC05OTMsNyArMTAxNyw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHBvc2l0aW9uZWRPYmplY3RzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAg
ICAgICBzZXRTdGF0aWNQb3NpdGlvbnModGhpcywgcG9zaXRpb25lZE9iamVjdHNbaV0pOwogCi0g
ICAgICAgICAgICAgICAgZmlyc3RMaW5lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbGluZUlu
Zm8uc2V0Rmlyc3RMaW5lKGZhbHNlKTsKICAgICAgICAgICAgICAgICBuZXdMaW5lKGNsZWFyKTsK
ICAgICAgICAgICAgIH0KIApAQCAtMTE1OSw5ICsxMTgzLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6
Y2hlY2tGbG9hdHNJbkNsZWFuTGluZQogICAgIH0KIH0KIAotUm9vdElubGluZUJveCogUmVuZGVy
QmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRpb24oYm9vbCYgZmlyc3RMaW5lLCBib29sJiBmdWxs
TGF5b3V0LCBib29sJiBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQmlkaVJlc29sdmVyJiBy
ZXNvbHZlciwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2lnbmVkJiBudW1DbGVh
bkZsb2F0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wmIHVzZVJlcGFpbnRCb3VuZHMsIGludCYgcmVwYWludExvZ2ljYWxUb3AsIGludCYg
cmVwYWludExvZ2ljYWxCb3R0b20pCitSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJt
aW5lU3RhcnRQb3NpdGlvbihMaW5lSW5mbyYgbGluZUluZm8sIGJvb2wmIGZ1bGxMYXlvdXQsIElu
bGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQmIG51bUNsZWFuRmxvYXRzLCBib29sJiB1c2VSZXBhaW50Qm91bmRzLCBpbnQmIHJlcGFp
bnRMb2dpY2FsVG9wLCBpbnQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKQogewogICAgIFJvb3RJbmxp
bmVCb3gqIGN1cnIgPSAwOwogICAgIFJvb3RJbmxpbmVCb3gqIGxhc3QgPSAwOwpAQCAtMTI1Niw4
ICsxMjc5LDggQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YQogICAg
ICAgICBzZXRMb2dpY2FsSGVpZ2h0KHNhdmVkTG9naWNhbEhlaWdodCk7CiAgICAgfQogCi0gICAg
Zmlyc3RMaW5lID0gIWxhc3Q7Ci0gICAgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gIWxhc3Qg
fHwgbGFzdC0+ZW5kc1dpdGhCcmVhaygpOworICAgIGxpbmVJbmZvLnNldEZpcnN0TGluZSghbGFz
dCk7CisgICAgbGluZUluZm8uc2V0UHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCFsYXN0IHx8IGxh
c3QtPmVuZHNXaXRoQnJlYWsoKSk7CiAKICAgICBpZiAobGFzdCkgewogICAgICAgICBzZXRMb2dp
Y2FsSGVpZ2h0KGxhc3QtPmJsb2NrTG9naWNhbEhlaWdodCgpKTsKQEAgLTEzOTAsNyArMTQxMyw3
IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKGNvbnN0IEkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBza2lwTm9uQnJlYWtpbmdTcGFjZShjb25z
dCBJbmxpbmVJdGVyYXRvciYgaXQsIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5l
QnJva2VDbGVhbmx5KQorc3RhdGljIGlubGluZSBib29sIHNraXBOb25CcmVha2luZ1NwYWNlKGNv
bnN0IElubGluZUl0ZXJhdG9yJiBpdCwgY29uc3QgTGluZUluZm8mIGxpbmVJbmZvKQogewogICAg
IGlmIChpdC5tX29iai0+c3R5bGUoKS0+bmJzcE1vZGUoKSAhPSBTUEFDRSB8fCBpdC5jdXJyZW50
KCkgIT0gbm9CcmVha1NwYWNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDAwLDE1ICsx
NDIzLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2lwTm9uQnJlYWtpbmdTcGFjZSgKICAgICAv
LyBEbyBub3Qgc2tpcCBhIG5vbi1icmVha2luZyBzcGFjZSBpZiBpdCBpcyB0aGUgZmlyc3QgY2hh
cmFjdGVyCiAgICAgLy8gb24gYSBsaW5lIGFmdGVyIGEgY2xlYW4gbGluZSBicmVhayAob3Igb24g
dGhlIGZpcnN0IGxpbmUsIHNpbmNlIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSBzdGFydHMgb2Zm
CiAgICAgLy8gfHRydWV8KS4KLSAgICBpZiAoaXNMaW5lRW1wdHkgJiYgcHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5KQorICAgIGlmIChsaW5lSW5mby5pc0VtcHR5KCkgJiYgbGluZUluZm8ucHJldmlv
dXNMaW5lQnJva2VDbGVhbmx5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQ29sbGFwc2VXaGl0ZVNwYWNl
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBpc0xpbmVFbXB0eSwgYm9vbCBwcmV2aW91
c0xpbmVCcm9rZUNsZWFubHkpCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQ29sbGFwc2VXaGl0
ZVNwYWNlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgTGluZUluZm8mIGxpbmVJbmZv
KQogewotICAgIHJldHVybiBzdHlsZS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgfHwgKHN0eWxlLT53
aGl0ZVNwYWNlKCkgPT0gUFJFX1dSQVAgJiYgKCFpc0xpbmVFbXB0eSB8fCAhcHJldmlvdXNMaW5l
QnJva2VDbGVhbmx5KSk7CisgICAgcmV0dXJuIHN0eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSB8
fCAoc3R5bGUtPndoaXRlU3BhY2UoKSA9PSBQUkVfV1JBUCAmJiAoIWxpbmVJbmZvLmlzRW1wdHko
KSB8fCAhbGluZUluZm8ucHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCkpKTsKIH0KIAogc3RhdGlj
IGJvb2wgaW5saW5lRmxvd1JlcXVpcmVzTGluZUJveChSZW5kZXJJbmxpbmUqIGZsb3cpCkBAIC0x
NDE5LDcgKzE0NDIsNyBAQCBzdGF0aWMgYm9vbCBpbmxpbmVGbG93UmVxdWlyZXNMaW5lQm94KFJl
CiAgICAgcmV0dXJuICFmbG93LT5maXJzdENoaWxkKCkgJiYgZmxvdy0+aGFzSW5saW5lRGlyZWN0
aW9uQm9yZGVyc1BhZGRpbmdPck1hcmdpbigpOwogfQogCi1ib29sIFJlbmRlckJsb2NrOjpyZXF1
aXJlc0xpbmVCb3goY29uc3QgSW5saW5lSXRlcmF0b3ImIGl0LCBib29sIGlzTGluZUVtcHR5LCBi
b29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSkKK3N0YXRpYyBib29sIHJlcXVpcmVzTGluZUJv
eChjb25zdCBJbmxpbmVJdGVyYXRvciYgaXQsIGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbyA9IExp
bmVJbmZvKCkpCiB7CiAgICAgaWYgKGl0Lm1fb2JqLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MjcsMjAgKzE0NTAsMjAgQEAgYm9vbCBSZW5k
ZXJCbG9jazo6cmVxdWlyZXNMaW5lQm94KGNvbnN0IAogICAgIGlmIChpdC5tX29iai0+aXNSZW5k
ZXJJbmxpbmUoKSAmJiAhaW5saW5lRmxvd1JlcXVpcmVzTGluZUJveCh0b1JlbmRlcklubGluZShp
dC5tX29iaikpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZENvbGxh
cHNlV2hpdGVTcGFjZShpdC5tX29iai0+c3R5bGUoKSwgaXNMaW5lRW1wdHksIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSkgfHwgaXQubV9vYmotPmlzQlIoKSkKKyAgICBpZiAoIXNob3VsZENvbGxh
cHNlV2hpdGVTcGFjZShpdC5tX29iai0+c3R5bGUoKSwgbGluZUluZm8pIHx8IGl0Lm1fb2JqLT5p
c0JSKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgVUNoYXIgY3VycmVudCA9IGl0LmN1
cnJlbnQoKTsKICAgICByZXR1cm4gY3VycmVudCAhPSAnICcgJiYgY3VycmVudCAhPSAnXHQnICYm
IGN1cnJlbnQgIT0gc29mdEh5cGhlbiAmJiAoY3VycmVudCAhPSAnXG4nIHx8IGl0Lm1fb2JqLT5w
cmVzZXJ2ZXNOZXdsaW5lKCkpIAotICAgICAgICAgICAgJiYgIXNraXBOb25CcmVha2luZ1NwYWNl
KGl0LCBpc0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKKyAgICAmJiAhc2tp
cE5vbkJyZWFraW5nU3BhY2UoaXQsIGxpbmVJbmZvKTsKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6
Z2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQoUmVuZGVyT2JqZWN0KiBpbmxpbmVPYmos
IGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KQorYm9vbCBS
ZW5kZXJCbG9jazo6Z2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQoUmVuZGVyT2JqZWN0
KiBpbmxpbmVPYmopCiB7CiAgICAgQVNTRVJUKGlubGluZU9iai0+cGFyZW50KCkgPT0gdGhpcyk7
CiAKICAgICBJbmxpbmVJdGVyYXRvciBpdCh0aGlzLCBpbmxpbmVPYmosIDApOwotICAgIHdoaWxl
ICghaXQuYXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5lQm94KGl0LCBpc0xpbmVFbXB0eSwgcHJldmlv
dXNMaW5lQnJva2VDbGVhbmx5KSkKKyAgICB3aGlsZSAoIWl0LmF0RW5kKCkgJiYgIXJlcXVpcmVz
TGluZUJveChpdCkpCiAgICAgICAgIGl0LmluY3JlbWVudCgpOwogCiAgICAgcmV0dXJuICFpdC5h
dEVuZCgpOwpAQCAtMTQ1Miw5ICsxNDc1LDkgQEAgYm9vbCBSZW5kZXJCbG9jazo6Z2VuZXJhdGVz
TGluZUJveGVzRm9ySQogLy8gb2JqZWN0IGl0ZXJhdGlvbiBwcm9jZXNzLgogLy8gTkIuIHRoaXMg
ZnVuY3Rpb24gd2lsbCBpbnNlcnQgYW55IGZsb2F0aW5nIGVsZW1lbnRzIHRoYXQgd291bGQgb3Ro
ZXJ3aXNlCiAvLyBiZSBza2lwcGVkIGJ1dCBpdCB3aWxsIG5vdCBwb3NpdGlvbiB0aGVtLgotdm9p
ZCBSZW5kZXJCbG9jazo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRvciYgaXRl
cmF0b3IsIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KQor
dm9pZCBSZW5kZXJCbG9jazo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRvciYg
aXRlcmF0b3IsIGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbykKIHsKLSAgICB3aGlsZSAoIWl0ZXJh
dG9yLmF0RW5kKCkgJiYgIXJlcXVpcmVzTGluZUJveChpdGVyYXRvciwgaXNMaW5lRW1wdHksIHBy
ZXZpb3VzTGluZUJyb2tlQ2xlYW5seSkpIHsKKyAgICB3aGlsZSAoIWl0ZXJhdG9yLmF0RW5kKCkg
JiYgIXJlcXVpcmVzTGluZUJveChpdGVyYXRvciwgbGluZUluZm8pKSB7CiAgICAgICAgIFJlbmRl
ck9iamVjdCogb2JqZWN0ID0gaXRlcmF0b3IubV9vYmo7CiAgICAgICAgIGlmIChvYmplY3QtPmlz
RmxvYXRpbmcoKSkgewogICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QodG9SZW5kZXJC
b3gob2JqZWN0KSk7CkBAIC0xNDY0LDEwICsxNDg3LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNr
aXBUcmFpbGluZ1doaXRlc3BhY2UKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnNraXBM
ZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBib29sIGlzTGlu
ZUVtcHR5LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwKK3ZvaWQgUmVuZGVyQmxvY2s6
OnNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25z
dCBMaW5lSW5mbyYgbGluZUluZm8sCiAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21Q
cmV2aW91c0xpbmUsIExpbmVXaWR0aCYgd2lkdGgpCiB7Ci0gICAgd2hpbGUgKCFyZXNvbHZlci5w
b3NpdGlvbigpLmF0RW5kKCkgJiYgIXJlcXVpcmVzTGluZUJveChyZXNvbHZlci5wb3NpdGlvbigp
LCBpc0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KSkgeworICAgIHdoaWxlICgh
cmVzb2x2ZXIucG9zaXRpb24oKS5hdEVuZCgpICYmICFyZXF1aXJlc0xpbmVCb3gocmVzb2x2ZXIu
cG9zaXRpb24oKSwgbGluZUluZm8pKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0g
cmVzb2x2ZXIucG9zaXRpb24oKS5tX29iajsKICAgICAgICAgaWYgKG9iamVjdC0+aXNGbG9hdGlu
ZygpKQogICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdE9uTGluZShpbnNlcnRGbG9hdGluZ09i
amVjdCh0b1JlbmRlckJveChvYmplY3QpKSwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgd2lk
dGgpOwpAQCAtMTY2MSw3ICsxNjg0LDcgQEAgdm9pZCBMaW5lV2lkdGg6OmZpdEJlbG93RmxvYXRz
KCkKICAgICB9CiB9CiAKLUlubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVC
cmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBib29sIGZpcnN0TGluZSwgYm9vbCYg
aXNMaW5lRW1wdHksIExpbmVCcmVha0l0ZXJhdG9ySW5mbyYgbGluZUJyZWFrSXRlcmF0b3JJbmZv
LCBib29sJiBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIAorSW5saW5lSXRlcmF0b3IgUmVuZGVy
QmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExp
bmVJbmZvJiBsaW5lSW5mbywgTGluZUJyZWFrSXRlcmF0b3JJbmZvJiBsaW5lQnJlYWtJdGVyYXRv
ckluZm8sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wmIGh5cGhlbmF0ZWQsIEVDbGVhciogY2xlYXIsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRG
cm9tUHJldmlvdXNMaW5lLCBWZWN0b3I8UmVuZGVyQm94Kj4mIHBvc2l0aW9uZWRCb3hlcykKIHsK
ICAgICBBU1NFUlQocmVzb2x2ZXIucG9zaXRpb24oKS5yb290KCkgPT0gdGhpcyk7CkBAIC0xNjY5
LDkgKzE2OTIsOSBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAg
ICAgYm9vbCBhcHBsaWVkU3RhcnRXaWR0aCA9IHJlc29sdmVyLnBvc2l0aW9uKCkubV9wb3MgPiAw
OwogICAgIExpbmVNaWRwb2ludFN0YXRlJiBsaW5lTWlkcG9pbnRTdGF0ZSA9IHJlc29sdmVyLm1p
ZHBvaW50U3RhdGUoKTsKIAotICAgIExpbmVXaWR0aCB3aWR0aCh0aGlzLCBmaXJzdExpbmUpOwor
ICAgIExpbmVXaWR0aCB3aWR0aCh0aGlzLCBsaW5lSW5mby5pc0ZpcnN0TGluZSgpKTsKIAotICAg
IHNraXBMZWFkaW5nV2hpdGVzcGFjZShyZXNvbHZlciwgaXNMaW5lRW1wdHksIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgd2lkdGgpOworICAgIHNr
aXBMZWFkaW5nV2hpdGVzcGFjZShyZXNvbHZlciwgbGluZUluZm8sIGxhc3RGbG9hdEZyb21QcmV2
aW91c0xpbmUsIHdpZHRoKTsKIAogICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkp
CiAgICAgICAgIHJldHVybiByZXNvbHZlci5wb3NpdGlvbigpOwpAQCAtMTY5OSw4ICsxNzIyLDgg
QEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAgIGludCBuZXh0
QnJlYWthYmxlID0gcmVzb2x2ZXIucG9zaXRpb24oKS5tX25leHRCcmVha2FibGVQb3NpdGlvbjsK
ICAgICBib29sIGF0U3RhcnQgPSB0cnVlOwogCi0gICAgYm9vbCBwcmV2TGluZUJyb2tlQ2xlYW5s
eSA9IHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seTsKLSAgICBwcmV2aW91c0xpbmVCcm9rZUNsZWFu
bHkgPSBmYWxzZTsKKyAgICBib29sIHN0YXJ0aW5nTmV3UGFyYWdyYXBoID0gbGluZUluZm8ucHJl
dmlvdXNMaW5lQnJva2VDbGVhbmx5KCk7CisgICAgbGluZUluZm8uc2V0UHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5KGZhbHNlKTsKIAogICAgIGh5cGhlbmF0ZWQgPSBmYWxzZTsKIApAQCAtMTc0MSwx
MiArMTc2NCwxMiBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAg
ICAgICAgICAgICAgICAgLy8gZ2V0IGNvbGxhcHNlZCBhd2F5LiAgSXQgb25seSBkb2VzIHRoaXMg
aWYgdGhlIHByZXZpb3VzIGxpbmUgYnJva2UKICAgICAgICAgICAgICAgICAvLyBjbGVhbmx5LiAg
T3RoZXJ3aXNlIHRoZSA8YnI+IGhhcyBubyBlZmZlY3Qgb24gd2hldGhlciB0aGUgbGluZSBpcwog
ICAgICAgICAgICAgICAgIC8vIGVtcHR5IG9yIG5vdC4KLSAgICAgICAgICAgICAgICBpZiAocHJl
dkxpbmVCcm9rZUNsZWFubHkpCi0gICAgICAgICAgICAgICAgICAgIGlzTGluZUVtcHR5ID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0aW5nTmV3UGFyYWdyYXBoKQorICAgICAgICAg
ICAgICAgICAgICBsaW5lSW5mby5zZXRFbXB0eShmYWxzZSk7CiAgICAgICAgICAgICAgICAgdHJh
aWxpbmdTcGFjZU9iamVjdCA9IDA7Ci0gICAgICAgICAgICAgICAgcHJldmlvdXNMaW5lQnJva2VD
bGVhbmx5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBsaW5lSW5mby5zZXRQcmV2aW91c0xpbmVC
cm9rZUNsZWFubHkodHJ1ZSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIWlzTGluZUVtcHR5ICYm
IGNsZWFyKQorICAgICAgICAgICAgICAgIGlmICghbGluZUluZm8uaXNFbXB0eSgpICYmIGNsZWFy
KQogICAgICAgICAgICAgICAgICAgICAqY2xlYXIgPSBvLT5zdHlsZSgpLT5jbGVhcigpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZ290byBlbmQ7CkBAIC0xODA2LDcgKzE4MjksNyBAQCBJ
bmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAvLyBJ
ZiB0aGlzIG9iamVjdCBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUsIHdlIG5lZWQgdG8gYmVo
YXZlIGxpa2UgbGlzdCBtYXJrZXJzIGFuZCAKICAgICAgICAgICAgIC8vIHN0YXJ0IGlnbm9yaW5n
IHNwYWNlcy4KICAgICAgICAgICAgIGlmIChpbmxpbmVGbG93UmVxdWlyZXNMaW5lQm94KGZsb3dC
b3gpKSB7Ci0gICAgICAgICAgICAgICAgaXNMaW5lRW1wdHkgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBsaW5lSW5mby5zZXRFbXB0eShmYWxzZSk7CiAgICAgICAgICAgICAgICAgaWYgKGlnbm9y
aW5nU3BhY2VzKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nU3BhY2VPYmplY3QgPSAw
OwogICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ1Bvc2l0aW9uZWRCb3hlcy5jbGVhcigpOwpA
QCAtMTgzNSw3ICsxODU4LDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0
TGluZQogICAgICAgICAgICAgaWYgKGlnbm9yaW5nU3BhY2VzKQogICAgICAgICAgICAgICAgIGFk
ZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBvLCAwKSk7CiAK
LSAgICAgICAgICAgIGlzTGluZUVtcHR5ID0gZmFsc2U7CisgICAgICAgICAgICBsaW5lSW5mby5z
ZXRFbXB0eShmYWxzZSk7CiAgICAgICAgICAgICBpZ25vcmluZ1NwYWNlcyA9IGZhbHNlOwogICAg
ICAgICAgICAgY3VycmVudENoYXJhY3RlcklzU3BhY2UgPSBmYWxzZTsKICAgICAgICAgICAgIGN1
cnJlbnRDaGFyYWN0ZXJJc1dTID0gZmFsc2U7CkBAIC0xODY5LDcgKzE4OTIsNyBAQCBJbmxpbmVJ
dGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICBib29sIGlzU1ZH
VGV4dCA9IHQtPmlzU1ZHSW5saW5lVGV4dCgpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IHQtPnN0eWxlKGZpcnN0TGluZSk7CisgICAgICAgICAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSB0LT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKTsKICAgICAgICAg
ICAgIGlmIChzdHlsZS0+aGFzVGV4dENvbWJpbmUoKSAmJiBvLT5pc0NvbWJpbmVUZXh0KCkpCiAg
ICAgICAgICAgICAgICAgdG9SZW5kZXJDb21iaW5lVGV4dChvKS0+Y29tYmluZVRleHQoKTsKIApA
QCAtMTkxMiw3ICsxOTM1LDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0
TGluZQogICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlID0gYyA9PSAnICcg
fHwgYyA9PSAnXHQnIHx8ICghcHJlc2VydmVOZXdsaW5lICYmIChjID09ICdcbicpKTsKIAogICAg
ICAgICAgICAgICAgIGlmICghY29sbGFwc2VXaGl0ZVNwYWNlIHx8ICFjdXJyZW50Q2hhcmFjdGVy
SXNTcGFjZSkKLSAgICAgICAgICAgICAgICAgICAgaXNMaW5lRW1wdHkgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgbGluZUluZm8uc2V0RW1wdHkoZmFsc2UpOwogCiAgICAgICAgICAgICAg
ICAgaWYgKGMgPT0gc29mdEh5cGhlbiAmJiBhdXRvV3JhcCAmJiAhaHlwaGVuV2lkdGggJiYgc3R5
bGUtPmh5cGhlbnMoKSAhPSBIeXBoZW5zTm9uZSkgewogICAgICAgICAgICAgICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGh5cGhlblN0cmluZyA9IHN0eWxlLT5oeXBoZW5TdHJpbmcoKTsKQEAg
LTE5ODYsNyArMjAwOSw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExp
bmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdpZHRoLmZpdHNPbkxpbmUoY2hh
cldpZHRoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lV2FzVG9vV2lk
ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5tb3ZlVG8o
bywgcG9zLCBuZXh0QnJlYWthYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2tpcFRyYWlsaW5nV2hpdGVzcGFjZShsQnJlYWssIGlzTGluZUVtcHR5LCBwcmV2aW91c0xpbmVC
cm9rZUNsZWFubHkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwVHJhaWxp
bmdXaGl0ZXNwYWNlKGxCcmVhaywgbGluZUluZm8pOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChsaW5lV2FzVG9vV2lkZSB8fCAhd2lkdGguZml0c09uTGluZSgpKSB7CkBAIC0yMDAyLDcg
KzIwMjUsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9pbnRT
dGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbywgcG9zKSk7IC8vIFN0YXJ0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEJy
ZWFrLmluY3JlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91
c0xpbmVCcm9rZUNsZWFubHkgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lSW5mby5zZXRQcmV2aW91c0xpbmVCcm9rZUNsZWFubHkodHJ1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsQnJl
YWsubV9vYmogJiYgbEJyZWFrLm1fcG9zICYmIGxCcmVhay5tX29iai0+aXNUZXh0KCkgJiYgdG9S
ZW5kZXJUZXh0KGxCcmVhay5tX29iaiktPnRleHRMZW5ndGgoKSAmJiB0b1JlbmRlclRleHQobEJy
ZWFrLm1fb2JqKS0+Y2hhcmFjdGVycygpW2xCcmVhay5tX3BvcyAtIDFdID09IHNvZnRIeXBoZW4g
JiYgc3R5bGUtPmh5cGhlbnMoKSAhPSBIeXBoZW5zTm9uZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaHlwaGVuYXRlZCA9IHRydWU7CkBAIC0yMDI2LDcgKzIwNDksNyBAQCBJbmxp
bmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBsQnJlYWsubW92ZVRvKG8sIHBvcywgbmV4
dEJyZWFrYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsQnJlYWsuaW5jcmVtZW50KCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgbGluZUluZm8uc2V0UHJldmlvdXNMaW5lQnJva2VD
bGVhbmx5KHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxCcmVhazsKICAg
ICAgICAgICAgICAgICAgICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>