<?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>137165</bug_id>
          
          <creation_ts>2014-09-26 19:49:44 -0700</creation_ts>
          <short_desc>Support modern for loops over StringView code units and code points</short_desc>
          <delta_ts>2014-10-03 10:58:11 -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="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1037605</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-26 19:49:44 -0700</bug_when>
    <thetext>Support modern for loops over StringViews</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037607</commentid>
    <comment_count>1</comment_count>
      <attachid>238754</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-26 20:03:16 -0700</bug_when>
    <thetext>Created attachment 238754
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037817</commentid>
    <comment_count>2</comment_count>
      <attachid>238754</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-28 16:37:54 -0700</bug_when>
    <thetext>Comment on attachment 238754
Patch

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

I think this is a pretty good idea.

But what guarantees these objects don’t last longer than the underlying StringView? It seems really easy to make the mistake of keeping one of these alive when the StringView is gone. For example, this code would not work:

    for (UChar character : functionReturningStringView().codeUnits())

I think we should consider a different version of these that will work even if the StringView has been destroyed. Probably the best way to do this is to use a StringView rather than a const StringView&amp; as a data member of the iterator.

We need to test how codePoints works on invalid sequences; such as when the last character is the lead and there is no trail, and when a trail appears with no lead. U16_NEXT handles these cases, but I am not sure that our code handles them correctly.

I am not sure that

&gt; Source/WTF/ChangeLog:8
&gt; +        This patch adds two functions, codepoints() and codeunits(), on StringView.

Code point and code unit are each two word phrases, not single words. Lets not smash them together into one word. uNless there is a good reason.

&gt; Source/WTF/wtf/text/StringView.h:40
&gt; +class StringViewCodepoints {

I think this should be a member class. So it would be declared inside the StringView class.

    class StringView {
        ... 
        class CodePoints;

Then later, like this:

    class StringView::CodePoints {
        ...
    };

&gt; Source/WTF/wtf/text/StringView.h:47
&gt; +        bool operator!=(const Iterator&amp;) const;

I think we should supply both == and != operators.

&gt; Source/WTF/wtf/text/StringView.h:57
&gt; +    StringViewCodepoints(const StringView&amp;);

Might want this to be explicit.

&gt; Source/WTF/wtf/text/StringView.h:60
&gt; +private:

Need a blank line before this.

&gt; Source/WTF/wtf/text/StringView.h:240
&gt; +    StringViewCodepoints codepoints() const
&gt; +    {
&gt; +        return StringViewCodepoints(*this);
&gt; +    }
&gt; +
&gt; +    StringViewCodeunits codeunits() const
&gt; +    {
&gt; +        return StringViewCodeunits(*this);
&gt; +    }

Please put the bodies of these functions outside the class. I have a patch coming soon that does this for all StringView member functions.

&gt; Source/WTF/wtf/text/StringView.h:348
&gt; +    if (m_cacheIsValid) {
&gt; +        m_index = m_nextIndexCache;
&gt; +        m_cacheIsValid = false;

Would read better with early return.

&gt; Tools/TestWebKitAPI/Tests/WTF/StringView.cpp:158
&gt; +    for (auto codepoint : StringView(builder.toString()).codepoints()) {

I think this code would crash if it was run under a memory debugger; the StringView won’t stay alive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037879</commentid>
    <comment_count>3</comment_count>
      <attachid>238754</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-28 21:47:57 -0700</bug_when>
    <thetext>Comment on attachment 238754
Patch

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

&gt;&gt; Source/WTF/ChangeLog:8
&gt;&gt; +        This patch adds two functions, codepoints() and codeunits(), on StringView.
&gt; 
&gt; Code point and code unit are each two word phrases, not single words. Lets not smash them together into one word. uNless there is a good reason.

Done.

&gt;&gt; Source/WTF/wtf/text/StringView.h:40
&gt;&gt; +class StringViewCodepoints {
&gt; 
&gt; I think this should be a member class. So it would be declared inside the StringView class.
&gt; 
&gt;     class StringView {
&gt;         ... 
&gt;         class CodePoints;
&gt; 
&gt; Then later, like this:
&gt; 
&gt;     class StringView::CodePoints {
&gt;         ...
&gt;     };

Done. I really like the translation of StringViewCodePoints to StringView::CodePoints. There is a way to describe exactly what I&apos;m trying to describe!

&gt;&gt; Source/WTF/wtf/text/StringView.h:47
&gt;&gt; +        bool operator!=(const Iterator&amp;) const;
&gt; 
&gt; I think we should supply both == and != operators.

Done.

&gt;&gt; Source/WTF/wtf/text/StringView.h:57
&gt;&gt; +    StringViewCodepoints(const StringView&amp;);
&gt; 
&gt; Might want this to be explicit.

Done.

&gt;&gt; Source/WTF/wtf/text/StringView.h:60
&gt;&gt; +private:
&gt; 
&gt; Need a blank line before this.

Done.

&gt;&gt; Source/WTF/wtf/text/StringView.h:240
&gt;&gt; +    }
&gt; 
&gt; Please put the bodies of these functions outside the class. I have a patch coming soon that does this for all StringView member functions.

Done.

&gt;&gt; Source/WTF/wtf/text/StringView.h:348
&gt;&gt; +        m_cacheIsValid = false;
&gt; 
&gt; Would read better with early return.

Done.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/StringView.cpp:158
&gt;&gt; +    for (auto codepoint : StringView(builder.toString()).codepoints()) {
&gt; 
&gt; I think this code would crash if it was run under a memory debugger; the StringView won’t stay alive.

I tested this out and you&apos;re right. I&apos;ve made the internal member a StringView instead of a const StringView&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037880</commentid>
    <comment_count>4</comment_count>
      <attachid>238839</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-28 21:53:23 -0700</bug_when>
    <thetext>Created attachment 238839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037881</commentid>
    <comment_count>5</comment_count>
      <attachid>238840</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-28 22:37:56 -0700</bug_when>
    <thetext>Created attachment 238840
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037882</commentid>
    <comment_count>6</comment_count>
      <attachid>238841</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-28 22:41:41 -0700</bug_when>
    <thetext>Created attachment 238841
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037883</commentid>
    <comment_count>7</comment_count>
      <attachid>238842</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-28 22:43:30 -0700</bug_when>
    <thetext>Created attachment 238842
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037981</commentid>
    <comment_count>8</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2014-09-29 10:29:38 -0700</bug_when>
    <thetext>I have two comments on this change:

1. There is no way to use this code to traverse the string backward.  The std::string creates  reverse beginning and  reverse end iterators which can be used to traverse the string backward.  Maybe you need to do the same for your iterators.  Or maybe we can add operator--() to your iterators.

2. It was had for me to keep track to with your code in StringView::CodePoints::Iterator::operator++() and StringView::CodePoints::Iterator::operator*().  It seems you have two different cases: is8Bit() and !is8Bit().  When is8Bit() is true you do not need to cache the values m_nextIndexCache and m_codepointCache.  But you are doing the following:

  a) you are not initializing m_codepointCache in the constructor. I know it is guarded by having m_cacheIsValid set to false in the constructor.  And m_codepointCache is going to be fixed in operator++() or operator*() if is8Bit() is false.  But I think initializing it to nullptr in the constructor might make things clearer.
  b) In StringView::CodePoints::Iterator::operator*() and if m_stringView.is8Bit() you are ++m_nextIndexCache.  This looks weird to me to have the operator*() increments the index cache in this cache.  And actually it can produce bugs: Consider this example:
    StringView strView = StringView(String(&quot;ABC&quot;)).codePoints();
    Iterator it = strView.begin();
    std::cout &lt;&lt; *it;
    std::cout &lt;&lt; *it;
    it++;
    std::cout &lt;&lt; *it;

Result will be:
  AAC

Expected:
  AAB

The reason is in  operator*() we moved the m_nextIndexCache twice and in operator++() we set the m_index to m_nextIndexCache which was &apos;2&apos;.
  c) I would suggest in StringView::CodePoints::Iterator::operator*() and StringView::CodePoints::Iterator::operator++() to handle the cases is8Bit() and !is8Bit() in completely different code paths since when is8Bit() is true, you do not need the cache and when is8Bit()  is true you need the cache.  I personally like the code when it looks like a tree:  The code starts and diverges and keep diverging.  But I got confused when it looks like a diamond: The code starts, diverge and then converge again.  The code in these two functions looks like a diamond.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037999</commentid>
    <comment_count>9</comment_count>
      <attachid>238842</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-29 11:27:56 -0700</bug_when>
    <thetext>Comment on attachment 238842
Patch

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

&gt; Source/WTF/wtf/text/StringView.h:387
&gt; +        ++m_nextIndexCache;

This is wrong if operator++() has been called multiple times since the last call to operator*()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038004</commentid>
    <comment_count>10</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-29 12:14:23 -0700</bug_when>
    <thetext>Replies inline.
(In reply to comment #8)
&gt; I have two comments on this change:
&gt; 
&gt; 1. There is no way to use this code to traverse the string backward.  The std::string creates  reverse beginning and  reverse end iterators which can be used to traverse the string backward.  Maybe you need to do the same for your iterators.  Or maybe we can add operator--() to your iterators.

Yep. That is a non-goal. If we need this in the future, we can add it in.

&gt; 
&gt; 2. It was had for me to keep track to with your code in StringView::CodePoints::Iterator::operator++() and StringView::CodePoints::Iterator::operator*().  It seems you have two different cases: is8Bit() and !is8Bit().  When is8Bit() is true you do not need to cache the values m_nextIndexCache and m_codepointCache.  But you are doing the following:
&gt; 
&gt;   a) you are not initializing m_codepointCache in the constructor. I know it is guarded by having m_cacheIsValid set to false in the constructor.  And m_codepointCache is going to be fixed in operator++() or operator*() if is8Bit() is false.  But I think initializing it to nullptr in the constructor might make things clearer.

The m_cacheIsValid should be enough, but it&apos;s cheap enough to do this that I&apos;ll do it for readability.

&gt;   b) In StringView::CodePoints::Iterator::operator*() and if m_stringView.is8Bit() you are ++m_nextIndexCache.  This looks weird to me to have the operator*() increments the index cache in this cache.  And actually it can produce bugs: Consider this example:
&gt;     StringView strView = StringView(String(&quot;ABC&quot;)).codePoints();
&gt;     Iterator it = strView.begin();
&gt;     std::cout &lt;&lt; *it;
&gt;     std::cout &lt;&lt; *it;
&gt;     it++;
&gt;     std::cout &lt;&lt; *it;
&gt; 
&gt; Result will be:
&gt;   AAC
&gt; 
&gt; Expected:
&gt;   AAB
&gt; 
&gt; The reason is in  operator*() we moved the m_nextIndexCache twice and in operator++() we set the m_index to m_nextIndexCache which was &apos;2&apos;.

Line 390 makes this not possible. However, you bring up a good point - I don&apos;t have any tests regarding calling operator++() or operator*() multiple times in a row. I&apos;ve added some tests.

&gt;   c) I would suggest in StringView::CodePoints::Iterator::operator*() and StringView::CodePoints::Iterator::operator++() to handle the cases is8Bit() and !is8Bit() in completely different code paths since when is8Bit() is true, you do not need the cache and when is8Bit()  is true you need the cache.  I personally like the code when it looks like a tree:  The code starts and diverges and keep diverging.  But I got confused when it looks like a diamond: The code starts, diverge and then converge again.  The code in these two functions looks like a diamond.

I agree with your premise but disagree with your conclusion. I don&apos;t think that having four iterator classes would be worth the amount of complexity that could be avoided. There are only 4 variables inside CodePoints, and each of the 4 is a (variation on an) int.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038005</commentid>
    <comment_count>11</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-29 12:18:20 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I have two comments on this change:
&gt; 
&gt; 1. There is no way to use this code to traverse the string backward.  The std::string creates  reverse beginning and  reverse end iterators which can be used to traverse the string backward.  Maybe you need to do the same for your iterators.  Or maybe we can add operator--() to your iterators.
&gt; 
&gt; 2. It was had for me to keep track to with your code in StringView::CodePoints::Iterator::operator++() and StringView::CodePoints::Iterator::operator*().  It seems you have two different cases: is8Bit() and !is8Bit().  When is8Bit() is true you do not need to cache the values m_nextIndexCache and m_codepointCache.  But you are doing the following:
&gt; 
&gt;   a) you are not initializing m_codepointCache in the constructor. I know it is guarded by having m_cacheIsValid set to false in the constructor.  And m_codepointCache is going to be fixed in operator++() or operator*() if is8Bit() is false.  But I think initializing it to nullptr in the constructor might make things clearer.
&gt;   b) In StringView::CodePoints::Iterator::operator*() and if m_stringView.is8Bit() you are ++m_nextIndexCache.  This looks weird to me to have the operator*() increments the index cache in this cache.  And actually it can produce bugs: Consider this example:
&gt;     StringView strView = StringView(String(&quot;ABC&quot;)).codePoints();
&gt;     Iterator it = strView.begin();
&gt;     std::cout &lt;&lt; *it;
&gt;     std::cout &lt;&lt; *it;
&gt;     it++;
&gt;     std::cout &lt;&lt; *it;
&gt; 
&gt; Result will be:
&gt;   AAC
&gt; 
&gt; Expected:
&gt;   AAB
&gt; 
&gt; The reason is in  operator*() we moved the m_nextIndexCache twice and in operator++() we set the m_index to m_nextIndexCache which was &apos;2&apos;.
&gt;   c) I would suggest in StringView::CodePoints::Iterator::operator*() and StringView::CodePoints::Iterator::operator++() to handle the cases is8Bit() and !is8Bit() in completely different code paths since when is8Bit() is true, you do not need the cache and when is8Bit()  is true you need the cache.  I personally like the code when it looks like a tree:  The code starts and diverges and keep diverging.  But I got confused when it looks like a diamond: The code starts, diverge and then converge again.  The code in these two functions looks like a diamond.

I&apos;ve added some ASSERTs that should make it more obvious what is going on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038006</commentid>
    <comment_count>12</comment_count>
      <attachid>238865</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-29 12:18:44 -0700</bug_when>
    <thetext>Created attachment 238865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038234</commentid>
    <comment_count>13</comment_count>
      <attachid>238931</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-30 09:48:12 -0700</bug_when>
    <thetext>Created attachment 238931
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039024</commentid>
    <comment_count>14</comment_count>
      <attachid>238931</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-02 16:17:54 -0700</bug_when>
    <thetext>Comment on attachment 238931
Patch

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

review- because we don’t want StringView == StringView to do what is coded here.

&gt; Source/WTF/wtf/text/StringView.h:41
&gt; +    class CodePoints;
&gt; +    class CodeUnits;

I suggest defining these right before they are used instead of at the top of the class.

&gt; Source/WTF/wtf/text/StringView.h:188
&gt; +    bool operator==(const StringView&amp;) const;
&gt; +    bool operator!=(const StringView&amp;) const;

These operators should be implemented as free functions, not member functions. If these are member functions, then no type conversions can be done on the left side of the == and !=, but if they are free functions they can be.

&gt; Source/WTF/wtf/text/StringView.h:247
&gt; +#if !ASSERT_DISABLED
&gt; +        mutable Mode m_mode;
&gt; +#endif

I think a boolean named:

    bool m_alreadyIncremented;

or something like that, would be clearer than this enum, which I find mysterious.

&gt; Source/WTF/wtf/text/StringView.h:339
&gt; +inline bool StringView::operator==(const StringView&amp; other) const
&gt; +{
&gt; +    return m_characters == other.m_characters &amp;&amp; m_length == other.m_length;
&gt; +}

I don’t think it’s good idea to have a StringView == operator that checks identity rather than contents of the strings. I think an == operator on two string views should compare the actual characters, not the pointers. And should return true if the two views look at two different ranges of memory with the same characters, even if one is 8-bit and the other 16-bit.

Or we could just not have an == operator, but having one with this meaning seems like a bad idea.

&gt; Source/WTF/wtf/text/StringView.h:396
&gt; +    return m_stringView == other.m_stringView &amp;&amp; m_index == other.m_index;

This should assert that &amp;m_stringView == &amp;other.m_stringView and should not look at m_stringView at all in non-debug builds.

&gt; Source/WTF/wtf/text/StringView.h:438
&gt; +    return m_stringView == other.m_stringView &amp;&amp; m_index == other.m_index;

This should assert that &amp;m_stringView == &amp;other.m_stringView and should not look at m_stringView at all in non-debug builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039054</commentid>
    <comment_count>15</comment_count>
      <attachid>238931</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-10-02 17:01:50 -0700</bug_when>
    <thetext>Comment on attachment 238931
Patch

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

&gt;&gt; Source/WTF/wtf/text/StringView.h:41
&gt;&gt; +    class CodeUnits;
&gt; 
&gt; I suggest defining these right before they are used instead of at the top of the class.

Done.

&gt;&gt; Source/WTF/wtf/text/StringView.h:188
&gt;&gt; +    bool operator!=(const StringView&amp;) const;
&gt; 
&gt; These operators should be implemented as free functions, not member functions. If these are member functions, then no type conversions can be done on the left side of the == and !=, but if they are free functions they can be.

Given your comment below, I think providing these operators is out of scope for this patch.

&gt;&gt; Source/WTF/wtf/text/StringView.h:247
&gt;&gt; +#endif
&gt; 
&gt; I think a boolean named:
&gt; 
&gt;     bool m_alreadyIncremented;
&gt; 
&gt; or something like that, would be clearer than this enum, which I find mysterious.

Done.

&gt;&gt; Source/WTF/wtf/text/StringView.h:339
&gt;&gt; +}
&gt; 
&gt; I don’t think it’s good idea to have a StringView == operator that checks identity rather than contents of the strings. I think an == operator on two string views should compare the actual characters, not the pointers. And should return true if the two views look at two different ranges of memory with the same characters, even if one is 8-bit and the other 16-bit.
&gt; 
&gt; Or we could just not have an == operator, but having one with this meaning seems like a bad idea.

Given your comment below, I think providing an == operator is out of scope for this patch. There are different ways to look at the characters inside a StringView: we could compare them code point by code point, or we could use ICU to canonicalize the strings and then compare the canonicalized versions. We could compare code units instead if we wanted to avoid the U16_NEXT() and know that both strings are in UTF-16.

&gt;&gt; Source/WTF/wtf/text/StringView.h:396
&gt;&gt; +    return m_stringView == other.m_stringView &amp;&amp; m_index == other.m_index;
&gt; 
&gt; This should assert that &amp;m_stringView == &amp;other.m_stringView and should not look at m_stringView at all in non-debug builds.

Done.

&gt;&gt; Source/WTF/wtf/text/StringView.h:438
&gt;&gt; +    return m_stringView == other.m_stringView &amp;&amp; m_index == other.m_index;
&gt; 
&gt; This should assert that &amp;m_stringView == &amp;other.m_stringView and should not look at m_stringView at all in non-debug builds.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039067</commentid>
    <comment_count>16</comment_count>
      <attachid>239162</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-10-02 17:31:09 -0700</bug_when>
    <thetext>Created attachment 239162
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039070</commentid>
    <comment_count>17</comment_count>
      <attachid>239162</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-02 17:36:15 -0700</bug_when>
    <thetext>Comment on attachment 239162
Patch

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

&gt; Source/WTF/wtf/text/StringView.h:223
&gt; +        mutable bool m_alreadyIncremented;

I guess this isn’t as clear as I thought it would be, because I meant exactly the opposite of what you did!

&gt; Source/WTF/wtf/text/StringView.h:389
&gt; +    m_alreadyIncremented = false;

My idea is that we would be setting this to true here, because as part of the * operator, we “already incremented” the iterator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039221</commentid>
    <comment_count>18</comment_count>
      <attachid>239162</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-03 09:08:20 -0700</bug_when>
    <thetext>Comment on attachment 239162
Patch

This is OK, but I think the m_alreadyIncremented boolean is confusing. What I proposed was actually the opposite of what you wrote, showing that the two of us don’t even agree on this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039226</commentid>
    <comment_count>19</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-10-03 09:11:32 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 239162 [details])
&gt; This is OK, but I think the m_alreadyIncremented boolean is confusing. What I proposed was actually the opposite of what you wrote, showing that the two of us don’t even agree on this!

Interesting. I thought you meant I should make line 380 set it to true because, once you&apos;ve run the increment operator, the iterator has already been incremented, so you can&apos;t increment it again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039229</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-03 09:17:04 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; This is OK, but I think the m_alreadyIncremented boolean is confusing. What I proposed was actually the opposite of what you wrote, showing that the two of us don’t even agree on this!
&gt; 
&gt; Interesting. I thought you meant I should make line 380 set it to true because, once you&apos;ve run the increment operator, the iterator has already been incremented, so you can&apos;t increment it again.

Yes, makes logical sense but is not what I meant.

