<?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>94663</bug_id>
          
          <creation_ts>2012-08-21 18:31:52 -0700</creation_ts>
          <short_desc>[chromium] Refactor CCLayerTreeHostCommon: always propagate clipRect down, without boolean flags</short_desc>
          <delta_ts>2012-10-08 16:13:32 -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>WONTFIX</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>
          <dependson>94542</dependson>
          <blocked>94541</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>epenner</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>701455</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-21 18:31:52 -0700</bug_when>
    <thetext>This is actually part 1 of https://bugs.webkit.org/show_bug.cgi?id=94541, I realized it would be a good idea to split it into a separate patch so that any problems down the road may be easier to diagnose.

This patch removes the boolean flags that controlled wether clipRects are actually &quot;active&quot; for a layer or not.  Instead, now the clipRect is always active.

There was one kink where, now that clipRects are passed across renderSurfaces, they may not be valid on the main thread if the transform was animating.  I believe it&apos;s correct and equivalent to the existing code to prevent the clipRect from affecting drawableContentRects and surface clipRects when !transformToScreenIsKnown(), so I opted for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701474</commentid>
    <comment_count>1</comment_count>
      <attachid>159841</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-21 18:48:51 -0700</bug_when>
    <thetext>Created attachment 159841
Patch

tested on osx unit and layout tests, no obvious regressions. Also tested on the apple iphone page which has been a good practical example of multiple renderSurfaces with clipping and animations all combined; the page works fine with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701895</commentid>
    <comment_count>2</comment_count>
      <attachid>159841</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-22 07:46:10 -0700</bug_when>
    <thetext>Comment on attachment 159841
Patch

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

