<?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>80123</bug_id>
          
          <creation_ts>2012-03-02 01:08:24 -0800</creation_ts>
          <short_desc>[BlackBerry] Upstream LayerAnimation.{cpp, h}</short_desc>
          <delta_ts>2012-03-27 19:57:04 -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>WebKit BlackBerry</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</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>73119</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Robin Cao">robin.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>arvid2.nilsson</cc>
    
    <cc>charles.wei</cc>
    
    <cc>leo.yang</cc>
    
    <cc>levin+threading</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>569405</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Cao">robin.webkit</who>
    <bug_when>2012-03-02 01:08:24 -0800</bug_when>
    <thetext>LayerAnimation is a helper class used in accelerated animations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588547</commentid>
    <comment_count>1</comment_count>
      <attachid>133971</attachid>
    <who name="Robin Cao">robin.webkit</who>
    <bug_when>2012-03-26 21:35:33 -0700</bug_when>
    <thetext>Created attachment 133971
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588766</commentid>
    <comment_count>2</comment_count>
      <attachid>133971</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-03-27 04:48:58 -0700</bug_when>
    <thetext>Comment on attachment 133971
patch

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

Looks good, but can still be improved a bit.

&gt; Source/WebCore/platform/graphics/blackberry/LayerAnimation.cpp:112
&gt; +                                        ctf-&gt;y2(),

These params can be placed in the same line.

&gt; Source/WebCore/platform/graphics/blackberry/LayerAnimation.cpp:221
&gt; +        // A trick to avoid touching the refcount of shared TransformOperations on the wrong thread

Lacks period at end of sentence.

&gt; Source/WebCore/platform/graphics/blackberry/LayerAnimation.h:24
&gt; +#include &quot;GraphicsLayer.h&quot;

Is this one needed?

&gt; Source/WebCore/platform/graphics/blackberry/LayerAnimation.h:50
&gt; +

Remove empty line.

&gt; Source/WebCore/platform/graphics/blackberry/LayerAnimation.h:58
&gt; +        // This returns a copy of the animation.

This comment does not add much info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589595</commentid>
    <comment_count>3</comment_count>
    <who name="Robin Cao">robin.webkit</who>
    <bug_when>2012-03-27 19:13:35 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 133971 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133971&amp;action=review
&gt; 
&gt; Looks good, but can still be improved a bit.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerAnimation.cpp:112
&gt; &gt; +                                        ctf-&gt;y2(),
&gt; 
&gt; These params can be placed in the same line.
&gt; 
Agree, looks better in the same line.

&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerAnimation.cpp:221
&gt; &gt; +        // A trick to avoid touching the refcount of shared TransformOperations on the wrong thread
&gt; 
&gt; Lacks period at end of sentence.
&gt; 
Added.

&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerAnimation.h:24
&gt; &gt; +#include &quot;GraphicsLayer.h&quot;
&gt; 
&gt; Is this one needed?
&gt; 
This is needed because LayerAnimation has a member variable: KeyframeValueList m_values;
And KeyframeValueList is defined in &quot;GraphicsLayer.h&quot;.

&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerAnimation.h:50
&gt; &gt; +
&gt; 
&gt; Remove empty line.
&gt; 
Fixed.

&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerAnimation.h:58
&gt; &gt; +        // This returns a copy of the animation.
&gt; 
&gt; This comment does not add much info.
Removed.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589604</commentid>
    <comment_count>4</comment_count>
      <attachid>134203</attachid>
    <who name="Robin Cao">robin.webkit</who>
    <bug_when>2012-03-27 19:37:46 -0700</bug_when>
    <thetext>Created attachment 134203
updated-patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589606</commentid>
    <comment_count>5</comment_count>
      <attachid>134203</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-03-27 19:39:29 -0700</bug_when>
    <thetext>Comment on attachment 134203
updated-patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589616</commentid>
    <comment_count>6</comment_count>
      <attachid>134203</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-27 19:56:59 -0700</bug_when>
    <thetext>Comment on attachment 134203
updated-patch

Clearing flags on attachment: 134203

Committed r112358: &lt;http://trac.webkit.org/changeset/112358&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589617</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-27 19:57:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133971</attachid>
            <date>2012-03-26 21:35:33 -0700</date>
            <delta_ts>2012-03-27 19:37:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug-80123-20120327123530.patch</filename>
            <type>text/plain</type>
            <size>22140</size>
            <attacher name="Robin Cao">robin.webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjE3MWM1MjFlOWY3MTYw
