<?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>34660</bug_id>
          
          <creation_ts>2010-02-05 13:45:57 -0800</creation_ts>
          <short_desc>audio engine: add audio resources abstraction</short_desc>
          <delta_ts>2010-11-09 00:41:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</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>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>fishd</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>188277</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-05 13:45:57 -0800</bug_when>
    <thetext>In order to perform spatialized stereo panning, a number of data files representing the recorded impulse responses (HRTFs) from real human subjects are needed.  These files need to be packaged in an appropriate &quot;Resources&quot; directory depending on platform.  For the &quot;mac&quot; port, perhaps they would go in a sub-directory of the Resources directory of WebCore.framework.

This patch, creates an abstraction for getting the path to this directory by defining the function:

const char* GetAudioSpatializationResourcePath()

An implementation is provided for the mac port in AudioResourcesMac.mm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188292</commentid>
    <comment_count>1</comment_count>
      <attachid>48257</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-05 14:01:31 -0800</bug_when>
    <thetext>Created attachment 48257
patch for spatialization resources abstraction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188295</commentid>
    <comment_count>2</comment_count>
      <attachid>48257</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-05 14:07:22 -0800</bug_when>
    <thetext>Comment on attachment 48257
patch for spatialization resources abstraction

I have no idea what a spatialization resource is, so please take the feedback with a grain of salt.

&gt; +const char* GetAudioSpatializationResourcePath();

WebKit function names begin with a lower case letter.

WebKit function names use &quot;get&quot; in their names only if the use out arguments. Functions with return values are named after their return values.

&gt; +    // First look in Resources directory for application&apos;s main bundle 
&gt; +    NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
&gt; +
&gt; +    NSString* spatializationPath = [resourcePath stringByAppendingPathComponent:@&quot;AudioSpatialization&quot;];
&gt; +
&gt; +    if ([[NSFileManager defaultManager] fileExistsAtPath:spatializationPath]) {
&gt; +        return [spatializationPath UTF8String];
&gt; +    }
&gt; +    
&gt; +    // Impulse responses are not found in browser application&apos;s resources directory
&gt; +    // fallback to looking in WebCore.framework
&gt; +
&gt; +    NSString* webCorePath = [[NSBundle bundleWithIdentifier:@&quot;com.apple.WebCore&quot;] resourcePath];
&gt; +
&gt; +    spatializationPath = [webCorePath stringByAppendingPathComponent:@&quot;AudioSpatialization&quot;];
&gt; +
&gt; +    if ([[NSFileManager defaultManager] fileExistsAtPath:spatializationPath]) {
&gt; +        return [spatializationPath UTF8String];
&gt; +    }

WebKit project uses a space between NSString and *, although we are talking about changing that guideline, because it&apos;s inconsistent with what we do for C++ types. Please follow our current guideline.

WebKit project uses no braces around a single line if statement body.

The correct method to use for a path is fileSystemRepresentation rather than UTF8String.

&gt; +    return NULL; // not found anywhere

WebKit project uses 0 for this.

In general this code seems to have so little to do with audio that I think it should be calling some shared functions that can get at resources. It shouldn’t be doing all the bundle stuff directly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188304</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-05 14:21:50 -0800</bug_when>
    <thetext>Hi Darin, thanks for the quick response

I&apos;ll address all of the style issues, but wanted to wait until we decided if this is the correct approach.

I&apos;m more than happy to switch over to using a more general approach to handling resources.  Do we have any utility functions or helper classes for this already?

Basicallly, I just need some way to get the path to the directory containing these files in a cross-platform manner.

I&apos;m more than happy to explain more technical details about what these files are about if you&apos;re interested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188306</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-02-05 14:23:00 -0800</bug_when>
    <thetext>Is an GetAudioSpatializationResource something you may wish to load remotely via URL at some point?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188313</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-05 14:38:59 -0800</bug_when>
    <thetext>Hi Simon, that&apos;s a very good question.  I believe we should have a &quot;default&quot; data-set built-in to the browser for the normal use case.  The datasets I believe are  somewhere around 750K, so there may be some issues with download speed, plus we don&apos;t want every javascript developer to have to host these datasets server-side.  That said, it might be interesting to allow javascript developers to load up &quot;custom&quot; spatialization data-sets via URL.  But, since they&apos;re fairly difficult to create, it would not be generally used this way.

