<?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>66972</bug_id>
          
          <creation_ts>2011-08-25 12:38:23 -0700</creation_ts>
          <short_desc>Factor out the code to get the first non-null RenderTableSection in RenderTable</short_desc>
          <delta_ts>2011-09-08 11:52:14 -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>Tables</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Julien Chaffraix">jchaffraix</assigned_to>
          <cc>darin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>457065</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-25 12:38:23 -0700</bug_when>
    <thetext>Currently there is a lot of duplication in the table code when it comes to finding the first non-null section on the table. To make the code more readable, I propose to move the share this code.

While at it, I changed the signature of sectionAbove / sectionBelow to be more readable as it was easy to misunderstand what the boolean was about.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457092</commentid>
    <comment_count>1</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-25 13:16:43 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Currently there is a lot of duplication in the table code when it comes to finding the first non-null section on the table. To make the code more readable, I propose to move the share this code.

I meant moving the code to some shared location. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457100</commentid>
    <comment_count>2</comment_count>
      <attachid>105235</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-25 13:22:10 -0700</bug_when>
    <thetext>Created attachment 105235
Proposed refactoring: add 2 methods and migrate call sites to use them. Added some FIXMEs to cover the accessibility code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457132</commentid>
    <comment_count>3</comment_count>
      <attachid>105235</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-25 14:17:07 -0700</bug_when>
    <thetext>Comment on attachment 105235
Proposed refactoring: add 2 methods and migrate call sites to use them. Added some FIXMEs to cover the accessibility code.

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

Since this is only refactoring, I’m going to say review- even though my comments are editorial and stylistic rather than substantive.

&gt; Source/WebCore/rendering/RenderTable.h:147
&gt; +    // This method can return 0.

The word “method” is not a C++ term and should not be used to refer to member functions. You should just say “function”.

I also think that if we have this comment, it should have more information. I’d suggest:

    // Returns 0 if the table has no sections.

&gt; Source/WebCore/rendering/RenderTable.h:148
&gt; +    RenderTableSection* firstNonNullSection() const

The name for this should probably be firstSection(). I don’t think having “non-null” in the name is helpful.

It’s annoying that the functions that iterate forward and backward are called “above” and “below” but the one that starts is called “first”. I think it should be first/next/previous or top/above/below.

Even if we want this inlined, I think it would be easier to read the class if the function body was outside the class definition. It can be later in the header, after the class definition, with an explicit inline keyword.

&gt; Source/WebCore/rendering/RenderTable.h:154
&gt; +        if (header())
&gt; +            return header();
&gt; +        if (firstBody())
&gt; +            return firstBody();
&gt; +        return footer();

I think it would be clearer to use the data members directly rather than calling functions.

&gt; Source/WebCore/rendering/RenderTable.h:157
&gt; +    // This method can return 0.

I’d suggest:

    // Returns 0 if the table has no non-empty sections.

&gt; Source/WebCore/rendering/RenderTable.h:158
&gt; +    RenderTableSection* firstNonNullSectionWithRows() const;

Elsewhere in this patch, we call sections without rows “empty sections”. I think the name for this should be firstNonEmptySection().

&gt; Source/WebCore/rendering/RenderTable.h:200
&gt; +    enum SkipEmptySectionsValue { SkipEmptySections, DoNotSkipEmptySections };

Normally I prefer to put these kinds of enums at the namespace level even if they are used in only one class. Otherwise, the class qualifier can make call sites look unpleasant. And the risk of conflict without our own namespace is low.

Normally it’s better to have the false value first, then the true value. That way even if someone uses enum as a boolean we get the correct behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457165</commentid>
    <comment_count>4</comment_count>
      <attachid>105235</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-25 15:07:23 -0700</bug_when>
    <thetext>Comment on attachment 105235
Proposed refactoring: add 2 methods and migrate call sites to use them. Added some FIXMEs to cover the accessibility code.

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

Thanks for the review, the other points will be taken care of.

&gt;&gt; Source/WebCore/rendering/RenderTable.h:147
&gt;&gt; +    // This method can return 0.
&gt; 
&gt; The word “method” is not a C++ term and should not be used to refer to member functions. You should just say “function”.
&gt; 
&gt; I also think that if we have this comment, it should have more information. I’d suggest:
&gt; 
&gt;     // Returns 0 if the table has no sections.

Technically &quot;method&quot; is an Object-Oriented Programming concept that could apply to C++ as well as any object-oriented language (unless I missed something when I learned to OOP). It&apos;s the second time you point this out and technically I don&apos;t see the problem with this difference. Could you clarify why you think this is likely a problem? (note that I don&apos;t mind the switch, just would like to learn what is the rationale about that for the next time)

&gt;&gt; Source/WebCore/rendering/RenderTable.h:148
&gt;&gt; +    RenderTableSection* firstNonNullSection() const
&gt; 
&gt; The name for this should probably be firstSection(). I don’t think having “non-null” in the name is helpful.
&gt; 
&gt; It’s annoying that the functions that iterate forward and backward are called “above” and “below” but the one that starts is called “first”. I think it should be first/next/previous or top/above/below.
&gt; 
&gt; Even if we want this inlined, I think it would be easier to read the class if the function body was outside the class definition. It can be later in the header, after the class definition, with an explicit inline keyword.

Good point, I wondered about the meaningfulness of using spaciality in the name. However the rest of the code follows the same pattern (borders or padding for example) even if top would not be the top due to some flipping.

&gt;&gt; Source/WebCore/rendering/RenderTable.h:200
&gt;&gt; +    enum SkipEmptySectionsValue { SkipEmptySections, DoNotSkipEmptySections };
&gt; 
&gt; Normally I prefer to put these kinds of enums at the namespace level even if they are used in only one class. Otherwise, the class qualifier can make call sites look unpleasant. And the risk of conflict without our own namespace is low.
&gt; 
&gt; Normally it’s better to have the false value first, then the true value. That way even if someone uses enum as a boolean we get the correct behavior.

Make sense to move it to the WebCore namespace.

We normally do not expect people to actually use them as boolean - which would be a point for keeping it this way - but I will side with you as it is dangerous to leave it as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457254</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-25 16:40:10 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Could you clarify why you think this is likely a problem?

Probably not in a way that would convince you.

I believe method is the wrong term, even though you are comfortable using it. Function is the the one used by C++ programmers and specifications in my experience.

I don’t want to use both terms in our code. I suggest we consistently call these functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457274</commentid>
    <comment_count>6</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-25 17:13:26 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Could you clarify why you think this is likely a problem?
&gt; 
&gt; Probably not in a way that would convince you.
&gt; 
&gt; I believe method is the wrong term, even though you are comfortable using it. Function is the the one used by C++ programmers and specifications in my experience.

It makes sense even if we disagree on the core. This will be changed as requested.

&gt; I don’t want to use both terms in our code. I suggest we consistently call these functions.

Agreed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457281</commentid>
    <comment_count>7</comment_count>
      <attachid>105280</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-25 17:24:57 -0700</bug_when>
    <thetext>Created attachment 105280
Version 2: Taking Darin&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462857</commentid>
    <comment_count>8</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-09-06 14:32:12 -0700</bug_when>
    <thetext>Darin, review ping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463422</commentid>
    <comment_count>9</comment_count>
      <attachid>105280</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-07 10:24:57 -0700</bug_when>
    <thetext>Comment on attachment 105280
Version 2: Taking Darin&apos;s comments.

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

&gt; Source/WebCore/accessibility/AccessibilityTable.cpp:302
&gt; +    // FIXME: Looks like this should use topSection() as it could skip some cases.

That comment is good, but seems a bit cryptic. Could you be a little more specific?

&gt; Source/WebCore/accessibility/AccessibilityTable.cpp:470
&gt; +    // FIXME: Looks like this should use topSection() as it could skip some cases.

Ditto.

&gt; Source/WebCore/accessibility/AccessibilityTableCell.cpp:116
&gt; +    // FIXME: Looks like this should use topSection() as it could miss some cases.

Ditto.

