<?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>60170</bug_id>
          
          <creation_ts>2011-05-04 08:23:43 -0700</creation_ts>
          <short_desc>[Chromium] Speech-enabled input fields need the ability to trigger without a click</short_desc>
          <delta_ts>2011-09-05 05:19:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Dominic Mazzoni">dmazzoni</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>satish</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>397928</commentid>
    <comment_count>0</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-05-04 08:23:43 -0700</bug_when>
    <thetext>It needs to be possible to start speech input on speech-enabled input fields with something other than a mouse click - like a keypress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397936</commentid>
    <comment_count>1</comment_count>
      <attachid>92246</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-05-04 08:29:39 -0700</bug_when>
    <thetext>Created attachment 92246
Patch for initial feedback, still has debugging printfs - is the approach good?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405962</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-18 12:52:16 -0700</bug_when>
    <thetext>Attachment 92246 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/WebCore/html/shadow/TextControlInnerElements.cpp:495:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 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>405984</commentid>
    <comment_count>3</comment_count>
      <attachid>92246</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-18 13:19:34 -0700</bug_when>
    <thetext>Comment on attachment 92246
Patch for initial feedback, still has debugging printfs - is the approach good?

Attachment 92246 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8702872</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406024</commentid>
    <comment_count>4</comment_count>
      <attachid>92246</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-18 14:26:40 -0700</bug_when>
    <thetext>Comment on attachment 92246
Patch for initial feedback, still has debugging printfs - is the approach good?

Attachment 92246 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8705839</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406143</commentid>
    <comment_count>5</comment_count>
      <attachid>92246</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-05-18 17:40:52 -0700</bug_when>
    <thetext>Comment on attachment 92246
Patch for initial feedback, still has debugging printfs - is the approach good?

Attachment 92246 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/8702956</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406298</commentid>
    <comment_count>6</comment_count>
      <attachid>92246</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-05-19 02:23:36 -0700</bug_when>
    <thetext>Comment on attachment 92246
Patch for initial feedback, still has debugging printfs - is the approach good?

Attachment 92246 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/8719031</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415964</commentid>
    <comment_count>7</comment_count>
      <attachid>96115</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-06-06 13:17:57 -0700</bug_when>
    <thetext>Created attachment 96115
Updated patch with layout test, ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415966</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-06 13:20:31 -0700</bug_when>
    <thetext>Attachment 96115 did not pass style-queue:

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

Source/WebCore/html/shadow/TextControlInnerElements.cpp:531:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 20 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>415984</commentid>
    <comment_count>9</comment_count>
      <attachid>96120</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-06-06 13:45:44 -0700</bug_when>
    <thetext>Created attachment 96120
Fixed style error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421902</commentid>
    <comment_count>10</comment_count>
      <attachid>96120</attachid>
    <who name="Satish Sampath">satish</who>
    <bug_when>2011-06-16 04:09:39 -0700</bug_when>
    <thetext>Comment on attachment 96120
Fixed style error.

&gt; InputFieldSpeechButtonElement::onToggle()

onToggle doesn&apos;t seem like the right name for this function. It doesn&apos;t toggle between 2 states but moves the state from idle to recording and recording to waiting states. I would suggest moving the code under each case statement to separate functions and add a new toggleSpeechInputState() function which actually moves between Idle and Recording states. I think you&apos;d want a pending recognition session to be cancelled and a new one started if this toggleSpeechInputState() function was called when state == Recognizing.

&gt; RenderTextControlSingleLine::toggleSpeechRecognition()

could use the same name as mentioned above - toggleSpeechInputState()

&gt; WEBKIT_API bool isSpeechEnabled() const;

suggest changing to isSpeechInputEnabled - &quot;speech&quot; is not the same as &quot;speechInput&quot;

&gt; WEBKIT_API void toggleSpeechRecognition();
&gt; LayoutTestController::toggleSpeechInput