So, this patch represents an abstraction to get the &quot;default&quot; data-set, which I imagine would be in the application&apos;s Resources directory somewhere...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188314</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-02-05 14:41:40 -0800</bug_when>
    <thetext>If you ever think you&apos;ll load them remotely then you should always load via URLs.

It&apos;s also hard to know if spatialized stereo panning even fits into the first cut of the audio APIs, so maybe this patch is getting ahead of itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188332</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-05 15:07:59 -0800</bug_when>
    <thetext>I&apos;ve been talking with Dimitri Glazkov and Darin Fisher about this, and they&apos;re helping me work out a better way to abstract this (dealing with Chrome sandboxing, etc.) -- still working on it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188366</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-02-05 17:06:37 -0800</bug_when>
    <thetext>In general, I think we should be working toward making any code that hits the file system (and of course network) async.  Can this be made async?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188374</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-05 17:43:46 -0800</bug_when>
    <thetext>After speaking with Darin Fisher, he suggests we use an approach similar to what we&apos;ve done for images:

platform/graphics/Image.h:90:    static PassRefPtr&lt;Image&gt; loadPlatformResource(const char* name);

except it would return a SharedBuffer for the data

We should be able to make it async if we have a completion callback instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299110</commentid>
    <comment_count>10</comment_count>
      <attachid>71796</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-10-25 14:35:31 -0700</bug_when>
    <thetext>Created attachment 71796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299112</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-10-25 14:38:25 -0700</bug_when>
    <thetext>This new patch follows very closely what we&apos;re doing in Image::loadPlatformResource().  The place where it&apos;s currently called is in a special loader thread (not the main thread), which should address Sam&apos;s concern about async loading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305643</commentid>
    <comment_count>12</comment_count>
      <attachid>73144</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-11-05 17:00:12 -0700</bug_when>
    <thetext>Created attachment 73144
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306476</commentid>
    <comment_count>13</comment_count>
      <attachid>73144</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-08 17:02:59 -0800</bug_when>
    <thetext>Comment on attachment 73144
Patch

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

The code basically looks fine. r- for the license header issue as well as a couple of other minor issues.

&gt; WebCore/platform/audio/mac/AudioBusMac.mm:15
&gt; + *     from this software without specific prior written permission.

Wrong license header.

&gt; WebCore/platform/audio/mac/AudioBusMac.mm:40
&gt; +@interface WebCoreBundleClass : NSObject

I think it would be safer to name this temporary class something audio-specific like WebCoreAudioBundleClass.

&gt; WebCore/platform/audio/mac/AudioBusMac.mm:68
&gt; +} // WebCore

// namespace WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306502</commentid>
    <comment_count>14</comment_count>
      <attachid>73317</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-11-08 17:26:03 -0800</bug_when>
    <thetext>Created attachment 73317
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306503</commentid>
    <comment_count>15</comment_count>
      <attachid>73317</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-08 17:26:56 -0800</bug_when>
    <thetext>Comment on attachment 73317
Patch

Looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306608</commentid>
    <comment_count>16</comment_count>
      <attachid>73317</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-08 21:47:07 -0800</bug_when>
    <thetext>Comment on attachment 73317
Patch

Rejecting patch 73317 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=abarth-cq-sl&apos;, &apos;apply-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, 73317]&quot; exit_code: 1
Traceback (most recent call last):
  File &quot;./WebKitTools/Scripts/webkit-patch&quot;, line 70, in &lt;module&gt;
    main()
  File &quot;./WebKitTools/Scripts/webkit-patch&quot;, line 63, in main
    from webkitpy.tool.main import WebKitPatch
  File &quot;/Users/abarth/git/webkit-queue/WebKitTools/Scripts/webkitpy/tool/main.py&quot;, line 42, in &lt;module&gt;
    from webkitpy.common.net.rietveld import Rietveld
