<?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>154941</bug_id>
          
          <creation_ts>2016-03-02 17:02:28 -0800</creation_ts>
          <short_desc>Support iterating over an OptionSet and checking if it is empty</short_desc>
          <delta_ts>2016-03-08 11:33:11 -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>Web Template Framework</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>154925</dependson>
          <blocked>155007</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1170022</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-02 17:02:28 -0800</bug_when>
    <thetext>It would be convenient to be able to iterate oner the enumerators in an OptionSet and check whether an OptionSet is empty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170025</commentid>
    <comment_count>1</comment_count>
      <attachid>272708</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-02 17:08:07 -0800</bug_when>
    <thetext>Created attachment 272708
Patch and Unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170032</commentid>
    <comment_count>2</comment_count>
      <attachid>272710</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-02 17:23:52 -0800</bug_when>
    <thetext>Created attachment 272710
Patch and Unit tests

Fix typo; OptionSet::isEmpty() should have return value bool instead of StorageType.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170333</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-03-03 15:22:28 -0800</bug_when>
    <thetext>&lt;rdar://problem/24964187&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170355</commentid>
    <comment_count>4</comment_count>
      <attachid>272785</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-03 15:56:23 -0800</bug_when>
    <thetext>Created attachment 272785
Patch and Unit tests

Rebased patch following &lt;http://trac.webkit.org/changeset/197523&gt; (bug #154925).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170360</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-03 16:03:22 -0800</bug_when>
    <thetext>Attachment 272785 did not pass style-queue:


ERROR: Source/WTF/wtf/OptionSet.h:109:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/OptionSet.h:110:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171852</commentid>
    <comment_count>6</comment_count>
      <attachid>272785</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-03-07 17:18:35 -0800</bug_when>
    <thetext>Comment on attachment 272785
Patch and Unit tests

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

This looks good, but will break the WIndows build because it does not support using #include &quot;PlatformUtilities.h&quot;.

Can you #if/def around this for Windows, and perhaps exclude the new tests that might fail without &quot;PlatformUtiliies&quot;?

&gt; Tools/TestWebKitAPI/Tests/WTF/OptionSet.cpp:27
&gt; +#include &quot;PlatformUtilities.h&quot;

This is causing a build failure on Windows, since it doesn&apos;t have any WK2 support features. Can we #if/def around it? What piece of PlatformUtilities.h is needed in this file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171920</commentid>
    <comment_count>7</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-07 21:06:53 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; [...]
&gt; Can you #if/def around this for Windows, and perhaps exclude the new tests
&gt; that might fail without &quot;PlatformUtiliies&quot;?
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WTF/OptionSet.cpp:27
&gt; &gt; +#include &quot;PlatformUtilities.h&quot;
&gt; 
&gt; This is causing a build failure on Windows, since it doesn&apos;t have any WK2
&gt; support features. Can we #if/def around it? What piece of
&gt; PlatformUtilities.h is needed in this file?

I will move the logic added to file PlatformUtilities.h to file Test.h.

For completeness, I added a convenience macro function EXPECT_STRONG_ENUM_EQ() to PlatformUtilities.h to support asserting a strong enum value in a test as opposed to writing the test assertions using EXPECT_TRUE()/EXPECT_FALSE(). Notice that we cannot make use of EXPECT_EQ() because it implicitly converts its arguments to integers, which will cause a compilation error for strong enums.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171921</commentid>
    <comment_count>8</comment_count>
      <attachid>273266</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-07 21:12:01 -0800</bug_when>
    <thetext>Created attachment 273266
Patch and Unit Tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171922</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-07 21:13:58 -0800</bug_when>
    <thetext>Attachment 273266 did not pass style-queue:


ERROR: Source/WTF/wtf/OptionSet.h:109:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/OptionSet.h:110:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172035</commentid>
    <comment_count>10</comment_count>
      <attachid>273266</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-08 08:44:33 -0800</bug_when>
    <thetext>Comment on attachment 273266
Patch and Unit Tests

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

I think the test should cover more edge cases, such as 1 &lt;&lt; 31 and 1 &lt;&lt; 63.

&gt; Source/WTF/wtf/OptionSet.h:37
&gt; +template&lt;typename T, typename StorageType&gt; class OptionSetIterator;

I think it would be better for this to be a nested class template instead of a top level class template. It would be OptionSet::Iterator.

&gt; Source/WTF/wtf/OptionSet.h:47
&gt; +    typedef OptionSetIterator&lt;T, StorageType&gt; iterator;

I think in new code we should use &quot;using&quot; instead of typedef. Maybe we should write a style guideline.

&gt; Source/WTF/wtf/OptionSet.h:51
&gt; +        return OptionSet(static_cast&lt;T&gt;(storageType), OptionSet::FromRawValue);

Since this is inside an OptionSet member function, it can just be FromRawValue, not OptionSet::FromRawValue.

&gt; Source/WTF/wtf/OptionSet.h:57
&gt;      constexpr OptionSet(T t)

I wonder if this should be explicit?

&gt; Source/WTF/wtf/OptionSet.h:71
&gt;      OptionSet(std::initializer_list&lt;T&gt; initializerList)

I wonder if this should be explicit?

&gt; Source/WTF/wtf/OptionSet.h:81
&gt; +    constexpr bool isEmpty() const { return !m_storage; }

We’d probably like explicit operator bool. Either in addition to this or instead of it.

&gt; Source/WTF/wtf/OptionSet.h:109
&gt; +    OptionSetIterator(const StorageType value) : m_value(value) { }

No need for the &quot;const&quot; here. Ideally this would be private so that it’s only usable by OptionSet, not accidentally usable by others. Making this class template a member of OptionSet would make that work without much effort, I think. We could make this private and OptionSet would still have access to it, I believe.

&gt; Source/WTF/wtf/OptionSet.h:116
&gt; +    OptionSetIterator(const OptionSetIterator&amp; other) : m_value(other.m_value) { }
&gt; +
&gt; +    OptionSetIterator&amp; operator=(const OptionSetIterator&amp; other)
&gt; +    {
&gt; +        m_value = other.m_value;
&gt; +        return *this;
&gt; +    }

This code should be omitted. They exactly match what the compiler will generate for us as long as we don’t define these explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172108</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-08 11:09:37 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 273266 [details]
&gt; Patch and Unit Tests
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=273266&amp;action=review
&gt; 
&gt; I think the test should cover more edge cases, such as 1 &lt;&lt; 31 and 1 &lt;&lt; 63.
&gt; 

Will add more tests to cover these edge cases.

&gt; &gt; Source/WTF/wtf/OptionSet.h:37
&gt; &gt; +template&lt;typename T, typename StorageType&gt; class OptionSetIterator;
&gt; 
&gt; I think it would be better for this to be a nested class template instead of
&gt; a top level class template. It would be OptionSet::Iterator.
&gt; 

Will make this a nested class of OptionSet.

&gt; &gt; Source/WTF/wtf/OptionSet.h:47
&gt; &gt; +    typedef OptionSetIterator&lt;T, StorageType&gt; iterator;
&gt; 
&gt; I think in new code we should use &quot;using&quot; instead of typedef. Maybe we
&gt; should write a style guideline.
&gt; 

Will write using &quot;using&quot;. We should update the WebKit Code Style Guidelines to reflect our preference for C++11 type-alias syntax instead of use of typedef.

&gt; &gt; Source/WTF/wtf/OptionSet.h:51
&gt; &gt; +        return OptionSet(static_cast&lt;T&gt;(storageType), OptionSet::FromRawValue);
&gt; 
&gt; Since this is inside an OptionSet member function, it can just be
&gt; FromRawValue, not OptionSet::FromRawValue.
&gt; 

Will fix.

&gt; &gt; Source/WTF/wtf/OptionSet.h:57
&gt; &gt;      constexpr OptionSet(T t)
&gt; 
&gt; I wonder if this should be explicit?
&gt; 

After talking with Anders Carlsson today, we felt it was unnecessary to mark this constructor explicit as as the enum type provides sufficient type safety and allowing implicit conversion makes the syntax convenient. And OptionSet can only be instantiated for enum types.

&gt; &gt; Source/WTF/wtf/OptionSet.h:71
&gt; &gt;      OptionSet(std::initializer_list&lt;T&gt; initializerList)
&gt; 
&gt; I wonder if this should be explicit?
&gt; 

By a similar argument we felt that it was unnecessary to make this constructor explicit.

&gt; &gt; Source/WTF/wtf/OptionSet.h:81
&gt; &gt; +    constexpr bool isEmpty() const { return !m_storage; }
&gt; 
&gt; We’d probably like explicit operator bool. Either in addition to this or
&gt; instead of it.
&gt; 

Will add explicit operator bool and keep isEmpty().

&gt; &gt; Source/WTF/wtf/OptionSet.h:109
&gt; &gt; +    OptionSetIterator(const StorageType value) : m_value(value) { }
&gt; 
&gt; No need for the &quot;const&quot; here. Ideally this would be private so that it’s
&gt; only usable by OptionSet, not accidentally usable by others. Making this
&gt; class template a member of OptionSet would make that work without much
&gt; effort, I think. We could make this private and OptionSet would still have
&gt; access to it, I believe.
&gt; 

Will remove const, make this constructor private, and declare OptionSet as a friend of OptionSet::Iterator (since OptionSet does not have access to the private functions of OptionSet::Iterator).

&gt; &gt; Source/WTF/wtf/OptionSet.h:116
&gt; &gt; +    OptionSetIterator(const OptionSetIterator&amp; other) : m_value(other.m_value) { }
&gt; &gt; +
&gt; &gt; +    OptionSetIterator&amp; operator=(const OptionSetIterator&amp; other)
&gt; &gt; +    {
&gt; &gt; +        m_value = other.m_value;
&gt; &gt; +        return *this;
&gt; &gt; +    }
&gt; 
&gt; This code should be omitted. They exactly match what the compiler will
&gt; generate for us as long as we don’t define these explicitly.

Will remove this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172111</commentid>
    <comment_count>12</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-08 11:25:27 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; [...]
&gt; &gt; &gt; Source/WTF/wtf/OptionSet.h:81
&gt; &gt; &gt; +    constexpr bool isEmpty() const { return !m_storage; }
&gt; &gt; 
&gt; &gt; We’d probably like explicit operator bool. Either in addition to this or
&gt; &gt; instead of it.
&gt; &gt; 
&gt; 
&gt; Will add explicit operator bool and keep isEmpty().
&gt; 

Disregard this comment. Will not add explicitly operator bool at this time.

From talking with Anders Carlsson, we felt that that we should keep isEmpty() as OptionSet is meant to be thought of a set data structure as opposed to a bitmask. Anders also felt that it was extraneous to have both isEmpty() and an explicit operator bool. For completeness, the addition of isEmpty() and the omission of a explicit bool operator is consistent with other data structure in WTF, including HashSet and Vector.

&gt; &gt; &gt; Source/WTF/wtf/OptionSet.h:109
&gt; &gt; &gt; +    OptionSetIterator(const StorageType value) : m_value(value) { }
&gt; &gt; 
&gt; &gt; No need for the &quot;const&quot; here. Ideally this would be private so that it’s
&gt; &gt; only usable by OptionSet, not accidentally usable by others. Making this
&gt; &gt; class template a member of OptionSet would make that work without much
&gt; &gt; effort, I think. We could make this private and OptionSet would still have
&gt; &gt; access to it, I believe.
&gt; &gt; 
&gt; 
&gt; Will remove const, make this constructor private, and declare OptionSet as a
&gt; friend of OptionSet::Iterator (since OptionSet does not have access to the
&gt; private functions of OptionSet::Iterator).
&gt; 
&gt; &gt; &gt; Source/WTF/wtf/OptionSet.h:116
&gt; &gt; &gt; +    OptionSetIterator(const OptionSetIterator&amp; other) : m_value(other.m_value) { }
&gt; &gt; &gt; +
&gt; &gt; &gt; +    OptionSetIterator&amp; operator=(const OptionSetIterator&amp; other)
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +        m_value = other.m_value;
&gt; &gt; &gt; +        return *this;
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; This code should be omitted. They exactly match what the compiler will
&gt; &gt; generate for us as long as we don’t define these explicitly.
&gt; 
&gt; Will remove this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172115</commentid>
    <comment_count>13</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-08 11:33:11 -0800</bug_when>
    <thetext>Committed r197788: &lt;http://trac.webkit.org/changeset/197788&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272708</attachid>
            <date>2016-03-02 17:08:07 -0800</date>
            <delta_ts>2016-03-02 17:23:50 -0800</delta_ts>
            <desc>Patch and Unit tests</desc>
            <filename>bug-154941-20160302170752.patch</filename>
            <type>text/plain</type>
            <size>12851</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3NDI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGI4ZWJlOWY4MGY5M2E5ZmY5OGFjYjc2
