<?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>84687</bug_id>
          
          <creation_ts>2012-04-24 02:20:54 -0700</creation_ts>
          <short_desc>Add multichannel support for input of JavaScriptAudioNode</short_desc>
          <delta_ts>2012-05-10 23:21:49 -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>Web Audio</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Xingnan Wang">xingnan.wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>crogers</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>james.wei</cc>
    
    <cc>s.choi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>608481</commentid>
    <comment_count>0</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-04-24 02:20:54 -0700</bug_when>
    <thetext>Implement the numberOfInputChannels of JavaScriptAudioNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608484</commentid>
    <comment_count>1</comment_count>
      <attachid>138525</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-04-24 02:27:46 -0700</bug_when>
    <thetext>Created attachment 138525
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609368</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-24 18:48:38 -0700</bug_when>
    <thetext>*** Bug 84706 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610849</commentid>
    <comment_count>3</comment_count>
      <attachid>138525</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-26 12:50:21 -0700</bug_when>
    <thetext>Comment on attachment 138525
Patch

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

Thanks Xingnan, this looks pretty good.  I like your approach of using the &quot;m_internalInputBus&quot; and think this should work much better than what we have now.
But we still need to handle the case where numberOfInputChannels==0 (if the JavaScriptAudioNode is only synthesizing audio and doesn&apos;t care about input).
And the test cases need to be split out into separate test files.

&gt; Source/WebCore/Modules/webaudio/JavaScriptAudioNode.cpp:61
&gt; +    if (!numberOfInputChannels || numberOfInputChannels &gt; AudioContext::maxNumberOfChannels())

In the Web Audio API spec, it is allowed for *either* numberOfInputChannels or numberOfOutputChannels to be zero.  It is only illegal if *both* are zero at the same time.

So, we need to allow numberOfInputChannels==0

&gt; Source/WebCore/Modules/webaudio/JavaScriptAudioNode.cpp:-108
&gt; -        m_inputBuffers.append(AudioBuffer::create(2, bufferSize(), sampleRate));

Probably need to check m_internalInputBus.numberOfChannels() &gt; 0 before appending to m_inputBuffers here, and instead append(0) (if there are no input channels)

&gt; Source/WebCore/Modules/webaudio/JavaScriptAudioNode.cpp:171
&gt; +

You need to check numberOfInputChannels &gt; 0 before calling copyFrom below

&gt; LayoutTests/webaudio/javascriptaudionode.html:54
&gt;  

I think we should keep the original javascriptaudionode.html test-file the same, and create one or two additional tests using your new testing code here.

You can create a new .js helper test file in the &quot;resources&quot; directory called &quot;javascriptaudionode-testing.js&quot; with the fillData() and checkData() methods above.

Then you can create two new test files &quot;javascriptaudionode-2channel-input.html&quot; and &quot;javascriptaudionode-6channel-input.html&quot;

It looks like you&apos;re trying to test both cases (2-channel and 6-channel) in the same test which is a bit confusing and I&apos;m not sure it can work properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611176</commentid>
    <comment_count>4</comment_count>
      <attachid>138525</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-04-26 19:11:09 -0700</bug_when>
    <thetext>Comment on attachment 138525
Patch

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

&gt; Source/WebCore/Modules/webaudio/JavaScriptAudioNode.cpp:65
&gt;          return 0;

Hi Chris, as you said, whether should we handle numberOfOutputChannels == 0?
Now numberOfOutputChannels==0 is not allowed here.

&gt; Source/WebCore/Modules/webaudio/JavaScriptAudioNode.cpp:109
&gt;          m_outputBuffers.append(AudioBuffer::create(this-&gt;output(0)-&gt;numberOfChannels(), bufferSize(), sampleRate));

Maybe need to check this-&gt;output(0)-&gt;numberOfChannels() &gt; 0 here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611183</commentid>
    <comment_count>5</comment_count>
      <attachid>138525</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-26 19:26:37 -0700</bug_when>
    <thetext>Comment on attachment 138525
Patch

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

&gt;&gt; Source/WebCore/Modules/webaudio/JavaScriptAudioNode.cpp:65
&gt;&gt;          return 0;
&gt; 
&gt; Hi Chris, as you said, whether should we handle numberOfOutputChannels == 0?
&gt; Now numberOfOutputChannels==0 is not allowed here.

I think for now we&apos;ll have to enforce that numberOfOutputChannels &gt; 0.  But we might want to consider Raymond&apos;s work with the AudioBasicInspectorNode (later on - not important right now) where it might be possible to create a JavaScriptAudioNode with zero channels of output which gets automatically pulled.

So for now, I think we still need this check.

&gt;&gt; Source/WebCore/Modules/webaudio/JavaScriptAudioNode.cpp:109
&gt;&gt;          m_outputBuffers.append(AudioBuffer::create(this-&gt;output(0)-&gt;numberOfChannels(), bufferSize(), sampleRate));
&gt; 
&gt; Maybe need to check this-&gt;output(0)-&gt;numberOfChannels() &gt; 0 here?

Yes, one way to handle this code would be:

RefPtr&lt;AudioBuffer&gt; inputBuffer = m_numberOfInputChannels ? AudioBuffer::create(m_numberOfInputChannels, bufferSize(), sampleRate) : 0;
RefPtr&lt;AudioBuffer&gt; outputBuffer = m_numberOfOutputChannels ? AudioBuffer::create(m_numberOfOutputChannels, bufferSize(), sampleRate) : 0;

m_inputBuffers.append(inputBuffer);
m_outputBuffers.append(outputBuffer);

*** please note I&apos;ve created new instance variables m_numberOfInputChannels and m_numberOfOutputChannels because it seems like the code will be cleaner this way...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611282</commentid>
    <comment_count>6</comment_count>
      <attachid>139139</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-04-27 00:04:21 -0700</bug_when>
    <thetext>Created attachment 139139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611284</commentid>
    <comment_count>7</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-04-27 00:05:02 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=139139) [details]
&gt; Patch

Updated the patch as the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611775</commentid>
    <comment_count>8</comment_count>
      <attachid>139139</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-27 12:25:27 -0700</bug_when>
    <thetext>Comment on attachment 139139
Patch

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

Xingnan, this looks great.  I have some small changes for the test files to avoid using 6-channels, and instead use 8-channels, since 6-channels will later on be interpreted as 5.1 (see AudioBus::copyFrom() comment with bug link).  Also, I think it&apos;s better to rename these test files as I suggest since the names are a bit confusing now.

&gt; LayoutTests/webaudio/javascriptaudionode-2channel-input-expected.txt:1
&gt; +Tests JavaScriptAudioNode 2 channels input.

Tests upmixing a 2-channel source connected to a JavaScriptAudioNode with 8-channel input.

Please re-name test file to: javascriptaudionode-upmix2-8channel-input.html

&gt; LayoutTests/webaudio/javascriptaudionode-2channel-input.html:15
&gt; +description(&quot;Tests JavaScriptAudioNode 2 channels input.&quot;);

Tests upmixing a 2-channel source connected to a JavaScriptAudioNode with 8-channel input.

&gt; LayoutTests/webaudio/javascriptaudionode-2channel-input.html:19
&gt; +var inputChannels = 6;

Let&apos;s switch to 8-channels since 6 channels can be interpreted as 5.1 (and we have a comment with bug in AudioBus::copyFrom() about this mixdown case)

&gt; LayoutTests/webaudio/javascriptaudionode-6channel-input-expected.txt:1
&gt; +Tests JavaScriptAudioNode 6 channels input.

Tests downmixing an 8-channel source connected to a JavaScriptAudioNode with 2-channel input.

Please re-name test file to: javascriptaudionode-downmix8-2channel-input.html

&gt; LayoutTests/webaudio/javascriptaudionode-6channel-input.html:15
&gt; +description(&quot;Tests JavaScriptAudioNode 6 channels input.&quot;);

Tests downmixing an 8-channel source connected to a JavaScriptAudioNode with 2-channel input.

&gt; LayoutTests/webaudio/javascriptaudionode-6channel-input.html:18
&gt; +var sourceChannels = 6;

Let&apos;s switch to 8-channels since 6 channels can be interpreted as 5.1 (and we have a comment with bug in AudioBus::copyFrom() about this mixdown case)

&gt; LayoutTests/webaudio/resources/javascriptaudionode-testing.js:47
&gt; +function checkData(buffer, numberOfChannels, length) {

Please rename test function to checkStereoOnlyData, and add simple comment describing why this will be the case for 2 -&gt; 8 upmix and 8 -&gt; 2 downmix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612075</commentid>
    <comment_count>9</comment_count>
      <attachid>139317</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-04-27 19:10:52 -0700</bug_when>
    <thetext>Created attachment 139317
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612077</commentid>
    <comment_count>10</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-04-27 19:12:53 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=139317) [details]
&gt; Patch

Chris, thanks for your comments, updated the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613103</commentid>
    <comment_count>11</comment_count>
      <attachid>139317</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-30 17:46:29 -0700</bug_when>
    <thetext>Comment on attachment 139317
Patch

Thanks Xingnan!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613161</commentid>
    <comment_count>12</comment_count>
      <attachid>139317</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-30 18:49:54 -0700</bug_when>
    <thetext>Comment on attachment 139317
Patch

Clearing flags on attachment: 139317

Committed r115699: &lt;http://trac.webkit.org/changeset/115699&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613162</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-30 18:50:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138525</attachid>
            <date>2012-04-24 02:27:46 -0700</date>
            <delta_ts>2012-04-27 00:04:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84687-20120424173141.patch</filename>
            <type>text/plain</type>
            <size>11458</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0OTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDA1MGUxYjcyMmM5MDRl
