<?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>107734</bug_id>
          
          <creation_ts>2013-01-23 14:06:04 -0800</creation_ts>
          <short_desc>Introduce the &quot;stacking container&quot; concept.</short_desc>
          <delta_ts>2013-01-23 17:43:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</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>106142</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>vollick</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>eric</cc>
    
    <cc>noam</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>814609</commentid>
    <comment_count>0</comment_count>
    <who name="">vollick</who>
    <bug_when>2013-01-23 14:06:04 -0800</bug_when>
    <thetext>A stacking container is treated just like a stacking context. That is, it has z-order lists, it and its descendants are stacked as a unit, and when the RenderLayerCompositor does its overlap testing, the composited regions for all layer lists take effect only once the stacking container is done being processed.

This patch also adds the function RenderLayer::isStackingContainer(). Currently, this is equivalent to RenderLayer::isStackingContext(), but in future, the definition of stacking container will be broadened to encompass more than just stacking contexts.

Other than the addition of this extra function, the patch is mostly comprised of name changes. Any code that used to refer to the stacking context concept, but didn&apos;t necessarily require a stacking context in the strict, CSS-sense, was switched to refer to stacking container. No functionality was changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814611</commentid>
    <comment_count>1</comment_count>
      <attachid>184307</attachid>
    <who name="">vollick</who>
    <bug_when>2013-01-23 14:08:46 -0800</bug_when>
    <thetext>Created attachment 184307
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814756</commentid>
    <comment_count>2</comment_count>
      <attachid>184307</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-01-23 15:46:39 -0800</bug_when>
    <thetext>Comment on attachment 184307
Patch

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

&gt; Source/WebCore/rendering/RenderLayer.h:434
&gt; +    // A stacking container can have z-order lists. All stacking contexts are
&gt; +    // stacking containers, but the converse is not true.

I presume you&apos;ll amend this comment to say when it&apos;s not true, later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814853</commentid>
    <comment_count>3</comment_count>
      <attachid>184307</attachid>
    <who name="">vollick</who>
    <bug_when>2013-01-23 17:03:49 -0800</bug_when>
    <thetext>Comment on attachment 184307
Patch