OTI5YzdlOWRmMjViNzg0MWQyNDNiODgyMS4uZDZhMmU4MzM5ZjViNThiYThlMzdiODA2NTkyMTQ2
YmEzZDBmM2VhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTAzLTI2ICBSb2Jp
biBDYW8gIDxyb2Jpbi5jYW9AdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFtCbGFja0Jl
cnJ5XSBVcHN0cmVhbSBMYXllckFuaW1hdGlvbi57Y3BwLCBofQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODAxMjMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0aWFsIHVwc3RyZWFtLCBubyBuZXcgdGVz
dHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQW5pbWF0
aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnNv
bHZlRXBzaWxvbik6CisgICAgICAgIChXZWJDb3JlOjpzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6c29sdmVTdGVwc0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
cHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6ZmV0Y2hJbnRlcnZhbEVuZHBvaW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckFuaW1hdGlvbjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJBbmltYXRpb246OmJsZW5kVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQW5pbWF0aW9uOjpibGVuZE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJBbmlt
YXRpb246OnZhbGlkYXRlVHJhbnNmb3JtTGlzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJBbmltYXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKExheWVyQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQW5p
bWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJBbmltYXRpb246OmNsb25l
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQW5pbWF0aW9uOjp+TGF5ZXJBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJBbmltYXRpb246Om5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJBbmltYXRpb246OnNldFN0YXJ0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckFuaW1hdGlvbjo6aWRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQW5p
bWF0aW9uOjppc0VxdWFsVG9BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJBbmlt
YXRpb246OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQW5pbWF0aW9uOjpwcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckFuaW1hdGlvbjo6Ym94U2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckFuaW1hdGlvbjo6dGltZU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckFuaW1hdGlvbjo6c3RhcnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQW5pbWF0
aW9uOjp2YWx1ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQW5pbWF0aW9uOjp0aW1p
bmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckFuaW1hdGlvbjo6ZHVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJBbmltYXRpb246Oml0ZXJhdGlvbkNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQW5pbWF0aW9uOjpkaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJBbmltYXRpb246OnZhbHVlQXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJB
bmltYXRpb246OkxheWVyQW5pbWF0aW9uKToKKwogMjAxMi0wMy0yNiAgU3RlcGhlbiBXaGl0ZSAg
PHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNYWtlIGZpbHRlcnMgYW5kIHRo
ZSB0aHJlYWRlZCBjb21wb3NpdG9yIHBsYXkgd2VsbCB0b2dldGhlci4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJBbmltYXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckFu
aW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZmMTU4M2RkMjc4NjgyYThmMmE2MDlkYWU5ZDUzMmU4
NmU1M2VlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMzE3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiTGF5ZXJBbmltYXRpb24uaCIKKworI2luY2x1ZGUgIklkZW50aXR5VHJhbnNmb3JtT3BlcmF0
aW9uLmgiCisjaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiVW5pdEJlemllci5oIgorCisjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBz
dGQ7CisKKy8vIEZJWE1FOiBTb21lIGZ1bmN0aW9ucyBiZWxvdyBhcmUgY29waWVkIGZyb20gQW5p
bWF0aW9uQmFzZSBhbmQgS2V5ZnJhbWVBbmltYXRpb24uCisvLyBXZSBuZWVkIHRvIHJlZmFjdG9y
IHRoZXNlIGNvZGUgdG8gaW5jcmVhc2UgY29kZSByZXVzZS4KKy8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjI5MworCisvLyBUaGUgZXBzaWxvbiB2YWx1ZSB3ZSBw
YXNzIHRvIFVuaXRCZXppZXI6OnNvbHZlIGdpdmVuIHRoYXQgdGhlIGFuaW1hdGlvbiBpcyBnb2lu
ZyB0byBydW4gb3ZlciB8ZHVyfCBzZWNvbmRzLiBUaGUgbG9uZ2VyIHRoZQorLy8gYW5pbWF0aW9u
LCB0aGUgbW9yZSBwcmVjaXNpb24gd2UgbmVlZCBpbiB0aGUgdGltaW5nIGZ1bmN0aW9uIHJlc3Vs
dCB0byBhdm9pZCB1Z2x5IGRpc2NvbnRpbnVpdGllcy4KK3N0YXRpYyBpbmxpbmUgZG91YmxlIHNv
bHZlRXBzaWxvbihkb3VibGUgZHVyYXRpb24pCit7CisgICAgcmV0dXJuIDEuMCAvICgyMDAuMCAq
IGR1cmF0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVDdWJpY0JlemllckZ1
bmN0aW9uKGRvdWJsZSBwMXgsIGRvdWJsZSBwMXksIGRvdWJsZSBwMngsIGRvdWJsZSBwMnksIGRv
dWJsZSB0LCBkb3VibGUgZHVyYXRpb24pCit7CisgICAgLy8gQ29udmVydCBmcm9tIGlucHV0IHRp
bWUgdG8gcGFyYW1ldHJpYyB2YWx1ZSBpbiBjdXJ2ZSwgdGhlbiBmcm9tCisgICAgLy8gdGhhdCB0
byBvdXRwdXQgdGltZS4KKyAgICBVbml0QmV6aWVyIGJlemllcihwMXgsIHAxeSwgcDJ4LCBwMnkp
OworICAgIHJldHVybiBiZXppZXIuc29sdmUodCwgc29sdmVFcHNpbG9uKGR1cmF0aW9uKSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlvbihpbnQgbnVtU3RlcHMs
IGJvb2wgc3RlcEF0U3RhcnQsIGRvdWJsZSB0KQoreworICAgIGlmIChzdGVwQXRTdGFydCkKKyAg
ICAgICAgcmV0dXJuIG1pbigxLjAsIChmbG9vcihudW1TdGVwcyAqIHQpICsgMSkgLyBudW1TdGVw
cyk7CisgICAgcmV0dXJuIGZsb29yKG51bVN0ZXBzICogdCkgLyBudW1TdGVwczsKK30KKworc3Rh
dGljIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVl
KGNvbnN0IEFuaW1hdGlvblZhbHVlKiBhbmltVmFsdWUsIGNvbnN0IExheWVyQW5pbWF0aW9uKiBh
bmltKQoreworICAgIGlmIChhbmltVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkpCisgICAgICAgIHJl
dHVybiBhbmltVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCk7CisgICAgaWYgKGFuaW0tPnRpbWluZ0Z1
bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBhbmltLT50aW1pbmdGdW5jdGlvbigpOworCisgICAg
cmV0dXJuIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmRlZmF1bHRUaW1pbmdGdW5jdGlvbigp
OworfQorCitzdGF0aWMgZG91YmxlIHByb2dyZXNzKGRvdWJsZSBlbGFwc2VkVGltZSwgY29uc3Qg
TGF5ZXJBbmltYXRpb24qIGxheWVyQW5pbWF0aW9uLCBkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZz
ZXQsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0ZikKK3sKKyAgICBkb3VibGUgZHVyID0gbGF5ZXJB
bmltYXRpb24tPmR1cmF0aW9uKCk7CisgICAgaWYgKGxheWVyQW5pbWF0aW9uLT5pdGVyYXRpb25D
b3VudCgpID4gMCkKKyAgICAgICAgZHVyICo9IGxheWVyQW5pbWF0aW9uLT5pdGVyYXRpb25Db3Vu
dCgpOworCisgICAgaWYgKCFsYXllckFuaW1hdGlvbi0+ZHVyYXRpb24oKSkKKyAgICAgICAgcmV0
dXJuIDEuMDsKKyAgICBpZiAobGF5ZXJBbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAwICYm
IGVsYXBzZWRUaW1lID49IGR1cikKKyAgICAgICAgcmV0dXJuIChsYXllckFuaW1hdGlvbi0+aXRl
cmF0aW9uQ291bnQoKSAlIDIpID8gMS4wIDogMC4wOworCisgICAgLy8gQ29tcHV0ZSB0aGUgZnJh
Y3Rpb25hbCB0aW1lLCB0YWtpbmcgaW50byBhY2NvdW50IGRpcmVjdGlvbi4KKyAgICAvLyBUaGVy
ZSBpcyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0ZXJhdGlvbnMsIHdlIGFzc3VtZSB0aGF0IHdl
IHdvdWxkIGhhdmUKKyAgICAvLyBzaG9ydCBjaXJjdWl0ZWQgYWJvdmUgaWYgd2Ugd2VyZSBkb25l
LgorICAgIGRvdWJsZSBmcmFjdGlvbmFsVGltZSA9IGVsYXBzZWRUaW1lIC8gbGF5ZXJBbmltYXRp
b24tPmR1cmF0aW9uKCk7CisgICAgaW50IGludGVncmFsVGltZSA9IHN0YXRpY19jYXN0PGludD4o
ZnJhY3Rpb25hbFRpbWUpOworICAgIGZyYWN0aW9uYWxUaW1lIC09IGludGVncmFsVGltZTsKKwor
ICAgIGlmICgobGF5ZXJBbmltYXRpb24tPmRpcmVjdGlvbigpID09IEFuaW1hdGlvbjo6QW5pbWF0
aW9uRGlyZWN0aW9uQWx0ZXJuYXRlKSAmJiAoaW50ZWdyYWxUaW1lICYgMSkpCisgICAgICAgIGZy
YWN0aW9uYWxUaW1lID0gMSAtIGZyYWN0aW9uYWxUaW1lOworCisgICAgaWYgKHNjYWxlICE9IDEg
fHwgb2Zmc2V0KQorICAgICAgICBmcmFjdGlvbmFsVGltZSA9IChmcmFjdGlvbmFsVGltZSAtIG9m
ZnNldCkgKiBzY2FsZTsKKworICAgIGlmICghdGYpCisgICAgICAgIHRmID0gbGF5ZXJBbmltYXRp
b24tPnRpbWluZ0Z1bmN0aW9uKCk7CisKKyAgICBpZiAodGYtPmlzQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbigpKSB7CisgICAgICAgIGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qIGN0
ZiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPih0Zik7Cisg
ICAgICAgIHJldHVybiBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24oY3RmLT54MSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0Zi0+eTEoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGYtPngyKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3RmLT55MigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uYWxUaW1lLCBsYXllckFuaW1hdGlvbi0+ZHVyYXRp
b24oKSk7CisgICAgfSBlbHNlIGlmICh0Zi0+aXNTdGVwc1RpbWluZ0Z1bmN0aW9uKCkpIHsKKyAg
ICAgICAgY29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbiogc3RmID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
U3RlcHNUaW1pbmdGdW5jdGlvbio+KHRmKTsKKyAgICAgICAgcmV0dXJuIHNvbHZlU3RlcHNGdW5j
dGlvbihzdGYtPm51bWJlck9mU3RlcHMoKSwgc3RmLT5zdGVwQXRTdGFydCgpLCBmcmFjdGlvbmFs
VGltZSk7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBmcmFjdGlvbmFsVGltZTsKK30KKwor
c3RhdGljIHZvaWQgZmV0Y2hJbnRlcnZhbEVuZHBvaW50cyhkb3VibGUgZWxhcHNlZFRpbWUsIGNv
bnN0IExheWVyQW5pbWF0aW9uKiBsYXllckFuaW1hdGlvbiwgY29uc3QgQW5pbWF0aW9uVmFsdWUq
JiBmcm9tVmFsdWUsIGNvbnN0IEFuaW1hdGlvblZhbHVlKiYgdG9WYWx1ZSwgZG91YmxlJiBwcm9n
KQoreworICAgIC8vIEZpbmQgdGhlIGZpcnN0IGtleS4KKyAgICBpZiAobGF5ZXJBbmltYXRpb24t
PmR1cmF0aW9uKCkgJiYgbGF5ZXJBbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgIT0gQW5pbWF0
aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlKQorICAgICAgICBlbGFwc2VkVGltZSA9IG1pbihl
bGFwc2VkVGltZSwgbGF5ZXJBbmltYXRpb24tPmR1cmF0aW9uKCkgKiBsYXllckFuaW1hdGlvbi0+
aXRlcmF0aW9uQ291bnQoKSk7CisKKyAgICBkb3VibGUgZnJhY3Rpb25hbFRpbWUgPSBsYXllckFu
aW1hdGlvbi0+ZHVyYXRpb24oKSA/IChlbGFwc2VkVGltZSAvIGxheWVyQW5pbWF0aW9uLT5kdXJh
dGlvbigpKSA6IDE7CisKKyAgICAvLyBGSVhNRTogc3RhcnRUaW1lIGNhbiBiZSBiZWZvcmUgdGhl
IGN1cnJlbnQgYW5pbWF0aW9uICJmcmFtZSIgdGltZS4gVGhpcyBpcyB0byBzeW5jIHdpdGggdGhl
IGZyYW1lIHRpbWUKKyAgICAvLyBjb25jZXB0IGluIEFuaW1hdGlvblRpbWVDb250cm9sbGVyLiBT
byB3ZSBuZWVkIHRvIHNvbWVob3cgc3luYyB0aGUgdHdvLiBVbnRpbCB0aGVuLCB0aGUgcG9zc2li
bGUKKyAgICAvLyBlcnJvciBpcyBzbWFsbCBhbmQgd2lsbCBwcm9iYWJseSBub3QgYmUgbm90aWNl
YWJsZS4gVW50aWwgd2UgZml4IHRoaXMsIHJlbW92ZSB0aGUgYXNzZXJ0LgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjAzNworICAgIC8vIEFTU0VSVChm
cmFjdGlvbmFsVGltZSA+PSAwKTsKKyAgICBpZiAoZnJhY3Rpb25hbFRpbWUgPCAwKQorICAgICAg
ICBmcmFjdGlvbmFsVGltZSA9IDA7CisKKyAgICAvLyBGSVhNRTogc2hhcmUgdGhpcyBjb2RlIHdp
dGggQW5pbWF0aW9uQmFzZTo6cHJvZ3Jlc3MoKS4KKyAgICBpbnQgaXRlcmF0aW9uID0gc3RhdGlj
X2Nhc3Q8aW50PihmcmFjdGlvbmFsVGltZSk7CisgICAgaWYgKGxheWVyQW5pbWF0aW9uLT5pdGVy
YXRpb25Db3VudCgpICE9IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSkKKyAgICAg
ICAgaXRlcmF0aW9uID0gbWluKGl0ZXJhdGlvbiwgbGF5ZXJBbmltYXRpb24tPml0ZXJhdGlvbkNv
dW50KCkgLSAxKTsKKworICAgIGZyYWN0aW9uYWxUaW1lIC09IGl0ZXJhdGlvbjsKKworICAgIGJv
b2wgcmV2ZXJzaW5nID0gKGxheWVyQW5pbWF0aW9uLT5kaXJlY3Rpb24oKSA9PSBBbmltYXRpb246
OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSkgJiYgKGl0ZXJhdGlvbiAmIDEpOworICAgIGlm
IChyZXZlcnNpbmcpCisgICAgICAgIGZyYWN0aW9uYWxUaW1lID0gMSAtIGZyYWN0aW9uYWxUaW1l
OworCisgICAgc2l6ZV90IG51bUtleWZyYW1lcyA9IGxheWVyQW5pbWF0aW9uLT52YWx1ZUNvdW50
KCk7CisgICAgaWYgKCFudW1LZXlmcmFtZXMpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VCghbGF5ZXJBbmltYXRpb24tPnZhbHVlQXQoMCktPmtleVRpbWUoKSk7CisgICAgQVNTRVJUKGxh
eWVyQW5pbWF0aW9uLT52YWx1ZUF0KGxheWVyQW5pbWF0aW9uLT52YWx1ZUNvdW50KCkgLSAxKS0+
a2V5VGltZSgpID09IDEpOworCisgICAgaW50IHByZXZJbmRleCA9IC0xOworICAgIGludCBuZXh0
SW5kZXggPSAtMTsKKworICAgIC8vIEZJWE1FOiB3aXRoIGEgbG90IG9mIGtleXMsIHRoaXMgbGlu
ZWFyIHNlYXJjaCB3aWxsIGJlIHNsb3cuIFdlIGNvdWxkIGJpbmFyeSBzZWFyY2guCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1LZXlmcmFtZXM7ICsraSkgeworICAgICAgICBjb25zdCBB
bmltYXRpb25WYWx1ZSogY3VycktleWZyYW1lID0gbGF5ZXJBbmltYXRpb24tPnZhbHVlQXQoaSk7
CisKKyAgICAgICAgaWYgKGZyYWN0aW9uYWxUaW1lIDwgY3VycktleWZyYW1lLT5rZXlUaW1lKCkp
IHsKKyAgICAgICAgICAgIG5leHRJbmRleCA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIHByZXZJbmRleCA9IGk7CisgICAgfQorCisgICAgZG91YmxlIHNjYWxl
ID0gMTsKKyAgICBkb3VibGUgb2Zmc2V0ID0gMDsKKworICAgIGlmIChwcmV2SW5kZXggPT0gLTEp
CisgICAgICAgIHByZXZJbmRleCA9IDA7CisKKyAgICBpZiAobmV4dEluZGV4ID09IC0xKQorICAg
ICAgICBuZXh0SW5kZXggPSBsYXllckFuaW1hdGlvbi0+dmFsdWVDb3VudCgpIC0gMTsKKworICAg
IGNvbnN0IEFuaW1hdGlvblZhbHVlKiBwcmV2S2V5ZnJhbWUgPSBsYXllckFuaW1hdGlvbi0+dmFs
dWVBdChwcmV2SW5kZXgpOworICAgIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBuZXh0S2V5ZnJhbWUg
PSBsYXllckFuaW1hdGlvbi0+dmFsdWVBdChuZXh0SW5kZXgpOworCisgICAgZnJvbVZhbHVlID0g
cHJldktleWZyYW1lOworICAgIHRvVmFsdWUgPSBuZXh0S2V5ZnJhbWU7CisKKyAgICBvZmZzZXQg
PSBwcmV2S2V5ZnJhbWUtPmtleVRpbWUoKTsKKyAgICBzY2FsZSA9IDEuMCAvIChuZXh0S2V5ZnJh
bWUtPmtleVRpbWUoKSAtIHByZXZLZXlmcmFtZS0+a2V5VGltZSgpKTsKKworICAgIGNvbnN0IFRp
bWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiA9IHRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9u
VmFsdWUocHJldktleWZyYW1lLCBsYXllckFuaW1hdGlvbik7CisKKyAgICBwcm9nID0gcHJvZ3Jl
c3MoZWxhcHNlZFRpbWUsIGxheWVyQW5pbWF0aW9uLCBzY2FsZSwgb2Zmc2V0LCB0aW1pbmdGdW5j
dGlvbik7Cit9CisKK3ZvaWQgTGF5ZXJBbmltYXRpb246OmFwcGx5KExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqIGxheWVyLCBkb3VibGUgZWxhcHNlZFRpbWUpCit7CisgICAgY29uc3QgQW5pbWF0aW9u
VmFsdWUqIGZyb20gPSAwOworICAgIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0byA9IDA7CisgICAg
ZG91YmxlIHByb2dyZXNzID0gMC4wOworCisgICAgZmV0Y2hJbnRlcnZhbEVuZHBvaW50cyhlbGFw
c2VkVGltZSwgdGhpcywgZnJvbSwgdG8sIHByb2dyZXNzKTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHkoKSkgeworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybToKKyAgICAg
ICAgbGF5ZXItPnNldFRyYW5zZm9ybShibGVuZFRyYW5zZm9ybShzdGF0aWNfY2FzdDxjb25zdCBU
cmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KGZyb20pLT52YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25z
dCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KHRvKS0+dmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eToKKyAgICAgICAg
bGF5ZXItPnNldE9wYWNpdHkoYmxlbmRPcGFjaXR5KHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5p
bWF0aW9uVmFsdWUqPihmcm9tKS0+dmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmlt
YXRpb25WYWx1ZSo+KHRvKS0+dmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBbmltYXRlZFByb3BlcnR5QmFja2dyb3VuZENvbG9yOgorICAgIGNhc2UgQW5pbWF0
ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcjoKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlJbnZhbGlk
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBMYXllckFuaW1hdGlvbjo6YmxlbmRUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
cyogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0OworCisgICAgaWYgKG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQpIHsKKyAgICAgICAg
Ly8gQSB0cmljayB0byBhdm9pZCB0b3VjaGluZyB0aGUgcmVmY291bnQgb2Ygc2hhcmVkIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgb24gdGhlIHdyb25nIHRocmVhZAorICAgICAgICAvLyBTaW5jZSBUcmFu
c2Zvck9wZXJhdGlvbiBpcyBub3QgVGhyZWFkU2FmZVJlZkNvdW50ZWQsIHdlIGFyZSBvbmx5IGFs
bG93ZWQgdG8gdG91Y2ggdGhlIHJlZgorICAgICAgICAvLyBjb3VudCBvZiBzaGFyZWQgb3BlcmF0
aW9ucyB3aGVuIHRoZSBXZWJLaXQgdGhyZWFkIGFuZCBjb21wb3NpdGluZyB0aHJlYWQgYXJlIGlu
IHN5bmMuCisgICAgICAgIFZlY3RvcjxUcmFuc2Zvcm1PcGVyYXRpb24qPiByZXN1bHQ7CisgICAg
ICAgIFZlY3RvcjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+IG93bmVkOworCisgICAgICAg
IHVuc2lnbmVkIGZyb21TaXplID0gZnJvbS0+b3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICAgICAg
dW5zaWduZWQgdG9TaXplID0gdG8tPm9wZXJhdGlvbnMoKS5zaXplKCk7CisgICAgICAgIHVuc2ln
bmVkIHNpemUgPSBtYXgoZnJvbVNpemUsIHRvU2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbiog
ZnJvbU9wID0gKGkgPCBmcm9tU2l6ZSkgPyBmcm9tLT5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAw
OworICAgICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uKiB0b09wID0gKGkgPCB0b1NpemUpID8g
dG8tPm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7CisgICAgICAgICAgICBSZWZQdHI8VHJhbnNm
b3JtT3BlcmF0aW9uPiBibGVuZGVkT3AgPSB0b09wID8gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9n
cmVzcykgOiAoZnJvbU9wID8gZnJvbU9wLT5ibGVuZCgwLCBwcm9ncmVzcywgdHJ1ZSkgOiBQYXNz
UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4oMCkpOworICAgICAgICAgICAgaWYgKGJsZW5kZWRP
cCkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYmxlbmRlZE9wLmdldCgpKTsKKyAg
ICAgICAgICAgICAgICBvd25lZC5hcHBlbmQoYmxlbmRlZE9wKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gaWRlbnRpdHlP
cCA9IElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAg
ICBvd25lZC5hcHBlbmQoaWRlbnRpdHlPcCk7CisgICAgICAgICAgICAgICAgaWYgKHByb2dyZXNz
ID4gMC41KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvT3AgPyB0b09wIDog
aWRlbnRpdHlPcC5nZXQoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGZyb21PcCA/IGZyb21PcCA6IGlkZW50aXR5T3AuZ2V0KCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgSW50U2l6ZSBzeiA9IGJveFNpemUo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIHJlc3VsdFtpXS0+YXBwbHkodCwgc3opOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIENvbnZlcnQgdGhlIFRyYW5zZm9ybU9wZXJhdGlvbnMgaW50byBtYXRyaWNlcy4KKyAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbVQ7CisgICAgICAgIGZyb20tPmFwcGx5KGJv
eFNpemUoKSwgZnJvbVQpOworICAgICAgICB0by0+YXBwbHkoYm94U2l6ZSgpLCB0KTsKKworICAg
ICAgICB0LmJsZW5kKGZyb21ULCBwcm9ncmVzcyk7CisgICAgfQorCisgICAgcmV0dXJuIHQ7Cit9
CisKK2Zsb2F0IExheWVyQW5pbWF0aW9uOjpibGVuZE9wYWNpdHkoZmxvYXQgZnJvbSwgZmxvYXQg
dG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKK3sKKyAgICBmbG9hdCBvcGFjaXR5ID0gZnJvbSAr
ICh0byAtIGZyb20pICogcHJvZ3Jlc3M7CisKKyAgICByZXR1cm4gbWF4KDAuMGYsIG1pbihvcGFj
aXR5LCAxLjBmKSk7Cit9CisKK3ZvaWQgTGF5ZXJBbmltYXRpb246OnZhbGlkYXRlVHJhbnNmb3Jt
TGlzdHMoKQoreworICAgIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQgPSBmYWxzZTsKKwor
ICAgIGlmIChtX3ZhbHVlcy5zaXplKCkgPCAyIHx8IHByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRW1wdHkgdHJh
bnNmb3JtcyBtYXRjaCBhbnl0aGluZywgc28gZmluZCB0aGUgZmlyc3Qgbm9uLWVtcHR5IGVudHJ5
IGFzIHRoZSByZWZlcmVuY2UuCisgICAgc2l6ZV90IG51bUtleWZyYW1lcyA9IG1fdmFsdWVzLnNp
emUoKTsKKyAgICBzaXplX3QgZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXggPSBu
dW1LZXlmcmFtZXM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsg
KytpKSB7CisgICAgICAgIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiBjdXJyZW50S2V5
ZnJhbWUgPSBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KG1fdmFs
dWVzLmF0KGkpKTsKKyAgICAgICAgaWYgKGN1cnJlbnRLZXlmcmFtZS0+dmFsdWUoKS0+c2l6ZSgp
KSB7CisgICAgICAgICAgICBmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCA9IGk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChmaXJzdE5v
bkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCA9PSBudW1LZXlmcmFtZXMpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZpcnN0VmFsID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPihtX3ZhbHVlcy5hdChmaXJzdE5v
bkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCkpLT52YWx1ZSgpOworCisgICAgLy8gU2VlIGlm
IHRoZSBrZXlmcmFtZXMgYXJlIHZhbGlkLgorICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdE5vbkVt
cHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCArIDE7IGkgPCBudW1LZXlmcmFtZXM7ICsraSkgewor
ICAgICAgICBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogY3VycmVudEtleWZyYW1lID0g
c3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPihtX3ZhbHVlcy5hdChp
KSk7CisgICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHZhbCA9IGN1cnJlbnRLZXlm
cmFtZS0+dmFsdWUoKTsKKworICAgICAgICAvLyBBIG51bGwgdHJhbnNmb3JtIG1hdGNoZXMgYW55
dGhpbmcuCisgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBJZiB0aGUgc2l6ZXMgb2YgdGhlIGZ1bmN0aW9u
IGxpc3RzIGRvbid0IG1hdGNoLCB0aGUgbGlzdHMgZG9uJ3QgbWF0Y2guCisgICAgICAgIGlmIChm
aXJzdFZhbC0+b3BlcmF0aW9ucygpLnNpemUoKSAhPSB2YWwtPm9wZXJhdGlvbnMoKS5zaXplKCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gSWYgdGhlIHR5cGVzIG9mIGVhY2gg
ZnVuY3Rpb24gYXJlIG5vdCB0aGUgc2FtZSwgdGhlIGxpc3RzIGRvbid0IG1hdGNoLgorICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGZpcnN0VmFsLT5vcGVyYXRpb25zKCkuc2l6ZSgpOyAr
K2opIHsKKyAgICAgICAgICAgIGlmICghZmlyc3RWYWwtPm9wZXJhdGlvbnMoKVtqXS0+aXNTYW1l
VHlwZSgqdmFsLT5vcGVyYXRpb25zKClbal0pKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIEtleWZyYW1lcyBhcmUgdmFsaWQuCisgICAgbV90cmFu
c2Zvcm1GdW5jdGlvbkxpc3RWYWxpZCA9IHRydWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJBbmltYXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJBbmltYXRp
b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42YjFjYzkzYmY0OTI5MDYxZjNiYWJkN2RkNjUzMjU0MzQ3YzI0NWM5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllckFuaW1hdGlvbi5oCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiBMYXllckFuaW1hdGlvbl9oCisjZGVmaW5lIExheWVyQW5p
bWF0aW9uX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2RlZmluZSBERUJV
R19MQVlFUl9BTklNQVRJT04gMAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFuaW1h
dGlvbjsKK2NsYXNzIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ7CitjbGFzcyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDsKKworLy8gVGhpcyBjbGFzcyB1c2VzIG5vbi10aHJlYWRzYWZlIHJlZmNvdW50aW5n
IGluIHRoZSBXZWJDb3JlOjpBbmltYXRpb24gYW5kCisvLyBXZWJDb3JlOjpTdHJpbmcgbWVtYmVy
cywgc28gdXNpbmcgdGhyZWFkc2FmZSByZWZjb3VudGluZyBoZXJlIHdvdWxkIGJlIGEgYmlnCisv
LyBjb3Zlci11cC4gSW5zdGVhZCwgeW91IG11c3QgYmUgY2FyZWZ1bCB0byB1c2UgcmVmL2RlcmVm
IHRoaXMgY2xhc3Mgb25seSBvbgorLy8gdGhlIFdlYktpdCB0aHJlYWQsIG9yIHdoZW4gdGhlIFdl
YktpdCBhbmQgY29tcG9zaXRpbmcgdGhyZWFkcyBhcmUgaW4gc3luYy4KK2NsYXNzIExheWVyQW5p
bWF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJBbmltYXRpb24+IHsKK3B1YmxpYzoKKyAg
ICAvLyBXZWJLaXQgdGhyZWFkIG9ubHkKKyAgICAvLyBCZWNhdXNlIHRoZSByZWZjb3VudGluZyBk
b25lIGluIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIGlzIG5vdCB0aHJlYWQgc2FmZSwKKyAg
ICAvLyB0aGUgTGF5ZXJBbmltYXRpb24gbXVzdCBiZSBjcmVhdGVkIG9yIGRlc3Ryb3llZCBvbiB0
aGUgV2ViS2l0IHRocmVhZCwgb3Igd2hlbgorICAgIC8vIHRoZSBXZWJLaXQgYW5kIGNvbXBvc2l0
aW5nIHRocmVhZHMgYXJlIGluIHN5bmMuCisgICAgLy8gQWxzbywgdGhlIG5hbWUgcHJvcGVydHkg
aXMgdXNpbmcgYSBTdHJpbmcgd2hpY2ggaGFzIG5vbi10aHJlYWRzYWZlIHJlZmNvdW50aW5nLgor
ICAgIC8vIFRoZSBzZXRTdGFydFRpbWUgbWV0aG9kIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBtdXN0
IG9ubHkgYmUgY2FsbGVkIG9uIGEgbmV3bHkKKyAgICAvLyBjcmVhdGVkIExheWVyQW5pbWF0aW9u
IGJlZm9yZSBzZW5kaW5nIGl0IG9mZiB0byB0aGUgY29tcG9zaXRpbmcgdGhyZWFkLgorCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJBbmltYXRpb24+IGNyZWF0ZShjb25zdCBLZXlmcmFtZVZh
bHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24q
IGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgdGltZU9mZnNldCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJBbmltYXRpb24odmFsdWVzLCBib3hT
aXplLCBhbmltYXRpb24sIG5hbWUsIHRpbWVPZmZzZXQpKTsKKyAgICB9CisKKyAgICBQYXNzUmVm
UHRyPExheWVyQW5pbWF0aW9uPiBjbG9uZShkb3VibGUgdGltZU9mZnNldCkKKyAgICB7CisgICAg
ICAgIC8vIFRoaXMgcmV0dXJucyBhIGNvcHkgb2YgdGhlIGFuaW1hdGlvbi4KKyAgICAgICAgTGF5
ZXJBbmltYXRpb24qIGFuaW1hdGlvbiA9IG5ldyBMYXllckFuaW1hdGlvbigqdGhpcyk7CisKKyAg
ICAgICAgLy8gVGhlIGNsb25lZCBhbmltYXRpb24gc2hvdWxkIGdldCBhIGRpZmZlcmVudCB0aW1l
T2Zmc2V0IGlmIGl0J3MgcGF1c2VkLgorICAgICAgICBhbmltYXRpb24tPm1fdGltZU9mZnNldCA9
IHRpbWVPZmZzZXQ7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKGFuaW1hdGlvbik7CisgICAg
fQorCisgICAgfkxheWVyQW5pbWF0aW9uKCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgU3Ry
aW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgdm9pZCBzZXRTdGFydFRp
bWUoZG91YmxlIHRpbWUpIHsgbV9zdGFydFRpbWUgPSB0aW1lOyB9CisKKyAgICAvLyBUaHJlYWQg
c2FmZSAoaW1tdXRhYmxlIHN0YXRlKQorCisgICAgc3RhdGljIGludCBpZEZyb21BbmltYXRpb24o
Y29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24pIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50
PihhbmltYXRpb24pOyB9CisgICAgYm9vbCBpc0VxdWFsVG9BbmltYXRpb24oY29uc3QgQW5pbWF0
aW9uKiBhbmltYXRpb24pIGNvbnN0IHsgcmV0dXJuIGlkRnJvbUFuaW1hdGlvbihhbmltYXRpb24p
ID09IGlkKCk7IH0KKyAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgQW5p
bWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMucHJvcGVy
dHkoKTsgfQorICAgIEludFNpemUgYm94U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2l6ZTsg
fQorICAgIGRvdWJsZSB0aW1lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV90aW1lT2Zmc2V0OyB9
CisgICAgZG91YmxlIHN0YXJ0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9Cisg
ICAgc2l6ZV90IHZhbHVlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0K
KworICAgIC8vIE5PVEU6IERvbid0IHRyeSB0byByZWYgYSBUaW1pbmdGdW5jdGlvbiwgdGhhdCdz
IG5vdCBhIHRocmVhZHNhZmUgb3BlcmF0aW9uLgorICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0
aW1pbmdGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGltaW5nRnVuY3Rpb24uZ2V0KCk7IH0K
KyAgICBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAg
aW50IGl0ZXJhdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRpb25Db3VudDsgfQor
ICAgIEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZGlyZWN0aW9uOyB9CisKKyAgICAvLyBOT1RFOiBEb24ndCB0cnkgdG8gY2xvbmUoKSBh
biBBbmltYXRpb25WYWx1ZSwgdGhhdCdzIG5vdCBhIHRocmVhZHNhZmUgb3BlcmF0aW9uIHNpbmNl
IGl0IG11dGF0ZXMgcmVmY291bnRzLgorICAgIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB2YWx1ZUF0
KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5hdChpKTsgfQorCisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggYmxlbmRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyog
ZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyosIGRvdWJsZSBwcm9ncmVzcykgY29uc3Q7
CisgICAgZmxvYXQgYmxlbmRPcGFjaXR5KGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0OworICAgIHZvaWQgYXBwbHkoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRv
dWJsZSBlbGFwc2VkVGltZSk7CisKK3ByaXZhdGU6CisgICAgTGF5ZXJBbmltYXRpb24oY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3Qg
QW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIHRpbWVPZmZz
ZXQpCisgICAgICAgIDogbV9pZChyZWludGVycHJldF9jYXN0PGludD4oYW5pbWF0aW9uKSkKKyAg
ICAgICAgLCBtX3ZhbHVlcyh2YWx1ZXMpCisgICAgICAgICwgbV9ib3hTaXplKGJveFNpemUpCisg
ICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgICAgICwgbV90aW1lT2Zmc2V0KHRpbWVPZmZzZXQp
CisgICAgICAgICwgbV9zdGFydFRpbWUoMCkKKyAgICAgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKDAp
CisgICAgICAgICwgbV9kdXJhdGlvbihhbmltYXRpb24tPmR1cmF0aW9uKCkpCisgICAgICAgICwg
bV9pdGVyYXRpb25Db3VudChhbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkpCisgICAgICAgICwg
bV9kaXJlY3Rpb24oYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSkKKyAgICB7CisgICAgICAgIGlmIChh
bmltYXRpb24tPmlzVGltaW5nRnVuY3Rpb25TZXQoKSkKKyAgICAgICAgICAgIG1fdGltaW5nRnVu
Y3Rpb24gPSBhbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCk7CisKKyAgICAgICAgdmFsaWRhdGVU
cmFuc2Zvcm1MaXN0cygpOworICAgIH0KKworICAgIExheWVyQW5pbWF0aW9uKGNvbnN0IExheWVy
QW5pbWF0aW9uJiBvdGhlcikKKyAgICAgICAgOiAgUmVmQ291bnRlZDxMYXllckFuaW1hdGlvbj4o
KQorICAgICAgICAsIG1faWQob3RoZXIubV9pZCkKKyAgICAgICAgLCBtX3ZhbHVlcyhvdGhlci5t
X3ZhbHVlcykKKyAgICAgICAgLCBtX2JveFNpemUob3RoZXIubV9ib3hTaXplKQorICAgICAgICAs
IG1fbmFtZShvdGhlci5tX25hbWUpCisgICAgICAgICwgbV90aW1lT2Zmc2V0KG90aGVyLm1fdGlt
ZU9mZnNldCkKKyAgICAgICAgLCBtX3N0YXJ0VGltZShvdGhlci5tX3N0YXJ0VGltZSkKKyAgICAg
ICAgLCBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkKG90aGVyLm1fdHJhbnNmb3JtRnVuY3Rp
b25MaXN0VmFsaWQpCisgICAgICAgICwgbV90aW1pbmdGdW5jdGlvbihvdGhlci5tX3RpbWluZ0Z1
bmN0aW9uKQorICAgICAgICAsIG1fZHVyYXRpb24ob3RoZXIubV9kdXJhdGlvbikKKyAgICAgICAg
LCBtX2l0ZXJhdGlvbkNvdW50KG90aGVyLm1faXRlcmF0aW9uQ291bnQpCisgICAgICAgICwgbV9k
aXJlY3Rpb24ob3RoZXIubV9kaXJlY3Rpb24pCisgICAgeworICAgIH0KKworICAgIHZvaWQgdmFs
aWRhdGVUcmFuc2Zvcm1MaXN0cygpOworCisgICAgaW50IG1faWQ7CisKKyAgICAvLyBOT1RFOiBE
b24ndCBleHBvc2UgdGhlIEtleWZyYW1lVmFsdWVMaXN0IGRpcmVjdGx5LCBzaW5jZSBpdHMgY29w
eQorICAgIC8vIGNvbnN0cnVjdG9yIG11dGF0ZXMgcmVmY291bnRzIGFuZCB0aHVzIGlzIG5vdCB0
aHJlYWQgc2FmZS4KKyAgICBLZXlmcmFtZVZhbHVlTGlzdCBtX3ZhbHVlczsKKyAgICBJbnRTaXpl
IG1fYm94U2l6ZTsKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIGRvdWJsZSBtX3RpbWVPZmZzZXQ7
CisgICAgZG91YmxlIG1fc3RhcnRUaW1lOworICAgIGJvb2wgbV90cmFuc2Zvcm1GdW5jdGlvbkxp
c3RWYWxpZDsKKworICAgIFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4gbV90aW1pbmdGdW5jdGlvbjsK
KyAgICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBpbnQgbV9pdGVyYXRpb25Db3VudDsKKyAgICBB
bmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKK307CisKK30KKworI2Vu
ZGlmIC8vIExheWVyQW5pbWF0aW9uX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134203</attachid>
            <date>2012-03-27 19:37:46 -0700</date>
            <delta_ts>2012-03-27 19:56:59 -0700</delta_ts>
            <desc>updated-patch</desc>
            <filename>bug-80123-20120328103743.patch</filename>
            <type>text/plain</type>
            <size>21937</size>
            <attacher name="Robin Cao">robin.webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjE3MWM1MjFlOWY3MTYw