NjZkMjEyYzExNTM2MjQ4NTI2MjlhMWYyYS4uZGEyNjA3ZGVhMzBhMTg4ZTRkNWM0N2NmYzQ3MGRi
NTMyMTAwNGJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA0LTI0ICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIEFkZCBtdWx0aWNo
YW5uZWwgc3VwcG9ydCBmb3IgaW5wdXQgb2YgSmF2YVNjcmlwdEF1ZGlvTm9kZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ2ODcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
SmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0QXVk
aW9Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdEF1ZGlvTm9kZTo6
SmF2YVNjcmlwdEF1ZGlvTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0QXVkaW9O
b2RlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRBdWRpb05vZGU6
OnByb2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9k
ZS5oOgorICAgICAgICAoSmF2YVNjcmlwdEF1ZGlvTm9kZSk6CisKIDIwMTItMDQtMTggIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFVz
ZSBUZXh0dXJlTGF5ZXJDaHJvbWl1bSBmb3IgV2ViR0wgY29udGVudCBpbnN0ZWFkIG9mIGEgZGVk
aWNhdGVkIGxheWVyIHR5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuY3BwCmluZGV4IDgxYzFkYzc2YmQxNWI5ODU1YWY4
YmRhNjI5MGE0ZTdiMzk0ZTc4M2IuLjNlYTJlNGI1ZWZjNjBjODc5MjNjOWE0NzNhMjJiMDI1MThk
NTkzYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNj
cmlwdEF1ZGlvTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9K
YXZhU2NyaXB0QXVkaW9Ob2RlLmNwcApAQCAtNTgsOCArNTgsOCBAQCBQYXNzUmVmUHRyPEphdmFT
Y3JpcHRBdWRpb05vZGU+IEphdmFTY3JpcHRBdWRpb05vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQq
IGNvbnRleAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogV2Ugc3Rp
bGwgbmVlZCB0byBpbXBsZW1lbnQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLgotICAgIEFTU0VSVF9V
TlVTRUQobnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZklucHV0Q2hhbm5lbHMgPD0gQXVk
aW9Db250ZXh0OjptYXhOdW1iZXJPZkNoYW5uZWxzKCkpOworICAgIGlmICghbnVtYmVyT2ZJbnB1
dENoYW5uZWxzIHx8IG51bWJlck9mSW5wdXRDaGFubmVscyA+IEF1ZGlvQ29udGV4dDo6bWF4TnVt
YmVyT2ZDaGFubmVscygpKQorICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbnVtYmVyT2ZP
dXRwdXRDaGFubmVscyB8fCBudW1iZXJPZk91dHB1dENoYW5uZWxzID4gQXVkaW9Db250ZXh0Ojpt
YXhOdW1iZXJPZkNoYW5uZWxzKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzQsMTMgKzc0LDEz
IEBAIEphdmFTY3JpcHRBdWRpb05vZGU6OkphdmFTY3JpcHRBdWRpb05vZGUoQXVkaW9Db250ZXh0
KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlCiAgICAgLCBtX2J1ZmZlclNpemUoYnVmZmVyU2l6
ZSkKICAgICAsIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgoMCkKICAgICAsIG1faXNSZXF1ZXN0T3V0
c3RhbmRpbmcoZmFsc2UpCisgICAgLCBtX2ludGVybmFsSW5wdXRCdXMobnVtYmVyT2ZJbnB1dENo
YW5uZWxzLCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMsIGZhbHNlKQogewogICAg
IC8vIFJlZ2FyZGxlc3Mgb2YgdGhlIGFsbG93ZWQgYnVmZmVyIHNpemVzLCB3ZSBzdGlsbCBuZWVk
IHRvIHByb2Nlc3MgYXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBBdWRpb05vZGUuCiAgICAgaWYg
KG1fYnVmZmVyU2l6ZSA8IEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykKICAgICAg
ICAgbV9idWZmZXJTaXplID0gQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzOwogCi0g
ICAgLy8gRklYTUU6IFdlIHN0aWxsIG5lZWQgdG8gaW1wbGVtZW50IG51bWJlck9mSW5wdXRDaGFu
bmVscy4KLSAgICBBU1NFUlRfVU5VU0VEKG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZJ
bnB1dENoYW5uZWxzID4gMCk7CisgICAgQVNTRVJUKG51bWJlck9mSW5wdXRDaGFubmVscyA8PSBB
dWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSk7CiAKICAgICBhZGRJbnB1dChhZG9w
dFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKICAgICBhZGRPdXRwdXQoYWRvcHRQdHIo
bmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzKSkpOwpAQCAt
MTA1LDcgKzEwNSw3IEBAIHZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6aW5pdGlhbGl6ZSgpCiAg
ICAgLy8gQ3JlYXRlIGRvdWJsZSBidWZmZXJzIG9uIGJvdGggdGhlIGlucHV0IGFuZCBvdXRwdXQg
c2lkZXMuCiAgICAgLy8gVGhlc2UgQXVkaW9CdWZmZXJzIHdpbGwgYmUgZGlyZWN0bHkgYWNjZXNz
ZWQgaW4gdGhlIG1haW4gdGhyZWFkIGJ5IEphdmFTY3JpcHQuCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDI7ICsraSkgewotICAgICAgICBtX2lucHV0QnVmZmVycy5hcHBlbmQoQXVkaW9C
dWZmZXI6OmNyZWF0ZSgyLCBidWZmZXJTaXplKCksIHNhbXBsZVJhdGUpKTsKKyAgICAgICAgbV9p
bnB1dEJ1ZmZlcnMuYXBwZW5kKEF1ZGlvQnVmZmVyOjpjcmVhdGUobV9pbnRlcm5hbElucHV0QnVz
Lm51bWJlck9mQ2hhbm5lbHMoKSwgYnVmZmVyU2l6ZSgpLCBzYW1wbGVSYXRlKSk7CiAgICAgICAg
IG1fb3V0cHV0QnVmZmVycy5hcHBlbmQoQXVkaW9CdWZmZXI6OmNyZWF0ZSh0aGlzLT5vdXRwdXQo
MCktPm51bWJlck9mQ2hhbm5lbHMoKSwgYnVmZmVyU2l6ZSgpLCBzYW1wbGVSYXRlKSk7CiAgICAg
fQogCkBAIC0xNTcsMzMgKzE1NywyMyBAQCB2b2lkIEphdmFTY3JpcHRBdWRpb05vZGU6OnByb2Nl
c3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICBBU1NFUlQoaXNGcmFtZXNUb1Byb2Nlc3NH
b29kKTsKICAgICBpZiAoIWlzRnJhbWVzVG9Qcm9jZXNzR29vZCkKICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMgPSBpbnB1dEJ1cy0+
bnVtYmVyT2ZDaGFubmVscygpOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxz
ID0gbV9pbnRlcm5hbElucHV0QnVzLm51bWJlck9mQ2hhbm5lbHMoKTsKICAgICB1bnNpZ25lZCBu
dW1iZXJPZk91dHB1dENoYW5uZWxzID0gb3V0cHV0QnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0g
ICAgCi0gICAgYm9vbCBjaGFubmVsc0FyZUdvb2QgPSAobnVtYmVyT2ZJbnB1dENoYW5uZWxzID09
IDEgfHwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzID09IDIpOworCisgICAgYm9vbCBjaGFubmVsc0Fy
ZUdvb2QgPSAobnVtYmVyT2ZJbnB1dENoYW5uZWxzID09IGlucHV0QnVmZmVyLT5udW1iZXJPZkNo
YW5uZWxzKCkpICYmIChudW1iZXJPZk91dHB1dENoYW5uZWxzID09IG91dHB1dEJ1ZmZlci0+bnVt
YmVyT2ZDaGFubmVscygpKTsKICAgICBBU1NFUlQoY2hhbm5lbHNBcmVHb29kKTsKICAgICBpZiAo
IWNoYW5uZWxzQXJlR29vZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgZmxvYXQqIHNv
dXJjZUwgPSBpbnB1dEJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOwotICAgIGNvbnN0IGZsb2F0KiBz
b3VyY2VSID0gbnVtYmVyT2ZJbnB1dENoYW5uZWxzID4gMSA/IGlucHV0QnVzLT5jaGFubmVsKDEp
LT5kYXRhKCkgOiAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklucHV0
Q2hhbm5lbHM7IGkrKykKKyAgICAgICAgbV9pbnRlcm5hbElucHV0QnVzLnNldENoYW5uZWxNZW1v
cnkoaSwgaW5wdXRCdWZmZXItPmdldENoYW5uZWxEYXRhKGkpLT5kYXRhKCkgKyBtX2J1ZmZlclJl
YWRXcml0ZUluZGV4LCBmcmFtZXNUb1Byb2Nlc3MpOworCisgICAgbV9pbnRlcm5hbElucHV0QnVz
LmNvcHlGcm9tKCppbnB1dEJ1cyk7CiAKLSAgICAvLyBDb3B5IGZyb20gdGhlIGlucHV0IHRvIHRo
ZSBpbnB1dCBidWZmZXIuICBTZWUgImJ1ZmZlcnNBcmVHb29kIiBjaGVjayBhYm92ZSBmb3Igc2Fm
ZXR5LgotICAgIHNpemVfdCBieXRlc1RvQ29weSA9IHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1By
b2Nlc3M7Ci0gICAgbWVtY3B5KGlucHV0QnVmZmVyLT5nZXRDaGFubmVsRGF0YSgwKS0+ZGF0YSgp
ICsgbV9idWZmZXJSZWFkV3JpdGVJbmRleCwgc291cmNlTCwgYnl0ZXNUb0NvcHkpOwotICAgIAot
ICAgIGlmIChudW1iZXJPZklucHV0Q2hhbm5lbHMgPT0gMikKLSAgICAgICAgbWVtY3B5KGlucHV0
QnVmZmVyLT5nZXRDaGFubmVsRGF0YSgxKS0+ZGF0YSgpICsgbV9idWZmZXJSZWFkV3JpdGVJbmRl
eCwgc291cmNlUiwgYnl0ZXNUb0NvcHkpOwotICAgIGVsc2UgaWYgKG51bWJlck9mSW5wdXRDaGFu
bmVscyA9PSAxKSB7Ci0gICAgICAgIC8vIElmIHRoZSBpbnB1dCBpcyBtb25vLCB0aGVuIGFsc28g
Y29weSB0aGUgbW9ubyBpbnB1dCB0byB0aGUgcmlnaHQgY2hhbm5lbCBvZiB0aGUgQXVkaW9CdWZm
ZXIgd2hpY2ggdGhlIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50IHVzZXMuCi0gICAgICAgIC8vIEZJWE1F
OiBpdCBpcyBsaWtlbHkgdGhlIGF1ZGlvIEFQSSB3aWxsIGV2b2x2ZSB0byBwcmVzZW50IGFuIEF1
ZGlvQnVmZmVyIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGNoYW5uZWxzIGFzIG91ciBpbnB1dC4K
LSAgICAgICAgbWVtY3B5KGlucHV0QnVmZmVyLT5nZXRDaGFubmVsRGF0YSgxKS0+ZGF0YSgpICsg
bV9idWZmZXJSZWFkV3JpdGVJbmRleCwgc291cmNlTCwgYnl0ZXNUb0NvcHkpOwotICAgIH0KLSAg
ICAKICAgICAvLyBDb3B5IGZyb20gdGhlIG91dHB1dCBidWZmZXIgdG8gdGhlIG91dHB1dC4gCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mT3V0cHV0Q2hhbm5lbHM7ICsraSkK
LSAgICAgICAgbWVtY3B5KG91dHB1dEJ1cy0+Y2hhbm5lbChpKS0+bXV0YWJsZURhdGEoKSwgb3V0
cHV0QnVmZmVyLT5nZXRDaGFubmVsRGF0YShpKS0+ZGF0YSgpICsgbV9idWZmZXJSZWFkV3JpdGVJ
bmRleCwgYnl0ZXNUb0NvcHkpOworICAgICAgICBtZW1jcHkob3V0cHV0QnVzLT5jaGFubmVsKGkp
LT5tdXRhYmxlRGF0YSgpLCBvdXRwdXRCdWZmZXItPmdldENoYW5uZWxEYXRhKGkpLT5kYXRhKCkg
KyBtX2J1ZmZlclJlYWRXcml0ZUluZGV4LCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNz
KTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgYnVmZmVyaW5nIGluZGV4LgogICAgIG1fYnVmZmVyUmVh
ZFdyaXRlSW5kZXggPSAobV9idWZmZXJSZWFkV3JpdGVJbmRleCArIGZyYW1lc1RvUHJvY2Vzcykg
JSBidWZmZXJTaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5oCmluZGV4IGI5NDBlMWE4ZDVkNmJjNTQyNjlkZGRlNDRk
ZjYyZGQ5MTIzZGQ2ODguLjMzMGNlOGIxNDZjZjUyNzczNzk1Zjg5MzEwNDNiOWZjMGMwZjFlOTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1
ZGlvTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlw
dEF1ZGlvTm9kZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjZGVmaW5lIEphdmFTY3JpcHRBdWRpb05v
ZGVfaAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQXVkaW9CdXMu
aCIKICNpbmNsdWRlICJBdWRpb05vZGUuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKQEAgLTEwMSw2ICsxMDIsOCBAQCBwcml2YXRlOgogICAg
IHNpemVfdCBtX2J1ZmZlclNpemU7CiAgICAgdW5zaWduZWQgbV9idWZmZXJSZWFkV3JpdGVJbmRl
eDsKICAgICB2b2xhdGlsZSBib29sIG1faXNSZXF1ZXN0T3V0c3RhbmRpbmc7CisKKyAgICBBdWRp
b0J1cyBtX2ludGVybmFsSW5wdXRCdXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggNjIwNDdkNGI2NTVlNDdkODFhYzA1MmMxMzljNDYyOGRiMWQ1OGU2Zi4uMWNjZDUzY2U2
ZGFhZTg3YzRlYzVmMjY2NTNlOTBmMDdlNjE2ZTM4YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDEyLTA0LTI0ICBYaW5nbmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAg
ICAgIEFkZCBtdWx0aWNoYW5uZWwgc3VwcG9ydCBmb3IgaW5wdXQgb2YgSmF2YVNjcmlwdEF1ZGlv
Tm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ2
ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdl
YmF1ZGlvL2phdmFzY3JpcHRhdWRpb25vZGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYmF1
ZGlvL2phdmFzY3JpcHRhdWRpb25vZGUuaHRtbDoKKwogMjAxMi0wNC0yMyAgU2hlcmlmZiBCb3Qg
IDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjExNDk2NS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2phdmFz
Y3JpcHRhdWRpb25vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vamF2YXNj
cmlwdGF1ZGlvbm9kZS1leHBlY3RlZC50eHQKaW5kZXggODFlMWEwNTFiOGI2NmQ4Y2ZhY2M2MTg3
MWQ0YzAxMTJiZmI3NDE4Ni4uNGFhYWMxZDA4MTEzZDNkNjRjYTFjM2EzOTcyZTRkZGJhNmNlZTBk
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vamF2YXNjcmlwdGF1ZGlvbm9kZS1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vamF2YXNjcmlwdGF1ZGlvbm9k
ZS1leHBlY3RlZC50eHQKQEAgLTEyLDYgKzEyLDcgQEAgUEFTUyBTdWNjZXNzZnVsbHkgY3JlYXRl
ZCBKYXZhU2NyaXB0QXVkaW9Ob2RlIHdpdGggYnVmZmVyU2l6ZSA9IDQwOTYuCiBQQVNTIFN1Y2Nl
c3NmdWxseSBjcmVhdGVkIEphdmFTY3JpcHRBdWRpb05vZGUgd2l0aCBidWZmZXJTaXplID0gODE5
Mi4KIFBBU1MgU3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgSmF2YVNjcmlwdEF1ZGlvTm9kZSB3aXRoIGJ1
ZmZlclNpemUgPSAxNjM4NC4KIFBBU1Mgb25hdWRpb3Byb2Nlc3Mgd2FzIGNhbGxlZCB3aXRoIGNv
cnJlY3QgZGF0YS4KK1BBU1Mgb25hdWRpb3Byb2Nlc3Mgd2FzIGNhbGxlZCB3aXRoIGNvcnJlY3Qg
ZGF0YS4KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vamF2YXNjcmlwdGF1ZGlvbm9kZS5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vamF2YXNjcmlwdGF1ZGlvbm9kZS5odG1sCmluZGV4IDMx
YTYxNzJiNjM4MWEyZTgzNjNhMmFiMmM3M2NlNGNkYmFlYzA2ZDcuLjA5NDIxOWMyNDIzMWVmOTQw
MmFlZWE2ZTM2OWFmN2IyMzE1ZmM1NzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlv
L2phdmFzY3JpcHRhdWRpb25vZGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9qYXZh
c2NyaXB0YXVkaW9ub2RlLmh0bWwKQEAgLTI1LDE3ICsyNSwzMCBAQCB2YXIgYnVmZmVyU2l6ZSA9
IDUxMjsKIAogdmFyIGNvbnRleHQ7CiAKLWZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlcihjb250ZXh0LCBs
ZW5ndGgpIHsKLSAgICB2YXIgYXVkaW9CdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigyLCBs
ZW5ndGgsIHNhbXBsZVJhdGUpOwotICAgIHZhciBuID0gYXVkaW9CdWZmZXIubGVuZ3RoOwotICAg
IHZhciBkYXRhTCA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApOwotICAgIHZhciBkYXRh
UiA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDEpOwotCi0gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBuOyArK2kpIHsKLSAgICAgICAgZGF0YUxbaV0gPSAtMTsKLSAgICAgICAgZGF0YVJbaV0g
PSAxOworZnVuY3Rpb24gZmlsbERhdGEoYnVmZmVyLCBudW1iZXJPZkNoYW5uZWxzLCBsZW5ndGgp
IHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAg
ICAgICB2YXIgZGF0YSA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YShpKTsKKworICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IGxlbmd0aDsgKytqKQorICAgICAgICAgICAgZGF0YVtqXSA9IGkgKiAy
IC0gMTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNoZWNrRGF0YShidWZmZXIsIG51bWJlck9mQ2hh
bm5lbHMsIGxlbmd0aCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVs
czsgKytpKSB7CisgICAgICAgIHZhciBkYXRhID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKGkpOwor
CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuZ3RoOyArK2opCisgICAgICAgICAgICBp
ZiAoZGF0YVtqXSAhPSBpICogMiAtIDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KIAorZnVuY3Rpb24gY3JlYXRlQnVmZmVyKGNvbnRl
eHQsIG51bWJlck9mQ2hhbm5lbHMsIGxlbmd0aCkgeworICAgIHZhciBhdWRpb0J1ZmZlciA9IGNv
bnRleHQuY3JlYXRlQnVmZmVyKG51bWJlck9mQ2hhbm5lbHMsIGxlbmd0aCwgc2FtcGxlUmF0ZSk7
CisKKyAgICBmaWxsRGF0YShhdWRpb0J1ZmZlciwgbnVtYmVyT2ZDaGFubmVscywgYXVkaW9CdWZm
ZXIubGVuZ3RoKTsKICAgICByZXR1cm4gYXVkaW9CdWZmZXI7CiB9CiAKQEAgLTQ4LDE3ICs2MSw4
IEBAIGZ1bmN0aW9uIHByb2Nlc3NBdWRpb0RhdGEoZXZlbnQpIHsKICAgICAgICAgdGVzdEZhaWxl
ZCgibnVtYmVyT2ZPdXRwdXRDaGFubmVscyBkb2Vzbid0IG1hdGNoISIpOwogCiAgICAgYnVmZmVy
ID0gZXZlbnQuaW5wdXRCdWZmZXI7Ci0gICAgdmFyIGJ1ZmZlckRhdGFMID0gYnVmZmVyLmdldENo
YW5uZWxEYXRhKDApOwotICAgIHZhciBidWZmZXJEYXRhUiA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0
YSgxKTsKICAgICAKLSAgICB2YXIgc3VjY2VzcyA9IHRydWU7Ci0gICAgLy8gR28gdGhyb3VnaCBl
dmVyeSBzYW1wbGUgYW5kIG1ha2Ugc3VyZSBpdCdzIGFsbCAtMSBmb3IgdGhlIGxlZnQtY2hhbm5l
bCwgYW5kIGFsbCArMSBmb3IgdGhlIHJpZ2h0LWNoYW5uZWwuCi0gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBidWZmZXIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGJ1ZmZlckRhdGFMW2ldICE9
IC0xIHx8IGJ1ZmZlckRhdGFSW2ldICE9IDEpIHsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIHZhciBzdWNjZXNz
ID0gY2hlY2tEYXRhKGJ1ZmZlciwgMiwgYnVmZmVyLmxlbmd0aCk7CiAKICAgICBpZiAoc3VjY2Vz
cykgewogICAgICAgICB0ZXN0UGFzc2VkKCJvbmF1ZGlvcHJvY2VzcyB3YXMgY2FsbGVkIHdpdGgg
Y29ycmVjdCBkYXRhLiIpOwpAQCAtMTA5LDE4ICsxMTMsMjYgQEAgZnVuY3Rpb24gcnVuVGVzdCgp
IHsKICAgICBkb0J1ZmZlclNpemVUZXN0KDgxOTIpOwogICAgIGRvQnVmZmVyU2l6ZVRlc3QoMTYz
ODQpOwogIAotICAgIHZhciBzb3VyY2VCdWZmZXIgPSBjcmVhdGVCdWZmZXIoY29udGV4dCwgcmVu
ZGVyTGVuZ3RoSW5GcmFtZXMpOwotCi0gICAgdmFyIGJ1ZmZlclNvdXJjZSA9IGNvbnRleHQuY3Jl
YXRlQnVmZmVyU291cmNlKCk7Ci0gICAgYnVmZmVyU291cmNlLmJ1ZmZlciA9IHNvdXJjZUJ1ZmZl
cjsKLQotICAgIHZhciBqc25vZGUgPSBjb250ZXh0LmNyZWF0ZUphdmFTY3JpcHROb2RlKGJ1ZmZl
clNpemUsIDIsIG91dHB1dENoYW5uZWxzKTsKLQotICAgIGJ1ZmZlclNvdXJjZS5jb25uZWN0KGpz
bm9kZSk7Ci0gICAganNub2RlLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7Ci0gICAganNu
b2RlLm9uYXVkaW9wcm9jZXNzID0gcHJvY2Vzc0F1ZGlvRGF0YTsKLQotICAgIGJ1ZmZlclNvdXJj
ZS5ub3RlT24oMCk7CisgICAgdmFyIHNvdXJjZUJ1ZmZlcjEgPSBjcmVhdGVCdWZmZXIoY29udGV4
dCwgMiwgcmVuZGVyTGVuZ3RoSW5GcmFtZXMpOworICAgIHZhciBzb3VyY2VCdWZmZXIyID0gY3Jl
YXRlQnVmZmVyKGNvbnRleHQsIDYsIHJlbmRlckxlbmd0aEluRnJhbWVzKTsKKworICAgIHZhciBi
dWZmZXJTb3VyY2UxID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICB2YXIgYnVm
ZmVyU291cmNlMiA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgYnVmZmVyU291
cmNlMS5idWZmZXIgPSBzb3VyY2VCdWZmZXIxOworICAgIGJ1ZmZlclNvdXJjZTIuYnVmZmVyID0g
c291cmNlQnVmZmVyMjsKKworICAgIHZhciBqc25vZGUxID0gY29udGV4dC5jcmVhdGVKYXZhU2Ny
aXB0Tm9kZShidWZmZXJTaXplLCA2LCBvdXRwdXRDaGFubmVscyk7CisgICAgdmFyIGpzbm9kZTIg
PSBjb250ZXh0LmNyZWF0ZUphdmFTY3JpcHROb2RlKGJ1ZmZlclNpemUsIDIsIG91dHB1dENoYW5u
ZWxzKTsKKworICAgIGJ1ZmZlclNvdXJjZTEuY29ubmVjdChqc25vZGUxKTsKKyAgICBidWZmZXJT
b3VyY2UyLmNvbm5lY3QoanNub2RlMik7CisgICAganNub2RlMS5jb25uZWN0KGNvbnRleHQuZGVz
dGluYXRpb24pOworICAgIGpzbm9kZTIuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKyAg
ICBqc25vZGUxLm9uYXVkaW9wcm9jZXNzID0gcHJvY2Vzc0F1ZGlvRGF0YTsKKyAgICBqc25vZGUy
Lm9uYXVkaW9wcm9jZXNzID0gcHJvY2Vzc0F1ZGlvRGF0YTsKKworICAgIGJ1ZmZlclNvdXJjZTEu
bm90ZU9uKDApOworICAgIGJ1ZmZlclNvdXJjZTIubm90ZU9uKDApOwogICAgIGNvbnRleHQub25j
b21wbGV0ZSA9IGZpbmlzaEpTVGVzdDsKICAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7CiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139139</attachid>
            <date>2012-04-27 00:04:21 -0700</date>
            <delta_ts>2012-04-27 19:10:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84687-20120427150820.patch</filename>
            <type>text/plain</type>
            <size>14566</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1Mzk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzE2MjMzMjM0ZGY1YTEw
