<?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>116798</bug_id>
          
          <creation_ts>2013-05-26 15:56:03 -0700</creation_ts>
          <short_desc>Support the &apos;onended&apos; EventListener property for AudioBufferSourceNode and OscillatorNode.</short_desc>
          <delta_ts>2013-05-29 10:12:07 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>116871</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>crogers</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>praveen.j</cc>
    
    <cc>russell.mcclellan</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>893816</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-05-26 15:56:03 -0700</bug_when>
    <thetext>Support the &apos;onended&apos; EventListener property for AudioBufferSourceNode and OscillatorNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893817</commentid>
    <comment_count>1</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-05-26 15:56:49 -0700</bug_when>
    <thetext>See &lt;https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html&gt;, section 4.10.1 and 4.23.1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893819</commentid>
    <comment_count>2</comment_count>
      <attachid>202932</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-05-26 16:02:05 -0700</bug_when>
    <thetext>Created attachment 202932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893820</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-26 16:03:53 -0700</bug_when>
    <thetext>Attachment 202932 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/webaudio/audiobuffersource-ended-expected.txt&apos;, u&apos;LayoutTests/webaudio/audiobuffersource-ended.html&apos;, u&apos;LayoutTests/webaudio/oscillator-ended-expected.txt&apos;, u&apos;LayoutTests/webaudio/oscillator-ended.html&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioBufferSourceNode.idl&apos;, u&apos;Source/WebCore/Modules/webaudio/OscillatorNode.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/OscillatorNode.h&apos;, u&apos;Source/WebCore/Modules/webaudio/OscillatorNode.idl&apos;, u&apos;Source/WebCore/dom/EventTarget.h&apos;, u&apos;Source/WebCore/dom/EventTargetFactory.in&apos;]&quot; exit_code: 1
Source/WebCore/dom/EventTarget.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 14 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>894100</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2013-05-27 11:30:13 -0700</bug_when>
    <thetext>Thanks Jer, a couple of high-level comments:

* I&apos;d love to have AudioNode itself inherit from EventTarget according to the current spec:
We should be able to easily back-port this recent Blink patch:
https://codereview.chromium.org/14028011/

* Once that&apos;s done, then I think it&apos;s easy to move the notification up into AudioScheduledSourceNode::finish(), so we can share between AudioBufferSourceNode and OscillatorNode

* I think it&apos;s very important to add an optimization such that the callOnMainThread() does *not* happen unless an event listener has actually been added to &quot;onended&quot;.  We can avoid the overhead of the thread hops in most cases.  It should be possible to keep track if an event listener has been added by over-riding addEventListener() and also not directly using the DEFINE_ATTRIBUTE_EVENT_LISTENER macro, but instead related lower-level macros to know when it has been set...

* Just to make matters more complicated, we&apos;ll also need to make AudioNode inherit from ActiveDOMObject, so that the JS object doesn&apos;t get garbage collected before the listeners have had a chance to fire (can happen now sometimes in ScriptProcessorNode).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894107</commentid>
    <comment_count>5</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-05-27 11:47:42 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Thanks Jer, a couple of high-level comments:
&gt; 
&gt; * I&apos;d love to have AudioNode itself inherit from EventTarget according to the current spec:
&gt; We should be able to easily back-port this recent Blink patch:
&gt; https://codereview.chromium.org/14028011/
&gt; 
&gt; * Once that&apos;s done, then I think it&apos;s easy to move the notification up into AudioScheduledSourceNode::finish(), so we can share between AudioBufferSourceNode and OscillatorNode

Sure.

&gt; * I think it&apos;s very important to add an optimization such that the callOnMainThread() does *not* happen unless an event listener has actually been added to &quot;onended&quot;.  We can avoid the overhead of the thread hops in most cases.  It should be possible to keep track if an event listener has been added by over-riding addEventListener() and also not directly using the DEFINE_ATTRIBUTE_EVENT_LISTENER macro, but instead related lower-level macros to know when it has been set...

That seems like a lot of paperwork to avoid a thread hop: the call to the main thread isn&apos;t synchronous. And that paperwork will have to be thread-safe.  But i&apos;ll look into it.

&gt; * Just to make matters more complicated, we&apos;ll also need to make AudioNode inherit from ActiveDOMObject, so that the JS object doesn&apos;t get garbage collected before the listeners have had a chance to fire (can happen now sometimes in ScriptProcessorNode).

That should be easy enough; it comes for free with EventTarget nowadays.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894115</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2013-05-27 12:24:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Thanks Jer, a couple of high-level comments:
&gt; &gt; 
&gt; &gt; * I&apos;d love to have AudioNode itself inherit from EventTarget according to the current spec:
&gt; &gt; We should be able to easily back-port this recent Blink patch:
&gt; &gt; https://codereview.chromium.org/14028011/
&gt; &gt; 
&gt; &gt; * Once that&apos;s done, then I think it&apos;s easy to move the notification up into AudioScheduledSourceNode::finish(), so we can share between AudioBufferSourceNode and OscillatorNode
&gt; 
&gt; Sure.
&gt; 
&gt; &gt; * I think it&apos;s very important to add an optimization such that the callOnMainThread() does *not* happen unless an event listener has actually been added to &quot;onended&quot;.  We can avoid the overhead of the thread hops in most cases.  It should be possible to keep track if an event listener has been added by over-riding addEventListener() and also not directly using the DEFINE_ATTRIBUTE_EVENT_LISTENER macro, but instead related lower-level macros to know when it has been set...
&gt; 
&gt; That seems like a lot of paperwork to avoid a thread hop: the call to the main thread isn&apos;t synchronous. And that paperwork will have to be thread-safe.  But i&apos;ll look into it.

It shouldn&apos;t be that bad, and I&apos;m happy to help with that part.

&gt; 
&gt; &gt; * Just to make matters more complicated, we&apos;ll also need to make AudioNode inherit from ActiveDOMObject, so that the JS object doesn&apos;t get garbage collected before the listeners have had a chance to fire (can happen now sometimes in ScriptProcessorNode).
&gt; 
&gt; That should be easy enough; it comes for free with EventTarget nowadays.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894120</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2013-05-27 12:30:24 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; Thanks Jer, a couple of high-level comments:
&gt; &gt; &gt; 
&gt; &gt; &gt; * I&apos;d love to have AudioNode itself inherit from EventTarget according to the current spec:
&gt; &gt; &gt; We should be able to easily back-port this recent Blink patch:
&gt; &gt; &gt; https://codereview.chromium.org/14028011/
&gt; &gt; &gt; 
&gt; &gt; &gt; * Once that&apos;s done, then I think it&apos;s easy to move the notification up into AudioScheduledSourceNode::finish(), so we can share between AudioBufferSourceNode and OscillatorNode
&gt; &gt; 
&gt; &gt; Sure.
&gt; &gt; 
&gt; &gt; &gt; * I think it&apos;s very important to add an optimization such that the callOnMainThread() does *not* happen unless an event listener has actually been added to &quot;onended&quot;.  We can avoid the overhead of the thread hops in most cases.  It should be possible to keep track if an event listener has been added by over-riding addEventListener() and also not directly using the DEFINE_ATTRIBUTE_EVENT_LISTENER macro, but instead related lower-level macros to know when it has been set...
&gt; &gt; 
&gt; &gt; That seems like a lot of paperwork to avoid a thread hop: the call to the main thread isn&apos;t synchronous. And that paperwork will have to be thread-safe.  But i&apos;ll look into it.
&gt; 
&gt; It shouldn&apos;t be that bad, and I&apos;m happy to help with that part.

It should just boil down to a &quot;bool&quot; being set, so the thread safety shouldn&apos;t be an issue.  Actually what I&apos;m concerned with other than the in-efficiency of triggering lots of main thread activity when nothing will actually happen is that the callOnMainThread() itself takes a lock which can be contended on the real-time audio thread.  It&apos;s true we already take this risk with ScriptProcessorNode, but I don&apos;t want to take this hit for every single short sound which is played with AudioBufferSourceNode.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; * Just to make matters more complicated, we&apos;ll also need to make AudioNode inherit from ActiveDOMObject, so that the JS object doesn&apos;t get garbage collected before the listeners have had a chance to fire (can happen now sometimes in ScriptProcessorNode).
&gt; &gt; 
&gt; &gt; That should be easy enough; it comes for free with EventTarget nowadays.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894384</commentid>
    <comment_count>8</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-05-28 09:28:05 -0700</bug_when>
    <thetext>Okay, I filed bug #116871 to track merging in the AudioNode work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894426</commentid>
    <comment_count>9</comment_count>
      <attachid>203070</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-05-28 10:59:07 -0700</bug_when>
    <thetext>Created attachment 203070
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894430</commentid>
    <comment_count>10</comment_count>
      <attachid>203070</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-28 11:15:06 -0700</bug_when>
    <thetext>Comment on attachment 203070
Patch

Attachment 203070 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/716160</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894432</commentid>
    <comment_count>11</comment_count>
      <attachid>203071</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-05-28 11:19:18 -0700</bug_when>
    <thetext>Created attachment 203071
Patch

Removed inadventant semicolon (which would be a terrible band name).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894805</commentid>
    <comment_count>12</comment_count>
    <who name="Praveen Jadhav">praveen.j</who>
    <bug_when>2013-05-29 02:36:06 -0700</bug_when>
    <thetext>*** Bug 115955 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894975</commentid>
    <comment_count>13</comment_count>
      <attachid>203071</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-05-29 09:14:11 -0700</bug_when>
    <thetext>Comment on attachment 203071
