<?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>45249</bug_id>
          
          <creation_ts>2010-09-05 22:20:58 -0700</creation_ts>
          <short_desc>Add cubic curve classifier</short_desc>
          <delta_ts>2010-09-09 12:40:11 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>44729</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>senorblanco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>274480</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-05 22:20:58 -0700</bug_when>
    <thetext>As part of the GPU accelerated path rendering algorithm being added in https://bugs.webkit.org/show_bug.cgi?id=44729 , the code which classifies cubic curves needs to be integrated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274484</commentid>
    <comment_count>1</comment_count>
      <attachid>66608</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-05 22:37:35 -0700</bug_when>
    <thetext>Created attachment 66608
Patch

From the ChangeLog:

Adding the cubic curve classification algorithm per the GPU Gems 3 chapter. No tests yet; will be tested in conjunction with later code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276032</commentid>
    <comment_count>2</comment_count>
      <attachid>66608</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-08 13:40:23 -0700</bug_when>
    <thetext>Comment on attachment 66608
Patch

Looks good overall, r- for the nits below.

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

&gt; WebCore/platform/graphics/gpu/LoopBlinnClassifier.cpp:42
&gt; +LoopBlinnClassifier::Result LoopBlinnClassifier::classify(const FloatPoint&amp; c0,
&gt; +                                                          const FloatPoint&amp; c1,
&gt; +                                                          const FloatPoint&amp; c2,
&gt; +                                                          const FloatPoint&amp; c3)
&gt; +{
&gt; +    // Consult the chapter for the definitions of the following
&gt; +    // (terse) variable names.
Could we add a link to the algorithm itself somewhere?

&gt; WebCore/platform/graphics/gpu/LoopBlinnClassifier.cpp:74
&gt; +    float discr = d1 * d1 * term0;
This should be discriminant.

&gt; WebCore/platform/graphics/gpu/LoopBlinnClassifier.cpp:84
&gt; +    d1 = roundToZero(d1);
&gt; +    d2 = roundToZero(d2);
&gt; +    d3 = roundToZero(d3);
&gt; +    discr = roundToZero(discr);
Have these declare the namespace explicitly.

&gt; WebCore/platform/graphics/gpu/LoopBlinnClassifier.h:63
&gt; +        float d1() const { return m_d1; }
&gt; +        float d2() const { return m_d2; }
&gt; +        float d3() const { return m_d3; }
Please add a comment indicating what these mean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276248</commentid>
    <comment_count>3</comment_count>
      <attachid>66984</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-08 18:28:46 -0700</bug_when>
    <thetext>Created attachment 66984
Revised patch

Addressed code review feedback above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276250</commentid>
    <comment_count>4</comment_count>
      <attachid>66608</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-08 18:29:51 -0700</bug_when>
    <thetext>Comment on attachment 66608
Patch

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

&gt; WebCore/platform/graphics/gpu/LoopBlinnClassifier.cpp:42
&gt; +    // (terse) variable names.
Added link in the header.

&gt; WebCore/platform/graphics/gpu/LoopBlinnClassifier.cpp:74
&gt; +    float discr = d1 * d1 * term0;
Done.

&gt; WebCore/platform/graphics/gpu/LoopBlinnClassifier.cpp:84
&gt; +    discr = roundToZero(discr);
Now explicitly using the functions from LoopBlinnMathUtils.

&gt; WebCore/platform/graphics/gpu/LoopBlinnClassifier.h:63
&gt; +        float d3() const { return m_d3; }
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276283</commentid>
    <comment_count>5</comment_count>
      <attachid>66984</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-08 19:57:18 -0700</bug_when>
    <thetext>Comment on attachment 66984
Revised patch

Cool!  R=me

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

&gt; WebCore/platform/graphics/gpu/LoopBlinnClassifier.cpp:90
&gt; +    if (approxEqual(b0, b1)
&gt; +        &amp;&amp; approxEqual(b0, b2)
&gt; +        &amp;&amp; approxEqual(b0, b3)) {
nit: this could be on one line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276643</commentid>
    <comment_count>6</comment_count>
      <attachid>67074</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-09 11:54:18 -0700</bug_when>
    <thetext>Created attachment 67074
Revised patch

It turns out that while converting this code to use FloatPoint3D I introduced a regression; the 2D points are considered to be homogeneous, meaning that during conversion to 3D their &quot;z&quot; coordinate (actually the &quot;w&quot; coordinate in an (x, y, w) triplet) needs to be set to 1.0. Please re-review. Also fixed formatting nit above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276646</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-09 11:58:11 -0700</bug_when>
    <thetext>Attachment 67074 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/gpu/LoopBlinnClassifier.cpp:92:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276662</commentid>
    <comment_count>8</comment_count>
      <attachid>67074</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-09 12:21:46 -0700</bug_when>
    <thetext>Comment on attachment 67074
Revised patch

The style error is legit, please fix.

Otherwise R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276668</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-09 12:31:39 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 67074 [details])
&gt; The style error is legit, please fix.

Will fix upon landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276678</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-09 12:40:11 -0700</bug_when>
    <thetext>Committed r67103: &lt;http://trac.webkit.org/changeset/67103&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66608</attachid>
            <date>2010-09-05 22:37:35 -0700</date>
            <delta_ts>2010-09-08 18:29:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>classifier.patch</filename>
            <type>text/plain</type>
            <size>9301</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjgwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTAtMDktMDUgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBjdWJpYyBjdXJ2ZSBjbGFzc2lmaWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NTI0OQorCisgICAgICAgIEFkZGluZyB0aGUgY3ViaWMgY3VydmUg
Y2xhc3NpZmljYXRpb24gYWxnb3JpdGhtIHBlciB0aGUgR1BVIEdlbXMgMworICAgICAgICBjaGFw
dGVyLiBObyB0ZXN0cyB5ZXQ7IHdpbGwgYmUgdGVzdGVkIGluIGNvbmp1bmN0aW9uIHdpdGggbGF0
ZXIgY29kZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFz
c2lmaWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5DbGFzc2lmaWVy
OjpjbGFzc2lmeSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNs
YXNzaWZpZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5DbGFzc2lmaWVy
OjpSZXN1bHQ6OlJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5DbGFzc2lmaWVy
OjpSZXN1bHQ6OmN1cnZlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5DbGFzc2lm
aWVyOjpSZXN1bHQ6OmQxKToKKyAgICAgICAgKFdlYkNvcmU6Okxvb3BCbGlubkNsYXNzaWZpZXI6
OlJlc3VsdDo6ZDIpOgorICAgICAgICAoV2ViQ29yZTo6TG9vcEJsaW5uQ2xhc3NpZmllcjo6UmVz
dWx0OjpkMyk6CisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5DbGFzc2lmaWVyOjpMb29wQmxp
bm5DbGFzc2lmaWVyKToKKwogMjAxMC0wOS0wNSAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ2xhc3NpZmllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ2xhc3NpZmllci5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxp
bm5DbGFzc2lmaWVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb29wQmxpbm5DbGFzc2lmaWVyLmgiCisK
KyNpbmNsdWRlICJMb29wQmxpbm5NYXRoVXRpbHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit1c2luZyBuYW1lc3BhY2UgTG9vcEJsaW5uTWF0aFV0aWxzOworCitMb29wQmxpbm5DbGFzc2lm
aWVyOjpSZXN1bHQgTG9vcEJsaW5uQ2xhc3NpZmllcjo6Y2xhc3NpZnkoY29uc3QgRmxvYXRQb2lu
dCYgYzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYzEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYzIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgYzMpCit7CisgICAgLy8gQ29uc3VsdCB0aGUgY2hhcHRlciBmb3Ig
dGhlIGRlZmluaXRpb25zIG9mIHRoZSBmb2xsb3dpbmcKKyAgICAvLyAodGVyc2UpIHZhcmlhYmxl
IG5hbWVzLgorICAgIEZsb2F0UG9pbnQzRCBiMChjMCk7CisgICAgRmxvYXRQb2ludDNEIGIxKGMx
KTsKKyAgICBGbG9hdFBvaW50M0QgYjIoYzIpOworICAgIEZsb2F0UG9pbnQzRCBiMyhjMyk7CisK
KyAgICAvLyBDb21wdXRlIGExLi5hMy4KKyAgICBmbG9hdCBhMSA9IGIwICogYjMuY3Jvc3MoYjIp
OworICAgIGZsb2F0IGEyID0gYjEgKiBiMC5jcm9zcyhiMyk7CisgICAgZmxvYXQgYTMgPSBiMiAq
IGIxLmNyb3NzKGIwKTsKKworICAgIC8vIENvbXB1dGUgZDEuLmQzLgorICAgIGZsb2F0IGQxID0g
YTEgLSAyICogYTIgKyAzICogYTM7CisgICAgZmxvYXQgZDIgPSAtYTIgKyAzICogYTM7CisgICAg
ZmxvYXQgZDMgPSAzICogYTM7CisKKyAgICAvLyBFeHBlcmltZW50YXRpb24gaGFzIHNob3duIHRo
YXQgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgY29tcHV0ZWQKKyAgICAvLyBmcm9tIHRoZXNlIHZh
bHVlcyBxdWlja2x5IGJlY29tZSBodWdlLCBsZWFkaW5nIHRvIHJvdW5kb2ZmIGVycm9ycworICAg
IC8vIGFuZCBhcnRpZmFjdHMgaW4gdGhlIHNoYWRlci4gSXQgdHVybnMgb3V0IHRoYXQgaWYgd2Ug
bm9ybWFsaXplCisgICAgLy8gdGhlIHZlY3RvciBkZWZpbmVkIGJ5IChkMSwgZDIsIGQzKSwgdGhp
cyBmaXhlcyB0aGUgcHJvYmxlbSBvZiB0aGUKKyAgICAvLyB0ZXh0dXJlIGNvb3JkaW5hdGVzIGdl
dHRpbmcgdG9vIGxhcmdlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZQorICAgIC8vIGNsYXNzaWZpY2F0
aW9uIHJlc3VsdHMuCisgICAgRmxvYXRQb2ludDNEIG5kKGQxLCBkMiwgZDMpOworICAgIG5kLm5v
cm1hbGl6ZSgpOworICAgIGQxID0gbmQueCgpOworICAgIGQyID0gbmQueSgpOworICAgIGQzID0g
bmQueigpOworCisgICAgLy8gQ29tcHV0ZSB0aGUgZGlzY3JpbWluYW50LgorICAgIC8vIHRlcm0w
IGlzIGEgY29tbW9uIHRlcm0gaW4gdGhlIGNvbXB1dGF0aW9uIHdoaWNoIGhlbHBzIGRlY2lkZQor
ICAgIC8vIHdoaWNoIHdheSB0byBjbGFzc2lmeSB0aGUgY3VzcCBjYXNlOiBhcyBzZXJwZW50aW5l
IG9yIGxvb3AuCisgICAgZmxvYXQgdGVybTAgPSAoMyAqIGQyICogZDIgLSA0ICogZDEgKiBkMyk7
CisgICAgZmxvYXQgZGlzY3IgPSBkMSAqIGQxICogdGVybTA7CisKKyAgICAvLyBFeHBlcmltZW50
YXRpb24gaGFzIGFsc28gc2hvd24gdGhhdCB3aGVuIHRoZSBjbGFzc2lmaWNhdGlvbiBpcworICAg
IC8vIG5lYXIgdGhlIGJvdW5kYXJ5IGJldHdlZW4gb25lIGN1cnZlIHR5cGUgYW5kIGFub3RoZXIs
IHRoZSBzaGFkZXIKKyAgICAvLyBiZWNvbWVzIG51bWVyaWNhbGx5IHVuc3RhYmxlLCBwYXJ0aWN1
bGFybHkgd2l0aCB0aGUgY3VzcCBjYXNlLgorICAgIC8vIENvcnJlY3QgZm9yIHRoaXMgYnkgcm91
bmRpbmcgZDEuLmQzIGFuZCB0aGUgZGlzY3JpbWluYW50IHRvIHplcm8KKyAgICAvLyB3aGVuIHRo
ZXkgZ2V0IG5lYXIgaXQuCisgICAgZDEgPSByb3VuZFRvWmVybyhkMSk7CisgICAgZDIgPSByb3Vu
ZFRvWmVybyhkMik7CisgICAgZDMgPSByb3VuZFRvWmVybyhkMyk7CisgICAgZGlzY3IgPSByb3Vu
ZFRvWmVybyhkaXNjcik7CisKKyAgICAvLyBEbyB0aGUgY2xhc3NpZmljYXRpb24uCisgICAgaWYg
KGFwcHJveEVxdWFsKGIwLCBiMSkKKyAgICAgICAgJiYgYXBwcm94RXF1YWwoYjAsIGIyKQorICAg
ICAgICAmJiBhcHByb3hFcXVhbChiMCwgYjMpKSB7CisgICAgICAgIHJldHVybiBSZXN1bHQoa1Bv
aW50LCBkMSwgZDIsIGQzKTsKKyAgICB9CisKKyAgICBpZiAoIWRpc2NyKSB7CisgICAgICAgIGlm
ICghZDEgJiYgIWQyKSB7CisgICAgICAgICAgICBpZiAoIWQzKQorICAgICAgICAgICAgICAgIHJl
dHVybiBSZXN1bHQoa0xpbmUsIGQxLCBkMiwgZDMpOworICAgICAgICAgICAgcmV0dXJuIFJlc3Vs
dChrUXVhZHJhdGljLCBkMSwgZDIsIGQzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZDEp
CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0KGtDdXNwLCBkMSwgZDIsIGQzKTsKKworICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBib3VuZGFyeSBjYXNlIGRlc2NyaWJlZCBpbiBMb29wIGFuZCBCbGlu
bidzCisgICAgICAgIC8vIFNJR0dSQVBIICcwNSBwYXBlciBvZiBhIGN1c3Agd2l0aCBpbmZsZWN0
aW9uIGF0IGluZmluaXR5LgorICAgICAgICAvLyBCZWNhdXNlIHRlcm0wIG1pZ2h0IG5vdCBiZSBl
eGFjdGx5IDAsIHdlIGRlY2lkZSBiZXR3ZWVuIHVzaW5nCisgICAgICAgIC8vIHRoZSBzZXJwZW50
aW5lIGFuZCBsb29wIGNhc2VzIGRlcGVuZGluZyBvbiBpdHMgc2lnbiB0byBhdm9pZAorICAgICAg
ICAvLyB0YWtpbmcgdGhlIHNxdWFyZSByb290IG9mIGEgbmVnYXRpdmUgbnVtYmVyIHdoZW4gY29t
cHV0aW5nIHRoZQorICAgICAgICAvLyBjdWJpYyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAgICAg
ICBpZiAodGVybTAgPCAwKQorICAgICAgICAgICAgcmV0dXJuIFJlc3VsdChrTG9vcCwgZDEsIGQy
LCBkMyk7CisKKyAgICAgICAgcmV0dXJuIFJlc3VsdChrU2VycGVudGluZSwgZDEsIGQyLCBkMyk7
CisgICAgfQorCisgICAgaWYgKGRpc2NyID4gMCkKKyAgICAgICAgcmV0dXJuIFJlc3VsdChrU2Vy
cGVudGluZSwgZDEsIGQyLCBkMyk7CisKKyAgICAvLyBkaXNjciA8IDAKKyAgICByZXR1cm4gUmVz
dWx0KGtMb29wLCBkMSwgZDIsIGQzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ2xhc3NpZmllci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNsYXNz
aWZpZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xv
b3BCbGlubkNsYXNzaWZpZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIEN1YmljIGN1cnZlIGNsYXNzaWZpY2F0aW9uIGFsZ29yaXRobSBmcm9tICJSZW5kZXJpbmcg
VmVjdG9yIEFydCBvbgorLy8gdGhlIEdQVSIgYnkgTG9vcCBhbmQgQmxpbm4sIEdQVSBHZW1zIDMs
IENoYXB0ZXIgMjUuCisKKyNpZm5kZWYgTG9vcEJsaW5uQ2xhc3NpZmllcl9oCisjZGVmaW5lIExv
b3BCbGlubkNsYXNzaWZpZXJfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKKworLy8gQ2xhc3NpZmllcyBj
dWJpYyBjdXJ2ZXMgaW50byBzcGVjaWZpYyB0eXBlcy4KK2NsYXNzIExvb3BCbGlubkNsYXNzaWZp
ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIC8vIFRoZSB0eXBlcyBvZiBj
dWJpYyBjdXJ2ZXMuCisgICAgZW51bSBDdXJ2ZVR5cGUgeworICAgICAgICBrU2VycGVudGluZSwK
KyAgICAgICAga0N1c3AsCisgICAgICAgIGtMb29wLAorICAgICAgICBrUXVhZHJhdGljLAorICAg
ICAgICBrTGluZSwKKyAgICAgICAga1BvaW50CisgICAgfTsKKworICAgIC8vIFRoZSByZXN1bHQg
b2YgdGhlIGNsYXNzaWZpZXIuCisgICAgY2xhc3MgUmVzdWx0IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFJlc3VsdChDdXJ2ZVR5cGUgY3VydmVUeXBlLCBmbG9hdCBkMSwgZmxvYXQgZDIsIGZsb2F0
IGQzKQorICAgICAgICAgICAgOiBtX2N1cnZlVHlwZShjdXJ2ZVR5cGUpCisgICAgICAgICAgICAs
IG1fZDEoZDEpCisgICAgICAgICAgICAsIG1fZDIoZDIpCisgICAgICAgICAgICAsIG1fZDMoZDMp
IHsgfQorCisgICAgICAgIEN1cnZlVHlwZSBjdXJ2ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2N1
cnZlVHlwZTsgfQorICAgICAgICBmbG9hdCBkMSgpIGNvbnN0IHsgcmV0dXJuIG1fZDE7IH0KKyAg
ICAgICAgZmxvYXQgZDIoKSBjb25zdCB7IHJldHVybiBtX2QyOyB9CisgICAgICAgIGZsb2F0IGQz
KCkgY29uc3QgeyByZXR1cm4gbV9kMzsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ3VydmVU
eXBlIG1fY3VydmVUeXBlOworICAgICAgICBmbG9hdCBtX2QxOworICAgICAgICBmbG9hdCBtX2Qy
OworICAgICAgICBmbG9hdCBtX2QzOworICAgIH07CisKKyAgICAvLyBDbGFzc2lmaWVzIHRoZSBn
aXZlbiBjdWJpYyBiZXppZXIgY3VydmUgc3RhcnRpbmcgYXQgYzAsIGVuZGluZworICAgIC8vIGF0
IGMzLCBhbmQgYWZmZWN0ZWQgYnkgY29udHJvbCBwb2ludHMgYzEgYW5kIGMyLgorICAgIHN0YXRp
YyBSZXN1bHQgY2xhc3NpZnkoY29uc3QgRmxvYXRQb2ludCYgYzAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjMSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgYzMpOworCitwcml2YXRlOgorICAgIC8vIFRoaXMgY2xhc3MgZG9lcyBu
b3QgbmVlZCB0byBiZSBpbnN0YW50aWF0ZWQuCisgICAgTG9vcEJsaW5uQ2xhc3NpZmllcigpIHsg
fQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTG9vcEJsaW5uQ2xh
c3NpZmllcl9oCg==
</data>
<flag name="review"
          id="55659"
          type_id="1"
          status="-"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="55660"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66984</attachid>
            <date>2010-09-08 18:28:46 -0700</date>
            <delta_ts>2010-09-09 11:54:18 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>classifier.patch</filename>
            <type>text/plain</type>
            <size>9164</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzA0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDktMDggIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBjdWJpYyBjdXJ2ZSBjbGFzc2lmaWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NTI0OQorCisgICAgICAgIEFkZGluZyB0aGUgY3ViaWMgY3VydmUg
Y2xhc3NpZmljYXRpb24gYWxnb3JpdGhtIHBlciB0aGUgR1BVIEdlbXMgMworICAgICAgICBjaGFw
dGVyLiBObyB0ZXN0cyB5ZXQ7IHdpbGwgYmUgdGVzdGVkIGluIGNvbmp1bmN0aW9uIHdpdGggbGF0
ZXIgY29kZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFz
c2lmaWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5DbGFzc2lmaWVy
OjpjbGFzc2lmeSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNs
YXNzaWZpZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5DbGFzc2lmaWVy
OjpSZXN1bHQ6OlJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5DbGFzc2lmaWVy
OjpMb29wQmxpbm5DbGFzc2lmaWVyKToKKwogMjAxMC0wOS0wOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0
aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ2xhc3NpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ2xhc3Np
Zmllci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9M
b29wQmxpbm5DbGFzc2lmaWVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb29wQmxpbm5DbGFzc2lmaWVy
LmgiCisKKyNpbmNsdWRlICJMb29wQmxpbm5NYXRoVXRpbHMuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit1c2luZyBMb29wQmxpbm5NYXRoVXRpbHM6OmFwcHJveEVxdWFsOwordXNpbmcgTG9v
cEJsaW5uTWF0aFV0aWxzOjpyb3VuZFRvWmVybzsKKworTG9vcEJsaW5uQ2xhc3NpZmllcjo6UmVz
dWx0IExvb3BCbGlubkNsYXNzaWZpZXI6OmNsYXNzaWZ5KGNvbnN0IEZsb2F0UG9pbnQmIGMwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UG9pbnQmIGMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZs
b2F0UG9pbnQmIGMzKQoreworICAgIC8vIENvbnN1bHQgdGhlIGNoYXB0ZXIgZm9yIHRoZSBkZWZp
bml0aW9ucyBvZiB0aGUgZm9sbG93aW5nCisgICAgLy8gKHRlcnNlKSB2YXJpYWJsZSBuYW1lcy4K
KyAgICBGbG9hdFBvaW50M0QgYjAoYzApOworICAgIEZsb2F0UG9pbnQzRCBiMShjMSk7CisgICAg
RmxvYXRQb2ludDNEIGIyKGMyKTsKKyAgICBGbG9hdFBvaW50M0QgYjMoYzMpOworCisgICAgLy8g
Q29tcHV0ZSBhMS4uYTMuCisgICAgZmxvYXQgYTEgPSBiMCAqIGIzLmNyb3NzKGIyKTsKKyAgICBm
bG9hdCBhMiA9IGIxICogYjAuY3Jvc3MoYjMpOworICAgIGZsb2F0IGEzID0gYjIgKiBiMS5jcm9z
cyhiMCk7CisKKyAgICAvLyBDb21wdXRlIGQxLi5kMy4KKyAgICBmbG9hdCBkMSA9IGExIC0gMiAq
IGEyICsgMyAqIGEzOworICAgIGZsb2F0IGQyID0gLWEyICsgMyAqIGEzOworICAgIGZsb2F0IGQz
ID0gMyAqIGEzOworCisgICAgLy8gRXhwZXJpbWVudGF0aW9uIGhhcyBzaG93biB0aGF0IHRoZSB0
ZXh0dXJlIGNvb3JkaW5hdGVzIGNvbXB1dGVkCisgICAgLy8gZnJvbSB0aGVzZSB2YWx1ZXMgcXVp
Y2tseSBiZWNvbWUgaHVnZSwgbGVhZGluZyB0byByb3VuZG9mZiBlcnJvcnMKKyAgICAvLyBhbmQg
YXJ0aWZhY3RzIGluIHRoZSBzaGFkZXIuIEl0IHR1cm5zIG91dCB0aGF0IGlmIHdlIG5vcm1hbGl6
ZQorICAgIC8vIHRoZSB2ZWN0b3IgZGVmaW5lZCBieSAoZDEsIGQyLCBkMyksIHRoaXMgZml4ZXMg
dGhlIHByb2JsZW0gb2YgdGhlCisgICAgLy8gdGV4dHVyZSBjb29yZGluYXRlcyBnZXR0aW5nIHRv
byBsYXJnZSB3aXRob3V0IGFmZmVjdGluZyB0aGUKKyAgICAvLyBjbGFzc2lmaWNhdGlvbiByZXN1
bHRzLgorICAgIEZsb2F0UG9pbnQzRCBuZChkMSwgZDIsIGQzKTsKKyAgICBuZC5ub3JtYWxpemUo
KTsKKyAgICBkMSA9IG5kLngoKTsKKyAgICBkMiA9IG5kLnkoKTsKKyAgICBkMyA9IG5kLnooKTsK
KworICAgIC8vIENvbXB1dGUgdGhlIGRpc2NyaW1pbmFudC4KKyAgICAvLyB0ZXJtMCBpcyBhIGNv
bW1vbiB0ZXJtIGluIHRoZSBjb21wdXRhdGlvbiB3aGljaCBoZWxwcyBkZWNpZGUKKyAgICAvLyB3
aGljaCB3YXkgdG8gY2xhc3NpZnkgdGhlIGN1c3AgY2FzZTogYXMgc2VycGVudGluZSBvciBsb29w
LgorICAgIGZsb2F0IHRlcm0wID0gKDMgKiBkMiAqIGQyIC0gNCAqIGQxICogZDMpOworICAgIGZs
b2F0IGRpc2NyaW1pbmFudCA9IGQxICogZDEgKiB0ZXJtMDsKKworICAgIC8vIEV4cGVyaW1lbnRh
dGlvbiBoYXMgYWxzbyBzaG93biB0aGF0IHdoZW4gdGhlIGNsYXNzaWZpY2F0aW9uIGlzCisgICAg
Ly8gbmVhciB0aGUgYm91bmRhcnkgYmV0d2VlbiBvbmUgY3VydmUgdHlwZSBhbmQgYW5vdGhlciwg
dGhlIHNoYWRlcgorICAgIC8vIGJlY29tZXMgbnVtZXJpY2FsbHkgdW5zdGFibGUsIHBhcnRpY3Vs
YXJseSB3aXRoIHRoZSBjdXNwIGNhc2UuCisgICAgLy8gQ29ycmVjdCBmb3IgdGhpcyBieSByb3Vu
ZGluZyBkMS4uZDMgYW5kIHRoZSBkaXNjcmltaW5hbnQgdG8gemVybworICAgIC8vIHdoZW4gdGhl
eSBnZXQgbmVhciBpdC4KKyAgICBkMSA9IHJvdW5kVG9aZXJvKGQxKTsKKyAgICBkMiA9IHJvdW5k
VG9aZXJvKGQyKTsKKyAgICBkMyA9IHJvdW5kVG9aZXJvKGQzKTsKKyAgICBkaXNjcmltaW5hbnQg
PSByb3VuZFRvWmVybyhkaXNjcmltaW5hbnQpOworCisgICAgLy8gRG8gdGhlIGNsYXNzaWZpY2F0
aW9uLgorICAgIGlmIChhcHByb3hFcXVhbChiMCwgYjEpCisgICAgICAgICYmIGFwcHJveEVxdWFs
KGIwLCBiMikKKyAgICAgICAgJiYgYXBwcm94RXF1YWwoYjAsIGIzKSkgeworICAgICAgICByZXR1
cm4gUmVzdWx0KGtQb2ludCwgZDEsIGQyLCBkMyk7CisgICAgfQorCisgICAgaWYgKCFkaXNjcmlt
aW5hbnQpIHsKKyAgICAgICAgaWYgKCFkMSAmJiAhZDIpIHsKKyAgICAgICAgICAgIGlmICghZDMp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdChrTGluZSwgZDEsIGQyLCBkMyk7CisgICAg
ICAgICAgICByZXR1cm4gUmVzdWx0KGtRdWFkcmF0aWMsIGQxLCBkMiwgZDMpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFkMSkKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQoa0N1c3AsIGQx
LCBkMiwgZDMpOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGJvdW5kYXJ5IGNhc2UgZGVzY3Jp
YmVkIGluIExvb3AgYW5kIEJsaW5uJ3MKKyAgICAgICAgLy8gU0lHR1JBUEggJzA1IHBhcGVyIG9m
IGEgY3VzcCB3aXRoIGluZmxlY3Rpb24gYXQgaW5maW5pdHkuCisgICAgICAgIC8vIEJlY2F1c2Ug
dGVybTAgbWlnaHQgbm90IGJlIGV4YWN0bHkgMCwgd2UgZGVjaWRlIGJldHdlZW4gdXNpbmcKKyAg
ICAgICAgLy8gdGhlIHNlcnBlbnRpbmUgYW5kIGxvb3AgY2FzZXMgZGVwZW5kaW5nIG9uIGl0cyBz
aWduIHRvIGF2b2lkCisgICAgICAgIC8vIHRha2luZyB0aGUgc3F1YXJlIHJvb3Qgb2YgYSBuZWdh
dGl2ZSBudW1iZXIgd2hlbiBjb21wdXRpbmcgdGhlCisgICAgICAgIC8vIGN1YmljIHRleHR1cmUg
Y29vcmRpbmF0ZXMuCisgICAgICAgIGlmICh0ZXJtMCA8IDApCisgICAgICAgICAgICByZXR1cm4g
UmVzdWx0KGtMb29wLCBkMSwgZDIsIGQzKTsKKworICAgICAgICByZXR1cm4gUmVzdWx0KGtTZXJw
ZW50aW5lLCBkMSwgZDIsIGQzKTsKKyAgICB9CisKKyAgICBpZiAoZGlzY3JpbWluYW50ID4gMCkK
KyAgICAgICAgcmV0dXJuIFJlc3VsdChrU2VycGVudGluZSwgZDEsIGQyLCBkMyk7CisKKyAgICAv
LyBkaXNjcmltaW5hbnQgPCAwCisgICAgcmV0dXJuIFJlc3VsdChrTG9vcCwgZDEsIGQyLCBkMyk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0xvb3BCbGlubkNsYXNzaWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBDdWJpYyBjdXJ2ZSBjbGFzc2lm
aWNhdGlvbiBhbGdvcml0aG0gZnJvbSAiUmVuZGVyaW5nIFZlY3RvciBBcnQgb24KKy8vIHRoZSBH
UFUiIGJ5IExvb3AgYW5kIEJsaW5uLCBHUFUgR2VtcyAzLCBDaGFwdGVyIDI1OgorLy8gaHR0cDov
L2h0dHAuZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczMvZ3B1Z2VtczNfY2gyNS5odG1sIC4K
KworI2lmbmRlZiBMb29wQmxpbm5DbGFzc2lmaWVyX2gKKyNkZWZpbmUgTG9vcEJsaW5uQ2xhc3Np
Zmllcl9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGbG9hdFBvaW50OworCisvLyBDbGFzc2lmaWVzIGN1YmljIGN1cnZlcyBp
bnRvIHNwZWNpZmljIHR5cGVzLgorY2xhc3MgTG9vcEJsaW5uQ2xhc3NpZmllciA6IHB1YmxpYyBO
b25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgLy8gVGhlIHR5cGVzIG9mIGN1YmljIGN1cnZlcy4K
KyAgICBlbnVtIEN1cnZlVHlwZSB7CisgICAgICAgIGtTZXJwZW50aW5lLAorICAgICAgICBrQ3Vz
cCwKKyAgICAgICAga0xvb3AsCisgICAgICAgIGtRdWFkcmF0aWMsCisgICAgICAgIGtMaW5lLAor
ICAgICAgICBrUG9pbnQKKyAgICB9OworCisgICAgLy8gVGhlIHJlc3VsdCBvZiB0aGUgY2xhc3Np
Zmllci4KKyAgICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlc3VsdChD
dXJ2ZVR5cGUgaW5wdXRDdXJ2ZVR5cGUsIGZsb2F0IGlucHV0RDEsIGZsb2F0IGlucHV0RDIsIGZs
b2F0IGlucHV0RDMpCisgICAgICAgICAgICA6IGN1cnZlVHlwZShpbnB1dEN1cnZlVHlwZSkKKyAg
ICAgICAgICAgICwgZDEoaW5wdXREMSkKKyAgICAgICAgICAgICwgZDIoaW5wdXREMikKKyAgICAg
ICAgICAgICwgZDMoaW5wdXREMykgeyB9CisKKyAgICAgICAgQ3VydmVUeXBlIGN1cnZlVHlwZTsK
KworICAgICAgICAvLyBUaGVzZSBhcmUgY29lZmZpY2llbnRzIHVzZWQgbGF0ZXIgaW4gdGhlIGNv
bXB1dGF0aW9uIG9mCisgICAgICAgIC8vIHRleHR1cmUgY29vcmRpbmF0ZXMgcGVyIHZlcnRleC4K
KyAgICAgICAgZmxvYXQgZDE7CisgICAgICAgIGZsb2F0IGQyOworICAgICAgICBmbG9hdCBkMzsK
KyAgICB9OworCisgICAgLy8gQ2xhc3NpZmllcyB0aGUgZ2l2ZW4gY3ViaWMgYmV6aWVyIGN1cnZl
IHN0YXJ0aW5nIGF0IGMwLCBlbmRpbmcKKyAgICAvLyBhdCBjMywgYW5kIGFmZmVjdGVkIGJ5IGNv
bnRyb2wgcG9pbnRzIGMxIGFuZCBjMi4KKyAgICBzdGF0aWMgUmVzdWx0IGNsYXNzaWZ5KGNvbnN0
IEZsb2F0UG9pbnQmIGMwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgYzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBj
MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMzKTsKKwor
cHJpdmF0ZToKKyAgICAvLyBUaGlzIGNsYXNzIGRvZXMgbm90IG5lZWQgdG8gYmUgaW5zdGFudGlh
dGVkLgorICAgIExvb3BCbGlubkNsYXNzaWZpZXIoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIExvb3BCbGlubkNsYXNzaWZpZXJfaAo=
</data>
<flag name="review"
          id="56147"
          type_id="1"
          status="+"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="56148"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67074</attachid>
            <date>2010-09-09 11:54:18 -0700</date>
            <delta_ts>2010-09-09 12:21:46 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>classifier.patch</filename>
            <type>text/plain</type>
            <size>9347</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzA5OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDktMDkgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBjdWJpYyBjdXJ2ZSBjbGFzc2lmaWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NTI0OQorCisgICAgICAgIEFkZGluZyB0aGUgY3ViaWMgY3VydmUg
Y2xhc3NpZmljYXRpb24gYWxnb3JpdGhtIHBlciB0aGUgR1BVIEdlbXMgMworICAgICAgICBjaGFw
dGVyLiBObyB0ZXN0cyB5ZXQ7IHdpbGwgYmUgdGVzdGVkIGluIGNvbmp1bmN0aW9uIHdpdGggbGF0
ZXIgY29kZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFz
c2lmaWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5DbGFzc2lmaWVy
OjpjbGFzc2lmeSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNs
YXNzaWZpZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5DbGFzc2lmaWVy
OjpSZXN1bHQ6OlJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5DbGFzc2lmaWVy
OjpMb29wQmxpbm5DbGFzc2lmaWVyKToKKwogMjAxMC0wOS0wOSAgS2VubmV0aCBSdXNzZWxsICA8
a2JyQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5D
bGFzc2lmaWVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0xvb3BCbGlubkNsYXNzaWZpZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvb3BCbGlubkNsYXNz
aWZpZXIuaCIKKworI2luY2x1ZGUgIkxvb3BCbGlubk1hdGhVdGlscy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3VzaW5nIExvb3BCbGlubk1hdGhVdGlsczo6YXBwcm94RXF1YWw7Cit1c2lu
ZyBMb29wQmxpbm5NYXRoVXRpbHM6OnJvdW5kVG9aZXJvOworCitMb29wQmxpbm5DbGFzc2lmaWVy
OjpSZXN1bHQgTG9vcEJsaW5uQ2xhc3NpZmllcjo6Y2xhc3NpZnkoY29uc3QgRmxvYXRQb2ludCYg
YzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgYzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYzIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgYzMpCit7CisgICAgLy8gQ29uc3VsdCB0aGUgY2hhcHRlciBmb3IgdGhl
IGRlZmluaXRpb25zIG9mIHRoZSBmb2xsb3dpbmcKKyAgICAvLyAodGVyc2UpIHZhcmlhYmxlIG5h
bWVzLiBOb3RlIHRoYXQgdGhlIGIwLi5iMyBjb29yZGluYXRlcyBhcmUKKyAgICAvLyBob21vZ2Vu
ZW91cywgc28gdGhlICJ6IiB2YWx1ZSAoYWN0dWFsbHkgdGhlIHcgY29vcmRpbmF0ZSkgbXVzdAor
ICAgIC8vIGJlIDEuMC4KKyAgICBGbG9hdFBvaW50M0QgYjAoYzAueCgpLCBjMC55KCksIDEuMGYp
OworICAgIEZsb2F0UG9pbnQzRCBiMShjMS54KCksIGMxLnkoKSwgMS4wZik7CisgICAgRmxvYXRQ
b2ludDNEIGIyKGMyLngoKSwgYzIueSgpLCAxLjBmKTsKKyAgICBGbG9hdFBvaW50M0QgYjMoYzMu
eCgpLCBjMy55KCksIDEuMGYpOworCisgICAgLy8gQ29tcHV0ZSBhMS4uYTMuCisgICAgZmxvYXQg
YTEgPSBiMCAqIGIzLmNyb3NzKGIyKTsKKyAgICBmbG9hdCBhMiA9IGIxICogYjAuY3Jvc3MoYjMp
OworICAgIGZsb2F0IGEzID0gYjIgKiBiMS5jcm9zcyhiMCk7CisKKyAgICAvLyBDb21wdXRlIGQx
Li5kMy4KKyAgICBmbG9hdCBkMSA9IGExIC0gMiAqIGEyICsgMyAqIGEzOworICAgIGZsb2F0IGQy
ID0gLWEyICsgMyAqIGEzOworICAgIGZsb2F0IGQzID0gMyAqIGEzOworCisgICAgLy8gRXhwZXJp
bWVudGF0aW9uIGhhcyBzaG93biB0aGF0IHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGNvbXB1dGVk
CisgICAgLy8gZnJvbSB0aGVzZSB2YWx1ZXMgcXVpY2tseSBiZWNvbWUgaHVnZSwgbGVhZGluZyB0
byByb3VuZG9mZiBlcnJvcnMKKyAgICAvLyBhbmQgYXJ0aWZhY3RzIGluIHRoZSBzaGFkZXIuIEl0
IHR1cm5zIG91dCB0aGF0IGlmIHdlIG5vcm1hbGl6ZQorICAgIC8vIHRoZSB2ZWN0b3IgZGVmaW5l
ZCBieSAoZDEsIGQyLCBkMyksIHRoaXMgZml4ZXMgdGhlIHByb2JsZW0gb2YgdGhlCisgICAgLy8g
dGV4dHVyZSBjb29yZGluYXRlcyBnZXR0aW5nIHRvbyBsYXJnZSB3aXRob3V0IGFmZmVjdGluZyB0
aGUKKyAgICAvLyBjbGFzc2lmaWNhdGlvbiByZXN1bHRzLgorICAgIEZsb2F0UG9pbnQzRCBuZChk
MSwgZDIsIGQzKTsKKyAgICBuZC5ub3JtYWxpemUoKTsKKyAgICBkMSA9IG5kLngoKTsKKyAgICBk
MiA9IG5kLnkoKTsKKyAgICBkMyA9IG5kLnooKTsKKworICAgIC8vIENvbXB1dGUgdGhlIGRpc2Ny
aW1pbmFudC4KKyAgICAvLyB0ZXJtMCBpcyBhIGNvbW1vbiB0ZXJtIGluIHRoZSBjb21wdXRhdGlv
biB3aGljaCBoZWxwcyBkZWNpZGUKKyAgICAvLyB3aGljaCB3YXkgdG8gY2xhc3NpZnkgdGhlIGN1
c3AgY2FzZTogYXMgc2VycGVudGluZSBvciBsb29wLgorICAgIGZsb2F0IHRlcm0wID0gKDMgKiBk
MiAqIGQyIC0gNCAqIGQxICogZDMpOworICAgIGZsb2F0IGRpc2NyaW1pbmFudCA9IGQxICogZDEg
KiB0ZXJtMDsKKworICAgIC8vIEV4cGVyaW1lbnRhdGlvbiBoYXMgYWxzbyBzaG93biB0aGF0IHdo
ZW4gdGhlIGNsYXNzaWZpY2F0aW9uIGlzCisgICAgLy8gbmVhciB0aGUgYm91bmRhcnkgYmV0d2Vl
biBvbmUgY3VydmUgdHlwZSBhbmQgYW5vdGhlciwgdGhlIHNoYWRlcgorICAgIC8vIGJlY29tZXMg
bnVtZXJpY2FsbHkgdW5zdGFibGUsIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBjdXNwIGNhc2UuCisg
ICAgLy8gQ29ycmVjdCBmb3IgdGhpcyBieSByb3VuZGluZyBkMS4uZDMgYW5kIHRoZSBkaXNjcmlt
aW5hbnQgdG8gemVybworICAgIC8vIHdoZW4gdGhleSBnZXQgbmVhciBpdC4KKyAgICBkMSA9IHJv
dW5kVG9aZXJvKGQxKTsKKyAgICBkMiA9IHJvdW5kVG9aZXJvKGQyKTsKKyAgICBkMyA9IHJvdW5k
VG9aZXJvKGQzKTsKKyAgICBkaXNjcmltaW5hbnQgPSByb3VuZFRvWmVybyhkaXNjcmltaW5hbnQp
OworCisgICAgLy8gRG8gdGhlIGNsYXNzaWZpY2F0aW9uLgorICAgIGlmIChhcHByb3hFcXVhbChi
MCwgYjEpICYmIGFwcHJveEVxdWFsKGIwLCBiMikgJiYgYXBwcm94RXF1YWwoYjAsIGIzKSkgewor
ICAgICAgICByZXR1cm4gUmVzdWx0KGtQb2ludCwgZDEsIGQyLCBkMyk7CisgICAgfQorCisgICAg
aWYgKCFkaXNjcmltaW5hbnQpIHsKKyAgICAgICAgaWYgKCFkMSAmJiAhZDIpIHsKKyAgICAgICAg
ICAgIGlmICghZDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdChrTGluZSwgZDEsIGQy
LCBkMyk7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0KGtRdWFkcmF0aWMsIGQxLCBkMiwgZDMp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFkMSkKKyAgICAgICAgICAgIHJldHVybiBSZXN1
bHQoa0N1c3AsIGQxLCBkMiwgZDMpOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGJvdW5kYXJ5
IGNhc2UgZGVzY3JpYmVkIGluIExvb3AgYW5kIEJsaW5uJ3MKKyAgICAgICAgLy8gU0lHR1JBUEgg
JzA1IHBhcGVyIG9mIGEgY3VzcCB3aXRoIGluZmxlY3Rpb24gYXQgaW5maW5pdHkuCisgICAgICAg
IC8vIEJlY2F1c2UgdGVybTAgbWlnaHQgbm90IGJlIGV4YWN0bHkgMCwgd2UgZGVjaWRlIGJldHdl
ZW4gdXNpbmcKKyAgICAgICAgLy8gdGhlIHNlcnBlbnRpbmUgYW5kIGxvb3AgY2FzZXMgZGVwZW5k
aW5nIG9uIGl0cyBzaWduIHRvIGF2b2lkCisgICAgICAgIC8vIHRha2luZyB0aGUgc3F1YXJlIHJv
b3Qgb2YgYSBuZWdhdGl2ZSBudW1iZXIgd2hlbiBjb21wdXRpbmcgdGhlCisgICAgICAgIC8vIGN1
YmljIHRleHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmICh0ZXJtMCA8IDApCisgICAgICAg
ICAgICByZXR1cm4gUmVzdWx0KGtMb29wLCBkMSwgZDIsIGQzKTsKKworICAgICAgICByZXR1cm4g
UmVzdWx0KGtTZXJwZW50aW5lLCBkMSwgZDIsIGQzKTsKKyAgICB9CisKKyAgICBpZiAoZGlzY3Jp
bWluYW50ID4gMCkKKyAgICAgICAgcmV0dXJuIFJlc3VsdChrU2VycGVudGluZSwgZDEsIGQyLCBk
Myk7CisKKyAgICAvLyBkaXNjcmltaW5hbnQgPCAwCisgICAgcmV0dXJuIFJlc3VsdChrTG9vcCwg
ZDEsIGQyLCBkMyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNsYXNzaWZpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFz
c2lmaWVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBDdWJpYyBj
dXJ2ZSBjbGFzc2lmaWNhdGlvbiBhbGdvcml0aG0gZnJvbSAiUmVuZGVyaW5nIFZlY3RvciBBcnQg
b24KKy8vIHRoZSBHUFUiIGJ5IExvb3AgYW5kIEJsaW5uLCBHUFUgR2VtcyAzLCBDaGFwdGVyIDI1
OgorLy8gaHR0cDovL2h0dHAuZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczMvZ3B1Z2VtczNf
Y2gyNS5odG1sIC4KKworI2lmbmRlZiBMb29wQmxpbm5DbGFzc2lmaWVyX2gKKyNkZWZpbmUgTG9v
cEJsaW5uQ2xhc3NpZmllcl9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50OworCisvLyBDbGFzc2lmaWVzIGN1
YmljIGN1cnZlcyBpbnRvIHNwZWNpZmljIHR5cGVzLgorY2xhc3MgTG9vcEJsaW5uQ2xhc3NpZmll
ciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgLy8gVGhlIHR5cGVzIG9mIGN1
YmljIGN1cnZlcy4KKyAgICBlbnVtIEN1cnZlVHlwZSB7CisgICAgICAgIGtTZXJwZW50aW5lLAor
ICAgICAgICBrQ3VzcCwKKyAgICAgICAga0xvb3AsCisgICAgICAgIGtRdWFkcmF0aWMsCisgICAg
ICAgIGtMaW5lLAorICAgICAgICBrUG9pbnQKKyAgICB9OworCisgICAgLy8gVGhlIHJlc3VsdCBv
ZiB0aGUgY2xhc3NpZmllci4KKyAgICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFJlc3VsdChDdXJ2ZVR5cGUgaW5wdXRDdXJ2ZVR5cGUsIGZsb2F0IGlucHV0RDEsIGZsb2F0
IGlucHV0RDIsIGZsb2F0IGlucHV0RDMpCisgICAgICAgICAgICA6IGN1cnZlVHlwZShpbnB1dEN1
cnZlVHlwZSkKKyAgICAgICAgICAgICwgZDEoaW5wdXREMSkKKyAgICAgICAgICAgICwgZDIoaW5w
dXREMikKKyAgICAgICAgICAgICwgZDMoaW5wdXREMykgeyB9CisKKyAgICAgICAgQ3VydmVUeXBl
IGN1cnZlVHlwZTsKKworICAgICAgICAvLyBUaGVzZSBhcmUgY29lZmZpY2llbnRzIHVzZWQgbGF0
ZXIgaW4gdGhlIGNvbXB1dGF0aW9uIG9mCisgICAgICAgIC8vIHRleHR1cmUgY29vcmRpbmF0ZXMg
cGVyIHZlcnRleC4KKyAgICAgICAgZmxvYXQgZDE7CisgICAgICAgIGZsb2F0IGQyOworICAgICAg
ICBmbG9hdCBkMzsKKyAgICB9OworCisgICAgLy8gQ2xhc3NpZmllcyB0aGUgZ2l2ZW4gY3ViaWMg
YmV6aWVyIGN1cnZlIHN0YXJ0aW5nIGF0IGMwLCBlbmRpbmcKKyAgICAvLyBhdCBjMywgYW5kIGFm
ZmVjdGVkIGJ5IGNvbnRyb2wgcG9pbnRzIGMxIGFuZCBjMi4KKyAgICBzdGF0aWMgUmVzdWx0IGNs
YXNzaWZ5KGNvbnN0IEZsb2F0UG9pbnQmIGMwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgYzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
bG9hdFBvaW50JiBjMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9p
bnQmIGMzKTsKKworcHJpdmF0ZToKKyAgICAvLyBUaGlzIGNsYXNzIGRvZXMgbm90IG5lZWQgdG8g
YmUgaW5zdGFudGlhdGVkLgorICAgIExvb3BCbGlubkNsYXNzaWZpZXIoKSB7IH0KK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIExvb3BCbGlubkNsYXNzaWZpZXJfaAo=
</data>
<flag name="review"
          id="56272"
          type_id="1"
          status="+"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="56273"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>