change to toggleSpeechInputState() as above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421980</commentid>
    <comment_count>11</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-06-16 08:52:18 -0700</bug_when>
    <thetext>You&apos;ll also need a stamp from fishd since this touches Source/WebKit/chromium/public/*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422045</commentid>
    <comment_count>12</comment_count>
      <attachid>96120</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-06-16 10:38:37 -0700</bug_when>
    <thetext>Comment on attachment 96120
Fixed style error.

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

&gt; Source/WebKit/chromium/public/WebInputElement.h:80
&gt; +        WEBKIT_API bool isSpeechEnabled() const;

it looks like toggleSpeechRecognition and isSpeechEnabled are related methods, but
they do not use the same terms.  if isSpeechEnabled is supposed to return true
when toggleSpeechRecognition enabled the feature, then isSpeechEnabled should really
be named isSpeechRecognitionEnabled.  that way the names of the methods reinforces
the relationship without need for further documentation.

also, we don&apos;t have any other &quot;toggle&quot; APIs like this.  normally, we have
isFooEnabled and enableFoo(bool).  why not follow that pattern here?

&gt; Tools/DumpRenderTree/LayoutTestController.h:112
&gt; +    void toggleSpeechInput(JSContextRef inputElement);

same nit:  seems like this would be better as a boolean setter.  why does the
caller have to guess or know the state in order to decide if they should call
toggle or not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422957</commentid>
    <comment_count>13</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-06-17 16:50:22 -0700</bug_when>
    <thetext>&gt; --- Comment #10 from Satish Sampath &lt;satish@chromium.org&gt;  2011-06-16 04:09:39 PST ---
&gt; onToggle doesn&apos;t seem like the right name for this function. It doesn&apos;t toggle between 2 states but moves the state from idle to recording and recording to waiting states. I would suggest moving the code under each case statement to separate functions and add a new toggleSpeechInputState() function which actually moves between Idle and Recording states. I think you&apos;d want a pending recognition session to be cancelled and a new one started if this toggleSpeechInputState() function was called when state == Recognizing.

I&apos;m happy with using toggleSpeechInputState, but I don&apos;t want to
change the behavior of what happens when you cancel while already in
the recognition stage - that&apos;d affect clicks as well. The goal is
simply to abstract what happens when you click now so that the &quot;click&quot;
could be triggered by a keypress instead - I don&apos;t think there&apos;s
anything wrong with the current behavior, which is to start recording
the first click, and stop recording the second click (but not cancel
recognition).

If you want different behavior for the second click, let&apos;s save that
for another change.

Or, if the current behavior is fine, maybe toggleSpeechInputState
isn&apos;t the right name for the method. How about startOrStopSpeechInput?

&gt; Darin Fisher (:fishd, Google) &lt;fishd@chromium.org&gt; changed:
&gt;&gt; Source/WebKit/chromium/public/WebInputElement.h:80
&gt;&gt; +        WEBKIT_API bool isSpeechEnabled() const;
&gt;
&gt; it looks like toggleSpeechRecognition and isSpeechEnabled are related methods, but
&gt; they do not use the same terms.  if isSpeechEnabled is supposed to return true

isSpeechEnabled means, &quot;does this input element have the
x-webkit-speech attribute, meaning that speech input is allowed?&quot;

toggleSpeechRecognition means, &quot;for an input that has speech input
enabled, start recognizing if it&apos;s not already, or stop recognizing if
you&apos;ve already started.&quot; It doesn&apos;t change the result of
isSpeechEnabled - that&apos;s controlled by the DOM element&apos;s attribute.

My proposed change: isSpeechInputEnabled and startOrStopSpeechInput.

(We could provide startSpeechInput and stopSpeechInput also, if we
think they&apos;d be needed or useful. However, a startOrStopSpeechInput is
still needed because when the user triggers speech input by an action
in the browser process, whether by a key, context menu, etc. it
doesn&apos;t make sense to send one round-trip to the renderer process to
determine the current state, then flip the state in another RPC, with
a possible race condition. Having a startOrStopSpeechInput method
exactly mimics the user behavior when they click on the microphone
icon, which is what we want.

- Dominic</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422988</commentid>
    <comment_count>14</comment_count>
      <attachid>97672</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-06-17 17:41:13 -0700</bug_when>
    <thetext>Created attachment 97672
Rename methods to be more clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423014</commentid>
    <comment_count>15</comment_count>
      <attachid>97672</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-06-17 18:55:16 -0700</bug_when>
    <thetext>Comment on attachment 97672
Rename methods to be more clear.

Attachment 97672 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/8872723</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423540</commentid>
    <comment_count>16</comment_count>
      <attachid>97672</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-06-20 01:29:17 -0700</bug_when>
    <thetext>Comment on attachment 97672
Rename methods to be more clear.

Attachment 97672 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8913438</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423597</commentid>
    <comment_count>17</comment_count>
      <attachid>97778</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-06-20 04:47:42 -0700</bug_when>
    <thetext>Created attachment 97778
Fix gtk &amp; qt errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424368</commentid>
    <comment_count>18</comment_count>
    <who name="Satish Sampath">satish</who>
    <bug_when>2011-06-21 03:26:55 -0700</bug_when>
    <thetext>&gt; The goal is simply to abstract what happens when you
&gt; click now so that the &quot;click&quot; could be triggered by a
&gt; keypress instead

I think we should not mimic the click implementation for hotkey. When early prototypes of speech input were being tested we saw many users didn&apos;t understand that they can just stop speaking and the browser would detect silence to trigger recognition. Instead they were clicking on the button again thinking it was necessary. That is the reason why we handle a click on the speech button and move to recognition state if audio was already recorded.

In the hotkey case, we can message easily to the user that they need to press the hotkey only to start speaking and once they stop speaking results will be available for them. The implementation is also much simpler as you only need to start recording on hotkey press and don&apos;t have to toggle (and can ignore hotkey if audio was already being recorded).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457197</commentid>
    <comment_count>19</comment_count>
      <attachid>97778</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-08-25 15:46:01 -0700</bug_when>
    <thetext>Comment on attachment 97778
Fix gtk &amp; qt errors

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

&gt; Source/WebKit/chromium/public/WebInputElement.h:81
&gt; +        WEBKIT_API void startOrStopSpeechInput();

This startOrStop method is a bit awkward.  It seems like the caller has
no way to know what the current state is, which means that they have to
just make a guess.  This might be OK for certain kinds of UI, or embeddings,
but it seems like it could be a pretty confusing API for others.

How about just having separate methods for starting and stopping speech input?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457200</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-08-25 15:48:22 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (We could provide startSpeechInput and stopSpeechInput also, if we
&gt; think they&apos;d be needed or useful. However, a startOrStopSpeechInput is
&gt; still needed because when the user triggers speech input by an action
&gt; in the browser process, whether by a key, context menu, etc. it
&gt; doesn&apos;t make sense to send one round-trip to the renderer process to
&gt; determine the current state, then flip the state in another RPC, with
&gt; a possible race condition. Having a startOrStopSpeechInput method
&gt; exactly mimics the user behavior when they click on the microphone
&gt; icon, which is what we want.

OK, I see that you addressed my question here.

I don&apos;t think these IPC considerations have much to do with how the WebKit API is shaped.  You could very easily have an IPC named StartOrStopSpeechInput, which could use local WebKit APIs to determine whether it makes sense to call startSpeechInput or stopSpeechInput.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457241</commentid>
    <comment_count>21</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-08-25 16:24:34 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; I don&apos;t think these IPC considerations have much to do with how the WebKit API is shaped.  You could very easily have an IPC named StartOrStopSpeechInput, which could use local WebKit APIs to determine whether it makes sense to call startSpeechInput or stopSpeechInput.

Ah, that&apos;s clear now. Thanks, I&apos;ll make that change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460319</commentid>
    <comment_count>22</comment_count>
      <attachid>105921</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-09-01 01:19:39 -0700</bug_when>
    <thetext>Created attachment 105921
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460677</commentid>
    <comment_count>23</comment_count>
      <attachid>106005</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-09-01 12:16:34 -0700</bug_when>
    <thetext>Created attachment 106005
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460680</commentid>
    <comment_count>24</comment_count>
      <attachid>106005</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-01 12:17:27 -0700</bug_when>
    <thetext>Comment on attachment 106005
Patch for landing

Rejecting attachment 106005 from commit-queue.

dmazzoni@google.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460733</commentid>
    <comment_count>25</comment_count>
      <attachid>106005</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-09-01 13:25:44 -0700</bug_when>
    <thetext>Comment on attachment 106005
Patch for landing

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

Sorry, I have an extra nit! :)

&gt; Source/WebCore/html/shadow/TextControlInnerElements.cpp:527
&gt; +    RefPtr&lt;HTMLInputElement&gt; input(static_cast&lt;HTMLInputElement*&gt;(shadowAncestorNode()));

use input = foo syntax instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460739</commentid>
    <comment_count>26</comment_count>
      <attachid>106017</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-09-01 13:32:19 -0700</bug_when>
    <thetext>Created attachment 106017
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460775</commentid>
    <comment_count>27</comment_count>
      <attachid>106017</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-01 14:14:02 -0700</bug_when>
    <thetext>Comment on attachment 106017
Patch

Clearing flags on attachment: 106017

Committed r94343: &lt;http://trac.webkit.org/changeset/94343&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460776</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-01 14:14:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462119</commentid>
    <comment_count>29</comment_count>
      <attachid>106017</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2011-09-05 05:19:54 -0700</bug_when>
    <thetext>Comment on attachment 106017
Patch

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

&gt; Source/WebCore/html/shadow/TextControlInnerElements.cpp:530
&gt; +    IntRect rect = input-&gt;renderer()-&gt;absoluteBoundingBoxRect();

This line is introducing a regression that undoes this patch: https://bugs.webkit.org/show_bug.cgi?id=65333

I&apos;ve created a separate bug to fix this: https://bugs.webkit.org/show_bug.cgi?id=67597</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92246</attachid>
            <date>2011-05-04 08:29:39 -0700</date>
            <delta_ts>2011-06-06 13:17:57 -0700</delta_ts>
            <desc>Patch for initial feedback, still has debugging printfs - is the approach good?</desc>
            <filename>webkit_speech_input0.patch</filename>
            <type>text/plain</type>
            <size>8228</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA4NTc1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTEtMDUtMDQgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkcyBhIG1ldGhvZCB0byBzaW11bGF0ZSBhIGNsaWNrIG9uIHRoZSBzcGVlY2ggYnV0dG9u
IGluIGFuIGlucHV0IGZpZWxkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjAxNjAKKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAg
ICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6
b25DbGljayk6CisgICAgICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRz
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNpbXVsYXRl
U3BlZWNoQnV0dG9uQ2xpY2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuaDoKKwogMjAxMS0wNS0wNCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4
OiBXZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
CShyZXZpc2lvbiA4NTU2NSkKKysrIFdlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIzLDIyICs0MjMsNyBAQCB2b2lkIElu
cHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpkZWZhCiAgICAgfQogCiAgICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgc3dpdGNoICht
X3N0YXRlKSB7Ci0gICAgICAgIGNhc2UgSWRsZTogewotICAgICAgICAgICAgICBBdG9taWNTdHJp
bmcgbGFuZ3VhZ2UgPSBpbnB1dC0+Y29tcHV0ZUluaGVyaXRlZExhbmd1YWdlKCk7Ci0gICAgICAg
ICAgICAgIFN0cmluZyBncmFtbWFyID0gaW5wdXQtPmdldEF0dHJpYnV0ZSh3ZWJraXRncmFtbWFy
QXR0cik7Ci0gICAgICAgICAgICAgIEludFJlY3QgcmVjdCA9IGlucHV0LT5yZW5kZXJlcigpLT5h
YnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwotICAgICAgICAgICAgICBpZiAoc3BlZWNoSW5wdXQo
KS0+c3RhcnRSZWNvZ25pdGlvbihtX2xpc3RlbmVySWQsIHJlY3QsIGxhbmd1YWdlLCBncmFtbWFy
LCBkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgICAgICAgICAgIHNldFN0
YXRlKFJlY29yZGluZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBSZWNvcmRpbmc6Ci0gICAgICAgICAgICBzcGVlY2hJbnB1dCgpLT5zdG9wUmVjb3Jk
aW5nKG1fbGlzdGVuZXJJZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZWNv
Z25pemluZzoKLSAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSwgd2Ugd2lsbCBjb250
aW51ZSB0byB3YWl0IGZvciByZXN1bHRzLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
KyAgICAgICAgb25DbGljaygpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
ICAgICB9CiAKQEAgLTUwNyw2ICs0OTIsMjYgQEAgdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9u
RWxlbWVudDo6ZGV0YQogICAgIFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpkZXRhY2goKTsKIH0K
IAordm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6b25DbGljaygpIHsKKyAgICBS
ZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5wdXQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKSk7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAg
Y2FzZSBJZGxlOiB7CisgICAgICAgIEF0b21pY1N0cmluZyBsYW5ndWFnZSA9IGlucHV0LT5jb21w
dXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsKKyAgICAgICAgU3RyaW5nIGdyYW1tYXIgPSBpbnB1dC0+
Z2V0QXR0cmlidXRlKHdlYmtpdGdyYW1tYXJBdHRyKTsKKyAgICAgICAgSW50UmVjdCByZWN0ID0g
aW5wdXQtPnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCk7CisgICAgICAgIGlm
IChzcGVlY2hJbnB1dCgpLT5zdGFydFJlY29nbml0aW9uKG1fbGlzdGVuZXJJZCwgcmVjdCwgbGFu
Z3VhZ2UsIGdyYW1tYXIsIGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICAg
ICAgc2V0U3RhdGUoUmVjb3JkaW5nKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIFJlY29yZGluZzoKKyAgICAgICAgc3BlZWNoSW5wdXQoKS0+c3RvcFJlY29yZGluZyhtX2xp
c3RlbmVySWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlY29nbml6aW5nOgorICAgICAg
ICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUsIHdlIHdpbGwgY29udGludWUgdG8gd2FpdCBmb3IgcmVz
dWx0cy4KKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAjZW5kaWYgLy8gRU5BQkxFKElOUFVU
X1NQRUVDSCkKIAogfQpJbmRleDogV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9s
SW5uZXJFbGVtZW50cy5oCShyZXZpc2lvbiA4NTU2NSkKKysrIFdlYkNvcmUvaHRtbC9zaGFkb3cv
VGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDb21wbGV0ZVJlY29yZGluZyhpbnQpOwogICAgIHZv
aWQgZGlkQ29tcGxldGVSZWNvZ25pdGlvbihpbnQpOwogICAgIHZvaWQgc2V0UmVjb2duaXRpb25S
ZXN1bHQoaW50LCBjb25zdCBTcGVlY2hJbnB1dFJlc3VsdEFycmF5Jik7CisgICAgdm9pZCBvbkNs
aWNrKCk7CiAKIHByaXZhdGU6CiAgICAgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQoSFRN
TEVsZW1lbnQqKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gODU1NjUpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTAs
NyArNTUwLDEyIEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmRlY29yYXQKICAg
ICAgICAgd2lkdGggKz0gcGFkZGluZ1JpZ2h0KCkgKyBib3JkZXJSaWdodCgpOwogICAgIHJldHVy
biB3aWR0aDsKIH0KLSAgICAKKwordm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNp
bXVsYXRlU3BlZWNoQnV0dG9uQ2xpY2soKQoreworICAgIG1fc3BlZWNoQnV0dG9uLT5vbkNsaWNr
KCk7Cit9CisKIGZsb2F0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Z2V0QXZnQ2hhcldp
ZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpCiB7CiAgICAgLy8gU2luY2UgTHVjaWRhIEdyYW5kZSBp
cyB0aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2ggdGhlIHdpZHRoCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAko
cmV2aXNpb24gODU1NjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBwdWJsaWM6CiAgICAg
Ly8gRGVjb3JhdGlvbiB3aWR0aCBvdXRzaWRlIG9mIHRoZSB0ZXh0IGZpZWxkLgogICAgIGludCBk
ZWNvcmF0aW9uV2lkdGhSaWdodCgpIGNvbnN0OwogCisgICAgdm9pZCBzaW11bGF0ZVNwZWVjaEJ1
dHRvbkNsaWNrKCk7CisKIHByaXZhdGU6CiAgICAgaW50IHByZWZlcnJlZERlY29yYXRpb25XaWR0
aFJpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGhhc0NvbnRyb2xDbGlwKCkgY29uc3Q7
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1NzUxKQorKysgV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTA1LTA0ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYW4gQVBJIGZ1bmN0aW9uIHRvIHNpbXVs
YXRlIGEgY2xpY2sgaW4gdGhlIGN1cnJlbnRseQorICAgICAgICBmb2N1c2VkIHRleHQgaW5wdXQg
d2l0aCBzcGVlY2gsIGlmIGFueS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYwMTcwCisKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAg
ICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpz
cGVlY2hJbnB1dFNpbXVsYXRlQ2xpY2spOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgor
CiAyMDExLTA1LTAzICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXcuaAkocmV2aXNpb24gODU1NjUpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzU3LDYgKzM1Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBB
UElzLgogICAgIHZpcnR1YWwgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNE
KCkgPSAwOwogCisgICAgLy8gU3BlZWNoIGlucHV0CisgICAgdmlydHVhbCB2b2lkIHNwZWVjaElu
cHV0U2ltdWxhdGVDbGljaygpID0gMDsKKwogcHJvdGVjdGVkOgogICAgIH5XZWJWaWV3KCkge30K
IH07CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gODU1NjUp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODUsNiArODUsNyBAQAogI2luY2x1ZGUgIlBvcHVwTWVudUNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCisjaW5j
bHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKQEAgLTI1NjIsNCArMjU2Myw1MSBAQCBXZWJHcmFwaGljc0NvbnRleHQzRCogV2ViVmll
d0ltcGw6OmdyYXBoCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgV2ViVmlld0ltcGw6OnNwZWVj
aElucHV0U2ltdWxhdGVDbGljaygpCit7CisgICAgaWYgKCFtX3BhZ2UuZ2V0KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgp
OworICAgIGlmICghZnJhbWUuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxE
b2N1bWVudD4gZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50
LmdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IGRvY3Vt
ZW50LT5mb2N1c2VkTm9kZSgpOworICAgIGlmICghZm9jdXNlZE5vZGUpIHsKKyAgICAgICAgcHJp
bnRmKCJObyBmb2N1c2VkIG5vZGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGZvY3VzZWROb2RlLT5yZW5kZXJlcigpOworICAgIGlm
ICghcmVuZGVyZXItPmlzVGV4dEZpZWxkKCkpIHsKKyAgICAgICAgcHJpbnRmKCJSZW5kZXJlciBp
cyBub3QgYWEgdGV4dCBmaWVsZFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIWZvY3VzZWROb2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgcHJpbnRmKCJGb2N1
c2VkIG5vZGUgaXMgbm90IGFuIGVsZW1lbnRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihmb2N1c2VkTm9k
ZSk7CisgICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxl
bWVudCgpOworICAgIGlmICghaW5wdXRFbGVtZW50KSB7CisgICAgICAgIHByaW50ZigiRm9jdXNl
ZCBub2RlIGlzIG5vdCBhbiBpbnB1dCBlbGVtZW50XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1NwZWVjaEVuYWJsZWQoKSkgeworICAgICAg
ICBwcmludGYoIlNwZWVjaCBpcyBub3QgZW5hYmxlZFxuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIGNvbnRyb2wgPSB0b1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZShyZW5kZXJlcik7CisgICAgcHJpbnRmKCJHb3QgY29udHJv
bCAlcFxuIiwgY29udHJvbCk7CisgICAgY29udHJvbC0+c2ltdWxhdGVTcGVlY2hCdXR0b25DbGlj
aygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmgJKHJldmlzaW9uIDg1NTY1KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTUsNiArMzU1LDggQEAgcHVibGljOgogICAgIC8v
IFdlYkdMLiBSZXR1cm5zIDAgaWYgY29tcG9zaXRpbmcgc3VwcG9ydCBpcyBub3QgY29tcGlsZWQg
aW4uCiAgICAgdmlydHVhbCBXZWJHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0Qo
KTsKIAorICAgIHZpcnR1YWwgdm9pZCBzcGVlY2hJbnB1dFNpbXVsYXRlQ2xpY2soKTsKKwogICAg
IFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyKiBzZWxlY3RQb3B1cCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2VsZWN0UG9wdXAuZ2V0KCk7IH0KIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXZlbnQg
bGVhZHMgdG8gc2Nyb2xsaW5nLgo=
</data>
<flag name="commit-queue"
          id="87217"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96115</attachid>
            <date>2011-06-06 13:17:57 -0700</date>
            <delta_ts>2011-06-06 13:45:44 -0700</delta_ts>
            <desc>Updated patch with layout test, ready for review.</desc>
            <filename>speech-webkit1.patch</filename>
            <type>text/plain</type>
            <size>19275</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4MTgzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYtMDYgIERvbWluaWMg
TWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIG1ldGhvZCB0byB0cmlnZ2VyIHNwZWVjaCBp
bnB1dCBkaXJlY3RseSwgc28KKyAgICAgICAgdGhhdCBhIGJyb3dzZXIgY2FuIHRyaWdnZXIgaXQg
dmlhIGEga2V5IGNvbWJpbmF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjAxNzAKKworICAgICAgICBUZXN0OiBmYXN0L3NwZWVjaC9pbnB1dC10
ZXh0LXNwZWVjaHRyaWdnZXIuaHRtbAorCisgICAgICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RmllbGRTcGVlY2hC
dXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpvblRvZ2dsZSk6CisgICAgICAgICogaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRvZ2dsZVNwZWVjaFJlY29nbml0aW9uKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CisKIDIwMTEtMDYtMDYg
IEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCShyZXZpc2lvbiA4ODE4MykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1MiwyMiArNDUyLDcgQEAgdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0
dG9uRWxlbWVudDo6ZGVmYQogICAgIH0KIAogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5jbGlja0V2ZW50ICYmIG1fbGlzdGVuZXJJZCkgewotICAgICAgICBzd2l0Y2ggKG1f
c3RhdGUpIHsKLSAgICAgICAgY2FzZSBJZGxlOiB7Ci0gICAgICAgICAgICAgIEF0b21pY1N0cmlu
ZyBsYW5ndWFnZSA9IGlucHV0LT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsKLSAgICAgICAg
ICAgICAgU3RyaW5nIGdyYW1tYXIgPSBpbnB1dC0+Z2V0QXR0cmlidXRlKHdlYmtpdGdyYW1tYXJB
dHRyKTsKLSAgICAgICAgICAgICAgSW50UmVjdCByZWN0ID0gaW5wdXQtPnJlbmRlcmVyKCktPmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KCk7Ci0gICAgICAgICAgICAgIGlmIChzcGVlY2hJbnB1dCgp
LT5zdGFydFJlY29nbml0aW9uKG1fbGlzdGVuZXJJZCwgcmVjdCwgbGFuZ3VhZ2UsIGdyYW1tYXIs
IGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQotICAgICAgICAgICAgICAgICAgc2V0U3Rh
dGUoUmVjb3JkaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFJlY29yZGluZzoKLSAgICAgICAgICAgIHNwZWVjaElucHV0KCktPnN0b3BSZWNvcmRp
bmcobV9saXN0ZW5lcklkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlY29n
bml6aW5nOgotICAgICAgICAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLCB3ZSB3aWxsIGNvbnRp
bnVlIHRvIHdhaXQgZm9yIHJlc3VsdHMuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQor
ICAgICAgICBvblRvZ2dsZSgpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
ICAgICB9CiAKQEAgLTU0Myw2ICs1MjgsMjYgQEAgdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9u
RWxlbWVudDo6ZGV0YQogICAgIEhUTUxEaXZFbGVtZW50OjpkZXRhY2goKTsKIH0KIAordm9pZCBJ
bnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6b25Ub2dnbGUoKSB7CisgICAgUmVmUHRyPEhU
TUxJbnB1dEVsZW1lbnQ+IGlucHV0KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzaGFk
b3dBbmNlc3Rvck5vZGUoKSkpOworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgSWRs
ZTogeworICAgICAgICBBdG9taWNTdHJpbmcgbGFuZ3VhZ2UgPSBpbnB1dC0+Y29tcHV0ZUluaGVy
aXRlZExhbmd1YWdlKCk7CisgICAgICAgIFN0cmluZyBncmFtbWFyID0gaW5wdXQtPmdldEF0dHJp
YnV0ZSh3ZWJraXRncmFtbWFyQXR0cik7CisgICAgICAgIEludFJlY3QgcmVjdCA9IGlucHV0LT5y
ZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOworICAgICAgICBpZiAoc3BlZWNo
SW5wdXQoKS0+c3RhcnRSZWNvZ25pdGlvbihtX2xpc3RlbmVySWQsIHJlY3QsIGxhbmd1YWdlLCBn
cmFtbWFyLCBkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAgIHNldFN0
YXRlKFJlY29yZGluZyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWNv
cmRpbmc6CisgICAgICAgIHNwZWVjaElucHV0KCktPnN0b3BSZWNvcmRpbmcobV9saXN0ZW5lcklk
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWNvZ25pemluZzoKKyAgICAgICAgLy8gTm90
aGluZyB0byBkbyBoZXJlLCB3ZSB3aWxsIGNvbnRpbnVlIHRvIHdhaXQgZm9yIHJlc3VsdHMuCisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBJbnB1dEZpZWxk
U3BlZWNoQnV0dG9uRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogewogICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBwc2V1ZG9JZCwgKCItd2Via2l0LWlucHV0LXNw
ZWVjaC1idXR0b24iKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkocmV2aXNpb24gODgxODMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ5LDYgKzE0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENvbXBsZXRl
UmVjb3JkaW5nKGludCk7CiAgICAgdm9pZCBkaWRDb21wbGV0ZVJlY29nbml0aW9uKGludCk7CiAg
ICAgdm9pZCBzZXRSZWNvZ25pdGlvblJlc3VsdChpbnQsIGNvbnN0IFNwZWVjaElucHV0UmVzdWx0
QXJyYXkmKTsKKyAgICB2b2lkIG9uVG9nZ2xlKCk7CiAKIHByaXZhdGU6CiAgICAgSW5wdXRGaWVs
ZFNwZWVjaEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShy
ZXZpc2lvbiA4ODE4MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjUsNiArNTI1LDE1IEBAIGlu
dCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHRCbG8KICAgICByZXR1cm4gd2lkdGg7
CiB9CiAKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQordm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnRvZ2dsZVNwZWVjaFJlY29nbml0aW9uKCkKK3sKKyAgICBJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uRWxlbWVudCogc3BlZWNoQnV0dG9uID0gdG9JbnB1dEZpZWxkU3BlZWNoQnV0dG9u
RWxlbWVudChzcGVlY2hCdXR0b25FbGVtZW50KCkpOworICAgIGlmIChzcGVlY2hCdXR0b24pCisg
ICAgICAgIHNwZWVjaEJ1dHRvbi0+b25Ub2dnbGUoKTsKK30KKyNlbmRpZgorCiBmbG9hdCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmdldEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFt
aWx5KQogewogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQgZm9udCwg
d2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2aXNp
b24gODgxODMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDEwIEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgY2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CiAKKyNpZiBFTkFCTEUoSU5Q
VVRfU1BFRUNIKQorICAgIHZvaWQgdG9nZ2xlU3BlZWNoUmVjb2duaXRpb24oKTsKKyNlbmRpZgor
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBoYXNDb250cm9sQ2xpcCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgSW50UmVjdCBjb250cm9sQ2xpcFJlY3QoY29uc3QgSW50UG9pbnQmKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4ODE4MykKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTEtMDYtMDYgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIG1l
dGhvZCB0byB0cmlnZ2VyIHNwZWVjaCBpbnB1dCBkaXJlY3RseSwgc28KKyAgICAgICAgdGhhdCBh
IGJyb3dzZXIgY2FuIHRyaWdnZXIgaXQgdmlhIGEga2V5IGNvbWJpbmF0aW9uLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAxNzAKKworICAgICAgICAq
IHB1YmxpYy9XZWJJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBzcmMvV2ViSW5wdXRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5wdXRFbGVtZW50Ojppc1NwZWVjaEVuYWJsZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnB1dEVsZW1lbnQ6OnRvZ2dsZVNwZWVjaFJlY29nbml0
aW9uKToKKwogMjAxMS0wNi0wNiAgU2hpc2hpciBBZ3Jhd2FsICA8c2hpc2hpckBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBHZW50aWxjb3JlLgpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFbGVtZW50LmgJKHJldmlzaW9u
IDg4MTgzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAg
ICAgICAgIFdFQktJVF9BUEkgaW50IHNlbGVjdGlvbkVuZCgpIGNvbnN0OwogICAgICAgICBXRUJL
SVRfQVBJIGJvb2wgaXNWYWxpZFZhbHVlKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwogICAgICAg
ICBXRUJLSVRfQVBJIGJvb2wgaXNDaGVja2VkKCkgY29uc3Q7CisgICAgICAgIFdFQktJVF9BUEkg
Ym9vbCBpc1NwZWVjaEVuYWJsZWQoKSBjb25zdDsKKyAgICAgICAgV0VCS0lUX0FQSSB2b2lkIHRv
Z2dsZVNwZWVjaFJlY29nbml0aW9uKCk7CiAKICAgICAgICAgLy8gRXhwb3NlcyB0aGUgZGVmYXVs
dCB2YWx1ZSBvZiB0aGUgbWF4TGVuZ3RoIGF0dHJpYnV0ZS4KICAgICAgICAgV0VCS0lUX0FQSSBz
dGF0aWMgaW50IGRlZmF1bHRNYXhMZW5ndGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gODgxODMpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw4IEBACiAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAi
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIApAQCAtMTUwLDYgKzE1MiwyNyBAQCBib29sIFdl
YklucHV0RWxlbWVudDo6aXNDaGVja2VkKCkgY29uc3QKICAgICByZXR1cm4gY29uc3RVbndyYXA8
SFRNTElucHV0RWxlbWVudD4oKS0+Y2hlY2tlZCgpOwogfQogCitib29sIFdlYklucHV0RWxlbWVu
dDo6aXNTcGVlY2hFbmFibGVkKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQor
ICAgIHJldHVybiBjb25zdFVud3JhcDxIVE1MSW5wdXRFbGVtZW50PigpLT5pc1NwZWVjaEVuYWJs
ZWQoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5w
dXRFbGVtZW50Ojp0b2dnbGVTcGVlY2hSZWNvZ25pdGlvbigpCit7CisjaWYgRU5BQkxFKElOUFVU
X1NQRUVDSCkKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29uc3RVbndyYXA8SFRNTElu
cHV0RWxlbWVudD4oKS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIGNvbnRyb2wgPSB0b1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZShyZW5kZXJlcik7CisgICAgY29udHJvbC0+dG9nZ2xl
U3BlZWNoUmVjb2duaXRpb24oKTsKKyNlbmRpZgorfQorCiBpbnQgV2ViSW5wdXRFbGVtZW50Ojpk
ZWZhdWx0TWF4TGVuZ3RoKCkKIHsKICAgICByZXR1cm4gSFRNTElucHV0RWxlbWVudDo6bWF4aW11
bUxlbmd0aDsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDg4MTgzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDYtMDYgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25p
QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkcyBhIHRlc3QgY29udHJvbGxlciBtZXRob2QgdG8gdHJpZ2dlciBzcGVlY2ggaW5w
dXQgb24gYSBnaXZlbgorICAgICAgICBpbnB1dCBlbGVtZW50LiBJbXBsZW1lbnRlZCBmb3IgQ2hy
b21pdW0gb25seS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYwMTcwCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJv
bGxlcik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6dG9nZ2xlU3BlZWNoSW5wdXQp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVy
Lmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3Rr
LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjp0b2dnbGVTcGVlY2hJbnB1dCk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1t
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnRvZ2dsZVNwZWVjaElucHV0KToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjp0b2dnbGVTcGVlY2hJbnB1dCk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcDoKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjp0b2dnbGVTcGVlY2hJbnB1dCk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHA6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6dG9nZ2xlU3BlZWNoSW5wdXQpOgorCiAyMDExLTA2LTA2ICBZ
b25nIExpICA8eW9saUByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVs
LgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShy
ZXZpc2lvbiA4ODE4MykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwgSlNTdHJpbmdSZWYgbWVzc2FnZSk7
CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRv
dWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSk7CiAgICAgdm9pZCBhZGRNb2NrU3BlZWNo
SW5wdXRSZXN1bHQoSlNTdHJpbmdSZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgSlNTdHJp
bmdSZWYgbGFuZ3VhZ2UpOworICAgIHZvaWQgdG9nZ2xlU3BlZWNoSW5wdXQoSlNDb250ZXh0UmVm
IGlucHV0RWxlbWVudCk7CiAgICAgdm9pZCBzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihKU1N0cmluZ1JlZiBwYXRoKTsKICAgICB2b2lkIHNldFBsdWdpbnNFbmFibGVkKGJvb2wg
ZmxhZyk7CiAgICAgdm9pZCBzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGZsYWcpOwpJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gODgxODMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw2
ICsxNjMsNyBAQCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsCiAgICAg
YmluZE1ldGhvZCgic2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKTsKICAgICBiaW5kTWV0aG9kKCJzZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24pOwogICAgIGJpbmRNZXRob2QoImFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KTsKKyAgICBi
aW5kTWV0aG9kKCJ0b2dnbGVTcGVlY2hJbnB1dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6dG9n
Z2xlU3BlZWNoSW5wdXQpOwogICAgIGJpbmRNZXRob2QoInNldFBhZ2VWaXNpYmlsaXR5IiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eSk7CiAgICAgYmluZE1ldGhvZCgi
c2V0UGx1Z2luc0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFi
bGVkKTsKICAgICBiaW5kTWV0aG9kKCJzZXRQb3B1cEJsb2NraW5nRW5hYmxlZCIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQpOwpAQCAtMTc1NCw2ICsxNzU1
LDI2IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICBtX3No
ZWxsLT53ZWJWaWV3SG9zdCgpLT5zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrKCktPmFkZE1vY2tS
ZWNvZ25pdGlvblJlc3VsdChjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgYXJn
dW1lbnRzWzFdLnRvRG91YmxlKCksIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0p
KTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6dG9nZ2xlU3BlZWNoSW5wdXQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxKQorICAg
ICAgICByZXR1cm47CisKKyAgICBXZWJFbGVtZW50IGVsZW1lbnQ7CisgICAgaWYgKCFXZWJCaW5k
aW5nczo6Z2V0RWxlbWVudChhcmd1bWVudHNbMF0udmFsdWUub2JqZWN0VmFsdWUsICZlbGVtZW50
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvV2Vi
SW5wdXRFbGVtZW50KCZlbGVtZW50KTsKKyAgICBpZiAoIWlucHV0KQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIWlucHV0LT5pc1NwZWVjaEVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW5wdXQtPnRvZ2dsZVNwZWVjaFJlY29nbml0aW9uKCk7Cit9CisKIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldChtX3NoZWxsLT53ZWJW
aWV3KCktPm1haW5GcmFtZSgpLT5sYXllclRyZWVBc1RleHQobV9zaG93RGVidWdMYXllclRyZWUp
LnV0ZjgoKSk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0xheW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDg4MTgzKQorKysgVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQ5LDYgKzM0OSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFNwZWVjaCBpbnB1dCByZWxhdGVk
IGZ1bmN0aW9ucy4KICAgICB2b2lkIGFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCB0b2dnbGVTcGVlY2hJbnB1dChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKICAgICB2b2lkIGxheWVyVHJl
ZUFzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCk7
CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RD
b250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gODgxODMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDUs
NiArNTA1LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAg
ICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1Lgog
fQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp0b2dnbGVTcGVlY2hJbnB1dChKU0NvbnRl
eHRSZWYgaW5wdXRFbGVtZW50KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVj
aCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOwpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5t
bQkocmV2aXNpb24gODgxODMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVz
dENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4Niw2ICs0ODYsMTIgQEAgdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaAogICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9CiAKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnRvZ2dsZVNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1l
bnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0
ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM5NDg1LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VF
bmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTogV29ya2Fy
b3VuZCA8cmRhcjovL3Byb2JsZW0vNjQ4MDEwOD4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCShyZXZpc2lvbiA4ODE4MykK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NzAsNiArODcwLDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFkZE1vY2tTcGVlY2gKICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp0b2dn
bGVTcGVlY2hJbnB1dChjb25zdCBRU3RyaW5nJiBpbnB1dEVsZW1lbnQpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCiB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChpbnQg
d29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQogewogICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChtX2RydC0+d2ViUGFnZSgpLT5t
YWluRnJhbWUoKSwgd29ybGRJRCwgc2NyaXB0KTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gODgx
ODMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzEsNiArNDcxLDEyIEBAIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
Ojp0b2dnbGVTcGVlY2hJbnB1dChKU0NvbnRleHRSZWYgaW5wdXRFbGVtZW50KQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KK30KKwog
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGlj
b25EYXRhYmFzZUVuYWJsZWQpCiB7CiAgICAgLy8gU2VlIGFsc28gPHJkYXI6Ly9wcm9ibGVtLzY0
ODAxMDg+CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxl
cld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0
Q29udHJvbGxlcld4LmNwcAkocmV2aXNpb24gODgxODMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDYg
KzM3NiwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoCiAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0K
IAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6dG9nZ2xlU3BlZWNoSW5wdXQoSlNDb250ZXh0
UmVmIGlucHV0RWxlbWVudCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2gg
aW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBpY29uRGF0YWJhc2VFbmFibGVkKQogewogICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4MTgzKQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDYtMDYg
IERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIG5ldyB0ZXN0IHRoYXQgY2hl
Y2tzIHRyaWdnZXJpbmcgc3BlZWNoIGlucHV0IGRpcmVjdGx5LCBzbworICAgICAgICB0aGF0IGEg
YnJvd3NlciBjYW4gdHJpZ2dlciBpdCB2aWEgYSBrZXkgY29tYmluYXRpb24uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDE3MAorCisgICAgICAgICog
ZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2h0cmlnZ2VyLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2h0cmlnZ2VyLmh0bWw6IEFk
ZGVkLgorCiAyMDExLTA2LTA2ICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgV2luZG93cyBEUlQgbmVlZHMgYW4gaW1wbGVtZW50YXRpb24gb2Ygc2hhZG93Um9v
dC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNodHJpZ2dl
ci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvaW5w
dXQtdGV4dC1zcGVlY2h0cmlnZ2VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNodHJpZ2dlci1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3RzIGZvciB0cmlnZ2VyaW5nIHNwZWVj
aCBkaXJlY3RseSBpbiBhIDxpbnB1dCB0eXBlPSJ0ZXh0IiBzcGVlY2g+LgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BlZWNo
SW5wdXQiKS52YWx1ZSBpcyAiUGljdHVyZXMgb2YgYSBzdW5zZXQiCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjog
TGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2h0cmlnZ2VyLWV4cGVjdGVk
LnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHRyaWdnZXIuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHRyaWdnZXIu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQt
c3BlZWNodHJpZ2dlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNj
cmlwdGlvbignVGVzdHMgZm9yIHRyaWdnZXJpbmcgc3BlZWNoIGRpcmVjdGx5IGluIGEgJmx0O2lu
cHV0IHR5cGU9InRleHQiIHNwZWVjaD4uJyk7CisKK2Z1bmN0aW9uIHN0YXJ0U3BlZWNoSW5wdXQo
aWQpIHsKKyAgICAvLyBUZXN0IHRoYXQgd2UgY2FuIHRyaWdnZXIgc3BlZWNoIHdpdGggYSBtZXRo
b2QgY2FsbCB0byB0aGUgaW5wdXQKKyAgICAvLyBlbGVtZW50LCBzbyB0aGUgdXNlciBhZ2VudCBj
b3VsZCB0b2dnbGUgc3BlZWNoIHZpYSBhIGtleXByZXNzLAorICAgIC8vIGZvciBleGFtcGxlLgor
ICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci50b2dnbGVTcGVlY2hJbnB1dChpbnB1dCk7Cit9CisKK2Z1bmN0aW9uIG9u
V2Via2l0U3BlZWNoQ2hhbmdlKCkgeworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInNwZWVjaElucHV0IikudmFsdWUnLCAnUGljdHVyZXMgb2YgYSBz
dW5zZXQnKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gcnVuKCkgeworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93LmV2ZW50U2VuZGVyKSB7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCgn
UGljdHVyZXMgb2YgYSBzdW5zZXQnLCAxLjAsICcnKTsKKyAgICAgICAgc3RhcnRTcGVlY2hJbnB1
dCgic3BlZWNoSW5wdXQiKTsKKyAgICB9Cit9CisKK3dpbmRvdy5vbmxvYWQgPSBydW47Cit3aW5k
b3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPGlucHV0IGlkPSdzcGVlY2hJbnB1dCcgeC13ZWJraXQtc3BlZWNoIG9u
d2Via2l0c3BlZWNoY2hhbmdlPSJvbldlYmtpdFNwZWVjaENoYW5nZSgpIj4KKzwvYm9keT4KKzwv
aHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0
LXRleHQtc3BlZWNodHJpZ2dlci5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
ICAgKyBMRgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96120</attachid>
            <date>2011-06-06 13:45:44 -0700</date>
            <delta_ts>2011-06-17 17:41:13 -0700</delta_ts>
            <desc>Fixed style error.</desc>
            <filename>speech-webkit2.patch</filename>
            <type>text/plain</type>
            <size>19276</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4MTgzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYtMDYgIERvbWluaWMg
TWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIG1ldGhvZCB0byB0cmlnZ2VyIHNwZWVjaCBp
bnB1dCBkaXJlY3RseSwgc28KKyAgICAgICAgdGhhdCBhIGJyb3dzZXIgY2FuIHRyaWdnZXIgaXQg
dmlhIGEga2V5IGNvbWJpbmF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjAxNzAKKworICAgICAgICBUZXN0OiBmYXN0L3NwZWVjaC9pbnB1dC10
ZXh0LXNwZWVjaHRyaWdnZXIuaHRtbAorCisgICAgICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RmllbGRTcGVlY2hC
dXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpvblRvZ2dsZSk6CisgICAgICAgICogaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRvZ2dsZVNwZWVjaFJlY29nbml0aW9uKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CisKIDIwMTEtMDYtMDYg
IEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCShyZXZpc2lvbiA4ODE4MykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1MiwyMiArNDUyLDcgQEAgdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0
dG9uRWxlbWVudDo6ZGVmYQogICAgIH0KIAogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5jbGlja0V2ZW50ICYmIG1fbGlzdGVuZXJJZCkgewotICAgICAgICBzd2l0Y2ggKG1f
c3RhdGUpIHsKLSAgICAgICAgY2FzZSBJZGxlOiB7Ci0gICAgICAgICAgICAgIEF0b21pY1N0cmlu
ZyBsYW5ndWFnZSA9IGlucHV0LT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsKLSAgICAgICAg
ICAgICAgU3RyaW5nIGdyYW1tYXIgPSBpbnB1dC0+Z2V0QXR0cmlidXRlKHdlYmtpdGdyYW1tYXJB
dHRyKTsKLSAgICAgICAgICAgICAgSW50UmVjdCByZWN0ID0gaW5wdXQtPnJlbmRlcmVyKCktPmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KCk7Ci0gICAgICAgICAgICAgIGlmIChzcGVlY2hJbnB1dCgp
LT5zdGFydFJlY29nbml0aW9uKG1fbGlzdGVuZXJJZCwgcmVjdCwgbGFuZ3VhZ2UsIGdyYW1tYXIs
IGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQotICAgICAgICAgICAgICAgICAgc2V0U3Rh
dGUoUmVjb3JkaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFJlY29yZGluZzoKLSAgICAgICAgICAgIHNwZWVjaElucHV0KCktPnN0b3BSZWNvcmRp
bmcobV9saXN0ZW5lcklkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlY29n
bml6aW5nOgotICAgICAgICAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLCB3ZSB3aWxsIGNvbnRp
bnVlIHRvIHdhaXQgZm9yIHJlc3VsdHMuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQor
ICAgICAgICBvblRvZ2dsZSgpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
ICAgICB9CiAKQEAgLTU0Myw2ICs1MjgsMjcgQEAgdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9u
RWxlbWVudDo6ZGV0YQogICAgIEhUTUxEaXZFbGVtZW50OjpkZXRhY2goKTsKIH0KIAordm9pZCBJ
bnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6b25Ub2dnbGUoKQoreworICAgIFJlZlB0cjxI
VE1MSW5wdXRFbGVtZW50PiBpbnB1dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hh
ZG93QW5jZXN0b3JOb2RlKCkpKTsKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIElk
bGU6IHsKKyAgICAgICAgQXRvbWljU3RyaW5nIGxhbmd1YWdlID0gaW5wdXQtPmNvbXB1dGVJbmhl
cml0ZWRMYW5ndWFnZSgpOworICAgICAgICBTdHJpbmcgZ3JhbW1hciA9IGlucHV0LT5nZXRBdHRy
aWJ1dGUod2Via2l0Z3JhbW1hckF0dHIpOworICAgICAgICBJbnRSZWN0IHJlY3QgPSBpbnB1dC0+
cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKKyAgICAgICAgaWYgKHNwZWVj
aElucHV0KCktPnN0YXJ0UmVjb2duaXRpb24obV9saXN0ZW5lcklkLCByZWN0LCBsYW5ndWFnZSwg
Z3JhbW1hciwgZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICBzZXRT
dGF0ZShSZWNvcmRpbmcpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVj
b3JkaW5nOgorICAgICAgICBzcGVlY2hJbnB1dCgpLT5zdG9wUmVjb3JkaW5nKG1fbGlzdGVuZXJJ
ZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVjb2duaXppbmc6CisgICAgICAgIC8vIE5v
dGhpbmcgdG8gZG8gaGVyZSwgd2Ugd2lsbCBjb250aW51ZSB0byB3YWl0IGZvciByZXN1bHRzLgor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYgSW5wdXRGaWVs
ZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIHsKICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgcHNldWRvSWQsICgiLXdlYmtpdC1pbnB1dC1z
cGVlY2gtYnV0dG9uIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgJKHJldmlzaW9uIDg4MTgzKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0OSw2ICsxNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDb21wbGV0
ZVJlY29yZGluZyhpbnQpOwogICAgIHZvaWQgZGlkQ29tcGxldGVSZWNvZ25pdGlvbihpbnQpOwog
ICAgIHZvaWQgc2V0UmVjb2duaXRpb25SZXN1bHQoaW50LCBjb25zdCBTcGVlY2hJbnB1dFJlc3Vs
dEFycmF5Jik7CisgICAgdm9pZCBvblRvZ2dsZSgpOwogCiBwcml2YXRlOgogICAgIElucHV0Rmll
bGRTcGVlY2hCdXR0b25FbGVtZW50KERvY3VtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAko
cmV2aXNpb24gODgxODMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI1LDYgKzUyNSwxNSBAQCBp
bnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmxvCiAgICAgcmV0dXJuIHdpZHRo
OwogfQogCisjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKK3ZvaWQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjp0b2dnbGVTcGVlY2hSZWNvZ25pdGlvbigpCit7CisgICAgSW5wdXRGaWVsZFNw
ZWVjaEJ1dHRvbkVsZW1lbnQqIHNwZWVjaEJ1dHRvbiA9IHRvSW5wdXRGaWVsZFNwZWVjaEJ1dHRv
bkVsZW1lbnQoc3BlZWNoQnV0dG9uRWxlbWVudCgpKTsKKyAgICBpZiAoc3BlZWNoQnV0dG9uKQor
ICAgICAgICBzcGVlY2hCdXR0b24tPm9uVG9nZ2xlKCk7Cit9CisjZW5kaWYKKwogZmxvYXQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZh
bWlseSkKIHsKICAgICAvLyBTaW5jZSBMdWNpZGEgR3JhbmRlIGlzIHRoZSBkZWZhdWx0IGZvbnQs
IHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHJldmlz
aW9uIDg4MTgzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgpOwogCisjaWYgRU5BQkxFKElO
UFVUX1NQRUVDSCkKKyAgICB2b2lkIHRvZ2dsZVNwZWVjaFJlY29nbml0aW9uKCk7CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIEludFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IEludFBvaW50JikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODgxODMpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2
IEBACisyMDExLTA2LTA2ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBt
ZXRob2QgdG8gdHJpZ2dlciBzcGVlY2ggaW5wdXQgZGlyZWN0bHksIHNvCisgICAgICAgIHRoYXQg
YSBicm93c2VyIGNhbiB0cmlnZ2VyIGl0IHZpYSBhIGtleSBjb21iaW5hdGlvbi4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMTcwCisKKyAgICAgICAg
KiBwdWJsaWMvV2ViSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICogc3JjL1dlYklucHV0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklucHV0RWxlbWVudDo6aXNTcGVlY2hFbmFibGVk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5wdXRFbGVtZW50Ojp0b2dnbGVTcGVlY2hSZWNvZ25p
dGlvbik6CisKIDIwMTEtMDYtMDYgIFNoaXNoaXIgQWdyYXdhbCAgPHNoaXNoaXJAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgR2VudGlsY29yZS4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RWxlbWVudC5oCShyZXZpc2lv
biA4ODE4MykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
ICAgICAgICBXRUJLSVRfQVBJIGludCBzZWxlY3Rpb25FbmQoKSBjb25zdDsKICAgICAgICAgV0VC
S0lUX0FQSSBib29sIGlzVmFsaWRWYWx1ZShjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKICAgICAg
ICAgV0VCS0lUX0FQSSBib29sIGlzQ2hlY2tlZCgpIGNvbnN0OworICAgICAgICBXRUJLSVRfQVBJ
IGJvb2wgaXNTcGVlY2hFbmFibGVkKCkgY29uc3Q7CisgICAgICAgIFdFQktJVF9BUEkgdm9pZCB0
b2dnbGVTcGVlY2hSZWNvZ25pdGlvbigpOwogCiAgICAgICAgIC8vIEV4cG9zZXMgdGhlIGRlZmF1
bHQgdmFsdWUgb2YgdGhlIG1heExlbmd0aCBhdHRyaWJ1dGUuCiAgICAgICAgIFdFQktJVF9BUEkg
c3RhdGljIGludCBkZWZhdWx0TWF4TGVuZ3RoKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg4MTgzKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNiArMzMsOCBAQAogCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUg
IlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKQEAgLTE1MCw2ICsxNTIsMjcgQEAgYm9vbCBX
ZWJJbnB1dEVsZW1lbnQ6OmlzQ2hlY2tlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnN0VW53cmFw
PEhUTUxJbnB1dEVsZW1lbnQ+KCktPmNoZWNrZWQoKTsKIH0KIAorYm9vbCBXZWJJbnB1dEVsZW1l
bnQ6OmlzU3BlZWNoRW5hYmxlZCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkK
KyAgICByZXR1cm4gY29uc3RVbndyYXA8SFRNTElucHV0RWxlbWVudD4oKS0+aXNTcGVlY2hFbmFi
bGVkKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFdlYklu
cHV0RWxlbWVudDo6dG9nZ2xlU3BlZWNoUmVjb2duaXRpb24oKQoreworI2lmIEVOQUJMRShJTlBV
VF9TUEVFQ0gpCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvbnN0VW53cmFwPEhUTUxJ
bnB1dEVsZW1lbnQ+KCktPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKiBjb250cm9sID0gdG9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUocmVuZGVyZXIpOworICAgIGNvbnRyb2wtPnRvZ2ds
ZVNwZWVjaFJlY29nbml0aW9uKCk7CisjZW5kaWYKK30KKwogaW50IFdlYklucHV0RWxlbWVudDo6
ZGVmYXVsdE1heExlbmd0aCgpCiB7CiAgICAgcmV0dXJuIEhUTUxJbnB1dEVsZW1lbnQ6Om1heGlt
dW1MZW5ndGg7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA4ODE4MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDI3IEBACisyMDExLTA2LTA2ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9u
aUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZHMgYSB0ZXN0IGNvbnRyb2xsZXIgbWV0aG9kIHRvIHRyaWdnZXIgc3BlZWNoIGlu
cHV0IG9uIGEgZ2l2ZW4KKyAgICAgICAgaW5wdXQgZWxlbWVudC4gSW1wbGVtZW50ZWQgZm9yIENo
cm9taXVtIG9ubHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MDE3MAorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRy
b2xsZXIpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnRvZ2dsZVNwZWVjaElucHV0
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0
ay5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6dG9nZ2xlU3BlZWNoSW5wdXQp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5t
bToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjp0b2dnbGVTcGVlY2hJbnB1dCk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6dG9nZ2xlU3BlZWNoSW5wdXQpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6dG9nZ2xlU3BlZWNoSW5wdXQpOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnRvZ2dsZVNwZWVjaElucHV0KToKKwogMjAxMS0wNi0wNiAg
WW9uZyBMaSAgPHlvbGlAcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRl
bC4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAko
cmV2aXNpb24gODgxODMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoaW50IGNvZGUsIEpTU3RyaW5nUmVmIG1lc3NhZ2Up
OwogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBk
b3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpOwogICAgIHZvaWQgYWRkTW9ja1NwZWVj
aElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIEpTU3Ry
aW5nUmVmIGxhbmd1YWdlKTsKKyAgICB2b2lkIHRvZ2dsZVNwZWVjaElucHV0KEpTQ29udGV4dFJl
ZiBpbnB1dEVsZW1lbnQpOwogICAgIHZvaWQgc2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9j
YXRpb24oSlNTdHJpbmdSZWYgcGF0aCk7CiAgICAgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChib29s
IGZsYWcpOwogICAgIHZvaWQgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBmbGFnKTsKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDg4MTgzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMs
NiArMTYzLDcgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbAogICAg
IGJpbmRNZXRob2QoInNldE1vY2tHZW9sb2NhdGlvbkVycm9yIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcik7CiAgICAgYmluZE1ldGhvZCgic2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uKTsKICAgICBiaW5kTWV0aG9kKCJhZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCk7CisgICAg
YmluZE1ldGhvZCgidG9nZ2xlU3BlZWNoSW5wdXQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnRv
Z2dsZVNwZWVjaElucHV0KTsKICAgICBiaW5kTWV0aG9kKCJzZXRQYWdlVmlzaWJpbGl0eSIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxpdHkpOwogICAgIGJpbmRNZXRob2Qo
InNldFBsdWdpbnNFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5h
YmxlZCk7CiAgICAgYmluZE1ldGhvZCgic2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKTsKQEAgLTE3NTQsNiArMTc1
NSwyNiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoCiAgICAgbV9z
aGVsbC0+d2ViVmlld0hvc3QoKS0+c3BlZWNoSW5wdXRDb250cm9sbGVyTW9jaygpLT5hZGRNb2Nr
UmVjb2duaXRpb25SZXN1bHQoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSksIGFy
Z3VtZW50c1sxXS50b0RvdWJsZSgpLCBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJd
KSk7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnRvZ2dsZVNwZWVjaElucHV0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgV2ViRWxlbWVudCBlbGVtZW50OworICAgIGlmICghV2ViQmlu
ZGluZ3M6OmdldEVsZW1lbnQoYXJndW1lbnRzWzBdLnZhbHVlLm9iamVjdFZhbHVlLCAmZWxlbWVu
dCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYklucHV0RWxlbWVudCogaW5wdXQgPSB0b1dl
YklucHV0RWxlbWVudCgmZWxlbWVudCk7CisgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFpbnB1dC0+aXNTcGVlY2hFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlucHV0LT50b2dnbGVTcGVlY2hSZWNvZ25pdGlvbigpOworfQorCiB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXQobV9zaGVsbC0+d2Vi
VmlldygpLT5tYWluRnJhbWUoKS0+bGF5ZXJUcmVlQXNUZXh0KG1fc2hvd0RlYnVnTGF5ZXJUcmVl
KS51dGY4KCkpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVz
dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiA4ODE4MykKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0OSw2ICszNDksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBTcGVlY2ggaW5wdXQgcmVsYXRl
ZCBmdW5jdGlvbnMuCiAgICAgdm9pZCBhZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgdG9nZ2xlU3BlZWNoSW5wdXQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCiAgICAgdm9pZCBsYXllclRy
ZWVBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQp
OwogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0
Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDg4MTgzKQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA1
LDYgKzUwNSwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoCiAg
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4K
IH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6dG9nZ2xlU3BlZWNoSW5wdXQoSlNDb250
ZXh0UmVmIGlucHV0RWxlbWVudCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVl
Y2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIFdlYktpdEljb25E
YXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMu
bW0JKHJldmlzaW9uIDg4MTgzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRl
c3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00ODYsNiArNDg2LDEyIEBAIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjp0b2dnbGVTcGVlY2hJbnB1dChKU0NvbnRleHRSZWYgaW5wdXRFbGVt
ZW50KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQg
dGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zOTQ4NS4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNl
RW5hYmxlZChib29sIGljb25EYXRhYmFzZUVuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IFdvcmth
cm91bmQgPHJkYXI6Ly9wcm9ibGVtLzY0ODAxMDg+CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAkocmV2aXNpb24gODgxODMp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODcwLDYgKzg3MCwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjphZGRNb2NrU3BlZWNoCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6dG9n
Z2xlU3BlZWNoSW5wdXQoY29uc3QgUVN0cmluZyYgaW5wdXRFbGVtZW50KQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KK30KKwogdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoaW50
IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQobV9kcnQtPndlYlBhZ2UoKS0+
bWFpbkZyYW1lKCksIHdvcmxkSUQsIHNjcmlwdCk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDg4
MTgzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcxLDYgKzQ3MSwxMiBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphZGRNb2NrU3BlZWNoCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6dG9nZ2xlU3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCkKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisK
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBp
Y29uRGF0YWJhc2VFbmFibGVkKQogewogICAgIC8vIFNlZSBhbHNvIDxyZGFyOi8vcHJvYmxlbS82
NDgwMTA4PgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xs
ZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVz
dENvbnRyb2xsZXJXeC5jcHAJKHJldmlzaW9uIDg4MTgzKQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Niw2
ICszNzYsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaAogICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9
CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnRvZ2dsZVNwZWVjaElucHV0KEpTQ29udGV4
dFJlZiBpbnB1dEVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNo
IGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsKICAgICAv
LyBGSVhNRTogaW1wbGVtZW50CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4ODE4MykKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTA2LTA2
ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBuZXcgdGVzdCB0aGF0IGNo
ZWNrcyB0cmlnZ2VyaW5nIHNwZWVjaCBpbnB1dCBkaXJlY3RseSwgc28KKyAgICAgICAgdGhhdCBh
IGJyb3dzZXIgY2FuIHRyaWdnZXIgaXQgdmlhIGEga2V5IGNvbWJpbmF0aW9uLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAxNzAKKworICAgICAgICAq
IGZhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNodHJpZ2dlci1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNodHJpZ2dlci5odG1sOiBB
ZGRlZC4KKwogMjAxMS0wNi0wNiAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFdpbmRvd3MgRFJUIG5lZWRzIGFuIGltcGxlbWVudGF0aW9uIG9mIHNoYWRvd1Jv
b3QuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHRyaWdn
ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lu
cHV0LXRleHQtc3BlZWNodHJpZ2dlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHRyaWdnZXItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0cyBmb3IgdHJpZ2dlcmluZyBzcGVl
Y2ggZGlyZWN0bHkgaW4gYSA8aW5wdXQgdHlwZT0idGV4dCIgc3BlZWNoPi4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwZWVj
aElucHV0IikudmFsdWUgaXMgIlBpY3R1cmVzIG9mIGEgc3Vuc2V0IgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5nZXMgb246
IExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNodHJpZ2dlci1leHBlY3Rl
ZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2h0cmlnZ2VyLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2h0cmlnZ2Vy
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0
LXNwZWVjaHRyaWdnZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZGVz
Y3JpcHRpb24oJ1Rlc3RzIGZvciB0cmlnZ2VyaW5nIHNwZWVjaCBkaXJlY3RseSBpbiBhICZsdDtp
bnB1dCB0eXBlPSJ0ZXh0IiBzcGVlY2g+LicpOworCitmdW5jdGlvbiBzdGFydFNwZWVjaElucHV0
KGlkKSB7CisgICAgLy8gVGVzdCB0aGF0IHdlIGNhbiB0cmlnZ2VyIHNwZWVjaCB3aXRoIGEgbWV0
aG9kIGNhbGwgdG8gdGhlIGlucHV0CisgICAgLy8gZWxlbWVudCwgc28gdGhlIHVzZXIgYWdlbnQg
Y291bGQgdG9nZ2xlIHNwZWVjaCB2aWEgYSBrZXlwcmVzcywKKyAgICAvLyBmb3IgZXhhbXBsZS4K
KyAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIudG9nZ2xlU3BlZWNoSW5wdXQoaW5wdXQpOworfQorCitmdW5jdGlvbiBv
bldlYmtpdFNwZWVjaENoYW5nZSgpIHsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2RvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJzcGVlY2hJbnB1dCIpLnZhbHVlJywgJ1BpY3R1cmVzIG9mIGEg
c3Vuc2V0Jyk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIHJ1bigpIHsKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5ldmVudFNlbmRlcikg
eworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5hZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQo
J1BpY3R1cmVzIG9mIGEgc3Vuc2V0JywgMS4wLCAnJyk7CisgICAgICAgIHN0YXJ0U3BlZWNoSW5w
dXQoInNwZWVjaElucHV0Iik7CisgICAgfQorfQorCit3aW5kb3cub25sb2FkID0gcnVuOword2lu
ZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzxpbnB1dCBpZD0nc3BlZWNoSW5wdXQnIHgtd2Via2l0LXNwZWVjaCBv
bndlYmtpdHNwZWVjaGNoYW5nZT0ib25XZWJraXRTcGVlY2hDaGFuZ2UoKSI+Cis8L2JvZHk+Cis8
L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1
dC10ZXh0LXNwZWVjaHRyaWdnZXIuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxl
CiAgICsgTEYKCg==
</data>
<flag name="review"
          id="89746"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97672</attachid>
            <date>2011-06-17 17:41:13 -0700</date>
            <delta_ts>2011-06-20 04:47:42 -0700</delta_ts>
            <desc>Rename methods to be more clear.</desc>
            <filename>speech-webkit3.patch</filename>
            <type>text/plain</type>
            <size>19574</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5MTgwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYtMTcgIERvbWluaWMg
TWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIG1ldGhvZCB0byB0cmlnZ2VyIHNwZWVjaCBp
bnB1dCBkaXJlY3RseSwgc28KKyAgICAgICAgdGhhdCBhIGJyb3dzZXIgY2FuIHRyaWdnZXIgaXQg
dmlhIGEga2V5IGNvbWJpbmF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjAxNzAKKworICAgICAgICBUZXN0OiBmYXN0L3NwZWVjaC9pbnB1dC10
ZXh0LXNwZWVjaHRyaWdnZXIuaHRtbAorCisgICAgICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RmllbGRTcGVlY2hC
dXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzdGFydE9yU3RvcFNwZWVjaElucHV0KToKKyAg
ICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3RhcnRPclN0b3BTcGVlY2hJbnB1
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOgor
CiAyMDExLTA2LTE3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByODkxNDMuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50
cy5jcHAJKHJldmlzaW9uIDg5MTc4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI5LDIyICs0Mjks
NyBAQCB2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpkZWZhCiAgICAgfQogCiAg
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgbV9saXN0
ZW5lcklkKSB7Ci0gICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgICAgICBjYXNlIElkbGU6
IHsKLSAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIGxhbmd1YWdlID0gaW5wdXQtPmNvbXB1dGVJ
bmhlcml0ZWRMYW5ndWFnZSgpOwotICAgICAgICAgICAgICBTdHJpbmcgZ3JhbW1hciA9IGlucHV0
LT5nZXRBdHRyaWJ1dGUod2Via2l0Z3JhbW1hckF0dHIpOwotICAgICAgICAgICAgICBJbnRSZWN0
IHJlY3QgPSBpbnB1dC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKLSAg
ICAgICAgICAgICAgaWYgKHNwZWVjaElucHV0KCktPnN0YXJ0UmVjb2duaXRpb24obV9saXN0ZW5l
cklkLCByZWN0LCBsYW5ndWFnZSwgZ3JhbW1hciwgZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KSkpCi0gICAgICAgICAgICAgICAgICBzZXRTdGF0ZShSZWNvcmRpbmcpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVjb3JkaW5nOgotICAgICAgICAg
ICAgc3BlZWNoSW5wdXQoKS0+c3RvcFJlY29yZGluZyhtX2xpc3RlbmVySWQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVjb2duaXppbmc6Ci0gICAgICAgICAgICAvLyBOb3Ro
aW5nIHRvIGRvIGhlcmUsIHdlIHdpbGwgY29udGludWUgdG8gd2FpdCBmb3IgcmVzdWx0cy4KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIHN0YXJ0T3JTdG9wU3BlZWNoSW5w
dXQoKTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQogCkBAIC01
MjAsNiArNTA1LDI3IEBAIHZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OmRldGEK
ICAgICBIVE1MRGl2RWxlbWVudDo6ZGV0YWNoKCk7CiB9CiAKK3ZvaWQgSW5wdXRGaWVsZFNwZWVj
aEJ1dHRvbkVsZW1lbnQ6OnN0YXJ0T3JTdG9wU3BlZWNoSW5wdXQoKQoreworICAgIFJlZlB0cjxI
VE1MSW5wdXRFbGVtZW50PiBpbnB1dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hh
ZG93QW5jZXN0b3JOb2RlKCkpKTsKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIElk
bGU6IHsKKyAgICAgICAgQXRvbWljU3RyaW5nIGxhbmd1YWdlID0gaW5wdXQtPmNvbXB1dGVJbmhl
cml0ZWRMYW5ndWFnZSgpOworICAgICAgICBTdHJpbmcgZ3JhbW1hciA9IGlucHV0LT5nZXRBdHRy
aWJ1dGUod2Via2l0Z3JhbW1hckF0dHIpOworICAgICAgICBJbnRSZWN0IHJlY3QgPSBpbnB1dC0+
cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKKyAgICAgICAgaWYgKHNwZWVj
aElucHV0KCktPnN0YXJ0UmVjb2duaXRpb24obV9saXN0ZW5lcklkLCByZWN0LCBsYW5ndWFnZSwg
Z3JhbW1hciwgZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICBzZXRT
dGF0ZShSZWNvcmRpbmcpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVj
b3JkaW5nOgorICAgICAgICBzcGVlY2hJbnB1dCgpLT5zdG9wUmVjb3JkaW5nKG1fbGlzdGVuZXJJ
ZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVjb2duaXppbmc6CisgICAgICAgIC8vIE5v
dGhpbmcgdG8gZG8gaGVyZSwgd2Ugd2lsbCBjb250aW51ZSB0byB3YWl0IGZvciByZXN1bHRzLgor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYgSW5wdXRGaWVs
ZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIHsKICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgcHNldWRvSWQsICgiLXdlYmtpdC1pbnB1dC1z
cGVlY2gtYnV0dG9uIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgJKHJldmlzaW9uIDg5MTc4KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzOSw2ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dEZpZWxk
U3BlZWNoQnV0dG9uRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICBTcGVlY2hJ
bnB1dFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc3Rh
cnRPclN0b3BTcGVlY2hJbnB1dCgpOwogCiAgICAgLy8gU3BlZWNoSW5wdXRMaXN0ZW5lciBtZXRo
b2RzLgogICAgIHZvaWQgZGlkQ29tcGxldGVSZWNvcmRpbmcoaW50KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwCShyZXZpc2lvbiA4OTE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjUsNiArNTI1
LDE1IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHRCbG8KICAgICByZXR1
cm4gd2lkdGg7CiB9CiAKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQordm9pZCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnN0YXJ0T3JTdG9wU3BlZWNoSW5wdXQoKQoreworICAgIElucHV0
RmllbGRTcGVlY2hCdXR0b25FbGVtZW50KiBzcGVlY2hCdXR0b24gPSB0b0lucHV0RmllbGRTcGVl
Y2hCdXR0b25FbGVtZW50KHNwZWVjaEJ1dHRvbkVsZW1lbnQoKSk7CisgICAgaWYgKHNwZWVjaEJ1
dHRvbikKKyAgICAgICAgc3BlZWNoQnV0dG9uLT5zdGFydE9yU3RvcFNwZWVjaElucHV0KCk7Cit9
CisjZW5kaWYKKwogZmxvYXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpnZXRBdmdDaGFy
V2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSkKIHsKICAgICAvLyBTaW5jZSBMdWNpZGEgR3JhbmRl
IGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmgJKHJldmlzaW9uIDg5MTc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2
ICs1NSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdl
ZCgpOwogCisjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKKyAgICB2b2lkIHN0YXJ0T3JTdG9wU3Bl
ZWNoSW5wdXQoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBoYXNDb250
cm9sQ2xpcCgpIGNvbnN0OwogICAgIHZpcnR1YWwgSW50UmVjdCBjb250cm9sQ2xpcFJlY3QoY29u
c3QgSW50UG9pbnQmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZp
c2lvbiA4OTE4MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDYtMTcgIERvbWluaWMgTWF6em9uaSAgPGRt
YXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkcyBtZXRob2RzIHRvIGRldGVybWluZSBpZiBzcGVlY2ggaW5wdXQgaXMg
YXZhaWxhYmxlIGZvciBhCisgICAgICAgIHBhcnRpY3VsYXIgaW5wdXQgZWxlbWVudCwgYW5kIHRv
IHN0YXJ0IG9yIHN0b3AgaW5wdXQgZGlyZWN0bHksIHNvCisgICAgICAgIHRoYXQgYSBicm93c2Vy
IGNhbiB0cmlnZ2VyIGl0IHZpYSBhIGtleSBjb21iaW5hdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMTcwCisKKyAgICAgICAgKiBwdWJsaWMv
V2ViSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICogc3JjL1dlYklucHV0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYklucHV0RWxlbWVudDo6aXNTcGVlY2hJbnB1dEVuYWJsZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnB1dEVsZW1lbnQ6OnN0YXJ0T3JTdG9wU3BlZWNoSW5wdXQp
OgorCiAyMDExLTA2LTE3ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJvbGwgQ2hyb21pdW0gREVQUy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYklucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYklucHV0RWxlbWVudC5oCShyZXZpc2lvbiA4OTE3OCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Nyw2ICs3Nyw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICBXRUJLSVRfQVBJIGlu
dCBzZWxlY3Rpb25FbmQoKSBjb25zdDsKICAgICAgICAgV0VCS0lUX0FQSSBib29sIGlzVmFsaWRW
YWx1ZShjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKICAgICAgICAgV0VCS0lUX0FQSSBib29sIGlz
Q2hlY2tlZCgpIGNvbnN0OworICAgICAgICBXRUJLSVRfQVBJIGJvb2wgaXNTcGVlY2hJbnB1dEVu
YWJsZWQoKSBjb25zdDsKKyAgICAgICAgV0VCS0lUX0FQSSB2b2lkIHN0YXJ0T3JTdG9wU3BlZWNo
SW5wdXQoKTsKIAogICAgICAgICAvLyBFeHBvc2VzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBt
YXhMZW5ndGggYXR0cmlidXRlLgogICAgICAgICBXRUJLSVRfQVBJIHN0YXRpYyBpbnQgZGVmYXVs
dE1heExlbmd0aCgpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
bnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4OTE3OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDgg
QEAKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogCkBAIC0xNTAsNiArMTUyLDI3IEBAIGJvb2wgV2ViSW5wdXRFbGVtZW50Ojpp
c0NoZWNrZWQoKSBjb25zdAogICAgIHJldHVybiBjb25zdFVud3JhcDxIVE1MSW5wdXRFbGVtZW50
PigpLT5jaGVja2VkKCk7CiB9CiAKK2Jvb2wgV2ViSW5wdXRFbGVtZW50Ojppc1NwZWVjaElucHV0
RW5hYmxlZCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKKyAgICByZXR1cm4g
Y29uc3RVbndyYXA8SFRNTElucHV0RWxlbWVudD4oKS0+aXNTcGVlY2hFbmFibGVkKCk7CisjZWxz
ZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFdlYklucHV0RWxlbWVudDo6
c3RhcnRPclN0b3BTcGVlY2hJbnB1dCgpCit7CisjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKKyAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29uc3RVbndyYXA8SFRNTElucHV0RWxlbWVudD4o
KS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIGNvbnRyb2wgPSB0b1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZShyZW5kZXJlcik7CisgICAgY29udHJvbC0+c3RhcnRPclN0b3BTcGVlY2hJ
bnB1dCgpOworI2VuZGlmCit9CisKIGludCBXZWJJbnB1dEVsZW1lbnQ6OmRlZmF1bHRNYXhMZW5n
dGgoKQogewogICAgIHJldHVybiBIVE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoOwpJbmRl
eDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNp
b24gODkxODApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
NyBAQAorMjAxMS0wNi0xNyAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIGEg
dGVzdCBjb250cm9sbGVyIG1ldGhvZCB0byB0cmlnZ2VyIHNwZWVjaCBpbnB1dCBvbiBhIGdpdmVu
CisgICAgICAgIGlucHV0IGVsZW1lbnQuIEltcGxlbWVudGVkIGZvciBDaHJvbWl1bSBvbmx5Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAxNzAKKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjp0b2dnbGVTcGVlY2hJbnB1dCk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnRvZ2dsZVNwZWVjaElucHV0KToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRPclN0b3BTcGVlY2hJbnB1dCk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRPclN0b3BTcGVlY2hJbnB1dCk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcDoKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydE9yU3RvcFNwZWVjaElucHV0KToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcDoKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydE9yU3RvcFNwZWVjaElucHV0KToKKwogMjAxMS0w
Ni0xNyAgTGVhbmRybyBQZXJlaXJhICA8bGVhbmRyb0Bwcm9mdXNpb24ubW9iaT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODkxNzgpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiAr
MTA5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoaW50IGNv
ZGUsIEpTU3RyaW5nUmVmIG1lc3NhZ2UpOwogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kp
OwogICAgIHZvaWQgYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwg
ZG91YmxlIGNvbmZpZGVuY2UsIEpTU3RyaW5nUmVmIGxhbmd1YWdlKTsKKyAgICB2b2lkIHN0YXJ0
T3JTdG9wU3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCk7CiAgICAgdm9pZCBz
ZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRoKTsKICAg
ICB2b2lkIHNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZyk7CiAgICAgdm9pZCBzZXRQb3B1cEJs
b2NraW5nRW5hYmxlZChib29sIGZsYWcpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODkx
NzgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw2ICsxNjYsNyBAQCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsCiAgICAgYmluZE1ldGhvZCgic2V0TW9ja0dlb2xvY2F0
aW9uRXJyb3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9y
KTsKICAgICBiaW5kTWV0aG9kKCJzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24pOwogICAgIGJpbmRNZXRo
b2QoInNldE92ZXJyaWRlSW5kZXhlZERCQmFja2luZ1N0b3JlIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpzZXRPdmVycmlkZUluZGV4ZWREQkJhY2tpbmdTdG9yZSk7CisgICAgYmluZE1ldGhvZCgi
c3RhcnRPclN0b3BTcGVlY2hJbnB1dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRPclN0
b3BTcGVlY2hJbnB1dCk7CiAgICAgYmluZE1ldGhvZCgic2V0UGFnZVZpc2liaWxpdHkiLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhZ2VWaXNpYmlsaXR5KTsKICAgICBiaW5kTWV0aG9kKCJz
ZXRQbHVnaW5zRW5hYmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJs
ZWQpOwogICAgIGJpbmRNZXRob2QoInNldFBvcHVwQmxvY2tpbmdFbmFibGVkIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZCk7CkBAIC0xNzg0LDYgKzE3ODUs
MjYgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaAogICAgIG1fc2hl
bGwtPndlYlZpZXdIb3N0KCktPnNwZWVjaElucHV0Q29udHJvbGxlck1vY2soKS0+YWRkTW9ja1Jl
Y29nbml0aW9uUmVzdWx0KGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBhcmd1
bWVudHNbMV0udG9Eb3VibGUoKSwgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSkp
OwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydE9yU3RvcFNwZWVjaElucHV0
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRWxlbWVudCBlbGVtZW50OworICAgIGlmICghV2Vi
QmluZGluZ3M6OmdldEVsZW1lbnQoYXJndW1lbnRzWzBdLnZhbHVlLm9iamVjdFZhbHVlLCAmZWxl
bWVudCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYklucHV0RWxlbWVudCogaW5wdXQgPSB0
b1dlYklucHV0RWxlbWVudCgmZWxlbWVudCk7CisgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFpbnB1dC0+aXNTcGVlY2hJbnB1dEVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaW5wdXQtPnN0YXJ0T3JTdG9wU3BlZWNoSW5wdXQoKTsKK30KKwogdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0KG1fc2hl
bGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPmxheWVyVHJlZUFzVGV4dChtX3Nob3dEZWJ1Z0xh
eWVyVHJlZSkudXRmOCgpKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xh
eW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODkxNzgpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNTksNiArMzU5LDcgQEAgcHVibGljOgogCiAgICAgLy8gU3BlZWNoIGlucHV0
IHJlbGF0ZWQgZnVuY3Rpb25zLgogICAgIHZvaWQgYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHN0YXJ0T3JTdG9w
U3BlZWNoSW5wdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCiAgICAg
dm9pZCBsYXllclRyZWVBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJp
YW50KiByZXN1bHQpOwogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVz
dENvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDg5MTc4KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTExLDYgKzUxMSwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRN
b2NrU3BlZWNoCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zOTQ4NS4KIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6dG9nZ2xlU3BlZWNo
SW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAg
IFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2Uo
KTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENv
bnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDg5MTc4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OTIsNiAr
NDkyLDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICAv
LyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQog
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydE9yU3RvcFNwZWVjaElucHV0KEpTQ29u
dGV4dFJlZiBpbnB1dEVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3Bl
ZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsKICAg
ICAvLyBGSVhNRTogV29ya2Fyb3VuZCA8cmRhcjovL3Byb2JsZW0vNjQ4MDEwOD4KSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3Bw
CShyZXZpc2lvbiA4OTE3OCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RD
b250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODAsNiArODgwLDEyIEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzdGFydE9yU3RvcFNwZWVjaElucHV0KGNvbnN0IFFTdHJpbmcmIGlucHV0
RWxlbWVudCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5
b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzk0ODUuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2Ny
aXB0SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCiB7
CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkKG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpLCB3b3JsZElELCBzY3JpcHQpOwpJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xs
ZXJXaW4uY3BwCShyZXZpc2lvbiA4OTE3OCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9M
YXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Nyw2ICs0Nzcs
MTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaAogICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9CiAKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0T3JTdG9wU3BlZWNoSW5wdXQoSlNDb250ZXh0
UmVmIGlucHV0RWxlbWVudCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2gg
aW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBpY29uRGF0YWJhc2VFbmFibGVkKQogewogICAgIC8v
IFNlZSBhbHNvIDxyZGFyOi8vcHJvYmxlbS82NDgwMTA4PgpJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHJldmlzaW9uIDg5
MTc4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Niw2ICszNzYsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YWRkTW9ja1NwZWVjaAogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnN0YXJ0T3JTdG9wU3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCkKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9
CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9v
bCBpY29uRGF0YWJhc2VFbmFibGVkKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDg5MTgwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDYtMTcgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6
b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkcyBhIG5ldyB0ZXN0IHRoYXQgY2hlY2tzIHRyaWdnZXJpbmcgc3BlZWNoIGlu
cHV0IGRpcmVjdGx5LCBzbworICAgICAgICB0aGF0IGEgYnJvd3NlciBjYW4gdHJpZ2dlciBpdCB2
aWEgYSBrZXkgY29tYmluYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MDE3MAorCisgICAgICAgICogZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1z
cGVlY2h0cmlnZ2VyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9zcGVlY2gv
aW5wdXQtdGV4dC1zcGVlY2h0cmlnZ2VyLmh0bWw6IEFkZGVkLgorCiAyMDExLTA2LTE3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljIFNlaWRlbC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3Bl
ZWNodHJpZ2dlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9z
cGVlY2gvaW5wdXQtdGV4dC1zcGVlY2h0cmlnZ2VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNodHJpZ2dlci1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3RzIGZvciB0cmlnZ2Vy
aW5nIHNwZWVjaCBkaXJlY3RseSBpbiBhIDxpbnB1dCB0eXBlPSJ0ZXh0IiBzcGVlY2g+LgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgic3BlZWNoSW5wdXQiKS52YWx1ZSBpcyAiUGljdHVyZXMgb2YgYSBzdW5zZXQiCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkgY2hh
bmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2h0cmlnZ2Vy
LWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHRyaWdnZXIuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVj
aHRyaWdnZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lu
cHV0LXRleHQtc3BlZWNodHJpZ2dlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4K
KzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9w
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+CitkZXNjcmlwdGlvbignVGVzdHMgZm9yIHRyaWdnZXJpbmcgc3BlZWNoIGRpcmVjdGx5IGlu
IGEgJmx0O2lucHV0IHR5cGU9InRleHQiIHNwZWVjaD4uJyk7CisKK2Z1bmN0aW9uIHN0YXJ0U3Bl
ZWNoSW5wdXQoaWQpIHsKKyAgICAvLyBUZXN0IHRoYXQgd2UgY2FuIHRyaWdnZXIgc3BlZWNoIHdp
dGggYSBtZXRob2QgY2FsbCB0byB0aGUgaW5wdXQKKyAgICAvLyBlbGVtZW50LCBzbyB0aGUgdXNl
ciBhZ2VudCBjb3VsZCB0b2dnbGUgc3BlZWNoIHZpYSBhIGtleXByZXNzLAorICAgIC8vIGZvciBl
eGFtcGxlLgorICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5zdGFydE9yU3RvcFNwZWVjaElucHV0KGlucHV0KTsKK30K
KworZnVuY3Rpb24gb25XZWJraXRTcGVlY2hDaGFuZ2UoKSB7CisgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BlZWNoSW5wdXQiKS52YWx1ZScsICdQ
aWN0dXJlcyBvZiBhIHN1bnNldCcpOworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitmdW5jdGlv
biBydW4oKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciAmJiB3aW5kb3cu
ZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuYWRkTW9ja1NwZWVj
aElucHV0UmVzdWx0KCdQaWN0dXJlcyBvZiBhIHN1bnNldCcsIDEuMCwgJycpOworICAgICAgICBz
dGFydFNwZWVjaElucHV0KCJzcGVlY2hJbnB1dCIpOworICAgIH0KK30KKword2luZG93Lm9ubG9h
ZCA9IHJ1bjsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3dpbmRvdy5zdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8aW5wdXQgaWQ9J3NwZWVjaElucHV0JyB4LXdl
YmtpdC1zcGVlY2ggb253ZWJraXRzcGVlY2hjaGFuZ2U9Im9uV2Via2l0U3BlZWNoQ2hhbmdlKCki
PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFz
dC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2h0cmlnZ2VyLmh0bWwKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQogICArIExGCgo=
</data>
<flag name="commit-queue"
          id="91692"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97778</attachid>
            <date>2011-06-20 04:47:42 -0700</date>
            <delta_ts>2011-09-01 01:19:33 -0700</delta_ts>
            <desc>Fix gtk &amp; qt errors</desc>
            <filename>speech-webkit4.patch</filename>
            <type>text/plain</type>
            <size>20352</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5MjQxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYtMTcgIERvbWluaWMg
TWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIG1ldGhvZCB0byB0cmlnZ2VyIHNwZWVjaCBp
bnB1dCBkaXJlY3RseSwgc28KKyAgICAgICAgdGhhdCBhIGJyb3dzZXIgY2FuIHRyaWdnZXIgaXQg
dmlhIGEga2V5IGNvbWJpbmF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjAxNzAKKworICAgICAgICBUZXN0OiBmYXN0L3NwZWVjaC9pbnB1dC10
ZXh0LXNwZWVjaHRyaWdnZXIuaHRtbAorCisgICAgICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RmllbGRTcGVlY2hC
dXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzdGFydE9yU3RvcFNwZWVjaElucHV0KToKKyAg
ICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3RhcnRPclN0b3BTcGVlY2hJbnB1
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOgor
CiAyMDExLTA2LTE5ICBNYWRzIEFnZXIgIDxhZ2VyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
VGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCShyZXZpc2lvbiA4OTI0
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOSwyMiArNDI5LDcgQEAgdm9pZCBJbnB1dEZpZWxk
U3BlZWNoQnV0dG9uRWxlbWVudDo6ZGVmYQogICAgIH0KIAogICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIG1fbGlzdGVuZXJJZCkgewotICAgICAgICBz
d2l0Y2ggKG1fc3RhdGUpIHsKLSAgICAgICAgY2FzZSBJZGxlOiB7Ci0gICAgICAgICAgICAgIEF0
b21pY1N0cmluZyBsYW5ndWFnZSA9IGlucHV0LT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsK
LSAgICAgICAgICAgICAgU3RyaW5nIGdyYW1tYXIgPSBpbnB1dC0+Z2V0QXR0cmlidXRlKHdlYmtp
dGdyYW1tYXJBdHRyKTsKLSAgICAgICAgICAgICAgSW50UmVjdCByZWN0ID0gaW5wdXQtPnJlbmRl
cmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCk7Ci0gICAgICAgICAgICAgIGlmIChzcGVl
Y2hJbnB1dCgpLT5zdGFydFJlY29nbml0aW9uKG1fbGlzdGVuZXJJZCwgcmVjdCwgbGFuZ3VhZ2Us
IGdyYW1tYXIsIGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQotICAgICAgICAgICAgICAg
ICAgc2V0U3RhdGUoUmVjb3JkaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFJlY29yZGluZzoKLSAgICAgICAgICAgIHNwZWVjaElucHV0KCktPnN0
b3BSZWNvcmRpbmcobV9saXN0ZW5lcklkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFJlY29nbml6aW5nOgotICAgICAgICAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLCB3ZSB3
aWxsIGNvbnRpbnVlIHRvIHdhaXQgZm9yIHJlc3VsdHMuCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQorICAgICAgICBzdGFydE9yU3RvcFNwZWVjaElucHV0KCk7CiAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KIApAQCAtNTIwLDYgKzUwNSwyNyBAQCB2b2lk
IElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpkZXRhCiAgICAgSFRNTERpdkVsZW1lbnQ6
OmRldGFjaCgpOwogfQogCit2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzdGFy
dE9yU3RvcFNwZWVjaElucHV0KCkKK3sKKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5w
dXQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKSk7
CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBJZGxlOiB7CisgICAgICAgIEF0b21p
Y1N0cmluZyBsYW5ndWFnZSA9IGlucHV0LT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsKKyAg
ICAgICAgU3RyaW5nIGdyYW1tYXIgPSBpbnB1dC0+Z2V0QXR0cmlidXRlKHdlYmtpdGdyYW1tYXJB
dHRyKTsKKyAgICAgICAgSW50UmVjdCByZWN0ID0gaW5wdXQtPnJlbmRlcmVyKCktPmFic29sdXRl
Qm91bmRpbmdCb3hSZWN0KCk7CisgICAgICAgIGlmIChzcGVlY2hJbnB1dCgpLT5zdGFydFJlY29n
bml0aW9uKG1fbGlzdGVuZXJJZCwgcmVjdCwgbGFuZ3VhZ2UsIGdyYW1tYXIsIGRvY3VtZW50KCkt
PnNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICAgICAgc2V0U3RhdGUoUmVjb3JkaW5nKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlY29yZGluZzoKKyAgICAgICAgc3Bl
ZWNoSW5wdXQoKS0+c3RvcFJlY29yZGluZyhtX2xpc3RlbmVySWQpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFJlY29nbml6aW5nOgorICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUsIHdl
IHdpbGwgY29udGludWUgdG8gd2FpdCBmb3IgcmVzdWx0cy4KKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCiBjb25zdCBBdG9taWNTdHJpbmcmIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50
OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9t
aWNTdHJpbmcsIHBzZXVkb0lkLCAoIi13ZWJraXQtaW5wdXQtc3BlZWNoLWJ1dHRvbiIpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5oCShyZXZpc2lvbiA4OTI0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNiAr
MTM5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50Kik7CiAgICAgdmlydHVhbCBib29sIGlzSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgU3BlZWNoSW5wdXRTdGF0ZSBzdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2b2lkIHN0YXJ0T3JTdG9wU3BlZWNoSW5wdXQo
KTsKIAogICAgIC8vIFNwZWVjaElucHV0TGlzdGVuZXIgbWV0aG9kcy4KICAgICB2b2lkIGRpZENv
bXBsZXRlUmVjb3JkaW5nKGludCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gODky
NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI1LDYgKzUyNSwxNSBAQCBpbnQgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmxvCiAgICAgcmV0dXJuIHdpZHRoOwogfQogCisjaWYg
RU5BQkxFKElOUFVUX1NQRUVDSCkKK3ZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpz
dGFydE9yU3RvcFNwZWVjaElucHV0KCkKK3sKKyAgICBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxl
bWVudCogc3BlZWNoQnV0dG9uID0gdG9JbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudChzcGVl
Y2hCdXR0b25FbGVtZW50KCkpOworICAgIGlmIChzcGVlY2hCdXR0b24pCisgICAgICAgIHNwZWVj
aEJ1dHRvbi0+c3RhcnRPclN0b3BTcGVlY2hJbnB1dCgpOworfQorI2VuZGlmCisKIGZsb2F0IFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Z2V0QXZnQ2hhcldpZHRoKEF0b21pY1N0cmluZyBm
YW1pbHkpCiB7CiAgICAgLy8gU2luY2UgTHVjaWRhIEdyYW5kZSBpcyB0aGUgZGVmYXVsdCBmb250
LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2ggdGhlIHdpZHRoCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCShyZXZp
c2lvbiA4OTI0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTAgQEAgcHVibGljOgog
CiAgICAgdm9pZCBjYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKIAorI2lmIEVOQUJMRShJ
TlBVVF9TUEVFQ0gpCisgICAgdm9pZCBzdGFydE9yU3RvcFNwZWVjaElucHV0KCk7CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIEludFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IEludFBvaW50JikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODkyNDEpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3
IEBACisyMDExLTA2LTE3ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgbWV0
aG9kcyB0byBkZXRlcm1pbmUgaWYgc3BlZWNoIGlucHV0IGlzIGF2YWlsYWJsZSBmb3IgYQorICAg
ICAgICBwYXJ0aWN1bGFyIGlucHV0IGVsZW1lbnQsIGFuZCB0byBzdGFydCBvciBzdG9wIGlucHV0
IGRpcmVjdGx5LCBzbworICAgICAgICB0aGF0IGEgYnJvd3NlciBjYW4gdHJpZ2dlciBpdCB2aWEg
YSBrZXkgY29tYmluYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MDE3MAorCisgICAgICAgICogcHVibGljL1dlYklucHV0RWxlbWVudC5oOgor
ICAgICAgICAqIHNyYy9XZWJJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnB1dEVsZW1lbnQ6OmlzU3BlZWNoSW5wdXRFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5wdXRFbGVtZW50OjpzdGFydE9yU3RvcFNwZWVjaElucHV0KToKKwogMjAxMS0wNi0xOSAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSb2xsZWQgREVQUy4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RWxlbWVudC5o
CShyZXZpc2lvbiA4OTI0MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklu
cHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw4IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogICAgICAgICBXRUJLSVRfQVBJIGludCBzZWxlY3Rpb25FbmQoKSBjb25zdDsKICAg
ICAgICAgV0VCS0lUX0FQSSBib29sIGlzVmFsaWRWYWx1ZShjb25zdCBXZWJTdHJpbmcmKSBjb25z
dDsKICAgICAgICAgV0VCS0lUX0FQSSBib29sIGlzQ2hlY2tlZCgpIGNvbnN0OworICAgICAgICBX
RUJLSVRfQVBJIGJvb2wgaXNTcGVlY2hJbnB1dEVuYWJsZWQoKSBjb25zdDsKKyAgICAgICAgV0VC
S0lUX0FQSSB2b2lkIHN0YXJ0T3JTdG9wU3BlZWNoSW5wdXQoKTsKIAogICAgICAgICAvLyBFeHBv
c2VzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBtYXhMZW5ndGggYXR0cmlidXRlLgogICAgICAg
ICBXRUJLSVRfQVBJIHN0YXRpYyBpbnQgZGVmYXVsdE1heExlbmd0aCgpOwpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4
OTI0MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJX
ZWJTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCkBAIC0xNTAsNiArMTUy
LDI3IEBAIGJvb2wgV2ViSW5wdXRFbGVtZW50Ojppc0NoZWNrZWQoKSBjb25zdAogICAgIHJldHVy
biBjb25zdFVud3JhcDxIVE1MSW5wdXRFbGVtZW50PigpLT5jaGVja2VkKCk7CiB9CiAKK2Jvb2wg
V2ViSW5wdXRFbGVtZW50Ojppc1NwZWVjaElucHV0RW5hYmxlZCgpIGNvbnN0Cit7CisjaWYgRU5B
QkxFKElOUFVUX1NQRUVDSCkKKyAgICByZXR1cm4gY29uc3RVbndyYXA8SFRNTElucHV0RWxlbWVu
dD4oKS0+aXNTcGVlY2hFbmFibGVkKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorfQorCit2b2lkIFdlYklucHV0RWxlbWVudDo6c3RhcnRPclN0b3BTcGVlY2hJbnB1dCgpCit7
CisjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
Y29uc3RVbndyYXA8SFRNTElucHV0RWxlbWVudD4oKS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJl
bmRlcmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUqIGNvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShyZW5kZXJlcik7Cisg
ICAgY29udHJvbC0+c3RhcnRPclN0b3BTcGVlY2hJbnB1dCgpOworI2VuZGlmCit9CisKIGludCBX
ZWJJbnB1dEVsZW1lbnQ6OmRlZmF1bHRNYXhMZW5ndGgoKQogewogICAgIHJldHVybiBIVE1MSW5w
dXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gODkyNDEpCisrKyBUb29scy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxMS0wNi0xNyAgRG9taW5pYyBN
YXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIGEgdGVzdCBjb250cm9sbGVyIG1ldGhvZCB0byB0
cmlnZ2VyIHNwZWVjaCBpbnB1dCBvbiBhIGdpdmVuCisgICAgICAgIGlucHV0IGVsZW1lbnQuIElt
cGxlbWVudGVkIGZvciBDaHJvbWl1bSBvbmx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAxNzAKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OkxheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
dGFydE9yU3RvcFNwZWVjaElucHV0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9M
YXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c3RhcnRPclN0b3BTcGVlY2hJbnB1dCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN0YXJ0T3JTdG9wU3BlZWNoSW5wdXQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN0YXJ0T3JTdG9wU3BlZWNoSW5wdXQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4v
TGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN0YXJ0T3JTdG9wU3BlZWNoSW5wdXQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4
L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN0YXJ0T3JTdG9wU3BlZWNoSW5wdXQpOgorCiAyMDExLTA2LTIwICBWaWF0Y2hlc2xhdiBP
c3RhcGVua28gIDxvc3RhcGVua28udmlhdGNoZXNsYXZAbm9raWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDg5MjQxKQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEw
OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2Rl
LCBKU1N0cmluZ1JlZiBtZXNzYWdlKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KTsK
ICAgICB2b2lkIGFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRv
dWJsZSBjb25maWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSk7CisgICAgdm9pZCBzdGFydE9y
U3RvcFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpOwogICAgIHZvaWQgc2V0
UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCk7CiAgICAg
dm9pZCBzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcpOwogICAgIHZvaWQgc2V0UG9wdXBCbG9j
a2luZ0VuYWJsZWQoYm9vbCBmbGFnKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDg5MjQx
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNiArMTY2LDcgQEAgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OkxheW91dFRlc3RDb250cm9sbAogICAgIGJpbmRNZXRob2QoInNldE1vY2tHZW9sb2NhdGlv
bkVycm9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcik7
CiAgICAgYmluZE1ldGhvZCgic2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTsKICAgICBiaW5kTWV0aG9k
KCJzZXRPdmVycmlkZUluZGV4ZWREQkJhY2tpbmdTdG9yZSIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0T3ZlcnJpZGVJbmRleGVkREJCYWNraW5nU3RvcmUpOworICAgIGJpbmRNZXRob2QoInN0
YXJ0T3JTdG9wU3BlZWNoSW5wdXQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0T3JTdG9w
U3BlZWNoSW5wdXQpOwogICAgIGJpbmRNZXRob2QoInNldFBhZ2VWaXNpYmlsaXR5IiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eSk7CiAgICAgYmluZE1ldGhvZCgic2V0
UGx1Z2luc0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVk
KTsKICAgICBiaW5kTWV0aG9kKCJzZXRQb3B1cEJsb2NraW5nRW5hYmxlZCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQpOwpAQCAtMTc4NCw2ICsxNzg1LDI2
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICBtX3NoZWxs
LT53ZWJWaWV3SG9zdCgpLT5zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrKCktPmFkZE1vY2tSZWNv
Z25pdGlvblJlc3VsdChjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgYXJndW1l
bnRzWzFdLnRvRG91YmxlKCksIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pKTsK
IH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRPclN0b3BTcGVlY2hJbnB1dChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEpCisg
ICAgICAgIHJldHVybjsKKworICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKKyAgICBpZiAoIVdlYkJp
bmRpbmdzOjpnZXRFbGVtZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJmVsZW1l
bnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9X
ZWJJbnB1dEVsZW1lbnQoJmVsZW1lbnQpOworICAgIGlmICghaW5wdXQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghaW5wdXQtPmlzU3BlZWNoSW5wdXRFbmFibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlucHV0LT5zdGFydE9yU3RvcFNwZWVjaElucHV0KCk7Cit9CisKIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dChjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldChtX3NoZWxs
LT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5sYXllclRyZWVBc1RleHQobV9zaG93RGVidWdMYXll
clRyZWUpLnV0ZjgoKSk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlv
dXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDg5MjQxKQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzU5LDYgKzM1OSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFNwZWVjaCBpbnB1dCBy
ZWxhdGVkIGZ1bmN0aW9ucy4KICAgICB2b2lkIGFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzdGFydE9yU3RvcFNw
ZWVjaElucHV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAogICAgIHZv
aWQgbGF5ZXJUcmVlQXNUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFu
dCogcmVzdWx0KTsKIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RD
b250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
TGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiA4OTI0MSkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxMSw2ICs1MTEsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9j
a1NwZWVjaAogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Mzk0ODUuCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0T3JTdG9wU3Bl
ZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewog
ICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJh
c2UoKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxl
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVz
dENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDg5MjQxKQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OTIs
NiArNDkyLDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAg
ICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1Lgog
fQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydE9yU3RvcFNwZWVjaElucHV0KEpT
Q29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Ig
c3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsK
ICAgICAvLyBGSVhNRTogV29ya2Fyb3VuZCA8cmRhcjovL3Byb2JsZW0vNjQ4MDEwOD4KSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQu
Y3BwCShyZXZpc2lvbiA4OTI0MSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRl
c3RDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODAsNiArODgwLDEyIEBAIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzdGFydE9yU3RvcFNwZWVjaElucHV0KGNvbnN0IFFTdHJpbmcmIGlu
cHV0RWxlbWVudCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQg
bGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQp
CiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkKG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpLCB3b3JsZElELCBzY3JpcHQpOwpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVy
UXQuaAkocmV2aXNpb24gODkyNDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRU
ZXN0Q29udHJvbGxlclF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw2ICsyMzIsNyBAQCBwdWJs
aWMgc2xvdHM6CiAgICAgYm9vbCBnZW9sb2NhdGlvblBlcm1pc3Npb24oKSBjb25zdCB7IHJldHVy
biBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbjsgfQogCiAgICAgdm9pZCBhZGRNb2NrU3BlZWNoSW5w
dXRSZXN1bHQoY29uc3QgUVN0cmluZyYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgY29uc3Qg
UVN0cmluZyYgbGFuZ3VhZ2UpOworICAgIHZvaWQgc3RhcnRPclN0b3BTcGVlY2hJbnB1dChjb25z
dCBRU3RyaW5nJiBpbnB1dEVsZW1lbnQpOwogCiAgICAgLy8gRW1wdHkgc3R1YiBtZXRob2QgdG8g
a2VlcCBwYXJpdHkgd2l0aCBvYmplY3QgbW9kZWwgZXhwb3NlZCBieSBnbG9iYWwgTGF5b3V0VGVz
dENvbnRyb2xsZXIuCiAgICAgdm9pZCBhYm9ydE1vZGFsKCkge30KSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkocmV2
aXNpb24gODkyNDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRy
b2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsNiArNDc3LDEyIEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzdGFydE9yU3RvcFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1l
bnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0
ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM5NDg1LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VF
bmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsKICAgICAvLyBTZWUgYWxzbyA8cmRh
cjovL3Byb2JsZW0vNjQ4MDEwOD4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91
dFRlc3RDb250cm9sbGVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCShyZXZpc2lvbiA4OTI0MSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzYsNiArMzc2LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1v
Y2tTcGVlY2gKICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM5NDg1LgogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydE9yU3RvcFNw
ZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCiB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNl
RW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4
OTI0MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE0IEBACisyMDExLTA2LTE3ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMg
YSBuZXcgdGVzdCB0aGF0IGNoZWNrcyB0cmlnZ2VyaW5nIHNwZWVjaCBpbnB1dCBkaXJlY3RseSwg
c28KKyAgICAgICAgdGhhdCBhIGJyb3dzZXIgY2FuIHRyaWdnZXIgaXQgdmlhIGEga2V5IGNvbWJp
bmF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjAxNzAKKworICAgICAgICAqIGZhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNodHJpZ2dlci1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3Bl
ZWNodHJpZ2dlci5odG1sOiBBZGRlZC4KKwogMjAxMS0wNi0yMCAgWXV0YSBLaXRhbXVyYSAgPHl1
dGFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggYW4gZXJyb3IgaW4g
dGhlIGxhc3QgZWRpdCBvZiBDaHJvbWl1bSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQuCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHRyaWdnZXItZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3Bl
ZWNodHJpZ2dlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHRyaWdnZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwIEBACitUZXN0cyBmb3IgdHJpZ2dlcmluZyBzcGVlY2ggZGlyZWN0bHkg
aW4gYSA8aW5wdXQgdHlwZT0idGV4dCIgc3BlZWNoPi4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwZWVjaElucHV0IikudmFs
dWUgaXMgIlBpY3R1cmVzIG9mIGEgc3Vuc2V0IgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3Rz
L2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNodHJpZ2dlci1leHBlY3RlZC50eHQKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2h0cmlnZ2VyLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2h0cmlnZ2VyLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHRyaWdn
ZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZGVzY3JpcHRpb24oJ1Rl
c3RzIGZvciB0cmlnZ2VyaW5nIHNwZWVjaCBkaXJlY3RseSBpbiBhICZsdDtpbnB1dCB0eXBlPSJ0
ZXh0IiBzcGVlY2g+LicpOworCitmdW5jdGlvbiBzdGFydFNwZWVjaElucHV0KGlkKSB7CisgICAg
Ly8gVGVzdCB0aGF0IHdlIGNhbiB0cmlnZ2VyIHNwZWVjaCB3aXRoIGEgbWV0aG9kIGNhbGwgdG8g
dGhlIGlucHV0CisgICAgLy8gZWxlbWVudCwgc28gdGhlIHVzZXIgYWdlbnQgY291bGQgdG9nZ2xl
IHNwZWVjaCB2aWEgYSBrZXlwcmVzcywKKyAgICAvLyBmb3IgZXhhbXBsZS4KKyAgICB2YXIgaW5w
dXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuc3RhcnRPclN0b3BTcGVlY2hJbnB1dChpbnB1dCk7Cit9CisKK2Z1bmN0aW9uIG9uV2Via2l0
U3BlZWNoQ2hhbmdlKCkgeworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInNwZWVjaElucHV0IikudmFsdWUnLCAnUGljdHVyZXMgb2YgYSBzdW5zZXQn
KTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gcnVuKCkgeworICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCgnUGljdHVy
ZXMgb2YgYSBzdW5zZXQnLCAxLjAsICcnKTsKKyAgICAgICAgc3RhcnRTcGVlY2hJbnB1dCgic3Bl
ZWNoSW5wdXQiKTsKKyAgICB9Cit9CisKK3dpbmRvdy5vbmxvYWQgPSBydW47Cit3aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7Cit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPGlucHV0IGlkPSdzcGVlY2hJbnB1dCcgeC13ZWJraXQtc3BlZWNoIG9ud2Via2l0
c3BlZWNoY2hhbmdlPSJvbldlYmtpdFNwZWVjaENoYW5nZSgpIj4KKzwvYm9keT4KKzwvaHRtbD4K
ClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQt
c3BlZWNodHJpZ2dlci5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBM
RgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105921</attachid>
            <date>2011-09-01 01:19:39 -0700</date>
            <delta_ts>2011-09-01 12:16:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60170-20110901011937.patch</filename>
            <type>text/plain</type>
            <size>24441</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0Mjc5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDktMDEgIERvbWluaWMg
TWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIEFQSSBmdW5jdGlv
bnMgdG8gZW5hYmxlIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyBzcGVlY2ggaW5wdXQsCisgICAgICAg
IGFuZCBjaGVja2luZyB0aGUgY3VycmVudCBzcGVlY2ggaW5wdXQgc3RhdGUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDE3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGZhc3Qvc3BlZWNoL2lu
cHV0LXRleHQtc3BlZWNoc3RhcnQuaHRtbAorCisgICAgICAgICogaHRtbC9zaGFkb3cvVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RmllbGRTcGVl
Y2hCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OklucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzdGFydFNwZWVjaElucHV0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzdG9wU3BlZWNoSW5w
dXQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzcGVlY2hCdXR0b25F
bGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
Lmg6CisKIDIwMTEtMDktMDEgIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmVuYW1lIGNvbG9yU2VsZWN0ZWQgdG8gZGlkQ2hvb3NlQ29sb3IKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmNwcAkocmV2aXNpb24gOTQyMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzQsMTYg
KzQzNCwxMSBAQCB2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpkZWZhCiAKICAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiBtX2xpc3Rl
bmVySWQpIHsKICAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0gICAgICAgIGNhc2UgSWRsZTog
ewotICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgbGFuZ3VhZ2UgPSBpbnB1dC0+Y29tcHV0ZUlu
aGVyaXRlZExhbmd1YWdlKCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBncmFtbWFyID0gaW5wdXQt
PmdldEF0dHJpYnV0ZSh3ZWJraXRncmFtbWFyQXR0cik7Ci0gICAgICAgICAgICAgIEludFJlY3Qg
cmVjdCA9IHJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCk7Ci0gICAgICAgICAg
ICAgIGlmIChzcGVlY2hJbnB1dCgpLT5zdGFydFJlY29nbml0aW9uKG1fbGlzdGVuZXJJZCwgcmVj
dCwgbGFuZ3VhZ2UsIGdyYW1tYXIsIGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQotICAg
ICAgICAgICAgICAgICAgc2V0U3RhdGUoUmVjb3JkaW5nKTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBJZGxlOgorICAgICAgICAgICAgc3RhcnRTcGVlY2hJbnB1dCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVjb3JkaW5nOgotICAgICAgICAgICAgc3BlZWNoSW5w
dXQoKS0+c3RvcFJlY29yZGluZyhtX2xpc3RlbmVySWQpOworICAgICAgICAgICAgc3RvcFNwZWVj
aElucHV0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZWNvZ25pemluZzoK
ICAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSwgd2Ugd2lsbCBjb250aW51ZSB0byB3
YWl0IGZvciByZXN1bHRzLgpAQCAtNTI0LDYgKzUxOSwyNSBAQCB2b2lkIElucHV0RmllbGRTcGVl
Y2hCdXR0b25FbGVtZW50OjpkZXRhCiAgICAgSFRNTERpdkVsZW1lbnQ6OmRldGFjaCgpOwogfQog
Cit2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzdGFydFNwZWVjaElucHV0KCkK
K3sKKyAgICBpZiAobV9zdGF0ZSAhPSBJZGxlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQ
dHI8SFRNTElucHV0RWxlbWVudD4gaW5wdXQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KHNoYWRvd0FuY2VzdG9yTm9kZSgpKSk7CisgICAgQXRvbWljU3RyaW5nIGxhbmd1YWdlID0gaW5w
dXQtPmNvbXB1dGVJbmhlcml0ZWRMYW5ndWFnZSgpOworICAgIFN0cmluZyBncmFtbWFyID0gaW5w
dXQtPmdldEF0dHJpYnV0ZSh3ZWJraXRncmFtbWFyQXR0cik7CisgICAgSW50UmVjdCByZWN0ID0g
aW5wdXQtPnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCk7CisgICAgaWYgKHNw
ZWVjaElucHV0KCktPnN0YXJ0UmVjb2duaXRpb24obV9saXN0ZW5lcklkLCByZWN0LCBsYW5ndWFn
ZSwgZ3JhbW1hciwgZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgIHNldFN0
YXRlKFJlY29yZGluZyk7Cit9CisKK3ZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6
OnN0b3BTcGVlY2hJbnB1dCgpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gUmVjb3JkaW5nKQorICAg
ICAgICBzcGVlY2hJbnB1dCgpLT5zdG9wUmVjb3JkaW5nKG1fbGlzdGVuZXJJZCk7Cit9CisKIGNv
bnN0IEF0b21pY1N0cmluZyYgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OnNoYWRvd1Bz
ZXVkb0lkKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywg
cHNldWRvSWQsICgiLXdlYmtpdC1pbnB1dC1zcGVlY2gtYnV0dG9uIikpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRz
LmgJKHJldmlzaW9uIDk0MjAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KICAgICBTcGVlY2hJbnB1dFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc3RhcnRTcGVlY2hJbnB1dCgpOworICAgIHZvaWQgc3Rv
cFNwZWVjaElucHV0KCk7CiAKICAgICAvLyBTcGVlY2hJbnB1dExpc3RlbmVyIG1ldGhvZHMuCiAg
ICAgdm9pZCBkaWRDb21wbGV0ZVJlY29yZGluZyhpbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJ
KHJldmlzaW9uIDk0MjAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSwxMyArMTExLDYgQEAg
aW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbgogICAgIHJldHVybiBpbnB1
dEVsZW1lbnQoKS0+Y2FuY2VsQnV0dG9uRWxlbWVudCgpOwogfQogCi0jaWYgRU5BQkxFKElOUFVU
X1NQRUVDSCkKLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpzcGVlY2hCdXR0b25FbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50
KCktPnNwZWVjaEJ1dHRvbkVsZW1lbnQoKTsKLX0KLSNlbmRpZgotCiBSZW5kZXJTdHlsZSogUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmFzZVN0eWxlKCkgY29uc3QKIHsKICAgICBI
VE1MRWxlbWVudCogaW5uZXJCbG9jayA9IGlubmVyQmxvY2tFbGVtZW50KCk7CkBAIC0zNjQsNiAr
MzU3LDEzIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjYXBzTG8KICAgICB9
CiB9CiAKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQorSFRNTEVsZW1lbnQqIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c3BlZWNoQnV0dG9uRWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGlucHV0RWxlbWVudCgpLT5zcGVlY2hCdXR0b25FbGVtZW50KCk7Cit9CisjZW5kaWYKKwog
Ym9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omhhc0NvbnRyb2xDbGlwKCkgY29uc3QK
IHsKICAgICAvLyBBcHBseSBjb250cm9sIGNsaXAgZm9yIHRleHQgZmllbGRzIHdpdGggZGVjb3Jh
dGlvbnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oCShyZXZpc2lvbiA5NDIwMykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksNiArNDksMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBjYXBzTG9ja1N0YXRlTWF5
SGF2ZUNoYW5nZWQoKTsKIAorI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCisgICAgSFRNTEVsZW1l
bnQqIHNwZWVjaEJ1dHRvbkVsZW1lbnQoKSBjb25zdDsKKyNlbmRpZgorCiBwcml2YXRlOgogICAg
IHZpcnR1YWwgYm9vbCBoYXNDb250cm9sQ2xpcCgpIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0
UmVjdCBjb250cm9sQ2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKQEAgLTEyMCw5
ICsxMjQsNiBAQCBwcml2YXRlOgogICAgIEhUTUxFbGVtZW50KiBpbm5lclNwaW5CdXR0b25FbGVt
ZW50KCkgY29uc3Q7CiAgICAgSFRNTEVsZW1lbnQqIHJlc3VsdHNCdXR0b25FbGVtZW50KCkgY29u
c3Q7CiAgICAgSFRNTEVsZW1lbnQqIGNhbmNlbEJ1dHRvbkVsZW1lbnQoKSBjb25zdDsKLSNpZiBF
TkFCTEUoSU5QVVRfU1BFRUNIKQotICAgIEhUTUxFbGVtZW50KiBzcGVlY2hCdXR0b25FbGVtZW50
KCkgY29uc3Q7Ci0jZW5kaWYKIAogICAgIGJvb2wgbV9zZWFyY2hQb3B1cElzVmlzaWJsZTsKICAg
ICBib29sIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yOwpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0Mjc5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMS0wOS0wMSAgRG9t
aW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgQVBJIGZ1
bmN0aW9ucyB0byBlbmFibGUgc3RhcnRpbmcgYW5kIHN0b3BwaW5nIHNwZWVjaCBpbnB1dCwKKyAg
ICAgICAgYW5kIGNoZWNraW5nIHRoZSBjdXJyZW50IHNwZWVjaCBpbnB1dCBzdGF0ZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMTcwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViSW5w
dXRFbGVtZW50Lmg6CisgICAgICAgICogc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwOgorICAg
ICAgICAqIHNyYy9XZWJJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnB1
dEVsZW1lbnQ6OmlzU3BlZWNoSW5wdXRFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5w
dXRFbGVtZW50OjpnZXRTcGVlY2hJbnB1dFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5w
dXRFbGVtZW50OjpzdGFydFNwZWVjaElucHV0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5wdXRF
bGVtZW50OjpzdG9wU3BlZWNoSW5wdXQpOgorCiAyMDExLTA4LTMxICBHcmVnIEJpbGxvY2sgIDxn
YmlsbG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZCBwYXNzLXRocm91Z2hzIGZvciBOUE9i
amVjdC92ODo6VmFsdWUgbWFyc2hhbGxpbmcgdG8gV2ViQmluZGluZ3MKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RWxlbWVudC5oCShyZXZpc2lvbiA5
NDIwMykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAg
ICAvLyBQcm92aWRlcyByZWFkb25seSBhY2Nlc3MgdG8gc29tZSBwcm9wZXJ0aWVzIG9mIGEgRE9N
IGlucHV0IGVsZW1lbnQgbm9kZS4KICAgICBjbGFzcyBXZWJJbnB1dEVsZW1lbnQgOiBwdWJsaWMg
V2ViRm9ybUNvbnRyb2xFbGVtZW50IHsKICAgICBwdWJsaWM6CisgICAgICAgIGVudW0gU3BlZWNo
SW5wdXRTdGF0ZSB7CisgICAgICAgICAgICBJZGxlLAorICAgICAgICAgICAgUmVjb3JkaW5nLAor
ICAgICAgICAgICAgUmVjb2duaXppbmcsCisgICAgICAgIH07CisKICAgICAgICAgV2ViSW5wdXRF
bGVtZW50KCkgOiBXZWJGb3JtQ29udHJvbEVsZW1lbnQoKSB7IH0KICAgICAgICAgV2ViSW5wdXRF
bGVtZW50KGNvbnN0IFdlYklucHV0RWxlbWVudCYgZWxlbWVudCkgOiBXZWJGb3JtQ29udHJvbEVs
ZW1lbnQoZWxlbWVudCkgeyB9CiAKQEAgLTc4LDYgKzg0LDExIEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogICAgICAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNWYWxpZFZhbHVlKGNvbnN0IFdlYlN0cmlu
ZyYpIGNvbnN0OwogICAgICAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNDaGVja2VkKCkgY29uc3Q7
CiAKKyAgICAgICAgV0VCS0lUX0VYUE9SVCBib29sIGlzU3BlZWNoSW5wdXRFbmFibGVkKCkgY29u
c3Q7CisgICAgICAgIFdFQktJVF9FWFBPUlQgU3BlZWNoSW5wdXRTdGF0ZSBnZXRTcGVlY2hJbnB1
dFN0YXRlKCkgY29uc3Q7CisgICAgICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzdGFydFNwZWVjaElu
cHV0KCk7CisgICAgICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzdG9wU3BlZWNoSW5wdXQoKTsKKwog
ICAgICAgICAvLyBFeHBvc2VzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBtYXhMZW5ndGggYXR0
cmlidXRlLgogICAgICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBpbnQgZGVmYXVsdE1heExlbmd0
aCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0Vu
dW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRN
YXRjaGluZ0VudW1zLmNwcAkocmV2aXNpb24gOTQyMDMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiAr
NTcsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUluZm8uaCIK
ICNpbmNsdWRlICJUZXh0QWZmaW5pdHkuaCIKKyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxl
bWVudHMuaCIKICNpbmNsdWRlICJVc2VyQ29udGVudFR5cGVzLmgiCiAjaW5jbHVkZSAiVXNlclNj
cmlwdFR5cGVzLmgiCiAjaW5jbHVkZSAiVXNlclN0eWxlU2hlZXRUeXBlcy5oIgpAQCAtMzExLDYg
KzMxMiwxMCBAQCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkljb25VUkw6CiBDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkljb25VUkw6OlR5cGVUb3VjaCwgVG91Y2hJY29u
KTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSWNvblVSTDo6VHlwZVRvdWNoUHJl
Y29tcG9zZWQsIFRvdWNoUHJlY29tcG9zZWRJY29uKTsKIAorQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXZWJJbnB1dEVsZW1lbnQ6OklkbGUsIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVt
ZW50OjpJZGxlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSW5wdXRFbGVtZW50
OjpSZWNvcmRpbmcsIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpSZWNvcmRpbmcpOwor
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJbnB1dEVsZW1lbnQ6OlJlY29nbml6aW5n
LCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6UmVjb2duaXppbmcpOworCiBDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OkVsZW1lbnROb2RlLCBOb2RlOjpFTEVNRU5U
X05PREUpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpBdHRyaWJ1dGVO
b2RlLCBOb2RlOjpBVFRSSUJVVEVfTk9ERSk7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdlYk5vZGU6OlRleHROb2RlLCBOb2RlOjpURVhUX05PREUpOwpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDIwMykK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDkgQEAKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNp
bmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKKyNpbmNsdWRlICJUZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogCkBAIC0xNTAsNiArMTUzLDU5IEBAIGJvb2wgV2ViSW5wdXRFbGVt
ZW50Ojppc0NoZWNrZWQoKSBjb25zdAogICAgIHJldHVybiBjb25zdFVud3JhcDxIVE1MSW5wdXRF
bGVtZW50PigpLT5jaGVja2VkKCk7CiB9CiAKK2Jvb2wgV2ViSW5wdXRFbGVtZW50Ojppc1NwZWVj
aElucHV0RW5hYmxlZCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKKyAgICBy
ZXR1cm4gY29uc3RVbndyYXA8SFRNTElucHV0RWxlbWVudD4oKS0+aXNTcGVlY2hFbmFibGVkKCk7
CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitXZWJJbnB1dEVsZW1lbnQ6
OlNwZWVjaElucHV0U3RhdGUgV2ViSW5wdXRFbGVtZW50OjpnZXRTcGVlY2hJbnB1dFN0YXRlKCkg
Y29uc3QKK3sKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQorICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBjb25zdFVud3JhcDxIVE1MSW5wdXRFbGVtZW50PigpLT5yZW5kZXJlcigpOworICAg
IGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBJZGxlOworCisgICAgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lKiBjb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUo
cmVuZGVyZXIpOworICAgIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50KiBzcGVlY2hCdXR0
b24gPSB0b0lucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50KGNvbnRyb2wtPnNwZWVjaEJ1dHRv
bkVsZW1lbnQoKSk7CisgICAgaWYgKHNwZWVjaEJ1dHRvbikKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYklucHV0RWxlbWVudDo6U3BlZWNoSW5wdXRTdGF0ZT4oc3BlZWNoQnV0dG9uLT5z
dGF0ZSgpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIElkbGU7Cit9CisKK3ZvaWQgV2ViSW5wdXRF
bGVtZW50OjpzdGFydFNwZWVjaElucHV0KCkKK3sKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQor
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb25zdFVud3JhcDxIVE1MSW5wdXRFbGVtZW50
PigpLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSogY29udHJvbCA9IHRvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lKHJlbmRlcmVyKTsKKyAgICBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxl
bWVudCogc3BlZWNoQnV0dG9uID0gdG9JbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudChjb250
cm9sLT5zcGVlY2hCdXR0b25FbGVtZW50KCkpOworICAgIGlmIChzcGVlY2hCdXR0b24pCisgICAg
ICAgIHNwZWVjaEJ1dHRvbi0+c3RhcnRTcGVlY2hJbnB1dCgpOworI2VuZGlmCit9CisKK3ZvaWQg
V2ViSW5wdXRFbGVtZW50OjpzdG9wU3BlZWNoSW5wdXQoKQoreworI2lmIEVOQUJMRShJTlBVVF9T
UEVFQ0gpCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvbnN0VW53cmFwPEhUTUxJbnB1
dEVsZW1lbnQ+KCktPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKiBjb250cm9sID0gdG9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUocmVuZGVyZXIpOworICAgIElucHV0RmllbGRTcGVlY2hC
dXR0b25FbGVtZW50KiBzcGVlY2hCdXR0b24gPSB0b0lucHV0RmllbGRTcGVlY2hCdXR0b25FbGVt
ZW50KGNvbnRyb2wtPnNwZWVjaEJ1dHRvbkVsZW1lbnQoKSk7CisgICAgaWYgKHNwZWVjaEJ1dHRv
bikKKyAgICAgICAgc3BlZWNoQnV0dG9uLT5zdG9wU3BlZWNoSW5wdXQoKTsKKyNlbmRpZgorfQor
CiBpbnQgV2ViSW5wdXRFbGVtZW50OjpkZWZhdWx0TWF4TGVuZ3RoKCkKIHsKICAgICByZXR1cm4g
SFRNTElucHV0RWxlbWVudDo6bWF4aW11bUxlbmd0aDsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0Mjc5KQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDktMDEgIERv
bWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkcyBhIExh
eW91dFRlc3RDb250cm9sbGVyIG1ldGhvZCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHRlc3QKKyAg
ICAgICAgc3RhcnRpbmcgc3BlZWNoIGlucHV0IHZpYSBhbiBBUEkgY2FsbC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMTcwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xh
eW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpM
YXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3Rh
cnRTcGVlY2hJbnB1dCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0
VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVz
dENvbnRyb2xsZXJFZmwuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0
U3BlZWNoSW5wdXQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29u
dHJvbGxlckd0ay5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVl
Y2hJbnB1dCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9s
bGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5w
dXQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQu
Y3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDoKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQpOgorCiAyMDExLTA4LTMx
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBEdW1wUmVu
ZGVyVHJlZSB0byBXZWJLaXRQbGF0Zm9ybVN1cHBvcnQKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gOTQyMDMpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjUsNiArMTI1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3BhdGlhbE5hdmlnYXRpb25FbmFi
bGVkKGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIHNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1Jl
ZiBvcmllbnRhdGlvbiwgSlNTdHJpbmdSZWYgcG9saWN5KTsKICAgICB2b2lkIHNldEVkaXRpbmdC
ZWhhdmlvcihjb25zdCBjaGFyKiBlZGl0aW5nQmVoYXZpb3IpOworICAgIHZvaWQgc3RhcnRTcGVl
Y2hJbnB1dChKU0NvbnRleHRSZWYgaW5wdXRFbGVtZW50KTsKIAogICAgIHZvaWQgc2V0UGFnZVZp
c2liaWxpdHkoY29uc3QgY2hhciogdmlzaWJpbGl0eSkgeyB9CiAgICAgdm9pZCByZXNldFBhZ2VW
aXNpYmlsaXR5KCkgeyB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlv
dXRUZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5NDIwMykKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCw3IEBAIExheW91dFRlc3RDb250cm9sbGVyOjpMYXlv
dXRUZXN0Q29udHJvbGwKICAgICBiaW5kTWV0aG9kKCJzZXRBc3luY2hyb25vdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpOwogICAgIGJpbmRNZXRob2QoInNob3dXZWJJbnNwZWN0b3IiLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IpOwogICAgIGJpbmRNZXRob2QoInNp
bXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpz
aW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayk7CisgICAgYmluZE1ldGhvZCgic3RhcnRT
cGVlY2hJbnB1dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dCk7CiAg
ICAgYmluZE1ldGhvZCgic3VzcGVuZEFuaW1hdGlvbnMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnN1c3BlbmRBbmltYXRpb25zKTsKICAgICBiaW5kTWV0aG9kKCJ0ZXN0UmVwYWludCIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6dGVzdFJlcGFpbnQpOwogICAgIGJpbmRNZXRob2QoIndhaXRGb3JQ
b2xpY3lEZWxlZ2F0ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVn
YXRlKTsKQEAgLTE3MjUsNiArMTcyNiwyNiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjph
ZGRNb2NrU3BlZWNoCiAgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c3BlZWNoSW5wdXRDb250
cm9sbGVyTW9jaygpLT5hZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoY3BwVmFyaWFudFRvV2ViU3Ry
aW5nKGFyZ3VtZW50c1swXSksIGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpLCBjcHBWYXJpYW50VG9X
ZWJTdHJpbmcoYXJndW1lbnRzWzJdKSk7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSAhPSAxKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJFbGVtZW50IGVsZW1l
bnQ7CisgICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxlbWVudChhcmd1bWVudHNbMF0udmFsdWUu
b2JqZWN0VmFsdWUsICZlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViSW5wdXRF
bGVtZW50KiBpbnB1dCA9IHRvV2ViSW5wdXRFbGVtZW50KCZlbGVtZW50KTsKKyAgICBpZiAoIWlu
cHV0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWlucHV0LT5pc1NwZWVjaElucHV0RW5h
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnB1dC0+c3RhcnRTcGVlY2hJbnB1dCgp
OworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0
LT5zZXQobV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+bGF5ZXJUcmVlQXNUZXh0KG1f
c2hvd0RlYnVnTGF5ZXJUcmVlKS51dGY4KCkpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiA5NDIw
MykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2MCw2ICszNjAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBT
cGVlY2ggaW5wdXQgcmVsYXRlZCBmdW5jdGlvbnMuCiAgICAgdm9pZCBhZGRNb2NrU3BlZWNoSW5w
dXRSZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQg
c3RhcnRTcGVlY2hJbnB1dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAK
ICAgICB2b2lkIGxheWVyVHJlZUFzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENw
cFZhcmlhbnQqIHJlc3VsdCk7CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlv
dXRUZXN0Q29udHJvbGxlckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAkocmV2aXNpb24gOTQyMDMpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zODQsNiArMzg0LDEzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFkZE1vY2tTcGVlY2gKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0
cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5
NDg1LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIGlmICghZW5h
YmxlZCkgewpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9s
bGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0
VGVzdENvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiA5NDIwMykKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwMiw2ICs1MDIsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVj
aAogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0
ODUuCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQoSlND
b250ZXh0UmVmIGlucHV0RWxlbWVudCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBz
cGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIFdlYktpdElj
b25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJN
YWMubW0JKHJldmlzaW9uIDk0MjAzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91
dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsNiArNDgyLDEyIEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVs
ZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91
dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM5NDg1LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJh
c2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTogV29y
a2Fyb3VuZCA8cmRhcjovL3Byb2JsZW0vNjQ4MDEwOD4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCShyZXZpc2lvbiA5NDIw
MykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NzUsNiArODc1LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
dGFydFNwZWVjaElucHV0KGNvbnN0IFFTdHJpbmcmIGlucHV0RWxlbWVudCkKK3sKKyAgICAvLyBG
SVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGlu
dCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKG1fZHJ0LT53ZWJQYWdlKCkt
Pm1haW5GcmFtZSgpLCB3b3JsZElELCBzY3JpcHQpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkocmV2aXNpb24gOTQyMDMpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzMyw2ICsyMzMsNyBAQCBwdWJsaWMgc2xvdHM6CiAgICAgYm9vbCBnZW9s
b2NhdGlvblBlcm1pc3Npb24oKSBjb25zdCB7IHJldHVybiBtX2dlb2xvY2F0aW9uUGVybWlzc2lv
bjsgfQogCiAgICAgdm9pZCBhZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoY29uc3QgUVN0cmluZyYg
cmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgY29uc3QgUVN0cmluZyYgbGFuZ3VhZ2UpOworICAg
IHZvaWQgc3RhcnRTcGVlY2hJbnB1dChjb25zdCBRU3RyaW5nJiBpbnB1dEVsZW1lbnQpOwogCiAg
ICAgLy8gRW1wdHkgc3R1YiBtZXRob2QgdG8ga2VlcCBwYXJpdHkgd2l0aCBvYmplY3QgbW9kZWwg
ZXhwb3NlZCBieSBnbG9iYWwgTGF5b3V0VGVzdENvbnRyb2xsZXIuCiAgICAgdm9pZCBhYm9ydE1v
ZGFsKCkge30KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJv
bGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91
dFRlc3RDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gOTQyMDMpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTAsNiArNDUwLDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVl
Y2gKICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5
NDg1LgogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpT
Q29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Ig
c3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsK
ICAgICAvLyBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0vNjQ4MDEwOD4KSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCShyZXZp
c2lvbiA5NDIwMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9s
bGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsNiArMzc2LDEyIEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAg
ICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1Lgor
fQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJv
b2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA5NDI3OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTA5LTAxICBEb21pbmljIE1henpvbmkgIDxkbWF6
em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFkZHMgYSBuZXcgdGVzdCB0aGF0IGNoZWNrcyB0
cmlnZ2VyaW5nIHNwZWVjaCBpbnB1dCB2aWEgYW4gQVBJIGNhbGwuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDE3MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1z
cGVlY2h0cmlnZ2VyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9zcGVlY2gv
aW5wdXQtdGV4dC1zcGVlY2h0cmlnZ2VyLmh0bWw6IEFkZGVkLgorCiAyMDExLTA4LTMxICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIENyYXNoIHdoZW4gaW5zZXJ0
aW5nIHRleHQgd2l0aCBhIHRyYWlsaW5nIG5ld2xpbmUgaW50byBhIHRleHRhcmVhIHZpYSBKUwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2hzdGFydC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvaW5wdXQtdGV4
dC1zcGVlY2hzdGFydC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHN0YXJ0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdHMgZm9yIHRyaWdnZXJpbmcgc3BlZWNoIGRpcmVjdGx5
IGluIGEgPGlucHV0IHR5cGU9InRleHQiIHNwZWVjaD4uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzcGVlY2hJbnB1dCIpLnZh
bHVlIGlzICJQaWN0dXJlcyBvZiBhIHN1bnNldCIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0
cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHN0YXJ0LWV4cGVjdGVkLnR4dApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHN0YXJ0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2hzdGFydC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2hzdGFydC5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBz
cmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbignVGVzdHMgZm9y
IHRyaWdnZXJpbmcgc3BlZWNoIGRpcmVjdGx5IGluIGEgJmx0O2lucHV0IHR5cGU9InRleHQiIHNw
ZWVjaD4uJyk7CisKK2Z1bmN0aW9uIHN0YXJ0U3BlZWNoSW5wdXQoaWQpIHsKKyAgICAvLyBUZXN0
IHRoYXQgd2UgY2FuIHRyaWdnZXIgc3BlZWNoIHdpdGggYSBtZXRob2QgY2FsbCB0byB0aGUgaW5w
dXQKKyAgICAvLyBlbGVtZW50LCBzbyB0aGUgdXNlciBhZ2VudCBjb3VsZCB0b2dnbGUgc3BlZWNo
IHZpYSBhIGtleXByZXNzLAorICAgIC8vIGZvciBleGFtcGxlLgorICAgIHZhciBpbnB1dCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zdGFy
dFNwZWVjaElucHV0KGlucHV0KTsKK30KKworZnVuY3Rpb24gb25XZWJraXRTcGVlY2hDaGFuZ2Uo
KSB7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
c3BlZWNoSW5wdXQiKS52YWx1ZScsICdQaWN0dXJlcyBvZiBhIHN1bnNldCcpOworICAgIGZpbmlz
aEpTVGVzdCgpOworfQorCitmdW5jdGlvbiBydW4oKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KCdQaWN0dXJlcyBvZiBhIHN1bnNl
dCcsIDEuMCwgJycpOworICAgICAgICBzdGFydFNwZWVjaElucHV0KCJzcGVlY2hJbnB1dCIpOwor
ICAgIH0KK30KKword2luZG93Lm9ubG9hZCA9IHJ1bjsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8aW5w
dXQgaWQ9J3NwZWVjaElucHV0JyB4LXdlYmtpdC1zcGVlY2ggb253ZWJraXRzcGVlY2hjaGFuZ2U9
Im9uV2Via2l0U3BlZWNoQ2hhbmdlKCkiPgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hh
bmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2hzdGFydC5o
dG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106005</attachid>
            <date>2011-09-01 12:16:34 -0700</date>
            <delta_ts>2011-09-01 13:32:13 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-60170-20110901121633.patch</filename>
            <type>text/plain</type>
            <size>24445</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0Mjc5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDktMDEgIERvbWluaWMg
TWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIEFQSSBmdW5jdGlv
bnMgdG8gZW5hYmxlIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyBzcGVlY2ggaW5wdXQsCisgICAgICAg
IGFuZCBjaGVja2luZyB0aGUgY3VycmVudCBzcGVlY2ggaW5wdXQgc3RhdGUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDE3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KKworICAgICAgICBUZXN0OiBmYXN0L3NwZWVjaC9p
bnB1dC10ZXh0LXNwZWVjaHN0YXJ0Lmh0bWwKKworICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c3RhcnRTcGVlY2hJbnB1dCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c3RvcFNwZWVjaElu
cHV0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3BlZWNoQnV0dG9u
RWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5oOgorCiAyMDExLTA5LTAxICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJlbmFtZSBjb2xvclNlbGVjdGVkIHRvIGRpZENob29zZUNvbG9yCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJF
bGVtZW50cy5jcHAJKHJldmlzaW9uIDk0MjAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDE2
ICs0MzQsMTEgQEAgdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6ZGVmYQogCiAg
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgbV9saXN0
ZW5lcklkKSB7CiAgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgICAgICBjYXNlIElkbGU6
IHsKLSAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIGxhbmd1YWdlID0gaW5wdXQtPmNvbXB1dGVJ
bmhlcml0ZWRMYW5ndWFnZSgpOwotICAgICAgICAgICAgICBTdHJpbmcgZ3JhbW1hciA9IGlucHV0
LT5nZXRBdHRyaWJ1dGUod2Via2l0Z3JhbW1hckF0dHIpOwotICAgICAgICAgICAgICBJbnRSZWN0
IHJlY3QgPSByZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwotICAgICAgICAg
ICAgICBpZiAoc3BlZWNoSW5wdXQoKS0+c3RhcnRSZWNvZ25pdGlvbihtX2xpc3RlbmVySWQsIHJl
Y3QsIGxhbmd1YWdlLCBncmFtbWFyLCBkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKLSAg
ICAgICAgICAgICAgICAgIHNldFN0YXRlKFJlY29yZGluZyk7Ci0gICAgICAgICAgICB9CisgICAg
ICAgIGNhc2UgSWRsZToKKyAgICAgICAgICAgIHN0YXJ0U3BlZWNoSW5wdXQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlY29yZGluZzoKLSAgICAgICAgICAgIHNwZWVjaElu
cHV0KCktPnN0b3BSZWNvcmRpbmcobV9saXN0ZW5lcklkKTsKKyAgICAgICAgICAgIHN0b3BTcGVl
Y2hJbnB1dCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVjb2duaXppbmc6
CiAgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUsIHdlIHdpbGwgY29udGludWUgdG8g
d2FpdCBmb3IgcmVzdWx0cy4KQEAgLTUyNCw2ICs1MTksMjUgQEAgdm9pZCBJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uRWxlbWVudDo6ZGV0YQogICAgIEhUTUxEaXZFbGVtZW50OjpkZXRhY2goKTsKIH0K
IAordm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c3RhcnRTcGVlY2hJbnB1dCgp
Cit7CisgICAgaWYgKG1fc3RhdGUgIT0gSWRsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVm
UHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
PihzaGFkb3dBbmNlc3Rvck5vZGUoKSkpOworICAgIEF0b21pY1N0cmluZyBsYW5ndWFnZSA9IGlu
cHV0LT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsKKyAgICBTdHJpbmcgZ3JhbW1hciA9IGlu
cHV0LT5nZXRBdHRyaWJ1dGUod2Via2l0Z3JhbW1hckF0dHIpOworICAgIEludFJlY3QgcmVjdCA9
IGlucHV0LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOworICAgIGlmIChz
cGVlY2hJbnB1dCgpLT5zdGFydFJlY29nbml0aW9uKG1fbGlzdGVuZXJJZCwgcmVjdCwgbGFuZ3Vh
Z2UsIGdyYW1tYXIsIGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICBzZXRT
dGF0ZShSZWNvcmRpbmcpOworfQorCit2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50
OjpzdG9wU3BlZWNoSW5wdXQoKQoreworICAgIGlmIChtX3N0YXRlID09IFJlY29yZGluZykKKyAg
ICAgICAgc3BlZWNoSW5wdXQoKS0+c3RvcFJlY29yZGluZyhtX2xpc3RlbmVySWQpOworfQorCiBj
b25zdCBBdG9taWNTdHJpbmcmIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzaGFkb3dQ
c2V1ZG9JZCgpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IHBzZXVkb0lkLCAoIi13ZWJraXQtaW5wdXQtc3BlZWNoLWJ1dHRvbiIpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50
cy5oCShyZXZpc2lvbiA5NDIwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNiArMTQwLDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAg
ICAgdmlydHVhbCBib29sIGlzSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAgICAgU3BlZWNoSW5wdXRTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGU7IH0KKyAgICB2b2lkIHN0YXJ0U3BlZWNoSW5wdXQoKTsKKyAgICB2b2lkIHN0
b3BTcGVlY2hJbnB1dCgpOwogCiAgICAgLy8gU3BlZWNoSW5wdXRMaXN0ZW5lciBtZXRob2RzLgog
ICAgIHZvaWQgZGlkQ29tcGxldGVSZWNvcmRpbmcoaW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
CShyZXZpc2lvbiA5NDIwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMTMgKzExMSw2IEBA
IGlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW4KICAgICByZXR1cm4gaW5w
dXRFbGVtZW50KCktPmNhbmNlbEJ1dHRvbkVsZW1lbnQoKTsKIH0KIAotI2lmIEVOQUJMRShJTlBV
VF9TUEVFQ0gpCi1pbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6c3BlZWNoQnV0dG9uRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVu
dCgpLT5zcGVlY2hCdXR0b25FbGVtZW50KCk7Ci19Ci0jZW5kaWYKLQogUmVuZGVyU3R5bGUqIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dGV4dEJhc2VTdHlsZSgpIGNvbnN0CiB7CiAgICAg
SFRNTEVsZW1lbnQqIGlubmVyQmxvY2sgPSBpbm5lckJsb2NrRWxlbWVudCgpOwpAQCAtMzY0LDYg
KzM1NywxMyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2Fwc0xvCiAgICAg
fQogfQogCisjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKK0hUTUxFbGVtZW50KiBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnNwZWVjaEJ1dHRvbkVsZW1lbnQoKSBjb25zdAoreworICAgIHJl
dHVybiBpbnB1dEVsZW1lbnQoKS0+c3BlZWNoQnV0dG9uRWxlbWVudCgpOworfQorI2VuZGlmCisK
IGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpoYXNDb250cm9sQ2xpcCgpIGNvbnN0
CiB7CiAgICAgLy8gQXBwbHkgY29udHJvbCBjbGlwIGZvciB0ZXh0IGZpZWxkcyB3aXRoIGRlY29y
YXRpb25zLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2aXNpb24gOTQyMDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2Fwc0xvY2tTdGF0ZU1h
eUhhdmVDaGFuZ2VkKCk7CiAKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQorICAgIEhUTUxFbGVt
ZW50KiBzcGVlY2hCdXR0b25FbGVtZW50KCkgY29uc3Q7CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25zdDsKICAgICB2aXJ0dWFsIExheW91
dFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CkBAIC0xMjAs
OSArMTI0LDYgQEAgcHJpdmF0ZToKICAgICBIVE1MRWxlbWVudCogaW5uZXJTcGluQnV0dG9uRWxl
bWVudCgpIGNvbnN0OwogICAgIEhUTUxFbGVtZW50KiByZXN1bHRzQnV0dG9uRWxlbWVudCgpIGNv
bnN0OwogICAgIEhUTUxFbGVtZW50KiBjYW5jZWxCdXR0b25FbGVtZW50KCkgY29uc3Q7Ci0jaWYg
RU5BQkxFKElOUFVUX1NQRUVDSCkKLSAgICBIVE1MRWxlbWVudCogc3BlZWNoQnV0dG9uRWxlbWVu
dCgpIGNvbnN0OwotI2VuZGlmCiAKICAgICBib29sIG1fc2VhcmNoUG9wdXBJc1Zpc2libGU7CiAg
ICAgYm9vbCBtX3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcjsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5NDI3OSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDktMDEgIERv
bWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIEFQSSBm
dW5jdGlvbnMgdG8gZW5hYmxlIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyBzcGVlY2ggaW5wdXQsCisg
ICAgICAgIGFuZCBjaGVja2luZyB0aGUgY3VycmVudCBzcGVlY2ggaW5wdXQgc3RhdGUuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDE3MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KKworICAgICAgICAqIHB1YmxpYy9XZWJJ
bnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHA6Cisg
ICAgICAgICogc3JjL1dlYklucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklu
cHV0RWxlbWVudDo6aXNTcGVlY2hJbnB1dEVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnB1dEVsZW1lbnQ6OmdldFNwZWVjaElucHV0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnB1dEVsZW1lbnQ6OnN0YXJ0U3BlZWNoSW5wdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnB1
dEVsZW1lbnQ6OnN0b3BTcGVlY2hJbnB1dCk6CisKIDIwMTEtMDgtMzEgIEdyZWcgQmlsbG9jayAg
PGdiaWxsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAgQWRkIHBhc3MtdGhyb3VnaHMgZm9yIE5Q
T2JqZWN0L3Y4OjpWYWx1ZSBtYXJzaGFsbGluZyB0byBXZWJCaW5kaW5ncwpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFbGVtZW50LmgJKHJldmlzaW9u
IDk0MjAzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDEyIEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
ICAgIC8vIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBzb21lIHByb3BlcnRpZXMgb2YgYSBE
T00gaW5wdXQgZWxlbWVudCBub2RlLgogICAgIGNsYXNzIFdlYklucHV0RWxlbWVudCA6IHB1Ymxp
YyBXZWJGb3JtQ29udHJvbEVsZW1lbnQgewogICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBTcGVl
Y2hJbnB1dFN0YXRlIHsKKyAgICAgICAgICAgIElkbGUsCisgICAgICAgICAgICBSZWNvcmRpbmcs
CisgICAgICAgICAgICBSZWNvZ25pemluZywKKyAgICAgICAgfTsKKwogICAgICAgICBXZWJJbnB1
dEVsZW1lbnQoKSA6IFdlYkZvcm1Db250cm9sRWxlbWVudCgpIHsgfQogICAgICAgICBXZWJJbnB1
dEVsZW1lbnQoY29uc3QgV2ViSW5wdXRFbGVtZW50JiBlbGVtZW50KSA6IFdlYkZvcm1Db250cm9s
RWxlbWVudChlbGVtZW50KSB7IH0KIApAQCAtNzgsNiArODQsMTEgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAgICAgICAgIFdFQktJVF9FWFBPUlQgYm9vbCBpc1ZhbGlkVmFsdWUoY29uc3QgV2ViU3Ry
aW5nJikgY29uc3Q7CiAgICAgICAgIFdFQktJVF9FWFBPUlQgYm9vbCBpc0NoZWNrZWQoKSBjb25z
dDsKIAorICAgICAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNTcGVlY2hJbnB1dEVuYWJsZWQoKSBj
b25zdDsKKyAgICAgICAgV0VCS0lUX0VYUE9SVCBTcGVlY2hJbnB1dFN0YXRlIGdldFNwZWVjaElu
cHV0U3RhdGUoKSBjb25zdDsKKyAgICAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHN0YXJ0U3BlZWNo
SW5wdXQoKTsKKyAgICAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHN0b3BTcGVlY2hJbnB1dCgpOwor
CiAgICAgICAgIC8vIEV4cG9zZXMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1heExlbmd0aCBh
dHRyaWJ1dGUuCiAgICAgICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIGludCBkZWZhdWx0TWF4TGVu
Z3RoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5n
RW51bXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2Vy
dE1hdGNoaW5nRW51bXMuY3BwCShyZXZpc2lvbiA5NDIwMykKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2
ICs1Nyw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdG9yYWdlSW5mby5o
IgogI2luY2x1ZGUgIlRleHRBZmZpbml0eS5oIgorI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJF
bGVtZW50cy5oIgogI2luY2x1ZGUgIlVzZXJDb250ZW50VHlwZXMuaCIKICNpbmNsdWRlICJVc2Vy
U2NyaXB0VHlwZXMuaCIKICNpbmNsdWRlICJVc2VyU3R5bGVTaGVldFR5cGVzLmgiCkBAIC0zMTEs
NiArMzEyLDEwIEBAIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSWNvblVSTDoKIENP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSWNvblVSTDo6VHlwZVRvdWNoLCBUb3VjaElj
b24pOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJY29uVVJMOjpUeXBlVG91Y2hQ
cmVjb21wb3NlZCwgVG91Y2hQcmVjb21wb3NlZEljb24pOwogCitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYklucHV0RWxlbWVudDo6SWRsZSwgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVs
ZW1lbnQ6OklkbGUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJbnB1dEVsZW1l
bnQ6OlJlY29yZGluZywgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OlJlY29yZGluZyk7
CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYklucHV0RWxlbWVudDo6UmVjb2duaXpp
bmcsIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpSZWNvZ25pemluZyk7CisKIENPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6RWxlbWVudE5vZGUsIE5vZGU6OkVMRU1F
TlRfTk9ERSk7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OkF0dHJpYnV0
ZU5vZGUsIE5vZGU6OkFUVFJJQlVURV9OT0RFKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViTm9kZTo6VGV4dE5vZGUsIE5vZGU6OlRFWFRfTk9ERSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDk0MjAz
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOSBAQAogCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgor
I2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgorI2luY2x1ZGUgIlRleHRD
b250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAKQEAgLTE1MCw2ICsxNTMsNTkgQEAgYm9vbCBXZWJJbnB1dEVs
ZW1lbnQ6OmlzQ2hlY2tlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnN0VW53cmFwPEhUTUxJbnB1
dEVsZW1lbnQ+KCktPmNoZWNrZWQoKTsKIH0KIAorYm9vbCBXZWJJbnB1dEVsZW1lbnQ6OmlzU3Bl
ZWNoSW5wdXRFbmFibGVkKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQorICAg
IHJldHVybiBjb25zdFVud3JhcDxIVE1MSW5wdXRFbGVtZW50PigpLT5pc1NwZWVjaEVuYWJsZWQo
KTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK1dlYklucHV0RWxlbWVu
dDo6U3BlZWNoSW5wdXRTdGF0ZSBXZWJJbnB1dEVsZW1lbnQ6OmdldFNwZWVjaElucHV0U3RhdGUo
KSBjb25zdAoreworI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCisgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGNvbnN0VW53cmFwPEhUTUxJbnB1dEVsZW1lbnQ+KCktPnJlbmRlcmVyKCk7Cisg
ICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIElkbGU7CisKKyAgICBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUqIGNvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZShyZW5kZXJlcik7CisgICAgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQqIHNwZWVjaEJ1
dHRvbiA9IHRvSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQoY29udHJvbC0+c3BlZWNoQnV0
dG9uRWxlbWVudCgpKTsKKyAgICBpZiAoc3BlZWNoQnV0dG9uKQorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V2ViSW5wdXRFbGVtZW50OjpTcGVlY2hJbnB1dFN0YXRlPihzcGVlY2hCdXR0b24t
PnN0YXRlKCkpOworI2VuZGlmCisKKyAgICByZXR1cm4gSWRsZTsKK30KKwordm9pZCBXZWJJbnB1
dEVsZW1lbnQ6OnN0YXJ0U3BlZWNoSW5wdXQoKQoreworI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gp
CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvbnN0VW53cmFwPEhUTUxJbnB1dEVsZW1l
bnQ+KCktPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKiBjb250cm9sID0gdG9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUocmVuZGVyZXIpOworICAgIElucHV0RmllbGRTcGVlY2hCdXR0b25F
bGVtZW50KiBzcGVlY2hCdXR0b24gPSB0b0lucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50KGNv
bnRyb2wtPnNwZWVjaEJ1dHRvbkVsZW1lbnQoKSk7CisgICAgaWYgKHNwZWVjaEJ1dHRvbikKKyAg
ICAgICAgc3BlZWNoQnV0dG9uLT5zdGFydFNwZWVjaElucHV0KCk7CisjZW5kaWYKK30KKwordm9p
ZCBXZWJJbnB1dEVsZW1lbnQ6OnN0b3BTcGVlY2hJbnB1dCgpCit7CisjaWYgRU5BQkxFKElOUFVU
X1NQRUVDSCkKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29uc3RVbndyYXA8SFRNTElu
cHV0RWxlbWVudD4oKS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIGNvbnRyb2wgPSB0b1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZShyZW5kZXJlcik7CisgICAgSW5wdXRGaWVsZFNwZWVj
aEJ1dHRvbkVsZW1lbnQqIHNwZWVjaEJ1dHRvbiA9IHRvSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVs
ZW1lbnQoY29udHJvbC0+c3BlZWNoQnV0dG9uRWxlbWVudCgpKTsKKyAgICBpZiAoc3BlZWNoQnV0
dG9uKQorICAgICAgICBzcGVlY2hCdXR0b24tPnN0b3BTcGVlY2hJbnB1dCgpOworI2VuZGlmCit9
CisKIGludCBXZWJJbnB1dEVsZW1lbnQ6OmRlZmF1bHRNYXhMZW5ndGgoKQogewogICAgIHJldHVy
biBIVE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gOTQyNzkpCisrKyBUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMCBAQAorMjAxMS0wOS0wMSAg
RG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGRzIGEg
TGF5b3V0VGVzdENvbnRyb2xsZXIgbWV0aG9kIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gdGVzdAor
ICAgICAgICBzdGFydGluZyBzcGVlY2ggaW5wdXQgdmlhIGFuIEFQSSBjYWxsLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAxNzAKKworICAgICAgICBS
ZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c3RhcnRTcGVlY2hJbnB1dCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5
b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0
VGVzdENvbnRyb2xsZXJFZmwuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0
YXJ0U3BlZWNoSW5wdXQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0
Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRT
cGVlY2hJbnB1dCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250
cm9sbGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNo
SW5wdXQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVy
UXQuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDoK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3Bw
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQpOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQpOgorCiAyMDExLTA4
LTMxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBEdW1w
UmVuZGVyVHJlZSB0byBXZWJLaXRQbGF0Zm9ybVN1cHBvcnQKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gOTQyMDMpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjUsNiArMTI1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3BhdGlhbE5hdmlnYXRpb25F
bmFibGVkKGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIHNldFNjcm9sbGJhclBvbGljeShKU1N0cmlu
Z1JlZiBvcmllbnRhdGlvbiwgSlNTdHJpbmdSZWYgcG9saWN5KTsKICAgICB2b2lkIHNldEVkaXRp
bmdCZWhhdmlvcihjb25zdCBjaGFyKiBlZGl0aW5nQmVoYXZpb3IpOworICAgIHZvaWQgc3RhcnRT
cGVlY2hJbnB1dChKU0NvbnRleHRSZWYgaW5wdXRFbGVtZW50KTsKIAogICAgIHZvaWQgc2V0UGFn
ZVZpc2liaWxpdHkoY29uc3QgY2hhciogdmlzaWJpbGl0eSkgeyB9CiAgICAgdm9pZCByZXNldFBh
Z2VWaXNpYmlsaXR5KCkgeyB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5NDIwMykKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCw3IEBAIExheW91dFRlc3RDb250cm9sbGVyOjpM
YXlvdXRUZXN0Q29udHJvbGwKICAgICBiaW5kTWV0aG9kKCJzZXRBc3luY2hyb25vdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQpOwogICAgIGJpbmRNZXRob2QoInNob3dXZWJJbnNwZWN0b3IiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IpOwogICAgIGJpbmRNZXRob2Qo
InNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayk7CisgICAgYmluZE1ldGhvZCgic3Rh
cnRTcGVlY2hJbnB1dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dCk7
CiAgICAgYmluZE1ldGhvZCgic3VzcGVuZEFuaW1hdGlvbnMiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN1c3BlbmRBbmltYXRpb25zKTsKICAgICBiaW5kTWV0aG9kKCJ0ZXN0UmVwYWludCIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6dGVzdFJlcGFpbnQpOwogICAgIGJpbmRNZXRob2QoIndhaXRG
b3JQb2xpY3lEZWxlZ2F0ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURl
bGVnYXRlKTsKQEAgLTE3MjUsNiArMTcyNiwyNiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjphZGRNb2NrU3BlZWNoCiAgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c3BlZWNoSW5wdXRD
b250cm9sbGVyTW9jaygpLT5hZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoY3BwVmFyaWFudFRvV2Vi
U3RyaW5nKGFyZ3VtZW50c1swXSksIGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpLCBjcHBWYXJpYW50
VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKSk7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSAhPSAxKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJFbGVtZW50IGVs
ZW1lbnQ7CisgICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxlbWVudChhcmd1bWVudHNbMF0udmFs
dWUub2JqZWN0VmFsdWUsICZlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViSW5w
dXRFbGVtZW50KiBpbnB1dCA9IHRvV2ViSW5wdXRFbGVtZW50KCZlbGVtZW50KTsKKyAgICBpZiAo
IWlucHV0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWlucHV0LT5pc1NwZWVjaElucHV0
RW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnB1dC0+c3RhcnRTcGVlY2hJbnB1
dCgpOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVz
dWx0LT5zZXQobV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+bGF5ZXJUcmVlQXNUZXh0
KG1fc2hvd0RlYnVnTGF5ZXJUcmVlKS51dGY4KCkpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiA5
NDIwMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2MCw2ICszNjAsNyBAQCBwdWJsaWM6CiAKICAgICAv
LyBTcGVlY2ggaW5wdXQgcmVsYXRlZCBmdW5jdGlvbnMuCiAgICAgdm9pZCBhZGRNb2NrU3BlZWNo
SW5wdXRSZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZv
aWQgc3RhcnRTcGVlY2hJbnB1dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CiAKICAgICB2b2lkIGxheWVyVHJlZUFzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Ms
IENwcFZhcmlhbnQqIHJlc3VsdCk7CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9M
YXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAkocmV2aXNpb24gOTQyMDMpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zODQsNiArMzg0LDEzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFkZE1vY2tTcGVlY2gKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1l
bnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0
ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM5NDg1LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIGlmICgh
ZW5hYmxlZCkgewpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250
cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5
b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiA5NDIwMykKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwMiw2ICs1MDIsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1Nw
ZWVjaAogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mzk0ODUuCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQo
SlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZv
ciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xs
ZXJNYWMubW0JKHJldmlzaW9uIDk0MjAzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsNiArNDgyLDEy
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1
dEVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxh
eW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM5NDg1LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0
YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTog
V29ya2Fyb3VuZCA8cmRhcjovL3Byb2JsZW0vNjQ4MDEwOD4KSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCShyZXZpc2lvbiA5
NDIwMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzUsNiArODc1LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzdGFydFNwZWVjaElucHV0KGNvbnN0IFFTdHJpbmcmIGlucHV0RWxlbWVudCkKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisK
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
KGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKG1fZHJ0LT53ZWJQYWdl
KCktPm1haW5GcmFtZSgpLCB3b3JsZElELCBzY3JpcHQpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkocmV2aXNpb24gOTQyMDMp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzMyw2ICsyMzMsNyBAQCBwdWJsaWMgc2xvdHM6CiAgICAgYm9vbCBn
ZW9sb2NhdGlvblBlcm1pc3Npb24oKSBjb25zdCB7IHJldHVybiBtX2dlb2xvY2F0aW9uUGVybWlz
c2lvbjsgfQogCiAgICAgdm9pZCBhZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoY29uc3QgUVN0cmlu
ZyYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgY29uc3QgUVN0cmluZyYgbGFuZ3VhZ2UpOwor
ICAgIHZvaWQgc3RhcnRTcGVlY2hJbnB1dChjb25zdCBRU3RyaW5nJiBpbnB1dEVsZW1lbnQpOwog
CiAgICAgLy8gRW1wdHkgc3R1YiBtZXRob2QgdG8ga2VlcCBwYXJpdHkgd2l0aCBvYmplY3QgbW9k
ZWwgZXhwb3NlZCBieSBnbG9iYWwgTGF5b3V0VGVzdENvbnRyb2xsZXIuCiAgICAgdm9pZCBhYm9y
dE1vZGFsKCkge30KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29u
dHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xh
eW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gOTQyMDMpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NTAsNiArNDUwLDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tT
cGVlY2gKICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM5NDg1LgogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0
KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBm
b3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCiB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkK
IHsKICAgICAvLyBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0vNjQ4MDEwOD4KSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCShy
ZXZpc2lvbiA5NDIwMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250
cm9sbGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsNiArMzc2LDEyIEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4K
KyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1
LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVk
KGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA5NDI3OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTA5LTAxICBEb21pbmljIE1henpvbmkgIDxk
bWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFkZHMgYSBuZXcgdGVzdCB0aGF0IGNoZWNr
cyB0cmlnZ2VyaW5nIHNwZWVjaCBpbnB1dCB2aWEgYW4gQVBJIGNhbGwuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDE3MAorCisgICAgICAgIFJldmll
d2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KKworICAgICAgICAqIGZhc3Qvc3BlZWNoL2lucHV0LXRl
eHQtc3BlZWNodHJpZ2dlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc3Bl
ZWNoL2lucHV0LXRleHQtc3BlZWNodHJpZ2dlci5odG1sOiBBZGRlZC4KKwogMjAxMS0wOC0zMSAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmFzaCB3aGVuIGlu
c2VydGluZyB0ZXh0IHdpdGggYSB0cmFpbGluZyBuZXdsaW5lIGludG8gYSB0ZXh0YXJlYSB2aWEg
SlMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNoc3RhcnQt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0
LXRleHQtc3BlZWNoc3RhcnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2hzdGFydC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3RzIGZvciB0cmlnZ2VyaW5nIHNwZWVjaCBkaXJl
Y3RseSBpbiBhIDxpbnB1dCB0eXBlPSJ0ZXh0IiBzcGVlY2g+LgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BlZWNoSW5wdXQi
KS52YWx1ZSBpcyAiUGljdHVyZXMgb2YgYSBzdW5zZXQiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0
VGVzdHMvZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2hzdGFydC1leHBlY3RlZC50eHQKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9zcGVlY2gvaW5wdXQtdGV4dC1zcGVlY2hzdGFydC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNoc3RhcnQuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNoc3RhcnQu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3Jp
cHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZGVzY3JpcHRpb24oJ1Rlc3Rz
IGZvciB0cmlnZ2VyaW5nIHNwZWVjaCBkaXJlY3RseSBpbiBhICZsdDtpbnB1dCB0eXBlPSJ0ZXh0
IiBzcGVlY2g+LicpOworCitmdW5jdGlvbiBzdGFydFNwZWVjaElucHV0KGlkKSB7CisgICAgLy8g
VGVzdCB0aGF0IHdlIGNhbiB0cmlnZ2VyIHNwZWVjaCB3aXRoIGEgbWV0aG9kIGNhbGwgdG8gdGhl
IGlucHV0CisgICAgLy8gZWxlbWVudCwgc28gdGhlIHVzZXIgYWdlbnQgY291bGQgdG9nZ2xlIHNw
ZWVjaCB2aWEgYSBrZXlwcmVzcywKKyAgICAvLyBmb3IgZXhhbXBsZS4KKyAgICB2YXIgaW5wdXQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
c3RhcnRTcGVlY2hJbnB1dChpbnB1dCk7Cit9CisKK2Z1bmN0aW9uIG9uV2Via2l0U3BlZWNoQ2hh
bmdlKCkgeworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInNwZWVjaElucHV0IikudmFsdWUnLCAnUGljdHVyZXMgb2YgYSBzdW5zZXQnKTsKKyAgICBm
aW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gcnVuKCkgeworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCgnUGljdHVyZXMgb2YgYSBz
dW5zZXQnLCAxLjAsICcnKTsKKyAgICAgICAgc3RhcnRTcGVlY2hJbnB1dCgic3BlZWNoSW5wdXQi
KTsKKyAgICB9Cit9CisKK3dpbmRvdy5vbmxvYWQgPSBydW47Cit3aW5kb3cuanNUZXN0SXNBc3lu
YyA9IHRydWU7Cit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PGlucHV0IGlkPSdzcGVlY2hJbnB1dCcgeC13ZWJraXQtc3BlZWNoIG9ud2Via2l0c3BlZWNoY2hh
bmdlPSJvbldlYmtpdFNwZWVjaENoYW5nZSgpIj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5
IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNoc3Rh
cnQuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106017</attachid>
            <date>2011-09-01 13:32:19 -0700</date>
            <delta_ts>2011-09-05 05:19:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60170-20110901133218.patch</filename>
            <type>text/plain</type>
            <size>24446</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0Mjc5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDktMDEgIERvbWluaWMg
TWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIEFQSSBmdW5jdGlv
bnMgdG8gZW5hYmxlIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyBzcGVlY2ggaW5wdXQsCisgICAgICAg
IGFuZCBjaGVja2luZyB0aGUgY3VycmVudCBzcGVlY2ggaW5wdXQgc3RhdGUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDE3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KKworICAgICAgICBUZXN0OiBmYXN0L3NwZWVjaC9p
bnB1dC10ZXh0LXNwZWVjaHN0YXJ0Lmh0bWwKKworICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c3RhcnRTcGVlY2hJbnB1dCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c3RvcFNwZWVjaElu
cHV0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3BlZWNoQnV0dG9u
RWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5oOgorCiAyMDExLTA5LTAxICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJlbmFtZSBjb2xvclNlbGVjdGVkIHRvIGRpZENob29zZUNvbG9yCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJF
bGVtZW50cy5jcHAJKHJldmlzaW9uIDk0MjAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDE2
ICs0MzQsMTEgQEAgdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6ZGVmYQogCiAg
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgbV9saXN0
ZW5lcklkKSB7CiAgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgICAgICBjYXNlIElkbGU6
IHsKLSAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIGxhbmd1YWdlID0gaW5wdXQtPmNvbXB1dGVJ
bmhlcml0ZWRMYW5ndWFnZSgpOwotICAgICAgICAgICAgICBTdHJpbmcgZ3JhbW1hciA9IGlucHV0
LT5nZXRBdHRyaWJ1dGUod2Via2l0Z3JhbW1hckF0dHIpOwotICAgICAgICAgICAgICBJbnRSZWN0
IHJlY3QgPSByZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwotICAgICAgICAg
ICAgICBpZiAoc3BlZWNoSW5wdXQoKS0+c3RhcnRSZWNvZ25pdGlvbihtX2xpc3RlbmVySWQsIHJl
Y3QsIGxhbmd1YWdlLCBncmFtbWFyLCBkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKLSAg
ICAgICAgICAgICAgICAgIHNldFN0YXRlKFJlY29yZGluZyk7Ci0gICAgICAgICAgICB9CisgICAg
ICAgIGNhc2UgSWRsZToKKyAgICAgICAgICAgIHN0YXJ0U3BlZWNoSW5wdXQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlY29yZGluZzoKLSAgICAgICAgICAgIHNwZWVjaElu
cHV0KCktPnN0b3BSZWNvcmRpbmcobV9saXN0ZW5lcklkKTsKKyAgICAgICAgICAgIHN0b3BTcGVl
Y2hJbnB1dCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVjb2duaXppbmc6
CiAgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUsIHdlIHdpbGwgY29udGludWUgdG8g
d2FpdCBmb3IgcmVzdWx0cy4KQEAgLTUyNCw2ICs1MTksMjUgQEAgdm9pZCBJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uRWxlbWVudDo6ZGV0YQogICAgIEhUTUxEaXZFbGVtZW50OjpkZXRhY2goKTsKIH0K
IAordm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c3RhcnRTcGVlY2hJbnB1dCgp
Cit7CisgICAgaWYgKG1fc3RhdGUgIT0gSWRsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVm
UHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKTsKKyAgICBBdG9taWNTdHJpbmcgbGFuZ3VhZ2UgPSBp
bnB1dC0+Y29tcHV0ZUluaGVyaXRlZExhbmd1YWdlKCk7CisgICAgU3RyaW5nIGdyYW1tYXIgPSBp
bnB1dC0+Z2V0QXR0cmlidXRlKHdlYmtpdGdyYW1tYXJBdHRyKTsKKyAgICBJbnRSZWN0IHJlY3Qg
PSBpbnB1dC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKKyAgICBpZiAo
c3BlZWNoSW5wdXQoKS0+c3RhcnRSZWNvZ25pdGlvbihtX2xpc3RlbmVySWQsIHJlY3QsIGxhbmd1
YWdlLCBncmFtbWFyLCBkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgc2V0
U3RhdGUoUmVjb3JkaW5nKTsKK30KKwordm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVu
dDo6c3RvcFNwZWVjaElucHV0KCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBSZWNvcmRpbmcpCisg
ICAgICAgIHNwZWVjaElucHV0KCktPnN0b3BSZWNvcmRpbmcobV9saXN0ZW5lcklkKTsKK30KKwog
Y29uc3QgQXRvbWljU3RyaW5nJiBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c2hhZG93
UHNldWRvSWQoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBwc2V1ZG9JZCwgKCItd2Via2l0LWlucHV0LXNwZWVjaC1idXR0b24iKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuaAkocmV2aXNpb24gOTQyMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0
Q29udHJvbElubmVyRWxlbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwog
ICAgIHZpcnR1YWwgYm9vbCBpc0lucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIFNwZWVjaElucHV0U3RhdGUgc3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlOyB9CisgICAgdm9pZCBzdGFydFNwZWVjaElucHV0KCk7CisgICAgdm9pZCBz
dG9wU3BlZWNoSW5wdXQoKTsKIAogICAgIC8vIFNwZWVjaElucHV0TGlzdGVuZXIgbWV0aG9kcy4K
ICAgICB2b2lkIGRpZENvbXBsZXRlUmVjb3JkaW5nKGludCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cAkocmV2aXNpb24gOTQyMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDEzICsxMTEsNiBA
QCBpbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luCiAgICAgcmV0dXJuIGlu
cHV0RWxlbWVudCgpLT5jYW5jZWxCdXR0b25FbGVtZW50KCk7CiB9CiAKLSNpZiBFTkFCTEUoSU5Q
VVRfU1BFRUNIKQotaW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnNwZWVjaEJ1dHRvbkVsZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBpbnB1dEVsZW1l
bnQoKS0+c3BlZWNoQnV0dG9uRWxlbWVudCgpOwotfQotI2VuZGlmCi0KIFJlbmRlclN0eWxlKiBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHRCYXNlU3R5bGUoKSBjb25zdAogewogICAg
IEhUTUxFbGVtZW50KiBpbm5lckJsb2NrID0gaW5uZXJCbG9ja0VsZW1lbnQoKTsKQEAgLTM2NCw2
ICszNTcsMTMgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNhcHNMbwogICAg
IH0KIH0KIAorI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCitIVE1MRWxlbWVudCogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpzcGVlY2hCdXR0b25FbGVtZW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaW5wdXRFbGVtZW50KCktPnNwZWVjaEJ1dHRvbkVsZW1lbnQoKTsKK30KKyNlbmRpZgor
CiBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aGFzQ29udHJvbENsaXAoKSBjb25z
dAogewogICAgIC8vIEFwcGx5IGNvbnRyb2wgY2xpcCBmb3IgdGV4dCBmaWVsZHMgd2l0aCBkZWNv
cmF0aW9ucy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHJldmlzaW9uIDk0MjAzKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw2ICs0OSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNhcHNMb2NrU3RhdGVN
YXlIYXZlQ2hhbmdlZCgpOwogCisjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKKyAgICBIVE1MRWxl
bWVudCogc3BlZWNoQnV0dG9uRWxlbWVudCgpIGNvbnN0OworI2VuZGlmCisKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBib29sIGhhc0NvbnRyb2xDbGlwKCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlv
dXRSZWN0IGNvbnRyb2xDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwpAQCAtMTIw
LDkgKzEyNCw2IEBAIHByaXZhdGU6CiAgICAgSFRNTEVsZW1lbnQqIGlubmVyU3BpbkJ1dHRvbkVs
ZW1lbnQoKSBjb25zdDsKICAgICBIVE1MRWxlbWVudCogcmVzdWx0c0J1dHRvbkVsZW1lbnQoKSBj
b25zdDsKICAgICBIVE1MRWxlbWVudCogY2FuY2VsQnV0dG9uRWxlbWVudCgpIGNvbnN0OwotI2lm
IEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0gICAgSFRNTEVsZW1lbnQqIHNwZWVjaEJ1dHRvbkVsZW1l
bnQoKSBjb25zdDsKLSNlbmRpZgogCiAgICAgYm9vbCBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlOwog
ICAgIGJvb2wgbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3I7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTQyNzkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDExLTA5LTAxICBE
b21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFkZCBBUEkg
ZnVuY3Rpb25zIHRvIGVuYWJsZSBzdGFydGluZyBhbmQgc3RvcHBpbmcgc3BlZWNoIGlucHV0LAor
ICAgICAgICBhbmQgY2hlY2tpbmcgdGhlIGN1cnJlbnQgc3BlZWNoIGlucHV0IHN0YXRlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAxNzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCisKKyAgICAgICAgKiBwdWJsaWMvV2Vi
SW5wdXRFbGVtZW50Lmg6CisgICAgICAgICogc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwOgor
ICAgICAgICAqIHNyYy9XZWJJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnB1dEVsZW1lbnQ6OmlzU3BlZWNoSW5wdXRFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5wdXRFbGVtZW50OjpnZXRTcGVlY2hJbnB1dFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5wdXRFbGVtZW50OjpzdGFydFNwZWVjaElucHV0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5w
dXRFbGVtZW50OjpzdG9wU3BlZWNoSW5wdXQpOgorCiAyMDExLTA4LTMxICBHcmVnIEJpbGxvY2sg
IDxnYmlsbG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZCBwYXNzLXRocm91Z2hzIGZvciBO
UE9iamVjdC92ODo6VmFsdWUgbWFyc2hhbGxpbmcgdG8gV2ViQmluZGluZ3MKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RWxlbWVudC5oCShyZXZpc2lv
biA5NDIwMykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
ICAgICAvLyBQcm92aWRlcyByZWFkb25seSBhY2Nlc3MgdG8gc29tZSBwcm9wZXJ0aWVzIG9mIGEg
RE9NIGlucHV0IGVsZW1lbnQgbm9kZS4KICAgICBjbGFzcyBXZWJJbnB1dEVsZW1lbnQgOiBwdWJs
aWMgV2ViRm9ybUNvbnRyb2xFbGVtZW50IHsKICAgICBwdWJsaWM6CisgICAgICAgIGVudW0gU3Bl
ZWNoSW5wdXRTdGF0ZSB7CisgICAgICAgICAgICBJZGxlLAorICAgICAgICAgICAgUmVjb3JkaW5n
LAorICAgICAgICAgICAgUmVjb2duaXppbmcsCisgICAgICAgIH07CisKICAgICAgICAgV2ViSW5w
dXRFbGVtZW50KCkgOiBXZWJGb3JtQ29udHJvbEVsZW1lbnQoKSB7IH0KICAgICAgICAgV2ViSW5w
dXRFbGVtZW50KGNvbnN0IFdlYklucHV0RWxlbWVudCYgZWxlbWVudCkgOiBXZWJGb3JtQ29udHJv
bEVsZW1lbnQoZWxlbWVudCkgeyB9CiAKQEAgLTc4LDYgKzg0LDExIEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogICAgICAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNWYWxpZFZhbHVlKGNvbnN0IFdlYlN0
cmluZyYpIGNvbnN0OwogICAgICAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNDaGVja2VkKCkgY29u
c3Q7CiAKKyAgICAgICAgV0VCS0lUX0VYUE9SVCBib29sIGlzU3BlZWNoSW5wdXRFbmFibGVkKCkg
Y29uc3Q7CisgICAgICAgIFdFQktJVF9FWFBPUlQgU3BlZWNoSW5wdXRTdGF0ZSBnZXRTcGVlY2hJ
bnB1dFN0YXRlKCkgY29uc3Q7CisgICAgICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzdGFydFNwZWVj
aElucHV0KCk7CisgICAgICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzdG9wU3BlZWNoSW5wdXQoKTsK
KwogICAgICAgICAvLyBFeHBvc2VzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBtYXhMZW5ndGgg
YXR0cmlidXRlLgogICAgICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBpbnQgZGVmYXVsdE1heExl
bmd0aCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGlu
Z0VudW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3Nl
cnRNYXRjaGluZ0VudW1zLmNwcAkocmV2aXNpb24gOTQyMDMpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcs
NiArNTcsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUluZm8u
aCIKICNpbmNsdWRlICJUZXh0QWZmaW5pdHkuaCIKKyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVy
RWxlbWVudHMuaCIKICNpbmNsdWRlICJVc2VyQ29udGVudFR5cGVzLmgiCiAjaW5jbHVkZSAiVXNl
clNjcmlwdFR5cGVzLmgiCiAjaW5jbHVkZSAiVXNlclN0eWxlU2hlZXRUeXBlcy5oIgpAQCAtMzEx
LDYgKzMxMiwxMCBAQCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkljb25VUkw6CiBD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkljb25VUkw6OlR5cGVUb3VjaCwgVG91Y2hJ
Y29uKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSWNvblVSTDo6VHlwZVRvdWNo
UHJlY29tcG9zZWQsIFRvdWNoUHJlY29tcG9zZWRJY29uKTsKIAorQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJJbnB1dEVsZW1lbnQ6OklkbGUsIElucHV0RmllbGRTcGVlY2hCdXR0b25F
bGVtZW50OjpJZGxlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSW5wdXRFbGVt
ZW50OjpSZWNvcmRpbmcsIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpSZWNvcmRpbmcp
OworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJbnB1dEVsZW1lbnQ6OlJlY29nbml6
aW5nLCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6UmVjb2duaXppbmcpOworCiBDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OkVsZW1lbnROb2RlLCBOb2RlOjpFTEVN
RU5UX05PREUpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpBdHRyaWJ1
dGVOb2RlLCBOb2RlOjpBVFRSSUJVVEVfTk9ERSk7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdlYk5vZGU6OlRleHROb2RlLCBOb2RlOjpURVhUX05PREUpOwpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDIw
MykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDkgQEAKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
KyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKKyNpbmNsdWRlICJUZXh0
Q29udHJvbElubmVyRWxlbWVudHMuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogCkBAIC0xNTAsNiArMTUzLDU5IEBAIGJvb2wgV2ViSW5wdXRF
bGVtZW50Ojppc0NoZWNrZWQoKSBjb25zdAogICAgIHJldHVybiBjb25zdFVud3JhcDxIVE1MSW5w
dXRFbGVtZW50PigpLT5jaGVja2VkKCk7CiB9CiAKK2Jvb2wgV2ViSW5wdXRFbGVtZW50Ojppc1Nw
ZWVjaElucHV0RW5hYmxlZCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKKyAg
ICByZXR1cm4gY29uc3RVbndyYXA8SFRNTElucHV0RWxlbWVudD4oKS0+aXNTcGVlY2hFbmFibGVk
KCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitXZWJJbnB1dEVsZW1l
bnQ6OlNwZWVjaElucHV0U3RhdGUgV2ViSW5wdXRFbGVtZW50OjpnZXRTcGVlY2hJbnB1dFN0YXRl
KCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQorICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBjb25zdFVud3JhcDxIVE1MSW5wdXRFbGVtZW50PigpLT5yZW5kZXJlcigpOwor
ICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBJZGxlOworCisgICAgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lKiBjb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUocmVuZGVyZXIpOworICAgIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50KiBzcGVlY2hC
dXR0b24gPSB0b0lucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50KGNvbnRyb2wtPnNwZWVjaEJ1
dHRvbkVsZW1lbnQoKSk7CisgICAgaWYgKHNwZWVjaEJ1dHRvbikKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFdlYklucHV0RWxlbWVudDo6U3BlZWNoSW5wdXRTdGF0ZT4oc3BlZWNoQnV0dG9u
LT5zdGF0ZSgpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIElkbGU7Cit9CisKK3ZvaWQgV2ViSW5w
dXRFbGVtZW50OjpzdGFydFNwZWVjaElucHV0KCkKK3sKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNI
KQorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb25zdFVud3JhcDxIVE1MSW5wdXRFbGVt
ZW50PigpLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSogY29udHJvbCA9IHRvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lKHJlbmRlcmVyKTsKKyAgICBJbnB1dEZpZWxkU3BlZWNoQnV0dG9u
RWxlbWVudCogc3BlZWNoQnV0dG9uID0gdG9JbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudChj
b250cm9sLT5zcGVlY2hCdXR0b25FbGVtZW50KCkpOworICAgIGlmIChzcGVlY2hCdXR0b24pCisg
ICAgICAgIHNwZWVjaEJ1dHRvbi0+c3RhcnRTcGVlY2hJbnB1dCgpOworI2VuZGlmCit9CisKK3Zv
aWQgV2ViSW5wdXRFbGVtZW50OjpzdG9wU3BlZWNoSW5wdXQoKQoreworI2lmIEVOQUJMRShJTlBV
VF9TUEVFQ0gpCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvbnN0VW53cmFwPEhUTUxJ
bnB1dEVsZW1lbnQ+KCktPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKiBjb250cm9sID0gdG9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUocmVuZGVyZXIpOworICAgIElucHV0RmllbGRTcGVl
Y2hCdXR0b25FbGVtZW50KiBzcGVlY2hCdXR0b24gPSB0b0lucHV0RmllbGRTcGVlY2hCdXR0b25F
bGVtZW50KGNvbnRyb2wtPnNwZWVjaEJ1dHRvbkVsZW1lbnQoKSk7CisgICAgaWYgKHNwZWVjaEJ1
dHRvbikKKyAgICAgICAgc3BlZWNoQnV0dG9uLT5zdG9wU3BlZWNoSW5wdXQoKTsKKyNlbmRpZgor
fQorCiBpbnQgV2ViSW5wdXRFbGVtZW50OjpkZWZhdWx0TWF4TGVuZ3RoKCkKIHsKICAgICByZXR1
cm4gSFRNTElucHV0RWxlbWVudDo6bWF4aW11bUxlbmd0aDsKSW5kZXg6IFRvb2xzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0Mjc5KQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDktMDEg
IERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkcyBh
IExheW91dFRlc3RDb250cm9sbGVyIG1ldGhvZCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHRlc3QK
KyAgICAgICAgc3RhcnRpbmcgc3BlZWNoIGlucHV0IHZpYSBhbiBBUEkgY2FsbC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMTcwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6TGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnN0YXJ0U3BlZWNoSW5wdXQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xh
eW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0xheW91
dFRlc3RDb250cm9sbGVyRWZsLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
dGFydFNwZWVjaElucHV0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVz
dENvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0
U3BlZWNoSW5wdXQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29u
dHJvbGxlck1hYy5tbToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVj
aElucHV0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxl
clF0LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0Lmg6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNw
cDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcDoKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KToKKwogMjAxMS0w
OC0zMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIE1vdmUgRHVt
cFJlbmRlclRyZWUgdG8gV2ViS2l0UGxhdGZvcm1TdXBwb3J0CkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDk0MjAzKQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTI1LDYgKzEyNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNwYXRpYWxOYXZpZ2F0aW9u
RW5hYmxlZChib29sIGVuYWJsZSk7CiAgICAgdm9pZCBzZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJp
bmdSZWYgb3JpZW50YXRpb24sIEpTU3RyaW5nUmVmIHBvbGljeSk7CiAgICAgdm9pZCBzZXRFZGl0
aW5nQmVoYXZpb3IoY29uc3QgY2hhciogZWRpdGluZ0JlaGF2aW9yKTsKKyAgICB2b2lkIHN0YXJ0
U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCk7CiAKICAgICB2b2lkIHNldFBh
Z2VWaXNpYmlsaXR5KGNvbnN0IGNoYXIqIHZpc2liaWxpdHkpIHsgfQogICAgIHZvaWQgcmVzZXRQ
YWdlVmlzaWJpbGl0eSgpIHsgfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gOTQyMDMpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsNyBAQCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
TGF5b3V0VGVzdENvbnRyb2xsCiAgICAgYmluZE1ldGhvZCgic2V0QXN5bmNocm9ub3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKTsKICAgICBiaW5kTWV0aG9kKCJzaG93V2ViSW5zcGVjdG9yIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKTsKICAgICBiaW5kTWV0aG9k
KCJzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2spOworICAgIGJpbmRNZXRob2QoInN0
YXJ0U3BlZWNoSW5wdXQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQp
OwogICAgIGJpbmRNZXRob2QoInN1c3BlbmRBbmltYXRpb25zIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpzdXNwZW5kQW5pbWF0aW9ucyk7CiAgICAgYmluZE1ldGhvZCgidGVzdFJlcGFpbnQiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnRlc3RSZXBhaW50KTsKICAgICBiaW5kTWV0aG9kKCJ3YWl0
Rm9yUG9saWN5RGVsZWdhdGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lE
ZWxlZ2F0ZSk7CkBAIC0xNzI1LDYgKzE3MjYsMjYgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YWRkTW9ja1NwZWVjaAogICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnNwZWVjaElucHV0
Q29udHJvbGxlck1vY2soKS0+YWRkTW9ja1JlY29nbml0aW9uUmVzdWx0KGNwcFZhcmlhbnRUb1dl
YlN0cmluZyhhcmd1bWVudHNbMF0pLCBhcmd1bWVudHNbMV0udG9Eb3VibGUoKSwgY3BwVmFyaWFu
dFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSkpOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzdGFydFNwZWVjaElucHV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgIT0gMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRWxlbWVudCBl
bGVtZW50OworICAgIGlmICghV2ViQmluZGluZ3M6OmdldEVsZW1lbnQoYXJndW1lbnRzWzBdLnZh
bHVlLm9iamVjdFZhbHVlLCAmZWxlbWVudCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYklu
cHV0RWxlbWVudCogaW5wdXQgPSB0b1dlYklucHV0RWxlbWVudCgmZWxlbWVudCk7CisgICAgaWYg
KCFpbnB1dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbnB1dC0+aXNTcGVlY2hJbnB1
dEVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5wdXQtPnN0YXJ0U3BlZWNoSW5w
dXQoKTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJl
c3VsdC0+c2V0KG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPmxheWVyVHJlZUFzVGV4
dChtX3Nob3dEZWJ1Z0xheWVyVHJlZSkudXRmOCgpKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24g
OTQyMDMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjAsNiArMzYwLDcgQEAgcHVibGljOgogCiAgICAg
Ly8gU3BlZWNoIGlucHV0IHJlbGF0ZWQgZnVuY3Rpb25zLgogICAgIHZvaWQgYWRkTW9ja1NwZWVj
aElucHV0UmVzdWx0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2
b2lkIHN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwogCiAgICAgdm9pZCBsYXllclRyZWVBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdz
LCBDcHBWYXJpYW50KiByZXN1bHQpOwogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
TGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAJKHJldmlzaW9uIDk0MjAzKQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzg0LDYgKzM4NCwxMyBAQCB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjphZGRNb2NrU3BlZWNoCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChKU0NvbnRleHRSZWYgaW5wdXRFbGVt
ZW50KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQg
dGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zOTQ4NS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAo
IWVuYWJsZWQpIHsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29u
dHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xh
eW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gOTQyMDMpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MDIsNiArNTAyLDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tT
cGVlY2gKICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM5NDg1LgogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0
KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBm
b3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCiB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBXZWJL
aXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7Cklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9s
bGVyTWFjLm1tCShyZXZpc2lvbiA5NDIwMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9M
YXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgyLDYgKzQ4Miwx
MiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoCiAgICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChKU0NvbnRleHRSZWYgaW5w
dXRFbGVtZW50KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBs
YXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zOTQ4NS4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRh
dGFiYXNlRW5hYmxlZChib29sIGljb25EYXRhYmFzZUVuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6
IFdvcmthcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzY0ODAxMDg+CkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAkocmV2aXNpb24g
OTQyMDMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODc1LDYgKzg3NSwxMiBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphZGRNb2NrU3BlZWNoCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c3RhcnRTcGVlY2hJbnB1dChjb25zdCBRU3RyaW5nJiBpbnB1dEVsZW1lbnQpCit7CisgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAv
LyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQor
CiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZChpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQogewogICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChtX2RydC0+d2ViUGFn
ZSgpLT5tYWluRnJhbWUoKSwgd29ybGRJRCwgc2NyaXB0KTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHJldmlzaW9uIDk0MjAz
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzMsNiArMjMzLDcgQEAgcHVibGljIHNsb3RzOgogICAgIGJvb2wg
Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9nZW9sb2NhdGlvblBlcm1p
c3Npb247IH0KIAogICAgIHZvaWQgYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IFFTdHJp
bmcmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIGNvbnN0IFFTdHJpbmcmIGxhbmd1YWdlKTsK
KyAgICB2b2lkIHN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgUVN0cmluZyYgaW5wdXRFbGVtZW50KTsK
IAogICAgIC8vIEVtcHR5IHN0dWIgbWV0aG9kIHRvIGtlZXAgcGFyaXR5IHdpdGggb2JqZWN0IG1v
ZGVsIGV4cG9zZWQgYnkgZ2xvYmFsIExheW91dFRlc3RDb250cm9sbGVyLgogICAgIHZvaWQgYWJv
cnRNb2RhbCgpIHt9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENv
bnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9M
YXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDk0MjAzKQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUwLDYgKzQ1MCwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2Nr
U3BlZWNoCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zOTQ4NS4KIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1
dChKU0NvbnRleHRSZWYgaW5wdXRFbGVtZW50KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
Zm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGljb25EYXRhYmFzZUVuYWJsZWQp
CiB7CiAgICAgLy8gU2VlIGFsc28gPHJkYXI6Ly9wcm9ibGVtLzY0ODAxMDg+CkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAko
cmV2aXNpb24gOTQyMDMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29u
dHJvbGxlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDYgKzM3NiwxMiBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChKU0NvbnRleHRSZWYgaW5wdXRFbGVtZW50KQor
eworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMu
CisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4
NS4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxl
ZChib29sIGljb25EYXRhYmFzZUVuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudApJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gOTQyNzkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wOS0wMSAgRG9taW5pYyBNYXp6b25pICA8
ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGRzIGEgbmV3IHRlc3QgdGhhdCBjaGVj
a3MgdHJpZ2dlcmluZyBzcGVlY2ggaW5wdXQgdmlhIGFuIEFQSSBjYWxsLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAxNzAKKworICAgICAgICBSZXZp
ZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCisKKyAgICAgICAgKiBmYXN0L3NwZWVjaC9pbnB1dC10
ZXh0LXNwZWVjaHRyaWdnZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3Nw
ZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHRyaWdnZXIuaHRtbDogQWRkZWQuCisKIDIwMTEtMDgtMzEg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ3Jhc2ggd2hlbiBp
bnNlcnRpbmcgdGV4dCB3aXRoIGEgdHJhaWxpbmcgbmV3bGluZSBpbnRvIGEgdGV4dGFyZWEgdmlh
IEpTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHN0YXJ0
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1
dC10ZXh0LXNwZWVjaHN0YXJ0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNoc3RhcnQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0cyBmb3IgdHJpZ2dlcmluZyBzcGVlY2ggZGly
ZWN0bHkgaW4gYSA8aW5wdXQgdHlwZT0idGV4dCIgc3BlZWNoPi4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwZWVjaElucHV0
IikudmFsdWUgaXMgIlBpY3R1cmVzIG9mIGEgc3Vuc2V0IgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91
dFRlc3RzL2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNoc3RhcnQtZXhwZWN0ZWQudHh0Cl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvc3BlZWNoL2lucHV0LXRleHQtc3BlZWNoc3RhcnQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHN0YXJ0Lmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHN0YXJ0
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0aW9uKCdUZXN0
cyBmb3IgdHJpZ2dlcmluZyBzcGVlY2ggZGlyZWN0bHkgaW4gYSAmbHQ7aW5wdXQgdHlwZT0idGV4
dCIgc3BlZWNoPi4nKTsKKworZnVuY3Rpb24gc3RhcnRTcGVlY2hJbnB1dChpZCkgeworICAgIC8v
IFRlc3QgdGhhdCB3ZSBjYW4gdHJpZ2dlciBzcGVlY2ggd2l0aCBhIG1ldGhvZCBjYWxsIHRvIHRo
ZSBpbnB1dAorICAgIC8vIGVsZW1lbnQsIHNvIHRoZSB1c2VyIGFnZW50IGNvdWxkIHRvZ2dsZSBz
cGVlY2ggdmlhIGEga2V5cHJlc3MsCisgICAgLy8gZm9yIGV4YW1wbGUuCisgICAgdmFyIGlucHV0
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgIGxheW91dFRlc3RDb250cm9sbGVy
LnN0YXJ0U3BlZWNoSW5wdXQoaW5wdXQpOworfQorCitmdW5jdGlvbiBvbldlYmtpdFNwZWVjaENo
YW5nZSgpIHsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2RvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJzcGVlY2hJbnB1dCIpLnZhbHVlJywgJ1BpY3R1cmVzIG9mIGEgc3Vuc2V0Jyk7CisgICAg
ZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIHJ1bigpIHsKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5hZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoJ1BpY3R1cmVzIG9mIGEg
c3Vuc2V0JywgMS4wLCAnJyk7CisgICAgICAgIHN0YXJ0U3BlZWNoSW5wdXQoInNwZWVjaElucHV0
Iik7CisgICAgfQorfQorCit3aW5kb3cub25sb2FkID0gcnVuOword2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzxpbnB1dCBpZD0nc3BlZWNoSW5wdXQnIHgtd2Via2l0LXNwZWVjaCBvbndlYmtpdHNwZWVjaGNo
YW5nZT0ib25XZWJraXRTcGVlY2hDaGFuZ2UoKSI+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9pbnB1dC10ZXh0LXNwZWVjaHN0
YXJ0Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>