(In reply to comment #2)
&gt; (From update of attachment 184307 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184307&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayer.h:434
&gt; &gt; +    // A stacking container can have z-order lists. All stacking contexts are
&gt; &gt; +    // stacking containers, but the converse is not true.
&gt; 
&gt; I presume you&apos;ll amend this comment to say when it&apos;s not true, later.

Yes. When I broaden the definition of stacking container in the next patch, I will make this comment more specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814888</commentid>
    <comment_count>4</comment_count>
      <attachid>184307</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-23 17:43:38 -0800</bug_when>
    <thetext>Comment on attachment 184307
Patch

Clearing flags on attachment: 184307

Committed r140620: &lt;http://trac.webkit.org/changeset/140620&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814889</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-23 17:43:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184307</attachid>
            <date>2013-01-23 14:08:46 -0800</date>
            <delta_ts>2013-01-23 17:43:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107734-20130123170538.patch</filename>
            <type>text/plain</type>
            <size>37426</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2M3ZTU3YzdhNTNhZTNj
NTRiN2ZiYzUyMzY1NDZkMTM2ZGRmY2E2NS4uYmEyYzVlNDM5ODVhZWUzODE3NTAxN2I1NjcxMjA2
NjQ0YWNiYzUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDEzLTAxLTIzICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEludHJvZHVjZSB0aGUg
InN0YWNraW5nIGNvbnRhaW5lciIgY29uY2VwdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzczNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEEgc3RhY2tpbmcgY29udGFpbmVyIGlzIHRyZWF0ZWQganVz
dCBsaWtlIGEgc3RhY2tpbmcgY29udGV4dC4gVGhhdAorICAgICAgICBpcywgaXQgaGFzIHotb3Jk
ZXIgbGlzdHMsIGl0IGFuZCBpdHMgZGVzY2VuZGFudHMgYXJlIHN0YWNrZWQgYXMgYQorICAgICAg
ICB1bml0LCBhbmQgd2hlbiB0aGUgUmVuZGVyTGF5ZXJDb21wb3NpdG9yIGRvZXMgaXRzIG92ZXJs
YXAgdGVzdGluZywKKyAgICAgICAgdGhlIGNvbXBvc2l0ZWQgcmVnaW9ucyBmb3IgYWxsIGxheWVy
IGxpc3RzIHRha2UgZWZmZWN0IG9ubHkgb25jZSB0aGUKKyAgICAgICAgc3RhY2tpbmcgY29udGFp
bmVyIGlzIGRvbmUgYmVpbmcgcHJvY2Vzc2VkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBh
ZGRzIHRoZSBmdW5jdGlvbiBSZW5kZXJMYXllcjo6aXNTdGFja2luZ0NvbnRhaW5lcigpLgorICAg
ICAgICBDdXJyZW50bHksIHRoaXMgaXMgZXF1aXZhbGVudCB0byBSZW5kZXJMYXllcjo6aXNTdGFj
a2luZ0NvbnRleHQoKSwKKyAgICAgICAgYnV0IGluIGZ1dHVyZSwgdGhlIGRlZmluaXRpb24gb2Yg
c3RhY2tpbmcgY29udGFpbmVyIHdpbGwgYmUgYnJvYWRlbmVkCisgICAgICAgIHRvIGVuY29tcGFz
cyBtb3JlIHRoYW4ganVzdCBzdGFja2luZyBjb250ZXh0cy4KKworICAgICAgICBPdGhlciB0aGFu
IHRoZSBhZGRpdGlvbiBvZiB0aGlzIGV4dHJhIGZ1bmN0aW9uLCB0aGUgcGF0Y2ggaXMgbW9zdGx5
CisgICAgICAgIGNvbXByaXNlZCBvZiBuYW1lIGNoYW5nZXMuIEFueSBjb2RlIHRoYXQgdXNlZCB0
byByZWZlciB0byB0aGUKKyAgICAgICAgc3RhY2tpbmcgY29udGV4dCBjb25jZXB0LCBidXQgZGlk
bid0IG5lY2Vzc2FyaWx5IHJlcXVpcmUgYSBzdGFja2luZworICAgICAgICBjb250ZXh0IGluIHRo
ZSBzdHJpY3QsIENTUy1zZW5zZSwgd2FzIHN3aXRjaGVkIHRvIHJlZmVyIHRvIHN0YWNraW5nCisg
ICAgICAgIGNvbnRhaW5lci4gTm8gZnVuY3Rpb25hbGl0eSB3YXMgY2hhbmdlZC4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckxheWVyKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmNhbkJlU3RhY2tpbmdDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnNldEhhc1Zpc2libGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpkaXJ0eTNEVHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzdGFja2luZ0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpj
b21wb3NpdGluZ0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpleHBhbmRDbGlwUmVjdEZv
ckRlc2NlbmRhbnRzQW5kUmVmbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlbW92ZUNoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVOZWVkc0NvbXBvc2l0ZWRT
Y3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBh
aW50UGFnaW5hdGVkQ2hpbGRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
aGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpkaXJ0eVpPcmRlckxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaXJ0
eVN0YWNraW5nQ29udGFpbmVyWk9yZGVyTGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmNvbGxlY3RMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVw
ZGF0ZUNvbXBvc2l0aW5nQW5kTGF5ZXJMaXN0c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjp1cGRhdGVTdGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKFJlbmRlckxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1N0YWNraW5nQ29udGFpbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpwb3NaT3JkZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpuZWdaT3JkZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojppc0RpcnR5U3RhY2tpbmdDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmNsZWFyWk9yZGVyTGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVw
ZGF0ZVpPcmRlckxpc3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhp
Y3NMYXllckdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6
Y29tcG9zaXRpbmdPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2lu
Zzo6aGFzVmlzaWJsZU5vbkNvbXBvc2l0aW5nRGVzY2VuZGFudExheWVycyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuY2xvc2luZ05vblN0YWNraW5nQ2xpcHBpbmdMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1h
cFJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNv
bXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVyVHJlZUdlb21ldHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRp
bmdEZXNjZW5kYW50R2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllckhhczNEQ29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjppc1Jvb3Rtb3N0Rml4ZWRPclN0aWNreUxheWVyKToKKwogMjAxMy0wMS0yMyAgUmFm
YWVsIFdlaW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJFR1JFU1NJ
T04ocjE0MDEwMSk6IGNhdXNlZCBkZWJ1ZyBhc3NlcnRzIGluIGZhc3QvZm9ybXMvYXNzb2NpYXRl
ZC1lbGVtZW50LWNyYXNoLmh0bWwgYW5kIGh0bWw1bGliL3J1bi10ZW1wbGF0ZS5odG1sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggNWQ2MmQ5ZjAzNjJkNTZiODJkMWUzYTFkMTJkZGM5NWQ2MTQ0MGVhNy4uN2QzNGZh
ZjNiMWY3MGQ5M2FmMGI2Yzg2OWFjOGE3ODEyNDc5MDIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDMyIEBACisyMDEzLTAxLTIzICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIEludHJvZHVjZSB0aGUgInN0YWNraW5nIGNvbnRhaW5lciIgY29uY2VwdC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzczNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgc3RhY2tpbmcg
Y29udGFpbmVyIGlzIHRyZWF0ZWQganVzdCBsaWtlIGEgc3RhY2tpbmcgY29udGV4dC4gVGhhdAor
ICAgICAgICBpcywgaXQgaGFzIHotb3JkZXIgbGlzdHMsIGl0IGFuZCBpdHMgZGVzY2VuZGFudHMg
YXJlIHN0YWNrZWQgYXMgYQorICAgICAgICB1bml0LCBhbmQgd2hlbiB0aGUgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yIGRvZXMgaXRzIG92ZXJsYXAgdGVzdGluZywKKyAgICAgICAgdGhlIGNvbXBvc2l0
ZWQgcmVnaW9ucyBmb3IgYWxsIGxheWVyIGxpc3RzIHRha2UgZWZmZWN0IG9ubHkgb25jZSB0aGUK
KyAgICAgICAgc3RhY2tpbmcgY29udGFpbmVyIGlzIGRvbmUgYmVpbmcgcHJvY2Vzc2VkLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIHRoZSBmdW5jdGlvbiBSZW5kZXJMYXllcjo6aXNT
dGFja2luZ0NvbnRhaW5lcigpLgorICAgICAgICBDdXJyZW50bHksIHRoaXMgaXMgZXF1aXZhbGVu
dCB0byBSZW5kZXJMYXllcjo6aXNTdGFja2luZ0NvbnRleHQoKSwKKyAgICAgICAgYnV0IGluIGZ1
dHVyZSwgdGhlIGRlZmluaXRpb24gb2Ygc3RhY2tpbmcgY29udGFpbmVyIHdpbGwgYmUgYnJvYWRl
bmVkCisgICAgICAgIHRvIGVuY29tcGFzcyBtb3JlIHRoYW4ganVzdCBzdGFja2luZyBjb250ZXh0
cy4KKworICAgICAgICBPdGhlciB0aGFuIHRoZSBhZGRpdGlvbiBvZiB0aGlzIGV4dHJhIGZ1bmN0
aW9uLCB0aGUgcGF0Y2ggaXMgbW9zdGx5CisgICAgICAgIGNvbXByaXNlZCBvZiBuYW1lIGNoYW5n
ZXMuIEFueSBjb2RlIHRoYXQgdXNlZCB0byByZWZlciB0byB0aGUKKyAgICAgICAgc3RhY2tpbmcg
Y29udGV4dCBjb25jZXB0LCBidXQgZGlkbid0IG5lY2Vzc2FyaWx5IHJlcXVpcmUgYSBzdGFja2lu
ZworICAgICAgICBjb250ZXh0IGluIHRoZSBzdHJpY3QsIENTUy1zZW5zZSwgd2FzIHN3aXRjaGVk
IHRvIHJlZmVyIHRvIHN0YWNraW5nCisgICAgICAgIGNvbnRhaW5lci4gTm8gZnVuY3Rpb25hbGl0
eSB3YXMgY2hhbmdlZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBmdW5j
dGlvbmFsaXR5LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6dXBk
YXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZik6CisKIDIwMTMtMDEtMjIgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgYSBwbGF0Zm9yb20gc3Ry
YXRlZ3kgZm9yIGxvY2FsIHN0b3JhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCmluZGV4IGY1NTgzYzhhMzVhZjkwOWFmNzc0
NDEzNDhhMGYwYWMzY2NjNmU2ZGIuLmM3N2QxMThkZTZlMDI4YzM2YjFjNDBlZGI4YTU4MDZkMDFl
YTliYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXll
clRyZWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckxh
eWVyVHJlZUFnZW50LmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVj
dEZvCiAgICAgaWYgKHJlbmRlckxheWVyLT5yZWZsZWN0aW9uTGF5ZXIoKSkKICAgICAgICAgY2hp
bGRyZW5BcnJheS0+YWRkSXRlbShidWlsZE9iamVjdEZvckxheWVyKHJlbmRlckxheWVyLT5yZWZs
ZWN0aW9uTGF5ZXIoKSkpOwogCi0gICAgaWYgKHJlbmRlckxheWVyLT5pc1N0YWNraW5nQ29udGV4
dCgpKSB7CisgICAgaWYgKHJlbmRlckxheWVyLT5pc1N0YWNraW5nQ29udGFpbmVyKCkpIHsKICAg
ICAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBuZWdaT3JkZXJMaXN0ID0gcmVuZGVyTGF5
ZXItPm5lZ1pPcmRlckxpc3QoKSkgewogICAgICAgICAgICAgc2l6ZV90IGxpc3RTaXplID0gbmVn
Wk9yZGVyTGlzdC0+c2l6ZSgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
aXN0U2l6ZTsgKytpKQpAQCAtMTYzLDcgKzE2Myw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZv
CiAgICAgICAgICAgICBjaGlsZHJlbkFycmF5LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTGF5ZXIo
bm9ybWFsRmxvd0xpc3QtPmF0KGkpKSk7CiAgICAgfQogICAgIAotICAgIGlmIChyZW5kZXJMYXll
ci0+aXNTdGFja2luZ0NvbnRleHQoKSkgeworICAgIGlmIChyZW5kZXJMYXllci0+aXNTdGFja2lu
Z0NvbnRhaW5lcigpKSB7CiAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogcG9zWk9y
ZGVyTGlzdCA9IHJlbmRlckxheWVyLT5wb3NaT3JkZXJMaXN0KCkpIHsKICAgICAgICAgICAgIHNp
emVfdCBsaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3QtPnNpemUoKTsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCmluZGV4IDllMjk5MmEzN2EzOTJkYTlkZTE3MzE5NjE4MDNjZWQ1Y2Jj
Yzg2NDYuLjhjNGJmMzQ0MGE4MjY1ZWJkYzZmNThiNmY2MzRiNTFmZTc4MWMzOTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMTk2LDkgKzE5Niw5IEBAIFJl
bmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZW5kZXJlcikK
ICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCk7CiAgICAg
bV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpOwogCi0g
ICAgLy8gTm9uLXN0YWNraW5nIGNvbnRleHRzIHNob3VsZCBoYXZlIGVtcHR5IHotb3JkZXIgbGlz
dHMuIEFzIHRoaXMgaXMgYWxyZWFkeSB0aGUgY2FzZSwKKyAgICAvLyBOb24tc3RhY2tpbmcgY29u
dGFpbmVycyBzaG91bGQgaGF2ZSBlbXB0eSB6LW9yZGVyIGxpc3RzLiBBcyB0aGlzIGlzIGFscmVh
ZHkgdGhlIGNhc2UsCiAgICAgLy8gdGhlcmUgaXMgbm8gbmVlZCB0byBkaXJ0eSAvIHJlY29tcHV0
ZSB0aGVzZSBsaXN0cy4KLSAgICBtX3pPcmRlckxpc3RzRGlydHkgPSBpc1N0YWNraW5nQ29udGV4
dCgpOworICAgIG1fek9yZGVyTGlzdHNEaXJ0eSA9IGlzU3RhY2tpbmdDb250YWluZXIoKTsKIAog
ICAgIFNjcm9sbGFibGVBcmVhOjpzZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShm
YWxzZSk7CiAKQEAgLTUyMiwxMCArNTIyLDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoKSBjb25zdAogICAgICAgICAm
JiByZW5kZXJlcigpLT5mcmFtZSgpLT5wYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoKTsKIH0KIAotLy8gSWYgd2UgYXJlIGEg
c3RhY2tpbmcgY29udGV4dCwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgZGV0ZXJtaW5lIGlmIG91
cgorLy8gSWYgd2UgYXJlIGEgc3RhY2tpbmcgY29udGFpbmVyLCB0aGVuIHRoaXMgZnVuY3Rpb24g
d2lsbCBkZXRlcm1pbmUgaWYgb3VyCiAvLyBkZXNjZW5kYW50cyBmb3IgYSBjb250aWd1b3VzIGJs
b2NrIGluIHN0YWNraW5nIG9yZGVyLiBUaGlzIGlzIHJlcXVpcmVkIGluCi0vLyBvcmRlciBmb3Ig
YW4gZWxlbWVudCB0byBiZSBzYWZlbHkgcHJvbW90ZWQgdG8gYSBzdGFja2luZyBjb250ZXh0LiBJ
dCBpcyBzYWZlCi0vLyB0byBiZWNvbWUgYSBzdGFja2luZyBjb250ZXh0IGlmIHRoaXMgY2hhbmdl
IHdvdWxkIG5vdCBhbHRlciB0aGUgc3RhY2tpbmcKKy8vIG9yZGVyIGZvciBhbiBlbGVtZW50IHRv
IGJlIHNhZmVseSBwcm9tb3RlZCB0byBhIHN0YWNraW5nIGNvbnRhaW5lci4gSXQgaXMgc2FmZQor
Ly8gdG8gYmVjb21lIGEgc3RhY2tpbmcgY29udGFpbmVyIGlmIHRoaXMgY2hhbmdlIHdvdWxkIG5v
dCBhbHRlciB0aGUgc3RhY2tpbmcKIC8vIG9yZGVyIG9mIGxheWVycyBvbiB0aGUgcGFnZS4gVGhh
dCBjYW4gb25seSBoYXBwZW4gaWYgYSBub24tZGVzY2VuZGFudCBhcHBlYXIKIC8vIGJldHdlZW4g
dXMgYW5kIG91ciBkZXNjZW5kYW50cyBpbiBzdGFja2luZyBvcmRlci4gSGVyZSdzIGFuIGV4YW1w
bGU6CiAvLwpAQCAtNTM4LDggKzUzOCw4IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoKSBjb25zdAogLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDUKIC8vCiAvLyBJJ3ZlIGxhYmVsZWQgb3VyIG5vcm1h
bCBmbG93IGRlc2NlbmRhbnRzIEEsIEIsIEMsIGFuZCBELCBvdXIgc3RhY2tpbmcKLS8vIGNvbnRl
eHQgZGVzY2VuZGFudHMgd2l0aCB0aGVpciB6IGluZGljZXMsIGFuZCB1cyB3aXRoICd0aGlzJyAo
d2UncmUgYQotLy8gc3RhY2tpbmcgY29udGV4dCBhbmQgb3VyIHpJbmRleCBkb2Vzbid0IG1hdHRl
ciBoZXJlKS4gVGhlc2Ugbm9kZXMgYXBwZWFyIGluCisvLyBjb250YWluZXIgZGVzY2VuZGFudHMg
d2l0aCB0aGVpciB6IGluZGljZXMsIGFuZCB1cyB3aXRoICd0aGlzJyAod2UncmUgYQorLy8gc3Rh
Y2tpbmcgY29udGFpbmVyIGFuZCBvdXIgekluZGV4IGRvZXNuJ3QgbWF0dGVyIGhlcmUpLiBUaGVz
ZSBub2RlcyBhcHBlYXIgaW4KIC8vIHRocmVlIGxpc3RzOiBwb3NaT3JkZXIsIG5lZ1pPcmRlciwg
YW5kIG5vcm1hbCBmbG93IChrZWVwIGluIG1pbmQgdGhhdCBub3JtYWwKIC8vIGZsb3cgbGF5ZXJz
IGRvbid0IG92ZXJsYXApLiBTbyBpZiB3ZSBhcnJhbmdlIHRoZXNlIGxpc3RzIGluIG9yZGVyIHdl
IGdldCBvdXIKIC8vIHN0YWNraW5nIG9yZGVyOgpAQCAtNTU1LDEwICs1NTUsMTAgQEAgYm9vbCBS
ZW5kZXJMYXllcjo6YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxl
ZCgpIGNvbnN0CiAvLwogLy8gTm90ZSB0aGF0IHRoZSBub3JtYWwgZmxvdyBkZXNjZW5kYW50cyBj
YW4gc2hhcmUgYW4gaW5kZXggYmVjYXVzZSB0aGV5IGRvbid0CiAvLyBzdGFjay9vdmVybGFwLiBO
b3cgb3VyIHByb2JsZW0gYmVjb21lcyB2ZXJ5IHNpbXBsZTogYSBsYXllciBjYW4gc2FmZWx5IGJl
Y29tZQotLy8gYSBzdGFja2luZyBjb250ZXh0IGlmIHRoZSBzdGFja2luZy1vcmRlciBpbmRpY2Vz
IG9mIGl0IGFuZCBpdHMgZGVzY2VuZGFudHMKKy8vIGEgc3RhY2tpbmcgY29udGFpbmVyIGlmIHRo
ZSBzdGFja2luZy1vcmRlciBpbmRpY2VzIG9mIGl0IGFuZCBpdHMgZGVzY2VuZGFudHMKIC8vIGFw
cGVhciBpbiBhIGNvbnRpZ3VvdXMgYmxvY2sgaW4gdGhlIGxpc3Qgb2Ygc3RhY2tpbmcgaW5kaWNl
cy4gVGhpcyBwcm9ibGVtCiAvLyBjYW4gYmUgc29sdmVkIHZlcnkgZWZmaWNpZW50bHkgYnkgY2Fs
Y3VsYXRpbmcgdGhlIG1pbi9tYXggc3RhY2tpbmcgaW5kaWNlcyBpbgotLy8gdGhlIHN1YnRyZWUs
IGFuZCB0aGUgbnVtYmVyIHN0YWNraW5nIGNvbnRleHQgZGVzY2VuZGFudHMuIE9uY2Ugd2UgaGF2
ZSB0aGlzCisvLyB0aGUgc3VidHJlZSwgYW5kIHRoZSBudW1iZXIgc3RhY2tpbmcgY29udGFpbmVy
IGRlc2NlbmRhbnRzLiBPbmNlIHdlIGhhdmUgdGhpcwogLy8gaW5mb3JtYXRpb24sIHdlIGtub3cg
dGhhdCB0aGUgc3VidHJlZSdzIGluZGljZXMgZm9ybSBhIGNvbnRpZ3VvdXMgYmxvY2sgaWY6CiAv
LwogLy8gICAgICAgICAgIG1heFN0YWNrSW5kZXggLSBtaW5TdGFja0luZGV4ID09IG51bVNDRGVz
Y2VuZGFudHMKQEAgLTU3Myw3ICs1NzMsNyBAQCBib29sIFJlbmRlckxheWVyOjphY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKCkgY29uc3QKIC8vICA9PT0+ICAg
ICAgICAgICAgICAgICAgICAgIDEgLSAoLTEpID09IDIKIC8vICA9PT0+ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyID09IDIKIC8vCi0vLyAgU2luY2UgdGhpcyBpcyB0cnVlLCBBIGNhbiBz
YWZlbHkgYmVjb21lIGEgc3RhY2tpbmcgY29udGV4dC4KKy8vICBTaW5jZSB0aGlzIGlzIHRydWUs
IEEgY2FuIHNhZmVseSBiZWNvbWUgYSBzdGFja2luZyBjb250YWluZXIuCiAvLyAgTm93LCBmb3Ig
bm9kZSBDIHdlIGhhdmU6CiAvLwogLy8gICBtYXhTdGFja0luZGV4ID0gNApAQCAtNTg1LDcgKzU4
NSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxv
d1Njcm9sbEVuYWJsZWQoKSBjb25zdAogLy8gID09PT4gICAgICAgICAgICAgICAgICAgICAgICAg
NCAtIDAgPT0gMgogLy8gID09PT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgPT0gMgog
Ly8KLS8vIFNpbmNlIHRoaXMgaXMgZmFsc2UsIEMgY2Fubm90IGJlIHNhZmVseSBwcm9tb3RlZCB0
byBhIHN0YWNraW5nIGNvbnRleHQuIFRoaXMKKy8vIFNpbmNlIHRoaXMgaXMgZmFsc2UsIEMgY2Fu
bm90IGJlIHNhZmVseSBwcm9tb3RlZCB0byBhIHN0YWNraW5nIGNvbnRhaW5lci4gVGhpcwogLy8g
aGFwcGVuZWQgYmVjYXVzZSBvZiB0aGUgZWxlbWVudHMgd2l0aCB6LWluZGV4IDUgYW5kIDAuIE5v
dyBpZiA1IGhhZCBiZWVuIGEKIC8vIGNoaWxkIG9mIEMgcmF0aGVyIHRoYW4gRCwgYW5kIEEgaGFk
IG5vIGNoaWxkIHdpdGggWiBpbmRleCAwLCB3ZSB3b3VsZCBoYXZlIGhhZDoKIC8vCkBAIC05MTUs
MjEgKzkxNSwyMSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVQYWdpbmF0aW9uKCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIElmIHdlJ3JlIG5vdCBub3JtYWwgZmxvdywgdGhl
biB3ZSBuZWVkIHRvIGxvb2sgZm9yIGEgbXVsdGktY29sdW1uIG9iamVjdCBiZXR3ZWVuIHVzIGFu
ZCBvdXIgc3RhY2tpbmcgY29udGV4dC4KLSAgICBSZW5kZXJMYXllciogYW5jZXN0b3JTdGFja2lu
Z0NvbnRleHQgPSBzdGFja2luZ0NvbnRleHQoKTsKKyAgICAvLyBJZiB3ZSdyZSBub3Qgbm9ybWFs
IGZsb3csIHRoZW4gd2UgbmVlZCB0byBsb29rIGZvciBhIG11bHRpLWNvbHVtbiBvYmplY3QgYmV0
d2VlbiB1cyBhbmQgb3VyIHN0YWNraW5nIGNvbnRhaW5lci4KKyAgICBSZW5kZXJMYXllciogYW5j
ZXN0b3JTdGFja2luZ0NvbnRhaW5lciA9IHN0YWNraW5nQ29udGFpbmVyKCk7CiAgICAgZm9yIChS
ZW5kZXJMYXllciogY3VyciA9IHBhcmVudCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkp
IHsKICAgICAgICAgaWYgKGN1cnItPnJlbmRlcmVyKCktPmhhc0NvbHVtbnMoKSkgewogICAgICAg
ICAgICAgbV9pc1BhZ2luYXRlZCA9IGNoZWNrQ29udGFpbmluZ0Jsb2NrQ2hhaW5Gb3JQYWdpbmF0
aW9uKHJlbmRlcmVyKCksIGN1cnItPnJlbmRlckJveCgpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBpZiAoY3VyciA9PSBhbmNlc3RvclN0YWNraW5nQ29udGV4dCkK
KyAgICAgICAgaWYgKGN1cnIgPT0gYW5jZXN0b3JTdGFja2luZ0NvbnRhaW5lcikKICAgICAgICAg
ICAgIHJldHVybjsKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmNhblNhZmVseUVzdGFi
bGlzaEFTdGFja2luZ0NvbnRleHQoKSBjb25zdAorYm9vbCBSZW5kZXJMYXllcjo6Y2FuQmVTdGFj
a2luZ0NvbnRhaW5lcigpIGNvbnN0CiB7Ci0gICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KCkgfHwg
IXN0YWNraW5nQ29udGV4dCgpKQorICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCgpIHx8ICFzdGFj
a2luZ0NvbnRhaW5lcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBtX2Rl
c2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlcjsKQEAgLTk0Nyw5ICs5NDcsOSBA
QCB2b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWaXNpYmxlQ29udGVudCgpCiAgICAgY29tcHV0ZVJl
cGFpbnRSZWN0cyhyZW5kZXJlcigpLT5jb250YWluZXJGb3JSZXBhaW50KCkpOwogICAgIGlmICgh
aXNOb3JtYWxGbG93T25seSgpKSB7CiAgICAgICAgIC8vIFdlIGRvbid0IGNvbGxlY3QgaW52aXNp
YmxlIGxheWVycyBpbiB6LW9yZGVyIGxpc3RzIGlmIHdlIGFyZSBub3QgaW4gY29tcG9zaXRpbmcg
bW9kZS4KLSAgICAgICAgLy8gQXMgd2UgYmVjYW1lIHZpc2libGUsIHdlIG5lZWQgdG8gZGlydHkg
b3VyIHN0YWNraW5nIGNvbnRleHRzIGFuY2VzdG9ycyB0byBiZSBwcm9wZXJseQorICAgICAgICAv
LyBBcyB3ZSBiZWNhbWUgdmlzaWJsZSwgd2UgbmVlZCB0byBkaXJ0eSBvdXIgc3RhY2tpbmcgY29u
dGFpbmVycyBhbmNlc3RvcnMgdG8gYmUgcHJvcGVybHkKICAgICAgICAgLy8gY29sbGVjdGVkLiBG
SVhNRTogV2hlbiBjb21wb3NpdGluZywgd2UgY291bGQgc2tpcCB0aGlzIGRpcnR5aW5nIHBoYXNl
LgotICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBzYyA9IHN0YWNraW5nQ29udGV4dCgpOyBzYzsg
c2MgPSBzYy0+c3RhY2tpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgZm9yIChSZW5kZXJMYXllciog
c2MgPSBzdGFja2luZ0NvbnRhaW5lcigpOyBzYzsgc2MgPSBzYy0+c3RhY2tpbmdDb250YWluZXIo
KSkgewogICAgICAgICAgICAgc2MtPmRpcnR5Wk9yZGVyTGlzdHMoKTsKICAgICAgICAgICAgIGlm
IChzYy0+aGFzVmlzaWJsZUNvbnRlbnQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEw
NjgsMTUgKzEwNjgsMTUgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRGVzY2VuZGFudERlcGVu
ZGVudEZsYWdzKEhhc2hTZXQ8Y29uc3QgUmVuZGVyT2JqZWN0Kj4qIG8KIAogdm9pZCBSZW5kZXJM
YXllcjo6ZGlydHkzRFRyYW5zZm9ybWVkRGVzY2VuZGFudFN0YXR1cygpCiB7Ci0gICAgUmVuZGVy
TGF5ZXIqIGN1cnIgPSBzdGFja2luZ0NvbnRleHQoKTsKKyAgICBSZW5kZXJMYXllciogY3VyciA9
IHN0YWNraW5nQ29udGFpbmVyKCk7CiAgICAgaWYgKGN1cnIpCiAgICAgICAgIGN1cnItPm1fM0RU
cmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0eSA9IHRydWU7CiAgICAgICAgIAogICAgIC8v
IFRoaXMgcHJvcGFnYXRlcyB1cCB0aHJvdWdoIHByZXNlcnZlLTNkIGhpZXJhcmNoaWVzIHRvIHRo
ZSBlbmNsb3NpbmcgZmxhdHRlbmluZyBsYXllci4KLSAgICAvLyBOb3RlIHRoYXQgcHJlc2VydmVz
M0QoKSBjcmVhdGVzIHN0YWNraW5nIGNvbnRleHQsIHNvIHdlIGNhbiBqdXN0IHJ1biB1cCB0aGUg
c3RhY2tpbmcgY29udGV4dHMuCisgICAgLy8gTm90ZSB0aGF0IHByZXNlcnZlczNEKCkgY3JlYXRl
cyBzdGFja2luZyBjb250ZXh0LCBzbyB3ZSBjYW4ganVzdCBydW4gdXAgdGhlIHN0YWNraW5nIGNv
bnRhaW5lcnMuCiAgICAgd2hpbGUgKGN1cnIgJiYgY3Vyci0+cHJlc2VydmVzM0QoKSkgewogICAg
ICAgICBjdXJyLT5tXzNEVHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVzRGlydHkgPSB0cnVlOwot
ICAgICAgICBjdXJyID0gY3Vyci0+c3RhY2tpbmdDb250ZXh0KCk7CisgICAgICAgIGN1cnIgPSBj
dXJyLT5zdGFja2luZ0NvbnRhaW5lcigpOwogICAgIH0KIH0KIApAQCAtMTIzOSwxMyArMTIzOSwx
MyBAQCBGbG9hdFBvaW50IFJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZU9yaWdpbigpIGNvbnN0CiAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChzdHlsZS0+cGVyc3BlY3Rp
dmVPcmlnaW5ZKCksIGJvcmRlckJveC5oZWlnaHQoKSkpOwogfQogCi1SZW5kZXJMYXllciogUmVu
ZGVyTGF5ZXI6OnN0YWNraW5nQ29udGV4dCgpIGNvbnN0CitSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OnN0YWNraW5nQ29udGFpbmVyKCkgY29uc3QKIHsKICAgICBSZW5kZXJMYXllciogbGF5ZXIg
PSBwYXJlbnQoKTsKLSAgICB3aGlsZSAobGF5ZXIgJiYgIWxheWVyLT5pc1N0YWNraW5nQ29udGV4
dCgpKQorICAgIHdoaWxlIChsYXllciAmJiAhbGF5ZXItPmlzU3RhY2tpbmdDb250YWluZXIoKSkK
ICAgICAgICAgbGF5ZXIgPSBsYXllci0+cGFyZW50KCk7CiAKLSAgICBBU1NFUlQoIWxheWVyIHx8
IGxheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoIWxheWVyIHx8IGxheWVy
LT5pc1N0YWNraW5nQ29udGFpbmVyKCkpOwogICAgIHJldHVybiBsYXllcjsKIH0KIApAQCAtMTI5
NSw3ICsxMjk1LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdUcmFuc2Zv
cm1lZEFuY2VzdG9yKCkgY29uc3QKIAogc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJMYXllciog
Y29tcG9zaXRpbmdDb250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQogewotICAgIHJl
dHVybiBsYXllci0+aXNOb3JtYWxGbG93T25seSgpID8gbGF5ZXItPnBhcmVudCgpIDogbGF5ZXIt
PnN0YWNraW5nQ29udGV4dCgpOworICAgIHJldHVybiBsYXllci0+aXNOb3JtYWxGbG93T25seSgp
ID8gbGF5ZXItPnBhcmVudCgpIDogbGF5ZXItPnN0YWNraW5nQ29udGFpbmVyKCk7CiB9CiAKIGlu
bGluZSBib29sIFJlbmRlckxheWVyOjpzaG91bGRSZXBhaW50QWZ0ZXJMYXlvdXQoKSBjb25zdApA
QCAtMTUwOSw3ICsxNTA5LDcgQEAgc3RhdGljIHZvaWQgZXhwYW5kQ2xpcFJlY3RGb3JEZXNjZW5k
YW50c0FuZFJlZmxlY3Rpb24oTGF5b3V0UmVjdCYgY2xpcFJlY3QsIGNvbnMKICAgICAvLyBubyBu
ZWVkIHRvIGV4YW1pbmUgY2hpbGQgbGF5ZXJzKS4KICAgICBpZiAoIWxheWVyLT5yZW5kZXJlcigp
LT5oYXNNYXNrKCkpIHsKICAgICAgICAgLy8gTm90ZTogd2UgZG9uJ3QgaGF2ZSB0byB3YWxrIHot
b3JkZXIgbGlzdHMgc2luY2UgdHJhbnNwYXJlbnQgZWxlbWVudHMgYWx3YXlzIGVzdGFibGlzaAot
ICAgICAgICAvLyBhIHN0YWNraW5nIGNvbnRleHQuICBUaGlzIG1lYW5zIHdlIGNhbiBqdXN0IHdh
bGsgdGhlIGxheWVyIHRyZWUgZGlyZWN0bHkuCisgICAgICAgIC8vIGEgc3RhY2tpbmcgY29udGFp
bmVyLiBUaGlzIG1lYW5zIHdlIGNhbiBqdXN0IHdhbGsgdGhlIGxheWVyIHRyZWUgZGlyZWN0bHku
CiAgICAgICAgIGZvciAoUmVuZGVyTGF5ZXIqIGN1cnIgPSBsYXllci0+Zmlyc3RDaGlsZCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKCFsYXll
ci0+cmVmbGVjdGlvbigpIHx8IGxheWVyLT5yZWZsZWN0aW9uTGF5ZXIoKSAhPSBjdXJyKQogICAg
ICAgICAgICAgICAgIGNsaXBSZWN0LnVuaXRlKHRyYW5zcGFyZW5jeUNsaXBCb3goY3Vyciwgcm9v
dExheWVyLCBwYWludEJlaGF2aW9yKSk7CkBAIC0xNjI0LDEwICsxNjI0LDEwIEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OmFkZENoaWxkKFJlbmRlckxheWVyKiBjaGlsZCwgUmVuZGVyTGF5ZXIqIGJlZm9y
ZUNoaWxkKQogICAgICAgICBkaXJ0eU5vcm1hbEZsb3dMaXN0KCk7CiAKICAgICBpZiAoIWNoaWxk
LT5pc05vcm1hbEZsb3dPbmx5KCkgfHwgY2hpbGQtPmZpcnN0Q2hpbGQoKSkgewotICAgICAgICAv
LyBEaXJ0eSB0aGUgei1vcmRlciBsaXN0IGluIHdoaWNoIHdlIGFyZSBjb250YWluZWQuICBUaGUg
c3RhY2tpbmdDb250ZXh0KCkgY2FuIGJlIG51bGwgaW4gdGhlCi0gICAgICAgIC8vIGNhc2Ugd2hl
cmUgd2UncmUgYnVpbGRpbmcgdXAgZ2VuZXJhdGVkIGNvbnRlbnQgbGF5ZXJzLiAgVGhpcyBpcyBv
aywgc2luY2UgdGhlIGxpc3RzIHdpbGwgc3RhcnQKKyAgICAgICAgLy8gRGlydHkgdGhlIHotb3Jk
ZXIgbGlzdCBpbiB3aGljaCB3ZSBhcmUgY29udGFpbmVkLiBUaGUgc3RhY2tpbmdDb250YWluZXIo
KSBjYW4gYmUgbnVsbCBpbiB0aGUKKyAgICAgICAgLy8gY2FzZSB3aGVyZSB3ZSdyZSBidWlsZGlu
ZyB1cCBnZW5lcmF0ZWQgY29udGVudCBsYXllcnMuIFRoaXMgaXMgb2ssIHNpbmNlIHRoZSBsaXN0
cyB3aWxsIHN0YXJ0CiAgICAgICAgIC8vIG9mZiBkaXJ0eSBpbiB0aGF0IGNhc2UgYW55d2F5Lgot
ICAgICAgICBjaGlsZC0+ZGlydHlTdGFja2luZ0NvbnRleHRaT3JkZXJMaXN0cygpOworICAgICAg
ICBjaGlsZC0+ZGlydHlTdGFja2luZ0NvbnRhaW5lclpPcmRlckxpc3RzKCk7CiAgICAgfQogCiAg
ICAgY2hpbGQtPnVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwpAQCAtMTY2OCw4ICsx
NjY4LDggQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZW1vdmVDaGlsZChSZW5kZXJMYXll
ciogb2xkQ2hpbGQpCiAgICAgaWYgKCFvbGRDaGlsZC0+aXNOb3JtYWxGbG93T25seSgpIHx8IG9s
ZENoaWxkLT5maXJzdENoaWxkKCkpIHsgCiAgICAgICAgIC8vIERpcnR5IHRoZSB6LW9yZGVyIGxp
c3QgaW4gd2hpY2ggd2UgYXJlIGNvbnRhaW5lZC4gIFdoZW4gY2FsbGVkIHZpYSB0aGUKICAgICAg
ICAgLy8gcmVhdHRhY2htZW50IHByb2Nlc3MgaW4gcmVtb3ZlT25seVRoaXNMYXllciwgdGhlIGxh
eWVyIG1heSBhbHJlYWR5IGJlIGRpc2Nvbm5lY3RlZAotICAgICAgICAvLyBmcm9tIHRoZSBtYWlu
IGxheWVyIHRyZWUsIHNvIHdlIG5lZWQgdG8gbnVsbC1jaGVjayB0aGUgfHN0YWNraW5nQ29udGV4
dHwgdmFsdWUuCi0gICAgICAgIG9sZENoaWxkLT5kaXJ0eVN0YWNraW5nQ29udGV4dFpPcmRlckxp
c3RzKCk7CisgICAgICAgIC8vIGZyb20gdGhlIG1haW4gbGF5ZXIgdHJlZSwgc28gd2UgbmVlZCB0
byBudWxsLWNoZWNrIHRoZSB8c3RhY2tpbmdDb250YWluZXJ8IHZhbHVlLgorICAgICAgICBvbGRD
aGlsZC0+ZGlydHlTdGFja2luZ0NvbnRhaW5lclpPcmRlckxpc3RzKCk7CiAgICAgfQogCiAgICAg
aWYgKChvbGRDaGlsZC0+cmVuZGVyZXIoKSAmJiBvbGRDaGlsZC0+cmVuZGVyZXIoKS0+aXNPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkpIHx8IG9sZENoaWxkLT5oYXNPdXRPZkZsb3dQb3NpdGlvbmVkRGVz
Y2VuZGFudCgpKQpAQCAtMTkwNCw3ICsxOTA0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
TmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nKCkKICAgICAgICAgbV9uZWVkc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcgPSBmYWxzZTsKICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBmb3JjZVVzZUNvbXBvc2l0
ZWRTY3JvbGxpbmcgPSBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFi
bGVkKCkKLSAgICAgICAgICAgICYmIGNhblNhZmVseUVzdGFibGlzaEFTdGFja2luZ0NvbnRleHQo
KQorICAgICAgICAgICAgJiYgY2FuQmVTdGFja2luZ0NvbnRhaW5lcigpCiAgICAgICAgICAgICAm
JiAhaGFzT3V0T2ZGbG93UG9zaXRpb25lZERlc2NlbmRhbnQoKTsKIAogI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCkBAIC0yMjE3LDkgKzIyMTcsOSBAQCB2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkKIHsKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKGNvbXBvc2l0b3IoKS0+aW5Db21w
b3NpdGluZ01vZGUoKSkgewotICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGV4dCBpcyBndWFy
YW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1heSBuZWVkCisg
ICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWluZXIgaXMgZ3VhcmFudGVlZCB0byBjb250YWlu
IGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVlZAogICAgICAgICAvLyByZXBvc2l0
aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZyb20gdGhlcmUuCi0gICAgICAg
IGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9IHN0YWNraW5nQ29udGV4dCgp
LT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKKyAgICAgICAgaWYgKFJlbmRlckxheWVy
KiBjb21wb3NpdGluZ0FuY2VzdG9yID0gc3RhY2tpbmdDb250YWluZXIoKS0+ZW5jbG9zaW5nQ29t
cG9zaXRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICBpZiAoY29tcG9zaXRvcigpLT5jb21wb3Np
dGluZ0NvbnN1bHRzT3ZlcmxhcCgpKQogICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS0+dXBk
YXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVPblNjcm9sbCwgY29tcG9zaXRp
bmdBbmNlc3Rvcik7CiAgICAgICAgICAgICBlbHNlCkBAIC0zODQyLDcgKzM4NDIsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjpwYWludFBhZ2luYXRlZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxk
TGF5ZXIsIEdyYXBoaWNzQ29udAogewogICAgIC8vIFdlIG5lZWQgdG8gZG8gbXVsdGlwbGUgcGFz
c2VzLCBicmVha2luZyB1cCBvdXIgY2hpbGQgbGF5ZXIgaW50byBzdHJpcHMuCiAgICAgVmVjdG9y
PFJlbmRlckxheWVyKj4gY29sdW1uTGF5ZXJzOwotICAgIFJlbmRlckxheWVyKiBhbmNlc3Rvckxh
eWVyID0gaXNOb3JtYWxGbG93T25seSgpID8gcGFyZW50KCkgOiBzdGFja2luZ0NvbnRleHQoKTsK
KyAgICBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciA9IGlzTm9ybWFsRmxvd09ubHkoKSA/IHBh
cmVudCgpIDogc3RhY2tpbmdDb250YWluZXIoKTsKICAgICBmb3IgKFJlbmRlckxheWVyKiBjdXJy
ID0gY2hpbGRMYXllci0+cGFyZW50KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewog
ICAgICAgICBpZiAoY3Vyci0+cmVuZGVyZXIoKS0+aGFzQ29sdW1ucygpICYmIGNoZWNrQ29udGFp
bmluZ0Jsb2NrQ2hhaW5Gb3JQYWdpbmF0aW9uKGNoaWxkTGF5ZXItPnJlbmRlcmVyKCksIGN1cnIt
PnJlbmRlckJveCgpKSkKICAgICAgICAgICAgIGNvbHVtbkxheWVycy5hcHBlbmQoY3Vycik7CkBA
IC00MzU2LDcgKzQzNTYsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RQYWdp
bmF0ZWRDaGlsZExheWVyKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0
JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIGNv
bnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9m
ZnNldCkKIHsKICAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiBjb2x1bW5MYXllcnM7Ci0gICAgUmVu
ZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIgPSBpc05vcm1hbEZsb3dPbmx5KCkgPyBwYXJlbnQoKSA6
IHN0YWNraW5nQ29udGV4dCgpOworICAgIFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyID0gaXNO
b3JtYWxGbG93T25seSgpID8gcGFyZW50KCkgOiBzdGFja2luZ0NvbnRhaW5lcigpOwogICAgIGZv
ciAoUmVuZGVyTGF5ZXIqIGN1cnIgPSBjaGlsZExheWVyLT5wYXJlbnQoKTsgY3VycjsgY3VyciA9
IGN1cnItPnBhcmVudCgpKSB7CiAgICAgICAgIGlmIChjdXJyLT5yZW5kZXJlcigpLT5oYXNDb2x1
bW5zKCkgJiYgY2hlY2tDb250YWluaW5nQmxvY2tDaGFpbkZvclBhZ2luYXRpb24oY2hpbGRMYXll
ci0+cmVuZGVyZXIoKSwgY3Vyci0+cmVuZGVyQm94KCkpKQogICAgICAgICAgICAgY29sdW1uTGF5
ZXJzLmFwcGVuZChjdXJyKTsKQEAgLTQ5MTgsNyArNDkxOCw3IEBAIEludFJlY3QgUmVuZGVyTGF5
ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVy
LCBjb25zCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQVNTRVJUKGlzU3RhY2tpbmdDb250
ZXh0KCkgfHwgKCFwb3NaT3JkZXJMaXN0KCkgfHwgIXBvc1pPcmRlckxpc3QoKS0+c2l6ZSgpKSk7
CisgICAgQVNTRVJUKGlzU3RhY2tpbmdDb250YWluZXIoKSB8fCAoIXBvc1pPcmRlckxpc3QoKSB8
fCAhcG9zWk9yZGVyTGlzdCgpLT5zaXplKCkpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAg
ICBMYXllckxpc3RNdXRhdGlvbkRldGVjdG9yIG11dGF0aW9uQ2hlY2tlcihjb25zdF9jYXN0PFJl
bmRlckxheWVyKj4odGhpcykpOwpAQCAtNTA5OSw3ICs1MDk5LDcgQEAgc3RhdGljIGlubGluZSBi
b29sIGNvbXBhcmVaSW5kZXgoUmVuZGVyTGF5ZXIqIGZpcnN0LCBSZW5kZXJMYXllciogc2Vjb25k
KQogdm9pZCBSZW5kZXJMYXllcjo6ZGlydHlaT3JkZXJMaXN0cygpCiB7CiAgICAgQVNTRVJUKG1f
bGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkKTsKLSAgICBBU1NFUlQoaXNTdGFja2luZ0NvbnRleHQo
KSk7CisgICAgQVNTRVJUKGlzU3RhY2tpbmdDb250YWluZXIoKSk7CiAKICAgICBpZiAobV9wb3Na
T3JkZXJMaXN0KQogICAgICAgICBtX3Bvc1pPcmRlckxpc3QtPmNsZWFyKCk7CkBAIC01MTE2LDkg
KzUxMTYsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpkaXJ0eVpPcmRlckxpc3RzKCkKICNlbmRpZgog
fQogCi12b2lkIFJlbmRlckxheWVyOjpkaXJ0eVN0YWNraW5nQ29udGV4dFpPcmRlckxpc3RzKCkK
K3ZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5U3RhY2tpbmdDb250YWluZXJaT3JkZXJMaXN0cygpCiB7
Ci0gICAgUmVuZGVyTGF5ZXIqIHNjID0gc3RhY2tpbmdDb250ZXh0KCk7CisgICAgUmVuZGVyTGF5
ZXIqIHNjID0gc3RhY2tpbmdDb250YWluZXIoKTsKICAgICBpZiAoc2MpCiAgICAgICAgIHNjLT5k
aXJ0eVpPcmRlckxpc3RzKCk7CiB9CkBAIC01MjA2LDggKzUyMDYsOSBAQCB2b2lkIFJlbmRlckxh
eWVyOjpjb2xsZWN0TGF5ZXJzKGJvb2wgaW5jbHVkZUhpZGRlbkxheWVycywgT3duUHRyPFZlY3Rv
cjxSZW5kZXJMYQogCiAgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAKKyAg
ICBib29sIGlzU3RhY2tpbmcgPSBpc1N0YWNraW5nQ29udGFpbmVyKCk7CiAgICAgLy8gT3ZlcmZs
b3cgbGF5ZXJzIGFyZSBqdXN0IHBhaW50ZWQgYnkgdGhlaXIgZW5jbG9zaW5nIGxheWVycywgc28g
dGhleSBkb24ndCBnZXQgcHV0IGluIHpvcmRlciBsaXN0cy4KLSAgICBib29sIGluY2x1ZGVIaWRk
ZW5MYXllciA9IGluY2x1ZGVIaWRkZW5MYXllcnMgfHwgKG1faGFzVmlzaWJsZUNvbnRlbnQgfHwg
KG1faGFzVmlzaWJsZURlc2NlbmRhbnQgJiYgaXNTdGFja2luZ0NvbnRleHQoKSkpOworICAgIGJv
b2wgaW5jbHVkZUhpZGRlbkxheWVyID0gaW5jbHVkZUhpZGRlbkxheWVycyB8fCAobV9oYXNWaXNp
YmxlQ29udGVudCB8fCAobV9oYXNWaXNpYmxlRGVzY2VuZGFudCAmJiBpc1N0YWNraW5nKSk7CiAg
ICAgaWYgKGluY2x1ZGVIaWRkZW5MYXllciAmJiAhaXNOb3JtYWxGbG93T25seSgpICYmICFyZW5k
ZXJlcigpLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkgewogICAgICAgICAvLyBEZXRlcm1pbmUgd2hp
Y2ggYnVmZmVyIHRoZSBjaGlsZCBzaG91bGQgYmUgaW4uCiAgICAgICAgIE93blB0cjxWZWN0b3I8
UmVuZGVyTGF5ZXIqPiA+JiBidWZmZXIgPSAoekluZGV4KCkgPj0gMCkgPyBwb3NCdWZmZXIgOiBu
ZWdCdWZmZXI7CkBAIC01MjIxLDggKzUyMjIsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0
TGF5ZXJzKGJvb2wgaW5jbHVkZUhpZGRlbkxheWVycywgT3duUHRyPFZlY3RvcjxSZW5kZXJMYQog
ICAgIH0KIAogICAgIC8vIFJlY3VyIGludG8gb3VyIGNoaWxkcmVuIHRvIGNvbGxlY3QgbW9yZSBs
YXllcnMsIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGVzdGFibGlzaAotICAgIC8vIGEgc3RhY2tpbmcg
Y29udGV4dC4KLSAgICBpZiAoKGluY2x1ZGVIaWRkZW5MYXllcnMgfHwgbV9oYXNWaXNpYmxlRGVz
Y2VuZGFudCkgJiYgIWlzU3RhY2tpbmdDb250ZXh0KCkpIHsKKyAgICAvLyBhIHN0YWNraW5nIGNv
bnRleHQvY29udGFpbmVyLgorICAgIGlmICgoaW5jbHVkZUhpZGRlbkxheWVycyB8fCBtX2hhc1Zp
c2libGVEZXNjZW5kYW50KSAmJiAhaXNTdGFja2luZykgewogICAgICAgICBmb3IgKFJlbmRlckxh
eWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgICAgIC8vIElnbm9yZSByZWZsZWN0aW9ucy4KICAgICAgICAgICAg
IGlmICghbV9yZWZsZWN0aW9uIHx8IHJlZmxlY3Rpb25MYXllcigpICE9IGNoaWxkKQpAQCAtNTI1
MSw3ICs1MjUyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ29tcG9zaXRpbmdBbmRMYXll
ckxpc3RzSWZOZWVkZWQoKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAg
ICBpZiAoY29tcG9zaXRvcigpLT5pbkNvbXBvc2l0aW5nTW9kZSgpKSB7Ci0gICAgICAgIGlmIChp
c0RpcnR5U3RhY2tpbmdDb250ZXh0KCkgfHwgbV9ub3JtYWxGbG93TGlzdERpcnR5KQorICAgICAg
ICBpZiAoaXNEaXJ0eVN0YWNraW5nQ29udGFpbmVyKCkgfHwgbV9ub3JtYWxGbG93TGlzdERpcnR5
KQogICAgICAgICAgICAgY29tcG9zaXRvcigpLT51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21w
b3NpdGluZ1VwZGF0ZU9uSGl0VGVzdCwgdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC01MzcyLDcgKzUzNzMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTdGFja2luZ0NvbnRl
eHRzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkUwogICAgIGJvb2wgd2Fz
U3RhY2tpbmdDb250ZXh0ID0gaXNTdGFja2luZ0NvbnRleHQob2xkU3R5bGUpOwogICAgIGJvb2wg
aXNTdGFja2luZ0NvbnRleHQgPSB0aGlzLT5pc1N0YWNraW5nQ29udGV4dCgpOwogICAgIGlmIChp
c1N0YWNraW5nQ29udGV4dCAhPSB3YXNTdGFja2luZ0NvbnRleHQpIHsKLSAgICAgICAgZGlydHlT
dGFja2luZ0NvbnRleHRaT3JkZXJMaXN0cygpOworICAgICAgICBkaXJ0eVN0YWNraW5nQ29udGFp
bmVyWk9yZGVyTGlzdHMoKTsKICAgICAgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KQogICAgICAg
ICAgICAgZGlydHlaT3JkZXJMaXN0cygpOwogICAgICAgICBlbHNlCkBAIC01MzgzLDcgKzUzODQs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTdGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNo
YW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkUwogICAgIC8vIEZJWE1FOiBSZW5kZXJMYXllciBh
bHJlYWR5IGhhbmRsZXMgdmlzaWJpbGl0eSBjaGFuZ2VzIHRocm91Z2ggb3VyIHZpc2libGl0eSBk
aXJ0eSBiaXRzLiBUaGlzIGxvZ2ljIGNvdWxkCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRlZCBhbG9u
ZyB3aXRoIHRoZSByZXN0LgogICAgIGlmIChvbGRTdHlsZS0+ekluZGV4KCkgIT0gcmVuZGVyZXIo
KS0+c3R5bGUoKS0+ekluZGV4KCkgfHwgb2xkU3R5bGUtPnZpc2liaWxpdHkoKSAhPSByZW5kZXJl
cigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkpIHsKLSAgICAgICAgZGlydHlTdGFja2luZ0NvbnRl
eHRaT3JkZXJMaXN0cygpOworICAgICAgICBkaXJ0eVN0YWNraW5nQ29udGFpbmVyWk9yZGVyTGlz
dHMoKTsKICAgICAgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KQogICAgICAgICAgICAgZGlydHla
T3JkZXJMaXN0cygpOwogICAgIH0KQEAgLTU0NzksNyArNTQ4MCw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSkKICAgICAgICAgUmVuZGVyTGF5ZXIqIHAgPSBwYXJlbnQoKTsKICAgICAgICAgaWYgKHAp
CiAgICAgICAgICAgICBwLT5kaXJ0eU5vcm1hbEZsb3dMaXN0KCk7Ci0gICAgICAgIGRpcnR5U3Rh
Y2tpbmdDb250ZXh0Wk9yZGVyTGlzdHMoKTsKKyAgICAgICAgZGlydHlTdGFja2luZ0NvbnRhaW5l
clpPcmRlckxpc3RzKCk7CiAgICAgfQogCiAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxlKCktPm92
ZXJmbG93WCgpID09IE9NQVJRVUVFICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPm1hcnF1ZWVCZWhh
dmlvcigpICE9IE1OT05FICYmIHJlbmRlcmVyKCktPmlzQm94KCkpIHsKQEAgLTU1MzMsNyArNTUz
NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKICAgICBlbHNlIGlmIChtX2JhY2tpbmcpCiAgICAg
ICAgIG1fYmFja2luZy0+dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KCk7CiAgICAgZWxzZSBp
ZiAob2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WCgpICE9IHJlbmRlcmVyKCktPnN0eWxl
KCktPm92ZXJmbG93WCgpKSB7Ci0gICAgICAgIGlmIChzdGFja2luZ0NvbnRleHQoKS0+aGFzQ29t
cG9zaXRpbmdEZXNjZW5kYW50KCkpCisgICAgICAgIGlmIChzdGFja2luZ0NvbnRhaW5lcigpLT5o
YXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoKSkKICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS0+c2V0
Q29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZCgpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCA4NmU3NDIxZjJlZmRmZjhlNzU3NmJjM2Rl
OTI0ZTE5OTE1MmZhN2Y1Li4zZDZlYWExZTJlNTk3OWNiM2M0ZmY3MjEzOGM1NzQ4MzJlNzE3ODFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtNDI3LDE4ICs0Mjcs
MjMgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsK
ICAgICB2b2lkIHJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKIAotICAgIC8vIEdldCB0aGUg
ZW5jbG9zaW5nIHN0YWNraW5nIGNvbnRleHQgZm9yIHRoaXMgbGF5ZXIuICBBIHN0YWNraW5nIGNv
bnRleHQgaXMgYSBsYXllcgotICAgIC8vIHRoYXQgaGFzIGEgbm9uLWF1dG8gei1pbmRleC4KLSAg
ICBSZW5kZXJMYXllciogc3RhY2tpbmdDb250ZXh0KCkgY29uc3Q7CisgICAgLy8gQSBzdGFja2lu
ZyBjb250ZXh0IGlzIGEgbGF5ZXIgdGhhdCBoYXMgYSBub24tYXV0byB6LWluZGV4LgogICAgIGJv
b2wgaXNTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBpc1N0YWNraW5nQ29udGV4dChy
ZW5kZXJlcigpLT5zdHlsZSgpKTsgfQogCisgICAgLy8gQSBzdGFja2luZyBjb250YWluZXIgY2Fu
IGhhdmUgei1vcmRlciBsaXN0cy4gQWxsIHN0YWNraW5nIGNvbnRleHRzIGFyZQorICAgIC8vIHN0
YWNraW5nIGNvbnRhaW5lcnMsIGJ1dCB0aGUgY29udmVyc2UgaXMgbm90IHRydWUuCisgICAgYm9v
bCBpc1N0YWNraW5nQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gaXNTdGFja2luZ0NvbnRleHQo
KTsgfQorCisgICAgLy8gR2V0cyB0aGUgZW5jbG9zaW5nIHN0YWNraW5nIGNvbnRhaW5lciBmb3Ig
dGhpcyBsYXllci4KKyAgICBSZW5kZXJMYXllciogc3RhY2tpbmdDb250YWluZXIoKSBjb25zdDsK
KwogICAgIHZvaWQgZGlydHlaT3JkZXJMaXN0cygpOwotICAgIHZvaWQgZGlydHlTdGFja2luZ0Nv
bnRleHRaT3JkZXJMaXN0cygpOworICAgIHZvaWQgZGlydHlTdGFja2luZ0NvbnRhaW5lclpPcmRl
ckxpc3RzKCk7CiAKICAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiogcG9zWk9yZGVyTGlzdCgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIW1fek9yZGVyTGlzdHNEaXJ0eSk7Ci0gICAgICAg
IEFTU0VSVChpc1N0YWNraW5nQ29udGV4dCgpIHx8ICFtX3Bvc1pPcmRlckxpc3QpOworICAgICAg
ICBBU1NFUlQoaXNTdGFja2luZ0NvbnRhaW5lcigpIHx8ICFtX3Bvc1pPcmRlckxpc3QpOwogICAg
ICAgICByZXR1cm4gbV9wb3NaT3JkZXJMaXN0LmdldCgpOwogICAgIH0KIApAQCAtNDQ3LDcgKzQ1
Miw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnWk9yZGVyTGlzdCgp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIW1fek9yZGVyTGlzdHNEaXJ0eSk7Ci0gICAg
ICAgIEFTU0VSVChpc1N0YWNraW5nQ29udGV4dCgpIHx8ICFtX25lZ1pPcmRlckxpc3QpOworICAg
ICAgICBBU1NFUlQoaXNTdGFja2luZ0NvbnRhaW5lcigpIHx8ICFtX25lZ1pPcmRlckxpc3QpOwog
ICAgICAgICByZXR1cm4gbV9uZWdaT3JkZXJMaXN0LmdldCgpOwogICAgIH0KIApAQCAtNzYwLDcg
Kzc2NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVOb3JtYWxGbG93TGlzdCgpOwogCiAg
ICAgYm9vbCBpc1N0YWNraW5nQ29udGV4dChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
IHsgcmV0dXJuICFzdHlsZS0+aGFzQXV0b1pJbmRleCgpIHx8IGlzUm9vdExheWVyKCk7IH0KLSAg
ICBib29sIGlzRGlydHlTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3pPcmRlckxp
c3RzRGlydHkgJiYgaXNTdGFja2luZ0NvbnRleHQoKTsgfQorCisgICAgYm9vbCBpc0RpcnR5U3Rh
Y2tpbmdDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBtX3pPcmRlckxpc3RzRGlydHkgJiYgaXNT
dGFja2luZ0NvbnRhaW5lcigpOyB9CiAKICAgICB2b2lkIHNldEFuY2VzdG9yQ2hhaW5IYXNTZWxm
UGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKTsKICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpbkhh
c1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1cygpOwpAQCAtOTg1LDggKzk5MSw4IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtdXN0Q29tcG9zaXRlRm9ySW5kaXJlY3RSZWFzb25zKCkgY29u
c3QgeyByZXR1cm4gbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOyB9CiAjZW5kaWYKIAotICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB6IG9yZGVyaW5nIHdvdWxkIG5vdCBjaGFuZ2UgaWYgdGhpcyBs
YXllciB3ZXJlIHRvIGVzdGFibGlzaCBhIHN0YWNraW5nIGNvbnRleHQuCi0gICAgYm9vbCBjYW5T
YWZlbHlFc3RhYmxpc2hBU3RhY2tpbmdDb250ZXh0KCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHogb3JkZXJpbmcgd291bGQgbm90IGNoYW5nZSBpZiB0aGlzIGxheWVyIHdlcmUgYSBz
dGFja2luZyBjb250YWluZXIuCisgICAgYm9vbCBjYW5CZVN0YWNraW5nQ29udGFpbmVyKCkgY29u
c3Q7CiAKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CkBAIC0xMTUzLDcgKzExNTksNyBAQCBwcml2YXRl
OgogCiBpbmxpbmUgdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJaT3JkZXJMaXN0cygpCiB7Ci0gICAg
QVNTRVJUKCFpc1N0YWNraW5nQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoIWlzU3RhY2tpbmdDb250
YWluZXIoKSk7CiAKICAgICBtX3Bvc1pPcmRlckxpc3QuY2xlYXIoKTsKICAgICBtX25lZ1pPcmRl
ckxpc3QuY2xlYXIoKTsKQEAgLTExNjQsNyArMTE3MCw3IEBAIGlubGluZSB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVaT3JkZXJMaXN0cygpCiAgICAgaWYgKCFtX3pPcmRlckxpc3RzRGlydHkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghaXNTdGFja2luZ0NvbnRleHQoKSkgeworICAgIGlm
ICghaXNTdGFja2luZ0NvbnRhaW5lcigpKSB7CiAgICAgICAgIGNsZWFyWk9yZGVyTGlzdHMoKTsK
ICAgICAgICAgbV96T3JkZXJMaXN0c0RpcnR5ID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXgg
NmU1ZGU0MjEyN2ZjMjQ5ZDg4OTZjZTllNzM4MWMzZDliMDEwNjliYi4uNTc2Zjg0M2ZlNzQ5MWE5
NjI0NjdjZTE0YWZmYTEyOTJhYzI3MjE2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTU2NSw3ICs1NjUsNyBAQCBzdGF0aWMgSW50
UmVjdCBjbGlwQm94KFJlbmRlckJveCogcmVuZGVyZXIpCiB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KCkKIHsKICAgICAvLyBJZiB3ZSBoYXZlbid0
IGJ1aWx0IHotb3JkZXIgbGlzdHMgeWV0LCB3YWl0IHVudGlsIGxhdGVyLgotICAgIGlmIChtX293
bmluZ0xheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpICYmIG1fb3duaW5nTGF5ZXItPm1fek9yZGVy
TGlzdHNEaXJ0eSkKKyAgICBpZiAobV9vd25pbmdMYXllci0+aXNTdGFja2luZ0NvbnRhaW5lcigp
ICYmIG1fb3duaW5nTGF5ZXItPm1fek9yZGVyTGlzdHNEaXJ0eSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gU2V0IHRyYW5zZm9ybSBwcm9wZXJ0eSwgaWYgaXQgaXMgbm90IGFuaW1hdGluZy4g
V2UgaGF2ZSB0byBkbyB0aGlzIGhlcmUgYmVjYXVzZSB0aGUgdHJhbnNmb3JtCkBAIC0xMjY1LDcg
KzEyNjUsNyBAQCBmbG9hdCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXBvc2l0aW5nT3BhY2l0eShm
bG9hdCByZW5kZXJlck9wYWNpdHkpIGNvbnN0CiAgICAgZm9yIChSZW5kZXJMYXllciogY3VyciA9
IG1fb3duaW5nTGF5ZXItPnBhcmVudCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsK
ICAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IHBhcmVudHMgdGhhdCBhcmUgc3RhY2tpbmcg
Y29udGV4dHMuCiAgICAgICAgIC8vIFJlY2FsbCB0aGF0IG9wYWNpdHkgY3JlYXRlcyBzdGFja2lu
ZyBjb250ZXh0LgotICAgICAgICBpZiAoIWN1cnItPmlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAg
ICAgIGlmICghY3Vyci0+aXNTdGFja2luZ0NvbnRhaW5lcigpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIGNvbXBvc2l0aW5nIGxheWVy
LCB3ZSB3YW50IHRvIGNvbXB1dGUgb3BhY2l0eQpAQCAtMTQ3NSw3ICsxNDc1LDcgQEAgYm9vbCBS
ZW5kZXJMYXllckJhY2tpbmc6Omhhc1Zpc2libGVOb25Db21wb3NpdGluZ0Rlc2NlbmRhbnRMYXll
cnMoKSBjb25zdAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fb3duaW5nTGF5ZXItPmlz
U3RhY2tpbmdDb250ZXh0KCkpIHsKKyAgICBpZiAobV9vd25pbmdMYXllci0+aXNTdGFja2luZ0Nv
bnRhaW5lcigpKSB7CiAgICAgICAgIGlmICghbV9vd25pbmdMYXllci0+aGFzVmlzaWJsZURlc2Nl
bmRhbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCAzMDljMjEyM2I0
NDZlNDA5ODczYmRkNWY4ZTYxNWNjMWNhODNjMTE5Li43NWY0MjJkMWU5OWYyMDBjMjFiNzg0MjFl
YWJhZWJiM2QwY2UwMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNzMzLDcgKzczMyw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpsYXllcldpbGxCZVJlbW92ZWQoUmVuZGVyTGF5ZXIqIHBhcmVudCwgUmVu
ZGVyTGF5ZXIqCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbmNsb3NpbmdO
b25TdGFja2luZ0NsaXBwaW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKSBjb25zdAog
ewogICAgIGZvciAoUmVuZGVyTGF5ZXIqIGN1cnIgPSBsYXllci0+cGFyZW50KCk7IGN1cnIgIT0g
MDsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5pc1N0YWNraW5n
Q29udGV4dCgpKQorICAgICAgICBpZiAoY3Vyci0+aXNTdGFja2luZ0NvbnRhaW5lcigpKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgaWYgKGN1cnItPnJlbmRlcmVyKCktPmhhc0Ns
aXBPck92ZXJmbG93Q2xpcCgpKQpAQCAtNzgwLDcgKzc4MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXBSZWN1cnNpdmUoT3ZlcmxhcE1hcCYgb3ZlcmxhcE1h
cCwgUmVuCiAgICAgTGF5ZXJMaXN0TXV0YXRpb25EZXRlY3RvciBtdXRhdGlvbkNoZWNrZXIobGF5
ZXIpOwogI2VuZGlmCiAKLSAgICBpZiAobGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpIHsKKyAg
ICBpZiAobGF5ZXItPmlzU3RhY2tpbmdDb250YWluZXIoKSkgewogICAgICAgICBpZiAoVmVjdG9y
PFJlbmRlckxheWVyKj4qIG5lZ1pPcmRlckxpc3QgPSBsYXllci0+bmVnWk9yZGVyTGlzdCgpKSB7
CiAgICAgICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBuZWdaT3JkZXJMaXN0LT5zaXplKCk7CiAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKQEAgLTc5
OCw3ICs3OTgsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFw
UmVjdXJzaXZlKE92ZXJsYXBNYXAmIG92ZXJsYXBNYXAsIFJlbgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgaWYgKGxheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKSB7CisgICAgaWYgKGxheWVyLT5p
c1N0YWNraW5nQ29udGFpbmVyKCkpIHsKICAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+
KiBwb3NaT3JkZXJMaXN0ID0gbGF5ZXItPnBvc1pPcmRlckxpc3QoKSkgewogICAgICAgICAgICAg
c2l6ZV90IGxpc3RTaXplID0gcG9zWk9yZGVyTGlzdC0+c2l6ZSgpOwogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CkBAIC04ODMsNyArODgzLDcgQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50
cyhSZW5kZXJMYXllciogYW5jZXN0b3IKIAogICAgIGJvb2wgYW55RGVzY2VuZGFudEhhczNEVHJh
bnNmb3JtID0gZmFsc2U7CiAKLSAgICBpZiAobGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpIHsK
KyAgICBpZiAobGF5ZXItPmlzU3RhY2tpbmdDb250YWluZXIoKSkgewogICAgICAgICBpZiAoVmVj
dG9yPFJlbmRlckxheWVyKj4qIG5lZ1pPcmRlckxpc3QgPSBsYXllci0+bmVnWk9yZGVyTGlzdCgp
KSB7CiAgICAgICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBuZWdaT3JkZXJMaXN0LT5zaXplKCk7
CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKQEAg
LTkxNSw3ICs5MTUsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBv
c2l0aW5nUmVxdWlyZW1lbnRzKFJlbmRlckxheWVyKiBhbmNlc3RvcgogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKGxheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKSB7CisgICAgaWYgKGxheWVy
LT5pc1N0YWNraW5nQ29udGFpbmVyKCkpIHsKICAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXll
cio+KiBwb3NaT3JkZXJMaXN0ID0gbGF5ZXItPnBvc1pPcmRlckxpc3QoKSkgewogICAgICAgICAg
ICAgc2l6ZV90IGxpc3RTaXplID0gcG9zWk9yZGVyTGlzdC0+c2l6ZSgpOwogICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CkBAIC0xMDk2LDcgKzEwOTYs
NyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJU
cmVlKFJlbmRlckxheWVyKiBsYXllciwgVmVjdAogICAgIExheWVyTGlzdE11dGF0aW9uRGV0ZWN0
b3IgbXV0YXRpb25DaGVja2VyKGxheWVyKTsKICNlbmRpZgogCi0gICAgaWYgKGxheWVyLT5pc1N0
YWNraW5nQ29udGV4dCgpKSB7CisgICAgaWYgKGxheWVyLT5pc1N0YWNraW5nQ29udGFpbmVyKCkp
IHsKICAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBuZWdaT3JkZXJMaXN0ID0gbGF5
ZXItPm5lZ1pPcmRlckxpc3QoKSkgewogICAgICAgICAgICAgc2l6ZV90IGxpc3RTaXplID0gbmVn
Wk9yZGVyTGlzdC0+c2l6ZSgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
aXN0U2l6ZTsgKytpKSB7CkBAIC0xMTE4LDcgKzExMTgsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKFJlbmRlckxheWVyKiBsYXllciwg
VmVjdAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChsYXllci0+aXNTdGFja2luZ0Nv
bnRleHQoKSkgeworICAgIGlmIChsYXllci0+aXNTdGFja2luZ0NvbnRhaW5lcigpKSB7CiAgICAg
ICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogcG9zWk9yZGVyTGlzdCA9IGxheWVyLT5wb3Na
T3JkZXJMaXN0KCkpIHsKICAgICAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IHBvc1pPcmRlckxp
c3QtPnNpemUoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7
ICsraSkgewpAQCAtMTMzNCw3ICsxMzM0LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnVwZGF0ZUxheWVyVHJlZUdlb21ldHJ5KFJlbmRlckxheWVyKiBsYXllciwgaW50IGRlcHQKICAg
ICBMYXllckxpc3RNdXRhdGlvbkRldGVjdG9yIG11dGF0aW9uQ2hlY2tlcihsYXllcik7CiAjZW5k
aWYKIAotICAgIGlmIChsYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkgeworICAgIGlmIChsYXll
ci0+aXNTdGFja2luZ0NvbnRhaW5lcigpKSB7CiAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5
ZXIqPiogbmVnWk9yZGVyTGlzdCA9IGxheWVyLT5uZWdaT3JkZXJMaXN0KCkpIHsKICAgICAgICAg
ICAgIHNpemVfdCBsaXN0U2l6ZSA9IG5lZ1pPcmRlckxpc3QtPnNpemUoKTsKICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKQEAgLTEzNDgsNyArMTM0OCw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllclRyZWVHZW9tZXRyeShS
ZW5kZXJMYXllciogbGF5ZXIsIGludCBkZXB0CiAgICAgICAgICAgICB1cGRhdGVMYXllclRyZWVH
ZW9tZXRyeShub3JtYWxGbG93TGlzdC0+YXQoaSksIGRlcHRoICsgMSk7CiAgICAgfQogICAgIAot
ICAgIGlmIChsYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkgeworICAgIGlmIChsYXllci0+aXNT
dGFja2luZ0NvbnRhaW5lcigpKSB7CiAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiog
cG9zWk9yZGVyTGlzdCA9IGxheWVyLT5wb3NaT3JkZXJMaXN0KCkpIHsKICAgICAgICAgICAgIHNp
emVfdCBsaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3QtPnNpemUoKTsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKQEAgLTEzODUsNyArMTM4NSw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0Rlc2NlbmRhbnRHZW9t
ZXRyeShSZW5kZXJMYXllciogY29tCiAgICAgTGF5ZXJMaXN0TXV0YXRpb25EZXRlY3RvciBtdXRh
dGlvbkNoZWNrZXIobGF5ZXIpOwogI2VuZGlmCiAgICAgCi0gICAgaWYgKGxheWVyLT5pc1N0YWNr
aW5nQ29udGV4dCgpKSB7CisgICAgaWYgKGxheWVyLT5pc1N0YWNraW5nQ29udGFpbmVyKCkpIHsK
ICAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBuZWdaT3JkZXJMaXN0ID0gbGF5ZXIt
Pm5lZ1pPcmRlckxpc3QoKSkgewogICAgICAgICAgICAgc2l6ZV90IGxpc3RTaXplID0gbmVnWk9y
ZGVyTGlzdC0+c2l6ZSgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0
U2l6ZTsgKytpKQpAQCAtMTM5OSw3ICsxMzk5LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnVwZGF0ZUNvbXBvc2l0aW5nRGVzY2VuZGFudEdlb21ldHJ5KFJlbmRlckxheWVyKiBjb20K
ICAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nRGVzY2VuZGFudEdlb21ldHJ5KGNvbXBvc2l0
aW5nQW5jZXN0b3IsIG5vcm1hbEZsb3dMaXN0LT5hdChpKSwgY29tcG9zaXRlZENoaWxkcmVuT25s
eSk7CiAgICAgfQogICAgIAotICAgIGlmIChsYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkgewor
ICAgIGlmIChsYXllci0+aXNTdGFja2luZ0NvbnRhaW5lcigpKSB7CiAgICAgICAgIGlmIChWZWN0
b3I8UmVuZGVyTGF5ZXIqPiogcG9zWk9yZGVyTGlzdCA9IGxheWVyLT5wb3NaT3JkZXJMaXN0KCkp
IHsKICAgICAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3QtPnNpemUoKTsK
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkKQEAgLTIw
MzMsNyArMjAzMyw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBv
c2l0aW5nRm9yUG9zaXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlCiAgICAgCiAgICAgRVBvc2l0
aW9uIHBvc2l0aW9uID0gcmVuZGVyZXItPnN0eWxlKCktPnBvc2l0aW9uKCk7CiAgICAgYm9vbCBp
c0ZpeGVkID0gcmVuZGVyZXItPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIHBvc2l0aW9uID09
IEZpeGVkUG9zaXRpb247Ci0gICAgaWYgKGlzRml4ZWQgJiYgIWxheWVyLT5pc1N0YWNraW5nQ29u
dGV4dCgpKQorICAgIGlmIChpc0ZpeGVkICYmICFsYXllci0+aXNTdGFja2luZ0NvbnRhaW5lcigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgYm9vbCBpc1N0aWNreSA9IHJlbmRl
cmVyLT5pc0luRmxvd1Bvc2l0aW9uZWQoKSAmJiBwb3NpdGlvbiA9PSBTdGlja3lQb3NpdGlvbjsK
QEAgLTI2NDIsNyArMjY0Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllckhh
czNEQ29udGVudChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpIGNvbnN0CiAgICAgTGF5ZXJMaXN0
TXV0YXRpb25EZXRlY3RvciBtdXRhdGlvbkNoZWNrZXIoY29uc3RfY2FzdDxSZW5kZXJMYXllcio+
KGxheWVyKSk7CiAjZW5kaWYKIAotICAgIGlmIChsYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkg
eworICAgIGlmIChsYXllci0+aXNTdGFja2luZ0NvbnRhaW5lcigpKSB7CiAgICAgICAgIGlmIChW
ZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnWk9yZGVyTGlzdCA9IGxheWVyLT5uZWdaT3JkZXJMaXN0
KCkpIHsKICAgICAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IG5lZ1pPcmRlckxpc3QtPnNpemUo
KTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewpA
QCAtMjY5Miw4ICsyNjkyLDggQEAgc3RhdGljIGJvb2wgaXNSb290bW9zdEZpeGVkT3JTdGlja3lM
YXllcihSZW5kZXJMYXllciogbGF5ZXIpCiAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5zdHls
ZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGZvciAoUmVuZGVyTGF5ZXIqIHN0YWNraW5nQ29udGV4dCA9IGxheWVyLT5zdGFja2lu
Z0NvbnRleHQoKTsgc3RhY2tpbmdDb250ZXh0OyBzdGFja2luZ0NvbnRleHQgPSBzdGFja2luZ0Nv
bnRleHQtPnN0YWNraW5nQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmIChzdGFja2luZ0NvbnRleHQt
PmlzQ29tcG9zaXRlZCgpICYmIHN0YWNraW5nQ29udGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKQorICAgIGZvciAoUmVuZGVyTGF5ZXIqIHN0YWNr
aW5nQ29udGFpbmVyID0gbGF5ZXItPnN0YWNraW5nQ29udGFpbmVyKCk7IHN0YWNraW5nQ29udGFp
bmVyOyBzdGFja2luZ0NvbnRhaW5lciA9IHN0YWNraW5nQ29udGFpbmVyLT5zdGFja2luZ0NvbnRh
aW5lcigpKSB7CisgICAgICAgIGlmIChzdGFja2luZ0NvbnRhaW5lci0+aXNDb21wb3NpdGVkKCkg
JiYgc3RhY2tpbmdDb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPnBvc2l0aW9uKCkgPT0g
Rml4ZWRQb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
Y3BwCmluZGV4IDc5N2FlZTM1MmIwZWIwODMyNGY1OGNhOWIzZmQyMmZiZjVjYWY5NmEuLjE3NjU0
NDJmODdhOGMzNGVhYjFkZjFmOGQ3MjdmYWE3NTJiZTA0NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApAQCAtNDgw
LDcgKzQ4MCw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYo
UmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQogICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVy
KCktPmNvbnRhaW5lcigpLT5pc1JlbmRlclZpZXcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKCFyZW5kZXJMYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICBpZiAoIXJlbmRlckxh
eWVyLT5pc1N0YWNraW5nQ29udGFpbmVyKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>