ImportError: No module named rietveld

Full output: http://queues.webkit.org/results/5577008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306647</commentid>
    <comment_count>17</comment_count>
      <attachid>73317</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-09 00:41:08 -0800</bug_when>
    <thetext>Comment on attachment 73317
Patch

Clearing flags on attachment: 73317

Committed r71613: &lt;http://trac.webkit.org/changeset/71613&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306648</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-09 00:41:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48257</attachid>
            <date>2010-02-05 14:01:31 -0800</date>
            <delta_ts>2010-10-25 14:35:27 -0700</delta_ts>
            <desc>patch for spatialization resources abstraction</desc>
            <filename>ttt</filename>
            <type>text/plain</type>
            <size>5722</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDQ0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMDItMDUgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGFkZCBhdWRpbyByZXNvdXJjZXMgYWJzdHJhY3Rpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NjYwCisKKyAgICAgICAgTm8g
dGVzdHMgc2luY2Ugbm8gY29ycmVzcG9uZGluZyBqYXZhc2NyaXB0IGludGVyZmFjZQorCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW86IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1
ZGlvUmVzb3VyY2VzLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYzogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvUmVzb3VyY2VzTWFjLm1tOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdldEF1ZGlvU3BhdGlhbGl6YXRpb25SZXNvdXJjZVBh
dGgpOgorCiAyMDEwLTAyLTA1ICBSeWFuIExlYXZlbmdvb2QgIDxsZWF2ZW5nb29kQGdtYWlsLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vQXVkaW9SZXNvdXJjZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0F1ZGlvUmVzb3VyY2VzLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0F1ZGlvUmVzb3VyY2VzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEF1ZGlvUmVzb3VyY2VzX2gKKyNkZWZpbmUgQXVkaW9SZXNvdXJjZXNfaAorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGNoYXIqIEdldEF1ZGlvU3BhdGlhbGl6YXRpb25S
ZXNvdXJjZVBhdGgoKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQXVk
aW9SZXNvdXJjZXNfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9SZXNv
dXJjZXNNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVk
aW9SZXNvdXJjZXNNYWMubW0JKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9BdWRpb1Jlc291cmNlc01hYy5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NvbnN0IGNoYXIqIEdldEF1ZGlvU3BhdGlhbGl6YXRpb25SZXNvdXJjZVBhdGgoKQorewor
ICAgIC8vIEZpcnN0IGxvb2sgaW4gUmVzb3VyY2VzIGRpcmVjdG9yeSBmb3IgYXBwbGljYXRpb24n
cyBtYWluIGJ1bmRsZSAKKyAgICBOU1N0cmluZyogcmVzb3VyY2VQYXRoID0gW1tOU0J1bmRsZSBt
YWluQnVuZGxlXSByZXNvdXJjZVBhdGhdOworCisgICAgTlNTdHJpbmcqIHNwYXRpYWxpemF0aW9u
UGF0aCA9IFtyZXNvdXJjZVBhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQXVk
aW9TcGF0aWFsaXphdGlvbiJdOworCisgICAgaWYgKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFu
YWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzcGF0aWFsaXphdGlvblBhdGhdKSB7CisgICAgICAgIHJl
dHVybiBbc3BhdGlhbGl6YXRpb25QYXRoIFVURjhTdHJpbmddOworICAgIH0KKyAgICAKKyAgICAv
LyBJbXB1bHNlIHJlc3BvbnNlcyBhcmUgbm90IGZvdW5kIGluIGJyb3dzZXIgYXBwbGljYXRpb24n
cyByZXNvdXJjZXMgZGlyZWN0b3J5CisgICAgLy8gZmFsbGJhY2sgdG8gbG9va2luZyBpbiBXZWJD
b3JlLmZyYW1ld29yaworCisgICAgTlNTdHJpbmcqIHdlYkNvcmVQYXRoID0gW1tOU0J1bmRsZSBi
dW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJDb3JlIl0gcmVzb3VyY2VQYXRoXTsK
KworICAgIHNwYXRpYWxpemF0aW9uUGF0aCA9IFt3ZWJDb3JlUGF0aCBzdHJpbmdCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6QCJBdWRpb1NwYXRpYWxpemF0aW9uIl07CisKKyAgICBpZiAoW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnNwYXRpYWxpemF0aW9u
UGF0aF0pIHsKKyAgICAgICAgcmV0dXJuIFtzcGF0aWFsaXphdGlvblBhdGggVVRGOFN0cmluZ107
CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7IC8vIG5vdCBmb3VuZCBhbnl3aGVyZQorfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71796</attachid>
            <date>2010-10-25 14:35:31 -0700</date>
            <delta_ts>2010-11-05 17:00:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34660-20101025143530.patch</filename>
            <type>text/plain</type>
            <size>4128</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDQ5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMTAtMjUgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGFkZCBhdWRpbyByZXNvdXJjZXMgYWJzdHJhY3Rpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NjYwCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIHNpbmNlIGF1ZGlvIEFQSSBpcyBub3QgeWV0IGltcGxlbWVudGVkLgorCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9tYWMvQXVkaW9CdXNNYWMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdXM6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKToKKwogMjAxMC0xMC0yMSAgU2F0aXNoIFNhbXBhdGggIDxz
