<?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>124533</bug_id>
          
          <creation_ts>2013-11-18 12:31:52 -0800</creation_ts>
          <short_desc>Ability to iterate over API::Array</short_desc>
          <delta_ts>2013-12-02 21:50:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Hock">mhock</reporter>
          <assigned_to name="Martin Hock">mhock</assigned_to>
          <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>enrica</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rego+ews</cc>
    
    <cc>thorton</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>951748</commentid>
    <comment_count>0</comment_count>
      <attachid>217221</attachid>
    <who name="Martin Hock">mhock</who>
    <bug_when>2013-11-18 12:31:52 -0800</bug_when>
    <thetext>Created attachment 217221
patch

Currently, we always use the at&lt;T&gt;() method to get members out of an API::Array.  But this means we have to write a boilerplate index-based for loop and manually check if each call returns null.  Instead, we can instantiate an iterator for the type we are interested in, and that iterator is responsible for returning the members of its type.  We can also take advantage of the range based for loop syntax since API::Array is WebKit2 specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951750</commentid>
    <comment_count>1</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-18 12:33:42 -0800</bug_when>
    <thetext>Attachment 217221 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/Shared/APIArray.h&apos;, u&apos;Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp&apos;]&quot; exit_code: 1
Source/WebKit2/Shared/APIArray.h:62:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit2/Shared/APIArray.h:97:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit2/Shared/APIArray.h:100:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 3 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951751</commentid>
    <comment_count>2</comment_count>
      <attachid>217222</attachid>
    <who name="Martin Hock">mhock</who>
    <bug_when>2013-11-18 12:37:36 -0800</bug_when>
    <thetext>Created attachment 217222
style + changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951756</commentid>
    <comment_count>3</comment_count>
      <attachid>217222</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-18 12:46:26 -0800</bug_when>
    <thetext>Comment on attachment 217222
style + changelog

Attachment 217222 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/27728075</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951757</commentid>
    <comment_count>4</comment_count>
      <attachid>217222</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-11-18 12:46:33 -0800</bug_when>
    <thetext>Comment on attachment 217222
style + changelog

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

&gt; Source/WebKit2/Shared/APIArray.h:67
&gt; +        : it(it)
&gt; +        , end(end)

these ought to be indented</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951845</commentid>
    <comment_count>5</comment_count>
      <attachid>217244</attachid>
    <who name="Martin Hock">mhock</who>
    <bug_when>2013-11-18 15:46:07 -0800</bug_when>
    <thetext>Created attachment 217244
fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951928</commentid>
    <comment_count>6</comment_count>
      <attachid>217265</attachid>
    <who name="Martin Hock">mhock</who>
    <bug_when>2013-11-18 19:17:59 -0800</bug_when>
    <thetext>Created attachment 217265
rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952198</commentid>
    <comment_count>7</comment_count>
      <attachid>217265</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-11-19 13:02:59 -0800</bug_when>
    <thetext>Comment on attachment 217265
rebase

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

&gt; Source/WebKit2/Shared/APIArray.h:82
&gt; +        const T* operator*()

const function?

&gt; Source/WebKit2/Shared/APIArray.h:89
&gt; +        inline bool operator==(const_iterator&lt;T&gt; &amp;other) { return it == other.it; }
&gt; +        inline bool operator!=(const_iterator&lt;T&gt; &amp;other) { return it != other.it; }

Should be const

&gt; Source/WebKit2/Shared/APIArray.h:97
&gt; +        const_iterator&lt;T&gt; begin()

const?

&gt; Source/WebKit2/Shared/APIArray.h:102
&gt; +        const_iterator&lt;T&gt; end()

const?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952223</commentid>
    <comment_count>8</comment_count>
      <attachid>217329</attachid>
    <who name="Martin Hock">mhock</who>
    <bug_when>2013-11-19 13:52:41 -0800</bug_when>
    <thetext>Created attachment 217329
constification

Thanks, Simon!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952731</commentid>
    <comment_count>9</comment_count>
      <attachid>217329</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-11-20 12:42:43 -0800</bug_when>
    <thetext>Comment on attachment 217329
constification

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

Can we write a TestWebKitAPI test for this? The tests are in &lt;http://trac.webkit.org/browser/trunk/Tools/TestWebKitAPI/Tests/&gt;. Specifically, the WebKit2 tests are in &lt;http://trac.webkit.org/browser/trunk/Tools/TestWebKitAPI/Tests/WebKit2&gt;. You may find it beneficial to look at an existing test as an example. You can run the tests by executing the script Tools/Scripts/run-test-webkit-api.

&gt; Source/WebKit2/Shared/APIArray.h:62
&gt; +        Vector&lt;RefPtr&lt;Object&gt;&gt;::const_iterator it;

Private instance variables should be prefixed with &quot;m_&quot; per (3) of section Names of the WebKit Code Style Guidelines, &lt;http://www.webkit.org/coding/coding-style.html#names-data-members&gt;.

Although it isn&apos;t formerly written in our code style guidelines and members of a class are private by default, I suggest explicitly adding a private label to demarcate that these instance variables are private.

&gt; Source/WebKit2/Shared/APIArray.h:63
&gt; +        Vector&lt;RefPtr&lt;Object&gt;&gt;::const_iterator end;

Private instance variables should be prefixed with &quot;m_&quot; per (3) of section Names of the WebKit Code Style Guidelines, &lt;http://www.webkit.org/coding/coding-style.html#names-data-members&gt;.

&gt; Source/WebKit2/Shared/APIArray.h:73
&gt; +        void operator++()

This is OK as-is when this iterator is used in a C++11 range-based for-loop. For your consideration, I suggest having this function return the iterator to conform to the expected behavior of the prefix operator.

&gt; Source/WebKit2/Shared/APIArray.h:88
&gt; +        inline bool operator==(const_iterator&lt;T&gt; &amp;other) const { return it == other.it; }

Nit: &amp; should be on the left per (2) of section Pointer and References of the WebKit Code Style Guidelines, &lt;http://www.webkit.org/coding/coding-style.html#pointers-cpp&gt;.

&gt; Source/WebKit2/Shared/APIArray.h:89
&gt; +        inline bool operator!=(const_iterator&lt;T&gt; &amp;other) const { return it != other.it; }

Ditto.

&gt; Source/WebKit2/Shared/APIArray.h:94
&gt; +    const Vector&lt;RefPtr&lt;Object&gt;&gt;&amp; m_elements;

Nit: This line should be indented. (*)

Although it isn&apos;t formerly written in our code style guidelines and members of a class are private by default, I suggest explicitly adding a private label to demarcate that these instance variables are private.

(*) We don&apos;t seem to explicitly document this in our code style guidelines. Although, it&apos;s implied in various examples and is consistent with the style of existing code in our repository. We should look to make this explicit in the WebKit Code Style Guidelines as well as standardize whether to include or omit the private label for class members.

&gt; Source/WebKit2/Shared/APIArray.h:96
&gt; +        iterator_factory(Vector&lt;RefPtr&lt;Object&gt;&gt; &amp;elements) : m_elements(elements) { }

Nit: &amp; should be on the left per (2) of section Pointer and References of the WebKit Code Style Guidelines, &lt;http://www.webkit.org/coding/coding-style.html#pointers-cpp&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952740</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-20 13:04:16 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 217329 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=217329&amp;action=review
&gt; 
&gt; Can we write a TestWebKitAPI test for this? The tests are in &lt;http://trac.webkit.org/browser/trunk/Tools/TestWebKitAPI/Tests/&gt;. Specifically, the WebKit2 tests are in &lt;http://trac.webkit.org/browser/trunk/Tools/TestWebKitAPI/Tests/WebKit2&gt;. You may find it beneficial to look at an existing test as an example. You can run the tests by executing the script Tools/Scripts/run-test-webkit-api.

I disagree that a TestWebKitAPI test is necessary here, especially as this isn&apos;t WebKit API - It&apos;s internal to WebKit (even though it&apos;s related to an API implementor, there&apos;s no exposed API).

Also, knowing what larger task of Martin&apos;s this is part of, I&apos;m confident it will be sufficiently tested by other code when the task is complete.

I don&apos;t think r-&apos;ing based on this request is reasonable.

The style nits should definitely all be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952741</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-20 13:05:07 -0800</bug_when>
    <thetext>As for the C++ iterator mechanics involved here, I think many folks on IRC were urging Martin to get Anders to take a look at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952742</commentid>
    <comment_count>12</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-11-20 13:08:32 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 217329 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=217329&amp;action=review
&gt; &gt; 
&gt; &gt; Can we write a TestWebKitAPI test for this? The tests are in &lt;http://trac.webkit.org/browser/trunk/Tools/TestWebKitAPI/Tests/&gt;. Specifically, the WebKit2 tests are in &lt;http://trac.webkit.org/browser/trunk/Tools/TestWebKitAPI/Tests/WebKit2&gt;. You may find it beneficial to look at an existing test as an example. You can run the tests by executing the script Tools/Scripts/run-test-webkit-api.
&gt; 
&gt; I disagree that a TestWebKitAPI test is necessary here, especially as this isn&apos;t WebKit API - It&apos;s internal to WebKit (even though it&apos;s related to an API implementor, there&apos;s no exposed API).

