<?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>138477</bug_id>
          
          <creation_ts>2014-11-06 15:16:10 -0800</creation_ts>
          <short_desc>Don&apos;t premultiply and then unpremultiply PNGs on iOS.</short_desc>
          <delta_ts>2022-08-11 03:27:47 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</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>1</everconfirmed>
          <reporter name="Roger Fong">roger_fong</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>core</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>roger_fong</cc>
    
    <cc>sfranci</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>somemail256</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1046924</commentid>
    <comment_count>0</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-11-06 15:16:10 -0800</bug_when>
    <thetext>On iOS, when we specify png as not being premultiplied, CG will still premultiply the pngs for optimization purposes.
However, this causes rounding issues because if we want the raw PNG data back later and have to unmultiply, we lose data because the premultiplication ceil&apos;s the premultiplied value. 

This is an original issue if we have an alpha value of 1/255. We will round any color channel value to somewhere between 0-1 and then round to 1. When we unmultiply we get a final pixel value of 255,255,255,1.
While visually this is not a big issue since alpha is so low, we fail a number of conformance tests including
conformance/textures/gl-teximage.html
conformance/context/premultiplyalpha-test.html which explicitly check pixel values.

Thus in these special cases we should just retrieve the non premultiplied data in the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046933</commentid>
    <comment_count>1</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-11-06 15:21:18 -0800</bug_when>
    <thetext>rdar://problem/15486393</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046934</commentid>
    <comment_count>2</comment_count>
      <attachid>241136</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-11-06 15:27:32 -0800</bug_when>
    <thetext>Created attachment 241136
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046940</commentid>
    <comment_count>3</comment_count>
      <attachid>241136</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-11-06 15:42:54 -0800</bug_when>
    <thetext>Comment on attachment 241136
patch

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

Looks good, but I think it could be better if we were using RetainPtrs so you didn&apos;t have to have a block of releases when these objects go out of scope.

&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:364
&gt; +        CFMutableDictionaryRef providerOptions = CFDictionaryCreateMutable(0, 0, &amp;kCFCopyStringDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks);

Couldn&apos;t this be a RetainPtr&lt;CFMutableDictionaryRef&gt;?

&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:367
&gt; +        CGImageProviderRef provider = CGImageGetImageProvider(image.get());

Probably could use pngImage here.

&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:387
&gt; +        CFDataRef data = CFDataCreate(0, pngData, CGImageBlockGetBytesPerRow(block) * (size_t)CGRectGetHeight(blockRect));

Couldn&apos;t this be a RetainPtr&lt;CFDataRef&gt;?

&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:390
&gt; +        CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData(data);

RetainPtr?

&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:398
&gt; +        CFRelease(providerOptions);

... these could go away if we were using RetainPtrs for the objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046947</commentid>
    <comment_count>4</comment_count>
      <attachid>241141</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-11-06 15:55:47 -0800</bug_when>
    <thetext>Created attachment 241141
patch

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046966</commentid>
    <comment_count>5</comment_count>
      <attachid>241146</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-11-06 16:56:28 -0800</bug_when>
    <thetext>Created attachment 241146
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046975</commentid>
    <comment_count>6</comment_count>
      <attachid>241146</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-11-06 17:23:31 -0800</bug_when>
    <thetext>Comment on attachment 241146
patch

Looks great!  r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046979</commentid>
    <comment_count>7</comment_count>
      <attachid>241146</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-11-06 17:30:11 -0800</bug_when>
    <thetext>Comment on attachment 241146
patch

Let&apos;s not be hasty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046981</commentid>
    <comment_count>8</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-06 17:33:29 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 241146 [details]
&gt; patch
&gt; 
&gt; Let&apos;s not be hasty.

What Simon said. Needs more review/performance testing/understanding/cleanup by everyone, I think. This is super critical code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047008</commentid>
    <comment_count>9</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2014-11-06 20:00:17 -0800</bug_when>
    <thetext>I will run a test where I draw an image with an alpha gradient.
Because this only really effects low alpha values, i&apos;ll then re-render the image after removing the alpha channels. I&apos;d expect to see a lot of banding.

I&apos;ll also write a performance test to continually redraw a (large) png (on a retina device?) and then run do some before and after profiling.

After I prove that this actually is an improvement (even if only slight) and if I determine that its not a noticeable performance hit then I think we&apos;d be good to go.

If not, I can special case to only pngs used by WebGL (A call to texture2d).

It would be also nice if CG just had a flag for the decoder to return the raw png data instead of having to jump through all these hoops to get to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056322</commentid>
    <comment_count>10</comment_count>
    <who name="Mr F">somemail256</who>
    <bug_when>2014-12-17 06:10:41 -0800</bug_when>
    <thetext>Just stumbled across this nasty bug. Made a little test program: http://geom.io/pc25b/testPNG2.html
1st image: PNG with alpha as an Image element.
2nd image: same PNG without alpha channel as an Image element;
3rd image: canvas, first PNG with alpha, but loaded as WebGL texture and rendered on a quad.

On PC 2nd and 3rd images are the same.
On iOS 3rd image exhibits severe precision loss.