Patch

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

&gt; Source/WebCore/ChangeLog:18
&gt; +        (WebCore::AudioScheduledSourceNode::onended): Added; boilerplate.

Might want to remove this inadvertent semicolon too (which is an equally bad band name, even when spelled correctly :¬) ).

&gt; Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.cpp:200
&gt; +    if (!onended())
&gt; +        return;
&gt; +
&gt; +    RefPtr&lt;Event&gt; event = Event::create(eventNames().endedEvent, FALSE, FALSE);
&gt; +    event-&gt;setTarget(this);
&gt; +    onended()-&gt;handleEvent(context()-&gt;scriptExecutionContext(), event.get());

You might as well cache the listener in a local instead of calling onended() twice because getAttributeEventListener() does a linear search of all listeners so it can be relative expensive.

&gt; LayoutTests/webaudio/audiobuffersource-ended.html:10
&gt; +        function runTest() {

A function&apos;s opening brace should be on a new line.

&gt; LayoutTests/webaudio/audiobuffersource-ended.html:22
&gt; +            source.onended = function() {

Ditto.

&gt; LayoutTests/webaudio/oscillator-ended.html:10
&gt; +        function runTest() {

Ditto.

&gt; LayoutTests/webaudio/oscillator-ended.html:22
&gt; +            osc.onended = function() {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895000</commentid>
    <comment_count>14</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-05-29 10:12:07 -0700</bug_when>
    <thetext>Committed r150905: &lt;http://trac.webkit.org/changeset/150905&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202932</attachid>
            <date>2013-05-26 16:02:05 -0700</date>
            <delta_ts>2013-05-28 10:59:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116798-20130526160046.patch</filename>
            <type>text/plain</type>
            <size>17869</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwNjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWRkYmVkMjZiZTJjZTRh
M2I2NjVlMzY1NmExMDA5MDRlMjQzMTdmNS4uODcwMjk2Mzg4MTdjZDQ2YTFlMDU3YTI3MmVhODNh
Zjg3MTc5NDE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEzLTA1LTI2ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgdGhlICdvbmVu
ZGVkJyBFdmVudExpc3RlbmVyIHByb3BlcnR5IGZvciBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgYW5k
IE9zY2lsbGF0b3JOb2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE2Nzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTWFrZSB0aGUgdHdvIG5vZGVzIEV2ZW50VGFyZ2V0cyAod2l0aCBhbGwgdGhlIHJl
bGV2ZW50IGJvaWxlcnBsYXRlKSwgYW5kIAorICAgICAgICBtYXJzaGFsbCBmcm9tIHRoZSBhdWRp
byB0aHJlYWQgdG8gdGhlIG1haW4gdGhyZWFkIGluIGZpbmlzaGVkKCkgdG8gY2FsbAorICAgICAg
ICB0aGUgZXZlbnQgbGlzdGVuZXIuCisKKyAgICAgICAgVGVzdHM6IHdlYmF1ZGlvL2F1ZGlvYnVm
ZmVyc291cmNlLWVuZGVkLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmF1ZGlvL29zY2lsbGF0b3It
ZW5kZWQuaHRtbAorCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJj
ZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpmaW5p
c2gpOiBDYWxsIG5vdGlmeUVuZGVkRGlzcGF0Y2ggb24gdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpub3RpZnlFbmRlZERpc3BhdGNoKTog
Q2FsbCBub3RpZnlFbmRlZCgpLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VO
b2RlOjpub3RpZnlFbmRlZCk6IENhbGwgdGhlIG9uZW5kZWQgZXZlbnQgbGlzdGVuZXIuCisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OmludGVyZmFjZU5hbWUpOiBBZGRl
ZCBib2lsZXJwbGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZTo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6IERpdHRvLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVk
aW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmg6CisgICAgICAgIChBdWRpb0J1ZmZlclNvdXJjZU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpldmVudFRhcmdl
dERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZTo6
ZW5zdXJlRXZlbnRUYXJnZXREYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1
ZmZlclNvdXJjZU5vZGU6OnJlZkV2ZW50VGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OmRlcmVmRXZlbnRUYXJnZXQpOiBEaXR0by4KKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGw6IE1ha2UgQXVk
aW9CdWZmZXJTb3VyY2VOb2RlIGFuIEV2ZW50VGFyZ2V0LgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vT3NjaWxsYXRvck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T3NjaWxsYXRvck5v
ZGU6OmZpbmlzaCk6IEFkZGVkOyBjYWxsIG5vdGlmeUVuZGVkRGlzcHRhY2ggb24gdGhlIG1haW4g
dGhyZWFkLgorICAgICAgICAoV2ViQ29yZTo6T3NjaWxsYXRvck5vZGU6Om5vdGlmeUVuZGVkRGlz
cGF0Y2gpOiBDYWxsIG5vdGlmeUVuZGVkKCkuCisgICAgICAgIChXZWJDb3JlOjpPc2NpbGxhdG9y
Tm9kZTo6bm90aWZ5RW5kZWQpOiBDYWxsIHRoZSBvbmVuZGVkIGV2ZW50IGxpc3RlbmVyLgorICAg
ICAgICAoV2ViQ29yZTo6T3NjaWxsYXRvck5vZGU6OmludGVyZmFjZU5hbWUpOiBBZGRlZCBib2ls
ZXJwbGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok9zY2lsbGF0b3JOb2RlOjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KTogRGl0dG8uCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9y
Tm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6T3NjaWxsYXRvck5vZGU6OmV2ZW50VGFyZ2V0RGF0
YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6T3NjaWxsYXRvck5vZGU6OmVuc3VyZUV2ZW50
VGFyZ2V0RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6T3NjaWxsYXRvck5vZGU6OnJl
ZkV2ZW50VGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpPc2NpbGxhdG9yTm9kZTo6
ZGVyZWZFdmVudFRhcmdldCk6IERpdHRvLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vT3Nj
aWxsYXRvck5vZGUuaWRsOiBNYWtlIE9zY2lsbGF0b3JOb2RlIGFuIEV2ZW50VGFyZ2V0LgorICAg
ICAgICAqIGRvbS9FdmVudFRhcmdldC5oOiBBZGQgdGhlIHR3byBuZXcgRXZlbnRUYXJnZXQgY2xh
c3Nlcy4KKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluOiBEaXR0by4KKwogMjAx
My0wNS0yNCAgTm9hbSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV2Vi
UHJvY2VzcyBpcyBjcmFzaGluZyBvbiBodHRwOi8vYWNoaWN1LmdpdGh1Yi5pby9jc3MtcHJlc2Vu
dGF0aW9uIHdoZW4gZGlyZWN0IHBhdHRlcm4gY29tcG9zaXRpbmcgaXMgZW5hYmxlZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5v
ZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJj
ZU5vZGUuY3BwCmluZGV4IDMzNTk3OTE1ZGVkNzc2ZjIzMTQ1MTNmYjhlNjljZDRmODY2MzhmZTEu
LjEwNDYzZDM3YmY1YjI5Nzc2ODI4OTgwZWRhMjEzZWJiOGI3ODc3ZjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9k
ZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKICNpbmNs
dWRlICJBdWRpb05vZGVPdXRwdXQuaCIKICNpbmNsdWRlICJBdWRpb1V0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAi
U2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgpA
QCAtNTA1LDYgKzUwNiwzMiBAQCB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6ZmluaXNoKCkK
ICAgICBjbGVhclBhbm5lck5vZGUoKTsKICAgICBBU1NFUlQoIW1fcGFubmVyTm9kZSk7CiAgICAg
QXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlOjpmaW5pc2goKTsKKyAgICBjYWxsT25NYWluVGhyZWFk
KCZBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGlmeUVuZGVkRGlzcGF0Y2gsIHRoaXMpOworfQor
Cit2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bm90aWZ5RW5kZWREaXNwYXRjaCh2b2lkKiB1
c2VyRGF0YSkKK3sKKyAgICBzdGF0aWNfY2FzdDxBdWRpb0J1ZmZlclNvdXJjZU5vZGUqPih1c2Vy
RGF0YSktPm5vdGlmeUVuZGVkKCk7Cit9CisKK3ZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpu
b3RpZnlFbmRlZCgpCit7CisgICAgaWYgKCFvbmVuZGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbmRl
ZEV2ZW50LCBGQUxTRSwgRkFMU0UpOworICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CisgICAg
b25lbmRlZCgpLT5oYW5kbGVFdmVudChjb250ZXh0KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSwgZXZlbnQuZ2V0KCkpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIEF1ZGlvQnVmZmVyU291
cmNlTm9kZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JBdWRpb0J1ZmZlclNvdXJjZU5vZGU7Cit9CisKK1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRleHQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaAppbmRleCAzY2FiYTc0
YzM4ZTJiZTIzODQ0YzRjMTc3MjUzNzBiMDNjNTNlYjlkLi45Yzk0ZjcxMDE3OTkxM2MxMDk3ZTRk
NjU5ZDQyM2JjNjU2M2UxYTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xh
c3MgQXVkaW9Db250ZXh0OwogLy8gQXVkaW9CdWZmZXJTb3VyY2VOb2RlIGlzIGFuIEF1ZGlvTm9k
ZSByZXByZXNlbnRpbmcgYW4gYXVkaW8gc291cmNlIGZyb20gYW4gaW4tbWVtb3J5IGF1ZGlvIGFz
c2V0IHJlcHJlc2VudGVkIGJ5IGFuIEF1ZGlvQnVmZmVyLgogLy8gSXQgZ2VuZXJhbGx5IHdpbGwg
YmUgdXNlZCBmb3Igc2hvcnQgc291bmRzIHdoaWNoIHJlcXVpcmUgYSBoaWdoIGRlZ3JlZSBvZiBz
Y2hlZHVsaW5nIGZsZXhpYmlsaXR5IChjYW4gcGxheWJhY2sgaW4gcmh5dGhtaWNhbGx5IHBlcmZl
Y3Qgd2F5cykuCiAKLWNsYXNzIEF1ZGlvQnVmZmVyU291cmNlTm9kZSA6IHB1YmxpYyBBdWRpb1Nj
aGVkdWxlZFNvdXJjZU5vZGUgeworY2xhc3MgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIDogcHVibGlj
IEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZSwgcHVibGljIEV2ZW50VGFyZ2V0IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IGNyZWF0ZShBdWRp
b0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIApAQCAtOTgsNiArOTgsMTggQEAgcHVibGlj
OgogICAgIC8vIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZQogICAgIHZpcnR1YWwgdm9pZCBmaW5p
c2goKSBPVkVSUklERTsKIAorICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRU
YXJnZXREYXRhOyB9CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFy
Z2V0RGF0YSgpICB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KKworICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZW5kZWQpOworCisgICAgLy8gUmVjb25jaWxlIHJlZi9k
ZXJlZiB3aGljaCBhcmUgZGVmaW5lZCBib3RoIGluIEF1ZGlvTm9kZSBhbmQgRXZlbnRUYXJnZXQu
CisgICAgdXNpbmcgQXVkaW9Ob2RlOjpyZWY7CisgICAgdXNpbmcgQXVkaW9Ob2RlOjpkZXJlZjsK
KwogcHJpdmF0ZToKICAgICBBdWRpb0J1ZmZlclNvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiwgZmxv
YXQgc2FtcGxlUmF0ZSk7CiAKQEAgLTEwNyw2ICsxMTksMTMgQEAgcHJpdmF0ZToKICAgICAvLyBS
ZW5kZXIgc2lsZW5jZSBzdGFydGluZyBmcm9tICJpbmRleCIgZnJhbWUgaW4gQXVkaW9CdXMuCiAg
ICAgaW5saW5lIGJvb2wgcmVuZGVyU2lsZW5jZUFuZEZpbmlzaElmTm90TG9vcGluZyhBdWRpb0J1
cyosIHVuc2lnbmVkIGluZGV4LCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKIAorICAgIHN0YXRp
YyB2b2lkIG5vdGlmeUVuZGVkRGlzcGF0Y2godm9pZCopOworICAgIHZvaWQgbm90aWZ5RW5kZWQo
KTsKKworICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorICAgIEV2ZW50VGFy
Z2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKwogICAgIC8vIG1fYnVmZmVyIGhvbGRzIHRoZSBz
YW1wbGUgZGF0YSB3aGljaCB0aGlzIG5vZGUgb3V0cHV0cy4KICAgICBSZWZQdHI8QXVkaW9CdWZm
ZXI+IG1fYnVmZmVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwKaW5kZXggZDczZmFiMDk4MmZkZDI5M2E0
ZTk3NDhjNDFjOGEzMDUyZTc3MGI0Yi4uOTM4MzkzYmE3NmY0Zjg1YjY1M2M5NTg2ODQwZWQ1MzVj
ZTczM2U1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0J1ZmZlclNvdXJjZU5vZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbApAQCAtMjUsNyArMjUsOSBAQAogLy8gQSBjYWNo
ZWQgKG5vbi1zdHJlYW1lZCksIG1lbW9yeS1yZXNpZGVudCBhdWRpbyBzb3VyY2UKIFsKICAgICBD
b25kaXRpb25hbD1XRUJfQVVESU8sCi0gICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKKyAgICBKU0dl
bmVyYXRlVG9KU09iamVjdCwKKyAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCisgICAgRXZl
bnRUYXJnZXQKIF0gaW50ZXJmYWNlIEF1ZGlvQnVmZmVyU291cmNlTm9kZSA6IEF1ZGlvU291cmNl
Tm9kZSB7CiAgICAgW0N1c3RvbVNldHRlcl0gYXR0cmlidXRlIEF1ZGlvQnVmZmVyIGJ1ZmZlcgog
ICAgICAgICBzZXR0ZXIgcmFpc2VzIChET01FeGNlcHRpb24pOwpAQCAtNTAsNiArNTIsOCBAQAog
ICAgIFtJbXBsZW1lbnRlZEFzPXN0YXJ0R3JhaW5dIHZvaWQgc3RhcnQoZG91YmxlIHdoZW4sIGRv
dWJsZSBncmFpbk9mZnNldCwgZG91YmxlIGdyYWluRHVyYXRpb24pOwogICAgIHZvaWQgc3RvcChk
b3VibGUgd2hlbik7CiAKKyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVuZGVkOworCiAg
ICAgW0NvbmRpdGlvbmFsPUxFR0FDWV9XRUJfQVVESU9dIGF0dHJpYnV0ZSBib29sZWFuIGxvb3Bp
bmc7IC8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIHRoZSAubG9vcCBhdHRyaWJ1dGUgZm9yIGJhY2t3
YXJkcyBjb21wYXRpYmlsaXR5LgogCiAgICAgW0NvbmRpdGlvbmFsPUxFR0FDWV9XRUJfQVVESU9d
IHZvaWQgbm90ZU9uKGRvdWJsZSB3aGVuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5jcHAKaW5kZXggOTFjMjkxNzRlNzRmOWRhMWYxNGFm
MzNkZDVjMzZlMWI1YjFiYTk1OS4uNDNlMWE1ZmZiZGY2OGU3NGNlOGU2NjE1YTQ5Zjg4ODU2MGU2
ZDRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxh
dG9yTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxh
dG9yTm9kZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIK
ICNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKICNpbmNsdWRlICJBdWRpb1V0aWxpdGllcy5o
IgorI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1
ZGUgIlZlY3Rvck1hdGguaCIKICNpbmNsdWRlICJXYXZlVGFibGUuaCIKQEAgLTM1Miw2ICszNTMs
MzggQEAgYm9vbCBPc2NpbGxhdG9yTm9kZTo6cHJvcGFnYXRlc1NpbGVuY2UoKSBjb25zdAogICAg
IHJldHVybiAhaXNQbGF5aW5nT3JTY2hlZHVsZWQoKSB8fCBoYXNGaW5pc2hlZCgpIHx8ICFtX3dh
dmVUYWJsZS5nZXQoKTsKIH0KIAordm9pZCBPc2NpbGxhdG9yTm9kZTo6ZmluaXNoKCkKK3sKKyAg
ICBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGU6OmZpbmlzaCgpOworICAgIGNhbGxPbk1haW5UaHJl
YWQoJk9zY2lsbGF0b3JOb2RlOjpub3RpZnlFbmRlZERpc3BhdGNoLCB0aGlzKTsKK30KKwordm9p
ZCBPc2NpbGxhdG9yTm9kZTo6bm90aWZ5RW5kZWREaXNwYXRjaCh2b2lkKiB1c2VyRGF0YSkKK3sK
KyAgICBzdGF0aWNfY2FzdDxPc2NpbGxhdG9yTm9kZSo+KHVzZXJEYXRhKS0+bm90aWZ5RW5kZWQo
KTsKK30KKwordm9pZCBPc2NpbGxhdG9yTm9kZTo6bm90aWZ5RW5kZWQoKQoreworICAgIGlmICgh
b25lbmRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0g
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZW5kZWRFdmVudCwgRkFMU0UsIEZBTFNFKTsKKyAg
ICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworICAgIG9uZW5kZWQoKS0+aGFuZGxlRXZlbnQoY29u
dGV4dCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGV2ZW50LmdldCgpKTsKK30KKworY29u
c3QgQXRvbWljU3RyaW5nJiBPc2NpbGxhdG9yTm9kZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JPc2NpbGxhdG9yTm9kZTsKK30K
KworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogT3NjaWxsYXRvck5vZGU6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBjb250ZXh0KCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBF
TkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9Pc2NpbGxhdG9yTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9P
c2NpbGxhdG9yTm9kZS5oCmluZGV4IGU5ZTlhNzlhZTU5ZWVjMTVhOWM4N2U1ZmQ3NmU1OTA3Nzdj
YmQzZGMuLmE1NTcxMTUxN2ExN2QyMTgxZTQ3ZjhlYTQ1MTNhZTBlOTNlY2QwYzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmgKQEAgLTQw
LDcgKzQwLDcgQEAgY2xhc3MgV2F2ZVRhYmxlOwogCiAvLyBPc2NpbGxhdG9yTm9kZSBpcyBhbiBh
dWRpbyBnZW5lcmF0b3Igb2YgcGVyaW9kaWMgd2F2ZWZvcm1zLgogCi1jbGFzcyBPc2NpbGxhdG9y
Tm9kZSA6IHB1YmxpYyBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUgeworY2xhc3MgT3NjaWxsYXRv
ck5vZGUgOiBwdWJsaWMgQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlLCBwdWJsaWMgRXZlbnRUYXJn
ZXQgewogcHVibGljOgogICAgIC8vIFRoZSB3YXZlZm9ybSB0eXBlLgogICAgIC8vIFRoZXNlIG11
c3QgYmUgZGVmaW5lZCBhcyBpbiB0aGUgLmlkbCBmaWxlLgpAQCAtNzAsNiArNzAsMjAgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRXYXZlVGFibGUoV2F2ZVRhYmxlKik7CiAKKyAgICB2aXJ0dWFs
IHZvaWQgZmluaXNoKCkgT1ZFUlJJREU7CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVh
bCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7
CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJu
ICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1
cmVFdmVudFRhcmdldERhdGEoKSAgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CisKKyAg
ICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVuZGVkKTsKKworICAgIC8vIFJlY29u
Y2lsZSByZWYvZGVyZWYgd2hpY2ggYXJlIGRlZmluZWQgYm90aCBpbiBBdWRpb05vZGUgYW5kIEV2
ZW50VGFyZ2V0LgorICAgIHVzaW5nIEF1ZGlvTm9kZTo6cmVmOworICAgIHVzaW5nIEF1ZGlvTm9k
ZTo6ZGVyZWY7CisKIHByaXZhdGU6CiAgICAgT3NjaWxsYXRvck5vZGUoQXVkaW9Db250ZXh0Kiwg
ZmxvYXQgc2FtcGxlUmF0ZSk7CiAKQEAgLTc4LDYgKzkyLDEzIEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIGJvb2wgcHJvcGFnYXRlc1NpbGVuY2UoKSBjb25zdCBPVkVSUklERTsKIAorICAgIHN0
YXRpYyB2b2lkIG5vdGlmeUVuZGVkRGlzcGF0Y2godm9pZCopOworICAgIHZvaWQgbm90aWZ5RW5k
ZWQoKTsKKworICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorICAgIEV2ZW50
VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKwogICAgIC8vIE9uZSBvZiB0aGUgd2F2ZWZv
cm0gdHlwZXMgZGVmaW5lZCBpbiB0aGUgZW51bS4KICAgICB1bnNpZ25lZCBzaG9ydCBtX3R5cGU7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2ls
bGF0b3JOb2RlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRv
ck5vZGUuaWRsCmluZGV4IGYzZjNlYjdhMGY0NmY0NzM4M2YyOTg3NzRmZWM5M2NkMzk3NWRiYTAu
LjVkMWNlMmJkMGUzYjJlYTEwNzFmMGU1NjQwY2Q2NTQ5MzY2OTQzN2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaWRsCkBAIC0yNSw3
ICsyNSw5IEBACiAvLyBPc2NpbGxhdG9yTm9kZSBpcyBhbiBhdWRpbyBnZW5lcmF0b3Igb2YgcGVy
aW9kaWMgd2F2ZWZvcm1zLgogWwogICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICBKU0dl
bmVyYXRlVG9KU09iamVjdAorICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0LAorICAgIEpTR2VuZXJh
dGVUb05hdGl2ZU9iamVjdCwKKyAgICBFdmVudFRhcmdldAogXSBpbnRlcmZhY2UgT3NjaWxsYXRv
ck5vZGUgOiBBdWRpb1NvdXJjZU5vZGUgewogCiAgICAgLy8gVHlwZSBjb25zdGFudHMuCkBAIC01
MSw2ICs1Myw4IEBACiAgICAgdm9pZCBzdGFydChkb3VibGUgd2hlbik7CiAgICAgdm9pZCBzdG9w
KGRvdWJsZSB3aGVuKTsKIAorICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZW5kZWQ7CisK
ICAgICBbQ29uZGl0aW9uYWw9TEVHQUNZX1dFQl9BVURJT10gdm9pZCBub3RlT24oZG91YmxlIHdo
ZW4pOwogICAgIFtDb25kaXRpb25hbD1MRUdBQ1lfV0VCX0FVRElPXSB2b2lkIG5vdGVPZmYoZG91
YmxlIHdoZW4pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCmluZGV4IDg2OTU2OGEwZGI4NDVm
MzgwN2QzMzMyMTJjY2I1YzY5NWJhNTlhNmEuLmUwZjZmOGNhODllM2UzYjliYmJjOTk1MmUzZjFi
NzgyMTNhYTExNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCkBAIC00MCw2ICs0MCw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIEF1ZGlvQnVmZmVyU291cmNlTm9k
ZTsKICAgICBjbGFzcyBBdWRpb0NvbnRleHQ7CiAgICAgY2xhc3MgQXVkaW9UcmFja0xpc3Q7CiAg
ICAgY2xhc3MgRGVkaWNhdGVkV29ya2VyQ29udGV4dDsKQEAgLTYxLDYgKzYyLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE1lc3NhZ2VQb3J0OwogICAgIGNsYXNzIE5vZGU7CiAg
ICAgY2xhc3MgTm90aWZpY2F0aW9uOworICAgIGNsYXNzIE9zY2lsbGF0b3JOb2RlOwogICAgIGNs
YXNzIFNWR0VsZW1lbnRJbnN0YW5jZTsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogICAgIGNsYXNzIFNoYXJlZFdvcmtlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudFRhcmdldEZhY3RvcnkuaW4gYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXRG
YWN0b3J5LmluCmluZGV4IDhlYTViN2IwM2FiYWNhMDJmMjVmNDhhMmVkNTU5OTI2M2VhNDcwYjIu
LmVhMmI3YzcwYjhiNzFiODk2NjhjMDU1NDZhY2EzZTlmMDQ0ZGQwMmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldEZhY3RvcnkuaW4KKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbgpAQCAtMSw1ICsxLDYgQEAKIG5hbWVzcGFjZT0i
RXZlbnRUYXJnZXQiCiAKK0F1ZGlvQnVmZmVyU291cmNlTm9kZSBjb25kaXRpb25hbD1XRUJfQVVE
SU8KIEF1ZGlvQ29udGV4dCBjb25kaXRpb25hbD1XRUJfQVVESU8KIEF1ZGlvVHJhY2tMaXN0IGNv
bmRpdGlvbmFsPVZJREVPX1RSQUNLCiBCYXR0ZXJ5TWFuYWdlciBjb25kaXRpb25hbD1CQVRURVJZ
X1NUQVRVUwpAQCAtMjUsNiArMjYsNyBAQCBNZXNzYWdlUG9ydAogTmV0d29ya0luZm9Db25uZWN0
aW9uIGNvbmRpdGlvbmFsPU5FVFdPUktfSU5GTwogTm9kZQogTm90aWZpY2F0aW9uIGNvbmRpdGlv
bmFsPU5PVElGSUNBVElPTlN8TEVHQUNZX05PVElGSUNBVElPTlMKK09zY2lsbGF0b3JOb2RlIGNv
bmRpdGlvbmFsPVdFQl9BVURJTwogUGVyZm9ybWFuY2UgY29uZGl0aW9uYWw9V0VCX1RJTUlORwog
UlRDRGF0YUNoYW5uZWwgY29uZGl0aW9uYWw9TUVESUFfU1RSRUFNCiBSVENEVE1GU2VuZGVyIGNv
bmRpdGlvbmFsPU1FRElBX1NUUkVBTQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGY4OWM2NTUyMTBjMWMzNjE5MTExYWZiMTcw
MmUxNzI2M2VmYjQzZWEuLmExODgxMjcxZGQ5MWY0YTU3YTNiNzM1MmZiMDZjNzE4Y2FjMDZkOTkg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0wNS0yNiAgSmVyIE5vYmxlICA8amVyLm5vYmxl
QGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IHRoZSAnb25lbmRlZCcgRXZlbnRMaXN0ZW5l
ciBwcm9wZXJ0eSBmb3IgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIGFuZCBPc2NpbGxhdG9yTm9kZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjc5OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVk
aW8vYXVkaW9idWZmZXJzb3VyY2UtZW5kZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJhdWRpby9hdWRpb2J1ZmZlcnNvdXJjZS1lbmRlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJhdWRpby9vc2NpbGxhdG9yLWVuZGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogd2ViYXVkaW8vb3NjaWxsYXRvci1lbmRlZC5odG1sOiBBZGRlZC4KKwogMjAxMy0wNS0yNCAg
Tm9hbSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV2ViUHJvY2VzcyBp
cyBjcmFzaGluZyBvbiBodHRwOi8vYWNoaWN1LmdpdGh1Yi5pby9jc3MtcHJlc2VudGF0aW9uIHdo
ZW4gZGlyZWN0IHBhdHRlcm4gY29tcG9zaXRpbmcgaXMgZW5hYmxlZApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtZW5kZWQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtZW5kZWQtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVlYTQ2MTUyOTg5OWQ3Y2NkN2Q4MjNiOTg0ZmI2NDEzYTUxODdiNWQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb2J1ZmZlcnNvdXJjZS1l
bmRlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACitUZXN0cyB0aGF0IEF1ZGlvQnVmZmVy
U291cmNlTm9kZSBjYWxscyBpdHMgb25lbmRlZCBFdmVudExpc3RlbmVyLgorUEFTUyBzb3VyY2Uu
b25lbmRlZCBjYWxsZWQuCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlv
YnVmZmVyc291cmNlLWVuZGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb2J1ZmZl
cnNvdXJjZS1lbmRlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlYzBlNGM4ODhmOWVmYjNlYWQxOWFhOGIy
MmQ3MDAxMjgzMTg4NTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9h
dWRpb2J1ZmZlcnNvdXJjZS1lbmRlZC5odG1sCkBAIC0wLDAgKzEsMzYgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRl
c3RpbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW9idWZm
ZXJzb3VyY2UtdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgdmFy
IGNvbnRleHQ7CisgICAgICAgIHZhciBzb3VyY2U7CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVz
dCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAg
ICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgc2FtcGxl
UmF0ZSA9IDQ0MTAwLjA7CisgICAgICAgICAgICB2YXIgbnVtYmVyT2ZGcmFtZXMgPSAzMjsKKyAg
ICAgICAgICAgIGNvbnRleHQgPSBuZXcgd2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dCgxLCBudW1i
ZXJPZkZyYW1lcywgc2FtcGxlUmF0ZSk7CisgICAgICAgICAgICBzb3VyY2UgPSBjb250ZXh0LmNy
ZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgICAgICAgICAgc291cmNlLmJ1ZmZlciA9IGNyZWF0ZVRl
c3RCdWZmZXIoY29udGV4dCwgbnVtYmVyT2ZGcmFtZXMpOworICAgICAgICAgICAgc291cmNlLmNv
bm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7CisgICAgICAgICAgICBzb3VyY2Uub25lbmRlZCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoInNvdXJjZS5vbmVuZGVk
IGNhbGxlZC4iKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
ICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgc291cmNlLnN0YXJ0KDApOworICAgICAgICAgICAgY29udGV4dC5zdGFydFJl
bmRlcmluZygpOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisKKzwvaGVhZD4KKzxib2R5IG9u
bG9hZD0icnVuVGVzdCgpIj4KKyAgICA8ZGl2PlRlc3RzIHRoYXQgQXVkaW9CdWZmZXJTb3VyY2VO
b2RlIGNhbGxzIGl0cyBvbmVuZGVkIEV2ZW50TGlzdGVuZXIuPC9kaXY+CisgICAgPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRp
by9vc2NpbGxhdG9yLWVuZGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL29z
Y2lsbGF0b3ItZW5kZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmYTQ3Njk5ZjM2YjkwMjZl
YTI1ZGY4MThiMjgzNDJiYmUyYjZmZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9vc2NpbGxhdG9yLWVuZGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK1Rl
c3RzIHRoYXQgT3NjaWxsYXRvck5vZGUgY2FsbHMgaXRzIG9uZW5kZWQgRXZlbnRMaXN0ZW5lci4K
K1BBU1Mgb3NjLm9uZW5kZWQgY2FsbGVkLgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJh
dWRpby9vc2NpbGxhdG9yLWVuZGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9vc2NpbGxh
dG9yLWVuZGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRhNzY3ZWE1ZDA2YTJjNGE3ZGViY2ZiNzAyYzA2
N2UxOTQ3MDYxNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL29zY2ls
bGF0b3ItZW5kZWQuaHRtbApAQCAtMCwwICsxLDM4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxoZWFk
PgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvYnVmZmVyc291cmNlLXRl
c3RpbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIHZhciBjb250ZXh0Owor
ICAgICAgICB2YXIgc291cmNlOworCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAg
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgICAgICB0ZXN0UnVu
bmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERv
bmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHNhbXBsZVJhdGUgPSA0NDEw
MC4wOworICAgICAgICAgICAgdmFyIGxlbmd0aEluU2Vjb25kcyA9IDAuMTsKKyAgICAgICAgICAg
IGNvbnRleHQgPSBuZXcgd2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dCgxLCBzYW1wbGVSYXRlICog
bGVuZ3RoSW5TZWNvbmRzLCBzYW1wbGVSYXRlKTsKKyAgICAgICAgICAgIG9zYyA9IGNvbnRleHQu
Y3JlYXRlT3NjaWxsYXRvcigpOworICAgICAgICAgICAgb3NjLnR5cGUgPSAic2luZSI7IAorICAg
ICAgICAgICAgb3NjLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7CisgICAgICAgICAgICBv
c2Mub25lbmRlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoIm9z
Yy5vbmVuZGVkIGNhbGxlZC4iKTsKKyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICAgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBv
c2Muc3RhcnQoMCk7CisgICAgICAgICAgICBvc2Muc3RvcCgwLjEpOworICAgICAgICAgICAgY29u
dGV4dC5zdGFydFJlbmRlcmluZygpOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPGRpdj5UZXN0cyB0aGF0IE9zY2lsbGF0
b3JOb2RlIGNhbGxzIGl0cyBvbmVuZGVkIEV2ZW50TGlzdGVuZXIuPC9kaXY+CisgICAgPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203070</attachid>
            <date>2013-05-28 10:59:07 -0700</date>
            <delta_ts>2013-05-28 11:19:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116798-20130528105747.patch</filename>
            <type>text/plain</type>
            <size>10626</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwODA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmI2ODA1MDYzOGZiZDVl
ZjI3YzQzMDM5NmE1YjEzYjg5NDE4MmM1Ny4uNzM1NTRiOGQzYTEyMmY1MTNkY2NmMDI1N2E2Y2U3
ODYyZTgzM2ZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI2IEBACiAyMDEzLTA1LTI4ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFN1cHBvcnQgdGhlICdvbmVu
ZGVkJyBFdmVudExpc3RlbmVyIHByb3BlcnR5IGZvciBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgYW5k
IE9zY2lsbGF0b3JOb2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE2Nzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGVzdHM6IHdlYmF1ZGlvL2F1ZGlvYnVmZmVyc291cmNlLWVuZGVkLmh0bWwKKyAg
ICAgICAgICAgICAgIHdlYmF1ZGlvL29zY2lsbGF0b3ItZW5kZWQuaHRtbAorCisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlOjpBdWRpb1NjaGVkdWxlZFNvdXJjZU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlOjpzZXRPbmVu
ZGVkKTogU2V0IG1faGFzRW5kZWRMaXN0ZW5lci4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2No
ZWR1bGVkU291cmNlTm9kZTo6ZmluaXNoKTogQ2FsbCBub3RpZnlFbmRlZERpc3BhdGNoIG9uIHRo
ZSBtYWluIHRocmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2NoZWR1bGVkU291cmNlTm9k
ZTo6bm90aWZ5RW5kZWREaXNwYXRjaCk6IENhbGwgbm90aWZ5RW5kZWQoKS4KKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZTo6bm90aWZ5RW5kZWQpOiBDYWxsIHRoZSBv
bmVuZGVkIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9T
Y2hlZHVsZWRTb3VyY2VOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NjaGVkdWxlZFNv
dXJjZU5vZGU6Om9uZW5kZWQpOiBBZGRlZDsgYm9pbGVycGxhdGUuCisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsOiBBZGRlZCB0aGUgb25lcnJvciBh
dHRyaWJ1dGUuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5pZGw6
IERpdHRvLgorCisyMDEzLTA1LTI4ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgor
CiAgICAgICAgIE1hZGUgQXVkaW9Ob2RlIGFuIEV2ZW50VGFyZ2V0CiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY4NzEKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRs
CmluZGV4IGQ3M2ZhYjA5ODJmZGQyOTNhNGU5NzQ4YzQxYzhhMzA1MmU3NzBiNGIuLjhmNWZmNGM5
YzliZTc0NjEyYjQzOTkyZjFkYmY3YTg0OGY2ZjBmNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwKQEAg
LTU1LDQgKzU1LDYgQEAKICAgICBbQ29uZGl0aW9uYWw9TEVHQUNZX1dFQl9BVURJT10gdm9pZCBu
b3RlT24oZG91YmxlIHdoZW4pOwogICAgIFtDb25kaXRpb25hbD1MRUdBQ1lfV0VCX0FVRElPXSB2
b2lkIG5vdGVHcmFpbk9uKGRvdWJsZSB3aGVuLCBkb3VibGUgZ3JhaW5PZmZzZXQsIGRvdWJsZSBn
cmFpbkR1cmF0aW9uKTsKICAgICBbQ29uZGl0aW9uYWw9TEVHQUNZX1dFQl9BVURJT10gdm9pZCBu
b3RlT2ZmKGRvdWJsZSB3aGVuKTsKKyAgICAKKyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBv
bmVuZGVkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlLmNwcAppbmRleCBmMTU3ZmI3ZTIwZTAyN2Mx
ZGI4YTEzYWQ1MjZjMTg0ODYxMmFmY2IzLi44OGVkY2ExMTk3ZDFhMmUzNDBkYTM1NDA0NjcyYmRj
ZTUxYjE4NGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAK
ICNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlICJBdWRpb1V0aWxpdGllcy5oIgor
I2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAKQEAgLTQ0LDYgKzQ1LDcgQEAgQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2Rl
OjpBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdAog
ICAgICwgbV9wbGF5YmFja1N0YXRlKFVOU0NIRURVTEVEX1NUQVRFKQogICAgICwgbV9zdGFydFRp
bWUoMCkKICAgICAsIG1fZW5kVGltZShVbmtub3duVGltZSkKKyAgICAsIG1faGFzRW5kZWRMaXN0
ZW5lcihmYWxzZSkKIHsKIH0KIApAQCAtMTY0LDYgKzE2NiwxMiBAQCB2b2lkIEF1ZGlvU2NoZWR1
bGVkU291cmNlTm9kZTo6bm90ZU9mZihkb3VibGUgd2hlbikKIH0KICNlbmRpZgogCit2b2lkIEF1
ZGlvU2NoZWR1bGVkU291cmNlTm9kZTo6c2V0T25lbmRlZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyKQoreworICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLmVuZGVkRXZlbnQsIGxpc3RlbmVyKTsKKyAgICBtX2hhc0VuZGVkTGlzdGVuZXIgPSBsaXN0
ZW5lcjsKK30KKwogdm9pZCBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGU6OmZpbmlzaCgpCiB7CiAg
ICAgaWYgKG1fcGxheWJhY2tTdGF0ZSAhPSBGSU5JU0hFRF9TVEFURSkgewpAQCAtMTcyLDYgKzE4
MCwyNCBAQCB2b2lkIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZTo6ZmluaXNoKCkKICAgICAgICAg
bV9wbGF5YmFja1N0YXRlID0gRklOSVNIRURfU1RBVEU7CiAgICAgICAgIGNvbnRleHQoKS0+ZGVj
cmVtZW50QWN0aXZlU291cmNlQ291bnQoKTsKICAgICB9CisKKyAgICBpZiAobV9oYXNFbmRlZExp
c3RlbmVyKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZCgmQXVkaW9TY2hlZHVsZWRTb3VyY2VO
b2RlOjpub3RpZnlFbmRlZERpc3BhdGNoLCB0aGlzKTsKK30KKwordm9pZCBBdWRpb1NjaGVkdWxl
ZFNvdXJjZU5vZGU6Om5vdGlmeUVuZGVkRGlzcGF0Y2godm9pZCogdXNlckRhdGEpCit7CisgICAg
c3RhdGljX2Nhc3Q8QXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlKj4odXNlckRhdGEpLT5ub3RpZnlF
bmRlZCgpOworfQorCit2b2lkIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZTo6bm90aWZ5RW5kZWQo
KQoreworICAgIGlmICghb25lbmRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8
RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZW5kZWRFdmVudCwgRkFM
U0UsIEZBTFNFKTsKKyAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworICAgIG9uZW5kZWQoKS0+
aGFuZGxlRXZlbnQoY29udGV4dCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGV2ZW50Lmdl
dCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlLmgKaW5k
ZXggMGE0NTAyZWM5ZDJiMDEwNTQ2NmZiYzNkYjdjMmYyMDU4M2NjZjJmZC4uZTgzYzM4NzlmYjM3
OWUwNjA4NzE1ODg4NWQxYTZmYzJlN2JlZjRhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5oCkBAIC02
OSw2ICs2OSw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzUGxheWluZ09yU2NoZWR1bGVkKCkgY29u
c3QgeyByZXR1cm4gbV9wbGF5YmFja1N0YXRlID09IFBMQVlJTkdfU1RBVEUgfHwgbV9wbGF5YmFj
a1N0YXRlID09IFNDSEVEVUxFRF9TVEFURTsgfQogICAgIGJvb2wgaGFzRmluaXNoZWQoKSBjb25z
dCB7IHJldHVybiBtX3BsYXliYWNrU3RhdGUgPT0gRklOSVNIRURfU1RBVEU7IH0KIAorICAgIEV2
ZW50TGlzdGVuZXIqIG9uZW5kZWQoKSB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5lbmRlZEV2ZW50KTsgfQorICAgIHZvaWQgc2V0T25lbmRlZChQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+KTsKKwogcHJvdGVjdGVkOgogICAgIC8vIEdldCBmcmFtZSBpbmZv
cm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgdGltZSBxdWFudHVtLgogICAgIC8vIFdlIGhhbmRsZSB0
aGUgdHJhbnNpdGlvbiBpbnRvIFBMQVlJTkdfU1RBVEUgYW5kIEZJTklTSEVEX1NUQVRFIGhlcmUs
CkBAIC04NSw2ICs4OCw5IEBAIHByb3RlY3RlZDoKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBoYXZl
IG5vIG1vcmUgc291bmQgdG8gcGxheSBvciB0aGUgbm90ZU9mZigpIHRpbWUgaGFzIGJlZW4gcmVh
Y2hlZC4KICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCk7CiAKKyAgICBzdGF0aWMgdm9pZCBub3Rp
ZnlFbmRlZERpc3BhdGNoKHZvaWQqKTsKKyAgICB2b2lkIG5vdGlmeUVuZGVkKCk7CisKICAgICBQ
bGF5YmFja1N0YXRlIG1fcGxheWJhY2tTdGF0ZTsKIAogICAgIC8vIG1fc3RhcnRUaW1lIGlzIHRo
ZSB0aW1lIHRvIHN0YXJ0IHBsYXlpbmcgYmFzZWQgb24gdGhlIGNvbnRleHQncyB0aW1lbGluZSAo
MCBvciBhIHRpbWUgbGVzcyB0aGFuIHRoZSBjb250ZXh0J3MgY3VycmVudCB0aW1lIG1lYW5zICJu
b3ciKS4KQEAgLTk1LDYgKzEwMSw4IEBAIHByb3RlY3RlZDoKICAgICAvLyBoYXMgYmVlbiByZWFj
aGVkLgogICAgIGRvdWJsZSBtX2VuZFRpbWU7IC8vIGluIHNlY29uZHMKIAorICAgIGJvb2wgbV9o
YXNFbmRlZExpc3RlbmVyOworCiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBVbmtub3duVGltZTsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxs
YXRvck5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9y
Tm9kZS5pZGwKaW5kZXggZjNmM2ViN2EwZjQ2ZjQ3MzgzZjI5ODc3NGZlYzkzY2QzOTc1ZGJhMC4u
MTEzOGJiZjMwZTZmZDcyZGFjOTMzNGU1YWRjZDllMTYwZDJlM2ZiOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5pZGwKQEAgLTU2LDQg
KzU2LDUgQEAKIAogICAgIHZvaWQgc2V0V2F2ZVRhYmxlKFdhdmVUYWJsZSB3YXZlVGFibGUpOwog
CisgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lbmRlZDsKIH07CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzZjMDg2
MjU3NGEzMzY5MGVjMmY0NTQxN2RjMWYyMGM0ZWFlNDc4ZC4uYzY2MjhjYjQ5NmNiMDFiZGY3Mjdl
MDc2NGJmMDAxNWVkNmIwZjIyYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA1LTI2ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgdGhlICdv
bmVuZGVkJyBFdmVudExpc3RlbmVyIHByb3BlcnR5IGZvciBBdWRpb0J1ZmZlclNvdXJjZU5vZGUg
YW5kIE9zY2lsbGF0b3JOb2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE2Nzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiB3ZWJhdWRpby9hdWRpb2J1ZmZlcnNvdXJjZS1lbmRlZC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2F1ZGlvYnVmZmVyc291cmNlLWVuZGVkLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL29zY2lsbGF0b3ItZW5kZWQtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9vc2NpbGxhdG9yLWVuZGVkLmh0bWw6IEFk
ZGVkLgorCiAyMDEzLTA1LTI4ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAg
ICAgICAgIE1hZGUgQXVkaW9Ob2RlIGFuIEV2ZW50VGFyZ2V0CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9hdWRpb2J1ZmZlcnNvdXJjZS1lbmRlZC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9hdWRpb2J1ZmZlcnNvdXJjZS1lbmRlZC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWVhNDYxNTI5ODk5ZDdjY2Q3ZDgyM2I5ODRmYjY0MTNhNTE4N2I1ZAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVmZmVyc291cmNlLWVuZGVk
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK1Rlc3RzIHRoYXQgQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlIGNhbGxzIGl0cyBvbmVuZGVkIEV2ZW50TGlzdGVuZXIuCitQQVNTIHNvdXJjZS5vbmVu
ZGVkIGNhbGxlZC4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZm
ZXJzb3VyY2UtZW5kZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVmZmVyc291
cmNlLWVuZGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmVjMGU0Yzg4OGY5ZWZiM2VhZDE5YWE4YjIyZDcw
MDEyODMxODg1OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlv
YnVmZmVyc291cmNlLWVuZGVkLmh0bWwKQEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGlu
Zy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpb2J1ZmZlcnNv
dXJjZS10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgICB2YXIgY29u
dGV4dDsKKyAgICAgICAgdmFyIHNvdXJjZTsKKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0KCkg
eworICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICAgICAg
dGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBzYW1wbGVSYXRl
ID0gNDQxMDAuMDsKKyAgICAgICAgICAgIHZhciBudW1iZXJPZkZyYW1lcyA9IDMyOworICAgICAg
ICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0KDEsIG51bWJlck9m
RnJhbWVzLCBzYW1wbGVSYXRlKTsKKyAgICAgICAgICAgIHNvdXJjZSA9IGNvbnRleHQuY3JlYXRl
QnVmZmVyU291cmNlKCk7CisgICAgICAgICAgICBzb3VyY2UuYnVmZmVyID0gY3JlYXRlVGVzdEJ1
ZmZlcihjb250ZXh0LCBudW1iZXJPZkZyYW1lcyk7CisgICAgICAgICAgICBzb3VyY2UuY29ubmVj
dChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIHNvdXJjZS5vbmVuZGVkID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgic291cmNlLm9uZW5kZWQgY2Fs
bGVkLiIpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBzb3VyY2Uuc3RhcnQoMCk7CisgICAgICAgICAgICBjb250ZXh0LnN0YXJ0UmVuZGVy
aW5nKCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHkgb25sb2Fk
PSJydW5UZXN0KCkiPgorICAgIDxkaXY+VGVzdHMgdGhhdCBBdWRpb0J1ZmZlclNvdXJjZU5vZGUg
Y2FsbHMgaXRzIG9uZW5kZWQgRXZlbnRMaXN0ZW5lci48L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL29z
Y2lsbGF0b3ItZW5kZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vb3NjaWxs
YXRvci1lbmRlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWZhNDc2OTlmMzZiOTAyNmVhMjVk
ZjgxOGIyODM0MmJiZTJiNmZlOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL29zY2lsbGF0b3ItZW5kZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorVGVzdHMg
dGhhdCBPc2NpbGxhdG9yTm9kZSBjYWxscyBpdHMgb25lbmRlZCBFdmVudExpc3RlbmVyLgorUEFT
UyBvc2Mub25lbmRlZCBjYWxsZWQuCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlv
L29zY2lsbGF0b3ItZW5kZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL29zY2lsbGF0b3It
ZW5kZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZGE3NjdlYTVkMDZhMmM0YTdkZWJjZmI3MDJjMDY3ZTE5
NDcwNjE0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vb3NjaWxsYXRv
ci1lbmRlZC5odG1sCkBAIC0wLDAgKzEsMzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGhlYWQ+Cisg
ICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW9idWZmZXJzb3VyY2UtdGVzdGlu
Zy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgdmFyIGNvbnRleHQ7CisgICAg
ICAgIHZhciBzb3VyY2U7CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAg
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIu
ZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwLjA7
CisgICAgICAgICAgICB2YXIgbGVuZ3RoSW5TZWNvbmRzID0gMC4xOworICAgICAgICAgICAgY29u
dGV4dCA9IG5ldyB3ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0KDEsIHNhbXBsZVJhdGUgKiBsZW5n
dGhJblNlY29uZHMsIHNhbXBsZVJhdGUpOworICAgICAgICAgICAgb3NjID0gY29udGV4dC5jcmVh
dGVPc2NpbGxhdG9yKCk7CisgICAgICAgICAgICBvc2MudHlwZSA9ICJzaW5lIjsgCisgICAgICAg
ICAgICBvc2MuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIG9zYy5v
bmVuZGVkID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgib3NjLm9u
ZW5kZWQgY2FsbGVkLiIpOworICAgICAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAg
ICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9zYy5z
dGFydCgwKTsKKyAgICAgICAgICAgIG9zYy5zdG9wKDAuMSk7CisgICAgICAgICAgICBjb250ZXh0
LnN0YXJ0UmVuZGVyaW5nKCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8ZGl2PlRlc3RzIHRoYXQgT3NjaWxsYXRvck5v
ZGUgY2FsbHMgaXRzIG9uZW5kZWQgRXZlbnRMaXN0ZW5lci48L2Rpdj4KKyAgICA8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203071</attachid>
            <date>2013-05-28 11:19:18 -0700</date>
            <delta_ts>2013-05-29 09:14:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116798-20130528111757.patch</filename>
            <type>text/plain</type>
            <size>10625</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwODA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmI2ODA1MDYzOGZiZDVl
ZjI3YzQzMDM5NmE1YjEzYjg5NDE4MmM1Ny4uNzM1NTRiOGQzYTEyMmY1MTNkY2NmMDI1N2E2Y2U3
ODYyZTgzM2ZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI2IEBACiAyMDEzLTA1LTI4ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFN1cHBvcnQgdGhlICdvbmVu
ZGVkJyBFdmVudExpc3RlbmVyIHByb3BlcnR5IGZvciBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgYW5k
IE9zY2lsbGF0b3JOb2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE2Nzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGVzdHM6IHdlYmF1ZGlvL2F1ZGlvYnVmZmVyc291cmNlLWVuZGVkLmh0bWwKKyAg
ICAgICAgICAgICAgIHdlYmF1ZGlvL29zY2lsbGF0b3ItZW5kZWQuaHRtbAorCisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlOjpBdWRpb1NjaGVkdWxlZFNvdXJjZU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlOjpzZXRPbmVu
ZGVkKTogU2V0IG1faGFzRW5kZWRMaXN0ZW5lci4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2No
ZWR1bGVkU291cmNlTm9kZTo6ZmluaXNoKTogQ2FsbCBub3RpZnlFbmRlZERpc3BhdGNoIG9uIHRo
ZSBtYWluIHRocmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2NoZWR1bGVkU291cmNlTm9k
ZTo6bm90aWZ5RW5kZWREaXNwYXRjaCk6IENhbGwgbm90aWZ5RW5kZWQoKS4KKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZTo6bm90aWZ5RW5kZWQpOiBDYWxsIHRoZSBv
bmVuZGVkIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9T
Y2hlZHVsZWRTb3VyY2VOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NjaGVkdWxlZFNv
dXJjZU5vZGU6Om9uZW5kZWQpOiBBZGRlZDsgYm9pbGVycGxhdGUuCisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsOiBBZGRlZCB0aGUgb25lcnJvciBh
dHRyaWJ1dGUuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5pZGw6
IERpdHRvLgorCisyMDEzLTA1LTI4ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgor
CiAgICAgICAgIE1hZGUgQXVkaW9Ob2RlIGFuIEV2ZW50VGFyZ2V0CiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY4NzEKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRs
CmluZGV4IGQ3M2ZhYjA5ODJmZGQyOTNhNGU5NzQ4YzQxYzhhMzA1MmU3NzBiNGIuLjhmNWZmNGM5
YzliZTc0NjEyYjQzOTkyZjFkYmY3YTg0OGY2ZjBmNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwKQEAg
LTU1LDQgKzU1LDYgQEAKICAgICBbQ29uZGl0aW9uYWw9TEVHQUNZX1dFQl9BVURJT10gdm9pZCBu
b3RlT24oZG91YmxlIHdoZW4pOwogICAgIFtDb25kaXRpb25hbD1MRUdBQ1lfV0VCX0FVRElPXSB2
b2lkIG5vdGVHcmFpbk9uKGRvdWJsZSB3aGVuLCBkb3VibGUgZ3JhaW5PZmZzZXQsIGRvdWJsZSBn
cmFpbkR1cmF0aW9uKTsKICAgICBbQ29uZGl0aW9uYWw9TEVHQUNZX1dFQl9BVURJT10gdm9pZCBu
b3RlT2ZmKGRvdWJsZSB3aGVuKTsKKyAgICAKKyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBv
bmVuZGVkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlLmNwcAppbmRleCBmMTU3ZmI3ZTIwZTAyN2Mx
ZGI4YTEzYWQ1MjZjMTg0ODYxMmFmY2IzLi5jZWRmZGIyOTJlMTQ5ODAzNmY3ZTk5NTZjMjM0NDg5
ZmIwZTk3Mjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAK
ICNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlICJBdWRpb1V0aWxpdGllcy5oIgor
I2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAKQEAgLTQ0LDYgKzQ1LDcgQEAgQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2Rl
OjpBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdAog
ICAgICwgbV9wbGF5YmFja1N0YXRlKFVOU0NIRURVTEVEX1NUQVRFKQogICAgICwgbV9zdGFydFRp
bWUoMCkKICAgICAsIG1fZW5kVGltZShVbmtub3duVGltZSkKKyAgICAsIG1faGFzRW5kZWRMaXN0
ZW5lcihmYWxzZSkKIHsKIH0KIApAQCAtMTY0LDYgKzE2NiwxMiBAQCB2b2lkIEF1ZGlvU2NoZWR1
bGVkU291cmNlTm9kZTo6bm90ZU9mZihkb3VibGUgd2hlbikKIH0KICNlbmRpZgogCit2b2lkIEF1
ZGlvU2NoZWR1bGVkU291cmNlTm9kZTo6c2V0T25lbmRlZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyKQoreworICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLmVuZGVkRXZlbnQsIGxpc3RlbmVyKTsKKyAgICBtX2hhc0VuZGVkTGlzdGVuZXIgPSBsaXN0
ZW5lcjsKK30KKwogdm9pZCBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGU6OmZpbmlzaCgpCiB7CiAg
ICAgaWYgKG1fcGxheWJhY2tTdGF0ZSAhPSBGSU5JU0hFRF9TVEFURSkgewpAQCAtMTcyLDYgKzE4
MCwyNCBAQCB2b2lkIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZTo6ZmluaXNoKCkKICAgICAgICAg
bV9wbGF5YmFja1N0YXRlID0gRklOSVNIRURfU1RBVEU7CiAgICAgICAgIGNvbnRleHQoKS0+ZGVj
cmVtZW50QWN0aXZlU291cmNlQ291bnQoKTsKICAgICB9CisKKyAgICBpZiAobV9oYXNFbmRlZExp
c3RlbmVyKQorICAgICAgICBjYWxsT25NYWluVGhyZWFkKCZBdWRpb1NjaGVkdWxlZFNvdXJjZU5v
ZGU6Om5vdGlmeUVuZGVkRGlzcGF0Y2gsIHRoaXMpOworfQorCit2b2lkIEF1ZGlvU2NoZWR1bGVk
U291cmNlTm9kZTo6bm90aWZ5RW5kZWREaXNwYXRjaCh2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBz
dGF0aWNfY2FzdDxBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUqPih1c2VyRGF0YSktPm5vdGlmeUVu
ZGVkKCk7Cit9CisKK3ZvaWQgQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlOjpub3RpZnlFbmRlZCgp
Cit7CisgICAgaWYgKCFvbmVuZGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxF
dmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbmRlZEV2ZW50LCBGQUxT
RSwgRkFMU0UpOworICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CisgICAgb25lbmRlZCgpLT5o
YW5kbGVFdmVudChjb250ZXh0KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgZXZlbnQuZ2V0
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuaAppbmRl
eCAwYTQ1MDJlYzlkMmIwMTA1NDY2ZmJjM2RiN2MyZjIwNTgzY2NmMmZkLi5lODNjMzg3OWZiMzc5
ZTA2MDg3MTU4ODg1ZDFhNmZjMmU3YmVmNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlLmgKQEAgLTY5
LDYgKzY5LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNQbGF5aW5nT3JTY2hlZHVsZWQoKSBjb25z
dCB7IHJldHVybiBtX3BsYXliYWNrU3RhdGUgPT0gUExBWUlOR19TVEFURSB8fCBtX3BsYXliYWNr
U3RhdGUgPT0gU0NIRURVTEVEX1NUQVRFOyB9CiAgICAgYm9vbCBoYXNGaW5pc2hlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGxheWJhY2tTdGF0ZSA9PSBGSU5JU0hFRF9TVEFURTsgfQogCisgICAgRXZl
bnRMaXN0ZW5lciogb25lbmRlZCgpIHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmVuZGVkRXZlbnQpOyB9CisgICAgdm9pZCBzZXRPbmVuZGVkKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4pOworCiBwcm90ZWN0ZWQ6CiAgICAgLy8gR2V0IGZyYW1lIGluZm9y
bWF0aW9uIGZvciB0aGUgY3VycmVudCB0aW1lIHF1YW50dW0uCiAgICAgLy8gV2UgaGFuZGxlIHRo
ZSB0cmFuc2l0aW9uIGludG8gUExBWUlOR19TVEFURSBhbmQgRklOSVNIRURfU1RBVEUgaGVyZSwK
QEAgLTg1LDYgKzg4LDkgQEAgcHJvdGVjdGVkOgogICAgIC8vIENhbGxlZCB3aGVuIHdlIGhhdmUg
bm8gbW9yZSBzb3VuZCB0byBwbGF5IG9yIHRoZSBub3RlT2ZmKCkgdGltZSBoYXMgYmVlbiByZWFj
aGVkLgogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKTsKIAorICAgIHN0YXRpYyB2b2lkIG5vdGlm
eUVuZGVkRGlzcGF0Y2godm9pZCopOworICAgIHZvaWQgbm90aWZ5RW5kZWQoKTsKKwogICAgIFBs
YXliYWNrU3RhdGUgbV9wbGF5YmFja1N0YXRlOwogCiAgICAgLy8gbV9zdGFydFRpbWUgaXMgdGhl
IHRpbWUgdG8gc3RhcnQgcGxheWluZyBiYXNlZCBvbiB0aGUgY29udGV4dCdzIHRpbWVsaW5lICgw
IG9yIGEgdGltZSBsZXNzIHRoYW4gdGhlIGNvbnRleHQncyBjdXJyZW50IHRpbWUgbWVhbnMgIm5v
dyIpLgpAQCAtOTUsNiArMTAxLDggQEAgcHJvdGVjdGVkOgogICAgIC8vIGhhcyBiZWVuIHJlYWNo
ZWQuCiAgICAgZG91YmxlIG1fZW5kVGltZTsgLy8gaW4gc2Vjb25kcwogCisgICAgYm9vbCBtX2hh
c0VuZGVkTGlzdGVuZXI7CisKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIFVua25vd25UaW1lOwog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxh
dG9yTm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JO
b2RlLmlkbAppbmRleCBmM2YzZWI3YTBmNDZmNDczODNmMjk4Nzc0ZmVjOTNjZDM5NzVkYmEwLi4x
MTM4YmJmMzBlNmZkNzJkYWM5MzM0ZTVhZGNkOWUxNjBkMmUzZmI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmlkbApAQCAtNTYsNCAr
NTYsNSBAQAogCiAgICAgdm9pZCBzZXRXYXZlVGFibGUoV2F2ZVRhYmxlIHdhdmVUYWJsZSk7CiAK
KyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVuZGVkOwogfTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzNmMwODYy
NTc0YTMzNjkwZWMyZjQ1NDE3ZGMxZjIwYzRlYWU0NzhkLi5jNjYyOGNiNDk2Y2IwMWJkZjcyN2Uw
NzY0YmYwMDE1ZWQ2YjBmMjJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDUtMjYgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCB0aGUgJ29u
ZW5kZWQnIEV2ZW50TGlzdGVuZXIgcHJvcGVydHkgZm9yIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBh
bmQgT3NjaWxsYXRvck5vZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTY3OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHdlYmF1ZGlvL2F1ZGlvYnVmZmVyc291cmNlLWVuZGVkLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtZW5kZWQuaHRt
bDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vb3NjaWxsYXRvci1lbmRlZC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL29zY2lsbGF0b3ItZW5kZWQuaHRtbDogQWRk
ZWQuCisKIDIwMTMtMDUtMjggIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAg
ICAgICAgTWFkZSBBdWRpb05vZGUgYW4gRXZlbnRUYXJnZXQKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2F1ZGlvYnVmZmVyc291cmNlLWVuZGVkLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVmZmVyc291cmNlLWVuZGVkLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lZWE0NjE1Mjk4OTlkN2NjZDdkODIzYjk4NGZiNjQxM2E1MTg3YjVkCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtZW5kZWQt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorVGVzdHMgdGhhdCBBdWRpb0J1ZmZlclNvdXJj
ZU5vZGUgY2FsbHMgaXRzIG9uZW5kZWQgRXZlbnRMaXN0ZW5lci4KK1BBU1Mgc291cmNlLm9uZW5k
ZWQgY2FsbGVkLgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb2J1ZmZl
cnNvdXJjZS1lbmRlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3Vy
Y2UtZW5kZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZWMwZTRjODg4ZjllZmIzZWFkMTlhYThiMjJkNzAw
MTI4MzE4ODU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9i
dWZmZXJzb3VyY2UtZW5kZWQuaHRtbApAQCAtMCwwICsxLDM2IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5n
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvYnVmZmVyc291
cmNlLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIHZhciBjb250
ZXh0OworICAgICAgICB2YXIgc291cmNlOworCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7
CisgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgICAgICB0
ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHNhbXBsZVJhdGUg
PSA0NDEwMC4wOworICAgICAgICAgICAgdmFyIG51bWJlck9mRnJhbWVzID0gMzI7CisgICAgICAg
ICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQoMSwgbnVtYmVyT2ZG
cmFtZXMsIHNhbXBsZVJhdGUpOworICAgICAgICAgICAgc291cmNlID0gY29udGV4dC5jcmVhdGVC
dWZmZXJTb3VyY2UoKTsKKyAgICAgICAgICAgIHNvdXJjZS5idWZmZXIgPSBjcmVhdGVUZXN0QnVm
ZmVyKGNvbnRleHQsIG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAgICAgIHNvdXJjZS5jb25uZWN0
KGNvbnRleHQuZGVzdGluYXRpb24pOworICAgICAgICAgICAgc291cmNlLm9uZW5kZWQgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCJzb3VyY2Uub25lbmRlZCBjYWxs
ZWQuIik7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAg
ICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHNvdXJjZS5zdGFydCgwKTsKKyAgICAgICAgICAgIGNvbnRleHQuc3RhcnRSZW5kZXJp
bmcoKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorCis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9
InJ1blRlc3QoKSI+CisgICAgPGRpdj5UZXN0cyB0aGF0IEF1ZGlvQnVmZmVyU291cmNlTm9kZSBj
YWxscyBpdHMgb25lbmRlZCBFdmVudExpc3RlbmVyLjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vb3Nj
aWxsYXRvci1lbmRlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9vc2NpbGxh
dG9yLWVuZGVkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZmE0NzY5OWYzNmI5MDI2ZWEyNWRm
ODE4YjI4MzQyYmJlMmI2ZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vb3NjaWxsYXRvci1lbmRlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACitUZXN0cyB0
aGF0IE9zY2lsbGF0b3JOb2RlIGNhbGxzIGl0cyBvbmVuZGVkIEV2ZW50TGlzdGVuZXIuCitQQVNT
IG9zYy5vbmVuZGVkIGNhbGxlZC4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
b3NjaWxsYXRvci1lbmRlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vb3NjaWxsYXRvci1l
bmRlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkYTc2N2VhNWQwNmEyYzRhN2RlYmNmYjcwMmMwNjdlMTk0
NzA2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9vc2NpbGxhdG9y
LWVuZGVkLmh0bWwKQEAgLTAsMCArMSwzOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aGVhZD4KKyAg
ICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpb2J1ZmZlcnNvdXJjZS10ZXN0aW5n
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgICB2YXIgY29udGV4dDsKKyAgICAg
ICAgdmFyIHNvdXJjZTsKKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICAg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5k
dW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBzYW1wbGVSYXRlID0gNDQxMDAuMDsK
KyAgICAgICAgICAgIHZhciBsZW5ndGhJblNlY29uZHMgPSAwLjE7CisgICAgICAgICAgICBjb250
ZXh0ID0gbmV3IHdlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQoMSwgc2FtcGxlUmF0ZSAqIGxlbmd0
aEluU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisgICAgICAgICAgICBvc2MgPSBjb250ZXh0LmNyZWF0
ZU9zY2lsbGF0b3IoKTsKKyAgICAgICAgICAgIG9zYy50eXBlID0gInNpbmUiOyAKKyAgICAgICAg
ICAgIG9zYy5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworICAgICAgICAgICAgb3NjLm9u
ZW5kZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCJvc2Mub25l
bmRlZCBjYWxsZWQuIik7CisgICAgICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAg
ICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3NjLnN0
YXJ0KDApOworICAgICAgICAgICAgb3NjLnN0b3AoMC4xKTsKKyAgICAgICAgICAgIGNvbnRleHQu
c3RhcnRSZW5kZXJpbmcoKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDxkaXY+VGVzdHMgdGhhdCBPc2NpbGxhdG9yTm9k
ZSBjYWxscyBpdHMgb25lbmRlZCBFdmVudExpc3RlbmVyLjwvZGl2PgorICAgIDxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPC9ib2R5Pgo=
</data>
<flag name="review"
          id="224524"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>