We have lots of tests for things that aren’t API in TestWebKitAPI. I think this is one of the features that it’d be great to have an API test for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952752</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-20 13:22:57 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (From update of attachment 217329 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=217329&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; Can we write a TestWebKitAPI test for this? The tests are in &lt;http://trac.webkit.org/browser/trunk/Tools/TestWebKitAPI/Tests/&gt;. Specifically, the WebKit2 tests are in &lt;http://trac.webkit.org/browser/trunk/Tools/TestWebKitAPI/Tests/WebKit2&gt;. You may find it beneficial to look at an existing test as an example. You can run the tests by executing the script Tools/Scripts/run-test-webkit-api.
&gt; &gt; 
&gt; &gt; I disagree that a TestWebKitAPI test is necessary here, especially as this isn&apos;t WebKit API - It&apos;s internal to WebKit (even though it&apos;s related to an API implementor, there&apos;s no exposed API).
&gt; 
&gt; We have lots of tests for things that aren’t API in TestWebKitAPI. I think this is one of the features that it’d be great to have an API test for.

This is something that needs a unit test, not an API test.  Do we unit test the rest of our collection classes?

AFAIK, we do not.  We rely on the fact that they are used in code in the rest of the project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952753</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-20 13:24:14 -0800</bug_when>
    <thetext>How would this *explicitly* be tested in TestWebKitAPI without exposing API for it?

And, being familiar with the larger task Martin is working on, do you not think that the API tests he&apos;ll be adding for the actual API he&apos;s working on won&apos;t also cover this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952756</commentid>
    <comment_count>15</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-11-20 13:26:25 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; 
&gt; This is something that needs a unit test, not an API test.  Do we unit test the rest of our collection classes?

Yes.

&gt; 
&gt; AFAIK, we do not.  We rely on the fact that they are used in code in the rest of the project.

This is incorrect. TestWebKitAPI has:

./Tests/WTF
./Tests/WTF/AtomicString.cpp
./Tests/WTF/cf
./Tests/WTF/cf/RetainPtr.cpp
./Tests/WTF/cf/RetainPtrHashing.cpp
./Tests/WTF/CheckedArithmeticOperations.cpp
./Tests/WTF/CString.cpp
./Tests/WTF/Deque.cpp
./Tests/WTF/Functional.cpp
./Tests/WTF/HashMap.cpp
./Tests/WTF/HashSet.cpp
./Tests/WTF/IntegerToStringConversion.cpp
./Tests/WTF/ListHashSet.cpp
./Tests/WTF/MathExtras.cpp
./Tests/WTF/MD5.cpp
./Tests/WTF/MediaTime.cpp
./Tests/WTF/MetaAllocator.cpp
./Tests/WTF/MoveOnly.h
./Tests/WTF/ns
./Tests/WTF/ns/RetainPtr.mm
./Tests/WTF/RedBlackTree.cpp
./Tests/WTF/Ref.cpp
./Tests/WTF/RefLogger.h
./Tests/WTF/RefPtr.cpp
./Tests/WTF/SaturatedArithmeticOperations.cpp
./Tests/WTF/SHA1.cpp
./Tests/WTF/StringBuilder.cpp
./Tests/WTF/StringHasher.cpp
./Tests/WTF/StringImpl.cpp
./Tests/WTF/StringOperators.cpp
./Tests/WTF/TemporaryChange.cpp
./Tests/WTF/Vector.cpp
./Tests/WTF/WTFString.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952761</commentid>
    <comment_count>16</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-20 13:31:42 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #13)
&gt; &gt; 
&gt; &gt; This is something that needs a unit test, not an API test.  Do we unit test the rest of our collection classes?
&gt; 
&gt; Yes.

I was definitely wrong.
 
&gt; &gt; 
&gt; &gt; AFAIK, we do not.  We rely on the fact that they are used in code in the rest of the project.
&gt; 
&gt; This is incorrect. TestWebKitAPI has:
&gt; 
&gt; ./Tests/WTF
&gt; ./Tests/WTF/AtomicString.cpp
&gt; ./Tests/WTF/cf
&gt; ./Tests/WTF/cf/RetainPtr.cpp
&gt; ./Tests/WTF/cf/RetainPtrHashing.cpp
&gt; ./Tests/WTF/CheckedArithmeticOperations.cpp
&gt; ./Tests/WTF/CString.cpp
&gt; ./Tests/WTF/Deque.cpp
&gt; ./Tests/WTF/Functional.cpp
&gt; ./Tests/WTF/HashMap.cpp
&gt; ./Tests/WTF/HashSet.cpp
&gt; ./Tests/WTF/IntegerToStringConversion.cpp
&gt; ./Tests/WTF/ListHashSet.cpp
&gt; ./Tests/WTF/MathExtras.cpp
&gt; ./Tests/WTF/MD5.cpp
&gt; ./Tests/WTF/MediaTime.cpp
&gt; ./Tests/WTF/MetaAllocator.cpp
&gt; ./Tests/WTF/MoveOnly.h
&gt; ./Tests/WTF/ns
&gt; ./Tests/WTF/ns/RetainPtr.mm
&gt; ./Tests/WTF/RedBlackTree.cpp
&gt; ./Tests/WTF/Ref.cpp
&gt; ./Tests/WTF/RefLogger.h
&gt; ./Tests/WTF/RefPtr.cpp
&gt; ./Tests/WTF/SaturatedArithmeticOperations.cpp
&gt; ./Tests/WTF/SHA1.cpp
&gt; ./Tests/WTF/StringBuilder.cpp
&gt; ./Tests/WTF/StringHasher.cpp
&gt; ./Tests/WTF/StringImpl.cpp
&gt; ./Tests/WTF/StringOperators.cpp
&gt; ./Tests/WTF/TemporaryChange.cpp
&gt; ./Tests/WTF/Vector.cpp
&gt; ./Tests/WTF/WTFString.cpp

Key distinction - Those all seem to be tests of WTF API.

To reiterate, what this patch add&apos;s is not in and of itself API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952763</commentid>
    <comment_count>17</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-20 13:34:37 -0800</bug_when>
    <thetext>Digging further, I see that we directly test non-API WebCore internals directly.

Had no idea we did this.

Nevermind, carry on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953278</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-21 13:52:25 -0800</bug_when>
    <thetext>Testing WebKit2 internals would be new territory though - WebCore internals setup is pretty complicated, and doesn&apos;t allow for WebKit layer testing.

Does anyone have an idea for how to add unit testing without a major effort? Otherwise, maybe that shouldn&apos;t block landing, provided that this code will be well tested functionally soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953416</commentid>
    <comment_count>19</comment_count>
      <attachid>217645</attachid>
    <who name="Martin Hock">mhock</who>
    <bug_when>2013-11-21 19:26:31 -0800</bug_when>
    <thetext>Created attachment 217645
implement using FilterIterator

After discussing with Anders, I wrote this in terms of a FilterIterator variant.  We also decided that it would be difficult to add a unit test for WebKit2 internals to TestWebKitAPI, and the code is indirectly tested through PasteboardNotifications.  I did create a unit test which I&apos;ll upload as another attachment, which I could get to compile through some bad and incorrect C preprocessor trickery, but it would not link.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953417</commentid>
    <comment_count>20</comment_count>
      <attachid>217646</attachid>
    <who name="Martin Hock">mhock</who>
    <bug_when>2013-11-21 19:27:50 -0800</bug_when>
    <thetext>Created attachment 217646
testcase (for exposition only, do not use!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953444</commentid>
    <comment_count>21</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-21 22:12:39 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Created an attachment (id=217645) [details]
&gt; 
&gt; ...We also decided that it would be difficult to add a unit test for WebKit2 internals to TestWebKitAPI...

This is what I thought!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953654</commentid>
    <comment_count>22</comment_count>
      <attachid>217645</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-11-22 12:51:43 -0800</bug_when>
    <thetext>Comment on attachment 217645
implement using FilterIterator

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

&gt; Source/WebKit2/Shared/APIArray.h:47
&gt; +    inline static bool isType(const RefPtr&lt;Object&gt; &amp;object) { return object-&gt;type() == T::APIType; }

I think this can be private. We also put static before inline.

&gt; Source/WebKit2/Shared/APIArray.h:69
&gt; +    typedef Vector&lt;RefPtr&lt;Object&gt;&gt;::iterator iterator;
&gt; +    typedef Vector&lt;RefPtr&lt;Object&gt;&gt;::const_iterator const_iterator;
&gt; +    iterator begin() { return m_elements.begin(); }
&gt; +    iterator end() { return m_elements.end(); }
&gt; +    const_iterator begin() const { return m_elements.begin(); }
&gt; +    const_iterator end() const { return m_elements.end(); }

I don’t think these are all needed, can just use m_elements.begin() and m_elements.end().

&gt; Source/WebKit2/Shared/APIArray.h:73
&gt; +    {

it() is not a good member function name. How about calling it elementsOfType? 

(It should also not return a FilterIterator but an object that has begin and end members - see my comment in FilterIterator.h

&gt; Source/WebKit2/Shared/FilterIterator.h:36
&gt; +template&lt;typename Predicate, typename Iterator, typename T&gt;

There shouldn’t be a need for a third type parameter here. See my comment in iterator*.

&gt; Source/WebKit2/Shared/FilterIterator.h:40
&gt; +        : m_pred(pred)

You should std::move here.

&gt; Source/WebKit2/Shared/FilterIterator.h:58
&gt; +    const T&amp; operator*() const

Instead of returning a const T&amp; here, you should return a const std::iterator_traits&lt;typename Iterator&gt;::reference.

&gt; Source/WebKit2/Shared/FilterIterator.h:62
&gt; +        return reinterpret_cast&lt;const T&amp;&gt;(*m_iter);

As you suspected, this part is wrong - operator* should not do any reinterpret casts.

&gt; Source/WebKit2/Shared/FilterIterator.h:69
&gt; +    FilterIterator&amp; begin() { return *this; }
&gt; +    FilterIterator end() { return FilterIterator(m_pred, m_end, m_end); }

I don’t think the iterator itself should have these. Instead, there should be an object that you can create from a pair of iterators. That object should have begin  and end members.

&gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:157
&gt; +        for (auto type : typesArray-&gt;it&lt;WebString&gt;())

This should be a const auto&amp; to avoid reefing and dereffing over and over.

&gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:160
&gt; +        for (auto item : dataArray-&gt;it&lt;WebData&gt;()) {

This should be a const auto&amp; to avoid ref churn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954612</commentid>
    <comment_count>23</comment_count>
      <attachid>217968</attachid>
    <who name="Martin Hock">mhock</who>
    <bug_when>2013-11-27 15:00:42 -0800</bug_when>
    <thetext>Created attachment 217968
refactor per Anders&apos; review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954613</commentid>
    <comment_count>24</comment_count>
      <attachid>217645</attachid>
    <who name="Martin Hock">mhock</who>
    <bug_when>2013-11-27 15:04:55 -0800</bug_when>
    <thetext>Comment on attachment 217645
implement using FilterIterator

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

&gt;&gt; Source/WebKit2/Shared/FilterIterator.h:40
&gt;&gt; +        : m_pred(pred)
&gt; 
&gt; You should std::move here.

I didn&apos;t do this as I wasn&apos;t sure the benefit of std::move applied to a function pointer.  How is it more efficient than simply copying the address?

For future reference, could you point me to some information about good uses of std::move?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954639</commentid>
    <comment_count>25</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-27 19:14:51 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 217645 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=217645&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/Shared/FilterIterator.h:40
&gt; &gt;&gt; +        : m_pred(pred)
&gt; &gt; 
&gt; &gt; You should std::move here.
&gt; 
&gt; I didn&apos;t do this as I wasn&apos;t sure the benefit of std::move applied to a function pointer.  How is it more efficient than simply copying the address?

Because of the templatization, Predicate is not always just a function pointer.  It could be any class that has a function call operator.  In the case of a more complex class, std::move&apos;ing would be beneficial.

Since it&apos;s not a *detriment* to the function pointer case, may as well do it!

&gt; For future reference, could you point me to some information about good uses of std::move?

Anders recently shared this with me - It should be required reading for all of us C++ 11&apos;ers!  (Warning: Covers way more than just std::move)
http://thbecker.net/articles/rvalue_references/section_01.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955418</commentid>
    <comment_count>26</comment_count>
      <attachid>218179</attachid>
    <who name="Martin Hock">mhock</who>
    <bug_when>2013-12-02 09:30:29 -0800</bug_when>
    <thetext>Created attachment 218179
use std::move for pass-by-value arguments

Thanks for the reference, Brady.  It seems like as a general rule of thumb, one should always std::move constructor arguments passed by value into an initializer list (assuming said arguments are not used elsewhere in the constructor).  This avoids an extra copy (does the compiler usually optimize away this kind of copy?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955438</commentid>
    <comment_count>27</comment_count>
      <attachid>218179</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-12-02 10:36:52 -0800</bug_when>
    <thetext>Comment on attachment 218179
use std::move for pass-by-value arguments

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

&gt; Source/WebKit2/Shared/FilterIterator.h:75
&gt; +    class Iterable {

I think you can call this IteratorPair instead. Also, why not make it a class template allowing an arbitrary iterator type.

&gt; Source/WebKit2/Shared/FilterIterator.h:77
&gt; +    private:
&gt; +        FilterIterator m_iter, m_end;

Private should go after public.

&gt; Source/WebKit2/Shared/FilterIterator.h:82
&gt; +        { }

braces should go on separate lines. Missing newline after the constructor.

&gt; Source/WebKit2/Shared/FilterIterator.h:84
&gt; +        FilterIterator&amp; begin() { return m_iter; }
&gt; +        FilterIterator&amp; end() { return m_end; }

I don’t think this should return references.

&gt; Source/WebKit2/Shared/FilterIterator.h:86
&gt; +

Extra newline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955488</commentid>
    <comment_count>28</comment_count>
      <attachid>218200</attachid>
    <who name="Martin Hock">mhock</who>
    <bug_when>2013-12-02 11:37:48 -0800</bug_when>
    <thetext>Created attachment 218200
split out IteratorPair</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955680</commentid>
    <comment_count>29</comment_count>
      <attachid>218200</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-02 16:39:41 -0800</bug_when>
    <thetext>Comment on attachment 218200
split out IteratorPair

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

One more pass!

&gt; Source/WebKit2/Shared/APIArray.h:41
&gt; +    static inline const T *getObject(const RefPtr&lt;Object&gt;&amp; object) { return static_cast&lt;const T *&gt;(object.get()); }

*s are on the wrong side.

&gt; Source/WebKit2/Shared/APIArray.h:44
&gt; +    static inline bool isType(const RefPtr&lt;Object&gt; &amp;object) { return object-&gt;type() == T::APIType; }

&amp; on the wrong side.

&gt; Source/WebKit2/Shared/FilterIterator.h:43
&gt; +private:
&gt; +    const Predicate m_pred;
&gt; +    const Cast m_cast;
&gt; +    Iterator m_iter;
&gt; +    Iterator m_end;
&gt; +

This should go at the bottom, under the public part.

&gt; Source/WebKit2/Shared/IteratorPair.h:36
&gt; +    Iterator end() { return m_end; }
&gt; +private:

Please put a newline between these two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955748</commentid>
    <comment_count>30</comment_count>
      <attachid>218257</attachid>
    <who name="Martin Hock">mhock</who>
    <bug_when>2013-12-02 19:43:08 -0800</bug_when>
    <thetext>Created attachment 218257
address Sam&apos;s comments

Turns out there was a way to avoid using auto return type via std::declval (this was the reason for putting the private members first).  Thanks to Anders for the hint.  I tried using declval before, and previously understand how to apply it in this case, but the expression I used for the auto return type could be adapted into an expression involving declvals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955768</commentid>
    <comment_count>31</comment_count>
      <attachid>218257</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-02 21:50:44 -0800</bug_when>
    <thetext>Comment on attachment 218257
address Sam&apos;s comments

Clearing flags on attachment: 218257

Committed r159992: &lt;http://trac.webkit.org/changeset/159992&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955769</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-02 21:50:48 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217221</attachid>
            <date>2013-11-18 12:31:52 -0800</date>
            <delta_ts>2013-11-18 12:37:36 -0800</delta_ts>
            <desc>patch</desc>
            <filename>iterator.01.diff</filename>
            <type>text/plain</type>
            <size>3503</size>
            <attacher name="Martin Hock">mhock</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJheS5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL0FQSUFycmF5LmgKaW5kZXggNDBlMDkxNi4uMTc2YmE5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSUFycmF5LmgKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0FQSUFycmF5LmgKQEAgLTU3LDYgKzU3LDY1IEBAIHB1YmxpYzoKICAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPE9iamVjdD4+JiBlbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVu
dHM7IH0KICAgICBWZWN0b3I8UmVmUHRyPE9iamVjdD4+JiBlbGVtZW50cygpIHsgcmV0dXJuIG1f
ZWxlbWVudHM7IH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgaXRlcmF0
b3IKKyAgICB7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj46Oml0ZXJhdG9yIGl0Owor
ICAgICAgICBWZWN0b3I8UmVmUHRyPE9iamVjdD4+OjppdGVyYXRvciBlbmQ7CisgICAgcHVibGlj
OgorICAgICAgICBpdGVyYXRvcjxUPihWZWN0b3I8UmVmUHRyPE9iamVjdD4+OjppdGVyYXRvciBp
dCwgVmVjdG9yPFJlZlB0cjxPYmplY3Q+Pjo6aXRlcmF0b3IgZW5kKQorICAgICAgICA6IGl0KGl0
KQorICAgICAgICAsIGVuZChlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpdCAh
PSBlbmQgJiYgKCppdCktPnR5cGUoKSAhPSBUOjpBUElUeXBlKQorICAgICAgICAgICAgICAgICsr
aXQ7CisgICAgICAgIH0KKyAgICAgICAgaXRlcmF0b3I8VD4mIG9wZXJhdG9yKysoKQorICAgICAg
ICB7CisgICAgICAgICAgICB3aGlsZSAoaXQgIT0gZW5kKSB7CisgICAgICAgICAgICAgICAgKytp
dDsKKyAgICAgICAgICAgICAgICBpZiAoKCppdCktPnR5cGUoKSA9PSBUOjpBUElUeXBlKQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIEFMV0FZU19JTkxJTkUgVCogb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihpdC0+Z2V0KCkpOyB9CisKKyAgICAg
ICAgY29uc3QgVCYgb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGl0
ICE9IGVuZCk7CisgICAgICAgICAgICBBU1NFUlQoKCppdCktPnR5cGUoKSA9PSBUOjpBUElUeXBl
KTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUJj4oKihpdC0+Z2V0KCkpKTsKKyAg
ICAgICAgfQorICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yPFQ+
ICZvdGhlcikgeyByZXR1cm4gaXQgPT0gb3RoZXIuaXQ7IH0KKyAgICAgICAgaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBpdGVyYXRvcjxUPiAmb3RoZXIpIHsgcmV0dXJuIGl0ICE9IG90aGVy
Lml0OyB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgaXRl
cmF0b3JfZmFjdG9yeQorICAgIHsKKyAgICBWZWN0b3I8UmVmUHRyPE9iamVjdD4+JiBtX2VsZW1l
bnRzOworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3JfZmFjdG9yeShWZWN0b3I8UmVmUHRy
PE9iamVjdD4+ICZlbGVtZW50cykgOiBtX2VsZW1lbnRzKGVsZW1lbnRzKSB7fQorICAgICAgICBp
dGVyYXRvcjxUPiBiZWdpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRv
cjxUPihtX2VsZW1lbnRzLmJlZ2luKCksIG1fZWxlbWVudHMuZW5kKCkpOworICAgICAgICB9CisK
KyAgICAgICAgaXRlcmF0b3I8VD4gZW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBl
bmQgPSBtX2VsZW1lbnRzLmVuZCgpOworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yPFQ+KGVu
ZCwgZW5kKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
dGVyYXRvcl9mYWN0b3J5PFQ+IGl0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBpdGVyYXRvcl9m
YWN0b3J5PFQ+KG1fZWxlbWVudHMpOworICAgIH0KKworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0
IEFycmF5KFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj4gZWxlbWVudHMpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFn
ZUVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAKaW5kZXggZDZhNjc4OS4uZjUw
OTFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50
LmNwcApAQCAtMTU0LDIwICsxNTQsMTIgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JD
bGllbnQ6OmdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV2ViUGFnZSogcGFnZSwgUmEKIAogICAg
ICAgICBBU1NFUlQodHlwZXNBcnJheS0+c2l6ZSgpID09IGRhdGFBcnJheS0+c2l6ZSgpKTsKIAot
ICAgICAgICBzaXplX3Qgc2l6ZSA9IHR5cGVzQXJyYXktPnNpemUoKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFdlYlN0cmluZyogdHlw
ZSA9IHR5cGVzQXJyYXktPmF0PFdlYlN0cmluZz4oaSk7Ci0gICAgICAgICAgICBpZiAodHlwZSkK
LSAgICAgICAgICAgICAgICBwYXN0ZWJvYXJkVHlwZXMuYXBwZW5kKHR5cGUtPnN0cmluZygpKTsK
LSAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8gdHlwZSA6IHR5cGVzQXJyYXktPml0PFdlYlN0
cmluZz4oKSkKKyAgICAgICAgICAgIHBhc3RlYm9hcmRUeXBlcy5hcHBlbmQodHlwZS5zdHJpbmco
KSk7CiAKLSAgICAgICAgc2l6ZSA9IGRhdGFBcnJheS0+c2l6ZSgpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgV2ViRGF0YSogaXRlbSA9
IGRhdGFBcnJheS0+YXQ8V2ViRGF0YT4oaSk7Ci0gICAgICAgICAgICBpZiAoaXRlbSkgewotICAg
ICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKGl0ZW0tPmJ5dGVzKCksIGl0ZW0tPnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgcGFz
dGVib2FyZERhdGEuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgICAgICAgICB9CisgICAgICAgIGZvciAo
YXV0byBpdGVtIDogZGF0YUFycmF5LT5pdDxXZWJEYXRhPigpKSB7CisgICAgICAgICAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShpdGVtLmJ5dGVz
KCksIGl0ZW0uc2l6ZSgpKTsKKyAgICAgICAgICAgIHBhc3RlYm9hcmREYXRhLmFwcGVuZChidWZm
ZXIpOwogICAgICAgICB9CiAgICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217222</attachid>
            <date>2013-11-18 12:37:36 -0800</date>
            <delta_ts>2013-11-18 15:46:07 -0800</delta_ts>
            <desc>style + changelog</desc>
            <filename>iterator.02.diff</filename>
            <type>text/plain</type>
            <size>4171</size>
            <attacher name="Martin Hock">mhock</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjYTZlMWQ4Li40NzcxMGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTMtMTEtMTggIE1hcnRpbiBIb2NrICA8bWhvY2tAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhYmlsaXR5IHRvIGl0ZXJhdGUgb3ZlciBBUEk6OkFycmF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ1MzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9BUElBcnJheS5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9y
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xp
ZW50OjpnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKToKKwogMjAxMy0xMS0xNCAgRGF2aWQgRmFy
bGVyICA8ZGZhcmxlckBhcHBsZS5jb20+CiAKICAgICAgICAgW0FTQU5dIFdlYktpdDI6IFJlbW92
ZSBjYWxscyB0byBkZWFkIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQgY29kZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSUFycmF5LmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQVBJQXJyYXkuaAppbmRleCA0MGUwOTE2Li4yMWJmYTY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQVBJQXJyYXkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
QVBJQXJyYXkuaApAQCAtNTcsNiArNTcsNjMgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8T2JqZWN0Pj4mIGVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50czsgfQog
ICAgIFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj4mIGVsZW1lbnRzKCkgeyByZXR1cm4gbV9lbGVtZW50
czsgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBpdGVyYXRvciB7Cisg
ICAgICAgIFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj46Oml0ZXJhdG9yIGl0OworICAgICAgICBWZWN0
b3I8UmVmUHRyPE9iamVjdD4+OjppdGVyYXRvciBlbmQ7CisgICAgcHVibGljOgorICAgICAgICBp
dGVyYXRvcjxUPihWZWN0b3I8UmVmUHRyPE9iamVjdD4+OjppdGVyYXRvciBpdCwgVmVjdG9yPFJl
ZlB0cjxPYmplY3Q+Pjo6aXRlcmF0b3IgZW5kKQorICAgICAgICA6IGl0KGl0KQorICAgICAgICAs
IGVuZChlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpdCAhPSBlbmQgJiYgKCpp
dCktPnR5cGUoKSAhPSBUOjpBUElUeXBlKQorICAgICAgICAgICAgICAgICsraXQ7CisgICAgICAg
IH0KKyAgICAgICAgaXRlcmF0b3I8VD4mIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAg
ICAgICB3aGlsZSAoaXQgIT0gZW5kKSB7CisgICAgICAgICAgICAgICAgKytpdDsKKyAgICAgICAg
ICAgICAgICBpZiAoKCppdCktPnR5cGUoKSA9PSBUOjpBUElUeXBlKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgfQorCisgICAgICAgIEFMV0FZU19JTkxJTkUgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFQqPihpdC0+Z2V0KCkpOyB9CisKKyAgICAgICAgY29uc3QgVCYg
b3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGl0ICE9IGVuZCk7Cisg
ICAgICAgICAgICBBU1NFUlQoKCppdCktPnR5cGUoKSA9PSBUOjpBUElUeXBlKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUJj4oKihpdC0+Z2V0KCkpKTsKKyAgICAgICAgfQorICAg
ICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yPFQ+ICZvdGhlcikgeyBy
ZXR1cm4gaXQgPT0gb3RoZXIuaXQ7IH0KKyAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBpdGVyYXRvcjxUPiAmb3RoZXIpIHsgcmV0dXJuIGl0ICE9IG90aGVyLml0OyB9CisgICAg
fTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgaXRlcmF0b3JfZmFjdG9y
eSB7CisgICAgVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiYgbV9lbGVtZW50czsKKyAgICBwdWJsaWM6
CisgICAgICAgIGl0ZXJhdG9yX2ZhY3RvcnkoVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiAmZWxlbWVu
dHMpIDogbV9lbGVtZW50cyhlbGVtZW50cykgeyB9CisgICAgICAgIGl0ZXJhdG9yPFQ+IGJlZ2lu
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yPFQ+KG1fZWxlbWVudHMu
YmVnaW4oKSwgbV9lbGVtZW50cy5lbmQoKSk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRv
cjxUPiBlbmQoKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGVuZCA9IG1fZWxlbWVudHMu
ZW5kKCk7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3I8VD4oZW5kLCBlbmQpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGl0ZXJhdG9yX2ZhY3Rvcnk8
VD4gaXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yX2ZhY3Rvcnk8VD4obV9lbGVt
ZW50cyk7CisgICAgfQorCisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQXJyYXkoVmVjdG9yPFJl
ZlB0cjxPYmplY3Q+PiBlbGVtZW50cyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50LmNwcAppbmRleCBkNmE2Nzg5Li5mNTA5MWE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwCkBAIC0xNTQsMjAg
KzE1NCwxMiBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6Z2V0UGFzdGVi
b2FyZERhdGFGb3JSYW5nZShXZWJQYWdlKiBwYWdlLCBSYQogCiAgICAgICAgIEFTU0VSVCh0eXBl
c0FycmF5LT5zaXplKCkgPT0gZGF0YUFycmF5LT5zaXplKCkpOwogCi0gICAgICAgIHNpemVfdCBz
aXplID0gdHlwZXNBcnJheS0+c2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICAgICAgV2ViU3RyaW5nKiB0eXBlID0gdHlwZXNBcnJheS0+
YXQ8V2ViU3RyaW5nPihpKTsKLSAgICAgICAgICAgIGlmICh0eXBlKQotICAgICAgICAgICAgICAg
IHBhc3RlYm9hcmRUeXBlcy5hcHBlbmQodHlwZS0+c3RyaW5nKCkpOwotICAgICAgICB9CisgICAg
ICAgIGZvciAoYXV0byB0eXBlIDogdHlwZXNBcnJheS0+aXQ8V2ViU3RyaW5nPigpKQorICAgICAg
ICAgICAgcGFzdGVib2FyZFR5cGVzLmFwcGVuZCh0eXBlLnN0cmluZygpKTsKIAotICAgICAgICBz
aXplID0gZGF0YUFycmF5LT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBXZWJEYXRhKiBpdGVtID0gZGF0YUFycmF5LT5hdDxX
ZWJEYXRhPihpKTsKLSAgICAgICAgICAgIGlmIChpdGVtKSB7Ci0gICAgICAgICAgICAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoaXRlbS0+Ynl0
ZXMoKSwgaXRlbS0+c2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBwYXN0ZWJvYXJkRGF0YS5hcHBl
bmQoYnVmZmVyKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvIGl0ZW0gOiBkYXRh
QXJyYXktPml0PFdlYkRhdGE+KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGl0ZW0uYnl0ZXMoKSwgaXRlbS5zaXplKCkp
OworICAgICAgICAgICAgcGFzdGVib2FyZERhdGEuYXBwZW5kKGJ1ZmZlcik7CiAgICAgICAgIH0K
ICAgICB9CiB9Cg==
</data>
<flag name="commit-queue"
          id="240322"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217244</attachid>
            <date>2013-11-18 15:46:07 -0800</date>
            <delta_ts>2013-11-18 19:17:59 -0800</delta_ts>
            <desc>fixes</desc>
            <filename>iterator.03.diff</filename>
            <type>text/plain</type>
            <size>5007</size>
            <attacher name="Martin Hock">mhock</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxMTk0NDY0Li42NDk3YWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTMtMTEtMTggIE1hcnRpbiBIb2NrICA8bWhvY2tAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhYmlsaXR5IHRvIGl0ZXJhdGUgb3ZlciBBUEk6OkFycmF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ1MzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9BUElBcnJheS5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAg
ICAgICAoV2ViS2l0Ojp0b1N0cmluZ1ZlY3Rvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRh
Rm9yUmFuZ2UpOgorCiAyMDEzLTExLTE4ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgYSBxdWlyayB0byBub3QgcmVzcGVjdCBjZW50ZXIgdGV4dC1hbGlnbiB3
aGVuIHBvc2l0aW9uaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJQXJy
YXkuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJheS5oCmluZGV4IDQwZTA5MTYuLjg5
NGVlZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJheS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJheS5oCkBAIC01Nyw2ICs1Nyw2MSBAQCBwdWJs
aWM6CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiYgZWxlbWVudHMoKSBjb25zdCB7
IHJldHVybiBtX2VsZW1lbnRzOyB9CiAgICAgVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiYgZWxlbWVu
dHMoKSB7IHJldHVybiBtX2VsZW1lbnRzOyB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIGNsYXNzIGNvbnN0X2l0ZXJhdG9yIHsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxPYmplY3Q+
Pjo6Y29uc3RfaXRlcmF0b3IgaXQ7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj46OmNv
bnN0X2l0ZXJhdG9yIGVuZDsKKyAgICBwdWJsaWM6CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yPFQ+
KFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj46OmNvbnN0X2l0ZXJhdG9yIGl0LCBWZWN0b3I8UmVmUHRy
PE9iamVjdD4+Ojpjb25zdF9pdGVyYXRvciBlbmQpCisgICAgICAgICAgICA6IGl0KGl0KQorICAg
ICAgICAgICAgLCBlbmQoZW5kKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaXQgIT0g
ZW5kICYmICgqaXQpLT50eXBlKCkgIT0gVDo6QVBJVHlwZSkKKyAgICAgICAgICAgICAgICArK2l0
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgd2hpbGUgKGl0ICE9IGVuZCkgeworICAgICAgICAgICAgICAgICsraXQ7CisgICAg
ICAgICAgICAgICAgaWYgKGl0ID09IGVuZCB8fCAoKml0KS0+dHlwZSgpID09IFQ6OkFQSVR5cGUp
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgY29uc3QgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKGl0ICE9IGVuZCk7CisgICAgICAgICAgICBBU1NFUlQoKCppdCktPnR5cGUoKSA9PSBUOjpB
UElUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4oaXQtPmdldCgpKTsK
KyAgICAgICAgfQorICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0X2l0ZXJhdG9y
PFQ+ICZvdGhlcikgeyByZXR1cm4gaXQgPT0gb3RoZXIuaXQ7IH0KKyAgICAgICAgaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdF9pdGVyYXRvcjxUPiAmb3RoZXIpIHsgcmV0dXJuIGl0ICE9IG90
aGVyLml0OyB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3Mg
aXRlcmF0b3JfZmFjdG9yeSB7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiYgbV9l
bGVtZW50czsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yX2ZhY3RvcnkoVmVjdG9yPFJl
ZlB0cjxPYmplY3Q+PiAmZWxlbWVudHMpIDogbV9lbGVtZW50cyhlbGVtZW50cykgeyB9CisgICAg
ICAgIGNvbnN0X2l0ZXJhdG9yPFQ+IGJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGNvbnN0X2l0ZXJhdG9yPFQ+KG1fZWxlbWVudHMuYmVnaW4oKSwgbV9lbGVtZW50cy5lbmQo
KSk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdF9pdGVyYXRvcjxUPiBlbmQoKQorICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvIGVuZCA9IG1fZWxlbWVudHMuZW5kKCk7CisgICAgICAgICAg
ICByZXR1cm4gY29uc3RfaXRlcmF0b3I8VD4oZW5kLCBlbmQpOworICAgICAgICB9CisgICAgfTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGl0ZXJhdG9yX2ZhY3Rvcnk8VD4gaXQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yX2ZhY3Rvcnk8VD4obV9lbGVtZW50cyk7CisgICAg
fQorCisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQXJyYXkoVmVjdG9yPFJlZlB0cjxPYmplY3Q+
PiBlbGVtZW50cyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggZWU3MzkwNS4uNTJjYjU2
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTQ4NSwxMSArNDg1LDggQEAgc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IHRvU3RyaW5nVmVjdG9yKEFQSTo6QXJyYXkqIHBhdHRlcm5zKQogICAgICAg
ICByZXR1cm4gcGF0dGVybnNWZWN0b3I7CiAKICAgICBwYXR0ZXJuc1ZlY3Rvci5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgIFdlYlN0cmluZyogZW50cnkgPSBwYXR0ZXJucy0+YXQ8V2ViU3RyaW5nPihp
KTsKLSAgICAgICAgaWYgKGVudHJ5KQotICAgICAgICAgICAgcGF0dGVybnNWZWN0b3IudW5jaGVj
a2VkQXBwZW5kKGVudHJ5LT5zdHJpbmcoKSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBlbnRyeSA6
IHBhdHRlcm5zLT5pdDxXZWJTdHJpbmc+KCkpCisgICAgICAgIHBhdHRlcm5zVmVjdG9yLnVuY2hl
Y2tlZEFwcGVuZChlbnRyeS0+c3RyaW5nKCkpOwogICAgIHJldHVybiBwYXR0ZXJuc1ZlY3RvcjsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3Bw
CmluZGV4IGQ2YTY3ODkuLjIxMDM4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlUGFnZUVkaXRvckNsaWVudC5jcHAKQEAgLTE1NCwyMCArMTU0LDEyIEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYlBh
Z2UqIHBhZ2UsIFJhCiAKICAgICAgICAgQVNTRVJUKHR5cGVzQXJyYXktPnNpemUoKSA9PSBkYXRh
QXJyYXktPnNpemUoKSk7CiAKLSAgICAgICAgc2l6ZV90IHNpemUgPSB0eXBlc0FycmF5LT5zaXpl
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICBXZWJTdHJpbmcqIHR5cGUgPSB0eXBlc0FycmF5LT5hdDxXZWJTdHJpbmc+KGkpOwotICAg
ICAgICAgICAgaWYgKHR5cGUpCi0gICAgICAgICAgICAgICAgcGFzdGVib2FyZFR5cGVzLmFwcGVu
ZCh0eXBlLT5zdHJpbmcoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvIHR5cGUgOiB0
eXBlc0FycmF5LT5pdDxXZWJTdHJpbmc+KCkpCisgICAgICAgICAgICBwYXN0ZWJvYXJkVHlwZXMu
YXBwZW5kKHR5cGUtPnN0cmluZygpKTsKIAotICAgICAgICBzaXplID0gZGF0YUFycmF5LT5zaXpl
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICBXZWJEYXRhKiBpdGVtID0gZGF0YUFycmF5LT5hdDxXZWJEYXRhPihpKTsKLSAgICAgICAg
ICAgIGlmIChpdGVtKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVm
ZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoaXRlbS0+Ynl0ZXMoKSwgaXRlbS0+c2l6ZSgpKTsK
LSAgICAgICAgICAgICAgICBwYXN0ZWJvYXJkRGF0YS5hcHBlbmQoYnVmZmVyKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgZm9yIChhdXRvIGl0ZW0gOiBkYXRhQXJyYXktPml0PFdlYkRhdGE+KCkp
IHsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGl0ZW0tPmJ5dGVzKCksIGl0ZW0tPnNpemUoKSk7CisgICAgICAgICAgICBwYXN0
ZWJvYXJkRGF0YS5hcHBlbmQoYnVmZmVyKTsKICAgICAgICAgfQogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217265</attachid>
            <date>2013-11-18 19:17:59 -0800</date>
            <delta_ts>2013-11-19 13:52:41 -0800</delta_ts>
            <desc>rebase</desc>
            <filename>iterator.04.diff</filename>
            <type>text/plain</type>
            <size>4974</size>
            <attacher name="Martin Hock">mhock</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4MjU3OWNjLi5hZDI2ODFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTMtMTEtMTggIE1hcnRpbiBIb2NrICA8bWhvY2tAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhYmlsaXR5IHRvIGl0ZXJhdGUgb3ZlciBBUEk6OkFycmF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ1MzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9BUElBcnJheS5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAg
ICAgICAoV2ViS2l0Ojp0b1N0cmluZ1ZlY3Rvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRh
Rm9yUmFuZ2UpOgorCiAyMDEzLTExLTE4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBs
ZS5jb20+CiAKICAgICAgICAgTGV0J3MgdHJ5IHRoaXMgYWdhaW4uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQVBJQXJyYXkuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElB
cnJheS5oCmluZGV4IDQwZTA5MTYuLjg5NGVlZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUElBcnJheS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJheS5o
CkBAIC01Nyw2ICs1Nyw2MSBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxPYmpl
Y3Q+PiYgZWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRzOyB9CiAgICAgVmVjdG9y
PFJlZlB0cjxPYmplY3Q+PiYgZWxlbWVudHMoKSB7IHJldHVybiBtX2VsZW1lbnRzOyB9CiAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNsYXNzIGNvbnN0X2l0ZXJhdG9yIHsKKyAgICAg
ICAgVmVjdG9yPFJlZlB0cjxPYmplY3Q+Pjo6Y29uc3RfaXRlcmF0b3IgaXQ7CisgICAgICAgIFZl
Y3RvcjxSZWZQdHI8T2JqZWN0Pj46OmNvbnN0X2l0ZXJhdG9yIGVuZDsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIGNvbnN0X2l0ZXJhdG9yPFQ+KFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj46OmNvbnN0X2l0
ZXJhdG9yIGl0LCBWZWN0b3I8UmVmUHRyPE9iamVjdD4+Ojpjb25zdF9pdGVyYXRvciBlbmQpCisg
ICAgICAgICAgICA6IGl0KGl0KQorICAgICAgICAgICAgLCBlbmQoZW5kKQorICAgICAgICB7Cisg
ICAgICAgICAgICB3aGlsZSAoaXQgIT0gZW5kICYmICgqaXQpLT50eXBlKCkgIT0gVDo6QVBJVHlw
ZSkKKyAgICAgICAgICAgICAgICArK2l0OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBvcGVy
YXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGl0ICE9IGVuZCkgeworICAg
ICAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICAgICAgaWYgKGl0ID09IGVuZCB8fCAoKml0
KS0+dHlwZSgpID09IFQ6OkFQSVR5cGUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVCogb3BlcmF0b3IqKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGl0ICE9IGVuZCk7CisgICAgICAgICAgICBBU1NF
UlQoKCppdCktPnR5cGUoKSA9PSBUOjpBUElUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUKj4oaXQtPmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0X2l0ZXJhdG9yPFQ+ICZvdGhlcikgeyByZXR1cm4gaXQgPT0gb3RoZXIu
aXQ7IH0KKyAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdF9pdGVyYXRvcjxUPiAm
b3RoZXIpIHsgcmV0dXJuIGl0ICE9IG90aGVyLml0OyB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgaXRlcmF0b3JfZmFjdG9yeSB7CisgICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxPYmplY3Q+PiYgbV9lbGVtZW50czsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0
ZXJhdG9yX2ZhY3RvcnkoVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiAmZWxlbWVudHMpIDogbV9lbGVt
ZW50cyhlbGVtZW50cykgeyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yPFQ+IGJlZ2luKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yPFQ+KG1fZWxlbWVudHMu
YmVnaW4oKSwgbV9lbGVtZW50cy5lbmQoKSk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdF9p
dGVyYXRvcjxUPiBlbmQoKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGVuZCA9IG1fZWxl
bWVudHMuZW5kKCk7CisgICAgICAgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3I8VD4oZW5kLCBl
bmQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGl0ZXJh
dG9yX2ZhY3Rvcnk8VD4gaXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yX2ZhY3Rv
cnk8VD4obV9lbGVtZW50cyk7CisgICAgfQorCisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQXJy
YXkoVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiBlbGVtZW50cyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5j
cHAKaW5kZXggZWU3MzkwNS4uNTJjYjU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTQ4
NSwxMSArNDg1LDggQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHRvU3RyaW5nVmVjdG9yKEFQSTo6
QXJyYXkqIHBhdHRlcm5zKQogICAgICAgICByZXR1cm4gcGF0dGVybnNWZWN0b3I7CiAKICAgICBw
YXR0ZXJuc1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFdlYlN0cmluZyogZW50cnkgPSBw
YXR0ZXJucy0+YXQ8V2ViU3RyaW5nPihpKTsKLSAgICAgICAgaWYgKGVudHJ5KQotICAgICAgICAg
ICAgcGF0dGVybnNWZWN0b3IudW5jaGVja2VkQXBwZW5kKGVudHJ5LT5zdHJpbmcoKSk7Ci0gICAg
fQorICAgIGZvciAoYXV0byBlbnRyeSA6IHBhdHRlcm5zLT5pdDxXZWJTdHJpbmc+KCkpCisgICAg
ICAgIHBhdHRlcm5zVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChlbnRyeS0+c3RyaW5nKCkpOwogICAg
IHJldHVybiBwYXR0ZXJuc1ZlY3RvcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwCmluZGV4IGQ2YTY3ODkuLjIxMDM4ZTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAKQEAgLTE1NCwy
MCArMTU0LDEyIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpnZXRQYXN0
ZWJvYXJkRGF0YUZvclJhbmdlKFdlYlBhZ2UqIHBhZ2UsIFJhCiAKICAgICAgICAgQVNTRVJUKHR5
cGVzQXJyYXktPnNpemUoKSA9PSBkYXRhQXJyYXktPnNpemUoKSk7CiAKLSAgICAgICAgc2l6ZV90
IHNpemUgPSB0eXBlc0FycmF5LT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBXZWJTdHJpbmcqIHR5cGUgPSB0eXBlc0FycmF5
LT5hdDxXZWJTdHJpbmc+KGkpOwotICAgICAgICAgICAgaWYgKHR5cGUpCi0gICAgICAgICAgICAg
ICAgcGFzdGVib2FyZFR5cGVzLmFwcGVuZCh0eXBlLT5zdHJpbmcoKSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgZm9yIChhdXRvIHR5cGUgOiB0eXBlc0FycmF5LT5pdDxXZWJTdHJpbmc+KCkpCisgICAg
ICAgICAgICBwYXN0ZWJvYXJkVHlwZXMuYXBwZW5kKHR5cGUtPnN0cmluZygpKTsKIAotICAgICAg
ICBzaXplID0gZGF0YUFycmF5LT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBXZWJEYXRhKiBpdGVtID0gZGF0YUFycmF5LT5h
dDxXZWJEYXRhPihpKTsKLSAgICAgICAgICAgIGlmIChpdGVtKSB7Ci0gICAgICAgICAgICAgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoaXRlbS0+
Ynl0ZXMoKSwgaXRlbS0+c2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBwYXN0ZWJvYXJkRGF0YS5h
cHBlbmQoYnVmZmVyKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvIGl0ZW0gOiBk
YXRhQXJyYXktPml0PFdlYkRhdGE+KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGl0ZW0tPmJ5dGVzKCksIGl0ZW0tPnNp
emUoKSk7CisgICAgICAgICAgICBwYXN0ZWJvYXJkRGF0YS5hcHBlbmQoYnVmZmVyKTsKICAgICAg
ICAgfQogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217329</attachid>
            <date>2013-11-19 13:52:41 -0800</date>
            <delta_ts>2013-11-21 19:26:31 -0800</delta_ts>
            <desc>constification</desc>
            <filename>iterator.05.diff</filename>
            <type>text/plain</type>
            <size>5018</size>
            <attacher name="Martin Hock">mhock</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmNDcyOGVlLi5hMGY1MWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTMtMTEtMTkgIE1hcnRpbiBIb2NrICA8bWhvY2tAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhYmlsaXR5IHRvIGl0ZXJhdGUgb3ZlciBBUEk6OkFycmF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ1MzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9BUElBcnJheS5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAg
ICAgICAoV2ViS2l0Ojp0b1N0cmluZ1ZlY3Rvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRh
Rm9yUmFuZ2UpOgorCiAyMDEzLTExLTE5ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBs
ZS5jb20+CiAKICAgICAgICAgTW92ZSBEYXRhUmVmZXJlbmNlIHRvIFBsYXRmb3JtL0lQQy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJheS5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0FQSUFycmF5LmgKaW5kZXggNDBlMDkxNi4uNDM1NWIxMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSUFycmF5LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0FQSUFycmF5LmgKQEAgLTU3LDYgKzU3LDYxIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPE9iamVjdD4+JiBlbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudHM7
IH0KICAgICBWZWN0b3I8UmVmUHRyPE9iamVjdD4+JiBlbGVtZW50cygpIHsgcmV0dXJuIG1fZWxl
bWVudHM7IH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgY29uc3RfaXRl
cmF0b3IgeworICAgICAgICBWZWN0b3I8UmVmUHRyPE9iamVjdD4+Ojpjb25zdF9pdGVyYXRvciBp
dDsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxPYmplY3Q+Pjo6Y29uc3RfaXRlcmF0b3IgZW5kOwor
ICAgIHB1YmxpYzoKKyAgICAgICAgY29uc3RfaXRlcmF0b3I8VD4oVmVjdG9yPFJlZlB0cjxPYmpl
Y3Q+Pjo6Y29uc3RfaXRlcmF0b3IgaXQsIFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj46OmNvbnN0X2l0
ZXJhdG9yIGVuZCkKKyAgICAgICAgICAgIDogaXQoaXQpCisgICAgICAgICAgICAsIGVuZChlbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpdCAhPSBlbmQgJiYgKCppdCktPnR5cGUo
KSAhPSBUOjpBUElUeXBlKQorICAgICAgICAgICAgICAgICsraXQ7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaXQg
IT0gZW5kKSB7CisgICAgICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgICAgICBpZiAoaXQg
PT0gZW5kIHx8ICgqaXQpLT50eXBlKCkgPT0gVDo6QVBJVHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBUKiBv
cGVyYXRvciooKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaXQgIT0gZW5k
KTsKKyAgICAgICAgICAgIEFTU0VSVCgoKml0KS0+dHlwZSgpID09IFQ6OkFQSVR5cGUpOworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihpdC0+Z2V0KCkpOworICAgICAgICB9Cisg
ICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3RfaXRlcmF0b3I8VD4gJm90aGVyKSBj
b25zdCB7IHJldHVybiBpdCA9PSBvdGhlci5pdDsgfQorICAgICAgICBpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0X2l0ZXJhdG9yPFQ+ICZvdGhlcikgY29uc3QgeyByZXR1cm4gaXQgIT0gb3Ro
ZXIuaXQ7IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBp
dGVyYXRvcl9mYWN0b3J5IHsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE9iamVjdD4+JiBtX2Vs
ZW1lbnRzOworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3JfZmFjdG9yeShWZWN0b3I8UmVm
UHRyPE9iamVjdD4+ICZlbGVtZW50cykgOiBtX2VsZW1lbnRzKGVsZW1lbnRzKSB7IH0KKyAgICAg
ICAgY29uc3RfaXRlcmF0b3I8VD4gYmVnaW4oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gY29uc3RfaXRlcmF0b3I8VD4obV9lbGVtZW50cy5iZWdpbigpLCBtX2VsZW1lbnRz
LmVuZCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0X2l0ZXJhdG9yPFQ+IGVuZCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gbV9lbGVtZW50cy5lbmQoKTsK
KyAgICAgICAgICAgIHJldHVybiBjb25zdF9pdGVyYXRvcjxUPihlbmQsIGVuZCk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaXRlcmF0b3JfZmFjdG9yeTxU
PiBpdCgpCisgICAgeworICAgICAgICByZXR1cm4gaXRlcmF0b3JfZmFjdG9yeTxUPihtX2VsZW1l
bnRzKTsKKyAgICB9CisKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBBcnJheShWZWN0b3I8UmVm
UHRyPE9iamVjdD4+IGVsZW1lbnRzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCBlZTcz
OTA1Li41MmNiNTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcApAQCAtNDg1LDExICs0ODUsOCBA
QCBzdGF0aWMgVmVjdG9yPFN0cmluZz4gdG9TdHJpbmdWZWN0b3IoQVBJOjpBcnJheSogcGF0dGVy
bnMpCiAgICAgICAgIHJldHVybiBwYXR0ZXJuc1ZlY3RvcjsKIAogICAgIHBhdHRlcm5zVmVjdG9y
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgV2ViU3RyaW5nKiBlbnRyeSA9IHBhdHRlcm5zLT5hdDxX
ZWJTdHJpbmc+KGkpOwotICAgICAgICBpZiAoZW50cnkpCi0gICAgICAgICAgICBwYXR0ZXJuc1Zl
Y3Rvci51bmNoZWNrZWRBcHBlbmQoZW50cnktPnN0cmluZygpKTsKLSAgICB9CisgICAgZm9yIChh
dXRvIGVudHJ5IDogcGF0dGVybnMtPml0PFdlYlN0cmluZz4oKSkKKyAgICAgICAgcGF0dGVybnNW
ZWN0b3IudW5jaGVja2VkQXBwZW5kKGVudHJ5LT5zdHJpbmcoKSk7CiAgICAgcmV0dXJuIHBhdHRl
cm5zVmVjdG9yOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudC5jcHAKaW5kZXggZDZhNjc4OS4uMjEwMzhlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JD
bGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcApAQCAtMTU0LDIwICsxNTQsMTIgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRhRm9y
UmFuZ2UoV2ViUGFnZSogcGFnZSwgUmEKIAogICAgICAgICBBU1NFUlQodHlwZXNBcnJheS0+c2l6
ZSgpID09IGRhdGFBcnJheS0+c2l6ZSgpKTsKIAotICAgICAgICBzaXplX3Qgc2l6ZSA9IHR5cGVz
QXJyYXktPnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgICAgIFdlYlN0cmluZyogdHlwZSA9IHR5cGVzQXJyYXktPmF0PFdlYlN0cmlu
Zz4oaSk7Ci0gICAgICAgICAgICBpZiAodHlwZSkKLSAgICAgICAgICAgICAgICBwYXN0ZWJvYXJk
VHlwZXMuYXBwZW5kKHR5cGUtPnN0cmluZygpKTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKGF1
dG8gdHlwZSA6IHR5cGVzQXJyYXktPml0PFdlYlN0cmluZz4oKSkKKyAgICAgICAgICAgIHBhc3Rl
Ym9hcmRUeXBlcy5hcHBlbmQodHlwZS0+c3RyaW5nKCkpOwogCi0gICAgICAgIHNpemUgPSBkYXRh
QXJyYXktPnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgICAgIFdlYkRhdGEqIGl0ZW0gPSBkYXRhQXJyYXktPmF0PFdlYkRhdGE+KGkp
OwotICAgICAgICAgICAgaWYgKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShpdGVtLT5ieXRlcygpLCBpdGVt
LT5zaXplKCkpOwotICAgICAgICAgICAgICAgIHBhc3RlYm9hcmREYXRhLmFwcGVuZChidWZmZXIp
OwotICAgICAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8gaXRlbSA6IGRhdGFBcnJheS0+aXQ8
V2ViRGF0YT4oKSkgeworICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoaXRlbS0+Ynl0ZXMoKSwgaXRlbS0+c2l6ZSgpKTsKKyAgICAg
ICAgICAgIHBhc3RlYm9hcmREYXRhLmFwcGVuZChidWZmZXIpOwogICAgICAgICB9CiAgICAgfQog
fQo=
</data>
<flag name="review"
          id="240447"
          type_id="1"
          status="-"
          setter="dbates"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217645</attachid>
            <date>2013-11-21 19:26:31 -0800</date>
            <delta_ts>2013-11-27 15:04:55 -0800</delta_ts>
            <desc>implement using FilterIterator</desc>
            <filename>iterator.06.diff</filename>
            <type>text/plain</type>
            <size>12108</size>
            <attacher name="Martin Hock">mhock</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzOTBmZGE1Li40YWQzNTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTMtMTEtMjEgIE1hcnRpbiBIb2NrICA8bWhvY2tAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhYmlsaXR5IHRvIGl0ZXJhdGUgb3ZlciBBUEk6OkFycmF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ1MzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogU2hhcmVkL0FQSUFycmF5Lmg6CisgICAgICAgICogU2hhcmVkL0ZpbHRlckl0ZXJh
dG9yLmg6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAg
ICAgICAoV2ViS2l0Ojp0b1N0cmluZ1ZlY3Rvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRh
Rm9yUmFuZ2UpOgorCiAyMDEzLTExLTIxICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIGZ1bmN0aW9ucyBmcm9tIFdlYkNvcmUgYW5kIFdl
YktpdDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDlkMTU4NWUuLjI0MTdmYTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDIyLDYgKzQyMiw3IEBAIHdlYmtp
dDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9zb3VwL0Rv
d25sb2FkU291cEVycm9ycy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUu
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaCBcCisJU291cmNlL1dl
YktpdDIvU2hhcmVkL0ZpbHRlckl0ZXJhdG9yLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9G
b250U21vb3RoaW5nTGV2ZWwuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL1Byb2Nlc3NFeGVj
dXRhYmxlUGF0aC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0
bWFwQ2Fpcm8uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJh
eS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSUFycmF5LmgKaW5kZXggNDBlMDkxNi4uYjZl
NjcyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSUFycmF5LmgKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSUFycmF5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUg
QVBJQXJyYXlfaAogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiRmlsdGVySXRl
cmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDMsOSArNDQsMTIgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfkFycmF5KCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IGlubGluZSBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgUmVmUHRyPE9iamVjdD4gJm9iamVjdCkg
eyByZXR1cm4gb2JqZWN0LT50eXBlKCkgPT0gVDo6QVBJVHlwZTsgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KICAgICBUKiBhdChzaXplX3QgaSkgY29uc3QKICAgICB7Ci0gICAgICAgIGlm
IChtX2VsZW1lbnRzW2ldLT50eXBlKCkgIT0gVDo6QVBJVHlwZSkKKyAgICAgICAgaWYgKCFpc1R5
cGU8VD4obV9lbGVtZW50c1tpXSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fZWxlbWVudHNbaV0uZ2V0KCkpOwpAQCAtNTcs
NiArNjEsMTkgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj4mIGVs
ZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50czsgfQogICAgIFZlY3RvcjxSZWZQdHI8
T2JqZWN0Pj4mIGVsZW1lbnRzKCkgeyByZXR1cm4gbV9lbGVtZW50czsgfQogCisgICAgdHlwZWRl
ZiBWZWN0b3I8UmVmUHRyPE9iamVjdD4+OjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICB0eXBlZGVm
IFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwor
ICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9lbGVtZW50cy5iZWdpbigpOyB9CisgICAg
aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9lbGVtZW50cy5lbmQoKTsgfQorICAgIGNvbnN0X2l0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50cy5iZWdpbigpOyB9CisgICAg
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50cy5lbmQoKTsgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBGaWx0ZXJJdGVyYXRvcjxkZWNsdHlwZSgm
aXNUeXBlPFQ+KSwgY29uc3RfaXRlcmF0b3IsIFJlZlB0cjxUPj4gaXQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEZpbHRlckl0ZXJhdG9yPGRlY2x0eXBlKCZpc1R5cGU8VD4pLCBjb25zdF9pdGVy
YXRvciwgUmVmUHRyPFQ+Pihpc1R5cGU8VD4sIGJlZ2luKCksIGVuZCgpKTsKKyAgICB9CisKIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgQXJyYXkoVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiBlbGVtZW50
cyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9GaWx0ZXJJdGVyYXRvci5o
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0ZpbHRlckl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzZjY4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9GaWx0ZXJJdGVyYXRvci5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEZpbHRlckl0ZXJhdG9yX2gKKyNkZWZpbmUgRmlsdGVySXRlcmF0b3JfaAor
CisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEFQSSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWRpY2F0ZSwgdHlwZW5hbWUgSXRlcmF0
b3IsIHR5cGVuYW1lIFQ+CitjbGFzcyBGaWx0ZXJJdGVyYXRvciB7CitwdWJsaWM6CisgICAgRmls
dGVySXRlcmF0b3IoUHJlZGljYXRlIHByZWQsIEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRvciBlbmQp
CisgICAgICAgIDogbV9wcmVkKHByZWQpCisgICAgICAgICwgbV9pdGVyKGJlZ2luKQorICAgICAg
ICAsIG1fZW5kKGVuZCkKKyAgICB7CisgICAgICAgIHdoaWxlIChtX2l0ZXIgIT0gbV9lbmQgJiYg
IW1fcHJlZCgqbV9pdGVyKSkKKyAgICAgICAgICAgICsrbV9pdGVyOworICAgIH0KKworICAgIEZp
bHRlckl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIHdoaWxlIChtX2l0ZXIg
IT0gbV9lbmQpIHsKKyAgICAgICAgICAgICsrbV9pdGVyOworICAgICAgICAgICAgaWYgKG1faXRl
ciA9PSBtX2VuZCB8fCBtX3ByZWQoKm1faXRlcikpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGNvbnN0IFQmIG9w
ZXJhdG9yKigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9pdGVyICE9IG1fZW5kKTsK
KyAgICAgICAgQVNTRVJUKG1fcHJlZCgqbV9pdGVyKSk7CisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNvbnN0IFQmPigqbV9pdGVyKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KEZpbHRlckl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pdGVyID09
IG90aGVyLm1faXRlcjsgfQorICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oRmlsdGVySXRlcmF0
b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2l0ZXIgIT0gb3RoZXIubV9pdGVyOyB9CisKKyAg
ICBGaWx0ZXJJdGVyYXRvciYgYmVnaW4oKSB7IHJldHVybiAqdGhpczsgfQorICAgIEZpbHRlckl0
ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIEZpbHRlckl0ZXJhdG9yKG1fcHJlZCwgbV9lbmQsIG1fZW5k
KTsgfQorCitwcml2YXRlOgorICAgIFByZWRpY2F0ZSBtX3ByZWQ7CisgICAgSXRlcmF0b3IgbV9p
dGVyOworICAgIEl0ZXJhdG9yIG1fZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgQVBJCisKKyNl
bmRpZiAvLyBGaWx0ZXJJdGVyYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzhkNmNhOC4uMzFlZGFlYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjU0
LDYgKzY1NCw3IEBACiAJCTZFRTg0OUM4MTM2OEQ5MzkwMDM4RDQ4MSAvKiBXS0luc3BlY3RvclBy
aXZhdGVNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZFRTg0OUM2MTM2OEQ5MkQwMDM4RDQ4MSAvKiBXS0luc3BlY3RvclByaXZhdGVNYWMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjhFODZGMTE3
OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBX
ZWJDb2xvclBpY2tlck1hYy5oICovOyB9OwogCQk3MjhFODZGMjE3OTUxODhDMDA4Nzg3OUUgLyog
V2ViQ29sb3JQaWNrZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjhFODZGMDE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMu
bW0gKi87IH07CisJCTc1MkE4MDc3MTgzRDZEQTcwMDNENjU5RSAvKiBGaWx0ZXJJdGVyYXRvci5o
IGluIENvcHkgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzUyQTgw
NzYxODNENkRBNzAwM0Q2NTlFIC8qIEZpbHRlckl0ZXJhdG9yLmggKi87IH07CiAJCTc1NTQyMkJC
MTgwNjJCOUMwMDQ2RjZBOCAvKiBXS09yaWdpbkRhdGFNYW5hZ2VyLmNwcCBpbiBDb3B5IEZpbGVz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTQyMkI5MTgwNjJCOUMwMDQ2
RjZBOCAvKiBXS09yaWdpbkRhdGFNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJNzU1NDIyQkMxODA2MkI5
QzAwNDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuaCBpbiBDb3B5IEZpbGVzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTQyMkJBMTgwNjJCOUMwMDQ2RjZBOCAvKiBX
S09yaWdpbkRhdGFNYW5hZ2VyLmggKi87IH07CiAJCTc1NTQyMkJEMTgwNjJCQjIwMDQ2RjZBOCAv
KiBXS09yaWdpbkRhdGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc1NTQyMkI5MTgwNjJCOUMwMDQ2RjZBOCAvKiBXS09yaWdpbkRhdGFN
YW5hZ2VyLmNwcCAqLzsgfTsKQEAgLTE0MzUsNiArMTQzNiw3IEBACiAJCQkJNTFBNjBCMkExODBD
Q0VCNTAwRjNCRjUwIC8qIERhdGFiYXNlUHJvY2Vzcy5hcHAgaW4gQ29weSBGaWxlcyAqLywKIAkJ
CQk3NTU0MjJDMzE4MDYyQkU0MDA0NkY2QTggLyogV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5t
ZXNzYWdlcy5pbiBpbiBDb3B5IEZpbGVzICovLAogCQkJCTFBNTBEQjY2MTEwQTNENTcwMDBEM0ZF
NSAvKiBXZWJQcm9jZXNzLmFwcCBpbiBDb3B5IEZpbGVzICovLAorCQkJCTc1MkE4MDc3MTgzRDZE
QTcwMDNENjU5RSAvKiBGaWx0ZXJJdGVyYXRvci5oIGluIENvcHkgRmlsZXMgKi8sCiAJCQkJNzU1
NDIyQkIxODA2MkI5QzAwNDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuY3BwIGluIENvcHkg
RmlsZXMgKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJDb3B5IEZpbGVzIjsKQEAgLTIxOTAsNiArMjE5
Miw3IEBACiAJCTZFRTg0OUM2MTM2OEQ5MkQwMDM4RDQ4MSAvKiBXS0luc3BlY3RvclByaXZhdGVN
YWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tJbnNwZWN0b3JQcml2YXRl
TWFjLmg7IHBhdGggPSBtYWMvV0tJbnNwZWN0b3JQcml2YXRlTWFjLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tl
ck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlck1h
Yy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZGMDE3OTUxODhDMDA4Nzg3
OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzUyQTgwNzYxODNENkRBNzAwM0Q2NTlFIC8qIEZpbHRlckl0ZXJhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc1NTQyMkI5MTgwNjJCOUMwMDQ2RjZBOCAvKiBXS09yaWdpbkRh
dGFNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLT3Jp
Z2luRGF0YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NTU0MjJC
QTE4MDYyQjlDMDA0NkY2QTggLyogV0tPcmlnaW5EYXRhTWFuYWdlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS09yaWdpbkRhdGFNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc1NTQyMkJFMTgwNjJCRTQwMDQ2RjZBOCAvKiBXZWJPcmlnaW5EYXRh
TWFuYWdlclByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
Yk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzM2MSw2ICszMzY0LDcgQEAKIAkJCQkwRkI2NTkyMjEyMDhCNERCMDA0NDgxNkMgLyogRHJh
d2luZ0FyZWFJbmZvLmggKi8sCiAJCQkJOENGRUNFOTMxNDkwRjE0MDAwMkFBQTMyIC8qIEVkaXRv
clN0YXRlLmNwcCAqLywKIAkJCQkxQUE0MUFCNDEyQzAyRUM0MDAyQkU2N0IgLyogRWRpdG9yU3Rh
dGUuaCAqLywKKwkJCQk3NTJBODA3NjE4M0Q2REE3MDAzRDY1OUUgLyogRmlsdGVySXRlcmF0b3Iu
aCAqLywKIAkJCQlCQ0U4MUQ4QTEzMTlGN0VGMDAyNDE5MTAgLyogRm9udEluZm8uY3BwICovLAog
CQkJCUJDRTgxRDhCMTMxOUY3RUYwMDI0MTkxMCAvKiBGb250SW5mby5oICovLAogCQkJCTc2MkI3
NDgxMTIwQkJBMDEwMDgxOTMzOSAvKiBGb250U21vb3RoaW5nTGV2ZWwuaCAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5jcHAKaW5kZXggZWU3MzkwNS4uNTJjYjU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5j
cHAKQEAgLTQ4NSwxMSArNDg1LDggQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHRvU3RyaW5nVmVj
dG9yKEFQSTo6QXJyYXkqIHBhdHRlcm5zKQogICAgICAgICByZXR1cm4gcGF0dGVybnNWZWN0b3I7
CiAKICAgICBwYXR0ZXJuc1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFdlYlN0cmluZyog
ZW50cnkgPSBwYXR0ZXJucy0+YXQ8V2ViU3RyaW5nPihpKTsKLSAgICAgICAgaWYgKGVudHJ5KQot
ICAgICAgICAgICAgcGF0dGVybnNWZWN0b3IudW5jaGVja2VkQXBwZW5kKGVudHJ5LT5zdHJpbmco
KSk7Ci0gICAgfQorICAgIGZvciAoYXV0byBlbnRyeSA6IHBhdHRlcm5zLT5pdDxXZWJTdHJpbmc+
KCkpCisgICAgICAgIHBhdHRlcm5zVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChlbnRyeS0+c3RyaW5n
KCkpOwogICAgIHJldHVybiBwYXR0ZXJuc1ZlY3RvcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwCmluZGV4IGQ2YTY3ODkuLjIxMDM4ZTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAK
QEAgLTE1NCwyMCArMTU0LDEyIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50
OjpnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYlBhZ2UqIHBhZ2UsIFJhCiAKICAgICAgICAg
QVNTRVJUKHR5cGVzQXJyYXktPnNpemUoKSA9PSBkYXRhQXJyYXktPnNpemUoKSk7CiAKLSAgICAg
ICAgc2l6ZV90IHNpemUgPSB0eXBlc0FycmF5LT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBXZWJTdHJpbmcqIHR5cGUgPSB0
eXBlc0FycmF5LT5hdDxXZWJTdHJpbmc+KGkpOwotICAgICAgICAgICAgaWYgKHR5cGUpCi0gICAg
ICAgICAgICAgICAgcGFzdGVib2FyZFR5cGVzLmFwcGVuZCh0eXBlLT5zdHJpbmcoKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgZm9yIChhdXRvIHR5cGUgOiB0eXBlc0FycmF5LT5pdDxXZWJTdHJpbmc+
KCkpCisgICAgICAgICAgICBwYXN0ZWJvYXJkVHlwZXMuYXBwZW5kKHR5cGUtPnN0cmluZygpKTsK
IAotICAgICAgICBzaXplID0gZGF0YUFycmF5LT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBXZWJEYXRhKiBpdGVtID0gZGF0
YUFycmF5LT5hdDxXZWJEYXRhPihpKTsKLSAgICAgICAgICAgIGlmIChpdGVtKSB7Ci0gICAgICAg
ICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVh
dGUoaXRlbS0+Ynl0ZXMoKSwgaXRlbS0+c2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBwYXN0ZWJv
YXJkRGF0YS5hcHBlbmQoYnVmZmVyKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRv
IGl0ZW0gOiBkYXRhQXJyYXktPml0PFdlYkRhdGE+KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGl0ZW0tPmJ5dGVzKCks
IGl0ZW0tPnNpemUoKSk7CisgICAgICAgICAgICBwYXN0ZWJvYXJkRGF0YS5hcHBlbmQoYnVmZmVy
KTsKICAgICAgICAgfQogICAgIH0KIH0K
</data>
<flag name="review"
          id="240875"
          type_id="1"
          status="-"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>217646</attachid>
            <date>2013-11-21 19:27:50 -0800</date>
            <delta_ts>2013-11-27 15:00:42 -0800</delta_ts>
            <desc>testcase (for exposition only, do not use!)</desc>
            <filename>APIArray.cpp</filename>
            <type>text/plain</type>
            <size>2251</size>
            <attacher name="Martin Hock">mhock</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwogKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgogKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgogKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgogKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgogKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwoKI2luY2x1ZGUgImNv
bmZpZy5oIgojdW5kZWYgV1RGX1BMQVRGT1JNX01BQwojaW5jbHVkZSAiLi4vLi4vLi4vLi4vU291
cmNlL1dlYktpdDIvU2hhcmVkL0FQSUFycmF5LmgiCiNpbmNsdWRlICIuLi8uLi8uLi8uLi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5nLmgiCgpuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CgpURVNUKFdlYktpdDIsIEFQSUFycmF5KQp7CiAgICBWZWN0b3I8UmVmUHRyPFdlYktpdDo6V2Vi
U3RyaW5nPj4gdmVjOwogICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGFwaTsKICAgIHZl
Yy5hcHBlbmQoV2ViS2l0OjpXZWJTdHJpbmc6OmNyZWF0ZSgiZm9vIikpOwogICAgYXBpLmFwcGVu
ZChXZWJLaXQ6OldlYlN0cmluZzo6Y3JlYXRlKCJmb28iKSk7CiAgICB2ZWMuYXBwZW5kKFdlYktp
dDo6V2ViU3RyaW5nOjpjcmVhdGUoImJhciIpKTsKICAgIGFwaS5hcHBlbmQoV2ViS2l0OjpXZWJT
dHJpbmc6OmNyZWF0ZSgiYmFyIikpOwogICAgYXBpLmFwcGVuZChBUEk6OkFycmF5OjpjcmVhdGUo
KSk7CiAgICB2ZWMuYXBwZW5kKFdlYktpdDo6V2ViU3RyaW5nOjpjcmVhdGUoImJsYWgiKSk7CiAg
ICBhcGkuYXBwZW5kKFdlYktpdDo6V2ViU3RyaW5nOjpjcmVhdGUoImJsYWgiKSk7CiAgICBhcGku
YXBwZW5kKEFQSTo6QXJyYXk6OmNyZWF0ZSgpKTsKCiAgICBSZWZQdHI8QVBJOjpBcnJheT4gYXJy
YXkgPSBBUEk6OkFycmF5OjpjcmVhdGUoYXBpKTsKICAgIGF1dG8gaXQgPSB2ZWMuYmVnaW4oKTsK
ICAgIGZvciAoYXV0byBpIDogYXJyYXktPml0PFdlYktpdDo6V2ViU3RyaW5nPigpKSB7CiAgICAg
ICAgQVNTRVJUKGktPmVxdWFsKGl0LT5nZXQoKSkpOwogICAgICAgICsraXQ7CiAgICB9CiAgICBB
U1NFUlQoaXQgPT0gdmVjLmVuZCgpKTsKfQoKfQ==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217968</attachid>
            <date>2013-11-27 15:00:42 -0800</date>
            <delta_ts>2013-12-02 09:30:29 -0800</delta_ts>
            <desc>refactor per Anders&apos; review</desc>
            <filename>iterator.07.diff</filename>
            <type>text/plain</type>
            <size>12740</size>
            <attacher name="Martin Hock">mhock</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwNTAyYTE0Li5mM2VlNDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTMtMTEtMjcgIE1hcnRpbiBIb2NrICA8bWhvY2tAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhYmlsaXR5IHRvIGl0ZXJhdGUgb3ZlciBBUEk6OkFycmF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ1MzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogU2hhcmVkL0FQSUFycmF5Lmg6CisgICAgICAgICogU2hhcmVkL0ZpbHRlckl0ZXJh
dG9yLmg6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAg
ICAgICAoV2ViS2l0Ojp0b1N0cmluZ1ZlY3Rvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRh
Rm9yUmFuZ2UpOgorCiAyMDEzLTExLTI3ICBOaWNrIERpZWdvIFlhbWFuZSAgPG5pY2sueWFtYW5l
QG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIFF0LXNwZWNpZmljIC5xcmMgZmlsZXMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDlkMTU4NWUuLjI0MTdmYTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDIyLDYgKzQyMiw3IEBAIHdlYmtpdDJfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2Fk
U291cEVycm9ycy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaCBcCisJU291cmNlL1dlYktpdDIv
U2hhcmVkL0ZpbHRlckl0ZXJhdG9yLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Gb250U21v
b3RoaW5nTGV2ZWwuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL1Byb2Nlc3NFeGVjdXRhYmxl
UGF0aC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fp
cm8uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJheS5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSUFycmF5LmgKaW5kZXggNDBlMDkxNi4uYmFjY2MwMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSUFycmF5LmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0FQSUFycmF5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDEzICsyNywyMiBAQAogI2RlZmluZSBBUElB
cnJheV9oCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJGaWx0ZXJJdGVyYXRv
ci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBBUEkgewogCisKIGNsYXNz
IEFycmF5IEZJTkFMIDogcHVibGljIFR5cGVkT2JqZWN0PE9iamVjdDo6VHlwZTo6QXJyYXk+IHsK
K3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgaW5saW5lIGNv
bnN0IFQgKmdldE9iamVjdChjb25zdCBSZWZQdHI8T2JqZWN0PiYgb2JqZWN0KSB7IHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBUICo+KG9iamVjdC5nZXQoKSk7IH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgc3RhdGljIGlubGluZSBib29sIGlzVHlwZShjb25zdCBSZWZQdHI8T2Jq
ZWN0PiAmb2JqZWN0KSB7IHJldHVybiBvYmplY3QtPnR5cGUoKSA9PSBUOjpBUElUeXBlOyB9CisK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheT4gY3JlYXRlKCk7CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QXJyYXk+IGNyZWF0ZShWZWN0b3I8UmVmUHRyPE9iamVjdD4+IGVsZW1l
bnRzKTsKQEAgLTQ1LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CiAgICAgVCogYXQoc2l6ZV90IGkpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAobV9lbGVtZW50
c1tpXS0+dHlwZSgpICE9IFQ6OkFQSVR5cGUpCisgICAgICAgIGlmICghaXNUeXBlPFQ+KG1fZWxl
bWVudHNbaV0pKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQqPihtX2VsZW1lbnRzW2ldLmdldCgpKTsKQEAgLTU3LDYgKzY2LDEyIEBA
IHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE9iamVjdD4+JiBlbGVtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fZWxlbWVudHM7IH0KICAgICBWZWN0b3I8UmVmUHRyPE9iamVjdD4+JiBl
bGVtZW50cygpIHsgcmV0dXJuIG1fZWxlbWVudHM7IH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHR5cGVuYW1lCisgICAgRmlsdGVySXRlcmF0b3I8ZGVjbHR5cGUoJmlzVHlwZTxUPiksIGRl
Y2x0eXBlKCZnZXRPYmplY3Q8VD4pLCBWZWN0b3I8UmVmUHRyPE9iamVjdD4+Ojpjb25zdF9pdGVy
YXRvcj46Okl0ZXJhYmxlIGVsZW1lbnRzT2ZUeXBlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
eXBlbmFtZSBGaWx0ZXJJdGVyYXRvcjxkZWNsdHlwZSgmaXNUeXBlPFQ+KSwgZGVjbHR5cGUoJmdl
dE9iamVjdDxUPiksIFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj46OmNvbnN0X2l0ZXJhdG9yPjo6SXRl
cmFibGU6Okl0ZXJhYmxlKEZpbHRlckl0ZXJhdG9yPGRlY2x0eXBlKCZpc1R5cGU8VD4pLCBkZWNs
dHlwZSgmZ2V0T2JqZWN0PFQ+KSwgVmVjdG9yPFJlZlB0cjxPYmplY3Q+Pjo6Y29uc3RfaXRlcmF0
b3I+KGlzVHlwZTxUPiwgZ2V0T2JqZWN0PFQ+LCBtX2VsZW1lbnRzLmJlZ2luKCksIG1fZWxlbWVu
dHMuZW5kKCkpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQXJyYXkoVmVjdG9y
PFJlZlB0cjxPYmplY3Q+PiBlbGVtZW50cyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9GaWx0ZXJJdGVyYXRvci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0ZpbHRlckl0
ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEyM2QyMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9GaWx0ZXJJdGVyYXRvci5oCkBA
IC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpbHRlckl0ZXJhdG9yX2gKKyNk
ZWZpbmUgRmlsdGVySXRlcmF0b3JfaAorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEFQSSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBy
ZWRpY2F0ZSwgdHlwZW5hbWUgQ2FzdCwgdHlwZW5hbWUgSXRlcmF0b3I+CitjbGFzcyBGaWx0ZXJJ
dGVyYXRvciB7Citwcml2YXRlOgorICAgIGNvbnN0IFByZWRpY2F0ZSBtX3ByZWQ7CisgICAgY29u
c3QgQ2FzdCBtX2Nhc3Q7CisgICAgSXRlcmF0b3IgbV9pdGVyOworICAgIEl0ZXJhdG9yIG1fZW5k
OworCitwdWJsaWM6CisgICAgRmlsdGVySXRlcmF0b3IoUHJlZGljYXRlIHByZWQsIENhc3QgY2Fz
dCwgSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKKyAgICAgICAgOiBtX3ByZWQocHJlZCkK
KyAgICAgICAgLCBtX2Nhc3QoY2FzdCkKKyAgICAgICAgLCBtX2l0ZXIoYmVnaW4pCisgICAgICAg
ICwgbV9lbmQoZW5kKQorICAgIHsKKyAgICAgICAgd2hpbGUgKG1faXRlciAhPSBtX2VuZCAmJiAh
bV9wcmVkKCptX2l0ZXIpKQorICAgICAgICAgICAgKyttX2l0ZXI7CisgICAgfQorCisgICAgRmls
dGVySXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgICAgd2hpbGUgKG1faXRlciAh
PSBtX2VuZCkgeworICAgICAgICAgICAgKyttX2l0ZXI7CisgICAgICAgICAgICBpZiAobV9pdGVy
ID09IG1fZW5kIHx8IG1fcHJlZCgqbV9pdGVyKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYXV0byBvcGVyYXRv
ciooKSBjb25zdCAtPiBjb25zdCBkZWNsdHlwZShtX2Nhc3QoKm1faXRlcikpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9pdGVyICE9IG1fZW5kKTsKKyAgICAgICAgQVNTRVJUKG1fcHJlZCgqbV9p
dGVyKSk7CisgICAgICAgIHJldHVybiBtX2Nhc3QoKm1faXRlcik7CisgICAgfQorCisgICAgaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShGaWx0ZXJJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IG1faXRlciA9PSBvdGhlci5tX2l0ZXI7IH0KKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KEZp
bHRlckl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pdGVyICE9IG90aGVyLm1faXRl
cjsgfQorCisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHByaXZhdGU6CisgICAgICAgIEZpbHRl
ckl0ZXJhdG9yIG1faXRlciwgbV9lbmQ7CisgICAgcHVibGljOgorICAgICAgICBJdGVyYWJsZShG
aWx0ZXJJdGVyYXRvciBpdGVyKQorICAgICAgICAgICAgOiBtX2l0ZXIoaXRlcikKKyAgICAgICAg
ICAgICwgbV9lbmQoRmlsdGVySXRlcmF0b3IoaXRlci5tX3ByZWQsIGl0ZXIubV9jYXN0LCBpdGVy
Lm1fZW5kLCBpdGVyLm1fZW5kKSkKKyAgICAgICAgeyB9CisgICAgICAgIEZpbHRlckl0ZXJhdG9y
JiBiZWdpbigpIHsgcmV0dXJuIG1faXRlcjsgfQorICAgICAgICBGaWx0ZXJJdGVyYXRvciYgZW5k
KCkgeyByZXR1cm4gbV9lbmQ7IH0KKyAgICB9OworCit9OworCit9IC8vIG5hbWVzcGFjZSBBUEkK
KworI2VuZGlmIC8vIEZpbHRlckl0ZXJhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1OGVlYzFkLi5jMjI3MDYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC02NjcsNiArNjY3LDcgQEAKIAkJNkVFODQ5QzgxMzY4RDkzOTAwMzhENDgxIC8qIFdLSW5zcGVj
dG9yUHJpdmF0ZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkVFODQ5QzYxMzY4RDkyRDAwMzhENDgxIC8qIFdLSW5zcGVjdG9yUHJpdmF0ZU1hYy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOEU4
NkYxMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlF
IC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi87IH07CiAJCTcyOEU4NkYyMTc5NTE4OEMwMDg3ODc5
RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tl
ck1hYy5tbSAqLzsgfTsKKwkJNzUyQTgwNzcxODNENkRBNzAwM0Q2NTlFIC8qIEZpbHRlckl0ZXJh
dG9yLmggaW4gQ29weSBGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
NTJBODA3NjE4M0Q2REE3MDAzRDY1OUUgLyogRmlsdGVySXRlcmF0b3IuaCAqLzsgfTsKIAkJNzU1
NDIyQkIxODA2MkI5QzAwNDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuY3BwIGluIENvcHkg
RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1NDIyQjkxODA2MkI5
QzAwNDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuY3BwICovOyB9OwogCQk3NTU0MjJCQzE4
MDYyQjlDMDA0NkY2QTggLyogV0tPcmlnaW5EYXRhTWFuYWdlci5oIGluIENvcHkgRmlsZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1NDIyQkExODA2MkI5QzAwNDZGNkE4
IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuaCAqLzsgfTsKIAkJNzU1NDIyQkQxODA2MkJCMjAwNDZG
NkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1NDIyQjkxODA2MkI5QzAwNDZGNkE4IC8qIFdLT3JpZ2lu
RGF0YU1hbmFnZXIuY3BwICovOyB9OwpAQCAtMTQ0OCw2ICsxNDQ5LDcgQEAKIAkJCQk1MUE2MEIy
QTE4MENDRUI1MDBGM0JGNTAgLyogRGF0YWJhc2VQcm9jZXNzLmFwcCBpbiBDb3B5IEZpbGVzICov
LAogCQkJCTc1NTQyMkMzMTgwNjJCRTQwMDQ2RjZBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluIGluIENvcHkgRmlsZXMgKi8sCiAJCQkJMUE1MERCNjYxMTBBM0Q1NzAw
MEQzRkU1IC8qIFdlYlByb2Nlc3MuYXBwIGluIENvcHkgRmlsZXMgKi8sCisJCQkJNzUyQTgwNzcx
ODNENkRBNzAwM0Q2NTlFIC8qIEZpbHRlckl0ZXJhdG9yLmggaW4gQ29weSBGaWxlcyAqLywKIAkJ
CQk3NTU0MjJCQjE4MDYyQjlDMDA0NkY2QTggLyogV0tPcmlnaW5EYXRhTWFuYWdlci5jcHAgaW4g
Q29weSBGaWxlcyAqLywKIAkJCSk7CiAJCQluYW1lID0gIkNvcHkgRmlsZXMiOwpAQCAtMjIxNiw2
ICsyMjE4LDcgQEAKIAkJNkVFODQ5QzYxMzY4RDkyRDAwMzhENDgxIC8qIFdLSW5zcGVjdG9yUHJp
dmF0ZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0luc3BlY3RvclBy
aXZhdGVNYWMuaDsgcGF0aCA9IG1hYy9XS0luc3BlY3RvclByaXZhdGVNYWMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9y
UGlja2VyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlj
a2VyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkYwMTc5NTE4OEMw
MDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3NTJBODA3NjE4M0Q2REE3MDAzRDY1OUUgLyogRmlsdGVySXRlcmF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySXRlcmF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzU1NDIyQjkxODA2MkI5QzAwNDZGNkE4IC8qIFdLT3Jp
Z2luRGF0YU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V0tPcmlnaW5EYXRhTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1
NTQyMkJBMTgwNjJCOUMwMDQ2RjZBOCAvKiBXS09yaWdpbkRhdGFNYW5hZ2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLT3JpZ2luRGF0YU1hbmFnZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzU1NDIyQkUxODA2MkJFNDAwNDZGNkE4IC8qIFdlYk9yaWdp
bkRhdGFNYW5hZ2VyUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zMzg3LDYgKzMzOTAsNyBAQAogCQkJCTBGQjY1OTIyMTIwOEI0REIwMDQ0ODE2QyAv
KiBEcmF3aW5nQXJlYUluZm8uaCAqLywKIAkJCQk4Q0ZFQ0U5MzE0OTBGMTQwMDAyQUFBMzIgLyog
RWRpdG9yU3RhdGUuY3BwICovLAogCQkJCTFBQTQxQUI0MTJDMDJFQzQwMDJCRTY3QiAvKiBFZGl0
b3JTdGF0ZS5oICovLAorCQkJCTc1MkE4MDc2MTgzRDZEQTcwMDNENjU5RSAvKiBGaWx0ZXJJdGVy
YXRvci5oICovLAogCQkJCUJDRTgxRDhBMTMxOUY3RUYwMDI0MTkxMCAvKiBGb250SW5mby5jcHAg
Ki8sCiAJCQkJQkNFODFEOEIxMzE5RjdFRjAwMjQxOTEwIC8qIEZvbnRJbmZvLmggKi8sCiAJCQkJ
NzYyQjc0ODExMjBCQkEwMTAwODE5MzM5IC8qIEZvbnRTbW9vdGhpbmdMZXZlbC5oICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcAppbmRleCBlZTczOTA1Li45NzNjNDAwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcApAQCAtNDg1LDExICs0ODUsOCBAQCBzdGF0aWMgVmVjdG9yPFN0cmluZz4gdG9TdHJp
bmdWZWN0b3IoQVBJOjpBcnJheSogcGF0dGVybnMpCiAgICAgICAgIHJldHVybiBwYXR0ZXJuc1Zl
Y3RvcjsKIAogICAgIHBhdHRlcm5zVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgV2ViU3Ry
aW5nKiBlbnRyeSA9IHBhdHRlcm5zLT5hdDxXZWJTdHJpbmc+KGkpOwotICAgICAgICBpZiAoZW50
cnkpCi0gICAgICAgICAgICBwYXR0ZXJuc1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoZW50cnktPnN0
cmluZygpKTsKLSAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IHBhdHRlcm5zLT5l
bGVtZW50c09mVHlwZTxXZWJTdHJpbmc+KCkpCisgICAgICAgIHBhdHRlcm5zVmVjdG9yLnVuY2hl
Y2tlZEFwcGVuZChlbnRyeS0+c3RyaW5nKCkpOwogICAgIHJldHVybiBwYXR0ZXJuc1ZlY3RvcjsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3Bw
CmluZGV4IGQ2YTY3ODkuLmNmZjVmNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlUGFnZUVkaXRvckNsaWVudC5jcHAKQEAgLTE1NCwyMCArMTU0LDEyIEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdlYlBh
Z2UqIHBhZ2UsIFJhCiAKICAgICAgICAgQVNTRVJUKHR5cGVzQXJyYXktPnNpemUoKSA9PSBkYXRh
QXJyYXktPnNpemUoKSk7CiAKLSAgICAgICAgc2l6ZV90IHNpemUgPSB0eXBlc0FycmF5LT5zaXpl
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICBXZWJTdHJpbmcqIHR5cGUgPSB0eXBlc0FycmF5LT5hdDxXZWJTdHJpbmc+KGkpOwotICAg
ICAgICAgICAgaWYgKHR5cGUpCi0gICAgICAgICAgICAgICAgcGFzdGVib2FyZFR5cGVzLmFwcGVu
ZCh0eXBlLT5zdHJpbmcoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0
eXBlIDogdHlwZXNBcnJheS0+ZWxlbWVudHNPZlR5cGU8V2ViU3RyaW5nPigpKQorICAgICAgICAg
ICAgcGFzdGVib2FyZFR5cGVzLmFwcGVuZCh0eXBlLT5zdHJpbmcoKSk7CiAKLSAgICAgICAgc2l6
ZSA9IGRhdGFBcnJheS0+c2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewotICAgICAgICAgICAgV2ViRGF0YSogaXRlbSA9IGRhdGFBcnJheS0+YXQ8V2Vi
RGF0YT4oaSk7Ci0gICAgICAgICAgICBpZiAoaXRlbSkgewotICAgICAgICAgICAgICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGl0ZW0tPmJ5dGVz
KCksIGl0ZW0tPnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgcGFzdGVib2FyZERhdGEuYXBwZW5k
KGJ1ZmZlcik7Ci0gICAgICAgICAgICB9CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6
IGRhdGFBcnJheS0+ZWxlbWVudHNPZlR5cGU8V2ViRGF0YT4oKSkgeworICAgICAgICAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoaXRlbS0+Ynl0
ZXMoKSwgaXRlbS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIHBhc3RlYm9hcmREYXRhLmFwcGVuZChi
dWZmZXIpOwogICAgICAgICB9CiAgICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218179</attachid>
            <date>2013-12-02 09:30:29 -0800</date>
            <delta_ts>2013-12-02 11:37:48 -0800</delta_ts>
            <desc>use std::move for pass-by-value arguments</desc>
            <filename>iterator.08.diff</filename>
            <type>text/plain</type>
            <size>12807</size>
            <attacher name="Martin Hock">mhock</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4OGZhYTBiLi43OWYzNjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTMtMTItMDIgIE1hcnRpbiBIb2NrICA8bWhvY2tAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhYmlsaXR5IHRvIGl0ZXJhdGUgb3ZlciBBUEk6OkFycmF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ1MzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogU2hhcmVkL0FQSUFycmF5Lmg6CisgICAgICAgICogU2hhcmVkL0ZpbHRlckl0ZXJh
dG9yLmg6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAg
ICAgICAoV2ViS2l0Ojp0b1N0cmluZ1ZlY3Rvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmREYXRh
Rm9yUmFuZ2UpOgorCiAyMDEzLTEyLTAxICBDaGFuZ1Nlb2sgT2ggIDxjaGFuZ3Nlb2sub2hAY29s
bGFib3JhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEd0ayBwb3J0IEJ1aWxkIGZpeCBhZnRl
ciByMTU5OTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA5ZDE1ODVlLi4yNDE3
ZmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQyMiw2ICs0MjIsNyBAQCB3
ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvc291
cC9Eb3dubG9hZFNvdXBFcnJvcnMuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRvclN0
YXRlLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmggXAorCVNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9GaWx0ZXJJdGVyYXRvci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRm9udFNtb290aGluZ0xldmVsLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Qcm9jZXNz
RXhlY3V0YWJsZVBhdGguaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2NhaXJvL1NoYXJlYWJs
ZUJpdG1hcENhaXJvLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJ
QXJyYXkuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJheS5oCmluZGV4IDQwZTA5MTYu
LmQzNzU0ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJheS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJheS5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVm
aW5lIEFQSUFycmF5X2gKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIkZpbHRl
ckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM0LDYgKzM1LDEzIEBACiBu
YW1lc3BhY2UgQVBJIHsKIAogY2xhc3MgQXJyYXkgRklOQUwgOiBwdWJsaWMgVHlwZWRPYmplY3Q8
T2JqZWN0OjpUeXBlOjpBcnJheT4geworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgVCAqZ2V0T2JqZWN0KGNvbnN0IFJlZlB0cjxPYmpl
Y3Q+JiBvYmplY3QpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFQgKj4ob2JqZWN0LmdldCgp
KTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgaW5saW5lIGJvb2wg
aXNUeXBlKGNvbnN0IFJlZlB0cjxPYmplY3Q+ICZvYmplY3QpIHsgcmV0dXJuIG9iamVjdC0+dHlw
ZSgpID09IFQ6OkFQSVR5cGU7IH0KKwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFy
cmF5PiBjcmVhdGUoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheT4gY3JlYXRlKFZlY3Rv
cjxSZWZQdHI8T2JqZWN0Pj4gZWxlbWVudHMpOwpAQCAtNDUsNyArNTMsNyBAQCBwdWJsaWM6CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUKiBhdChzaXplX3QgaSkgY29uc3QKICAgICB7
Ci0gICAgICAgIGlmIChtX2VsZW1lbnRzW2ldLT50eXBlKCkgIT0gVDo6QVBJVHlwZSkKKyAgICAg
ICAgaWYgKCFpc1R5cGU8VD4obV9lbGVtZW50c1tpXSkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fZWxlbWVudHNbaV0uZ2V0
KCkpOwpAQCAtNTcsNiArNjUsMTIgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
T2JqZWN0Pj4mIGVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50czsgfQogICAgIFZl
Y3RvcjxSZWZQdHI8T2JqZWN0Pj4mIGVsZW1lbnRzKCkgeyByZXR1cm4gbV9lbGVtZW50czsgfQog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUKKyAgICBGaWx0ZXJJdGVyYXRvcjxk
ZWNsdHlwZSgmaXNUeXBlPFQ+KSwgZGVjbHR5cGUoJmdldE9iamVjdDxUPiksIFZlY3RvcjxSZWZQ
dHI8T2JqZWN0Pj46OmNvbnN0X2l0ZXJhdG9yPjo6SXRlcmFibGUgZWxlbWVudHNPZlR5cGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVuYW1lIEZpbHRlckl0ZXJhdG9yPGRlY2x0eXBlKCZp
c1R5cGU8VD4pLCBkZWNsdHlwZSgmZ2V0T2JqZWN0PFQ+KSwgVmVjdG9yPFJlZlB0cjxPYmplY3Q+
Pjo6Y29uc3RfaXRlcmF0b3I+OjpJdGVyYWJsZTo6SXRlcmFibGUoRmlsdGVySXRlcmF0b3I8ZGVj
bHR5cGUoJmlzVHlwZTxUPiksIGRlY2x0eXBlKCZnZXRPYmplY3Q8VD4pLCBWZWN0b3I8UmVmUHRy
PE9iamVjdD4+Ojpjb25zdF9pdGVyYXRvcj4oaXNUeXBlPFQ+LCBnZXRPYmplY3Q8VD4sIG1fZWxl
bWVudHMuYmVnaW4oKSwgbV9lbGVtZW50cy5lbmQoKSkpOworICAgIH0KKwogcHJpdmF0ZToKICAg
ICBleHBsaWNpdCBBcnJheShWZWN0b3I8UmVmUHRyPE9iamVjdD4+IGVsZW1lbnRzKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0ZpbHRlckl0ZXJhdG9yLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvRmlsdGVySXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5kNGUxMTM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0ZpbHRlckl0ZXJhdG9yLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgRmlsdGVySXRlcmF0b3JfaAorI2RlZmluZSBGaWx0ZXJJdGVyYXRvcl9oCisKKyNpbmNsdWRl
ICJBUElPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgQVBJIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlLCB0eXBlbmFtZSBDYXN0LCB0eXBlbmFtZSBJ
dGVyYXRvcj4KK2NsYXNzIEZpbHRlckl0ZXJhdG9yIHsKK3ByaXZhdGU6CisgICAgY29uc3QgUHJl
ZGljYXRlIG1fcHJlZDsKKyAgICBjb25zdCBDYXN0IG1fY2FzdDsKKyAgICBJdGVyYXRvciBtX2l0
ZXI7CisgICAgSXRlcmF0b3IgbV9lbmQ7CisKK3B1YmxpYzoKKyAgICBGaWx0ZXJJdGVyYXRvcihQ
cmVkaWNhdGUgcHJlZCwgQ2FzdCBjYXN0LCBJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQor
ICAgICAgICA6IG1fcHJlZChzdGQ6Om1vdmUocHJlZCkpCisgICAgICAgICwgbV9jYXN0KHN0ZDo6
bW92ZShjYXN0KSkKKyAgICAgICAgLCBtX2l0ZXIoc3RkOjptb3ZlKGJlZ2luKSkKKyAgICAgICAg
LCBtX2VuZChzdGQ6Om1vdmUoZW5kKSkKKyAgICB7CisgICAgICAgIHdoaWxlIChtX2l0ZXIgIT0g
bV9lbmQgJiYgIW1fcHJlZCgqbV9pdGVyKSkKKyAgICAgICAgICAgICsrbV9pdGVyOworICAgIH0K
KworICAgIEZpbHRlckl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIHdoaWxl
IChtX2l0ZXIgIT0gbV9lbmQpIHsKKyAgICAgICAgICAgICsrbV9pdGVyOworICAgICAgICAgICAg
aWYgKG1faXRlciA9PSBtX2VuZCB8fCBtX3ByZWQoKm1faXRlcikpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGF1
dG8gb3BlcmF0b3IqKCkgY29uc3QgLT4gY29uc3QgZGVjbHR5cGUobV9jYXN0KCptX2l0ZXIpKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXRlciAhPSBtX2VuZCk7CisgICAgICAgIEFTU0VSVCht
X3ByZWQoKm1faXRlcikpOworICAgICAgICByZXR1cm4gbV9jYXN0KCptX2l0ZXIpOworICAgIH0K
KworICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oRmlsdGVySXRlcmF0b3ImIG90aGVyKSBjb25z
dCB7IHJldHVybiBtX2l0ZXIgPT0gb3RoZXIubV9pdGVyOyB9CisgICAgaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShGaWx0ZXJJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faXRlciAhPSBv
dGhlci5tX2l0ZXI7IH0KKworICAgIGNsYXNzIEl0ZXJhYmxlIHsKKyAgICBwcml2YXRlOgorICAg
ICAgICBGaWx0ZXJJdGVyYXRvciBtX2l0ZXIsIG1fZW5kOworICAgIHB1YmxpYzoKKyAgICAgICAg
SXRlcmFibGUoRmlsdGVySXRlcmF0b3IgaXRlcikKKyAgICAgICAgICAgIDogbV9pdGVyKGl0ZXIp
CisgICAgICAgICAgICAsIG1fZW5kKEZpbHRlckl0ZXJhdG9yKGl0ZXIubV9wcmVkLCBpdGVyLm1f
Y2FzdCwgaXRlci5tX2VuZCwgaXRlci5tX2VuZCkpCisgICAgICAgIHsgfQorICAgICAgICBGaWx0
ZXJJdGVyYXRvciYgYmVnaW4oKSB7IHJldHVybiBtX2l0ZXI7IH0KKyAgICAgICAgRmlsdGVySXRl
cmF0b3ImIGVuZCgpIHsgcmV0dXJuIG1fZW5kOyB9CisgICAgfTsKKworfTsKKworfSAvLyBuYW1l
c3BhY2UgQVBJCisKKyNlbmRpZiAvLyBGaWx0ZXJJdGVyYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjI3MDdiZC4uOGQ4
NGZkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNjY5LDYgKzY2OSw3IEBACiAJCTZFRTg0OUM4MTM2OEQ5MzkwMDM4RDQ4MSAv
KiBXS0luc3BlY3RvclByaXZhdGVNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZFRTg0OUM2MTM2OEQ5MkQwMDM4RDQ4MSAvKiBXS0luc3BlY3RvclBy
aXZhdGVNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjhFODZGMTE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOEU4NkVGMTc5NTE4
OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovOyB9OwogCQk3MjhFODZGMjE3OTUx
ODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjhFODZGMDE3OTUxODhDMDA4Nzg3OUUgLyogV2Vi
Q29sb3JQaWNrZXJNYWMubW0gKi87IH07CisJCTc1MkE4MDc3MTgzRDZEQTcwMDNENjU5RSAvKiBG
aWx0ZXJJdGVyYXRvci5oIGluIENvcHkgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzUyQTgwNzYxODNENkRBNzAwM0Q2NTlFIC8qIEZpbHRlckl0ZXJhdG9yLmggKi87
IH07CiAJCTc1NTQyMkJCMTgwNjJCOUMwMDQ2RjZBOCAvKiBXS09yaWdpbkRhdGFNYW5hZ2VyLmNw
cCBpbiBDb3B5IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTQy
MkI5MTgwNjJCOUMwMDQ2RjZBOCAvKiBXS09yaWdpbkRhdGFNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJ
NzU1NDIyQkMxODA2MkI5QzAwNDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuaCBpbiBDb3B5
IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTQyMkJBMTgwNjJC
OUMwMDQ2RjZBOCAvKiBXS09yaWdpbkRhdGFNYW5hZ2VyLmggKi87IH07CiAJCTc1NTQyMkJEMTgw
NjJCQjIwMDQ2RjZBOCAvKiBXS09yaWdpbkRhdGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTQyMkI5MTgwNjJCOUMwMDQ2RjZBOCAv
KiBXS09yaWdpbkRhdGFNYW5hZ2VyLmNwcCAqLzsgfTsKQEAgLTE0NTIsNiArMTQ1Myw3IEBACiAJ
CQkJNTFBNjBCMkExODBDQ0VCNTAwRjNCRjUwIC8qIERhdGFiYXNlUHJvY2Vzcy5hcHAgaW4gQ29w
eSBGaWxlcyAqLywKIAkJCQk3NTU0MjJDMzE4MDYyQkU0MDA0NkY2QTggLyogV2ViT3JpZ2luRGF0
YU1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBpbiBDb3B5IEZpbGVzICovLAogCQkJCTFBNTBEQjY2
MTEwQTNENTcwMDBEM0ZFNSAvKiBXZWJQcm9jZXNzLmFwcCBpbiBDb3B5IEZpbGVzICovLAorCQkJ
CTc1MkE4MDc3MTgzRDZEQTcwMDNENjU5RSAvKiBGaWx0ZXJJdGVyYXRvci5oIGluIENvcHkgRmls
ZXMgKi8sCiAJCQkJNzU1NDIyQkIxODA2MkI5QzAwNDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFn
ZXIuY3BwIGluIENvcHkgRmlsZXMgKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJDb3B5IEZpbGVzIjsK
QEAgLTIyMjIsNiArMjIyNCw3IEBACiAJCTZFRTg0OUM2MTM2OEQ5MkQwMDM4RDQ4MSAvKiBXS0lu
c3BlY3RvclByaXZhdGVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tJ
bnNwZWN0b3JQcml2YXRlTWFjLmg7IHBhdGggPSBtYWMvV0tJbnNwZWN0b3JQcml2YXRlTWFjLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAv
KiBXZWJDb2xvclBpY2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJDb2xvclBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZG
MDE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzUyQTgwNzYxODNENkRBNzAwM0Q2NTlFIC8qIEZpbHRlckl0
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckl0ZXJhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1NTQyMkI5MTgwNjJCOUMwMDQ2RjZB
OCAvKiBXS09yaWdpbkRhdGFNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdLT3JpZ2luRGF0YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3NTU0MjJCQTE4MDYyQjlDMDA0NkY2QTggLyogV0tPcmlnaW5EYXRhTWFuYWdlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS09yaWdpbkRhdGFNYW5hZ2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1NTQyMkJFMTgwNjJCRTQwMDQ2RjZBOCAv
KiBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzM5NSw2ICszMzk4LDcgQEAKIAkJCQkwRkI2NTkyMjEyMDhCNERC
MDA0NDgxNkMgLyogRHJhd2luZ0FyZWFJbmZvLmggKi8sCiAJCQkJOENGRUNFOTMxNDkwRjE0MDAw
MkFBQTMyIC8qIEVkaXRvclN0YXRlLmNwcCAqLywKIAkJCQkxQUE0MUFCNDEyQzAyRUM0MDAyQkU2
N0IgLyogRWRpdG9yU3RhdGUuaCAqLywKKwkJCQk3NTJBODA3NjE4M0Q2REE3MDAzRDY1OUUgLyog
RmlsdGVySXRlcmF0b3IuaCAqLywKIAkJCQlCQ0U4MUQ4QTEzMTlGN0VGMDAyNDE5MTAgLyogRm9u
dEluZm8uY3BwICovLAogCQkJCUJDRTgxRDhCMTMxOUY3RUYwMDI0MTkxMCAvKiBGb250SW5mby5o
ICovLAogCQkJCTc2MkI3NDgxMTIwQkJBMDEwMDgxOTMzOSAvKiBGb250U21vb3RoaW5nTGV2ZWwu
aCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggZWU3MzkwNS4uOTczYzQwMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHAKQEAgLTQ4NSwxMSArNDg1LDggQEAgc3RhdGljIFZlY3RvcjxTdHJp
bmc+IHRvU3RyaW5nVmVjdG9yKEFQSTo6QXJyYXkqIHBhdHRlcm5zKQogICAgICAgICByZXR1cm4g
cGF0dGVybnNWZWN0b3I7CiAKICAgICBwYXR0ZXJuc1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHNpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAg
ICAgIFdlYlN0cmluZyogZW50cnkgPSBwYXR0ZXJucy0+YXQ8V2ViU3RyaW5nPihpKTsKLSAgICAg
ICAgaWYgKGVudHJ5KQotICAgICAgICAgICAgcGF0dGVybnNWZWN0b3IudW5jaGVja2VkQXBwZW5k
KGVudHJ5LT5zdHJpbmcoKSk7Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBw
YXR0ZXJucy0+ZWxlbWVudHNPZlR5cGU8V2ViU3RyaW5nPigpKQorICAgICAgICBwYXR0ZXJuc1Zl
Y3Rvci51bmNoZWNrZWRBcHBlbmQoZW50cnktPnN0cmluZygpKTsKICAgICByZXR1cm4gcGF0dGVy
bnNWZWN0b3I7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9y
Q2xpZW50LmNwcAppbmRleCBkNmE2Nzg5Li5jZmY1ZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNs
aWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwCkBAIC0xNTQsMjAgKzE1NCwxMiBAQCB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6Z2V0UGFzdGVib2FyZERhdGFGb3JS
YW5nZShXZWJQYWdlKiBwYWdlLCBSYQogCiAgICAgICAgIEFTU0VSVCh0eXBlc0FycmF5LT5zaXpl
KCkgPT0gZGF0YUFycmF5LT5zaXplKCkpOwogCi0gICAgICAgIHNpemVfdCBzaXplID0gdHlwZXNB
cnJheS0+c2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICAgICAgV2ViU3RyaW5nKiB0eXBlID0gdHlwZXNBcnJheS0+YXQ8V2ViU3RyaW5n
PihpKTsKLSAgICAgICAgICAgIGlmICh0eXBlKQotICAgICAgICAgICAgICAgIHBhc3RlYm9hcmRU
eXBlcy5hcHBlbmQodHlwZS0+c3RyaW5nKCkpOwotICAgICAgICB9CisgICAgICAgIGZvciAoY29u
c3QgYXV0byYgdHlwZSA6IHR5cGVzQXJyYXktPmVsZW1lbnRzT2ZUeXBlPFdlYlN0cmluZz4oKSkK
KyAgICAgICAgICAgIHBhc3RlYm9hcmRUeXBlcy5hcHBlbmQodHlwZS0+c3RyaW5nKCkpOwogCi0g
ICAgICAgIHNpemUgPSBkYXRhQXJyYXktPnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFdlYkRhdGEqIGl0ZW0gPSBkYXRhQXJy
YXktPmF0PFdlYkRhdGE+KGkpOwotICAgICAgICAgICAgaWYgKGl0ZW0pIHsKLSAgICAgICAgICAg
ICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShp
dGVtLT5ieXRlcygpLCBpdGVtLT5zaXplKCkpOwotICAgICAgICAgICAgICAgIHBhc3RlYm9hcmRE
YXRhLmFwcGVuZChidWZmZXIpOwotICAgICAgICAgICAgfQorICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIGl0ZW0gOiBkYXRhQXJyYXktPmVsZW1lbnRzT2ZUeXBlPFdlYkRhdGE+KCkpIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KGl0ZW0tPmJ5dGVzKCksIGl0ZW0tPnNpemUoKSk7CisgICAgICAgICAgICBwYXN0ZWJvYXJkRGF0
YS5hcHBlbmQoYnVmZmVyKTsKICAgICAgICAgfQogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218200</attachid>
            <date>2013-12-02 11:37:48 -0800</date>
            <delta_ts>2013-12-02 19:43:08 -0800</delta_ts>
            <desc>split out IteratorPair</desc>
            <filename>iterator.09.diff</filename>
            <type>text/plain</type>
            <size>18690</size>
            <attacher name="Martin Hock">mhock</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4OGZhYTBiLi45MjNmMWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTMtMTItMDIgIE1hcnRpbiBIb2NrICA8bWhvY2tAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhYmlsaXR5IHRvIGl0ZXJhdGUgb3ZlciBBUEk6OkFycmF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ1MzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogU2hhcmVkL0FQSUFycmF5Lmg6CisgICAgICAgICogU2hhcmVkL0ZpbHRlckl0ZXJh
dG9yLmg6CisgICAgICAgICogU2hhcmVkL0l0ZXJhdG9yUGFpci5oOgorICAgICAgICAqIFdlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dG9TdHJpbmdW
ZWN0b3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50OjpnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKToKKwogMjAxMy0xMi0w
MSAgQ2hhbmdTZW9rIE9oICA8Y2hhbmdzZW9rLm9oQGNvbGxhYm9yYS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCBHdGsgcG9ydCBCdWlsZCBmaXggYWZ0ZXIgcjE1OTkwMwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmxpc3QuYW0KaW5kZXggOWQxNTg1ZS4uZjQ0NWNlZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC00MjIsNiArNDIyLDcgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwRXJyb3JzLmgg
XAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9FZGl0b3JTdGF0ZS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRmlsdGVy
SXRlcmF0b3IuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0ZvbnRTbW9vdGhpbmdMZXZlbC5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoLmggXAogCVNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAgXApAQCAt
NDM4LDYgKzQzOSw3IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvU2hh
cmVkL0ltYWdlT3B0aW9ucy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW1tdXRhYmxlRGlj
dGlvbmFyeS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbW11dGFibGVEaWN0aW9uYXJ5
LmggXAorCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JdGVyYXRvclBhaXIuaCBcCiAJU291cmNlL1dl
YktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVk
L011dGFibGVEaWN0aW9uYXJ5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL011dGFibGVE
aWN0aW9uYXJ5LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSUFycmF5
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJQXJyYXkuaAppbmRleCA0MGUwOTE2Li44YWVm
NDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJQXJyYXkuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJQXJyYXkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsOCBAQAogI2RlZmluZSBB
UElBcnJheV9oCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJGaWx0ZXJJdGVy
YXRvci5oIgorI2luY2x1ZGUgIkl0ZXJhdG9yUGFpci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CkBAIC0zNCw2ICszNiwxMyBAQAogbmFtZXNwYWNlIEFQSSB7CiAKIGNsYXNzIEFycmF5IEZJTkFM
IDogcHVibGljIFR5cGVkT2JqZWN0PE9iamVjdDo6VHlwZTo6QXJyYXk+IHsKK3ByaXZhdGU6Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgaW5saW5lIGNvbnN0IFQgKmdldE9i
amVjdChjb25zdCBSZWZQdHI8T2JqZWN0PiYgb2JqZWN0KSB7IHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBUICo+KG9iamVjdC5nZXQoKSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIGlubGluZSBib29sIGlzVHlwZShjb25zdCBSZWZQdHI8T2JqZWN0PiAmb2JqZWN0
KSB7IHJldHVybiBvYmplY3QtPnR5cGUoKSA9PSBUOjpBUElUeXBlOyB9CisKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheT4gY3JlYXRlKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QXJyYXk+IGNyZWF0ZShWZWN0b3I8UmVmUHRyPE9iamVjdD4+IGVsZW1lbnRzKTsKQEAgLTQ1
LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgVCogYXQo
c2l6ZV90IGkpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAobV9lbGVtZW50c1tpXS0+dHlwZSgp
ICE9IFQ6OkFQSVR5cGUpCisgICAgICAgIGlmICghaXNUeXBlPFQ+KG1fZWxlbWVudHNbaV0pKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQqPihtX2VsZW1lbnRzW2ldLmdldCgpKTsKQEAgLTU3LDYgKzY2LDEyIEBAIHB1YmxpYzoKICAg
ICBjb25zdCBWZWN0b3I8UmVmUHRyPE9iamVjdD4+JiBlbGVtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fZWxlbWVudHM7IH0KICAgICBWZWN0b3I8UmVmUHRyPE9iamVjdD4+JiBlbGVtZW50cygpIHsg
cmV0dXJuIG1fZWxlbWVudHM7IH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgSXRl
cmF0b3JQYWlyPEZpbHRlckl0ZXJhdG9yPGRlY2x0eXBlKCZpc1R5cGU8VD4pLCBkZWNsdHlwZSgm
Z2V0T2JqZWN0PFQ+KSwgVmVjdG9yPFJlZlB0cjxPYmplY3Q+Pjo6Y29uc3RfaXRlcmF0b3I+PiBl
bGVtZW50c09mVHlwZSgpCisgICAgeworICAgICAgICByZXR1cm4gSXRlcmF0b3JQYWlyPEZpbHRl
ckl0ZXJhdG9yPGRlY2x0eXBlKCZpc1R5cGU8VD4pLCBkZWNsdHlwZSgmZ2V0T2JqZWN0PFQ+KSwg
VmVjdG9yPFJlZlB0cjxPYmplY3Q+Pjo6Y29uc3RfaXRlcmF0b3I+PihGaWx0ZXJJdGVyYXRvcjxk
ZWNsdHlwZSgmaXNUeXBlPFQ+KSwgZGVjbHR5cGUoJmdldE9iamVjdDxUPiksIFZlY3RvcjxSZWZQ
dHI8T2JqZWN0Pj46OmNvbnN0X2l0ZXJhdG9yPihpc1R5cGU8VD4sIGdldE9iamVjdDxUPiwgbV9l
bGVtZW50cy5iZWdpbigpLCBtX2VsZW1lbnRzLmVuZCgpKSwgRmlsdGVySXRlcmF0b3I8ZGVjbHR5
cGUoJmlzVHlwZTxUPiksIGRlY2x0eXBlKCZnZXRPYmplY3Q8VD4pLCBWZWN0b3I8UmVmUHRyPE9i
amVjdD4+Ojpjb25zdF9pdGVyYXRvcj4oaXNUeXBlPFQ+LCBnZXRPYmplY3Q8VD4sIG1fZWxlbWVu
dHMuZW5kKCksIG1fZWxlbWVudHMuZW5kKCkpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgZXhw
bGljaXQgQXJyYXkoVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiBlbGVtZW50cyk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9GaWx0ZXJJdGVyYXRvci5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0ZpbHRlckl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZGVmYzg3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9G
aWx0ZXJJdGVyYXRvci5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZp
bHRlckl0ZXJhdG9yX2gKKyNkZWZpbmUgRmlsdGVySXRlcmF0b3JfaAorCisjaW5jbHVkZSAiQVBJ
T2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEFQSSB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFByZWRpY2F0ZSwgdHlwZW5hbWUgQ2FzdCwgdHlwZW5hbWUgSXRlcmF0
b3I+CitjbGFzcyBGaWx0ZXJJdGVyYXRvciB7Citwcml2YXRlOgorICAgIGNvbnN0IFByZWRpY2F0
ZSBtX3ByZWQ7CisgICAgY29uc3QgQ2FzdCBtX2Nhc3Q7CisgICAgSXRlcmF0b3IgbV9pdGVyOwor
ICAgIEl0ZXJhdG9yIG1fZW5kOworCitwdWJsaWM6CisgICAgRmlsdGVySXRlcmF0b3IoUHJlZGlj
YXRlIHByZWQsIENhc3QgY2FzdCwgSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKKyAgICAg
ICAgOiBtX3ByZWQoc3RkOjptb3ZlKHByZWQpKQorICAgICAgICAsIG1fY2FzdChzdGQ6Om1vdmUo
Y2FzdCkpCisgICAgICAgICwgbV9pdGVyKHN0ZDo6bW92ZShiZWdpbikpCisgICAgICAgICwgbV9l
bmQoc3RkOjptb3ZlKGVuZCkpCisgICAgeworICAgICAgICB3aGlsZSAobV9pdGVyICE9IG1fZW5k
ICYmICFtX3ByZWQoKm1faXRlcikpCisgICAgICAgICAgICArK21faXRlcjsKKyAgICB9CisKKyAg
ICBGaWx0ZXJJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgICB3aGlsZSAobV9p
dGVyICE9IG1fZW5kKSB7CisgICAgICAgICAgICArK21faXRlcjsKKyAgICAgICAgICAgIGlmICht
X2l0ZXIgPT0gbV9lbmQgfHwgbV9wcmVkKCptX2l0ZXIpKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBhdXRvIG9w
ZXJhdG9yKigpIGNvbnN0IC0+IGNvbnN0IGRlY2x0eXBlKG1fY2FzdCgqbV9pdGVyKSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2l0ZXIgIT0gbV9lbmQpOworICAgICAgICBBU1NFUlQobV9wcmVk
KCptX2l0ZXIpKTsKKyAgICAgICAgcmV0dXJuIG1fY2FzdCgqbV9pdGVyKTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KEZpbHRlckl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV9pdGVyID09IG90aGVyLm1faXRlcjsgfQorICAgIGlubGluZSBib29sIG9wZXJhdG9y
IT0oRmlsdGVySXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2l0ZXIgIT0gb3RoZXIu
bV9pdGVyOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBBUEkKKworI2VuZGlmIC8vIEZpbHRlckl0
ZXJhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9JdGVyYXRvclBhaXIu
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9JdGVyYXRvclBhaXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5kMmI4MTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL0l0ZXJhdG9yUGFpci5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gY2xhc3MgSXRlcmF0b3JQYWlyIHsKK3B1Ymxp
YzoKKyAgICBJdGVyYXRvclBhaXIoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKKyAgICAg
ICAgOiBtX2JlZ2luKHN0ZDo6bW92ZShiZWdpbikpCisgICAgICAgICwgbV9lbmQoc3RkOjptb3Zl
KGVuZCkpCisgICAgeworICAgIH0KKworICAgIEl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9i
ZWdpbjsgfQorICAgIEl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fZW5kOyB9Citwcml2YXRlOgor
ICAgIEl0ZXJhdG9yIG1fYmVnaW4sIG1fZW5kOworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MjcwN2JkLi4zZmE2ZmY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC02NjksNiArNjY5LDcgQEAKIAkJNkVFODQ5QzgxMzY4RDkzOTAwMzhENDgxIC8qIFdLSW5z
cGVjdG9yUHJpdmF0ZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkVFODQ5QzYxMzY4RDkyRDAwMzhENDgxIC8qIFdLSW5zcGVjdG9yUHJpdmF0ZU1h
Yy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcy
OEU4NkYxMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI4RTg2RUYxNzk1MTg4QzAwODc4
NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi87IH07CiAJCTcyOEU4NkYyMTc5NTE4OEMwMDg3
ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBp
Y2tlck1hYy5tbSAqLzsgfTsKKwkJNzUyQTgwNzcxODNENkRBNzAwM0Q2NTlFIC8qIEZpbHRlckl0
ZXJhdG9yLmggaW4gQ29weSBGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3NTJBODA3NjE4M0Q2REE3MDAzRDY1OUUgLyogRmlsdGVySXRlcmF0b3IuaCAqLzsgfTsKIAkJ
NzU1NDIyQkIxODA2MkI5QzAwNDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuY3BwIGluIENv
cHkgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1NDIyQjkxODA2
MkI5QzAwNDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuY3BwICovOyB9OwogCQk3NTU0MjJC
QzE4MDYyQjlDMDA0NkY2QTggLyogV0tPcmlnaW5EYXRhTWFuYWdlci5oIGluIENvcHkgRmlsZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1NDIyQkExODA2MkI5QzAwNDZG
NkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuaCAqLzsgfTsKIAkJNzU1NDIyQkQxODA2MkJCMjAw
NDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1NDIyQjkxODA2MkI5QzAwNDZGNkE4IC8qIFdLT3Jp
Z2luRGF0YU1hbmFnZXIuY3BwICovOyB9OwpAQCAtNjc2LDYgKzY3Nyw3IEBACiAJCTc1NTQyMkM0
MTgwNjJCRjkwMDQ2RjZBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTQyMkJFMTgwNjJCRTQw
MDQ2RjZBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmNwcCAqLzsgfTsKIAkJNzU1NDIy
Q0IxODA2NTAwMjAwNDZGNkE4IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTQyMkM2MTgwNjRGRkMwMDQ2
RjZBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlci5jcHAgKi87IH07CiAJCTc1NTQyMkNDMTgwNzcz
Q0UwMDQ2RjZBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1NDIyQzcxODA2NEZGQzAwNDZGNkE4IC8qIFdl
Yk9yaWdpbkRhdGFNYW5hZ2VyLmggKi87IH07CisJCTc1N0FGOTc4MTg0RDEzMTQwMEU2MzE2RSAv
KiBJdGVyYXRvclBhaXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc1N0FGOTc2MTg0RDEzMDUwMEU2MzE2RSAvKiBJdGVyYXRvclBhaXIuaCAqLzsgfTsK
IAkJNzU5Q0NENTgxODA4RjE2NDAwNzhFOEE4IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlD
aGFuZ2VDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzU5Q0NENTQxODA4RjE2MDAwNzhFOEE4IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJv
eHlDaGFuZ2VDbGllbnQuY3BwICovOyB9OwogCQk3NTlDQ0Q1OTE4MDhGMTY5MDA3OEU4QTggLyog
V2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eUNoYW5nZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU5Q0NENTUxODA4RjE2MDAwNzhFOEE4IC8q
IFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlDaGFuZ2VDbGllbnQuaCAqLzsgfTsKIAkJNzU5Q0NE
NUExODA4RjYxNjAwNzhFOEE4IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTQyMkJGMTgwNjJCRTQw
MDQ2RjZBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmggKi87IH07CkBAIC0xNDUyLDYg
KzE0NTQsNyBAQAogCQkJCTUxQTYwQjJBMTgwQ0NFQjUwMEYzQkY1MCAvKiBEYXRhYmFzZVByb2Nl
c3MuYXBwIGluIENvcHkgRmlsZXMgKi8sCiAJCQkJNzU1NDIyQzMxODA2MkJFNDAwNDZGNkE4IC8q
IFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gaW4gQ29weSBGaWxlcyAqLywK
IAkJCQkxQTUwREI2NjExMEEzRDU3MDAwRDNGRTUgLyogV2ViUHJvY2Vzcy5hcHAgaW4gQ29weSBG
aWxlcyAqLywKKwkJCQk3NTJBODA3NzE4M0Q2REE3MDAzRDY1OUUgLyogRmlsdGVySXRlcmF0b3Iu
aCBpbiBDb3B5IEZpbGVzICovLAogCQkJCTc1NTQyMkJCMTgwNjJCOUMwMDQ2RjZBOCAvKiBXS09y
aWdpbkRhdGFNYW5hZ2VyLmNwcCBpbiBDb3B5IEZpbGVzICovLAogCQkJKTsKIAkJCW5hbWUgPSAi
Q29weSBGaWxlcyI7CkBAIC0yMjIyLDYgKzIyMjUsNyBAQAogCQk2RUU4NDlDNjEzNjhEOTJEMDAz
OEQ0ODEgLyogV0tJbnNwZWN0b3JQcml2YXRlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oOyBwYXRoID0gbWFjL1dLSW5zcGVjdG9y
UHJpdmF0ZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZFRjE3OTUx
ODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI4RTg2RjAxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc1MkE4MDc2MTgzRDZEQTcwMDNENjU5
RSAvKiBGaWx0ZXJJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
aWx0ZXJJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NTU0MjJCOTE4
MDYyQjlDMDA0NkY2QTggLyogV0tPcmlnaW5EYXRhTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS09yaWdpbkRhdGFNYW5hZ2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzU1NDIyQkExODA2MkI5QzAwNDZGNkE4IC8qIFdLT3JpZ2lu
RGF0YU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tPcmlnaW5E
YXRhTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NTU0MjJCRTE4MDYy
QkU0MDA0NkY2QTggLyogV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMzAsNiArMjIzNCw3IEBACiAJCTc1NTQy
MkM2MTgwNjRGRkMwMDQ2RjZBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJPcmlnaW5EYXRhTWFuYWdlci5jcHA7IHBh
dGggPSBPcmlnaW5EYXRhL1dlYk9yaWdpbkRhdGFNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzU1NDIyQzcxODA2NEZGQzAwNDZGNkE4IC8qIFdlYk9yaWdpbkRhdGFN
YW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYk9yaWdpbkRhdGFN
YW5hZ2VyLmg7IHBhdGggPSBPcmlnaW5EYXRhL1dlYk9yaWdpbkRhdGFNYW5hZ2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1NTQyMkM4MTgwNjRGRkMwMDQ2RjZBOCAvKiBXZWJP
cmlnaW5EYXRhTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJP
cmlnaW5EYXRhTWFuYWdlci5tZXNzYWdlcy5pbjsgcGF0aCA9IE9yaWdpbkRhdGEvV2ViT3JpZ2lu
RGF0YU1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc1
N0FGOTc2MTg0RDEzMDUwMEU2MzE2RSAvKiBJdGVyYXRvclBhaXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0b3JQYWlyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc1OUNDRDU0MTgwOEYxNjAwMDc4RThBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlclBy
b3h5Q2hhbmdlQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlDaGFuZ2VDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3NTlDQ0Q1NTE4MDhGMTYwMDA3OEU4QTggLyogV2ViT3JpZ2luRGF0
YU1hbmFnZXJQcm94eUNoYW5nZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5Q2hhbmdlQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc1RTc0OUU1MTgwREJCOTgwMDA4OEJBNiAvKiBXZWJPcmlnaW5E
YXRhTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJPcmlnaW5EYXRhTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzk1LDYgKzM0MDAsNyBAQAogCQkJCTBGQjY1OTIy
MTIwOEI0REIwMDQ0ODE2QyAvKiBEcmF3aW5nQXJlYUluZm8uaCAqLywKIAkJCQk4Q0ZFQ0U5MzE0
OTBGMTQwMDAyQUFBMzIgLyogRWRpdG9yU3RhdGUuY3BwICovLAogCQkJCTFBQTQxQUI0MTJDMDJF
QzQwMDJCRTY3QiAvKiBFZGl0b3JTdGF0ZS5oICovLAorCQkJCTc1MkE4MDc2MTgzRDZEQTcwMDNE
NjU5RSAvKiBGaWx0ZXJJdGVyYXRvci5oICovLAogCQkJCUJDRTgxRDhBMTMxOUY3RUYwMDI0MTkx
MCAvKiBGb250SW5mby5jcHAgKi8sCiAJCQkJQkNFODFEOEIxMzE5RjdFRjAwMjQxOTEwIC8qIEZv
bnRJbmZvLmggKi8sCiAJCQkJNzYyQjc0ODExMjBCQkEwMTAwODE5MzM5IC8qIEZvbnRTbW9vdGhp
bmdMZXZlbC5oICovLApAQCAtMzQwMiw2ICszNDA4LDcgQEAKIAkJCQlCQ0NGNkIyMzEyQzkzRTdB
MDA4RjlDMzUgLyogSW1hZ2VPcHRpb25zLmggKi8sCiAJCQkJQkNCQ0IwQ0MxMjE1RTMzQTAwREU1
OUNBIC8qIEltbXV0YWJsZURpY3Rpb25hcnkuY3BwICovLAogCQkJCUJDQkNCMENBMTIxNUUzMjEw
MERFNTlDQSAvKiBJbW11dGFibGVEaWN0aW9uYXJ5LmggKi8sCisJCQkJNzU3QUY5NzYxODREMTMw
NTAwRTYzMTZFIC8qIEl0ZXJhdG9yUGFpci5oICovLAogCQkJCTFBOTJEQzEwMTJGOEJBNDYwMDE3
QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggKi8sCiAJCQkJQkNCMEFFRTgxMjJGNTNFMzAwQjEz
NDFFIC8qIE11dGFibGVEaWN0aW9uYXJ5LmNwcCAqLywKIAkJCQlCQ0IwQUVFNzEyMkY1M0UzMDBC
MTM0MUUgLyogTXV0YWJsZURpY3Rpb25hcnkuaCAqLywKQEAgLTU3NDQsNiArNTc1MSw3IEBACiAJ
CQkJNTFEMTMwNTYxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXNwb25zZURhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUxNzkwODhGMTY5QkFBNkEwMDY5MDRDNyAvKiBTZWNJdGVtU2hpbS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTExRjhBN0IxMzhCNDYwOTAwQTk1RjQ0IC8qIFNlY0l0ZW1T
aGltTGlicmFyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzU3QUY5NzgxODREMTMxNDAwRTYzMTZF
IC8qIEl0ZXJhdG9yUGFpci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE3OTA4OTExNjlCQUE4MjAw
NjkwNEM3IC8qIFNlY0l0ZW1TaGltTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOEU2
OTBDMTY5QjU2M0YwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMThFNjkxODE2OUI2NjdCMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eU1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggZWU3MzkwNS4uOTcz
YzQwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTQ4NSwxMSArNDg1LDggQEAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IHRvU3RyaW5nVmVjdG9yKEFQSTo6QXJyYXkqIHBhdHRlcm5zKQogICAg
ICAgICByZXR1cm4gcGF0dGVybnNWZWN0b3I7CiAKICAgICBwYXR0ZXJuc1ZlY3Rvci5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHNpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIFdlYlN0cmluZyogZW50cnkgPSBwYXR0ZXJucy0+YXQ8V2ViU3RyaW5n
PihpKTsKLSAgICAgICAgaWYgKGVudHJ5KQotICAgICAgICAgICAgcGF0dGVybnNWZWN0b3IudW5j
aGVja2VkQXBwZW5kKGVudHJ5LT5zdHJpbmcoKSk7Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0
byYgZW50cnkgOiBwYXR0ZXJucy0+ZWxlbWVudHNPZlR5cGU8V2ViU3RyaW5nPigpKQorICAgICAg
ICBwYXR0ZXJuc1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoZW50cnktPnN0cmluZygpKTsKICAgICBy
ZXR1cm4gcGF0dGVybnNWZWN0b3I7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50LmNwcAppbmRleCBkNmE2Nzg5Li5jZmY1ZjRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwCkBAIC0xNTQsMjAg
KzE1NCwxMiBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6Z2V0UGFzdGVi
b2FyZERhdGFGb3JSYW5nZShXZWJQYWdlKiBwYWdlLCBSYQogCiAgICAgICAgIEFTU0VSVCh0eXBl
c0FycmF5LT5zaXplKCkgPT0gZGF0YUFycmF5LT5zaXplKCkpOwogCi0gICAgICAgIHNpemVfdCBz
aXplID0gdHlwZXNBcnJheS0+c2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICAgICAgV2ViU3RyaW5nKiB0eXBlID0gdHlwZXNBcnJheS0+
YXQ8V2ViU3RyaW5nPihpKTsKLSAgICAgICAgICAgIGlmICh0eXBlKQotICAgICAgICAgICAgICAg
IHBhc3RlYm9hcmRUeXBlcy5hcHBlbmQodHlwZS0+c3RyaW5nKCkpOwotICAgICAgICB9CisgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgdHlwZSA6IHR5cGVzQXJyYXktPmVsZW1lbnRzT2ZUeXBlPFdl
YlN0cmluZz4oKSkKKyAgICAgICAgICAgIHBhc3RlYm9hcmRUeXBlcy5hcHBlbmQodHlwZS0+c3Ry
aW5nKCkpOwogCi0gICAgICAgIHNpemUgPSBkYXRhQXJyYXktPnNpemUoKTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFdlYkRhdGEqIGl0
ZW0gPSBkYXRhQXJyYXktPmF0PFdlYkRhdGE+KGkpOwotICAgICAgICAgICAgaWYgKGl0ZW0pIHsK
LSAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShpdGVtLT5ieXRlcygpLCBpdGVtLT5zaXplKCkpOwotICAgICAgICAgICAgICAg
IHBhc3RlYm9hcmREYXRhLmFwcGVuZChidWZmZXIpOwotICAgICAgICAgICAgfQorICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBkYXRhQXJyYXktPmVsZW1lbnRzT2ZUeXBlPFdlYkRhdGE+
KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKGl0ZW0tPmJ5dGVzKCksIGl0ZW0tPnNpemUoKSk7CisgICAgICAgICAgICBw
YXN0ZWJvYXJkRGF0YS5hcHBlbmQoYnVmZmVyKTsKICAgICAgICAgfQogICAgIH0KIH0K
</data>
<flag name="review"
          id="241558"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218257</attachid>
            <date>2013-12-02 19:43:08 -0800</date>
            <delta_ts>2013-12-02 21:50:43 -0800</delta_ts>
            <desc>address Sam&apos;s comments</desc>
            <filename>iterator.10.diff</filename>
            <type>text/plain</type>
            <size>18717</size>
            <attacher name="Martin Hock">mhock</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3MjRhZTY4Li5lYTc4NjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTMtMTItMDIgIE1hcnRpbiBIb2NrICA8bWhvY2tAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhYmlsaXR5IHRvIGl0ZXJhdGUgb3ZlciBBUEk6OkFycmF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ1MzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogU2hhcmVkL0FQSUFycmF5Lmg6CisgICAgICAgICogU2hhcmVkL0ZpbHRlckl0ZXJh
dG9yLmg6CisgICAgICAgICogU2hhcmVkL0l0ZXJhdG9yUGFpci5oOgorICAgICAgICAqIFdlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dG9TdHJpbmdW
ZWN0b3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50OjpnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKToKKwogMjAxMy0xMi0w
MiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxh
Y2UgdXNlcyBvZiBXZWJLaXQ6OkFQSUNsaWVudCB3aXRoIEFQSTo6Q2xpZW50CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05V
bWFrZWZpbGUubGlzdC5hbQppbmRleCA5ZDE1ODVlLi5mNDQ1Y2VkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmxpc3QuYW0KQEAgLTQyMiw2ICs0MjIsNyBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXBFcnJvcnMu
aCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmNwcCBcCiAJU291cmNlL1dl
YktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9GaWx0
ZXJJdGVyYXRvci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRm9udFNtb290aGluZ0xldmVs
LmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Qcm9jZXNzRXhlY3V0YWJsZVBhdGguaCBcCiAJ
U291cmNlL1dlYktpdDIvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBcCkBA
IC00MzgsNiArNDM5LDcgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvSW1hZ2VPcHRpb25zLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbW11dGFibGVE
aWN0aW9uYXJ5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0ltbXV0YWJsZURpY3Rpb25h
cnkuaCBcCisJU291cmNlL1dlYktpdDIvU2hhcmVkL0l0ZXJhdG9yUGFpci5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTXV0YWJsZURpY3Rpb25hcnkuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTXV0YWJs
ZURpY3Rpb25hcnkuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJQXJy
YXkuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJheS5oCmluZGV4IDQwZTA5MTYuLjgy
ZDBlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJheS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElBcnJheS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw4IEBACiAjZGVmaW5l
IEFQSUFycmF5X2gKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIkZpbHRlckl0
ZXJhdG9yLmgiCisjaW5jbHVkZSAiSXRlcmF0b3JQYWlyLmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KQEAgLTM0LDYgKzM2LDEzIEBACiBuYW1lc3BhY2UgQVBJIHsKIAogY2xhc3MgQXJyYXkgRklO
QUwgOiBwdWJsaWMgVHlwZWRPYmplY3Q8T2JqZWN0OjpUeXBlOjpBcnJheT4geworcHJpdmF0ZToK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgVCogZ2V0
T2JqZWN0KGNvbnN0IFJlZlB0cjxPYmplY3Q+JiBvYmplY3QpIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IFQqPihvYmplY3QuZ2V0KCkpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1R5cGUoY29uc3QgUmVmUHRyPE9iamVjdD4mIG9iamVj
dCkgeyByZXR1cm4gb2JqZWN0LT50eXBlKCkgPT0gVDo6QVBJVHlwZTsgfQorCiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXk+IGNyZWF0ZSgpOwogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEFycmF5PiBjcmVhdGUoVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiBlbGVtZW50cyk7CkBAIC00
NSw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIFQqIGF0
KHNpemVfdCBpKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG1fZWxlbWVudHNbaV0tPnR5cGUo
KSAhPSBUOjpBUElUeXBlKQorICAgICAgICBpZiAoIWlzVHlwZTxUPihtX2VsZW1lbnRzW2ldKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUKj4obV9lbGVtZW50c1tpXS5nZXQoKSk7CkBAIC01Nyw2ICs2NiwxMiBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiYgZWxlbWVudHMoKSBjb25zdCB7IHJldHVy
biBtX2VsZW1lbnRzOyB9CiAgICAgVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiYgZWxlbWVudHMoKSB7
IHJldHVybiBtX2VsZW1lbnRzOyB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEl0
ZXJhdG9yUGFpcjxGaWx0ZXJJdGVyYXRvcjxkZWNsdHlwZSgmaXNUeXBlPFQ+KSwgZGVjbHR5cGUo
JmdldE9iamVjdDxUPiksIFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj46OmNvbnN0X2l0ZXJhdG9yPj4g
ZWxlbWVudHNPZlR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJhdG9yUGFpcjxGaWx0
ZXJJdGVyYXRvcjxkZWNsdHlwZSgmaXNUeXBlPFQ+KSwgZGVjbHR5cGUoJmdldE9iamVjdDxUPiks
IFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj46OmNvbnN0X2l0ZXJhdG9yPj4oRmlsdGVySXRlcmF0b3I8
ZGVjbHR5cGUoJmlzVHlwZTxUPiksIGRlY2x0eXBlKCZnZXRPYmplY3Q8VD4pLCBWZWN0b3I8UmVm
UHRyPE9iamVjdD4+Ojpjb25zdF9pdGVyYXRvcj4oaXNUeXBlPFQ+LCBnZXRPYmplY3Q8VD4sIG1f
ZWxlbWVudHMuYmVnaW4oKSwgbV9lbGVtZW50cy5lbmQoKSksIEZpbHRlckl0ZXJhdG9yPGRlY2x0
eXBlKCZpc1R5cGU8VD4pLCBkZWNsdHlwZSgmZ2V0T2JqZWN0PFQ+KSwgVmVjdG9yPFJlZlB0cjxP
YmplY3Q+Pjo6Y29uc3RfaXRlcmF0b3I+KGlzVHlwZTxUPiwgZ2V0T2JqZWN0PFQ+LCBtX2VsZW1l
bnRzLmVuZCgpLCBtX2VsZW1lbnRzLmVuZCgpKSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IEFycmF5KFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj4gZWxlbWVudHMpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRmlsdGVySXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9GaWx0ZXJJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmIwMTVkNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
RmlsdGVySXRlcmF0b3IuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBG
aWx0ZXJJdGVyYXRvcl9oCisjZGVmaW5lIEZpbHRlckl0ZXJhdG9yX2gKKworI2luY2x1ZGUgIkFQ
SU9iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBBUEkgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGUsIHR5cGVuYW1lIENhc3QsIHR5cGVuYW1lIEl0ZXJh
dG9yPgorY2xhc3MgRmlsdGVySXRlcmF0b3IgeworcHVibGljOgorICAgIEZpbHRlckl0ZXJhdG9y
KFByZWRpY2F0ZSBwcmVkLCBDYXN0IGNhc3QsIEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRvciBlbmQp
CisgICAgICAgIDogbV9wcmVkKHN0ZDo6bW92ZShwcmVkKSkKKyAgICAgICAgLCBtX2Nhc3Qoc3Rk
Ojptb3ZlKGNhc3QpKQorICAgICAgICAsIG1faXRlcihzdGQ6Om1vdmUoYmVnaW4pKQorICAgICAg
ICAsIG1fZW5kKHN0ZDo6bW92ZShlbmQpKQorICAgIHsKKyAgICAgICAgd2hpbGUgKG1faXRlciAh
PSBtX2VuZCAmJiAhbV9wcmVkKCptX2l0ZXIpKQorICAgICAgICAgICAgKyttX2l0ZXI7CisgICAg
fQorCisgICAgRmlsdGVySXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgICAgd2hp
bGUgKG1faXRlciAhPSBtX2VuZCkgeworICAgICAgICAgICAgKyttX2l0ZXI7CisgICAgICAgICAg
ICBpZiAobV9pdGVyID09IG1fZW5kIHx8IG1fcHJlZCgqbV9pdGVyKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAg
Y29uc3QgZGVjbHR5cGUoc3RkOjpkZWNsdmFsPENhc3Q+KCkoKnN0ZDo6ZGVjbHZhbDxJdGVyYXRv
cj4oKSkpIG9wZXJhdG9yKigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9pdGVyICE9
IG1fZW5kKTsKKyAgICAgICAgQVNTRVJUKG1fcHJlZCgqbV9pdGVyKSk7CisgICAgICAgIHJldHVy
biBtX2Nhc3QoKm1faXRlcik7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShG
aWx0ZXJJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faXRlciA9PSBvdGhlci5tX2l0
ZXI7IH0KKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KEZpbHRlckl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gbV9pdGVyICE9IG90aGVyLm1faXRlcjsgfQorCitwcml2YXRlOgorICAg
IGNvbnN0IFByZWRpY2F0ZSBtX3ByZWQ7CisgICAgY29uc3QgQ2FzdCBtX2Nhc3Q7CisgICAgSXRl
cmF0b3IgbV9pdGVyOworICAgIEl0ZXJhdG9yIG1fZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
QVBJCisKKyNlbmRpZiAvLyBGaWx0ZXJJdGVyYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvSXRlcmF0b3JQYWlyLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSXRlcmF0
b3JQYWlyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlMTBjNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9JdGVyYXRvclBhaXIuaApAQCAt
MCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IGNs
YXNzIEl0ZXJhdG9yUGFpciB7CitwdWJsaWM6CisgICAgSXRlcmF0b3JQYWlyKEl0ZXJhdG9yIGJl
Z2luLCBJdGVyYXRvciBlbmQpCisgICAgICAgIDogbV9iZWdpbihzdGQ6Om1vdmUoYmVnaW4pKQor
ICAgICAgICAsIG1fZW5kKHN0ZDo6bW92ZShlbmQpKQorICAgIHsKKyAgICB9CisKKyAgICBJdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIG1fYmVnaW47IH0KKyAgICBJdGVyYXRvciBlbmQoKSB7IHJl
dHVybiBtX2VuZDsgfQorCitwcml2YXRlOgorICAgIEl0ZXJhdG9yIG1fYmVnaW4sIG1fZW5kOwor
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCAyMGIxZTkwLi5jZTIwMDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02ODIsNiArNjgyLDcgQEAKIAkJNkVFODQ5
QzgxMzY4RDkzOTAwMzhENDgxIC8qIFdLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFODQ5QzYxMzY4RDkyRDAwMzhE
NDgxIC8qIFdLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOEU4NkYxMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJD
b2xvclBpY2tlck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi87
IH07CiAJCTcyOEU4NkYyMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOEU4NkYwMTc5
NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLzsgfTsKKwkJNzUyQTgwNzcx
ODNENkRBNzAwM0Q2NTlFIC8qIEZpbHRlckl0ZXJhdG9yLmggaW4gQ29weSBGaWxlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTJBODA3NjE4M0Q2REE3MDAzRDY1OUUgLyog
RmlsdGVySXRlcmF0b3IuaCAqLzsgfTsKIAkJNzU1NDIyQkIxODA2MkI5QzAwNDZGNkE4IC8qIFdL
T3JpZ2luRGF0YU1hbmFnZXIuY3BwIGluIENvcHkgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzU1NDIyQjkxODA2MkI5QzAwNDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1h
bmFnZXIuY3BwICovOyB9OwogCQk3NTU0MjJCQzE4MDYyQjlDMDA0NkY2QTggLyogV0tPcmlnaW5E
YXRhTWFuYWdlci5oIGluIENvcHkgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzU1NDIyQkExODA2MkI5QzAwNDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuaCAq
LzsgfTsKIAkJNzU1NDIyQkQxODA2MkJCMjAwNDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1NDIy
QjkxODA2MkI5QzAwNDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuY3BwICovOyB9OwpAQCAt
Njg5LDYgKzY5MCw3IEBACiAJCTc1NTQyMkM0MTgwNjJCRjkwMDQ2RjZBOCAvKiBXZWJPcmlnaW5E
YXRhTWFuYWdlclByb3h5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc1NTQyMkJFMTgwNjJCRTQwMDQ2RjZBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdl
clByb3h5LmNwcCAqLzsgfTsKIAkJNzU1NDIyQ0IxODA2NTAwMjAwNDZGNkE4IC8qIFdlYk9yaWdp
bkRhdGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc1NTQyMkM2MTgwNjRGRkMwMDQ2RjZBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlci5j
cHAgKi87IH07CiAJCTc1NTQyMkNDMTgwNzczQ0UwMDQ2RjZBOCAvKiBXZWJPcmlnaW5EYXRhTWFu
YWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1
NDIyQzcxODA2NEZGQzAwNDZGNkE4IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyLmggKi87IH07CisJ
CTc1N0FGOTc4MTg0RDEzMTQwMEU2MzE2RSAvKiBJdGVyYXRvclBhaXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1N0FGOTc2MTg0RDEzMDUwMEU2MzE2
RSAvKiBJdGVyYXRvclBhaXIuaCAqLzsgfTsKIAkJNzU5Q0NENTgxODA4RjE2NDAwNzhFOEE4IC8q
IFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlDaGFuZ2VDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU5Q0NENTQxODA4RjE2MDAwNzhFOEE4
IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlDaGFuZ2VDbGllbnQuY3BwICovOyB9OwogCQk3
NTlDQ0Q1OTE4MDhGMTY5MDA3OEU4QTggLyogV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eUNoYW5n
ZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzU5Q0NENTUxODA4RjE2MDAwNzhFOEE4IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlDaGFu
Z2VDbGllbnQuaCAqLzsgfTsKIAkJNzU5Q0NENUExODA4RjYxNjAwNzhFOEE4IC8qIFdlYk9yaWdp
bkRhdGFNYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc1NTQyMkJGMTgwNjJCRTQwMDQ2RjZBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdl
clByb3h5LmggKi87IH07CkBAIC0xNDY1LDYgKzE0NjcsNyBAQAogCQkJCTUxQTYwQjJBMTgwQ0NF
QjUwMEYzQkY1MCAvKiBEYXRhYmFzZVByb2Nlc3MuYXBwIGluIENvcHkgRmlsZXMgKi8sCiAJCQkJ
NzU1NDIyQzMxODA2MkJFNDAwNDZGNkE4IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkubWVz
c2FnZXMuaW4gaW4gQ29weSBGaWxlcyAqLywKIAkJCQkxQTUwREI2NjExMEEzRDU3MDAwRDNGRTUg
LyogV2ViUHJvY2Vzcy5hcHAgaW4gQ29weSBGaWxlcyAqLywKKwkJCQk3NTJBODA3NzE4M0Q2REE3
MDAzRDY1OUUgLyogRmlsdGVySXRlcmF0b3IuaCBpbiBDb3B5IEZpbGVzICovLAogCQkJCTc1NTQy
MkJCMTgwNjJCOUMwMDQ2RjZBOCAvKiBXS09yaWdpbkRhdGFNYW5hZ2VyLmNwcCBpbiBDb3B5IEZp
bGVzICovLAogCQkJKTsKIAkJCW5hbWUgPSAiQ29weSBGaWxlcyI7CkBAIC0yMjQ4LDYgKzIyNTEs
NyBAQAogCQk2RUU4NDlDNjEzNjhEOTJEMDAzOEQ0ODEgLyogV0tJbnNwZWN0b3JQcml2YXRlTWFj
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLSW5zcGVjdG9yUHJpdmF0ZU1h
Yy5oOyBwYXRoID0gbWFjL1dLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjhFODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJN
YWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RjAxNzk1MTg4QzAwODc4NzlF
IC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTc1MkE4MDc2MTgzRDZEQTcwMDNENjU5RSAvKiBGaWx0ZXJJdGVyYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3NTU0MjJCOTE4MDYyQjlDMDA0NkY2QTggLyogV0tPcmlnaW5EYXRh
TWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS09yaWdp
bkRhdGFNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzU1NDIyQkEx
ODA2MkI5QzAwNDZGNkE4IC8qIFdLT3JpZ2luRGF0YU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tPcmlnaW5EYXRhTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3NTU0MjJCRTE4MDYyQkU0MDA0NkY2QTggLyogV2ViT3JpZ2luRGF0YU1h
bmFnZXJQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJP
cmlnaW5EYXRhTWFuYWdlclByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIyNTYsNiArMjI2MCw3IEBACiAJCTc1NTQyMkM2MTgwNjRGRkMwMDQ2RjZBOCAvKiBXZWJPcmln
aW5EYXRhTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBX
ZWJPcmlnaW5EYXRhTWFuYWdlci5jcHA7IHBhdGggPSBPcmlnaW5EYXRhL1dlYk9yaWdpbkRhdGFN
YW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzU1NDIyQzcxODA2NEZG
QzAwNDZGNkE4IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdlYk9yaWdpbkRhdGFNYW5hZ2VyLmg7IHBhdGggPSBPcmlnaW5EYXRhL1dl
Yk9yaWdpbkRhdGFNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1NTQy
MkM4MTgwNjRGRkMwMDQ2RjZBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlci5tZXNzYWdlcy5pbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJPcmlnaW5EYXRhTWFuYWdlci5tZXNzYWdlcy5pbjsg
cGF0aCA9IE9yaWdpbkRhdGEvV2ViT3JpZ2luRGF0YU1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc1N0FGOTc2MTg0RDEzMDUwMEU2MzE2RSAvKiBJdGVy
YXRvclBhaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0b3JQYWly
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1OUNDRDU0MTgwOEYxNjAwMDc4RThB
OCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5Q2hhbmdlQ2xpZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlDaGFu
Z2VDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NTlDQ0Q1NTE4MDhG
MTYwMDA3OEU4QTggLyogV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eUNoYW5nZUNsaWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5
Q2hhbmdlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1RTc0OUU1MTgw
REJCOTgwMDA4OEJBNiAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJPcmlnaW5EYXRhTWFuYWdl
ck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDIx
LDYgKzM0MjYsNyBAQAogCQkJCTBGQjY1OTIyMTIwOEI0REIwMDQ0ODE2QyAvKiBEcmF3aW5nQXJl
YUluZm8uaCAqLywKIAkJCQk4Q0ZFQ0U5MzE0OTBGMTQwMDAyQUFBMzIgLyogRWRpdG9yU3RhdGUu
Y3BwICovLAogCQkJCTFBQTQxQUI0MTJDMDJFQzQwMDJCRTY3QiAvKiBFZGl0b3JTdGF0ZS5oICov
LAorCQkJCTc1MkE4MDc2MTgzRDZEQTcwMDNENjU5RSAvKiBGaWx0ZXJJdGVyYXRvci5oICovLAog
CQkJCUJDRTgxRDhBMTMxOUY3RUYwMDI0MTkxMCAvKiBGb250SW5mby5jcHAgKi8sCiAJCQkJQkNF
ODFEOEIxMzE5RjdFRjAwMjQxOTEwIC8qIEZvbnRJbmZvLmggKi8sCiAJCQkJNzYyQjc0ODExMjBC
QkEwMTAwODE5MzM5IC8qIEZvbnRTbW9vdGhpbmdMZXZlbC5oICovLApAQCAtMzQyOCw2ICszNDM0
LDcgQEAKIAkJCQlCQ0NGNkIyMzEyQzkzRTdBMDA4RjlDMzUgLyogSW1hZ2VPcHRpb25zLmggKi8s
CiAJCQkJQkNCQ0IwQ0MxMjE1RTMzQTAwREU1OUNBIC8qIEltbXV0YWJsZURpY3Rpb25hcnkuY3Bw
ICovLAogCQkJCUJDQkNCMENBMTIxNUUzMjEwMERFNTlDQSAvKiBJbW11dGFibGVEaWN0aW9uYXJ5
LmggKi8sCisJCQkJNzU3QUY5NzYxODREMTMwNTAwRTYzMTZFIC8qIEl0ZXJhdG9yUGFpci5oICov
LAogCQkJCTFBOTJEQzEwMTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggKi8s
CiAJCQkJQkNCMEFFRTgxMjJGNTNFMzAwQjEzNDFFIC8qIE11dGFibGVEaWN0aW9uYXJ5LmNwcCAq
LywKIAkJCQlCQ0IwQUVFNzEyMkY1M0UzMDBCMTM0MUUgLyogTXV0YWJsZURpY3Rpb25hcnkuaCAq
LywKQEAgLTU3ODksNiArNTc5Niw3IEBACiAJCQkJNTFEMTMwNTYxMzgyRUFDMDAwMzUxRUREIC8q
IFNlY0l0ZW1SZXNwb25zZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNzkwODhGMTY5QkFB
NkEwMDY5MDRDNyAvKiBTZWNJdGVtU2hpbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExRjhBN0Ix
MzhCNDYwOTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTGlicmFyeS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzU3QUY5NzgxODREMTMxNDAwRTYzMTZFIC8qIEl0ZXJhdG9yUGFpci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTE3OTA4OTExNjlCQUE4MjAwNjkwNEM3IC8qIFNlY0l0ZW1TaGltTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUxOEU2OTBDMTY5QjU2M0YwMDlCNjY3MCAvKiBTZWNJdGVt
U2hpbVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMThFNjkxODE2OUI2NjdCMDA5QjY2NzAg
LyogU2VjSXRlbVNoaW1Qcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5jcHAKaW5kZXggYjQ1N2M3ZS4uZmZmZTA1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAK
QEAgLTQ4NSwxMSArNDg1LDggQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHRvU3RyaW5nVmVjdG9y
KEFQSTo6QXJyYXkqIHBhdHRlcm5zKQogICAgICAgICByZXR1cm4gcGF0dGVybnNWZWN0b3I7CiAK
ICAgICBwYXR0ZXJuc1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFdlYlN0cmluZyogZW50
cnkgPSBwYXR0ZXJucy0+YXQ8V2ViU3RyaW5nPihpKTsKLSAgICAgICAgaWYgKGVudHJ5KQotICAg
ICAgICAgICAgcGF0dGVybnNWZWN0b3IudW5jaGVja2VkQXBwZW5kKGVudHJ5LT5zdHJpbmcoKSk7
Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBwYXR0ZXJucy0+ZWxlbWVudHNP
ZlR5cGU8V2ViU3RyaW5nPigpKQorICAgICAgICBwYXR0ZXJuc1ZlY3Rvci51bmNoZWNrZWRBcHBl
bmQoZW50cnktPnN0cmluZygpKTsKICAgICByZXR1cm4gcGF0dGVybnNWZWN0b3I7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcAppbmRleCAx
MGM5NTFkLi4yZGQ3ZmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VF
ZGl0b3JDbGllbnQuY3BwCkBAIC0xNTQsMjAgKzE1NCwxMiBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudDo6Z2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXZWJQYWdlKiBwYWdl
LCBSYQogCiAgICAgICAgIEFTU0VSVCh0eXBlc0FycmF5LT5zaXplKCkgPT0gZGF0YUFycmF5LT5z
aXplKCkpOwogCi0gICAgICAgIHNpemVfdCBzaXplID0gdHlwZXNBcnJheS0+c2l6ZSgpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgV2Vi
U3RyaW5nKiB0eXBlID0gdHlwZXNBcnJheS0+YXQ8V2ViU3RyaW5nPihpKTsKLSAgICAgICAgICAg
IGlmICh0eXBlKQotICAgICAgICAgICAgICAgIHBhc3RlYm9hcmRUeXBlcy5hcHBlbmQodHlwZS0+
c3RyaW5nKCkpOwotICAgICAgICB9CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgdHlwZSA6IHR5
cGVzQXJyYXktPmVsZW1lbnRzT2ZUeXBlPFdlYlN0cmluZz4oKSkKKyAgICAgICAgICAgIHBhc3Rl
Ym9hcmRUeXBlcy5hcHBlbmQodHlwZS0+c3RyaW5nKCkpOwogCi0gICAgICAgIHNpemUgPSBkYXRh
QXJyYXktPnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgICAgIFdlYkRhdGEqIGl0ZW0gPSBkYXRhQXJyYXktPmF0PFdlYkRhdGE+KGkp
OwotICAgICAgICAgICAgaWYgKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShpdGVtLT5ieXRlcygpLCBpdGVt
LT5zaXplKCkpOwotICAgICAgICAgICAgICAgIHBhc3RlYm9hcmREYXRhLmFwcGVuZChidWZmZXIp
OwotICAgICAgICAgICAgfQorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBkYXRhQXJy
YXktPmVsZW1lbnRzT2ZUeXBlPFdlYkRhdGE+KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGl0ZW0tPmJ5dGVzKCksIGl0
ZW0tPnNpemUoKSk7CisgICAgICAgICAgICBwYXN0ZWJvYXJkRGF0YS5hcHBlbmQoYnVmZmVyKTsK
ICAgICAgICAgfQogICAgIH0KIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>