<?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>83092</bug_id>
          
          <creation_ts>2012-04-03 16:28:08 -0700</creation_ts>
          <short_desc>Remove intrinsic padding from contentBoxRect(), etc.</short_desc>
          <delta_ts>2012-04-06 10:55:41 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Dave Barton">dbarton</reporter>
          <assigned_to name="Dave Barton">dbarton</assigned_to>
          <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>595017</commentid>
    <comment_count>0</comment_count>
      <attachid>135451</attachid>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-04-03 16:28:08 -0700</bug_when>
    <thetext>Created attachment 135451
Test case with intrinsic padding (in silver)

&quot;Intrinsic padding&quot; does not count as CSS padding, but is treated as padding by basic layout and rendering code, e.g. RenderBlock::layout(). A lot of code relies on the equation border-box = content-box + padding + border. To keep this valid, I think the following 5 content-box functions in RenderBox.h should not include intrinsic padding in the content box by default: contentBoxRect(), contentWidth(), contentHeight(), contentLogicalWidth(), contentLogicalHeight(). Instead, sizingBox(renderer) in CSSComputedStyleDeclaration.cpp should pass contentBoxRect() a parameter to explicitly include include intrinsic padding for computed CSS content-box values [for javascript getComputedStyle()]. This seems more consistent with how the padding...() functions behave since the patch for bug 23487, and will work better for MathML.

It&apos;s hard to come up with a test case for this, since the only intrinsic padding now is in vertical positioning of table cells, and parameters are mostly passed as needed to make this case work. Apparently the only two places with observable behavior that would really be affected by this change are demonstrated in the attached test case as follows. If you double-click to the right of the topmost or bottommost portion of the silver box (intrinsic padding), the left tan box should be selected. This works in Safari 5.1.5, for instance. In the latest nightly build, since bug 33593 was fixed, this no longer works in the bottom position. Also, if you hover over the right &lt;td&gt; element in the Web Inspector window (right-click and &quot;Inspect Element&quot; to open the Inspector), the highlighted box is too tall.

These cases could be fixed by each passing a parameter to e.g. contentBoxRect(). More seriously, for MathML I would like to introduce some horizontal intrinsic padding, but then e.g. { text-align: center } now works incorrectly in my tests, basically because a containing block&apos;s content-box is computed to include intrinsic padding. Thus I propose that normal flow routines in general that treat intrinsic padding as padding, to not also put the intrinsic padding in the content box.

Opinions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595200</commentid>
    <comment_count>1</comment_count>
      <attachid>135500</attachid>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-04-03 20:32:06 -0700</bug_when>
    <thetext>Created attachment 135500
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595687</commentid>
    <comment_count>2</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-04-04 10:42:05 -0700</bug_when>
    <thetext>The renaming part of this patch is motivated by the following. Current code includes:

enum PaddingOptions { IncludeIntrinsicPadding, ExcludeIntrinsicPadding };

LayoutUnit contentWidth(PaddingOptions paddingOption = ExcludeIntrinsicPadding) const { return clientWidth() - paddingLeft(paddingOption) - paddingRight(paddingOption); }

Thus contentWidth(ExcludeIntrinsicPadding) actually returns a width that includes intrinsic padding, and contentWidth(IncludeIntrinsicPadding) returns a width that excludes it. Since paddingOption really controls whether the padding includes the intrinsic padding or not, the patch proposes:

enum PaddingOptions /* for intrinsic padding */ { PaddingIncludesIntrinsic, PaddingExcludesIntrinsic };

Then e.g. contentWidth(PaddingIncludesIntrinsic) returns a content width without intrinsic padding, since it&apos;s considered part of the padding and not the content box.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595810</commentid>
    <comment_count>3</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-04-04 12:39:51 -0700</bug_when>
    <thetext>Sincerely I think we should stop this madness. I wish I had stopped the original change as:
1) it makes the code a lot more error prone.
2) it exposes the intrinsic padding information to a whole new range of classes that really shouldn&apos;t know about it.

Note that your change makes the situation better but I really don&apos;t think continuing down that path is helping anything. If we can, I would rather see a solution based on:
* removing the enum parameter from the different widths / heights (maybe also padding*)
* adding more functions that can be called when you want the information including our intrinsic quirks (like contentHeightIncludingIntrinsicPadding or fullContentHeight but I don&apos;t like those names). Most of them would actually be on RenderTableCell as only the table code needs to know about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595934</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-04-04 14:23:20 -0700</bug_when>
    <thetext>I agree with (1) maybe but not (2). CSSComputedStyleDeclaration needs the padding to not include the intrinsic padding, whereas almost everything else needs the opposite. (TableCell and maybe TableRow need to handle it specially, of course, as will MathML.) So we have to expose the concept somehow to these classes at least. Also other derived classes in the future might want to use intrinsic padding. So I think something about it should be in RenderBox.h and even RenderBoxModelObject.h, as in the Dave Hyatt&apos;s original bug 23487 patch. We don&apos;t want CSSComputedStyleDeclaration to treat TableCell as a special case, we want it to just call a virtual function in a RenderBoxModelObject and let any derived class (like TableCell) handle any intrinsic padding privately.

If the real problem is that you&apos;d rather not have intrinsic padding spread to e.g. MathML, then we could discuss that, probably in a separate bug. But I think this patch is an improvement and needs to be landed in any case, though we could remove the parameter from some functions by creating alternative versions of them as you say. But if these versions are also virtual functions in RenderBoxModelObject.h, I don&apos;t think things are really made clearer or less error-prone. Naming the new functions is as hard as naming these enum values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595947</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-04-04 14:30:14 -0700</bug_when>
    <thetext>P.S. By the &quot;original change&quot;, Julien presumably means the patch for bug 33593 landed a month ago. I agree that I&apos;m just trying to revert these 5 functions to their default behavior before that patch was landed. We need bug 33593 fixed for computed CSS values, but not for all other uses of the content box.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596097</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-04-04 16:46:51 -0700</bug_when>
    <thetext>I think Julien&apos;s comment is finally sinking in for me. What if we remove the enum parameter from the 5 content-box functions, putting them back to their old behavior of treating intrinsic padding as padding. Then we edit just sizingBox() in CSSComputedStyleDeclaration.cpp to use the padding functions instead of contentBoxRect(). We could then even go back to the old enum names if you want, making this a very small patch, while still fixing all my problems. Will this minimize confusion and the chance of future bugs for everyone?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596227</commentid>
    <comment_count>7</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-04-04 19:18:37 -0700</bug_when>
    <thetext>&gt; Then we edit just sizingBox() in CSSComputedStyleDeclaration.cpp to use the padding functions instead of contentBoxRect(). We could then even go back to the old enum names if you want, making this a very small patch, while still fixing all my problems. Will this minimize confusion and the chance of future bugs for everyone?

That was something I had in mind and dhyatt@ mentioned it too (IIRC). It would be a good compromise from my point of view.

What I envisioned would be to split the paths and explicitly say what you get:
* the usual padding* which is what RenderBoxModelObject returns and is derived directly from our CSS information.
* the paddingAndIntrinsic* ones that we use internally to be able to handle cell&apos;s intrinsic padding when doing layout.

I am trying something along those lines but that shouldn&apos;t stop you from a quick fix. I just fear spreading the enum more wil do much harm as people will rely on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596239</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-04-04 19:39:56 -0700</bug_when>
    <thetext>Great! I&apos;ll make a patch now or in the morning.

&gt; What I envisioned would be to split the paths and explicitly say what you get:
&gt; * the usual padding* which is what RenderBoxModelObject returns and is derived directly from our CSS information.
&gt; * the paddingAndIntrinsic* ones that we use internally to be able to handle cell&apos;s intrinsic padding when doing layout.