This is quite important to fix for WebGL apps, because we often store different encoded/packed data for textures and do not expect RGB to be broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736359</commentid>
    <comment_count>11</comment_count>
    <who name="mrmaxm">core</who>
    <bug_when>2021-03-05 08:46:40 -0800</bug_when>
    <thetext>(In reply to Roger Fong from comment #9)
&gt; I will run a test where I draw an image with an alpha gradient.
&gt; Because this only really effects low alpha values, i&apos;ll then re-render the
&gt; image after removing the alpha channels. I&apos;d expect to see a lot of banding.
&gt; 
&gt; I&apos;ll also write a performance test to continually redraw a (large) png (on a
&gt; retina device?) and then run do some before and after profiling.
&gt; 
&gt; After I prove that this actually is an improvement (even if only slight) and
&gt; if I determine that its not a noticeable performance hit then I think we&apos;d
&gt; be good to go.
&gt; 
&gt; If not, I can special case to only pngs used by WebGL (A call to texture2d).
&gt; 
&gt; It would be also nice if CG just had a flag for the decoder to return the
&gt; raw png data instead of having to jump through all these hoops to get to it.

Since 2014 nothing happened on this bug.
It is still an issue, and iOS still premiltiplies PNG, making packing techniques such as RGBM not viable due to rounding issues.

Please advice on status of this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736442</commentid>
    <comment_count>12</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-05 11:03:15 -0800</bug_when>
    <thetext>I&apos;ll check it out.
It appears we still fail premultiplyalpha-test.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1890538</commentid>
    <comment_count>13</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-08-11 03:27:47 -0700</bug_when>
    <thetext>conformance/context/premultiplyalpha-test.html now works.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241136</attachid>
            <date>2014-11-06 15:27:32 -0800</date>
            <delta_ts>2014-11-06 15:55:47 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>6462</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NTcxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTExLTA2ICBSb2dlciBG
b25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gRG9uJ3QgcHJlbXVs
dGlwbHkgYW5kIHRoZW4gdW4tcHJlbXVsdGlwbHkgUE5HcyB3aGVuIGRlY29kaW5nLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4NDc3LgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RlZCBieSBXZWJH
TCBjb25mb3JtYW5jZSB0ZXN0czoKKyAgICAgICAgY29uZm9ybWFuY2UvY29udGV4dC9wcmVtdWx0
aXBseWFscGhhLXRlc3QuaHRtbAorICAgICAgICBjb25mb3JtYW5jZS90ZXh0dXJlcy9nbC10ZXhp
bWFnZS5odG1sCisKKyAgICAgICAgT24gaU9TIHdoZW4gd2UgdHJ5IHRvIGRlY29kZSBQTkcgaW1h
Z2VzIHdlIHJldHJpZXZlIHRoZSBwcmVtdWx0aXBsaWVkIGluZm9ybWF0aW9uLgorICAgICAgICBJ
ZiB3ZSBvcmlnaW5hbGx5IHNwZWNpZmllZCB0aGUgSW1hZ2VTb3VyY2UgYXMgYmVpbmcgbm90IHBy
ZW11bHRpcGxpZWQgd2UgdGhlbiAKKyAgICAgICAgbGF0ZXIgaGF2ZSB0byB1bi1wcmVtdWx0aXBs
eSwgd2hpY2ggaXMgYSBsb3NzeSBvcGVyYXRpb24uCisgICAgICAgIEl0IGlzIGJldHRlciB0byBy
ZXRyaWV2ZSB0aGUgbm9uLXByZW11bHRpcGxpZWQgaW5mb3JtYXRpb24gaW4gdGhlIGZpcnN0IHBs
YWNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6CisKIDIwMTQtMTEtMDUgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgRGUtdGVtcGxhdGl6ZSBUaW1lcgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCShyZXZp
c2lvbiAxNzQ3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsOCArMTY1LDggQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBOYXRpdmVJbWFnZURlY29kZXJQdHIgbV9kZWNvZGVyOwogCi0jaWYgIVVTRShDRykK
ICAgICBBbHBoYU9wdGlvbiBtX2FscGhhT3B0aW9uOworI2lmICFVU0UoQ0cpCiAgICAgR2FtbWFB
bmRDb2xvclByb2ZpbGVPcHRpb24gbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjsKICNlbmRp
ZgogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNw
cAkocmV2aXNpb24gMTc0Nzk1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VTb3VyY2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDEwIEBACiAj
aWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0
aW9uU2VydmljZXMuaD4KICNlbHNlCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5k
YXRpb24uaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZUJsb2NrU2V0Lmg+CiAjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2VQcml2YXRlLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NHSW1hZ2VQcm92aWRlci5oPgogI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgpAQCAtODAsMTAgKzgzLDEwIEBAIHZvaWQg
c2hhcmVkQnVmZmVyUmVsZWFzZSh2b2lkKiBpbmZvKQogfQogI2VuZGlmCiAKLUltYWdlU291cmNl
OjpJbWFnZVNvdXJjZShJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICA6IG1fZGVjb2RlcigwKQorSW1hZ2VTb3VyY2U6
OkltYWdlU291cmNlKEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VT
b3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQorICAgIDogbV9kZWNvZGVyKDApLCBt
X2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQogewotICAgIC8vIEZJWE1FOiBBbHBoYU9wdGlvbiBh
bmQgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gYXJlIGlnbm9yZWQuCisgICAgLy8gRklYTUU6
IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGlzIGlnbm9yZWQuCiB9CiAKIEltYWdlU291cmNl
Ojp+SW1hZ2VTb3VyY2UoKQpAQCAtMzQ4LDYgKzM1MSw1MyBAQCBDR0ltYWdlUmVmIEltYWdlU291
cmNlOjpjcmVhdGVGcmFtZUF0SW5kCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0g
YWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlSW1hZ2VBdEluZGV4KG1fZGVjb2RlciwgaW5kZXgs
IGltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsKS5nZXQoKSkpOwogCiAjaWYgUExB
VEZPUk0oSU9TKQorICAgIENHSW1hZ2VSZWYgcG5nSW1hZ2UgPSBpbWFnZS5nZXQoKTsKKyAgICBD
R0ltYWdlQWxwaGFJbmZvIGFscGhhSW5mbyA9IENHSW1hZ2VHZXRBbHBoYUluZm8ocG5nSW1hZ2Up
OworICAgIC8vIFRoaXMgYXBwbGllcyB0byBub24tcG5nY3J1c2hlZCBQTkdzLiBPbiBpT1MsIGV2
ZW4gd2hlbiB3ZSBzcGVjaWZ5IHRoZSBpbWFnZSB0byBiZSBub3QgcHJlbXVsdGlwbGllZCBDb3Jl
R3JhcGhpY3Mgd2lsbCBzdGlsbCBkbyBhbHBoYSBwcmVtdWx0aXBsaWNhdGlvbi4gVGhpcyBpcyBh
biBpc3N1ZSBiZWNhdXNlIHRoZSBwcmVtdWx0aXBsaWVkIHBpeGVsIGRhdGEgaXMgaW4gaW50ZWdl
ciBmb3JtYXQsIHdoaWNoIG1lYW5zIHdoZW4gd2UgdW5tdWx0aXBseSBsYXRlciAoYmVjYXVzZSB3
ZSBzcGVjaWZ5IHRoZSBpbWFnZSB0byBiZSBub3QgcHJlbXVsdGlwbGllZCkgd2UgbG9zZSBpbmZv
cm1hdGlvbi4gVGhpcyBpcyB2ZXJ5IGJhZCBmb3IgbG93IGFscGhhIHZhbHVlcyAoaS5lIDEvMjU1
KS4KKyAgICBpZiAoQ0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQocG5nSW1hZ2UpID09IDgKKyAg
ICAgICAgJiYgQ0dJbWFnZUdldEJpdHNQZXJQaXhlbChwbmdJbWFnZSkgPT0gMzIKKyAgICAgICAg
JiYgbV9hbHBoYU9wdGlvbiA9PSBBbHBoYU5vdFByZW11bHRpcGxpZWQKKyAgICAgICAgJiYgKGFs
cGhhSW5mbyA9PSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QKKyAgICAgICAgfHwgKGFs
cGhhSW5mbyA9PSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0KSkpIHsKKworICAgICAg
ICAvLyBSZXRyaWV2ZSBub24tcHJlbXVsdGlwbGllZCBQTkcgZGF0YQorICAgICAgICBDRk11dGFi
bGVEaWN0aW9uYXJ5UmVmIHByb3ZpZGVyT3B0aW9ucyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFi
bGUoMCwgMCwgJmtDRkNvcHlTdHJpbmdEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURp
Y3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgICAgIC8vIFRoaXMga2V5IGlzIHdoYXQgbGV0
cyB1cyBnZXQgdGhlIG5vbi1wcmVtdWx0aXBsaWVkIGRhdGEKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5
U2V0VmFsdWUocHJvdmlkZXJPcHRpb25zLCBDRlNUUigia0NHSW1hZ2VCbG9ja0lPU3VyZmFjZU9w
dGltaXplZFJlcXVlc3QiKSwga0NGQm9vbGVhblRydWUpOworICAgICAgICBDR0ltYWdlUHJvdmlk
ZXJSZWYgcHJvdmlkZXIgPSBDR0ltYWdlR2V0SW1hZ2VQcm92aWRlcihpbWFnZS5nZXQoKSk7Cisg
ICAgICAgIENHUmVjdCBwbmdSZWN0ID0geyBDR1BvaW50WmVybywgQ0dJbWFnZVByb3ZpZGVyR2V0
U2l6ZShwcm92aWRlcikgfTsKKyAgICAgICAgQ0dJbWFnZUJsb2NrU2V0UmVmIGJsb2NrU2V0ID0g
Q0dJbWFnZVByb3ZpZGVyQ29weUltYWdlQmxvY2tTZXRXaXRoT3B0aW9ucyhwcm92aWRlciwgcG5n
UmVjdCwgcG5nUmVjdC5zaXplLCBwcm92aWRlck9wdGlvbnMpOworICAgICAgICBBU1NFUlQoQ0dJ
bWFnZUJsb2NrU2V0R2V0Q291bnQoYmxvY2tTZXQpID09IDEpOworCisgICAgICAgIENHSW1hZ2VC
bG9ja1JlZiBibG9jayA9IENHSW1hZ2VCbG9ja1NldEdldEltYWdlQmxvY2soYmxvY2tTZXQsIDAp
OworICAgICAgICBDR1JlY3QgYmxvY2tSZWN0ID0gQ0dJbWFnZUJsb2NrR2V0UmVjdChibG9jayk7
CisgICAgICAgIEFTU0VSVChDR1NpemVFcXVhbFRvU2l6ZShibG9ja1JlY3Quc2l6ZSwgcG5nUmVj
dC5zaXplKSk7CisKKyAgICAgICAgLy8gR2V0IHRoZSBDRkRhdGEgb2YgdGhlIG5vbi1wcmVtdWx0
aXBsaWVkIFBORyBkYXRhCisgICAgICAgIGNvbnN0IFVJbnQ4KiBwbmdEYXRhID0gc3RhdGljX2Nh
c3Q8Y29uc3QgVUludDgqPihDR0ltYWdlQmxvY2tHZXREYXRhKGJsb2NrKSk7CisgICAgICAgIHNp
emVfdCBieXRlc1BlclJvdyA9IENHSW1hZ2VCbG9ja0dldEJ5dGVzUGVyUm93KGJsb2NrKTsKKyAg
ICAgICAgc2l6ZV90IGhlaWdodCA9IENHUmVjdEdldEhlaWdodChibG9ja1JlY3QpOworICAgICAg
ICBzaXplX3Qgd2lkdGggPSBDR1JlY3RHZXRXaWR0aChibG9ja1JlY3QpOworICAgICAgICBDR0Nv
bG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHSW1hZ2VHZXRDb2xvclNwYWNlKHBuZ0ltYWdlKTsK
KyAgICAgICAgc2l6ZV90IGJpdHNQZXJDb21wb25lbnQgPSBDR0ltYWdlR2V0Qml0c1BlckNvbXBv
bmVudChwbmdJbWFnZSk7CisgICAgICAgIHNpemVfdCBiaXRzUGVyUGl4ZWwgPSBDR0ltYWdlR2V0
Qml0c1BlclBpeGVsKHBuZ0ltYWdlKTsKKworICAgICAgICAvLyBUaGUgaW1hZ2UgZm9ybWF0IGdp
dmVuIHRvIHVzIGlzIEJHUkEsIGJ1dCB3ZSByZXByZXNlbnQgb3VyIGltYWdlIGFzIFJHQkEKKyAg
ICAgICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRs
ZSB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0OworICAgICAgICBDRkRhdGFSZWYgZGF0YSA9
IENGRGF0YUNyZWF0ZSgwLCBwbmdEYXRhLCBDR0ltYWdlQmxvY2tHZXRCeXRlc1BlclJvdyhibG9j
aykgKiAoc2l6ZV90KUNHUmVjdEdldEhlaWdodChibG9ja1JlY3QpKTsKKworICAgICAgICAvLyBS
ZWNyZWF0ZSB0aGUgQ0dJbWFnZSBmcm9tIHRoZSBDRkRhdGEKKyAgICAgICAgQ0dEYXRhUHJvdmlk
ZXJSZWYgaW1nRGF0YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGRh
dGEpOworICAgICAgICBDR0ltYWdlUmVsZWFzZShpbWFnZS5sZWFrUmVmKCkpOworICAgICAgICBp
bWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBiaXRzUGVyQ29tcG9u
ZW50LCBiaXRzUGVyUGl4ZWwsIGJ5dGVzUGVyUm93LCBjb2xvclNwYWNlLCBiaXRtYXBJbmZvLCBp
bWdEYXRhUHJvdmlkZXIsIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKwor
ICAgICAgICAvLyBSZWxlYXNlIHJlc291cmNlcworICAgICAgICBDR0ltYWdlQmxvY2tTZXRSZWxl
YXNlKGJsb2NrU2V0KTsKKyAgICAgICAgQ0ZSZWxlYXNlKGltZ0RhdGFQcm92aWRlcik7CisgICAg
ICAgIENGUmVsZWFzZShkYXRhKTsKKyAgICAgICAgQ0ZSZWxlYXNlKHByb3ZpZGVyT3B0aW9ucyk7
CisgICAgfQorCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzExOTg+IC0gQ29yZUdyYXBoaWNz
IGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIgaW4gaU9TIDQuMCB0byBrQ0dJ
bWFnZUNhY2hpbmdUcmFuc2llbnQKICAgICAvLyB3aGljaCBjYXVzZWQgYSBwZXJmb3JtYW5jZSBy
ZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0byBiZSByZXNhbXBsZWQvcmVj
cmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCiAgICAgLy8gQ0dDb250ZXh0RHJhd0ltYWdlLiBX
ZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2VzLiBTZWUgYWxzbyA8cmRhcjov
L3Byb2JsZW0vMTQzNjY3NTU+IC0K
</data>
<flag name="review"
          id="265952"
          type_id="1"
          status="-"
          setter="bfulgham"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241141</attachid>
            <date>2014-11-06 15:55:47 -0800</date>
            <delta_ts>2014-11-06 16:56:28 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>6462</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NTcxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTExLTA2ICBSb2dlciBG
b25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gRG9uJ3QgcHJlbXVs
dGlwbHkgYW5kIHRoZW4gdW4tcHJlbXVsdGlwbHkgUE5HcyB3aGVuIGRlY29kaW5nLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4NDc3LgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RlZCBieSBXZWJH
TCBjb25mb3JtYW5jZSB0ZXN0czoKKyAgICAgICAgY29uZm9ybWFuY2UvY29udGV4dC9wcmVtdWx0
aXBseWFscGhhLXRlc3QuaHRtbAorICAgICAgICBjb25mb3JtYW5jZS90ZXh0dXJlcy9nbC10ZXhp
bWFnZS5odG1sCisKKyAgICAgICAgT24gaU9TIHdoZW4gd2UgdHJ5IHRvIGRlY29kZSBQTkcgaW1h
Z2VzIHdlIHJldHJpZXZlIHRoZSBwcmVtdWx0aXBsaWVkIGluZm9ybWF0aW9uLgorICAgICAgICBJ
ZiB3ZSBvcmlnaW5hbGx5IHNwZWNpZmllZCB0aGUgSW1hZ2VTb3VyY2UgYXMgYmVpbmcgbm90IHBy
ZW11bHRpcGxpZWQgd2UgdGhlbiAKKyAgICAgICAgbGF0ZXIgaGF2ZSB0byB1bi1wcmVtdWx0aXBs
eSwgd2hpY2ggaXMgYSBsb3NzeSBvcGVyYXRpb24uCisgICAgICAgIEl0IGlzIGJldHRlciB0byBy
ZXRyaWV2ZSB0aGUgbm9uLXByZW11bHRpcGxpZWQgaW5mb3JtYXRpb24gaW4gdGhlIGZpcnN0IHBs
YWNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6CisKIDIwMTQtMTEtMDUgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgRGUtdGVtcGxhdGl6ZSBUaW1lcgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCShyZXZp
c2lvbiAxNzQ3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsOCArMTY1LDggQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBOYXRpdmVJbWFnZURlY29kZXJQdHIgbV9kZWNvZGVyOwogCi0jaWYgIVVTRShDRykK
ICAgICBBbHBoYU9wdGlvbiBtX2FscGhhT3B0aW9uOworI2lmICFVU0UoQ0cpCiAgICAgR2FtbWFB
bmRDb2xvclByb2ZpbGVPcHRpb24gbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjsKICNlbmRp
ZgogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNw
cAkocmV2aXNpb24gMTc0Nzk1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VTb3VyY2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDEwIEBACiAj
aWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0
aW9uU2VydmljZXMuaD4KICNlbHNlCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5k
YXRpb24uaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZUJsb2NrU2V0Lmg+CiAjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2VQcml2YXRlLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NHSW1hZ2VQcm92aWRlci5oPgogI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgpAQCAtODAsMTAgKzgzLDEwIEBAIHZvaWQg
c2hhcmVkQnVmZmVyUmVsZWFzZSh2b2lkKiBpbmZvKQogfQogI2VuZGlmCiAKLUltYWdlU291cmNl
OjpJbWFnZVNvdXJjZShJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICA6IG1fZGVjb2RlcigwKQorSW1hZ2VTb3VyY2U6
OkltYWdlU291cmNlKEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VT
b3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQorICAgIDogbV9kZWNvZGVyKDApLCBt
X2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQogewotICAgIC8vIEZJWE1FOiBBbHBoYU9wdGlvbiBh
bmQgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gYXJlIGlnbm9yZWQuCisgICAgLy8gRklYTUU6
IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGlzIGlnbm9yZWQuCiB9CiAKIEltYWdlU291cmNl
Ojp+SW1hZ2VTb3VyY2UoKQpAQCAtMzQ4LDYgKzM1MSw1MyBAQCBDR0ltYWdlUmVmIEltYWdlU291
cmNlOjpjcmVhdGVGcmFtZUF0SW5kCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0g
YWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlSW1hZ2VBdEluZGV4KG1fZGVjb2RlciwgaW5kZXgs
IGltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsKS5nZXQoKSkpOwogCiAjaWYgUExB
VEZPUk0oSU9TKQorICAgIENHSW1hZ2VSZWYgcG5nSW1hZ2UgPSBpbWFnZS5nZXQoKTsKKyAgICBD
R0ltYWdlQWxwaGFJbmZvIGFscGhhSW5mbyA9IENHSW1hZ2VHZXRBbHBoYUluZm8ocG5nSW1hZ2Up
OworICAgIC8vIFRoaXMgYXBwbGllcyB0byBub24tcG5nY3J1c2hlZCBQTkdzLiBPbiBpT1MsIGV2
ZW4gd2hlbiB3ZSBzcGVjaWZ5IHRoZSBpbWFnZSB0byBiZSBub3QgcHJlbXVsdGlwbGllZCBDb3Jl
R3JhcGhpY3Mgd2lsbCBzdGlsbCBkbyBhbHBoYSBwcmVtdWx0aXBsaWNhdGlvbi4gVGhpcyBpcyBh
biBpc3N1ZSBiZWNhdXNlIHRoZSBwcmVtdWx0aXBsaWVkIHBpeGVsIGRhdGEgaXMgaW4gaW50ZWdl
ciBmb3JtYXQsIHdoaWNoIG1lYW5zIHdoZW4gd2UgdW5tdWx0aXBseSBsYXRlciAoYmVjYXVzZSB3
ZSBzcGVjaWZ5IHRoZSBpbWFnZSB0byBiZSBub3QgcHJlbXVsdGlwbGllZCkgd2UgbG9zZSBpbmZv
cm1hdGlvbi4gVGhpcyBpcyB2ZXJ5IGJhZCBmb3IgbG93IGFscGhhIHZhbHVlcyAoaS5lIDEvMjU1
KS4KKyAgICBpZiAoQ0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQocG5nSW1hZ2UpID09IDgKKyAg
ICAgICAgJiYgQ0dJbWFnZUdldEJpdHNQZXJQaXhlbChwbmdJbWFnZSkgPT0gMzIKKyAgICAgICAg
JiYgbV9hbHBoYU9wdGlvbiA9PSBBbHBoYU5vdFByZW11bHRpcGxpZWQKKyAgICAgICAgJiYgKGFs
cGhhSW5mbyA9PSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QKKyAgICAgICAgfHwgKGFs
cGhhSW5mbyA9PSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0KSkpIHsKKworICAgICAg
ICAvLyBSZXRyaWV2ZSBub24tcHJlbXVsdGlwbGllZCBQTkcgZGF0YQorICAgICAgICBDRk11dGFi
bGVEaWN0aW9uYXJ5UmVmIHByb3ZpZGVyT3B0aW9ucyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFi
bGUoMCwgMCwgJmtDRkNvcHlTdHJpbmdEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURp
Y3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgICAgIC8vIFRoaXMga2V5IGlzIHdoYXQgbGV0
cyB1cyBnZXQgdGhlIG5vbi1wcmVtdWx0aXBsaWVkIGRhdGEKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5
U2V0VmFsdWUocHJvdmlkZXJPcHRpb25zLCBDRlNUUigia0NHSW1hZ2VCbG9ja0lPU3VyZmFjZU9w
dGltaXplZFJlcXVlc3QiKSwga0NGQm9vbGVhblRydWUpOworICAgICAgICBDR0ltYWdlUHJvdmlk
ZXJSZWYgcHJvdmlkZXIgPSBDR0ltYWdlR2V0SW1hZ2VQcm92aWRlcihpbWFnZS5nZXQoKSk7Cisg
ICAgICAgIENHUmVjdCBwbmdSZWN0ID0geyBDR1BvaW50WmVybywgQ0dJbWFnZVByb3ZpZGVyR2V0
U2l6ZShwcm92aWRlcikgfTsKKyAgICAgICAgQ0dJbWFnZUJsb2NrU2V0UmVmIGJsb2NrU2V0ID0g
Q0dJbWFnZVByb3ZpZGVyQ29weUltYWdlQmxvY2tTZXRXaXRoT3B0aW9ucyhwcm92aWRlciwgcG5n
UmVjdCwgcG5nUmVjdC5zaXplLCBwcm92aWRlck9wdGlvbnMpOworICAgICAgICBBU1NFUlQoQ0dJ
bWFnZUJsb2NrU2V0R2V0Q291bnQoYmxvY2tTZXQpID09IDEpOworCisgICAgICAgIENHSW1hZ2VC
bG9ja1JlZiBibG9jayA9IENHSW1hZ2VCbG9ja1NldEdldEltYWdlQmxvY2soYmxvY2tTZXQsIDAp
OworICAgICAgICBDR1JlY3QgYmxvY2tSZWN0ID0gQ0dJbWFnZUJsb2NrR2V0UmVjdChibG9jayk7
CisgICAgICAgIEFTU0VSVChDR1NpemVFcXVhbFRvU2l6ZShibG9ja1JlY3Quc2l6ZSwgcG5nUmVj
dC5zaXplKSk7CisKKyAgICAgICAgLy8gR2V0IHRoZSBDRkRhdGEgb2YgdGhlIG5vbi1wcmVtdWx0
aXBsaWVkIFBORyBkYXRhCisgICAgICAgIGNvbnN0IFVJbnQ4KiBwbmdEYXRhID0gc3RhdGljX2Nh
c3Q8Y29uc3QgVUludDgqPihDR0ltYWdlQmxvY2tHZXREYXRhKGJsb2NrKSk7CisgICAgICAgIHNp
emVfdCBieXRlc1BlclJvdyA9IENHSW1hZ2VCbG9ja0dldEJ5dGVzUGVyUm93KGJsb2NrKTsKKyAg
ICAgICAgc2l6ZV90IGhlaWdodCA9IENHUmVjdEdldEhlaWdodChibG9ja1JlY3QpOworICAgICAg
ICBzaXplX3Qgd2lkdGggPSBDR1JlY3RHZXRXaWR0aChibG9ja1JlY3QpOworICAgICAgICBDR0Nv
bG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHSW1hZ2VHZXRDb2xvclNwYWNlKHBuZ0ltYWdlKTsK
KyAgICAgICAgc2l6ZV90IGJpdHNQZXJDb21wb25lbnQgPSBDR0ltYWdlR2V0Qml0c1BlckNvbXBv
bmVudChwbmdJbWFnZSk7CisgICAgICAgIHNpemVfdCBiaXRzUGVyUGl4ZWwgPSBDR0ltYWdlR2V0
Qml0c1BlclBpeGVsKHBuZ0ltYWdlKTsKKworICAgICAgICAvLyBUaGUgaW1hZ2UgZm9ybWF0IGdp
dmVuIHRvIHVzIGlzIEJHUkEsIGJ1dCB3ZSByZXByZXNlbnQgb3VyIGltYWdlIGFzIFJHQkEKKyAg
ICAgICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRs
ZSB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0OworICAgICAgICBDRkRhdGFSZWYgZGF0YSA9
IENGRGF0YUNyZWF0ZSgwLCBwbmdEYXRhLCBDR0ltYWdlQmxvY2tHZXRCeXRlc1BlclJvdyhibG9j
aykgKiAoc2l6ZV90KUNHUmVjdEdldEhlaWdodChibG9ja1JlY3QpKTsKKworICAgICAgICAvLyBS
ZWNyZWF0ZSB0aGUgQ0dJbWFnZSBmcm9tIHRoZSBDRkRhdGEKKyAgICAgICAgQ0dEYXRhUHJvdmlk
ZXJSZWYgaW1nRGF0YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGRh
dGEpOworICAgICAgICBDR0ltYWdlUmVsZWFzZShpbWFnZS5sZWFrUmVmKCkpOworICAgICAgICBp
bWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBiaXRzUGVyQ29tcG9u
ZW50LCBiaXRzUGVyUGl4ZWwsIGJ5dGVzUGVyUm93LCBjb2xvclNwYWNlLCBiaXRtYXBJbmZvLCBp
bWdEYXRhUHJvdmlkZXIsIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKwor
ICAgICAgICAvLyBSZWxlYXNlIHJlc291cmNlcworICAgICAgICBDR0ltYWdlQmxvY2tTZXRSZWxl
YXNlKGJsb2NrU2V0KTsKKyAgICAgICAgQ0ZSZWxlYXNlKGltZ0RhdGFQcm92aWRlcik7CisgICAg
ICAgIENGUmVsZWFzZShkYXRhKTsKKyAgICAgICAgQ0ZSZWxlYXNlKHByb3ZpZGVyT3B0aW9ucyk7
CisgICAgfQorCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzExOTg+IC0gQ29yZUdyYXBoaWNz
IGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIgaW4gaU9TIDQuMCB0byBrQ0dJ
bWFnZUNhY2hpbmdUcmFuc2llbnQKICAgICAvLyB3aGljaCBjYXVzZWQgYSBwZXJmb3JtYW5jZSBy
ZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0byBiZSByZXNhbXBsZWQvcmVj
cmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCiAgICAgLy8gQ0dDb250ZXh0RHJhd0ltYWdlLiBX
ZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2VzLiBTZWUgYWxzbyA8cmRhcjov
L3Byb2JsZW0vMTQzNjY3NTU+IC0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241146</attachid>
            <date>2014-11-06 16:56:28 -0800</date>
            <delta_ts>2014-11-06 17:30:11 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>6354</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NTcxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTExLTA2ICBSb2dlciBG
b25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gRG9uJ3QgcHJlbXVs
dGlwbHkgYW5kIHRoZW4gdW4tcHJlbXVsdGlwbHkgUE5HcyB3aGVuIGRlY29kaW5nLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4NDc3LgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RlZCBieSBXZWJH
TCBjb25mb3JtYW5jZSB0ZXN0czoKKyAgICAgICAgY29uZm9ybWFuY2UvY29udGV4dC9wcmVtdWx0
aXBseWFscGhhLXRlc3QuaHRtbAorICAgICAgICBjb25mb3JtYW5jZS90ZXh0dXJlcy9nbC10ZXhp
bWFnZS5odG1sCisKKyAgICAgICAgT24gaU9TIHdoZW4gd2UgdHJ5IHRvIGRlY29kZSBQTkcgaW1h
Z2VzIHdlIHJldHJpZXZlIHRoZSBwcmVtdWx0aXBsaWVkIGluZm9ybWF0aW9uLgorICAgICAgICBJ
ZiB3ZSBvcmlnaW5hbGx5IHNwZWNpZmllZCB0aGUgSW1hZ2VTb3VyY2UgYXMgYmVpbmcgbm90IHBy
ZW11bHRpcGxpZWQgd2UgdGhlbiAKKyAgICAgICAgbGF0ZXIgaGF2ZSB0byB1bi1wcmVtdWx0aXBs
eSwgd2hpY2ggaXMgYSBsb3NzeSBvcGVyYXRpb24uCisgICAgICAgIEl0IGlzIGJldHRlciB0byBy
ZXRyaWV2ZSB0aGUgbm9uLXByZW11bHRpcGxpZWQgaW5mb3JtYXRpb24gaW4gdGhlIGZpcnN0IHBs
YWNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6CisKIDIwMTQtMTEtMDUgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgRGUtdGVtcGxhdGl6ZSBUaW1lcgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCShyZXZp
c2lvbiAxNzQ3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsOCArMTY1LDggQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBOYXRpdmVJbWFnZURlY29kZXJQdHIgbV9kZWNvZGVyOwogCi0jaWYgIVVTRShDRykK
ICAgICBBbHBoYU9wdGlvbiBtX2FscGhhT3B0aW9uOworI2lmICFVU0UoQ0cpCiAgICAgR2FtbWFB
bmRDb2xvclByb2ZpbGVPcHRpb24gbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjsKICNlbmRp
ZgogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNw
cAkocmV2aXNpb24gMTc0Nzk1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VTb3VyY2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDEwIEBACiAj
aWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0
aW9uU2VydmljZXMuaD4KICNlbHNlCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5k
YXRpb24uaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZUJsb2NrU2V0Lmg+CiAjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2VQcml2YXRlLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NHSW1hZ2VQcm92aWRlci5oPgogI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgpAQCAtODAsMTAgKzgzLDExIEBAIHZvaWQg
c2hhcmVkQnVmZmVyUmVsZWFzZSh2b2lkKiBpbmZvKQogfQogI2VuZGlmCiAKLUltYWdlU291cmNl
OjpJbWFnZVNvdXJjZShJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbikKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNv
dXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbikKICAgICA6IG1fZGVjb2RlcigwKQogewotICAgIC8vIEZJWE1FOiBBbHBo
YU9wdGlvbiBhbmQgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gYXJlIGlnbm9yZWQuCisgICAg
bV9hbHBoYU9wdGlvbiA9IGFscGhhT3B0aW9uOworICAgIC8vIEZJWE1FOiBHYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbiBpcyBpZ25vcmVkLgogfQogCiBJbWFnZVNvdXJjZTo6fkltYWdlU291cmNl
KCkKQEAgLTM0OCw2ICszNTIsNDcgQEAgQ0dJbWFnZVJlZiBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJh
bWVBdEluZAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFn
ZVNvdXJjZUNyZWF0ZUltYWdlQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9w
dGlvbnMoc3Vic2FtcGxpbmdMZXZlbCkuZ2V0KCkpKTsKIAogI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBDR0ltYWdlUmVmIHBuZ0ltYWdlID0gaW1hZ2UuZ2V0KCk7CisgICAgQ0dJbWFnZUFscGhhSW5m
byBhbHBoYUluZm8gPSBDR0ltYWdlR2V0QWxwaGFJbmZvKHBuZ0ltYWdlKTsKKyAgICAvLyBUaGlz
IGFwcGxpZXMgdG8gbm9uLXBuZ2NydXNoZWQgUE5Hcy4gT24gaU9TLCBldmVuIHdoZW4gd2Ugc3Bl
Y2lmeSB0aGUgaW1hZ2UgdG8gYmUgbm90IHByZW11bHRpcGxpZWQgQ29yZUdyYXBoaWNzIHdpbGwg
c3RpbGwgZG8gYWxwaGEgcHJlbXVsdGlwbGljYXRpb24uIFRoaXMgaXMgYW4gaXNzdWUgYmVjYXVz
ZSB0aGUgcHJlbXVsdGlwbGllZCBwaXhlbCBkYXRhIGlzIGluIGludGVnZXIgZm9ybWF0LCB3aGlj
aCBtZWFucyB3aGVuIHdlIHVubXVsdGlwbHkgbGF0ZXIgKGJlY2F1c2Ugd2Ugc3BlY2lmeSB0aGUg
aW1hZ2UgdG8gYmUgbm90IHByZW11bHRpcGxpZWQpIHdlIGxvc2UgaW5mb3JtYXRpb24uIFRoaXMg
aXMgdmVyeSBiYWQgZm9yIGxvdyBhbHBoYSB2YWx1ZXMgKGkuZSAxLzI1NSkuCisgICAgaWYgKENH
SW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KHBuZ0ltYWdlKSA9PSA4CisgICAgICAgICYmIENHSW1h
Z2VHZXRCaXRzUGVyUGl4ZWwocG5nSW1hZ2UpID09IDMyCisgICAgICAgICYmIG1fYWxwaGFPcHRp
b24gPT0gQWxwaGFOb3RQcmVtdWx0aXBsaWVkCisgICAgICAgICYmIChhbHBoYUluZm8gPT0ga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0CisgICAgICAgIHx8IChhbHBoYUluZm8gPT0ga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkpKSB7CisKKyAgICAgICAgLy8gUmV0cmlldmUg
bm9uLXByZW11bHRpcGxpZWQgUE5HIGRhdGEKKyAgICAgICAgUmV0YWluUHRyPENGTXV0YWJsZURp
Y3Rpb25hcnlSZWY+IHByb3ZpZGVyT3B0aW9ucyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
TXV0YWJsZSgwLCAwLCAma0NGQ29weVN0cmluZ0RpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgICAgIC8vIFRoaXMga2V5IGlzIHdo
YXQgbGV0cyB1cyBnZXQgdGhlIG5vbi1wcmVtdWx0aXBsaWVkIGRhdGEKKyAgICAgICAgQ0ZEaWN0
aW9uYXJ5U2V0VmFsdWUocHJvdmlkZXJPcHRpb25zLmdldCgpLCBDRlNUUigia0NHSW1hZ2VCbG9j
a0lPU3VyZmFjZU9wdGltaXplZFJlcXVlc3QiKSwga0NGQm9vbGVhblRydWUpOworICAgICAgICBD
R0ltYWdlUHJvdmlkZXJSZWYgcHJvdmlkZXIgPSBDR0ltYWdlR2V0SW1hZ2VQcm92aWRlcihwbmdJ
bWFnZSk7CisgICAgICAgIENHUmVjdCBwbmdSZWN0ID0geyBDR1BvaW50WmVybywgQ0dJbWFnZVBy
b3ZpZGVyR2V0U2l6ZShwcm92aWRlcikgfTsKKyAgICAgICAgQ0dJbWFnZUJsb2NrU2V0UmVmIGJs
b2NrU2V0ID0gQ0dJbWFnZVByb3ZpZGVyQ29weUltYWdlQmxvY2tTZXRXaXRoT3B0aW9ucyhwcm92
aWRlciwgcG5nUmVjdCwgcG5nUmVjdC5zaXplLCBwcm92aWRlck9wdGlvbnMuZ2V0KCkpOworICAg
ICAgICBBU1NFUlQoQ0dJbWFnZUJsb2NrU2V0R2V0Q291bnQoYmxvY2tTZXQpID09IDEpOworCisg
ICAgICAgIENHSW1hZ2VCbG9ja1JlZiBibG9jayA9IENHSW1hZ2VCbG9ja1NldEdldEltYWdlQmxv
Y2soYmxvY2tTZXQsIDApOworICAgICAgICBDR1JlY3QgYmxvY2tSZWN0ID0gQ0dJbWFnZUJsb2Nr
R2V0UmVjdChibG9jayk7CisgICAgICAgIEFTU0VSVChDR1NpemVFcXVhbFRvU2l6ZShibG9ja1Jl
Y3Quc2l6ZSwgcG5nUmVjdC5zaXplKSk7CisKKyAgICAgICAgLy8gR2V0IHRoZSBDRkRhdGEgb2Yg
dGhlIG5vbi1wcmVtdWx0aXBsaWVkIFBORyBkYXRhCisgICAgICAgIGNvbnN0IFVJbnQ4KiBwbmdE
YXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgVUludDgqPihDR0ltYWdlQmxvY2tHZXREYXRhKGJsb2Nr
KSk7CisgICAgICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENHSW1hZ2VCbG9ja0dldEJ5dGVzUGVy
Um93KGJsb2NrKTsKKyAgICAgICAgc2l6ZV90IGhlaWdodCA9IENHUmVjdEdldEhlaWdodChibG9j
a1JlY3QpOworICAgICAgICBzaXplX3Qgd2lkdGggPSBDR1JlY3RHZXRXaWR0aChibG9ja1JlY3Qp
OworICAgICAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHSW1hZ2VHZXRDb2xvclNw
YWNlKHBuZ0ltYWdlKTsKKyAgICAgICAgc2l6ZV90IGJpdHNQZXJDb21wb25lbnQgPSBDR0ltYWdl
R2V0Qml0c1BlckNvbXBvbmVudChwbmdJbWFnZSk7CisgICAgICAgIHNpemVfdCBiaXRzUGVyUGl4
ZWwgPSBDR0ltYWdlR2V0Qml0c1BlclBpeGVsKHBuZ0ltYWdlKTsKKworICAgICAgICAvLyBUaGUg
aW1hZ2UgZm9ybWF0IGdpdmVuIHRvIHVzIGlzIEJHUkEsIGJ1dCB3ZSByZXByZXNlbnQgb3VyIGlt
YWdlIGFzIFJHQkEKKyAgICAgICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBC
eXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0OworICAgICAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUoMCwgcG5nRGF0
YSwgQ0dJbWFnZUJsb2NrR2V0Qnl0ZXNQZXJSb3coYmxvY2spICogKHNpemVfdClDR1JlY3RHZXRI
ZWlnaHQoYmxvY2tSZWN0KSkpOworCisgICAgICAgIC8vIFJlY3JlYXRlIHRoZSBDR0ltYWdlIGZy
b20gdGhlIENGRGF0YQorICAgICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGltZ0Rh
dGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGRhdGEu
Z2V0KCkpKTsKKyAgICAgICAgQ0dJbWFnZVJlbGVhc2UoaW1hZ2UubGVha1JlZigpKTsKKyAgICAg
ICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUod2lkdGgsIGhlaWdodCwgYml0c1BlckNv
bXBvbmVudCwgYml0c1BlclBpeGVsLCBieXRlc1BlclJvdywgY29sb3JTcGFjZSwgYml0bWFwSW5m
bywgaW1nRGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZh
dWx0KSk7CisgICAgfQorCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzExOTg+IC0gQ29yZUdy
YXBoaWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIgaW4gaU9TIDQuMCB0
byBrQ0dJbWFnZUNhY2hpbmdUcmFuc2llbnQKICAgICAvLyB3aGljaCBjYXVzZWQgYSBwZXJmb3Jt
YW5jZSByZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0byBiZSByZXNhbXBs
ZWQvcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCiAgICAgLy8gQ0dDb250ZXh0RHJhd0lt
YWdlLiBXZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2VzLiBTZWUgYWxzbyA8
cmRhcjovL3Byb2JsZW0vMTQzNjY3NTU+IC0K
</data>
<flag name="review"
          id="265965"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>