YXRpc2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmgJKHJldmlzaW9uIDcwMzYwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiAr
MTE3LDggQEAgcHVibGljOgogICAgIC8vIE1ha2VzIG1heGltdW0gYWJzb2x1dGUgdmFsdWUgPT0g
MS4wIChpZiBwb3NzaWJsZSkuCiAgICAgdm9pZCBub3JtYWxpemUoKTsKIAorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEF1ZGlvQnVzPiBsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1l
LCBkb3VibGUgc2FtcGxlUmF0ZSk7CisKIHByb3RlY3RlZDoKICAgICBBdWRpb0J1cygpIHsgfTsK
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9CdXNNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9CdXNNYWMubW0JKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0J1c01hYy5tbQkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
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
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFdFQl9BVURJTykKKworI2ltcG9ydCAiQXVkaW9CdXMuaCIKKworI2ltcG9ydCAiQXVkaW9G
aWxlUmVhZGVyLmgiCisjaW1wb3J0IDx3dGYvT3duUHRyLmg+CisjaW1wb3J0IDx3dGYvUGFzc093
blB0ci5oPgorCitAaW50ZXJmYWNlIFdlYkNvcmVCdW5kbGVDbGFzcyA6IE5TT2JqZWN0CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJDb3JlQnVuZGxlQ2xhc3MKK0BlbmQKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQYXNzT3duUHRyPEF1ZGlvQnVzPiBBdWRpb0J1czo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHNhbXBsZVJhdGUpCit7CisgICAgLy8g
VGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIHRoYW4gdGhlIG1haW4gdGhyZWFk
LCBzbyB3ZSBuZWVkIGFuIGF1dG8tcmVsZWFzZSBwb29sLgorICAgIE5TQXV0b3JlbGVhc2VQb29s
KiBwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07CisgICAgCisgICAgTlNC
dW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29yZUJ1bmRsZUNs
YXNzIGNsYXNzXV07CisgICAgTlNTdHJpbmcgKmF1ZGlvRmlsZVBhdGggPSBbYnVuZGxlIHBhdGhG
b3JSZXNvdXJjZTpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6bmFtZV0gb2ZUeXBlOkAi
YWlmIiBpbkRpcmVjdG9yeTpAImF1ZGlvIl07CisgICAgTlNEYXRhICphdWRpb0RhdGEgPSBbTlNE
YXRhIGRhdGFXaXRoQ29udGVudHNPZkZpbGU6YXVkaW9GaWxlUGF0aF07CisKKyAgICBpZiAoYXVk
aW9EYXRhKSB7CisgICAgICAgIE93blB0cjxBdWRpb0J1cz4gYnVzKGNyZWF0ZUJ1c0Zyb21Jbk1l
bW9yeUF1ZGlvRmlsZShbYXVkaW9EYXRhIGJ5dGVzXSwgW2F1ZGlvRGF0YSBsZW5ndGhdLCBmYWxz
ZSwgc2FtcGxlUmF0ZSkpOworICAgICAgICBbcG9vbCByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJu
IGJ1cy5yZWxlYXNlKCk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
W3Bvb2wgcmVsZWFzZV07CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQl9BVURJTykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73144</attachid>
            <date>2010-11-05 17:00:12 -0700</date>
            <delta_ts>2010-11-08 17:25:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34660-20101105170011.patch</filename>
            <type>text/plain</type>
            <size>5665</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTQ1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMTEtMDUgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGFkZCBhdWRpbyByZXNvdXJjZXMgYWJzdHJhY3Rpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NjYwCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIHNpbmNlIGF1ZGlvIEFQSSBpcyBub3QgeWV0IGltcGxlbWVudGVkLgorCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9IUlRGRWxldmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZFbGV2YXRpb246OmNh