But we need the virtual padding*() functions to include any intrinsic padding by default, when called by any general (outside RenderTableCell.cpp) rendering code except in CSSComputedStyleDeclaration.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596655</commentid>
    <comment_count>9</comment_count>
      <attachid>135846</attachid>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-04-05 10:06:49 -0700</bug_when>
    <thetext>Created attachment 135846
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597146</commentid>
    <comment_count>10</comment_count>
      <attachid>135846</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-04-05 19:41:36 -0700</bug_when>
    <thetext>Comment on attachment 135846
Patch

r=me.

Filing a bug about not exposing the intrinsic padding concept outside the rendering code would be appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597161</commentid>
    <comment_count>11</comment_count>
      <attachid>135846</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-05 20:05:02 -0700</bug_when>
    <thetext>Comment on attachment 135846
Patch

Clearing flags on attachment: 135846

Committed r113407: &lt;http://trac.webkit.org/changeset/113407&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597162</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-05 20:05:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597170</commentid>
    <comment_count>13</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-04-05 20:20:36 -0700</bug_when>
    <thetext>&gt; Filing a bug about not exposing the intrinsic padding concept outside the rendering code would be appreciated.

I&apos;m not sure what this means. Do you want me to just add a comment by the enum in RenderBoxModelObject.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597483</commentid>
    <comment_count>14</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-04-06 10:55:41 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; Filing a bug about not exposing the intrinsic padding concept outside the rendering code would be appreciated.
&gt; 
&gt; I&apos;m not sure what this means. Do you want me to just add a comment by the enum in RenderBoxModelObject.h?

I just filed bug 83380 to cover that. Sorry for not being clear.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>135451</attachid>
            <date>2012-04-03 16:28:08 -0700</date>
            <delta_ts>2012-04-03 16:28:08 -0700</delta_ts>
            <desc>Test case with intrinsic padding (in silver)</desc>
            <filename>intrinsic-padding.html</filename>
            <type>text/html</type>
            <size>281</size>
            <attacher name="Dave Barton">dbarton</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgICA8c3R5bGU+CiAgICAgICAgdGQJeyBi
YWNrZ3JvdW5kLWNvbG9yOiBzaWx2ZXIgfQogICAgICAgIGRpdgl7IGJhY2tncm91bmQtY29sb3I6
IHRhbiB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cgo8Ym9keT4KCjx0YWJsZSBzdHlsZT0iYm9yZGVy
LXNwYWNpbmc6IDIwcHgiPgogICAgPHRkPjxkaXYgc3R5bGU9ImhlaWdodDogNDAwcHgiPmE8L2Rp
dj4KICAgIDx0ZD48ZGl2PmJjZDwvZGl2Pgo8L3RhYmxlPgoKPC9ib2R5PgoKPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135500</attachid>
            <date>2012-04-03 20:32:06 -0700</date>
            <delta_ts>2012-04-05 10:06:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83092-20120403203205.patch</filename>
            <type>text/plain</type>
            <size>18332</size>
            <attacher name="Dave Barton">dbarton</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzEzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDEyLTA0LTAzICBEYXZpZCBC