Y2Y2NzE1MTU2YTE2Nzk5OGNkNTNkODczZS4uMGE4NTNlMDYwMzY4YzFkZjVhYjkyMWMzMGM0OTQ3
ZTFhMDU5ZDAwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA0LTI3ICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIEFkZCBtdWx0aWNo
YW5uZWwgc3VwcG9ydCBmb3IgaW5wdXQgb2YgSmF2YVNjcmlwdEF1ZGlvTm9kZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ2ODcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogd2ViYXVkaW8vamF2
YXNjcmlwdGF1ZGlvbm9kZS0yY2hhbm5lbC1pbnB1dC5odG1sCisgICAgICAgICAgICAgICB3ZWJh
dWRpby9qYXZhc2NyaXB0YXVkaW9ub2RlLTZjaGFubmVsLWlucHV0Lmh0bWwKKworICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKYXZhU2NyaXB0QXVkaW9Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SmF2
YVNjcmlwdEF1ZGlvTm9kZTo6SmF2YVNjcmlwdEF1ZGlvTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKYXZhU2NyaXB0QXVkaW9Ob2RlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6Okph
dmFTY3JpcHRBdWRpb05vZGU6OnByb2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
SmF2YVNjcmlwdEF1ZGlvTm9kZS5oOgorICAgICAgICAoSmF2YVNjcmlwdEF1ZGlvTm9kZSk6CisK
IDIwMTItMDQtMjYgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgSW1wcm92ZSBjb21wb3NpdGluZyBsb2dnaW5nIG91dHB1dApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAKaW5k
ZXggODFjMWRjNzZiZDE1Yjk4NTVhZjhiZGE2MjkwYTRlN2IzOTRlNzgzYi4uN2Y1NDFkNWEzMTZm
NTM1ZTFmNmUwYTI4YzVmMDA1NzQ2YzRmMWViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuY3BwCkBAIC01OCw4ICs1
OCw4IEBAIFBhc3NSZWZQdHI8SmF2YVNjcmlwdEF1ZGlvTm9kZT4gSmF2YVNjcmlwdEF1ZGlvTm9k
ZTo6Y3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIC8vIEZJWE1FOiBXZSBzdGlsbCBuZWVkIHRvIGltcGxlbWVudCBudW1iZXJPZklucHV0
Q2hhbm5lbHMuCi0gICAgQVNTRVJUX1VOVVNFRChudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51bWJl
ck9mSW5wdXRDaGFubmVscyA8PSBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSk7
CisgICAgaWYgKG51bWJlck9mSW5wdXRDaGFubmVscyA+IEF1ZGlvQ29udGV4dDo6bWF4TnVtYmVy
T2ZDaGFubmVscygpKQorICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbnVtYmVyT2ZPdXRw
dXRDaGFubmVscyB8fCBudW1iZXJPZk91dHB1dENoYW5uZWxzID4gQXVkaW9Db250ZXh0OjptYXhO
dW1iZXJPZkNoYW5uZWxzKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzQsMTMgKzc0LDE1IEBA
IEphdmFTY3JpcHRBdWRpb05vZGU6OkphdmFTY3JpcHRBdWRpb05vZGUoQXVkaW9Db250ZXh0KiBj
b250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlCiAgICAgLCBtX2J1ZmZlclNpemUoYnVmZmVyU2l6ZSkK
ICAgICAsIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgoMCkKICAgICAsIG1faXNSZXF1ZXN0T3V0c3Rh
bmRpbmcoZmFsc2UpCisgICAgLCBtX251bWJlck9mSW5wdXRDaGFubmVscyhudW1iZXJPZklucHV0
Q2hhbm5lbHMpCisgICAgLCBtX251bWJlck9mT3V0cHV0Q2hhbm5lbHMobnVtYmVyT2ZPdXRwdXRD
aGFubmVscykKKyAgICAsIG1faW50ZXJuYWxJbnB1dEJ1cyhudW1iZXJPZklucHV0Q2hhbm5lbHMs
IEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcywgZmFsc2UpCiB7CiAgICAgLy8gUmVn
YXJkbGVzcyBvZiB0aGUgYWxsb3dlZCBidWZmZXIgc2l6ZXMsIHdlIHN0aWxsIG5lZWQgdG8gcHJv
Y2VzcyBhdCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIEF1ZGlvTm9kZS4KICAgICBpZiAobV9idWZm
ZXJTaXplIDwgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzKQogICAgICAgICBtX2J1
ZmZlclNpemUgPSBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXM7CiAKLSAgICAvLyBG
SVhNRTogV2Ugc3RpbGwgbmVlZCB0byBpbXBsZW1lbnQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLgot
ICAgIEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZklucHV0Q2hh
bm5lbHMgPiAwKTsKKyAgICBBU1NFUlQobnVtYmVyT2ZJbnB1dENoYW5uZWxzIDw9IEF1ZGlvQ29u
dGV4dDo6bWF4TnVtYmVyT2ZDaGFubmVscygpKTsKIAogICAgIGFkZElucHV0KGFkb3B0UHRyKG5l
dyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwogICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVk
aW9Ob2RlT3V0cHV0KHRoaXMsIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMpKSk7CkBAIC0xMDUsOCAr
MTA3LDExIEBAIHZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6aW5pdGlhbGl6ZSgpCiAgICAgLy8g
Q3JlYXRlIGRvdWJsZSBidWZmZXJzIG9uIGJvdGggdGhlIGlucHV0IGFuZCBvdXRwdXQgc2lkZXMu
CiAgICAgLy8gVGhlc2UgQXVkaW9CdWZmZXJzIHdpbGwgYmUgZGlyZWN0bHkgYWNjZXNzZWQgaW4g
dGhlIG1haW4gdGhyZWFkIGJ5IEphdmFTY3JpcHQuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDI7ICsraSkgewotICAgICAgICBtX2lucHV0QnVmZmVycy5hcHBlbmQoQXVkaW9CdWZmZXI6
OmNyZWF0ZSgyLCBidWZmZXJTaXplKCksIHNhbXBsZVJhdGUpKTsKLSAgICAgICAgbV9vdXRwdXRC
dWZmZXJzLmFwcGVuZChBdWRpb0J1ZmZlcjo6Y3JlYXRlKHRoaXMtPm91dHB1dCgwKS0+bnVtYmVy
T2ZDaGFubmVscygpLCBidWZmZXJTaXplKCksIHNhbXBsZVJhdGUpKTsKKyAgICAgICAgUmVmUHRy
PEF1ZGlvQnVmZmVyPiBpbnB1dEJ1ZmZlciA9IG1fbnVtYmVyT2ZJbnB1dENoYW5uZWxzID8gQXVk
aW9CdWZmZXI6OmNyZWF0ZShtX251bWJlck9mSW5wdXRDaGFubmVscywgYnVmZmVyU2l6ZSgpLCBz
YW1wbGVSYXRlKSA6IDA7CisgICAgICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gb3V0cHV0QnVmZmVy
ID0gbV9udW1iZXJPZk91dHB1dENoYW5uZWxzID8gQXVkaW9CdWZmZXI6OmNyZWF0ZShtX251bWJl
ck9mT3V0cHV0Q2hhbm5lbHMsIGJ1ZmZlclNpemUoKSwgc2FtcGxlUmF0ZSkgOiAwOworCisgICAg
ICAgIG1faW5wdXRCdWZmZXJzLmFwcGVuZChpbnB1dEJ1ZmZlcik7CisgICAgICAgIG1fb3V0cHV0
QnVmZmVycy5hcHBlbmQob3V0cHV0QnVmZmVyKTsKICAgICB9CiAKICAgICBBdWRpb05vZGU6Omlu
aXRpYWxpemUoKTsKQEAgLTE1NywzMyArMTYyLDI0IEBAIHZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9k
ZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogICAgIEFTU0VSVChpc0ZyYW1lc1Rv
UHJvY2Vzc0dvb2QpOwogICAgIGlmICghaXNGcmFtZXNUb1Byb2Nlc3NHb29kKQogICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFubmVscyA9IGlu
cHV0QnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0
Q2hhbm5lbHMgPSBtX2ludGVybmFsSW5wdXRCdXMubnVtYmVyT2ZDaGFubmVscygpOwogICAgIHVu
c2lnbmVkIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMgPSBvdXRwdXRCdXMtPm51bWJlck9mQ2hhbm5l
bHMoKTsKLSAgICAKLSAgICBib29sIGNoYW5uZWxzQXJlR29vZCA9IChudW1iZXJPZklucHV0Q2hh
bm5lbHMgPT0gMSB8fCBudW1iZXJPZklucHV0Q2hhbm5lbHMgPT0gMik7CisKKyAgICBib29sIGNo
YW5uZWxzQXJlR29vZCA9IChudW1iZXJPZklucHV0Q2hhbm5lbHMgPT0gbV9udW1iZXJPZklucHV0
Q2hhbm5lbHMpICYmIChudW1iZXJPZk91dHB1dENoYW5uZWxzID09IG1fbnVtYmVyT2ZPdXRwdXRD
aGFubmVscyk7CiAgICAgQVNTRVJUKGNoYW5uZWxzQXJlR29vZCk7CiAgICAgaWYgKCFjaGFubmVs
c0FyZUdvb2QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VMID0g
aW5wdXRCdXMtPmNoYW5uZWwoMCktPmRhdGEoKTsKLSAgICBjb25zdCBmbG9hdCogc291cmNlUiA9
IG51bWJlck9mSW5wdXRDaGFubmVscyA+IDEgPyBpbnB1dEJ1cy0+Y2hhbm5lbCgxKS0+ZGF0YSgp
IDogMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnB1dENoYW5uZWxz
OyBpKyspCisgICAgICAgIG1faW50ZXJuYWxJbnB1dEJ1cy5zZXRDaGFubmVsTWVtb3J5KGksIGlu
cHV0QnVmZmVyLT5nZXRDaGFubmVsRGF0YShpKS0+ZGF0YSgpICsgbV9idWZmZXJSZWFkV3JpdGVJ
bmRleCwgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIGlmIChudW1iZXJPZklucHV0Q2hhbm5lbHMp
CisgICAgICAgIG1faW50ZXJuYWxJbnB1dEJ1cy5jb3B5RnJvbSgqaW5wdXRCdXMpOwogCi0gICAg
Ly8gQ29weSBmcm9tIHRoZSBpbnB1dCB0byB0aGUgaW5wdXQgYnVmZmVyLiAgU2VlICJidWZmZXJz
QXJlR29vZCIgY2hlY2sgYWJvdmUgZm9yIHNhZmV0eS4KLSAgICBzaXplX3QgYnl0ZXNUb0NvcHkg
PSBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzOwotICAgIG1lbWNweShpbnB1dEJ1ZmZl
ci0+Z2V0Q2hhbm5lbERhdGEoMCktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIHNv
dXJjZUwsIGJ5dGVzVG9Db3B5KTsKLSAgICAKLSAgICBpZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxz
ID09IDIpCi0gICAgICAgIG1lbWNweShpbnB1dEJ1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoMSktPmRh
dGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIHNvdXJjZVIsIGJ5dGVzVG9Db3B5KTsKLSAg
ICBlbHNlIGlmIChudW1iZXJPZklucHV0Q2hhbm5lbHMgPT0gMSkgewotICAgICAgICAvLyBJZiB0
aGUgaW5wdXQgaXMgbW9ubywgdGhlbiBhbHNvIGNvcHkgdGhlIG1vbm8gaW5wdXQgdG8gdGhlIHJp
Z2h0IGNoYW5uZWwgb2YgdGhlIEF1ZGlvQnVmZmVyIHdoaWNoIHRoZSBBdWRpb1Byb2Nlc3NpbmdF
dmVudCB1c2VzLgotICAgICAgICAvLyBGSVhNRTogaXQgaXMgbGlrZWx5IHRoZSBhdWRpbyBBUEkg
d2lsbCBldm9sdmUgdG8gcHJlc2VudCBhbiBBdWRpb0J1ZmZlciB3aXRoIHRoZSBzYW1lIG51bWJl
ciBvZiBjaGFubmVscyBhcyBvdXIgaW5wdXQuCi0gICAgICAgIG1lbWNweShpbnB1dEJ1ZmZlci0+
Z2V0Q2hhbm5lbERhdGEoMSktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIHNvdXJj
ZUwsIGJ5dGVzVG9Db3B5KTsKLSAgICB9Ci0gICAgCiAgICAgLy8gQ29weSBmcm9tIHRoZSBvdXRw
dXQgYnVmZmVyIHRvIHRoZSBvdXRwdXQuIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZk91dHB1dENoYW5uZWxzOyArK2kpCi0gICAgICAgIG1lbWNweShvdXRwdXRCdXMtPmNo
YW5uZWwoaSktPm11dGFibGVEYXRhKCksIG91dHB1dEJ1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoaSkt
PmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIGJ5dGVzVG9Db3B5KTsKKyAgICAgICAg
bWVtY3B5KG91dHB1dEJ1cy0+Y2hhbm5lbChpKS0+bXV0YWJsZURhdGEoKSwgb3V0cHV0QnVmZmVy
LT5nZXRDaGFubmVsRGF0YShpKS0+ZGF0YSgpICsgbV9idWZmZXJSZWFkV3JpdGVJbmRleCwgc2l6
ZW9mKGZsb2F0KSAqIGZyYW1lc1RvUHJvY2Vzcyk7CiAKICAgICAvLyBVcGRhdGUgdGhlIGJ1ZmZl
cmluZyBpbmRleC4KICAgICBtX2J1ZmZlclJlYWRXcml0ZUluZGV4ID0gKG1fYnVmZmVyUmVhZFdy
aXRlSW5kZXggKyBmcmFtZXNUb1Byb2Nlc3MpICUgYnVmZmVyU2l6ZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaAppbmRl
eCBiOTQwZTFhOGQ1ZDZiYzU0MjY5ZGRkZTQ0ZGY2MmRkOTEyM2RkNjg4Li40MDk4Y2ZjODkyM2M3
MjgwOTZmZDVkNTkyN2Y1ZDM3Y2RmYTRmZGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaApAQCAtMjYsNiArMjYsNyBA
QAogI2RlZmluZSBKYXZhU2NyaXB0QXVkaW9Ob2RlX2gKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgorI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCiAjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCiAj
aW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCkBAIC0x
MDEsNiArMTAyLDExIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fYnVmZmVyU2l6ZTsKICAgICB1
bnNpZ25lZCBtX2J1ZmZlclJlYWRXcml0ZUluZGV4OwogICAgIHZvbGF0aWxlIGJvb2wgbV9pc1Jl
cXVlc3RPdXRzdGFuZGluZzsKKworICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZJbnB1dENoYW5uZWxz
OworICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZPdXRwdXRDaGFubmVsczsKKworICAgIEF1ZGlvQnVz
IG1faW50ZXJuYWxJbnB1dEJ1czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCAxYTE0YTdkNjMzOGQxMzMwZTYwMzAyNTBjNjMzOWU2ZTZjNTZkZGFjLi42ZTQ5NDlkN2I1MzRi
Y2ViNGU1MzYyYzZlMWE2NzgyMDQ2YTI2NGNlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTIt
MDQtMjcgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisKKyAgICAgICAg
QWRkIG11bHRpY2hhbm5lbCBzdXBwb3J0IGZvciBpbnB1dCBvZiBKYXZhU2NyaXB0QXVkaW9Ob2Rl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDY4Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVk
aW8vamF2YXNjcmlwdGF1ZGlvbm9kZS0yY2hhbm5lbC1pbnB1dC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHdlYmF1ZGlvL2phdmFzY3JpcHRhdWRpb25vZGUtMmNoYW5uZWwtaW5wdXQu
aHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vamF2YXNjcmlwdGF1ZGlvbm9kZS02Y2hh
bm5lbC1pbnB1dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2phdmFz
Y3JpcHRhdWRpb25vZGUtNmNoYW5uZWwtaW5wdXQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
YXVkaW8vcmVzb3VyY2VzL2phdmFzY3JpcHRhdWRpb25vZGUtdGVzdGluZy5qczogQWRkZWQuCisg
ICAgICAgIChjcmVhdGVCdWZmZXIpOgorICAgICAgICAocHJvY2Vzc0F1ZGlvRGF0YSk6CisgICAg
ICAgIChmaWxsRGF0YSk6CisgICAgICAgIChjaGVja0RhdGEpOgorICAgICAgICAocnVuSlNOb2Rl
VGVzdCk6CisKIDIwMTItMDQtMjYgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgU2tpcCB0aGUgbmV3IE9iakMgdGVzdHMgZm9yIFdlYktpdDIKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2phdmFzY3JpcHRhdWRpb25vZGUtMmNoYW5uZWwt
aW5wdXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vamF2YXNjcmlwdGF1ZGlv
bm9kZS0yY2hhbm5lbC1pbnB1dC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRmYTcyMjcyNjNj
NjllOWM3MDg2ODQxYThkMWRiNzhhMDk0MTRiMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2phdmFzY3JpcHRhdWRpb25vZGUtMmNoYW5uZWwtaW5wdXQtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsOSBAQAorVGVzdHMgSmF2YVNjcmlwdEF1ZGlvTm9kZSAyIGNoYW5uZWxz
IGlucHV0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1Mgb25hdWRpb3Byb2Nl
c3Mgd2FzIGNhbGxlZCB3aXRoIGNvcnJlY3QgaW5wdXQgZGF0YS4KK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJhdWRpby9qYXZhc2NyaXB0YXVkaW9ub2RlLTJjaGFubmVsLWlucHV0Lmh0bWwgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9qYXZhc2NyaXB0YXVkaW9ub2RlLTJjaGFubmVsLWlucHV0Lmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzU1ZTk2YWQ0MWU2OTU5MmNjOGMwN2EwODVjMmIyZmQ4ZWVmMGY5YgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2phdmFzY3JpcHRhdWRpb25vZGUt
MmNoYW5uZWwtaW5wdXQuaHRtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgaHRtbD4KKwor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJy
ZXNvdXJjZXMvamF2YXNjcmlwdGF1ZGlvbm9kZS10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKworPGJvZHk+CisKKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIEphdmFTY3JpcHRB
dWRpb05vZGUgMiBjaGFubmVscyBpbnB1dC4iKTsKKwordmFyIHNhbXBsZVJhdGUgPSA0NDEwMC4w
OwordmFyIHNvdXJjZUNoYW5uZWxzID0gMjsKK3ZhciBpbnB1dENoYW5uZWxzID0gNjsKK3ZhciBv
dXRwdXRDaGFubmVscyA9IDY7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICB9CisKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICBydW5K
U05vZGVUZXN0KCk7Cit9CisKK3J1blRlc3QoKTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3Jj
PSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vamF2YXNjcmlwdGF1
ZGlvbm9kZS02Y2hhbm5lbC1pbnB1dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9qYXZhc2NyaXB0YXVkaW9ub2RlLTZjaGFubmVsLWlucHV0LWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42NGRlY2E5NzJlMGZiNTgzOTc0ZjZkODBmNGYyZTY3MjFiZTAwZGMxCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vamF2YXNjcmlwdGF1ZGlvbm9kZS02Y2hhbm5l
bC1pbnB1dC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5IEBACitUZXN0cyBKYXZhU2NyaXB0QXVk
aW9Ob2RlIDYgY2hhbm5lbHMgaW5wdXQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
UEFTUyBvbmF1ZGlvcHJvY2VzcyB3YXMgY2FsbGVkIHdpdGggY29ycmVjdCBpbnB1dCBkYXRhLgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2phdmFzY3JpcHRhdWRpb25vZGUtNmNoYW5uZWwt
aW5wdXQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2phdmFzY3JpcHRhdWRpb25vZGUtNmNo
YW5uZWwtaW5wdXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjRkNzhlN2M4OGIzNTY3ZmU1N2QxNWQzNzhk
MTA5NDk2MWUzMDlhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vamF2
YXNjcmlwdGF1ZGlvbm9kZS02Y2hhbm5lbC1pbnB1dC5odG1sCkBAIC0wLDAgKzEsMzkgQEAKKzwh
RE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9InJlc291cmNlcy9qYXZhc2NyaXB0YXVkaW9ub2RlLXRlc3RpbmcuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwv
ZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigi
VGVzdHMgSmF2YVNjcmlwdEF1ZGlvTm9kZSA2IGNoYW5uZWxzIGlucHV0LiIpOworCit2YXIgc2Ft
cGxlUmF0ZSA9IDQ0MTAwLjA7Cit2YXIgc291cmNlQ2hhbm5lbHMgPSA2OwordmFyIGlucHV0Q2hh
bm5lbHMgPSAyOwordmFyIG91dHB1dENoYW5uZWxzID0gNjsKKworZnVuY3Rpb24gcnVuVGVzdCgp
IHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKKworICAgIHJ1bkpTTm9kZVRlc3QoKTsKK30KKworcnVuVGVzdCgpOworCis8L3Njcmlw
dD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJh
dWRpby9yZXNvdXJjZXMvamF2YXNjcmlwdGF1ZGlvbm9kZS10ZXN0aW5nLmpzIGIvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vcmVzb3VyY2VzL2phdmFzY3JpcHRhdWRpb25vZGUtdGVzdGluZy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42NTI1ODFlZmVkMTgxZWY3ZDQzM2RiMTQxMzk1M2NmOTJmNTNkNDEwCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2phdmFzY3JpcHRhdWRp
b25vZGUtdGVzdGluZy5qcwpAQCAtMCwwICsxLDgzIEBACisvLyBGb3IgdGhlIGN1cnJlbnQgaW1w
bGVtZW50YXRpb24gb2YgSmF2YVNjcmlwdEF1ZGlvTm9kZSwgd2hlbiBpdCB3b3JrcyB3aXRoIE9m
ZmxpbmVBdWRpb0NvbnRleHQgKHdoaWNoIHJ1bnMgbXVjaCBmYXN0ZXIKKy8vIHRoYW4gcmVhbC10
aW1lKSB0aGUgZXZlbnQuaW5wdXRCdWZmZXIgbWlnaHQgYmUgb3ZlcndyaXRlIGFnYWluIGJlZm9y
ZSBvbmF1ZGlvcHJvY2VzcyBldmVyIGdldCBjaGFuY2UgdG8gYmUgY2FsbGVkLgorLy8gV2UgY2Fy
ZWZ1bGx5IGFycmFuZ2UgdGhlIHJlbmRlckxlbmd0aEluRnJhbWVzIGFuZCBidWZmZXJTaXplIHRv
IGhhdmUgZXhhY3RseSB0aGUgc2FtZSB2YWx1ZSB0byBhdm9pZCB0aGlzIGlzc3VlLgordmFyIHJl
bmRlckxlbmd0aEluRnJhbWVzID0gNTEyOwordmFyIGJ1ZmZlclNpemUgPSA1MTI7CisKK3ZhciBj
b250ZXh0OworCitmdW5jdGlvbiBjcmVhdGVCdWZmZXIoY29udGV4dCwgbnVtYmVyT2ZDaGFubmVs
cywgbGVuZ3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIo
bnVtYmVyT2ZDaGFubmVscywgbGVuZ3RoLCBzYW1wbGVSYXRlKTsKKworICAgIGZpbGxEYXRhKGF1
ZGlvQnVmZmVyLCBudW1iZXJPZkNoYW5uZWxzLCBhdWRpb0J1ZmZlci5sZW5ndGgpOworICAgIHJl
dHVybiBhdWRpb0J1ZmZlcjsKK30KKworZnVuY3Rpb24gcHJvY2Vzc0F1ZGlvRGF0YShldmVudCkg
eworICAgIGJ1ZmZlciA9IGV2ZW50Lm91dHB1dEJ1ZmZlcjsKKyAgICBpZiAoYnVmZmVyLm51bWJl
ck9mQ2hhbm5lbHMgIT0gb3V0cHV0Q2hhbm5lbHMpCisgICAgICAgIHRlc3RGYWlsZWQoIm51bWJl
ck9mT3V0cHV0Q2hhbm5lbHMgZG9lc24ndCBtYXRjaCEiKTsKKworICAgIGlmIChidWZmZXIubGVu
Z3RoICE9IGJ1ZmZlclNpemUpCisgICAgICAgIHRlc3RGYWlsZWQoImxlbmd0aCBvZiBidWZmZXIg
ZG9lc24ndCBtYXRjaCEiKTsKKworICAgIGJ1ZmZlciA9IGV2ZW50LmlucHV0QnVmZmVyOworICAg
IAorICAgIHZhciBzdWNjZXNzID0gY2hlY2tEYXRhKGJ1ZmZlciwgaW5wdXRDaGFubmVscywgYnVm
ZmVyLmxlbmd0aCk7CisKKyAgICBpZiAoc3VjY2VzcykgeworICAgICAgICB0ZXN0UGFzc2VkKCJv
bmF1ZGlvcHJvY2VzcyB3YXMgY2FsbGVkIHdpdGggY29ycmVjdCBpbnB1dCBkYXRhLiIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIm9uYXVkaW9wcm9jZXNzIHdhcyBjYWxsZWQg
d2l0aCB3cm9uZyBpbnB1dCBkYXRhLiIpOworICAgIH0KK30KKworZnVuY3Rpb24gZmlsbERhdGEo
YnVmZmVyLCBudW1iZXJPZkNoYW5uZWxzLCBsZW5ndGgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICB2YXIgZGF0YSA9IGJ1ZmZlci5n
ZXRDaGFubmVsRGF0YShpKTsKKworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbmd0aDsg
KytqKQorICAgICAgICAgICAgaWYgKGkgPCAyKQorICAgICAgICAgICAgICAgIGRhdGFbal0gPSBp
ICogMiAtIDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGF0YVtqXSA9IDA7
CisgICAgfQorfQorCitmdW5jdGlvbiBjaGVja0RhdGEoYnVmZmVyLCBudW1iZXJPZkNoYW5uZWxz
LCBsZW5ndGgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsr
aSkgeworICAgICAgICB2YXIgZGF0YSA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YShpKTsKKworICAg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBpZiAo
aSA8IDIpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YVtqXSAhPSBpICogMiAtIDEpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKGRhdGFbal0gIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitmdW5jdGlvbiBydW5KU05vZGVUZXN0KCkKK3sKKyAgICAvLyBDcmVhdGUgb2ZmbGlu
ZSBhdWRpbyBjb250ZXh0LgorICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIs
IHJlbmRlckxlbmd0aEluRnJhbWVzLCBzYW1wbGVSYXRlKTsKKworICAgIHZhciBzb3VyY2VCdWZm
ZXIgPSBjcmVhdGVCdWZmZXIoY29udGV4dCwgc291cmNlQ2hhbm5lbHMsIHJlbmRlckxlbmd0aElu
RnJhbWVzKTsKKworICAgIHZhciBidWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNv
dXJjZSgpOworICAgIGJ1ZmZlclNvdXJjZS5idWZmZXIgPSBzb3VyY2VCdWZmZXI7CisKKyAgICB2
YXIganNub2RlID0gY29udGV4dC5jcmVhdGVKYXZhU2NyaXB0Tm9kZShidWZmZXJTaXplLCBpbnB1
dENoYW5uZWxzLCBvdXRwdXRDaGFubmVscyk7CisKKyAgICBidWZmZXJTb3VyY2UuY29ubmVjdChq
c25vZGUpOworICAgIGpzbm9kZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworICAgIGpz
bm9kZS5vbmF1ZGlvcHJvY2VzcyA9IHByb2Nlc3NBdWRpb0RhdGE7CisKKyAgICBidWZmZXJTb3Vy
Y2Uubm90ZU9uKDApOworICAgIGNvbnRleHQub25jb21wbGV0ZSA9IGZpbmlzaEpTVGVzdDsKKyAg
ICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139317</attachid>
            <date>2012-04-27 19:10:52 -0700</date>
            <delta_ts>2012-04-30 18:49:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84687-20120428101452.patch</filename>
            <type>text/plain</type>
            <size>15051</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1Mzk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzE2MjMzMjM0ZGY1YTEw
