<?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>83691</bug_id>
          
          <creation_ts>2012-04-11 08:17:47 -0700</creation_ts>
          <short_desc>[Texmap] Falling leaves demo missing opacity fade out animation</short_desc>
          <delta_ts>2012-04-28 10:26:20 -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>WebKit2</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>http://www.webkit.org/blog-files/leaves/</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="Lars Knudsen">larsgk</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>igor.oliveira</cc>
    
    <cc>mrobinson</cc>
    
    <cc>noam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>600279</commentid>
    <comment_count>0</comment_count>
    <who name="Lars Knudsen">larsgk</who>
    <bug_when>2012-04-11 08:17:47 -0700</bug_when>
    <thetext>Looking at 

http://www.webkit.org/blog-files/leaves/

with the MiniBrowser (Qt, WK2), the leaves are missing the opacity fade out animation, making them disappear abruptly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600342</commentid>
    <comment_count>1</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2012-04-11 09:55:53 -0700</bug_when>
    <thetext>GTK has the same behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605531</commentid>
    <comment_count>2</comment_count>
      <attachid>137889</attachid>
    <who name="Lars Knudsen">larsgk</who>
    <bug_when>2012-04-19 06:19:29 -0700</bug_when>
    <thetext>Created attachment 137889
Very compact version of falling leaves exposing the problem

It seems that when rendering in layers having opacity, forcing the intermediate surface rendering to take place (in TextureMapperLayer::paintRecursive) - something goes wrong with either the transformation matrix, clipping, gl surface rendering or the like (I am still learning - so it might be obvious to others).  The included example shows how only a *part* of the fading rectangle (id = &quot;nodeContainer&quot; in the example) is visible when opacity &lt; 1.  Digging further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611584</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-27 09:34:55 -0700</bug_when>
    <thetext>I&apos;m pretty sure that the issue comes from the behavior of glClear, that is affected by glScissor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611850</commentid>
    <comment_count>4</comment_count>
      <attachid>139261</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-27 13:34:49 -0700</bug_when>
    <thetext>Created attachment 139261
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611884</commentid>
    <comment_count>5</comment_count>
      <attachid>139261</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-04-27 14:09:55 -0700</bug_when>
    <thetext>Comment on attachment 139261
Patch

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

This looks good to me. I have one concern below. The fact that the clip stack is now duplicated between the BitmapTexture and the shared TextureMapperGL state (framebuffer for the entire scene), suggests to me that perhaps there could be an abstraction to encapsulate each framebuffer and its associated clip stack. There would be an instance for the entire scene and one for each BitmapTexture.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:541
&gt; +    m_clipStack.clear();
&gt; +    m_clipStack.current().stencilIndex = 1;
&gt; +    m_clipStack.current().scissorBox = IntRect(IntPoint::zero(), m_textureSize);
&gt; +    m_clipStack.apply();
&gt; +    GL_CMD(glClearColor(0, 0, 0, 0));
&gt; +    GL_CMD(glClear(GL_COLOR_BUFFER_BIT));

Will this fail if TextureMapperGL::beginClip was never called from the WebKit layer? That&apos;s what enables the scissor test. Now you are removing the call to ::beginClip here and just applying the clip stack directly. It seems like you also need to enable the scissor test here as well. Perhaps that should just happen the first time you need to apply a scissorred clip.

You might also need to somehow handle disabling the scissor test when rebinding TextureMapperGL&apos;s main framebuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611931</commentid>
    <comment_count>6</comment_count>
      <attachid>139285</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-27 15:05:52 -0700</bug_when>
    <thetext>Created attachment 139285
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611933</commentid>
    <comment_count>7</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-27 15:06:39 -0700</bug_when>
    <thetext>I&apos;ve simplified things a bit, by making SCISSOR_TEST always be on, and sharing a bit more code inside ClipStack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611942</commentid>
    <comment_count>8</comment_count>
      <attachid>139289</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-27 15:26:01 -0700</bug_when>
    <thetext>Created attachment 139289
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612283</commentid>
    <comment_count>9</comment_count>
      <attachid>139289</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-04-28 09:34:49 -0700</bug_when>
    <thetext>Comment on attachment 139289
Patch

Great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612288</commentid>
    <comment_count>10</comment_count>
      <attachid>139289</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-28 10:26:16 -0700</bug_when>
    <thetext>Comment on attachment 139289
Patch

Clearing flags on attachment: 139289

Committed r115574: &lt;http://trac.webkit.org/changeset/115574&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612289</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-28 10:26:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>137889</attachid>
            <date>2012-04-19 06:19:29 -0700</date>
            <delta_ts>2012-04-19 06:19:29 -0700</delta_ts>
            <desc>Very compact version of falling leaves exposing the problem</desc>
            <filename>index.html</filename>
            <type>text/html</type>
            <size>1332</size>
            <attacher name="Lars Knudsen">larsgk</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs
Ly9FTiIKImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h
bC5kdGQiPgo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiAgICA8
aGVhZD4KICAgICAgICA8dGl0bGU+T3BhY2l0eSBhbmQgaW50ZXJtZWRpYXRlIHN1cmZhY2VzLi4u
PC90aXRsZT4KCTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD01MDBweCwgaW5p
dGlhbC1zY2FsZT0wLjY0Ij4KICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUi
IGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj4KCmJvZHkgewogIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOwp9CgojY29udGFpbmVyIHsK
ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGhlaWdodDogNzAwcHg7CiAgICB3aWR0aDogNTAw
cHg7CiAgICBtYXJnaW46IDUwcHggYXV0bzsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3Jk
ZXI6IDRweCBzb2xpZCAjNUMwOTBBOwp9Cgojbm9kZUNvbnRhaW5lciB7CiAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CiAgICB3aWR0aDogNTAwcHg7CiAgICBoZWlnaHQ6IDUwMHB4OwogICAgYmFja2dy
b3VuZC1jb2xvcjogcmVkOwogICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmFkZTsKICAgIC13
ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiA0czsKICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJh
dGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAtd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb246IG5v
cm1hbDsKICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyOwp9CgkK
I25vZGUgewogICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICB3aWR0aDogMTAwcHg7CiAgICAg
aGVpZ2h0OiAxMDBweDsKICAgICB0b3A6IDI1MHB4OwogICAgIGxlZnQ6IDI1MHB4OwogICAgIGJh
Y2tncm91bmQtY29sb3I6IGJsdWU7CgogICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVoo
MCk7Cn0KCQpALXdlYmtpdC1rZXlmcmFtZXMgZmFkZQp7CiAgICAwJSAgIHsgb3BhY2l0eTogMTsg
fQogICAgNTAlICB7IG9wYWNpdHk6IDE7IH0KICAgIDEwMCUgeyBvcGFjaXR5OiAwOyB9Cn0KCjwv
c3R5bGU+CiAgICA8L2hlYWQ+CiAgICA8Ym9keT4KICAgICAgPGRpdiBpZD0iY29udGFpbmVyIj48
ZGl2IGlkPSJub2RlQ29udGFpbmVyIj48ZGl2IGlkPSJub2RlIi8+PC9kaXY+PC9kaXY+PC9kaXY+
CiAgICA8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139261</attachid>
            <date>2012-04-27 13:34:49 -0700</date>
            <delta_ts>2012-04-27 15:05:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83691-20120427133446.patch</filename>
            <type>text/plain</type>
            <size>13965</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1Mzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjVmZGFkNjI3N2VkY2I4