MDllYWIxNzU1OTk5MjY1ZTUuLjY2NTA0NDhmY2RiMTg1NmRjMzQ1MDlmYjQ0MzdlYzA0YmRiNjhi
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsMzUgQEAKIDIwMTYtMDMtMDIgIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgogCisgICAgICAgIFN1cHBvcnQgaXRlcmF0aW5nIG92ZXIgYW4gT3B0aW9u
U2V0IGFuZCBjaGVja2luZyBpZiBpdCBpcyBlbXB0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0OTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBzdXBwb3J0IGZvciBpdGVyYXRpbmcg
b3ZlciB0aGUgZW51bWVyYXRvcnMgaW4gYW4gT3B0aW9uU2V0IGFzIHdlbGwgYXMKKyAgICAgICAg
ZGV0ZXJtaW5pbmcgaWYgdGhlIHNldCBpcyBlbXB0eS4KKworICAgICAgICBJdGVyYXRpbmcgb3Zl
ciBhbiBPcHRpb25TZXQgaXMgaW4gQmlnIFRoZXRhKE4pIHdoZXJlIE4gaXMgdGhlIG51bWJlciBv
ZiBpdGVtcyBpbgorICAgICAgICB0aGUgc2V0LiBNb3JlIHByZWNpc2VseSwgaXQgaXMgaW4gQmln
IFRoZXRhKGxvZyBNKSB3aGVyZSBNIGlzIHRoZSBiaXRtYXNrIHJlcHJlc2VudGVkCisgICAgICAg
IGJ5IHRoZSBiaXR3aXNlIE9SLWluZyBvZiBhbGwgZW51bWVyYXRvcnMgaW4gdGhlIHNldC4KKwor
ICAgICAgICAqIHd0Zi9PcHRpb25TZXQuaDogQWRkZWQgY29tbWVudCB0byBkZXNjcmliZSB0aGUg
cHVycG9zZSBvZiB0aGlzIGNsYXNzIGFuZCBpdHMgaW52YXJpYW50IC0KKyAgICAgICAgdGhlIGVu
dW1lcmF0b3JzIG11c3QgYmUgcG9zaXRpdmUgcG93ZXJzIG9mIHR3by4KKyAgICAgICAgKFdURjo6
T3B0aW9uU2V0Ojpmcm9tUmF3KTogSW5zdGFudGlhdGUgdXNpbmcgc3BlY2lhbGl6ZWQgcHJpdmF0
ZSBjb25zdHJ1Y3RvciB0byBhbGxvdworICAgICAgICBpbnN0YW50aWF0aW9uIHdpdGggYSByYXcg
dmFsdWUgb2YgMC4KKyAgICAgICAgKFdURjo6T3B0aW9uU2V0OjpPcHRpb25TZXQpOiBTcGVjaWFs
aXplZCBjb25zdHJ1Y3RvciB0aGF0IGFzc2VydHMgdGhhdCB0aGUgc3BlY2lmaWVkIHZhbHVlCisg
ICAgICAgIGlzIGEgcG9zaXRpdmUgcG93ZXIgb2YgdHdvLiBUaGlzIHZhcmlhbnQgaXMgb25seSBj
b21waWxlZCB3aGVuIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQgKGkuZS4gIUFTU0VSVF9ESVNBQkxF
RCkuCisgICAgICAgIChXVEY6Ok9wdGlvblNldDo6aXNFbXB0eSk6IFJldHVybnMgd2hldGhlciB0
aGUgc2V0IGlzIGVtcHR5LgorICAgICAgICAoV1RGOjpPcHRpb25TZXQ6OmJlZ2luKTogUmV0dXJu
cyBhbiBpdGVyYXRvciB0byB0aGUgZW51bWVyYXRvciB3aXRoIHRoZSBzbWFsbGVzdCB2YWx1ZSBp
biB0aGUgc2V0LgorICAgICAgICAoV1RGOjpPcHRpb25TZXQ6OmVuZCk6IFJldHVybnMgYW4gaXRl
cmF0b3IgdGhhdCByZXByZXNlbnRzIHRoZSBlbmQgc2VudGluZWwgb2YgdGhlIHNldC4KKyAgICAg
ICAgKFdURjo6T3B0aW9uU2V0SXRlcmF0b3I6Ok9wdGlvblNldEl0ZXJhdG9yKTogSW1wbGVtZW50
cyBhIGZvcndhcmQgaXRlcmF0b3IgZm9yIHRoZSBzZXQuCisgICAgICAgIChXVEY6Ok9wdGlvblNl
dEl0ZXJhdG9yOjpvcGVyYXRvcj0pOiBBZGRlZC4KKyAgICAgICAgKFdURjo6T3B0aW9uU2V0SXRl
cmF0b3I6Om9wZXJhdG9yKik6IFJldHVybnMgdGhlIGVudW1lcmF0b3IgcG9pbnRlZCB0byBieSB0
aGUgaXRlcmF0b3IuCisgICAgICAgIChXVEY6Ok9wdGlvblNldEl0ZXJhdG9yOjpvcGVyYXRvcisr
KTogQWR2YW5jZSB0byB0aGUgbmV4dCBzbWFsbGVzdCBlbnVtZXJhdG9yIGluIHRoZSBzZXQuIAor
ICAgICAgICAoV1RGOjpPcHRpb25TZXRJdGVyYXRvcjo6b3BlcmF0b3I9PSk6IFJldHVybnMgd2hl
dGhlciB0aGUgaXRlcmF0b3IgaXMgZXF1YWwgdG8gdGhlIHNwZWNpZmllZCBpdGVyYXRvci4KKyAg
ICAgICAgKFdURjo6T3B0aW9uU2V0SXRlcmF0b3I6Om9wZXJhdG9yIT0pOiBSZXR1cm5zIHdoZXRo
ZXIgdGhlIGl0ZXJhdG9yIGlzIG5vdCBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIGl0ZXJhdG9yLgor
CisyMDE2LTAzLTAyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKwogICAgICAg
ICBBZGQgdW5pdCB0ZXN0cyBmb3IgV1RGOjpPcHRpb25TZXQKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDkyNQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9PcHRpb25TZXQuaCBiL1NvdXJjZS9XVEYvd3RmL09wdGlvblNldC5oCmluZGV4IGU5
OWU5NzZiMjkwMTNlYjY5MGJlMGQ4ZDBmNGY1MTZlOGI3ZTg4MjIuLmE5YmE0MDQ2N2E4NGViNmNj
YmZlYzJiYTMyMjg3OTEzNTBkYjFiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL09wdGlv
blNldC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL09wdGlvblNldC5oCkBAIC0yNywxOCArMjcsMjgg
QEAKICNkZWZpbmUgT3B0aW9uU2V0X2gKIAogI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+Cisj
aW5jbHVkZSA8aXRlcmF0b3I+CiAjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU3RvcmFnZVR5cGU+IGNsYXNz
IE9wdGlvblNldEl0ZXJhdG9yOworCisvLyBPcHRpb25TZXQgaXMgYSBjbGFzcyB0aGF0IHJlcHJl
c2VudHMgYSBzZXQgb2YgZW51bWVyYXRvcnMgaW4gYSBzcGFjZS1lZmZpY2llbnQgbWFubmVyLiBU
aGUgZW51bWVyYXRvcnMKKy8vIG11c3QgYmUgcG93ZXJzIG9mIHR3byBncmVhdGVyIHRoYW4gMC4g
VGhpcyBjbGFzcyBpcyB1c2VmdWwgYXMgYSByZXBsYWNlbWVudCBmb3IgcGFzc2luZyBhIGJpdG1h
c2sgb2YKKy8vIGVudW1lcmF0b3JzIGFyb3VuZC4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNz
IE9wdGlvblNldCB7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2VudW08VD46OnZhbHVlLCAi
VCBpcyBub3QgYW4gZW51bSB0eXBlIik7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Om1ha2Vf
dW5zaWduZWQ8dHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8VD46OnR5cGU+Ojp0eXBlIFN0
b3JhZ2VUeXBlOwogCiBwdWJsaWM6CisgICAgdHlwZWRlZiBPcHRpb25TZXRJdGVyYXRvcjxULCBT
dG9yYWdlVHlwZT4gaXRlcmF0b3I7CisKICAgICBzdGF0aWMgT3B0aW9uU2V0IGZyb21SYXcoU3Rv
cmFnZVR5cGUgc3RvcmFnZVR5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4oc3RvcmFnZVR5cGUpOworICAgICAgICByZXR1cm4gT3B0aW9uU2V0KHN0YXRpY19jYXN0PFQ+
KHN0b3JhZ2VUeXBlKSwgT3B0aW9uU2V0OjpGcm9tUmF3VmFsdWUpOwogICAgIH0KIAogICAgIGNv
bnN0ZXhwciBPcHRpb25TZXQoKQpAQCAtNDYsMjIgKzU2LDM3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogCisjaWYgQVNTRVJUX0RJU0FCTEVECiAgICAgY29uc3RleHByIE9wdGlvblNldChUIHQp
CiAgICAgICAgIDogbV9zdG9yYWdlKHN0YXRpY19jYXN0PFN0b3JhZ2VUeXBlPih0KSkKICAgICB7
CiAgICAgfQorI2Vsc2UKKyAgICBPcHRpb25TZXQoVCB0KQorICAgICAgICA6IG1fc3RvcmFnZShz
dGF0aWNfY2FzdDxTdG9yYWdlVHlwZT4odCkpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKGhhc09uZUJpdFNldChzdGF0aWNfY2FzdDxTdG9yYWdlVHlwZT4odCkpLCAiRW51bWVy
YXRvciBpcyBub3QgYSBwb3NpdGl2ZSBwb3dlciBvZiB0d28uIik7CisgICAgfQorI2VuZGlmCiAK
ICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGNvbnN0ZXhwciBvbmNlIHdlIGFkb3B0IEMrKzE0IGFz
IEMrKzExIGRvZXMgbm90IHN1cHBvcnQgZm9yLWxvb3BzCiAgICAgLy8gaW4gYSBjb25zdGV4cHIg
ZnVuY3Rpb24uCiAgICAgT3B0aW9uU2V0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiBpbml0aWFs
aXplckxpc3QpCiAgICAgICAgIDogbV9zdG9yYWdlKDApCiAgICAgewotICAgICAgICBmb3IgKGF1
dG8mIG9wdGlvbiA6IGluaXRpYWxpemVyTGlzdCkKKyAgICAgICAgZm9yIChhdXRvJiBvcHRpb24g
OiBpbml0aWFsaXplckxpc3QpIHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaGFz
T25lQml0U2V0KHN0YXRpY19jYXN0PFN0b3JhZ2VUeXBlPihvcHRpb24pKSwgIkVudW1lcmF0b3Ig
aXMgbm90IGEgcG9zaXRpdmUgcG93ZXIgb2YgdHdvLiIpOwogICAgICAgICAgICAgbV9zdG9yYWdl
IHw9IHN0YXRpY19jYXN0PFN0b3JhZ2VUeXBlPihvcHRpb24pOworICAgICAgICB9CiAgICAgfQog
CiAgICAgY29uc3RleHByIFN0b3JhZ2VUeXBlIHRvUmF3KCkgY29uc3QgeyByZXR1cm4gbV9zdG9y
YWdlOyB9CiAKKyAgICBjb25zdGV4cHIgU3RvcmFnZVR5cGUgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuICFtX3N0b3JhZ2U7IH0KKworICAgIGNvbnN0ZXhwciBpdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQorICAgIGNvbnN0ZXhwciBpdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiAwOyB9CisKICAgICBjb25zdGV4cHIgYm9vbCBjb250YWlucyhPcHRpb25TZXQg
b3B0aW9uU2V0KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZSAmIG9wdGlv
blNldC5tX3N0b3JhZ2U7CkBAIC03NSw5ICsxMDAsNDQgQEAgcHVibGljOgogICAgIH0KIAogcHJp
dmF0ZToKKyAgICBlbnVtIEluaXRpYWxpemF0aW9uVGFnIHsgRnJvbVJhd1ZhbHVlIH07CisgICAg
Y29uc3RleHByIE9wdGlvblNldChUIHQsIEluaXRpYWxpemF0aW9uVGFnKQorICAgICAgICA6IG1f
c3RvcmFnZShzdGF0aWNfY2FzdDxTdG9yYWdlVHlwZT4odCkpCisgICAgeworICAgIH0KICAgICBT
dG9yYWdlVHlwZSBtX3N0b3JhZ2U7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBTdG9yYWdlVHlwZT4gY2xhc3MgT3B0aW9uU2V0SXRlcmF0b3IgeworcHVibGljOgorICAgIE9w
dGlvblNldEl0ZXJhdG9yKGNvbnN0IFN0b3JhZ2VUeXBlIHZhbHVlKSA6IG1fdmFsdWUodmFsdWUp
IHsgfQorICAgIE9wdGlvblNldEl0ZXJhdG9yKGNvbnN0IE9wdGlvblNldEl0ZXJhdG9yJiBvdGhl
cikgOiBtX3ZhbHVlKG90aGVyLm1fdmFsdWUpIHsgfQorCisgICAgT3B0aW9uU2V0SXRlcmF0b3Im
IG9wZXJhdG9yPShjb25zdCBPcHRpb25TZXRJdGVyYXRvciYgb3RoZXIpCisgICAgeworICAgICAg
ICBtX3ZhbHVlID0gb3RoZXIubV92YWx1ZTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KworICAgIC8vIElzb2xhdGUgdGhlIHJpZ2h0bW9zdCBzZXQgYml0LgorICAgIFQgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obV92YWx1ZSAmIC1tX3ZhbHVlKTsgfQor
CisgICAgLy8gSXRlcmF0ZXMgZnJvbSBzbWFsbGVzdCB0byBsYXJnZXN0IGVudW0gdmFsdWUgYnkg
dHVybmluZyBvZmYgdGhlIHJpZ2h0bW9zdCBzZXQgYml0LgorICAgIE9wdGlvblNldEl0ZXJhdG9y
JiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIG1fdmFsdWUgJj0gbV92YWx1ZSAtIDE7Cisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBPcHRpb25TZXRJdGVyYXRvciYgb3Bl
cmF0b3IrKyhpbnQpID0gZGVsZXRlOworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wdGlv
blNldEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3Zh
bHVlOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvblNldEl0ZXJhdG9yJiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOyB9CisKK3ByaXZhdGU6
CisgICAgU3RvcmFnZVR5cGUgbV92YWx1ZTsKK307CisKIH0KIAogdXNpbmcgV1RGOjpPcHRpb25T
ZXQ7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
MTgxYjM5ZDI5MWEwNTAyZGNhNmZlMjZiNzkwM2E1OTdiOTA4MTc0ZC4uYWQyOGVjNjEwMjgwYjI0
YTk2MDlkYTAyZDg0MDUzMDE3ZDM0ZGQ1ZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIwIEBACiAyMDE2LTAzLTAyICBEYW5pZWwg
QmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAorICAgICAgICBTdXBwb3J0IGl0ZXJhdGluZyBv
dmVyIGFuIE9wdGlvblNldCBhbmQgY2hlY2tpbmcgaWYgaXQgaXMgZW1wdHkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDk0MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0cyB0byBlbnN1cmUg
dGhhdCB3ZSBkbyBub3QgcmVncmVzc2lvbiBib3RoIGl0ZXJhdGlvbiBvZiBhbiBPcHRpb25TZXQg
YW5kCisgICAgICAgIGRldGVybWluaW5nIHdoZXRoZXIgYW4gT3B0aW9uU2V0IGlzIGVtcHR5Lgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVV0aWxpdGllcy5oOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VXRpbDo6YXNzZXJ0U3Ryb25nRW51bSk6IEhlbHBlciBmdW5jdGlvbiB0
byBhc3NlcnQgdHdvIHN0cm9uZyBlbnVtIHR5cGUgZm9yIGVxdWFsaXR5LgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL09wdGlvblNldC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpURVNUKToKKworMjAxNi0wMy0wMiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5j
b20+CisKICAgICAgICAgQWRkIHVuaXQgdGVzdHMgZm9yIFdURjo6T3B0aW9uU2V0CiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ5MjUKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVV0aWxpdGllcy5oIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9QbGF0Zm9ybVV0aWxpdGllcy5oCmluZGV4IDc1ODNlNGVlMDc3ZTNlODgzZTZh
NTdkYjVkMWI4OWVjNDc5NDI5NGIuLmNmNjk2ZjYxZDQwYmRlNWZiNTFhZjBmOTgzYWU4YmFiZTUy
YmIyNWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1VdGlsaXRpZXMu
aAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtVXRpbGl0aWVzLmgKQEAgLTc1LDYg
Kzc1LDE4IEBAIHN0YXRpYyBpbmxpbmUgOjp0ZXN0aW5nOjpBc3NlcnRpb25SZXN1bHQgYXNzZXJ0
V0tTdHJpbmdFcXVhbChjb25zdCBjaGFyKiBleHBlY3RlCiAjZGVmaW5lIEVYUEVDVF9XS19TVFJF
UShleHBlY3RlZCwgYWN0dWFsKSBcCiAgICAgRVhQRUNUX1BSRURfRk9STUFUMihUZXN0V2ViS2l0
QVBJOjpVdGlsOjphc3NlcnRXS1N0cmluZ0VxdWFsLCBleHBlY3RlZCwgYWN0dWFsKQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIGlubGluZSA6OnRlc3Rpbmc6OkFzc2VydGlvblJlc3Vs
dCBhc3NlcnRTdHJvbmdFbnVtKGNvbnN0IGNoYXIqIGV4cGVjdGVkX2V4cHJlc3Npb24sIGNvbnN0
IGNoYXIqIGFjdHVhbF9leHByZXNzaW9uLCBUIGV4cGVjdGVkLCBUIGFjdHVhbCkKK3sKKyAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZW51bTxUPjo6dmFsdWUsICJUIGlzIG5vdCBhbiBlbnVtIHR5
cGUiKTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPFQ+Ojp0eXBl
IFVuZGVybHlpbmdTdG9yYWdlVHlwZTsKKyAgICByZXR1cm4gOjp0ZXN0aW5nOjppbnRlcm5hbDo6
Q21wSGVscGVyRVEoZXhwZWN0ZWRfZXhwcmVzc2lvbiwgYWN0dWFsX2V4cHJlc3Npb24sIHN0YXRp
Y19jYXN0PFVuZGVybHlpbmdTdG9yYWdlVHlwZT4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxVbmRl
cmx5aW5nU3RvcmFnZVR5cGU+KGFjdHVhbCkpOworfQorCisjZGVmaW5lIEVYUEVDVF9TVFJPTkdf
RU5VTV9FUShleHBlY3RlZCwgYWN0dWFsKSBcCisgICAgRVhQRUNUX1BSRURfRk9STUFUMihUZXN0
V2ViS2l0QVBJOjpVdGlsOjphc3NlcnRTdHJvbmdFbnVtLCBleHBlY3RlZCwgYWN0dWFsKQorCisK
ICNpZiBXS19BUElfRU5BQkxFRAogZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgVGVzdFBsdWdJbkNs
YXNzTmFtZVBhcmFtZXRlcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvT3B0aW9uU2V0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L09wdGlvblNldC5jcHAKaW5kZXggMjA5NjE5Yzg1NDgyYjcyZjZhYmE1NjZjYjg1ZmNhMDMxYWIz
OWRmMS4uY2I4ZjgzZGU0Zjk0MmQ0NDI4ZmZjMWRhNDY0YWFiYjExMmZjMDc5NSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uU2V0LmNwcAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9PcHRpb25TZXQuY3BwCkBAIC0yNCw2ICsyNCw3IEBA
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtVXRpbGl0aWVz
LmgiCiAKICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKQEAgLTM4LDYgKzM5LDcgQEAgZW51
bSBjbGFzcyBFeGFtcGxlRmxhZ3MgewogVEVTVChXVEZfT3B0aW9uU2V0LCBFbXB0eVNldCkKIHsK
ICAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiBzZXQ7CisgICAgRVhQRUNUX1RSVUUoc2V0Lmlz
RW1wdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkEp
KTsKICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QikpOwogICAg
IEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpDKSk7CkBAIC00Niw2ICs0
OCw3IEBAIFRFU1QoV1RGX09wdGlvblNldCwgRW1wdHlTZXQpCiBURVNUKFdURl9PcHRpb25TZXQs
IENvbnRhaW5zT25lRmxhZykKIHsKICAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiBzZXQgPSBF
eGFtcGxlRmxhZ3M6OkE7CisgICAgRVhQRUNUX0ZBTFNFKHNldC5pc0VtcHR5KCkpOwogICAgIEVY
UEVDVF9UUlVFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkEpKTsKICAgICBFWFBFQ1RfRkFM
U0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QikpOwogICAgIEVYUEVDVF9GQUxTRShzZXQu
Y29udGFpbnMoRXhhbXBsZUZsYWdzOjpDKSk7CkBAIC01NCw2ICs1Nyw3IEBAIFRFU1QoV1RGX09w
dGlvblNldCwgQ29udGFpbnNPbmVGbGFnKQogVEVTVChXVEZfT3B0aW9uU2V0LCBDb250YWluc1R3
b0ZsYWdzKQogewogICAgIE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+IHNldCB7IEV4YW1wbGVGbGFn
czo6QSwgRXhhbXBsZUZsYWdzOjpCIH07CisgICAgRVhQRUNUX0ZBTFNFKHNldC5pc0VtcHR5KCkp
OwogICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkEpKTsKICAgICBF
WFBFQ1RfVFJVRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpCKSk7CiAgICAgRVhQRUNUX0ZB
TFNFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkMpKTsKQEAgLTcxLDExICs3NSwxMyBAQCBU
RVNUKFdURl9PcHRpb25TZXQsIE9wZXJhdG9yQml0d2lzZU9yKQogVEVTVChXVEZfT3B0aW9uU2V0
LCBFbXB0eU9wdGlvblNldFRvUmF3VmFsdWVUb09wdGlvblNldCkKIHsKICAgICBPcHRpb25TZXQ8
RXhhbXBsZUZsYWdzPiBzZXQ7CisgICAgRVhQRUNUX1RSVUUoc2V0LmlzRW1wdHkoKSk7CiAgICAg
RVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkEpKTsKICAgICBFWFBFQ1Rf
RkFMU0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QikpOwogICAgIEVYUEVDVF9GQUxTRShz
ZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpDKSk7CiAKICAgICBhdXRvIHNldDIgPSBPcHRpb25T
ZXQ8RXhhbXBsZUZsYWdzPjo6ZnJvbVJhdyhzZXQudG9SYXcoKSk7CisgICAgRVhQRUNUX1RSVUUo
c2V0Mi5pc0VtcHR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShzZXQyLmNvbnRhaW5zKEV4YW1wbGVG
bGFnczo6QSkpOwogICAgIEVYUEVDVF9GQUxTRShzZXQyLmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6
QikpOwogICAgIEVYUEVDVF9GQUxTRShzZXQyLmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QykpOwpA
QCAtODQsMTEgKzkwLDEzIEBAIFRFU1QoV1RGX09wdGlvblNldCwgRW1wdHlPcHRpb25TZXRUb1Jh
d1ZhbHVlVG9PcHRpb25TZXQpCiBURVNUKFdURl9PcHRpb25TZXQsIE9wdGlvblNldFRoYXRDb250
YWluc09uZUZsYWdUb1Jhd1ZhbHVlVG9PcHRpb25TZXQpCiB7CiAgICAgT3B0aW9uU2V0PEV4YW1w
bGVGbGFncz4gc2V0ID0gRXhhbXBsZUZsYWdzOjpBOworICAgIEVYUEVDVF9GQUxTRShzZXQuaXNF
bXB0eSgpKTsKICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpBKSk7
CiAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkIpKTsKICAgICBF
WFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QykpOwogCiAgICAgYXV0byBz
ZXQyID0gT3B0aW9uU2V0PEV4YW1wbGVGbGFncz46OmZyb21SYXcoc2V0LnRvUmF3KCkpOworICAg
IEVYUEVDVF9GQUxTRShzZXQyLmlzRW1wdHkoKSk7CiAgICAgRVhQRUNUX1RSVUUoc2V0Mi5jb250
YWlucyhFeGFtcGxlRmxhZ3M6OkEpKTsKICAgICBFWFBFQ1RfRkFMU0Uoc2V0Mi5jb250YWlucyhF
eGFtcGxlRmxhZ3M6OkIpKTsKICAgICBFWFBFQ1RfRkFMU0Uoc2V0Mi5jb250YWlucyhFeGFtcGxl
RmxhZ3M6OkMpKTsKQEAgLTk3LDE0ICsxMDUsNTYgQEAgVEVTVChXVEZfT3B0aW9uU2V0LCBPcHRp
b25TZXRUaGF0Q29udGFpbnNPbmVGbGFnVG9SYXdWYWx1ZVRvT3B0aW9uU2V0KQogVEVTVChXVEZf
T3B0aW9uU2V0LCBPcHRpb25TZXRUaGF0Q29udGFpbnNUd29GbGFnc1RvUmF3VmFsdWVUb09wdGlv
blNldCkKIHsKICAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiBzZXQgeyBFeGFtcGxlRmxhZ3M6
OkEsIEV4YW1wbGVGbGFnczo6QyB9OworICAgIEVYUEVDVF9GQUxTRShzZXQuaXNFbXB0eSgpKTsK
ICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpBKSk7CiAgICAgRVhQ
RUNUX1RSVUUoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QykpOwogICAgIEVYUEVDVF9GQUxT
RShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpCKSk7CiAKICAgICBhdXRvIHNldDIgPSBPcHRp
b25TZXQ8RXhhbXBsZUZsYWdzPjo6ZnJvbVJhdyhzZXQudG9SYXcoKSk7CisgICAgRVhQRUNUX0ZB
TFNFKHNldDIuaXNFbXB0eSgpKTsKICAgICBFWFBFQ1RfVFJVRShzZXQyLmNvbnRhaW5zKEV4YW1w
bGVGbGFnczo6QSkpOwogICAgIEVYUEVDVF9UUlVFKHNldDIuY29udGFpbnMoRXhhbXBsZUZsYWdz
OjpDKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldDIuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpCKSk7
CiB9CiAKK1RFU1QoV1RGX09wdGlvblNldCwgVHdvSXRlcmF0b3JzSW50b1NhbWVPcHRpb25TZXQp
Cit7CisgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz4gc2V0IHsgRXhhbXBsZUZsYWdzOjpDLCBF
eGFtcGxlRmxhZ3M6OkIgfTsKKyAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPjo6aXRlcmF0b3Ig
aXQxID0gc2V0LmJlZ2luKCk7CisgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz46Oml0ZXJhdG9y
IGl0MiA9IGl0MTsKKyAgICArK2l0MTsKKyAgICBFWFBFQ1RfU1RST05HX0VOVU1fRVEoRXhhbXBs
ZUZsYWdzOjpDLCAqaXQxKTsKKyAgICBFWFBFQ1RfU1RST05HX0VOVU1fRVEoRXhhbXBsZUZsYWdz
OjpCLCAqaXQyKTsKK30KKworVEVTVChXVEZfT3B0aW9uU2V0LCBJdGVyYXRlT3Zlck9wdGlvblNl
dFRoYXRDb250YWluc1R3b0ZsYWdzKQoreworICAgIE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+IHNl
dCB7IEV4YW1wbGVGbGFnczo6QSwgRXhhbXBsZUZsYWdzOjpDIH07CisgICAgT3B0aW9uU2V0PEV4
YW1wbGVGbGFncz46Oml0ZXJhdG9yIGl0ID0gc2V0LmJlZ2luKCk7CisgICAgT3B0aW9uU2V0PEV4
YW1wbGVGbGFncz46Oml0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKKyAgICBFWFBFQ1RfVFJVRShp
dCAhPSBlbmQpOworICAgIEVYUEVDVF9TVFJPTkdfRU5VTV9FUShFeGFtcGxlRmxhZ3M6OkEsICpp
dCk7CisgICAgKytpdDsKKyAgICBFWFBFQ1RfU1RST05HX0VOVU1fRVEoRXhhbXBsZUZsYWdzOjpD
LCAqaXQpOworICAgICsraXQ7CisgICAgRVhQRUNUX1RSVUUoaXQgPT0gZW5kKTsKK30KKworVEVT
VChXVEZfT3B0aW9uU2V0LCBJdGVyYXRpb25PcmRlclRoZVNhbWVSZWdhcmRsZXNzT2ZJbnNlcnRp
b25PcmRlcikKK3sKKyAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiBzZXQxID0gRXhhbXBsZUZs
YWdzOjpDOworICAgIHNldDEgfD0gRXhhbXBsZUZsYWdzOjpBOworCisgICAgT3B0aW9uU2V0PEV4
YW1wbGVGbGFncz4gc2V0MiA9IEV4YW1wbGVGbGFnczo6QTsKKyAgICBzZXQyIHw9IEV4YW1wbGVG
bGFnczo6QzsKKworICAgIE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+OjppdGVyYXRvciBpdDEgPSBz
ZXQxLmJlZ2luKCk7CisgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz46Oml0ZXJhdG9yIGl0MiA9
IHNldDIuYmVnaW4oKTsKKworICAgIEVYUEVDVF9UUlVFKCppdDEgPT0gKml0Mik7CisgICAgKytp
dDE7CisgICAgKytpdDI7CisgICAgRVhQRUNUX1RSVUUoKml0MSA9PSAqaXQyKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272710</attachid>
            <date>2016-03-02 17:23:52 -0800</date>
            <delta_ts>2016-03-03 15:56:20 -0800</delta_ts>
            <desc>Patch and Unit tests</desc>
            <filename>bug-154941-20160302172337.patch</filename>
            <type>text/plain</type>
            <size>12844</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3NDI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGI4ZWJlOWY4MGY5M2E5ZmY5OGFjYjc2
