<?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>61830</bug_id>
          
          <creation_ts>2011-05-31 17:57:23 -0700</creation_ts>
          <short_desc>Add AudioParam parameter scheduling implementation</short_desc>
          <delta_ts>2011-06-03 20:09:10 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Chris Rogers">crogers</assigned_to>
          <cc>kbr</cc>
    
    <cc>thakis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>413039</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-31 17:57:23 -0700</bug_when>
    <thetext>Add AudioParam parameter scheduling implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413049</commentid>
    <comment_count>1</comment_count>
      <attachid>95525</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-31 18:13:33 -0700</bug_when>
    <thetext>Created attachment 95525
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413778</commentid>
    <comment_count>2</comment_count>
      <attachid>95525</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-06-01 17:20:46 -0700</bug_when>
    <thetext>Comment on attachment 95525
Patch

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

This generally looks good though I do have a few questions, one high-level. Still, I&apos;ll mark this r+ to avoid blocking you.

&gt; Source/WebCore/webaudio/AudioParamTimeline.cpp:145
&gt; +    if (!m_eventsLock.tryLock()) {

I know that similar trylocks are used elsewhere on the audio thread, but won&apos;t this lock have a pretty high chance of contention if the application is requesting animation of a lot of parameters? It seems to me that there will be a high risk of dropouts specifically due to this new mechanism.

&gt; Source/WebCore/webaudio/AudioParamTimeline.cpp:174
&gt; +    ASSERT(values);

Can you add some assert about m_eventsLock being held here?

&gt; Source/WebCore/webaudio/AudioParamTimeline.cpp:221
&gt; +        float time2 = nextEvent ? nextEvent-&gt;time() : endTime + 1.0;

&quot;.0&quot; suffix is probably unneeded here and in several places below and should be removed per style guide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415079</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-03 12:17:42 -0700</bug_when>
    <thetext>Committed r88037: &lt;http://trac.webkit.org/changeset/88037&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415082</commentid>
    <comment_count>4</comment_count>
      <attachid>95525</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-03 12:22:38 -0700</bug_when>
    <thetext>Comment on attachment 95525
Patch

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

&gt;&gt; Source/WebCore/webaudio/AudioParamTimeline.cpp:145
&gt;&gt; +    if (!m_eventsLock.tryLock()) {
&gt; 
&gt; I know that similar trylocks are used elsewhere on the audio thread, but won&apos;t this lock have a pretty high chance of contention if the application is requesting animation of a lot of parameters? It seems to me that there will be a high risk of dropouts specifically due to this new mechanism.

Each parameter has its own lock, so having many parameters won&apos;t increase the risk.  Also, the result of failing the tryLock will not be a &quot;dropout&quot; but simply a smooth continuation of using the previous parameter value.  Any param change will happen the next render quantum delayed by only a few milliseconds.  But even this will be a somewhat rare occurrence.

&gt;&gt; Source/WebCore/webaudio/AudioParamTimeline.cpp:174
&gt;&gt; +    ASSERT(values);
&gt; 
&gt; Can you add some assert about m_eventsLock being held here?

Not sure how to assert a Mutex being held.  I&apos;d rather not call tryLock() just to make sure it fails...

&gt;&gt; Source/WebCore/webaudio/AudioParamTimeline.cpp:221
&gt;&gt; +        float time2 = nextEvent ? nextEvent-&gt;time() : endTime + 1.0;
&gt; 
&gt; &quot;.0&quot; suffix is probably unneeded here and in several places below and should be removed per style guide.

FIXED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415367</commentid>
    <comment_count>5</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2011-06-03 19:36:34 -0700</bug_when>
    <thetext>Hi this breaks the clang build thusly:

clang:warning: argument unused during compilation: &apos;-fobjc-exceptions&apos;
/b/build/slave/Mac_Clang__dbg_/build/src/third_party/WebKit/Source/WebCore/WebCore.gyp/../webaudio/AudioParamTimeline.cpp:231:39:error: operands of ? are integers of different signs: &apos;unsigned int&apos; and &apos;int&apos; [-Werror,-Wsign-compare]
        int nextEventType = nextEvent ? nextEvent-&gt;type() : -1 /* unknown */;

Can you fix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415369</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-03 19:41:36 -0700</bug_when>
    <thetext>Ok, I&apos;ll try to fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415373</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-03 20:09:10 -0700</bug_when>
    <thetext>should be fixed now in:
http://trac.webkit.org/changeset/88089</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95525</attachid>
            <date>2011-05-31 18:13:33 -0700</date>
            <delta_ts>2011-06-03 12:22:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61830-20110531181331.patch</filename>
            <type>text/plain</type>
            <size>35433</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3NzY1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTEtMDUtMzEgIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgQXVkaW9QYXJhbSBwYXJhbWV0ZXIgc2NoZWR1bGluZyBp
bXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjE4MzAKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJIGlzIG5v
dCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdlYmF1ZGlvL0F1
ZGlvUGFyYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6dmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6c21vb3RoZWRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb1BhcmFtOjpzbW9vdGgpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6
Y2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVWYWx1ZXMpOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlv
UGFyYW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW06OnNldENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1BhcmFtOjpzZXRWYWx1ZUF0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFt
OjpsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFt
OjpleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
UGFyYW06OnNldFRhcmdldFZhbHVlQXRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFy
YW06OnNldFZhbHVlQ3VydmVBdFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6
Y2FuY2VsU2NoZWR1bGVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW06Omhh
c1RpbWVsaW5lVmFsdWVzKToKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1BhcmFtLmlkbDoKKyAg
ICAgICAgKiB3ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6c2V0VmFsdWVBdFRpbWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9QYXJhbVRpbWVsaW5lOjpsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6OmV4cG9uZW50aWFsUmFtcFRvVmFs
dWVBdFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbVRpbWVsaW5lOjpzZXRUYXJn
ZXRWYWx1ZUF0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6OnNl
dFZhbHVlQ3VydmVBdFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZE51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6Omluc2VydEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6Y2FuY2VsU2NoZWR1bGVkVmFsdWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVGb3JDb250ZXh0VGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6OnZhbHVlc0ZvclRpbWVS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0aW1lVG9TYW1wbGVGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6OnZhbHVlc0ZvclRpbWVSYW5nZUltcGwpOgorICAg
ICAgICAqIHdlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6QXVkaW9QYXJhbVRpbWVsaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6aGFzVmFsdWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6UGFyYW1FdmVudDo6UGFyYW1FdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6OlBhcmFtRXZlbnQ6OnR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9QYXJhbVRpbWVsaW5lOjpQYXJhbUV2ZW50Ojp2YWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6OlBhcmFtRXZlbnQ6OnRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbVRpbWVsaW5lOjpQYXJhbUV2ZW50Ojp0aW1lQ29uc3Rh
bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbVRpbWVsaW5lOjpQYXJhbUV2ZW50Ojpk
dXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6OlBhcmFtRXZl
bnQ6OmN1cnZlKToKKwogMjAxMS0wNS0yNyAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQkocmV2aXNpb24gODc3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJ
KHdvcmtpbmcgY29weSkKQEAgLTU5ODAsNiArNTk4MCw4IEBACiAgICAgICAgICAgICAnd2ViYXVk
aW8vQXVkaW9QYW5uZXJOb2RlLmgnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvUGFyYW0u
Y3BwJywKICAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1BhcmFtLmgnLAorICAgICAgICAgICAg
J3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAnLAorICAgICAgICAgICAgJ3dlYmF1ZGlv
L0F1ZGlvUGFyYW1UaW1lbGluZS5oJywKICAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1Byb2Nl
c3NpbmdFdmVudC5jcHAnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2
ZW50LmgnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5oJywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDg3NzU4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01OTE2LDYgKzU5MTYsOCBAQAogCQlGRDMx
NjBCRTEyQjAyNzJBMDBDMUEzNTkgLyogQXVkaW9GaWxlUmVhZGVyTWFjLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzE2MEI4MTJCMDI3MkEwMEMx
QTM1OSAvKiBBdWRpb0ZpbGVSZWFkZXJNYWMuY3BwICovOyB9OwogCQlGRDMxNjBCRjEyQjAyNzJB
MDBDMUEzNTkgLyogQXVkaW9GaWxlUmVhZGVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDMxNjBCOTEyQjAyNzJBMDBDMUEzNTkgLyogQXVkaW9G
aWxlUmVhZGVyTWFjLmggKi87IH07CiAJCUZEMzE2MEMwMTJCMDI3MkEwMEMxQTM1OSAvKiBGRlRG
cmFtZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRDMxNjBCQTEyQjAyNzJBMDBDMUEzNTkgLyogRkZURnJhbWVNYWMuY3BwICovOyB9OworCQlG
RDM1OTE4RjEzOERCMjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzU5MThEMTM4REIyMjAw
MEUxRUJFQyAvKiBBdWRpb1BhcmFtVGltZWxpbmUuY3BwICovOyB9OworCQlGRDM1OTE5MDEzOERC
MjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDM1OTE4RTEzOERCMjIwMDBFMUVCRUMgLyogQXVk
aW9QYXJhbVRpbWVsaW5lLmggKi87IH07CiAJCUZENTM3MzUyMTM3QjY1MTgwMDAwOERDRSAvKiBa
ZXJvUG9sZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRDUzNzM1MDEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwICovOyB9OwogCQlGRDUz
NzM1MzEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENTM3MzUxMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJv
UG9sZS5oICovOyB9OwogCQlGRDUzNzM1NjEzN0I2NTNCMDAwMDhEQ0UgLyogRHluYW1pY3NDb21w
cmVzc29yS2VybmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZENTM3MzU0MTM3QjY1M0IwMDAwOERDRSAvKiBEeW5hbWljc0NvbXByZXNzb3JLZXJu
ZWwuY3BwICovOyB9OwpAQCAtMTI1MTIsNiArMTI1MTQsOCBAQAogCQlGRDMxNjBCODEyQjAyNzJB
MDBDMUEzNTkgLyogQXVkaW9GaWxlUmVhZGVyTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEF1ZGlvRmlsZVJlYWRlck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZEMzE2MEI5MTJCMDI3MkEwMEMxQTM1OSAvKiBBdWRpb0ZpbGVSZWFkZXJN
YWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9GaWxlUmVhZGVyTWFj
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMzE2MEJBMTJCMDI3MkEwMEMxQTM1
OSAvKiBGRlRGcmFtZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGRlRGcmFtZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMzU5MThE
MTM4REIyMjAwMEUxRUJFQyAvKiBBdWRpb1BhcmFtVGltZWxpbmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQzNTkxOEUxMzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFy
YW1UaW1lbGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1BhcmFt
VGltZWxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ1MzczNTAxMzdCNjUx
ODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFplcm9Qb2xlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ1Mzcz
NTExMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFplcm9Qb2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZENTM3
MzU0MTM3QjY1M0IwMDAwOERDRSAvKiBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHluYW1pY3NDb21wcmVzc29yS2VybmVs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NzE1LDYgKzE5NzE5LDggQEAK
IAkJCQlGRDMxNUZEMjEyQjAyNjc1MDBDMUEzNTkgLyogQXVkaW9QYXJhbS5jcHAgKi8sCiAJCQkJ
RkQzMTVGRDMxMkIwMjY3NTAwQzFBMzU5IC8qIEF1ZGlvUGFyYW0uaCAqLywKIAkJCQlGRDMxNUZE
NDEyQjAyNjc1MDBDMUEzNTkgLyogQXVkaW9QYXJhbS5pZGwgKi8sCisJCQkJRkQzNTkxOEQxMzhE
QjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5jcHAgKi8sCisJCQkJRkQzNTkxOEUx
MzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5oICovLAogCQkJCUZEMzE1RkQ1
MTJCMDI2NzYwMEMxQTM1OSAvKiBBdWRpb1Byb2Nlc3NpbmdFdmVudC5jcHAgKi8sCiAJCQkJRkQz
MTVGRDYxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50LmggKi8sCiAJCQkJ
RkQzMTVGRDcxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbCAqLywK
QEAgLTIzMDE0LDYgKzIzMDIwLDcgQEAKIAkJCQlCMTJEMjM2RTEzNTYwMzREMDAyQTI4RDQgLyog
SlNNdWx0aXBsZVRyYWNrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEMwRTMzNEQxMzhBOTJD
NzAwOERBOTRGIC8qIExldmVsREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEMw
RTMzNEYxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0ZUJhdGNoLmggaW4gSGVhZGVycyAq
LywKKwkJCQlGRDM1OTE5MDEzOERCMjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTI1NzEwLDYgKzI1NzE3LDcgQEAKIAkJCQlCMTJEMjM2RDEzNTYw
MzREMDAyQTI4RDQgLyogSlNNdWx0aXBsZVRyYWNrTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4QzBFMzM0QzEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCThDMEUzMzRFMTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCV3JpdGVC
YXRjaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDM1OTE4RjEzOERCMjIwMDBFMUVCRUMgLyog
QXVkaW9QYXJhbVRpbWVsaW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAJKHJldmlzaW9uIDg3NzU4KQorKysgU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDgg
QEAKIAogI2luY2x1ZGUgIkF1ZGlvUGFyYW0uaCIKIAorI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgor
I2luY2x1ZGUgIkF1ZGlvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYsNiArMzgsMjAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY29uc3QgZG91YmxlIEF1ZGlvUGFyYW06OkRlZmF1bHRTbW9vdGhpbmdDb25zdGFudCA9
IDAuMDU7CiBjb25zdCBkb3VibGUgQXVkaW9QYXJhbTo6U25hcFRocmVzaG9sZCA9IDAuMDAxOwog
CitmbG9hdCBBdWRpb1BhcmFtOjp2YWx1ZSgpCit7CisgICAgLy8gVXBkYXRlIHZhbHVlIGZvciB0
aW1lbGluZS4KKyAgICBpZiAoY29udGV4dCgpICYmIGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgp
KSB7CisgICAgICAgIGJvb2wgaGFzVmFsdWU7CisgICAgICAgIGZsb2F0IHRpbWVsaW5lVmFsdWUg
PSBtX3RpbWVsaW5lLnZhbHVlRm9yQ29udGV4dFRpbWUoY29udGV4dCgpLCBtX3ZhbHVlLCBoYXNW
YWx1ZSk7CisKKyAgICAgICAgaWYgKGhhc1ZhbHVlKQorICAgICAgICAgICAgbV92YWx1ZSA9IHRp
bWVsaW5lVmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3Zh
bHVlKTsKK30KKwogdm9pZCBBdWRpb1BhcmFtOjpzZXRWYWx1ZShmbG9hdCB2YWx1ZSkKIHsKICAg
ICAvLyBDaGVjayBhZ2FpbnN0IEphdmFTY3JpcHQgZ2l2aW5nIHVzIGJvZ3VzIGZsb2F0aW5nLXBv
aW50IHZhbHVlcy4KQEAgLTQ0LDIzICs2MCw1NiBAQCB2b2lkIEF1ZGlvUGFyYW06OnNldFZhbHVl
KGZsb2F0IHZhbHVlKQogICAgICAgICBtX3ZhbHVlID0gdmFsdWU7CiB9CiAKK2Zsb2F0IEF1ZGlv
UGFyYW06OnNtb290aGVkVmFsdWUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4o
bV9zbW9vdGhlZFZhbHVlKTsKK30KKwogYm9vbCBBdWRpb1BhcmFtOjpzbW9vdGgoKQogeworICAg
IC8vIElmIHZhbHVlcyBoYXZlIGJlZW4gZXhwbGljaXRseSBzY2hlZHVsZWQgb24gdGhlIHRpbWVs
aW5lLCB0aGVuIHVzZSB0aGUgZXhhY3QgdmFsdWUuCisgICAgLy8gU21vb3RoaW5nIGVmZmVjdGl2
ZWx5IGlzIHBlcmZvcm1lZCBieSB0aGUgdGltZWxpbmUuCisgICAgYm9vbCB1c2VUaW1lbGluZVZh
bHVlID0gZmFsc2U7CisgICAgaWYgKGNvbnRleHQoKSkKKyAgICAgICAgbV92YWx1ZSA9IG1fdGlt
ZWxpbmUudmFsdWVGb3JDb250ZXh0VGltZShjb250ZXh0KCksIG1fdmFsdWUsIHVzZVRpbWVsaW5l
VmFsdWUpOworICAgIAogICAgIGlmIChtX3Ntb290aGVkVmFsdWUgPT0gbV92YWx1ZSkgewogICAg
ICAgICAvLyBTbW9vdGhlZCB2YWx1ZSBoYXMgYWxyZWFkeSBhcHByb2FjaGVkIGFuZCBzbmFwcGVk
IHRvIHZhbHVlLgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0KLSAgICAvLyBFeHBvbmVu
dGlhbCBhcHByb2FjaAotICAgIG1fc21vb3RoZWRWYWx1ZSArPSAobV92YWx1ZSAtIG1fc21vb3Ro
ZWRWYWx1ZSkgKiBtX3Ntb290aGluZ0NvbnN0YW50OwotCi0gICAgLy8gSWYgd2UgZ2V0IGNsb3Nl
IGVub3VnaCB0aGVuIHNuYXAgdG8gYWN0dWFsIHZhbHVlLgotICAgIGlmIChmYWJzKG1fc21vb3Ro
ZWRWYWx1ZSAtIG1fdmFsdWUpIDwgU25hcFRocmVzaG9sZCkgLy8gRklYTUU6IHRoZSB0aHJlc2hv
bGQgbmVlZHMgdG8gYmUgYWRqdXN0YWJsZSBkZXBlbmRpbmcgb24gcmFuZ2UgLSBidXQgdGhpcyBp
cyBPSyBnZW5lcmFsIHB1cnBvc2UgdmFsdWUuCisgICAgCisgICAgaWYgKHVzZVRpbWVsaW5lVmFs
dWUpCiAgICAgICAgIG1fc21vb3RoZWRWYWx1ZSA9IG1fdmFsdWU7CisgICAgZWxzZSB7CisgICAg
ICAgIC8vIERlemlwcGVyIC0gZXhwb25lbnRpYWwgYXBwcm9hY2guCisgICAgICAgIG1fc21vb3Ro
ZWRWYWx1ZSArPSAobV92YWx1ZSAtIG1fc21vb3RoZWRWYWx1ZSkgKiBtX3Ntb290aGluZ0NvbnN0
YW50OworCisgICAgICAgIC8vIElmIHdlIGdldCBjbG9zZSBlbm91Z2ggdGhlbiBzbmFwIHRvIGFj
dHVhbCB2YWx1ZS4KKyAgICAgICAgaWYgKGZhYnMobV9zbW9vdGhlZFZhbHVlIC0gbV92YWx1ZSkg
PCBTbmFwVGhyZXNob2xkKSAvLyBGSVhNRTogdGhlIHRocmVzaG9sZCBuZWVkcyB0byBiZSBhZGp1
c3RhYmxlIGRlcGVuZGluZyBvbiByYW5nZSAtIGJ1dCB0aGlzIGlzIE9LIGdlbmVyYWwgcHVycG9z
ZSB2YWx1ZS4KKyAgICAgICAgICAgIG1fc21vb3RoZWRWYWx1ZSA9IG1fdmFsdWU7CisgICAgfQog
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEF1ZGlvUGFyYW06OmNhbGN1bGF0ZVNhbXBs
ZUFjY3VyYXRlVmFsdWVzKGZsb2F0KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzKQor
eworICAgIGJvb2wgaXNTYWZlID0gY29udGV4dCgpICYmIGNvbnRleHQoKS0+aXNBdWRpb1RocmVh
ZCgpICYmIHZhbHVlczsKKyAgICBBU1NFUlQoaXNTYWZlKTsKKyAgICBpZiAoIWlzU2FmZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gQ2FsY3VsYXRlIHZhbHVlcyBmb3IgdGhpcyByZW5kZXIg
cXVhbnR1bS4KKyAgICAvLyBOb3JtYWxseSBudW1iZXJPZlZhbHVlcyB3aWxsIGVxdWFsIEF1ZGlv
Tm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcyAodGhlIHJlbmRlciBxdWFudHVtIHNpemUpLgor
ICAgIGZsb2F0IHNhbXBsZVJhdGUgPSBjb250ZXh0KCktPnNhbXBsZVJhdGUoKTsKKyAgICBmbG9h
dCBzdGFydFRpbWUgPSBjb250ZXh0KCktPmN1cnJlbnRUaW1lKCk7CisgICAgZmxvYXQgZW5kVGlt
ZSA9IHN0YXJ0VGltZSArIG51bWJlck9mVmFsdWVzIC8gc2FtcGxlUmF0ZTsKKworICAgIC8vIE5v
dGUgd2UncmUgcnVubmluZyBjb250cm9sIHJhdGUgYXQgdGhlIHNhbXBsZS1yYXRlLgorICAgIC8v
IFBhc3MgaW4gdGhlIGN1cnJlbnQgdmFsdWUgYXMgZGVmYXVsdCB2YWx1ZS4KKyAgICBtX3ZhbHVl
ID0gbV90aW1lbGluZS52YWx1ZXNGb3JUaW1lUmFuZ2Uoc3RhcnRUaW1lLCBlbmRUaW1lLCBtX3Zh
bHVlLCB2YWx1ZXMsIG51bWJlck9mVmFsdWVzLCBzYW1wbGVSYXRlLCBzYW1wbGVSYXRlKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmgJKHJldmlzaW9uIDg3NzU4KQor
KysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw5IEBACiAjaWZuZGVmIEF1ZGlvUGFyYW1faAogI2RlZmluZSBBdWRpb1BhcmFt
X2gKIAorI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkF1ZGlvUGFyYW1UaW1l
bGluZS5oIgorI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KQEAgLTU3LDggKzYwLDExIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3Ntb290aGluZ0NvbnN0
YW50KERlZmF1bHRTbW9vdGhpbmdDb25zdGFudCkKICAgICB7CiAgICAgfQorICAgIAorICAgIHZv
aWQgc2V0Q29udGV4dChBdWRpb0NvbnRleHQqIGNvbnRleHQpIHsgbV9jb250ZXh0ID0gY29udGV4
dDsgfQorICAgIEF1ZGlvQ29udGV4dCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQo
KTsgfQogCi0gICAgZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4obV92YWx1ZSk7IH0KKyAgICBmbG9hdCB2YWx1ZSgpOwogICAgIAogICAgIHZvaWQgc2V0VmFs
dWUoZmxvYXQpOwogCkBAIC03Myw3ICs3OSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFdoZW4gYSBu
ZXcgdmFsdWUgaXMgc2V0IHdpdGggc2V0VmFsdWUoKSwgaW4gb3VyIGludGVybmFsIHVzZSBvZiB0
aGUgcGFyYW1ldGVyIHdlIGRvbid0IGltbWVkaWF0ZWx5IGp1bXAgdG8gaXQuCiAgICAgLy8gSW5z
dGVhZCB3ZSBzbW9vdGhseSBhcHByb2FjaCB0aGlzIHZhbHVlIHRvIGF2b2lkIGdsaXRjaGluZy4K
LSAgICBmbG9hdCBzbW9vdGhlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG1fc21vb3RoZWRWYWx1ZSk7IH0KKyAgICBmbG9hdCBzbW9vdGhlZFZhbHVlKCk7CiAKICAg
ICAvLyBTbW9vdGhseSBleHBvbmVudGlhbGx5IGFwcHJvYWNoZXMgdG8gKGRlLXppcHBlcnMpIHRo
ZSBkZXNpcmVkIHZhbHVlLgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzbW9vdGhlZCB2YWx1ZSBo
YXMgYWxyZWFkeSBzbmFwcGVkIGV4YWN0bHkgdG8gdmFsdWUuCkBAIC04Miw3ICs4OCwyMiBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZXNldFNtb290aGVkVmFsdWUoKSB7IG1fc21vb3RoZWRWYWx1ZSA9
IG1fdmFsdWU7IH0KICAgICB2b2lkIHNldFNtb290aGluZ0NvbnN0YW50KGRvdWJsZSBrKSB7IG1f
c21vb3RoaW5nQ29uc3RhbnQgPSBrOyB9CiAKKyAgICAvLyBQYXJhbWV0ZXIgYXV0b21hdGlvbi4g
ICAgCisgICAgdm9pZCBzZXRWYWx1ZUF0VGltZShmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSkgeyBt
X3RpbWVsaW5lLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aW1lKTsgfQorICAgIHZvaWQgbGluZWFy
UmFtcFRvVmFsdWVBdFRpbWUoZmxvYXQgdmFsdWUsIGZsb2F0IHRpbWUpIHsgbV90aW1lbGluZS5s
aW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgdGltZSk7IH0KKyAgICB2b2lkIGV4cG9uZW50
aWFsUmFtcFRvVmFsdWVBdFRpbWUoZmxvYXQgdmFsdWUsIGZsb2F0IHRpbWUpIHsgbV90aW1lbGlu
ZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCB0aW1lKTsgfQorICAgIHZvaWQg
c2V0VGFyZ2V0VmFsdWVBdFRpbWUoZmxvYXQgdGFyZ2V0VmFsdWUsIGZsb2F0IHRpbWUsIGZsb2F0
IHRpbWVDb25zdGFudCkgeyBtX3RpbWVsaW5lLnNldFRhcmdldFZhbHVlQXRUaW1lKHRhcmdldFZh
bHVlLCB0aW1lLCB0aW1lQ29uc3RhbnQpOyB9CisgICAgdm9pZCBzZXRWYWx1ZUN1cnZlQXRUaW1l
KEZsb2F0MzJBcnJheSogY3VydmUsIGZsb2F0IHRpbWUsIGZsb2F0IGR1cmF0aW9uKSB7IG1fdGlt
ZWxpbmUuc2V0VmFsdWVDdXJ2ZUF0VGltZShjdXJ2ZSwgdGltZSwgZHVyYXRpb24pOyB9CisgICAg
dm9pZCBjYW5jZWxTY2hlZHVsZWRWYWx1ZXMoZmxvYXQgc3RhcnRUaW1lKSB7IG1fdGltZWxpbmUu
Y2FuY2VsU2NoZWR1bGVkVmFsdWVzKHN0YXJ0VGltZSk7IH0KKworICAgIGJvb2wgaGFzVGltZWxp
bmVWYWx1ZXMoKSB7IHJldHVybiBtX3RpbWVsaW5lLmhhc1ZhbHVlcygpOyB9CisgICAgCisgICAg
Ly8gQ2FsY3VsYXRlcyBudW1iZXJPZlZhbHVlcyBwYXJhbWV0ZXIgdmFsdWVzIHN0YXJ0aW5nIGF0
IHRoZSBjb250ZXh0J3MgY3VycmVudCB0aW1lLgorICAgIC8vIE11c3QgYmUgY2FsbGVkIGluIHRo
ZSBjb250ZXh0J3MgcmVuZGVyIHRocmVhZC4KKyAgICB2b2lkIGNhbGN1bGF0ZVNhbXBsZUFjY3Vy
YXRlVmFsdWVzKGZsb2F0KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzKTsKKwogcHJp
dmF0ZToKKyAgICBSZWZQdHI8QXVkaW9Db250ZXh0PiBtX2NvbnRleHQ7CiAgICAgU3RyaW5nIG1f
bmFtZTsKICAgICBkb3VibGUgbV92YWx1ZTsKICAgICBkb3VibGUgbV9kZWZhdWx0VmFsdWU7CkBA
IC05Myw2ICsxMTQsOCBAQCBwcml2YXRlOgogICAgIC8vIFNtb290aGluZyAoZGUtemlwcGVyaW5n
KQogICAgIGRvdWJsZSBtX3Ntb290aGVkVmFsdWU7CiAgICAgZG91YmxlIG1fc21vb3RoaW5nQ29u
c3RhbnQ7CisgICAgCisgICAgQXVkaW9QYXJhbVRpbWVsaW5lIG1fdGltZWxpbmU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b1BhcmFtLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bh
cmFtLmlkbAkocmV2aXNpb24gODc3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b1BhcmFtLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzksNSArMzksMjEgQEAgbW9kdWxlIHdlYmF1
ZGlvIHsKIAogICAgICAgICAvLyBGSVhNRTogQ291bGQgZGVmaW5lIHVuaXRzIGNvbnN0YW50cyBo
ZXJlIChzZWNvbmRzLCBkZWNpYmVscywgY2VudHMsIGV0Yy4pLi4uCiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCB1bml0czsKKyAgICAgICAgCisgICAgICAgIC8vIFBh
cmFtZXRlciBhdXRvbWF0aW9uLgorICAgICAgICB2b2lkIHNldFZhbHVlQXRUaW1lKGluIGZsb2F0
IHZhbHVlLCBpbiBmbG9hdCB0aW1lKTsKKyAgICAgICAgdm9pZCBsaW5lYXJSYW1wVG9WYWx1ZUF0
VGltZShpbiBmbG9hdCB2YWx1ZSwgaW4gZmxvYXQgdGltZSk7CisgICAgICAgIHZvaWQgZXhwb25l
bnRpYWxSYW1wVG9WYWx1ZUF0VGltZShpbiBmbG9hdCB2YWx1ZSwgaW4gZmxvYXQgdGltZSk7CisK
KyAgICAgICAgLy8gRXhwb25lbnRpYWxseSBhcHByb2FjaCB0aGUgdGFyZ2V0IHZhbHVlIHdpdGgg
YSByYXRlIGhhdmluZyB0aGUgZ2l2ZW4gdGltZSBjb25zdGFudC4KKyAgICAgICAgdm9pZCBzZXRU
YXJnZXRWYWx1ZUF0VGltZShpbiBmbG9hdCB0YXJnZXRWYWx1ZSwgaW4gZmxvYXQgdGltZSwgaW4g
ZmxvYXQgdGltZUNvbnN0YW50KTsKKworICAgICAgICAvLyBTZXRzIGFuIGFycmF5IG9mIGFyYml0
cmFyeSBwYXJhbWV0ZXIgdmFsdWVzIHN0YXJ0aW5nIGF0IHRpbWUgZm9yIHRoZSBnaXZlbiBkdXJh
dGlvbi4KKyAgICAgICAgLy8gVGhlIG51bWJlciBvZiB2YWx1ZXMgd2lsbCBiZSBzY2FsZWQgdG8g
Zml0IGludG8gdGhlIGRlc2lyZWQgZHVyYXRpb24uCisgICAgICAgIHZvaWQgc2V0VmFsdWVDdXJ2
ZUF0VGltZShpbiBGbG9hdDMyQXJyYXkgdmFsdWVzLCBpbiBmbG9hdCB0aW1lLCBpbiBmbG9hdCBk
dXJhdGlvbik7CisgICAgICAgIAorICAgICAgICAvLyBDYW5jZWxzIGFsbCBzY2hlZHVsZWQgcGFy
YW1ldGVyIGNoYW5nZXMgd2l0aCB0aW1lcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gc3RhcnRU
aW1lLgorICAgICAgICB2b2lkIGNhbmNlbFNjaGVkdWxlZFZhbHVlcyhpbiBmbG9hdCBzdGFydFRp
bWUpOworCiAgICAgfTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9QYXJhbVRpbWVsaW5lLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKwor
I2luY2x1ZGUgIkF1ZGlvUGFyYW1UaW1lbGluZS5oIgorCisjaW5jbHVkZSAiQXVkaW9VdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEF1
ZGlvUGFyYW1UaW1lbGluZTo6c2V0VmFsdWVBdFRpbWUoZmxvYXQgdmFsdWUsIGZsb2F0IHRpbWUp
Cit7CisgICAgaW5zZXJ0RXZlbnQoUGFyYW1FdmVudChQYXJhbUV2ZW50OjpTZXRWYWx1ZSwgdmFs
dWUsIHRpbWUsIDAsIDAsIDApKTsKK30KKwordm9pZCBBdWRpb1BhcmFtVGltZWxpbmU6OmxpbmVh
clJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKQoreworICAgIGluc2Vy
dEV2ZW50KFBhcmFtRXZlbnQoUGFyYW1FdmVudDo6TGluZWFyUmFtcFRvVmFsdWUsIHZhbHVlLCB0
aW1lLCAwLCAwLCAwKSk7Cit9CisKK3ZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjpleHBvbmVudGlh
bFJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKQoreworICAgIGluc2Vy
dEV2ZW50KFBhcmFtRXZlbnQoUGFyYW1FdmVudDo6RXhwb25lbnRpYWxSYW1wVG9WYWx1ZSwgdmFs
dWUsIHRpbWUsIDAsIDAsIDApKTsKK30KKwordm9pZCBBdWRpb1BhcmFtVGltZWxpbmU6OnNldFRh
cmdldFZhbHVlQXRUaW1lKGZsb2F0IHRhcmdldFZhbHVlLCBmbG9hdCB0aW1lLCBmbG9hdCB0aW1l
Q29uc3RhbnQpCit7CisgICAgaW5zZXJ0RXZlbnQoUGFyYW1FdmVudChQYXJhbUV2ZW50OjpTZXRU
YXJnZXRWYWx1ZSwgdGFyZ2V0VmFsdWUsIHRpbWUsIHRpbWVDb25zdGFudCwgMCwgMCkpOworfQor
Cit2b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6c2V0VmFsdWVDdXJ2ZUF0VGltZShGbG9hdDMyQXJy
YXkqIGN1cnZlLCBmbG9hdCB0aW1lLCBmbG9hdCBkdXJhdGlvbikKK3sKKyAgICBpbnNlcnRFdmVu
dChQYXJhbUV2ZW50KFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3VydmUsIDAsIHRpbWUsIDAsIGR1cmF0
aW9uLCBjdXJ2ZSkpOworfQorCitzdGF0aWMgYm9vbCBpc1ZhbGlkTnVtYmVyKGZsb2F0IHgpCit7
CisgICAgcmV0dXJuICFpc25hbih4KSAmJiAhaXNpbmYoeCk7Cit9CisKK3ZvaWQgQXVkaW9QYXJh
bVRpbWVsaW5lOjppbnNlcnRFdmVudChjb25zdCBQYXJhbUV2ZW50JiBldmVudCkKK3sKKyAgICAv
LyBTYW5pdHkgY2hlY2sgdGhlIGV2ZW50LiBCZSBzdXBlciBjYXJlZnVsIHdlJ3JlIG5vdCBnZXR0
aW5nIGluZmVjdGVkIHdpdGggTmFOIG9yIEluZi4KKyAgICBib29sIGlzVmFsaWQgPSBldmVudC50
eXBlKCkgPCBQYXJhbUV2ZW50OjpMYXN0VHlwZQorICAgICAgICAmJiBpc1ZhbGlkTnVtYmVyKGV2
ZW50LnZhbHVlKCkpCisgICAgICAgICYmIGlzVmFsaWROdW1iZXIoZXZlbnQudGltZSgpKQorICAg
ICAgICAmJiBpc1ZhbGlkTnVtYmVyKGV2ZW50LnRpbWVDb25zdGFudCgpKQorICAgICAgICAmJiBp
c1ZhbGlkTnVtYmVyKGV2ZW50LmR1cmF0aW9uKCkpCisgICAgICAgICYmIGV2ZW50LmR1cmF0aW9u
KCkgPj0gMDsKKworICAgIEFTU0VSVChpc1ZhbGlkKTsKKyAgICBpZiAoIWlzVmFsaWQpCisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRzTG9j
ayk7CisgICAgCisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgZmxvYXQgaW5zZXJ0VGltZSA9IGV2
ZW50LnRpbWUoKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbV9ldmVudHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgLy8gT3ZlcndyaXRlIHNhbWUgZXZlbnQgdHlwZSBhbmQgdGltZS4KKyAgICAgICAg
aWYgKG1fZXZlbnRzW2ldLnRpbWUoKSA9PSBpbnNlcnRUaW1lICYmIG1fZXZlbnRzW2ldLnR5cGUo
KSA9PSBldmVudC50eXBlKCkpIHsKKyAgICAgICAgICAgIG1fZXZlbnRzW2ldID0gZXZlbnQ7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9ldmVudHNbaV0u
dGltZSgpID4gaW5zZXJ0VGltZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1f
ZXZlbnRzLmluc2VydChpLCBldmVudCk7Cit9CisKK3ZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjpj
YW5jZWxTY2hlZHVsZWRWYWx1ZXMoZmxvYXQgc3RhcnRUaW1lKQoreworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX2V2ZW50c0xvY2spOworCisgICAgLy8gUmVtb3ZlIGFsbCBldmVudHMgc3RhcnRp
bmcgYXQgc3RhcnRUaW1lLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V2ZW50cy5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9ldmVudHNbaV0udGltZSgpID49IHN0YXJ0VGlt
ZSkgeworICAgICAgICAgICAgbV9ldmVudHMucmVtb3ZlKGksIG1fZXZlbnRzLnNpemUoKSAtIGkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Zsb2F0IEF1ZGlv
UGFyYW1UaW1lbGluZTo6dmFsdWVGb3JDb250ZXh0VGltZShBdWRpb0NvbnRleHQqIGNvbnRleHQs
IGZsb2F0IGRlZmF1bHRWYWx1ZSwgYm9vbCYgaGFzVmFsdWUpCit7CisgICAgQVNTRVJUKGNvbnRl
eHQpOworCisgICAgaWYgKCFjb250ZXh0IHx8ICFtX2V2ZW50cy5zaXplKCkgfHwgY29udGV4dC0+
Y3VycmVudFRpbWUoKSA8IG1fZXZlbnRzWzBdLnRpbWUoKSkgeworICAgICAgICBoYXNWYWx1ZSA9
IGZhbHNlOworICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworICAgIH0KKworICAgIC8vIEFz
ayBmb3IganVzdCBhIHNpbmdsZSB2YWx1ZS4KKyAgICBmbG9hdCB2YWx1ZTsKKyAgICBmbG9hdCBz
YW1wbGVSYXRlID0gY29udGV4dC0+c2FtcGxlUmF0ZSgpOworICAgIGZsb2F0IHN0YXJ0VGltZSA9
IGNvbnRleHQtPmN1cnJlbnRUaW1lKCk7CisgICAgZmxvYXQgZW5kVGltZSA9IHN0YXJ0VGltZSAr
IDEuMSAvIHNhbXBsZVJhdGU7IC8vIHRpbWUganVzdCBiZXlvbmQgb25lIHNhbXBsZS1mcmFtZQor
ICAgIGZsb2F0IGNvbnRyb2xSYXRlID0gc2FtcGxlUmF0ZSAvIEF1ZGlvTm9kZTo6UHJvY2Vzc2lu
Z1NpemVJbkZyYW1lczsgLy8gb25lIHBhcmFtZXRlciBjaGFuZ2UgcGVyIHJlbmRlciBxdWFudHVt
CisgICAgdmFsdWUgPSB2YWx1ZXNGb3JUaW1lUmFuZ2Uoc3RhcnRUaW1lLCBlbmRUaW1lLCBkZWZh
dWx0VmFsdWUsICZ2YWx1ZSwgMSwgc2FtcGxlUmF0ZSwgY29udHJvbFJhdGUpOworCisgICAgaGFz
VmFsdWUgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KKworZmxvYXQgQXVkaW9QYXJhbVRp
bWVsaW5lOjp2YWx1ZXNGb3JUaW1lUmFuZ2UoZmxvYXQgc3RhcnRUaW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZW5kVGltZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRlZmF1bHRWYWx1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiB2YWx1
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZlZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IHNhbXBsZVJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCBjb250cm9sUmF0ZSkKK3sKKyAgICAvLyBXZSBjYW4ndCBjb250
ZW5kIHRoZSBsb2NrIGluIHRoZSByZWFsdGltZSBhdWRpbyB0aHJlYWQuCisgICAgaWYgKCFtX2V2
ZW50c0xvY2sudHJ5TG9jaygpKSB7CisgICAgICAgIGlmICh2YWx1ZXMpIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlZhbHVlczsgKytpKQorICAgICAgICAg
ICAgICAgIHZhbHVlc1tpXSA9IGRlZmF1bHRWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZGVmYXVsdFZhbHVlOworICAgIH0KKworICAgIGZsb2F0IHZhbHVlID0gdmFsdWVzRm9yVGlt
ZVJhbmdlSW1wbChzdGFydFRpbWUsIGVuZFRpbWUsIGRlZmF1bHRWYWx1ZSwgdmFsdWVzLCBudW1i
ZXJPZlZhbHVlcywgc2FtcGxlUmF0ZSwgY29udHJvbFJhdGUpOworICAgIG1fZXZlbnRzTG9jay51
bmxvY2soKTsKKworICAgIHJldHVybiB2YWx1ZTsKK30KKworLy8gUmV0dXJucyB0aGUgcm91bmRl
ZCBkb3duIGludGVnZXIgc2FtcGxlLWZyYW1lIGZvciB0aGUgdGltZSBhbmQgc2FtcGxlLXJhdGUu
CitzdGF0aWMgdW5zaWduZWQgdGltZVRvU2FtcGxlRnJhbWUoZG91YmxlIHRpbWUsIGRvdWJsZSBz
YW1wbGVSYXRlKQoreworICAgIGRvdWJsZSBrID0gMC41IC8gc2FtcGxlUmF0ZTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCh0aW1lICsgaykgKiBzYW1wbGVSYXRlKTsKK30KKwor
ZmxvYXQgQXVkaW9QYXJhbVRpbWVsaW5lOjp2YWx1ZXNGb3JUaW1lUmFuZ2VJbXBsKGZsb2F0IHN0
YXJ0VGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBlbmRUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IGRlZmF1bHRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogdmFsdWVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHNh
bXBsZVJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgY29udHJvbFJhdGUpCit7CisgICAgQVNTRVJUKHZhbHVlcyk7CisgICAgaWYgKCF2
YWx1ZXMpCisgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CisKKyAgICAvLyBSZXR1cm4gZGVm
YXVsdCB2YWx1ZSBpZiB0aGVyZSBhcmUgbm8gZXZlbnRzIG1hdGNoaW5nIHRoZSBkZXNpcmVkIHRp
bWUgcmFuZ2UuCisgICAgQVNTRVJUKG1fZXZlbnRzLnNpemUoKSk7CisgICAgaWYgKCFtX2V2ZW50
cy5zaXplKCkgfHwgZW5kVGltZSA8PSBtX2V2ZW50c1swXS50aW1lKCkpIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mVmFsdWVzOyArK2kpCisgICAgICAgICAgICB2
YWx1ZXNbaV0gPSBkZWZhdWx0VmFsdWU7CisgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Cisg
ICAgfQorCisgICAgLy8gTWFpbnRhaW4gYSBydW5uaW5nIHRpbWUgYW5kIGluZGV4IGZvciB3cml0
aW5nIHRoZSB2YWx1ZXMgYnVmZmVyLgorICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IHN0YXJ0VGlt
ZTsKKyAgICB1bnNpZ25lZCB3cml0ZUluZGV4ID0gMDsKKworICAgIC8vIElmIGZpcnN0IGV2ZW50
IGlzIGFmdGVyIHN0YXJ0VGltZSB0aGVuIGZpbGwgaW5pdGlhbCBwYXJ0IG9mIHZhbHVlcyBidWZm
ZXIgd2l0aCBkZWZhdWx0VmFsdWUKKyAgICAvLyB1bnRpbCB3ZSByZWFjaCB0aGUgZmlyc3QgZXZl
bnQgdGltZS4KKyAgICBmbG9hdCBmaXJzdEV2ZW50VGltZSA9IG1fZXZlbnRzWzBdLnRpbWUoKTsK
KyAgICBpZiAoZmlyc3RFdmVudFRpbWUgPiBzdGFydFRpbWUpIHsKKyAgICAgICAgZmxvYXQgZmls
bFRvVGltZSA9IG1pbihlbmRUaW1lLCBmaXJzdEV2ZW50VGltZSk7CisgICAgICAgIHVuc2lnbmVk
IGZpbGxUb0ZyYW1lID0gdGltZVRvU2FtcGxlRnJhbWUoZmlsbFRvVGltZSAtIHN0YXJ0VGltZSwg
c2FtcGxlUmF0ZSk7CisgICAgICAgIGZpbGxUb0ZyYW1lID0gbWluKGZpbGxUb0ZyYW1lLCBudW1i
ZXJPZlZhbHVlcyk7CisgICAgICAgIGZvciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsr
d3JpdGVJbmRleCkKKyAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IGRlZmF1bHRWYWx1
ZTsKKworICAgICAgICBjdXJyZW50VGltZSA9IGZpbGxUb1RpbWU7CisgICAgfQorCisgICAgZmxv
YXQgdmFsdWUgPSBkZWZhdWx0VmFsdWU7CisKKyAgICAvLyBHbyB0aHJvdWdoIGVhY2ggZXZlbnQg
YW5kIHJlbmRlciB0aGUgdmFsdWUgYnVmZmVyIHdoZXJlIHRoZSB0aW1lcyBvdmVybGFwLAorICAg
IC8vIHN0b3BwaW5nIHdoZW4gd2UndmUgcmVuZGVyZWQgYWxsIHRoZSByZXF1ZXN0ZWQgdmFsdWVz
LgorICAgIC8vIEZJWE1FOiBjb3VsZCB0cnkgdG8gb3B0aW1pemUgYnkgYXZvaWRpbmcgaGF2aW5n
IHRvIGl0ZXJhdGUgc3RhcnRpbmcgZnJvbSB0aGUgdmVyeSBmaXJzdCBldmVudAorICAgIC8vIGFu
ZCBrZWVwaW5nIHRyYWNrIG9mIGEgImN1cnJlbnQiIGV2ZW50IGluZGV4LgorICAgIGludCBuID0g
bV9ldmVudHMuc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbiAmJiB3cml0ZUluZGV4
IDwgbnVtYmVyT2ZWYWx1ZXM7ICsraSkgeworICAgICAgICBQYXJhbUV2ZW50JiBldmVudCA9IG1f
ZXZlbnRzW2ldOworICAgICAgICBQYXJhbUV2ZW50KiBuZXh0RXZlbnQgPSBpIDwgbiAtIDEgPyAm
KG1fZXZlbnRzW2kgKyAxXSkgOiAwOworCisgICAgICAgIC8vIFdhaXQgdW50aWwgd2UgZ2V0IGEg
bW9yZSByZWNlbnQgZXZlbnQuCisgICAgICAgIGlmIChuZXh0RXZlbnQgJiYgbmV4dEV2ZW50LT50
aW1lKCkgPCBjdXJyZW50VGltZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZs
b2F0IHZhbHVlMSA9IGV2ZW50LnZhbHVlKCk7CisgICAgICAgIGZsb2F0IHRpbWUxID0gZXZlbnQu
dGltZSgpOworICAgICAgICBmbG9hdCB2YWx1ZTIgPSBuZXh0RXZlbnQgPyBuZXh0RXZlbnQtPnZh
bHVlKCkgOiB2YWx1ZTE7CisgICAgICAgIGZsb2F0IHRpbWUyID0gbmV4dEV2ZW50ID8gbmV4dEV2
ZW50LT50aW1lKCkgOiBlbmRUaW1lICsgMS4wOworCisgICAgICAgIGZsb2F0IGRlbHRhVGltZSA9
IHRpbWUyIC0gdGltZTE7CisgICAgICAgIGZsb2F0IGsgPSBkZWx0YVRpbWUgPiAwID8gMS4wIC8g
ZGVsdGFUaW1lIDogMDsKKyAgICAgICAgZmxvYXQgc2FtcGxlRnJhbWVUaW1lSW5jciA9IDEuMCAv
IHNhbXBsZVJhdGU7CisKKyAgICAgICAgZmxvYXQgZmlsbFRvVGltZSA9IG1pbihlbmRUaW1lLCB0
aW1lMik7CisgICAgICAgIHVuc2lnbmVkIGZpbGxUb0ZyYW1lID0gdGltZVRvU2FtcGxlRnJhbWUo
ZmlsbFRvVGltZSAtIHN0YXJ0VGltZSwgc2FtcGxlUmF0ZSk7CisgICAgICAgIGZpbGxUb0ZyYW1l
ID0gbWluKGZpbGxUb0ZyYW1lLCBudW1iZXJPZlZhbHVlcyk7CisKKyAgICAgICAgaW50IG5leHRF
dmVudFR5cGUgPSBuZXh0RXZlbnQgPyBuZXh0RXZlbnQtPnR5cGUoKSA6IC0xIC8qIHVua25vd24g
Ki87CisKKyAgICAgICAgLy8gRmlyc3QgaGFuZGxlIGxpbmVhciBhbmQgZXhwb25lbnRpYWwgcmFt
cHMgd2hpY2ggcmVxdWlyZSBsb29raW5nIGFoZWFkIHRvIHRoZSBuZXh0IGV2ZW50LgorICAgICAg
ICBpZiAobmV4dEV2ZW50VHlwZSA9PSBQYXJhbUV2ZW50OjpMaW5lYXJSYW1wVG9WYWx1ZSkgewor
ICAgICAgICAgICAgZm9yICg7IHdyaXRlSW5kZXggPCBmaWxsVG9GcmFtZTsgKyt3cml0ZUluZGV4
KSB7CisgICAgICAgICAgICAgICAgZmxvYXQgeCA9IChjdXJyZW50VGltZSAtIHRpbWUxKSAqIGs7
CisgICAgICAgICAgICAgICAgdmFsdWUgPSAoMS4wIC0geCkgKiB2YWx1ZTEgKyB4ICogdmFsdWUy
OworICAgICAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOworICAgICAgICAg
ICAgICAgIGN1cnJlbnRUaW1lICs9IHNhbXBsZUZyYW1lVGltZUluY3I7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAobmV4dEV2ZW50VHlwZSA9PSBQYXJhbUV2ZW50OjpFeHBvbmVu
dGlhbFJhbXBUb1ZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUxIDw9IDAgfHwgdmFsdWUy
IDw9IDApIHsKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbmVnYXRpdmUgdmFsdWVzIGVycm9y
IGNhc2UgYnkgcHJvcGFnYXRpbmcgcHJldmlvdXMgdmFsdWUuCisgICAgICAgICAgICAgICAgZm9y
ICg7IHdyaXRlSW5kZXggPCBmaWxsVG9GcmFtZTsgKyt3cml0ZUluZGV4KQorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gSW50ZXJwb2xhdGUgaW4gbG9nIHNwYWNlLgorICAgICAgICAg
ICAgICAgIHZhbHVlMSA9IGxvZzIodmFsdWUxKTsKKyAgICAgICAgICAgICAgICB2YWx1ZTIgPSBs
b2cyKHZhbHVlMik7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogb3B0aW1pemUgdG8gbm90
IHVzZSBwb3coKSBpbiBpbm5lciBsb29wLCB0aGlzIGlzIGp1c3QgYSBzaW1wbGUgZXhwb25lbnRp
YWwgcmFtcC4KKyAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1l
OyArK3dyaXRlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgeCA9IChjdXJyZW50
VGltZSAtIHRpbWUxKSAqIGs7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKDEuMCAtIHgp
ICogdmFsdWUxICsgeCAqIHZhbHVlMjsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwb3dm
KDIuMGYsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3dyaXRlSW5kZXhdID0g
dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lICs9IHNhbXBsZUZyYW1lVGlt
ZUluY3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gSGFuZGxlIGV2ZW50IHR5cGVzIG5vdCByZXF1aXJpbmcgbG9va2lu
ZyBhaGVhZCB0byB0aGUgbmV4dCBldmVudC4KKyAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQudHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIFBhcmFtRXZlbnQ6OlNldFZhbHVlOgorICAgICAgICAg
ICAgY2FzZSBQYXJhbUV2ZW50OjpMaW5lYXJSYW1wVG9WYWx1ZToKKyAgICAgICAgICAgIGNhc2Ug
UGFyYW1FdmVudDo6RXhwb25lbnRpYWxSYW1wVG9WYWx1ZToKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lID0gZmlsbFRvVGltZTsKKworICAgICAgICAg
ICAgICAgICAgICAvLyBTaW1wbHkgc3RheSBhdCBhIGNvbnN0YW50IHZhbHVlLgorICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGV2ZW50LnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOworCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBQYXJh
bUV2ZW50OjpTZXRUYXJnZXRWYWx1ZToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRUaW1lID0gZmlsbFRvVGltZTsKKworICAgICAgICAgICAgICAgICAgICAv
LyBFeHBvbmVudGlhbCBhcHByb2FjaCB0byB0YXJnZXQgdmFsdWUgd2l0aCBnaXZlbiB0aW1lIGNv
bnN0YW50LgorICAgICAgICAgICAgICAgICAgICBmbG9hdCB0YXJnZXRWYWx1ZSA9IGV2ZW50LnZh
bHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHRpbWVDb25zdGFudCA9IGV2ZW50LnRp
bWVDb25zdGFudCgpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBkaXNjcmV0ZVRpbWVDb25z
dGFudCA9IEF1ZGlvVXRpbGl0aWVzOjpkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUo
dGltZUNvbnN0YW50LCBjb250cm9sUmF0ZSk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7
IHdyaXRlSW5kZXggPCBmaWxsVG9GcmFtZTsgKyt3cml0ZUluZGV4KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlICs9ICh0YXJnZXRWYWx1ZSAtIHZhbHVlKSAqIGRpc2NyZXRlVGltZUNvbnN0
YW50OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIFBhcmFtRXZlbnQ6OlNldFZh
bHVlQ3VydmU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBGbG9hdDMy
QXJyYXkqIGN1cnZlID0gZXZlbnQuY3VydmUoKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQq
IGN1cnZlRGF0YSA9IGN1cnZlID8gY3VydmUtPmRhdGEoKSA6IDA7CisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mQ3VydmVQb2ludHMgPSBjdXJ2ZSA/IGN1cnZlLT5sZW5ndGgo
KSA6IDA7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3VydmUgZXZlbnRzIGhhdmUgZHVyYXRp
b24sIHNvIGRvbid0IGp1c3QgdXNlIG5leHQgZXZlbnQgdGltZS4KKyAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgZHVyYXRpb24gPSBldmVudC5kdXJhdGlvbigpOworICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBkdXJhdGlvbkZyYW1lcyA9IGR1cmF0aW9uICogc2FtcGxlUmF0ZTsKKyAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgY3VydmVQb2ludHNQZXJGcmFtZSA9IHN0YXRpY19jYXN0PGZsb2F0
PihudW1iZXJPZkN1cnZlUG9pbnRzKSAvIGR1cmF0aW9uRnJhbWVzOworCisgICAgICAgICAgICAg
ICAgICAgIGlmICghY3VydmUgfHwgIWN1cnZlRGF0YSB8fCAhbnVtYmVyT2ZDdXJ2ZVBvaW50cyB8
fCBkdXJhdGlvbiA8PSAwIHx8IHNhbXBsZVJhdGUgPD0gMCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRXJyb3IgY29uZGl0aW9uIC0gc2ltcGx5IHByb3BhZ2F0ZSBwcmV2aW91cyB2YWx1
ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lID0gZmlsbFRvVGltZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsr
d3JpdGVJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRl
eF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU2F2ZSBvbGQgdmFsdWVzIGFuZCBy
ZWNhbGN1bGF0ZSBpbmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUgY3VydmUncyBkdXJhdGlvbgorICAg
ICAgICAgICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBuZXh0IGV2ZW50IHRpbWUuCisgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5leHRFdmVudEZpbGxUb0ZyYW1lID0gZmlsbFRvRnJh
bWU7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IG5leHRFdmVudEZpbGxUb1RpbWUgPSBmaWxs
VG9UaW1lOworICAgICAgICAgICAgICAgICAgICBmaWxsVG9UaW1lID0gbWluKGVuZFRpbWUsIHRp
bWUxICsgZHVyYXRpb24pOworICAgICAgICAgICAgICAgICAgICBmaWxsVG9GcmFtZSA9IHRpbWVU
b1NhbXBsZUZyYW1lKGZpbGxUb1RpbWUgLSBzdGFydFRpbWUsIHNhbXBsZVJhdGUpOworICAgICAg
ICAgICAgICAgICAgICBmaWxsVG9GcmFtZSA9IG1pbihmaWxsVG9GcmFtZSwgbnVtYmVyT2ZWYWx1
ZXMpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEluZGV4IGludG8gdGhlIGN1cnZlIGRhdGEg
dXNpbmcgYSBmbG9hdGluZy1wb2ludCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gV2Un
cmUgc2NhbGluZyB0aGUgbnVtYmVyIG9mIGN1cnZlIHBvaW50cyBieSB0aGUgZHVyYXRpb24gKHNl
ZSBjdXJ2ZVBvaW50c1BlckZyYW1lKS4KKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3VydmVW
aXJ0dWFsSW5kZXggPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAodGltZTEgPCBjdXJyZW50
VGltZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5kZXggc29tZXdoZXJlIGluIHRo
ZSBtaWRkbGUgb2YgdGhlIGN1cnZlIGRhdGEuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBE
b24ndCB1c2UgdGltZVRvU2FtcGxlRnJhbWUoKSBzaW5jZSB3ZSB3YW50IHRoZSBleGFjdCBmbG9h
dGluZy1wb2ludCBmcmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGZyYW1lT2Zm
c2V0ID0gKGN1cnJlbnRUaW1lIC0gdGltZTEpICogc2FtcGxlUmF0ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnZlVmlydHVhbEluZGV4ID0gY3VydmVQb2ludHNQZXJGcmFtZSAqIGZyYW1l
T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
UmVuZGVyIHRoZSBzdHJldGNoZWQgY3VydmUgZGF0YSB1c2luZyBuZWFyZXN0IG5laWdoYm9yIHNh
bXBsaW5nLgorICAgICAgICAgICAgICAgICAgICAvLyBPdmVyc2FtcGxlZCBjdXJ2ZSBkYXRhIGNh
biBiZSBwcm92aWRlZCBpZiBzbW9vdGhuZXNzIGlzIGRlc2lyZWQuCisgICAgICAgICAgICAgICAg
ICAgIGZvciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY3VydmVJbmRleCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihjdXJ2ZVZpcnR1YWxJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2
ZVZpcnR1YWxJbmRleCArPSBjdXJ2ZVBvaW50c1BlckZyYW1lOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBCb3VuZHMgY2hlY2suCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3Vy
dmVJbmRleCA8IG51bWJlck9mQ3VydmVQb2ludHMpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBjdXJ2ZURhdGFbY3VydmVJbmRleF07CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhbnkgdGltZSBsZWZ0IGFmdGVyIHRo
ZSBkdXJhdGlvbiBvZiB0aGlzIGV2ZW50IGFuZCB0aGUgc3RhcnQKKyAgICAgICAgICAgICAgICAg
ICAgLy8gb2YgdGhlIG5leHQsIHRoZW4ganVzdCBwcm9wYWdhdGUgdGhlIGxhc3QgdmFsdWUuCisg
ICAgICAgICAgICAgICAgICAgIGZvciAoOyB3cml0ZUluZGV4IDwgbmV4dEV2ZW50RmlsbFRvRnJh
bWU7ICsrd3JpdGVJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t3cml0ZUlu
ZGV4XSA9IHZhbHVlOworCisgICAgICAgICAgICAgICAgICAgIC8vIFJlLWFkanVzdCBjdXJyZW50
IHRpbWUKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFRpbWUgPSBuZXh0RXZlbnRGaWxsVG9U
aW1lOworCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHRoZXJlJ3MgYW55IHRp
bWUgbGVmdCBhZnRlciBwcm9jZXNzaW5nIHRoZSBsYXN0IGV2ZW50IHRoZW4ganVzdCBwcm9wYWdh
dGUgdGhlIGxhc3QgdmFsdWUKKyAgICAvLyB0byB0aGUgZW5kIG9mIHRoZSB2YWx1ZXMgYnVmZmVy
LgorICAgIGZvciAoOyB3cml0ZUluZGV4IDwgbnVtYmVyT2ZWYWx1ZXM7ICsrd3JpdGVJbmRleCkK
KyAgICAgICAgdmFsdWVzW3dyaXRlSW5kZXhdID0gdmFsdWU7CisKKyAgICByZXR1cm4gdmFsdWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVE
SU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1l
bGluZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9QYXJh
bVRpbWVsaW5lX2gKKyNkZWZpbmUgQXVkaW9QYXJhbVRpbWVsaW5lX2gKKworI2luY2x1ZGUgIkF1
ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEF1ZGlvUGFyYW1UaW1lbGluZSB7CitwdWJsaWM6CisgICAgQXVkaW9QYXJh
bVRpbWVsaW5lKCkKKyAgICAgICAgOiBtX2N1cnJlbnRFdmVudEluZGV4KDApCisgICAgICAgICwg
bV92YWx1ZSgwKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldFZhbHVlQXRUaW1lKGZsb2F0
IHZhbHVlLCBmbG9hdCB0aW1lKTsKKyAgICB2b2lkIGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGZs
b2F0IHZhbHVlLCBmbG9hdCB0aW1lKTsKKyAgICB2b2lkIGV4cG9uZW50aWFsUmFtcFRvVmFsdWVB
dFRpbWUoZmxvYXQgdmFsdWUsIGZsb2F0IHRpbWUpOworICAgIHZvaWQgc2V0VGFyZ2V0VmFsdWVB
dFRpbWUoZmxvYXQgdGFyZ2V0VmFsdWUsIGZsb2F0IHRpbWUsIGZsb2F0IHRpbWVDb25zdGFudCk7
CisgICAgdm9pZCBzZXRWYWx1ZUN1cnZlQXRUaW1lKEZsb2F0MzJBcnJheSogY3VydmUsIGZsb2F0
IHRpbWUsIGZsb2F0IGR1cmF0aW9uKTsKKyAgICB2b2lkIGNhbmNlbFNjaGVkdWxlZFZhbHVlcyhm
bG9hdCBzdGFydFRpbWUpOworCisgICAgLy8gaGFzVmFsdWUgaXMgc2V0IHRvIHRydWUgaWYgYSB2
YWxpZCB0aW1lbGluZSB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgICAvLyBvdGhlcndpc2UgZGVmYXVs
dFZhbHVlIGlzIHJldHVybmVkLgorICAgIGZsb2F0IHZhbHVlRm9yQ29udGV4dFRpbWUoQXVkaW9D
b250ZXh0KiwgZmxvYXQgZGVmYXVsdFZhbHVlLCBib29sJiBoYXNWYWx1ZSk7CisKKyAgICAvLyBH
aXZlbiB0aGUgdGltZSByYW5nZSwgY2FsY3VsYXRlcyBwYXJhbWV0ZXIgdmFsdWVzIGludG8gdGhl
IHZhbHVlcyBidWZmZXIKKyAgICAvLyBhbmQgcmV0dXJucyB0aGUgbGFzdCBwYXJhbWV0ZXIgdmFs
dWUgY2FsY3VsYXRlZCBmb3IgInZhbHVlcyIgb3IgdGhlIGRlZmF1bHRWYWx1ZSBpZiBub25lIHdl
cmUgY2FsY3VsYXRlZC4KKyAgICAvLyBjb250cm9sUmF0ZSBpcyB0aGUgcmF0ZSAobnVtYmVyIHBl
ciBzZWNvbmQpIGF0IHdoaWNoIHBhcmFtZXRlciB2YWx1ZXMgd2lsbCBiZSBjYWxjdWxhdGVkLgor
ICAgIC8vIEl0IHNob3VsZCBlcXVhbCBzYW1wbGVSYXRlIGZvciBzYW1wbGUtYWNjdXJhdGUgcGFy
YW1ldGVyIGNoYW5nZXMsIGFuZCBvdGhlcndpc2Ugd2lsbCB1c3VhbGx5IG1hdGNoCisgICAgLy8g
dGhlIHJlbmRlciBxdWFudHVtIHNpemUgc3VjaCB0aGF0IHRoZSBwYXJhbWV0ZXIgdmFsdWUgY2hh
bmdlcyBvbmNlIHBlciByZW5kZXIgcXVhbnR1bS4KKyAgICBmbG9hdCB2YWx1ZXNGb3JUaW1lUmFu
Z2UoZmxvYXQgc3RhcnRUaW1lLCBmbG9hdCBlbmRUaW1lLCBmbG9hdCBkZWZhdWx0VmFsdWUsIGZs
b2F0KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBm
bG9hdCBjb250cm9sUmF0ZSk7CisKKyAgICBib29sIGhhc1ZhbHVlcygpIHsgcmV0dXJuIG1fZXZl
bnRzLnNpemUoKTsgfQorCitwcml2YXRlOgorICAgIGNsYXNzIFBhcmFtRXZlbnQgeworICAgIHB1
YmxpYzoKKyAgICAgICAgZW51bSBUeXBlIHsKKyAgICAgICAgICAgIFNldFZhbHVlLAorICAgICAg
ICAgICAgTGluZWFyUmFtcFRvVmFsdWUsCisgICAgICAgICAgICBFeHBvbmVudGlhbFJhbXBUb1Zh
bHVlLAorICAgICAgICAgICAgU2V0VGFyZ2V0VmFsdWUsCisgICAgICAgICAgICBTZXRWYWx1ZUN1
cnZlLAorICAgICAgICAgICAgTGFzdFR5cGUKKyAgICAgICAgfTsKKworICAgICAgICBQYXJhbUV2
ZW50KFR5cGUgdHlwZSwgZmxvYXQgdmFsdWUsIGZsb2F0IHRpbWUsIGZsb2F0IHRpbWVDb25zdGFu
dCwgZmxvYXQgZHVyYXRpb24sIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBjdXJ2ZSkKKyAgICAg
ICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAg
ICAgICAgICAsIG1fdGltZSh0aW1lKQorICAgICAgICAgICAgLCBtX3RpbWVDb25zdGFudCh0aW1l
Q29uc3RhbnQpCisgICAgICAgICAgICAsIG1fZHVyYXRpb24oZHVyYXRpb24pCisgICAgICAgICAg
ICAsIG1fY3VydmUoY3VydmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2ln
bmVkIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAgICAgZmxvYXQgdmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIGZsb2F0IHRpbWUoKSBjb25zdCB7
IHJldHVybiBtX3RpbWU7IH0KKyAgICAgICAgZmxvYXQgdGltZUNvbnN0YW50KCkgY29uc3QgeyBy
ZXR1cm4gbV90aW1lQ29uc3RhbnQ7IH0KKyAgICAgICAgZmxvYXQgZHVyYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgICAgIEZsb2F0MzJBcnJheSogY3VydmUoKSB7IHJl
dHVybiBtX2N1cnZlLmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBt
X3R5cGU7CisgICAgICAgIGZsb2F0IG1fdmFsdWU7CisgICAgICAgIGZsb2F0IG1fdGltZTsKKyAg
ICAgICAgZmxvYXQgbV90aW1lQ29uc3RhbnQ7CisgICAgICAgIGZsb2F0IG1fZHVyYXRpb247Cisg
ICAgICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IG1fY3VydmU7CisgICAgfTsKKworICAgIHZvaWQg
aW5zZXJ0RXZlbnQoY29uc3QgUGFyYW1FdmVudCYpOworICAgIGZsb2F0IHZhbHVlc0ZvclRpbWVS
YW5nZUltcGwoZmxvYXQgc3RhcnRUaW1lLCBmbG9hdCBlbmRUaW1lLCBmbG9hdCBkZWZhdWx0VmFs
dWUsIGZsb2F0KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzLCBmbG9hdCBzYW1wbGVS
YXRlLCBmbG9hdCBjb250cm9sUmF0ZSk7CisKKyAgICBWZWN0b3I8UGFyYW1FdmVudD4gbV9ldmVu
dHM7CisgICAgdW5zaWduZWQgbV9jdXJyZW50RXZlbnRJbmRleDsKKyAgICBmbG9hdCBtX3ZhbHVl
OworCisgICAgTXV0ZXggbV9ldmVudHNMb2NrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gQXVkaW9QYXJhbVRpbWVsaW5lX2gK
</data>
<flag name="review"
          id="89038"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>