<?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>96658</bug_id>
          
          <creation_ts>2012-09-13 08:56:54 -0700</creation_ts>
          <short_desc>REGRESSION: transition doesn’t always override transition-property</short_desc>
          <delta_ts>2012-09-14 15:26:19 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://result.dabblet.com/gist/3715069</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Lea Verou">lea</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>719560</commentid>
    <comment_count>0</comment_count>
    <who name="Lea Verou">lea</who>
    <bug_when>2012-09-13 08:56:54 -0700</bug_when>
    <thetext>As you can see in the testcase, there is no smooth transition because the transition shorthand does not seem to override the first transition-property, even though it should, and it does in every other engine and older versions of WebKit. Chrome 19 and Safari 6.0 do not have this issue. It can be reproduced in Chrome &gt; 19 and WebKit nightlies. I can also reproduce it in my Safari 6.0, but not BrowserStack’s Safari 6.0, so I&apos;m not sure whether it occurs there.

Steps to reproduce:
- Go to testcase
- Hover over the gold paragraph
- Observe how there is no smooth transition

Things that fix the issue:
- Explicitly adding the transition-property value in the shorthand. i.e. converting transition: 2s; to transition: 2s all; or transition 2s background;
- Merging the two rules

Things that don&apos;t fix the issue:
- Increasing the specificity of the second rule
- Adding a separate transition-property declaration in the second rule WITHOUT removing the first one

Other observations:
- Other transition-* properties like transition-duration or transition-delay don&apos;t seem to exhibit this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719721</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-09-13 11:34:07 -0700</bug_when>
    <thetext>That does seem like a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720149</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-09-13 17:25:43 -0700</bug_when>
    <thetext>Interesting. In debug, we hit:
ASSERTION FAILED: prop &gt;= firstCSSProperty &amp;&amp; prop &lt; (firstCSSProperty + numCSSProperties)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720211</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-09-13 18:42:57 -0700</bug_when>
    <thetext>When parsing the shorthand, CSSParser::parseTransitionShorthand() fills in unsupplied values with the &quot;initial&quot; value:

    // Fill in any remaining properties with the initial value.
    for (i = 0; i &lt; numProperties; ++i) {
        if (!parsedProperty[i])
            addAnimationValue(values[i], cssValuePool().createImplicitInitialValue());
    }

and later on we take this to imply that we should use Animation::initialAnimationProperty() which is CSSPropertyInvalid. Maybe that should be All?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720937</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-09-14 10:43:21 -0700</bug_when>
    <thetext>Regressed with http://trac.webkit.org/changeset/113225 when Alexis changed initialAnimationProperty() to return CSSPropertyInvalid rather than cAnimateAll.

Also, the use of CSSPropertyID in platform/animation code is a layering violation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721119</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-09-14 14:11:17 -0700</bug_when>
    <thetext>Possibly seeing this (the assertion at least) on
http://davidcelis.com/blog/2012/09/06/stop-validating-email-addresses-with-regex/?utm_source=rubyweekly&amp;utm_medium=email</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721144</commentid>
    <comment_count>6</comment_count>
      <attachid>164228</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-09-14 14:41:09 -0700</bug_when>
    <thetext>Created attachment 164228
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721145</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-09-14 14:41:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/12302561&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721157</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-09-14 14:53:00 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/128656</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721187</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-09-14 15:26:19 -0700</bug_when>
    <thetext>Build fix in http://trac.webkit.org/changeset/128660</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164228</attachid>
            <date>2012-09-14 14:41:09 -0700</date>
            <delta_ts>2012-09-14 14:45:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96658-20120914144043.patch</filename>
            <type>text/plain</type>
            <size>51628</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4NjQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWU4OGY4YzhlNDY0Mjk0