NjFkMmNiMjhhN2Q1NjgwNzJhNmI1NmEzZS4uNDI4ZTBlOGJlODkyODkzNzdmYmFmODQ4MzUxNzc1
ZjNhOGVjZWVjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA0LTI3ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gRmFsbGluZyBsZWF2ZXMgZGVtbyBtaXNzaW5nIG9wYWNpdHkgZmFkZSBvdXQgYW5pbWF0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzY5MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBidWcg
b3JpZ2luYXRlZCBmcm9tIGNsZWFyaW5nIGFuIGludGVybWVkaWF0ZSBzdXJmYWNlIHdpdGggZ2xD
bGVhciB3aGlsZSB0aGUgc2Npc3NvcgorICAgICAgICBzdGF0ZSB3YXMgd3JvbmcuCisgICAgICAg
IFdoZW4gdXNpbmcgaW50ZXJtZWRpYXRlIHN1cmZhY2VzLCBtYWludGFpbiBhIGNsaXAtc3RhY2sg
Zm9yIGVhY2ggc3VyZmFjZSwgcmF0aGVyIHRoYW4KKyAgICAgICAgYSBzaW5nbGUgY2xpcC1zdGFj
ayBmb3IgdGhlIHdob2xlIHNjZW5lLiBXaGVuIGEgc3VyZmFjZSBpcyBib3VuZCwgaXRzIGNsaXAg
c3RhY2sgc2hvdWxkCisgICAgICAgIGJlIGFwcGxpZWQuCisKKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoU2hhcmVkR0xEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpwdXNoKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpDbGlwU3Rh
Y2s6OnBvcCk6CisgICAgICAgIChXZWJDb3JlOjpzY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpjbGlwU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpk
aWRSZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpjcmVhdGVGYm9JZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmJpbmQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiaW5kRGVmYXVsdFN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjplbmRDbGlwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoQ2xp
cFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YXRlOjpD
bGlwU3RhdGUpOgorICAgICAgICAoQ2xpcFN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpjdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpjbGVhcik6CisgICAgICAgIChCaXRtYXBUZXh0dXJlR0wp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpCaXRtYXBUZXh0dXJlR0wpOgor
CiAyMDEyLTA0LTE5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+
CiAKICAgICAgICAgW1F0XVtUZXhtYXBdIEVycm9yIG9mIGNyb3NzLWNvbXBpbGluZyB3ZWJraXQg
d2l0aCBRdCA0LjguMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCAwNTEwNzYyMTg2NDFjNmI1
ZGZlYTQyNDEyY2NhZjViMjNkNDAwMTA0Li5mOTZiYWJjMTM4NWY0MDAxYTZiYWJjNjRjNDE2YTk0
ZWJhMzg1YTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMTE2LDU1ICsxMTYsNyBAQCBz
dHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNoYXJlZEdMRGF0YShnZXRDdXJyZW50R0xDb250ZXh0KCkpKTsKICAgICAgICAgfQogCi0g
ICAgICAgIHN0cnVjdCBDbGlwU3RhdGUgewotICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yQm94
OwotICAgICAgICAgICAgaW50IHN0ZW5jaWxJbmRleDsKLSAgICAgICAgICAgIENsaXBTdGF0ZShj
b25zdCBJbnRSZWN0JiBzY2lzc29ycywgaW50IHN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgOiBz
Y2lzc29yQm94KHNjaXNzb3JzKQotICAgICAgICAgICAgICAgICwgc3RlbmNpbEluZGV4KHN0ZW5j
aWwpCi0gICAgICAgICAgICB7IH0KLQotICAgICAgICAgICAgQ2xpcFN0YXRlKCkKLSAgICAgICAg
ICAgICAgICA6IHN0ZW5jaWxJbmRleCgxKQotICAgICAgICAgICAgeyB9Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgQ2xpcFN0YXRlIGNsaXBTdGF0ZTsKLSAgICAgICAgVmVjdG9yPENsaXBTdGF0ZT4g
Y2xpcFN0YWNrOwotCi0gICAgICAgIHZvaWQgcHVzaENsaXBTdGF0ZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGNsaXBTdGFjay5hcHBlbmQoY2xpcFN0YXRlKTsKLSAgICAgICAgfQogCi0gICAg
ICAgIHZvaWQgcG9wQ2xpcFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNsaXBT
dGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2xp
cFN0YXRlID0gY2xpcFN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgIGNsaXBTdGFjay5yZW1vdmVM
YXN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBzY2lzc29yQ2xpcChjb25z
dCBJbnRSZWN0JiByZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBHTGludCB2aWV3cG9y
dFs0XTsKLSAgICAgICAgICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3
cG9ydCkpOwotICAgICAgICAgICAgR0xfQ01EKGdsU2Npc3NvcihyZWN0LngoKSwgdmlld3BvcnRb
M10gLSByZWN0Lm1heFkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIGFwcGx5Q3VycmVudENsaXAoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzY2lzc29yQ2xpcChjbGlwU3RhdGUuc2Npc3NvckJveCk7Ci0gICAgICAgICAgICBHTF9D
TUQoZ2xTdGVuY2lsT3AoR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkpOwotICAgICAgICAgICAg
R0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfRVFVQUwsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAx
LCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSkpOwotICAgICAgICAgICAgaWYgKGNsaXBTdGF0
ZS5zdGVuY2lsSW5kZXggPT0gMSkKLSAgICAgICAgICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdM
X1NURU5DSUxfVEVTVCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEdMX0NN
RChnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsKLSAgICAgICAgfQogCiAgICAgICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCkBAIC0y
MTcsNiArMTY5LDQxIEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gY3VycmVudFN1cmZhY2U7CiB9OwogCit2b2lkIFRleHR1cmVNYXBwZXJH
TDo6Q2xpcFN0YWNrOjpwdXNoKCkKK3sKKyAgICBjbGlwU3RhY2suYXBwZW5kKGNsaXBTdGF0ZSk7
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OnBvcCgpCit7CisgICAgaWYg
KGNsaXBTdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBjbGlwU3RhdGUgPSBj
bGlwU3RhY2subGFzdCgpOworICAgIGNsaXBTdGFjay5yZW1vdmVMYXN0KCk7Cit9CisKK3N0YXRp
YyB2b2lkIHNjaXNzb3JDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHTGludCB2aWV3cG9ydFs0XTsKKyAg
ICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgdmlld3BvcnQpKTsKKyAgICBHTF9D
TUQoZ2xTY2lzc29yKHJlY3QueCgpLCB2aWV3cG9ydFszXSAtIHJlY3QubWF4WSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBT
dGFjazo6YXBwbHkoKQoreworICAgIHNjaXNzb3JDbGlwKGNsaXBTdGF0ZS5zY2lzc29yQm94KTsK
KyAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkpOworICAg
IEdMX0NNRChnbFN0ZW5jaWxGdW5jKEdMX0VRVUFMLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0g
MSwgY2xpcFN0YXRlLnN0ZW5jaWxJbmRleCAtIDEpKTsKKyAgICBpZiAoY2xpcFN0YXRlLnN0ZW5j
aWxJbmRleCA9PSAxKQorICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX1NURU5DSUxfVEVTVCkp
OworICAgIGVsc2UKKyAgICAgICAgR0xfQ01EKGdsRW5hYmxlKEdMX1NURU5DSUxfVEVTVCkpOwor
fQorCisKIHZvaWQgVGV4dHVyZU1hcHBlckdMRGF0YTo6aW5pdGlhbGl6ZVN0ZW5jaWwoKQogewog
ICAgIGlmIChjdXJyZW50U3VyZmFjZSkgewpAQCAtMjQ2LDYgKzIzMywxMSBAQCBUZXh0dXJlTWFw
cGVyR0w6OlRleHR1cmVNYXBwZXJHTCgpCiB7CiB9CiAKK1RleHR1cmVNYXBwZXJHTDo6Q2xpcFN0
YWNrJiBUZXh0dXJlTWFwcGVyR0w6OmNsaXBTdGFjaygpCit7CisgICAgcmV0dXJuIGRhdGEoKS5j
dXJyZW50U3VyZmFjZSA/IHRvQml0bWFwVGV4dHVyZUdMKGRhdGEoKS5jdXJyZW50U3VyZmFjZS5n
ZXQoKSktPm1fY2xpcFN0YWNrIDogbV9jbGlwU3RhY2s7Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgZmxhZ3MpCiB7CiAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgbm8gR0wgZXJyb3IgY29kZSBzdGF5cyBmcm9tIHByZXZpb3VzIG9wZXJhdGlvbnMuCkBA
IC0yNjksOCArMjYxLDkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFp
bnRGbGFncyBmbGFncykKICAgICBHTF9DTUQoZ2xEZXB0aE1hc2soMCkpOwogICAgIEdMX0NNRChn
bEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQpKTsKICAgICBHTF9DTUQo
Z2xHZXRJbnRlZ2VydihHTF9TQ0lTU09SX0JPWCwgZGF0YSgpLnByZXZpb3VzU2Npc3NvcikpOwot
ICAgIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5jbGlwU3RhdGUuc3RlbmNpbEluZGV4ID0gMTsKLSAg
ICBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YXRlLnNjaXNzb3JCb3ggPSBJbnRSZWN0KDAs
IDAsIGRhdGEoKS52aWV3cG9ydFsyXSwgZGF0YSgpLnZpZXdwb3J0WzNdKTsKKyAgICBtX2NsaXBT
dGFjay5jbGVhcigpOworICAgIG1fY2xpcFN0YWNrLmN1cnJlbnQoKS5zdGVuY2lsSW5kZXggPSAx
OworICAgIG1fY2xpcFN0YWNrLmN1cnJlbnQoKS5zY2lzc29yQm94ID0gSW50UmVjdCgwLCAwLCBk
YXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSk7CiAgICAgZ2xHZXRJbnRlZ2Vy
dihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKICAg
ICBkYXRhKCkuUGFpbnRGbGFncyA9IGZsYWdzOwogICAgIGJpbmRTdXJmYWNlKDApOwpAQCAtMzEx
LDcgKzMwNCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRt
YXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmCiAgICAgaWYgKCF0ZXh0dXJlLmlz
VmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGRhdGEoKS5zaGFyZWRHTERhdGEo
KS5jbGlwU3RhdGUuc2Npc3NvckJveC5pc0VtcHR5KCkpCisgICAgaWYgKGNsaXBTdGFjaygpLmN1
cnJlbnQoKS5zY2lzc29yQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29u
c3QgQml0bWFwVGV4dHVyZUdMJiB0ZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBU
ZXh0dXJlR0wmPih0ZXh0dXJlKTsKQEAgLTQyMiw3ICs0MTUsNyBAQCB2b2lkIEJpdG1hcFRleHR1
cmVHTDo6ZGlkUmVzZXQoKQogICAgIGlmICghbV9pZCkKICAgICAgICAgR0xfQ01EKGdsR2VuVGV4
dHVyZXMoMSwgJm1faWQpKTsKIAotICAgIG1fc3VyZmFjZU5lZWRzUmVzZXQgPSB0cnVlOworICAg
IG1fc2hvdWxkQ2xlYXIgPSB0cnVlOwogICAgIGlmIChtX3RleHR1cmVTaXplID09IGNvbnRlbnRT
aXplKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTM1LDI0ICs1MjgsNDAgQEAgdm9pZCBCaXRt
YXBUZXh0dXJlR0w6OmluaXRpYWxpemVTdGVuY2lsKCkKICAgICBHTF9DTUQoZ2xDbGVhcihHTF9T
VEVOQ0lMX0JVRkZFUl9CSVQpKTsKIH0KIAotdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJpbmQoKQor
dm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQoKQogewotICAgIGlmIChtX3N1cmZh
Y2VOZWVkc1Jlc2V0IHx8ICFtX2ZibykgewotICAgICAgICBpZiAoIW1fZmJvKQotICAgICAgICAg
ICAgR0xfQ01EKGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2ZibykpOwotICAgICAgICBHTF9DTUQo
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKSk7Ci0gICAgICAgIEdMX0NN
RChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApKTsKLSAgICAgICAgR0xfQ01EKGdsRnJh
bWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBH
TF9URVhUVVJFXzJELCBpZCgpLCAwKSk7Ci0gICAgICAgIEdMX0NNRChnbENsZWFyQ29sb3IoMCwg
MCwgMCwgMCkpOwotICAgICAgICBHTF9DTUQoZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKSk7
Ci0gICAgICAgIG1fc3VyZmFjZU5lZWRzUmVzZXQgPSBmYWxzZTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2ZibykpOworICAg
IGlmICghbV9zaG91bGRDbGVhcikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgR0xfQ01EKGdsVmll
d3BvcnQoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpOwotICAgIGNvbnN0
IGJvb2wgbWlycm9yZWQgPSB0cnVlOwotICAgIG1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLnByb2pl
Y3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHNpemUoKSwgbWlycm9yZWQpOwot
ICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIEZs
b2F0UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50U2l6ZSgpKSk7CisgICAgbV9jbGlwU3Rh
Y2suY2xlYXIoKTsKKyAgICBtX2NsaXBTdGFjay5jdXJyZW50KCkuc3RlbmNpbEluZGV4ID0gMTsK
KyAgICBtX2NsaXBTdGFjay5jdXJyZW50KCkuc2Npc3NvckJveCA9IEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgbV90ZXh0dXJlU2l6ZSk7CisgICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKKyAgICBH
TF9DTUQoZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKKyAgICBHTF9DTUQoZ2xDbGVhcihHTF9D
T0xPUl9CVUZGRVJfQklUKSk7CisgICAgbV9zaG91bGRDbGVhciA9IGZhbHNlOworfQorCit2b2lk
IEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJvSWZOZWVkZWQoKQoreworICAgIGlmIChtX2ZibykK
KyAgICAgICAgcmV0dXJuOworCisgICAgR0xfQ01EKGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zi
bykpOworICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8p
KTsKKyAgICBHTF9DTUQoZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xf
Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIGlkKCksIDApKTsKKyAgICBtX3Nob3Vs
ZENsZWFyID0gdHJ1ZTsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJpbmQoKQoreworICAg
IEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApKTsKKyAgICBjcmVhdGVGYm9J
Zk5lZWRlZCgpOworICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwg
bV9mYm8pKTsKKyAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRo
KCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjbGVhcklmTmVlZGVkKCk7CisgICAg
bV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rp
b25NYXRyaXgobV90ZXh0dXJlU2l6ZSwgdHJ1ZSAvKiBtaXJyb3JlZCAqLyk7CisgICAgbV9jbGlw
U3RhY2suYXBwbHkoKTsKIH0KIAogQml0bWFwVGV4dHVyZUdMOjp+Qml0bWFwVGV4dHVyZUdMKCkK
QEAgLTU4MiwyNiArNTkxLDI0IEBAIFRleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJHTCgp
CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJm
YWNlKEJpdG1hcFRleHR1cmUgKnN1cmZhY2VQb2ludGVyKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmJpbmREZWZhdWx0U3VyZmFjZSgpCiB7Ci0gICAgQml0bWFwVGV4dHVyZUdMKiBzdXJmYWNlID0g
c3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4oc3VyZmFjZVBvaW50ZXIpOworICAgIEdMX0NN
RChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZGF0YSgpLnRhcmdldEZyYW1lQnVm
ZmVyKSk7CisgICAgSW50U2l6ZSB2aWV3cG9ydFNpemUoZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRh
KCkudmlld3BvcnRbM10pOworICAgIGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJv
amVjdGlvbk1hdHJpeCh2aWV3cG9ydFNpemUsIGRhdGEoKS5QYWludEZsYWdzICYgUGFpbnRpbmdN
aXJyb3JlZCk7CisgICAgR0xfQ01EKGdsVmlld3BvcnQoZGF0YSgpLnZpZXdwb3J0WzBdLCBkYXRh
KCkudmlld3BvcnRbMV0sIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0
KCkpKTsKKyAgICBtX2NsaXBTdGFjay5hcHBseSgpOworICAgIGRhdGEoKS5jdXJyZW50U3VyZmFj
ZS5jbGVhcigpOworfQogCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UoQml0bWFw
VGV4dHVyZSAqc3VyZmFjZSkKK3sKICAgICBpZiAoIXN1cmZhY2UpIHsKLSAgICAgICAgR0xfQ01E
KGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBkYXRhKCkudGFyZ2V0RnJhbWVCdWZm
ZXIpKTsKLQotICAgICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZShkYXRhKCkudmlld3BvcnRbMl0s
IGRhdGEoKS52aWV3cG9ydFszXSk7Ci0gICAgICAgIGNvbnN0IGJvb2wgbWlyb3JyZWQgPSBkYXRh
KCkuUGFpbnRGbGFncyAmIFBhaW50aW5nTWlycm9yZWQ7Ci0gICAgICAgIGRhdGEoKS5wcm9qZWN0
aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3cG9ydFNpemUsIG1pcm9ycmVk
KTsKLSAgICAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgdmlld3BvcnRTaXplLndpZHRoKCks
IHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgICAgIGlmIChkYXRhKCkuY3VycmVudFN1
cmZhY2UpCi0gICAgICAgICAgICBlbmRDbGlwKCk7Ci0gICAgICAgIGRhdGEoKS5jdXJyZW50U3Vy
ZmFjZS5jbGVhcigpOworICAgICAgICBiaW5kRGVmYXVsdFN1cmZhY2UoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotCi0gICAgc3VyZmFjZS0+YmluZCgpOworICAgIHN0YXRpY19jYXN0PEJp
dG1hcFRleHR1cmVHTCo+KHN1cmZhY2UpLT5iaW5kKCk7CiAgICAgZGF0YSgpLmN1cnJlbnRTdXJm
YWNlID0gc3VyZmFjZTsKIH0KIApAQCAtNjIxLDE0ICs2MjgsMTQgQEAgYm9vbCBUZXh0dXJlTWFw
cGVyR0w6OmJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVs
Vmlld01hdHIKICAgICBpZiAoIXF1YWQuaXNSZWN0aWxpbmVhcigpIHx8IHJlY3QuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xp
cFN0YXRlLnNjaXNzb3JCb3guaW50ZXJzZWN0KHJlY3QpOwotICAgIGRhdGEoKS5zaGFyZWRHTERh
dGEoKS5hcHBseUN1cnJlbnRDbGlwKCk7CisgICAgY2xpcFN0YWNrKCkuY3VycmVudCgpLnNjaXNz
b3JCb3guaW50ZXJzZWN0KHJlY3QpOworICAgIGNsaXBTdGFjaygpLmFwcGx5KCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRSZWN0KQogewotICAgIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5wdXNoQ2xpcFN0YXRlKCk7Cisg
ICAgY2xpcFN0YWNrKCkucHVzaCgpOwogICAgIGlmIChiZWdpblNjaXNzb3JDbGlwKG1vZGVsVmll
d01hdHJpeCwgdGFyZ2V0UmVjdCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjYyLDcgKzY2OSw3
IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAgICAgICAgIC0xLCAtMSwgMCwgMQogICAgIH07
CiAKLSAgICBpbnQmIHN0ZW5jaWxJbmRleCA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5jbGlwU3Rh
dGUuc3RlbmNpbEluZGV4OworICAgIGludCYgc3RlbmNpbEluZGV4ID0gY2xpcFN0YWNrKCkuY3Vy
cmVudCgpLnN0ZW5jaWxJbmRleDsKIAogICAgIEdMX0NNRChnbEVuYWJsZShHTF9TVEVOQ0lMX1RF
U1QpKTsKIApAQCAtNjg4LDEzICs2OTUsMTMgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2lu
Q2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KIAog
ICAgIC8vIEluY3JlYXNlIHN0ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3RlbmNpbCB0ZXN0aW5nLgog
ICAgIHN0ZW5jaWxJbmRleCAqPSAyOwotICAgIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5hcHBseUN1
cnJlbnRDbGlwKCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHkoKTsKIH0KIAogdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmVuZENsaXAoKQogewotICAgIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5wb3BDbGlw
U3RhdGUoKTsKLSAgICBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuYXBwbHlDdXJyZW50Q2xpcCgpOwor
ICAgIGNsaXBTdGFjaygpLnBvcCgpOworICAgIGNsaXBTdGFjaygpLmFwcGx5KCk7CiB9CiAKIFBh
c3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuaAppbmRleCAxYzQxZDQzNzFjMjI4YzQ5NGQ4MzkzNWJjOGQzM2JiYjI4
YWZkNTBiLi5jNWI1Nzc2NzFjOTg2YTM1ZDNjZjZiODY1ZDk4NWQxNzI4MzA0ZmZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHTC5oCkBAIC02NiwxMCArNjYsNDAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQWNj
ZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gT3BlbkdMTW9k
ZTsgfQogCiBwcml2YXRlOgorCisgICAgc3RydWN0IENsaXBTdGF0ZSB7CisgICAgICAgIEludFJl
Y3Qgc2Npc3NvckJveDsKKyAgICAgICAgaW50IHN0ZW5jaWxJbmRleDsKKyAgICAgICAgQ2xpcFN0
YXRlKGNvbnN0IEludFJlY3QmIHNjaXNzb3JzLCBpbnQgc3RlbmNpbCkKKyAgICAgICAgICAgIDog
c2Npc3NvckJveChzY2lzc29ycykKKyAgICAgICAgICAgICwgc3RlbmNpbEluZGV4KHN0ZW5jaWwp
CisgICAgICAgIHsgfQorCisgICAgICAgIENsaXBTdGF0ZSgpCisgICAgICAgICAgICA6IHN0ZW5j
aWxJbmRleCgxKQorICAgICAgICB7IH0KKyAgICB9OworCisgICAgY2xhc3MgQ2xpcFN0YWNrIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgcHVzaCgpOworICAgICAgICB2b2lkIHBvcCgpOwor
ICAgICAgICB2b2lkIGFwcGx5KCk7CisgICAgICAgIGlubGluZSBDbGlwU3RhdGUmIGN1cnJlbnQo
KSB7IHJldHVybiBjbGlwU3RhdGU7IH0KKyAgICAgICAgdm9pZCBjbGVhcigpIHsgY2xpcFN0YWNr
LmNsZWFyKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENsaXBTdGF0ZSBjbGlwU3RhdGU7
CisgICAgICAgIFZlY3RvcjxDbGlwU3RhdGU+IGNsaXBTdGFjazsKKyAgICB9OworCiAgICAgYm9v
bCBiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdm9pZCBiaW5kRGVmYXVsdFN1cmZhY2UoKTsKKyAgICBDbGlwU3RhY2sm
IGNsaXBTdGFjaygpOwogICAgIGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRhKCkgeyBy
ZXR1cm4gKm1fZGF0YTsgfQogICAgIFRleHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0YTsKICAgICBH
cmFwaGljc0NvbnRleHQqIG1fY29udGV4dDsKKyAgICBDbGlwU3RhY2sgbV9jbGlwU3RhY2s7CiAg
ICAgZnJpZW5kIGNsYXNzIEJpdG1hcFRleHR1cmVHTDsKIH07CiAKQEAgLTk2LDE3ICsxMjYsMjEg
QEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fZGlydHlSZWN0OwogICAgIEdMdWludCBtX2ZibzsK
ICAgICBHTHVpbnQgbV9yYm87Ci0gICAgYm9vbCBtX3N1cmZhY2VOZWVkc1Jlc2V0OworICAgIGJv
b2wgbV9zaG91bGRDbGVhcjsKICAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsK
KyAgICBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjayBtX2NsaXBTdGFjazsKICAgICBCaXRtYXBU
ZXh0dXJlR0woKQogICAgICAgICA6IG1faWQoMCkKICAgICAgICAgLCBtX2ZibygwKQogICAgICAg
ICAsIG1fcmJvKDApCi0gICAgICAgICwgbV9zdXJmYWNlTmVlZHNSZXNldCh0cnVlKQorICAgICAg
ICAsIG1fc2hvdWxkQ2xlYXIodHJ1ZSkKICAgICAgICAgLCBtX3RleHR1cmVNYXBwZXIoMCkKICAg
ICB7CiAgICAgfQogCisgICAgdm9pZCBjbGVhcklmTmVlZGVkKCk7CisgICAgdm9pZCBjcmVhdGVG
Ym9JZk5lZWRlZCgpOworCiAgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJHTDsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139285</attachid>
            <date>2012-04-27 15:05:52 -0700</date>
            <delta_ts>2012-04-27 15:25:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83691-20120427150550.patch</filename>
            <type>text/plain</type>
            <size>14316</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1Mzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjVmZGFkNjI3N2VkY2I4
