<?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>44114</bug_id>
          
          <creation_ts>2010-08-17 09:44:15 -0700</creation_ts>
          <short_desc>[Qt] Missing spell check support</short_desc>
          <delta_ts>2011-08-21 04:53:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dawit A.">adawit</reporter>
          <assigned_to name="Fabrizio">fabrizio.machado</assigned_to>
          <cc>andre.pedralho</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>cshu</cc>
    
    <cc>dvdxvr</cc>
    
    <cc>fabrizio.machado</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lindsay.mathieson</cc>
    
    <cc>morrita</cc>
    
    <cc>ossy</cc>
    
    <cc>pano_90</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>265608</commentid>
    <comment_count>0</comment_count>
    <who name="Dawit A.">adawit</who>
    <bug_when>2010-08-17 09:44:15 -0700</bug_when>
    <thetext>Even though webkit already provides the necessary place holder APIs for spell checking and this feature has been implemented in most of the other rendering engine ports, it is still missing from QtWebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267983</commentid>
    <comment_count>1</comment_count>
    <who name="">pano_90</who>
    <bug_when>2010-08-23 10:37:47 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=42100 looks like a duplicate of this (or the other way around :-P)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267986</commentid>
    <comment_count>2</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-08-23 10:40:52 -0700</bug_when>
    <thetext>*** Bug 42100 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324029</commentid>
    <comment_count>3</comment_count>
    <who name="Andre Pedralho">andre.pedralho</who>
    <bug_when>2010-12-17 16:08:15 -0800</bug_when>
    <thetext>Adding myself to the CC list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339700</commentid>
    <comment_count>4</comment_count>
    <who name="Fabrizio">fabrizio.machado</who>
    <bug_when>2011-01-25 09:45:44 -0800</bug_when>
    <thetext>Investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385683</commentid>
    <comment_count>5</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-04-14 05:44:53 -0700</bug_when>
    <thetext>@Fabrizio: Still investigating?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385719</commentid>
    <comment_count>6</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-04-14 06:32:47 -0700</bug_when>
    <thetext>Working on it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446312</commentid>
    <comment_count>7</comment_count>
      <attachid>102872</attachid>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-03 21:14:36 -0700</bug_when>
    <thetext>Created attachment 102872
proposed patch I

Since there has been no movement on this for almost a year, I have taken the liberty of cleaning up Lindsay&apos;s patch[1] just a tad bit from and proposing it to get the ball rolling. The main goal here is to finally get spelling checking support for QtWebKit which at the moment lacks any such support unlike most of the other webkit ports.

[1] https://gitorious.org/~blackpaw/webkit/webkit-qt-inline-spell</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446314</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-03 21:16:46 -0700</bug_when>
    <thetext>Attachment 102872 did not pass style-queue:

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

Source/WebKit/qt/WebCoreSupport/EditorClientQt.h:46:  The parameter name &quot;page&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:121:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:655:  Missing spaces around =  [whitespace/operators] [4]
Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:655:  Missing space before ( in for(  [whitespace/parens] [5]
Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:657:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebKit/qt/Api/qwebkitplatformplugin.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/Api/qwebkitplatformplugin.h:142:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 7 in 8 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>446321</commentid>
    <comment_count>9</comment_count>
      <attachid>102875</attachid>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-03 21:35:53 -0700</bug_when>
    <thetext>Created attachment 102875
proposed patch II

Fixed coding style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446329</commentid>
    <comment_count>10</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-08-03 21:41:30 -0700</bug_when>
    <thetext>Why don&apos;t you make separate SpellCheckingClientQt class?
We now have WebCore::SpellCheckingClient which is extracted from WebCore::EditorClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446330</commentid>
    <comment_count>11</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-03 21:58:35 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=102872) [details]
&gt; proposed patch I
&gt; 
&gt; Since there has been no movement on this for almost a year, I have taken the liberty of cleaning up Lindsay&apos;s patch[1] just a tad bit from and proposing it to get the ball rolling. The main goal here is to finally get spelling checking support for QtWebKit which at the moment lacks any such support unlike most of the other webkit ports.


Thanks Dawit, I got so far and then got severely distracted :(

I&apos;ll apply the patch and your to my branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446359</commentid>
    <comment_count>12</comment_count>
      <attachid>102875</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-04 00:16:50 -0700</bug_when>
    <thetext>Comment on attachment 102875
proposed patch II

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

Quick review, first round :)

&gt; Source/WebCore/ChangeLog:1
&gt; +2011-08-03  Dawit Alemayehu  &lt;adawit@kde.org&gt;

I don&apos;t know who did what, but if it is you both worked ~equally on it, you would be fair to add Lindsay as author in the Changelog:
&quot;Dawit Alemayehu  &lt;adawit@kde.org&gt; and Lindsay Mathieson &lt;lindsay.mathieson@gmail.com&gt;&quot;

&gt; Source/WebCore/ChangeLog:7
&gt; +        [Qt] Missing spell check support
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=44114
&gt; +

You need a description of the changes here.

&gt; Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp:903
&gt; +static void drawErrorUnderline(QPainter *painter, double x, double y, double width, double height)

qreal is prefered to double here due to the platforms on which double is a lot slower than float.

This code is not trivial to read and I am too lazy to read it now :)
Is there no way this could be made easier to read by splitting it in small-ish inline functions?

&gt; Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp:905
&gt; +    static const double heightSquares = 2.5;

No need for &apos;static&apos; here.

&gt; Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp:921
&gt; +    path.moveTo(x - halfSquare, top + halfSquare); // A

What&apos;s those // A, B, C etc comments?

&gt; Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp:979
&gt; +    QPainter* painter = platformContext();
&gt; +    painter-&gt;save();
&gt; +
&gt; +    switch (style) {
&gt; +    case TextCheckingSpellingLineStyle:
&gt; +        painter-&gt;setPen(QColor(255, 0, 0));
&gt; +        break;
&gt; +    case TextCheckingGrammarLineStyle:
&gt; +        painter-&gt;setPen(QColor(0, 255, 0));
&gt; +        break;
&gt; +    default:
&gt; +        painter-&gt;restore();
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    drawErrorUnderline(painter, origin.x(), origin.y(), width, cMisspellingLineThickness);
&gt; +    painter-&gt;restore();

QPainter::save() and QPainter::restore() is not free because the whole state has to be changed.
A good practice is to restore the previous state manually when possible.

e.g.:
const QPen originalPen = painter.pen();
...
painter.setPen(XXX);
...
drawErrorUnderUnderline(....);
painter.setPen(originalPen);

Instead of those QColor for the pen, you should use the constant Qt::red and Qt::green to make the code easier to read.

&gt; Source/WebKit/qt/Api/qwebkitplatformplugin.h:40
&gt;  
&gt; +
&gt; +
&gt;  class QWebSelectData {

Change to revert :)

&gt; Source/WebKit/qt/ChangeLog:7
&gt; +        [Qt] Missing spell check support
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=44114
&gt; +

This needs a description.

&gt; Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:62
&gt;  
&gt; +
&gt;  #define methodDebug() qDebug(&quot;EditorClientQt: %s&quot;, __FUNCTION__);

To remove :)

&gt; Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:332
&gt; +    freeSpellChecker();

This can be removed entirely if you use OwnPtr :)

&gt; Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:546
&gt; +    : m_page(page), m_spellChecker(0), m_editing(false), m_inUndoRedo(false)

You can split this on 4 lines for clarity.

&gt; Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:590
&gt; +    m_spellChecker-&gt;ignoreWord(word);

This should be learnWord() instead of ignoreWord()

&gt; Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:593
&gt; +void EditorClientQt::checkSpellingOfString(const UChar *word, int length, int* misspellingLocation, int* misspellingLength)

WebKit coding style:
const UChar* word;

&gt; Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:598
&gt; +    const QString str(reinterpret_cast&lt;QChar const*&gt;(word), length);

static_cast does not do the job here? I  would expect UChar and QChar to be of compatible types.
For the coding conventions: QChar const* -&gt; const QChar*

I think QString::fromRawData() would be a better choice than the regular constructor here. QString::fromRawData() does not copy the data to create the string.

&gt; Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:714
&gt; +        qWarning() &lt;&lt; Q_FUNC_INFO &lt;&lt; &quot;No spell checker found&quot; &lt;&lt; endl;

Not sure about the warning...
People do not like warnings when they did nothing wrong with their code. I think you should remove it (or use WebKit logging facilities?).

&gt; Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:727
&gt; +    if (!m_spellChecker)
&gt; +        return;
&gt; +
&gt; +    delete m_spellChecker;
&gt; +    m_spellChecker = 0;

Just for info: deleting a null ptr is safe, so the if(!m_spellChecker) is overkill.

&gt; Source/WebKit/qt/WebCoreSupport/EditorClientQt.h:123
&gt; +    QWebSpellChecker* m_spellChecker;

You should use a OwnPtr&lt;QWebSpellChecker&gt;, and you can remove freeSpellChecker() and just call  m_spellChecker = nullptr; when needed.

In general, in WebKit, when possible we use smart pointers instead of deleting stuff manually. That makes it a lot harder to leak memory by accident.
WebKit has a very good set of smart pointers in wtf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446364</commentid>
    <comment_count>13</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-04 00:28:50 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Why don&apos;t you make separate SpellCheckingClientQt class?
&gt; We now have WebCore::SpellCheckingClient which is extracted from WebCore::EditorClient.

I guess you mean TextCheckerClient. It seems like a good idea to implement that client instead of modifying the editor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446720</commentid>
    <comment_count>14</comment_count>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-04 13:11:35 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #10)
&gt; &gt; Why don&apos;t you make separate SpellCheckingClientQt class?
&gt; &gt; We now have WebCore::SpellCheckingClient which is extracted from WebCore::EditorClient.
&gt; 
&gt; I guess you mean TextCheckerClient. It seems like a good idea to implement that client instead of modifying the editor.

I guess that can be done. However, EditorClientQt already inherited from both EditorClient and TextCheckerClient and neither myself nor Lindsay who did 99.999% of the work did not change that. Anyhow, I myself thought about doing that already since it makes things a lot more cleaner ; so I too think it would be a good idea to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446937</commentid>
    <comment_count>15</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-08-04 17:54:39 -0700</bug_when>
    <thetext>&gt; I guess that can be done. However, EditorClientQt already inherited from both EditorClient and TextCheckerClient and neither myself nor Lindsay who did 99.999% of the work did not change that. Anyhow, I myself thought about doing that already since it makes things a lot more cleaner ; so I too think it would be a good idea to do that.
Well, TextCheckerClient is a interface which was extracted from EditorClient,
thus it works with how current patch is doing.
So as you mentioned, separating class into two is just a nice to have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447199</commentid>
    <comment_count>16</comment_count>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-05 07:25:05 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt;&gt; Source/WebCore/ChangeLog:1
&gt;&gt; +2011-08-03  Dawit Alemayehu  &lt;adawit@kde.org&gt;
&gt;
&gt; I don&apos;t know who did what, but if it is you both worked ~equally on it, you
&gt; would be fair to add Lindsay as author in the Changelog:
&gt; &quot;Dawit Alemayehu  &lt;adawit@kde.org&gt; and Lindsay Mathieson
&gt; &lt;lindsay.mathieson@gmail.com&gt;&quot;

That was not intentional. I always use ./Tools/Scripts/prepare-ChangeLog to generate the changelog so I forgot to actually change the author field. It is Lindsay that did most of the work ; so I will remedy that promptly. Thanks for pointing
it out.

&gt;&gt; Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp:903
&gt;&gt; +static void drawErrorUnderline(QPainter *painter, double x, double y, double
&gt; width, double height)
&gt;
&gt; qreal is prefered to double here due to the platforms on which double is a lot
&gt; slower than float.
&gt;
&gt; This code is not trivial to read and I am too lazy to read it now :)
&gt; Is there no way this could be made easier to read by splitting it in small-ish
&gt; inline functions?

I am sure it can be simplified. The current version seems to have been copied
from the cairo port, Source/WebCore/platform/graphics/cairo/DrawErrorUnderline.h.

Personally I would love to see and perhaps emulate how QTextDocument
or QTextEdit render such lines when the underline style is set to QTextCharFormat::SpellCheckUnderline. Unofrtunately, I have not yet been able to figure out where that code is located.

&gt;&gt; Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp:905
&gt;&gt; +    static const double heightSquares = 2.5;
&gt;
&gt; No need for &apos;static&apos; here.
&gt;
&gt;&gt; Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp:921
&gt;&gt; +    path.moveTo(x - halfSquare, top + halfSquare); // A
&gt;
&gt; What&apos;s those // A, B, C etc comments?

I guess Lindsay did not bother to copy the explanation about those comments. That can be remedied.

&gt;&gt; Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp:598
&gt;&gt; +    const QString str(reinterpret_cast&lt;QChar const*&gt;(word), length);
&gt;
&gt; static_cast does not do the job here? I  would expect UChar and QChar to be of
&gt; compatible types.

Nope. You get compiler error about illegal case when you do that.

Next round coming up... :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447202</commentid>
    <comment_count>17</comment_count>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-05 07:29:12 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #7)
&gt; &gt; Created an attachment (id=102872) [details] [details]
&gt; &gt; proposed patch I
&gt; &gt; 
&gt; &gt; Since there has been no movement on this for almost a year, I have taken the liberty of cleaning up Lindsay&apos;s patch[1] just a tad bit from and proposing it to get the ball rolling. The main goal here is to finally get spelling checking support for QtWebKit which at the moment lacks any such support unlike most of the other webkit ports.
&gt; 
&gt; 
&gt; Thanks Dawit, I got so far and then got severely distracted :(

No problems. You did most of the heavy lifting. Let us see if I can help carry this to the finish line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447217</commentid>
    <comment_count>18</comment_count>
      <attachid>103074</attachid>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-05 08:35:39 -0700</bug_when>
    <thetext>Created attachment 103074
proposed patch III

Addessed all the issues pointed out in comment #12. Also moved the implementation of TextCheckerClient into its own separate file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447218</commentid>
    <comment_count>19</comment_count>
      <attachid>103075</attachid>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-05 08:40:31 -0700</bug_when>
    <thetext>Created attachment 103075
proposed patch IV

Previous patch was not complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447220</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-05 08:44:02 -0700</bug_when>
    <thetext>Attachment 103075 did not pass style-queue:

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

Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.h:51:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 2 in 11 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>447299</commentid>
    <comment_count>21</comment_count>
      <attachid>103087</attachid>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-05 11:18:42 -0700</bug_when>
    <thetext>Created attachment 103087
proposed patch V

Fixed coding style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447316</commentid>
    <comment_count>22</comment_count>
      <attachid>103087</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-05 11:45:42 -0700</bug_when>
    <thetext>Comment on attachment 103087
proposed patch V

Do you plan to upstream the plugin as well?

Because we want to be able to break the API of the plugin if necessary (adding methods for example).

This is much easier if the plugins are also upstreamed.
I would not mind at all a KDE plugin in WebKit trunk if that can be done in a clean way.

If upstreaming the plugin cannot be done, we might do some stuff differently.

I already cq- because I do not want this to land before deployment is clarified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447966</commentid>
    <comment_count>23</comment_count>
      <attachid>103087</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-08 05:46:13 -0700</bug_when>
    <thetext>Comment on attachment 103087
proposed patch V

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

&gt; Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp:906
&gt; + *   NOTE: This code is completely based upon the one from
&gt; + *   Source/WebCore/platform/graphics/cairo/DrawErrorUnderline.{h|cpp}

Hehe, one thing not to review :)

&gt; Source/WebKit/qt/Api/qwebkitplatformplugin.h:25
&gt; +#include &quot;qwebkitglobal.h&quot;
&gt; +

Why does this plugin require QWEBKIT_EXPORT and not the others?

(My guess was they all need it, but the other plugins works. What&apos;s up with that?)

&gt; Source/WebKit/qt/WebCoreSupport/QtPlatformPlugin.cpp:141
&gt; +QWebSpellChecker* QtPlatformPlugin::createSpellChecker()
&gt; +{
&gt; +    QWebKitPlatformPlugin* p = plugin();
&gt; +    return p ? static_cast&lt;QWebSpellChecker*&gt;(p-&gt;createExtension(QWebKitPlatformPlugin::SpellChecker)) : 0;
&gt; +}

You should return a PassOwnPtr&lt;QWebSpellChecker&gt; like the other functions, that would be a lot cleaner for the caller.

I would also prefer a real variable name, like &quot;platformPlugin&quot;, instead of p.

&gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:47
&gt; +{
&gt; +    m_spellChecker = nullptr;
&gt; +}

No need to do that, the destructor of OwnPtr cleans the memory for you.

&gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:83
&gt; +String TextCheckerClientQt::getAutoCorrectSuggestionForMisspelledWord(const String&amp; misspelledWord)
&gt; +{
&gt; +    notImplemented();
&gt; +    return String();
&gt; +}
&gt; +
&gt; +void TextCheckerClientQt::checkGrammarOfString(const UChar*, int length, Vector&lt;GrammarDetail&gt;&amp;, int*, int*)
&gt; +{
&gt; +    notImplemented();
&gt; +}

I think you should add those to the plugin unless you have a good reason.
If those methods were useful for a port, they are likely useful on one of the platform Qt supports.

&gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:92
&gt; +    for (int i = 0, count = guessesList.count(); i &lt; count; ++i)

I would prefer count = guessesList.count() to have its own variable outside the for() for readability.
It would also be a good idea to resize the vector &quot;guesses&quot; to the final size before the loop in order to avoid realloc during the loop.

&gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:120
&gt; +    return (m_spellChecker ? true : false);

return !!m_spellChecker;

&gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.h:35
&gt; +#include &quot;TextCheckerClient.h&quot;
&gt; +#include &quot;qwebkitplatformplugin.h&quot;
&gt; +
&gt; +#include &lt;wtf/Forward.h&gt;

You should also explicitely include OwnPtr.

&gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.h:38
&gt; +class QWebSpellChecker;
&gt; +

This is not needed. You must #include &quot;qwebkitplatformplugin.h&quot; due to the OnwPtr (because the destructor of the object is called by OwnPtr).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447967</commentid>
    <comment_count>24</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-08 05:47:20 -0700</bug_when>
    <thetext>The patch is very close to be landed I think. Probably just one more round.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447978</commentid>
    <comment_count>25</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-08 07:03:32 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 103087 [details])

&gt; 
&gt; Why does this plugin require QWEBKIT_EXPORT and not the others?
&gt; 
&gt; (My guess was they all need it, but the other plugins works. What&apos;s up with that?)

Its neccessary for statically linked plugins defined in a hosting app, otherwise you get link errors. And yes, the other plugins need it to, but I didn&apos;t want to alter stuff outside the spell checking area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447991</commentid>
    <comment_count>26</comment_count>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-08 07:42:05 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #23)
&gt; &gt; (From update of attachment 103087 [details] [details])
&gt; 
&gt; &gt; 
&gt; &gt; Why does this plugin require QWEBKIT_EXPORT and not the others?
&gt; &gt; 
&gt; &gt; (My guess was they all need it, but the other plugins works. What&apos;s up with that?)
&gt; 
&gt; Its neccessary for statically linked plugins defined in a hosting app, otherwise you get link errors. And yes, the other plugins need it to, but I didn&apos;t want to alter stuff outside the spell checking area.

It is not only statically linked plugins that need it. If the plugin is an external plugin outside of the webkit, the exporting the plugins is required for dynamically linked in plugins as well. At least I get a linking error if the symbols are not exported for the spell checker plugin I attempted to create.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448021</commentid>
    <comment_count>27</comment_count>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-08 08:43:16 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 103087 [details])
&gt; Do you plan to upstream the plugin as well?
&gt; 
&gt; Because we want to be able to break the API of the plugin if necessary (adding methods for example).
&gt; 
&gt; This is much easier if the plugins are also upstreamed.
&gt; I would not mind at all a KDE plugin in WebKit trunk if that can be done in a clean way.
&gt; 
&gt; If upstreaming the plugin cannot be done, we might do some stuff differently.
&gt; 
&gt; I already cq- because I do not want this to land before deployment is clarified.

Well I am not certain how to handle this either. However, since there is no API guarantee for the platform plugins, then there is no other option but to include the platform specific spell checker plugins into QtWebKit&apos;s code base much like the symbian plugins are now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448067</commentid>
    <comment_count>28</comment_count>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-08 10:11:20 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; I would also prefer a real variable name, like &quot;platformPlugin&quot;, instead of p.

Does that mean the other functions should be changed as well ? Would it not be consistent to leave this alone especially since the QWebKitPlatformPlugin right before it makes it clear what &quot;p&quot; actually is ?

&gt; &gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:83
&gt; &gt; +String TextCheckerClientQt::getAutoCorrectSuggestionForMisspelledWord(const String&amp; misspelledWord)
&gt; &gt; +{
&gt; &gt; +    notImplemented();
&gt; &gt; +    return String();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void TextCheckerClientQt::checkGrammarOfString(const UChar*, int length, Vector&lt;GrammarDetail&gt;&amp;, int*, int*)
&gt; &gt; +{
&gt; &gt; +    notImplemented();
&gt; &gt; +}
&gt; 
&gt; I think you should add those to the plugin unless you have a good reason.
&gt; If those methods were useful for a port, they are likely useful on one of the platform Qt supports.

That can easily be recitfied for getAutoCorrectSuggestionForMisspelledWord. However, there is no easy way to accomplish that for the grammar checking function because it would require a structure that can be manipulated. IOW, how should that structure be passed to the corresponding function in QWebSpellChecker  ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448447</commentid>
    <comment_count>29</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-08 22:56:32 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #23)
&gt; &gt; &gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:83
&gt; &gt; &gt; +String TextCheckerClientQt::getAutoCorrectSuggestionForMisspelledWord(const String&amp; misspelledWord)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    notImplemented();
&gt; &gt; &gt; +    return String();
&gt; &gt; &gt; +}
&gt; &gt; &gt; +
&gt; &gt; &gt; +void TextCheckerClientQt::checkGrammarOfString(const UChar*, int length, Vector&lt;GrammarDetail&gt;&amp;, int*, int*)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    notImplemented();
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; I think you should add those to the plugin unless you have a good reason.
&gt; &gt; If those methods were useful for a port, they are likely useful on one of the platform Qt supports.
&gt; 
&gt; That can easily be recitfied for getAutoCorrectSuggestionForMisspelledWord. However, there is no easy way to accomplish that for the grammar checking function because it would require a structure that can be manipulated. IOW, how should that structure be passed to the corresponding function in QWebSpellChecker  ?



Also, I presumed grammar checking would a separate plugin to the Spell Checker - quite different functionality. PUMA U though of course, I&apos;ve never worked with grammar checker libraries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448506</commentid>
    <comment_count>30</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-09 04:20:37 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; That can easily be recitfied for getAutoCorrectSuggestionForMisspelledWord. However, there is no easy way to accomplish that for the grammar checking function because it would require a structure that can be manipulated. IOW, how should that structure be passed to the corresponding function in QWebSpellChecker  ?

The structure is quite simple: two integers, a Vector of String and one String. You could convert each list in the same way as you did for guessesList (maybe a helper function to convert Vector&lt;String&gt; to QStringList would be useful even outside this patch?).


&gt; Also, I presumed grammar checking would a separate plugin to the Spell Checker - quite different functionality. PUMA U though of course, I&apos;ve never worked with grammar checker libraries.

The system spell checker of Mac OS X (NSSpellChecker) supports both spelling and grammar.
It would be nice to make a Mac plugin once this patch is integrated, so I would like to have all the APIs ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448620</commentid>
    <comment_count>31</comment_count>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-09 09:33:23 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #22)
&gt; &gt; (From update of attachment 103087 [details] [details])
&gt; &gt; Do you plan to upstream the plugin as well?
&gt; &gt; 
&gt; &gt; Because we want to be able to break the API of the plugin if necessary (adding methods for example).
&gt; &gt; 
&gt; &gt; This is much easier if the plugins are also upstreamed.
&gt; &gt; I would not mind at all a KDE plugin in WebKit trunk if that can be done in a clean way.
&gt; &gt; 
&gt; &gt; If upstreaming the plugin cannot be done, we might do some stuff differently.
&gt; &gt; 
&gt; &gt; I already cq- because I do not want this to land before deployment is clarified.
&gt; 
&gt; Well I am not certain how to handle this either. However, since there is no API guarantee for the platform plugins, then there is no other option but to include the platform specific spell checker plugins into QtWebKit&apos;s code base much like the symbian plugins are now.

On second thought this is going to cause circular dependency. kdelibs depends on QtWebKit and if we add a kde platform specific plugin, then QtWebKit would depend on kdelibs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448985</commentid>
    <comment_count>32</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-09 22:49:09 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #28)
&gt; 
&gt; The system spell checker of Mac OS X (NSSpellChecker) supports both spelling and grammar.
&gt; It would be nice to make a Mac plugin once this patch is integrated, so I would like to have all the APIs ready.

Ok, I see now, that makes sense. in which case we should probably define &amp; implement:


    virtual bool isGrammarCheckingEnabled();
    virtual void toggleGrammarChecking();

in TextCheckerClientQt.h and use them in EditorClientQt should we not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448990</commentid>
    <comment_count>33</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-09 23:04:44 -0700</bug_when>
    <thetext>(In reply to comment #32)

ps and QWebSpellChecker to of course</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449075</commentid>
    <comment_count>34</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-10 04:07:17 -0700</bug_when>
    <thetext>&gt; Ok, I see now, that makes sense. in which case we should probably define &amp; implement:
&gt;
&gt;     virtual bool isGrammarCheckingEnabled();
&gt;     virtual void toggleGrammarChecking();
&gt; 
&gt; in TextCheckerClientQt.h and use them in EditorClientQt should we not?

Yes we should :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450402</commentid>
    <comment_count>35</comment_count>
      <attachid>103765</attachid>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-12 05:56:29 -0700</bug_when>
    <thetext>Created attachment 103765
proposed patch VI

Adds grammar checking support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450416</commentid>
    <comment_count>36</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-12 07:13:51 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; Adds grammar checking support

You forgot the changelog :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450418</commentid>
    <comment_count>37</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-12 07:20:47 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; You forgot the changelog :(

You can try the script webkit-patch to detect problems early.

For example, to submit the git head to bugzilla you do:
./Tools/Scripts/webkit-patch upload 44114 --request-commit -g HEAD

It will give you the opportunity to make the changelog, and will do the style checking for you. When adding the patch, the script also obsolete the previous patch and set the right flags for you.

The script is very convenient because it do all the boring stuff for you. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450420</commentid>
    <comment_count>38</comment_count>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-12 07:27:56 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #36)
&gt; &gt; You forgot the changelog :(
&gt; 
&gt; You can try the script webkit-patch to detect problems early.
&gt; 
&gt; For example, to submit the git head to bugzilla you do:
&gt; ./Tools/Scripts/webkit-patch upload 44114 --request-commit -g HEAD
&gt;
&gt; It will give you the opportunity to make the changelog, and will do the style checking for you. When adding the patch, the script also obsolete the previous patch and set the right flags for you.
&gt; 
&gt; The script is very convenient because it do all the boring stuff for you. :)

Did not know about that script either. I did all that by hand all this time. :(

@lindsay
Though I cannot reveiew the code directly, I have one suggestion with the patch you posted. Move the grammar details class into QWebSpellChecker as a struct. There is no good reason for it to be a standalone class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450744</commentid>
    <comment_count>39</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-12 16:18:43 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (In reply to comment #37)
&gt; &gt; (In reply to comment #36)
&gt; &gt; &gt; You forgot the changelog :(
&gt; &gt; 
&gt; &gt; You can try the script webkit-patch to detect problems early.
&gt; &gt; 
&gt; &gt; For example, to submit the git head to bugzilla you do:
&gt; &gt; ./Tools/Scripts/webkit-patch upload 44114 --request-commit -g HEAD
&gt; &gt;
&gt; &gt; It will give you the opportunity to make the changelog, and will do the style checking for you. When adding the patch, the script also obsolete the previous patch and set the right flags for you.


Its popping up vim for me (I presume for the changelog), but the content is empty and when I try to save it I get a &quot;No file&quot; error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450748</commentid>
    <comment_count>40</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-12 16:21:48 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (In reply to comment #37)
&gt; &gt; (In reply to comment #36)
&gt; &gt; &gt; You forgot the changelog :(
&gt; &gt; 
&gt; &gt; You can try the script webkit-patch to detect problems early.
&gt; &gt; 
&gt; &gt; For example, to submit the git head to bugzilla you do:
&gt; &gt; ./Tools/Scripts/webkit-patch upload 44114 --request-commit -g HEAD
&gt; &gt;
&gt; &gt; It will give you the opportunity to make the changelog, and will do the style checking for you. When adding the patch, the script also obsolete the previous patch and set the right flags for you.

Also, how do I add Dawit to the credits as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450754</commentid>
    <comment_count>41</comment_count>
      <attachid>103840</attachid>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-12 16:36:31 -0700</bug_when>
    <thetext>Created attachment 103840
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450756</commentid>
    <comment_count>42</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-12 16:39:35 -0700</bug_when>
    <thetext>Attachment 103840 did not pass style-queue:

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

Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:91:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:97:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 9 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>450759</commentid>
    <comment_count>43</comment_count>
      <attachid>103842</attachid>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-12 16:48:35 -0700</bug_when>
    <thetext>Created attachment 103842
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450761</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-12 16:51:53 -0700</bug_when>
    <thetext>Attachment 103842 did not pass style-queue:

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

Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:91:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:97:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 9 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>450825</commentid>
    <comment_count>45</comment_count>
      <attachid>103842</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-13 02:09:41 -0700</bug_when>
    <thetext>Comment on attachment 103842
Patch

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

Quick review.

Still no Changelog. :(

Conversion Vector&lt;String&gt; -&gt; QStringList is done twice. It would be nice to have a static inline function for doing it.

&gt; Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp:997
&gt; +        painter-&gt;setPen(originalPen);

You did not change the pen, no need to reset it.

&gt; Source/WebKit/qt/Api/qwebkitplatformplugin.h:145
&gt; +class QWEBKIT_EXPORT QWebSpellCheckerGrammarDetail {
&gt; +public:
&gt; +    int location;
&gt; +    int length;
&gt; +    QStringList guesses;
&gt; +    QString userDescription;
&gt; +};

This could be defined in QWebSpellChecker

&gt; Source/WebKit/qt/QtWebKit.pro:198
&gt; +    $$PWD/WebCoreSupport/WebPlatformStrategies.cpp \
&gt; +    $$PWD/WebCoreSupport/TextCheckerClientQt.cpp

Filenames are usually sorted alphabetically in pro/pri file.

&gt; Source/WebKit/qt/QtWebKit.pro:215
&gt; -    $$PWD/WebCoreSupport/WebPlatformStrategies.h
&gt; +    $$PWD/WebCoreSupport/WebPlatformStrategies.h \
&gt; +    $$PWD/WebCoreSupport/TextCheckerClientQt.h

Ditto

&gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:82
&gt; +    
&gt; +    

One empty line too many.

&gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:83
&gt; +    // Do Grammer Check

Comments must be sentences in WebKit, starting by a upper case character and ending by a point.

&gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:84
&gt; +    QVector&lt;QWebSpellCheckerGrammarDetail&gt;  qWebDetails;

Two spaces between the type and the variable.

&gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:87
&gt; +    // copy qWebDetails to details

Uppercase C for copy and a period at the end of the sentence.

&gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:90
&gt; +    while (it &lt; qWebDetails.end())

A for() loop is preferred to a while() loop if you go over each element of the collection.
It is also preferred to keep a variable with the end iterator so it is not created at each iteration.

&gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:92
&gt; +        GrammarDetail gd;

Not a fan of gd for the variable name. The name &quot;grammarDetail&quot; is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450827</commentid>
    <comment_count>46</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-13 02:28:58 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; (From update of attachment 103842 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=103842&amp;action=review
&gt; 
&gt; Quick review.
&gt; 

Thanks Benjamin,

I&apos;d already addressed most of your points but the patch script didn&apos;t upload them or write the Changelog. Grrrr :( I&apos;ll do it manually and upload.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450843</commentid>
    <comment_count>47</comment_count>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-13 08:54:10 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #45)
&gt; &gt; (From update of attachment 103842 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=103842&amp;action=review
&gt; &gt; 
&gt; &gt; Quick review.
&gt; &gt; 
&gt; 
&gt; Thanks Benjamin,
&gt; 
&gt; I&apos;d already addressed most of your points but the patch script didn&apos;t upload them or write the Changelog. Grrrr :( I&apos;ll do it manually and upload.

Lindasy(In reply to comment #40)
&gt; (In reply to comment #38)
&gt; &gt; (In reply to comment #37)
&gt; &gt; &gt; (In reply to comment #36)
&gt; &gt; &gt; &gt; You forgot the changelog :(
&gt; &gt; &gt; 
&gt; &gt; &gt; You can try the script webkit-patch to detect problems early.
&gt; &gt; &gt; 
&gt; &gt; &gt; For example, to submit the git head to bugzilla you do:
&gt; &gt; &gt; ./Tools/Scripts/webkit-patch upload 44114 --request-commit -g HEAD
&gt; &gt; &gt;
&gt; &gt; &gt; It will give you the opportunity to make the changelog, and will do the style checking for you. When adding the patch, the script also obsolete the previous patch and set the right flags for you.
&gt; 
&gt; Also, how do I add Dawit to the credits as well?

Lindsay, do not bother with that. There is really no point in having my name in the ChangeLog files since it is already in the copyright information of the source files. Your name there is sufficient, especially since you did most of the work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451022</commentid>
    <comment_count>48</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-15 03:55:58 -0700</bug_when>
    <thetext>Please ping me on IRC as soon as you have something ready so we can have faster review rounds. I would like this to land quickly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451038</commentid>
    <comment_count>49</comment_count>
      <attachid>103905</attachid>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-15 05:15:53 -0700</bug_when>
    <thetext>Created attachment 103905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451040</commentid>
    <comment_count>50</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-15 05:18:24 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; Please ping me on IRC as soon as you have something ready so we can have faster review rounds. I would like this to land quickly.

Uploaded, but don&apos;t know your IRC details (never use it myself)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451046</commentid>
    <comment_count>51</comment_count>
      <attachid>103905</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-15 05:44:10 -0700</bug_when>
    <thetext>Comment on attachment 103905
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        No new tests. (OOPS!)

You should removing this.

&gt; Source/WebCore/ChangeLog:29
&gt; +2011-08-12  Lindsay Mathieson  &lt;lindsay.mathieson@gmail.com&gt; and Dawit Alemayehu   &lt;adawit@kde.org&gt;
&gt; +
&gt; +        [Qt] Missing spell check support
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=44114
&gt; +        Implements platform plugin  api for spell and grammar checking,
&gt; +        draws error lines for same.
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        No new tests. (OOPS!)
&gt; +
&gt; +        * platform/graphics/qt/GraphicsContextQt.cpp:
&gt; +        (WebCore::drawErrorUnderline):
&gt; +        (WebCore::GraphicsContext::drawLineForTextChecking):
&gt; +

Two changelogs :(

&gt; Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp:943
&gt; +    // Bottom of squiggle

Period at the end.

&gt; Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp:959
&gt; +    // Top of squiggle

Period at the end.

&gt; Source/WebKit/qt/Api/qwebkitplatformplugin.h:145
&gt; +class QWEBKIT_EXPORT QWebSpellCheckerGrammarDetail {
&gt; +public:
&gt; +    int location;
&gt; +    int length;
&gt; +    QStringList guesses;
&gt; +    QString userDescription;
&gt; +};

This should go away now that you have QWebSpellChecker::GrammarDetail

&gt; Source/WebKit/qt/ChangeLog:35
&gt; +2011-08-12  Lindsay Mathieson  &lt;lindsay.mathieson@gmail.com&gt;
&gt; +
&gt; +        [Qt] Missing spell check support
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=44114
&gt; +        Fixed style failure.
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        * Api/qwebkitplatformplugin.h:
&gt; +        * QtWebKit.pro:
&gt; +        * WebCoreSupport/EditorClientQt.cpp:
&gt; +        (WebCore::EditorClientQt::isContinuousSpellCheckingEnabled):
&gt; +        (WebCore::EditorClientQt::isGrammarCheckingEnabled):
&gt; +        (WebCore::EditorClientQt::toggleContinuousSpellChecking):
&gt; +        (WebCore::EditorClientQt::toggleGrammarChecking):
&gt; +        * WebCoreSupport/EditorClientQt.h:
&gt; +        (WebCore::EditorClientQt::textChecker):
&gt; +        * WebCoreSupport/QtPlatformPlugin.cpp:
&gt; +        (WebCore::QtPlatformPlugin::createSpellChecker):
&gt; +        * WebCoreSupport/QtPlatformPlugin.h:
&gt; +        * WebCoreSupport/TextCheckerClientQt.cpp: Added.
&gt; +        (WebCore::TextCheckerClientQt::ignoreWordInSpellDocument):
&gt; +        (WebCore::TextCheckerClientQt::learnWord):
&gt; +        (WebCore::TextCheckerClientQt::getAutoCorrectSuggestionForMisspelledWord):
&gt; +        (WebCore::TextCheckerClientQt::checkSpellingOfString):
&gt; +        (WebCore::TextCheckerClientQt::checkGrammarOfString):
&gt; +        (WebCore::TextCheckerClientQt::getGuessesForWord):
&gt; +        (WebCore::TextCheckerClientQt::isContinousSpellCheckingEnabled):
&gt; +        (WebCore::TextCheckerClientQt::toggleContinousSpellChecking):
&gt; +        (WebCore::TextCheckerClientQt::isGrammarCheckingEnabled):
&gt; +        (WebCore::TextCheckerClientQt::toggleGrammarChecking):
&gt; +        (WebCore::TextCheckerClientQt::loadSpellChecker):
&gt; +        * WebCoreSupport/TextCheckerClientQt.h: Added.
&gt; +        (WebCore::TextCheckerClientQt::requestCheckingOfString):
&gt; +

Double changelog :(

&gt; Source/WebKit/qt/QtWebKit.pro:198
&gt; +    $$PWD/WebCoreSupport/WebPlatformStrategies.cpp \
&gt; +    $$PWD/WebCoreSupport/TextCheckerClientQt.cpp

Order of the file -&gt; alphabetical?

&gt; Source/WebKit/qt/QtWebKit.pro:215
&gt; +    $$PWD/WebCoreSupport/WebPlatformStrategies.h \
&gt; +    $$PWD/WebCoreSupport/TextCheckerClientQt.h

Order of the file -&gt; alphabetical?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451401</commentid>
    <comment_count>52</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-15 16:57:22 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; (From update of attachment 103905 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=103905&amp;action=review

Dammit - I fixed all this, that &quot;webkit-patch upload&quot; script is making a mess of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451457</commentid>
    <comment_count>53</comment_count>
      <attachid>103995</attachid>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-15 20:02:13 -0700</bug_when>
    <thetext>Created attachment 103995
Added a platform plugin to allow spell and grammar check in QtWebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451570</commentid>
    <comment_count>54</comment_count>
      <attachid>103995</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-16 05:50:57 -0700</bug_when>
    <thetext>Comment on attachment 103995
Added a platform plugin to allow spell and grammar check in QtWebKit.

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

Great.
I will land manually in order to remove the test line from the changelog.

&gt; Source/WebCore/ChangeLog:11
&gt; +        No new tests because the line rendering code is copied from the cairo port.
&gt; +

That is not an excuse for not having tests :)
In our case, the problem is we do not have the plugin running on the bot, so we cannot test this particular change.

&gt; Source/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp:46
&gt; +static void convertToVectorList(const QStringList&amp; list, Vector&lt;String&gt;&amp; vList)
&gt; +{
&gt; +    const int count = list.count();
&gt; +    vList.resize(count);
&gt; +    for (int i = 0; i &lt; count; ++i)
&gt; +        vList.append(list.at(i));
&gt; +}

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451574</commentid>
    <comment_count>55</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-16 06:11:41 -0700</bug_when>
    <thetext>Committed r93093: &lt;http://trac.webkit.org/changeset/93093&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454366</commentid>
    <comment_count>56</comment_count>
      <attachid>104623</attachid>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-20 19:34:26 -0700</bug_when>
    <thetext>Created attachment 104623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454368</commentid>
    <comment_count>57</comment_count>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-20 19:48:07 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; Created an attachment (id=104623) [details]
&gt; Patch

I think you need to a new ticket for this since this ticket is already closed and the patch submitted. Is this the fix for the the spell checker plugin crashing ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454369</commentid>
    <comment_count>58</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-20 19:57:53 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; (In reply to comment #56)
&gt; &gt; Created an attachment (id=104623) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; I think you need to a new ticket for this since this ticket is already closed and the patch submitted. Is this the fix for the the spell checker plugin crashing ?

Yup, that&apos;s the one</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454370</commentid>
    <comment_count>59</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-20 19:58:36 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; (In reply to comment #56)
&gt; &gt; Created an attachment (id=104623) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; I think you need to a new ticket for this since this ticket is already closed and the patch submitted. 

Should I just create a new ticket for it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454371</commentid>
    <comment_count>60</comment_count>
    <who name="Dawit A.">adawit</who>
    <bug_when>2011-08-20 20:08:15 -0700</bug_when>
    <thetext>(In reply to comment #59)
&gt; (In reply to comment #57)
&gt; &gt; (In reply to comment #56)
&gt; &gt; &gt; Created an attachment (id=104623) [details] [details] [details]
&gt; &gt; &gt; Patch
&gt; &gt; 
&gt; &gt; I think you need to a new ticket for this since this ticket is already closed and the patch submitted. 
&gt; 
&gt; Should I just create a new ticket for it?

Yes. This one is already done. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454392</commentid>
    <comment_count>61</comment_count>
      <attachid>104623</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-21 04:47:45 -0700</bug_when>
    <thetext>Comment on attachment 104623
Patch

Please create a new bug report for the patch. We like to keep thing separated. That way, figuring out history, or reverting a patch, is easier.

The Changelog should also have [Qt] in the title, and a description of the bug and how you fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454394</commentid>
    <comment_count>62</comment_count>
    <who name="Lindsay Mathieson">lindsay.mathieson</who>
    <bug_when>2011-08-21 04:53:47 -0700</bug_when>
    <thetext>(In reply to comment #61)
&gt; (From update of attachment 104623 [details])
&gt; Please create a new bug report for the patch. We like to keep thing separated. That way, figuring out history, or reverting a patch, is easier.
&gt; 
&gt; The Changelog should also have [Qt] in the title, and a description of the bug and how you fix it.

done - https://bugs.webkit.org/show_bug.cgi?id=66628

I&apos;ll update the Changelog</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102872</attachid>
            <date>2011-08-03 21:14:36 -0700</date>
            <delta_ts>2011-08-03 21:35:53 -0700</delta_ts>
            <desc>proposed patch I</desc>
            <filename>bug_44114.patch</filename>
            <type>text/plain</type>
            <size>14039</size>
            <attacher name="Dawit A.">adawit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmZjc4ZDk0Li5lZmU0ZGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDgtMDMgIERhd2l0IEFsZW1heWVodSAgPGFkYXdpdEBrZGUub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gTWlzc2luZyBz
cGVsbCBjaGVjayBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NDExNAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0Vycm9yVW5kZXJsaW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tp
bmcpOgorCiAyMDExLTA4LTAzICBTYWlsZXNoIEFncmF3YWwgIDxzYWlsQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBDaHJvbWl1bSBNYWM6IE1ha2UgU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0No
cm9taXVtTWFjLmggYysrIGNvbXBhdGlibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCAxMGRlOTY3
Li4xMThmNzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC05MDAsMTIgKzkwMCw4MyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdp
biwgZmxvYXQgd2lkdGgsIGJvbwogICAgIGRyYXdMaW5lKEludFBvaW50KHN0YXJ0UG9pbnQueCgp
LCBzdGFydFBvaW50LnkoKSksIEludFBvaW50KGVuZFBvaW50LngoKSwgZW5kUG9pbnQueSgpKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25z
dCBGbG9hdFBvaW50JiwgZmxvYXQsIFRleHRDaGVja2luZ0xpbmVTdHlsZSkKK3N0YXRpYyB2b2lk
IGRyYXdFcnJvclVuZGVybGluZShRUGFpbnRlciAqcGFpbnRlciwgZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpCit7CisgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBoZWlnaHRTcXVhcmVzID0gMi41OworCisgICAgZG91YmxlIHNxdWFyZSA9IGhlaWdodCAvIGhl
aWdodFNxdWFyZXM7CisgICAgZG91YmxlIGhhbGZTcXVhcmUgPSAwLjUgKiBzcXVhcmU7CisKKyAg
ICBkb3VibGUgdW5pdFdpZHRoID0gKGhlaWdodFNxdWFyZXMgLSAxLjApICogc3F1YXJlOworICAg
IGludCB3aWR0aFVuaXRzID0gc3RhdGljX2Nhc3Q8aW50Pigod2lkdGggKyAwLjUgKiB1bml0V2lk
dGgpIC8gdW5pdFdpZHRoKTsKKworICAgIHggKz0gMC41ICogKHdpZHRoIC0gd2lkdGhVbml0cyAq
IHVuaXRXaWR0aCk7CisgICAgd2lkdGggPSB3aWR0aFVuaXRzICogdW5pdFdpZHRoOworCisgICAg
ZG91YmxlIGJvdHRvbSA9IHkgKyBoZWlnaHQ7CisgICAgZG91YmxlIHRvcCA9IHk7CisKKyAgICBR
UGFpbnRlclBhdGggcGF0aDsKKyAgICAvLyBCb3R0b20gb2Ygc3F1aWdnbGUKKyAgICBwYXRoLm1v
dmVUbyh4IC0gaGFsZlNxdWFyZSwgdG9wICsgaGFsZlNxdWFyZSk7IC8vIEEKKworICAgIGludCBp
ID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGhVbml0czsgaSArPSAyKSB7CisgICAgICAg
IGRvdWJsZSBtaWRkbGUgPSB4ICsgKGkgKyAxKSAqIHVuaXRXaWR0aDsKKyAgICAgICAgZG91Ymxl
IHJpZ2h0ID0geCArIChpICsgMikgKiB1bml0V2lkdGg7CisKKyAgICAgICAgcGF0aC5saW5lVG8o
bWlkZGxlLCBib3R0b20pOyAvLyBCCisKKyAgICAgICAgaWYgKGkgKyAyID09IHdpZHRoVW5pdHMp
CisgICAgICAgICAgICBwYXRoLmxpbmVUbyhyaWdodCArIGhhbGZTcXVhcmUsIHRvcCArIGhhbGZT
cXVhcmUpOyAvLyBECisgICAgICAgIGVsc2UgaWYgKGkgKyAxICE9IHdpZHRoVW5pdHMpCisgICAg
ICAgICAgICBwYXRoLmxpbmVUbyhyaWdodCwgdG9wICsgc3F1YXJlKTsgLy8gQworICAgIH0KKwor
ICAgIC8vIFRvcCBvZiBzcXVpZ2dsZQorICAgIGZvciAoaSAtPSAyOyBpID49IDA7IGkgLT0gMikg
eworICAgICAgICBkb3VibGUgbGVmdCA9IHggKyBpICogdW5pdFdpZHRoOworICAgICAgICBkb3Vi
bGUgbWlkZGxlID0geCArIChpICsgMSkgKiB1bml0V2lkdGg7CisgICAgICAgIGRvdWJsZSByaWdo
dCA9IHggKyAoaSArIDIpICogdW5pdFdpZHRoOworCisgICAgICAgIGlmIChpICsgMSA9PSB3aWR0
aFVuaXRzKQorICAgICAgICAgICAgcGF0aC5saW5lVG8obWlkZGxlICsgaGFsZlNxdWFyZSwgYm90
dG9tIC0gaGFsZlNxdWFyZSk7IC8vIEcKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAo
aSArIDIgPT0gd2lkdGhVbml0cykKKyAgICAgICAgICAgICAgICBwYXRoLmxpbmVUbyhyaWdodCwg
dG9wKTsgLy8gRQorCisgICAgICAgICAgICBwYXRoLmxpbmVUbyhtaWRkbGUsIGJvdHRvbSAtIGhh
bGZTcXVhcmUpOyAvLyBGCisgICAgICAgIH0KKworICAgICAgICBwYXRoLmxpbmVUbyhsZWZ0LCB0
b3ApOyAvLyBICisgICAgfQorCisgICAgcGFpbnRlci0+ZHJhd1BhdGgocGF0aCk7Cit9CisKKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0
UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIFFQYWludGVyKiBwYWludGVyID0gcGxhdGZvcm1Db250ZXh0
KCk7CisgICAgcGFpbnRlci0+c2F2ZSgpOworCisgICAgc3dpdGNoIChzdHlsZSkgeworICAgIGNh
c2UgVGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU6CisgICAgICAgIHBhaW50ZXItPnNldFBl
bihRQ29sb3IoMjU1LCAwLCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dENoZWNr
aW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKFFDb2xvcigwLCAy
NTUsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcGFpbnRlci0+
cmVzdG9yZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZHJhd0Vycm9yVW5kZXJs
aW5lKHBhaW50ZXIsIG9yaWdpbi54KCksIG9yaWdpbi55KCksIHdpZHRoLCBjTWlzc3BlbGxpbmdM
aW5lVGhpY2tuZXNzKTsKKyAgICBwYWludGVyLT5yZXN0b3JlKCk7CiB9CiAKIEZsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBmcmVj
dCwgUm91bmRpbmdNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmtp
dHBsYXRmb3JtcGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1w
bHVnaW4uaAppbmRleCAxZjYyODA0Li5hYjQ3OGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgPFF0
Q29yZS9RT2JqZWN0PgogI2luY2x1ZGUgPFF0Q29yZS9RVXJsPgogI2luY2x1ZGUgPFF0R3VpL1FD
b2xvcj4KKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisKIAogY2xhc3MgUVdlYlNlbGVjdERh
dGEgewogcHVibGljOgpAQCAtMTM0LDYgKzEzNiwyMiBAQCBwdWJsaWMgUV9TTE9UUzoKIH07CiAj
ZW5kaWYKIAorY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdlYlNwZWxsQ2hlY2tlciA6IHB1YmxpYyBR
T2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIHZpcnR1YWwgflFXZWJTcGVsbENo
ZWNrZXIoKSB7fQorCisgICAgdmlydHVhbCBib29sIGlzVUlTaG93bigpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmQoY29uc3QgUVN0cmluZyYgd29yZCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93VUkoYm9vbCBvbikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBRU3RyaW5nJiB3b3Jk
LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpID0gMDsK
KyAgICB2aXJ0dWFsIFFTdHJpbmcgYXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdv
cmQoY29uc3QgUVN0cmluZyYgd29yZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBndWVzc2VzRm9y
V29yZChjb25zdCBRU3RyaW5nJiB3b3JkLCBjb25zdCBRU3RyaW5nJiBjb250ZXh0LCBRU3RyaW5n
TGlzdCYgZ3Vlc3NlcykgPSAwOworfTsKKwogY2xhc3MgUVdlYktpdFBsYXRmb3JtUGx1Z2luIHsK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5RV2ViS2l0UGxhdGZvcm1QbHVnaW4oKSB7fQpAQCAtMTQz
LDcgKzE2MSw4IEBAIHB1YmxpYzoKICAgICAgICAgTm90aWZpY2F0aW9ucywKICAgICAgICAgSGFw
dGljcywKICAgICAgICAgVG91Y2hJbnRlcmFjdGlvbiwKLSAgICAgICAgRnVsbFNjcmVlblZpZGVv
UGxheWVyCisgICAgICAgIEZ1bGxTY3JlZW5WaWRlb1BsYXllciwKKyAgICAgICAgU3BlbGxDaGVj
a2VyCiAgICAgfTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNp
b24pIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggZGJhYjg1Ny4uOWZlZDA3MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMS0wOC0wMyAgRGF3aXQgQWxlbWF5ZWh1ICA8
YWRhd2l0QGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW1F0XSBNaXNzaW5nIHNwZWxsIGNoZWNrIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTE0CisKKyAgICAgICAgKiBBcGkv
cXdlYmtpdHBsYXRmb3JtcGx1Z2luLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9y
Q2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50UXQ6OmlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVu
dFF0OjpwYWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFF0OjpF
ZGl0b3JDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6aWdub3Jl
V29yZEluU3BlbGxEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6
bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFF0OjpjaGVja1NwZWxs
aW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50UXQ6OmdldEF1dG9D
b3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvckNsaWVudFF0Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFF0OjpzaG93U3BlbGxpbmdVSSk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6c3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yQ2xpZW50UXQ6OmxvYWRTcGVsbENoZWNrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yQ2xpZW50UXQ6OmZyZWVTcGVsbENoZWNrZXIpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudFF0Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUXRQbGF0
Zm9ybVBsdWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpRdFBsYXRmb3JtUGx1Z2luOjpjcmVh
dGVTcGVsbENoZWNrZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVn
aW4uaDoKKwogMjAxMS0wOC0wMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW1RpbWVsaW5lXSBIb3ZlciBvbiBwYWludCBldmVu
dHMgYW5kIHNlZSByZWN0IG91dGxpbmUgYXJvdW5kIHRoYXQgYXJlYS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAKaW5kZXggNzMyMTBm
MC4uZWM3ZjE2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRRdC5jcHAKQEAgLTQ1LDE3ICs0NSwyMSBAQAogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJRV2ViUGFnZUNs
aWVudC5oIgorI2luY2x1ZGUgIlF0UGxhdGZvcm1QbHVnaW4uaCIKICNpbmNsdWRlICJSYW5nZS5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIK
ICNpbmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgInF3ZWJraXRwbGF0
Zm9ybXBsdWdpbi5oIgogI2luY2x1ZGUgInF3ZWJwYWdlLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2Vf
cC5oIgogCisjaW5jbHVkZSA8UURlYnVnPgogI2luY2x1ZGUgPFFVbmRvU3RhY2s+CiAjaW5jbHVk
ZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKKwogI2RlZmluZSBtZXRob2RE
ZWJ1ZygpIHFEZWJ1ZygiRWRpdG9yQ2xpZW50UXQ6ICVzIiwgX19GVU5DVElPTl9fKTsKIAogc3Rh
dGljIFFTdHJpbmcgZHVtcFBhdGgoV2ViQ29yZTo6Tm9kZSAqbm9kZSkKQEAgLTEwOSw3ICsxMTMs
MTIgQEAgYm9vbCBFZGl0b3JDbGllbnRRdDo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShIVE1M
RWxlbWVudCogZWxlbWVudCkKIAogYm9vbCBFZGl0b3JDbGllbnRRdDo6aXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWxvYWRT
cGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcURlYnVnKCkgPDwg
UV9GVU5DX0lORk8gPDwgbV9zcGVsbENoZWNrZXI7CisgICAgcmV0dXJuIHRydWU7CisgICAgLy9y
ZXR1cm4gbV9zcGVsbENoZWNrZXItPmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7
CiB9CiAKIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpCkBA
IC0zMjMsNiArMzMyLDcgQEAgYm9vbCBFZGl0b3JDbGllbnRRdDo6c2hvdWxkSW5zZXJ0Tm9kZShO
b2RlKiBub2RlLCBSYW5nZSogcmFuZ2UsIEVkaXRvckluc2VydEFjdGkKIAogdm9pZCBFZGl0b3JD
bGllbnRRdDo6cGFnZURlc3Ryb3llZCgpCiB7CisgICAgZnJlZVNwZWxsQ2hlY2tlcigpOwogICAg
IGRlbGV0ZSB0aGlzOwogfQogCkBAIC01MzYsOCArNTQ2LDkgQEAgdm9pZCBFZGl0b3JDbGllbnRR
dDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQqKQogfQogCiBFZGl0b3JD
bGllbnRRdDo6RWRpdG9yQ2xpZW50UXQoUVdlYlBhZ2UqIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFn
ZSksIG1fZWRpdGluZyhmYWxzZSksIG1faW5VbmRvUmVkbyhmYWxzZSkKKyAgICA6IG1fcGFnZShw
YWdlKSwgbV9zcGVsbENoZWNrZXIoMCksIG1fZWRpdGluZyhmYWxzZSksIG1faW5VbmRvUmVkbyhm
YWxzZSkKIHsKKyAgICBxRGVidWcoKSA8PCBRX0ZVTkNfSU5GTyA8PCBwYWdlOwogfQogCiB2b2lk
IEVkaXRvckNsaWVudFF0Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCopCkBAIC01
NjcsMjUgKzU3OCwzNyBAQCB2b2lkIEVkaXRvckNsaWVudFF0Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0
QXJlYShFbGVtZW50KikKIHsKIH0KIAotdm9pZCBFZGl0b3JDbGllbnRRdDo6aWdub3JlV29yZElu
U3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKQordm9pZCBFZGl0b3JDbGllbnRRdDo6aWdub3Jl
V29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9zcGVsbENoZWNrZXItPmlnbm9yZVdvcmQod29yZCk7CiB9CiAKLXZvaWQgRWRpdG9y
Q2xpZW50UXQ6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmKQordm9pZCBFZGl0b3JDbGllbnRRdDo6
bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nw
ZWxsQ2hlY2tlci0+aWdub3JlV29yZCh3b3JkKTsKIH0KIAotdm9pZCBFZGl0b3JDbGllbnRRdDo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBpbnQqLCBpbnQqKQordm9p
ZCBFZGl0b3JDbGllbnRRdDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyICp3b3Jk
LCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdM
ZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNr
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgUVN0cmluZyBzdHIocmVpbnRlcnBy
ZXRfY2FzdDxRQ2hhciBjb25zdCo+KHdvcmQpLCBsZW5ndGgpOworICAgIG1fc3BlbGxDaGVja2Vy
LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3RyLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVs
bGluZ0xlbmd0aCk7CiB9CiAKLVN0cmluZyBFZGl0b3JDbGllbnRRdDo6Z2V0QXV0b0NvcnJlY3RT
dWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikKK1N0cmluZyBFZGl0b3JD
bGllbnRRdDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3Qg
U3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisKKyAgICByZXR1cm4gbV9zcGVsbENoZWNrZXItPmF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZv
ck1pc3NwZWxsZWRXb3JkKHdvcmQpOwogfQogCiB2b2lkIEVkaXRvckNsaWVudFF0OjpjaGVja0dy
YW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+Jiwg
aW50KiwgaW50KikKQEAgLTU5OCwyNSArNjIxLDQwIEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnVw
ZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFt
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBFZGl0b3JDbGllbnRRdDo6dXBkYXRl
U3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKQordm9pZCBFZGl0b3JD
bGllbnRRdDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcm
IHdvcmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNr
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zcGVsbENoZWNrZXItPnVwZGF0ZVVJV2l0
aE1pc3NwZWxsZWRXb3JkKHdvcmQpOwogfQogCi12b2lkIEVkaXRvckNsaWVudFF0OjpzaG93U3Bl
bGxpbmdVSShib29sKQordm9pZCBFZGl0b3JDbGllbnRRdDo6c2hvd1NwZWxsaW5nVUkoYm9vbCBv
bikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NwZWxsQ2hlY2tlci0+c2V0U2hvd1VJKG9uKTsK
IH0KIAogYm9vbCBFZGl0b3JDbGllbnRRdDo6c3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFsb2FkU3BlbGxD
aGVja2VyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX3NwZWxsQ2hl
Y2tlci0+aXNVSVNob3duKCk7CiB9CiAKIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OmdldEd1ZXNzZXNG
b3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8
U3RyaW5nPiYgZ3Vlc3NlcykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICghbG9h
ZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBRU3RyaW5nTGlzdCBndWVz
c2VzTGlzdDsKKyAgICBtX3NwZWxsQ2hlY2tlci0+Z3Vlc3Nlc0ZvcldvcmQod29yZCwgY29udGV4
dCwgZ3Vlc3Nlc0xpc3QpOworICAgIGZvcihpbnQgaSA9MCwgY291bnQ9Z3Vlc3Nlc0xpc3QuY291
bnQoKTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgZ3Vlc3Nlcy5hcHBlbmQoZ3Vlc3Nlc0xp
c3QuYXQoaSkpOworICAgIH0KIH0KIAogYm9vbCBFZGl0b3JDbGllbnRRdDo6aXNFZGl0aW5nKCkg
Y29uc3QKQEAgLTY3MCw2ICs3MDgsMzIgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6c2V0SW5wdXRN
ZXRob2RTdGF0ZShib29sIGFjdGl2ZSkKICAgICBlbWl0IG1fcGFnZS0+bWljcm9Gb2N1c0NoYW5n
ZWQoKTsKIH0KIAorYm9vbCBFZGl0b3JDbGllbnRRdDo6bG9hZFNwZWxsQ2hlY2tlcigpCit7Cisg
ICAgaWYgKG1fc3BlbGxDaGVja2VyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFF0UGxh
dGZvcm1QbHVnaW4gcGxhdGZvcm1QbHVnaW47CisgICAgbV9zcGVsbENoZWNrZXIgPSBwbGF0Zm9y
bVBsdWdpbi5jcmVhdGVTcGVsbENoZWNrZXIoKTsKKyAgICBpZiAoIW1fc3BlbGxDaGVja2VyKSB7
CisgICAgICAgIHFXYXJuaW5nKCkgPDwgUV9GVU5DX0lORk8gPDwgIk5vIHNwZWxsIGNoZWNrZXIg
Zm91bmQiIDw8IGVuZGw7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBxRGVi
dWcoKSA8PCBRX0ZVTkNfSU5GTyA8PCBtX3NwZWxsQ2hlY2tlcjsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBFZGl0b3JDbGllbnRRdDo6ZnJlZVNwZWxsQ2hlY2tlcigpCit7CisgICAgcURl
YnVnKCkgPDwgUV9GVU5DX0lORk8gPDwgbV9zcGVsbENoZWNrZXI7CisgICAgaWYgKCFtX3NwZWxs
Q2hlY2tlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIG1fc3BlbGxDaGVja2VyOwor
ICAgIG1fc3BlbGxDaGVja2VyID0gMDsKK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRR
dC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5oCmlu
ZGV4IGVjY2I3NWQuLmMwYWNlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudFF0LmgKQEAgLTM3LDEyICszNywxMyBAQAogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAKIGNsYXNzIFFXZWJQYWdlOworY2xhc3MgUVdlYlNwZWxsQ2hlY2tlcjsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFZGl0b3JDbGllbnRRdCA6IHB1YmxpYyBF
ZGl0b3JDbGllbnQsIHB1YmxpYyBUZXh0Q2hlY2tlckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgRWRp
dG9yQ2xpZW50UXQoUVdlYlBhZ2UqIHBhZ2UpOworICAgIEVkaXRvckNsaWVudFF0KFFXZWJQYWdl
KiBwYWdlID0gMCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKICAg
ICAKQEAgLTExOSw4ICsxMjAsMTIgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFFXZWJQYWdl
KiBtX3BhZ2U7CisgICAgUVdlYlNwZWxsQ2hlY2tlciogbV9zcGVsbENoZWNrZXI7CiAgICAgYm9v
bCBtX2VkaXRpbmc7CiAgICAgYm9vbCBtX2luVW5kb1JlZG87IC8vIG91ciB1bmRvIHN0YWNrIHdv
cmtzIGRpZmZlcmVudGx5IC0gZG9uJ3QgcmUtZW50ZXIhCisKKyAgICBib29sIGxvYWRTcGVsbENo
ZWNrZXIoKTsKKyAgICB2b2lkIGZyZWVTcGVsbENoZWNrZXIoKTsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCmlu
ZGV4IDJlNDRjNjYuLmFiNjViMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcApAQCAtMTM0LDQgKzEzNCwxMCBAQCBQYXNz
T3duUHRyPFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyPiBRdFBsYXRmb3JtUGx1Z2luOjpjcmVh
dGVGdWxsU2NyZWVuVmlkZW9IYQogfQogI2VuZGlmCiAKK1FXZWJTcGVsbENoZWNrZXIqIFF0UGxh
dGZvcm1QbHVnaW46OmNyZWF0ZVNwZWxsQ2hlY2tlcigpCit7CisgICAgUVdlYktpdFBsYXRmb3Jt
UGx1Z2luKiBwID0gcGx1Z2luKCk7CisgICAgcmV0dXJuIHAgPyBzdGF0aWNfY2FzdDxRV2ViU3Bl
bGxDaGVja2VyKj4ocC0+Y3JlYXRlRXh0ZW5zaW9uKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbjo6U3Bl
bGxDaGVja2VyKSkgOiAwOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oCmluZGV4IDMxNmI4ZTguLjg0NzkzNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5o
CkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIFFXZWJUb3VjaE1vZGlmaWVyOwogI2lmIEVOQUJMRShW
SURFTykgJiYgVVNFKFFUX01VTFRJTUVESUEpCiBjbGFzcyBRV2ViRnVsbFNjcmVlblZpZGVvSGFu
ZGxlcjsKICNlbmRpZgorY2xhc3MgUVdlYlNwZWxsQ2hlY2tlcjsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC01Myw2ICs1NCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoVklERU8pICYmIFVT
RShRVF9NVUxUSU1FRElBKQogICAgIFBhc3NPd25QdHI8UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRs
ZXI+IGNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsKICNlbmRpZgorICAgIFFXZWJTcGVs
bENoZWNrZXIqIGNyZWF0ZVNwZWxsQ2hlY2tlcigpOwogCiAgICAgUVdlYktpdFBsYXRmb3JtUGx1
Z2luKiBwbHVnaW4oKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102875</attachid>
            <date>2011-08-03 21:35:53 -0700</date>
            <delta_ts>2011-08-05 08:35:39 -0700</delta_ts>
            <desc>proposed patch II</desc>
            <filename>bug_44114.patch</filename>
            <type>text/plain</type>
            <size>13804</size>
            <attacher name="Dawit A.">adawit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmZjc4ZDk0Li5lZmU0ZGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDgtMDMgIERhd2l0IEFsZW1heWVodSAgPGFkYXdpdEBrZGUub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gTWlzc2luZyBz
cGVsbCBjaGVjayBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NDExNAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0Vycm9yVW5kZXJsaW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tp
bmcpOgorCiAyMDExLTA4LTAzICBTYWlsZXNoIEFncmF3YWwgIDxzYWlsQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBDaHJvbWl1bSBNYWM6IE1ha2UgU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0No
cm9taXVtTWFjLmggYysrIGNvbXBhdGlibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCAxMGRlOTY3
Li4xMThmNzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC05MDAsMTIgKzkwMCw4MyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdp
biwgZmxvYXQgd2lkdGgsIGJvbwogICAgIGRyYXdMaW5lKEludFBvaW50KHN0YXJ0UG9pbnQueCgp
LCBzdGFydFBvaW50LnkoKSksIEludFBvaW50KGVuZFBvaW50LngoKSwgZW5kUG9pbnQueSgpKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25z
dCBGbG9hdFBvaW50JiwgZmxvYXQsIFRleHRDaGVja2luZ0xpbmVTdHlsZSkKK3N0YXRpYyB2b2lk
IGRyYXdFcnJvclVuZGVybGluZShRUGFpbnRlciAqcGFpbnRlciwgZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpCit7CisgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBoZWlnaHRTcXVhcmVzID0gMi41OworCisgICAgZG91YmxlIHNxdWFyZSA9IGhlaWdodCAvIGhl
aWdodFNxdWFyZXM7CisgICAgZG91YmxlIGhhbGZTcXVhcmUgPSAwLjUgKiBzcXVhcmU7CisKKyAg
ICBkb3VibGUgdW5pdFdpZHRoID0gKGhlaWdodFNxdWFyZXMgLSAxLjApICogc3F1YXJlOworICAg
IGludCB3aWR0aFVuaXRzID0gc3RhdGljX2Nhc3Q8aW50Pigod2lkdGggKyAwLjUgKiB1bml0V2lk
dGgpIC8gdW5pdFdpZHRoKTsKKworICAgIHggKz0gMC41ICogKHdpZHRoIC0gd2lkdGhVbml0cyAq
IHVuaXRXaWR0aCk7CisgICAgd2lkdGggPSB3aWR0aFVuaXRzICogdW5pdFdpZHRoOworCisgICAg
ZG91YmxlIGJvdHRvbSA9IHkgKyBoZWlnaHQ7CisgICAgZG91YmxlIHRvcCA9IHk7CisKKyAgICBR
UGFpbnRlclBhdGggcGF0aDsKKyAgICAvLyBCb3R0b20gb2Ygc3F1aWdnbGUKKyAgICBwYXRoLm1v
dmVUbyh4IC0gaGFsZlNxdWFyZSwgdG9wICsgaGFsZlNxdWFyZSk7IC8vIEEKKworICAgIGludCBp
ID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGhVbml0czsgaSArPSAyKSB7CisgICAgICAg
IGRvdWJsZSBtaWRkbGUgPSB4ICsgKGkgKyAxKSAqIHVuaXRXaWR0aDsKKyAgICAgICAgZG91Ymxl
IHJpZ2h0ID0geCArIChpICsgMikgKiB1bml0V2lkdGg7CisKKyAgICAgICAgcGF0aC5saW5lVG8o
bWlkZGxlLCBib3R0b20pOyAvLyBCCisKKyAgICAgICAgaWYgKGkgKyAyID09IHdpZHRoVW5pdHMp
CisgICAgICAgICAgICBwYXRoLmxpbmVUbyhyaWdodCArIGhhbGZTcXVhcmUsIHRvcCArIGhhbGZT
cXVhcmUpOyAvLyBECisgICAgICAgIGVsc2UgaWYgKGkgKyAxICE9IHdpZHRoVW5pdHMpCisgICAg
ICAgICAgICBwYXRoLmxpbmVUbyhyaWdodCwgdG9wICsgc3F1YXJlKTsgLy8gQworICAgIH0KKwor
ICAgIC8vIFRvcCBvZiBzcXVpZ2dsZQorICAgIGZvciAoaSAtPSAyOyBpID49IDA7IGkgLT0gMikg
eworICAgICAgICBkb3VibGUgbGVmdCA9IHggKyBpICogdW5pdFdpZHRoOworICAgICAgICBkb3Vi
bGUgbWlkZGxlID0geCArIChpICsgMSkgKiB1bml0V2lkdGg7CisgICAgICAgIGRvdWJsZSByaWdo
dCA9IHggKyAoaSArIDIpICogdW5pdFdpZHRoOworCisgICAgICAgIGlmIChpICsgMSA9PSB3aWR0
aFVuaXRzKQorICAgICAgICAgICAgcGF0aC5saW5lVG8obWlkZGxlICsgaGFsZlNxdWFyZSwgYm90
dG9tIC0gaGFsZlNxdWFyZSk7IC8vIEcKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAo
aSArIDIgPT0gd2lkdGhVbml0cykKKyAgICAgICAgICAgICAgICBwYXRoLmxpbmVUbyhyaWdodCwg
dG9wKTsgLy8gRQorCisgICAgICAgICAgICBwYXRoLmxpbmVUbyhtaWRkbGUsIGJvdHRvbSAtIGhh
bGZTcXVhcmUpOyAvLyBGCisgICAgICAgIH0KKworICAgICAgICBwYXRoLmxpbmVUbyhsZWZ0LCB0
b3ApOyAvLyBICisgICAgfQorCisgICAgcGFpbnRlci0+ZHJhd1BhdGgocGF0aCk7Cit9CisKKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0
UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIFFQYWludGVyKiBwYWludGVyID0gcGxhdGZvcm1Db250ZXh0
KCk7CisgICAgcGFpbnRlci0+c2F2ZSgpOworCisgICAgc3dpdGNoIChzdHlsZSkgeworICAgIGNh
c2UgVGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU6CisgICAgICAgIHBhaW50ZXItPnNldFBl
bihRQ29sb3IoMjU1LCAwLCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dENoZWNr
aW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKFFDb2xvcigwLCAy
NTUsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcGFpbnRlci0+
cmVzdG9yZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZHJhd0Vycm9yVW5kZXJs
aW5lKHBhaW50ZXIsIG9yaWdpbi54KCksIG9yaWdpbi55KCksIHdpZHRoLCBjTWlzc3BlbGxpbmdM
aW5lVGhpY2tuZXNzKTsKKyAgICBwYWludGVyLT5yZXN0b3JlKCk7CiB9CiAKIEZsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBmcmVj
dCwgUm91bmRpbmdNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmtp
dHBsYXRmb3JtcGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1w
bHVnaW4uaAppbmRleCAxZjYyODA0Li5iZTgyNTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaApAQCAtMjEsNiArMjEsOCBAQAogI2lmbmRlZiBRV0VC
S0lUUExBVEZPUk1QTFVHSU5fSAogI2RlZmluZSBRV0VCS0lUUExBVEZPUk1QTFVHSU5fSAogCisj
aW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorCiAvKgogICogIFdhcm5pbmc6IFRoZSBjb250ZW50
cyBvZiB0aGlzIGZpbGUgaXMgbm90ICBwYXJ0IG9mIHRoZSBwdWJsaWMgUXRXZWJLaXQgQVBJCiAg
KiAgYW5kIG1heSBiZSBjaGFuZ2VkIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uIG9yIGV2ZW4gYmUg
Y29tcGxldGVseSByZW1vdmVkLgpAQCAtMzMsNiArMzUsOCBAQAogI2luY2x1ZGUgPFF0Q29yZS9R
VXJsPgogI2luY2x1ZGUgPFF0R3VpL1FDb2xvcj4KIAorCisKIGNsYXNzIFFXZWJTZWxlY3REYXRh
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5RV2ViU2VsZWN0RGF0YSgpIHt9CkBAIC0xMzQsNiAr
MTM4LDIyIEBAIHB1YmxpYyBRX1NMT1RTOgogfTsKICNlbmRpZgogCitjbGFzcyBRV0VCS0lUX0VY
UE9SVCBRV2ViU3BlbGxDaGVja2VyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitw
dWJsaWM6CisgICAgdmlydHVhbCB+UVdlYlNwZWxsQ2hlY2tlcigpIHsgfQorCisgICAgdmlydHVh
bCBib29sIGlzVUlTaG93bigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxl
YXJuV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGlnbm9y
ZVdvcmQoY29uc3QgUVN0cmluZyYgd29yZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93
VUkoYm9vbCBvbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVVSVdpdGhNaXNzcGVsbGVk
V29yZChjb25zdCBRU3RyaW5nJiB3b3JkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhjb25zdCBRU3RyaW5nJiB3b3JkLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRp
b24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIFFTdHJpbmcgYXV0
b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgUVN0cmluZyYgd29yZCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBndWVzc2VzRm9yV29yZChjb25zdCBRU3RyaW5nJiB3b3Jk
LCBjb25zdCBRU3RyaW5nJiBjb250ZXh0LCBRU3RyaW5nTGlzdCYgZ3Vlc3NlcykgPSAwOworfTsK
KwogY2xhc3MgUVdlYktpdFBsYXRmb3JtUGx1Z2luIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5R
V2ViS2l0UGxhdGZvcm1QbHVnaW4oKSB7fQpAQCAtMTQzLDcgKzE2Myw4IEBAIHB1YmxpYzoKICAg
ICAgICAgTm90aWZpY2F0aW9ucywKICAgICAgICAgSGFwdGljcywKICAgICAgICAgVG91Y2hJbnRl
cmFjdGlvbiwKLSAgICAgICAgRnVsbFNjcmVlblZpZGVvUGxheWVyCisgICAgICAgIEZ1bGxTY3Jl
ZW5WaWRlb1BsYXllciwKKyAgICAgICAgU3BlbGxDaGVja2VyCiAgICAgfTsKIAogICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24pIGNvbnN0ID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cKaW5kZXggZGJhYjg1Ny4uOWZlZDA3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBA
QAorMjAxMS0wOC0wMyAgRGF3aXQgQWxlbWF5ZWh1ICA8YWRhd2l0QGtkZS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBNaXNzaW5nIHNw
ZWxsIGNoZWNrIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ0MTE0CisKKyAgICAgICAgKiBBcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmg6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yQ2xpZW50UXQ6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFF0OjpwYWdlRGVzdHJveWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFF0OjpFZGl0b3JDbGllbnRRdCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvckNsaWVudFF0OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yQ2xpZW50UXQ6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3Nw
ZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFF0Ojp1cGRhdGVTcGVs
bGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVu
dFF0OjpzaG93U3BlbGxpbmdVSSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6
c3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6
Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50UXQ6Omxv
YWRTcGVsbENoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50UXQ6OmZyZWVT
cGVsbENoZWNrZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0Lmg6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpRdFBsYXRmb3JtUGx1Z2luOjpjcmVhdGVTcGVsbENoZWNrZXIpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaDoKKwogMjAxMS0wOC0wMyAgUGF2
ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogW1RpbWVsaW5lXSBIb3ZlciBvbiBwYWludCBldmVudHMgYW5kIHNlZSByZWN0IG91dGxpbmUg
YXJvdW5kIHRoYXQgYXJlYS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRRdC5jcHAKaW5kZXggNzMyMTBmMC4uNDk0NGFhYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAKQEAgLTQ1
LDEwICs0NSwxMiBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaCIKICNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIlF0UGxh
dGZvcm1QbHVnaW4uaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIKICNpbmNsdWRlICJXaW5kb3dzS2V5Ym9h
cmRDb2Rlcy5oIgorI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgogI2luY2x1ZGUg
InF3ZWJwYWdlLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgogCkBAIC01Niw2ICs1OCw3IEBA
CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKKwogI2RlZmlu
ZSBtZXRob2REZWJ1ZygpIHFEZWJ1ZygiRWRpdG9yQ2xpZW50UXQ6ICVzIiwgX19GVU5DVElPTl9f
KTsKIAogc3RhdGljIFFTdHJpbmcgZHVtcFBhdGgoV2ViQ29yZTo6Tm9kZSAqbm9kZSkKQEAgLTEw
OSw3ICsxMTIsMTAgQEAgYm9vbCBFZGl0b3JDbGllbnRRdDo6c2hvdWxkU2hvd0RlbGV0ZUludGVy
ZmFjZShIVE1MRWxlbWVudCogZWxlbWVudCkKIAogYm9vbCBFZGl0b3JDbGllbnRRdDo6aXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIG1fc3BlbGxDaGVja2VyLT5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwog
fQogCiBib29sIEVkaXRvckNsaWVudFF0Ojppc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKQpAQCAt
MzIzLDYgKzMyOSw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OnNob3VsZEluc2VydE5vZGUoTm9k
ZSogbm9kZSwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3RpCiAKIHZvaWQgRWRpdG9yQ2xp
ZW50UXQ6OnBhZ2VEZXN0cm95ZWQoKQogeworICAgIGZyZWVTcGVsbENoZWNrZXIoKTsKICAgICBk
ZWxldGUgdGhpczsKIH0KIApAQCAtNTM2LDcgKzU0Myw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6
OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihLZXlib2FyZEV2ZW50KikKIH0KIAogRWRpdG9yQ2xp
ZW50UXQ6OkVkaXRvckNsaWVudFF0KFFXZWJQYWdlKiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2Up
LCBtX2VkaXRpbmcoZmFsc2UpLCBtX2luVW5kb1JlZG8oZmFsc2UpCisgICAgOiBtX3BhZ2UocGFn
ZSksIG1fc3BlbGxDaGVja2VyKDApLCBtX2VkaXRpbmcoZmFsc2UpLCBtX2luVW5kb1JlZG8oZmFs
c2UpCiB7CiB9CiAKQEAgLTU2NywyNSArNTc0LDM3IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnRl
eHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqKQogewogfQogCi12b2lkIEVkaXRvckNsaWVu
dFF0OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpCit2b2lkIEVkaXRv
ckNsaWVudFF0OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYgd29yZCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3NwZWxsQ2hlY2tlci0+aWdub3JlV29yZCh3b3JkKTsK
IH0KIAotdm9pZCBFZGl0b3JDbGllbnRRdDo6bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpCit2b2lk
IEVkaXRvckNsaWVudFF0OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc3BlbGxDaGVja2VyLT5pZ25vcmVXb3JkKHdvcmQpOwogfQogCi12b2lk
IEVkaXRvckNsaWVudFF0OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQs
IGludCosIGludCopCit2b2lkIEVkaXRvckNsaWVudFF0OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmco
Y29uc3QgVUNoYXIgKndvcmQsIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwg
aW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlm
ICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBRU3Ry
aW5nIHN0cihyZWludGVycHJldF9jYXN0PFFDaGFyIGNvbnN0Kj4od29yZCksIGxlbmd0aCk7Cisg
ICAgbV9zcGVsbENoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzdHIsIG1pc3NwZWxsaW5n
TG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKIH0KIAotU3RyaW5nIEVkaXRvckNsaWVudFF0
OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcm
KQorU3RyaW5nIEVkaXRvckNsaWVudFF0OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNz
cGVsbGVkV29yZChjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBtX3NwZWxsQ2hlY2tlci0+YXV0b0Nv
cnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQod29yZCk7CiB9CiAKIHZvaWQgRWRpdG9y
Q2xpZW50UXQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBWZWN0b3I8
R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKQpAQCAtNTk4LDI1ICs2MTcsMzkgQEAgdm9pZCBF
ZGl0b3JDbGllbnRRdDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0
cmluZyYsIGNvbnN0IEdyYW0KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEVkaXRv
ckNsaWVudFF0Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmlu
ZyYpCit2b2lkIEVkaXRvckNsaWVudFF0Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRX
b3JkKGNvbnN0IFN0cmluZyYgd29yZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlm
ICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NwZWxsQ2hl
Y2tlci0+dXBkYXRlVUlXaXRoTWlzc3BlbGxlZFdvcmQod29yZCk7CiB9CiAKLXZvaWQgRWRpdG9y
Q2xpZW50UXQ6OnNob3dTcGVsbGluZ1VJKGJvb2wpCit2b2lkIEVkaXRvckNsaWVudFF0OjpzaG93
U3BlbGxpbmdVSShib29sIG9uKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFs
b2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3BlbGxDaGVja2Vy
LT5zZXRTaG93VUkob24pOwogfQogCiBib29sIEVkaXRvckNsaWVudFF0OjpzcGVsbGluZ1VJSXNT
aG93aW5nKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIG1fc3BlbGxDaGVja2VyLT5pc1VJU2hvd24oKTsKIH0KIAogdm9pZCBFZGl0b3JDbGll
bnRRdDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcm
IGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgaWYgKCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFFTdHJpbmdMaXN0IGd1ZXNzZXNMaXN0OworICAgIG1fc3BlbGxDaGVja2VyLT5ndWVzc2VzRm9y
V29yZCh3b3JkLCBjb250ZXh0LCBndWVzc2VzTGlzdCk7CisgICAgZm9yIChpbnQgaSA9IDAsIGNv
dW50ID0gZ3Vlc3Nlc0xpc3QuY291bnQoKTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIGd1ZXNz
ZXMuYXBwZW5kKGd1ZXNzZXNMaXN0LmF0KGkpKTsKIH0KIAogYm9vbCBFZGl0b3JDbGllbnRRdDo6
aXNFZGl0aW5nKCkgY29uc3QKQEAgLTY3MCw2ICs3MDMsMzAgQEAgdm9pZCBFZGl0b3JDbGllbnRR
dDo6c2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGFjdGl2ZSkKICAgICBlbWl0IG1fcGFnZS0+bWlj
cm9Gb2N1c0NoYW5nZWQoKTsKIH0KIAorYm9vbCBFZGl0b3JDbGllbnRRdDo6bG9hZFNwZWxsQ2hl
Y2tlcigpCit7CisgICAgaWYgKG1fc3BlbGxDaGVja2VyKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIFF0UGxhdGZvcm1QbHVnaW4gcGxhdGZvcm1QbHVnaW47CisgICAgbV9zcGVsbENoZWNr
ZXIgPSBwbGF0Zm9ybVBsdWdpbi5jcmVhdGVTcGVsbENoZWNrZXIoKTsKKyAgICBpZiAoIW1fc3Bl
bGxDaGVja2VyKSB7CisgICAgICAgIHFXYXJuaW5nKCkgPDwgUV9GVU5DX0lORk8gPDwgIk5vIHNw
ZWxsIGNoZWNrZXIgZm91bmQiIDw8IGVuZGw7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRRdDo6ZnJlZVNwZWxs
Q2hlY2tlcigpCit7CisgICAgaWYgKCFtX3NwZWxsQ2hlY2tlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZGVsZXRlIG1fc3BlbGxDaGVja2VyOworICAgIG1fc3BlbGxDaGVja2VyID0gMDsKK30K
KwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5oCmluZGV4IGVjY2I3NWQuLjYxZjA1YzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmgKQEAg
LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBjbGFzcyBRV2ViUGFn
ZTsKK2NsYXNzIFFXZWJTcGVsbENoZWNrZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MTE5LDggKzEyMCwxMiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgUVdlYlBhZ2UqIG1fcGFn
ZTsKKyAgICBRV2ViU3BlbGxDaGVja2VyKiBtX3NwZWxsQ2hlY2tlcjsKICAgICBib29sIG1fZWRp
dGluZzsKICAgICBib29sIG1faW5VbmRvUmVkbzsgLy8gb3VyIHVuZG8gc3RhY2sgd29ya3MgZGlm
ZmVyZW50bHkgLSBkb24ndCByZS1lbnRlciEKKworICAgIGJvb2wgbG9hZFNwZWxsQ2hlY2tlcigp
OworICAgIHZvaWQgZnJlZVNwZWxsQ2hlY2tlcigpOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKaW5kZXggMmU0
NGM2Ni4uYWI2NWIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RdFBsYXRmb3JtUGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCkBAIC0xMzQsNCArMTM0LDEwIEBAIFBhc3NPd25QdHI8
UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI+IFF0UGxhdGZvcm1QbHVnaW46OmNyZWF0ZUZ1bGxT
Y3JlZW5WaWRlb0hhCiB9CiAjZW5kaWYKIAorUVdlYlNwZWxsQ2hlY2tlciogUXRQbGF0Zm9ybVBs
dWdpbjo6Y3JlYXRlU3BlbGxDaGVja2VyKCkKK3sKKyAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4q
IHAgPSBwbHVnaW4oKTsKKyAgICByZXR1cm4gcCA/IHN0YXRpY19jYXN0PFFXZWJTcGVsbENoZWNr
ZXIqPihwLT5jcmVhdGVFeHRlbnNpb24oUVdlYktpdFBsYXRmb3JtUGx1Z2luOjpTcGVsbENoZWNr
ZXIpKSA6IDA7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RdFBsYXRmb3JtUGx1Z2luLmgKaW5kZXggMzE2YjhlOC4uODQ3OTM2MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgKQEAgLTMz
LDYgKzMzLDcgQEAgY2xhc3MgUVdlYlRvdWNoTW9kaWZpZXI7CiAjaWYgRU5BQkxFKFZJREVPKSAm
JiBVU0UoUVRfTVVMVElNRURJQSkKIGNsYXNzIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOwog
I2VuZGlmCitjbGFzcyBRV2ViU3BlbGxDaGVja2VyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTUzLDYgKzU0LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKFFUX01V
TFRJTUVESUEpCiAgICAgUGFzc093blB0cjxRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcj4gY3Jl
YXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOwogI2VuZGlmCisgICAgUVdlYlNwZWxsQ2hlY2tl
ciogY3JlYXRlU3BlbGxDaGVja2VyKCk7CiAKICAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHBs
dWdpbigpOwogCg==
</data>
<flag name="review"
          id="98277"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103074</attachid>
            <date>2011-08-05 08:35:39 -0700</date>
            <delta_ts>2011-08-05 08:40:31 -0700</delta_ts>
            <desc>proposed patch III</desc>
            <filename>bug_44114.patch</filename>
            <type>text/plain</type>
            <size>13489</size>
            <attacher name="Dawit A.">adawit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmZjc4ZDk0Li5iNWRjYTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTEtMDgtMDUgIExpbmRzYXkgTWF0aGllc29uICAgPGxpbmRzYXkubWF0aGllc29uQGdt
YWlsLmNvbT4gYW5kIERhd2l0IEFsZW1heWVodSAgIDxhZGF3aXRAa2RlLm9yZz4KKworICAgICAg
ICBbUXRdIE1pc3Npbmcgc3BlbGwgY2hlY2sgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxMTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgc3BlbGwgY2hlY2sgc3VwcG9ydCBp
biBRdFdlYktpdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdFcnJvclVuZGVybGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKToK
KwogMjAxMS0wOC0wMyAgU2FpbGVzaCBBZ3Jhd2FsICA8c2FpbEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQ2hyb21pdW0gTWFjOiBNYWtlIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1
bU1hYy5oIGMrKyBjb21wYXRpYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXggMTBkZTk2Ny4uZDBm
YTRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcApAQCAtOTAwLDEyICs5MDAsMTA2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBm
bG9hdCB3aWR0aCwgYm9vCiAgICAgZHJhd0xpbmUoSW50UG9pbnQoc3RhcnRQb2ludC54KCksIHN0
YXJ0UG9pbnQueSgpKSwgSW50UG9pbnQoZW5kUG9pbnQueCgpLCBlbmRQb2ludC55KCkpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZs
b2F0UG9pbnQmLCBmbG9hdCwgVGV4dENoZWNraW5nTGluZVN0eWxlKQorCisvKgorICogICBOT1RF
OiBUaGlzIGNvZGUgaXMgY29tcGxldGVseSBiYXNlZCB1cG9uIHRoZSBvbmUgZnJvbQorICogICBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9EcmF3RXJyb3JVbmRlcmxpbmUu
e2h8Y3BwfQorICoKKyAqICAgRHJhd3MgYW4gZXJyb3IgdW5kZXJsaW5lIHRoYXQgbG9va3MgbGlr
ZSBvbmUgb2Y6CisgKgorICogICAgICAgICAgICAgICBIICAgICAgIEUgICAgICAgICAgICAgICAg
SAorICogICAgICAvXCAgICAgIC9cICAgICAgL1wgICAgICAgIC9cICAgICAgL1wgICAgICAgICAg
ICAgICAtCisgKiAgICBBLyAgXCAgICAvICBcICAgIC8gIFwgICAgIEEvICBcICAgIC8gIFwgICAg
ICAgICAgICAgIHwKKyAqICAgICBcICAgXCAgLyAgICBcICAvICAgL0QgICAgIFwgICBcICAvICAg
IFwgICAgICAgICAgICAgfAorICogICAgICBcICAgXC8gIEMgICBcLyAgIC8gICAgICAgIFwgICBc
LyAgIEMgIFwgICAgICAgICAgICB8IGhlaWdodCA9IGhlaWdodFNxdWFyZXMgKiBzcXVhcmUKKyAq
ICAgICAgIFwgICAgICAvXCAgRiAgIC8gICAgICAgICAgXCAgRiAgIC9cICAgXCAgICAgICAgICAg
fAorICogICAgICAgIFwgICAgLyAgXCAgICAvICAgICAgICAgICAgXCAgICAvICBcICAgXEcgICAg
ICAgICB8CisgKiAgICAgICAgIFwgIC8gICAgXCAgLyAgICAgICAgICAgICAgXCAgLyAgICBcICAv
ICAgICAgICAgIHwKKyAqICAgICAgICAgIFwvICAgICAgXC8gICAgICAgICAgICAgICAgXC8gICAg
ICBcLyAgICAgICAgICAgLQorICogICAgICAgICAgQiAgICAgICAgICAgICAgICAgICAgICAgICBC
CisgKiAgICAgICAgICB8LS0tfAorICogICAgICAgIHVuaXRXaWR0aCA9IChoZWlnaHRTcXVhcmVz
IC0gMSkgKiBzcXVhcmUKKyAqCisgKiAgVGhlIHgsIHksIHdpZHRoLCBoZWlnaHQgcGFzc2VkIGlu
IGdpdmUgdGhlIGRlc2lyZWQgYm91bmRpbmcgYm94OworICogIHgvd2lkdGggYXJlIGFkanVzdGVk
IHRvIG1ha2UgdGhlIHVuZGVybGluZSBhIGludGVnZXIgbnVtYmVyIG9mIHVuaXRzIHdpZGUuCisq
Lworc3RhdGljIHZvaWQgZHJhd0Vycm9yVW5kZXJsaW5lKFFQYWludGVyICpwYWludGVyLCBxcmVh
bCB4LCBxcmVhbCB5LCBxcmVhbCB3aWR0aCwgcXJlYWwgaGVpZ2h0KQoreworICAgIGNvbnN0IHFy
ZWFsIGhlaWdodFNxdWFyZXMgPSAyLjU7CisKKyAgICBxcmVhbCBzcXVhcmUgPSBoZWlnaHQgLyBo
ZWlnaHRTcXVhcmVzOworICAgIHFyZWFsIGhhbGZTcXVhcmUgPSAwLjUgKiBzcXVhcmU7CisKKyAg
ICBxcmVhbCB1bml0V2lkdGggPSAoaGVpZ2h0U3F1YXJlcyAtIDEuMCkgKiBzcXVhcmU7CisgICAg
aW50IHdpZHRoVW5pdHMgPSBzdGF0aWNfY2FzdDxpbnQ+KCh3aWR0aCArIDAuNSAqIHVuaXRXaWR0
aCkgLyB1bml0V2lkdGgpOworCisgICAgeCArPSAwLjUgKiAod2lkdGggLSB3aWR0aFVuaXRzICog
dW5pdFdpZHRoKTsKKyAgICB3aWR0aCA9IHdpZHRoVW5pdHMgKiB1bml0V2lkdGg7CisKKyAgICBx
cmVhbCBib3R0b20gPSB5ICsgaGVpZ2h0OworICAgIHFyZWFsIHRvcCA9IHk7CisKKyAgICBRUGFp
bnRlclBhdGggcGF0aDsKKyAgICAvLyBCb3R0b20gb2Ygc3F1aWdnbGUKKyAgICBwYXRoLm1vdmVU
byh4IC0gaGFsZlNxdWFyZSwgdG9wICsgaGFsZlNxdWFyZSk7IC8vIEEKKworICAgIGludCBpID0g
MDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGhVbml0czsgaSArPSAyKSB7CisgICAgICAgIHFy
ZWFsIG1pZGRsZSA9IHggKyAoaSArIDEpICogdW5pdFdpZHRoOworICAgICAgICBxcmVhbCByaWdo
dCA9IHggKyAoaSArIDIpICogdW5pdFdpZHRoOworCisgICAgICAgIHBhdGgubGluZVRvKG1pZGRs
ZSwgYm90dG9tKTsgLy8gQgorCisgICAgICAgIGlmIChpICsgMiA9PSB3aWR0aFVuaXRzKQorICAg
ICAgICAgICAgcGF0aC5saW5lVG8ocmlnaHQgKyBoYWxmU3F1YXJlLCB0b3AgKyBoYWxmU3F1YXJl
KTsgLy8gRAorICAgICAgICBlbHNlIGlmIChpICsgMSAhPSB3aWR0aFVuaXRzKQorICAgICAgICAg
ICAgcGF0aC5saW5lVG8ocmlnaHQsIHRvcCArIHNxdWFyZSk7IC8vIEMKKyAgICB9CisKKyAgICAv
LyBUb3Agb2Ygc3F1aWdnbGUKKyAgICBmb3IgKGkgLT0gMjsgaSA+PSAwOyBpIC09IDIpIHsKKyAg
ICAgICAgcXJlYWwgbGVmdCA9IHggKyBpICogdW5pdFdpZHRoOworICAgICAgICBxcmVhbCBtaWRk
bGUgPSB4ICsgKGkgKyAxKSAqIHVuaXRXaWR0aDsKKyAgICAgICAgcXJlYWwgcmlnaHQgPSB4ICsg
KGkgKyAyKSAqIHVuaXRXaWR0aDsKKworICAgICAgICBpZiAoaSArIDEgPT0gd2lkdGhVbml0cykK
KyAgICAgICAgICAgIHBhdGgubGluZVRvKG1pZGRsZSArIGhhbGZTcXVhcmUsIGJvdHRvbSAtIGhh
bGZTcXVhcmUpOyAvLyBHCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGkgKyAyID09
IHdpZHRoVW5pdHMpCisgICAgICAgICAgICAgICAgcGF0aC5saW5lVG8ocmlnaHQsIHRvcCk7IC8v
IEUKKworICAgICAgICAgICAgcGF0aC5saW5lVG8obWlkZGxlLCBib3R0b20gLSBoYWxmU3F1YXJl
KTsgLy8gRgorICAgICAgICB9CisKKyAgICAgICAgcGF0aC5saW5lVG8obGVmdCwgdG9wKTsgLy8g
SAorICAgIH0KKworICAgIHBhaW50ZXItPmRyYXdQYXRoKHBhdGgpOworfQorCisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBv
cmlnaW4sIGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICBRUGFpbnRlciogcGFpbnRlciA9IHBsYXRmb3JtQ29udGV4dCgpOworICAg
IGNvbnN0IFFQZW4gb3JpZ2luYWxQZW4gPSBwYWludGVyLT5wZW4oKTsKKworICAgIHN3aXRjaCAo
c3R5bGUpIHsKKyAgICBjYXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgorICAgICAg
ICBwYWludGVyLT5zZXRQZW4oUXQ6OnJlZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4
dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKFF0Ojpn
cmVlbik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHBhaW50ZXItPnNl
dFBlbihvcmlnaW5hbFBlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkcmF3RXJy
b3JVbmRlcmxpbmUocGFpbnRlciwgb3JpZ2luLngoKSwgb3JpZ2luLnkoKSwgd2lkdGgsIGNNaXNz
cGVsbGluZ0xpbmVUaGlja25lc3MpOworICAgIHBhaW50ZXItPnNldFBlbihvcmlnaW5hbFBlbik7
CiB9CiAKIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiBmcmVjdCwgUm91bmRpbmdNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAppbmRleCAxZjYyODA0Li4yODYxYzBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaApAQCAtMjEsNiArMjEs
OCBAQAogI2lmbmRlZiBRV0VCS0lUUExBVEZPUk1QTFVHSU5fSAogI2RlZmluZSBRV0VCS0lUUExB
VEZPUk1QTFVHSU5fSAogCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorCiAvKgogICogIFdh
cm5pbmc6IFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgaXMgbm90ICBwYXJ0IG9mIHRoZSBwdWJs
aWMgUXRXZWJLaXQgQVBJCiAgKiAgYW5kIG1heSBiZSBjaGFuZ2VkIGZyb20gdmVyc2lvbiB0byB2
ZXJzaW9uIG9yIGV2ZW4gYmUgY29tcGxldGVseSByZW1vdmVkLgpAQCAtMTM0LDYgKzEzNiwyMSBA
QCBwdWJsaWMgUV9TTE9UUzoKIH07CiAjZW5kaWYKIAorY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdl
YlNwZWxsQ2hlY2tlciA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIHZpcnR1YWwgflFXZWJTcGVsbENoZWNrZXIoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBp
c0NvbnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB0b2dnbGVDb250aW5vdXNTcGVsbENoZWNraW5nKCkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGxlYXJuV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgUVN0cmluZyYgd29yZCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgUVN0cmluZyYgd29yZCwg
aW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKSA9IDA7Cisg
ICAgdmlydHVhbCBRU3RyaW5nIGF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3Jk
KGNvbnN0IFFTdHJpbmcmIHdvcmQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ3Vlc3Nlc0Zvcldv
cmQoY29uc3QgUVN0cmluZyYgd29yZCwgY29uc3QgUVN0cmluZyYgY29udGV4dCwgUVN0cmluZ0xp
c3QmIGd1ZXNzZXMpID0gMDsKK307CisKIGNsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+UVdlYktpdFBsYXRmb3JtUGx1Z2luKCkge30KQEAgLTE0Myw3
ICsxNjAsOCBAQCBwdWJsaWM6CiAgICAgICAgIE5vdGlmaWNhdGlvbnMsCiAgICAgICAgIEhhcHRp
Y3MsCiAgICAgICAgIFRvdWNoSW50ZXJhY3Rpb24sCi0gICAgICAgIEZ1bGxTY3JlZW5WaWRlb1Bs
YXllcgorICAgICAgICBGdWxsU2NyZWVuVmlkZW9QbGF5ZXIsCisgICAgICAgIFNwZWxsQ2hlY2tl
cgogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9u
KSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGRiYWI4NTcuLjNhOGI2N2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDgtMDUgIExpbmRzYXkgTWF0aGllc29uICAg
PGxpbmRzYXkubWF0aGllc29uQGdtYWlsLmNvbT4gYW5kIERhd2l0IEFsZW1heWVodSAgIDxhZGF3
aXRAa2RlLm9yZz4KKworICAgICAgICBbUXRdIE1pc3Npbmcgc3BlbGwgY2hlY2sgc3VwcG9ydAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxMTQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
c3BlbGwgY2hlY2sgc3VwcG9ydCBpbiBRdFdlYktpdC4KKworICAgICAgICAqIEFwaS9xd2Via2l0
cGxhdGZvcm1wbHVnaW4uaDoKKyAgICAgICAgKiBRdFdlYktpdC5wcm86CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Q2xpZW50UXQ6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvckNsaWVudFF0Ojp0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZyk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvckNsaWVudFF0Ojp0ZXh0Q2hlY2tlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpRdFBsYXRmb3JtUGx1
Z2luOjpjcmVhdGVTcGVsbENoZWNrZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1F0UGxh
dGZvcm1QbHVnaW4uaDoKKwogMjAxMS0wOC0wMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdv
b2dsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW1RpbWVsaW5lXSBIb3ZlciBvbiBw
YWludCBldmVudHMgYW5kIHNlZSByZWN0IG91dGxpbmUgYXJvdW5kIHRoYXQgYXJlYS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvUXRXZWJLaXQucHJvIGIvU291cmNlL1dlYktpdC9xdC9R
dFdlYktpdC5wcm8KaW5kZXggM2M1ODA4OS4uMzEzNjcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9xdC9RdFdlYktpdC5wcm8KKysrIGIvU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8K
QEAgLTE5NCw2ICsxOTQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9y
dC9Qb3B1cE1lbnVRdC5jcHAgXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1Q
bHVnaW4uY3BwIFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVRdC5j
cHAgXAorICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuY3BwIFwK
ICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCiAKIEhF
QURFUlMgKz0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRv
ckNsaWVudFF0LmNwcAppbmRleCA3MzIxMGYwLi41YjBhYzlhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcApAQCAtNTYsNyArNTYs
NiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCi0jZGVm
aW5lIG1ldGhvZERlYnVnKCkgcURlYnVnKCJFZGl0b3JDbGllbnRRdDogJXMiLCBfX0ZVTkNUSU9O
X18pOwogCiBzdGF0aWMgUVN0cmluZyBkdW1wUGF0aChXZWJDb3JlOjpOb2RlICpub2RlKQogewpA
QCAtMTA5LDcgKzEwOCw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OnNob3VsZFNob3dEZWxldGVJ
bnRlcmZhY2UoSFRNTEVsZW1lbnQqIGVsZW1lbnQpCiAKIGJvb2wgRWRpdG9yQ2xpZW50UXQ6Omlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKIHsKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIG1fdGV4dENoZWNrZXJDbGllbnQuaXNDb250aW5vdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpOwogfQogCiBib29sIEVkaXRvckNsaWVudFF0Ojppc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoKQpAQCAtMzQ0LDcgKzM0Myw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmlzU2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpCiAKIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnRvZ2dsZUNv
bnRpbnVvdXNTcGVsbENoZWNraW5nKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBtX3RleHRDaGVja2VyQ2xpZW50LnRvZ2dsZUNvbnRpbm91c1NwZWxsQ2hlY2tpbmcoKTsK
IH0KIAogdm9pZCBFZGl0b3JDbGllbnRRdDo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkKQEAgLTU2
NywzMiArNTY2LDYgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6dGV4dERpZENoYW5nZUluVGV4dEFy
ZWEoRWxlbWVudCopCiB7CiB9CiAKLXZvaWQgRWRpdG9yQ2xpZW50UXQ6Omlnbm9yZVdvcmRJblNw
ZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEVkaXRvckNsaWVudFF0OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFF0OjpjaGVja1NwZWxsaW5n
T2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQsIGludCosIGludCopCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotU3RyaW5nIEVkaXRvckNsaWVudFF0OjpnZXRBdXRvQ29ycmVjdFN1Z2dl
c3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFF0Ojpj
aGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgVmVjdG9yPEdyYW1tYXJEZXRh
aWw+JiwgaW50KiwgaW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEVk
aXRvckNsaWVudFF0Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAg
LTYxNCwxMSArNTg3LDYgQEAgYm9vbCBFZGl0b3JDbGllbnRRdDo6c3BlbGxpbmdVSUlzU2hvd2lu
ZygpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEVkaXRvckNsaWVudFF0OjpnZXRHdWVz
c2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVj
dG9yPFN0cmluZz4mIGd1ZXNzZXMpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9v
bCBFZGl0b3JDbGllbnRRdDo6aXNFZGl0aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9lZGl0
aW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JD
bGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRR
dC5oCmluZGV4IGVjY2I3NWQuLmQ5NjU4YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmgKQEAgLTMxLDE2ICszMSwxNSBAQAogI2RlZmlu
ZSBFZGl0b3JDbGllbnRRdF9oCiAKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRl
ICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKLQorI2luY2x1
ZGUgIlRleHRDaGVja2VyQ2xpZW50UXQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBj
bGFzcyBRV2ViUGFnZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBFZGl0b3JDbGll
bnRRdCA6IHB1YmxpYyBFZGl0b3JDbGllbnQsIHB1YmxpYyBUZXh0Q2hlY2tlckNsaWVudCB7Citj
bGFzcyBFZGl0b3JDbGllbnRRdCA6IHB1YmxpYyBFZGl0b3JDbGllbnQgewogcHVibGljOgogICAg
IEVkaXRvckNsaWVudFF0KFFXZWJQYWdlKiBwYWdlKTsKICAgICAKQEAgLTk3LDIwICs5NiwxMyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQo
RWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVt
ZW50Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25z
dCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpOwot
ICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQg
bGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgp
OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxs
ZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOwotICAgIHZpcnR1YWwgdm9pZCBj
aGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFZlY3RvcjxHcmFt
bWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5n
dGgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
Y29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpOwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpOwogICAgIHZp
cnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpOwogICAgIHZpcnR1YWwgYm9vbCBz
cGVsbGluZ1VJSXNTaG93aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5n
PiYgZ3Vlc3Nlcyk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoU3BlbGxDaGVja2VyKiwgaW50
LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzaywgY29uc3QgU3RyaW5nJikge30KLSAgICB2
aXJ0dWFsIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIHsgcmV0dXJuIHRoaXM7IH0K
KyAgICB2aXJ0dWFsIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIHsgcmV0dXJuICZt
X3RleHRDaGVja2VyQ2xpZW50OyB9CiAKICAgICBib29sIGlzRWRpdGluZygpIGNvbnN0OwogCkBA
IC0xMTgsNiArMTEwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2VwdHNFZGl0aW5n
OwogCiBwcml2YXRlOgorICAgIFRleHRDaGVja2VyQ2xpZW50UXQgbV90ZXh0Q2hlY2tlckNsaWVu
dDsKICAgICBRV2ViUGFnZSogbV9wYWdlOwogICAgIGJvb2wgbV9lZGl0aW5nOwogICAgIGJvb2wg
bV9pblVuZG9SZWRvOyAvLyBvdXIgdW5kbyBzdGFjayB3b3JrcyBkaWZmZXJlbnRseSAtIGRvbid0
IHJlLWVudGVyIQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9R
dFBsYXRmb3JtUGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQ
bGF0Zm9ybVBsdWdpbi5jcHAKaW5kZXggMmU0NGM2Ni4uYWI2NWIzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCkBAIC0x
MzQsNCArMTM0LDEwIEBAIFBhc3NPd25QdHI8UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI+IFF0
UGxhdGZvcm1QbHVnaW46OmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhCiB9CiAjZW5kaWYKIAorUVdl
YlNwZWxsQ2hlY2tlciogUXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlU3BlbGxDaGVja2VyKCkKK3sK
KyAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHAgPSBwbHVnaW4oKTsKKyAgICByZXR1cm4gcCA/
IHN0YXRpY19jYXN0PFFXZWJTcGVsbENoZWNrZXIqPihwLT5jcmVhdGVFeHRlbnNpb24oUVdlYktp
dFBsYXRmb3JtUGx1Z2luOjpTcGVsbENoZWNrZXIpKSA6IDA7Cit9CisKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgKaW5kZXggMzE2
YjhlOC4uODQ3OTM2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RdFBsYXRmb3JtUGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RdFBsYXRmb3JtUGx1Z2luLmgKQEAgLTMzLDYgKzMzLDcgQEAgY2xhc3MgUVdlYlRvdWNoTW9k
aWZpZXI7CiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoUVRfTVVMVElNRURJQSkKIGNsYXNzIFFX
ZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOwogI2VuZGlmCitjbGFzcyBRV2ViU3BlbGxDaGVja2Vy
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDYgKzU0LDcgQEAgcHVibGljOgogI2lm
IEVOQUJMRShWSURFTykgJiYgVVNFKFFUX01VTFRJTUVESUEpCiAgICAgUGFzc093blB0cjxRV2Vi
RnVsbFNjcmVlblZpZGVvSGFuZGxlcj4gY3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOwog
I2VuZGlmCisgICAgUVdlYlNwZWxsQ2hlY2tlciogY3JlYXRlU3BlbGxDaGVja2VyKCk7CiAKICAg
ICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHBsdWdpbigpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103075</attachid>
            <date>2011-08-05 08:40:31 -0700</date>
            <delta_ts>2011-08-05 11:18:42 -0700</delta_ts>
            <desc>proposed patch IV</desc>
            <filename>bug_44114.patch</filename>
            <type>text/plain</type>
            <size>20559</size>
            <attacher name="Dawit A.">adawit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmZjc4ZDk0Li5iNWRjYTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTEtMDgtMDUgIExpbmRzYXkgTWF0aGllc29uICAgPGxpbmRzYXkubWF0aGllc29uQGdt
YWlsLmNvbT4gYW5kIERhd2l0IEFsZW1heWVodSAgIDxhZGF3aXRAa2RlLm9yZz4KKworICAgICAg
ICBbUXRdIE1pc3Npbmcgc3BlbGwgY2hlY2sgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxMTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgc3BlbGwgY2hlY2sgc3VwcG9ydCBp
biBRdFdlYktpdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdFcnJvclVuZGVybGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKToK
KwogMjAxMS0wOC0wMyAgU2FpbGVzaCBBZ3Jhd2FsICA8c2FpbEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQ2hyb21pdW0gTWFjOiBNYWtlIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1
bU1hYy5oIGMrKyBjb21wYXRpYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXggMTBkZTk2Ny4uZDBm
YTRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcApAQCAtOTAwLDEyICs5MDAsMTA2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBm
bG9hdCB3aWR0aCwgYm9vCiAgICAgZHJhd0xpbmUoSW50UG9pbnQoc3RhcnRQb2ludC54KCksIHN0
YXJ0UG9pbnQueSgpKSwgSW50UG9pbnQoZW5kUG9pbnQueCgpLCBlbmRQb2ludC55KCkpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZs
b2F0UG9pbnQmLCBmbG9hdCwgVGV4dENoZWNraW5nTGluZVN0eWxlKQorCisvKgorICogICBOT1RF
OiBUaGlzIGNvZGUgaXMgY29tcGxldGVseSBiYXNlZCB1cG9uIHRoZSBvbmUgZnJvbQorICogICBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9EcmF3RXJyb3JVbmRlcmxpbmUu
e2h8Y3BwfQorICoKKyAqICAgRHJhd3MgYW4gZXJyb3IgdW5kZXJsaW5lIHRoYXQgbG9va3MgbGlr
ZSBvbmUgb2Y6CisgKgorICogICAgICAgICAgICAgICBIICAgICAgIEUgICAgICAgICAgICAgICAg
SAorICogICAgICAvXCAgICAgIC9cICAgICAgL1wgICAgICAgIC9cICAgICAgL1wgICAgICAgICAg
ICAgICAtCisgKiAgICBBLyAgXCAgICAvICBcICAgIC8gIFwgICAgIEEvICBcICAgIC8gIFwgICAg
ICAgICAgICAgIHwKKyAqICAgICBcICAgXCAgLyAgICBcICAvICAgL0QgICAgIFwgICBcICAvICAg
IFwgICAgICAgICAgICAgfAorICogICAgICBcICAgXC8gIEMgICBcLyAgIC8gICAgICAgIFwgICBc
LyAgIEMgIFwgICAgICAgICAgICB8IGhlaWdodCA9IGhlaWdodFNxdWFyZXMgKiBzcXVhcmUKKyAq
ICAgICAgIFwgICAgICAvXCAgRiAgIC8gICAgICAgICAgXCAgRiAgIC9cICAgXCAgICAgICAgICAg
fAorICogICAgICAgIFwgICAgLyAgXCAgICAvICAgICAgICAgICAgXCAgICAvICBcICAgXEcgICAg
ICAgICB8CisgKiAgICAgICAgIFwgIC8gICAgXCAgLyAgICAgICAgICAgICAgXCAgLyAgICBcICAv
ICAgICAgICAgIHwKKyAqICAgICAgICAgIFwvICAgICAgXC8gICAgICAgICAgICAgICAgXC8gICAg
ICBcLyAgICAgICAgICAgLQorICogICAgICAgICAgQiAgICAgICAgICAgICAgICAgICAgICAgICBC
CisgKiAgICAgICAgICB8LS0tfAorICogICAgICAgIHVuaXRXaWR0aCA9IChoZWlnaHRTcXVhcmVz
IC0gMSkgKiBzcXVhcmUKKyAqCisgKiAgVGhlIHgsIHksIHdpZHRoLCBoZWlnaHQgcGFzc2VkIGlu
IGdpdmUgdGhlIGRlc2lyZWQgYm91bmRpbmcgYm94OworICogIHgvd2lkdGggYXJlIGFkanVzdGVk
IHRvIG1ha2UgdGhlIHVuZGVybGluZSBhIGludGVnZXIgbnVtYmVyIG9mIHVuaXRzIHdpZGUuCisq
Lworc3RhdGljIHZvaWQgZHJhd0Vycm9yVW5kZXJsaW5lKFFQYWludGVyICpwYWludGVyLCBxcmVh
bCB4LCBxcmVhbCB5LCBxcmVhbCB3aWR0aCwgcXJlYWwgaGVpZ2h0KQoreworICAgIGNvbnN0IHFy
ZWFsIGhlaWdodFNxdWFyZXMgPSAyLjU7CisKKyAgICBxcmVhbCBzcXVhcmUgPSBoZWlnaHQgLyBo
ZWlnaHRTcXVhcmVzOworICAgIHFyZWFsIGhhbGZTcXVhcmUgPSAwLjUgKiBzcXVhcmU7CisKKyAg
ICBxcmVhbCB1bml0V2lkdGggPSAoaGVpZ2h0U3F1YXJlcyAtIDEuMCkgKiBzcXVhcmU7CisgICAg
aW50IHdpZHRoVW5pdHMgPSBzdGF0aWNfY2FzdDxpbnQ+KCh3aWR0aCArIDAuNSAqIHVuaXRXaWR0
aCkgLyB1bml0V2lkdGgpOworCisgICAgeCArPSAwLjUgKiAod2lkdGggLSB3aWR0aFVuaXRzICog
dW5pdFdpZHRoKTsKKyAgICB3aWR0aCA9IHdpZHRoVW5pdHMgKiB1bml0V2lkdGg7CisKKyAgICBx
cmVhbCBib3R0b20gPSB5ICsgaGVpZ2h0OworICAgIHFyZWFsIHRvcCA9IHk7CisKKyAgICBRUGFp
bnRlclBhdGggcGF0aDsKKyAgICAvLyBCb3R0b20gb2Ygc3F1aWdnbGUKKyAgICBwYXRoLm1vdmVU
byh4IC0gaGFsZlNxdWFyZSwgdG9wICsgaGFsZlNxdWFyZSk7IC8vIEEKKworICAgIGludCBpID0g
MDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGhVbml0czsgaSArPSAyKSB7CisgICAgICAgIHFy
ZWFsIG1pZGRsZSA9IHggKyAoaSArIDEpICogdW5pdFdpZHRoOworICAgICAgICBxcmVhbCByaWdo
dCA9IHggKyAoaSArIDIpICogdW5pdFdpZHRoOworCisgICAgICAgIHBhdGgubGluZVRvKG1pZGRs
ZSwgYm90dG9tKTsgLy8gQgorCisgICAgICAgIGlmIChpICsgMiA9PSB3aWR0aFVuaXRzKQorICAg
ICAgICAgICAgcGF0aC5saW5lVG8ocmlnaHQgKyBoYWxmU3F1YXJlLCB0b3AgKyBoYWxmU3F1YXJl
KTsgLy8gRAorICAgICAgICBlbHNlIGlmIChpICsgMSAhPSB3aWR0aFVuaXRzKQorICAgICAgICAg
ICAgcGF0aC5saW5lVG8ocmlnaHQsIHRvcCArIHNxdWFyZSk7IC8vIEMKKyAgICB9CisKKyAgICAv
LyBUb3Agb2Ygc3F1aWdnbGUKKyAgICBmb3IgKGkgLT0gMjsgaSA+PSAwOyBpIC09IDIpIHsKKyAg
ICAgICAgcXJlYWwgbGVmdCA9IHggKyBpICogdW5pdFdpZHRoOworICAgICAgICBxcmVhbCBtaWRk
bGUgPSB4ICsgKGkgKyAxKSAqIHVuaXRXaWR0aDsKKyAgICAgICAgcXJlYWwgcmlnaHQgPSB4ICsg
KGkgKyAyKSAqIHVuaXRXaWR0aDsKKworICAgICAgICBpZiAoaSArIDEgPT0gd2lkdGhVbml0cykK
KyAgICAgICAgICAgIHBhdGgubGluZVRvKG1pZGRsZSArIGhhbGZTcXVhcmUsIGJvdHRvbSAtIGhh
bGZTcXVhcmUpOyAvLyBHCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGkgKyAyID09
IHdpZHRoVW5pdHMpCisgICAgICAgICAgICAgICAgcGF0aC5saW5lVG8ocmlnaHQsIHRvcCk7IC8v
IEUKKworICAgICAgICAgICAgcGF0aC5saW5lVG8obWlkZGxlLCBib3R0b20gLSBoYWxmU3F1YXJl
KTsgLy8gRgorICAgICAgICB9CisKKyAgICAgICAgcGF0aC5saW5lVG8obGVmdCwgdG9wKTsgLy8g
SAorICAgIH0KKworICAgIHBhaW50ZXItPmRyYXdQYXRoKHBhdGgpOworfQorCisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBv
cmlnaW4sIGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICBRUGFpbnRlciogcGFpbnRlciA9IHBsYXRmb3JtQ29udGV4dCgpOworICAg
IGNvbnN0IFFQZW4gb3JpZ2luYWxQZW4gPSBwYWludGVyLT5wZW4oKTsKKworICAgIHN3aXRjaCAo
c3R5bGUpIHsKKyAgICBjYXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgorICAgICAg
ICBwYWludGVyLT5zZXRQZW4oUXQ6OnJlZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4
dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKFF0Ojpn
cmVlbik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHBhaW50ZXItPnNl
dFBlbihvcmlnaW5hbFBlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkcmF3RXJy
b3JVbmRlcmxpbmUocGFpbnRlciwgb3JpZ2luLngoKSwgb3JpZ2luLnkoKSwgd2lkdGgsIGNNaXNz
cGVsbGluZ0xpbmVUaGlja25lc3MpOworICAgIHBhaW50ZXItPnNldFBlbihvcmlnaW5hbFBlbik7
CiB9CiAKIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiBmcmVjdCwgUm91bmRpbmdNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAppbmRleCAxZjYyODA0Li4yODYxYzBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaApAQCAtMjEsNiArMjEs
OCBAQAogI2lmbmRlZiBRV0VCS0lUUExBVEZPUk1QTFVHSU5fSAogI2RlZmluZSBRV0VCS0lUUExB
VEZPUk1QTFVHSU5fSAogCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorCiAvKgogICogIFdh
cm5pbmc6IFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgaXMgbm90ICBwYXJ0IG9mIHRoZSBwdWJs
aWMgUXRXZWJLaXQgQVBJCiAgKiAgYW5kIG1heSBiZSBjaGFuZ2VkIGZyb20gdmVyc2lvbiB0byB2
ZXJzaW9uIG9yIGV2ZW4gYmUgY29tcGxldGVseSByZW1vdmVkLgpAQCAtMTM0LDYgKzEzNiwyMSBA
QCBwdWJsaWMgUV9TTE9UUzoKIH07CiAjZW5kaWYKIAorY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdl
YlNwZWxsQ2hlY2tlciA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIHZpcnR1YWwgflFXZWJTcGVsbENoZWNrZXIoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBp
c0NvbnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB0b2dnbGVDb250aW5vdXNTcGVsbENoZWNraW5nKCkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGxlYXJuV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgUVN0cmluZyYgd29yZCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgUVN0cmluZyYgd29yZCwg
aW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKSA9IDA7Cisg
ICAgdmlydHVhbCBRU3RyaW5nIGF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3Jk
KGNvbnN0IFFTdHJpbmcmIHdvcmQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ3Vlc3Nlc0Zvcldv
cmQoY29uc3QgUVN0cmluZyYgd29yZCwgY29uc3QgUVN0cmluZyYgY29udGV4dCwgUVN0cmluZ0xp
c3QmIGd1ZXNzZXMpID0gMDsKK307CisKIGNsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+UVdlYktpdFBsYXRmb3JtUGx1Z2luKCkge30KQEAgLTE0Myw3
ICsxNjAsOCBAQCBwdWJsaWM6CiAgICAgICAgIE5vdGlmaWNhdGlvbnMsCiAgICAgICAgIEhhcHRp
Y3MsCiAgICAgICAgIFRvdWNoSW50ZXJhY3Rpb24sCi0gICAgICAgIEZ1bGxTY3JlZW5WaWRlb1Bs
YXllcgorICAgICAgICBGdWxsU2NyZWVuVmlkZW9QbGF5ZXIsCisgICAgICAgIFNwZWxsQ2hlY2tl
cgogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9u
KSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGRiYWI4NTcuLjNhOGI2N2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDgtMDUgIExpbmRzYXkgTWF0aGllc29uICAg
PGxpbmRzYXkubWF0aGllc29uQGdtYWlsLmNvbT4gYW5kIERhd2l0IEFsZW1heWVodSAgIDxhZGF3
aXRAa2RlLm9yZz4KKworICAgICAgICBbUXRdIE1pc3Npbmcgc3BlbGwgY2hlY2sgc3VwcG9ydAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxMTQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
c3BlbGwgY2hlY2sgc3VwcG9ydCBpbiBRdFdlYktpdC4KKworICAgICAgICAqIEFwaS9xd2Via2l0
cGxhdGZvcm1wbHVnaW4uaDoKKyAgICAgICAgKiBRdFdlYktpdC5wcm86CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Q2xpZW50UXQ6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvckNsaWVudFF0Ojp0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZyk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvckNsaWVudFF0Ojp0ZXh0Q2hlY2tlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpRdFBsYXRmb3JtUGx1
Z2luOjpjcmVhdGVTcGVsbENoZWNrZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1F0UGxh
dGZvcm1QbHVnaW4uaDoKKwogMjAxMS0wOC0wMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdv
b2dsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW1RpbWVsaW5lXSBIb3ZlciBvbiBw
YWludCBldmVudHMgYW5kIHNlZSByZWN0IG91dGxpbmUgYXJvdW5kIHRoYXQgYXJlYS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvUXRXZWJLaXQucHJvIGIvU291cmNlL1dlYktpdC9xdC9R
dFdlYktpdC5wcm8KaW5kZXggM2M1ODA4OS4uMzEzNjcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9xdC9RdFdlYktpdC5wcm8KKysrIGIvU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8K
QEAgLTE5NCw2ICsxOTQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9y
dC9Qb3B1cE1lbnVRdC5jcHAgXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1Q
bHVnaW4uY3BwIFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVRdC5j
cHAgXAorICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuY3BwIFwK
ICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCiAKIEhF
QURFUlMgKz0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRv
ckNsaWVudFF0LmNwcAppbmRleCA3MzIxMGYwLi41YjBhYzlhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcApAQCAtNTYsNyArNTYs
NiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCi0jZGVm
aW5lIG1ldGhvZERlYnVnKCkgcURlYnVnKCJFZGl0b3JDbGllbnRRdDogJXMiLCBfX0ZVTkNUSU9O
X18pOwogCiBzdGF0aWMgUVN0cmluZyBkdW1wUGF0aChXZWJDb3JlOjpOb2RlICpub2RlKQogewpA
QCAtMTA5LDcgKzEwOCw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OnNob3VsZFNob3dEZWxldGVJ
bnRlcmZhY2UoSFRNTEVsZW1lbnQqIGVsZW1lbnQpCiAKIGJvb2wgRWRpdG9yQ2xpZW50UXQ6Omlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKIHsKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIG1fdGV4dENoZWNrZXJDbGllbnQuaXNDb250aW5vdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpOwogfQogCiBib29sIEVkaXRvckNsaWVudFF0Ojppc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoKQpAQCAtMzQ0LDcgKzM0Myw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmlzU2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpCiAKIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnRvZ2dsZUNv
bnRpbnVvdXNTcGVsbENoZWNraW5nKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBtX3RleHRDaGVja2VyQ2xpZW50LnRvZ2dsZUNvbnRpbm91c1NwZWxsQ2hlY2tpbmcoKTsK
IH0KIAogdm9pZCBFZGl0b3JDbGllbnRRdDo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkKQEAgLTU2
NywzMiArNTY2LDYgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6dGV4dERpZENoYW5nZUluVGV4dEFy
ZWEoRWxlbWVudCopCiB7CiB9CiAKLXZvaWQgRWRpdG9yQ2xpZW50UXQ6Omlnbm9yZVdvcmRJblNw
ZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEVkaXRvckNsaWVudFF0OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFF0OjpjaGVja1NwZWxsaW5n
T2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQsIGludCosIGludCopCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotU3RyaW5nIEVkaXRvckNsaWVudFF0OjpnZXRBdXRvQ29ycmVjdFN1Z2dl
c3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFF0Ojpj
aGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgVmVjdG9yPEdyYW1tYXJEZXRh
aWw+JiwgaW50KiwgaW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEVk
aXRvckNsaWVudFF0Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAg
LTYxNCwxMSArNTg3LDYgQEAgYm9vbCBFZGl0b3JDbGllbnRRdDo6c3BlbGxpbmdVSUlzU2hvd2lu
ZygpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEVkaXRvckNsaWVudFF0OjpnZXRHdWVz
c2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVj
dG9yPFN0cmluZz4mIGd1ZXNzZXMpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9v
bCBFZGl0b3JDbGllbnRRdDo6aXNFZGl0aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9lZGl0
aW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JD
bGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRR
dC5oCmluZGV4IGVjY2I3NWQuLmQ5NjU4YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmgKQEAgLTMxLDE2ICszMSwxNSBAQAogI2RlZmlu
ZSBFZGl0b3JDbGllbnRRdF9oCiAKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRl
ICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKLQorI2luY2x1
ZGUgIlRleHRDaGVja2VyQ2xpZW50UXQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBj
bGFzcyBRV2ViUGFnZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBFZGl0b3JDbGll
bnRRdCA6IHB1YmxpYyBFZGl0b3JDbGllbnQsIHB1YmxpYyBUZXh0Q2hlY2tlckNsaWVudCB7Citj
bGFzcyBFZGl0b3JDbGllbnRRdCA6IHB1YmxpYyBFZGl0b3JDbGllbnQgewogcHVibGljOgogICAg
IEVkaXRvckNsaWVudFF0KFFXZWJQYWdlKiBwYWdlKTsKICAgICAKQEAgLTk3LDIwICs5NiwxMyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQo
RWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVt
ZW50Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25z
dCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpOwot
ICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQg
bGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgp
OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxs
ZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOwotICAgIHZpcnR1YWwgdm9pZCBj
aGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFZlY3RvcjxHcmFt
bWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5n
dGgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
Y29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpOwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpOwogICAgIHZp
cnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpOwogICAgIHZpcnR1YWwgYm9vbCBz
cGVsbGluZ1VJSXNTaG93aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5n
PiYgZ3Vlc3Nlcyk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoU3BlbGxDaGVja2VyKiwgaW50
LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzaywgY29uc3QgU3RyaW5nJikge30KLSAgICB2
aXJ0dWFsIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIHsgcmV0dXJuIHRoaXM7IH0K
KyAgICB2aXJ0dWFsIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIHsgcmV0dXJuICZt
X3RleHRDaGVja2VyQ2xpZW50OyB9CiAKICAgICBib29sIGlzRWRpdGluZygpIGNvbnN0OwogCkBA
IC0xMTgsNiArMTEwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2VwdHNFZGl0aW5n
OwogCiBwcml2YXRlOgorICAgIFRleHRDaGVja2VyQ2xpZW50UXQgbV90ZXh0Q2hlY2tlckNsaWVu
dDsKICAgICBRV2ViUGFnZSogbV9wYWdlOwogICAgIGJvb2wgbV9lZGl0aW5nOwogICAgIGJvb2wg
bV9pblVuZG9SZWRvOyAvLyBvdXIgdW5kbyBzdGFjayB3b3JrcyBkaWZmZXJlbnRseSAtIGRvbid0
IHJlLWVudGVyIQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9R
dFBsYXRmb3JtUGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQ
bGF0Zm9ybVBsdWdpbi5jcHAKaW5kZXggMmU0NGM2Ni4uYWI2NWIzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCkBAIC0x
MzQsNCArMTM0LDEwIEBAIFBhc3NPd25QdHI8UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI+IFF0
UGxhdGZvcm1QbHVnaW46OmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhCiB9CiAjZW5kaWYKIAorUVdl
YlNwZWxsQ2hlY2tlciogUXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlU3BlbGxDaGVja2VyKCkKK3sK
KyAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHAgPSBwbHVnaW4oKTsKKyAgICByZXR1cm4gcCA/
IHN0YXRpY19jYXN0PFFXZWJTcGVsbENoZWNrZXIqPihwLT5jcmVhdGVFeHRlbnNpb24oUVdlYktp
dFBsYXRmb3JtUGx1Z2luOjpTcGVsbENoZWNrZXIpKSA6IDA7Cit9CisKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgKaW5kZXggMzE2
YjhlOC4uODQ3OTM2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RdFBsYXRmb3JtUGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RdFBsYXRmb3JtUGx1Z2luLmgKQEAgLTMzLDYgKzMzLDcgQEAgY2xhc3MgUVdlYlRvdWNoTW9k
aWZpZXI7CiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoUVRfTVVMVElNRURJQSkKIGNsYXNzIFFX
ZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOwogI2VuZGlmCitjbGFzcyBRV2ViU3BlbGxDaGVja2Vy
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDYgKzU0LDcgQEAgcHVibGljOgogI2lm
IEVOQUJMRShWSURFTykgJiYgVVNFKFFUX01VTFRJTUVESUEpCiAgICAgUGFzc093blB0cjxRV2Vi
RnVsbFNjcmVlblZpZGVvSGFuZGxlcj4gY3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOwog
I2VuZGlmCisgICAgUVdlYlNwZWxsQ2hlY2tlciogY3JlYXRlU3BlbGxDaGVja2VyKCk7CiAKICAg
ICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHBsdWdpbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuY3BwIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDY4NTE3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmNwcApA
QCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBMaW5kc2F5IE1hdGhp
ZXNvbiA8bGluZHNheS5tYXRoaWVzb25AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEx
IERhd2l0IEFsZW1heWVodSAgPGFkYXdpdEBrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRDaGVja2Vy
Q2xpZW50UXQuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8UVN0
cmluZ0xpc3Q+CisjaW5jbHVkZSAiUXRQbGF0Zm9ybVBsdWdpbi5oIgorI2luY2x1ZGUgInF3ZWJr
aXRwbGF0Zm9ybXBsdWdpbi5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAKK1RleHRDaGVja2VyQ2xpZW50UXQ6On5UZXh0Q2hlY2tl
ckNsaWVudFF0KCkKK3sKKyAgICBtX3NwZWxsQ2hlY2tlciA9IG51bGxwdHI7Cit9CisKK3ZvaWQg
VGV4dENoZWNrZXJDbGllbnRRdDo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJp
bmcmIHdvcmQpCit7CisgICAgaWYgKCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc3BlbGxDaGVja2VyLT5pZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KHdvcmQp
OworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50UXQ6OmxlYXJuV29yZChjb25zdCBTdHJpbmcm
IHdvcmQpCit7CisgICAgaWYgKCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fc3BlbGxDaGVja2VyLT5sZWFybldvcmQod29yZCk7Cit9CisKK3ZvaWQgVGV4dENo
ZWNrZXJDbGllbnRRdDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiBidWZmZXIs
IGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xl
bmd0aCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY29uc3QgUVN0cmluZyB0ZXh0ID0gUVN0cmluZzo6ZnJvbVJhd0RhdGEocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBRQ2hhcio+KGJ1ZmZlciksIGxlbmd0aCk7CisgICAgbV9zcGVsbENoZWNr
ZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0ZXh0LCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNz
cGVsbGluZ0xlbmd0aCk7Cit9CisKK1N0cmluZyBUZXh0Q2hlY2tlckNsaWVudFF0OjpnZXRBdXRv
Q29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxs
ZWRXb3JkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOwor
fQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50UXQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0
IFVDaGFyKiwgaW50IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiwgaW50KikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50UXQ6
OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250
ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNr
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVN0cmluZ0xpc3QgZ3Vlc3Nlc0xpc3Q7Cisg
ICAgbV9zcGVsbENoZWNrZXItPmd1ZXNzZXNGb3JXb3JkKHdvcmQsIGNvbnRleHQsIGd1ZXNzZXNM
aXN0KTsKKyAgICBmb3IgKGludCBpID0gMCwgY291bnQgPSBndWVzc2VzTGlzdC5jb3VudCgpOyBp
IDwgY291bnQ7ICsraSkKKyAgICAgICAgZ3Vlc3Nlcy5hcHBlbmQoZ3Vlc3Nlc0xpc3QuYXQoaSkp
OworfQorCitib29sIFRleHRDaGVja2VyQ2xpZW50UXQ6OmlzQ29udGlub3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoKQoreworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9zcGVsbENoZWNrZXItPmlzQ29udGlub3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudFF0Ojp0b2dnbGVD
b250aW5vdXNTcGVsbENoZWNraW5nKCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9zcGVsbENoZWNrZXItPnRvZ2dsZUNvbnRpbm91c1Nw
ZWxsQ2hlY2tpbmcoKTsKK30KKworYm9vbCBUZXh0Q2hlY2tlckNsaWVudFF0Ojpsb2FkU3BlbGxD
aGVja2VyKCkKK3sKKyAgICBpZiAobV9zcGVsbENoZWNrZXIpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgUXRQbGF0Zm9ybVBsdWdpbiBwbGF0Zm9ybVBsdWdpbjsKKyAgICBtX3NwZWxsQ2hl
Y2tlciA9IGFkb3B0UHRyKHBsYXRmb3JtUGx1Z2luLmNyZWF0ZVNwZWxsQ2hlY2tlcigpKTsKKwor
ICAgIHJldHVybiAobV9zcGVsbENoZWNrZXIgPyB0cnVlIDogZmFsc2UpOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50
UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRR
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5Y2IwNmQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xp
ZW50UXQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIExpbmRz
YXkgTWF0aGllc29uIDxsaW5kc2F5Lm1hdGhpZXNvbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgRGF3aXQgQWxlbWF5ZWh1ICA8YWRhd2l0QGtkZS5vcmc+CisgKgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLyAKKworI2lmbmRlZiBUZXh0Q2hlY2tlckNsaWVudFF0X2gKKyNk
ZWZpbmUgVGV4dENoZWNrZXJDbGllbnRRdF9oCisKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVu
dC5oIgorI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorCisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKworY2xhc3MgUVdlYlNwZWxsQ2hlY2tlcjsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBUZXh0Q2hlY2tlckNsaWVudFF0IDogcHVibGljIFRleHRDaGVja2VyQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5UZXh0Q2hlY2tlckNsaWVudFF0KCk7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5n
Jik7CisgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwg
aW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICB2
aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFt
bWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFp
bD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25z
dCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoU3BlbGxDaGVja2VyKiwgaW50LCBUZXh0Q2hl
Y2tpbmdUeXBlTWFzaywgY29uc3QgU3RyaW5nJikge30KKworICAgIHZpcnR1YWwgYm9vbCBpc0Nv
bnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgdmlydHVhbCB2b2lkIHRvZ2dsZUNv
bnRpbm91c1NwZWxsQ2hlY2tpbmcoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgYm9vbCBsb2FkU3Bl
bGxDaGVja2VyKCk7ICAgIAorCitwcml2YXRlOgorICAgIE93blB0cjxRV2ViU3BlbGxDaGVja2Vy
PiBtX3NwZWxsQ2hlY2tlcjsKK307CisKKworfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103087</attachid>
            <date>2011-08-05 11:18:42 -0700</date>
            <delta_ts>2011-08-08 05:46:12 -0700</delta_ts>
            <desc>proposed patch V</desc>
            <filename>bug_44114.patch</filename>
            <type>text/plain</type>
            <size>20560</size>
            <attacher name="Dawit A.">adawit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmZjc4ZDk0Li5iNWRjYTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTEtMDgtMDUgIExpbmRzYXkgTWF0aGllc29uICAgPGxpbmRzYXkubWF0aGllc29uQGdt
YWlsLmNvbT4gYW5kIERhd2l0IEFsZW1heWVodSAgIDxhZGF3aXRAa2RlLm9yZz4KKworICAgICAg
ICBbUXRdIE1pc3Npbmcgc3BlbGwgY2hlY2sgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxMTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgc3BlbGwgY2hlY2sgc3VwcG9ydCBp
biBRdFdlYktpdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdFcnJvclVuZGVybGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKToK
KwogMjAxMS0wOC0wMyAgU2FpbGVzaCBBZ3Jhd2FsICA8c2FpbEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQ2hyb21pdW0gTWFjOiBNYWtlIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1
bU1hYy5oIGMrKyBjb21wYXRpYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXggMTBkZTk2Ny4uZDBm
YTRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcApAQCAtOTAwLDEyICs5MDAsMTA2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBm
bG9hdCB3aWR0aCwgYm9vCiAgICAgZHJhd0xpbmUoSW50UG9pbnQoc3RhcnRQb2ludC54KCksIHN0
YXJ0UG9pbnQueSgpKSwgSW50UG9pbnQoZW5kUG9pbnQueCgpLCBlbmRQb2ludC55KCkpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZs
b2F0UG9pbnQmLCBmbG9hdCwgVGV4dENoZWNraW5nTGluZVN0eWxlKQorCisvKgorICogICBOT1RF
OiBUaGlzIGNvZGUgaXMgY29tcGxldGVseSBiYXNlZCB1cG9uIHRoZSBvbmUgZnJvbQorICogICBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9EcmF3RXJyb3JVbmRlcmxpbmUu
e2h8Y3BwfQorICoKKyAqICAgRHJhd3MgYW4gZXJyb3IgdW5kZXJsaW5lIHRoYXQgbG9va3MgbGlr
ZSBvbmUgb2Y6CisgKgorICogICAgICAgICAgICAgICBIICAgICAgIEUgICAgICAgICAgICAgICAg
SAorICogICAgICAvXCAgICAgIC9cICAgICAgL1wgICAgICAgIC9cICAgICAgL1wgICAgICAgICAg
ICAgICAtCisgKiAgICBBLyAgXCAgICAvICBcICAgIC8gIFwgICAgIEEvICBcICAgIC8gIFwgICAg
ICAgICAgICAgIHwKKyAqICAgICBcICAgXCAgLyAgICBcICAvICAgL0QgICAgIFwgICBcICAvICAg
IFwgICAgICAgICAgICAgfAorICogICAgICBcICAgXC8gIEMgICBcLyAgIC8gICAgICAgIFwgICBc
LyAgIEMgIFwgICAgICAgICAgICB8IGhlaWdodCA9IGhlaWdodFNxdWFyZXMgKiBzcXVhcmUKKyAq
ICAgICAgIFwgICAgICAvXCAgRiAgIC8gICAgICAgICAgXCAgRiAgIC9cICAgXCAgICAgICAgICAg
fAorICogICAgICAgIFwgICAgLyAgXCAgICAvICAgICAgICAgICAgXCAgICAvICBcICAgXEcgICAg
ICAgICB8CisgKiAgICAgICAgIFwgIC8gICAgXCAgLyAgICAgICAgICAgICAgXCAgLyAgICBcICAv
ICAgICAgICAgIHwKKyAqICAgICAgICAgIFwvICAgICAgXC8gICAgICAgICAgICAgICAgXC8gICAg
ICBcLyAgICAgICAgICAgLQorICogICAgICAgICAgQiAgICAgICAgICAgICAgICAgICAgICAgICBC
CisgKiAgICAgICAgICB8LS0tfAorICogICAgICAgIHVuaXRXaWR0aCA9IChoZWlnaHRTcXVhcmVz
IC0gMSkgKiBzcXVhcmUKKyAqCisgKiAgVGhlIHgsIHksIHdpZHRoLCBoZWlnaHQgcGFzc2VkIGlu
IGdpdmUgdGhlIGRlc2lyZWQgYm91bmRpbmcgYm94OworICogIHgvd2lkdGggYXJlIGFkanVzdGVk
IHRvIG1ha2UgdGhlIHVuZGVybGluZSBhIGludGVnZXIgbnVtYmVyIG9mIHVuaXRzIHdpZGUuCisq
Lworc3RhdGljIHZvaWQgZHJhd0Vycm9yVW5kZXJsaW5lKFFQYWludGVyICpwYWludGVyLCBxcmVh
bCB4LCBxcmVhbCB5LCBxcmVhbCB3aWR0aCwgcXJlYWwgaGVpZ2h0KQoreworICAgIGNvbnN0IHFy
ZWFsIGhlaWdodFNxdWFyZXMgPSAyLjU7CisKKyAgICBxcmVhbCBzcXVhcmUgPSBoZWlnaHQgLyBo
ZWlnaHRTcXVhcmVzOworICAgIHFyZWFsIGhhbGZTcXVhcmUgPSAwLjUgKiBzcXVhcmU7CisKKyAg
ICBxcmVhbCB1bml0V2lkdGggPSAoaGVpZ2h0U3F1YXJlcyAtIDEuMCkgKiBzcXVhcmU7CisgICAg
aW50IHdpZHRoVW5pdHMgPSBzdGF0aWNfY2FzdDxpbnQ+KCh3aWR0aCArIDAuNSAqIHVuaXRXaWR0
aCkgLyB1bml0V2lkdGgpOworCisgICAgeCArPSAwLjUgKiAod2lkdGggLSB3aWR0aFVuaXRzICog
dW5pdFdpZHRoKTsKKyAgICB3aWR0aCA9IHdpZHRoVW5pdHMgKiB1bml0V2lkdGg7CisKKyAgICBx
cmVhbCBib3R0b20gPSB5ICsgaGVpZ2h0OworICAgIHFyZWFsIHRvcCA9IHk7CisKKyAgICBRUGFp
bnRlclBhdGggcGF0aDsKKyAgICAvLyBCb3R0b20gb2Ygc3F1aWdnbGUKKyAgICBwYXRoLm1vdmVU
byh4IC0gaGFsZlNxdWFyZSwgdG9wICsgaGFsZlNxdWFyZSk7IC8vIEEKKworICAgIGludCBpID0g
MDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGhVbml0czsgaSArPSAyKSB7CisgICAgICAgIHFy
ZWFsIG1pZGRsZSA9IHggKyAoaSArIDEpICogdW5pdFdpZHRoOworICAgICAgICBxcmVhbCByaWdo
dCA9IHggKyAoaSArIDIpICogdW5pdFdpZHRoOworCisgICAgICAgIHBhdGgubGluZVRvKG1pZGRs
ZSwgYm90dG9tKTsgLy8gQgorCisgICAgICAgIGlmIChpICsgMiA9PSB3aWR0aFVuaXRzKQorICAg
ICAgICAgICAgcGF0aC5saW5lVG8ocmlnaHQgKyBoYWxmU3F1YXJlLCB0b3AgKyBoYWxmU3F1YXJl
KTsgLy8gRAorICAgICAgICBlbHNlIGlmIChpICsgMSAhPSB3aWR0aFVuaXRzKQorICAgICAgICAg
ICAgcGF0aC5saW5lVG8ocmlnaHQsIHRvcCArIHNxdWFyZSk7IC8vIEMKKyAgICB9CisKKyAgICAv
LyBUb3Agb2Ygc3F1aWdnbGUKKyAgICBmb3IgKGkgLT0gMjsgaSA+PSAwOyBpIC09IDIpIHsKKyAg
ICAgICAgcXJlYWwgbGVmdCA9IHggKyBpICogdW5pdFdpZHRoOworICAgICAgICBxcmVhbCBtaWRk
bGUgPSB4ICsgKGkgKyAxKSAqIHVuaXRXaWR0aDsKKyAgICAgICAgcXJlYWwgcmlnaHQgPSB4ICsg
KGkgKyAyKSAqIHVuaXRXaWR0aDsKKworICAgICAgICBpZiAoaSArIDEgPT0gd2lkdGhVbml0cykK
KyAgICAgICAgICAgIHBhdGgubGluZVRvKG1pZGRsZSArIGhhbGZTcXVhcmUsIGJvdHRvbSAtIGhh
bGZTcXVhcmUpOyAvLyBHCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGkgKyAyID09
IHdpZHRoVW5pdHMpCisgICAgICAgICAgICAgICAgcGF0aC5saW5lVG8ocmlnaHQsIHRvcCk7IC8v
IEUKKworICAgICAgICAgICAgcGF0aC5saW5lVG8obWlkZGxlLCBib3R0b20gLSBoYWxmU3F1YXJl
KTsgLy8gRgorICAgICAgICB9CisKKyAgICAgICAgcGF0aC5saW5lVG8obGVmdCwgdG9wKTsgLy8g
SAorICAgIH0KKworICAgIHBhaW50ZXItPmRyYXdQYXRoKHBhdGgpOworfQorCisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBv
cmlnaW4sIGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICBRUGFpbnRlciogcGFpbnRlciA9IHBsYXRmb3JtQ29udGV4dCgpOworICAg
IGNvbnN0IFFQZW4gb3JpZ2luYWxQZW4gPSBwYWludGVyLT5wZW4oKTsKKworICAgIHN3aXRjaCAo
c3R5bGUpIHsKKyAgICBjYXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgorICAgICAg
ICBwYWludGVyLT5zZXRQZW4oUXQ6OnJlZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4
dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKFF0Ojpn
cmVlbik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHBhaW50ZXItPnNl
dFBlbihvcmlnaW5hbFBlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkcmF3RXJy
b3JVbmRlcmxpbmUocGFpbnRlciwgb3JpZ2luLngoKSwgb3JpZ2luLnkoKSwgd2lkdGgsIGNNaXNz
cGVsbGluZ0xpbmVUaGlja25lc3MpOworICAgIHBhaW50ZXItPnNldFBlbihvcmlnaW5hbFBlbik7
CiB9CiAKIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiBmcmVjdCwgUm91bmRpbmdNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAppbmRleCAxZjYyODA0Li4yODYxYzBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaApAQCAtMjEsNiArMjEs
OCBAQAogI2lmbmRlZiBRV0VCS0lUUExBVEZPUk1QTFVHSU5fSAogI2RlZmluZSBRV0VCS0lUUExB
VEZPUk1QTFVHSU5fSAogCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorCiAvKgogICogIFdh
cm5pbmc6IFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgaXMgbm90ICBwYXJ0IG9mIHRoZSBwdWJs
aWMgUXRXZWJLaXQgQVBJCiAgKiAgYW5kIG1heSBiZSBjaGFuZ2VkIGZyb20gdmVyc2lvbiB0byB2
ZXJzaW9uIG9yIGV2ZW4gYmUgY29tcGxldGVseSByZW1vdmVkLgpAQCAtMTM0LDYgKzEzNiwyMSBA
QCBwdWJsaWMgUV9TTE9UUzoKIH07CiAjZW5kaWYKIAorY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdl
YlNwZWxsQ2hlY2tlciA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIHZpcnR1YWwgflFXZWJTcGVsbENoZWNrZXIoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBp
c0NvbnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB0b2dnbGVDb250aW5vdXNTcGVsbENoZWNraW5nKCkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGxlYXJuV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgUVN0cmluZyYgd29yZCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgUVN0cmluZyYgd29yZCwg
aW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKSA9IDA7Cisg
ICAgdmlydHVhbCBRU3RyaW5nIGF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3Jk
KGNvbnN0IFFTdHJpbmcmIHdvcmQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ3Vlc3Nlc0Zvcldv
cmQoY29uc3QgUVN0cmluZyYgd29yZCwgY29uc3QgUVN0cmluZyYgY29udGV4dCwgUVN0cmluZ0xp
c3QmIGd1ZXNzZXMpID0gMDsKK307CisKIGNsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+UVdlYktpdFBsYXRmb3JtUGx1Z2luKCkge30KQEAgLTE0Myw3
ICsxNjAsOCBAQCBwdWJsaWM6CiAgICAgICAgIE5vdGlmaWNhdGlvbnMsCiAgICAgICAgIEhhcHRp
Y3MsCiAgICAgICAgIFRvdWNoSW50ZXJhY3Rpb24sCi0gICAgICAgIEZ1bGxTY3JlZW5WaWRlb1Bs
YXllcgorICAgICAgICBGdWxsU2NyZWVuVmlkZW9QbGF5ZXIsCisgICAgICAgIFNwZWxsQ2hlY2tl
cgogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9u
KSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGRiYWI4NTcuLjNhOGI2N2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDgtMDUgIExpbmRzYXkgTWF0aGllc29uICAg
PGxpbmRzYXkubWF0aGllc29uQGdtYWlsLmNvbT4gYW5kIERhd2l0IEFsZW1heWVodSAgIDxhZGF3
aXRAa2RlLm9yZz4KKworICAgICAgICBbUXRdIE1pc3Npbmcgc3BlbGwgY2hlY2sgc3VwcG9ydAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxMTQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
c3BlbGwgY2hlY2sgc3VwcG9ydCBpbiBRdFdlYktpdC4KKworICAgICAgICAqIEFwaS9xd2Via2l0
cGxhdGZvcm1wbHVnaW4uaDoKKyAgICAgICAgKiBRdFdlYktpdC5wcm86CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Q2xpZW50UXQ6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvckNsaWVudFF0Ojp0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZyk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvckNsaWVudFF0Ojp0ZXh0Q2hlY2tlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpRdFBsYXRmb3JtUGx1
Z2luOjpjcmVhdGVTcGVsbENoZWNrZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1F0UGxh
dGZvcm1QbHVnaW4uaDoKKwogMjAxMS0wOC0wMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdv
b2dsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW1RpbWVsaW5lXSBIb3ZlciBvbiBw
YWludCBldmVudHMgYW5kIHNlZSByZWN0IG91dGxpbmUgYXJvdW5kIHRoYXQgYXJlYS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvUXRXZWJLaXQucHJvIGIvU291cmNlL1dlYktpdC9xdC9R
dFdlYktpdC5wcm8KaW5kZXggM2M1ODA4OS4uMzEzNjcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9xdC9RdFdlYktpdC5wcm8KKysrIGIvU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8K
QEAgLTE5NCw2ICsxOTQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9y
dC9Qb3B1cE1lbnVRdC5jcHAgXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1Q
bHVnaW4uY3BwIFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVRdC5j
cHAgXAorICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuY3BwIFwK
ICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCiAKIEhF
QURFUlMgKz0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRv
ckNsaWVudFF0LmNwcAppbmRleCA3MzIxMGYwLi41YjBhYzlhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcApAQCAtNTYsNyArNTYs
NiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCi0jZGVm
aW5lIG1ldGhvZERlYnVnKCkgcURlYnVnKCJFZGl0b3JDbGllbnRRdDogJXMiLCBfX0ZVTkNUSU9O
X18pOwogCiBzdGF0aWMgUVN0cmluZyBkdW1wUGF0aChXZWJDb3JlOjpOb2RlICpub2RlKQogewpA
QCAtMTA5LDcgKzEwOCw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OnNob3VsZFNob3dEZWxldGVJ
bnRlcmZhY2UoSFRNTEVsZW1lbnQqIGVsZW1lbnQpCiAKIGJvb2wgRWRpdG9yQ2xpZW50UXQ6Omlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKIHsKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIG1fdGV4dENoZWNrZXJDbGllbnQuaXNDb250aW5vdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpOwogfQogCiBib29sIEVkaXRvckNsaWVudFF0Ojppc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoKQpAQCAtMzQ0LDcgKzM0Myw3IEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmlzU2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpCiAKIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnRvZ2dsZUNv
bnRpbnVvdXNTcGVsbENoZWNraW5nKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBtX3RleHRDaGVja2VyQ2xpZW50LnRvZ2dsZUNvbnRpbm91c1NwZWxsQ2hlY2tpbmcoKTsK
IH0KIAogdm9pZCBFZGl0b3JDbGllbnRRdDo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkKQEAgLTU2
NywzMiArNTY2LDYgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6dGV4dERpZENoYW5nZUluVGV4dEFy
ZWEoRWxlbWVudCopCiB7CiB9CiAKLXZvaWQgRWRpdG9yQ2xpZW50UXQ6Omlnbm9yZVdvcmRJblNw
ZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEVkaXRvckNsaWVudFF0OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFF0OjpjaGVja1NwZWxsaW5n
T2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQsIGludCosIGludCopCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotU3RyaW5nIEVkaXRvckNsaWVudFF0OjpnZXRBdXRvQ29ycmVjdFN1Z2dl
c3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFF0Ojpj
aGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgVmVjdG9yPEdyYW1tYXJEZXRh
aWw+JiwgaW50KiwgaW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEVk
aXRvckNsaWVudFF0Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAg
LTYxNCwxMSArNTg3LDYgQEAgYm9vbCBFZGl0b3JDbGllbnRRdDo6c3BlbGxpbmdVSUlzU2hvd2lu
ZygpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEVkaXRvckNsaWVudFF0OjpnZXRHdWVz
c2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVj
dG9yPFN0cmluZz4mIGd1ZXNzZXMpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9v
bCBFZGl0b3JDbGllbnRRdDo6aXNFZGl0aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9lZGl0
aW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JD
bGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRR
dC5oCmluZGV4IGVjY2I3NWQuLmQ5NjU4YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmgKQEAgLTMxLDE2ICszMSwxNSBAQAogI2RlZmlu
ZSBFZGl0b3JDbGllbnRRdF9oCiAKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRl
ICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKLQorI2luY2x1
ZGUgIlRleHRDaGVja2VyQ2xpZW50UXQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBj
bGFzcyBRV2ViUGFnZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBFZGl0b3JDbGll
bnRRdCA6IHB1YmxpYyBFZGl0b3JDbGllbnQsIHB1YmxpYyBUZXh0Q2hlY2tlckNsaWVudCB7Citj
bGFzcyBFZGl0b3JDbGllbnRRdCA6IHB1YmxpYyBFZGl0b3JDbGllbnQgewogcHVibGljOgogICAg
IEVkaXRvckNsaWVudFF0KFFXZWJQYWdlKiBwYWdlKTsKICAgICAKQEAgLTk3LDIwICs5NiwxMyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQo
RWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVt
ZW50Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25z
dCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpOwot
ICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQg
bGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgp
OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxs
ZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOwotICAgIHZpcnR1YWwgdm9pZCBj
aGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFZlY3RvcjxHcmFt
bWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5n
dGgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
Y29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpOwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpOwogICAgIHZp
cnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpOwogICAgIHZpcnR1YWwgYm9vbCBz
cGVsbGluZ1VJSXNTaG93aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5n
PiYgZ3Vlc3Nlcyk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoU3BlbGxDaGVja2VyKiwgaW50
LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzaywgY29uc3QgU3RyaW5nJikge30KLSAgICB2
aXJ0dWFsIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIHsgcmV0dXJuIHRoaXM7IH0K
KyAgICB2aXJ0dWFsIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIHsgcmV0dXJuICZt
X3RleHRDaGVja2VyQ2xpZW50OyB9CiAKICAgICBib29sIGlzRWRpdGluZygpIGNvbnN0OwogCkBA
IC0xMTgsNiArMTEwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2VwdHNFZGl0aW5n
OwogCiBwcml2YXRlOgorICAgIFRleHRDaGVja2VyQ2xpZW50UXQgbV90ZXh0Q2hlY2tlckNsaWVu
dDsKICAgICBRV2ViUGFnZSogbV9wYWdlOwogICAgIGJvb2wgbV9lZGl0aW5nOwogICAgIGJvb2wg
bV9pblVuZG9SZWRvOyAvLyBvdXIgdW5kbyBzdGFjayB3b3JrcyBkaWZmZXJlbnRseSAtIGRvbid0
IHJlLWVudGVyIQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9R
dFBsYXRmb3JtUGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQ
bGF0Zm9ybVBsdWdpbi5jcHAKaW5kZXggMmU0NGM2Ni4uYWI2NWIzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCkBAIC0x
MzQsNCArMTM0LDEwIEBAIFBhc3NPd25QdHI8UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI+IFF0
UGxhdGZvcm1QbHVnaW46OmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhCiB9CiAjZW5kaWYKIAorUVdl
YlNwZWxsQ2hlY2tlciogUXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlU3BlbGxDaGVja2VyKCkKK3sK
KyAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHAgPSBwbHVnaW4oKTsKKyAgICByZXR1cm4gcCA/
IHN0YXRpY19jYXN0PFFXZWJTcGVsbENoZWNrZXIqPihwLT5jcmVhdGVFeHRlbnNpb24oUVdlYktp
dFBsYXRmb3JtUGx1Z2luOjpTcGVsbENoZWNrZXIpKSA6IDA7Cit9CisKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgKaW5kZXggMzE2
YjhlOC4uODQ3OTM2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RdFBsYXRmb3JtUGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RdFBsYXRmb3JtUGx1Z2luLmgKQEAgLTMzLDYgKzMzLDcgQEAgY2xhc3MgUVdlYlRvdWNoTW9k
aWZpZXI7CiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoUVRfTVVMVElNRURJQSkKIGNsYXNzIFFX
ZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOwogI2VuZGlmCitjbGFzcyBRV2ViU3BlbGxDaGVja2Vy
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDYgKzU0LDcgQEAgcHVibGljOgogI2lm
IEVOQUJMRShWSURFTykgJiYgVVNFKFFUX01VTFRJTUVESUEpCiAgICAgUGFzc093blB0cjxRV2Vi
RnVsbFNjcmVlblZpZGVvSGFuZGxlcj4gY3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOwog
I2VuZGlmCisgICAgUVdlYlNwZWxsQ2hlY2tlciogY3JlYXRlU3BlbGxDaGVja2VyKCk7CiAKICAg
ICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHBsdWdpbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuY3BwIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODk4ZmFlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmNwcApA
QCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBMaW5kc2F5IE1hdGhp
ZXNvbiA8bGluZHNheS5tYXRoaWVzb25AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEx
IERhd2l0IEFsZW1heWVodSAgPGFkYXdpdEBrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRDaGVja2Vy
Q2xpZW50UXQuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUXRQ
bGF0Zm9ybVBsdWdpbi5oIgorI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorCisj
aW5jbHVkZSA8UVN0cmluZ0xpc3Q+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAKK1RleHRDaGVja2VyQ2xpZW50UXQ6On5UZXh0Q2hlY2tl
ckNsaWVudFF0KCkKK3sKKyAgICBtX3NwZWxsQ2hlY2tlciA9IG51bGxwdHI7Cit9CisKK3ZvaWQg
VGV4dENoZWNrZXJDbGllbnRRdDo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJp
bmcmIHdvcmQpCit7CisgICAgaWYgKCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc3BlbGxDaGVja2VyLT5pZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KHdvcmQp
OworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50UXQ6OmxlYXJuV29yZChjb25zdCBTdHJpbmcm
IHdvcmQpCit7CisgICAgaWYgKCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fc3BlbGxDaGVja2VyLT5sZWFybldvcmQod29yZCk7Cit9CisKK3ZvaWQgVGV4dENo
ZWNrZXJDbGllbnRRdDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiBidWZmZXIs
IGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xl
bmd0aCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY29uc3QgUVN0cmluZyB0ZXh0ID0gUVN0cmluZzo6ZnJvbVJhd0RhdGEocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBRQ2hhcio+KGJ1ZmZlciksIGxlbmd0aCk7CisgICAgbV9zcGVsbENoZWNr
ZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0ZXh0LCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNz
cGVsbGluZ0xlbmd0aCk7Cit9CisKK1N0cmluZyBUZXh0Q2hlY2tlckNsaWVudFF0OjpnZXRBdXRv
Q29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxs
ZWRXb3JkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOwor
fQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50UXQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0
IFVDaGFyKiwgaW50IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiwgaW50KikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50UXQ6
OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250
ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNr
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVN0cmluZ0xpc3QgZ3Vlc3Nlc0xpc3Q7Cisg
ICAgbV9zcGVsbENoZWNrZXItPmd1ZXNzZXNGb3JXb3JkKHdvcmQsIGNvbnRleHQsIGd1ZXNzZXNM
aXN0KTsKKyAgICBmb3IgKGludCBpID0gMCwgY291bnQgPSBndWVzc2VzTGlzdC5jb3VudCgpOyBp
IDwgY291bnQ7ICsraSkKKyAgICAgICAgZ3Vlc3Nlcy5hcHBlbmQoZ3Vlc3Nlc0xpc3QuYXQoaSkp
OworfQorCitib29sIFRleHRDaGVja2VyQ2xpZW50UXQ6OmlzQ29udGlub3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoKQoreworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9zcGVsbENoZWNrZXItPmlzQ29udGlub3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudFF0Ojp0b2dnbGVD
b250aW5vdXNTcGVsbENoZWNraW5nKCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9zcGVsbENoZWNrZXItPnRvZ2dsZUNvbnRpbm91c1Nw
ZWxsQ2hlY2tpbmcoKTsKK30KKworYm9vbCBUZXh0Q2hlY2tlckNsaWVudFF0Ojpsb2FkU3BlbGxD
aGVja2VyKCkKK3sKKyAgICBpZiAobV9zcGVsbENoZWNrZXIpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgUXRQbGF0Zm9ybVBsdWdpbiBwbGF0Zm9ybVBsdWdpbjsKKyAgICBtX3NwZWxsQ2hl
Y2tlciA9IGFkb3B0UHRyKHBsYXRmb3JtUGx1Z2luLmNyZWF0ZVNwZWxsQ2hlY2tlcigpKTsKKwor
ICAgIHJldHVybiAobV9zcGVsbENoZWNrZXIgPyB0cnVlIDogZmFsc2UpOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50
UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRR
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NDUyYmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xp
ZW50UXQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIExpbmRz
YXkgTWF0aGllc29uIDxsaW5kc2F5Lm1hdGhpZXNvbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgRGF3aXQgQWxlbWF5ZWh1ICA8YWRhd2l0QGtkZS5vcmc+CisgKgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLyAKKworI2lmbmRlZiBUZXh0Q2hlY2tlckNsaWVudFF0X2gKKyNk
ZWZpbmUgVGV4dENoZWNrZXJDbGllbnRRdF9oCisKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVu
dC5oIgorI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorCisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKworY2xhc3MgUVdlYlNwZWxsQ2hlY2tlcjsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBUZXh0Q2hlY2tlckNsaWVudFF0IDogcHVibGljIFRleHRDaGVja2VyQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5UZXh0Q2hlY2tlckNsaWVudFF0KCk7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5n
Jik7CisgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwg
aW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICB2
aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFt
bWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFp
bD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25z
dCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoU3BlbGxDaGVja2VyKiwgaW50LCBUZXh0Q2hl
Y2tpbmdUeXBlTWFzaywgY29uc3QgU3RyaW5nJikgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXND
b250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVD
b250aW5vdXNTcGVsbENoZWNraW5nKCk7CisgICAgCitwcml2YXRlOgorICAgIGJvb2wgbG9hZFNw
ZWxsQ2hlY2tlcigpOyAgICAKKworcHJpdmF0ZToKKyAgICBPd25QdHI8UVdlYlNwZWxsQ2hlY2tl
cj4gbV9zcGVsbENoZWNrZXI7Cit9OworCisKK30KKworI2VuZGlmCg==
</data>
<flag name="review"
          id="98564"
          type_id="1"
          status="-"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="98571"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103765</attachid>
            <date>2011-08-12 05:56:29 -0700</date>
            <delta_ts>2011-08-12 16:36:21 -0700</delta_ts>
            <desc>proposed patch VI</desc>
            <filename>patch-vi.diff</filename>
            <type>text/plain</type>
            <size>21067</size>
            <attacher name="Lindsay Mathieson">lindsay.mathieson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dFF0LmNwcAppbmRleCAxMGRlOTY3Li5kMGZhNGNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQu
Y3BwCkBAIC05MDAsMTIgKzkwMCwxMDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBib28KICAgICBk
cmF3TGluZShJbnRQb2ludChzdGFydFBvaW50LngoKSwgc3RhcnRQb2ludC55KCkpLCBJbnRQb2lu
dChlbmRQb2ludC54KCksIGVuZFBvaW50LnkoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBUZXh0
Q2hlY2tpbmdMaW5lU3R5bGUpCisKKy8qCisgKiAgIE5PVEU6IFRoaXMgY29kZSBpcyBjb21wbGV0
ZWx5IGJhc2VkIHVwb24gdGhlIG9uZSBmcm9tCisgKiAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0RyYXdFcnJvclVuZGVybGluZS57aHxjcHB9CisgKgorICogICBEcmF3
cyBhbiBlcnJvciB1bmRlcmxpbmUgdGhhdCBsb29rcyBsaWtlIG9uZSBvZjoKKyAqCisgKiAgICAg
ICAgICAgICAgIEggICAgICAgRSAgICAgICAgICAgICAgICBICisgKiAgICAgIC9cICAgICAgL1wg
ICAgICAvXCAgICAgICAgL1wgICAgICAvXCAgICAgICAgICAgICAgIC0KKyAqICAgIEEvICBcICAg
IC8gIFwgICAgLyAgXCAgICAgQS8gIFwgICAgLyAgXCAgICAgICAgICAgICAgfAorICogICAgIFwg
ICBcICAvICAgIFwgIC8gICAvRCAgICAgXCAgIFwgIC8gICAgXCAgICAgICAgICAgICB8CisgKiAg
ICAgIFwgICBcLyAgQyAgIFwvICAgLyAgICAgICAgXCAgIFwvICAgQyAgXCAgICAgICAgICAgIHwg
aGVpZ2h0ID0gaGVpZ2h0U3F1YXJlcyAqIHNxdWFyZQorICogICAgICAgXCAgICAgIC9cICBGICAg
LyAgICAgICAgICBcICBGICAgL1wgICBcICAgICAgICAgICB8CisgKiAgICAgICAgXCAgICAvICBc
ICAgIC8gICAgICAgICAgICBcICAgIC8gIFwgICBcRyAgICAgICAgIHwKKyAqICAgICAgICAgXCAg
LyAgICBcICAvICAgICAgICAgICAgICBcICAvICAgIFwgIC8gICAgICAgICAgfAorICogICAgICAg
ICAgXC8gICAgICBcLyAgICAgICAgICAgICAgICBcLyAgICAgIFwvICAgICAgICAgICAtCisgKiAg
ICAgICAgICBCICAgICAgICAgICAgICAgICAgICAgICAgIEIKKyAqICAgICAgICAgIHwtLS18Cisg
KiAgICAgICAgdW5pdFdpZHRoID0gKGhlaWdodFNxdWFyZXMgLSAxKSAqIHNxdWFyZQorICoKKyAq
ICBUaGUgeCwgeSwgd2lkdGgsIGhlaWdodCBwYXNzZWQgaW4gZ2l2ZSB0aGUgZGVzaXJlZCBib3Vu
ZGluZyBib3g7CisgKiAgeC93aWR0aCBhcmUgYWRqdXN0ZWQgdG8gbWFrZSB0aGUgdW5kZXJsaW5l
IGEgaW50ZWdlciBudW1iZXIgb2YgdW5pdHMgd2lkZS4KKyovCitzdGF0aWMgdm9pZCBkcmF3RXJy
b3JVbmRlcmxpbmUoUVBhaW50ZXIgKnBhaW50ZXIsIHFyZWFsIHgsIHFyZWFsIHksIHFyZWFsIHdp
ZHRoLCBxcmVhbCBoZWlnaHQpCit7CisgICAgY29uc3QgcXJlYWwgaGVpZ2h0U3F1YXJlcyA9IDIu
NTsKKworICAgIHFyZWFsIHNxdWFyZSA9IGhlaWdodCAvIGhlaWdodFNxdWFyZXM7CisgICAgcXJl
YWwgaGFsZlNxdWFyZSA9IDAuNSAqIHNxdWFyZTsKKworICAgIHFyZWFsIHVuaXRXaWR0aCA9ICho
ZWlnaHRTcXVhcmVzIC0gMS4wKSAqIHNxdWFyZTsKKyAgICBpbnQgd2lkdGhVbml0cyA9IHN0YXRp
Y19jYXN0PGludD4oKHdpZHRoICsgMC41ICogdW5pdFdpZHRoKSAvIHVuaXRXaWR0aCk7CisKKyAg
ICB4ICs9IDAuNSAqICh3aWR0aCAtIHdpZHRoVW5pdHMgKiB1bml0V2lkdGgpOworICAgIHdpZHRo
ID0gd2lkdGhVbml0cyAqIHVuaXRXaWR0aDsKKworICAgIHFyZWFsIGJvdHRvbSA9IHkgKyBoZWln
aHQ7CisgICAgcXJlYWwgdG9wID0geTsKKworICAgIFFQYWludGVyUGF0aCBwYXRoOworICAgIC8v
IEJvdHRvbSBvZiBzcXVpZ2dsZQorICAgIHBhdGgubW92ZVRvKHggLSBoYWxmU3F1YXJlLCB0b3Ag
KyBoYWxmU3F1YXJlKTsgLy8gQQorCisgICAgaW50IGkgPSAwOworICAgIGZvciAoaSA9IDA7IGkg
PCB3aWR0aFVuaXRzOyBpICs9IDIpIHsKKyAgICAgICAgcXJlYWwgbWlkZGxlID0geCArIChpICsg
MSkgKiB1bml0V2lkdGg7CisgICAgICAgIHFyZWFsIHJpZ2h0ID0geCArIChpICsgMikgKiB1bml0
V2lkdGg7CisKKyAgICAgICAgcGF0aC5saW5lVG8obWlkZGxlLCBib3R0b20pOyAvLyBCCisKKyAg
ICAgICAgaWYgKGkgKyAyID09IHdpZHRoVW5pdHMpCisgICAgICAgICAgICBwYXRoLmxpbmVUbyhy
aWdodCArIGhhbGZTcXVhcmUsIHRvcCArIGhhbGZTcXVhcmUpOyAvLyBECisgICAgICAgIGVsc2Ug
aWYgKGkgKyAxICE9IHdpZHRoVW5pdHMpCisgICAgICAgICAgICBwYXRoLmxpbmVUbyhyaWdodCwg
dG9wICsgc3F1YXJlKTsgLy8gQworICAgIH0KKworICAgIC8vIFRvcCBvZiBzcXVpZ2dsZQorICAg
IGZvciAoaSAtPSAyOyBpID49IDA7IGkgLT0gMikgeworICAgICAgICBxcmVhbCBsZWZ0ID0geCAr
IGkgKiB1bml0V2lkdGg7CisgICAgICAgIHFyZWFsIG1pZGRsZSA9IHggKyAoaSArIDEpICogdW5p
dFdpZHRoOworICAgICAgICBxcmVhbCByaWdodCA9IHggKyAoaSArIDIpICogdW5pdFdpZHRoOwor
CisgICAgICAgIGlmIChpICsgMSA9PSB3aWR0aFVuaXRzKQorICAgICAgICAgICAgcGF0aC5saW5l
VG8obWlkZGxlICsgaGFsZlNxdWFyZSwgYm90dG9tIC0gaGFsZlNxdWFyZSk7IC8vIEcKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoaSArIDIgPT0gd2lkdGhVbml0cykKKyAgICAgICAg
ICAgICAgICBwYXRoLmxpbmVUbyhyaWdodCwgdG9wKTsgLy8gRQorCisgICAgICAgICAgICBwYXRo
LmxpbmVUbyhtaWRkbGUsIGJvdHRvbSAtIGhhbGZTcXVhcmUpOyAvLyBGCisgICAgICAgIH0KKwor
ICAgICAgICBwYXRoLmxpbmVUbyhsZWZ0LCB0b3ApOyAvLyBICisgICAgfQorCisgICAgcGFpbnRl
ci0+ZHJhd1BhdGgocGF0aCk7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIFRl
eHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFFQYWludGVy
KiBwYWludGVyID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgY29uc3QgUVBlbiBvcmlnaW5hbFBl
biA9IHBhaW50ZXItPnBlbigpOworCisgICAgc3dpdGNoIChzdHlsZSkgeworICAgIGNhc2UgVGV4
dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU6CisgICAgICAgIHBhaW50ZXItPnNldFBlbihRdDo6
cmVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0
eWxlOgorICAgICAgICBwYWludGVyLT5zZXRQZW4oUXQ6OmdyZWVuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKG9yaWdpbmFsUGVuKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRyYXdFcnJvclVuZGVybGluZShwYWludGVyLCBv
cmlnaW4ueCgpLCBvcmlnaW4ueSgpLCB3aWR0aCwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcyk7
CisgICAgcGFpbnRlci0+c2V0UGVuKG9yaWdpbmFsUGVuKTsKIH0KIAogRmxvYXRSZWN0IEdyYXBo
aWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0LCBS
b3VuZGluZ01vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxh
dGZvcm1wbHVnaW4uaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdp
bi5oCmluZGV4IDFmNjI4MDQuLmUzMmQwZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCkBAIC0yMSw2ICsyMSw4IEBACiAjaWZuZGVmIFFXRUJLSVRQ
TEFURk9STVBMVUdJTl9ICiAjZGVmaW5lIFFXRUJLSVRQTEFURk9STVBMVUdJTl9ICiAKKyNpbmNs
dWRlICJxd2Via2l0Z2xvYmFsLmgiCisKIC8qCiAgKiAgV2FybmluZzogVGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBpcyBub3QgIHBhcnQgb2YgdGhlIHB1YmxpYyBRdFdlYktpdCBBUEkKICAqICBh
bmQgbWF5IGJlIGNoYW5nZWQgZnJvbSB2ZXJzaW9uIHRvIHZlcnNpb24gb3IgZXZlbiBiZSBjb21w
bGV0ZWx5IHJlbW92ZWQuCkBAIC0xMzQsNiArMTM2LDMyIEBAIHB1YmxpYyBRX1NMT1RTOgogfTsK
ICNlbmRpZgogCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViU3BlbGxDaGVja2VyR3JhbW1hckRl
dGFpbCB7CitwdWJsaWM6CisgICAgaW50IGxvY2F0aW9uOworICAgIGludCBsZW5ndGg7CisgICAg
UVN0cmluZ0xpc3QgZ3Vlc3NlczsKKyAgICBRU3RyaW5nIHVzZXJEZXNjcmlwdGlvbjsKK307CisK
K2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJTcGVsbENoZWNrZXIgOiBwdWJsaWMgUU9iamVjdCB7
CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250aW5vdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ29u
dGlub3VzU3BlbGxDaGVja2luZygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQo
Y29uc3QgUVN0cmluZyYgd29yZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5T
cGVsbERvY3VtZW50KGNvbnN0IFFTdHJpbmcmIHdvcmQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFFTdHJpbmcmIHdvcmQsIGludCogbWlzc3BlbGxp
bmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgUVN0
cmluZyBhdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBRU3RyaW5n
JiB3b3JkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGd1ZXNzZXNGb3JXb3JkKGNvbnN0IFFTdHJp
bmcmIHdvcmQsIGNvbnN0IFFTdHJpbmcmIGNvbnRleHQsIFFTdHJpbmdMaXN0JiBndWVzc2VzKSA9
IDA7CisgICAgCisgICAgdmlydHVhbCBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBRU3RyaW5nJiwgUVZlY3RvcjxR
V2ViU3BlbGxDaGVja2VyR3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwg
aW50KiBiYWRHcmFtbWFyTGVuZ3RoKSA9IDA7CisgICAgCit9OworCiBjbGFzcyBRV2ViS2l0UGxh
dGZvcm1QbHVnaW4gewogcHVibGljOgogICAgIHZpcnR1YWwgflFXZWJLaXRQbGF0Zm9ybVBsdWdp
bigpIHt9CkBAIC0xNDMsNyArMTcxLDggQEAgcHVibGljOgogICAgICAgICBOb3RpZmljYXRpb25z
LAogICAgICAgICBIYXB0aWNzLAogICAgICAgICBUb3VjaEludGVyYWN0aW9uLAotICAgICAgICBG
dWxsU2NyZWVuVmlkZW9QbGF5ZXIKKyAgICAgICAgRnVsbFNjcmVlblZpZGVvUGxheWVyLAorICAg
ICAgICBTcGVsbENoZWNrZXIKICAgICB9OwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0
ZW5zaW9uKEV4dGVuc2lvbikgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9x
dC9RdFdlYktpdC5wcm8gYi9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybwppbmRleCAzYzU4
MDg5Li4wNGQ2MDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybwor
KysgYi9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybwpAQCAtMTk0LDcgKzE5NCw4IEBAIFNP
VVJDRVMgKz0gXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcCBcCiAg
ICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAgXAogICAgICQkUFdE
L1dlYkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVwTWVudVF0LmNwcCBcCi0gICAgJCRQV0QvV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorICAgICQkUFdEL1dlYkNvcmVTdXBw
b3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgXAorICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0
L1RleHRDaGVja2VyQ2xpZW50UXQuY3BwCiAKIEhFQURFUlMgKz0gXAogICAgICQkV0VCS0lUX0FQ
SV9IRUFERVJTIFwKQEAgLTIxMCw3ICsyMTEsOCBAQCBIRUFERVJTICs9IFwKICAgICAkJFBXRC9X
ZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmggXAogICAgICQkUFdEL1dlYkNvcmVTdXBw
b3J0L1BvcHVwTWVudVF0LmggXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVw
TWVudVF0LmggXAotICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5oCisgICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggXAor
ICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuaAogCiB3ZWJraXQy
IHsKICAgICBIRUFERVJTICs9ICQkV0VCS0lUMl9BUElfSEVBREVSUwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAppbmRleCA3MzIxMGYw
Li4xNGJiNmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFF0LmNwcApAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgogCi0jZGVmaW5lIG1ldGhvZERlYnVnKCkgcURlYnVnKCJF
ZGl0b3JDbGllbnRRdDogJXMiLCBfX0ZVTkNUSU9OX18pOwogCiBzdGF0aWMgUVN0cmluZyBkdW1w
UGF0aChXZWJDb3JlOjpOb2RlICpub2RlKQogewpAQCAtMTA5LDEyICsxMDgsMTIgQEAgYm9vbCBF
ZGl0b3JDbGllbnRRdDo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShIVE1MRWxlbWVudCogZWxl
bWVudCkKIAogYm9vbCBFZGl0b3JDbGllbnRRdDo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV90ZXh0Q2hlY2tlckNs
aWVudC5pc0NvbnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiB9CiAKIGJvb2wgRWRpdG9y
Q2xpZW50UXQ6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBtX3RleHRDaGVja2VyQ2xpZW50LmlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCgpOwogfQogCiBpbnQgRWRpdG9yQ2xpZW50UXQ6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkK
QEAgLTM0NCwxMiArMzQzLDEyIEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmlzU2VsZWN0VHJhaWxp
bmdXaGl0ZXNwYWNlRW5hYmxlZCgpCiAKIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnRvZ2dsZUNvbnRp
bnVvdXNTcGVsbENoZWNraW5nKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fdGV4
dENoZWNrZXJDbGllbnQudG9nZ2xlQ29udGlub3VzU3BlbGxDaGVja2luZygpOwogfQogCiB2b2lk
IEVkaXRvckNsaWVudFF0Ojp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXJDbGllbnQudG9nZ2xlR3JhbW1hckNo
ZWNraW5nKCk7CiB9CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBDdHJsS2V5ID0gMSA8PCAwOwpA
QCAtNTY3LDMyICs1NjYsNiBAQCB2b2lkIEVkaXRvckNsaWVudFF0Ojp0ZXh0RGlkQ2hhbmdlSW5U
ZXh0QXJlYShFbGVtZW50KikKIHsKIH0KIAotdm9pZCBFZGl0b3JDbGllbnRRdDo6aWdub3JlV29y
ZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50UXQ6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50UXQ6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgaW50KiwgaW50KikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi1TdHJpbmcgRWRpdG9yQ2xpZW50UXQ6OmdldEF1dG9Db3JyZWN0
U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50
UXQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBWZWN0b3I8R3JhbW1h
ckRldGFpbD4mLCBpbnQqLCBpbnQqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZv
aWQgRWRpdG9yQ2xpZW50UXQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25z
dCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwpAQCAtNjE0LDExICs1ODcsNiBAQCBib29sIEVkaXRvckNsaWVudFF0OjpzcGVsbGluZ1VJSXNT
aG93aW5nKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRWRpdG9yQ2xpZW50UXQ6Omdl
dEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0
LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
CiBib29sIEVkaXRvckNsaWVudFF0Ojppc0VkaXRpbmcoKSBjb25zdAogewogICAgIHJldHVybiBt
X2VkaXRpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNs
aWVudFF0LmgKaW5kZXggZWNjYjc1ZC4uZDk2NThiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaApAQCAtMzEsMTYgKzMxLDE1IEBACiAj
ZGVmaW5lIEVkaXRvckNsaWVudFF0X2gKIAogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgotI2lu
Y2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgotCisj
aW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnRRdC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAKIGNsYXNzIFFXZWJQYWdlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEVkaXRv
ckNsaWVudFF0IDogcHVibGljIEVkaXRvckNsaWVudCwgcHVibGljIFRleHRDaGVja2VyQ2xpZW50
IHsKK2NsYXNzIEVkaXRvckNsaWVudFF0IDogcHVibGljIEVkaXRvckNsaWVudCB7CiBwdWJsaWM6
CiAgICAgRWRpdG9yQ2xpZW50UXQoUVdlYlBhZ2UqIHBhZ2UpOwogICAgIApAQCAtOTcsMjAgKzk2
LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdGV4dFdpbGxCZURlbGV0ZWRJblRleHRG
aWVsZChFbGVtZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRBcmVh
KEVsZW1lbnQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50
KGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgU3RyaW5n
Jik7Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhcios
IGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xl
bmd0aCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlz
c3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7Ci0gICAgdmlydHVhbCB2
b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgVmVjdG9y
PEdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1h
ckxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0
cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJik7CiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJik7CiAg
ICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdyk7CiAgICAgdmlydHVhbCBi
b29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0Zv
cldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxT
dHJpbmc+JiBndWVzc2VzKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3Rh
dGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQp
OwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhTcGVsbENoZWNrZXIq
LCBpbnQsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrLCBjb25zdCBTdHJpbmcmKSB7fQot
ICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgeyByZXR1cm4gdGhp
czsgfQorICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgeyByZXR1
cm4gJm1fdGV4dENoZWNrZXJDbGllbnQ7IH0KIAogICAgIGJvb2wgaXNFZGl0aW5nKCkgY29uc3Q7
CiAKQEAgLTExOCw2ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgYWNjZXB0c0Vk
aXRpbmc7CiAKIHByaXZhdGU6CisgICAgVGV4dENoZWNrZXJDbGllbnRRdCBtX3RleHRDaGVja2Vy
Q2xpZW50OwogICAgIFFXZWJQYWdlKiBtX3BhZ2U7CiAgICAgYm9vbCBtX2VkaXRpbmc7CiAgICAg
Ym9vbCBtX2luVW5kb1JlZG87IC8vIG91ciB1bmRvIHN0YWNrIHdvcmtzIGRpZmZlcmVudGx5IC0g
ZG9uJ3QgcmUtZW50ZXIhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RdFBsYXRmb3JtUGx1Z2luLmNwcAppbmRleCAyZTQ0YzY2Li43ZDg2ODhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAK
QEAgLTEzNCw0ICsxMzQsMTAgQEAgUGFzc093blB0cjxRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxl
cj4gUXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlRnVsbFNjcmVlblZpZGVvSGEKIH0KICNlbmRpZgog
CitQYXNzT3duUHRyPFFXZWJTcGVsbENoZWNrZXI+IFF0UGxhdGZvcm1QbHVnaW46OmNyZWF0ZVNw
ZWxsQ2hlY2tlcigpCit7CisgICAgUVdlYktpdFBsYXRmb3JtUGx1Z2luKiBwID0gcGx1Z2luKCk7
CisgICAgcmV0dXJuIGFkb3B0UHRyKHAgPyBzdGF0aWNfY2FzdDxRV2ViU3BlbGxDaGVja2VyKj4o
cC0+Y3JlYXRlRXh0ZW5zaW9uKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbjo6U3BlbGxDaGVja2VyKSkg
OiAwKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RdFBsYXRmb3JtUGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0
UGxhdGZvcm1QbHVnaW4uaAppbmRleCAzMTZiOGU4Li45ZjhhNzYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaApAQCAtMzMsNiAr
MzMsNyBAQCBjbGFzcyBRV2ViVG91Y2hNb2RpZmllcjsKICNpZiBFTkFCTEUoVklERU8pICYmIFVT
RShRVF9NVUxUSU1FRElBKQogY2xhc3MgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI7CiAjZW5k
aWYKK2NsYXNzIFFXZWJTcGVsbENoZWNrZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NTMsNiArNTQsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoUVRfTVVMVElN
RURJQSkKICAgICBQYXNzT3duUHRyPFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyPiBjcmVhdGVG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CiAjZW5kaWYKKyAgICBQYXNzT3duUHRyPFFXZWJTcGVs
bENoZWNrZXI+IGNyZWF0ZVNwZWxsQ2hlY2tlcigpOwogCiAgICAgUVdlYktpdFBsYXRmb3JtUGx1
Z2luKiBwbHVnaW4oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYmZkYjZjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5jcHAKQEAgLTAsMCArMSwxNjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTGluZHNheSBNYXRoaWVzb24gPGxpbmRzYXkubWF0aGll
c29uQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBEYXdpdCBBbGVtYXllaHUgIDxh
ZGF3aXRAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudFF0LmgiCisKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlF0UGxhdGZvcm1QbHVnaW4uaCIKKwor
I2luY2x1ZGUgPFFTdHJpbmdMaXN0PgorI2luY2x1ZGUgPFFWZWN0b3I+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFRleHRD
aGVja2VyQ2xpZW50UXQ6Omlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB3
b3JkKQoreworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3NwZWxsQ2hlY2tlci0+aWdub3JlV29yZEluU3BlbGxEb2N1bWVudCh3b3JkKTsKK30K
Kwordm9pZCBUZXh0Q2hlY2tlckNsaWVudFF0OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB3b3Jk
KQoreworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3NwZWxsQ2hlY2tlci0+bGVhcm5Xb3JkKHdvcmQpOworfQorCitTdHJpbmcgVGV4dENoZWNr
ZXJDbGllbnRRdDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29u
c3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIo
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIG1fc3BlbGxDaGVja2Vy
LT5hdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7
Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRRdDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNv
bnN0IFVDaGFyKiBidWZmZXIsIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwg
aW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgUVN0cmluZyB0ZXh0ID0gUVN0cmluZzo6ZnJv
bVJhd0RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGJ1ZmZlciksIGxlbmd0aCk7
CisgICAgbV9zcGVsbENoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0ZXh0LCBtaXNzcGVs
bGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJD
bGllbnRRdDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqIGJ1ZmZlciwgaW50IGxl
bmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBkZXRhaWxzLCBpbnQqIGJhZEdyYW1tYXJMb2Nh
dGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKQoreworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tl
cigpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBRU3RyaW5nIHRleHQgPSBRU3RyaW5n
Ojpmcm9tUmF3RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oYnVmZmVyKSwgbGVu
Z3RoKTsKKyAgICAKKyAgICAKKyAgICAvLyBEbyBHcmFtbWVyIENoZWNrCisgICAgUVZlY3RvcjxR
V2ViU3BlbGxDaGVja2VyR3JhbW1hckRldGFpbD4gIHFXZWJEZXRhaWxzOworICAgIG1fc3BlbGxD
aGVja2VyLT5jaGVja0dyYW1tYXJPZlN0cmluZyh0ZXh0LCBxV2ViRGV0YWlscywgYmFkR3JhbW1h
ckxvY2F0aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICAKKyAgICAvLyBjb3B5IHFXZWJEZXRh
aWxzIHRvIGRldGFpbHMKKyAgICBkZXRhaWxzLmNsZWFyKCk7CisgICAgUVZlY3RvcjxRV2ViU3Bl
bGxDaGVja2VyR3JhbW1hckRldGFpbD46Oml0ZXJhdG9yIGl0ID0gcVdlYkRldGFpbHMuYmVnaW4o
KTsKKyAgICB3aGlsZSAoaXQgPCBxV2ViRGV0YWlscy5lbmQoKSkgeworICAgICAgICBHcmFtbWFy
RGV0YWlsIGdkOworICAgICAgICBnZC5sb2NhdGlvbiA9IGl0LT5sb2NhdGlvbjsKKyAgICAgICAg
Z2QubGVuZ3RoID0gaXQtPmxlbmd0aDsKKyAgICAgICAgUVN0cmluZ0xpc3Q6Oml0ZXJhdG9yIHNp
dCA9IGl0LT5ndWVzc2VzLmJlZ2luKCk7CisgICAgICAgIHdoaWxlIChzaXQgPCBpdC0+Z3Vlc3Nl
cy5lbmQoKSkgeworICAgICAgICAgICAgZ2QuZ3Vlc3Nlcy5hcHBlbmQoKnNpdCk7CisgICAgICAg
ICAgICBzaXQrKzsKKyAgICAgICAgfQorICAgICAgICBnZC51c2VyRGVzY3JpcHRpb24gPSBpdC0+
dXNlckRlc2NyaXB0aW9uOworICAgICAgICBkZXRhaWxzLmFwcGVuZChnZCk7CisKKyAgICAgICAg
aXQrKzsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRRdDo6Z2V0R3Vlc3Nlc0Zv
cldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxT
dHJpbmc+JiBndWVzc2VzKQoreworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBRU3RyaW5nTGlzdCBndWVzc2VzTGlzdDsKKyAgICBtX3NwZWxsQ2hl
Y2tlci0+Z3Vlc3Nlc0ZvcldvcmQod29yZCwgY29udGV4dCwgZ3Vlc3Nlc0xpc3QpOworICAgIGNv
bnN0IGludCBjb3VudCA9IGd1ZXNzZXNMaXN0LmNvdW50KCk7CisgICAgZ3Vlc3Nlcy5yZXNpemUo
Y291bnQpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgZ3Vl
c3Nlcy5hcHBlbmQoZ3Vlc3Nlc0xpc3QuYXQoaSkpOworfQorCitib29sIFRleHRDaGVja2VyQ2xp
ZW50UXQ6OmlzQ29udGlub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQoreworICAgIGlmICghbG9h
ZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9z
cGVsbENoZWNrZXItPmlzQ29udGlub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKK30KKwordm9p
ZCBUZXh0Q2hlY2tlckNsaWVudFF0Ojp0b2dnbGVDb250aW5vdXNTcGVsbENoZWNraW5nKCkKK3sK
KyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
cGVsbENoZWNrZXItPnRvZ2dsZUNvbnRpbm91c1NwZWxsQ2hlY2tpbmcoKTsKK30KKworYm9vbCBU
ZXh0Q2hlY2tlckNsaWVudFF0Ojppc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKQoreworICAgIGlm
ICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gbV9zcGVsbENoZWNrZXItPmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOworfQorCit2b2lk
IFRleHRDaGVja2VyQ2xpZW50UXQ6OnRvZ2dsZUdyYW1tYXJDaGVja2luZygpCit7CisgICAgaWYg
KCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3BlbGxDaGVj
a2VyLT50b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKTsKK30KKworYm9vbCBUZXh0Q2hlY2tlckNsaWVu
dFF0Ojpsb2FkU3BlbGxDaGVja2VyKCkKK3sKKyAgICBpZiAobV9zcGVsbENoZWNrZXIpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgUXRQbGF0Zm9ybVBsdWdpbiBwbGF0Zm9ybVBsdWdpbjsK
KyAgICBpZiAoKG1fc3BlbGxDaGVja2VyID0gcGxhdGZvcm1QbHVnaW4uY3JlYXRlU3BlbGxDaGVj
a2VyKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tl
ckNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2Vy
Q2xpZW50UXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTMzZTUxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hl
Y2tlckNsaWVudFF0LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBMaW5kc2F5IE1hdGhpZXNvbiA8bGluZHNheS5tYXRoaWVzb25AZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDExIERhd2l0IEFsZW1heWVodSAgPGFkYXdpdEBrZGUub3JnPgorICoKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0Q2hlY2tlckNsaWVudFF0
X2gKKyNkZWZpbmUgVGV4dENoZWNrZXJDbGllbnRRdF9oCisKKyNpbmNsdWRlICJUZXh0Q2hlY2tl
ckNsaWVudC5oIgorI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBUZXh0Q2hlY2tlckNsaWVudFF0IDogcHVibGljIFRleHRDaGVj
a2VyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxE
b2N1bWVudChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0
IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3Qg
VUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3Bl
bGxpbmdMZW5ndGgpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlv
bkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOworICAgIHZp
cnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgs
IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJh
ZEdyYW1tYXJMZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25z
dCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1
ZXNzZXMpOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhTcGVsbENo
ZWNrZXIqLCBpbnQsIFRleHRDaGVja2luZ1R5cGVNYXNrLCBjb25zdCBTdHJpbmcmKSB7IH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAg
dmlydHVhbCB2b2lkIHRvZ2dsZUNvbnRpbm91c1NwZWxsQ2hlY2tpbmcoKTsKKyAgICAKKyAgICB2
aXJ0dWFsIGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgdmlydHVhbCB2b2lk
IHRvZ2dsZUdyYW1tYXJDaGVja2luZygpOyAgIAorCitwcml2YXRlOgorICAgIGJvb2wgbG9hZFNw
ZWxsQ2hlY2tlcigpOworCitwcml2YXRlOgorICAgIE93blB0cjxRV2ViU3BlbGxDaGVja2VyPiBt
X3NwZWxsQ2hlY2tlcjsKK307CisKK30KKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103840</attachid>
            <date>2011-08-12 16:36:31 -0700</date>
            <delta_ts>2011-08-12 16:48:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44114-20110813093628.patch</filename>
            <type>text/plain</type>
            <size>21702</size>
            <attacher name="Lindsay Mathieson">lindsay.mathieson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI2NzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCAxMGRlOTY3
MWFiY2Q2YTVjMTM0NTg2ZTdiMmVkN2U3NDgwNTMzODk1Li5kMGZhNGNlNzkwN2U5ODgwMjc0ODEz
ZDZlNjc4YWEzNGVkMDkyZTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC05MDAsMTIgKzkwMCwx
MDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBib28KICAgICBkcmF3TGluZShJbnRQb2ludChzdGFy
dFBvaW50LngoKSwgc3RhcnRQb2ludC55KCkpLCBJbnRQb2ludChlbmRQb2ludC54KCksIGVuZFBv
aW50LnkoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hl
Y2tpbmcoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpCisK
Ky8qCisgKiAgIE5PVEU6IFRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IGJhc2VkIHVwb24gdGhlIG9u
ZSBmcm9tCisgKiAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0RyYXdF
cnJvclVuZGVybGluZS57aHxjcHB9CisgKgorICogICBEcmF3cyBhbiBlcnJvciB1bmRlcmxpbmUg
dGhhdCBsb29rcyBsaWtlIG9uZSBvZjoKKyAqCisgKiAgICAgICAgICAgICAgIEggICAgICAgRSAg
ICAgICAgICAgICAgICBICisgKiAgICAgIC9cICAgICAgL1wgICAgICAvXCAgICAgICAgL1wgICAg
ICAvXCAgICAgICAgICAgICAgIC0KKyAqICAgIEEvICBcICAgIC8gIFwgICAgLyAgXCAgICAgQS8g
IFwgICAgLyAgXCAgICAgICAgICAgICAgfAorICogICAgIFwgICBcICAvICAgIFwgIC8gICAvRCAg
ICAgXCAgIFwgIC8gICAgXCAgICAgICAgICAgICB8CisgKiAgICAgIFwgICBcLyAgQyAgIFwvICAg
LyAgICAgICAgXCAgIFwvICAgQyAgXCAgICAgICAgICAgIHwgaGVpZ2h0ID0gaGVpZ2h0U3F1YXJl
cyAqIHNxdWFyZQorICogICAgICAgXCAgICAgIC9cICBGICAgLyAgICAgICAgICBcICBGICAgL1wg
ICBcICAgICAgICAgICB8CisgKiAgICAgICAgXCAgICAvICBcICAgIC8gICAgICAgICAgICBcICAg
IC8gIFwgICBcRyAgICAgICAgIHwKKyAqICAgICAgICAgXCAgLyAgICBcICAvICAgICAgICAgICAg
ICBcICAvICAgIFwgIC8gICAgICAgICAgfAorICogICAgICAgICAgXC8gICAgICBcLyAgICAgICAg
ICAgICAgICBcLyAgICAgIFwvICAgICAgICAgICAtCisgKiAgICAgICAgICBCICAgICAgICAgICAg
ICAgICAgICAgICAgIEIKKyAqICAgICAgICAgIHwtLS18CisgKiAgICAgICAgdW5pdFdpZHRoID0g
KGhlaWdodFNxdWFyZXMgLSAxKSAqIHNxdWFyZQorICoKKyAqICBUaGUgeCwgeSwgd2lkdGgsIGhl
aWdodCBwYXNzZWQgaW4gZ2l2ZSB0aGUgZGVzaXJlZCBib3VuZGluZyBib3g7CisgKiAgeC93aWR0
aCBhcmUgYWRqdXN0ZWQgdG8gbWFrZSB0aGUgdW5kZXJsaW5lIGEgaW50ZWdlciBudW1iZXIgb2Yg
dW5pdHMgd2lkZS4KKyovCitzdGF0aWMgdm9pZCBkcmF3RXJyb3JVbmRlcmxpbmUoUVBhaW50ZXIg
KnBhaW50ZXIsIHFyZWFsIHgsIHFyZWFsIHksIHFyZWFsIHdpZHRoLCBxcmVhbCBoZWlnaHQpCit7
CisgICAgY29uc3QgcXJlYWwgaGVpZ2h0U3F1YXJlcyA9IDIuNTsKKworICAgIHFyZWFsIHNxdWFy
ZSA9IGhlaWdodCAvIGhlaWdodFNxdWFyZXM7CisgICAgcXJlYWwgaGFsZlNxdWFyZSA9IDAuNSAq
IHNxdWFyZTsKKworICAgIHFyZWFsIHVuaXRXaWR0aCA9IChoZWlnaHRTcXVhcmVzIC0gMS4wKSAq
IHNxdWFyZTsKKyAgICBpbnQgd2lkdGhVbml0cyA9IHN0YXRpY19jYXN0PGludD4oKHdpZHRoICsg
MC41ICogdW5pdFdpZHRoKSAvIHVuaXRXaWR0aCk7CisKKyAgICB4ICs9IDAuNSAqICh3aWR0aCAt
IHdpZHRoVW5pdHMgKiB1bml0V2lkdGgpOworICAgIHdpZHRoID0gd2lkdGhVbml0cyAqIHVuaXRX
aWR0aDsKKworICAgIHFyZWFsIGJvdHRvbSA9IHkgKyBoZWlnaHQ7CisgICAgcXJlYWwgdG9wID0g
eTsKKworICAgIFFQYWludGVyUGF0aCBwYXRoOworICAgIC8vIEJvdHRvbSBvZiBzcXVpZ2dsZQor
ICAgIHBhdGgubW92ZVRvKHggLSBoYWxmU3F1YXJlLCB0b3AgKyBoYWxmU3F1YXJlKTsgLy8gQQor
CisgICAgaW50IGkgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aFVuaXRzOyBpICs9IDIp
IHsKKyAgICAgICAgcXJlYWwgbWlkZGxlID0geCArIChpICsgMSkgKiB1bml0V2lkdGg7CisgICAg
ICAgIHFyZWFsIHJpZ2h0ID0geCArIChpICsgMikgKiB1bml0V2lkdGg7CisKKyAgICAgICAgcGF0
aC5saW5lVG8obWlkZGxlLCBib3R0b20pOyAvLyBCCisKKyAgICAgICAgaWYgKGkgKyAyID09IHdp
ZHRoVW5pdHMpCisgICAgICAgICAgICBwYXRoLmxpbmVUbyhyaWdodCArIGhhbGZTcXVhcmUsIHRv
cCArIGhhbGZTcXVhcmUpOyAvLyBECisgICAgICAgIGVsc2UgaWYgKGkgKyAxICE9IHdpZHRoVW5p
dHMpCisgICAgICAgICAgICBwYXRoLmxpbmVUbyhyaWdodCwgdG9wICsgc3F1YXJlKTsgLy8gQwor
ICAgIH0KKworICAgIC8vIFRvcCBvZiBzcXVpZ2dsZQorICAgIGZvciAoaSAtPSAyOyBpID49IDA7
IGkgLT0gMikgeworICAgICAgICBxcmVhbCBsZWZ0ID0geCArIGkgKiB1bml0V2lkdGg7CisgICAg
ICAgIHFyZWFsIG1pZGRsZSA9IHggKyAoaSArIDEpICogdW5pdFdpZHRoOworICAgICAgICBxcmVh
bCByaWdodCA9IHggKyAoaSArIDIpICogdW5pdFdpZHRoOworCisgICAgICAgIGlmIChpICsgMSA9
PSB3aWR0aFVuaXRzKQorICAgICAgICAgICAgcGF0aC5saW5lVG8obWlkZGxlICsgaGFsZlNxdWFy
ZSwgYm90dG9tIC0gaGFsZlNxdWFyZSk7IC8vIEcKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBpZiAoaSArIDIgPT0gd2lkdGhVbml0cykKKyAgICAgICAgICAgICAgICBwYXRoLmxpbmVUbyhy
aWdodCwgdG9wKTsgLy8gRQorCisgICAgICAgICAgICBwYXRoLmxpbmVUbyhtaWRkbGUsIGJvdHRv
bSAtIGhhbGZTcXVhcmUpOyAvLyBGCisgICAgICAgIH0KKworICAgICAgICBwYXRoLmxpbmVUbyhs
ZWZ0LCB0b3ApOyAvLyBICisgICAgfQorCisgICAgcGFpbnRlci0+ZHJhd1BhdGgocGF0aCk7Cit9
CisKKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0
IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBz
dHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFFQYWludGVyKiBwYWludGVyID0gcGxhdGZvcm1D
b250ZXh0KCk7CisgICAgY29uc3QgUVBlbiBvcmlnaW5hbFBlbiA9IHBhaW50ZXItPnBlbigpOwor
CisgICAgc3dpdGNoIChzdHlsZSkgeworICAgIGNhc2UgVGV4dENoZWNraW5nU3BlbGxpbmdMaW5l
U3R5bGU6CisgICAgICAgIHBhaW50ZXItPnNldFBlbihRdDo6cmVkKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlOgorICAgICAgICBwYWludGVy
LT5zZXRQZW4oUXQ6OmdyZWVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcGFpbnRlci0+c2V0UGVuKG9yaWdpbmFsUGVuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGRyYXdFcnJvclVuZGVybGluZShwYWludGVyLCBvcmlnaW4ueCgpLCBvcmlnaW4ueSgp
LCB3aWR0aCwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcyk7CisgICAgcGFpbnRlci0+c2V0UGVu
KG9yaWdpbmFsUGVuKTsKIH0KIAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0LCBSb3VuZGluZ01vZGUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaCBiL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCmluZGV4IDFmNjI4MDQ1YmI0
Mjk5MzI2ZjdhMTQ4OWYxNmFkMmJkMmYxMmU4NDAuLmUzMmQwZGFmMjlmNmNjYzU2YzAzODFjNGNk
MzE3Y2I2MjE2ODgxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJraXRw
bGF0Zm9ybXBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9y
bXBsdWdpbi5oCkBAIC0yMSw2ICsyMSw4IEBACiAjaWZuZGVmIFFXRUJLSVRQTEFURk9STVBMVUdJ
Tl9ICiAjZGVmaW5lIFFXRUJLSVRQTEFURk9STVBMVUdJTl9ICiAKKyNpbmNsdWRlICJxd2Via2l0
Z2xvYmFsLmgiCisKIC8qCiAgKiAgV2FybmluZzogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBp
cyBub3QgIHBhcnQgb2YgdGhlIHB1YmxpYyBRdFdlYktpdCBBUEkKICAqICBhbmQgbWF5IGJlIGNo
YW5nZWQgZnJvbSB2ZXJzaW9uIHRvIHZlcnNpb24gb3IgZXZlbiBiZSBjb21wbGV0ZWx5IHJlbW92
ZWQuCkBAIC0xMzQsNiArMTM2LDMyIEBAIHB1YmxpYyBRX1NMT1RTOgogfTsKICNlbmRpZgogCitj
bGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViU3BlbGxDaGVja2VyR3JhbW1hckRldGFpbCB7CitwdWJs
aWM6CisgICAgaW50IGxvY2F0aW9uOworICAgIGludCBsZW5ndGg7CisgICAgUVN0cmluZ0xpc3Qg
Z3Vlc3NlczsKKyAgICBRU3RyaW5nIHVzZXJEZXNjcmlwdGlvbjsKK307CisKK2NsYXNzIFFXRUJL
SVRfRVhQT1JUIFFXZWJTcGVsbENoZWNrZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpF
Q1QKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250aW5vdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ29udGlub3VzU3BlbGxD
aGVja2luZygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgUVN0cmlu
ZyYgd29yZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50
KGNvbnN0IFFTdHJpbmcmIHdvcmQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGlu
Z09mU3RyaW5nKGNvbnN0IFFTdHJpbmcmIHdvcmQsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwg
aW50KiBtaXNzcGVsbGluZ0xlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgUVN0cmluZyBhdXRvQ29y
cmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGd1ZXNzZXNGb3JXb3JkKGNvbnN0IFFTdHJpbmcmIHdvcmQsIGNv
bnN0IFFTdHJpbmcmIGNvbnRleHQsIFFTdHJpbmdMaXN0JiBndWVzc2VzKSA9IDA7CisgICAgCisg
ICAgdmlydHVhbCBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
aGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBRU3RyaW5nJiwgUVZlY3RvcjxRV2ViU3BlbGxDaGVj
a2VyR3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFt
bWFyTGVuZ3RoKSA9IDA7CisgICAgCit9OworCiBjbGFzcyBRV2ViS2l0UGxhdGZvcm1QbHVnaW4g
ewogcHVibGljOgogICAgIHZpcnR1YWwgflFXZWJLaXRQbGF0Zm9ybVBsdWdpbigpIHt9CkBAIC0x
NDMsNyArMTcxLDggQEAgcHVibGljOgogICAgICAgICBOb3RpZmljYXRpb25zLAogICAgICAgICBI
YXB0aWNzLAogICAgICAgICBUb3VjaEludGVyYWN0aW9uLAotICAgICAgICBGdWxsU2NyZWVuVmlk
ZW9QbGF5ZXIKKyAgICAgICAgRnVsbFNjcmVlblZpZGVvUGxheWVyLAorICAgICAgICBTcGVsbENo
ZWNrZXIKICAgICB9OwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVu
c2lvbikgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5w
cm8gYi9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybwppbmRleCAzYzU4MDg5MWU1YzFlMWNl
Njk2NjM4OTg4Mjg2MzNjMGNjNjhhNTI0Li4wNGQ2MDQ2OWM1ZTBlNDQxNzUxNDJiOTAwZTVmMTE5
YzkwNjI4N2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybworKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybwpAQCAtMTk0LDcgKzE5NCw4IEBAIFNPVVJD
RVMgKz0gXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcCBcCiAgICAg
JCRQV0QvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAgXAogICAgICQkUFdEL1dl
YkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVwTWVudVF0LmNwcCBcCi0gICAgJCRQV0QvV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgXAorICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1Rl
eHRDaGVja2VyQ2xpZW50UXQuY3BwCiAKIEhFQURFUlMgKz0gXAogICAgICQkV0VCS0lUX0FQSV9I
RUFERVJTIFwKQEAgLTIxMCw3ICsyMTEsOCBAQCBIRUFERVJTICs9IFwKICAgICAkJFBXRC9XZWJD
b3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmggXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0
L1BvcHVwTWVudVF0LmggXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVwTWVu
dVF0LmggXAotICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5o
CisgICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggXAorICAg
ICQkUFdEL1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuaAogCiB3ZWJraXQyIHsK
ICAgICBIRUFERVJTICs9ICQkV0VCS0lUMl9BUElfSEVBREVSUwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAppbmRleCA3MzIxMGYwZmRl
MTY2NWZjNzljODM2ZWU4YmNlNTQzMmUyN2Y5YzVkLi4xNGJiNmU2NTc0Njg0NDU5YjU5NzA3MTE1
N2I4ZDgzZmJmMGVlZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFF0LmNwcApAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgPHN0ZGlv
Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCi0jZGVmaW5lIG1ldGhvZERlYnVnKCkgcURl
YnVnKCJFZGl0b3JDbGllbnRRdDogJXMiLCBfX0ZVTkNUSU9OX18pOwogCiBzdGF0aWMgUVN0cmlu
ZyBkdW1wUGF0aChXZWJDb3JlOjpOb2RlICpub2RlKQogewpAQCAtMTA5LDEyICsxMDgsMTIgQEAg
Ym9vbCBFZGl0b3JDbGllbnRRdDo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShIVE1MRWxlbWVu
dCogZWxlbWVudCkKIAogYm9vbCBFZGl0b3JDbGllbnRRdDo6aXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV90ZXh0Q2hl
Y2tlckNsaWVudC5pc0NvbnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiB9CiAKIGJvb2wg
RWRpdG9yQ2xpZW50UXQ6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBtX3RleHRDaGVja2VyQ2xpZW50LmlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZCgpOwogfQogCiBpbnQgRWRpdG9yQ2xpZW50UXQ6OnNwZWxsQ2hlY2tlckRvY3VtZW50
VGFnKCkKQEAgLTM0NCwxMiArMzQzLDEyIEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmlzU2VsZWN0
VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpCiAKIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnRvZ2ds
ZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IG1fdGV4dENoZWNrZXJDbGllbnQudG9nZ2xlQ29udGlub3VzU3BlbGxDaGVja2luZygpOwogfQog
CiB2b2lkIEVkaXRvckNsaWVudFF0Ojp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXJDbGllbnQudG9nZ2xlR3Jh
bW1hckNoZWNraW5nKCk7CiB9CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBDdHJsS2V5ID0gMSA8
PCAwOwpAQCAtNTY3LDMyICs1NjYsNiBAQCB2b2lkIEVkaXRvckNsaWVudFF0Ojp0ZXh0RGlkQ2hh
bmdlSW5UZXh0QXJlYShFbGVtZW50KikKIHsKIH0KIAotdm9pZCBFZGl0b3JDbGllbnRRdDo6aWdu
b3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50UXQ6OmxlYXJuV29yZChjb25zdCBTdHJpbmcm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50UXQ6OmNo
ZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgaW50KiwgaW50KikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1TdHJpbmcgRWRpdG9yQ2xpZW50UXQ6OmdldEF1dG9D
b3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgRWRpdG9y
Q2xpZW50UXQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBWZWN0b3I8
R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
Zyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwpAQCAtNjE0LDExICs1ODcsNiBAQCBib29sIEVkaXRvckNsaWVudFF0OjpzcGVsbGlu
Z1VJSXNTaG93aW5nKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRWRpdG9yQ2xpZW50
UXQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBj
b250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCiBib29sIEVkaXRvckNsaWVudFF0Ojppc0VkaXRpbmcoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2VkaXRpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFF0LmgKaW5kZXggZWNjYjc1ZGQwYTY4ODBkNzlkNDFkOGFkOTgwMWNmNDI3NTQ4
MzAyYS4uZDk2NThiYjcyMjQyYzA0NjVkOWQ2MjllZDRlNjAzODg1ZWY0Y2E4NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaApAQCAtMzEs
MTYgKzMxLDE1IEBACiAjZGVmaW5lIEVkaXRvckNsaWVudFF0X2gKIAogI2luY2x1ZGUgIkVkaXRv
ckNsaWVudC5oIgotI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVm
Q291bnRlZC5oIgotCisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnRRdC5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAKIGNsYXNzIFFXZWJQYWdlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEVkaXRvckNsaWVudFF0IDogcHVibGljIEVkaXRvckNsaWVudCwgcHVibGljIFRl
eHRDaGVja2VyQ2xpZW50IHsKK2NsYXNzIEVkaXRvckNsaWVudFF0IDogcHVibGljIEVkaXRvckNs
aWVudCB7CiBwdWJsaWM6CiAgICAgRWRpdG9yQ2xpZW50UXQoUVdlYlBhZ2UqIHBhZ2UpOwogICAg
IApAQCAtOTcsMjAgKzk2LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdGV4dFdpbGxC
ZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHRleHREaWRD
aGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3Jk
SW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBsZWFybldv
cmQoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmlu
Zyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50
KiBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RT
dWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7
Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24s
IGludCogYmFkR3JhbW1hckxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJik7
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29u
c3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdyk7
CiAgICAgdmlydHVhbCBib29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNv
bnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNl
dElucHV0TWV0aG9kU3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0
ZShib29sIGVuYWJsZWQpOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhTcGVsbENoZWNrZXIqLCBpbnQsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrLCBjb25z
dCBTdHJpbmcmKSB7fQotICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2Vy
KCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRleHRD
aGVja2VyKCkgeyByZXR1cm4gJm1fdGV4dENoZWNrZXJDbGllbnQ7IH0KIAogICAgIGJvb2wgaXNF
ZGl0aW5nKCkgY29uc3Q7CiAKQEAgLTExOCw2ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgYWNjZXB0c0VkaXRpbmc7CiAKIHByaXZhdGU6CisgICAgVGV4dENoZWNrZXJDbGllbnRR
dCBtX3RleHRDaGVja2VyQ2xpZW50OwogICAgIFFXZWJQYWdlKiBtX3BhZ2U7CiAgICAgYm9vbCBt
X2VkaXRpbmc7CiAgICAgYm9vbCBtX2luVW5kb1JlZG87IC8vIG91ciB1bmRvIHN0YWNrIHdvcmtz
IGRpZmZlcmVudGx5IC0gZG9uJ3QgcmUtZW50ZXIhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcAppbmRleCAyZTQ0YzY2OTMzZGU2
YmEzYTY4OTc3NjAxZTE4OTkwZDJkYmU2MDkwLi43ZDg2ODhiOTU5ZWNjN2IzYjEwZWJjNTkwM2Zi
YWNkNGI1YzJiNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1F0UGxhdGZvcm1QbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKQEAgLTEzNCw0ICsxMzQsMTAgQEAgUGFzc093blB0cjxR
V2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcj4gUXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlRnVsbFNj
cmVlblZpZGVvSGEKIH0KICNlbmRpZgogCitQYXNzT3duUHRyPFFXZWJTcGVsbENoZWNrZXI+IFF0
UGxhdGZvcm1QbHVnaW46OmNyZWF0ZVNwZWxsQ2hlY2tlcigpCit7CisgICAgUVdlYktpdFBsYXRm
b3JtUGx1Z2luKiBwID0gcGx1Z2luKCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKHAgPyBzdGF0aWNf
Y2FzdDxRV2ViU3BlbGxDaGVja2VyKj4ocC0+Y3JlYXRlRXh0ZW5zaW9uKFFXZWJLaXRQbGF0Zm9y
bVBsdWdpbjo6U3BlbGxDaGVja2VyKSkgOiAwKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmggYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaAppbmRleCAzMTZiOGU4ZGJk
ZjY5ZTQ3MDVkZWNiNWM4MTc0NzU5MzcyMTMxNTY4Li45ZjhhNzYwYjgyYTlkYTJkOTk5YjZhM2E0
YWM4ZDJiNjgzNzU5NmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1F0UGxhdGZvcm1QbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1F0UGxhdGZvcm1QbHVnaW4uaApAQCAtMzMsNiArMzMsNyBAQCBjbGFzcyBRV2ViVG91Y2hN
b2RpZmllcjsKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShRVF9NVUxUSU1FRElBKQogY2xhc3Mg
UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI7CiAjZW5kaWYKK2NsYXNzIFFXZWJTcGVsbENoZWNr
ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTMsNiArNTQsNyBAQCBwdWJsaWM6CiAj
aWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoUVRfTVVMVElNRURJQSkKICAgICBQYXNzT3duUHRyPFFX
ZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyPiBjcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7
CiAjZW5kaWYKKyAgICBQYXNzT3duUHRyPFFXZWJTcGVsbENoZWNrZXI+IGNyZWF0ZVNwZWxsQ2hl
Y2tlcigpOwogCiAgICAgUVdlYktpdFBsYXRmb3JtUGx1Z2luKiBwbHVnaW4oKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRR
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjUxNDU4YTkwN2Q2NDMxNDMyZmQ2YjUxMjZjYjYzZjc5NzdjZmQy
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4
dENoZWNrZXJDbGllbnRRdC5jcHAKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgTGluZHNheSBNYXRoaWVzb24gPGxpbmRzYXkubWF0aGllc29uQGdtYWlsLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBEYXdpdCBBbGVtYXllaHUgIDxhZGF3aXRAa2RlLm9yZz4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudFF0LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlF0UGxhdGZvcm1QbHVnaW4uaCIKKworI2luY2x1ZGUgPFFTdHJp
bmdMaXN0PgorI2luY2x1ZGUgPFFWZWN0b3I+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFRleHRDaGVja2VyQ2xpZW50UXQ6
Omlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB3b3JkKQoreworICAgIGlm
ICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NwZWxsQ2hl
Y2tlci0+aWdub3JlV29yZEluU3BlbGxEb2N1bWVudCh3b3JkKTsKK30KKwordm9pZCBUZXh0Q2hl
Y2tlckNsaWVudFF0OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQoreworICAgIGlmICgh
bG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NwZWxsQ2hlY2tl
ci0+bGVhcm5Xb3JkKHdvcmQpOworfQorCitTdHJpbmcgVGV4dENoZWNrZXJDbGllbnRRdDo6Z2V0
QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNz
cGVsbGVkV29yZCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIG1fc3BlbGxDaGVja2VyLT5hdXRvQ29ycmVjdFN1
Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7Cit9CisKK3ZvaWQgVGV4
dENoZWNrZXJDbGllbnRRdDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiBidWZm
ZXIsIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGlu
Z0xlbmd0aCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29uc3QgUVN0cmluZyB0ZXh0ID0gUVN0cmluZzo6ZnJvbVJhd0RhdGEocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGJ1ZmZlciksIGxlbmd0aCk7CisgICAgbV9zcGVsbENo
ZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0ZXh0LCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBt
aXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRRdDo6Y2hlY2tH
cmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCwgVmVjdG9yPEdy
YW1tYXJEZXRhaWw+JiBkZXRhaWxzLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRH
cmFtbWFyTGVuZ3RoKQoreworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBRU3RyaW5nIHRleHQgPSBRU3RyaW5nOjpmcm9tUmF3RGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oYnVmZmVyKSwgbGVuZ3RoKTsKKyAgICAKKyAg
ICAKKyAgICAvLyBEbyBHcmFtbWVyIENoZWNrCisgICAgUVZlY3RvcjxRV2ViU3BlbGxDaGVja2Vy
R3JhbW1hckRldGFpbD4gIHFXZWJEZXRhaWxzOworICAgIG1fc3BlbGxDaGVja2VyLT5jaGVja0dy
YW1tYXJPZlN0cmluZyh0ZXh0LCBxV2ViRGV0YWlscywgYmFkR3JhbW1hckxvY2F0aW9uLCBiYWRH
cmFtbWFyTGVuZ3RoKTsKKyAgICAKKyAgICAvLyBjb3B5IHFXZWJEZXRhaWxzIHRvIGRldGFpbHMK
KyAgICBkZXRhaWxzLmNsZWFyKCk7CisgICAgUVZlY3RvcjxRV2ViU3BlbGxDaGVja2VyR3JhbW1h
ckRldGFpbD46Oml0ZXJhdG9yIGl0ID0gcVdlYkRldGFpbHMuYmVnaW4oKTsKKyAgICB3aGlsZSAo
aXQgPCBxV2ViRGV0YWlscy5lbmQoKSkKKyAgICB7CisgICAgICAgIEdyYW1tYXJEZXRhaWwgZ2Q7
CisgICAgICAgIGdkLmxvY2F0aW9uID0gaXQtPmxvY2F0aW9uOworICAgICAgICBnZC5sZW5ndGgg
PSBpdC0+bGVuZ3RoOworICAgICAgICBRU3RyaW5nTGlzdDo6aXRlcmF0b3Igc2l0ID0gaXQtPmd1
ZXNzZXMuYmVnaW4oKTsKKyAgICAgICAgd2hpbGUgKHNpdCA8IGl0LT5ndWVzc2VzLmVuZCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBnZC5ndWVzc2VzLmFwcGVuZCgqc2l0KTsKKyAgICAgICAg
ICAgIHNpdCsrOworICAgICAgICB9CisgICAgICAgIGdkLnVzZXJEZXNjcmlwdGlvbiA9IGl0LT51
c2VyRGVzY3JpcHRpb247CisgICAgICAgIGRldGFpbHMuYXBwZW5kKGdkKTsKKworICAgICAgICBp
dCsrOworICAgIH0KK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudFF0OjpnZXRHdWVzc2VzRm9y
V29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0
cmluZz4mIGd1ZXNzZXMpCit7CisgICAgaWYgKCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFFTdHJpbmdMaXN0IGd1ZXNzZXNMaXN0OworICAgIG1fc3BlbGxDaGVj
a2VyLT5ndWVzc2VzRm9yV29yZCh3b3JkLCBjb250ZXh0LCBndWVzc2VzTGlzdCk7CisgICAgY29u
c3QgaW50IGNvdW50ID0gZ3Vlc3Nlc0xpc3QuY291bnQoKTsKKyAgICBndWVzc2VzLnJlc2l6ZShj
b3VudCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBndWVz
c2VzLmFwcGVuZChndWVzc2VzTGlzdC5hdChpKSk7Cit9CisKK2Jvb2wgVGV4dENoZWNrZXJDbGll
bnRRdDo6aXNDb250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCit7CisgICAgaWYgKCFsb2Fk
U3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX3Nw
ZWxsQ2hlY2tlci0+aXNDb250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworfQorCit2b2lk
IFRleHRDaGVja2VyQ2xpZW50UXQ6OnRvZ2dsZUNvbnRpbm91c1NwZWxsQ2hlY2tpbmcoKQorewor
ICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nw
ZWxsQ2hlY2tlci0+dG9nZ2xlQ29udGlub3VzU3BlbGxDaGVja2luZygpOworfQorCitib29sIFRl
eHRDaGVja2VyQ2xpZW50UXQ6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpCit7CisgICAgaWYg
KCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBtX3NwZWxsQ2hlY2tlci0+aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7Cit9CisKK3ZvaWQg
VGV4dENoZWNrZXJDbGllbnRRdDo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkKK3sKKyAgICBpZiAo
IWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zcGVsbENoZWNr
ZXItPnRvZ2dsZUdyYW1tYXJDaGVja2luZygpOworfQorCitib29sIFRleHRDaGVja2VyQ2xpZW50
UXQ6OmxvYWRTcGVsbENoZWNrZXIoKQoreworICAgIGlmIChtX3NwZWxsQ2hlY2tlcikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBRdFBsYXRmb3JtUGx1Z2luIHBsYXRmb3JtUGx1Z2luOwor
ICAgIGlmICgobV9zcGVsbENoZWNrZXIgPSBwbGF0Zm9ybVBsdWdpbi5jcmVhdGVTcGVsbENoZWNr
ZXIoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2Vy
Q2xpZW50UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJD
bGllbnRRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1MzNlNTE1N2Y4NzE4MGUwYjEwM2U3NWRlNGM5MTI2YmJj
MTZmOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1RleHRDaGVja2VyQ2xpZW50UXQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIExpbmRzYXkgTWF0aGllc29uIDxsaW5kc2F5Lm1hdGhpZXNvbkBnbWFpbC5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRGF3aXQgQWxlbWF5ZWh1ICA8YWRhd2l0QGtkZS5vcmc+
CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRDaGVja2Vy
Q2xpZW50UXRfaAorI2RlZmluZSBUZXh0Q2hlY2tlckNsaWVudFF0X2gKKworI2luY2x1ZGUgIlRl
eHRDaGVja2VyQ2xpZW50LmgiCisjaW5jbHVkZSAicXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCisK
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRDaGVja2VyQ2xpZW50UXQgOiBwdWJsaWMg
VGV4dENoZWNrZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3Jk
SW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBsZWFybldv
cmQoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmlu
Zyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50
KiBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RT
dWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7
CisgICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24s
IGludCogYmFkR3JhbW1hckxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JX
b3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3Ry
aW5nPiYgZ3Vlc3Nlcyk7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5n
KFNwZWxsQ2hlY2tlciosIGludCwgVGV4dENoZWNraW5nVHlwZU1hc2ssIGNvbnN0IFN0cmluZyYp
IHsgfQorCisgICAgdmlydHVhbCBib29sIGlzQ29udGlub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ29udGlub3VzU3BlbGxDaGVja2luZygpOworICAg
IAorICAgIHZpcnR1YWwgYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCk7ICAgCisKK3ByaXZhdGU6CisgICAgYm9v
bCBsb2FkU3BlbGxDaGVja2VyKCk7CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFFXZWJTcGVsbENo
ZWNrZXI+IG1fc3BlbGxDaGVja2VyOworfTsKKworfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103842</attachid>
            <date>2011-08-12 16:48:35 -0700</date>
            <delta_ts>2011-08-15 05:15:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44114-20110813094832.patch</filename>
            <type>text/plain</type>
            <size>21702</size>
            <attacher name="Lindsay Mathieson">lindsay.mathieson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI2NzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCAxMGRlOTY3
MWFiY2Q2YTVjMTM0NTg2ZTdiMmVkN2U3NDgwNTMzODk1Li5kMGZhNGNlNzkwN2U5ODgwMjc0ODEz
ZDZlNjc4YWEzNGVkMDkyZTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC05MDAsMTIgKzkwMCwx
MDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBib28KICAgICBkcmF3TGluZShJbnRQb2ludChzdGFy
dFBvaW50LngoKSwgc3RhcnRQb2ludC55KCkpLCBJbnRQb2ludChlbmRQb2ludC54KCksIGVuZFBv
aW50LnkoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hl
Y2tpbmcoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpCisK
Ky8qCisgKiAgIE5PVEU6IFRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IGJhc2VkIHVwb24gdGhlIG9u
ZSBmcm9tCisgKiAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0RyYXdF
cnJvclVuZGVybGluZS57aHxjcHB9CisgKgorICogICBEcmF3cyBhbiBlcnJvciB1bmRlcmxpbmUg
dGhhdCBsb29rcyBsaWtlIG9uZSBvZjoKKyAqCisgKiAgICAgICAgICAgICAgIEggICAgICAgRSAg
ICAgICAgICAgICAgICBICisgKiAgICAgIC9cICAgICAgL1wgICAgICAvXCAgICAgICAgL1wgICAg
ICAvXCAgICAgICAgICAgICAgIC0KKyAqICAgIEEvICBcICAgIC8gIFwgICAgLyAgXCAgICAgQS8g
IFwgICAgLyAgXCAgICAgICAgICAgICAgfAorICogICAgIFwgICBcICAvICAgIFwgIC8gICAvRCAg
ICAgXCAgIFwgIC8gICAgXCAgICAgICAgICAgICB8CisgKiAgICAgIFwgICBcLyAgQyAgIFwvICAg
LyAgICAgICAgXCAgIFwvICAgQyAgXCAgICAgICAgICAgIHwgaGVpZ2h0ID0gaGVpZ2h0U3F1YXJl
cyAqIHNxdWFyZQorICogICAgICAgXCAgICAgIC9cICBGICAgLyAgICAgICAgICBcICBGICAgL1wg
ICBcICAgICAgICAgICB8CisgKiAgICAgICAgXCAgICAvICBcICAgIC8gICAgICAgICAgICBcICAg
IC8gIFwgICBcRyAgICAgICAgIHwKKyAqICAgICAgICAgXCAgLyAgICBcICAvICAgICAgICAgICAg
ICBcICAvICAgIFwgIC8gICAgICAgICAgfAorICogICAgICAgICAgXC8gICAgICBcLyAgICAgICAg
ICAgICAgICBcLyAgICAgIFwvICAgICAgICAgICAtCisgKiAgICAgICAgICBCICAgICAgICAgICAg
ICAgICAgICAgICAgIEIKKyAqICAgICAgICAgIHwtLS18CisgKiAgICAgICAgdW5pdFdpZHRoID0g
KGhlaWdodFNxdWFyZXMgLSAxKSAqIHNxdWFyZQorICoKKyAqICBUaGUgeCwgeSwgd2lkdGgsIGhl
aWdodCBwYXNzZWQgaW4gZ2l2ZSB0aGUgZGVzaXJlZCBib3VuZGluZyBib3g7CisgKiAgeC93aWR0
aCBhcmUgYWRqdXN0ZWQgdG8gbWFrZSB0aGUgdW5kZXJsaW5lIGEgaW50ZWdlciBudW1iZXIgb2Yg
dW5pdHMgd2lkZS4KKyovCitzdGF0aWMgdm9pZCBkcmF3RXJyb3JVbmRlcmxpbmUoUVBhaW50ZXIg
KnBhaW50ZXIsIHFyZWFsIHgsIHFyZWFsIHksIHFyZWFsIHdpZHRoLCBxcmVhbCBoZWlnaHQpCit7
CisgICAgY29uc3QgcXJlYWwgaGVpZ2h0U3F1YXJlcyA9IDIuNTsKKworICAgIHFyZWFsIHNxdWFy
ZSA9IGhlaWdodCAvIGhlaWdodFNxdWFyZXM7CisgICAgcXJlYWwgaGFsZlNxdWFyZSA9IDAuNSAq
IHNxdWFyZTsKKworICAgIHFyZWFsIHVuaXRXaWR0aCA9IChoZWlnaHRTcXVhcmVzIC0gMS4wKSAq
IHNxdWFyZTsKKyAgICBpbnQgd2lkdGhVbml0cyA9IHN0YXRpY19jYXN0PGludD4oKHdpZHRoICsg
MC41ICogdW5pdFdpZHRoKSAvIHVuaXRXaWR0aCk7CisKKyAgICB4ICs9IDAuNSAqICh3aWR0aCAt
IHdpZHRoVW5pdHMgKiB1bml0V2lkdGgpOworICAgIHdpZHRoID0gd2lkdGhVbml0cyAqIHVuaXRX
aWR0aDsKKworICAgIHFyZWFsIGJvdHRvbSA9IHkgKyBoZWlnaHQ7CisgICAgcXJlYWwgdG9wID0g
eTsKKworICAgIFFQYWludGVyUGF0aCBwYXRoOworICAgIC8vIEJvdHRvbSBvZiBzcXVpZ2dsZQor
ICAgIHBhdGgubW92ZVRvKHggLSBoYWxmU3F1YXJlLCB0b3AgKyBoYWxmU3F1YXJlKTsgLy8gQQor
CisgICAgaW50IGkgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aFVuaXRzOyBpICs9IDIp
IHsKKyAgICAgICAgcXJlYWwgbWlkZGxlID0geCArIChpICsgMSkgKiB1bml0V2lkdGg7CisgICAg
ICAgIHFyZWFsIHJpZ2h0ID0geCArIChpICsgMikgKiB1bml0V2lkdGg7CisKKyAgICAgICAgcGF0
aC5saW5lVG8obWlkZGxlLCBib3R0b20pOyAvLyBCCisKKyAgICAgICAgaWYgKGkgKyAyID09IHdp
ZHRoVW5pdHMpCisgICAgICAgICAgICBwYXRoLmxpbmVUbyhyaWdodCArIGhhbGZTcXVhcmUsIHRv
cCArIGhhbGZTcXVhcmUpOyAvLyBECisgICAgICAgIGVsc2UgaWYgKGkgKyAxICE9IHdpZHRoVW5p
dHMpCisgICAgICAgICAgICBwYXRoLmxpbmVUbyhyaWdodCwgdG9wICsgc3F1YXJlKTsgLy8gQwor
ICAgIH0KKworICAgIC8vIFRvcCBvZiBzcXVpZ2dsZQorICAgIGZvciAoaSAtPSAyOyBpID49IDA7
IGkgLT0gMikgeworICAgICAgICBxcmVhbCBsZWZ0ID0geCArIGkgKiB1bml0V2lkdGg7CisgICAg
ICAgIHFyZWFsIG1pZGRsZSA9IHggKyAoaSArIDEpICogdW5pdFdpZHRoOworICAgICAgICBxcmVh
bCByaWdodCA9IHggKyAoaSArIDIpICogdW5pdFdpZHRoOworCisgICAgICAgIGlmIChpICsgMSA9
PSB3aWR0aFVuaXRzKQorICAgICAgICAgICAgcGF0aC5saW5lVG8obWlkZGxlICsgaGFsZlNxdWFy
ZSwgYm90dG9tIC0gaGFsZlNxdWFyZSk7IC8vIEcKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBpZiAoaSArIDIgPT0gd2lkdGhVbml0cykKKyAgICAgICAgICAgICAgICBwYXRoLmxpbmVUbyhy
aWdodCwgdG9wKTsgLy8gRQorCisgICAgICAgICAgICBwYXRoLmxpbmVUbyhtaWRkbGUsIGJvdHRv
bSAtIGhhbGZTcXVhcmUpOyAvLyBGCisgICAgICAgIH0KKworICAgICAgICBwYXRoLmxpbmVUbyhs
ZWZ0LCB0b3ApOyAvLyBICisgICAgfQorCisgICAgcGFpbnRlci0+ZHJhd1BhdGgocGF0aCk7Cit9
CisKKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0
IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBz
dHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFFQYWludGVyKiBwYWludGVyID0gcGxhdGZvcm1D
b250ZXh0KCk7CisgICAgY29uc3QgUVBlbiBvcmlnaW5hbFBlbiA9IHBhaW50ZXItPnBlbigpOwor
CisgICAgc3dpdGNoIChzdHlsZSkgeworICAgIGNhc2UgVGV4dENoZWNraW5nU3BlbGxpbmdMaW5l
U3R5bGU6CisgICAgICAgIHBhaW50ZXItPnNldFBlbihRdDo6cmVkKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlOgorICAgICAgICBwYWludGVy
LT5zZXRQZW4oUXQ6OmdyZWVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcGFpbnRlci0+c2V0UGVuKG9yaWdpbmFsUGVuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGRyYXdFcnJvclVuZGVybGluZShwYWludGVyLCBvcmlnaW4ueCgpLCBvcmlnaW4ueSgp
LCB3aWR0aCwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcyk7CisgICAgcGFpbnRlci0+c2V0UGVu
KG9yaWdpbmFsUGVuKTsKIH0KIAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0LCBSb3VuZGluZ01vZGUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaCBiL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCmluZGV4IDFmNjI4MDQ1YmI0
Mjk5MzI2ZjdhMTQ4OWYxNmFkMmJkMmYxMmU4NDAuLmUzMmQwZGFmMjlmNmNjYzU2YzAzODFjNGNk
MzE3Y2I2MjE2ODgxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJraXRw
bGF0Zm9ybXBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9y
bXBsdWdpbi5oCkBAIC0yMSw2ICsyMSw4IEBACiAjaWZuZGVmIFFXRUJLSVRQTEFURk9STVBMVUdJ
Tl9ICiAjZGVmaW5lIFFXRUJLSVRQTEFURk9STVBMVUdJTl9ICiAKKyNpbmNsdWRlICJxd2Via2l0
Z2xvYmFsLmgiCisKIC8qCiAgKiAgV2FybmluZzogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBp
cyBub3QgIHBhcnQgb2YgdGhlIHB1YmxpYyBRdFdlYktpdCBBUEkKICAqICBhbmQgbWF5IGJlIGNo
YW5nZWQgZnJvbSB2ZXJzaW9uIHRvIHZlcnNpb24gb3IgZXZlbiBiZSBjb21wbGV0ZWx5IHJlbW92
ZWQuCkBAIC0xMzQsNiArMTM2LDMyIEBAIHB1YmxpYyBRX1NMT1RTOgogfTsKICNlbmRpZgogCitj
bGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViU3BlbGxDaGVja2VyR3JhbW1hckRldGFpbCB7CitwdWJs
aWM6CisgICAgaW50IGxvY2F0aW9uOworICAgIGludCBsZW5ndGg7CisgICAgUVN0cmluZ0xpc3Qg
Z3Vlc3NlczsKKyAgICBRU3RyaW5nIHVzZXJEZXNjcmlwdGlvbjsKK307CisKK2NsYXNzIFFXRUJL
SVRfRVhQT1JUIFFXZWJTcGVsbENoZWNrZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpF
Q1QKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250aW5vdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ29udGlub3VzU3BlbGxD
aGVja2luZygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgUVN0cmlu
ZyYgd29yZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50
KGNvbnN0IFFTdHJpbmcmIHdvcmQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGlu
Z09mU3RyaW5nKGNvbnN0IFFTdHJpbmcmIHdvcmQsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwg
aW50KiBtaXNzcGVsbGluZ0xlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgUVN0cmluZyBhdXRvQ29y
cmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBRU3RyaW5nJiB3b3JkKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGd1ZXNzZXNGb3JXb3JkKGNvbnN0IFFTdHJpbmcmIHdvcmQsIGNv
bnN0IFFTdHJpbmcmIGNvbnRleHQsIFFTdHJpbmdMaXN0JiBndWVzc2VzKSA9IDA7CisgICAgCisg
ICAgdmlydHVhbCBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
aGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBRU3RyaW5nJiwgUVZlY3RvcjxRV2ViU3BlbGxDaGVj
a2VyR3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFt
bWFyTGVuZ3RoKSA9IDA7CisgICAgCit9OworCiBjbGFzcyBRV2ViS2l0UGxhdGZvcm1QbHVnaW4g
ewogcHVibGljOgogICAgIHZpcnR1YWwgflFXZWJLaXRQbGF0Zm9ybVBsdWdpbigpIHt9CkBAIC0x
NDMsNyArMTcxLDggQEAgcHVibGljOgogICAgICAgICBOb3RpZmljYXRpb25zLAogICAgICAgICBI
YXB0aWNzLAogICAgICAgICBUb3VjaEludGVyYWN0aW9uLAotICAgICAgICBGdWxsU2NyZWVuVmlk
ZW9QbGF5ZXIKKyAgICAgICAgRnVsbFNjcmVlblZpZGVvUGxheWVyLAorICAgICAgICBTcGVsbENo
ZWNrZXIKICAgICB9OwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVu
c2lvbikgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5w
cm8gYi9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybwppbmRleCAzYzU4MDg5MWU1YzFlMWNl
Njk2NjM4OTg4Mjg2MzNjMGNjNjhhNTI0Li4wNGQ2MDQ2OWM1ZTBlNDQxNzUxNDJiOTAwZTVmMTE5
YzkwNjI4N2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybworKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybwpAQCAtMTk0LDcgKzE5NCw4IEBAIFNPVVJD
RVMgKz0gXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcCBcCiAgICAg
JCRQV0QvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAgXAogICAgICQkUFdEL1dl
YkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVwTWVudVF0LmNwcCBcCi0gICAgJCRQV0QvV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgXAorICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1Rl
eHRDaGVja2VyQ2xpZW50UXQuY3BwCiAKIEhFQURFUlMgKz0gXAogICAgICQkV0VCS0lUX0FQSV9I
RUFERVJTIFwKQEAgLTIxMCw3ICsyMTEsOCBAQCBIRUFERVJTICs9IFwKICAgICAkJFBXRC9XZWJD
b3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmggXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0
L1BvcHVwTWVudVF0LmggXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVwTWVu
dVF0LmggXAotICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5o
CisgICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggXAorICAg
ICQkUFdEL1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuaAogCiB3ZWJraXQyIHsK
ICAgICBIRUFERVJTICs9ICQkV0VCS0lUMl9BUElfSEVBREVSUwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAppbmRleCA3MzIxMGYwZmRl
MTY2NWZjNzljODM2ZWU4YmNlNTQzMmUyN2Y5YzVkLi4xNGJiNmU2NTc0Njg0NDU5YjU5NzA3MTE1
N2I4ZDgzZmJmMGVlZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFF0LmNwcApAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgPHN0ZGlv
Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCi0jZGVmaW5lIG1ldGhvZERlYnVnKCkgcURl
YnVnKCJFZGl0b3JDbGllbnRRdDogJXMiLCBfX0ZVTkNUSU9OX18pOwogCiBzdGF0aWMgUVN0cmlu
ZyBkdW1wUGF0aChXZWJDb3JlOjpOb2RlICpub2RlKQogewpAQCAtMTA5LDEyICsxMDgsMTIgQEAg
Ym9vbCBFZGl0b3JDbGllbnRRdDo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShIVE1MRWxlbWVu
dCogZWxlbWVudCkKIAogYm9vbCBFZGl0b3JDbGllbnRRdDo6aXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV90ZXh0Q2hl
Y2tlckNsaWVudC5pc0NvbnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiB9CiAKIGJvb2wg
RWRpdG9yQ2xpZW50UXQ6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBtX3RleHRDaGVja2VyQ2xpZW50LmlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZCgpOwogfQogCiBpbnQgRWRpdG9yQ2xpZW50UXQ6OnNwZWxsQ2hlY2tlckRvY3VtZW50
VGFnKCkKQEAgLTM0NCwxMiArMzQzLDEyIEBAIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmlzU2VsZWN0
VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpCiAKIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnRvZ2ds
ZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IG1fdGV4dENoZWNrZXJDbGllbnQudG9nZ2xlQ29udGlub3VzU3BlbGxDaGVja2luZygpOwogfQog
CiB2b2lkIEVkaXRvckNsaWVudFF0Ojp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXJDbGllbnQudG9nZ2xlR3Jh
bW1hckNoZWNraW5nKCk7CiB9CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBDdHJsS2V5ID0gMSA8
PCAwOwpAQCAtNTY3LDMyICs1NjYsNiBAQCB2b2lkIEVkaXRvckNsaWVudFF0Ojp0ZXh0RGlkQ2hh
bmdlSW5UZXh0QXJlYShFbGVtZW50KikKIHsKIH0KIAotdm9pZCBFZGl0b3JDbGllbnRRdDo6aWdu
b3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50UXQ6OmxlYXJuV29yZChjb25zdCBTdHJpbmcm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50UXQ6OmNo
ZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgaW50KiwgaW50KikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1TdHJpbmcgRWRpdG9yQ2xpZW50UXQ6OmdldEF1dG9D
b3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgRWRpdG9y
Q2xpZW50UXQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBWZWN0b3I8
R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
Zyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwpAQCAtNjE0LDExICs1ODcsNiBAQCBib29sIEVkaXRvckNsaWVudFF0OjpzcGVsbGlu
Z1VJSXNTaG93aW5nKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRWRpdG9yQ2xpZW50
UXQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBj
b250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCiBib29sIEVkaXRvckNsaWVudFF0Ojppc0VkaXRpbmcoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2VkaXRpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudFF0LmgKaW5kZXggZWNjYjc1ZGQwYTY4ODBkNzlkNDFkOGFkOTgwMWNmNDI3NTQ4
MzAyYS4uZDk2NThiYjcyMjQyYzA0NjVkOWQ2MjllZDRlNjAzODg1ZWY0Y2E4NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaApAQCAtMzEs
MTYgKzMxLDE1IEBACiAjZGVmaW5lIEVkaXRvckNsaWVudFF0X2gKIAogI2luY2x1ZGUgIkVkaXRv
ckNsaWVudC5oIgotI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVm
Q291bnRlZC5oIgotCisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnRRdC5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAKIGNsYXNzIFFXZWJQYWdlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEVkaXRvckNsaWVudFF0IDogcHVibGljIEVkaXRvckNsaWVudCwgcHVibGljIFRl
eHRDaGVja2VyQ2xpZW50IHsKK2NsYXNzIEVkaXRvckNsaWVudFF0IDogcHVibGljIEVkaXRvckNs
aWVudCB7CiBwdWJsaWM6CiAgICAgRWRpdG9yQ2xpZW50UXQoUVdlYlBhZ2UqIHBhZ2UpOwogICAg
IApAQCAtOTcsMjAgKzk2LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdGV4dFdpbGxC
ZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHRleHREaWRD
aGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3Jk
SW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBsZWFybldv
cmQoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmlu
Zyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50
KiBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RT
dWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7
Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24s
IGludCogYmFkR3JhbW1hckxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJik7
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29u
c3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdyk7
CiAgICAgdmlydHVhbCBib29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNv
bnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNl
dElucHV0TWV0aG9kU3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0
ZShib29sIGVuYWJsZWQpOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhTcGVsbENoZWNrZXIqLCBpbnQsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrLCBjb25z
dCBTdHJpbmcmKSB7fQotICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2Vy
KCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRleHRD
aGVja2VyKCkgeyByZXR1cm4gJm1fdGV4dENoZWNrZXJDbGllbnQ7IH0KIAogICAgIGJvb2wgaXNF
ZGl0aW5nKCkgY29uc3Q7CiAKQEAgLTExOCw2ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgYWNjZXB0c0VkaXRpbmc7CiAKIHByaXZhdGU6CisgICAgVGV4dENoZWNrZXJDbGllbnRR
dCBtX3RleHRDaGVja2VyQ2xpZW50OwogICAgIFFXZWJQYWdlKiBtX3BhZ2U7CiAgICAgYm9vbCBt
X2VkaXRpbmc7CiAgICAgYm9vbCBtX2luVW5kb1JlZG87IC8vIG91ciB1bmRvIHN0YWNrIHdvcmtz
IGRpZmZlcmVudGx5IC0gZG9uJ3QgcmUtZW50ZXIhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcAppbmRleCAyZTQ0YzY2OTMzZGU2
YmEzYTY4OTc3NjAxZTE4OTkwZDJkYmU2MDkwLi43ZDg2ODhiOTU5ZWNjN2IzYjEwZWJjNTkwM2Zi
YWNkNGI1YzJiNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1F0UGxhdGZvcm1QbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKQEAgLTEzNCw0ICsxMzQsMTAgQEAgUGFzc093blB0cjxR
V2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcj4gUXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlRnVsbFNj
cmVlblZpZGVvSGEKIH0KICNlbmRpZgogCitQYXNzT3duUHRyPFFXZWJTcGVsbENoZWNrZXI+IFF0
UGxhdGZvcm1QbHVnaW46OmNyZWF0ZVNwZWxsQ2hlY2tlcigpCit7CisgICAgUVdlYktpdFBsYXRm
b3JtUGx1Z2luKiBwID0gcGx1Z2luKCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKHAgPyBzdGF0aWNf
Y2FzdDxRV2ViU3BlbGxDaGVja2VyKj4ocC0+Y3JlYXRlRXh0ZW5zaW9uKFFXZWJLaXRQbGF0Zm9y
bVBsdWdpbjo6U3BlbGxDaGVja2VyKSkgOiAwKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmggYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaAppbmRleCAzMTZiOGU4ZGJk
ZjY5ZTQ3MDVkZWNiNWM4MTc0NzU5MzcyMTMxNTY4Li45ZjhhNzYwYjgyYTlkYTJkOTk5YjZhM2E0
YWM4ZDJiNjgzNzU5NmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1F0UGxhdGZvcm1QbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1F0UGxhdGZvcm1QbHVnaW4uaApAQCAtMzMsNiArMzMsNyBAQCBjbGFzcyBRV2ViVG91Y2hN
b2RpZmllcjsKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShRVF9NVUxUSU1FRElBKQogY2xhc3Mg
UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI7CiAjZW5kaWYKK2NsYXNzIFFXZWJTcGVsbENoZWNr
ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTMsNiArNTQsNyBAQCBwdWJsaWM6CiAj
aWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoUVRfTVVMVElNRURJQSkKICAgICBQYXNzT3duUHRyPFFX
ZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyPiBjcmVhdGVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7
CiAjZW5kaWYKKyAgICBQYXNzT3duUHRyPFFXZWJTcGVsbENoZWNrZXI+IGNyZWF0ZVNwZWxsQ2hl
Y2tlcigpOwogCiAgICAgUVdlYktpdFBsYXRmb3JtUGx1Z2luKiBwbHVnaW4oKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRR
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjUxNDU4YTkwN2Q2NDMxNDMyZmQ2YjUxMjZjYjYzZjc5NzdjZmQy
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4
dENoZWNrZXJDbGllbnRRdC5jcHAKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgTGluZHNheSBNYXRoaWVzb24gPGxpbmRzYXkubWF0aGllc29uQGdtYWlsLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBEYXdpdCBBbGVtYXllaHUgIDxhZGF3aXRAa2RlLm9yZz4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudFF0LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlF0UGxhdGZvcm1QbHVnaW4uaCIKKworI2luY2x1ZGUgPFFTdHJp
bmdMaXN0PgorI2luY2x1ZGUgPFFWZWN0b3I+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFRleHRDaGVja2VyQ2xpZW50UXQ6
Omlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB3b3JkKQoreworICAgIGlm
ICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NwZWxsQ2hl
Y2tlci0+aWdub3JlV29yZEluU3BlbGxEb2N1bWVudCh3b3JkKTsKK30KKwordm9pZCBUZXh0Q2hl
Y2tlckNsaWVudFF0OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQoreworICAgIGlmICgh
bG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NwZWxsQ2hlY2tl
ci0+bGVhcm5Xb3JkKHdvcmQpOworfQorCitTdHJpbmcgVGV4dENoZWNrZXJDbGllbnRRdDo6Z2V0
QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNz
cGVsbGVkV29yZCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIG1fc3BlbGxDaGVja2VyLT5hdXRvQ29ycmVjdFN1
Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7Cit9CisKK3ZvaWQgVGV4
dENoZWNrZXJDbGllbnRRdDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiBidWZm
ZXIsIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGlu
Z0xlbmd0aCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29uc3QgUVN0cmluZyB0ZXh0ID0gUVN0cmluZzo6ZnJvbVJhd0RhdGEocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGJ1ZmZlciksIGxlbmd0aCk7CisgICAgbV9zcGVsbENo
ZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0ZXh0LCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBt
aXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRRdDo6Y2hlY2tH
cmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCwgVmVjdG9yPEdy
YW1tYXJEZXRhaWw+JiBkZXRhaWxzLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRH
cmFtbWFyTGVuZ3RoKQoreworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBRU3RyaW5nIHRleHQgPSBRU3RyaW5nOjpmcm9tUmF3RGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oYnVmZmVyKSwgbGVuZ3RoKTsKKyAgICAKKyAg
ICAKKyAgICAvLyBEbyBHcmFtbWVyIENoZWNrCisgICAgUVZlY3RvcjxRV2ViU3BlbGxDaGVja2Vy
R3JhbW1hckRldGFpbD4gIHFXZWJEZXRhaWxzOworICAgIG1fc3BlbGxDaGVja2VyLT5jaGVja0dy
YW1tYXJPZlN0cmluZyh0ZXh0LCBxV2ViRGV0YWlscywgYmFkR3JhbW1hckxvY2F0aW9uLCBiYWRH
cmFtbWFyTGVuZ3RoKTsKKyAgICAKKyAgICAvLyBjb3B5IHFXZWJEZXRhaWxzIHRvIGRldGFpbHMK
KyAgICBkZXRhaWxzLmNsZWFyKCk7CisgICAgUVZlY3RvcjxRV2ViU3BlbGxDaGVja2VyR3JhbW1h
ckRldGFpbD46Oml0ZXJhdG9yIGl0ID0gcVdlYkRldGFpbHMuYmVnaW4oKTsKKyAgICB3aGlsZSAo
aXQgPCBxV2ViRGV0YWlscy5lbmQoKSkKKyAgICB7CisgICAgICAgIEdyYW1tYXJEZXRhaWwgZ2Q7
CisgICAgICAgIGdkLmxvY2F0aW9uID0gaXQtPmxvY2F0aW9uOworICAgICAgICBnZC5sZW5ndGgg
PSBpdC0+bGVuZ3RoOworICAgICAgICBRU3RyaW5nTGlzdDo6aXRlcmF0b3Igc2l0ID0gaXQtPmd1
ZXNzZXMuYmVnaW4oKTsKKyAgICAgICAgd2hpbGUgKHNpdCA8IGl0LT5ndWVzc2VzLmVuZCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBnZC5ndWVzc2VzLmFwcGVuZCgqc2l0KTsKKyAgICAgICAg
ICAgIHNpdCsrOworICAgICAgICB9CisgICAgICAgIGdkLnVzZXJEZXNjcmlwdGlvbiA9IGl0LT51
c2VyRGVzY3JpcHRpb247CisgICAgICAgIGRldGFpbHMuYXBwZW5kKGdkKTsKKworICAgICAgICBp
dCsrOworICAgIH0KK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudFF0OjpnZXRHdWVzc2VzRm9y
V29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0
cmluZz4mIGd1ZXNzZXMpCit7CisgICAgaWYgKCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFFTdHJpbmdMaXN0IGd1ZXNzZXNMaXN0OworICAgIG1fc3BlbGxDaGVj
a2VyLT5ndWVzc2VzRm9yV29yZCh3b3JkLCBjb250ZXh0LCBndWVzc2VzTGlzdCk7CisgICAgY29u
c3QgaW50IGNvdW50ID0gZ3Vlc3Nlc0xpc3QuY291bnQoKTsKKyAgICBndWVzc2VzLnJlc2l6ZShj
b3VudCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBndWVz
c2VzLmFwcGVuZChndWVzc2VzTGlzdC5hdChpKSk7Cit9CisKK2Jvb2wgVGV4dENoZWNrZXJDbGll
bnRRdDo6aXNDb250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCit7CisgICAgaWYgKCFsb2Fk
U3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX3Nw
ZWxsQ2hlY2tlci0+aXNDb250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworfQorCit2b2lk
IFRleHRDaGVja2VyQ2xpZW50UXQ6OnRvZ2dsZUNvbnRpbm91c1NwZWxsQ2hlY2tpbmcoKQorewor
ICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nw
ZWxsQ2hlY2tlci0+dG9nZ2xlQ29udGlub3VzU3BlbGxDaGVja2luZygpOworfQorCitib29sIFRl
eHRDaGVja2VyQ2xpZW50UXQ6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpCit7CisgICAgaWYg
KCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBtX3NwZWxsQ2hlY2tlci0+aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7Cit9CisKK3ZvaWQg
VGV4dENoZWNrZXJDbGllbnRRdDo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkKK3sKKyAgICBpZiAo
IWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zcGVsbENoZWNr
ZXItPnRvZ2dsZUdyYW1tYXJDaGVja2luZygpOworfQorCitib29sIFRleHRDaGVja2VyQ2xpZW50
UXQ6OmxvYWRTcGVsbENoZWNrZXIoKQoreworICAgIGlmIChtX3NwZWxsQ2hlY2tlcikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBRdFBsYXRmb3JtUGx1Z2luIHBsYXRmb3JtUGx1Z2luOwor
ICAgIGlmICgobV9zcGVsbENoZWNrZXIgPSBwbGF0Zm9ybVBsdWdpbi5jcmVhdGVTcGVsbENoZWNr
ZXIoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2Vy
Q2xpZW50UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJD
bGllbnRRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1MzNlNTE1N2Y4NzE4MGUwYjEwM2U3NWRlNGM5MTI2YmJj
MTZmOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1RleHRDaGVja2VyQ2xpZW50UXQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIExpbmRzYXkgTWF0aGllc29uIDxsaW5kc2F5Lm1hdGhpZXNvbkBnbWFpbC5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRGF3aXQgQWxlbWF5ZWh1ICA8YWRhd2l0QGtkZS5vcmc+
CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRDaGVja2Vy
Q2xpZW50UXRfaAorI2RlZmluZSBUZXh0Q2hlY2tlckNsaWVudFF0X2gKKworI2luY2x1ZGUgIlRl
eHRDaGVja2VyQ2xpZW50LmgiCisjaW5jbHVkZSAicXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgiCisK
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRDaGVja2VyQ2xpZW50UXQgOiBwdWJsaWMg
VGV4dENoZWNrZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3Jk
SW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBsZWFybldv
cmQoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmlu
Zyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50
KiBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RT
dWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7
CisgICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24s
IGludCogYmFkR3JhbW1hckxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JX
b3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3Ry
aW5nPiYgZ3Vlc3Nlcyk7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5n
KFNwZWxsQ2hlY2tlciosIGludCwgVGV4dENoZWNraW5nVHlwZU1hc2ssIGNvbnN0IFN0cmluZyYp
IHsgfQorCisgICAgdmlydHVhbCBib29sIGlzQ29udGlub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ29udGlub3VzU3BlbGxDaGVja2luZygpOworICAg
IAorICAgIHZpcnR1YWwgYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCk7ICAgCisKK3ByaXZhdGU6CisgICAgYm9v
bCBsb2FkU3BlbGxDaGVja2VyKCk7CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFFXZWJTcGVsbENo
ZWNrZXI+IG1fc3BlbGxDaGVja2VyOworfTsKKworfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103905</attachid>
            <date>2011-08-15 05:15:53 -0700</date>
            <delta_ts>2011-08-15 20:02:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44114-20110815221551.patch</filename>
            <type>text/plain</type>
            <size>27329</size>
            <attacher name="Lindsay Mathieson">lindsay.mathieson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI2NzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjM2JjOWJjZDIwNzA5Nzlh
NzM4OWY1MDllM2EzZTlkNmYxOTczY2IyLi45MGUzOGNhOTMxM2JhN2FlOTRhMzJhMTYzYWFkNTY3
MGQ3YzU0MzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTAtMDgtMTIgIExpbmRz
YXkgTWF0aGllc29uICA8bGluZHNheS5tYXRoaWVzb25AZ21haWwuY29tPgorCisgICAgICAgIFtR
dF0gTWlzc2luZyBzcGVsbCBjaGVjayBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDExNAorICAgICAgICBGaXhlZCBzdHlsZSBmYWlsdXJl
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0Vycm9yVW5kZXJsaW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tp
bmcpOgorCisyMDExLTA4LTEyICBMaW5kc2F5IE1hdGhpZXNvbiAgPGxpbmRzYXkubWF0aGllc29u
QGdtYWlsLmNvbT4gYW5kIERhd2l0IEFsZW1heWVodSAgIDxhZGF3aXRAa2RlLm9yZz4KKworICAg
ICAgICBbUXRdIE1pc3Npbmcgc3BlbGwgY2hlY2sgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxMTQKKyAgICAgICAgSW1wbGVtZW50cyBw
bGF0Zm9ybSBwbHVnaW4gIGFwaSBmb3Igc3BlbGwgYW5kIGdyYW1tYXIgY2hlY2tpbmcsCisgICAg
ICAgIGRyYXdzIGVycm9yIGxpbmVzIGZvciBzYW1lLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZHJhd0Vycm9yVW5kZXJsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOgorCiAyMDExLTA4LTA5ICBWc2V2b2xv
ZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IEFkZCAiUmVmcmVzaCIgdG8gY29udGV4dCBtZW51IG9mIHJlc291cmNlcyBwYW5lbCBjb29raWVz
IHZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXggMTBkZTk2NzFhYmNkNmE1YzEzNDU4NmU3YjJl
ZDdlNzQ4MDUzMzg5NS4uOTM4M2UzMDEzZmRmNmY1MDlhY2M5OTU0OTRiNmY5OTc2NDAyMTU4MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dFF0LmNwcApAQCAtOTAwLDEyICs5MDAsMTA1IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3
aWR0aCwgYm9vCiAgICAgZHJhd0xpbmUoSW50UG9pbnQoc3RhcnRQb2ludC54KCksIHN0YXJ0UG9p
bnQueSgpKSwgSW50UG9pbnQoZW5kUG9pbnQueCgpLCBlbmRQb2ludC55KCkpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9p
bnQmLCBmbG9hdCwgVGV4dENoZWNraW5nTGluZVN0eWxlKQorCisvKgorICogICBOT1RFOiBUaGlz
IGNvZGUgaXMgY29tcGxldGVseSBiYXNlZCB1cG9uIHRoZSBvbmUgZnJvbQorICogICBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9EcmF3RXJyb3JVbmRlcmxpbmUue2h8Y3Bw
fQorICoKKyAqICAgRHJhd3MgYW4gZXJyb3IgdW5kZXJsaW5lIHRoYXQgbG9va3MgbGlrZSBvbmUg
b2Y6CisgKgorICogICAgICAgICAgICAgICBIICAgICAgIEUgICAgICAgICAgICAgICAgSAorICog
ICAgICAvXCAgICAgIC9cICAgICAgL1wgICAgICAgIC9cICAgICAgL1wgICAgICAgICAgICAgICAt
CisgKiAgICBBLyAgXCAgICAvICBcICAgIC8gIFwgICAgIEEvICBcICAgIC8gIFwgICAgICAgICAg
ICAgIHwKKyAqICAgICBcICAgXCAgLyAgICBcICAvICAgL0QgICAgIFwgICBcICAvICAgIFwgICAg
ICAgICAgICAgfAorICogICAgICBcICAgXC8gIEMgICBcLyAgIC8gICAgICAgIFwgICBcLyAgIEMg
IFwgICAgICAgICAgICB8IGhlaWdodCA9IGhlaWdodFNxdWFyZXMgKiBzcXVhcmUKKyAqICAgICAg
IFwgICAgICAvXCAgRiAgIC8gICAgICAgICAgXCAgRiAgIC9cICAgXCAgICAgICAgICAgfAorICog
ICAgICAgIFwgICAgLyAgXCAgICAvICAgICAgICAgICAgXCAgICAvICBcICAgXEcgICAgICAgICB8
CisgKiAgICAgICAgIFwgIC8gICAgXCAgLyAgICAgICAgICAgICAgXCAgLyAgICBcICAvICAgICAg
ICAgIHwKKyAqICAgICAgICAgIFwvICAgICAgXC8gICAgICAgICAgICAgICAgXC8gICAgICBcLyAg
ICAgICAgICAgLQorICogICAgICAgICAgQiAgICAgICAgICAgICAgICAgICAgICAgICBCCisgKiAg
ICAgICAgICB8LS0tfAorICogICAgICAgIHVuaXRXaWR0aCA9IChoZWlnaHRTcXVhcmVzIC0gMSkg
KiBzcXVhcmUKKyAqCisgKiAgVGhlIHgsIHksIHdpZHRoLCBoZWlnaHQgcGFzc2VkIGluIGdpdmUg
dGhlIGRlc2lyZWQgYm91bmRpbmcgYm94OworICogIHgvd2lkdGggYXJlIGFkanVzdGVkIHRvIG1h
a2UgdGhlIHVuZGVybGluZSBhIGludGVnZXIgbnVtYmVyIG9mIHVuaXRzIHdpZGUuCisqLworc3Rh
dGljIHZvaWQgZHJhd0Vycm9yVW5kZXJsaW5lKFFQYWludGVyICpwYWludGVyLCBxcmVhbCB4LCBx
cmVhbCB5LCBxcmVhbCB3aWR0aCwgcXJlYWwgaGVpZ2h0KQoreworICAgIGNvbnN0IHFyZWFsIGhl
aWdodFNxdWFyZXMgPSAyLjU7CisKKyAgICBxcmVhbCBzcXVhcmUgPSBoZWlnaHQgLyBoZWlnaHRT
cXVhcmVzOworICAgIHFyZWFsIGhhbGZTcXVhcmUgPSAwLjUgKiBzcXVhcmU7CisKKyAgICBxcmVh
bCB1bml0V2lkdGggPSAoaGVpZ2h0U3F1YXJlcyAtIDEuMCkgKiBzcXVhcmU7CisgICAgaW50IHdp
ZHRoVW5pdHMgPSBzdGF0aWNfY2FzdDxpbnQ+KCh3aWR0aCArIDAuNSAqIHVuaXRXaWR0aCkgLyB1
bml0V2lkdGgpOworCisgICAgeCArPSAwLjUgKiAod2lkdGggLSB3aWR0aFVuaXRzICogdW5pdFdp
ZHRoKTsKKyAgICB3aWR0aCA9IHdpZHRoVW5pdHMgKiB1bml0V2lkdGg7CisKKyAgICBxcmVhbCBi
b3R0b20gPSB5ICsgaGVpZ2h0OworICAgIHFyZWFsIHRvcCA9IHk7CisKKyAgICBRUGFpbnRlclBh
dGggcGF0aDsKKyAgICAvLyBCb3R0b20gb2Ygc3F1aWdnbGUKKyAgICBwYXRoLm1vdmVUbyh4IC0g
aGFsZlNxdWFyZSwgdG9wICsgaGFsZlNxdWFyZSk7IC8vIEEKKworICAgIGludCBpID0gMDsKKyAg
ICBmb3IgKGkgPSAwOyBpIDwgd2lkdGhVbml0czsgaSArPSAyKSB7CisgICAgICAgIHFyZWFsIG1p
ZGRsZSA9IHggKyAoaSArIDEpICogdW5pdFdpZHRoOworICAgICAgICBxcmVhbCByaWdodCA9IHgg
KyAoaSArIDIpICogdW5pdFdpZHRoOworCisgICAgICAgIHBhdGgubGluZVRvKG1pZGRsZSwgYm90
dG9tKTsgLy8gQgorCisgICAgICAgIGlmIChpICsgMiA9PSB3aWR0aFVuaXRzKQorICAgICAgICAg
ICAgcGF0aC5saW5lVG8ocmlnaHQgKyBoYWxmU3F1YXJlLCB0b3AgKyBoYWxmU3F1YXJlKTsgLy8g
RAorICAgICAgICBlbHNlIGlmIChpICsgMSAhPSB3aWR0aFVuaXRzKQorICAgICAgICAgICAgcGF0
aC5saW5lVG8ocmlnaHQsIHRvcCArIHNxdWFyZSk7IC8vIEMKKyAgICB9CisKKyAgICAvLyBUb3Ag
b2Ygc3F1aWdnbGUKKyAgICBmb3IgKGkgLT0gMjsgaSA+PSAwOyBpIC09IDIpIHsKKyAgICAgICAg
cXJlYWwgbGVmdCA9IHggKyBpICogdW5pdFdpZHRoOworICAgICAgICBxcmVhbCBtaWRkbGUgPSB4
ICsgKGkgKyAxKSAqIHVuaXRXaWR0aDsKKyAgICAgICAgcXJlYWwgcmlnaHQgPSB4ICsgKGkgKyAy
KSAqIHVuaXRXaWR0aDsKKworICAgICAgICBpZiAoaSArIDEgPT0gd2lkdGhVbml0cykKKyAgICAg
ICAgICAgIHBhdGgubGluZVRvKG1pZGRsZSArIGhhbGZTcXVhcmUsIGJvdHRvbSAtIGhhbGZTcXVh
cmUpOyAvLyBHCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGkgKyAyID09IHdpZHRo
VW5pdHMpCisgICAgICAgICAgICAgICAgcGF0aC5saW5lVG8ocmlnaHQsIHRvcCk7IC8vIEUKKwor
ICAgICAgICAgICAgcGF0aC5saW5lVG8obWlkZGxlLCBib3R0b20gLSBoYWxmU3F1YXJlKTsgLy8g
RgorICAgICAgICB9CisKKyAgICAgICAgcGF0aC5saW5lVG8obGVmdCwgdG9wKTsgLy8gSAorICAg
IH0KKworICAgIHBhaW50ZXItPmRyYXdQYXRoKHBhdGgpOworfQorCisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4s
IGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBRUGFpbnRlciogcGFpbnRlciA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIGNvbnN0
IFFQZW4gb3JpZ2luYWxQZW4gPSBwYWludGVyLT5wZW4oKTsKKworICAgIHN3aXRjaCAoc3R5bGUp
IHsKKyAgICBjYXNlIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0eWxlOgorICAgICAgICBwYWlu
dGVyLT5zZXRQZW4oUXQ6OnJlZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dENoZWNr
aW5nR3JhbW1hckxpbmVTdHlsZToKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKFF0OjpncmVlbik7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBkcmF3RXJyb3JVbmRlcmxpbmUocGFpbnRlciwgb3JpZ2luLngoKSwgb3JpZ2luLnkoKSwg
d2lkdGgsIGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3MpOworICAgIHBhaW50ZXItPnNldFBlbihv
cmlnaW5hbFBlbik7CiB9CiAKIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZp
Y2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBmcmVjdCwgUm91bmRpbmdNb2RlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmggYi9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAppbmRleCAxZjYyODA0NWJiNDI5
OTMyNmY3YTE0ODlmMTZhZDJiZDJmMTJlODQwLi40ZDU1MDI4OGE2NWY3ODhkM2FlYjM1NTYxNGZh
MWQ0MGU2NzkyZDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxh
dGZvcm1wbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1w
bHVnaW4uaApAQCAtMjEsNiArMjEsOCBAQAogI2lmbmRlZiBRV0VCS0lUUExBVEZPUk1QTFVHSU5f
SAogI2RlZmluZSBRV0VCS0lUUExBVEZPUk1QTFVHSU5fSAogCisjaW5jbHVkZSAicXdlYmtpdGds
b2JhbC5oIgorCiAvKgogICogIFdhcm5pbmc6IFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgaXMg
bm90ICBwYXJ0IG9mIHRoZSBwdWJsaWMgUXRXZWJLaXQgQVBJCiAgKiAgYW5kIG1heSBiZSBjaGFu
Z2VkIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uIG9yIGV2ZW4gYmUgY29tcGxldGVseSByZW1vdmVk
LgpAQCAtMTM0LDYgKzEzNiwzOCBAQCBwdWJsaWMgUV9TTE9UUzoKIH07CiAjZW5kaWYKIAorY2xh
c3MgUVdFQktJVF9FWFBPUlQgUVdlYlNwZWxsQ2hlY2tlckdyYW1tYXJEZXRhaWwgeworcHVibGlj
OgorICAgIGludCBsb2NhdGlvbjsKKyAgICBpbnQgbGVuZ3RoOworICAgIFFTdHJpbmdMaXN0IGd1
ZXNzZXM7CisgICAgUVN0cmluZyB1c2VyRGVzY3JpcHRpb247Cit9OworCitjbGFzcyBRV0VCS0lU
X0VYUE9SVCBRV2ViU3BlbGxDaGVja2VyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNU
CitwdWJsaWM6CisgICAgc3RydWN0IEdyYW1tYXJEZXRhaWwgeworICAgICAgICBpbnQgbG9jYXRp
b247CisgICAgICAgIGludCBsZW5ndGg7CisgICAgICAgIFFTdHJpbmdMaXN0IGd1ZXNzZXM7Cisg
ICAgICAgIFFTdHJpbmcgdXNlckRlc2NyaXB0aW9uOworICAgIH07CisgICAgCisgICAgdmlydHVh
bCBib29sIGlzQ29udGlub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHRvZ2dsZUNvbnRpbm91c1NwZWxsQ2hlY2tpbmcoKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFFTdHJpbmcmIHdvcmQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBRU3RyaW5nJiB3b3JkKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBRU3RyaW5n
JiB3b3JkLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgp
ID0gMDsKKyAgICB2aXJ0dWFsIFFTdHJpbmcgYXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3Bl
bGxlZFdvcmQoY29uc3QgUVN0cmluZyYgd29yZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBndWVz
c2VzRm9yV29yZChjb25zdCBRU3RyaW5nJiB3b3JkLCBjb25zdCBRU3RyaW5nJiBjb250ZXh0LCBR
U3RyaW5nTGlzdCYgZ3Vlc3NlcykgPSAwOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRvZ2dsZUdyYW1tYXJD
aGVja2luZygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29u
c3QgUVN0cmluZyYsIFFWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2Nh
dGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSA9IDA7ICAgIAorfTsKKwogY2xhc3MgUVdlYktp
dFBsYXRmb3JtUGx1Z2luIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5RV2ViS2l0UGxhdGZvcm1Q
bHVnaW4oKSB7fQpAQCAtMTQzLDcgKzE3Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgTm90aWZpY2F0
aW9ucywKICAgICAgICAgSGFwdGljcywKICAgICAgICAgVG91Y2hJbnRlcmFjdGlvbiwKLSAgICAg
ICAgRnVsbFNjcmVlblZpZGVvUGxheWVyCisgICAgICAgIEZ1bGxTY3JlZW5WaWRlb1BsYXllciwK
KyAgICAgICAgU3BlbGxDaGVja2VyCiAgICAgfTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0V4dGVuc2lvbihFeHRlbnNpb24pIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggYzYwZTBh
OGQ0NjRjMDQ1NGEwMWI5NjQ0MTgyMWEyZDY0ZTRmMDE3ZS4uYmJmYzUyNTdmYjRlNTVjOThjMjhk
N2E5ODU5ZjcxNTFlZDNlZTM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NCBAQAorMjAx
MS0wOC0xMiAgTGluZHNheSBNYXRoaWVzb24gIDxsaW5kc2F5Lm1hdGhpZXNvbkBnbWFpbC5jb20+
CisKKyAgICAgICAgW1F0XSBNaXNzaW5nIHNwZWxsIGNoZWNrIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTE0CisgICAgICAgIEZpeGVk
IHN0eWxlIGZhaWx1cmUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBBcGkvcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmg6CisgICAgICAgICogUXRXZWJL
aXQucHJvOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFF0Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6aXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFF0Ojp0b2dnbGVD
b250aW51b3VzU3BlbGxDaGVja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRR
dDo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRRdC5oOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50UXQ6OnRleHRDaGVj
a2VyKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlF0UGxhdGZvcm1QbHVnaW46OmNyZWF0ZVNwZWxsQ2hlY2tlcik6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDaGVja2VyQ2xpZW50UXQ6Omlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNrZXJDbGllbnRRdDo6bGVhcm5Xb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50UXQ6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlv
bkZvck1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50
UXQ6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tl
ckNsaWVudFF0OjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q2hlY2tlckNsaWVudFF0OjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q2hlY2tlckNsaWVudFF0Ojppc0NvbnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50UXQ6OnRvZ2dsZUNvbnRpbm91c1NwZWxs
Q2hlY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNrZXJDbGllbnRRdDo6aXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50
UXQ6OnRvZ2dsZUdyYW1tYXJDaGVja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tl
ckNsaWVudFF0Ojpsb2FkU3BlbGxDaGVja2VyKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9U
ZXh0Q2hlY2tlckNsaWVudFF0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNr
ZXJDbGllbnRRdDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorCisyMDExLTA4LTEyICBMaW5k
c2F5IE1hdGhpZXNvbiAgPGxpbmRzYXkubWF0aGllc29uQGdtYWlsLmNvbT4gYW5kIERhd2l0IEFs
ZW1heWVodSAgIDxhZGF3aXRAa2RlLm9yZz4KKworICAgICAgICBbUXRdIE1pc3Npbmcgc3BlbGwg
Y2hlY2sgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDQxMTQKKyAgICAgICAgSW1wbGVtZW50cyBwbGF0Zm9ybSBwbHVnaW4gIGFwaSBmb3Ig
c3BlbGwgYW5kIGdyYW1tYXIgY2hlY2tpbmcsCisgICAgICAgIGRyYXdzIGVycm9yIGxpbmVzIGZv
ciBzYW1lLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oOgorICAgICAgICAqIFF0V2ViS2l0LnBybzoK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50UXQ6OmlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6dG9nZ2xlQ29udGludW91
c1NwZWxsQ2hlY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50UXQ6OnRvZ2ds
ZUdyYW1tYXJDaGVja2luZyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
UXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFF0Ojp0ZXh0Q2hlY2tlcik6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpRdFBsYXRmb3JtUGx1Z2luOjpjcmVhdGVTcGVsbENoZWNrZXIpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaDoKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q2hlY2tlckNsaWVudFF0OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50UXQ6OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tlckNsaWVudFF0OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNz
cGVsbGVkV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tlckNsaWVudFF0OjpjaGVj
a1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNrZXJDbGllbnRR
dDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNrZXJD
bGllbnRRdDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNr
ZXJDbGllbnRRdDo6aXNDb250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q2hlY2tlckNsaWVudFF0Ojp0b2dnbGVDb250aW5vdXNTcGVsbENoZWNraW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50UXQ6OmlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tlckNsaWVudFF0Ojp0b2dn
bGVHcmFtbWFyQ2hlY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNrZXJDbGllbnRR
dDo6bG9hZFNwZWxsQ2hlY2tlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNr
ZXJDbGllbnRRdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50
UXQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKKwogMjAxMS0wOC0wNSAgRGF3aXQgQWxlbWF5
ZWh1ICA8YWRhd2l0QGtkZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGlu
Zy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvUXRXZWJLaXQucHJvIGIvU291cmNlL1dl
YktpdC9xdC9RdFdlYktpdC5wcm8KaW5kZXggM2M1ODA4OTFlNWMxZTFjZTY5NjYzODk4ODI4NjMz
YzBjYzY4YTUyNC4uMDRkNjA0NjljNWUwZTQ0MTc1MTQyYjkwMGU1ZjExOWM5MDYyODdiZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8KKysrIGIvU291cmNlL1dlYktp
dC9xdC9RdFdlYktpdC5wcm8KQEAgLTE5NCw3ICsxOTQsOCBAQCBTT1VSQ0VTICs9IFwKICAgICAk
JFBXRC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5jcHAgXAogICAgICQkUFdEL1dlYkNvcmVT
dXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwIFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9T
ZWFyY2hQb3B1cE1lbnVRdC5jcHAgXAotICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5jcHAKKyAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuY3BwIFwKKyAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVu
dFF0LmNwcAogCiBIRUFERVJTICs9IFwKICAgICAkJFdFQktJVF9BUElfSEVBREVSUyBcCkBAIC0y
MTAsNyArMjExLDggQEAgSEVBREVSUyArPSBcCiAgICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvUXRQ
bGF0Zm9ybVBsdWdpbi5oIFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5o
IFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVRdC5oIFwKLSAgICAk
JFBXRC9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAorICAgICQkUFdEL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIFwKKyAgICAkJFBXRC9XZWJDb3Jl
U3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmgKIAogd2Via2l0MiB7CiAgICAgSEVBREVSUyAr
PSAkJFdFQktJVDJfQVBJX0hFQURFUlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAKaW5kZXggNzMyMTBmMGZkZTE2NjVmYzc5YzgzNmVl
OGJjZTU0MzJlMjdmOWM1ZC4uMTRiYjZlNjU3NDY4NDQ1OWI1OTcwNzExNTdiOGQ4M2ZiZjBlZWY3
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGll
bnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGll
bnRRdC5jcHAKQEAgLTU2LDcgKzU2LDYgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KIAotI2RlZmluZSBtZXRob2REZWJ1ZygpIHFEZWJ1ZygiRWRpdG9yQ2xp
ZW50UXQ6ICVzIiwgX19GVU5DVElPTl9fKTsKIAogc3RhdGljIFFTdHJpbmcgZHVtcFBhdGgoV2Vi
Q29yZTo6Tm9kZSAqbm9kZSkKIHsKQEAgLTEwOSwxMiArMTA4LDEyIEBAIGJvb2wgRWRpdG9yQ2xp
ZW50UXQ6OnNob3VsZFNob3dEZWxldGVJbnRlcmZhY2UoSFRNTEVsZW1lbnQqIGVsZW1lbnQpCiAK
IGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkK
IHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXJDbGllbnQuaXND
b250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwogfQogCiBib29sIEVkaXRvckNsaWVudFF0
Ojppc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gbV90ZXh0Q2hlY2tlckNsaWVudC5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKIH0K
IAogaW50IEVkaXRvckNsaWVudFF0OjpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpCkBAIC0zNDQs
MTIgKzM0MywxMiBAQCBib29sIEVkaXRvckNsaWVudFF0Ojppc1NlbGVjdFRyYWlsaW5nV2hpdGVz
cGFjZUVuYWJsZWQoKQogCiB2b2lkIEVkaXRvckNsaWVudFF0Ojp0b2dnbGVDb250aW51b3VzU3Bl
bGxDaGVja2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3RleHRDaGVja2Vy
Q2xpZW50LnRvZ2dsZUNvbnRpbm91c1NwZWxsQ2hlY2tpbmcoKTsKIH0KIAogdm9pZCBFZGl0b3JD
bGllbnRRdDo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBtX3RleHRDaGVja2VyQ2xpZW50LnRvZ2dsZUdyYW1tYXJDaGVja2luZygp
OwogfQogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgQ3RybEtleSA9IDEgPDwgMDsKQEAgLTU2Nywz
MiArNTY2LDYgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEo
RWxlbWVudCopCiB7CiB9CiAKLXZvaWQgRWRpdG9yQ2xpZW50UXQ6Omlnbm9yZVdvcmRJblNwZWxs
RG9jdW1lbnQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIEVkaXRvckNsaWVudFF0OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFF0OjpjaGVja1NwZWxsaW5nT2ZT
dHJpbmcoY29uc3QgVUNoYXIqLCBpbnQsIGludCosIGludCopCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotU3RyaW5nIEVkaXRvckNsaWVudFF0OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rp
b25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEVkaXRvckNsaWVudFF0OjpjaGVj
a0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+
JiwgaW50KiwgaW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEVkaXRv
ckNsaWVudFF0Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5n
JiwgY29uc3QgR3JhbW1hckRldGFpbCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTYx
NCwxMSArNTg3LDYgQEAgYm9vbCBFZGl0b3JDbGllbnRRdDo6c3BlbGxpbmdVSUlzU2hvd2luZygp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEVkaXRvckNsaWVudFF0OjpnZXRHdWVzc2Vz
Rm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9y
PFN0cmluZz4mIGd1ZXNzZXMpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9vbCBF
ZGl0b3JDbGllbnRRdDo6aXNFZGl0aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9lZGl0aW5n
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGll
bnRRdC5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5o
CmluZGV4IGVjY2I3NWRkMGE2ODgwZDc5ZDQxZDhhZDk4MDFjZjQyNzU0ODMwMmEuLmQ5NjU4YmI3
MjI0MmMwNDY1ZDlkNjI5ZWQ0ZTYwMzg4NWVmNGNhODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmgKQEAgLTMxLDE2ICszMSwxNSBAQAog
I2RlZmluZSBFZGl0b3JDbGllbnRRdF9oCiAKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNp
bmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKLQor
I2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50UXQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogCiBjbGFzcyBRV2ViUGFnZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBFZGl0
b3JDbGllbnRRdCA6IHB1YmxpYyBFZGl0b3JDbGllbnQsIHB1YmxpYyBUZXh0Q2hlY2tlckNsaWVu
dCB7CitjbGFzcyBFZGl0b3JDbGllbnRRdCA6IHB1YmxpYyBFZGl0b3JDbGllbnQgewogcHVibGlj
OgogICAgIEVkaXRvckNsaWVudFF0KFFXZWJQYWdlKiBwYWdlKTsKICAgICAKQEAgLTk3LDIwICs5
NiwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRleHRXaWxsQmVEZWxldGVkSW5UZXh0
RmllbGQoRWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJl
YShFbGVtZW50Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVu
dChjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmlu
ZyYpOwotICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIq
LCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdM
ZW5ndGgpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1p
c3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOwotICAgIHZpcnR1YWwg
dm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFZlY3Rv
cjxHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1t
YXJMZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpOwogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpOwog
ICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpOwogICAgIHZpcnR1YWwg
Ym9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNG
b3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8
U3RyaW5nPiYgZ3Vlc3Nlcyk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0
YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVk
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoU3BlbGxDaGVja2Vy
KiwgaW50LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzaywgY29uc3QgU3RyaW5nJikge30K
LSAgICB2aXJ0dWFsIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIHsgcmV0dXJuIHRo
aXM7IH0KKyAgICB2aXJ0dWFsIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIHsgcmV0
dXJuICZtX3RleHRDaGVja2VyQ2xpZW50OyB9CiAKICAgICBib29sIGlzRWRpdGluZygpIGNvbnN0
OwogCkBAIC0xMTgsNiArMTEwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2VwdHNF
ZGl0aW5nOwogCiBwcml2YXRlOgorICAgIFRleHRDaGVja2VyQ2xpZW50UXQgbV90ZXh0Q2hlY2tl
ckNsaWVudDsKICAgICBRV2ViUGFnZSogbV9wYWdlOwogICAgIGJvb2wgbV9lZGl0aW5nOwogICAg
IGJvb2wgbV9pblVuZG9SZWRvOyAvLyBvdXIgdW5kbyBzdGFjayB3b3JrcyBkaWZmZXJlbnRseSAt
IGRvbid0IHJlLWVudGVyIQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKaW5kZXggMmU0NGM2NjkzM2RlNmJhM2E2ODk3NzYwMWUx
ODk5MGQyZGJlNjA5MC4uN2Q4Njg4Yjk1OWVjYzdiM2IxMGViYzU5MDNmYmFjZDRiNWMyYjQxZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1
Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1Q
bHVnaW4uY3BwCkBAIC0xMzQsNCArMTM0LDEwIEBAIFBhc3NPd25QdHI8UVdlYkZ1bGxTY3JlZW5W
aWRlb0hhbmRsZXI+IFF0UGxhdGZvcm1QbHVnaW46OmNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhCiB9
CiAjZW5kaWYKIAorUGFzc093blB0cjxRV2ViU3BlbGxDaGVja2VyPiBRdFBsYXRmb3JtUGx1Z2lu
OjpjcmVhdGVTcGVsbENoZWNrZXIoKQoreworICAgIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiogcCA9
IHBsdWdpbigpOworICAgIHJldHVybiBhZG9wdFB0cihwID8gc3RhdGljX2Nhc3Q8UVdlYlNwZWxs
Q2hlY2tlcio+KHAtPmNyZWF0ZUV4dGVuc2lvbihRV2ViS2l0UGxhdGZvcm1QbHVnaW46OlNwZWxs
Q2hlY2tlcikpIDogMCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgKaW5kZXggMzE2YjhlOGRiZGY2OWU0NzA1ZGVjYjVj
ODE3NDc1OTM3MjEzMTU2OC4uOWY4YTc2MGI4MmE5ZGEyZDk5OWI2YTNhNGFjOGQyYjY4Mzc1OTZh
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3Jt
UGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3Jt
UGx1Z2luLmgKQEAgLTMzLDYgKzMzLDcgQEAgY2xhc3MgUVdlYlRvdWNoTW9kaWZpZXI7CiAjaWYg
RU5BQkxFKFZJREVPKSAmJiBVU0UoUVRfTVVMVElNRURJQSkKIGNsYXNzIFFXZWJGdWxsU2NyZWVu
VmlkZW9IYW5kbGVyOwogI2VuZGlmCitjbGFzcyBRV2ViU3BlbGxDaGVja2VyOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTUzLDYgKzU0LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShWSURF
TykgJiYgVVNFKFFUX01VTFRJTUVESUEpCiAgICAgUGFzc093blB0cjxRV2ViRnVsbFNjcmVlblZp
ZGVvSGFuZGxlcj4gY3JlYXRlRnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOwogI2VuZGlmCisgICAg
UGFzc093blB0cjxRV2ViU3BlbGxDaGVja2VyPiBjcmVhdGVTcGVsbENoZWNrZXIoKTsKIAogICAg
IFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiogcGx1Z2luKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQzOGI3NDExOGYzMTRjNTMyYzhhYzczNTkzOWM1ZGI1YzhlM2ZiY2YKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50
UXQuY3BwCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIExpbmRz
YXkgTWF0aGllc29uIDxsaW5kc2F5Lm1hdGhpZXNvbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgRGF3aXQgQWxlbWF5ZWh1ICA8YWRhd2l0QGtkZS5vcmc+CisgKgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4
dENoZWNrZXJDbGllbnRRdC5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJRdFBsYXRmb3JtUGx1Z2luLmgiCisKKyNpbmNsdWRlIDxRU3RyaW5nTGlzdD4KKyNpbmNs
dWRlIDxRVmVjdG9yPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudFF0OjppZ25vcmVXb3JkSW5T
cGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYgd29yZCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENo
ZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zcGVsbENoZWNrZXItPmlnbm9yZVdv
cmRJblNwZWxsRG9jdW1lbnQod29yZCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRRdDo6
bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNr
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zcGVsbENoZWNrZXItPmxlYXJuV29yZCh3
b3JkKTsKK30KKworU3RyaW5nIFRleHRDaGVja2VyQ2xpZW50UXQ6OmdldEF1dG9Db3JyZWN0U3Vn
Z2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCit7
CisgICAgaWYgKCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KworICAgIHJldHVybiBtX3NwZWxsQ2hlY2tlci0+YXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlz
c3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50
UXQ6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3Ro
LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpCit7Cisg
ICAgaWYgKCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0
IFFTdHJpbmcgdGV4dCA9IFFTdHJpbmc6OmZyb21SYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgUUNoYXIqPihidWZmZXIpLCBsZW5ndGgpOworICAgIG1fc3BlbGxDaGVja2VyLT5jaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcodGV4dCwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5n
dGgpOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50UXQ6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KGNvbnN0IFVDaGFyKiBidWZmZXIsIGludCBsZW5ndGgsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYg
ZGV0YWlscywgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCkK
K3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29uc3QgUVN0cmluZyB0ZXh0ID0gUVN0cmluZzo6ZnJvbVJhd0RhdGEocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBRQ2hhcio+KGJ1ZmZlciksIGxlbmd0aCk7CisgICAgICAgIAorICAgIC8vIERvIEdy
YW1tZXIgY2hlY2suCisgICAgUVZlY3RvcjxRV2ViU3BlbGxDaGVja2VyOjpHcmFtbWFyRGV0YWls
PiBxV2ViRGV0YWlsczsKKyAgICBtX3NwZWxsQ2hlY2tlci0+Y2hlY2tHcmFtbWFyT2ZTdHJpbmco
dGV4dCwgcVdlYkRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7
CisgICAgCisgICAgLy8gQ29weSBxV2ViRGV0YWlscyB0byBkZXRhaWxzLgorICAgIGRldGFpbHMu
Y2xlYXIoKTsKKyAgICBRVmVjdG9yPFFXZWJTcGVsbENoZWNrZXI6OkdyYW1tYXJEZXRhaWw+Ojpp
dGVyYXRvciBxV2ViSXQgPSBxV2ViRGV0YWlscy5iZWdpbigpOworICAgIFFWZWN0b3I8UVdlYlNw
ZWxsQ2hlY2tlcjo6R3JhbW1hckRldGFpbD46Oml0ZXJhdG9yIHFXZWJFbmQgPSBxV2ViRGV0YWls
cy5lbmQoKTsKKyAgICBmb3IgKDsgcVdlYkl0IDwgcVdlYkVuZDsgcVdlYkl0KyspIHsKKyAgICAg
ICAgR3JhbW1hckRldGFpbCBncmFtbWFyRGV0YWlsOworICAgICAgICBncmFtbWFyRGV0YWlsLmxv
Y2F0aW9uID0gcVdlYkl0LT5sb2NhdGlvbjsKKyAgICAgICAgZ3JhbW1hckRldGFpbC5sZW5ndGgg
PSBxV2ViSXQtPmxlbmd0aDsKKyAgICAgICAgLy8gQ29weSBndWVzc2VzIHN0cmluZ3MuCisgICAg
ICAgIFFTdHJpbmdMaXN0OjppdGVyYXRvciBndWVzc0l0ID0gcVdlYkl0LT5ndWVzc2VzLmJlZ2lu
KCk7CisgICAgICAgIFFTdHJpbmdMaXN0OjppdGVyYXRvciBndWVzc0VuZCA9IHFXZWJJdC0+Z3Vl
c3Nlcy5lbmQoKTsKKyAgICAgICAgZm9yICg7Z3Vlc3NJdCA8IGd1ZXNzRW5kOyBndWVzc0l0Kysp
CisgICAgICAgICAgICBncmFtbWFyRGV0YWlsLmd1ZXNzZXMuYXBwZW5kKCpndWVzc0l0KTsKKyAg
ICAgICAgZ3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24gPSBxV2ViSXQtPnVzZXJEZXNjcmlw
dGlvbjsKKyAgICAgICAgZGV0YWlscy5hcHBlbmQoZ3JhbW1hckRldGFpbCk7CisgICAgfQorfQor
Cit2b2lkIFRleHRDaGVja2VyQ2xpZW50UXQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmlu
ZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykK
K3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UVN0cmluZ0xpc3QgZ3Vlc3Nlc0xpc3Q7CisgICAgbV9zcGVsbENoZWNrZXItPmd1ZXNzZXNGb3JX
b3JkKHdvcmQsIGNvbnRleHQsIGd1ZXNzZXNMaXN0KTsKKyAgICBjb25zdCBpbnQgY291bnQgPSBn
dWVzc2VzTGlzdC5jb3VudCgpOworICAgIGd1ZXNzZXMucmVzaXplKGNvdW50KTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIGd1ZXNzZXMuYXBwZW5kKGd1ZXNz
ZXNMaXN0LmF0KGkpKTsKK30KKworYm9vbCBUZXh0Q2hlY2tlckNsaWVudFF0Ojppc0NvbnRpbm91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fc3BlbGxDaGVja2VyLT5pc0Nv
bnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGll
bnRRdDo6dG9nZ2xlQ29udGlub3VzU3BlbGxDaGVja2luZygpCit7CisgICAgaWYgKCFsb2FkU3Bl
bGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3BlbGxDaGVja2VyLT50b2dn
bGVDb250aW5vdXNTcGVsbENoZWNraW5nKCk7Cit9CisKK2Jvb2wgVGV4dENoZWNrZXJDbGllbnRR
dDo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNr
ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fc3BlbGxDaGVja2Vy
LT5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVu
dFF0Ojp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKQoreworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tl
cigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NwZWxsQ2hlY2tlci0+dG9nZ2xlR3JhbW1h
ckNoZWNraW5nKCk7Cit9CisKK2Jvb2wgVGV4dENoZWNrZXJDbGllbnRRdDo6bG9hZFNwZWxsQ2hl
Y2tlcigpCit7CisgICAgaWYgKG1fc3BlbGxDaGVja2VyKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIFF0UGxhdGZvcm1QbHVnaW4gcGxhdGZvcm1QbHVnaW47CisgICAgaWYgKChtX3NwZWxs
Q2hlY2tlciA9IHBsYXRmb3JtUGx1Z2luLmNyZWF0ZVNwZWxsQ2hlY2tlcigpKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5oIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjUzM2U1MTU3Zjg3MTgwZTBiMTAzZTc1ZGU0YzkxMjZiYmMxNmY4ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGll
bnRRdC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTGluZHNh
eSBNYXRoaWVzb24gPGxpbmRzYXkubWF0aGllc29uQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBEYXdpdCBBbGVtYXllaHUgIDxhZGF3aXRAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dENoZWNrZXJDbGllbnRRdF9oCisjZGVm
aW5lIFRleHRDaGVja2VyQ2xpZW50UXRfaAorCisjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQu
aCIKKyNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKworI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgVGV4dENoZWNrZXJDbGllbnRRdCA6IHB1YmxpYyBUZXh0Q2hlY2tlckNsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQo
Y29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBTdHJpbmcm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwg
aW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVu
Z3RoKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNz
cGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBWZWN0b3I8
R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFy
TGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5n
JiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoU3BlbGxDaGVja2VyKiwg
aW50LCBUZXh0Q2hlY2tpbmdUeXBlTWFzaywgY29uc3QgU3RyaW5nJikgeyB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNDb250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIHZpcnR1YWwg
dm9pZCB0b2dnbGVDb250aW5vdXNTcGVsbENoZWNraW5nKCk7CisgICAgCisgICAgdmlydHVhbCBi
b29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOworICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVH
cmFtbWFyQ2hlY2tpbmcoKTsgICAKKworcHJpdmF0ZToKKyAgICBib29sIGxvYWRTcGVsbENoZWNr
ZXIoKTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8UVdlYlNwZWxsQ2hlY2tlcj4gbV9zcGVsbENo
ZWNrZXI7Cit9OworCit9CisKKyNlbmRpZgo=
</data>
<flag name="review"
          id="99618"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103995</attachid>
            <date>2011-08-15 20:02:13 -0700</date>
            <delta_ts>2011-08-20 19:34:16 -0700</delta_ts>
            <desc>Added a platform plugin to allow spell and grammar check in QtWebKit.</desc>
            <filename>patch-viii.diff</filename>
            <type>text/plain</type>
            <size>24060</size>
            <attacher name="Lindsay Mathieson">lindsay.mathieson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1Zjk5ZDJkLi4wMmQ1MzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTEtMDgtMTUgIExpbmRzYXkgTWF0aGllc29uICAgPGxpbmRzYXkubWF0aGllc29uQGdt
YWlsLmNvbT4KKworICAgICAgICBbUXRdIE1pc3Npbmcgc3BlbGwgY2hlY2sgc3VwcG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxMTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIHBsYXRm
b3JtIHBsdWdpbiB0byBhbGxvdyBzcGVsbCBhbmQgZ3JhbW1hciBjaGVjayBpbiBRdFdlYktpdC4K
KworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGUgbGluZSByZW5kZXJpbmcgY29kZSBp
cyBjb3BpZWQgZnJvbSB0aGUgY2Fpcm8gcG9ydC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdFcnJv
clVuZGVybGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dENoZWNraW5nKToKKwogMjAxMS0wOC0xNSAgSmVmZnJleSBQZmF1ICA8anBmYXVAYXBw
bGUuY29tPgogCiAgICAgICAgIE5ldyBYTUwgcGFyc2VyOiBSZS1lbnRlcmluZyBhIGNoYXJhY3Rl
ciBub2RlIHNob3VsZCBub3QgY2xvYmJlciB0aGUgYnVmZmVyZWQgY2hhcmFjdGVycwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0UXQuY3BwCmluZGV4IDEwZGU5NjcuLmEwODlmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAg
LTkwMCwxMiArOTAwLDEwNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIGJvbwogICAgIGRyYXdMaW5l
KEludFBvaW50KHN0YXJ0UG9pbnQueCgpLCBzdGFydFBvaW50LnkoKSksIEludFBvaW50KGVuZFBv
aW50LngoKSwgZW5kUG9pbnQueSgpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIFRleHRDaGVja2lu
Z0xpbmVTdHlsZSkKKworLyoKKyAqICAgTk9URTogVGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgYmFz
ZWQgdXBvbiB0aGUgb25lIGZyb20KKyAqICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vRHJhd0Vycm9yVW5kZXJsaW5lLntofGNwcH0KKyAqCisgKiAgIERyYXdzIGFuIGVy
cm9yIHVuZGVybGluZSB0aGF0IGxvb2tzIGxpa2Ugb25lIG9mOgorICoKKyAqICAgICAgICAgICAg
ICAgSCAgICAgICBFICAgICAgICAgICAgICAgIEgKKyAqICAgICAgL1wgICAgICAvXCAgICAgIC9c
ICAgICAgICAvXCAgICAgIC9cICAgICAgICAgICAgICAgLQorICogICAgQS8gIFwgICAgLyAgXCAg
ICAvICBcICAgICBBLyAgXCAgICAvICBcICAgICAgICAgICAgICB8CisgKiAgICAgXCAgIFwgIC8g
ICAgXCAgLyAgIC9EICAgICBcICAgXCAgLyAgICBcICAgICAgICAgICAgIHwKKyAqICAgICAgXCAg
IFwvICBDICAgXC8gICAvICAgICAgICBcICAgXC8gICBDICBcICAgICAgICAgICAgfCBoZWlnaHQg
PSBoZWlnaHRTcXVhcmVzICogc3F1YXJlCisgKiAgICAgICBcICAgICAgL1wgIEYgICAvICAgICAg
ICAgIFwgIEYgICAvXCAgIFwgICAgICAgICAgIHwKKyAqICAgICAgICBcICAgIC8gIFwgICAgLyAg
ICAgICAgICAgIFwgICAgLyAgXCAgIFxHICAgICAgICAgfAorICogICAgICAgICBcICAvICAgIFwg
IC8gICAgICAgICAgICAgIFwgIC8gICAgXCAgLyAgICAgICAgICB8CisgKiAgICAgICAgICBcLyAg
ICAgIFwvICAgICAgICAgICAgICAgIFwvICAgICAgXC8gICAgICAgICAgIC0KKyAqICAgICAgICAg
IEIgICAgICAgICAgICAgICAgICAgICAgICAgQgorICogICAgICAgICAgfC0tLXwKKyAqICAgICAg
ICB1bml0V2lkdGggPSAoaGVpZ2h0U3F1YXJlcyAtIDEpICogc3F1YXJlCisgKgorICogIFRoZSB4
LCB5LCB3aWR0aCwgaGVpZ2h0IHBhc3NlZCBpbiBnaXZlIHRoZSBkZXNpcmVkIGJvdW5kaW5nIGJv
eDsKKyAqICB4L3dpZHRoIGFyZSBhZGp1c3RlZCB0byBtYWtlIHRoZSB1bmRlcmxpbmUgYSBpbnRl
Z2VyIG51bWJlciBvZiB1bml0cyB3aWRlLgorKi8KK3N0YXRpYyB2b2lkIGRyYXdFcnJvclVuZGVy
bGluZShRUGFpbnRlciAqcGFpbnRlciwgcXJlYWwgeCwgcXJlYWwgeSwgcXJlYWwgd2lkdGgsIHFy
ZWFsIGhlaWdodCkKK3sKKyAgICBjb25zdCBxcmVhbCBoZWlnaHRTcXVhcmVzID0gMi41OworCisg
ICAgcXJlYWwgc3F1YXJlID0gaGVpZ2h0IC8gaGVpZ2h0U3F1YXJlczsKKyAgICBxcmVhbCBoYWxm
U3F1YXJlID0gMC41ICogc3F1YXJlOworCisgICAgcXJlYWwgdW5pdFdpZHRoID0gKGhlaWdodFNx
dWFyZXMgLSAxLjApICogc3F1YXJlOworICAgIGludCB3aWR0aFVuaXRzID0gc3RhdGljX2Nhc3Q8
aW50Pigod2lkdGggKyAwLjUgKiB1bml0V2lkdGgpIC8gdW5pdFdpZHRoKTsKKworICAgIHggKz0g
MC41ICogKHdpZHRoIC0gd2lkdGhVbml0cyAqIHVuaXRXaWR0aCk7CisgICAgd2lkdGggPSB3aWR0
aFVuaXRzICogdW5pdFdpZHRoOworCisgICAgcXJlYWwgYm90dG9tID0geSArIGhlaWdodDsKKyAg
ICBxcmVhbCB0b3AgPSB5OworCisgICAgUVBhaW50ZXJQYXRoIHBhdGg7CisKKyAgICAvLyBCb3R0
b20gb2Ygc3F1aWdnbGUuCisgICAgcGF0aC5tb3ZlVG8oeCAtIGhhbGZTcXVhcmUsIHRvcCArIGhh
bGZTcXVhcmUpOyAvLyBBCisKKyAgICBpbnQgaSA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IHdp
ZHRoVW5pdHM7IGkgKz0gMikgeworICAgICAgICBxcmVhbCBtaWRkbGUgPSB4ICsgKGkgKyAxKSAq
IHVuaXRXaWR0aDsKKyAgICAgICAgcXJlYWwgcmlnaHQgPSB4ICsgKGkgKyAyKSAqIHVuaXRXaWR0
aDsKKworICAgICAgICBwYXRoLmxpbmVUbyhtaWRkbGUsIGJvdHRvbSk7IC8vIEIKKworICAgICAg
ICBpZiAoaSArIDIgPT0gd2lkdGhVbml0cykKKyAgICAgICAgICAgIHBhdGgubGluZVRvKHJpZ2h0
ICsgaGFsZlNxdWFyZSwgdG9wICsgaGFsZlNxdWFyZSk7IC8vIEQKKyAgICAgICAgZWxzZSBpZiAo
aSArIDEgIT0gd2lkdGhVbml0cykKKyAgICAgICAgICAgIHBhdGgubGluZVRvKHJpZ2h0LCB0b3Ag
KyBzcXVhcmUpOyAvLyBDCisgICAgfQorCisgICAgLy8gVG9wIG9mIHNxdWlnZ2xlLgorICAgIGZv
ciAoaSAtPSAyOyBpID49IDA7IGkgLT0gMikgeworICAgICAgICBxcmVhbCBsZWZ0ID0geCArIGkg
KiB1bml0V2lkdGg7CisgICAgICAgIHFyZWFsIG1pZGRsZSA9IHggKyAoaSArIDEpICogdW5pdFdp
ZHRoOworICAgICAgICBxcmVhbCByaWdodCA9IHggKyAoaSArIDIpICogdW5pdFdpZHRoOworCisg
ICAgICAgIGlmIChpICsgMSA9PSB3aWR0aFVuaXRzKQorICAgICAgICAgICAgcGF0aC5saW5lVG8o
bWlkZGxlICsgaGFsZlNxdWFyZSwgYm90dG9tIC0gaGFsZlNxdWFyZSk7IC8vIEcKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBpZiAoaSArIDIgPT0gd2lkdGhVbml0cykKKyAgICAgICAgICAg
ICAgICBwYXRoLmxpbmVUbyhyaWdodCwgdG9wKTsgLy8gRQorCisgICAgICAgICAgICBwYXRoLmxp
bmVUbyhtaWRkbGUsIGJvdHRvbSAtIGhhbGZTcXVhcmUpOyAvLyBGCisgICAgICAgIH0KKworICAg
ICAgICBwYXRoLmxpbmVUbyhsZWZ0LCB0b3ApOyAvLyBICisgICAgfQorCisgICAgcGFpbnRlci0+
ZHJhd1BhdGgocGF0aCk7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
VGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIFRleHRD
aGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFFQYWludGVyKiBw
YWludGVyID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgY29uc3QgUVBlbiBvcmlnaW5hbFBlbiA9
IHBhaW50ZXItPnBlbigpOworCisgICAgc3dpdGNoIChzdHlsZSkgeworICAgIGNhc2UgVGV4dENo
ZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU6CisgICAgICAgIHBhaW50ZXItPnNldFBlbihRdDo6cmVk
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxl
OgorICAgICAgICBwYWludGVyLT5zZXRQZW4oUXQ6OmdyZWVuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRyYXdFcnJvclVuZGVy
bGluZShwYWludGVyLCBvcmlnaW4ueCgpLCBvcmlnaW4ueSgpLCB3aWR0aCwgY01pc3NwZWxsaW5n
TGluZVRoaWNrbmVzcyk7CisgICAgcGFpbnRlci0+c2V0UGVuKG9yaWdpbmFsUGVuKTsKIH0KIAog
RmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9h
dFJlY3QmIGZyZWN0LCBSb3VuZGluZ01vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJr
aXRwbGF0Zm9ybXBsdWdpbi5oCmluZGV4IDFmNjI4MDQuLmNmMmVjNGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCkBAIC0yMSw2ICsyMSw4IEBACiAj
aWZuZGVmIFFXRUJLSVRQTEFURk9STVBMVUdJTl9ICiAjZGVmaW5lIFFXRUJLSVRQTEFURk9STVBM
VUdJTl9ICiAKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisKIC8qCiAgKiAgV2FybmluZzog
VGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBpcyBub3QgIHBhcnQgb2YgdGhlIHB1YmxpYyBRdFdl
YktpdCBBUEkKICAqICBhbmQgbWF5IGJlIGNoYW5nZWQgZnJvbSB2ZXJzaW9uIHRvIHZlcnNpb24g
b3IgZXZlbiBiZSBjb21wbGV0ZWx5IHJlbW92ZWQuCkBAIC0xMzQsNiArMTM2LDMwIEBAIHB1Ymxp
YyBRX1NMT1RTOgogfTsKICNlbmRpZgogCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViU3BlbGxD
aGVja2VyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgc3Ry
dWN0IEdyYW1tYXJEZXRhaWwgeworICAgICAgICBpbnQgbG9jYXRpb247CisgICAgICAgIGludCBs
ZW5ndGg7CisgICAgICAgIFFTdHJpbmdMaXN0IGd1ZXNzZXM7CisgICAgICAgIFFTdHJpbmcgdXNl
ckRlc2NyaXB0aW9uOworICAgIH07CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250aW5vdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ29u
dGlub3VzU3BlbGxDaGVja2luZygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQo
Y29uc3QgUVN0cmluZyYgd29yZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5T
cGVsbERvY3VtZW50KGNvbnN0IFFTdHJpbmcmIHdvcmQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFFTdHJpbmcmIHdvcmQsIGludCogbWlzc3BlbGxp
bmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgUVN0
cmluZyBhdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBRU3RyaW5n
JiB3b3JkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGd1ZXNzZXNGb3JXb3JkKGNvbnN0IFFTdHJp
bmcmIHdvcmQsIGNvbnN0IFFTdHJpbmcmIGNvbnRleHQsIFFTdHJpbmdMaXN0JiBndWVzc2VzKSA9
IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFFTdHJpbmcmLCBRTGlzdDxHcmFtbWFy
RGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgp
ID0gMDsKK307CisKIGNsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+UVdlYktpdFBsYXRmb3JtUGx1Z2luKCkge30KQEAgLTE0Myw3ICsxNjksOCBAQCBw
dWJsaWM6CiAgICAgICAgIE5vdGlmaWNhdGlvbnMsCiAgICAgICAgIEhhcHRpY3MsCiAgICAgICAg
IFRvdWNoSW50ZXJhY3Rpb24sCi0gICAgICAgIEZ1bGxTY3JlZW5WaWRlb1BsYXllcgorICAgICAg
ICBGdWxsU2NyZWVuVmlkZW9QbGF5ZXIsCisgICAgICAgIFNwZWxsQ2hlY2tlcgogICAgIH07CiAK
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uKSBjb25zdCA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
cXQvQ2hhbmdlTG9nCmluZGV4IDk0ZDNhZmYuLmNiMDExNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDAgQEAKKzIwMTEtMDgtMTUgIExpbmRzYXkgTWF0aGllc29uICAgPGxpbmRzYXkubWF0
aGllc29uQGdtYWlsLmNvbT4KKworICAgICAgICBbUXRdIE1pc3Npbmcgc3BlbGwgY2hlY2sgc3Vw
cG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQx
MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCBhIHBsYXRmb3JtIHBsdWdpbiB0byBhbGxvdyBzcGVsbCBhbmQgZ3JhbW1hciBjaGVjayBpbiBR
dFdlYktpdC4KKworICAgICAgICAqIEFwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaDoKKyAgICAg
ICAgKiBRdFdlYktpdC5wcm86CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50UXQ6OmlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFF0Ojpp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50
UXQ6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvckNsaWVudFF0Ojp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudFF0Lmg6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRR
dDo6dGV4dENoZWNrZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVn
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlU3BlbGxD
aGVja2VyKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmg6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoY29udmVydFRvVmVjdG9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hl
Y2tlckNsaWVudFF0OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDaGVja2VyQ2xpZW50UXQ6OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q2hlY2tlckNsaWVudFF0OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVk
V29yZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tlckNsaWVudFF0OjpjaGVja1NwZWxs
aW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNrZXJDbGllbnRRdDo6Y2hl
Y2tHcmFtbWFyT2ZTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNrZXJDbGllbnRR
dDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNrZXJDbGll
bnRRdDo6aXNDb250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q2hlY2tlckNsaWVudFF0Ojp0b2dnbGVDb250aW5vdXNTcGVsbENoZWNraW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50UXQ6OmlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tlckNsaWVudFF0Ojp0b2dnbGVHcmFt
bWFyQ2hlY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNrZXJDbGllbnRRdDo6bG9h
ZFNwZWxsQ2hlY2tlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGll
bnRRdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50UXQ6OnJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKToKKwogMjAxMS0wOC0xNSAgRG1pdHJ5IFRpdG92ICA8ZGlt
aWNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNmZXJM
b2FkaW5nUmVzb3VyY2VGcm9tUGFnZSBkb2VzIG5vdCBoYXZlIGVub3VnaCBwYXJhbWV0ZXJzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybyBiL1NvdXJjZS9XZWJLaXQv
cXQvUXRXZWJLaXQucHJvCmluZGV4IDNjNTgwODkuLjE5YjU1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvUXRXZWJLaXQucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvUXRXZWJLaXQu
cHJvCkBAIC0xOTQsNiArMTk0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgJCRQV0QvV2ViQ29yZVN1
cHBvcnQvUG9wdXBNZW51UXQuY3BwIFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRm
b3JtUGx1Z2luLmNwcCBcCiAgICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51
UXQuY3BwIFwKKyAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmNw
cCBcCiAgICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAog
CiBIRUFERVJTICs9IFwKQEAgLTIxMCw2ICsyMTEsNyBAQCBIRUFERVJTICs9IFwKICAgICAkJFBX
RC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmggXAogICAgICQkUFdEL1dlYkNvcmVT
dXBwb3J0L1BvcHVwTWVudVF0LmggXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1NlYXJjaFBv
cHVwTWVudVF0LmggXAorICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50
UXQuaCBcCiAgICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgK
IAogd2Via2l0MiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRp
dG9yQ2xpZW50UXQuY3BwCmluZGV4IDczMjEwZjAuLjE0YmI2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCkBAIC01Niw3ICs1
Niw2IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKLSNk
ZWZpbmUgbWV0aG9kRGVidWcoKSBxRGVidWcoIkVkaXRvckNsaWVudFF0OiAlcyIsIF9fRlVOQ1RJ
T05fXyk7CiAKIHN0YXRpYyBRU3RyaW5nIGR1bXBQYXRoKFdlYkNvcmU6Ok5vZGUgKm5vZGUpCiB7
CkBAIC0xMDksMTIgKzEwOCwxMiBAQCBib29sIEVkaXRvckNsaWVudFF0OjpzaG91bGRTaG93RGVs
ZXRlSW50ZXJmYWNlKEhUTUxFbGVtZW50KiBlbGVtZW50KQogCiBib29sIEVkaXRvckNsaWVudFF0
Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBtX3RleHRDaGVja2VyQ2xpZW50LmlzQ29udGlub3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoKTsKIH0KIAogYm9vbCBFZGl0b3JDbGllbnRRdDo6aXNHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkKCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fdGV4dENoZWNrZXJD
bGllbnQuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7CiB9CiAKIGludCBFZGl0b3JDbGllbnRR
dDo6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKQpAQCAtMzQ0LDEyICszNDMsMTIgQEAgYm9vbCBF
ZGl0b3JDbGllbnRRdDo6aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkKIAogdm9p
ZCBFZGl0b3JDbGllbnRRdDo6dG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgbV90ZXh0Q2hlY2tlckNsaWVudC50b2dnbGVDb250aW5v
dXNTcGVsbENoZWNraW5nKCk7CiB9CiAKIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OnRvZ2dsZUdyYW1t
YXJDaGVja2luZygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gbV90ZXh0
Q2hlY2tlckNsaWVudC50b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKTsKIH0KIAogc3RhdGljIGNvbnN0
IHVuc2lnbmVkIEN0cmxLZXkgPSAxIDw8IDA7CkBAIC01NjcsMzIgKzU2Niw2IEBAIHZvaWQgRWRp
dG9yQ2xpZW50UXQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqKQogewogfQogCi12
b2lkIEVkaXRvckNsaWVudFF0OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmlu
ZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRRdDo6
bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBFZGl0b3JDbGllbnRRdDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwg
aW50LCBpbnQqLCBpbnQqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVN0cmluZyBF
ZGl0b3JDbGllbnRRdDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQo
Y29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJp
bmcoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRRdDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29u
c3QgVUNoYXIqLCBpbnQsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYsIGludCosIGludCopCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBFZGl0b3JDbGllbnRRdDo6dXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRh
aWwmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC02MTQsMTEgKzU4Nyw2IEBAIGJvb2wg
RWRpdG9yQ2xpZW50UXQ6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBFZGl0b3JDbGllbnRRdDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5n
JiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIGJvb2wgRWRpdG9yQ2xpZW50UXQ6OmlzRWRp
dGluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZWRpdGluZzsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaCBiL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuaAppbmRleCBlY2NiNzVkLi5kOTY1
OGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNs
aWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGll
bnRRdC5oCkBAIC0zMSwxNiArMzEsMTUgQEAKICNkZWZpbmUgRWRpdG9yQ2xpZW50UXRfaAogCiAj
aW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJSZWZDb3VudGVkLmgiCi0KKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudFF0
LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogY2xhc3MgUVdlYlBhZ2U7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRWRpdG9yQ2xpZW50UXQgOiBwdWJsaWMgRWRpdG9yQ2xp
ZW50LCBwdWJsaWMgVGV4dENoZWNrZXJDbGllbnQgeworY2xhc3MgRWRpdG9yQ2xpZW50UXQgOiBw
dWJsaWMgRWRpdG9yQ2xpZW50IHsKIHB1YmxpYzoKICAgICBFZGl0b3JDbGllbnRRdChRV2ViUGFn
ZSogcGFnZSk7CiAgICAgCkBAIC05NywyMCArOTYsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCB0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKEVsZW1lbnQqKTsKICAgICB2aXJ0dWFs
IHZvaWQgdGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCopOwogCi0gICAgdmlydHVhbCB2
b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVh
bCB2b2lkIGxlYXJuV29yZChjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tT
cGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGlu
Z0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBn
ZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1p
c3NwZWxsZWRXb3JkKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29u
c3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdy
YW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKTsKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IEdy
YW1tYXJEZXRhaWwmKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNz
cGVsbGVkV29yZChjb25zdCBTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5n
VUkoYm9vbCBzaG93KTsKICAgICB2aXJ0dWFsIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpOwot
ICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpOwogICAgIHZpcnR1
YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RD
aGVja2luZ09mU3RyaW5nKFNwZWxsQ2hlY2tlciosIGludCwgV2ViQ29yZTo6VGV4dENoZWNraW5n
VHlwZU1hc2ssIGNvbnN0IFN0cmluZyYpIHt9Ci0gICAgdmlydHVhbCBUZXh0Q2hlY2tlckNsaWVu
dCogdGV4dENoZWNrZXIoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBUZXh0Q2hlY2tl
ckNsaWVudCogdGV4dENoZWNrZXIoKSB7IHJldHVybiAmbV90ZXh0Q2hlY2tlckNsaWVudDsgfQog
CiAgICAgYm9vbCBpc0VkaXRpbmcoKSBjb25zdDsKIApAQCAtMTE4LDYgKzExMCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzRWRpdGluZzsKIAogcHJpdmF0ZToKKyAgICBUZXh0
Q2hlY2tlckNsaWVudFF0IG1fdGV4dENoZWNrZXJDbGllbnQ7CiAgICAgUVdlYlBhZ2UqIG1fcGFn
ZTsKICAgICBib29sIG1fZWRpdGluZzsKICAgICBib29sIG1faW5VbmRvUmVkbzsgLy8gb3VyIHVu
ZG8gc3RhY2sgd29ya3MgZGlmZmVyZW50bHkgLSBkb24ndCByZS1lbnRlciEKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAgYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwCmluZGV4
IDJlNDRjNjYuLjdkODY4OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcApAQCAtMTM0LDQgKzEzNCwxMCBAQCBQYXNzT3du
UHRyPFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyPiBRdFBsYXRmb3JtUGx1Z2luOjpjcmVhdGVG
dWxsU2NyZWVuVmlkZW9IYQogfQogI2VuZGlmCiAKK1Bhc3NPd25QdHI8UVdlYlNwZWxsQ2hlY2tl
cj4gUXRQbGF0Zm9ybVBsdWdpbjo6Y3JlYXRlU3BlbGxDaGVja2VyKCkKK3sKKyAgICBRV2ViS2l0
UGxhdGZvcm1QbHVnaW4qIHAgPSBwbHVnaW4oKTsKKyAgICByZXR1cm4gYWRvcHRQdHIocCA/IHN0
YXRpY19jYXN0PFFXZWJTcGVsbENoZWNrZXIqPihwLT5jcmVhdGVFeHRlbnNpb24oUVdlYktpdFBs
YXRmb3JtUGx1Z2luOjpTcGVsbENoZWNrZXIpKSA6IDApOworfQorCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaCBiL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oCmluZGV4IDMxNmI4
ZTguLjlmOGE3NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UXRQbGF0Zm9ybVBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UXRQbGF0Zm9ybVBsdWdpbi5oCkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIFFXZWJUb3VjaE1vZGlm
aWVyOwogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKFFUX01VTFRJTUVESUEpCiBjbGFzcyBRV2Vi
RnVsbFNjcmVlblZpZGVvSGFuZGxlcjsKICNlbmRpZgorY2xhc3MgUVdlYlNwZWxsQ2hlY2tlcjsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Myw2ICs1NCw3IEBAIHB1YmxpYzoKICNpZiBF
TkFCTEUoVklERU8pICYmIFVTRShRVF9NVUxUSU1FRElBKQogICAgIFBhc3NPd25QdHI8UVdlYkZ1
bGxTY3JlZW5WaWRlb0hhbmRsZXI+IGNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsKICNl
bmRpZgorICAgIFBhc3NPd25QdHI8UVdlYlNwZWxsQ2hlY2tlcj4gY3JlYXRlU3BlbGxDaGVja2Vy
KCk7CiAKICAgICBRV2ViS2l0UGxhdGZvcm1QbHVnaW4qIHBsdWdpbigpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuY3Bw
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWIyNGRjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVu
dFF0LmNwcApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBMaW5k
c2F5IE1hdGhpZXNvbiA8bGluZHNheS5tYXRoaWVzb25AZ21haWwuY29tPgorICogQ29weXJpZ2h0
IChDKSAyMDExIERhd2l0IEFsZW1heWVodSAgPGFkYXdpdEBrZGUub3JnPgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
eHRDaGVja2VyQ2xpZW50UXQuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiUXRQbGF0Zm9ybVBsdWdpbi5oIgorCisjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+CisjaW5j
bHVkZSA8UVZlY3Rvcj4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworCitzdGF0
aWMgdm9pZCBjb252ZXJ0VG9WZWN0b3JMaXN0KGNvbnN0IFFTdHJpbmdMaXN0JiBsaXN0LCBWZWN0
b3I8U3RyaW5nPiYgdkxpc3QpCit7CisgICAgY29uc3QgaW50IGNvdW50ID0gbGlzdC5jb3VudCgp
OworICAgIHZMaXN0LnJlc2l6ZShjb3VudCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQorICAgICAgICB2TGlzdC5hcHBlbmQobGlzdC5hdChpKSk7Cit9CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudFF0OjppZ25vcmVXb3JkSW5TcGVs
bERvY3VtZW50KGNvbnN0IFN0cmluZyYgd29yZCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNr
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zcGVsbENoZWNrZXItPmlnbm9yZVdvcmRJ
blNwZWxsRG9jdW1lbnQod29yZCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRRdDo6bGVh
cm5Xb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zcGVsbENoZWNrZXItPmxlYXJuV29yZCh3b3Jk
KTsKK30KKworU3RyaW5nIFRleHRDaGVja2VyQ2xpZW50UXQ6OmdldEF1dG9Db3JyZWN0U3VnZ2Vz
dGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCit7Cisg
ICAgaWYgKCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIHJldHVybiBtX3NwZWxsQ2hlY2tlci0+YXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3Bl
bGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50UXQ6
OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoLCBp
bnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpCit7CisgICAg
aWYgKCFsb2FkU3BlbGxDaGVja2VyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFFT
dHJpbmcgdGV4dCA9IFFTdHJpbmc6OmZyb21SYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
UUNoYXIqPihidWZmZXIpLCBsZW5ndGgpOworICAgIG1fc3BlbGxDaGVja2VyLT5jaGVja1NwZWxs
aW5nT2ZTdHJpbmcodGV4dCwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgp
OworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50UXQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNv
bnN0IFVDaGFyKiBidWZmZXIsIGludCBsZW5ndGgsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZGV0
YWlscywgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCkKK3sK
KyAgICBpZiAoIWxvYWRTcGVsbENoZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29u
c3QgUVN0cmluZyB0ZXh0ID0gUVN0cmluZzo6ZnJvbVJhd0RhdGEocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBRQ2hhcio+KGJ1ZmZlciksIGxlbmd0aCk7CisKKyAgICAvLyBEbyBHcmFtbWVyIGNoZWNr
LgorICAgIFFMaXN0PFFXZWJTcGVsbENoZWNrZXI6OkdyYW1tYXJEZXRhaWw+IHFHcmFtbWFyRGV0
YWlsczsKKyAgICBtX3NwZWxsQ2hlY2tlci0+Y2hlY2tHcmFtbWFyT2ZTdHJpbmcodGV4dCwgcUdy
YW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyTG9jYXRpb24sIGJhZEdyYW1tYXJMZW5ndGgpOworCisg
ICAgLy8gQ29weSB0aGUgZ3JhbW1hciBkZXRhaWwgZnJvbSB0aGUgUXQgcGx1Z2luIHRvIHRoZSB3
ZWJraXQgc3RydWN0dXJlLgorICAgIGNvbnN0IGludCBjb3VudCA9IHFHcmFtbWFyRGV0YWlscy5j
b3VudCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBj
b25zdCBRV2ViU3BlbGxDaGVja2VyOjpHcmFtbWFyRGV0YWlsIHFHcmFtbWFyRGV0YWlsID0gcUdy
YW1tYXJEZXRhaWxzLmF0KGkpOworICAgICAgICBHcmFtbWFyRGV0YWlsIHdlYmtpdEdyYW1tYXJE
ZXRhaWw7CisgICAgICAgIHdlYmtpdEdyYW1tYXJEZXRhaWwubG9jYXRpb24gPSBxR3JhbW1hckRl
dGFpbC5sb2NhdGlvbjsKKyAgICAgICAgd2Via2l0R3JhbW1hckRldGFpbC5sZW5ndGggPSBxR3Jh
bW1hckRldGFpbC5sZW5ndGg7CisgICAgICAgIC8vIENvcHkgZ3Vlc3NlcyBzdHJpbmdzLgorICAg
ICAgICBjb252ZXJ0VG9WZWN0b3JMaXN0KHFHcmFtbWFyRGV0YWlsLmd1ZXNzZXMsIHdlYmtpdEdy
YW1tYXJEZXRhaWwuZ3Vlc3Nlcyk7CisgICAgICAgIHdlYmtpdEdyYW1tYXJEZXRhaWwudXNlckRl
c2NyaXB0aW9uID0gcUdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uOworICAgICAgICBkZXRh
aWxzLmFwcGVuZCh3ZWJraXRHcmFtbWFyRGV0YWlsKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dENo
ZWNrZXJDbGllbnRRdDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25z
dCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQoreworICAgIGlmICgh
bG9hZFNwZWxsQ2hlY2tlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBRU3RyaW5nTGlzdCBn
dWVzc2VzTGlzdDsKKyAgICBtX3NwZWxsQ2hlY2tlci0+Z3Vlc3Nlc0ZvcldvcmQod29yZCwgY29u
dGV4dCwgZ3Vlc3Nlc0xpc3QpOworICAgIGNvbnZlcnRUb1ZlY3Rvckxpc3QoZ3Vlc3Nlc0xpc3Qs
IGd1ZXNzZXMpOworfQorCitib29sIFRleHRDaGVja2VyQ2xpZW50UXQ6OmlzQ29udGlub3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoKQoreworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9zcGVsbENoZWNrZXItPmlzQ29udGlu
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlckNsaWVudFF0
Ojp0b2dnbGVDb250aW5vdXNTcGVsbENoZWNraW5nKCkKK3sKKyAgICBpZiAoIWxvYWRTcGVsbENo
ZWNrZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zcGVsbENoZWNrZXItPnRvZ2dsZUNv
bnRpbm91c1NwZWxsQ2hlY2tpbmcoKTsKK30KKworYm9vbCBUZXh0Q2hlY2tlckNsaWVudFF0Ojpp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKQoreworICAgIGlmICghbG9hZFNwZWxsQ2hlY2tlcigp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9zcGVsbENoZWNrZXItPmlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOworfQorCit2b2lkIFRleHRDaGVja2VyQ2xpZW50UXQ6
OnRvZ2dsZUdyYW1tYXJDaGVja2luZygpCit7CisgICAgaWYgKCFsb2FkU3BlbGxDaGVja2VyKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fc3BlbGxDaGVja2VyLT50b2dnbGVHcmFtbWFyQ2hl
Y2tpbmcoKTsKK30KKworYm9vbCBUZXh0Q2hlY2tlckNsaWVudFF0Ojpsb2FkU3BlbGxDaGVja2Vy
KCkKK3sKKyAgICBpZiAobV9zcGVsbENoZWNrZXIpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgUXRQbGF0Zm9ybVBsdWdpbiBwbGF0Zm9ybVBsdWdpbjsKKyAgICBpZiAoKG1fc3BlbGxDaGVj
a2VyID0gcGxhdGZvcm1QbHVnaW4uY3JlYXRlU3BlbGxDaGVja2VyKCkpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmggYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDI0OWQwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmgKQEAgLTAs
MCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBMaW5kc2F5IE1hdGhpZXNvbiA8
bGluZHNheS5tYXRoaWVzb25AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIERhd2l0
IEFsZW1heWVodSAgPGFkYXdpdEBrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBUZXh0Q2hlY2tlckNsaWVudFF0X2gKKyNkZWZpbmUgVGV4dENoZWNr
ZXJDbGllbnRRdF9oCisKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgorI2luY2x1ZGUg
InF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBU
ZXh0Q2hlY2tlckNsaWVudFF0IDogcHVibGljIFRleHRDaGVja2VyQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1
YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBp
bnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIHZp
cnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNv
bnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOworICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1t
YXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFZlY3RvcjxHcmFtbWFyRGV0YWls
PiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpOworICAg
IHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0
IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpOworICAgIHZpcnR1YWwg
dm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhTcGVsbENoZWNrZXIqLCBpbnQsIFRleHRDaGVj
a2luZ1R5cGVNYXNrLCBjb25zdCBTdHJpbmcmKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0Nv
bnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgdmlydHVhbCB2b2lkIHRvZ2dsZUNv
bnRpbm91c1NwZWxsQ2hlY2tpbmcoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCk7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBsb2FkU3BlbGxDaGVja2VyKCk7CisKK3ByaXZhdGU6Cisg
ICAgT3duUHRyPFFXZWJTcGVsbENoZWNrZXI+IG1fc3BlbGxDaGVja2VyOworfTsKKworfQorCisj
ZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104623</attachid>
            <date>2011-08-20 19:34:26 -0700</date>
            <delta_ts>2011-08-21 04:47:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44114-20110821123424.patch</filename>
            <type>text/plain</type>
            <size>2125</size>
            <attacher name="Lindsay Mathieson">lindsay.mathieson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM0ODMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggYjhmMmY2YmM0OGE5
MDY0ZDkyYzc2ZmRlMDM1MWY2MDYyYzZhN2NhZS4uNjlhMDYzMTUwYzMxMDAyZWE4NmYwODQ0NjM5
OWU1NWVkYzllNzcwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0wOC0y
MCAgTGluZHNheSBNYXRoaWVzb24gIDxsaW5kc2F5Lm1hdGhpZXNvbkBnbWFpbC5jb20+CisKKyAg
ICAgICAgRml4ZXMgcGx1Z2luIHVubG9hZCBidWcgKGxvY2FsIFF0UGxhdGZvcm1QbHVnaW4pCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDExNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hl
Y2tlckNsaWVudFF0Ojpsb2FkU3BlbGxDaGVja2VyKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9UZXh0Q2hlY2tlckNsaWVudFF0Lmg6CisKIDIwMTEtMDgtMTcgIEFkYW0gUm9iZW4gIDxhcm9i
ZW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgV2ViQ29yZSBrZWVwIHRyYWNrIG9mIHRoZSBj
dXJyZW50IGRldmljZSBzY2FsZSBmYWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuY3BwCmluZGV4IDgxYjI0ZGMzNTU3
YTA2NWE0YzgzOTY0YzYwN2VkZjYwMGIzNmZmNjEuLmQ4Nzk5MmZkMWU3OTVkNzQwZjBkZWUxMzUx
YWU4NWQzNzUyYzk1YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvVGV4dENoZWNrZXJDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmNwcApAQCAtMTUyLDggKzE1Miw3IEBAIGJvb2wg
VGV4dENoZWNrZXJDbGllbnRRdDo6bG9hZFNwZWxsQ2hlY2tlcigpCiAgICAgaWYgKG1fc3BlbGxD
aGVja2VyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFF0UGxhdGZvcm1QbHVnaW4gcGxh
dGZvcm1QbHVnaW47Ci0gICAgaWYgKChtX3NwZWxsQ2hlY2tlciA9IHBsYXRmb3JtUGx1Z2luLmNy
ZWF0ZVNwZWxsQ2hlY2tlcigpKSkKKyAgICBpZiAoKG1fc3BlbGxDaGVja2VyID0gbV9wbGF0Zm9y
bVBsdWdpbi5jcmVhdGVTcGVsbENoZWNrZXIoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1RleHRDaGVja2VyQ2xpZW50UXQuaAppbmRleCAxZDI0OWQwMTM1MzhkZjI3Zjk0ZTg2ZGQx
NzVmOTRhNmI0NDMxNmFjLi5lNzhjZTFkMTBjMDVkMjM1YTZhNTRiM2JiYmVhN2VlYTlhY2U4NDgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2Vy
Q2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVj
a2VyQ2xpZW50UXQuaApAQCAtMjksNiArMjksNyBAQAogI2lmbmRlZiBUZXh0Q2hlY2tlckNsaWVu
dFF0X2gKICNkZWZpbmUgVGV4dENoZWNrZXJDbGllbnRRdF9oCiAKKyNpbmNsdWRlICJRdFBsYXRm
b3JtUGx1Z2luLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbmNsdWRlICJx
d2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKIApAQCAtNTgsNiArNTksNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgbG9hZFNwZWxsQ2hlY2tlcigpOwogCiBwcml2YXRlOgorICAgIFF0UGxhdGZvcm1QbHVn
aW4gbV9wbGF0Zm9ybVBsdWdpbjsKICAgICBPd25QdHI8UVdlYlNwZWxsQ2hlY2tlcj4gbV9zcGVs
bENoZWNrZXI7CiB9OwogCg==
</data>
<flag name="review"
          id="100510"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>