<?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>57964</bug_id>
          
          <creation_ts>2011-04-06 11:38:24 -0700</creation_ts>
          <short_desc>Fast path for parsing simple CSS values</short_desc>
          <delta_ts>2011-04-06 16:42:15 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.6</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>1</everconfirmed>
          <reporter name="Ian Henderson">ian</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>psolanki</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>380663</commentid>
    <comment_count>0</comment_count>
    <who name="Ian Henderson">ian</who>
    <bug_when>2011-04-06 11:38:24 -0700</bug_when>
    <thetext>Javascript animations repeatedly set style properties of an element to values like &quot;10px&quot; or &quot;5%&quot;.  We should optimize this common case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380678</commentid>
    <comment_count>1</comment_count>
      <attachid>88473</attachid>
    <who name="Ian Henderson">ian</who>
    <bug_when>2011-04-06 11:49:43 -0700</bug_when>
    <thetext>Created attachment 88473
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380685</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-06 11:52:15 -0700</bug_when>
    <thetext>Attachment 88473 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1

Source/WebCore/css/CSSParser.cpp:303:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSParser.cpp:377:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 5 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>380693</commentid>
    <comment_count>3</comment_count>
      <attachid>88473</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-06 11:57:25 -0700</bug_when>
    <thetext>Comment on attachment 88473
proposed patch

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

&gt; Source/WebCore/css/CSSParser.cpp:262
&gt; +static bool isSimpleColorPropertyID(int id)

Make inline?

&gt; Source/WebCore/css/CSSParser.cpp:352
&gt; +static bool parseSimpleDimensionValue(CSSMutableStyleDeclaration* declaration, int id, const String&amp; string, bool important, bool strict)

Say Length instead of DimensionValue?

&gt; Source/WebCore/css/CSSParser.cpp:390
&gt; +bool CSSParser::parseValue(CSSMutableStyleDeclaration* declaration, int id, const String&amp; string, bool important, bool strict)

Please rename &apos;id&apos; to &apos;propId&apos; or &apos;propertyId&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380780</commentid>
    <comment_count>4</comment_count>
      <attachid>88473</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-04-06 13:43:43 -0700</bug_when>
    <thetext>Comment on attachment 88473
proposed patch

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

&gt;&gt; Source/WebCore/css/CSSParser.cpp:262
&gt;&gt; +static bool isSimpleColorPropertyID(int id)
&gt; 
&gt; Make inline?

It&apos;s not clear to me why we need to call this &quot;isSimpleColorPropertyID&quot;... as opposed to what... a complex color property ID?  It also seems like a bunch of color properties are missing from this list. What about outline-color and all of the various SVG color properties?

&gt; Source/WebCore/css/CSSParser.cpp:288
&gt; +static bool parseSimpleColorValue(CSSMutableStyleDeclaration* declaration, int id, const String&amp; string, bool important, bool strict)

Are there colors you&apos;re omitting on purpose? Still not clear on the terminology unless maybe that&apos;s the case....

&gt; Source/WebCore/css/CSSParser.cpp:322
&gt; +static bool isSimpleDimensionPropertyID(int id, bool&amp; acceptsNegativeNumbers)

What about the padding properties?  Also, as SImon points out, I don&apos;t think &quot;dimension&quot; is a good term here, since that has meaning in CSS.  I would use Length.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380790</commentid>
    <comment_count>5</comment_count>
      <attachid>88473</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-04-06 13:48:56 -0700</bug_when>
    <thetext>Comment on attachment 88473
proposed patch

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

Looks good, r=me with some comments

&gt; Source/WebCore/css/CSSParser.cpp:262
&gt; +static bool isSimpleColorPropertyID(int id)

This could be inline.
id is too generic, call it propertyID.

&gt; Source/WebCore/css/CSSParser.cpp:288
&gt; +static bool parseSimpleColorValue(CSSMutableStyleDeclaration* declaration, int id, const String&amp; string, bool important, bool strict)

id -&gt; propertyID