&gt; Source/WebCore/rendering/RenderTable.cpp:810
&gt; +        const RenderTableSection* topNonEmptySection = this-&gt;topNonEmptySection();
&gt; +        if (topNonEmptySection) {

It would be nicer to define this inside the if.

&gt; Source/WebCore/rendering/RenderTable.cpp:865
&gt; +        const RenderTableSection* topNonEmptySection = this-&gt;topNonEmptySection();
&gt; +        if (topNonEmptySection) {

It would be nicer to define this inside the if.

&gt; Source/WebCore/rendering/RenderTable.cpp:921
&gt; +    RenderTableSection* topSection = this-&gt;topSection();
&gt;      if (topSection) {

It would be nicer to define this inside the if.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463545</commentid>
    <comment_count>10</comment_count>
      <attachid>105280</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-09-07 11:58:40 -0700</bug_when>
    <thetext>Comment on attachment 105280
Version 2: Taking Darin&apos;s comments.

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityTable.cpp:302
&gt;&gt; +    // FIXME: Looks like this should use topSection() as it could skip some cases.
&gt; 
&gt; That comment is good, but seems a bit cryptic. Could you be a little more specific?

How about:

// FIXME: This line should use RenderTable::topSection() as it would skip an table with just a tfoot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463650</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-07 14:23:27 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; // FIXME: This line should use RenderTable::topSection() as it would skip an table with just a tfoot.

I’d say it like this:

    // FIXME: This will skip a table with just a tfoot. Should fix by using RenderTable::topSection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463660</commentid>
    <comment_count>12</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-09-07 14:37:18 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; // FIXME: This line should use RenderTable::topSection() as it would skip an table with just a tfoot.
&gt; 
&gt; I’d say it like this:
&gt; 
&gt;     // FIXME: This will skip a table with just a tfoot. Should fix by using RenderTable::topSection.

Fair enough. Thanks Darin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463661</commentid>
    <comment_count>13</comment_count>
      <attachid>106639</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-09-07 14:37:59 -0700</bug_when>
    <thetext>Created attachment 106639
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464220</commentid>
    <comment_count>14</comment_count>
      <attachid>106639</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 11:52:09 -0700</bug_when>
    <thetext>Comment on attachment 106639
Patch for landing

Clearing flags on attachment: 106639

Committed r94776: &lt;http://trac.webkit.org/changeset/94776&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464221</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 11:52:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105235</attachid>
            <date>2011-08-25 13:22:10 -0700</date>
            <delta_ts>2011-08-25 17:24:54 -0700</delta_ts>
            <desc>Proposed refactoring: add 2 methods and migrate call sites to use them. Added some FIXMEs to cover the accessibility code.</desc>
            <filename>bug-66972-20110825132209.patch</filename>
            <type>text/plain</type>
            <size>14663</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM2MzgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNWRkNGUwMDA0YjMxMjA2
ZmIyNTE3YjFhM2VkYTBlZjBmODllZjY1Li41NzllYjI3MTNkNzU2NTk3MjQ5ODFmMmViZDBjZWZj
MDc0ZjMzODU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMDgtMjUgIEp1bGll
biBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmFjdG9yIG91
dCB0aGUgY29kZSB0byBnZXQgdGhlIGZpcnN0IG5vbi1udWxsIFJlbmRlclRhYmxlU2VjdGlvbiBp
biBSZW5kZXJUYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjY5NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZWZhY3RvcmluZyBvbmx5LCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxGb3JDb2x1bW5BbmRSb3cpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpyb3dJbmRleFJhbmdlKToKKyAgICAgICAgVXBkYXRl
ZCB0aG9zZSBmb3IgdGhlIHNpZ25hdHVyZSBjaGFuZ2UgaW4gc2VjdGlvbkJlbG93LiBBbHNvIGFk
ZGVkCisgICAgICAgIGEgRklYTUUgd2hlcmUgZmlyc3ROb25OdWxsU2VjdGlvbiBzaG91bGQgYmUg
dXNlZCBpbnN0ZWFkIG9mIGl0ZXJhdGluZworICAgICAgICBvdmVyIHRoZSBzZWN0aW9uIChhbmQg
bGlrZWx5IG1pc3Npbmcgc29tZSBjb3JuZXIgY2FzZXMpLgorCisgICAgICAgICogcmVuZGVyaW5n
L0ZpeGVkVGFibGVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rml4ZWRUYWJsZUxheW91
dDo6Y2FsY1dpZHRoQXJyYXkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlclN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjYWxjQm9yZGVyRW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlOjpvdXRlckJvcmRlckJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZTo6c2VjdGlvbkFib3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
OjpzZWN0aW9uQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmZpcnN0TGlu
ZUJveEJhc2VsaW5lKToKKyAgICAgICAgVXBkYXRlZCBhbGwgdGhvc2UgbWV0aG9kcyB0byB1c2Ug
dGhlIG5ld2x5IGFkZGVkIG1ldGhvZHMuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmZpcnN0Tm9uTnVsbFNl
Y3Rpb25XaXRoUm93cyk6IE5ld2x5IGFkZGVkIG1ldGhvZAorICAgICAgICB0aGF0IHJldHVybnMg
dGhlIGZpcnN0IG5vbiBudWxsIHNlY3Rpb24gb2YgdGhlIHRhYmxlIHRoYXQgaGFzIGF0IGxlYXN0
IGEKKyAgICAgICAgcm93LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2VsbEFi
b3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjZWxsQmVsb3cpOgorICAgICAg
ICBVcGRhdGUgdGhlIHNpZ25hdHVyZSBvZiB0aG9zZSAyIG1ldGhvZHMgdG8gdGFrZSBhbiBlbnVt
IGFzIGl0IG1ha2VzIHRoZQorICAgICAgICByZXN0IG9mIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlOjpmaXJzdE5vbk51bGxTZWN0aW9uKTogTmV3bHkgYWRkZWQgbWV0aG9kIHRv
IHJldHVybgorICAgICAgICB0aGUgZmlyc3Qgbm9uIG51bGwgc2VjdGlvbiBpbiB0aGUgdGFibGUu
CisKIDIwMTEtMDgtMjMgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5MzQ1Mi4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAppbmRleCA2YTAxODNk
ZTkyZDgwYmQ5ZDBmMzU3ZGIzYjVhZWExOTFkYWJhY2NiLi45ZWQ0MzExZWY5YmVkOWQ2OWIzZjYz
MTIxNGNlMTQyOWVhNjA4ZmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCkBAIC0yOTksNiArMjk5LDcgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKCkKIAogICAgIC8vIGdvIHRocm91Z2ggYWxsIHRo
ZSBhdmFpbGFibGUgc2VjdGlvbnMgdG8gcHVsbCBvdXQgdGhlIHJvd3MKICAgICAvLyBhbmQgYWRk
IHRoZW0gYXMgY2hpbGRyZW4KKyAgICAvLyBGSVhNRTogTG9va3MgbGlrZSB0aGlzIHNob3VsZCB1
c2UgZmlyc3ROb25FbXB0eVNlY3Rpb24oKSBhcyBpdCBjb3VsZCBza2lwIHNvbWUgY2FzZXMuCiAg
ICAgUmVuZGVyVGFibGVTZWN0aW9uKiB0YWJsZVNlY3Rpb24gPSB0YWJsZS0+aGVhZGVyKCk7CiAg
ICAgaWYgKCF0YWJsZVNlY3Rpb24pCiAgICAgICAgIHRhYmxlU2VjdGlvbiA9IHRhYmxlLT5maXJz
dEJvZHkoKTsKQEAgLTM0Myw3ICszNDQsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZTo6YWRk
Q2hpbGRyZW4oKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB0
YWJsZVNlY3Rpb24gPSB0YWJsZS0+c2VjdGlvbkJlbG93KHRhYmxlU2VjdGlvbiwgdHJ1ZSk7Cisg
ICAgICAgIHRhYmxlU2VjdGlvbiA9IHRhYmxlLT5zZWN0aW9uQmVsb3codGFibGVTZWN0aW9uLCBS
ZW5kZXJUYWJsZTo6U2tpcEVtcHR5U2VjdGlvbnMpOwogICAgIH0KICAgICAKICAgICAvLyBtYWtl
IHRoZSBjb2x1bW5zIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZmlyc3Qg
Ym9keQpAQCAtNDY2LDYgKzQ2Nyw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIEFjY2Vzc2li
aWxpdHlUYWJsZTo6Y2VsbEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCBjb2x1bW4sCiAgICAgdXBk
YXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwogICAgIAogICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9
IHRvUmVuZGVyVGFibGUobV9yZW5kZXJlcik7CisgICAgLy8gRklYTUU6IExvb2tzIGxpa2UgdGhp
cyBzaG91bGQgdXNlIGZpcnN0Tm9uRW1wdHlTZWN0aW9uKCkgYXMgaXQgY291bGQgc2tpcCBzb21l
IGNhc2VzLgogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogdGFibGVTZWN0aW9uID0gdGFibGUtPmhl
YWRlcigpOwogICAgIGlmICghdGFibGVTZWN0aW9uKQogICAgICAgICB0YWJsZVNlY3Rpb24gPSB0
YWJsZS0+Zmlyc3RCb2R5KCk7CkBAIC01MTcsNyArNTE5LDcgQEAgQWNjZXNzaWJpbGl0eVRhYmxl
Q2VsbCogQWNjZXNzaWJpbGl0eVRhYmxlOjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNv
bHVtbiwKICAgICAgICAgLy8gd2UgZGlkbid0IGZpbmQgYW55dGhpbmcgYmV0d2VlbiB0aGUgcm93
cyB3ZSBzaG91bGQgaGF2ZQogICAgICAgICBpZiAocm93IDwgcm93Q291bnQpCiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgdGFibGVTZWN0aW9uID0gdGFibGUtPnNlY3Rpb25CZWxvdyh0YWJs
ZVNlY3Rpb24sIHRydWUpOyAgICAgICAgCisgICAgICAgIHRhYmxlU2VjdGlvbiA9IHRhYmxlLT5z
ZWN0aW9uQmVsb3codGFibGVTZWN0aW9uLCBSZW5kZXJUYWJsZTo6U2tpcEVtcHR5U2VjdGlvbnMp
OwogICAgIH0KICAgICAKICAgICBpZiAoIWNlbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAppbmRleCA3YWQ2MDYz
MzZiNjE3YzNlNzRiZTAzNzBkOTFhNmM5ZmI4ZDJiZTliLi5jZGI4MTk2MTQ1NjU1ODc1NWYyMjQ0
NWJhNWEwZjliNWI3MDhhMmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAKQEAgLTExMiw3ICsxMTIsOCBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnJvd0luZGV4UmFuZ2UocGFpcjxpbnQsIGludD4m
IHJvd1JhbmdlKQogICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHJlbmRlckNlbGwtPnRhYmxlKCk7
CiAgICAgaWYgKCF0YWJsZSB8fCAhc2VjdGlvbikKICAgICAgICAgcmV0dXJuOwotICAgIAorCisg
ICAgLy8gRklYTUU6IExvb2tzIGxpa2UgdGhpcyBzaG91bGQgdXNlIGZpcnN0Tm9uRW1wdHlTZWN0
aW9uKCkgYXMgaXQgY291bGQgbWlzcyBzb21lIGNhc2VzLgogICAgIFJlbmRlclRhYmxlU2VjdGlv
biogdGFibGVTZWN0aW9uID0gdGFibGUtPmhlYWRlcigpOwogICAgIGlmICghdGFibGVTZWN0aW9u
KQogICAgICAgICB0YWJsZVNlY3Rpb24gPSB0YWJsZS0+Zmlyc3RCb2R5KCk7CkBAIC0xMjIsNyAr
MTIzLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpyb3dJbmRleFJhbmdlKHBhaXI8
aW50LCBpbnQ+JiByb3dSYW5nZSkKICAgICAgICAgaWYgKHRhYmxlU2VjdGlvbiA9PSBzZWN0aW9u
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHJvd09mZnNldCArPSB0YWJsZVNlY3Rpb24t
Pm51bVJvd3MoKTsKLSAgICAgICAgdGFibGVTZWN0aW9uID0gdGFibGUtPnNlY3Rpb25CZWxvdyh0
YWJsZVNlY3Rpb24sIHRydWUpOyAKKyAgICAgICAgdGFibGVTZWN0aW9uID0gdGFibGUtPnNlY3Rp
b25CZWxvdyh0YWJsZVNlY3Rpb24sIFJlbmRlclRhYmxlOjpTa2lwRW1wdHlTZWN0aW9ucyk7CiAg
ICAgfQogCiAgICAgcm93UmFuZ2UuZmlyc3QgKz0gcm93T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCmluZGV4IGRlMDc5NmU1YzFhZDNhMmNm
MzI2ODczODJhMDQ4YjJlYTNkMGM2MWQuLmExNGEwNDhmMTY0NGEyYzIzYWFjZjI0YTgxZDZhN2I5
ZjQyYTNlNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxl
TGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91
dC5jcHAKQEAgLTEzOSwxMyArMTM5LDcgQEAgaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0
aEFycmF5KGludCkKICAgICB9CiAKICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGZpcnN0IHJvdyBp
biBjYXNlIHNvbWUgYXJlIHVuc3BlY2lmaWVkLgotICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2Vj
dGlvbiA9IG1fdGFibGUtPmhlYWRlcigpOwotICAgIGlmICghc2VjdGlvbikKLSAgICAgICAgc2Vj
dGlvbiA9IG1fdGFibGUtPmZpcnN0Qm9keSgpOwotICAgIGlmICghc2VjdGlvbikKLSAgICAgICAg
c2VjdGlvbiA9IG1fdGFibGUtPmZvb3RlcigpOwotICAgIGlmIChzZWN0aW9uICYmICFzZWN0aW9u
LT5udW1Sb3dzKCkpCi0gICAgICAgIHNlY3Rpb24gPSBtX3RhYmxlLT5zZWN0aW9uQmVsb3coc2Vj
dGlvbiwgdHJ1ZSk7CisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gbV90YWJsZS0+
Zmlyc3ROb25OdWxsU2VjdGlvbldpdGhSb3dzKCk7CiAgICAgaWYgKHNlY3Rpb24pIHsKICAgICAg
ICAgaW50IGNDb2wgPSAwOwogICAgICAgICBSZW5kZXJPYmplY3QqIGZpcnN0Um93ID0gc2VjdGlv
bi0+Zmlyc3RDaGlsZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAK
aW5kZXggODkyM2ZmOWNjNjI1NzRiZmNkNWIxZDRiM2NjZmQzZDM5NzhlNjNjNy4uYzkyMWYyYzRj
N2IzMDk4MzRmMzU3MTAxZDAxN2RmYzg2ZGY3ZjY4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuY3BwCkBAIC0zNjgsNyArMzY4LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6
bGF5b3V0KCkKICAgICAgICAgc2VjdGlvbkxvZ2ljYWxMZWZ0ICs9IHN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IHBhZGRpbmdTdGFydCgpIDogcGFkZGluZ0VuZCgpOwogCiAgICAg
Ly8gcG9zaXRpb24gdGhlIHRhYmxlIHNlY3Rpb25zCi0gICAgUmVuZGVyVGFibGVTZWN0aW9uKiBz
ZWN0aW9uID0gbV9oZWFkID8gbV9oZWFkIDogKG1fZmlyc3RCb2R5ID8gbV9maXJzdEJvZHkgOiBt
X2Zvb3QpOworICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IGZpcnN0Tm9uTnVsbFNl
Y3Rpb24oKTsKICAgICB3aGlsZSAoc2VjdGlvbikgewogICAgICAgICBpZiAoIXNlY3Rpb25Nb3Zl
ZCAmJiBzZWN0aW9uLT5sb2dpY2FsVG9wKCkgIT0gbG9naWNhbEhlaWdodCgpKSB7CiAgICAgICAg
ICAgICBzZWN0aW9uTW92ZWQgPSB0cnVlOwpAQCAtNTkxLDYgKzU5MSwxNCBAQCB2b2lkIFJlbmRl
clRhYmxlOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgc2V0UHJlZmVycmVk
TG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAorUmVuZGVyVGFibGVTZWN0aW9uKiBSZW5k
ZXJUYWJsZTo6Zmlyc3ROb25OdWxsU2VjdGlvbldpdGhSb3dzKCkgY29uc3QKK3sKKyAgICBSZW5k
ZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSBmaXJzdE5vbk51bGxTZWN0aW9uKCk7CisgICAgaWYg
KHNlY3Rpb24gJiYgIXNlY3Rpb24tPm51bVJvd3MoKSkKKyAgICAgICAgc2VjdGlvbiA9IHNlY3Rp
b25CZWxvdyhzZWN0aW9uLCBTa2lwRW1wdHlTZWN0aW9ucyk7CisgICAgcmV0dXJuIHNlY3Rpb247
Cit9CisKIHZvaWQgUmVuZGVyVGFibGU6OnNwbGl0Q29sdW1uKGludCBwb3MsIGludCBmaXJzdFNw
YW4pCiB7CiAgICAgLy8gd2UgbmVlZCB0byBhZGQgYSBuZXcgY29sdW1uU3RydWN0CkBAIC03OTgs
MTAgKzgwNiw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGU6OmNhbGNCb3JkZXJTdGFydCgpIGNv
bnN0CiAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oYm9yZGVy
V2lkdGgsIGdiLndpZHRoKCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSZW5kZXJU
YWJsZVNlY3Rpb24qIGZpcnN0Tm9uRW1wdHlTZWN0aW9uID0gbV9oZWFkID8gbV9oZWFkIDogKG1f
Zmlyc3RCb2R5ID8gbV9maXJzdEJvZHkgOiBtX2Zvb3QpOwotICAgICAgICBpZiAoZmlyc3ROb25F
bXB0eVNlY3Rpb24gJiYgIWZpcnN0Tm9uRW1wdHlTZWN0aW9uLT5udW1Sb3dzKCkpCi0gICAgICAg
ICAgICBmaXJzdE5vbkVtcHR5U2VjdGlvbiA9IHNlY3Rpb25CZWxvdyhmaXJzdE5vbkVtcHR5U2Vj
dGlvbiwgdHJ1ZSk7Ci0gICAgICAgIAorICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIGZpcnN0
Tm9uRW1wdHlTZWN0aW9uID0gZmlyc3ROb25OdWxsU2VjdGlvbldpdGhSb3dzKCk7CiAgICAgICAg
IGlmIChmaXJzdE5vbkVtcHR5U2VjdGlvbikgewogICAgICAgICAgICAgY29uc3QgQm9yZGVyVmFs
dWUmIHNiID0gZmlyc3ROb25FbXB0eVNlY3Rpb24tPnN0eWxlKCktPmJvcmRlclN0YXJ0KCk7CiAg
ICAgICAgICAgICBpZiAoc2Iuc3R5bGUoKSA9PSBCSElEREVOKQpAQCAtODU2LDEwICs4NjEsNyBA
QCBMYXlvdXRVbml0IFJlbmRlclRhYmxlOjpjYWxjQm9yZGVyRW5kKCkgY29uc3QKICAgICAgICAg
ICAgICAgICBib3JkZXJXaWR0aCA9IG1heDxMYXlvdXRVbml0Pihib3JkZXJXaWR0aCwgZ2Iud2lk
dGgoKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiog
Zmlyc3ROb25FbXB0eVNlY3Rpb24gPSBtX2hlYWQgPyBtX2hlYWQgOiAobV9maXJzdEJvZHkgPyBt
X2ZpcnN0Qm9keSA6IG1fZm9vdCk7Ci0gICAgICAgIGlmIChmaXJzdE5vbkVtcHR5U2VjdGlvbiAm
JiAhZmlyc3ROb25FbXB0eVNlY3Rpb24tPm51bVJvd3MoKSkKLSAgICAgICAgICAgIGZpcnN0Tm9u
RW1wdHlTZWN0aW9uID0gc2VjdGlvbkJlbG93KGZpcnN0Tm9uRW1wdHlTZWN0aW9uLCB0cnVlKTsK
LSAgICAgICAgCisgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogZmlyc3ROb25FbXB0eVNlY3Rp
b24gPSBmaXJzdE5vbk51bGxTZWN0aW9uV2l0aFJvd3MoKTsKICAgICAgICAgaWYgKGZpcnN0Tm9u
RW1wdHlTZWN0aW9uKSB7CiAgICAgICAgICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgc2IgPSBmaXJz
dE5vbkVtcHR5U2VjdGlvbi0+c3R5bGUoKS0+Ym9yZGVyRW5kKCk7CiAgICAgICAgICAgICBpZiAo
c2Iuc3R5bGUoKSA9PSBCSElEREVOKQpAQCAtOTE1LDE1ICs5MTcsNyBAQCBMYXlvdXRVbml0IFJl
bmRlclRhYmxlOjpvdXRlckJvcmRlckJlZm9yZSgpIGNvbnN0CiAgICAgaWYgKCFjb2xsYXBzZUJv
cmRlcnMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgTGF5b3V0VW5pdCBib3JkZXJXaWR0aCA9
IDA7Ci0gICAgUmVuZGVyVGFibGVTZWN0aW9uKiB0b3BTZWN0aW9uOwotICAgIGlmIChtX2hlYWQp
Ci0gICAgICAgIHRvcFNlY3Rpb24gPSBtX2hlYWQ7Ci0gICAgZWxzZSBpZiAobV9maXJzdEJvZHkp
Ci0gICAgICAgIHRvcFNlY3Rpb24gPSBtX2ZpcnN0Qm9keTsKLSAgICBlbHNlIGlmIChtX2Zvb3Qp
Ci0gICAgICAgIHRvcFNlY3Rpb24gPSBtX2Zvb3Q7Ci0gICAgZWxzZQotICAgICAgICB0b3BTZWN0
aW9uID0gMDsKKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHRvcFNlY3Rpb24gPSBmaXJzdE5vbk51
bGxTZWN0aW9uKCk7CiAgICAgaWYgKHRvcFNlY3Rpb24pIHsKICAgICAgICAgYm9yZGVyV2lkdGgg
PSB0b3BTZWN0aW9uLT5vdXRlckJvcmRlckJlZm9yZSgpOwogICAgICAgICBpZiAoYm9yZGVyV2lk
dGggPCAwKQpAQCAtMTAyMSw3ICsxMDE1LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6b3V0
ZXJCb3JkZXJFbmQoKSBjb25zdAogICAgIHJldHVybiBib3JkZXJXaWR0aDsKIH0KIAotUmVuZGVy
VGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZTo6c2VjdGlvbkFib3ZlKGNvbnN0IFJlbmRlclRhYmxl
U2VjdGlvbiogc2VjdGlvbiwgYm9vbCBza2lwRW1wdHlTZWN0aW9ucykgY29uc3QKK1JlbmRlclRh
YmxlU2VjdGlvbiogUmVuZGVyVGFibGU6OnNlY3Rpb25BYm92ZShjb25zdCBSZW5kZXJUYWJsZVNl
Y3Rpb24qIHNlY3Rpb24sIFNraXBFbXB0eVNlY3Rpb25zVmFsdWUgc2tpcEVtcHR5U2VjdGlvbnMp
IGNvbnN0CiB7CiAgICAgcmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpOwogCkBAIC0xMDMwLDE2ICsx
MDI0LDE2IEBAIFJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGU6OnNlY3Rpb25BYm92ZShj
b25zdCBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24sCiAKICAgICBSZW5kZXJPYmplY3QqIHBy
ZXZTZWN0aW9uID0gc2VjdGlvbiA9PSBtX2Zvb3QgPyBsYXN0Q2hpbGQoKSA6IHNlY3Rpb24tPnBy
ZXZpb3VzU2libGluZygpOwogICAgIHdoaWxlIChwcmV2U2VjdGlvbikgewotICAgICAgICBpZiAo
cHJldlNlY3Rpb24tPmlzVGFibGVTZWN0aW9uKCkgJiYgcHJldlNlY3Rpb24gIT0gbV9oZWFkICYm
IHByZXZTZWN0aW9uICE9IG1fZm9vdCAmJiAoIXNraXBFbXB0eVNlY3Rpb25zIHx8IHRvUmVuZGVy
VGFibGVTZWN0aW9uKHByZXZTZWN0aW9uKS0+bnVtUm93cygpKSkKKyAgICAgICAgaWYgKHByZXZT
ZWN0aW9uLT5pc1RhYmxlU2VjdGlvbigpICYmIHByZXZTZWN0aW9uICE9IG1faGVhZCAmJiBwcmV2
U2VjdGlvbiAhPSBtX2Zvb3QgJiYgKHNraXBFbXB0eVNlY3Rpb25zID09IERvTm90U2tpcEVtcHR5
U2VjdGlvbnMgfHwgdG9SZW5kZXJUYWJsZVNlY3Rpb24ocHJldlNlY3Rpb24pLT5udW1Sb3dzKCkp
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHByZXZTZWN0aW9uID0gcHJldlNlY3Rpb24t
PnByZXZpb3VzU2libGluZygpOwogICAgIH0KLSAgICBpZiAoIXByZXZTZWN0aW9uICYmIG1faGVh
ZCAmJiAoIXNraXBFbXB0eVNlY3Rpb25zIHx8IG1faGVhZC0+bnVtUm93cygpKSkKKyAgICBpZiAo
IXByZXZTZWN0aW9uICYmIG1faGVhZCAmJiAoc2tpcEVtcHR5U2VjdGlvbnMgPT0gRG9Ob3RTa2lw
RW1wdHlTZWN0aW9ucyB8fCBtX2hlYWQtPm51bVJvd3MoKSkpCiAgICAgICAgIHByZXZTZWN0aW9u
ID0gbV9oZWFkOwogICAgIHJldHVybiB0b1JlbmRlclRhYmxlU2VjdGlvbihwcmV2U2VjdGlvbik7
CiB9CiAKLVJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGU6OnNlY3Rpb25CZWxvdyhjb25z
dCBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24sIGJvb2wgc2tpcEVtcHR5U2VjdGlvbnMpIGNv
bnN0CitSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjpzZWN0aW9uQmVsb3coY29uc3Qg
UmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uLCBTa2lwRW1wdHlTZWN0aW9uc1ZhbHVlIHNraXBF
bXB0eVNlY3Rpb25zKSBjb25zdAogewogICAgIHJlY2FsY1NlY3Rpb25zSWZOZWVkZWQoKTsKIApA
QCAtMTA0OCwxMSArMTA0MiwxMSBAQCBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjpz
ZWN0aW9uQmVsb3coY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uLAogCiAgICAgUmVu
ZGVyT2JqZWN0KiBuZXh0U2VjdGlvbiA9IHNlY3Rpb24gPT0gbV9oZWFkID8gZmlyc3RDaGlsZCgp
IDogc2VjdGlvbi0+bmV4dFNpYmxpbmcoKTsKICAgICB3aGlsZSAobmV4dFNlY3Rpb24pIHsKLSAg
ICAgICAgaWYgKG5leHRTZWN0aW9uLT5pc1RhYmxlU2VjdGlvbigpICYmIG5leHRTZWN0aW9uICE9
IG1faGVhZCAmJiBuZXh0U2VjdGlvbiAhPSBtX2Zvb3QgJiYgKCFza2lwRW1wdHlTZWN0aW9ucyB8
fCB0b1JlbmRlclRhYmxlU2VjdGlvbihuZXh0U2VjdGlvbiktPm51bVJvd3MoKSkpCisgICAgICAg
IGlmIChuZXh0U2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSAmJiBuZXh0U2VjdGlvbiAhPSBtX2hl
YWQgJiYgbmV4dFNlY3Rpb24gIT0gbV9mb290ICYmIChza2lwRW1wdHlTZWN0aW9ucyAgPT0gRG9O
b3RTa2lwRW1wdHlTZWN0aW9ucyB8fCB0b1JlbmRlclRhYmxlU2VjdGlvbihuZXh0U2VjdGlvbikt
Pm51bVJvd3MoKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbmV4dFNlY3Rpb24gPSBu
ZXh0U2VjdGlvbi0+bmV4dFNpYmxpbmcoKTsKICAgICB9Ci0gICAgaWYgKCFuZXh0U2VjdGlvbiAm
JiBtX2Zvb3QgJiYgKCFza2lwRW1wdHlTZWN0aW9ucyB8fCBtX2Zvb3QtPm51bVJvd3MoKSkpCisg
ICAgaWYgKCFuZXh0U2VjdGlvbiAmJiBtX2Zvb3QgJiYgKHNraXBFbXB0eVNlY3Rpb25zID09IERv
Tm90U2tpcEVtcHR5U2VjdGlvbnMgfHwgbV9mb290LT5udW1Sb3dzKCkpKQogICAgICAgICBuZXh0
U2VjdGlvbiA9IG1fZm9vdDsKICAgICByZXR1cm4gdG9SZW5kZXJUYWJsZVNlY3Rpb24obmV4dFNl
Y3Rpb24pOwogfQpAQCAtMTA3MCw3ICsxMDY0LDcgQEAgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJU
YWJsZTo6Y2VsbEFib3ZlKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2VsbCkgY29uc3QKICAgICAg
ICAgc2VjdGlvbiA9IGNlbGwtPnNlY3Rpb24oKTsKICAgICAgICAgckFib3ZlID0gciAtIDE7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgc2VjdGlvbiA9IHNlY3Rpb25BYm92ZShjZWxsLT5zZWN0aW9u
KCksIHRydWUpOworICAgICAgICBzZWN0aW9uID0gc2VjdGlvbkFib3ZlKGNlbGwtPnNlY3Rpb24o
KSwgU2tpcEVtcHR5U2VjdGlvbnMpOwogICAgICAgICBpZiAoc2VjdGlvbikKICAgICAgICAgICAg
IHJBYm92ZSA9IHNlY3Rpb24tPm51bVJvd3MoKSAtIDE7CiAgICAgfQpAQCAtMTA5Nyw3ICsxMDkx
LDcgQEAgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZTo6Y2VsbEJlbG93KGNvbnN0IFJlbmRl
clRhYmxlQ2VsbCogY2VsbCkgY29uc3QKICAgICAgICAgc2VjdGlvbiA9IGNlbGwtPnNlY3Rpb24o
KTsKICAgICAgICAgckJlbG93ID0gciArIDE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc2VjdGlv
biA9IHNlY3Rpb25CZWxvdyhjZWxsLT5zZWN0aW9uKCksIHRydWUpOworICAgICAgICBzZWN0aW9u
ID0gc2VjdGlvbkJlbG93KGNlbGwtPnNlY3Rpb24oKSwgU2tpcEVtcHR5U2VjdGlvbnMpOwogICAg
ICAgICBpZiAoc2VjdGlvbikKICAgICAgICAgICAgIHJCZWxvdyA9IDA7CiAgICAgfQpAQCAtMTE1
MSwxMCArMTE0NSw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGU6OmZpcnN0TGluZUJveEJhc2Vs
aW5lKCkgY29uc3QKIAogICAgIHJlY2FsY1NlY3Rpb25zSWZOZWVkZWQoKTsKIAotICAgIFJlbmRl
clRhYmxlU2VjdGlvbiogZmlyc3ROb25FbXB0eVNlY3Rpb24gPSBtX2hlYWQgPyBtX2hlYWQgOiAo
bV9maXJzdEJvZHkgPyBtX2ZpcnN0Qm9keSA6IG1fZm9vdCk7Ci0gICAgaWYgKGZpcnN0Tm9uRW1w
dHlTZWN0aW9uICYmICFmaXJzdE5vbkVtcHR5U2VjdGlvbi0+bnVtUm93cygpKQotICAgICAgICBm
aXJzdE5vbkVtcHR5U2VjdGlvbiA9IHNlY3Rpb25CZWxvdyhmaXJzdE5vbkVtcHR5U2VjdGlvbiwg
dHJ1ZSk7Ci0KKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIGZpcnN0Tm9uRW1wdHlTZWN0aW9uID0g
Zmlyc3ROb25OdWxsU2VjdGlvbldpdGhSb3dzKCk7CiAgICAgaWYgKCFmaXJzdE5vbkVtcHR5U2Vj
dGlvbikKICAgICAgICAgcmV0dXJuIC0xOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5oCmluZGV4IDczNTMzOTA5YmM0YmFhNTAyMzlkMWE3ZmY4YmRiYjg5ZmE4N2ZhNmQuLjJk
MmIzMGQ5MWViODhkMDI3MTVmNmQzNGRlZDdlMDYxZTk5YWEzOTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZS5oCkBAIC0xNDQsNiArMTQ0LDE5IEBAIHB1YmxpYzoKICAgICBS
ZW5kZXJUYWJsZVNlY3Rpb24qIGZvb3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9vdDsgfQogICAg
IFJlbmRlclRhYmxlU2VjdGlvbiogZmlyc3RCb2R5KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdEJv
ZHk7IH0KIAorICAgIC8vIFRoaXMgbWV0aG9kIGNhbiByZXR1cm4gMC4KKyAgICBSZW5kZXJUYWJs
ZVNlY3Rpb24qIGZpcnN0Tm9uTnVsbFNlY3Rpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGhlYWRlcigpKQorICAgICAgICAgICAgcmV0dXJuIGhlYWRlcigpOworICAgICAgICBpZiAoZmly
c3RCb2R5KCkpCisgICAgICAgICAgICByZXR1cm4gZmlyc3RCb2R5KCk7CisgICAgICAgIHJldHVy
biBmb290ZXIoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIG1ldGhvZCBjYW4gcmV0dXJuIDAuCisg
ICAgUmVuZGVyVGFibGVTZWN0aW9uKiBmaXJzdE5vbk51bGxTZWN0aW9uV2l0aFJvd3MoKSBjb25z
dDsKKwogICAgIHZvaWQgc3BsaXRDb2x1bW4oaW50IHBvcywgaW50IGZpcnN0U3Bhbik7CiAgICAg
dm9pZCBhcHBlbmRDb2x1bW4oaW50IHNwYW4pOwogICAgIGludCBudW1FZmZDb2xzKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2x1bW5zLnNpemUoKTsgfQpAQCAtMTg0LDggKzE5Nyw5IEBAIHB1YmxpYzoK
ICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiAgICAgfQogCi0gICAgUmVuZGVyVGFibGVT
ZWN0aW9uKiBzZWN0aW9uQWJvdmUoY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiwgYm9vbCBza2lw
RW1wdHlTZWN0aW9ucyA9IGZhbHNlKSBjb25zdDsKLSAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNl
Y3Rpb25CZWxvdyhjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24qLCBib29sIHNraXBFbXB0eVNlY3Rp
b25zID0gZmFsc2UpIGNvbnN0OworICAgIGVudW0gU2tpcEVtcHR5U2VjdGlvbnNWYWx1ZSB7IFNr
aXBFbXB0eVNlY3Rpb25zLCBEb05vdFNraXBFbXB0eVNlY3Rpb25zIH07CisgICAgUmVuZGVyVGFi
bGVTZWN0aW9uKiBzZWN0aW9uQWJvdmUoY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiwgU2tpcEVt
cHR5U2VjdGlvbnNWYWx1ZSA9IERvTm90U2tpcEVtcHR5U2VjdGlvbnMpIGNvbnN0OworICAgIFJl
bmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbkJlbG93KGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbios
IFNraXBFbXB0eVNlY3Rpb25zVmFsdWUgPSBEb05vdFNraXBFbXB0eVNlY3Rpb25zKSBjb25zdDsK
IAogICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbEFib3ZlKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCop
IGNvbnN0OwogICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbEJlbG93KGNvbnN0IFJlbmRlclRhYmxl
Q2VsbCopIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105280</attachid>
            <date>2011-08-25 17:24:57 -0700</date>
            <delta_ts>2011-09-07 14:37:56 -0700</delta_ts>
            <desc>Version 2: Taking Darin&apos;s comments.</desc>
            <filename>bug-66972-20110825172455.patch</filename>
            <type>text/plain</type>
            <size>16700</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM4MjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYTVkZTY4NWM2NTlkYWQ1
MDNhY2RiM2NkYjQzZWZmNDMxNWFhZjhjLi5jZjA2MTUwNzA0M2ViMzg4ZjIyNGRjNmExNzU0YWQ2
NGJhODU2YWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEtMDgtMjUgIEp1bGll
biBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmFjdG9yIG91
dCB0aGUgY29kZSB0byBnZXQgdGhlIGZpcnN0IG5vbi1udWxsIFJlbmRlclRhYmxlU2VjdGlvbiBp
biBSZW5kZXJUYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjY5NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZWZhY3RvcmluZyBvbmx5LCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxGb3JDb2x1bW5BbmRSb3cpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpyb3dJbmRleFJhbmdlKToKKyAgICAgICAgVXBkYXRl
ZCB0aG9zZSBmb3IgdGhlIHNpZ25hdHVyZSBjaGFuZ2UgaW4gc2VjdGlvbkJlbG93LiBBbHNvIGFk
ZGVkCisgICAgICAgIGEgRklYTUUgd2hlcmUgdG9wU2VjdGlvbiBzaG91bGQgYmUgdXNlZCBpbnN0
ZWFkIG9mIGl0ZXJhdGluZworICAgICAgICBvdmVyIHRoZSBzZWN0aW9uIChhbmQgbGlrZWx5IG1p
c3Npbmcgc29tZSBjb3JuZXIgY2FzZXMpLgorCisgICAgICAgICogcmVuZGVyaW5nL0ZpeGVkVGFi
bGVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rml4ZWRUYWJsZUxheW91dDo6Y2FsY1dp
ZHRoQXJyYXkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlclN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlOjpjYWxjQm9yZGVyRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlOjpvdXRlckJvcmRlckJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZTo6c2VjdGlvbkFib3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzZWN0aW9u
QmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmZpcnN0TGluZUJveEJhc2Vs
aW5lKToKKyAgICAgICAgVXBkYXRlZCBhbGwgdGhvc2UgZnVuY3Rpb25zIHRvIHVzZSB0aGUgbmV3
bHkgYWRkZWQgZnVuY3Rpb25zLiBBbHNvIGNoYW5nZWQKKyAgICAgICAgdGhlIHZhcmlhYmxlIG5h
bWVzIHRvIG1hdGNoIHRoZSBmdW5jdGlvbnMuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnRvcE5vbkVtcHR5
U2VjdGlvbik6IE5ld2x5IGFkZGVkIGZ1bmN0aW9uCisgICAgICAgIHRoYXQgcmV0dXJucyB0aGUg
dG9wIG5vbiBudWxsIHNlY3Rpb24gb2YgdGhlIHRhYmxlIHRoYXQgaGFzIGF0IGxlYXN0IGEKKyAg
ICAgICAgcm93LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2VsbEFib3ZlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjZWxsQmVsb3cpOgorICAgICAgICBVcGRh
dGUgdGhlIHNpZ25hdHVyZSBvZiB0aG9zZSAyIGZ1bmN0aW9ucyB0byB0YWtlIGFuIGVudW0gYXMg
aXQgbWFrZXMgdGhlCisgICAgICAgIHJlc3Qgb2YgdGhlIGNvZGUgbW9yZSByZWFkYWJsZS4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGFibGU6OnRvcFNlY3Rpb24pOiBOZXdseSBhZGRlZCBmdW5jdGlvbiB0byByZXR1cm4KKyAg
ICAgICAgdGhlIHRvcCBub24gbnVsbCBzZWN0aW9uIGluIHRoZSB0YWJsZS4KKwogMjAxMS0wOC0y
NSAgSWdvciBPbGl2ZWlyYSAgPGlnb3Iub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAg
ICBSb2xsb3V0IHI5Mzc5OTogQ2F1c2VkIGJhZCBjbGlwcGluZyBvbiB0aGUgYm90dG9tIG9mIHRh
bGwgZ2x5cGhzIGluc2lkZSBhIGJ1dHRvbiBsYWJlbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCmluZGV4IDZhMDE4M2RlOTJkODBi
ZDlkMGYzNTdkYjNiNWFlYTE5MWRhYmFjY2IuLjU5NTA0MzlhZDNkMTlmM2JmMDcxYzNkNTFjNGU5
Nzk2M2YxN2Y4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZS5jcHAKQEAgLTI5OSw2ICsyOTksNyBAQCB2b2lkIEFjY2Vzc2liaWxp
dHlUYWJsZTo6YWRkQ2hpbGRyZW4oKQogCiAgICAgLy8gZ28gdGhyb3VnaCBhbGwgdGhlIGF2YWls
YWJsZSBzZWN0aW9ucyB0byBwdWxsIG91dCB0aGUgcm93cwogICAgIC8vIGFuZCBhZGQgdGhlbSBh
cyBjaGlsZHJlbgorICAgIC8vIEZJWE1FOiBMb29rcyBsaWtlIHRoaXMgc2hvdWxkIHVzZSB0b3BT
ZWN0aW9uKCkgYXMgaXQgY291bGQgc2tpcCBzb21lIGNhc2VzLgogICAgIFJlbmRlclRhYmxlU2Vj
dGlvbiogdGFibGVTZWN0aW9uID0gdGFibGUtPmhlYWRlcigpOwogICAgIGlmICghdGFibGVTZWN0
aW9uKQogICAgICAgICB0YWJsZVNlY3Rpb24gPSB0YWJsZS0+Zmlyc3RCb2R5KCk7CkBAIC0zNDMs
NyArMzQ0LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKCkKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdGFibGVTZWN0aW9uID0gdGFi
bGUtPnNlY3Rpb25CZWxvdyh0YWJsZVNlY3Rpb24sIHRydWUpOworICAgICAgICB0YWJsZVNlY3Rp
b24gPSB0YWJsZS0+c2VjdGlvbkJlbG93KHRhYmxlU2VjdGlvbiwgU2tpcEVtcHR5U2VjdGlvbnMp
OwogICAgIH0KICAgICAKICAgICAvLyBtYWtlIHRoZSBjb2x1bW5zIGJhc2VkIG9uIHRoZSBudW1i
ZXIgb2YgY29sdW1ucyBpbiB0aGUgZmlyc3QgYm9keQpAQCAtNDY2LDYgKzQ2Nyw3IEBAIEFjY2Vz
c2liaWxpdHlUYWJsZUNlbGwqIEFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbEZvckNvbHVtbkFuZFJv
dyh1bnNpZ25lZCBjb2x1bW4sCiAgICAgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwogICAg
IAogICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRvUmVuZGVyVGFibGUobV9yZW5kZXJlcik7Cisg
ICAgLy8gRklYTUU6IExvb2tzIGxpa2UgdGhpcyBzaG91bGQgdXNlIHRvcFNlY3Rpb24oKSBhcyBp
dCBjb3VsZCBza2lwIHNvbWUgY2FzZXMuCiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiB0YWJsZVNl
Y3Rpb24gPSB0YWJsZS0+aGVhZGVyKCk7CiAgICAgaWYgKCF0YWJsZVNlY3Rpb24pCiAgICAgICAg
IHRhYmxlU2VjdGlvbiA9IHRhYmxlLT5maXJzdEJvZHkoKTsKQEAgLTUxNyw3ICs1MTksNyBAQCBB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBBY2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxGb3JDb2x1bW5B
bmRSb3codW5zaWduZWQgY29sdW1uLAogICAgICAgICAvLyB3ZSBkaWRuJ3QgZmluZCBhbnl0aGlu
ZyBiZXR3ZWVuIHRoZSByb3dzIHdlIHNob3VsZCBoYXZlCiAgICAgICAgIGlmIChyb3cgPCByb3dD
b3VudCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB0YWJsZVNlY3Rpb24gPSB0YWJsZS0+
c2VjdGlvbkJlbG93KHRhYmxlU2VjdGlvbiwgdHJ1ZSk7ICAgICAgICAKKyAgICAgICAgdGFibGVT
ZWN0aW9uID0gdGFibGUtPnNlY3Rpb25CZWxvdyh0YWJsZVNlY3Rpb24sIFNraXBFbXB0eVNlY3Rp
b25zKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFjZWxsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAKaW5kZXggN2Fk
NjA2MzM2YjYxN2MzZTc0YmUwMzcwZDkxYTZjOWZiOGQyYmU5Yi4uZDBmMDJiMmZhY2YzZmExMDRh
MDRmMzljNDVlZGMzZjRhNTY4NzMwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCkBAIC0xMTIsNyArMTEyLDgg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpyb3dJbmRleFJhbmdlKHBhaXI8aW50LCBp
bnQ+JiByb3dSYW5nZSkKICAgICBSZW5kZXJUYWJsZSogdGFibGUgPSByZW5kZXJDZWxsLT50YWJs
ZSgpOwogICAgIGlmICghdGFibGUgfHwgIXNlY3Rpb24pCiAgICAgICAgIHJldHVybjsKLSAgICAK
KworICAgIC8vIEZJWE1FOiBMb29rcyBsaWtlIHRoaXMgc2hvdWxkIHVzZSB0b3BTZWN0aW9uKCkg
YXMgaXQgY291bGQgbWlzcyBzb21lIGNhc2VzLgogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogdGFi
bGVTZWN0aW9uID0gdGFibGUtPmhlYWRlcigpOwogICAgIGlmICghdGFibGVTZWN0aW9uKQogICAg
ICAgICB0YWJsZVNlY3Rpb24gPSB0YWJsZS0+Zmlyc3RCb2R5KCk7CkBAIC0xMjIsNyArMTIzLDcg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpyb3dJbmRleFJhbmdlKHBhaXI8aW50LCBp
bnQ+JiByb3dSYW5nZSkKICAgICAgICAgaWYgKHRhYmxlU2VjdGlvbiA9PSBzZWN0aW9uKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIHJvd09mZnNldCArPSB0YWJsZVNlY3Rpb24tPm51bVJv
d3MoKTsKLSAgICAgICAgdGFibGVTZWN0aW9uID0gdGFibGUtPnNlY3Rpb25CZWxvdyh0YWJsZVNl
Y3Rpb24sIHRydWUpOyAKKyAgICAgICAgdGFibGVTZWN0aW9uID0gdGFibGUtPnNlY3Rpb25CZWxv
dyh0YWJsZVNlY3Rpb24sIFNraXBFbXB0eVNlY3Rpb25zKTsKICAgICB9CiAKICAgICByb3dSYW5n
ZS5maXJzdCArPSByb3dPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRml4ZWRUYWJsZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRU
YWJsZUxheW91dC5jcHAKaW5kZXggZGUwNzk2ZTVjMWFkM2EyY2YzMjY4NzM4MmEwNDhiMmVhM2Qw
YzYxZC4uNThiZWRhM2MzY2Y0NGVmMWQ4ODk2Mjg3MjlkMDAyNTcyNTU3ZjI3ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcApAQCAtMTM5LDEzICsx
MzksNyBAQCBpbnQgRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRoQXJyYXkoaW50KQogICAgIH0K
IAogICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgZmlyc3Qgcm93IGluIGNhc2Ugc29tZSBhcmUgdW5z
cGVjaWZpZWQuCi0gICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gbV90YWJsZS0+aGVh
ZGVyKCk7Ci0gICAgaWYgKCFzZWN0aW9uKQotICAgICAgICBzZWN0aW9uID0gbV90YWJsZS0+Zmly
c3RCb2R5KCk7Ci0gICAgaWYgKCFzZWN0aW9uKQotICAgICAgICBzZWN0aW9uID0gbV90YWJsZS0+
Zm9vdGVyKCk7Ci0gICAgaWYgKHNlY3Rpb24gJiYgIXNlY3Rpb24tPm51bVJvd3MoKSkKLSAgICAg
ICAgc2VjdGlvbiA9IG1fdGFibGUtPnNlY3Rpb25CZWxvdyhzZWN0aW9uLCB0cnVlKTsKKyAgICBS
ZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSBtX3RhYmxlLT50b3BOb25FbXB0eVNlY3Rpb24o
KTsKICAgICBpZiAoc2VjdGlvbikgewogICAgICAgICBpbnQgY0NvbCA9IDA7CiAgICAgICAgIFJl
bmRlck9iamVjdCogZmlyc3RSb3cgPSBzZWN0aW9uLT5maXJzdENoaWxkKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAppbmRleCA4OTIzZmY5Y2M2MjU3NGJmY2Q1YjFk
NGIzY2NmZDNkMzk3OGU2M2M3Li4zOGEzZDczNjBhMTY3ZTdkNTBmMDUyMGJkNzZhMTRhM2ZmMmUz
ZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTM2OCw3
ICszNjgsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogICAgICAgICBzZWN0aW9uTG9n
aWNhbExlZnQgKz0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcGFkZGluZ1N0
YXJ0KCkgOiBwYWRkaW5nRW5kKCk7CiAKICAgICAvLyBwb3NpdGlvbiB0aGUgdGFibGUgc2VjdGlv
bnMKLSAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSBtX2hlYWQgPyBtX2hlYWQgOiAo
bV9maXJzdEJvZHkgPyBtX2ZpcnN0Qm9keSA6IG1fZm9vdCk7CisgICAgUmVuZGVyVGFibGVTZWN0
aW9uKiBzZWN0aW9uID0gdG9wU2VjdGlvbigpOwogICAgIHdoaWxlIChzZWN0aW9uKSB7CiAgICAg
ICAgIGlmICghc2VjdGlvbk1vdmVkICYmIHNlY3Rpb24tPmxvZ2ljYWxUb3AoKSAhPSBsb2dpY2Fs
SGVpZ2h0KCkpIHsKICAgICAgICAgICAgIHNlY3Rpb25Nb3ZlZCA9IHRydWU7CkBAIC01OTEsNiAr
NTkxLDE0IEBAIHZvaWQgUmVuZGVyVGFibGU6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KCkKICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCitSZW5k
ZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjp0b3BOb25FbXB0eVNlY3Rpb24oKSBjb25zdAor
eworICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHRvcFNlY3Rpb24oKTsKKyAgICBp
ZiAoc2VjdGlvbiAmJiAhc2VjdGlvbi0+bnVtUm93cygpKQorICAgICAgICBzZWN0aW9uID0gc2Vj
dGlvbkJlbG93KHNlY3Rpb24sIFNraXBFbXB0eVNlY3Rpb25zKTsKKyAgICByZXR1cm4gc2VjdGlv
bjsKK30KKwogdm9pZCBSZW5kZXJUYWJsZTo6c3BsaXRDb2x1bW4oaW50IHBvcywgaW50IGZpcnN0
U3BhbikKIHsKICAgICAvLyB3ZSBuZWVkIHRvIGFkZCBhIG5ldyBjb2x1bW5TdHJ1Y3QKQEAgLTc5
OCwxOSArODA2LDE2IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGU6OmNhbGNCb3JkZXJTdGFydCgp
IGNvbnN0CiAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oYm9y
ZGVyV2lkdGgsIGdiLndpZHRoKCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSZW5k
ZXJUYWJsZVNlY3Rpb24qIGZpcnN0Tm9uRW1wdHlTZWN0aW9uID0gbV9oZWFkID8gbV9oZWFkIDog
KG1fZmlyc3RCb2R5ID8gbV9maXJzdEJvZHkgOiBtX2Zvb3QpOwotICAgICAgICBpZiAoZmlyc3RO
b25FbXB0eVNlY3Rpb24gJiYgIWZpcnN0Tm9uRW1wdHlTZWN0aW9uLT5udW1Sb3dzKCkpCi0gICAg
ICAgICAgICBmaXJzdE5vbkVtcHR5U2VjdGlvbiA9IHNlY3Rpb25CZWxvdyhmaXJzdE5vbkVtcHR5
U2VjdGlvbiwgdHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZmlyc3ROb25FbXB0eVNlY3Rp
b24pIHsKLSAgICAgICAgICAgIGNvbnN0IEJvcmRlclZhbHVlJiBzYiA9IGZpcnN0Tm9uRW1wdHlT
ZWN0aW9uLT5zdHlsZSgpLT5ib3JkZXJTdGFydCgpOworICAgICAgICBjb25zdCBSZW5kZXJUYWJs
ZVNlY3Rpb24qIHRvcE5vbkVtcHR5U2VjdGlvbiA9IHRoaXMtPnRvcE5vbkVtcHR5U2VjdGlvbigp
OworICAgICAgICBpZiAodG9wTm9uRW1wdHlTZWN0aW9uKSB7CisgICAgICAgICAgICBjb25zdCBC
b3JkZXJWYWx1ZSYgc2IgPSB0b3BOb25FbXB0eVNlY3Rpb24tPnN0eWxlKCktPmJvcmRlclN0YXJ0
KCk7CiAgICAgICAgICAgICBpZiAoc2Iuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgICAgICAgICBpZiAoc2Iuc3R5bGUoKSA+IEJISURERU4pCiAg
ICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oYm9yZGVyV2lkdGgs
IHNiLndpZHRoKCkpOwogCi0gICAgICAgICAgICBjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb246OkNl
bGxTdHJ1Y3QmIGNzID0gZmlyc3ROb25FbXB0eVNlY3Rpb24tPmNlbGxBdCgwLCAwKTsKKyAgICAg
ICAgICAgIGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbjo6Q2VsbFN0cnVjdCYgY3MgPSB0b3BOb25F
bXB0eVNlY3Rpb24tPmNlbGxBdCgwLCAwKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KGNzLmhhc0NlbGxzKCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgY2Ig
PSBjcy5wcmltYXJ5Q2VsbCgpLT5zdHlsZSgpLT5ib3JkZXJTdGFydCgpOyAvLyBGSVhNRTogTWFr
ZSB0aGlzIHdvcmsgd2l0aCBwZXJwZW5kaWN1YWxyIGFuZCBmbGlwcGVkIGNlbGxzLgpAQCAtODU2
LDE5ICs4NjEsMTYgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlckVuZCgpIGNv
bnN0CiAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oYm9yZGVy
V2lkdGgsIGdiLndpZHRoKCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSZW5kZXJU
YWJsZVNlY3Rpb24qIGZpcnN0Tm9uRW1wdHlTZWN0aW9uID0gbV9oZWFkID8gbV9oZWFkIDogKG1f
Zmlyc3RCb2R5ID8gbV9maXJzdEJvZHkgOiBtX2Zvb3QpOwotICAgICAgICBpZiAoZmlyc3ROb25F
bXB0eVNlY3Rpb24gJiYgIWZpcnN0Tm9uRW1wdHlTZWN0aW9uLT5udW1Sb3dzKCkpCi0gICAgICAg
ICAgICBmaXJzdE5vbkVtcHR5U2VjdGlvbiA9IHNlY3Rpb25CZWxvdyhmaXJzdE5vbkVtcHR5U2Vj
dGlvbiwgdHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZmlyc3ROb25FbXB0eVNlY3Rpb24p
IHsKLSAgICAgICAgICAgIGNvbnN0IEJvcmRlclZhbHVlJiBzYiA9IGZpcnN0Tm9uRW1wdHlTZWN0
aW9uLT5zdHlsZSgpLT5ib3JkZXJFbmQoKTsKKyAgICAgICAgY29uc3QgUmVuZGVyVGFibGVTZWN0
aW9uKiB0b3BOb25FbXB0eVNlY3Rpb24gPSB0aGlzLT50b3BOb25FbXB0eVNlY3Rpb24oKTsKKyAg
ICAgICAgaWYgKHRvcE5vbkVtcHR5U2VjdGlvbikgeworICAgICAgICAgICAgY29uc3QgQm9yZGVy
VmFsdWUmIHNiID0gdG9wTm9uRW1wdHlTZWN0aW9uLT5zdHlsZSgpLT5ib3JkZXJFbmQoKTsKICAg
ICAgICAgICAgIGlmIChzYi5zdHlsZSgpID09IEJISURERU4pCiAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICAgICAgICAgIGlmIChzYi5zdHlsZSgpID4gQkhJRERFTikKICAgICAgICAg
ICAgICAgICBib3JkZXJXaWR0aCA9IG1heDxMYXlvdXRVbml0Pihib3JkZXJXaWR0aCwgc2Iud2lk
dGgoKSk7CiAKLSAgICAgICAgICAgIGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbjo6Q2VsbFN0cnVj
dCYgY3MgPSBmaXJzdE5vbkVtcHR5U2VjdGlvbi0+Y2VsbEF0KDAsIGVuZENvbHVtbik7CisgICAg
ICAgICAgICBjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb246OkNlbGxTdHJ1Y3QmIGNzID0gdG9wTm9u
RW1wdHlTZWN0aW9uLT5jZWxsQXQoMCwgZW5kQ29sdW1uKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKGNzLmhhc0NlbGxzKCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBCb3JkZXJW
YWx1ZSYgY2IgPSBjcy5wcmltYXJ5Q2VsbCgpLT5zdHlsZSgpLT5ib3JkZXJFbmQoKTsgLy8gRklY
TUU6IE1ha2UgdGhpcyB3b3JrIHdpdGggcGVycGVuZGljdWxhciBhbmQgZmxpcHBlZCBjZWxscy4K
QEAgLTkxNSwxNSArOTE3LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJC
ZWZvcmUoKSBjb25zdAogICAgIGlmICghY29sbGFwc2VCb3JkZXJzKCkpCiAgICAgICAgIHJldHVy
biAwOwogICAgIExheW91dFVuaXQgYm9yZGVyV2lkdGggPSAwOwotICAgIFJlbmRlclRhYmxlU2Vj
dGlvbiogdG9wU2VjdGlvbjsKLSAgICBpZiAobV9oZWFkKQotICAgICAgICB0b3BTZWN0aW9uID0g
bV9oZWFkOwotICAgIGVsc2UgaWYgKG1fZmlyc3RCb2R5KQotICAgICAgICB0b3BTZWN0aW9uID0g
bV9maXJzdEJvZHk7Ci0gICAgZWxzZSBpZiAobV9mb290KQotICAgICAgICB0b3BTZWN0aW9uID0g
bV9mb290OwotICAgIGVsc2UKLSAgICAgICAgdG9wU2VjdGlvbiA9IDA7CisgICAgUmVuZGVyVGFi
bGVTZWN0aW9uKiB0b3BTZWN0aW9uID0gdGhpcy0+dG9wU2VjdGlvbigpOwogICAgIGlmICh0b3BT
ZWN0aW9uKSB7CiAgICAgICAgIGJvcmRlcldpZHRoID0gdG9wU2VjdGlvbi0+b3V0ZXJCb3JkZXJC
ZWZvcmUoKTsKICAgICAgICAgaWYgKGJvcmRlcldpZHRoIDwgMCkKQEAgLTEwMjEsNyArMTAxNSw3
IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGU6Om91dGVyQm9yZGVyRW5kKCkgY29uc3QKICAgICBy
ZXR1cm4gYm9yZGVyV2lkdGg7CiB9CiAKLVJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGU6
OnNlY3Rpb25BYm92ZShjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24sIGJvb2wgc2tp
cEVtcHR5U2VjdGlvbnMpIGNvbnN0CitSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjpz
ZWN0aW9uQWJvdmUoY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uLCBTa2lwRW1wdHlT
ZWN0aW9uc1ZhbHVlIHNraXBFbXB0eVNlY3Rpb25zKSBjb25zdAogewogICAgIHJlY2FsY1NlY3Rp
b25zSWZOZWVkZWQoKTsKIApAQCAtMTAzMCwxNiArMTAyNCwxNiBAQCBSZW5kZXJUYWJsZVNlY3Rp
b24qIFJlbmRlclRhYmxlOjpzZWN0aW9uQWJvdmUoY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiBz
ZWN0aW9uLAogCiAgICAgUmVuZGVyT2JqZWN0KiBwcmV2U2VjdGlvbiA9IHNlY3Rpb24gPT0gbV9m
b290ID8gbGFzdENoaWxkKCkgOiBzZWN0aW9uLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICB3aGls
ZSAocHJldlNlY3Rpb24pIHsKLSAgICAgICAgaWYgKHByZXZTZWN0aW9uLT5pc1RhYmxlU2VjdGlv
bigpICYmIHByZXZTZWN0aW9uICE9IG1faGVhZCAmJiBwcmV2U2VjdGlvbiAhPSBtX2Zvb3QgJiYg
KCFza2lwRW1wdHlTZWN0aW9ucyB8fCB0b1JlbmRlclRhYmxlU2VjdGlvbihwcmV2U2VjdGlvbikt
Pm51bVJvd3MoKSkpCisgICAgICAgIGlmIChwcmV2U2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSAm
JiBwcmV2U2VjdGlvbiAhPSBtX2hlYWQgJiYgcHJldlNlY3Rpb24gIT0gbV9mb290ICYmIChza2lw
RW1wdHlTZWN0aW9ucyA9PSBEb05vdFNraXBFbXB0eVNlY3Rpb25zIHx8IHRvUmVuZGVyVGFibGVT
ZWN0aW9uKHByZXZTZWN0aW9uKS0+bnVtUm93cygpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBwcmV2U2VjdGlvbiA9IHByZXZTZWN0aW9uLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICB9
Ci0gICAgaWYgKCFwcmV2U2VjdGlvbiAmJiBtX2hlYWQgJiYgKCFza2lwRW1wdHlTZWN0aW9ucyB8
fCBtX2hlYWQtPm51bVJvd3MoKSkpCisgICAgaWYgKCFwcmV2U2VjdGlvbiAmJiBtX2hlYWQgJiYg
KHNraXBFbXB0eVNlY3Rpb25zID09IERvTm90U2tpcEVtcHR5U2VjdGlvbnMgfHwgbV9oZWFkLT5u
dW1Sb3dzKCkpKQogICAgICAgICBwcmV2U2VjdGlvbiA9IG1faGVhZDsKICAgICByZXR1cm4gdG9S
ZW5kZXJUYWJsZVNlY3Rpb24ocHJldlNlY3Rpb24pOwogfQogCi1SZW5kZXJUYWJsZVNlY3Rpb24q
IFJlbmRlclRhYmxlOjpzZWN0aW9uQmVsb3coY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0
aW9uLCBib29sIHNraXBFbXB0eVNlY3Rpb25zKSBjb25zdAorUmVuZGVyVGFibGVTZWN0aW9uKiBS
ZW5kZXJUYWJsZTo6c2VjdGlvbkJlbG93KGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlv
biwgU2tpcEVtcHR5U2VjdGlvbnNWYWx1ZSBza2lwRW1wdHlTZWN0aW9ucykgY29uc3QKIHsKICAg
ICByZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAKQEAgLTEwNDgsMTEgKzEwNDIsMTEgQEAgUmVu
ZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZTo6c2VjdGlvbkJlbG93KGNvbnN0IFJlbmRlclRh
YmxlU2VjdGlvbiogc2VjdGlvbiwKIAogICAgIFJlbmRlck9iamVjdCogbmV4dFNlY3Rpb24gPSBz
ZWN0aW9uID09IG1faGVhZCA/IGZpcnN0Q2hpbGQoKSA6IHNlY3Rpb24tPm5leHRTaWJsaW5nKCk7
CiAgICAgd2hpbGUgKG5leHRTZWN0aW9uKSB7Ci0gICAgICAgIGlmIChuZXh0U2VjdGlvbi0+aXNU
YWJsZVNlY3Rpb24oKSAmJiBuZXh0U2VjdGlvbiAhPSBtX2hlYWQgJiYgbmV4dFNlY3Rpb24gIT0g
bV9mb290ICYmICghc2tpcEVtcHR5U2VjdGlvbnMgfHwgdG9SZW5kZXJUYWJsZVNlY3Rpb24obmV4
dFNlY3Rpb24pLT5udW1Sb3dzKCkpKQorICAgICAgICBpZiAobmV4dFNlY3Rpb24tPmlzVGFibGVT
ZWN0aW9uKCkgJiYgbmV4dFNlY3Rpb24gIT0gbV9oZWFkICYmIG5leHRTZWN0aW9uICE9IG1fZm9v
dCAmJiAoc2tpcEVtcHR5U2VjdGlvbnMgID09IERvTm90U2tpcEVtcHR5U2VjdGlvbnMgfHwgdG9S
ZW5kZXJUYWJsZVNlY3Rpb24obmV4dFNlY3Rpb24pLT5udW1Sb3dzKCkpKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIG5leHRTZWN0aW9uID0gbmV4dFNlY3Rpb24tPm5leHRTaWJsaW5nKCk7
CiAgICAgfQotICAgIGlmICghbmV4dFNlY3Rpb24gJiYgbV9mb290ICYmICghc2tpcEVtcHR5U2Vj
dGlvbnMgfHwgbV9mb290LT5udW1Sb3dzKCkpKQorICAgIGlmICghbmV4dFNlY3Rpb24gJiYgbV9m
b290ICYmIChza2lwRW1wdHlTZWN0aW9ucyA9PSBEb05vdFNraXBFbXB0eVNlY3Rpb25zIHx8IG1f
Zm9vdC0+bnVtUm93cygpKSkKICAgICAgICAgbmV4dFNlY3Rpb24gPSBtX2Zvb3Q7CiAgICAgcmV0
dXJuIHRvUmVuZGVyVGFibGVTZWN0aW9uKG5leHRTZWN0aW9uKTsKIH0KQEAgLTEwNzAsNyArMTA2
NCw3IEBAIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGU6OmNlbGxBYm92ZShjb25zdCBSZW5k
ZXJUYWJsZUNlbGwqIGNlbGwpIGNvbnN0CiAgICAgICAgIHNlY3Rpb24gPSBjZWxsLT5zZWN0aW9u
KCk7CiAgICAgICAgIHJBYm92ZSA9IHIgLSAxOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNlY3Rp
b24gPSBzZWN0aW9uQWJvdmUoY2VsbC0+c2VjdGlvbigpLCB0cnVlKTsKKyAgICAgICAgc2VjdGlv
biA9IHNlY3Rpb25BYm92ZShjZWxsLT5zZWN0aW9uKCksIFNraXBFbXB0eVNlY3Rpb25zKTsKICAg
ICAgICAgaWYgKHNlY3Rpb24pCiAgICAgICAgICAgICByQWJvdmUgPSBzZWN0aW9uLT5udW1Sb3dz
KCkgLSAxOwogICAgIH0KQEAgLTEwOTcsNyArMTA5MSw3IEBAIFJlbmRlclRhYmxlQ2VsbCogUmVu
ZGVyVGFibGU6OmNlbGxCZWxvdyhjb25zdCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwpIGNvbnN0CiAg
ICAgICAgIHNlY3Rpb24gPSBjZWxsLT5zZWN0aW9uKCk7CiAgICAgICAgIHJCZWxvdyA9IHIgKyAx
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNlY3Rpb24gPSBzZWN0aW9uQmVsb3coY2VsbC0+c2Vj
dGlvbigpLCB0cnVlKTsKKyAgICAgICAgc2VjdGlvbiA9IHNlY3Rpb25CZWxvdyhjZWxsLT5zZWN0
aW9uKCksIFNraXBFbXB0eVNlY3Rpb25zKTsKICAgICAgICAgaWYgKHNlY3Rpb24pCiAgICAgICAg
ICAgICByQmVsb3cgPSAwOwogICAgIH0KQEAgLTExNTEsMTQgKzExNDUsMTEgQEAgTGF5b3V0VW5p
dCBSZW5kZXJUYWJsZTo6Zmlyc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdAogCiAgICAgcmVjYWxj
U2VjdGlvbnNJZk5lZWRlZCgpOwogCi0gICAgUmVuZGVyVGFibGVTZWN0aW9uKiBmaXJzdE5vbkVt
cHR5U2VjdGlvbiA9IG1faGVhZCA/IG1faGVhZCA6IChtX2ZpcnN0Qm9keSA/IG1fZmlyc3RCb2R5
IDogbV9mb290KTsKLSAgICBpZiAoZmlyc3ROb25FbXB0eVNlY3Rpb24gJiYgIWZpcnN0Tm9uRW1w
dHlTZWN0aW9uLT5udW1Sb3dzKCkpCi0gICAgICAgIGZpcnN0Tm9uRW1wdHlTZWN0aW9uID0gc2Vj
dGlvbkJlbG93KGZpcnN0Tm9uRW1wdHlTZWN0aW9uLCB0cnVlKTsKLQotICAgIGlmICghZmlyc3RO
b25FbXB0eVNlY3Rpb24pCisgICAgY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiB0b3BOb25FbXB0
eVNlY3Rpb24gPSB0aGlzLT50b3BOb25FbXB0eVNlY3Rpb24oKTsKKyAgICBpZiAoIXRvcE5vbkVt
cHR5U2VjdGlvbikKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgcmV0dXJuIGZpcnN0Tm9uRW1w
dHlTZWN0aW9uLT5sb2dpY2FsVG9wKCkgKyBmaXJzdE5vbkVtcHR5U2VjdGlvbi0+Zmlyc3RMaW5l
Qm94QmFzZWxpbmUoKTsKKyAgICByZXR1cm4gdG9wTm9uRW1wdHlTZWN0aW9uLT5sb2dpY2FsVG9w
KCkgKyB0b3BOb25FbXB0eVNlY3Rpb24tPmZpcnN0TGluZUJveEJhc2VsaW5lKCk7CiB9CiAKIExh
eW91dFJlY3QgUmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQm
IGxvY2F0aW9uLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCmluZGV4IDczNTMzOTA5YmM0YmFhNTAyMzlk
MWE3ZmY4YmRiYjg5ZmE4N2ZhNmQuLjgyNzljZWExMzJiMWVlOWE2Y2QxOTAyNjgwNDgzOWJmNmUx
MWY2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCkBAIC0zNyw2ICsz
Nyw4IEBAIGNsYXNzIFJlbmRlclRhYmxlQ2VsbDsKIGNsYXNzIFJlbmRlclRhYmxlU2VjdGlvbjsK
IGNsYXNzIFRhYmxlTGF5b3V0OwogCitlbnVtIFNraXBFbXB0eVNlY3Rpb25zVmFsdWUgeyBEb05v
dFNraXBFbXB0eVNlY3Rpb25zLCBTa2lwRW1wdHlTZWN0aW9ucyB9OworCiBjbGFzcyBSZW5kZXJU
YWJsZSA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUmVuZGVy
VGFibGUoTm9kZSopOwpAQCAtMTQ0LDYgKzE0NiwxMiBAQCBwdWJsaWM6CiAgICAgUmVuZGVyVGFi
bGVTZWN0aW9uKiBmb290ZXIoKSBjb25zdCB7IHJldHVybiBtX2Zvb3Q7IH0KICAgICBSZW5kZXJU
YWJsZVNlY3Rpb24qIGZpcnN0Qm9keSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RCb2R5OyB9CiAK
KyAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB0aGUgdGFibGUgaGFzIG5vIHNlY3Rp
b24uCisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiB0b3BTZWN0aW9uKCkgY29uc3Q7CisKKyAgICAv
LyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB0aGUgdGFibGUgaGFzIG5vIG5vbi1lbXB0eSBz
ZWN0aW9ucy4KKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHRvcE5vbkVtcHR5U2VjdGlvbigpIGNv
bnN0OworCiAgICAgdm9pZCBzcGxpdENvbHVtbihpbnQgcG9zLCBpbnQgZmlyc3RTcGFuKTsKICAg
ICB2b2lkIGFwcGVuZENvbHVtbihpbnQgc3Bhbik7CiAgICAgaW50IG51bUVmZkNvbHMoKSBjb25z
dCB7IHJldHVybiBtX2NvbHVtbnMuc2l6ZSgpOyB9CkBAIC0xODQsOCArMTkyLDggQEAgcHVibGlj
OgogICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKICAgICB9CiAKLSAgICBSZW5kZXJUYWJs
ZVNlY3Rpb24qIHNlY3Rpb25BYm92ZShjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24qLCBib29sIHNr
aXBFbXB0eVNlY3Rpb25zID0gZmFsc2UpIGNvbnN0OwotICAgIFJlbmRlclRhYmxlU2VjdGlvbiog
c2VjdGlvbkJlbG93KGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiosIGJvb2wgc2tpcEVtcHR5U2Vj
dGlvbnMgPSBmYWxzZSkgY29uc3Q7CisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uQWJv
dmUoY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiwgU2tpcEVtcHR5U2VjdGlvbnNWYWx1ZSA9IERv
Tm90U2tpcEVtcHR5U2VjdGlvbnMpIGNvbnN0OworICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2Vj
dGlvbkJlbG93KGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiosIFNraXBFbXB0eVNlY3Rpb25zVmFs
dWUgPSBEb05vdFNraXBFbXB0eVNlY3Rpb25zKSBjb25zdDsKIAogICAgIFJlbmRlclRhYmxlQ2Vs
bCogY2VsbEFib3ZlKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCopIGNvbnN0OwogICAgIFJlbmRlclRh
YmxlQ2VsbCogY2VsbEJlbG93KGNvbnN0IFJlbmRlclRhYmxlQ2VsbCopIGNvbnN0OwpAQCAtMjYy
LDYgKzI3MCwxNSBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgbV9ib3JkZXJFbmQ7CiB9Owog
CitpbmxpbmUgUmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZTo6dG9wU2VjdGlvbigpIGNv
bnN0Cit7CisgICAgaWYgKG1faGVhZCkKKyAgICAgICAgcmV0dXJuIG1faGVhZDsKKyAgICBpZiAo
bV9maXJzdEJvZHkpCisgICAgICAgIHJldHVybiBtX2ZpcnN0Qm9keTsKKyAgICByZXR1cm4gbV9m
b290OworfQorCiBpbmxpbmUgUmVuZGVyVGFibGUqIHRvUmVuZGVyVGFibGUoUmVuZGVyT2JqZWN0
KiBvYmplY3QpCiB7CiAgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1RhYmxlKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106639</attachid>
            <date>2011-09-07 14:37:59 -0700</date>
            <delta_ts>2011-09-08 11:52:09 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-66972-20110907143758.patch</filename>
            <type>text/plain</type>
            <size>16759</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ2OTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZmYzZmM0YmNhMGI1ODcy
Njk1NjgyZWFjZGMyYzI3NTg0NTM2M2ZhLi5kNzJlNzAzYzIzMTA1MTg3NDE5MTM4MDA2YjYyNjcz
NDhiNTdkMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEtMDktMDcgIEp1bGll
biBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmFjdG9yIG91
dCB0aGUgY29kZSB0byBnZXQgdGhlIGZpcnN0IG5vbi1udWxsIFJlbmRlclRhYmxlU2VjdGlvbiBp
biBSZW5kZXJUYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjY5NzIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBSZWZhY3RvcmluZyBvbmx5LCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxGb3JDb2x1bW5BbmRSb3cpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpyb3dJbmRleFJhbmdlKToKKyAgICAgICAgVXBkYXRlZCB0
aG9zZSBmb3IgdGhlIHNpZ25hdHVyZSBjaGFuZ2UgaW4gc2VjdGlvbkJlbG93LiBBbHNvIGFkZGVk
CisgICAgICAgIGEgRklYTUUgd2hlcmUgdG9wU2VjdGlvbiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFk
IG9mIGl0ZXJhdGluZworICAgICAgICBvdmVyIHRoZSBzZWN0aW9uIChhbmQgbGlrZWx5IG1pc3Np
bmcgc29tZSBjb3JuZXIgY2FzZXMpLgorCisgICAgICAgICogcmVuZGVyaW5nL0ZpeGVkVGFibGVM
YXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRo
QXJyYXkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlclN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlOjpjYWxjQm9yZGVyRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpvdXRlckJvcmRlckJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6
c2VjdGlvbkFib3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzZWN0aW9uQmVs
b3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmZpcnN0TGluZUJveEJhc2VsaW5l
KToKKyAgICAgICAgVXBkYXRlZCBhbGwgdGhvc2UgZnVuY3Rpb25zIHRvIHVzZSB0aGUgbmV3bHkg
YWRkZWQgZnVuY3Rpb25zLiBBbHNvIGNoYW5nZWQKKyAgICAgICAgdGhlIHZhcmlhYmxlIG5hbWVz
IHRvIG1hdGNoIHRoZSBmdW5jdGlvbnMuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnRvcE5vbkVtcHR5U2Vj
dGlvbik6IE5ld2x5IGFkZGVkIGZ1bmN0aW9uCisgICAgICAgIHRoYXQgcmV0dXJucyB0aGUgdG9w
IG5vbiBudWxsIHNlY3Rpb24gb2YgdGhlIHRhYmxlIHRoYXQgaGFzIGF0IGxlYXN0IGEKKyAgICAg
ICAgcm93LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2VsbEFib3ZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjZWxsQmVsb3cpOgorICAgICAgICBVcGRhdGUg
dGhlIHNpZ25hdHVyZSBvZiB0aG9zZSAyIGZ1bmN0aW9ucyB0byB0YWtlIGFuIGVudW0gYXMgaXQg
bWFrZXMgdGhlCisgICAgICAgIHJlc3Qgb2YgdGhlIGNvZGUgbW9yZSByZWFkYWJsZS4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGU6OnRvcFNlY3Rpb24pOiBOZXdseSBhZGRlZCBmdW5jdGlvbiB0byByZXR1cm4KKyAgICAg
ICAgdGhlIHRvcCBub24gbnVsbCBzZWN0aW9uIGluIHRoZSB0YWJsZS4KKwogMjAxMS0wOS0wNyAg
QW5uYSBDYXZlbmRlciAgPGFubmFjY0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTW92aW5nIHBs
YXRmb3JtL3RyYWNrIHRvIGh0bWwvdHJhY2sgdG8gYXZvaWQgbGF5ZXJpbmcgdmlvbGF0aW9uLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUu
Y3BwCmluZGV4IDZhMDE4M2RlOTJkODBiZDlkMGYzNTdkYjNiNWFlYTE5MWRhYmFjY2IuLjUwMDRj
NzYyMGFmZWM0OWE5NTU0MjlhMWQ1OWJmMDY1NGZjN2E3NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKQEAgLTI5OSw2ICsy
OTksNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZTo6YWRkQ2hpbGRyZW4oKQogCiAgICAgLy8g
Z28gdGhyb3VnaCBhbGwgdGhlIGF2YWlsYWJsZSBzZWN0aW9ucyB0byBwdWxsIG91dCB0aGUgcm93
cwogICAgIC8vIGFuZCBhZGQgdGhlbSBhcyBjaGlsZHJlbgorICAgIC8vIEZJWE1FOiBUaGlzIHdp
bGwgc2tpcCBhIHRhYmxlIHdpdGgganVzdCBhIHRmb290LiBTaG91bGQgZml4IGJ5IHVzaW5nIFJl
bmRlclRhYmxlOjp0b3BTZWN0aW9uLgogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogdGFibGVTZWN0
aW9uID0gdGFibGUtPmhlYWRlcigpOwogICAgIGlmICghdGFibGVTZWN0aW9uKQogICAgICAgICB0
YWJsZVNlY3Rpb24gPSB0YWJsZS0+Zmlyc3RCb2R5KCk7CkBAIC0zNDMsNyArMzQ0LDcgQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKCkKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgdGFibGVTZWN0aW9uID0gdGFibGUtPnNlY3Rpb25CZWxv
dyh0YWJsZVNlY3Rpb24sIHRydWUpOworICAgICAgICB0YWJsZVNlY3Rpb24gPSB0YWJsZS0+c2Vj
dGlvbkJlbG93KHRhYmxlU2VjdGlvbiwgU2tpcEVtcHR5U2VjdGlvbnMpOwogICAgIH0KICAgICAK
ICAgICAvLyBtYWtlIHRoZSBjb2x1bW5zIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY29sdW1ucyBp
biB0aGUgZmlyc3QgYm9keQpAQCAtNDY2LDYgKzQ2Nyw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGwqIEFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCBjb2x1
bW4sCiAgICAgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwogICAgIAogICAgIFJlbmRlclRh
YmxlKiB0YWJsZSA9IHRvUmVuZGVyVGFibGUobV9yZW5kZXJlcik7CisgICAgLy8gRklYTUU6IFRo
aXMgd2lsbCBza2lwIGEgdGFibGUgd2l0aCBqdXN0IGEgdGZvb3QuIFNob3VsZCBmaXggYnkgdXNp
bmcgUmVuZGVyVGFibGU6OnRvcFNlY3Rpb24uCiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiB0YWJs
ZVNlY3Rpb24gPSB0YWJsZS0+aGVhZGVyKCk7CiAgICAgaWYgKCF0YWJsZVNlY3Rpb24pCiAgICAg
ICAgIHRhYmxlU2VjdGlvbiA9IHRhYmxlLT5maXJzdEJvZHkoKTsKQEAgLTUxNyw3ICs1MTksNyBA
QCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBBY2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxGb3JDb2x1
bW5BbmRSb3codW5zaWduZWQgY29sdW1uLAogICAgICAgICAvLyB3ZSBkaWRuJ3QgZmluZCBhbnl0
aGluZyBiZXR3ZWVuIHRoZSByb3dzIHdlIHNob3VsZCBoYXZlCiAgICAgICAgIGlmIChyb3cgPCBy
b3dDb3VudCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB0YWJsZVNlY3Rpb24gPSB0YWJs
ZS0+c2VjdGlvbkJlbG93KHRhYmxlU2VjdGlvbiwgdHJ1ZSk7ICAgICAgICAKKyAgICAgICAgdGFi
bGVTZWN0aW9uID0gdGFibGUtPnNlY3Rpb25CZWxvdyh0YWJsZVNlY3Rpb24sIFNraXBFbXB0eVNl
Y3Rpb25zKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFjZWxsKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAKaW5kZXgg
N2FkNjA2MzM2YjYxN2MzZTc0YmUwMzcwZDkxYTZjOWZiOGQyYmU5Yi4uYjVmNzQ0NWEyMTM1M2Ex
MjEzNzJiOWQ2NWUyM2EyYzcwZGMyMDY3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCkBAIC0xMTIsNyArMTEy
LDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpyb3dJbmRleFJhbmdlKHBhaXI8aW50
LCBpbnQ+JiByb3dSYW5nZSkKICAgICBSZW5kZXJUYWJsZSogdGFibGUgPSByZW5kZXJDZWxsLT50
YWJsZSgpOwogICAgIGlmICghdGFibGUgfHwgIXNlY3Rpb24pCiAgICAgICAgIHJldHVybjsKLSAg
ICAKKworICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgc2tpcCBhIHRhYmxlIHdpdGgganVzdCBhIHRm
b290LiBTaG91bGQgZml4IGJ5IHVzaW5nIFJlbmRlclRhYmxlOjp0b3BTZWN0aW9uLgogICAgIFJl
bmRlclRhYmxlU2VjdGlvbiogdGFibGVTZWN0aW9uID0gdGFibGUtPmhlYWRlcigpOwogICAgIGlm
ICghdGFibGVTZWN0aW9uKQogICAgICAgICB0YWJsZVNlY3Rpb24gPSB0YWJsZS0+Zmlyc3RCb2R5
KCk7CkBAIC0xMjIsNyArMTIzLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpyb3dJ
bmRleFJhbmdlKHBhaXI8aW50LCBpbnQ+JiByb3dSYW5nZSkKICAgICAgICAgaWYgKHRhYmxlU2Vj
dGlvbiA9PSBzZWN0aW9uKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHJvd09mZnNldCAr
PSB0YWJsZVNlY3Rpb24tPm51bVJvd3MoKTsKLSAgICAgICAgdGFibGVTZWN0aW9uID0gdGFibGUt
PnNlY3Rpb25CZWxvdyh0YWJsZVNlY3Rpb24sIHRydWUpOyAKKyAgICAgICAgdGFibGVTZWN0aW9u
ID0gdGFibGUtPnNlY3Rpb25CZWxvdyh0YWJsZVNlY3Rpb24sIFNraXBFbXB0eVNlY3Rpb25zKTsK
ICAgICB9CiAKICAgICByb3dSYW5nZS5maXJzdCArPSByb3dPZmZzZXQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKaW5kZXggZGUwNzk2ZTVjMWFkM2Ey
Y2YzMjY4NzM4MmEwNDhiMmVhM2QwYzYxZC4uNThiZWRhM2MzY2Y0NGVmMWQ4ODk2Mjg3MjlkMDAy
NTcyNTU3ZjI3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFi
bGVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5
b3V0LmNwcApAQCAtMTM5LDEzICsxMzksNyBAQCBpbnQgRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dp
ZHRoQXJyYXkoaW50KQogICAgIH0KIAogICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgZmlyc3Qgcm93
IGluIGNhc2Ugc29tZSBhcmUgdW5zcGVjaWZpZWQuCi0gICAgUmVuZGVyVGFibGVTZWN0aW9uKiBz
ZWN0aW9uID0gbV90YWJsZS0+aGVhZGVyKCk7Ci0gICAgaWYgKCFzZWN0aW9uKQotICAgICAgICBz
ZWN0aW9uID0gbV90YWJsZS0+Zmlyc3RCb2R5KCk7Ci0gICAgaWYgKCFzZWN0aW9uKQotICAgICAg
ICBzZWN0aW9uID0gbV90YWJsZS0+Zm9vdGVyKCk7Ci0gICAgaWYgKHNlY3Rpb24gJiYgIXNlY3Rp
b24tPm51bVJvd3MoKSkKLSAgICAgICAgc2VjdGlvbiA9IG1fdGFibGUtPnNlY3Rpb25CZWxvdyhz
ZWN0aW9uLCB0cnVlKTsKKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSBtX3RhYmxl
LT50b3BOb25FbXB0eVNlY3Rpb24oKTsKICAgICBpZiAoc2VjdGlvbikgewogICAgICAgICBpbnQg
Y0NvbCA9IDA7CiAgICAgICAgIFJlbmRlck9iamVjdCogZmlyc3RSb3cgPSBzZWN0aW9uLT5maXJz
dENoaWxkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAppbmRleCA3
NTlmOGVkMWU5ZmI2MTVkZDE4OWY5YzAyNjE5MTUwOWJmM2NhZWE5Li5mYzQ0NjA1MTk4NGJlMmM3
NjM0YTZmYjkwMjA2OTc3ZDQ4MzRjYmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHAKQEAgLTM3MCw3ICszNzAsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQo
KQogICAgICAgICBzZWN0aW9uTG9naWNhbExlZnQgKz0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gcGFkZGluZ1N0YXJ0KCkgOiBwYWRkaW5nRW5kKCk7CiAKICAgICAvLyBwb3Np
dGlvbiB0aGUgdGFibGUgc2VjdGlvbnMKLSAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24g
PSBtX2hlYWQgPyBtX2hlYWQgOiAobV9maXJzdEJvZHkgPyBtX2ZpcnN0Qm9keSA6IG1fZm9vdCk7
CisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gdG9wU2VjdGlvbigpOwogICAgIHdo
aWxlIChzZWN0aW9uKSB7CiAgICAgICAgIGlmICghc2VjdGlvbk1vdmVkICYmIHNlY3Rpb24tPmxv
Z2ljYWxUb3AoKSAhPSBsb2dpY2FsSGVpZ2h0KCkpIHsKICAgICAgICAgICAgIHNlY3Rpb25Nb3Zl
ZCA9IHRydWU7CkBAIC01OTMsNiArNTkzLDE0IEBAIHZvaWQgUmVuZGVyVGFibGU6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGly
dHkoZmFsc2UpOwogfQogCitSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjp0b3BOb25F
bXB0eVNlY3Rpb24oKSBjb25zdAoreworICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9
IHRvcFNlY3Rpb24oKTsKKyAgICBpZiAoc2VjdGlvbiAmJiAhc2VjdGlvbi0+bnVtUm93cygpKQor
ICAgICAgICBzZWN0aW9uID0gc2VjdGlvbkJlbG93KHNlY3Rpb24sIFNraXBFbXB0eVNlY3Rpb25z
KTsKKyAgICByZXR1cm4gc2VjdGlvbjsKK30KKwogdm9pZCBSZW5kZXJUYWJsZTo6c3BsaXRDb2x1
bW4oaW50IHBvcywgaW50IGZpcnN0U3BhbikKIHsKICAgICAvLyB3ZSBuZWVkIHRvIGFkZCBhIG5l
dyBjb2x1bW5TdHJ1Y3QKQEAgLTgwMCwxOSArODA4LDE1IEBAIExheW91dFVuaXQgUmVuZGVyVGFi
bGU6OmNhbGNCb3JkZXJTdGFydCgpIGNvbnN0CiAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGgg
PSBtYXg8TGF5b3V0VW5pdD4oYm9yZGVyV2lkdGgsIGdiLndpZHRoKCkpOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIGZpcnN0Tm9uRW1wdHlTZWN0aW9u
ID0gbV9oZWFkID8gbV9oZWFkIDogKG1fZmlyc3RCb2R5ID8gbV9maXJzdEJvZHkgOiBtX2Zvb3Qp
OwotICAgICAgICBpZiAoZmlyc3ROb25FbXB0eVNlY3Rpb24gJiYgIWZpcnN0Tm9uRW1wdHlTZWN0
aW9uLT5udW1Sb3dzKCkpCi0gICAgICAgICAgICBmaXJzdE5vbkVtcHR5U2VjdGlvbiA9IHNlY3Rp
b25CZWxvdyhmaXJzdE5vbkVtcHR5U2VjdGlvbiwgdHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoZmlyc3ROb25FbXB0eVNlY3Rpb24pIHsKLSAgICAgICAgICAgIGNvbnN0IEJvcmRlclZhbHVl
JiBzYiA9IGZpcnN0Tm9uRW1wdHlTZWN0aW9uLT5zdHlsZSgpLT5ib3JkZXJTdGFydCgpOworICAg
ICAgICBpZiAoY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiB0b3BOb25FbXB0eVNlY3Rpb24gPSB0
aGlzLT50b3BOb25FbXB0eVNlY3Rpb24oKSkgeworICAgICAgICAgICAgY29uc3QgQm9yZGVyVmFs
dWUmIHNiID0gdG9wTm9uRW1wdHlTZWN0aW9uLT5zdHlsZSgpLT5ib3JkZXJTdGFydCgpOwogICAg
ICAgICAgICAgaWYgKHNiLnN0eWxlKCkgPT0gQkhJRERFTikKICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKIAogICAgICAgICAgICAgaWYgKHNiLnN0eWxlKCkgPiBCSElEREVOKQogICAgICAgICAg
ICAgICAgIGJvcmRlcldpZHRoID0gbWF4PExheW91dFVuaXQ+KGJvcmRlcldpZHRoLCBzYi53aWR0
aCgpKTsKIAotICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0
JiBjcyA9IGZpcnN0Tm9uRW1wdHlTZWN0aW9uLT5jZWxsQXQoMCwgMCk7CisgICAgICAgICAgICBj
b25zdCBSZW5kZXJUYWJsZVNlY3Rpb246OkNlbGxTdHJ1Y3QmIGNzID0gdG9wTm9uRW1wdHlTZWN0
aW9uLT5jZWxsQXQoMCwgMCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChjcy5oYXND
ZWxscygpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgQm9yZGVyVmFsdWUmIGNiID0gY3MucHJp
bWFyeUNlbGwoKS0+c3R5bGUoKS0+Ym9yZGVyU3RhcnQoKTsgLy8gRklYTUU6IE1ha2UgdGhpcyB3
b3JrIHdpdGggcGVycGVuZGljdWFsciBhbmQgZmxpcHBlZCBjZWxscy4KQEAgLTg1NywyMCArODYx
LDE2IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGU6OmNhbGNCb3JkZXJFbmQoKSBjb25zdAogICAg
ICAgICAgICAgaWYgKGdiLnN0eWxlKCkgPiBCSElEREVOKQogICAgICAgICAgICAgICAgIGJvcmRl
cldpZHRoID0gbWF4PExheW91dFVuaXQ+KGJvcmRlcldpZHRoLCBnYi53aWR0aCgpKTsKICAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBmaXJzdE5vbkVtcHR5
U2VjdGlvbiA9IG1faGVhZCA/IG1faGVhZCA6IChtX2ZpcnN0Qm9keSA/IG1fZmlyc3RCb2R5IDog
bV9mb290KTsKLSAgICAgICAgaWYgKGZpcnN0Tm9uRW1wdHlTZWN0aW9uICYmICFmaXJzdE5vbkVt
cHR5U2VjdGlvbi0+bnVtUm93cygpKQotICAgICAgICAgICAgZmlyc3ROb25FbXB0eVNlY3Rpb24g
PSBzZWN0aW9uQmVsb3coZmlyc3ROb25FbXB0eVNlY3Rpb24sIHRydWUpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKGZpcnN0Tm9uRW1wdHlTZWN0aW9uKSB7Ci0gICAgICAgICAgICBjb25zdCBCb3Jk
ZXJWYWx1ZSYgc2IgPSBmaXJzdE5vbkVtcHR5U2VjdGlvbi0+c3R5bGUoKS0+Ym9yZGVyRW5kKCk7
CisKKyAgICAgICAgaWYgKGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiogdG9wTm9uRW1wdHlTZWN0
aW9uID0gdGhpcy0+dG9wTm9uRW1wdHlTZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEJv
cmRlclZhbHVlJiBzYiA9IHRvcE5vbkVtcHR5U2VjdGlvbi0+c3R5bGUoKS0+Ym9yZGVyRW5kKCk7
CiAgICAgICAgICAgICBpZiAoc2Iuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICAgICAgICAg
IHJldHVybiAwOwogCiAgICAgICAgICAgICBpZiAoc2Iuc3R5bGUoKSA+IEJISURERU4pCiAgICAg
ICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oYm9yZGVyV2lkdGgsIHNi
LndpZHRoKCkpOwogCi0gICAgICAgICAgICBjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb246OkNlbGxT
dHJ1Y3QmIGNzID0gZmlyc3ROb25FbXB0eVNlY3Rpb24tPmNlbGxBdCgwLCBlbmRDb2x1bW4pOwor
ICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0JiBjcyA9IHRv
cE5vbkVtcHR5U2VjdGlvbi0+Y2VsbEF0KDAsIGVuZENvbHVtbik7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmIChjcy5oYXNDZWxscygpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgQm9y
ZGVyVmFsdWUmIGNiID0gY3MucHJpbWFyeUNlbGwoKS0+c3R5bGUoKS0+Ym9yZGVyRW5kKCk7IC8v
IEZJWE1FOiBNYWtlIHRoaXMgd29yayB3aXRoIHBlcnBlbmRpY3VsYXIgYW5kIGZsaXBwZWQgY2Vs
bHMuCkBAIC05MTcsMTYgKzkxNyw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGU6Om91dGVyQm9y
ZGVyQmVmb3JlKCkgY29uc3QKICAgICBpZiAoIWNvbGxhcHNlQm9yZGVycygpKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICBMYXlvdXRVbml0IGJvcmRlcldpZHRoID0gMDsKLSAgICBSZW5kZXJUYWJs
ZVNlY3Rpb24qIHRvcFNlY3Rpb247Ci0gICAgaWYgKG1faGVhZCkKLSAgICAgICAgdG9wU2VjdGlv
biA9IG1faGVhZDsKLSAgICBlbHNlIGlmIChtX2ZpcnN0Qm9keSkKLSAgICAgICAgdG9wU2VjdGlv
biA9IG1fZmlyc3RCb2R5OwotICAgIGVsc2UgaWYgKG1fZm9vdCkKLSAgICAgICAgdG9wU2VjdGlv
biA9IG1fZm9vdDsKLSAgICBlbHNlCi0gICAgICAgIHRvcFNlY3Rpb24gPSAwOwotICAgIGlmICh0
b3BTZWN0aW9uKSB7CisgICAgaWYgKFJlbmRlclRhYmxlU2VjdGlvbiogdG9wU2VjdGlvbiA9IHRo
aXMtPnRvcFNlY3Rpb24oKSkgewogICAgICAgICBib3JkZXJXaWR0aCA9IHRvcFNlY3Rpb24tPm91
dGVyQm9yZGVyQmVmb3JlKCk7CiAgICAgICAgIGlmIChib3JkZXJXaWR0aCA8IDApCiAgICAgICAg
ICAgICByZXR1cm4gMDsgICAvLyBPdmVycmlkZGVuIGJ5IGhpZGRlbgpAQCAtMTAyMyw3ICsxMDE0
LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJFbmQoKSBjb25zdAogICAg
IHJldHVybiBib3JkZXJXaWR0aDsKIH0KIAotUmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJs
ZTo6c2VjdGlvbkFib3ZlKGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiwgYm9vbCBz
a2lwRW1wdHlTZWN0aW9ucykgY29uc3QKK1JlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGU6
OnNlY3Rpb25BYm92ZShjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24sIFNraXBFbXB0
eVNlY3Rpb25zVmFsdWUgc2tpcEVtcHR5U2VjdGlvbnMpIGNvbnN0CiB7CiAgICAgcmVjYWxjU2Vj
dGlvbnNJZk5lZWRlZCgpOwogCkBAIC0xMDMyLDE2ICsxMDIzLDE2IEBAIFJlbmRlclRhYmxlU2Vj
dGlvbiogUmVuZGVyVGFibGU6OnNlY3Rpb25BYm92ZShjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24q
IHNlY3Rpb24sCiAKICAgICBSZW5kZXJPYmplY3QqIHByZXZTZWN0aW9uID0gc2VjdGlvbiA9PSBt
X2Zvb3QgPyBsYXN0Q2hpbGQoKSA6IHNlY3Rpb24tPnByZXZpb3VzU2libGluZygpOwogICAgIHdo
aWxlIChwcmV2U2VjdGlvbikgewotICAgICAgICBpZiAocHJldlNlY3Rpb24tPmlzVGFibGVTZWN0
aW9uKCkgJiYgcHJldlNlY3Rpb24gIT0gbV9oZWFkICYmIHByZXZTZWN0aW9uICE9IG1fZm9vdCAm
JiAoIXNraXBFbXB0eVNlY3Rpb25zIHx8IHRvUmVuZGVyVGFibGVTZWN0aW9uKHByZXZTZWN0aW9u
KS0+bnVtUm93cygpKSkKKyAgICAgICAgaWYgKHByZXZTZWN0aW9uLT5pc1RhYmxlU2VjdGlvbigp
ICYmIHByZXZTZWN0aW9uICE9IG1faGVhZCAmJiBwcmV2U2VjdGlvbiAhPSBtX2Zvb3QgJiYgKHNr
aXBFbXB0eVNlY3Rpb25zID09IERvTm90U2tpcEVtcHR5U2VjdGlvbnMgfHwgdG9SZW5kZXJUYWJs
ZVNlY3Rpb24ocHJldlNlY3Rpb24pLT5udW1Sb3dzKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIHByZXZTZWN0aW9uID0gcHJldlNlY3Rpb24tPnByZXZpb3VzU2libGluZygpOwogICAg
IH0KLSAgICBpZiAoIXByZXZTZWN0aW9uICYmIG1faGVhZCAmJiAoIXNraXBFbXB0eVNlY3Rpb25z
IHx8IG1faGVhZC0+bnVtUm93cygpKSkKKyAgICBpZiAoIXByZXZTZWN0aW9uICYmIG1faGVhZCAm
JiAoc2tpcEVtcHR5U2VjdGlvbnMgPT0gRG9Ob3RTa2lwRW1wdHlTZWN0aW9ucyB8fCBtX2hlYWQt
Pm51bVJvd3MoKSkpCiAgICAgICAgIHByZXZTZWN0aW9uID0gbV9oZWFkOwogICAgIHJldHVybiB0
b1JlbmRlclRhYmxlU2VjdGlvbihwcmV2U2VjdGlvbik7CiB9CiAKLVJlbmRlclRhYmxlU2VjdGlv
biogUmVuZGVyVGFibGU6OnNlY3Rpb25CZWxvdyhjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24qIHNl
Y3Rpb24sIGJvb2wgc2tpcEVtcHR5U2VjdGlvbnMpIGNvbnN0CitSZW5kZXJUYWJsZVNlY3Rpb24q
IFJlbmRlclRhYmxlOjpzZWN0aW9uQmVsb3coY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0
aW9uLCBTa2lwRW1wdHlTZWN0aW9uc1ZhbHVlIHNraXBFbXB0eVNlY3Rpb25zKSBjb25zdAogewog
ICAgIHJlY2FsY1NlY3Rpb25zSWZOZWVkZWQoKTsKIApAQCAtMTA1MCwxMSArMTA0MSwxMSBAQCBS
ZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjpzZWN0aW9uQmVsb3coY29uc3QgUmVuZGVy
VGFibGVTZWN0aW9uKiBzZWN0aW9uLAogCiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2VjdGlvbiA9
IHNlY3Rpb24gPT0gbV9oZWFkID8gZmlyc3RDaGlsZCgpIDogc2VjdGlvbi0+bmV4dFNpYmxpbmco
KTsKICAgICB3aGlsZSAobmV4dFNlY3Rpb24pIHsKLSAgICAgICAgaWYgKG5leHRTZWN0aW9uLT5p
c1RhYmxlU2VjdGlvbigpICYmIG5leHRTZWN0aW9uICE9IG1faGVhZCAmJiBuZXh0U2VjdGlvbiAh
PSBtX2Zvb3QgJiYgKCFza2lwRW1wdHlTZWN0aW9ucyB8fCB0b1JlbmRlclRhYmxlU2VjdGlvbihu
ZXh0U2VjdGlvbiktPm51bVJvd3MoKSkpCisgICAgICAgIGlmIChuZXh0U2VjdGlvbi0+aXNUYWJs
ZVNlY3Rpb24oKSAmJiBuZXh0U2VjdGlvbiAhPSBtX2hlYWQgJiYgbmV4dFNlY3Rpb24gIT0gbV9m
b290ICYmIChza2lwRW1wdHlTZWN0aW9ucyAgPT0gRG9Ob3RTa2lwRW1wdHlTZWN0aW9ucyB8fCB0
b1JlbmRlclRhYmxlU2VjdGlvbihuZXh0U2VjdGlvbiktPm51bVJvd3MoKSkpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgbmV4dFNlY3Rpb24gPSBuZXh0U2VjdGlvbi0+bmV4dFNpYmxpbmco
KTsKICAgICB9Ci0gICAgaWYgKCFuZXh0U2VjdGlvbiAmJiBtX2Zvb3QgJiYgKCFza2lwRW1wdHlT
ZWN0aW9ucyB8fCBtX2Zvb3QtPm51bVJvd3MoKSkpCisgICAgaWYgKCFuZXh0U2VjdGlvbiAmJiBt
X2Zvb3QgJiYgKHNraXBFbXB0eVNlY3Rpb25zID09IERvTm90U2tpcEVtcHR5U2VjdGlvbnMgfHwg
bV9mb290LT5udW1Sb3dzKCkpKQogICAgICAgICBuZXh0U2VjdGlvbiA9IG1fZm9vdDsKICAgICBy
ZXR1cm4gdG9SZW5kZXJUYWJsZVNlY3Rpb24obmV4dFNlY3Rpb24pOwogfQpAQCAtMTA3Miw3ICsx
MDYzLDcgQEAgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZTo6Y2VsbEFib3ZlKGNvbnN0IFJl
bmRlclRhYmxlQ2VsbCogY2VsbCkgY29uc3QKICAgICAgICAgc2VjdGlvbiA9IGNlbGwtPnNlY3Rp
b24oKTsKICAgICAgICAgckFib3ZlID0gciAtIDE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc2Vj
dGlvbiA9IHNlY3Rpb25BYm92ZShjZWxsLT5zZWN0aW9uKCksIHRydWUpOworICAgICAgICBzZWN0
aW9uID0gc2VjdGlvbkFib3ZlKGNlbGwtPnNlY3Rpb24oKSwgU2tpcEVtcHR5U2VjdGlvbnMpOwog
ICAgICAgICBpZiAoc2VjdGlvbikKICAgICAgICAgICAgIHJBYm92ZSA9IHNlY3Rpb24tPm51bVJv
d3MoKSAtIDE7CiAgICAgfQpAQCAtMTA5OSw3ICsxMDkwLDcgQEAgUmVuZGVyVGFibGVDZWxsKiBS
ZW5kZXJUYWJsZTo6Y2VsbEJlbG93KGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2VsbCkgY29uc3QK
ICAgICAgICAgc2VjdGlvbiA9IGNlbGwtPnNlY3Rpb24oKTsKICAgICAgICAgckJlbG93ID0gciAr
IDE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc2VjdGlvbiA9IHNlY3Rpb25CZWxvdyhjZWxsLT5z
ZWN0aW9uKCksIHRydWUpOworICAgICAgICBzZWN0aW9uID0gc2VjdGlvbkJlbG93KGNlbGwtPnNl
Y3Rpb24oKSwgU2tpcEVtcHR5U2VjdGlvbnMpOwogICAgICAgICBpZiAoc2VjdGlvbikKICAgICAg
ICAgICAgIHJCZWxvdyA9IDA7CiAgICAgfQpAQCAtMTE1MywxNCArMTE0NCwxMSBAQCBMYXlvdXRV
bml0IFJlbmRlclRhYmxlOjpmaXJzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0CiAKICAgICByZWNh
bGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAKLSAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIGZpcnN0Tm9u
RW1wdHlTZWN0aW9uID0gbV9oZWFkID8gbV9oZWFkIDogKG1fZmlyc3RCb2R5ID8gbV9maXJzdEJv
ZHkgOiBtX2Zvb3QpOwotICAgIGlmIChmaXJzdE5vbkVtcHR5U2VjdGlvbiAmJiAhZmlyc3ROb25F
bXB0eVNlY3Rpb24tPm51bVJvd3MoKSkKLSAgICAgICAgZmlyc3ROb25FbXB0eVNlY3Rpb24gPSBz
ZWN0aW9uQmVsb3coZmlyc3ROb25FbXB0eVNlY3Rpb24sIHRydWUpOwotCi0gICAgaWYgKCFmaXJz
dE5vbkVtcHR5U2VjdGlvbikKKyAgICBjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24qIHRvcE5vbkVt
cHR5U2VjdGlvbiA9IHRoaXMtPnRvcE5vbkVtcHR5U2VjdGlvbigpOworICAgIGlmICghdG9wTm9u
RW1wdHlTZWN0aW9uKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICByZXR1cm4gZmlyc3ROb25F
bXB0eVNlY3Rpb24tPmxvZ2ljYWxUb3AoKSArIGZpcnN0Tm9uRW1wdHlTZWN0aW9uLT5maXJzdExp
bmVCb3hCYXNlbGluZSgpOworICAgIHJldHVybiB0b3BOb25FbXB0eVNlY3Rpb24tPmxvZ2ljYWxU
b3AoKSArIHRvcE5vbkVtcHR5U2VjdGlvbi0+Zmlyc3RMaW5lQm94QmFzZWxpbmUoKTsKIH0KIAog
TGF5b3V0UmVjdCBSZW5kZXJUYWJsZTo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2lu
dCYgbG9jYXRpb24sIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKaW5kZXggNzM1MzM5MDliYzRiYWE1MDIz
OWQxYTdmZjhiZGJiODlmYTg3ZmE2ZC4uODI3OWNlYTEzMmIxZWU5YTZjZDE5MDI2ODA0ODM5YmY2
ZTExZjY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKQEAgLTM3LDYg
KzM3LDggQEAgY2xhc3MgUmVuZGVyVGFibGVDZWxsOwogY2xhc3MgUmVuZGVyVGFibGVTZWN0aW9u
OwogY2xhc3MgVGFibGVMYXlvdXQ7CiAKK2VudW0gU2tpcEVtcHR5U2VjdGlvbnNWYWx1ZSB7IERv
Tm90U2tpcEVtcHR5U2VjdGlvbnMsIFNraXBFbXB0eVNlY3Rpb25zIH07CisKIGNsYXNzIFJlbmRl
clRhYmxlIDogcHVibGljIFJlbmRlckJsb2NrIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBSZW5k
ZXJUYWJsZShOb2RlKik7CkBAIC0xNDQsNiArMTQ2LDEyIEBAIHB1YmxpYzoKICAgICBSZW5kZXJU
YWJsZVNlY3Rpb24qIGZvb3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9vdDsgfQogICAgIFJlbmRl
clRhYmxlU2VjdGlvbiogZmlyc3RCb2R5KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdEJvZHk7IH0K
IAorICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHRoZSB0YWJsZSBoYXMgbm8gc2Vj
dGlvbi4KKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHRvcFNlY3Rpb24oKSBjb25zdDsKKworICAg
IC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHRoZSB0YWJsZSBoYXMgbm8gbm9uLWVtcHR5
IHNlY3Rpb25zLgorICAgIFJlbmRlclRhYmxlU2VjdGlvbiogdG9wTm9uRW1wdHlTZWN0aW9uKCkg
Y29uc3Q7CisKICAgICB2b2lkIHNwbGl0Q29sdW1uKGludCBwb3MsIGludCBmaXJzdFNwYW4pOwog
ICAgIHZvaWQgYXBwZW5kQ29sdW1uKGludCBzcGFuKTsKICAgICBpbnQgbnVtRWZmQ29scygpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1ucy5zaXplKCk7IH0KQEAgLTE4NCw4ICsxOTIsOCBAQCBwdWJs
aWM6CiAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOwogICAgIH0KIAotICAgIFJlbmRlclRh
YmxlU2VjdGlvbiogc2VjdGlvbkFib3ZlKGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiosIGJvb2wg
c2tpcEVtcHR5U2VjdGlvbnMgPSBmYWxzZSkgY29uc3Q7Ci0gICAgUmVuZGVyVGFibGVTZWN0aW9u
KiBzZWN0aW9uQmVsb3coY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiwgYm9vbCBza2lwRW1wdHlT
ZWN0aW9ucyA9IGZhbHNlKSBjb25zdDsKKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb25B
Ym92ZShjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24qLCBTa2lwRW1wdHlTZWN0aW9uc1ZhbHVlID0g
RG9Ob3RTa2lwRW1wdHlTZWN0aW9ucykgY29uc3Q7CisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBz
ZWN0aW9uQmVsb3coY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiwgU2tpcEVtcHR5U2VjdGlvbnNW
YWx1ZSA9IERvTm90U2tpcEVtcHR5U2VjdGlvbnMpIGNvbnN0OwogCiAgICAgUmVuZGVyVGFibGVD
ZWxsKiBjZWxsQWJvdmUoY29uc3QgUmVuZGVyVGFibGVDZWxsKikgY29uc3Q7CiAgICAgUmVuZGVy
VGFibGVDZWxsKiBjZWxsQmVsb3coY29uc3QgUmVuZGVyVGFibGVDZWxsKikgY29uc3Q7CkBAIC0y
NjIsNiArMjcwLDE1IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBtX2JvcmRlckVuZDsKIH07
CiAKK2lubGluZSBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjp0b3BTZWN0aW9uKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9oZWFkKQorICAgICAgICByZXR1cm4gbV9oZWFkOworICAgIGlm
IChtX2ZpcnN0Qm9keSkKKyAgICAgICAgcmV0dXJuIG1fZmlyc3RCb2R5OworICAgIHJldHVybiBt
X2Zvb3Q7Cit9CisKIGlubGluZSBSZW5kZXJUYWJsZSogdG9SZW5kZXJUYWJsZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKIHsKICAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzVGFibGUoKSk7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>