<?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>90655</bug_id>
          
          <creation_ts>2012-07-05 21:18:19 -0700</creation_ts>
          <short_desc>Refactor RenderSVGShape bounding box code</short_desc>
          <delta_ts>2012-07-13 07:15:54 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>88231</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Philip Rogers">pdr</reporter>
          <assigned_to name="Philip Rogers">pdr</assigned_to>
          <cc>eric</cc>
    
    <cc>krit</cc>
    
    <cc>schenney</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>663863</commentid>
    <comment_count>0</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-07-05 21:18:19 -0700</bug_when>
    <thetext>RenderSVGShape::StrokeBoundingBox works differently than RenderSVGShape::ObjectBoundingBox by returning a cached value (m_strokeAndMarkerBoundingBox) instead of computing the current value. For understandability this should probably be refactored so that they work similarly.

Furthermore, a goal of https://bugs.webkit.org/show_bug.cgi?id=88231 is to move the marker and zero-length subpath code that is specific to RenderSVGPath out of RenderSVGShape. This refactoring will aid in that goal by allowing a subclass (RenderSVGPath) to simply override StrokeBoundingBox() and include the marker/zero-length-subpath code there.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663869</commentid>
    <comment_count>1</comment_count>
      <attachid>151017</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-07-05 21:28:27 -0700</bug_when>
    <thetext>Created attachment 151017
Refactor RenderSVGShape::strokeBoundingBox</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664327</commentid>
    <comment_count>2</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-07-06 19:40:08 -0700</bug_when>
    <thetext>While this patch is only a little exciting on its own, check out what it enables: https://bugs.webkit.org/show_bug.cgi?id=90716 :)
Similarly, we will be able to extract the marker code out of RenderSVGShape and into RenderSVGPath.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664500</commentid>
    <comment_count>3</comment_count>
      <attachid>151017</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-07-08 15:13:38 -0700</bug_when>
    <thetext>Comment on attachment 151017
Refactor RenderSVGShape::strokeBoundingBox

In theory that makes things like filters slower that query the strokeBoundingBox(). Previously the cached values was returned, now you&apos;re recomputing every time.
Did you consider this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667195</commentid>
    <comment_count>4</comment_count>
      <attachid>151812</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-07-11 16:19:51 -0700</bug_when>
    <thetext>Created attachment 151812
Update per reviewer comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667200</commentid>
    <comment_count>5</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-07-11 16:27:19 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 151017 [details])
&gt; In theory that makes things like filters slower that query the strokeBoundingBox(). Previously the cached values was returned, now you&apos;re recomputing every time.
&gt; Did you consider this?

I was completely missing the bigger picture here... thanks for flagging this!

Turns out the other instances of objectBoundingBox return cached values (e.g., RenderSVGRoot.h, RenderSVGImage.h). In this updated patch I&apos;ve done the exact opposite from how I started... converting objectBoundingBox to return cached values.

I also took a hint from your large refactor and reused the bounding box variables from RenderSVGShape in RenderSVGRect and RenderSVGEllipse... saving those extra variables hanging off each instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667480</commentid>
    <comment_count>6</comment_count>
      <attachid>151812</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-07-12 00:56:11 -0700</bug_when>
    <thetext>Comment on attachment 151812
Update per reviewer comments

Great! I&apos;ve chosen a similar approach in my svg2 branch, except that strokeBoundingBox() is fully gone for me. r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667492</commentid>
    <comment_count>7</comment_count>
      <attachid>151812</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-12 01:10:41 -0700</bug_when>
    <thetext>Comment on attachment 151812
Update per reviewer comments

Clearing flags on attachment: 151812

Committed r122424: &lt;http://trac.webkit.org/changeset/122424&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667493</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-12 01:10:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668995</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-07-13 07:15:54 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 151812 [details])
&gt; Great! I&apos;ve chosen a similar approach in my svg2 branch, except that strokeBoundingBox() is fully gone for me. r=me!

You don&apos;t need to remove it completely, since it will be part of SVG2 again. getStrokeBBox() will be a new method [1]. It just will get a new task.

[1] https://svgwg.org/svg2-draft/types.html#__svg__SVGLocatable__getStrokeBBox</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151017</attachid>
            <date>2012-07-05 21:28:27 -0700</date>
            <delta_ts>2012-07-11 16:31:26 -0700</delta_ts>
            <desc>Refactor RenderSVGShape::strokeBoundingBox</desc>
            <filename>90655.1.patch</filename>
            <type>text/plain</type>
            <size>8099</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTk0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA3LTA1ICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgUmVuZGVyU1ZHU2hh