I meant that once you use the * operator the iterator is in an unusual state. It has already been incremented, so when you then actually use the ++ operator you don’t have to do any incrementing. Further, it’s not safe to do operations like == on it when it’s in this “already incremented” state because they will yield incorrect results. So, critically, StringView::CodePoints::Iterator::operator== is missing assertions that check that neither of the two iterators is in this unusual “already incremented” state, whatever we call the boolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039235</commentid>
    <comment_count>21</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-10-03 09:34:44 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (In reply to comment #18)
&gt; &gt; &gt; This is OK, but I think the m_alreadyIncremented boolean is confusing. What I proposed was actually the opposite of what you wrote, showing that the two of us don’t even agree on this!
&gt; &gt; 
&gt; &gt; Interesting. I thought you meant I should make line 380 set it to true because, once you&apos;ve run the increment operator, the iterator has already been incremented, so you can&apos;t increment it again.
&gt; 
&gt; Yes, makes logical sense but is not what I meant.
&gt; 
&gt; I meant that once you use the * operator the iterator is in an unusual state. It has already been incremented, so when you then actually use the ++ operator you don’t have to do any incrementing. Further, it’s not safe to do operations like == on it when it’s in this “already incremented” state because they will yield incorrect results. So, critically, StringView::CodePoints::Iterator::operator== is missing assertions that check that neither of the two iterators is in this unusual “already incremented” state, whatever we call the boolean.

Ah, I understand. Your thinking of the term &quot;increment&quot; is referring to the internal m_index variable, and my thinking of the term &quot;increment&quot; is referring to the operator++ API call.  I&apos;ll switch the boolean (and add the missing ASSERTs).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039265</commentid>
    <comment_count>22</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-10-03 10:58:11 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/174271</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238754</attachid>
            <date>2014-09-26 20:03:16 -0700</date>
            <delta_ts>2014-09-28 21:53:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137165-20140926200317.patch</filename>
            <type>text/plain</type>
            <size>9677</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczOTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDk2OTI5Y2VkYjIxZDgxZDFlYjcwOTli
MTNiN2JiOGM4NjU1ODVlMWMuLmZmMjc5NTFlZDRlNzEwMzY0ZmY4MGFiNTE0ZjEwZjliNTI2Mjg2
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTQtMDktMjYgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IG1vZGVybiBmb3IgbG9vcHMg
b3ZlciBTdHJpbmdWaWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM3MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHR3byBmdW5jdGlvbnMsIGNvZGVwb2ludHMoKSBhbmQg
Y29kZXVuaXRzKCksIG9uIFN0cmluZ1ZpZXcuCisgICAgICAgIFRoZXNlIHR3byBmdW5jdGlvbnMg
cmV0dXJuIHNtYWxsIG9iamVjdHMgd2hpY2ggaGF2ZSBiZWdpbigpIGFuZCBlbmQoKSBmdW5jdGlv
bnMsCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBtb2Rlcm4gZm9y
IGxvb3Agc3R5bGUuIFRoaXMgc21hbGwgY2xhc3MgYWxzbworICAgICAgICBoYXMgYW4gaW5uZXIg
aXRlcmF0b3IgY2xhc3Mgd2hpY2ggY2FuIGJlIGluY3JlbWVudGVkLCBkZXJlZmVyZW5jZWQsIGFu
ZAorICAgICAgICBjb21wYXJlZC4KKworICAgICAgICBVc2luZyB0aGVzZSBuZXcgb2JqZWN0cyBs
b29rcyBsaWtlIHRoaXM6CisgICAgICAgIGZvciAoVUNoYXIgY29kZXVuaXQgOiBzdHJpbmdWaWV3
LmNvZGV1bml0cygpKSB7IH0gYW5kCisgICAgICAgIGZvciAoVUNoYXIzMiBjb2RlcG9pbnQgOiBz
dHJpbmdWaWV3LmNvZGVwb2ludHMoKSkgeyB9LgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
Vmlldy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojpjb2RlcG9pbnRzKToKKyAgICAgICAg
KFdURjo6U3RyaW5nVmlldzo6Y29kZXVuaXRzKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlld0Nv
ZGVQb2ludEl0ZXJhdG9yOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3IpOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3I6Okl0ZXJhdG9yOjpJdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJh
dG9yKik6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRv
cjo6U3RyaW5nVmlld0NvZGVVbml0SXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3
Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlld0NvZGVVbml0SXRlcmF0b3I6Okl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
CiAyMDE0LTA5LTI1ICBSb2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgW1dpbmRvd3NdIFVucmV2aWV3ZWQgYnVpbGQgZml4LiBFbnN1cmUgdGhhdCBweXRob24yLjcg
aXMgdXNlZCBmb3IgV2luZG93cyBidWlsZHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ1ZpZXcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCmluZGV4
IDljOThkMDgwNzRlNDc2NzMxYjI0YWNkOGQ2NGIzNjQzNTE0MmE4ZDYuLjczNzAyYzI5YTlkZmJh
MWI4N2RmOThjYjdjZmU2ZTRhOWNjMGU2NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nVmlldy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCkBA
IC0zNSw2ICszNSw1NCBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIFRoaXMgbWVhbnMgdGhhdCBzdHJp
bmdzIGxvbmdlciB0aGFuIDIgR2lnYWJ5dGVzIGNhbiBub3QgYmUgcmVwcmVzZW50ZWQuIElmIHRo
YXQgdHVybnMgb3V0IHRvIGJlCiAvLyBhIHByb2JsZW0gd2UgY2FuIGludmVzdGlnYXRlIGFsdGVy
bmF0aXZlIHNvbHV0aW9ucy4KIAorY2xhc3MgU3RyaW5nVmlldzsKKworY2xhc3MgU3RyaW5nVmll
d0NvZGVwb2ludHMgeworcHVibGljOgorICAgIGNsYXNzIEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmLCB1bnNpZ25lZCBpbmRleCk7Cisg
ICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisgICAgICAgIFVDaGFyMzIgb3BlcmF0b3Iq
KCkgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYpIGNvbnN0
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3RyaW5nVmlldyYgbV9zdHJpbmdWaWV3
OworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICBtdXRhYmxlIFVDaGFyMzIgbV9j
b2RlcG9pbnRDYWNoZTsKKyAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX25leHRJbmRleENhY2hl
OworICAgICAgICBtdXRhYmxlIGJvb2wgbV9jYWNoZUlzVmFsaWQ7CisgICAgfTsKKworICAgIFN0
cmluZ1ZpZXdDb2RlcG9pbnRzKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBJdGVyYXRvciBiZWdp
bigpIGNvbnN0OworICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0OworcHJpdmF0ZToKKyAgICBjb25z
dCBTdHJpbmdWaWV3JiBtX3N0cmluZ1ZpZXc7Cit9OworCitjbGFzcyBTdHJpbmdWaWV3Q29kZXVu
aXRzIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAg
ICBJdGVyYXRvcihjb25zdCBTdHJpbmdWaWV3JiwgdW5zaWduZWQgaW5kZXgpOworICAgICAgICBJ
dGVyYXRvciYgb3BlcmF0b3IrKygpOworICAgICAgICBVQ2hhciBvcGVyYXRvciooKSBjb25zdDsK
KyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBjb25zdCBTdHJpbmdWaWV3JiBtX3N0cmluZ1ZpZXc7CisgICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIFN0cmluZ1ZpZXdDb2RldW5pdHMoY29u
c3QgU3RyaW5nVmlldyYpOworICAgIEl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgICAgSXRlcmF0
b3IgZW5kKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgY29uc3QgU3RyaW5nVmlldyYgbV9zdHJp
bmdWaWV3OworfTsKKwogY2xhc3MgU3RyaW5nVmlldyB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVmll
dygpCkBAIC0xODEsNiArMjI5LDE2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29udGFpbnMoVUNo
YXIgYykgY29uc3QgeyByZXR1cm4gZmluZChjKSAhPSBub3RGb3VuZDsgfQogCisgICAgU3RyaW5n
Vmlld0NvZGVwb2ludHMgY29kZXBvaW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
U3RyaW5nVmlld0NvZGVwb2ludHMoKnRoaXMpOworICAgIH0KKworICAgIFN0cmluZ1ZpZXdDb2Rl
dW5pdHMgY29kZXVuaXRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmdWaWV3
Q29kZXVuaXRzKCp0aGlzKTsKKyAgICB9CisKICNpZiBVU0UoQ0YpCiAgICAgLy8gVGhpcyBmdW5j
dGlvbiBjb252ZXJ0cyBudWxsIHN0cmluZ3MgdG8gZW1wdHkgc3RyaW5ncy4KICAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjcmVhdGVDRlN0cmluZ1dpdGhv
dXRDb3B5aW5nKCkgY29uc3Q7CkBAIC0yNzAsNiArMzI4LDEwMSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHZvaWQgYXBwZW5kKFZlY3Rv
cjxDaGFyYQogICAgIHN0cmluZy5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChidWZmZXIuZGF0
YSgpICsgb2xkU2l6ZSk7CiB9CiAKK2lubGluZSBTdHJpbmdWaWV3Q29kZXBvaW50czo6U3RyaW5n
Vmlld0NvZGVwb2ludHMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldykKKyAgICA6IG1fc3Ry
aW5nVmlldyhzdHJpbmdWaWV3KQoreworfQorCitpbmxpbmUgU3RyaW5nVmlld0NvZGVwb2ludHM6
Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCB1bnNpZ25l
ZCBpbmRleCkKKyAgICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQorICAgICwgbV9pbmRleChp
bmRleCkKKyAgICAsIG1fbmV4dEluZGV4Q2FjaGUoaW5kZXgpCisgICAgLCBtX2NhY2hlSXNWYWxp
ZChmYWxzZSkKK3sKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlld0NvZGVwb2ludHM6Okl0ZXJh
dG9yOjpvcGVyYXRvcisrKCkgLT4gSXRlcmF0b3ImCit7CisgICAgaWYgKG1fY2FjaGVJc1ZhbGlk
KSB7CisgICAgICAgIG1faW5kZXggPSBtX25leHRJbmRleENhY2hlOworICAgICAgICBtX2NhY2hl
SXNWYWxpZCA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3N0cmluZ1ZpZXcu
aXM4Qml0KCkpCisgICAgICAgICAgICArK21faW5kZXg7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgVTE2X05FWFQobV9zdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBtX2luZGV4LCBtX3N0
cmluZ1ZpZXcubGVuZ3RoKCksIG1fY29kZXBvaW50Q2FjaGUpOworICAgICAgICAgICAgbV9uZXh0
SW5kZXhDYWNoZSA9IG1faW5kZXg7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICp0aGlz
OworfQorCitpbmxpbmUgVUNoYXIzMiBTdHJpbmdWaWV3Q29kZXBvaW50czo6SXRlcmF0b3I6Om9w
ZXJhdG9yKigpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FjaGVJc1ZhbGlkKQorICAgICAgICByZXR1
cm4gbV9jb2RlcG9pbnRDYWNoZTsKKworICAgIGlmIChtX3N0cmluZ1ZpZXcuaXM4Qml0KCkpIHsK
KyAgICAgICAgbV9jb2RlcG9pbnRDYWNoZSA9IG1fc3RyaW5nVmlld1ttX2luZGV4XTsKKyAgICAg
ICAgKyttX25leHRJbmRleENhY2hlOworICAgIH0gZWxzZQorICAgICAgICBVMTZfTkVYVChtX3N0
cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCksIG1fbmV4dEluZGV4Q2FjaGUsIG1fc3RyaW5nVmlldy5s
ZW5ndGgoKSwgbV9jb2RlcG9pbnRDYWNoZSk7CisgICAgbV9jYWNoZUlzVmFsaWQgPSB0cnVlOwor
ICAgIHJldHVybiBtX2NvZGVwb2ludENhY2hlOworfQorCitpbmxpbmUgYm9vbCBTdHJpbmdWaWV3
Q29kZXBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBj
b25zdAoreworICAgIHJldHVybiAmbV9zdHJpbmdWaWV3ICE9ICZvdGhlci5tX3N0cmluZ1ZpZXcg
fHwgbV9pbmRleCAhPSBvdGhlci5tX2luZGV4OworfQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3
Q29kZXBvaW50czo6YmVnaW4oKSBjb25zdCAtPiBJdGVyYXRvcgoreworICAgIHJldHVybiBJdGVy
YXRvcihtX3N0cmluZ1ZpZXcsIDApOworfQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3Q29kZXBv
aW50czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0b3IKK3sKKyAgICByZXR1cm4gSXRlcmF0b3IobV9z
dHJpbmdWaWV3LCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkpOworfQorCitpbmxpbmUgU3RyaW5nVmll
d0NvZGV1bml0czo6U3RyaW5nVmlld0NvZGV1bml0cyhjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdW
aWV3KQorICAgIDogbV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcpCit7Cit9CisKK2lubGluZSBTdHJp
bmdWaWV3Q29kZXVuaXRzOjpJdGVyYXRvcjo6SXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYgc3Ry
aW5nVmlldywgdW5zaWduZWQgaW5kZXgpCisgICAgOiBtX3N0cmluZ1ZpZXcoc3RyaW5nVmlldykK
KyAgICAsIG1faW5kZXgoaW5kZXgpCit7Cit9CisKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXdDb2Rl
dW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvcisrKCkgLT4gSXRlcmF0b3ImCit7CisgICAgKyttX2lu
ZGV4OworICAgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFVDaGFyIFN0cmluZ1ZpZXdDb2Rl
dW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmlu
Z1ZpZXdbbV9pbmRleF07Cit9CisKK2lubGluZSBib29sIFN0cmluZ1ZpZXdDb2RldW5pdHM6Okl0
ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gJm1fc3RyaW5nVmlldyAhPSAmb3RoZXIubV9zdHJpbmdWaWV3IHx8IG1faW5kZXggIT0g
b3RoZXIubV9pbmRleDsKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlld0NvZGV1bml0czo6YmVn
aW4oKSBjb25zdCAtPiBJdGVyYXRvcgoreworICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1Zp
ZXcsIDApOworfQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3Q29kZXVuaXRzOjplbmQoKSBjb25z
dCAtPiBJdGVyYXRvcgoreworICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIG1fc3Ry
aW5nVmlldy5sZW5ndGgoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6
OmFwcGVuZDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmlu
Z1ZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAK
aW5kZXggZjE2MTNlODhlZWNiOTVkMzJkMGRmMDNiNDZhNjBlODEyZGZjMTYzMy4uMmM2N2FhNzRj
OWEzNjA2NDA1MTUzMGRkN2M2NDZjYjliMWMzNzQyNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewpA
QCAtNzcsNCArNzgsMTA4IEBAIFRFU1QoV1RGLCBTdHJpbmdWaWV3RW1wdHlWc051bGwpCiAgICAg
ICAgIFNVQ0NFRUQoKTsKIH0KIAorVEVTVChXVEYsIFN0cmluZ1ZpZXdJdGVyYXRvcnMpCit7Cisg
ICAgY29uc3QgU3RyaW5nVmlldyBudWxsVmlldzsKKyAgICBmb3IgKGF1dG8gY29kZXBvaW50IDog
bnVsbFZpZXcuY29kZXBvaW50cygpKSB7CisgICAgICAgIFVOVVNFRF9QQVJBTShjb2RlcG9pbnQp
OworICAgICAgICBGQUlMKCk7CisgICAgfQorICAgIGZvciAoYXV0byBjb2RldW5pdCA6IG51bGxW
aWV3LmNvZGV1bml0cygpKSB7CisgICAgICAgIFVOVVNFRF9QQVJBTShjb2RldW5pdCk7CisgICAg
ICAgIEZBSUwoKTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmdWaWV3IGVtcHR5VmlldyA9IFN0
cmluZ1ZpZXc6OmVtcHR5KCk7CisgICAgZm9yIChhdXRvIGNvZGVwb2ludCA6IGVtcHR5Vmlldy5j
b2RlcG9pbnRzKCkpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvZGVwb2ludCk7CisgICAgICAg
IEZBSUwoKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gY29kZXVuaXQgOiBudWxsVmlldy5jb2Rl
dW5pdHMoKSkgeworICAgICAgICBVTlVTRURfUEFSQU0oY29kZXVuaXQpOworICAgICAgICBGQUlM
KCk7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nVmlldyB2aWV3V2l0aENoYXJhY3RlcnMoU3Ry
aW5nKCJoZWxsbyIpKTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBmb3IgKGF1dG8gY29kZXBv
aW50IDogdmlld1dpdGhDaGFyYWN0ZXJzLmNvZGVwb2ludHMoKSkgeworICAgICAgICBzd2l0Y2gg
KGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgQVNTRVJUX0VRKGNvZGVwb2ludCwg
J2gnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBB
U1NFUlRfRVEoY29kZXBvaW50LCAnZScpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgIEFTU0VSVF9FUShjb2RlcG9pbnQsICdsJyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgQVNTRVJUX0VRKGNvZGVwb2lu
dCwgJ2wnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAg
ICBBU1NFUlRfRVEoY29kZXBvaW50LCAnbycpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBGQUlMKCk7CisgICAgICAgIH0KKyAgICAgICAgKytpOwor
ICAgIH0KKworICAgIGkgPSAwOworICAgIGZvciAoYXV0byBjb2RldW5pdCA6IHZpZXdXaXRoQ2hh
cmFjdGVycy5jb2RldW5pdHMoKSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2Fz
ZSAwOgorICAgICAgICAgICAgQVNTRVJUX0VRKGNvZGV1bml0LCAnaCcpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIEFTU0VSVF9FUShjb2RldW5pdCwg
J2UnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBB
U1NFUlRfRVEoY29kZXVuaXQsICdsJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAzOgorICAgICAgICAgICAgQVNTRVJUX0VRKGNvZGV1bml0LCAnbCcpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIEFTU0VSVF9FUShjb2RldW5pdCwg
J28nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
RkFJTCgpOworICAgICAgICB9CisgICAgICAgICsraTsKKyAgICB9CisKKyAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CisgICAgLy8gVW5pY29kZSBjb2RlIHBvaW50IFUrMTAxNTUsICJHUkVFSyBB
Q1JPUEhPTklDIEFUVElDIFRFTiBUSE9VU0FORCBTVEFURVJTIgorICAgIGJ1aWxkZXIuYXBwZW5k
KDB4RDgwMCk7CisgICAgYnVpbGRlci5hcHBlbmQoMHhERDU1KTsKKyAgICBpID0gMDsKKyAgICBm
b3IgKGF1dG8gY29kZXBvaW50IDogU3RyaW5nVmlldyhidWlsZGVyLnRvU3RyaW5nKCkpLmNvZGVw
b2ludHMoKSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAg
ICAgICAgQVNTRVJUX0VRKGNvZGVwb2ludCwgMHgxMDE1NSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEZBSUwoKTsKKyAgICAgICAgfQorICAgICAg
ICArK2k7CisgICAgfQorCisgICAgaSA9IDA7CisgICAgZm9yIChhdXRvIGNvZGV1bml0IDogU3Ry
aW5nVmlldyhidWlsZGVyLnRvU3RyaW5nKCkpLmNvZGV1bml0cygpKSB7CisgICAgICAgIHN3aXRj
aCAoaSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBBU1NFUlRfRVEoY29kZXVuaXQs
IDB4RDgwMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAg
ICAgQVNTRVJUX0VRKGNvZGV1bml0LCAweERENTUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBGQUlMKCk7CisgICAgICAgIH0KKyAgICAgICAgKytp
OworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238839</attachid>
            <date>2014-09-28 21:53:23 -0700</date>
            <delta_ts>2014-09-28 22:37:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137165-20140928215323.patch</filename>
            <type>text/plain</type>
            <size>10192</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVlMmQ3NDRmMmM4Mzk0ZmVkNzg0YTJm
MDJhNmMxZTNjZGJmZThkOGQuLjY1NzkzMDQzMjllNDM0ZTRlNzI2Y2JmZWMzNzc3MmYwN2RiNGZj
ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTQtMDktMjggIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IG1vZGVybiBmb3IgbG9vcHMg
b3ZlciBTdHJpbmdWaWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM3MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHR3byBmdW5jdGlvbnMsIGNvZGVQb2ludHMoKSBhbmQg
Y29kZVVuaXRzKCksIG9uIFN0cmluZ1ZpZXcuCisgICAgICAgIFRoZXNlIHR3byBmdW5jdGlvbnMg
cmV0dXJuIHNtYWxsIG9iamVjdHMgd2hpY2ggaGF2ZSBiZWdpbigpIGFuZCBlbmQoKSBmdW5jdGlv
bnMsCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBtb2Rlcm4gZm9y
IGxvb3Agc3R5bGUuIFRoaXMgc21hbGwgY2xhc3MgYWxzbworICAgICAgICBoYXMgYW4gaW5uZXIg
aXRlcmF0b3IgY2xhc3Mgd2hpY2ggY2FuIGJlIGluY3JlbWVudGVkLCBkZXJlZmVyZW5jZWQsIGFu
ZAorICAgICAgICBjb21wYXJlZC4KKworICAgICAgICBVc2luZyB0aGVzZSBuZXcgb2JqZWN0cyBs
b29rcyBsaWtlIHRoaXM6CisgICAgICAgIGZvciAoVUNoYXIgY29kZXVuaXQgOiBzdHJpbmdWaWV3
LmNvZGVVbml0cygpKSB7IH0gYW5kCisgICAgICAgIGZvciAoVUNoYXIzMiBjb2RlcG9pbnQgOiBz
dHJpbmdWaWV3LmNvZGVQb2ludHMoKSkgeyB9LgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
Vmlldy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojpjb2RlcG9pbnRzKToKKyAgICAgICAg
KFdURjo6U3RyaW5nVmlldzo6Y29kZXVuaXRzKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlld0Nv
ZGVQb2ludEl0ZXJhdG9yOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3IpOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3I6Okl0ZXJhdG9yOjpJdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJh
dG9yKik6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRv
cjo6U3RyaW5nVmlld0NvZGVVbml0SXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3
Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlld0NvZGVVbml0SXRlcmF0b3I6Okl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
CiAyMDE0LTA5LTI2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVw
bGFjZSBPU09iamVjdFB0ciB3aXRoIFJldGFpblB0ci9hZG9wdE9TCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
Vmlldy5oCmluZGV4IDljOThkMDgwNzRlNDc2NzMxYjI0YWNkOGQ2NGIzNjQzNTE0MmE4ZDYuLjUy
ZjQyMzA5MDI1MWIxMTBkYWYxOWYyZWI1OWJjOWYzZDdhZmFhYTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nVmlldy5oCkBAIC0zNyw2ICszNyw5IEBAIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBTdHJp
bmdWaWV3IHsKIHB1YmxpYzoKKyAgICBjbGFzcyBDb2RlUG9pbnRzOworICAgIGNsYXNzIENvZGVV
bml0czsKKwogICAgIFN0cmluZ1ZpZXcoKQogICAgICAgICA6IG1fY2hhcmFjdGVycyhudWxscHRy
KQogICAgICAgICAsIG1fbGVuZ3RoKDApCkBAIC0xODEsNiArMTg0LDkgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBjb250YWlucyhVQ2hhciBjKSBjb25zdCB7IHJldHVybiBmaW5kKGMpICE9IG5vdEZv
dW5kOyB9CiAKKyAgICBDb2RlUG9pbnRzIGNvZGVQb2ludHMoKSBjb25zdDsKKyAgICBDb2RlVW5p
dHMgY29kZVVuaXRzKCkgY29uc3Q7CisKICNpZiBVU0UoQ0YpCiAgICAgLy8gVGhpcyBmdW5jdGlv
biBjb252ZXJ0cyBudWxsIHN0cmluZ3MgdG8gZW1wdHkgc3RyaW5ncy4KICAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjcmVhdGVDRlN0cmluZ1dpdGhvdXRD
b3B5aW5nKCkgY29uc3Q7CkBAIC0yMTUsNiArMjIxLDU1IEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgbV9sZW5ndGg7CiB9OwogCitjbGFzcyBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzIHsKK3B1Ymxp
YzoKKyAgICBjbGFzcyBJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBJdGVyYXRvcihj
b25zdCBTdHJpbmdWaWV3JiwgdW5zaWduZWQgaW5kZXgpOworICAgICAgICBJdGVyYXRvciYgb3Bl
cmF0b3IrKygpOworICAgICAgICBVQ2hhcjMyIG9wZXJhdG9yKigpIGNvbnN0OworICAgICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKKyAgICAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBT
dHJpbmdWaWV3IG1fc3RyaW5nVmlldzsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAg
ICAgbXV0YWJsZSBVQ2hhcjMyIG1fY29kZXBvaW50Q2FjaGU7CisgICAgICAgIG11dGFibGUgdW5z
aWduZWQgbV9uZXh0SW5kZXhDYWNoZTsKKyAgICAgICAgbXV0YWJsZSBib29sIG1fY2FjaGVJc1Zh
bGlkOworICAgIH07CisKKyAgICBleHBsaWNpdCBDb2RlUG9pbnRzKGNvbnN0IFN0cmluZ1ZpZXcm
KTsKKyAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0OworICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0
OworCitwcml2YXRlOgorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG1fc3RyaW5nVmlldzsKK307CisK
K2NsYXNzIFN0cmluZ1ZpZXc6OkNvZGVVbml0cyB7CitwdWJsaWM6CisgICAgY2xhc3MgSXRlcmF0
b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgSXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYsIHVu
c2lnbmVkIGluZGV4KTsKKyAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICAgICAg
VUNoYXIgb3BlcmF0b3IqKCkgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJ
dGVyYXRvciYpIGNvbnN0OworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3Im
KSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG1fc3Ry
aW5nVmlldzsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgZXhwbGlj
aXQgQ29kZVVuaXRzKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBJdGVyYXRvciBiZWdpbigpIGNv
bnN0OworICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0cmluZ1Zp
ZXcgbV9zdHJpbmdWaWV3OworfTsKKwogaW5saW5lIHZvaWQgU3RyaW5nVmlldzo6Z2V0Q2hhcmFj
dGVyc1dpdGhVcGNvbnZlcnQoTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogewogICAgIEFTU0VS
VChpczhCaXQoKSk7CkBAIC0yNzAsNiArMzI1LDEyMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHZvaWQgYXBwZW5kKFZlY3RvcjxDaGFy
YQogICAgIHN0cmluZy5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChidWZmZXIuZGF0YSgpICsg
b2xkU2l6ZSk7CiB9CiAKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OmNvZGVQb2ludHMoKSBjb25z
dCAtPiBDb2RlUG9pbnRzCit7CisgICAgcmV0dXJuIENvZGVQb2ludHMoKnRoaXMpOworfQorCitp
bmxpbmUgYXV0byBTdHJpbmdWaWV3Ojpjb2RlVW5pdHMoKSBjb25zdCAtPiBDb2RlVW5pdHMKK3sK
KyAgICByZXR1cm4gQ29kZVVuaXRzKCp0aGlzKTsKK30KKworaW5saW5lIFN0cmluZ1ZpZXc6OkNv
ZGVQb2ludHM6OkNvZGVQb2ludHMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldykKKyAgICA6
IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQoreworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6Q29k
ZVBvaW50czo6SXRlcmF0b3I6Okl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcs
IHVuc2lnbmVkIGluZGV4KQorICAgIDogbV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcpCisgICAgLCBt
X2luZGV4KGluZGV4KQorICAgICwgbV9uZXh0SW5kZXhDYWNoZShpbmRleCkKKyAgICAsIG1fY2Fj
aGVJc1ZhbGlkKGZhbHNlKQoreworfQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpDb2RlUG9p
bnRzOjpJdGVyYXRvcjo6b3BlcmF0b3IrKygpIC0+IEl0ZXJhdG9yJgoreworICAgIGlmIChtX2Nh
Y2hlSXNWYWxpZCkgeworICAgICAgICBtX2luZGV4ID0gbV9uZXh0SW5kZXhDYWNoZTsKKyAgICAg
ICAgbV9jYWNoZUlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KyAgICBpZiAobV9zdHJpbmdWaWV3LmlzOEJpdCgpKQorICAgICAgICArK21faW5kZXg7CisgICAg
ZWxzZSB7CisgICAgICAgIFUxNl9ORVhUKG1fc3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKSwgbV9p
bmRleCwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpLCBtX2NvZGVwb2ludENhY2hlKTsKKyAgICAgICAg
bV9uZXh0SW5kZXhDYWNoZSA9IG1faW5kZXg7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKK30K
KworaW5saW5lIFVDaGFyMzIgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJh
dG9yKigpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FjaGVJc1ZhbGlkKQorICAgICAgICByZXR1cm4g
bV9jb2RlcG9pbnRDYWNoZTsKKworICAgIGlmIChtX3N0cmluZ1ZpZXcuaXM4Qml0KCkpIHsKKyAg
ICAgICAgbV9jb2RlcG9pbnRDYWNoZSA9IG1fc3RyaW5nVmlld1ttX2luZGV4XTsKKyAgICAgICAg
KyttX25leHRJbmRleENhY2hlOworICAgIH0gZWxzZQorICAgICAgICBVMTZfTkVYVChtX3N0cmlu
Z1ZpZXcuY2hhcmFjdGVyczE2KCksIG1fbmV4dEluZGV4Q2FjaGUsIG1fc3RyaW5nVmlldy5sZW5n
dGgoKSwgbV9jb2RlcG9pbnRDYWNoZSk7CisgICAgbV9jYWNoZUlzVmFsaWQgPSB0cnVlOworICAg
IHJldHVybiBtX2NvZGVwb2ludENhY2hlOworfQorCitpbmxpbmUgYm9vbCBTdHJpbmdWaWV3OjpD
b2RlUG9pbnRzOjpJdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNv
bnN0Cit7CisgICAgcmV0dXJuICZtX3N0cmluZ1ZpZXcgPT0gJm90aGVyLm1fc3RyaW5nVmlldyAm
JiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7Cit9CisKK2lubGluZSBib29sIFN0cmluZ1ZpZXc6
OkNvZGVQb2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cit9CisKK2lubGluZSBhdXRv
IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6OmJlZ2luKCkgY29uc3QgLT4gSXRlcmF0b3IKK3sKKyAg
ICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCAwKTsKK30KKworaW5saW5lIGF1dG8gU3Ry
aW5nVmlldzo6Q29kZVBvaW50czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0b3IKK3sKKyAgICByZXR1
cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkpOworfQorCitp
bmxpbmUgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpDb2RlVW5pdHMoY29uc3QgU3RyaW5nVmlldyYg
c3RyaW5nVmlldykKKyAgICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQoreworfQorCitpbmxp
bmUgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6SXRlcmF0b3IoY29uc3QgU3RyaW5n
VmlldyYgc3RyaW5nVmlldywgdW5zaWduZWQgaW5kZXgpCisgICAgOiBtX3N0cmluZ1ZpZXcoc3Ry
aW5nVmlldykKKyAgICAsIG1faW5kZXgoaW5kZXgpCit7Cit9CisKK2lubGluZSBhdXRvIFN0cmlu
Z1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAtPiBJdGVyYXRvciYKK3sK
KyAgICArK21faW5kZXg7CisgICAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgVUNoYXIgU3Ry
aW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zdHJpbmdWaWV3W21faW5kZXhdOworfQorCitpbmxpbmUgYm9vbCBTdHJpbmdWaWV3
OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gJm1fc3RyaW5nVmlldyA9PSAmb3RoZXIubV9zdHJpbmdWaWV3
ICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKK30KKworaW5saW5lIGJvb2wgU3RyaW5nVmll
dzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworfQorCitpbmxpbmUgYXV0
byBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6OmJlZ2luKCkgY29uc3QgLT4gSXRlcmF0b3IKK3sKKyAg
ICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCAwKTsKK30KKworaW5saW5lIGF1dG8gU3Ry
aW5nVmlldzo6Q29kZVVuaXRzOjplbmQoKSBjb25zdCAtPiBJdGVyYXRvcgoreworICAgIHJldHVy
biBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIG1fc3RyaW5nVmlldy5sZW5ndGgoKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OmFwcGVuZDsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ1ZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKaW5kZXggZjE2MTNlODhlZWNiOTVkMzJkMGRm
MDNiNDZhNjBlODEyZGZjMTYzMy4uZjA5ZDcwNmQ1MWUyMzViODk5NmM5OWE5NWJiNGY0ZjM1MTVi
M2NjMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmll
dy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAK
QEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4K
IAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewpAQCAtNzcsNCArNzgsMTEwIEBAIFRFU1QoV1RG
LCBTdHJpbmdWaWV3RW1wdHlWc051bGwpCiAgICAgICAgIFNVQ0NFRUQoKTsKIH0KIAorVEVTVChX
VEYsIFN0cmluZ1ZpZXdJdGVyYXRvcnMpCit7CisgICAgY29uc3QgU3RyaW5nVmlldyBudWxsVmll
dzsKKyAgICBmb3IgKGF1dG8gY29kZXBvaW50IDogbnVsbFZpZXcuY29kZVBvaW50cygpKSB7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShjb2RlcG9pbnQpOworICAgICAgICBGQUlMKCk7CisgICAgfQor
ICAgIGZvciAoYXV0byBjb2RldW5pdCA6IG51bGxWaWV3LmNvZGVVbml0cygpKSB7CisgICAgICAg
IFVOVVNFRF9QQVJBTShjb2RldW5pdCk7CisgICAgICAgIEZBSUwoKTsKKyAgICB9CisKKyAgICBj
b25zdCBTdHJpbmdWaWV3IGVtcHR5VmlldyA9IFN0cmluZ1ZpZXc6OmVtcHR5KCk7CisgICAgZm9y
IChhdXRvIGNvZGVwb2ludCA6IGVtcHR5Vmlldy5jb2RlUG9pbnRzKCkpIHsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKGNvZGVwb2ludCk7CisgICAgICAgIEZBSUwoKTsKKyAgICB9CisKKyAgICBmb3Ig
KGF1dG8gY29kZXVuaXQgOiBudWxsVmlldy5jb2RlVW5pdHMoKSkgeworICAgICAgICBVTlVTRURf
UEFSQU0oY29kZXVuaXQpOworICAgICAgICBGQUlMKCk7CisgICAgfQorCisgICAgY29uc3QgU3Ry
aW5nVmlldyB2aWV3V2l0aENoYXJhY3RlcnMoU3RyaW5nKCJoZWxsbyIpKTsKKyAgICB1bnNpZ25l
ZCBpID0gMDsKKyAgICBmb3IgKGF1dG8gY29kZXBvaW50IDogdmlld1dpdGhDaGFyYWN0ZXJzLmNv
ZGVQb2ludHMoKSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAg
ICAgICAgICAgQVNTRVJUX0VRKGNvZGVwb2ludCwgJ2gnKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBBU1NFUlRfRVEoY29kZXBvaW50LCAnZScpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIEFTU0VSVF9F
UShjb2RlcG9pbnQsICdsJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgor
ICAgICAgICAgICAgQVNTRVJUX0VRKGNvZGVwb2ludCwgJ2wnKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBBU1NFUlRfRVEoY29kZXBvaW50LCAnbycp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBGQUlM
KCk7CisgICAgICAgIH0KKyAgICAgICAgKytpOworICAgIH0KKworICAgIGkgPSAwOworICAgIGZv
ciAoYXV0byBjb2RldW5pdCA6IHZpZXdXaXRoQ2hhcmFjdGVycy5jb2RlVW5pdHMoKSkgeworICAg
ICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgQVNTRVJUX0VR
KGNvZGV1bml0LCAnaCcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgIEFTU0VSVF9FUShjb2RldW5pdCwgJ2UnKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBBU1NFUlRfRVEoY29kZXVuaXQsICdsJyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgQVNTRVJUX0VR
KGNvZGV1bml0LCAnbCcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAg
ICAgICAgICAgIEFTU0VSVF9FUShjb2RldW5pdCwgJ28nKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgRkFJTCgpOworICAgICAgICB9CisgICAgICAg
ICsraTsKKyAgICB9CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgLy8gVW5pY29k
ZSBjb2RlIHBvaW50IFUrMTAxNTUsICJHUkVFSyBBQ1JPUEhPTklDIEFUVElDIFRFTiBUSE9VU0FO
RCBTVEFURVJTIgorICAgIGJ1aWxkZXIuYXBwZW5kKDB4RDgwMCk7CisgICAgYnVpbGRlci5hcHBl
bmQoMHhERDU1KTsKKyAgICBpID0gMDsKKyAgICBmb3IgKGF1dG8gY29kZXBvaW50IDogU3RyaW5n
VmlldyhidWlsZGVyLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMoKSkgeworICAgICAgICBzd2l0Y2gg
KGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgQVNTRVJUX0VRKGNvZGVwb2ludCwg
MHgxMDE1NSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEZBSUwoKTsKKyAgICAgICAgfQorICAgICAgICBXVEZMb2dBbHdheXMoIkEgdGhpbmcgaGFw
cGVuZWQiKTsKKyAgICAgICAgKytpOworICAgIH0KKworICAgIGkgPSAwOworICAgIGZvciAoYXV0
byBjb2RldW5pdCA6IFN0cmluZ1ZpZXcoYnVpbGRlci50b1N0cmluZygpKS5jb2RlVW5pdHMoKSkg
eworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgQVNT
RVJUX0VRKGNvZGV1bml0LCAweEQ4MDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgMToKKyAgICAgICAgICAgIEFTU0VSVF9FUShjb2RldW5pdCwgMHhERDU1KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgRkFJTCgpOworICAgICAg
ICB9CisgICAgICAgIFdURkxvZ0Fsd2F5cygiQSB0aGluZyBoYXBwZW5lZCIpOworICAgICAgICAr
K2k7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238840</attachid>
            <date>2014-09-28 22:37:56 -0700</date>
            <delta_ts>2014-09-28 22:41:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137165-20140928223756.patch</filename>
            <type>text/plain</type>
            <size>10926</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVlMmQ3NDRmMmM4Mzk0ZmVkNzg0YTJm
MDJhNmMxZTNjZGJmZThkOGQuLjY1NzkzMDQzMjllNDM0ZTRlNzI2Y2JmZWMzNzc3MmYwN2RiNGZj
ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTQtMDktMjggIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IG1vZGVybiBmb3IgbG9vcHMg
b3ZlciBTdHJpbmdWaWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM3MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHR3byBmdW5jdGlvbnMsIGNvZGVQb2ludHMoKSBhbmQg
Y29kZVVuaXRzKCksIG9uIFN0cmluZ1ZpZXcuCisgICAgICAgIFRoZXNlIHR3byBmdW5jdGlvbnMg
cmV0dXJuIHNtYWxsIG9iamVjdHMgd2hpY2ggaGF2ZSBiZWdpbigpIGFuZCBlbmQoKSBmdW5jdGlv
bnMsCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBtb2Rlcm4gZm9y
IGxvb3Agc3R5bGUuIFRoaXMgc21hbGwgY2xhc3MgYWxzbworICAgICAgICBoYXMgYW4gaW5uZXIg
aXRlcmF0b3IgY2xhc3Mgd2hpY2ggY2FuIGJlIGluY3JlbWVudGVkLCBkZXJlZmVyZW5jZWQsIGFu
ZAorICAgICAgICBjb21wYXJlZC4KKworICAgICAgICBVc2luZyB0aGVzZSBuZXcgb2JqZWN0cyBs
b29rcyBsaWtlIHRoaXM6CisgICAgICAgIGZvciAoVUNoYXIgY29kZXVuaXQgOiBzdHJpbmdWaWV3
LmNvZGVVbml0cygpKSB7IH0gYW5kCisgICAgICAgIGZvciAoVUNoYXIzMiBjb2RlcG9pbnQgOiBz
dHJpbmdWaWV3LmNvZGVQb2ludHMoKSkgeyB9LgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
Vmlldy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojpjb2RlcG9pbnRzKToKKyAgICAgICAg
KFdURjo6U3RyaW5nVmlldzo6Y29kZXVuaXRzKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlld0Nv
ZGVQb2ludEl0ZXJhdG9yOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3IpOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3I6Okl0ZXJhdG9yOjpJdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJh
dG9yKik6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRv
cjo6U3RyaW5nVmlld0NvZGVVbml0SXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3
Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlld0NvZGVVbml0SXRlcmF0b3I6Okl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
CiAyMDE0LTA5LTI2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVw
bGFjZSBPU09iamVjdFB0ciB3aXRoIFJldGFpblB0ci9hZG9wdE9TCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
Vmlldy5oCmluZGV4IDljOThkMDgwNzRlNDc2NzMxYjI0YWNkOGQ2NGIzNjQzNTE0MmE4ZDYuLjIw
M2YyMjdlNjRhOWE3MWY4OWYyMGY3MjI4MTA5Mjg0NjgzODZmZTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nVmlldy5oCkBAIC0zNyw2ICszNyw5IEBAIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBTdHJp
bmdWaWV3IHsKIHB1YmxpYzoKKyAgICBjbGFzcyBDb2RlUG9pbnRzOworICAgIGNsYXNzIENvZGVV
bml0czsKKwogICAgIFN0cmluZ1ZpZXcoKQogICAgICAgICA6IG1fY2hhcmFjdGVycyhudWxscHRy
KQogICAgICAgICAsIG1fbGVuZ3RoKDApCkBAIC0xODEsNiArMTg0LDEyIEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgY29udGFpbnMoVUNoYXIgYykgY29uc3QgeyByZXR1cm4gZmluZChjKSAhPSBub3RG
b3VuZDsgfQogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZ1ZpZXcmKSBjb25zdDsK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nVmlldyYpIGNvbnN0OworCisgICAgQ29k
ZVBvaW50cyBjb2RlUG9pbnRzKCkgY29uc3Q7CisgICAgQ29kZVVuaXRzIGNvZGVVbml0cygpIGNv
bnN0OworCiAjaWYgVVNFKENGKQogICAgIC8vIFRoaXMgZnVuY3Rpb24gY29udmVydHMgbnVsbCBz
dHJpbmdzIHRvIGVtcHR5IHN0cmluZ3MuCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gY3JlYXRlQ0ZTdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0OwpA
QCAtMjE1LDYgKzIyNCw1NSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwogfTsK
IAorY2xhc3MgU3RyaW5nVmlldzo6Q29kZVBvaW50cyB7CitwdWJsaWM6CisgICAgY2xhc3MgSXRl
cmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgSXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYs
IHVuc2lnbmVkIGluZGV4KTsKKyAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICAg
ICAgVUNoYXIzMiBvcGVyYXRvciooKSBjb25zdDsKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEl0ZXJhdG9yJikgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVy
YXRvciYpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RyaW5nVmlldyBtX3N0cmlu
Z1ZpZXc7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIG11dGFibGUgVUNoYXIz
MiBtX2NvZGVwb2ludENhY2hlOworICAgICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fbmV4dEluZGV4
Q2FjaGU7CisgICAgICAgIG11dGFibGUgYm9vbCBtX2NhY2hlSXNWYWxpZDsKKyAgICB9OworCisg
ICAgZXhwbGljaXQgQ29kZVBvaW50cyhjb25zdCBTdHJpbmdWaWV3Jik7CisgICAgSXRlcmF0b3Ig
YmVnaW4oKSBjb25zdDsKKyAgICBJdGVyYXRvciBlbmQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBjb25zdCBTdHJpbmdWaWV3JiBtX3N0cmluZ1ZpZXc7Cit9OworCitjbGFzcyBTdHJpbmdWaWV3
OjpDb2RlVW5pdHMgeworcHVibGljOgorICAgIGNsYXNzIEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmLCB1bnNpZ25lZCBpbmRleCk7Cisg
ICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisgICAgICAgIFVDaGFyIG9wZXJhdG9yKigp
IGNvbnN0OworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsK
KyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBjb25zdCBTdHJpbmdWaWV3JiBtX3N0cmluZ1ZpZXc7CisgICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGV4cGxpY2l0IENvZGVVbml0cyhjb25z
dCBTdHJpbmdWaWV3Jik7CisgICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKKyAgICBJdGVyYXRv
ciBlbmQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJpbmdWaWV3IG1fc3RyaW5nVmlldzsK
K307CisKIGlubGluZSB2b2lkIFN0cmluZ1ZpZXc6OmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0
KExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQoaXM4Qml0KCkpOwpAQCAt
MjcwLDYgKzMyOCwxMzEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PiB2b2lkIGFwcGVuZChWZWN0b3I8Q2hhcmEKICAgICBzdHJpbmcuZ2V0
Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoYnVmZmVyLmRhdGEoKSArIG9sZFNpemUpOwogfQogCitp
bmxpbmUgYm9vbCBTdHJpbmdWaWV3OjpvcGVyYXRvcj09KGNvbnN0IFN0cmluZ1ZpZXcmIG90aGVy
KSBjb25zdAoreworICAgIHJldHVybiBtX2NoYXJhY3RlcnMgPT0gb3RoZXIubV9jaGFyYWN0ZXJz
ICYmIG1fbGVuZ3RoID09IG90aGVyLm1fbGVuZ3RoOworfQorCitpbmxpbmUgYm9vbCBTdHJpbmdW
aWV3OjpvcGVyYXRvciE9KGNvbnN0IFN0cmluZ1ZpZXcmIG90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Y29k
ZVBvaW50cygpIGNvbnN0IC0+IENvZGVQb2ludHMKK3sKKyAgICByZXR1cm4gQ29kZVBvaW50cygq
dGhpcyk7Cit9CisKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OmNvZGVVbml0cygpIGNvbnN0IC0+
IENvZGVVbml0cworeworICAgIHJldHVybiBDb2RlVW5pdHMoKnRoaXMpOworfQorCitpbmxpbmUg
U3RyaW5nVmlldzo6Q29kZVBvaW50czo6Q29kZVBvaW50cyhjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmdWaWV3KQorICAgIDogbV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcpCit7Cit9CisKK2lubGluZSBT
dHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvcjo6SXRlcmF0b3IoY29uc3QgU3RyaW5nVmll
dyYgc3RyaW5nVmlldywgdW5zaWduZWQgaW5kZXgpCisgICAgOiBtX3N0cmluZ1ZpZXcoc3RyaW5n
VmlldykKKyAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgLCBtX25leHRJbmRleENhY2hlKGluZGV4
KQorICAgICwgbV9jYWNoZUlzVmFsaWQoZmFsc2UpCit7Cit9CisKK2lubGluZSBhdXRvIFN0cmlu
Z1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvcisrKCkgLT4gSXRlcmF0b3ImCit7
CisgICAgaWYgKG1fY2FjaGVJc1ZhbGlkKSB7CisgICAgICAgIG1faW5kZXggPSBtX25leHRJbmRl
eENhY2hlOworICAgICAgICBtX2NhY2hlSXNWYWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorICAgIGlmIChtX3N0cmluZ1ZpZXcuaXM4Qml0KCkpCisgICAgICAgICsr
bV9pbmRleDsKKyAgICBlbHNlIHsKKyAgICAgICAgVTE2X05FWFQobV9zdHJpbmdWaWV3LmNoYXJh
Y3RlcnMxNigpLCBtX2luZGV4LCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCksIG1fY29kZXBvaW50Q2Fj
aGUpOworICAgICAgICBtX25leHRJbmRleENhY2hlID0gbV9pbmRleDsKKyAgICB9CisgICAgcmV0
dXJuICp0aGlzOworfQorCitpbmxpbmUgVUNoYXIzMiBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJ
dGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QKK3sKKyAgICBpZiAobV9jYWNoZUlzVmFsaWQpCisg
ICAgICAgIHJldHVybiBtX2NvZGVwb2ludENhY2hlOworCisgICAgaWYgKG1fc3RyaW5nVmlldy5p
czhCaXQoKSkgeworICAgICAgICBtX2NvZGVwb2ludENhY2hlID0gbV9zdHJpbmdWaWV3W21faW5k
ZXhdOworICAgICAgICArK21fbmV4dEluZGV4Q2FjaGU7CisgICAgfSBlbHNlCisgICAgICAgIFUx
Nl9ORVhUKG1fc3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKSwgbV9uZXh0SW5kZXhDYWNoZSwgbV9z
dHJpbmdWaWV3Lmxlbmd0aCgpLCBtX2NvZGVwb2ludENhY2hlKTsKKyAgICBtX2NhY2hlSXNWYWxp
ZCA9IHRydWU7CisgICAgcmV0dXJuIG1fY29kZXBvaW50Q2FjaGU7Cit9CisKK2lubGluZSBib29s
IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IEl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHJpbmdWaWV3ID09IG90aGVyLm1f
c3RyaW5nVmlldyAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7Cit9CisKK2lubGluZSBib29s
IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cit9CisK
K2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6OmJlZ2luKCkgY29uc3QgLT4gSXRl
cmF0b3IKK3sKKyAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCAwKTsKK30KKworaW5s
aW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVBvaW50czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0b3IK
K3sKKyAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCBtX3N0cmluZ1ZpZXcubGVuZ3Ro
KCkpOworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpDb2RlVW5pdHMoY29uc3Qg
U3RyaW5nVmlldyYgc3RyaW5nVmlldykKKyAgICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQor
eworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6SXRlcmF0b3Io
Y29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgdW5zaWduZWQgaW5kZXgpCisgICAgOiBtX3N0
cmluZ1ZpZXcoc3RyaW5nVmlldykKKyAgICAsIG1faW5kZXgoaW5kZXgpCit7Cit9CisKK2lubGlu
ZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAtPiBJ
dGVyYXRvciYKK3sKKyAgICArK21faW5kZXg7CisgICAgcmV0dXJuICp0aGlzOworfQorCitpbmxp
bmUgVUNoYXIgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zdHJpbmdWaWV3W21faW5kZXhdOworfQorCitpbmxpbmUgYm9v
bCBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IEl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHJpbmdWaWV3ID09IG90aGVyLm1f
c3RyaW5nVmlldyAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7Cit9CisKK2lubGluZSBib29s
IFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgSXRlcmF0
b3ImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKwor
aW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpiZWdpbigpIGNvbnN0IC0+IEl0ZXJh
dG9yCit7CisgICAgcmV0dXJuIEl0ZXJhdG9yKG1fc3RyaW5nVmlldywgMCk7Cit9CisKK2lubGlu
ZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0b3IKK3sK
KyAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjphcHBlbmQ7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdWaWV3LmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ1ZpZXcuY3BwCmluZGV4IGYxNjEzZTg4ZWVj
Yjk1ZDMyZDBkZjAzYjQ2YTYwZTgxMmRmYzE2MzMuLjc2MWQ4OGE0Yjc2NDc3ZDg5YTEyMTFhZjkz
NjJlYTEyNGRiYmUyNWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1N0cmluZ1ZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmlu
Z1ZpZXcuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKQEAgLTc3LDQgKzc4LDY4IEBA
IFRFU1QoV1RGLCBTdHJpbmdWaWV3RW1wdHlWc051bGwpCiAgICAgICAgIFNVQ0NFRUQoKTsKIH0K
IAorYm9vbCBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldzo6Q29kZVBvaW50cyBjb2Rl
UG9pbnRzLCBzdGQ6OnZlY3RvcjxVQ2hhcjMyPiBleHBlY3RlZCkKK3sKKyAgICBzdGQ6OnZlY3Rv
cjxVQ2hhcjMyPiBhY3R1YWw7CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IGNvZGVQb2ludHMp
CisgICAgICAgIGFjdHVhbC5wdXNoX2JhY2soY29kZVBvaW50KTsKKyAgICByZXR1cm4gYWN0dWFs
ID09IGV4cGVjdGVkOworfQorCitzdGF0aWMgYm9vbCBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3Ry
aW5nVmlldzo6Q29kZVVuaXRzIGNvZGVVbml0cywgc3RkOjp2ZWN0b3I8VUNoYXI+IGV4cGVjdGVk
KQoreworICAgIHN0ZDo6dmVjdG9yPFVDaGFyPiBhY3R1YWw7CisgICAgZm9yIChhdXRvIGNvZGVV
bml0IDogY29kZVVuaXRzKQorICAgICAgICBhY3R1YWwucHVzaF9iYWNrKGNvZGVVbml0KTsKKyAg
ICByZXR1cm4gYWN0dWFsID09IGV4cGVjdGVkOworfQorCitzdGF0aWMgdm9pZCBidWlsZChTdHJp
bmdCdWlsZGVyJiBidWlsZGVyLCBzdGQ6OnZlY3RvcjxVQ2hhcj4gaW5wdXQpCit7CisgICAgYnVp
bGRlci5jbGVhcigpOworICAgIGZvciAoYXV0byBjb2RlVW5pdCA6IGlucHV0KQorICAgICAgICBi
dWlsZGVyLmFwcGVuZChjb2RlVW5pdCk7Cit9CisKK1RFU1QoV1RGLCBTdHJpbmdWaWV3SXRlcmF0
b3JzKQoreworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KCkuY29kZVBvaW50
cygpLCB7IH0pOworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KCkuY29kZVVu
aXRzKCksIHsgfSk7CisKKyAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldzo6ZW1w
dHkoKS5jb2RlUG9pbnRzKCksIHsgfSk7CisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmlu
Z1ZpZXc6OmVtcHR5KCkuY29kZVVuaXRzKCksIHsgfSk7CisKKyAgICBjb21wYXJlTG9vcEl0ZXJh
dGlvbnMoU3RyaW5nVmlldyhTdHJpbmcoImhlbGxvIikpLmNvZGVQb2ludHMoKSwgeydoJywgJ2Un
LCAnbCcsICdsJywgJ28nfSk7CisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXco
U3RyaW5nKCJoZWxsbyIpKS5jb2RlVW5pdHMoKSwgeydoJywgJ2UnLCAnbCcsICdsJywgJ28nfSk7
CisKKyAgICBTdHJpbmdCdWlsZGVyIGI7CisgICAgYnVpbGQoYiwgezB4RDgwMCwgMHhERDU1fSk7
IC8vIFN1cnJvZ2F0ZXMgZm9yIHVuaWNvZGUgY29kZSBwb2ludCBVKzEwMTU1CisgICAgQVNTRVJU
X1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2Rl
UG9pbnRzKCksIHsweDEwMTU1fSkpOworICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0
aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweEQ4MDAsIDB4REQ1
NX0pKTsKKworICAgIGJ1aWxkKGIsIHsweEQ4MDB9KTsgLy8gTGVhZGluZyBzdXJyb2dhdGUgb25s
eQorICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9T
dHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwfSkpOworICAgIEFTU0VSVF9UUlVFKGNvbXBh
cmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsw
eEQ4MDB9KSk7CisKKyAgICBidWlsZChiLCB7MHhEODAwLCAweEQ4MDF9KTsgLy8gVHdvIGxlYWRp
bmcgc3Vycm9nYXRlcworICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJp
bmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwLCAweEQ4MDF9KSk7Cisg
ICAgQVNTRVJUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmlu
ZygpKS5jb2RlVW5pdHMoKSwgezB4RDgwMCwgMHhEODAxfSkpOworCisgICAgYnVpbGQoYiwgezB4
REQ1NX0pOyAvLyBUcmFpbGluZyBzdXJyb2dhdGUgb25seQorICAgIEFTU0VSVF9UUlVFKGNvbXBh
cmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7
MHhERDU1fSkpOworICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdW
aWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweERENTV9KSk7CisKKyAgICBidWlsZChi
LCB7MHhEODAwLCAnaCd9KTsgLy8gTGVhZGluZyBzdXJyb2dhdGUgZm9sbG93ZWQgYnkgbm9uLXN1
cnJvZ2F0ZQorICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3
KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwLCAnaCd9KSk7CisgICAgQVNTRVJU
X1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2Rl
VW5pdHMoKSwgezB4RDgwMCwgJ2gnfSkpOworCisgICAgYnVpbGQoYiwgezB4MDMwNn0pOyAvLyAi
Q09NQklOSU5HIEJSRVZFIgorICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhT
dHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHgwMzA2fSkpOworICAgIEFT
U0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSku
Y29kZVVuaXRzKCksIHsweDAzMDZ9KSk7CisKKyAgICBidWlsZChiLCB7MHgwMzA2LCAweEQ4MDAs
IDB4REQ1NSwgJ2gnfSk7IC8vIE1peCBvZiBzaW5nbGUgY29kZSB1bml0IGFuZCBtdWx0aSBjb2Rl
IHVuaXQgY29kZSBwb2ludHMKKyAgICBBU1NFUlRfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMo
U3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMoKSwgezB4MDMwNiwgMHgxMDE1NSwg
J2gnfSkpOworICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3
KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweDAzMDYsIDB4RDgwMCwgMHhERDU1LCAnaCd9
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238841</attachid>
            <date>2014-09-28 22:41:41 -0700</date>
            <delta_ts>2014-09-28 22:43:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137165-20140928224141.patch</filename>
            <type>text/plain</type>
            <size>10919</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVlMmQ3NDRmMmM4Mzk0ZmVkNzg0YTJm
MDJhNmMxZTNjZGJmZThkOGQuLjY1NzkzMDQzMjllNDM0ZTRlNzI2Y2JmZWMzNzc3MmYwN2RiNGZj
ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTQtMDktMjggIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IG1vZGVybiBmb3IgbG9vcHMg
b3ZlciBTdHJpbmdWaWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM3MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHR3byBmdW5jdGlvbnMsIGNvZGVQb2ludHMoKSBhbmQg
Y29kZVVuaXRzKCksIG9uIFN0cmluZ1ZpZXcuCisgICAgICAgIFRoZXNlIHR3byBmdW5jdGlvbnMg
cmV0dXJuIHNtYWxsIG9iamVjdHMgd2hpY2ggaGF2ZSBiZWdpbigpIGFuZCBlbmQoKSBmdW5jdGlv
bnMsCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBtb2Rlcm4gZm9y
IGxvb3Agc3R5bGUuIFRoaXMgc21hbGwgY2xhc3MgYWxzbworICAgICAgICBoYXMgYW4gaW5uZXIg
aXRlcmF0b3IgY2xhc3Mgd2hpY2ggY2FuIGJlIGluY3JlbWVudGVkLCBkZXJlZmVyZW5jZWQsIGFu
ZAorICAgICAgICBjb21wYXJlZC4KKworICAgICAgICBVc2luZyB0aGVzZSBuZXcgb2JqZWN0cyBs
b29rcyBsaWtlIHRoaXM6CisgICAgICAgIGZvciAoVUNoYXIgY29kZXVuaXQgOiBzdHJpbmdWaWV3
LmNvZGVVbml0cygpKSB7IH0gYW5kCisgICAgICAgIGZvciAoVUNoYXIzMiBjb2RlcG9pbnQgOiBz
dHJpbmdWaWV3LmNvZGVQb2ludHMoKSkgeyB9LgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
Vmlldy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojpjb2RlcG9pbnRzKToKKyAgICAgICAg
KFdURjo6U3RyaW5nVmlldzo6Y29kZXVuaXRzKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlld0Nv
ZGVQb2ludEl0ZXJhdG9yOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3IpOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3I6Okl0ZXJhdG9yOjpJdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJh
dG9yKik6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRv
cjo6U3RyaW5nVmlld0NvZGVVbml0SXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3
Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlld0NvZGVVbml0SXRlcmF0b3I6Okl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
CiAyMDE0LTA5LTI2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVw
bGFjZSBPU09iamVjdFB0ciB3aXRoIFJldGFpblB0ci9hZG9wdE9TCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
Vmlldy5oCmluZGV4IDljOThkMDgwNzRlNDc2NzMxYjI0YWNkOGQ2NGIzNjQzNTE0MmE4ZDYuLjE4
M2JkOWNhYTc3YjUxMWNjMDk3NDc5YzAwNGQyYjIxYzRlNWEyOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nVmlldy5oCkBAIC0zNyw2ICszNyw5IEBAIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBTdHJp
bmdWaWV3IHsKIHB1YmxpYzoKKyAgICBjbGFzcyBDb2RlUG9pbnRzOworICAgIGNsYXNzIENvZGVV
bml0czsKKwogICAgIFN0cmluZ1ZpZXcoKQogICAgICAgICA6IG1fY2hhcmFjdGVycyhudWxscHRy
KQogICAgICAgICAsIG1fbGVuZ3RoKDApCkBAIC0xODEsNiArMTg0LDEyIEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgY29udGFpbnMoVUNoYXIgYykgY29uc3QgeyByZXR1cm4gZmluZChjKSAhPSBub3RG
b3VuZDsgfQogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZ1ZpZXcmKSBjb25zdDsK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nVmlldyYpIGNvbnN0OworCisgICAgQ29k
ZVBvaW50cyBjb2RlUG9pbnRzKCkgY29uc3Q7CisgICAgQ29kZVVuaXRzIGNvZGVVbml0cygpIGNv
bnN0OworCiAjaWYgVVNFKENGKQogICAgIC8vIFRoaXMgZnVuY3Rpb24gY29udmVydHMgbnVsbCBz
dHJpbmdzIHRvIGVtcHR5IHN0cmluZ3MuCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gY3JlYXRlQ0ZTdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0OwpA
QCAtMjE1LDYgKzIyNCw1NSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwogfTsK
IAorY2xhc3MgU3RyaW5nVmlldzo6Q29kZVBvaW50cyB7CitwdWJsaWM6CisgICAgY2xhc3MgSXRl
cmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgSXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYs
IHVuc2lnbmVkIGluZGV4KTsKKyAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICAg
ICAgVUNoYXIzMiBvcGVyYXRvciooKSBjb25zdDsKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEl0ZXJhdG9yJikgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVy
YXRvciYpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RyaW5nVmlldyBtX3N0cmlu
Z1ZpZXc7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIG11dGFibGUgVUNoYXIz
MiBtX2NvZGVwb2ludENhY2hlOworICAgICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fbmV4dEluZGV4
Q2FjaGU7CisgICAgICAgIG11dGFibGUgYm9vbCBtX2NhY2hlSXNWYWxpZDsKKyAgICB9OworCisg
ICAgZXhwbGljaXQgQ29kZVBvaW50cyhjb25zdCBTdHJpbmdWaWV3Jik7CisgICAgSXRlcmF0b3Ig
YmVnaW4oKSBjb25zdDsKKyAgICBJdGVyYXRvciBlbmQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBTdHJpbmdWaWV3IG1fc3RyaW5nVmlldzsKK307CisKK2NsYXNzIFN0cmluZ1ZpZXc6OkNvZGVV
bml0cyB7CitwdWJsaWM6CisgICAgY2xhc3MgSXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgSXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYsIHVuc2lnbmVkIGluZGV4KTsKKyAgICAgICAg
SXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICAgICAgVUNoYXIgb3BlcmF0b3IqKCkgY29uc3Q7
CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYpIGNvbnN0OworICAgICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKKworICAgIHByaXZhdGU6
CisgICAgICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG1fc3RyaW5nVmlldzsKKyAgICAgICAgdW5zaWdu
ZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgZXhwbGljaXQgQ29kZVVuaXRzKGNvbnN0IFN0cmlu
Z1ZpZXcmKTsKKyAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0OworICAgIEl0ZXJhdG9yIGVuZCgp
IGNvbnN0OworCitwcml2YXRlOgorICAgIFN0cmluZ1ZpZXcgbV9zdHJpbmdWaWV3OworfTsKKwog
aW5saW5lIHZvaWQgU3RyaW5nVmlldzo6Z2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoTENoYXIq
IGRlc3RpbmF0aW9uKSBjb25zdAogewogICAgIEFTU0VSVChpczhCaXQoKSk7CkBAIC0yNzAsNiAr
MzI4LDEzMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCBzaXplX3QgaW5saW5l
Q2FwYWNpdHk+IHZvaWQgYXBwZW5kKFZlY3RvcjxDaGFyYQogICAgIHN0cmluZy5nZXRDaGFyYWN0
ZXJzV2l0aFVwY29udmVydChidWZmZXIuZGF0YSgpICsgb2xkU2l6ZSk7CiB9CiAKK2lubGluZSBi
b29sIFN0cmluZ1ZpZXc6Om9wZXJhdG9yPT0oY29uc3QgU3RyaW5nVmlldyYgb3RoZXIpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY2hhcmFjdGVycyA9PSBvdGhlci5tX2NoYXJhY3RlcnMgJiYgbV9s
ZW5ndGggPT0gb3RoZXIubV9sZW5ndGg7Cit9CisKK2lubGluZSBib29sIFN0cmluZ1ZpZXc6Om9w
ZXJhdG9yIT0oY29uc3QgU3RyaW5nVmlldyYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOworfQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3Ojpjb2RlUG9pbnRz
KCkgY29uc3QgLT4gQ29kZVBvaW50cworeworICAgIHJldHVybiBDb2RlUG9pbnRzKCp0aGlzKTsK
K30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Y29kZVVuaXRzKCkgY29uc3QgLT4gQ29kZVVu
aXRzCit7CisgICAgcmV0dXJuIENvZGVVbml0cygqdGhpcyk7Cit9CisKK2lubGluZSBTdHJpbmdW
aWV3OjpDb2RlUG9pbnRzOjpDb2RlUG9pbnRzKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcp
CisgICAgOiBtX3N0cmluZ1ZpZXcoc3RyaW5nVmlldykKK3sKK30KKworaW5saW5lIFN0cmluZ1Zp
ZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmdWaWV3LCB1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQor
ICAgICwgbV9pbmRleChpbmRleCkKKyAgICAsIG1fbmV4dEluZGV4Q2FjaGUoaW5kZXgpCisgICAg
LCBtX2NhY2hlSXNWYWxpZChmYWxzZSkKK3sKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6
Q29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAtPiBJdGVyYXRvciYKK3sKKyAgICBp
ZiAobV9jYWNoZUlzVmFsaWQpIHsKKyAgICAgICAgbV9pbmRleCA9IG1fbmV4dEluZGV4Q2FjaGU7
CisgICAgICAgIG1fY2FjaGVJc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisgICAgaWYgKG1fc3RyaW5nVmlldy5pczhCaXQoKSkKKyAgICAgICAgKyttX2luZGV4
OworICAgIGVsc2UgeworICAgICAgICBVMTZfTkVYVChtX3N0cmluZ1ZpZXcuY2hhcmFjdGVyczE2
KCksIG1faW5kZXgsIG1fc3RyaW5nVmlldy5sZW5ndGgoKSwgbV9jb2RlcG9pbnRDYWNoZSk7Cisg
ICAgICAgIG1fbmV4dEluZGV4Q2FjaGUgPSBtX2luZGV4OworICAgIH0KKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK2lubGluZSBVQ2hhcjMyIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9y
OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIGlmIChtX2NhY2hlSXNWYWxpZCkKKyAgICAgICAg
cmV0dXJuIG1fY29kZXBvaW50Q2FjaGU7CisKKyAgICBpZiAobV9zdHJpbmdWaWV3LmlzOEJpdCgp
KSB7CisgICAgICAgIG1fY29kZXBvaW50Q2FjaGUgPSBtX3N0cmluZ1ZpZXdbbV9pbmRleF07Cisg
ICAgICAgICsrbV9uZXh0SW5kZXhDYWNoZTsKKyAgICB9IGVsc2UKKyAgICAgICAgVTE2X05FWFQo
bV9zdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBtX25leHRJbmRleENhY2hlLCBtX3N0cmluZ1Zp
ZXcubGVuZ3RoKCksIG1fY29kZXBvaW50Q2FjaGUpOworICAgIG1fY2FjaGVJc1ZhbGlkID0gdHJ1
ZTsKKyAgICByZXR1cm4gbV9jb2RlcG9pbnRDYWNoZTsKK30KKworaW5saW5lIGJvb2wgU3RyaW5n
Vmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90
aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmluZ1ZpZXcgPT0gb3RoZXIubV9zdHJpbmdW
aWV3ICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKK30KKworaW5saW5lIGJvb2wgU3RyaW5n
Vmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImIG90
aGVyKSBjb25zdAoreworICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKworaW5saW5l
IGF1dG8gU3RyaW5nVmlldzo6Q29kZVBvaW50czo6YmVnaW4oKSBjb25zdCAtPiBJdGVyYXRvcgor
eworICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIDApOworfQorCitpbmxpbmUgYXV0
byBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjplbmQoKSBjb25zdCAtPiBJdGVyYXRvcgoreworICAg
IHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIG1fc3RyaW5nVmlldy5sZW5ndGgoKSk7Cit9
CisKK2lubGluZSBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6OkNvZGVVbml0cyhjb25zdCBTdHJpbmdW
aWV3JiBzdHJpbmdWaWV3KQorICAgIDogbV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcpCit7Cit9CisK
K2lubGluZSBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBT
dHJpbmdWaWV3JiBzdHJpbmdWaWV3LCB1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1fc3RyaW5nVmll
dyhzdHJpbmdWaWV3KQorICAgICwgbV9pbmRleChpbmRleCkKK3sKK30KKworaW5saW5lIGF1dG8g
U3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IrKygpIC0+IEl0ZXJhdG9y
JgoreworICAgICsrbV9pbmRleDsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVQ2hh
ciBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAorewor
ICAgIHJldHVybiBtX3N0cmluZ1ZpZXdbbV9pbmRleF07Cit9CisKK2lubGluZSBib29sIFN0cmlu
Z1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90
aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmluZ1ZpZXcgPT0gb3RoZXIubV9zdHJpbmdW
aWV3ICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKK30KKworaW5saW5lIGJvb2wgU3RyaW5n
Vmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworfQorCitpbmxpbmUg
YXV0byBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6OmJlZ2luKCkgY29uc3QgLT4gSXRlcmF0b3IKK3sK
KyAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCAwKTsKK30KKworaW5saW5lIGF1dG8g
U3RyaW5nVmlldzo6Q29kZVVuaXRzOjplbmQoKSBjb25zdCAtPiBJdGVyYXRvcgoreworICAgIHJl
dHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIG1fc3RyaW5nVmlldy5sZW5ndGgoKSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OmFwcGVuZDsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ1ZpZXcuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKaW5kZXggZjE2MTNlODhlZWNiOTVkMzJk
MGRmMDNiNDZhNjBlODEyZGZjMTYzMy4uNzYxZDg4YTRiNzY0NzdkODlhMTIxMWFmOTM2MmVhMTI0
ZGJiZTI1ZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5n
Vmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5j
cHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcu
aD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewpAQCAtNzcsNCArNzgsNjggQEAgVEVTVChX
VEYsIFN0cmluZ1ZpZXdFbXB0eVZzTnVsbCkKICAgICAgICAgU1VDQ0VFRCgpOwogfQogCitib29s
IGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3OjpDb2RlUG9pbnRzIGNvZGVQb2ludHMs
IHN0ZDo6dmVjdG9yPFVDaGFyMzI+IGV4cGVjdGVkKQoreworICAgIHN0ZDo6dmVjdG9yPFVDaGFy
MzI+IGFjdHVhbDsKKyAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogY29kZVBvaW50cykKKyAgICAg
ICAgYWN0dWFsLnB1c2hfYmFjayhjb2RlUG9pbnQpOworICAgIHJldHVybiBhY3R1YWwgPT0gZXhw
ZWN0ZWQ7Cit9CisKK3N0YXRpYyBib29sIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3
OjpDb2RlVW5pdHMgY29kZVVuaXRzLCBzdGQ6OnZlY3RvcjxVQ2hhcj4gZXhwZWN0ZWQpCit7Cisg
ICAgc3RkOjp2ZWN0b3I8VUNoYXI+IGFjdHVhbDsKKyAgICBmb3IgKGF1dG8gY29kZVVuaXQgOiBj
b2RlVW5pdHMpCisgICAgICAgIGFjdHVhbC5wdXNoX2JhY2soY29kZVVuaXQpOworICAgIHJldHVy
biBhY3R1YWwgPT0gZXhwZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGJ1aWxkKFN0cmluZ0J1aWxk
ZXImIGJ1aWxkZXIsIHN0ZDo6dmVjdG9yPFVDaGFyPiBpbnB1dCkKK3sKKyAgICBidWlsZGVyLmNs
ZWFyKCk7CisgICAgZm9yIChhdXRvIGNvZGVVbml0IDogaW5wdXQpCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGNvZGVVbml0KTsKK30KKworVEVTVChXVEYsIFN0cmluZ1ZpZXdJdGVyYXRvcnMpCit7
CisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoKS5jb2RlUG9pbnRzKCksIHsg
fSk7CisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoKS5jb2RlVW5pdHMoKSwg
eyB9KTsKKworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3OjplbXB0eSgpLmNv
ZGVQb2ludHMoKSwgeyB9KTsKKyAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldzo6
ZW1wdHkoKS5jb2RlVW5pdHMoKSwgeyB9KTsKKworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhT
dHJpbmdWaWV3KFN0cmluZygiaGVsbG8iKSkuY29kZVBvaW50cygpLCB7J2gnLCAnZScsICdsJywg
J2wnLCAnbyd9KTsKKyAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhTdHJpbmco
ImhlbGxvIikpLmNvZGVVbml0cygpLCB7J2gnLCAnZScsICdsJywgJ2wnLCAnbyd9KTsKKworICAg
IFN0cmluZ0J1aWxkZXIgYjsKKyAgICBidWlsZChiLCB7MHhEODAwLCAweERENTV9KTsgLy8gU3Vy
cm9nYXRlcyBmb3IgdW5pY29kZSBjb2RlIHBvaW50IFUrMTAxNTUKKyAgICBBU1NFUlRfVFJVRShj
b21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMo
KSwgezB4MTAxNTV9KSk7CisgICAgQVNTRVJUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0
cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlVW5pdHMoKSwgezB4RDgwMCwgMHhERDU1fSkpOwor
CisgICAgYnVpbGQoYiwgezB4RDgwMH0pOyAvLyBMZWFkaW5nIHN1cnJvZ2F0ZSBvbmx5CisgICAg
QVNTRVJUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygp
KS5jb2RlUG9pbnRzKCksIHsweEQ4MDB9KSk7CisgICAgQVNTRVJUX1RSVUUoY29tcGFyZUxvb3BJ
dGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlVW5pdHMoKSwgezB4RDgwMH0p
KTsKKworICAgIGJ1aWxkKGIsIHsweEQ4MDAsIDB4RDgwMX0pOyAvLyBUd28gbGVhZGluZyBzdXJy
b2dhdGVzCisgICAgQVNTRVJUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXco
Yi50b1N0cmluZygpKS5jb2RlUG9pbnRzKCksIHsweEQ4MDAsIDB4RDgwMX0pKTsKKyAgICBBU1NF
UlRfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNv
ZGVVbml0cygpLCB7MHhEODAwLCAweEQ4MDF9KSk7CisKKyAgICBidWlsZChiLCB7MHhERDU1fSk7
IC8vIFRyYWlsaW5nIHN1cnJvZ2F0ZSBvbmx5CisgICAgQVNTRVJUX1RSVUUoY29tcGFyZUxvb3BJ
dGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlUG9pbnRzKCksIHsweERENTV9
KSk7CisgICAgQVNTRVJUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50
b1N0cmluZygpKS5jb2RlVW5pdHMoKSwgezB4REQ1NX0pKTsKKworICAgIGJ1aWxkKGIsIHsweEQ4
MDAsICdoJ30pOyAvLyBMZWFkaW5nIHN1cnJvZ2F0ZSBmb2xsb3dlZCBieSBub24tc3Vycm9nYXRl
CisgICAgQVNTRVJUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0
cmluZygpKS5jb2RlUG9pbnRzKCksIHsweEQ4MDAsICdoJ30pKTsKKyAgICBBU1NFUlRfVFJVRShj
b21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVVbml0cygp
LCB7MHhEODAwLCAnaCd9KSk7CisKKyAgICBidWlsZChiLCB7MHgwMzA2fSk7IC8vICJDT01CSU5J
TkcgQlJFVkUiCisgICAgQVNTRVJUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1Zp
ZXcoYi50b1N0cmluZygpKS5jb2RlUG9pbnRzKCksIHsweDAzMDZ9KSk7CisgICAgQVNTRVJUX1RS
VUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlVW5p
dHMoKSwgezB4MDMwNn0pKTsKKworICAgIGJ1aWxkKGIsIHsweDAzMDYsIDB4RDgwMCwgMHhERDU1
LCAnaCd9KTsgLy8gTWl4IG9mIHNpbmdsZSBjb2RlIHVuaXQgYW5kIG11bHRpIGNvZGUgdW5pdCBj
b2RlIHBvaW50cworICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdW
aWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHgwMzA2LCAweDEwMTU1LCAnaCd9KSk7
CisgICAgQVNTRVJUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0
cmluZygpKS5jb2RlVW5pdHMoKSwgezB4MDMwNiwgMHhEODAwLCAweERENTUsICdoJ30pKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238842</attachid>
            <date>2014-09-28 22:43:30 -0700</date>
            <delta_ts>2014-09-29 12:18:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137165-20140928224331.patch</filename>
            <type>text/plain</type>
            <size>10926</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVlMmQ3NDRmMmM4Mzk0ZmVkNzg0YTJm
MDJhNmMxZTNjZGJmZThkOGQuLjY1NzkzMDQzMjllNDM0ZTRlNzI2Y2JmZWMzNzc3MmYwN2RiNGZj
ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTQtMDktMjggIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IG1vZGVybiBmb3IgbG9vcHMg
b3ZlciBTdHJpbmdWaWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM3MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHR3byBmdW5jdGlvbnMsIGNvZGVQb2ludHMoKSBhbmQg
Y29kZVVuaXRzKCksIG9uIFN0cmluZ1ZpZXcuCisgICAgICAgIFRoZXNlIHR3byBmdW5jdGlvbnMg
cmV0dXJuIHNtYWxsIG9iamVjdHMgd2hpY2ggaGF2ZSBiZWdpbigpIGFuZCBlbmQoKSBmdW5jdGlv
bnMsCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBtb2Rlcm4gZm9y
IGxvb3Agc3R5bGUuIFRoaXMgc21hbGwgY2xhc3MgYWxzbworICAgICAgICBoYXMgYW4gaW5uZXIg
aXRlcmF0b3IgY2xhc3Mgd2hpY2ggY2FuIGJlIGluY3JlbWVudGVkLCBkZXJlZmVyZW5jZWQsIGFu
ZAorICAgICAgICBjb21wYXJlZC4KKworICAgICAgICBVc2luZyB0aGVzZSBuZXcgb2JqZWN0cyBs
b29rcyBsaWtlIHRoaXM6CisgICAgICAgIGZvciAoVUNoYXIgY29kZXVuaXQgOiBzdHJpbmdWaWV3
LmNvZGVVbml0cygpKSB7IH0gYW5kCisgICAgICAgIGZvciAoVUNoYXIzMiBjb2RlcG9pbnQgOiBz
dHJpbmdWaWV3LmNvZGVQb2ludHMoKSkgeyB9LgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
Vmlldy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojpjb2RlcG9pbnRzKToKKyAgICAgICAg
KFdURjo6U3RyaW5nVmlldzo6Y29kZXVuaXRzKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlld0Nv
ZGVQb2ludEl0ZXJhdG9yOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3IpOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3I6Okl0ZXJhdG9yOjpJdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJh
dG9yKik6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRv
cjo6U3RyaW5nVmlld0NvZGVVbml0SXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3
Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlld0NvZGVVbml0SXRlcmF0b3I6Okl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
CiAyMDE0LTA5LTI2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVw
bGFjZSBPU09iamVjdFB0ciB3aXRoIFJldGFpblB0ci9hZG9wdE9TCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
Vmlldy5oCmluZGV4IDljOThkMDgwNzRlNDc2NzMxYjI0YWNkOGQ2NGIzNjQzNTE0MmE4ZDYuLjQx
YTZjNWZhOWJmMmI3OWI5ODY3NzA2YTVlMmE1ZjZiNjk2MjhlNmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nVmlldy5oCkBAIC0zNyw2ICszNyw5IEBAIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBTdHJp
bmdWaWV3IHsKIHB1YmxpYzoKKyAgICBjbGFzcyBDb2RlUG9pbnRzOworICAgIGNsYXNzIENvZGVV
bml0czsKKwogICAgIFN0cmluZ1ZpZXcoKQogICAgICAgICA6IG1fY2hhcmFjdGVycyhudWxscHRy
KQogICAgICAgICAsIG1fbGVuZ3RoKDApCkBAIC0xODEsNiArMTg0LDEyIEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgY29udGFpbnMoVUNoYXIgYykgY29uc3QgeyByZXR1cm4gZmluZChjKSAhPSBub3RG
b3VuZDsgfQogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZ1ZpZXcmKSBjb25zdDsK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nVmlldyYpIGNvbnN0OworCisgICAgQ29k
ZVBvaW50cyBjb2RlUG9pbnRzKCkgY29uc3Q7CisgICAgQ29kZVVuaXRzIGNvZGVVbml0cygpIGNv
bnN0OworCiAjaWYgVVNFKENGKQogICAgIC8vIFRoaXMgZnVuY3Rpb24gY29udmVydHMgbnVsbCBz
dHJpbmdzIHRvIGVtcHR5IHN0cmluZ3MuCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gY3JlYXRlQ0ZTdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0OwpA
QCAtMjE1LDYgKzIyNCw1NSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwogfTsK
IAorY2xhc3MgU3RyaW5nVmlldzo6Q29kZVBvaW50cyB7CitwdWJsaWM6CisgICAgY2xhc3MgSXRl
cmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgSXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYs
IHVuc2lnbmVkIGluZGV4KTsKKyAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICAg
ICAgVUNoYXIzMiBvcGVyYXRvciooKSBjb25zdDsKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEl0ZXJhdG9yJikgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVy
YXRvciYpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3RyaW5nVmlldyYg
bV9zdHJpbmdWaWV3OworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICBtdXRhYmxl
IFVDaGFyMzIgbV9jb2RlcG9pbnRDYWNoZTsKKyAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX25l
eHRJbmRleENhY2hlOworICAgICAgICBtdXRhYmxlIGJvb2wgbV9jYWNoZUlzVmFsaWQ7CisgICAg
fTsKKworICAgIGV4cGxpY2l0IENvZGVQb2ludHMoY29uc3QgU3RyaW5nVmlldyYpOworICAgIEl0
ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgU3RyaW5nVmlldyBtX3N0cmluZ1ZpZXc7Cit9OworCitjbGFzcyBTdHJpbmdWaWV3
OjpDb2RlVW5pdHMgeworcHVibGljOgorICAgIGNsYXNzIEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmLCB1bnNpZ25lZCBpbmRleCk7Cisg
ICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisgICAgICAgIFVDaGFyIG9wZXJhdG9yKigp
IGNvbnN0OworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsK
KyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBjb25zdCBTdHJpbmdWaWV3JiBtX3N0cmluZ1ZpZXc7CisgICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGV4cGxpY2l0IENvZGVVbml0cyhjb25z
dCBTdHJpbmdWaWV3Jik7CisgICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKKyAgICBJdGVyYXRv
ciBlbmQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJpbmdWaWV3IG1fc3RyaW5nVmlldzsK
K307CisKIGlubGluZSB2b2lkIFN0cmluZ1ZpZXc6OmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0
KExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQoaXM4Qml0KCkpOwpAQCAt
MjcwLDYgKzMyOCwxMzEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PiB2b2lkIGFwcGVuZChWZWN0b3I8Q2hhcmEKICAgICBzdHJpbmcuZ2V0
Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoYnVmZmVyLmRhdGEoKSArIG9sZFNpemUpOwogfQogCitp
bmxpbmUgYm9vbCBTdHJpbmdWaWV3OjpvcGVyYXRvcj09KGNvbnN0IFN0cmluZ1ZpZXcmIG90aGVy
KSBjb25zdAoreworICAgIHJldHVybiBtX2NoYXJhY3RlcnMgPT0gb3RoZXIubV9jaGFyYWN0ZXJz
ICYmIG1fbGVuZ3RoID09IG90aGVyLm1fbGVuZ3RoOworfQorCitpbmxpbmUgYm9vbCBTdHJpbmdW
aWV3OjpvcGVyYXRvciE9KGNvbnN0IFN0cmluZ1ZpZXcmIG90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Y29k
ZVBvaW50cygpIGNvbnN0IC0+IENvZGVQb2ludHMKK3sKKyAgICByZXR1cm4gQ29kZVBvaW50cygq
dGhpcyk7Cit9CisKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OmNvZGVVbml0cygpIGNvbnN0IC0+
IENvZGVVbml0cworeworICAgIHJldHVybiBDb2RlVW5pdHMoKnRoaXMpOworfQorCitpbmxpbmUg
U3RyaW5nVmlldzo6Q29kZVBvaW50czo6Q29kZVBvaW50cyhjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmdWaWV3KQorICAgIDogbV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcpCit7Cit9CisKK2lubGluZSBT
dHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvcjo6SXRlcmF0b3IoY29uc3QgU3RyaW5nVmll
dyYgc3RyaW5nVmlldywgdW5zaWduZWQgaW5kZXgpCisgICAgOiBtX3N0cmluZ1ZpZXcoc3RyaW5n
VmlldykKKyAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgLCBtX25leHRJbmRleENhY2hlKGluZGV4
KQorICAgICwgbV9jYWNoZUlzVmFsaWQoZmFsc2UpCit7Cit9CisKK2lubGluZSBhdXRvIFN0cmlu
Z1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvcisrKCkgLT4gSXRlcmF0b3ImCit7
CisgICAgaWYgKG1fY2FjaGVJc1ZhbGlkKSB7CisgICAgICAgIG1faW5kZXggPSBtX25leHRJbmRl
eENhY2hlOworICAgICAgICBtX2NhY2hlSXNWYWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorICAgIGlmIChtX3N0cmluZ1ZpZXcuaXM4Qml0KCkpCisgICAgICAgICsr
bV9pbmRleDsKKyAgICBlbHNlIHsKKyAgICAgICAgVTE2X05FWFQobV9zdHJpbmdWaWV3LmNoYXJh
Y3RlcnMxNigpLCBtX2luZGV4LCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCksIG1fY29kZXBvaW50Q2Fj
aGUpOworICAgICAgICBtX25leHRJbmRleENhY2hlID0gbV9pbmRleDsKKyAgICB9CisgICAgcmV0
dXJuICp0aGlzOworfQorCitpbmxpbmUgVUNoYXIzMiBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJ
dGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QKK3sKKyAgICBpZiAobV9jYWNoZUlzVmFsaWQpCisg
ICAgICAgIHJldHVybiBtX2NvZGVwb2ludENhY2hlOworCisgICAgaWYgKG1fc3RyaW5nVmlldy5p
czhCaXQoKSkgeworICAgICAgICBtX2NvZGVwb2ludENhY2hlID0gbV9zdHJpbmdWaWV3W21faW5k
ZXhdOworICAgICAgICArK21fbmV4dEluZGV4Q2FjaGU7CisgICAgfSBlbHNlCisgICAgICAgIFUx
Nl9ORVhUKG1fc3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKSwgbV9uZXh0SW5kZXhDYWNoZSwgbV9z
dHJpbmdWaWV3Lmxlbmd0aCgpLCBtX2NvZGVwb2ludENhY2hlKTsKKyAgICBtX2NhY2hlSXNWYWxp
ZCA9IHRydWU7CisgICAgcmV0dXJuIG1fY29kZXBvaW50Q2FjaGU7Cit9CisKK2lubGluZSBib29s
IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IEl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHJpbmdWaWV3ID09IG90aGVyLm1f
c3RyaW5nVmlldyAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7Cit9CisKK2lubGluZSBib29s
IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cit9CisK
K2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6OmJlZ2luKCkgY29uc3QgLT4gSXRl
cmF0b3IKK3sKKyAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCAwKTsKK30KKworaW5s
aW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVBvaW50czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0b3IK
K3sKKyAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCBtX3N0cmluZ1ZpZXcubGVuZ3Ro
KCkpOworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpDb2RlVW5pdHMoY29uc3Qg
U3RyaW5nVmlldyYgc3RyaW5nVmlldykKKyAgICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQor
eworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6SXRlcmF0b3Io
Y29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgdW5zaWduZWQgaW5kZXgpCisgICAgOiBtX3N0
cmluZ1ZpZXcoc3RyaW5nVmlldykKKyAgICAsIG1faW5kZXgoaW5kZXgpCit7Cit9CisKK2lubGlu
ZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAtPiBJ
dGVyYXRvciYKK3sKKyAgICArK21faW5kZXg7CisgICAgcmV0dXJuICp0aGlzOworfQorCitpbmxp
bmUgVUNoYXIgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zdHJpbmdWaWV3W21faW5kZXhdOworfQorCitpbmxpbmUgYm9v
bCBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IEl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHJpbmdWaWV3ID09IG90aGVyLm1f
c3RyaW5nVmlldyAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7Cit9CisKK2lubGluZSBib29s
IFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgSXRlcmF0
b3ImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKwor
aW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpiZWdpbigpIGNvbnN0IC0+IEl0ZXJh
dG9yCit7CisgICAgcmV0dXJuIEl0ZXJhdG9yKG1fc3RyaW5nVmlldywgMCk7Cit9CisKK2lubGlu
ZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0b3IKK3sK
KyAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjphcHBlbmQ7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdWaWV3LmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ1ZpZXcuY3BwCmluZGV4IGYxNjEzZTg4ZWVj
Yjk1ZDMyZDBkZjAzYjQ2YTYwZTgxMmRmYzE2MzMuLjc2MWQ4OGE0Yjc2NDc3ZDg5YTEyMTFhZjkz
NjJlYTEyNGRiYmUyNWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1N0cmluZ1ZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmlu
Z1ZpZXcuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKQEAgLTc3LDQgKzc4LDY4IEBA
IFRFU1QoV1RGLCBTdHJpbmdWaWV3RW1wdHlWc051bGwpCiAgICAgICAgIFNVQ0NFRUQoKTsKIH0K
IAorYm9vbCBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldzo6Q29kZVBvaW50cyBjb2Rl
UG9pbnRzLCBzdGQ6OnZlY3RvcjxVQ2hhcjMyPiBleHBlY3RlZCkKK3sKKyAgICBzdGQ6OnZlY3Rv
cjxVQ2hhcjMyPiBhY3R1YWw7CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IGNvZGVQb2ludHMp
CisgICAgICAgIGFjdHVhbC5wdXNoX2JhY2soY29kZVBvaW50KTsKKyAgICByZXR1cm4gYWN0dWFs
ID09IGV4cGVjdGVkOworfQorCitzdGF0aWMgYm9vbCBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3Ry
aW5nVmlldzo6Q29kZVVuaXRzIGNvZGVVbml0cywgc3RkOjp2ZWN0b3I8VUNoYXI+IGV4cGVjdGVk
KQoreworICAgIHN0ZDo6dmVjdG9yPFVDaGFyPiBhY3R1YWw7CisgICAgZm9yIChhdXRvIGNvZGVV
bml0IDogY29kZVVuaXRzKQorICAgICAgICBhY3R1YWwucHVzaF9iYWNrKGNvZGVVbml0KTsKKyAg
ICByZXR1cm4gYWN0dWFsID09IGV4cGVjdGVkOworfQorCitzdGF0aWMgdm9pZCBidWlsZChTdHJp
bmdCdWlsZGVyJiBidWlsZGVyLCBzdGQ6OnZlY3RvcjxVQ2hhcj4gaW5wdXQpCit7CisgICAgYnVp
bGRlci5jbGVhcigpOworICAgIGZvciAoYXV0byBjb2RlVW5pdCA6IGlucHV0KQorICAgICAgICBi
dWlsZGVyLmFwcGVuZChjb2RlVW5pdCk7Cit9CisKK1RFU1QoV1RGLCBTdHJpbmdWaWV3SXRlcmF0
b3JzKQoreworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KCkuY29kZVBvaW50
cygpLCB7IH0pOworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KCkuY29kZVVu
aXRzKCksIHsgfSk7CisKKyAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldzo6ZW1w
dHkoKS5jb2RlUG9pbnRzKCksIHsgfSk7CisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmlu
Z1ZpZXc6OmVtcHR5KCkuY29kZVVuaXRzKCksIHsgfSk7CisKKyAgICBjb21wYXJlTG9vcEl0ZXJh
dGlvbnMoU3RyaW5nVmlldyhTdHJpbmcoImhlbGxvIikpLmNvZGVQb2ludHMoKSwgeydoJywgJ2Un
LCAnbCcsICdsJywgJ28nfSk7CisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXco
U3RyaW5nKCJoZWxsbyIpKS5jb2RlVW5pdHMoKSwgeydoJywgJ2UnLCAnbCcsICdsJywgJ28nfSk7
CisKKyAgICBTdHJpbmdCdWlsZGVyIGI7CisgICAgYnVpbGQoYiwgezB4RDgwMCwgMHhERDU1fSk7
IC8vIFN1cnJvZ2F0ZXMgZm9yIHVuaWNvZGUgY29kZSBwb2ludCBVKzEwMTU1CisgICAgQVNTRVJU
X1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2Rl
UG9pbnRzKCksIHsweDEwMTU1fSkpOworICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0
aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweEQ4MDAsIDB4REQ1
NX0pKTsKKworICAgIGJ1aWxkKGIsIHsweEQ4MDB9KTsgLy8gTGVhZGluZyBzdXJyb2dhdGUgb25s
eQorICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9T
dHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwfSkpOworICAgIEFTU0VSVF9UUlVFKGNvbXBh
cmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsw
eEQ4MDB9KSk7CisKKyAgICBidWlsZChiLCB7MHhEODAwLCAweEQ4MDF9KTsgLy8gVHdvIGxlYWRp
bmcgc3Vycm9nYXRlcworICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJp
bmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwLCAweEQ4MDF9KSk7Cisg
ICAgQVNTRVJUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmlu
ZygpKS5jb2RlVW5pdHMoKSwgezB4RDgwMCwgMHhEODAxfSkpOworCisgICAgYnVpbGQoYiwgezB4
REQ1NX0pOyAvLyBUcmFpbGluZyBzdXJyb2dhdGUgb25seQorICAgIEFTU0VSVF9UUlVFKGNvbXBh
cmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7
MHhERDU1fSkpOworICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdW
aWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweERENTV9KSk7CisKKyAgICBidWlsZChi
LCB7MHhEODAwLCAnaCd9KTsgLy8gTGVhZGluZyBzdXJyb2dhdGUgZm9sbG93ZWQgYnkgbm9uLXN1
cnJvZ2F0ZQorICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3
KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwLCAnaCd9KSk7CisgICAgQVNTRVJU
X1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2Rl
VW5pdHMoKSwgezB4RDgwMCwgJ2gnfSkpOworCisgICAgYnVpbGQoYiwgezB4MDMwNn0pOyAvLyAi
Q09NQklOSU5HIEJSRVZFIgorICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhT
dHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHgwMzA2fSkpOworICAgIEFT
U0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSku
Y29kZVVuaXRzKCksIHsweDAzMDZ9KSk7CisKKyAgICBidWlsZChiLCB7MHgwMzA2LCAweEQ4MDAs
IDB4REQ1NSwgJ2gnfSk7IC8vIE1peCBvZiBzaW5nbGUgY29kZSB1bml0IGFuZCBtdWx0aSBjb2Rl
IHVuaXQgY29kZSBwb2ludHMKKyAgICBBU1NFUlRfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMo
U3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMoKSwgezB4MDMwNiwgMHgxMDE1NSwg
J2gnfSkpOworICAgIEFTU0VSVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3
KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweDAzMDYsIDB4RDgwMCwgMHhERDU1LCAnaCd9
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238865</attachid>
            <date>2014-09-29 12:18:44 -0700</date>
            <delta_ts>2014-09-30 09:48:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137165-20140929121844.patch</filename>
            <type>text/plain</type>
            <size>13821</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVlMmQ3NDRmMmM4Mzk0ZmVkNzg0YTJm
MDJhNmMxZTNjZGJmZThkOGQuLmJjZjAyZTQwMjcwY2I1NWYwOGViODRkMDZjMDRiNTZjNDQ2M2Y3
NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTQtMDktMjkgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IG1vZGVybiBmb3IgbG9vcHMg
b3ZlciBTdHJpbmdWaWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM3MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHR3byBmdW5jdGlvbnMsIGNvZGVQb2ludHMoKSBhbmQg
Y29kZVVuaXRzKCksIG9uIFN0cmluZ1ZpZXcuCisgICAgICAgIFRoZXNlIHR3byBmdW5jdGlvbnMg
cmV0dXJuIHNtYWxsIG9iamVjdHMgd2hpY2ggaGF2ZSBiZWdpbigpIGFuZCBlbmQoKSBmdW5jdGlv
bnMsCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBtb2Rlcm4gZm9y
IGxvb3Agc3R5bGUuIFRoaXMgc21hbGwgY2xhc3MgYWxzbworICAgICAgICBoYXMgYW4gaW5uZXIg
aXRlcmF0b3IgY2xhc3Mgd2hpY2ggY2FuIGJlIGluY3JlbWVudGVkLCBkZXJlZmVyZW5jZWQsIGFu
ZAorICAgICAgICBjb21wYXJlZC4KKworICAgICAgICBVc2luZyB0aGVzZSBuZXcgb2JqZWN0cyBs
b29rcyBsaWtlIHRoaXM6CisgICAgICAgIGZvciAoVUNoYXIgY29kZXVuaXQgOiBzdHJpbmdWaWV3
LmNvZGVVbml0cygpKSB7IH0gYW5kCisgICAgICAgIGZvciAoVUNoYXIzMiBjb2RlcG9pbnQgOiBz
dHJpbmdWaWV3LmNvZGVQb2ludHMoKSkgeyB9LgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
Vmlldy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojpjb2RlcG9pbnRzKToKKyAgICAgICAg
KFdURjo6U3RyaW5nVmlldzo6Y29kZXVuaXRzKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlld0Nv
ZGVQb2ludEl0ZXJhdG9yOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3IpOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3I6Okl0ZXJhdG9yOjpJdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJh
dG9yKik6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRv
cjo6U3RyaW5nVmlld0NvZGVVbml0SXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3
Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlld0NvZGVVbml0SXRlcmF0b3I6Okl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
CiAyMDE0LTA5LTI2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVw
bGFjZSBPU09iamVjdFB0ciB3aXRoIFJldGFpblB0ci9hZG9wdE9TCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
Vmlldy5oCmluZGV4IDljOThkMDgwNzRlNDc2NzMxYjI0YWNkOGQ2NGIzNjQzNTE0MmE4ZDYuLjNk
ZmQyOWE2YTkzZmY2YzkyOGQ5M2Q1OTRhYWEyNjA2YTBiZGViMzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nVmlldy5oCkBAIC0zNyw2ICszNyw5IEBAIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBTdHJp
bmdWaWV3IHsKIHB1YmxpYzoKKyAgICBjbGFzcyBDb2RlUG9pbnRzOworICAgIGNsYXNzIENvZGVV
bml0czsKKwogICAgIFN0cmluZ1ZpZXcoKQogICAgICAgICA6IG1fY2hhcmFjdGVycyhudWxscHRy
KQogICAgICAgICAsIG1fbGVuZ3RoKDApCkBAIC0xODEsNiArMTg0LDEyIEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgY29udGFpbnMoVUNoYXIgYykgY29uc3QgeyByZXR1cm4gZmluZChjKSAhPSBub3RG
b3VuZDsgfQogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZ1ZpZXcmKSBjb25zdDsK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nVmlldyYpIGNvbnN0OworCisgICAgQ29k
ZVBvaW50cyBjb2RlUG9pbnRzKCkgY29uc3Q7CisgICAgQ29kZVVuaXRzIGNvZGVVbml0cygpIGNv
bnN0OworCiAjaWYgVVNFKENGKQogICAgIC8vIFRoaXMgZnVuY3Rpb24gY29udmVydHMgbnVsbCBz
dHJpbmdzIHRvIGVtcHR5IHN0cmluZ3MuCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gY3JlYXRlQ0ZTdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0OwpA
QCAtMjE1LDYgKzIyNCw1NSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwogfTsK
IAorY2xhc3MgU3RyaW5nVmlldzo6Q29kZVBvaW50cyB7CitwdWJsaWM6CisgICAgY2xhc3MgSXRl
cmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgSXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYs
IHVuc2lnbmVkIGluZGV4KTsKKyAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICAg
ICAgVUNoYXIzMiBvcGVyYXRvciooKSBjb25zdDsKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEl0ZXJhdG9yJikgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVy
YXRvciYpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3RyaW5nVmlldyYg
bV9zdHJpbmdWaWV3OworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICBtdXRhYmxl
IFVDaGFyMzIgbV9jb2RlcG9pbnRDYWNoZTsKKyAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX25l
eHRJbmRleENhY2hlOworICAgICAgICBtdXRhYmxlIGJvb2wgbV9jYWNoZUlzVmFsaWQ7CisgICAg
fTsKKworICAgIGV4cGxpY2l0IENvZGVQb2ludHMoY29uc3QgU3RyaW5nVmlldyYpOworICAgIEl0
ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgU3RyaW5nVmlldyBtX3N0cmluZ1ZpZXc7Cit9OworCitjbGFzcyBTdHJpbmdWaWV3
OjpDb2RlVW5pdHMgeworcHVibGljOgorICAgIGNsYXNzIEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmLCB1bnNpZ25lZCBpbmRleCk7Cisg
ICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisgICAgICAgIFVDaGFyIG9wZXJhdG9yKigp
IGNvbnN0OworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsK
KyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBjb25zdCBTdHJpbmdWaWV3JiBtX3N0cmluZ1ZpZXc7CisgICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGV4cGxpY2l0IENvZGVVbml0cyhjb25z
dCBTdHJpbmdWaWV3Jik7CisgICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKKyAgICBJdGVyYXRv
ciBlbmQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJpbmdWaWV3IG1fc3RyaW5nVmlldzsK
K307CisKIGlubGluZSB2b2lkIFN0cmluZ1ZpZXc6OmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0
KExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQoaXM4Qml0KCkpOwpAQCAt
MjcwLDYgKzMyOCwxNDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PiB2b2lkIGFwcGVuZChWZWN0b3I8Q2hhcmEKICAgICBzdHJpbmcuZ2V0
Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoYnVmZmVyLmRhdGEoKSArIG9sZFNpemUpOwogfQogCitp
bmxpbmUgYm9vbCBTdHJpbmdWaWV3OjpvcGVyYXRvcj09KGNvbnN0IFN0cmluZ1ZpZXcmIG90aGVy
KSBjb25zdAoreworICAgIHJldHVybiBtX2NoYXJhY3RlcnMgPT0gb3RoZXIubV9jaGFyYWN0ZXJz
ICYmIG1fbGVuZ3RoID09IG90aGVyLm1fbGVuZ3RoOworfQorCitpbmxpbmUgYm9vbCBTdHJpbmdW
aWV3OjpvcGVyYXRvciE9KGNvbnN0IFN0cmluZ1ZpZXcmIG90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Y29k
ZVBvaW50cygpIGNvbnN0IC0+IENvZGVQb2ludHMKK3sKKyAgICByZXR1cm4gQ29kZVBvaW50cygq
dGhpcyk7Cit9CisKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OmNvZGVVbml0cygpIGNvbnN0IC0+
IENvZGVVbml0cworeworICAgIHJldHVybiBDb2RlVW5pdHMoKnRoaXMpOworfQorCitpbmxpbmUg
U3RyaW5nVmlldzo6Q29kZVBvaW50czo6Q29kZVBvaW50cyhjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmdWaWV3KQorICAgIDogbV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcpCit7Cit9CisKK2lubGluZSBT
dHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvcjo6SXRlcmF0b3IoY29uc3QgU3RyaW5nVmll
dyYgc3RyaW5nVmlldywgdW5zaWduZWQgaW5kZXgpCisgICAgOiBtX3N0cmluZ1ZpZXcoc3RyaW5n
VmlldykKKyAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgLCBtX2NvZGVwb2ludENhY2hlKDApCisg
ICAgLCBtX25leHRJbmRleENhY2hlKGluZGV4KQorICAgICwgbV9jYWNoZUlzVmFsaWQoZmFsc2Up
Cit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRDYWNoZUlzVmFsaWQoYm9vbCBpczhC
aXQsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBuZXh0SW5kZXhDYWNoZSkKK3sKKyNpZiBBU1NF
UlRfRElTQUJMRUQKKyAgICBVTlVTRURfUEFSQU0oaXM4Qml0KTsKKyAgICBVTlVTRURfUEFSQU0o
aW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShuZXh0SW5kZXhDYWNoZSk7CisjZW5kaWYKKworICAg
IEFTU0VSVCghaXM4Qml0IHx8IG5leHRJbmRleENhY2hlID09IGluZGV4ICsgMSk7CisgICAgQVNT
RVJUKGlzOEJpdCB8fCBuZXh0SW5kZXhDYWNoZSA9PSBpbmRleCArIDEgfHwgbmV4dEluZGV4Q2Fj
aGUgPT0gaW5kZXggKyAyKTsKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVBvaW50
czo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAtPiBJdGVyYXRvciYKK3sKKyAgICBpZiAobV9jYWNo
ZUlzVmFsaWQpIHsKKyAgICAgICAgYXNzZXJ0Q2FjaGVJc1ZhbGlkKG1fc3RyaW5nVmlldy5pczhC
aXQoKSwgbV9pbmRleCwgbV9uZXh0SW5kZXhDYWNoZSk7CisgICAgICAgIG1faW5kZXggPSBtX25l
eHRJbmRleENhY2hlOworICAgICAgICBtX2NhY2hlSXNWYWxpZCA9IGZhbHNlOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgQVNTRVJUKG1fbmV4dEluZGV4Q2FjaGUgPD0gbV9p
bmRleCk7CisgICAgaWYgKG1fc3RyaW5nVmlldy5pczhCaXQoKSkKKyAgICAgICAgKyttX2luZGV4
OworICAgIGVsc2UKKyAgICAgICAgVTE2X05FWFQobV9zdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigp
LCBtX2luZGV4LCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCksIG1fY29kZXBvaW50Q2FjaGUpOworICAg
IG1fbmV4dEluZGV4Q2FjaGUgPSBtX2luZGV4OworICAgIHJldHVybiAqdGhpczsKK30KKworaW5s
aW5lIFVDaGFyMzIgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yKigp
IGNvbnN0Cit7CisgICAgaWYgKG1fY2FjaGVJc1ZhbGlkKSB7CisgICAgICAgIGFzc2VydENhY2hl
SXNWYWxpZChtX3N0cmluZ1ZpZXcuaXM4Qml0KCksIG1faW5kZXgsIG1fbmV4dEluZGV4Q2FjaGUp
OworICAgICAgICByZXR1cm4gbV9jb2RlcG9pbnRDYWNoZTsKKyAgICB9CisKKyAgICBBU1NFUlQo
bV9uZXh0SW5kZXhDYWNoZSA9PSBtX2luZGV4KTsKKyAgICBpZiAobV9zdHJpbmdWaWV3LmlzOEJp
dCgpKSB7CisgICAgICAgIG1fY29kZXBvaW50Q2FjaGUgPSBtX3N0cmluZ1ZpZXdbbV9pbmRleF07
CisgICAgICAgIG1fbmV4dEluZGV4Q2FjaGUgPSBtX2luZGV4ICsgMTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgVTE2X05FWFQobV9zdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBtX25leHRJbmRleENh
Y2hlLCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCksIG1fY29kZXBvaW50Q2FjaGUpOworICAgIG1fY2Fj
aGVJc1ZhbGlkID0gdHJ1ZTsKKyAgICByZXR1cm4gbV9jb2RlcG9pbnRDYWNoZTsKK30KKworaW5s
aW5lIGJvb2wgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29u
c3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmluZ1ZpZXcgPT0g
b3RoZXIubV9zdHJpbmdWaWV3ICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKK30KKworaW5s
aW5lIGJvb2wgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29u
c3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVBvaW50czo6YmVnaW4oKSBjb25z
dCAtPiBJdGVyYXRvcgoreworICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIDApOwor
fQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjplbmQoKSBjb25zdCAtPiBJ
dGVyYXRvcgoreworICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIG1fc3RyaW5nVmll
dy5sZW5ndGgoKSk7Cit9CisKK2lubGluZSBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6OkNvZGVVbml0
cyhjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3KQorICAgIDogbV9zdHJpbmdWaWV3KHN0cmlu
Z1ZpZXcpCit7Cit9CisKK2lubGluZSBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpJ
dGVyYXRvcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCB1bnNpZ25lZCBpbmRleCkKKyAg
ICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQorICAgICwgbV9pbmRleChpbmRleCkKK3sKK30K
KworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3Ir
KygpIC0+IEl0ZXJhdG9yJgoreworICAgICsrbV9pbmRleDsKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK2lubGluZSBVQ2hhciBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRv
ciooKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmluZ1ZpZXdbbV9pbmRleF07Cit9CisKK2lu
bGluZSBib29sIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29u
c3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmluZ1ZpZXcgPT0g
b3RoZXIubV9zdHJpbmdWaWV3ICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKK30KKworaW5s
aW5lIGJvb2wgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25z
dCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworfQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6OmJlZ2luKCkgY29uc3Qg
LT4gSXRlcmF0b3IKK3sKKyAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCAwKTsKK30K
KworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVVuaXRzOjplbmQoKSBjb25zdCAtPiBJdGVy
YXRvcgoreworICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIG1fc3RyaW5nVmlldy5s
ZW5ndGgoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OmFwcGVuZDsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ1ZpZXcuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKaW5kZXggZjE2
MTNlODhlZWNiOTVkMzJkMGRmMDNiNDZhNjBlODEyZGZjMTYzMy4uNzhjYWM2ZjkxYzYyNTJlOTA3
MGFiYmM4MjI1NzUwZTZkMTMxMzMyNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvU3RyaW5nVmlldy5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewpAQCAtNzcsNCAr
NzgsMTI4IEBAIFRFU1QoV1RGLCBTdHJpbmdWaWV3RW1wdHlWc051bGwpCiAgICAgICAgIFNVQ0NF
RUQoKTsKIH0KIAorYm9vbCBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldzo6Q29kZVBv
aW50cyBjb2RlUG9pbnRzLCBzdGQ6OnZlY3RvcjxVQ2hhcjMyPiBleHBlY3RlZCkKK3sKKyAgICBz
dGQ6OnZlY3RvcjxVQ2hhcjMyPiBhY3R1YWw7CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IGNv
ZGVQb2ludHMpCisgICAgICAgIGFjdHVhbC5wdXNoX2JhY2soY29kZVBvaW50KTsKKyAgICByZXR1
cm4gYWN0dWFsID09IGV4cGVjdGVkOworfQorCitzdGF0aWMgYm9vbCBjb21wYXJlTG9vcEl0ZXJh
dGlvbnMoU3RyaW5nVmlldzo6Q29kZVVuaXRzIGNvZGVVbml0cywgc3RkOjp2ZWN0b3I8VUNoYXI+
IGV4cGVjdGVkKQoreworICAgIHN0ZDo6dmVjdG9yPFVDaGFyPiBhY3R1YWw7CisgICAgZm9yIChh
dXRvIGNvZGVVbml0IDogY29kZVVuaXRzKQorICAgICAgICBhY3R1YWwucHVzaF9iYWNrKGNvZGVV
bml0KTsKKyAgICByZXR1cm4gYWN0dWFsID09IGV4cGVjdGVkOworfQorCitzdGF0aWMgdm9pZCBi
dWlsZChTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBzdGQ6OnZlY3RvcjxVQ2hhcj4gaW5wdXQpCit7
CisgICAgYnVpbGRlci5jbGVhcigpOworICAgIGZvciAoYXV0byBjb2RlVW5pdCA6IGlucHV0KQor
ICAgICAgICBidWlsZGVyLmFwcGVuZChjb2RlVW5pdCk7Cit9CisKK1RFU1QoV1RGLCBTdHJpbmdW
aWV3SXRlcmF0b3JzKQoreworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KCku
Y29kZVBvaW50cygpLCB7IH0pOworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3
KCkuY29kZVVuaXRzKCksIHsgfSk7CisKKyAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5n
Vmlldzo6ZW1wdHkoKS5jb2RlUG9pbnRzKCksIHsgfSk7CisgICAgY29tcGFyZUxvb3BJdGVyYXRp
b25zKFN0cmluZ1ZpZXc6OmVtcHR5KCkuY29kZVVuaXRzKCksIHsgfSk7CisKKyAgICBjb21wYXJl
TG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhTdHJpbmcoImhlbGxvIikpLmNvZGVQb2ludHMoKSwg
eydoJywgJ2UnLCAnbCcsICdsJywgJ28nfSk7CisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0
cmluZ1ZpZXcoU3RyaW5nKCJoZWxsbyIpKS5jb2RlVW5pdHMoKSwgeydoJywgJ2UnLCAnbCcsICds
JywgJ28nfSk7CisKKyAgICBTdHJpbmdCdWlsZGVyIGI7CisgICAgYnVpbGQoYiwgezB4RDgwMCwg
MHhERDU1fSk7IC8vIFN1cnJvZ2F0ZXMgZm9yIHVuaWNvZGUgY29kZSBwb2ludCBVKzEwMTU1Cisg
ICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmlu
ZygpKS5jb2RlUG9pbnRzKCksIHsweDEwMTU1fSkpOworICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVM
b29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweEQ4
MDAsIDB4REQ1NX0pKTsKKworICAgIGJ1aWxkKGIsIHsweEQ4MDB9KTsgLy8gTGVhZGluZyBzdXJy
b2dhdGUgb25seQorICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdW
aWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwfSkpOworICAgIEVYUEVDVF9U
UlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVu
aXRzKCksIHsweEQ4MDB9KSk7CisKKyAgICBidWlsZChiLCB7MHhEODAwLCAweEQ4MDF9KTsgLy8g
VHdvIGxlYWRpbmcgc3Vycm9nYXRlcworICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0
aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwLCAweEQ4
MDF9KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXco
Yi50b1N0cmluZygpKS5jb2RlVW5pdHMoKSwgezB4RDgwMCwgMHhEODAxfSkpOworCisgICAgYnVp
bGQoYiwgezB4REQ1NX0pOyAvLyBUcmFpbGluZyBzdXJyb2dhdGUgb25seQorICAgIEVYUEVDVF9U
UlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBv
aW50cygpLCB7MHhERDU1fSkpOworICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9u
cyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRzKCksIHsweERENTV9KSk7CisKKyAg
ICBidWlsZChiLCB7MHhEODAwLCAnaCd9KTsgLy8gTGVhZGluZyBzdXJyb2dhdGUgZm9sbG93ZWQg
Ynkgbm9uLXN1cnJvZ2F0ZQorICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhT
dHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHhEODAwLCAnaCd9KSk7Cisg
ICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmlu
ZygpKS5jb2RlVW5pdHMoKSwgezB4RDgwMCwgJ2gnfSkpOworCisgICAgYnVpbGQoYiwgezB4MDMw
Nn0pOyAvLyAiQ09NQklOSU5HIEJSRVZFIgorICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRl
cmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50cygpLCB7MHgwMzA2fSkp
OworICAgIEVYUEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9T
dHJpbmcoKSkuY29kZVVuaXRzKCksIHsweDAzMDZ9KSk7CisKKyAgICBidWlsZChiLCB7MHgwMzA2
LCAweEQ4MDAsIDB4REQ1NSwgJ2gnLCAnZScsICdsJywgJ28nfSk7IC8vIE1peCBvZiBzaW5nbGUg
Y29kZSB1bml0IGFuZCBtdWx0aSBjb2RlIHVuaXQgY29kZSBwb2ludHMKKyAgICBFWFBFQ1RfVFJV
RShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2lu
dHMoKSwgezB4MDMwNiwgMHgxMDE1NSwgJ2gnLCAnZScsICdsJywgJ28nfSkpOworICAgIEVYUEVD
VF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29k
ZVVuaXRzKCksIHsweDAzMDYsIDB4RDgwMCwgMHhERDU1LCAnaCcsICdlJywgJ2wnLCAnbyd9KSk7
CisKKyAgICB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gYi50b1N0cmluZygpOworICAgICAgICBB
U1NFUlRfRkFMU0Uoc3RyaW5nLmlzOEJpdCgpKTsKKyAgICAgICAgYXV0byBjb2RlUG9pbnRzID0g
U3RyaW5nVmlldyhzdHJpbmcpLmNvZGVQb2ludHMoKTsKKyAgICAgICAgYXV0byBjb2RlUG9pbnRz
SXRlcmF0b3IgPSBjb2RlUG9pbnRzLmJlZ2luKCk7CisgICAgICAgIEVYUEVDVF9FUSgqY29kZVBv
aW50c0l0ZXJhdG9yLCAweDAzMDYpOworICAgICAgICBFWFBFQ1RfRVEoKmNvZGVQb2ludHNJdGVy
YXRvciwgMHgwMzA2KTsKKyAgICAgICAgKytjb2RlUG9pbnRzSXRlcmF0b3I7CisgICAgICAgIEVY
UEVDVF9FUSgqY29kZVBvaW50c0l0ZXJhdG9yLCAweDEwMTU1KTsKKyAgICAgICAgKytjb2RlUG9p
bnRzSXRlcmF0b3I7CisgICAgICAgICsrY29kZVBvaW50c0l0ZXJhdG9yOworICAgICAgICArK2Nv
ZGVQb2ludHNJdGVyYXRvcjsKKyAgICAgICAgRVhQRUNUX0VRKCpjb2RlUG9pbnRzSXRlcmF0b3Is
ICdsJyk7CisgICAgICAgICsrY29kZVBvaW50c0l0ZXJhdG9yOworICAgICAgICBFWFBFQ1RfRVEo
KmNvZGVQb2ludHNJdGVyYXRvciwgJ28nKTsKKworICAgICAgICBhdXRvIGNvZGVVbml0cyA9IFN0
cmluZ1ZpZXcoc3RyaW5nKS5jb2RlVW5pdHMoKTsKKyAgICAgICAgYXV0byBjb2RlVW5pdHNJdGVy
YXRvciA9IGNvZGVVbml0cy5iZWdpbigpOworICAgICAgICBFWFBFQ1RfRVEoKmNvZGVVbml0c0l0
ZXJhdG9yLCAweDAzMDYpOworICAgICAgICBFWFBFQ1RfRVEoKmNvZGVVbml0c0l0ZXJhdG9yLCAw
eDAzMDYpOworICAgICAgICArK2NvZGVVbml0c0l0ZXJhdG9yOworICAgICAgICBFWFBFQ1RfRVEo
KmNvZGVVbml0c0l0ZXJhdG9yLCAweEQ4MDApOworICAgICAgICArK2NvZGVVbml0c0l0ZXJhdG9y
OworICAgICAgICArK2NvZGVVbml0c0l0ZXJhdG9yOworICAgICAgICArK2NvZGVVbml0c0l0ZXJh
dG9yOworICAgICAgICBFWFBFQ1RfRVEoKmNvZGVVbml0c0l0ZXJhdG9yLCAnZScpOworICAgICAg
ICArK2NvZGVVbml0c0l0ZXJhdG9yOworICAgICAgICBFWFBFQ1RfRVEoKmNvZGVVbml0c0l0ZXJh
dG9yLCAnbCcpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmco
ImFiY2RlZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBBU1NFUlRf
VFJVRShzdHJpbmcuaXM4Qml0KCkpOworICAgICAgICBhdXRvIGNvZGVQb2ludHMgPSBTdHJpbmdW
aWV3KHN0cmluZykuY29kZVBvaW50cygpOworICAgICAgICBhdXRvIGNvZGVQb2ludHNJdGVyYXRv
ciA9IGNvZGVQb2ludHMuYmVnaW4oKTsKKyAgICAgICAgRVhQRUNUX0VRKCpjb2RlUG9pbnRzSXRl
cmF0b3IsICdhJyk7CisgICAgICAgIEVYUEVDVF9FUSgqY29kZVBvaW50c0l0ZXJhdG9yLCAnYScp
OworICAgICAgICArK2NvZGVQb2ludHNJdGVyYXRvcjsKKyAgICAgICAgRVhQRUNUX0VRKCpjb2Rl
UG9pbnRzSXRlcmF0b3IsICdiJyk7CisgICAgICAgICsrY29kZVBvaW50c0l0ZXJhdG9yOworICAg
ICAgICArK2NvZGVQb2ludHNJdGVyYXRvcjsKKyAgICAgICAgKytjb2RlUG9pbnRzSXRlcmF0b3I7
CisgICAgICAgIEVYUEVDVF9FUSgqY29kZVBvaW50c0l0ZXJhdG9yLCAnZScpOworICAgICAgICAr
K2NvZGVQb2ludHNJdGVyYXRvcjsKKyAgICAgICAgRVhQRUNUX0VRKCpjb2RlUG9pbnRzSXRlcmF0
b3IsICdmJyk7CisKKyAgICAgICAgYXV0byBjb2RlVW5pdHMgPSBTdHJpbmdWaWV3KHN0cmluZyku
Y29kZVVuaXRzKCk7CisgICAgICAgIGF1dG8gY29kZVVuaXRzSXRlcmF0b3IgPSBjb2RlVW5pdHMu
YmVnaW4oKTsKKyAgICAgICAgRVhQRUNUX0VRKCpjb2RlVW5pdHNJdGVyYXRvciwgJ2EnKTsKKyAg
ICAgICAgRVhQRUNUX0VRKCpjb2RlVW5pdHNJdGVyYXRvciwgJ2EnKTsKKyAgICAgICAgKytjb2Rl
VW5pdHNJdGVyYXRvcjsKKyAgICAgICAgRVhQRUNUX0VRKCpjb2RlVW5pdHNJdGVyYXRvciwgJ2In
KTsKKyAgICAgICAgKytjb2RlVW5pdHNJdGVyYXRvcjsKKyAgICAgICAgKytjb2RlVW5pdHNJdGVy
YXRvcjsKKyAgICAgICAgKytjb2RlVW5pdHNJdGVyYXRvcjsKKyAgICAgICAgRVhQRUNUX0VRKCpj
b2RlVW5pdHNJdGVyYXRvciwgJ2UnKTsKKyAgICAgICAgKytjb2RlVW5pdHNJdGVyYXRvcjsKKyAg
ICAgICAgRVhQRUNUX0VRKCpjb2RlVW5pdHNJdGVyYXRvciwgJ2YnKTsKKyAgICB9Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238931</attachid>
            <date>2014-09-30 09:48:12 -0700</date>
            <delta_ts>2014-10-02 17:31:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137165-20140930094817.patch</filename>
            <type>text/plain</type>
            <size>10754</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGMxNjkyODlmN2E5OTk4ZjYyNGIyNWE4
ZjdiOTE4YWNjNGI4MmEzYzQuLjA3ZTk0M2ViOTQ4ZGE4YWE4ZDRhYjBkOTI1YzdiNmE3MDAxNGYz
NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTQtMDktMzAgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IG1vZGVybiBmb3IgbG9vcHMg
b3ZlciBTdHJpbmdWaWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM3MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHR3byBmdW5jdGlvbnMsIGNvZGVQb2ludHMoKSBhbmQg
Y29kZVVuaXRzKCksIG9uIFN0cmluZ1ZpZXcuCisgICAgICAgIFRoZXNlIHR3byBmdW5jdGlvbnMg
cmV0dXJuIHNtYWxsIG9iamVjdHMgd2hpY2ggaGF2ZSBiZWdpbigpIGFuZCBlbmQoKSBmdW5jdGlv
bnMsCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBtb2Rlcm4gZm9y
IGxvb3Agc3R5bGUuIFRoaXMgc21hbGwgY2xhc3MgYWxzbworICAgICAgICBoYXMgYW4gaW5uZXIg
aXRlcmF0b3IgY2xhc3Mgd2hpY2ggY2FuIGJlIGluY3JlbWVudGVkLCBkZXJlZmVyZW5jZWQsIGFu
ZAorICAgICAgICBjb21wYXJlZC4KKworICAgICAgICBVc2luZyB0aGVzZSBuZXcgb2JqZWN0cyBs
b29rcyBsaWtlIHRoaXM6CisgICAgICAgIGZvciAoVUNoYXIgY29kZXVuaXQgOiBzdHJpbmdWaWV3
LmNvZGVVbml0cygpKSB7IH0gYW5kCisgICAgICAgIGZvciAoVUNoYXIzMiBjb2RlcG9pbnQgOiBz
dHJpbmdWaWV3LmNvZGVQb2ludHMoKSkgeyB9LgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
Vmlldy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojpjb2RlcG9pbnRzKToKKyAgICAgICAg
KFdURjo6U3RyaW5nVmlldzo6Y29kZXVuaXRzKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlld0Nv
ZGVQb2ludEl0ZXJhdG9yOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3IpOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3I6Okl0ZXJhdG9yOjpJdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJh
dG9yKik6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRv
cjo6U3RyaW5nVmlld0NvZGVVbml0SXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3
Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlld0NvZGVVbml0SXRlcmF0b3I6Okl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
CiAyMDE0LTA5LTI5ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTc0MDQ1LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z1ZpZXcuaAppbmRleCA5Yzk4ZDA4MDc0ZTQ3NjczMWIyNGFjZDhkNjRiMzY0MzUxNDJhOGQ2Li41
ZGZmZmFlYzMwYTFlMTZiZWZmOTYyMTBhMGQ0MjE3ZjhhZTM5OTczIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ1ZpZXcuaApAQCAtMzcsNiArMzcsOSBAQCBuYW1lc3BhY2UgV1RGIHsKIAogY2xhc3MgU3Ry
aW5nVmlldyB7CiBwdWJsaWM6CisgICAgY2xhc3MgQ29kZVBvaW50czsKKyAgICBjbGFzcyBDb2Rl
VW5pdHM7CisKICAgICBTdHJpbmdWaWV3KCkKICAgICAgICAgOiBtX2NoYXJhY3RlcnMobnVsbHB0
cikKICAgICAgICAgLCBtX2xlbmd0aCgwKQpAQCAtMTgxLDYgKzE4NCwxMiBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGNvbnRhaW5zKFVDaGFyIGMpIGNvbnN0IHsgcmV0dXJuIGZpbmQoYykgIT0gbm90
Rm91bmQ7IH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmdWaWV3JikgY29uc3Q7
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZ1ZpZXcmKSBjb25zdDsKKworICAgIENv
ZGVQb2ludHMgY29kZVBvaW50cygpIGNvbnN0OworICAgIENvZGVVbml0cyBjb2RlVW5pdHMoKSBj
b25zdDsKKwogI2lmIFVTRShDRikKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIG51bGwg
c3RyaW5ncyB0byBlbXB0eSBzdHJpbmdzLgogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IGNyZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlpbmcoKSBjb25zdDsK
QEAgLTIxNSw2ICsyMjQsNjAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKIH07
CiAKK2NsYXNzIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHMgeworcHVibGljOgorICAgIGNsYXNzIEl0
ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcm
LCB1bnNpZ25lZCBpbmRleCk7CisgICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisgICAg
ICAgIFVDaGFyMzIgb3BlcmF0b3IqKCkgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBJdGVyYXRvciYpIGNvbnN0OworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRl
cmF0b3ImKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIGVudW0gY2xhc3MgTW9kZSB7
CisgICAgICAgICAgICBEZXJlZmVyZW5jZSwKKyAgICAgICAgICAgIEluY3JlbWVudAorICAgICAg
ICB9OworCisgICAgICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG1fc3RyaW5nVmlldzsKKyAgICAgICAg
bXV0YWJsZSB1bnNpZ25lZCBtX2luZGV4OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAg
bXV0YWJsZSBNb2RlIG1fbW9kZTsKKyNlbmRpZgorICAgIH07CisKKyAgICBleHBsaWNpdCBDb2Rl
UG9pbnRzKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0Owor
ICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0cmluZ1ZpZXcgbV9z
dHJpbmdWaWV3OworfTsKKworY2xhc3MgU3RyaW5nVmlldzo6Q29kZVVuaXRzIHsKK3B1YmxpYzoK
KyAgICBjbGFzcyBJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBJdGVyYXRvcihjb25z
dCBTdHJpbmdWaWV3JiwgdW5zaWduZWQgaW5kZXgpOworICAgICAgICBJdGVyYXRvciYgb3BlcmF0
b3IrKygpOworICAgICAgICBVQ2hhciBvcGVyYXRvciooKSBjb25zdDsKKyAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBJdGVyYXRvciYpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3Qg
U3RyaW5nVmlldyYgbV9zdHJpbmdWaWV3OworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAg
IH07CisKKyAgICBleHBsaWNpdCBDb2RlVW5pdHMoY29uc3QgU3RyaW5nVmlldyYpOworICAgIEl0
ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgU3RyaW5nVmlldyBtX3N0cmluZ1ZpZXc7Cit9OworCiBpbmxpbmUgdm9pZCBTdHJp
bmdWaWV3OjpnZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChMQ2hhciogZGVzdGluYXRpb24pIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGlzOEJpdCgpKTsKQEAgLTI3MCw2ICszMzMsMTI2IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gdm9pZCBh
cHBlbmQoVmVjdG9yPENoYXJhCiAgICAgc3RyaW5nLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0
KGJ1ZmZlci5kYXRhKCkgKyBvbGRTaXplKTsKIH0KIAoraW5saW5lIGJvb2wgU3RyaW5nVmlldzo6
b3BlcmF0b3I9PShjb25zdCBTdHJpbmdWaWV3JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jaGFyYWN0ZXJzID09IG90aGVyLm1fY2hhcmFjdGVycyAmJiBtX2xlbmd0aCA9PSBvdGhlci5t
X2xlbmd0aDsKK30KKworaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6b3BlcmF0b3IhPShjb25zdCBT
dHJpbmdWaWV3JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
Cit9CisKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OmNvZGVQb2ludHMoKSBjb25zdCAtPiBDb2Rl
UG9pbnRzCit7CisgICAgcmV0dXJuIENvZGVQb2ludHMoKnRoaXMpOworfQorCitpbmxpbmUgYXV0
byBTdHJpbmdWaWV3Ojpjb2RlVW5pdHMoKSBjb25zdCAtPiBDb2RlVW5pdHMKK3sKKyAgICByZXR1
cm4gQ29kZVVuaXRzKCp0aGlzKTsKK30KKworaW5saW5lIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6
OkNvZGVQb2ludHMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldykKKyAgICA6IG1fc3RyaW5n
VmlldyhzdHJpbmdWaWV3KQoreworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6
SXRlcmF0b3I6Okl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIHVuc2lnbmVk
IGluZGV4KQorICAgIDogbV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcpCisgICAgLCBtX2luZGV4KGlu
ZGV4KQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAsIG1fbW9kZShNb2RlOjpEZXJlZmVyZW5j
ZSkKKyNlbmRpZgoreworfQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJ
dGVyYXRvcjo6b3BlcmF0b3IrKygpIC0+IEl0ZXJhdG9yJgoreworI2lmICFBU1NFUlRfRElTQUJM
RUQKKyAgICBBU1NFUlQobV9tb2RlID09IE1vZGU6OkluY3JlbWVudCk7CisgICAgbV9tb2RlID0g
TW9kZTo6RGVyZWZlcmVuY2U7CisjZW5kaWYKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGlu
ZSBVQ2hhcjMyIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvciooKSBj
b25zdAoreworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBBU1NFUlQobV9tb2RlID09IE1vZGU6
OkRlcmVmZXJlbmNlKTsKKyAgICBtX21vZGUgPSBNb2RlOjpJbmNyZW1lbnQ7CisjZW5kaWYKKwor
ICAgIGlmIChtX3N0cmluZ1ZpZXcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBtX3N0cmluZ1Zp
ZXcuY2hhcmFjdGVyczgoKVttX2luZGV4KytdOworCisgICAgVUNoYXIzMiBjb2RlUG9pbnQ7Cisg
ICAgVTE2X05FWFQobV9zdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBtX2luZGV4LCBtX3N0cmlu
Z1ZpZXcubGVuZ3RoKCksIGNvZGVQb2ludCk7CisgICAgcmV0dXJuIGNvZGVQb2ludDsKK30KKwor
aW5saW5lIGJvb2wgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yPT0o
Y29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmluZ1ZpZXcg
PT0gb3RoZXIubV9zdHJpbmdWaWV3ICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKK30KKwor
aW5saW5lIGJvb2wgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yIT0o
Y29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVBvaW50czo6YmVnaW4oKSBj
b25zdCAtPiBJdGVyYXRvcgoreworICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIDAp
OworfQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjplbmQoKSBjb25zdCAt
PiBJdGVyYXRvcgoreworICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIG1fc3RyaW5n
Vmlldy5sZW5ndGgoKSk7Cit9CisKK2lubGluZSBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6OkNvZGVV
bml0cyhjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3KQorICAgIDogbV9zdHJpbmdWaWV3KHN0
cmluZ1ZpZXcpCit7Cit9CisKK2lubGluZSBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9y
OjpJdGVyYXRvcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCB1bnNpZ25lZCBpbmRleCkK
KyAgICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQorICAgICwgbV9pbmRleChpbmRleCkKK3sK
K30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0
b3IrKygpIC0+IEl0ZXJhdG9yJgoreworICAgICsrbV9pbmRleDsKKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKK2lubGluZSBVQ2hhciBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVy
YXRvciooKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmluZ1ZpZXdbbV9pbmRleF07Cit9CisK
K2lubGluZSBib29sIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yPT0o
Y29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmluZ1ZpZXcg
PT0gb3RoZXIubV9zdHJpbmdWaWV3ICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKK30KKwor
aW5saW5lIGJvb2wgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IhPShj
b25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworfQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6OmJlZ2luKCkgY29u
c3QgLT4gSXRlcmF0b3IKK3sKKyAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCAwKTsK
K30KKworaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVVuaXRzOjplbmQoKSBjb25zdCAtPiBJ
dGVyYXRvcgoreworICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIG1fc3RyaW5nVmll
dy5sZW5ndGgoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OmFwcGVu
ZDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ1ZpZXcu
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKaW5kZXgg
ZjE2MTNlODhlZWNiOTVkMzJkMGRmMDNiNDZhNjBlODEyZGZjMTYzMy4uZGM1NTQ0NmZmODQ2Y2I4
YzhkMWIwZDM3OTA0MDM2ZmNkZTE2NmFmNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvU3RyaW5nVmlldy5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewpAQCAtNzcs
NCArNzgsNjggQEAgVEVTVChXVEYsIFN0cmluZ1ZpZXdFbXB0eVZzTnVsbCkKICAgICAgICAgU1VD
Q0VFRCgpOwogfQogCitib29sIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3OjpDb2Rl
UG9pbnRzIGNvZGVQb2ludHMsIHN0ZDo6dmVjdG9yPFVDaGFyMzI+IGV4cGVjdGVkKQoreworICAg
IHN0ZDo6dmVjdG9yPFVDaGFyMzI+IGFjdHVhbDsKKyAgICBmb3IgKGF1dG8gY29kZVBvaW50IDog
Y29kZVBvaW50cykKKyAgICAgICAgYWN0dWFsLnB1c2hfYmFjayhjb2RlUG9pbnQpOworICAgIHJl
dHVybiBhY3R1YWwgPT0gZXhwZWN0ZWQ7Cit9CisKK3N0YXRpYyBib29sIGNvbXBhcmVMb29wSXRl
cmF0aW9ucyhTdHJpbmdWaWV3OjpDb2RlVW5pdHMgY29kZVVuaXRzLCBzdGQ6OnZlY3RvcjxVQ2hh
cj4gZXhwZWN0ZWQpCit7CisgICAgc3RkOjp2ZWN0b3I8VUNoYXI+IGFjdHVhbDsKKyAgICBmb3Ig
KGF1dG8gY29kZVVuaXQgOiBjb2RlVW5pdHMpCisgICAgICAgIGFjdHVhbC5wdXNoX2JhY2soY29k
ZVVuaXQpOworICAgIHJldHVybiBhY3R1YWwgPT0gZXhwZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lk
IGJ1aWxkKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIHN0ZDo6dmVjdG9yPFVDaGFyPiBpbnB1dCkK
K3sKKyAgICBidWlsZGVyLmNsZWFyKCk7CisgICAgZm9yIChhdXRvIGNvZGVVbml0IDogaW5wdXQp
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGNvZGVVbml0KTsKK30KKworVEVTVChXVEYsIFN0cmlu
Z1ZpZXdJdGVyYXRvcnMpCit7CisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXco
KS5jb2RlUG9pbnRzKCksIHsgfSk7CisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1Zp
ZXcoKS5jb2RlVW5pdHMoKSwgeyB9KTsKKworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJp
bmdWaWV3OjplbXB0eSgpLmNvZGVQb2ludHMoKSwgeyB9KTsKKyAgICBjb21wYXJlTG9vcEl0ZXJh
dGlvbnMoU3RyaW5nVmlldzo6ZW1wdHkoKS5jb2RlVW5pdHMoKSwgeyB9KTsKKworICAgIGNvbXBh
cmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KFN0cmluZygiaGVsbG8iKSkuY29kZVBvaW50cygp
LCB7J2gnLCAnZScsICdsJywgJ2wnLCAnbyd9KTsKKyAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnMo
U3RyaW5nVmlldyhTdHJpbmcoImhlbGxvIikpLmNvZGVVbml0cygpLCB7J2gnLCAnZScsICdsJywg
J2wnLCAnbyd9KTsKKworICAgIFN0cmluZ0J1aWxkZXIgYjsKKyAgICBidWlsZChiLCB7MHhEODAw
LCAweERENTV9KTsgLy8gU3Vycm9nYXRlcyBmb3IgdW5pY29kZSBjb2RlIHBvaW50IFUrMTAxNTUK
KyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3Ry
aW5nKCkpLmNvZGVQb2ludHMoKSwgezB4MTAxNTV9KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFy
ZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlVW5pdHMoKSwgezB4
RDgwMCwgMHhERDU1fSkpOworCisgICAgYnVpbGQoYiwgezB4RDgwMH0pOyAvLyBMZWFkaW5nIHN1
cnJvZ2F0ZSBvbmx5CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmlu
Z1ZpZXcoYi50b1N0cmluZygpKS5jb2RlUG9pbnRzKCksIHsweEQ4MDB9KSk7CisgICAgRVhQRUNU
X1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2Rl
VW5pdHMoKSwgezB4RDgwMH0pKTsKKworICAgIGJ1aWxkKGIsIHsweEQ4MDAsIDB4RDgwMX0pOyAv
LyBUd28gbGVhZGluZyBzdXJyb2dhdGVzCisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVy
YXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlUG9pbnRzKCksIHsweEQ4MDAsIDB4
RDgwMX0pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmll
dyhiLnRvU3RyaW5nKCkpLmNvZGVVbml0cygpLCB7MHhEODAwLCAweEQ4MDF9KSk7CisKKyAgICBi
dWlsZChiLCB7MHhERDU1fSk7IC8vIFRyYWlsaW5nIHN1cnJvZ2F0ZSBvbmx5CisgICAgRVhQRUNU
X1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2Rl
UG9pbnRzKCksIHsweERENTV9KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRp
b25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlVW5pdHMoKSwgezB4REQ1NX0pKTsKKwor
ICAgIGJ1aWxkKGIsIHsweEQ4MDAsICdoJ30pOyAvLyBMZWFkaW5nIHN1cnJvZ2F0ZSBmb2xsb3dl
ZCBieSBub24tc3Vycm9nYXRlCisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25z
KFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlUG9pbnRzKCksIHsweEQ4MDAsICdoJ30pKTsK
KyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3Ry
aW5nKCkpLmNvZGVVbml0cygpLCB7MHhEODAwLCAnaCd9KSk7CisKKyAgICBidWlsZChiLCB7MHgw
MzA2fSk7IC8vICJDT01CSU5JTkcgQlJFVkUiCisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJ
dGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlUG9pbnRzKCksIHsweDAzMDZ9
KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50
b1N0cmluZygpKS5jb2RlVW5pdHMoKSwgezB4MDMwNn0pKTsKKworICAgIGJ1aWxkKGIsIHsweDAz
MDYsIDB4RDgwMCwgMHhERDU1LCAnaCcsICdlJywgJ2wnLCAnbyd9KTsgLy8gTWl4IG9mIHNpbmds
ZSBjb2RlIHVuaXQgYW5kIG11bHRpIGNvZGUgdW5pdCBjb2RlIHBvaW50cworICAgIEVYUEVDVF9U
UlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBv
aW50cygpLCB7MHgwMzA2LCAweDEwMTU1LCAnaCcsICdlJywgJ2wnLCAnbyd9KSk7CisgICAgRVhQ
RUNUX1RSVUUoY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5j
b2RlVW5pdHMoKSwgezB4MDMwNiwgMHhEODAwLCAweERENTUsICdoJywgJ2UnLCAnbCcsICdvJ30p
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239162</attachid>
            <date>2014-10-02 17:31:09 -0700</date>
            <delta_ts>2014-10-03 09:08:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137165-20141002173111.patch</filename>
            <type>text/plain</type>
            <size>10282</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGFlMzNmZjA1YWQ1NmFjZmM1MDE5Mjhl
MTcxMzg1YTEzMTNjYTY2OWMuLmRjMTcxNzRmMGFmMjA3YzM2OWJhMmIzOGRiMDBmNTAwNjViMjg3
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTQtMTAtMDIgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IG1vZGVybiBmb3IgbG9vcHMg
b3ZlciBTdHJpbmdWaWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM3MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHR3byBmdW5jdGlvbnMsIGNvZGVQb2ludHMoKSBhbmQg
Y29kZVVuaXRzKCksIG9uIFN0cmluZ1ZpZXcuCisgICAgICAgIFRoZXNlIHR3byBmdW5jdGlvbnMg
cmV0dXJuIHNtYWxsIG9iamVjdHMgd2hpY2ggaGF2ZSBiZWdpbigpIGFuZCBlbmQoKSBmdW5jdGlv
bnMsCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBtb2Rlcm4gZm9y
IGxvb3Agc3R5bGUuIFRoaXMgc21hbGwgY2xhc3MgYWxzbworICAgICAgICBoYXMgYW4gaW5uZXIg
aXRlcmF0b3IgY2xhc3Mgd2hpY2ggY2FuIGJlIGluY3JlbWVudGVkLCBkZXJlZmVyZW5jZWQsIGFu
ZAorICAgICAgICBjb21wYXJlZC4KKworICAgICAgICBVc2luZyB0aGVzZSBuZXcgb2JqZWN0cyBs
b29rcyBsaWtlIHRoaXM6CisgICAgICAgIGZvciAoVUNoYXIgY29kZXVuaXQgOiBzdHJpbmdWaWV3
LmNvZGVVbml0cygpKSB7IH0gYW5kCisgICAgICAgIGZvciAoVUNoYXIzMiBjb2RlcG9pbnQgOiBz
dHJpbmdWaWV3LmNvZGVQb2ludHMoKSkgeyB9LgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
Vmlldy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojpjb2RlcG9pbnRzKToKKyAgICAgICAg
KFdURjo6U3RyaW5nVmlldzo6Y29kZXVuaXRzKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlld0Nv
ZGVQb2ludEl0ZXJhdG9yOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3IpOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVBvaW50SXRlcmF0b3I6Okl0ZXJhdG9yOjpJdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJh
dG9yKik6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXdDb2RlUG9pbnRJdGVyYXRvcjo6SXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRv
cjo6U3RyaW5nVmlld0NvZGVVbml0SXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3
Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlld0NvZGVVbml0SXRlcmF0b3I6Okl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Q29kZVVuaXRJdGVyYXRvcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
CiAyMDE0LTEwLTAyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAg
ICAgICAgU2ltcGxpZnkgU3RyaW5nVHlwZUFkYXB0ZXIgdGVtcGxhdGVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nVmlldy5oCmluZGV4IGRlMzI2MjE0YTdhM2E4YTJkMjEwNzkxYzkxMWE3MWM0YzdhMDhmMTcu
LjVhMTZlMDdkNjkyZGJlYmU2ZjlmZWZmODAzODdmMmEzZjVhNmViY2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nVmlldy5oCkBAIC0xMzgsNiArMTM4LDEyIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29u
dGFpbnMoVUNoYXIgYykgY29uc3QgeyByZXR1cm4gZmluZChjKSAhPSBub3RGb3VuZDsgfQogCisg
ICAgY2xhc3MgQ29kZVBvaW50czsKKyAgICBjbGFzcyBDb2RlVW5pdHM7CisKKyAgICBDb2RlUG9p
bnRzIGNvZGVQb2ludHMoKSBjb25zdDsKKyAgICBDb2RlVW5pdHMgY29kZVVuaXRzKCkgY29uc3Q7
CisKICNpZiBVU0UoQ0YpCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBudWxsIHN0cmlu
Z3MgdG8gZW1wdHkgc3RyaW5ncy4KICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiBjcmVhdGVDRlN0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3Q7CkBAIC0y
MDAsNiArMjA2LDU1IEBAIGlubGluZSBTdHJpbmdWaWV3OjpTdHJpbmdWaWV3KGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQogICAgIGluaXRpYWxpemUoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcu
bGVuZ3RoKCkpOwogfQogCitjbGFzcyBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzIHsKK3B1YmxpYzoK
KyAgICBjbGFzcyBJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBJdGVyYXRvcihjb25z
dCBTdHJpbmdWaWV3JiwgdW5zaWduZWQgaW5kZXgpOworICAgICAgICBJdGVyYXRvciYgb3BlcmF0
b3IrKygpOworICAgICAgICBVQ2hhcjMyIG9wZXJhdG9yKigpIGNvbnN0OworICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKKyAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25z
dCBTdHJpbmdWaWV3JiBtX3N0cmluZ1ZpZXc7CisgICAgICAgIG11dGFibGUgdW5zaWduZWQgbV9p
bmRleDsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIG11dGFibGUgYm9vbCBtX2FscmVh
ZHlJbmNyZW1lbnRlZDsKKyNlbmRpZgorICAgIH07CisKKyAgICBleHBsaWNpdCBDb2RlUG9pbnRz
KGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0OworICAgIEl0
ZXJhdG9yIGVuZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0cmluZ1ZpZXcgbV9zdHJpbmdW
aWV3OworfTsKKworY2xhc3MgU3RyaW5nVmlldzo6Q29kZVVuaXRzIHsKK3B1YmxpYzoKKyAgICBj
bGFzcyBJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBJdGVyYXRvcihjb25zdCBTdHJp
bmdWaWV3JiwgdW5zaWduZWQgaW5kZXgpOworICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygp
OworICAgICAgICBVQ2hhciBvcGVyYXRvciooKSBjb25zdDsKKyAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBJdGVyYXRvciYpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3RyaW5n
VmlldyYgbV9zdHJpbmdWaWV3OworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisK
KyAgICBleHBsaWNpdCBDb2RlVW5pdHMoY29uc3QgU3RyaW5nVmlldyYpOworICAgIEl0ZXJhdG9y
IGJlZ2luKCkgY29uc3Q7CisgICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgU3RyaW5nVmlldyBtX3N0cmluZ1ZpZXc7Cit9OworCiBpbmxpbmUgdm9pZCBTdHJpbmdWaWV3
OjpnZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGlzOEJpdCgpKTsKQEAgLTI5NCw2ICszNDksMTE4IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gdm9pZCBhcHBlbmQo
VmVjdG9yPENoYXJhCiAgICAgc3RyaW5nLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGJ1ZmZl
ci5kYXRhKCkgKyBvbGRTaXplKTsKIH0KIAoraW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Y29kZVBv
aW50cygpIGNvbnN0IC0+IENvZGVQb2ludHMKK3sKKyAgICByZXR1cm4gQ29kZVBvaW50cygqdGhp
cyk7Cit9CisKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OmNvZGVVbml0cygpIGNvbnN0IC0+IENv
ZGVVbml0cworeworICAgIHJldHVybiBDb2RlVW5pdHMoKnRoaXMpOworfQorCitpbmxpbmUgU3Ry
aW5nVmlldzo6Q29kZVBvaW50czo6Q29kZVBvaW50cyhjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdW
aWV3KQorICAgIDogbV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcpCit7Cit9CisKK2lubGluZSBTdHJp
bmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvcjo6SXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYg
c3RyaW5nVmlldywgdW5zaWduZWQgaW5kZXgpCisgICAgOiBtX3N0cmluZ1ZpZXcoc3RyaW5nVmll
dykKKyAgICAsIG1faW5kZXgoaW5kZXgpCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICwgbV9h
bHJlYWR5SW5jcmVtZW50ZWQodHJ1ZSkKKyNlbmRpZgoreworfQorCitpbmxpbmUgYXV0byBTdHJp
bmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvcjo6b3BlcmF0b3IrKygpIC0+IEl0ZXJhdG9yJgor
eworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBBU1NFUlQoIW1fYWxyZWFkeUluY3JlbWVudGVk
KTsKKyAgICBtX2FscmVhZHlJbmNyZW1lbnRlZCA9IHRydWU7CisjZW5kaWYKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK2lubGluZSBVQ2hhcjMyIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJh
dG9yOjpvcGVyYXRvciooKSBjb25zdAoreworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBBU1NF
UlQobV9hbHJlYWR5SW5jcmVtZW50ZWQpOworICAgIG1fYWxyZWFkeUluY3JlbWVudGVkID0gZmFs
c2U7CisjZW5kaWYKKworICAgIGlmIChtX3N0cmluZ1ZpZXcuaXM4Qml0KCkpCisgICAgICAgIHJl
dHVybiBtX3N0cmluZ1ZpZXcuY2hhcmFjdGVyczgoKVttX2luZGV4KytdOworCisgICAgVUNoYXIz
MiBjb2RlUG9pbnQ7CisgICAgVTE2X05FWFQobV9zdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBt
X2luZGV4LCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCksIGNvZGVQb2ludCk7CisgICAgcmV0dXJuIGNv
ZGVQb2ludDsKK30KKworaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0
b3I6Om9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAoreworICAgIEFTU0VS
VCgmbV9zdHJpbmdWaWV3ID09ICZvdGhlci5tX3N0cmluZ1ZpZXcpOworICAgIHJldHVybiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXg7Cit9CisKK2lubGluZSBib29sIFN0cmluZ1ZpZXc6OkNvZGVQ
b2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
K3sKKyAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cit9CisKK2lubGluZSBhdXRvIFN0cmlu
Z1ZpZXc6OkNvZGVQb2ludHM6OmJlZ2luKCkgY29uc3QgLT4gSXRlcmF0b3IKK3sKKyAgICByZXR1
cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCAwKTsKK30KKworaW5saW5lIGF1dG8gU3RyaW5nVmll
dzo6Q29kZVBvaW50czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0b3IKK3sKKyAgICByZXR1cm4gSXRl
cmF0b3IobV9zdHJpbmdWaWV3LCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkpOworfQorCitpbmxpbmUg
U3RyaW5nVmlldzo6Q29kZVVuaXRzOjpDb2RlVW5pdHMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5n
VmlldykKKyAgICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQoreworfQorCitpbmxpbmUgU3Ry
aW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6SXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYg
c3RyaW5nVmlldywgdW5zaWduZWQgaW5kZXgpCisgICAgOiBtX3N0cmluZ1ZpZXcoc3RyaW5nVmll
dykKKyAgICAsIG1faW5kZXgoaW5kZXgpCit7Cit9CisKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6
OkNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAtPiBJdGVyYXRvciYKK3sKKyAgICAr
K21faW5kZXg7CisgICAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgVUNoYXIgU3RyaW5nVmll
dzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zdHJpbmdWaWV3W21faW5kZXhdOworfQorCitpbmxpbmUgYm9vbCBTdHJpbmdWaWV3OjpDb2Rl
VW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
K3sKKyAgICBBU1NFUlQoJm1fc3RyaW5nVmlldyA9PSAmb3RoZXIubV9zdHJpbmdWaWV3KTsKKyAg
ICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworfQorCitpbmxpbmUgYm9vbCBTdHJp
bmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cit9CisKK2lubGlu
ZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6YmVnaW4oKSBjb25zdCAtPiBJdGVyYXRvcgor
eworICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIDApOworfQorCitpbmxpbmUgYXV0
byBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6OmVuZCgpIGNvbnN0IC0+IEl0ZXJhdG9yCit7CisgICAg
cmV0dXJuIEl0ZXJhdG9yKG1fc3RyaW5nVmlldywgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6YXBwZW5kOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdWaWV3LmNwcAppbmRleCBmMTYxM2U4OGVlY2I5NWQz
MmQwZGYwM2I0NmE2MGU4MTJkZmMxNjMzLi5kYzU1NDQ2ZmY4NDZjYjhjOGQxYjBkMzc5MDQwMzZm
Y2RlMTY2YWY3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJp
bmdWaWV3LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdWaWV3
LmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmll
dy5oPgogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CkBAIC03Nyw0ICs3OCw2OCBAQCBURVNU
KFdURiwgU3RyaW5nVmlld0VtcHR5VnNOdWxsKQogICAgICAgICBTVUNDRUVEKCk7CiB9CiAKK2Jv
b2wgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXc6OkNvZGVQb2ludHMgY29kZVBvaW50
cywgc3RkOjp2ZWN0b3I8VUNoYXIzMj4gZXhwZWN0ZWQpCit7CisgICAgc3RkOjp2ZWN0b3I8VUNo
YXIzMj4gYWN0dWFsOworICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiBjb2RlUG9pbnRzKQorICAg
ICAgICBhY3R1YWwucHVzaF9iYWNrKGNvZGVQb2ludCk7CisgICAgcmV0dXJuIGFjdHVhbCA9PSBl
eHBlY3RlZDsKK30KKworc3RhdGljIGJvb2wgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1Zp
ZXc6OkNvZGVVbml0cyBjb2RlVW5pdHMsIHN0ZDo6dmVjdG9yPFVDaGFyPiBleHBlY3RlZCkKK3sK
KyAgICBzdGQ6OnZlY3RvcjxVQ2hhcj4gYWN0dWFsOworICAgIGZvciAoYXV0byBjb2RlVW5pdCA6
IGNvZGVVbml0cykKKyAgICAgICAgYWN0dWFsLnB1c2hfYmFjayhjb2RlVW5pdCk7CisgICAgcmV0
dXJuIGFjdHVhbCA9PSBleHBlY3RlZDsKK30KKworc3RhdGljIHZvaWQgYnVpbGQoU3RyaW5nQnVp
bGRlciYgYnVpbGRlciwgc3RkOjp2ZWN0b3I8VUNoYXI+IGlucHV0KQoreworICAgIGJ1aWxkZXIu
Y2xlYXIoKTsKKyAgICBmb3IgKGF1dG8gY29kZVVuaXQgOiBpbnB1dCkKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoY29kZVVuaXQpOworfQorCitURVNUKFdURiwgU3RyaW5nVmlld0l0ZXJhdG9ycykK
K3sKKyAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldygpLmNvZGVQb2ludHMoKSwg
eyB9KTsKKyAgICBjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldygpLmNvZGVVbml0cygp
LCB7IH0pOworCisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25zKFN0cmluZ1ZpZXc6OmVtcHR5KCku
Y29kZVBvaW50cygpLCB7IH0pOworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3
OjplbXB0eSgpLmNvZGVVbml0cygpLCB7IH0pOworCisgICAgY29tcGFyZUxvb3BJdGVyYXRpb25z
KFN0cmluZ1ZpZXcoU3RyaW5nKCJoZWxsbyIpKS5jb2RlUG9pbnRzKCksIHsnaCcsICdlJywgJ2wn
LCAnbCcsICdvJ30pOworICAgIGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KFN0cmlu
ZygiaGVsbG8iKSkuY29kZVVuaXRzKCksIHsnaCcsICdlJywgJ2wnLCAnbCcsICdvJ30pOworCisg
ICAgU3RyaW5nQnVpbGRlciBiOworICAgIGJ1aWxkKGIsIHsweEQ4MDAsIDB4REQ1NX0pOyAvLyBT
dXJyb2dhdGVzIGZvciB1bmljb2RlIGNvZGUgcG9pbnQgVSsxMDE1NQorICAgIEVYUEVDVF9UUlVF
KGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVBvaW50
cygpLCB7MHgxMDE1NX0pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMo
U3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVVbml0cygpLCB7MHhEODAwLCAweERENTV9KSk7
CisKKyAgICBidWlsZChiLCB7MHhEODAwfSk7IC8vIExlYWRpbmcgc3Vycm9nYXRlIG9ubHkKKyAg
ICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5n
KCkpLmNvZGVQb2ludHMoKSwgezB4RDgwMH0pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9v
cEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVVbml0cygpLCB7MHhEODAw
fSkpOworCisgICAgYnVpbGQoYiwgezB4RDgwMCwgMHhEODAxfSk7IC8vIFR3byBsZWFkaW5nIHN1
cnJvZ2F0ZXMKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmll
dyhiLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMoKSwgezB4RDgwMCwgMHhEODAxfSkpOworICAgIEVY
UEVDVF9UUlVFKGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSku
Y29kZVVuaXRzKCksIHsweEQ4MDAsIDB4RDgwMX0pKTsKKworICAgIGJ1aWxkKGIsIHsweERENTV9
KTsgLy8gVHJhaWxpbmcgc3Vycm9nYXRlIG9ubHkKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9v
cEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMoKSwgezB4REQ1
NX0pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhi
LnRvU3RyaW5nKCkpLmNvZGVVbml0cygpLCB7MHhERDU1fSkpOworCisgICAgYnVpbGQoYiwgezB4
RDgwMCwgJ2gnfSk7IC8vIExlYWRpbmcgc3Vycm9nYXRlIGZvbGxvd2VkIGJ5IG5vbi1zdXJyb2dh
dGUKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRv
U3RyaW5nKCkpLmNvZGVQb2ludHMoKSwgezB4RDgwMCwgJ2gnfSkpOworICAgIEVYUEVDVF9UUlVF
KGNvbXBhcmVMb29wSXRlcmF0aW9ucyhTdHJpbmdWaWV3KGIudG9TdHJpbmcoKSkuY29kZVVuaXRz
KCksIHsweEQ4MDAsICdoJ30pKTsKKworICAgIGJ1aWxkKGIsIHsweDAzMDZ9KTsgLy8gIkNPTUJJ
TklORyBCUkVWRSIKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5n
VmlldyhiLnRvU3RyaW5nKCkpLmNvZGVQb2ludHMoKSwgezB4MDMwNn0pKTsKKyAgICBFWFBFQ1Rf
VFJVRShjb21wYXJlTG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVV
bml0cygpLCB7MHgwMzA2fSkpOworCisgICAgYnVpbGQoYiwgezB4MDMwNiwgMHhEODAwLCAweERE
NTUsICdoJywgJ2UnLCAnbCcsICdvJ30pOyAvLyBNaXggb2Ygc2luZ2xlIGNvZGUgdW5pdCBhbmQg
bXVsdGkgY29kZSB1bml0IGNvZGUgcG9pbnRzCisgICAgRVhQRUNUX1RSVUUoY29tcGFyZUxvb3BJ
dGVyYXRpb25zKFN0cmluZ1ZpZXcoYi50b1N0cmluZygpKS5jb2RlUG9pbnRzKCksIHsweDAzMDYs
IDB4MTAxNTUsICdoJywgJ2UnLCAnbCcsICdvJ30pKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wYXJl
TG9vcEl0ZXJhdGlvbnMoU3RyaW5nVmlldyhiLnRvU3RyaW5nKCkpLmNvZGVVbml0cygpLCB7MHgw
MzA2LCAweEQ4MDAsIDB4REQ1NSwgJ2gnLCAnZScsICdsJywgJ28nfSkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="263872"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>