bGN1bGF0ZUtlcm5lbHNGb3JBemltdXRoRWxldmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhS
VEZFbGV2YXRpb246OmNyZWF0ZUJ5SW50ZXJwb2xhdGluZ1NsaWNlcyk6CisgICAgICAgICogcGxh
dGZvcm0vYXVkaW8vbWFjL0F1ZGlvQnVzTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvQnVzOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSk6CisKIDIwMTAtMTEtMDUgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2
aW4uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oCShyZXZpc2lvbiA3MTQ1NykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3
LDYgKzExNyw4IEBAIHB1YmxpYzoKICAgICAvLyBNYWtlcyBtYXhpbXVtIGFic29sdXRlIHZhbHVl
ID09IDEuMCAoaWYgcG9zc2libGUpLgogICAgIHZvaWQgbm9ybWFsaXplKCk7CiAKKyAgICBzdGF0
aWMgUGFzc093blB0cjxBdWRpb0J1cz4gbG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciog
bmFtZSwgZG91YmxlIHNhbXBsZVJhdGUpOworCiBwcm90ZWN0ZWQ6CiAgICAgQXVkaW9CdXMoKSB7
IH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRWxldmF0aW9uLmNwcAkocmV2
aXNpb24gNzE0NTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZFbGV2YXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgYm9vbCBIUlRGRWxldmF0aW9uOjpj
YWxjdWxhdGVLZXJuZWxzRm9yQQogICAgIGludCBwb3NpdGl2ZUVsZXZhdGlvbiA9IGVsZXZhdGlv
biA8IDAgPyBlbGV2YXRpb24gKyAzNjAgOiBlbGV2YXRpb247CiAgICAgU3RyaW5nIHJlc291cmNl
TmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJJUkNfJXNfQ19SMDE5NV9UJTAzZF9QJTAzZCIsIHN1Ympl
Y3ROYW1lLnV0ZjgoKS5kYXRhKCksIGF6aW11dGgsIHBvc2l0aXZlRWxldmF0aW9uKTsKIAotICAg
IE93blB0cjxBdWRpb0J1cz4gaW1wdWxzZVJlc3BvbnNlKGNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGVS
ZXNvdXJjZShyZXNvdXJjZU5hbWUsIHNhbXBsZVJhdGUpKTsKKyAgICBPd25QdHI8QXVkaW9CdXM+
IGltcHVsc2VSZXNwb25zZShBdWRpb0J1czo6bG9hZFBsYXRmb3JtUmVzb3VyY2UocmVzb3VyY2VO
YW1lLnV0ZjgoKS5kYXRhKCksIHNhbXBsZVJhdGUpKTsKIAogICAgIEFTU0VSVChpbXB1bHNlUmVz
cG9uc2UuZ2V0KCkpOwogICAgIGlmICghaW1wdWxzZVJlc3BvbnNlLmdldCgpKQpAQCAtMjI0LDcg
KzIyNCw3IEBAIFBhc3NPd25QdHI8SFJURkVsZXZhdGlvbj4gSFJURkVsZXZhdGlvbjoKICAgICAv
LyBJbnRlcnBvbGF0ZSBlbGV2YXRpb24gYW5nbGUuCiAgICAgZG91YmxlIGFuZ2xlID0gKDEuMCAt
IHgpICogaHJ0ZkVsZXZhdGlvbjEtPmVsZXZhdGlvbkFuZ2xlKCkgKyB4ICogaHJ0ZkVsZXZhdGlv
bjItPmVsZXZhdGlvbkFuZ2xlKCk7CiAgICAgCi0gICAgT3duUHRyPEhSVEZFbGV2YXRpb24+IGhy
dGZFbGV2YXRpb24gPSBhZG9wdFB0cihuZXcgSFJURkVsZXZhdGlvbihrZXJuZWxMaXN0TC5yZWxl
YXNlKCksIGtlcm5lbExpc3RSLnJlbGVhc2UoKSwgYW5nbGUsIHNhbXBsZVJhdGUpKTsKKyAgICBP
d25QdHI8SFJURkVsZXZhdGlvbj4gaHJ0ZkVsZXZhdGlvbiA9IGFkb3B0UHRyKG5ldyBIUlRGRWxl
dmF0aW9uKGtlcm5lbExpc3RMLnJlbGVhc2UoKSwga2VybmVsTGlzdFIucmVsZWFzZSgpLCBzdGF0
aWNfY2FzdDxpbnQ+KGFuZ2xlKSwgc2FtcGxlUmF0ZSkpOwogICAgIHJldHVybiBocnRmRWxldmF0
aW9uLnJlbGVhc2UoKTsgIAogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9B
dWRpb0J1c01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9B
dWRpb0J1c01hYy5tbQkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFj
L0F1ZGlvQnVzTWFjLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW1wb3J0ICJBdWRpb0J1cy5o
IgorCisjaW1wb3J0ICJBdWRpb0ZpbGVSZWFkZXIuaCIKKyNpbXBvcnQgPHd0Zi9Pd25QdHIuaD4K
KyNpbXBvcnQgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KKworQGludGVyZmFjZSBXZWJDb3JlQnVuZGxlQ2xhc3MgOiBOU09iamVjdAorQGVuZAor
CitAaW1wbGVtZW50YXRpb24gV2ViQ29yZUJ1bmRsZUNsYXNzCitAZW5kCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUGFzc093blB0cjxBdWRpb0J1cz4gQXVkaW9CdXM6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSBzYW1wbGVSYXRlKQoreworICAgIC8vIFRo
aXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgZnJvbSBvdGhlciB0aGFuIHRoZSBtYWluIHRocmVhZCwg
c28gd2UgbmVlZCBhbiBhdXRvLXJlbGVhc2UgcG9vbC4KKyAgICBOU0F1dG9yZWxlYXNlUG9vbCog
cG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOworICAgIAorICAgIE5TQnVu
ZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVCdW5kbGVDbGFz
cyBjbGFzc11dOworICAgIE5TU3RyaW5nICphdWRpb0ZpbGVQYXRoID0gW2J1bmRsZSBwYXRoRm9y
UmVzb3VyY2U6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm5hbWVdIG9mVHlwZTpAImFp
ZiIgaW5EaXJlY3Rvcnk6QCJhdWRpbyJdOworICAgIE5TRGF0YSAqYXVkaW9EYXRhID0gW05TRGF0
YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxlOmF1ZGlvRmlsZVBhdGhdOworCisgICAgaWYgKGF1ZGlv
RGF0YSkgeworICAgICAgICBPd25QdHI8QXVkaW9CdXM+IGJ1cyhjcmVhdGVCdXNGcm9tSW5NZW1v
cnlBdWRpb0ZpbGUoW2F1ZGlvRGF0YSBieXRlc10sIFthdWRpb0RhdGEgbGVuZ3RoXSwgZmFsc2Us
IHNhbXBsZVJhdGUpKTsKKyAgICAgICAgW3Bvb2wgcmVsZWFzZV07CisgICAgICAgIHJldHVybiBi
dXMucmVsZWFzZSgpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFtw
b29sIHJlbGVhc2VdOworICAgIHJldHVybiAwOworfQorCit9IC8vIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShXRUJfQVVESU8pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73317</attachid>
            <date>2010-11-08 17:26:03 -0800</date>
            <delta_ts>2010-11-09 00:41:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34660-20101108172601.patch</filename>
            <type>text/plain</type>
            <size>5497</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTU4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMTEtMDggIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGFkZCBhdWRpbyByZXNvdXJjZXMgYWJzdHJhY3Rpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NjYwCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIHNpbmNlIGF1ZGlvIEFQSSBpcyBub3QgeWV0IGltcGxlbWVudGVkLgorCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9IUlRGRWxldmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZFbGV2YXRpb246OmNh