&gt; Source/WebCore/css/CSSParser.cpp:318
&gt; +    if (validPrimitive) {
&gt; +        CSSProperty property(id, CSSPrimitiveValue::createIdentifier(valueID), important);
&gt; +        CSSProperty* propertyArray = &amp;property;
&gt; +        declaration-&gt;addParsedProperties(&amp;propertyArray, 1);
&gt; +        return true;
&gt; +    }
&gt; +    RGBA32 color;
&gt; +    if (!CSSParser::parseColor(string, color, strict &amp;&amp; string[0] != &apos;#&apos;))
&gt; +        return false;
&gt; +    CSSProperty property(id, CSSPrimitiveValue::createColor(color), important);
&gt; +    CSSProperty* propertyArray = &amp;property;
&gt; +    declaration-&gt;addParsedProperties(&amp;propertyArray, 1);

There is CSSMutableStyleDeclaration::addParsedProperty() for adding a single property. Perhaps you can use that?

&gt; Source/WebCore/css/CSSParser.cpp:331
&gt; +    case CSSPropertyWebkitLogicalHeight:
&gt; +        acceptsNegativeNumbers = false;
&gt; +        return true;
&gt; +

remove empty line

&gt; Source/WebCore/css/CSSParser.cpp:346
&gt; +    case CSSPropertyWebkitMarginAfter:
&gt; +        acceptsNegativeNumbers = true;
&gt; +        return true;
&gt; +

remove empty line

&gt; Source/WebCore/css/CSSParser.cpp:353
&gt; +static bool parseSimpleDimensionValue(CSSMutableStyleDeclaration* declaration, int id, const String&amp; string, bool important, bool strict)
&gt; +{

id -&gt; propertyID

&gt; Source/WebCore/css/CSSParser.cpp:386
&gt; +    CSSProperty property(id, CSSPrimitiveValue::create(number, unit), important);
&gt; +    CSSProperty* propertyArray = &amp;property;
&gt; +    declaration-&gt;addParsedProperties(&amp;propertyArray, 1);

There is CSSMutableStyleDeclaration::addParsedProperty() for adding a single property. Perhaps you can use that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380800</commentid>
    <comment_count>6</comment_count>
      <attachid>88473</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-04-06 13:54:02 -0700</bug_when>
    <thetext>Comment on attachment 88473
proposed patch

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

&gt; Source/WebCore/css/CSSParser.cpp:308
&gt; +        CSSProperty property(id, CSSPrimitiveValue::createIdentifier(valueID), important);

You should construct CSSPrimitiveValue using CSSPrimitiveValueCache. That hangs from the document which you can get through the style declaration.

&gt; Source/WebCore/css/CSSParser.cpp:316
&gt; +    CSSProperty property(id, CSSPrimitiveValue::createColor(color), important);

You should construct CSSPrimitiveValue using CSSPrimitiveValueCache. That hangs from the document which you can get through the style declaration.

&gt; Source/WebCore/css/CSSParser.cpp:384
&gt; +    CSSProperty property(id, CSSPrimitiveValue::create(number, unit), important);

You should construct CSSPrimitiveValue using CSSPrimitiveValueCache. That hangs from the document which you can get through the style declaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380858</commentid>
    <comment_count>7</comment_count>
      <attachid>88518</attachid>
    <who name="Ian Henderson">ian</who>
    <bug_when>2011-04-06 14:45:01 -0700</bug_when>
    <thetext>Created attachment 88518
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380869</commentid>
    <comment_count>8</comment_count>
      <attachid>88518</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-06 14:58:38 -0700</bug_when>
    <thetext>Comment on attachment 88518
updated patch

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

r- for the &quot;px&quot; parsing issue.

&gt; Source/WebCore/css/CSSParser.cpp:281
&gt; +    case CSSPropertyBackgroundColor:
&gt; +    case CSSPropertyBorderTopColor:
&gt; +    case CSSPropertyBorderRightColor:
&gt; +    case CSSPropertyBorderBottomColor:
&gt; +    case CSSPropertyBorderLeftColor:
&gt; +    case CSSPropertyWebkitBorderStartColor:
&gt; +    case CSSPropertyWebkitBorderEndColor:
&gt; +    case CSSPropertyWebkitBorderBeforeColor:
&gt; +    case CSSPropertyWebkitBorderAfterColor:
&gt; +    case CSSPropertyColor:
&gt; +    case CSSPropertyTextLineThroughColor:
&gt; +    case CSSPropertyTextUnderlineColor:
&gt; +    case CSSPropertyTextOverlineColor:
&gt; +    case CSSPropertyWebkitColumnRuleColor:
&gt; +    case CSSPropertyWebkitTextEmphasisColor:
&gt; +    case CSSPropertyWebkitTextFillColor:
&gt; +    case CSSPropertyWebkitTextStrokeColor:

These might be better ordered by ID, rather than alphabetically, for potential compiler optimization, and easy of matching with the enum of all properties.

What about CSSPropertyOutlineColor, CSSPropertyWebkitColumnRuleColor?

&gt; Source/WebCore/css/CSSParser.cpp:295
&gt; +    RefPtr&lt;CSSPrimitiveValueCache&gt; primitiveValueCache = stylesheet-&gt;document()-&gt;cssPrimitiveValueCache();

I don&apos;t think you need a RefPtr to the cssPrimitiveValueCache. You could also fetch it later.

&gt; Source/WebCore/css/CSSParser.cpp:297
&gt; +    if (!string.length())
&gt; +        return false;

Why not check this earlier?

&gt; Source/WebCore/css/CSSParser.cpp:374
&gt; +    RefPtr&lt;CSSPrimitiveValueCache&gt; primitiveValueCache = stylesheet-&gt;document()-&gt;cssPrimitiveValueCache();

Ditto. Also, why not fetch this just before you use it lower down?

&gt; Source/WebCore/css/CSSParser.cpp:384
&gt; +    if (length &gt; 2 &amp;&amp; characters[length - 2] == &apos;p&apos; &amp;&amp; characters[length - 1] == &apos;x&apos;) {
&gt; +        length -= 2;
&gt; +        unit = CSSPrimitiveValue::CSS_PX;

This would break if we ever created a unit like &quot;ppx&quot; or &apos;screenpx&quot;. I think you need to walk back looking for non-unit characters.

&gt; Source/WebCore/css/CSSParser.cpp:387
&gt; +    } else if (length &gt; 1 &amp;&amp; characters[length - 1] == &apos;%&apos;) {
&gt; +        length -= 1;
&gt; +        unit = CSSPrimitiveValue::CSS_PERCENTAGE;

Ditto if a &quot;%%&quot; unit was invented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380918</commentid>
    <comment_count>9</comment_count>
      <attachid>88534</attachid>
    <who name="Ian Henderson">ian</who>
    <bug_when>2011-04-06 15:42:06 -0700</bug_when>
    <thetext>Created attachment 88534
updated patch 2

Updated to address Simon&apos;s comments.  The &quot;px&quot; issue doesn&apos;t actually happen, since charactersToDouble validates its input.  I added a comment to emphasize this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380920</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-06 15:44:36 -0700</bug_when>
    <thetext>Attachment 88534 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1

Source/WebCore/css/CSSParser.cpp:386:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 1 in 5 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>380967</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-06 16:42:15 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/83122</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88473</attachid>
            <date>2011-04-06 11:49:43 -0700</date>
            <delta_ts>2011-04-06 14:45:01 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>57964-1.patch</filename>
            <type>text/plain</type>
            <size>10075</size>
            <attacher name="Ian Henderson">ian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMDc2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMDQtMDYgIElhbiBIZW5k
ZXJzb24gIDxpYW5oQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGYXN0IHBhdGggZm9yIHBhcnNpbmcgc2ltcGxlIENTUyB2YWx1ZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3OTY0CisK
KyAgICAgICAgQWRkIGZ1bmN0aW9ucyB0byBwYXJzZSBzaW1wbGUgY29sb3Igb3IgZGltZW5zaW9u
IHZhbHVlcywgc2tpcHBpbmcgdGhlCisgICAgICAgIG92ZXJoZWFkIG9mIGZ1bGwgQ1NTIHBhcnNp
bmcuCisKKyAgICAgICAgQ2hhbmdlIHBhcnNlVmFsdWUgdG8gYSBzdGF0aWMgbWV0aG9kIHRvIGF2
b2lkIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24KKyAgICAgICAgb2YgYSBDU1NQYXJzZXIgaW4gdGhl
IGZhc3QgY2FzZS4KKworICAgICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJv
cGVydHkpOgorICAgICAgICBDaGFuZ2VkIHRvIHVzZSB0aGUgbmV3LCBzdGF0aWMgcGFyc2VWYWx1
ZSBtZXRob2QuCisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojppc1NpbXBsZUNvbG9yUHJvcGVydHlJRCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNpbXBs
ZUNvbG9yVmFsdWUpOgorICAgICAgICBQYXJzZXMgYW55IGNvbG9yIGFjY2VwdGVkIGJ5IHRoZSBl
eGlzdGluZyBwYXJzZUNvbG9yKCkgc3RhdGljIG1ldGhvZC4KKyAgICAgICAgV2UgbXVzdCBoYW5k
bGUgY29sb3IgaWRlbnRpZmllcnMgc2VwYXJhdGVseSwgc2luY2UgcGFyc2VDb2xvcigpIHdpbGwK
KyAgICAgICAgY2hhbmdlICdyZWQnIGludG8gJ3JnYigyNTUsIDAsIDApJy4KKyAgICAgICAgKFdl
YkNvcmU6OmlzU2ltcGxlRGltZW5zaW9uUHJvcGVydHlJRCk6CisgICAgICAgIChXZWJDb3JlOjpw
YXJzZVNpbXBsZURpbWVuc2lvblZhbHVlKToKKyAgICAgICAgUGFyc2VzIGEgdmFsdWUgb2YgdGhl
IGZvcm0gJ05OcHgnLCAnTk4lJywgb3IgJ05OJyAod2hlbiBzdHJpY3QgaXMKKyAgICAgICAgZmFs
c2UsIG9yICdOTicgaXMgJzAnKS4gIFJldHVybnMgZmFsc2UgdG8gZmFsbCBiYWNrIHRvIHRoZSBz
bG93IHBhdGguCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAg
ICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTTWF0cml4LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6c2V0TWF0cml4VmFsdWUpOgor
ICAgICAgICBDaGFuZ2VkIHRvIHVzZSB0aGUgbmV3LCBzdGF0aWMgcGFyc2VWYWx1ZSBtZXRob2Qu
CisKIDIwMTEtMDQtMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiA4MzA3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU3MSw4ICs1NzEsNyBAQAogCiAgICAgLy8gV2hlbiByZXBsYWNpbmcg
YW4gZXhpc3RpbmcgcHJvcGVydHkgdmFsdWUsIHRoaXMgbW92ZXMgdGhlIHByb3BlcnR5IHRvIHRo
ZSBlbmQgb2YgdGhlIGxpc3QuCiAgICAgLy8gRmlyZWZveCBwcmVzZXJ2ZXMgdGhlIHBvc2l0aW9u
LCBhbmQgTVNJRSBtb3ZlcyB0aGUgcHJvcGVydHkgdG8gdGhlIGJlZ2lubmluZy4KLSAgICBDU1NQ
YXJzZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgYm9vbCBzdWNjZXNzID0gcGFy
c2VyLnBhcnNlVmFsdWUodGhpcywgcHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCk7CisgICAg
Ym9vbCBzdWNjZXNzID0gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHRoaXMsIHByb3BlcnR5SUQsIHZh
bHVlLCBpbXBvcnRhbnQsIHVzZVN0cmljdFBhcnNpbmcoKSk7CiAgICAgaWYgKCFzdWNjZXNzKSB7
CiAgICAgICAgIC8vIENTUyBET00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIGhlcmUsIGJ1
dCB0aGlzIGlzIHRvbyBkYW5nZXJvdXMgZm9yIGNvbXBhdGliaWxpdHksCiAgICAgICAgIC8vIHNl
ZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5Nj4uCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gODMwNzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1OSwxNDQgQEAK
ICAgICByZXR1cm4gbV9rZXlmcmFtZS5yZWxlYXNlKCk7CiB9CiAKK3N0YXRpYyBib29sIGlzU2lt
cGxlQ29sb3JQcm9wZXJ0eUlEKGludCBpZCkKK3sKKyAgICBzd2l0Y2ggKGlkKSB7CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
VG9wQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3I6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJMZWZ0Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0Q29sb3I6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZENvbG9yOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyQWZ0ZXJDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0VW5kZXJsaW5lQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZUNvbG9y
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3I6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc0NvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RmlsbENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tl
Q29sb3I6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHBhcnNlU2ltcGxlQ29sb3JWYWx1ZShD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24sIGludCBpZCwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBib29sIHN0cmljdCkKK3sKKyAgICBpZiAoIWlz
U2ltcGxlQ29sb3JQcm9wZXJ0eUlEKGlkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ1NTUGFyc2Vy
U3RyaW5nIGNzc1N0cmluZzsKKyAgICBjc3NTdHJpbmcuY2hhcmFjdGVycyA9IGNvbnN0X2Nhc3Q8
VUNoYXIqPihzdHJpbmcuY2hhcmFjdGVycygpKTsKKyAgICBjc3NTdHJpbmcubGVuZ3RoID0gc3Ry
aW5nLmxlbmd0aCgpOworICAgIGludCB2YWx1ZUlEID0gY3NzVmFsdWVLZXl3b3JkSUQoY3NzU3Ry
aW5nKTsKKyAgICBib29sIHZhbGlkUHJpbWl0aXZlID0gZmFsc2U7CisgICAgaWYgKHZhbHVlSUQg
PT0gQ1NTVmFsdWVXZWJraXRUZXh0KQorICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Cisg
ICAgZWxzZSBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikKKyAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSB0cnVlOworICAgIGVsc2UgaWYgKCh2YWx1ZUlEID49IENTU1ZhbHVlQXF1
YSAmJiB2YWx1ZUlEIDw9IENTU1ZhbHVlV2luZG93dGV4dCkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZU1lbnUgfHwKKyAgICAgICAgICh2YWx1ZUlEID49IENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29s
b3IgJiYgdmFsdWVJRCA8IENTU1ZhbHVlV2Via2l0VGV4dCAmJiAhc3RyaWN0KSkgeworICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CisgICAgfQorICAgIGlmICh2YWxpZFByaW1pdGl2ZSkg
eworICAgICAgICBDU1NQcm9wZXJ0eSBwcm9wZXJ0eShpZCwgQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZUlkZW50aWZpZXIodmFsdWVJRCksIGltcG9ydGFudCk7CisgICAgICAgIENTU1Byb3BlcnR5
KiBwcm9wZXJ0eUFycmF5ID0gJnByb3BlcnR5OworICAgICAgICBkZWNsYXJhdGlvbi0+YWRkUGFy
c2VkUHJvcGVydGllcygmcHJvcGVydHlBcnJheSwgMSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBSR0JBMzIgY29sb3I7CisgICAgaWYgKCFDU1NQYXJzZXI6OnBhcnNlQ29sb3Io
c3RyaW5nLCBjb2xvciwgc3RyaWN0ICYmIHN0cmluZ1swXSAhPSAnIycpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgQ1NTUHJvcGVydHkgcHJvcGVydHkoaWQsIENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGVDb2xvcihjb2xvciksIGltcG9ydGFudCk7CisgICAgQ1NTUHJvcGVydHkqIHByb3Bl
cnR5QXJyYXkgPSAmcHJvcGVydHk7CisgICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRp
ZXMoJnByb3BlcnR5QXJyYXksIDEpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9v
bCBpc1NpbXBsZURpbWVuc2lvblByb3BlcnR5SUQoaW50IGlkLCBib29sJiBhY2NlcHRzTmVnYXRp
dmVOdW1iZXJzKQoreworICAgIHN3aXRjaCAoaWQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5SGVp
Z2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TG9naWNhbFdpZHRoOiAgCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxIZWln
aHQ6CisgICAgICAgIGFjY2VwdHNOZWdhdGl2ZU51bWJlcnMgPSBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm90dG9tOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlMZWZ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlSaWdodDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5VG9wOgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5Ub3A6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eU1hcmdpblJpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b206CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkxlZnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
cmdpblN0YXJ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5FbmQ6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFyZ2luQWZ0ZXI6CisgICAgICAgIGFjY2VwdHNOZWdhdGl2ZU51bWJlcnMgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHBhcnNlU2ltcGxlRGltZW5zaW9uVmFsdWUoQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uLCBpbnQgaWQsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgYm9vbCBzdHJpY3QpCit7CisgICAgYm9vbCBhY2Nl
cHRzTmVnYXRpdmVOdW1iZXJzOworICAgIGlmICghaXNTaW1wbGVEaW1lbnNpb25Qcm9wZXJ0eUlE
KGlkLCBhY2NlcHRzTmVnYXRpdmVOdW1iZXJzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVycygpOworICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBpZiAoIWNoYXJhY3RlcnMgfHwg
IWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcyB1bml0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVI7CisgICAgaWYg
KGxlbmd0aCA+IDIgJiYgY2hhcmFjdGVyc1tsZW5ndGggLSAyXSA9PSAncCcgJiYgY2hhcmFjdGVy
c1tsZW5ndGggLSAxXSA9PSAneCcpIHsKKyAgICAgICAgbGVuZ3RoIC09IDI7CisgICAgICAgIHVu
aXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYOworICAgIH0gZWxzZSBpZiAobGVuZ3RoID4g
MSAmJiBjaGFyYWN0ZXJzW2xlbmd0aCAtIDFdID09ICclJykgeworICAgICAgICBsZW5ndGggLT0g
MTsKKyAgICAgICAgdW5pdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRTsKKyAg
ICB9CisKKyAgICBib29sIG9rOworICAgIGRvdWJsZSBudW1iZXIgPSBjaGFyYWN0ZXJzVG9Eb3Vi
bGUoY2hhcmFjdGVycywgbGVuZ3RoLCAmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAodW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikg
eworICAgICAgICBpZiAobnVtYmVyICE9IDAgJiYgc3RyaWN0KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB1bml0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWDsKKyAgICB9
CisgICAgaWYgKG51bWJlciA8IDAgJiYgIWFjY2VwdHNOZWdhdGl2ZU51bWJlcnMpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIENTU1Byb3BlcnR5IHByb3BlcnR5KGlkLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKG51bWJlciwgdW5pdCksIGltcG9ydGFudCk7CisgICAgQ1NTUHJvcGVy
dHkqIHByb3BlcnR5QXJyYXkgPSAmcHJvcGVydHk7CisgICAgZGVjbGFyYXRpb24tPmFkZFBhcnNl
ZFByb3BlcnRpZXMoJnByb3BlcnR5QXJyYXksIDEpOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVj
bGFyYXRpb24sIGludCBpZCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBi
b29sIHN0cmljdCkKK3sKKyAgICBpZiAocGFyc2VTaW1wbGVEaW1lbnNpb25WYWx1ZShkZWNsYXJh
dGlvbiwgaWQsIHN0cmluZywgaW1wb3J0YW50LCBzdHJpY3QpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAocGFyc2VTaW1wbGVDb2xvclZhbHVlKGRlY2xhcmF0aW9uLCBpZCwgc3RyaW5n
LCBpbXBvcnRhbnQsIHN0cmljdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIENTU1BhcnNl
ciBwYXJzZXIoc3RyaWN0KTsKKyAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWUoZGVjbGFyYXRp
b24sIGlkLCBzdHJpbmcsIGltcG9ydGFudCk7Cit9CisKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbiwgaW50IGlkLCBjb25z
dCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQpCiB7CiAgICAgQVNTRVJUKCFkZWNsYXJh
dGlvbi0+c3R5bGVzaGVldCgpIHx8IGRlY2xhcmF0aW9uLT5zdHlsZXNoZWV0KCktPmlzQ1NTU3R5
bGVTaGVldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHJldmlzaW9uIDgzMDc1KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw3IEBACiAgICAgICAgIHZvaWQgcGFyc2VTaGVldChDU1NTdHlsZVNoZWV0KiwgY29uc3Qg
U3RyaW5nJiwgaW50IHN0YXJ0TGluZU51bWJlciA9IDAsIFN0eWxlUnVsZVJhbmdlTWFwKiBydWxl
UmFuZ2VNYXAgPSAwKTsKICAgICAgICAgUGFzc1JlZlB0cjxDU1NSdWxlPiBwYXJzZVJ1bGUoQ1NT
U3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwogICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGU+
IHBhcnNlS2V5ZnJhbWVSdWxlKENTU1N0eWxlU2hlZXQqLCBjb25zdCBTdHJpbmcmKTsKLSAgICAg
ICAgYm9vbCBwYXJzZVZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgaW50IHByb3BJ
ZCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQpOworICAgICAgICBzdGF0aWMgYm9vbCBw
YXJzZVZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgaW50IHByb3BJZCwgY29uc3Qg
U3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgc3RyaWN0KTsKICAgICAgICAgc3RhdGljIGJv
b2wgcGFyc2VDb2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBib29sIHN0cmljdCA9
IGZhbHNlKTsKICAgICAgICAgc3RhdGljIGJvb2wgcGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImIGNv
bG9yLCBjb25zdCBTdHJpbmcmLCBEb2N1bWVudCopOwogICAgICAgICBib29sIHBhcnNlQ29sb3Io
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmKTsKQEAgLTI5MSw2ICsy
OTEsOCBAQAogICAgICAgICBib29sIGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZShDU1NQYXJzZXJWYWx1
ZSopIGNvbnN0OwogICAgICAgICBib29sIHBhcnNlR2VuZXJhdGVkSW1hZ2UoUmVmUHRyPENTU1Zh
bHVlPiYpOwogCisgICAgICAgIGJvb2wgcGFyc2VWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiosIGludCBwcm9wSWQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50KTsKKwogICAg
ICAgICBlbnVtIFNpemVQYXJhbWV0ZXJUeXBlIHsKICAgICAgICAgICAgIE5vbmUsCiAgICAgICAg
ICAgICBBdXRvLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAJKHJl
dmlzaW9uIDgzMDc1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDggQEAKIAogdm9pZCBXZWJLaXRDU1NNYXRyaXg6
OnNldE1hdHJpeFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBDU1NQYXJzZXIgcCh0cnVlKTsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IHN0eWxlRGVjbGFyYXRpb24gPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y3JlYXRlKCk7Ci0gICAgaWYgKHAucGFyc2VWYWx1ZShzdHlsZURlY2xhcmF0aW9uLmdldCgpLCBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwgc3RyaW5nLCB0cnVlKSkgeworICAgIGlmIChDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi5nZXQoKSwgQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm0sIHN0cmluZywgdHJ1ZSwgdHJ1ZSkpIHsKICAgICAgICAgLy8gQ29udmVydCB0
byBUcmFuc2Zvcm1PcGVyYXRpb25zLiBUaGlzIGNhbiBmYWlsIGlmIGEgcHJvcGVydHkgCiAgICAg
ICAgIC8vIHJlcXVpcmVzIHN0eWxlIChpLmUuLCBwYXJhbSB1c2VzICdlbXMnIG9yICdleHMnKQog
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7Cg==
</data>
<flag name="review"
          id="80985"
          type_id="1"
          status="+"
          setter="koivisto"
    />
    <flag name="commit-queue"
          id="80986"
          type_id="3"
          status="-"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88518</attachid>
            <date>2011-04-06 14:45:01 -0700</date>
            <delta_ts>2011-04-06 15:42:06 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>57964-2.patch</filename>
            <type>text/plain</type>
            <size>11404</size>
            <attacher name="Ian Henderson">ian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMDc2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMDQtMDYgIElhbiBIZW5k
ZXJzb24gIDxpYW5oQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGYXN0IHBhdGggZm9yIHBhcnNpbmcgc2ltcGxlIENTUyB2YWx1ZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3OTY0CisK
KyAgICAgICAgQWRkIGZ1bmN0aW9ucyB0byBwYXJzZSBzaW1wbGUgY29sb3Igb3IgZGltZW5zaW9u
IHZhbHVlcywgc2tpcHBpbmcgdGhlCisgICAgICAgIG92ZXJoZWFkIG9mIGZ1bGwgQ1NTIHBhcnNp
bmcuCisKKyAgICAgICAgQ2hhbmdlIHBhcnNlVmFsdWUgdG8gYSBzdGF0aWMgbWV0aG9kIHRvIGF2
b2lkIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24KKyAgICAgICAgb2YgYSBDU1NQYXJzZXIgaW4gdGhl
IGZhc3QgY2FzZS4KKworICAgICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJv
cGVydHkpOgorICAgICAgICBDaGFuZ2VkIHRvIHVzZSB0aGUgbmV3LCBzdGF0aWMgcGFyc2VWYWx1
ZSBtZXRob2QuCisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojppc0NvbG9yUHJvcGVydHlJRCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNvbG9yVmFsdWUp
OgorICAgICAgICBQYXJzZXMgYW55IGNvbG9yIGFjY2VwdGVkIGJ5IHRoZSBleGlzdGluZyBwYXJz
ZUNvbG9yKCkgc3RhdGljIG1ldGhvZC4KKyAgICAgICAgV2UgbXVzdCBoYW5kbGUgY29sb3IgaWRl
bnRpZmllcnMgc2VwYXJhdGVseSwgc2luY2UgcGFyc2VDb2xvcigpIHdpbGwKKyAgICAgICAgY2hh
bmdlICdyZWQnIGludG8gJ3JnYigyNTUsIDAsIDApJy4KKyAgICAgICAgKFdlYkNvcmU6OmlzU2lt
cGxlTGVuZ3RoUHJvcGVydHlJRCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNpbXBsZUxlbmd0
aFZhbHVlKToKKyAgICAgICAgUGFyc2VzIGEgdmFsdWUgb2YgdGhlIGZvcm0gJ05OcHgnLCAnTk4l
Jywgb3IgJ05OJyAod2hlbiBzdHJpY3QgaXMKKyAgICAgICAgZmFsc2UsIG9yICdOTicgaXMgJzAn
KS4gIFJldHVybnMgZmFsc2UgdG8gZmFsbCBiYWNrIHRvIHRoZSBzbG93IHBhdGguCisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NQYXJz
ZXIuaDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYktpdENTU01hdHJpeDo6c2V0TWF0cml4VmFsdWUpOgorICAgICAgICBDaGFuZ2VkIHRv
IHVzZSB0aGUgbmV3LCBzdGF0aWMgcGFyc2VWYWx1ZSBtZXRob2QuCisKIDIwMTEtMDQtMDYgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlt
aXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiA4MzA3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
MSw4ICs1NzEsNyBAQAogCiAgICAgLy8gV2hlbiByZXBsYWNpbmcgYW4gZXhpc3RpbmcgcHJvcGVy
dHkgdmFsdWUsIHRoaXMgbW92ZXMgdGhlIHByb3BlcnR5IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3Qu
CiAgICAgLy8gRmlyZWZveCBwcmVzZXJ2ZXMgdGhlIHBvc2l0aW9uLCBhbmQgTVNJRSBtb3ZlcyB0
aGUgcHJvcGVydHkgdG8gdGhlIGJlZ2lubmluZy4KLSAgICBDU1NQYXJzZXIgcGFyc2VyKHVzZVN0
cmljdFBhcnNpbmcoKSk7Ci0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2VyLnBhcnNlVmFsdWUodGhp
cywgcHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCk7CisgICAgYm9vbCBzdWNjZXNzID0gQ1NT
UGFyc2VyOjpwYXJzZVZhbHVlKHRoaXMsIHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHVz
ZVN0cmljdFBhcnNpbmcoKSk7CiAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgIC8vIENTUyBE
T00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIGhlcmUsIGJ1dCB0aGlzIGlzIHRvbyBkYW5n
ZXJvdXMgZm9yIGNvbXBhdGliaWxpdHksCiAgICAgICAgIC8vIHNlZSA8aHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5Nj4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAkocmV2aXNpb24gODMwNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDE0ICsyNTksMTY5IEBACiAgICAgcmV0dXJuIG1fa2V5
ZnJhbWUucmVsZWFzZSgpOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24sIGludCBpZCwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGJvb2wgaW1wb3J0YW50KQorc3RhdGljIGlubGluZSBib29sIGlzQ29sb3JQcm9wZXJ0
eUlEKGludCBwcm9wZXJ0eUlkKQogeworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
clRvcENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyTGVmdENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJTdGFydENvbG9y
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRDb2xvcjoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlckFmdGVyQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dFVuZGVybGluZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVDb2xv
cjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dEZpbGxDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9r
ZUNvbG9yOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBwYXJzZUNvbG9yVmFsdWUoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uLCBpbnQgcHJvcGVydHlJZCwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBib29sIHN0cmljdCkKK3sKKyAgICBpZiAo
IWlzQ29sb3JQcm9wZXJ0eUlEKHByb3BlcnR5SWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgQ1NTU3R5bGVTaGVldCogc3R5bGVzaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQq
PihkZWNsYXJhdGlvbi0+c3R5bGVzaGVldCgpKTsKKyAgICBpZiAoIXN0eWxlc2hlZXQgfHwgIXN0
eWxlc2hlZXQtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWVDYWNoZT4gcHJpbWl0aXZlVmFsdWVDYWNoZSA9IHN0eWxlc2hlZXQt
PmRvY3VtZW50KCktPmNzc1ByaW1pdGl2ZVZhbHVlQ2FjaGUoKTsKKyAgICBpZiAoIXN0cmluZy5s
ZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENTU1BhcnNlclN0cmluZyBjc3NT
dHJpbmc7CisgICAgY3NzU3RyaW5nLmNoYXJhY3RlcnMgPSBjb25zdF9jYXN0PFVDaGFyKj4oc3Ry
aW5nLmNoYXJhY3RlcnMoKSk7CisgICAgY3NzU3RyaW5nLmxlbmd0aCA9IHN0cmluZy5sZW5ndGgo
KTsKKyAgICBpbnQgdmFsdWVJRCA9IGNzc1ZhbHVlS2V5d29yZElEKGNzc1N0cmluZyk7CisgICAg
Ym9vbCB2YWxpZFByaW1pdGl2ZSA9IGZhbHNlOworICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVl
V2Via2l0VGV4dCkKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgIGVsc2UgaWYg
KHZhbHVlSUQgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCisgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKKyAgICBlbHNlIGlmICgodmFsdWVJRCA+PSBDU1NWYWx1ZUFxdWEgJiYgdmFsdWVJ
RCA8PSBDU1NWYWx1ZVdpbmRvd3RleHQpIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVNZW51CisgICAg
ICAgICAgICAgfHwgKHZhbHVlSUQgPj0gQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvciAmJiB2
YWx1ZUlEIDwgQ1NTVmFsdWVXZWJraXRUZXh0ICYmICFzdHJpY3QpKSB7CisgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHZhbGlkUHJpbWl0aXZlKSB7CisgICAg
ICAgIENTU1Byb3BlcnR5IHByb3BlcnR5KHByb3BlcnR5SWQsIHByaW1pdGl2ZVZhbHVlQ2FjaGUt
PmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlEKSwgaW1wb3J0YW50KTsKKyAgICAgICAgZGVj
bGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnR5KHByb3BlcnR5KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIFJHQkEzMiBjb2xvcjsKKyAgICBpZiAoIUNTU1BhcnNlcjo6cGFyc2VD
b2xvcihzdHJpbmcsIGNvbG9yLCBzdHJpY3QgJiYgc3RyaW5nWzBdICE9ICcjJykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBDU1NQcm9wZXJ0eSBwcm9wZXJ0eShwcm9wZXJ0eUlkLCBwcmlt
aXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVDb2xvclZhbHVlKGNvbG9yKSwgaW1wb3J0YW50KTsKKyAg
ICBkZWNsYXJhdGlvbi0+YWRkUGFyc2VkUHJvcGVydHkocHJvcGVydHkpOworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTaW1wbGVMZW5ndGhQcm9wZXJ0eUlEKGlu
dCBwcm9wZXJ0eUlkLCBib29sJiBhY2NlcHRzTmVnYXRpdmVOdW1iZXJzKQoreworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U2l6ZToKKyAgICBjYXNl
IENTU1Byb3BlcnR5TWluSGVpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5XaWR0aDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNhbFdpZHRoOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNaW5Mb2dpY2FsSGVpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5n
VG9wOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQ6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVBhZGRpbmdCb3R0b206CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0OgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nU3RhcnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFBhZGRpbmdFbmQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdCZWZv
cmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdBZnRlcjoKKyAgICBjYXNlIENT
U1Byb3BlcnR5SGVpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXaWR0aDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TG9naWNhbFdpZHRoOiAgCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dExvZ2ljYWxIZWlnaHQ6CisgICAgICAgIGFjY2VwdHNOZWdhdGl2ZU51bWJlcnMgPSBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRJbmRlbnQ6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvdHRvbToKKyAgICBjYXNlIENTU1Byb3BlcnR5TGVmdDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5UmlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRvcDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5TWFyZ2luVG9wOgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5SaWdo
dDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luQm90dG9tOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlNYXJnaW5MZWZ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5TdGFydDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luRW5kOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXJnaW5CZWZvcmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkFmdGVy
OgorICAgICAgICBhY2NlcHRzTmVnYXRpdmVOdW1iZXJzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
c3RhdGljIGJvb2wgcGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogZGVjbGFyYXRpb24sIGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywg
Ym9vbCBpbXBvcnRhbnQsIGJvb2wgc3RyaWN0KQoreworICAgIGJvb2wgYWNjZXB0c05lZ2F0aXZl
TnVtYmVyczsKKyAgICBpZiAoIWlzU2ltcGxlTGVuZ3RoUHJvcGVydHlJRChwcm9wZXJ0eUlkLCBh
Y2NlcHRzTmVnYXRpdmVOdW1iZXJzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENTU1N0
eWxlU2hlZXQqIHN0eWxlc2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oZGVjbGFy
YXRpb24tPnN0eWxlc2hlZXQoKSk7CisgICAgaWYgKCFzdHlsZXNoZWV0IHx8ICFzdHlsZXNoZWV0
LT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlQ2FjaGU+IHByaW1pdGl2ZVZhbHVlQ2FjaGUgPSBzdHlsZXNoZWV0LT5kb2N1bWVu
dCgpLT5jc3NQcmltaXRpdmVWYWx1ZUNhY2hlKCk7CisKKyAgICBjb25zdCBVQ2hhciogY2hhcmFj
dGVycyA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5n
Lmxlbmd0aCgpOworICAgIGlmICghY2hhcmFjdGVycyB8fCAhbGVuZ3RoKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjsKKyAgICBpZiAobGVuZ3RoID4gMiAmJiBjaGFyYWN0
ZXJzW2xlbmd0aCAtIDJdID09ICdwJyAmJiBjaGFyYWN0ZXJzW2xlbmd0aCAtIDFdID09ICd4Jykg
eworICAgICAgICBsZW5ndGggLT0gMjsKKyAgICAgICAgdW5pdCA9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFg7CisgICAgfSBlbHNlIGlmIChsZW5ndGggPiAxICYmIGNoYXJhY3RlcnNbbGVuZ3Ro
IC0gMV0gPT0gJyUnKSB7CisgICAgICAgIGxlbmd0aCAtPSAxOworICAgICAgICB1bml0ID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFOworICAgIH0KKworICAgIGJvb2wgb2s7Cisg
ICAgZG91YmxlIG51bWJlciA9IGNoYXJhY3RlcnNUb0RvdWJsZShjaGFyYWN0ZXJzLCBsZW5ndGgs
ICZvayk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh1bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB7CisgICAgICAgIGlmIChudW1iZXIg
JiYgc3RyaWN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bml0ID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWDsKKyAgICB9CisgICAgaWYgKG51bWJlciA8IDAgJiYgIWFj
Y2VwdHNOZWdhdGl2ZU51bWJlcnMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENTU1By
b3BlcnR5IHByb3BlcnR5KHByb3BlcnR5SWQsIHByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZVZh
bHVlKG51bWJlciwgdW5pdCksIGltcG9ydGFudCk7CisgICAgZGVjbGFyYXRpb24tPmFkZFBhcnNl
ZFByb3BlcnR5KHByb3BlcnR5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uLCBp
bnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBib29s
IHN0cmljdCkKK3sKKyAgICBpZiAocGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShkZWNsYXJhdGlvbiwg
cHJvcGVydHlJZCwgc3RyaW5nLCBpbXBvcnRhbnQsIHN0cmljdCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChwYXJzZUNvbG9yVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SWQsIHN0
cmluZywgaW1wb3J0YW50LCBzdHJpY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBDU1NQ
YXJzZXIgcGFyc2VyKHN0cmljdCk7CisgICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlKGRlY2xh
cmF0aW9uLCBwcm9wZXJ0eUlkLCBzdHJpbmcsIGltcG9ydGFudCk7Cit9CisKK2Jvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbiwg
aW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCkKK3sK
ICAgICBBU1NFUlQoIWRlY2xhcmF0aW9uLT5zdHlsZXNoZWV0KCkgfHwgZGVjbGFyYXRpb24tPnN0
eWxlc2hlZXQoKS0+aXNDU1NTdHlsZVNoZWV0KCkpOwogICAgIHNldFN0eWxlU2hlZXQoc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KGRlY2xhcmF0aW9uLT5zdHlsZXNoZWV0KCkpKTsKIAogICAg
IHNldHVwUGFyc2VyKCJALXdlYmtpdC12YWx1ZXsiLCBzdHJpbmcsICJ9ICIpOwogCi0gICAgbV9p
ZCA9IGlkOworICAgIG1faWQgPSBwcm9wZXJ0eUlkOwogICAgIG1faW1wb3J0YW50ID0gaW1wb3J0
YW50OwogCiAgICAgY3NzeXlwYXJzZSh0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJ
KHJldmlzaW9uIDgzMDc1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIHZvaWQgcGFyc2VTaGVldChDU1NT
dHlsZVNoZWV0KiwgY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0TGluZU51bWJlciA9IDAsIFN0eWxl
UnVsZVJhbmdlTWFwKiBydWxlUmFuZ2VNYXAgPSAwKTsKICAgICAgICAgUGFzc1JlZlB0cjxDU1NS
dWxlPiBwYXJzZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwogICAgICAgICBQ
YXNzUmVmUHRyPENTU1J1bGU+IHBhcnNlS2V5ZnJhbWVSdWxlKENTU1N0eWxlU2hlZXQqLCBjb25z
dCBTdHJpbmcmKTsKLSAgICAgICAgYm9vbCBwYXJzZVZhbHVlKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiwgaW50IHByb3BJZCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQpOworICAg
ICAgICBzdGF0aWMgYm9vbCBwYXJzZVZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwg
aW50IHByb3BJZCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgc3RyaWN0KTsK
ICAgICAgICAgc3RhdGljIGJvb2wgcGFyc2VDb2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJp
bmcmLCBib29sIHN0cmljdCA9IGZhbHNlKTsKICAgICAgICAgc3RhdGljIGJvb2wgcGFyc2VTeXN0
ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBEb2N1bWVudCopOwogICAgICAg
ICBib29sIHBhcnNlQ29sb3IoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJp
bmcmKTsKQEAgLTI5MSw2ICsyOTEsOCBAQAogICAgICAgICBib29sIGlzR2VuZXJhdGVkSW1hZ2VW
YWx1ZShDU1NQYXJzZXJWYWx1ZSopIGNvbnN0OwogICAgICAgICBib29sIHBhcnNlR2VuZXJhdGVk
SW1hZ2UoUmVmUHRyPENTU1ZhbHVlPiYpOwogCisgICAgICAgIGJvb2wgcGFyc2VWYWx1ZShDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGludCBwcm9wSWQsIGNvbnN0IFN0cmluZyYsIGJvb2wg
aW1wb3J0YW50KTsKKwogICAgICAgICBlbnVtIFNpemVQYXJhbWV0ZXJUeXBlIHsKICAgICAgICAg
ICAgIE5vbmUsCiAgICAgICAgICAgICBBdXRvLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dl
YktpdENTU01hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktp
dENTU01hdHJpeC5jcHAJKHJldmlzaW9uIDgzMDc1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dl
YktpdENTU01hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDggQEAKIAogdm9p
ZCBXZWJLaXRDU1NNYXRyaXg6OnNldE1hdHJpeFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBDU1NQYXJzZXIgcCh0cnVlKTsKICAgICBSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlRGVjbGFyYXRpb24gPSBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgaWYgKHAucGFyc2VWYWx1ZShzdHlsZURl
Y2xhcmF0aW9uLmdldCgpLCBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwgc3RyaW5nLCB0cnVl
KSkgeworICAgIGlmIChDU1NQYXJzZXI6OnBhcnNlVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi5nZXQo
KSwgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0sIHN0cmluZywgdHJ1ZSwgdHJ1ZSkpIHsKICAg
ICAgICAgLy8gQ29udmVydCB0byBUcmFuc2Zvcm1PcGVyYXRpb25zLiBUaGlzIGNhbiBmYWlsIGlm
IGEgcHJvcGVydHkgCiAgICAgICAgIC8vIHJlcXVpcmVzIHN0eWxlIChpLmUuLCBwYXJhbSB1c2Vz
ICdlbXMnIG9yICdleHMnKQogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gc3R5bGVE
ZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bSk7Cg==
</data>
<flag name="review"
          id="81046"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="81047"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88534</attachid>
            <date>2011-04-06 15:42:06 -0700</date>
            <delta_ts>2011-04-06 15:46:12 -0700</delta_ts>
            <desc>updated patch 2</desc>
            <filename>57964-3.patch</filename>
            <type>text/plain</type>
            <size>11497</size>
            <attacher name="Ian Henderson">ian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMDc2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMDQtMDYgIElhbiBIZW5k
ZXJzb24gIDxpYW5oQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGYXN0IHBhdGggZm9yIHBhcnNpbmcgc2ltcGxlIENTUyB2YWx1ZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3OTY0CisK
KyAgICAgICAgQWRkIGZ1bmN0aW9ucyB0byBwYXJzZSBzaW1wbGUgY29sb3Igb3IgZGltZW5zaW9u
IHZhbHVlcywgc2tpcHBpbmcgdGhlCisgICAgICAgIG92ZXJoZWFkIG9mIGZ1bGwgQ1NTIHBhcnNp
bmcuCisKKyAgICAgICAgQ2hhbmdlIHBhcnNlVmFsdWUgdG8gYSBzdGF0aWMgbWV0aG9kIHRvIGF2
b2lkIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24KKyAgICAgICAgb2YgYSBDU1NQYXJzZXIgaW4gdGhl
IGZhc3QgY2FzZS4KKworICAgICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJv
cGVydHkpOgorICAgICAgICBDaGFuZ2VkIHRvIHVzZSB0aGUgbmV3LCBzdGF0aWMgcGFyc2VWYWx1
ZSBtZXRob2QuCisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojppc0NvbG9yUHJvcGVydHlJRCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNvbG9yVmFsdWUp
OgorICAgICAgICBQYXJzZXMgYW55IGNvbG9yIGFjY2VwdGVkIGJ5IHRoZSBleGlzdGluZyBwYXJz
ZUNvbG9yKCkgc3RhdGljIG1ldGhvZC4KKyAgICAgICAgV2UgbXVzdCBoYW5kbGUgY29sb3IgaWRl
bnRpZmllcnMgc2VwYXJhdGVseSwgc2luY2UgcGFyc2VDb2xvcigpIHdpbGwKKyAgICAgICAgY2hh
bmdlICdyZWQnIGludG8gJ3JnYigyNTUsIDAsIDApJy4KKyAgICAgICAgKFdlYkNvcmU6OmlzU2lt
cGxlTGVuZ3RoUHJvcGVydHlJRCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNpbXBsZUxlbmd0
aFZhbHVlKToKKyAgICAgICAgUGFyc2VzIGEgdmFsdWUgb2YgdGhlIGZvcm0gJ05OcHgnLCAnTk4l
Jywgb3IgJ05OJyAod2hlbiBzdHJpY3QgaXMKKyAgICAgICAgZmFsc2UsIG9yICdOTicgaXMgJzAn
KS4gIFJldHVybnMgZmFsc2UgdG8gZmFsbCBiYWNrIHRvIHRoZSBzbG93IHBhdGguCisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NQYXJz
ZXIuaDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYktpdENTU01hdHJpeDo6c2V0TWF0cml4VmFsdWUpOgorICAgICAgICBDaGFuZ2VkIHRv
IHVzZSB0aGUgbmV3LCBzdGF0aWMgcGFyc2VWYWx1ZSBtZXRob2QuCisKIDIwMTEtMDQtMDYgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlt
aXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiA4MzA3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
MSw4ICs1NzEsNyBAQAogCiAgICAgLy8gV2hlbiByZXBsYWNpbmcgYW4gZXhpc3RpbmcgcHJvcGVy
dHkgdmFsdWUsIHRoaXMgbW92ZXMgdGhlIHByb3BlcnR5IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3Qu
CiAgICAgLy8gRmlyZWZveCBwcmVzZXJ2ZXMgdGhlIHBvc2l0aW9uLCBhbmQgTVNJRSBtb3ZlcyB0
aGUgcHJvcGVydHkgdG8gdGhlIGJlZ2lubmluZy4KLSAgICBDU1NQYXJzZXIgcGFyc2VyKHVzZVN0
cmljdFBhcnNpbmcoKSk7Ci0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2VyLnBhcnNlVmFsdWUodGhp
cywgcHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCk7CisgICAgYm9vbCBzdWNjZXNzID0gQ1NT
UGFyc2VyOjpwYXJzZVZhbHVlKHRoaXMsIHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHVz
ZVN0cmljdFBhcnNpbmcoKSk7CiAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgIC8vIENTUyBE
T00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIGhlcmUsIGJ1dCB0aGlzIGlzIHRvbyBkYW5n
ZXJvdXMgZm9yIGNvbXBhdGliaWxpdHksCiAgICAgICAgIC8vIHNlZSA8aHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5Nj4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAkocmV2aXNpb24gODMwNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDE0ICsyNTksMTcxIEBACiAgICAgcmV0dXJuIG1fa2V5
ZnJhbWUucmVsZWFzZSgpOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24sIGludCBpZCwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGJvb2wgaW1wb3J0YW50KQorc3RhdGljIGlubGluZSBib29sIGlzQ29sb3JQcm9wZXJ0
eUlEKGludCBwcm9wZXJ0eUlkKQogeworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgQ1NTUHJvcGVydHlDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcjoKKyAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyTGVmdENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENv
bG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcjoKKyAgICBjYXNlIENTU1By
b3BlcnR5T3V0bGluZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hD
b2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lQ29sb3I6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVyQWZ0ZXJDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3Jl
Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZENvbG9yOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJTdGFydENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRDb2x1bW5SdWxlQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRF
bXBoYXNpc0NvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3I6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K3N0YXRpYyBib29sIHBhcnNlQ29sb3JWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiog
ZGVjbGFyYXRpb24sIGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBp
bXBvcnRhbnQsIGJvb2wgc3RyaWN0KQoreworICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpc0NvbG9yUHJvcGVydHlJRChwcm9wZXJ0eUlk
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENTU1BhcnNlclN0cmluZyBjc3NTdHJpbmc7
CisgICAgY3NzU3RyaW5nLmNoYXJhY3RlcnMgPSBjb25zdF9jYXN0PFVDaGFyKj4oc3RyaW5nLmNo
YXJhY3RlcnMoKSk7CisgICAgY3NzU3RyaW5nLmxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAg
ICBpbnQgdmFsdWVJRCA9IGNzc1ZhbHVlS2V5d29yZElEKGNzc1N0cmluZyk7CisgICAgYm9vbCB2
YWxpZFByaW1pdGl2ZSA9IGZhbHNlOworICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlV2Via2l0
VGV4dCkKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOworICAgIGVsc2UgaWYgKHZhbHVl
SUQgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKKyAgICBlbHNlIGlmICgodmFsdWVJRCA+PSBDU1NWYWx1ZUFxdWEgJiYgdmFsdWVJRCA8PSBD
U1NWYWx1ZVdpbmRvd3RleHQpIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVNZW51CisgICAgICAgICAg
ICAgfHwgKHZhbHVlSUQgPj0gQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvciAmJiB2YWx1ZUlE
IDwgQ1NTVmFsdWVXZWJraXRUZXh0ICYmICFzdHJpY3QpKSB7CisgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZXNoZWV0ID0gc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KGRlY2xhcmF0aW9uLT5zdHlsZXNoZWV0KCkpOworICAg
IGlmICghc3R5bGVzaGVldCB8fCAhc3R5bGVzaGVldC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICh2YWxpZFByaW1pdGl2ZSkgeworICAgICAgICBDU1NQcm9wZXJ0
eSBwcm9wZXJ0eShwcm9wZXJ0eUlkLCBzdHlsZXNoZWV0LT5kb2N1bWVudCgpLT5jc3NQcmltaXRp
dmVWYWx1ZUNhY2hlKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlEKSwgaW1wb3J0YW50
KTsKKyAgICAgICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnR5KHByb3BlcnR5KTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIFJHQkEzMiBjb2xvcjsKKyAgICBpZiAoIUNT
U1BhcnNlcjo6cGFyc2VDb2xvcihzdHJpbmcsIGNvbG9yLCBzdHJpY3QgJiYgc3RyaW5nWzBdICE9
ICcjJykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDU1NQcm9wZXJ0eSBwcm9wZXJ0eShw
cm9wZXJ0eUlkLCBzdHlsZXNoZWV0LT5kb2N1bWVudCgpLT5jc3NQcmltaXRpdmVWYWx1ZUNhY2hl
KCktPmNyZWF0ZUNvbG9yVmFsdWUoY29sb3IpLCBpbXBvcnRhbnQpOworICAgIGRlY2xhcmF0aW9u
LT5hZGRQYXJzZWRQcm9wZXJ0eShwcm9wZXJ0eSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc1NpbXBsZUxlbmd0aFByb3BlcnR5SUQoaW50IHByb3BlcnR5SWQs
IGJvb2wmIGFjY2VwdHNOZWdhdGl2ZU51bWJlcnMpCit7CisgICAgc3dpdGNoIChwcm9wZXJ0eUlk
KSB7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlI
ZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlN
aW5IZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1pbldpZHRoOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlQYWRkaW5nQm90dG9tOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nTGVmdDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0OiAKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFk
ZGluZ1RvcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNhbFdpZHRoOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRMb2dpY2FsSGVpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNaW5Mb2dpY2FsV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1pbkxvZ2lj
YWxIZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdBZnRlcjoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0JlZm9yZToKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0UGFkZGluZ0VuZDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ1N0YXJ0
OgorICAgICAgICBhY2NlcHRzTmVnYXRpdmVOdW1iZXJzID0gZmFsc2U7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGNhc2UgQ1NTUHJvcGVydHlCb3R0b206CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUxlZnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbToKKyAgICBjYXNlIENTU1By
b3BlcnR5TWFyZ2luTGVmdDogCisgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0OiAKKyAg
ICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luVG9wOgorICAgIGNhc2UgQ1NTUHJvcGVydHlSaWdodDoK
KyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEluZGVudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5VG9w
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5BZnRlcjoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFyZ2luQmVmb3JlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJn
aW5FbmQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblN0YXJ0OgorICAgICAgICBh
Y2NlcHRzTmVnYXRpdmVOdW1iZXJzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIGJvb2wg
cGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFy
YXRpb24sIGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRh
bnQsIGJvb2wgc3RyaWN0KQoreworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3RyaW5n
LmNoYXJhY3RlcnMoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Cisg
ICAgaWYgKCFjaGFyYWN0ZXJzIHx8ICFsZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBib29sIGFjY2VwdHNOZWdhdGl2ZU51bWJlcnM7CisgICAgaWYgKCFpc1NpbXBsZUxlbmd0aFBy
b3BlcnR5SUQocHJvcGVydHlJZCwgYWNjZXB0c05lZ2F0aXZlTnVtYmVycykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOworICAgIGlmIChsZW5ndGggPiAyICYmIGNoYXJh
Y3RlcnNbbGVuZ3RoIC0gMl0gPT0gJ3AnICYmIGNoYXJhY3RlcnNbbGVuZ3RoIC0gMV0gPT0gJ3gn
KSB7CisgICAgICAgIGxlbmd0aCAtPSAyOworICAgICAgICB1bml0ID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QWDsKKyAgICB9IGVsc2UgaWYgKGxlbmd0aCA+IDEgJiYgY2hhcmFjdGVyc1tsZW5n
dGggLSAxXSA9PSAnJScpIHsKKyAgICAgICAgbGVuZ3RoIC09IDE7CisgICAgICAgIHVuaXQgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U7CisgICAgfQorCisgICAgLy8gV2UgcmVs
eSBvbiBjaGFyYWN0ZXJzVG9Eb3VibGUgZm9yIHZhbGlkYXRpb24gYXMgd2VsbC4gIFRoZSBmdW5j
dGlvbgorICAgIC8vIHdpbGwgc2V0ICJvayIgdG8gImZhbHNlIiBpZiB0aGUgZW50aXJlIHBhc3Nl
ZC1pbiBjaGFyYWN0ZXIgcmFuZ2UgZG9lcworICAgIC8vIG5vdCByZXByZXNlbnQgYSBkb3VibGUu
CisgICAgYm9vbCBvazsKKyAgICBkb3VibGUgbnVtYmVyID0gY2hhcmFjdGVyc1RvRG91YmxlKGNo
YXJhY3RlcnMsIGxlbmd0aCwgJm9rKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKHVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsKKyAg
ICAgICAgaWYgKG51bWJlciAmJiBzdHJpY3QpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHVuaXQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYOworICAgIH0KKyAgICBpZiAo
bnVtYmVyIDwgMCAmJiAhYWNjZXB0c05lZ2F0aXZlTnVtYmVycykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVzaGVldCA9IHN0YXRpY19jYXN0PENTU1N0
eWxlU2hlZXQqPihkZWNsYXJhdGlvbi0+c3R5bGVzaGVldCgpKTsKKyAgICBpZiAoIXN0eWxlc2hl
ZXQgfHwgIXN0eWxlc2hlZXQtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBDU1NQcm9wZXJ0eSBwcm9wZXJ0eShwcm9wZXJ0eUlkLCBzdHlsZXNoZWV0LT5kb2N1bWVudCgp
LT5jc3NQcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKG51bWJlciwgdW5pdCksIGlt
cG9ydGFudCk7CisgICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnR5KHByb3BlcnR5KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uLCBpbnQgcHJvcGVydHlJZCwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBib29sIHN0cmljdCkKK3sKKyAgICBpZiAo
cGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJZCwgc3RyaW5nLCBp
bXBvcnRhbnQsIHN0cmljdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChwYXJzZUNv
bG9yVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SWQsIHN0cmluZywgaW1wb3J0YW50LCBzdHJp
Y3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKHN0cmljdCk7
CisgICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlkLCBz
dHJpbmcsIGltcG9ydGFudCk7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbiwgaW50IHByb3BlcnR5SWQsIGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCkKK3sKICAgICBBU1NFUlQoIWRlY2xhcmF0
aW9uLT5zdHlsZXNoZWV0KCkgfHwgZGVjbGFyYXRpb24tPnN0eWxlc2hlZXQoKS0+aXNDU1NTdHls
ZVNoZWV0KCkpOwogICAgIHNldFN0eWxlU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+
KGRlY2xhcmF0aW9uLT5zdHlsZXNoZWV0KCkpKTsKIAogICAgIHNldHVwUGFyc2VyKCJALXdlYmtp
dC12YWx1ZXsiLCBzdHJpbmcsICJ9ICIpOwogCi0gICAgbV9pZCA9IGlkOworICAgIG1faWQgPSBw
cm9wZXJ0eUlkOwogICAgIG1faW1wb3J0YW50ID0gaW1wb3J0YW50OwogCiAgICAgY3NzeXlwYXJz
ZSh0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHJldmlzaW9uIDgzMDc1KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2
Myw3IEBACiAgICAgICAgIHZvaWQgcGFyc2VTaGVldChDU1NTdHlsZVNoZWV0KiwgY29uc3QgU3Ry
aW5nJiwgaW50IHN0YXJ0TGluZU51bWJlciA9IDAsIFN0eWxlUnVsZVJhbmdlTWFwKiBydWxlUmFu
Z2VNYXAgPSAwKTsKICAgICAgICAgUGFzc1JlZlB0cjxDU1NSdWxlPiBwYXJzZVJ1bGUoQ1NTU3R5
bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwogICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGU+IHBh
cnNlS2V5ZnJhbWVSdWxlKENTU1N0eWxlU2hlZXQqLCBjb25zdCBTdHJpbmcmKTsKLSAgICAgICAg
Ym9vbCBwYXJzZVZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgaW50IHByb3BJZCwg
Y29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQpOworICAgICAgICBzdGF0aWMgYm9vbCBwYXJz
ZVZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgaW50IHByb3BJZCwgY29uc3QgU3Ry
aW5nJiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgc3RyaWN0KTsKICAgICAgICAgc3RhdGljIGJvb2wg
cGFyc2VDb2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBib29sIHN0cmljdCA9IGZh
bHNlKTsKICAgICAgICAgc3RhdGljIGJvb2wgcGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImIGNvbG9y
LCBjb25zdCBTdHJpbmcmLCBEb2N1bWVudCopOwogICAgICAgICBib29sIHBhcnNlQ29sb3IoQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmKTsKQEAgLTI5MSw2ICsyOTEs
OCBAQAogICAgICAgICBib29sIGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZShDU1NQYXJzZXJWYWx1ZSop
IGNvbnN0OwogICAgICAgICBib29sIHBhcnNlR2VuZXJhdGVkSW1hZ2UoUmVmUHRyPENTU1ZhbHVl
PiYpOwogCisgICAgICAgIGJvb2wgcGFyc2VWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biosIGludCBwcm9wSWQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50KTsKKwogICAgICAg
ICBlbnVtIFNpemVQYXJhbWV0ZXJUeXBlIHsKICAgICAgICAgICAgIE5vbmUsCiAgICAgICAgICAg
ICBBdXRvLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAJKHJldmlz
aW9uIDgzMDc1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDggQEAKIAogdm9pZCBXZWJLaXRDU1NNYXRyaXg6OnNl
dE1hdHJpeFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBDU1NQYXJzZXIgcCh0cnVlKTsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IHN0eWxlRGVjbGFyYXRpb24gPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3Jl
YXRlKCk7Ci0gICAgaWYgKHAucGFyc2VWYWx1ZShzdHlsZURlY2xhcmF0aW9uLmdldCgpLCBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwgc3RyaW5nLCB0cnVlKSkgeworICAgIGlmIChDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi5nZXQoKSwgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm0sIHN0cmluZywgdHJ1ZSwgdHJ1ZSkpIHsKICAgICAgICAgLy8gQ29udmVydCB0byBU
cmFuc2Zvcm1PcGVyYXRpb25zLiBUaGlzIGNhbiBmYWlsIGlmIGEgcHJvcGVydHkgCiAgICAgICAg
IC8vIHJlcXVpcmVzIHN0eWxlIChpLmUuLCBwYXJhbSB1c2VzICdlbXMnIG9yICdleHMnKQogICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7Cg==
</data>
<flag name="review"
          id="81060"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="81061"
          type_id="3"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>