cGU6OnN0cm9rZUJvdW5kaW5nQm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MDY1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlbmRlclNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCB3b3JrZWQgZGlm
ZmVyZW50bHkgdGhhbiBSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3gKKyAgICAgICAg
YnkgcmV0dXJuaW5nIGEgY2FjaGVkIHZhbHVlIChtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94
KSBpbnN0ZWFkIG9mIGNvbXB1dGluZyB0aGUgY3VycmVudAorICAgICAgICB2YWx1ZS4gRm9yIHVu
ZGVyc3RhbmRhYmlsaXR5LCBzdHJva2VCb3VuZGluZ0JveCBoYXMgYmVlbiBtYWRlIHRvIHdvcmsg
bGlrZSBvYmplY3RCb3VuZGluZ0JveAorICAgICAgICBieSBub3QgcmV0dXJuaW5nIGEgY2FjaGVk
IHZhbHVlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBtZXJnZXMgaW5mbGF0ZVdpdGhTdHJv
a2VBbmRNYXJrZXJCb3VuZHMgaW50byBzdHJva2VCb3VuZGluZ0JveCBzbyB0aGF0CisgICAgICAg
IHN1YmNsYXNzZXMgdGhhdCBvdmVycmlkZSBzdHJva2VCb3VuZGluZ0JveCAoZS5nLiwgUmVuZGVy
U1ZHRWxsaXBzZSkgYXJlIG5vdyBhYmxlIHRvIHNraXAKKyAgICAgICAgc29tZSBtYXJrZXIgYW5k
IHplcm8tbGVuZ3RoLXN1YnBhdGggY29kZXBhdGhzIHRoYXQgbmV2ZXIgYXBwbHkgdG8gdGhlbS4K
KworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVtb3ZlcyBzZXRTdHJva2VBbmRNYXJrZXJCb3Vu
ZGluZ0JveCB0aGF0IHdhcyBwcmV2aW91c2x5IGRlYWQgY29kZS4KKworICAgICAgICBObyBuZXcg
dGVzdHMsIGp1c3QgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om9iamVj
dEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpzdHJva2VDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdTaGFwZS5oOgorICAgICAgICAoUmVuZGVyU1ZHU2hhcGUpOgorCiAyMDEyLTA3LTA1
ICBEb25nd29vIEltICA8ZHcuaW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gVW5yZXZp
ZXdlZCwgRml4IGJ1aWxkIGJyZWFrIHdoZW4gV0VCX0FVRElPIGlzIGVuYWJsZWQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAkocmV2
aXNpb24gMTIxNzMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdT
aGFwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDM4IEBAIHZvaWQgUmVuZGVyU1ZH
U2hhcGU6OmZpbGxTaGFwZShHcmFwaGljc0MKIAogRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpv
YmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGF0aC0+ZmFzdEJvdW5k
aW5nUmVjdCgpOworICAgIHJldHVybiBwYXRoKCkuZmFzdEJvdW5kaW5nUmVjdCgpOworfQorCitG
bG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9wYXRoKTsKKyAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3g7CisKKyAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwor
ICAgIGlmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkpIHsKKyAgICAgICAgQm91bmRpbmdSZWN0U3Ry
b2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOworICAgICAgICBpZiAo
aGFzTm9uU2NhbGluZ1N0cm9rZSgpKSB7CisgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbm9u
U2NhbGluZ1RyYW5zZm9ybSA9IG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0oKTsKKyAgICAgICAg
ICAgIGlmIChub25TY2FsaW5nVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgICAgICAg
ICAgICAgUGF0aCogdXNlUGF0aCA9IG5vblNjYWxpbmdTdHJva2VQYXRoKG1fcGF0aC5nZXQoKSwg
bm9uU2NhbGluZ1RyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHN0cm9rZUJv
dW5kaW5nUmVjdCA9IHVzZVBhdGgtPnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpOwor
ICAgICAgICAgICAgICAgIHN0cm9rZUJvdW5kaW5nUmVjdCA9IG5vblNjYWxpbmdUcmFuc2Zvcm0u
aW52ZXJzZSgpLm1hcFJlY3Qoc3Ryb2tlQm91bmRpbmdSZWN0KTsKKyAgICAgICAgICAgICAgICBz
dHJva2VCb3VuZGluZ0JveC51bml0ZShzdHJva2VCb3VuZGluZ1JlY3QpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKHBh
dGgoKS5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0eWxlKSk7CisKKyAgICAgICAgLy8gRklY
TUU6IHplcm8tbGVuZ3RoIHN1YnBhdGhzIGRvIG5vdCByZXNwZWN0IHZlY3Rvci1lZmZlY3QgPSBu
b24tc2NhbGluZy1zdHJva2UuCisgICAgICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ry
b2tlV2lkdGgoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3plcm9MZW5ndGhM
aW5lY2FwTG9jYXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdC
b3gudW5pdGUoemVyb0xlbmd0aFN1YnBhdGhSZWN0KG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlv
bnNbaV0sIHN0cm9rZVdpZHRoKSk7CisgICAgfQorCisgICAgaWYgKCFtX21hcmtlclBvc2l0aW9u
cy5pc0VtcHR5KCkpCisgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKG1hcmtlclJlY3Qo
c3Ryb2tlV2lkdGgoKSkpOworCisgICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94OwogfQogCiB2
b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
IGNvbnN0CkBAIC0xMzMsNyArMTY0LDcgQEAgYm9vbCBSZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRh
aW5zKGNvbnN0IAogCiBib29sIFJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWlucyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkKIHsKLSAgICBpZiAoIXN0cm9r
ZUJvdW5kaW5nQm94KCkuY29udGFpbnMocG9pbnQpKQorICAgIGlmICghbV9zdHJva2VCb3VuZGlu
Z0JveC5jb250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIENvbG9y
IGZhbGxiYWNrQ29sb3I7CkBAIC00NTMsMjYgKzQ4NCwyMCBAQCB2b2lkIFJlbmRlclNWR1NoYXBl
Ojp1cGRhdGVDYWNoZWRCb3VuZGFyCiB7CiAgICAgaWYgKGlzRW1wdHkoKSkgewogICAgICAgICBt
X2ZpbGxCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3N0cm9rZUFuZE1hcmtl
ckJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIG1fc3Ryb2tlQm91bmRpbmdCb3gg
PSBGbG9hdFJlY3QoKTsKICAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3Qo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIGZp
bGwgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzCisgICAg
Ly8gQ2FjaGUgX3VuY2xpcHBlZF8gZmlsbCBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0
aW9ucyBpbiByZXNvdXJjZXMuCiAgICAgbV9maWxsQm91bmRpbmdCb3ggPSBvYmplY3RCb3VuZGlu
Z0JveCgpOwogCi0gICAgLy8gQWRkIHplcm8tbGVuZ3RoIHN1Yi1wYXRoIGxpbmVjYXBzIHRvIHRo
ZSBmaWxsIGJveAotICAgIC8vIEZJWE1FOiB6ZXJvLWxlbmd0aCBzdWJwYXRocyBkbyBub3QgcmVz
cGVjdCB2ZWN0b3ItZWZmZWN0ID0gbm9uLXNjYWxpbmctc3Ryb2tlLgotICAgIGZsb2F0IHN0cm9r
ZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZmls
bEJvdW5kaW5nQm94LnVuaXRlKHplcm9MZW5ndGhTdWJwYXRoUmVjdChtX3plcm9MZW5ndGhMaW5l
Y2FwTG9jYXRpb25zW2ldLCBzdHJva2VXaWR0aCkpOworICAgIC8vIENhY2hlIF91bmNsaXBwZWRf
IHN0cm9rZSBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMg
KGluY2x1ZGVzIG1hcmtlciBib3VuZGFyaWVzKS4KKyAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0g
bV9maWxsQm91bmRpbmdCb3g7CisgICAgbV9zdHJva2VCb3VuZGluZ0JveC51bml0ZShzdHJva2VC
b3VuZGluZ0JveCgpKTsKIAotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGlu
ZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtl
ciBib3VuZGFyaWVzKQotICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxC
b3VuZGluZ0JveDsKLSAgICBpZiAoaGFzUGF0aCgpKQotICAgICAgICBpbmZsYXRlV2l0aFN0cm9r
ZUFuZE1hcmtlckJvdW5kcygpOwotICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFp
bnQgcmVjdGFuZ2xlCi0gICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBzdHJva2VCb3VuZGluZ0Jv
eCgpOworICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVwYWludCByZWN0
LgorICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VCb3VuZGluZ0JveDsKICAgICBT
VkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywg
bV9yZXBhaW50Qm91bmRpbmdCb3gpOwogfQogCkBAIC00ODMsMjggKzUwOCw2IEBAIGZsb2F0IFJl
bmRlclNWR1NoYXBlOjpzdHJva2VXaWR0aCgpIGNvbnMKICAgICByZXR1cm4gc3R5bGUoKS0+c3Zn
U3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShsZW5ndGhDb250ZXh0KTsKIH0KIAotdm9pZCBS
ZW5kZXJTVkdTaGFwZTo6aW5mbGF0ZVdpdGhTdHJva2VBbmRNYXJrZXJCb3VuZHMoKQotewotICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0g
ICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBCb3VuZGluZ1JlY3RTdHJv
a2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7Ci0KLSAgICAgICAgLy8g
U1ZHMS4yIFRpbnkgb25seSBkZWZpbmVzIG5vbiBzY2FsaW5nIHN0cm9rZSBmb3IgdGhlIHN0cm9r
ZSBidXQgbm90IG1hcmtlcnMuCi0gICAgICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkpIHsK
LSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nVHJhbnNmb3JtID0gbm9uU2Nh
bGluZ1N0cm9rZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgaWYgKG5vblNjYWxpbmdUcmFuc2Zv
cm0uaXNJbnZlcnRpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBQYXRoKiB1c2VQYXRoID0gbm9u
U2NhbGluZ1N0cm9rZVBhdGgobV9wYXRoLmdldCgpLCBub25TY2FsaW5nVHJhbnNmb3JtKTsKLSAg
ICAgICAgICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdSZWN0ID0gdXNlUGF0aC0+c3Ry
b2tlQm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSk7Ci0gICAgICAgICAgICAgICAgc3Ryb2tlQm91
bmRpbmdSZWN0ID0gbm9uU2NhbGluZ1RyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChzdHJva2VC
b3VuZGluZ1JlY3QpOwotICAgICAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdC
b3gudW5pdGUoc3Ryb2tlQm91bmRpbmdSZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LnVuaXRlKHBhdGgo
KS5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0eWxlKSk7Ci0gICAgfQotICAgIGlmICghbV9t
YXJrZXJQb3NpdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5k
aW5nQm94LnVuaXRlKG1hcmtlclJlY3Qoc3Ryb2tlV2lkdGgoKSkpOwotfQotCiB2b2lkIFJlbmRl
clNWR1NoYXBlOjpkcmF3TWFya2VycyhQYWludEluZm8mIHBhaW50SW5mbykKIHsKICAgICBBU1NF
UlQoIW1fbWFya2VyUG9zaXRpb25zLmlzRW1wdHkoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCShyZXZpc2lvbiAxMjE3MzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDggKzg3LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVT
aGFwZSgpOwogICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBG
bG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQW5kTWFya2VyQm91
bmRpbmdCb3g7IH0KLSAgICB2b2lkIHNldFN0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94KEZsb2F0
UmVjdCByZWN0KSB7IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSByZWN0OyB9CisgICAg
dmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgc2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSkgY29uc3Q7CiAgICAgZmxvYXQgc3Ryb2tlV2lkdGgo
KSBjb25zdDsKQEAgLTEzMywxMiArMTMyLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdHJva2VQ
YXRoKFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiwgUGF0aCosIFJlbmRlclNWR1Jlc291
cmNlKiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29sb3ImLCBpbnQpOwogICAgIHZvaWQg
ZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgdm9pZCBpbmZsYXRlV2l0
aFN0cm9rZUFuZE1hcmtlckJvdW5kcygpOwogICAgIHZvaWQgZHJhd01hcmtlcnMoUGFpbnRJbmZv
Jik7CiAKIHByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5kaW5nQm94OwotICAgIEZs
b2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3N0
cm9rZUJvdW5kaW5nQm94OwogICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsKICAgICBPd25QdHI8UGF0aD4gbV9w
YXRoOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151812</attachid>
            <date>2012-07-11 16:19:51 -0700</date>
            <delta_ts>2012-07-12 01:10:41 -0700</delta_ts>
            <desc>Update per reviewer comments</desc>
            <filename>90655.2.patch</filename>
            <type>text/plain</type>
            <size>22323</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjM4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDEyLTA3LTExICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgUmVuZGVyU1ZHU2hh