YWY1OTNmZGQ4MjBiNTRhNDMyYTI4NzI5Yy4uMTc5NGQ5ZmMxMjY0OWI5MDMyYWRiOThkY2RkNmZl
NjRhNWE5ZDFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNCBAQAorMjAxMi0wOS0xNCAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9O
OiB0cmFuc2l0aW9uIGRvZXNu4oCZdCBhbHdheXMgb3ZlcnJpZGUgdHJhbnNpdGlvbi1wcm9wZXJ0
eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY2NTgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZXR0aW5n
IHRoZSBhbmltYXRpb24gcHJvcGVydHkgb24gYW4gQW5pbWF0aW9uIGluIENTU1RvU3R5bGVNYXA6
Om1hcEFuaW1hdGlvblByb3BlcnR5KCkKKyAgICAgICAgaXMgc3BlY2lhbCBiZWNhdXNlIHdlIGhh
dmUgdG8gY2FsbCBzZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZUFsbCkgYXMgd2Vs
bAorICAgICAgICBhcyBzZXR0aW5nIHRoZSBwcm9wZXJ0eSB0byBDU1NQcm9wZXJ0eUludmFsaWQg
aWYgaXQncyBmb3IgdGhlIGluaXRpYWwgc3RhdGUKKyAgICAgICAgb2YgdGhlIHRyYW5zaXRpb24t
cHJvcGVydHkgcHJvcGVydHkuCisgICAgICAgIAorICAgICAgICBJbiBvcmRlciB0byBmaXggdGhp
cyB2aWEgU3R5bGVCdWlsZGVyIFByb3BlcnR5SGFuZGxlcnMsIHdlIGhhdmUgdG8ga25vdywKKyAg
ICAgICAgaW4gQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjo6YXBwbHlJbml0aWFsVmFsdWUoKSwgd2hp
Y2ggcHJvcGVydHkgaXMgZ2V0dGluZyBhcHBsaWVkLgorICAgICAgICBUaGlzIHJlcXVpcmVzIHBh
c3NpbmcgdGhlIENTU1Byb3BlcnR5SUQgZG93biB0aHJvdWdoIGFsbCBvZiB0aGUgImFwcGx5IiBt
ZXRob2RzLgorICAgICAgICAKKyAgICAgICAgRG8gc29tZSB1bnJlbGF0ZWQgY2xlYW51cCBpbiBD
U1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblNob3J0aGFuZCgpOyB0aGUgZXhpc3RpbmcgY29kZQor
ICAgICAgICB3YXMgbm90IHNhZmUgd2l0aCByZXNwZWN0IHRvIGFkZGluZyBuZXcgcHJvcGVydGll
cyB0byB0aGUgc2hvcnRoYW5kLgorCisgICAgICAgIFRlc3Q6IHRyYW5zaXRpb25zL2xvbmdoYW5k
LXZzLXNob3J0aGFuZC1pbml0aWFsLmh0bWwKKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQp
OgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUV4cGFuZGluZzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUV4cGFuZGluZzo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUV4cGFuZGluZzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlJbml0aWFsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0OjphcHBseVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlOdW1iZXI6OmFwcGx5VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVN0eWxlSW1hZ2U6OmFwcGx5VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5SW5oZXJpdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseUluaXRpYWxWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpcmVjdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5TGVuZ3RoOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlTdHJpbmc6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUJvcmRlclJhZGl1czo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5RmlsbExheWVyOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5RmlsbExheWVyOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RmlsbExheWVyOjphcHBseVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoOjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseUluaGVyaXRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlJbml0aWFsVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseUluaGVyaXRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5SW5pdGlhbFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFdlaWdodDo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6OmFw
cGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250VmFy
aWFudExpZ2F0dXJlczo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjo6YXBwbHlJbmhlcml0VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI6
OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3Jk
ZXJJbWFnZU1vZGlmaWVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlCb3JkZXJJbWFnZVNvdXJjZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5Q291bnRlcjo6ZW1wdHlGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUNvdW50ZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUN1cnNvcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUN1cnNvcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUN1cnNvcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5VGV4dEFsaWduOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlUZXh0RGVjb3JhdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVBhZ2VTaXplOjphcHBseVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZTo6YXBwbHlJbmhlcml0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxl
OjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4
dEVtcGhhc2lzU3R5bGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUFuaW1hdGlvbjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUFuaW1hdGlvbjo6YXBwbHlJbml0aWFsVmFsdWUpOiBJZiB0aGUgcHJvcGVydHkg
aXMKKyAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHksIGNhbGwgc2V0
QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVBbGwpLgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5T3V0bGluZVN0eWxlOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5T3V0bGluZVN0eWxlOjphcHBseUluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5T3V0bGluZVN0eWxlOjphcHBseVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlSZXNpemU6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVZlcnRpY2FsQWxpZ246OmFwcGx5VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjphcHBseUluaGVyaXRW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXNwZWN0UmF0aW86OmFwcGx5
SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRp
bzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6YXBw
bHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OmFw
cGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5OjphcHBs
eUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxheTo6
YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpc3Bs
YXk6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXBQYXRo
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlXcmFwU2hhcGU6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1
dGlvbjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUltYWdlUmVzb2x1dGlvbjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgICogY3Nz
L1N0eWxlQnVpbGRlci5oOgorICAgICAgICAoUHJvcGVydHlIYW5kbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UHJvcGVydHlIYW5kbGVyOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpQcm9wZXJ0eUhhbmRsZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdCk6IFBhc3MgaW4gdGhlIHByb3BlcnR5IElELgorCiAyMDEyLTA5LTE0
ICBSb2IgQnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIFVzZSBT
dHJpbmdCdWlsZGVyIG1vcmUgaW4gQmxhY2tCZXJyeSBSU1MgY2xhc3NlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcAppbmRleCAwOWViNjM2NjZmNDk1MzdkYjI1YTU4YjhkYjFkYjYwZjkzYTEyMGY3
Li43Zjg1MDVjOWE3NzUzMjBiMmIzMzQ5ODBmMjMxNTRmMmYyZTUxOTllIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcApAQCAtMzIwMCwxOCArMzIwMCwxOSBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VBbmltYXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAKIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgY29uc3QgdW5z
aWduZWQgbnVtUHJvcGVydGllcyA9IHdlYmtpdFRyYW5zaXRpb25TaG9ydGhhbmQoKS5sZW5ndGgo
KTsKKyAgICBjb25zdCB1bnNpZ25lZCBudW1Qcm9wZXJ0aWVzID0gNDsKKyAgICBBU1NFUlQobnVt
UHJvcGVydGllcyA9PSB3ZWJraXRUcmFuc2l0aW9uU2hvcnRoYW5kKCkubGVuZ3RoKCkpOwogCiAg
ICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9u
KTsKIAotICAgIGJvb2wgcGFyc2VkUHJvcGVydHlbXSA9IHsgZmFsc2UsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UgfTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlc1s0XTsKKyAgICBib29sIHBhcnNl
ZFByb3BlcnR5W251bVByb3BlcnRpZXNdID0geyBmYWxzZSB9OworICAgIFJlZlB0cjxDU1NWYWx1
ZT4gdmFsdWVzW251bVByb3BlcnRpZXNdOwogCiAgICAgdW5zaWduZWQgaTsKICAgICB3aGlsZSAo
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewogICAgICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICAgICAgaWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJz
ZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsLT5pVmFsdWUgPT0gJywnKSB7Ci0gICAgICAgICAgICAv
LyBXZSBoaXQgdGhlIGVuZC4gIEZpbGwgaW4gYWxsIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUg
aW5pdGlhbCB2YWx1ZS4KKyAgICAgICAgICAgIC8vIFdlIGhpdCB0aGUgZW5kLiBGaWxsIGluIGFs
bCByZW1haW5pbmcgdmFsdWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCiAgICAgICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3Bl
cnRpZXM7ICsraSkgewogICAgICAgICAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCmluZGV4IGVkMGExNWZiYzNmZDBmMmE1MWJiNzk3
NzJjMDdiOWY0NDY1ZGQ0NmUuLjE2NzhjYjI5M2QwOGQwNWUyYTVmYTFiYjU0ZGJmZTg5ZTRkZTY1
MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCkBAIC01Niw3ICs1Niw3IEBAIGNs
YXNzIEFwcGx5UHJvcGVydHlFeHBhbmRpbmcgewogcHVibGljOgogCiAgICAgdGVtcGxhdGUgPENT
U1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIGlubGluZSB2b2lkIGFw
cGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUludmFs
aWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC02NCwyMCArNjQsMjAgQEAgcHVibGljOgogICAg
ICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHls
ZUJ1aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gdGFi
bGUucHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShzdHlsZVJlc29sdmVyKTsKKyAg
ICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNv
bHZlcik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIp
CiAgICAgewotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxvbmU+KHN0eWxlUmVzb2x2ZXIpOwot
ICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0d28+KHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBh
cHBseUluaGVyaXRWYWx1ZTx0aHJlZT4oc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5o
ZXJpdFZhbHVlPGZvdXI+KHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1
ZTxmaXZlPihzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8b25lPihw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8dHdv
Pihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8
dGhyZWU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBhcHBseUluaGVyaXRW
YWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbmhl
cml0VmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CiAgICAgfQogCiAgICAg
dGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIGlu
bGluZSB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQ
cm9wZXJ0eUludmFsaWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC04NSwyMCArODUsMjAgQEAg
cHVibGljOgogICAgICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVy
OjpzaGFyZWRTdHlsZUJ1aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBo
YW5kbGVyID0gdGFibGUucHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIu
aXNWYWxpZCgpKQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShzdHlsZVJl
c29sdmVyKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlcik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFs
VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxvbmU+KHN0eWxl
UmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTx0d28+KHN0eWxlUmVzb2x2ZXIp
OwotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTx0aHJlZT4oc3R5bGVSZXNvbHZlcik7Ci0gICAg
ICAgIGFwcGx5SW5pdGlhbFZhbHVlPGZvdXI+KHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBs
eUluaXRpYWxWYWx1ZTxmaXZlPihzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbml0aWFs
VmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbml0
aWFsVmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJ
bml0aWFsVmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBh
cHBseUluaXRpYWxWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAg
ICAgYXBwbHlJbml0aWFsVmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGlu
ZSB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5SW52YWxpZCkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTEwNiwxOSArMTA2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3Qg
U3R5bGVCdWlsZGVyJiB0YWJsZSA9IFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7
CiAgICAgICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3BlcnR5
SGFuZGxlcihpZCk7CiAgICAgICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAg
IGhhbmRsZXIuYXBwbHlWYWx1ZShzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgICAgICBo
YW5kbGVyLmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIWV4cGFuZFZhbHVlKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIGFwcGx5VmFsdWU8b25lPihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7
Ci0gICAgICAgIGFwcGx5VmFsdWU8dHdvPihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgICAg
IGFwcGx5VmFsdWU8dGhyZWU+KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgYXBwbHlW
YWx1ZTxmb3VyPihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgICAgIGFwcGx5VmFsdWU8Zml2
ZT4oc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICBhcHBseVZhbHVlPG9uZT4ocHJvcGVy
dHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICBhcHBseVZhbHVlPHR3bz4ocHJv
cGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICBhcHBseVZhbHVlPHRocmVl
Pihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8
Zm91cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICBhcHBseVZh
bHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKICAgICB9CiAgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlI
YW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1
ZSk7IH0KIH07CkBAIC0xMjksOSArMTI5LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNl
dFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgU2V0dGVyVHlwZSB2YWx1ZSkgeyAoc3R5bGUtPipz
ZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIEdldHRlclR5cGUgdmFsdWUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPipnZXR0ZXJGdW5jdGlvbikoKTsgfQog
ICAgIHN0YXRpYyBJbml0aWFsVHlwZSBpbml0aWFsKCkgeyByZXR1cm4gKCppbml0aWFsRnVuY3Rp
b24pKCk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKSB7IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHZhbHVl
KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgaW5pdGlhbCgpKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoU3R5bGVSZXNvbHZlciosIENTU1ZhbHVlKikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikgeyBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCB2YWx1ZShzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSB7IHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIGluaXRpYWwoKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqLCBDU1NWYWx1ZSopIHsgfQogICAg
IHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5
SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFs
dWUpOyB9CiB9OwogCkBAIC0xMzksNyArMTM5LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEdldHRl
clR5cGUsIEdldHRlclR5cGUgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QK
IGNsYXNzIEFwcGx5UHJvcGVydHlEZWZhdWx0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBz
ZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFNldHRlclR5cGUgdmFsdWUpIHsgKHN0eWxlLT4q
c2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCiAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAq
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpOwpAQCAtMTU1LDcgKzE1NSw3
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOdW1iZXJUeXBlLCBOdW1iZXJUeXBlIChSZW5kZXJTdHls
ZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0CiBjbGFzcyBBcHBseVByb3BlcnR5TnVtYmVyIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIE51
bWJlclR5cGUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMTc2LDcgKzE3Niw3IEBAIHB1YmxpYzoKIHRlbXBsYXRlIDxTdHlsZUltYWdlKiAoUmVu
ZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXJGdW5jdGlvbikoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiksIFN0eWxlSW1hZ2UqICgqaW5p
dGlhbEZ1bmN0aW9uKSgpLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5PgogY2xhc3MgQXBwbHlQcm9w
ZXJ0eVN0eWxlSW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2Uo
cHJvcGVydHksIHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgeyAo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5z
dHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxl
ciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CiAgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVy
ID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPFN0eWxlSW1hZ2UqLCBnZXR0ZXJGdW5jdGlvbiwg
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiwgc2V0dGVyRnVuY3Rpb24sIFN0eWxlSW1hZ2UqLCBpbml0
aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7CkBAIC0xOTMsNyArMTkzLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBib29sIGhhc0F1dG8oUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiAo
c3R5bGUtPipoYXNBdXRvRnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMgdm9pZCBzZXRBdXRvKFJl
bmRlclN0eWxlKiBzdHlsZSkgeyAoc3R5bGUtPipzZXRBdXRvRnVuY3Rpb24pKCk7IH0KIAotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7CiAgICAgICAgIGlmIChoYXNBdXRvKHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKQogICAgICAgICAgICAgc2V0QXV0byhzdHlsZVJl
c29sdmVyLT5zdHlsZSgpKTsKQEAgLTIwMSw5ICsyMDEsOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCB2YWx1ZShzdHlsZVJlc29sdmVyLT5w
YXJlbnRTdHlsZSgpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgeyBzZXRBdXRvKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgeyBzZXRBdXRvKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCkpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTIyNywyMiArMjI3LDIyIEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNp
b24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IEF1dG9Db252ZXJz
aW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgfQog
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsK
ICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKTsKICAgICAgICAgaWYgKCFwYXJlbnRTdHlsZS0+aGFzQ2xpcCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGFwcGx5SW5pdGlhbFZhbHVlKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAg
cmV0dXJuIGFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwogICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKHBhcmVudFN0eWxlLT5jbGlwVG9w
KCksIHBhcmVudFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKSwg
cGFyZW50U3R5bGUtPmNsaXBMZWZ0KCkpOwogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRIYXNDbGlwKHRydWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlh
bFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKICAgICB7CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAoTGVuZ3Ro
KCksIExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkpOwogICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3NiwyNiAr
Mjc2LDI2IEBAIHRlbXBsYXRlIDxDb2xvckluaGVyaXQgaW5oZXJpdENvbG9yRnJvbVBhcmVudCwK
ICAgICAgICAgICBDb2xvciAoKmluaXRpYWxGdW5jdGlvbikoKSA9ICZkZWZhdWx0SW5pdGlhbENv
bG9yPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvbG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCiAgICAgewogICAgICAgICAvLyBWaXNpdGVkIGxpbmsgc3R5bGUgY2Fu
IG5ldmVyIGV4cGxpY2l0bHkgaW5oZXJpdCBmcm9tIHBhcmVudCB2aXNpdGVkIGxpbmsgc3R5bGUg
c28gbm8gc2VwYXJhdGUgZ2V0dGVycyBhcmUgbmVlZGVkLgogICAgICAgICBDb2xvciBjb2xvciA9
IChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT4qZ2V0dGVyRnVuY3Rpb24pKCk7CiAgICAg
ICAgIGFwcGx5Q29sb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xv
ciA6IChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT4qZGVmYXVsdEZ1bmN0aW9uKSgpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewogICAgICAgICBh
cHBseUNvbG9yVmFsdWUoc3R5bGVSZXNvbHZlciwgaW5pdGlhbEZ1bmN0aW9uKCkpOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAg
IGlmIChpbmhlcml0Q29sb3JGcm9tUGFyZW50ICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQotICAgICAgICAgICAgYXBwbHlJbmhlcml0VmFsdWUo
c3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBhcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlE
LCBzdHlsZVJlc29sdmVyKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoc3R5bGVS
ZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCiAgICAgICAgICAgICAgICAg
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+
Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpKTsKQEAgLTMxOCw5ICszMTgs
OSBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8VGV4dERpcmVjdGlvbiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbiko
VGV4dERpcmVjdGlvbiksIFRleHREaXJlY3Rpb24gKCppbml0aWFsRnVuY3Rpb24pKCk+CiBjbGFz
cyBBcHBseVByb3BlcnR5RGlyZWN0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAg
QXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dERpcmVjdGlvbiwgZ2V0dGVyRnVuY3Rpb24sIFRleHRE
aXJlY3Rpb24sIHNldHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9uLCBpbml0aWFsRnVuY3Rpb24+
OjphcHBseVZhbHVlKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0
eURlZmF1bHQ8VGV4dERpcmVjdGlvbiwgZ2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIHNl
dHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9uLCBpbml0aWFsRnVuY3Rpb24+OjphcHBseVZhbHVl
KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKICAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKTsKICAgICAgICAgaWYgKGVsZW1lbnQgJiYg
c3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpKQogICAgICAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9u
U2V0T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7CkBAIC0zNDksNyArMzQ5LDcgQEAgdGVtcGxhdGUg
PExlbmd0aCAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwKIGNsYXNzIEFw
cGx5UHJvcGVydHlMZW5ndGggewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJl
bmRlclN0eWxlKiBzdHlsZSwgTGVuZ3RoIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9u
KSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTQwNCw3ICs0MDQsNyBAQCB0ZW1wbGF0ZSA8U3RyaW5nSWRl
bnRCZWhhdmlvciBpZGVudEJlaGF2aW9yLCBjb25zdCBBdG9taWNTdHJpbmcmIChSZW5kZXJTdHls
ZTo6KgogY2xhc3MgQXBwbHlQcm9wZXJ0eVN0cmluZyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
KSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQyNiw3ICs0
MjYsNyBAQCB0ZW1wbGF0ZSA8TGVuZ3RoU2l6ZSAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlv
bikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OgogY2xhc3MgQXBwbHlQcm9wZXJ0eUJvcmRl
clJhZGl1cyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUq
IHN0eWxlLCBMZW5ndGhTaXplIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1
ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTUwMiw3ICs1MDIsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKICAg
ICAgICAgICB2b2lkIChDU1NUb1N0eWxlTWFwOjoqbWFwRmlsbEZ1bmN0aW9uKShDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUZpbGxMYXll
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKICAgICAg
ICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vz
c0xheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICBGaWxsTGF5ZXIqIHByZXZDaGlsZCA9IDA7CkBA
IC01MjYsNyArNTI2LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKICAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQg
PSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwogICAg
ICAgICAoY3VyckNoaWxkLT4qc2V0RnVuY3Rpb24pKCgqaW5pdGlhbEZ1bmN0aW9uKShmaWxsTGF5
ZXJUeXBlKSk7CkBAIC01MzQsNyArNTM0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgKGN1cnJD
aGlsZC0+KmNsZWFyRnVuY3Rpb24pKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBGaWxsTGF5ZXIqIGN1
cnJDaGlsZCA9IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24p
KCk7CiAgICAgICAgIEZpbGxMYXllciogcHJldkNoaWxkID0gMDsKQEAgLTU4Miw3ICs1ODIsNyBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKIGNsYXNzIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3Ro
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUs
IFQgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAg
Ly8gbm90ZTogQ1NTUHJvcGVydHlMZXR0ZXIvV29yZFNwYWNpbmcgcmlnaHQgbm93IHNldHMgdG8g
emVybyBpZiBpdCdzIG5vdCBhIHByaW1pdGl2ZSB2YWx1ZSBmb3Igc29tZSByZWFzb24uLi4KICAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQpAQCAtNjI5LDIxICs2MjksMjEg
QEAgcHVibGljOgogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIFQgKEZvbnREZXNjcmlwdGlvbjo6Kmdl
dHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChGb250RGVzY3JpcHRpb246OipzZXR0ZXJGdW5j
dGlvbikoVCksIFQgaW5pdGlhbFZhbHVlPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUZvbnQgewogcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7CiAgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRp
b24oKTsKICAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKChzdHlsZVJl
c29sdmVyLT5wYXJlbnRGb250RGVzY3JpcHRpb24oKS4qZ2V0dGVyRnVuY3Rpb24pKCkpOwogICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewogICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKShpbml0
aWFsVmFsdWUpOwogICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTY3NSw3ICs2NzUsNyBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gc2l6ZSAvIDEuMmY7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7CiAgICAgICAgIGZsb2F0IHNpemUgPSBzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7
CiAKQEAgLTY4OSw3ICs2ODksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewogICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgIGZsb2F0IHNpemUgPSBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZv
cktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZvbnRE
ZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOwpAQCAtNzAzLDcgKzcwMyw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzc4LDcgKzc3OCw3IEBA
IHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQgewogcHVibGljOgotICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtODA4LDcgKzgwOCw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUZvbnRW
YXJpYW50TGlnYXR1cmVzIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIp
CiAgICAgewogICAgICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlw
dGlvbiA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudEZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2Ny
aXB0aW9uKCk7CkBAIC04MjAsNyArODIwLDcgQEAgcHVibGljOgogICAgICAgICBzdHlsZVJlc29s
dmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewogICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7CiAKQEAg
LTgzMSw3ICs4MzEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgRm9udERlc2Ny
aXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlw
dGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGln
YXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9u
OjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKQEAgLTg5Nyw3ICs4OTcsNyBAQCB0ZW1wbGF0ZSA8Qm9y
ZGVySW1hZ2VUeXBlIGJvcmRlckltYWdlVHlwZSwKICAgICAgICAgICB2b2lkIChSZW5kZXJTdHls
ZTo6KnNldHRlckZ1bmN0aW9uKShjb25zdCBOaW5lUGllY2VJbWFnZSYpPgogY2xhc3MgQXBwbHlQ
cm9wZXJ0eUJvcmRlckltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIE5pbmVQaWVjZUltYWdlIGlt
YWdlOwogICAgICAgICBpZiAoYm9yZGVySW1hZ2VUeXBlID09IE1hc2spCkBAIC05MjAsNyArOTIw
LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW5saW5lIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBn
ZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIHR5cGUgPT0gSW1hZ2UgPyBzdHls
ZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5tYXNrQm94SW1hZ2UoKTsgfQogICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IE5pbmVQaWVjZUlt
YWdlJiB2YWx1ZSkgeyByZXR1cm4gdHlwZSA9PSBJbWFnZSA/IHN0eWxlLT5zZXRCb3JkZXJJbWFn
ZSh2YWx1ZSkgOiBzdHlsZS0+c2V0TWFza0JveEltYWdlKHZhbHVlKTsgfQogcHVibGljOgotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7CiAgICAgICAgIE5pbmVQaWVjZUltYWdl
IGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKICAgICAgICAgc3dpdGNo
IChtb2RpZmllcikgewpAQCAtOTQwLDcgKzk0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikKICAgICB7CiAgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKICAgICAgICAgc3dpdGNoIChtb2RpZmll
cikgewpAQCAtOTY0LDcgKzk2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgTmluZVBpZWNlSW1h
Z2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSkpOwogICAgICAgICBzd2l0
Y2ggKG1vZGlmaWVyKSB7CkBAIC05OTAsNyArOTkwLDcgQEAgcHVibGljOgogdGVtcGxhdGUgPENT
U1Byb3BlcnR5SUQgaWQsIFN0eWxlSW1hZ2UqIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9u
KSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShQYXNzUmVmUHRy
PFN0eWxlSW1hZ2U+KSwgU3R5bGVJbWFnZSogKCppbml0aWFsRnVuY3Rpb24pKCk+CiBjbGFzcyBB
cHBseVByb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2UgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KSB7IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2
ZXItPnN0eWxlSW1hZ2UoaWQsIHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShzdHlsZVJl
c29sdmVyLT5zdHlsZUltYWdlKGlkLCB2YWx1ZSkpOyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFu
ZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CiAgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5k
bGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPFN0eWxlSW1hZ2UqLCBnZXR0ZXJGdW5jdGlv
biwgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiwgc2V0dGVyRnVuY3Rpb24sIFN0eWxlSW1hZ2UqLCBp
bml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7CkBAIC0xMDAyLDggKzEwMDIsOCBAQCBl
bnVtIENvdW50ZXJCZWhhdmlvciB7SW5jcmVtZW50ID0gMCwgUmVzZXR9OwogdGVtcGxhdGUgPENv
dW50ZXJCZWhhdmlvciBjb3VudGVyQmVoYXZpb3I+CiBjbGFzcyBBcHBseVByb3BlcnR5Q291bnRl
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgZW1wdHlGdW5jdGlvbihTdHlsZVJlc29sdmVy
KikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBlbXB0eUZ1bmN0aW9uKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKICAg
ICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYg
cGFyZW50TWFwID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+YWNjZXNzQ291bnRlckRp
cmVjdGl2ZXMoKTsKQEAgLTEwMTksNyArMTAxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xMDYyLDE5ICsxMDYyLDE5IEBAIHB1YmxpYzoKIAogY2xh
c3MgQXBwbHlQcm9wZXJ0eUN1cnNvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyKQogICAgIHsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29y
KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmN1cnNvcigpKTsKICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yTGlzdChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHls
ZSgpLT5jdXJzb3JzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJ
bml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
ICAgICB7CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgp
OwogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoUmVuZGVyU3R5bGU6
OmluaXRpYWxDdXJzb3IoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgp
KSB7CkBAIC0xMTA2LDcgKzExMDYsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlU
ZXh0QWxpZ24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTEzMSw3ICsxMTMxLDcgQEAgcHVibGljOgog
CiBjbGFzcyBBcHBseVByb3BlcnR5VGV4dERlY29yYXRpb24gewogcHVibGljOgotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAg
RVRleHREZWNvcmF0aW9uIHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHREZWNvcmF0aW9uKCk7
CiAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGkuaGFzTW9yZSgp
OyBpLmFkdmFuY2UoKSkgewpAQCAtMTE1MCw3ICsxMTUwLDcgQEAgcHVibGljOgogCiBjbGFzcyBB
cHBseVByb3BlcnR5TGluZUhlaWdodCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjY0LDkgKzEyNjQs
OSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVSZXNvbHZlciopIHsgfQotICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXIqKSB7IH0KLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+cmVzZXRQ
YWdlU2l6ZVR5cGUoKTsKICAgICAgICAgTGVuZ3RoIHdpZHRoOwpAQCAtMTMzNywyMSArMTMzNywy
MSBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChzdHlsZVJlc29sdmVyLT5w
YXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNGaWxsKCkpOwogICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxl
KCktPnRleHRFbXBoYXNpc01hcmsoKSk7CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+
dGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaXRpYWxWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIpCiAgICAgewogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0
RW1waGFzaXNGaWxsKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzRmlsbCgpKTsKICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhSZW5kZXJT
dHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc01hcmsoKSk7CiAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxU
ZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5p
c1ZhbHVlTGlzdCgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNf
Y2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CkBAIC0xNDE4LDcgKzE0MTgsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIEFuaW1hdGlvbkxpc3QqIGFjY2Vzc0FuaW1hdGlvbnMoUmVuZGVyU3R5bGUq
IHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPiphbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKTsgfQog
ICAgIHN0YXRpYyBjb25zdCBBbmltYXRpb25MaXN0KiBhbmltYXRpb25zKFJlbmRlclN0eWxlKiBz
dHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qaW1tdXRhYmxlQW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24p
KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7CiAgICAgICAgIEFu
aW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCkpOwogICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiBwYXJlbnRMaXN0ID0gYW5pbWF0aW9u
cyhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKTsKQEAgLTE0MzUsMTcgKzE0MzUsMTkgQEAg
cHVibGljOgogICAgICAgICAgICAgY2xlYXIobGlzdC0+YW5pbWF0aW9uKGkpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7CiAgICAgICAg
IEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCkpOwogICAgICAgICBpZiAobGlzdC0+aXNFbXB0eSgpKQogICAgICAgICAgICAgbGlzdC0+
YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwogICAgICAgICBzZXRWYWx1ZShsaXN0LT5hbmlt
YXRpb24oMCksIGluaXRpYWwoKSk7CisgICAgICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5KQorICAgICAgICAgICAgbGlzdC0+YW5pbWF0aW9u
KDApLT5zZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZUFsbCk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAxOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBjbGVh
cihsaXN0LT5hbmltYXRpb24oaSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgQW5pbWF0aW9uTGlzdCog
bGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7CiAgICAgICAg
IHNpemVfdCBjaGlsZEluZGV4ID0gMDsKQEAgLTE0NzQsMjIgKzE0NzYsMjIgQEAgcHVibGljOgog
CiBjbGFzcyBBcHBseVByb3BlcnR5T3V0bGluZVN0eWxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVy
dHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlz
QXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8s
IE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46
OmFwcGx5SW5oZXJpdFZhbHVlKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5
RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJv
cmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5SW5oZXJpdFZhbHVlKHN0eWxl
UmVzb2x2ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0
bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5k
ZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0
eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVC
b3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJl
bmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpp
bml0aWFsQm9yZGVyU3R5bGU+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJl
c29sdmVyKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRv
LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRl
clN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHls
ZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5SW5pdGlhbFZhbHVlKHN0eWxlUmVz
b2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAm
UmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNl
dE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJT
dHlsZT46OmFwcGx5SW5pdGlhbFZhbHVlKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBBcHBseVBy
b3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5
bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNB
dXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1
dG8+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAg
ICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpv
dXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGUs
IEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjphcHBseUlu
aXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0
eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0
T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxP
dXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseVZhbHVlKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAg
ICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91
dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwg
RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5VmFs
dWUoc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxP
dXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlz
QXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8s
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5VmFsdWUocHJv
cGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVm
YXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5
bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJl
c29sdmVyLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwg
JmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTE0OTcsNyArMTQ5OSw3IEBA
IHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVJlc2l6ZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xNTI3LDcgKzE1MjksNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlWZXJ0aWNh
bEFsaWduIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1NDksNyArMTU1MSw3IEBAIHB1YmxpYzoKIAog
Y2xhc3MgQXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCiAgICAgewogICAgICAgICBpZiAoIXN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCktPmhhc0FzcGVjdFJhdGlvKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTU4
LDE0ICsxNTYwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3Ioc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+YXNw
ZWN0UmF0aW9OdW1lcmF0b3IoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsVmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQogICAgIHsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0
UmF0aW8oUmVuZGVyU3R5bGU6OmluaXRpYWxIYXNBc3BlY3RSYXRpbygpKTsKICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHls
ZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7CiAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKFJlbmRlclN0eWxlOjppbml0aWFs
QXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5p
c0FzcGVjdFJhdGlvVmFsdWUoKSkgewogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0SGFzQXNwZWN0UmF0aW8oZmFsc2UpOwpAQCAtMTU5MiwxOSArMTU5NCwxOSBAQCBwcml2
YXRlOgogICAgIH0KIAogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhl
cml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAg
ICB7CiAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c2V0Wm9vbShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT56b29t
KCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7CiAgICAg
ICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAg
ICAgICBBU1NFUlQodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSk7CiAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpOwpAQCAtMTY1MCw3ICsxNjUyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhl
cml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAg
ICB7CiAgICAgICAgIEVEaXNwbGF5IGRpc3BsYXkgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHls
ZSgpLT5kaXNwbGF5KCk7CiAgICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdHlsZVJl
c29sdmVyLCBkaXNwbGF5KSkKQEAgLTE2NTgsMTIgKzE2NjAsMTIgQEAgcHVibGljOgogICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7CiAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldERpc3BsYXkoUmVuZGVyU3R5bGU6OmluaXRpYWxEaXNwbGF5KCkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMTY4Niw3ICsxNjg4LDcgQEAgdGVtcGxhdGUgPEJhc2ljU2hhcGUq
IChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZToKIGNsYXNzIEFwcGx5UHJvcGVydHlDbGlwUGF0aCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IHZh
bHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKQEAgLTE3MTAsNyArMTcxMiw3IEBAIHRlbXBsYXRlIDxCYXNpY1NoYXBlKiAoUmVuZGVyU3R5
bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6CiBjbGFzcyBB
cHBseVByb3BlcnR5V3JhcFNoYXBlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1
ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gdmFsdWUpIHsgKHN0
eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwpAQCAtMTcz
MywyMSArMTczNSwyMSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9O
KQogY2xhc3MgQXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKICAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1
bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRp
b25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJl
c29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0
aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbmhlcml0VmFsdWUoc3R5bGVSZXNvbHZl
cik7CiAgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFw
LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAs
ICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25h
cCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5oZXJp
dFZhbHVlKHN0eWxlUmVzb2x2ZXIpOwogICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8
ZmxvYXQsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxl
OjpzZXRJbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJl
c29sdXRpb24+OjphcHBseUluaGVyaXRWYWx1ZShzdHlsZVJlc29sdmVyKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewogICAgICAgICBBcHBseVByb3BlcnR5
RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVz
b2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldElt
YWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6
OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+OjphcHBseUluaXRpYWxWYWx1ZShzdHlsZVJl
c29sdmVyKTsKICAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlv
blNuYXAsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9u
U25hcCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRp
b25TbmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwPjo6YXBwbHlJ
bml0aWFsVmFsdWUoc3R5bGVSZXNvbHZlcik7CiAgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0
QmFzZTxmbG9hdCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVy
U3R5bGU6OnNldEltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbElt
YWdlUmVzb2x1dGlvbj46OmFwcGx5SW5pdGlhbFZhbHVlKHN0eWxlUmVzb2x2ZXIpOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaAppbmRleCBhYjQxYzljN2Y3ZmFmYzk1MTI1ZmIy
ZTBjOGRiM2I2ZThjOTdlMDg3Li40ZmZlODUyMzRjMTNkMGZiYjE0NDZlMDY4ODFjOWY3ZmVmYzcw
NjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCkBAIC0zNywxNCArMzcsMTQgQEAgY2xh
c3MgU3R5bGVSZXNvbHZlcjsKIAogY2xhc3MgUHJvcGVydHlIYW5kbGVyIHsKIHB1YmxpYzoKLSAg
ICB0eXBlZGVmIHZvaWQgKCpJbmhlcml0RnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXIqKTsKLSAgICB0
eXBlZGVmIHZvaWQgKCpJbml0aWFsRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXIqKTsKLSAgICB0eXBl
ZGVmIHZvaWQgKCpBcHBseUZ1bmN0aW9uKShTdHlsZVJlc29sdmVyKiwgQ1NTVmFsdWUqKTsKKyAg
ICB0eXBlZGVmIHZvaWQgKCpJbmhlcml0RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpJbml0aWFsRnVuY3Rpb24pKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpBcHBseUZ1bmN0aW9uKShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiwgQ1NTVmFsdWUqKTsKICAgICBQcm9wZXJ0eUhh
bmRsZXIoKSA6IG1faW5oZXJpdCgwKSwgbV9pbml0aWFsKDApLCBtX2FwcGx5KDApIHsgfQogICAg
IFByb3BlcnR5SGFuZGxlcihJbmhlcml0RnVuY3Rpb24gaW5oZXJpdCwgSW5pdGlhbEZ1bmN0aW9u
IGluaXRpYWwsIEFwcGx5RnVuY3Rpb24gYXBwbHkpIDogbV9pbmhlcml0KGluaGVyaXQpLCBtX2lu
aXRpYWwoaW5pdGlhbCksIG1fYXBwbHkoYXBwbHkpIHsgfQotICAgIHZvaWQgYXBwbHlJbmhlcml0
VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgY29uc3QgeyBBU1NFUlQobV9pbmhl
cml0KTsgKCptX2luaGVyaXQpKHN0eWxlUmVzb2x2ZXIpOyB9Ci0gICAgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSBjb25zdCB7IEFTU0VSVChtX2lu
aXRpYWwpOyAoKm1faW5pdGlhbCkoc3R5bGVSZXNvbHZlcik7IH0KLSAgICB2b2lkIGFwcGx5VmFs
dWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSBjb25zdCB7
IEFTU0VSVChtX2FwcGx5KTsgKCptX2FwcGx5KShzdHlsZVJlc29sdmVyLCB2YWx1ZSk7IH0KKyAg
ICB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikgY29uc3QgeyBBU1NFUlQobV9pbmhlcml0KTsgKCptX2lu
aGVyaXQpKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOyB9CisgICAgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpIGNvbnN0IHsgQVNTRVJUKG1faW5pdGlhbCk7ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlE
LCBzdHlsZVJlc29sdmVyKTsgfQorICAgIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkg
Y29uc3QgeyBBU1NFUlQobV9hcHBseSk7ICgqbV9hcHBseSkocHJvcGVydHlJRCwgc3R5bGVSZXNv
bHZlciwgdmFsdWUpOyB9CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pbmhl
cml0ICYmIG1faW5pdGlhbCAmJiBtX2FwcGx5OyB9CiAgICAgSW5oZXJpdEZ1bmN0aW9uIGluaGVy
aXRGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5oZXJpdDsgfQogICAgIEluaXRpYWxGdW5j
dGlvbiBpbml0aWFsRnVuY3Rpb24oKSB7IHJldHVybiBtX2luaXRpYWw7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCBlNTM4YTYyYjM2NWI5Y2U3Yzc0MjIwNmVlYjkwYzQ4
MDJmYmY5Y2FhLi5lNTE5N2E0ZGM2MzdlZWRkOGEyZWNjZDBiMmMzYWQ0Zjg2NjUyYmNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0zNDM5LDExICszNDM5LDExIEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gbV9zdHlsZUJ1
aWxkZXIucHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpIHsK
ICAgICAgICAgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0
VmFsdWUodGhpcyk7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKGlkLCB0
aGlzKTsKICAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgaGFuZGxlci5h
cHBseUluaXRpYWxWYWx1ZSh0aGlzKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFs
VmFsdWUoaWQsIHRoaXMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5
VmFsdWUodGhpcywgdmFsdWUpOworICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKGlkLCB0
aGlzLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1Y2M2YTkyODNj
MjNkNmRiOTEwM2JhNzc5YTFkZWU0ODY4YmE5OTAwLi43YzI0MDIyMWM1MjYzMmE0MmQyODkwNzUw
N2Q1YTY2MzM1ZDhhYWQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDktMTQgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTjog
dHJhbnNpdGlvbiBkb2VzbuKAmXQgYWx3YXlzIG92ZXJyaWRlIHRyYW5zaXRpb24tcHJvcGVydHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NjU4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCB3aXRo
IGxvbmdoYW5kIHRyYW5zaXRpb24tcHJvcGVydHkgcnVsZSwgZm9sbG93ZWQgYnkgc2hvcnRoYW5k
CisgICAgICAgIHdpdGggbWlzc2luZyBwcm9wZXJ0eSB2YWx1ZS4gVGhpcyB0ZXN0IHNob3VsZCBw
YXNzLCBhbmQgbm90IGFzc2VydC4KKworICAgICAgICAqIHRyYW5zaXRpb25zL2xvbmdoYW5kLXZz
LXNob3J0aGFuZC1pbml0aWFsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdHJhbnNp
dGlvbnMvbG9uZ2hhbmQtdnMtc2hvcnRoYW5kLWluaXRpYWwuaHRtbDogQWRkZWQuCisKIDIwMTIt
MDktMTQgIEJvIExpdSAgPGJvbGl1QGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgaW4tcGxh
Y2UgcmVsb2FkIGJlaGF2aW9yIHRvIEltYWdlc0VuYWJsZWQgc2V0dGluZwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbG9uZ2hhbmQtdnMtc2hvcnRoYW5kLWluaXRpYWwtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbG9uZ2hhbmQtdnMtc2hvcnRoYW5k
LWluaXRpYWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3YjZmYWI1MzNhYjY5Zjc0MTFlMjhj
NTMxMGZkZTI5NjliYmJlNDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9sb25naGFuZC12cy1zaG9ydGhhbmQtaW5pdGlhbC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwyIEBACitQQVNTIC0gImJhY2tncm91bmQtY29sb3IiIHByb3BlcnR5IGZvciAiYm94IiBlbGVt
ZW50IGF0IDAuNXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogMTUzLDE1MywxNTMKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbG9uZ2hhbmQtdnMtc2hvcnRoYW5kLWluaXRp
YWwuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2xvbmdoYW5kLXZzLXNob3J0aGFuZC1p
bml0aWFsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjAyZTY0ZDY0NGRmNWM4ZDVmNWU0Zjk5MTg3YjQ3N2Ez
YThmYmQxZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2xvbmdo
YW5kLXZzLXNob3J0aGFuZC1pbml0aWFsLmh0bWwKQEAgLTAsMCArMSw0NyBAQAorPCFET0NUWVBF
PgorCis8aHRtbD4KKzxoZWFkPgorICA8c3R5bGU+CisgICAgLmJveCB7CisgICAgICAgIGhlaWdo
dDogMTAwcHg7CisgICAgICAgIHdpZHRoOiAxMDBweDsKKyAgICAgICAgbWFyZ2luOiAxMHB4Owor
ICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICAgICAgLXdlYmtpdC10cmFuc2l0
aW9uLXByb3BlcnR5OiB3aWR0aDsKKyAgICB9CisgICAgCisgICAgLmJveCB7CisgICAgICAgIC13
ZWJraXQtdHJhbnNpdGlvbjogMnM7CisgICAgfQorICAgIAorICAgICNib3guZmluYWwgeworICAg
ICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKKyAgICB9CisKKyAgPC9zdHlsZT4KKyAgPHNj
cmlwdCBzcmM9InJlc291cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVscGVycy5qcyI+PC9zY3JpcHQ+
CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworICAgIGNvbnN0IGV4cGVjdGVk
VmFsdWVzID0gWworICAgICAgLy8gW3RpbWUsIGVsZW1lbnQtaWQsIHByb3BlcnR5LCBleHBlY3Rl
ZC12YWx1ZSwgdG9sZXJhbmNlXQorICAgICAgWzAuNSwgJ2JveCcsICdiYWNrZ3JvdW5kLWNvbG9y
JywgWzE1MywgMTUzLCAxNTNdLCA0XSwKKyAgICBdOworICAKKyAgICBmdW5jdGlvbiBzZXR1cFRl
c3QoKQorICAgIHsKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3gnKS5jbGFzc05h
bWUgPSAnYm94IGZpbmFsJzsKKyAgICB9CisgIAorICAgIHJ1blRyYW5zaXRpb25UZXN0KGV4cGVj
dGVkVmFsdWVzLCBzZXR1cFRlc3QsIHVzZVBhdXNlQVBJKTsKKyAgPC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKworICA8ZGl2IGlkPSJib3giIGNsYXNzPSJib3giPjwvZGl2PgorCisgIDxkaXYg
aWQ9InJlc3VsdCI+CisgIDwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="175942"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>