<?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>34245</bug_id>
          
          <creation_ts>2010-01-28 00:55:48 -0800</creation_ts>
          <short_desc>Rename ISODateTime.{cpp,h} to DateComponents.{cpp,h}</short_desc>
          <delta_ts>2010-01-28 08:47:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></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="Kent Tamura">tkent</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>185374</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-01-28 00:55:48 -0800</bug_when>
    <thetext>Rename ISODateTime.{cpp,h} to DateComponents.{cpp,h}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185375</commentid>
    <comment_count>1</comment_count>
      <attachid>47596</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-01-28 00:57:08 -0800</bug_when>
    <thetext>Created attachment 47596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185376</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-28 00:58:23 -0800</bug_when>
    <thetext>Attachment 47596 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Skipping input &apos;WebCore/html/ISODateTime.cpp&apos;: Can&apos;t open for reading
WebCore/html/DateComponents.h:160:  One space before end of line comments  [whitespace/comments] [5]
WebCore/html/DateComponents.h:164:  One space before end of line comments  [whitespace/comments] [5]
WebCore/html/DateComponents.h:165:  One space before end of line comments  [whitespace/comments] [5]
WebCore/html/DateComponents.h:166:  One space before end of line comments  [whitespace/comments] [5]
WebCore/html/DateComponents.h:167:  One space before end of line comments  [whitespace/comments] [5]
Skipping input &apos;WebCore/html/ISODateTime.h&apos;: Can&apos;t open for reading
Total errors found: 5


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185378</commentid>
    <comment_count>3</comment_count>
      <attachid>47597</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-01-28 01:03:12 -0800</bug_when>
    <thetext>Created attachment 47597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185485</commentid>
    <comment_count>4</comment_count>
      <attachid>47597</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-28 08:22:17 -0800</bug_when>
    <thetext>Comment on attachment 47597
Patch

Great. Thanks for doing this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185507</commentid>
    <comment_count>5</comment_count>
      <attachid>47597</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-28 08:47:13 -0800</bug_when>
    <thetext>Comment on attachment 47597
Patch

Clearing flags on attachment: 47597

Committed r54003: &lt;http://trac.webkit.org/changeset/54003&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185508</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-28 08:47:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47596</attachid>
            <date>2010-01-28 00:57:08 -0800</date>
            <delta_ts>2010-01-28 01:03:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34245-20100128175705.patch</filename>
            <type>text/plain</type>
            <size>87221</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Mzk5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTUgQEAKKzIwMTAtMDEtMjggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bmFtZSBJU09EYXRlVGltZS57Y3BwLGh9IHRvIERhdGVDb21wb25lbnRzLntjcHAsaH0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MjQ1CisKKyAgICAg
ICAgTm8gZnVuY3Rpb25hbCBjaGFuZ2VzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0RhdGVDb21wb25lbnRzLmNwcDog
Q29waWVkIGZyb20gV2ViQ29yZS9odG1sL0lTT0RhdGVUaW1lLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVDb21wb25lbnRzOjptYXhXZWVrTnVtYmVySW5ZZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVDb21wb25lbnRzOjpwYXJzZVllYXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNv
bXBvbmVudHM6OmFkZERheSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6YWRk
TWludXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpwYXJzZVRpbWVab25l
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpwYXJzZU1vbnRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpwYXJzZURhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlV2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29t
cG9uZW50czo6cGFyc2VUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpw
YXJzZURhdGVUaW1lTG9jYWwpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBh
cnNlRGF0ZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnNldE1pbGxp
c2Vjb25kc1NpbmNlTWlkbmlnaHRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29t
cG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZv
ckRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnNldE1pbGxpc2Vjb25k
c1NpbmNlRXBvY2hGb3JEYXRlVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50
czo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVUaW1lTG9jYWwpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JNb250
aCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2lu
Y2VNaWRuaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlz
ZWNvbmRzU2luY2VFcG9jaEZvcldlZWspOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVu
dHM6Om1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVDb21wb25lbnRzOjptaWxsaXNlY29uZHNTaW5jZUVwb2NoKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVDb21wb25lbnRzOjp0b1N0cmluZ0ZvclRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZUNvbXBvbmVudHM6OnRvU3RyaW5nKToKKyAgICAgICAgKiBodG1sL0RhdGVDb21wb25lbnRzLmg6
IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9JU09EYXRlVGltZS5oLgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZUNvbXBvbmVudHM6OkRhdGVDb21wb25lbnRzKToKKyAgICAgICAgKiBodG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cGFy
c2VUb0RvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZUFz
RGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUFzTnVtYmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmZvcm1TdHJpbmdUb0RhdGVD
b21wb25lbnRzKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAg
KiBodG1sL0lTT0RhdGVUaW1lLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL0lTT0RhdGVU
aW1lLmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9WYWxpZGl0eVN0YXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU6OnR5cGVNaXNtYXRjaCk6CisKIDIwMTAtMDEtMjcg
IEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1Mzk3NSkKKysrIFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTk4MCw2ICs5ODAsOCBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9EYXRhR3JpZENvbHVtbkxpc3QuY3BwIFwKIAlXZWJD
b3JlL2h0bWwvRGF0YUdyaWRDb2x1bW5MaXN0LmggXAogCVdlYkNvcmUvaHRtbC9EYXRhR3JpZERh
dGFTb3VyY2UuaCBcCisJV2ViQ29yZS9odG1sL0RhdGVDb21wb25lbnRzLmNwcCBcCisJV2ViQ29y
ZS9odG1sL0RhdGVDb21wb25lbnRzLmggXAogCVdlYkNvcmUvaHRtbC9ET01EYXRhR3JpZERhdGFT
b3VyY2UuY3BwIFwKIAlXZWJDb3JlL2h0bWwvRE9NRGF0YUdyaWREYXRhU291cmNlLmggXAogCVdl
YkNvcmUvaHRtbC9GaWxlLmNwcCBcCkBAIC0xMTUxLDggKzExNTMsNiBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50LmggXAogCVdlYkNvcmUvaHRt
bC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcCBcCiAJV2ViQ29yZS9odG1sL0hUTUxWaWV3U291
cmNlRG9jdW1lbnQuaCBcCi0JV2ViQ29yZS9odG1sL0lTT0RhdGVUaW1lLmNwcCBcCi0JV2ViQ29y
ZS9odG1sL0lTT0RhdGVUaW1lLmggXAogCVdlYkNvcmUvaHRtbC9JbWFnZURhdGEuY3BwIFwKIAlX
ZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmggXAogCVdlYkNvcmUvaHRtbC9NZWRpYUVycm9yLmggXApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHJldmlzaW9uIDUzOTc1KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNzEsNiArMTM3MSw4IEBACiAgICAgICAgICAgICAnaHRtbC9ET01EYXRhR3Jp
ZERhdGFTb3VyY2UuaCcsCiAgICAgICAgICAgICAnaHRtbC9EYXRhR3JpZENvbHVtbkxpc3QuY3Bw
JywKICAgICAgICAgICAgICdodG1sL0RhdGFHcmlkQ29sdW1uTGlzdC5oJywKKyAgICAgICAgICAg
ICdodG1sL0RhdGVDb21wb25lbnRzLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9EYXRlQ29tcG9u
ZW50cy5oJywKICAgICAgICAgICAgICdodG1sL0ZpbGUuY3BwJywKICAgICAgICAgICAgICdodG1s
L0ZpbGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxlTGlzdC5jcHAnLApAQCAtMTU0Nyw4ICsx
NTQ5LDYgQEAKICAgICAgICAgICAgICdodG1sL0hUTUxWaWRlb0VsZW1lbnQuaCcsCiAgICAgICAg
ICAgICAnaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcCcsCiAgICAgICAgICAgICAnaHRt
bC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmgnLAotICAgICAgICAgICAgJ2h0bWwvSVNPRGF0ZVRp
bWUuY3BwJywKLSAgICAgICAgICAgICdodG1sL0lTT0RhdGVUaW1lLmgnLAogICAgICAgICAgICAg
J2h0bWwvSW1hZ2VEYXRhLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9JbWFnZURhdGEuaCcsCiAg
ICAgICAgICAgICAnaHRtbC9NZWRpYUVycm9yLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBy
bwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA1Mzk3NSkKKysr
IFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTU2OSw2ICs1NjksNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBodG1sL0NvbGxlY3Rpb25DYWNoZS5jcHAgXAogICAgIGh0bWwvRGF0
YUdyaWRDb2x1bW4uY3BwIFwKICAgICBodG1sL0RhdGFHcmlkQ29sdW1uTGlzdC5jcHAgXAorICAg
IGh0bWwvRGF0ZUNvbXBvbmVudHMuY3BwIFwKICAgICBodG1sL0RPTURhdGFHcmlkRGF0YVNvdXJj
ZS5jcHAgXAogICAgIGh0bWwvRmlsZS5jcHAgXAogICAgIGh0bWwvRmlsZUxpc3QuY3BwIFwKQEAg
LTY1NCw3ICs2NTUsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBodG1sL0hUTUxUb2tlbml6ZXIuY3Bw
IFwKICAgICBodG1sL0hUTUxVTGlzdEVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxWaWV3U291
cmNlRG9jdW1lbnQuY3BwIFwKLSAgICBodG1sL0lTT0RhdGVUaW1lLmNwcCBcCiAgICAgaHRtbC9J
bWFnZURhdGEuY3BwIFwKICAgICBodG1sL1ByZWxvYWRTY2FubmVyLmNwcCBcCiAgICAgaHRtbC9W
YWxpZGl0eVN0YXRlLmNwcCBcCkBAIC0xMjU0LDYgKzEyNTQsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBodG1sL0NvbGxlY3Rpb25DYWNoZS5oIFwKICAgICBodG1sL0RhdGFHcmlkQ29sdW1uLmggXAog
ICAgIGh0bWwvRGF0YUdyaWRDb2x1bW5MaXN0LmggXAorICAgIGh0bWwvRGF0ZUNvbXBvbmVudHMu
aCBcCiAgICAgaHRtbC9ET01EYXRhR3JpZERhdGFTb3VyY2UuaCBcCiAgICAgaHRtbC9GaWxlLmgg
XAogICAgIGh0bWwvRmlsZUxpc3QuaCBcCkBAIC0xMzQzLDcgKzEzNDQsNiBAQCBIRUFERVJTICs9
IFwKICAgICBodG1sL0hUTUxVTGlzdEVsZW1lbnQuaCBcCiAgICAgaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmggXAogICAgIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oIFwKLSAgICBodG1sL0lT
T0RhdGVUaW1lLmggXAogICAgIGh0bWwvSW1hZ2VEYXRhLmggXAogICAgIGh0bWwvUHJlbG9hZFNj
YW5uZXIuaCBcCiAgICAgaHRtbC9UaW1lUmFuZ2VzLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA1Mzk3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI5ODc3LDYgKzI5ODc3LDE0
IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGh0bWxcRGF0ZUNvbXBvbmVudHMuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxEYXRlQ29tcG9uZW50cy5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxET01EYXRh
R3JpZERhdGFTb3VyY2UuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTM0MDczLDE0ICsz
NDA4MSw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGh0bWxcSVNPRGF0ZVRpbWUuY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxG
aWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxJU09EYXRlVGltZS5oIg0KLQkJCQk+DQot
CQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxNZWRpYUVy
cm9yLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDUzOTc1KQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ4MTIsOCArNDgx
Miw4IEBACiAJCUY1QzA0MUU1MEZGQ0E5NkQwMDgzOUQ0QSAvKiBET01IVE1MRGF0YUxpc3RFbGVt
ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1QzA0MUUwMEZGQ0E5NkQwMDgzOUQ0QSAvKiBET01IVE1MRGF0YUxpc3RFbGVtZW50SW50
ZXJuYWwuaCAqLzsgfTsKIAkJRjVDMDQxRTYwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFM
aXN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNUMwNDFFMTBGRkNBOTZEMDA4MzlENEEgLyogSlNIVE1MRGF0YUxpc3RFbGVtZW50LmNw
cCAqLzsgfTsKIAkJRjVDMDQxRTcwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFMaXN0RWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVD
MDQxRTIwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFMaXN0RWxlbWVudC5oICovOyB9Owot
CQlGNUQzQTU3QzEwNkI4M0IzMDA1NDUyOTcgLyogSVNPRGF0ZVRpbWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVEM0E1N0ExMDZCODNCMzAwNTQ1
Mjk3IC8qIElTT0RhdGVUaW1lLmNwcCAqLzsgfTsKLQkJRjVEM0E1N0QxMDZCODNCMzAwNTQ1Mjk3
IC8qIElTT0RhdGVUaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNUQzQTU3QjEwNkI4M0IzMDA1NDUyOTcgLyogSVNPRGF0ZVRpbWUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNUQzQTU3QzEwNkI4
M0IzMDA1NDUyOTcgLyogRGF0ZUNvbXBvbmVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVEM0E1N0ExMDZCODNCMzAwNTQ1Mjk3IC8qIERhdGVD
b21wb25lbnRzLmNwcCAqLzsgfTsKKwkJRjVEM0E1N0QxMDZCODNCMzAwNTQ1Mjk3IC8qIERhdGVD
b21wb25lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNUQzQTU3QjEwNkI4M0IzMDA1NDUyOTcgLyogRGF0ZUNvbXBvbmVudHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGOTE2QzQ4RDBEQjUxMEY4
MDA3NkNEODMgLyogSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjkxNkM0OEIwREI1MTBGODAwNzZD
RDgzIC8qIEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmNwcCAqLzsgfTsKIAkJRjkxNkM0
OEUwREI1MTBGODAwNzZDRDgzIC8qIEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGOTE2QzQ4QzBEQjUx
MEY4MDA3NkNEODMgLyogSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCAqLzsgfTsKIAkJ
RjlGMEVEN0EwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjlGMEVENzcw
REI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oICovOyB9OwpA
QCAtMTAxMTMsOCArMTAxMTMsOCBAQAogCQlGNUMyODY5MzAyODQ2RENEMDE4NjM1Q0EgLyogQXBw
bGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEFwcGxpY2F0aW9u
U2VydmljZXMuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBw
bGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07
CiAJCUY1QzI4Njk0MDI4NDZEQ0QwMTg2MzVDQSAvKiBDYXJib24uZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdv
cms7IG5hbWUgPSBDYXJib24uZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvQ2FyYm9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJ
RjVDMjg2OTUwMjg0NkRDRDAxODYzNUNBIC8qIENvY29hLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBu
YW1lID0gQ29jb2EuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
Q29jb2EuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwotCQlGNUQzQTU3
QTEwNkI4M0IzMDA1NDUyOTcgLyogSVNPRGF0ZVRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSVNPRGF0ZVRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGNUQzQTU3QjEwNkI4M0IzMDA1NDUyOTcgLyogSVNPRGF0ZVRpbWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSVNPRGF0ZVRpbWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRjVEM0E1N0ExMDZCODNCMzAwNTQ1Mjk3IC8qIERhdGVDb21wb25lbnRz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb21wb25lbnRz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjVEM0E1N0IxMDZCODNCMzAwNTQ1
Mjk3IC8qIERhdGVDb21wb25lbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERhdGVDb21wb25lbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY4MjE2Mjk5
MDI5RjRGQjUwMTAwMDEzMSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsg
cGF0aCA9IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJRjkxNkM0OEIwREI1MTBGODAwNzZDRDgzIC8qIEpTWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY5MTZDNDhDMERCNTEwRjgwMDc2Q0Q4MyAvKiBKU1hNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEy
NzM3LDYgKzEyNzM3LDggQEAKIAkJCQlCQzc3Q0ZBQjBGRjE3M0QzMDA3MDg4N0IgLyogRGF0YUdy
aWRDb2x1bW5MaXN0LmggKi8sCiAJCQkJQkM3N0NGOTgwRkYxNzI0MjAwNzA4ODdCIC8qIERhdGFH
cmlkQ29sdW1uTGlzdC5pZGwgKi8sCiAJCQkJQkNCQ0FFMzYwRkYxOTM4NTAwMDc2MkFFIC8qIERh
dGFHcmlkRGF0YVNvdXJjZS5oICovLAorCQkJCUY1RDNBNTdBMTA2QjgzQjMwMDU0NTI5NyAvKiBE
YXRlQ29tcG9uZW50cy5jcHAgKi8sCisJCQkJRjVEM0E1N0IxMDZCODNCMzAwNTQ1Mjk3IC8qIERh
dGVDb21wb25lbnRzLmggKi8sCiAJCQkJQkM3REFBRUMwRkY5NjE1RDAwQ0UwMTM4IC8qIERPTURh
dGFHcmlkRGF0YVNvdXJjZS5jcHAgKi8sCiAJCQkJQkM3REFBRUQwRkY5NjE1RDAwQ0UwMTM4IC8q
IERPTURhdGFHcmlkRGF0YVNvdXJjZS5oICovLAogCQkJCUJDREJCOENDMEUwODk1ODQwMEM2MEZG
NiAvKiBGaWxlLmNwcCAqLywKQEAgLTEyOTkyLDggKzEyOTk0LDYgQEAKIAkJCQlFNDQ2MTM5QTBD
RDYzMzEwMDBGQURBNzUgLyogSFRNTFZpZGVvRWxlbWVudC5pZGwgKi8sCiAJCQkJQkNDRDc0RTQw
QTRDOERERjAwNUZEQTZEIC8qIEhUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwICovLAogCQkJCUJD
Q0Q3NERCMEE0QzhEMzUwMDVGREE2RCAvKiBIVE1MVmlld1NvdXJjZURvY3VtZW50LmggKi8sCi0J
CQkJRjVEM0E1N0ExMDZCODNCMzAwNTQ1Mjk3IC8qIElTT0RhdGVUaW1lLmNwcCAqLywKLQkJCQlG
NUQzQTU3QjEwNkI4M0IzMDA1NDUyOTcgLyogSVNPRGF0ZVRpbWUuaCAqLywKIAkJCQlBNzc5Nzkx
MzBENkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmNwcCAqLywKIAkJCQlBNzc5NzkxNDBENkI5
RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggKi8sCiAJCQkJQTc3OTc5MTUwRDZCOUQwQzAwMzg1
MUI5IC8qIEltYWdlRGF0YS5pZGwgKi8sCkBAIC0xNjIzNSw2ICsxNjIzNSw3IEBACiAJCQkJQkM3
N0NGQUMwRkYxNzNEMzAwNzA4ODdCIC8qIERhdGFHcmlkQ29sdW1uTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNCQ0FFMzcwRkYxOTM4NTAwMDc2MkFFIC8qIERhdGFHcmlkRGF0YVNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyMjc0NkYwRTgzNjY0NTAwRTdGOTc1IC8qIERhdGFSZWYu
aCBpbiBIZWFkZXJzICovLAorCQkJCUY1RDNBNTdEMTA2QjgzQjMwMDU0NTI5NyAvKiBEYXRlQ29t
cG9uZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2MkE0NTExMDExNDVBRTAwREZGM0VEIC8q
IERlZGljYXRlZFdvcmtlckNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxQTNENThGMTAx
QzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxNjdFQkY2MTAyOTYyQkEwMDNEMjUyQSAvKiBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3Np
dG9yeS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNzE5MCw3ICsxNzE5MSw2IEBACiAJCQkJQkNDRDc0
REMwQTRDOEQzNTAwNUZEQTZEIC8qIEhUTUxWaWV3U291cmNlRG9jdW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxNEM3NjcxMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQSGVhZGVyTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTRDNzY3MzBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUFBhcnNlcnMu
aCBpbiBIZWFkZXJzICovLAotCQkJCUY1RDNBNTdEMTA2QjgzQjMwMDU0NTI5NyAvKiBJU09EYXRl
VGltZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NkUwQjA1MzgxNDAwMkNFNjRGIC8qIElj
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMjZFNkJDMEEyRTNCMTIwMDVDMjlGQSAvKiBJY29u
RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRTFFQ0JFMEM5MUM5MDQwMERDMjU1QiAv
KiBJY29uRGF0YWJhc2VDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTg4OTQsNiArMTg4OTQs
NyBAQAogCQkJCTFBRDUxQTE1MENCNTlDRDMwMDk1M0QxMSAvKiBEYXRhYmFzZVRyYWNrZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0QyMzkwRkYyOTgwODAwNzA4ODdCIC8qIERhdGFHcmlk
Q29sdW1uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMUZEMEZGMjhEOUIwMDcwODg3QiAv
KiBEYXRhR3JpZENvbHVtbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRjVEM0E1N0MxMDZC
ODNCMzAwNTQ1Mjk3IC8qIERhdGVDb21wb25lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQx
NjJBNDUwMTAxMTQ1QUUwMERGRjNFRCAvKiBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQxQTNENThFMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3Jr
ZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE2N0VCRjUxMDI5NjJCQTAwM0QyNTJB
IC8qIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTkzODEsNyArMTkzODIsNiBAQAogCQkJCUJDQ0Q3NEU1MEE0QzhEREYwMDVGREE2RCAvKiBIVE1M
Vmlld1NvdXJjZURvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBCOEM1NkQ0MEYyODYy
N0YwMDA1MDJFMSAvKiBIVFRQSGVhZGVyTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3
NjcyMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlGNUQzQTU3QzEwNkI4M0IzMDA1NDUyOTcgLyogSVNPRGF0ZVRpbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTEyNkU2QkIwQTJFM0IxMjAwNUMyOUZBIC8qIEljb25EYXRhYmFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0NDVDOERCNzEwMDE1RkM5MDAzMTUzMUEgLyogSWNvbkRhdGFiYXNl
Tm9uZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTJENzUzRTBERTQ3RkFCMDBGMEE2NDggLyog
SWNvbkZldGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL2h0bWwvRGF0ZUNv
bXBvbmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9EYXRlQ29tcG9uZW50cy5j
cHAJKHJldmlzaW9uIDUzOTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvSVNPRGF0ZVRpbWUuY3BwOjUz
OTc1KQorKysgV2ViQ29yZS9odG1sL0RhdGVDb21wb25lbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJU09EYXRlVGlt
ZS5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDxsaW1pdHMuaD4K
KyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
VGhlIG9sZGVzdCBkYXkgb2YgR3JlZ29yaWFuIENhbGVuZGFyIGlzIDE1ODItMTAtMTUuIFdlIGRv
bid0IHN1cHBvcnQgZGF0ZXMgb2xkZXIgdGhhbiBpdC4KK3N0YXRpYyBjb25zdCBpbnQgZ3JlZ29y
aWFuU3RhcnRZZWFyID0gMTU4MjsKK3N0YXRpYyBjb25zdCBpbnQgZ3JlZ29yaWFuU3RhcnRNb250
aCA9IDk7IC8vIFRoaXMgaXMgT2N0b2Jlciwgc2luY2UgbW9udGhzIGFyZSAwIGJhc2VkLgorc3Rh
dGljIGNvbnN0IGludCBncmVnb3JpYW5TdGFydERheSA9IDE1OworCitzdGF0aWMgY29uc3QgaW50
IGRheXNJbk1vbnRoWzEyXSA9IHszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAz
MSwgMzAsIDMxfTsKKworc3RhdGljIGJvb2wgaXNMZWFwWWVhcihpbnQgeWVhcikKK3sKKyAgICBp
ZiAoeWVhciAlIDQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoISh5ZWFyICUgNDAw
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCEoeWVhciAlIDEwMCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gYG1vbnRoJyBpcyAwLWJh
c2VkLgorc3RhdGljIGludCBtYXhEYXlPZk1vbnRoKGludCB5ZWFyLCBpbnQgbW9udGgpCit7Cisg
ICAgaWYgKG1vbnRoICE9IDEpIC8vIEZlYnJ1YXJ5PworICAgICAgICByZXR1cm4gZGF5c0luTW9u
dGhbbW9udGhdOworICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyODsKK30KKwor
Ly8gYG1vbnRoJyBpcyAwLWJhc2VkLgorc3RhdGljIGludCBkYXlPZldlZWsoaW50IHllYXIsIGlu
dCBtb250aCwgaW50IGRheSkKK3sKKyAgICBpbnQgc2hpZnRlZE1vbnRoID0gbW9udGggKyAyOwor
ICAgIC8vIDI6SmFudWFyeSwgMzpGZWJ1cnVhcnksIDQ6TWFyY2gsIC4uLgorCisgICAgLy8gWmVs
bGVyJ3MgY29uZ3J1ZW5jZQorICAgIGlmIChzaGlmdGVkTW9udGggPD0gMykgeworICAgICAgICBz
aGlmdGVkTW9udGggKz0gMTI7CisgICAgICAgIHllYXItLTsKKyAgICB9CisgICAgLy8gNDpNYXJj
aCwgLi4uLCAxNDpKYW51YXJ5LCAxNTpGZWJydWFyeQorCisgICAgaW50IGhpZ2hZZWFyID0geWVh
ciAvIDEwMDsKKyAgICBpbnQgbG93WWVhciA9IHllYXIgJSAxMDA7CisgICAgLy8gV2UgYWRkIDYg
dG8gbWFrZSB0aGUgcmVzdWx0IFN1bmRheS1vcmlnaW4uCisgICAgaW50IHJlc3VsdCA9IChkYXkg
KyAxMyAqIHNoaWZ0ZWRNb250aCAvIDUgKyBsb3dZZWFyICsgbG93WWVhciAvIDQgKyBoaWdoWWVh
ciAvIDQgKyA1ICogaGlnaFllYXIgKyA2KSAlIDc7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
aW50IElTT0RhdGVUaW1lOjptYXhXZWVrTnVtYmVySW5ZZWFyKCkgY29uc3QKK3sKKyAgICBpbnQg
ZGF5ID0gZGF5T2ZXZWVrKG1feWVhciwgMCwgMSk7IC8vIEphbnVhcnkgMS4KKyAgICByZXR1cm4g
ZGF5ID09IFRodXJzZGF5IHx8IChkYXkgPT0gV2VkbmVzZGF5ICYmIGlzTGVhcFllYXIobV95ZWFy
KSkgPyA1MyA6IDUyOworfQorCitzdGF0aWMgdW5zaWduZWQgY291bnREaWdpdHMoY29uc3QgVUNo
YXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCkKK3sKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IHN0YXJ0OworICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgewor
ICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChzcmNbaW5kZXhdKSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gaW5kZXggLSBzdGFydDsKK30KKworLy8gVmVyeSBzdHJpY3Qg
aW50ZWdlciBwYXJzZXIuIERvIG5vdCBhbGxvdyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3Bh
Y2UgdW5saWtlIGNoYXJhY3RlcnNUb0ludFN0cmljdCgpLgorc3RhdGljIGJvb2wgdG9JbnQoY29u
c3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBwYXJzZVN0YXJ0LCB1bnNp
Z25lZCBwYXJzZUxlbmd0aCwgaW50JiBvdXQpCit7CisgICAgaWYgKHBhcnNlU3RhcnQgKyBwYXJz
ZUxlbmd0aCA+IGxlbmd0aCB8fCBwYXJzZUxlbmd0aCA8PSAwKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaW50IHZhbHVlID0gMDsKKyAgICBjb25zdCBVQ2hhciogY3VycmVudCA9IHNyYyAr
IHBhcnNlU3RhcnQ7CisgICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1cnJlbnQgKyBwYXJzZUxlbmd0
aDsKKworICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIG5lZ2F0aXZlIG51bWJlcnMgZm9y
IElTTyA4NjAxLgorICAgIGZvciAoOyBjdXJyZW50IDwgZW5kOyArK2N1cnJlbnQpIHsKKyAgICAg
ICAgaWYgKCFpc0FTQ0lJRGlnaXQoKmN1cnJlbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpbnQgZGlnaXQgPSAqY3VycmVudCAtICcwJzsKKyAgICAgICAgaWYgKHZhbHVl
ID4gKElOVF9NQVggLSBkaWdpdCkgLyAxMCkgLy8gQ2hlY2sgZm9yIG92ZXJmbG93LgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2YWx1ZSA9IHZhbHVlICogMTAgKyBkaWdpdDsK
KyAgICB9CisgICAgb3V0ID0gdmFsdWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSVNP
RGF0ZVRpbWU6OnBhcnNlWWVhcihjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQoreworICAgIHVuc2lnbmVkIGRpZ2l0c0xlbmd0
aCA9IGNvdW50RGlnaXRzKHNyYywgbGVuZ3RoLCBzdGFydCk7CisgICAgLy8gTmVlZHMgYXQgbGVh
c3QgNCBkaWdpdHMgYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KKyAgICBpZiAoZGlnaXRzTGVu
Z3RoIDwgNCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGludCB5ZWFyOworICAgIGlmICgh
dG9JbnQoc3JjLCBsZW5ndGgsIHN0YXJ0LCBkaWdpdHNMZW5ndGgsIHllYXIpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgLy8gTm8gc3VwcG9ydCBmb3IgeWVhcnMgYmVmb3JlIEdyZWdvcmlh
biBjYWxlbmRhci4KKyAgICBpZiAoeWVhciA8IGdyZWdvcmlhblN0YXJ0WWVhcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIG1feWVhciA9IHllYXI7CisgICAgZW5kID0gc3RhcnQgKyBkaWdp
dHNMZW5ndGg7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGJlZm9yZUdyZWdv
cmlhblN0YXJ0RGF0ZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgbW9udGhEYXkpCit7CisgICAg
cmV0dXJuIHllYXIgPCBncmVnb3JpYW5TdGFydFllYXIKKyAgICAgICAgfHwgeWVhciA9PSBncmVn
b3JpYW5TdGFydFllYXIgJiYgbW9udGggPCBncmVnb3JpYW5TdGFydE1vbnRoCisgICAgICAgIHx8
IHllYXIgPT0gZ3JlZ29yaWFuU3RhcnRZZWFyICYmIG1vbnRoID09IGdyZWdvcmlhblN0YXJ0TW9u
dGggJiYgbW9udGhEYXkgPCBncmVnb3JpYW5TdGFydERheTsKK30KKworYm9vbCBJU09EYXRlVGlt
ZTo6YWRkRGF5KGludCBkYXlEaWZmKQoreworICAgIEFTU0VSVChtX21vbnRoRGF5KTsKKworICAg
IGludCBkYXkgPSBtX21vbnRoRGF5ICsgZGF5RGlmZjsKKyAgICBpZiAoZGF5ID4gbWF4RGF5T2ZN
b250aChtX3llYXIsIG1fbW9udGgpKSB7CisgICAgICAgIGRheSA9IG1fbW9udGhEYXk7CisgICAg
ICAgIGludCB5ZWFyID0gbV95ZWFyOworICAgICAgICBpbnQgbW9udGggPSBtX21vbnRoOworICAg
ICAgICBpbnQgbWF4RGF5ID0gbWF4RGF5T2ZNb250aCh5ZWFyLCBtb250aCk7CisgICAgICAgIGZv
ciAoOyBkYXlEaWZmID4gMDsgLS1kYXlEaWZmKSB7CisgICAgICAgICAgICArK2RheTsKKyAgICAg
ICAgICAgIGlmIChkYXkgPiBtYXhEYXkpIHsKKyAgICAgICAgICAgICAgICBkYXkgPSAxOworICAg
ICAgICAgICAgICAgICsrbW9udGg7CisgICAgICAgICAgICAgICAgaWYgKG1vbnRoID49IDEyKSB7
IC8vIG1vbnRoIGlzIDAtb3JpZ2luLgorICAgICAgICAgICAgICAgICAgICBtb250aCA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgICsreWVhcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHllYXIg
PCAwKSAvLyBDaGVjayBmb3Igb3ZlcmZsb3cuCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1heERheSA9IG1h
eERheU9mTW9udGgoeWVhciwgbW9udGgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIG1feWVhciA9IHllYXI7CisgICAgICAgIG1fbW9udGggPSBtb250aDsKKyAgICB9IGVsc2Ug
aWYgKGRheSA8IDEpIHsKKyAgICAgICAgaW50IG1vbnRoID0gbV9tb250aDsKKyAgICAgICAgaW50
IHllYXIgPSBtX3llYXI7CisgICAgICAgIGRheSA9IG1fbW9udGhEYXk7CisgICAgICAgIGZvciAo
OyBkYXlEaWZmIDwgMDsgKytkYXlEaWZmKSB7CisgICAgICAgICAgICAtLWRheTsKKyAgICAgICAg
ICAgIGlmIChkYXkgPCAxKSB7CisgICAgICAgICAgICAgICAgLS1tb250aDsKKyAgICAgICAgICAg
ICAgICBpZiAobW9udGggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1vbnRoID0gMTE7Cisg
ICAgICAgICAgICAgICAgICAgIC0teWVhcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZGF5ID0gbWF4RGF5T2ZNb250aCh5ZWFyLCBtb250aCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoYmVmb3JlR3JlZ29yaWFuU3RhcnREYXRlKHllYXIsIG1vbnRoLCBkYXkp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtX3ll
YXIgPSB5ZWFyOworICAgICAgICBtX21vbnRoID0gbW9udGg7CisgICAgfQorICAgIG1fbW9udGhE
YXkgPSBkYXk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSVNPRGF0ZVRpbWU6OmFkZE1p
bnV0ZShpbnQgbWludXRlKQoreworICAgIGludCBjYXJyeTsKKyAgICAvLyBtaW4gY2FuIGJlIG5l
Z2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiA1OS4KKyAgICBtaW51dGUgKz0gbV9taW51dGU7CisgICAg
aWYgKG1pbnV0ZSA+IDU5KSB7CisgICAgICAgIGNhcnJ5ID0gbWludXRlIC8gNjA7CisgICAgICAg
IG1pbnV0ZSA9IG1pbnV0ZSAlIDYwOworICAgIH0gZWxzZSBpZiAobV9taW51dGUgPCAwKSB7Cisg
ICAgICAgIGNhcnJ5ID0gKDU5IC0gbV9taW51dGUpIC8gNjA7CisgICAgICAgIG1pbnV0ZSArPSBj
YXJyeSAqIDYwOworICAgICAgICBjYXJyeSA9IC1jYXJyeTsKKyAgICAgICAgQVNTRVJUKG1pbnV0
ZSA+PSAwICYmIG1pbnV0ZSA8PSA1OSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9taW51dGUg
PSBtaW51dGU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGludCBob3VyID0g
bV9ob3VyICsgY2Fycnk7CisgICAgaWYgKGhvdXIgPiAyMykgeworICAgICAgICBjYXJyeSA9IGhv
dXIgLyAyNDsKKyAgICAgICAgaG91ciA9IGhvdXIgJSAyNDsKKyAgICB9IGVsc2UgaWYgKGhvdXIg
PCAwKSB7CisgICAgICAgIGNhcnJ5ID0gKDIzIC0gaG91cikgLyAyNDsKKyAgICAgICAgaG91ciAr
PSBjYXJyeSAqIDI0OworICAgICAgICBjYXJyeSA9IC1jYXJyeTsKKyAgICAgICAgQVNTRVJUKGhv
dXIgPj0gMCAmJiBob3VyIDw9IDIzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX21pbnV0ZSA9
IG1pbnV0ZTsKKyAgICAgICAgbV9ob3VyID0gaG91cjsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGlmICghYWRkRGF5KGNhcnJ5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IG1fbWludXRlID0gbWludXRlOworICAgIG1faG91ciA9IGhvdXI7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKKy8vIFBhcnNlcyBhIHRpbWV6b25lIHBhcnQsIGFuZCBhZGp1c3QgeWVhciwgbW9udGgs
IG1vbnRoRGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQuCitib29sIElTT0Rh
dGVUaW1lOjpwYXJzZVRpbWVab25lKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCit7CisgICAgaWYgKHN0YXJ0ID49IGxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnQ7Cisg
ICAgaWYgKHNyY1tpbmRleF0gPT0gJ1onKSB7CisgICAgICAgIGVuZCA9IGluZGV4ICsgMTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBtaW51czsKKyAgICBpZiAoc3Jj
W2luZGV4XSA9PSAnKycpCisgICAgICAgIG1pbnVzID0gZmFsc2U7CisgICAgZWxzZSBpZiAoc3Jj
W2luZGV4XSA9PSAnLScpCisgICAgICAgIG1pbnVzID0gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICArK2luZGV4OworCisgICAgaW50IGhvdXI7CisgICAgaW50IG1p
bnV0ZTsKKyAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCwgMiwgaG91cikgfHwgaG91
ciA8IDAgfHwgaG91ciA+IDIzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW5kZXggKz0g
MjsKKworICAgIGlmIChpbmRleCA+PSBsZW5ndGggfHwgc3JjW2luZGV4XSAhPSAnOicpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICArK2luZGV4OworCisgICAgaWYgKCF0b0ludChzcmMsIGxl
bmd0aCwgaW5kZXgsIDIsIG1pbnV0ZSkgfHwgbWludXRlIDwgMCB8fCBtaW51dGUgPiA1OSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGluZGV4ICs9IDI7CisKKyAgICBpZiAobWludXMpIHsK
KyAgICAgICAgaG91ciA9IC1ob3VyOworICAgICAgICBtaW51dGUgPSAtbWludXRlOworICAgIH0K
KworICAgIC8vIFN1YnRyYWN0IHRoZSB0aW1lem9uZSBvZmZzZXQuCisgICAgaWYgKCFhZGRNaW51
dGUoLShob3VyICogNjAgKyBtaW51dGUpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGVu
ZCA9IGluZGV4OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElTT0RhdGVUaW1lOjpwYXJz
ZU1vbnRoKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkJiBlbmQpCit7CisgICAgQVNTRVJUKHNyYyk7CisgICAgdW5zaWduZWQgaW5kZXg7
CisgICAgaWYgKCFwYXJzZVllYXIoc3JjLCBsZW5ndGgsIHN0YXJ0LCBpbmRleCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoaW5kZXggPj0gbGVuZ3RoIHx8IHNyY1tpbmRleF0gIT0g
Jy0nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKytpbmRleDsKKworICAgIGludCBtb250
aDsKKyAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCwgMiwgbW9udGgpIHx8IG1vbnRo
IDwgMSB8fCBtb250aCA+IDEyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLS1tb250aDsK
KyAgICAvLyBObyBzdXBwb3J0IGZvciBtb250aHMgYmVmb3JlIEdyZWdvcmlhbiBjYWxlbmRhci4K
KyAgICBpZiAoYmVmb3JlR3JlZ29yaWFuU3RhcnREYXRlKG1feWVhciwgbW9udGgsIGdyZWdvcmlh
blN0YXJ0RGF5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fbW9udGggPSBtb250aDsK
KyAgICBlbmQgPSBpbmRleCArIDI7CisgICAgbV90eXBlID0gTW9udGg7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgSVNPRGF0ZVRpbWU6OnBhcnNlRGF0ZShjb25zdCBVQ2hhciogc3JjLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQoreworICAgIEFT
U0VSVChzcmMpOworICAgIHVuc2lnbmVkIGluZGV4OworICAgIGlmICghcGFyc2VNb250aChzcmMs
IGxlbmd0aCwgc3RhcnQsIGluZGV4KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vICct
JyBhbmQgMi1kaWdpdHMgYXJlIG5lZWRlZC4KKyAgICBpZiAoaW5kZXggKyAyID49IGxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzcmNbaW5kZXhdICE9ICctJykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICsraW5kZXg7CisKKyAgICBpbnQgZGF5OworICAgIGlmICgh
dG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBkYXkpIHx8IGRheSA8IDEgfHwgZGF5ID4gbWF4
RGF5T2ZNb250aChtX3llYXIsIG1fbW9udGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Ly8gTm8gc3VwcG9ydCBmb3IgZGF0ZXMgYmVmb3JlIEdyZWdvcmlhbiBjYWxlbmRhci4KKyAgICBp
ZiAobV95ZWFyID09IGdyZWdvcmlhblN0YXJ0WWVhciAmJiBtX21vbnRoID09IGdyZWdvcmlhblN0
YXJ0TW9udGggJiYgZGF5IDwgZ3JlZ29yaWFuU3RhcnREYXkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBtX21vbnRoRGF5ID0gZGF5OworICAgIGVuZCA9IGluZGV4ICsgMjsKKyAgICBtX3R5
cGUgPSBEYXRlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElTT0RhdGVUaW1lOjpwYXJz
ZVdlZWsoY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQmIGVuZCkKK3sKKyAgICBBU1NFUlQoc3JjKTsKKyAgICB1bnNpZ25lZCBpbmRleDsK
KyAgICBpZiAoIXBhcnNlWWVhcihzcmMsIGxlbmd0aCwgc3RhcnQsIGluZGV4KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gNCBjaGFyYWN0ZXJzICgnLScgJ1cnIGRpZ2l0IGRpZ2l0
KSBhcmUgbmVlZGVkLgorICAgIGlmIChpbmRleCArIDMgPj0gbGVuZ3RoKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKHNyY1tpbmRleF0gIT0gJy0nKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgKytpbmRleDsKKyAgICBpZiAoc3JjW2luZGV4XSAhPSAnVycpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICArK2luZGV4OworCisgICAgaW50IHdlZWs7CisgICAgaWYgKCF0b0lu
dChzcmMsIGxlbmd0aCwgaW5kZXgsIDIsIHdlZWspIHx8IHdlZWsgPCAxIHx8IHdlZWsgPiBtYXhX
ZWVrTnVtYmVySW5ZZWFyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBObyBzdXBw
b3J0IGZvciB5ZWFycyBvbGRlciB0aGFuIG9yIGVxdWFscyB0byBHcmVnb3JpYW4gY2FsZW5kYXIg
c3RhcnQgeWVhci4KKyAgICBpZiAobV95ZWFyIDw9IGdyZWdvcmlhblN0YXJ0WWVhcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIG1fd2VlayA9IHdlZWs7CisgICAgZW5kID0gaW5kZXggKyAy
OworICAgIG1fdHlwZSA9IFdlZWs7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSVNPRGF0
ZVRpbWU6OnBhcnNlVGltZShjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQoreworICAgIEFTU0VSVChzcmMpOworICAgIGludCBo
b3VyOworICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIHN0YXJ0LCAyLCBob3VyKSB8fCBob3Vy
IDwgMCB8fCBob3VyID4gMjMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB1bnNpZ25lZCBp
bmRleCA9IHN0YXJ0ICsgMjsKKyAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKHNyY1tpbmRleF0gIT0gJzonKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgKytpbmRleDsKKworICAgIGludCBtaW51dGU7CisgICAgaWYgKCF0b0ludChzcmMs
IGxlbmd0aCwgaW5kZXgsIDIsIG1pbnV0ZSkgfHwgbWludXRlIDwgMCB8fCBtaW51dGUgPiA1OSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGluZGV4ICs9IDI7CisKKyAgICBpbnQgc2Vjb25k
ID0gMDsKKyAgICBpbnQgbWlsbGlzZWNvbmQgPSAwOworICAgIC8vIE9wdGlvbmFsIHNlY29uZCBw
YXJ0LgorICAgIC8vIERvIG5vdCByZXR1cm4gd2l0aCBmYWxzZSBiZWNhdXNlIHRoZSBwYXJ0IGlz
IG9wdGlvbmFsLgorICAgIGlmIChpbmRleCArIDIgPCBsZW5ndGggJiYgc3JjW2luZGV4XSA9PSAn
OicpIHsKKyAgICAgICAgaWYgKHRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCArIDEsIDIsIHNlY29u
ZCkgJiYgc2Vjb25kID49IDAgJiYgc2Vjb25kIDw9IDU5KSB7CisgICAgICAgICAgICBpbmRleCAr
PSAzOworCisgICAgICAgICAgICAvLyBPcHRpb25hbCBmcmFjdGlvbmFsIHNlY29uZCBwYXJ0Lgor
ICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIHNyY1tpbmRleF0gPT0gJy4nKSB7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgZGlnaXRzTGVuZ3RoID0gY291bnREaWdpdHMoc3JjLCBs
ZW5ndGgsIGluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0xlbmd0aCA+ICAw
KSB7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGJv
b2wgb2s7CisgICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNMZW5ndGggPT0gMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb2sgPSB0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgsIDEsIG1p
bGxpc2Vjb25kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kICo9IDEwMDsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNMZW5ndGggPT0gMikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb2sgPSB0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgsIDIsIG1p
bGxpc2Vjb25kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kICo9IDEwOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgLy8gZGlnaXRzTGVuZ3RoID49IDMKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9rID0gdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAzLCBtaWxsaXNl
Y29uZCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvayk7CisgICAgICAgICAgICAgICAg
ICAgIGluZGV4ICs9IGRpZ2l0c0xlbmd0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgbV9ob3VyID0gaG91cjsKKyAgICBtX21pbnV0ZSA9
IG1pbnV0ZTsKKyAgICBtX3NlY29uZCA9IHNlY29uZDsKKyAgICBtX21pbGxpc2Vjb25kID0gbWls
bGlzZWNvbmQ7CisgICAgZW5kID0gaW5kZXg7CisgICAgbV90eXBlID0gVGltZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBJU09EYXRlVGltZTo6cGFyc2VEYXRlVGltZUxvY2FsKGNvbnN0
IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBl
bmQpCit7CisgICAgQVNTRVJUKHNyYyk7CisgICAgdW5zaWduZWQgaW5kZXg7CisgICAgaWYgKCFw
YXJzZURhdGUoc3JjLCBsZW5ndGgsIHN0YXJ0LCBpbmRleCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKHNyY1tpbmRleF0gIT0gJ1QnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKytpbmRl
eDsKKyAgICBpZiAoIXBhcnNlVGltZShzcmMsIGxlbmd0aCwgaW5kZXgsIGVuZCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBtX3R5cGUgPSBEYXRlVGltZUxvY2FsOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIElTT0RhdGVUaW1lOjpwYXJzZURhdGVUaW1lKGNvbnN0IFVDaGFyKiBz
cmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCit7Cisg
ICAgQVNTRVJUKHNyYyk7CisgICAgdW5zaWduZWQgaW5kZXg7CisgICAgaWYgKCFwYXJzZURhdGUo
c3JjLCBsZW5ndGgsIHN0YXJ0LCBpbmRleCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoaW5kZXggPj0gbGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNyY1tp
bmRleF0gIT0gJ1QnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKytpbmRleDsKKyAgICBp
ZiAoIXBhcnNlVGltZShzcmMsIGxlbmd0aCwgaW5kZXgsIGluZGV4KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghcGFyc2VUaW1lWm9uZShzcmMsIGxlbmd0aCwgaW5kZXgsIGVuZCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3R5cGUgPSBEYXRlVGltZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgcG9zaXRpdmVGbW9kKGRvdWJsZSB2
YWx1ZSwgZG91YmxlIGRpdmlkZXIpCit7CisgICAgZG91YmxlIHJlbWFpbmRlciA9IGZtb2QodmFs
dWUsIGRpdmlkZXIpOworICAgIHJldHVybiByZW1haW5kZXIgPCAwID8gcmVtYWluZGVyICsgZGl2
aWRlciA6IHJlbWFpbmRlcjsKK30KKwordm9pZCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRz
U2luY2VNaWRuaWdodEludGVybmFsKGRvdWJsZSBtc0luRGF5KQoreworICAgIEFTU0VSVChtc0lu
RGF5ID49IDAgJiYgbXNJbkRheSA8IG1zUGVyRGF5KTsKKyAgICBtX21pbGxpc2Vjb25kID0gc3Rh
dGljX2Nhc3Q8aW50PihmbW9kKG1zSW5EYXksIG1zUGVyU2Vjb25kKSk7CisgICAgZG91YmxlIHZh
bHVlID0gZmxvb3IobXNJbkRheSAvIG1zUGVyU2Vjb25kKTsKKyAgICBtX3NlY29uZCA9IHN0YXRp
Y19jYXN0PGludD4oZm1vZCh2YWx1ZSwgc2Vjb25kc1Blck1pbnV0ZSkpOworICAgIHZhbHVlID0g
Zmxvb3IodmFsdWUgLyBzZWNvbmRzUGVyTWludXRlKTsKKyAgICBtX21pbnV0ZSA9IHN0YXRpY19j
YXN0PGludD4oZm1vZCh2YWx1ZSwgbWludXRlc1BlckhvdXIpKTsKKyAgICBtX2hvdXIgPSBzdGF0
aWNfY2FzdDxpbnQ+KHZhbHVlIC8gbWludXRlc1BlckhvdXIpOworfQorCitib29sIElTT0RhdGVU
aW1lOjpzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZUludGVybmFsKGRvdWJsZSBtcykK
K3sKKyAgICBtX3llYXIgPSBtc1RvWWVhcihtcyk7CisgICAgaW50IHllYXJEYXkgPSBkYXlJblll
YXIobXMsIG1feWVhcik7CisgICAgbV9tb250aCA9IG1vbnRoRnJvbURheUluWWVhcih5ZWFyRGF5
LCBpc0xlYXBZZWFyKG1feWVhcikpOworICAgIG1fbW9udGhEYXkgPSBkYXlJbk1vbnRoRnJvbURh
eUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKG1feWVhcikpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZShk
b3VibGUgbXMpCit7CisgICAgbV90eXBlID0gSW52YWxpZDsKKyAgICBpZiAoIWlzZmluaXRlKG1z
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghc2V0TWlsbGlzZWNvbmRzU2luY2VF
cG9jaEZvckRhdGVJbnRlcm5hbChyb3VuZChtcykpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKGJlZm9yZUdyZWdvcmlhblN0YXJ0RGF0ZShtX3llYXIsIG1fbW9udGgsIG1fbW9udGhE
YXkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV90eXBlID0gRGF0ZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9j
aEZvckRhdGVUaW1lKGRvdWJsZSBtcykKK3sKKyAgICBtX3R5cGUgPSBJbnZhbGlkOworICAgIGlm
ICghaXNmaW5pdGUobXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbXMgPSByb3VuZCht
cyk7CisgICAgc2V0TWlsbGlzZWNvbmRzU2luY2VNaWRuaWdodEludGVybmFsKHBvc2l0aXZlRm1v
ZChtcywgbXNQZXJEYXkpKTsKKyAgICBpZiAoIXNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JE
YXRlSW50ZXJuYWwobXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGJlZm9yZUdy
ZWdvcmlhblN0YXJ0RGF0ZShtX3llYXIsIG1fbW9udGgsIG1fbW9udGhEYXkpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgbV90eXBlID0gRGF0ZVRpbWU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSVNPRGF0ZVRpbWU6OnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlVGlt
ZUxvY2FsKGRvdWJsZSBtcykKK3sKKyAgICAvLyBJbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBE
YXRlVGltZUxvY2FsIGlzIHRoZSBzYW1lIGFzIERhdGVUaW1lIGV4Y2VwdCBtX3R5cGUuCisgICAg
aWYgKCFzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZVRpbWUobXMpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgbV90eXBlID0gRGF0ZVRpbWVMb2NhbDsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvck1v
bnRoKGRvdWJsZSBtcykKK3sKKyAgICBtX3R5cGUgPSBJbnZhbGlkOworICAgIGlmICghaXNmaW5p
dGUobXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFzZXRNaWxsaXNlY29uZHNT
aW5jZUVwb2NoRm9yRGF0ZUludGVybmFsKHJvdW5kKG1zKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAvLyBJZ25vcmUgbV9tb250aERheSB1cGRhdGVkIGJ5IHNldE1pbGxpc2Vjb25kc1Np
bmNlRXBvY2hGb3JEYXRlSW50ZXJuYWwoKS4KKyAgICBpZiAoYmVmb3JlR3JlZ29yaWFuU3RhcnRE
YXRlKG1feWVhciwgbV9tb250aCwgZ3JlZ29yaWFuU3RhcnREYXkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgbV90eXBlID0gTW9udGg7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
SVNPRGF0ZVRpbWU6OnNldE1pbGxpc2Vjb25kc1NpbmNlTWlkbmlnaHQoZG91YmxlIG1zKQorewor
ICAgIG1fdHlwZSA9IEludmFsaWQ7CisgICAgaWYgKCFpc2Zpbml0ZShtcykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBzZXRNaWxsaXNlY29uZHNTaW5jZU1pZG5pZ2h0SW50ZXJuYWwocG9z
aXRpdmVGbW9kKHJvdW5kKG1zKSwgbXNQZXJEYXkpKTsKKyAgICBtX3R5cGUgPSBUaW1lOworICAg
IHJldHVybiB0cnVlOworfQorCisvLyBPZmZzZXQgZnJvbSBKYW51YXJ5IDFzdCB0byBNb25kYXkg
b2YgdGhlIElTTyA4NjAxJ3MgZmlyc3Qgd2Vlay4KKy8vICAgZXguIElmIEphbnVhcnkgMXN0IGlz
IEZyaWRheSwgc3VjaCBNb25kYXkgaXMgMyBkYXlzIGxhdGVyLiBSZXR1cm5zIDMuCitzdGF0aWMg
aW50IG9mZnNldFRvMXN0V2Vla1N0YXJ0KGludCB5ZWFyKQoreworICAgIGludCBvZmZzZXRUbzFz
dFdlZWtTdGFydCA9IDEgLSBkYXlPZldlZWsoeWVhciwgMCwgMSk7CisgICAgaWYgKG9mZnNldFRv
MXN0V2Vla1N0YXJ0IDw9IC00KQorICAgICAgICBvZmZzZXRUbzFzdFdlZWtTdGFydCArPSA3Owor
ICAgIHJldHVybiBvZmZzZXRUbzFzdFdlZWtTdGFydDsKK30KKworYm9vbCBJU09EYXRlVGltZTo6
c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvcldlZWsoZG91YmxlIG1zKQoreworICAgIG1fdHlw
ZSA9IEludmFsaWQ7CisgICAgaWYgKCFpc2Zpbml0ZShtcykpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBtcyA9IHJvdW5kKG1zKTsKKworICAgIG1feWVhciA9IG1zVG9ZZWFyKG1zKTsKKyAg
ICAvLyBXZSBkb24ndCBzdXBwb3J0IGdyZWdvcmlhblN0YXJ0WWVhci4gV2VlayBudW1iZXJzIGFy
ZSB1bmRlZmluZWQgaW4gdGhhdCB5ZWFyLgorICAgIGlmIChtX3llYXIgPD0gZ3JlZ29yaWFuU3Rh
cnRZZWFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgeWVhckRheSA9IGRheUlu
WWVhcihtcywgbV95ZWFyKTsKKyAgICBpbnQgb2Zmc2V0ID0gb2Zmc2V0VG8xc3RXZWVrU3RhcnQo
bV95ZWFyKTsKKyAgICBpZiAoeWVhckRheSA8IG9mZnNldCkgeworICAgICAgICAvLyBUaGUgZGF5
IGJlbG9uZ3MgdG8gdGhlIGxhc3Qgd2VlayBvZiB0aGUgcHJldmlvdXMgeWVhci4KKyAgICAgICAg
bV95ZWFyLS07CisgICAgICAgIGlmIChtX3llYXIgPD0gZ3JlZ29yaWFuU3RhcnRZZWFyKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX3dlZWsgPSBtYXhXZWVrTnVtYmVySW5Z
ZWFyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV93ZWVrID0gKCh5ZWFyRGF5IC0gb2Zmc2V0
KSAvIDcpICsgMTsKKyAgICAgICAgaWYgKG1fd2VlayA+IG1heFdlZWtOdW1iZXJJblllYXIoKSkg
eworICAgICAgICAgICAgbV95ZWFyKys7CisgICAgICAgICAgICBtX3dlZWsgPSAxOworICAgICAg
ICB9CisgICAgfQorICAgIG1fdHlwZSA9IFdlZWs7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Rv
dWJsZSBJU09EYXRlVGltZTo6bWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvclRpbWUoKSBjb25zdAor
eworICAgIEFTU0VSVChtX3R5cGUgPT0gVGltZSB8fCBtX3R5cGUgPT0gRGF0ZVRpbWUgfHwgbV90
eXBlID09IERhdGVUaW1lTG9jYWwpOworICAgIHJldHVybiAoKG1faG91ciAqIG1pbnV0ZXNQZXJI
b3VyICsgbV9taW51dGUpICogc2Vjb25kc1Blck1pbnV0ZSArIG1fc2Vjb25kKSAqIG1zUGVyU2Vj
b25kICsgbV9taWxsaXNlY29uZDsKK30KKworZG91YmxlIElTT0RhdGVUaW1lOjptaWxsaXNlY29u
ZHNTaW5jZUVwb2NoKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2Ug
RGF0ZToKKyAgICAgICAgcmV0dXJuIGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIsIG1fbW9udGgs
IG1fbW9udGhEYXkpICogbXNQZXJEYXk7CisgICAgY2FzZSBEYXRlVGltZToKKyAgICBjYXNlIERh
dGVUaW1lTG9jYWw6CisgICAgICAgIHJldHVybiBkYXRlVG9EYXlzRnJvbTE5NzAobV95ZWFyLCBt
X21vbnRoLCBtX21vbnRoRGF5KSAqIG1zUGVyRGF5ICsgbWlsbGlzZWNvbmRzU2luY2VFcG9jaEZv
clRpbWUoKTsKKyAgICBjYXNlIE1vbnRoOgorICAgICAgICByZXR1cm4gZGF0ZVRvRGF5c0Zyb20x
OTcwKG1feWVhciwgbV9tb250aCwgMSkgKiBtc1BlckRheTsKKyAgICBjYXNlIFRpbWU6CisgICAg
ICAgIHJldHVybiBtaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yVGltZSgpOworICAgIGNhc2UgV2Vl
azoKKyAgICAgICAgcmV0dXJuIChkYXRlVG9EYXlzRnJvbTE5NzAobV95ZWFyLCAwLCAxKSArIG9m
ZnNldFRvMXN0V2Vla1N0YXJ0KG1feWVhcikgKyAobV93ZWVrIC0gMSkgKiA3KSAqIG1zUGVyRGF5
OworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBpbnZhbGlkTWlsbGlzZWNvbmRzKCk7Cit9CisKK1N0
cmluZyBJU09EYXRlVGltZTo6dG9TdHJpbmdGb3JUaW1lKFNlY29uZEZvcm1hdCBmb3JtYXQpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBEYXRlVGltZSB8fCBtX3R5cGUgPT0gRGF0ZVRp
bWVMb2NhbCB8fCBtX3R5cGUgPT0gVGltZSk7CisgICAgU2Vjb25kRm9ybWF0IGVmZmVjdGl2ZUZv
cm1hdCA9IGZvcm1hdDsKKyAgICBpZiAobV9taWxsaXNlY29uZCkKKyAgICAgICAgZWZmZWN0aXZl
Rm9ybWF0ID0gTWlsbGlzZWNvbmQ7CisgICAgZWxzZSBpZiAoZm9ybWF0ID09IE5vbmUgJiYgbV9z
ZWNvbmQpCisgICAgICAgIGVmZmVjdGl2ZUZvcm1hdCA9IFNlY29uZDsKKworICAgIHN3aXRjaCAo
ZWZmZWN0aXZlRm9ybWF0KSB7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIC8vIEZhbGxiYWNrIHRvIE5vbmUuCisgICAgY2FzZSBOb25lOgorICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUwMmQ6JTAyZCIsIG1faG91ciwgbV9taW51dGUp
OworICAgIGNhc2UgU2Vjb25kOgorICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUwMmQ6
JTAyZDolMDJkIiwgbV9ob3VyLCBtX21pbnV0ZSwgbV9zZWNvbmQpOworICAgIGNhc2UgTWlsbGlz
ZWNvbmQ6CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJTAyZDolMDJkOiUwMmQuJTAz
ZCIsIG1faG91ciwgbV9taW51dGUsIG1fc2Vjb25kLCBtX21pbGxpc2Vjb25kKTsKKyAgICB9Cit9
CisKK1N0cmluZyBJU09EYXRlVGltZTo6dG9TdHJpbmcoU2Vjb25kRm9ybWF0IGZvcm1hdCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgRGF0ZToKKyAgICAgICAgcmV0
dXJuIFN0cmluZzo6Zm9ybWF0KCIlMDRkLSUwMmQtJTAyZCIsIG1feWVhciwgbV9tb250aCArIDEs
IG1fbW9udGhEYXkpOworICAgIGNhc2UgRGF0ZVRpbWU6CisgICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiJTA0ZC0lMDJkLSUwMmRUIiwgbV95ZWFyLCBtX21vbnRoICsgMSwgbV9tb250aERh
eSkKKyAgICAgICAgICAgICsgdG9TdHJpbmdGb3JUaW1lKGZvcm1hdCkgKyBTdHJpbmcoIloiKTsK
KyAgICBjYXNlIERhdGVUaW1lTG9jYWw6CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgi
JTA0ZC0lMDJkLSUwMmRUIiwgbV95ZWFyLCBtX21vbnRoICsgMSwgbV9tb250aERheSkKKyAgICAg
ICAgICAgICsgdG9TdHJpbmdGb3JUaW1lKGZvcm1hdCk7CisgICAgY2FzZSBNb250aDoKKyAgICAg
ICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlMDRkLSUwMmQiLCBtX3llYXIsIG1fbW9udGggKyAx
KTsKKyAgICBjYXNlIFRpbWU6CisgICAgICAgIHJldHVybiB0b1N0cmluZ0ZvclRpbWUoZm9ybWF0
KTsKKyAgICBjYXNlIFdlZWs6CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJTA0ZC1X
JTAyZCIsIG1feWVhciwgbV93ZWVrKTsKKyAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCIo
SW52YWxpZCBJU09EYXRlVGltZSkiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9odG1sL0RhdGVDb21wb25lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvRGF0ZUNvbXBvbmVudHMuY3BwCShyZXZpc2lvbiA1Mzk3NSkKKysrIFdlYkNvcmUvaHRt
bC9EYXRlQ29tcG9uZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSVNPRGF0ZVRpbWUuaCIKKyNpbmNs
dWRlICJEYXRlQ29tcG9uZW50cy5oIgogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlIDxsaW1pdHMuaD4KQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIGludCBkYXlPZldlZWso
aW50IHllYXIsIGludCBtb250aAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWludCBJU09EYXRl
VGltZTo6bWF4V2Vla051bWJlckluWWVhcigpIGNvbnN0CitpbnQgRGF0ZUNvbXBvbmVudHM6Om1h
eFdlZWtOdW1iZXJJblllYXIoKSBjb25zdAogewogICAgIGludCBkYXkgPSBkYXlPZldlZWsobV95
ZWFyLCAwLCAxKTsgLy8gSmFudWFyeSAxLgogICAgIHJldHVybiBkYXkgPT0gVGh1cnNkYXkgfHwg
KGRheSA9PSBXZWRuZXNkYXkgJiYgaXNMZWFwWWVhcihtX3llYXIpKSA/IDUzIDogNTI7CkBAIC0x
MjMsNyArMTIzLDcgQEAgc3RhdGljIGJvb2wgdG9JbnQoY29uc3QgVUNoYXIqIHNyYywgdW5zaQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElTT0RhdGVUaW1lOjpwYXJzZVllYXIoY29uc3Qg
VUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVu
ZCkKK2Jvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlWWVhcihjb25zdCBVQ2hhciogc3JjLCB1bnNp
Z25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQogewogICAgIHVuc2ln
bmVkIGRpZ2l0c0xlbmd0aCA9IGNvdW50RGlnaXRzKHNyYywgbGVuZ3RoLCBzdGFydCk7CiAgICAg
Ly8gTmVlZHMgYXQgbGVhc3QgNCBkaWdpdHMgYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KQEAg
LTE0Nyw3ICsxNDcsNyBAQCBzdGF0aWMgYm9vbCBiZWZvcmVHcmVnb3JpYW5TdGFydERhdGUoaW50
CiAgICAgICAgIHx8IHllYXIgPT0gZ3JlZ29yaWFuU3RhcnRZZWFyICYmIG1vbnRoID09IGdyZWdv
cmlhblN0YXJ0TW9udGggJiYgbW9udGhEYXkgPCBncmVnb3JpYW5TdGFydERheTsKIH0KIAotYm9v
bCBJU09EYXRlVGltZTo6YWRkRGF5KGludCBkYXlEaWZmKQorYm9vbCBEYXRlQ29tcG9uZW50czo6
YWRkRGF5KGludCBkYXlEaWZmKQogewogICAgIEFTU0VSVChtX21vbnRoRGF5KTsKIApAQCAtMTk3
LDcgKzE5Nyw3IEBAIGJvb2wgSVNPRGF0ZVRpbWU6OmFkZERheShpbnQgZGF5RGlmZikKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJU09EYXRlVGltZTo6YWRkTWludXRlKGludCBtaW51dGUp
Citib29sIERhdGVDb21wb25lbnRzOjphZGRNaW51dGUoaW50IG1pbnV0ZSkKIHsKICAgICBpbnQg
Y2Fycnk7CiAgICAgLy8gbWluIGNhbiBiZSBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gNTkuCkBA
IC0yMzcsNyArMjM3LDcgQEAgYm9vbCBJU09EYXRlVGltZTo6YWRkTWludXRlKGludCBtaW51dGUp
CiB9CiAKIC8vIFBhcnNlcyBhIHRpbWV6b25lIHBhcnQsIGFuZCBhZGp1c3QgeWVhciwgbW9udGgs
IG1vbnRoRGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQuCi1ib29sIElTT0Rh
dGVUaW1lOjpwYXJzZVRpbWVab25lKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCitib29sIERhdGVDb21wb25lbnRzOjpwYXJz
ZVRpbWVab25lKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkJiBlbmQpCiB7CiAgICAgaWYgKHN0YXJ0ID49IGxlbmd0aCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMjgyLDcgKzI4Miw3IEBAIGJvb2wgSVNPRGF0ZVRpbWU6OnBhcnNl
VGltZVpvbmUoY29uc3QgVUMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJU09EYXRlVGlt
ZTo6cGFyc2VNb250aChjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQorYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VNb250aChj
b25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCYgZW5kKQogewogICAgIEFTU0VSVChzcmMpOwogICAgIHVuc2lnbmVkIGluZGV4OwpAQCAtMzA1
LDcgKzMwNSw3IEBAIGJvb2wgSVNPRGF0ZVRpbWU6OnBhcnNlTW9udGgoY29uc3QgVUNoYXIKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJU09EYXRlVGltZTo6cGFyc2VEYXRlKGNvbnN0IFVD
aGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQp
Citib29sIERhdGVDb21wb25lbnRzOjpwYXJzZURhdGUoY29uc3QgVUNoYXIqIHNyYywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKIHsKICAgICBBU1NFUlQo
c3JjKTsKICAgICB1bnNpZ25lZCBpbmRleDsKQEAgLTMzMCw3ICszMzAsNyBAQCBib29sIElTT0Rh
dGVUaW1lOjpwYXJzZURhdGUoY29uc3QgVUNoYXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgSVNPRGF0ZVRpbWU6OnBhcnNlV2Vlayhjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQorYm9vbCBEYXRlQ29tcG9uZW50czo6
cGFyc2VXZWVrKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkJiBlbmQpCiB7CiAgICAgQVNTRVJUKHNyYyk7CiAgICAgdW5zaWduZWQgaW5k
ZXg7CkBAIC0zNTksNyArMzU5LDcgQEAgYm9vbCBJU09EYXRlVGltZTo6cGFyc2VXZWVrKGNvbnN0
IFVDaGFyKgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElTT0RhdGVUaW1lOjpwYXJzZVRp
bWUoY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQmIGVuZCkKK2Jvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlVGltZShjb25zdCBVQ2hhciog
c3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQogewog
ICAgIEFTU0VSVChzcmMpOwogICAgIGludCBob3VyOwpAQCAtNDE0LDcgKzQxNCw3IEBAIGJvb2wg
SVNPRGF0ZVRpbWU6OnBhcnNlVGltZShjb25zdCBVQ2hhcioKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBJU09EYXRlVGltZTo6cGFyc2VEYXRlVGltZUxvY2FsKGNvbnN0IFVDaGFyKiBzcmMs
IHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCitib29sIERh
dGVDb21wb25lbnRzOjpwYXJzZURhdGVUaW1lTG9jYWwoY29uc3QgVUNoYXIqIHNyYywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKIHsKICAgICBBU1NFUlQo
c3JjKTsKICAgICB1bnNpZ25lZCBpbmRleDsKQEAgLTQzMSw3ICs0MzEsNyBAQCBib29sIElTT0Rh
dGVUaW1lOjpwYXJzZURhdGVUaW1lTG9jYWwoY29uCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgSVNPRGF0ZVRpbWU6OnBhcnNlRGF0ZVRpbWUoY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKK2Jvb2wgRGF0ZUNvbXBvbmVu
dHM6OnBhcnNlRGF0ZVRpbWUoY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKIHsKICAgICBBU1NFUlQoc3JjKTsKICAgICB1bnNp
Z25lZCBpbmRleDsKQEAgLTQ1Niw3ICs0NTYsNyBAQCBzdGF0aWMgaW5saW5lIGRvdWJsZSBwb3Np
dGl2ZUZtb2QoZG91YmxlCiAgICAgcmV0dXJuIHJlbWFpbmRlciA8IDAgPyByZW1haW5kZXIgKyBk
aXZpZGVyIDogcmVtYWluZGVyOwogfQogCi12b2lkIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29u
ZHNTaW5jZU1pZG5pZ2h0SW50ZXJuYWwoZG91YmxlIG1zSW5EYXkpCit2b2lkIERhdGVDb21wb25l
bnRzOjpzZXRNaWxsaXNlY29uZHNTaW5jZU1pZG5pZ2h0SW50ZXJuYWwoZG91YmxlIG1zSW5EYXkp
CiB7CiAgICAgQVNTRVJUKG1zSW5EYXkgPj0gMCAmJiBtc0luRGF5IDwgbXNQZXJEYXkpOwogICAg
IG1fbWlsbGlzZWNvbmQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZtb2QobXNJbkRheSwgbXNQZXJTZWNv
bmQpKTsKQEAgLTQ2Nyw3ICs0NjcsNyBAQCB2b2lkIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29u
ZHNTaW5jZU1pCiAgICAgbV9ob3VyID0gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSAvIG1pbnV0ZXNQ
ZXJIb3VyKTsKIH0KIAotYm9vbCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9j
aEZvckRhdGVJbnRlcm5hbChkb3VibGUgbXMpCitib29sIERhdGVDb21wb25lbnRzOjpzZXRNaWxs
aXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZUludGVybmFsKGRvdWJsZSBtcykKIHsKICAgICBtX3ll
YXIgPSBtc1RvWWVhcihtcyk7CiAgICAgaW50IHllYXJEYXkgPSBkYXlJblllYXIobXMsIG1feWVh
cik7CkBAIC00NzYsNyArNDc2LDcgQEAgYm9vbCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRz
U2luY2VFcAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElTT0RhdGVUaW1lOjpzZXRNaWxs
aXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZShkb3VibGUgbXMpCitib29sIERhdGVDb21wb25lbnRz
OjpzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZShkb3VibGUgbXMpCiB7CiAgICAgbV90
eXBlID0gSW52YWxpZDsKICAgICBpZiAoIWlzZmluaXRlKG1zKSkKQEAgLTQ4OSw3ICs0ODksNyBA
QCBib29sIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNTaW5jZUVwCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgSVNPRGF0ZVRpbWU6OnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JE
YXRlVGltZShkb3VibGUgbXMpCitib29sIERhdGVDb21wb25lbnRzOjpzZXRNaWxsaXNlY29uZHNT
aW5jZUVwb2NoRm9yRGF0ZVRpbWUoZG91YmxlIG1zKQogewogICAgIG1fdHlwZSA9IEludmFsaWQ7
CiAgICAgaWYgKCFpc2Zpbml0ZShtcykpCkBAIC01MDQsNyArNTA0LDcgQEAgYm9vbCBJU09EYXRl
VGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZVRpbWVMb2NhbChk
b3VibGUgbXMpCitib29sIERhdGVDb21wb25lbnRzOjpzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2No
Rm9yRGF0ZVRpbWVMb2NhbChkb3VibGUgbXMpCiB7CiAgICAgLy8gSW50ZXJuYWwgcmVwcmVzZW50
YXRpb24gb2YgRGF0ZVRpbWVMb2NhbCBpcyB0aGUgc2FtZSBhcyBEYXRlVGltZSBleGNlcHQgbV90
eXBlLgogICAgIGlmICghc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVUaW1lKG1zKSkK
QEAgLTUxMyw3ICs1MTMsNyBAQCBib29sIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNTaW5j
ZUVwCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSVNPRGF0ZVRpbWU6OnNldE1pbGxpc2Vj
b25kc1NpbmNlRXBvY2hGb3JNb250aChkb3VibGUgbXMpCitib29sIERhdGVDb21wb25lbnRzOjpz
ZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yTW9udGgoZG91YmxlIG1zKQogewogICAgIG1fdHlw
ZSA9IEludmFsaWQ7CiAgICAgaWYgKCFpc2Zpbml0ZShtcykpCkBAIC01MjcsNyArNTI3LDcgQEAg
Ym9vbCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcAogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNTaW5jZU1pZG5pZ2h0KGRv
dWJsZSBtcykKK2Jvb2wgRGF0ZUNvbXBvbmVudHM6OnNldE1pbGxpc2Vjb25kc1NpbmNlTWlkbmln
aHQoZG91YmxlIG1zKQogewogICAgIG1fdHlwZSA9IEludmFsaWQ7CiAgICAgaWYgKCFpc2Zpbml0
ZShtcykpCkBAIC01NDcsNyArNTQ3LDcgQEAgc3RhdGljIGludCBvZmZzZXRUbzFzdFdlZWtTdGFy
dChpbnQgeWVhcgogICAgIHJldHVybiBvZmZzZXRUbzFzdFdlZWtTdGFydDsKIH0KIAotYm9vbCBJ
U09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvcldlZWsoZG91YmxlIG1zKQor
Ym9vbCBEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvcldlZWsoZG91
YmxlIG1zKQogewogICAgIG1fdHlwZSA9IEludmFsaWQ7CiAgICAgaWYgKCFpc2Zpbml0ZShtcykp
CkBAIC01NzgsMTMgKzU3OCwxMyBAQCBib29sIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNT
aW5jZUVwCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWRvdWJsZSBJU09EYXRlVGltZTo6bWlsbGlz
ZWNvbmRzU2luY2VFcG9jaEZvclRpbWUoKSBjb25zdAorZG91YmxlIERhdGVDb21wb25lbnRzOjpt
aWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yVGltZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fdHlw
ZSA9PSBUaW1lIHx8IG1fdHlwZSA9PSBEYXRlVGltZSB8fCBtX3R5cGUgPT0gRGF0ZVRpbWVMb2Nh
bCk7CiAgICAgcmV0dXJuICgobV9ob3VyICogbWludXRlc1BlckhvdXIgKyBtX21pbnV0ZSkgKiBz
ZWNvbmRzUGVyTWludXRlICsgbV9zZWNvbmQpICogbXNQZXJTZWNvbmQgKyBtX21pbGxpc2Vjb25k
OwogfQogCi1kb3VibGUgSVNPRGF0ZVRpbWU6Om1pbGxpc2Vjb25kc1NpbmNlRXBvY2goKSBjb25z
dAorZG91YmxlIERhdGVDb21wb25lbnRzOjptaWxsaXNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRGF0ZToKQEAgLTYwNSw3ICs2MDUs
NyBAQCBkb3VibGUgSVNPRGF0ZVRpbWU6Om1pbGxpc2Vjb25kc1NpbmNlRXBvCiAgICAgcmV0dXJu
IGludmFsaWRNaWxsaXNlY29uZHMoKTsKIH0KIAotU3RyaW5nIElTT0RhdGVUaW1lOjp0b1N0cmlu
Z0ZvclRpbWUoU2Vjb25kRm9ybWF0IGZvcm1hdCkgY29uc3QKK1N0cmluZyBEYXRlQ29tcG9uZW50
czo6dG9TdHJpbmdGb3JUaW1lKFNlY29uZEZvcm1hdCBmb3JtYXQpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKG1fdHlwZSA9PSBEYXRlVGltZSB8fCBtX3R5cGUgPT0gRGF0ZVRpbWVMb2NhbCB8fCBtX3R5
cGUgPT0gVGltZSk7CiAgICAgU2Vjb25kRm9ybWF0IGVmZmVjdGl2ZUZvcm1hdCA9IGZvcm1hdDsK
QEAgLTYyNyw3ICs2MjcsNyBAQCBTdHJpbmcgSVNPRGF0ZVRpbWU6OnRvU3RyaW5nRm9yVGltZShT
ZWNvCiAgICAgfQogfQogCi1TdHJpbmcgSVNPRGF0ZVRpbWU6OnRvU3RyaW5nKFNlY29uZEZvcm1h
dCBmb3JtYXQpIGNvbnN0CitTdHJpbmcgRGF0ZUNvbXBvbmVudHM6OnRvU3RyaW5nKFNlY29uZEZv
cm1hdCBmb3JtYXQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIERh
dGU6CkBAIC02NDgsNyArNjQ4LDcgQEAgU3RyaW5nIElTT0RhdGVUaW1lOjp0b1N0cmluZyhTZWNv
bmRGb3JtYQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIFN0cmluZygiKEludmFsaWQgSVNPRGF0ZVRpbWUpIik7CisgICAgcmV0dXJu
IFN0cmluZygiKEludmFsaWQgRGF0ZUNvbXBvbmVudHMpIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9EYXRlQ29tcG9uZW50cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9EYXRlQ29tcG9uZW50cy5oCShyZXZpc2lvbiA1Mzk3NSkJKGZyb20g
V2ViQ29yZS9odG1sL0lTT0RhdGVUaW1lLmg6NTM5NzUpCisrKyBXZWJDb3JlL2h0bWwvRGF0ZUNv
bXBvbmVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSVNPRGF0
ZVRpbWVfaAorI2RlZmluZSBJU09EYXRlVGltZV9oCisKKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFN0cmluZzsKKworLy8gQW4gSVNPRGF0ZVRpbWUgaW5zdGFuY2UgcmVwcmVzZW50cyBvbmUg
b2YgdGhlIGZvbGxvd2luZyBkYXRlIGFuZCB0aW1lIGNvbWJpbmF0aW9uczoKKy8vICogTW9udGgg
dHlwZTogeWVhci1tb250aAorLy8gKiBEYXRlIHR5cGU6IHllYXItbW9udGgtZGF5CisvLyAqIFdl
ZWsgdHlwZTogeWVhci13ZWVrCisvLyAqIFRpbWUgdHlwZTogaG91ci1taW51dGUtc2Vjb25kLW1p
bGxpc2Vjb25kCisvLyAqIERhdGVUaW1lIG9yIERhdGVUaW1lTG9jYWwgdHlwZTogeWVhci1tb250
aC1kYXkgaG91ci1taW51dGUtc2Vjb25kLW1pbGxpc2Vjb25kCitjbGFzcyBJU09EYXRlVGltZSB7
CitwdWJsaWM6CisgICAgSVNPRGF0ZVRpbWUoKQorICAgICAgICA6IG1fbWlsbGlzZWNvbmQoMCkK
KyAgICAgICAgLCBtX3NlY29uZCgwKQorICAgICAgICAsIG1fbWludXRlKDApCisgICAgICAgICwg
bV9ob3VyKDApCisgICAgICAgICwgbV9tb250aERheSgwKQorICAgICAgICAsIG1fbW9udGgoMCkK
KyAgICAgICAgLCBtX3llYXIoMCkKKyAgICAgICAgLCBtX3dlZWsoMCkKKyAgICAgICAgLCBtX3R5
cGUoSW52YWxpZCkKKyAgICB7CisgICAgfQorCisgICAgaW50IG1pbGxpc2Vjb25kKCkgY29uc3Qg
eyByZXR1cm4gbV9taWxsaXNlY29uZDsgfQorICAgIGludCBzZWNvbmQoKSBjb25zdCB7IHJldHVy
biBtX3NlY29uZDsgfQorICAgIGludCBtaW51dGUoKSBjb25zdCB7IHJldHVybiBtX21pbnV0ZTsg
fQorICAgIGludCBob3VyKCkgY29uc3QgeyByZXR1cm4gbV9ob3VyOyB9CisgICAgaW50IG1vbnRo
RGF5KCkgY29uc3QgeyByZXR1cm4gbV9tb250aERheTsgfQorICAgIGludCBtb250aCgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9udGg7IH0KKyAgICBpbnQgZnVsbFllYXIoKSBjb25zdCB7IHJldHVybiBt
X3llYXI7IH0KKyAgICBpbnQgd2VlaygpIGNvbnN0IHsgcmV0dXJuIG1fd2VlazsgfQorCisgICAg
ZW51bSBTZWNvbmRGb3JtYXQgeworICAgICAgICBOb25lLCAvLyBTdXBwcmVzcyB0aGUgc2Vjb25k
IHBhcnQgYW5kIHRoZSBtaWxsaXNlY29uZCBwYXJ0IGlmIHRoZXkgYXJlIDAuCisgICAgICAgIFNl
Y29uZCwgLy8gQWx3YXlzIHNob3cgdGhlIHNlY29uZCBwYXJ0LCBhbmQgc3VwcHJlc3MgdGhlIG1p
bGxpc2Vjb25kIHBhcnQgaWYgaXQgaXMgMC4KKyAgICAgICAgTWlsbGlzZWNvbmQgLy8gQWx3YXlz
IHNob3cgdGhlIHNlY29uZCBwYXJ0IGFuZCB0aGUgbWlsbGlzZWNvbmQgcGFydC4KKyAgICB9Owor
CisgICAgLy8gUmV0dXJucyBhbiBJU08gODYwMSByZXByZXNlbnRhdGlvbiBmb3IgdGhpcyBpbnN0
YW5jZS4KKyAgICAvLyBUaGUgZm9ybWF0IGFyZ3VtZW50IGlzIHZhbGlkIGZvciBEYXRlVGltZSwg
RGF0ZVRpbWVMb2NhbCwgYW5kIFRpbWUgdHlwZXMuCisgICAgU3RyaW5nIHRvU3RyaW5nKFNlY29u
ZEZvcm1hdCBmb3JtYXQgPSBOb25lKSBjb25zdDsKKworICAgIC8vIHBhcnNlKigpIGFuZCBzZXRN
aWxsaXNlY29uZHNTaW5jZSooKSBmdW5jdGlvbnMgYXJlIGluaXRpYWxpemVycyBmb3IgYW4KKyAg
ICAvLyBJU09EYXRlVGltZSBpbnN0YW5jZS4gSWYgdGhlc2UgZnVuY3Rpb25zIHJldHVybiBmYWxz
ZSwgdGhlIGluc3RhbmNlCisgICAgLy8gbWlnaHQgYmUgaW52YWxpZC4KKworICAgIC8vIFRoZSBm
b2xsb3dpbmcgc2l4IGZ1bmN0aW9ucyBwYXJzZSB0aGUgaW5wdXQgJ3NyYycgd2hvc2UgbGVuZ3Ro
IGlzCisgICAgLy8gJ2xlbmd0aCcsIGFuZCB1cGRhdGVzIHNvbWUgZmllbGRzIG9mIHRoaXMgaW5z
dGFuY2UuIFRoZSBwYXJzaW5nIHN0YXJ0cyBhdAorICAgIC8vIHNyY1tzdGFydF0gYW5kIGV4YW1p
bmVzIGNoYXJhY3RlcnMgYmVmb3JlIHNyY1tsZW5ndGhdLgorICAgIC8vICdzcmMnIG11c3QgYmUg
bm9uLW51bGwuIFRoZSAnc3JjJyBzdHJpbmcgZG9lc24ndCBuZWVkIHRvIGJlCisgICAgLy8gbnVs
bC10ZXJtaW5hdGVkLgorICAgIC8vIFRoZSBmdW5jdGlvbnMgcmV0dXJuIHRydWUgaWYgdGhlIHBh
cnNpbmcgc3VjY2VlZHMsIGFuZCBzZXQgJ2VuZCcgdG8gdGhlCisgICAgLy8gbmV4dCBpbmRleCBh
ZnRlciB0aGUgbGFzdCBjb25zdW1lZC4gRXh0cmEgbGVhZGluZyBjaGFyYWN0ZXJzIGNhdXNlIHBh
cnNlCisgICAgLy8gZmFpbHVyZXMsIGFuZCB0aGUgdHJhaWxpbmcgZXh0cmEgY2hhcmFjdGVycyBk
b24ndCBjYXVzZSBwYXJzZSBmYWlsdXJlcy4KKworICAgIC8vIFNldHMgeWVhciBhbmQgbW9udGgu
CisgICAgYm9vbCBwYXJzZU1vbnRoKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOworICAgIC8vIFNldHMgeWVhciwgbW9udGgg
YW5kIG1vbnRoRGF5LgorICAgIGJvb2wgcGFyc2VEYXRlKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOworICAgIC8vIFNldHMg
eWVhciBhbmQgd2Vlay4KKyAgICBib29sIHBhcnNlV2Vlayhjb25zdCBVQ2hhciogc3JjLCB1bnNp
Z25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKTsKKyAgICAvLyBTZXRz
IGhvdXIsIG1pbnV0ZSwgc2Vjb25kIGFuZCBtaWxsaXNlY29uZC4KKyAgICBib29sIHBhcnNlVGlt
ZShjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCYgZW5kKTsKKyAgICAvLyBTZXRzIHllYXIsIG1vbnRoLCBtb250aERheSwgaG91ciwgbWlu
dXRlLCBzZWNvbmQgYW5kIG1pbGxpc2Vjb25kLgorICAgIGJvb2wgcGFyc2VEYXRlVGltZUxvY2Fs
KGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkJiBlbmQpOworICAgIC8vIFNldHMgeWVhciwgbW9udGgsIG1vbnRoRGF5LCBob3VyLCBtaW51
dGUsIHNlY29uZCBhbmQgbWlsbGlzZWNvbmQsIGFuZCBhZGp1c3RzIHRpbWV6b25lLgorICAgIGJv
b2wgcGFyc2VEYXRlVGltZShjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKTsKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgc2V0TWls
bGlzZWNvbmRzU2luY2VFcG9jaEZvciooKSBmdW5jdGlvbnMgdGFrZQorICAgIC8vIHRoZSBudW1i
ZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIDE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwIFVUQyBhcwor
ICAgIC8vIHRoZSBhcmd1bWVudCwgYW5kIHVwZGF0ZSBhbGwgZmllbGRzIGZvciB0aGUgY29ycmVz
cG9uZGluZworICAgIC8vIElTT0RhdGVUaW1lIHR5cGUuIFRoZSBmdW5jdGlvbnMgcmV0dXJuIHRy
dWUgaWYgaXQgc3VjY2VlZHMsIGFuZAorICAgIC8vIGZhbHNlIGlmIHRoZXkgZmFpbC4KKworICAg
IC8vIEZvciBEYXRlIHR5cGUuIFVwZGF0ZXMgbV95ZWFyLCBtX21vbnRoIGFuZCBtX21vbnRoRGF5
LgorICAgIGJvb2wgc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGUoZG91YmxlIG1zKTsK
KyAgICAvLyBGb3IgRGF0ZVRpbWUgdHlwZS4gVXBkYXRlcyBtX3llYXIsIG1fbW9udGgsIG1fbW9u
dGhEYXksIG1faG91ciwgbV9taW51dGUsIG1fc2Vjb25kIGFuZCBtX21pbGxpc2Vjb25kLgorICAg
IGJvb2wgc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVUaW1lKGRvdWJsZSBtcyk7Cisg
ICAgLy8gRm9yIERhdGVUaW1lTG9jYWwgdHlwZS4gVXBkYXRlcyBtX3llYXIsIG1fbW9udGgsIG1f
bW9udGhEYXksIG1faG91ciwgbV9taW51dGUsIG1fc2Vjb25kIGFuZCBtX21pbGxpc2Vjb25kLgor
ICAgIGJvb2wgc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVUaW1lTG9jYWwoZG91Ymxl
IG1zKTsKKyAgICAvLyBGb3IgTW9udGggdHlwZS4gVXBkYXRlcyBtX3llYXIgYW5kIG1fbW9udGgu
CisgICAgYm9vbCBzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yTW9udGgoZG91YmxlIG1zKTsK
KyAgICAvLyBGb3IgV2VlayB0eXBlLiBVcGRhdGVzIG1feWVhciBhbmQgbV93ZWVrLgorICAgIGJv
b2wgc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvcldlZWsoZG91YmxlIG1zKTsKKworICAgIC8v
IEZvciBUaW1lIHR5cGUuIFVwZGF0ZXMgbV9ob3VyLCBtX21pbnV0ZSwgbV9zZWNvbmQgYW5kIG1f
bWlsbGlzZWNvbmQuCisgICAgYm9vbCBzZXRNaWxsaXNlY29uZHNTaW5jZU1pZG5pZ2h0KGRvdWJs
ZSBtcyk7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20g
MTk3MC0wMS0wMSAwMDowMDowMCBVVEMuCisgICAgLy8gRm9yIGFuIElTT0RhdGVUaW1lIGluaXRp
YWxpemVkIHdpdGggcGFyc2VEYXRlVGltZUxvY2FsKCksCisgICAgLy8gbWlsbGlzZWNvbmRzU2lu
Y2VFcG9jaCgpIHJldHVybnMgYSB2YWx1ZSBmb3IgVVRDIHRpbWV6b25lLgorICAgIGRvdWJsZSBt
aWxsaXNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3Q7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUg
aW52YWxpZE1pbGxpc2Vjb25kcygpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBSZXR1cm5zIHRoZSBtYXhpbXVt
IHdlZWsgbnVtYmVyIGluIHRoaXMgSVNPRGF0ZVRpbWUncyB5ZWFyLgorICAgIC8vIFRoZSByZXN1
bHQgaXMgZWl0aGVyIG9mIDUyIGFuZCA1My4KKyAgICBpbnQgbWF4V2Vla051bWJlckluWWVhcigp
IGNvbnN0OworICAgIGJvb2wgcGFyc2VZZWFyKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOworICAgIGJvb2wgYWRkRGF5KGlu
dCk7CisgICAgYm9vbCBhZGRNaW51dGUoaW50KTsKKyAgICBib29sIHBhcnNlVGltZVpvbmUoY29u
c3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQm
IGVuZCk7CisgICAgLy8gSGVscGVyIGZvciBtaWxsaXNlY29uZHNTaW5jZUVwb2NoKCkuCisgICAg
ZG91YmxlIG1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JUaW1lKCkgY29uc3Q7CisgICAgLy8gSGVs
cGVycyBmb3Igc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvciooKS4KKyAgICBib29sIHNldE1p
bGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlSW50ZXJuYWwoZG91YmxlIG1zKTsKKyAgICB2b2lk
IHNldE1pbGxpc2Vjb25kc1NpbmNlTWlkbmlnaHRJbnRlcm5hbChkb3VibGUgbXMpOworICAgIC8v
IEhlbHBlciBmb3IgdG9TdHJpbmcoKS4KKyAgICBTdHJpbmcgdG9TdHJpbmdGb3JUaW1lKFNlY29u
ZEZvcm1hdCkgY29uc3Q7CisKKyAgICAvLyBtX3dlZWtEYXkgdmFsdWVzCisgICAgZW51bSB7Cisg
ICAgICAgIFN1bmRheSA9IDAsCisgICAgICAgIE1vbmRheSwKKyAgICAgICAgVHVlc2RheSwKKyAg
ICAgICAgV2VkbmVzZGF5LAorICAgICAgICBUaHVyc2RheSwKKyAgICAgICAgRnJpZGF5LAorICAg
ICAgICBTYXR1cmRheSwKKyAgICB9OworCisgICAgaW50IG1fbWlsbGlzZWNvbmQ7ICAvLyAwIC0g
OTk5CisgICAgaW50IG1fc2Vjb25kOworICAgIGludCBtX21pbnV0ZTsKKyAgICBpbnQgbV9ob3Vy
OworICAgIGludCBtX21vbnRoRGF5OyAgLy8gMSAtIDMxCisgICAgaW50IG1fbW9udGg7ICAvLyAw
OkphbnVhcnkgLSAxMTpEZWNlbWJlcgorICAgIGludCBtX3llYXI7ICAvLyAgMTU4MiAtCisgICAg
aW50IG1fd2VlazsgIC8vIDEgLSA1MworCisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgSW52YWxp
ZCwKKyAgICAgICAgRGF0ZSwKKyAgICAgICAgRGF0ZVRpbWUsCisgICAgICAgIERhdGVUaW1lTG9j
YWwsCisgICAgICAgIE1vbnRoLAorICAgICAgICBUaW1lLAorICAgICAgICBXZWVrLAorICAgIH07
CisgICAgVHlwZSBtX3R5cGU7Cit9OworCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIElTT0RhdGVUaW1lX2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9EYXRlQ29tcG9uZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9EYXRlQ29tcG9uZW50cy5oCShyZXZpc2lvbiA1
Mzk3NSkKKysrIFdlYkNvcmUvaHRtbC9EYXRlQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw4ICsyOCw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSVNPRGF0ZVRp
bWVfaAotI2RlZmluZSBJU09EYXRlVGltZV9oCisjaWZuZGVmIERhdGVDb21wb25lbnRzX2gKKyNk
ZWZpbmUgRGF0ZUNvbXBvbmVudHNfaAogCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0
Zi91bmljb2RlL1VuaWNvZGUuaD4KQEAgLTM4LDE1ICszOCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFN0cmluZzsKIAotLy8gQW4gSVNPRGF0ZVRpbWUgaW5zdGFuY2UgcmVwcmVz
ZW50cyBvbmUgb2YgdGhlIGZvbGxvd2luZyBkYXRlIGFuZCB0aW1lIGNvbWJpbmF0aW9uczoKKy8v
IEEgRGF0ZUNvbXBvbmVudHMgaW5zdGFuY2UgcmVwcmVzZW50cyBvbmUgb2YgdGhlIGZvbGxvd2lu
ZyBkYXRlIGFuZCB0aW1lIGNvbWJpbmF0aW9uczoKIC8vICogTW9udGggdHlwZTogeWVhci1tb250
aAogLy8gKiBEYXRlIHR5cGU6IHllYXItbW9udGgtZGF5CiAvLyAqIFdlZWsgdHlwZTogeWVhci13
ZWVrCiAvLyAqIFRpbWUgdHlwZTogaG91ci1taW51dGUtc2Vjb25kLW1pbGxpc2Vjb25kCiAvLyAq
IERhdGVUaW1lIG9yIERhdGVUaW1lTG9jYWwgdHlwZTogeWVhci1tb250aC1kYXkgaG91ci1taW51
dGUtc2Vjb25kLW1pbGxpc2Vjb25kCi1jbGFzcyBJU09EYXRlVGltZSB7CitjbGFzcyBEYXRlQ29t
cG9uZW50cyB7CiBwdWJsaWM6Ci0gICAgSVNPRGF0ZVRpbWUoKQorICAgIERhdGVDb21wb25lbnRz
KCkKICAgICAgICAgOiBtX21pbGxpc2Vjb25kKDApCiAgICAgICAgICwgbV9zZWNvbmQoMCkKICAg
ICAgICAgLCBtX21pbnV0ZSgwKQpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5n
IHRvU3RyaW5nKFNlY29uZEZvcm1hdCBmb3JtYXQgPSBOb25lKSBjb25zdDsKIAogICAgIC8vIHBh
cnNlKigpIGFuZCBzZXRNaWxsaXNlY29uZHNTaW5jZSooKSBmdW5jdGlvbnMgYXJlIGluaXRpYWxp
emVycyBmb3IgYW4KLSAgICAvLyBJU09EYXRlVGltZSBpbnN0YW5jZS4gSWYgdGhlc2UgZnVuY3Rp
b25zIHJldHVybiBmYWxzZSwgdGhlIGluc3RhbmNlCisgICAgLy8gRGF0ZUNvbXBvbmVudHMgaW5z
dGFuY2UuIElmIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gZmFsc2UsIHRoZSBpbnN0YW5jZQogICAg
IC8vIG1pZ2h0IGJlIGludmFsaWQuCiAKICAgICAvLyBUaGUgZm9sbG93aW5nIHNpeCBmdW5jdGlv
bnMgcGFyc2UgdGhlIGlucHV0ICdzcmMnIHdob3NlIGxlbmd0aCBpcwpAQCAtMTA3LDcgKzEwNyw3
IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgZm9sbG93aW5nIHNldE1pbGxpc2Vjb25kc1NpbmNlRXBv
Y2hGb3IqKCkgZnVuY3Rpb25zIHRha2UKICAgICAvLyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25k
cyBzaW5jZSAxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMCBVVEMgYXMKICAgICAvLyB0aGUgYXJndW1l
bnQsIGFuZCB1cGRhdGUgYWxsIGZpZWxkcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAvLyBJ
U09EYXRlVGltZSB0eXBlLiBUaGUgZnVuY3Rpb25zIHJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRz
LCBhbmQKKyAgICAvLyBEYXRlQ29tcG9uZW50cyB0eXBlLiBUaGUgZnVuY3Rpb25zIHJldHVybiB0
cnVlIGlmIGl0IHN1Y2NlZWRzLCBhbmQKICAgICAvLyBmYWxzZSBpZiB0aGV5IGZhaWwuCiAKICAg
ICAvLyBGb3IgRGF0ZSB0eXBlLiBVcGRhdGVzIG1feWVhciwgbV9tb250aCBhbmQgbV9tb250aERh
eS4KQEAgLTEyNSwxMyArMTI1LDEzIEBAIHB1YmxpYzoKICAgICBib29sIHNldE1pbGxpc2Vjb25k
c1NpbmNlTWlkbmlnaHQoZG91YmxlIG1zKTsKIAogICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBv
ZiBtaWxsaXNlY29uZHMgZnJvbSAxOTcwLTAxLTAxIDAwOjAwOjAwIFVUQy4KLSAgICAvLyBGb3Ig
YW4gSVNPRGF0ZVRpbWUgaW5pdGlhbGl6ZWQgd2l0aCBwYXJzZURhdGVUaW1lTG9jYWwoKSwKKyAg
ICAvLyBGb3IgYSBEYXRlQ29tcG9uZW50cyBpbml0aWFsaXplZCB3aXRoIHBhcnNlRGF0ZVRpbWVM
b2NhbCgpLAogICAgIC8vIG1pbGxpc2Vjb25kc1NpbmNlRXBvY2goKSByZXR1cm5zIGEgdmFsdWUg
Zm9yIFVUQyB0aW1lem9uZS4KICAgICBkb3VibGUgbWlsbGlzZWNvbmRzU2luY2VFcG9jaCgpIGNv
bnN0OwogICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGludmFsaWRNaWxsaXNlY29uZHMoKSB7IHJl
dHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOyB9CiAKIHByaXZh
dGU6Ci0gICAgLy8gUmV0dXJucyB0aGUgbWF4aW11bSB3ZWVrIG51bWJlciBpbiB0aGlzIElTT0Rh
dGVUaW1lJ3MgeWVhci4KKyAgICAvLyBSZXR1cm5zIHRoZSBtYXhpbXVtIHdlZWsgbnVtYmVyIGlu
IHRoaXMgRGF0ZUNvbXBvbmVudHMncyB5ZWFyLgogICAgIC8vIFRoZSByZXN1bHQgaXMgZWl0aGVy
IG9mIDUyIGFuZCA1My4KICAgICBpbnQgbWF4V2Vla051bWJlckluWWVhcigpIGNvbnN0OwogICAg
IGJvb2wgcGFyc2VZZWFyKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOwpAQCAtMTgxLDQgKzE4MSw0IEBAIHByaXZhdGU6CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIElTT0RhdGVUaW1lX2gKKyNlbmRp
ZiAvLyBEYXRlQ29tcG9uZW50c19oCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA1Mzk3NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIK
ICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50Lmgi
CisjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC00NSw3ICs0Niw2IEBACiAj
aW5jbHVkZSAiSFRNTEltYWdlTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJJU09EYXRlVGltZS5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50Lmgi
CiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgpAQCAtMTQ5MiwxMCArMTQ5MiwxMCBAQCBk
b3VibGUgSFRNTElucHV0RWxlbWVudDo6cGFyc2VUb0RvdWJsZShjCiAgICAgY2FzZSBNT05USDoK
ICAgICBjYXNlIFRJTUU6CiAgICAgY2FzZSBXRUVLOiB7Ci0gICAgICAgIElTT0RhdGVUaW1lIGRh
dGVUaW1lOwotICAgICAgICBpZiAoIWZvcm1TdHJpbmdUb0lTT0RhdGVUaW1lKGlucHV0VHlwZSgp
LCBzcmMsICZkYXRlVGltZSkpCisgICAgICAgIERhdGVDb21wb25lbnRzIGRhdGU7CisgICAgICAg
IGlmICghZm9ybVN0cmluZ1RvRGF0ZUNvbXBvbmVudHMoaW5wdXRUeXBlKCksIHNyYywgJmRhdGUp
KQogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICAgICAgZG91YmxlIG1zZWMg
PSBkYXRlVGltZS5taWxsaXNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgICAgIGRvdWJsZSBtc2Vj
ID0gZGF0ZS5taWxsaXNlY29uZHNTaW5jZUVwb2NoKCk7CiAgICAgICAgIEFTU0VSVChpc2Zpbml0
ZShtc2VjKSk7CiAgICAgICAgIHJldHVybiBtc2VjOwogICAgIH0KQEAgLTE1MzgsNyArMTUzOCw3
IEBAIGRvdWJsZSBIVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZUFzRGF0ZSgpIGMKICAgICBjYXNlIE1P
TlRIOgogICAgIGNhc2UgVElNRToKICAgICBjYXNlIFdFRUs6Ci0gICAgICAgIHJldHVybiBwYXJz
ZVRvRG91YmxlKHZhbHVlKCksIElTT0RhdGVUaW1lOjppbnZhbGlkTWlsbGlzZWNvbmRzKCkpOwor
ICAgICAgICByZXR1cm4gcGFyc2VUb0RvdWJsZSh2YWx1ZSgpLCBEYXRlQ29tcG9uZW50czo6aW52
YWxpZE1pbGxpc2Vjb25kcygpKTsKIAogICAgIGNhc2UgQlVUVE9OOgogICAgIGNhc2UgQ0hFQ0tC
T1g6CkBAIC0xNTU5LDMxICsxNTU5LDMxIEBAIGRvdWJsZSBIVE1MSW5wdXRFbGVtZW50Ojp2YWx1
ZUFzRGF0ZSgpIGMKICAgICBjYXNlIFRFTEVQSE9ORToKICAgICBjYXNlIFRFWFQ6CiAgICAgY2Fz
ZSBVUkw6Ci0gICAgICAgIHJldHVybiBJU09EYXRlVGltZTo6aW52YWxpZE1pbGxpc2Vjb25kcygp
OworICAgICAgICByZXR1cm4gRGF0ZUNvbXBvbmVudHM6OmludmFsaWRNaWxsaXNlY29uZHMoKTsK
ICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIElTT0RhdGVUaW1l
OjppbnZhbGlkTWlsbGlzZWNvbmRzKCk7CisgICAgcmV0dXJuIERhdGVDb21wb25lbnRzOjppbnZh
bGlkTWlsbGlzZWNvbmRzKCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVB
c0RhdGUoZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJU09EYXRlVGlt
ZSBkYXRlVGltZTsKKyAgICBEYXRlQ29tcG9uZW50cyBkYXRlOwogICAgIGJvb2wgc3VjY2VzczsK
ICAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7CiAgICAgY2FzZSBEQVRFOgotICAgICAgICBzdWNj
ZXNzID0gZGF0ZVRpbWUuc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGUodmFsdWUpOwor
ICAgICAgICBzdWNjZXNzID0gZGF0ZS5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZSh2
YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREFURVRJTUU6Ci0gICAgICAgIHN1Y2Nl
c3MgPSBkYXRlVGltZS5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZVRpbWUodmFsdWUp
OworICAgICAgICBzdWNjZXNzID0gZGF0ZS5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0
ZVRpbWUodmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1PTlRIOgotICAgICAgICBz
dWNjZXNzID0gZGF0ZVRpbWUuc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvck1vbnRoKHZhbHVl
KTsKKyAgICAgICAgc3VjY2VzcyA9IGRhdGUuc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvck1v
bnRoKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUSU1FOgotICAgICAgICBzdWNj
ZXNzID0gZGF0ZVRpbWUuc2V0TWlsbGlzZWNvbmRzU2luY2VNaWRuaWdodCh2YWx1ZSk7CisgICAg
ICAgIHN1Y2Nlc3MgPSBkYXRlLnNldE1pbGxpc2Vjb25kc1NpbmNlTWlkbmlnaHQodmFsdWUpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFdFRUs6Ci0gICAgICAgIHN1Y2Nlc3MgPSBkYXRlVGlt
ZS5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yV2Vlayh2YWx1ZSk7CisgICAgICAgIHN1Y2Nl
c3MgPSBkYXRlLnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JXZWVrKHZhbHVlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBCVVRUT046CiAgICAgY2FzZSBDSEVDS0JPWDoKQEAgLTE2MTcs
NyArMTYxNyw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVBc0RhdGUoZG8KICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNwZWNpZnkgU2Vjb25kRm9ybWF0LgogICAgIC8vIGUuZy4g
SWYgdGhlIHN0ZXAgdmFsdWUgaXMgNjAsIHVzZSBTZWNvbmRGb3JtYXQ6Ok5vbmUuCiAgICAgLy8g
ICAgICBJZiB0aGUgc3RlcCB2YWx1ZSBpcyAxLCB1c2UgU2Vjb25kRm9ybWF0OjpTZWNvbmQuCi0g
ICAgc2V0VmFsdWUoZGF0ZVRpbWUudG9TdHJpbmcoKSk7CisgICAgc2V0VmFsdWUoZGF0ZS50b1N0
cmluZygpKTsKIH0KIAogZG91YmxlIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlQXNOdW1iZXIoKSBj
b25zdApAQCAtMTY3MSwxNSArMTY3MSwxNSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZh
bHVlQXNOdW1iZXIoCiAgICAgICAgIHNldFZhbHVlQXNEYXRlKG5ld1ZhbHVlLCBlYyk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIERBVEVUSU1FTE9DQUw6IHsKLSAgICAgICAgSVNPRGF0ZVRp
bWUgZGF0ZVRpbWU7Ci0gICAgICAgIGlmICghZGF0ZVRpbWUuc2V0TWlsbGlzZWNvbmRzU2luY2VF
cG9jaEZvckRhdGVUaW1lTG9jYWwobmV3VmFsdWUpKSB7CisgICAgICAgIERhdGVDb21wb25lbnRz
IGRhdGU7CisgICAgICAgIGlmICghZGF0ZS5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0
ZVRpbWVMb2NhbChuZXdWYWx1ZSkpIHsKICAgICAgICAgICAgIHNldFZhbHVlKFN0cmluZygpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHNwZWNpZnkgU2Vjb25kRm9ybWF0LgogICAgICAgICAvLyBlLmcuIElmIHRoZSBzdGVwIHZh
bHVlIGlzIDYwLCB1c2UgU2Vjb25kRm9ybWF0OjpOb25lLgogICAgICAgICAvLyAgICAgIElmIHRo
ZSBzdGVwIHZhbHVlIGlzIDEsIHVzZSBTZWNvbmRGb3JtYXQ6OlNlY29uZC4KLSAgICAgICAgc2V0
VmFsdWUoZGF0ZVRpbWUudG9TdHJpbmcoKSk7CisgICAgICAgIHNldFZhbHVlKGRhdGUudG9TdHJp
bmcoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBOVU1CRVI6CkBAIC0yNDQ4
LDExICsyNDQ4LDExIEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6Zm9ybVN0cmluZ1RvRG91YmwK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojpmb3JtU3RyaW5n
VG9JU09EYXRlVGltZShJbnB1dFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBmb3JtU3RyaW5nLCBJ
U09EYXRlVGltZSogb3V0KQorYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojpmb3JtU3RyaW5nVG9EYXRl
Q29tcG9uZW50cyhJbnB1dFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBmb3JtU3RyaW5nLCBEYXRl
Q29tcG9uZW50cyogb3V0KQogewogICAgIGlmIChmb3JtU3RyaW5nLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIElTT0RhdGVUaW1lIGlnbm9yZWRSZXN1bHQ7CisgICAgRGF0
ZUNvbXBvbmVudHMgaWdub3JlZFJlc3VsdDsKICAgICBpZiAoIW91dCkKICAgICAgICAgb3V0ID0g
Jmlnbm9yZWRSZXN1bHQ7CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBmb3JtU3RyaW5n
LmNoYXJhY3RlcnMoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gNTM5
NzUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCwxMSArMzAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBEYXRlQ29t
cG9uZW50czsKIGNsYXNzIEZpbGVMaXN0OwogY2xhc3MgSFRNTERhdGFMaXN0RWxlbWVudDsKIGNs
YXNzIEhUTUxJbWFnZUxvYWRlcjsKIGNsYXNzIEhUTUxPcHRpb25FbGVtZW50OwotY2xhc3MgSVNP
RGF0ZVRpbWU7CiBjbGFzcyBLVVJMOwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIApAQCAtMjY3
LDkgKzI2Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBIVE1MNSdzICJhbGdvcml0aG0gdG8gY29udmVy
dCBhIG51bWJlciB0byBhIHN0cmluZyIgZm9yIE5VTUJFUi9SQU5HRSB0eXBlcy4KICAgICBzdGF0
aWMgU3RyaW5nIGZvcm1TdHJpbmdGcm9tRG91YmxlKGRvdWJsZSk7CiAgICAgLy8gUGFyc2VzIHRo
ZSBzcGVjaWZpZWQgc3RyaW5nIGFzIHRoZSBJbnB1dFR5cGUsIGFuZCByZXR1cm5zIHRydWUgaWYg
aXQgaXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KLSAgICAvLyBBbiBpbnN0YW5jZSBwb2ludGVkIGJ5
IHRoZSBJU09EYXRlVGltZSogcGFyYW1ldGVyIHdpbGwgaGF2ZSBwYXJzZWQgdmFsdWVzIGFuZCBi
ZQotICAgIC8vIG1vZGlmaWVkIGV2ZW4gaWYgdGhlIHBhcnNpbmcgZmFpbHMuICBUaGUgSVNPRGF0
ZVRpbWUqIHBhcmFtZXRlciBtYXkgYmUgMC4KLSAgICBzdGF0aWMgYm9vbCBmb3JtU3RyaW5nVG9J
U09EYXRlVGltZShJbnB1dFR5cGUsIGNvbnN0IFN0cmluZyYsIElTT0RhdGVUaW1lKik7CisgICAg
Ly8gQW4gaW5zdGFuY2UgcG9pbnRlZCBieSB0aGUgRGF0ZUNvbXBvbmVudHMqIHBhcmFtZXRlciB3
aWxsIGhhdmUgcGFyc2VkIHZhbHVlcyBhbmQgYmUKKyAgICAvLyBtb2RpZmllZCBldmVuIGlmIHRo
ZSBwYXJzaW5nIGZhaWxzLiAgVGhlIERhdGVDb21wb25lbnRzKiBwYXJhbWV0ZXIgbWF5IGJlIDAu
CisgICAgc3RhdGljIGJvb2wgZm9ybVN0cmluZ1RvRGF0ZUNvbXBvbmVudHMoSW5wdXRUeXBlLCBj
b25zdCBTdHJpbmcmLCBEYXRlQ29tcG9uZW50cyopOwogICAgIAogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCB3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwpJbmRleDogV2ViQ29yZS9o
dG1sL0lTT0RhdGVUaW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSVNPRGF0ZVRp
bWUuY3BwCShyZXZpc2lvbiA1Mzk3NSkKKysrIFdlYkNvcmUvaHRtbC9JU09EYXRlVGltZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNjU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSVNPRGF0ZVRpbWUuaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5j
bHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3
dGYvRGF0ZU1hdGguaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLS8vIFRoZSBvbGRlc3QgZGF5IG9mIEdyZWdvcmlhbiBDYWxlbmRhciBpcyAx
NTgyLTEwLTE1LiBXZSBkb24ndCBzdXBwb3J0IGRhdGVzIG9sZGVyIHRoYW4gaXQuCi1zdGF0aWMg
Y29uc3QgaW50IGdyZWdvcmlhblN0YXJ0WWVhciA9IDE1ODI7Ci1zdGF0aWMgY29uc3QgaW50IGdy
ZWdvcmlhblN0YXJ0TW9udGggPSA5OyAvLyBUaGlzIGlzIE9jdG9iZXIsIHNpbmNlIG1vbnRocyBh
cmUgMCBiYXNlZC4KLXN0YXRpYyBjb25zdCBpbnQgZ3JlZ29yaWFuU3RhcnREYXkgPSAxNTsKLQot
c3RhdGljIGNvbnN0IGludCBkYXlzSW5Nb250aFsxMl0gPSB7MzEsIDI4LCAzMSwgMzAsIDMxLCAz
MCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMX07Ci0KLXN0YXRpYyBib29sIGlzTGVhcFllYXIoaW50
IHllYXIpCi17Ci0gICAgaWYgKHllYXIgJSA0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKCEoeWVhciAlIDQwMCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghKHllYXIg
JSAxMDApKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
IGBtb250aCcgaXMgMC1iYXNlZC4KLXN0YXRpYyBpbnQgbWF4RGF5T2ZNb250aChpbnQgeWVhciwg
aW50IG1vbnRoKQotewotICAgIGlmIChtb250aCAhPSAxKSAvLyBGZWJydWFyeT8KLSAgICAgICAg
cmV0dXJuIGRheXNJbk1vbnRoW21vbnRoXTsKLSAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/
IDI5IDogMjg7Ci19Ci0KLS8vIGBtb250aCcgaXMgMC1iYXNlZC4KLXN0YXRpYyBpbnQgZGF5T2ZX
ZWVrKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXkpCi17Ci0gICAgaW50IHNoaWZ0ZWRNb250
aCA9IG1vbnRoICsgMjsKLSAgICAvLyAyOkphbnVhcnksIDM6RmVidXJ1YXJ5LCA0Ok1hcmNoLCAu
Li4KLQotICAgIC8vIFplbGxlcidzIGNvbmdydWVuY2UKLSAgICBpZiAoc2hpZnRlZE1vbnRoIDw9
IDMpIHsKLSAgICAgICAgc2hpZnRlZE1vbnRoICs9IDEyOwotICAgICAgICB5ZWFyLS07Ci0gICAg
fQotICAgIC8vIDQ6TWFyY2gsIC4uLiwgMTQ6SmFudWFyeSwgMTU6RmVicnVhcnkKLQotICAgIGlu
dCBoaWdoWWVhciA9IHllYXIgLyAxMDA7Ci0gICAgaW50IGxvd1llYXIgPSB5ZWFyICUgMTAwOwot
ICAgIC8vIFdlIGFkZCA2IHRvIG1ha2UgdGhlIHJlc3VsdCBTdW5kYXktb3JpZ2luLgotICAgIGlu
dCByZXN1bHQgPSAoZGF5ICsgMTMgKiBzaGlmdGVkTW9udGggLyA1ICsgbG93WWVhciArIGxvd1ll
YXIgLyA0ICsgaGlnaFllYXIgLyA0ICsgNSAqIGhpZ2hZZWFyICsgNikgJSA3OwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLWludCBJU09EYXRlVGltZTo6bWF4V2Vla051bWJlckluWWVhcigpIGNv
bnN0Ci17Ci0gICAgaW50IGRheSA9IGRheU9mV2VlayhtX3llYXIsIDAsIDEpOyAvLyBKYW51YXJ5
IDEuCi0gICAgcmV0dXJuIGRheSA9PSBUaHVyc2RheSB8fCAoZGF5ID09IFdlZG5lc2RheSAmJiBp
c0xlYXBZZWFyKG1feWVhcikpID8gNTMgOiA1MjsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGNvdW50
RGlnaXRzKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQp
Ci17Ci0gICAgdW5zaWduZWQgaW5kZXggPSBzdGFydDsKLSAgICBmb3IgKDsgaW5kZXggPCBsZW5n
dGg7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoc3JjW2luZGV4XSkpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4IC0gc3RhcnQ7Ci19Ci0K
LS8vIFZlcnkgc3RyaWN0IGludGVnZXIgcGFyc2VyLiBEbyBub3QgYWxsb3cgbGVhZGluZyBvciB0
cmFpbGluZyB3aGl0ZXNwYWNlIHVubGlrZSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoKS4KLXN0YXRp
YyBib29sIHRvSW50KGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQg
cGFyc2VTdGFydCwgdW5zaWduZWQgcGFyc2VMZW5ndGgsIGludCYgb3V0KQotewotICAgIGlmIChw
YXJzZVN0YXJ0ICsgcGFyc2VMZW5ndGggPiBsZW5ndGggfHwgcGFyc2VMZW5ndGggPD0gMCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGludCB2YWx1ZSA9IDA7Ci0gICAgY29uc3QgVUNoYXIq
IGN1cnJlbnQgPSBzcmMgKyBwYXJzZVN0YXJ0OwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXJy
ZW50ICsgcGFyc2VMZW5ndGg7Ci0KLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBuZWdh
dGl2ZSBudW1iZXJzIGZvciBJU08gODYwMS4KLSAgICBmb3IgKDsgY3VycmVudCA8IGVuZDsgKytj
dXJyZW50KSB7Ci0gICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpjdXJyZW50KSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaW50IGRpZ2l0ID0gKmN1cnJlbnQgLSAnMCc7Ci0g
ICAgICAgIGlmICh2YWx1ZSA+IChJTlRfTUFYIC0gZGlnaXQpIC8gMTApIC8vIENoZWNrIGZvciBv
dmVyZmxvdy4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmFsdWUgPSB2YWx1
ZSAqIDEwICsgZGlnaXQ7Ci0gICAgfQotICAgIG91dCA9IHZhbHVlOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIElTT0RhdGVUaW1lOjpwYXJzZVllYXIoY29uc3QgVUNoYXIqIHNyYywgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKLXsKLSAgICB1bnNp
Z25lZCBkaWdpdHNMZW5ndGggPSBjb3VudERpZ2l0cyhzcmMsIGxlbmd0aCwgc3RhcnQpOwotICAg
IC8vIE5lZWRzIGF0IGxlYXN0IDQgZGlnaXRzIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCi0g
ICAgaWYgKGRpZ2l0c0xlbmd0aCA8IDQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQg
eWVhcjsKLSAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBzdGFydCwgZGlnaXRzTGVuZ3RoLCB5
ZWFyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIE5vIHN1cHBvcnQgZm9yIHllYXJz
IGJlZm9yZSBHcmVnb3JpYW4gY2FsZW5kYXIuCi0gICAgaWYgKHllYXIgPCBncmVnb3JpYW5TdGFy
dFllYXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3llYXIgPSB5ZWFyOwotICAgIGVu
ZCA9IHN0YXJ0ICsgZGlnaXRzTGVuZ3RoOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMg
Ym9vbCBiZWZvcmVHcmVnb3JpYW5TdGFydERhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IG1v
bnRoRGF5KQotewotICAgIHJldHVybiB5ZWFyIDwgZ3JlZ29yaWFuU3RhcnRZZWFyCi0gICAgICAg
IHx8IHllYXIgPT0gZ3JlZ29yaWFuU3RhcnRZZWFyICYmIG1vbnRoIDwgZ3JlZ29yaWFuU3RhcnRN
b250aAotICAgICAgICB8fCB5ZWFyID09IGdyZWdvcmlhblN0YXJ0WWVhciAmJiBtb250aCA9PSBn
cmVnb3JpYW5TdGFydE1vbnRoICYmIG1vbnRoRGF5IDwgZ3JlZ29yaWFuU3RhcnREYXk7Ci19Ci0K
LWJvb2wgSVNPRGF0ZVRpbWU6OmFkZERheShpbnQgZGF5RGlmZikKLXsKLSAgICBBU1NFUlQobV9t
b250aERheSk7Ci0KLSAgICBpbnQgZGF5ID0gbV9tb250aERheSArIGRheURpZmY7Ci0gICAgaWYg
KGRheSA+IG1heERheU9mTW9udGgobV95ZWFyLCBtX21vbnRoKSkgewotICAgICAgICBkYXkgPSBt
X21vbnRoRGF5OwotICAgICAgICBpbnQgeWVhciA9IG1feWVhcjsKLSAgICAgICAgaW50IG1vbnRo
ID0gbV9tb250aDsKLSAgICAgICAgaW50IG1heERheSA9IG1heERheU9mTW9udGgoeWVhciwgbW9u
dGgpOwotICAgICAgICBmb3IgKDsgZGF5RGlmZiA+IDA7IC0tZGF5RGlmZikgewotICAgICAgICAg
ICAgKytkYXk7Ci0gICAgICAgICAgICBpZiAoZGF5ID4gbWF4RGF5KSB7Ci0gICAgICAgICAgICAg
ICAgZGF5ID0gMTsKLSAgICAgICAgICAgICAgICArK21vbnRoOwotICAgICAgICAgICAgICAgIGlm
IChtb250aCA+PSAxMikgeyAvLyBtb250aCBpcyAwLW9yaWdpbi4KLSAgICAgICAgICAgICAgICAg
ICAgbW9udGggPSAwOwotICAgICAgICAgICAgICAgICAgICArK3llYXI7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh5ZWFyIDwgMCkgLy8gQ2hlY2sgZm9yIG92ZXJmbG93LgotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBtYXhEYXkgPSBtYXhEYXlPZk1vbnRoKHllYXIsIG1vbnRoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBtX3llYXIgPSB5ZWFyOwotICAgICAgICBtX21vbnRoID0gbW9u
dGg7Ci0gICAgfSBlbHNlIGlmIChkYXkgPCAxKSB7Ci0gICAgICAgIGludCBtb250aCA9IG1fbW9u
dGg7Ci0gICAgICAgIGludCB5ZWFyID0gbV95ZWFyOwotICAgICAgICBkYXkgPSBtX21vbnRoRGF5
OwotICAgICAgICBmb3IgKDsgZGF5RGlmZiA8IDA7ICsrZGF5RGlmZikgewotICAgICAgICAgICAg
LS1kYXk7Ci0gICAgICAgICAgICBpZiAoZGF5IDwgMSkgewotICAgICAgICAgICAgICAgIC0tbW9u
dGg7Ci0gICAgICAgICAgICAgICAgaWYgKG1vbnRoIDwgMCkgewotICAgICAgICAgICAgICAgICAg
ICBtb250aCA9IDExOwotICAgICAgICAgICAgICAgICAgICAtLXllYXI7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGRheSA9IG1heERheU9mTW9udGgoeWVhciwgbW9udGgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGJlZm9yZUdyZWdvcmlhblN0YXJ0RGF0ZSh5
ZWFyLCBtb250aCwgZGF5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgbV95ZWFyID0geWVhcjsKLSAgICAgICAgbV9tb250aCA9IG1vbnRoOwotICAg
IH0KLSAgICBtX21vbnRoRGF5ID0gZGF5OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIElT
T0RhdGVUaW1lOjphZGRNaW51dGUoaW50IG1pbnV0ZSkKLXsKLSAgICBpbnQgY2Fycnk7Ci0gICAg
Ly8gbWluIGNhbiBiZSBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gNTkuCi0gICAgbWludXRlICs9
IG1fbWludXRlOwotICAgIGlmIChtaW51dGUgPiA1OSkgewotICAgICAgICBjYXJyeSA9IG1pbnV0
ZSAvIDYwOwotICAgICAgICBtaW51dGUgPSBtaW51dGUgJSA2MDsKLSAgICB9IGVsc2UgaWYgKG1f
bWludXRlIDwgMCkgewotICAgICAgICBjYXJyeSA9ICg1OSAtIG1fbWludXRlKSAvIDYwOwotICAg
ICAgICBtaW51dGUgKz0gY2FycnkgKiA2MDsKLSAgICAgICAgY2FycnkgPSAtY2Fycnk7Ci0gICAg
ICAgIEFTU0VSVChtaW51dGUgPj0gMCAmJiBtaW51dGUgPD0gNTkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIG1fbWludXRlID0gbWludXRlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBpbnQgaG91ciA9IG1faG91ciArIGNhcnJ5OwotICAgIGlmIChob3VyID4gMjMpIHsKLSAg
ICAgICAgY2FycnkgPSBob3VyIC8gMjQ7Ci0gICAgICAgIGhvdXIgPSBob3VyICUgMjQ7Ci0gICAg
fSBlbHNlIGlmIChob3VyIDwgMCkgewotICAgICAgICBjYXJyeSA9ICgyMyAtIGhvdXIpIC8gMjQ7
Ci0gICAgICAgIGhvdXIgKz0gY2FycnkgKiAyNDsKLSAgICAgICAgY2FycnkgPSAtY2Fycnk7Ci0g
ICAgICAgIEFTU0VSVChob3VyID49IDAgJiYgaG91ciA8PSAyMyk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgbV9taW51dGUgPSBtaW51dGU7Ci0gICAgICAgIG1faG91ciA9IGhvdXI7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoIWFkZERheShjYXJyeSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX21pbnV0ZSA9IG1pbnV0ZTsKLSAgICBtX2hvdXIgPSBob3VyOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBQYXJzZXMgYSB0aW1lem9uZSBwYXJ0LCBhbmQgYWRq
dXN0IHllYXIsIG1vbnRoLCBtb250aERheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vj
b25kLgotYm9vbCBJU09EYXRlVGltZTo6cGFyc2VUaW1lWm9uZShjb25zdCBVQ2hhciogc3JjLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQotewotICAgIGlm
IChzdGFydCA+PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBp
bmRleCA9IHN0YXJ0OwotICAgIGlmIChzcmNbaW5kZXhdID09ICdaJykgewotICAgICAgICBlbmQg
PSBpbmRleCArIDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgbWlu
dXM7Ci0gICAgaWYgKHNyY1tpbmRleF0gPT0gJysnKQotICAgICAgICBtaW51cyA9IGZhbHNlOwot
ICAgIGVsc2UgaWYgKHNyY1tpbmRleF0gPT0gJy0nKQotICAgICAgICBtaW51cyA9IHRydWU7Ci0g
ICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKytpbmRleDsKLQotICAgIGludCBo
b3VyOwotICAgIGludCBtaW51dGU7Ci0gICAgaWYgKCF0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgs
IDIsIGhvdXIpIHx8IGhvdXIgPCAwIHx8IGhvdXIgPiAyMykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGluZGV4ICs9IDI7Ci0KLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoIHx8IHNyY1tpbmRl
eF0gIT0gJzonKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKytpbmRleDsKLQotICAgIGlm
ICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBtaW51dGUpIHx8IG1pbnV0ZSA8IDAgfHwg
bWludXRlID4gNTkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbmRleCArPSAyOwotCi0g
ICAgaWYgKG1pbnVzKSB7Ci0gICAgICAgIGhvdXIgPSAtaG91cjsKLSAgICAgICAgbWludXRlID0g
LW1pbnV0ZTsKLSAgICB9Ci0KLSAgICAvLyBTdWJ0cmFjdCB0aGUgdGltZXpvbmUgb2Zmc2V0Lgot
ICAgIGlmICghYWRkTWludXRlKC0oaG91ciAqIDYwICsgbWludXRlKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBlbmQgPSBpbmRleDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJ
U09EYXRlVGltZTo6cGFyc2VNb250aChjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgs
IHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQotewotICAgIEFTU0VSVChzcmMpOwotICAg
IHVuc2lnbmVkIGluZGV4OwotICAgIGlmICghcGFyc2VZZWFyKHNyYywgbGVuZ3RoLCBzdGFydCwg
aW5kZXgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGluZGV4ID49IGxlbmd0aCB8
fCBzcmNbaW5kZXhdICE9ICctJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7
Ci0KLSAgICBpbnQgbW9udGg7Ci0gICAgaWYgKCF0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgsIDIs
IG1vbnRoKSB8fCBtb250aCA8IDEgfHwgbW9udGggPiAxMikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIC0tbW9udGg7Ci0gICAgLy8gTm8gc3VwcG9ydCBmb3IgbW9udGhzIGJlZm9yZSBHcmVn
b3JpYW4gY2FsZW5kYXIuCi0gICAgaWYgKGJlZm9yZUdyZWdvcmlhblN0YXJ0RGF0ZShtX3llYXIs
IG1vbnRoLCBncmVnb3JpYW5TdGFydERheSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X21vbnRoID0gbW9udGg7Ci0gICAgZW5kID0gaW5kZXggKyAyOwotICAgIG1fdHlwZSA9IE1vbnRo
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIElTT0RhdGVUaW1lOjpwYXJzZURhdGUoY29u
c3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQm
IGVuZCkKLXsKLSAgICBBU1NFUlQoc3JjKTsKLSAgICB1bnNpZ25lZCBpbmRleDsKLSAgICBpZiAo
IXBhcnNlTW9udGgoc3JjLCBsZW5ndGgsIHN0YXJ0LCBpbmRleCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAvLyAnLScgYW5kIDItZGlnaXRzIGFyZSBuZWVkZWQuCi0gICAgaWYgKGluZGV4
ICsgMiA+PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3JjW2luZGV4
XSAhPSAnLScpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4OwotCi0gICAgaW50
IGRheTsKLSAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCwgMiwgZGF5KSB8fCBkYXkg
PCAxIHx8IGRheSA+IG1heERheU9mTW9udGgobV95ZWFyLCBtX21vbnRoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIC8vIE5vIHN1cHBvcnQgZm9yIGRhdGVzIGJlZm9yZSBHcmVnb3JpYW4g
Y2FsZW5kYXIuCi0gICAgaWYgKG1feWVhciA9PSBncmVnb3JpYW5TdGFydFllYXIgJiYgbV9tb250
aCA9PSBncmVnb3JpYW5TdGFydE1vbnRoICYmIGRheSA8IGdyZWdvcmlhblN0YXJ0RGF5KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb250aERheSA9IGRheTsKLSAgICBlbmQgPSBpbmRl
eCArIDI7Ci0gICAgbV90eXBlID0gRGF0ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJ
U09EYXRlVGltZTo6cGFyc2VXZWVrKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCi17Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAg
dW5zaWduZWQgaW5kZXg7Ci0gICAgaWYgKCFwYXJzZVllYXIoc3JjLCBsZW5ndGgsIHN0YXJ0LCBp
bmRleCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIDQgY2hhcmFjdGVycyAoJy0n
ICdXJyBkaWdpdCBkaWdpdCkgYXJlIG5lZWRlZC4KLSAgICBpZiAoaW5kZXggKyAzID49IGxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzcmNbaW5kZXhdICE9ICctJykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7Ci0gICAgaWYgKHNyY1tpbmRleF0gIT0g
J1cnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKytpbmRleDsKLQotICAgIGludCB3ZWVr
OwotICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCB3ZWVrKSB8fCB3ZWVrIDwg
MSB8fCB3ZWVrID4gbWF4V2Vla051bWJlckluWWVhcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgLy8gTm8gc3VwcG9ydCBmb3IgeWVhcnMgb2xkZXIgdGhhbiBvciBlcXVhbHMgdG8gR3Jl
Z29yaWFuIGNhbGVuZGFyIHN0YXJ0IHllYXIuCi0gICAgaWYgKG1feWVhciA8PSBncmVnb3JpYW5T
dGFydFllYXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3dlZWsgPSB3ZWVrOwotICAg
IGVuZCA9IGluZGV4ICsgMjsKLSAgICBtX3R5cGUgPSBXZWVrOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIElTT0RhdGVUaW1lOjpwYXJzZVRpbWUoY29uc3QgVUNoYXIqIHNyYywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKLXsKLSAgICBBU1NFUlQo
c3JjKTsKLSAgICBpbnQgaG91cjsKLSAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBzdGFydCwg
MiwgaG91cikgfHwgaG91ciA8IDAgfHwgaG91ciA+IDIzKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgdW5zaWduZWQgaW5kZXggPSBzdGFydCArIDI7Ci0gICAgaWYgKGluZGV4ID49IGxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzcmNbaW5kZXhdICE9ICc6JykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICsraW5kZXg7Ci0KLSAgICBpbnQgbWludXRlOwotICAg
IGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBtaW51dGUpIHx8IG1pbnV0ZSA8IDAg
fHwgbWludXRlID4gNTkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbmRleCArPSAyOwot
Ci0gICAgaW50IHNlY29uZCA9IDA7Ci0gICAgaW50IG1pbGxpc2Vjb25kID0gMDsKLSAgICAvLyBP
cHRpb25hbCBzZWNvbmQgcGFydC4KLSAgICAvLyBEbyBub3QgcmV0dXJuIHdpdGggZmFsc2UgYmVj
YXVzZSB0aGUgcGFydCBpcyBvcHRpb25hbC4KLSAgICBpZiAoaW5kZXggKyAyIDwgbGVuZ3RoICYm
IHNyY1tpbmRleF0gPT0gJzonKSB7Ci0gICAgICAgIGlmICh0b0ludChzcmMsIGxlbmd0aCwgaW5k
ZXggKyAxLCAyLCBzZWNvbmQpICYmIHNlY29uZCA+PSAwICYmIHNlY29uZCA8PSA1OSkgewotICAg
ICAgICAgICAgaW5kZXggKz0gMzsKLQotICAgICAgICAgICAgLy8gT3B0aW9uYWwgZnJhY3Rpb25h
bCBzZWNvbmQgcGFydC4KLSAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBzcmNbaW5k
ZXhdID09ICcuJykgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRpZ2l0c0xlbmd0aCA9IGNv
dW50RGlnaXRzKHNyYywgbGVuZ3RoLCBpbmRleCArIDEpOwotICAgICAgICAgICAgICAgIGlmIChk
aWdpdHNMZW5ndGggPiAgMCkgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAg
ICAgICAgICAgICAgICBib29sIG9rOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzTGVu
Z3RoID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gdG9JbnQoc3JjLCBsZW5n
dGgsIGluZGV4LCAxLCBtaWxsaXNlY29uZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaWxs
aXNlY29uZCAqPSAxMDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzTGVu
Z3RoID09IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gdG9JbnQoc3JjLCBsZW5n
dGgsIGluZGV4LCAyLCBtaWxsaXNlY29uZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaWxs
aXNlY29uZCAqPSAxMDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIC8vIGRpZ2l0c0xlbmd0
aCA+PSAzCi0gICAgICAgICAgICAgICAgICAgICAgICBvayA9IHRvSW50KHNyYywgbGVuZ3RoLCBp
bmRleCwgMywgbWlsbGlzZWNvbmQpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQob2spOwot
ICAgICAgICAgICAgICAgICAgICBpbmRleCArPSBkaWdpdHNMZW5ndGg7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIG1faG91ciA9IGhvdXI7
Ci0gICAgbV9taW51dGUgPSBtaW51dGU7Ci0gICAgbV9zZWNvbmQgPSBzZWNvbmQ7Ci0gICAgbV9t
aWxsaXNlY29uZCA9IG1pbGxpc2Vjb25kOwotICAgIGVuZCA9IGluZGV4OwotICAgIG1fdHlwZSA9
IFRpbWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSVNPRGF0ZVRpbWU6OnBhcnNlRGF0
ZVRpbWVMb2NhbChjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCYgZW5kKQotewotICAgIEFTU0VSVChzcmMpOwotICAgIHVuc2lnbmVkIGlu
ZGV4OwotICAgIGlmICghcGFyc2VEYXRlKHNyYywgbGVuZ3RoLCBzdGFydCwgaW5kZXgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGluZGV4ID49IGxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChzcmNbaW5kZXhdICE9ICdUJykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICsraW5kZXg7Ci0gICAgaWYgKCFwYXJzZVRpbWUoc3JjLCBsZW5ndGgsIGluZGV4
LCBlbmQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV90eXBlID0gRGF0ZVRpbWVMb2Nh
bDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJU09EYXRlVGltZTo6cGFyc2VEYXRlVGlt
ZShjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCYgZW5kKQotewotICAgIEFTU0VSVChzcmMpOwotICAgIHVuc2lnbmVkIGluZGV4OwotICAg
IGlmICghcGFyc2VEYXRlKHNyYywgbGVuZ3RoLCBzdGFydCwgaW5kZXgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKGluZGV4ID49IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChzcmNbaW5kZXhdICE9ICdUJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICsraW5kZXg7Ci0gICAgaWYgKCFwYXJzZVRpbWUoc3JjLCBsZW5ndGgsIGluZGV4LCBpbmRleCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXBhcnNlVGltZVpvbmUoc3JjLCBsZW5n
dGgsIGluZGV4LCBlbmQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV90eXBlID0gRGF0
ZVRpbWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIHBvc2l0
aXZlRm1vZChkb3VibGUgdmFsdWUsIGRvdWJsZSBkaXZpZGVyKQotewotICAgIGRvdWJsZSByZW1h
aW5kZXIgPSBmbW9kKHZhbHVlLCBkaXZpZGVyKTsKLSAgICByZXR1cm4gcmVtYWluZGVyIDwgMCA/
IHJlbWFpbmRlciArIGRpdmlkZXIgOiByZW1haW5kZXI7Ci19Ci0KLXZvaWQgSVNPRGF0ZVRpbWU6
OnNldE1pbGxpc2Vjb25kc1NpbmNlTWlkbmlnaHRJbnRlcm5hbChkb3VibGUgbXNJbkRheSkKLXsK
LSAgICBBU1NFUlQobXNJbkRheSA+PSAwICYmIG1zSW5EYXkgPCBtc1BlckRheSk7Ci0gICAgbV9t
aWxsaXNlY29uZCA9IHN0YXRpY19jYXN0PGludD4oZm1vZChtc0luRGF5LCBtc1BlclNlY29uZCkp
OwotICAgIGRvdWJsZSB2YWx1ZSA9IGZsb29yKG1zSW5EYXkgLyBtc1BlclNlY29uZCk7Ci0gICAg
bV9zZWNvbmQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZtb2QodmFsdWUsIHNlY29uZHNQZXJNaW51dGUp
KTsKLSAgICB2YWx1ZSA9IGZsb29yKHZhbHVlIC8gc2Vjb25kc1Blck1pbnV0ZSk7Ci0gICAgbV9t
aW51dGUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZtb2QodmFsdWUsIG1pbnV0ZXNQZXJIb3VyKSk7Ci0g
ICAgbV9ob3VyID0gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSAvIG1pbnV0ZXNQZXJIb3VyKTsKLX0K
LQotYm9vbCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVJbnRl
cm5hbChkb3VibGUgbXMpCi17Ci0gICAgbV95ZWFyID0gbXNUb1llYXIobXMpOwotICAgIGludCB5
ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCBtX3llYXIpOwotICAgIG1fbW9udGggPSBtb250aEZyb21E
YXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcihtX3llYXIpKTsKLSAgICBtX21vbnRoRGF5ID0g
ZGF5SW5Nb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcihtX3llYXIpKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2lu
Y2VFcG9jaEZvckRhdGUoZG91YmxlIG1zKQotewotICAgIG1fdHlwZSA9IEludmFsaWQ7Ci0gICAg
aWYgKCFpc2Zpbml0ZShtcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXNldE1p
bGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlSW50ZXJuYWwocm91bmQobXMpKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChiZWZvcmVHcmVnb3JpYW5TdGFydERhdGUobV95ZWFyLCBt
X21vbnRoLCBtX21vbnRoRGF5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9
IERhdGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSVNPRGF0ZVRpbWU6OnNldE1pbGxp
c2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlVGltZShkb3VibGUgbXMpCi17Ci0gICAgbV90eXBlID0g
SW52YWxpZDsKLSAgICBpZiAoIWlzZmluaXRlKG1zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1zID0gcm91bmQobXMpOwotICAgIHNldE1pbGxpc2Vjb25kc1NpbmNlTWlkbmlnaHRJbnRl
cm5hbChwb3NpdGl2ZUZtb2QobXMsIG1zUGVyRGF5KSk7Ci0gICAgaWYgKCFzZXRNaWxsaXNlY29u
ZHNTaW5jZUVwb2NoRm9yRGF0ZUludGVybmFsKG1zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChiZWZvcmVHcmVnb3JpYW5TdGFydERhdGUobV95ZWFyLCBtX21vbnRoLCBtX21vbnRo
RGF5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9IERhdGVUaW1lOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNTaW5j
ZUVwb2NoRm9yRGF0ZVRpbWVMb2NhbChkb3VibGUgbXMpCi17Ci0gICAgLy8gSW50ZXJuYWwgcmVw
cmVzZW50YXRpb24gb2YgRGF0ZVRpbWVMb2NhbCBpcyB0aGUgc2FtZSBhcyBEYXRlVGltZSBleGNl
cHQgbV90eXBlLgotICAgIGlmICghc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVUaW1l
KG1zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9IERhdGVUaW1lTG9jYWw7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSVNPRGF0ZVRpbWU6OnNldE1pbGxpc2Vjb25k
c1NpbmNlRXBvY2hGb3JNb250aChkb3VibGUgbXMpCi17Ci0gICAgbV90eXBlID0gSW52YWxpZDsK
LSAgICBpZiAoIWlzZmluaXRlKG1zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVJbnRlcm5hbChyb3VuZChtcykpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gSWdub3JlIG1fbW9udGhEYXkgdXBkYXRlZCBieSBz
ZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZUludGVybmFsKCkuCi0gICAgaWYgKGJlZm9y
ZUdyZWdvcmlhblN0YXJ0RGF0ZShtX3llYXIsIG1fbW9udGgsIGdyZWdvcmlhblN0YXJ0RGF5KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9IE1vbnRoOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNTaW5jZU1pZG5pZ2h0
KGRvdWJsZSBtcykKLXsKLSAgICBtX3R5cGUgPSBJbnZhbGlkOwotICAgIGlmICghaXNmaW5pdGUo
bXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc2V0TWlsbGlzZWNvbmRzU2luY2VNaWRu
aWdodEludGVybmFsKHBvc2l0aXZlRm1vZChyb3VuZChtcyksIG1zUGVyRGF5KSk7Ci0gICAgbV90
eXBlID0gVGltZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gT2Zmc2V0IGZyb20gSmFudWFy
eSAxc3QgdG8gTW9uZGF5IG9mIHRoZSBJU08gODYwMSdzIGZpcnN0IHdlZWsuCi0vLyAgIGV4LiBJ
ZiBKYW51YXJ5IDFzdCBpcyBGcmlkYXksIHN1Y2ggTW9uZGF5IGlzIDMgZGF5cyBsYXRlci4gUmV0
dXJucyAzLgotc3RhdGljIGludCBvZmZzZXRUbzFzdFdlZWtTdGFydChpbnQgeWVhcikKLXsKLSAg
ICBpbnQgb2Zmc2V0VG8xc3RXZWVrU3RhcnQgPSAxIC0gZGF5T2ZXZWVrKHllYXIsIDAsIDEpOwot
ICAgIGlmIChvZmZzZXRUbzFzdFdlZWtTdGFydCA8PSAtNCkKLSAgICAgICAgb2Zmc2V0VG8xc3RX
ZWVrU3RhcnQgKz0gNzsKLSAgICByZXR1cm4gb2Zmc2V0VG8xc3RXZWVrU3RhcnQ7Ci19Ci0KLWJv
b2wgSVNPRGF0ZVRpbWU6OnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JXZWVrKGRvdWJsZSBt
cykKLXsKLSAgICBtX3R5cGUgPSBJbnZhbGlkOwotICAgIGlmICghaXNmaW5pdGUobXMpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbXMgPSByb3VuZChtcyk7Ci0KLSAgICBtX3llYXIgPSBt
c1RvWWVhcihtcyk7Ci0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBncmVnb3JpYW5TdGFydFllYXIu
IFdlZWsgbnVtYmVycyBhcmUgdW5kZWZpbmVkIGluIHRoYXQgeWVhci4KLSAgICBpZiAobV95ZWFy
IDw9IGdyZWdvcmlhblN0YXJ0WWVhcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50
IHllYXJEYXkgPSBkYXlJblllYXIobXMsIG1feWVhcik7Ci0gICAgaW50IG9mZnNldCA9IG9mZnNl
dFRvMXN0V2Vla1N0YXJ0KG1feWVhcik7Ci0gICAgaWYgKHllYXJEYXkgPCBvZmZzZXQpIHsKLSAg
ICAgICAgLy8gVGhlIGRheSBiZWxvbmdzIHRvIHRoZSBsYXN0IHdlZWsgb2YgdGhlIHByZXZpb3Vz
IHllYXIuCi0gICAgICAgIG1feWVhci0tOwotICAgICAgICBpZiAobV95ZWFyIDw9IGdyZWdvcmlh
blN0YXJ0WWVhcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV93ZWVrID0g
bWF4V2Vla051bWJlckluWWVhcigpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fd2VlayA9ICgo
eWVhckRheSAtIG9mZnNldCkgLyA3KSArIDE7Ci0gICAgICAgIGlmIChtX3dlZWsgPiBtYXhXZWVr
TnVtYmVySW5ZZWFyKCkpIHsKLSAgICAgICAgICAgIG1feWVhcisrOwotICAgICAgICAgICAgbV93
ZWVrID0gMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX3R5cGUgPSBXZWVrOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1kb3VibGUgSVNPRGF0ZVRpbWU6Om1pbGxpc2Vjb25kc1NpbmNlRXBvY2hG
b3JUaW1lKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFRpbWUgfHwgbV90eXBlID09
IERhdGVUaW1lIHx8IG1fdHlwZSA9PSBEYXRlVGltZUxvY2FsKTsKLSAgICByZXR1cm4gKChtX2hv
dXIgKiBtaW51dGVzUGVySG91ciArIG1fbWludXRlKSAqIHNlY29uZHNQZXJNaW51dGUgKyBtX3Nl
Y29uZCkgKiBtc1BlclNlY29uZCArIG1fbWlsbGlzZWNvbmQ7Ci19Ci0KLWRvdWJsZSBJU09EYXRl
VGltZTo6bWlsbGlzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3R5
cGUpIHsKLSAgICBjYXNlIERhdGU6Ci0gICAgICAgIHJldHVybiBkYXRlVG9EYXlzRnJvbTE5NzAo
bV95ZWFyLCBtX21vbnRoLCBtX21vbnRoRGF5KSAqIG1zUGVyRGF5OwotICAgIGNhc2UgRGF0ZVRp
bWU6Ci0gICAgY2FzZSBEYXRlVGltZUxvY2FsOgotICAgICAgICByZXR1cm4gZGF0ZVRvRGF5c0Zy
b20xOTcwKG1feWVhciwgbV9tb250aCwgbV9tb250aERheSkgKiBtc1BlckRheSArIG1pbGxpc2Vj
b25kc1NpbmNlRXBvY2hGb3JUaW1lKCk7Ci0gICAgY2FzZSBNb250aDoKLSAgICAgICAgcmV0dXJu
IGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIsIG1fbW9udGgsIDEpICogbXNQZXJEYXk7Ci0gICAg
Y2FzZSBUaW1lOgotICAgICAgICByZXR1cm4gbWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvclRpbWUo
KTsKLSAgICBjYXNlIFdlZWs6Ci0gICAgICAgIHJldHVybiAoZGF0ZVRvRGF5c0Zyb20xOTcwKG1f
eWVhciwgMCwgMSkgKyBvZmZzZXRUbzFzdFdlZWtTdGFydChtX3llYXIpICsgKG1fd2VlayAtIDEp
ICogNykgKiBtc1BlckRheTsKLSAgICBjYXNlIEludmFsaWQ6Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gaW52YWxpZE1pbGxpc2Vj
b25kcygpOwotfQotCi1TdHJpbmcgSVNPRGF0ZVRpbWU6OnRvU3RyaW5nRm9yVGltZShTZWNvbmRG
b3JtYXQgZm9ybWF0KSBjb25zdAotewotICAgIEFTU0VSVChtX3R5cGUgPT0gRGF0ZVRpbWUgfHwg
bV90eXBlID09IERhdGVUaW1lTG9jYWwgfHwgbV90eXBlID09IFRpbWUpOwotICAgIFNlY29uZEZv
cm1hdCBlZmZlY3RpdmVGb3JtYXQgPSBmb3JtYXQ7Ci0gICAgaWYgKG1fbWlsbGlzZWNvbmQpCi0g
ICAgICAgIGVmZmVjdGl2ZUZvcm1hdCA9IE1pbGxpc2Vjb25kOwotICAgIGVsc2UgaWYgKGZvcm1h
dCA9PSBOb25lICYmIG1fc2Vjb25kKQotICAgICAgICBlZmZlY3RpdmVGb3JtYXQgPSBTZWNvbmQ7
Ci0KLSAgICBzd2l0Y2ggKGVmZmVjdGl2ZUZvcm1hdCkgewotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAvLyBGYWxsYmFjayB0byBOb25lLgotICAg
IGNhc2UgTm9uZToKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlMDJkOiUwMmQiLCBt
X2hvdXIsIG1fbWludXRlKTsKLSAgICBjYXNlIFNlY29uZDoKLSAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCIlMDJkOiUwMmQ6JTAyZCIsIG1faG91ciwgbV9taW51dGUsIG1fc2Vjb25kKTsK
LSAgICBjYXNlIE1pbGxpc2Vjb25kOgotICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUw
MmQ6JTAyZDolMDJkLiUwM2QiLCBtX2hvdXIsIG1fbWludXRlLCBtX3NlY29uZCwgbV9taWxsaXNl
Y29uZCk7Ci0gICAgfQotfQotCi1TdHJpbmcgSVNPRGF0ZVRpbWU6OnRvU3RyaW5nKFNlY29uZEZv
cm1hdCBmb3JtYXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIERh
dGU6Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJTA0ZC0lMDJkLSUwMmQiLCBtX3ll
YXIsIG1fbW9udGggKyAxLCBtX21vbnRoRGF5KTsKLSAgICBjYXNlIERhdGVUaW1lOgotICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUwNGQtJTAyZC0lMDJkVCIsIG1feWVhciwgbV9tb250
aCArIDEsIG1fbW9udGhEYXkpCi0gICAgICAgICAgICArIHRvU3RyaW5nRm9yVGltZShmb3JtYXQp
ICsgU3RyaW5nKCJaIik7Ci0gICAgY2FzZSBEYXRlVGltZUxvY2FsOgotICAgICAgICByZXR1cm4g
U3RyaW5nOjpmb3JtYXQoIiUwNGQtJTAyZC0lMDJkVCIsIG1feWVhciwgbV9tb250aCArIDEsIG1f
bW9udGhEYXkpCi0gICAgICAgICAgICArIHRvU3RyaW5nRm9yVGltZShmb3JtYXQpOwotICAgIGNh
c2UgTW9udGg6Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJTA0ZC0lMDJkIiwgbV95
ZWFyLCBtX21vbnRoICsgMSk7Ci0gICAgY2FzZSBUaW1lOgotICAgICAgICByZXR1cm4gdG9TdHJp
bmdGb3JUaW1lKGZvcm1hdCk7Ci0gICAgY2FzZSBXZWVrOgotICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmb3JtYXQoIiUwNGQtVyUwMmQiLCBtX3llYXIsIG1fd2Vlayk7Ci0gICAgY2FzZSBJbnZhbGlk
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIFN0cmluZygiKEludmFsaWQgSVNPRGF0ZVRpbWUpIik7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9JU09EYXRlVGltZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9JU09EYXRlVGltZS5oCShyZXZpc2lvbiA1Mzk3NSkKKysrIFdlYkNv
cmUvaHRtbC9JU09EYXRlVGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBJU09EYXRlVGltZV9oCi0jZGVmaW5lIElTT0RhdGVUaW1lX2gKLQotI2luY2x1ZGUgPGxp
bWl0cz4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgU3RyaW5nOwotCi0vLyBBbiBJU09EYXRlVGltZSBpbnN0YW5jZSByZXBy
ZXNlbnRzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGRhdGUgYW5kIHRpbWUgY29tYmluYXRpb25zOgot
Ly8gKiBNb250aCB0eXBlOiB5ZWFyLW1vbnRoCi0vLyAqIERhdGUgdHlwZTogeWVhci1tb250aC1k
YXkKLS8vICogV2VlayB0eXBlOiB5ZWFyLXdlZWsKLS8vICogVGltZSB0eXBlOiBob3VyLW1pbnV0
ZS1zZWNvbmQtbWlsbGlzZWNvbmQKLS8vICogRGF0ZVRpbWUgb3IgRGF0ZVRpbWVMb2NhbCB0eXBl
OiB5ZWFyLW1vbnRoLWRheSBob3VyLW1pbnV0ZS1zZWNvbmQtbWlsbGlzZWNvbmQKLWNsYXNzIElT
T0RhdGVUaW1lIHsKLXB1YmxpYzoKLSAgICBJU09EYXRlVGltZSgpCi0gICAgICAgIDogbV9taWxs
aXNlY29uZCgwKQotICAgICAgICAsIG1fc2Vjb25kKDApCi0gICAgICAgICwgbV9taW51dGUoMCkK
LSAgICAgICAgLCBtX2hvdXIoMCkKLSAgICAgICAgLCBtX21vbnRoRGF5KDApCi0gICAgICAgICwg
bV9tb250aCgwKQotICAgICAgICAsIG1feWVhcigwKQotICAgICAgICAsIG1fd2VlaygwKQotICAg
ICAgICAsIG1fdHlwZShJbnZhbGlkKQotICAgIHsKLSAgICB9Ci0KLSAgICBpbnQgbWlsbGlzZWNv
bmQoKSBjb25zdCB7IHJldHVybiBtX21pbGxpc2Vjb25kOyB9Ci0gICAgaW50IHNlY29uZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2Vjb25kOyB9Ci0gICAgaW50IG1pbnV0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWludXRlOyB9Ci0gICAgaW50IGhvdXIoKSBjb25zdCB7IHJldHVybiBtX2hvdXI7IH0KLSAg
ICBpbnQgbW9udGhEYXkoKSBjb25zdCB7IHJldHVybiBtX21vbnRoRGF5OyB9Ci0gICAgaW50IG1v
bnRoKCkgY29uc3QgeyByZXR1cm4gbV9tb250aDsgfQotICAgIGludCBmdWxsWWVhcigpIGNvbnN0
IHsgcmV0dXJuIG1feWVhcjsgfQotICAgIGludCB3ZWVrKCkgY29uc3QgeyByZXR1cm4gbV93ZWVr
OyB9Ci0KLSAgICBlbnVtIFNlY29uZEZvcm1hdCB7Ci0gICAgICAgIE5vbmUsIC8vIFN1cHByZXNz
IHRoZSBzZWNvbmQgcGFydCBhbmQgdGhlIG1pbGxpc2Vjb25kIHBhcnQgaWYgdGhleSBhcmUgMC4K
LSAgICAgICAgU2Vjb25kLCAvLyBBbHdheXMgc2hvdyB0aGUgc2Vjb25kIHBhcnQsIGFuZCBzdXBw
cmVzcyB0aGUgbWlsbGlzZWNvbmQgcGFydCBpZiBpdCBpcyAwLgotICAgICAgICBNaWxsaXNlY29u
ZCAvLyBBbHdheXMgc2hvdyB0aGUgc2Vjb25kIHBhcnQgYW5kIHRoZSBtaWxsaXNlY29uZCBwYXJ0
LgotICAgIH07Ci0KLSAgICAvLyBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIGZv
ciB0aGlzIGluc3RhbmNlLgotICAgIC8vIFRoZSBmb3JtYXQgYXJndW1lbnQgaXMgdmFsaWQgZm9y
IERhdGVUaW1lLCBEYXRlVGltZUxvY2FsLCBhbmQgVGltZSB0eXBlcy4KLSAgICBTdHJpbmcgdG9T
dHJpbmcoU2Vjb25kRm9ybWF0IGZvcm1hdCA9IE5vbmUpIGNvbnN0OwotCi0gICAgLy8gcGFyc2Uq
KCkgYW5kIHNldE1pbGxpc2Vjb25kc1NpbmNlKigpIGZ1bmN0aW9ucyBhcmUgaW5pdGlhbGl6ZXJz
IGZvciBhbgotICAgIC8vIElTT0RhdGVUaW1lIGluc3RhbmNlLiBJZiB0aGVzZSBmdW5jdGlvbnMg
cmV0dXJuIGZhbHNlLCB0aGUgaW5zdGFuY2UKLSAgICAvLyBtaWdodCBiZSBpbnZhbGlkLgotCi0g
ICAgLy8gVGhlIGZvbGxvd2luZyBzaXggZnVuY3Rpb25zIHBhcnNlIHRoZSBpbnB1dCAnc3JjJyB3
aG9zZSBsZW5ndGggaXMKLSAgICAvLyAnbGVuZ3RoJywgYW5kIHVwZGF0ZXMgc29tZSBmaWVsZHMg
b2YgdGhpcyBpbnN0YW5jZS4gVGhlIHBhcnNpbmcgc3RhcnRzIGF0Ci0gICAgLy8gc3JjW3N0YXJ0
XSBhbmQgZXhhbWluZXMgY2hhcmFjdGVycyBiZWZvcmUgc3JjW2xlbmd0aF0uCi0gICAgLy8gJ3Ny
YycgbXVzdCBiZSBub24tbnVsbC4gVGhlICdzcmMnIHN0cmluZyBkb2Vzbid0IG5lZWQgdG8gYmUK
LSAgICAvLyBudWxsLXRlcm1pbmF0ZWQuCi0gICAgLy8gVGhlIGZ1bmN0aW9ucyByZXR1cm4gdHJ1
ZSBpZiB0aGUgcGFyc2luZyBzdWNjZWVkcywgYW5kIHNldCAnZW5kJyB0byB0aGUKLSAgICAvLyBu
ZXh0IGluZGV4IGFmdGVyIHRoZSBsYXN0IGNvbnN1bWVkLiBFeHRyYSBsZWFkaW5nIGNoYXJhY3Rl
cnMgY2F1c2UgcGFyc2UKLSAgICAvLyBmYWlsdXJlcywgYW5kIHRoZSB0cmFpbGluZyBleHRyYSBj
aGFyYWN0ZXJzIGRvbid0IGNhdXNlIHBhcnNlIGZhaWx1cmVzLgotCi0gICAgLy8gU2V0cyB5ZWFy
IGFuZCBtb250aC4KLSAgICBib29sIHBhcnNlTW9udGgoY29uc3QgVUNoYXIqIHNyYywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgLy8gU2V0cyB5
ZWFyLCBtb250aCBhbmQgbW9udGhEYXkuCi0gICAgYm9vbCBwYXJzZURhdGUoY29uc3QgVUNoYXIq
IHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0g
ICAgLy8gU2V0cyB5ZWFyIGFuZCB3ZWVrLgotICAgIGJvb2wgcGFyc2VXZWVrKGNvbnN0IFVDaGFy
KiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOwot
ICAgIC8vIFNldHMgaG91ciwgbWludXRlLCBzZWNvbmQgYW5kIG1pbGxpc2Vjb25kLgotICAgIGJv
b2wgcGFyc2VUaW1lKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkJiBlbmQpOwotICAgIC8vIFNldHMgeWVhciwgbW9udGgsIG1vbnRoRGF5
LCBob3VyLCBtaW51dGUsIHNlY29uZCBhbmQgbWlsbGlzZWNvbmQuCi0gICAgYm9vbCBwYXJzZURh
dGVUaW1lTG9jYWwoY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBz
dGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgLy8gU2V0cyB5ZWFyLCBtb250aCwgbW9udGhEYXks
IGhvdXIsIG1pbnV0ZSwgc2Vjb25kIGFuZCBtaWxsaXNlY29uZCwgYW5kIGFkanVzdHMgdGltZXpv
bmUuCi0gICAgYm9vbCBwYXJzZURhdGVUaW1lKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOwotCi0gICAgLy8gVGhlIGZvbGxv
d2luZyBzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yKigpIGZ1bmN0aW9ucyB0YWtlCi0gICAg
Ly8gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgMTk3MC0wMS0wMSAwMDowMDowMC4w
MDAgVVRDIGFzCi0gICAgLy8gdGhlIGFyZ3VtZW50LCBhbmQgdXBkYXRlIGFsbCBmaWVsZHMgZm9y
IHRoZSBjb3JyZXNwb25kaW5nCi0gICAgLy8gSVNPRGF0ZVRpbWUgdHlwZS4gVGhlIGZ1bmN0aW9u
cyByZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkcywgYW5kCi0gICAgLy8gZmFsc2UgaWYgdGhleSBm
YWlsLgotCi0gICAgLy8gRm9yIERhdGUgdHlwZS4gVXBkYXRlcyBtX3llYXIsIG1fbW9udGggYW5k
IG1fbW9udGhEYXkuCi0gICAgYm9vbCBzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZShk
b3VibGUgbXMpOwotICAgIC8vIEZvciBEYXRlVGltZSB0eXBlLiBVcGRhdGVzIG1feWVhciwgbV9t
b250aCwgbV9tb250aERheSwgbV9ob3VyLCBtX21pbnV0ZSwgbV9zZWNvbmQgYW5kIG1fbWlsbGlz
ZWNvbmQuCi0gICAgYm9vbCBzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZVRpbWUoZG91
YmxlIG1zKTsKLSAgICAvLyBGb3IgRGF0ZVRpbWVMb2NhbCB0eXBlLiBVcGRhdGVzIG1feWVhciwg
bV9tb250aCwgbV9tb250aERheSwgbV9ob3VyLCBtX21pbnV0ZSwgbV9zZWNvbmQgYW5kIG1fbWls
bGlzZWNvbmQuCi0gICAgYm9vbCBzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZVRpbWVM
b2NhbChkb3VibGUgbXMpOwotICAgIC8vIEZvciBNb250aCB0eXBlLiBVcGRhdGVzIG1feWVhciBh
bmQgbV9tb250aC4KLSAgICBib29sIHNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JNb250aChk
b3VibGUgbXMpOwotICAgIC8vIEZvciBXZWVrIHR5cGUuIFVwZGF0ZXMgbV95ZWFyIGFuZCBtX3dl
ZWsuCi0gICAgYm9vbCBzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yV2Vlayhkb3VibGUgbXMp
OwotCi0gICAgLy8gRm9yIFRpbWUgdHlwZS4gVXBkYXRlcyBtX2hvdXIsIG1fbWludXRlLCBtX3Nl
Y29uZCBhbmQgbV9taWxsaXNlY29uZC4KLSAgICBib29sIHNldE1pbGxpc2Vjb25kc1NpbmNlTWlk
bmlnaHQoZG91YmxlIG1zKTsKLQotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBtaWxsaXNl
Y29uZHMgZnJvbSAxOTcwLTAxLTAxIDAwOjAwOjAwIFVUQy4KLSAgICAvLyBGb3IgYW4gSVNPRGF0
ZVRpbWUgaW5pdGlhbGl6ZWQgd2l0aCBwYXJzZURhdGVUaW1lTG9jYWwoKSwKLSAgICAvLyBtaWxs
aXNlY29uZHNTaW5jZUVwb2NoKCkgcmV0dXJucyBhIHZhbHVlIGZvciBVVEMgdGltZXpvbmUuCi0g
ICAgZG91YmxlIG1pbGxpc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdDsKLSAgICBzdGF0aWMgaW5s
aW5lIGRvdWJsZSBpbnZhbGlkTWlsbGlzZWNvbmRzKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsgfQotCi1wcml2YXRlOgotICAgIC8vIFJldHVybnMg
dGhlIG1heGltdW0gd2VlayBudW1iZXIgaW4gdGhpcyBJU09EYXRlVGltZSdzIHllYXIuCi0gICAg
Ly8gVGhlIHJlc3VsdCBpcyBlaXRoZXIgb2YgNTIgYW5kIDUzLgotICAgIGludCBtYXhXZWVrTnVt
YmVySW5ZZWFyKCkgY29uc3Q7Ci0gICAgYm9vbCBwYXJzZVllYXIoY29uc3QgVUNoYXIqIHNyYywg
dW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgYm9v
bCBhZGREYXkoaW50KTsKLSAgICBib29sIGFkZE1pbnV0ZShpbnQpOwotICAgIGJvb2wgcGFyc2VU
aW1lWm9uZShjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCYgZW5kKTsKLSAgICAvLyBIZWxwZXIgZm9yIG1pbGxpc2Vjb25kc1NpbmNlRXBv
Y2goKS4KLSAgICBkb3VibGUgbWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvclRpbWUoKSBjb25zdDsK
LSAgICAvLyBIZWxwZXJzIGZvciBzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yKigpLgotICAg
IGJvb2wgc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVJbnRlcm5hbChkb3VibGUgbXMp
OwotICAgIHZvaWQgc2V0TWlsbGlzZWNvbmRzU2luY2VNaWRuaWdodEludGVybmFsKGRvdWJsZSBt
cyk7Ci0gICAgLy8gSGVscGVyIGZvciB0b1N0cmluZygpLgotICAgIFN0cmluZyB0b1N0cmluZ0Zv
clRpbWUoU2Vjb25kRm9ybWF0KSBjb25zdDsKLQotICAgIC8vIG1fd2Vla0RheSB2YWx1ZXMKLSAg
ICBlbnVtIHsKLSAgICAgICAgU3VuZGF5ID0gMCwKLSAgICAgICAgTW9uZGF5LAotICAgICAgICBU
dWVzZGF5LAotICAgICAgICBXZWRuZXNkYXksCi0gICAgICAgIFRodXJzZGF5LAotICAgICAgICBG
cmlkYXksCi0gICAgICAgIFNhdHVyZGF5LAotICAgIH07Ci0KLSAgICBpbnQgbV9taWxsaXNlY29u
ZDsgIC8vIDAgLSA5OTkKLSAgICBpbnQgbV9zZWNvbmQ7Ci0gICAgaW50IG1fbWludXRlOwotICAg
IGludCBtX2hvdXI7Ci0gICAgaW50IG1fbW9udGhEYXk7ICAvLyAxIC0gMzEKLSAgICBpbnQgbV9t
b250aDsgIC8vIDA6SmFudWFyeSAtIDExOkRlY2VtYmVyCi0gICAgaW50IG1feWVhcjsgIC8vICAx
NTgyIC0KLSAgICBpbnQgbV93ZWVrOyAgLy8gMSAtIDUzCi0KLSAgICBlbnVtIFR5cGUgewotICAg
ICAgICBJbnZhbGlkLAotICAgICAgICBEYXRlLAotICAgICAgICBEYXRlVGltZSwKLSAgICAgICAg
RGF0ZVRpbWVMb2NhbCwKLSAgICAgICAgTW9udGgsCi0gICAgICAgIFRpbWUsCi0gICAgICAgIFdl
ZWssCi0gICAgfTsKLSAgICBUeXBlIG1fdHlwZTsKLX07Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gSVNPRGF0ZVRpbWVfaApJbmRleDogV2ViQ29yZS9odG1sL1ZhbGlk
aXR5U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmNw
cAkocmV2aXNpb24gNTM5NzUpCisrKyBXZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBib29sIFZhbGlkaXR5U3RhdGU6OnR5cGVN
aXNtYXRjaCgpIGNvbnN0CiAgICAgY2FzZSBIVE1MSW5wdXRFbGVtZW50OjpNT05USDoKICAgICBj
YXNlIEhUTUxJbnB1dEVsZW1lbnQ6OlRJTUU6CiAgICAgY2FzZSBIVE1MSW5wdXRFbGVtZW50OjpX
RUVLOgotICAgICAgICByZXR1cm4gIUhUTUxJbnB1dEVsZW1lbnQ6OmZvcm1TdHJpbmdUb0lTT0Rh
dGVUaW1lKGlucHV0LT5pbnB1dFR5cGUoKSwgdmFsdWUsIDApOworICAgICAgICByZXR1cm4gIUhU
TUxJbnB1dEVsZW1lbnQ6OmZvcm1TdHJpbmdUb0RhdGVDb21wb25lbnRzKGlucHV0LT5pbnB1dFR5
cGUoKSwgdmFsdWUsIDApOwogICAgIGNhc2UgSFRNTElucHV0RWxlbWVudDo6QlVUVE9OOgogICAg
IGNhc2UgSFRNTElucHV0RWxlbWVudDo6Q0hFQ0tCT1g6CiAgICAgY2FzZSBIVE1MSW5wdXRFbGVt
ZW50OjpGSUxFOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47597</attachid>
            <date>2010-01-28 01:03:12 -0800</date>
            <delta_ts>2010-01-28 08:47:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34245-20100128180309.patch</filename>
            <type>text/plain</type>
            <size>88158</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Mzk5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTUgQEAKKzIwMTAtMDEtMjggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bmFtZSBJU09EYXRlVGltZS57Y3BwLGh9IHRvIERhdGVDb21wb25lbnRzLntjcHAsaH0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MjQ1CisKKyAgICAg
ICAgTm8gZnVuY3Rpb25hbCBjaGFuZ2VzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0RhdGVDb21wb25lbnRzLmNwcDog
Q29waWVkIGZyb20gV2ViQ29yZS9odG1sL0lTT0RhdGVUaW1lLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVDb21wb25lbnRzOjptYXhXZWVrTnVtYmVySW5ZZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVDb21wb25lbnRzOjpwYXJzZVllYXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNv
bXBvbmVudHM6OmFkZERheSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6YWRk
TWludXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpwYXJzZVRpbWVab25l
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpwYXJzZU1vbnRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpwYXJzZURhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZUNvbXBvbmVudHM6OnBhcnNlV2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29t
cG9uZW50czo6cGFyc2VUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVDb21wb25lbnRzOjpw
YXJzZURhdGVUaW1lTG9jYWwpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnBh
cnNlRGF0ZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnNldE1pbGxp
c2Vjb25kc1NpbmNlTWlkbmlnaHRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29t
cG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZv
ckRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnNldE1pbGxpc2Vjb25k
c1NpbmNlRXBvY2hGb3JEYXRlVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50
czo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVUaW1lTG9jYWwpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZUNvbXBvbmVudHM6OnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JNb250
aCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2lu
Y2VNaWRuaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlz
ZWNvbmRzU2luY2VFcG9jaEZvcldlZWspOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUNvbXBvbmVu
dHM6Om1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVDb21wb25lbnRzOjptaWxsaXNlY29uZHNTaW5jZUVwb2NoKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVDb21wb25lbnRzOjp0b1N0cmluZ0ZvclRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZUNvbXBvbmVudHM6OnRvU3RyaW5nKToKKyAgICAgICAgKiBodG1sL0RhdGVDb21wb25lbnRzLmg6
IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9JU09EYXRlVGltZS5oLgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZUNvbXBvbmVudHM6OkRhdGVDb21wb25lbnRzKToKKyAgICAgICAgKiBodG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cGFy
c2VUb0RvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZUFz
RGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUFzTnVtYmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmZvcm1TdHJpbmdUb0RhdGVD
b21wb25lbnRzKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAg
KiBodG1sL0lTT0RhdGVUaW1lLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL0lTT0RhdGVU
aW1lLmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9WYWxpZGl0eVN0YXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU6OnR5cGVNaXNtYXRjaCk6CisKIDIwMTAtMDEtMjcg
IEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1Mzk3NSkKKysrIFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTk4MCw2ICs5ODAsOCBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9EYXRhR3JpZENvbHVtbkxpc3QuY3BwIFwKIAlXZWJD
b3JlL2h0bWwvRGF0YUdyaWRDb2x1bW5MaXN0LmggXAogCVdlYkNvcmUvaHRtbC9EYXRhR3JpZERh
dGFTb3VyY2UuaCBcCisJV2ViQ29yZS9odG1sL0RhdGVDb21wb25lbnRzLmNwcCBcCisJV2ViQ29y
ZS9odG1sL0RhdGVDb21wb25lbnRzLmggXAogCVdlYkNvcmUvaHRtbC9ET01EYXRhR3JpZERhdGFT
b3VyY2UuY3BwIFwKIAlXZWJDb3JlL2h0bWwvRE9NRGF0YUdyaWREYXRhU291cmNlLmggXAogCVdl
YkNvcmUvaHRtbC9GaWxlLmNwcCBcCkBAIC0xMTUxLDggKzExNTMsNiBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50LmggXAogCVdlYkNvcmUvaHRt
bC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcCBcCiAJV2ViQ29yZS9odG1sL0hUTUxWaWV3U291
cmNlRG9jdW1lbnQuaCBcCi0JV2ViQ29yZS9odG1sL0lTT0RhdGVUaW1lLmNwcCBcCi0JV2ViQ29y
ZS9odG1sL0lTT0RhdGVUaW1lLmggXAogCVdlYkNvcmUvaHRtbC9JbWFnZURhdGEuY3BwIFwKIAlX
ZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmggXAogCVdlYkNvcmUvaHRtbC9NZWRpYUVycm9yLmggXApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHJldmlzaW9uIDUzOTc1KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNzEsNiArMTM3MSw4IEBACiAgICAgICAgICAgICAnaHRtbC9ET01EYXRhR3Jp
ZERhdGFTb3VyY2UuaCcsCiAgICAgICAgICAgICAnaHRtbC9EYXRhR3JpZENvbHVtbkxpc3QuY3Bw
JywKICAgICAgICAgICAgICdodG1sL0RhdGFHcmlkQ29sdW1uTGlzdC5oJywKKyAgICAgICAgICAg
ICdodG1sL0RhdGVDb21wb25lbnRzLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9EYXRlQ29tcG9u
ZW50cy5oJywKICAgICAgICAgICAgICdodG1sL0ZpbGUuY3BwJywKICAgICAgICAgICAgICdodG1s
L0ZpbGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxlTGlzdC5jcHAnLApAQCAtMTU0Nyw4ICsx
NTQ5LDYgQEAKICAgICAgICAgICAgICdodG1sL0hUTUxWaWRlb0VsZW1lbnQuaCcsCiAgICAgICAg
ICAgICAnaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcCcsCiAgICAgICAgICAgICAnaHRt
bC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmgnLAotICAgICAgICAgICAgJ2h0bWwvSVNPRGF0ZVRp
bWUuY3BwJywKLSAgICAgICAgICAgICdodG1sL0lTT0RhdGVUaW1lLmgnLAogICAgICAgICAgICAg
J2h0bWwvSW1hZ2VEYXRhLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9JbWFnZURhdGEuaCcsCiAg
ICAgICAgICAgICAnaHRtbC9NZWRpYUVycm9yLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBy
bwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA1Mzk3NSkKKysr
IFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTU2OSw2ICs1NjksNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBodG1sL0NvbGxlY3Rpb25DYWNoZS5jcHAgXAogICAgIGh0bWwvRGF0
YUdyaWRDb2x1bW4uY3BwIFwKICAgICBodG1sL0RhdGFHcmlkQ29sdW1uTGlzdC5jcHAgXAorICAg
IGh0bWwvRGF0ZUNvbXBvbmVudHMuY3BwIFwKICAgICBodG1sL0RPTURhdGFHcmlkRGF0YVNvdXJj
ZS5jcHAgXAogICAgIGh0bWwvRmlsZS5jcHAgXAogICAgIGh0bWwvRmlsZUxpc3QuY3BwIFwKQEAg
LTY1NCw3ICs2NTUsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBodG1sL0hUTUxUb2tlbml6ZXIuY3Bw
IFwKICAgICBodG1sL0hUTUxVTGlzdEVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxWaWV3U291
cmNlRG9jdW1lbnQuY3BwIFwKLSAgICBodG1sL0lTT0RhdGVUaW1lLmNwcCBcCiAgICAgaHRtbC9J
bWFnZURhdGEuY3BwIFwKICAgICBodG1sL1ByZWxvYWRTY2FubmVyLmNwcCBcCiAgICAgaHRtbC9W
YWxpZGl0eVN0YXRlLmNwcCBcCkBAIC0xMjU0LDYgKzEyNTQsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBodG1sL0NvbGxlY3Rpb25DYWNoZS5oIFwKICAgICBodG1sL0RhdGFHcmlkQ29sdW1uLmggXAog
ICAgIGh0bWwvRGF0YUdyaWRDb2x1bW5MaXN0LmggXAorICAgIGh0bWwvRGF0ZUNvbXBvbmVudHMu
aCBcCiAgICAgaHRtbC9ET01EYXRhR3JpZERhdGFTb3VyY2UuaCBcCiAgICAgaHRtbC9GaWxlLmgg
XAogICAgIGh0bWwvRmlsZUxpc3QuaCBcCkBAIC0xMzQzLDcgKzEzNDQsNiBAQCBIRUFERVJTICs9
IFwKICAgICBodG1sL0hUTUxVTGlzdEVsZW1lbnQuaCBcCiAgICAgaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmggXAogICAgIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oIFwKLSAgICBodG1sL0lT
T0RhdGVUaW1lLmggXAogICAgIGh0bWwvSW1hZ2VEYXRhLmggXAogICAgIGh0bWwvUHJlbG9hZFNj
YW5uZXIuaCBcCiAgICAgaHRtbC9UaW1lUmFuZ2VzLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA1Mzk3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI5ODc3LDYgKzI5ODc3LDE0
IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGh0bWxcRGF0ZUNvbXBvbmVudHMuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxEYXRlQ29tcG9uZW50cy5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxET01EYXRh
R3JpZERhdGFTb3VyY2UuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTM0MDczLDE0ICsz
NDA4MSw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGh0bWxcSVNPRGF0ZVRpbWUuY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxG
aWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxJU09EYXRlVGltZS5oIg0KLQkJCQk+DQot
CQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxNZWRpYUVy
cm9yLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDUzOTc1KQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ4MTIsOCArNDgx
Miw4IEBACiAJCUY1QzA0MUU1MEZGQ0E5NkQwMDgzOUQ0QSAvKiBET01IVE1MRGF0YUxpc3RFbGVt
ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1QzA0MUUwMEZGQ0E5NkQwMDgzOUQ0QSAvKiBET01IVE1MRGF0YUxpc3RFbGVtZW50SW50
ZXJuYWwuaCAqLzsgfTsKIAkJRjVDMDQxRTYwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFM
aXN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNUMwNDFFMTBGRkNBOTZEMDA4MzlENEEgLyogSlNIVE1MRGF0YUxpc3RFbGVtZW50LmNw
cCAqLzsgfTsKIAkJRjVDMDQxRTcwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFMaXN0RWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVD
MDQxRTIwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFMaXN0RWxlbWVudC5oICovOyB9Owot
CQlGNUQzQTU3QzEwNkI4M0IzMDA1NDUyOTcgLyogSVNPRGF0ZVRpbWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVEM0E1N0ExMDZCODNCMzAwNTQ1
Mjk3IC8qIElTT0RhdGVUaW1lLmNwcCAqLzsgfTsKLQkJRjVEM0E1N0QxMDZCODNCMzAwNTQ1Mjk3
IC8qIElTT0RhdGVUaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNUQzQTU3QjEwNkI4M0IzMDA1NDUyOTcgLyogSVNPRGF0ZVRpbWUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNUQzQTU3QzEwNkI4
M0IzMDA1NDUyOTcgLyogRGF0ZUNvbXBvbmVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVEM0E1N0ExMDZCODNCMzAwNTQ1Mjk3IC8qIERhdGVD
b21wb25lbnRzLmNwcCAqLzsgfTsKKwkJRjVEM0E1N0QxMDZCODNCMzAwNTQ1Mjk3IC8qIERhdGVD
b21wb25lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNUQzQTU3QjEwNkI4M0IzMDA1NDUyOTcgLyogRGF0ZUNvbXBvbmVudHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGOTE2QzQ4RDBEQjUxMEY4
MDA3NkNEODMgLyogSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjkxNkM0OEIwREI1MTBGODAwNzZD
RDgzIC8qIEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmNwcCAqLzsgfTsKIAkJRjkxNkM0
OEUwREI1MTBGODAwNzZDRDgzIC8qIEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGOTE2QzQ4QzBEQjUx
MEY4MDA3NkNEODMgLyogSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCAqLzsgfTsKIAkJ
RjlGMEVEN0EwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjlGMEVENzcw
REI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oICovOyB9OwpA
QCAtMTAxMTMsOCArMTAxMTMsOCBAQAogCQlGNUMyODY5MzAyODQ2RENEMDE4NjM1Q0EgLyogQXBw
bGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEFwcGxpY2F0aW9u
U2VydmljZXMuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBw
bGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07
CiAJCUY1QzI4Njk0MDI4NDZEQ0QwMTg2MzVDQSAvKiBDYXJib24uZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdv
cms7IG5hbWUgPSBDYXJib24uZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvQ2FyYm9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJ
RjVDMjg2OTUwMjg0NkRDRDAxODYzNUNBIC8qIENvY29hLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBu
YW1lID0gQ29jb2EuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
Q29jb2EuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwotCQlGNUQzQTU3
QTEwNkI4M0IzMDA1NDUyOTcgLyogSVNPRGF0ZVRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSVNPRGF0ZVRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGNUQzQTU3QjEwNkI4M0IzMDA1NDUyOTcgLyogSVNPRGF0ZVRpbWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSVNPRGF0ZVRpbWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRjVEM0E1N0ExMDZCODNCMzAwNTQ1Mjk3IC8qIERhdGVDb21wb25lbnRz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb21wb25lbnRz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjVEM0E1N0IxMDZCODNCMzAwNTQ1
Mjk3IC8qIERhdGVDb21wb25lbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERhdGVDb21wb25lbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY4MjE2Mjk5
MDI5RjRGQjUwMTAwMDEzMSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsg
cGF0aCA9IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJRjkxNkM0OEIwREI1MTBGODAwNzZDRDgzIC8qIEpTWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY5MTZDNDhDMERCNTEwRjgwMDc2Q0Q4MyAvKiBKU1hNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEy
NzM3LDYgKzEyNzM3LDggQEAKIAkJCQlCQzc3Q0ZBQjBGRjE3M0QzMDA3MDg4N0IgLyogRGF0YUdy
aWRDb2x1bW5MaXN0LmggKi8sCiAJCQkJQkM3N0NGOTgwRkYxNzI0MjAwNzA4ODdCIC8qIERhdGFH
cmlkQ29sdW1uTGlzdC5pZGwgKi8sCiAJCQkJQkNCQ0FFMzYwRkYxOTM4NTAwMDc2MkFFIC8qIERh
dGFHcmlkRGF0YVNvdXJjZS5oICovLAorCQkJCUY1RDNBNTdBMTA2QjgzQjMwMDU0NTI5NyAvKiBE
YXRlQ29tcG9uZW50cy5jcHAgKi8sCisJCQkJRjVEM0E1N0IxMDZCODNCMzAwNTQ1Mjk3IC8qIERh
dGVDb21wb25lbnRzLmggKi8sCiAJCQkJQkM3REFBRUMwRkY5NjE1RDAwQ0UwMTM4IC8qIERPTURh
dGFHcmlkRGF0YVNvdXJjZS5jcHAgKi8sCiAJCQkJQkM3REFBRUQwRkY5NjE1RDAwQ0UwMTM4IC8q
IERPTURhdGFHcmlkRGF0YVNvdXJjZS5oICovLAogCQkJCUJDREJCOENDMEUwODk1ODQwMEM2MEZG
NiAvKiBGaWxlLmNwcCAqLywKQEAgLTEyOTkyLDggKzEyOTk0LDYgQEAKIAkJCQlFNDQ2MTM5QTBD
RDYzMzEwMDBGQURBNzUgLyogSFRNTFZpZGVvRWxlbWVudC5pZGwgKi8sCiAJCQkJQkNDRDc0RTQw
QTRDOERERjAwNUZEQTZEIC8qIEhUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwICovLAogCQkJCUJD
Q0Q3NERCMEE0QzhEMzUwMDVGREE2RCAvKiBIVE1MVmlld1NvdXJjZURvY3VtZW50LmggKi8sCi0J
CQkJRjVEM0E1N0ExMDZCODNCMzAwNTQ1Mjk3IC8qIElTT0RhdGVUaW1lLmNwcCAqLywKLQkJCQlG
NUQzQTU3QjEwNkI4M0IzMDA1NDUyOTcgLyogSVNPRGF0ZVRpbWUuaCAqLywKIAkJCQlBNzc5Nzkx
MzBENkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmNwcCAqLywKIAkJCQlBNzc5NzkxNDBENkI5
RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggKi8sCiAJCQkJQTc3OTc5MTUwRDZCOUQwQzAwMzg1
MUI5IC8qIEltYWdlRGF0YS5pZGwgKi8sCkBAIC0xNjIzNSw2ICsxNjIzNSw3IEBACiAJCQkJQkM3
N0NGQUMwRkYxNzNEMzAwNzA4ODdCIC8qIERhdGFHcmlkQ29sdW1uTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNCQ0FFMzcwRkYxOTM4NTAwMDc2MkFFIC8qIERhdGFHcmlkRGF0YVNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyMjc0NkYwRTgzNjY0NTAwRTdGOTc1IC8qIERhdGFSZWYu
aCBpbiBIZWFkZXJzICovLAorCQkJCUY1RDNBNTdEMTA2QjgzQjMwMDU0NTI5NyAvKiBEYXRlQ29t
cG9uZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2MkE0NTExMDExNDVBRTAwREZGM0VEIC8q
IERlZGljYXRlZFdvcmtlckNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxQTNENThGMTAx
QzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxNjdFQkY2MTAyOTYyQkEwMDNEMjUyQSAvKiBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3Np
dG9yeS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNzE5MCw3ICsxNzE5MSw2IEBACiAJCQkJQkNDRDc0
REMwQTRDOEQzNTAwNUZEQTZEIC8qIEhUTUxWaWV3U291cmNlRG9jdW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxNEM3NjcxMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQSGVhZGVyTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTRDNzY3MzBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUFBhcnNlcnMu
aCBpbiBIZWFkZXJzICovLAotCQkJCUY1RDNBNTdEMTA2QjgzQjMwMDU0NTI5NyAvKiBJU09EYXRl
VGltZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NkUwQjA1MzgxNDAwMkNFNjRGIC8qIElj
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMjZFNkJDMEEyRTNCMTIwMDVDMjlGQSAvKiBJY29u
RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRTFFQ0JFMEM5MUM5MDQwMERDMjU1QiAv
KiBJY29uRGF0YWJhc2VDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTg4OTQsNiArMTg4OTQs
NyBAQAogCQkJCTFBRDUxQTE1MENCNTlDRDMwMDk1M0QxMSAvKiBEYXRhYmFzZVRyYWNrZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0QyMzkwRkYyOTgwODAwNzA4ODdCIC8qIERhdGFHcmlk
Q29sdW1uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMUZEMEZGMjhEOUIwMDcwODg3QiAv
KiBEYXRhR3JpZENvbHVtbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRjVEM0E1N0MxMDZC
ODNCMzAwNTQ1Mjk3IC8qIERhdGVDb21wb25lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQx
NjJBNDUwMTAxMTQ1QUUwMERGRjNFRCAvKiBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQxQTNENThFMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3Jr
ZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE2N0VCRjUxMDI5NjJCQTAwM0QyNTJB
IC8qIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTkzODEsNyArMTkzODIsNiBAQAogCQkJCUJDQ0Q3NEU1MEE0QzhEREYwMDVGREE2RCAvKiBIVE1M
Vmlld1NvdXJjZURvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBCOEM1NkQ0MEYyODYy
N0YwMDA1MDJFMSAvKiBIVFRQSGVhZGVyTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3
NjcyMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlGNUQzQTU3QzEwNkI4M0IzMDA1NDUyOTcgLyogSVNPRGF0ZVRpbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTEyNkU2QkIwQTJFM0IxMjAwNUMyOUZBIC8qIEljb25EYXRhYmFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0NDVDOERCNzEwMDE1RkM5MDAzMTUzMUEgLyogSWNvbkRhdGFiYXNl
Tm9uZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTJENzUzRTBERTQ3RkFCMDBGMEE2NDggLyog
SWNvbkZldGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL2h0bWwvRGF0ZUNv
bXBvbmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9EYXRlQ29tcG9uZW50cy5j
cHAJKHJldmlzaW9uIDUzOTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvSVNPRGF0ZVRpbWUuY3BwOjUz
OTc1KQorKysgV2ViQ29yZS9odG1sL0RhdGVDb21wb25lbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJU09EYXRlVGlt
ZS5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDxsaW1pdHMuaD4K
KyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
VGhlIG9sZGVzdCBkYXkgb2YgR3JlZ29yaWFuIENhbGVuZGFyIGlzIDE1ODItMTAtMTUuIFdlIGRv
bid0IHN1cHBvcnQgZGF0ZXMgb2xkZXIgdGhhbiBpdC4KK3N0YXRpYyBjb25zdCBpbnQgZ3JlZ29y
aWFuU3RhcnRZZWFyID0gMTU4MjsKK3N0YXRpYyBjb25zdCBpbnQgZ3JlZ29yaWFuU3RhcnRNb250
aCA9IDk7IC8vIFRoaXMgaXMgT2N0b2Jlciwgc2luY2UgbW9udGhzIGFyZSAwIGJhc2VkLgorc3Rh
dGljIGNvbnN0IGludCBncmVnb3JpYW5TdGFydERheSA9IDE1OworCitzdGF0aWMgY29uc3QgaW50
IGRheXNJbk1vbnRoWzEyXSA9IHszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAz
MSwgMzAsIDMxfTsKKworc3RhdGljIGJvb2wgaXNMZWFwWWVhcihpbnQgeWVhcikKK3sKKyAgICBp
ZiAoeWVhciAlIDQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoISh5ZWFyICUgNDAw
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCEoeWVhciAlIDEwMCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gYG1vbnRoJyBpcyAwLWJh
c2VkLgorc3RhdGljIGludCBtYXhEYXlPZk1vbnRoKGludCB5ZWFyLCBpbnQgbW9udGgpCit7Cisg
ICAgaWYgKG1vbnRoICE9IDEpIC8vIEZlYnJ1YXJ5PworICAgICAgICByZXR1cm4gZGF5c0luTW9u
dGhbbW9udGhdOworICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyODsKK30KKwor
Ly8gYG1vbnRoJyBpcyAwLWJhc2VkLgorc3RhdGljIGludCBkYXlPZldlZWsoaW50IHllYXIsIGlu
dCBtb250aCwgaW50IGRheSkKK3sKKyAgICBpbnQgc2hpZnRlZE1vbnRoID0gbW9udGggKyAyOwor
ICAgIC8vIDI6SmFudWFyeSwgMzpGZWJ1cnVhcnksIDQ6TWFyY2gsIC4uLgorCisgICAgLy8gWmVs
bGVyJ3MgY29uZ3J1ZW5jZQorICAgIGlmIChzaGlmdGVkTW9udGggPD0gMykgeworICAgICAgICBz
aGlmdGVkTW9udGggKz0gMTI7CisgICAgICAgIHllYXItLTsKKyAgICB9CisgICAgLy8gNDpNYXJj
aCwgLi4uLCAxNDpKYW51YXJ5LCAxNTpGZWJydWFyeQorCisgICAgaW50IGhpZ2hZZWFyID0geWVh
ciAvIDEwMDsKKyAgICBpbnQgbG93WWVhciA9IHllYXIgJSAxMDA7CisgICAgLy8gV2UgYWRkIDYg
dG8gbWFrZSB0aGUgcmVzdWx0IFN1bmRheS1vcmlnaW4uCisgICAgaW50IHJlc3VsdCA9IChkYXkg
KyAxMyAqIHNoaWZ0ZWRNb250aCAvIDUgKyBsb3dZZWFyICsgbG93WWVhciAvIDQgKyBoaWdoWWVh
ciAvIDQgKyA1ICogaGlnaFllYXIgKyA2KSAlIDc7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
aW50IElTT0RhdGVUaW1lOjptYXhXZWVrTnVtYmVySW5ZZWFyKCkgY29uc3QKK3sKKyAgICBpbnQg
ZGF5ID0gZGF5T2ZXZWVrKG1feWVhciwgMCwgMSk7IC8vIEphbnVhcnkgMS4KKyAgICByZXR1cm4g
ZGF5ID09IFRodXJzZGF5IHx8IChkYXkgPT0gV2VkbmVzZGF5ICYmIGlzTGVhcFllYXIobV95ZWFy
KSkgPyA1MyA6IDUyOworfQorCitzdGF0aWMgdW5zaWduZWQgY291bnREaWdpdHMoY29uc3QgVUNo
YXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCkKK3sKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IHN0YXJ0OworICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgewor
ICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChzcmNbaW5kZXhdKSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gaW5kZXggLSBzdGFydDsKK30KKworLy8gVmVyeSBzdHJpY3Qg
aW50ZWdlciBwYXJzZXIuIERvIG5vdCBhbGxvdyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3Bh
Y2UgdW5saWtlIGNoYXJhY3RlcnNUb0ludFN0cmljdCgpLgorc3RhdGljIGJvb2wgdG9JbnQoY29u
c3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBwYXJzZVN0YXJ0LCB1bnNp
Z25lZCBwYXJzZUxlbmd0aCwgaW50JiBvdXQpCit7CisgICAgaWYgKHBhcnNlU3RhcnQgKyBwYXJz
ZUxlbmd0aCA+IGxlbmd0aCB8fCBwYXJzZUxlbmd0aCA8PSAwKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaW50IHZhbHVlID0gMDsKKyAgICBjb25zdCBVQ2hhciogY3VycmVudCA9IHNyYyAr
IHBhcnNlU3RhcnQ7CisgICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1cnJlbnQgKyBwYXJzZUxlbmd0
aDsKKworICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIG5lZ2F0aXZlIG51bWJlcnMgZm9y
IElTTyA4NjAxLgorICAgIGZvciAoOyBjdXJyZW50IDwgZW5kOyArK2N1cnJlbnQpIHsKKyAgICAg
ICAgaWYgKCFpc0FTQ0lJRGlnaXQoKmN1cnJlbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpbnQgZGlnaXQgPSAqY3VycmVudCAtICcwJzsKKyAgICAgICAgaWYgKHZhbHVl
ID4gKElOVF9NQVggLSBkaWdpdCkgLyAxMCkgLy8gQ2hlY2sgZm9yIG92ZXJmbG93LgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2YWx1ZSA9IHZhbHVlICogMTAgKyBkaWdpdDsK
KyAgICB9CisgICAgb3V0ID0gdmFsdWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSVNP
RGF0ZVRpbWU6OnBhcnNlWWVhcihjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQoreworICAgIHVuc2lnbmVkIGRpZ2l0c0xlbmd0
aCA9IGNvdW50RGlnaXRzKHNyYywgbGVuZ3RoLCBzdGFydCk7CisgICAgLy8gTmVlZHMgYXQgbGVh
c3QgNCBkaWdpdHMgYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KKyAgICBpZiAoZGlnaXRzTGVu
Z3RoIDwgNCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGludCB5ZWFyOworICAgIGlmICgh
dG9JbnQoc3JjLCBsZW5ndGgsIHN0YXJ0LCBkaWdpdHNMZW5ndGgsIHllYXIpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgLy8gTm8gc3VwcG9ydCBmb3IgeWVhcnMgYmVmb3JlIEdyZWdvcmlh
biBjYWxlbmRhci4KKyAgICBpZiAoeWVhciA8IGdyZWdvcmlhblN0YXJ0WWVhcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIG1feWVhciA9IHllYXI7CisgICAgZW5kID0gc3RhcnQgKyBkaWdp
dHNMZW5ndGg7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGJlZm9yZUdyZWdv
cmlhblN0YXJ0RGF0ZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgbW9udGhEYXkpCit7CisgICAg
cmV0dXJuIHllYXIgPCBncmVnb3JpYW5TdGFydFllYXIKKyAgICAgICAgfHwgeWVhciA9PSBncmVn
b3JpYW5TdGFydFllYXIgJiYgbW9udGggPCBncmVnb3JpYW5TdGFydE1vbnRoCisgICAgICAgIHx8
IHllYXIgPT0gZ3JlZ29yaWFuU3RhcnRZZWFyICYmIG1vbnRoID09IGdyZWdvcmlhblN0YXJ0TW9u
dGggJiYgbW9udGhEYXkgPCBncmVnb3JpYW5TdGFydERheTsKK30KKworYm9vbCBJU09EYXRlVGlt
ZTo6YWRkRGF5KGludCBkYXlEaWZmKQoreworICAgIEFTU0VSVChtX21vbnRoRGF5KTsKKworICAg
IGludCBkYXkgPSBtX21vbnRoRGF5ICsgZGF5RGlmZjsKKyAgICBpZiAoZGF5ID4gbWF4RGF5T2ZN
b250aChtX3llYXIsIG1fbW9udGgpKSB7CisgICAgICAgIGRheSA9IG1fbW9udGhEYXk7CisgICAg
ICAgIGludCB5ZWFyID0gbV95ZWFyOworICAgICAgICBpbnQgbW9udGggPSBtX21vbnRoOworICAg
ICAgICBpbnQgbWF4RGF5ID0gbWF4RGF5T2ZNb250aCh5ZWFyLCBtb250aCk7CisgICAgICAgIGZv
ciAoOyBkYXlEaWZmID4gMDsgLS1kYXlEaWZmKSB7CisgICAgICAgICAgICArK2RheTsKKyAgICAg
ICAgICAgIGlmIChkYXkgPiBtYXhEYXkpIHsKKyAgICAgICAgICAgICAgICBkYXkgPSAxOworICAg
ICAgICAgICAgICAgICsrbW9udGg7CisgICAgICAgICAgICAgICAgaWYgKG1vbnRoID49IDEyKSB7
IC8vIG1vbnRoIGlzIDAtb3JpZ2luLgorICAgICAgICAgICAgICAgICAgICBtb250aCA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgICsreWVhcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHllYXIg
PCAwKSAvLyBDaGVjayBmb3Igb3ZlcmZsb3cuCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1heERheSA9IG1h
eERheU9mTW9udGgoeWVhciwgbW9udGgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIG1feWVhciA9IHllYXI7CisgICAgICAgIG1fbW9udGggPSBtb250aDsKKyAgICB9IGVsc2Ug
aWYgKGRheSA8IDEpIHsKKyAgICAgICAgaW50IG1vbnRoID0gbV9tb250aDsKKyAgICAgICAgaW50
IHllYXIgPSBtX3llYXI7CisgICAgICAgIGRheSA9IG1fbW9udGhEYXk7CisgICAgICAgIGZvciAo
OyBkYXlEaWZmIDwgMDsgKytkYXlEaWZmKSB7CisgICAgICAgICAgICAtLWRheTsKKyAgICAgICAg
ICAgIGlmIChkYXkgPCAxKSB7CisgICAgICAgICAgICAgICAgLS1tb250aDsKKyAgICAgICAgICAg
ICAgICBpZiAobW9udGggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1vbnRoID0gMTE7Cisg
ICAgICAgICAgICAgICAgICAgIC0teWVhcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZGF5ID0gbWF4RGF5T2ZNb250aCh5ZWFyLCBtb250aCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoYmVmb3JlR3JlZ29yaWFuU3RhcnREYXRlKHllYXIsIG1vbnRoLCBkYXkp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtX3ll
YXIgPSB5ZWFyOworICAgICAgICBtX21vbnRoID0gbW9udGg7CisgICAgfQorICAgIG1fbW9udGhE
YXkgPSBkYXk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSVNPRGF0ZVRpbWU6OmFkZE1p
bnV0ZShpbnQgbWludXRlKQoreworICAgIGludCBjYXJyeTsKKyAgICAvLyBtaW4gY2FuIGJlIG5l
Z2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiA1OS4KKyAgICBtaW51dGUgKz0gbV9taW51dGU7CisgICAg
aWYgKG1pbnV0ZSA+IDU5KSB7CisgICAgICAgIGNhcnJ5ID0gbWludXRlIC8gNjA7CisgICAgICAg
IG1pbnV0ZSA9IG1pbnV0ZSAlIDYwOworICAgIH0gZWxzZSBpZiAobV9taW51dGUgPCAwKSB7Cisg
ICAgICAgIGNhcnJ5ID0gKDU5IC0gbV9taW51dGUpIC8gNjA7CisgICAgICAgIG1pbnV0ZSArPSBj
YXJyeSAqIDYwOworICAgICAgICBjYXJyeSA9IC1jYXJyeTsKKyAgICAgICAgQVNTRVJUKG1pbnV0
ZSA+PSAwICYmIG1pbnV0ZSA8PSA1OSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9taW51dGUg
PSBtaW51dGU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGludCBob3VyID0g
bV9ob3VyICsgY2Fycnk7CisgICAgaWYgKGhvdXIgPiAyMykgeworICAgICAgICBjYXJyeSA9IGhv
dXIgLyAyNDsKKyAgICAgICAgaG91ciA9IGhvdXIgJSAyNDsKKyAgICB9IGVsc2UgaWYgKGhvdXIg
PCAwKSB7CisgICAgICAgIGNhcnJ5ID0gKDIzIC0gaG91cikgLyAyNDsKKyAgICAgICAgaG91ciAr
PSBjYXJyeSAqIDI0OworICAgICAgICBjYXJyeSA9IC1jYXJyeTsKKyAgICAgICAgQVNTRVJUKGhv
dXIgPj0gMCAmJiBob3VyIDw9IDIzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX21pbnV0ZSA9
IG1pbnV0ZTsKKyAgICAgICAgbV9ob3VyID0gaG91cjsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGlmICghYWRkRGF5KGNhcnJ5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IG1fbWludXRlID0gbWludXRlOworICAgIG1faG91ciA9IGhvdXI7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKKy8vIFBhcnNlcyBhIHRpbWV6b25lIHBhcnQsIGFuZCBhZGp1c3QgeWVhciwgbW9udGgs
IG1vbnRoRGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQuCitib29sIElTT0Rh
dGVUaW1lOjpwYXJzZVRpbWVab25lKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCit7CisgICAgaWYgKHN0YXJ0ID49IGxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnQ7Cisg
ICAgaWYgKHNyY1tpbmRleF0gPT0gJ1onKSB7CisgICAgICAgIGVuZCA9IGluZGV4ICsgMTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBtaW51czsKKyAgICBpZiAoc3Jj
W2luZGV4XSA9PSAnKycpCisgICAgICAgIG1pbnVzID0gZmFsc2U7CisgICAgZWxzZSBpZiAoc3Jj
W2luZGV4XSA9PSAnLScpCisgICAgICAgIG1pbnVzID0gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICArK2luZGV4OworCisgICAgaW50IGhvdXI7CisgICAgaW50IG1p
bnV0ZTsKKyAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCwgMiwgaG91cikgfHwgaG91
ciA8IDAgfHwgaG91ciA+IDIzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW5kZXggKz0g
MjsKKworICAgIGlmIChpbmRleCA+PSBsZW5ndGggfHwgc3JjW2luZGV4XSAhPSAnOicpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICArK2luZGV4OworCisgICAgaWYgKCF0b0ludChzcmMsIGxl
bmd0aCwgaW5kZXgsIDIsIG1pbnV0ZSkgfHwgbWludXRlIDwgMCB8fCBtaW51dGUgPiA1OSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGluZGV4ICs9IDI7CisKKyAgICBpZiAobWludXMpIHsK
KyAgICAgICAgaG91ciA9IC1ob3VyOworICAgICAgICBtaW51dGUgPSAtbWludXRlOworICAgIH0K
KworICAgIC8vIFN1YnRyYWN0IHRoZSB0aW1lem9uZSBvZmZzZXQuCisgICAgaWYgKCFhZGRNaW51
dGUoLShob3VyICogNjAgKyBtaW51dGUpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGVu
ZCA9IGluZGV4OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElTT0RhdGVUaW1lOjpwYXJz
ZU1vbnRoKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkJiBlbmQpCit7CisgICAgQVNTRVJUKHNyYyk7CisgICAgdW5zaWduZWQgaW5kZXg7
CisgICAgaWYgKCFwYXJzZVllYXIoc3JjLCBsZW5ndGgsIHN0YXJ0LCBpbmRleCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoaW5kZXggPj0gbGVuZ3RoIHx8IHNyY1tpbmRleF0gIT0g
Jy0nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKytpbmRleDsKKworICAgIGludCBtb250
aDsKKyAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCwgMiwgbW9udGgpIHx8IG1vbnRo
IDwgMSB8fCBtb250aCA+IDEyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLS1tb250aDsK
KyAgICAvLyBObyBzdXBwb3J0IGZvciBtb250aHMgYmVmb3JlIEdyZWdvcmlhbiBjYWxlbmRhci4K
KyAgICBpZiAoYmVmb3JlR3JlZ29yaWFuU3RhcnREYXRlKG1feWVhciwgbW9udGgsIGdyZWdvcmlh
blN0YXJ0RGF5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fbW9udGggPSBtb250aDsK
KyAgICBlbmQgPSBpbmRleCArIDI7CisgICAgbV90eXBlID0gTW9udGg7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgSVNPRGF0ZVRpbWU6OnBhcnNlRGF0ZShjb25zdCBVQ2hhciogc3JjLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQoreworICAgIEFT
U0VSVChzcmMpOworICAgIHVuc2lnbmVkIGluZGV4OworICAgIGlmICghcGFyc2VNb250aChzcmMs
IGxlbmd0aCwgc3RhcnQsIGluZGV4KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vICct
JyBhbmQgMi1kaWdpdHMgYXJlIG5lZWRlZC4KKyAgICBpZiAoaW5kZXggKyAyID49IGxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzcmNbaW5kZXhdICE9ICctJykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICsraW5kZXg7CisKKyAgICBpbnQgZGF5OworICAgIGlmICgh
dG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBkYXkpIHx8IGRheSA8IDEgfHwgZGF5ID4gbWF4
RGF5T2ZNb250aChtX3llYXIsIG1fbW9udGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Ly8gTm8gc3VwcG9ydCBmb3IgZGF0ZXMgYmVmb3JlIEdyZWdvcmlhbiBjYWxlbmRhci4KKyAgICBp
ZiAobV95ZWFyID09IGdyZWdvcmlhblN0YXJ0WWVhciAmJiBtX21vbnRoID09IGdyZWdvcmlhblN0
YXJ0TW9udGggJiYgZGF5IDwgZ3JlZ29yaWFuU3RhcnREYXkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBtX21vbnRoRGF5ID0gZGF5OworICAgIGVuZCA9IGluZGV4ICsgMjsKKyAgICBtX3R5
cGUgPSBEYXRlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElTT0RhdGVUaW1lOjpwYXJz
ZVdlZWsoY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQmIGVuZCkKK3sKKyAgICBBU1NFUlQoc3JjKTsKKyAgICB1bnNpZ25lZCBpbmRleDsK
KyAgICBpZiAoIXBhcnNlWWVhcihzcmMsIGxlbmd0aCwgc3RhcnQsIGluZGV4KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gNCBjaGFyYWN0ZXJzICgnLScgJ1cnIGRpZ2l0IGRpZ2l0
KSBhcmUgbmVlZGVkLgorICAgIGlmIChpbmRleCArIDMgPj0gbGVuZ3RoKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKHNyY1tpbmRleF0gIT0gJy0nKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgKytpbmRleDsKKyAgICBpZiAoc3JjW2luZGV4XSAhPSAnVycpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICArK2luZGV4OworCisgICAgaW50IHdlZWs7CisgICAgaWYgKCF0b0lu
dChzcmMsIGxlbmd0aCwgaW5kZXgsIDIsIHdlZWspIHx8IHdlZWsgPCAxIHx8IHdlZWsgPiBtYXhX
ZWVrTnVtYmVySW5ZZWFyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBObyBzdXBw
b3J0IGZvciB5ZWFycyBvbGRlciB0aGFuIG9yIGVxdWFscyB0byBHcmVnb3JpYW4gY2FsZW5kYXIg
c3RhcnQgeWVhci4KKyAgICBpZiAobV95ZWFyIDw9IGdyZWdvcmlhblN0YXJ0WWVhcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIG1fd2VlayA9IHdlZWs7CisgICAgZW5kID0gaW5kZXggKyAy
OworICAgIG1fdHlwZSA9IFdlZWs7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSVNPRGF0
ZVRpbWU6OnBhcnNlVGltZShjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQoreworICAgIEFTU0VSVChzcmMpOworICAgIGludCBo
b3VyOworICAgIGlmICghdG9JbnQoc3JjLCBsZW5ndGgsIHN0YXJ0LCAyLCBob3VyKSB8fCBob3Vy
IDwgMCB8fCBob3VyID4gMjMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB1bnNpZ25lZCBp
bmRleCA9IHN0YXJ0ICsgMjsKKyAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKHNyY1tpbmRleF0gIT0gJzonKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgKytpbmRleDsKKworICAgIGludCBtaW51dGU7CisgICAgaWYgKCF0b0ludChzcmMs
IGxlbmd0aCwgaW5kZXgsIDIsIG1pbnV0ZSkgfHwgbWludXRlIDwgMCB8fCBtaW51dGUgPiA1OSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGluZGV4ICs9IDI7CisKKyAgICBpbnQgc2Vjb25k
ID0gMDsKKyAgICBpbnQgbWlsbGlzZWNvbmQgPSAwOworICAgIC8vIE9wdGlvbmFsIHNlY29uZCBw
YXJ0LgorICAgIC8vIERvIG5vdCByZXR1cm4gd2l0aCBmYWxzZSBiZWNhdXNlIHRoZSBwYXJ0IGlz
IG9wdGlvbmFsLgorICAgIGlmIChpbmRleCArIDIgPCBsZW5ndGggJiYgc3JjW2luZGV4XSA9PSAn
OicpIHsKKyAgICAgICAgaWYgKHRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCArIDEsIDIsIHNlY29u
ZCkgJiYgc2Vjb25kID49IDAgJiYgc2Vjb25kIDw9IDU5KSB7CisgICAgICAgICAgICBpbmRleCAr
PSAzOworCisgICAgICAgICAgICAvLyBPcHRpb25hbCBmcmFjdGlvbmFsIHNlY29uZCBwYXJ0Lgor
ICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIHNyY1tpbmRleF0gPT0gJy4nKSB7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgZGlnaXRzTGVuZ3RoID0gY291bnREaWdpdHMoc3JjLCBs
ZW5ndGgsIGluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0xlbmd0aCA+ICAw
KSB7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGJv
b2wgb2s7CisgICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNMZW5ndGggPT0gMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb2sgPSB0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgsIDEsIG1p
bGxpc2Vjb25kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kICo9IDEwMDsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNMZW5ndGggPT0gMikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb2sgPSB0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgsIDIsIG1p
bGxpc2Vjb25kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kICo9IDEwOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgLy8gZGlnaXRzTGVuZ3RoID49IDMKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9rID0gdG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAzLCBtaWxsaXNl
Y29uZCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvayk7CisgICAgICAgICAgICAgICAg
ICAgIGluZGV4ICs9IGRpZ2l0c0xlbmd0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgbV9ob3VyID0gaG91cjsKKyAgICBtX21pbnV0ZSA9
IG1pbnV0ZTsKKyAgICBtX3NlY29uZCA9IHNlY29uZDsKKyAgICBtX21pbGxpc2Vjb25kID0gbWls
bGlzZWNvbmQ7CisgICAgZW5kID0gaW5kZXg7CisgICAgbV90eXBlID0gVGltZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBJU09EYXRlVGltZTo6cGFyc2VEYXRlVGltZUxvY2FsKGNvbnN0
IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBl
bmQpCit7CisgICAgQVNTRVJUKHNyYyk7CisgICAgdW5zaWduZWQgaW5kZXg7CisgICAgaWYgKCFw
YXJzZURhdGUoc3JjLCBsZW5ndGgsIHN0YXJ0LCBpbmRleCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKHNyY1tpbmRleF0gIT0gJ1QnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKytpbmRl
eDsKKyAgICBpZiAoIXBhcnNlVGltZShzcmMsIGxlbmd0aCwgaW5kZXgsIGVuZCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBtX3R5cGUgPSBEYXRlVGltZUxvY2FsOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIElTT0RhdGVUaW1lOjpwYXJzZURhdGVUaW1lKGNvbnN0IFVDaGFyKiBz
cmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCit7Cisg
ICAgQVNTRVJUKHNyYyk7CisgICAgdW5zaWduZWQgaW5kZXg7CisgICAgaWYgKCFwYXJzZURhdGUo
c3JjLCBsZW5ndGgsIHN0YXJ0LCBpbmRleCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoaW5kZXggPj0gbGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNyY1tp
bmRleF0gIT0gJ1QnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKytpbmRleDsKKyAgICBp
ZiAoIXBhcnNlVGltZShzcmMsIGxlbmd0aCwgaW5kZXgsIGluZGV4KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghcGFyc2VUaW1lWm9uZShzcmMsIGxlbmd0aCwgaW5kZXgsIGVuZCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3R5cGUgPSBEYXRlVGltZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgcG9zaXRpdmVGbW9kKGRvdWJsZSB2
YWx1ZSwgZG91YmxlIGRpdmlkZXIpCit7CisgICAgZG91YmxlIHJlbWFpbmRlciA9IGZtb2QodmFs
dWUsIGRpdmlkZXIpOworICAgIHJldHVybiByZW1haW5kZXIgPCAwID8gcmVtYWluZGVyICsgZGl2
aWRlciA6IHJlbWFpbmRlcjsKK30KKwordm9pZCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRz
U2luY2VNaWRuaWdodEludGVybmFsKGRvdWJsZSBtc0luRGF5KQoreworICAgIEFTU0VSVChtc0lu
RGF5ID49IDAgJiYgbXNJbkRheSA8IG1zUGVyRGF5KTsKKyAgICBtX21pbGxpc2Vjb25kID0gc3Rh
dGljX2Nhc3Q8aW50PihmbW9kKG1zSW5EYXksIG1zUGVyU2Vjb25kKSk7CisgICAgZG91YmxlIHZh
bHVlID0gZmxvb3IobXNJbkRheSAvIG1zUGVyU2Vjb25kKTsKKyAgICBtX3NlY29uZCA9IHN0YXRp
Y19jYXN0PGludD4oZm1vZCh2YWx1ZSwgc2Vjb25kc1Blck1pbnV0ZSkpOworICAgIHZhbHVlID0g
Zmxvb3IodmFsdWUgLyBzZWNvbmRzUGVyTWludXRlKTsKKyAgICBtX21pbnV0ZSA9IHN0YXRpY19j
YXN0PGludD4oZm1vZCh2YWx1ZSwgbWludXRlc1BlckhvdXIpKTsKKyAgICBtX2hvdXIgPSBzdGF0
aWNfY2FzdDxpbnQ+KHZhbHVlIC8gbWludXRlc1BlckhvdXIpOworfQorCitib29sIElTT0RhdGVU
aW1lOjpzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZUludGVybmFsKGRvdWJsZSBtcykK
K3sKKyAgICBtX3llYXIgPSBtc1RvWWVhcihtcyk7CisgICAgaW50IHllYXJEYXkgPSBkYXlJblll
YXIobXMsIG1feWVhcik7CisgICAgbV9tb250aCA9IG1vbnRoRnJvbURheUluWWVhcih5ZWFyRGF5
LCBpc0xlYXBZZWFyKG1feWVhcikpOworICAgIG1fbW9udGhEYXkgPSBkYXlJbk1vbnRoRnJvbURh
eUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKG1feWVhcikpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZShk
b3VibGUgbXMpCit7CisgICAgbV90eXBlID0gSW52YWxpZDsKKyAgICBpZiAoIWlzZmluaXRlKG1z
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghc2V0TWlsbGlzZWNvbmRzU2luY2VF
cG9jaEZvckRhdGVJbnRlcm5hbChyb3VuZChtcykpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKGJlZm9yZUdyZWdvcmlhblN0YXJ0RGF0ZShtX3llYXIsIG1fbW9udGgsIG1fbW9udGhE
YXkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV90eXBlID0gRGF0ZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9j
aEZvckRhdGVUaW1lKGRvdWJsZSBtcykKK3sKKyAgICBtX3R5cGUgPSBJbnZhbGlkOworICAgIGlm
ICghaXNmaW5pdGUobXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbXMgPSByb3VuZCht
cyk7CisgICAgc2V0TWlsbGlzZWNvbmRzU2luY2VNaWRuaWdodEludGVybmFsKHBvc2l0aXZlRm1v
ZChtcywgbXNQZXJEYXkpKTsKKyAgICBpZiAoIXNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JE
YXRlSW50ZXJuYWwobXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGJlZm9yZUdy
ZWdvcmlhblN0YXJ0RGF0ZShtX3llYXIsIG1fbW9udGgsIG1fbW9udGhEYXkpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgbV90eXBlID0gRGF0ZVRpbWU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSVNPRGF0ZVRpbWU6OnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlVGlt
ZUxvY2FsKGRvdWJsZSBtcykKK3sKKyAgICAvLyBJbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBE
YXRlVGltZUxvY2FsIGlzIHRoZSBzYW1lIGFzIERhdGVUaW1lIGV4Y2VwdCBtX3R5cGUuCisgICAg
aWYgKCFzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZVRpbWUobXMpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgbV90eXBlID0gRGF0ZVRpbWVMb2NhbDsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvck1v
bnRoKGRvdWJsZSBtcykKK3sKKyAgICBtX3R5cGUgPSBJbnZhbGlkOworICAgIGlmICghaXNmaW5p
dGUobXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFzZXRNaWxsaXNlY29uZHNT
aW5jZUVwb2NoRm9yRGF0ZUludGVybmFsKHJvdW5kKG1zKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAvLyBJZ25vcmUgbV9tb250aERheSB1cGRhdGVkIGJ5IHNldE1pbGxpc2Vjb25kc1Np
bmNlRXBvY2hGb3JEYXRlSW50ZXJuYWwoKS4KKyAgICBpZiAoYmVmb3JlR3JlZ29yaWFuU3RhcnRE
YXRlKG1feWVhciwgbV9tb250aCwgZ3JlZ29yaWFuU3RhcnREYXkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgbV90eXBlID0gTW9udGg7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
SVNPRGF0ZVRpbWU6OnNldE1pbGxpc2Vjb25kc1NpbmNlTWlkbmlnaHQoZG91YmxlIG1zKQorewor
ICAgIG1fdHlwZSA9IEludmFsaWQ7CisgICAgaWYgKCFpc2Zpbml0ZShtcykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBzZXRNaWxsaXNlY29uZHNTaW5jZU1pZG5pZ2h0SW50ZXJuYWwocG9z
aXRpdmVGbW9kKHJvdW5kKG1zKSwgbXNQZXJEYXkpKTsKKyAgICBtX3R5cGUgPSBUaW1lOworICAg
IHJldHVybiB0cnVlOworfQorCisvLyBPZmZzZXQgZnJvbSBKYW51YXJ5IDFzdCB0byBNb25kYXkg
b2YgdGhlIElTTyA4NjAxJ3MgZmlyc3Qgd2Vlay4KKy8vICAgZXguIElmIEphbnVhcnkgMXN0IGlz
IEZyaWRheSwgc3VjaCBNb25kYXkgaXMgMyBkYXlzIGxhdGVyLiBSZXR1cm5zIDMuCitzdGF0aWMg
aW50IG9mZnNldFRvMXN0V2Vla1N0YXJ0KGludCB5ZWFyKQoreworICAgIGludCBvZmZzZXRUbzFz
dFdlZWtTdGFydCA9IDEgLSBkYXlPZldlZWsoeWVhciwgMCwgMSk7CisgICAgaWYgKG9mZnNldFRv
MXN0V2Vla1N0YXJ0IDw9IC00KQorICAgICAgICBvZmZzZXRUbzFzdFdlZWtTdGFydCArPSA3Owor
ICAgIHJldHVybiBvZmZzZXRUbzFzdFdlZWtTdGFydDsKK30KKworYm9vbCBJU09EYXRlVGltZTo6
c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvcldlZWsoZG91YmxlIG1zKQoreworICAgIG1fdHlw
ZSA9IEludmFsaWQ7CisgICAgaWYgKCFpc2Zpbml0ZShtcykpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBtcyA9IHJvdW5kKG1zKTsKKworICAgIG1feWVhciA9IG1zVG9ZZWFyKG1zKTsKKyAg
ICAvLyBXZSBkb24ndCBzdXBwb3J0IGdyZWdvcmlhblN0YXJ0WWVhci4gV2VlayBudW1iZXJzIGFy
ZSB1bmRlZmluZWQgaW4gdGhhdCB5ZWFyLgorICAgIGlmIChtX3llYXIgPD0gZ3JlZ29yaWFuU3Rh
cnRZZWFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgeWVhckRheSA9IGRheUlu
WWVhcihtcywgbV95ZWFyKTsKKyAgICBpbnQgb2Zmc2V0ID0gb2Zmc2V0VG8xc3RXZWVrU3RhcnQo
bV95ZWFyKTsKKyAgICBpZiAoeWVhckRheSA8IG9mZnNldCkgeworICAgICAgICAvLyBUaGUgZGF5
IGJlbG9uZ3MgdG8gdGhlIGxhc3Qgd2VlayBvZiB0aGUgcHJldmlvdXMgeWVhci4KKyAgICAgICAg
bV95ZWFyLS07CisgICAgICAgIGlmIChtX3llYXIgPD0gZ3JlZ29yaWFuU3RhcnRZZWFyKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX3dlZWsgPSBtYXhXZWVrTnVtYmVySW5Z
ZWFyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV93ZWVrID0gKCh5ZWFyRGF5IC0gb2Zmc2V0
KSAvIDcpICsgMTsKKyAgICAgICAgaWYgKG1fd2VlayA+IG1heFdlZWtOdW1iZXJJblllYXIoKSkg
eworICAgICAgICAgICAgbV95ZWFyKys7CisgICAgICAgICAgICBtX3dlZWsgPSAxOworICAgICAg
ICB9CisgICAgfQorICAgIG1fdHlwZSA9IFdlZWs7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Rv
dWJsZSBJU09EYXRlVGltZTo6bWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvclRpbWUoKSBjb25zdAor
eworICAgIEFTU0VSVChtX3R5cGUgPT0gVGltZSB8fCBtX3R5cGUgPT0gRGF0ZVRpbWUgfHwgbV90
eXBlID09IERhdGVUaW1lTG9jYWwpOworICAgIHJldHVybiAoKG1faG91ciAqIG1pbnV0ZXNQZXJI
b3VyICsgbV9taW51dGUpICogc2Vjb25kc1Blck1pbnV0ZSArIG1fc2Vjb25kKSAqIG1zUGVyU2Vj
b25kICsgbV9taWxsaXNlY29uZDsKK30KKworZG91YmxlIElTT0RhdGVUaW1lOjptaWxsaXNlY29u
ZHNTaW5jZUVwb2NoKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2Ug
RGF0ZToKKyAgICAgICAgcmV0dXJuIGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIsIG1fbW9udGgs
IG1fbW9udGhEYXkpICogbXNQZXJEYXk7CisgICAgY2FzZSBEYXRlVGltZToKKyAgICBjYXNlIERh
dGVUaW1lTG9jYWw6CisgICAgICAgIHJldHVybiBkYXRlVG9EYXlzRnJvbTE5NzAobV95ZWFyLCBt
X21vbnRoLCBtX21vbnRoRGF5KSAqIG1zUGVyRGF5ICsgbWlsbGlzZWNvbmRzU2luY2VFcG9jaEZv
clRpbWUoKTsKKyAgICBjYXNlIE1vbnRoOgorICAgICAgICByZXR1cm4gZGF0ZVRvRGF5c0Zyb20x
OTcwKG1feWVhciwgbV9tb250aCwgMSkgKiBtc1BlckRheTsKKyAgICBjYXNlIFRpbWU6CisgICAg
ICAgIHJldHVybiBtaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yVGltZSgpOworICAgIGNhc2UgV2Vl
azoKKyAgICAgICAgcmV0dXJuIChkYXRlVG9EYXlzRnJvbTE5NzAobV95ZWFyLCAwLCAxKSArIG9m
ZnNldFRvMXN0V2Vla1N0YXJ0KG1feWVhcikgKyAobV93ZWVrIC0gMSkgKiA3KSAqIG1zUGVyRGF5
OworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBpbnZhbGlkTWlsbGlzZWNvbmRzKCk7Cit9CisKK1N0
cmluZyBJU09EYXRlVGltZTo6dG9TdHJpbmdGb3JUaW1lKFNlY29uZEZvcm1hdCBmb3JtYXQpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBEYXRlVGltZSB8fCBtX3R5cGUgPT0gRGF0ZVRp
bWVMb2NhbCB8fCBtX3R5cGUgPT0gVGltZSk7CisgICAgU2Vjb25kRm9ybWF0IGVmZmVjdGl2ZUZv
cm1hdCA9IGZvcm1hdDsKKyAgICBpZiAobV9taWxsaXNlY29uZCkKKyAgICAgICAgZWZmZWN0aXZl
Rm9ybWF0ID0gTWlsbGlzZWNvbmQ7CisgICAgZWxzZSBpZiAoZm9ybWF0ID09IE5vbmUgJiYgbV9z
ZWNvbmQpCisgICAgICAgIGVmZmVjdGl2ZUZvcm1hdCA9IFNlY29uZDsKKworICAgIHN3aXRjaCAo
ZWZmZWN0aXZlRm9ybWF0KSB7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIC8vIEZhbGxiYWNrIHRvIE5vbmUuCisgICAgY2FzZSBOb25lOgorICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUwMmQ6JTAyZCIsIG1faG91ciwgbV9taW51dGUp
OworICAgIGNhc2UgU2Vjb25kOgorICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUwMmQ6
JTAyZDolMDJkIiwgbV9ob3VyLCBtX21pbnV0ZSwgbV9zZWNvbmQpOworICAgIGNhc2UgTWlsbGlz
ZWNvbmQ6CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJTAyZDolMDJkOiUwMmQuJTAz
ZCIsIG1faG91ciwgbV9taW51dGUsIG1fc2Vjb25kLCBtX21pbGxpc2Vjb25kKTsKKyAgICB9Cit9
CisKK1N0cmluZyBJU09EYXRlVGltZTo6dG9TdHJpbmcoU2Vjb25kRm9ybWF0IGZvcm1hdCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgRGF0ZToKKyAgICAgICAgcmV0
dXJuIFN0cmluZzo6Zm9ybWF0KCIlMDRkLSUwMmQtJTAyZCIsIG1feWVhciwgbV9tb250aCArIDEs
IG1fbW9udGhEYXkpOworICAgIGNhc2UgRGF0ZVRpbWU6CisgICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiJTA0ZC0lMDJkLSUwMmRUIiwgbV95ZWFyLCBtX21vbnRoICsgMSwgbV9tb250aERh
eSkKKyAgICAgICAgICAgICsgdG9TdHJpbmdGb3JUaW1lKGZvcm1hdCkgKyBTdHJpbmcoIloiKTsK
KyAgICBjYXNlIERhdGVUaW1lTG9jYWw6CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgi
JTA0ZC0lMDJkLSUwMmRUIiwgbV95ZWFyLCBtX21vbnRoICsgMSwgbV9tb250aERheSkKKyAgICAg
ICAgICAgICsgdG9TdHJpbmdGb3JUaW1lKGZvcm1hdCk7CisgICAgY2FzZSBNb250aDoKKyAgICAg
ICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlMDRkLSUwMmQiLCBtX3llYXIsIG1fbW9udGggKyAx
KTsKKyAgICBjYXNlIFRpbWU6CisgICAgICAgIHJldHVybiB0b1N0cmluZ0ZvclRpbWUoZm9ybWF0
KTsKKyAgICBjYXNlIFdlZWs6CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJTA0ZC1X
JTAyZCIsIG1feWVhciwgbV93ZWVrKTsKKyAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCIo
SW52YWxpZCBJU09EYXRlVGltZSkiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9odG1sL0RhdGVDb21wb25lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvRGF0ZUNvbXBvbmVudHMuY3BwCShyZXZpc2lvbiA1Mzk3NSkKKysrIFdlYkNvcmUvaHRt
bC9EYXRlQ29tcG9uZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSVNPRGF0ZVRpbWUuaCIKKyNpbmNs
dWRlICJEYXRlQ29tcG9uZW50cy5oIgogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlIDxsaW1pdHMuaD4KQEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIGJvb2wgaXNMZWFwWWVh
cihpbnQgeWVhcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gYG1vbnRoJyBpcyAwLWJhc2Vk
LgorLy8gJ21vbnRoJyBpcyAwLWJhc2VkLgogc3RhdGljIGludCBtYXhEYXlPZk1vbnRoKGludCB5
ZWFyLCBpbnQgbW9udGgpCiB7CiAgICAgaWYgKG1vbnRoICE9IDEpIC8vIEZlYnJ1YXJ5PwpAQCAt
NjUsNyArNjUsNyBAQCBzdGF0aWMgaW50IG1heERheU9mTW9udGgoaW50IHllYXIsIGludCBtCiAg
ICAgcmV0dXJuIGlzTGVhcFllYXIoeWVhcikgPyAyOSA6IDI4OwogfQogCi0vLyBgbW9udGgnIGlz
IDAtYmFzZWQuCisvLyAnbW9udGgnIGlzIDAtYmFzZWQuCiBzdGF0aWMgaW50IGRheU9mV2Vlayhp
bnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KQogewogICAgIGludCBzaGlmdGVkTW9udGggPSBt
b250aCArIDI7CkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBpbnQgZGF5T2ZXZWVrKGludCB5ZWFy
LCBpbnQgbW9udGgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbnQgSVNPRGF0ZVRpbWU6Om1h
eFdlZWtOdW1iZXJJblllYXIoKSBjb25zdAoraW50IERhdGVDb21wb25lbnRzOjptYXhXZWVrTnVt
YmVySW5ZZWFyKCkgY29uc3QKIHsKICAgICBpbnQgZGF5ID0gZGF5T2ZXZWVrKG1feWVhciwgMCwg
MSk7IC8vIEphbnVhcnkgMS4KICAgICByZXR1cm4gZGF5ID09IFRodXJzZGF5IHx8IChkYXkgPT0g
V2VkbmVzZGF5ICYmIGlzTGVhcFllYXIobV95ZWFyKSkgPyA1MyA6IDUyOwpAQCAtMTIzLDcgKzEy
Myw3IEBAIHN0YXRpYyBib29sIHRvSW50KGNvbnN0IFVDaGFyKiBzcmMsIHVuc2kKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBJU09EYXRlVGltZTo6cGFyc2VZZWFyKGNvbnN0IFVDaGFyKiBz
cmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCitib29s
IERhdGVDb21wb25lbnRzOjpwYXJzZVllYXIoY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVu
Z3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKIHsKICAgICB1bnNpZ25lZCBkaWdp
dHNMZW5ndGggPSBjb3VudERpZ2l0cyhzcmMsIGxlbmd0aCwgc3RhcnQpOwogICAgIC8vIE5lZWRz
IGF0IGxlYXN0IDQgZGlnaXRzIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCkBAIC0xNDcsNyAr
MTQ3LDcgQEAgc3RhdGljIGJvb2wgYmVmb3JlR3JlZ29yaWFuU3RhcnREYXRlKGludAogICAgICAg
ICB8fCB5ZWFyID09IGdyZWdvcmlhblN0YXJ0WWVhciAmJiBtb250aCA9PSBncmVnb3JpYW5TdGFy
dE1vbnRoICYmIG1vbnRoRGF5IDwgZ3JlZ29yaWFuU3RhcnREYXk7CiB9CiAKLWJvb2wgSVNPRGF0
ZVRpbWU6OmFkZERheShpbnQgZGF5RGlmZikKK2Jvb2wgRGF0ZUNvbXBvbmVudHM6OmFkZERheShp
bnQgZGF5RGlmZikKIHsKICAgICBBU1NFUlQobV9tb250aERheSk7CiAKQEAgLTE5Nyw3ICsxOTcs
NyBAQCBib29sIElTT0RhdGVUaW1lOjphZGREYXkoaW50IGRheURpZmYpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgSVNPRGF0ZVRpbWU6OmFkZE1pbnV0ZShpbnQgbWludXRlKQorYm9vbCBE
YXRlQ29tcG9uZW50czo6YWRkTWludXRlKGludCBtaW51dGUpCiB7CiAgICAgaW50IGNhcnJ5Owog
ICAgIC8vIG1pbiBjYW4gYmUgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuIDU5LgpAQCAtMjM3LDcg
KzIzNyw3IEBAIGJvb2wgSVNPRGF0ZVRpbWU6OmFkZE1pbnV0ZShpbnQgbWludXRlKQogfQogCiAv
LyBQYXJzZXMgYSB0aW1lem9uZSBwYXJ0LCBhbmQgYWRqdXN0IHllYXIsIG1vbnRoLCBtb250aERh
eSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kLgotYm9vbCBJU09EYXRlVGltZTo6
cGFyc2VUaW1lWm9uZShjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQorYm9vbCBEYXRlQ29tcG9uZW50czo6cGFyc2VUaW1lWm9u
ZShjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCYgZW5kKQogewogICAgIGlmIChzdGFydCA+PSBsZW5ndGgpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTI4Miw3ICsyODIsNyBAQCBib29sIElTT0RhdGVUaW1lOjpwYXJzZVRpbWVab25l
KGNvbnN0IFVDCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSVNPRGF0ZVRpbWU6OnBhcnNl
TW9udGgoY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQmIGVuZCkKK2Jvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlTW9udGgoY29uc3QgVUNo
YXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkK
IHsKICAgICBBU1NFUlQoc3JjKTsKICAgICB1bnNpZ25lZCBpbmRleDsKQEAgLTMwNSw3ICszMDUs
NyBAQCBib29sIElTT0RhdGVUaW1lOjpwYXJzZU1vbnRoKGNvbnN0IFVDaGFyCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgSVNPRGF0ZVRpbWU6OnBhcnNlRGF0ZShjb25zdCBVQ2hhciogc3Jj
LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQorYm9vbCBE
YXRlQ29tcG9uZW50czo6cGFyc2VEYXRlKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCiB7CiAgICAgQVNTRVJUKHNyYyk7CiAg
ICAgdW5zaWduZWQgaW5kZXg7CkBAIC0zMzAsNyArMzMwLDcgQEAgYm9vbCBJU09EYXRlVGltZTo6
cGFyc2VEYXRlKGNvbnN0IFVDaGFyKgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElTT0Rh
dGVUaW1lOjpwYXJzZVdlZWsoY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKK2Jvb2wgRGF0ZUNvbXBvbmVudHM6OnBhcnNlV2Vl
ayhjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCYgZW5kKQogewogICAgIEFTU0VSVChzcmMpOwogICAgIHVuc2lnbmVkIGluZGV4OwpAQCAt
MzU5LDcgKzM1OSw3IEBAIGJvb2wgSVNPRGF0ZVRpbWU6OnBhcnNlV2Vlayhjb25zdCBVQ2hhcioK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJU09EYXRlVGltZTo6cGFyc2VUaW1lKGNvbnN0
IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBl
bmQpCitib29sIERhdGVDb21wb25lbnRzOjpwYXJzZVRpbWUoY29uc3QgVUNoYXIqIHNyYywgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKIHsKICAgICBBU1NF
UlQoc3JjKTsKICAgICBpbnQgaG91cjsKQEAgLTQxNCw3ICs0MTQsNyBAQCBib29sIElTT0RhdGVU
aW1lOjpwYXJzZVRpbWUoY29uc3QgVUNoYXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
SVNPRGF0ZVRpbWU6OnBhcnNlRGF0ZVRpbWVMb2NhbChjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQorYm9vbCBEYXRlQ29tcG9u
ZW50czo6cGFyc2VEYXRlVGltZUxvY2FsKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCiB7CiAgICAgQVNTRVJUKHNyYyk7CiAg
ICAgdW5zaWduZWQgaW5kZXg7CkBAIC00MzEsNyArNDMxLDcgQEAgYm9vbCBJU09EYXRlVGltZTo6
cGFyc2VEYXRlVGltZUxvY2FsKGNvbgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElTT0Rh
dGVUaW1lOjpwYXJzZURhdGVUaW1lKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCitib29sIERhdGVDb21wb25lbnRzOjpwYXJz
ZURhdGVUaW1lKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkJiBlbmQpCiB7CiAgICAgQVNTRVJUKHNyYyk7CiAgICAgdW5zaWduZWQgaW5k
ZXg7CkBAIC00NTYsNyArNDU2LDcgQEAgc3RhdGljIGlubGluZSBkb3VibGUgcG9zaXRpdmVGbW9k
KGRvdWJsZQogICAgIHJldHVybiByZW1haW5kZXIgPCAwID8gcmVtYWluZGVyICsgZGl2aWRlciA6
IHJlbWFpbmRlcjsKIH0KIAotdm9pZCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VN
aWRuaWdodEludGVybmFsKGRvdWJsZSBtc0luRGF5KQordm9pZCBEYXRlQ29tcG9uZW50czo6c2V0
TWlsbGlzZWNvbmRzU2luY2VNaWRuaWdodEludGVybmFsKGRvdWJsZSBtc0luRGF5KQogewogICAg
IEFTU0VSVChtc0luRGF5ID49IDAgJiYgbXNJbkRheSA8IG1zUGVyRGF5KTsKICAgICBtX21pbGxp
c2Vjb25kID0gc3RhdGljX2Nhc3Q8aW50PihmbW9kKG1zSW5EYXksIG1zUGVyU2Vjb25kKSk7CkBA
IC00NjcsNyArNDY3LDcgQEAgdm9pZCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VN
aQogICAgIG1faG91ciA9IHN0YXRpY19jYXN0PGludD4odmFsdWUgLyBtaW51dGVzUGVySG91cik7
CiB9CiAKLWJvb2wgSVNPRGF0ZVRpbWU6OnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRl
SW50ZXJuYWwoZG91YmxlIG1zKQorYm9vbCBEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRz
U2luY2VFcG9jaEZvckRhdGVJbnRlcm5hbChkb3VibGUgbXMpCiB7CiAgICAgbV95ZWFyID0gbXNU
b1llYXIobXMpOwogICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCBtX3llYXIpOwpAQCAt
NDc2LDcgKzQ3Niw3IEBAIGJvb2wgSVNPRGF0ZVRpbWU6OnNldE1pbGxpc2Vjb25kc1NpbmNlRXAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRz
U2luY2VFcG9jaEZvckRhdGUoZG91YmxlIG1zKQorYm9vbCBEYXRlQ29tcG9uZW50czo6c2V0TWls
bGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGUoZG91YmxlIG1zKQogewogICAgIG1fdHlwZSA9IElu
dmFsaWQ7CiAgICAgaWYgKCFpc2Zpbml0ZShtcykpCkBAIC00ODksNyArNDg5LDcgQEAgYm9vbCBJ
U09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZVRpbWUo
ZG91YmxlIG1zKQorYm9vbCBEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9j
aEZvckRhdGVUaW1lKGRvdWJsZSBtcykKIHsKICAgICBtX3R5cGUgPSBJbnZhbGlkOwogICAgIGlm
ICghaXNmaW5pdGUobXMpKQpAQCAtNTA0LDcgKzUwNCw3IEBAIGJvb2wgSVNPRGF0ZVRpbWU6OnNl
dE1pbGxpc2Vjb25kc1NpbmNlRXAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJU09EYXRl
VGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVUaW1lTG9jYWwoZG91YmxlIG1z
KQorYm9vbCBEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVU
aW1lTG9jYWwoZG91YmxlIG1zKQogewogICAgIC8vIEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9m
IERhdGVUaW1lTG9jYWwgaXMgdGhlIHNhbWUgYXMgRGF0ZVRpbWUgZXhjZXB0IG1fdHlwZS4KICAg
ICBpZiAoIXNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlVGltZShtcykpCkBAIC01MTMs
NyArNTEzLDcgQEAgYm9vbCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcAogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNTaW5j
ZUVwb2NoRm9yTW9udGgoZG91YmxlIG1zKQorYm9vbCBEYXRlQ29tcG9uZW50czo6c2V0TWlsbGlz
ZWNvbmRzU2luY2VFcG9jaEZvck1vbnRoKGRvdWJsZSBtcykKIHsKICAgICBtX3R5cGUgPSBJbnZh
bGlkOwogICAgIGlmICghaXNmaW5pdGUobXMpKQpAQCAtNTI3LDcgKzUyNyw3IEBAIGJvb2wgSVNP
RGF0ZVRpbWU6OnNldE1pbGxpc2Vjb25kc1NpbmNlRXAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VNaWRuaWdodChkb3VibGUgbXMp
Citib29sIERhdGVDb21wb25lbnRzOjpzZXRNaWxsaXNlY29uZHNTaW5jZU1pZG5pZ2h0KGRvdWJs
ZSBtcykKIHsKICAgICBtX3R5cGUgPSBJbnZhbGlkOwogICAgIGlmICghaXNmaW5pdGUobXMpKQpA
QCAtNTQ3LDcgKzU0Nyw3IEBAIHN0YXRpYyBpbnQgb2Zmc2V0VG8xc3RXZWVrU3RhcnQoaW50IHll
YXIKICAgICByZXR1cm4gb2Zmc2V0VG8xc3RXZWVrU3RhcnQ7CiB9CiAKLWJvb2wgSVNPRGF0ZVRp
bWU6OnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JXZWVrKGRvdWJsZSBtcykKK2Jvb2wgRGF0
ZUNvbXBvbmVudHM6OnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JXZWVrKGRvdWJsZSBtcykK
IHsKICAgICBtX3R5cGUgPSBJbnZhbGlkOwogICAgIGlmICghaXNmaW5pdGUobXMpKQpAQCAtNTc4
LDEzICs1NzgsMTMgQEAgYm9vbCBJU09EYXRlVGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1kb3VibGUgSVNPRGF0ZVRpbWU6Om1pbGxpc2Vjb25kc1Np
bmNlRXBvY2hGb3JUaW1lKCkgY29uc3QKK2RvdWJsZSBEYXRlQ29tcG9uZW50czo6bWlsbGlzZWNv
bmRzU2luY2VFcG9jaEZvclRpbWUoKSBjb25zdAogewogICAgIEFTU0VSVChtX3R5cGUgPT0gVGlt
ZSB8fCBtX3R5cGUgPT0gRGF0ZVRpbWUgfHwgbV90eXBlID09IERhdGVUaW1lTG9jYWwpOwogICAg
IHJldHVybiAoKG1faG91ciAqIG1pbnV0ZXNQZXJIb3VyICsgbV9taW51dGUpICogc2Vjb25kc1Bl
ck1pbnV0ZSArIG1fc2Vjb25kKSAqIG1zUGVyU2Vjb25kICsgbV9taWxsaXNlY29uZDsKIH0KIAot
ZG91YmxlIElTT0RhdGVUaW1lOjptaWxsaXNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QKK2RvdWJs
ZSBEYXRlQ29tcG9uZW50czo6bWlsbGlzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIERhdGU6CkBAIC02MDUsNyArNjA1LDcgQEAgZG91
YmxlIElTT0RhdGVUaW1lOjptaWxsaXNlY29uZHNTaW5jZUVwbwogICAgIHJldHVybiBpbnZhbGlk
TWlsbGlzZWNvbmRzKCk7CiB9CiAKLVN0cmluZyBJU09EYXRlVGltZTo6dG9TdHJpbmdGb3JUaW1l
KFNlY29uZEZvcm1hdCBmb3JtYXQpIGNvbnN0CitTdHJpbmcgRGF0ZUNvbXBvbmVudHM6OnRvU3Ry
aW5nRm9yVGltZShTZWNvbmRGb3JtYXQgZm9ybWF0KSBjb25zdAogewogICAgIEFTU0VSVChtX3R5
cGUgPT0gRGF0ZVRpbWUgfHwgbV90eXBlID09IERhdGVUaW1lTG9jYWwgfHwgbV90eXBlID09IFRp
bWUpOwogICAgIFNlY29uZEZvcm1hdCBlZmZlY3RpdmVGb3JtYXQgPSBmb3JtYXQ7CkBAIC02Mjcs
NyArNjI3LDcgQEAgU3RyaW5nIElTT0RhdGVUaW1lOjp0b1N0cmluZ0ZvclRpbWUoU2VjbwogICAg
IH0KIH0KIAotU3RyaW5nIElTT0RhdGVUaW1lOjp0b1N0cmluZyhTZWNvbmRGb3JtYXQgZm9ybWF0
KSBjb25zdAorU3RyaW5nIERhdGVDb21wb25lbnRzOjp0b1N0cmluZyhTZWNvbmRGb3JtYXQgZm9y
bWF0KSBjb25zdAogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBEYXRlOgpAQCAt
NjQ4LDcgKzY0OCw3IEBAIFN0cmluZyBJU09EYXRlVGltZTo6dG9TdHJpbmcoU2Vjb25kRm9ybWEK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBTdHJpbmcoIihJbnZhbGlkIElTT0RhdGVUaW1lKSIpOworICAgIHJldHVybiBTdHJpbmco
IihJbnZhbGlkIERhdGVDb21wb25lbnRzKSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2h0bWwvRGF0ZUNvbXBvbmVudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvRGF0ZUNvbXBvbmVudHMuaAkocmV2aXNpb24gNTM5NzUpCShmcm9tIFdlYkNvcmUv
aHRtbC9JU09EYXRlVGltZS5oOjUzOTc1KQorKysgV2ViQ29yZS9odG1sL0RhdGVDb21wb25lbnRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElTT0RhdGVUaW1lX2gK
KyNkZWZpbmUgSVNPRGF0ZVRpbWVfaAorCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0
Zi91bmljb2RlL1VuaWNvZGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdHJp
bmc7CisKKy8vIEFuIElTT0RhdGVUaW1lIGluc3RhbmNlIHJlcHJlc2VudHMgb25lIG9mIHRoZSBm
b2xsb3dpbmcgZGF0ZSBhbmQgdGltZSBjb21iaW5hdGlvbnM6CisvLyAqIE1vbnRoIHR5cGU6IHll
YXItbW9udGgKKy8vICogRGF0ZSB0eXBlOiB5ZWFyLW1vbnRoLWRheQorLy8gKiBXZWVrIHR5cGU6
IHllYXItd2VlaworLy8gKiBUaW1lIHR5cGU6IGhvdXItbWludXRlLXNlY29uZC1taWxsaXNlY29u
ZAorLy8gKiBEYXRlVGltZSBvciBEYXRlVGltZUxvY2FsIHR5cGU6IHllYXItbW9udGgtZGF5IGhv
dXItbWludXRlLXNlY29uZC1taWxsaXNlY29uZAorY2xhc3MgSVNPRGF0ZVRpbWUgeworcHVibGlj
OgorICAgIElTT0RhdGVUaW1lKCkKKyAgICAgICAgOiBtX21pbGxpc2Vjb25kKDApCisgICAgICAg
ICwgbV9zZWNvbmQoMCkKKyAgICAgICAgLCBtX21pbnV0ZSgwKQorICAgICAgICAsIG1faG91cigw
KQorICAgICAgICAsIG1fbW9udGhEYXkoMCkKKyAgICAgICAgLCBtX21vbnRoKDApCisgICAgICAg
ICwgbV95ZWFyKDApCisgICAgICAgICwgbV93ZWVrKDApCisgICAgICAgICwgbV90eXBlKEludmFs
aWQpCisgICAgeworICAgIH0KKworICAgIGludCBtaWxsaXNlY29uZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWlsbGlzZWNvbmQ7IH0KKyAgICBpbnQgc2Vjb25kKCkgY29uc3QgeyByZXR1cm4gbV9zZWNv
bmQ7IH0KKyAgICBpbnQgbWludXRlKCkgY29uc3QgeyByZXR1cm4gbV9taW51dGU7IH0KKyAgICBp
bnQgaG91cigpIGNvbnN0IHsgcmV0dXJuIG1faG91cjsgfQorICAgIGludCBtb250aERheSgpIGNv
bnN0IHsgcmV0dXJuIG1fbW9udGhEYXk7IH0KKyAgICBpbnQgbW9udGgoKSBjb25zdCB7IHJldHVy
biBtX21vbnRoOyB9CisgICAgaW50IGZ1bGxZZWFyKCkgY29uc3QgeyByZXR1cm4gbV95ZWFyOyB9
CisgICAgaW50IHdlZWsoKSBjb25zdCB7IHJldHVybiBtX3dlZWs7IH0KKworICAgIGVudW0gU2Vj
b25kRm9ybWF0IHsKKyAgICAgICAgTm9uZSwgLy8gU3VwcHJlc3MgdGhlIHNlY29uZCBwYXJ0IGFu
ZCB0aGUgbWlsbGlzZWNvbmQgcGFydCBpZiB0aGV5IGFyZSAwLgorICAgICAgICBTZWNvbmQsIC8v
IEFsd2F5cyBzaG93IHRoZSBzZWNvbmQgcGFydCwgYW5kIHN1cHByZXNzIHRoZSBtaWxsaXNlY29u
ZCBwYXJ0IGlmIGl0IGlzIDAuCisgICAgICAgIE1pbGxpc2Vjb25kIC8vIEFsd2F5cyBzaG93IHRo
ZSBzZWNvbmQgcGFydCBhbmQgdGhlIG1pbGxpc2Vjb25kIHBhcnQuCisgICAgfTsKKworICAgIC8v
IFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gZm9yIHRoaXMgaW5zdGFuY2UuCisg
ICAgLy8gVGhlIGZvcm1hdCBhcmd1bWVudCBpcyB2YWxpZCBmb3IgRGF0ZVRpbWUsIERhdGVUaW1l
TG9jYWwsIGFuZCBUaW1lIHR5cGVzLgorICAgIFN0cmluZyB0b1N0cmluZyhTZWNvbmRGb3JtYXQg
Zm9ybWF0ID0gTm9uZSkgY29uc3Q7CisKKyAgICAvLyBwYXJzZSooKSBhbmQgc2V0TWlsbGlzZWNv
bmRzU2luY2UqKCkgZnVuY3Rpb25zIGFyZSBpbml0aWFsaXplcnMgZm9yIGFuCisgICAgLy8gSVNP
RGF0ZVRpbWUgaW5zdGFuY2UuIElmIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gZmFsc2UsIHRoZSBp
bnN0YW5jZQorICAgIC8vIG1pZ2h0IGJlIGludmFsaWQuCisKKyAgICAvLyBUaGUgZm9sbG93aW5n
IHNpeCBmdW5jdGlvbnMgcGFyc2UgdGhlIGlucHV0ICdzcmMnIHdob3NlIGxlbmd0aCBpcworICAg
IC8vICdsZW5ndGgnLCBhbmQgdXBkYXRlcyBzb21lIGZpZWxkcyBvZiB0aGlzIGluc3RhbmNlLiBU
aGUgcGFyc2luZyBzdGFydHMgYXQKKyAgICAvLyBzcmNbc3RhcnRdIGFuZCBleGFtaW5lcyBjaGFy
YWN0ZXJzIGJlZm9yZSBzcmNbbGVuZ3RoXS4KKyAgICAvLyAnc3JjJyBtdXN0IGJlIG5vbi1udWxs
LiBUaGUgJ3NyYycgc3RyaW5nIGRvZXNuJ3QgbmVlZCB0byBiZQorICAgIC8vIG51bGwtdGVybWlu
YXRlZC4KKyAgICAvLyBUaGUgZnVuY3Rpb25zIHJldHVybiB0cnVlIGlmIHRoZSBwYXJzaW5nIHN1
Y2NlZWRzLCBhbmQgc2V0ICdlbmQnIHRvIHRoZQorICAgIC8vIG5leHQgaW5kZXggYWZ0ZXIgdGhl
IGxhc3QgY29uc3VtZWQuIEV4dHJhIGxlYWRpbmcgY2hhcmFjdGVycyBjYXVzZSBwYXJzZQorICAg
IC8vIGZhaWx1cmVzLCBhbmQgdGhlIHRyYWlsaW5nIGV4dHJhIGNoYXJhY3RlcnMgZG9uJ3QgY2F1
c2UgcGFyc2UgZmFpbHVyZXMuCisKKyAgICAvLyBTZXRzIHllYXIgYW5kIG1vbnRoLgorICAgIGJv
b2wgcGFyc2VNb250aChjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCYgZW5kKTsKKyAgICAvLyBTZXRzIHllYXIsIG1vbnRoIGFuZCBtb250
aERheS4KKyAgICBib29sIHBhcnNlRGF0ZShjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKTsKKyAgICAvLyBTZXRzIHllYXIgYW5k
IHdlZWsuCisgICAgYm9vbCBwYXJzZVdlZWsoY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVu
Z3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7CisgICAgLy8gU2V0cyBob3VyLCBt
aW51dGUsIHNlY29uZCBhbmQgbWlsbGlzZWNvbmQuCisgICAgYm9vbCBwYXJzZVRpbWUoY29uc3Qg
VUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVu
ZCk7CisgICAgLy8gU2V0cyB5ZWFyLCBtb250aCwgbW9udGhEYXksIGhvdXIsIG1pbnV0ZSwgc2Vj
b25kIGFuZCBtaWxsaXNlY29uZC4KKyAgICBib29sIHBhcnNlRGF0ZVRpbWVMb2NhbChjb25zdCBV
Q2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5k
KTsKKyAgICAvLyBTZXRzIHllYXIsIG1vbnRoLCBtb250aERheSwgaG91ciwgbWludXRlLCBzZWNv
bmQgYW5kIG1pbGxpc2Vjb25kLCBhbmQgYWRqdXN0cyB0aW1lem9uZS4KKyAgICBib29sIHBhcnNl
RGF0ZVRpbWUoY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQmIGVuZCk7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIHNldE1pbGxpc2Vjb25k
c1NpbmNlRXBvY2hGb3IqKCkgZnVuY3Rpb25zIHRha2UKKyAgICAvLyB0aGUgbnVtYmVyIG9mIG1p
bGxpc2Vjb25kcyBzaW5jZSAxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMCBVVEMgYXMKKyAgICAvLyB0
aGUgYXJndW1lbnQsIGFuZCB1cGRhdGUgYWxsIGZpZWxkcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcK
KyAgICAvLyBJU09EYXRlVGltZSB0eXBlLiBUaGUgZnVuY3Rpb25zIHJldHVybiB0cnVlIGlmIGl0
IHN1Y2NlZWRzLCBhbmQKKyAgICAvLyBmYWxzZSBpZiB0aGV5IGZhaWwuCisKKyAgICAvLyBGb3Ig
RGF0ZSB0eXBlLiBVcGRhdGVzIG1feWVhciwgbV9tb250aCBhbmQgbV9tb250aERheS4KKyAgICBi
b29sIHNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlKGRvdWJsZSBtcyk7CisgICAgLy8g
Rm9yIERhdGVUaW1lIHR5cGUuIFVwZGF0ZXMgbV95ZWFyLCBtX21vbnRoLCBtX21vbnRoRGF5LCBt
X2hvdXIsIG1fbWludXRlLCBtX3NlY29uZCBhbmQgbV9taWxsaXNlY29uZC4KKyAgICBib29sIHNl
dE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlVGltZShkb3VibGUgbXMpOworICAgIC8vIEZv
ciBEYXRlVGltZUxvY2FsIHR5cGUuIFVwZGF0ZXMgbV95ZWFyLCBtX21vbnRoLCBtX21vbnRoRGF5
LCBtX2hvdXIsIG1fbWludXRlLCBtX3NlY29uZCBhbmQgbV9taWxsaXNlY29uZC4KKyAgICBib29s
IHNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlVGltZUxvY2FsKGRvdWJsZSBtcyk7Cisg
ICAgLy8gRm9yIE1vbnRoIHR5cGUuIFVwZGF0ZXMgbV95ZWFyIGFuZCBtX21vbnRoLgorICAgIGJv
b2wgc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvck1vbnRoKGRvdWJsZSBtcyk7CisgICAgLy8g
Rm9yIFdlZWsgdHlwZS4gVXBkYXRlcyBtX3llYXIgYW5kIG1fd2Vlay4KKyAgICBib29sIHNldE1p
bGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JXZWVrKGRvdWJsZSBtcyk7CisKKyAgICAvLyBGb3IgVGlt
ZSB0eXBlLiBVcGRhdGVzIG1faG91ciwgbV9taW51dGUsIG1fc2Vjb25kIGFuZCBtX21pbGxpc2Vj
b25kLgorICAgIGJvb2wgc2V0TWlsbGlzZWNvbmRzU2luY2VNaWRuaWdodChkb3VibGUgbXMpOwor
CisgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIDE5NzAtMDEt
MDEgMDA6MDA6MDAgVVRDLgorICAgIC8vIEZvciBhbiBJU09EYXRlVGltZSBpbml0aWFsaXplZCB3
aXRoIHBhcnNlRGF0ZVRpbWVMb2NhbCgpLAorICAgIC8vIG1pbGxpc2Vjb25kc1NpbmNlRXBvY2go
KSByZXR1cm5zIGEgdmFsdWUgZm9yIFVUQyB0aW1lem9uZS4KKyAgICBkb3VibGUgbWlsbGlzZWNv
bmRzU2luY2VFcG9jaCgpIGNvbnN0OworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGludmFsaWRN
aWxsaXNlY29uZHMoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpOyB9CisKK3ByaXZhdGU6CisgICAgLy8gUmV0dXJucyB0aGUgbWF4aW11bSB3ZWVrIG51
bWJlciBpbiB0aGlzIElTT0RhdGVUaW1lJ3MgeWVhci4KKyAgICAvLyBUaGUgcmVzdWx0IGlzIGVp
dGhlciBvZiA1MiBhbmQgNTMuCisgICAgaW50IG1heFdlZWtOdW1iZXJJblllYXIoKSBjb25zdDsK
KyAgICBib29sIHBhcnNlWWVhcihjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKTsKKyAgICBib29sIGFkZERheShpbnQpOworICAg
IGJvb2wgYWRkTWludXRlKGludCk7CisgICAgYm9vbCBwYXJzZVRpbWVab25lKGNvbnN0IFVDaGFy
KiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOwor
ICAgIC8vIEhlbHBlciBmb3IgbWlsbGlzZWNvbmRzU2luY2VFcG9jaCgpLgorICAgIGRvdWJsZSBt
aWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yVGltZSgpIGNvbnN0OworICAgIC8vIEhlbHBlcnMgZm9y
IHNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3IqKCkuCisgICAgYm9vbCBzZXRNaWxsaXNlY29u
ZHNTaW5jZUVwb2NoRm9yRGF0ZUludGVybmFsKGRvdWJsZSBtcyk7CisgICAgdm9pZCBzZXRNaWxs
aXNlY29uZHNTaW5jZU1pZG5pZ2h0SW50ZXJuYWwoZG91YmxlIG1zKTsKKyAgICAvLyBIZWxwZXIg
Zm9yIHRvU3RyaW5nKCkuCisgICAgU3RyaW5nIHRvU3RyaW5nRm9yVGltZShTZWNvbmRGb3JtYXQp
IGNvbnN0OworCisgICAgLy8gbV93ZWVrRGF5IHZhbHVlcworICAgIGVudW0geworICAgICAgICBT
dW5kYXkgPSAwLAorICAgICAgICBNb25kYXksCisgICAgICAgIFR1ZXNkYXksCisgICAgICAgIFdl
ZG5lc2RheSwKKyAgICAgICAgVGh1cnNkYXksCisgICAgICAgIEZyaWRheSwKKyAgICAgICAgU2F0
dXJkYXksCisgICAgfTsKKworICAgIGludCBtX21pbGxpc2Vjb25kOyAgLy8gMCAtIDk5OQorICAg
IGludCBtX3NlY29uZDsKKyAgICBpbnQgbV9taW51dGU7CisgICAgaW50IG1faG91cjsKKyAgICBp
bnQgbV9tb250aERheTsgIC8vIDEgLSAzMQorICAgIGludCBtX21vbnRoOyAgLy8gMDpKYW51YXJ5
IC0gMTE6RGVjZW1iZXIKKyAgICBpbnQgbV95ZWFyOyAgLy8gIDE1ODIgLQorICAgIGludCBtX3dl
ZWs7ICAvLyAxIC0gNTMKKworICAgIGVudW0gVHlwZSB7CisgICAgICAgIEludmFsaWQsCisgICAg
ICAgIERhdGUsCisgICAgICAgIERhdGVUaW1lLAorICAgICAgICBEYXRlVGltZUxvY2FsLAorICAg
ICAgICBNb250aCwKKyAgICAgICAgVGltZSwKKyAgICAgICAgV2VlaywKKyAgICB9OworICAgIFR5
cGUgbV90eXBlOworfTsKKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBJ
U09EYXRlVGltZV9oCkluZGV4OiBXZWJDb3JlL2h0bWwvRGF0ZUNvbXBvbmVudHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvRGF0ZUNvbXBvbmVudHMuaAkocmV2aXNpb24gNTM5NzUpCisr
KyBXZWJDb3JlL2h0bWwvRGF0ZUNvbXBvbmVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCAr
MjgsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIElTT0RhdGVUaW1lX2gKLSNk
ZWZpbmUgSVNPRGF0ZVRpbWVfaAorI2lmbmRlZiBEYXRlQ29tcG9uZW50c19oCisjZGVmaW5lIERh
dGVDb21wb25lbnRzX2gKIAogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9Vbmljb2RlLmg+CkBAIC0zOCwxNSArMzgsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBTdHJpbmc7CiAKLS8vIEFuIElTT0RhdGVUaW1lIGluc3RhbmNlIHJlcHJlc2VudHMgb25l
IG9mIHRoZSBmb2xsb3dpbmcgZGF0ZSBhbmQgdGltZSBjb21iaW5hdGlvbnM6CisvLyBBIERhdGVD
b21wb25lbnRzIGluc3RhbmNlIHJlcHJlc2VudHMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZGF0ZSBh
bmQgdGltZSBjb21iaW5hdGlvbnM6CiAvLyAqIE1vbnRoIHR5cGU6IHllYXItbW9udGgKIC8vICog
RGF0ZSB0eXBlOiB5ZWFyLW1vbnRoLWRheQogLy8gKiBXZWVrIHR5cGU6IHllYXItd2VlawogLy8g
KiBUaW1lIHR5cGU6IGhvdXItbWludXRlLXNlY29uZC1taWxsaXNlY29uZAogLy8gKiBEYXRlVGlt
ZSBvciBEYXRlVGltZUxvY2FsIHR5cGU6IHllYXItbW9udGgtZGF5IGhvdXItbWludXRlLXNlY29u
ZC1taWxsaXNlY29uZAotY2xhc3MgSVNPRGF0ZVRpbWUgeworY2xhc3MgRGF0ZUNvbXBvbmVudHMg
ewogcHVibGljOgotICAgIElTT0RhdGVUaW1lKCkKKyAgICBEYXRlQ29tcG9uZW50cygpCiAgICAg
ICAgIDogbV9taWxsaXNlY29uZCgwKQogICAgICAgICAsIG1fc2Vjb25kKDApCiAgICAgICAgICwg
bV9taW51dGUoMCkKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIFN0cmluZyB0b1N0cmlu
ZyhTZWNvbmRGb3JtYXQgZm9ybWF0ID0gTm9uZSkgY29uc3Q7CiAKICAgICAvLyBwYXJzZSooKSBh
bmQgc2V0TWlsbGlzZWNvbmRzU2luY2UqKCkgZnVuY3Rpb25zIGFyZSBpbml0aWFsaXplcnMgZm9y
IGFuCi0gICAgLy8gSVNPRGF0ZVRpbWUgaW5zdGFuY2UuIElmIHRoZXNlIGZ1bmN0aW9ucyByZXR1
cm4gZmFsc2UsIHRoZSBpbnN0YW5jZQorICAgIC8vIERhdGVDb21wb25lbnRzIGluc3RhbmNlLiBJ
ZiB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIGZhbHNlLCB0aGUgaW5zdGFuY2UKICAgICAvLyBtaWdo
dCBiZSBpbnZhbGlkLgogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBzaXggZnVuY3Rpb25zIHBhcnNl
IHRoZSBpbnB1dCAnc3JjJyB3aG9zZSBsZW5ndGggaXMKQEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJs
aWM6CiAgICAgLy8gVGhlIGZvbGxvd2luZyBzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yKigp
IGZ1bmN0aW9ucyB0YWtlCiAgICAgLy8gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2Ug
MTk3MC0wMS0wMSAwMDowMDowMC4wMDAgVVRDIGFzCiAgICAgLy8gdGhlIGFyZ3VtZW50LCBhbmQg
dXBkYXRlIGFsbCBmaWVsZHMgZm9yIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgLy8gSVNPRGF0ZVRp
bWUgdHlwZS4gVGhlIGZ1bmN0aW9ucyByZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkcywgYW5kCisg
ICAgLy8gRGF0ZUNvbXBvbmVudHMgdHlwZS4gVGhlIGZ1bmN0aW9ucyByZXR1cm4gdHJ1ZSBpZiBp
dCBzdWNjZWVkcywgYW5kCiAgICAgLy8gZmFsc2UgaWYgdGhleSBmYWlsLgogCiAgICAgLy8gRm9y
IERhdGUgdHlwZS4gVXBkYXRlcyBtX3llYXIsIG1fbW9udGggYW5kIG1fbW9udGhEYXkuCkBAIC0x
MjUsMTMgKzEyNSwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRNaWxsaXNlY29uZHNTaW5jZU1p
ZG5pZ2h0KGRvdWJsZSBtcyk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbWlsbGlz
ZWNvbmRzIGZyb20gMTk3MC0wMS0wMSAwMDowMDowMCBVVEMuCi0gICAgLy8gRm9yIGFuIElTT0Rh
dGVUaW1lIGluaXRpYWxpemVkIHdpdGggcGFyc2VEYXRlVGltZUxvY2FsKCksCisgICAgLy8gRm9y
IGEgRGF0ZUNvbXBvbmVudHMgaW5pdGlhbGl6ZWQgd2l0aCBwYXJzZURhdGVUaW1lTG9jYWwoKSwK
ICAgICAvLyBtaWxsaXNlY29uZHNTaW5jZUVwb2NoKCkgcmV0dXJucyBhIHZhbHVlIGZvciBVVEMg
dGltZXpvbmUuCiAgICAgZG91YmxlIG1pbGxpc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdDsKICAg
ICBzdGF0aWMgaW5saW5lIGRvdWJsZSBpbnZhbGlkTWlsbGlzZWNvbmRzKCkgeyByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsgfQogCiBwcml2YXRlOgotICAg
IC8vIFJldHVybnMgdGhlIG1heGltdW0gd2VlayBudW1iZXIgaW4gdGhpcyBJU09EYXRlVGltZSdz
IHllYXIuCisgICAgLy8gUmV0dXJucyB0aGUgbWF4aW11bSB3ZWVrIG51bWJlciBpbiB0aGlzIERh
dGVDb21wb25lbnRzJ3MgeWVhci4KICAgICAvLyBUaGUgcmVzdWx0IGlzIGVpdGhlciBvZiA1MiBh
bmQgNTMuCiAgICAgaW50IG1heFdlZWtOdW1iZXJJblllYXIoKSBjb25zdDsKICAgICBib29sIHBh
cnNlWWVhcihjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCYgZW5kKTsKQEAgLTE1NywxNCArMTU3LDE0IEBAIHByaXZhdGU6CiAgICAgICAg
IFNhdHVyZGF5LAogICAgIH07CiAKLSAgICBpbnQgbV9taWxsaXNlY29uZDsgIC8vIDAgLSA5OTkK
KyAgICBpbnQgbV9taWxsaXNlY29uZDsgLy8gMCAtIDk5OQogICAgIGludCBtX3NlY29uZDsKICAg
ICBpbnQgbV9taW51dGU7CiAgICAgaW50IG1faG91cjsKLSAgICBpbnQgbV9tb250aERheTsgIC8v
IDEgLSAzMQotICAgIGludCBtX21vbnRoOyAgLy8gMDpKYW51YXJ5IC0gMTE6RGVjZW1iZXIKLSAg
ICBpbnQgbV95ZWFyOyAgLy8gIDE1ODIgLQotICAgIGludCBtX3dlZWs7ICAvLyAxIC0gNTMKKyAg
ICBpbnQgbV9tb250aERheTsgLy8gMSAtIDMxCisgICAgaW50IG1fbW9udGg7IC8vIDA6SmFudWFy
eSAtIDExOkRlY2VtYmVyCisgICAgaW50IG1feWVhcjsgLy8gIDE1ODIgLQorICAgIGludCBtX3dl
ZWs7IC8vIDEgLSA1MwogCiAgICAgZW51bSBUeXBlIHsKICAgICAgICAgSW52YWxpZCwKQEAgLTE4
MSw0ICsxODEsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyBJU09EYXRlVGltZV9oCisjZW5kaWYgLy8gRGF0ZUNvbXBvbmVudHNfaApJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNTM5NzUpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgog
I2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFdmVu
dC5oIgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCi0jaW5j
bHVkZSAiSVNPRGF0ZVRpbWUuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIK
QEAgLTE0OTIsMTAgKzE0OTIsMTAgQEAgZG91YmxlIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlVG9E
b3VibGUoYwogICAgIGNhc2UgTU9OVEg6CiAgICAgY2FzZSBUSU1FOgogICAgIGNhc2UgV0VFSzog
ewotICAgICAgICBJU09EYXRlVGltZSBkYXRlVGltZTsKLSAgICAgICAgaWYgKCFmb3JtU3RyaW5n
VG9JU09EYXRlVGltZShpbnB1dFR5cGUoKSwgc3JjLCAmZGF0ZVRpbWUpKQorICAgICAgICBEYXRl
Q29tcG9uZW50cyBkYXRlOworICAgICAgICBpZiAoIWZvcm1TdHJpbmdUb0RhdGVDb21wb25lbnRz
KGlucHV0VHlwZSgpLCBzcmMsICZkYXRlKSkKICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFs
dWU7Ci0gICAgICAgIGRvdWJsZSBtc2VjID0gZGF0ZVRpbWUubWlsbGlzZWNvbmRzU2luY2VFcG9j
aCgpOworICAgICAgICBkb3VibGUgbXNlYyA9IGRhdGUubWlsbGlzZWNvbmRzU2luY2VFcG9jaCgp
OwogICAgICAgICBBU1NFUlQoaXNmaW5pdGUobXNlYykpOwogICAgICAgICByZXR1cm4gbXNlYzsK
ICAgICB9CkBAIC0xNTM4LDcgKzE1MzgsNyBAQCBkb3VibGUgSFRNTElucHV0RWxlbWVudDo6dmFs
dWVBc0RhdGUoKSBjCiAgICAgY2FzZSBNT05USDoKICAgICBjYXNlIFRJTUU6CiAgICAgY2FzZSBX
RUVLOgotICAgICAgICByZXR1cm4gcGFyc2VUb0RvdWJsZSh2YWx1ZSgpLCBJU09EYXRlVGltZTo6
aW52YWxpZE1pbGxpc2Vjb25kcygpKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlVG9Eb3VibGUodmFs
dWUoKSwgRGF0ZUNvbXBvbmVudHM6OmludmFsaWRNaWxsaXNlY29uZHMoKSk7CiAKICAgICBjYXNl
IEJVVFRPTjoKICAgICBjYXNlIENIRUNLQk9YOgpAQCAtMTU1OSwzMSArMTU1OSwzMSBAQCBkb3Vi
bGUgSFRNTElucHV0RWxlbWVudDo6dmFsdWVBc0RhdGUoKSBjCiAgICAgY2FzZSBURUxFUEhPTkU6
CiAgICAgY2FzZSBURVhUOgogICAgIGNhc2UgVVJMOgotICAgICAgICByZXR1cm4gSVNPRGF0ZVRp
bWU6OmludmFsaWRNaWxsaXNlY29uZHMoKTsKKyAgICAgICAgcmV0dXJuIERhdGVDb21wb25lbnRz
OjppbnZhbGlkTWlsbGlzZWNvbmRzKCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBJU09EYXRlVGltZTo6aW52YWxpZE1pbGxpc2Vjb25kcygpOworICAgIHJl
dHVybiBEYXRlQ29tcG9uZW50czo6aW52YWxpZE1pbGxpc2Vjb25kcygpOwogfQogCiB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7Ci0gICAgSVNPRGF0ZVRpbWUgZGF0ZVRpbWU7CisgICAgRGF0ZUNvbXBvbmVudHMg
ZGF0ZTsKICAgICBib29sIHN1Y2Nlc3M7CiAgICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgewogICAg
IGNhc2UgREFURToKLSAgICAgICAgc3VjY2VzcyA9IGRhdGVUaW1lLnNldE1pbGxpc2Vjb25kc1Np
bmNlRXBvY2hGb3JEYXRlKHZhbHVlKTsKKyAgICAgICAgc3VjY2VzcyA9IGRhdGUuc2V0TWlsbGlz
ZWNvbmRzU2luY2VFcG9jaEZvckRhdGUodmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IERBVEVUSU1FOgotICAgICAgICBzdWNjZXNzID0gZGF0ZVRpbWUuc2V0TWlsbGlzZWNvbmRzU2lu
Y2VFcG9jaEZvckRhdGVUaW1lKHZhbHVlKTsKKyAgICAgICAgc3VjY2VzcyA9IGRhdGUuc2V0TWls
bGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVUaW1lKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBNT05USDoKLSAgICAgICAgc3VjY2VzcyA9IGRhdGVUaW1lLnNldE1pbGxpc2Vjb25k
c1NpbmNlRXBvY2hGb3JNb250aCh2YWx1ZSk7CisgICAgICAgIHN1Y2Nlc3MgPSBkYXRlLnNldE1p
bGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JNb250aCh2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgVElNRToKLSAgICAgICAgc3VjY2VzcyA9IGRhdGVUaW1lLnNldE1pbGxpc2Vjb25kc1Np
bmNlTWlkbmlnaHQodmFsdWUpOworICAgICAgICBzdWNjZXNzID0gZGF0ZS5zZXRNaWxsaXNlY29u
ZHNTaW5jZU1pZG5pZ2h0KHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXRUVLOgot
ICAgICAgICBzdWNjZXNzID0gZGF0ZVRpbWUuc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvcldl
ZWsodmFsdWUpOworICAgICAgICBzdWNjZXNzID0gZGF0ZS5zZXRNaWxsaXNlY29uZHNTaW5jZUVw
b2NoRm9yV2Vlayh2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQlVUVE9OOgogICAg
IGNhc2UgQ0hFQ0tCT1g6CkBAIC0xNjE3LDcgKzE2MTcsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFZhbHVlQXNEYXRlKGRvCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzcGVjaWZ5IFNl
Y29uZEZvcm1hdC4KICAgICAvLyBlLmcuIElmIHRoZSBzdGVwIHZhbHVlIGlzIDYwLCB1c2UgU2Vj
b25kRm9ybWF0OjpOb25lLgogICAgIC8vICAgICAgSWYgdGhlIHN0ZXAgdmFsdWUgaXMgMSwgdXNl
IFNlY29uZEZvcm1hdDo6U2Vjb25kLgotICAgIHNldFZhbHVlKGRhdGVUaW1lLnRvU3RyaW5nKCkp
OworICAgIHNldFZhbHVlKGRhdGUudG9TdHJpbmcoKSk7CiB9CiAKIGRvdWJsZSBIVE1MSW5wdXRF
bGVtZW50Ojp2YWx1ZUFzTnVtYmVyKCkgY29uc3QKQEAgLTE2NzEsMTUgKzE2NzEsMTUgQEAgdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUFzTnVtYmVyKAogICAgICAgICBzZXRWYWx1ZUFz
RGF0ZShuZXdWYWx1ZSwgZWMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBEQVRFVElNRUxP
Q0FMOiB7Ci0gICAgICAgIElTT0RhdGVUaW1lIGRhdGVUaW1lOwotICAgICAgICBpZiAoIWRhdGVU
aW1lLnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlVGltZUxvY2FsKG5ld1ZhbHVlKSkg
eworICAgICAgICBEYXRlQ29tcG9uZW50cyBkYXRlOworICAgICAgICBpZiAoIWRhdGUuc2V0TWls
bGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVUaW1lTG9jYWwobmV3VmFsdWUpKSB7CiAgICAgICAg
ICAgICBzZXRWYWx1ZShTdHJpbmcoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzcGVjaWZ5IFNlY29uZEZvcm1hdC4KICAgICAg
ICAgLy8gZS5nLiBJZiB0aGUgc3RlcCB2YWx1ZSBpcyA2MCwgdXNlIFNlY29uZEZvcm1hdDo6Tm9u
ZS4KICAgICAgICAgLy8gICAgICBJZiB0aGUgc3RlcCB2YWx1ZSBpcyAxLCB1c2UgU2Vjb25kRm9y
bWF0OjpTZWNvbmQuCi0gICAgICAgIHNldFZhbHVlKGRhdGVUaW1lLnRvU3RyaW5nKCkpOworICAg
ICAgICBzZXRWYWx1ZShkYXRlLnRvU3RyaW5nKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGNhc2UgTlVNQkVSOgpAQCAtMjQ0OCwxMSArMjQ0OCwxMSBAQCBib29sIEhUTUxJbnB1dEVs
ZW1lbnQ6OmZvcm1TdHJpbmdUb0RvdWJsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSFRN
TElucHV0RWxlbWVudDo6Zm9ybVN0cmluZ1RvSVNPRGF0ZVRpbWUoSW5wdXRUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgZm9ybVN0cmluZywgSVNPRGF0ZVRpbWUqIG91dCkKK2Jvb2wgSFRNTElucHV0
RWxlbWVudDo6Zm9ybVN0cmluZ1RvRGF0ZUNvbXBvbmVudHMoSW5wdXRUeXBlIHR5cGUsIGNvbnN0
IFN0cmluZyYgZm9ybVN0cmluZywgRGF0ZUNvbXBvbmVudHMqIG91dCkKIHsKICAgICBpZiAoZm9y
bVN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBJU09EYXRlVGlt
ZSBpZ25vcmVkUmVzdWx0OworICAgIERhdGVDb21wb25lbnRzIGlnbm9yZWRSZXN1bHQ7CiAgICAg
aWYgKCFvdXQpCiAgICAgICAgIG91dCA9ICZpZ25vcmVkUmVzdWx0OwogICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzID0gZm9ybVN0cmluZy5jaGFyYWN0ZXJzKCk7CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmgJKHJldmlzaW9uIDUzOTc1KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgRGF0ZUNvbXBvbmVudHM7CiBjbGFzcyBGaWxlTGlzdDsKIGNsYXNz
IEhUTUxEYXRhTGlzdEVsZW1lbnQ7CiBjbGFzcyBIVE1MSW1hZ2VMb2FkZXI7CiBjbGFzcyBIVE1M
T3B0aW9uRWxlbWVudDsKLWNsYXNzIElTT0RhdGVUaW1lOwogY2xhc3MgS1VSTDsKIGNsYXNzIFZp
c2libGVTZWxlY3Rpb247CiAKQEAgLTI2Nyw5ICsyNjcsOSBAQCBwdWJsaWM6CiAgICAgLy8gSFRN
TDUncyAiYWxnb3JpdGhtIHRvIGNvbnZlcnQgYSBudW1iZXIgdG8gYSBzdHJpbmciIGZvciBOVU1C
RVIvUkFOR0UgdHlwZXMuCiAgICAgc3RhdGljIFN0cmluZyBmb3JtU3RyaW5nRnJvbURvdWJsZShk
b3VibGUpOwogICAgIC8vIFBhcnNlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyBhcyB0aGUgSW5wdXRU
eXBlLCBhbmQgcmV0dXJucyB0cnVlIGlmIGl0IGlzIHN1Y2Nlc3NmdWxseSBwYXJzZWQuCi0gICAg
Ly8gQW4gaW5zdGFuY2UgcG9pbnRlZCBieSB0aGUgSVNPRGF0ZVRpbWUqIHBhcmFtZXRlciB3aWxs
IGhhdmUgcGFyc2VkIHZhbHVlcyBhbmQgYmUKLSAgICAvLyBtb2RpZmllZCBldmVuIGlmIHRoZSBw
YXJzaW5nIGZhaWxzLiAgVGhlIElTT0RhdGVUaW1lKiBwYXJhbWV0ZXIgbWF5IGJlIDAuCi0gICAg
c3RhdGljIGJvb2wgZm9ybVN0cmluZ1RvSVNPRGF0ZVRpbWUoSW5wdXRUeXBlLCBjb25zdCBTdHJp
bmcmLCBJU09EYXRlVGltZSopOworICAgIC8vIEFuIGluc3RhbmNlIHBvaW50ZWQgYnkgdGhlIERh
dGVDb21wb25lbnRzKiBwYXJhbWV0ZXIgd2lsbCBoYXZlIHBhcnNlZCB2YWx1ZXMgYW5kIGJlCisg
ICAgLy8gbW9kaWZpZWQgZXZlbiBpZiB0aGUgcGFyc2luZyBmYWlscy4gIFRoZSBEYXRlQ29tcG9u
ZW50cyogcGFyYW1ldGVyIG1heSBiZSAwLgorICAgIHN0YXRpYyBib29sIGZvcm1TdHJpbmdUb0Rh
dGVDb21wb25lbnRzKElucHV0VHlwZSwgY29uc3QgU3RyaW5nJiwgRGF0ZUNvbXBvbmVudHMqKTsK
ICAgICAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9j
dW1lbnQoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9JU09EYXRlVGltZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0lTT0RhdGVUaW1lLmNwcAkocmV2aXNpb24gNTM5NzUpCisrKyBXZWJD
b3JlL2h0bWwvSVNPRGF0ZVRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklTT0RhdGVUaW1lLmgiCi0KLSNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9B
U0NJSUNUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+Ci0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBUaGUgb2xkZXN0IGRheSBv
ZiBHcmVnb3JpYW4gQ2FsZW5kYXIgaXMgMTU4Mi0xMC0xNS4gV2UgZG9uJ3Qgc3VwcG9ydCBkYXRl
cyBvbGRlciB0aGFuIGl0Lgotc3RhdGljIGNvbnN0IGludCBncmVnb3JpYW5TdGFydFllYXIgPSAx
NTgyOwotc3RhdGljIGNvbnN0IGludCBncmVnb3JpYW5TdGFydE1vbnRoID0gOTsgLy8gVGhpcyBp
cyBPY3RvYmVyLCBzaW5jZSBtb250aHMgYXJlIDAgYmFzZWQuCi1zdGF0aWMgY29uc3QgaW50IGdy
ZWdvcmlhblN0YXJ0RGF5ID0gMTU7Ci0KLXN0YXRpYyBjb25zdCBpbnQgZGF5c0luTW9udGhbMTJd
ID0gezMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzF9OwotCi1z
dGF0aWMgYm9vbCBpc0xlYXBZZWFyKGludCB5ZWFyKQotewotICAgIGlmICh5ZWFyICUgNCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghKHllYXIgJSA0MDApKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBpZiAoISh5ZWFyICUgMTAwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBgbW9udGgnIGlzIDAtYmFzZWQuCi1zdGF0aWMgaW50
IG1heERheU9mTW9udGgoaW50IHllYXIsIGludCBtb250aCkKLXsKLSAgICBpZiAobW9udGggIT0g
MSkgLy8gRmVicnVhcnk/Ci0gICAgICAgIHJldHVybiBkYXlzSW5Nb250aFttb250aF07Ci0gICAg
cmV0dXJuIGlzTGVhcFllYXIoeWVhcikgPyAyOSA6IDI4OwotfQotCi0vLyBgbW9udGgnIGlzIDAt
YmFzZWQuCi1zdGF0aWMgaW50IGRheU9mV2VlayhpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5
KQotewotICAgIGludCBzaGlmdGVkTW9udGggPSBtb250aCArIDI7Ci0gICAgLy8gMjpKYW51YXJ5
LCAzOkZlYnVydWFyeSwgNDpNYXJjaCwgLi4uCi0KLSAgICAvLyBaZWxsZXIncyBjb25ncnVlbmNl
Ci0gICAgaWYgKHNoaWZ0ZWRNb250aCA8PSAzKSB7Ci0gICAgICAgIHNoaWZ0ZWRNb250aCArPSAx
MjsKLSAgICAgICAgeWVhci0tOwotICAgIH0KLSAgICAvLyA0Ok1hcmNoLCAuLi4sIDE0OkphbnVh
cnksIDE1OkZlYnJ1YXJ5Ci0KLSAgICBpbnQgaGlnaFllYXIgPSB5ZWFyIC8gMTAwOwotICAgIGlu
dCBsb3dZZWFyID0geWVhciAlIDEwMDsKLSAgICAvLyBXZSBhZGQgNiB0byBtYWtlIHRoZSByZXN1
bHQgU3VuZGF5LW9yaWdpbi4KLSAgICBpbnQgcmVzdWx0ID0gKGRheSArIDEzICogc2hpZnRlZE1v
bnRoIC8gNSArIGxvd1llYXIgKyBsb3dZZWFyIC8gNCArIGhpZ2hZZWFyIC8gNCArIDUgKiBoaWdo
WWVhciArIDYpICUgNzsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbnQgSVNPRGF0ZVRpbWU6
Om1heFdlZWtOdW1iZXJJblllYXIoKSBjb25zdAotewotICAgIGludCBkYXkgPSBkYXlPZldlZWso
bV95ZWFyLCAwLCAxKTsgLy8gSmFudWFyeSAxLgotICAgIHJldHVybiBkYXkgPT0gVGh1cnNkYXkg
fHwgKGRheSA9PSBXZWRuZXNkYXkgJiYgaXNMZWFwWWVhcihtX3llYXIpKSA/IDUzIDogNTI7Ci19
Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb3VudERpZ2l0cyhjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0KQotewotICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnQ7
Ci0gICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KSB7Ci0gICAgICAgIGlmICghaXNB
U0NJSURpZ2l0KHNyY1tpbmRleF0pKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJl
dHVybiBpbmRleCAtIHN0YXJ0OwotfQotCi0vLyBWZXJ5IHN0cmljdCBpbnRlZ2VyIHBhcnNlci4g
RG8gbm90IGFsbG93IGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSB1bmxpa2UgY2hhcmFj
dGVyc1RvSW50U3RyaWN0KCkuCi1zdGF0aWMgYm9vbCB0b0ludChjb25zdCBVQ2hhciogc3JjLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHBhcnNlU3RhcnQsIHVuc2lnbmVkIHBhcnNlTGVuZ3Ro
LCBpbnQmIG91dCkKLXsKLSAgICBpZiAocGFyc2VTdGFydCArIHBhcnNlTGVuZ3RoID4gbGVuZ3Ro
IHx8IHBhcnNlTGVuZ3RoIDw9IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQgdmFs
dWUgPSAwOwotICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50ID0gc3JjICsgcGFyc2VTdGFydDsKLSAg
ICBjb25zdCBVQ2hhciogZW5kID0gY3VycmVudCArIHBhcnNlTGVuZ3RoOwotCi0gICAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0byBoYW5kbGUgbmVnYXRpdmUgbnVtYmVycyBmb3IgSVNPIDg2MDEuCi0gICAg
Zm9yICg7IGN1cnJlbnQgPCBlbmQ7ICsrY3VycmVudCkgewotICAgICAgICBpZiAoIWlzQVNDSUlE
aWdpdCgqY3VycmVudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGludCBk
aWdpdCA9ICpjdXJyZW50IC0gJzAnOwotICAgICAgICBpZiAodmFsdWUgPiAoSU5UX01BWCAtIGRp
Z2l0KSAvIDEwKSAvLyBDaGVjayBmb3Igb3ZlcmZsb3cuCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIHZhbHVlID0gdmFsdWUgKiAxMCArIGRpZ2l0OwotICAgIH0KLSAgICBvdXQg
PSB2YWx1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJU09EYXRlVGltZTo6cGFyc2VZ
ZWFyKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkJiBlbmQpCi17Ci0gICAgdW5zaWduZWQgZGlnaXRzTGVuZ3RoID0gY291bnREaWdpdHMo
c3JjLCBsZW5ndGgsIHN0YXJ0KTsKLSAgICAvLyBOZWVkcyBhdCBsZWFzdCA0IGRpZ2l0cyBhY2Nv
cmRpbmcgdG8gdGhlIHN0YW5kYXJkLgotICAgIGlmIChkaWdpdHNMZW5ndGggPCA0KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHllYXI7Ci0gICAgaWYgKCF0b0ludChzcmMsIGxlbmd0
aCwgc3RhcnQsIGRpZ2l0c0xlbmd0aCwgeWVhcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAvLyBObyBzdXBwb3J0IGZvciB5ZWFycyBiZWZvcmUgR3JlZ29yaWFuIGNhbGVuZGFyLgotICAg
IGlmICh5ZWFyIDwgZ3JlZ29yaWFuU3RhcnRZZWFyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV95ZWFyID0geWVhcjsKLSAgICBlbmQgPSBzdGFydCArIGRpZ2l0c0xlbmd0aDsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgYmVmb3JlR3JlZ29yaWFuU3RhcnREYXRlKGlu
dCB5ZWFyLCBpbnQgbW9udGgsIGludCBtb250aERheSkKLXsKLSAgICByZXR1cm4geWVhciA8IGdy
ZWdvcmlhblN0YXJ0WWVhcgotICAgICAgICB8fCB5ZWFyID09IGdyZWdvcmlhblN0YXJ0WWVhciAm
JiBtb250aCA8IGdyZWdvcmlhblN0YXJ0TW9udGgKLSAgICAgICAgfHwgeWVhciA9PSBncmVnb3Jp
YW5TdGFydFllYXIgJiYgbW9udGggPT0gZ3JlZ29yaWFuU3RhcnRNb250aCAmJiBtb250aERheSA8
IGdyZWdvcmlhblN0YXJ0RGF5OwotfQotCi1ib29sIElTT0RhdGVUaW1lOjphZGREYXkoaW50IGRh
eURpZmYpCi17Ci0gICAgQVNTRVJUKG1fbW9udGhEYXkpOwotCi0gICAgaW50IGRheSA9IG1fbW9u
dGhEYXkgKyBkYXlEaWZmOwotICAgIGlmIChkYXkgPiBtYXhEYXlPZk1vbnRoKG1feWVhciwgbV9t
b250aCkpIHsKLSAgICAgICAgZGF5ID0gbV9tb250aERheTsKLSAgICAgICAgaW50IHllYXIgPSBt
X3llYXI7Ci0gICAgICAgIGludCBtb250aCA9IG1fbW9udGg7Ci0gICAgICAgIGludCBtYXhEYXkg
PSBtYXhEYXlPZk1vbnRoKHllYXIsIG1vbnRoKTsKLSAgICAgICAgZm9yICg7IGRheURpZmYgPiAw
OyAtLWRheURpZmYpIHsKLSAgICAgICAgICAgICsrZGF5OwotICAgICAgICAgICAgaWYgKGRheSA+
IG1heERheSkgewotICAgICAgICAgICAgICAgIGRheSA9IDE7Ci0gICAgICAgICAgICAgICAgKytt
b250aDsKLSAgICAgICAgICAgICAgICBpZiAobW9udGggPj0gMTIpIHsgLy8gbW9udGggaXMgMC1v
cmlnaW4uCi0gICAgICAgICAgICAgICAgICAgIG1vbnRoID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgKyt5ZWFyOwotICAgICAgICAgICAgICAgICAgICBpZiAoeWVhciA8IDApIC8vIENoZWNrIGZv
ciBvdmVyZmxvdy4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWF4RGF5ID0gbWF4RGF5T2ZNb250aCh5ZWFy
LCBtb250aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV95ZWFyID0geWVh
cjsKLSAgICAgICAgbV9tb250aCA9IG1vbnRoOwotICAgIH0gZWxzZSBpZiAoZGF5IDwgMSkgewot
ICAgICAgICBpbnQgbW9udGggPSBtX21vbnRoOwotICAgICAgICBpbnQgeWVhciA9IG1feWVhcjsK
LSAgICAgICAgZGF5ID0gbV9tb250aERheTsKLSAgICAgICAgZm9yICg7IGRheURpZmYgPCAwOyAr
K2RheURpZmYpIHsKLSAgICAgICAgICAgIC0tZGF5OwotICAgICAgICAgICAgaWYgKGRheSA8IDEp
IHsKLSAgICAgICAgICAgICAgICAtLW1vbnRoOwotICAgICAgICAgICAgICAgIGlmIChtb250aCA8
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbW9udGggPSAxMTsKLSAgICAgICAgICAgICAgICAg
ICAgLS15ZWFyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkYXkgPSBtYXhE
YXlPZk1vbnRoKHllYXIsIG1vbnRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChi
ZWZvcmVHcmVnb3JpYW5TdGFydERhdGUoeWVhciwgbW9udGgsIGRheSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1feWVhciA9IHllYXI7Ci0gICAg
ICAgIG1fbW9udGggPSBtb250aDsKLSAgICB9Ci0gICAgbV9tb250aERheSA9IGRheTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJU09EYXRlVGltZTo6YWRkTWludXRlKGludCBtaW51dGUp
Ci17Ci0gICAgaW50IGNhcnJ5OwotICAgIC8vIG1pbiBjYW4gYmUgbmVnYXRpdmUgb3IgZ3JlYXRl
ciB0aGFuIDU5LgotICAgIG1pbnV0ZSArPSBtX21pbnV0ZTsKLSAgICBpZiAobWludXRlID4gNTkp
IHsKLSAgICAgICAgY2FycnkgPSBtaW51dGUgLyA2MDsKLSAgICAgICAgbWludXRlID0gbWludXRl
ICUgNjA7Ci0gICAgfSBlbHNlIGlmIChtX21pbnV0ZSA8IDApIHsKLSAgICAgICAgY2FycnkgPSAo
NTkgLSBtX21pbnV0ZSkgLyA2MDsKLSAgICAgICAgbWludXRlICs9IGNhcnJ5ICogNjA7Ci0gICAg
ICAgIGNhcnJ5ID0gLWNhcnJ5OwotICAgICAgICBBU1NFUlQobWludXRlID49IDAgJiYgbWludXRl
IDw9IDU5KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX21pbnV0ZSA9IG1pbnV0ZTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaW50IGhvdXIgPSBtX2hvdXIgKyBjYXJyeTsK
LSAgICBpZiAoaG91ciA+IDIzKSB7Ci0gICAgICAgIGNhcnJ5ID0gaG91ciAvIDI0OwotICAgICAg
ICBob3VyID0gaG91ciAlIDI0OwotICAgIH0gZWxzZSBpZiAoaG91ciA8IDApIHsKLSAgICAgICAg
Y2FycnkgPSAoMjMgLSBob3VyKSAvIDI0OwotICAgICAgICBob3VyICs9IGNhcnJ5ICogMjQ7Ci0g
ICAgICAgIGNhcnJ5ID0gLWNhcnJ5OwotICAgICAgICBBU1NFUlQoaG91ciA+PSAwICYmIGhvdXIg
PD0gMjMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fbWludXRlID0gbWludXRlOwotICAgICAg
ICBtX2hvdXIgPSBob3VyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFh
ZGREYXkoY2FycnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9taW51dGUgPSBtaW51
dGU7Ci0gICAgbV9ob3VyID0gaG91cjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gUGFyc2Vz
IGEgdGltZXpvbmUgcGFydCwgYW5kIGFkanVzdCB5ZWFyLCBtb250aCwgbW9udGhEYXksIGhvdXIs
IG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZC4KLWJvb2wgSVNPRGF0ZVRpbWU6OnBhcnNlVGlt
ZVpvbmUoY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQmIGVuZCkKLXsKLSAgICBpZiAoc3RhcnQgPj0gbGVuZ3RoKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBzdGFydDsKLSAgICBpZiAoc3JjW2luZGV4
XSA9PSAnWicpIHsKLSAgICAgICAgZW5kID0gaW5kZXggKyAxOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBib29sIG1pbnVzOwotICAgIGlmIChzcmNbaW5kZXhdID09ICcrJykK
LSAgICAgICAgbWludXMgPSBmYWxzZTsKLSAgICBlbHNlIGlmIChzcmNbaW5kZXhdID09ICctJykK
LSAgICAgICAgbWludXMgPSB0cnVlOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICsraW5kZXg7Ci0KLSAgICBpbnQgaG91cjsKLSAgICBpbnQgbWludXRlOwotICAgIGlmICgh
dG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBob3VyKSB8fCBob3VyIDwgMCB8fCBob3VyID4g
MjMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbmRleCArPSAyOwotCi0gICAgaWYgKGlu
ZGV4ID49IGxlbmd0aCB8fCBzcmNbaW5kZXhdICE9ICc6JykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICsraW5kZXg7Ci0KLSAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCwgMiwg
bWludXRlKSB8fCBtaW51dGUgPCAwIHx8IG1pbnV0ZSA+IDU5KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaW5kZXggKz0gMjsKLQotICAgIGlmIChtaW51cykgewotICAgICAgICBob3VyID0g
LWhvdXI7Ci0gICAgICAgIG1pbnV0ZSA9IC1taW51dGU7Ci0gICAgfQotCi0gICAgLy8gU3VidHJh
Y3QgdGhlIHRpbWV6b25lIG9mZnNldC4KLSAgICBpZiAoIWFkZE1pbnV0ZSgtKGhvdXIgKiA2MCAr
IG1pbnV0ZSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZW5kID0gaW5kZXg7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSVNPRGF0ZVRpbWU6OnBhcnNlTW9udGgoY29uc3QgVUNo
YXIqIHNyYywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkK
LXsKLSAgICBBU1NFUlQoc3JjKTsKLSAgICB1bnNpZ25lZCBpbmRleDsKLSAgICBpZiAoIXBhcnNl
WWVhcihzcmMsIGxlbmd0aCwgc3RhcnQsIGluZGV4KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChpbmRleCA+PSBsZW5ndGggfHwgc3JjW2luZGV4XSAhPSAnLScpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICArK2luZGV4OwotCi0gICAgaW50IG1vbnRoOwotICAgIGlmICghdG9J
bnQoc3JjLCBsZW5ndGgsIGluZGV4LCAyLCBtb250aCkgfHwgbW9udGggPCAxIHx8IG1vbnRoID4g
MTIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAtLW1vbnRoOwotICAgIC8vIE5vIHN1cHBv
cnQgZm9yIG1vbnRocyBiZWZvcmUgR3JlZ29yaWFuIGNhbGVuZGFyLgotICAgIGlmIChiZWZvcmVH
cmVnb3JpYW5TdGFydERhdGUobV95ZWFyLCBtb250aCwgZ3JlZ29yaWFuU3RhcnREYXkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb250aCA9IG1vbnRoOwotICAgIGVuZCA9IGluZGV4
ICsgMjsKLSAgICBtX3R5cGUgPSBNb250aDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJ
U09EYXRlVGltZTo6cGFyc2VEYXRlKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpCi17Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAg
dW5zaWduZWQgaW5kZXg7Ci0gICAgaWYgKCFwYXJzZU1vbnRoKHNyYywgbGVuZ3RoLCBzdGFydCwg
aW5kZXgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gJy0nIGFuZCAyLWRpZ2l0cyBh
cmUgbmVlZGVkLgotICAgIGlmIChpbmRleCArIDIgPj0gbGVuZ3RoKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKHNyY1tpbmRleF0gIT0gJy0nKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgKytpbmRleDsKLQotICAgIGludCBkYXk7Ci0gICAgaWYgKCF0b0ludChzcmMsIGxlbmd0
aCwgaW5kZXgsIDIsIGRheSkgfHwgZGF5IDwgMSB8fCBkYXkgPiBtYXhEYXlPZk1vbnRoKG1feWVh
ciwgbV9tb250aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBObyBzdXBwb3J0IGZv
ciBkYXRlcyBiZWZvcmUgR3JlZ29yaWFuIGNhbGVuZGFyLgotICAgIGlmIChtX3llYXIgPT0gZ3Jl
Z29yaWFuU3RhcnRZZWFyICYmIG1fbW9udGggPT0gZ3JlZ29yaWFuU3RhcnRNb250aCAmJiBkYXkg
PCBncmVnb3JpYW5TdGFydERheSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9udGhE
YXkgPSBkYXk7Ci0gICAgZW5kID0gaW5kZXggKyAyOwotICAgIG1fdHlwZSA9IERhdGU7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSVNPRGF0ZVRpbWU6OnBhcnNlV2Vlayhjb25zdCBVQ2hh
ciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKQot
ewotICAgIEFTU0VSVChzcmMpOwotICAgIHVuc2lnbmVkIGluZGV4OwotICAgIGlmICghcGFyc2VZ
ZWFyKHNyYywgbGVuZ3RoLCBzdGFydCwgaW5kZXgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyA0IGNoYXJhY3RlcnMgKCctJyAnVycgZGlnaXQgZGlnaXQpIGFyZSBuZWVkZWQuCi0g
ICAgaWYgKGluZGV4ICsgMyA+PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoc3JjW2luZGV4XSAhPSAnLScpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4
OwotICAgIGlmIChzcmNbaW5kZXhdICE9ICdXJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICsraW5kZXg7Ci0KLSAgICBpbnQgd2VlazsKLSAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBp
bmRleCwgMiwgd2VlaykgfHwgd2VlayA8IDEgfHwgd2VlayA+IG1heFdlZWtOdW1iZXJJblllYXIo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIE5vIHN1cHBvcnQgZm9yIHllYXJzIG9s
ZGVyIHRoYW4gb3IgZXF1YWxzIHRvIEdyZWdvcmlhbiBjYWxlbmRhciBzdGFydCB5ZWFyLgotICAg
IGlmIChtX3llYXIgPD0gZ3JlZ29yaWFuU3RhcnRZZWFyKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgbV93ZWVrID0gd2VlazsKLSAgICBlbmQgPSBpbmRleCArIDI7Ci0gICAgbV90eXBlID0g
V2VlazsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJU09EYXRlVGltZTo6cGFyc2VUaW1l
KGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkJiBlbmQpCi17Ci0gICAgQVNTRVJUKHNyYyk7Ci0gICAgaW50IGhvdXI7Ci0gICAgaWYgKCF0
b0ludChzcmMsIGxlbmd0aCwgc3RhcnQsIDIsIGhvdXIpIHx8IGhvdXIgPCAwIHx8IGhvdXIgPiAy
MykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnQgKyAy
OwotICAgIGlmIChpbmRleCA+PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoc3JjW2luZGV4XSAhPSAnOicpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4
OwotCi0gICAgaW50IG1pbnV0ZTsKLSAgICBpZiAoIXRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCwg
MiwgbWludXRlKSB8fCBtaW51dGUgPCAwIHx8IG1pbnV0ZSA+IDU5KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaW5kZXggKz0gMjsKLQotICAgIGludCBzZWNvbmQgPSAwOwotICAgIGludCBt
aWxsaXNlY29uZCA9IDA7Ci0gICAgLy8gT3B0aW9uYWwgc2Vjb25kIHBhcnQuCi0gICAgLy8gRG8g
bm90IHJldHVybiB3aXRoIGZhbHNlIGJlY2F1c2UgdGhlIHBhcnQgaXMgb3B0aW9uYWwuCi0gICAg
aWYgKGluZGV4ICsgMiA8IGxlbmd0aCAmJiBzcmNbaW5kZXhdID09ICc6JykgewotICAgICAgICBp
ZiAodG9JbnQoc3JjLCBsZW5ndGgsIGluZGV4ICsgMSwgMiwgc2Vjb25kKSAmJiBzZWNvbmQgPj0g
MCAmJiBzZWNvbmQgPD0gNTkpIHsKLSAgICAgICAgICAgIGluZGV4ICs9IDM7Ci0KLSAgICAgICAg
ICAgIC8vIE9wdGlvbmFsIGZyYWN0aW9uYWwgc2Vjb25kIHBhcnQuCi0gICAgICAgICAgICBpZiAo
aW5kZXggPCBsZW5ndGggJiYgc3JjW2luZGV4XSA9PSAnLicpIHsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBkaWdpdHNMZW5ndGggPSBjb3VudERpZ2l0cyhzcmMsIGxlbmd0aCwgaW5kZXggKyAx
KTsKLSAgICAgICAgICAgICAgICBpZiAoZGlnaXRzTGVuZ3RoID4gIDApIHsKLSAgICAgICAgICAg
ICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBvazsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGRpZ2l0c0xlbmd0aCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvayA9IHRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCwgMSwgbWlsbGlzZWNvbmQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmQgKj0gMTAwOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGRpZ2l0c0xlbmd0aCA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvayA9IHRvSW50KHNyYywgbGVuZ3RoLCBpbmRleCwgMiwgbWlsbGlzZWNvbmQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmQgKj0gMTA7Ci0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSAvLyBkaWdpdHNMZW5ndGggPj0gMwotICAgICAgICAgICAgICAgICAgICAgICAg
b2sgPSB0b0ludChzcmMsIGxlbmd0aCwgaW5kZXgsIDMsIG1pbGxpc2Vjb25kKTsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG9rKTsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gZGln
aXRzTGVuZ3RoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBtX2hvdXIgPSBob3VyOwotICAgIG1fbWludXRlID0gbWludXRlOwotICAgIG1f
c2Vjb25kID0gc2Vjb25kOwotICAgIG1fbWlsbGlzZWNvbmQgPSBtaWxsaXNlY29uZDsKLSAgICBl
bmQgPSBpbmRleDsKLSAgICBtX3R5cGUgPSBUaW1lOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIElTT0RhdGVUaW1lOjpwYXJzZURhdGVUaW1lTG9jYWwoY29uc3QgVUNoYXIqIHNyYywgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKLXsKLSAgICBBU1NF
UlQoc3JjKTsKLSAgICB1bnNpZ25lZCBpbmRleDsKLSAgICBpZiAoIXBhcnNlRGF0ZShzcmMsIGxl
bmd0aCwgc3RhcnQsIGluZGV4KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpbmRl
eCA+PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3JjW2luZGV4XSAh
PSAnVCcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4OwotICAgIGlmICghcGFy
c2VUaW1lKHNyYywgbGVuZ3RoLCBpbmRleCwgZW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fdHlwZSA9IERhdGVUaW1lTG9jYWw7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
SVNPRGF0ZVRpbWU6OnBhcnNlRGF0ZVRpbWUoY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQgbGVu
Z3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCkKLXsKLSAgICBBU1NFUlQoc3JjKTsK
LSAgICB1bnNpZ25lZCBpbmRleDsKLSAgICBpZiAoIXBhcnNlRGF0ZShzcmMsIGxlbmd0aCwgc3Rh
cnQsIGluZGV4KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpbmRleCA+PSBsZW5n
dGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3JjW2luZGV4XSAhPSAnVCcpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK2luZGV4OwotICAgIGlmICghcGFyc2VUaW1lKHNy
YywgbGVuZ3RoLCBpbmRleCwgaW5kZXgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KCFwYXJzZVRpbWVab25lKHNyYywgbGVuZ3RoLCBpbmRleCwgZW5kKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fdHlwZSA9IERhdGVUaW1lOwotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgaW5saW5lIGRvdWJsZSBwb3NpdGl2ZUZtb2QoZG91YmxlIHZhbHVlLCBkb3VibGUgZGl2
aWRlcikKLXsKLSAgICBkb3VibGUgcmVtYWluZGVyID0gZm1vZCh2YWx1ZSwgZGl2aWRlcik7Ci0g
ICAgcmV0dXJuIHJlbWFpbmRlciA8IDAgPyByZW1haW5kZXIgKyBkaXZpZGVyIDogcmVtYWluZGVy
OwotfQotCi12b2lkIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNTaW5jZU1pZG5pZ2h0SW50
ZXJuYWwoZG91YmxlIG1zSW5EYXkpCi17Ci0gICAgQVNTRVJUKG1zSW5EYXkgPj0gMCAmJiBtc0lu
RGF5IDwgbXNQZXJEYXkpOwotICAgIG1fbWlsbGlzZWNvbmQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZt
b2QobXNJbkRheSwgbXNQZXJTZWNvbmQpKTsKLSAgICBkb3VibGUgdmFsdWUgPSBmbG9vcihtc0lu
RGF5IC8gbXNQZXJTZWNvbmQpOwotICAgIG1fc2Vjb25kID0gc3RhdGljX2Nhc3Q8aW50PihmbW9k
KHZhbHVlLCBzZWNvbmRzUGVyTWludXRlKSk7Ci0gICAgdmFsdWUgPSBmbG9vcih2YWx1ZSAvIHNl
Y29uZHNQZXJNaW51dGUpOwotICAgIG1fbWludXRlID0gc3RhdGljX2Nhc3Q8aW50PihmbW9kKHZh
bHVlLCBtaW51dGVzUGVySG91cikpOwotICAgIG1faG91ciA9IHN0YXRpY19jYXN0PGludD4odmFs
dWUgLyBtaW51dGVzUGVySG91cik7Ci19Ci0KLWJvb2wgSVNPRGF0ZVRpbWU6OnNldE1pbGxpc2Vj
b25kc1NpbmNlRXBvY2hGb3JEYXRlSW50ZXJuYWwoZG91YmxlIG1zKQotewotICAgIG1feWVhciA9
IG1zVG9ZZWFyKG1zKTsKLSAgICBpbnQgeWVhckRheSA9IGRheUluWWVhcihtcywgbV95ZWFyKTsK
LSAgICBtX21vbnRoID0gbW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIobV95
ZWFyKSk7Ci0gICAgbV9tb250aERheSA9IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXks
IGlzTGVhcFllYXIobV95ZWFyKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSVNPRGF0
ZVRpbWU6OnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlKGRvdWJsZSBtcykKLXsKLSAg
ICBtX3R5cGUgPSBJbnZhbGlkOwotICAgIGlmICghaXNmaW5pdGUobXMpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZUludGVy
bmFsKHJvdW5kKG1zKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYmVmb3JlR3Jl
Z29yaWFuU3RhcnREYXRlKG1feWVhciwgbV9tb250aCwgbV9tb250aERheSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSBEYXRlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZVRpbWUoZG91
YmxlIG1zKQotewotICAgIG1fdHlwZSA9IEludmFsaWQ7Ci0gICAgaWYgKCFpc2Zpbml0ZShtcykp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtcyA9IHJvdW5kKG1zKTsKLSAgICBzZXRNaWxs
aXNlY29uZHNTaW5jZU1pZG5pZ2h0SW50ZXJuYWwocG9zaXRpdmVGbW9kKG1zLCBtc1BlckRheSkp
OwotICAgIGlmICghc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVJbnRlcm5hbChtcykp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYmVmb3JlR3JlZ29yaWFuU3RhcnREYXRl
KG1feWVhciwgbV9tb250aCwgbV9tb250aERheSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX3R5cGUgPSBEYXRlVGltZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJU09EYXRl
VGltZTo6c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVUaW1lTG9jYWwoZG91YmxlIG1z
KQotewotICAgIC8vIEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIERhdGVUaW1lTG9jYWwgaXMg
dGhlIHNhbWUgYXMgRGF0ZVRpbWUgZXhjZXB0IG1fdHlwZS4KLSAgICBpZiAoIXNldE1pbGxpc2Vj
b25kc1NpbmNlRXBvY2hGb3JEYXRlVGltZShtcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX3R5cGUgPSBEYXRlVGltZUxvY2FsOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIElT
T0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yTW9udGgoZG91YmxlIG1zKQot
ewotICAgIG1fdHlwZSA9IEludmFsaWQ7Ci0gICAgaWYgKCFpc2Zpbml0ZShtcykpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRl
SW50ZXJuYWwocm91bmQobXMpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIElnbm9y
ZSBtX21vbnRoRGF5IHVwZGF0ZWQgYnkgc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVJ
bnRlcm5hbCgpLgotICAgIGlmIChiZWZvcmVHcmVnb3JpYW5TdGFydERhdGUobV95ZWFyLCBtX21v
bnRoLCBncmVnb3JpYW5TdGFydERheSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5
cGUgPSBNb250aDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJU09EYXRlVGltZTo6c2V0
TWlsbGlzZWNvbmRzU2luY2VNaWRuaWdodChkb3VibGUgbXMpCi17Ci0gICAgbV90eXBlID0gSW52
YWxpZDsKLSAgICBpZiAoIWlzZmluaXRlKG1zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHNldE1pbGxpc2Vjb25kc1NpbmNlTWlkbmlnaHRJbnRlcm5hbChwb3NpdGl2ZUZtb2Qocm91bmQo
bXMpLCBtc1BlckRheSkpOwotICAgIG1fdHlwZSA9IFRpbWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLS8vIE9mZnNldCBmcm9tIEphbnVhcnkgMXN0IHRvIE1vbmRheSBvZiB0aGUgSVNPIDg2MDEn
cyBmaXJzdCB3ZWVrLgotLy8gICBleC4gSWYgSmFudWFyeSAxc3QgaXMgRnJpZGF5LCBzdWNoIE1v
bmRheSBpcyAzIGRheXMgbGF0ZXIuIFJldHVybnMgMy4KLXN0YXRpYyBpbnQgb2Zmc2V0VG8xc3RX
ZWVrU3RhcnQoaW50IHllYXIpCi17Ci0gICAgaW50IG9mZnNldFRvMXN0V2Vla1N0YXJ0ID0gMSAt
IGRheU9mV2Vlayh5ZWFyLCAwLCAxKTsKLSAgICBpZiAob2Zmc2V0VG8xc3RXZWVrU3RhcnQgPD0g
LTQpCi0gICAgICAgIG9mZnNldFRvMXN0V2Vla1N0YXJ0ICs9IDc7Ci0gICAgcmV0dXJuIG9mZnNl
dFRvMXN0V2Vla1N0YXJ0OwotfQotCi1ib29sIElTT0RhdGVUaW1lOjpzZXRNaWxsaXNlY29uZHNT
aW5jZUVwb2NoRm9yV2Vlayhkb3VibGUgbXMpCi17Ci0gICAgbV90eXBlID0gSW52YWxpZDsKLSAg
ICBpZiAoIWlzZmluaXRlKG1zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1zID0gcm91
bmQobXMpOwotCi0gICAgbV95ZWFyID0gbXNUb1llYXIobXMpOwotICAgIC8vIFdlIGRvbid0IHN1
cHBvcnQgZ3JlZ29yaWFuU3RhcnRZZWFyLiBXZWVrIG51bWJlcnMgYXJlIHVuZGVmaW5lZCBpbiB0
aGF0IHllYXIuCi0gICAgaWYgKG1feWVhciA8PSBncmVnb3JpYW5TdGFydFllYXIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCBtX3llYXIp
OwotICAgIGludCBvZmZzZXQgPSBvZmZzZXRUbzFzdFdlZWtTdGFydChtX3llYXIpOwotICAgIGlm
ICh5ZWFyRGF5IDwgb2Zmc2V0KSB7Ci0gICAgICAgIC8vIFRoZSBkYXkgYmVsb25ncyB0byB0aGUg
bGFzdCB3ZWVrIG9mIHRoZSBwcmV2aW91cyB5ZWFyLgotICAgICAgICBtX3llYXItLTsKLSAgICAg
ICAgaWYgKG1feWVhciA8PSBncmVnb3JpYW5TdGFydFllYXIpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIG1fd2VlayA9IG1heFdlZWtOdW1iZXJJblllYXIoKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBtX3dlZWsgPSAoKHllYXJEYXkgLSBvZmZzZXQpIC8gNykgKyAxOwotICAg
ICAgICBpZiAobV93ZWVrID4gbWF4V2Vla051bWJlckluWWVhcigpKSB7Ci0gICAgICAgICAgICBt
X3llYXIrKzsKLSAgICAgICAgICAgIG1fd2VlayA9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
bV90eXBlID0gV2VlazsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZG91YmxlIElTT0RhdGVUaW1l
OjptaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yVGltZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1f
dHlwZSA9PSBUaW1lIHx8IG1fdHlwZSA9PSBEYXRlVGltZSB8fCBtX3R5cGUgPT0gRGF0ZVRpbWVM
b2NhbCk7Ci0gICAgcmV0dXJuICgobV9ob3VyICogbWludXRlc1BlckhvdXIgKyBtX21pbnV0ZSkg
KiBzZWNvbmRzUGVyTWludXRlICsgbV9zZWNvbmQpICogbXNQZXJTZWNvbmQgKyBtX21pbGxpc2Vj
b25kOwotfQotCi1kb3VibGUgSVNPRGF0ZVRpbWU6Om1pbGxpc2Vjb25kc1NpbmNlRXBvY2goKSBj
b25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBEYXRlOgotICAgICAgICBy
ZXR1cm4gZGF0ZVRvRGF5c0Zyb20xOTcwKG1feWVhciwgbV9tb250aCwgbV9tb250aERheSkgKiBt
c1BlckRheTsKLSAgICBjYXNlIERhdGVUaW1lOgotICAgIGNhc2UgRGF0ZVRpbWVMb2NhbDoKLSAg
ICAgICAgcmV0dXJuIGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIsIG1fbW9udGgsIG1fbW9udGhE
YXkpICogbXNQZXJEYXkgKyBtaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yVGltZSgpOwotICAgIGNh
c2UgTW9udGg6Ci0gICAgICAgIHJldHVybiBkYXRlVG9EYXlzRnJvbTE5NzAobV95ZWFyLCBtX21v
bnRoLCAxKSAqIG1zUGVyRGF5OwotICAgIGNhc2UgVGltZToKLSAgICAgICAgcmV0dXJuIG1pbGxp
c2Vjb25kc1NpbmNlRXBvY2hGb3JUaW1lKCk7Ci0gICAgY2FzZSBXZWVrOgotICAgICAgICByZXR1
cm4gKGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIsIDAsIDEpICsgb2Zmc2V0VG8xc3RXZWVrU3Rh
cnQobV95ZWFyKSArIChtX3dlZWsgLSAxKSAqIDcpICogbXNQZXJEYXk7Ci0gICAgY2FzZSBJbnZh
bGlkOgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIGludmFsaWRNaWxsaXNlY29uZHMoKTsKLX0KLQotU3RyaW5nIElTT0RhdGVUaW1l
Ojp0b1N0cmluZ0ZvclRpbWUoU2Vjb25kRm9ybWF0IGZvcm1hdCkgY29uc3QKLXsKLSAgICBBU1NF
UlQobV90eXBlID09IERhdGVUaW1lIHx8IG1fdHlwZSA9PSBEYXRlVGltZUxvY2FsIHx8IG1fdHlw
ZSA9PSBUaW1lKTsKLSAgICBTZWNvbmRGb3JtYXQgZWZmZWN0aXZlRm9ybWF0ID0gZm9ybWF0Owot
ICAgIGlmIChtX21pbGxpc2Vjb25kKQotICAgICAgICBlZmZlY3RpdmVGb3JtYXQgPSBNaWxsaXNl
Y29uZDsKLSAgICBlbHNlIGlmIChmb3JtYXQgPT0gTm9uZSAmJiBtX3NlY29uZCkKLSAgICAgICAg
ZWZmZWN0aXZlRm9ybWF0ID0gU2Vjb25kOwotCi0gICAgc3dpdGNoIChlZmZlY3RpdmVGb3JtYXQp
IHsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
Ly8gRmFsbGJhY2sgdG8gTm9uZS4KLSAgICBjYXNlIE5vbmU6Ci0gICAgICAgIHJldHVybiBTdHJp
bmc6OmZvcm1hdCgiJTAyZDolMDJkIiwgbV9ob3VyLCBtX21pbnV0ZSk7Ci0gICAgY2FzZSBTZWNv
bmQ6Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJTAyZDolMDJkOiUwMmQiLCBtX2hv
dXIsIG1fbWludXRlLCBtX3NlY29uZCk7Ci0gICAgY2FzZSBNaWxsaXNlY29uZDoKLSAgICAgICAg
cmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlMDJkOiUwMmQ6JTAyZC4lMDNkIiwgbV9ob3VyLCBtX21p
bnV0ZSwgbV9zZWNvbmQsIG1fbWlsbGlzZWNvbmQpOwotICAgIH0KLX0KLQotU3RyaW5nIElTT0Rh
dGVUaW1lOjp0b1N0cmluZyhTZWNvbmRGb3JtYXQgZm9ybWF0KSBjb25zdAotewotICAgIHN3aXRj
aCAobV90eXBlKSB7Ci0gICAgY2FzZSBEYXRlOgotICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3Jt
YXQoIiUwNGQtJTAyZC0lMDJkIiwgbV95ZWFyLCBtX21vbnRoICsgMSwgbV9tb250aERheSk7Ci0g
ICAgY2FzZSBEYXRlVGltZToKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlMDRkLSUw
MmQtJTAyZFQiLCBtX3llYXIsIG1fbW9udGggKyAxLCBtX21vbnRoRGF5KQotICAgICAgICAgICAg
KyB0b1N0cmluZ0ZvclRpbWUoZm9ybWF0KSArIFN0cmluZygiWiIpOwotICAgIGNhc2UgRGF0ZVRp
bWVMb2NhbDoKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlMDRkLSUwMmQtJTAyZFQi
LCBtX3llYXIsIG1fbW9udGggKyAxLCBtX21vbnRoRGF5KQotICAgICAgICAgICAgKyB0b1N0cmlu
Z0ZvclRpbWUoZm9ybWF0KTsKLSAgICBjYXNlIE1vbnRoOgotICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmb3JtYXQoIiUwNGQtJTAyZCIsIG1feWVhciwgbV9tb250aCArIDEpOwotICAgIGNhc2UgVGlt
ZToKLSAgICAgICAgcmV0dXJuIHRvU3RyaW5nRm9yVGltZShmb3JtYXQpOwotICAgIGNhc2UgV2Vl
azoKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlMDRkLVclMDJkIiwgbV95ZWFyLCBt
X3dlZWspOwotICAgIGNhc2UgSW52YWxpZDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoIihJbnZhbGlkIElTT0RhdGVU
aW1lKSIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwv
SVNPRGF0ZVRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSVNPRGF0ZVRpbWUuaAko
cmV2aXNpb24gNTM5NzUpCisrKyBXZWJDb3JlL2h0bWwvSVNPRGF0ZVRpbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwxODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSVNPRGF0ZVRpbWVfaAotI2RlZmluZSBJU09E
YXRlVGltZV9oCi0KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5p
Y29kZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFN0cmluZzsKLQotLy8gQW4g
SVNPRGF0ZVRpbWUgaW5zdGFuY2UgcmVwcmVzZW50cyBvbmUgb2YgdGhlIGZvbGxvd2luZyBkYXRl
IGFuZCB0aW1lIGNvbWJpbmF0aW9uczoKLS8vICogTW9udGggdHlwZTogeWVhci1tb250aAotLy8g
KiBEYXRlIHR5cGU6IHllYXItbW9udGgtZGF5Ci0vLyAqIFdlZWsgdHlwZTogeWVhci13ZWVrCi0v
LyAqIFRpbWUgdHlwZTogaG91ci1taW51dGUtc2Vjb25kLW1pbGxpc2Vjb25kCi0vLyAqIERhdGVU
aW1lIG9yIERhdGVUaW1lTG9jYWwgdHlwZTogeWVhci1tb250aC1kYXkgaG91ci1taW51dGUtc2Vj
b25kLW1pbGxpc2Vjb25kCi1jbGFzcyBJU09EYXRlVGltZSB7Ci1wdWJsaWM6Ci0gICAgSVNPRGF0
ZVRpbWUoKQotICAgICAgICA6IG1fbWlsbGlzZWNvbmQoMCkKLSAgICAgICAgLCBtX3NlY29uZCgw
KQotICAgICAgICAsIG1fbWludXRlKDApCi0gICAgICAgICwgbV9ob3VyKDApCi0gICAgICAgICwg
bV9tb250aERheSgwKQotICAgICAgICAsIG1fbW9udGgoMCkKLSAgICAgICAgLCBtX3llYXIoMCkK
LSAgICAgICAgLCBtX3dlZWsoMCkKLSAgICAgICAgLCBtX3R5cGUoSW52YWxpZCkKLSAgICB7Ci0g
ICAgfQotCi0gICAgaW50IG1pbGxpc2Vjb25kKCkgY29uc3QgeyByZXR1cm4gbV9taWxsaXNlY29u
ZDsgfQotICAgIGludCBzZWNvbmQoKSBjb25zdCB7IHJldHVybiBtX3NlY29uZDsgfQotICAgIGlu
dCBtaW51dGUoKSBjb25zdCB7IHJldHVybiBtX21pbnV0ZTsgfQotICAgIGludCBob3VyKCkgY29u
c3QgeyByZXR1cm4gbV9ob3VyOyB9Ci0gICAgaW50IG1vbnRoRGF5KCkgY29uc3QgeyByZXR1cm4g
bV9tb250aERheTsgfQotICAgIGludCBtb250aCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9udGg7IH0K
LSAgICBpbnQgZnVsbFllYXIoKSBjb25zdCB7IHJldHVybiBtX3llYXI7IH0KLSAgICBpbnQgd2Vl
aygpIGNvbnN0IHsgcmV0dXJuIG1fd2VlazsgfQotCi0gICAgZW51bSBTZWNvbmRGb3JtYXQgewot
ICAgICAgICBOb25lLCAvLyBTdXBwcmVzcyB0aGUgc2Vjb25kIHBhcnQgYW5kIHRoZSBtaWxsaXNl
Y29uZCBwYXJ0IGlmIHRoZXkgYXJlIDAuCi0gICAgICAgIFNlY29uZCwgLy8gQWx3YXlzIHNob3cg
dGhlIHNlY29uZCBwYXJ0LCBhbmQgc3VwcHJlc3MgdGhlIG1pbGxpc2Vjb25kIHBhcnQgaWYgaXQg
aXMgMC4KLSAgICAgICAgTWlsbGlzZWNvbmQgLy8gQWx3YXlzIHNob3cgdGhlIHNlY29uZCBwYXJ0
IGFuZCB0aGUgbWlsbGlzZWNvbmQgcGFydC4KLSAgICB9OwotCi0gICAgLy8gUmV0dXJucyBhbiBJ
U08gODYwMSByZXByZXNlbnRhdGlvbiBmb3IgdGhpcyBpbnN0YW5jZS4KLSAgICAvLyBUaGUgZm9y
bWF0IGFyZ3VtZW50IGlzIHZhbGlkIGZvciBEYXRlVGltZSwgRGF0ZVRpbWVMb2NhbCwgYW5kIFRp
bWUgdHlwZXMuCi0gICAgU3RyaW5nIHRvU3RyaW5nKFNlY29uZEZvcm1hdCBmb3JtYXQgPSBOb25l
KSBjb25zdDsKLQotICAgIC8vIHBhcnNlKigpIGFuZCBzZXRNaWxsaXNlY29uZHNTaW5jZSooKSBm
dW5jdGlvbnMgYXJlIGluaXRpYWxpemVycyBmb3IgYW4KLSAgICAvLyBJU09EYXRlVGltZSBpbnN0
YW5jZS4gSWYgdGhlc2UgZnVuY3Rpb25zIHJldHVybiBmYWxzZSwgdGhlIGluc3RhbmNlCi0gICAg
Ly8gbWlnaHQgYmUgaW52YWxpZC4KLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgc2l4IGZ1bmN0aW9u
cyBwYXJzZSB0aGUgaW5wdXQgJ3NyYycgd2hvc2UgbGVuZ3RoIGlzCi0gICAgLy8gJ2xlbmd0aCcs
IGFuZCB1cGRhdGVzIHNvbWUgZmllbGRzIG9mIHRoaXMgaW5zdGFuY2UuIFRoZSBwYXJzaW5nIHN0
YXJ0cyBhdAotICAgIC8vIHNyY1tzdGFydF0gYW5kIGV4YW1pbmVzIGNoYXJhY3RlcnMgYmVmb3Jl
IHNyY1tsZW5ndGhdLgotICAgIC8vICdzcmMnIG11c3QgYmUgbm9uLW51bGwuIFRoZSAnc3JjJyBz
dHJpbmcgZG9lc24ndCBuZWVkIHRvIGJlCi0gICAgLy8gbnVsbC10ZXJtaW5hdGVkLgotICAgIC8v
IFRoZSBmdW5jdGlvbnMgcmV0dXJuIHRydWUgaWYgdGhlIHBhcnNpbmcgc3VjY2VlZHMsIGFuZCBz
ZXQgJ2VuZCcgdG8gdGhlCi0gICAgLy8gbmV4dCBpbmRleCBhZnRlciB0aGUgbGFzdCBjb25zdW1l
ZC4gRXh0cmEgbGVhZGluZyBjaGFyYWN0ZXJzIGNhdXNlIHBhcnNlCi0gICAgLy8gZmFpbHVyZXMs
IGFuZCB0aGUgdHJhaWxpbmcgZXh0cmEgY2hhcmFjdGVycyBkb24ndCBjYXVzZSBwYXJzZSBmYWls
dXJlcy4KLQotICAgIC8vIFNldHMgeWVhciBhbmQgbW9udGguCi0gICAgYm9vbCBwYXJzZU1vbnRo
KGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkJiBlbmQpOwotICAgIC8vIFNldHMgeWVhciwgbW9udGggYW5kIG1vbnRoRGF5LgotICAgIGJv
b2wgcGFyc2VEYXRlKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkJiBlbmQpOwotICAgIC8vIFNldHMgeWVhciBhbmQgd2Vlay4KLSAgICBi
b29sIHBhcnNlV2Vlayhjb25zdCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCYgZW5kKTsKLSAgICAvLyBTZXRzIGhvdXIsIG1pbnV0ZSwgc2Vjb25k
IGFuZCBtaWxsaXNlY29uZC4KLSAgICBib29sIHBhcnNlVGltZShjb25zdCBVQ2hhciogc3JjLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKTsKLSAgICAvLyBT
ZXRzIHllYXIsIG1vbnRoLCBtb250aERheSwgaG91ciwgbWludXRlLCBzZWNvbmQgYW5kIG1pbGxp
c2Vjb25kLgotICAgIGJvb2wgcGFyc2VEYXRlVGltZUxvY2FsKGNvbnN0IFVDaGFyKiBzcmMsIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkJiBlbmQpOwotICAgIC8vIFNl
dHMgeWVhciwgbW9udGgsIG1vbnRoRGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCBhbmQgbWlsbGlz
ZWNvbmQsIGFuZCBhZGp1c3RzIHRpbWV6b25lLgotICAgIGJvb2wgcGFyc2VEYXRlVGltZShjb25z
dCBVQ2hhciogc3JjLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCYg
ZW5kKTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZv
ciooKSBmdW5jdGlvbnMgdGFrZQotICAgIC8vIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNp
bmNlIDE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwIFVUQyBhcwotICAgIC8vIHRoZSBhcmd1bWVudCwg
YW5kIHVwZGF0ZSBhbGwgZmllbGRzIGZvciB0aGUgY29ycmVzcG9uZGluZwotICAgIC8vIElTT0Rh
dGVUaW1lIHR5cGUuIFRoZSBmdW5jdGlvbnMgcmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZHMsIGFu
ZAotICAgIC8vIGZhbHNlIGlmIHRoZXkgZmFpbC4KLQotICAgIC8vIEZvciBEYXRlIHR5cGUuIFVw
ZGF0ZXMgbV95ZWFyLCBtX21vbnRoIGFuZCBtX21vbnRoRGF5LgotICAgIGJvb2wgc2V0TWlsbGlz
ZWNvbmRzU2luY2VFcG9jaEZvckRhdGUoZG91YmxlIG1zKTsKLSAgICAvLyBGb3IgRGF0ZVRpbWUg
dHlwZS4gVXBkYXRlcyBtX3llYXIsIG1fbW9udGgsIG1fbW9udGhEYXksIG1faG91ciwgbV9taW51
dGUsIG1fc2Vjb25kIGFuZCBtX21pbGxpc2Vjb25kLgotICAgIGJvb2wgc2V0TWlsbGlzZWNvbmRz
U2luY2VFcG9jaEZvckRhdGVUaW1lKGRvdWJsZSBtcyk7Ci0gICAgLy8gRm9yIERhdGVUaW1lTG9j
YWwgdHlwZS4gVXBkYXRlcyBtX3llYXIsIG1fbW9udGgsIG1fbW9udGhEYXksIG1faG91ciwgbV9t
aW51dGUsIG1fc2Vjb25kIGFuZCBtX21pbGxpc2Vjb25kLgotICAgIGJvb2wgc2V0TWlsbGlzZWNv
bmRzU2luY2VFcG9jaEZvckRhdGVUaW1lTG9jYWwoZG91YmxlIG1zKTsKLSAgICAvLyBGb3IgTW9u
dGggdHlwZS4gVXBkYXRlcyBtX3llYXIgYW5kIG1fbW9udGguCi0gICAgYm9vbCBzZXRNaWxsaXNl
Y29uZHNTaW5jZUVwb2NoRm9yTW9udGgoZG91YmxlIG1zKTsKLSAgICAvLyBGb3IgV2VlayB0eXBl
LiBVcGRhdGVzIG1feWVhciBhbmQgbV93ZWVrLgotICAgIGJvb2wgc2V0TWlsbGlzZWNvbmRzU2lu
Y2VFcG9jaEZvcldlZWsoZG91YmxlIG1zKTsKLQotICAgIC8vIEZvciBUaW1lIHR5cGUuIFVwZGF0
ZXMgbV9ob3VyLCBtX21pbnV0ZSwgbV9zZWNvbmQgYW5kIG1fbWlsbGlzZWNvbmQuCi0gICAgYm9v
bCBzZXRNaWxsaXNlY29uZHNTaW5jZU1pZG5pZ2h0KGRvdWJsZSBtcyk7Ci0KLSAgICAvLyBSZXR1
cm5zIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gMTk3MC0wMS0wMSAwMDowMDowMCBV
VEMuCi0gICAgLy8gRm9yIGFuIElTT0RhdGVUaW1lIGluaXRpYWxpemVkIHdpdGggcGFyc2VEYXRl
VGltZUxvY2FsKCksCi0gICAgLy8gbWlsbGlzZWNvbmRzU2luY2VFcG9jaCgpIHJldHVybnMgYSB2
YWx1ZSBmb3IgVVRDIHRpbWV6b25lLgotICAgIGRvdWJsZSBtaWxsaXNlY29uZHNTaW5jZUVwb2No
KCkgY29uc3Q7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgaW52YWxpZE1pbGxpc2Vjb25kcygp
IHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7IH0KLQot
cHJpdmF0ZToKLSAgICAvLyBSZXR1cm5zIHRoZSBtYXhpbXVtIHdlZWsgbnVtYmVyIGluIHRoaXMg
SVNPRGF0ZVRpbWUncyB5ZWFyLgotICAgIC8vIFRoZSByZXN1bHQgaXMgZWl0aGVyIG9mIDUyIGFu
ZCA1My4KLSAgICBpbnQgbWF4V2Vla051bWJlckluWWVhcigpIGNvbnN0OwotICAgIGJvb2wgcGFy
c2VZZWFyKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkJiBlbmQpOwotICAgIGJvb2wgYWRkRGF5KGludCk7Ci0gICAgYm9vbCBhZGRNaW51
dGUoaW50KTsKLSAgICBib29sIHBhcnNlVGltZVpvbmUoY29uc3QgVUNoYXIqIHNyYywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQmIGVuZCk7Ci0gICAgLy8gSGVscGVy
IGZvciBtaWxsaXNlY29uZHNTaW5jZUVwb2NoKCkuCi0gICAgZG91YmxlIG1pbGxpc2Vjb25kc1Np
bmNlRXBvY2hGb3JUaW1lKCkgY29uc3Q7Ci0gICAgLy8gSGVscGVycyBmb3Igc2V0TWlsbGlzZWNv
bmRzU2luY2VFcG9jaEZvciooKS4KLSAgICBib29sIHNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hG
b3JEYXRlSW50ZXJuYWwoZG91YmxlIG1zKTsKLSAgICB2b2lkIHNldE1pbGxpc2Vjb25kc1NpbmNl
TWlkbmlnaHRJbnRlcm5hbChkb3VibGUgbXMpOwotICAgIC8vIEhlbHBlciBmb3IgdG9TdHJpbmco
KS4KLSAgICBTdHJpbmcgdG9TdHJpbmdGb3JUaW1lKFNlY29uZEZvcm1hdCkgY29uc3Q7Ci0KLSAg
ICAvLyBtX3dlZWtEYXkgdmFsdWVzCi0gICAgZW51bSB7Ci0gICAgICAgIFN1bmRheSA9IDAsCi0g
ICAgICAgIE1vbmRheSwKLSAgICAgICAgVHVlc2RheSwKLSAgICAgICAgV2VkbmVzZGF5LAotICAg
ICAgICBUaHVyc2RheSwKLSAgICAgICAgRnJpZGF5LAotICAgICAgICBTYXR1cmRheSwKLSAgICB9
OwotCi0gICAgaW50IG1fbWlsbGlzZWNvbmQ7ICAvLyAwIC0gOTk5Ci0gICAgaW50IG1fc2Vjb25k
OwotICAgIGludCBtX21pbnV0ZTsKLSAgICBpbnQgbV9ob3VyOwotICAgIGludCBtX21vbnRoRGF5
OyAgLy8gMSAtIDMxCi0gICAgaW50IG1fbW9udGg7ICAvLyAwOkphbnVhcnkgLSAxMTpEZWNlbWJl
cgotICAgIGludCBtX3llYXI7ICAvLyAgMTU4MiAtCi0gICAgaW50IG1fd2VlazsgIC8vIDEgLSA1
MwotCi0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgSW52YWxpZCwKLSAgICAgICAgRGF0ZSwKLSAg
ICAgICAgRGF0ZVRpbWUsCi0gICAgICAgIERhdGVUaW1lTG9jYWwsCi0gICAgICAgIE1vbnRoLAot
ICAgICAgICBUaW1lLAotICAgICAgICBXZWVrLAotICAgIH07Ci0gICAgVHlwZSBtX3R5cGU7Ci19
OwotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIElTT0RhdGVUaW1lX2gK
SW5kZXg6IFdlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5jcHAJKHJldmlzaW9uIDUzOTc1KQorKysgV2ViQ29yZS9o
dG1sL1ZhbGlkaXR5U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAg
Ym9vbCBWYWxpZGl0eVN0YXRlOjp0eXBlTWlzbWF0Y2goKSBjb25zdAogICAgIGNhc2UgSFRNTElu
cHV0RWxlbWVudDo6TU9OVEg6CiAgICAgY2FzZSBIVE1MSW5wdXRFbGVtZW50OjpUSU1FOgogICAg
IGNhc2UgSFRNTElucHV0RWxlbWVudDo6V0VFSzoKLSAgICAgICAgcmV0dXJuICFIVE1MSW5wdXRF
bGVtZW50Ojpmb3JtU3RyaW5nVG9JU09EYXRlVGltZShpbnB1dC0+aW5wdXRUeXBlKCksIHZhbHVl
LCAwKTsKKyAgICAgICAgcmV0dXJuICFIVE1MSW5wdXRFbGVtZW50Ojpmb3JtU3RyaW5nVG9EYXRl
Q29tcG9uZW50cyhpbnB1dC0+aW5wdXRUeXBlKCksIHZhbHVlLCAwKTsKICAgICBjYXNlIEhUTUxJ
bnB1dEVsZW1lbnQ6OkJVVFRPTjoKICAgICBjYXNlIEhUTUxJbnB1dEVsZW1lbnQ6OkNIRUNLQk9Y
OgogICAgIGNhc2UgSFRNTElucHV0RWxlbWVudDo6RklMRToK
</data>

          </attachment>
      

    </bug>

</bugzilla>