YXJ0b24gIDxkYmFydG9uQG1hdGhzY3JpYmUuY29tPgorCisgICAgICAgIFJlbW92ZSBpbnRyaW5z
aWMgcGFkZGluZyBmcm9tIGNvbnRlbnRCb3hSZWN0KCksIGV0Yy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzMDkyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgIkludHJpbnNpYyBwYWRkaW5nIiBkb2VzIG5v
dCBjb3VudCBhcyBDU1MgcGFkZGluZywgYnV0IGlzIHRyZWF0ZWQgYXMgcGFkZGluZyBieSBiYXNp
YworICAgICAgICBsYXlvdXQgYW5kIHJlbmRlcmluZyBjb2RlLCBlLmcuIFJlbmRlckJsb2NrOjps
YXlvdXQoKS4gQSBsb3Qgb2YgY29kZSByZWxpZXMgb24gdGhlCisgICAgICAgIGVxdWF0aW9uIGJv
cmRlci1ib3ggPSBjb250ZW50LWJveCArIHBhZGRpbmcgKyBib3JkZXIuIFRvIGtlZXAgdGhpcyB2
YWxpZCwgY2hhbmdlIDUKKyAgICAgICAgZnVuY3Rpb25zIGluIFJlbmRlckJveC5oIHRvIG5vdCBp
bmNsdWRlIGludHJpbnNpYyBwYWRkaW5nIGluIHRoZSBjb250ZW50IGJveCBieSBkZWZhdWx0Cisg
ICAgICAgIFt0aHVzIHJldmVydGluZyB0byB0aGVpciBiZWhhdmlvciBiZWZvcmUgdGhlIHBhdGNo
IGZvciBidWcgMzM1OTNdLiBJbnN0ZWFkLCBoYXZlCisgICAgICAgIHNpemluZ0JveChyZW5kZXJl
cikgaW4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBjYWxsCisgICAgICAgIGNvbnRl
bnRCb3hSZWN0KFBhZGRpbmdFeGNsdWRlc0ludHJpbnNpYykgdG8gZXhwbGljaXRseSBwdXQgdGhl
IGludHJpbnNpYyBwYWRkaW5nIGluCisgICAgICAgIGNvbXB1dGVkIENTUyBjb250ZW50LWJveCB2
YWx1ZXMgW2ZvciBqYXZhc2NyaXB0IGdldENvbXB1dGVkU3R5bGUoKV0sIHNvIHRoZSBhYm92ZQor
ICAgICAgICBlcXVhdGlvbiBzdGlsbCBhbHNvIGhvbGRzIGZvciBDU1MgY29tcHV0ZWQgdmFsdWVz
LiBUaGlzIHNlZW1zIG1vcmUgY29uc2lzdGVudCB3aXRoIGhvdworICAgICAgICB0aGUgcGFkZGlu
Zy4uLigpIGZ1bmN0aW9ucyBiZWhhdmUgc2luY2UgdGhlIHBhdGNoIGZvciBidWcgMjM0ODcsIGFu
ZCB3aWxsIHdvcmsgYmV0dGVyCisgICAgICAgIGZvciBNYXRoTUwuCisKKyAgICAgICAgVGhlIGlu
dHJpbnNpYyBwYWRkaW5nIFBhZGRpbmdPcHRpb25zIGVudW0gdmFsdWVzIGluIFJlbmRlckJveE1v
ZGVsT2JqZWN0LmggaGF2ZSBhbHNvCisgICAgICAgIGJlZW4gY2xhcmlmaWVkIGFuZCByZW5hbWVk
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhlIG9ubHkgcmVhbCBvYnNlcnZhYmxlIGNoYW5n
ZXMgYXJlIGlsbHVzdHJhdGVkIGluIHRoZSBidWcgODMwOTIgYXR0YWNoZWQKKyAgICAgICAgdGVz
dCBjYXNlIGFuZCBkaXNjdXNzaW9uLiBUaGVzZSBhcmUgbWlub3IgYW5kIGhhcmQgdG8gYXV0b21h
dGUuCisKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNpemluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGVkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRlbnRCb3hSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGVudFdpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6Y29udGVudEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmNvbnRlbnRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
b250ZW50TG9naWNhbEhlaWdodCk6CisgICAgICAgICAgICAtIENoYW5nZSB0aGVzZSA1IGZ1bmN0
aW9ucyB0byBvbWl0IGludHJpbnNpYyBwYWRkaW5nIGZyb20gdGhlIGNvbnRlbnQgYm94IGJ5IGRl
ZmF1bHQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAg
ICAgIChSZW5kZXJCb3hNb2RlbE9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdU
b3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nQm90dG9tKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0xlZnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nUmlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0FmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlQ2VsbDo6Y2VsbEJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuaDoKKyAgICAgICAgKFJlbmRlclRhYmxlQ2VsbCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZVNlY3Rpb246OmZpcnN0TGluZUJveEJhc2VsaW5lKToKKwogMjAxMi0wNC0wMyAgS2Vu
aWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVt
XSBPdXQtb2YtcHJvY2VzcyBmb250IGxvYWRpbmcgZ2FyYmxlcyB0ZXh0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2
aXNpb24gMTEzMTEyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3MCw3ICs2NzAsNyBAQCBzdGF0aWMgTGF5
b3V0UmVjdCBzaXppbmdCb3goUmVuZGVyT2JqZWN0CiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CiAKICAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKLSAgICBy
ZXR1cm4gYm94LT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IGJveC0+Y29u
dGVudEJveFJlY3QoKSA6IGJveC0+Ym9yZGVyQm94UmVjdCgpOworICAgIHJldHVybiBib3gtPnN0
eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gYm94LT5jb250ZW50Qm94UmVjdChQ
YWRkaW5nRXhjbHVkZXNJbnRyaW5zaWMpIDogYm94LT5ib3JkZXJCb3hSZWN0KCk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBoYXNDb21wb3NpdGVkTGF5ZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKQEAgLTE4NjQsMTkgKzE4NjQsMTkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0
ZWRTdHlsZURlYwogICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
c3R5bGUtPm92ZXJmbG93WSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdUb3A6
CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzQm94KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUodG9SZW5kZXJCb3gocmVuZGVy
ZXIpLT5wYWRkaW5nVG9wKEV4Y2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSwgc3R5bGUuZ2V0KCksIGNz
c1ZhbHVlUG9vbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFs
dWUodG9SZW5kZXJCb3gocmVuZGVyZXIpLT5wYWRkaW5nVG9wKFBhZGRpbmdFeGNsdWRlc0ludHJp
bnNpYyksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOwogICAgICAgICAgICAgcmV0dXJuIHpv
b21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnBhZGRpbmdUb3AoKSwgc3R5bGUu
Z2V0KCksIGNzc1ZhbHVlUG9vbCk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nUmln
aHQ6CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzQm94KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUodG9SZW5kZXJCb3gocmVu
ZGVyZXIpLT5wYWRkaW5nUmlnaHQoRXhjbHVkZUludHJpbnNpY1BhZGRpbmcpLCBzdHlsZS5nZXQo
KSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZSh0b1JlbmRlckJveChyZW5kZXJlciktPnBhZGRpbmdSaWdodChQYWRkaW5nRXhjbHVk
ZXNJbnRyaW5zaWMpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKICAgICAgICAgICAgIHJl
dHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKHN0eWxlLT5wYWRkaW5nUmlnaHQo
KSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQ
YWRkaW5nQm90dG9tOgogICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0Jv
eCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHRvUmVu
ZGVyQm94KHJlbmRlcmVyKS0+cGFkZGluZ0JvdHRvbShFeGNsdWRlSW50cmluc2ljUGFkZGluZyks
IHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgICAgIHJldHVybiB6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlKHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+cGFkZGluZ0JvdHRvbShQ
YWRkaW5nRXhjbHVkZXNJbnRyaW5zaWMpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKICAg
ICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKHN0eWxlLT5w
YWRkaW5nQm90dG9tKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOwogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5UGFkZGluZ0xlZnQ6CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVu
ZGVyZXItPmlzQm94KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVs
VmFsdWUodG9SZW5kZXJCb3gocmVuZGVyZXIpLT5wYWRkaW5nTGVmdChFeGNsdWRlSW50cmluc2lj
UGFkZGluZyksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgICAgIHJl
dHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+cGFkZGlu
Z0xlZnQoUGFkZGluZ0V4Y2x1ZGVzSW50cmluc2ljKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9v
bCk7CiAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChz
dHlsZS0+cGFkZGluZ0xlZnQoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlcjoKICAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5wYWdlQnJlYWtBZnRlcigpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAko
cmV2aXNpb24gMTEzMTEyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rp
b25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDcgKzM2Myw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSgKICAgICAgICAgLy8gTWFrZSBzdXJlIGVt
cHR5IGNlbGwgaGFzIHNvbWUgaGVpZ2h0LCBpZiBhIHBsYWNlaG9sZGVyIGNhbiBiZSBpbnNlcnRl
ZC4KICAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CiAgICAgICAgIFJlbmRlck9iamVjdCAqciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAg
ICAgIGlmIChyICYmIHItPmlzVGFibGVDZWxsKCkgJiYgdG9SZW5kZXJUYWJsZUNlbGwociktPmNv
bnRlbnRIZWlnaHQoSW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIDw9IDApIHsKKyAgICAgICAgaWYg
KHIgJiYgci0+aXNUYWJsZUNlbGwoKSAmJiB0b1JlbmRlclRhYmxlQ2VsbChyKS0+Y29udGVudEhl
aWdodChQYWRkaW5nSW5jbHVkZXNJbnRyaW5zaWMpIDw9IDApIHsKICAgICAgICAgICAgIFBvc2l0
aW9uIGZpcnN0RWRpdGFibGVQb3NpdGlvbiA9IGZpcnN0RWRpdGFibGVQb3NpdGlvbkluTm9kZShu
b2RlLmdldCgpKTsKICAgICAgICAgICAgIGlmIChmaXJzdEVkaXRhYmxlUG9zaXRpb24uaXNOb3RO
dWxsKCkpCiAgICAgICAgICAgICAgICAgaW5zZXJ0QmxvY2tQbGFjZWhvbGRlcihmaXJzdEVkaXRh
YmxlUG9zaXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2
aXNpb24gMTEzMTEyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50
UmVjdCBib3JkZXJCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckJveFJlY3QoKTsg
fSAKIAogICAgIC8vIFRoZSBjb250ZW50IGFyZWEgb2YgdGhlIGJveCAoZXhjbHVkZXMgcGFkZGlu
ZyBhbmQgYm9yZGVyKS4KLSAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0KFBhZGRpbmdPcHRp
b25zIHBhZGRpbmdPcHRpb24gPSBFeGNsdWRlSW50cmluc2ljUGFkZGluZykgY29uc3QgeyByZXR1
cm4gTGF5b3V0UmVjdChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdChwYWRkaW5nT3B0aW9uKSwg
Ym9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKHBhZGRpbmdPcHRpb24pLCBjb250ZW50V2lkdGgocGFk
ZGluZ09wdGlvbiksIGNvbnRlbnRIZWlnaHQocGFkZGluZ09wdGlvbikpOyB9CisgICAgTGF5b3V0
UmVjdCBjb250ZW50Qm94UmVjdChQYWRkaW5nT3B0aW9ucyBwYWRkaW5nT3B0aW9uID0gUGFkZGlu
Z0luY2x1ZGVzSW50cmluc2ljKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KGJvcmRlckxlZnQo
KSArIHBhZGRpbmdMZWZ0KHBhZGRpbmdPcHRpb24pLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3Ao
cGFkZGluZ09wdGlvbiksIGNvbnRlbnRXaWR0aChwYWRkaW5nT3B0aW9uKSwgY29udGVudEhlaWdo
dChwYWRkaW5nT3B0aW9uKSk7IH0KICAgICAvLyBUaGUgY29udGVudCBib3ggaW4gYWJzb2x1dGUg
Y29vcmRzLiBJZ25vcmVzIHRyYW5zZm9ybXMuCiAgICAgSW50UmVjdCBhYnNvbHV0ZUNvbnRlbnRC
b3goKSBjb25zdDsKICAgICAvLyBUaGUgY29udGVudCBib3ggY29udmVydGVkIHRvIGFic29sdXRl
IGNvb3JkcyAodGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50KS4KQEAgLTE4NSwxMCArMTg1
LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7CiAK
LSAgICBMYXlvdXRVbml0IGNvbnRlbnRXaWR0aChQYWRkaW5nT3B0aW9ucyBwYWRkaW5nT3B0aW9u
ID0gRXhjbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0IHsgcmV0dXJuIGNsaWVudFdpZHRoKCkg
LSBwYWRkaW5nTGVmdChwYWRkaW5nT3B0aW9uKSAtIHBhZGRpbmdSaWdodChwYWRkaW5nT3B0aW9u
KTsgfQotICAgIExheW91dFVuaXQgY29udGVudEhlaWdodChQYWRkaW5nT3B0aW9ucyBwYWRkaW5n
T3B0aW9uID0gRXhjbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0IHsgcmV0dXJuIGNsaWVudEhl
aWdodCgpIC0gcGFkZGluZ1RvcChwYWRkaW5nT3B0aW9uKSAtIHBhZGRpbmdCb3R0b20ocGFkZGlu
Z09wdGlvbik7IH0KLSAgICBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgoUGFkZGluZ09w
dGlvbnMgcGFkZGluZ09wdGlvbiA9IEV4Y2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25zdCB7IHJl
dHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29udGVudFdpZHRoKHBh
ZGRpbmdPcHRpb24pIDogY29udGVudEhlaWdodChwYWRkaW5nT3B0aW9uKTsgfQotICAgIExheW91
dFVuaXQgY29udGVudExvZ2ljYWxIZWlnaHQoUGFkZGluZ09wdGlvbnMgcGFkZGluZ09wdGlvbiA9
IEV4Y2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gY29udGVudEhlaWdodChwYWRkaW5nT3B0aW9uKSA6IGNvbnRl
bnRXaWR0aChwYWRkaW5nT3B0aW9uKTsgfQorICAgIExheW91dFVuaXQgY29udGVudFdpZHRoKFBh
ZGRpbmdPcHRpb25zIHBhZGRpbmdPcHRpb24gPSBQYWRkaW5nSW5jbHVkZXNJbnRyaW5zaWMpIGNv
bnN0IHsgcmV0dXJuIGNsaWVudFdpZHRoKCkgLSBwYWRkaW5nTGVmdChwYWRkaW5nT3B0aW9uKSAt
IHBhZGRpbmdSaWdodChwYWRkaW5nT3B0aW9uKTsgfQorICAgIExheW91dFVuaXQgY29udGVudEhl
aWdodChQYWRkaW5nT3B0aW9ucyBwYWRkaW5nT3B0aW9uID0gUGFkZGluZ0luY2x1ZGVzSW50cmlu
c2ljKSBjb25zdCB7IHJldHVybiBjbGllbnRIZWlnaHQoKSAtIHBhZGRpbmdUb3AocGFkZGluZ09w
dGlvbikgLSBwYWRkaW5nQm90dG9tKHBhZGRpbmdPcHRpb24pOyB9CisgICAgTGF5b3V0VW5pdCBj
b250ZW50TG9naWNhbFdpZHRoKFBhZGRpbmdPcHRpb25zIHBhZGRpbmdPcHRpb24gPSBQYWRkaW5n
SW5jbHVkZXNJbnRyaW5zaWMpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBjb250ZW50V2lkdGgocGFkZGluZ09wdGlvbikgOiBjb250ZW50SGVpZ2h0
KHBhZGRpbmdPcHRpb24pOyB9CisgICAgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbEhlaWdodChQ
YWRkaW5nT3B0aW9ucyBwYWRkaW5nT3B0aW9uID0gUGFkZGluZ0luY2x1ZGVzSW50cmluc2ljKSBj
b25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29udGVu
dEhlaWdodChwYWRkaW5nT3B0aW9uKSA6IGNvbnRlbnRXaWR0aChwYWRkaW5nT3B0aW9uKTsgfQog
CiAgICAgLy8gSUUgZXh0ZW5zaW9ucy4gVXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0V2lkdGgvSGVp
Z2h0LiAgT3ZlcnJpZGRlbiBieSBpbmxpbmVzIChSZW5kZXJGbG93KQogICAgIC8vIHRvIHJldHVy
biB0aGUgcmVtYWluaW5nIHdpZHRoIG9uIGEgZ2l2ZW4gbGluZSAoYW5kIHRoZSBoZWlnaHQgb2Yg
YSBzaW5nbGUgbGluZSkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuaAkocmV2aXNpb24gMTEzMTEyKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgZW51bSBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgewogICAgIEJhY2tncm91bmRC
bGVlZFVzZVRyYW5zcGFyZW5jeUxheWVyCiB9OwogCi1lbnVtIFBhZGRpbmdPcHRpb25zIHsgSW5j
bHVkZUludHJpbnNpY1BhZGRpbmcsIEV4Y2x1ZGVJbnRyaW5zaWNQYWRkaW5nIH07CitlbnVtIFBh
ZGRpbmdPcHRpb25zIC8qIGZvciBpbnRyaW5zaWMgcGFkZGluZyAqLyB7IFBhZGRpbmdJbmNsdWRl
c0ludHJpbnNpYywgUGFkZGluZ0V4Y2x1ZGVzSW50cmluc2ljIH07CiAKIC8vIFRoaXMgY2xhc3Mg
aXMgdGhlIGJhc2UgZm9yIGFsbCBvYmplY3RzIHRoYXQgYWRoZXJlIHRvIHRoZSBDU1MgYm94IG1v
ZGVsIGFzIGRlc2NyaWJlZAogLy8gYXQgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvYm94Lmh0
bWwKQEAgLTc5LDE1ICs3OSwxNSBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyB3aWxsIHdvcmsgb24g
aW5saW5lcyB0byByZXR1cm4gdGhlIGJvdW5kaW5nIGJveCBvZiBhbGwgb2YgdGhlIGxpbmVzJyBi
b3JkZXIgYm94ZXMuCiAgICAgdmlydHVhbCBJbnRSZWN0IGJvcmRlckJvdW5kaW5nQm94KCkgY29u
c3QgPSAwOwogCi0gICAgLy8gVmlydHVhbCBzaW5jZSB0YWJsZSBjZWxscyBvdmVycmlkZQotICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBwYWRkaW5nVG9wKFBhZGRpbmdPcHRpb25zID0gSW5jbHVkZUlu
dHJpbnNpY1BhZGRpbmcpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWRkaW5nQm90
dG9tKFBhZGRpbmdPcHRpb25zID0gSW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0OwotICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBwYWRkaW5nTGVmdChQYWRkaW5nT3B0aW9ucyA9IEluY2x1ZGVJ
bnRyaW5zaWNQYWRkaW5nKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFkZGluZ1Jp
Z2h0KFBhZGRpbmdPcHRpb25zID0gSW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0OwotICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBwYWRkaW5nQmVmb3JlKFBhZGRpbmdPcHRpb25zID0gSW5jbHVk
ZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWRkaW5n
QWZ0ZXIoUGFkZGluZ09wdGlvbnMgPSBJbmNsdWRlSW50cmluc2ljUGFkZGluZykgY29uc3Q7Ci0g
ICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZGRpbmdTdGFydChQYWRkaW5nT3B0aW9ucyA9IEluY2x1
ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFkZGlu
Z0VuZChQYWRkaW5nT3B0aW9ucyA9IEluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25zdDsKKyAg
ICAvLyBWaXJ0dWFsIHNpbmNlIHRhYmxlIGNlbGxzIGFuZCBNYXRoTUwgcmVuZGVyZXJzIG92ZXJy
aWRlCisgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZGRpbmdUb3AoUGFkZGluZ09wdGlvbnMgPSBQ
YWRkaW5nSW5jbHVkZXNJbnRyaW5zaWMpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBw
YWRkaW5nQm90dG9tKFBhZGRpbmdPcHRpb25zID0gUGFkZGluZ0luY2x1ZGVzSW50cmluc2ljKSBj
b25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFkZGluZ0xlZnQoUGFkZGluZ09wdGlvbnMg
PSBQYWRkaW5nSW5jbHVkZXNJbnRyaW5zaWMpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5p
dCBwYWRkaW5nUmlnaHQoUGFkZGluZ09wdGlvbnMgPSBQYWRkaW5nSW5jbHVkZXNJbnRyaW5zaWMp
IGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWRkaW5nQmVmb3JlKFBhZGRpbmdPcHRp
b25zID0gUGFkZGluZ0luY2x1ZGVzSW50cmluc2ljKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91
dFVuaXQgcGFkZGluZ0FmdGVyKFBhZGRpbmdPcHRpb25zID0gUGFkZGluZ0luY2x1ZGVzSW50cmlu
c2ljKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFkZGluZ1N0YXJ0KFBhZGRpbmdP
cHRpb25zID0gUGFkZGluZ0luY2x1ZGVzSW50cmluc2ljKSBjb25zdDsKKyAgICB2aXJ0dWFsIExh
eW91dFVuaXQgcGFkZGluZ0VuZChQYWRkaW5nT3B0aW9ucyA9IFBhZGRpbmdJbmNsdWRlc0ludHJp
bnNpYykgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCBib3JkZXJUb3AoKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5ib3JkZXJUb3BXaWR0aCgpOyB9CiAgICAgdmlydHVhbCBpbnQgYm9yZGVyQm90
dG9tKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKTsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlz
aW9uIDExMzExMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNl
bGw6OmxheW91dCgpCiBMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ1RvcChQYWRk
aW5nT3B0aW9ucyBwYWRkaW5nT3B0aW9uKSBjb25zdAogewogICAgIExheW91dFVuaXQgcmVzdWx0
ID0gUmVuZGVyQmxvY2s6OnBhZGRpbmdUb3AoKTsKLSAgICBpZiAocGFkZGluZ09wdGlvbiA9PSBF
eGNsdWRlSW50cmluc2ljUGFkZGluZyB8fCAhaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAg
ICBpZiAocGFkZGluZ09wdGlvbiA9PSBQYWRkaW5nRXhjbHVkZXNJbnRyaW5zaWMgfHwgIWlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgcmV0dXJu
IHJlc3VsdCArIChzdHlsZSgpLT53cml0aW5nTW9kZSgpID09IFRvcFRvQm90dG9tV3JpdGluZ01v
ZGUgPyBpbnRyaW5zaWNQYWRkaW5nQmVmb3JlKCkgOiBpbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKSk7
CiB9CkBAIC0yMDIsNyArMjAyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRp
bmdUb3AoUAogTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdCb3R0b20oUGFkZGlu
Z09wdGlvbnMgcGFkZGluZ09wdGlvbikgY29uc3QKIHsKICAgICBMYXlvdXRVbml0IHJlc3VsdCA9
IFJlbmRlckJsb2NrOjpwYWRkaW5nQm90dG9tKCk7Ci0gICAgaWYgKHBhZGRpbmdPcHRpb24gPT0g
RXhjbHVkZUludHJpbnNpY1BhZGRpbmcgfHwgIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisg
ICAgaWYgKHBhZGRpbmdPcHRpb24gPT0gUGFkZGluZ0V4Y2x1ZGVzSW50cmluc2ljIHx8ICFpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIHJldHVy
biByZXN1bHQgKyAoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSA9PSBUb3BUb0JvdHRvbVdyaXRpbmdN
b2RlID8gaW50cmluc2ljUGFkZGluZ0FmdGVyKCkgOiBpbnRyaW5zaWNQYWRkaW5nQmVmb3JlKCkp
OwogfQpAQCAtMjEwLDcgKzIxMCw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGVDZWxsOjpwYWRk
aW5nQm90dG8KIExheW91dFVuaXQgUmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nTGVmdChQYWRkaW5n
T3B0aW9ucyBwYWRkaW5nT3B0aW9uKSBjb25zdAogewogICAgIExheW91dFVuaXQgcmVzdWx0ID0g
UmVuZGVyQmxvY2s6OnBhZGRpbmdMZWZ0KCk7Ci0gICAgaWYgKHBhZGRpbmdPcHRpb24gPT0gRXhj
bHVkZUludHJpbnNpY1BhZGRpbmcgfHwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICBp
ZiAocGFkZGluZ09wdGlvbiA9PSBQYWRkaW5nRXhjbHVkZXNJbnRyaW5zaWMgfHwgaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXR1cm4gcmVz
dWx0ICsgKHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0gTGVmdFRvUmlnaHRXcml0aW5nTW9kZSA/
IGludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSA6IGludHJpbnNpY1BhZGRpbmdBZnRlcigpKTsKICAg
ICAKQEAgLTIxOSw3ICsyMTksNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGlu
Z0xlZnQoCiBMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ1JpZ2h0KFBhZGRpbmdP
cHRpb25zIHBhZGRpbmdPcHRpb24pIGNvbnN0CiB7ICAgCiAgICAgTGF5b3V0VW5pdCByZXN1bHQg
PSBSZW5kZXJCbG9jazo6cGFkZGluZ1JpZ2h0KCk7Ci0gICAgaWYgKHBhZGRpbmdPcHRpb24gPT0g
RXhjbHVkZUludHJpbnNpY1BhZGRpbmcgfHwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAg
ICBpZiAocGFkZGluZ09wdGlvbiA9PSBQYWRkaW5nRXhjbHVkZXNJbnRyaW5zaWMgfHwgaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXR1cm4g
cmVzdWx0ICsgKHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0gTGVmdFRvUmlnaHRXcml0aW5nTW9k
ZSA/IGludHJpbnNpY1BhZGRpbmdBZnRlcigpIDogaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpKTsK
IH0KQEAgLTIyNyw3ICsyMjcsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGlu
Z1JpZ2h0CiBMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0JlZm9yZShQYWRkaW5n
T3B0aW9ucyBwYWRkaW5nT3B0aW9uKSBjb25zdAogewogICAgIExheW91dFVuaXQgcmVzdWx0ID0g
UmVuZGVyQmxvY2s6OnBhZGRpbmdCZWZvcmUoKTsKLSAgICBpZiAocGFkZGluZ09wdGlvbiA9PSBF
eGNsdWRlSW50cmluc2ljUGFkZGluZykKKyAgICBpZiAocGFkZGluZ09wdGlvbiA9PSBQYWRkaW5n
RXhjbHVkZXNJbnRyaW5zaWMpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgcmV0dXJuIHJl
c3VsdCArIGludHJpbnNpY1BhZGRpbmdCZWZvcmUoKTsKIH0KQEAgLTIzNSw3ICsyMzUsNyBAQCBM
YXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0JlZm9yCiBMYXlvdXRVbml0IFJlbmRl
clRhYmxlQ2VsbDo6cGFkZGluZ0FmdGVyKFBhZGRpbmdPcHRpb25zIHBhZGRpbmdPcHRpb24pIGNv
bnN0CiB7CiAgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBSZW5kZXJCbG9jazo6cGFkZGluZ0FmdGVy
KCk7Ci0gICAgaWYgKHBhZGRpbmdPcHRpb24gPT0gRXhjbHVkZUludHJpbnNpY1BhZGRpbmcpCisg
ICAgaWYgKHBhZGRpbmdPcHRpb24gPT0gUGFkZGluZ0V4Y2x1ZGVzSW50cmluc2ljKQogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIHJldHVybiByZXN1bHQgKyBpbnRyaW5zaWNQYWRkaW5nQWZ0
ZXIoKTsKIH0KQEAgLTMyNyw3ICszMjcsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6
Y2VsbEJhc2VsaW5lCiAgICAgTGF5b3V0VW5pdCBmaXJzdExpbmVCYXNlbGluZSA9IGZpcnN0TGlu
ZUJveEJhc2VsaW5lKCk7CiAgICAgaWYgKGZpcnN0TGluZUJhc2VsaW5lICE9IC0xKQogICAgICAg
ICByZXR1cm4gZmlyc3RMaW5lQmFzZWxpbmU7Ci0gICAgcmV0dXJuIHBhZGRpbmdCZWZvcmUoKSAr
IGJvcmRlckJlZm9yZSgpICsgY29udGVudExvZ2ljYWxIZWlnaHQoSW5jbHVkZUludHJpbnNpY1Bh
ZGRpbmcpOworICAgIHJldHVybiBwYWRkaW5nQmVmb3JlKCkgKyBib3JkZXJCZWZvcmUoKSArIGNv
bnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiB9CiAKIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkocmV2
aXNpb24gMTEzMTEyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMTYgKzEyMCwxNiBAQCBwdWJsaWM6CiAgICAgaW50
IGludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNpY1BhZGRp
bmdCZWZvcmU7IH0KICAgICBpbnQgaW50cmluc2ljUGFkZGluZ0FmdGVyKCkgY29uc3QgeyByZXR1
cm4gbV9pbnRyaW5zaWNQYWRkaW5nQWZ0ZXI7IH0KIAotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBw
YWRkaW5nVG9wKFBhZGRpbmdPcHRpb25zID0gSW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0
OwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWRkaW5nQm90dG9tKFBhZGRpbmdPcHRpb25zID0g
SW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBw
YWRkaW5nTGVmdChQYWRkaW5nT3B0aW9ucyA9IEluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25z
dDsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFkZGluZ1JpZ2h0KFBhZGRpbmdPcHRpb25zID0g
SW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBw
YWRkaW5nVG9wKFBhZGRpbmdPcHRpb25zID0gUGFkZGluZ0luY2x1ZGVzSW50cmluc2ljKSBjb25z
dDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFkZGluZ0JvdHRvbShQYWRkaW5nT3B0aW9ucyA9
IFBhZGRpbmdJbmNsdWRlc0ludHJpbnNpYykgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0
IHBhZGRpbmdMZWZ0KFBhZGRpbmdPcHRpb25zID0gUGFkZGluZ0luY2x1ZGVzSW50cmluc2ljKSBj
b25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFkZGluZ1JpZ2h0KFBhZGRpbmdPcHRpb25z
ID0gUGFkZGluZ0luY2x1ZGVzSW50cmluc2ljKSBjb25zdDsKICAgICAKICAgICAvLyBGSVhNRTog
Rm9yIG5vdyB3ZSBqdXN0IGFzc3VtZSB0aGUgY2VsbCBoYXMgdGhlIHNhbWUgYmxvY2sgZmxvdyBk
aXJlY3Rpb24gYXMgdGhlIHRhYmxlLiAgSXQncyBsaWtlbHkgd2UnbGwKICAgICAvLyBjcmVhdGUg
YW4gZXh0cmEgYW5vbnltb3VzIFJlbmRlckJsb2NrIHRvIGhhbmRsZSBtaXhpbmcgZGlyZWN0aW9u
YWxpdHkgYW55d2F5LCBpbiB3aGljaCBjYXNlIHdlIGNhbiBsb2NrCiAgICAgLy8gdGhlIGJsb2Nr
IGZsb3cgZGlyZWN0aW9uYWxpdHkgb2YgdGhlIGNlbGxzIHRvIHRoZSB0YWJsZSdzIGRpcmVjdGlv
bmFsaXR5LgotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWRkaW5nQmVmb3JlKFBhZGRpbmdPcHRp
b25zID0gSW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0
VW5pdCBwYWRkaW5nQWZ0ZXIoUGFkZGluZ09wdGlvbnMgPSBJbmNsdWRlSW50cmluc2ljUGFkZGlu
ZykgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZGRpbmdCZWZvcmUoUGFkZGluZ09w
dGlvbnMgPSBQYWRkaW5nSW5jbHVkZXNJbnRyaW5zaWMpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCBwYWRkaW5nQWZ0ZXIoUGFkZGluZ09wdGlvbnMgPSBQYWRkaW5nSW5jbHVkZXNJbnRy
aW5zaWMpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRPdmVycmlkZUhlaWdodEZyb21Sb3dIZWlnaHQo
TGF5b3V0VW5pdCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAxMTMxMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUwLDcg
Kzk1MCw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpmaXJzdExpbmUKICAgICAg
ICAgY29uc3QgQ2VsbFN0cnVjdCYgY3MgPSBmaXJzdFJvdy5hdChpKTsKICAgICAgICAgY29uc3Qg
UmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY3MucHJpbWFyeUNlbGwoKTsKICAgICAgICAgaWYgKGNl
bGwpCi0gICAgICAgICAgICBmaXJzdExpbmVCYXNlbGluZSA9IG1heChmaXJzdExpbmVCYXNlbGlu
ZSwgY2VsbC0+bG9naWNhbFRvcCgpICsgY2VsbC0+cGFkZGluZ0JlZm9yZSgpICsgY2VsbC0+Ym9y
ZGVyQmVmb3JlKCkgKyBjZWxsLT5jb250ZW50TG9naWNhbEhlaWdodChJbmNsdWRlSW50cmluc2lj
UGFkZGluZykpOworICAgICAgICAgICAgZmlyc3RMaW5lQmFzZWxpbmUgPSBtYXgoZmlyc3RMaW5l
QmFzZWxpbmUsIGNlbGwtPmxvZ2ljYWxUb3AoKSArIGNlbGwtPnBhZGRpbmdCZWZvcmUoKSArIGNl
bGwtPmJvcmRlckJlZm9yZSgpICsgY2VsbC0+Y29udGVudExvZ2ljYWxIZWlnaHQoKSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGZpcnN0TGluZUJhc2VsaW5lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135846</attachid>
            <date>2012-04-05 10:06:49 -0700</date>
            <delta_ts>2012-04-05 20:05:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83092-20120405100648.patch</filename>
            <type>text/plain</type>
            <size>8552</size>
            <attacher name="Dave Barton">dbarton</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA0LTA1ICBEYXZpZCBC