MDllYWIxNzU1OTk5MjY1ZTUuLjY2NTA0NDhmY2RiMTg1NmRjMzQ1MDlmYjQ0MzdlYzA0YmRiNjhi
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsMzUgQEAKIDIwMTYtMDMtMDIgIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgogCisgICAgICAgIFN1cHBvcnQgaXRlcmF0aW5nIG92ZXIgYW4gT3B0aW9u
U2V0IGFuZCBjaGVja2luZyBpZiBpdCBpcyBlbXB0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0OTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBzdXBwb3J0IGZvciBpdGVyYXRpbmcg
b3ZlciB0aGUgZW51bWVyYXRvcnMgaW4gYW4gT3B0aW9uU2V0IGFzIHdlbGwgYXMKKyAgICAgICAg
ZGV0ZXJtaW5pbmcgaWYgdGhlIHNldCBpcyBlbXB0eS4KKworICAgICAgICBJdGVyYXRpbmcgb3Zl
ciBhbiBPcHRpb25TZXQgaXMgaW4gQmlnIFRoZXRhKE4pIHdoZXJlIE4gaXMgdGhlIG51bWJlciBv
ZiBpdGVtcyBpbgorICAgICAgICB0aGUgc2V0LiBNb3JlIHByZWNpc2VseSwgaXQgaXMgaW4gQmln
IFRoZXRhKGxvZyBNKSB3aGVyZSBNIGlzIHRoZSBiaXRtYXNrIHJlcHJlc2VudGVkCisgICAgICAg
IGJ5IHRoZSBiaXR3aXNlIE9SLWluZyBvZiBhbGwgZW51bWVyYXRvcnMgaW4gdGhlIHNldC4KKwor
ICAgICAgICAqIHd0Zi9PcHRpb25TZXQuaDogQWRkZWQgY29tbWVudCB0byBkZXNjcmliZSB0aGUg
cHVycG9zZSBvZiB0aGlzIGNsYXNzIGFuZCBpdHMgaW52YXJpYW50IC0KKyAgICAgICAgdGhlIGVu
dW1lcmF0b3JzIG11c3QgYmUgcG9zaXRpdmUgcG93ZXJzIG9mIHR3by4KKyAgICAgICAgKFdURjo6
T3B0aW9uU2V0Ojpmcm9tUmF3KTogSW5zdGFudGlhdGUgdXNpbmcgc3BlY2lhbGl6ZWQgcHJpdmF0
ZSBjb25zdHJ1Y3RvciB0byBhbGxvdworICAgICAgICBpbnN0YW50aWF0aW9uIHdpdGggYSByYXcg
dmFsdWUgb2YgMC4KKyAgICAgICAgKFdURjo6T3B0aW9uU2V0OjpPcHRpb25TZXQpOiBTcGVjaWFs
aXplZCBjb25zdHJ1Y3RvciB0aGF0IGFzc2VydHMgdGhhdCB0aGUgc3BlY2lmaWVkIHZhbHVlCisg
ICAgICAgIGlzIGEgcG9zaXRpdmUgcG93ZXIgb2YgdHdvLiBUaGlzIHZhcmlhbnQgaXMgb25seSBj
b21waWxlZCB3aGVuIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQgKGkuZS4gIUFTU0VSVF9ESVNBQkxF
RCkuCisgICAgICAgIChXVEY6Ok9wdGlvblNldDo6aXNFbXB0eSk6IFJldHVybnMgd2hldGhlciB0
aGUgc2V0IGlzIGVtcHR5LgorICAgICAgICAoV1RGOjpPcHRpb25TZXQ6OmJlZ2luKTogUmV0dXJu
cyBhbiBpdGVyYXRvciB0byB0aGUgZW51bWVyYXRvciB3aXRoIHRoZSBzbWFsbGVzdCB2YWx1ZSBp
biB0aGUgc2V0LgorICAgICAgICAoV1RGOjpPcHRpb25TZXQ6OmVuZCk6IFJldHVybnMgYW4gaXRl
cmF0b3IgdGhhdCByZXByZXNlbnRzIHRoZSBlbmQgc2VudGluZWwgb2YgdGhlIHNldC4KKyAgICAg
ICAgKFdURjo6T3B0aW9uU2V0SXRlcmF0b3I6Ok9wdGlvblNldEl0ZXJhdG9yKTogSW1wbGVtZW50
cyBhIGZvcndhcmQgaXRlcmF0b3IgZm9yIHRoZSBzZXQuCisgICAgICAgIChXVEY6Ok9wdGlvblNl
dEl0ZXJhdG9yOjpvcGVyYXRvcj0pOiBBZGRlZC4KKyAgICAgICAgKFdURjo6T3B0aW9uU2V0SXRl
cmF0b3I6Om9wZXJhdG9yKik6IFJldHVybnMgdGhlIGVudW1lcmF0b3IgcG9pbnRlZCB0byBieSB0
aGUgaXRlcmF0b3IuCisgICAgICAgIChXVEY6Ok9wdGlvblNldEl0ZXJhdG9yOjpvcGVyYXRvcisr
KTogQWR2YW5jZSB0byB0aGUgbmV4dCBzbWFsbGVzdCBlbnVtZXJhdG9yIGluIHRoZSBzZXQuIAor
ICAgICAgICAoV1RGOjpPcHRpb25TZXRJdGVyYXRvcjo6b3BlcmF0b3I9PSk6IFJldHVybnMgd2hl
dGhlciB0aGUgaXRlcmF0b3IgaXMgZXF1YWwgdG8gdGhlIHNwZWNpZmllZCBpdGVyYXRvci4KKyAg
ICAgICAgKFdURjo6T3B0aW9uU2V0SXRlcmF0b3I6Om9wZXJhdG9yIT0pOiBSZXR1cm5zIHdoZXRo
ZXIgdGhlIGl0ZXJhdG9yIGlzIG5vdCBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIGl0ZXJhdG9yLgor
CisyMDE2LTAzLTAyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKwogICAgICAg
ICBBZGQgdW5pdCB0ZXN0cyBmb3IgV1RGOjpPcHRpb25TZXQKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDkyNQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9PcHRpb25TZXQuaCBiL1NvdXJjZS9XVEYvd3RmL09wdGlvblNldC5oCmluZGV4IGU5
OWU5NzZiMjkwMTNlYjY5MGJlMGQ4ZDBmNGY1MTZlOGI3ZTg4MjIuLmZmOTZhODhlZjE3N2QwNWRi
NmMwY2NkNWMxY2ZkY2NlNDRiOWRhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL09wdGlv
blNldC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL09wdGlvblNldC5oCkBAIC0yNywxOCArMjcsMjgg
QEAKICNkZWZpbmUgT3B0aW9uU2V0X2gKIAogI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+Cisj
aW5jbHVkZSA8aXRlcmF0b3I+CiAjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU3RvcmFnZVR5cGU+IGNsYXNz
IE9wdGlvblNldEl0ZXJhdG9yOworCisvLyBPcHRpb25TZXQgaXMgYSBjbGFzcyB0aGF0IHJlcHJl
c2VudHMgYSBzZXQgb2YgZW51bWVyYXRvcnMgaW4gYSBzcGFjZS1lZmZpY2llbnQgbWFubmVyLiBU
aGUgZW51bWVyYXRvcnMKKy8vIG11c3QgYmUgcG93ZXJzIG9mIHR3byBncmVhdGVyIHRoYW4gMC4g
VGhpcyBjbGFzcyBpcyB1c2VmdWwgYXMgYSByZXBsYWNlbWVudCBmb3IgcGFzc2luZyBhIGJpdG1h
c2sgb2YKKy8vIGVudW1lcmF0b3JzIGFyb3VuZC4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNz
IE9wdGlvblNldCB7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2VudW08VD46OnZhbHVlLCAi
VCBpcyBub3QgYW4gZW51bSB0eXBlIik7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Om1ha2Vf
dW5zaWduZWQ8dHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8VD46OnR5cGU+Ojp0eXBlIFN0
b3JhZ2VUeXBlOwogCiBwdWJsaWM6CisgICAgdHlwZWRlZiBPcHRpb25TZXRJdGVyYXRvcjxULCBT
dG9yYWdlVHlwZT4gaXRlcmF0b3I7CisKICAgICBzdGF0aWMgT3B0aW9uU2V0IGZyb21SYXcoU3Rv
cmFnZVR5cGUgc3RvcmFnZVR5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4oc3RvcmFnZVR5cGUpOworICAgICAgICByZXR1cm4gT3B0aW9uU2V0KHN0YXRpY19jYXN0PFQ+
KHN0b3JhZ2VUeXBlKSwgT3B0aW9uU2V0OjpGcm9tUmF3VmFsdWUpOwogICAgIH0KIAogICAgIGNv
bnN0ZXhwciBPcHRpb25TZXQoKQpAQCAtNDYsMjIgKzU2LDM3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogCisjaWYgQVNTRVJUX0RJU0FCTEVECiAgICAgY29uc3RleHByIE9wdGlvblNldChUIHQp
CiAgICAgICAgIDogbV9zdG9yYWdlKHN0YXRpY19jYXN0PFN0b3JhZ2VUeXBlPih0KSkKICAgICB7
CiAgICAgfQorI2Vsc2UKKyAgICBPcHRpb25TZXQoVCB0KQorICAgICAgICA6IG1fc3RvcmFnZShz
dGF0aWNfY2FzdDxTdG9yYWdlVHlwZT4odCkpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKGhhc09uZUJpdFNldChzdGF0aWNfY2FzdDxTdG9yYWdlVHlwZT4odCkpLCAiRW51bWVy
YXRvciBpcyBub3QgYSBwb3NpdGl2ZSBwb3dlciBvZiB0d28uIik7CisgICAgfQorI2VuZGlmCiAK
ICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGNvbnN0ZXhwciBvbmNlIHdlIGFkb3B0IEMrKzE0IGFz
IEMrKzExIGRvZXMgbm90IHN1cHBvcnQgZm9yLWxvb3BzCiAgICAgLy8gaW4gYSBjb25zdGV4cHIg
ZnVuY3Rpb24uCiAgICAgT3B0aW9uU2V0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiBpbml0aWFs
aXplckxpc3QpCiAgICAgICAgIDogbV9zdG9yYWdlKDApCiAgICAgewotICAgICAgICBmb3IgKGF1
dG8mIG9wdGlvbiA6IGluaXRpYWxpemVyTGlzdCkKKyAgICAgICAgZm9yIChhdXRvJiBvcHRpb24g
OiBpbml0aWFsaXplckxpc3QpIHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaGFz
T25lQml0U2V0KHN0YXRpY19jYXN0PFN0b3JhZ2VUeXBlPihvcHRpb24pKSwgIkVudW1lcmF0b3Ig
aXMgbm90IGEgcG9zaXRpdmUgcG93ZXIgb2YgdHdvLiIpOwogICAgICAgICAgICAgbV9zdG9yYWdl
IHw9IHN0YXRpY19jYXN0PFN0b3JhZ2VUeXBlPihvcHRpb24pOworICAgICAgICB9CiAgICAgfQog
CiAgICAgY29uc3RleHByIFN0b3JhZ2VUeXBlIHRvUmF3KCkgY29uc3QgeyByZXR1cm4gbV9zdG9y
YWdlOyB9CiAKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1f
c3RvcmFnZTsgfQorCisgICAgY29uc3RleHByIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9zdG9yYWdlOyB9CisgICAgY29uc3RleHByIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KKwogICAgIGNvbnN0ZXhwciBib29sIGNvbnRhaW5zKE9wdGlvblNldCBvcHRpb25T
ZXQpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9zdG9yYWdlICYgb3B0aW9uU2V0Lm1f
c3RvcmFnZTsKQEAgLTc1LDkgKzEwMCw0NCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgor
ICAgIGVudW0gSW5pdGlhbGl6YXRpb25UYWcgeyBGcm9tUmF3VmFsdWUgfTsKKyAgICBjb25zdGV4
cHIgT3B0aW9uU2V0KFQgdCwgSW5pdGlhbGl6YXRpb25UYWcpCisgICAgICAgIDogbV9zdG9yYWdl
KHN0YXRpY19jYXN0PFN0b3JhZ2VUeXBlPih0KSkKKyAgICB7CisgICAgfQogICAgIFN0b3JhZ2VU
eXBlIG1fc3RvcmFnZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFN0b3Jh
Z2VUeXBlPiBjbGFzcyBPcHRpb25TZXRJdGVyYXRvciB7CitwdWJsaWM6CisgICAgT3B0aW9uU2V0
SXRlcmF0b3IoY29uc3QgU3RvcmFnZVR5cGUgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkgeyB9Cisg
ICAgT3B0aW9uU2V0SXRlcmF0b3IoY29uc3QgT3B0aW9uU2V0SXRlcmF0b3ImIG90aGVyKSA6IG1f
dmFsdWUob3RoZXIubV92YWx1ZSkgeyB9CisKKyAgICBPcHRpb25TZXRJdGVyYXRvciYgb3BlcmF0
b3I9KGNvbnN0IE9wdGlvblNldEl0ZXJhdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fdmFs
dWUgPSBvdGhlci5tX3ZhbHVlOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAg
Ly8gSXNvbGF0ZSB0aGUgcmlnaHRtb3N0IHNldCBiaXQuCisgICAgVCBvcGVyYXRvciooKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxUPihtX3ZhbHVlICYgLW1fdmFsdWUpOyB9CisKKyAgICAv
LyBJdGVyYXRlcyBmcm9tIHNtYWxsZXN0IHRvIGxhcmdlc3QgZW51bSB2YWx1ZSBieSB0dXJuaW5n
IG9mZiB0aGUgcmlnaHRtb3N0IHNldCBiaXQuCisgICAgT3B0aW9uU2V0SXRlcmF0b3ImIG9wZXJh
dG9yKysoKQorICAgIHsKKyAgICAgICAgbV92YWx1ZSAmPSBtX3ZhbHVlIC0gMTsKKyAgICAgICAg
cmV0dXJuICp0aGlzOworICAgIH0KKworICAgIE9wdGlvblNldEl0ZXJhdG9yJiBvcGVyYXRvcisr
KGludCkgPSBkZWxldGU7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3B0aW9uU2V0SXRl
cmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7IH0K
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgT3B0aW9uU2V0SXRlcmF0b3ImIG90aGVyKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7IH0KKworcHJpdmF0ZToKKyAgICBT
dG9yYWdlVHlwZSBtX3ZhbHVlOworfTsKKwogfQogCiB1c2luZyBXVEY6Ok9wdGlvblNldDsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxODFiMzlk
MjkxYTA1MDJkY2E2ZmUyNmI3OTAzYTU5N2I5MDgxNzRkLi5hZDI4ZWM2MTAyODBiMjRhOTYwOWRh
MDJkODQwNTMwMTdkMzRkZDVlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAgQEAKIDIwMTYtMDMtMDIgIERhbmllbCBCYXRlcyAg
PGRhYmF0ZXNAYXBwbGUuY29tPgogCisgICAgICAgIFN1cHBvcnQgaXRlcmF0aW5nIG92ZXIgYW4g
T3B0aW9uU2V0IGFuZCBjaGVja2luZyBpZiBpdCBpcyBlbXB0eQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0OTQxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3RzIHRvIGVuc3VyZSB0aGF0IHdl
IGRvIG5vdCByZWdyZXNzaW9uIGJvdGggaXRlcmF0aW9uIG9mIGFuIE9wdGlvblNldCBhbmQKKyAg
ICAgICAgZGV0ZXJtaW5pbmcgd2hldGhlciBhbiBPcHRpb25TZXQgaXMgZW1wdHkuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtVXRpbGl0aWVzLmg6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpVdGlsOjphc3NlcnRTdHJvbmdFbnVtKTogSGVscGVyIGZ1bmN0aW9uIHRvIGFzc2Vy
dCB0d28gc3Ryb25nIGVudW0gdHlwZSBmb3IgZXF1YWxpdHkuCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvT3B0aW9uU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorCisyMDE2LTAzLTAyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKwog
ICAgICAgICBBZGQgdW5pdCB0ZXN0cyBmb3IgV1RGOjpPcHRpb25TZXQKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDkyNQogCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtVXRpbGl0aWVzLmggYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1BsYXRmb3JtVXRpbGl0aWVzLmgKaW5kZXggNzU4M2U0ZWUwNzdlM2U4ODNlNmE1N2RiNWQx
Yjg5ZWM0Nzk0Mjk0Yi4uY2Y2OTZmNjFkNDBiZGU1ZmI1MWFmMGY5ODNhZThiYWJlNTJiYjI1ZSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVV0aWxpdGllcy5oCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1VdGlsaXRpZXMuaApAQCAtNzUsNiArNzUsMTgg
QEAgc3RhdGljIGlubGluZSA6OnRlc3Rpbmc6OkFzc2VydGlvblJlc3VsdCBhc3NlcnRXS1N0cmlu
Z0VxdWFsKGNvbnN0IGNoYXIqIGV4cGVjdGUKICNkZWZpbmUgRVhQRUNUX1dLX1NUUkVRKGV4cGVj
dGVkLCBhY3R1YWwpIFwKICAgICBFWFBFQ1RfUFJFRF9GT1JNQVQyKFRlc3RXZWJLaXRBUEk6OlV0
aWw6OmFzc2VydFdLU3RyaW5nRXF1YWwsIGV4cGVjdGVkLCBhY3R1YWwpCiAKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIDo6dGVzdGluZzo6QXNzZXJ0aW9uUmVzdWx0IGFzc2Vy
dFN0cm9uZ0VudW0oY29uc3QgY2hhciogZXhwZWN0ZWRfZXhwcmVzc2lvbiwgY29uc3QgY2hhciog
YWN0dWFsX2V4cHJlc3Npb24sIFQgZXhwZWN0ZWQsIFQgYWN0dWFsKQoreworICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZSwgIlQgaXMgbm90IGFuIGVudW0gdHlwZSIpOwor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8VD46OnR5cGUgVW5kZXJs
eWluZ1N0b3JhZ2VUeXBlOworICAgIHJldHVybiA6OnRlc3Rpbmc6OmludGVybmFsOjpDbXBIZWxw
ZXJFUShleHBlY3RlZF9leHByZXNzaW9uLCBhY3R1YWxfZXhwcmVzc2lvbiwgc3RhdGljX2Nhc3Q8
VW5kZXJseWluZ1N0b3JhZ2VUeXBlPihleHBlY3RlZCksIHN0YXRpY19jYXN0PFVuZGVybHlpbmdT
dG9yYWdlVHlwZT4oYWN0dWFsKSk7Cit9CisKKyNkZWZpbmUgRVhQRUNUX1NUUk9OR19FTlVNX0VR
KGV4cGVjdGVkLCBhY3R1YWwpIFwKKyAgICBFWFBFQ1RfUFJFRF9GT1JNQVQyKFRlc3RXZWJLaXRB
UEk6OlV0aWw6OmFzc2VydFN0cm9uZ0VudW0sIGV4cGVjdGVkLCBhY3R1YWwpCisKKwogI2lmIFdL
X0FQSV9FTkFCTEVECiBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBUZXN0UGx1Z0luQ2xhc3NOYW1l
UGFyYW1ldGVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9PcHRpb25TZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9u
U2V0LmNwcAppbmRleCAyMDk2MTljODU0ODJiNzJmNmFiYTU2NmNiODVmY2EwMzFhYjM5ZGYxLi5j
YjhmODNkZTRmOTQyZDQ0MjhmZmMxZGE0NjRhYWJiMTEyZmMwNzk1IDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9PcHRpb25TZXQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL09wdGlvblNldC5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKIAog
I2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApAQCAtMzgsNiArMzksNyBAQCBlbnVtIGNsYXNz
IEV4YW1wbGVGbGFncyB7CiBURVNUKFdURl9PcHRpb25TZXQsIEVtcHR5U2V0KQogewogICAgIE9w
dGlvblNldDxFeGFtcGxlRmxhZ3M+IHNldDsKKyAgICBFWFBFQ1RfVFJVRShzZXQuaXNFbXB0eSgp
KTsKICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QSkpOwogICAg
IEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpCKSk7CiAgICAgRVhQRUNU
X0ZBTFNFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkMpKTsKQEAgLTQ2LDYgKzQ4LDcgQEAg
VEVTVChXVEZfT3B0aW9uU2V0LCBFbXB0eVNldCkKIFRFU1QoV1RGX09wdGlvblNldCwgQ29udGFp
bnNPbmVGbGFnKQogewogICAgIE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+IHNldCA9IEV4YW1wbGVG
bGFnczo6QTsKKyAgICBFWFBFQ1RfRkFMU0Uoc2V0LmlzRW1wdHkoKSk7CiAgICAgRVhQRUNUX1RS
VUUoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QSkpOwogICAgIEVYUEVDVF9GQUxTRShzZXQu
Y29udGFpbnMoRXhhbXBsZUZsYWdzOjpCKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlu
cyhFeGFtcGxlRmxhZ3M6OkMpKTsKQEAgLTU0LDYgKzU3LDcgQEAgVEVTVChXVEZfT3B0aW9uU2V0
LCBDb250YWluc09uZUZsYWcpCiBURVNUKFdURl9PcHRpb25TZXQsIENvbnRhaW5zVHdvRmxhZ3Mp
CiB7CiAgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz4gc2V0IHsgRXhhbXBsZUZsYWdzOjpBLCBF
eGFtcGxlRmxhZ3M6OkIgfTsKKyAgICBFWFBFQ1RfRkFMU0Uoc2V0LmlzRW1wdHkoKSk7CiAgICAg
RVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QSkpOwogICAgIEVYUEVDVF9U
UlVFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkIpKTsKICAgICBFWFBFQ1RfRkFMU0Uoc2V0
LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QykpOwpAQCAtNzEsMTEgKzc1LDEzIEBAIFRFU1QoV1RG
X09wdGlvblNldCwgT3BlcmF0b3JCaXR3aXNlT3IpCiBURVNUKFdURl9PcHRpb25TZXQsIEVtcHR5
T3B0aW9uU2V0VG9SYXdWYWx1ZVRvT3B0aW9uU2V0KQogewogICAgIE9wdGlvblNldDxFeGFtcGxl
RmxhZ3M+IHNldDsKKyAgICBFWFBFQ1RfVFJVRShzZXQuaXNFbXB0eSgpKTsKICAgICBFWFBFQ1Rf
RkFMU0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QSkpOwogICAgIEVYUEVDVF9GQUxTRShz
ZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpCKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250
YWlucyhFeGFtcGxlRmxhZ3M6OkMpKTsKIAogICAgIGF1dG8gc2V0MiA9IE9wdGlvblNldDxFeGFt
cGxlRmxhZ3M+Ojpmcm9tUmF3KHNldC50b1JhdygpKTsKKyAgICBFWFBFQ1RfVFJVRShzZXQyLmlz
RW1wdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldDIuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpB
KSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldDIuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpCKSk7CiAg
ICAgRVhQRUNUX0ZBTFNFKHNldDIuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpDKSk7CkBAIC04NCwx
MSArOTAsMTMgQEAgVEVTVChXVEZfT3B0aW9uU2V0LCBFbXB0eU9wdGlvblNldFRvUmF3VmFsdWVU
b09wdGlvblNldCkKIFRFU1QoV1RGX09wdGlvblNldCwgT3B0aW9uU2V0VGhhdENvbnRhaW5zT25l
RmxhZ1RvUmF3VmFsdWVUb09wdGlvblNldCkKIHsKICAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdz
PiBzZXQgPSBFeGFtcGxlRmxhZ3M6OkE7CisgICAgRVhQRUNUX0ZBTFNFKHNldC5pc0VtcHR5KCkp
OwogICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkEpKTsKICAgICBF
WFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QikpOwogICAgIEVYUEVDVF9G
QUxTRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpDKSk7CiAKICAgICBhdXRvIHNldDIgPSBP
cHRpb25TZXQ8RXhhbXBsZUZsYWdzPjo6ZnJvbVJhdyhzZXQudG9SYXcoKSk7CisgICAgRVhQRUNU
X0ZBTFNFKHNldDIuaXNFbXB0eSgpKTsKICAgICBFWFBFQ1RfVFJVRShzZXQyLmNvbnRhaW5zKEV4
YW1wbGVGbGFnczo6QSkpOwogICAgIEVYUEVDVF9GQUxTRShzZXQyLmNvbnRhaW5zKEV4YW1wbGVG
bGFnczo6QikpOwogICAgIEVYUEVDVF9GQUxTRShzZXQyLmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6
QykpOwpAQCAtOTcsMTQgKzEwNSw1NiBAQCBURVNUKFdURl9PcHRpb25TZXQsIE9wdGlvblNldFRo
YXRDb250YWluc09uZUZsYWdUb1Jhd1ZhbHVlVG9PcHRpb25TZXQpCiBURVNUKFdURl9PcHRpb25T
ZXQsIE9wdGlvblNldFRoYXRDb250YWluc1R3b0ZsYWdzVG9SYXdWYWx1ZVRvT3B0aW9uU2V0KQog
ewogICAgIE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+IHNldCB7IEV4YW1wbGVGbGFnczo6QSwgRXhh
bXBsZUZsYWdzOjpDIH07CisgICAgRVhQRUNUX0ZBTFNFKHNldC5pc0VtcHR5KCkpOwogICAgIEVY
UEVDVF9UUlVFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkEpKTsKICAgICBFWFBFQ1RfVFJV
RShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpDKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldC5j
b250YWlucyhFeGFtcGxlRmxhZ3M6OkIpKTsKIAogICAgIGF1dG8gc2V0MiA9IE9wdGlvblNldDxF
eGFtcGxlRmxhZ3M+Ojpmcm9tUmF3KHNldC50b1JhdygpKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc2V0
Mi5pc0VtcHR5KCkpOwogICAgIEVYUEVDVF9UUlVFKHNldDIuY29udGFpbnMoRXhhbXBsZUZsYWdz
OjpBKSk7CiAgICAgRVhQRUNUX1RSVUUoc2V0Mi5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkMpKTsK
ICAgICBFWFBFQ1RfRkFMU0Uoc2V0Mi5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkIpKTsKIH0KIAor
VEVTVChXVEZfT3B0aW9uU2V0LCBUd29JdGVyYXRvcnNJbnRvU2FtZU9wdGlvblNldCkKK3sKKyAg
ICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiBzZXQgeyBFeGFtcGxlRmxhZ3M6OkMsIEV4YW1wbGVG
bGFnczo6QiB9OworICAgIE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+OjppdGVyYXRvciBpdDEgPSBz
ZXQuYmVnaW4oKTsKKyAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPjo6aXRlcmF0b3IgaXQyID0g
aXQxOworICAgICsraXQxOworICAgIEVYUEVDVF9TVFJPTkdfRU5VTV9FUShFeGFtcGxlRmxhZ3M6
OkMsICppdDEpOworICAgIEVYUEVDVF9TVFJPTkdfRU5VTV9FUShFeGFtcGxlRmxhZ3M6OkIsICpp
dDIpOworfQorCitURVNUKFdURl9PcHRpb25TZXQsIEl0ZXJhdGVPdmVyT3B0aW9uU2V0VGhhdENv
bnRhaW5zVHdvRmxhZ3MpCit7CisgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz4gc2V0IHsgRXhh
bXBsZUZsYWdzOjpBLCBFeGFtcGxlRmxhZ3M6OkMgfTsKKyAgICBPcHRpb25TZXQ8RXhhbXBsZUZs
YWdzPjo6aXRlcmF0b3IgaXQgPSBzZXQuYmVnaW4oKTsKKyAgICBPcHRpb25TZXQ8RXhhbXBsZUZs
YWdzPjo6aXRlcmF0b3IgZW5kID0gc2V0LmVuZCgpOworICAgIEVYUEVDVF9UUlVFKGl0ICE9IGVu
ZCk7CisgICAgRVhQRUNUX1NUUk9OR19FTlVNX0VRKEV4YW1wbGVGbGFnczo6QSwgKml0KTsKKyAg
ICArK2l0OworICAgIEVYUEVDVF9TVFJPTkdfRU5VTV9FUShFeGFtcGxlRmxhZ3M6OkMsICppdCk7
CisgICAgKytpdDsKKyAgICBFWFBFQ1RfVFJVRShpdCA9PSBlbmQpOworfQorCitURVNUKFdURl9P
cHRpb25TZXQsIEl0ZXJhdGlvbk9yZGVyVGhlU2FtZVJlZ2FyZGxlc3NPZkluc2VydGlvbk9yZGVy
KQoreworICAgIE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+IHNldDEgPSBFeGFtcGxlRmxhZ3M6OkM7
CisgICAgc2V0MSB8PSBFeGFtcGxlRmxhZ3M6OkE7CisKKyAgICBPcHRpb25TZXQ8RXhhbXBsZUZs
YWdzPiBzZXQyID0gRXhhbXBsZUZsYWdzOjpBOworICAgIHNldDIgfD0gRXhhbXBsZUZsYWdzOjpD
OworCisgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz46Oml0ZXJhdG9yIGl0MSA9IHNldDEuYmVn
aW4oKTsKKyAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPjo6aXRlcmF0b3IgaXQyID0gc2V0Mi5i
ZWdpbigpOworCisgICAgRVhQRUNUX1RSVUUoKml0MSA9PSAqaXQyKTsKKyAgICArK2l0MTsKKyAg
ICArK2l0MjsKKyAgICBFWFBFQ1RfVFJVRSgqaXQxID09ICppdDIpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272785</attachid>
            <date>2016-03-03 15:56:23 -0800</date>
            <delta_ts>2016-03-07 21:11:58 -0800</delta_ts>
            <desc>Patch and Unit tests</desc>
            <filename>bug-154941-20160303155608.patch</filename>
            <type>text/plain</type>
            <size>12929</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3NTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDEwM2MxZTM1MDlkYjY5OWU1ODQxZjhi