bGN1bGF0ZUtlcm5lbHNGb3JBemltdXRoRWxldmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhS
VEZFbGV2YXRpb246OmNyZWF0ZUJ5SW50ZXJwb2xhdGluZ1NsaWNlcyk6CisgICAgICAgICogcGxh
dGZvcm0vYXVkaW8vbWFjL0F1ZGlvQnVzTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvQnVzOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSk6CisKIDIwMTAtMTEtMDggIFBpZXJyZS1B
bnRvaW5lIExhRmF5ZXR0ZSAgPHBpZXJyZS5sYWZheWV0dGVAZ21haWwuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
QXVkaW9CdXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVz
LmgJKHJldmlzaW9uIDcxNDU3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDggQEAgcHVibGljOgogICAgIC8vIE1ha2Vz
IG1heGltdW0gYWJzb2x1dGUgdmFsdWUgPT0gMS4wIChpZiBwb3NzaWJsZSkuCiAgICAgdm9pZCBu
b3JtYWxpemUoKTsKIAorICAgIHN0YXRpYyBQYXNzT3duUHRyPEF1ZGlvQnVzPiBsb2FkUGxhdGZv
cm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgc2FtcGxlUmF0ZSk7CisKIHByb3Rl
Y3RlZDoKICAgICBBdWRpb0J1cygpIHsgfTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9IUlRGRWxldmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0hSVEZFbGV2YXRpb24uY3BwCShyZXZpc2lvbiA3MTQ1NykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vSFJURkVsZXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNyBA
QCBib29sIEhSVEZFbGV2YXRpb246OmNhbGN1bGF0ZUtlcm5lbHNGb3JBCiAgICAgaW50IHBvc2l0
aXZlRWxldmF0aW9uID0gZWxldmF0aW9uIDwgMCA/IGVsZXZhdGlvbiArIDM2MCA6IGVsZXZhdGlv
bjsKICAgICBTdHJpbmcgcmVzb3VyY2VOYW1lID0gU3RyaW5nOjpmb3JtYXQoIklSQ18lc19DX1Iw
MTk1X1QlMDNkX1AlMDNkIiwgc3ViamVjdE5hbWUudXRmOCgpLmRhdGEoKSwgYXppbXV0aCwgcG9z
aXRpdmVFbGV2YXRpb24pOwogCi0gICAgT3duUHRyPEF1ZGlvQnVzPiBpbXB1bHNlUmVzcG9uc2Uo
Y3JlYXRlQnVzRnJvbUF1ZGlvRmlsZVJlc291cmNlKHJlc291cmNlTmFtZSwgc2FtcGxlUmF0ZSkp
OworICAgIE93blB0cjxBdWRpb0J1cz4gaW1wdWxzZVJlc3BvbnNlKEF1ZGlvQnVzOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZShyZXNvdXJjZU5hbWUudXRmOCgpLmRhdGEoKSwgc2FtcGxlUmF0ZSkpOwog
CiAgICAgQVNTRVJUKGltcHVsc2VSZXNwb25zZS5nZXQoKSk7CiAgICAgaWYgKCFpbXB1bHNlUmVz
cG9uc2UuZ2V0KCkpCkBAIC0yMjQsNyArMjI0LDcgQEAgUGFzc093blB0cjxIUlRGRWxldmF0aW9u
PiBIUlRGRWxldmF0aW9uOgogICAgIC8vIEludGVycG9sYXRlIGVsZXZhdGlvbiBhbmdsZS4KICAg
ICBkb3VibGUgYW5nbGUgPSAoMS4wIC0geCkgKiBocnRmRWxldmF0aW9uMS0+ZWxldmF0aW9uQW5n
bGUoKSArIHggKiBocnRmRWxldmF0aW9uMi0+ZWxldmF0aW9uQW5nbGUoKTsKICAgICAKLSAgICBP
d25QdHI8SFJURkVsZXZhdGlvbj4gaHJ0ZkVsZXZhdGlvbiA9IGFkb3B0UHRyKG5ldyBIUlRGRWxl
dmF0aW9uKGtlcm5lbExpc3RMLnJlbGVhc2UoKSwga2VybmVsTGlzdFIucmVsZWFzZSgpLCBhbmds
ZSwgc2FtcGxlUmF0ZSkpOworICAgIE93blB0cjxIUlRGRWxldmF0aW9uPiBocnRmRWxldmF0aW9u
ID0gYWRvcHRQdHIobmV3IEhSVEZFbGV2YXRpb24oa2VybmVsTGlzdEwucmVsZWFzZSgpLCBrZXJu
ZWxMaXN0Ui5yZWxlYXNlKCksIHN0YXRpY19jYXN0PGludD4oYW5nbGUpLCBzYW1wbGVSYXRlKSk7
CiAgICAgcmV0dXJuIGhydGZFbGV2YXRpb24ucmVsZWFzZSgpOyAgCiB9CiAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvQnVzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvQnVzTWFjLm1tCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9CdXNNYWMubW0JKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXRUJfQVVESU8pCisKKyNpbXBvcnQgIkF1ZGlvQnVzLmgiCisKKyNpbXBvcnQgIkF1ZGlvRmls
ZVJlYWRlci5oIgorI2ltcG9ydCA8d3RmL093blB0ci5oPgorI2ltcG9ydCA8d3RmL1Bhc3NPd25Q
dHIuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitAaW50ZXJmYWNlIFdl
YkNvcmVBdWRpb0J1bmRsZUNsYXNzIDogTlNPYmplY3QKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFdlYkNvcmVBdWRpb0J1bmRsZUNsYXNzCitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGFzc093blB0cjxBdWRpb0J1cz4gQXVkaW9CdXM6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0
IGNoYXIqIG5hbWUsIGRvdWJsZSBzYW1wbGVSYXRlKQoreworICAgIC8vIFRoaXMgbWV0aG9kIGNh
biBiZSBjYWxsZWQgZnJvbSBvdGhlciB0aGFuIHRoZSBtYWluIHRocmVhZCwgc28gd2UgbmVlZCBh
biBhdXRvLXJlbGVhc2UgcG9vbC4KKyAgICBOU0F1dG9yZWxlYXNlUG9vbCogcG9vbCA9IFtbTlNB
dXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOworICAgIAorICAgIE5TQnVuZGxlICpidW5kbGUg
PSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVBdWRpb0J1bmRsZUNsYXNzIGNsYXNz
XV07CisgICAgTlNTdHJpbmcgKmF1ZGlvRmlsZVBhdGggPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJj
ZTpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6bmFtZV0gb2ZUeXBlOkAiYWlmIiBpbkRp
cmVjdG9yeTpAImF1ZGlvIl07CisgICAgTlNEYXRhICphdWRpb0RhdGEgPSBbTlNEYXRhIGRhdGFX
aXRoQ29udGVudHNPZkZpbGU6YXVkaW9GaWxlUGF0aF07CisKKyAgICBpZiAoYXVkaW9EYXRhKSB7
CisgICAgICAgIE93blB0cjxBdWRpb0J1cz4gYnVzKGNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlv
RmlsZShbYXVkaW9EYXRhIGJ5dGVzXSwgW2F1ZGlvRGF0YSBsZW5ndGhdLCBmYWxzZSwgc2FtcGxl
UmF0ZSkpOworICAgICAgICBbcG9vbCByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIGJ1cy5yZWxl
YXNlKCk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgW3Bvb2wgcmVs
ZWFzZV07CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>