<?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>65297</bug_id>
          
          <creation_ts>2011-07-27 18:07:08 -0700</creation_ts>
          <short_desc>Add iterator to CSSValueList</short_desc>
          <delta_ts>2011-08-01 01:32:06 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Luke Macpherson">macpherson</reporter>
          <assigned_to name="Luke Macpherson">macpherson</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>macpherson</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>443247</commentid>
    <comment_count>0</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-07-27 18:07:08 -0700</bug_when>
    <thetext>Add iterator to CSSValueList</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443249</commentid>
    <comment_count>1</comment_count>
      <attachid>102209</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-07-27 18:15:13 -0700</bug_when>
    <thetext>Created attachment 102209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443273</commentid>
    <comment_count>2</comment_count>
      <attachid>102209</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-27 19:03:40 -0700</bug_when>
    <thetext>Comment on attachment 102209
Patch

This seems nifty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443302</commentid>
    <comment_count>3</comment_count>
      <attachid>102209</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-27 20:52:46 -0700</bug_when>
    <thetext>Comment on attachment 102209
Patch

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

review- because I think you will make at least one change based on my comments.

&gt; Source/WebCore/css/CSSPrimitiveValue.h:122
&gt; +    bool isLength() { return isUnitTypeLength(m_type); }

This should be a const member function.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:194
&gt; +    for (CSSValueListIterator i = CSSValueListIterator(value); i.hasValue(); i.next()) { \

This seems a little wordy. Since the constructor is not marked explicit you can do without the type name:

    [...] CSSValueListIterator i = value [...]

Same at many other call sites.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:4454
&gt; -                m_style-&gt;setTextShadow(shadowData.release(), i /* add to the list if this is not the firsty entry */);
&gt; +                m_style-&gt;setTextShadow(shadowData.release(), !i.index() /* add to the list if this is not the firsty entry */);

I suggest fixing the &quot;firsty&quot; typo and changing to a &quot;//&quot; comment if you are touching this line.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:5269
&gt; -    Length width;
&gt; -    Length height;
&gt; +    Length width, height;

This is an anti-pattern in WebKit code and so should not be changed.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:5272
&gt; +    CSSValueListIterator iterator = CSSValueListIterator(value);
&gt; +    switch (iterator.length()) {

This use is not iteration at all. So already, right out of the gate, the iterator class does two separate things. I think this should not be using iterator. You could build the iterator out of a base class that can be used just to wrap the list if you like.

&gt; Source/WebCore/css/CSSValueList.cpp:94
&gt;      for (size_t index = 0; index &lt; m_values.size(); index++)
&gt; -        newList-&gt;append(item(index));
&gt; +        newList-&gt;append(itemWithoutBoundsCheck(index));

It seems strange to use m_values on one line and then call itemWithoutBoundsCheck on the next. Can we just index into m_values instead?

&gt; Source/WebCore/css/CSSValueList.h:51
&gt; -    CSSValue* item(unsigned);
&gt; +    CSSValue* item(unsigned index) { return index &lt; m_values.size() ? m_values[index].get() : 0; }
&gt;      CSSValue* itemWithoutBoundsCheck(unsigned index) { return m_values[index].get(); }

Seems these should take size_t instead of unsigned.

&gt; Source/WebCore/css/CSSValueList.h:76
&gt; +class CSSValueListIterator {

An iterator seems OK but not great to me; a “why” comment about the value of the iterator would be welcome. It seems the main value offered is the integral call to isValueList and the type check. Another is the use of itemWithoutBoundsCheck function without having to be so wordy about it.

&gt; Source/WebCore/css/CSSValueList.h:78
&gt; +    CSSValueListIterator(CSSValue* value) : m_position(0) { m_list = value-&gt;isValueList() ? static_cast&lt;CSSValueList*&gt;(value) : 0; }

We don’t need this to work with a 0 for CSSValue*?

&gt; Source/WebCore/css/CSSValueList.h:79
&gt; +    bool hasValue() { return m_list &amp;&amp; m_position &lt; m_list-&gt;length(); }

I’m not really all that pleased with hasValue as the name for this. I don’t think it’s really natural to ask if an iterator &quot;has a value&quot;. It makes more sense to ask if an iterator “is at the end of the things it iterates”. I understand that it’s nice to have the sense reversed, but a name like atEnd seems better and more straightforward. Or maybe hasMoreValues is a good name?

This should be a const member function.

&gt; Source/WebCore/css/CSSValueList.h:80
&gt; +    CSSValue* value() { ASSERT(hasValue()); return m_list-&gt;itemWithoutBoundsCheck(m_position); }

This should be a const member function.

&gt; Source/WebCore/css/CSSValueList.h:82
&gt; +    CSSValue* first() { ASSERT(length() &gt; 0); return m_list-&gt;itemWithoutBoundsCheck(0); }
&gt; +    CSSValue* second() { ASSERT(length() &gt; 1); return m_list-&gt;itemWithoutBoundsCheck(1); }

These are strange. They have nothing to do with iteration, so don’t seem to belong on an iterator. They would make more sense as CSSValueList member functions. I see how you want to use the iterator also as just a type-checked pointer, but that seems too “clever” to me and makes this a dual-purpose class.

&gt; Source/WebCore/css/CSSValueList.h:83
&gt; +    void next() { m_position++; }

A function like this should have a verb for its name. Perhaps “advance”?

It also should assert that we are not advancing past the end.

&gt; Source/WebCore/css/CSSValueList.h:84
&gt; +    size_t index() { return m_position; }

This should be a const member function.

&gt; Source/WebCore/css/CSSValueList.h:85
&gt; +    size_t length() { return m_list ? m_list-&gt;length() : 0; }

You could write the hasValue function more simply using this function.

    return m_position &lt; length();

This should be a const member function.

&gt; Source/WebCore/css/CSSValueList.h:87
&gt; +    CSSValueList* m_list;

A CSSValueList is a reference-counted object, and this holds a non-RefPtr pointer to it. This hides potential lifetime issues inside the class, which is not a step in the right direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443309</commentid>
    <comment_count>4</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-07-27 21:07:42 -0700</bug_when>
    <thetext>Really great concrete feedback, thanks Darin! I&apos;ll be back with another patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443361</commentid>
    <comment_count>5</comment_count>
      <attachid>102209</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-07-27 23:24:15 -0700</bug_when>
    <thetext>Comment on attachment 102209
Patch

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

&gt;&gt; Source/WebCore/css/CSSPrimitiveValue.h:122
&gt;&gt; +    bool isLength() { return isUnitTypeLength(m_type); }
&gt; 
&gt; This should be a const member function.

done.

&gt;&gt; Source/WebCore/css/CSSStyleSelector.cpp:194
&gt;&gt; +    for (CSSValueListIterator i = CSSValueListIterator(value); i.hasValue(); i.next()) { \
&gt; 
&gt; This seems a little wordy. Since the constructor is not marked explicit you can do without the type name:
&gt; 
&gt;     [...] CSSValueListIterator i = value [...]
&gt; 
&gt; Same at many other call sites.

nice. done.

&gt;&gt; Source/WebCore/css/CSSStyleSelector.cpp:4454
&gt;&gt; +                m_style-&gt;setTextShadow(shadowData.release(), !i.index() /* add to the list if this is not the firsty entry */);
&gt; 
&gt; I suggest fixing the &quot;firsty&quot; typo and changing to a &quot;//&quot; comment if you are touching this line.

done.

&gt;&gt; Source/WebCore/css/CSSStyleSelector.cpp:5269
&gt;&gt; +    Length width, height;
&gt; 
&gt; This is an anti-pattern in WebKit code and so should not be changed.

done.

&gt;&gt; Source/WebCore/css/CSSStyleSelector.cpp:5272

&gt; 
&gt; This use is not iteration at all. So already, right out of the gate, the iterator class does two separate things. I think this should not be using iterator. You could build the iterator out of a base class that can be used just to wrap the list if you like.

Ok, I&apos;ve added a separate wrapper class CSSValueListExpander that handles these cases.

&gt;&gt; Source/WebCore/css/CSSValueList.cpp:94
&gt;&gt; +        newList-&gt;append(itemWithoutBoundsCheck(index));
&gt; 
&gt; It seems strange to use m_values on one line and then call itemWithoutBoundsCheck on the next. Can we just index into m_values instead?

done.

&gt;&gt; Source/WebCore/css/CSSValueList.h:51
&gt;&gt;      CSSValue* itemWithoutBoundsCheck(unsigned index) { return m_values[index].get(); }
&gt; 
&gt; Seems these should take size_t instead of unsigned.

done.

&gt;&gt; Source/WebCore/css/CSSValueList.h:76

&gt; 
&gt; An iterator seems OK but not great to me; a “why” comment about the value of the iterator would be welcome. It seems the main value offered is the integral call to isValueList and the type check. Another is the use of itemWithoutBoundsCheck function without having to be so wordy about it.

Added a minimal comment. You may want further changes.

&gt;&gt; Source/WebCore/css/CSSValueList.h:78
&gt;&gt; +    CSSValueListIterator(CSSValue* value) : m_position(0) { m_list = value-&gt;isValueList() ? static_cast&lt;CSSValueList*&gt;(value) : 0; }
&gt; 
&gt; We don’t need this to work with a 0 for CSSValue*?

done.

&gt;&gt; Source/WebCore/css/CSSValueList.h:79
&gt;&gt; +    bool hasValue() { return m_list &amp;&amp; m_position &lt; m_list-&gt;length(); }
&gt; 
&gt; I’m not really all that pleased with hasValue as the name for this. I don’t think it’s really natural to ask if an iterator &quot;has a value&quot;. It makes more sense to ask if an iterator “is at the end of the things it iterates”. I understand that it’s nice to have the sense reversed, but a name like atEnd seems better and more straightforward. Or maybe hasMoreValues is a good name?
&gt; 
&gt; This should be a const member function.

Changed the name to hasMore. I liked hasMoreValues as a suggestion, but given how often it is used I think we can get away with hasMore.
Change to const member function done.

&gt;&gt; Source/WebCore/css/CSSValueList.h:80
&gt;&gt; +    CSSValue* value() { ASSERT(hasValue()); return m_list-&gt;itemWithoutBoundsCheck(m_position); }
&gt; 
&gt; This should be a const member function.

done.

&gt;&gt; Source/WebCore/css/CSSValueList.h:82
&gt;&gt; +    CSSValue* second() { ASSERT(length() &gt; 1); return m_list-&gt;itemWithoutBoundsCheck(1); }
&gt; 
&gt; These are strange. They have nothing to do with iteration, so don’t seem to belong on an iterator. They would make more sense as CSSValueList member functions. I see how you want to use the iterator also as just a type-checked pointer, but that seems too “clever” to me and makes this a dual-purpose class.

Moved these to new class CSSValueListExpander to avoid the dual-purposing issue.

&gt;&gt; Source/WebCore/css/CSSValueList.h:84
&gt;&gt; +    size_t index() { return m_position; }
&gt; 
&gt; This should be a const member function.

done.

&gt;&gt; Source/WebCore/css/CSSValueList.h:85
&gt;&gt; +    size_t length() { return m_list ? m_list-&gt;length() : 0; }
&gt; 
&gt; You could write the hasValue function more simply using this function.
&gt; 
&gt;     return m_position &lt; length();
&gt; 
&gt; This should be a const member function.

done. good idea.

&gt;&gt; Source/WebCore/css/CSSValueList.h:87
&gt;&gt; +    CSSValueList* m_list;
&gt; 
&gt; A CSSValueList is a reference-counted object, and this holds a non-RefPtr pointer to it. This hides potential lifetime issues inside the class, which is not a step in the right direction.

Hmm... I thought about that, and ended up here because CSSValueListIterator is intended to be only ever stack allocated and short-lived, and also because CSSStyleSelector::applyProperty itself (the main user) doesn&apos;t have a RefPtr either.
Is there a better solution I haven&apos;t thought of, or a way to enforce the stack-allocation-only intent?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443365</commentid>
    <comment_count>6</comment_count>
      <attachid>102230</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-07-27 23:34:14 -0700</bug_when>
    <thetext>Created attachment 102230
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443366</commentid>
    <comment_count>7</comment_count>
      <attachid>102209</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-27 23:34:53 -0700</bug_when>
    <thetext>Comment on attachment 102209
Patch

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

&gt;&gt;&gt; Source/WebCore/css/CSSValueList.h:85
&gt;&gt;&gt; +    size_t length() { return m_list ? m_list-&gt;length() : 0; }
&gt;&gt; 
&gt;&gt; You could write the hasValue function more simply using this function.
&gt;&gt; 
&gt;&gt;     return m_position &lt; length();
&gt;&gt; 
&gt;&gt; This should be a const member function.
&gt; 
&gt; done. good idea.

It also occurs to me that this should be private on the iterator, since an iterator doesn’t have a length. It can be public on the list wrapper.

&gt;&gt;&gt; Source/WebCore/css/CSSValueList.h:87
&gt;&gt;&gt; +    CSSValueList* m_list;
&gt;&gt; 
&gt;&gt; A CSSValueList is a reference-counted object, and this holds a non-RefPtr pointer to it. This hides potential lifetime issues inside the class, which is not a step in the right direction.
&gt; 
&gt; Hmm... I thought about that, and ended up here because CSSValueListIterator is intended to be only ever stack allocated and short-lived, and also because CSSStyleSelector::applyProperty itself (the main user) doesn&apos;t have a RefPtr either.
&gt; Is there a better solution I haven&apos;t thought of, or a way to enforce the stack-allocation-only intent?

You’re asking the right question. What we want to know is how we can write this so that it’s hard to use it improperly. What we will need for the long term may be some kind of smart pointer class we can use instead of a raw pointer that can help us check at compile time and runtime that it’s OK to use the raw pointer. In many, many places and many cases where we use raw pointers we later learn that we need to use RefPtr instead because of more complex flow or reentrancy.

In the mean time I think we need to make sure there is some kind of comment about the usage. The raw pointer thing may seem harmless when writing the code but it’s one of the most dangerous idioms across the code base.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443368</commentid>
    <comment_count>8</comment_count>
      <attachid>102230</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-27 23:39:03 -0700</bug_when>
    <thetext>Comment on attachment 102230
Patch

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

OK as is, some small ideas for improvements.

&gt; Source/WebCore/css/CSSValueList.h:79
&gt; +    CSSValueListIterator(CSSValue* value) : m_position(0) { m_list = (value &amp;&amp; value-&gt;isValueList()) ? static_cast&lt;CSSValueList*&gt;(value) : 0; }

Could use construction syntax instead of assignment for m_list.

If you added one more function to CSSValueListExpander to get the value of the nth element in the list, then you could use CSSValueListExpander as the type of the m_list data member, which would save code in the constructor and obviate the need for a length function in this class.

&gt; Source/WebCore/css/CSSValueList.h:84
&gt; +    size_t length() const { return m_list ? m_list-&gt;length() : 0; }

Should be private.

&gt; Source/WebCore/css/CSSValueList.h:92
&gt; +    CSSValueListExpander(CSSValue* value) { m_list = (value &amp;&amp; value-&gt;isValueList()) ? static_cast&lt;CSSValueList*&gt;(value) : 0; }

Could use construction syntax instead of assignment for m_list.

Not sure that “expander” is quite the right name for this. It does two things: Type check that this is a list, and add convenience functions for accessing elements of the list. Can’t think of a better name, though. Maybe inspector?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443736</commentid>
    <comment_count>9</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-07-28 17:35:00 -0700</bug_when>
    <thetext>Thanks again for the feedback Darin, I&apos;ve incorporated all of those suggestions into the patch that I&apos;ll try to land shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443737</commentid>
    <comment_count>10</comment_count>
      <attachid>102316</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-07-28 17:37:19 -0700</bug_when>
    <thetext>Created attachment 102316
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443829</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-28 23:41:33 -0700</bug_when>
    <thetext>Attachment 102316 did not pass style-queue:

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

Source/WebCore/css/CSSValueList.h:80:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/css/CSSValueList.h:94:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443833</commentid>
    <comment_count>12</comment_count>
      <attachid>102336</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-07-29 00:08:46 -0700</bug_when>
    <thetext>Created attachment 102336
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443857</commentid>
    <comment_count>13</comment_count>
      <attachid>102336</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-29 02:23:54 -0700</bug_when>
    <thetext>Comment on attachment 102336
Patch for landing

Rejecting attachment 102336 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-03&apos;, &apos;--port...&quot; exit_code: 2

Last 500 characters of output:
ce.html = IMAGE
  fast/text/international/thai-line-breaks.html = IMAGE
  fast/transforms/shadows.html = IMAGE
  platform/chromium-linux/fast/text/international/complex-joining-using-gpos.html = IMAGE

Regressions: Unexpected tests timed out : (1)
  http/tests/inspector/resource-tree/resource-tree-reload.html = TIMEOUT

Regressions: Unexpected text diff mismatch : (3)
  fast/forms/implicit-submission.html = TEXT
  fast/js/parseInt.html = TEXT
  transitions/mismatched-shadow-styles.html = TEXT



Full output: http://queues.webkit.org/results/9267422</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444528</commentid>
    <comment_count>14</comment_count>
      <attachid>102336</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-31 22:32:56 -0700</bug_when>
    <thetext>Comment on attachment 102336
Patch for landing

Attachment 102336 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9290287

New failing tests:
fast/repaint/shadow-multiple-strict-vertical.html
http/tests/inspector/resource-tree/resource-tree-reload.html
fast/box-shadow/spread-multiple-normal.html
fast/repaint/shadow-multiple-strict-horizontal.html
fast/repaint/shadow-multiple-vertical.html
fast/box-shadow/spread-multiple-inset.html
fast/forms/input-spinbutton-capturing.html
svg/css/text-shadow-multiple.xhtml
fast/transforms/shadows.html
fast/forms/input-number-large-padding.html
fast/box-shadow/inset.html
fast/forms/validation-message-appearance.html
fast/repaint/shadow-multiple-horizontal.html
fast/forms/input-number-events.html
fast/forms/implicit-submission.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444545</commentid>
    <comment_count>15</comment_count>
      <attachid>102485</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-07-31 23:56:24 -0700</bug_when>
    <thetext>Created attachment 102485
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444559</commentid>
    <comment_count>16</comment_count>
      <attachid>102485</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-01 01:04:19 -0700</bug_when>
    <thetext>Comment on attachment 102485
Patch for landing

Rejecting attachment 102485 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-03&apos;, &apos;--port...&quot; exit_code: 2

Last 500 characters of output:
1f90c0929e70f0229ce21dbc72240c2460a477d3
r92102 = e43fd95032e0e1b01413d2d857606a1aaf8e9ba4
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.
Updating chromium port dependencies using gclient...

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/9283491</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444566</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-01 01:21:25 -0700</bug_when>
    <thetext>That one does look like a bit error.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444569</commentid>
    <comment_count>18</comment_count>
      <attachid>102485</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-01 01:32:00 -0700</bug_when>
    <thetext>Comment on attachment 102485
Patch for landing

Clearing flags on attachment: 102485

Committed r92106: &lt;http://trac.webkit.org/changeset/92106&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444570</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-01 01:32:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102209</attachid>
            <date>2011-07-27 18:15:13 -0700</date>
            <delta_ts>2011-07-27 23:34:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65297-20110728111510.patch</filename>
            <type>text/plain</type>
            <size>17167</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxODg3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDctMjcgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgaXRlcmF0
b3IgdG8gQ1NTVmFsdWVMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NTI5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAvIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBj
c3MvQ1NTUHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZh
bHVlOjppc0xlbmd0aCk6CisgICAgICAgIEFkZCBzaG9ydGhhbmQgdG8gZGV0ZXJtaW5lIGlmIHRo
aXMgcHJpbWl0aXZlIHZhbHVlIGlzIGEgbGVuZ3RoLgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcDoKKyAgICAgICAgVXNlIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIHRocm91Z2hvdXQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UGFnZVNpemVQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcGVy
YXRpb25zKToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1ZhbHVlTGlzdDo6Y29weSk6CisgICAgICAgIFVzZSBpdGVtV2l0aG91dEJvdW5kc0No
ZWNrKCkgaW5zdGVhZCBvZiBpdGVtKCkuCisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgor
ICAgICAgICBBZGQgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdDo6aXRlbSkKKyAgICAgICAgUHJvdmlkZSBpbmxpbmUg
ZGVmaW5pdGlvbiBvZiBpdGVtLgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVMaXN0SXRlcmF0
b3I6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlz
dEl0ZXJhdG9yOjpoYXNWYWx1ZSk6CisgICAgICAgIFJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50
IHBvc2l0aW9uIGlzIHZhbGlkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVMaXN0SXRlcmF0
b3I6OnZhbHVlKToKKyAgICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBhdCB0aGUgY3VycmVudCBwb3Np
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yOjpmaXJzdCk6Cisg
ICAgICAgIFJldHVybiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yOjpzZWNvbmQpOgorICAgICAgICBSZXR1cm4gdGhlIHNl
Y29uZCBpdGVtIGluIHRoZSBsaXN0LgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVMaXN0SXRl
cmF0b3I6Om5leHQpOgorICAgICAgICBNb3ZlIHRoZSBpdGVyYXRvciBmb3J3YXJkIHRvIHRoZSBu
ZXh0IGl0ZW0uCisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZUxpc3RJdGVyYXRvcjo6aW5kZXgp
OgorICAgICAgICBSZXR1cm4gdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGxpc3QuCisgICAg
ICAgIChXZWJDb3JlOjpDU1NWYWx1ZUxpc3RJdGVyYXRvcjo6bGVuZ3RoKToKKyAgICAgICAgUmV0
dXJuIHRoZSBzaXplIG9mIHRoZSB1bmRlcmx5aW5nIGxpc3QuCisKIDIwMTEtMDctMjcgIFByYXRp
ayBTb2xhbmtpICA8cHNvbGFua2lAYXBwbGUuY29tPgogCiAgICAgICAgIEluY29ycmVjdCBhcmd1
bWVudHMgcGFzc2VkIHRvIExPRyBzdGF0ZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
cmltaXRpdmVWYWx1ZS5oCShyZXZpc2lvbiA5MTgwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDggQEAgcHVi
bGljOgogICAgIHN0YXRpYyBib29sIGlzVW5pdFR5cGVMZW5ndGgoaW50IHR5cGUpIHsgcmV0dXJu
ICh0eXBlID4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFICYmIHR5cGUgPCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkVN
UzsgfQogCisgICAgYm9vbCBpc0xlbmd0aCgpIHsgcmV0dXJuIGlzVW5pdFR5cGVMZW5ndGgobV90
eXBlKTsgfQorCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0
ZUlkZW50aWZpZXIoaW50IGlkZW50aWZpZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmlt
aXRpdmVWYWx1ZShpZGVudGlmaWVyKSk7IH0KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY3JlYXRlQ29sb3IodW5zaWduZWQgcmdiVmFsdWUpIHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDU1NQcmltaXRpdmVWYWx1ZShyZ2JWYWx1ZSkpOyB9CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZShkb3VibGUgdmFsdWUsIFVuaXRUeXBlcyB0
eXBlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUsIHR5cGUp
KTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNp
b24gOTE4MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5MSwxMSArMTkxLDEwIEBAIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBt
X3N0eWxlLT5hY2Nlc3NBbmkKIHNpemVfdCBjaGlsZEluZGV4ID0gMDsgXAogaWYgKHZhbHVlLT5p
c1ZhbHVlTGlzdCgpKSB7IFwKICAgICAvKiBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRv
IGFuIGFuaW1hdGlvbiwgY3JlYXRpbmcgbmV3IGFuaW1hdGlvbnMgYXMgbmVlZGVkLiAqLyBcCi0g
ICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2
YWx1ZSk7IFwKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHZhbHVlTGlzdC0+bGVu
Z3RoKCk7IGkrKykgeyBcCisgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gQ1NTVmFs
dWVMaXN0SXRlcmF0b3IodmFsdWUpOyBpLmhhc1ZhbHVlKCk7IGkubmV4dCgpKSB7IFwKICAgICAg
ICAgaWYgKGNoaWxkSW5kZXggPD0gbGlzdC0+c2l6ZSgpKSBcCiAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7IFwKLSAgICAgICAgbWFwQW5pbWF0aW9uIyNQcm9w
KGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpKTsgXAorICAgICAgICBtYXBBbmltYXRpb24jI1Byb3AobGlzdC0+YW5pbWF0aW9u
KGNoaWxkSW5kZXgpLCBpLnZhbHVlKCkpOyBcCiAgICAgICAgICsrY2hpbGRJbmRleDsgXAogICAg
IH0gXAogfSBlbHNlIHsgXApAQCAtMjQxLDExICsyNDAsMTAgQEAgQW5pbWF0aW9uTGlzdCogbGlz
dCA9IG1fc3R5bGUtPmFjY2Vzc1RyYQogc2l6ZV90IGNoaWxkSW5kZXggPSAwOyBcCiBpZiAodmFs
dWUtPmlzVmFsdWVMaXN0KCkpIHsgXAogICAgIC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0
IGludG8gYSB0cmFuc2l0aW9uLCBjcmVhdGluZyBuZXcgYW5pbWF0aW9ucyBhcyBuZWVkZWQuICov
IFwKLSAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlz
dCo+KHZhbHVlKTsgXAotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdmFsdWVMaXN0
LT5sZW5ndGgoKTsgaSsrKSB7IFwKKyAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSBD
U1NWYWx1ZUxpc3RJdGVyYXRvcih2YWx1ZSk7IGkuaGFzVmFsdWUoKTsgaS5uZXh0KCkpIHsgXAog
ICAgICAgICBpZiAoY2hpbGRJbmRleCA8PSBsaXN0LT5zaXplKCkpIFwKICAgICAgICAgICAgIGxp
c3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTsgXAotICAgICAgICBtYXBBbmltYXRpb24j
I1Byb3AobGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSkpOyBcCisgICAgICAgIG1hcEFuaW1hdGlvbiMjUHJvcChsaXN0LT5hbmlt
YXRpb24oY2hpbGRJbmRleCksIGkudmFsdWUoKSk7IFwKICAgICAgICAgKytjaGlsZEluZGV4OyBc
CiAgICAgfSBcCiB9IGVsc2UgeyBcCkBAIC00MDEwLDEwICs0MDA4LDkgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVl
KTsKLSAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwogCiAjaWYgRU5BQkxFKENTU19S
RUdJT05TKQotICAgICAgICBpZiAobGVuID09IDEgJiYgbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygwKS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgIGlmIChsaXN0LT5sZW5ndGgo
KSA9PSAxICYmIGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCktPmlzUHJpbWl0aXZlVmFs
dWUoKSkgewogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4obGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygwKSk7CiAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19GUk9NX0ZMT1cpIHsKICAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRSZWdpb25UaHJlYWQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwo
KSk7CkBAIC00MDIzLDggKzQwMjAsOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJv
cGVydHkoaW50CiAjZW5kaWYKIAogICAgICAgICBib29sIGRpZFNldCA9IGZhbHNlOwotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSog
aXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgIGZvciAoQ1NT
VmFsdWVMaXN0SXRlcmF0b3IgaSA9IENTU1ZhbHVlTGlzdEl0ZXJhdG9yKGxpc3QpOyBpLmhhc1Zh
bHVlKCk7IGkubmV4dCgpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUo
KTsKICAgICAgICAgICAgIGlmIChpdGVtLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkgewogICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZSo+KGl0ZW0pLT5nZW5lcmF0ZWRJbWFnZSgpLCBkaWRTZXQpOwogICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CkBAIC00MTA3LDE3ICs0MTA0LDE2IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgfQogICAgICAgICBpZiAodmFs
dWUtPmlzVmFsdWVMaXN0KCkpIHsKICAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0
YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAgICAgIHNpemVfdCBsZW5n
dGggPSBsaXN0LT5sZW5ndGgoKTsKLSAgICAgICAgICAgIFF1b3Rlc0RhdGEqIGRhdGEgPSBRdW90
ZXNEYXRhOjpjcmVhdGUobGVuZ3RoKTsKKyAgICAgICAgICAgIFF1b3Rlc0RhdGEqIGRhdGEgPSBR
dW90ZXNEYXRhOjpjcmVhdGUobGlzdC0+bGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKCFkYXRh
KQogICAgICAgICAgICAgICAgIHJldHVybjsgLy8gT3V0IG9mIG1lbW9yeQogICAgICAgICAgICAg
U3RyaW5nKiBxdW90ZXMgPSBkYXRhLT5kYXRhKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0g
PSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgZm9yIChDU1NW
YWx1ZUxpc3RJdGVyYXRvciBpID0gQ1NTVmFsdWVMaXN0SXRlcmF0b3IobGlzdCk7IGkuaGFzVmFs
dWUoKTsgaS5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFs
dWUoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsK
ICAgICAgICAgICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4oaXRlbSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLT5w
cmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwotICAgICAg
ICAgICAgICAgIHF1b3Rlc1tpXSA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgIHF1b3Rlc1tpLmluZGV4KCldID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0
cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90
ZXMoYWRvcHRSZWYoZGF0YSkpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7
CkBAIC00MTUzLDE3ICs0MTQ5LDE1IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0
aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgIGludCBsZW4gPSBsaXN0LT5s
ZW5ndGgoKTsKICAgICAgICAgRm9udEZhbWlseSYgZmlyc3RGYW1pbHkgPSBmb250RGVzY3JpcHRp
b24uZmlyc3RGYW1pbHkoKTsKICAgICAgICAgRm9udEZhbWlseSogY3VyckZhbWlseSA9IDA7Ci0g
ICAgICAgIAorCiAgICAgICAgIC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5
IHByb3BlcnR5LCB3ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgogICAgICAgICBi
b29sIG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplID0gZm9udERlc2NyaXB0aW9uLnVzZUZp
eGVkRGVmYXVsdFNpemUoKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1p
bHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBsaXN0LT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9y
IGkgPSBDU1NWYWx1ZUxpc3RJdGVyYXRvcih2YWx1ZSk7IGkuaGFzVmFsdWUoKTsgaS5uZXh0KCkp
IHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwogICAgICAgICAgICAg
aWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKQEAgLTQyMzksMTEgKzQyMzMsOSBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCAqbGlzdCA9IHN0YXRpY19jYXN0PENTU1Zh
bHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsK
LSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgICAgICBm
b3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSBDU1NWYWx1ZUxpc3RJdGVyYXRvcih2YWx1ZSk7
IGkuaGFzVmFsdWUoKTsgaS5uZXh0KCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Q1NTVmFsdWUgKml0ZW0gPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAg
ICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGlm
ICghaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4oaXRlbSk7CkBAIC00NDQ0LDEzICs0NDM2LDExIEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NWYWx1ZUxpc3QgKmxpc3Qg
PSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgIGludCBsZW4gPSBs
aXN0LT5sZW5ndGgoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewot
ICAgICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soaSk7CisgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IENTU1ZhbHVl
TGlzdEl0ZXJhdG9yKHZhbHVlKTsgaS5oYXNWYWx1ZSgpOyBpLm5leHQoKSkgeworICAgICAgICAg
ICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgIGlmICghY3Vy
clZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4obGlz
dC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7CisgICAgICAgICAgICBTaGFkb3dWYWx1ZSog
aXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVlKTsKICAgICAgICAgICAg
IGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1l
bnRTdHlsZSwgem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNvbXB1
dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwog
ICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxl
bmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOwpA
QCAtNDQ2MSw5ICs0NDUxLDkgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5
KGludAogICAgICAgICAgICAgICAgIGNvbG9yID0gZ2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWUo
aXRlbS0+Y29sb3IuZ2V0KCkpOwogICAgICAgICAgICAgT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRv
d0RhdGEgPSBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSh4LCB5LCBibHVyLCBzcHJlYWQsIHNoYWRv
d1N0eWxlLCBpZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgY29sb3IuaXNWYWxpZCgp
ID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQpKTsKICAgICAgICAgICAgIGlmIChpZCA9PSBD
U1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFNo
YWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgaSAvKiBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBp
cyBub3QgdGhlIGZpcnN0eSBlbnRyeSAqLyk7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
VGV4dFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgIWkuaW5kZXgoKSAvKiBhZGQgdG8gdGhl
IGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0eSBlbnRyeSAqLyk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVs
ZWFzZSgpLCBpIC8qIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3R5IGVu
dHJ5ICovKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3hTaGFkb3coc2hhZG93RGF0
YS5yZWxlYXNlKCksICFpLmluZGV4KCkgLyogYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90
IHRoZSBmaXJzdHkgZW50cnkgKi8pOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC01Mjc2LDQ4ICs1MjY2LDQyIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQYWdlU2l6ZVByb3BlcnR5KENT
U1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBtX3N0eWxlLT5yZXNldFBhZ2VTaXplVHlwZSgpOwotICAg
IGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBDU1NWYWx1
ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAg
ICBMZW5ndGggd2lkdGg7Ci0gICAgTGVuZ3RoIGhlaWdodDsKKyAgICBMZW5ndGggd2lkdGgsIGhl
aWdodDsKICAgICBQYWdlU2l6ZVR5cGUgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE87Ci0g
ICAgc3dpdGNoICh2YWx1ZUxpc3QtPmxlbmd0aCgpKSB7CisgICAgQ1NTVmFsdWVMaXN0SXRlcmF0
b3IgaXRlcmF0b3IgPSBDU1NWYWx1ZUxpc3RJdGVyYXRvcih2YWx1ZSk7CisgICAgc3dpdGNoIChp
dGVyYXRvci5sZW5ndGgoKSkgewogICAgIGNhc2UgMjogewogICAgICAgICAvLyA8bGVuZ3RoPnsy
fSB8IDxwYWdlLXNpemU+IDxvcmllbnRhdGlvbj4KICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFH
RV9TSVpFX1JFU09MVkVEOwotICAgICAgICBpZiAoIXZhbHVlTGlzdC0+aXRlbSgwKS0+aXNQcmlt
aXRpdmVWYWx1ZSgpIHx8ICF2YWx1ZUxpc3QtPml0ZW0oMSktPmlzUHJpbWl0aXZlVmFsdWUoKSkK
KyAgICAgICAgaWYgKCFpdGVyYXRvci5maXJzdCgpLT5pc1ByaW1pdGl2ZVZhbHVlKCkgfHwgIWl0
ZXJhdG9yLnNlY29uZCgpLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZTAgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlTGlzdC0+aXRlbSgwKSk7Ci0gICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZTEgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlTGlzdC0+aXRlbSgxKSk7Ci0gICAgICAgIGludCB0eXBlMCA9IHByaW1pdGl2
ZVZhbHVlMC0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAgICBpbnQgdHlwZTEgPSBwcmltaXRpdmVW
YWx1ZTEtPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjpp
c1VuaXRUeXBlTGVuZ3RoKHR5cGUwKSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmly
c3QgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLmZpcnN0KCkpOwor
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihpdGVyYXRvci5zZWNvbmQoKSk7CisgICAgICAgIGlmIChmaXJzdC0+aXNMZW5n
dGgoKSkgewogICAgICAgICAgICAgLy8gPGxlbmd0aD57Mn0KLSAgICAgICAgICAgIGlmICghQ1NT
UHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZTEpKQorICAgICAgICAgICAgaWYg
KCFzZWNvbmQtPmlzTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZTAtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgp
LCBtX3Jvb3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAgaGVpZ2h0ID0gcHJpbWl0aXZlVmFs
dWUxLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsK
KyAgICAgICAgICAgIHdpZHRoID0gZmlyc3QtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgp
LCBtX3Jvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21w
dXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIC8vIDxwYWdlLXNpemU+IDxvcmllbnRhdGlvbj4KICAgICAg
ICAgICAgIC8vIFRoZSB2YWx1ZSBvcmRlciBpcyBndWFyYW50ZWVkLiBTZWUgQ1NTUGFyc2VyOjpw
YXJzZVNpemVQYXJhbWV0ZXIuCi0gICAgICAgICAgICBpZiAoIXBhZ2VTaXplRnJvbU5hbWUocHJp
bWl0aXZlVmFsdWUwLCBwcmltaXRpdmVWYWx1ZTEsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAg
ICAgaWYgKCFwYWdlU2l6ZUZyb21OYW1lKGZpcnN0LCBzZWNvbmQsIHdpZHRoLCBoZWlnaHQpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgY2FzZSAxOiB7CiAgICAgICAgIC8vIDxsZW5ndGg+IHwgYXV0byB8IDxwYWdlLXNpemU+
IHwgWyBwb3J0cmFpdCB8IGxhbmRzY2FwZV0KLSAgICAgICAgaWYgKCF2YWx1ZUxpc3QtPml0ZW0o
MCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpdGVyYXRvci5maXJzdCgpLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWVMaXN0LT5pdGVtKDApKTsKLSAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1
ZS0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAgICBpZiAoQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5p
dFR5cGVMZW5ndGgodHlwZSkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVyYXRvci5maXJzdCgp
KTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7CiAgICAgICAgICAg
ICAvLyA8bGVuZ3RoPgogICAgICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09M
VkVEOwogICAgICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lE
RU5UKQorICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgIT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKQEAgLTYyNzEsMTQgKzYyNTUsMTIgQEAgYm9vbCBDU1NT
dHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcAogCiAgICAgZmxvYXQgem9vbUZhY3RvciA9
IHN0eWxlID8gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA6IDE7CiAgICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zOwotICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENT
U1ZhbHVlTGlzdCo+KGluVmFsdWUpOwotICAgIHVuc2lnbmVkIHNpemUgPSBsaXN0LT5sZW5ndGgo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIENT
U1ZhbHVlKiBjdXJyVmFsdWUgPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAg
IGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IENTU1ZhbHVlTGlzdEl0ZXJhdG9yKGluVmFs
dWUpOyBpLmhhc1ZhbHVlKCk7IGkubmV4dCgpKSB7CisgICAgICAgIENTU1ZhbHVlKiBjdXJyVmFs
dWUgPSBpLnZhbHVlKCk7CiAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1dlYktpdENTU1RyYW5z
Zm9ybVZhbHVlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZSogdHJhbnNmb3JtVmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZSo+KGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAgICBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdHJhbnNmb3JtVmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZSo+KGkudmFsdWUoKSk7CiAgICAgICAgIGlmICghdHJhbnNmb3Jt
VmFsdWUtPmxlbmd0aCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCShyZXZpc2lvbiA5MTgwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsNiBAQCBD
U1NWYWx1ZUxpc3Q6On5DU1NWYWx1ZUxpc3QoKQogewogfQogCi1DU1NWYWx1ZSogQ1NTVmFsdWVM
aXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBtX3ZhbHVlcy5z
aXplKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3ZhbHVlc1tpbmRleF0uZ2V0
KCk7Ci19Ci0KIHVuc2lnbmVkIHNob3J0IENTU1ZhbHVlTGlzdDo6Y3NzVmFsdWVUeXBlKCkgY29u
c3QKIHsKICAgICByZXR1cm4gQ1NTX1ZBTFVFX0xJU1Q7CkBAIC05OCw3ICs5MSw3IEBAIFBhc3NS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NWYWx1ZUxpc3Q6OmMKIHsKICAgICBQYXNzUmVmUHRyPENT
U1ZhbHVlTGlzdD4gbmV3TGlzdCA9IG1faXNTcGFjZVNlcGFyYXRlZCA/IGNyZWF0ZVNwYWNlU2Vw
YXJhdGVkKCkgOiBjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBtX3ZhbHVlcy5zaXplKCk7IGluZGV4KyspCi0gICAgICAgIG5ld0xpc3Qt
PmFwcGVuZChpdGVtKGluZGV4KSk7CisgICAgICAgIG5ld0xpc3QtPmFwcGVuZChpdGVtV2l0aG91
dEJvdW5kc0NoZWNrKGluZGV4KSk7CiAgICAgcmV0dXJuIG5ld0xpc3Q7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgJKHJldmlzaW9uIDkxODAyKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ZhbHVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5DU1NWYWx1ZUxpc3QoKTsKIAogICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KLSAgICBDU1NWYWx1ZSogaXRlbSh1
bnNpZ25lZCk7CisgICAgQ1NTVmFsdWUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGlu
ZGV4IDwgbV92YWx1ZXMuc2l6ZSgpID8gbV92YWx1ZXNbaW5kZXhdLmdldCgpIDogMDsgfQogICAg
IENTU1ZhbHVlKiBpdGVtV2l0aG91dEJvdW5kc0NoZWNrKHVuc2lnbmVkIGluZGV4KSB7IHJldHVy
biBtX3ZhbHVlc1tpbmRleF0uZ2V0KCk7IH0KIAogICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8
Q1NTVmFsdWU+KTsKQEAgLTczLDYgKzczLDIyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzU3Bh
Y2VTZXBhcmF0ZWQ7CiB9OwogCitjbGFzcyBDU1NWYWx1ZUxpc3RJdGVyYXRvciB7CitwdWJsaWM6
CisgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IoQ1NTVmFsdWUqIHZhbHVlKSA6IG1fcG9zaXRpb24o
MCkgeyBtX2xpc3QgPSB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSA/IHN0YXRpY19jYXN0PENTU1ZhbHVl
TGlzdCo+KHZhbHVlKSA6IDA7IH0KKyAgICBib29sIGhhc1ZhbHVlKCkgeyByZXR1cm4gbV9saXN0
ICYmIG1fcG9zaXRpb24gPCBtX2xpc3QtPmxlbmd0aCgpOyB9CisgICAgQ1NTVmFsdWUqIHZhbHVl
KCkgeyBBU1NFUlQoaGFzVmFsdWUoKSk7IHJldHVybiBtX2xpc3QtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2sobV9wb3NpdGlvbik7IH0KKyAgICBDU1NWYWx1ZSogZmlyc3QoKSB7IEFTU0VSVChsZW5n
dGgoKSA+IDApOyByZXR1cm4gbV9saXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOyB9Cisg
ICAgQ1NTVmFsdWUqIHNlY29uZCgpIHsgQVNTRVJUKGxlbmd0aCgpID4gMSk7IHJldHVybiBtX2xp
c3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSk7IH0KKyAgICB2b2lkIG5leHQoKSB7IG1fcG9z
aXRpb24rKzsgfQorICAgIHNpemVfdCBpbmRleCgpIHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAg
ICBzaXplX3QgbGVuZ3RoKCkgeyByZXR1cm4gbV9saXN0ID8gbV9saXN0LT5sZW5ndGgoKSA6IDA7
IH0KK3ByaXZhdGU6CisgICAgQ1NTVmFsdWVMaXN0KiBtX2xpc3Q7CisgICAgc2l6ZV90IG1fcG9z
aXRpb247Cit9OworCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIENTU1Zh
bHVlTGlzdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102230</attachid>
            <date>2011-07-27 23:34:14 -0700</date>
            <delta_ts>2011-07-28 17:37:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65297-20110728163411.patch</filename>
            <type>text/plain</type>
            <size>17890</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxODk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDctMjcgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgaXRlcmF0
b3IgdG8gQ1NTVmFsdWVMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NTI5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAvIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBj
c3MvQ1NTUHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZh
bHVlOjppc0xlbmd0aCk6CisgICAgICAgIEFkZCBzaG9ydGhhbmQgdG8gZGV0ZXJtaW5lIGlmIHRo
aXMgcHJpbWl0aXZlIHZhbHVlIGlzIGEgbGVuZ3RoLgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcDoKKyAgICAgICAgVXNlIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIHRocm91Z2hvdXQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UGFnZVNpemVQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcGVy
YXRpb25zKToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1ZhbHVlTGlzdDo6Y29weSk6CisgICAgICAgIFVzZSBpdGVtV2l0aG91dEJvdW5kc0No
ZWNrKCkgaW5zdGVhZCBvZiBpdGVtKCkuCisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgor
ICAgICAgICBBZGQgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdDo6aXRlbSkKKyAgICAgICAgUHJvdmlkZSBpbmxpbmUg
ZGVmaW5pdGlvbiBvZiBpdGVtLgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVMaXN0SXRlcmF0
b3I6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlz
dEl0ZXJhdG9yOjpoYXNNb3JlKToKKyAgICAgICAgUmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG1v
cmUgdmFsdWVzIHRvIGNvbnN1bWUsIGluY2x1ZGluZyB0aGUgY3VycmVudCB2YWx1ZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yOjp2YWx1ZSk6CisgICAgICAgIFJldHVy
biB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpD
U1NWYWx1ZUxpc3RJdGVyYXRvcjo6bmV4dCk6CisgICAgICAgIE1vdmUgdGhlIGl0ZXJhdG9yIGZv
cndhcmQgdG8gdGhlIG5leHQgaXRlbS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEl0
ZXJhdG9yOjppbmRleCk6CisgICAgICAgIFJldHVybiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0
aGUgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yOjpsZW5ndGgp
OgorICAgICAgICBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHVuZGVybHlpbmcgbGlzdC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEV4cGFuZGVyOjpmaXJzdCk6CisgICAgICAgIFJldHVy
biB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVl
TGlzdEV4cGFuZGVyOjpzZWNvbmQpOgorICAgICAgICBSZXR1cm4gdGhlIHNlY29uZCBpdGVtIGlu
IHRoZSBsaXN0LgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVMaXN0RXhwYW5kZXI6Omxlbmd0
aCk6CisgICAgICAgIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgdW5kZXJseWluZyBsaXN0LgorCiAy
MDExLTA3LTI3ICBGYWR5IFNhbXVlbCAgPGZzYW11ZWxAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFBvcHVwcyBvbiBDaHJvbWl1bSBub3cgY2hlY2sgdGhlIG1pbmltdW0gcm93IGhlaWdodCBzZXQg
dGhyb3VnaCB0aGUgQ2hyb21pdW0gV2ViS2l0IEFQSSB3aGVuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAkocmV2aXNpb24gOTE4OTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw4
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc1VuaXRUeXBlTGVuZ3RoKGludCB0eXBlKSB7
IHJldHVybiAodHlwZSA+IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiB0eXBl
IDwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpIHx8CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1JFTVM7IH0KIAorICAgIGJvb2wgaXNMZW5ndGgoKSBjb25zdCB7IHJldHVybiBpc1VuaXRU
eXBlTGVuZ3RoKG1fdHlwZSk7IH0KKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjcmVhdGVJZGVudGlmaWVyKGludCBpZGVudGlmaWVyKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoaWRlbnRpZmllcikpOyB9CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZUNvbG9yKHVuc2lnbmVkIHJnYlZhbHVlKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTUHJpbWl0aXZlVmFsdWUocmdiVmFsdWUpKTsgfQogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGUoZG91YmxlIHZhbHVl
LCBVbml0VHlwZXMgdHlwZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENTU1ByaW1pdGl2ZVZhbHVl
KHZhbHVlLCB0eXBlKSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAJKHJldmlzaW9uIDkxODk3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsMTEgKzE5MSwxMCBAQCBBbmltYXRpb25M
aXN0KiBsaXN0ID0gbV9zdHlsZS0+YWNjZXNzQW5pCiBzaXplX3QgY2hpbGRJbmRleCA9IDA7IFwK
IGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgeyBcCiAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFu
ZCBwdXQgaXQgaW50byBhbiBhbmltYXRpb24sIGNyZWF0aW5nIG5ldyBhbmltYXRpb25zIGFzIG5l
ZWRlZC4gKi8gXAotICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NT
VmFsdWVMaXN0Kj4odmFsdWUpOyBcCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB2
YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsgXAorICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0
b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsgXAogICAgICAgICBpZiAo
Y2hpbGRJbmRleCA8PSBsaXN0LT5zaXplKCkpIFwKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChB
bmltYXRpb246OmNyZWF0ZSgpKTsgXAotICAgICAgICBtYXBBbmltYXRpb24jI1Byb3AobGlzdC0+
YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aSkpOyBcCisgICAgICAgIG1hcEFuaW1hdGlvbiMjUHJvcChsaXN0LT5hbmltYXRpb24oY2hpbGRJ
bmRleCksIGkudmFsdWUoKSk7IFwKICAgICAgICAgKytjaGlsZEluZGV4OyBcCiAgICAgfSBcCiB9
IGVsc2UgeyBcCkBAIC0yNDEsMTEgKzI0MCwxMCBAQCBBbmltYXRpb25MaXN0KiBsaXN0ID0gbV9z
dHlsZS0+YWNjZXNzVHJhCiBzaXplX3QgY2hpbGRJbmRleCA9IDA7IFwKIGlmICh2YWx1ZS0+aXNW
YWx1ZUxpc3QoKSkgeyBcCiAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50byBh
IHRyYW5zaXRpb24sIGNyZWF0aW5nIG5ldyBhbmltYXRpb25zIGFzIG5lZWRlZC4gKi8gXAotICAg
IENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFs
dWUpOyBcCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxlbmd0
aCgpOyBpKyspIHsgXAorICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBp
Lmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsgXAogICAgICAgICBpZiAoY2hpbGRJbmRleCA8PSBs
aXN0LT5zaXplKCkpIFwKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0
ZSgpKTsgXAotICAgICAgICBtYXBBbmltYXRpb24jI1Byb3AobGlzdC0+YW5pbWF0aW9uKGNoaWxk
SW5kZXgpLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOyBcCisgICAgICAg
IG1hcEFuaW1hdGlvbiMjUHJvcChsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIGkudmFsdWUo
KSk7IFwKICAgICAgICAgKytjaGlsZEluZGV4OyBcCiAgICAgfSBcCiB9IGVsc2UgeyBcCkBAIC00
MDE4LDEyICs0MDE2LDEwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShp
bnQKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPih2YWx1ZSk7Ci0gICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLQogI2lmIEVO
QUJMRShDU1NfUkVHSU9OUykKLSAgICAgICAgaWYgKGxlbiA9PSAxICYmIGxpc3QtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soMCktPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4obGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CisgICAgICAgIENTU1ZhbHVl
TGlzdEV4cGFuZGVyIGV4cGFuZGVyID0gdmFsdWU7CisgICAgICAgIGlmIChleHBhbmRlci5sZW5n
dGgoKSA9PSAxICYmIGV4cGFuZGVyLmZpcnN0KCktPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4oZXhwYW5kZXItPmZpcnN0KCkpOwogICAgICAgICAgICAgaWYgKGNv
bnRlbnRWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRlJP
TV9GTE9XKSB7CiAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0UmVnaW9uVGhyZWFkKGNvbnRl
bnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCkpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTQwMzIsOCArNDAyOCw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQKICNlbmRpZgogCiAgICAgICAgIGJvb2wgZGlkU2V0ID0gZmFsc2U7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBp
dGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgZm9yIChDU1NW
YWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewor
ICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7CiAgICAgICAgICAgICBpZiAo
aXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRDb250ZW50KHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKS0+
Z2VuZXJhdGVkSW1hZ2UoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVl
OwpAQCAtNDExNiwxNyArNDExMiwxNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJv
cGVydHkoaW50CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7
CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gbGlzdC0+bGVuZ3RoKCk7
Ci0gICAgICAgICAgICBRdW90ZXNEYXRhKiBkYXRhID0gUXVvdGVzRGF0YTo6Y3JlYXRlKGxlbmd0
aCk7CisgICAgICAgICAgICBRdW90ZXNEYXRhKiBkYXRhID0gUXVvdGVzRGF0YTo6Y3JlYXRlKGxp
c3QtPmxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghZGF0YSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47IC8vIE91dCBvZiBtZW1vcnkKICAgICAgICAgICAgIFN0cmluZyogcXVvdGVzID0gZGF0
YS0+ZGF0YSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9
IGxpc3Q7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAgICAgICAgIENTU1Zh
bHVlKiBpdGVtID0gaS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChpdGVtLT5pc1By
aW1pdGl2ZVZhbHVlKCkpOwogICAgICAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKICAgICAgICAgICAgICAgICBBU1NFUlQo
cHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1NUUklORyk7Ci0gICAgICAgICAgICAgICAgcXVvdGVzW2ldID0gcHJpbWl0aXZlVmFsdWUtPmdl
dFN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgcXVvdGVzW2kuaW5kZXgoKV0gPSBwcmlt
aXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IG1fc3R5bGUtPnNldFF1b3RlcyhhZG9wdFJlZihkYXRhKSk7CiAgICAgICAgIH0gZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUpIHsKQEAgLTQxNjIsMTcgKzQxNTcsMTUgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlz
dCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIENTU1ZhbHVl
TGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAg
aW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwogICAgICAgICBGb250RmFtaWx5JiBmaXJzdEZhbWls
eSA9IGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOwogICAgICAgICBGb250RmFtaWx5KiBj
dXJyRmFtaWx5ID0gMDsKLSAgICAgICAgCisKICAgICAgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4g
YSBuZXcgZm9udC1mYW1pbHkgcHJvcGVydHksIHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBm
YW1pbHkuCiAgICAgICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250
RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpOwogICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKIAotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSog
aXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgIGZvciAoQ1NT
VmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsK
KyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwogICAgICAgICAgICAgaWYg
KCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKQEAgLTQyNDgsMTEgKzQyNDEsOSBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCAqbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVl
TGlzdCo+KHZhbHVlKTsKLSAgICAgICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgICAgICBmb3Ig
KENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlICppdGVtID0gbGlzdC0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRl
bSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFs
dWUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwpAQCAt
NDQ1MywxMyArNDQ0NCwxMSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHko
aW50CiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgQ1NTVmFsdWVMaXN0ICpsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVM
aXN0Kj4odmFsdWUpOwotICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBj
dXJyVmFsdWUgPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICBmb3Ig
KENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgp
KSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgpOwogICAgICAg
ICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hh
ZG93VmFsdWUqPihsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKKyAgICAgICAgICAg
IFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihjdXJyVmFsdWUp
OwogICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUo
KSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIGludCB5ID0g
aXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwg
em9vbUZhY3Rvcik7CiAgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5i
bHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29t
RmFjdG9yKSA6IDA7CkBAIC00NDcwLDkgKzQ0NTksOSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICAgICAgY29sb3IgPSBnZXRDb2xvckZyb21Q
cmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CiAgICAgICAgICAgICBPd25QdHI8U2hh
ZG93RGF0YT4gc2hhZG93RGF0YSA9IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKHgsIHksIGJsdXIs
IHNwcmVhZCwgc2hhZG93U3R5bGUsIGlkID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBj
b2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCkpOwogICAgICAgICAg
ICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpIC8qIGFkZCB0byB0aGUg
bGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3R5IGVudHJ5ICovKTsKKyAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCAhaS5pbmRleCgp
KTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveFNoYWRvdyhzaGFk
b3dEYXRhLnJlbGVhc2UoKSwgaSAvKiBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhl
IGZpcnN0eSBlbnRyeSAqLyk7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm94U2hhZG93
KHNoYWRvd0RhdGEucmVsZWFzZSgpLCAhaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlm
IHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQogICAgICAgICB9CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC01Mjg1LDQ4ICs1Mjc0LDQzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBw
bHlQcm9wZXJ0eShpbnQKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQYWdlU2l6ZVByb3Bl
cnR5KENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBtX3N0eWxlLT5yZXNldFBhZ2VTaXplVHlwZSgp
OwotICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBD
U1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVl
KTsKICAgICBMZW5ndGggd2lkdGg7CiAgICAgTGVuZ3RoIGhlaWdodDsKICAgICBQYWdlU2l6ZVR5
cGUgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE87Ci0gICAgc3dpdGNoICh2YWx1ZUxpc3Qt
Pmxlbmd0aCgpKSB7CisgICAgQ1NTVmFsdWVMaXN0RXhwYW5kZXIgZXhwYW5kZXIgPSB2YWx1ZTsK
KyAgICBzd2l0Y2ggKGV4cGFuZGVyLmxlbmd0aCgpKSB7CiAgICAgY2FzZSAyOiB7CiAgICAgICAg
IC8vIDxsZW5ndGg+ezJ9IHwgPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgogICAgICAgICBwYWdl
U2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7Ci0gICAgICAgIGlmICghdmFsdWVMaXN0LT5p
dGVtKDApLT5pc1ByaW1pdGl2ZVZhbHVlKCkgfHwgIXZhbHVlTGlzdC0+aXRlbSgxKS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWV4cGFuZGVyLmZpcnN0KCktPmlzUHJpbWl0aXZl
VmFsdWUoKSB8fCAhZXhwYW5kZXIuc2Vjb25kKCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
MCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVMaXN0LT5pdGVtKDApKTsK
LSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlMSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVMaXN0LT5pdGVtKDEpKTsKLSAgICAgICAgaW50IHR5
cGUwID0gcHJpbWl0aXZlVmFsdWUwLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgIGludCB0eXBl
MSA9IHByaW1pdGl2ZVZhbHVlMS0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAgICBpZiAoQ1NTUHJp
bWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZTApKSB7CisgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBmaXJzdCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oZXhwYW5k
ZXIuZmlyc3QoKSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGV4cGFuZGVyLnNlY29uZCgpKTsKKyAgICAgICAgaWYg
KGZpcnN0LT5pc0xlbmd0aCgpKSB7CiAgICAgICAgICAgICAvLyA8bGVuZ3RoPnsyfQotICAgICAg
ICAgICAgaWYgKCFDU1NQcmltaXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlMSkpCisg
ICAgICAgICAgICBpZiAoIXNlY29uZC0+aXNMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlMC0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBoZWlnaHQg
PSBwcmltaXRpdmVWYWx1ZTEtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCBtX3Jvb3RF
bGVtZW50U3R5bGUpOworICAgICAgICAgICAgd2lkdGggPSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAgICBoZWlnaHQg
PSBzZWNvbmQtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5
bGUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9yaWVu
dGF0aW9uPgogICAgICAgICAgICAgLy8gVGhlIHZhbHVlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNl
ZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlci4KLSAgICAgICAgICAgIGlmICghcGFnZVNp
emVGcm9tTmFtZShwcmltaXRpdmVWYWx1ZTAsIHByaW1pdGl2ZVZhbHVlMSwgd2lkdGgsIGhlaWdo
dCkpCisgICAgICAgICAgICBpZiAoIXBhZ2VTaXplRnJvbU5hbWUoZmlyc3QsIHNlY29uZCwgd2lk
dGgsIGhlaWdodCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIDE6IHsKICAgICAgICAgLy8gPGxlbmd0aD4gfCBhdXRv
IHwgPHBhZ2Utc2l6ZT4gfCBbIHBvcnRyYWl0IHwgbGFuZHNjYXBlXQotICAgICAgICBpZiAoIXZh
bHVlTGlzdC0+aXRlbSgwKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWV4cGFu
ZGVyLmZpcnN0KCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih2YWx1ZUxpc3QtPml0ZW0oMCkpOwotICAgICAgICBpbnQgdHlwZSA9
IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgIGlmIChDU1NQcmltaXRp
dmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlKSkgeworICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGV4
cGFuZGVyLmZpcnN0KCkpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkp
IHsKICAgICAgICAgICAgIC8vIDxsZW5ndGg+CiAgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQ
QUdFX1NJWkVfUkVTT0xWRUQ7CiAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxl
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfSURFTlQpCisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVBdXRvOgpAQCAtNjI4MCwxNCArNjI2NCwx
MiBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wCiAKICAgICBmbG9h
dCB6b29tRmFjdG9yID0gc3R5bGUgPyBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpIDogMTsKICAgICBU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0g
c3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oaW5WYWx1ZSk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9
IGxpc3QtPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKysp
IHsKLSAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soaSk7CisgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gaW5WYWx1ZTsgaS5o
YXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CisgICAgICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBp
LnZhbHVlKCk7CiAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1dlYktpdENTU1RyYW5zZm9ybVZh
bHVlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZSogdHJhbnNmb3JtVmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZSo+KGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAgICBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZSogdHJhbnNmb3JtVmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZSo+KGkudmFsdWUoKSk7CiAgICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUt
Pmxlbmd0aCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NWYWx1ZUxpc3QuY3BwCShyZXZpc2lvbiA5MTg5NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NWYWx1ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsNiBAQCBDU1NWYWx1
ZUxpc3Q6On5DU1NWYWx1ZUxpc3QoKQogewogfQogCi1DU1NWYWx1ZSogQ1NTVmFsdWVMaXN0Ojpp
dGVtKHVuc2lnbmVkIGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBtX3ZhbHVlcy5zaXplKCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3ZhbHVlc1tpbmRleF0uZ2V0KCk7Ci19
Ci0KIHVuc2lnbmVkIHNob3J0IENTU1ZhbHVlTGlzdDo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gQ1NTX1ZBTFVFX0xJU1Q7CkBAIC05OCw3ICs5MSw3IEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBDU1NWYWx1ZUxpc3Q6OmMKIHsKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVl
TGlzdD4gbmV3TGlzdCA9IG1faXNTcGFjZVNlcGFyYXRlZCA/IGNyZWF0ZVNwYWNlU2VwYXJhdGVk
KCkgOiBjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBtX3ZhbHVlcy5zaXplKCk7IGluZGV4KyspCi0gICAgICAgIG5ld0xpc3QtPmFwcGVu
ZChpdGVtKGluZGV4KSk7CisgICAgICAgIG5ld0xpc3QtPmFwcGVuZChtX3ZhbHVlc1tpbmRleF0p
OwogICAgIHJldHVybiBuZXdMaXN0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFsdWVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlz
dC5oCShyZXZpc2lvbiA5MTg5NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
Q1NTVmFsdWVMaXN0KCk7CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXMuc2l6ZSgpOyB9Ci0gICAgQ1NTVmFsdWUqIGl0ZW0odW5zaWduZWQpOwotICAgIENTU1Zh
bHVlKiBpdGVtV2l0aG91dEJvdW5kc0NoZWNrKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3Zh
bHVlc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBDU1NWYWx1ZSogaXRlbShzaXplX3QgaW5kZXgpIHsg
cmV0dXJuIGluZGV4IDwgbV92YWx1ZXMuc2l6ZSgpID8gbV92YWx1ZXNbaW5kZXhdLmdldCgpIDog
MDsgfQorICAgIENTU1ZhbHVlKiBpdGVtV2l0aG91dEJvdW5kc0NoZWNrKHNpemVfdCBpbmRleCkg
eyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9CiAKICAgICB2b2lkIGFwcGVuZChQYXNz
UmVmUHRyPENTU1ZhbHVlPik7CiAgICAgdm9pZCBwcmVwZW5kKFBhc3NSZWZQdHI8Q1NTVmFsdWU+
KTsKQEAgLTczLDYgKzczLDI5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzU3BhY2VTZXBhcmF0
ZWQ7CiB9OwogCisvLyBXcmFwcGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIGFu
eSBDU1NWYWx1ZS4gTm9uLWxpc3QgdmFsdWVzIGFuZCAwIGJlaGF2ZSBhcyB6ZXJvLWxlbmd0aCBs
aXN0cy4KK2NsYXNzIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBDU1NWYWx1
ZUxpc3RJdGVyYXRvcihDU1NWYWx1ZSogdmFsdWUpIDogbV9wb3NpdGlvbigwKSB7IG1fbGlzdCA9
ICh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgPyBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPih2YWx1ZSkgOiAwOyB9CisgICAgYm9vbCBoYXNNb3JlKCkgY29uc3QgeyByZXR1cm4gbV9w
b3NpdGlvbiA8IGxlbmd0aCgpOyB9CisgICAgQ1NTVmFsdWUqIHZhbHVlKCkgY29uc3QgeyBBU1NF
UlQoaGFzTW9yZSgpKTsgcmV0dXJuIG1fbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhtX3Bv
c2l0aW9uKTsgfQorICAgIHZvaWQgYWR2YW5jZSgpIHsgbV9wb3NpdGlvbisrOyBBU1NFUlQobV9w
b3NpdGlvbiA8PSBsZW5ndGgoKSk7fQorICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb247IH0KKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9saXN0
ID8gbV9saXN0LT5sZW5ndGgoKSA6IDA7IH0KK3ByaXZhdGU6CisgICAgQ1NTVmFsdWVMaXN0KiBt
X2xpc3Q7CisgICAgc2l6ZV90IG1fcG9zaXRpb247Cit9OworCitjbGFzcyBDU1NWYWx1ZUxpc3RF
eHBhbmRlciB7CitwdWJsaWM6CisgICAgQ1NTVmFsdWVMaXN0RXhwYW5kZXIoQ1NTVmFsdWUqIHZh
bHVlKSB7IG1fbGlzdCA9ICh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgPyBzdGF0aWNf
Y2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSkgOiAwOyB9CisgICAgQ1NTVmFsdWUqIGZpcnN0KCkg
Y29uc3QgeyBBU1NFUlQobGVuZ3RoKCkgPiAwKTsgcmV0dXJuIG1fbGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygwKTsgfQorICAgIENTU1ZhbHVlKiBzZWNvbmQoKSBjb25zdCB7IEFTU0VSVChs
ZW5ndGgoKSA+IDEpOyByZXR1cm4gbV9saXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpOyB9
CisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdCA/IG1fbGlzdC0+bGVu
Z3RoKCkgOiAwOyB9Citwcml2YXRlOgorICAgIENTU1ZhbHVlTGlzdCogbV9saXN0OworfTsKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIENTU1ZhbHVlTGlzdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102316</attachid>
            <date>2011-07-28 17:37:19 -0700</date>
            <delta_ts>2011-07-29 00:08:39 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-65297-20110729103716.patch</filename>
            <type>text/plain</type>
            <size>18169</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxODk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDctMjcgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgaXRlcmF0
b3IgdG8gQ1NTVmFsdWVMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NTI5NworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyAvIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBjc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVl
Ojppc0xlbmd0aCk6CisgICAgICAgIEFkZCBzaG9ydGhhbmQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMg
cHJpbWl0aXZlIHZhbHVlIGlzIGEgbGVuZ3RoLgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcDoKKyAgICAgICAgVXNlIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIHRocm91Z2hvdXQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UGFnZVNpemVQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcGVyYXRp
b25zKToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1ZhbHVlTGlzdDo6Y29weSk6CisgICAgICAgIFVzZSBpdGVtV2l0aG91dEJvdW5kc0NoZWNr
KCkgaW5zdGVhZCBvZiBpdGVtKCkuCisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAg
ICAgICBBZGQgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgYW5kIENTU1ZhbHVlTGlzdEluc3BlY3RvciBj
bGFzcyBkZWZpbml0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdDo6aXRlbSkK
KyAgICAgICAgUHJvdmlkZSBpbmxpbmUgZGVmaW5pdGlvbiBvZiBpdGVtLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTVmFsdWVMaXN0SXRlcmF0b3I6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yOjpoYXNNb3JlKToKKyAgICAgICAgUmV0
dXJuIHRydWUgaWYgdGhlcmUgYXJlIG1vcmUgdmFsdWVzIHRvIGNvbnN1bWUsIGluY2x1ZGluZyB0
aGUgY3VycmVudCB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9y
Ojp2YWx1ZSk6CisgICAgICAgIFJldHVybiB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRp
b24uCisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZUxpc3RJdGVyYXRvcjo6bmV4dCk6CisgICAg
ICAgIE1vdmUgdGhlIGl0ZXJhdG9yIGZvcndhcmQgdG8gdGhlIG5leHQgaXRlbS4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yOjppbmRleCk6CisgICAgICAgIFJldHVybiB0
aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Zh
bHVlTGlzdEluc3BlY3Rvcjo6aXRlbSk6CisgICAgICAgIFJldHVybiB0aGUgaXRlbSBhdCBhIGdp
dmVuIGluZGV4LgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVMaXN0SW5zcGVjdG9yOjpmaXJz
dCk6CisgICAgICAgIFJldHVybiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEluc3BlY3Rvcjo6c2Vjb25kKToKKyAgICAgICAgUmV0dXJu
IHRoZSBzZWNvbmQgaXRlbSBpbiB0aGUgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVl
TGlzdEluc3BlY3Rvcjo6bGVuZ3RoKToKKyAgICAgICAgUmV0dXJuIHRoZSBzaXplIG9mIHRoZSB1
bmRlcmx5aW5nIGxpc3QuCisKIDIwMTEtMDctMjcgIEZhZHkgU2FtdWVsICA8ZnNhbXVlbEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUG9wdXBzIG9uIENocm9taXVtIG5vdyBjaGVjayB0aGUgbWlu
aW11bSByb3cgaGVpZ2h0IHNldCB0aHJvdWdoIHRoZSBDaHJvbWl1bSBXZWJLaXQgQVBJIHdoZW4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCShyZXZpc2lvbiA5MTg5
NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTksNiArMTE5LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzVW5pdFR5
cGVMZW5ndGgoaW50IHR5cGUpIHsgcmV0dXJuICh0eXBlID4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QRVJDRU5UQUdFICYmIHR5cGUgPCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykgfHwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkVNUzsgfQogCisgICAgYm9vbCBpc0xlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIGlzVW5pdFR5cGVMZW5ndGgobV90eXBlKTsgfQorCiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZUlkZW50aWZpZXIoaW50IGlkZW50aWZp
ZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmltaXRpdmVWYWx1ZShpZGVudGlmaWVyKSk7
IH0KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlQ29sb3Io
dW5zaWduZWQgcmdiVmFsdWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmltaXRpdmVWYWx1
ZShyZ2JWYWx1ZSkpOyB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNyZWF0ZShkb3VibGUgdmFsdWUsIFVuaXRUeXBlcyB0eXBlKSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUsIHR5cGUpKTsgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gOTE4OTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSwxMSAr
MTkxLDEwIEBAIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBtX3N0eWxlLT5hY2Nlc3NBbmkKIHNpemVf
dCBjaGlsZEluZGV4ID0gMDsgXAogaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7IFwKICAgICAv
KiBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGFuIGFuaW1hdGlvbiwgY3JlYXRpbmcg
bmV3IGFuaW1hdGlvbnMgYXMgbmVlZGVkLiAqLyBcCi0gICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxp
c3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7IFwKLSAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7IGkrKykgeyBcCisgICAgZm9y
IChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2Uo
KSkgeyBcCiAgICAgICAgIGlmIChjaGlsZEluZGV4IDw9IGxpc3QtPnNpemUoKSkgXAogICAgICAg
ICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOyBcCi0gICAgICAgIG1hcEFu
aW1hdGlvbiMjUHJvcChsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIHZhbHVlTGlzdC0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7IFwKKyAgICAgICAgbWFwQW5pbWF0aW9uIyNQcm9wKGxp
c3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgaS52YWx1ZSgpKTsgXAogICAgICAgICArK2NoaWxk
SW5kZXg7IFwKICAgICB9IFwKIH0gZWxzZSB7IFwKQEAgLTI0MSwxMSArMjQwLDEwIEBAIEFuaW1h
dGlvbkxpc3QqIGxpc3QgPSBtX3N0eWxlLT5hY2Nlc3NUcmEKIHNpemVfdCBjaGlsZEluZGV4ID0g
MDsgXAogaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7IFwKICAgICAvKiBXYWxrIGVhY2ggdmFs
dWUgYW5kIHB1dCBpdCBpbnRvIGEgdHJhbnNpdGlvbiwgY3JlYXRpbmcgbmV3IGFuaW1hdGlvbnMg
YXMgbmVlZGVkLiAqLyBcCi0gICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2Fz
dDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7IFwKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7IGkrKykgeyBcCisgICAgZm9yIChDU1NWYWx1ZUxpc3RJ
dGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeyBcCiAgICAgICAg
IGlmIChjaGlsZEluZGV4IDw9IGxpc3QtPnNpemUoKSkgXAogICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOyBcCi0gICAgICAgIG1hcEFuaW1hdGlvbiMjUHJvcChs
aXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjayhpKSk7IFwKKyAgICAgICAgbWFwQW5pbWF0aW9uIyNQcm9wKGxpc3QtPmFuaW1hdGlvbihj
aGlsZEluZGV4KSwgaS52YWx1ZSgpKTsgXAogICAgICAgICArK2NoaWxkSW5kZXg7IFwKICAgICB9
IFwKIH0gZWxzZSB7IFwKQEAgLTQwMTgsMTIgKzQwMTYsMTAgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0
YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAgaW50IGxlbiA9IGxpc3Qt
Pmxlbmd0aCgpOwotCiAjaWYgRU5BQkxFKENTU19SRUdJT05TKQotICAgICAgICBpZiAobGVuID09
IDEgJiYgbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDAp
KTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0SW5zcGVjdG9yIGluc3BlY3RvciA9IHZhbHVlOworICAg
ICAgICBpZiAoaW5zcGVjdG9yLmxlbmd0aCgpID09IDEgJiYgaW5zcGVjdG9yLmZpcnN0KCktPmlz
UHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRl
bnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaW5zcGVjdG9yLT5maXJz
dCgpKTsKICAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZST01fRkxPVykgewogICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldFJlZ2lvblRocmVhZChjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgp
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00MDMyLDggKzQwMjgsOCBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAjZW5kaWYKIAogICAgICAgICBib29s
IGRpZFNldCA9IGZhbHNlOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7
Ci0gICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSk7CisgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhh
c01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52
YWx1ZSgpOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7
CiAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChzdGF0aWNfY2FzdDxDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlKj4oaXRlbSktPmdlbmVyYXRlZEltYWdlKCksIGRpZFNldCk7CiAgICAg
ICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKQEAgLTQxMTYsMTcgKzQxMTIsMTYgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICB9CiAgICAgICAgIGlm
ICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0
ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwotICAgICAgICAgICAgc2l6ZV90
IGxlbmd0aCA9IGxpc3QtPmxlbmd0aCgpOwotICAgICAgICAgICAgUXVvdGVzRGF0YSogZGF0YSA9
IFF1b3Rlc0RhdGE6OmNyZWF0ZShsZW5ndGgpOworICAgICAgICAgICAgUXVvdGVzRGF0YSogZGF0
YSA9IFF1b3Rlc0RhdGE6OmNyZWF0ZShsaXN0LT5sZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAo
IWRhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBPdXQgb2YgbWVtb3J5CiAgICAgICAg
ICAgICBTdHJpbmcqIHF1b3RlcyA9IGRhdGEtPmRhdGEoKTsKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBDU1NWYWx1ZSog
aXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICBmb3Ig
KENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSBsaXN0OyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkp
IHsKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKICAgICAgICAg
ICAgICAgICBBU1NFUlQoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKICAgICAgICAgICAgICAg
ICBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwotICAgICAgICAgICAgICAgIHF1b3Rl
c1tpXSA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAgICAg
IHF1b3Rlc1tpLmluZGV4KCldID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoYWRvcHRSZWYoZGF0
YSkpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CkBAIC00MTYyLDE3ICs0
MTU3LDE1IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpOwotICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1
ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKICAgICAg
ICAgRm9udEZhbWlseSYgZmlyc3RGYW1pbHkgPSBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHko
KTsKICAgICAgICAgRm9udEZhbWlseSogY3VyckZhbWlseSA9IDA7Ci0gICAgICAgIAorCiAgICAg
ICAgIC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3ZSBz
aG91bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgogICAgICAgICBib29sIG9sZEZhbWlseVVz
ZWRGaXhlZERlZmF1bHRTaXplID0gZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUo
KTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0
aW9uOjpOb0ZhbWlseSk7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykg
ewotICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKGkpOworICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5o
YXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGku
dmFsdWUoKTsKICAgICAgICAgICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNv
bnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CkBAIC00
MjQ4LDExICs0MjQxLDkgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGlu
dAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3Qo
KSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QgKmxp
c3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICBpbnQg
bGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxl
bjsgaSsrKQorICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7
IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBDU1NWYWx1ZSAqaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAg
ICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAg
aWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPihpdGVtKTsKQEAgLTQ0NTMsMTMgKzQ0NDQsMTEgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVl
TGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ZhbHVlTGlzdCAqbGlz
dCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAgaW50IGxlbiA9
IGxpc3QtPmxlbmd0aCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7
Ci0gICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gbGlzdC0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayhpKTsKKyAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7
IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAgICAgQ1NTVmFsdWUqIGN1cnJW
YWx1ZSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1NoYWRvd1Zh
bHVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBTaGFkb3dWYWx1
ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4obGlzdC0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayhpKSk7CisgICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0
PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVlKTsKICAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+
Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rv
cik7CiAgICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdHls
ZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgaW50IGJs
dXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCks
IG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOwpAQCAtNDQ3MCw5ICs0NDU5LDkg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAg
ICAgIGNvbG9yID0gZ2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkp
OwogICAgICAgICAgICAgT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihu
ZXcgU2hhZG93RGF0YSh4LCB5LCBibHVyLCBzcHJlYWQsIHNoYWRvd1N0eWxlLCBpZCA9PSBDU1NQ
cm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6
dHJhbnNwYXJlbnQpKTsKICAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFk
b3cpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhzaGFkb3dEYXRhLnJl
bGVhc2UoKSwgaSAvKiBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0eSBl
bnRyeSAqLyk7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhzaGFkb3dE
YXRhLnJlbGVhc2UoKSwgIWkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlz
IG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkgLyogYWRkIHRvIHRo
ZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdHkgZW50cnkgKi8pOworICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldEJveFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgIWkuaW5kZXgo
KSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNTI4NSw0OCArNTI3NCw0MyBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OmFwcGx5UGFnZVNpemVQcm9wZXJ0eShDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgbV9z
dHlsZS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKLSAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNf
Y2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CiAgICAgTGVuZ3RoIHdpZHRoOwogICAgIExlbmd0
aCBoZWlnaHQ7CiAgICAgUGFnZVNpemVUeXBlIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRP
OwotICAgIHN3aXRjaCAodmFsdWVMaXN0LT5sZW5ndGgoKSkgeworICAgIENTU1ZhbHVlTGlzdElu
c3BlY3RvciBpbnNwZWN0b3IgPSB2YWx1ZTsKKyAgICBzd2l0Y2ggKGluc3BlY3Rvci5sZW5ndGgo
KSkgewogICAgIGNhc2UgMjogewogICAgICAgICAvLyA8bGVuZ3RoPnsyfSB8IDxwYWdlLXNpemU+
IDxvcmllbnRhdGlvbj4KICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVE
OwotICAgICAgICBpZiAoIXZhbHVlTGlzdC0+aXRlbSgwKS0+aXNQcmltaXRpdmVWYWx1ZSgpIHx8
ICF2YWx1ZUxpc3QtPml0ZW0oMSktPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFp
bnNwZWN0b3IuZmlyc3QoKS0+aXNQcmltaXRpdmVWYWx1ZSgpIHx8ICFpbnNwZWN0b3Iuc2Vjb25k
KCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlMCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWVMaXN0LT5pdGVtKDApKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlMSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVM
aXN0LT5pdGVtKDEpKTsKLSAgICAgICAgaW50IHR5cGUwID0gcHJpbWl0aXZlVmFsdWUwLT5wcmlt
aXRpdmVUeXBlKCk7Ci0gICAgICAgIGludCB0eXBlMSA9IHByaW1pdGl2ZVZhbHVlMS0+cHJpbWl0
aXZlVHlwZSgpOwotICAgICAgICBpZiAoQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5n
dGgodHlwZTApKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaW5zcGVjdG9yLmZpcnN0KCkpOworICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogc2Vjb25kID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihp
bnNwZWN0b3Iuc2Vjb25kKCkpOworICAgICAgICBpZiAoZmlyc3QtPmlzTGVuZ3RoKCkpIHsKICAg
ICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9Ci0gICAgICAgICAgICBpZiAoIUNTU1ByaW1pdGl2ZVZh
bHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUxKSkKKyAgICAgICAgICAgIGlmICghc2Vjb25kLT5p
c0xlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHdpZHRoID0g
cHJpbWl0aXZlVmFsdWUwLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxl
bWVudFN0eWxlKTsKLSAgICAgICAgICAgIGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlMS0+Y29tcHV0
ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAg
ICB3aWR0aCA9IGZpcnN0LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgbV9yb290RWxl
bWVudFN0eWxlKTsKKyAgICAgICAgICAgIGhlaWdodCA9IHNlY29uZC0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAvLyA8cGFnZS1zaXplPiA8b3JpZW50YXRpb24+CiAgICAgICAgICAgICAvLyBU
aGUgdmFsdWUgb3JkZXIgaXMgZ3VhcmFudGVlZC4gU2VlIENTU1BhcnNlcjo6cGFyc2VTaXplUGFy
YW1ldGVyLgotICAgICAgICAgICAgaWYgKCFwYWdlU2l6ZUZyb21OYW1lKHByaW1pdGl2ZVZhbHVl
MCwgcHJpbWl0aXZlVmFsdWUxLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIGlmICghcGFn
ZVNpemVGcm9tTmFtZShmaXJzdCwgc2Vjb25kLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
MTogewogICAgICAgICAvLyA8bGVuZ3RoPiB8IGF1dG8gfCA8cGFnZS1zaXplPiB8IFsgcG9ydHJh
aXQgfCBsYW5kc2NhcGVdCi0gICAgICAgIGlmICghdmFsdWVMaXN0LT5pdGVtKDApLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaW5zcGVjdG9yLmZpcnN0KCktPmlzUHJpbWl0aXZl
VmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZUxp
c3QtPml0ZW0oMCkpOwotICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRp
dmVUeXBlKCk7Ci0gICAgICAgIGlmIChDU1NQcmltaXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0
aCh0eXBlKSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGluc3BlY3Rvci5maXJzdCgpKTsKKyAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7CiAgICAgICAgICAgICAvLyA8bGVu
Z3RoPgogICAgICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOwogICAg
ICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAodHlwZSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQorICAg
ICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgIT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19JREVOVCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlQXV0bzoKQEAgLTYyODAsMTQgKzYyNjQsMTIgQEAgYm9vbCBDU1NTdHlsZVNlbGVj
dG9yOjpjcmVhdGVUcmFuc2Zvcm1PcAogCiAgICAgZmxvYXQgem9vbUZhY3RvciA9IHN0eWxlID8g
c3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA6IDE7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zOwotICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlz
dCo+KGluVmFsdWUpOwotICAgIHVuc2lnbmVkIHNpemUgPSBsaXN0LT5sZW5ndGgoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIENTU1ZhbHVlKiBj
dXJyVmFsdWUgPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgIGZvciAoQ1NT
VmFsdWVMaXN0SXRlcmF0b3IgaSA9IGluVmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkg
eworICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgpOwogICAgICAgICBpZiAo
IWN1cnJWYWx1ZS0+aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqIHRyYW5zZm9ybVZhbHVl
ID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqPihsaXN0LT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKGkpKTsKKyAgICAgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqIHRyYW5z
Zm9ybVZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqPihpLnZhbHVl
KCkpOwogICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAkocmV2aXNp
b24gOTE4OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDYgQEAgQ1NTVmFsdWVMaXN0Ojp+Q1NTVmFsdWVMaXN0KCkK
IHsKIH0KIAotQ1NTVmFsdWUqIENTU1ZhbHVlTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkKLXsK
LSAgICBpZiAoaW5kZXggPj0gbV92YWx1ZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gbV92YWx1ZXNbaW5kZXhdLmdldCgpOwotfQotCiB1bnNpZ25lZCBzaG9ydCBDU1NW
YWx1ZUxpc3Q6OmNzc1ZhbHVlVHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENTU19WQUxVRV9M
SVNUOwpAQCAtOTgsNyArOTEsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTVmFsdWVM
aXN0OjpjCiB7CiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IG5ld0xpc3QgPSBtX2lzU3Bh
Y2VTZXBhcmF0ZWQgPyBjcmVhdGVTcGFjZVNlcGFyYXRlZCgpIDogY3JlYXRlQ29tbWFTZXBhcmF0
ZWQoKTsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV92YWx1ZXMuc2l6ZSgp
OyBpbmRleCsrKQotICAgICAgICBuZXdMaXN0LT5hcHBlbmQoaXRlbShpbmRleCkpOworICAgICAg
ICBuZXdMaXN0LT5hcHBlbmQobV92YWx1ZXNbaW5kZXhdKTsKICAgICByZXR1cm4gbmV3TGlzdDsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAkocmV2aXNpb24gOTE4OTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDggKzQ3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNTU1ZhbHVlTGlzdCgpOwogCiAgICAg
c2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQotICAgIENT
U1ZhbHVlKiBpdGVtKHVuc2lnbmVkKTsKLSAgICBDU1NWYWx1ZSogaXRlbVdpdGhvdXRCb3VuZHND
aGVjayh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9Cisg
ICAgQ1NTVmFsdWUqIGl0ZW0oc2l6ZV90IGluZGV4KSB7IHJldHVybiBpbmRleCA8IG1fdmFsdWVz
LnNpemUoKSA/IG1fdmFsdWVzW2luZGV4XS5nZXQoKSA6IDA7IH0KKyAgICBDU1NWYWx1ZSogaXRl
bVdpdGhvdXRCb3VuZHNDaGVjayhzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4
XS5nZXQoKTsgfQogCiAgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxDU1NWYWx1ZT4pOwogICAg
IHZvaWQgcHJlcGVuZChQYXNzUmVmUHRyPENTU1ZhbHVlPik7CkBAIC03Myw2ICs3MywzMyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9pc1NwYWNlU2VwYXJhdGVkOwogfTsKIAorLy8gT2JqZWN0cyBv
ZiB0aGlzIGNsYXNzIGFyZSBpbnRlbmRlZCB0byBiZSBzdGFjay1hbGxvY2F0ZWQgYW5kIHNjb3Bl
ZCB0byBhIHNpbmdsZSBmdW5jdGlvbi4KKy8vIFBsZWFzZSB0YWtlIGNhcmUgbm90IHRvIHBhc3Mg
dGhlc2UgYXJvdW5kIGFzIHRoZXkgZG8gaG9sZCBvbnRvIGEgcmF3IHBvaW50ZXIuCitjbGFzcyBD
U1NWYWx1ZUxpc3RJbnNwZWN0b3IgeworcHVibGljOgorICAgIENTU1ZhbHVlTGlzdEluc3BlY3Rv
cihDU1NWYWx1ZSogdmFsdWUpIDogbV9saXN0KCh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3Qo
KSkgPyBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSkgOiAwKSB7fQorICAgIENTU1Zh
bHVlKiBpdGVtKHNpemVfdCBpbmRleCkgY29uc3QgeyBBU1NFUlQoaW5kZXggPCBsZW5ndGgoKSk7
IHJldHVybiBtX2xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaW5kZXgpOyB9CisgICAgQ1NT
VmFsdWUqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gaXRlbSgwKTsgfQorICAgIENTU1ZhbHVlKiBz
ZWNvbmQoKSBjb25zdCB7IHJldHVybiBpdGVtKDEpOyB9CisgICAgc2l6ZV90IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGlzdCA/IG1fbGlzdC0+bGVuZ3RoKCkgOiAwOyB9Citwcml2YXRlOgor
ICAgIENTU1ZhbHVlTGlzdCogbV9saXN0OworfTsKKworLy8gV3JhcHBlciB0aGF0IGNhbiBiZSB1
c2VkIHRvIGl0ZXJhdGUgb3ZlciBhbnkgQ1NTVmFsdWUuIE5vbi1saXN0IHZhbHVlcyBhbmQgMCBi
ZWhhdmUgYXMgemVyby1sZW5ndGggbGlzdHMuCisvLyBPYmplY3RzIG9mIHRoaXMgY2xhc3MgYXJl
IGludGVuZGVkIHRvIGJlIHN0YWNrLWFsbG9jYXRlZCBhbmQgc2NvcGVkIHRvIGEgc2luZ2xlIGZ1
bmN0aW9uLgorLy8gUGxlYXNlIHRha2UgY2FyZSBub3QgdG8gcGFzcyB0aGVzZSBhcm91bmQgYXMg
dGhleSBkbyBob2xkIG9udG8gYSByYXcgcG9pbnRlci4KK2NsYXNzIENTU1ZhbHVlTGlzdEl0ZXJh
dG9yIHsKK3B1YmxpYzoKKyAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvcihDU1NWYWx1ZSogdmFsdWUp
IDogbV9pbnNwZWN0b3IodmFsdWUpLCBtX3Bvc2l0aW9uKDApIHt9CisgICAgYm9vbCBoYXNNb3Jl
KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbiA8IG1faW5zcGVjdG9yLmxlbmd0aCgpOyB9Cisg
ICAgQ1NTVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3IuaXRlbShtX3Bv
c2l0aW9uKTsgfQorICAgIHZvaWQgYWR2YW5jZSgpIHsgbV9wb3NpdGlvbisrOyBBU1NFUlQobV9w
b3NpdGlvbiA8PSBtX2luc3BlY3Rvci5sZW5ndGgoKSk7fQorICAgIHNpemVfdCBpbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KK3ByaXZhdGU6CisgICAgQ1NTVmFsdWVMaXN0SW5z
cGVjdG9yIG1faW5zcGVjdG9yOworICAgIHNpemVfdCBtX3Bvc2l0aW9uOworfTsKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIENTU1ZhbHVlTGlzdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102336</attachid>
            <date>2011-07-29 00:08:46 -0700</date>
            <delta_ts>2011-07-31 23:56:15 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-65297-20110729170843.patch</filename>
            <type>text/plain</type>
            <size>18158</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxOTc1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDctMjggIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgaXRlcmF0
b3IgdG8gQ1NTVmFsdWVMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NTI5NworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyAvIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBjc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVl
Ojppc0xlbmd0aCk6CisgICAgICAgIEFkZCBzaG9ydGhhbmQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMg
cHJpbWl0aXZlIHZhbHVlIGlzIGEgbGVuZ3RoLgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcDoKKyAgICAgICAgVXNlIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIHRocm91Z2hvdXQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UGFnZVNpemVQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcGVyYXRp
b25zKToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1ZhbHVlTGlzdDo6Y29weSk6CisgICAgICAgIFVzZSBpdGVtV2l0aG91dEJvdW5kc0NoZWNr
KCkgaW5zdGVhZCBvZiBpdGVtKCkuCisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAg
ICAgICBBZGQgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgYW5kIENTU1ZhbHVlTGlzdEluc3BlY3RvciBj
bGFzcyBkZWZpbml0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdDo6aXRlbSkK
KyAgICAgICAgUHJvdmlkZSBpbmxpbmUgZGVmaW5pdGlvbiBvZiBpdGVtLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTVmFsdWVMaXN0SXRlcmF0b3I6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yOjpoYXNNb3JlKToKKyAgICAgICAgUmV0
dXJuIHRydWUgaWYgdGhlcmUgYXJlIG1vcmUgdmFsdWVzIHRvIGNvbnN1bWUsIGluY2x1ZGluZyB0
aGUgY3VycmVudCB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9y
Ojp2YWx1ZSk6CisgICAgICAgIFJldHVybiB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRp
b24uCisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZUxpc3RJdGVyYXRvcjo6bmV4dCk6CisgICAg
ICAgIE1vdmUgdGhlIGl0ZXJhdG9yIGZvcndhcmQgdG8gdGhlIG5leHQgaXRlbS4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yOjppbmRleCk6CisgICAgICAgIFJldHVybiB0
aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Zh
bHVlTGlzdEluc3BlY3Rvcjo6aXRlbSk6CisgICAgICAgIFJldHVybiB0aGUgaXRlbSBhdCBhIGdp
dmVuIGluZGV4LgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVMaXN0SW5zcGVjdG9yOjpmaXJz
dCk6CisgICAgICAgIFJldHVybiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEluc3BlY3Rvcjo6c2Vjb25kKToKKyAgICAgICAgUmV0dXJu
IHRoZSBzZWNvbmQgaXRlbSBpbiB0aGUgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVl
TGlzdEluc3BlY3Rvcjo6bGVuZ3RoKToKKyAgICAgICAgUmV0dXJuIHRoZSBzaXplIG9mIHRoZSB1
bmRlcmx5aW5nIGxpc3QuCisKIDIwMTEtMDctMjggIEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVy
c29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUgcmVtYWluaW5nIHVzZXMgb2YgQ1NT
UHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJKHJldmlzaW9uIDkxOTc1KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2
ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNVbml0VHlwZUxlbmd0aChpbnQg
dHlwZSkgeyByZXR1cm4gKHR5cGUgPiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Ug
JiYgdHlwZSA8IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKSB8fAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19SRU1TOyB9CiAKKyAgICBib29sIGlzTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
aXNVbml0VHlwZUxlbmd0aChtX3R5cGUpOyB9CisKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY3JlYXRlSWRlbnRpZmllcihpbnQgaWRlbnRpZmllcikgeyByZXR1cm4g
YWRvcHRSZWYobmV3IENTU1ByaW1pdGl2ZVZhbHVlKGlkZW50aWZpZXIpKTsgfQogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVDb2xvcih1bnNpZ25lZCByZ2JW
YWx1ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHJnYlZhbHVlKSk7
IH0KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlKGRvdWJs
ZSB2YWx1ZSwgVW5pdFR5cGVzIHR5cGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmltaXRp
dmVWYWx1ZSh2YWx1ZSwgdHlwZSkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwCShyZXZpc2lvbiA5MTk3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDExICsxOTEsMTAgQEAgQW5p
bWF0aW9uTGlzdCogbGlzdCA9IG1fc3R5bGUtPmFjY2Vzc0FuaQogc2l6ZV90IGNoaWxkSW5kZXgg
PSAwOyBcCiBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsgXAogICAgIC8qIFdhbGsgZWFjaCB2
YWx1ZSBhbmQgcHV0IGl0IGludG8gYW4gYW5pbWF0aW9uLCBjcmVhdGluZyBuZXcgYW5pbWF0aW9u
cyBhcyBuZWVkZWQuICovIFwKLSAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19j
YXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsgXAotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgaSsrKSB7IFwKKyAgICBmb3IgKENTU1ZhbHVlTGlz
dEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7IFwKICAgICAg
ICAgaWYgKGNoaWxkSW5kZXggPD0gbGlzdC0+c2l6ZSgpKSBcCiAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7IFwKLSAgICAgICAgbWFwQW5pbWF0aW9uIyNQcm9w
KGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpKTsgXAorICAgICAgICBtYXBBbmltYXRpb24jI1Byb3AobGlzdC0+YW5pbWF0aW9u
KGNoaWxkSW5kZXgpLCBpLnZhbHVlKCkpOyBcCiAgICAgICAgICsrY2hpbGRJbmRleDsgXAogICAg
IH0gXAogfSBlbHNlIHsgXApAQCAtMjQxLDExICsyNDAsMTAgQEAgQW5pbWF0aW9uTGlzdCogbGlz
dCA9IG1fc3R5bGUtPmFjY2Vzc1RyYQogc2l6ZV90IGNoaWxkSW5kZXggPSAwOyBcCiBpZiAodmFs
dWUtPmlzVmFsdWVMaXN0KCkpIHsgXAogICAgIC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0
IGludG8gYSB0cmFuc2l0aW9uLCBjcmVhdGluZyBuZXcgYW5pbWF0aW9ucyBhcyBuZWVkZWQuICov
IFwKLSAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlz
dCo+KHZhbHVlKTsgXAotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdmFsdWVMaXN0
LT5sZW5ndGgoKTsgaSsrKSB7IFwKKyAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2
YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7IFwKICAgICAgICAgaWYgKGNoaWxkSW5k
ZXggPD0gbGlzdC0+c2l6ZSgpKSBcCiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9u
OjpjcmVhdGUoKSk7IFwKLSAgICAgICAgbWFwQW5pbWF0aW9uIyNQcm9wKGxpc3QtPmFuaW1hdGlv
bihjaGlsZEluZGV4KSwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsgXAor
ICAgICAgICBtYXBBbmltYXRpb24jI1Byb3AobGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBp
LnZhbHVlKCkpOyBcCiAgICAgICAgICsrY2hpbGRJbmRleDsgXAogICAgIH0gXAogfSBlbHNlIHsg
XApAQCAtNDAxOCwxMiArNDAxNiwxMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJv
cGVydHkoaW50CiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NT
VmFsdWVMaXN0Kj4odmFsdWUpOwotICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0K
ICNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAgICAgIGlmIChsZW4gPT0gMSAmJiBsaXN0LT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDApLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgICAgICBD
U1NWYWx1ZUxpc3RJbnNwZWN0b3IgaW5zcGVjdG9yID0gdmFsdWU7CisgICAgICAgIGlmIChpbnNw
ZWN0b3IubGVuZ3RoKCkgPT0gMSAmJiBpbnNwZWN0b3IuZmlyc3QoKS0+aXNQcmltaXRpdmVWYWx1
ZSgpKSB7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpbnNwZWN0b3ItPmZpcnN0KCkpOwogICAgICAg
ICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfRlJPTV9GTE9XKSB7CiAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0UmVnaW9u
VGhyZWFkKGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCkpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTQwMzIsOCArNDAyOCw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6YXBwbHlQcm9wZXJ0eShpbnQKICNlbmRpZgogCiAgICAgICAgIGJvb2wgZGlkU2V0ID0gZmFs
c2U7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAg
IENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAg
ICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFk
dmFuY2UoKSkgeworICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7CiAgICAg
ICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKICAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUqPihpdGVtKS0+Z2VuZXJhdGVkSW1hZ2UoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwpAQCAtNDExNiwxNyArNDExMiwxNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLT5pc1Zh
bHVlTGlzdCgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2Fz
dDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gbGlz
dC0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBRdW90ZXNEYXRhKiBkYXRhID0gUXVvdGVzRGF0YTo6
Y3JlYXRlKGxlbmd0aCk7CisgICAgICAgICAgICBRdW90ZXNEYXRhKiBkYXRhID0gUXVvdGVzRGF0
YTo6Y3JlYXRlKGxpc3QtPmxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghZGF0YSkKICAgICAg
ICAgICAgICAgICByZXR1cm47IC8vIE91dCBvZiBtZW1vcnkKICAgICAgICAgICAgIFN0cmluZyog
cXVvdGVzID0gZGF0YS0+ZGF0YSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0
SXRlcmF0b3IgaSA9IGxpc3Q7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAg
ICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIEFTU0VS
VChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwogICAgICAgICAgICAgICAgIHByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKICAgICAgICAgICAg
ICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1NUUklORyk7Ci0gICAgICAgICAgICAgICAgcXVvdGVzW2ldID0gcHJpbWl0
aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgcXVvdGVzW2kuaW5k
ZXgoKV0gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhhZG9wdFJlZihkYXRhKSk7CiAgICAgICAg
IH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUpIHsKQEAgLTQxNjIsMTcgKzQxNTcsMTUgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBpZiAoIXZhbHVl
LT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAg
ICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVl
KTsKLSAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwogICAgICAgICBGb250RmFtaWx5
JiBmaXJzdEZhbWlseSA9IGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOwogICAgICAgICBG
b250RmFtaWx5KiBjdXJyRmFtaWx5ID0gMDsKLSAgICAgICAgCisKICAgICAgICAgLy8gQmVmb3Jl
IG1hcHBpbmcgaW4gYSBuZXcgZm9udC1mYW1pbHkgcHJvcGVydHksIHdlIHNob3VsZCByZXNldCB0
aGUgZ2VuZXJpYyBmYW1pbHkuCiAgICAgICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVs
dFNpemUgPSBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpOwogICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5
KTsKIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAg
ICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAg
ICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5h
ZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwogICAg
ICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKQEAgLTQyNDgsMTEgKzQyNDEs
OSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCAqbGlzdCA9IHN0YXRpY19j
YXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAgICAgIGludCBsZW4gPSBsaXN0LT5s
ZW5ndGgoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAg
ICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7
IGkuYWR2YW5jZSgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlICpp
dGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgICAgICBD
U1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlz
UHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KGl0ZW0pOwpAQCAtNDQ1MywxMyArNDQ0NCwxMSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5UHJvcGVydHkoaW50CiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTVmFsdWVMaXN0ICpsaXN0ID0gc3RhdGljX2Nh
c3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwotICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3Ro
KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAg
IENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwor
ICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7
IGkuYWR2YW5jZSgpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1
ZSgpOwogICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3Rh
dGljX2Nhc3Q8U2hhZG93VmFsdWUqPihsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsK
KyAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUq
PihjdXJyVmFsdWUpOwogICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3Ro
PGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKICAgICAgICAg
ICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJs
dXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CkBAIC00NDcwLDkgKzQ0NTksOSBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICAgICAgY29sb3IgPSBn
ZXRDb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CiAgICAgICAgICAg
ICBPd25QdHI8U2hhZG93RGF0YT4gc2hhZG93RGF0YSA9IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRh
KHgsIHksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUsIGlkID09IENTU1Byb3BlcnR5V2Via2l0
Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCkp
OwogICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpIC8q
IGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3R5IGVudHJ5ICovKTsKKyAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgp
LCAhaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJz
dCBlbnRyeQogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJv
eFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgaSAvKiBhZGQgdG8gdGhlIGxpc3QgaWYgdGhp
cyBpcyBub3QgdGhlIGZpcnN0eSBlbnRyeSAqLyk7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCAhaS5pbmRleCgpKTsgLy8gYWRkIHRv
IHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQogICAgICAgICB9CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC01Mjg1LDQ4ICs1Mjc0LDQzIEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQ
YWdlU2l6ZVByb3BlcnR5KENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBtX3N0eWxlLT5yZXNldFBh
Z2VTaXplVHlwZSgpOwotICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVl
TGlzdCo+KHZhbHVlKTsKICAgICBMZW5ndGggd2lkdGg7CiAgICAgTGVuZ3RoIGhlaWdodDsKICAg
ICBQYWdlU2l6ZVR5cGUgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE87Ci0gICAgc3dpdGNo
ICh2YWx1ZUxpc3QtPmxlbmd0aCgpKSB7CisgICAgQ1NTVmFsdWVMaXN0SW5zcGVjdG9yIGluc3Bl
Y3RvciA9IHZhbHVlOworICAgIHN3aXRjaCAoaW5zcGVjdG9yLmxlbmd0aCgpKSB7CiAgICAgY2Fz
ZSAyOiB7CiAgICAgICAgIC8vIDxsZW5ndGg+ezJ9IHwgPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9u
PgogICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7Ci0gICAgICAgIGlm
ICghdmFsdWVMaXN0LT5pdGVtKDApLT5pc1ByaW1pdGl2ZVZhbHVlKCkgfHwgIXZhbHVlTGlzdC0+
aXRlbSgxKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWluc3BlY3Rvci5maXJz
dCgpLT5pc1ByaW1pdGl2ZVZhbHVlKCkgfHwgIWluc3BlY3Rvci5zZWNvbmQoKS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUwID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZUxpc3QtPml0ZW0oMCkpOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUxID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZUxpc3QtPml0ZW0oMSkp
OwotICAgICAgICBpbnQgdHlwZTAgPSBwcmltaXRpdmVWYWx1ZTAtPnByaW1pdGl2ZVR5cGUoKTsK
LSAgICAgICAgaW50IHR5cGUxID0gcHJpbWl0aXZlVmFsdWUxLT5wcmltaXRpdmVUeXBlKCk7Ci0g
ICAgICAgIGlmIChDU1NQcmltaXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlMCkpIHsK
KyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihpbnNwZWN0b3IuZmlyc3QoKSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBzZWNvbmQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGluc3BlY3Rvci5zZWNv
bmQoKSk7CisgICAgICAgIGlmIChmaXJzdC0+aXNMZW5ndGgoKSkgewogICAgICAgICAgICAgLy8g
PGxlbmd0aD57Mn0KLSAgICAgICAgICAgIGlmICghQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5
cGVMZW5ndGgodHlwZTEpKQorICAgICAgICAgICAgaWYgKCFzZWNvbmQtPmlzTGVuZ3RoKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1
ZTAtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwot
ICAgICAgICAgICAgaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUxLT5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIHdpZHRoID0gZmly
c3QtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwor
ICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUo
KSwgbV9yb290RWxlbWVudFN0eWxlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8v
IDxwYWdlLXNpemU+IDxvcmllbnRhdGlvbj4KICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvcmRl
ciBpcyBndWFyYW50ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIuCi0gICAg
ICAgICAgICBpZiAoIXBhZ2VTaXplRnJvbU5hbWUocHJpbWl0aXZlVmFsdWUwLCBwcmltaXRpdmVW
YWx1ZTEsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgaWYgKCFwYWdlU2l6ZUZyb21OYW1l
KGZpcnN0LCBzZWNvbmQsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSAxOiB7CiAgICAgICAg
IC8vIDxsZW5ndGg+IHwgYXV0byB8IDxwYWdlLXNpemU+IHwgWyBwb3J0cmFpdCB8IGxhbmRzY2Fw
ZV0KLSAgICAgICAgaWYgKCF2YWx1ZUxpc3QtPml0ZW0oMCktPmlzUHJpbWl0aXZlVmFsdWUoKSkK
KyAgICAgICAgaWYgKCFpbnNwZWN0b3IuZmlyc3QoKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlTGlzdC0+aXRlbSgwKSk7
Ci0gICAgICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKLSAg
ICAgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKSB7Cisg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4oaW5zcGVjdG9yLmZpcnN0KCkpOworICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKICAgICAgICAgICAgIC8vIDxsZW5ndGg+CiAgICAgICAg
ICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7CiAgICAgICAgICAgICB3aWR0
aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUo
KSwgbV9yb290RWxlbWVudFN0eWxlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
ICh0eXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0lERU5UKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIHN3aXRjaCAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVBdXRv
OgpAQCAtNjI4MCwxNCArNjI2NCwxMiBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRy
YW5zZm9ybU9wCiAKICAgICBmbG9hdCB6b29tRmFjdG9yID0gc3R5bGUgPyBzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpIDogMTsKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAg
Q1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oaW5WYWx1ZSk7
Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGxpc3QtPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGxp
c3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVy
YXRvciBpID0gaW5WYWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CisgICAgICAgIENT
U1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7CiAgICAgICAgIGlmICghY3VyclZhbHVlLT5p
c1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdHJhbnNmb3JtVmFsdWUgPSBzdGF0aWNfY2Fz
dDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSo+KGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aSkpOworICAgICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdHJhbnNmb3JtVmFsdWUgPSBz
dGF0aWNfY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSo+KGkudmFsdWUoKSk7CiAgICAgICAg
IGlmICghdHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpKQogICAgICAgICAgICAgY29udGludWU7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCShyZXZpc2lvbiA5MTk3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwxMyArNDYsNiBAQCBDU1NWYWx1ZUxpc3Q6On5DU1NWYWx1ZUxpc3QoKQogewogfQogCi1DU1NW
YWx1ZSogQ1NTVmFsdWVMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KQotewotICAgIGlmIChpbmRl
eCA+PSBtX3ZhbHVlcy5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3Zh
bHVlc1tpbmRleF0uZ2V0KCk7Ci19Ci0KIHVuc2lnbmVkIHNob3J0IENTU1ZhbHVlTGlzdDo6Y3Nz
VmFsdWVUeXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ1NTX1ZBTFVFX0xJU1Q7CkBAIC05OCw3
ICs5MSw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NWYWx1ZUxpc3Q6OmMKIHsKICAg
ICBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gbmV3TGlzdCA9IG1faXNTcGFjZVNlcGFyYXRlZCA/
IGNyZWF0ZVNwYWNlU2VwYXJhdGVkKCkgOiBjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX3ZhbHVlcy5zaXplKCk7IGluZGV4KyspCi0g
ICAgICAgIG5ld0xpc3QtPmFwcGVuZChpdGVtKGluZGV4KSk7CisgICAgICAgIG5ld0xpc3QtPmFw
cGVuZChtX3ZhbHVlc1tpbmRleF0pOwogICAgIHJldHVybiBuZXdMaXN0OwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCShyZXZpc2lvbiA5MTk3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+Q1NTVmFsdWVMaXN0KCk7CiAKICAgICBzaXplX3QgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9Ci0gICAgQ1NTVmFsdWUqIGl0ZW0o
dW5zaWduZWQpOwotICAgIENTU1ZhbHVlKiBpdGVtV2l0aG91dEJvdW5kc0NoZWNrKHVuc2lnbmVk
IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBDU1NWYWx1ZSog
aXRlbShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGluZGV4IDwgbV92YWx1ZXMuc2l6ZSgpID8gbV92
YWx1ZXNbaW5kZXhdLmdldCgpIDogMDsgfQorICAgIENTU1ZhbHVlKiBpdGVtV2l0aG91dEJvdW5k
c0NoZWNrKHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9CiAK
ICAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPENTU1ZhbHVlPik7CiAgICAgdm9pZCBwcmVwZW5k
KFBhc3NSZWZQdHI8Q1NTVmFsdWU+KTsKQEAgLTczLDYgKzczLDMzIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2lzU3BhY2VTZXBhcmF0ZWQ7CiB9OwogCisvLyBPYmplY3RzIG9mIHRoaXMgY2xhc3Mg
YXJlIGludGVuZGVkIHRvIGJlIHN0YWNrLWFsbG9jYXRlZCBhbmQgc2NvcGVkIHRvIGEgc2luZ2xl
IGZ1bmN0aW9uLgorLy8gUGxlYXNlIHRha2UgY2FyZSBub3QgdG8gcGFzcyB0aGVzZSBhcm91bmQg
YXMgdGhleSBkbyBob2xkIG9udG8gYSByYXcgcG9pbnRlci4KK2NsYXNzIENTU1ZhbHVlTGlzdElu
c3BlY3RvciB7CitwdWJsaWM6CisgICAgQ1NTVmFsdWVMaXN0SW5zcGVjdG9yKENTU1ZhbHVlKiB2
YWx1ZSkgOiBtX2xpc3QoKHZhbHVlICYmIHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSA/IHN0YXRpY19j
YXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKSA6IDApIHsgfQorICAgIENTU1ZhbHVlKiBpdGVtKHNp
emVfdCBpbmRleCkgY29uc3QgeyBBU1NFUlQoaW5kZXggPCBsZW5ndGgoKSk7IHJldHVybiBtX2xp
c3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaW5kZXgpOyB9CisgICAgQ1NTVmFsdWUqIGZpcnN0
KCkgY29uc3QgeyByZXR1cm4gaXRlbSgwKTsgfQorICAgIENTU1ZhbHVlKiBzZWNvbmQoKSBjb25z
dCB7IHJldHVybiBpdGVtKDEpOyB9CisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGlzdCA/IG1fbGlzdC0+bGVuZ3RoKCkgOiAwOyB9Citwcml2YXRlOgorICAgIENTU1ZhbHVl
TGlzdCogbV9saXN0OworfTsKKworLy8gV3JhcHBlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGl0ZXJh
dGUgb3ZlciBhbnkgQ1NTVmFsdWUuIE5vbi1saXN0IHZhbHVlcyBhbmQgMCBiZWhhdmUgYXMgemVy
by1sZW5ndGggbGlzdHMuCisvLyBPYmplY3RzIG9mIHRoaXMgY2xhc3MgYXJlIGludGVuZGVkIHRv
IGJlIHN0YWNrLWFsbG9jYXRlZCBhbmQgc2NvcGVkIHRvIGEgc2luZ2xlIGZ1bmN0aW9uLgorLy8g
UGxlYXNlIHRha2UgY2FyZSBub3QgdG8gcGFzcyB0aGVzZSBhcm91bmQgYXMgdGhleSBkbyBob2xk
IG9udG8gYSByYXcgcG9pbnRlci4KK2NsYXNzIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIHsKK3B1Ymxp
YzoKKyAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvcihDU1NWYWx1ZSogdmFsdWUpIDogbV9pbnNwZWN0
b3IodmFsdWUpLCBtX3Bvc2l0aW9uKDApIHsgfQorICAgIGJvb2wgaGFzTW9yZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcG9zaXRpb24gPCBtX2luc3BlY3Rvci5sZW5ndGgoKTsgfQorICAgIENTU1ZhbHVl
KiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yLml0ZW0obV9wb3NpdGlvbik7IH0K
KyAgICB2b2lkIGFkdmFuY2UoKSB7IG1fcG9zaXRpb24rKzsgQVNTRVJUKG1fcG9zaXRpb24gPD0g
bV9pbnNwZWN0b3IubGVuZ3RoKCkpO30KKyAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX3Bvc2l0aW9uOyB9Citwcml2YXRlOgorICAgIENTU1ZhbHVlTGlzdEluc3BlY3RvciBtX2lu
c3BlY3RvcjsKKyAgICBzaXplX3QgbV9wb3NpdGlvbjsKK307CiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBDU1NWYWx1ZUxpc3RfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102485</attachid>
            <date>2011-07-31 23:56:24 -0700</date>
            <delta_ts>2011-08-01 01:32:00 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-65297-20110801165621.patch</filename>
            <type>text/plain</type>
            <size>18115</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyMTAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDctMzEgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgaXRlcmF0
b3IgdG8gQ1NTVmFsdWVMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NTI5NworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyAvIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBjc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVl
Ojppc0xlbmd0aCk6CisgICAgICAgIEFkZCBzaG9ydGhhbmQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMg
cHJpbWl0aXZlIHZhbHVlIGlzIGEgbGVuZ3RoLgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcDoKKyAgICAgICAgVXNlIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIHRocm91Z2hvdXQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UGFnZVNpemVQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcGVyYXRp
b25zKToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1ZhbHVlTGlzdDo6Y29weSk6CisgICAgICAgIFVzZSBpdGVtV2l0aG91dEJvdW5kc0NoZWNr
KCkgaW5zdGVhZCBvZiBpdGVtKCkuCisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAg
ICAgICBBZGQgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgYW5kIENTU1ZhbHVlTGlzdEluc3BlY3RvciBj
bGFzcyBkZWZpbml0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdDo6aXRlbSkK
KyAgICAgICAgUHJvdmlkZSBpbmxpbmUgZGVmaW5pdGlvbiBvZiBpdGVtLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTVmFsdWVMaXN0SXRlcmF0b3I6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yOjpoYXNNb3JlKToKKyAgICAgICAgUmV0
dXJuIHRydWUgaWYgdGhlcmUgYXJlIG1vcmUgdmFsdWVzIHRvIGNvbnN1bWUsIGluY2x1ZGluZyB0
aGUgY3VycmVudCB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9y
Ojp2YWx1ZSk6CisgICAgICAgIFJldHVybiB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRp
b24uCisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZUxpc3RJdGVyYXRvcjo6bmV4dCk6CisgICAg
ICAgIE1vdmUgdGhlIGl0ZXJhdG9yIGZvcndhcmQgdG8gdGhlIG5leHQgaXRlbS4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEl0ZXJhdG9yOjppbmRleCk6CisgICAgICAgIFJldHVybiB0
aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Zh
bHVlTGlzdEluc3BlY3Rvcjo6aXRlbSk6CisgICAgICAgIFJldHVybiB0aGUgaXRlbSBhdCBhIGdp
dmVuIGluZGV4LgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVMaXN0SW5zcGVjdG9yOjpmaXJz
dCk6CisgICAgICAgIFJldHVybiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ZhbHVlTGlzdEluc3BlY3Rvcjo6c2Vjb25kKToKKyAgICAgICAgUmV0dXJu
IHRoZSBzZWNvbmQgaXRlbSBpbiB0aGUgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVl
TGlzdEluc3BlY3Rvcjo6bGVuZ3RoKToKKyAgICAgICAgUmV0dXJuIHRoZSBzaXplIG9mIHRoZSB1
bmRlcmx5aW5nIGxpc3QuCisKIDIwMTEtMDctMzEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5MjA5
NC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCShyZXZpc2lvbiA5
MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTksNiArMTE5LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzVW5p
dFR5cGVMZW5ndGgoaW50IHR5cGUpIHsgcmV0dXJuICh0eXBlID4gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFICYmIHR5cGUgPCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykgfHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkVNUzsgfQogCisgICAgYm9vbCBpc0xlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIGlzVW5pdFR5cGVMZW5ndGgobV90eXBlKTsgfQorCiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZUlkZW50aWZpZXIoaW50IGlkZW50
aWZpZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmltaXRpdmVWYWx1ZShpZGVudGlmaWVy
KSk7IH0KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlQ29s
b3IodW5zaWduZWQgcmdiVmFsdWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmltaXRpdmVW
YWx1ZShyZ2JWYWx1ZSkpOyB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNyZWF0ZShkb3VibGUgdmFsdWUsIFVuaXRUeXBlcyB0eXBlKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUsIHR5cGUpKTsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gOTIxMDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSwx
MSArMTkxLDEwIEBAIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBtX3N0eWxlLT5hY2Nlc3NBbmkKIHNp
emVfdCBjaGlsZEluZGV4ID0gMDsgXAogaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7IFwKICAg
ICAvKiBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGFuIGFuaW1hdGlvbiwgY3JlYXRp
bmcgbmV3IGFuaW1hdGlvbnMgYXMgbmVlZGVkLiAqLyBcCi0gICAgQ1NTVmFsdWVMaXN0KiB2YWx1
ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7IFwKLSAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7IGkrKykgeyBcCisgICAg
Zm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFu
Y2UoKSkgeyBcCiAgICAgICAgIGlmIChjaGlsZEluZGV4IDw9IGxpc3QtPnNpemUoKSkgXAogICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOyBcCi0gICAgICAgIG1h
cEFuaW1hdGlvbiMjUHJvcChsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIHZhbHVlTGlzdC0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7IFwKKyAgICAgICAgbWFwQW5pbWF0aW9uIyNQcm9w
KGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgaS52YWx1ZSgpKTsgXAogICAgICAgICArK2No
aWxkSW5kZXg7IFwKICAgICB9IFwKIH0gZWxzZSB7IFwKQEAgLTI0MSwxMSArMjQwLDEwIEBAIEFu
aW1hdGlvbkxpc3QqIGxpc3QgPSBtX3N0eWxlLT5hY2Nlc3NUcmEKIHNpemVfdCBjaGlsZEluZGV4
ID0gMDsgXAogaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7IFwKICAgICAvKiBXYWxrIGVhY2gg
dmFsdWUgYW5kIHB1dCBpdCBpbnRvIGEgdHJhbnNpdGlvbiwgY3JlYXRpbmcgbmV3IGFuaW1hdGlv
bnMgYXMgbmVlZGVkLiAqLyBcCi0gICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNf
Y2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7IFwKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7IGkrKykgeyBcCisgICAgZm9yIChDU1NWYWx1ZUxp
c3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeyBcCiAgICAg
ICAgIGlmIChjaGlsZEluZGV4IDw9IGxpc3QtPnNpemUoKSkgXAogICAgICAgICAgICAgbGlzdC0+
YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOyBcCi0gICAgICAgIG1hcEFuaW1hdGlvbiMjUHJv
cChsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayhpKSk7IFwKKyAgICAgICAgbWFwQW5pbWF0aW9uIyNQcm9wKGxpc3QtPmFuaW1hdGlv
bihjaGlsZEluZGV4KSwgaS52YWx1ZSgpKTsgXAogICAgICAgICArK2NoaWxkSW5kZXg7IFwKICAg
ICB9IFwKIH0gZWxzZSB7IFwKQEAgLTQwMTgsMTIgKzQwMTYsMTAgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlz
dCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9
IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAgaW50IGxlbiA9IGxp
c3QtPmxlbmd0aCgpOwotCiAjaWYgRU5BQkxFKENTU19SRUdJT05TKQotICAgICAgICBpZiAobGVu
ID09IDEgJiYgbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKS0+aXNQcmltaXRpdmVWYWx1
ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDApKTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0SW5zcGVjdG9yIGluc3BlY3RvciA9IHZhbHVlOwor
ICAgICAgICBpZiAoaW5zcGVjdG9yLmxlbmd0aCgpID09IDEgJiYgaW5zcGVjdG9yLmZpcnN0KCkt
PmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNv
bnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaW5zcGVjdG9yLT5m
aXJzdCgpKTsKICAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZST01fRkxPVykgewogICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldFJlZ2lvblRocmVhZChjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1w
bCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00MDMyLDggKzQwMjgsOCBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAjZW5kaWYKIAogICAgICAgICBi
b29sIGRpZFNldCA9IGZhbHNlOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsr
KSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soaSk7CisgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBp
Lmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0g
aS52YWx1ZSgpOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgp
KSB7CiAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChzdGF0aWNfY2FzdDxDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlKj4oaXRlbSktPmdlbmVyYXRlZEltYWdlKCksIGRpZFNldCk7CiAg
ICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKQEAgLTQxMTYsMTcgKzQxMTIsMTYgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICB9CiAgICAgICAg
IGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBs
aXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwotICAgICAgICAgICAgc2l6
ZV90IGxlbmd0aCA9IGxpc3QtPmxlbmd0aCgpOwotICAgICAgICAgICAgUXVvdGVzRGF0YSogZGF0
YSA9IFF1b3Rlc0RhdGE6OmNyZWF0ZShsZW5ndGgpOworICAgICAgICAgICAgUXVvdGVzRGF0YSog
ZGF0YSA9IFF1b3Rlc0RhdGE6OmNyZWF0ZShsaXN0LT5sZW5ndGgoKSk7CiAgICAgICAgICAgICBp
ZiAoIWRhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBPdXQgb2YgbWVtb3J5CiAgICAg
ICAgICAgICBTdHJpbmcqIHF1b3RlcyA9IGRhdGEtPmRhdGEoKTsKLSAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBDU1NWYWx1
ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICBm
b3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSBsaXN0OyBpLmhhc01vcmUoKTsgaS5hZHZhbmNl
KCkpIHsKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKICAgICAg
ICAgICAgICAgICBBU1NFUlQoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKICAgICAgICAgICAg
ICAgICBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRl
bSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBl
KCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwotICAgICAgICAgICAgICAgIHF1
b3Rlc1tpXSA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAg
ICAgIHF1b3Rlc1tpLmluZGV4KCldID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoYWRvcHRSZWYo
ZGF0YSkpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CkBAIC00MTYyLDE3
ICs0MTU3LDE1IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpOwotICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NW
YWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKICAg
ICAgICAgRm9udEZhbWlseSYgZmlyc3RGYW1pbHkgPSBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1p
bHkoKTsKICAgICAgICAgRm9udEZhbWlseSogY3VyckZhbWlseSA9IDA7Ci0gICAgICAgIAorCiAg
ICAgICAgIC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3
ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgogICAgICAgICBib29sIG9sZEZhbWls
eVVzZWRGaXhlZERlZmF1bHRTaXplID0gZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNp
emUoKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2Ny
aXB0aW9uOjpOb0ZhbWlseSk7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkr
KykgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpOworICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsg
aS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9
IGkudmFsdWUoKTsKICAgICAgICAgICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CkBA
IC00MjQ4LDExICs0MjQxLDkgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5
KGludAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3Qg
Kmxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICBp
bnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxlbjsgaSsrKQorICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFs
dWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBDU1NWYWx1ZSAqaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Cisg
ICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKQEAgLTQ0NTMsMTMgKzQ0NDQsMTEgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBpZiAoIXZhbHVlLT5pc1Zh
bHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ZhbHVlTGlzdCAq
bGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAgaW50IGxl
biA9IGxpc3QtPmxlbmd0aCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsr
KSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gbGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKTsKKyAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFs
dWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAgICAgQ1NTVmFsdWUqIGN1
cnJWYWx1ZSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1NoYWRv
d1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBTaGFkb3dW
YWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4obGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKSk7CisgICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19j
YXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVlKTsKICAgICAgICAgICAgIGludCB4ID0gaXRlbS0+
eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZh
Y3Rvcik7CiAgICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50Pihz
dHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgaW50
IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOwpAQCAtNDQ3MCw5ICs0NDU5
LDkgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAg
ICAgICAgIGNvbG9yID0gZ2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0
KCkpOwogICAgICAgICAgICAgT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0
cihuZXcgU2hhZG93RGF0YSh4LCB5LCBibHVyLCBzcHJlYWQsIHNoYWRvd1N0eWxlLCBpZCA9PSBD
U1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xv
cjo6dHJhbnNwYXJlbnQpKTsKICAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRT
aGFkb3cpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhzaGFkb3dEYXRh
LnJlbGVhc2UoKSwgaSAvKiBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0
eSBlbnRyeSAqLyk7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhzaGFk
b3dEYXRhLnJlbGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMg
aXMgbm90IHRoZSBmaXJzdCBlbnRyeQogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1fc3R5bGUtPnNldEJveFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgaSAvKiBhZGQgdG8g
dGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0eSBlbnRyeSAqLyk7CisgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4
KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTUyODUsNDggKzUyNzQsNDMgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVBhZ2VTaXplUHJvcGVydHkoQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIG1f
c3R5bGUtPnJlc2V0UGFnZVNpemVUeXBlKCk7Ci0gICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3Qo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gc3RhdGlj
X2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwogICAgIExlbmd0aCB3aWR0aDsKICAgICBMZW5n
dGggaGVpZ2h0OwogICAgIFBhZ2VTaXplVHlwZSBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfQVVU
TzsKLSAgICBzd2l0Y2ggKHZhbHVlTGlzdC0+bGVuZ3RoKCkpIHsKKyAgICBDU1NWYWx1ZUxpc3RJ
bnNwZWN0b3IgaW5zcGVjdG9yID0gdmFsdWU7CisgICAgc3dpdGNoIChpbnNwZWN0b3IubGVuZ3Ro
KCkpIHsKICAgICBjYXNlIDI6IHsKICAgICAgICAgLy8gPGxlbmd0aD57Mn0gfCA8cGFnZS1zaXpl
PiA8b3JpZW50YXRpb24+CiAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZF
RDsKLSAgICAgICAgaWYgKCF2YWx1ZUxpc3QtPml0ZW0oMCktPmlzUHJpbWl0aXZlVmFsdWUoKSB8
fCAhdmFsdWVMaXN0LT5pdGVtKDEpLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICgh
aW5zcGVjdG9yLmZpcnN0KCktPmlzUHJpbWl0aXZlVmFsdWUoKSB8fCAhaW5zcGVjdG9yLnNlY29u
ZCgpLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZTAgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlTGlzdC0+aXRlbSgwKSk7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZTEgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
TGlzdC0+aXRlbSgxKSk7Ci0gICAgICAgIGludCB0eXBlMCA9IHByaW1pdGl2ZVZhbHVlMC0+cHJp
bWl0aXZlVHlwZSgpOwotICAgICAgICBpbnQgdHlwZTEgPSBwcmltaXRpdmVWYWx1ZTEtPnByaW1p
dGl2ZVR5cGUoKTsKLSAgICAgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVu
Z3RoKHR5cGUwKSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3QgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGluc3BlY3Rvci5maXJzdCgpKTsKKyAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHNlY29uZCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
aW5zcGVjdG9yLnNlY29uZCgpKTsKKyAgICAgICAgaWYgKGZpcnN0LT5pc0xlbmd0aCgpKSB7CiAg
ICAgICAgICAgICAvLyA8bGVuZ3RoPnsyfQotICAgICAgICAgICAgaWYgKCFDU1NQcmltaXRpdmVW
YWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlMSkpCisgICAgICAgICAgICBpZiAoIXNlY29uZC0+
aXNMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB3aWR0aCA9
IHByaW1pdGl2ZVZhbHVlMC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBoZWlnaHQgPSBwcmltaXRpdmVWYWx1ZTEtPmNvbXB1
dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAg
ICAgd2lkdGggPSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSk7CisgICAgICAgICAgICBoZWlnaHQgPSBzZWNvbmQtPmNvbXB1dGVMZW5ndGg8
TGVuZ3RoPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgogICAgICAgICAgICAgLy8g
VGhlIHZhbHVlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBh
cmFtZXRlci4KLSAgICAgICAgICAgIGlmICghcGFnZVNpemVGcm9tTmFtZShwcmltaXRpdmVWYWx1
ZTAsIHByaW1pdGl2ZVZhbHVlMSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICBpZiAoIXBh
Z2VTaXplRnJvbU5hbWUoZmlyc3QsIHNlY29uZCwgd2lkdGgsIGhlaWdodCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IDE6IHsKICAgICAgICAgLy8gPGxlbmd0aD4gfCBhdXRvIHwgPHBhZ2Utc2l6ZT4gfCBbIHBvcnRy
YWl0IHwgbGFuZHNjYXBlXQotICAgICAgICBpZiAoIXZhbHVlTGlzdC0+aXRlbSgwKS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWluc3BlY3Rvci5maXJzdCgpLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVM
aXN0LT5pdGVtKDApKTsKLSAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0
aXZlVHlwZSgpOwotICAgICAgICBpZiAoQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5n
dGgodHlwZSkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpbnNwZWN0b3IuZmlyc3QoKSk7CisgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewogICAgICAgICAgICAgLy8gPGxl
bmd0aD4KICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKICAg
ICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8
TGVuZ3RoPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaWYgKHR5cGUgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKKyAg
ICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpICE9IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfSURFTlQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUF1dG86CkBAIC02MjgwLDE0ICs2MjY0LDEyIEBAIGJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Y3JlYXRlVHJhbnNmb3JtT3AKIAogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdHlsZSA/
IHN0eWxlLT5lZmZlY3RpdmVab29tKCkgOiAxOwogICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3Bl
cmF0aW9uczsKLSAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPihpblZhbHVlKTsKLSAgICB1bnNpZ25lZCBzaXplID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBDU1NWYWx1ZSog
Y3VyclZhbHVlID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICBmb3IgKENT
U1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSBpblZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkp
IHsKKyAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKICAgICAgICAgaWYg
KCFjdXJyVmFsdWUtPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKiB0cmFuc2Zvcm1WYWx1
ZSA9IHN0YXRpY19jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4obGlzdC0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjayhpKSk7CisgICAgICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKiB0cmFu
c2Zvcm1WYWx1ZSA9IHN0YXRpY19jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4oaS52YWx1
ZSgpKTsKICAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAJKHJldmlz
aW9uIDkyMTAxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDEzICs0Niw2IEBAIENTU1ZhbHVlTGlzdDo6fkNTU1ZhbHVlTGlzdCgp
CiB7CiB9CiAKLUNTU1ZhbHVlKiBDU1NWYWx1ZUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpCi17
Ci0gICAgaWYgKGluZGV4ID49IG1fdmFsdWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIG1fdmFsdWVzW2luZGV4XS5nZXQoKTsKLX0KLQogdW5zaWduZWQgc2hvcnQgQ1NT
VmFsdWVMaXN0Ojpjc3NWYWx1ZVR5cGUoKSBjb25zdAogewogICAgIHJldHVybiBDU1NfVkFMVUVf
TElTVDsKQEAgLTk4LDcgKzkxLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1ZhbHVl
TGlzdDo6YwogewogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBuZXdMaXN0ID0gbV9pc1Nw
YWNlU2VwYXJhdGVkID8gY3JlYXRlU3BhY2VTZXBhcmF0ZWQoKSA6IGNyZWF0ZUNvbW1hU2VwYXJh
dGVkKCk7CiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fdmFsdWVzLnNpemUo
KTsgaW5kZXgrKykKLSAgICAgICAgbmV3TGlzdC0+YXBwZW5kKGl0ZW0oaW5kZXgpKTsKKyAgICAg
ICAgbmV3TGlzdC0+YXBwZW5kKG1fdmFsdWVzW2luZGV4XSk7CiAgICAgcmV0dXJuIG5ld0xpc3Q7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgJKHJldmlzaW9uIDkyMTAxKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw4ICs0Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DU1NWYWx1ZUxpc3QoKTsKIAogICAg
IHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KLSAgICBD
U1NWYWx1ZSogaXRlbSh1bnNpZ25lZCk7Ci0gICAgQ1NTVmFsdWUqIGl0ZW1XaXRob3V0Qm91bmRz
Q2hlY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XS5nZXQoKTsgfQor
ICAgIENTU1ZhbHVlKiBpdGVtKHNpemVfdCBpbmRleCkgeyByZXR1cm4gaW5kZXggPCBtX3ZhbHVl
cy5zaXplKCkgPyBtX3ZhbHVlc1tpbmRleF0uZ2V0KCkgOiAwOyB9CisgICAgQ1NTVmFsdWUqIGl0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRl
eF0uZ2V0KCk7IH0KIAogICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8Q1NTVmFsdWU+KTsKICAg
ICB2b2lkIHByZXBlbmQoUGFzc1JlZlB0cjxDU1NWYWx1ZT4pOwpAQCAtNzMsNiArNzMsMzMgQEAg
cHJpdmF0ZToKICAgICBib29sIG1faXNTcGFjZVNlcGFyYXRlZDsKIH07CiAKKy8vIE9iamVjdHMg
b2YgdGhpcyBjbGFzcyBhcmUgaW50ZW5kZWQgdG8gYmUgc3RhY2stYWxsb2NhdGVkIGFuZCBzY29w
ZWQgdG8gYSBzaW5nbGUgZnVuY3Rpb24uCisvLyBQbGVhc2UgdGFrZSBjYXJlIG5vdCB0byBwYXNz
IHRoZXNlIGFyb3VuZCBhcyB0aGV5IGRvIGhvbGQgb250byBhIHJhdyBwb2ludGVyLgorY2xhc3Mg
Q1NTVmFsdWVMaXN0SW5zcGVjdG9yIHsKK3B1YmxpYzoKKyAgICBDU1NWYWx1ZUxpc3RJbnNwZWN0
b3IoQ1NTVmFsdWUqIHZhbHVlKSA6IG1fbGlzdCgodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0
KCkpID8gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpIDogMCkgeyB9CisgICAgQ1NT
VmFsdWUqIGl0ZW0oc2l6ZV90IGluZGV4KSBjb25zdCB7IEFTU0VSVChpbmRleCA8IGxlbmd0aCgp
KTsgcmV0dXJuIG1fbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpbmRleCk7IH0KKyAgICBD
U1NWYWx1ZSogZmlyc3QoKSBjb25zdCB7IHJldHVybiBpdGVtKDApOyB9CisgICAgQ1NTVmFsdWUq
IHNlY29uZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZW0oMSk7IH0KKyAgICBzaXplX3QgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9saXN0ID8gbV9saXN0LT5sZW5ndGgoKSA6IDA7IH0KK3ByaXZhdGU6
CisgICAgQ1NTVmFsdWVMaXN0KiBtX2xpc3Q7Cit9OworCisvLyBXcmFwcGVyIHRoYXQgY2FuIGJl
IHVzZWQgdG8gaXRlcmF0ZSBvdmVyIGFueSBDU1NWYWx1ZS4gTm9uLWxpc3QgdmFsdWVzIGFuZCAw
IGJlaGF2ZSBhcyB6ZXJvLWxlbmd0aCBsaXN0cy4KKy8vIE9iamVjdHMgb2YgdGhpcyBjbGFzcyBh
cmUgaW50ZW5kZWQgdG8gYmUgc3RhY2stYWxsb2NhdGVkIGFuZCBzY29wZWQgdG8gYSBzaW5nbGUg
ZnVuY3Rpb24uCisvLyBQbGVhc2UgdGFrZSBjYXJlIG5vdCB0byBwYXNzIHRoZXNlIGFyb3VuZCBh
cyB0aGV5IGRvIGhvbGQgb250byBhIHJhdyBwb2ludGVyLgorY2xhc3MgQ1NTVmFsdWVMaXN0SXRl
cmF0b3IgeworcHVibGljOgorICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yKENTU1ZhbHVlKiB2YWx1
ZSkgOiBtX2luc3BlY3Rvcih2YWx1ZSksIG1fcG9zaXRpb24oMCkgeyB9CisgICAgYm9vbCBoYXNN
b3JlKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbiA8IG1faW5zcGVjdG9yLmxlbmd0aCgpOyB9
CisgICAgQ1NTVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3IuaXRlbSht
X3Bvc2l0aW9uKTsgfQorICAgIHZvaWQgYWR2YW5jZSgpIHsgbV9wb3NpdGlvbisrOyBBU1NFUlQo
bV9wb3NpdGlvbiA8PSBtX2luc3BlY3Rvci5sZW5ndGgoKSk7fQorICAgIHNpemVfdCBpbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KK3ByaXZhdGU6CisgICAgQ1NTVmFsdWVMaXN0
SW5zcGVjdG9yIG1faW5zcGVjdG9yOworICAgIHNpemVfdCBtX3Bvc2l0aW9uOworfTsKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIENTU1ZhbHVlTGlzdF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>