OTI5YzdlOWRmMjViNzg0MWQyNDNiODgyMS4uZDZhMmU4MzM5ZjViNThiYThlMzdiODA2NTkyMTQ2
YmEzZDBmM2VhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTAzLTI2ICBSb2Jp
biBDYW8gIDxyb2Jpbi5jYW9AdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFtCbGFja0Jl
cnJ5XSBVcHN0cmVhbSBMYXllckFuaW1hdGlvbi57Y3BwLCBofQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODAxMjMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0aWFsIHVwc3RyZWFtLCBubyBuZXcgdGVz
dHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQW5pbWF0
aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnNv
bHZlRXBzaWxvbik6CisgICAgICAgIChXZWJDb3JlOjpzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6c29sdmVTdGVwc0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
cHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6ZmV0Y2hJbnRlcnZhbEVuZHBvaW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckFuaW1hdGlvbjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJBbmltYXRpb246OmJsZW5kVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQW5pbWF0aW9uOjpibGVuZE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJBbmlt
YXRpb246OnZhbGlkYXRlVHJhbnNmb3JtTGlzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJBbmltYXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKExheWVyQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQW5p
bWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJBbmltYXRpb246OmNsb25l
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQW5pbWF0aW9uOjp+TGF5ZXJBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJBbmltYXRpb246Om5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJBbmltYXRpb246OnNldFN0YXJ0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckFuaW1hdGlvbjo6aWRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQW5p
bWF0aW9uOjppc0VxdWFsVG9BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJBbmlt
YXRpb246OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQW5pbWF0aW9uOjpwcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckFuaW1hdGlvbjo6Ym94U2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckFuaW1hdGlvbjo6dGltZU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckFuaW1hdGlvbjo6c3RhcnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQW5pbWF0
aW9uOjp2YWx1ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQW5pbWF0aW9uOjp0aW1p
bmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckFuaW1hdGlvbjo6ZHVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJBbmltYXRpb246Oml0ZXJhdGlvbkNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQW5pbWF0aW9uOjpkaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJBbmltYXRpb246OnZhbHVlQXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJB
bmltYXRpb246OkxheWVyQW5pbWF0aW9uKToKKwogMjAxMi0wMy0yNiAgU3RlcGhlbiBXaGl0ZSAg
PHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNYWtlIGZpbHRlcnMgYW5kIHRo
ZSB0aHJlYWRlZCBjb21wb3NpdG9yIHBsYXkgd2VsbCB0b2dldGhlci4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJBbmltYXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckFu
aW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQ2YWZiYWZkZjFkMDJlNzVjMWU5YTExMGMzMGJjMjQw
N2M2ZWRkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMzE2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiTGF5ZXJBbmltYXRpb24uaCIKKworI2luY2x1ZGUgIklkZW50aXR5VHJhbnNmb3JtT3BlcmF0
aW9uLmgiCisjaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiVW5pdEJlemllci5oIgorCisjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBz
dGQ7CisKKy8vIEZJWE1FOiBTb21lIGZ1bmN0aW9ucyBiZWxvdyBhcmUgY29waWVkIGZyb20gQW5p
bWF0aW9uQmFzZSBhbmQgS2V5ZnJhbWVBbmltYXRpb24uCisvLyBXZSBuZWVkIHRvIHJlZmFjdG9y
IHRoZXNlIGNvZGUgdG8gaW5jcmVhc2UgY29kZSByZXVzZS4KKy8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjI5MworCisvLyBUaGUgZXBzaWxvbiB2YWx1ZSB3ZSBw
YXNzIHRvIFVuaXRCZXppZXI6OnNvbHZlIGdpdmVuIHRoYXQgdGhlIGFuaW1hdGlvbiBpcyBnb2lu
ZyB0byBydW4gb3ZlciB8ZHVyfCBzZWNvbmRzLiBUaGUgbG9uZ2VyIHRoZQorLy8gYW5pbWF0aW9u
LCB0aGUgbW9yZSBwcmVjaXNpb24gd2UgbmVlZCBpbiB0aGUgdGltaW5nIGZ1bmN0aW9uIHJlc3Vs
dCB0byBhdm9pZCB1Z2x5IGRpc2NvbnRpbnVpdGllcy4KK3N0YXRpYyBpbmxpbmUgZG91YmxlIHNv
bHZlRXBzaWxvbihkb3VibGUgZHVyYXRpb24pCit7CisgICAgcmV0dXJuIDEuMCAvICgyMDAuMCAq
IGR1cmF0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVDdWJpY0JlemllckZ1
bmN0aW9uKGRvdWJsZSBwMXgsIGRvdWJsZSBwMXksIGRvdWJsZSBwMngsIGRvdWJsZSBwMnksIGRv
dWJsZSB0LCBkb3VibGUgZHVyYXRpb24pCit7CisgICAgLy8gQ29udmVydCBmcm9tIGlucHV0IHRp
bWUgdG8gcGFyYW1ldHJpYyB2YWx1ZSBpbiBjdXJ2ZSwgdGhlbiBmcm9tCisgICAgLy8gdGhhdCB0
byBvdXRwdXQgdGltZS4KKyAgICBVbml0QmV6aWVyIGJlemllcihwMXgsIHAxeSwgcDJ4LCBwMnkp
OworICAgIHJldHVybiBiZXppZXIuc29sdmUodCwgc29sdmVFcHNpbG9uKGR1cmF0aW9uKSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlvbihpbnQgbnVtU3RlcHMs
IGJvb2wgc3RlcEF0U3RhcnQsIGRvdWJsZSB0KQoreworICAgIGlmIChzdGVwQXRTdGFydCkKKyAg
ICAgICAgcmV0dXJuIG1pbigxLjAsIChmbG9vcihudW1TdGVwcyAqIHQpICsgMSkgLyBudW1TdGVw
cyk7CisgICAgcmV0dXJuIGZsb29yKG51bVN0ZXBzICogdCkgLyBudW1TdGVwczsKK30KKworc3Rh
dGljIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVl
KGNvbnN0IEFuaW1hdGlvblZhbHVlKiBhbmltVmFsdWUsIGNvbnN0IExheWVyQW5pbWF0aW9uKiBh
bmltKQoreworICAgIGlmIChhbmltVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkpCisgICAgICAgIHJl
dHVybiBhbmltVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCk7CisgICAgaWYgKGFuaW0tPnRpbWluZ0Z1
bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBhbmltLT50aW1pbmdGdW5jdGlvbigpOworCisgICAg
cmV0dXJuIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmRlZmF1bHRUaW1pbmdGdW5jdGlvbigp
OworfQorCitzdGF0aWMgZG91YmxlIHByb2dyZXNzKGRvdWJsZSBlbGFwc2VkVGltZSwgY29uc3Qg
TGF5ZXJBbmltYXRpb24qIGxheWVyQW5pbWF0aW9uLCBkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZz
ZXQsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0ZikKK3sKKyAgICBkb3VibGUgZHVyID0gbGF5ZXJB
bmltYXRpb24tPmR1cmF0aW9uKCk7CisgICAgaWYgKGxheWVyQW5pbWF0aW9uLT5pdGVyYXRpb25D
b3VudCgpID4gMCkKKyAgICAgICAgZHVyICo9IGxheWVyQW5pbWF0aW9uLT5pdGVyYXRpb25Db3Vu
dCgpOworCisgICAgaWYgKCFsYXllckFuaW1hdGlvbi0+ZHVyYXRpb24oKSkKKyAgICAgICAgcmV0
dXJuIDEuMDsKKyAgICBpZiAobGF5ZXJBbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAwICYm
IGVsYXBzZWRUaW1lID49IGR1cikKKyAgICAgICAgcmV0dXJuIChsYXllckFuaW1hdGlvbi0+aXRl
cmF0aW9uQ291bnQoKSAlIDIpID8gMS4wIDogMC4wOworCisgICAgLy8gQ29tcHV0ZSB0aGUgZnJh
Y3Rpb25hbCB0aW1lLCB0YWtpbmcgaW50byBhY2NvdW50IGRpcmVjdGlvbi4KKyAgICAvLyBUaGVy
ZSBpcyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0ZXJhdGlvbnMsIHdlIGFzc3VtZSB0aGF0IHdl
IHdvdWxkIGhhdmUKKyAgICAvLyBzaG9ydCBjaXJjdWl0ZWQgYWJvdmUgaWYgd2Ugd2VyZSBkb25l
LgorICAgIGRvdWJsZSBmcmFjdGlvbmFsVGltZSA9IGVsYXBzZWRUaW1lIC8gbGF5ZXJBbmltYXRp
b24tPmR1cmF0aW9uKCk7CisgICAgaW50IGludGVncmFsVGltZSA9IHN0YXRpY19jYXN0PGludD4o
ZnJhY3Rpb25hbFRpbWUpOworICAgIGZyYWN0aW9uYWxUaW1lIC09IGludGVncmFsVGltZTsKKwor
ICAgIGlmICgobGF5ZXJBbmltYXRpb24tPmRpcmVjdGlvbigpID09IEFuaW1hdGlvbjo6QW5pbWF0
aW9uRGlyZWN0aW9uQWx0ZXJuYXRlKSAmJiAoaW50ZWdyYWxUaW1lICYgMSkpCisgICAgICAgIGZy
YWN0aW9uYWxUaW1lID0gMSAtIGZyYWN0aW9uYWxUaW1lOworCisgICAgaWYgKHNjYWxlICE9IDEg
fHwgb2Zmc2V0KQorICAgICAgICBmcmFjdGlvbmFsVGltZSA9IChmcmFjdGlvbmFsVGltZSAtIG9m
ZnNldCkgKiBzY2FsZTsKKworICAgIGlmICghdGYpCisgICAgICAgIHRmID0gbGF5ZXJBbmltYXRp
b24tPnRpbWluZ0Z1bmN0aW9uKCk7CisKKyAgICBpZiAodGYtPmlzQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbigpKSB7CisgICAgICAgIGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qIGN0
ZiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPih0Zik7Cisg
ICAgICAgIHJldHVybiBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24oY3RmLT54MSgpLCBjdGYtPnkx
KCksIGN0Zi0+eDIoKSwgY3RmLT55MigpLCBmcmFjdGlvbmFsVGltZSwgbGF5ZXJBbmltYXRpb24t
PmR1cmF0aW9uKCkpOworICAgIH0KKworICAgIGlmICh0Zi0+aXNTdGVwc1RpbWluZ0Z1bmN0aW9u
KCkpIHsKKyAgICAgICAgY29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbiogc3RmID0gc3RhdGljX2Nh
c3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRmKTsKKyAgICAgICAgcmV0dXJuIHNvbHZl
U3RlcHNGdW5jdGlvbihzdGYtPm51bWJlck9mU3RlcHMoKSwgc3RmLT5zdGVwQXRTdGFydCgpLCBm
cmFjdGlvbmFsVGltZSk7CisgICAgfQorCisgICAgcmV0dXJuIGZyYWN0aW9uYWxUaW1lOworfQor
CitzdGF0aWMgdm9pZCBmZXRjaEludGVydmFsRW5kcG9pbnRzKGRvdWJsZSBlbGFwc2VkVGltZSwg
Y29uc3QgTGF5ZXJBbmltYXRpb24qIGxheWVyQW5pbWF0aW9uLCBjb25zdCBBbmltYXRpb25WYWx1
ZSomIGZyb21WYWx1ZSwgY29uc3QgQW5pbWF0aW9uVmFsdWUqJiB0b1ZhbHVlLCBkb3VibGUmIHBy
b2cpCit7CisgICAgLy8gRmluZCB0aGUgZmlyc3Qga2V5LgorICAgIGlmIChsYXllckFuaW1hdGlv
bi0+ZHVyYXRpb24oKSAmJiBsYXllckFuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmlt
YXRpb246Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUpCisgICAgICAgIGVsYXBzZWRUaW1lID0gbWlu
KGVsYXBzZWRUaW1lLCBsYXllckFuaW1hdGlvbi0+ZHVyYXRpb24oKSAqIGxheWVyQW5pbWF0aW9u
LT5pdGVyYXRpb25Db3VudCgpKTsKKworICAgIGRvdWJsZSBmcmFjdGlvbmFsVGltZSA9IGxheWVy
QW5pbWF0aW9uLT5kdXJhdGlvbigpID8gKGVsYXBzZWRUaW1lIC8gbGF5ZXJBbmltYXRpb24tPmR1
cmF0aW9uKCkpIDogMTsKKworICAgIC8vIEZJWE1FOiBzdGFydFRpbWUgY2FuIGJlIGJlZm9yZSB0
aGUgY3VycmVudCBhbmltYXRpb24gImZyYW1lIiB0aW1lLiBUaGlzIGlzIHRvIHN5bmMgd2l0aCB0
aGUgZnJhbWUgdGltZQorICAgIC8vIGNvbmNlcHQgaW4gQW5pbWF0aW9uVGltZUNvbnRyb2xsZXIu
IFNvIHdlIG5lZWQgdG8gc29tZWhvdyBzeW5jIHRoZSB0d28uIFVudGlsIHRoZW4sIHRoZSBwb3Nz
aWJsZQorICAgIC8vIGVycm9yIGlzIHNtYWxsIGFuZCB3aWxsIHByb2JhYmx5IG5vdCBiZSBub3Rp
Y2VhYmxlLiBVbnRpbCB3ZSBmaXggdGhpcywgcmVtb3ZlIHRoZSBhc3NlcnQuCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMDM3CisgICAgLy8gQVNTRVJU
KGZyYWN0aW9uYWxUaW1lID49IDApOworICAgIGlmIChmcmFjdGlvbmFsVGltZSA8IDApCisgICAg
ICAgIGZyYWN0aW9uYWxUaW1lID0gMDsKKworICAgIC8vIEZJWE1FOiBzaGFyZSB0aGlzIGNvZGUg
d2l0aCBBbmltYXRpb25CYXNlOjpwcm9ncmVzcygpLgorICAgIGludCBpdGVyYXRpb24gPSBzdGF0
aWNfY2FzdDxpbnQ+KGZyYWN0aW9uYWxUaW1lKTsKKyAgICBpZiAobGF5ZXJBbmltYXRpb24tPml0
ZXJhdGlvbkNvdW50KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlKQorICAg
ICAgICBpdGVyYXRpb24gPSBtaW4oaXRlcmF0aW9uLCBsYXllckFuaW1hdGlvbi0+aXRlcmF0aW9u
Q291bnQoKSAtIDEpOworCisgICAgZnJhY3Rpb25hbFRpbWUgLT0gaXRlcmF0aW9uOworCisgICAg
Ym9vbCByZXZlcnNpbmcgPSAobGF5ZXJBbmltYXRpb24tPmRpcmVjdGlvbigpID09IEFuaW1hdGlv
bjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlKSAmJiAoaXRlcmF0aW9uICYgMSk7CisgICAg
aWYgKHJldmVyc2luZykKKyAgICAgICAgZnJhY3Rpb25hbFRpbWUgPSAxIC0gZnJhY3Rpb25hbFRp
bWU7CisKKyAgICBzaXplX3QgbnVtS2V5ZnJhbWVzID0gbGF5ZXJBbmltYXRpb24tPnZhbHVlQ291
bnQoKTsKKyAgICBpZiAoIW51bUtleWZyYW1lcykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKCFsYXllckFuaW1hdGlvbi0+dmFsdWVBdCgwKS0+a2V5VGltZSgpKTsKKyAgICBBU1NFUlQo
bGF5ZXJBbmltYXRpb24tPnZhbHVlQXQobGF5ZXJBbmltYXRpb24tPnZhbHVlQ291bnQoKSAtIDEp
LT5rZXlUaW1lKCkgPT0gMSk7CisKKyAgICBpbnQgcHJldkluZGV4ID0gLTE7CisgICAgaW50IG5l
eHRJbmRleCA9IC0xOworCisgICAgLy8gRklYTUU6IHdpdGggYSBsb3Qgb2Yga2V5cywgdGhpcyBs
aW5lYXIgc2VhcmNoIHdpbGwgYmUgc2xvdy4gV2UgY291bGQgYmluYXJ5IHNlYXJjaC4KKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7CisgICAgICAgIGNvbnN0
IEFuaW1hdGlvblZhbHVlKiBjdXJyS2V5ZnJhbWUgPSBsYXllckFuaW1hdGlvbi0+dmFsdWVBdChp
KTsKKworICAgICAgICBpZiAoZnJhY3Rpb25hbFRpbWUgPCBjdXJyS2V5ZnJhbWUtPmtleVRpbWUo
KSkgeworICAgICAgICAgICAgbmV4dEluZGV4ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgcHJldkluZGV4ID0gaTsKKyAgICB9CisKKyAgICBkb3VibGUgc2Nh
bGUgPSAxOworICAgIGRvdWJsZSBvZmZzZXQgPSAwOworCisgICAgaWYgKHByZXZJbmRleCA9PSAt
MSkKKyAgICAgICAgcHJldkluZGV4ID0gMDsKKworICAgIGlmIChuZXh0SW5kZXggPT0gLTEpCisg
ICAgICAgIG5leHRJbmRleCA9IGxheWVyQW5pbWF0aW9uLT52YWx1ZUNvdW50KCkgLSAxOworCisg
ICAgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHByZXZLZXlmcmFtZSA9IGxheWVyQW5pbWF0aW9uLT52
YWx1ZUF0KHByZXZJbmRleCk7CisgICAgY29uc3QgQW5pbWF0aW9uVmFsdWUqIG5leHRLZXlmcmFt
ZSA9IGxheWVyQW5pbWF0aW9uLT52YWx1ZUF0KG5leHRJbmRleCk7CisKKyAgICBmcm9tVmFsdWUg
PSBwcmV2S2V5ZnJhbWU7CisgICAgdG9WYWx1ZSA9IG5leHRLZXlmcmFtZTsKKworICAgIG9mZnNl
dCA9IHByZXZLZXlmcmFtZS0+a2V5VGltZSgpOworICAgIHNjYWxlID0gMS4wIC8gKG5leHRLZXlm
cmFtZS0+a2V5VGltZSgpIC0gcHJldktleWZyYW1lLT5rZXlUaW1lKCkpOworCisgICAgY29uc3Qg
VGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uID0gdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRp
b25WYWx1ZShwcmV2S2V5ZnJhbWUsIGxheWVyQW5pbWF0aW9uKTsKKworICAgIHByb2cgPSBwcm9n
cmVzcyhlbGFwc2VkVGltZSwgbGF5ZXJBbmltYXRpb24sIHNjYWxlLCBvZmZzZXQsIHRpbWluZ0Z1
bmN0aW9uKTsKK30KKwordm9pZCBMYXllckFuaW1hdGlvbjo6YXBwbHkoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCogbGF5ZXIsIGRvdWJsZSBlbGFwc2VkVGltZSkKK3sKKyAgICBjb25zdCBBbmltYXRp
b25WYWx1ZSogZnJvbSA9IDA7CisgICAgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHRvID0gMDsKKyAg
ICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjA7CisKKyAgICBmZXRjaEludGVydmFsRW5kcG9pbnRzKGVs
YXBzZWRUaW1lLCB0aGlzLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworCisgICAgc3dpdGNoIChwcm9w
ZXJ0eSgpKSB7CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOgorICAg
ICAgICBsYXllci0+c2V0VHJhbnNmb3JtKGJsZW5kVHJhbnNmb3JtKHN0YXRpY19jYXN0PGNvbnN0
IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4oZnJvbSktPnZhbHVlKCksIHN0YXRpY19jYXN0PGNv
bnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpLCBwcm9ncmVzcykpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5OgorICAgICAg
ICBsYXllci0+c2V0T3BhY2l0eShibGVuZE9wYWNpdHkoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRB
bmltYXRpb25WYWx1ZSo+KGZyb20pLT52YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFu
aW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpLCBwcm9ncmVzcykpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6CisgICAgY2FzZSBBbmlt
YXRlZFByb3BlcnR5V2Via2l0RmlsdGVyOgorICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eUludmFs
aWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4IExheWVyQW5pbWF0aW9uOjpibGVuZFRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdAoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHQ7CisKKyAgICBpZiAobV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZCkgeworICAgICAg
ICAvLyBBIHRyaWNrIHRvIGF2b2lkIHRvdWNoaW5nIHRoZSByZWZjb3VudCBvZiBzaGFyZWQgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvbiB0aGUgd3JvbmcgdGhyZWFkLgorICAgICAgICAvLyBTaW5jZSBU
cmFuc2Zvck9wZXJhdGlvbiBpcyBub3QgVGhyZWFkU2FmZVJlZkNvdW50ZWQsIHdlIGFyZSBvbmx5
IGFsbG93ZWQgdG8gdG91Y2ggdGhlIHJlZgorICAgICAgICAvLyBjb3VudCBvZiBzaGFyZWQgb3Bl
cmF0aW9ucyB3aGVuIHRoZSBXZWJLaXQgdGhyZWFkIGFuZCBjb21wb3NpdGluZyB0aHJlYWQgYXJl
IGluIHN5bmMuCisgICAgICAgIFZlY3RvcjxUcmFuc2Zvcm1PcGVyYXRpb24qPiByZXN1bHQ7Cisg
ICAgICAgIFZlY3RvcjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+IG93bmVkOworCisgICAg
ICAgIHVuc2lnbmVkIGZyb21TaXplID0gZnJvbS0+b3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICAg
ICAgdW5zaWduZWQgdG9TaXplID0gdG8tPm9wZXJhdGlvbnMoKS5zaXplKCk7CisgICAgICAgIHVu
c2lnbmVkIHNpemUgPSBtYXgoZnJvbVNpemUsIHRvU2l6ZSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlv
biogZnJvbU9wID0gKGkgPCBmcm9tU2l6ZSkgPyBmcm9tLT5vcGVyYXRpb25zKClbaV0uZ2V0KCkg
OiAwOworICAgICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uKiB0b09wID0gKGkgPCB0b1NpemUp
ID8gdG8tPm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7CisgICAgICAgICAgICBSZWZQdHI8VHJh
bnNmb3JtT3BlcmF0aW9uPiBibGVuZGVkT3AgPSB0b09wID8gdG9PcC0+YmxlbmQoZnJvbU9wLCBw
cm9ncmVzcykgOiAoZnJvbU9wID8gZnJvbU9wLT5ibGVuZCgwLCBwcm9ncmVzcywgdHJ1ZSkgOiBQ
YXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4oMCkpOworICAgICAgICAgICAgaWYgKGJsZW5k
ZWRPcCkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYmxlbmRlZE9wLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBvd25lZC5hcHBlbmQoYmxlbmRlZE9wKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gaWRlbnRp
dHlPcCA9IElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgICAg
ICAgICBvd25lZC5hcHBlbmQoaWRlbnRpdHlPcCk7CisgICAgICAgICAgICAgICAgaWYgKHByb2dy
ZXNzID4gMC41KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvT3AgPyB0b09w
IDogaWRlbnRpdHlPcC5nZXQoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKGZyb21PcCA/IGZyb21PcCA6IGlkZW50aXR5T3AuZ2V0KCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgSW50U2l6ZSBzeiA9IGJveFNp
emUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIHJlc3VsdFtpXS0+YXBwbHkodCwgc3opOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIENvbnZlcnQgdGhlIFRyYW5zZm9ybU9wZXJhdGlvbnMgaW50byBtYXRyaWNlcy4K
KyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbVQ7CisgICAgICAgIGZyb20tPmFwcGx5
KGJveFNpemUoKSwgZnJvbVQpOworICAgICAgICB0by0+YXBwbHkoYm94U2l6ZSgpLCB0KTsKKwor
ICAgICAgICB0LmJsZW5kKGZyb21ULCBwcm9ncmVzcyk7CisgICAgfQorCisgICAgcmV0dXJuIHQ7
Cit9CisKK2Zsb2F0IExheWVyQW5pbWF0aW9uOjpibGVuZE9wYWNpdHkoZmxvYXQgZnJvbSwgZmxv
YXQgdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKK3sKKyAgICBmbG9hdCBvcGFjaXR5ID0gZnJv
bSArICh0byAtIGZyb20pICogcHJvZ3Jlc3M7CisKKyAgICByZXR1cm4gbWF4KDAuMGYsIG1pbihv
cGFjaXR5LCAxLjBmKSk7Cit9CisKK3ZvaWQgTGF5ZXJBbmltYXRpb246OnZhbGlkYXRlVHJhbnNm
b3JtTGlzdHMoKQoreworICAgIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQgPSBmYWxzZTsK
KworICAgIGlmIChtX3ZhbHVlcy5zaXplKCkgPCAyIHx8IHByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRW1wdHkg
dHJhbnNmb3JtcyBtYXRjaCBhbnl0aGluZywgc28gZmluZCB0aGUgZmlyc3Qgbm9uLWVtcHR5IGVu
dHJ5IGFzIHRoZSByZWZlcmVuY2UuCisgICAgc2l6ZV90IG51bUtleWZyYW1lcyA9IG1fdmFsdWVz
LnNpemUoKTsKKyAgICBzaXplX3QgZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXgg
PSBudW1LZXlmcmFtZXM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1l
czsgKytpKSB7CisgICAgICAgIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiBjdXJyZW50
S2V5ZnJhbWUgPSBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KG1f
dmFsdWVzLmF0KGkpKTsKKyAgICAgICAgaWYgKGN1cnJlbnRLZXlmcmFtZS0+dmFsdWUoKS0+c2l6
ZSgpKSB7CisgICAgICAgICAgICBmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCA9
IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChmaXJz
dE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCA9PSBudW1LZXlmcmFtZXMpCisgICAgICAg
IHJldHVybjsKKworICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZpcnN0VmFsID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPihtX3ZhbHVlcy5hdChmaXJz
dE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCkpLT52YWx1ZSgpOworCisgICAgLy8gU2Vl
IGlmIHRoZSBrZXlmcmFtZXMgYXJlIHZhbGlkLgorICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdE5v
bkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCArIDE7IGkgPCBudW1LZXlmcmFtZXM7ICsraSkg
eworICAgICAgICBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogY3VycmVudEtleWZyYW1l
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPihtX3ZhbHVlcy5h
dChpKSk7CisgICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHZhbCA9IGN1cnJlbnRL
ZXlmcmFtZS0+dmFsdWUoKTsKKworICAgICAgICAvLyBBIG51bGwgdHJhbnNmb3JtIG1hdGNoZXMg
YW55dGhpbmcuCisgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBJZiB0aGUgc2l6ZXMgb2YgdGhlIGZ1bmN0
aW9uIGxpc3RzIGRvbid0IG1hdGNoLCB0aGUgbGlzdHMgZG9uJ3QgbWF0Y2guCisgICAgICAgIGlm
IChmaXJzdFZhbC0+b3BlcmF0aW9ucygpLnNpemUoKSAhPSB2YWwtPm9wZXJhdGlvbnMoKS5zaXpl
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gSWYgdGhlIHR5cGVzIG9mIGVh
Y2ggZnVuY3Rpb24gYXJlIG5vdCB0aGUgc2FtZSwgdGhlIGxpc3RzIGRvbid0IG1hdGNoLgorICAg
ICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGZpcnN0VmFsLT5vcGVyYXRpb25zKCkuc2l6ZSgp
OyArK2opIHsKKyAgICAgICAgICAgIGlmICghZmlyc3RWYWwtPm9wZXJhdGlvbnMoKVtqXS0+aXNT
YW1lVHlwZSgqdmFsLT5vcGVyYXRpb25zKClbal0pKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEtleWZyYW1lcyBhcmUgdmFsaWQuCisgICAgbV90
cmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZCA9IHRydWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJBbmltYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJBbmlt
YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xMDQ0NzcwODJlNDk5ZTdhMzU3NjNjZWNmOWU0ZmI2MTBlOWIw
MmFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9MYXllckFuaW1hdGlvbi5oCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBMYXllckFuaW1hdGlvbl9oCisjZGVmaW5lIExheWVy
QW5pbWF0aW9uX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKworI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2RlZmluZSBE
RUJVR19MQVlFUl9BTklNQVRJT04gMAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFu
aW1hdGlvbjsKK2NsYXNzIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ7CitjbGFzcyBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDsKKworLy8gVGhpcyBjbGFzcyB1c2VzIG5vbi10aHJlYWRzYWZlIHJlZmNvdW50
aW5nIGluIHRoZSBXZWJDb3JlOjpBbmltYXRpb24gYW5kCisvLyBXZWJDb3JlOjpTdHJpbmcgbWVt
YmVycywgc28gdXNpbmcgdGhyZWFkc2FmZSByZWZjb3VudGluZyBoZXJlIHdvdWxkIGJlIGEgYmln
CisvLyBjb3Zlci11cC4gSW5zdGVhZCwgeW91IG11c3QgYmUgY2FyZWZ1bCB0byB1c2UgcmVmL2Rl
cmVmIHRoaXMgY2xhc3Mgb25seSBvbgorLy8gdGhlIFdlYktpdCB0aHJlYWQsIG9yIHdoZW4gdGhl
IFdlYktpdCBhbmQgY29tcG9zaXRpbmcgdGhyZWFkcyBhcmUgaW4gc3luYy4KK2NsYXNzIExheWVy
QW5pbWF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJBbmltYXRpb24+IHsKK3B1YmxpYzoK
KyAgICAvLyBXZWJLaXQgdGhyZWFkIG9ubHkKKyAgICAvLyBCZWNhdXNlIHRoZSByZWZjb3VudGlu
ZyBkb25lIGluIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIGlzIG5vdCB0aHJlYWQgc2FmZSwK
KyAgICAvLyB0aGUgTGF5ZXJBbmltYXRpb24gbXVzdCBiZSBjcmVhdGVkIG9yIGRlc3Ryb3llZCBv
biB0aGUgV2ViS2l0IHRocmVhZCwgb3Igd2hlbgorICAgIC8vIHRoZSBXZWJLaXQgYW5kIGNvbXBv
c2l0aW5nIHRocmVhZHMgYXJlIGluIHN5bmMuCisgICAgLy8gQWxzbywgdGhlIG5hbWUgcHJvcGVy
dHkgaXMgdXNpbmcgYSBTdHJpbmcgd2hpY2ggaGFzIG5vbi10aHJlYWRzYWZlIHJlZmNvdW50aW5n
LgorICAgIC8vIFRoZSBzZXRTdGFydFRpbWUgbWV0aG9kIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBt
dXN0IG9ubHkgYmUgY2FsbGVkIG9uIGEgbmV3bHkKKyAgICAvLyBjcmVhdGVkIExheWVyQW5pbWF0
aW9uIGJlZm9yZSBzZW5kaW5nIGl0IG9mZiB0byB0aGUgY29tcG9zaXRpbmcgdGhyZWFkLgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExheWVyQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9u
KiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyQW5pbWF0aW9uKHZhbHVlcywgYm94
U2l6ZSwgYW5pbWF0aW9uLCBuYW1lLCB0aW1lT2Zmc2V0KSk7CisgICAgfQorCisgICAgUGFzc1Jl
ZlB0cjxMYXllckFuaW1hdGlvbj4gY2xvbmUoZG91YmxlIHRpbWVPZmZzZXQpCisgICAgeworICAg
ICAgICBMYXllckFuaW1hdGlvbiogYW5pbWF0aW9uID0gbmV3IExheWVyQW5pbWF0aW9uKCp0aGlz
KTsKKyAgICAgICAgLy8gVGhlIGNsb25lZCBhbmltYXRpb24gc2hvdWxkIGdldCBhIGRpZmZlcmVu
dCB0aW1lT2Zmc2V0IGlmIGl0J3MgcGF1c2VkLgorICAgICAgICBhbmltYXRpb24tPm1fdGltZU9m
ZnNldCA9IHRpbWVPZmZzZXQ7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKGFuaW1hdGlvbik7
CisgICAgfQorCisgICAgfkxheWVyQW5pbWF0aW9uKCkKKyAgICB7CisgICAgfQorCisgICAgY29u
c3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgdm9pZCBzZXRT
dGFydFRpbWUoZG91YmxlIHRpbWUpIHsgbV9zdGFydFRpbWUgPSB0aW1lOyB9CisKKyAgICAvLyBU
aGVzZSBmdW5jdGlvbnMgYXJlIHRocmVhZCBzYWZlIChpbW11dGFibGUgc3RhdGUpLgorICAgIHN0
YXRpYyBpbnQgaWRGcm9tQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PGludD4oYW5pbWF0aW9uKTsgfQorICAgIGJvb2wgaXNFcXVh
bFRvQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uKSBjb25zdCB7IHJldHVybiBp
ZEZyb21BbmltYXRpb24oYW5pbWF0aW9uKSA9PSBpZCgpOyB9CisgICAgaW50IGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQorICAgIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzLnByb3BlcnR5KCk7IH0KKyAgICBJbnRTaXplIGJveFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2JveFNpemU7IH0KKyAgICBkb3VibGUgdGltZU9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fdGltZU9mZnNldDsgfQorICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXJ0VGltZTsgfQorICAgIHNpemVfdCB2YWx1ZUNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CisKKyAgICAvLyBOT1RFOiBEb24ndCB0cnkgdG8gcmVm
IGEgVGltaW5nRnVuY3Rpb24sIHRoYXQncyBub3QgYSB0aHJlYWRzYWZlIG9wZXJhdGlvbi4KKyAg
ICBjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X3RpbWluZ0Z1bmN0aW9uLmdldCgpOyB9CisgICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9kdXJhdGlvbjsgfQorICAgIGludCBpdGVyYXRpb25Db3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1faXRlcmF0aW9uQ291bnQ7IH0KKyAgICBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQorCisgICAgLy8gTk9U
RTogRG9uJ3QgdHJ5IHRvIGNsb25lKCkgYW4gQW5pbWF0aW9uVmFsdWUsIHRoYXQncyBub3QgYSB0
aHJlYWRzYWZlIG9wZXJhdGlvbiBzaW5jZSBpdCBtdXRhdGVzIHJlZmNvdW50cy4KKyAgICBjb25z
dCBBbmltYXRpb25WYWx1ZSogdmFsdWVBdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZXMuYXQoaSk7IH0KKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGJsZW5kVHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMq
LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0OworICAgIGZsb2F0IGJsZW5kT3BhY2l0eShmbG9hdCBm
cm9tLCBmbG9hdCB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdDsKKyAgICB2b2lkIGFwcGx5KExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBkb3VibGUgZWxhcHNlZFRpbWUpOworCitwcml2YXRlOgor
ICAgIExheWVyQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0
IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQorICAgICAgICA6IG1faWQocmVpbnRlcnByZXRf
Y2FzdDxpbnQ+KGFuaW1hdGlvbikpCisgICAgICAgICwgbV92YWx1ZXModmFsdWVzKQorICAgICAg
ICAsIG1fYm94U2l6ZShib3hTaXplKQorICAgICAgICAsIG1fbmFtZShuYW1lKQorICAgICAgICAs
IG1fdGltZU9mZnNldCh0aW1lT2Zmc2V0KQorICAgICAgICAsIG1fc3RhcnRUaW1lKDApCisgICAg
ICAgICwgbV90aW1pbmdGdW5jdGlvbigwKQorICAgICAgICAsIG1fZHVyYXRpb24oYW5pbWF0aW9u
LT5kdXJhdGlvbigpKQorICAgICAgICAsIG1faXRlcmF0aW9uQ291bnQoYW5pbWF0aW9uLT5pdGVy
YXRpb25Db3VudCgpKQorICAgICAgICAsIG1fZGlyZWN0aW9uKGFuaW1hdGlvbi0+ZGlyZWN0aW9u
KCkpCisgICAgeworICAgICAgICBpZiAoYW5pbWF0aW9uLT5pc1RpbWluZ0Z1bmN0aW9uU2V0KCkp
CisgICAgICAgICAgICBtX3RpbWluZ0Z1bmN0aW9uID0gYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlv
bigpOworCisgICAgICAgIHZhbGlkYXRlVHJhbnNmb3JtTGlzdHMoKTsKKyAgICB9CisKKyAgICBM
YXllckFuaW1hdGlvbihjb25zdCBMYXllckFuaW1hdGlvbiYgb3RoZXIpCisgICAgICAgIDogIFJl
ZkNvdW50ZWQ8TGF5ZXJBbmltYXRpb24+KCkKKyAgICAgICAgLCBtX2lkKG90aGVyLm1faWQpCisg
ICAgICAgICwgbV92YWx1ZXMob3RoZXIubV92YWx1ZXMpCisgICAgICAgICwgbV9ib3hTaXplKG90
aGVyLm1fYm94U2l6ZSkKKyAgICAgICAgLCBtX25hbWUob3RoZXIubV9uYW1lKQorICAgICAgICAs
IG1fdGltZU9mZnNldChvdGhlci5tX3RpbWVPZmZzZXQpCisgICAgICAgICwgbV9zdGFydFRpbWUo
b3RoZXIubV9zdGFydFRpbWUpCisgICAgICAgICwgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxp
ZChvdGhlci5tX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkKQorICAgICAgICAsIG1fdGltaW5n
RnVuY3Rpb24ob3RoZXIubV90aW1pbmdGdW5jdGlvbikKKyAgICAgICAgLCBtX2R1cmF0aW9uKG90
aGVyLm1fZHVyYXRpb24pCisgICAgICAgICwgbV9pdGVyYXRpb25Db3VudChvdGhlci5tX2l0ZXJh
dGlvbkNvdW50KQorICAgICAgICAsIG1fZGlyZWN0aW9uKG90aGVyLm1fZGlyZWN0aW9uKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIHZhbGlkYXRlVHJhbnNmb3JtTGlzdHMoKTsKKworICAgIGlu
dCBtX2lkOworCisgICAgLy8gTk9URTogRG9uJ3QgZXhwb3NlIHRoZSBLZXlmcmFtZVZhbHVlTGlz
dCBkaXJlY3RseSwgc2luY2UgaXRzIGNvcHkKKyAgICAvLyBjb25zdHJ1Y3RvciBtdXRhdGVzIHJl
ZmNvdW50cyBhbmQgdGh1cyBpcyBub3QgdGhyZWFkIHNhZmUuCisgICAgS2V5ZnJhbWVWYWx1ZUxp
c3QgbV92YWx1ZXM7CisgICAgSW50U2l6ZSBtX2JveFNpemU7CisgICAgU3RyaW5nIG1fbmFtZTsK
KyAgICBkb3VibGUgbV90aW1lT2Zmc2V0OworICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKKyAgICBi
b29sIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQ7CisKKyAgICBSZWZQdHI8VGltaW5nRnVu
Y3Rpb24+IG1fdGltaW5nRnVuY3Rpb247CisgICAgZG91YmxlIG1fZHVyYXRpb247CisgICAgaW50
IG1faXRlcmF0aW9uQ291bnQ7CisgICAgQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gbV9k
aXJlY3Rpb247Cit9OworCit9CisKKyNlbmRpZiAvLyBMYXllckFuaW1hdGlvbl9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>