<?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>101257</bug_id>
          
          <creation_ts>2012-11-05 14:03:31 -0800</creation_ts>
          <short_desc>Add replaceWithLiteral() method to WTF::String</short_desc>
          <delta_ts>2012-11-07 01:43:40 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>90667</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>danw</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>mifenton</cc>
    
    <cc>mrobinson</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>758867</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-05 14:03:31 -0800</bug_when>
    <thetext>It would be good to add a replaceLiteral() method to WTFString that takes the replacement string as a literal.
This would avoid uselessly constructing a string from the literal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758875</commentid>
    <comment_count>1</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-05 14:05:46 -0800</bug_when>
    <thetext>&quot;replaceWithLiteral()&quot; maybe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758884</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-05 14:10:25 -0800</bug_when>
    <thetext>Right, this is indeed better, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758896</commentid>
    <comment_count>3</comment_count>
      <attachid>172406</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-05 14:19:44 -0800</bug_when>
    <thetext>Created attachment 172406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758899</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-05 14:22:21 -0800</bug_when>
    <thetext>Attachment 172406 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/te...&quot; exit_code: 1
Source/WTF/wtf/text/WTFString.h:311:  More than one command on the same line in if  [whitespace/parens] [4]
Total errors found: 1 in 4 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>758908</commentid>
    <comment_count>5</comment_count>
      <attachid>172406</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-05 14:33:30 -0800</bug_when>
    <thetext>Comment on attachment 172406
Patch

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

Would it be possible to generalize StringImpl::replace(UChar pattern, StringImpl* replacement) so it becomes a special case of this?

&gt; Source/WTF/wtf/text/StringImpl.cpp:1489
&gt; +    if (!replacement)
&gt; +        return this;

This should be !repStrLength.
We kind of have the policy of not reading the char pointer if the length is null. This sometime avoids accidentally using a bad pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758936</commentid>
    <comment_count>6</comment_count>
      <attachid>172413</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-05 15:02:52 -0800</bug_when>
    <thetext>Created attachment 172413
Patch

Take Benjamin&apos;s feedback into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758949</commentid>
    <comment_count>7</comment_count>
      <attachid>172416</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-05 15:17:11 -0800</bug_when>
    <thetext>Created attachment 172416
Patch

Rebase on master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758954</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-05 15:21:07 -0800</bug_when>
    <thetext>Attachment 172416 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/te...&quot; exit_code: 1
Source/WTF/wtf/text/WTFString.h:311:  More than one command on the same line in if  [whitespace/parens] [4]
Total errors found: 1 in 4 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>758978</commentid>
    <comment_count>9</comment_count>
      <attachid>172416</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-11-05 15:58:36 -0800</bug_when>
    <thetext>Comment on attachment 172416
Patch

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

&gt;&gt; Source/WTF/wtf/text/WTFString.h:311
&gt;&gt; +    ALWAYS_INLINE String&amp; replaceWithLiteral(UChar a, const char (&amp;characters)[charactersCount]) { if (m_impl) m_impl = m_impl-&gt;replace(a, characters, charactersCount - 1); return *this; }
&gt; 
&gt; More than one command on the same line in if  [whitespace/parens] [4]

Can we just call this &quot;replace&quot;, like the others? The type should be sufficient to distinguish the usage, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758985</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-05 16:09:44 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 172416 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172416&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/text/WTFString.h:311
&gt; &gt;&gt; +    ALWAYS_INLINE String&amp; replaceWithLiteral(UChar a, const char (&amp;characters)[charactersCount]) { if (m_impl) m_impl = m_impl-&gt;replace(a, characters, charactersCount - 1); return *this; }
&gt; &gt; 
&gt; &gt; More than one command on the same line in if  [whitespace/parens] [4]
&gt; 
&gt; Can we just call this &quot;replace&quot;, like the others? The type should be sufficient to distinguish the usage, no?

Yes, I believe we can call it replace(). I just thought replaceWithLiteral() would be preferable based on StringBuilder::appendLiteral() name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758986</commentid>
    <comment_count>11</comment_count>
      <attachid>172427</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-05 16:11:05 -0800</bug_when>
    <thetext>Created attachment 172427
Patch

Take Geoffrey Garen&apos;s feedback into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758994</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-05 16:14:43 -0800</bug_when>
    <thetext>Attachment 172427 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/te...&quot; exit_code: 1
Source/WTF/wtf/text/WTFString.h:311:  More than one command on the same line in if  [whitespace/parens] [4]
Total errors found: 1 in 4 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>759015</commentid>
    <comment_count>13</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-11-05 16:30:03 -0800</bug_when>
    <thetext>There may be ambiguity -- at least in some compilers -- between const char pointer and const char array. In this test program:

void test(const char*)
{
	printf(&quot;1\n&quot;);
}

void test(char*)
{
	printf(&quot;2\n&quot;);
}

template&lt;unsigned N&gt;
void test(const char (&amp;)[N])
{
	printf(&quot;3\n&quot;);
}

int main(int argc, char** argv)
{
	test(&quot;hello world&quot;);
}

clang printed:

scratch&gt; clang++ -o scratch scratch.cc &amp;&amp; ./scratch
1

