<?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>46527</bug_id>
          
          <creation_ts>2010-09-24 15:24:01 -0700</creation_ts>
          <short_desc>Add BiquadProcessor files</short_desc>
          <delta_ts>2010-10-05 00:59:33 -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>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jamesr</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kbr</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>284760</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-24 15:24:01 -0700</bug_when>
    <thetext>Add BiquadProcessor files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284763</commentid>
    <comment_count>1</comment_count>
      <attachid>68769</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-24 15:25:42 -0700</bug_when>
    <thetext>Created attachment 68769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288501</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-10-01 14:51:37 -0700</bug_when>
    <thetext>BiquadProcessor is used by the various filter AudioNode objects such as LowPass2FilterNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289154</commentid>
    <comment_count>3</comment_count>
      <attachid>68769</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-10-04 14:40:52 -0700</bug_when>
    <thetext>Comment on attachment 68769
Patch

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

Several issues. Also please update the license text per offline discussion.

&gt; WebCore/webaudio/BiquadProcessor.cpp:58
&gt; +        m_parameter3 = AudioParam::create(&quot;unused&quot;, 0.0, 0.0, 1.0);

These are the same parameters as LowPass2. Something looks wrong.

&gt; WebCore/webaudio/BiquadProcessor.cpp:68
&gt; +        m_parameter3 = AudioParam::create(&quot;unused&quot;, 0.0, 0.0, 1.0);

These parameters look the same as those for Peaking aside from m_parameter3 being &quot;unused&quot; instead of &quot;gain&quot;. I don&apos;t know what the right values should be but please double-check both.

&gt; WebCore/webaudio/BiquadProcessor.cpp:73
&gt; +        m_parameter3 = AudioParam::create(&quot;unused&quot;, 0.0, 0.0, 1.0);

Two assignments to m_parameter3 and none to m_parameter2.

&gt; WebCore/webaudio/BiquadProcessor.cpp:78
&gt; +        m_parameter3 = AudioParam::create(&quot;unused&quot;, 0.0, 0.0, 1.0);

Two assignments to m_parameter3 and none to m_parameter2.

&gt; WebCore/webaudio/BiquadProcessor.h:65
&gt; +    AudioParam&amp; parameter3() { return *m_parameter3; }

Especially since subclasses take the addresses of these references, I think you should return pointers here. You can indicate in the documentation that the BiquadProcessor owns the storage for the parameters.

&gt; WebCore/webaudio/BiquadProcessor.h:70
&gt; +    FilterType m_type; // lowpass, highpass, etc.

As many of these protected fields should be made private as possible. Also, this comment is unnecessary because the FilterType enum is self-documenting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289246</commentid>
    <comment_count>4</comment_count>
      <attachid>69707</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-10-04 15:56:47 -0700</bug_when>
    <thetext>Created attachment 69707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289249</commentid>
    <comment_count>5</comment_count>
      <attachid>68769</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-10-04 16:01:03 -0700</bug_when>
    <thetext>Comment on attachment 68769
Patch

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

Also updated LICENSE

&gt;&gt; WebCore/webaudio/BiquadProcessor.cpp:58
&gt;&gt; +        m_parameter3 = AudioParam::create(&quot;unused&quot;, 0.0, 0.0, 1.0);
&gt; 
&gt; These are the same parameters as LowPass2. Something looks wrong.

This should be OK.  They do have the same parameters.

&gt;&gt; WebCore/webaudio/BiquadProcessor.cpp:68
&gt;&gt; +        m_parameter3 = AudioParam::create(&quot;unused&quot;, 0.0, 0.0, 1.0);
&gt; 
&gt; These parameters look the same as those for Peaking aside from m_parameter3 being &quot;unused&quot; instead of &quot;gain&quot;. I don&apos;t know what the right values should be but please double-check both.

Yes, these ones were not quite right.  I&apos;ve fixed peaking to use the standard three parameters: frequency, gain, Q
and for Allpass: frequency, Q

&gt;&gt; WebCore/webaudio/BiquadProcessor.cpp:73
&gt;&gt; +        m_parameter3 = AudioParam::create(&quot;unused&quot;, 0.0, 0.0, 1.0);
&gt; 
&gt; Two assignments to m_parameter3 and none to m_parameter2.

FIXED

&gt;&gt; WebCore/webaudio/BiquadProcessor.cpp:78
&gt;&gt; +        m_parameter3 = AudioParam::create(&quot;unused&quot;, 0.0, 0.0, 1.0);
&gt; 
&gt; Two assignments to m_parameter3 and none to m_parameter2.

FIXED

&gt;&gt; WebCore/webaudio/BiquadProcessor.h:65
&gt;&gt; +    AudioParam&amp; parameter3() { return *m_parameter3; }
&gt; 
&gt; Especially since subclasses take the addresses of these references, I think you should return pointers here. You can indicate in the documentation that the BiquadProcessor owns the storage for the parameters.

FIXED

&gt;&gt; WebCore/webaudio/BiquadProcessor.h:70
&gt;&gt; +    FilterType m_type; // lowpass, highpass, etc.
&gt; 
&gt; As many of these protected fields should be made private as possible. Also, this comment is unnecessary because the FilterType enum is self-documenting.

All made private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289262</commentid>
    <comment_count>6</comment_count>
      <attachid>69707</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-10-04 16:10:44 -0700</bug_when>
    <thetext>Comment on attachment 69707
Patch

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

Thanks for addressing the earlier review feedback. One more issue.

&gt; WebCore/webaudio/BiquadProcessor.cpp:51
&gt; +    case HighPass2:

Since it sounds like these share the same coefficients and how the biquad processor is set up (for a low-pass vs. high-pass filter) is handled at a lower level, please fold these two switch arms together and consider adding a comment that they share the same parameter values, only differing in type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289299</commentid>
    <comment_count>7</comment_count>
      <attachid>69720</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-10-04 16:47:57 -0700</bug_when>
    <thetext>Created attachment 69720
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289300</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-10-04 16:48:47 -0700</bug_when>
    <thetext>FIXED last nit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289302</commentid>
    <comment_count>9</comment_count>
      <attachid>69720</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-10-04 16:49:40 -0700</bug_when>
    <thetext>Comment on attachment 69720