NjFkMmNiMjhhN2Q1NjgwNzJhNmI1NmEzZS4uNDI4ZTBlOGJlODkyODkzNzdmYmFmODQ4MzUxNzc1
ZjNhOGVjZWVjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA0LTI3ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gRmFsbGluZyBsZWF2ZXMgZGVtbyBtaXNzaW5nIG9wYWNpdHkgZmFkZSBvdXQgYW5pbWF0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzY5MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBidWcg
b3JpZ2luYXRlZCBmcm9tIGNsZWFyaW5nIGFuIGludGVybWVkaWF0ZSBzdXJmYWNlIHdpdGggZ2xD
bGVhciB3aGlsZSB0aGUgc2Npc3NvcgorICAgICAgICBzdGF0ZSB3YXMgd3JvbmcuCisgICAgICAg
IFdoZW4gdXNpbmcgaW50ZXJtZWRpYXRlIHN1cmZhY2VzLCBtYWludGFpbiBhIGNsaXAtc3RhY2sg
Zm9yIGVhY2ggc3VyZmFjZSwgcmF0aGVyIHRoYW4KKyAgICAgICAgYSBzaW5nbGUgY2xpcC1zdGFj
ayBmb3IgdGhlIHdob2xlIHNjZW5lLiBXaGVuIGEgc3VyZmFjZSBpcyBib3VuZCwgaXRzIGNsaXAg
c3RhY2sgc2hvdWxkCisgICAgICAgIGJlIGFwcGxpZWQuCisKKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoU2hhcmVkR0xEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpwdXNoKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpDbGlwU3Rh
Y2s6OnBvcCk6CisgICAgICAgIChXZWJDb3JlOjpzY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpjbGlwU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpk
aWRSZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpjcmVhdGVGYm9JZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmJpbmQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiaW5kRGVmYXVsdFN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjplbmRDbGlwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoQ2xp
cFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YXRlOjpD
bGlwU3RhdGUpOgorICAgICAgICAoQ2xpcFN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpjdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpjbGVhcik6CisgICAgICAgIChCaXRtYXBUZXh0dXJlR0wp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpCaXRtYXBUZXh0dXJlR0wpOgor
CiAyMDEyLTA0LTE5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+
CiAKICAgICAgICAgW1F0XVtUZXhtYXBdIEVycm9yIG9mIGNyb3NzLWNvbXBpbGluZyB3ZWJraXQg
d2l0aCBRdCA0LjguMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCAwNTEwNzYyMTg2NDFjNmI1
ZGZlYTQyNDEyY2NhZjViMjNkNDAwMTA0Li5lNjk1MWQ4MDFiYzJhY2MzODU0ZTFmZGJkMjA1Y2E5
N2QwMzgwMTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMTE2LDU1ICsxMTYsNyBAQCBz
dHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNoYXJlZEdMRGF0YShnZXRDdXJyZW50R0xDb250ZXh0KCkpKTsKICAgICAgICAgfQogCi0g
ICAgICAgIHN0cnVjdCBDbGlwU3RhdGUgewotICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yQm94
OwotICAgICAgICAgICAgaW50IHN0ZW5jaWxJbmRleDsKLSAgICAgICAgICAgIENsaXBTdGF0ZShj
b25zdCBJbnRSZWN0JiBzY2lzc29ycywgaW50IHN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgOiBz
Y2lzc29yQm94KHNjaXNzb3JzKQotICAgICAgICAgICAgICAgICwgc3RlbmNpbEluZGV4KHN0ZW5j
aWwpCi0gICAgICAgICAgICB7IH0KLQotICAgICAgICAgICAgQ2xpcFN0YXRlKCkKLSAgICAgICAg
ICAgICAgICA6IHN0ZW5jaWxJbmRleCgxKQotICAgICAgICAgICAgeyB9Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgQ2xpcFN0YXRlIGNsaXBTdGF0ZTsKLSAgICAgICAgVmVjdG9yPENsaXBTdGF0ZT4g
Y2xpcFN0YWNrOwotCi0gICAgICAgIHZvaWQgcHVzaENsaXBTdGF0ZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGNsaXBTdGFjay5hcHBlbmQoY2xpcFN0YXRlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgcG9wQ2xpcFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNsaXBT
dGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2xp
cFN0YXRlID0gY2xpcFN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgIGNsaXBTdGFjay5yZW1vdmVM
YXN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBzY2lzc29yQ2xpcChjb25z
dCBJbnRSZWN0JiByZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBHTGludCB2aWV3cG9y
dFs0XTsKLSAgICAgICAgICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3
cG9ydCkpOwotICAgICAgICAgICAgR0xfQ01EKGdsU2Npc3NvcihyZWN0LngoKSwgdmlld3BvcnRb
M10gLSByZWN0Lm1heFkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIGFwcGx5Q3VycmVudENsaXAoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzY2lzc29yQ2xpcChjbGlwU3RhdGUuc2Npc3NvckJveCk7Ci0gICAgICAgICAgICBHTF9D
TUQoZ2xTdGVuY2lsT3AoR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkpOwotICAgICAgICAgICAg
R0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfRVFVQUwsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAx
LCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSkpOwotICAgICAgICAgICAgaWYgKGNsaXBTdGF0
ZS5zdGVuY2lsSW5kZXggPT0gMSkKLSAgICAgICAgICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdM
X1NURU5DSUxfVEVTVCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEdMX0NN
RChnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsKLSAgICAgICAgfQogCiAgICAgICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCkBAIC0y
MTcsNiArMTY5LDQ3IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gY3VycmVudFN1cmZhY2U7CiB9OwogCit2b2lkIFRleHR1cmVNYXBwZXJH
TDo6Q2xpcFN0YWNrOjppbml0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgY2xpcFN0YWNr
LmNsZWFyKCk7CisgICAgY2xpcFN0YXRlID0gVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhdGUocmVj
dCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OnB1c2goKQoreworICAg
IGNsaXBTdGFjay5hcHBlbmQoY2xpcFN0YXRlKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6
OkNsaXBTdGFjazo6cG9wKCkKK3sKKyAgICBpZiAoY2xpcFN0YWNrLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGNsaXBTdGF0ZSA9IGNsaXBTdGFjay5sYXN0KCk7CisgICAgY2xpcFN0
YWNrLnJlbW92ZUxhc3QoKTsKK30KKworc3RhdGljIHZvaWQgc2Npc3NvckNsaXAoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEdMaW50IHZpZXdwb3J0WzRdOworICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1ZJ
RVdQT1JULCB2aWV3cG9ydCkpOworICAgIEdMX0NNRChnbFNjaXNzb3IocmVjdC54KCksIHZpZXdw
b3J0WzNdIC0gcmVjdC5tYXhZKCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOworfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjphcHBseSgpCit7CisgICAgc2Npc3Nv
ckNsaXAoY2xpcFN0YXRlLnNjaXNzb3JCb3gpOworICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9L
RUVQLCBHTF9LRUVQLCBHTF9LRUVQKSk7CisgICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfRVFV
QUwsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0g
MSkpOworICAgIGlmIChjbGlwU3RhdGUuc3RlbmNpbEluZGV4ID09IDEpCisgICAgICAgIEdMX0NN
RChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgZWxzZQorICAgICAgICBHTF9DTUQo
Z2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSk7Cit9CisKKwogdm9pZCBUZXh0dXJlTWFwcGVyR0xE
YXRhOjppbml0aWFsaXplU3RlbmNpbCgpCiB7CiAgICAgaWYgKGN1cnJlbnRTdXJmYWNlKSB7CkBA
IC0yNDYsNiArMjM5LDExIEBAIFRleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKIHsK
IH0KIAorVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2smIFRleHR1cmVNYXBwZXJHTDo6Y2xpcFN0
YWNrKCkKK3sKKyAgICByZXR1cm4gZGF0YSgpLmN1cnJlbnRTdXJmYWNlID8gdG9CaXRtYXBUZXh0
dXJlR0woZGF0YSgpLmN1cnJlbnRTdXJmYWNlLmdldCgpKS0+bV9jbGlwU3RhY2sgOiBtX2NsaXBT
dGFjazsKK30KKwogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFn
cyBmbGFncykKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBHTCBlcnJvciBjb2RlIHN0YXlz
IGZyb20gcHJldmlvdXMgb3BlcmF0aW9ucy4KQEAgLTI1OCw2ICsyNTYsNyBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyhQYWludEZsYWdzIGZsYWdzKQogICAgIGRhdGEoKS5w
cmV2aW91c1NjaXNzb3JTdGF0ZSA9IGdsSXNFbmFibGVkKEdMX1NDSVNTT1JfVEVTVCk7CiAgICAg
ZGF0YSgpLnByZXZpb3VzRGVwdGhTdGF0ZSA9IGdsSXNFbmFibGVkKEdMX0RFUFRIX1RFU1QpOwog
ICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKKyAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RF
U1QpOwogI2lmIFBMQVRGT1JNKFFUKQogICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAgICAgUVBh
aW50ZXIqIHBhaW50ZXIgPSBtX2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwpAQCAtMjY5LDkg
KzI2OCw5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKFBhaW50RmxhZ3Mg
ZmxhZ3MpCiAgICAgR0xfQ01EKGdsRGVwdGhNYXNrKDApKTsKICAgICBHTF9DTUQoZ2xHZXRJbnRl
Z2VydihHTF9WSUVXUE9SVCwgZGF0YSgpLnZpZXdwb3J0KSk7CiAgICAgR0xfQ01EKGdsR2V0SW50
ZWdlcnYoR0xfU0NJU1NPUl9CT1gsIGRhdGEoKS5wcmV2aW91c1NjaXNzb3IpKTsKLSAgICBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YXRlLnN0ZW5jaWxJbmRleCA9IDE7Ci0gICAgZGF0YSgp
LnNoYXJlZEdMRGF0YSgpLmNsaXBTdGF0ZS5zY2lzc29yQm94ID0gSW50UmVjdCgwLCAwLCBkYXRh
KCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSk7CiAgICAgZ2xHZXRJbnRlZ2VydihH
TF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKKyAgICBt
X2NsaXBTdGFjay5pbml0KEludFJlY3QoMCwgMCwgZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCku
dmlld3BvcnRbM10pKTsKKyAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9C
SU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKSk7CiAgICAgZGF0YSgpLlBhaW50Rmxh
Z3MgPSBmbGFnczsKICAgICBiaW5kU3VyZmFjZSgwKTsKIH0KQEAgLTMxMSw3ICszMTAsNyBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4
dHVyZSwgY29uc3QgRmxvYXRSZWN0JgogICAgIGlmICghdGV4dHVyZS5pc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YXRlLnNj
aXNzb3JCb3guaXNFbXB0eSgpKQorICAgIGlmIChjbGlwU3RhY2soKS5jdXJyZW50KCkuc2Npc3Nv
ckJveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IEJpdG1hcFRleHR1
cmVHTCYgdGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4odGV4
dHVyZSk7CkBAIC00MjIsNyArNDIxLDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0
KCkKICAgICBpZiAoIW1faWQpCiAgICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZtX2lk
KSk7CiAKLSAgICBtX3N1cmZhY2VOZWVkc1Jlc2V0ID0gdHJ1ZTsKKyAgICBtX3Nob3VsZENsZWFy
ID0gdHJ1ZTsKICAgICBpZiAobV90ZXh0dXJlU2l6ZSA9PSBjb250ZW50U2l6ZSgpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTUzNSwyNCArNTM0LDM4IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpp
bml0aWFsaXplU3RlbmNpbCgpCiAgICAgR0xfQ01EKGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJf
QklUKSk7CiB9CiAKLXZvaWQgQml0bWFwVGV4dHVyZUdMOjpiaW5kKCkKK3ZvaWQgQml0bWFwVGV4
dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKIHsKLSAgICBpZiAobV9zdXJmYWNlTmVlZHNSZXNldCB8
fCAhbV9mYm8pIHsKLSAgICAgICAgaWYgKCFtX2ZibykKLSAgICAgICAgICAgIEdMX0NNRChnbEdl
bkZyYW1lYnVmZmVycygxLCAmbV9mYm8pKTsKLSAgICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2ZibykpOwotICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCAwKSk7Ci0gICAgICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwg
aWQoKSwgMCkpOwotICAgICAgICBHTF9DTUQoZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKLSAg
ICAgICAgR0xfQ01EKGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCkpOwotICAgICAgICBtX3N1
cmZhY2VOZWVkc1Jlc2V0ID0gZmFsc2U7Ci0gICAgfSBlbHNlCi0gICAgICAgIEdMX0NNRChnbEJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pKTsKKyAgICBpZiAoIW1fc2hvdWxk
Q2xlYXIpCisgICAgICAgIHJldHVybjsKIAotICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHNp
emUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKTsKLSAgICBjb25zdCBib29sIG1pcnJvcmVk
ID0gdHJ1ZTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmRhdGEoKS5wcm9qZWN0aW9uTWF0cml4ID0g
Y3JlYXRlUHJvamVjdGlvbk1hdHJpeChzaXplKCksIG1pcnJvcmVkKTsKLSAgICBtX3RleHR1cmVN
YXBwZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBGbG9hdFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgY29udGVudFNpemUoKSkpOworICAgIG1fY2xpcFN0YWNrLmluaXQoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBtX3RleHR1cmVTaXplKSk7CisgICAgbV9jbGlwU3RhY2suYXBw
bHkoKTsKKyAgICBHTF9DTUQoZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKKyAgICBHTF9DTUQo
Z2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKSk7CisgICAgbV9zaG91bGRDbGVhciA9IGZhbHNl
OworfQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJvSWZOZWVkZWQoKQoreworICAg
IGlmIChtX2ZibykKKyAgICAgICAgcmV0dXJuOworCisgICAgR0xfQ01EKGdsR2VuRnJhbWVidWZm
ZXJzKDEsICZtX2ZibykpOworICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgbV9mYm8pKTsKKyAgICBHTF9DTUQoZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFN
RUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIGlkKCksIDApKTsK
KyAgICBtX3Nob3VsZENsZWFyID0gdHJ1ZTsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJp
bmQoKQoreworICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApKTsKKyAg
ICBjcmVhdGVGYm9JZk5lZWRlZCgpOworICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgbV9mYm8pKTsKKyAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBtX3RleHR1
cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjbGVhcklmTmVl
ZGVkKCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNy
ZWF0ZVByb2plY3Rpb25NYXRyaXgobV90ZXh0dXJlU2l6ZSwgdHJ1ZSAvKiBtaXJyb3JlZCAqLyk7
CisgICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKIH0KIAogQml0bWFwVGV4dHVyZUdMOjp+Qml0bWFw
VGV4dHVyZUdMKCkKQEAgLTU4MiwyNiArNTk1LDI0IEBAIFRleHR1cmVNYXBwZXJHTDo6flRleHR1
cmVNYXBwZXJHTCgpCiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUgKnN1cmZhY2VQb2ludGVyKQordm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmJpbmREZWZhdWx0U3VyZmFjZSgpCiB7Ci0gICAgQml0bWFwVGV4dHVyZUdM
KiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4oc3VyZmFjZVBvaW50ZXIp
OworICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZGF0YSgpLnRh
cmdldEZyYW1lQnVmZmVyKSk7CisgICAgSW50U2l6ZSB2aWV3cG9ydFNpemUoZGF0YSgpLnZpZXdw
b3J0WzJdLCBkYXRhKCkudmlld3BvcnRbM10pOworICAgIGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4
ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3cG9ydFNpemUsIGRhdGEoKS5QYWludEZsYWdz
ICYgUGFpbnRpbmdNaXJyb3JlZCk7CisgICAgR0xfQ01EKGdsVmlld3BvcnQoZGF0YSgpLnZpZXdw
b3J0WzBdLCBkYXRhKCkudmlld3BvcnRbMV0sIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9y
dFNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX2NsaXBTdGFjay5hcHBseSgpOworICAgIGRhdGEoKS5j
dXJyZW50U3VyZmFjZS5jbGVhcigpOworfQogCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmluZFN1
cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZSkKK3sKICAgICBpZiAoIXN1cmZhY2UpIHsKLSAg
ICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBkYXRhKCkudGFy
Z2V0RnJhbWVCdWZmZXIpKTsKLQotICAgICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZShkYXRhKCku
dmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSk7Ci0gICAgICAgIGNvbnN0IGJvb2wgbWly
b3JyZWQgPSBkYXRhKCkuUGFpbnRGbGFncyAmIFBhaW50aW5nTWlycm9yZWQ7Ci0gICAgICAgIGRh
dGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3cG9ydFNp
emUsIG1pcm9ycmVkKTsKLSAgICAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgdmlld3BvcnRT
aXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgICAgIGlmIChkYXRh
KCkuY3VycmVudFN1cmZhY2UpCi0gICAgICAgICAgICBlbmRDbGlwKCk7Ci0gICAgICAgIGRhdGEo
KS5jdXJyZW50U3VyZmFjZS5jbGVhcigpOworICAgICAgICBiaW5kRGVmYXVsdFN1cmZhY2UoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotCi0gICAgc3VyZmFjZS0+YmluZCgpOworICAgIHN0
YXRpY19jYXN0PEJpdG1hcFRleHR1cmVHTCo+KHN1cmZhY2UpLT5iaW5kKCk7CiAgICAgZGF0YSgp
LmN1cnJlbnRTdXJmYWNlID0gc3VyZmFjZTsKIH0KIApAQCAtNjIxLDE0ICs2MzIsMTQgQEAgYm9v
bCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1vZGVsVmlld01hdHIKICAgICBpZiAoIXF1YWQuaXNSZWN0aWxpbmVhcigpIHx8IHJl
Y3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBkYXRhKCkuc2hhcmVk
R0xEYXRhKCkuY2xpcFN0YXRlLnNjaXNzb3JCb3guaW50ZXJzZWN0KHJlY3QpOwotICAgIGRhdGEo
KS5zaGFyZWRHTERhdGEoKS5hcHBseUN1cnJlbnRDbGlwKCk7CisgICAgY2xpcFN0YWNrKCkuY3Vy
cmVudCgpLnNjaXNzb3JCb3guaW50ZXJzZWN0KHJlY3QpOworICAgIGNsaXBTdGFjaygpLmFwcGx5
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNs
aXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRSZWN0KQogewotICAgIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5wdXNoQ2xp
cFN0YXRlKCk7CisgICAgY2xpcFN0YWNrKCkucHVzaCgpOwogICAgIGlmIChiZWdpblNjaXNzb3JD
bGlwKG1vZGVsVmlld01hdHJpeCwgdGFyZ2V0UmVjdCkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NjYyLDcgKzY3Myw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAgICAgICAgIC0xLCAtMSwg
MCwgMQogICAgIH07CiAKLSAgICBpbnQmIHN0ZW5jaWxJbmRleCA9IGRhdGEoKS5zaGFyZWRHTERh
dGEoKS5jbGlwU3RhdGUuc3RlbmNpbEluZGV4OworICAgIGludCYgc3RlbmNpbEluZGV4ID0gY2xp
cFN0YWNrKCkuY3VycmVudCgpLnN0ZW5jaWxJbmRleDsKIAogICAgIEdMX0NNRChnbEVuYWJsZShH
TF9TVEVOQ0lMX1RFU1QpKTsKIApAQCAtNjg4LDEzICs2OTksMTMgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0
cml4LCBjb24KIAogICAgIC8vIEluY3JlYXNlIHN0ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3RlbmNp
bCB0ZXN0aW5nLgogICAgIHN0ZW5jaWxJbmRleCAqPSAyOwotICAgIGRhdGEoKS5zaGFyZWRHTERh
dGEoKS5hcHBseUN1cnJlbnRDbGlwKCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHkoKTsKIH0KIAog
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZENsaXAoKQogewotICAgIGRhdGEoKS5zaGFyZWRHTERh
dGEoKS5wb3BDbGlwU3RhdGUoKTsKLSAgICBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuYXBwbHlDdXJy
ZW50Q2xpcCgpOworICAgIGNsaXBTdGFjaygpLnBvcCgpOworICAgIGNsaXBTdGFjaygpLmFwcGx5
KCk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVh
dGVUZXh0dXJlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAxYzQxZDQzNzFjMjI4YzQ5NGQ4Mzkz
NWJjOGQzM2JiYjI4YWZkNTBiLi5kNmNjZWVkMTc2NzY1NzExYjhkOTc2NzVhMzIwMmY4NWM4MDRm
YTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCkBAIC02NiwxMCArNjYsMzYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgQWNjZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1
cm4gT3BlbkdMTW9kZTsgfQogCiBwcml2YXRlOgorCisgICAgc3RydWN0IENsaXBTdGF0ZSB7Cisg
ICAgICAgIEludFJlY3Qgc2Npc3NvckJveDsKKyAgICAgICAgaW50IHN0ZW5jaWxJbmRleDsKKyAg
ICAgICAgQ2xpcFN0YXRlKGNvbnN0IEludFJlY3QmIHNjaXNzb3JzID0gSW50UmVjdCgpLCBpbnQg
c3RlbmNpbCA9IDEpCisgICAgICAgICAgICA6IHNjaXNzb3JCb3goc2Npc3NvcnMpCisgICAgICAg
ICAgICAsIHN0ZW5jaWxJbmRleChzdGVuY2lsKQorICAgICAgICB7IH0KKyAgICB9OworCisgICAg
Y2xhc3MgQ2xpcFN0YWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgcHVzaCgpOworICAg
ICAgICB2b2lkIHBvcCgpOworICAgICAgICB2b2lkIGFwcGx5KCk7CisgICAgICAgIGlubGluZSBD
bGlwU3RhdGUmIGN1cnJlbnQoKSB7IHJldHVybiBjbGlwU3RhdGU7IH0KKyAgICAgICAgdm9pZCBp
bml0KGNvbnN0IEludFJlY3QmKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIENsaXBTdGF0ZSBj
bGlwU3RhdGU7CisgICAgICAgIFZlY3RvcjxDbGlwU3RhdGU+IGNsaXBTdGFjazsKKyAgICB9Owor
CiAgICAgYm9vbCBiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
Y29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBiaW5kRGVmYXVsdFN1cmZhY2UoKTsKKyAgICBD
bGlwU3RhY2smIGNsaXBTdGFjaygpOwogICAgIGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBk
YXRhKCkgeyByZXR1cm4gKm1fZGF0YTsgfQogICAgIFRleHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0
YTsKICAgICBHcmFwaGljc0NvbnRleHQqIG1fY29udGV4dDsKKyAgICBDbGlwU3RhY2sgbV9jbGlw
U3RhY2s7CiAgICAgZnJpZW5kIGNsYXNzIEJpdG1hcFRleHR1cmVHTDsKIH07CiAKQEAgLTk2LDE3
ICsxMjIsMjEgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fZGlydHlSZWN0OwogICAgIEdMdWlu
dCBtX2ZibzsKICAgICBHTHVpbnQgbV9yYm87Ci0gICAgYm9vbCBtX3N1cmZhY2VOZWVkc1Jlc2V0
OworICAgIGJvb2wgbV9zaG91bGRDbGVhcjsKICAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVy
ZU1hcHBlcjsKKyAgICBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjayBtX2NsaXBTdGFjazsKICAg
ICBCaXRtYXBUZXh0dXJlR0woKQogICAgICAgICA6IG1faWQoMCkKICAgICAgICAgLCBtX2Zibygw
KQogICAgICAgICAsIG1fcmJvKDApCi0gICAgICAgICwgbV9zdXJmYWNlTmVlZHNSZXNldCh0cnVl
KQorICAgICAgICAsIG1fc2hvdWxkQ2xlYXIodHJ1ZSkKICAgICAgICAgLCBtX3RleHR1cmVNYXBw
ZXIoMCkKICAgICB7CiAgICAgfQogCisgICAgdm9pZCBjbGVhcklmTmVlZGVkKCk7CisgICAgdm9p
ZCBjcmVhdGVGYm9JZk5lZWRlZCgpOworCiAgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJH
TDsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139289</attachid>
            <date>2012-04-27 15:26:01 -0700</date>
            <delta_ts>2012-04-28 10:26:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83691-20120427152558.patch</filename>
            <type>text/plain</type>
            <size>14623</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1Mzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjVmZGFkNjI3N2VkY2I4