N2ZjNDM5OWZjNmIxZjgwMDUuLjE3MTZhOTg3MThmOTNkNzE5MmI1N2Y1NzA0N2JlMWU4M2M1NmIw
ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsMzYgQEAKIDIwMTYtMDMtMDMgIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgogCisgICAgICAgIFN1cHBvcnQgaXRlcmF0aW5nIG92ZXIgYW4gT3B0aW9u
U2V0IGFuZCBjaGVja2luZyBpZiBpdCBpcyBlbXB0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0OTQxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
NDk2NDE4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGl0ZXJhdGluZyBvdmVyIHRoZSBlbnVtZXJhdG9ycyBp
biBhbiBPcHRpb25TZXQgYXMgd2VsbCBhcworICAgICAgICBkZXRlcm1pbmluZyBpZiB0aGUgc2V0
IGlzIGVtcHR5LgorCisgICAgICAgIEl0ZXJhdGluZyBvdmVyIGFuIE9wdGlvblNldCBpcyBpbiBC
aWcgVGhldGEoTikgd2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluCisgICAgICAgIHRo
ZSBzZXQuIE1vcmUgcHJlY2lzZWx5LCBpdCBpcyBpbiBCaWcgVGhldGEobG9nIE0pIHdoZXJlIE0g
aXMgdGhlIGJpdG1hc2sgcmVwcmVzZW50ZWQKKyAgICAgICAgYnkgdGhlIGJpdHdpc2UgT1ItaW5n
IG9mIGFsbCBlbnVtZXJhdG9ycyBpbiB0aGUgc2V0LgorCisgICAgICAgICogd3RmL09wdGlvblNl
dC5oOiBBZGRlZCBjb21tZW50IHRvIGRlc2NyaWJlIHRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3Mg
YW5kIGl0cyBpbnZhcmlhbnQgLQorICAgICAgICB0aGUgZW51bWVyYXRvcnMgbXVzdCBiZSBwb3Np
dGl2ZSBwb3dlcnMgb2YgdHdvLgorICAgICAgICAoV1RGOjpPcHRpb25TZXQ6OmZyb21SYXcpOiBJ
bnN0YW50aWF0ZSB1c2luZyBzcGVjaWFsaXplZCBwcml2YXRlIGNvbnN0cnVjdG9yIHRvIGFsbG93
CisgICAgICAgIGluc3RhbnRpYXRpb24gd2l0aCBhIHJhdyB2YWx1ZSBvZiAwLgorICAgICAgICAo
V1RGOjpPcHRpb25TZXQ6Ok9wdGlvblNldCk6IFNwZWNpYWxpemVkIGNvbnN0cnVjdG9yIHRoYXQg
YXNzZXJ0cyB0aGF0IHRoZSBzcGVjaWZpZWQgdmFsdWUKKyAgICAgICAgaXMgYSBwb3NpdGl2ZSBw
b3dlciBvZiB0d28uIFRoaXMgdmFyaWFudCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYXNzZXJ0aW9u
cyBhcmUgZW5hYmxlZCAoaS5lLiAhQVNTRVJUX0RJU0FCTEVEKS4KKyAgICAgICAgKFdURjo6T3B0
aW9uU2V0Ojppc0VtcHR5KTogUmV0dXJucyB3aGV0aGVyIHRoZSBzZXQgaXMgZW1wdHkuCisgICAg
ICAgIChXVEY6Ok9wdGlvblNldDo6YmVnaW4pOiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBl
bnVtZXJhdG9yIHdpdGggdGhlIHNtYWxsZXN0IHZhbHVlIGluIHRoZSBzZXQuCisgICAgICAgIChX
VEY6Ok9wdGlvblNldDo6ZW5kKTogUmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IHJlcHJlc2VudHMg
dGhlIGVuZCBzZW50aW5lbCBvZiB0aGUgc2V0LgorICAgICAgICAoV1RGOjpPcHRpb25TZXRJdGVy
YXRvcjo6T3B0aW9uU2V0SXRlcmF0b3IpOiBJbXBsZW1lbnRzIGEgZm9yd2FyZCBpdGVyYXRvciBm
b3IgdGhlIHNldC4KKyAgICAgICAgKFdURjo6T3B0aW9uU2V0SXRlcmF0b3I6Om9wZXJhdG9yPSk6
IEFkZGVkLgorICAgICAgICAoV1RGOjpPcHRpb25TZXRJdGVyYXRvcjo6b3BlcmF0b3IqKTogUmV0
dXJucyB0aGUgZW51bWVyYXRvciBwb2ludGVkIHRvIGJ5IHRoZSBpdGVyYXRvci4KKyAgICAgICAg
KFdURjo6T3B0aW9uU2V0SXRlcmF0b3I6Om9wZXJhdG9yKyspOiBBZHZhbmNlIHRvIHRoZSBuZXh0
IHNtYWxsZXN0IGVudW1lcmF0b3IgaW4gdGhlIHNldC4KKyAgICAgICAgKFdURjo6T3B0aW9uU2V0
SXRlcmF0b3I6Om9wZXJhdG9yPT0pOiBSZXR1cm5zIHdoZXRoZXIgdGhlIGl0ZXJhdG9yIGlzIGVx
dWFsIHRvIHRoZSBzcGVjaWZpZWQgaXRlcmF0b3IuCisgICAgICAgIChXVEY6Ok9wdGlvblNldEl0
ZXJhdG9yOjpvcGVyYXRvciE9KTogUmV0dXJucyB3aGV0aGVyIHRoZSBpdGVyYXRvciBpcyBub3Qg
ZXF1YWwgdG8gdGhlIHNwZWNpZmllZCBpdGVyYXRvci4KKworMjAxNi0wMy0wMyAgRGFuaWVsIEJh
dGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKICAgICAgICAgQWRkIHVuaXQgdGVzdHMgZm9yIFdU
Rjo6T3B0aW9uU2V0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTQ5MjUKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0OTY0MjExPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvT3B0aW9uU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25TZXQu
aAppbmRleCA3YzZhNGIzOGQ5ZjE1MDExZTAzMGMxY2NkMjM0MWU2ZTJiYTY5ZTVmLi5lMjk3NmVj
MDZhNmFmMGQwZTk1ZjQxMTIxOTJjOWQzOWJmODQzOWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9PcHRpb25TZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25TZXQuaApAQCAtMjcs
MzcgKzI3LDYyIEBACiAjZGVmaW5lIE9wdGlvblNldF9oCiAKICNpbmNsdWRlIDxpbml0aWFsaXpl
cl9saXN0PgorI2luY2x1ZGUgPGl0ZXJhdG9yPgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIFdURiB7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFN0b3JhZ2VU
eXBlPiBjbGFzcyBPcHRpb25TZXRJdGVyYXRvcjsKKworLy8gT3B0aW9uU2V0IGlzIGEgY2xhc3Mg
dGhhdCByZXByZXNlbnRzIGEgc2V0IG9mIGVudW1lcmF0b3JzIGluIGEgc3BhY2UtZWZmaWNpZW50
IG1hbm5lci4gVGhlIGVudW1lcmF0b3JzCisvLyBtdXN0IGJlIHBvd2VycyBvZiB0d28gZ3JlYXRl
ciB0aGFuIDAuIFRoaXMgY2xhc3MgaXMgdXNlZnVsIGFzIGEgcmVwbGFjZW1lbnQgZm9yIHBhc3Np
bmcgYSBiaXRtYXNrIG9mCisvLyBlbnVtZXJhdG9ycyBhcm91bmQuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBPcHRpb25TZXQgewogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19lbnVtPFQ+
Ojp2YWx1ZSwgIlQgaXMgbm90IGFuIGVudW0gdHlwZSIpOwogICAgIHR5cGVkZWYgdHlwZW5hbWUg
c3RkOjptYWtlX3Vuc2lnbmVkPHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPFQ+Ojp0eXBl
Pjo6dHlwZSBTdG9yYWdlVHlwZTsKIAogcHVibGljOgorICAgIHR5cGVkZWYgT3B0aW9uU2V0SXRl
cmF0b3I8VCwgU3RvcmFnZVR5cGU+IGl0ZXJhdG9yOworCiAgICAgc3RhdGljIE9wdGlvblNldCBm
cm9tUmF3KFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KHN0b3JhZ2VUeXBlKTsKKyAgICAgICAgcmV0dXJuIE9wdGlvblNldChzdGF0
aWNfY2FzdDxUPihzdG9yYWdlVHlwZSksIE9wdGlvblNldDo6RnJvbVJhd1ZhbHVlKTsKICAgICB9
CiAKICAgICBjb25zdGV4cHIgT3B0aW9uU2V0KCkgPSBkZWZhdWx0OwogCisjaWYgQVNTRVJUX0RJ
U0FCTEVECiAgICAgY29uc3RleHByIE9wdGlvblNldChUIHQpCiAgICAgICAgIDogbV9zdG9yYWdl
KHN0YXRpY19jYXN0PFN0b3JhZ2VUeXBlPih0KSkKICAgICB7CiAgICAgfQorI2Vsc2UKKyAgICBP
cHRpb25TZXQoVCB0KQorICAgICAgICA6IG1fc3RvcmFnZShzdGF0aWNfY2FzdDxTdG9yYWdlVHlw
ZT4odCkpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGhhc09uZUJpdFNldChz
dGF0aWNfY2FzdDxTdG9yYWdlVHlwZT4odCkpLCAiRW51bWVyYXRvciBpcyBub3QgYSBwb3NpdGl2
ZSBwb3dlciBvZiB0d28uIik7CisgICAgfQorI2VuZGlmCiAKICAgICAvLyBGSVhNRTogTWFrZSB0
aGlzIGNvbnN0ZXhwciBvbmNlIHdlIGFkb3B0IEMrKzE0IGFzIEMrKzExIGRvZXMgbm90IHN1cHBv
cnQgZm9yLWxvb3BzCiAgICAgLy8gaW4gYSBjb25zdGV4cHIgZnVuY3Rpb24uCiAgICAgT3B0aW9u
U2V0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiBpbml0aWFsaXplckxpc3QpCiAgICAgewotICAg
ICAgICBmb3IgKGF1dG8mIG9wdGlvbiA6IGluaXRpYWxpemVyTGlzdCkKKyAgICAgICAgZm9yIChh
dXRvJiBvcHRpb24gOiBpbml0aWFsaXplckxpc3QpIHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoaGFzT25lQml0U2V0KHN0YXRpY19jYXN0PFN0b3JhZ2VUeXBlPihvcHRpb24pKSwg
IkVudW1lcmF0b3IgaXMgbm90IGEgcG9zaXRpdmUgcG93ZXIgb2YgdHdvLiIpOwogICAgICAgICAg
ICAgbV9zdG9yYWdlIHw9IHN0YXRpY19jYXN0PFN0b3JhZ2VUeXBlPihvcHRpb24pOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgY29uc3RleHByIFN0b3JhZ2VUeXBlIHRvUmF3KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdG9yYWdlOyB9CiAKKyAgICBjb25zdGV4cHIgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gIW1fc3RvcmFnZTsgfQorCisgICAgY29uc3RleHByIGl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9CisgICAgY29uc3RleHByIGl0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgIGNvbnN0ZXhwciBib29sIGNvbnRhaW5zKE9wdGlv
blNldCBvcHRpb25TZXQpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9zdG9yYWdlICYg
b3B0aW9uU2V0Lm1fc3RvcmFnZTsKQEAgLTcxLDkgKzk2LDQ0IEBAIHB1YmxpYzoKICAgICB9CiAK
IHByaXZhdGU6CisgICAgZW51bSBJbml0aWFsaXphdGlvblRhZyB7IEZyb21SYXdWYWx1ZSB9Owor
ICAgIGNvbnN0ZXhwciBPcHRpb25TZXQoVCB0LCBJbml0aWFsaXphdGlvblRhZykKKyAgICAgICAg
OiBtX3N0b3JhZ2Uoc3RhdGljX2Nhc3Q8U3RvcmFnZVR5cGU+KHQpKQorICAgIHsKKyAgICB9CiAg
ICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlIHsgMCB9OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgU3RvcmFnZVR5cGU+IGNsYXNzIE9wdGlvblNldEl0ZXJhdG9yIHsKK3B1Ymxp
YzoKKyAgICBPcHRpb25TZXRJdGVyYXRvcihjb25zdCBTdG9yYWdlVHlwZSB2YWx1ZSkgOiBtX3Zh
bHVlKHZhbHVlKSB7IH0KKyAgICBPcHRpb25TZXRJdGVyYXRvcihjb25zdCBPcHRpb25TZXRJdGVy
YXRvciYgb3RoZXIpIDogbV92YWx1ZShvdGhlci5tX3ZhbHVlKSB7IH0KKworICAgIE9wdGlvblNl
dEl0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgT3B0aW9uU2V0SXRlcmF0b3ImIG90aGVyKQorICAg
IHsKKyAgICAgICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWU7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisKKyAgICAvLyBJc29sYXRlIHRoZSByaWdodG1vc3Qgc2V0IGJpdC4KKyAgICBU
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1fdmFsdWUgJiAtbV92
YWx1ZSk7IH0KKworICAgIC8vIEl0ZXJhdGVzIGZyb20gc21hbGxlc3QgdG8gbGFyZ2VzdCBlbnVt
IHZhbHVlIGJ5IHR1cm5pbmcgb2ZmIHRoZSByaWdodG1vc3Qgc2V0IGJpdC4KKyAgICBPcHRpb25T
ZXRJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgICBtX3ZhbHVlICY9IG1fdmFs
dWUgLSAxOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgT3B0aW9uU2V0SXRl
cmF0b3ImIG9wZXJhdG9yKysoaW50KSA9IGRlbGV0ZTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPcHRpb25TZXRJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0g
b3RoZXIubV92YWx1ZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBPcHRpb25TZXRJdGVy
YXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZTsgfQor
Citwcml2YXRlOgorICAgIFN0b3JhZ2VUeXBlIG1fdmFsdWU7Cit9OworCiB9CiAKIHVzaW5nIFdU
Rjo6T3B0aW9uU2V0OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDQxZjZlNWRhYjg2MzJhMDk4MmIyMzBhY2Q2MDZmNmFkNmRiOTg0ZTcuLmY1Y2Ey
YWQ1ZDJmY2JlZGU3OTNmOGM5Y2QzYzQyYjA5MDBlMTgwN2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyMSBAQAogMjAxNi0wMy0w
MyAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKKyAgICAgICAgU3VwcG9ydCBp
dGVyYXRpbmcgb3ZlciBhbiBPcHRpb25TZXQgYW5kIGNoZWNraW5nIGlmIGl0IGlzIGVtcHR5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ5NDEKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0OTY0MTg3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0cyB0byBlbnN1cmUgdGhhdCB3ZSBkbyBu
b3QgcmVncmVzc2lvbiBib3RoIGl0ZXJhdGlvbiBvZiBhbiBPcHRpb25TZXQgYW5kCisgICAgICAg
IGRldGVybWluaW5nIHdoZXRoZXIgYW4gT3B0aW9uU2V0IGlzIGVtcHR5LgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybVV0aWxpdGllcy5oOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VXRpbDo6YXNzZXJ0U3Ryb25nRW51bSk6IEhlbHBlciBmdW5jdGlvbiB0byBhc3NlcnQgdHdv
IHN0cm9uZyBlbnVtIHR5cGUgZm9yIGVxdWFsaXR5LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL09wdGlvblNldC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KworMjAxNi0wMy0wMyAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKICAgICAg
ICAgQWRkIHVuaXQgdGVzdHMgZm9yIFdURjo6T3B0aW9uU2V0CiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ5MjUKICAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzI0OTY0MjExPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVV0
aWxpdGllcy5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVV0aWxpdGllcy5oCmluZGV4
IDc1ODNlNGVlMDc3ZTNlODgzZTZhNTdkYjVkMWI4OWVjNDc5NDI5NGIuLmNmNjk2ZjYxZDQwYmRl
NWZiNTFhZjBmOTgzYWU4YmFiZTUyYmIyNWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvUGxhdGZvcm1VdGlsaXRpZXMuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3Jt
VXRpbGl0aWVzLmgKQEAgLTc1LDYgKzc1LDE4IEBAIHN0YXRpYyBpbmxpbmUgOjp0ZXN0aW5nOjpB
c3NlcnRpb25SZXN1bHQgYXNzZXJ0V0tTdHJpbmdFcXVhbChjb25zdCBjaGFyKiBleHBlY3RlCiAj
ZGVmaW5lIEVYUEVDVF9XS19TVFJFUShleHBlY3RlZCwgYWN0dWFsKSBcCiAgICAgRVhQRUNUX1BS
RURfRk9STUFUMihUZXN0V2ViS2l0QVBJOjpVdGlsOjphc3NlcnRXS1N0cmluZ0VxdWFsLCBleHBl
Y3RlZCwgYWN0dWFsKQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIGlubGluZSA6OnRl
c3Rpbmc6OkFzc2VydGlvblJlc3VsdCBhc3NlcnRTdHJvbmdFbnVtKGNvbnN0IGNoYXIqIGV4cGVj
dGVkX2V4cHJlc3Npb24sIGNvbnN0IGNoYXIqIGFjdHVhbF9leHByZXNzaW9uLCBUIGV4cGVjdGVk
LCBUIGFjdHVhbCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZW51bTxUPjo6dmFsdWUs
ICJUIGlzIG5vdCBhbiBlbnVtIHR5cGUiKTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6dW5k
ZXJseWluZ190eXBlPFQ+Ojp0eXBlIFVuZGVybHlpbmdTdG9yYWdlVHlwZTsKKyAgICByZXR1cm4g
Ojp0ZXN0aW5nOjppbnRlcm5hbDo6Q21wSGVscGVyRVEoZXhwZWN0ZWRfZXhwcmVzc2lvbiwgYWN0
dWFsX2V4cHJlc3Npb24sIHN0YXRpY19jYXN0PFVuZGVybHlpbmdTdG9yYWdlVHlwZT4oZXhwZWN0
ZWQpLCBzdGF0aWNfY2FzdDxVbmRlcmx5aW5nU3RvcmFnZVR5cGU+KGFjdHVhbCkpOworfQorCisj
ZGVmaW5lIEVYUEVDVF9TVFJPTkdfRU5VTV9FUShleHBlY3RlZCwgYWN0dWFsKSBcCisgICAgRVhQ
RUNUX1BSRURfRk9STUFUMihUZXN0V2ViS2l0QVBJOjpVdGlsOjphc3NlcnRTdHJvbmdFbnVtLCBl
eHBlY3RlZCwgYWN0dWFsKQorCisKICNpZiBXS19BUElfRU5BQkxFRAogZXh0ZXJuIE5TU3RyaW5n
ICogY29uc3QgVGVzdFBsdWdJbkNsYXNzTmFtZVBhcmFtZXRlcjsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uU2V0LmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL09wdGlvblNldC5jcHAKaW5kZXggMjA5NjE5Yzg1NDgyYjcy
ZjZhYmE1NjZjYjg1ZmNhMDMxYWIzOWRmMS4uY2I4ZjgzZGU0Zjk0MmQ0NDI4ZmZjMWRhNDY0YWFi
YjExMmZjMDc5NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0
aW9uU2V0LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9PcHRpb25TZXQu
Y3BwCkBAIC0yNCw2ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAKICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAK
QEAgLTM4LDYgKzM5LDcgQEAgZW51bSBjbGFzcyBFeGFtcGxlRmxhZ3MgewogVEVTVChXVEZfT3B0
aW9uU2V0LCBFbXB0eVNldCkKIHsKICAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiBzZXQ7Cisg
ICAgRVhQRUNUX1RSVUUoc2V0LmlzRW1wdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250
YWlucyhFeGFtcGxlRmxhZ3M6OkEpKTsKICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKEV4
YW1wbGVGbGFnczo6QikpOwogICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMoRXhhbXBsZUZs
YWdzOjpDKSk7CkBAIC00Niw2ICs0OCw3IEBAIFRFU1QoV1RGX09wdGlvblNldCwgRW1wdHlTZXQp
CiBURVNUKFdURl9PcHRpb25TZXQsIENvbnRhaW5zT25lRmxhZykKIHsKICAgICBPcHRpb25TZXQ8
RXhhbXBsZUZsYWdzPiBzZXQgPSBFeGFtcGxlRmxhZ3M6OkE7CisgICAgRVhQRUNUX0ZBTFNFKHNl
dC5pc0VtcHR5KCkpOwogICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6
OkEpKTsKICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QikpOwog
ICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpDKSk7CkBAIC01NCw2
ICs1Nyw3IEBAIFRFU1QoV1RGX09wdGlvblNldCwgQ29udGFpbnNPbmVGbGFnKQogVEVTVChXVEZf
T3B0aW9uU2V0LCBDb250YWluc1R3b0ZsYWdzKQogewogICAgIE9wdGlvblNldDxFeGFtcGxlRmxh
Z3M+IHNldCB7IEV4YW1wbGVGbGFnczo6QSwgRXhhbXBsZUZsYWdzOjpCIH07CisgICAgRVhQRUNU
X0ZBTFNFKHNldC5pc0VtcHR5KCkpOwogICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhFeGFt
cGxlRmxhZ3M6OkEpKTsKICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdz
OjpCKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkMpKTsK
QEAgLTcxLDExICs3NSwxMyBAQCBURVNUKFdURl9PcHRpb25TZXQsIE9wZXJhdG9yQml0d2lzZU9y
KQogVEVTVChXVEZfT3B0aW9uU2V0LCBFbXB0eU9wdGlvblNldFRvUmF3VmFsdWVUb09wdGlvblNl
dCkKIHsKICAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiBzZXQ7CisgICAgRVhQRUNUX1RSVUUo
c2V0LmlzRW1wdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhFeGFtcGxlRmxh
Z3M6OkEpKTsKICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6Qikp
OwogICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpDKSk7CiAKICAg
ICBhdXRvIHNldDIgPSBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPjo6ZnJvbVJhdyhzZXQudG9SYXco
KSk7CisgICAgRVhQRUNUX1RSVUUoc2V0Mi5pc0VtcHR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShz
ZXQyLmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QSkpOwogICAgIEVYUEVDVF9GQUxTRShzZXQyLmNv
bnRhaW5zKEV4YW1wbGVGbGFnczo6QikpOwogICAgIEVYUEVDVF9GQUxTRShzZXQyLmNvbnRhaW5z
KEV4YW1wbGVGbGFnczo6QykpOwpAQCAtODQsMTEgKzkwLDEzIEBAIFRFU1QoV1RGX09wdGlvblNl
dCwgRW1wdHlPcHRpb25TZXRUb1Jhd1ZhbHVlVG9PcHRpb25TZXQpCiBURVNUKFdURl9PcHRpb25T
ZXQsIE9wdGlvblNldFRoYXRDb250YWluc09uZUZsYWdUb1Jhd1ZhbHVlVG9PcHRpb25TZXQpCiB7
CiAgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz4gc2V0ID0gRXhhbXBsZUZsYWdzOjpBOworICAg
IEVYUEVDVF9GQUxTRShzZXQuaXNFbXB0eSgpKTsKICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFp
bnMoRXhhbXBsZUZsYWdzOjpBKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhFeGFt
cGxlRmxhZ3M6OkIpKTsKICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFn
czo6QykpOwogCiAgICAgYXV0byBzZXQyID0gT3B0aW9uU2V0PEV4YW1wbGVGbGFncz46OmZyb21S
YXcoc2V0LnRvUmF3KCkpOworICAgIEVYUEVDVF9GQUxTRShzZXQyLmlzRW1wdHkoKSk7CiAgICAg
RVhQRUNUX1RSVUUoc2V0Mi5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkEpKTsKICAgICBFWFBFQ1Rf
RkFMU0Uoc2V0Mi5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkIpKTsKICAgICBFWFBFQ1RfRkFMU0Uo
c2V0Mi5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkMpKTsKQEAgLTk3LDE0ICsxMDUsNTYgQEAgVEVT
VChXVEZfT3B0aW9uU2V0LCBPcHRpb25TZXRUaGF0Q29udGFpbnNPbmVGbGFnVG9SYXdWYWx1ZVRv
T3B0aW9uU2V0KQogVEVTVChXVEZfT3B0aW9uU2V0LCBPcHRpb25TZXRUaGF0Q29udGFpbnNUd29G
bGFnc1RvUmF3VmFsdWVUb09wdGlvblNldCkKIHsKICAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdz
PiBzZXQgeyBFeGFtcGxlRmxhZ3M6OkEsIEV4YW1wbGVGbGFnczo6QyB9OworICAgIEVYUEVDVF9G
QUxTRShzZXQuaXNFbXB0eSgpKTsKICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFpbnMoRXhhbXBs
ZUZsYWdzOjpBKSk7CiAgICAgRVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6
QykpOwogICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpCKSk7CiAK
ICAgICBhdXRvIHNldDIgPSBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPjo6ZnJvbVJhdyhzZXQudG9S
YXcoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHNldDIuaXNFbXB0eSgpKTsKICAgICBFWFBFQ1RfVFJV
RShzZXQyLmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QSkpOwogICAgIEVYUEVDVF9UUlVFKHNldDIu
Y29udGFpbnMoRXhhbXBsZUZsYWdzOjpDKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldDIuY29udGFp
bnMoRXhhbXBsZUZsYWdzOjpCKSk7CiB9CiAKK1RFU1QoV1RGX09wdGlvblNldCwgVHdvSXRlcmF0
b3JzSW50b1NhbWVPcHRpb25TZXQpCit7CisgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz4gc2V0
IHsgRXhhbXBsZUZsYWdzOjpDLCBFeGFtcGxlRmxhZ3M6OkIgfTsKKyAgICBPcHRpb25TZXQ8RXhh
bXBsZUZsYWdzPjo6aXRlcmF0b3IgaXQxID0gc2V0LmJlZ2luKCk7CisgICAgT3B0aW9uU2V0PEV4
YW1wbGVGbGFncz46Oml0ZXJhdG9yIGl0MiA9IGl0MTsKKyAgICArK2l0MTsKKyAgICBFWFBFQ1Rf
U1RST05HX0VOVU1fRVEoRXhhbXBsZUZsYWdzOjpDLCAqaXQxKTsKKyAgICBFWFBFQ1RfU1RST05H
X0VOVU1fRVEoRXhhbXBsZUZsYWdzOjpCLCAqaXQyKTsKK30KKworVEVTVChXVEZfT3B0aW9uU2V0
LCBJdGVyYXRlT3Zlck9wdGlvblNldFRoYXRDb250YWluc1R3b0ZsYWdzKQoreworICAgIE9wdGlv
blNldDxFeGFtcGxlRmxhZ3M+IHNldCB7IEV4YW1wbGVGbGFnczo6QSwgRXhhbXBsZUZsYWdzOjpD
IH07CisgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz46Oml0ZXJhdG9yIGl0ID0gc2V0LmJlZ2lu
KCk7CisgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz46Oml0ZXJhdG9yIGVuZCA9IHNldC5lbmQo
KTsKKyAgICBFWFBFQ1RfVFJVRShpdCAhPSBlbmQpOworICAgIEVYUEVDVF9TVFJPTkdfRU5VTV9F
UShFeGFtcGxlRmxhZ3M6OkEsICppdCk7CisgICAgKytpdDsKKyAgICBFWFBFQ1RfU1RST05HX0VO
VU1fRVEoRXhhbXBsZUZsYWdzOjpDLCAqaXQpOworICAgICsraXQ7CisgICAgRVhQRUNUX1RSVUUo
aXQgPT0gZW5kKTsKK30KKworVEVTVChXVEZfT3B0aW9uU2V0LCBJdGVyYXRpb25PcmRlclRoZVNh
bWVSZWdhcmRsZXNzT2ZJbnNlcnRpb25PcmRlcikKK3sKKyAgICBPcHRpb25TZXQ8RXhhbXBsZUZs
YWdzPiBzZXQxID0gRXhhbXBsZUZsYWdzOjpDOworICAgIHNldDEgfD0gRXhhbXBsZUZsYWdzOjpB
OworCisgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz4gc2V0MiA9IEV4YW1wbGVGbGFnczo6QTsK
KyAgICBzZXQyIHw9IEV4YW1wbGVGbGFnczo6QzsKKworICAgIE9wdGlvblNldDxFeGFtcGxlRmxh
Z3M+OjppdGVyYXRvciBpdDEgPSBzZXQxLmJlZ2luKCk7CisgICAgT3B0aW9uU2V0PEV4YW1wbGVG
bGFncz46Oml0ZXJhdG9yIGl0MiA9IHNldDIuYmVnaW4oKTsKKworICAgIEVYUEVDVF9UUlVFKCpp
dDEgPT0gKml0Mik7CisgICAgKytpdDE7CisgICAgKytpdDI7CisgICAgRVhQRUNUX1RSVUUoKml0
MSA9PSAqaXQyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273266</attachid>
            <date>2016-03-07 21:12:01 -0800</date>
            <delta_ts>2016-03-08 08:44:33 -0800</delta_ts>
            <desc>Patch and Unit Tests</desc>
            <filename>bug-154941-20160307211147.patch</filename>
            <type>text/plain</type>
            <size>12971</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3NzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI1NmQxYmNkODMwMjA5ZTQzZjU0OGJk