Patch

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289481</commentid>
    <comment_count>10</comment_count>
      <attachid>69720</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-05 00:59:27 -0700</bug_when>
    <thetext>Comment on attachment 69720
Patch

Clearing flags on attachment: 69720

Committed r69091: &lt;http://trac.webkit.org/changeset/69091&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289482</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-05 00:59:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68769</attachid>
            <date>2010-09-24 15:25:42 -0700</date>
            <delta_ts>2010-10-04 16:01:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46527-20100924152541.patch</filename>
            <type>text/plain</type>
            <size>10155</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODMwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMDktMjQgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgQmlxdWFkUHJvY2Vzc29yIGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NjUyNworCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSBhdWRp
byBBUEkgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIHdlYmF1ZGlvL0JpcXVh
ZFByb2Nlc3Nvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkUHJvY2Vzc29y
OjpCaXF1YWRQcm9jZXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkUHJvY2Vzc29yOjp+
QmlxdWFkUHJvY2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZFByb2Nlc3Nvcjo6Y3Jl
YXRlS2VybmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZFByb2Nlc3Nvcjo6cHJvY2Vzcyk6
CisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlxdWFkUHJvY2Vzc29yOjpmaWx0ZXJDb2VmZmljaWVudHNEaXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXF1YWRQcm9jZXNzb3I6OnBhcmFtZXRlcjEpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlxdWFkUHJvY2Vzc29yOjpwYXJhbWV0ZXIyKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
cXVhZFByb2Nlc3Nvcjo6cGFyYW1ldGVyMyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRQcm9j
ZXNzb3I6OnR5cGUpOgorCiAyMDEwLTA5LTI0ICBMdWl6IEFnb3N0aW5pICA8bHVpei5hZ29zdGlu
aUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hy
aXN0aWFuc2VuLgpJbmRleDogV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
V0VCX0FVRElPKQorCisjaW5jbHVkZSAiQmlxdWFkUHJvY2Vzc29yLmgiCisKKyNpbmNsdWRlICJC
aXF1YWREU1BLZXJuZWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCaXF1YWRQcm9jZXNz
b3I6OkJpcXVhZFByb2Nlc3NvcihGaWx0ZXJUeXBlIHR5cGUsIGRvdWJsZSBzYW1wbGVSYXRlLCBz
aXplX3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCBhdXRvSW5pdGlhbGl6ZSkKKyAgICA6IEF1ZGlv
RFNQS2VybmVsUHJvY2Vzc29yKHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCisgICAgLCBt
X3R5cGUodHlwZSkKKyAgICAsIG1fcGFyYW1ldGVyMSgwKQorICAgICwgbV9wYXJhbWV0ZXIyKDAp
CisgICAgLCBtX3BhcmFtZXRlcjMoMCkKKyAgICAsIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHko
dHJ1ZSkKK3sKKyAgICBkb3VibGUgbnlxdWlzdCA9IDAuNSAqIHRoaXMtPnNhbXBsZVJhdGUoKTsK
KyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIExvd1Bhc3MyOgorICAgICAgICBt
X3BhcmFtZXRlcjEgPSBBdWRpb1BhcmFtOjpjcmVhdGUoImZyZXF1ZW5jeSIsIDM1MC4wLCAyMC4w
LCBueXF1aXN0KTsKKyAgICAgICAgbV9wYXJhbWV0ZXIyID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJy
ZXNvbmFuY2UiLCAwLjAsIC0yMC4wLCAyMC4wKTsKKyAgICAgICAgbV9wYXJhbWV0ZXIzID0gQXVk
aW9QYXJhbTo6Y3JlYXRlKCJ1bnVzZWQiLCAwLjAsIDAuMCwgMS4wKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBIaWdoUGFzczI6CisgICAgICAgIG1fcGFyYW1ldGVyMSA9IEF1ZGlvUGFyYW06
OmNyZWF0ZSgiZnJlcXVlbmN5IiwgMzUwLjAsIDIwLjAsIG55cXVpc3QpOworICAgICAgICBtX3Bh
cmFtZXRlcjIgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInJlc29uYW5jZSIsIDAuMCwgLTIwLjAsIDIw
LjApOworICAgICAgICBtX3BhcmFtZXRlcjMgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInVudXNlZCIs
IDAuMCwgMC4wLCAxLjApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBlYWtpbmc6CisgICAg
ICAgIG1fcGFyYW1ldGVyMSA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZnJlcXVlbmN5IiwgMjUwMC4w
LCAyMC4wLCBueXF1aXN0KTsKKyAgICAgICAgbV9wYXJhbWV0ZXIyID0gQXVkaW9QYXJhbTo6Y3Jl
YXRlKCJyZXNvbmFuY2UiLCAwLjAsIC0yMC4wLCAyMC4wKTsKKyAgICAgICAgbV9wYXJhbWV0ZXIz
ID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJnYWluIiwgMC4wLCAwLjAsIDEuMCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWxscGFzczoKKyAgICAgICAgbV9wYXJhbWV0ZXIxID0gQXVkaW9QYXJh
bTo6Y3JlYXRlKCJmcmVxdWVuY3kiLCAyNTAwLjAsIDIwLjAsIG55cXVpc3QpOworICAgICAgICBt
X3BhcmFtZXRlcjIgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInJlc29uYW5jZSIsIDAuMCwgLTIwLjAs
IDIwLjApOworICAgICAgICBtX3BhcmFtZXRlcjMgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInVudXNl
ZCIsIDAuMCwgMC4wLCAxLjApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExvd1NoZWxmOgor
ICAgICAgICBtX3BhcmFtZXRlcjEgPSBBdWRpb1BhcmFtOjpjcmVhdGUoImZyZXF1ZW5jeSIsIDgw
LjAsIDIwLjAsIG55cXVpc3QpOworICAgICAgICBtX3BhcmFtZXRlcjMgPSBBdWRpb1BhcmFtOjpj
cmVhdGUoImdhaW4iLCAwLjAsIDAuMCwgMS4wKTsKKyAgICAgICAgbV9wYXJhbWV0ZXIzID0gQXVk
aW9QYXJhbTo6Y3JlYXRlKCJ1bnVzZWQiLCAwLjAsIDAuMCwgMS4wKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBIaWdoU2hlbGY6CisgICAgICAgIG1fcGFyYW1ldGVyMSA9IEF1ZGlvUGFyYW06
OmNyZWF0ZSgiZnJlcXVlbmN5IiwgMTAwMDAuMCwgMjAuMCwgbnlxdWlzdCk7CisgICAgICAgIG1f
cGFyYW1ldGVyMyA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZ2FpbiIsIDAuMCwgMC4wLCAxLjApOwor
ICAgICAgICBtX3BhcmFtZXRlcjMgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInVudXNlZCIsIDAuMCwg
MC4wLCAxLjApOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoYXV0b0luaXRpYWxp
emUpCisgICAgICAgIGluaXRpYWxpemUoKTsKK30KKworQmlxdWFkUHJvY2Vzc29yOjp+QmlxdWFk
UHJvY2Vzc29yKCkKK3sKKyAgICBpZiAoaXNJbml0aWFsaXplZCgpKQorICAgICAgICB1bmluaXRp
YWxpemUoKTsKK30KKworUGFzc093blB0cjxBdWRpb0RTUEtlcm5lbD4gQmlxdWFkUHJvY2Vzc29y
OjpjcmVhdGVLZXJuZWwoKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQmlxdWFkRFNQS2Vy
bmVsKHRoaXMpKTsKK30KKwordm9pZCBCaXF1YWRQcm9jZXNzb3I6OnByb2Nlc3MoQXVkaW9CdXMq
IHNvdXJjZSwgQXVkaW9CdXMqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQor
eworICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uLT56ZXJv
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIC8vIERlYWwgd2l0aCBz
bW9vdGhpbmcgLyBkZS16aXBwZXJpbmcuICBTdGFydCBvdXQgYXNzdW1pbmcgZmlsdGVyIHBhcmFt
ZXRlcnMgYXJlIG5vdCBjaGFuZ2luZy4KKyAgICAvLyBUaGUgQmlxdWFkRFNQS2VybmVsIG9iamVj
dHMgcmVseSBvbiB0aGlzIHZhbHVlIHRvIHNlZSBpZiB0aGV5IG5lZWQgdG8gcmUtY29tcHV0ZSB0
aGVpciBpbnRlcm5hbCBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgIG1fZmlsdGVyQ29lZmZpY2ll
bnRzRGlydHkgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9oYXNKdXN0UmVzZXQpIHsKKyAgICAg
ICAgLy8gU25hcCB0byBleGFjdCB2YWx1ZXMgZmlyc3QgdGltZSBhZnRlciByZXNldCwgdGhlbiBz
bW9vdGggZm9yIHN1YnNlcXVlbnQgY2hhbmdlcy4KKyAgICAgICAgbV9wYXJhbWV0ZXIxLT5yZXNl
dFNtb290aGVkVmFsdWUoKTsKKyAgICAgICAgbV9wYXJhbWV0ZXIyLT5yZXNldFNtb290aGVkVmFs
dWUoKTsKKyAgICAgICAgbV9wYXJhbWV0ZXIzLT5yZXNldFNtb290aGVkVmFsdWUoKTsKKyAgICAg
ICAgbV9maWx0ZXJDb2VmZmljaWVudHNEaXJ0eSA9IHRydWU7CisgICAgICAgIG1faGFzSnVzdFJl
c2V0ID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU21vb3RoIGFsbCBvZiB0aGUg
ZmlsdGVyIHBhcmFtZXRlcnMuICBJZiB0aGV5IGhhdmVuJ3QgeWV0IGNvbnZlcmdlZCB0byB0aGVp
ciB0YXJnZXQgdmFsdWUgdGhlbiBtYXJrIGNvZWZmaWNpZW50cyBhcyBkaXJ0eS4KKyAgICAgICAg
Ym9vbCBpc1N0YWJsZTEgPSBtX3BhcmFtZXRlcjEtPnNtb290aCgpOworICAgICAgICBib29sIGlz
U3RhYmxlMiA9IG1fcGFyYW1ldGVyMi0+c21vb3RoKCk7CisgICAgICAgIGJvb2wgaXNTdGFibGUz
ID0gbV9wYXJhbWV0ZXIzLT5zbW9vdGgoKTsKKyAgICAgICAgaWYgKCEoaXNTdGFibGUxICYmIGlz
U3RhYmxlMiAmJiBpc1N0YWJsZTMpKQorICAgICAgICAgICAgbV9maWx0ZXJDb2VmZmljaWVudHNE
aXJ0eSA9IHRydWU7CisgICAgfQorICAgICAgICAKKyAgICAvLyBGb3IgZWFjaCBjaGFubmVsIG9m
IG91ciBpbnB1dCwgcHJvY2VzcyB1c2luZyB0aGUgY29ycmVzcG9uZGluZyBCaXF1YWREU1BLZXJu
ZWwgaW50byB0aGUgb3V0cHV0IGNoYW5uZWwuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fa2VybmVscy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9rZXJuZWxzW2ldLT5wcm9jZXNzKHNv
dXJjZS0+Y2hhbm5lbChpKS0+ZGF0YSgpLCBkZXN0aW5hdGlvbi0+Y2hhbm5lbChpKS0+ZGF0YSgp
LCBmcmFtZXNUb1Byb2Nlc3MpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9j
ZXNzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmlxdWFkUHJvY2Vzc29yX2gKKyNk
ZWZpbmUgQmlxdWFkUHJvY2Vzc29yX2gKKworI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsLmgiCisj
aW5jbHVkZSAiQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuaCIKKyNpbmNsdWRlICJBdWRpb05vZGUu
aCIKKyNpbmNsdWRlICJBdWRpb1BhcmFtLmgiCisjaW5jbHVkZSAiQmlxdWFkLmgiCisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEJpcXVhZFByb2Nl
c3NvciBpcyBhbiBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvciB3aGljaCB1c2VzIEJpcXVhZCBvYmpl
Y3RzIHRvIGltcGxlbWVudCBzZXZlcmFsIGNvbW1vbiBmaWx0ZXJzLgorCitjbGFzcyBCaXF1YWRQ
cm9jZXNzb3IgOiBwdWJsaWMgQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IgeworcHVibGljOgorICAg
IGVudW0gRmlsdGVyVHlwZSB7CisgICAgICAgIExvd1Bhc3MyLAorICAgICAgICBIaWdoUGFzczIs
CisgICAgICAgIFBlYWtpbmcsCisgICAgICAgIEFsbHBhc3MsCisgICAgICAgIExvd1NoZWxmLAor
ICAgICAgICBIaWdoU2hlbGYKKyAgICB9OworICAgIAorICAgIEJpcXVhZFByb2Nlc3NvcihGaWx0
ZXJUeXBlLCBkb3VibGUgc2FtcGxlUmF0ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wg
YXV0b0luaXRpYWxpemUgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIH5CaXF1YWRQcm9jZXNzb3IoKTsK
KyAgICAKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8QXVkaW9EU1BLZXJuZWw+IGNyZWF0ZUtlcm5l
bCgpOworICAgICAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhBdWRpb0J1cyogc291cmNl
LCBBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOworCisgICAg
Ym9vbCBmaWx0ZXJDb2VmZmljaWVudHNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyQ29l
ZmZpY2llbnRzRGlydHk7IH0KKworICAgIEF1ZGlvUGFyYW0mIHBhcmFtZXRlcjEoKSB7IHJldHVy
biAqbV9wYXJhbWV0ZXIxOyB9CisgICAgQXVkaW9QYXJhbSYgcGFyYW1ldGVyMigpIHsgcmV0dXJu
ICptX3BhcmFtZXRlcjI7IH0KKyAgICBBdWRpb1BhcmFtJiBwYXJhbWV0ZXIzKCkgeyByZXR1cm4g
Km1fcGFyYW1ldGVyMzsgfQorCisgICAgRmlsdGVyVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBGaWx0ZXJUeXBlIG1fdHlwZTsgLy8gbG93cGFz
cywgaGlnaHBhc3MsIGV0Yy4KKworICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX3BhcmFtZXRlcjE7
CisgICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1fcGFyYW1ldGVyMjsKKyAgICBSZWZQdHI8QXVkaW9Q
YXJhbT4gbV9wYXJhbWV0ZXIzOworCisgICAgLy8gc28gRFNQIGtlcm5lbHMga25vdyB3aGVuIHRv
IHJlLWNvbXB1dGUgY29lZmZpY2llbnRzCisgICAgYm9vbCBtX2ZpbHRlckNvZWZmaWNpZW50c0Rp
cnR5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmlxdWFkUHJv
Y2Vzc29yX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69707</attachid>
            <date>2010-10-04 15:56:47 -0700</date>
            <delta_ts>2010-10-04 16:47:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46527-20101004155646.patch</filename>
            <type>text/plain</type>
            <size>9669</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTA0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMTAtMDQgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgQmlxdWFkUHJvY2Vzc29yIGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NjUyNworCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSBhdWRp
byBBUEkgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIHdlYmF1ZGlvL0JpcXVh
ZFByb2Nlc3Nvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkUHJvY2Vzc29y
OjpCaXF1YWRQcm9jZXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkUHJvY2Vzc29yOjp+
QmlxdWFkUHJvY2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZFByb2Nlc3Nvcjo6Y3Jl
YXRlS2VybmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZFByb2Nlc3Nvcjo6cHJvY2Vzcyk6
CisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlxdWFkUHJvY2Vzc29yOjpmaWx0ZXJDb2VmZmljaWVudHNEaXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXF1YWRQcm9jZXNzb3I6OnBhcmFtZXRlcjEpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlxdWFkUHJvY2Vzc29yOjpwYXJhbWV0ZXIyKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
cXVhZFByb2Nlc3Nvcjo6cGFyYW1ldGVyMyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRQcm9j
ZXNzb3I6OnR5cGUpOgorCiAyMDEwLTEwLTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogV2ViQ29yZS93
ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd2ViYXVk
aW8vQmlxdWFkUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd2ViYXVkaW8v
QmlxdWFkUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisj
aW5jbHVkZSAiQmlxdWFkUHJvY2Vzc29yLmgiCisKKyNpbmNsdWRlICJCaXF1YWREU1BLZXJuZWwu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCaXF1YWRQcm9jZXNzb3I6OkJpcXVhZFByb2Nl
c3NvcihGaWx0ZXJUeXBlIHR5cGUsIGRvdWJsZSBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZD
aGFubmVscywgYm9vbCBhdXRvSW5pdGlhbGl6ZSkKKyAgICA6IEF1ZGlvRFNQS2VybmVsUHJvY2Vz
c29yKHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCisgICAgLCBtX3R5cGUodHlwZSkKKyAg
ICAsIG1fcGFyYW1ldGVyMSgwKQorICAgICwgbV9wYXJhbWV0ZXIyKDApCisgICAgLCBtX3BhcmFt
ZXRlcjMoMCkKKyAgICAsIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHkodHJ1ZSkKK3sKKyAgICBk
b3VibGUgbnlxdWlzdCA9IDAuNSAqIHRoaXMtPnNhbXBsZVJhdGUoKTsKKyAgICAKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIExvd1Bhc3MyOgorICAgICAgICBtX3BhcmFtZXRlcjEgPSBB
dWRpb1BhcmFtOjpjcmVhdGUoImZyZXF1ZW5jeSIsIDM1MC4wLCAyMC4wLCBueXF1aXN0KTsKKyAg
ICAgICAgbV9wYXJhbWV0ZXIyID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJyZXNvbmFuY2UiLCAwLjAs
IC0yMC4wLCAyMC4wKTsKKyAgICAgICAgbV9wYXJhbWV0ZXIzID0gQXVkaW9QYXJhbTo6Y3JlYXRl
KCJ1bnVzZWQiLCAwLjAsIDAuMCwgMS4wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBIaWdo
UGFzczI6CisgICAgICAgIG1fcGFyYW1ldGVyMSA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZnJlcXVl
bmN5IiwgMzUwLjAsIDIwLjAsIG55cXVpc3QpOworICAgICAgICBtX3BhcmFtZXRlcjIgPSBBdWRp
b1BhcmFtOjpjcmVhdGUoInJlc29uYW5jZSIsIDAuMCwgLTIwLjAsIDIwLjApOworICAgICAgICBt
X3BhcmFtZXRlcjMgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInVudXNlZCIsIDAuMCwgMC4wLCAxLjAp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBlYWtpbmc6CisgICAgICAgIG1fcGFyYW1ldGVy
MSA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZnJlcXVlbmN5IiwgMjUwMC4wLCAyMC4wLCBueXF1aXN0
KTsKKyAgICAgICAgbV9wYXJhbWV0ZXIyID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJnYWluIiwgMC4w
LCAtMjAuMCwgMjAuMCk7CisgICAgICAgIG1fcGFyYW1ldGVyMyA9IEF1ZGlvUGFyYW06OmNyZWF0
ZSgiUSIsIDAuNSwgMC4wLCAxMDAwLjApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFsbHBh
c3M6CisgICAgICAgIG1fcGFyYW1ldGVyMSA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZnJlcXVlbmN5
IiwgMjUwMC4wLCAyMC4wLCBueXF1aXN0KTsKKyAgICAgICAgbV9wYXJhbWV0ZXIyID0gQXVkaW9Q
YXJhbTo6Y3JlYXRlKCJRIiwgMC41LCAwLjAsIDEwMDAuMCk7CisgICAgICAgIG1fcGFyYW1ldGVy
MyA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgidW51c2VkIiwgMC4wLCAwLjAsIDEuMCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTG93U2hlbGY6CisgICAgICAgIG1fcGFyYW1ldGVyMSA9IEF1ZGlv
UGFyYW06OmNyZWF0ZSgiZnJlcXVlbmN5IiwgODAuMCwgMjAuMCwgbnlxdWlzdCk7CisgICAgICAg
IG1fcGFyYW1ldGVyMiA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZ2FpbiIsIDAuMCwgMC4wLCAxLjAp
OworICAgICAgICBtX3BhcmFtZXRlcjMgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInVudXNlZCIsIDAu
MCwgMC4wLCAxLjApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEhpZ2hTaGVsZjoKKyAgICAg
ICAgbV9wYXJhbWV0ZXIxID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJmcmVxdWVuY3kiLCAxMDAwMC4w
LCAyMC4wLCBueXF1aXN0KTsKKyAgICAgICAgbV9wYXJhbWV0ZXIyID0gQXVkaW9QYXJhbTo6Y3Jl
YXRlKCJnYWluIiwgMC4wLCAwLjAsIDEuMCk7CisgICAgICAgIG1fcGFyYW1ldGVyMyA9IEF1ZGlv
UGFyYW06OmNyZWF0ZSgidW51c2VkIiwgMC4wLCAwLjAsIDEuMCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGlmIChhdXRvSW5pdGlhbGl6ZSkKKyAgICAgICAgaW5pdGlhbGl6ZSgpOwor
fQorCitCaXF1YWRQcm9jZXNzb3I6On5CaXF1YWRQcm9jZXNzb3IoKQoreworICAgIGlmIChpc0lu
aXRpYWxpemVkKCkpCisgICAgICAgIHVuaW5pdGlhbGl6ZSgpOworfQorCitQYXNzT3duUHRyPEF1
ZGlvRFNQS2VybmVsPiBCaXF1YWRQcm9jZXNzb3I6OmNyZWF0ZUtlcm5lbCgpCit7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBCaXF1YWREU1BLZXJuZWwodGhpcykpOworfQorCit2b2lkIEJpcXVh
ZFByb2Nlc3Nvcjo6cHJvY2VzcyhBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRp
b24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkp
IHsKKyAgICAgICAgZGVzdGluYXRpb24tPnplcm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAgICAgCisgICAgLy8gRGVhbCB3aXRoIHNtb290aGluZyAvIGRlLXppcHBlcmluZy4gIFN0
YXJ0IG91dCBhc3N1bWluZyBmaWx0ZXIgcGFyYW1ldGVycyBhcmUgbm90IGNoYW5naW5nLgorICAg
IC8vIFRoZSBCaXF1YWREU1BLZXJuZWwgb2JqZWN0cyByZWx5IG9uIHRoaXMgdmFsdWUgdG8gc2Vl
IGlmIHRoZXkgbmVlZCB0byByZS1jb21wdXRlIHRoZWlyIGludGVybmFsIGZpbHRlciBjb2VmZmlj
aWVudHMuCisgICAgbV9maWx0ZXJDb2VmZmljaWVudHNEaXJ0eSA9IGZhbHNlOworICAgIAorICAg
IGlmIChtX2hhc0p1c3RSZXNldCkgeworICAgICAgICAvLyBTbmFwIHRvIGV4YWN0IHZhbHVlcyBm
aXJzdCB0aW1lIGFmdGVyIHJlc2V0LCB0aGVuIHNtb290aCBmb3Igc3Vic2VxdWVudCBjaGFuZ2Vz
LgorICAgICAgICBtX3BhcmFtZXRlcjEtPnJlc2V0U21vb3RoZWRWYWx1ZSgpOworICAgICAgICBt
X3BhcmFtZXRlcjItPnJlc2V0U21vb3RoZWRWYWx1ZSgpOworICAgICAgICBtX3BhcmFtZXRlcjMt
PnJlc2V0U21vb3RoZWRWYWx1ZSgpOworICAgICAgICBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5
ID0gdHJ1ZTsKKyAgICAgICAgbV9oYXNKdXN0UmVzZXQgPSBmYWxzZTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBTbW9vdGggYWxsIG9mIHRoZSBmaWx0ZXIgcGFyYW1ldGVycy4gIElmIHRoZXkg
aGF2ZW4ndCB5ZXQgY29udmVyZ2VkIHRvIHRoZWlyIHRhcmdldCB2YWx1ZSB0aGVuIG1hcmsgY29l
ZmZpY2llbnRzIGFzIGRpcnR5LgorICAgICAgICBib29sIGlzU3RhYmxlMSA9IG1fcGFyYW1ldGVy
MS0+c21vb3RoKCk7CisgICAgICAgIGJvb2wgaXNTdGFibGUyID0gbV9wYXJhbWV0ZXIyLT5zbW9v
dGgoKTsKKyAgICAgICAgYm9vbCBpc1N0YWJsZTMgPSBtX3BhcmFtZXRlcjMtPnNtb290aCgpOwor
ICAgICAgICBpZiAoIShpc1N0YWJsZTEgJiYgaXNTdGFibGUyICYmIGlzU3RhYmxlMykpCisgICAg
ICAgICAgICBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5ID0gdHJ1ZTsKKyAgICB9CisgICAgICAg
IAorICAgIC8vIEZvciBlYWNoIGNoYW5uZWwgb2Ygb3VyIGlucHV0LCBwcm9jZXNzIHVzaW5nIHRo
ZSBjb3JyZXNwb25kaW5nIEJpcXVhZERTUEtlcm5lbCBpbnRvIHRoZSBvdXRwdXQgY2hhbm5lbC4K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9rZXJuZWxzLnNpemUoKTsgKytpKQorICAg
ICAgICBtX2tlcm5lbHNbaV0tPnByb2Nlc3Moc291cmNlLT5jaGFubmVsKGkpLT5kYXRhKCksIGRl
c3RpbmF0aW9uLT5jaGFubmVsKGkpLT5kYXRhKCksIGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4
OiBXZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dl
YmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBCaXF1YWRQcm9jZXNzb3JfaAorI2RlZmluZSBCaXF1YWRQcm9j
ZXNzb3JfaAorCisjaW5jbHVkZSAiQXVkaW9EU1BLZXJuZWwuaCIKKyNpbmNsdWRlICJBdWRpb0RT
UEtlcm5lbFByb2Nlc3Nvci5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgorI2luY2x1ZGUgIkF1
ZGlvUGFyYW0uaCIKKyNpbmNsdWRlICJCaXF1YWQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQmlxdWFkUHJvY2Vzc29yIGlzIGFuIEF1ZGlv
RFNQS2VybmVsUHJvY2Vzc29yIHdoaWNoIHVzZXMgQmlxdWFkIG9iamVjdHMgdG8gaW1wbGVtZW50
IHNldmVyYWwgY29tbW9uIGZpbHRlcnMuCisKK2NsYXNzIEJpcXVhZFByb2Nlc3NvciA6IHB1Ymxp
YyBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvciB7CitwdWJsaWM6CisgICAgZW51bSBGaWx0ZXJUeXBl
IHsKKyAgICAgICAgTG93UGFzczIsCisgICAgICAgIEhpZ2hQYXNzMiwKKyAgICAgICAgUGVha2lu
ZywKKyAgICAgICAgQWxscGFzcywKKyAgICAgICAgTG93U2hlbGYsCisgICAgICAgIEhpZ2hTaGVs
ZgorICAgIH07CisgICAgCisgICAgQmlxdWFkUHJvY2Vzc29yKEZpbHRlclR5cGUsIGRvdWJsZSBz
YW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCBhdXRvSW5pdGlhbGl6ZSA9
IHRydWUpOworICAgIHZpcnR1YWwgfkJpcXVhZFByb2Nlc3NvcigpOworICAgIAorICAgIHZpcnR1
YWwgUGFzc093blB0cjxBdWRpb0RTUEtlcm5lbD4gY3JlYXRlS2VybmVsKCk7CisgICAgICAgIAor
ICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKEF1ZGlvQnVzKiBzb3VyY2UsIEF1ZGlvQnVzKiBkZXN0
aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisKKyAgICBib29sIGZpbHRlckNvZWZm
aWNpZW50c0RpcnR5KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJDb2VmZmljaWVudHNEaXJ0eTsg
fQorCisgICAgQXVkaW9QYXJhbSogcGFyYW1ldGVyMSgpIHsgcmV0dXJuIG1fcGFyYW1ldGVyMS5n
ZXQoKTsgfQorICAgIEF1ZGlvUGFyYW0qIHBhcmFtZXRlcjIoKSB7IHJldHVybiBtX3BhcmFtZXRl
cjIuZ2V0KCk7IH0KKyAgICBBdWRpb1BhcmFtKiBwYXJhbWV0ZXIzKCkgeyByZXR1cm4gbV9wYXJh
bWV0ZXIzLmdldCgpOyB9CisKKyAgICBGaWx0ZXJUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KKworcHJpdmF0ZToKKyAgICBGaWx0ZXJUeXBlIG1fdHlwZTsKKworICAgIFJlZlB0
cjxBdWRpb1BhcmFtPiBtX3BhcmFtZXRlcjE7CisgICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1fcGFy
YW1ldGVyMjsKKyAgICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9wYXJhbWV0ZXIzOworCisgICAgLy8g
c28gRFNQIGtlcm5lbHMga25vdyB3aGVuIHRvIHJlLWNvbXB1dGUgY29lZmZpY2llbnRzCisgICAg
Ym9vbCBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gQmlxdWFkUHJvY2Vzc29yX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69720</attachid>
            <date>2010-10-04 16:47:57 -0700</date>
            <delta_ts>2010-10-05 00:59:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46527-20101004164756.patch</filename>
            <type>text/plain</type>
            <size>9522</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTA1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMTAtMDQgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgQmlxdWFkUHJvY2Vzc29yIGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NjUyNworCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSBhdWRp
byBBUEkgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIHdlYmF1ZGlvL0JpcXVh
ZFByb2Nlc3Nvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkUHJvY2Vzc29y
OjpCaXF1YWRQcm9jZXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkUHJvY2Vzc29yOjp+
QmlxdWFkUHJvY2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZFByb2Nlc3Nvcjo6Y3Jl
YXRlS2VybmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZFByb2Nlc3Nvcjo6cHJvY2Vzcyk6
CisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlxdWFkUHJvY2Vzc29yOjpmaWx0ZXJDb2VmZmljaWVudHNEaXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXF1YWRQcm9jZXNzb3I6OnBhcmFtZXRlcjEpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlxdWFkUHJvY2Vzc29yOjpwYXJhbWV0ZXIyKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
cXVhZFByb2Nlc3Nvcjo6cGFyYW1ldGVyMyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRQcm9j
ZXNzb3I6OnR5cGUpOgorCiAyMDEwLTEwLTA0ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5hdGUgQ2hhcGluLgpJbmRleDogV2ViQ29y
ZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd2Vi
YXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd2ViYXVk
aW8vQmlxdWFkUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQor
CisjaW5jbHVkZSAiQmlxdWFkUHJvY2Vzc29yLmgiCisKKyNpbmNsdWRlICJCaXF1YWREU1BLZXJu
ZWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCaXF1YWRQcm9jZXNzb3I6OkJpcXVhZFBy
b2Nlc3NvcihGaWx0ZXJUeXBlIHR5cGUsIGRvdWJsZSBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVy
T2ZDaGFubmVscywgYm9vbCBhdXRvSW5pdGlhbGl6ZSkKKyAgICA6IEF1ZGlvRFNQS2VybmVsUHJv
Y2Vzc29yKHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCisgICAgLCBtX3R5cGUodHlwZSkK
KyAgICAsIG1fcGFyYW1ldGVyMSgwKQorICAgICwgbV9wYXJhbWV0ZXIyKDApCisgICAgLCBtX3Bh
cmFtZXRlcjMoMCkKKyAgICAsIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHkodHJ1ZSkKK3sKKyAg
ICBkb3VibGUgbnlxdWlzdCA9IDAuNSAqIHRoaXMtPnNhbXBsZVJhdGUoKTsKKyAgICAKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAvLyBIaWdocGFzcyBhbmQgbG93cGFzcyBzaGFyZSB0aGUgc2Ft
ZSBwYXJhbWV0ZXJzIGFuZCBvbmx5IGRpZmZlciBpbiBmaWx0ZXIgdHlwZS4KKyAgICBjYXNlIExv
d1Bhc3MyOgorICAgIGNhc2UgSGlnaFBhc3MyOgorICAgICAgICBtX3BhcmFtZXRlcjEgPSBBdWRp
b1BhcmFtOjpjcmVhdGUoImZyZXF1ZW5jeSIsIDM1MC4wLCAyMC4wLCBueXF1aXN0KTsKKyAgICAg
ICAgbV9wYXJhbWV0ZXIyID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJyZXNvbmFuY2UiLCAwLjAsIC0y
MC4wLCAyMC4wKTsKKyAgICAgICAgbV9wYXJhbWV0ZXIzID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJ1
bnVzZWQiLCAwLjAsIDAuMCwgMS4wKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBlYWtp
bmc6CisgICAgICAgIG1fcGFyYW1ldGVyMSA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZnJlcXVlbmN5
IiwgMjUwMC4wLCAyMC4wLCBueXF1aXN0KTsKKyAgICAgICAgbV9wYXJhbWV0ZXIyID0gQXVkaW9Q
YXJhbTo6Y3JlYXRlKCJnYWluIiwgMC4wLCAtMjAuMCwgMjAuMCk7CisgICAgICAgIG1fcGFyYW1l
dGVyMyA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiUSIsIDAuNSwgMC4wLCAxMDAwLjApOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFsbHBhc3M6CisgICAgICAgIG1fcGFyYW1ldGVyMSA9IEF1ZGlv
UGFyYW06OmNyZWF0ZSgiZnJlcXVlbmN5IiwgMjUwMC4wLCAyMC4wLCBueXF1aXN0KTsKKyAgICAg
ICAgbV9wYXJhbWV0ZXIyID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJRIiwgMC41LCAwLjAsIDEwMDAu
MCk7CisgICAgICAgIG1fcGFyYW1ldGVyMyA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgidW51c2VkIiwg
MC4wLCAwLjAsIDEuMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTG93U2hlbGY6CisgICAg
ICAgIG1fcGFyYW1ldGVyMSA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZnJlcXVlbmN5IiwgODAuMCwg
MjAuMCwgbnlxdWlzdCk7CisgICAgICAgIG1fcGFyYW1ldGVyMiA9IEF1ZGlvUGFyYW06OmNyZWF0
ZSgiZ2FpbiIsIDAuMCwgMC4wLCAxLjApOworICAgICAgICBtX3BhcmFtZXRlcjMgPSBBdWRpb1Bh
cmFtOjpjcmVhdGUoInVudXNlZCIsIDAuMCwgMC4wLCAxLjApOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEhpZ2hTaGVsZjoKKyAgICAgICAgbV9wYXJhbWV0ZXIxID0gQXVkaW9QYXJhbTo6Y3Jl
YXRlKCJmcmVxdWVuY3kiLCAxMDAwMC4wLCAyMC4wLCBueXF1aXN0KTsKKyAgICAgICAgbV9wYXJh
bWV0ZXIyID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJnYWluIiwgMC4wLCAwLjAsIDEuMCk7CisgICAg
ICAgIG1fcGFyYW1ldGVyMyA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgidW51c2VkIiwgMC4wLCAwLjAs
IDEuMCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChhdXRvSW5pdGlhbGl6ZSkK
KyAgICAgICAgaW5pdGlhbGl6ZSgpOworfQorCitCaXF1YWRQcm9jZXNzb3I6On5CaXF1YWRQcm9j
ZXNzb3IoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHVuaW5pdGlhbGl6
ZSgpOworfQorCitQYXNzT3duUHRyPEF1ZGlvRFNQS2VybmVsPiBCaXF1YWRQcm9jZXNzb3I6OmNy
ZWF0ZUtlcm5lbCgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBCaXF1YWREU1BLZXJuZWwo
dGhpcykpOworfQorCit2b2lkIEJpcXVhZFByb2Nlc3Nvcjo6cHJvY2VzcyhBdWRpb0J1cyogc291
cmNlLCBBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7Cisg
ICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKKyAgICAgICAgZGVzdGluYXRpb24tPnplcm8oKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgLy8gRGVhbCB3aXRoIHNtb290
aGluZyAvIGRlLXppcHBlcmluZy4gIFN0YXJ0IG91dCBhc3N1bWluZyBmaWx0ZXIgcGFyYW1ldGVy
cyBhcmUgbm90IGNoYW5naW5nLgorICAgIC8vIFRoZSBCaXF1YWREU1BLZXJuZWwgb2JqZWN0cyBy
ZWx5IG9uIHRoaXMgdmFsdWUgdG8gc2VlIGlmIHRoZXkgbmVlZCB0byByZS1jb21wdXRlIHRoZWly
IGludGVybmFsIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAgbV9maWx0ZXJDb2VmZmljaWVudHNE
aXJ0eSA9IGZhbHNlOworICAgIAorICAgIGlmIChtX2hhc0p1c3RSZXNldCkgeworICAgICAgICAv
LyBTbmFwIHRvIGV4YWN0IHZhbHVlcyBmaXJzdCB0aW1lIGFmdGVyIHJlc2V0LCB0aGVuIHNtb290
aCBmb3Igc3Vic2VxdWVudCBjaGFuZ2VzLgorICAgICAgICBtX3BhcmFtZXRlcjEtPnJlc2V0U21v
b3RoZWRWYWx1ZSgpOworICAgICAgICBtX3BhcmFtZXRlcjItPnJlc2V0U21vb3RoZWRWYWx1ZSgp
OworICAgICAgICBtX3BhcmFtZXRlcjMtPnJlc2V0U21vb3RoZWRWYWx1ZSgpOworICAgICAgICBt
X2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgbV9oYXNKdXN0UmVzZXQg
PSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBTbW9vdGggYWxsIG9mIHRoZSBmaWx0
ZXIgcGFyYW1ldGVycy4gIElmIHRoZXkgaGF2ZW4ndCB5ZXQgY29udmVyZ2VkIHRvIHRoZWlyIHRh
cmdldCB2YWx1ZSB0aGVuIG1hcmsgY29lZmZpY2llbnRzIGFzIGRpcnR5LgorICAgICAgICBib29s
IGlzU3RhYmxlMSA9IG1fcGFyYW1ldGVyMS0+c21vb3RoKCk7CisgICAgICAgIGJvb2wgaXNTdGFi
bGUyID0gbV9wYXJhbWV0ZXIyLT5zbW9vdGgoKTsKKyAgICAgICAgYm9vbCBpc1N0YWJsZTMgPSBt
X3BhcmFtZXRlcjMtPnNtb290aCgpOworICAgICAgICBpZiAoIShpc1N0YWJsZTEgJiYgaXNTdGFi
bGUyICYmIGlzU3RhYmxlMykpCisgICAgICAgICAgICBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5
ID0gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIEZvciBlYWNoIGNoYW5uZWwgb2Ygb3Vy
IGlucHV0LCBwcm9jZXNzIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIEJpcXVhZERTUEtlcm5lbCBp
bnRvIHRoZSBvdXRwdXQgY2hhbm5lbC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9r
ZXJuZWxzLnNpemUoKTsgKytpKQorICAgICAgICBtX2tlcm5lbHNbaV0tPnByb2Nlc3Moc291cmNl
LT5jaGFubmVsKGkpLT5kYXRhKCksIGRlc3RpbmF0aW9uLT5jaGFubmVsKGkpLT5kYXRhKCksIGZy
YW1lc1RvUHJvY2Vzcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBXZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCaXF1YWRQcm9jZXNz
b3JfaAorI2RlZmluZSBCaXF1YWRQcm9jZXNzb3JfaAorCisjaW5jbHVkZSAiQXVkaW9EU1BLZXJu
ZWwuaCIKKyNpbmNsdWRlICJBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5oIgorI2luY2x1ZGUgIkF1
ZGlvTm9kZS5oIgorI2luY2x1ZGUgIkF1ZGlvUGFyYW0uaCIKKyNpbmNsdWRlICJCaXF1YWQuaCIK
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQmlx
dWFkUHJvY2Vzc29yIGlzIGFuIEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yIHdoaWNoIHVzZXMgQmlx
dWFkIG9iamVjdHMgdG8gaW1wbGVtZW50IHNldmVyYWwgY29tbW9uIGZpbHRlcnMuCisKK2NsYXNz
IEJpcXVhZFByb2Nlc3NvciA6IHB1YmxpYyBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvciB7CitwdWJs
aWM6CisgICAgZW51bSBGaWx0ZXJUeXBlIHsKKyAgICAgICAgTG93UGFzczIsCisgICAgICAgIEhp
Z2hQYXNzMiwKKyAgICAgICAgUGVha2luZywKKyAgICAgICAgQWxscGFzcywKKyAgICAgICAgTG93
U2hlbGYsCisgICAgICAgIEhpZ2hTaGVsZgorICAgIH07CisgICAgCisgICAgQmlxdWFkUHJvY2Vz
c29yKEZpbHRlclR5cGUsIGRvdWJsZSBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVs
cywgYm9vbCBhdXRvSW5pdGlhbGl6ZSA9IHRydWUpOworICAgIHZpcnR1YWwgfkJpcXVhZFByb2Nl
c3NvcigpOworICAgIAorICAgIHZpcnR1YWwgUGFzc093blB0cjxBdWRpb0RTUEtlcm5lbD4gY3Jl
YXRlS2VybmVsKCk7CisgICAgICAgIAorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKEF1ZGlvQnVz
KiBzb3VyY2UsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7
CisKKyAgICBib29sIGZpbHRlckNvZWZmaWNpZW50c0RpcnR5KCkgY29uc3QgeyByZXR1cm4gbV9m
aWx0ZXJDb2VmZmljaWVudHNEaXJ0eTsgfQorCisgICAgQXVkaW9QYXJhbSogcGFyYW1ldGVyMSgp
IHsgcmV0dXJuIG1fcGFyYW1ldGVyMS5nZXQoKTsgfQorICAgIEF1ZGlvUGFyYW0qIHBhcmFtZXRl
cjIoKSB7IHJldHVybiBtX3BhcmFtZXRlcjIuZ2V0KCk7IH0KKyAgICBBdWRpb1BhcmFtKiBwYXJh
bWV0ZXIzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXIzLmdldCgpOyB9CisKKyAgICBGaWx0ZXJUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworcHJpdmF0ZToKKyAgICBGaWx0ZXJU
eXBlIG1fdHlwZTsKKworICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX3BhcmFtZXRlcjE7CisgICAg
UmVmUHRyPEF1ZGlvUGFyYW0+IG1fcGFyYW1ldGVyMjsKKyAgICBSZWZQdHI8QXVkaW9QYXJhbT4g
bV9wYXJhbWV0ZXIzOworCisgICAgLy8gc28gRFNQIGtlcm5lbHMga25vdyB3aGVuIHRvIHJlLWNv
bXB1dGUgY29lZmZpY2llbnRzCisgICAgYm9vbCBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmlxdWFkUHJvY2Vzc29y
X2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>