YXJ0b24gIDxkYmFydG9uQG1hdGhzY3JpYmUuY29tPgorCisgICAgICAgIFJlbW92ZSBpbnRyaW5z
aWMgcGFkZGluZyBmcm9tIGNvbnRlbnRCb3hSZWN0KCksIGV0Yy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzMDkyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgIkludHJpbnNpYyBwYWRkaW5nIiBkb2VzIG5v
dCBjb3VudCBhcyBDU1MgcGFkZGluZywgYnV0IGlzIHRyZWF0ZWQgYXMgcGFkZGluZyBieSBiYXNp
YworICAgICAgICBsYXlvdXQgYW5kIHJlbmRlcmluZyBjb2RlLCBlLmcuIFJlbmRlckJsb2NrOjps
YXlvdXQoKS4gQSBsb3Qgb2YgY29kZSByZWxpZXMgb24gdGhlCisgICAgICAgIGVxdWF0aW9uIGJv
cmRlci1ib3ggPSBjb250ZW50LWJveCArIHBhZGRpbmcgKyBib3JkZXIgKCsgc2Nyb2xsYmFycyku
IFRvIGtlZXAgdGhpcyB2YWxpZCwKKyAgICAgICAgY2hhbmdlIDUgZnVuY3Rpb25zIGluIFJlbmRl
ckJveC5oIHRvIG5vdCBpbmNsdWRlIGludHJpbnNpYyBwYWRkaW5nIGluIHRoZSBjb250ZW50IGJv
eCwKKyAgICAgICAgdGh1cyByZXZlcnRpbmcgdG8gdGhlaXIgYmVoYXZpb3IgYmVmb3JlIHRoZSBw
YXRjaCBmb3IgYnVnIDMzNTkzLiBJbnN0ZWFkLCBoYXZlCisgICAgICAgIHNpemluZ0JveChyZW5k
ZXJlcikgaW4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBleHBsaWNpdGx5IHB1dCB0
aGUgaW50cmluc2ljCisgICAgICAgIHBhZGRpbmcgaW4gY29tcHV0ZWQgQ1NTIGNvbnRlbnQtYm94
IHZhbHVlcyBbZm9yIGphdmFzY3JpcHQgZ2V0Q29tcHV0ZWRTdHlsZSgpXSwgc28gdGhlCisgICAg
ICAgIGFib3ZlIGVxdWF0aW9uIHN0aWxsIGFsc28gaG9sZHMgZm9yIENTUyBjb21wdXRlZCB2YWx1
ZXMuIFRoaXMgc2VlbXMgbW9yZSBjb25zaXN0ZW50IHdpdGgKKyAgICAgICAgaG93IHRoZSBwYWRk
aW5nLi4uKCkgZnVuY3Rpb25zIGJlaGF2ZSBzaW5jZSB0aGUgcGF0Y2ggZm9yIGJ1ZyAyMzQ4Nywg
YW5kIHdpbGwgd29yaworICAgICAgICBiZXR0ZXIgZm9yIE1hdGhNTC4gRm9yIGluc3RhbmNlLCBh
IGJsb2NrJ3MgY29udGVudExvZ2ljYWxXaWR0aCgpIHdpbGwgYmUgdGhlCisgICAgICAgIGF2YWls
YWJsZUxvZ2ljYWxXaWR0aCgpIGZvciB1c2UgYnkgY2hpbGQgZWxlbWVudHMuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBUaGUgb25seSByZWFsIG9ic2VydmFibGUgY2hhbmdlcyBhcmUgaWxsdXN0
cmF0ZWQgaW4gdGhlIGJ1ZyA4MzA5MiBhdHRhY2hlZAorICAgICAgICB0ZXN0IGNhc2UgYW5kIGRp
c2N1c3Npb24uIFRoZXNlIGFyZSBtaW5vciBhbmQgaGFyZCB0byBhdXRvbWF0ZS4KKworICAgICAg
ICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2l6aW5nQm94KToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9k
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb250ZW50Qm94UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OmNvbnRlbnRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRlbnRIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250ZW50TG9naWNhbFdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGVudExvZ2ljYWxIZWlnaHQpOgorICAg
ICAgICAgICAgLSBDaGFuZ2UgdGhlc2UgNSBmdW5jdGlvbnMgdG8gb21pdCBpbnRyaW5zaWMgcGFk
ZGluZyBmcm9tIHRoZSBjb250ZW50IGJveC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y2VsbEJhc2Vs
aW5lUG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpmaXJzdExpbmVCb3hCYXNl
bGluZSk6CisKIDIwMTItMDMtMTQgIEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4KIAog
ICAgICAgICBFeHRlbmQgSGl0VGVzdFJlc3VsdCB0byBzdXBwb3J0IG5vdCAiZGlzY2FyZGluZyIg
c2hhZG93IGNvbnRlbnQgaW4gZmF2b3Igb2YgaXRzIERPTSBhbmNlc3RvcgpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJl
dmlzaW9uIDExMzExMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzAsNyArNjcwLDEzIEBAIHN0YXRpYyBM
YXlvdXRSZWN0IHNpemluZ0JveChSZW5kZXJPYmplY3QKICAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoKTsKIAogICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwotICAg
IHJldHVybiBib3gtPnN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gYm94LT5j
b250ZW50Qm94UmVjdCgpIDogYm94LT5ib3JkZXJCb3hSZWN0KCk7CisgICAgaWYgKGJveC0+c3R5
bGUoKS0+Ym94U2l6aW5nKCkgPT0gQk9SREVSX0JPWCkKKyAgICAgICAgcmV0dXJuIGJveC0+Ym9y
ZGVyQm94UmVjdCgpOworICAgIExheW91dFVuaXQgY3NzUGFkZGluZ0xlZnQgPSBib3gtPnBhZGRp
bmdMZWZ0KEV4Y2x1ZGVJbnRyaW5zaWNQYWRkaW5nKTsKKyAgICBMYXlvdXRVbml0IGNzc1BhZGRp
bmdUb3AgPSBib3gtPnBhZGRpbmdUb3AoRXhjbHVkZUludHJpbnNpY1BhZGRpbmcpOworICAgIExh
eW91dFVuaXQgY3NzV2lkdGggPSBib3gtPmNsaWVudFdpZHRoKCkgLSBjc3NQYWRkaW5nTGVmdCAt
IGJveC0+cGFkZGluZ1JpZ2h0KEV4Y2x1ZGVJbnRyaW5zaWNQYWRkaW5nKTsKKyAgICBMYXlvdXRV
bml0IGNzc0hlaWdodCA9IGJveC0+Y2xpZW50SGVpZ2h0KCkgLSBjc3NQYWRkaW5nVG9wIC0gYm94
LT5wYWRkaW5nQm90dG9tKEV4Y2x1ZGVJbnRyaW5zaWNQYWRkaW5nKTsKKyAgICByZXR1cm4gTGF5
b3V0UmVjdChib3gtPmJvcmRlckxlZnQoKSArIGNzc1BhZGRpbmdMZWZ0LCBib3gtPmJvcmRlclRv
cCgpICsgY3NzUGFkZGluZ1RvcCwgY3NzV2lkdGgsIGNzc0hlaWdodCk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBoYXNDb21wb3NpdGVkTGF5ZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5k
LmNwcAkocmV2aXNpb24gMTEzMTEyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDcgKzM2Myw3IEBAIHZv
aWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSgKICAgICAgICAgLy8gTWFrZSBz
dXJlIGVtcHR5IGNlbGwgaGFzIHNvbWUgaGVpZ2h0LCBpZiBhIHBsYWNlaG9sZGVyIGNhbiBiZSBp
bnNlcnRlZC4KICAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CiAgICAgICAgIFJlbmRlck9iamVjdCAqciA9IG5vZGUtPnJlbmRlcmVyKCk7
Ci0gICAgICAgIGlmIChyICYmIHItPmlzVGFibGVDZWxsKCkgJiYgdG9SZW5kZXJUYWJsZUNlbGwo
ciktPmNvbnRlbnRIZWlnaHQoSW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIDw9IDApIHsKKyAgICAg
ICAgaWYgKHIgJiYgci0+aXNUYWJsZUNlbGwoKSAmJiB0b1JlbmRlclRhYmxlQ2VsbChyKS0+Y29u
dGVudEhlaWdodCgpIDw9IDApIHsKICAgICAgICAgICAgIFBvc2l0aW9uIGZpcnN0RWRpdGFibGVQ
b3NpdGlvbiA9IGZpcnN0RWRpdGFibGVQb3NpdGlvbkluTm9kZShub2RlLmdldCgpKTsKICAgICAg
ICAgICAgIGlmIChmaXJzdEVkaXRhYmxlUG9zaXRpb24uaXNOb3ROdWxsKCkpCiAgICAgICAgICAg
ICAgICAgaW5zZXJ0QmxvY2tQbGFjZWhvbGRlcihmaXJzdEVkaXRhYmxlUG9zaXRpb24pOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gMTEzMTEyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzgsNyArMTM4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50UmVjdCBib3JkZXJCb3VuZGlu
Z0JveCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckJveFJlY3QoKTsgfSAKIAogICAgIC8vIFRoZSBj
b250ZW50IGFyZWEgb2YgdGhlIGJveCAoZXhjbHVkZXMgcGFkZGluZyBhbmQgYm9yZGVyKS4KLSAg
ICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0KFBhZGRpbmdPcHRpb25zIHBhZGRpbmdPcHRpb24g
PSBFeGNsdWRlSW50cmluc2ljUGFkZGluZykgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChib3Jk
ZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdChwYWRkaW5nT3B0aW9uKSwgYm9yZGVyVG9wKCkgKyBwYWRk
aW5nVG9wKHBhZGRpbmdPcHRpb24pLCBjb250ZW50V2lkdGgocGFkZGluZ09wdGlvbiksIGNvbnRl
bnRIZWlnaHQocGFkZGluZ09wdGlvbikpOyB9CisgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QoYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQo
KSwgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCksIGNvbnRlbnRXaWR0aCgpLCBjb250ZW50SGVp
Z2h0KCkpOyB9CiAgICAgLy8gVGhlIGNvbnRlbnQgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gSWdu
b3JlcyB0cmFuc2Zvcm1zLgogICAgIEludFJlY3QgYWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3Q7
CiAgICAgLy8gVGhlIGNvbnRlbnQgYm94IGNvbnZlcnRlZCB0byBhYnNvbHV0ZSBjb29yZHMgKHRh
a2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudCkuCkBAIC0xODUsMTAgKzE4NSwxMCBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdm9pZCB1cGRhdGVMYXllclRyYW5zZm9ybSgpOwogCi0gICAgTGF5b3V0
VW5pdCBjb250ZW50V2lkdGgoUGFkZGluZ09wdGlvbnMgcGFkZGluZ09wdGlvbiA9IEV4Y2x1ZGVJ
bnRyaW5zaWNQYWRkaW5nKSBjb25zdCB7IHJldHVybiBjbGllbnRXaWR0aCgpIC0gcGFkZGluZ0xl
ZnQocGFkZGluZ09wdGlvbikgLSBwYWRkaW5nUmlnaHQocGFkZGluZ09wdGlvbik7IH0KLSAgICBM
YXlvdXRVbml0IGNvbnRlbnRIZWlnaHQoUGFkZGluZ09wdGlvbnMgcGFkZGluZ09wdGlvbiA9IEV4
Y2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25zdCB7IHJldHVybiBjbGllbnRIZWlnaHQoKSAtIHBh
ZGRpbmdUb3AocGFkZGluZ09wdGlvbikgLSBwYWRkaW5nQm90dG9tKHBhZGRpbmdPcHRpb24pOyB9
Ci0gICAgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoKFBhZGRpbmdPcHRpb25zIHBhZGRp
bmdPcHRpb24gPSBFeGNsdWRlSW50cmluc2ljUGFkZGluZykgY29uc3QgeyByZXR1cm4gc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNvbnRlbnRXaWR0aChwYWRkaW5nT3B0aW9u
KSA6IGNvbnRlbnRIZWlnaHQocGFkZGluZ09wdGlvbik7IH0KLSAgICBMYXlvdXRVbml0IGNvbnRl
bnRMb2dpY2FsSGVpZ2h0KFBhZGRpbmdPcHRpb25zIHBhZGRpbmdPcHRpb24gPSBFeGNsdWRlSW50
cmluc2ljUGFkZGluZykgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IGNvbnRlbnRIZWlnaHQocGFkZGluZ09wdGlvbikgOiBjb250ZW50V2lkdGgocGFk
ZGluZ09wdGlvbik7IH0KKyAgICBMYXlvdXRVbml0IGNvbnRlbnRXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIGNsaWVudFdpZHRoKCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGluZ1JpZ2h0KCk7IH0KKyAg
ICBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBjbGllbnRIZWlnaHQo
KSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKTsgfQorICAgIExheW91dFVuaXQgY29u
dGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBjb250ZW50V2lkdGgoKSA6IGNvbnRlbnRIZWlnaHQoKTsgfQorICAgIExh
eW91dFVuaXQgY29udGVudExvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29udGVudEhlaWdodCgpIDogY29udGVudFdpZHRo
KCk7IH0KIAogICAgIC8vIElFIGV4dGVuc2lvbnMuIFVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldFdp
ZHRoL0hlaWdodC4gIE92ZXJyaWRkZW4gYnkgaW5saW5lcyAoUmVuZGVyRmxvdykKICAgICAvLyB0
byByZXR1cm4gdGhlIHJlbWFpbmluZyB3aWR0aCBvbiBhIGdpdmVuIGxpbmUgKGFuZCB0aGUgaGVp
Z2h0IG9mIGEgc2luZ2xlIGxpbmUpLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDExMzExMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNyAr
MzI3LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OmNlbGxCYXNlbGluZQogICAgIExh
eW91dFVuaXQgZmlyc3RMaW5lQmFzZWxpbmUgPSBmaXJzdExpbmVCb3hCYXNlbGluZSgpOwogICAg
IGlmIChmaXJzdExpbmVCYXNlbGluZSAhPSAtMSkKICAgICAgICAgcmV0dXJuIGZpcnN0TGluZUJh
c2VsaW5lOwotICAgIHJldHVybiBwYWRkaW5nQmVmb3JlKCkgKyBib3JkZXJCZWZvcmUoKSArIGNv
bnRlbnRMb2dpY2FsSGVpZ2h0KEluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nKTsKKyAgICByZXR1cm4g
cGFkZGluZ0JlZm9yZSgpICsgYm9yZGVyQmVmb3JlKCkgKyBjb250ZW50TG9naWNhbEhlaWdodCgp
OwogfQogCiB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAxMTMx
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTUwLDcgKzk1MCw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGVT
ZWN0aW9uOjpmaXJzdExpbmUKICAgICAgICAgY29uc3QgQ2VsbFN0cnVjdCYgY3MgPSBmaXJzdFJv
dy5hdChpKTsKICAgICAgICAgY29uc3QgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY3MucHJpbWFy
eUNlbGwoKTsKICAgICAgICAgaWYgKGNlbGwpCi0gICAgICAgICAgICBmaXJzdExpbmVCYXNlbGlu
ZSA9IG1heChmaXJzdExpbmVCYXNlbGluZSwgY2VsbC0+bG9naWNhbFRvcCgpICsgY2VsbC0+cGFk
ZGluZ0JlZm9yZSgpICsgY2VsbC0+Ym9yZGVyQmVmb3JlKCkgKyBjZWxsLT5jb250ZW50TG9naWNh
bEhlaWdodChJbmNsdWRlSW50cmluc2ljUGFkZGluZykpOworICAgICAgICAgICAgZmlyc3RMaW5l
QmFzZWxpbmUgPSBtYXgoZmlyc3RMaW5lQmFzZWxpbmUsIGNlbGwtPmxvZ2ljYWxUb3AoKSArIGNl
bGwtPnBhZGRpbmdCZWZvcmUoKSArIGNlbGwtPmJvcmRlckJlZm9yZSgpICsgY2VsbC0+Y29udGVu
dExvZ2ljYWxIZWlnaHQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZpcnN0TGluZUJhc2VsaW5l
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>