NTQxMzAzYTYxYmNiYjIzOGQuLmNhMjEwNmM1ZmVmZDgxMzc2YmQ0NDdkNTk5NzdmMGUwMmE0YTJm
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTYtMDMtMDcgIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgaXRlcmF0aW5nIG92ZXIgYW4gT3B0aW9u
U2V0IGFuZCBjaGVja2luZyBpZiBpdCBpcyBlbXB0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0OTQxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
NDk2NDE4Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGl0ZXJhdGluZyBvdmVyIHRoZSBlbnVtZXJhdG9ycyBp
biBhbiBPcHRpb25TZXQgYXMgd2VsbCBhcworICAgICAgICBkZXRlcm1pbmluZyBpZiB0aGUgc2V0
IGlzIGVtcHR5LgorCisgICAgICAgIEl0ZXJhdGluZyBvdmVyIGFuIE9wdGlvblNldCBpcyBpbiBC
aWcgVGhldGEoTikgd2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluCisgICAgICAgIHRo
ZSBzZXQuIE1vcmUgcHJlY2lzZWx5LCBpdCBpcyBpbiBCaWcgVGhldGEobG9nIE0pIHdoZXJlIE0g
aXMgdGhlIGJpdG1hc2sgcmVwcmVzZW50ZWQKKyAgICAgICAgYnkgdGhlIGJpdHdpc2UgT1ItaW5n
IG9mIGFsbCBlbnVtZXJhdG9ycyBpbiB0aGUgc2V0LgorCisgICAgICAgICogd3RmL09wdGlvblNl
dC5oOiBBZGRlZCBjb21tZW50IHRvIGRlc2NyaWJlIHRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3Mg
YW5kIGl0cyBpbnZhcmlhbnQgLQorICAgICAgICB0aGUgZW51bWVyYXRvcnMgbXVzdCBiZSBwb3Np
dGl2ZSBwb3dlcnMgb2YgdHdvLgorICAgICAgICAoV1RGOjpPcHRpb25TZXQ6OmZyb21SYXcpOiBJ
bnN0YW50aWF0ZSB1c2luZyBzcGVjaWFsaXplZCBwcml2YXRlIGNvbnN0cnVjdG9yIHRvIGFsbG93
CisgICAgICAgIGluc3RhbnRpYXRpb24gd2l0aCBhIHJhdyB2YWx1ZSBvZiAwLgorICAgICAgICAo
V1RGOjpPcHRpb25TZXQ6Ok9wdGlvblNldCk6IFNwZWNpYWxpemVkIGNvbnN0cnVjdG9yIHRoYXQg
YXNzZXJ0cyB0aGF0IHRoZSBzcGVjaWZpZWQgdmFsdWUKKyAgICAgICAgaXMgYSBwb3NpdGl2ZSBw
b3dlciBvZiB0d28uIFRoaXMgdmFyaWFudCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYXNzZXJ0aW9u
cyBhcmUgZW5hYmxlZCAoaS5lLiAhQVNTRVJUX0RJU0FCTEVEKS4KKyAgICAgICAgKFdURjo6T3B0
aW9uU2V0Ojppc0VtcHR5KTogUmV0dXJucyB3aGV0aGVyIHRoZSBzZXQgaXMgZW1wdHkuCisgICAg
ICAgIChXVEY6Ok9wdGlvblNldDo6YmVnaW4pOiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBl
bnVtZXJhdG9yIHdpdGggdGhlIHNtYWxsZXN0IHZhbHVlIGluIHRoZSBzZXQuCisgICAgICAgIChX
VEY6Ok9wdGlvblNldDo6ZW5kKTogUmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IHJlcHJlc2VudHMg
dGhlIGVuZCBzZW50aW5lbCBvZiB0aGUgc2V0LgorICAgICAgICAoV1RGOjpPcHRpb25TZXRJdGVy
YXRvcjo6T3B0aW9uU2V0SXRlcmF0b3IpOiBJbXBsZW1lbnRzIGEgZm9yd2FyZCBpdGVyYXRvciBm
b3IgdGhlIHNldC4KKyAgICAgICAgKFdURjo6T3B0aW9uU2V0SXRlcmF0b3I6Om9wZXJhdG9yPSk6
IEFkZGVkLgorICAgICAgICAoV1RGOjpPcHRpb25TZXRJdGVyYXRvcjo6b3BlcmF0b3IqKTogUmV0
dXJucyB0aGUgZW51bWVyYXRvciBwb2ludGVkIHRvIGJ5IHRoZSBpdGVyYXRvci4KKyAgICAgICAg
KFdURjo6T3B0aW9uU2V0SXRlcmF0b3I6Om9wZXJhdG9yKyspOiBBZHZhbmNlIHRvIHRoZSBuZXh0
IHNtYWxsZXN0IGVudW1lcmF0b3IgaW4gdGhlIHNldC4KKyAgICAgICAgKFdURjo6T3B0aW9uU2V0
SXRlcmF0b3I6Om9wZXJhdG9yPT0pOiBSZXR1cm5zIHdoZXRoZXIgdGhlIGl0ZXJhdG9yIGlzIGVx
dWFsIHRvIHRoZSBzcGVjaWZpZWQgaXRlcmF0b3IuCisgICAgICAgIChXVEY6Ok9wdGlvblNldEl0
ZXJhdG9yOjpvcGVyYXRvciE9KTogUmV0dXJucyB3aGV0aGVyIHRoZSBpdGVyYXRvciBpcyBub3Qg
ZXF1YWwgdG8gdGhlIHNwZWNpZmllZCBpdGVyYXRvci4KKwogMjAxNi0wMy0wNCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSB2Y3hw
cm9qIGJ1aWxkIHN5c3RlbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvT3B0aW9uU2V0Lmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25TZXQuaAppbmRleCA3YzZhNGIzOGQ5ZjE1MDExZTAzMGMx
Y2NkMjM0MWU2ZTJiYTY5ZTVmLi5lMjk3NmVjMDZhNmFmMGQwZTk1ZjQxMTIxOTJjOWQzOWJmODQz
OWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25TZXQuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9PcHRpb25TZXQuaApAQCAtMjcsMzcgKzI3LDYyIEBACiAjZGVmaW5lIE9wdGlvblNl
dF9oCiAKICNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorI2luY2x1ZGUgPGl0ZXJhdG9yPgog
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFN0b3JhZ2VUeXBlPiBjbGFzcyBPcHRpb25TZXRJdGVyYXRvcjsK
KworLy8gT3B0aW9uU2V0IGlzIGEgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgc2V0IG9mIGVudW1l
cmF0b3JzIGluIGEgc3BhY2UtZWZmaWNpZW50IG1hbm5lci4gVGhlIGVudW1lcmF0b3JzCisvLyBt
dXN0IGJlIHBvd2VycyBvZiB0d28gZ3JlYXRlciB0aGFuIDAuIFRoaXMgY2xhc3MgaXMgdXNlZnVs
IGFzIGEgcmVwbGFjZW1lbnQgZm9yIHBhc3NpbmcgYSBiaXRtYXNrIG9mCisvLyBlbnVtZXJhdG9y
cyBhcm91bmQuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBPcHRpb25TZXQgewogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZSwgIlQgaXMgbm90IGFuIGVudW0gdHlw
ZSIpOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPHR5cGVuYW1lIHN0
ZDo6dW5kZXJseWluZ190eXBlPFQ+Ojp0eXBlPjo6dHlwZSBTdG9yYWdlVHlwZTsKIAogcHVibGlj
OgorICAgIHR5cGVkZWYgT3B0aW9uU2V0SXRlcmF0b3I8VCwgU3RvcmFnZVR5cGU+IGl0ZXJhdG9y
OworCiAgICAgc3RhdGljIE9wdGlvblNldCBmcm9tUmF3KFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHN0b3JhZ2VUeXBlKTsKKyAg
ICAgICAgcmV0dXJuIE9wdGlvblNldChzdGF0aWNfY2FzdDxUPihzdG9yYWdlVHlwZSksIE9wdGlv
blNldDo6RnJvbVJhd1ZhbHVlKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgT3B0aW9uU2V0KCkg
PSBkZWZhdWx0OwogCisjaWYgQVNTRVJUX0RJU0FCTEVECiAgICAgY29uc3RleHByIE9wdGlvblNl
dChUIHQpCiAgICAgICAgIDogbV9zdG9yYWdlKHN0YXRpY19jYXN0PFN0b3JhZ2VUeXBlPih0KSkK
ICAgICB7CiAgICAgfQorI2Vsc2UKKyAgICBPcHRpb25TZXQoVCB0KQorICAgICAgICA6IG1fc3Rv
cmFnZShzdGF0aWNfY2FzdDxTdG9yYWdlVHlwZT4odCkpCisgICAgeworICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGhhc09uZUJpdFNldChzdGF0aWNfY2FzdDxTdG9yYWdlVHlwZT4odCkpLCAi
RW51bWVyYXRvciBpcyBub3QgYSBwb3NpdGl2ZSBwb3dlciBvZiB0d28uIik7CisgICAgfQorI2Vu
ZGlmCiAKICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGNvbnN0ZXhwciBvbmNlIHdlIGFkb3B0IEMr
KzE0IGFzIEMrKzExIGRvZXMgbm90IHN1cHBvcnQgZm9yLWxvb3BzCiAgICAgLy8gaW4gYSBjb25z
dGV4cHIgZnVuY3Rpb24uCiAgICAgT3B0aW9uU2V0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiBp
bml0aWFsaXplckxpc3QpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8mIG9wdGlvbiA6IGluaXRp
YWxpemVyTGlzdCkKKyAgICAgICAgZm9yIChhdXRvJiBvcHRpb24gOiBpbml0aWFsaXplckxpc3Qp
IHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaGFzT25lQml0U2V0KHN0YXRpY19j
YXN0PFN0b3JhZ2VUeXBlPihvcHRpb24pKSwgIkVudW1lcmF0b3IgaXMgbm90IGEgcG9zaXRpdmUg
cG93ZXIgb2YgdHdvLiIpOwogICAgICAgICAgICAgbV9zdG9yYWdlIHw9IHN0YXRpY19jYXN0PFN0
b3JhZ2VUeXBlPihvcHRpb24pOworICAgICAgICB9CiAgICAgfQogCiAgICAgY29uc3RleHByIFN0
b3JhZ2VUeXBlIHRvUmF3KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9CiAKKyAgICBjb25z
dGV4cHIgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fc3RvcmFnZTsgfQorCisgICAg
Y29uc3RleHByIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Cisg
ICAgY29uc3RleHByIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgIGNv
bnN0ZXhwciBib29sIGNvbnRhaW5zKE9wdGlvblNldCBvcHRpb25TZXQpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9zdG9yYWdlICYgb3B0aW9uU2V0Lm1fc3RvcmFnZTsKQEAgLTcxLDkg
Kzk2LDQ0IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgZW51bSBJbml0aWFsaXph
dGlvblRhZyB7IEZyb21SYXdWYWx1ZSB9OworICAgIGNvbnN0ZXhwciBPcHRpb25TZXQoVCB0LCBJ
bml0aWFsaXphdGlvblRhZykKKyAgICAgICAgOiBtX3N0b3JhZ2Uoc3RhdGljX2Nhc3Q8U3RvcmFn
ZVR5cGU+KHQpKQorICAgIHsKKyAgICB9CiAgICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlIHsgMCB9
OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU3RvcmFnZVR5cGU+IGNsYXNz
IE9wdGlvblNldEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBPcHRpb25TZXRJdGVyYXRvcihjb25z
dCBTdG9yYWdlVHlwZSB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7IH0KKyAgICBPcHRpb25TZXRJ
dGVyYXRvcihjb25zdCBPcHRpb25TZXRJdGVyYXRvciYgb3RoZXIpIDogbV92YWx1ZShvdGhlci5t
X3ZhbHVlKSB7IH0KKworICAgIE9wdGlvblNldEl0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgT3B0
aW9uU2V0SXRlcmF0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV92YWx1ZSA9IG90aGVyLm1f
dmFsdWU7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICAvLyBJc29sYXRlIHRo
ZSByaWdodG1vc3Qgc2V0IGJpdC4KKyAgICBUIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KG1fdmFsdWUgJiAtbV92YWx1ZSk7IH0KKworICAgIC8vIEl0ZXJhdGVzIGZy
b20gc21hbGxlc3QgdG8gbGFyZ2VzdCBlbnVtIHZhbHVlIGJ5IHR1cm5pbmcgb2ZmIHRoZSByaWdo
dG1vc3Qgc2V0IGJpdC4KKyAgICBPcHRpb25TZXRJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAg
eworICAgICAgICBtX3ZhbHVlICY9IG1fdmFsdWUgLSAxOworICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorCisgICAgT3B0aW9uU2V0SXRlcmF0b3ImIG9wZXJhdG9yKysoaW50KSA9IGRlbGV0
ZTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcHRpb25TZXRJdGVyYXRvciYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsgfQorICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBPcHRpb25TZXRJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWUgIT0gb3RoZXIubV92YWx1ZTsgfQorCitwcml2YXRlOgorICAgIFN0b3JhZ2VUeXBlIG1f
dmFsdWU7Cit9OworCiB9CiAKIHVzaW5nIFdURjo6T3B0aW9uU2V0OwpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDcwODRiMjY3ODljY2Y1YjQzMGI2
OGEwNDA2ODBhOGVhNGVkYjZlNDMuLmI5NDVmZjIzYTk1MWQ0N2VhYWExZGVlNGYzZjA4ZGZjNmI0
ODg3YjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOSBAQAorMjAxNi0wMy0wNyAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBs
ZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBpdGVyYXRpbmcgb3ZlciBhbiBPcHRpb25TZXQgYW5k
IGNoZWNraW5nIGlmIGl0IGlzIGVtcHR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTQ5NDEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0OTY0MTg3
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0
ZXN0cyB0byBlbnN1cmUgdGhhdCB3ZSBkbyBub3QgcmVncmVzc2lvbiBib3RoIGl0ZXJhdGlvbiBv
ZiBhbiBPcHRpb25TZXQgYW5kCisgICAgICAgIGRldGVybWluaW5nIHdoZXRoZXIgYW4gT3B0aW9u
U2V0IGlzIGVtcHR5LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0Lmg6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpVdGlsOjphc3NlcnRTdHJvbmdFbnVtKTogSGVscGVyIGZ1bmN0aW9u
IHRvIGFzc2VydCB0d28gc3Ryb25nIGVudW0gdHlwZSBmb3IgZXF1YWxpdHkuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOgorCiAyMDE2LTAzLTA3ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4K
IAogICAgICAgICBVcGRhdGUgcGVyZiBib3QgY29uZmlndXJhdGlvbiBmb3IgQW5pbW9tZXRlcgpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0LmggYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3QuaAppbmRleCBjYTQzOTI0YTJmMTdmNGU1ZDcxMjNjNmRkOTBmZDY2YTVhM2RhYmIx
Li5jZjQ0MDQ1ZmIwZDBhM2VhODhiMzEwYmRhM2QwMGNiMGRjMTY5ZTc2IDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3QuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Qu
aApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBUZXN0X2gKICNkZWZpbmUgVGVzdF9oCiAKKyNpbmNs
dWRlIDx0eXBlX3RyYWl0cz4KKwogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiAjZGVmaW5l
IEVYUEVDVF9OT1RfTlVMTChleHByZXNzaW9uKSBcCkBAIC00MCw2ICs0MiwxOCBAQCBuYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CiAjZGVmaW5lIEFTU0VSVF9OVUxMKGV4cHJlc3Npb24pIFwKICAg
ICBBU1NFUlRfVFJVRSghKGV4cHJlc3Npb24pKQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Rh
dGljIGlubGluZSA6OnRlc3Rpbmc6OkFzc2VydGlvblJlc3VsdCBhc3NlcnRTdHJvbmdFbnVtKGNv
bnN0IGNoYXIqIGV4cGVjdGVkX2V4cHJlc3Npb24sIGNvbnN0IGNoYXIqIGFjdHVhbF9leHByZXNz
aW9uLCBUIGV4cGVjdGVkLCBUIGFjdHVhbCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
ZW51bTxUPjo6dmFsdWUsICJUIGlzIG5vdCBhbiBlbnVtIHR5cGUiKTsKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPFQ+Ojp0eXBlIFVuZGVybHlpbmdTdG9yYWdlVHlw
ZTsKKyAgICByZXR1cm4gOjp0ZXN0aW5nOjppbnRlcm5hbDo6Q21wSGVscGVyRVEoZXhwZWN0ZWRf
ZXhwcmVzc2lvbiwgYWN0dWFsX2V4cHJlc3Npb24sIHN0YXRpY19jYXN0PFVuZGVybHlpbmdTdG9y
YWdlVHlwZT4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxVbmRlcmx5aW5nU3RvcmFnZVR5cGU+KGFj
dHVhbCkpOworfQorCisjZGVmaW5lIEVYUEVDVF9TVFJPTkdfRU5VTV9FUShleHBlY3RlZCwgYWN0
dWFsKSBcCisgICAgRVhQRUNUX1BSRURfRk9STUFUMihUZXN0V2ViS2l0QVBJOjphc3NlcnRTdHJv
bmdFbnVtLCBleHBlY3RlZCwgYWN0dWFsKQorCisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkKIAogI2VuZGlmIC8vIFRlc3RfaApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvT3B0aW9uU2V0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL09w
dGlvblNldC5jcHAKaW5kZXggMjA5NjE5Yzg1NDgyYjcyZjZhYmE1NjZjYjg1ZmNhMDMxYWIzOWRm
MS4uZThhYjMyOTkxZjE0ZjkzZjE0ZGM4ODYyMmUzMzdmYmQ1ZTNkZjQwZCAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0aW9uU2V0LmNwcAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9PcHRpb25TZXQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAK
ICNpbmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1ZGUgIlRlc3QuaCIKICNpbmNsdWRlIDx3dGYv
T3B0aW9uU2V0Lmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKQEAgLTM4LDYgKzM5LDcg
QEAgZW51bSBjbGFzcyBFeGFtcGxlRmxhZ3MgewogVEVTVChXVEZfT3B0aW9uU2V0LCBFbXB0eVNl
dCkKIHsKICAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiBzZXQ7CisgICAgRVhQRUNUX1RSVUUo
c2V0LmlzRW1wdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhFeGFtcGxlRmxh
Z3M6OkEpKTsKICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6Qikp
OwogICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpDKSk7CkBAIC00
Niw2ICs0OCw3IEBAIFRFU1QoV1RGX09wdGlvblNldCwgRW1wdHlTZXQpCiBURVNUKFdURl9PcHRp
b25TZXQsIENvbnRhaW5zT25lRmxhZykKIHsKICAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiBz
ZXQgPSBFeGFtcGxlRmxhZ3M6OkE7CisgICAgRVhQRUNUX0ZBTFNFKHNldC5pc0VtcHR5KCkpOwog
ICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkEpKTsKICAgICBFWFBF
Q1RfRkFMU0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QikpOwogICAgIEVYUEVDVF9GQUxT
RShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpDKSk7CkBAIC01NCw2ICs1Nyw3IEBAIFRFU1Qo
V1RGX09wdGlvblNldCwgQ29udGFpbnNPbmVGbGFnKQogVEVTVChXVEZfT3B0aW9uU2V0LCBDb250
YWluc1R3b0ZsYWdzKQogewogICAgIE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+IHNldCB7IEV4YW1w
bGVGbGFnczo6QSwgRXhhbXBsZUZsYWdzOjpCIH07CisgICAgRVhQRUNUX0ZBTFNFKHNldC5pc0Vt
cHR5KCkpOwogICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkEpKTsK
ICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpCKSk7CiAgICAgRVhQ
RUNUX0ZBTFNFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkMpKTsKQEAgLTcxLDExICs3NSwx
MyBAQCBURVNUKFdURl9PcHRpb25TZXQsIE9wZXJhdG9yQml0d2lzZU9yKQogVEVTVChXVEZfT3B0
aW9uU2V0LCBFbXB0eU9wdGlvblNldFRvUmF3VmFsdWVUb09wdGlvblNldCkKIHsKICAgICBPcHRp
b25TZXQ8RXhhbXBsZUZsYWdzPiBzZXQ7CisgICAgRVhQRUNUX1RSVUUoc2V0LmlzRW1wdHkoKSk7
CiAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkEpKTsKICAgICBF
WFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QikpOwogICAgIEVYUEVDVF9G
QUxTRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpDKSk7CiAKICAgICBhdXRvIHNldDIgPSBP
cHRpb25TZXQ8RXhhbXBsZUZsYWdzPjo6ZnJvbVJhdyhzZXQudG9SYXcoKSk7CisgICAgRVhQRUNU
X1RSVUUoc2V0Mi5pc0VtcHR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShzZXQyLmNvbnRhaW5zKEV4
YW1wbGVGbGFnczo6QSkpOwogICAgIEVYUEVDVF9GQUxTRShzZXQyLmNvbnRhaW5zKEV4YW1wbGVG
bGFnczo6QikpOwogICAgIEVYUEVDVF9GQUxTRShzZXQyLmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6
QykpOwpAQCAtODQsMTEgKzkwLDEzIEBAIFRFU1QoV1RGX09wdGlvblNldCwgRW1wdHlPcHRpb25T
ZXRUb1Jhd1ZhbHVlVG9PcHRpb25TZXQpCiBURVNUKFdURl9PcHRpb25TZXQsIE9wdGlvblNldFRo
YXRDb250YWluc09uZUZsYWdUb1Jhd1ZhbHVlVG9PcHRpb25TZXQpCiB7CiAgICAgT3B0aW9uU2V0
PEV4YW1wbGVGbGFncz4gc2V0ID0gRXhhbXBsZUZsYWdzOjpBOworICAgIEVYUEVDVF9GQUxTRShz
ZXQuaXNFbXB0eSgpKTsKICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdz
OjpBKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkIpKTsK
ICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QykpOwogCiAgICAg
YXV0byBzZXQyID0gT3B0aW9uU2V0PEV4YW1wbGVGbGFncz46OmZyb21SYXcoc2V0LnRvUmF3KCkp
OworICAgIEVYUEVDVF9GQUxTRShzZXQyLmlzRW1wdHkoKSk7CiAgICAgRVhQRUNUX1RSVUUoc2V0
Mi5jb250YWlucyhFeGFtcGxlRmxhZ3M6OkEpKTsKICAgICBFWFBFQ1RfRkFMU0Uoc2V0Mi5jb250
YWlucyhFeGFtcGxlRmxhZ3M6OkIpKTsKICAgICBFWFBFQ1RfRkFMU0Uoc2V0Mi5jb250YWlucyhF
eGFtcGxlRmxhZ3M6OkMpKTsKQEAgLTk3LDE0ICsxMDUsNTYgQEAgVEVTVChXVEZfT3B0aW9uU2V0
LCBPcHRpb25TZXRUaGF0Q29udGFpbnNPbmVGbGFnVG9SYXdWYWx1ZVRvT3B0aW9uU2V0KQogVEVT
VChXVEZfT3B0aW9uU2V0LCBPcHRpb25TZXRUaGF0Q29udGFpbnNUd29GbGFnc1RvUmF3VmFsdWVU
b09wdGlvblNldCkKIHsKICAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiBzZXQgeyBFeGFtcGxl
RmxhZ3M6OkEsIEV4YW1wbGVGbGFnczo6QyB9OworICAgIEVYUEVDVF9GQUxTRShzZXQuaXNFbXB0
eSgpKTsKICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpBKSk7CiAg
ICAgRVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5zKEV4YW1wbGVGbGFnczo6QykpOwogICAgIEVYUEVD
VF9GQUxTRShzZXQuY29udGFpbnMoRXhhbXBsZUZsYWdzOjpCKSk7CiAKICAgICBhdXRvIHNldDIg
PSBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPjo6ZnJvbVJhdyhzZXQudG9SYXcoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHNldDIuaXNFbXB0eSgpKTsKICAgICBFWFBFQ1RfVFJVRShzZXQyLmNvbnRhaW5z
KEV4YW1wbGVGbGFnczo6QSkpOwogICAgIEVYUEVDVF9UUlVFKHNldDIuY29udGFpbnMoRXhhbXBs
ZUZsYWdzOjpDKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHNldDIuY29udGFpbnMoRXhhbXBsZUZsYWdz
OjpCKSk7CiB9CiAKK1RFU1QoV1RGX09wdGlvblNldCwgVHdvSXRlcmF0b3JzSW50b1NhbWVPcHRp
b25TZXQpCit7CisgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz4gc2V0IHsgRXhhbXBsZUZsYWdz
OjpDLCBFeGFtcGxlRmxhZ3M6OkIgfTsKKyAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPjo6aXRl
cmF0b3IgaXQxID0gc2V0LmJlZ2luKCk7CisgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz46Oml0
ZXJhdG9yIGl0MiA9IGl0MTsKKyAgICArK2l0MTsKKyAgICBFWFBFQ1RfU1RST05HX0VOVU1fRVEo
RXhhbXBsZUZsYWdzOjpDLCAqaXQxKTsKKyAgICBFWFBFQ1RfU1RST05HX0VOVU1fRVEoRXhhbXBs
ZUZsYWdzOjpCLCAqaXQyKTsKK30KKworVEVTVChXVEZfT3B0aW9uU2V0LCBJdGVyYXRlT3Zlck9w
dGlvblNldFRoYXRDb250YWluc1R3b0ZsYWdzKQoreworICAgIE9wdGlvblNldDxFeGFtcGxlRmxh
Z3M+IHNldCB7IEV4YW1wbGVGbGFnczo6QSwgRXhhbXBsZUZsYWdzOjpDIH07CisgICAgT3B0aW9u
U2V0PEV4YW1wbGVGbGFncz46Oml0ZXJhdG9yIGl0ID0gc2V0LmJlZ2luKCk7CisgICAgT3B0aW9u
U2V0PEV4YW1wbGVGbGFncz46Oml0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKKyAgICBFWFBFQ1Rf
VFJVRShpdCAhPSBlbmQpOworICAgIEVYUEVDVF9TVFJPTkdfRU5VTV9FUShFeGFtcGxlRmxhZ3M6
OkEsICppdCk7CisgICAgKytpdDsKKyAgICBFWFBFQ1RfU1RST05HX0VOVU1fRVEoRXhhbXBsZUZs
YWdzOjpDLCAqaXQpOworICAgICsraXQ7CisgICAgRVhQRUNUX1RSVUUoaXQgPT0gZW5kKTsKK30K
KworVEVTVChXVEZfT3B0aW9uU2V0LCBJdGVyYXRpb25PcmRlclRoZVNhbWVSZWdhcmRsZXNzT2ZJ
bnNlcnRpb25PcmRlcikKK3sKKyAgICBPcHRpb25TZXQ8RXhhbXBsZUZsYWdzPiBzZXQxID0gRXhh
bXBsZUZsYWdzOjpDOworICAgIHNldDEgfD0gRXhhbXBsZUZsYWdzOjpBOworCisgICAgT3B0aW9u
U2V0PEV4YW1wbGVGbGFncz4gc2V0MiA9IEV4YW1wbGVGbGFnczo6QTsKKyAgICBzZXQyIHw9IEV4
YW1wbGVGbGFnczo6QzsKKworICAgIE9wdGlvblNldDxFeGFtcGxlRmxhZ3M+OjppdGVyYXRvciBp
dDEgPSBzZXQxLmJlZ2luKCk7CisgICAgT3B0aW9uU2V0PEV4YW1wbGVGbGFncz46Oml0ZXJhdG9y
IGl0MiA9IHNldDIuYmVnaW4oKTsKKworICAgIEVYUEVDVF9UUlVFKCppdDEgPT0gKml0Mik7Cisg
ICAgKytpdDE7CisgICAgKytpdDI7CisgICAgRVhQRUNUX1RSVUUoKml0MSA9PSAqaXQyKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>
<flag name="review"
          id="297857"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>