Y2Y2NzE1MTU2YTE2Nzk5OGNkNTNkODczZS4uZTcwNDVjMDlkYTMzYzBiZWUwMjY2YTM1ZmMwNTYz
ZDJhM2YwZGQ3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA0LTI3ICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIEFkZCBtdWx0aWNo
YW5uZWwgc3VwcG9ydCBmb3IgaW5wdXQgb2YgSmF2YVNjcmlwdEF1ZGlvTm9kZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ2ODcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogd2ViYXVkaW8vamF2
YXNjcmlwdGF1ZGlvbm9kZS1kb3dubWl4OC0yY2hhbm5lbC1pbnB1dC5odG1sCisgICAgICAgICAg
ICAgICB3ZWJhdWRpby9qYXZhc2NyaXB0YXVkaW9ub2RlLXVwbWl4Mi04Y2hhbm5lbC1pbnB1dC5o
dG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdEF1ZGlvTm9kZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkphdmFTY3JpcHRBdWRpb05vZGU6OkphdmFTY3JpcHRBdWRpb05vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdEF1ZGlvTm9kZTo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0QXVkaW9Ob2RlOjpwcm9jZXNzKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaDoKKyAgICAgICAgKEphdmFTY3Jp
cHRBdWRpb05vZGUpOgorCiAyMDEyLTA0LTI2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIEltcHJvdmUgY29tcG9zaXRpbmcgbG9nZ2luZyBvdXRwdXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1
ZGlvTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRB
dWRpb05vZGUuY3BwCmluZGV4IDgxYzFkYzc2YmQxNWI5ODU1YWY4YmRhNjI5MGE0ZTdiMzk0ZTc4
M2IuLjdmNTQxZDVhMzE2ZjUzNWUxZjZlMGEyOGM1ZjAwNTc0NmM0ZjFlYmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2Rl
LmNwcApAQCAtNTgsOCArNTgsOCBAQCBQYXNzUmVmUHRyPEphdmFTY3JpcHRBdWRpb05vZGU+IEph
dmFTY3JpcHRBdWRpb05vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleAogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogV2Ugc3RpbGwgbmVlZCB0byBpbXBsZW1l
bnQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLgotICAgIEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZJbnB1
dENoYW5uZWxzLCBudW1iZXJPZklucHV0Q2hhbm5lbHMgPD0gQXVkaW9Db250ZXh0OjptYXhOdW1i
ZXJPZkNoYW5uZWxzKCkpOworICAgIGlmIChudW1iZXJPZklucHV0Q2hhbm5lbHMgPiBBdWRpb0Nv
bnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBp
ZiAoIW51bWJlck9mT3V0cHV0Q2hhbm5lbHMgfHwgbnVtYmVyT2ZPdXRwdXRDaGFubmVscyA+IEF1
ZGlvQ29udGV4dDo6bWF4TnVtYmVyT2ZDaGFubmVscygpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTc0LDEzICs3NCwxNSBAQCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpKYXZhU2NyaXB0QXVkaW9Ob2Rl
KEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZQogICAgICwgbV9idWZmZXJT
aXplKGJ1ZmZlclNpemUpCiAgICAgLCBtX2J1ZmZlclJlYWRXcml0ZUluZGV4KDApCiAgICAgLCBt
X2lzUmVxdWVzdE91dHN0YW5kaW5nKGZhbHNlKQorICAgICwgbV9udW1iZXJPZklucHV0Q2hhbm5l
bHMobnVtYmVyT2ZJbnB1dENoYW5uZWxzKQorICAgICwgbV9udW1iZXJPZk91dHB1dENoYW5uZWxz
KG51bWJlck9mT3V0cHV0Q2hhbm5lbHMpCisgICAgLCBtX2ludGVybmFsSW5wdXRCdXMobnVtYmVy
T2ZJbnB1dENoYW5uZWxzLCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMsIGZhbHNl
KQogewogICAgIC8vIFJlZ2FyZGxlc3Mgb2YgdGhlIGFsbG93ZWQgYnVmZmVyIHNpemVzLCB3ZSBz
dGlsbCBuZWVkIHRvIHByb2Nlc3MgYXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBBdWRpb05vZGUu
CiAgICAgaWYgKG1fYnVmZmVyU2l6ZSA8IEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1l
cykKICAgICAgICAgbV9idWZmZXJTaXplID0gQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJh
bWVzOwogCi0gICAgLy8gRklYTUU6IFdlIHN0aWxsIG5lZWQgdG8gaW1wbGVtZW50IG51bWJlck9m
SW5wdXRDaGFubmVscy4KLSAgICBBU1NFUlRfVU5VU0VEKG51bWJlck9mSW5wdXRDaGFubmVscywg
bnVtYmVyT2ZJbnB1dENoYW5uZWxzID4gMCk7CisgICAgQVNTRVJUKG51bWJlck9mSW5wdXRDaGFu
bmVscyA8PSBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSk7CiAKICAgICBhZGRJ
bnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKICAgICBhZGRPdXRwdXQo
YWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCBudW1iZXJPZk91dHB1dENoYW5uZWxz
KSkpOwpAQCAtMTA1LDggKzEwNywxMSBAQCB2b2lkIEphdmFTY3JpcHRBdWRpb05vZGU6OmluaXRp
YWxpemUoKQogICAgIC8vIENyZWF0ZSBkb3VibGUgYnVmZmVycyBvbiBib3RoIHRoZSBpbnB1dCBh
bmQgb3V0cHV0IHNpZGVzLgogICAgIC8vIFRoZXNlIEF1ZGlvQnVmZmVycyB3aWxsIGJlIGRpcmVj
dGx5IGFjY2Vzc2VkIGluIHRoZSBtYWluIHRocmVhZCBieSBKYXZhU2NyaXB0LgogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICAgICAgbV9pbnB1dEJ1ZmZlcnMuYXBw
ZW5kKEF1ZGlvQnVmZmVyOjpjcmVhdGUoMiwgYnVmZmVyU2l6ZSgpLCBzYW1wbGVSYXRlKSk7Ci0g
ICAgICAgIG1fb3V0cHV0QnVmZmVycy5hcHBlbmQoQXVkaW9CdWZmZXI6OmNyZWF0ZSh0aGlzLT5v
dXRwdXQoMCktPm51bWJlck9mQ2hhbm5lbHMoKSwgYnVmZmVyU2l6ZSgpLCBzYW1wbGVSYXRlKSk7
CisgICAgICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gaW5wdXRCdWZmZXIgPSBtX251bWJlck9mSW5w
dXRDaGFubmVscyA/IEF1ZGlvQnVmZmVyOjpjcmVhdGUobV9udW1iZXJPZklucHV0Q2hhbm5lbHMs
IGJ1ZmZlclNpemUoKSwgc2FtcGxlUmF0ZSkgOiAwOworICAgICAgICBSZWZQdHI8QXVkaW9CdWZm
ZXI+IG91dHB1dEJ1ZmZlciA9IG1fbnVtYmVyT2ZPdXRwdXRDaGFubmVscyA/IEF1ZGlvQnVmZmVy
OjpjcmVhdGUobV9udW1iZXJPZk91dHB1dENoYW5uZWxzLCBidWZmZXJTaXplKCksIHNhbXBsZVJh
dGUpIDogMDsKKworICAgICAgICBtX2lucHV0QnVmZmVycy5hcHBlbmQoaW5wdXRCdWZmZXIpOwor
ICAgICAgICBtX291dHB1dEJ1ZmZlcnMuYXBwZW5kKG91dHB1dEJ1ZmZlcik7CiAgICAgfQogCiAg
ICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7CkBAIC0xNTcsMzMgKzE2MiwyNCBAQCB2b2lkIEph
dmFTY3JpcHRBdWRpb05vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICBB
U1NFUlQoaXNGcmFtZXNUb1Byb2Nlc3NHb29kKTsKICAgICBpZiAoIWlzRnJhbWVzVG9Qcm9jZXNz
R29vZCkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZklu
cHV0Q2hhbm5lbHMgPSBpbnB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOworCisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzID0gbV9pbnRlcm5hbElucHV0QnVzLm51bWJlck9mQ2hh
bm5lbHMoKTsKICAgICB1bnNpZ25lZCBudW1iZXJPZk91dHB1dENoYW5uZWxzID0gb3V0cHV0QnVz
LT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgCi0gICAgYm9vbCBjaGFubmVsc0FyZUdvb2QgPSAo
bnVtYmVyT2ZJbnB1dENoYW5uZWxzID09IDEgfHwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzID09IDIp
OworCisgICAgYm9vbCBjaGFubmVsc0FyZUdvb2QgPSAobnVtYmVyT2ZJbnB1dENoYW5uZWxzID09
IG1fbnVtYmVyT2ZJbnB1dENoYW5uZWxzKSAmJiAobnVtYmVyT2ZPdXRwdXRDaGFubmVscyA9PSBt
X251bWJlck9mT3V0cHV0Q2hhbm5lbHMpOwogICAgIEFTU0VSVChjaGFubmVsc0FyZUdvb2QpOwog
ICAgIGlmICghY2hhbm5lbHNBcmVHb29kKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBm
bG9hdCogc291cmNlTCA9IGlucHV0QnVzLT5jaGFubmVsKDApLT5kYXRhKCk7Ci0gICAgY29uc3Qg
ZmxvYXQqIHNvdXJjZVIgPSBudW1iZXJPZklucHV0Q2hhbm5lbHMgPiAxID8gaW5wdXRCdXMtPmNo
YW5uZWwoMSktPmRhdGEoKSA6IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJl
ck9mSW5wdXRDaGFubmVsczsgaSsrKQorICAgICAgICBtX2ludGVybmFsSW5wdXRCdXMuc2V0Q2hh
bm5lbE1lbW9yeShpLCBpbnB1dEJ1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoaSktPmRhdGEoKSArIG1f
YnVmZmVyUmVhZFdyaXRlSW5kZXgsIGZyYW1lc1RvUHJvY2Vzcyk7CisKKyAgICBpZiAobnVtYmVy
T2ZJbnB1dENoYW5uZWxzKQorICAgICAgICBtX2ludGVybmFsSW5wdXRCdXMuY29weUZyb20oKmlu
cHV0QnVzKTsKIAotICAgIC8vIENvcHkgZnJvbSB0aGUgaW5wdXQgdG8gdGhlIGlucHV0IGJ1ZmZl
ci4gIFNlZSAiYnVmZmVyc0FyZUdvb2QiIGNoZWNrIGFib3ZlIGZvciBzYWZldHkuCi0gICAgc2l6
ZV90IGJ5dGVzVG9Db3B5ID0gc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc1RvUHJvY2VzczsKLSAgICBt
ZW1jcHkoaW5wdXRCdWZmZXItPmdldENoYW5uZWxEYXRhKDApLT5kYXRhKCkgKyBtX2J1ZmZlclJl
YWRXcml0ZUluZGV4LCBzb3VyY2VMLCBieXRlc1RvQ29weSk7Ci0gICAgCi0gICAgaWYgKG51bWJl
ck9mSW5wdXRDaGFubmVscyA9PSAyKQotICAgICAgICBtZW1jcHkoaW5wdXRCdWZmZXItPmdldENo
YW5uZWxEYXRhKDEpLT5kYXRhKCkgKyBtX2J1ZmZlclJlYWRXcml0ZUluZGV4LCBzb3VyY2VSLCBi
eXRlc1RvQ29weSk7Ci0gICAgZWxzZSBpZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxzID09IDEpIHsK
LSAgICAgICAgLy8gSWYgdGhlIGlucHV0IGlzIG1vbm8sIHRoZW4gYWxzbyBjb3B5IHRoZSBtb25v
IGlucHV0IHRvIHRoZSByaWdodCBjaGFubmVsIG9mIHRoZSBBdWRpb0J1ZmZlciB3aGljaCB0aGUg
QXVkaW9Qcm9jZXNzaW5nRXZlbnQgdXNlcy4KLSAgICAgICAgLy8gRklYTUU6IGl0IGlzIGxpa2Vs
eSB0aGUgYXVkaW8gQVBJIHdpbGwgZXZvbHZlIHRvIHByZXNlbnQgYW4gQXVkaW9CdWZmZXIgd2l0
aCB0aGUgc2FtZSBudW1iZXIgb2YgY2hhbm5lbHMgYXMgb3VyIGlucHV0LgotICAgICAgICBtZW1j
cHkoaW5wdXRCdWZmZXItPmdldENoYW5uZWxEYXRhKDEpLT5kYXRhKCkgKyBtX2J1ZmZlclJlYWRX
cml0ZUluZGV4LCBzb3VyY2VMLCBieXRlc1RvQ29weSk7Ci0gICAgfQotICAgIAogICAgIC8vIENv
cHkgZnJvbSB0aGUgb3V0cHV0IGJ1ZmZlciB0byB0aGUgb3V0cHV0LiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZPdXRwdXRDaGFubmVsczsgKytpKQotICAgICAgICBtZW1j
cHkob3V0cHV0QnVzLT5jaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpLCBvdXRwdXRCdWZmZXItPmdl
dENoYW5uZWxEYXRhKGkpLT5kYXRhKCkgKyBtX2J1ZmZlclJlYWRXcml0ZUluZGV4LCBieXRlc1Rv
Q29weSk7CisgICAgICAgIG1lbWNweShvdXRwdXRCdXMtPmNoYW5uZWwoaSktPm11dGFibGVEYXRh
KCksIG91dHB1dEJ1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoaSktPmRhdGEoKSArIG1fYnVmZmVyUmVh
ZFdyaXRlSW5kZXgsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOwogCiAgICAgLy8g
VXBkYXRlIHRoZSBidWZmZXJpbmcgaW5kZXguCiAgICAgbV9idWZmZXJSZWFkV3JpdGVJbmRleCA9
IChtX2J1ZmZlclJlYWRXcml0ZUluZGV4ICsgZnJhbWVzVG9Qcm9jZXNzKSAlIGJ1ZmZlclNpemUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlw
dEF1ZGlvTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0
QXVkaW9Ob2RlLmgKaW5kZXggYjk0MGUxYThkNWQ2YmM1NDI2OWRkZGU0NGRmNjJkZDkxMjNkZDY4
OC4uNDA5OGNmYzg5MjNjNzI4MDk2ZmQ1ZDU5MjdmNWQzN2NkZmE0ZmRlZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgK
QEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgSmF2YVNjcmlwdEF1ZGlvTm9kZV9oCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUg
IkF1ZGlvTm9kZS5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVu
dFRhcmdldC5oIgpAQCAtMTAxLDYgKzEwMiwxMSBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX2J1
ZmZlclNpemU7CiAgICAgdW5zaWduZWQgbV9idWZmZXJSZWFkV3JpdGVJbmRleDsKICAgICB2b2xh
dGlsZSBib29sIG1faXNSZXF1ZXN0T3V0c3RhbmRpbmc7CisKKyAgICB1bnNpZ25lZCBtX251bWJl
ck9mSW5wdXRDaGFubmVsczsKKyAgICB1bnNpZ25lZCBtX251bWJlck9mT3V0cHV0Q2hhbm5lbHM7
CisKKyAgICBBdWRpb0J1cyBtX2ludGVybmFsSW5wdXRCdXM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMWExNGE3ZDYzMzhkMTMzMGU2MDMwMjUwYzYzMzllNmU2YzU2ZGRh
Yy4uNTMzMzc3OWFlMGI0ZWUxMDY2ZTUzZDJhOWIxNmQ4MjUxOTY1MjIzNSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIxIEBACisyMDEyLTA0LTI3ICBYaW5nbmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwu
Y29tPgorCisgICAgICAgIEFkZCBtdWx0aWNoYW5uZWwgc3VwcG9ydCBmb3IgaW5wdXQgb2YgSmF2
YVNjcmlwdEF1ZGlvTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODQ2ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHdlYmF1ZGlvL2phdmFzY3JpcHRhdWRpb25vZGUtZG93bm1peDgtMmNoYW5uZWwt
aW5wdXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9qYXZhc2NyaXB0
YXVkaW9ub2RlLWRvd25taXg4LTJjaGFubmVsLWlucHV0Lmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL2phdmFzY3JpcHRhdWRpb25vZGUtdXBtaXgyLThjaGFubmVsLWlucHV0LWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vamF2YXNjcmlwdGF1ZGlvbm9kZS11
cG1peDItOGNoYW5uZWwtaW5wdXQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vcmVz
b3VyY2VzL2phdmFzY3JpcHRhdWRpb25vZGUtdGVzdGluZy5qczogQWRkZWQuCisgICAgICAgIChj
cmVhdGVCdWZmZXIpOgorICAgICAgICAocHJvY2Vzc0F1ZGlvRGF0YSk6CisgICAgICAgIChmaWxs
RGF0YSk6CisgICAgICAgIChjaGVja1N0ZXJlb09ubHlEYXRhKToKKyAgICAgICAgKHJ1bkpTTm9k
ZVRlc3QpOgorCiAyMDEyLTA0LTI2ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFNraXAgdGhlIG5ldyBPYmpDIHRlc3RzIGZvciBXZWJLaXQyCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9qYXZhc2NyaXB0YXVkaW9ub2RlLWRvd25taXg4
LTJjaGFubmVsLWlucHV0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2phdmFz
Y3JpcHRhdWRpb25vZGUtZG93bm1peDgtMmNoYW5uZWwtaW5wdXQtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjkyNjBlZGUwMjNlZjVjOTFhZjljNmIyNTU0MGUwZDQwYzA5NzZmMjIKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9qYXZhc2NyaXB0YXVkaW9ub2RlLWRvd25t
aXg4LTJjaGFubmVsLWlucHV0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1Rlc3RzIGRv
d25taXhpbmcgYW4gOC1jaGFubmVsIHNvdXJjZSBjb25uZWN0ZWQgdG8gYSBKYXZhU2NyaXB0QXVk
aW9Ob2RlIHdpdGggMi1jaGFubmVsIGlucHV0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKK1BBU1Mgb25hdWRpb3Byb2Nlc3Mgd2FzIGNhbGxlZCB3aXRoIGNvcnJlY3QgaW5wdXQgZGF0
YS4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9qYXZhc2NyaXB0YXVkaW9ub2RlLWRvd25t
aXg4LTJjaGFubmVsLWlucHV0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9qYXZhc2NyaXB0
YXVkaW9ub2RlLWRvd25taXg4LTJjaGFubmVsLWlucHV0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVhNWQz
MmViMmY1ODk1MTcyZjQyNjg3MGYxOWFhMzkxOWExYTcxOQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2phdmFzY3JpcHRhdWRpb25vZGUtZG93bm1peDgtMmNoYW5uZWwt
aW5wdXQuaHRtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJyZXNvdXJjZXMv
amF2YXNjcmlwdGF1ZGlvbm9kZS10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJv
ZHk+CisKKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIGRvd25taXhpbmcgYW4gOC1jaGFu
bmVsIHNvdXJjZSBjb25uZWN0ZWQgdG8gYSBKYXZhU2NyaXB0QXVkaW9Ob2RlIHdpdGggMi1jaGFu
bmVsIGlucHV0LiIpOworCit2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwLjA7Cit2YXIgc291cmNlQ2hh
bm5lbHMgPSA4OwordmFyIGlucHV0Q2hhbm5lbHMgPSAyOwordmFyIG91dHB1dENoYW5uZWxzID0g
NjsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAg
IHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgIHJ1bkpTTm9kZVRlc3QoKTsKK30K
KworcnVuVGVzdCgpOworCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9qYXZhc2NyaXB0YXVkaW9ub2RlLXVwbWl4Mi04
Y2hhbm5lbC1pbnB1dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9qYXZhc2Ny
aXB0YXVkaW9ub2RlLXVwbWl4Mi04Y2hhbm5lbC1pbnB1dC1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTE1NTBkNGYwYjE1MzM2NzRhOWQwMDY4NzUzNmJiNGZhZmE1MDgwOQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2phdmFzY3JpcHRhdWRpb25vZGUtdXBtaXgyLThj
aGFubmVsLWlucHV0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1Rlc3RzIHVwbWl4aW5n
IGEgMi1jaGFubmVsIHNvdXJjZSBjb25uZWN0ZWQgdG8gYSBKYXZhU2NyaXB0QXVkaW9Ob2RlIHdp
dGggOC1jaGFubmVsIGlucHV0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1Mg
b25hdWRpb3Byb2Nlc3Mgd2FzIGNhbGxlZCB3aXRoIGNvcnJlY3QgaW5wdXQgZGF0YS4KK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJhdWRpby9qYXZhc2NyaXB0YXVkaW9ub2RlLXVwbWl4Mi04Y2hhbm5l
bC1pbnB1dC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vamF2YXNjcmlwdGF1ZGlvbm9kZS11
cG1peDItOGNoYW5uZWwtaW5wdXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTdkYjBiYTdhNTg1NzczYjQ1
MmMyYmY1MjU1ZjE5M2Q2NmJhMzA3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vamF2YXNjcmlwdGF1ZGlvbm9kZS11cG1peDItOGNoYW5uZWwtaW5wdXQuaHRtbApAQCAt
MCwwICsxLDM5IEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJyZXNvdXJjZXMvamF2YXNjcmlwdGF1ZGlv
bm9kZS10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxkaXYgaWQ9
ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0
PgorZGVzY3JpcHRpb24oIlRlc3RzIHVwbWl4aW5nIGEgMi1jaGFubmVsIHNvdXJjZSBjb25uZWN0
ZWQgdG8gYSBKYXZhU2NyaXB0QXVkaW9Ob2RlIHdpdGggOC1jaGFubmVsIGlucHV0LiIpOworCit2
YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwLjA7Cit2YXIgc291cmNlQ2hhbm5lbHMgPSAyOwordmFyIGlu
cHV0Q2hhbm5lbHMgPSA4OwordmFyIG91dHB1dENoYW5uZWxzID0gNjsKKworZnVuY3Rpb24gcnVu
VGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKKworICAgIHJ1bkpTTm9kZVRlc3QoKTsKK30KKworcnVuVGVzdCgpOworCis8
L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJhdWRpby9yZXNvdXJjZXMvamF2YXNjcmlwdGF1ZGlvbm9kZS10ZXN0aW5nLmpzIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2phdmFzY3JpcHRhdWRpb25vZGUtdGVzdGluZy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xMTk3ODQ4OThhZmUwZWNiNjMyZDMwYmE4OTI3NTlhMDA5YzNiNTQ4Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2phdmFzY3Jp
cHRhdWRpb25vZGUtdGVzdGluZy5qcwpAQCAtMCwwICsxLDg0IEBACisvLyBGb3IgdGhlIGN1cnJl
bnQgaW1wbGVtZW50YXRpb24gb2YgSmF2YVNjcmlwdEF1ZGlvTm9kZSwgd2hlbiBpdCB3b3JrcyB3
aXRoIE9mZmxpbmVBdWRpb0NvbnRleHQgKHdoaWNoIHJ1bnMgbXVjaCBmYXN0ZXIKKy8vIHRoYW4g
cmVhbC10aW1lKSB0aGUgZXZlbnQuaW5wdXRCdWZmZXIgbWlnaHQgYmUgb3ZlcndyaXRlIGFnYWlu
IGJlZm9yZSBvbmF1ZGlvcHJvY2VzcyBldmVyIGdldCBjaGFuY2UgdG8gYmUgY2FsbGVkLgorLy8g
V2UgY2FyZWZ1bGx5IGFycmFuZ2UgdGhlIHJlbmRlckxlbmd0aEluRnJhbWVzIGFuZCBidWZmZXJT
aXplIHRvIGhhdmUgZXhhY3RseSB0aGUgc2FtZSB2YWx1ZSB0byBhdm9pZCB0aGlzIGlzc3VlLgor
dmFyIHJlbmRlckxlbmd0aEluRnJhbWVzID0gNTEyOwordmFyIGJ1ZmZlclNpemUgPSA1MTI7CisK
K3ZhciBjb250ZXh0OworCitmdW5jdGlvbiBjcmVhdGVCdWZmZXIoY29udGV4dCwgbnVtYmVyT2ZD
aGFubmVscywgbGVuZ3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVC
dWZmZXIobnVtYmVyT2ZDaGFubmVscywgbGVuZ3RoLCBzYW1wbGVSYXRlKTsKKworICAgIGZpbGxE
YXRhKGF1ZGlvQnVmZmVyLCBudW1iZXJPZkNoYW5uZWxzLCBhdWRpb0J1ZmZlci5sZW5ndGgpOwor
ICAgIHJldHVybiBhdWRpb0J1ZmZlcjsKK30KKworZnVuY3Rpb24gcHJvY2Vzc0F1ZGlvRGF0YShl
dmVudCkgeworICAgIGJ1ZmZlciA9IGV2ZW50Lm91dHB1dEJ1ZmZlcjsKKyAgICBpZiAoYnVmZmVy
Lm51bWJlck9mQ2hhbm5lbHMgIT0gb3V0cHV0Q2hhbm5lbHMpCisgICAgICAgIHRlc3RGYWlsZWQo
Im51bWJlck9mT3V0cHV0Q2hhbm5lbHMgZG9lc24ndCBtYXRjaCEiKTsKKworICAgIGlmIChidWZm
ZXIubGVuZ3RoICE9IGJ1ZmZlclNpemUpCisgICAgICAgIHRlc3RGYWlsZWQoImxlbmd0aCBvZiBi
dWZmZXIgZG9lc24ndCBtYXRjaCEiKTsKKworICAgIGJ1ZmZlciA9IGV2ZW50LmlucHV0QnVmZmVy
OworICAgIAorICAgIHZhciBzdWNjZXNzID0gY2hlY2tTdGVyZW9Pbmx5RGF0YShidWZmZXIsIGlu
cHV0Q2hhbm5lbHMsIGJ1ZmZlci5sZW5ndGgpOworCisgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAg
ICAgdGVzdFBhc3NlZCgib25hdWRpb3Byb2Nlc3Mgd2FzIGNhbGxlZCB3aXRoIGNvcnJlY3QgaW5w
dXQgZGF0YS4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJvbmF1ZGlvcHJv
Y2VzcyB3YXMgY2FsbGVkIHdpdGggd3JvbmcgaW5wdXQgZGF0YS4iKTsKKyAgICB9Cit9CisKK2Z1
bmN0aW9uIGZpbGxEYXRhKGJ1ZmZlciwgbnVtYmVyT2ZDaGFubmVscywgbGVuZ3RoKSB7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgdmFy
IGRhdGEgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoaSk7CisKKyAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBsZW5ndGg7ICsraikKKyAgICAgICAgICAgIGlmIChpIDwgMikKKyAgICAgICAgICAg
ICAgICBkYXRhW2pdID0gaSAqIDIgLSAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGRhdGFbal0gPSAwOworICAgIH0KK30KKworLy8gQm90aCAyIHRvIDggdXBtaXggYW5kIDgg
dG8gMiBkb3dubWl4IGFyZSBqdXN0IGRpcmVjdGx5IGNvcHkgdGhlIGZpcnN0IHR3byBjaGFubmVs
cyBhbmQgbGVmdCBjaGFubmVscyBhcmUgemVyb2VkLgorZnVuY3Rpb24gY2hlY2tTdGVyZW9Pbmx5
RGF0YShidWZmZXIsIG51bWJlck9mQ2hhbm5lbHMsIGxlbmd0aCkgeworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIHZhciBkYXRhID0gYnVm
ZmVyLmdldENoYW5uZWxEYXRhKGkpOworCisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVu
Z3RoOyArK2opIHsKKyAgICAgICAgICAgIGlmIChpIDwgMikgeworICAgICAgICAgICAgICAgIGlm
IChkYXRhW2pdICE9IGkgKiAyIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YVtqXSAhPSAw
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIHJ1bkpTTm9kZVRl
c3QoKQoreworICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgY29udGV4
dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgcmVuZGVyTGVuZ3RoSW5GcmFtZXMsIHNhbXBs
ZVJhdGUpOworCisgICAgdmFyIHNvdXJjZUJ1ZmZlciA9IGNyZWF0ZUJ1ZmZlcihjb250ZXh0LCBz
b3VyY2VDaGFubmVscywgcmVuZGVyTGVuZ3RoSW5GcmFtZXMpOworCisgICAgdmFyIGJ1ZmZlclNv
dXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgYnVmZmVyU291cmNlLmJ1
ZmZlciA9IHNvdXJjZUJ1ZmZlcjsKKworICAgIHZhciBqc25vZGUgPSBjb250ZXh0LmNyZWF0ZUph
dmFTY3JpcHROb2RlKGJ1ZmZlclNpemUsIGlucHV0Q2hhbm5lbHMsIG91dHB1dENoYW5uZWxzKTsK
KworICAgIGJ1ZmZlclNvdXJjZS5jb25uZWN0KGpzbm9kZSk7CisgICAganNub2RlLmNvbm5lY3Qo
Y29udGV4dC5kZXN0aW5hdGlvbik7CisgICAganNub2RlLm9uYXVkaW9wcm9jZXNzID0gcHJvY2Vz
c0F1ZGlvRGF0YTsKKworICAgIGJ1ZmZlclNvdXJjZS5ub3RlT24oMCk7CisgICAgY29udGV4dC5v
bmNvbXBsZXRlID0gZmluaXNoSlNUZXN0OworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsK
K30K
</data>

          </attachment>
      

    </bug>

</bugzilla>