So it called the const char* function instead of the const char (&amp;)[N] function. :(

Maybe that&apos;s why Ben used a special name in StringBuilder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759036</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-05 16:49:57 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; There may be ambiguity -- at least in some compilers -- between const char pointer and const char array. In this test program:
&gt; 
&gt; void test(const char*)
&gt; {
&gt;     printf(&quot;1\n&quot;);
&gt; }
&gt; 
&gt; void test(char*)
&gt; {
&gt;     printf(&quot;2\n&quot;);
&gt; }
&gt; 
&gt; template&lt;unsigned N&gt;
&gt; void test(const char (&amp;)[N])
&gt; {
&gt;     printf(&quot;3\n&quot;);
&gt; }
&gt; 
&gt; int main(int argc, char** argv)
&gt; {
&gt;     test(&quot;hello world&quot;);
&gt; }
&gt; 
&gt; clang printed:
&gt; 
&gt; scratch&gt; clang++ -o scratch scratch.cc &amp;&amp; ./scratch
&gt; 1
&gt; 
&gt; So it called the const char* function instead of the const char (&amp;)[N] function. :(
&gt; 
&gt; Maybe that&apos;s why Ben used a special name in StringBuilder.

Interesting. I get the same behavior with gcc actually.

Note however, that there is less ambiguity for String::replace() because there is currently no String::replace(UChar a, const char* b) method.

There is however a StringBuilder::append(const char* characters) so this may explain the StringBuilder::appendLiteral() indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759093</commentid>
    <comment_count>15</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-05 17:50:23 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; So it called the const char* function instead of the const char (&amp;)[N] function. :(
&gt; 
&gt; Maybe that&apos;s why Ben used a special name in StringBuilder.

Yep, there is ambiguity, which is why I created &quot;Literal&quot; functions in addition to the regular ones.

In this case, I think I would prefer replaceWithLiteral() than replace() to avoid breaking this code by accident. No hard feeling either way :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759238</commentid>
    <comment_count>16</comment_count>
      <attachid>172427</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-05 21:55:35 -0800</bug_when>
    <thetext>Comment on attachment 172427
Patch

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

r- for the early return on (!repStrLength). Totally my fault, sorry about that.

Otherwise I think the patch is a great addition. A quick grep tells me it could already be used in a few places in WebKit.
Feel free to change that in the same patch.

&gt; Source/WTF/wtf/text/StringImpl.cpp:1473
&gt; +    if (!repStrLength)
&gt; +        return this;

Thinking about this a bit more, I was wrong before.

If repStrLength is 0, the function should just remove any occurrence of pattern in the source.
Now what I do not understand is why the function returns early if StringImpl is null in the other implementation (although that is unrelated to your patch).

I&apos;d say this is a call for some tests. Please add those cases in the API tests.

&gt; Source/WTF/wtf/text/StringImpl.h:714
&gt; +    WTF_EXPORT_STRING_API PassRefPtr&lt;StringImpl&gt; replace(UChar, const UChar*, unsigned replacementLength);

I am not sure we need this, especially if it is exported.

Do you know of cases where it would be useful to pass a UChar*?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759283</commentid>
    <comment_count>17</comment_count>
      <attachid>172427</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-05 22:57:35 -0800</bug_when>
    <thetext>Comment on attachment 172427
Patch

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

&gt;&gt; Source/WTF/wtf/text/StringImpl.cpp:1473
&gt;&gt; +        return this;
&gt; 
&gt; Thinking about this a bit more, I was wrong before.
&gt; 
&gt; If repStrLength is 0, the function should just remove any occurrence of pattern in the source.
&gt; Now what I do not understand is why the function returns early if StringImpl is null in the other implementation (although that is unrelated to your patch).
&gt; 
&gt; I&apos;d say this is a call for some tests. Please add those cases in the API tests.

Ok, I will replace repStrLength by replacement in the check and see about adding API tests to Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp.

&gt;&gt; Source/WTF/wtf/text/StringImpl.h:714
&gt;&gt; +    WTF_EXPORT_STRING_API PassRefPtr&lt;StringImpl&gt; replace(UChar, const UChar*, unsigned replacementLength);
&gt; 
&gt; I am not sure we need this, especially if it is exported.
&gt; 
&gt; Do you know of cases where it would be useful to pass a UChar*?

I merely added it for the PassRefPtr&lt;StringImpl&gt; replace(UChar, StringImpl*) refactoring. I would simply not export it if that&apos;s OK with you.

&gt;&gt; Source/WTF/wtf/text/WTFString.h:311
&gt;&gt; +    ALWAYS_INLINE String&amp; replace(UChar a, const char (&amp;characters)[charactersCount]) { if (m_impl) m_impl = m_impl-&gt;replace(a, characters, charactersCount - 1); return *this; }
&gt; 
&gt; More than one command on the same line in if  [whitespace/parens] [4]

The good thing about calling this function replace() is that there is quite a bit of code calling String::replace(UChar, &quot;xxx&quot;) already and they would benefit directly from the new function. However, I don&apos;t agree that calling it replace() is not very robust because it will break if someone add a replace(UChar a, const char*) function in the future. I think I would therefore call it replaceWithLiteral() as Benjamin suggested. We can always update the rest of the code afterwards to call this new function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759497</commentid>
    <comment_count>18</comment_count>
      <attachid>172546</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-06 03:48:13 -0800</bug_when>
    <thetext>Created attachment 172546
Patch

Take Benjamin&apos;s feedback into consideration:
- Rename String::replace() with String::replaceWithString() to be safe
- No longer export &quot;replace(UChar, const UChar*, unsigned replacementLength)&quot;
- Replace repStrLength checks by replacement NULL-checks in new StringImpl::replace() methods
- Add API tests from String::replaceWithString() and corresponding StringImpl method
- Replace String::replace() by String::replaceWithLiteral() where appropriate in the rest of WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759499</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 03:52:05 -0800</bug_when>
    <thetext>Attachment 172546 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/te...&quot; exit_code: 1
Source/WTF/wtf/text/WTFString.h:311:  More than one command on the same line in if  [whitespace/parens] [4]
Total errors found: 1 in 22 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>759810</commentid>
    <comment_count>20</comment_count>
      <attachid>172609</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-06 10:11:06 -0800</bug_when>
    <thetext>Created attachment 172609
Patch

Update changelogs to match title change from ap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759813</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 10:12:31 -0800</bug_when>
    <thetext>Attachment 172609 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/te...&quot; exit_code: 1
Source/WTF/wtf/text/WTFString.h:311:  More than one command on the same line in if  [whitespace/parens] [4]
Total errors found: 1 in 22 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>760053</commentid>
    <comment_count>22</comment_count>
      <attachid>172609</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-06 14:30:51 -0800</bug_when>
    <thetext>Comment on attachment 172609
Patch

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

Great patch, and I like the tests.

I r- for the replace() taking a UChar*. I would like it to be more like your other replace().

&gt; Source/WTF/wtf/text/StringImpl.cpp:1395
&gt; +    if (!replacement)
&gt; +        return this;

Can you leave that out entirely (and maybe replace it with an assertion)?
Given the two way to use that function are currently:
   -literal
   -the older replace taking a StringImpl
I have the feeling the null &quot;replacement&quot; may be better handled as a null repStrLength.

&gt; Source/WTF/wtf/text/StringImpl.cpp:1434
&gt;              memcpy(data + dstOffset, m_data8 + srcSegmentStart, srcSegmentLength * sizeof(LChar));
&gt;              dstOffset += srcSegmentLength;
&gt; -            memcpy(data + dstOffset, replacement-&gt;m_data8, repStrLength * sizeof(LChar));
&gt; +            memcpy(data + dstOffset, replacement, repStrLength * sizeof(LChar));

Just for info: StringImpl has copyChars() that is supposed to be better than memcpy if the input is generic.
If you ever find a place were memcpy is a perf issue in StringImpl::replace(), look at copyChars().

&gt; Source/WTF/wtf/text/StringImpl.cpp:1455
&gt; +        for (unsigned i = 0; i &lt; repStrLength; i++)

Typically ++i in WebKit style.

&gt; Source/WTF/wtf/text/StringImpl.cpp:1473
&gt; +    if (!replacement)
&gt; +        return this;

Ditto regarding replacement.

&gt; Source/WTF/wtf/text/StringImpl.cpp:-1479
&gt; +    while ((srcSegmentEnd = find(pattern, srcSegmentStart)) != notFound) {
&gt; +        srcSegmentLength = srcSegmentEnd - srcSegmentStart;
&gt;          if (srcIs8Bit) {
&gt; -            // Case 3.
&gt;              for (unsigned i = 0; i &lt; srcSegmentLength; i++)
&gt;                  data[i + dstOffset] = m_data8[i + srcSegmentStart];
&gt; -        } else {
&gt; -            // Cases 2 &amp; 4.
&gt; +        } else
&gt;              memcpy(data + dstOffset, m_data16 + srcSegmentStart, srcSegmentLength * sizeof(UChar));
&gt; -        }
&gt; +
&gt;          dstOffset += srcSegmentLength;
&gt; -        if (replacementIs8Bit) {
&gt; -            // Case 4.
&gt; -            for (unsigned i = 0; i &lt; repStrLength; i++)
&gt; -                data[i + dstOffset] = replacement-&gt;m_data8[i];
&gt; -        } else {
&gt; -            // Cases 2 &amp; 3.
&gt; -            memcpy(data + dstOffset, replacement-&gt;m_data16, repStrLength * sizeof(UChar));
&gt; -        }
&gt; +        memcpy(data + dstOffset, replacement, repStrLength * sizeof(UChar));
&gt; +
&gt;          dstOffset += repStrLength;
&gt;          srcSegmentStart = srcSegmentEnd + 1;
&gt;      }
&gt;  
&gt;      srcSegmentLength = m_length - srcSegmentStart;
&gt;      if (srcIs8Bit) {
&gt; -        // Case 3.
&gt;          for (unsigned i = 0; i &lt; srcSegmentLength; i++)
&gt;              data[i + dstOffset] = m_data8[i + srcSegmentStart];
&gt; -    } else {
&gt; -        // Cases 2 &amp; 4.
&gt; +    } else
&gt;          memcpy(data + dstOffset, m_data16 + srcSegmentStart, srcSegmentLength * sizeof(UChar));
&gt; -    }

You should split this the same way you have done in the other replace, it looks much better. Do is8bit() outside the loop, then to the fallback. If it is not 8bits, do the other loop.

&gt;&gt; Source/WTF/wtf/text/WTFString.h:311
&gt;&gt; +    template&lt;unsigned charactersCount&gt;
&gt;&gt; +    ALWAYS_INLINE String&amp; replaceWithLiteral(UChar a, const char (&amp;characters)[charactersCount]) { if (m_impl) m_impl = m_impl-&gt;replace(a, characters, charactersCount - 1); return *this; }
&gt; 
&gt; More than one command on the same line in if  [whitespace/parens] [4]

Please fix the style here. This should really be on multiple lines.

&gt; Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp:79
&gt; +    // Cases for 8Bit source.
&gt; +    testStringImpl = testStringImpl-&gt;replace(&apos;2&apos;, static_cast&lt;const char*&gt;(0), 0);
&gt; +    ASSERT_TRUE(equal(testStringImpl.get(), &quot;1224&quot;));

That&apos;s the case I am half convinced about.
Nice you have a test for it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760417</commentid>
    <comment_count>23</comment_count>
      <attachid>172609</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-06 23:13:31 -0800</bug_when>
    <thetext>Comment on attachment 172609
Patch

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

&gt;&gt; Source/WTF/wtf/text/StringImpl.cpp:1395
&gt;&gt; +        return this;
&gt; 
&gt; Can you leave that out entirely (and maybe replace it with an assertion)?
&gt; Given the two way to use that function are currently:
&gt;    -literal
&gt;    -the older replace taking a StringImpl
&gt; I have the feeling the null &quot;replacement&quot; may be better handled as a null repStrLength.

Yes, I can replace this with &quot;ASSERT(replacement);&quot; since this is not technically valid input for the method. Note however, that I&apos;ll need to remove this case from the API tests then since it will hit the assertion.

&gt;&gt; Source/WTF/wtf/text/StringImpl.cpp:1455
&gt;&gt; +        for (unsigned i = 0; i &lt; repStrLength; i++)
&gt; 
&gt; Typically ++i in WebKit style.

Right, I merely moved the code without editing it but this is worth fixing.

&gt;&gt;&gt; Source/WTF/wtf/text/WTFString.h:311
&gt;&gt;&gt; +    ALWAYS_INLINE String&amp; replaceWithLiteral(UChar a, const char (&amp;characters)[charactersCount]) { if (m_impl) m_impl = m_impl-&gt;replace(a, characters, charactersCount - 1); return *this; }
&gt;&gt; 
&gt;&gt; More than one command on the same line in if  [whitespace/parens] [4]
&gt; 
&gt; Please fix the style here. This should really be on multiple lines.

Ok, I was prioritizing consistency with other replace() methods over style but I&apos;ll fix it.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/StringImpl.cpp:79
&gt;&gt; +    ASSERT_TRUE(equal(testStringImpl.get(), &quot;1224&quot;));
&gt; 
&gt; That&apos;s the case I am half convinced about.
&gt; Nice you have a test for it!

As explained above, I&apos;ll need to remove it since passing a NULL pointer for the replacement argument will now hit the assertion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760427</commentid>
    <comment_count>24</comment_count>
      <attachid>172726</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-07 00:00:41 -0800</bug_when>
    <thetext>Created attachment 172726
Patch

Take Benjamin&apos;s feedback into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760458</commentid>
    <comment_count>25</comment_count>
      <attachid>172726</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-07 01:14:57 -0800</bug_when>
    <thetext>Comment on attachment 172726
Patch

Brilliant.

Sorry I made the review by segments, thanks for carefully updating every times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760472</commentid>
    <comment_count>26</comment_count>
      <attachid>172726</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-07 01:43:33 -0800</bug_when>
    <thetext>Comment on attachment 172726
Patch

Clearing flags on attachment: 172726

Committed r133731: &lt;http://trac.webkit.org/changeset/133731&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760473</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-07 01:43:40 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172406</attachid>
            <date>2012-11-05 14:19:44 -0800</date>
            <delta_ts>2012-11-05 15:02:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>101257_replaceLiteral.patch</filename>
            <type>text/plain</type>
            <size>5805</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggZjkzYzNiNS4uN2ZkYjFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMi0xMS0wNSAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAg
IFtXVEZdIEFkZCBXVEZTdHJpbmc6OnJlcGxhY2VMaXRlcmFsKCkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTI1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCByZXBsYWNlTGl0ZXJhbCgpIG1ldGhv
ZCB0byBXVEZTdHJpbmcgdGhhdCB0YWtlcworICAgICAgICB0aGUgcmVwbGFjZW1lbnQgc3RyaW5n
IGFzIGxpdGVyYWwgdG8gYXZvaWQgdXNlbGVzc2x5CisgICAgICAgIGNvbnN0cnVjdGluZyBhIFN0
cmluZy4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjpyZXBsYWNlKToKKyAgICAgICAgKFdURik6CisgICAgICAgICogd3RmL3Rl
eHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZXBsYWNlKToKKyAg
ICAgICAgKFN0cmluZ0ltcGwpOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgorICAg
ICAgICAoU3RyaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpyZXBsYWNlTGl0ZXJhbCk6CisK
IDIwMTItMTEtMDMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAg
ICAgR2V0IHJpZCBvZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmNwcAppbmRleCAyZDA0YjFmLi45Yzc1OTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SW1wbC5jcHAKQEAgLTE0ODMsNiArMTQ4Myw4NCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwgU3RyaW5nSW1wbCogcmVwbGFjZW1lbgog
ICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0IExDaGFyKiByZXBsYWNl
bWVudCwgdW5zaWduZWQgcmVwU3RyTGVuZ3RoKQoreworICAgIGlmICghcmVwbGFjZW1lbnQpCisg
ICAgICAgIHJldHVybiB0aGlzOworCisgICAgc2l6ZV90IHNyY1NlZ21lbnRTdGFydCA9IDA7Cisg
ICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7CisKKyAgICAvLyBDb3VudCB0aGUgbWF0Y2hlcy4K
KyAgICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0
YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgKyttYXRjaENvdW50OworICAgICAgICArK3Ny
Y1NlZ21lbnRTdGFydDsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBoYXZlIDAgbWF0Y2hlcyB0aGVu
IHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IG1vcmUgd29yay4KKyAgICBpZiAoIW1hdGNoQ291bnQp
CisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgaWYgKHJlcFN0ckxlbmd0aCAmJiBtYXRjaENv
dW50ID4gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIHJlcFN0ckxlbmd0aCkKKyAg
ICAgICAgQ1JBU0goKTsKKworICAgIHVuc2lnbmVkIHJlcGxhY2VTaXplID0gbWF0Y2hDb3VudCAq
IHJlcFN0ckxlbmd0aDsKKyAgICB1bnNpZ25lZCBuZXdTaXplID0gbV9sZW5ndGggLSBtYXRjaENv
dW50OworICAgIGlmIChuZXdTaXplID49IChudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
IC0gcmVwbGFjZVNpemUpKQorICAgICAgICBDUkFTSCgpOworCisgICAgbmV3U2l6ZSArPSByZXBs
YWNlU2l6ZTsKKworICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEuCisgICAgc2l6ZV90IHNy
Y1NlZ21lbnRFbmQ7CisgICAgdW5zaWduZWQgc3JjU2VnbWVudExlbmd0aDsKKyAgICBzcmNTZWdt
ZW50U3RhcnQgPSAwOworICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9IDA7CisKKyAgICBpZiAoaXM4
Qml0KCkpIHsKKyAgICAgICAgTENoYXIqIGRhdGE7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsKKworICAgICAg
ICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkp
ICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0gc3JjU2VnbWVu
dEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKKyAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zm
c2V0LCBtX2RhdGE4ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9m
KExDaGFyKSk7CisgICAgICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKKyAg
ICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudCwgcmVwU3RyTGVu
Z3RoICogc2l6ZW9mKExDaGFyKSk7CisgICAgICAgICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVu
Z3RoOworICAgICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7Cisg
ICAgICAgIH0KKworICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0gbV9sZW5ndGggLSBzcmNTZWdt
ZW50U3RhcnQ7CisgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGE4ICsgc3Jj
U2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7CisKKyAgICAg
ICAgQVNTRVJUKGRzdE9mZnNldCArIHNyY1NlZ21lbnRMZW5ndGggPT0gbmV3SW1wbC0+bGVuZ3Ro
KCkpOworCisgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBV
Q2hhciogZGF0YTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CisKKyAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBm
aW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CisgICAgICAgIHNy
Y1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OworICAgICAg
ICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNy
Y1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKworICAgICAgICBkc3RPZmZzZXQgKz0g
c3JjU2VnbWVudExlbmd0aDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcFN0
ckxlbmd0aDsgaSsrKQorICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IHJlcGxhY2Vt
ZW50W2ldOworCisgICAgICAgIGRzdE9mZnNldCArPSByZXBTdHJMZW5ndGg7CisgICAgICAgIHNy
Y1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyAxOworICAgIH0KKworICAgIHNyY1NlZ21l
bnRMZW5ndGggPSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFydDsKKyAgICBtZW1jcHkoZGF0YSAr
IGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGgg
KiBzaXplb2YoVUNoYXIpKTsKKworICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVu
Z3RoID09IG5ld0ltcGwtPmxlbmd0aCgpKTsKKworICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2Uo
KTsKK30KKwogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFN0cmlu
Z0ltcGwqIHBhdHRlcm4sIFN0cmluZ0ltcGwqIHJlcGxhY2VtZW50KQogewogICAgIGlmICghcGF0
dGVybiB8fCAhcmVwbGFjZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IGViNDY2
MmMuLmQ1NWQ2MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCkBAIC03MDksNiArNzA5LDgg
QEAgcHVibGljOgogCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gcmVwbGFjZShVQ2hhciwgVUNoYXIpOwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIsIFN0cmluZ0ltcGwqKTsKKyAgICBB
TFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShVQ2hhciBwYXR0ZXJu
LCBjb25zdCBjaGFyKiByZXBsYWNlbWVudCwgdW5zaWduZWQgcmVwbGFjZW1lbnRMZW5ndGgpIHsg
cmV0dXJuIHJlcGxhY2UocGF0dGVybiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHJl
cGxhY2VtZW50KSwgcmVwbGFjZW1lbnRMZW5ndGgpOyB9CisgICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShVQ2hhciwgY29uc3QgTENoYXIqLCB1
bnNpZ25lZCByZXBsYWNlbWVudExlbmd0aCk7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopOwog
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2Uo
dW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwgU3RyaW5nSW1wbCopOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9X
VEZTdHJpbmcuaAppbmRleCA2MjRlYjU0Li5iNGU4YmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmgKQEAgLTMwNyw2ICszMDcsOSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nJiByZXBsYWNlKGNvbnN0
IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1w
bC0+cmVwbGFjZShhLmltcGwoKSwgYi5pbXBsKCkpOyByZXR1cm4gKnRoaXM7IH0KICAgICBTdHJp
bmcmIHJlcGxhY2UodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwgY29uc3QgU3RyaW5nJiBi
KSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+cmVwbGFjZShpbmRleCwgbGVuLCBiLmlt
cGwoKSk7IHJldHVybiAqdGhpczsgfQogCisgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVy
c0NvdW50PgorICAgIEFMV0FZU19JTkxJTkUgU3RyaW5nJiByZXBsYWNlTGl0ZXJhbChVQ2hhciBh
LCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSkgeyBpZiAobV9pbXBs
KSBtX2ltcGwgPSBtX2ltcGwtPnJlcGxhY2UoYSwgY2hhcmFjdGVycywgY2hhcmFjdGVyc0NvdW50
IC0gMSk7IHJldHVybiAqdGhpczsgfQorCiAgICAgdm9pZCBtYWtlTG93ZXIoKSB7IGlmIChtX2lt
cGwpIG1faW1wbCA9IG1faW1wbC0+bG93ZXIoKTsgfQogICAgIHZvaWQgbWFrZVVwcGVyKCkgeyBp
ZiAobV9pbXBsKSBtX2ltcGwgPSBtX2ltcGwtPnVwcGVyKCk7IH0KICAgICB2b2lkIGZpbGwoVUNo
YXIgYykgeyBpZiAobV9pbXBsKSBtX2ltcGwgPSBtX2ltcGwtPmZpbGwoYyk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172413</attachid>
            <date>2012-11-05 15:02:52 -0800</date>
            <delta_ts>2012-11-05 15:17:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>101257_replaceLiteral.patch</filename>
            <type>text/plain</type>
            <size>8732</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">OnEhZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VM
b2cKaW5kZXggZjkzYzNiNS4uZGY0YTAwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMi0xMS0w
NSAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAg
ICAgIFtXVEZdIEFkZCBXVEZTdHJpbmc6OnJlcGxhY2VXaXRoTGl0ZXJhbCgpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEyNTcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgcmVwbGFjZVdpdGhMaXRl
cmFsKCkgbWV0aG9kIHRvIFdURlN0cmluZyB0aGF0CisgICAgICAgIHRha2VzIHJlcGxhY2VtZW50
IHN0cmluZyBhcyBhIGxpdGVyYWwgdG8gYXZvaWQKKyAgICAgICAgdXNlbGVzc2x5IGNvbnN0cnVj
dGluZyBhIFN0cmluZy4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAg
ICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZXBsYWNlKToKKyAgICAgICAgKFdURik6CisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZXBs
YWNlKToKKyAgICAgICAgKFN0cmluZ0ltcGwpOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmlu
Zy5oOgorICAgICAgICAoU3RyaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpyZXBsYWNlV2l0
aExpdGVyYWwpOgorCiAyMDEyLTExLTAzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgogCiAgICAgICAgIEdldCByaWQgb2YgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKaW5kZXggMmQwNGIxZi4uN2FhNmE4NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0xMzgyLDIxICsxMzgyLDMxIEBAIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBTdHJpbmdJbXBs
KiByZXBsYWNlbWVuCiB7CiAgICAgaWYgKCFyZXBsYWNlbWVudCkKICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICAgIAotICAgIHVuc2lnbmVkIHJlcFN0ckxlbmd0aCA9IHJlcGxhY2VtZW50LT5s
ZW5ndGgoKTsKKworICAgIGlmIChyZXBsYWNlbWVudC0+aXM4Qml0KCkpCisgICAgICAgIHJldHVy
biByZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50LT5tX2RhdGE4LCByZXBsYWNlbWVudC0+bGVu
Z3RoKCkpOworCisgICAgcmV0dXJuIHJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnQtPm1fZGF0
YTE2LCByZXBsYWNlbWVudC0+bGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgTENoYXIqIHJlcGxhY2Vt
ZW50LCB1bnNpZ25lZCByZXBTdHJMZW5ndGgpCit7CisgICAgaWYgKCFyZXBTdHJMZW5ndGgpCisg
ICAgICAgIHJldHVybiB0aGlzOworCiAgICAgc2l6ZV90IHNyY1NlZ21lbnRTdGFydCA9IDA7CiAg
ICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7Ci0gICAgCisKICAgICAvLyBDb3VudCB0aGUgbWF0
Y2hlcy4KICAgICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9IGZpbmQocGF0dGVybiwgc3JjU2Vn
bWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKICAgICAgICAgKyttYXRjaENvdW50OwogICAgICAg
ICArK3NyY1NlZ21lbnRTdGFydDsKICAgICB9Ci0gICAgCisKICAgICAvLyBJZiB3ZSBoYXZlIDAg
bWF0Y2hlcyB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IG1vcmUgd29yay4KICAgICBpZiAo
IW1hdGNoQ291bnQpCiAgICAgICAgIHJldHVybiB0aGlzOwotICAgIAorCiAgICAgaWYgKHJlcFN0
ckxlbmd0aCAmJiBtYXRjaENvdW50ID4gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAv
IHJlcFN0ckxlbmd0aCkKICAgICAgICAgQ1JBU0goKTsKIApAQCAtMTQxMiwxNiArMTQyMiw4IEBA
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJu
LCBTdHJpbmdJbXBsKiByZXBsYWNlbWVuCiAgICAgdW5zaWduZWQgc3JjU2VnbWVudExlbmd0aDsK
ICAgICBzcmNTZWdtZW50U3RhcnQgPSAwOwogICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9IDA7Ci0g
ICAgYm9vbCBzcmNJczhCaXQgPSBpczhCaXQoKTsKLSAgICBib29sIHJlcGxhY2VtZW50SXM4Qml0
ID0gcmVwbGFjZW1lbnQtPmlzOEJpdCgpOwotICAgIAotICAgIC8vIFRoZXJlIGFyZSA0IGNhc2Vz
OgotICAgIC8vIDEuIFRoaXMgYW5kIHJlcGxhY2VtZW50IGFyZSBib3RoIDggYml0LgotICAgIC8v
IDIuIFRoaXMgYW5kIHJlcGxhY2VtZW50IGFyZSBib3RoIDE2IGJpdC4KLSAgICAvLyAzLiBUaGlz
IGlzIDggYml0IGFuZCByZXBsYWNlbWVudCBpcyAxNiBiaXQuCi0gICAgLy8gNC4gVGhpcyBpcyAx
NiBiaXQgYW5kIHJlcGxhY2VtZW50IGlzIDggYml0LgotICAgIGlmIChzcmNJczhCaXQgJiYgcmVw
bGFjZW1lbnRJczhCaXQpIHsKLSAgICAgICAgLy8gQ2FzZSAxCisKKyAgICBpZiAoaXM4Qml0KCkp
IHsKICAgICAgICAgTENoYXIqIGRhdGE7CiAgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsKIApAQCAtMTQyOSw3ICsx
NDMxLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFy
IHBhdHRlcm4sIFN0cmluZ0ltcGwqIHJlcGxhY2VtZW4KICAgICAgICAgICAgIHNyY1NlZ21lbnRM
ZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OwogICAgICAgICAgICAgbWVt
Y3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YTggKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21l
bnRMZW5ndGggKiBzaXplb2YoTENoYXIpKTsKICAgICAgICAgICAgIGRzdE9mZnNldCArPSBzcmNT
ZWdtZW50TGVuZ3RoOwotICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxh
Y2VtZW50LT5tX2RhdGE4LCByZXBTdHJMZW5ndGggKiBzaXplb2YoTENoYXIpKTsKKyAgICAgICAg
ICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudCwgcmVwU3RyTGVuZ3RoICog
c2l6ZW9mKExDaGFyKSk7CiAgICAgICAgICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVuZ3RoOwog
ICAgICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7CiAgICAgICAg
IH0KQEAgLTE0NDcsMzYgKzE0NDksODMgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIFN0cmluZ0ltcGwqIHJlcGxhY2VtZW4KIAogICAg
IHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkg
IT0gbm90Rm91bmQpIHsKICAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQg
LSBzcmNTZWdtZW50U3RhcnQ7CisgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2Rh
dGExNiArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikp
OworCisgICAgICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVwU3RyTGVuZ3RoOyBpKyspCisgICAgICAgICAgICBkYXRh
W2kgKyBkc3RPZmZzZXRdID0gcmVwbGFjZW1lbnRbaV07CisKKyAgICAgICAgZHN0T2Zmc2V0ICs9
IHJlcFN0ckxlbmd0aDsKKyAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCAr
IDE7CisgICAgfQorCisgICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVu
dFN0YXJ0OworICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21l
bnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworCisgICAgQVNTRVJU
KGRzdE9mZnNldCArIHNyY1NlZ21lbnRMZW5ndGggPT0gbmV3SW1wbC0+bGVuZ3RoKCkpOworCisg
ICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgVUNoYXIqIHJlcGxhY2Vt
ZW50LCB1bnNpZ25lZCByZXBTdHJMZW5ndGgpCit7CisgICAgaWYgKCFyZXBTdHJMZW5ndGgpCisg
ICAgICAgIHJldHVybiB0aGlzOworCisgICAgc2l6ZV90IHNyY1NlZ21lbnRTdGFydCA9IDA7Cisg
ICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7CisKKyAgICAvLyBDb3VudCB0aGUgbWF0Y2hlcy4K
KyAgICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0
YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgKyttYXRjaENvdW50OworICAgICAgICArK3Ny
Y1NlZ21lbnRTdGFydDsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBoYXZlIDAgbWF0Y2hlcyB0aGVu
IHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IG1vcmUgd29yay4KKyAgICBpZiAoIW1hdGNoQ291bnQp
CisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgaWYgKHJlcFN0ckxlbmd0aCAmJiBtYXRjaENv
dW50ID4gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIHJlcFN0ckxlbmd0aCkKKyAg
ICAgICAgQ1JBU0goKTsKKworICAgIHVuc2lnbmVkIHJlcGxhY2VTaXplID0gbWF0Y2hDb3VudCAq
IHJlcFN0ckxlbmd0aDsKKyAgICB1bnNpZ25lZCBuZXdTaXplID0gbV9sZW5ndGggLSBtYXRjaENv
dW50OworICAgIGlmIChuZXdTaXplID49IChudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
IC0gcmVwbGFjZVNpemUpKQorICAgICAgICBDUkFTSCgpOworCisgICAgbmV3U2l6ZSArPSByZXBs
YWNlU2l6ZTsKKworICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEuCisgICAgc2l6ZV90IHNy
Y1NlZ21lbnRFbmQ7CisgICAgdW5zaWduZWQgc3JjU2VnbWVudExlbmd0aDsKKyAgICBzcmNTZWdt
ZW50U3RhcnQgPSAwOworICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9IDA7CisgICAgYm9vbCBzcmNJ
czhCaXQgPSBpczhCaXQoKTsKKworICAgIFVDaGFyKiBkYXRhOworICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsKKworICAg
IHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkg
IT0gbm90Rm91bmQpIHsKKyAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQg
LSBzcmNTZWdtZW50U3RhcnQ7CiAgICAgICAgIGlmIChzcmNJczhCaXQpIHsKLSAgICAgICAgICAg
IC8vIENhc2UgMy4KICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdt
ZW50TGVuZ3RoOyBpKyspCiAgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1f
ZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBDYXNlcyAyICYgNC4KKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtZW1jcHkoZGF0
YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgfQorCiAgICAgICAgIGRzdE9mZnNldCArPSBz
cmNTZWdtZW50TGVuZ3RoOwotICAgICAgICBpZiAocmVwbGFjZW1lbnRJczhCaXQpIHsKLSAgICAg
ICAgICAgIC8vIENhc2UgNC4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZXBTdHJMZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBkYXRhW2kgKyBkc3RPZmZzZXRdID0g
cmVwbGFjZW1lbnQtPm1fZGF0YThbaV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBDYXNlcyAyICYgMy4KLSAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBs
YWNlbWVudC0+bV9kYXRhMTYsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwotICAgICAg
ICB9CisgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudCwgcmVwU3Ry
TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisKICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxl
bmd0aDsKICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7CiAgICAg
fQogCiAgICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0Owog
ICAgIGlmIChzcmNJczhCaXQpIHsKLSAgICAgICAgLy8gQ2FzZSAzLgogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgaSsrKQogICAgICAgICAgICAgZGF0
YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gQ2FzZXMgMiAmIDQuCisgICAgfSBlbHNlCiAgICAgICAgIG1lbWNw
eShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVu
dExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwotICAgIH0KIAogICAgIEFTU0VSVChkc3RPZmZzZXQg
KyBzcmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0aCgpKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuaAppbmRleCBlYjQ2NjJjLi4xYjM4YzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0lt
cGwuaApAQCAtNzA5LDYgKzcwOSw5IEBAIHB1YmxpYzoKIAogICAgIFdURl9FWFBPUlRfU1RSSU5H
X0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIsIFVDaGFyKTsKICAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXBsYWNlKFVDaGFy
LCBTdHJpbmdJbXBsKik7CisgICAgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IHJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgY2hhciogcmVwbGFjZW1lbnQsIHVuc2lnbmVk
IHJlcGxhY2VtZW50TGVuZ3RoKSB7IHJldHVybiByZXBsYWNlKHBhdHRlcm4sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihyZXBsYWNlbWVudCksIHJlcGxhY2VtZW50TGVuZ3RoKTsgfQor
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2Uo
VUNoYXIsIGNvbnN0IExDaGFyKiwgdW5zaWduZWQgcmVwbGFjZW1lbnRMZW5ndGgpOworICAgIFdU
Rl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIs
IGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgcmVwbGFjZW1lbnRMZW5ndGgpOwogICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2UoU3RyaW5nSW1wbCos
IFN0cmluZ0ltcGwqKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiByZXBsYWNlKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW4sIFN0cmluZ0ltcGwq
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKaW5kZXggNjI0ZWI1NC4uMTI4ZTQ1MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1dURlN0cmluZy5oCkBAIC0zMDcsNiArMzA3LDkgQEAgcHVibGljOgogICAgIFN0cmlu
ZyYgcmVwbGFjZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyBpZiAobV9pbXBs
KSBtX2ltcGwgPSBtX2ltcGwtPnJlcGxhY2UoYS5pbXBsKCksIGIuaW1wbCgpKTsgcmV0dXJuICp0
aGlzOyB9CiAgICAgU3RyaW5nJiByZXBsYWNlKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW4s
IGNvbnN0IFN0cmluZyYgYikgeyBpZiAobV9pbXBsKSBtX2ltcGwgPSBtX2ltcGwtPnJlcGxhY2Uo
aW5kZXgsIGxlbiwgYi5pbXBsKCkpOyByZXR1cm4gKnRoaXM7IH0KIAorICAgIHRlbXBsYXRlPHVu
c2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KKyAgICBBTFdBWVNfSU5MSU5FIFN0cmluZyYgcmVwbGFj
ZVdpdGhMaXRlcmFsKFVDaGFyIGEsIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJz
Q291bnRdKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+cmVwbGFjZShhLCBjaGFyYWN0
ZXJzLCBjaGFyYWN0ZXJzQ291bnQgLSAxKTsgcmV0dXJuICp0aGlzOyB9CisKICAgICB2b2lkIG1h
a2VMb3dlcigpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT5sb3dlcigpOyB9CiAgICAg
dm9pZCBtYWtlVXBwZXIoKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+dXBwZXIoKTsg
fQogICAgIHZvaWQgZmlsbChVQ2hhciBjKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+
ZmlsbChjKTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172416</attachid>
            <date>2012-11-05 15:17:11 -0800</date>
            <delta_ts>2012-11-05 16:11:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>101257_replaceLiteral.patch</filename>
            <type>text/plain</type>
            <size>8736</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNTZiNGU0My4uODZhY2FhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMi0xMS0wNSAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAg
IFtXVEZdIEFkZCBXVEZTdHJpbmc6OnJlcGxhY2VXaXRoTGl0ZXJhbCgpCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEyNTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgcmVwbGFjZVdpdGhMaXRlcmFs
KCkgbWV0aG9kIHRvIFdURlN0cmluZyB0aGF0CisgICAgICAgIHRha2VzIHJlcGxhY2VtZW50IHN0
cmluZyBhcyBhIGxpdGVyYWwgdG8gYXZvaWQKKyAgICAgICAgdXNlbGVzc2x5IGNvbnN0cnVjdGlu
ZyBhIFN0cmluZy4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjpyZXBsYWNlKToKKyAgICAgICAgKFdURik6CisgICAgICAgICog
d3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZXBsYWNl
KToKKyAgICAgICAgKFN0cmluZ0ltcGwpOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5o
OgorICAgICAgICAoU3RyaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpyZXBsYWNlV2l0aExp
dGVyYWwpOgorCiAyMDEyLTExLTA1ICBEaW1hIEdvcmJpayAgPGRnb3JiaWtAYXBwbGUuY29tPgog
CiAgICAgICAgIEJhY2sgb3V0IGNvbnRyb3ZlcnNpYWwgY2hhbmdlcyBmcm9tIEJ1ZyA5ODY2NS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCmluZGV4IDJkMDRiMWYuLjdhYTZhODcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcApAQCAtMTM4MiwyMSArMTM4MiwzMSBAQCBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwgU3RyaW5n
SW1wbCogcmVwbGFjZW1lbgogewogICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgIHJldHVy
biB0aGlzOwotICAgICAgICAKLSAgICB1bnNpZ25lZCByZXBTdHJMZW5ndGggPSByZXBsYWNlbWVu
dC0+bGVuZ3RoKCk7CisKKyAgICBpZiAocmVwbGFjZW1lbnQtPmlzOEJpdCgpKQorICAgICAgICBy
ZXR1cm4gcmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudC0+bV9kYXRhOCwgcmVwbGFjZW1lbnQt
Pmxlbmd0aCgpKTsKKworICAgIHJldHVybiByZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50LT5t
X2RhdGExNiwgcmVwbGFjZW1lbnQtPmxlbmd0aCgpKTsKK30KKworUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0IExDaGFyKiByZXBs
YWNlbWVudCwgdW5zaWduZWQgcmVwU3RyTGVuZ3RoKQoreworICAgIGlmICghcmVwU3RyTGVuZ3Ro
KQorICAgICAgICByZXR1cm4gdGhpczsKKwogICAgIHNpemVfdCBzcmNTZWdtZW50U3RhcnQgPSAw
OwogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwotICAgIAorCiAgICAgLy8gQ291bnQgdGhl
IG1hdGNoZXMuCiAgICAgd2hpbGUgKChzcmNTZWdtZW50U3RhcnQgPSBmaW5kKHBhdHRlcm4sIHNy
Y1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgICsrbWF0Y2hDb3VudDsKICAg
ICAgICAgKytzcmNTZWdtZW50U3RhcnQ7CiAgICAgfQotICAgIAorCiAgICAgLy8gSWYgd2UgaGF2
ZSAwIG1hdGNoZXMgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueSBtb3JlIHdvcmsuCiAgICAg
aWYgKCFtYXRjaENvdW50KQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICAKKwogICAgIGlmIChy
ZXBTdHJMZW5ndGggJiYgbWF0Y2hDb3VudCA+IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkgLyByZXBTdHJMZW5ndGgpCiAgICAgICAgIENSQVNIKCk7CiAKQEAgLTE0MTIsMTYgKzE0MjIs
OCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0
dGVybiwgU3RyaW5nSW1wbCogcmVwbGFjZW1lbgogICAgIHVuc2lnbmVkIHNyY1NlZ21lbnRMZW5n
dGg7CiAgICAgc3JjU2VnbWVudFN0YXJ0ID0gMDsKICAgICB1bnNpZ25lZCBkc3RPZmZzZXQgPSAw
OwotICAgIGJvb2wgc3JjSXM4Qml0ID0gaXM4Qml0KCk7Ci0gICAgYm9vbCByZXBsYWNlbWVudElz
OEJpdCA9IHJlcGxhY2VtZW50LT5pczhCaXQoKTsKLSAgICAKLSAgICAvLyBUaGVyZSBhcmUgNCBj
YXNlczoKLSAgICAvLyAxLiBUaGlzIGFuZCByZXBsYWNlbWVudCBhcmUgYm90aCA4IGJpdC4KLSAg
ICAvLyAyLiBUaGlzIGFuZCByZXBsYWNlbWVudCBhcmUgYm90aCAxNiBiaXQuCi0gICAgLy8gMy4g
VGhpcyBpcyA4IGJpdCBhbmQgcmVwbGFjZW1lbnQgaXMgMTYgYml0LgotICAgIC8vIDQuIFRoaXMg
aXMgMTYgYml0IGFuZCByZXBsYWNlbWVudCBpcyA4IGJpdC4KLSAgICBpZiAoc3JjSXM4Qml0ICYm
IHJlcGxhY2VtZW50SXM4Qml0KSB7Ci0gICAgICAgIC8vIENhc2UgMQorCisgICAgaWYgKGlzOEJp
dCgpKSB7CiAgICAgICAgIExDaGFyKiBkYXRhOwogICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
bmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CiAKQEAgLTE0Mjks
NyArMTQzMSw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShV
Q2hhciBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsYWNlbWVuCiAgICAgICAgICAgICBzcmNTZWdt
ZW50TGVuZ3RoID0gc3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKICAgICAgICAgICAg
IG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGE4ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNT
ZWdtZW50TGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7CiAgICAgICAgICAgICBkc3RPZmZzZXQgKz0g
c3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBy
ZXBsYWNlbWVudC0+bV9kYXRhOCwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7CisgICAg
ICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQsIHJlcFN0ckxlbmd0
aCAqIHNpemVvZihMQ2hhcikpOwogICAgICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0
aDsKICAgICAgICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyAxOwogICAg
ICAgICB9CkBAIC0xNDQ3LDM2ICsxNDQ5LDgzIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsYWNlbWVuCiAK
ICAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFy
dCkpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50
RW5kIC0gc3JjU2VnbWVudFN0YXJ0OworICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwg
bV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNo
YXIpKTsKKworICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcFN0ckxlbmd0aDsgaSsrKQorICAgICAgICAgICAg
ZGF0YVtpICsgZHN0T2Zmc2V0XSA9IHJlcGxhY2VtZW50W2ldOworCisgICAgICAgIGRzdE9mZnNl
dCArPSByZXBTdHJMZW5ndGg7CisgICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRF
bmQgKyAxOworICAgIH0KKworICAgIHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0aCAtIHNyY1Nl
Z21lbnRTdGFydDsKKyAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNT
ZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKworICAgIEFT
U0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0aCgpKTsK
KworICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0IFVDaGFyKiByZXBs
YWNlbWVudCwgdW5zaWduZWQgcmVwU3RyTGVuZ3RoKQoreworICAgIGlmICghcmVwU3RyTGVuZ3Ro
KQorICAgICAgICByZXR1cm4gdGhpczsKKworICAgIHNpemVfdCBzcmNTZWdtZW50U3RhcnQgPSAw
OworICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOworCisgICAgLy8gQ291bnQgdGhlIG1hdGNo
ZXMuCisgICAgd2hpbGUgKChzcmNTZWdtZW50U3RhcnQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21l
bnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CisgICAgICAgICsrbWF0Y2hDb3VudDsKKyAgICAgICAg
KytzcmNTZWdtZW50U3RhcnQ7CisgICAgfQorCisgICAgLy8gSWYgd2UgaGF2ZSAwIG1hdGNoZXMg
dGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueSBtb3JlIHdvcmsuCisgICAgaWYgKCFtYXRjaENv
dW50KQorICAgICAgICByZXR1cm4gdGhpczsKKworICAgIGlmIChyZXBTdHJMZW5ndGggJiYgbWF0
Y2hDb3VudCA+IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyByZXBTdHJMZW5ndGgp
CisgICAgICAgIENSQVNIKCk7CisKKyAgICB1bnNpZ25lZCByZXBsYWNlU2l6ZSA9IG1hdGNoQ291
bnQgKiByZXBTdHJMZW5ndGg7CisgICAgdW5zaWduZWQgbmV3U2l6ZSA9IG1fbGVuZ3RoIC0gbWF0
Y2hDb3VudDsKKyAgICBpZiAobmV3U2l6ZSA+PSAobnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSAtIHJlcGxhY2VTaXplKSkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIG5ld1NpemUgKz0g
cmVwbGFjZVNpemU7CisKKyAgICAvLyBDb25zdHJ1Y3QgdGhlIG5ldyBkYXRhLgorICAgIHNpemVf
dCBzcmNTZWdtZW50RW5kOworICAgIHVuc2lnbmVkIHNyY1NlZ21lbnRMZW5ndGg7CisgICAgc3Jj
U2VnbWVudFN0YXJ0ID0gMDsKKyAgICB1bnNpZ25lZCBkc3RPZmZzZXQgPSAwOworICAgIGJvb2wg
c3JjSXM4Qml0ID0gaXM4Qml0KCk7CisKKyAgICBVQ2hhciogZGF0YTsKKyAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CisK
KyAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFy
dCkpICE9IG5vdEZvdW5kKSB7CisgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50
RW5kIC0gc3JjU2VnbWVudFN0YXJ0OwogICAgICAgICBpZiAoc3JjSXM4Qml0KSB7Ci0gICAgICAg
ICAgICAvLyBDYXNlIDMuCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Jj
U2VnbWVudExlbmd0aDsgaSsrKQogICAgICAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0g
PSBtX2RhdGE4W2kgKyBzcmNTZWdtZW50U3RhcnRdOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgLy8gQ2FzZXMgMiAmIDQuCisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbWVtY3B5
KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YTE2ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50
TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgICAgIH0KKwogICAgICAgICBkc3RPZmZzZXQg
Kz0gc3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAgaWYgKHJlcGxhY2VtZW50SXM4Qml0KSB7Ci0g
ICAgICAgICAgICAvLyBDYXNlIDQuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVwU3RyTGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0
XSA9IHJlcGxhY2VtZW50LT5tX2RhdGE4W2ldOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gQ2FzZXMgMiAmIDMuCi0gICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwg
cmVwbGFjZW1lbnQtPm1fZGF0YTE2LCByZXBTdHJMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAg
ICAgICAgfQorICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQsIHJl
cFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworCiAgICAgICAgIGRzdE9mZnNldCArPSByZXBT
dHJMZW5ndGg7CiAgICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyAxOwog
ICAgIH0KIAogICAgIHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFy
dDsKICAgICBpZiAoc3JjSXM4Qml0KSB7Ci0gICAgICAgIC8vIENhc2UgMy4KICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1NlZ21lbnRMZW5ndGg7IGkrKykKICAgICAgICAgICAg
IGRhdGFbaSArIGRzdE9mZnNldF0gPSBtX2RhdGE4W2kgKyBzcmNTZWdtZW50U3RhcnRdOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIENhc2VzIDIgJiA0LgorICAgIH0gZWxzZQogICAgICAgICBt
ZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1Nl
Z21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICB9CiAKICAgICBBU1NFUlQoZHN0T2Zm
c2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBuZXdJbXBsLT5sZW5ndGgoKSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmgKaW5kZXggZWI0NjYyYy4uMWIzOGMwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmgKQEAgLTcwOSw2ICs3MDksOSBAQCBwdWJsaWM6CiAKICAgICBXVEZfRVhQT1JUX1NU
UklOR19BUEkgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXBsYWNlKFVDaGFyLCBVQ2hhcik7CiAg
ICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShV
Q2hhciwgU3RyaW5nSW1wbCopOworICAgIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiByZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0IGNoYXIqIHJlcGxhY2VtZW50LCB1bnNp
Z25lZCByZXBsYWNlbWVudExlbmd0aCkgeyByZXR1cm4gcmVwbGFjZShwYXR0ZXJuLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4ocmVwbGFjZW1lbnQpLCByZXBsYWNlbWVudExlbmd0aCk7
IH0KKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXBs
YWNlKFVDaGFyLCBjb25zdCBMQ2hhciosIHVuc2lnbmVkIHJlcGxhY2VtZW50TGVuZ3RoKTsKKyAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXBsYWNlKFVD
aGFyLCBjb25zdCBVQ2hhciosIHVuc2lnbmVkIHJlcGxhY2VtZW50TGVuZ3RoKTsKICAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXBsYWNlKFN0cmluZ0lt
cGwqLCBTdHJpbmdJbXBsKik7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gcmVwbGFjZSh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuLCBTdHJpbmdJ
bXBsKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmggYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IDYyNGViNTQuLjEyOGU0NTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9XVEZTdHJpbmcuaApAQCAtMzA3LDYgKzMwNyw5IEBAIHB1YmxpYzoKICAgICBT
dHJpbmcmIHJlcGxhY2UoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgaWYgKG1f
aW1wbCkgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKGEuaW1wbCgpLCBiLmltcGwoKSk7IHJldHVy
biAqdGhpczsgfQogICAgIFN0cmluZyYgcmVwbGFjZSh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQg
bGVuLCBjb25zdCBTdHJpbmcmIGIpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT5yZXBs
YWNlKGluZGV4LCBsZW4sIGIuaW1wbCgpKTsgcmV0dXJuICp0aGlzOyB9CiAKKyAgICB0ZW1wbGF0
ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CisgICAgQUxXQVlTX0lOTElORSBTdHJpbmcmIHJl
cGxhY2VXaXRoTGl0ZXJhbChVQ2hhciBhLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFj
dGVyc0NvdW50XSkgeyBpZiAobV9pbXBsKSBtX2ltcGwgPSBtX2ltcGwtPnJlcGxhY2UoYSwgY2hh
cmFjdGVycywgY2hhcmFjdGVyc0NvdW50IC0gMSk7IHJldHVybiAqdGhpczsgfQorCiAgICAgdm9p
ZCBtYWtlTG93ZXIoKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+bG93ZXIoKTsgfQog
ICAgIHZvaWQgbWFrZVVwcGVyKCkgeyBpZiAobV9pbXBsKSBtX2ltcGwgPSBtX2ltcGwtPnVwcGVy
KCk7IH0KICAgICB2b2lkIGZpbGwoVUNoYXIgYykgeyBpZiAobV9pbXBsKSBtX2ltcGwgPSBtX2lt
cGwtPmZpbGwoYyk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172427</attachid>
            <date>2012-11-05 16:11:05 -0800</date>
            <delta_ts>2012-11-06 03:48:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>101257_replaceLiteral.patch</filename>
            <type>text/plain</type>
            <size>8742</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNTZiNGU0My4uNTU4NTRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMi0xMS0wNSAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAg
IFtXVEZdIEFkZCByZXBsYWNlKCkgbWV0aG9kIHRvIFdURlN0cmluZyB0aGF0IHRha2VzIHJlcGxh
Y2VtZW50IHN0cmluZyBhcyBsaXRlcmFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDEyNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgcmVwbGFjZSgpIG1ldGhvZCB0byBXVEZTdHJpbmcgdGhhdCB0
YWtlcyByZXBsYWNlbWVudAorICAgICAgICBzdHJpbmcgYXMgYSBsaXRlcmFsIHRvIGF2b2lkIHVz
ZWxlc3NseSBjb25zdHJ1Y3RpbmcgYQorICAgICAgICBTdHJpbmcuCisKKyAgICAgICAgKiB3dGYv
dGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6cmVwbGFjZSk6
CisgICAgICAgIChXVEYpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAg
ICAgKFdURjo6U3RyaW5nSW1wbDo6cmVwbGFjZSk6CisgICAgICAgIChTdHJpbmdJbXBsKToKKyAg
ICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAgKFN0cmluZyk6CisgICAgICAg
IChXVEY6OlN0cmluZzo6cmVwbGFjZSk6CisKIDIwMTItMTEtMDUgIERpbWEgR29yYmlrICA8ZGdv
cmJpa0BhcHBsZS5jb20+CiAKICAgICAgICAgQmFjayBvdXQgY29udHJvdmVyc2lhbCBjaGFuZ2Vz
IGZyb20gQnVnIDk4NjY1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKaW5kZXggMmQwNGIx
Zi4uN2FhNmE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0xMzgyLDIxICsx
MzgyLDMxIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hh
ciBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsYWNlbWVuCiB7CiAgICAgaWYgKCFyZXBsYWNlbWVu
dCkKICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIAotICAgIHVuc2lnbmVkIHJlcFN0ckxl
bmd0aCA9IHJlcGxhY2VtZW50LT5sZW5ndGgoKTsKKworICAgIGlmIChyZXBsYWNlbWVudC0+aXM4
Qml0KCkpCisgICAgICAgIHJldHVybiByZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50LT5tX2Rh
dGE4LCByZXBsYWNlbWVudC0+bGVuZ3RoKCkpOworCisgICAgcmV0dXJuIHJlcGxhY2UocGF0dGVy
biwgcmVwbGFjZW1lbnQtPm1fZGF0YTE2LCByZXBsYWNlbWVudC0+bGVuZ3RoKCkpOworfQorCitQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwg
Y29uc3QgTENoYXIqIHJlcGxhY2VtZW50LCB1bnNpZ25lZCByZXBTdHJMZW5ndGgpCit7CisgICAg
aWYgKCFyZXBTdHJMZW5ndGgpCisgICAgICAgIHJldHVybiB0aGlzOworCiAgICAgc2l6ZV90IHNy
Y1NlZ21lbnRTdGFydCA9IDA7CiAgICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7Ci0gICAgCisK
ICAgICAvLyBDb3VudCB0aGUgbWF0Y2hlcy4KICAgICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9
IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKICAgICAgICAg
KyttYXRjaENvdW50OwogICAgICAgICArK3NyY1NlZ21lbnRTdGFydDsKICAgICB9Ci0gICAgCisK
ICAgICAvLyBJZiB3ZSBoYXZlIDAgbWF0Y2hlcyB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55
IG1vcmUgd29yay4KICAgICBpZiAoIW1hdGNoQ291bnQpCiAgICAgICAgIHJldHVybiB0aGlzOwot
ICAgIAorCiAgICAgaWYgKHJlcFN0ckxlbmd0aCAmJiBtYXRjaENvdW50ID4gbnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSAvIHJlcFN0ckxlbmd0aCkKICAgICAgICAgQ1JBU0goKTsKIApA
QCAtMTQxMiwxNiArMTQyMiw4IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6
cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsYWNlbWVuCiAgICAgdW5zaWdu
ZWQgc3JjU2VnbWVudExlbmd0aDsKICAgICBzcmNTZWdtZW50U3RhcnQgPSAwOwogICAgIHVuc2ln
bmVkIGRzdE9mZnNldCA9IDA7Ci0gICAgYm9vbCBzcmNJczhCaXQgPSBpczhCaXQoKTsKLSAgICBi
b29sIHJlcGxhY2VtZW50SXM4Qml0ID0gcmVwbGFjZW1lbnQtPmlzOEJpdCgpOwotICAgIAotICAg
IC8vIFRoZXJlIGFyZSA0IGNhc2VzOgotICAgIC8vIDEuIFRoaXMgYW5kIHJlcGxhY2VtZW50IGFy
ZSBib3RoIDggYml0LgotICAgIC8vIDIuIFRoaXMgYW5kIHJlcGxhY2VtZW50IGFyZSBib3RoIDE2
IGJpdC4KLSAgICAvLyAzLiBUaGlzIGlzIDggYml0IGFuZCByZXBsYWNlbWVudCBpcyAxNiBiaXQu
Ci0gICAgLy8gNC4gVGhpcyBpcyAxNiBiaXQgYW5kIHJlcGxhY2VtZW50IGlzIDggYml0LgotICAg
IGlmIChzcmNJczhCaXQgJiYgcmVwbGFjZW1lbnRJczhCaXQpIHsKLSAgICAgICAgLy8gQ2FzZSAx
CisKKyAgICBpZiAoaXM4Qml0KCkpIHsKICAgICAgICAgTENoYXIqIGRhdGE7CiAgICAgICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBk
YXRhKTsKIApAQCAtMTQyOSw3ICsxNDMxLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIFN0cmluZ0ltcGwqIHJlcGxhY2VtZW4KICAg
ICAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0
YXJ0OwogICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YTggKyBzcmNT
ZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoTENoYXIpKTsKICAgICAgICAg
ICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOwotICAgICAgICAgICAgbWVtY3B5KGRh
dGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGE4LCByZXBTdHJMZW5ndGggKiBzaXpl
b2YoTENoYXIpKTsKKyAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNl
bWVudCwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7CiAgICAgICAgICAgICBkc3RPZmZz
ZXQgKz0gcmVwU3RyTGVuZ3RoOwogICAgICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2Vn
bWVudEVuZCArIDE7CiAgICAgICAgIH0KQEAgLTE0NDcsMzYgKzE0NDksODMgQEAgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIFN0cmluZ0lt
cGwqIHJlcGxhY2VtZW4KIAogICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVy
biwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKICAgICAgICAgc3JjU2VnbWVudExl
bmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7CisgICAgICAgIG1lbWNweShk
YXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExl
bmd0aCAqIHNpemVvZihVQ2hhcikpOworCisgICAgICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50
TGVuZ3RoOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVwU3RyTGVuZ3RoOyBp
KyspCisgICAgICAgICAgICBkYXRhW2kgKyBkc3RPZmZzZXRdID0gcmVwbGFjZW1lbnRbaV07CisK
KyAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKKyAgICAgICAgc3JjU2VnbWVudFN0
YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7CisgICAgfQorCisgICAgc3JjU2VnbWVudExlbmd0aCA9
IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OworICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0
LCBtX2RhdGExNiArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihV
Q2hhcikpOworCisgICAgQVNTRVJUKGRzdE9mZnNldCArIHNyY1NlZ21lbnRMZW5ndGggPT0gbmV3
SW1wbC0+bGVuZ3RoKCkpOworCisgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwg
Y29uc3QgVUNoYXIqIHJlcGxhY2VtZW50LCB1bnNpZ25lZCByZXBTdHJMZW5ndGgpCit7CisgICAg
aWYgKCFyZXBTdHJMZW5ndGgpCisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgc2l6ZV90IHNy
Y1NlZ21lbnRTdGFydCA9IDA7CisgICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7CisKKyAgICAv
LyBDb3VudCB0aGUgbWF0Y2hlcy4KKyAgICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9IGZpbmQo
cGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgKyttYXRj
aENvdW50OworICAgICAgICArK3NyY1NlZ21lbnRTdGFydDsKKyAgICB9CisKKyAgICAvLyBJZiB3
ZSBoYXZlIDAgbWF0Y2hlcyB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IG1vcmUgd29yay4K
KyAgICBpZiAoIW1hdGNoQ291bnQpCisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgaWYgKHJl
cFN0ckxlbmd0aCAmJiBtYXRjaENvdW50ID4gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSAvIHJlcFN0ckxlbmd0aCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIHVuc2lnbmVkIHJlcGxh
Y2VTaXplID0gbWF0Y2hDb3VudCAqIHJlcFN0ckxlbmd0aDsKKyAgICB1bnNpZ25lZCBuZXdTaXpl
ID0gbV9sZW5ndGggLSBtYXRjaENvdW50OworICAgIGlmIChuZXdTaXplID49IChudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpIC0gcmVwbGFjZVNpemUpKQorICAgICAgICBDUkFTSCgpOwor
CisgICAgbmV3U2l6ZSArPSByZXBsYWNlU2l6ZTsKKworICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3
IGRhdGEuCisgICAgc2l6ZV90IHNyY1NlZ21lbnRFbmQ7CisgICAgdW5zaWduZWQgc3JjU2VnbWVu
dExlbmd0aDsKKyAgICBzcmNTZWdtZW50U3RhcnQgPSAwOworICAgIHVuc2lnbmVkIGRzdE9mZnNl
dCA9IDA7CisgICAgYm9vbCBzcmNJczhCaXQgPSBpczhCaXQoKTsKKworICAgIFVDaGFyKiBkYXRh
OworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChu
ZXdTaXplLCBkYXRhKTsKKworICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVy
biwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgc3JjU2VnbWVudExl
bmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7CiAgICAgICAgIGlmIChzcmNJ
czhCaXQpIHsKLSAgICAgICAgICAgIC8vIENhc2UgMy4KICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyBpKyspCiAgICAgICAgICAgICAgICAgZGF0
YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBDYXNlcyAyICYgNC4KKyAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50
U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgfQorCiAg
ICAgICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOwotICAgICAgICBpZiAocmVwbGFj
ZW1lbnRJczhCaXQpIHsKLSAgICAgICAgICAgIC8vIENhc2UgNC4KLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZXBTdHJMZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBk
YXRhW2kgKyBkc3RPZmZzZXRdID0gcmVwbGFjZW1lbnQtPm1fZGF0YThbaV07Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBDYXNlcyAyICYgMy4KLSAgICAgICAgICAgIG1lbWNweShk
YXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhMTYsIHJlcFN0ckxlbmd0aCAqIHNp
emVvZihVQ2hhcikpOwotICAgICAgICB9CisgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0
LCByZXBsYWNlbWVudCwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisKICAgICAgICAg
ZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3Jj
U2VnbWVudEVuZCArIDE7CiAgICAgfQogCiAgICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3Ro
IC0gc3JjU2VnbWVudFN0YXJ0OwogICAgIGlmIChzcmNJczhCaXQpIHsKLSAgICAgICAgLy8gQ2Fz
ZSAzLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsg
aSsrKQogICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1Nl
Z21lbnRTdGFydF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQ2FzZXMgMiAmIDQuCisgICAg
fSBlbHNlCiAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1Nl
Z21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwotICAgIH0KIAog
ICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0
aCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCBlYjQ2NjJjLi4xYjM4YzBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaApAQCAtNzA5LDYgKzcwOSw5IEBAIHB1YmxpYzoKIAog
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2Uo
VUNoYXIsIFVDaGFyKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiByZXBsYWNlKFVDaGFyLCBTdHJpbmdJbXBsKik7CisgICAgQUxXQVlTX0lOTElORSBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgY2hhciog
cmVwbGFjZW1lbnQsIHVuc2lnbmVkIHJlcGxhY2VtZW50TGVuZ3RoKSB7IHJldHVybiByZXBsYWNl
KHBhdHRlcm4sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihyZXBsYWNlbWVudCksIHJl
cGxhY2VtZW50TGVuZ3RoKTsgfQorICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIsIGNvbnN0IExDaGFyKiwgdW5zaWduZWQgcmVwbGFj
ZW1lbnRMZW5ndGgpOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IHJlcGxhY2UoVUNoYXIsIGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgcmVwbGFjZW1lbnRM
ZW5ndGgpOwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IHJlcGxhY2UoU3RyaW5nSW1wbCosIFN0cmluZ0ltcGwqKTsKICAgICBXVEZfRVhQT1JUX1NUUklO
R19BUEkgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXBsYWNlKHVuc2lnbmVkIGluZGV4LCB1bnNp
Z25lZCBsZW4sIFN0cmluZ0ltcGwqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4
dC9XVEZTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKaW5kZXggNjI0
ZWI1NC4uZTVlZTIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCkBAIC0zMDcsNiArMzA3LDkg
QEAgcHVibGljOgogICAgIFN0cmluZyYgcmVwbGFjZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0
cmluZyYgYikgeyBpZiAobV9pbXBsKSBtX2ltcGwgPSBtX2ltcGwtPnJlcGxhY2UoYS5pbXBsKCks
IGIuaW1wbCgpKTsgcmV0dXJuICp0aGlzOyB9CiAgICAgU3RyaW5nJiByZXBsYWNlKHVuc2lnbmVk
IGluZGV4LCB1bnNpZ25lZCBsZW4sIGNvbnN0IFN0cmluZyYgYikgeyBpZiAobV9pbXBsKSBtX2lt
cGwgPSBtX2ltcGwtPnJlcGxhY2UoaW5kZXgsIGxlbiwgYi5pbXBsKCkpOyByZXR1cm4gKnRoaXM7
IH0KIAorICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KKyAgICBBTFdBWVNf
SU5MSU5FIFN0cmluZyYgcmVwbGFjZShVQ2hhciBhLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylb
Y2hhcmFjdGVyc0NvdW50XSkgeyBpZiAobV9pbXBsKSBtX2ltcGwgPSBtX2ltcGwtPnJlcGxhY2Uo
YSwgY2hhcmFjdGVycywgY2hhcmFjdGVyc0NvdW50IC0gMSk7IHJldHVybiAqdGhpczsgfQorCiAg
ICAgdm9pZCBtYWtlTG93ZXIoKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+bG93ZXIo
KTsgfQogICAgIHZvaWQgbWFrZVVwcGVyKCkgeyBpZiAobV9pbXBsKSBtX2ltcGwgPSBtX2ltcGwt
PnVwcGVyKCk7IH0KICAgICB2b2lkIGZpbGwoVUNoYXIgYykgeyBpZiAobV9pbXBsKSBtX2ltcGwg
PSBtX2ltcGwtPmZpbGwoYyk7IH0K
</data>
<flag name="review"
          id="186734"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172546</attachid>
            <date>2012-11-06 03:48:13 -0800</date>
            <delta_ts>2012-11-06 10:11:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>101257_replaceLiteral.patch</filename>
            <type>text/plain</type>
            <size>25738</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggZmQxYmNkMC4uYzZjMDZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMi0xMS0wNiAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAg
IFtXVEZdIEFkZCByZXBsYWNlV2l0aExpdGVyYWwoKSBtZXRob2QgdG8gV1RGOjpTdHJpbmcKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTI1NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCByZXBsYWNl
V2l0aExpdGVyYWwoKSBtZXRob2QgdG8gV1RGOjpTdHJpbmcgdGhhdCB0YWtlcworICAgICAgICBy
ZXBsYWNlbWVudCBzdHJpbmcgYXMgYSBsaXRlcmFsIHRvIGF2b2lkIHVzZWxlc3NseSBjb25zdHJ1
Y3RpbmcKKyAgICAgICAgYSBTdHJpbmcgb2JqZWN0LgorCisgICAgICAgICogd3RmL3RleHQvU3Ry
aW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJlcGxhY2UpOgorICAgICAg
ICAoV1RGKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXVEY6
OlN0cmluZ0ltcGw6OnJlcGxhY2UpOgorICAgICAgICAoU3RyaW5nSW1wbCk6CisgICAgICAgICog
d3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAoV1RGOjpT
dHJpbmc6OnJlcGxhY2VXaXRoTGl0ZXJhbCk6CisKIDIwMTItMTEtMDUgIFBoaWxpcCBSb2dlcnMg
IDxwZHJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbmJsb2NrIFNWRyBleHRlcm5hbCByZWZlcmVu
Y2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwIGIvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAppbmRleCAyZDA0YjFmLi40ZDdlZDViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKQEAgLTEzODIsMjEgKzEzODIsMzEgQEAgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIFN0
cmluZ0ltcGwqIHJlcGxhY2VtZW4KIHsKICAgICBpZiAoIXJlcGxhY2VtZW50KQogICAgICAgICBy
ZXR1cm4gdGhpczsKLSAgICAgICAgCi0gICAgdW5zaWduZWQgcmVwU3RyTGVuZ3RoID0gcmVwbGFj
ZW1lbnQtPmxlbmd0aCgpOworCisgICAgaWYgKHJlcGxhY2VtZW50LT5pczhCaXQoKSkKKyAgICAg
ICAgcmV0dXJuIHJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnQtPm1fZGF0YTgsIHJlcGxhY2Vt
ZW50LT5sZW5ndGgoKSk7CisKKyAgICByZXR1cm4gcmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVu
dC0+bV9kYXRhMTYsIHJlcGxhY2VtZW50LT5sZW5ndGgoKSk7Cit9CisKK1Bhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBjb25zdCBMQ2hhciog
cmVwbGFjZW1lbnQsIHVuc2lnbmVkIHJlcFN0ckxlbmd0aCkKK3sKKyAgICBpZiAoIXJlcGxhY2Vt
ZW50KQorICAgICAgICByZXR1cm4gdGhpczsKKwogICAgIHNpemVfdCBzcmNTZWdtZW50U3RhcnQg
PSAwOwogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwotICAgIAorCiAgICAgLy8gQ291bnQg
dGhlIG1hdGNoZXMuCiAgICAgd2hpbGUgKChzcmNTZWdtZW50U3RhcnQgPSBmaW5kKHBhdHRlcm4s
IHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgICsrbWF0Y2hDb3VudDsK
ICAgICAgICAgKytzcmNTZWdtZW50U3RhcnQ7CiAgICAgfQotICAgIAorCiAgICAgLy8gSWYgd2Ug
aGF2ZSAwIG1hdGNoZXMgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueSBtb3JlIHdvcmsuCiAg
ICAgaWYgKCFtYXRjaENvdW50KQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICAKKwogICAgIGlm
IChyZXBTdHJMZW5ndGggJiYgbWF0Y2hDb3VudCA+IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkgLyByZXBTdHJMZW5ndGgpCiAgICAgICAgIENSQVNIKCk7CiAKQEAgLTE0MTIsMTYgKzE0
MjIsOCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIg
cGF0dGVybiwgU3RyaW5nSW1wbCogcmVwbGFjZW1lbgogICAgIHVuc2lnbmVkIHNyY1NlZ21lbnRM
ZW5ndGg7CiAgICAgc3JjU2VnbWVudFN0YXJ0ID0gMDsKICAgICB1bnNpZ25lZCBkc3RPZmZzZXQg
PSAwOwotICAgIGJvb2wgc3JjSXM4Qml0ID0gaXM4Qml0KCk7Ci0gICAgYm9vbCByZXBsYWNlbWVu
dElzOEJpdCA9IHJlcGxhY2VtZW50LT5pczhCaXQoKTsKLSAgICAKLSAgICAvLyBUaGVyZSBhcmUg
NCBjYXNlczoKLSAgICAvLyAxLiBUaGlzIGFuZCByZXBsYWNlbWVudCBhcmUgYm90aCA4IGJpdC4K
LSAgICAvLyAyLiBUaGlzIGFuZCByZXBsYWNlbWVudCBhcmUgYm90aCAxNiBiaXQuCi0gICAgLy8g
My4gVGhpcyBpcyA4IGJpdCBhbmQgcmVwbGFjZW1lbnQgaXMgMTYgYml0LgotICAgIC8vIDQuIFRo
aXMgaXMgMTYgYml0IGFuZCByZXBsYWNlbWVudCBpcyA4IGJpdC4KLSAgICBpZiAoc3JjSXM4Qml0
ICYmIHJlcGxhY2VtZW50SXM4Qml0KSB7Ci0gICAgICAgIC8vIENhc2UgMQorCisgICAgaWYgKGlz
OEJpdCgpKSB7CiAgICAgICAgIExDaGFyKiBkYXRhOwogICAgICAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CiAKQEAgLTE0
MjksNyArMTQzMSw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFj
ZShVQ2hhciBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsYWNlbWVuCiAgICAgICAgICAgICBzcmNT
ZWdtZW50TGVuZ3RoID0gc3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKICAgICAgICAg
ICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGE4ICsgc3JjU2VnbWVudFN0YXJ0LCBz
cmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7CiAgICAgICAgICAgICBkc3RPZmZzZXQg
Kz0gc3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0
LCByZXBsYWNlbWVudC0+bV9kYXRhOCwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7Cisg
ICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQsIHJlcFN0ckxl
bmd0aCAqIHNpemVvZihMQ2hhcikpOwogICAgICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxl
bmd0aDsKICAgICAgICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyAxOwog
ICAgICAgICB9CkBAIC0xNDQ3LDM2ICsxNDQ5LDgzIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsYWNlbWVu
CiAKICAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRT
dGFydCkpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdt
ZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OworICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNl
dCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2Yo
VUNoYXIpKTsKKworICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcFN0ckxlbmd0aDsgaSsrKQorICAgICAgICAg
ICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IHJlcGxhY2VtZW50W2ldOworCisgICAgICAgIGRzdE9m
ZnNldCArPSByZXBTdHJMZW5ndGg7CisgICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21l
bnRFbmQgKyAxOworICAgIH0KKworICAgIHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0aCAtIHNy
Y1NlZ21lbnRTdGFydDsKKyAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBz
cmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKworICAg
IEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0aCgp
KTsKKworICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0IFVDaGFyKiBy
ZXBsYWNlbWVudCwgdW5zaWduZWQgcmVwU3RyTGVuZ3RoKQoreworICAgIGlmICghcmVwbGFjZW1l
bnQpCisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgc2l6ZV90IHNyY1NlZ21lbnRTdGFydCA9
IDA7CisgICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7CisKKyAgICAvLyBDb3VudCB0aGUgbWF0
Y2hlcy4KKyAgICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9IGZpbmQocGF0dGVybiwgc3JjU2Vn
bWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgKyttYXRjaENvdW50OworICAgICAg
ICArK3NyY1NlZ21lbnRTdGFydDsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBoYXZlIDAgbWF0Y2hl
cyB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IG1vcmUgd29yay4KKyAgICBpZiAoIW1hdGNo
Q291bnQpCisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgaWYgKHJlcFN0ckxlbmd0aCAmJiBt
YXRjaENvdW50ID4gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIHJlcFN0ckxlbmd0
aCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIHVuc2lnbmVkIHJlcGxhY2VTaXplID0gbWF0Y2hD
b3VudCAqIHJlcFN0ckxlbmd0aDsKKyAgICB1bnNpZ25lZCBuZXdTaXplID0gbV9sZW5ndGggLSBt
YXRjaENvdW50OworICAgIGlmIChuZXdTaXplID49IChudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpIC0gcmVwbGFjZVNpemUpKQorICAgICAgICBDUkFTSCgpOworCisgICAgbmV3U2l6ZSAr
PSByZXBsYWNlU2l6ZTsKKworICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEuCisgICAgc2l6
ZV90IHNyY1NlZ21lbnRFbmQ7CisgICAgdW5zaWduZWQgc3JjU2VnbWVudExlbmd0aDsKKyAgICBz
cmNTZWdtZW50U3RhcnQgPSAwOworICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9IDA7CisgICAgYm9v
bCBzcmNJczhCaXQgPSBpczhCaXQoKTsKKworICAgIFVDaGFyKiBkYXRhOworICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsK
KworICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0
YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21l
bnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7CiAgICAgICAgIGlmIChzcmNJczhCaXQpIHsKLSAgICAg
ICAgICAgIC8vIENhc2UgMy4KICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
cmNTZWdtZW50TGVuZ3RoOyBpKyspCiAgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0
XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBDYXNlcyAyICYgNC4KKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtZW1j
cHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21l
bnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgfQorCiAgICAgICAgIGRzdE9mZnNl
dCArPSBzcmNTZWdtZW50TGVuZ3RoOwotICAgICAgICBpZiAocmVwbGFjZW1lbnRJczhCaXQpIHsK
LSAgICAgICAgICAgIC8vIENhc2UgNC4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZXBTdHJMZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBkYXRhW2kgKyBkc3RPZmZz
ZXRdID0gcmVwbGFjZW1lbnQtPm1fZGF0YThbaV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBDYXNlcyAyICYgMy4KLSAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0
LCByZXBsYWNlbWVudC0+bV9kYXRhMTYsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwot
ICAgICAgICB9CisgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudCwg
cmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisKICAgICAgICAgZHN0T2Zmc2V0ICs9IHJl
cFN0ckxlbmd0aDsKICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7
CiAgICAgfQogCiAgICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0
YXJ0OwogICAgIGlmIChzcmNJczhCaXQpIHsKLSAgICAgICAgLy8gQ2FzZSAzLgogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgaSsrKQogICAgICAgICAg
ICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQ2FzZXMgMiAmIDQuCisgICAgfSBlbHNlCiAgICAgICAg
IG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21lbnRTdGFydCwgc3Jj
U2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwotICAgIH0KIAogICAgIEFTU0VSVChkc3RP
ZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0aCgpKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ0ltcGwuaAppbmRleCBlYjQ2NjJjLi41MzEwNGY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuaApAQCAtNzA5LDYgKzcwOSw5IEBAIHB1YmxpYzoKIAogICAgIFdURl9FWFBPUlRf
U1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIsIFVDaGFyKTsK
ICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXBsYWNl
KFVDaGFyLCBTdHJpbmdJbXBsKik7CisgICAgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IHJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgY2hhciogcmVwbGFjZW1lbnQsIHVu
c2lnbmVkIHJlcGxhY2VtZW50TGVuZ3RoKSB7IHJldHVybiByZXBsYWNlKHBhdHRlcm4sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihyZXBsYWNlbWVudCksIHJlcGxhY2VtZW50TGVuZ3Ro
KTsgfQorICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJl
cGxhY2UoVUNoYXIsIGNvbnN0IExDaGFyKiwgdW5zaWduZWQgcmVwbGFjZW1lbnRMZW5ndGgpOwor
ICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShVQ2hhciwgY29uc3QgVUNoYXIqLCB1
bnNpZ25lZCByZXBsYWNlbWVudExlbmd0aCk7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopOwog
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2Uo
dW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwgU3RyaW5nSW1wbCopOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9X
VEZTdHJpbmcuaAppbmRleCA2MjRlYjU0Li4xMjhlNDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmgKQEAgLTMwNyw2ICszMDcsOSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nJiByZXBsYWNlKGNvbnN0
IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1w
bC0+cmVwbGFjZShhLmltcGwoKSwgYi5pbXBsKCkpOyByZXR1cm4gKnRoaXM7IH0KICAgICBTdHJp
bmcmIHJlcGxhY2UodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwgY29uc3QgU3RyaW5nJiBi
KSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+cmVwbGFjZShpbmRleCwgbGVuLCBiLmlt
cGwoKSk7IHJldHVybiAqdGhpczsgfQogCisgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVy
c0NvdW50PgorICAgIEFMV0FZU19JTkxJTkUgU3RyaW5nJiByZXBsYWNlV2l0aExpdGVyYWwoVUNo
YXIgYSwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIHsgaWYgKG1f
aW1wbCkgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKGEsIGNoYXJhY3RlcnMsIGNoYXJhY3RlcnND
b3VudCAtIDEpOyByZXR1cm4gKnRoaXM7IH0KKwogICAgIHZvaWQgbWFrZUxvd2VyKCkgeyBpZiAo
bV9pbXBsKSBtX2ltcGwgPSBtX2ltcGwtPmxvd2VyKCk7IH0KICAgICB2b2lkIG1ha2VVcHBlcigp
IHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT51cHBlcigpOyB9CiAgICAgdm9pZCBmaWxs
KFVDaGFyIGMpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT5maWxsKGMpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggNDcxMGRlOC4uZGQwNDI5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisy
MDEyLTExLTA2ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+
CisKKyAgICAgICAgW1dURl0gQWRkIHJlcGxhY2VXaXRoTGl0ZXJhbCgpIG1ldGhvZCB0byBXVEY6
OlN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAxMjU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U3Vic3RpdHV0ZSBTdHJpbmc6OnJlcGxhY2UoKSBjYWxscyBieSBTdHJpbmc6OnJlcGxhY2VXaXRo
TGl0ZXJhbCgpIHdoZXJlCisgICAgICAgIGFkZXF1YXRlLCBmb3IgZWZmaWNpZW5jeS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGRvbS9O
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNob3dOb2RlKToKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6
ZXh0cmFjdFRleHRTdHlsZXMpOgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVS
TEF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpzZXRTZWFyY2gpOgorICAgICAg
ICAqIGxvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRN
YWlsdG9Qb3N0Rm9ybURhdGFUb1VSTCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Byb3h5UmVzb2x2ZXJTb3VwLmNwcDoKKyAgICAgICAgKHNvdXBQcm94eVJlc29sdmVyV2tTZXRQ
cm9wZXJ0eSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VVUkwpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNob3dCb3gpOgorICAgICAgICAqIHht
bC9YU0xUUHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybVRleHRTdHJp
bmdUb1hIVE1MRG9jdW1lbnRTdHJpbmcpOgorCiAyMDEyLTExLTA1ICBLZWlzaGkgSGF0dG9yaSAg
PGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIEludHJvZHVjZSBEYXkgY2xhc3MgdG8gY2Fs
ZW5kYXIgcGlja2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMDllYjk2NS4uMmRjY2EyNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcApAQCAtMjEwNSw4ICsyMTA1LDggQEAgdm9pZCBOb2RlOjpzaG93Tm9kZShjb25z
dCBjaGFyKiBwcmVmaXgpIGNvbnN0CiAgICAgICAgIHByZWZpeCA9ICIiOwogICAgIGlmIChpc1Rl
eHROb2RlKCkpIHsKICAgICAgICAgU3RyaW5nIHZhbHVlID0gbm9kZVZhbHVlKCk7Ci0gICAgICAg
IHZhbHVlLnJlcGxhY2UoJ1xcJywgIlxcXFwiKTsKLSAgICAgICAgdmFsdWUucmVwbGFjZSgnXG4n
LCAiXFxuIik7CisgICAgICAgIHZhbHVlLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXFwnLCAiXFxcXCIp
OworICAgICAgICB2YWx1ZS5yZXBsYWNlV2l0aExpdGVyYWwoJ1xuJywgIlxcbiIpOwogICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcdCVwIFwiJXNcIlxuIiwgcHJlZml4LCBub2RlTmFtZSgp
LnV0ZjgoKS5kYXRhKCksIHRoaXMsIHZhbHVlLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYXR0cnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmdTdHlsZS5jcHAKaW5kZXggMDM3M2JiYS4uOTYyOWY2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtMTQyNyw3ICsxNDI3LDcgQEAgdm9pZCBTdHlsZUNoYW5n
ZTo6ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVByb3BlcnR5U2V0
KiBzdHlsZSwKIAogICAgIG1fYXBwbHlGb250RmFjZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVl
KENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CiAgICAgLy8gUmVtb3ZlIHNpbmdsZSBxdW90ZXMgZm9y
IE91dGxvb2sgMjAwNyBjb21wYXRpYmlsaXR5LiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc5NDQ4Ci0gICAgbV9hcHBseUZvbnRGYWNlLnJlcGxhY2UoJ1wnJywg
IiIpOworICAgIG1fYXBwbHlGb250RmFjZS5yZXBsYWNlV2l0aExpdGVyYWwoJ1wnJywgIiIpOwog
ICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwogCiAgICAg
aWYgKFJlZlB0cjxDU1NWYWx1ZT4gZm9udFNpemUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUZvbnRTaXplKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1
cEFjY3VtdWxhdG9yLmNwcAppbmRleCBiMjdkNjVlLi5iZWI4MzJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcApAQCAtMjE2LDcgKzIxNiw3IEBAIHZv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFN0cmlu
Z0J1aWxkZXImIHJlc3VsdCwgY29uCiAgICAgICAgIC8vIG1pbmltYWwgZXNjYXBpbmcgZm9yIGph
dmFzY3JpcHQgdXJscwogICAgICAgICBpZiAoc3RyaXBwZWRVUkxTdHJpbmcuY29udGFpbnMoJyIn
KSkgewogICAgICAgICAgICAgaWYgKHN0cmlwcGVkVVJMU3RyaW5nLmNvbnRhaW5zKCdcJycpKQot
ICAgICAgICAgICAgICAgIHN0cmlwcGVkVVJMU3RyaW5nLnJlcGxhY2UoJyInLCAiJnF1b3Q7Iik7
CisgICAgICAgICAgICAgICAgc3RyaXBwZWRVUkxTdHJpbmcucmVwbGFjZVdpdGhMaXRlcmFsKCci
JywgIiZxdW90OyIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHF1b3RlQ2hh
ciA9ICdcJyc7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVu
dC5jcHAKaW5kZXggN2I3NzdiZS4uYTM2OTliYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QW5jaG9yRWxlbWVudC5jcHAKQEAgLTQ2Myw3ICs0NjMsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVt
ZW50OjpzZXRTZWFyY2goY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBLVVJMIHVybCA9IGhyZWYo
KTsKICAgICBTdHJpbmcgbmV3U2VhcmNoID0gKHZhbHVlWzBdID09ICc/JykgPyB2YWx1ZS5zdWJz
dHJpbmcoMSkgOiB2YWx1ZTsKICAgICAvLyBNYWtlIHN1cmUgdGhhdCAnIycgaW4gdGhlIHF1ZXJ5
IGRvZXMgbm90IGxlYWsgdG8gdGhlIGhhc2guCi0gICAgdXJsLnNldFF1ZXJ5KG5ld1NlYXJjaC5y
ZXBsYWNlKCcjJywgIiUyMyIpKTsKKyAgICB1cmwuc2V0UXVlcnkobmV3U2VhcmNoLnJlcGxhY2VX
aXRoTGl0ZXJhbCgnIycsICIlMjMiKSk7CiAKICAgICBzZXRIcmVmKHVybC5zdHJpbmcoKSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAppbmRleCBmMTgwMGI3Li41
ZDQwZTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKQEAgLTY3
LDEzICs2NywxMyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRNYWlsdG9Qb3N0Rm9ybURhdGFUb1VSTChL
VVJMJiB1cmwsIGNvbnN0IEZvcm1EYXRhJiBkYXRhLCBjb25zdAogCiAgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKGVuY29kaW5nVHlwZSwgInRleHQvcGxhaW4iKSkgewogICAgICAgICAvLyBDb252
ZW50aW9uIHNlZW1zIHRvIGJlIHRvIGRlY29kZSwgYW5kIHMvJi9cclxuLy4gQWxzbywgc3BhY2Vz
IGFyZSBlbmNvZGVkIGFzICUyMC4KLSAgICAgICAgYm9keSA9IGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyhib2R5LnJlcGxhY2UoJyYnLCAiXHJcbiIpLnJlcGxhY2UoJysnLCAnICcpICsgIlxyXG4i
KTsKKyAgICAgICAgYm9keSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhib2R5LnJlcGxhY2VX
aXRoTGl0ZXJhbCgnJicsICJcclxuIikucmVwbGFjZSgnKycsICcgJykgKyAiXHJcbiIpOwogICAg
IH0KIAogICAgIFZlY3RvcjxjaGFyPiBib2R5RGF0YTsKICAgICBib2R5RGF0YS5hcHBlbmQoImJv
ZHk9IiwgNSk7CiAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKGJv
ZHlEYXRhLCBib2R5LnV0ZjgoKSk7Ci0gICAgYm9keSA9IFN0cmluZyhib2R5RGF0YS5kYXRhKCks
IGJvZHlEYXRhLnNpemUoKSkucmVwbGFjZSgnKycsICIlMjAiKTsKKyAgICBib2R5ID0gU3RyaW5n
KGJvZHlEYXRhLmRhdGEoKSwgYm9keURhdGEuc2l6ZSgpKS5yZXBsYWNlV2l0aExpdGVyYWwoJysn
LCAiJTIwIik7CiAKICAgICBTdHJpbmcgcXVlcnkgPSB1cmwucXVlcnkoKTsKICAgICBpZiAoIXF1
ZXJ5LmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9Qcm94eVJlc29sdmVyU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUHJveHlSZXNvbHZlclNvdXAuY3BwCmluZGV4IDZmNmVkN2IuLjJmMzUwZmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Qcm94eVJl
c29sdmVyU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Byb3h5UmVzb2x2ZXJTb3VwLmNwcApAQCAtODQsNyArODQsNyBAQCBzdGF0aWMgdm9pZCBzb3Vw
UHJveHlSZXNvbHZlcldrU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCB1aW50IHByb3BJRCwg
Y29uc3QgRwogICAgIGNhc2UgUFJPUF9OT19QUk9YWToKICAgICAgICAgcHJpdi0+bm9Qcm94eSA9
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSk7CiAgICAgICAgIHByaXYtPnByb3h5RXhjZXB0aW9u
cy5jbGVhcigpOwotICAgICAgICBTdHJpbmc6OmZyb21VVEY4KHByaXYtPm5vUHJveHkuZGF0YSgp
KS5yZXBsYWNlKCcgJywgIiIpLnNwbGl0KCcsJywgcHJpdi0+cHJveHlFeGNlcHRpb25zKTsKKyAg
ICAgICAgU3RyaW5nOjpmcm9tVVRGOChwcml2LT5ub1Byb3h5LmRhdGEoKSkucmVwbGFjZVdpdGhM
aXRlcmFsKCcgJywgIiIpLnNwbGl0KCcsJywgcHJpdi0+cHJveHlFeGNlcHRpb25zKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBwc3BlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5WaWV3LmNwcAppbmRleCBmN2FkMDE4Li4wNDY2ODQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKQEAgLTU0OCw4ICs1NDgsOCBAQCBzdGF0aWMgS1VSTCBtYWtlVVJMKGNv
bnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IGNoYXIqIHJlbGF0aXZlVVJMU3RyaW5nKQogICAgIFN0
cmluZyB1cmxTdHJpbmcgPSByZWxhdGl2ZVVSTFN0cmluZzsKIAogICAgIC8vIFN0cmlwIHJldHVy
biBjaGFyYWN0ZXJzLgotICAgIHVybFN0cmluZy5yZXBsYWNlKCdcbicsICIiKTsKLSAgICB1cmxT
dHJpbmcucmVwbGFjZSgnXHInLCAiIik7CisgICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJh
bCgnXG4nLCAiIik7CisgICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXHInLCAiIik7
CiAKICAgICByZXR1cm4gS1VSTChiYXNlVVJMLCB1cmxTdHJpbmcpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGNhMWZlZjMuLjU2YWI3NmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTE0MzYsOCAr
MTQzNiw4IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6c2hvd0JveChpbnQgcHJpbnRlZENoYXJhY3Rl
cnMpIGNvbnN0CiAgICAgY29uc3QgUmVuZGVyVGV4dCogb2JqID0gdG9SZW5kZXJUZXh0KHJlbmRl
cmVyKCkpOwogICAgIFN0cmluZyB2YWx1ZSA9IG9iai0+dGV4dCgpOwogICAgIHZhbHVlID0gdmFs
dWUuc3Vic3RyaW5nKHN0YXJ0KCksIGxlbigpKTsKLSAgICB2YWx1ZS5yZXBsYWNlKCdcXCcsICJc
XFxcIik7Ci0gICAgdmFsdWUucmVwbGFjZSgnXG4nLCAiXFxuIik7CisgICAgdmFsdWUucmVwbGFj
ZVdpdGhMaXRlcmFsKCdcXCcsICJcXFxcIik7CisgICAgdmFsdWUucmVwbGFjZVdpdGhMaXRlcmFs
KCdcbicsICJcXG4iKTsKICAgICBwcmludGVkQ2hhcmFjdGVycyArPSBmcHJpbnRmKHN0ZGVyciwg
IiVzXHQlcCIsIGJveE5hbWUoKSwgdGhpcyk7CiAgICAgZm9yICg7IHByaW50ZWRDaGFyYWN0ZXJz
IDwgc2hvd1RyZWVDaGFyYWN0ZXJPZmZzZXQ7IHByaW50ZWRDaGFyYWN0ZXJzKyspCiAgICAgICAg
IGZwdXRjKCcgJywgc3RkZXJyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xU
UHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAppbmRl
eCA2Y2Y3OTM3Li4yMWVmZjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFBy
b2Nlc3Nvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCkBA
IC00OSw4ICs0OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBpbmxpbmUgdm9pZCB0
cmFuc2Zvcm1UZXh0U3RyaW5nVG9YSFRNTERvY3VtZW50U3RyaW5nKFN0cmluZyYgdGV4dCkKIHsK
ICAgICAvLyBNb2RpZnkgdGhlIG91dHB1dCBzbyB0aGF0IGl0IGlzIGEgd2VsbC1mb3JtZWQgWEhU
TUwgZG9jdW1lbnQgd2l0aCBhIDxwcmU+IHRhZyBlbmNsb3NpbmcgdGhlIHRleHQuCi0gICAgdGV4
dC5yZXBsYWNlKCcmJywgIiZhbXA7Iik7Ci0gICAgdGV4dC5yZXBsYWNlKCc8JywgIiZsdDsiKTsK
KyAgICB0ZXh0LnJlcGxhY2VXaXRoTGl0ZXJhbCgnJicsICImYW1wOyIpOworICAgIHRleHQucmVw
bGFjZVdpdGhMaXRlcmFsKCc8JywgIiZsdDsiKTsKICAgICB0ZXh0ID0gIjw/eG1sIHZlcnNpb249
XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuIgogICAgICAgICAiPCFET0NUWVBFIGh0bWwg
UFVCTElDIFwiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU5cIiBcImh0dHA6Ly93d3cu
dzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGRcIj5cbiIKICAgICAgICAgIjxo
dG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPlxuIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggODExODU3Yy4uMjRmOTQ1YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTEtMDYgIENocmlzdG9waGUg
RHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KKworICAgICAgICBbV1RGXSBBZGQg
cmVwbGFjZVdpdGhMaXRlcmFsKCkgbWV0aG9kIHRvIFdURjo6U3RyaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEyNTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdWJzdGl0dXRlIFN0cmluZzo6cmVw
bGFjZSgpIGNhbGxzIGJ5IFN0cmluZzo6cmVwbGFjZVdpdGhMaXRlcmFsKCkgd2hlcmUKKyAgICAg
ICAgYWRlcXVhdGUsIGZvciBlZmZpY2llbmN5LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
U2VsZWN0UG9wdXBDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0UG9wdXBDbGll
bnQ6OmdlbmVyYXRlSFRNTCk6CisKIDIwMTItMTEtMDUgIExpYW5naHVpIENoZW4gIDxsaWFjaGVu
QHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIERvIG5vdCBzaG93IGVycm9yIHBhZ2Ug
Zm9yIG1haW4gbG9hZHMgZGVuaWVkIGJ5IGNsaWVudCBhcHBsaWNhdGlvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9TZWxlY3RQb3B1
cENsaWVudC5jcHAKaW5kZXggOTlkMWEwNi4uYjM3YjVlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvU2VsZWN0UG9wdXBDbGll
bnQuY3BwCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgU2VsZWN0UG9wdXBDbGllbnQ6OmdlbmVyYXRl
SFRNTChib29sIG11bHRpcGxlLCBpbnQgc2l6ZSwgY29uc3QgU2NvcGVBcnJheTxCCiAgICAgLy8g
QWRkIGxhYmVscy4KICAgICBzb3VyY2UuYXBwZW5kKCdbJyk7CiAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgc291cmNlLmFwcGVuZCgiJyIgKyBTdHJpbmcobGFi
ZWxzW2ldKS5yZXBsYWNlKCdcXCcsICJcXFxcIikucmVwbGFjZSgnXCcnLCAiXFwnIikgKyAiJyIp
OworICAgICAgICBzb3VyY2UuYXBwZW5kKCInIiArIFN0cmluZyhsYWJlbHNbaV0pLnJlcGxhY2VX
aXRoTGl0ZXJhbCgnXFwnLCAiXFxcXCIpLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXCcnLCAiXFwnIikg
KyAiJyIpOwogICAgICAgICAvLyBEb24ndCBhcHBlbmQgJywnIHRvIGxhc3QgZWxlbWVudC4KICAg
ICAgICAgaWYgKGkgIT0gc2l6ZSAtIDEpCiAgICAgICAgICAgICBzb3VyY2UuYXBwZW5kTGl0ZXJh
bCgiLCAiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCA2NmFiYjc5Li4yOWQ4MzYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMTItMTEtMDYgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1
bWV6QGludGVsLmNvbT4KKworICAgICAgICBbV1RGXSBBZGQgcmVwbGFjZVdpdGhMaXRlcmFsKCkg
bWV0aG9kIHRvIFdURjo6U3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDEyNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBTdWJzdGl0dXRlIFN0cmluZzo6cmVwbGFjZSgpIGNhbGxzIGJ5IFN0cmlu
Zzo6cmVwbGFjZVdpdGhMaXRlcmFsKCkgd2hlcmUKKyAgICAgICAgYWRlcXVhdGUsIGZvciBlZmZp
Y2llbmN5LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBl
QnJvd3NlckZ1bmNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6bWFrZVVSTFN0cmluZyk6CisKIDIw
MTItMTEtMDUgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBOZWVkIGEg
d2F5IHRvIHNlbmQgYW5kIHJlY2VpdmUgbWVzc2FnZXMgYmV0d2VlbiB0aGUgV0tXZWJQcm9jZXNz
UGx1Z0luIG9iamVjdCBhbmQgdGhlIGNsaWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJG
dW5jcy5jcHAKaW5kZXggNGEyYjUyZi4uNWRhNDNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVC
cm93c2VyRnVuY3MuY3BwCkBAIC0yNzMsOCArMjczLDggQEAgc3RhdGljIFN0cmluZyBtYWtlVVJM
U3RyaW5nKGNvbnN0IGNoYXIqIHVybCkKICAgICBTdHJpbmcgdXJsU3RyaW5nKHVybCk7CiAgICAg
CiAgICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3RlcnMuCi0gICAgdXJsU3RyaW5nLnJlcGxhY2Uo
J1xyJywgIiIpOwotICAgIHVybFN0cmluZy5yZXBsYWNlKCdcbicsICIiKTsKKyAgICB1cmxTdHJp
bmcucmVwbGFjZVdpdGhMaXRlcmFsKCdccicsICIiKTsKKyAgICB1cmxTdHJpbmcucmVwbGFjZVdp
dGhMaXRlcmFsKCdcbicsICIiKTsKIAogICAgIHJldHVybiB1cmxTdHJpbmc7CiB9CmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTRlNzA2OC4uM2Q2
NTJhNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIwIEBACisyMDEyLTExLTA2ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3Bo
ZS5kdW1lekBpbnRlbC5jb20+CisKKyAgICAgICAgW1dURl0gQWRkIHJlcGxhY2VXaXRoTGl0ZXJh
bCgpIG1ldGhvZCB0byBXVEY6OlN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAxMjU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIEFQSSB0ZXN0cyBmb3IgU3RyaW5nOjpyZXBsYWNlV2l0aExp
dGVyYWwoKSBhbmQgY29ycmVzcG9uZGluZworICAgICAgICBTdHJpbmdJbXBsIG1ldGhvZHMuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0OiBBZGQgV1RGU3RyaW5nIEFQ
SSB0ZXN0cyB0byBDTWFrZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJp
bmdJbXBsLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV1RGU3RyaW5n
LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDEyLTExLTA1ICBEaXJr
IFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIHdlYmtpdC1wYXRjaCBy
ZWJhc2VsaW5lKjogZml4IGhhbmRsaW5nIG9mIGxvY2FsIGZpbGUgdXJscwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Q01ha2VMaXN0cy50eHQKaW5kZXggYzRlNDI3ZS4uMTYzZWRjNyAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NN
YWtlTGlzdHMudHh0CkBAIC04NCw2ICs4NCw3IEBAIEFERF9FWEVDVVRBQkxFKHRlc3Rfd3RmCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1ZlY3Rvci5jcHAKICAgICAke1RFU1RX
RUJLSVRBUElfRElSfS9UZXN0cy9XVEYvVmVjdG9yQmFzaWMuY3BwCiAgICAgJHtURVNUV0VCS0lU
QVBJX0RJUn0vVGVzdHMvV1RGL1ZlY3RvclJldmVyc2UuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJ
X0RJUn0vVGVzdHMvV1RGL1dURlN0cmluZy5jcHAKICkKIAogVEFSR0VUX0xJTktfTElCUkFSSUVT
KHRlc3Rfd3RmICR7dGVzdF93dGZfTElCUkFSSUVTfSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAKaW5kZXggMjEzYTY1NS4uZGFkYzVmNiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAKQEAgLTI2LDYgKzI2LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkgewogCkBAIC02OCw0ICs2OSw1NCBAQCBURVNUKFdURiwgU3RyaW5nSW1wbEZyb21MaXRl
cmFsTG9vcDE2Qml0Q29udmVyc2lvbikKICAgICB9CiB9CiAKK1RFU1QoV1RGLCBTdHJpbmdJbXBs
UmVwbGFjZVdpdGhMaXRlcmFsKQoreworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiB0ZXN0U3RyaW5n
SW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCIxMjI0Iik7CisgICAgQVNTRVJU
X1RSVUUodGVzdFN0cmluZ0ltcGwtPmlzOEJpdCgpKTsKKworICAgIC8vIENhc2VzIGZvciA4Qml0
IHNvdXJjZS4KKyAgICB0ZXN0U3RyaW5nSW1wbCA9IHRlc3RTdHJpbmdJbXBsLT5yZXBsYWNlKCcy
Jywgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KDApLCAwKTsKKyAgICBBU1NFUlRfVFJVRShlcXVh
bCh0ZXN0U3RyaW5nSW1wbC5nZXQoKSwgIjEyMjQiKSk7CisKKyAgICB0ZXN0U3RyaW5nSW1wbCA9
IHRlc3RTdHJpbmdJbXBsLT5yZXBsYWNlKCcyJywgIiIsIDApOworICAgIEFTU0VSVF9UUlVFKGVx
dWFsKHRlc3RTdHJpbmdJbXBsLmdldCgpLCAiMTQiKSk7CisKKyAgICB0ZXN0U3RyaW5nSW1wbCA9
IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCIxMjI0Iik7CisgICAgQVNTRVJUX1RSVUUo
dGVzdFN0cmluZ0ltcGwtPmlzOEJpdCgpKTsKKworICAgIHRlc3RTdHJpbmdJbXBsID0gdGVzdFN0
cmluZ0ltcGwtPnJlcGxhY2UoJzMnLCAiTm90Rm91bmQiLCA4KTsKKyAgICBBU1NFUlRfVFJVRShl
cXVhbCh0ZXN0U3RyaW5nSW1wbC5nZXQoKSwgIjEyMjQiKSk7CisKKyAgICB0ZXN0U3RyaW5nSW1w
bCA9IHRlc3RTdHJpbmdJbXBsLT5yZXBsYWNlKCcyJywgIjMiLCAxKTsKKyAgICBBU1NFUlRfVFJV
RShlcXVhbCh0ZXN0U3RyaW5nSW1wbC5nZXQoKSwgIjEzMzQiKSk7CisKKyAgICB0ZXN0U3RyaW5n
SW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKCIxMjI0Iik7CisgICAgQVNTRVJU
X1RSVUUodGVzdFN0cmluZ0ltcGwtPmlzOEJpdCgpKTsKKyAgICB0ZXN0U3RyaW5nSW1wbCA9IHRl
c3RTdHJpbmdJbXBsLT5yZXBsYWNlKCcyJywgIjU1NSIsIDMpOworICAgIEFTU0VSVF9UUlVFKGVx
dWFsKHRlc3RTdHJpbmdJbXBsLmdldCgpLCAiMTU1NTU1NTQiKSk7CisKKyAgICAvLyBDYXNlcyBm
b3IgMTZCaXQgc291cmNlLgorICAgIFN0cmluZyB0ZXN0U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRG
OCgicsOpc3Vtw6kiKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdFN0cmluZy5pbXBsKCktPmlzOEJp
dCgpKTsKKworICAgIHRlc3RTdHJpbmdJbXBsID0gdGVzdFN0cmluZy5pbXBsKCktPnJlcGxhY2Uo
VUNoYXIoMHgwMEU5IC8qVSswMEU5IGlzICfDqScqLyksIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PigwKSwgMCk7CisgICAgQVNTRVJUX1RSVUUoZXF1YWwodGVzdFN0cmluZ0ltcGwuZ2V0KCksIFN0
cmluZzo6ZnJvbVVURjgoInLDqXN1bcOpIikuaW1wbCgpKSk7CisKKyAgICB0ZXN0U3RyaW5nSW1w
bCA9IHRlc3RTdHJpbmcuaW1wbCgpLT5yZXBsYWNlKCcyJywgIk5vdEZvdW5kIiwgOCk7CisgICAg
QVNTRVJUX1RSVUUoZXF1YWwodGVzdFN0cmluZ0ltcGwuZ2V0KCksIFN0cmluZzo6ZnJvbVVURjgo
InLDqXN1bcOpIikuaW1wbCgpKSk7CisKKyAgICB0ZXN0U3RyaW5nSW1wbCA9IHRlc3RTdHJpbmcu
aW1wbCgpLT5yZXBsYWNlKFVDaGFyKDB4MDBFOSAvKlUrMDBFOSBpcyAnw6knKi8pLCAiZSIsIDEp
OworICAgIEFTU0VSVF9UUlVFKGVxdWFsKHRlc3RTdHJpbmdJbXBsLmdldCgpLCAicmVzdW1lIikp
OworCisgICAgdGVzdFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoInLDqXN1bcOpIik7CisgICAg
QVNTRVJUX0ZBTFNFKHRlc3RTdHJpbmcuaW1wbCgpLT5pczhCaXQoKSk7CisgICAgdGVzdFN0cmlu
Z0ltcGwgPSB0ZXN0U3RyaW5nLmltcGwoKS0+cmVwbGFjZShVQ2hhcigweDAwRTkgLypVKzAwRTkg
aXMgJ8OpJyovKSwgIiIsIDApOworICAgIEFTU0VSVF9UUlVFKGVxdWFsKHRlc3RTdHJpbmdJbXBs
LmdldCgpLCAicnN1bSIpKTsKKworICAgIHRlc3RTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KCJy
w6lzdW3DqSIpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0U3RyaW5nLmltcGwoKS0+aXM4Qml0KCkp
OworICAgIHRlc3RTdHJpbmdJbXBsID0gdGVzdFN0cmluZy5pbXBsKCktPnJlcGxhY2UoVUNoYXIo
MHgwMEU5IC8qVSswMEU5IGlzICfDqScqLyksICI1NTUiLCAzKTsKKyAgICBBU1NFUlRfVFJVRShl
cXVhbCh0ZXN0U3RyaW5nSW1wbC5nZXQoKSwgInI1NTVzdW01NTUiKSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1dURlN0cmluZy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9XVEZT
dHJpbmcuY3BwCmluZGV4IDE1NTc3MmYuLjRhOTJjZDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1dURlN0cmluZy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvV1RGU3RyaW5nLmNwcApAQCAtMTE1LDcgKzExNSw0NSBAQCBURVNUKFdURiwg
U3RyaW5nTnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0UmVndWxhck51bWJlcnMpCiAgICAgdGVzdE51
bWJlclRvU3RyaW5nRUNNQVNjcmlwdChwaGksICIxLjYxODAzMzk4ODc0OTg5NSIpOwogfQogCi0K
K1RFU1QoV1RGLCBTdHJpbmdSZXBsYWNlV2l0aExpdGVyYWwpCit7CisgICAgLy8gQ2FzZXMgZm9y
IDhCaXQgc291cmNlLgorICAgIFN0cmluZyB0ZXN0U3RyaW5nID0gIjEyMjQiOworICAgIEFTU0VS
VF9UUlVFKHRlc3RTdHJpbmcuaXM4Qml0KCkpOworICAgIHRlc3RTdHJpbmcucmVwbGFjZVdpdGhM
aXRlcmFsKCcyJywgIiIpOworICAgIEFTU0VSVF9TVFJFUSgiMTQiLCB0ZXN0U3RyaW5nLnV0Zjgo
KS5kYXRhKCkpOworCisgICAgdGVzdFN0cmluZyA9ICIxMjI0IjsKKyAgICBBU1NFUlRfVFJVRSh0
ZXN0U3RyaW5nLmlzOEJpdCgpKTsKKyAgICB0ZXN0U3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgn
MicsICIzIik7CisgICAgQVNTRVJUX1NUUkVRKCIxMzM0IiwgdGVzdFN0cmluZy51dGY4KCkuZGF0
YSgpKTsKKworICAgIHRlc3RTdHJpbmcgPSAiMTIyNCI7CisgICAgQVNTRVJUX1RSVUUodGVzdFN0
cmluZy5pczhCaXQoKSk7CisgICAgdGVzdFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJzInLCAi
NTU1Iik7CisgICAgQVNTRVJUX1NUUkVRKCIxNTU1NTU1NCIsIHRlc3RTdHJpbmcudXRmOCgpLmRh
dGEoKSk7CisKKyAgICB0ZXN0U3RyaW5nID0gIjEyMjQiOworICAgIEFTU0VSVF9UUlVFKHRlc3RT
dHJpbmcuaXM4Qml0KCkpOworICAgIHRlc3RTdHJpbmcucmVwbGFjZVdpdGhMaXRlcmFsKCczJywg
Ik5vdEZvdW5kIik7CisgICAgQVNTRVJUX1NUUkVRKCIxMjI0IiwgdGVzdFN0cmluZy51dGY4KCku
ZGF0YSgpKTsKKworICAgIC8vIENhc2VzIGZvciAxNkJpdCBzb3VyY2UuCisgICAgdGVzdFN0cmlu
ZyA9IFN0cmluZzo6ZnJvbVVURjgoInLDqXN1bcOpIik7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3RT
dHJpbmcuaXM4Qml0KCkpOworICAgIHRlc3RTdHJpbmcucmVwbGFjZVdpdGhMaXRlcmFsKFVDaGFy
KDB4MDBFOSAvKlUrMDBFOSBpcyAnw6knKi8pLCAiZSIpOworICAgIEFTU0VSVF9TVFJFUSgicmVz
dW1lIiwgdGVzdFN0cmluZy51dGY4KCkuZGF0YSgpKTsKKworICAgIHRlc3RTdHJpbmcgPSBTdHJp
bmc6OmZyb21VVEY4KCJyw6lzdW3DqSIpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0U3RyaW5nLmlz
OEJpdCgpKTsKKyAgICB0ZXN0U3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbChVQ2hhcigweDAwRTkg
LypVKzAwRTkgaXMgJ8OpJyovKSwgIiIpOworICAgIEFTU0VSVF9TVFJFUSgicnN1bSIsIHRlc3RT
dHJpbmcudXRmOCgpLmRhdGEoKSk7CisKKyAgICB0ZXN0U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRG
OCgicsOpc3Vtw6kiKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdFN0cmluZy5pczhCaXQoKSk7Cisg
ICAgdGVzdFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJzMnLCAiTm90Rm91bmQiKTsKKyAgICBB
U1NFUlRfU1RSRVEoInLDqXN1bcOpIiwgdGVzdFN0cmluZy51dGY4KCkuZGF0YSgpKTsKK30KIAog
CiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172609</attachid>
            <date>2012-11-06 10:11:06 -0800</date>
            <delta_ts>2012-11-07 00:00:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>101257_replaceWithLiteral2.patch</filename>
            <type>text/plain</type>
            <size>25769</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNDQzOTdiNC4uZDYzZDQzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMi0xMS0wNiAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAg
IEFkZCByZXBsYWNlV2l0aExpdGVyYWwoKSBtZXRob2QgdG8gV1RGOjpTdHJpbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTI1NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCByZXBsYWNlV2l0aExp
dGVyYWwoKSBtZXRob2QgdG8gV1RGOjpTdHJpbmcgdGhhdCB0YWtlcworICAgICAgICByZXBsYWNl
bWVudCBzdHJpbmcgYXMgYSBsaXRlcmFsIHRvIGF2b2lkIHVzZWxlc3NseSBjb25zdHJ1Y3RpbmcK
KyAgICAgICAgYSBTdHJpbmcgb2JqZWN0LgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1w
bC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJlcGxhY2UpOgorICAgICAgICAoV1RG
KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OnJlcGxhY2UpOgorICAgICAgICAoU3RyaW5nSW1wbCk6CisgICAgICAgICogd3RmL3Rl
eHQvV1RGU3RyaW5nLmg6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmc6
OnJlcGxhY2VXaXRoTGl0ZXJhbCk6CisKIDIwMTItMTEtMDYgIExhc3psbyBHb21ib3MgIDxsLmdv
bWJvc0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBzZXR0aW5nIFRFWFRVUkVfTUFQ
UEVSX0dMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwIGIv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAppbmRleCAyZDA0YjFmLi40ZDdlZDVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKQEAgLTEzODIsMjEgKzEzODIsMzEgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4s
IFN0cmluZ0ltcGwqIHJlcGxhY2VtZW4KIHsKICAgICBpZiAoIXJlcGxhY2VtZW50KQogICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgCi0gICAgdW5zaWduZWQgcmVwU3RyTGVuZ3RoID0gcmVw
bGFjZW1lbnQtPmxlbmd0aCgpOworCisgICAgaWYgKHJlcGxhY2VtZW50LT5pczhCaXQoKSkKKyAg
ICAgICAgcmV0dXJuIHJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnQtPm1fZGF0YTgsIHJlcGxh
Y2VtZW50LT5sZW5ndGgoKSk7CisKKyAgICByZXR1cm4gcmVwbGFjZShwYXR0ZXJuLCByZXBsYWNl
bWVudC0+bV9kYXRhMTYsIHJlcGxhY2VtZW50LT5sZW5ndGgoKSk7Cit9CisKK1Bhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBjb25zdCBMQ2hh
ciogcmVwbGFjZW1lbnQsIHVuc2lnbmVkIHJlcFN0ckxlbmd0aCkKK3sKKyAgICBpZiAoIXJlcGxh
Y2VtZW50KQorICAgICAgICByZXR1cm4gdGhpczsKKwogICAgIHNpemVfdCBzcmNTZWdtZW50U3Rh
cnQgPSAwOwogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwotICAgIAorCiAgICAgLy8gQ291
bnQgdGhlIG1hdGNoZXMuCiAgICAgd2hpbGUgKChzcmNTZWdtZW50U3RhcnQgPSBmaW5kKHBhdHRl
cm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgICsrbWF0Y2hDb3Vu
dDsKICAgICAgICAgKytzcmNTZWdtZW50U3RhcnQ7CiAgICAgfQotICAgIAorCiAgICAgLy8gSWYg
d2UgaGF2ZSAwIG1hdGNoZXMgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueSBtb3JlIHdvcmsu
CiAgICAgaWYgKCFtYXRjaENvdW50KQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICAKKwogICAg
IGlmIChyZXBTdHJMZW5ndGggJiYgbWF0Y2hDb3VudCA+IG51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkgLyByZXBTdHJMZW5ndGgpCiAgICAgICAgIENSQVNIKCk7CiAKQEAgLTE0MTIsMTYg
KzE0MjIsOCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNo
YXIgcGF0dGVybiwgU3RyaW5nSW1wbCogcmVwbGFjZW1lbgogICAgIHVuc2lnbmVkIHNyY1NlZ21l
bnRMZW5ndGg7CiAgICAgc3JjU2VnbWVudFN0YXJ0ID0gMDsKICAgICB1bnNpZ25lZCBkc3RPZmZz
ZXQgPSAwOwotICAgIGJvb2wgc3JjSXM4Qml0ID0gaXM4Qml0KCk7Ci0gICAgYm9vbCByZXBsYWNl
bWVudElzOEJpdCA9IHJlcGxhY2VtZW50LT5pczhCaXQoKTsKLSAgICAKLSAgICAvLyBUaGVyZSBh
cmUgNCBjYXNlczoKLSAgICAvLyAxLiBUaGlzIGFuZCByZXBsYWNlbWVudCBhcmUgYm90aCA4IGJp
dC4KLSAgICAvLyAyLiBUaGlzIGFuZCByZXBsYWNlbWVudCBhcmUgYm90aCAxNiBiaXQuCi0gICAg
Ly8gMy4gVGhpcyBpcyA4IGJpdCBhbmQgcmVwbGFjZW1lbnQgaXMgMTYgYml0LgotICAgIC8vIDQu
IFRoaXMgaXMgMTYgYml0IGFuZCByZXBsYWNlbWVudCBpcyA4IGJpdC4KLSAgICBpZiAoc3JjSXM4
Qml0ICYmIHJlcGxhY2VtZW50SXM4Qml0KSB7Ci0gICAgICAgIC8vIENhc2UgMQorCisgICAgaWYg
KGlzOEJpdCgpKSB7CiAgICAgICAgIExDaGFyKiBkYXRhOwogICAgICAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CiAKQEAg
LTE0MjksNyArMTQzMSw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVw
bGFjZShVQ2hhciBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsYWNlbWVuCiAgICAgICAgICAgICBz
cmNTZWdtZW50TGVuZ3RoID0gc3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKICAgICAg
ICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGE4ICsgc3JjU2VnbWVudFN0YXJ0
LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7CiAgICAgICAgICAgICBkc3RPZmZz
ZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zm
c2V0LCByZXBsYWNlbWVudC0+bV9kYXRhOCwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7
CisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQsIHJlcFN0
ckxlbmd0aCAqIHNpemVvZihMQ2hhcikpOwogICAgICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0
ckxlbmd0aDsKICAgICAgICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyAx
OwogICAgICAgICB9CkBAIC0xNDQ3LDM2ICsxNDQ5LDgzIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsYWNl
bWVuCiAKICAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21l
bnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNT
ZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OworICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9m
ZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXpl
b2YoVUNoYXIpKTsKKworICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcFN0ckxlbmd0aDsgaSsrKQorICAgICAg
ICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IHJlcGxhY2VtZW50W2ldOworCisgICAgICAgIGRz
dE9mZnNldCArPSByZXBTdHJMZW5ndGg7CisgICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1Nl
Z21lbnRFbmQgKyAxOworICAgIH0KKworICAgIHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0aCAt
IHNyY1NlZ21lbnRTdGFydDsKKyAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYg
KyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKwor
ICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0
aCgpKTsKKworICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0IFVDaGFy
KiByZXBsYWNlbWVudCwgdW5zaWduZWQgcmVwU3RyTGVuZ3RoKQoreworICAgIGlmICghcmVwbGFj
ZW1lbnQpCisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgc2l6ZV90IHNyY1NlZ21lbnRTdGFy
dCA9IDA7CisgICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7CisKKyAgICAvLyBDb3VudCB0aGUg
bWF0Y2hlcy4KKyAgICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9IGZpbmQocGF0dGVybiwgc3Jj
U2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgKyttYXRjaENvdW50OworICAg
ICAgICArK3NyY1NlZ21lbnRTdGFydDsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBoYXZlIDAgbWF0
Y2hlcyB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IG1vcmUgd29yay4KKyAgICBpZiAoIW1h
dGNoQ291bnQpCisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgaWYgKHJlcFN0ckxlbmd0aCAm
JiBtYXRjaENvdW50ID4gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIHJlcFN0ckxl
bmd0aCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIHVuc2lnbmVkIHJlcGxhY2VTaXplID0gbWF0
Y2hDb3VudCAqIHJlcFN0ckxlbmd0aDsKKyAgICB1bnNpZ25lZCBuZXdTaXplID0gbV9sZW5ndGgg
LSBtYXRjaENvdW50OworICAgIGlmIChuZXdTaXplID49IChudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpIC0gcmVwbGFjZVNpemUpKQorICAgICAgICBDUkFTSCgpOworCisgICAgbmV3U2l6
ZSArPSByZXBsYWNlU2l6ZTsKKworICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEuCisgICAg
c2l6ZV90IHNyY1NlZ21lbnRFbmQ7CisgICAgdW5zaWduZWQgc3JjU2VnbWVudExlbmd0aDsKKyAg
ICBzcmNTZWdtZW50U3RhcnQgPSAwOworICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9IDA7CisgICAg
Ym9vbCBzcmNJczhCaXQgPSBpczhCaXQoKTsKKworICAgIFVDaGFyKiBkYXRhOworICAgIFJlZlB0
cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRh
KTsKKworICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVu
dFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1Nl
Z21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7CiAgICAgICAgIGlmIChzcmNJczhCaXQpIHsKLSAg
ICAgICAgICAgIC8vIENhc2UgMy4KICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzcmNTZWdtZW50TGVuZ3RoOyBpKyspCiAgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zm
c2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBDYXNlcyAyICYgNC4KKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBt
ZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1Nl
Z21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgfQorCiAgICAgICAgIGRzdE9m
ZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOwotICAgICAgICBpZiAocmVwbGFjZW1lbnRJczhCaXQp
IHsKLSAgICAgICAgICAgIC8vIENhc2UgNC4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCByZXBTdHJMZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBkYXRhW2kgKyBkc3RP
ZmZzZXRdID0gcmVwbGFjZW1lbnQtPm1fZGF0YThbaV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBDYXNlcyAyICYgMy4KLSAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zm
c2V0LCByZXBsYWNlbWVudC0+bV9kYXRhMTYsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikp
OwotICAgICAgICB9CisgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVu
dCwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisKICAgICAgICAgZHN0T2Zmc2V0ICs9
IHJlcFN0ckxlbmd0aDsKICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCAr
IDE7CiAgICAgfQogCiAgICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVu
dFN0YXJ0OwogICAgIGlmIChzcmNJczhCaXQpIHsKLSAgICAgICAgLy8gQ2FzZSAzLgogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgaSsrKQogICAgICAg
ICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQ2FzZXMgMiAmIDQuCisgICAgfSBlbHNlCiAgICAg
ICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21lbnRTdGFydCwg
c3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwotICAgIH0KIAogICAgIEFTU0VSVChk
c3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0aCgpKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCBlYjQ2NjJjLi41MzEwNGY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0ltcGwuaApAQCAtNzA5LDYgKzcwOSw5IEBAIHB1YmxpYzoKIAogICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIsIFVDaGFy
KTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXBs
YWNlKFVDaGFyLCBTdHJpbmdJbXBsKik7CisgICAgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgY2hhciogcmVwbGFjZW1lbnQs
IHVuc2lnbmVkIHJlcGxhY2VtZW50TGVuZ3RoKSB7IHJldHVybiByZXBsYWNlKHBhdHRlcm4sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihyZXBsYWNlbWVudCksIHJlcGxhY2VtZW50TGVu
Z3RoKTsgfQorICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IHJlcGxhY2UoVUNoYXIsIGNvbnN0IExDaGFyKiwgdW5zaWduZWQgcmVwbGFjZW1lbnRMZW5ndGgp
OworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShVQ2hhciwgY29uc3QgVUNoYXIq
LCB1bnNpZ25lZCByZXBsYWNlbWVudExlbmd0aCk7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCop
OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxh
Y2UodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwgU3RyaW5nSW1wbCopOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4
dC9XVEZTdHJpbmcuaAppbmRleCA2MjRlYjU0Li4xMjhlNDUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmgKQEAgLTMwNyw2ICszMDcsOSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nJiByZXBsYWNlKGNv
bnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1f
aW1wbC0+cmVwbGFjZShhLmltcGwoKSwgYi5pbXBsKCkpOyByZXR1cm4gKnRoaXM7IH0KICAgICBT
dHJpbmcmIHJlcGxhY2UodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwgY29uc3QgU3RyaW5n
JiBiKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+cmVwbGFjZShpbmRleCwgbGVuLCBi
LmltcGwoKSk7IHJldHVybiAqdGhpczsgfQogCisgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFj
dGVyc0NvdW50PgorICAgIEFMV0FZU19JTkxJTkUgU3RyaW5nJiByZXBsYWNlV2l0aExpdGVyYWwo
VUNoYXIgYSwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIHsgaWYg
KG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKGEsIGNoYXJhY3RlcnMsIGNoYXJhY3Rl
cnNDb3VudCAtIDEpOyByZXR1cm4gKnRoaXM7IH0KKwogICAgIHZvaWQgbWFrZUxvd2VyKCkgeyBp
ZiAobV9pbXBsKSBtX2ltcGwgPSBtX2ltcGwtPmxvd2VyKCk7IH0KICAgICB2b2lkIG1ha2VVcHBl
cigpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT51cHBlcigpOyB9CiAgICAgdm9pZCBm
aWxsKFVDaGFyIGMpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT5maWxsKGMpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggZjZhNjJjNS4uNWUyOWZkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBA
CisyMDEyLTExLTA2ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5j
b20+CisKKyAgICAgICAgQWRkIHJlcGxhY2VXaXRoTGl0ZXJhbCgpIG1ldGhvZCB0byBXVEY6OlN0
cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAx
MjU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Vi
c3RpdHV0ZSBTdHJpbmc6OnJlcGxhY2UoKSBjYWxscyBieSBTdHJpbmc6OnJlcGxhY2VXaXRoTGl0
ZXJhbCgpIHdoZXJlCisgICAgICAgIGFkZXF1YXRlLCBmb3IgZWZmaWNpZW5jeS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGRvbS9Ob2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNob3dOb2RlKToKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6ZXh0
cmFjdFRleHRTdHlsZXMpOgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0
dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpzZXRTZWFyY2gpOgorICAgICAgICAq
IGxvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRNYWls
dG9Qb3N0Rm9ybURhdGFUb1VSTCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1By
b3h5UmVzb2x2ZXJTb3VwLmNwcDoKKyAgICAgICAgKHNvdXBQcm94eVJlc29sdmVyV2tTZXRQcm9w
ZXJ0eSk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVUkwpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNob3dCb3gpOgorICAgICAgICAqIHhtbC9Y
U0xUUHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybVRleHRTdHJpbmdU
b1hIVE1MRG9jdW1lbnRTdHJpbmcpOgorCiAyMDEyLTExLTA1ICBTaW1vbiBGcmFzZXIgIDxzaW1v
bi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBSZW5kZXJHZW9tZXRyeU1hcCBhc3Nl
cnRpb24gd2hlbiBsYXllcnMgYXJlIHNjcm9sbGVkIGR1cmluZyBsYXlvdXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAppbmRleCAwOWViOTY1Li4yZGNjYTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yMTA1LDggKzIx
MDUsOCBAQCB2b2lkIE5vZGU6OnNob3dOb2RlKGNvbnN0IGNoYXIqIHByZWZpeCkgY29uc3QKICAg
ICAgICAgcHJlZml4ID0gIiI7CiAgICAgaWYgKGlzVGV4dE5vZGUoKSkgewogICAgICAgICBTdHJp
bmcgdmFsdWUgPSBub2RlVmFsdWUoKTsKLSAgICAgICAgdmFsdWUucmVwbGFjZSgnXFwnLCAiXFxc
XCIpOwotICAgICAgICB2YWx1ZS5yZXBsYWNlKCdcbicsICJcXG4iKTsKKyAgICAgICAgdmFsdWUu
cmVwbGFjZVdpdGhMaXRlcmFsKCdcXCcsICJcXFxcIik7CisgICAgICAgIHZhbHVlLnJlcGxhY2VX
aXRoTGl0ZXJhbCgnXG4nLCAiXFxuIik7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMlc1x0
JXAgXCIlc1wiXG4iLCBwcmVmaXgsIG5vZGVOYW1lKCkudXRmOCgpLmRhdGEoKSwgdGhpcywgdmFs
dWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBh
dHRyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAwMzczYmJh
Li45NjI5ZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHls
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0x
NDI3LDcgKzE0MjcsNyBAQCB2b2lkIFN0eWxlQ2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1
bWVudCogZG9jdW1lbnQsIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLAogCiAgICAgbV9hcHBseUZv
bnRGYWNlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsK
ICAgICAvLyBSZW1vdmUgc2luZ2xlIHF1b3RlcyBmb3IgT3V0bG9vayAyMDA3IGNvbXBhdGliaWxp
dHkuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk0NDgKLSAg
ICBtX2FwcGx5Rm9udEZhY2UucmVwbGFjZSgnXCcnLCAiIik7CisgICAgbV9hcHBseUZvbnRGYWNl
LnJlcGxhY2VXaXRoTGl0ZXJhbCgnXCcnLCAiIik7CiAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CiAKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBmb250
U2l6ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCmluZGV4IGIy
N2Q2NWUuLmJlYjgzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3Vw
QWNjdW11bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11
bGF0b3IuY3BwCkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb24KICAg
ICAgICAgLy8gbWluaW1hbCBlc2NhcGluZyBmb3IgamF2YXNjcmlwdCB1cmxzCiAgICAgICAgIGlm
IChzdHJpcHBlZFVSTFN0cmluZy5jb250YWlucygnIicpKSB7CiAgICAgICAgICAgICBpZiAoc3Ry
aXBwZWRVUkxTdHJpbmcuY29udGFpbnMoJ1wnJykpCi0gICAgICAgICAgICAgICAgc3RyaXBwZWRV
UkxTdHJpbmcucmVwbGFjZSgnIicsICImcXVvdDsiKTsKKyAgICAgICAgICAgICAgICBzdHJpcHBl
ZFVSTFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJyInLCAiJnF1b3Q7Iik7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgcXVvdGVDaGFyID0gJ1wnJzsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAppbmRleCA3Yjc3N2JlLi5hMzY5
OWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcApAQCAtNDYz
LDcgKzQ2Myw3IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldFNlYXJjaChjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgIEtVUkwgdXJsID0gaHJlZigpOwogICAgIFN0cmluZyBuZXdTZWFyY2gg
PSAodmFsdWVbMF0gPT0gJz8nKSA/IHZhbHVlLnN1YnN0cmluZygxKSA6IHZhbHVlOwogICAgIC8v
IE1ha2Ugc3VyZSB0aGF0ICcjJyBpbiB0aGUgcXVlcnkgZG9lcyBub3QgbGVhayB0byB0aGUgaGFz
aC4KLSAgICB1cmwuc2V0UXVlcnkobmV3U2VhcmNoLnJlcGxhY2UoJyMnLCAiJTIzIikpOworICAg
IHVybC5zZXRRdWVyeShuZXdTZWFyY2gucmVwbGFjZVdpdGhMaXRlcmFsKCcjJywgIiUyMyIpKTsK
IAogICAgIHNldEhyZWYodXJsLnN0cmluZygpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9y
bVN1Ym1pc3Npb24uY3BwCmluZGV4IGYxODAwYjcuLjVkNDBlNzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcApAQCAtNjcsMTMgKzY3LDEzIEBAIHN0YXRpYyB2b2lk
IGFwcGVuZE1haWx0b1Bvc3RGb3JtRGF0YVRvVVJMKEtVUkwmIHVybCwgY29uc3QgRm9ybURhdGEm
IGRhdGEsIGNvbnN0CiAKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZW5jb2RpbmdUeXBlLCAi
dGV4dC9wbGFpbiIpKSB7CiAgICAgICAgIC8vIENvbnZlbnRpb24gc2VlbXMgdG8gYmUgdG8gZGVj
b2RlLCBhbmQgcy8mL1xyXG4vLiBBbHNvLCBzcGFjZXMgYXJlIGVuY29kZWQgYXMgJTIwLgotICAg
ICAgICBib2R5ID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGJvZHkucmVwbGFjZSgnJicsICJc
clxuIikucmVwbGFjZSgnKycsICcgJykgKyAiXHJcbiIpOworICAgICAgICBib2R5ID0gZGVjb2Rl
VVJMRXNjYXBlU2VxdWVuY2VzKGJvZHkucmVwbGFjZVdpdGhMaXRlcmFsKCcmJywgIlxyXG4iKS5y
ZXBsYWNlKCcrJywgJyAnKSArICJcclxuIik7CiAgICAgfQogCiAgICAgVmVjdG9yPGNoYXI+IGJv
ZHlEYXRhOwogICAgIGJvZHlEYXRhLmFwcGVuZCgiYm9keT0iLCA1KTsKICAgICBGb3JtRGF0YUJ1
aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoYm9keURhdGEsIGJvZHkudXRmOCgpKTsKLSAg
ICBib2R5ID0gU3RyaW5nKGJvZHlEYXRhLmRhdGEoKSwgYm9keURhdGEuc2l6ZSgpKS5yZXBsYWNl
KCcrJywgIiUyMCIpOworICAgIGJvZHkgPSBTdHJpbmcoYm9keURhdGEuZGF0YSgpLCBib2R5RGF0
YS5zaXplKCkpLnJlcGxhY2VXaXRoTGl0ZXJhbCgnKycsICIlMjAiKTsKIAogICAgIFN0cmluZyBx
dWVyeSA9IHVybC5xdWVyeSgpOwogICAgIGlmICghcXVlcnkuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Byb3h5UmVzb2x2ZXJTb3Vw
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Qcm94eVJlc29sdmVy
U291cC5jcHAKaW5kZXggNmY2ZWQ3Yi4uMmYzNTBmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Byb3h5UmVzb2x2ZXJTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUHJveHlSZXNvbHZlclNvdXAuY3BwCkBA
IC04NCw3ICs4NCw3IEBAIHN0YXRpYyB2b2lkIHNvdXBQcm94eVJlc29sdmVyV2tTZXRQcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIHVpbnQgcHJvcElELCBjb25zdCBHCiAgICAgY2FzZSBQUk9QX05P
X1BST1hZOgogICAgICAgICBwcml2LT5ub1Byb3h5ID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVl
KTsKICAgICAgICAgcHJpdi0+cHJveHlFeGNlcHRpb25zLmNsZWFyKCk7Ci0gICAgICAgIFN0cmlu
Zzo6ZnJvbVVURjgocHJpdi0+bm9Qcm94eS5kYXRhKCkpLnJlcGxhY2UoJyAnLCAiIikuc3BsaXQo
JywnLCBwcml2LT5wcm94eUV4Y2VwdGlvbnMpOworICAgICAgICBTdHJpbmc6OmZyb21VVEY4KHBy
aXYtPm5vUHJveHkuZGF0YSgpKS5yZXBsYWNlV2l0aExpdGVyYWwoJyAnLCAiIikuc3BsaXQoJywn
LCBwcml2LT5wcm94eUV4Y2VwdGlvbnMpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQs
IHBzcGVjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGY3YWQwMTgu
LjA0NjY4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtNTQ4LDgg
KzU0OCw4IEBAIHN0YXRpYyBLVVJMIG1ha2VVUkwoY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3Qg
Y2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCiAgICAgU3RyaW5nIHVybFN0cmluZyA9IHJlbGF0aXZl
VVJMU3RyaW5nOwogCiAgICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3RlcnMuCi0gICAgdXJsU3Ry
aW5nLnJlcGxhY2UoJ1xuJywgIiIpOwotICAgIHVybFN0cmluZy5yZXBsYWNlKCdccicsICIiKTsK
KyAgICB1cmxTdHJpbmcucmVwbGFjZVdpdGhMaXRlcmFsKCdcbicsICIiKTsKKyAgICB1cmxTdHJp
bmcucmVwbGFjZVdpdGhMaXRlcmFsKCdccicsICIiKTsKIAogICAgIHJldHVybiBLVVJMKGJhc2VV
UkwsIHVybFN0cmluZyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAKaW5kZXggY2ExZmVmMy4uNTZhYjc2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtMTQzNiw4ICsxNDM2LDggQEAgdm9pZCBJbmxpbmVUZXh0
Qm94OjpzaG93Qm94KGludCBwcmludGVkQ2hhcmFjdGVycykgY29uc3QKICAgICBjb25zdCBSZW5k
ZXJUZXh0KiBvYmogPSB0b1JlbmRlclRleHQocmVuZGVyZXIoKSk7CiAgICAgU3RyaW5nIHZhbHVl
ID0gb2JqLT50ZXh0KCk7CiAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoc3RhcnQoKSwgbGVu
KCkpOwotICAgIHZhbHVlLnJlcGxhY2UoJ1xcJywgIlxcXFwiKTsKLSAgICB2YWx1ZS5yZXBsYWNl
KCdcbicsICJcXG4iKTsKKyAgICB2YWx1ZS5yZXBsYWNlV2l0aExpdGVyYWwoJ1xcJywgIlxcXFwi
KTsKKyAgICB2YWx1ZS5yZXBsYWNlV2l0aExpdGVyYWwoJ1xuJywgIlxcbiIpOwogICAgIHByaW50
ZWRDaGFyYWN0ZXJzICs9IGZwcmludGYoc3RkZXJyLCAiJXNcdCVwIiwgYm94TmFtZSgpLCB0aGlz
KTsKICAgICBmb3IgKDsgcHJpbnRlZENoYXJhY3RlcnMgPCBzaG93VHJlZUNoYXJhY3Rlck9mZnNl
dDsgcHJpbnRlZENoYXJhY3RlcnMrKykKICAgICAgICAgZnB1dGMoJyAnLCBzdGRlcnIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCmluZGV4IDZjZjc5MzcuLjIxZWZmODAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKQEAgLTQ5LDggKzQ5LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogc3RhdGljIGlubGluZSB2b2lkIHRyYW5zZm9ybVRleHRTdHJpbmdUb1hIVE1M
RG9jdW1lbnRTdHJpbmcoU3RyaW5nJiB0ZXh0KQogewogICAgIC8vIE1vZGlmeSB0aGUgb3V0cHV0
IHNvIHRoYXQgaXQgaXMgYSB3ZWxsLWZvcm1lZCBYSFRNTCBkb2N1bWVudCB3aXRoIGEgPHByZT4g
dGFnIGVuY2xvc2luZyB0aGUgdGV4dC4KLSAgICB0ZXh0LnJlcGxhY2UoJyYnLCAiJmFtcDsiKTsK
LSAgICB0ZXh0LnJlcGxhY2UoJzwnLCAiJmx0OyIpOworICAgIHRleHQucmVwbGFjZVdpdGhMaXRl
cmFsKCcmJywgIiZhbXA7Iik7CisgICAgdGV4dC5yZXBsYWNlV2l0aExpdGVyYWwoJzwnLCAiJmx0
OyIpOwogICAgIHRleHQgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThc
Ij8+XG4iCiAgICAgICAgICI8IURPQ1RZUEUgaHRtbCBQVUJMSUMgXCItLy9XM0MvL0RURCBYSFRN
TCAxLjAgU3RyaWN0Ly9FTlwiIFwiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRt
bDEtc3RyaWN0LmR0ZFwiPlxuIgogICAgICAgICAiPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sXCI+XG4iCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwppbmRleCA0
NDM1YTNiLi43MTIyZGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNiBAQAorMjAxMi0xMS0wNiAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpA
aW50ZWwuY29tPgorCisgICAgICAgIEFkZCByZXBsYWNlV2l0aExpdGVyYWwoKSBtZXRob2QgdG8g
V1RGOjpTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMTI1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFN1YnN0aXR1dGUgU3RyaW5nOjpyZXBsYWNlKCkgY2FsbHMgYnkgU3RyaW5nOjpyZXBsYWNl
V2l0aExpdGVyYWwoKSB3aGVyZQorICAgICAgICBhZGVxdWF0ZSwgZm9yIGVmZmljaWVuY3kuCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9TZWxlY3RQb3B1cENsaWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RQb3B1cENsaWVudDo6Z2VuZXJhdGVIVE1MKToKKwogMjAxMi0xMS0w
NiAgSmFja3kgSmlhbmcgIDx6aGFqaWFuZ0ByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5
XSBQYWdlIGNhbid0IGJhY2sgdG8gd2hvbGUgc2NyZWVuIGFmdGVyIHpvb20gb3V0IGFuZCBvcmll
bnRhdGlvbiBjaGFuZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJD
b3JlU3VwcG9ydC9TZWxlY3RQb3B1cENsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvU2VsZWN0UG9wdXBDbGllbnQuY3BwCmluZGV4IDk5ZDFhMDYuLmIz
N2I1ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9y
dC9TZWxlY3RQb3B1cENsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50LmNwcApAQCAtODQsNyArODQsNyBAQCB2b2lk
IFNlbGVjdFBvcHVwQ2xpZW50OjpnZW5lcmF0ZUhUTUwoYm9vbCBtdWx0aXBsZSwgaW50IHNpemUs
IGNvbnN0IFNjb3BlQXJyYXk8QgogICAgIC8vIEFkZCBsYWJlbHMuCiAgICAgc291cmNlLmFwcGVu
ZCgnWycpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIHNv
dXJjZS5hcHBlbmQoIiciICsgU3RyaW5nKGxhYmVsc1tpXSkucmVwbGFjZSgnXFwnLCAiXFxcXCIp
LnJlcGxhY2UoJ1wnJywgIlxcJyIpICsgIiciKTsKKyAgICAgICAgc291cmNlLmFwcGVuZCgiJyIg
KyBTdHJpbmcobGFiZWxzW2ldKS5yZXBsYWNlV2l0aExpdGVyYWwoJ1xcJywgIlxcXFwiKS5yZXBs
YWNlV2l0aExpdGVyYWwoJ1wnJywgIlxcJyIpICsgIiciKTsKICAgICAgICAgLy8gRG9uJ3QgYXBw
ZW5kICcsJyB0byBsYXN0IGVsZW1lbnQuCiAgICAgICAgIGlmIChpICE9IHNpemUgLSAxKQogICAg
ICAgICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIiwgIik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjQxYzkw
My4uOTcxNmE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTExLTA2ICBDaHJp
c3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CisKKyAgICAgICAgQWRk
IHJlcGxhY2VXaXRoTGl0ZXJhbCgpIG1ldGhvZCB0byBXVEY6OlN0cmluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxMjU3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Vic3RpdHV0ZSBTdHJpbmc6OnJl
cGxhY2UoKSBjYWxscyBieSBTdHJpbmc6OnJlcGxhY2VXaXRoTGl0ZXJhbCgpIHdoZXJlCisgICAg
ICAgIGFkZXF1YXRlLCBmb3IgZWZmaWNpZW5jeS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
Om1ha2VVUkxTdHJpbmcpOgorCiAyMDEyLTExLTA2ICBBbmRyYXMgQmVjc2kgIDxhbmRyYXMuYmVj
c2lAZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF1bV0syXSBGaXQtdG8td2lkdGggYnJva2VuIG9u
IHBhZ2VzIHdpdGggdmlld3BvcnQgbWV0YSB0YWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2Vy
RnVuY3MuY3BwCmluZGV4IDRhMmI1MmYuLjVkYTQzYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBl
QnJvd3NlckZ1bmNzLmNwcApAQCAtMjczLDggKzI3Myw4IEBAIHN0YXRpYyBTdHJpbmcgbWFrZVVS
TFN0cmluZyhjb25zdCBjaGFyKiB1cmwpCiAgICAgU3RyaW5nIHVybFN0cmluZyh1cmwpOwogICAg
IAogICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzLgotICAgIHVybFN0cmluZy5yZXBsYWNl
KCdccicsICIiKTsKLSAgICB1cmxTdHJpbmcucmVwbGFjZSgnXG4nLCAiIik7CisgICAgdXJsU3Ry
aW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXHInLCAiIik7CisgICAgdXJsU3RyaW5nLnJlcGxhY2VX
aXRoTGl0ZXJhbCgnXG4nLCAiIik7CiAKICAgICByZXR1cm4gdXJsU3RyaW5nOwogfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDM2Yzk1YjkuLjVl
OGEyNmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMCBAQAorMjAxMi0xMS0wNiAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9w
aGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAgIEFkZCByZXBsYWNlV2l0aExpdGVyYWwoKSBt
ZXRob2QgdG8gV1RGOjpTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMTI1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBBUEkgdGVzdHMgZm9yIFN0cmluZzo6cmVwbGFjZVdpdGhMaXRlcmFs
KCkgYW5kIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgU3RyaW5nSW1wbCBtZXRob2RzLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDogQWRkIFdURlN0cmluZyBBUEkgdGVz
dHMgdG8gQ01ha2UuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1w
bC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEkpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1dURlN0cmluZy5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxMi0xMS0wNiAgVG9tbXkgV2lk
ZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIE1lZGlh
U3RyZWFtIEFQSTogUmVtb3ZlIHRoZSB2YWxncmluZCBpc3N1ZSB3aXRoIE1vY2tXZWJSVENQZWVy
Q29ubmVjdGlvbkhhbmRsZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VM
aXN0cy50eHQgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CmluZGV4IGM0ZTQy
N2UuLjE2M2VkYzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50
eHQKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dApAQCAtODQsNiArODQs
NyBAQCBBRERfRVhFQ1VUQUJMRSh0ZXN0X3d0ZgogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzL1dURi9WZWN0b3IuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1Zl
Y3RvckJhc2ljLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9WZWN0b3JS
ZXZlcnNlLmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9XVEZTdHJpbmcu
Y3BwCiApCiAKIFRBUkdFVF9MSU5LX0xJQlJBUklFUyh0ZXN0X3d0ZiAke3Rlc3Rfd3RmX0xJQlJB
UklFU30pCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJ
bXBsLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCmlu
ZGV4IDIxM2E2NTUuLmRhZGM1ZjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1N0cmluZ0ltcGwuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1N0cmluZ0ltcGwuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAK
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIApAQCAtNjgsNCArNjksNTQg
QEAgVEVTVChXVEYsIFN0cmluZ0ltcGxGcm9tTGl0ZXJhbExvb3AxNkJpdENvbnZlcnNpb24pCiAg
ICAgfQogfQogCitURVNUKFdURiwgU3RyaW5nSW1wbFJlcGxhY2VXaXRoTGl0ZXJhbCkKK3sKKyAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gdGVzdFN0cmluZ0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVG
cm9tTGl0ZXJhbCgiMTIyNCIpOworICAgIEFTU0VSVF9UUlVFKHRlc3RTdHJpbmdJbXBsLT5pczhC
aXQoKSk7CisKKyAgICAvLyBDYXNlcyBmb3IgOEJpdCBzb3VyY2UuCisgICAgdGVzdFN0cmluZ0lt
cGwgPSB0ZXN0U3RyaW5nSW1wbC0+cmVwbGFjZSgnMicsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PigwKSwgMCk7CisgICAgQVNTRVJUX1RSVUUoZXF1YWwodGVzdFN0cmluZ0ltcGwuZ2V0KCksICIx
MjI0IikpOworCisgICAgdGVzdFN0cmluZ0ltcGwgPSB0ZXN0U3RyaW5nSW1wbC0+cmVwbGFjZSgn
MicsICIiLCAwKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbCh0ZXN0U3RyaW5nSW1wbC5nZXQoKSwg
IjE0IikpOworCisgICAgdGVzdFN0cmluZ0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0
ZXJhbCgiMTIyNCIpOworICAgIEFTU0VSVF9UUlVFKHRlc3RTdHJpbmdJbXBsLT5pczhCaXQoKSk7
CisKKyAgICB0ZXN0U3RyaW5nSW1wbCA9IHRlc3RTdHJpbmdJbXBsLT5yZXBsYWNlKCczJywgIk5v
dEZvdW5kIiwgOCk7CisgICAgQVNTRVJUX1RSVUUoZXF1YWwodGVzdFN0cmluZ0ltcGwuZ2V0KCks
ICIxMjI0IikpOworCisgICAgdGVzdFN0cmluZ0ltcGwgPSB0ZXN0U3RyaW5nSW1wbC0+cmVwbGFj
ZSgnMicsICIzIiwgMSk7CisgICAgQVNTRVJUX1RSVUUoZXF1YWwodGVzdFN0cmluZ0ltcGwuZ2V0
KCksICIxMzM0IikpOworCisgICAgdGVzdFN0cmluZ0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVG
cm9tTGl0ZXJhbCgiMTIyNCIpOworICAgIEFTU0VSVF9UUlVFKHRlc3RTdHJpbmdJbXBsLT5pczhC
aXQoKSk7CisgICAgdGVzdFN0cmluZ0ltcGwgPSB0ZXN0U3RyaW5nSW1wbC0+cmVwbGFjZSgnMics
ICI1NTUiLCAzKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbCh0ZXN0U3RyaW5nSW1wbC5nZXQoKSwg
IjE1NTU1NTU0IikpOworCisgICAgLy8gQ2FzZXMgZm9yIDE2Qml0IHNvdXJjZS4KKyAgICBTdHJp
bmcgdGVzdFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoInLDqXN1bcOpIik7CisgICAgQVNTRVJU
X0ZBTFNFKHRlc3RTdHJpbmcuaW1wbCgpLT5pczhCaXQoKSk7CisKKyAgICB0ZXN0U3RyaW5nSW1w
bCA9IHRlc3RTdHJpbmcuaW1wbCgpLT5yZXBsYWNlKFVDaGFyKDB4MDBFOSAvKlUrMDBFOSBpcyAn
w6knKi8pLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oMCksIDApOworICAgIEFTU0VSVF9UUlVF
KGVxdWFsKHRlc3RTdHJpbmdJbXBsLmdldCgpLCBTdHJpbmc6OmZyb21VVEY4KCJyw6lzdW3DqSIp
LmltcGwoKSkpOworCisgICAgdGVzdFN0cmluZ0ltcGwgPSB0ZXN0U3RyaW5nLmltcGwoKS0+cmVw
bGFjZSgnMicsICJOb3RGb3VuZCIsIDgpOworICAgIEFTU0VSVF9UUlVFKGVxdWFsKHRlc3RTdHJp
bmdJbXBsLmdldCgpLCBTdHJpbmc6OmZyb21VVEY4KCJyw6lzdW3DqSIpLmltcGwoKSkpOworCisg
ICAgdGVzdFN0cmluZ0ltcGwgPSB0ZXN0U3RyaW5nLmltcGwoKS0+cmVwbGFjZShVQ2hhcigweDAw
RTkgLypVKzAwRTkgaXMgJ8OpJyovKSwgImUiLCAxKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbCh0
ZXN0U3RyaW5nSW1wbC5nZXQoKSwgInJlc3VtZSIpKTsKKworICAgIHRlc3RTdHJpbmcgPSBTdHJp
bmc6OmZyb21VVEY4KCJyw6lzdW3DqSIpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0U3RyaW5nLmlt
cGwoKS0+aXM4Qml0KCkpOworICAgIHRlc3RTdHJpbmdJbXBsID0gdGVzdFN0cmluZy5pbXBsKCkt
PnJlcGxhY2UoVUNoYXIoMHgwMEU5IC8qVSswMEU5IGlzICfDqScqLyksICIiLCAwKTsKKyAgICBB
U1NFUlRfVFJVRShlcXVhbCh0ZXN0U3RyaW5nSW1wbC5nZXQoKSwgInJzdW0iKSk7CisKKyAgICB0
ZXN0U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOCgicsOpc3Vtw6kiKTsKKyAgICBBU1NFUlRfRkFM
U0UodGVzdFN0cmluZy5pbXBsKCktPmlzOEJpdCgpKTsKKyAgICB0ZXN0U3RyaW5nSW1wbCA9IHRl
c3RTdHJpbmcuaW1wbCgpLT5yZXBsYWNlKFVDaGFyKDB4MDBFOSAvKlUrMDBFOSBpcyAnw6knKi8p
LCAiNTU1IiwgMyk7CisgICAgQVNTRVJUX1RSVUUoZXF1YWwodGVzdFN0cmluZ0ltcGwuZ2V0KCks
ICJyNTU1c3VtNTU1IikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9XVEZTdHJpbmcuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV1RGU3RyaW5nLmNwcAppbmRleCAxNTU3NzJmLi40
YTkyY2Q0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9XVEZTdHJp
bmcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1dURlN0cmluZy5jcHAK
QEAgLTExNSw3ICsxMTUsNDUgQEAgVEVTVChXVEYsIFN0cmluZ051bWJlclRvU3RyaW5nRUNNQVNj
cmlwdFJlZ3VsYXJOdW1iZXJzKQogICAgIHRlc3ROdW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQocGhp
LCAiMS42MTgwMzM5ODg3NDk4OTUiKTsKIH0KIAotCitURVNUKFdURiwgU3RyaW5nUmVwbGFjZVdp
dGhMaXRlcmFsKQoreworICAgIC8vIENhc2VzIGZvciA4Qml0IHNvdXJjZS4KKyAgICBTdHJpbmcg
dGVzdFN0cmluZyA9ICIxMjI0IjsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0U3RyaW5nLmlzOEJpdCgp
KTsKKyAgICB0ZXN0U3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnMicsICIiKTsKKyAgICBBU1NF
UlRfU1RSRVEoIjE0IiwgdGVzdFN0cmluZy51dGY4KCkuZGF0YSgpKTsKKworICAgIHRlc3RTdHJp
bmcgPSAiMTIyNCI7CisgICAgQVNTRVJUX1RSVUUodGVzdFN0cmluZy5pczhCaXQoKSk7CisgICAg
dGVzdFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJzInLCAiMyIpOworICAgIEFTU0VSVF9TVFJF
USgiMTMzNCIsIHRlc3RTdHJpbmcudXRmOCgpLmRhdGEoKSk7CisKKyAgICB0ZXN0U3RyaW5nID0g
IjEyMjQiOworICAgIEFTU0VSVF9UUlVFKHRlc3RTdHJpbmcuaXM4Qml0KCkpOworICAgIHRlc3RT
dHJpbmcucmVwbGFjZVdpdGhMaXRlcmFsKCcyJywgIjU1NSIpOworICAgIEFTU0VSVF9TVFJFUSgi
MTU1NTU1NTQiLCB0ZXN0U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworCisgICAgdGVzdFN0cmluZyA9
ICIxMjI0IjsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0U3RyaW5nLmlzOEJpdCgpKTsKKyAgICB0ZXN0
U3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnMycsICJOb3RGb3VuZCIpOworICAgIEFTU0VSVF9T
VFJFUSgiMTIyNCIsIHRlc3RTdHJpbmcudXRmOCgpLmRhdGEoKSk7CisKKyAgICAvLyBDYXNlcyBm
b3IgMTZCaXQgc291cmNlLgorICAgIHRlc3RTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KCJyw6lz
dW3DqSIpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0U3RyaW5nLmlzOEJpdCgpKTsKKyAgICB0ZXN0
U3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbChVQ2hhcigweDAwRTkgLypVKzAwRTkgaXMgJ8OpJyov
KSwgImUiKTsKKyAgICBBU1NFUlRfU1RSRVEoInJlc3VtZSIsIHRlc3RTdHJpbmcudXRmOCgpLmRh
dGEoKSk7CisKKyAgICB0ZXN0U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOCgicsOpc3Vtw6kiKTsK
KyAgICBBU1NFUlRfRkFMU0UodGVzdFN0cmluZy5pczhCaXQoKSk7CisgICAgdGVzdFN0cmluZy5y
ZXBsYWNlV2l0aExpdGVyYWwoVUNoYXIoMHgwMEU5IC8qVSswMEU5IGlzICfDqScqLyksICIiKTsK
KyAgICBBU1NFUlRfU1RSRVEoInJzdW0iLCB0ZXN0U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworCisg
ICAgdGVzdFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoInLDqXN1bcOpIik7CisgICAgQVNTRVJU
X0ZBTFNFKHRlc3RTdHJpbmcuaXM4Qml0KCkpOworICAgIHRlc3RTdHJpbmcucmVwbGFjZVdpdGhM
aXRlcmFsKCczJywgIk5vdEZvdW5kIik7CisgICAgQVNTRVJUX1NUUkVRKCJyw6lzdW3DqSIsIHRl
c3RTdHJpbmcudXRmOCgpLmRhdGEoKSk7Cit9CiAKIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSQo=
</data>
<flag name="review"
          id="186988"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172726</attachid>
            <date>2012-11-07 00:00:41 -0800</date>
            <delta_ts>2012-11-07 01:43:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>101257_replaceWithLiteral3.patch</filename>
            <type>text/plain</type>
            <size>26357</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMDUxY2VlYS4uYzQyODA0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMi0xMS0wNiAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAg
IEFkZCByZXBsYWNlV2l0aExpdGVyYWwoKSBtZXRob2QgdG8gV1RGOjpTdHJpbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTI1NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCByZXBsYWNlV2l0aExp
dGVyYWwoKSBtZXRob2QgdG8gV1RGOjpTdHJpbmcgdGhhdCB0YWtlcworICAgICAgICByZXBsYWNl
bWVudCBzdHJpbmcgYXMgYSBsaXRlcmFsIHRvIGF2b2lkIHVzZWxlc3NseSBjb25zdHJ1Y3RpbmcK
KyAgICAgICAgYSBTdHJpbmcgb2JqZWN0LgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1w
bC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJlcGxhY2UpOgorICAgICAgICAoV1RG
KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OnJlcGxhY2UpOgorICAgICAgICAoU3RyaW5nSW1wbCk6CisgICAgICAgICogd3RmL3Rl
eHQvV1RGU3RyaW5nLmg6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmc6
OnJlcGxhY2VXaXRoTGl0ZXJhbCk6CisKIDIwMTItMTEtMDYgIE1pY2hhZWwgU2Fib2ZmICA8bXNh
Ym9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKFVDaGFyKSB3
aXRoIGFuIDggYml0IHF1YW50aXR5IHNob3VsZG4ndCBjaGFuZ2UgdGhlIGNvbnRlbnRzIHRvIDE2
IGJpdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCmluZGV4IDJkMDRiMWYuLjJmZjNiNWZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKQEAgLTEzODIsMjEgKzEzODIsMzAgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4s
IFN0cmluZ0ltcGwqIHJlcGxhY2VtZW4KIHsKICAgICBpZiAoIXJlcGxhY2VtZW50KQogICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgCi0gICAgdW5zaWduZWQgcmVwU3RyTGVuZ3RoID0gcmVw
bGFjZW1lbnQtPmxlbmd0aCgpOworCisgICAgaWYgKHJlcGxhY2VtZW50LT5pczhCaXQoKSkKKyAg
ICAgICAgcmV0dXJuIHJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnQtPm1fZGF0YTgsIHJlcGxh
Y2VtZW50LT5sZW5ndGgoKSk7CisKKyAgICByZXR1cm4gcmVwbGFjZShwYXR0ZXJuLCByZXBsYWNl
bWVudC0+bV9kYXRhMTYsIHJlcGxhY2VtZW50LT5sZW5ndGgoKSk7Cit9CisKK1Bhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBjb25zdCBMQ2hh
ciogcmVwbGFjZW1lbnQsIHVuc2lnbmVkIHJlcFN0ckxlbmd0aCkKK3sKKyAgICBBU1NFUlQocmVw
bGFjZW1lbnQpOworCiAgICAgc2l6ZV90IHNyY1NlZ21lbnRTdGFydCA9IDA7CiAgICAgdW5zaWdu
ZWQgbWF0Y2hDb3VudCA9IDA7Ci0gICAgCisKICAgICAvLyBDb3VudCB0aGUgbWF0Y2hlcy4KICAg
ICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0
KSkgIT0gbm90Rm91bmQpIHsKICAgICAgICAgKyttYXRjaENvdW50OwogICAgICAgICArK3NyY1Nl
Z21lbnRTdGFydDsKICAgICB9Ci0gICAgCisKICAgICAvLyBJZiB3ZSBoYXZlIDAgbWF0Y2hlcyB0
aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IG1vcmUgd29yay4KICAgICBpZiAoIW1hdGNoQ291
bnQpCiAgICAgICAgIHJldHVybiB0aGlzOwotICAgIAorCiAgICAgaWYgKHJlcFN0ckxlbmd0aCAm
JiBtYXRjaENvdW50ID4gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIHJlcFN0ckxl
bmd0aCkKICAgICAgICAgQ1JBU0goKTsKIApAQCAtMTQxMiwxNiArMTQyMSw4IEBAIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBTdHJpbmdJ
bXBsKiByZXBsYWNlbWVuCiAgICAgdW5zaWduZWQgc3JjU2VnbWVudExlbmd0aDsKICAgICBzcmNT
ZWdtZW50U3RhcnQgPSAwOwogICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9IDA7Ci0gICAgYm9vbCBz
cmNJczhCaXQgPSBpczhCaXQoKTsKLSAgICBib29sIHJlcGxhY2VtZW50SXM4Qml0ID0gcmVwbGFj
ZW1lbnQtPmlzOEJpdCgpOwotICAgIAotICAgIC8vIFRoZXJlIGFyZSA0IGNhc2VzOgotICAgIC8v
IDEuIFRoaXMgYW5kIHJlcGxhY2VtZW50IGFyZSBib3RoIDggYml0LgotICAgIC8vIDIuIFRoaXMg
YW5kIHJlcGxhY2VtZW50IGFyZSBib3RoIDE2IGJpdC4KLSAgICAvLyAzLiBUaGlzIGlzIDggYml0
IGFuZCByZXBsYWNlbWVudCBpcyAxNiBiaXQuCi0gICAgLy8gNC4gVGhpcyBpcyAxNiBiaXQgYW5k
IHJlcGxhY2VtZW50IGlzIDggYml0LgotICAgIGlmIChzcmNJczhCaXQgJiYgcmVwbGFjZW1lbnRJ
czhCaXQpIHsKLSAgICAgICAgLy8gQ2FzZSAxCisKKyAgICBpZiAoaXM4Qml0KCkpIHsKICAgICAg
ICAgTENoYXIqIGRhdGE7CiAgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3Jl
YXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsKIApAQCAtMTQyOSw3ICsxNDMwLDcgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4s
IFN0cmluZ0ltcGwqIHJlcGxhY2VtZW4KICAgICAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBz
cmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OwogICAgICAgICAgICAgbWVtY3B5KGRhdGEg
KyBkc3RPZmZzZXQsIG1fZGF0YTggKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGgg
KiBzaXplb2YoTENoYXIpKTsKICAgICAgICAgICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVu
Z3RoOwotICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5t
X2RhdGE4LCByZXBTdHJMZW5ndGggKiBzaXplb2YoTENoYXIpKTsKKyAgICAgICAgICAgIG1lbWNw
eShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudCwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKExD
aGFyKSk7CiAgICAgICAgICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVuZ3RoOwogICAgICAgICAg
ICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7CiAgICAgICAgIH0KQEAgLTE0
NDcsMzcgKzE0NDgsOTkgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBs
YWNlKFVDaGFyIHBhdHRlcm4sIFN0cmluZ0ltcGwqIHJlcGxhY2VtZW4KIAogICAgIHdoaWxlICgo
c3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91
bmQpIHsKICAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdt
ZW50U3RhcnQ7Ci0gICAgICAgIGlmIChzcmNJczhCaXQpIHsKLSAgICAgICAgICAgIC8vIENhc2Ug
My4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3Ro
OyBpKyspCi0gICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSAr
IHNyY1NlZ21lbnRTdGFydF07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBDYXNl
cyAyICYgNC4KLSAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiAr
IHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwotICAg
ICAgICB9CisgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1Nl
Z21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworCiAgICAgICAg
IGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOwotICAgICAgICBpZiAocmVwbGFjZW1lbnRJ
czhCaXQpIHsKLSAgICAgICAgICAgIC8vIENhc2UgNC4KLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZXBTdHJMZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBkYXRhW2kg
KyBkc3RPZmZzZXRdID0gcmVwbGFjZW1lbnQtPm1fZGF0YThbaV07Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAvLyBDYXNlcyAyICYgMy4KLSAgICAgICAgICAgIG1lbWNweShkYXRhICsg
ZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhMTYsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihV
Q2hhcikpOwotICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXBT
dHJMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSByZXBsYWNl
bWVudFtpXTsKKwogICAgICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVuZ3RoOwogICAgICAgICBz
cmNTZWdtZW50U3RhcnQgPSBzcmNTZWdtZW50RW5kICsgMTsKICAgICB9CiAKICAgICBzcmNTZWdt
ZW50TGVuZ3RoID0gbV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAgaWYgKHNyY0lzOEJp
dCkgewotICAgICAgICAvLyBDYXNlIDMuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzcmNTZWdtZW50TGVuZ3RoOyBpKyspCisgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1f
ZGF0YTE2ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFy
KSk7CisKKyAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBuZXdJbXBs
LT5sZW5ndGgoKSk7CisKKyAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBjb25z
dCBVQ2hhciogcmVwbGFjZW1lbnQsIHVuc2lnbmVkIHJlcFN0ckxlbmd0aCkKK3sKKyAgICBBU1NF
UlQocmVwbGFjZW1lbnQpOworCisgICAgc2l6ZV90IHNyY1NlZ21lbnRTdGFydCA9IDA7CisgICAg
dW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7CisKKyAgICAvLyBDb3VudCB0aGUgbWF0Y2hlcy4KKyAg
ICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0
KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgKyttYXRjaENvdW50OworICAgICAgICArK3NyY1Nl
Z21lbnRTdGFydDsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBoYXZlIDAgbWF0Y2hlcyB0aGVuIHdl
IGRvbid0IGhhdmUgdG8gZG8gYW55IG1vcmUgd29yay4KKyAgICBpZiAoIW1hdGNoQ291bnQpCisg
ICAgICAgIHJldHVybiB0aGlzOworCisgICAgaWYgKHJlcFN0ckxlbmd0aCAmJiBtYXRjaENvdW50
ID4gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIHJlcFN0ckxlbmd0aCkKKyAgICAg
ICAgQ1JBU0goKTsKKworICAgIHVuc2lnbmVkIHJlcGxhY2VTaXplID0gbWF0Y2hDb3VudCAqIHJl
cFN0ckxlbmd0aDsKKyAgICB1bnNpZ25lZCBuZXdTaXplID0gbV9sZW5ndGggLSBtYXRjaENvdW50
OworICAgIGlmIChuZXdTaXplID49IChudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0g
cmVwbGFjZVNpemUpKQorICAgICAgICBDUkFTSCgpOworCisgICAgbmV3U2l6ZSArPSByZXBsYWNl
U2l6ZTsKKworICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEuCisgICAgc2l6ZV90IHNyY1Nl
Z21lbnRFbmQ7CisgICAgdW5zaWduZWQgc3JjU2VnbWVudExlbmd0aDsKKyAgICBzcmNTZWdtZW50
U3RhcnQgPSAwOworICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9IDA7CisKKyAgICBpZiAoaXM4Qml0
KCkpIHsKKyAgICAgICAgVUNoYXIqIGRhdGE7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBu
ZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsKKworICAgICAgICB3
aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9
IG5vdEZvdW5kKSB7CisgICAgICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0gc3JjU2VnbWVudEVu
ZCAtIHNyY1NlZ21lbnRTdGFydDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzcmNTZWdtZW50TGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zm
c2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07CisKKyAgICAgICAgICAgIGRzdE9m
ZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOworICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RP
ZmZzZXQsIHJlcGxhY2VtZW50LCByZXBTdHJMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKworICAg
ICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKKyAgICAgICAgICAgIHNyY1NlZ21l
bnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyAxOworICAgICAgICB9CisKKyAgICAgICAgc3JjU2Vn
bWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgKytpKQogICAgICAgICAgICAgZGF0
YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gQ2FzZXMgMiAmIDQuCisKKyAgICAgICAgQVNTRVJUKGRzdE9mZnNl
dCArIHNyY1NlZ21lbnRMZW5ndGggPT0gbmV3SW1wbC0+bGVuZ3RoKCkpOworCisgICAgICAgIHJl
dHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBVQ2hhciogZGF0YTsKKyAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwg
ZGF0YSk7CisKKyAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1Nl
Z21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CisgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBz
cmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OwogICAgICAgICBtZW1jcHkoZGF0YSArIGRz
dE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBz
aXplb2YoVUNoYXIpKTsKKworICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsK
KyAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LCByZXBTdHJMZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKKworICAgICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVuZ3Ro
OworICAgICAgICBzcmNTZWdtZW50U3RhcnQgPSBzcmNTZWdtZW50RW5kICsgMTsKICAgICB9CiAK
KyAgICBzcmNTZWdtZW50TGVuZ3RoID0gbV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7CisgICAg
bWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YTE2ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNT
ZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisKICAgICBBU1NFUlQoZHN0T2Zmc2V0ICsg
c3JjU2VnbWVudExlbmd0aCA9PSBuZXdJbXBsLT5sZW5ndGgoKSk7CiAKICAgICByZXR1cm4gbmV3
SW1wbC5yZWxlYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0lt
cGwuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IGViNDY2MmMuLjUz
MTA0ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCkBAIC03MDksNiArNzA5LDkgQEAgcHVi
bGljOgogCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
cmVwbGFjZShVQ2hhciwgVUNoYXIpOwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIsIFN0cmluZ0ltcGwqKTsKKyAgICBBTFdBWVNf
SU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBjb25z
dCBjaGFyKiByZXBsYWNlbWVudCwgdW5zaWduZWQgcmVwbGFjZW1lbnRMZW5ndGgpIHsgcmV0dXJu
IHJlcGxhY2UocGF0dGVybiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHJlcGxhY2Vt
ZW50KSwgcmVwbGFjZW1lbnRMZW5ndGgpOyB9CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShVQ2hhciwgY29uc3QgTENoYXIqLCB1bnNpZ25l
ZCByZXBsYWNlbWVudExlbmd0aCk7CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXBsYWNl
KFVDaGFyLCBjb25zdCBVQ2hhciosIHVuc2lnbmVkIHJlcGxhY2VtZW50TGVuZ3RoKTsKICAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXBsYWNlKFN0cmlu
Z0ltcGwqLCBTdHJpbmdJbXBsKik7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gcmVwbGFjZSh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuLCBTdHJp
bmdJbXBsKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IDYyNGViNTQuLmE1ZTMzNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApAQCAtMzA3LDYgKzMwNywxNSBAQCBwdWJsaWM6CiAg
ICAgU3RyaW5nJiByZXBsYWNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IGlm
IChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+cmVwbGFjZShhLmltcGwoKSwgYi5pbXBsKCkpOyBy
ZXR1cm4gKnRoaXM7IH0KICAgICBTdHJpbmcmIHJlcGxhY2UodW5zaWduZWQgaW5kZXgsIHVuc2ln
bmVkIGxlbiwgY29uc3QgU3RyaW5nJiBiKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+
cmVwbGFjZShpbmRleCwgbGVuLCBiLmltcGwoKSk7IHJldHVybiAqdGhpczsgfQogCisgICAgdGVt
cGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PgorICAgIEFMV0FZU19JTkxJTkUgU3RyaW5n
JiByZXBsYWNlV2l0aExpdGVyYWwoVUNoYXIgYSwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2No
YXJhY3RlcnNDb3VudF0pCisgICAgeworICAgICAgICBpZiAobV9pbXBsKQorICAgICAgICAgICAg
bV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKGEsIGNoYXJhY3RlcnMsIGNoYXJhY3RlcnNDb3VudCAt
IDEpOworCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB2b2lkIG1ha2VMb3dl
cigpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT5sb3dlcigpOyB9CiAgICAgdm9pZCBt
YWtlVXBwZXIoKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+dXBwZXIoKTsgfQogICAg
IHZvaWQgZmlsbChVQ2hhciBjKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+ZmlsbChj
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IGIyNjM3ZGQuLmQ0ZDJjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzNCBAQAorMjAxMi0xMS0wNiAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpA
aW50ZWwuY29tPgorCisgICAgICAgIEFkZCByZXBsYWNlV2l0aExpdGVyYWwoKSBtZXRob2QgdG8g
V1RGOjpTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMTI1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFN1YnN0aXR1dGUgU3RyaW5nOjpyZXBsYWNlKCkgY2FsbHMgYnkgU3RyaW5nOjpyZXBsYWNl
V2l0aExpdGVyYWwoKSB3aGVyZQorICAgICAgICBhZGVxdWF0ZSwgZm9yIGVmZmljaWVuY3kuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBk
b20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzaG93Tm9kZSk6CisgICAgICAg
ICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFu
Z2U6OmV4dHJhY3RUZXh0U3R5bGVzKToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxh
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90
ZWRVUkxBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6c2V0U2VhcmNoKToKKyAg
ICAgICAgKiBsb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBw
ZW5kTWFpbHRvUG9zdEZvcm1EYXRhVG9VUkwpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
c291cC9Qcm94eVJlc29sdmVyU291cC5jcHA6CisgICAgICAgIChzb3VwUHJveHlSZXNvbHZlcldr
U2V0UHJvcGVydHkpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjptYWtlVVJMKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzaG93Qm94KToKKyAgICAgICAg
KiB4bWwvWFNMVFByb2Nlc3Nvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1UZXh0
U3RyaW5nVG9YSFRNTERvY3VtZW50U3RyaW5nKToKKwogMjAxMi0xMS0wNiAgS2Vpc2hpIEhhdHRv
cmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbXBsZW1lbnQgbW9udGggcGlja2lu
ZyB0byBjYWxlbmRhciBwaWNrZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAwOWViOTY1Li4yZGNjYTI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yMTA1LDggKzIxMDUsOCBAQCB2b2lkIE5vZGU6OnNob3dO
b2RlKGNvbnN0IGNoYXIqIHByZWZpeCkgY29uc3QKICAgICAgICAgcHJlZml4ID0gIiI7CiAgICAg
aWYgKGlzVGV4dE5vZGUoKSkgewogICAgICAgICBTdHJpbmcgdmFsdWUgPSBub2RlVmFsdWUoKTsK
LSAgICAgICAgdmFsdWUucmVwbGFjZSgnXFwnLCAiXFxcXCIpOwotICAgICAgICB2YWx1ZS5yZXBs
YWNlKCdcbicsICJcXG4iKTsKKyAgICAgICAgdmFsdWUucmVwbGFjZVdpdGhMaXRlcmFsKCdcXCcs
ICJcXFxcIik7CisgICAgICAgIHZhbHVlLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXG4nLCAiXFxuIik7
CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMlc1x0JXAgXCIlc1wiXG4iLCBwcmVmaXgsIG5v
ZGVOYW1lKCkudXRmOCgpLmRhdGEoKSwgdGhpcywgdmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBhdHRyczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAwMzczYmJhLi45NjI5ZjY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNDI3LDcgKzE0MjcsNyBAQCB2b2lkIFN0
eWxlQ2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlUHJv
cGVydHlTZXQqIHN0eWxlLAogCiAgICAgbV9hcHBseUZvbnRGYWNlID0gc3R5bGUtPmdldFByb3Bl
cnR5VmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKICAgICAvLyBSZW1vdmUgc2luZ2xlIHF1
b3RlcyBmb3IgT3V0bG9vayAyMDA3IGNvbXBhdGliaWxpdHkuIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk0NDgKLSAgICBtX2FwcGx5Rm9udEZhY2UucmVwbGFj
ZSgnXCcnLCAiIik7CisgICAgbV9hcHBseUZvbnRGYWNlLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXCcn
LCAiIik7CiAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSk7
CiAKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBmb250U2l6ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCmluZGV4IGIyN2Q2NWUuLmJlYjgzMmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCkBAIC0yMTYsNyArMjE2
LDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFs
dWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb24KICAgICAgICAgLy8gbWluaW1hbCBlc2NhcGlu
ZyBmb3IgamF2YXNjcmlwdCB1cmxzCiAgICAgICAgIGlmIChzdHJpcHBlZFVSTFN0cmluZy5jb250
YWlucygnIicpKSB7CiAgICAgICAgICAgICBpZiAoc3RyaXBwZWRVUkxTdHJpbmcuY29udGFpbnMo
J1wnJykpCi0gICAgICAgICAgICAgICAgc3RyaXBwZWRVUkxTdHJpbmcucmVwbGFjZSgnIicsICIm
cXVvdDsiKTsKKyAgICAgICAgICAgICAgICBzdHJpcHBlZFVSTFN0cmluZy5yZXBsYWNlV2l0aExp
dGVyYWwoJyInLCAiJnF1b3Q7Iik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
cXVvdGVDaGFyID0gJ1wnJzsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAppbmRleCA3Yjc3N2JlLi5hMzY5OWJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcApAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgSFRNTEFu
Y2hvckVsZW1lbnQ6OnNldFNlYXJjaChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIEtVUkwgdXJs
ID0gaHJlZigpOwogICAgIFN0cmluZyBuZXdTZWFyY2ggPSAodmFsdWVbMF0gPT0gJz8nKSA/IHZh
bHVlLnN1YnN0cmluZygxKSA6IHZhbHVlOwogICAgIC8vIE1ha2Ugc3VyZSB0aGF0ICcjJyBpbiB0
aGUgcXVlcnkgZG9lcyBub3QgbGVhayB0byB0aGUgaGFzaC4KLSAgICB1cmwuc2V0UXVlcnkobmV3
U2VhcmNoLnJlcGxhY2UoJyMnLCAiJTIzIikpOworICAgIHVybC5zZXRRdWVyeShuZXdTZWFyY2gu
cmVwbGFjZVdpdGhMaXRlcmFsKCcjJywgIiUyMyIpKTsKIAogICAgIHNldEhyZWYodXJsLnN0cmlu
ZygpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCmluZGV4IGYx
ODAwYjcuLjVkNDBlNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3Vi
bWlzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNw
cApAQCAtNjcsMTMgKzY3LDEzIEBAIHN0YXRpYyB2b2lkIGFwcGVuZE1haWx0b1Bvc3RGb3JtRGF0
YVRvVVJMKEtVUkwmIHVybCwgY29uc3QgRm9ybURhdGEmIGRhdGEsIGNvbnN0CiAKICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoZW5jb2RpbmdUeXBlLCAidGV4dC9wbGFpbiIpKSB7CiAgICAgICAg
IC8vIENvbnZlbnRpb24gc2VlbXMgdG8gYmUgdG8gZGVjb2RlLCBhbmQgcy8mL1xyXG4vLiBBbHNv
LCBzcGFjZXMgYXJlIGVuY29kZWQgYXMgJTIwLgotICAgICAgICBib2R5ID0gZGVjb2RlVVJMRXNj
YXBlU2VxdWVuY2VzKGJvZHkucmVwbGFjZSgnJicsICJcclxuIikucmVwbGFjZSgnKycsICcgJykg
KyAiXHJcbiIpOworICAgICAgICBib2R5ID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGJvZHku
cmVwbGFjZVdpdGhMaXRlcmFsKCcmJywgIlxyXG4iKS5yZXBsYWNlKCcrJywgJyAnKSArICJcclxu
Iik7CiAgICAgfQogCiAgICAgVmVjdG9yPGNoYXI+IGJvZHlEYXRhOwogICAgIGJvZHlEYXRhLmFw
cGVuZCgiYm9keT0iLCA1KTsKICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9y
bURhdGEoYm9keURhdGEsIGJvZHkudXRmOCgpKTsKLSAgICBib2R5ID0gU3RyaW5nKGJvZHlEYXRh
LmRhdGEoKSwgYm9keURhdGEuc2l6ZSgpKS5yZXBsYWNlKCcrJywgIiUyMCIpOworICAgIGJvZHkg
PSBTdHJpbmcoYm9keURhdGEuZGF0YSgpLCBib2R5RGF0YS5zaXplKCkpLnJlcGxhY2VXaXRoTGl0
ZXJhbCgnKycsICIlMjAiKTsKIAogICAgIFN0cmluZyBxdWVyeSA9IHVybC5xdWVyeSgpOwogICAg
IGlmICghcXVlcnkuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Byb3h5UmVzb2x2ZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Qcm94eVJlc29sdmVyU291cC5jcHAKaW5kZXggNmY2ZWQ3Yi4u
MmYzNTBmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Byb3h5UmVzb2x2ZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUHJveHlSZXNvbHZlclNvdXAuY3BwCkBAIC04NCw3ICs4NCw3IEBAIHN0YXRpYyB2
b2lkIHNvdXBQcm94eVJlc29sdmVyV2tTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIHVpbnQg
cHJvcElELCBjb25zdCBHCiAgICAgY2FzZSBQUk9QX05PX1BST1hZOgogICAgICAgICBwcml2LT5u
b1Byb3h5ID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKICAgICAgICAgcHJpdi0+cHJveHlF
eGNlcHRpb25zLmNsZWFyKCk7Ci0gICAgICAgIFN0cmluZzo6ZnJvbVVURjgocHJpdi0+bm9Qcm94
eS5kYXRhKCkpLnJlcGxhY2UoJyAnLCAiIikuc3BsaXQoJywnLCBwcml2LT5wcm94eUV4Y2VwdGlv
bnMpOworICAgICAgICBTdHJpbmc6OmZyb21VVEY4KHByaXYtPm5vUHJveHkuZGF0YSgpKS5yZXBs
YWNlV2l0aExpdGVyYWwoJyAnLCAiIikuc3BsaXQoJywnLCBwcml2LT5wcm94eUV4Y2VwdGlvbnMp
OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBzcGVjKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGY3YWQwMTguLjA0NjY4NDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtNTQ4LDggKzU0OCw4IEBAIHN0YXRpYyBLVVJMIG1h
a2VVUkwoY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVVUkxTdHJpbmcp
CiAgICAgU3RyaW5nIHVybFN0cmluZyA9IHJlbGF0aXZlVVJMU3RyaW5nOwogCiAgICAgLy8gU3Ry
aXAgcmV0dXJuIGNoYXJhY3RlcnMuCi0gICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xuJywgIiIpOwot
ICAgIHVybFN0cmluZy5yZXBsYWNlKCdccicsICIiKTsKKyAgICB1cmxTdHJpbmcucmVwbGFjZVdp
dGhMaXRlcmFsKCdcbicsICIiKTsKKyAgICB1cmxTdHJpbmcucmVwbGFjZVdpdGhMaXRlcmFsKCdc
cicsICIiKTsKIAogICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVybFN0cmluZyk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggY2ExZmVmMy4uNTZh
Yjc2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAt
MTQzNiw4ICsxNDM2LDggQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpzaG93Qm94KGludCBwcmludGVk
Q2hhcmFjdGVycykgY29uc3QKICAgICBjb25zdCBSZW5kZXJUZXh0KiBvYmogPSB0b1JlbmRlclRl
eHQocmVuZGVyZXIoKSk7CiAgICAgU3RyaW5nIHZhbHVlID0gb2JqLT50ZXh0KCk7CiAgICAgdmFs
dWUgPSB2YWx1ZS5zdWJzdHJpbmcoc3RhcnQoKSwgbGVuKCkpOwotICAgIHZhbHVlLnJlcGxhY2Uo
J1xcJywgIlxcXFwiKTsKLSAgICB2YWx1ZS5yZXBsYWNlKCdcbicsICJcXG4iKTsKKyAgICB2YWx1
ZS5yZXBsYWNlV2l0aExpdGVyYWwoJ1xcJywgIlxcXFwiKTsKKyAgICB2YWx1ZS5yZXBsYWNlV2l0
aExpdGVyYWwoJ1xuJywgIlxcbiIpOwogICAgIHByaW50ZWRDaGFyYWN0ZXJzICs9IGZwcmludGYo
c3RkZXJyLCAiJXNcdCVwIiwgYm94TmFtZSgpLCB0aGlzKTsKICAgICBmb3IgKDsgcHJpbnRlZENo
YXJhY3RlcnMgPCBzaG93VHJlZUNoYXJhY3Rlck9mZnNldDsgcHJpbnRlZENoYXJhY3RlcnMrKykK
ICAgICAgICAgZnB1dGMoJyAnLCBzdGRlcnIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3Iu
Y3BwCmluZGV4IDZjZjc5MzcuLjIxZWZmODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YU0xUUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nv
ci5jcHAKQEAgLTQ5LDggKzQ5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIGlubGlu
ZSB2b2lkIHRyYW5zZm9ybVRleHRTdHJpbmdUb1hIVE1MRG9jdW1lbnRTdHJpbmcoU3RyaW5nJiB0
ZXh0KQogewogICAgIC8vIE1vZGlmeSB0aGUgb3V0cHV0IHNvIHRoYXQgaXQgaXMgYSB3ZWxsLWZv
cm1lZCBYSFRNTCBkb2N1bWVudCB3aXRoIGEgPHByZT4gdGFnIGVuY2xvc2luZyB0aGUgdGV4dC4K
LSAgICB0ZXh0LnJlcGxhY2UoJyYnLCAiJmFtcDsiKTsKLSAgICB0ZXh0LnJlcGxhY2UoJzwnLCAi
Jmx0OyIpOworICAgIHRleHQucmVwbGFjZVdpdGhMaXRlcmFsKCcmJywgIiZhbXA7Iik7CisgICAg
dGV4dC5yZXBsYWNlV2l0aExpdGVyYWwoJzwnLCAiJmx0OyIpOwogICAgIHRleHQgPSAiPD94bWwg
dmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG4iCiAgICAgICAgICI8IURPQ1RZ
UEUgaHRtbCBQVUJMSUMgXCItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTlwiIFwiaHR0
cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZFwiPlxuIgogICAg
ICAgICAiPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+XG4iCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwppbmRleCBiYjg4OGJhLi43MDgzYmQ0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0xMS0wNiAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAgIEFk
ZCByZXBsYWNlV2l0aExpdGVyYWwoKSBtZXRob2QgdG8gV1RGOjpTdHJpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTI1NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1YnN0aXR1dGUgU3RyaW5nOjpy
ZXBsYWNlKCkgY2FsbHMgYnkgU3RyaW5nOjpyZXBsYWNlV2l0aExpdGVyYWwoKSB3aGVyZQorICAg
ICAgICBhZGVxdWF0ZSwgZm9yIGVmZmljaWVuY3kuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9TZWxlY3RQb3B1cENsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RQb3B1cENs
aWVudDo6Z2VuZXJhdGVIVE1MKToKKwogMjAxMi0xMS0wNiAgR2VuZXZpZXZlIE1hayAgPGdtYWtA
cmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQ3Jhc2ggaW4gSW5SZWdpb25TY3JvbGxl
clByaXZhdGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvU2VsZWN0UG9wdXBDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50LmNwcAppbmRleCA5OWQxYTA2Li5iMzdiNWU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvU2Vs
ZWN0UG9wdXBDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3Jl
U3VwcG9ydC9TZWxlY3RQb3B1cENsaWVudC5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBTZWxl
Y3RQb3B1cENsaWVudDo6Z2VuZXJhdGVIVE1MKGJvb2wgbXVsdGlwbGUsIGludCBzaXplLCBjb25z
dCBTY29wZUFycmF5PEIKICAgICAvLyBBZGQgbGFiZWxzLgogICAgIHNvdXJjZS5hcHBlbmQoJ1sn
KTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBzb3VyY2Uu
YXBwZW5kKCInIiArIFN0cmluZyhsYWJlbHNbaV0pLnJlcGxhY2UoJ1xcJywgIlxcXFwiKS5yZXBs
YWNlKCdcJycsICJcXCciKSArICInIik7CisgICAgICAgIHNvdXJjZS5hcHBlbmQoIiciICsgU3Ry
aW5nKGxhYmVsc1tpXSkucmVwbGFjZVdpdGhMaXRlcmFsKCdcXCcsICJcXFxcIikucmVwbGFjZVdp
dGhMaXRlcmFsKCdcJycsICJcXCciKSArICInIik7CiAgICAgICAgIC8vIERvbid0IGFwcGVuZCAn
LCcgdG8gbGFzdCBlbGVtZW50LgogICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkKICAgICAgICAg
ICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCIsICIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGYwMTQzN2MuLjA5
YzFhZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0xMS0wNiAgQ2hyaXN0b3Bo
ZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAgIEFkZCByZXBs
YWNlV2l0aExpdGVyYWwoKSBtZXRob2QgdG8gV1RGOjpTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTI1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1YnN0aXR1dGUgU3RyaW5nOjpyZXBsYWNl
KCkgY2FsbHMgYnkgU3RyaW5nOjpyZXBsYWNlV2l0aExpdGVyYWwoKSB3aGVyZQorICAgICAgICBh
ZGVxdWF0ZSwgZm9yIGVmZmljaWVuY3kuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwOgorICAgICAgICAoV2ViS2l0OjptYWtl
VVJMU3RyaW5nKToKKwogMjAxMi0xMS0wNiAgVml2ZWsgR2FsYXRhZ2UgIDx2aXZla2dhbGF0YWdl
QGdtYWlsLmNvbT4KIAogICAgICAgICBNb3ZlIERyYXdpbmdBcmVhSW1wbCBtZXRob2RzIGdyYXBo
aWNzTGF5ZXJGYWN0b3J5LCBzZXRSb290Q29tcG9zaXRpbmdMYXllciAmIHNjaGVkdWxlQ29tcG9z
aXRpbmdMYXllclN5bmMgdW5kZXIgQUNDRUxFUkFURURfQ09NUE9TSVRJTkcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dz
ZXJGdW5jcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwCmluZGV4IDRhMmI1MmYuLjVkYTQzYTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJy
b3dzZXJGdW5jcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcApAQCAtMjczLDggKzI3Myw4IEBAIHN0YXRp
YyBTdHJpbmcgbWFrZVVSTFN0cmluZyhjb25zdCBjaGFyKiB1cmwpCiAgICAgU3RyaW5nIHVybFN0
cmluZyh1cmwpOwogICAgIAogICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzLgotICAgIHVy
bFN0cmluZy5yZXBsYWNlKCdccicsICIiKTsKLSAgICB1cmxTdHJpbmcucmVwbGFjZSgnXG4nLCAi
Iik7CisgICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXHInLCAiIik7CisgICAgdXJs
U3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXG4nLCAiIik7CiAKICAgICByZXR1cm4gdXJsU3Ry
aW5nOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDRiMzgwOTguLjhlMWY3NjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0xMS0wNiAgQ2hyaXN0b3BoZSBE
dW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAgIEFkZCByZXBsYWNl
V2l0aExpdGVyYWwoKSBtZXRob2QgdG8gV1RGOjpTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTI1NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBBUEkgdGVzdHMgZm9yIFN0cmluZzo6cmVw
bGFjZVdpdGhMaXRlcmFsKCkgYW5kIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgU3RyaW5nSW1wbCBt
ZXRob2RzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDogQWRkIFdU
RlN0cmluZyBBUEkgdGVzdHMgdG8gQ01ha2UuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEkpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1dURlN0cmluZy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxMi0x
MS0wNiAgRGFuIEJlYW0gIDxkYmVhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRW5hYmxlIFJF
UVVFU1RfQVVUT0NPTVBMRVRFIGZvciBjaHJvbWl1bSBwb3J0CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dAppbmRleCBjNGU0MjdlLi4xNjNlZGM3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0
cy50eHQKQEAgLTg0LDYgKzg0LDcgQEAgQUREX0VYRUNVVEFCTEUodGVzdF93dGYKICAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvVmVjdG9yLmNwcAogICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9WZWN0b3JCYXNpYy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XVEYvVmVjdG9yUmV2ZXJzZS5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XVEYvV1RGU3RyaW5nLmNwcAogKQogCiBUQVJHRVRfTElOS19MSUJSQVJJRVModGVzdF93
dGYgJHt0ZXN0X3d0Zl9MSUJSQVJJRVN9KQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9TdHJpbmdJbXBsLmNwcAppbmRleCAyMTNhNjU1Li4zNWQ2NDg0IDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CiAKQEAgLTY4LDQgKzY5LDQ4IEBAIFRFU1QoV1RGLCBTdHJpbmdJbXBsRnJvbUxpdGVyYWxMb29w
MTZCaXRDb252ZXJzaW9uKQogICAgIH0KIH0KIAorVEVTVChXVEYsIFN0cmluZ0ltcGxSZXBsYWNl
V2l0aExpdGVyYWwpCit7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHRlc3RTdHJpbmdJbXBsID0g
U3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoIjEyMjQiKTsKKyAgICBBU1NFUlRfVFJVRSh0
ZXN0U3RyaW5nSW1wbC0+aXM4Qml0KCkpOworCisgICAgLy8gQ2FzZXMgZm9yIDhCaXQgc291cmNl
LgorICAgIHRlc3RTdHJpbmdJbXBsID0gdGVzdFN0cmluZ0ltcGwtPnJlcGxhY2UoJzInLCAiIiwg
MCk7CisgICAgQVNTRVJUX1RSVUUoZXF1YWwodGVzdFN0cmluZ0ltcGwuZ2V0KCksICIxNCIpKTsK
KworICAgIHRlc3RTdHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVyYWwoIjEy
MjQiKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0U3RyaW5nSW1wbC0+aXM4Qml0KCkpOworCisgICAg
dGVzdFN0cmluZ0ltcGwgPSB0ZXN0U3RyaW5nSW1wbC0+cmVwbGFjZSgnMycsICJOb3RGb3VuZCIs
IDgpOworICAgIEFTU0VSVF9UUlVFKGVxdWFsKHRlc3RTdHJpbmdJbXBsLmdldCgpLCAiMTIyNCIp
KTsKKworICAgIHRlc3RTdHJpbmdJbXBsID0gdGVzdFN0cmluZ0ltcGwtPnJlcGxhY2UoJzInLCAi
MyIsIDEpOworICAgIEFTU0VSVF9UUlVFKGVxdWFsKHRlc3RTdHJpbmdJbXBsLmdldCgpLCAiMTMz
NCIpKTsKKworICAgIHRlc3RTdHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxpdGVy
YWwoIjEyMjQiKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0U3RyaW5nSW1wbC0+aXM4Qml0KCkpOwor
ICAgIHRlc3RTdHJpbmdJbXBsID0gdGVzdFN0cmluZ0ltcGwtPnJlcGxhY2UoJzInLCAiNTU1Iiwg
Myk7CisgICAgQVNTRVJUX1RSVUUoZXF1YWwodGVzdFN0cmluZ0ltcGwuZ2V0KCksICIxNTU1NTU1
NCIpKTsKKworICAgIC8vIENhc2VzIGZvciAxNkJpdCBzb3VyY2UuCisgICAgU3RyaW5nIHRlc3RT
dHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KCJyw6lzdW3DqSIpOworICAgIEFTU0VSVF9GQUxTRSh0
ZXN0U3RyaW5nLmltcGwoKS0+aXM4Qml0KCkpOworCisgICAgdGVzdFN0cmluZ0ltcGwgPSB0ZXN0
U3RyaW5nLmltcGwoKS0+cmVwbGFjZSgnMicsICJOb3RGb3VuZCIsIDgpOworICAgIEFTU0VSVF9U
UlVFKGVxdWFsKHRlc3RTdHJpbmdJbXBsLmdldCgpLCBTdHJpbmc6OmZyb21VVEY4KCJyw6lzdW3D
qSIpLmltcGwoKSkpOworCisgICAgdGVzdFN0cmluZ0ltcGwgPSB0ZXN0U3RyaW5nLmltcGwoKS0+
cmVwbGFjZShVQ2hhcigweDAwRTkgLypVKzAwRTkgaXMgJ8OpJyovKSwgImUiLCAxKTsKKyAgICBB
U1NFUlRfVFJVRShlcXVhbCh0ZXN0U3RyaW5nSW1wbC5nZXQoKSwgInJlc3VtZSIpKTsKKworICAg
IHRlc3RTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KCJyw6lzdW3DqSIpOworICAgIEFTU0VSVF9G
QUxTRSh0ZXN0U3RyaW5nLmltcGwoKS0+aXM4Qml0KCkpOworICAgIHRlc3RTdHJpbmdJbXBsID0g
dGVzdFN0cmluZy5pbXBsKCktPnJlcGxhY2UoVUNoYXIoMHgwMEU5IC8qVSswMEU5IGlzICfDqScq
LyksICIiLCAwKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbCh0ZXN0U3RyaW5nSW1wbC5nZXQoKSwg
InJzdW0iKSk7CisKKyAgICB0ZXN0U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOCgicsOpc3Vtw6ki
KTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdFN0cmluZy5pbXBsKCktPmlzOEJpdCgpKTsKKyAgICB0
ZXN0U3RyaW5nSW1wbCA9IHRlc3RTdHJpbmcuaW1wbCgpLT5yZXBsYWNlKFVDaGFyKDB4MDBFOSAv
KlUrMDBFOSBpcyAnw6knKi8pLCAiNTU1IiwgMyk7CisgICAgQVNTRVJUX1RSVUUoZXF1YWwodGVz
dFN0cmluZ0ltcGwuZ2V0KCksICJyNTU1c3VtNTU1IikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9X
VEZTdHJpbmcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV1RGU3RyaW5nLmNw
cAppbmRleCAxNTU3NzJmLi40YTkyY2Q0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9XVEZTdHJpbmcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1dURlN0cmluZy5jcHAKQEAgLTExNSw3ICsxMTUsNDUgQEAgVEVTVChXVEYsIFN0cmluZ051
bWJlclRvU3RyaW5nRUNNQVNjcmlwdFJlZ3VsYXJOdW1iZXJzKQogICAgIHRlc3ROdW1iZXJUb1N0
cmluZ0VDTUFTY3JpcHQocGhpLCAiMS42MTgwMzM5ODg3NDk4OTUiKTsKIH0KIAotCitURVNUKFdU
RiwgU3RyaW5nUmVwbGFjZVdpdGhMaXRlcmFsKQoreworICAgIC8vIENhc2VzIGZvciA4Qml0IHNv
dXJjZS4KKyAgICBTdHJpbmcgdGVzdFN0cmluZyA9ICIxMjI0IjsKKyAgICBBU1NFUlRfVFJVRSh0
ZXN0U3RyaW5nLmlzOEJpdCgpKTsKKyAgICB0ZXN0U3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgn
MicsICIiKTsKKyAgICBBU1NFUlRfU1RSRVEoIjE0IiwgdGVzdFN0cmluZy51dGY4KCkuZGF0YSgp
KTsKKworICAgIHRlc3RTdHJpbmcgPSAiMTIyNCI7CisgICAgQVNTRVJUX1RSVUUodGVzdFN0cmlu
Zy5pczhCaXQoKSk7CisgICAgdGVzdFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJzInLCAiMyIp
OworICAgIEFTU0VSVF9TVFJFUSgiMTMzNCIsIHRlc3RTdHJpbmcudXRmOCgpLmRhdGEoKSk7CisK
KyAgICB0ZXN0U3RyaW5nID0gIjEyMjQiOworICAgIEFTU0VSVF9UUlVFKHRlc3RTdHJpbmcuaXM4
Qml0KCkpOworICAgIHRlc3RTdHJpbmcucmVwbGFjZVdpdGhMaXRlcmFsKCcyJywgIjU1NSIpOwor
ICAgIEFTU0VSVF9TVFJFUSgiMTU1NTU1NTQiLCB0ZXN0U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwor
CisgICAgdGVzdFN0cmluZyA9ICIxMjI0IjsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0U3RyaW5nLmlz
OEJpdCgpKTsKKyAgICB0ZXN0U3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnMycsICJOb3RGb3Vu
ZCIpOworICAgIEFTU0VSVF9TVFJFUSgiMTIyNCIsIHRlc3RTdHJpbmcudXRmOCgpLmRhdGEoKSk7
CisKKyAgICAvLyBDYXNlcyBmb3IgMTZCaXQgc291cmNlLgorICAgIHRlc3RTdHJpbmcgPSBTdHJp
bmc6OmZyb21VVEY4KCJyw6lzdW3DqSIpOworICAgIEFTU0VSVF9GQUxTRSh0ZXN0U3RyaW5nLmlz
OEJpdCgpKTsKKyAgICB0ZXN0U3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbChVQ2hhcigweDAwRTkg
LypVKzAwRTkgaXMgJ8OpJyovKSwgImUiKTsKKyAgICBBU1NFUlRfU1RSRVEoInJlc3VtZSIsIHRl
c3RTdHJpbmcudXRmOCgpLmRhdGEoKSk7CisKKyAgICB0ZXN0U3RyaW5nID0gU3RyaW5nOjpmcm9t
VVRGOCgicsOpc3Vtw6kiKTsKKyAgICBBU1NFUlRfRkFMU0UodGVzdFN0cmluZy5pczhCaXQoKSk7
CisgICAgdGVzdFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoVUNoYXIoMHgwMEU5IC8qVSswMEU5
IGlzICfDqScqLyksICIiKTsKKyAgICBBU1NFUlRfU1RSRVEoInJzdW0iLCB0ZXN0U3RyaW5nLnV0
ZjgoKS5kYXRhKCkpOworCisgICAgdGVzdFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoInLDqXN1
bcOpIik7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3RTdHJpbmcuaXM4Qml0KCkpOworICAgIHRlc3RT
dHJpbmcucmVwbGFjZVdpdGhMaXRlcmFsKCczJywgIk5vdEZvdW5kIik7CisgICAgQVNTRVJUX1NU
UkVRKCJyw6lzdW3DqSIsIHRlc3RTdHJpbmcudXRmOCgpLmRhdGEoKSk7Cit9CiAKIAogfSAvLyBu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>