cGUgYm91bmRpbmcgYm94IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTkwNjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJvdW5kaW5nQm94IHdvcmtlZCBkaWZm
ZXJlbnRseSB0aGFuIFJlbmRlclNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCBieQorICAgICAg
ICBub3QgY2FjaGluZyB0aGUgb2JqZWN0IGJvdW5kaW5nIGJveCBhbmQgaW5zdGVhZCBjb21wdXRp
bmcgaXQgb24gZWFjaCBjYWxsLiBGb3IgY29uc2lzdGVuY3kgYW5kCisgICAgICAgIHBlcmZvcm1h
bmNlIG9iamVjdEJvdW5kaW5nQm94IGhhcyBiZWVuIHJlZmFjdG9yZWQgdG8gcmV0dXJuIGEgY2Fj
aGVkIHZhbHVlLgorCisgICAgICAgIGNyZWF0ZVNoYXBlIGhhcyBiZWVuIHJlbmFtZWQgdXBkYXRl
U2hhcGVGcm9tRWxlbWVudCBmb3IgdW5kZXJzdGFuZGFiaWxpdHkuIHVwZGF0ZVNoYXBlRnJvbUVs
ZW1lbnQKKyAgICAgICAgbm93IHVwZGF0ZXMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBzaGFw
ZSAoYm91bmRpbmcgYm94ZXMsIGV0YykgZnJvbSB0aGUgYXNzb2NpYXRlZCBlbGVtZW50LgorICAg
ICAgICBSZW5kZXJTVkdTaGFwZTo6aW5mbGF0ZVdpdGhTdHJva2VBbmRNYXJrZXJCb3VuZHMgaGFz
IGJlZW4gbWVyZ2VkIGludG8KKyAgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZVN0cm9r
ZUJvdW5kaW5nQm94IHdoaWNoIGlzIGNhbGxlZCBmcm9tIHVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQu
CisKKyAgICAgICAgQWZ0ZXIgdGhpcyBjaGFuZ2UgYWxsIGJvdW5kaW5nIGJveCBjb21wdXRhdGlv
biBpcyBub3cgaGFuZGxlZCBpbiB1cGRhdGVTaGFwZUZyb21FbGVtZW50LiBCZWNhdXNlCisgICAg
ICAgIHN1YmNsYXNzZXMgb3ZlcnJpZGUgdXBkYXRlU2hhcGVGcm9tRWxlbWVudCBpdCB3aWxsIGJl
IGVhc3kgZm9yIHRoZW0gdG8gaGF2ZSBjdXN0b20gYm91bmRpbmcgYm94CisgICAgICAgIGNvZGUg
dGhlcmUgKGFzIHdpbGwgaGFwcGVuIGZvciBSZW5kZXJTVkdQYXRoIGluIGEgZm9sbG93dXAgcGF0
Y2gpLgorCisgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94IGFuZCBvYmplY3RCb3VuZGluZ0JveCBh
cmUgbm93IGFibGUgdG8gcmV0dXJuIHRoZWlyIGNhY2hlZCB2YWx1ZXMgaW1tZWRpYXRlbHkKKyAg
ICAgICAgaW4gUmVuZGVyU1ZHUmVjdCBhbmQgUmVuZGVyU1ZHRWxsaXBzZSBpbnN0ZWFkIG9mIGNo
ZWNraW5nIHRoZWlyIGZhbGxiYWNrIHN0YXRlIG9uIGVhY2ggY2FsbC4KKworICAgICAgICBBZGRp
dGlvbmFsbHksIHRvIHNhdmUgc3BhY2UgUmVuZGVyU1ZHRWxsaXBzZSBhbmQgUmVuZGVyU1ZHUmVj
dCBub3cgdXNlIHRoZSBtX2ZpbGxCb3VuZGluZ0JveCBhbmQKKyAgICAgICAgbV9zdHJva2VCb3Vu
ZGluZ0JveCBvZiBSZW5kZXJTVkdTaGFwZSBpbnN0ZWFkIG9mIGhhdmluZyB0aGVpciBvd24uCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMgc2V0U3Ryb2tlQW5kTWFya2VyQm91bmRp
bmdCb3ggdGhhdCB3YXMgcHJldmlvdXNseSBkZWFkIGNvZGUuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCBqdXN0IGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0VsbGlwc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHRWxsaXBzZTo6dXBk
YXRlU2hhcGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR0VsbGlwc2U6OmZpbGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdFbGxpcHNlOjpzdHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdF
bGxpcHNlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0VsbGlwc2UuaDoKKyAgICAgICAgKFJlbmRlclNWR0VsbGlwc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHRWxsaXBzZTo6aXNFbXB0eSk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1JlY3Q6OnVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpmaWxsU2hhcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVjdDo6c3Ryb2tlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVjdDo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0Lmg6CisgICAgICAgIChSZW5kZXJTVkdSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmlzRW1wdHkpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHU2hhcGU6OnVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bGF5b3V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVPYmplY3RCb3VuZGluZ0JveCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlU3Ryb2tlQm91bmRpbmdCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZVJlcGFpbnRCb3VuZGlu
Z0JveCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oOgorICAgICAg
ICAoUmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om9i
amVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJv
a2VCb3VuZGluZ0JveCk6CisKIDIwMTItMDctMTEgIEFsZXhhbmRyZSBFbGlhcyAgPGFlbGlhc0Bn
b29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBjb21wb3NpdG9yIHF1YWRzIHRv
IFBsYXRmb3JtL2Nocm9taXVtL3B1YmxpYwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdFbGxpcHNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0VsbGlwc2UuY3BwCShyZXZpc2lvbiAxMjIzMzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0VsbGlwc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NiwxOCArNDYsMTggQEAgUmVuZGVyU1ZHRWxsaXBzZTo6flJlbmRlclNWR0Vs
bGlwc2UoKQogewogfQogCi12b2lkIFJlbmRlclNWR0VsbGlwc2U6OmNyZWF0ZVNoYXBlKCkKK3Zv
aWQgUmVuZGVyU1ZHRWxsaXBzZTo6dXBkYXRlU2hhcGVGcm9tRWxlbWVudCgpCiB7CiAgICAgLy8g
QmVmb3JlIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBjYWNoZWQg
Ym91bmRpbmcgYm94CiAgICAgLy8gdG8gYXZvaWQgdXNpbmcgZ2FyYmFnZS4KLSAgICBtX2JvdW5k
aW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgbV9vdXRlclN0cm9rZVJlY3QgPSBGbG9hdFJlY3Qo
KTsKKyAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIG1fc3Ryb2tlQm91
bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKICAgICBtX2NlbnRlciA9IEZsb2F0UG9pbnQoKTsKICAg
ICBtX3JhZGlpID0gRmxvYXRTaXplKCk7CiAKICAgICAvLyBGYWxsYmFjayB0byBSZW5kZXJTVkdT
aGFwZSBpZiBzaGFwZSBoYXMgYSBub24tc2NhbGluZyBzdHJva2UuCiAgICAgaWYgKGhhc05vblNj
YWxpbmdTdHJva2UoKSkgewotICAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsK
KyAgICAgICAgUmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQoKTsKICAgICAg
ICAgbV91c2VQYXRoRmFsbGJhY2sgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfSBlbHNl
CkBAIC02OSwxMCArNjksMTAgQEAgdm9pZCBSZW5kZXJTVkdFbGxpcHNlOjpjcmVhdGVTaGFwZSgp
CiAgICAgaWYgKG1fcmFkaWkud2lkdGgoKSA8PSAwIHx8IG1fcmFkaWkuaGVpZ2h0KCkgPD0gMCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9ib3VuZGluZ0JveCA9IEZsb2F0UmVjdChtX2NlbnRl
ci54KCkgLSBtX3JhZGlpLndpZHRoKCksIG1fY2VudGVyLnkoKSAtIG1fcmFkaWkuaGVpZ2h0KCks
IDIgKiBtX3JhZGlpLndpZHRoKCksIDIgKiBtX3JhZGlpLmhlaWdodCgpKTsKLSAgICBtX291dGVy
U3Ryb2tlUmVjdCA9IG1fYm91bmRpbmdCb3g7CisgICAgbV9maWxsQm91bmRpbmdCb3ggPSBGbG9h
dFJlY3QobV9jZW50ZXIueCgpIC0gbV9yYWRpaS53aWR0aCgpLCBtX2NlbnRlci55KCkgLSBtX3Jh
ZGlpLmhlaWdodCgpLCAyICogbV9yYWRpaS53aWR0aCgpLCAyICogbV9yYWRpaS5oZWlnaHQoKSk7
CisgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IG1fZmlsbEJvdW5kaW5nQm94OwogICAgIGlmIChz
dHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkKLSAgICAgICAgbV9vdXRlclN0cm9rZVJl
Y3QuaW5mbGF0ZShzdHJva2VXaWR0aCgpIC8gMik7CisgICAgICAgIG1fc3Ryb2tlQm91bmRpbmdC
b3guaW5mbGF0ZShzdHJva2VXaWR0aCgpIC8gMik7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHRWxsaXBz
ZTo6Y2FsY3VsYXRlUmFkaWlBbmRDZW50ZXIoKQpAQCAtOTcsMjcgKzk3LDEzIEBAIHZvaWQgUmVu
ZGVyU1ZHRWxsaXBzZTo6Y2FsY3VsYXRlUmFkaWlBbmQKICAgICBtX2NlbnRlciA9IEZsb2F0UG9p
bnQoZWxsaXBzZS0+Y3goKS52YWx1ZShsZW5ndGhDb250ZXh0KSwgZWxsaXBzZS0+Y3koKS52YWx1
ZShsZW5ndGhDb250ZXh0KSk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdFbGxpcHNlOjpvYmpl
Y3RCb3VuZGluZ0JveCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fdXNlUGF0aEZhbGxiYWNrKQotICAg
ICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJvdW5kaW5nQm94KCk7Ci0gICAgcmV0
dXJuIG1fYm91bmRpbmdCb3g7Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdFbGxpcHNlOjpzdHJv
a2VCb3VuZGluZ0JveCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fdXNlUGF0aEZhbGxiYWNrKQotICAg
ICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KCk7Ci0gICAgcmV0
dXJuIG1fb3V0ZXJTdHJva2VSZWN0OwotfQotCiB2b2lkIFJlbmRlclNWR0VsbGlwc2U6OmZpbGxT
aGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgaWYgKG1fdXNlUGF0
aEZhbGxiYWNrKSB7CiAgICAgICAgIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUoY29udGV4dCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY29udGV4dC0+ZmlsbEVsbGlwc2UobV9ib3Vu
ZGluZ0JveCk7CisgICAgY29udGV4dC0+ZmlsbEVsbGlwc2UobV9maWxsQm91bmRpbmdCb3gpOwog
fQogCiB2b2lkIFJlbmRlclNWR0VsbGlwc2U6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCkgY29uc3QKQEAgLTEyOCw3ICsxMTQsNyBAQCB2b2lkIFJlbmRlclNWR0VsbGlwc2U6
OnN0cm9rZVNoYXBlKEdyYXBoCiAgICAgICAgIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShj
b250ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjb250ZXh0LT5zdHJva2VFbGxp
cHNlKG1fYm91bmRpbmdCb3gpOworICAgIGNvbnRleHQtPnN0cm9rZUVsbGlwc2UobV9maWxsQm91
bmRpbmdCb3gpOwogfQogCiBib29sIFJlbmRlclNWR0VsbGlwc2U6OnNoYXBlRGVwZW5kZW50U3Ry
b2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCkBAIC0xMzcsNyArMTIzLDcgQEAg
Ym9vbCBSZW5kZXJTVkdFbGxpcHNlOjpzaGFwZURlcGVuZGVudFN0cgogICAgIC8vIHRvIGZhbGwg
YmFjayB0byBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyBpbiB0
aGVzZSBjYXNlcy4KICAgICBpZiAobV91c2VQYXRoRmFsbGJhY2sgfHwgIWhhc1Ntb290aFN0cm9r
ZSgpKSB7CiAgICAgICAgIGlmICghaGFzUGF0aCgpKQotICAgICAgICAgICAgUmVuZGVyU1ZHU2hh
cGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgICAgICBSZW5kZXJTVkdTaGFwZTo6dXBkYXRlU2hh
cGVGcm9tRWxlbWVudCgpOwogICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVw
ZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdFbGxpcHNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdFbGxpcHNlLmgJKHJldmlzaW9uIDEyMjMz
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRWxsaXBzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MSwxOSArNDEsMTUgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZH
RWxsaXBzZSI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVTaGFwZSgpOwotICAgIHZpcnR1
YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV91c2VQYXRoRmFsbGJhY2sgPyBSZW5k
ZXJTVkdTaGFwZTo6aXNFbXB0eSgpIDogbV9ib3VuZGluZ0JveC5pc0VtcHR5KCk7IH07CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlUGF0aEZhbGxiYWNrID8gUmVuZGVyU1ZHU2hh
cGU6OmlzRW1wdHkoKSA6IG1fZmlsbEJvdW5kaW5nQm94LmlzRW1wdHkoKTsgfTsKICAgICB2aXJ0
dWFsIHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCopIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNoYXBlRGVwZW5k
ZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpOwogICAgIHZpcnR1YWwgYm9vbCBz
aGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgV2luZFJ1
bGUpIGNvbnN0OwogICAgIHZvaWQgY2FsY3VsYXRlUmFkaWlBbmRDZW50ZXIoKTsKIAogcHJpdmF0
ZToKLSAgICBGbG9hdFJlY3QgbV9ib3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9vdXRlclN0
cm9rZVJlY3Q7CiAgICAgRmxvYXRQb2ludCBtX2NlbnRlcjsKICAgICBGbG9hdFNpemUgbV9yYWRp
aTsKICAgICBib29sIG1fdXNlUGF0aEZhbGxiYWNrOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCShyZXZpc2lvbiAxMjIzMzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NiwxMSArNDYsMTEgQEAgUmVuZGVyU1ZHUmVjdDo6flJlbmRlclNWR1JlY3QoKQog
ewogfQogCi12b2lkIFJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKCkKK3ZvaWQgUmVuZGVyU1ZH
UmVjdDo6dXBkYXRlU2hhcGVGcm9tRWxlbWVudCgpCiB7CiAgICAgLy8gQmVmb3JlIGNyZWF0aW5n
IGEgbmV3IG9iamVjdCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBjYWNoZWQgYm91bmRpbmcgYm94CiAg
ICAgLy8gdG8gYXZvaWQgdXNpbmcgZ2FyYmFnZS4KLSAgICBtX2JvdW5kaW5nQm94ID0gRmxvYXRS
ZWN0KCk7CisgICAgbV9maWxsQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKICAgICBtX2lubmVy
U3Ryb2tlUmVjdCA9IEZsb2F0UmVjdCgpOwogICAgIG1fb3V0ZXJTdHJva2VSZWN0ID0gRmxvYXRS
ZWN0KCk7CiAgICAgU1ZHUmVjdEVsZW1lbnQqIHJlY3QgPSBzdGF0aWNfY2FzdDxTVkdSZWN0RWxl
bWVudCo+KG5vZGUoKSk7CkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVjdDo6Y3Jl
YXRlU2hhcGUoKQogCiAgICAgLy8gRmFsbGJhY2sgdG8gUmVuZGVyU1ZHU2hhcGUgaWYgcmVjdCBo
YXMgcm91bmRlZCBjb3JuZXJzIG9yIGEgbm9uLXNjYWxpbmcgc3Ryb2tlLgogICAgIGlmIChyZWN0
LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ4QXR0cikgfHwgcmVjdC0+aGFzQXR0cmlidXRlKFNW
R05hbWVzOjpyeUF0dHIpIHx8IGhhc05vblNjYWxpbmdTdHJva2UoKSkgewotICAgICAgICBSZW5k
ZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICAgUmVuZGVyU1ZHU2hhcGU6OnVwZGF0
ZVNoYXBlRnJvbUVsZW1lbnQoKTsKICAgICAgICAgbV91c2VQYXRoRmFsbGJhY2sgPSB0cnVlOwog
ICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlCkBAIC02OSwxMiArNjksMTIgQEAgdm9pZCBSZW5k
ZXJTVkdSZWN0OjpjcmVhdGVTaGFwZSgpCiAgICAgaWYgKGJvdW5kaW5nQm94U2l6ZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fYm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoRmxv
YXRQb2ludChyZWN0LT54KCkudmFsdWUobGVuZ3RoQ29udGV4dCksIHJlY3QtPnkoKS52YWx1ZShs
ZW5ndGhDb250ZXh0KSksIGJvdW5kaW5nQm94U2l6ZSk7CisgICAgbV9maWxsQm91bmRpbmdCb3gg
PSBGbG9hdFJlY3QoRmxvYXRQb2ludChyZWN0LT54KCkudmFsdWUobGVuZ3RoQ29udGV4dCksIHJl
Y3QtPnkoKS52YWx1ZShsZW5ndGhDb250ZXh0KSksIGJvdW5kaW5nQm94U2l6ZSk7CiAKICAgICAv
LyBUbyBkZWNpZGUgaWYgdGhlIHN0cm9rZSBjb250YWlucyBhIHBvaW50IHdlIGNyZWF0ZSB0d28g
cmVjdHMgd2hpY2ggcmVwcmVzZW50IHRoZSBpbm5lciBhbmQKICAgICAvLyB0aGUgb3V0ZXIgc3Ry
b2tlIGJvcmRlcnMuIEEgc3Ryb2tlIGNvbnRhaW5zIHRoZSBwb2ludCwgaWYgdGhlIHBvaW50IGlz
IGJldHdlZW4gdGhlbS4KLSAgICBtX2lubmVyU3Ryb2tlUmVjdCA9IG1fYm91bmRpbmdCb3g7Ci0g
ICAgbV9vdXRlclN0cm9rZVJlY3QgPSBtX2JvdW5kaW5nQm94OworICAgIG1faW5uZXJTdHJva2VS
ZWN0ID0gbV9maWxsQm91bmRpbmdCb3g7CisgICAgbV9vdXRlclN0cm9rZVJlY3QgPSBtX2ZpbGxC
b3VuZGluZ0JveDsKIAogICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkg
ewogICAgICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7CkBAIC04
MiwyOSArODIsMTUgQEAgdm9pZCBSZW5kZXJTVkdSZWN0OjpjcmVhdGVTaGFwZSgpCiAgICAgICAg
IG1fb3V0ZXJTdHJva2VSZWN0LmluZmxhdGUoc3Ryb2tlV2lkdGggLyAyKTsKICAgICB9CiAKLSAg
ICBtX3N0cm9rZUJvdW5kaW5nUmVjdCA9IG1fb3V0ZXJTdHJva2VSZWN0OworICAgIG1fc3Ryb2tl
Qm91bmRpbmdCb3ggPSBtX291dGVyU3Ryb2tlUmVjdDsKIAogI2lmIFVTRShDRykKICAgICAvLyBD
b3JlR3JhcGhpY3MgY2FuIGluZmxhdGUgdGhlIHN0cm9rZSBieSAxcHggd2hlbiBkcmF3aW5nIGEg
cmVjdGFuZ2xlIHdpdGggYW50aWFsaWFzaW5nIGRpc2FibGVkIGF0IG5vbi1pbnRlZ2VyIGNvb3Jk
aW5hdGVzLCB3ZSBuZWVkIHRvIGNvbXBlbnNhdGUuCiAgICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxl
KCktPnNoYXBlUmVuZGVyaW5nKCkgPT0gU1JfQ1JJU1BFREdFUykKLSAgICAgICAgbV9zdHJva2VC
b3VuZGluZ1JlY3QuaW5mbGF0ZSgxKTsKKyAgICAgICAgbV9zdHJva2VCb3VuZGluZ0JveC5pbmZs
YXRlKDEpOwogI2VuZGlmCiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdSZWN0OjpvYmplY3RCb3Vu
ZGluZ0JveCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fdXNlUGF0aEZhbGxiYWNrKQotICAgICAgICBy
ZXR1cm4gUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJvdW5kaW5nQm94KCk7Ci0gICAgcmV0dXJuIG1f
Ym91bmRpbmdCb3g7Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdSZWN0OjpzdHJva2VCb3VuZGlu
Z0JveCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fdXNlUGF0aEZhbGxiYWNrKQotICAgICAgICByZXR1
cm4gUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KCk7Ci0gICAgcmV0dXJuIG1fc3Ry
b2tlQm91bmRpbmdSZWN0OwotfQotCiB2b2lkIFJlbmRlclNWR1JlY3Q6OmZpbGxTaGFwZShHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgaWYgKG1fdXNlUGF0aEZhbGxiYWNr
KSB7CkBAIC0xMjAsMTIgKzEwNiwxMiBAQCB2b2lkIFJlbmRlclNWR1JlY3Q6OmZpbGxTaGFwZShH
cmFwaGljc0NvCiAgICAgaWYgKGNvbnRleHQtPmhhc1NoYWRvdygpKSB7CiAgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAgICAgICAgIGNvbnRl
eHQtPmNsZWFyU2hhZG93KCk7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KG1fYm91bmRpbmdC
b3gpOworICAgICAgICBjb250ZXh0LT5maWxsUmVjdChtX2ZpbGxCb3VuZGluZ0JveCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIGNvbnRleHQtPmZpbGxSZWN0KG1fYm91
bmRpbmdCb3gpOworICAgIGNvbnRleHQtPmZpbGxSZWN0KG1fZmlsbEJvdW5kaW5nQm94KTsKIH0K
IAogdm9pZCBSZW5kZXJTVkdSZWN0OjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQpIGNvbnN0CkBAIC0xMzgsNyArMTI0LDcgQEAgdm9pZCBSZW5kZXJTVkdSZWN0OjpzdHJva2VT
aGFwZShHcmFwaGljcwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29udGV4dC0+c3Ry
b2tlUmVjdChtX2JvdW5kaW5nQm94LCBzdHJva2VXaWR0aCgpKTsKKyAgICBjb250ZXh0LT5zdHJv
a2VSZWN0KG1fZmlsbEJvdW5kaW5nQm94LCBzdHJva2VXaWR0aCgpKTsKIH0KIAogYm9vbCBSZW5k
ZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KQpAQCAtMTQ3LDcgKzEzMyw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVjdDo6c2hhcGVEZXBl
bmRlbnRTdHJva2UKICAgICAvLyB0byBmYWxsIGJhY2sgdG8gUmVuZGVyU1ZHU2hhcGU6OnNoYXBl
RGVwZW5kZW50U3Ryb2tlQ29udGFpbnMgaW4gdGhlc2UgY2FzZXMuCiAgICAgaWYgKG1fdXNlUGF0
aEZhbGxiYWNrIHx8ICFoYXNTbW9vdGhTdHJva2UoKSkgewogICAgICAgICBpZiAoIWhhc1BhdGgo
KSkKLSAgICAgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOworICAgICAgICAg
ICAgUmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQoKTsKICAgICAgICAgcmV0
dXJuIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50KTsK
ICAgICB9CiAKQEAgLTE1OCw3ICsxNDQsNyBAQCBib29sIFJlbmRlclNWR1JlY3Q6OnNoYXBlRGVw
ZW5kZW50RmlsbENvCiB7CiAgICAgaWYgKG1fdXNlUGF0aEZhbGxiYWNrKQogICAgICAgICByZXR1
cm4gUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50LCBmaWxs
UnVsZSk7Ci0gICAgcmV0dXJuIG1fYm91bmRpbmdCb3guY29udGFpbnMocG9pbnQueCgpLCBwb2lu
dC55KCkpOworICAgIHJldHVybiBtX2ZpbGxCb3VuZGluZ0JveC5jb250YWlucyhwb2ludC54KCks
IHBvaW50LnkoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVjdC5oCShyZXZpc2lvbiAxMjIzMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMjAgKzQy
LDE2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJO
YW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1JlY3QiOyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlU2hhcGUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fdXNlUGF0aEZhbGxiYWNrID8gUmVuZGVyU1ZHU2hhcGU6OmlzRW1wdHkoKSA6IG1fYm91
bmRpbmdCb3guaXNFbXB0eSgpOyB9OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTaGFwZUZyb21F
bGVtZW50KCk7CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZVBhdGhGYWxsYmFjayA/IFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkgOiBtX2ZpbGxCb3VuZGlu
Z0JveC5pc0VtcHR5KCk7IH07CiAgICAgdmlydHVhbCB2b2lkIGZpbGxTaGFwZShHcmFwaGljc0Nv
bnRleHQqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250
ZXh0KikgY29uc3Q7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBj
b25zdDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMoY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IFdpbmRSdWxlKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBG
bG9hdFJlY3QgbV9ib3VuZGluZ0JveDsKICAgICBGbG9hdFJlY3QgbV9pbm5lclN0cm9rZVJlY3Q7
CiAgICAgRmxvYXRSZWN0IG1fb3V0ZXJTdHJva2VSZWN0OwotICAgIEZsb2F0UmVjdCBtX3N0cm9r
ZUJvdW5kaW5nUmVjdDsKICAgICBib29sIG1fdXNlUGF0aEZhbGxiYWNrOwogfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAJKHJl
dmlzaW9uIDEyMjMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
U2hhcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw5ICs2NCw5IEBAIFJlbmRlclNWR1NoYXBl
Ojp+UmVuZGVyU1ZHU2hhcGUoKQogewogfQogCi12b2lkIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVT
aGFwZSgpCit2b2lkIFJlbmRlclNWR1NoYXBlOjp1cGRhdGVTaGFwZUZyb21FbGVtZW50KCkKIHsK
LSAgICBBU1NFUlQoIW1fcGF0aCk7CisgICAgbV9wYXRoLmNsZWFyKCk7CiAgICAgbV9wYXRoID0g
YWRvcHRQdHIobmV3IFBhdGgpOwogICAgIEFTU0VSVChSZW5kZXJTVkdTaGFwZTo6aXNFbXB0eSgp
KTsKIApAQCAtNzQsNiArNzQsOSBAQCB2b2lkIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgp
CiAgICAgdXBkYXRlUGF0aEZyb21HcmFwaGljc0VsZW1lbnQoZWxlbWVudCwgcGF0aCgpKTsKICAg
ICBwcm9jZXNzWmVyb0xlbmd0aFN1YnBhdGhzKCk7CiAgICAgcHJvY2Vzc01hcmtlclBvc2l0aW9u
cygpOworCisgICAgbV9maWxsQm91bmRpbmdCb3ggPSBjYWxjdWxhdGVPYmplY3RCb3VuZGluZ0Jv
eCgpOworICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBjYWxjdWxhdGVTdHJva2VCb3VuZGluZ0Jv
eCgpOwogfQogCiBib29sIFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkgY29uc3QKQEAgLTg2LDEx
ICs4OSw2IEBAIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZShHcmFwaGljc0MKICAgICBj
b250ZXh0LT5maWxsUGF0aChwYXRoKCkpOwogfQogCi1GbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6
Om9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGF0aCgpLmZhc3RCb3Vu
ZGluZ1JlY3QoKTsKLX0KLQogdm9pZCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgp
LT5oYXNWaXNpYmxlU3Ryb2tlKCkpCkBAIC0xNjIsMTEgKzE2MCwxMSBAQCB2b2lkIFJlbmRlclNW
R1NoYXBlOjpsYXlvdXQoKQogCiAgICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJl
bnRzID0gZmFsc2U7CiAKLSAgICBib29sIG5lZWRzU2hhcGVVcGRhdGUgPSBtX25lZWRzU2hhcGVV
cGRhdGU7Ci0gICAgaWYgKG5lZWRzU2hhcGVVcGRhdGUgfHwgbV9uZWVkc0JvdW5kYXJpZXNVcGRh
dGUpIHsKLSAgICAgICAgbV9wYXRoLmNsZWFyKCk7Ci0gICAgICAgIGNyZWF0ZVNoYXBlKCk7Cisg
ICAgaWYgKG1fbmVlZHNTaGFwZVVwZGF0ZSB8fCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkgewor
ICAgICAgICB1cGRhdGVTaGFwZUZyb21FbGVtZW50KCk7CiAgICAgICAgIG1fbmVlZHNTaGFwZVVw
ZGF0ZSA9IGZhbHNlOworICAgICAgICB1cGRhdGVSZXBhaW50Qm91bmRpbmdCb3goKTsKKyAgICAg
ICAgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgPSBmYWxzZTsKICAgICAgICAgdXBkYXRlQ2FjaGVk
Qm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CiAgICAgfQogCkBAIC0xODAsMTMgKzE3OCw2IEBA
IHZvaWQgUmVuZGVyU1ZHU2hhcGU6OmxheW91dCgpCiAgICAgaWYgKGV2ZXJIYWRMYXlvdXQoKSAm
JiBzZWxmTmVlZHNMYXlvdXQoKSkKICAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExh
eW91dENoYW5nZWQodGhpcyk7CiAKLSAgICAvLyBBdCB0aGlzIHBvaW50IExheW91dFJlcGFpbnRl
ciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMsCi0gICAgLy8gcmVjYWxjdWxhdGUgdGhl
bSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4KLSAgICBp
ZiAobmVlZHNTaGFwZVVwZGF0ZSB8fCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkgewotICAgICAg
ICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7Ci0gICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBk
YXRlID0gZmFsc2U7Ci0gICAgfQotCiAgICAgLy8gSWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3Rp
ZnkgdGhlIHBhcmVudHMuCiAgICAgaWYgKHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMp
CiAgICAgICAgIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUo
KTsKQEAgLTQzOSwyOSArNDMwLDQ0IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6bWFya2Vy
UmVjdChmbG8KICAgICByZXR1cm4gYm91bmRhcmllczsKIH0KIAotdm9pZCBSZW5kZXJTVkdTaGFw
ZTo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OmNh
bGN1bGF0ZU9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QKIHsKLSAgICBpZiAoaXNFbXB0eSgpKSB7
Ci0gICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIG1fc3Ry
b2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgbV9yZXBhaW50
Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBw
YXRoKCkuZmFzdEJvdW5kaW5nUmVjdCgpOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6
OmNhbGN1bGF0ZVN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wYXRo
KTsKKyAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3ggPSBtX2ZpbGxCb3VuZGluZ0JveDsK
KworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxl
KCk7CisgICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkgeworICAgICAgICBCb3VuZGluZ1Jl
Y3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7CisgICAgICAg
IGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkpIHsKKyAgICAgICAgICAgIEFmZmluZVRyYW5zZm9y
bSBub25TY2FsaW5nVHJhbnNmb3JtID0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgpOworICAg
ICAgICAgICAgaWYgKG5vblNjYWxpbmdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAg
ICAgICAgICAgICBQYXRoKiB1c2VQYXRoID0gbm9uU2NhbGluZ1N0cm9rZVBhdGgobV9wYXRoLmdl
dCgpLCBub25TY2FsaW5nVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgc3Ry
b2tlQm91bmRpbmdSZWN0ID0gdXNlUGF0aC0+c3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VTdHls
ZSk7CisgICAgICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdSZWN0ID0gbm9uU2NhbGluZ1RyYW5z
Zm9ybS5pbnZlcnNlKCkubWFwUmVjdChzdHJva2VCb3VuZGluZ1JlY3QpOworICAgICAgICAgICAg
ICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKHN0cm9rZUJvdW5kaW5nUmVjdCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5p
dGUocGF0aCgpLnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpKTsKKworICAgICAgICAv
LyBGSVhNRTogemVyby1sZW5ndGggc3VicGF0aHMgZG8gbm90IHJlc3BlY3QgdmVjdG9yLWVmZmVj
dCA9IG5vbi1zY2FsaW5nLXN0cm9rZS4KKyAgICAgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlz
LT5zdHJva2VXaWR0aCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1femVyb0xl
bmd0aExpbmVjYXBMb2NhdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBzdHJva2VCb3Vu
ZGluZ0JveC51bml0ZSh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QobV96ZXJvTGVuZ3RoTGluZWNhcExv
Y2F0aW9uc1tpXSwgc3Ryb2tlV2lkdGgpKTsKICAgICB9CiAKLSAgICAvLyBDYWNoZSBfdW5jbGlw
cGVkXyBmaWxsIGJvdW5kaW5nIGJveCwgdXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNl
cwotICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gb2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBpZiAo
IW1fbWFya2VyUG9zaXRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gu
dW5pdGUobWFya2VyUmVjdChzdHJva2VXaWR0aCgpKSk7CiAKLSAgICAvLyBBZGQgemVyby1sZW5n
dGggc3ViLXBhdGggbGluZWNhcHMgdG8gdGhlIGZpbGwgYm94Ci0gICAgLy8gRklYTUU6IHplcm8t
bGVuZ3RoIHN1YnBhdGhzIGRvIG5vdCByZXNwZWN0IHZlY3Rvci1lZmZlY3QgPSBub24tc2NhbGlu
Zy1zdHJva2UuCi0gICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9ucy5z
aXplKCk7ICsraSkKLSAgICAgICAgbV9maWxsQm91bmRpbmdCb3gudW5pdGUoemVyb0xlbmd0aFN1
YnBhdGhSZWN0KG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnNbaV0sIHN0cm9rZVdpZHRoKSk7
CisgICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94OworfQogCi0gICAgLy8gQ2FjaGUgX3VuY2xp
cHBlZF8gc3Ryb2tlIGJvdW5kaW5nIGJveCwgdXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291
cmNlcyAoaW5jbHVkZXMgbWFya2VyIGJvdW5kYXJpZXMpCi0gICAgbV9zdHJva2VBbmRNYXJrZXJC
b3VuZGluZ0JveCA9IG1fZmlsbEJvdW5kaW5nQm94OwotICAgIGlmIChoYXNQYXRoKCkpCi0gICAg
ICAgIGluZmxhdGVXaXRoU3Ryb2tlQW5kTWFya2VyQm91bmRzKCk7Ci0gICAgLy8gQ2FjaGUgc21h
bGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnVw
ZGF0ZVJlcGFpbnRCb3VuZGluZ0JveCgpCit7CiAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBz
dHJva2VCb3VuZGluZ0JveCgpOwogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFp
bnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CiB9CkBAIC00
ODIsMjggKzQ4OCw2IEBAIGJvb2wgUmVuZGVyU1ZHU2hhcGU6Omhhc1Ntb290aFN0cm9rZSgpIGMK
ICAgICAgICAgJiYgc3ZnU3R5bGUtPmNhcFN0eWxlKCkgPT0gc3ZnU3R5bGUtPmluaXRpYWxDYXBT
dHlsZSgpOwogfQogCi12b2lkIFJlbmRlclNWR1NoYXBlOjppbmZsYXRlV2l0aFN0cm9rZUFuZE1h
cmtlckJvdW5kcygpCi17Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5
bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBpZiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKSB7Ci0gICAg
ICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHls
ZSgpKTsKLQotICAgICAgICAvLyBTVkcxLjIgVGlueSBvbmx5IGRlZmluZXMgbm9uIHNjYWxpbmcg
c3Ryb2tlIGZvciB0aGUgc3Ryb2tlIGJ1dCBub3QgbWFya2Vycy4KLSAgICAgICAgaWYgKGhhc05v
blNjYWxpbmdTdHJva2UoKSkgewotICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxp
bmdUcmFuc2Zvcm0gPSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICBp
ZiAobm9uU2NhbGluZ1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgewotICAgICAgICAgICAgICAg
IFBhdGgqIHVzZVBhdGggPSBub25TY2FsaW5nU3Ryb2tlUGF0aChtX3BhdGguZ2V0KCksIG5vblNj
YWxpbmdUcmFuc2Zvcm0pOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGlu
Z1JlY3QgPSB1c2VQYXRoLT5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0eWxlKTsKLSAgICAg
ICAgICAgICAgICBzdHJva2VCb3VuZGluZ1JlY3QgPSBub25TY2FsaW5nVHJhbnNmb3JtLmludmVy
c2UoKS5tYXBSZWN0KHN0cm9rZUJvdW5kaW5nUmVjdCk7Ci0gICAgICAgICAgICAgICAgbV9zdHJv
a2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShzdHJva2VCb3VuZGluZ1JlY3QpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91
bmRpbmdCb3gudW5pdGUocGF0aCgpLnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpKTsK
LSAgICB9Ci0gICAgaWYgKCFtX21hcmtlclBvc2l0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIG1f
c3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUobWFya2VyUmVjdChzdHJva2VXaWR0aCgp
KSk7Ci19Ci0KIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OmRyYXdNYXJrZXJzKFBhaW50SW5mbyYgcGFp
bnRJbmZvKQogewogICAgIEFTU0VSVCghbV9tYXJrZXJQb3NpdGlvbnMuaXNFbXB0eSgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgJKHJl
dmlzaW9uIDEyMjMzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
U2hhcGUuaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTEgKzgzLDggQEAgcHVibGljOgogICAgIH0K
IAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVTaGFwZSgpOworICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVTaGFwZUZyb21FbGVtZW50KCk7CiAgICAgdmlydHVhbCBib29sIGlzRW1w
dHkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsgfQotICAgIHZvaWQgc2V0U3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3goRmxvYXRSZWN0IHJlY3QpIHsgbV9zdHJva2VBbmRNYXJrZXJC
b3VuZGluZ0JveCA9IHJlY3Q7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRTdHJv
a2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgdmlydHVhbCBib29sIHNoYXBlRGVw
ZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSkgY29u
c3Q7CiAgICAgZmxvYXQgc3Ryb2tlV2lkdGgoKSBjb25zdDsKQEAgLTk1LDYgKzkyLDkgQEAgcHJv
dGVjdGVkOgogICAgIGJvb2wgaGFzTm9uU2NhbGluZ1N0cm9rZSgpIGNvbnN0IHsgcmV0dXJuIHN0
eWxlKCktPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9L
RTsgfQogICAgIGJvb2wgaGFzU21vb3RoU3Ryb2tlKCkgY29uc3Q7CiAKKyAgICBGbG9hdFJlY3Qg
bV9maWxsQm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fc3Ryb2tlQm91bmRpbmdCb3g7CisK
IHByaXZhdGU6CiAgICAgLy8gSGl0LWRldGVjdGlvbiBzZXBhcmF0ZWQgZm9yIHRoZSBmaWxsIGFu
ZCB0aGUgc3Ryb2tlCiAgICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJv
b2wgcmVxdWlyZXNGaWxsID0gdHJ1ZSwgY29uc3QgV2luZFJ1bGUgZmlsbFJ1bGUgPSBSVUxFX05P
TlpFUk8pOwpAQCAtMTEzLDcgKzExMywxMiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29s
IG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAKLSAgICB2
b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmpl
Y3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbEJvdW5kaW5nQm94OyB9CisgICAg
dmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0
cm9rZUJvdW5kaW5nQm94OyB9CisKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlT2JqZWN0Qm91bmRp
bmdCb3goKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlU3Ryb2tlQm91bmRpbmdCb3go
KSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVJlcGFpbnRCb3VuZGluZ0JveCgpOwogCiAgICAgQWZm
aW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0oKSBjb25zdDsKICAgICBib29s
IHNldHVwTm9uU2NhbGluZ1N0cm9rZUNvbnRleHQoQWZmaW5lVHJhbnNmb3JtJiwgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciYpOwpAQCAtMTMyLDEyICsxMzcsOSBAQCBwcml2YXRlOgogICAgIHZv
aWQgc3Ryb2tlUGF0aChSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dCosIFBhdGgqLCBSZW5k
ZXJTVkdSZXNvdXJjZSosCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbG9yJiwgaW50KTsK
ICAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQg
aW5mbGF0ZVdpdGhTdHJva2VBbmRNYXJrZXJCb3VuZHMoKTsKICAgICB2b2lkIGRyYXdNYXJrZXJz
KFBhaW50SW5mbyYpOwogCiBwcml2YXRlOgotICAgIEZsb2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0Jv
eDsKLSAgICBGbG9hdFJlY3QgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKICAgICBGbG9h
dFJlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxU
cmFuc2Zvcm07CiAgICAgT3duUHRyPFBhdGg+IG1fcGF0aDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>