As long as things aren&apos;t removed from the RSLL when they wouldn&apos;t have been before, I think you&apos;re good. The values within layers are supposed to represent a given point in time in the animation, not the full span of possibilities. So I dont think you don&apos;t need to loosen drawableContentRect or anything, if that&apos;s what you mean.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:685
&gt; +        if (!layer-&gt;replicaLayer() &amp;&amp; transformToScreenIsKnown(layer) &amp;&amp; !clippedContentRect.isEmpty()) {

Why transformToScreen? It&apos;s only using drawTransform() inside.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702002</commentid>
    <comment_count>3</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-22 09:24:51 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 159841 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=159841&amp;action=review
&gt; 
&gt; As long as things aren&apos;t removed from the RSLL when they wouldn&apos;t have been before, I think you&apos;re good. The values within layers are supposed to represent a given point in time in the animation, not the full span of possibilities. So I dont think you don&apos;t need to loosen drawableContentRect or anything, if that&apos;s what you mean.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:685
&gt; &gt; +        if (!layer-&gt;replicaLayer() &amp;&amp; transformToScreenIsKnown(layer) &amp;&amp; !clippedContentRect.isEmpty()) {
&gt; 
&gt; Why transformToScreen? It&apos;s only using drawTransform() inside.

Because the clipRect is now passed down across renderSurfaces, and we shouldn&apos;t be using it when any of the hierarchy of transforms is unknown.

Without this, it actually does fail your own test case, &quot;verifyClipRectCullsSurfaceWithoutVisibleContent&quot;.  This is what I wanted to ask you about offline, but after thinking over it more, I think this patch is doing the right thing.

Note, there were 2 places where we have to replace subtreeShouldBeSkipped with transformToScreenIsKnown(...)  I&apos;m pretty sure those have to be screen space checks for the same reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702028</commentid>
    <comment_count>4</comment_count>
      <attachid>159841</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-22 10:21:44 -0700</bug_when>
    <thetext>Comment on attachment 159841
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:579
&gt; +        // so that it is described with repsect to the current target surface. Note that this transformation may cause

typo

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:581
&gt; +        clipRectForSubtree = enclosingIntRect(CCMathUtil::projectClippedRect(renderSurface-&gt;drawTransform().inverse(), FloatRect(clipRectFromAncestor)));

I have a lot of mixed feelings about this patch and this line is the source of most of them.  If you project clip rects down, then it will cut down on the ability to reuse render surfaces.  If they are ever-so-slightly off-screen then they will change size and need to be entirely redrawn.

I also don&apos;t see how this change allows you to handle visibleContentRect calculations any more easily.  Previously with a boolean, you could either use the clip rect or just set the visible state to the entire content bounds.  Now without a boolean, you can just use the clip rect.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:380
&gt; -    parentSublayerMatrix.scale3d(10, 10, 3.3);
&gt; +    parentSublayerMatrix.scale3d(0.3, 0.3, 1);

0.3f</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702029</commentid>
    <comment_count>5</comment_count>
      <attachid>159841</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-22 10:22:59 -0700</bug_when>
    <thetext>Comment on attachment 159841
Patch

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

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:380
&gt;&gt; +    parentSublayerMatrix.scale3d(0.3, 0.3, 1);
&gt; 
&gt; 0.3f

Er, scratch that, this takes a double.  Too many literla float conversion warnings on Windows has clouded my brain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702135</commentid>
    <comment_count>6</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-22 11:57:40 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 159841 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=159841&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:579
&gt; &gt; +        // so that it is described with repsect to the current target surface. Note that this transformation may cause
&gt; 
&gt; typo
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:581
&gt; &gt; +        clipRectForSubtree = enclosingIntRect(CCMathUtil::projectClippedRect(renderSurface-&gt;drawTransform().inverse(), FloatRect(clipRectFromAncestor)));
&gt; 
&gt; I have a lot of mixed feelings about this patch and this line is the source of most of them.  If you project clip rects down, then it will cut down on the ability to reuse render surfaces.  If they are ever-so-slightly off-screen then they will change size and need to be entirely redrawn.
&gt; 
&gt; I also don&apos;t see how this change allows you to handle visibleContentRect calculations any more easily.  Previously with a boolean, you could either use the clip rect or just set the visible state to the entire content bounds.  Now without a boolean, you can just use the clip rect.
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:380
&gt; &gt; -    parentSublayerMatrix.scale3d(10, 10, 3.3);
&gt; &gt; +    parentSublayerMatrix.scale3d(0.3, 0.3, 1);
&gt; 
&gt; 0.3f


(1) You&apos;re right, we should not affect surface clipRects.   It&apos;s also worth noting that in one of my previous refactors, I forced the root layer to clip to viewport.  This means that renderSurfaces that draw to the root will also be uncachable when they animate and get clipped.  I&apos;ll fix it very soon.

(2) However, we still do need to inverse-project clipRects.   I think I figured out how to do this cleanly without forcing us to propagate clipRects down.  The downside is that it further relies on surface-&gt;clipRect().isEmpty() - but it&apos;s definitely less evil than what I was trying to do in this patch =)

So this patch is probably WONTFIX, I&apos;ll mark it that way when I&apos;m certain.   Thanks for the voice of reason Enne =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702494</commentid>
    <comment_count>7</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-22 16:09:11 -0700</bug_when>
    <thetext>
I have a working patch now for merging visibleLayerRect that doesn&apos;t require this factor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737177</commentid>
    <comment_count>8</comment_count>
      <attachid>159841</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-08 16:13:32 -0700</bug_when>
    <thetext>Comment on attachment 159841
Patch

Cleared review? from attachment 159841 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159841</attachid>
            <date>2012-08-21 18:48:51 -0700</date>
            <delta_ts>2012-10-08 16:13:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94663-20120821184849.patch</filename>
            <type>text/plain</type>
            <size>14374</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGM0N2NlZDkxODI5N2Qy
MmU5NTUzN2RlODkzNGZmZDAyZTFkZDAxZS4uNDYyOWEwOGZkMmYyMWQ5MGMwZjEzZDM1NTQ1MGU4
OTRkNGZhZjNmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA4LTIxICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
UmVmYWN0b3IgQ0NMYXllclRyZWVIb3N0Q29tbW9uOiBhbHdheXMgcHJvcGFnYXRlIGNsaXBSZWN0
IGRvd24sIHdpdGhvdXQgYm9vbGVhbiBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ2NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBCZWZvcmUgdGhpcyBwYXRjaCwgY2FsY0RyYXdUcmFuc2Zvcm1z
IHVzZWQgYSBmZXcgYm9vbGVhbiBmbGFncyB0bworICAgICAgICBpbmRpY2F0ZSB3aGV0aGVyIGNs
aXBSZWN0cyB3ZXJlIGFjdGl2ZSBhbmQgc2hvdWxkIGFmZmVjdAorICAgICAgICBkcmF3YWJsZUNv
bnRlbnRSZWN0cyBhbmQgc3VyZmFjZSBjbGlwUmVjdHMuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUK
KyAgICAgICAgaW50ZXJuYWwgYmVoYXZpb3Igc28gdGhhdCB0aGUgY2xpcFJlY3QgaXMgYWx3YXlz
IHZhbGlkIGFuZCBhbHdheXMKKyAgICAgICAgcHJvcGFnYXRlZCBkb3duIHRoZSB0cmVlLCBldmVu
IGFjcm9zcyByZW5kZXJTdXJmYWNlcy4gU28sIHRob3NlCisgICAgICAgIGJvb2xlYW4gZmxhZ3Mg
YXJlIGFsc28gbm8gbG9uZ2VyIG5lZWRlZCwgc28gdGhleSBhcmUgcmVtb3ZlZC4KKworICAgICAg
ICBUaGlzIHBhdGNoIGlzIHBhcnQgMSBmb3IgbWVyZ2luZyB2aXNpYmxlQ29udGVudFJlY3QgY29t
cHV0YXRpb25zCisgICAgICAgIGludG8gY2FsY0RyYXdUcmFuc2Zvcm1zLCBhbmQgbWVyZ2luZyB2
aXNpYmxlQ29udGVudFJlY3Qgd2lsbCBhbGxvdworICAgICAgICB1cyB0byBtb3ZlIGZvcndhcmQg
d2l0aCBhIGJldHRlciBkZXNpZ24gb2YgaW50ZWxsaWdlbnQKKyAgICAgICAgcHJlLXBhaW50aW5n
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBuZWVkZWQsIG5vIGNoYW5nZXMgaW4gc2VtYW50aWNz
LCB0aGUgcmVmYWN0b3IgaXMKKyAgICAgICAgY292ZXJlZCBieSBleGlzdGluZyB1bml0IGFuZCBs
YXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKToKKwogMjAxMi0wOC0yMSAgTWFydGluIFJv
Ymluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVXNpbmcgYSBu
YXRpdmUgd2luZG93IGZvciB0aGUgV2ViVmlldyBicmVha3MgR3RrT3ZlcmxheQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCAyZTk5NTk5MGFlN2RlMWIzZjQxN2U2ZDZiZDcxM2JlNzhmMGM0
ZWExLi5mZTM0YTRmYzc5NjI4NjM0ZmQ4MzNhZTEyZjc1YTVlZTk5ODQ5MDU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA4LTIxICBTaGF3biBTaW5n
aCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0
b3IgQ0NMYXllclRyZWVIb3N0Q29tbW9uOiBhbHdheXMgcHJvcGFnYXRlIGNsaXBSZWN0IGRvd24s
IHdpdGhvdXQgYm9vbGVhbiBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTQ2NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBPbmUgdW5pdCB0ZXN0IG5lZWRlZCB0byBiZSB1cGRhdGVkLCBzaW5jZSBj
bGlwUmVjdHMgYXJlIG5vdworICAgICAgICBwcm9wYWdhdGVkIGFjcm9zcyByZW5kZXJTdXJmYWNl
cywgdGhhdCB0ZXN0IHdhcyBhY2NpZGVudGFsbHkKKyAgICAgICAgY2xpcHBpbmcgYSBkZXNjZW5k
YW50IHN1cmZhY2UuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LmNwcDoKKwogMjAxMi0wOC0yMSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjYxNzAuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCA2ODk4Yzk3Nzk4ZmY1MDM2YzFh
Y2Q4MWQxNjViYjE1ODdkOTkwYjdhLi41ZjRjOTM0MTBhZDlkMDM4NzA4MDJlZjUxY2JhYWFlNWE5
MTk5ZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAg
LTM2NCw3ICszNjQsNyBAQCB2b2lkIHNldHVwUm9vdExheWVyQW5kU3VyZmFjZUZvclJlY3Vyc2lv
bihMYXllclR5cGUqIHJvb3RMYXllciwgTGF5ZXJMaXN0JiByZW5kZQogdGVtcGxhdGU8dHlwZW5h
bWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBMYXllckxpc3QsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VU
eXBlLCB0eXBlbmFtZSBMYXllclNvcnRlcj4KIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5ZXIsIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsCiAgICAgY29uc3QgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIGNvbnN0IFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBjdXJyZW50U2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4LAotICAgIGNv
bnN0IEludFJlY3QmIGNsaXBSZWN0RnJvbUFuY2VzdG9yLCBib29sIGFuY2VzdG9yQ2xpcHNTdWJ0
cmVlLAorICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0RnJvbUFuY2VzdG9yLAogICAgIFJlbmRl
clN1cmZhY2VUeXBlKiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMsIExheWVyTGlzdCYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllckxpc3QsCiAgICAgTGF5ZXJT
b3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUsIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yLCBJbnRSZWN0JiBkcmF3YWJsZUNvbnRlbnRSZWN0T2ZTdWJ0cmVlKQogewpAQCAtNDYy
LDcgKzQ2Miw2IEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwo
TGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5CiAgICAgICAgIHJldHVybjsKIAog
ICAgIEludFJlY3QgY2xpcFJlY3RGb3JTdWJ0cmVlOwotICAgIGJvb2wgc3VidHJlZVNob3VsZEJl
Q2xpcHBlZCA9IGZhbHNlOwogICAgIAogICAgIGZsb2F0IGRyYXdPcGFjaXR5ID0gbGF5ZXItPm9w
YWNpdHkoKTsKICAgICBib29sIGRyYXdPcGFjaXR5SXNBbmltYXRpbmcgPSBsYXllci0+b3BhY2l0
eUlzQW5pbWF0aW5nKCk7CkBAIC01NzQsMTEgKzU3MywxMiBAQCBzdGF0aWMgdm9pZCBjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9v
dExheQogICAgICAgICAvLyBuZXdseSBjcmVhdGVkIFJlbmRlclN1cmZhY2UuCiAgICAgICAgIG5l
eHRIaWVyYXJjaHlNYXRyaXgubXVsdGlwbHkocmVuZGVyU3VyZmFjZS0+ZHJhd1RyYW5zZm9ybSgp
KTsKIAotICAgICAgICAvLyBUaGUgbmV3IHJlbmRlclN1cmZhY2UgaGVyZSB3aWxsIGNvcnJlY3Rs
eSBjbGlwIHRoZSBlbnRpcmUgc3VidHJlZS4gU28sIHdlIGRvCi0gICAgICAgIC8vIG5vdCBuZWVk
IHRvIGNvbnRpbnVlIHByb3BhZ2F0aW5nIHRoZSBjbGlwcGluZyBzdGF0ZSBmdXJ0aGVyIGRvd24g
dGhlIHRyZWUuIFRoaXMKLSAgICAgICAgLy8gd2F5LCB3ZSBjYW4gYXZvaWQgdHJhbnNmb3JtaW5n
IGNsaXBSZWN0cyBmcm9tIGFuY2VzdG9yIHRhcmdldCBzdXJmYWNlIHNwYWNlIHRvCi0gICAgICAg
IC8vIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2Ugc3BhY2UgdGhhdCBjb3VsZCBjYXVzZSBtb3JlIHcg
PCAwIGhlYWRhY2hlcy4KLSAgICAgICAgc3VidHJlZVNob3VsZEJlQ2xpcHBlZCA9IGZhbHNlOwor
ICAgICAgICAvLyBUaGUgcmVuZGVyIHN1cmZhY2UgY2xpcFJlY3QgaXMgZXhwcmVzc2VkIGluIHRo
ZSBzcGFjZSB3aGVyZSB0aGlzIHN1cmZhY2UgZHJhd3MsIGkuZS4gdGhlIGFuY2VzdG9yVGFyZ2V0
U3VyZmFjZSBzcGFjZS4KKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0Q2xpcFJlY3QoY2xpcFJl
Y3RGcm9tQW5jZXN0b3IpOworICAgICAgICAvLyBUaGUgY2xpcFJlY3QgcGFzc2VkIGRvd24gdG8g
dGhlIHJlc3Qgb2YgdGhlIHN1YnRyZWUgKGluY2x1ZGluZyB0aGUgY3VycmVudCBsYXllcikgbmVl
ZHMgdG8gYmUgdHJhbnNmb3JtZWQKKyAgICAgICAgLy8gc28gdGhhdCBpdCBpcyBkZXNjcmliZWQg
d2l0aCByZXBzZWN0IHRvIHRoZSBjdXJyZW50IHRhcmdldCBzdXJmYWNlLiBOb3RlIHRoYXQgdGhp
cyB0cmFuc2Zvcm1hdGlvbiBtYXkgY2F1c2UKKyAgICAgICAgLy8gdGhlIGNsaXBSZWN0IHRvIGV4
cGFuZCwgYnV0IHRoaXMgaXMgT0sgc2luY2UgdGhlIG5ldyBzdXJmYWNlIHdpbGwgZW5mb3JjZSB0
aGUgY29ycmVjdCBhY2N1cmF0ZSBjbGlwLgorICAgICAgICBjbGlwUmVjdEZvclN1YnRyZWUgPSBl
bmNsb3NpbmdJbnRSZWN0KENDTWF0aFV0aWw6OnByb2plY3RDbGlwcGVkUmVjdChyZW5kZXJTdXJm
YWNlLT5kcmF3VHJhbnNmb3JtKCkuaW52ZXJzZSgpLCBGbG9hdFJlY3QoY2xpcFJlY3RGcm9tQW5j
ZXN0b3IpKSk7CiAKICAgICAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkKICAgICAgICAgICAg
IGxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0UmVuZGVyVGFyZ2V0KGxheWVyKTsKQEAgLTYwNiw5ICs2
MDYsNyBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVy
VHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheQogICAgICAgICAgICAgbGF5ZXItPmNsZWFy
UmVuZGVyU3VyZmFjZSgpOwogCiAgICAgICAgICAgICAvLyBMYXllcnMgd2l0aG91dCByZW5kZXJT
dXJmYWNlcyBkaXJlY3RseSBpbmhlcml0IHRoZSBhbmNlc3RvcidzIGNsaXAgc3RhdHVzLgotICAg
ICAgICAgICAgc3VidHJlZVNob3VsZEJlQ2xpcHBlZCA9IGFuY2VzdG9yQ2xpcHNTdWJ0cmVlOwot
ICAgICAgICAgICAgaWYgKGFuY2VzdG9yQ2xpcHNTdWJ0cmVlKQotICAgICAgICAgICAgICAgIGNs
aXBSZWN0Rm9yU3VidHJlZSA9IGNsaXBSZWN0RnJvbUFuY2VzdG9yOworICAgICAgICAgICAgY2xp
cFJlY3RGb3JTdWJ0cmVlID0gY2xpcFJlY3RGcm9tQW5jZXN0b3I7CiAKICAgICAgICAgICAgIC8v
IExheWVycyB0aGF0IGFyZSBub3QgdGhlaXIgb3duIHJlbmRlclRhcmdldCB3aWxsIHJlbmRlciBp
bnRvIHRoZSB0YXJnZXQgb2YgdGhlaXIgbmVhcmVzdCBhbmNlc3Rvci4KICAgICAgICAgICAgIGxh
eWVyLT5zZXRSZW5kZXJUYXJnZXQobGF5ZXItPnBhcmVudCgpLT5yZW5kZXJUYXJnZXQoKSk7CkBA
IC02MTgsMjMgKzYxNiwxNSBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0lu
dGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheQogICAgICAgICAgICAg
Ly8gICAgICAgIHRoZSByb290TGF5ZXIgdG8gY2xpcDsgdGhlIHJvb3QgbGF5ZXIncyBSZW5kZXJT
dXJmYWNlIHdvdWxkIGFscmVhZHkgY2xpcCBhbmQgc2hvdWxkIGJlIGVub3VnaC4KICAgICAgICAg
ICAgIEFTU0VSVCghbGF5ZXItPnBhcmVudCgpKTsKICAgICAgICAgICAgIEFTU0VSVChsYXllci0+
cmVuZGVyU3VyZmFjZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChhbmNlc3RvckNsaXBzU3VidHJl
ZSk7CiAgICAgICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDbGlwUmVjdChjbGlw
UmVjdEZyb21BbmNlc3Rvcik7Ci0gICAgICAgICAgICBzdWJ0cmVlU2hvdWxkQmVDbGlwcGVkID0g
dHJ1ZTsKICAgICAgICAgICAgIGNsaXBSZWN0Rm9yU3VidHJlZSA9IGNsaXBSZWN0RnJvbUFuY2Vz
dG9yOwogICAgICAgICB9CiAgICAgfQogCiAgICAgSW50UmVjdCByZWN0SW5UYXJnZXRTcGFjZSA9
IGVuY2xvc2luZ0ludFJlY3QoQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3QobGF5ZXItPmRyYXdU
cmFuc2Zvcm0oKSwgY29udGVudFJlY3QpKTsKIAotICAgIGlmIChsYXllckNsaXBzU3VidHJlZShs
YXllcikpIHsKLSAgICAgICAgc3VidHJlZVNob3VsZEJlQ2xpcHBlZCA9IHRydWU7Ci0gICAgICAg
IGlmIChhbmNlc3RvckNsaXBzU3VidHJlZSAmJiAhbGF5ZXItPnJlbmRlclN1cmZhY2UoKSkgewot
ICAgICAgICAgICAgY2xpcFJlY3RGb3JTdWJ0cmVlID0gY2xpcFJlY3RGcm9tQW5jZXN0b3I7Ci0g
ICAgICAgICAgICBjbGlwUmVjdEZvclN1YnRyZWUuaW50ZXJzZWN0KHJlY3RJblRhcmdldFNwYWNl
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjbGlwUmVjdEZvclN1YnRyZWUgPSByZWN0
SW5UYXJnZXRTcGFjZTsKLSAgICB9CisgICAgaWYgKGxheWVyQ2xpcHNTdWJ0cmVlKGxheWVyKSkK
KyAgICAgICAgY2xpcFJlY3RGb3JTdWJ0cmVlLmludGVyc2VjdChyZWN0SW5UYXJnZXRTcGFjZSk7
CiAKICAgICAvLyBGbGF0dGVuIHRvIDJEIGlmIHRoZSBsYXllciBkb2Vzbid0IHByZXNlcnZlIDNE
LgogICAgIGlmICghbGF5ZXItPnByZXNlcnZlczNEKCkpCkBAIC02NjEsNyArNjUxLDcgQEAgc3Rh
dGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVy
LCBMYXllclR5cGUqIHJvb3RMYXkKICAgICAgICAgTGF5ZXJUeXBlKiBjaGlsZCA9IGxheWVyLT5j
aGlsZHJlbigpW2ldLmdldCgpOwogICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3RP
ZkNoaWxkU3VidHJlZTsKICAgICAgICAgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxM
YXllclR5cGUsIExheWVyTGlzdCwgUmVuZGVyU3VyZmFjZVR5cGUsIExheWVyU29ydGVyPihjaGls
ZCwgcm9vdExheWVyLCBzdWJsYXllck1hdHJpeCwgbmV4dEhpZXJhcmNoeU1hdHJpeCwgbmV4dFNj
cm9sbENvbXBlbnNhdGlvbk1hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGlwUmVjdEZvclN1YnRyZWUsIHN1YnRyZWVTaG91bGRCZUNsaXBwZWQsIG5lYXJlc3RB
bmNlc3RvclRoYXRNb3Zlc1BpeGVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGlwUmVjdEZvclN1YnRyZWUsIG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkZXNjZW5kYW50cywgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplLCBkZXZpY2VTY2Fs
ZUZhY3RvciwgZHJhd2FibGVDb250ZW50UmVjdE9mQ2hpbGRTdWJ0cmVlKTsKICAgICAgICAgaWYg
KCFkcmF3YWJsZUNvbnRlbnRSZWN0T2ZDaGlsZFN1YnRyZWUuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICBhY2N1bXVsYXRlZERyYXdhYmxlQ29udGVudFJlY3RPZkNoaWxkcmVuLnVuaXRlKGRyYXdh
YmxlQ29udGVudFJlY3RPZkNoaWxkU3VidHJlZSk7CkBAIC02NzQsMTIgKzY2NCwxMiBAQCBzdGF0
aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIs
IExheWVyVHlwZSogcm9vdExheQogICAgIEludFJlY3QgbG9jYWxEcmF3YWJsZUNvbnRlbnRSZWN0
T2ZTdWJ0cmVlID0gYWNjdW11bGF0ZWREcmF3YWJsZUNvbnRlbnRSZWN0T2ZDaGlsZHJlbjsKICAg
ICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQogICAgICAgICBsb2NhbERyYXdhYmxlQ29udGVu
dFJlY3RPZlN1YnRyZWUudW5pdGUocmVjdEluVGFyZ2V0U3BhY2UpOwotICAgIGlmIChzdWJ0cmVl
U2hvdWxkQmVDbGlwcGVkKQorICAgIGlmICh0cmFuc2Zvcm1Ub1NjcmVlbklzS25vd24obGF5ZXIp
KQogICAgICAgICBsb2NhbERyYXdhYmxlQ29udGVudFJlY3RPZlN1YnRyZWUuaW50ZXJzZWN0KGNs
aXBSZWN0Rm9yU3VidHJlZSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBsYXllcidzIGRyYXdhYmxl
IGNvbnRlbnQgcmVjdCAodGhlIHJlY3QgaXMgaW4gdGFyZ2V0U3VyZmFjZSBzcGFjZSkKICAgICBJ
bnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3RPZkxheWVyID0gcmVjdEluVGFyZ2V0U3BhY2U7Ci0g
ICAgaWYgKHN1YnRyZWVTaG91bGRCZUNsaXBwZWQpCisgICAgaWYgKHRyYW5zZm9ybVRvU2NyZWVu
SXNLbm93bihsYXllcikpCiAgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3RPZkxheWVyLmludGVy
c2VjdChjbGlwUmVjdEZvclN1YnRyZWUpOwogICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRS
ZWN0KGRyYXdhYmxlQ29udGVudFJlY3RPZkxheWVyKTsKIApAQCAtNjg4LDIyICs2NzgsMTMgQEAg
c3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxh
eWVyLCBMYXllclR5cGUqIHJvb3RMYXkKICAgICAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIHJlbmRl
clN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOwogICAgICAgICBJbnRSZWN0IGNsaXBw
ZWRDb250ZW50UmVjdCA9IGxvY2FsRHJhd2FibGVDb250ZW50UmVjdE9mU3VidHJlZTsKIAotICAg
ICAgICAvLyBUaGUgcmVuZGVyIHN1cmZhY2UgY2xpcFJlY3QgaXMgZXhwcmVzc2VkIGluIHRoZSBz
cGFjZSB3aGVyZSB0aGlzIHN1cmZhY2UgZHJhd3MsIGkuZS4gdGhlIHNhbWUgc3BhY2UgYXMgY2xp
cFJlY3RGcm9tQW5jZXN0b3IuCi0gICAgICAgIGlmIChhbmNlc3RvckNsaXBzU3VidHJlZSkKLSAg
ICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldENsaXBSZWN0KGNsaXBSZWN0RnJvbUFuY2VzdG9y
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0Q2xpcFJlY3Qo
SW50UmVjdCgpKTsKLQogICAgICAgICAvLyBEb24ndCBjbGlwIGlmIHRoZSBsYXllciBpcyByZWZs
ZWN0ZWQgYXMgdGhlIHJlZmxlY3Rpb24gc2hvdWxkbid0IGJlCiAgICAgICAgIC8vIGNsaXBwZWQu
IElmIHRoZSBsYXllciBpcyBhbmltYXRpbmcsIHRoZW4gdGhlIHN1cmZhY2UncyB0cmFuc2Zvcm0g
dG8KLSAgICAgICAgLy8gaXRzIHRhcmdldCBpcyBub3Qga25vd24gb24gdGhlIG1haW4gdGhyZWFk
LCBhbmQgd2Ugc2hvdWxkIG5vdCB1c2UgaXQKKyAgICAgICAgLy8gaXRzIHRhcmdldC9zY3JlZW4g
aXMgbm90IGtub3duIG9uIHRoZSBtYWluIHRocmVhZCwgYW5kIHdlIHNob3VsZCBub3QgdXNlIGl0
CiAgICAgICAgIC8vIHRvIGNsaXAuCi0gICAgICAgIGlmICghbGF5ZXItPnJlcGxpY2FMYXllcigp
ICYmIHRyYW5zZm9ybVRvUGFyZW50SXNLbm93bihsYXllcikpIHsKLSAgICAgICAgICAgIC8vIE5v
dGUsIGl0IGlzIGNvcnJlY3QgdG8gdXNlIGFuY2VzdG9yQ2xpcHNTdWJ0cmVlIGhlcmUsIGJlY2F1
c2Ugd2UgYXJlIGxvb2tpbmcgYXQgdGhpcyBsYXllcidzIHJlbmRlclN1cmZhY2UsIG5vdCB0aGUg
bGF5ZXIgaXRzZWxmLgotICAgICAgICAgICAgaWYgKGFuY2VzdG9yQ2xpcHNTdWJ0cmVlICYmICFj
bGlwcGVkQ29udGVudFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBz
dXJmYWNlQ2xpcFJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVS
ZWN0KHJlbmRlclN1cmZhY2UtPmNsaXBSZWN0KCksIGNsaXBwZWRDb250ZW50UmVjdCwgcmVuZGVy
U3VyZmFjZS0+ZHJhd1RyYW5zZm9ybSgpKTsKLSAgICAgICAgICAgICAgICBjbGlwcGVkQ29udGVu
dFJlY3QuaW50ZXJzZWN0KHN1cmZhY2VDbGlwUmVjdCk7Ci0gICAgICAgICAgICB9CisgICAgICAg
IGlmICghbGF5ZXItPnJlcGxpY2FMYXllcigpICYmIHRyYW5zZm9ybVRvU2NyZWVuSXNLbm93bihs
YXllcikgJiYgIWNsaXBwZWRDb250ZW50UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIElu
dFJlY3Qgc3VyZmFjZUNsaXBSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlUmVjdChyZW5kZXJTdXJmYWNlLT5jbGlwUmVjdCgpLCBjbGlwcGVkQ29udGVudFJlY3Qs
IHJlbmRlclN1cmZhY2UtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBjbGlwcGVkQ29u
dGVudFJlY3QuaW50ZXJzZWN0KHN1cmZhY2VDbGlwUmVjdCk7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBUaGUgUmVuZGVyU3VyZmFjZSBiYWNraW5nIHRleHR1cmUgY2Fubm90IGV4Y2VlZCB0aGUg
bWF4aW11bSBzdXBwb3J0ZWQKQEAgLTgwNiw3ICs3ODcsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVy
LCBjbwogICAgIHNldHVwUm9vdExheWVyQW5kU3VyZmFjZUZvclJlY3Vyc2lvbjxMYXllckNocm9t
aXVtLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gPihyb290TGF5ZXIsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGRldmljZVZpZXdwb3J0U2l6ZSk7CiAKICAgICBXZWJDb3JlOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsPExheWVyQ2hyb21pdW0sIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCB2b2lkPihyb290TGF5ZXIs
IHJvb3RMYXllciwgZGV2aWNlU2NhbGVUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3Qo
KSwgdHJ1ZSwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290TGF5ZXItPnJl
bmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCksIDAsIG1heFRl
eHR1cmVTaXplLCBkZXZpY2VTY2FsZUZhY3RvciwgdG90YWxEcmF3YWJsZUNvbnRlbnRSZWN0KTsK
IH0KIApAQCAtODIwLDcgKzgwMSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3JtcyhDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zCiAgICAgc2V0
dXBSb290TGF5ZXJBbmRTdXJmYWNlRm9yUmVjdXJzaW9uPENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NM
YXllckltcGwqPiA+KHJvb3RMYXllciwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGV2aWNlVmll
d3BvcnRTaXplKTsKIAogICAgIFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJu
YWw8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIEND
TGF5ZXJTb3J0ZXI+KHJvb3RMYXllciwgcm9vdExheWVyLCBkZXZpY2VTY2FsZVRyYW5zZm9ybSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgp
LT5jb250ZW50UmVjdCgpLCB0cnVlLCAwLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RMYXll
ci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLCAwLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSwgbGF5ZXJTb3J0ZXIs
IG1heFRleHR1cmVTaXplLCBkZXZpY2VTY2FsZUZhY3RvciwgdG90YWxEcmF3YWJsZUNvbnRlbnRS
ZWN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggYWMwNGI1MDVlZjkxMTkxNTgwY2Y1
ZjVlYjI0ZDU4NDM3Yzg5MDZlNi4uY2FjMmM4Y2RiMGU4NjIwODQ1MWJjNGUyMjYwOTgyYTNkYmZi
M2I4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC0zNjksNyArMzY5LDcgQEAgVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVwbGljYSkKICAgICBj
aGlsZC0+c2V0UmVwbGljYUxheWVyKGNoaWxkUmVwbGljYS5nZXQoKSk7CiAKICAgICAvLyBDaGls
ZCBpcyBzZXQgdXAgc28gdGhhdCBhIG5ldyByZW5kZXIgc3VyZmFjZSBzaG91bGQgYmUgY3JlYXRl
ZC4KLSAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjUpOworICAgIGNoaWxkLT5zZXRGb3JjZVJlbmRl
clN1cmZhY2UodHJ1ZSk7CiAKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1h
dHJpeDsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRMYXllclRyYW5zZm9ybTsK
QEAgLTM3Nyw3ICszNzcsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlm
eVRyYW5zZm9ybXNGb3JSZXBsaWNhKQogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVu
dFRyYW5zbGF0aW9uVG9BbmNob3I7CiAgICAgcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvci50cmFu
c2xhdGUoMi41LCAzKTsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRTdWJsYXll
ck1hdHJpeDsKLSAgICBwYXJlbnRTdWJsYXllck1hdHJpeC5zY2FsZTNkKDEwLCAxMCwgMy4zKTsK
KyAgICBwYXJlbnRTdWJsYXllck1hdHJpeC5zY2FsZTNkKDAuMywgMC4zLCAxKTsKICAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyOwogICAgIHBhcmVu
dFRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDUsIDYpOwogICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSA9IHBhcmVudFRyYW5zbGF0aW9uVG9B
bmNob3IgKiBwYXJlbnRMYXllclRyYW5zZm9ybSAqIHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3Iu
aW52ZXJzZSgpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>