NjFkMmNiMjhhN2Q1NjgwNzJhNmI1NmEzZS4uNDI4ZTBlOGJlODkyODkzNzdmYmFmODQ4MzUxNzc1
ZjNhOGVjZWVjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA0LTI3ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gRmFsbGluZyBsZWF2ZXMgZGVtbyBtaXNzaW5nIG9wYWNpdHkgZmFkZSBvdXQgYW5pbWF0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzY5MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBidWcg
b3JpZ2luYXRlZCBmcm9tIGNsZWFyaW5nIGFuIGludGVybWVkaWF0ZSBzdXJmYWNlIHdpdGggZ2xD
bGVhciB3aGlsZSB0aGUgc2Npc3NvcgorICAgICAgICBzdGF0ZSB3YXMgd3JvbmcuCisgICAgICAg
IFdoZW4gdXNpbmcgaW50ZXJtZWRpYXRlIHN1cmZhY2VzLCBtYWludGFpbiBhIGNsaXAtc3RhY2sg
Zm9yIGVhY2ggc3VyZmFjZSwgcmF0aGVyIHRoYW4KKyAgICAgICAgYSBzaW5nbGUgY2xpcC1zdGFj
ayBmb3IgdGhlIHdob2xlIHNjZW5lLiBXaGVuIGEgc3VyZmFjZSBpcyBib3VuZCwgaXRzIGNsaXAg
c3RhY2sgc2hvdWxkCisgICAgICAgIGJlIGFwcGxpZWQuCisKKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoU2hhcmVkR0xEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpwdXNoKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpDbGlwU3Rh
Y2s6OnBvcCk6CisgICAgICAgIChXZWJDb3JlOjpzY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpjbGlwU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpk
aWRSZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpjcmVhdGVGYm9JZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmJpbmQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiaW5kRGVmYXVsdFN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjplbmRDbGlwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoQ2xp
cFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YXRlOjpD
bGlwU3RhdGUpOgorICAgICAgICAoQ2xpcFN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpjdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpjbGVhcik6CisgICAgICAgIChCaXRtYXBUZXh0dXJlR0wp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpCaXRtYXBUZXh0dXJlR0wpOgor
CiAyMDEyLTA0LTE5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+
CiAKICAgICAgICAgW1F0XVtUZXhtYXBdIEVycm9yIG9mIGNyb3NzLWNvbXBpbGluZyB3ZWJraXQg
d2l0aCBRdCA0LjguMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCAwNTEwNzYyMTg2NDFjNmI1
ZGZlYTQyNDEyY2NhZjViMjNkNDAwMTA0Li5mZjNjOGFkNGFhOTM1NTAzZjJhOTRhOWE3MzU1NmIx
YzE4ZmNjODA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMTE2LDU1ICsxMTYsNyBAQCBz
dHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNoYXJlZEdMRGF0YShnZXRDdXJyZW50R0xDb250ZXh0KCkpKTsKICAgICAgICAgfQogCi0g
ICAgICAgIHN0cnVjdCBDbGlwU3RhdGUgewotICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yQm94
OwotICAgICAgICAgICAgaW50IHN0ZW5jaWxJbmRleDsKLSAgICAgICAgICAgIENsaXBTdGF0ZShj
b25zdCBJbnRSZWN0JiBzY2lzc29ycywgaW50IHN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgOiBz
Y2lzc29yQm94KHNjaXNzb3JzKQotICAgICAgICAgICAgICAgICwgc3RlbmNpbEluZGV4KHN0ZW5j
aWwpCi0gICAgICAgICAgICB7IH0KLQotICAgICAgICAgICAgQ2xpcFN0YXRlKCkKLSAgICAgICAg
ICAgICAgICA6IHN0ZW5jaWxJbmRleCgxKQotICAgICAgICAgICAgeyB9Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgQ2xpcFN0YXRlIGNsaXBTdGF0ZTsKLSAgICAgICAgVmVjdG9yPENsaXBTdGF0ZT4g
Y2xpcFN0YWNrOwotCi0gICAgICAgIHZvaWQgcHVzaENsaXBTdGF0ZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGNsaXBTdGFjay5hcHBlbmQoY2xpcFN0YXRlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgcG9wQ2xpcFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNsaXBT
dGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2xp
cFN0YXRlID0gY2xpcFN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgIGNsaXBTdGFjay5yZW1vdmVM
YXN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBzY2lzc29yQ2xpcChjb25z
dCBJbnRSZWN0JiByZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBHTGludCB2aWV3cG9y
dFs0XTsKLSAgICAgICAgICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3
cG9ydCkpOwotICAgICAgICAgICAgR0xfQ01EKGdsU2Npc3NvcihyZWN0LngoKSwgdmlld3BvcnRb
M10gLSByZWN0Lm1heFkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIGFwcGx5Q3VycmVudENsaXAoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzY2lzc29yQ2xpcChjbGlwU3RhdGUuc2Npc3NvckJveCk7Ci0gICAgICAgICAgICBHTF9D
TUQoZ2xTdGVuY2lsT3AoR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkpOwotICAgICAgICAgICAg
R0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfRVFVQUwsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAx
LCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSkpOwotICAgICAgICAgICAgaWYgKGNsaXBTdGF0
ZS5zdGVuY2lsSW5kZXggPT0gMSkKLSAgICAgICAgICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdM
X1NURU5DSUxfVEVTVCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEdMX0NN
RChnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsKLSAgICAgICAgfQogCiAgICAgICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCkBAIC0y
MTcsNiArMTY5LDQ3IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gY3VycmVudFN1cmZhY2U7CiB9OwogCit2b2lkIFRleHR1cmVNYXBwZXJH
TDo6Q2xpcFN0YWNrOjppbml0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgY2xpcFN0YWNr
LmNsZWFyKCk7CisgICAgY2xpcFN0YXRlID0gVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhdGUocmVj
dCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OnB1c2goKQoreworICAg
IGNsaXBTdGFjay5hcHBlbmQoY2xpcFN0YXRlKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6
OkNsaXBTdGFjazo6cG9wKCkKK3sKKyAgICBpZiAoY2xpcFN0YWNrLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGNsaXBTdGF0ZSA9IGNsaXBTdGFjay5sYXN0KCk7CisgICAgY2xpcFN0
YWNrLnJlbW92ZUxhc3QoKTsKK30KKworc3RhdGljIHZvaWQgc2Npc3NvckNsaXAoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEdMaW50IHZpZXdwb3J0WzRdOworICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1ZJ
RVdQT1JULCB2aWV3cG9ydCkpOworICAgIEdMX0NNRChnbFNjaXNzb3IocmVjdC54KCksIHZpZXdw
b3J0WzNdIC0gcmVjdC5tYXhZKCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOworfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjphcHBseSgpCit7CisgICAgc2Npc3Nv
ckNsaXAoY2xpcFN0YXRlLnNjaXNzb3JCb3gpOworICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9L
RUVQLCBHTF9LRUVQLCBHTF9LRUVQKSk7CisgICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfRVFV
QUwsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0g
MSkpOworICAgIGlmIChjbGlwU3RhdGUuc3RlbmNpbEluZGV4ID09IDEpCisgICAgICAgIEdMX0NN
RChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgZWxzZQorICAgICAgICBHTF9DTUQo
Z2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSk7Cit9CisKKwogdm9pZCBUZXh0dXJlTWFwcGVyR0xE
YXRhOjppbml0aWFsaXplU3RlbmNpbCgpCiB7CiAgICAgaWYgKGN1cnJlbnRTdXJmYWNlKSB7CkBA
IC0yNDYsNiArMjM5LDExIEBAIFRleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKIHsK
IH0KIAorVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2smIFRleHR1cmVNYXBwZXJHTDo6Y2xpcFN0
YWNrKCkKK3sKKyAgICByZXR1cm4gZGF0YSgpLmN1cnJlbnRTdXJmYWNlID8gdG9CaXRtYXBUZXh0
dXJlR0woZGF0YSgpLmN1cnJlbnRTdXJmYWNlLmdldCgpKS0+bV9jbGlwU3RhY2sgOiBtX2NsaXBT
dGFjazsKK30KKwogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFn
cyBmbGFncykKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBHTCBlcnJvciBjb2RlIHN0YXlz
IGZyb20gcHJldmlvdXMgb3BlcmF0aW9ucy4KQEAgLTI1OCw2ICsyNTYsNyBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyhQYWludEZsYWdzIGZsYWdzKQogICAgIGRhdGEoKS5w
cmV2aW91c1NjaXNzb3JTdGF0ZSA9IGdsSXNFbmFibGVkKEdMX1NDSVNTT1JfVEVTVCk7CiAgICAg
ZGF0YSgpLnByZXZpb3VzRGVwdGhTdGF0ZSA9IGdsSXNFbmFibGVkKEdMX0RFUFRIX1RFU1QpOwog
ICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKKyAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RF
U1QpOwogI2lmIFBMQVRGT1JNKFFUKQogICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAgICAgUVBh
aW50ZXIqIHBhaW50ZXIgPSBtX2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwpAQCAtMjY5LDkg
KzI2OCw5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKFBhaW50RmxhZ3Mg
ZmxhZ3MpCiAgICAgR0xfQ01EKGdsRGVwdGhNYXNrKDApKTsKICAgICBHTF9DTUQoZ2xHZXRJbnRl
Z2VydihHTF9WSUVXUE9SVCwgZGF0YSgpLnZpZXdwb3J0KSk7CiAgICAgR0xfQ01EKGdsR2V0SW50
ZWdlcnYoR0xfU0NJU1NPUl9CT1gsIGRhdGEoKS5wcmV2aW91c1NjaXNzb3IpKTsKLSAgICBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YXRlLnN0ZW5jaWxJbmRleCA9IDE7Ci0gICAgZGF0YSgp
LnNoYXJlZEdMRGF0YSgpLmNsaXBTdGF0ZS5zY2lzc29yQm94ID0gSW50UmVjdCgwLCAwLCBkYXRh
KCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSk7CiAgICAgZ2xHZXRJbnRlZ2VydihH
TF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKKyAgICBt
X2NsaXBTdGFjay5pbml0KEludFJlY3QoMCwgMCwgZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCku
dmlld3BvcnRbM10pKTsKKyAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9C
SU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKSk7CiAgICAgZGF0YSgpLlBhaW50Rmxh
Z3MgPSBmbGFnczsKICAgICBiaW5kU3VyZmFjZSgwKTsKIH0KQEAgLTMxMSw3ICszMTAsNyBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4
dHVyZSwgY29uc3QgRmxvYXRSZWN0JgogICAgIGlmICghdGV4dHVyZS5pc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YXRlLnNj
aXNzb3JCb3guaXNFbXB0eSgpKQorICAgIGlmIChjbGlwU3RhY2soKS5jdXJyZW50KCkuc2Npc3Nv
ckJveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IEJpdG1hcFRleHR1
cmVHTCYgdGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4odGV4
dHVyZSk7CkBAIC00MjIsNyArNDIxLDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0
KCkKICAgICBpZiAoIW1faWQpCiAgICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZtX2lk
KSk7CiAKLSAgICBtX3N1cmZhY2VOZWVkc1Jlc2V0ID0gdHJ1ZTsKKyAgICBtX3Nob3VsZENsZWFy
ID0gdHJ1ZTsKICAgICBpZiAobV90ZXh0dXJlU2l6ZSA9PSBjb250ZW50U2l6ZSgpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTUzNSwyNCArNTM0LDM4IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpp
bml0aWFsaXplU3RlbmNpbCgpCiAgICAgR0xfQ01EKGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJf
QklUKSk7CiB9CiAKLXZvaWQgQml0bWFwVGV4dHVyZUdMOjpiaW5kKCkKK3ZvaWQgQml0bWFwVGV4
dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKIHsKLSAgICBpZiAobV9zdXJmYWNlTmVlZHNSZXNldCB8
fCAhbV9mYm8pIHsKLSAgICAgICAgaWYgKCFtX2ZibykKLSAgICAgICAgICAgIEdMX0NNRChnbEdl
bkZyYW1lYnVmZmVycygxLCAmbV9mYm8pKTsKLSAgICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2ZibykpOwotICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCAwKSk7Ci0gICAgICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwg
aWQoKSwgMCkpOwotICAgICAgICBHTF9DTUQoZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKLSAg
ICAgICAgR0xfQ01EKGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCkpOwotICAgICAgICBtX3N1
cmZhY2VOZWVkc1Jlc2V0ID0gZmFsc2U7Ci0gICAgfSBlbHNlCi0gICAgICAgIEdMX0NNRChnbEJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pKTsKKyAgICBpZiAoIW1fc2hvdWxk
Q2xlYXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpcFN0YWNrLmluaXQoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBtX3RleHR1cmVTaXplKSk7CisgICAgbV9jbGlwU3RhY2suYXBwbHko
KTsKKyAgICBHTF9DTUQoZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKKyAgICBHTF9DTUQoZ2xD
bGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKSk7CisgICAgbV9zaG91bGRDbGVhciA9IGZhbHNlOwor
fQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJvSWZOZWVkZWQoKQoreworICAgIGlm
IChtX2ZibykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwg
c2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpOwotICAgIGNvbnN0IGJvb2wgbWlycm9y
ZWQgPSB0cnVlOwotICAgIG1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLnByb2plY3Rpb25NYXRyaXgg
PSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHNpemUoKSwgbWlycm9yZWQpOwotICAgIG1fdGV4dHVy
ZU1hcHBlci0+YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIEZsb2F0UmVjdChJbnRQ
b2ludDo6emVybygpLCBjb250ZW50U2l6ZSgpKSk7CisgICAgR0xfQ01EKGdsR2VuRnJhbWVidWZm
ZXJzKDEsICZtX2ZibykpOworICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgbV9mYm8pKTsKKyAgICBHTF9DTUQoZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFN
RUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIGlkKCksIDApKTsK
KyAgICBtX3Nob3VsZENsZWFyID0gdHJ1ZTsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJp
bmQoKQoreworICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApKTsKKyAg
ICBjcmVhdGVGYm9JZk5lZWRlZCgpOworICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgbV9mYm8pKTsKKyAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBtX3RleHR1
cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjbGVhcklmTmVl
ZGVkKCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNy
ZWF0ZVByb2plY3Rpb25NYXRyaXgobV90ZXh0dXJlU2l6ZSwgdHJ1ZSAvKiBtaXJyb3JlZCAqLyk7
CisgICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKIH0KIAogQml0bWFwVGV4dHVyZUdMOjp+Qml0bWFw
VGV4dHVyZUdMKCkKQEAgLTU4MiwzMyArNTk1LDI5IEBAIFRleHR1cmVNYXBwZXJHTDo6flRleHR1
cmVNYXBwZXJHTCgpCiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUgKnN1cmZhY2VQb2ludGVyKQordm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmJpbmREZWZhdWx0U3VyZmFjZSgpCiB7Ci0gICAgQml0bWFwVGV4dHVyZUdM
KiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4oc3VyZmFjZVBvaW50ZXIp
OworICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZGF0YSgpLnRh
cmdldEZyYW1lQnVmZmVyKSk7CisgICAgSW50U2l6ZSB2aWV3cG9ydFNpemUoZGF0YSgpLnZpZXdw
b3J0WzJdLCBkYXRhKCkudmlld3BvcnRbM10pOworICAgIGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4
ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3cG9ydFNpemUsIGRhdGEoKS5QYWludEZsYWdz
ICYgUGFpbnRpbmdNaXJyb3JlZCk7CisgICAgR0xfQ01EKGdsVmlld3BvcnQoZGF0YSgpLnZpZXdw
b3J0WzBdLCBkYXRhKCkudmlld3BvcnRbMV0sIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9y
dFNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX2NsaXBTdGFjay5hcHBseSgpOworICAgIGRhdGEoKS5j
dXJyZW50U3VyZmFjZS5jbGVhcigpOworfQogCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmluZFN1
cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZSkKK3sKICAgICBpZiAoIXN1cmZhY2UpIHsKLSAg
ICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBkYXRhKCkudGFy
Z2V0RnJhbWVCdWZmZXIpKTsKLQotICAgICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZShkYXRhKCku
dmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSk7Ci0gICAgICAgIGNvbnN0IGJvb2wgbWly
b3JyZWQgPSBkYXRhKCkuUGFpbnRGbGFncyAmIFBhaW50aW5nTWlycm9yZWQ7Ci0gICAgICAgIGRh
dGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3cG9ydFNp
emUsIG1pcm9ycmVkKTsKLSAgICAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgdmlld3BvcnRT
aXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgICAgIGlmIChkYXRh
KCkuY3VycmVudFN1cmZhY2UpCi0gICAgICAgICAgICBlbmRDbGlwKCk7Ci0gICAgICAgIGRhdGEo
KS5jdXJyZW50U3VyZmFjZS5jbGVhcigpOworICAgICAgICBiaW5kRGVmYXVsdFN1cmZhY2UoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotCi0gICAgc3VyZmFjZS0+YmluZCgpOworICAgIHN0
YXRpY19jYXN0PEJpdG1hcFRleHR1cmVHTCo+KHN1cmZhY2UpLT5iaW5kKCk7CiAgICAgZGF0YSgp
LmN1cnJlbnRTdXJmYWNlID0gc3VyZmFjZTsKIH0KIAogYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmJl
Z2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJp
eCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0KQogewotICAgIGdsRW5hYmxlKEdMX1NDSVNT
T1JfVEVTVCk7Ci0KICAgICAvLyAzRCB0cmFuc2Zvcm1zIGFyZSBjdXJyZW50bHkgbm90IHN1cHBv
cnRlZCBpbiBzY2lzc29yIGNsaXBwaW5nCiAgICAgLy8gcmVzdWx0aW5nIGluIGNyb3BwZWQgc3Vy
ZmFjZXMgd2hlbiB6PjAuCiAgICAgaWYgKCFtb2RlbFZpZXdNYXRyaXguaXNBZmZpbmUoKSkKQEAg
LTYyMSwxNCArNjMwLDE0IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpiZWdpblNjaXNzb3JDbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyCiAgICAgaWYgKCFxdWFk
LmlzUmVjdGlsaW5lYXIoKSB8fCByZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmNsaXBTdGF0ZS5zY2lzc29yQm94LmludGVy
c2VjdChyZWN0KTsKLSAgICBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuYXBwbHlDdXJyZW50Q2xpcCgp
OworICAgIGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94LmludGVyc2VjdChyZWN0KTsK
KyAgICBjbGlwU3RhY2soKS5hcHBseSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkKIHsKLSAgICBkYXRhKCku
c2hhcmVkR0xEYXRhKCkucHVzaENsaXBTdGF0ZSgpOworICAgIGNsaXBTdGFjaygpLnB1c2goKTsK
ICAgICBpZiAoYmVnaW5TY2lzc29yQ2xpcChtb2RlbFZpZXdNYXRyaXgsIHRhcmdldFJlY3QpKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTY2Miw3ICs2NzEsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgs
IGNvbgogICAgICAgICAtMSwgLTEsIDAsIDEKICAgICB9OwogCi0gICAgaW50JiBzdGVuY2lsSW5k
ZXggPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YXRlLnN0ZW5jaWxJbmRleDsKKyAgICBp
bnQmIHN0ZW5jaWxJbmRleCA9IGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zdGVuY2lsSW5kZXg7CiAK
ICAgICBHTF9DTUQoZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSk7CiAKQEAgLTY4OCwxMyArNjk3
LDEzIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICAvLyBJbmNyZWFzZSBzdGVuY2ls
SW5kZXggYW5kIGFwcGx5IHN0ZW5jaWwgdGVzdGluZy4KICAgICBzdGVuY2lsSW5kZXggKj0gMjsK
LSAgICBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuYXBwbHlDdXJyZW50Q2xpcCgpOworICAgIGNsaXBT
dGFjaygpLmFwcGx5KCk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRDbGlwKCkKIHsK
LSAgICBkYXRhKCkuc2hhcmVkR0xEYXRhKCkucG9wQ2xpcFN0YXRlKCk7Ci0gICAgZGF0YSgpLnNo
YXJlZEdMRGF0YSgpLmFwcGx5Q3VycmVudENsaXAoKTsKKyAgICBjbGlwU3RhY2soKS5wb3AoKTsK
KyAgICBjbGlwU3RhY2soKS5hcHBseSgpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+
IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKaW5kZXgg
MWM0MWQ0MzcxYzIyOGM0OTRkODM5MzViYzhkMzNiYmIyOGFmZDUwYi4uZDZjY2VlZDE3Njc2NTcx
MWI4ZDk3Njc1YTMyMDJmODVjODA0ZmE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtNjYsMTAg
KzY2LDM2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEFjY2VsZXJhdGlvbk1vZGUgYWNjZWxlcmF0
aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIE9wZW5HTE1vZGU7IH0KIAogcHJpdmF0ZToKKworICAg
IHN0cnVjdCBDbGlwU3RhdGUgeworICAgICAgICBJbnRSZWN0IHNjaXNzb3JCb3g7CisgICAgICAg
IGludCBzdGVuY2lsSW5kZXg7CisgICAgICAgIENsaXBTdGF0ZShjb25zdCBJbnRSZWN0JiBzY2lz
c29ycyA9IEludFJlY3QoKSwgaW50IHN0ZW5jaWwgPSAxKQorICAgICAgICAgICAgOiBzY2lzc29y
Qm94KHNjaXNzb3JzKQorICAgICAgICAgICAgLCBzdGVuY2lsSW5kZXgoc3RlbmNpbCkKKyAgICAg
ICAgeyB9CisgICAgfTsKKworICAgIGNsYXNzIENsaXBTdGFjayB7CisgICAgcHVibGljOgorICAg
ICAgICB2b2lkIHB1c2goKTsKKyAgICAgICAgdm9pZCBwb3AoKTsKKyAgICAgICAgdm9pZCBhcHBs
eSgpOworICAgICAgICBpbmxpbmUgQ2xpcFN0YXRlJiBjdXJyZW50KCkgeyByZXR1cm4gY2xpcFN0
YXRlOyB9CisgICAgICAgIHZvaWQgaW5pdChjb25zdCBJbnRSZWN0Jik7CisKKyAgICBwcml2YXRl
OgorICAgICAgICBDbGlwU3RhdGUgY2xpcFN0YXRlOworICAgICAgICBWZWN0b3I8Q2xpcFN0YXRl
PiBjbGlwU3RhY2s7CisgICAgfTsKKwogICAgIGJvb2wgYmVnaW5TY2lzc29yQ2xpcChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgYmluZERl
ZmF1bHRTdXJmYWNlKCk7CisgICAgQ2xpcFN0YWNrJiBjbGlwU3RhY2soKTsKICAgICBpbmxpbmUg
VGV4dHVyZU1hcHBlckdMRGF0YSYgZGF0YSgpIHsgcmV0dXJuICptX2RhdGE7IH0KICAgICBUZXh0
dXJlTWFwcGVyR0xEYXRhKiBtX2RhdGE7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7
CisgICAgQ2xpcFN0YWNrIG1fY2xpcFN0YWNrOwogICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBUZXh0
dXJlR0w7CiB9OwogCkBAIC05NiwxNyArMTIyLDIxIEBAIHByaXZhdGU6CiAgICAgSW50UmVjdCBt
X2RpcnR5UmVjdDsKICAgICBHTHVpbnQgbV9mYm87CiAgICAgR0x1aW50IG1fcmJvOwotICAgIGJv
b2wgbV9zdXJmYWNlTmVlZHNSZXNldDsKKyAgICBib29sIG1fc2hvdWxkQ2xlYXI7CiAgICAgVGV4
dHVyZU1hcHBlckdMKiBtX3RleHR1cmVNYXBwZXI7CisgICAgVGV4dHVyZU1hcHBlckdMOjpDbGlw
U3RhY2sgbV9jbGlwU3RhY2s7CiAgICAgQml0bWFwVGV4dHVyZUdMKCkKICAgICAgICAgOiBtX2lk
KDApCiAgICAgICAgICwgbV9mYm8oMCkKICAgICAgICAgLCBtX3JibygwKQotICAgICAgICAsIG1f
c3VyZmFjZU5lZWRzUmVzZXQodHJ1ZSkKKyAgICAgICAgLCBtX3Nob3VsZENsZWFyKHRydWUpCiAg
ICAgICAgICwgbV90ZXh0dXJlTWFwcGVyKDApCiAgICAgewogICAgIH0KIAorICAgIHZvaWQgY2xl
YXJJZk5lZWRlZCgpOworICAgIHZvaWQgY3JlYXRlRmJvSWZOZWVkZWQoKTsKKwogICAgIGZyaWVu
ZCBjbGFzcyBUZXh0dXJlTWFwcGVyR0w7CiB9OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>