<?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>26238</bug_id>
          
          <creation_ts>2009-06-06 22:20:09 -0700</creation_ts>
          <short_desc>Move DateMath into WTF namespace</short_desc>
          <delta_ts>2009-06-08 15:38:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</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>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>ddkilzer</cc>
    
    <cc>koivisto</cc>
    
    <cc>ukai</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>124667</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-06 22:20:09 -0700</bug_when>
    <thetext>In order to eliminate the leakage of JSC into WebCore, introduced inhttp://trac.webkit.org/changeset/44452, move most of DateMath funcs into wtf/DateExtras. The remaining conversion funcs stay in DateConversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124668</commentid>
    <comment_count>1</comment_count>
      <attachid>31031</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-06 22:29:18 -0700</bug_when>
    <thetext>Created attachment 31031
Introduce DateExtras, v1.

 JavaScriptCore/AllInOneFile.cpp                    |    2 +-
 JavaScriptCore/ChangeLog                           |   32 +
 JavaScriptCore/GNUmakefile.am                      |    6 +-
 JavaScriptCore/JavaScriptCore.exp                  |    2 +-
 JavaScriptCore/JavaScriptCore.pri                  |    3 +-
 .../JavaScriptCore/JavaScriptCore.vcproj           |    4 +-
 .../JavaScriptCore.vcproj/WTF/WTF.vcproj           |    8 +
 .../JavaScriptCore.xcodeproj/project.pbxproj       |   20 +-
 JavaScriptCore/JavaScriptCoreSources.bkl           |    3 +-
 JavaScriptCore/pcre/pcre_exec.cpp                  |    2 +-
 JavaScriptCore/profiler/ProfileNode.cpp            |    4 +-
 JavaScriptCore/runtime/DateConstructor.cpp         |    5 +-
 JavaScriptCore/runtime/DateConversion.cpp          |   98 ++
 JavaScriptCore/runtime/DateConversion.h            |   63 ++
 JavaScriptCore/runtime/DateInstance.cpp            |    6 +-
 JavaScriptCore/runtime/DateInstance.h              |   12 +-
 JavaScriptCore/runtime/DateMath.cpp                |  935 --------------------
 JavaScriptCore/runtime/DateMath.h                  |  191 ----
 JavaScriptCore/runtime/DatePrototype.cpp           |    3 +-
 JavaScriptCore/runtime/InitializeThreading.cpp     |    4 +-
 JavaScriptCore/wtf/DateExtras.cpp                  |  891 +++++++++++++++++++
 JavaScriptCore/wtf/DateExtras.h                    |  188 ++++
 WebCore/ChangeLog                                  |   17 +
 WebCore/ForwardingHeaders/runtime/DateMath.h       |    4 -
 WebCore/ForwardingHeaders/wtf/DateExtras.h         |    4 +
 WebCore/platform/network/HTTPParsers.cpp           |    9 +
 WebCore/platform/network/HTTPParsers.h             |    1 +
 WebCore/platform/network/ResourceResponseBase.cpp  |    4 +-
 28 files changed, 1360 insertions(+), 1161 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124670</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-06-06 22:37:21 -0700</bug_when>
    <thetext>You should probably use svn copy to preserve history for these moves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124671</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-06 23:24:06 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; In order to eliminate the leakage of JSC into WebCore, introduced
&gt; in &lt;http://trac.webkit.org/changeset/44452&gt;, move most of DateMath funcs into
&gt; wtf/DateExtras. The remaining conversion funcs stay in DateConversion.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124694</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-07 11:05:19 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; You should probably use svn copy to preserve history for these moves.
&gt; 

I am not 100% sure, but I think git does this right when it commits. I&apos;ll research. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124705</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-07 14:25:51 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; You should probably use svn copy to preserve history for these moves.
&gt; 
&gt; I am not 100% sure, but I think git does this right when it commits. I&apos;ll
&gt; research. 

git tries to get it right, but it uses a fuzzy algorithm rather than an absolute connection (as in svn).  Most of the time it gets it wrong if it&apos;s a small file, e.g., where the license header is as-long-as or longer than the actual source.  Then it thinks the new file is copied from a nonsensical original.

You&apos;re *probably* okay with using git in this case, but I&apos;d strongly suggest using svn to make sure that the history is preserved.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124717</commentid>
    <comment_count>6</comment_count>
      <attachid>31031</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-07 17:59:42 -0700</bug_when>
    <thetext>Comment on attachment 31031
Introduce DateExtras, v1.

The other Extras.h headers are mostly to fill in holes in standard library implementations to smooth over platform differences. This seems a bit different in that it implements original functions that don&apos;t exist on any platform, so perhaps it should have a different name.

So I&apos;m not sure I like the new name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124719</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-07 19:24:42 -0700</bug_when>
    <thetext>I can make it wtf/DateMath, if that&apos;s preferred, I have no opinion here. Let me know, and I&apos;ll make it happen. Would really like to land this soon -- we have fixes after this patch that we really would like to have without branching out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124790</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-08 13:03:29 -0700</bug_when>
    <thetext>I reworked the patch to:

* use svn cp (darn it! I don&apos;t like to admit when git is inferior)
* change DateExtras.h to wtf/DateMath.h

r* pls?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124793</commentid>
    <comment_count>9</comment_count>
      <attachid>31058</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-08 13:20:14 -0700</bug_when>
    <thetext>Created attachment 31058
Move DateMath to WTF namespace, v2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124824</commentid>
    <comment_count>10</comment_count>
      <attachid>31058</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-08 15:31:21 -0700</bug_when>
    <thetext>Comment on attachment 31058
Move DateMath to WTF namespace, v2.

rs=me if you&apos;re just moving code and you promise to watch the bots! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124825</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-08 15:38:17 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/44508</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31031</attachid>
            <date>2009-06-06 22:29:18 -0700</date>
            <delta_ts>2009-06-08 13:03:38 -0700</delta_ts>
            <desc>Introduce DateExtras, v1.</desc>
            <filename>Introduce-DateExtras-v1..patch</filename>
            <type>text/plain</type>
            <size>102016</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">OTg0NmUwZGQ0NmVkZjU3NTYyNjA1MTMxZjViYzM3Njc1Njk2OTExOQpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvQWxsSW5PbmVGaWxlLmNwcCBiL0phdmFTY3JpcHRDb3JlL0FsbEluT25lRmls
ZS5jcHAKaW5kZXggOTA0NzM0Zi4uNGNjZWYwOCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
QWxsSW5PbmVGaWxlLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9BbGxJbk9uZUZpbGUuY3BwCkBA
IC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAicnVudGltZS9Db2xsZWN0b3IuY3BwIgogI2luY2x1
ZGUgInJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwIgogI2luY2x1ZGUgInJ1bnRpbWUvRGF0
ZUNvbnN0cnVjdG9yLmNwcCIKLSNpbmNsdWRlICJydW50aW1lL0RhdGVNYXRoLmNwcCIKKyNpbmNs
dWRlICJydW50aW1lL0RhdGVDb252ZXJzaW9uLmNwcCIKICNpbmNsdWRlICJydW50aW1lL0RhdGVQ
cm90b3R5cGUuY3BwIgogI2luY2x1ZGUgInJ1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcCIKICNpbmNs
dWRlICJ3dGYvZHRvYS5jcHAiCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cg
Yi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggZGQxMTkwYS4uMmQzOWMzYiAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDA5LTA2LTA2ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xh
emtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MjM4
CisgICAgICAgIE1vdmUgbW9zdCBvZiBEYXRlTWF0aCBmdW5jdGlvbnMgdG8gd3RmL0RhdGVFeHRy
YXMsIGFuZCBzcGxpdCBvZmYgY29udmVyc2lvbi1yZWxhdGVkCisgICAgICAgIGhlbHBlcnMgdG8g
RGF0ZUNvbnZlcnNpb24uCisKKyAgICAgICAgKiBBbGxJbk9uZUZpbGUuY3BwOiBBZGRlZCBEYXRl
Q29udmVyc2lvbi4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgRGF0ZUNvbnZlcnNp
b24gYW5kIERhdGVFeHRyYXMuCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOiBEaXR0by4K
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5wcmk6IERpdHRvLgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6IERpdHRv
LgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajogRGl0dG8u
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0
dG8uCisgICAgICAgICogSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbDogRGl0dG8uCisgICAgICAg
ICogcGNyZS9wY3JlX2V4ZWMuY3BwOiBDaGFuZ2VkIHRvIHVzZSBEYXRlRXh0cmFzLgorICAgICAg
ICAqIHByb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcDogQ2hhbmdlZCB0byB1c2UgRGF0ZUNvbnZlcnNp
b24uCisgICAgICAgIChKU0M6OmdldENvdW50KToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25z
dHJ1Y3Rvci5jcHA6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUNvbnZlcnNpb24uY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0RhdGVDb252ZXJzaW9uLmg6IEFkZGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcDogQ2hhbmdlZCB0byB1c2UgRGF0ZUNvbnZl
cnNpb24uCisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDogRGl0dG8uCisgICAgICAg
ICogcnVudGltZS9EYXRlTWF0aC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9EYXRl
TWF0aC5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6IENo
YW5nZWQgdG8gdXNlIERhdGVDb252ZXJzaW9uLgorICAgICAgICAqIHJ1bnRpbWUvSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVUaHJlYWRpbmdPbmNlKTog
Q2hhbmdlZCB0byB1c2UgV1RGOjppbml0aWFsaXplRGF0ZXMoKS4KKyAgICAgICAgKiB3dGYvRGF0
ZUV4dHJhcy5jcHA6IENvcGllZCBmcm9tIHJ1bnRpbWUvRGF0ZU1hdGguY3BwLgorICAgICAgICAq
IHd0Zi9EYXRlRXh0cmFzLmg6IENvcGllZCBmcm9tIHJ1bnRpbWUvRGF0ZU1hdGguaAorCiAyMDA5
LTA2LTA1ICBTaGluaWNoaXJvIEhhbWFqaSAgPGhhbWFqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgQnVnIDI2MTYwOiBDb21waWxlIGZhaWxzIGluIE1hY09TWCB3aGVuIEdOVSBmaWxldXRpbHMg
YXJlIGluc3RhbGxlZApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0g
Yi9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBkZmI2OGFkLi5iNTQ4YzgzIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9KYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMzY4LDEwICszNjgsMTAgQEAgamF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmggXAog
CUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcCBcCiAJSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaCBcCisJSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlQ29udmVyc2lvbi5jcHAgXAorCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnZl
cnNpb24uaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuY3BwIFwKIAlK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oIFwKLQlKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RhdGVNYXRoLmNwcCBcCi0JSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlTWF0aC5o
IFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwIFwKIAlKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvci5jcHAgXApAQCAtNDc3LDYgKzQ3Nyw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMg
Kz0gXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHJhY2luZy5oIFwKIAlKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1VTdHJpbmcuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcu
aCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVFeHRyYXMuaCBcCisJSmF2YVNjcmlwdENvcmUv
d3RmL0RhdGVFeHRyYXMuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvRmFzdEFsbG9jQmFzZS5o
IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5jcHAgXAogCUphdmFTY3JpcHRDb3Jl
L3d0Zi9GYXN0TWFsbG9jLmggXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZXhwIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IGU4OGQ2
YTcuLjgyNzg2YjAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKQEAgLTI3NSw3ICsyNzUs
NiBAQCBfX1pOM0pTQzlTdHJ1Y3R1cmU0MGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmVFUFMwX1JLTlNfMTBJZGVudGlmaQogX19aTjNKU0M5U3RydWN0dXJlQzFFTlNfN0pT
VmFsdWVFUktOU184VHlwZUluZm9FCiBfX1pOM0pTQzlTdHJ1Y3R1cmVEMUV2CiBfX1pOM0pTQzlj
b25zdHJ1Y3RFUE5TXzlFeGVjU3RhdGVFTlNfN0pTVmFsdWVFTlNfMTNDb25zdHJ1Y3RUeXBlRVJL
TlNfMTNDb25zdHJ1Y3REYXRhRVJLTlNfN0FyZ0xpc3RFCi1fX1pOM0pTQzlwYXJzZURhdGVFUktO
U183VVN0cmluZ0UKIF9fWk4zSlNDZXFFUktOU183VVN0cmluZ0VQS2MKIF9fWk4zSlNDZ3RFUktO
U183VVN0cmluZ0VTMl8KIF9fWk4zSlNDbHRFUktOU183VVN0cmluZ0VTMl8KQEAgLTI4OSw2ICsy
ODgsNyBAQCBfX1pOM1dURjEyZGV0YWNoVGhyZWFkRWoKIF9fWk4zV1RGMTJpc01haW5UaHJlYWRF
dgogX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CiBfX1pOM1dURjEzY3VycmVudFRocmVhZEV2Citf
X1pOM1dURjM3cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVyc0VQS2MKIF9fWk4z
V1RGMTN0cnlGYXN0Q2FsbG9jRW1tCiBfX1pOM1dURjE1VGhyZWFkQ29uZGl0aW9uNHdhaXRFUk5T
XzVNdXRleEUKIF9fWk4zV1RGMTVUaHJlYWRDb25kaXRpb242c2lnbmFsRXYKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaSBiL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnByaQppbmRleCA5MjM0MTg3Li4zN2Q0MzgyIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUucHJpCkBAIC0xNTMsOCArMTUzLDggQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9D
b25zdHJ1Y3REYXRhLmNwcCBcCiAgICAgd3RmL0N1cnJlbnRUaW1lLmNwcCBcCiAgICAgcnVudGlt
ZS9EYXRlQ29uc3RydWN0b3IuY3BwIFwKKyAgICBydW50aW1lL0RhdGVDb252ZXJzaW9uLmNwcCBc
CiAgICAgcnVudGltZS9EYXRlSW5zdGFuY2UuY3BwIFwKLSAgICBydW50aW1lL0RhdGVNYXRoLmNw
cCBcCiAgICAgcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcCBcCiAgICAgZGVidWdnZXIvRGVidWdn
ZXIuY3BwIFwKICAgICBkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAgXApAQCAtMjE5LDYg
KzIxOSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHByb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcCBcCiAg
ICAgcHJvZmlsZXIvUHJvZmlsZXIuY3BwIFwKICAgICBwcm9maWxlci9UcmVlUHJvZmlsZS5jcHAg
XAorICAgIHd0Zi9EYXRlRXh0cmFzLmNwcCBcCiAgICAgd3RmL0Zhc3RNYWxsb2MuY3BwIFwKICAg
ICB3dGYvVGhyZWFkaW5nLmNwcCBcCiAgICAgd3RmL3F0L01haW5UaHJlYWRRdC5jcHAKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ogYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCmluZGV4IDdiYzM0YTgu
LjQxMjU1NjggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKKysrIGIvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvagpAQCAtNTk2LDExICs1OTYsMTEgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxl
DQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxEYXRlTWF0aC5jcHAiDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxEYXRlQ29udmVyc2lvbi5jcHAiDQogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXERh
dGVNYXRoLmgiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxEYXRlQ29udmVyc2lv
bi5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qIGIvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCmluZGV4IDY2NjNiZmIu
LjVhZjY1OTYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9XVEYvV1RGLnZjcHJvagorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovV1RGL1dURi52Y3Byb2oKQEAgLTIzMyw2ICsyMzMsMTQgQEAKIAkJCT4NCiAJCTwvRmlsZT4N
CiAJCTxGaWxlDQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcRGF0ZUV4dHJhcy5jcHAiDQor
CQkJPg0KKwkJPC9GaWxlPg0KKwkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxE
YXRlRXh0cmFzLmgiDQorCQkJPg0KKwkJPC9GaWxlPg0KKwkJPEZpbGUNCiAJCQlSZWxhdGl2ZVBh
dGg9Ii4uXC4uXHd0ZlxEZXF1ZS5oIg0KIAkJCT4NCiAJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAyMGE5MjE4Li5iYzNhY2M1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMCw2ICsxMDAsOCBA
QAogCQkxODBCOUJGRTBGMTZFOTREMDA5QkRCQzUgLyogQ3VycmVudFRpbWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTgwQjlBRUYwRjE2QzU2OTAw
OUJEQkM1IC8qIEN1cnJlbnRUaW1lLmNwcCAqLzsgfTsKIAkJMUM2MTUxNkMwRUJBQzdBMDAwMzEz
NzZGIC8qIFByb2ZpbGVyU2VydmVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUM2MTUxNkEwRUJBQzdBMDAwMzEzNzZGIC8qIFByb2ZpbGVyU2VydmVy
Lm1tICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2lu
ZyI7IH07IH07CiAJCTFDNjE1MTZEMEVCQUM3QTAwMDMxMzc2RiAvKiBQcm9maWxlclNlcnZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM2MTUxNkIw
RUJBQzdBMDAwMzEzNzZGIC8qIFByb2ZpbGVyU2VydmVyLmggKi87IH07CisJCTQxRkFGMzQ5MEZE
OUEzMDEwMDkzMzUxNSAvKiBEYXRlRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUZBRjM0NzBGRDlBMzAxMDA5MzM1MTUgLyogRGF0ZUV4dHJh
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQx
RkFGMzRBMEZEOUEzMDEwMDkzMzUxNSAvKiBEYXRlRXh0cmFzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRkFGMzQ4MEZEOUEzMDEwMDkzMzUxNSAv
KiBEYXRlRXh0cmFzLmNwcCAqLzsgfTsKIAkJNDQwOUQ4NDcwRkFGODBBMjAwNTIzQjg3IC8qIE93
blB0ckNvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDQwQjdBRUQwRkFGN0ZDQjAwNzMzMjNFIC8qIE93blB0ckNvbW1vbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0REQ0ODUzMEZBRUE4NTAw
MEQ2QjRFQiAvKiBQYXNzT3duUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NERENDg1MjBGQUVBODUwMDBENkI0RUIgLyogUGFzc093blB0ci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVENTM3MjZG
MEUxQzU0ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1RDUzNzI2RTBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2luZy5o
ICovOyB9OwpAQCAtMjE3LDcgKzIxOSw3IEBACiAJCUJDMThDM0Y0MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNUJCMkJDNTAzMEY3NzIxMDFGQ0ZFMUQgLyogQ29tcGxldGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDM0Y1MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBjb25maWcuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzNGNjBFMTZGNUNE
MDBCMzQ0NjAgLyogQ29uc3RydWN0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM4RjNDQ0YwREFGMTdCQTAwNTc3QTgwIC8qIENvbnN0cnVjdERh
dGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlC
QzE4QzNGOTBFMTZGNUNEMDBCMzQ0NjAgLyogRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBE
YXRlTWF0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUJDMThDM0Y5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBEYXRlQ29udmVyc2lvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkwQUQ0MzEwQzAw
RUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
KTsgfTsgfTsKIAkJQkMxOEMzRkEwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg1OTAyNTU1OTdE
MDFGRjYwRjcgLyogRGVidWdnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXJDYWxs
RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
ODBEQjlCMEREQzIyN0YwMDNDRkRGMiAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDM0ZDMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBEZXF1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE4NjExMUQwQ0M4MjQ4MzAwODE0MTJCIC8qIERlcXVlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU0OSw2ICs1NTEsOCBAQAog
CQkxQzkwNTE0NTBCQTlFOEE3MDA4MUU5RDAgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0Q29yZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUZBRjM0NzBGRDlBMzAxMDA5MzM1MTUgLyogRGF0
ZUV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlRXh0cmFzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxRkFGMzQ4MEZEOUEzMDEwMDkzMzUxNSAv
KiBEYXRlRXh0cmFzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERh
dGVFeHRyYXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDBCN0FFRDBGQUY3
RkNCMDA3MzMyM0UgLyogT3duUHRyQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE93blB0ckNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDkw
OTdFRTBGOEY4MUI1MDA3NkEzMjcgLyogRmVhdHVyZURlZmluZXMueGNjb25maWcgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gRmVhdHVyZURlZmluZXMueGNjb25maWc7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0REQ0ODUyMEZBRUE4NTAwMEQ2QjRFQiAvKiBQYXNzT3du
UHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3NPd25QdHIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgyMyw4ICs4MjcsOCBAQAogCQlCQ0ZEOEM5MDBF
RUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEp1bXBUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDRkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSnVtcFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMwQTI3MjNGMEU1MDlGMUUwMEU5NkUxNSAvKiBOb3RGb3VuZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBOb3RGb3VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlEMjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZU1hdGguY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVNYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVNYXRoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlTWF0aC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlEMjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJz
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDIxMjAyMjkwQUQ0MzEwQzAw
RUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTFE
NTE3NTBCMkU3OThEMDA1NkMxODggLyogU3RyaW5nRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0cmluZ0V4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlSlNTdHJpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3Ry
aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wYXF1ZUpTU3Ry
aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNjgsNiArMTE3Miw4IEBA
CiAJCQkJMEJERkZBRDQwRkM2MTcxMDAwRDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5o
ICovLAogCQkJCTE4MEI5QUVGMEYxNkM1NjkwMDlCREJDNSAvKiBDdXJyZW50VGltZS5jcHAgKi8s
CiAJCQkJMTgwQjlBRjAwRjE2QzU2OTAwOUJEQkM1IC8qIEN1cnJlbnRUaW1lLmggKi8sCisJCQkJ
NDFGQUYzNDcwRkQ5QTMwMTAwOTMzNTE1IC8qIERhdGVFeHRyYXMuaCAqLywKKwkJCQk0MUZBRjM0
ODBGRDlBMzAxMDA5MzM1MTUgLyogRGF0ZUV4dHJhcy5jcHAgKi8sCiAJCQkJNTE4NjExMUQwQ0M4
MjQ4MzAwODE0MTJCIC8qIERlcXVlLmggKi8sCiAJCQkJOTM4QzRGNkIwQ0EwNkJDRTAwRDkzMTBB
IC8qIERpc2FsbG93Q1R5cGUuaCAqLywKIAkJCQk2NTFGNjQxMjAzOUQ1QjVGMDA3ODM5NUMgLyog
ZHRvYS5jcHAgKi8sCkBAIC0xMzIxLDEwICsxMzI3LDEwIEBACiAJCQkJQkM4RjNDQ0YwREFGMTdC
QTAwNTc3QTgwIC8qIENvbnN0cnVjdERhdGEuaCAqLywKIAkJCQlCQ0QyMDM0NTBFMTcxMzVFMDAy
QzdFODIgLyogRGF0ZUNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlCQ0QyMDM0NjBFMTcxMzVFMDAy
QzdFODIgLyogRGF0ZUNvbnN0cnVjdG9yLmggKi8sCisJCQkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3
OUI2IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLywKKwkJCQlEMjEyMDIyOTBBRDQzMTBDMDBFRDc5
QjYgLyogRGF0ZUNvbnZlcnNpb24uaCAqLywKIAkJCQlCQzExNjYwMDBFMTk5N0IxMDA4MDY2REQg
LyogRGF0ZUluc3RhbmNlLmNwcCAqLywKIAkJCQlCQzExNjYwMTBFMTk5N0IxMDA4MDY2REQgLyog
RGF0ZUluc3RhbmNlLmggKi8sCi0JCQkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVN
YXRoLmNwcCAqLywKLQkJCQlEMjEyMDIyOTBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZU1hdGguaCAq
LywKIAkJCQlCQ0QyMDM0NzBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVByb3RvdHlwZS5jcHAgKi8s
CiAJCQkJQkNEMjAzNDgwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVQcm90b3R5cGUuaCAqLywKIAkJ
CQlCQzMzN0JFQTBFMUIwMENCMDA3NjkxOEEgLyogRXJyb3IuY3BwICovLApAQCAtMTYzMCw4ICsx
NjM2LDkgQEAKIAkJCQlCQzE4QzNGNjBFMTZGNUNEMDBCMzQ0NjAgLyogQ29uc3RydWN0RGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTgwQjlCMDgwRjE2RDk0RjAwOUJEQkM1IC8qIEN1cnJlbnRU
aW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDM0QTBFMTcxMzVFMDAyQzdFODIgLyogRGF0
ZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzE4QzNGOTBFMTZGNUNEMDBCMzQ0
NjAgLyogRGF0ZUNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTQxRkFGMzQ5MEZEOUEz
MDEwMDkzMzUxNSAvKiBEYXRlRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjYwMjBF
MTk5N0I0MDA4MDY2REQgLyogRGF0ZUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzE4
QzNGOTBFMTZGNUNEMDBCMzQ0NjAgLyogRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
RDIwMzRDMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0QyMDNFODBFMTcxOEY0MDAyQzdFODIgLyogRGF0ZVByb3RvdHlwZS5sdXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDM0ZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZWJ1Z2dlci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yMTI5LDYgKzIxMzYsNyBAQAogCQkJCUUxQTg2MkQ2MEQ3RjJCNUMw
MDFFQzZBQSAvKiBDb2xsYXRvckRlZmF1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBODYy
QTkwRDdFQkI3NjAwMUVDNkFBIC8qIENvbGxhdG9ySUNVLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE4MEI5QkZFMEYxNkU5NEQwMDlCREJDNSAvKiBDdXJyZW50VGltZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0MUZBRjM0QTBGRDlBMzAxMDA5MzM1MTUgLyogRGF0ZUV4dHJhcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJh
bWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4NzgwRUQyMUFDRDAwQjg5NjE5IC8qIEV4
Y2VwdGlvbkhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdCNDhGNDkwRUU4OTM2RjAw
RENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsIGIvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbAppbmRleCAxMmI0ZDdjLi4zN2UwOWM3IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsCisrKyBi
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlU291cmNlcy5ia2wKQEAgLTg3LDggKzg3LDgg
QEAgU291cmNlIGZpbGVzIGZvciBKU0NvcmUuCiAgICAgICAgIHJ1bnRpbWUvQ29tbW9uSWRlbnRp
ZmllcnMuY3BwCiAgICAgICAgIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKICAgICAgICAgcnVu
dGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCisgICAgICAgIHJ1bnRpbWUvRGF0ZUNvbnZlcnNpb24u
Y3BwCiAgICAgICAgIHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcAotICAgICAgICBydW50aW1lL0Rh
dGVNYXRoLmNwcAogICAgICAgICBydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCiAgICAgICAgIHJ1
bnRpbWUvRXJyb3IuY3BwCiAgICAgICAgIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAKQEAg
LTE3MSw2ICsxNzEsNyBAQCBTb3VyY2UgZmlsZXMgZm9yIEpTQ29yZS4KICAgICAgICAgd3RmL0Fz
c2VydGlvbnMuY3BwCiAgICAgICAgIHd0Zi9CeXRlQXJyYXkuY3BwCiAgICAgICAgIHd0Zi9DdXJy
ZW50VGltZS5jcHAKKyAgICAgICAgd3RmL0RhdGVFeHRyYXMuY3BwCiAgICAgICAgIHd0Zi9GYXN0
TWFsbG9jLmNwcAogICAgICAgICB3dGYvSGFzaFRhYmxlLmNwcAogICAgICAgICB3dGYvTWFpblRo
cmVhZC5jcHAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9leGVjLmNwcCBi
L0phdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9leGVjLmNwcAppbmRleCA4MGEwOTJhLi4yN2M1MmM2
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfZXhlYy5jcHAKKysrIGIvSmF2
YVNjcmlwdENvcmUvcGNyZS9wY3JlX2V4ZWMuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHRoZSBKYXZh
U2NyaXB0IHNwZWNpZmljYXRpb24uIFRoZXJlIGFyZSBhbHNvIHNvbWUgc3VwcG9ydGluZyBmdW5j
dGlvbnMuICovCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUkVHRVhQX0hJU1RPR1JB
TQotI2luY2x1ZGUgPHBhcnNlci9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9EYXRlRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nLmg+CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwIGIvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwCmluZGV4IGJmMGJiY2IuLjA4NmMzMjcgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5jcHAKQEAgLTI5LDkgKzI5LDkgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQcm9maWxlTm9kZS5oIgogCi0jaW5jbHVkZSAiRGF0
ZU1hdGguaCIKICNpbmNsdWRlICJQcm9maWxlci5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8d3RmL0RhdGVFeHRyYXMuaD4KIAogI2lmIFBMQVRGT1JNKFdJTl9PUykKICNpbmNsdWRl
IDx3aW5kb3dzLmg+CkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBkb3VibGUgZ2V0Q291bnQoKQog
ICAgIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCZjb3VudGVyKTsKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihjb3VudGVyLlF1YWRQYXJ0KSAvIGZyZXF1ZW5jeS5RdWFkUGFydDsKICNl
bHNlCi0gICAgcmV0dXJuIGdldEN1cnJlbnRVVENUaW1lV2l0aE1pY3Jvc2Vjb25kcygpOworICAg
IHJldHVybiBXVEY6OmdldEN1cnJlbnRVVENUaW1lV2l0aE1pY3Jvc2Vjb25kcygpOwogI2VuZGlm
CiB9CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9y
LmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAppbmRleCA1
NDM2MmQwLi44NjU2MzQxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVD
b25zdHJ1Y3Rvci5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0
b3IuY3BwCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiRGF0ZUNvbnN0cnVjdG9yLmgiCiAK
ICNpbmNsdWRlICJEYXRlSW5zdGFuY2UuaCIKLSNpbmNsdWRlICJEYXRlTWF0aC5oIgorI2luY2x1
ZGUgIkRhdGVDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIlByb3RvdHlwZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8bWF0aC5o
PgogI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvRGF0ZUV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpZiBIQVZFKFNZU19USU1FX0gpCkBAIC00Miw2ICs0
Myw4IEBACiAjaW5jbHVkZSA8c3lzL3RpbWViLmg+CiAjZW5kaWYKIAordXNpbmcgV1RGOjpHcmVn
b3JpYW5EYXRlVGltZTsKKwogbmFtZXNwYWNlIEpTQyB7CiAKIC8vIFRPRE86IE1ha2VUaW1lICgx
NS45LjExLjEpIGV0Yy4gPwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
Q29udmVyc2lvbi5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb252ZXJzaW9uLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTcyMDBmCi0tLSAvZGV2L251
bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29udmVyc2lvbi5jcHAKQEAgLTAs
MCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxh
IENvbW11bmljYXRvciBjbGllbnQgY29kZSwgcmVsZWFzZWQKKyAqIE1hcmNoIDMxLCAxOTk4Lgor
ICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICog
TmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKiBQb3J0aW9ucyBjcmVhdGVk
IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4CisgKiB0aGUg
SW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1
c2VkIHVuZGVyIHRoZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwv
ICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lv
biAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICog
KHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0
aGUgR1BMIGFyZQorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91
IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkg
dW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBM
IG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBi
eQorICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGgg
dGhlIG5vdGljZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBv
ciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0
aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0ZUNvbnZlcnNpb24uaCIK
KworI2luY2x1ZGUgPHd0Zi9EYXRlRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisK
K25hbWVzcGFjZSBKU0MgeworCitkb3VibGUgcGFyc2VEYXRlKGNvbnN0IFVTdHJpbmcgJmRhdGUp
Cit7CisgICAgcmV0dXJuIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoZGF0
ZS5VVEY4U3RyaW5nKCkuY19zdHIoKSk7Cit9CisKK1VTdHJpbmcgZm9ybWF0RGF0ZShjb25zdCBH
cmVnb3JpYW5EYXRlVGltZSAmdCkKK3sKKyAgICBjaGFyIGJ1ZmZlclsxMDBdOworICAgIHNucHJp
bnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlcyAlcyAlMDJkICUwNGQiLAorICAgICAgICB3
ZWVrZGF5TmFtZVsodC53ZWVrRGF5ICsgNikgJSA3XSwKKyAgICAgICAgbW9udGhOYW1lW3QubW9u
dGhdLCB0Lm1vbnRoRGF5LCB0LnllYXIgKyAxOTAwKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQor
CitVU3RyaW5nIGZvcm1hdERhdGVVVENWYXJpYW50KGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lICZ0
KQoreworICAgIGNoYXIgYnVmZmVyWzEwMF07CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2Yo
YnVmZmVyKSwgIiVzLCAlMDJkICVzICUwNGQiLAorICAgICAgICB3ZWVrZGF5TmFtZVsodC53ZWVr
RGF5ICsgNikgJSA3XSwKKyAgICAgICAgdC5tb250aERheSwgbW9udGhOYW1lW3QubW9udGhdLCB0
LnllYXIgKyAxOTAwKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitVU3RyaW5nIGZvcm1hdFRp
bWUoY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUgJnQsIGJvb2wgdXRjKQoreworICAgIGNoYXIgYnVm
ZmVyWzEwMF07CisgICAgaWYgKHV0YykgeworICAgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVv
ZihidWZmZXIpLCAiJTAyZDolMDJkOiUwMmQgR01UIiwgdC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNv
bmQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBvZmZzZXQgPSBhYnMoZ210b2Zmc2V0KHQp
KTsKKyAgICAgICAgY2hhciB0aW1lWm9uZU5hbWVbNzBdOworICAgICAgICBzdHJ1Y3QgdG0gZ3Rt
ID0gdDsKKyAgICAgICAgc3RyZnRpbWUodGltZVpvbmVOYW1lLCBzaXplb2YodGltZVpvbmVOYW1l
KSwgIiVaIiwgJmd0bSk7CisKKyAgICAgICAgaWYgKHRpbWVab25lTmFtZVswXSkgeworICAgICAg
ICAgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiUwMmQ6JTAyZDolMDJkIEdN
VCVjJTAyZCUwMmQgKCVzKSIsCisgICAgICAgICAgICAgICAgdC5ob3VyLCB0Lm1pbnV0ZSwgdC5z
ZWNvbmQsCisgICAgICAgICAgICAgICAgZ210b2Zmc2V0KHQpIDwgMCA/ICctJyA6ICcrJywgb2Zm
c2V0IC8gKDYwKjYwKSwgKG9mZnNldCAvIDYwKSAlIDYwLCB0aW1lWm9uZU5hbWUpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwg
IiUwMmQ6JTAyZDolMDJkIEdNVCVjJTAyZCUwMmQiLAorICAgICAgICAgICAgICAgIHQuaG91ciwg
dC5taW51dGUsIHQuc2Vjb25kLAorICAgICAgICAgICAgICAgIGdtdG9mZnNldCh0KSA8IDAgPyAn
LScgOiAnKycsIG9mZnNldCAvICg2MCo2MCksIChvZmZzZXQgLyA2MCkgJSA2MCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIFVTdHJpbmcoYnVmZmVyKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb252ZXJzaW9u
LmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb252ZXJzaW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBkYmRiMgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnZlcnNpb24uaApAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhl
IGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMg
TGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxs
YS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZ
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UK
KyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRh
dGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlz
IE1vemlsbGEgQ29tbXVuaWNhdG9yIGNsaWVudCBjb2RlLCByZWxlYXNlZAorICogTWFyY2ggMzEs
IDE5OTguCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2Rl
IGlzCisgKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25z
IGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgK
KyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBD
b250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiks
CisgKiBvciB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4x
IG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMg
b2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9z
ZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlz
IGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBM
R1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0
aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRl
Y2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0g
d2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUg
R1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMg
YWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRl
cgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQ
TC4KKyAqCisgKi8KKworI2lmbmRlZiBEYXRlQ29udmVyc2lvbl9oCisjZGVmaW5lIERhdGVDb252
ZXJzaW9uX2gKKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisgICAgc3RydWN0IEdy
ZWdvcmlhbkRhdGVUaW1lOworfQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVVN0cmluZzsK
KworZG91YmxlIHBhcnNlRGF0ZShjb25zdCBVU3RyaW5nJik7CitVU3RyaW5nIGZvcm1hdERhdGUo
Y29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmKTsKK1VTdHJpbmcgZm9ybWF0RGF0ZVVUQ1ZhcmlhbnQo
Y29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmKTsKK1VTdHJpbmcgZm9ybWF0VGltZShjb25zdCBHcmVn
b3JpYW5EYXRlVGltZSYsIGJvb2wgaW5wdXRJc1VUQyk7CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRGF0ZUNvbnZlcnNpb25faApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlSW5zdGFuY2UuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5z
dGFuY2UuY3BwCmluZGV4IDg4MDZkZWMuLjdkZTUxYjIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVJbnN0YW5jZS5jcHAKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJEYXRlSW5zdGFuY2UuaCIKIAotI2luY2x1ZGUgIkRhdGVNYXRoLmgiCiAjaW5j
bHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9EYXRlRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01OCwxMyArNTgsMTMgQEAgdm9p
ZCBEYXRlSW5zdGFuY2U6Om1zVG9HcmVnb3JpYW5EYXRlVGltZShkb3VibGUgbWlsbGksIGJvb2wg
b3V0cHV0SXNVVEMsIEdyZWdvcmkKIAogICAgIGlmIChvdXRwdXRJc1VUQykgewogICAgICAgICBp
ZiAobV9jYWNoZS0+bV9ncmVnb3JpYW5EYXRlVGltZVVUQ0NhY2hlZEZvck1TICE9IG1pbGxpKSB7
Ci0gICAgICAgICAgICBKU0M6Om1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgdHJ1ZSwgbV9j
YWNoZS0+bV9jYWNoZWRHcmVnb3JpYW5EYXRlVGltZVVUQyk7CisgICAgICAgICAgICBXVEY6Om1z
VG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgdHJ1ZSwgbV9jYWNoZS0+bV9jYWNoZWRHcmVnb3Jp
YW5EYXRlVGltZVVUQyk7CiAgICAgICAgICAgICBtX2NhY2hlLT5tX2dyZWdvcmlhbkRhdGVUaW1l
VVRDQ2FjaGVkRm9yTVMgPSBtaWxsaTsKICAgICAgICAgfQogICAgICAgICB0LmNvcHlGcm9tKG1f
Y2FjaGUtPm1fY2FjaGVkR3JlZ29yaWFuRGF0ZVRpbWVVVEMpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGlmIChtX2NhY2hlLT5tX2dyZWdvcmlhbkRhdGVUaW1lQ2FjaGVkRm9yTVMgIT0gbWlsbGkp
IHsKLSAgICAgICAgICAgIEpTQzo6bXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCBmYWxzZSwg
bV9jYWNoZS0+bV9jYWNoZWRHcmVnb3JpYW5EYXRlVGltZSk7CisgICAgICAgICAgICBXVEY6Om1z
VG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgZmFsc2UsIG1fY2FjaGUtPm1fY2FjaGVkR3JlZ29y
aWFuRGF0ZVRpbWUpOwogICAgICAgICAgICAgbV9jYWNoZS0+bV9ncmVnb3JpYW5EYXRlVGltZUNh
Y2hlZEZvck1TID0gbWlsbGk7CiAgICAgICAgIH0KICAgICAgICAgdC5jb3B5RnJvbShtX2NhY2hl
LT5tX2NhY2hlZEdyZWdvcmlhbkRhdGVUaW1lKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0ZUluc3RhbmNlLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0
YW5jZS5oCmluZGV4IDBlY2QxZGIuLjNiNzM1MjEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
SW5zdGFuY2UuaApAQCAtMjMsOSArMjMsMTEgQEAKIAogI2luY2x1ZGUgIkpTV3JhcHBlck9iamVj
dC5oIgogCi1uYW1lc3BhY2UgSlNDIHsKLQorbmFtZXNwYWNlIFdURiB7CiAgICAgc3RydWN0IEdy
ZWdvcmlhbkRhdGVUaW1lOworfQorCituYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIERhdGVJ
bnN0YW5jZSA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewogICAgIHB1YmxpYzoKQEAgLTM0LDE0
ICszNiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBkb3VibGUgaW50ZXJuYWxOdW1i
ZXIoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbFZhbHVlKCkudW5jaGVja2VkR2V0TnVtYmVyKCk7
IH0KIAotICAgICAgICBib29sIGdldFRpbWUoR3JlZ29yaWFuRGF0ZVRpbWUmLCBpbnQmIG9mZnNl
dCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgZ2V0VVRDVGltZShHcmVnb3JpYW5EYXRlVGltZSYpIGNv
bnN0OworICAgICAgICBib29sIGdldFRpbWUoV1RGOjpHcmVnb3JpYW5EYXRlVGltZSYsIGludCYg
b2Zmc2V0KSBjb25zdDsKKyAgICAgICAgYm9vbCBnZXRVVENUaW1lKFdURjo6R3JlZ29yaWFuRGF0
ZVRpbWUmKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRUaW1lKGRvdWJsZSYgbWlsbGlzZWNvbmRz
LCBpbnQmIG9mZnNldCkgY29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0VVRDVGltZShkb3VibGUmIG1p
bGxpc2Vjb25kcykgY29uc3Q7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZv
OwogCi0gICAgICAgIHZvaWQgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKGRvdWJsZSwgYm9vbCBvdXRw
dXRJc1VUQywgR3JlZ29yaWFuRGF0ZVRpbWUmKSBjb25zdDsKKyAgICAgICAgdm9pZCBtc1RvR3Jl
Z29yaWFuRGF0ZVRpbWUoZG91YmxlLCBib29sIG91dHB1dElzVVRDLCBXVEY6OkdyZWdvcmlhbkRh
dGVUaW1lJikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZU1hdGguY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlTWF0aC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmOGM4OGMu
LjAwMDAwMDAKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlTWF0aC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw5MzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAw
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBUaGUgT3JpZ2luYWwg
Q29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29kZSwgcmVsZWFzZWQKLSAqIE1h
cmNoIDMxLCAxOTk4LgotICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2lu
YWwgQ29kZSBpcwotICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCi0gKiBQ
b3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChD
KSAxOTk4Ci0gKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgZWl0aGVyIHRoZSBNb3pp
bGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAotICogaHR0cDovL3d3dy5t
b3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVm
dC9ncGwuaHRtbAotICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMg
b2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQotICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3Nl
IGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKLSAqIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KLSAqIGxp
Y2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVz
ZSB5b3VyCi0gKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUg
eW91ciBkZWNpc2lvbiBieQotICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVw
bGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKLSAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWly
ZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUuCi0gKiBJZiB5b3Ug
ZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5
b3VyCi0gKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBN
UEwgb3IgdGhlIEdQTC4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0
ZU1hdGguaCIKLQotI2luY2x1ZGUgIkpTTnVtYmVyQ2VsbC5oIgotI2luY2x1ZGUgPG1hdGguaD4K
LSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3Rm
L1N0cmluZ0V4dHJhcy5oPgotCi0jaWYgSEFWRShFUlJOT19IKQotI2luY2x1ZGUgPGVycm5vLmg+
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKERBUldJTikKLSNpbmNsdWRlIDxub3RpZnkuaD4KLSNl
bmRpZgotCi0jaWYgSEFWRShTWVNfVElNRV9IKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5k
aWYKLQotI2lmIEhBVkUoU1lTX1RJTUVCX0gpCi0jaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jZW5k
aWYKLQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLS8qIENvbnN0
YW50cyAqLwotCi1zdGF0aWMgY29uc3QgZG91YmxlIG1pbnV0ZXNQZXJEYXkgPSAyNC4wICogNjAu
MDsKLXN0YXRpYyBjb25zdCBkb3VibGUgc2Vjb25kc1BlckRheSA9IDI0LjAgKiA2MC4wICogNjAu
MDsKLXN0YXRpYyBjb25zdCBkb3VibGUgc2Vjb25kc1BlclllYXIgPSAyNC4wICogNjAuMCAqIDYw
LjAgKiAzNjUuMDsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSB1c2VjUGVyU2VjID0gMTAwMDAwMC4w
OwotCi1zdGF0aWMgY29uc3QgZG91YmxlIG1heFVuaXhUaW1lID0gMjE0NTg1OTIwMC4wOyAvLyAx
Mi8zMS8yMDM3Ci0KLS8vIERheSBvZiB5ZWFyIGZvciB0aGUgZmlyc3QgZGF5IG9mIGVhY2ggbW9u
dGgsIHdoZXJlIGluZGV4IDAgaXMgSmFudWFyeSwgYW5kIGRheSAwIGlzIEphbnVhcnkgMS4KLS8v
IEZpcnN0IGZvciBub24tbGVhcCB5ZWFycywgdGhlbiBmb3IgbGVhcCB5ZWFycy4KLXN0YXRpYyBj
b25zdCBpbnQgZmlyc3REYXlPZk1vbnRoWzJdWzEyXSA9IHsKLSAgICB7MCwgMzEsIDU5LCA5MCwg
MTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzR9LAotICAgIHswLCAzMSwgNjAs
IDkxLCAxMjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwgMjc0LCAzMDUsIDMzNX0KLX07Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc0xlYXBZZWFyKGludCB5ZWFyKQotewotICAgIGlmICh5ZWFyICUgNCAh
PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHllYXIgJSA0MDAgPT0gMCkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHllYXIgJSAxMDAgPT0gMCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkYXlz
SW5ZZWFyKGludCB5ZWFyKQotewotICAgIHJldHVybiAzNjUgKyBpc0xlYXBZZWFyKHllYXIpOwot
fQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBkYXlzRnJvbTE5NzBUb1llYXIoaW50IHllYXIpCi17
Ci0gICAgLy8gVGhlIEdyZWdvcmlhbiBDYWxlbmRhciBydWxlcyBmb3IgbGVhcCB5ZWFyczoKLSAg
ICAvLyBFdmVyeSBmb3VydGggeWVhciBpcyBhIGxlYXAgeWVhci4gIDIwMDQsIDIwMDgsIGFuZCAy
MDEyIGFyZSBsZWFwIHllYXJzLgotICAgIC8vIEhvd2V2ZXIsIGV2ZXJ5IGh1bmRyZWR0aCB5ZWFy
IGlzIG5vdCBhIGxlYXAgeWVhci4gIDE5MDAgYW5kIDIxMDAgYXJlIG5vdCBsZWFwIHllYXJzLgot
ICAgIC8vIEV2ZXJ5IGZvdXIgaHVuZHJlZCB5ZWFycywgdGhlcmUncyBhIGxlYXAgeWVhciBhZnRl
ciBhbGwuICAyMDAwIGFuZCAyNDAwIGFyZSBsZWFwIHllYXJzLgotCi0gICAgc3RhdGljIGNvbnN0
IGludCBsZWFwRGF5c0JlZm9yZTE5NzFCeTRSdWxlID0gMTk3MCAvIDQ7Ci0gICAgc3RhdGljIGNv
bnN0IGludCBleGNsdWRlZExlYXBEYXlzQmVmb3JlMTk3MUJ5MTAwUnVsZSA9IDE5NzAgLyAxMDA7
Ci0gICAgc3RhdGljIGNvbnN0IGludCBsZWFwRGF5c0JlZm9yZTE5NzFCeTQwMFJ1bGUgPSAxOTcw
IC8gNDAwOwotCi0gICAgY29uc3QgZG91YmxlIHllYXJNaW51c09uZSA9IHllYXIgLSAxOwotICAg
IGNvbnN0IGRvdWJsZSB5ZWFyc1RvQWRkQnk0UnVsZSA9IGZsb29yKHllYXJNaW51c09uZSAvIDQu
MCkgLSBsZWFwRGF5c0JlZm9yZTE5NzFCeTRSdWxlOwotICAgIGNvbnN0IGRvdWJsZSB5ZWFyc1Rv
RXhjbHVkZUJ5MTAwUnVsZSA9IGZsb29yKHllYXJNaW51c09uZSAvIDEwMC4wKSAtIGV4Y2x1ZGVk
TGVhcERheXNCZWZvcmUxOTcxQnkxMDBSdWxlOwotICAgIGNvbnN0IGRvdWJsZSB5ZWFyc1RvQWRk
Qnk0MDBSdWxlID0gZmxvb3IoeWVhck1pbnVzT25lIC8gNDAwLjApIC0gbGVhcERheXNCZWZvcmUx
OTcxQnk0MDBSdWxlOwotCi0gICAgcmV0dXJuIDM2NS4wICogKHllYXIgLSAxOTcwKSArIHllYXJz
VG9BZGRCeTRSdWxlIC0geWVhcnNUb0V4Y2x1ZGVCeTEwMFJ1bGUgKyB5ZWFyc1RvQWRkQnk0MDBS
dWxlOwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBtc1RvRGF5cyhkb3VibGUgbXMpCi17Ci0g
ICAgcmV0dXJuIGZsb29yKG1zIC8gbXNQZXJEYXkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBt
c1RvWWVhcihkb3VibGUgbXMpCi17Ci0gICAgaW50IGFwcHJveFllYXIgPSBzdGF0aWNfY2FzdDxp
bnQ+KGZsb29yKG1zIC8gKG1zUGVyRGF5ICogMzY1LjI0MjUpKSArIDE5NzApOwotICAgIGRvdWJs
ZSBtc0Zyb21BcHByb3hZZWFyVG8xOTcwID0gbXNQZXJEYXkgKiBkYXlzRnJvbTE5NzBUb1llYXIo
YXBwcm94WWVhcik7Ci0gICAgaWYgKG1zRnJvbUFwcHJveFllYXJUbzE5NzAgPiBtcykKLSAgICAg
ICAgcmV0dXJuIGFwcHJveFllYXIgLSAxOwotICAgIGlmIChtc0Zyb21BcHByb3hZZWFyVG8xOTcw
ICsgbXNQZXJEYXkgKiBkYXlzSW5ZZWFyKGFwcHJveFllYXIpIDw9IG1zKQotICAgICAgICByZXR1
cm4gYXBwcm94WWVhciArIDE7Ci0gICAgcmV0dXJuIGFwcHJveFllYXI7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgaW50IGRheUluWWVhcihkb3VibGUgbXMsIGludCB5ZWFyKQotewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KG1zVG9EYXlzKG1zKSAtIGRheXNGcm9tMTk3MFRvWWVhcih5ZWFyKSk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIG1zVG9NaWxsaXNlY29uZHMoZG91YmxlIG1zKQot
ewotICAgIGRvdWJsZSByZXN1bHQgPSBmbW9kKG1zLCBtc1BlckRheSk7Ci0gICAgaWYgKHJlc3Vs
dCA8IDApCi0gICAgICAgIHJlc3VsdCArPSBtc1BlckRheTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi0vLyAwOiBTdW5kYXksIDE6IE1vbmRheSwgZXRjLgotc3RhdGljIGlubGluZSBpbnQgbXNU
b1dlZWtEYXkoZG91YmxlIG1zKQotewotICAgIGludCB3ZCA9IChzdGF0aWNfY2FzdDxpbnQ+KG1z
VG9EYXlzKG1zKSkgKyA0KSAlIDc7Ci0gICAgaWYgKHdkIDwgMCkKLSAgICAgICAgd2QgKz0gNzsK
LSAgICByZXR1cm4gd2Q7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1zVG9TZWNvbmRzKGRvdWJs
ZSBtcykKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gZm1vZChmbG9vcihtcyAvIG1zUGVyU2Vjb25k
KSwgc2Vjb25kc1Blck1pbnV0ZSk7Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJlc3Vs
dCArPSBzZWNvbmRzUGVyTWludXRlOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHJlc3Vs
dCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1zVG9NaW51dGVzKGRvdWJsZSBtcykKLXsKLSAg
ICBkb3VibGUgcmVzdWx0ID0gZm1vZChmbG9vcihtcyAvIG1zUGVyTWludXRlKSwgbWludXRlc1Bl
ckhvdXIpOwotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICByZXN1bHQgKz0gbWludXRlc1Bl
ckhvdXI7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocmVzdWx0KTsKLX0KLQotc3RhdGlj
IGlubGluZSBpbnQgbXNUb0hvdXJzKGRvdWJsZSBtcykKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0g
Zm1vZChmbG9vcihtcy9tc1BlckhvdXIpLCBob3Vyc1BlckRheSk7Ci0gICAgaWYgKHJlc3VsdCA8
IDApCi0gICAgICAgIHJlc3VsdCArPSBob3Vyc1BlckRheTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50PihyZXN1bHQpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtb250aEZyb21EYXlJblll
YXIoaW50IGRheUluWWVhciwgYm9vbCBsZWFwWWVhcikKLXsKLSAgICBjb25zdCBpbnQgZCA9IGRh
eUluWWVhcjsKLSAgICBpbnQgc3RlcDsKLQotICAgIGlmIChkIDwgKHN0ZXAgPSAzMSkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIHN0ZXAgKz0gKGxlYXBZZWFyID8gMjkgOiAyOCk7Ci0gICAgaWYg
KGQgPCBzdGVwKQotICAgICAgICByZXR1cm4gMTsKLSAgICBpZiAoZCA8IChzdGVwICs9IDMxKSkK
LSAgICAgICAgcmV0dXJuIDI7Ci0gICAgaWYgKGQgPCAoc3RlcCArPSAzMCkpCi0gICAgICAgIHJl
dHVybiAzOwotICAgIGlmIChkIDwgKHN0ZXAgKz0gMzEpKQotICAgICAgICByZXR1cm4gNDsKLSAg
ICBpZiAoZCA8IChzdGVwICs9IDMwKSkKLSAgICAgICAgcmV0dXJuIDU7Ci0gICAgaWYgKGQgPCAo
c3RlcCArPSAzMSkpCi0gICAgICAgIHJldHVybiA2OwotICAgIGlmIChkIDwgKHN0ZXAgKz0gMzEp
KQotICAgICAgICByZXR1cm4gNzsKLSAgICBpZiAoZCA8IChzdGVwICs9IDMwKSkKLSAgICAgICAg
cmV0dXJuIDg7Ci0gICAgaWYgKGQgPCAoc3RlcCArPSAzMSkpCi0gICAgICAgIHJldHVybiA5Owot
ICAgIGlmIChkIDwgKHN0ZXAgKz0gMzApKQotICAgICAgICByZXR1cm4gMTA7Ci0gICAgcmV0dXJu
IDExOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tNb250aChpbnQgZGF5SW5ZZWFyLCBp
bnQmIHN0YXJ0RGF5T2ZUaGlzTW9udGgsIGludCYgc3RhcnREYXlPZk5leHRNb250aCwgaW50IGRh
eXNJblRoaXNNb250aCkKLXsKLSAgICBzdGFydERheU9mVGhpc01vbnRoID0gc3RhcnREYXlPZk5l
eHRNb250aDsKLSAgICBzdGFydERheU9mTmV4dE1vbnRoICs9IGRheXNJblRoaXNNb250aDsKLSAg
ICByZXR1cm4gKGRheUluWWVhciA8PSBzdGFydERheU9mTmV4dE1vbnRoKTsKLX0KLQotc3RhdGlj
IGlubGluZSBpbnQgZGF5SW5Nb250aEZyb21EYXlJblllYXIoaW50IGRheUluWWVhciwgYm9vbCBs
ZWFwWWVhcikKLXsKLSAgICBjb25zdCBpbnQgZCA9IGRheUluWWVhcjsKLSAgICBpbnQgc3RlcDsK
LSAgICBpbnQgbmV4dCA9IDMwOwotCi0gICAgaWYgKGQgPD0gbmV4dCkKLSAgICAgICAgcmV0dXJu
IGQgKyAxOwotICAgIGNvbnN0IGludCBkYXlzSW5GZWIgPSAobGVhcFllYXIgPyAyOSA6IDI4KTsK
LSAgICBpZiAoY2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCBkYXlzSW5GZWIpKQotICAgICAgICBy
ZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzEpKQot
ICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4
dCwgMzApKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwg
c3RlcCwgbmV4dCwgMzEpKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNr
TW9udGgoZCwgc3RlcCwgbmV4dCwgMzApKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAg
aWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzEpKQotICAgICAgICByZXR1cm4gZCAtIHN0
ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzEpKQotICAgICAgICByZXR1
cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzApKQotICAg
ICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwg
MzEpKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3Rl
cCwgbmV4dCwgMzApKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgc3RlcCA9IG5leHQ7
Ci0gICAgcmV0dXJuIGQgLSBzdGVwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtb250aFRvRGF5
SW5ZZWFyKGludCBtb250aCwgYm9vbCBpc0xlYXBZZWFyKQotewotICAgIHJldHVybiBmaXJzdERh
eU9mTW9udGhbaXNMZWFwWWVhcl1bbW9udGhdOwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSB0
aW1lVG9NUyhkb3VibGUgaG91ciwgZG91YmxlIG1pbiwgZG91YmxlIHNlYywgZG91YmxlIG1zKQot
ewotICAgIHJldHVybiAoKChob3VyICogbWludXRlc1BlckhvdXIgKyBtaW4pICogc2Vjb25kc1Bl
ck1pbnV0ZSArIHNlYykgKiBtc1BlclNlY29uZCArIG1zKTsKLX0KLQotc3RhdGljIGludCBkYXRl
VG9EYXlJblllYXIoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSkKLXsKLSAgICB5ZWFyICs9
IG1vbnRoIC8gMTI7Ci0KLSAgICBtb250aCAlPSAxMjsKLSAgICBpZiAobW9udGggPCAwKSB7Ci0g
ICAgICAgIG1vbnRoICs9IDEyOwotICAgICAgICAtLXllYXI7Ci0gICAgfQotCi0gICAgaW50IHll
YXJkYXkgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yKGRheXNGcm9tMTk3MFRvWWVhcih5ZWFyKSkp
OwotICAgIGludCBtb250aGRheSA9IG1vbnRoVG9EYXlJblllYXIobW9udGgsIGlzTGVhcFllYXIo
eWVhcikpOwotCi0gICAgcmV0dXJuIHllYXJkYXkgKyBtb250aGRheSArIGRheSAtIDE7Ci19Ci0K
LWRvdWJsZSBnZXRDdXJyZW50VVRDVGltZSgpCi17Ci0gICAgcmV0dXJuIGZsb29yKGdldEN1cnJl
bnRVVENUaW1lV2l0aE1pY3Jvc2Vjb25kcygpKTsKLX0KLQotLy8gUmV0dXJucyBjdXJyZW50IHRp
bWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIDEgSmFuIDE5NzAuCi1kb3VibGUgZ2V0Q3VycmVudFVU
Q1RpbWVXaXRoTWljcm9zZWNvbmRzKCkKLXsKLSAgICByZXR1cm4gY3VycmVudFRpbWUoKSAqIDEw
MDAuMDsgCi19Ci0KLXZvaWQgZ2V0TG9jYWxUaW1lKGNvbnN0IHRpbWVfdCogbG9jYWxUaW1lLCBz
dHJ1Y3QgdG0qIGxvY2FsVE0pCi17Ci0jaWYgQ09NUElMRVIoTVNWQzcpIHx8IENPTVBJTEVSKE1J
TkdXKSB8fCBQTEFURk9STShXSU5fQ0UpCi0gICAgKmxvY2FsVE0gPSAqbG9jYWx0aW1lKGxvY2Fs
VGltZSk7Ci0jZWxpZiBDT01QSUxFUihNU1ZDKQotICAgIGxvY2FsdGltZV9zKGxvY2FsVE0sIGxv
Y2FsVGltZSk7Ci0jZWxzZQotICAgIGxvY2FsdGltZV9yKGxvY2FsVGltZSwgbG9jYWxUTSk7Ci0j
ZW5kaWYKLX0KLQotLy8gVGhlcmUgaXMgYSBoYXJkIGxpbWl0IGF0IDIwMzggdGhhdCB3ZSBjdXJy
ZW50bHkgZG8gbm90IGhhdmUgYSB3b3JrYXJvdW5kCi0vLyBmb3IgKHJkYXI6Ly9wcm9ibGVtLzUw
NTI5NzUpLgotc3RhdGljIGlubGluZSBpbnQgbWF4aW11bVllYXJGb3JEU1QoKQotewotICAgIHJl
dHVybiAyMDM3OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtaW5pbXVtWWVhckZvckRTVCgpCi17
Ci0gICAgLy8gQmVjYXVzZSBvZiB0aGUgMjAzOCBpc3N1ZSAoc2VlIG1heGltdW1ZZWFyRm9yRFNU
KSBpZiB0aGUgY3VycmVudCB5ZWFyIGlzCi0gICAgLy8gZ3JlYXRlciB0aGFuIHRoZSBtYXggeWVh
ciBtaW51cyAyNyAoMjAxMCksIHdlIHdhbnQgdG8gdXNlIHRoZSBtYXggeWVhcgotICAgIC8vIG1p
bnVzIDI3IGluc3RlYWQsIHRvIGVuc3VyZSB0aGVyZSBpcyBhIHJhbmdlIG9mIDI4IHllYXJzIHRo
YXQgYWxsIHllYXJzCi0gICAgLy8gY2FuIG1hcCB0by4KLSAgICByZXR1cm4gc3RkOjptaW4obXNU
b1llYXIoZ2V0Q3VycmVudFVUQ1RpbWUoKSksIG1heGltdW1ZZWFyRm9yRFNUKCkgLSAyNykgOwot
fQotCi0vKgotICogRmluZCBhbiBlcXVpdmFsZW50IHllYXIgZm9yIHRoZSBvbmUgZ2l2ZW4sIHdo
ZXJlIGVxdWl2YWxlbmNlIGlzIGRldGVyaW5lZCBieQotICogdGhlIHR3byB5ZWFycyBoYXZpbmcg
dGhlIHNhbWUgbGVhcG5lc3MgYW5kIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHllYXIsIGZhbGxpbmcK
LSAqIG9uIHRoZSBzYW1lIGRheSBvZiB0aGUgd2Vlay4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJl
dHVybnMgYSB5ZWFyIGJldHdlZW4gdGhpcyBjdXJyZW50IHllYXIgYW5kIDIwMzcsIGhvd2V2ZXIg
dGhpcwotICogZnVuY3Rpb24gd2lsbCBwb3RlbnRpYWxseSByZXR1cm4gaW5jb3JyZWN0IHJlc3Vs
dHMgaWYgdGhlIGN1cnJlbnQgeWVhciBpcyBhZnRlcgotICogMjAxMCwgKHJkYXI6Ly9wcm9ibGVt
LzUwNTI5NzUpLCBpZiB0aGUgeWVhciBwYXNzZWQgaW4gaXMgYmVmb3JlIDE5MDAgb3IgYWZ0ZXIK
LSAqIDIxMDAsIChyZGFyOi8vcHJvYmxlbS81MDU1MDM4KS4KLSAqLwotaW50IGVxdWl2YWxlbnRZ
ZWFyRm9yRFNUKGludCB5ZWFyKQotewotICAgIC8vIEl0IGlzIG9rIGlmIHRoZSBjYWNoZWQgeWVh
ciBpcyBub3QgdGhlIGN1cnJlbnQgeWVhciBhcyBsb25nIGFzIHRoZSBydWxlcwotICAgIC8vIGZv
ciBEU1QgZGlkIG5vdCBjaGFuZ2UgYmV0d2VlbiB0aGUgdHdvIHllYXJzOyBpZiB0aGV5IGRpZCB0
aGUgYXBwIHdvdWxkIG5lZWQKLSAgICAvLyB0byBiZSByZXN0YXJ0ZWQuCi0gICAgc3RhdGljIGlu
dCBtaW5ZZWFyID0gbWluaW11bVllYXJGb3JEU1QoKTsKLSAgICBpbnQgbWF4WWVhciA9IG1heGlt
dW1ZZWFyRm9yRFNUKCk7Ci0KLSAgICBpbnQgZGlmZmVyZW5jZTsKLSAgICBpZiAoeWVhciA+IG1h
eFllYXIpCi0gICAgICAgIGRpZmZlcmVuY2UgPSBtaW5ZZWFyIC0geWVhcjsKLSAgICBlbHNlIGlm
ICh5ZWFyIDwgbWluWWVhcikKLSAgICAgICAgZGlmZmVyZW5jZSA9IG1heFllYXIgLSB5ZWFyOwot
ICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHllYXI7Ci0KLSAgICBpbnQgcXVvdGllbnQgPSBkaWZm
ZXJlbmNlIC8gMjg7Ci0gICAgaW50IHByb2R1Y3QgPSAocXVvdGllbnQpICogMjg7Ci0KLSAgICB5
ZWFyICs9IHByb2R1Y3Q7Ci0gICAgQVNTRVJUKCh5ZWFyID49IG1pblllYXIgJiYgeWVhciA8PSBt
YXhZZWFyKSB8fCAocHJvZHVjdCAtIHllYXIgPT0gc3RhdGljX2Nhc3Q8aW50PihOYU4pKSk7Ci0g
ICAgcmV0dXJuIHllYXI7Ci19Ci0KLXN0YXRpYyBpbnQzMl90IGNhbGN1bGF0ZVVUQ09mZnNldCgp
Ci17Ci0gICAgdG0gbG9jYWx0OwotICAgIG1lbXNldCgmbG9jYWx0LCAwLCBzaXplb2YobG9jYWx0
KSk7Ci0gCi0gICAgLy8gZ2V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyB0aW1lIHpvbmUg
YW5kIFVUQyBvbiBKYW4gMDEsIDIwMDAgMTI6MDA6MDAgQU0KLSAgICBsb2NhbHQudG1fbWRheSA9
IDE7Ci0gICAgbG9jYWx0LnRtX3llYXIgPSAxMDA7Ci0gICAgdGltZV90IHV0Y09mZnNldCA9IDk0
NjY4NDgwMCAtIG1rdGltZSgmbG9jYWx0KTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQz
Ml90Pih1dGNPZmZzZXQgKiAxMDAwKTsKLX0KLQotI2lmIFBMQVRGT1JNKERBUldJTikKLXN0YXRp
YyBpbnQzMl90IHNfY2FjaGVkVVRDT2Zmc2V0OyAvLyBJbiBtaWxsaXNlY29uZHMuIEFuIGFzc3Vt
cHRpb24gaGVyZSBpcyB0aGF0IGFjY2VzcyB0byBhbiBpbnQzMl90IHZhcmlhYmxlIGlzIGF0b21p
YyBvbiBwbGF0Zm9ybXMgdGhhdCB0YWtlIHRoaXMgY29kZSBwYXRoLgotc3RhdGljIGJvb2wgc19o
YXZlQ2FjaGVkVVRDT2Zmc2V0Owotc3RhdGljIGludCBzX25vdGlmaWNhdGlvblRva2VuOwotI2Vu
ZGlmCi0KLS8qCi0gKiBHZXQgdGhlIGRpZmZlcmVuY2UgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4g
dGhpcyB0aW1lIHpvbmUgYW5kIFVUQyAoR01UKQotICogTk9UIGluY2x1ZGluZyBEU1QuCi0gKi8K
LWRvdWJsZSBnZXRVVENPZmZzZXQoKQotewotI2lmIFBMQVRGT1JNKERBUldJTikKLSAgICBpZiAo
c19oYXZlQ2FjaGVkVVRDT2Zmc2V0KSB7Ci0gICAgICAgIGludCBub3RpZmllZDsKLSAgICAgICAg
dWludDMyX3Qgc3RhdHVzID0gbm90aWZ5X2NoZWNrKHNfbm90aWZpY2F0aW9uVG9rZW4sICZub3Rp
ZmllZCk7Ci0gICAgICAgIGlmIChzdGF0dXMgPT0gTk9USUZZX1NUQVRVU19PSyAmJiAhbm90aWZp
ZWQpCi0gICAgICAgICAgICByZXR1cm4gc19jYWNoZWRVVENPZmZzZXQ7Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICBpbnQzMl90IHV0Y09mZnNldCA9IGNhbGN1bGF0ZVVUQ09mZnNldCgpOwotCi0jaWYg
UExBVEZPUk0oREFSV0lOKQotICAgIC8vIFRoZW9yZXRpY2FsbHksIGl0IGlzIHBvc3NpYmxlIHRo
YXQgc2V2ZXJhbCB0aHJlYWRzIHdpbGwgYmUgZXhlY3V0aW5nIHRoaXMgY29kZSBhdCBvbmNlLCBp
biB3aGljaCBjYXNlIHdlIHdpbGwgaGF2ZSBhIHJhY2UgY29uZGl0aW9uLAotICAgIC8vIGFuZCBh
IG5ld2VyIHZhbHVlIG1heSBiZSBvdmVyd3JpdHRlbi4gSW4gcHJhY3RpY2UsIHRpbWUgem9uZXMg
ZG9uJ3QgY2hhbmdlIHRoYXQgb2Z0ZW4uCi0gICAgc19jYWNoZWRVVENPZmZzZXQgPSB1dGNPZmZz
ZXQ7Ci0jZW5kaWYKLQotICAgIHJldHVybiB1dGNPZmZzZXQ7Ci19Ci0KLS8qCi0gKiBHZXQgdGhl
IERTVCBvZmZzZXQgZm9yIHRoZSB0aW1lIHBhc3NlZCBpbi4gIFRha2VzCi0gKiBzZWNvbmRzIChu
b3QgbWlsbGlzZWNvbmRzKSBhbmQgY2Fubm90IGhhbmRsZSBkYXRlcyBiZWZvcmUgMTk3MAotICog
b24gc29tZSBPUycKLSAqLwotc3RhdGljIGRvdWJsZSBnZXREU1RPZmZzZXRTaW1wbGUoZG91Ymxl
IGxvY2FsVGltZVNlY29uZHMsIGRvdWJsZSB1dGNPZmZzZXQpCi17Ci0gICAgaWYgKGxvY2FsVGlt
ZVNlY29uZHMgPiBtYXhVbml4VGltZSkKLSAgICAgICAgbG9jYWxUaW1lU2Vjb25kcyA9IG1heFVu
aXhUaW1lOwotICAgIGVsc2UgaWYgKGxvY2FsVGltZVNlY29uZHMgPCAwKSAvLyBHbyBhaGVhZCBh
IGRheSB0byBtYWtlIGxvY2FsdGltZSB3b3JrIChkb2VzIG5vdCB3b3JrIHdpdGggMCkKLSAgICAg
ICAgbG9jYWxUaW1lU2Vjb25kcyArPSBzZWNvbmRzUGVyRGF5OwotCi0gICAgLy9pbnB1dCBpcyBV
VEMgc28gd2UgaGF2ZSB0byBzaGlmdCBiYWNrIHRvIGxvY2FsIHRpbWUgdG8gZGV0ZXJtaW5lIERT
VCB0aHVzIHRoZSArIGdldFVUQ09mZnNldCgpCi0gICAgZG91YmxlIG9mZnNldFRpbWUgPSAobG9j
YWxUaW1lU2Vjb25kcyAqIG1zUGVyU2Vjb25kKSArIHV0Y09mZnNldDsKLQotICAgIC8vIE9mZnNl
dCBmcm9tIFVUQyBidXQgZG9lc24ndCBpbmNsdWRlIERTVCBvYnZpb3VzbHkKLSAgICBpbnQgb2Zm
c2V0SG91ciA9ICBtc1RvSG91cnMob2Zmc2V0VGltZSk7Ci0gICAgaW50IG9mZnNldE1pbnV0ZSA9
ICBtc1RvTWludXRlcyhvZmZzZXRUaW1lKTsKLQotICAgIC8vIEZJWE1FOiB0aW1lX3QgaGFzIGEg
cG90ZW50aWFsIHByb2JsZW0gaW4gMjAzOAotICAgIHRpbWVfdCBsb2NhbFRpbWUgPSBzdGF0aWNf
Y2FzdDx0aW1lX3Q+KGxvY2FsVGltZVNlY29uZHMpOwotCi0gICAgdG0gbG9jYWxUTTsKLSAgICBn
ZXRMb2NhbFRpbWUoJmxvY2FsVGltZSwgJmxvY2FsVE0pOwotCi0gICAgZG91YmxlIGRpZmYgPSAo
KGxvY2FsVE0udG1faG91ciAtIG9mZnNldEhvdXIpICogc2Vjb25kc1BlckhvdXIpICsgKChsb2Nh
bFRNLnRtX21pbiAtIG9mZnNldE1pbnV0ZSkgKiA2MCk7Ci0KLSAgICBpZiAoZGlmZiA8IDApCi0g
ICAgICAgIGRpZmYgKz0gc2Vjb25kc1BlckRheTsKLQotICAgIHJldHVybiAoZGlmZiAqIG1zUGVy
U2Vjb25kKTsKLX0KLQotLy8gR2V0IHRoZSBEU1Qgb2Zmc2V0LCBnaXZlbiBhIHRpbWUgaW4gVVRD
Ci1zdGF0aWMgZG91YmxlIGdldERTVE9mZnNldChkb3VibGUgbXMsIGRvdWJsZSB1dGNPZmZzZXQp
Ci17Ci0gICAgLy8gT24gTWFjIE9TIFgsIHRoZSBjYWxsIHRvIGxvY2FsdGltZSAoc2VlIGdldERT
VE9mZnNldFNpbXBsZSkgd2lsbCByZXR1cm4gaGlzdG9yaWNhbGx5IGFjY3VyYXRlCi0gICAgLy8g
RFNUIGluZm9ybWF0aW9uIChlLmcuIE5ldyBaZWFsYW5kIGRpZCBub3QgaGF2ZSBEU1QgZnJvbSAx
OTQ2IHRvIDE5NzQpIGhvd2V2ZXIgdGhlIEphdmFTY3JpcHQKLSAgICAvLyBzdGFuZGFyZCBleHBs
aWNpdGx5IGRpY3RhdGVzIHRoYXQgaGlzdG9yaWNhbCBpbmZvcm1hdGlvbiBzaG91bGQgbm90IGJl
IGNvbnNpZGVyZWQgd2hlbgotICAgIC8vIGRldGVybWluaW5nIERTVC4gRm9yIHRoaXMgcmVhc29u
IHdlIHNoaWZ0IGF3YXkgZnJvbSB5ZWFycyB0aGF0IGxvY2FsdGltZSBjYW4gaGFuZGxlIGJ1dCB3
b3VsZAotICAgIC8vIHJldHVybiBoaXN0b3JpY2FsbHkgYWNjdXJhdGUgaW5mb3JtYXRpb24uCi0g
ICAgaW50IHllYXIgPSBtc1RvWWVhcihtcyk7Ci0gICAgaW50IGVxdWl2YWxlbnRZZWFyID0gZXF1
aXZhbGVudFllYXJGb3JEU1QoeWVhcik7Ci0gICAgaWYgKHllYXIgIT0gZXF1aXZhbGVudFllYXIp
IHsKLSAgICAgICAgYm9vbCBsZWFwWWVhciA9IGlzTGVhcFllYXIoeWVhcik7Ci0gICAgICAgIGlu
dCBkYXlJblllYXJMb2NhbCA9IGRheUluWWVhcihtcywgeWVhcik7Ci0gICAgICAgIGludCBkYXlJ
bk1vbnRoID0gZGF5SW5Nb250aEZyb21EYXlJblllYXIoZGF5SW5ZZWFyTG9jYWwsIGxlYXBZZWFy
KTsKLSAgICAgICAgaW50IG1vbnRoID0gbW9udGhGcm9tRGF5SW5ZZWFyKGRheUluWWVhckxvY2Fs
LCBsZWFwWWVhcik7Ci0gICAgICAgIGludCBkYXkgPSBkYXRlVG9EYXlJblllYXIoZXF1aXZhbGVu
dFllYXIsIG1vbnRoLCBkYXlJbk1vbnRoKTsKLSAgICAgICAgbXMgPSAoZGF5ICogbXNQZXJEYXkp
ICsgbXNUb01pbGxpc2Vjb25kcyhtcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdldERTVE9mZnNl
dFNpbXBsZShtcyAvIG1zUGVyU2Vjb25kLCB1dGNPZmZzZXQpOwotfQotCi1kb3VibGUgZ3JlZ29y
aWFuRGF0ZVRpbWVUb01TKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJiB0LCBkb3VibGUgbWlsbGlT
ZWNvbmRzLCBib29sIGlucHV0SXNVVEMpCi17Ci0gICAgaW50IGRheSA9IGRhdGVUb0RheUluWWVh
cih0LnllYXIgKyAxOTAwLCB0Lm1vbnRoLCB0Lm1vbnRoRGF5KTsKLSAgICBkb3VibGUgbXMgPSB0
aW1lVG9NUyh0LmhvdXIsIHQubWludXRlLCB0LnNlY29uZCwgbWlsbGlTZWNvbmRzKTsKLSAgICBk
b3VibGUgcmVzdWx0ID0gKGRheSAqIG1zUGVyRGF5KSArIG1zOwotCi0gICAgaWYgKCFpbnB1dElz
VVRDKSB7IC8vIGNvbnZlcnQgdG8gVVRDCi0gICAgICAgIGRvdWJsZSB1dGNPZmZzZXQgPSBnZXRV
VENPZmZzZXQoKTsKLSAgICAgICAgcmVzdWx0IC09IHV0Y09mZnNldDsKLSAgICAgICAgcmVzdWx0
IC09IGdldERTVE9mZnNldChyZXN1bHQsIHV0Y09mZnNldCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdm9pZCBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoZG91YmxlIG1zLCBib29s
IG91dHB1dElzVVRDLCBHcmVnb3JpYW5EYXRlVGltZSYgdG0pCi17Ci0gICAgLy8gaW5wdXQgaXMg
VVRDCi0gICAgZG91YmxlIGRzdE9mZiA9IDAuMDsKLSAgICBjb25zdCBkb3VibGUgdXRjT2ZmID0g
Z2V0VVRDT2Zmc2V0KCk7Ci0KLSAgICBpZiAoIW91dHB1dElzVVRDKSB7ICAvLyBjb252ZXJ0IHRv
IGxvY2FsIHRpbWUKLSAgICAgICAgZHN0T2ZmID0gZ2V0RFNUT2Zmc2V0KG1zLCB1dGNPZmYpOwot
ICAgICAgICBtcyArPSBkc3RPZmYgKyB1dGNPZmY7Ci0gICAgfQotCi0gICAgY29uc3QgaW50IHll
YXIgPSBtc1RvWWVhcihtcyk7Ci0gICAgdG0uc2Vjb25kICAgPSAgbXNUb1NlY29uZHMobXMpOwot
ICAgIHRtLm1pbnV0ZSAgID0gIG1zVG9NaW51dGVzKG1zKTsKLSAgICB0bS5ob3VyICAgICA9ICBt
c1RvSG91cnMobXMpOwotICAgIHRtLndlZWtEYXkgID0gIG1zVG9XZWVrRGF5KG1zKTsKLSAgICB0
bS55ZWFyRGF5ICA9ICBkYXlJblllYXIobXMsIHllYXIpOwotICAgIHRtLm1vbnRoRGF5ID0gIGRh
eUluTW9udGhGcm9tRGF5SW5ZZWFyKHRtLnllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOwotICAg
IHRtLm1vbnRoICAgID0gIG1vbnRoRnJvbURheUluWWVhcih0bS55ZWFyRGF5LCBpc0xlYXBZZWFy
KHllYXIpKTsKLSAgICB0bS55ZWFyICAgICA9ICB5ZWFyIC0gMTkwMDsKLSAgICB0bS5pc0RTVCAg
ICA9ICBkc3RPZmYgIT0gMC4wOwotCi0gICAgdG0udXRjT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8bG9u
Zz4oKGRzdE9mZiArIHV0Y09mZikgLyBtc1BlclNlY29uZCk7Ci0gICAgdG0udGltZVpvbmUgPSBO
VUxMOwotfQotCi12b2lkIGluaXREYXRlTWF0aCgpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIHN0
YXRpYyBib29sIGFscmVhZHlJbml0aWFsaXplZDsKLSAgICBBU1NFUlQoIWFscmVhZHlJbml0aWFs
aXplZCsrKTsKLSNlbmRpZgotCi0gICAgZXF1aXZhbGVudFllYXJGb3JEU1QoMjAwMCk7IC8vIE5l
ZWQgdG8gY2FsbCBvbmNlIHRvIGluaXRpYWxpemUgYSBzdGF0aWMgdXNlZCBpbiB0aGlzIGZ1bmN0
aW9uLgotI2lmIFBMQVRGT1JNKERBUldJTikKLSAgICAvLyBSZWdpc3RlciBmb3IgYSBub3RpZmlj
YXRpb24gd2hlbmV2ZXIgdGhlIHRpbWUgem9uZSBjaGFuZ2VzLgotICAgIHVpbnQzMl90IHN0YXR1
cyA9IG5vdGlmeV9yZWdpc3Rlcl9jaGVjaygiY29tLmFwcGxlLnN5c3RlbS50aW1lem9uZSIsICZz
X25vdGlmaWNhdGlvblRva2VuKTsKLSAgICBpZiAoc3RhdHVzID09IE5PVElGWV9TVEFUVVNfT0sp
IHsKLSAgICAgICAgc19jYWNoZWRVVENPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKLSAg
ICAgICAgc19oYXZlQ2FjaGVkVVRDT2Zmc2V0ID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLX0KLQot
c3RhdGljIGlubGluZSBkb3VibGUgeW1kaG1zVG9TZWNvbmRzKGxvbmcgeWVhciwgaW50IG1vbiwg
aW50IGRheSwgaW50IGhvdXIsIGludCBtaW51dGUsIGludCBzZWNvbmQpCi17Ci0gICAgZG91Ymxl
IGRheXMgPSAoZGF5IC0gMzIwNzUpCi0gICAgICAgICsgZmxvb3IoMTQ2MSAqICh5ZWFyICsgNDgw
MC4wICsgKG1vbiAtIDE0KSAvIDEyKSAvIDQpCi0gICAgICAgICsgMzY3ICogKG1vbiAtIDIgLSAo
bW9uIC0gMTQpIC8gMTIgKiAxMikgLyAxMgotICAgICAgICAtIGZsb29yKDMgKiAoKHllYXIgKyA0
OTAwLjAgKyAobW9uIC0gMTQpIC8gMTIpIC8gMTAwKSAvIDQpCi0gICAgICAgIC0gMjQ0MDU4ODsK
LSAgICByZXR1cm4gKChkYXlzICogaG91cnNQZXJEYXkgKyBob3VyKSAqIG1pbnV0ZXNQZXJIb3Vy
ICsgbWludXRlKSAqIHNlY29uZHNQZXJNaW51dGUgKyBzZWNvbmQ7Ci19Ci0KLS8vIFdlIGZvbGxv
dyB0aGUgcmVjb21tZW5kYXRpb24gb2YgUkZDIDI4MjIgdG8gY29uc2lkZXIgYWxsCi0vLyBvYnNv
bGV0ZSB0aW1lIHpvbmVzIG5vdCBsaXN0ZWQgaGVyZSBlcXVpdmFsZW50IHRvICItMDAwMCIuCi1z
dGF0aWMgY29uc3Qgc3RydWN0IEtub3duWm9uZSB7Ci0jaWYgIVBMQVRGT1JNKFdJTl9PUykKLSAg
ICBjb25zdAotI2VuZGlmCi0gICAgICAgIGNoYXIgdHpOYW1lWzRdOwotICAgIGludCB0ek9mZnNl
dDsKLX0ga25vd25fem9uZXNbXSA9IHsKLSAgICB7ICJVVCIsIDAgfSwKLSAgICB7ICJHTVQiLCAw
IH0sCi0gICAgeyAiRVNUIiwgLTMwMCB9LAotICAgIHsgIkVEVCIsIC0yNDAgfSwKLSAgICB7ICJD
U1QiLCAtMzYwIH0sCi0gICAgeyAiQ0RUIiwgLTMwMCB9LAotICAgIHsgIk1TVCIsIC00MjAgfSwK
LSAgICB7ICJNRFQiLCAtMzYwIH0sCi0gICAgeyAiUFNUIiwgLTQ4MCB9LAotICAgIHsgIlBEVCIs
IC00MjAgfQotfTsKLQotaW5saW5lIHN0YXRpYyB2b2lkIHNraXBTcGFjZXNBbmRDb21tZW50cyhj
b25zdCBjaGFyKiYgcykKLXsKLSAgICBpbnQgbmVzdGluZyA9IDA7Ci0gICAgY2hhciBjaDsKLSAg
ICB3aGlsZSAoKGNoID0gKnMpKSB7Ci0gICAgICAgIGlmICghaXNBU0NJSVNwYWNlKGNoKSkgewot
ICAgICAgICAgICAgaWYgKGNoID09ICcoJykKLSAgICAgICAgICAgICAgICBuZXN0aW5nKys7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnKScgJiYgbmVzdGluZyA+IDApCi0gICAgICAgICAg
ICAgICAgbmVzdGluZy0tOwotICAgICAgICAgICAgZWxzZSBpZiAobmVzdGluZyA9PSAwKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHMrKzsKLSAgICB9Ci19Ci0K
LS8vIHJldHVybnMgMC0xMSAoSmFuLURlYyk7IC0xIG9uIGZhaWx1cmUKLXN0YXRpYyBpbnQgZmlu
ZE1vbnRoKGNvbnN0IGNoYXIqIG1vbnRoU3RyKQotewotICAgIEFTU0VSVChtb250aFN0cik7Ci0g
ICAgY2hhciBuZWVkbGVbNF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAg
ICAgICAgaWYgKCEqbW9udGhTdHIpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIG5l
ZWRsZVtpXSA9IHN0YXRpY19jYXN0PGNoYXI+KHRvQVNDSUlMb3dlcigqbW9udGhTdHIrKykpOwot
ICAgIH0KLSAgICBuZWVkbGVbM10gPSAnXDAnOwotICAgIGNvbnN0IGNoYXIgKmhheXN0YWNrID0g
ImphbmZlYm1hcmFwcm1heWp1bmp1bGF1Z3NlcG9jdG5vdmRlYyI7Ci0gICAgY29uc3QgY2hhciAq
c3RyID0gc3Ryc3RyKGhheXN0YWNrLCBuZWVkbGUpOwotICAgIGlmIChzdHIpIHsKLSAgICAgICAg
aW50IHBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8aW50PihzdHIgLSBoYXlzdGFjayk7Ci0gICAgICAg
IGlmIChwb3NpdGlvbiAlIDMgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiAvIDM7
Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGJvb2wgcGFyc2VMb25nKGNvbnN0
IGNoYXIqIHN0cmluZywgY2hhcioqIHN0b3BQb3NpdGlvbiwgaW50IGJhc2UsIGxvbmcqIHJlc3Vs
dCkKLXsKLSAgICAqcmVzdWx0ID0gc3RydG9sKHN0cmluZywgc3RvcFBvc2l0aW9uLCBiYXNlKTsK
LSAgICAvLyBBdm9pZCB0aGUgdXNlIG9mIGVycm5vIGFzIGl0IGlzIG5vdCBhdmFpbGFibGUgb24g
V2luZG93cyBDRQotICAgIGlmIChzdHJpbmcgPT0gKnN0b3BQb3NpdGlvbiB8fCAqcmVzdWx0ID09
IExPTkdfTUlOIHx8ICpyZXN1bHQgPT0gTE9OR19NQVgpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZG91YmxlIHBhcnNlRGF0ZShjb25zdCBVU3RyaW5nICZk
YXRlKQotewotICAgIC8vIFRoaXMgcGFyc2VzIGEgZGF0ZSBpbiB0aGUgZm9ybToKLSAgICAvLyAg
ICAgVHVlc2RheSwgMDktTm92LTk5IDIzOjEyOjQwIEdNVAotICAgIC8vIG9yCi0gICAgLy8gICAg
IFNhdCwgMDEtSmFuLTIwMDAgMDg6MDA6MDAgR01UCi0gICAgLy8gb3IKLSAgICAvLyAgICAgU2F0
LCAwMSBKYW4gMjAwMCAwODowMDowMCBHTVQKLSAgICAvLyBvcgotICAgIC8vICAgICAwMSBKYW4g
OTkgMjI6MDAgKzAxMDAgICAgKGV4Y2VwdGlvbnMgaW4gcmZjODIyL3JmYzI4MjIpCi0gICAgLy8g
IyMjIG5vbiBSRkMgZm9ybWF0cywgYWRkZWQgZm9yIEphdmFzY3JpcHQ6Ci0gICAgLy8gICAgIFtX
ZWRuZXNkYXldIEphbnVhcnkgMDkgMTk5OSAyMzoxMjo0MCBHTVQKLSAgICAvLyAgICAgW1dlZG5l
c2RheV0gSmFudWFyeSAwOSAyMzoxMjo0MCBHTVQgMTk5OQotICAgIC8vCi0gICAgLy8gV2UgaWdu
b3JlIHRoZSB3ZWVrZGF5LgotCi0gICAgQ1N0cmluZyBkYXRlQ1N0cmluZyA9IGRhdGUuVVRGOFN0
cmluZygpOwotICAgIGNvbnN0IGNoYXIgKmRhdGVTdHJpbmcgPSBkYXRlQ1N0cmluZy5jX3N0cigp
OwotICAgICAKLSAgICAvLyBTa2lwIGxlYWRpbmcgc3BhY2UKLSAgICBza2lwU3BhY2VzQW5kQ29t
bWVudHMoZGF0ZVN0cmluZyk7Ci0KLSAgICBsb25nIG1vbnRoID0gLTE7Ci0gICAgY29uc3QgY2hh
ciAqd29yZFN0YXJ0ID0gZGF0ZVN0cmluZzsKLSAgICAvLyBDaGVjayBjb250ZW50cyBvZiBmaXJz
dCB3b3JkcyBpZiBub3QgbnVtYmVyCi0gICAgd2hpbGUgKCpkYXRlU3RyaW5nICYmICFpc0FTQ0lJ
RGlnaXQoKmRhdGVTdHJpbmcpKSB7Ci0gICAgICAgIGlmIChpc0FTQ0lJU3BhY2UoKmRhdGVTdHJp
bmcpIHx8ICpkYXRlU3RyaW5nID09ICcoJykgewotICAgICAgICAgICAgaWYgKGRhdGVTdHJpbmcg
LSB3b3JkU3RhcnQgPj0gMykKLSAgICAgICAgICAgICAgICBtb250aCA9IGZpbmRNb250aCh3b3Jk
U3RhcnQpOwotICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOwot
ICAgICAgICAgICAgd29yZFN0YXJ0ID0gZGF0ZVN0cmluZzsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgIGRhdGVTdHJpbmcrKzsKLSAgICB9Ci0KLSAgICAvLyBNaXNzaW5nIGRlbGltaXRlciBi
ZXR3ZWVuIG1vbnRoIGFuZCBkYXkgKGxpa2UgIkphbnVhcnkyOSIpPwotICAgIGlmIChtb250aCA9
PSAtMSAmJiB3b3JkU3RhcnQgIT0gZGF0ZVN0cmluZykKLSAgICAgICAgbW9udGggPSBmaW5kTW9u
dGgod29yZFN0YXJ0KTsKLQotICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsK
LQotICAgIGlmICghKmRhdGVTdHJpbmcpCi0gICAgICAgIHJldHVybiBOYU47Ci0KLSAgICAvLyAn
IDA5LU5vdi05OSAyMzoxMjo0MCBHTVQnCi0gICAgY2hhciogbmV3UG9zU3RyOwotICAgIGxvbmcg
ZGF5OwotICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmZGF5
KSkKLSAgICAgICAgcmV0dXJuIE5hTjsKLSAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwotCi0g
ICAgaWYgKCEqZGF0ZVN0cmluZykKLSAgICAgICAgcmV0dXJuIE5hTjsKLQotICAgIGlmIChkYXkg
PCAwKQotICAgICAgICByZXR1cm4gTmFOOwotCi0gICAgbG9uZyB5ZWFyID0gMDsKLSAgICBpZiAo
ZGF5ID4gMzEpIHsKLSAgICAgICAgLy8gIyMjIHdoZXJlIGlzIHRoZSBib3VuZGFyeSBhbmQgd2hh
dCBoYXBwZW5zIGJlbG93PwotICAgICAgICBpZiAoKmRhdGVTdHJpbmcgIT0gJy8nKQotICAgICAg
ICAgICAgcmV0dXJuIE5hTjsKLSAgICAgICAgLy8gbG9va3MgbGlrZSBhIFlZWVkvTU0vREQgZGF0
ZQotICAgICAgICBpZiAoISorK2RhdGVTdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gTmFOOwot
ICAgICAgICB5ZWFyID0gZGF5OwotICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAm
bmV3UG9zU3RyLCAxMCwgJm1vbnRoKSkKLSAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAg
IG1vbnRoIC09IDE7Ci0gICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7Ci0gICAgICAgIGlm
ICgqZGF0ZVN0cmluZysrICE9ICcvJyB8fCAhKmRhdGVTdHJpbmcpCi0gICAgICAgICAgICByZXR1
cm4gTmFOOwotICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAx
MCwgJmRheSkpCi0gICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICBkYXRlU3RyaW5nID0g
bmV3UG9zU3RyOwotICAgIH0gZWxzZSBpZiAoKmRhdGVTdHJpbmcgPT0gJy8nICYmIG1vbnRoID09
IC0xKSB7Ci0gICAgICAgIGRhdGVTdHJpbmcrKzsKLSAgICAgICAgLy8gVGhpcyBsb29rcyBsaWtl
IGEgTU0vREQvWVlZWSBkYXRlLCBub3QgYW4gUkZDIGRhdGUuCi0gICAgICAgIG1vbnRoID0gZGF5
IC0gMTsgLy8gMC1iYXNlZAotICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3
UG9zU3RyLCAxMCwgJmRheSkpCi0gICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICBpZiAo
ZGF5IDwgMSB8fCBkYXkgPiAzMSkKLSAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAgIGRh
dGVTdHJpbmcgPSBuZXdQb3NTdHI7Ci0gICAgICAgIGlmICgqZGF0ZVN0cmluZyA9PSAnLycpCi0g
ICAgICAgICAgICBkYXRlU3RyaW5nKys7Ci0gICAgICAgIGlmICghKmRhdGVTdHJpbmcpCi0gICAg
ICAgICAgICByZXR1cm4gTmFOOwotICAgICB9IGVsc2UgewotICAgICAgICBpZiAoKmRhdGVTdHJp
bmcgPT0gJy0nKQotICAgICAgICAgICAgZGF0ZVN0cmluZysrOwotCi0gICAgICAgIHNraXBTcGFj
ZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsKLQotICAgICAgICBpZiAoKmRhdGVTdHJpbmcgPT0g
JywnKQotICAgICAgICAgICAgZGF0ZVN0cmluZysrOwotCi0gICAgICAgIGlmIChtb250aCA9PSAt
MSkgeyAvLyBub3QgZm91bmQgeWV0Ci0gICAgICAgICAgICBtb250aCA9IGZpbmRNb250aChkYXRl
U3RyaW5nKTsKLSAgICAgICAgICAgIGlmIChtb250aCA9PSAtMSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gTmFOOwotCi0gICAgICAgICAgICB3aGlsZSAoKmRhdGVTdHJpbmcgJiYgKmRhdGVTdHJp
bmcgIT0gJy0nICYmICpkYXRlU3RyaW5nICE9ICcsJyAmJiAhaXNBU0NJSVNwYWNlKCpkYXRlU3Ry
aW5nKSkKLSAgICAgICAgICAgICAgICBkYXRlU3RyaW5nKys7Ci0KLSAgICAgICAgICAgIGlmICgh
KmRhdGVTdHJpbmcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKLQotICAgICAgICAgICAg
Ly8gJy05OSAyMzoxMjo0MCBHTVQnCi0gICAgICAgICAgICBpZiAoKmRhdGVTdHJpbmcgIT0gJy0n
ICYmICpkYXRlU3RyaW5nICE9ICcvJyAmJiAqZGF0ZVN0cmluZyAhPSAnLCcgJiYgIWlzQVNDSUlT
cGFjZSgqZGF0ZVN0cmluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKLSAgICAgICAg
ICAgIGRhdGVTdHJpbmcrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtb250aCA8IDAg
fHwgbW9udGggPiAxMSkKLSAgICAgICAgcmV0dXJuIE5hTjsKLQotICAgIC8vICc5OSAyMzoxMjo0
MCBHTVQnCi0gICAgaWYgKHllYXIgPD0gMCAmJiAqZGF0ZVN0cmluZykgewotICAgICAgICBpZiAo
IXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJnllYXIpKQotICAgICAgICAg
ICAgcmV0dXJuIE5hTjsKLSAgICB9Ci0gICAgCi0gICAgLy8gRG9uJ3QgZmFpbCBpZiB0aGUgdGlt
ZSBpcyBtaXNzaW5nLgotICAgIGxvbmcgaG91ciA9IDA7Ci0gICAgbG9uZyBtaW51dGUgPSAwOwot
ICAgIGxvbmcgc2Vjb25kID0gMDsKLSAgICBpZiAoISpuZXdQb3NTdHIpCi0gICAgICAgIGRhdGVT
dHJpbmcgPSBuZXdQb3NTdHI7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vICcgMjM6MTI6NDAgR01U
JwotICAgICAgICBpZiAoIShpc0FTQ0lJU3BhY2UoKm5ld1Bvc1N0cikgfHwgKm5ld1Bvc1N0ciA9
PSAnLCcpKSB7Ci0gICAgICAgICAgICBpZiAoKm5ld1Bvc1N0ciAhPSAnOicpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIE5hTjsKLSAgICAgICAgICAgIC8vIFRoZXJlIHdhcyBubyB5ZWFyOyB0aGUg
bnVtYmVyIHdhcyB0aGUgaG91ci4KLSAgICAgICAgICAgIHllYXIgPSAtMTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIGluIHRoZSBub3JtYWwgY2FzZSAod2UgcGFyc2VkIHRoZSB5
ZWFyKSwgYWR2YW5jZSB0byB0aGUgbmV4dCBudW1iZXIKLSAgICAgICAgICAgIGRhdGVTdHJpbmcg
PSArK25ld1Bvc1N0cjsKLSAgICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3Ry
aW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9z
U3RyLCAxMCwgJmhvdXIpOwotICAgICAgICAvLyBEbyBub3QgY2hlY2sgZm9yIGVycm5vIGhlcmUg
c2luY2Ugd2Ugd2FudCB0byBjb250aW51ZQotICAgICAgICAvLyBldmVuIGlmIGVycm5vIHdhcyBz
ZXQgYmVjYXN1ZSB3ZSBhcmUgc3RpbGwgbG9va2luZwotICAgICAgICAvLyBmb3IgdGhlIHRpbWV6
b25lIQotCi0gICAgICAgIC8vIFJlYWQgYSBudW1iZXI/IElmIG5vdCwgdGhpcyBtaWdodCBiZSBh
IHRpbWV6b25lIG5hbWUuCi0gICAgICAgIGlmIChuZXdQb3NTdHIgIT0gZGF0ZVN0cmluZykgewot
ICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKLQotICAgICAgICAgICAgaWYgKGhv
dXIgPCAwIHx8IGhvdXIgPiAyMykKLSAgICAgICAgICAgICAgICByZXR1cm4gTmFOOwotCi0gICAg
ICAgICAgICBpZiAoISpkYXRlU3RyaW5nKQotICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0K
LSAgICAgICAgICAgIC8vICc6MTI6NDAgR01UJwotICAgICAgICAgICAgaWYgKCpkYXRlU3RyaW5n
KysgIT0gJzonKQotICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0KLSAgICAgICAgICAgIGlm
ICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmbWludXRlKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0
cjsKLQotICAgICAgICAgICAgaWYgKG1pbnV0ZSA8IDAgfHwgbWludXRlID4gNTkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIE5hTjsKLQotICAgICAgICAgICAgLy8gJzo0MCBHTVQnCi0gICAgICAg
ICAgICBpZiAoKmRhdGVTdHJpbmcgJiYgKmRhdGVTdHJpbmcgIT0gJzonICYmICFpc0FTQ0lJU3Bh
Y2UoKmRhdGVTdHJpbmcpKQotICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0KLSAgICAgICAg
ICAgIC8vIHNlY29uZHMgYXJlIG9wdGlvbmFsIGluIHJmYzgyMiArIHJmYzI4MjIKLSAgICAgICAg
ICAgIGlmICgqZGF0ZVN0cmluZyA9PSc6JykgewotICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcr
KzsKLQotICAgICAgICAgICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NT
dHIsIDEwLCAmc2Vjb25kKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKLSAgICAg
ICAgICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKHNlY29uZCA8IDAgfHwgc2Vjb25kID4gNTkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOYU47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNraXBTcGFjZXNB
bmRDb21tZW50cyhkYXRlU3RyaW5nKTsKLQotICAgICAgICAgICAgaWYgKHN0cm5jYXNlY21wKGRh
dGVTdHJpbmcsICJBTSIsIDIpID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoaG91ciA+IDEy
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICAgICAgICAgIGlmICho
b3VyID09IDEyKQotICAgICAgICAgICAgICAgICAgICBob3VyID0gMDsKLSAgICAgICAgICAgICAg
ICBkYXRlU3RyaW5nICs9IDI7Ci0gICAgICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRz
KGRhdGVTdHJpbmcpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJuY2FzZWNtcChkYXRlU3Ry
aW5nLCAiUE0iLCAyKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGhvdXIgPiAxMikKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKLSAgICAgICAgICAgICAgICBpZiAoaG91ciAh
PSAxMikKLSAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjsKLSAgICAgICAgICAgICAgICBk
YXRlU3RyaW5nICs9IDI7Ci0gICAgICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRh
dGVTdHJpbmcpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBo
YXZlVFogPSBmYWxzZTsKLSAgICBpbnQgb2Zmc2V0ID0gMDsKLQotICAgIC8vIERvbid0IGZhaWwg
aWYgdGhlIHRpbWUgem9uZSBpcyBtaXNzaW5nLiAKLSAgICAvLyBTb21lIHdlYnNpdGVzIG9taXQg
dGhlIHRpbWUgem9uZSAoNDI3NTIwNikuCi0gICAgaWYgKCpkYXRlU3RyaW5nKSB7Ci0gICAgICAg
IGlmIChzdHJuY2FzZWNtcChkYXRlU3RyaW5nLCAiR01UIiwgMykgPT0gMCB8fCBzdHJuY2FzZWNt
cChkYXRlU3RyaW5nLCAiVVRDIiwgMykgPT0gMCkgewotICAgICAgICAgICAgZGF0ZVN0cmluZyAr
PSAzOwotICAgICAgICAgICAgaGF2ZVRaID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICgqZGF0ZVN0cmluZyA9PSAnKycgfHwgKmRhdGVTdHJpbmcgPT0gJy0nKSB7Ci0gICAgICAgICAg
ICBsb25nIG87Ci0gICAgICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9z
U3RyLCAxMCwgJm8pKQotICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAgICAgICBk
YXRlU3RyaW5nID0gbmV3UG9zU3RyOwotCi0gICAgICAgICAgICBpZiAobyA8IC05OTU5IHx8IG8g
PiA5OTU5KQotICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0KLSAgICAgICAgICAgIGludCBz
Z24gPSAobyA8IDApID8gLTEgOiAxOwotICAgICAgICAgICAgbyA9IGFicyhvKTsKLSAgICAgICAg
ICAgIGlmICgqZGF0ZVN0cmluZyAhPSAnOicpIHsKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSAo
KG8gLyAxMDApICogNjAgKyAobyAlIDEwMCkpICogc2duOwotICAgICAgICAgICAgfSBlbHNlIHsg
Ly8gR01UKzA1OjAwCi0gICAgICAgICAgICAgICAgbG9uZyBvMjsKLSAgICAgICAgICAgICAgICBp
ZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJm8yKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5hTjsKLSAgICAgICAgICAgICAgICBkYXRlU3RyaW5nID0gbmV3
UG9zU3RyOwotICAgICAgICAgICAgICAgIG9mZnNldCA9IChvICogNjAgKyBvMikgKiBzZ247Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBoYXZlVFogPSB0cnVlOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnQoc2l6ZW9mKGtub3duX3pvbmVz
KSAvIHNpemVvZihLbm93blpvbmUpKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKDAgPT0g
c3RybmNhc2VjbXAoZGF0ZVN0cmluZywga25vd25fem9uZXNbaV0udHpOYW1lLCBzdHJsZW4oa25v
d25fem9uZXNbaV0udHpOYW1lKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0ga25v
d25fem9uZXNbaV0udHpPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcgKz0g
c3RybGVuKGtub3duX3pvbmVzW2ldLnR6TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhdmVU
WiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHNraXBTcGFjZXNBbmRDb21t
ZW50cyhkYXRlU3RyaW5nKTsKLQotICAgIGlmICgqZGF0ZVN0cmluZyAmJiB5ZWFyID09IC0xKSB7
Ci0gICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmeWVh
cikpCi0gICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9z
U3RyOwotICAgIH0KLSAgICAgCi0gICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcp
OwotICAgICAKLSAgICAvLyBUcmFpbGluZyBnYXJiYWdlCi0gICAgaWYgKCpkYXRlU3RyaW5nKQot
ICAgICAgICByZXR1cm4gTmFOOwotCi0gICAgLy8gWTJLOiBIYW5kbGUgMiBkaWdpdCB5ZWFycy4K
LSAgICBpZiAoeWVhciA+PSAwICYmIHllYXIgPCAxMDApIHsKLSAgICAgICAgaWYgKHllYXIgPCA1
MCkKLSAgICAgICAgICAgIHllYXIgKz0gMjAwMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
eWVhciArPSAxOTAwOwotICAgIH0KLQotICAgIC8vIGZhbGwgYmFjayB0byBsb2NhbCB0aW1lem9u
ZQotICAgIGlmICghaGF2ZVRaKSB7Ci0gICAgICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAg
ICAgIHQubW9udGhEYXkgPSBkYXk7Ci0gICAgICAgIHQubW9udGggPSBtb250aDsKLSAgICAgICAg
dC55ZWFyID0geWVhciAtIDE5MDA7Ci0gICAgICAgIHQuaXNEU1QgPSAtMTsKLSAgICAgICAgdC5z
ZWNvbmQgPSBzZWNvbmQ7Ci0gICAgICAgIHQubWludXRlID0gbWludXRlOwotICAgICAgICB0Lmhv
dXIgPSBob3VyOwotCi0gICAgICAgIC8vIFVzZSBvdXIgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKCkg
cmF0aGVyIHRoYW4gbWt0aW1lKCkgYXMgdGhlIGxhdHRlciBjYW4ndCBoYW5kbGUgdGhlIGZ1bGwg
eWVhciByYW5nZS4KLSAgICAgICAgcmV0dXJuIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCAwLCBm
YWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuICh5bWRobXNUb1NlY29uZHMoeWVhciwgbW9udGgg
KyAxLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSAtIChvZmZzZXQgKiA2MC4wKSkgKiBtc1Bl
clNlY29uZDsKLX0KLQotZG91YmxlIHRpbWVDbGlwKGRvdWJsZSB0KQotewotICAgIGlmICghaXNm
aW5pdGUodCkpCi0gICAgICAgIHJldHVybiBOYU47Ci0gICAgaWYgKGZhYnModCkgPiA4LjY0RTE1
KQotICAgICAgICByZXR1cm4gTmFOOwotICAgIHJldHVybiB0cnVuYyh0KTsKLX0KLQotVVN0cmlu
ZyBmb3JtYXREYXRlKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lICZ0KQotewotICAgIGNoYXIgYnVm
ZmVyWzEwMF07Ci0gICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzICVzICUw
MmQgJTA0ZCIsCi0gICAgICAgIHdlZWtkYXlOYW1lWyh0LndlZWtEYXkgKyA2KSAlIDddLAotICAg
ICAgICBtb250aE5hbWVbdC5tb250aF0sIHQubW9udGhEYXksIHQueWVhciArIDE5MDApOwotICAg
IHJldHVybiBidWZmZXI7Ci19Ci0KLVVTdHJpbmcgZm9ybWF0RGF0ZVVUQ1ZhcmlhbnQoY29uc3Qg
R3JlZ29yaWFuRGF0ZVRpbWUgJnQpCi17Ci0gICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICBzbnBy
aW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMsICUwMmQgJXMgJTA0ZCIsCi0gICAgICAg
IHdlZWtkYXlOYW1lWyh0LndlZWtEYXkgKyA2KSAlIDddLAotICAgICAgICB0Lm1vbnRoRGF5LCBt
b250aE5hbWVbdC5tb250aF0sIHQueWVhciArIDE5MDApOwotICAgIHJldHVybiBidWZmZXI7Ci19
Ci0KLVVTdHJpbmcgZm9ybWF0VGltZShjb25zdCBHcmVnb3JpYW5EYXRlVGltZSAmdCwgYm9vbCB1
dGMpCi17Ci0gICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICBpZiAodXRjKSB7Ci0gICAgICAgIHNu
cHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlMDJkOiUwMmQ6JTAyZCBHTVQiLCB0Lmhv
dXIsIHQubWludXRlLCB0LnNlY29uZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IG9mZnNl
dCA9IGFicyhnbXRvZmZzZXQodCkpOwotICAgICAgICBjaGFyIHRpbWVab25lTmFtZVs3MF07Ci0g
ICAgICAgIHN0cnVjdCB0bSBndG0gPSB0OwotICAgICAgICBzdHJmdGltZSh0aW1lWm9uZU5hbWUs
IHNpemVvZih0aW1lWm9uZU5hbWUpLCAiJVoiLCAmZ3RtKTsKLQotICAgICAgICBpZiAodGltZVpv
bmVOYW1lWzBdKSB7Ci0gICAgICAgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIp
LCAiJTAyZDolMDJkOiUwMmQgR01UJWMlMDJkJTAyZCAoJXMpIiwKLSAgICAgICAgICAgICAgICB0
LmhvdXIsIHQubWludXRlLCB0LnNlY29uZCwKLSAgICAgICAgICAgICAgICBnbXRvZmZzZXQodCkg
PCAwID8gJy0nIDogJysnLCBvZmZzZXQgLyAoNjAqNjApLCAob2Zmc2V0IC8gNjApICUgNjAsIHRp
bWVab25lTmFtZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJTAyZDolMDJkOiUwMmQgR01UJWMlMDJkJTAyZCIsCi0gICAg
ICAgICAgICAgICAgdC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQsCi0gICAgICAgICAgICAgICAg
Z210b2Zmc2V0KHQpIDwgMCA/ICctJyA6ICcrJywgb2Zmc2V0IC8gKDYwKjYwKSwgKG9mZnNldCAv
IDYwKSAlIDYwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gVVN0cmluZyhidWZmZXIp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZU1hdGguaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZU1hdGguaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGExNWM4MC4uMDAwMDAwMAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVNYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQotICoK
LSAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEg
UHVibGljIExpY2Vuc2UgVmVyc2lvbgotICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBu
b3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gKiB0aGUgTGljZW5z
ZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiBodHRwOi8vd3d3
Lm1vemlsbGEub3JnL01QTC8KLSAqCi0gKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUg
TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAotICogV0lUSE9VVCBX
QVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBM
aWNlbnNlCi0gKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5k
IGxpbWl0YXRpb25zIHVuZGVyIHRoZQotICogTGljZW5zZS4KLSAqCi0gKiBUaGUgT3JpZ2luYWwg
Q29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29kZSwgcmVsZWFzZWQKLSAqIE1h
cmNoIDMxLCAxOTk4LgotICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2lu
YWwgQ29kZSBpcwotICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCi0gKiBQ
b3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChD
KSAxOTk4Ci0gKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogQ29udHJpYnV0b3Iocyk6Ci0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRz
IG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKLSAqIGVpdGhlciBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUg
IkdQTCIpLAotICogb3IgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCi0gKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92
aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAotICog
b2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24g
b2YgdGhpcyBmaWxlIG9ubHkKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBv
ciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KLSAqIHVzZSB5b3VyIHZlcnNp
b24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3Vy
Ci0gKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFj
ZSB0aGVtIHdpdGggdGhlIG5vdGljZQotICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQg
YnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKLSAqIHRoZSBwcm92
aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZp
bGUgdW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3Ig
dGhlIExHUEwuCi0gKgotICovCi0KLSNpZm5kZWYgRGF0ZU1hdGhfaAotI2RlZmluZSBEYXRlTWF0
aF9oCi0KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBVU3RyaW5nOwot
c3RydWN0IEdyZWdvcmlhbkRhdGVUaW1lOwotCi12b2lkIGluaXREYXRlTWF0aCgpOwotdm9pZCBt
c1RvR3JlZ29yaWFuRGF0ZVRpbWUoZG91YmxlLCBib29sIG91dHB1dElzVVRDLCBHcmVnb3JpYW5E
YXRlVGltZSYpOwotZG91YmxlIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhjb25zdCBHcmVnb3JpYW5E
YXRlVGltZSYsIGRvdWJsZSwgYm9vbCBpbnB1dElzVVRDKTsKLWRvdWJsZSBnZXRVVENPZmZzZXQo
KTsKLWludCBlcXVpdmFsZW50WWVhckZvckRTVChpbnQgeWVhcik7Ci1kb3VibGUgZ2V0Q3VycmVu
dFVUQ1RpbWUoKTsKLWRvdWJsZSBnZXRDdXJyZW50VVRDVGltZVdpdGhNaWNyb3NlY29uZHMoKTsK
LXZvaWQgZ2V0TG9jYWxUaW1lKGNvbnN0IHRpbWVfdCosIHRtKik7Ci0KLS8vIE5vdCByZWFsbHkg
bWF0aCByZWxhdGVkLCBidXQgdGhpcyBpcyBjdXJyZW50bHkgdGhlIG9ubHkgc2hhcmVkIHBsYWNl
IHRvIHB1dCB0aGVzZS4gIAotZG91YmxlIHBhcnNlRGF0ZShjb25zdCBVU3RyaW5nJik7Ci1kb3Vi
bGUgdGltZUNsaXAoZG91YmxlKTsKLVVTdHJpbmcgZm9ybWF0RGF0ZShjb25zdCBHcmVnb3JpYW5E
YXRlVGltZSYpOwotVVN0cmluZyBmb3JtYXREYXRlVVRDVmFyaWFudChjb25zdCBHcmVnb3JpYW5E
YXRlVGltZSYpOwotVVN0cmluZyBmb3JtYXRUaW1lKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJiwg
Ym9vbCBpbnB1dElzVVRDKTsKLQotCi1jb25zdCBjaGFyICogY29uc3Qgd2Vla2RheU5hbWVbN10g
PSB7ICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4iIH07Ci1j
b25zdCBjaGFyICogY29uc3QgbW9udGhOYW1lWzEyXSA9IHsgIkphbiIsICJGZWIiLCAiTWFyIiwg
IkFwciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAi
RGVjIiB9OwotCi1jb25zdCBkb3VibGUgaG91cnNQZXJEYXkgPSAyNC4wOwotY29uc3QgZG91Ymxl
IG1pbnV0ZXNQZXJIb3VyID0gNjAuMDsKLWNvbnN0IGRvdWJsZSBzZWNvbmRzUGVySG91ciA9IDYw
LjAgKiA2MC4wOwotY29uc3QgZG91YmxlIHNlY29uZHNQZXJNaW51dGUgPSA2MC4wOwotY29uc3Qg
ZG91YmxlIG1zUGVyU2Vjb25kID0gMTAwMC4wOwotY29uc3QgZG91YmxlIG1zUGVyTWludXRlID0g
NjAuMCAqIDEwMDAuMDsKLWNvbnN0IGRvdWJsZSBtc1BlckhvdXIgPSA2MC4wICogNjAuMCAqIDEw
MDAuMDsKLWNvbnN0IGRvdWJsZSBtc1BlckRheSA9IDI0LjAgKiA2MC4wICogNjAuMCAqIDEwMDAu
MDsKLQotLy8gSW50ZW50aW9uYWxseSBvdmVycmlkZGluZyB0aGUgZGVmYXVsdCB0bSBvZiB0aGUg
c3lzdGVtCi0vLyBUZWUgbWVtYmVycyBvZiB0bSBkaWZmZXIgb24gdmFyaW91cyBvcGVyYXRpbmcg
c3lzdGVtcy4KLXN0cnVjdCBHcmVnb3JpYW5EYXRlVGltZSA6IE5vbmNvcHlhYmxlIHsKLSAgICBH
cmVnb3JpYW5EYXRlVGltZSgpCi0gICAgICAgIDogc2Vjb25kKDApCi0gICAgICAgICwgbWludXRl
KDApCi0gICAgICAgICwgaG91cigwKQotICAgICAgICAsIHdlZWtEYXkoMCkKLSAgICAgICAgLCBt
b250aERheSgwKQotICAgICAgICAsIHllYXJEYXkoMCkKLSAgICAgICAgLCBtb250aCgwKQotICAg
ICAgICAsIHllYXIoMCkKLSAgICAgICAgLCBpc0RTVCgwKQotICAgICAgICAsIHV0Y09mZnNldCgw
KQotICAgICAgICAsIHRpbWVab25lKDApCi0gICAgewotICAgIH0KLQotICAgIH5HcmVnb3JpYW5E
YXRlVGltZSgpCi0gICAgewotICAgICAgICBkZWxldGUgW10gdGltZVpvbmU7Ci0gICAgfQotCi0g
ICAgR3JlZ29yaWFuRGF0ZVRpbWUoY29uc3QgdG0mIGluVG0pCi0gICAgICAgIDogc2Vjb25kKGlu
VG0udG1fc2VjKQotICAgICAgICAsIG1pbnV0ZShpblRtLnRtX21pbikKLSAgICAgICAgLCBob3Vy
KGluVG0udG1faG91cikKLSAgICAgICAgLCB3ZWVrRGF5KGluVG0udG1fd2RheSkKLSAgICAgICAg
LCBtb250aERheShpblRtLnRtX21kYXkpCi0gICAgICAgICwgeWVhckRheShpblRtLnRtX3lkYXkp
Ci0gICAgICAgICwgbW9udGgoaW5UbS50bV9tb24pCi0gICAgICAgICwgeWVhcihpblRtLnRtX3ll
YXIpCi0gICAgICAgICwgaXNEU1QoaW5UbS50bV9pc2RzdCkKLSAgICB7Ci0jaWYgIVBMQVRGT1JN
KFdJTl9PUykgJiYgIVBMQVRGT1JNKFNPTEFSSVMpICYmICFDT01QSUxFUihSVkNUKQotICAgICAg
ICB1dGNPZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGluVG0udG1fZ210b2ZmKTsKLQotICAgICAg
ICBpbnQgaW5ab25lU2l6ZSA9IHN0cmxlbihpblRtLnRtX3pvbmUpICsgMTsKLSAgICAgICAgdGlt
ZVpvbmUgPSBuZXcgY2hhcltpblpvbmVTaXplXTsKLSAgICAgICAgc3RybmNweSh0aW1lWm9uZSwg
aW5UbS50bV96b25lLCBpblpvbmVTaXplKTsKLSNlbHNlCi0gICAgICAgIHV0Y09mZnNldCA9IHN0
YXRpY19jYXN0PGludD4oZ2V0VVRDT2Zmc2V0KCkgLyBtc1BlclNlY29uZCArIChpc0RTVCA/IHNl
Y29uZHNQZXJIb3VyIDogMCkpOwotICAgICAgICB0aW1lWm9uZSA9IDA7Ci0jZW5kaWYKLSAgICB9
Ci0KLSAgICBvcGVyYXRvciB0bSgpIGNvbnN0Ci0gICAgewotICAgICAgICB0bSByZXQ7Ci0gICAg
ICAgIG1lbXNldCgmcmV0LCAwLCBzaXplb2YocmV0KSk7Ci0KLSAgICAgICAgcmV0LnRtX3NlYyAg
ID0gIHNlY29uZDsKLSAgICAgICAgcmV0LnRtX21pbiAgID0gIG1pbnV0ZTsKLSAgICAgICAgcmV0
LnRtX2hvdXIgID0gIGhvdXI7Ci0gICAgICAgIHJldC50bV93ZGF5ICA9ICB3ZWVrRGF5OwotICAg
ICAgICByZXQudG1fbWRheSAgPSAgbW9udGhEYXk7Ci0gICAgICAgIHJldC50bV95ZGF5ICA9ICB5
ZWFyRGF5OwotICAgICAgICByZXQudG1fbW9uICAgPSAgbW9udGg7Ci0gICAgICAgIHJldC50bV95
ZWFyICA9ICB5ZWFyOwotICAgICAgICByZXQudG1faXNkc3QgPSAgaXNEU1Q7Ci0KLSNpZiAhUExB
VEZPUk0oV0lOX09TKSAmJiAhUExBVEZPUk0oU09MQVJJUykgJiYgIUNPTVBJTEVSKFJWQ1QpCi0g
ICAgICAgIHJldC50bV9nbXRvZmYgPSBzdGF0aWNfY2FzdDxsb25nPih1dGNPZmZzZXQpOwotICAg
ICAgICByZXQudG1fem9uZSA9IHRpbWVab25lOwotI2VuZGlmCi0KLSAgICAgICAgcmV0dXJuIHJl
dDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvcHlGcm9tKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJiBy
aHMpCi0gICAgewotICAgICAgICBzZWNvbmQgPSByaHMuc2Vjb25kOwotICAgICAgICBtaW51dGUg
PSByaHMubWludXRlOwotICAgICAgICBob3VyID0gcmhzLmhvdXI7Ci0gICAgICAgIHdlZWtEYXkg
PSByaHMud2Vla0RheTsKLSAgICAgICAgbW9udGhEYXkgPSByaHMubW9udGhEYXk7Ci0gICAgICAg
IHllYXJEYXkgPSByaHMueWVhckRheTsKLSAgICAgICAgbW9udGggPSByaHMubW9udGg7Ci0gICAg
ICAgIHllYXIgPSByaHMueWVhcjsKLSAgICAgICAgaXNEU1QgPSByaHMuaXNEU1Q7Ci0gICAgICAg
IHV0Y09mZnNldCA9IHJocy51dGNPZmZzZXQ7Ci0gICAgICAgIGlmIChyaHMudGltZVpvbmUpIHsK
LSAgICAgICAgICAgIGludCBpblpvbmVTaXplID0gc3RybGVuKHJocy50aW1lWm9uZSkgKyAxOwot
ICAgICAgICAgICAgdGltZVpvbmUgPSBuZXcgY2hhcltpblpvbmVTaXplXTsKLSAgICAgICAgICAg
IHN0cm5jcHkodGltZVpvbmUsIHJocy50aW1lWm9uZSwgaW5ab25lU2l6ZSk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgdGltZVpvbmUgPSAwOwotICAgIH0KLQotICAgIGludCBzZWNvbmQ7
Ci0gICAgaW50IG1pbnV0ZTsKLSAgICBpbnQgaG91cjsKLSAgICBpbnQgd2Vla0RheTsKLSAgICBp
bnQgbW9udGhEYXk7Ci0gICAgaW50IHllYXJEYXk7Ci0gICAgaW50IG1vbnRoOwotICAgIGludCB5
ZWFyOwotICAgIGludCBpc0RTVDsKLSAgICBpbnQgdXRjT2Zmc2V0OwotICAgIGNoYXIqIHRpbWVa
b25lOwotfTsKLQotc3RhdGljIGlubGluZSBpbnQgZ210b2Zmc2V0KGNvbnN0IEdyZWdvcmlhbkRh
dGVUaW1lJiB0KQotewotICAgIHJldHVybiB0LnV0Y09mZnNldDsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZiAvLyBEYXRlTWF0aF9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
UHJvdG90eXBlLmNwcAppbmRleCBmZjNmYjE5Li4xYzQ5NGNmIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJEYXRlUHJvdG90eXBlLmgiCiAKLSNpbmNsdWRlICJEYXRlTWF0aC5o
IgorI2luY2x1ZGUgIkRhdGVDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNs
dWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgpAQCAtMzgsNiAr
MzgsNyBAQAogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRGF0ZUV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlh
bGl6ZVRocmVhZGluZy5jcHAKaW5kZXggY2RhOWZiMS4uNWZmNmFjMiAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCkBAIC0zMSwxMiArMzEsMTIg
QEAKIAogI2luY2x1ZGUgIkpTSW1tZWRpYXRlLmgiCiAjaW5jbHVkZSAiQ29sbGVjdG9yLmgiCi0j
aW5jbHVkZSAiRGF0ZU1hdGguaCIKICNpbmNsdWRlICJkdG9hLmgiCiAjaW5jbHVkZSAiSWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiVVN0cmluZy5o
IgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvRGF0ZUV4dHJhcy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lk
IGluaXRpYWxpemVUaHJlYWRpbmdPbmNlKCkKICAgICBpbml0aWFsaXplVVN0cmluZygpOwogI2lm
IEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykKICAgICBzX2R0b2FQNU11dGV4ID0gbmV3IE11
dGV4OwotICAgIGluaXREYXRlTWF0aCgpOworICAgIFdURjo6aW5pdGlhbGl6ZURhdGVzKCk7CiAj
ZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVFeHRyYXMuY3Bw
IGIvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVFeHRyYXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmMzMWVhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29y
ZS93dGYvRGF0ZUV4dHJhcy5jcHAKQEAgLTAsMCArMSw4OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBU
aGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29kZSwgcmVs
ZWFzZWQKKyAqIE1hcmNoIDMxLCAxOTk4LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBv
ZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9y
YXRpb24uCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUg
Q29weXJpZ2h0IChDKSAxOTk4CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29u
dGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICogb2YgZWl0
aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAorICog
aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNm
Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhl
IHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQorICogYXBwbGljYWJsZSBpbnN0
ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKKyAq
IHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9z
ZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cg
b3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQ
TCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBh
Ym92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAqIG90aGVyIHByb3Zp
c2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUu
CisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGll
bnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhl
IExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRGF0ZUV4dHJhcy5oIgorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorI2luY2x1
ZGUgIkFTQ0lJQ1R5cGUuaCIKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgorI2luY2x1ZGUgIk1h
dGhFeHRyYXMuaCIKKyNpbmNsdWRlICJTdHJpbmdFeHRyYXMuaCIKKworI2luY2x1ZGUgPGxpbWl0
cz4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZiBIQVZFKEVS
Uk5PX0gpCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oREFSV0lO
KQorI2luY2x1ZGUgPG5vdGlmeS5oPgorI2VuZGlmCisKKyNpZiBIQVZFKFNZU19USU1FX0gpCisj
aW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorCisjaWYgSEFWRShTWVNfVElNRUJfSCkKKyNp
bmNsdWRlIDxzeXMvdGltZWIuaD4KKyNlbmRpZgorCisjZGVmaW5lIE5hTiBzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpCisKK25hbWVzcGFjZSBXVEYgeworCisvKiBDb25z
dGFudHMgKi8KKworc3RhdGljIGNvbnN0IGRvdWJsZSBtaW51dGVzUGVyRGF5ID0gMjQuMCAqIDYw
LjA7CitzdGF0aWMgY29uc3QgZG91YmxlIHNlY29uZHNQZXJEYXkgPSAyNC4wICogNjAuMCAqIDYw
LjA7CitzdGF0aWMgY29uc3QgZG91YmxlIHNlY29uZHNQZXJZZWFyID0gMjQuMCAqIDYwLjAgKiA2
MC4wICogMzY1LjA7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgdXNlY1BlclNlYyA9IDEwMDAwMDAu
MDsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhVbml4VGltZSA9IDIxNDU4NTkyMDAuMDsgLy8g
MTIvMzEvMjAzNworCisvLyBEYXkgb2YgeWVhciBmb3IgdGhlIGZpcnN0IGRheSBvZiBlYWNoIG1v
bnRoLCB3aGVyZSBpbmRleCAwIGlzIEphbnVhcnksIGFuZCBkYXkgMCBpcyBKYW51YXJ5IDEuCisv
LyBGaXJzdCBmb3Igbm9uLWxlYXAgeWVhcnMsIHRoZW4gZm9yIGxlYXAgeWVhcnMuCitzdGF0aWMg
Y29uc3QgaW50IGZpcnN0RGF5T2ZNb250aFsyXVsxMl0gPSB7CisgICAgezAsIDMxLCA1OSwgOTAs
IDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0fSwKKyAgICB7MCwgMzEsIDYw
LCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzV9Cit9OworCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNMZWFwWWVhcihpbnQgeWVhcikKK3sKKyAgICBpZiAoeWVhciAlIDQg
IT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh5ZWFyICUgNDAwID09IDApCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh5ZWFyICUgMTAwID09IDApCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGF5
c0luWWVhcihpbnQgeWVhcikKK3sKKyAgICByZXR1cm4gMzY1ICsgaXNMZWFwWWVhcih5ZWFyKTsK
K30KKworc3RhdGljIGlubGluZSBkb3VibGUgZGF5c0Zyb20xOTcwVG9ZZWFyKGludCB5ZWFyKQor
eworICAgIC8vIFRoZSBHcmVnb3JpYW4gQ2FsZW5kYXIgcnVsZXMgZm9yIGxlYXAgeWVhcnM6Cisg
ICAgLy8gRXZlcnkgZm91cnRoIHllYXIgaXMgYSBsZWFwIHllYXIuICAyMDA0LCAyMDA4LCBhbmQg
MjAxMiBhcmUgbGVhcCB5ZWFycy4KKyAgICAvLyBIb3dldmVyLCBldmVyeSBodW5kcmVkdGggeWVh
ciBpcyBub3QgYSBsZWFwIHllYXIuICAxOTAwIGFuZCAyMTAwIGFyZSBub3QgbGVhcCB5ZWFycy4K
KyAgICAvLyBFdmVyeSBmb3VyIGh1bmRyZWQgeWVhcnMsIHRoZXJlJ3MgYSBsZWFwIHllYXIgYWZ0
ZXIgYWxsLiAgMjAwMCBhbmQgMjQwMCBhcmUgbGVhcCB5ZWFycy4KKworICAgIHN0YXRpYyBjb25z
dCBpbnQgbGVhcERheXNCZWZvcmUxOTcxQnk0UnVsZSA9IDE5NzAgLyA0OworICAgIHN0YXRpYyBj
b25zdCBpbnQgZXhjbHVkZWRMZWFwRGF5c0JlZm9yZTE5NzFCeTEwMFJ1bGUgPSAxOTcwIC8gMTAw
OworICAgIHN0YXRpYyBjb25zdCBpbnQgbGVhcERheXNCZWZvcmUxOTcxQnk0MDBSdWxlID0gMTk3
MCAvIDQwMDsKKworICAgIGNvbnN0IGRvdWJsZSB5ZWFyTWludXNPbmUgPSB5ZWFyIC0gMTsKKyAg
ICBjb25zdCBkb3VibGUgeWVhcnNUb0FkZEJ5NFJ1bGUgPSBmbG9vcih5ZWFyTWludXNPbmUgLyA0
LjApIC0gbGVhcERheXNCZWZvcmUxOTcxQnk0UnVsZTsKKyAgICBjb25zdCBkb3VibGUgeWVhcnNU
b0V4Y2x1ZGVCeTEwMFJ1bGUgPSBmbG9vcih5ZWFyTWludXNPbmUgLyAxMDAuMCkgLSBleGNsdWRl
ZExlYXBEYXlzQmVmb3JlMTk3MUJ5MTAwUnVsZTsKKyAgICBjb25zdCBkb3VibGUgeWVhcnNUb0Fk
ZEJ5NDAwUnVsZSA9IGZsb29yKHllYXJNaW51c09uZSAvIDQwMC4wKSAtIGxlYXBEYXlzQmVmb3Jl
MTk3MUJ5NDAwUnVsZTsKKworICAgIHJldHVybiAzNjUuMCAqICh5ZWFyIC0gMTk3MCkgKyB5ZWFy
c1RvQWRkQnk0UnVsZSAtIHllYXJzVG9FeGNsdWRlQnkxMDBSdWxlICsgeWVhcnNUb0FkZEJ5NDAw
UnVsZTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgbXNUb0RheXMoZG91YmxlIG1zKQorewor
ICAgIHJldHVybiBmbG9vcihtcyAvIG1zUGVyRGF5KTsKK30KKworc3RhdGljIGlubGluZSBpbnQg
bXNUb1llYXIoZG91YmxlIG1zKQoreworICAgIGludCBhcHByb3hZZWFyID0gc3RhdGljX2Nhc3Q8
aW50PihmbG9vcihtcyAvIChtc1BlckRheSAqIDM2NS4yNDI1KSkgKyAxOTcwKTsKKyAgICBkb3Vi
bGUgbXNGcm9tQXBwcm94WWVhclRvMTk3MCA9IG1zUGVyRGF5ICogZGF5c0Zyb20xOTcwVG9ZZWFy
KGFwcHJveFllYXIpOworICAgIGlmIChtc0Zyb21BcHByb3hZZWFyVG8xOTcwID4gbXMpCisgICAg
ICAgIHJldHVybiBhcHByb3hZZWFyIC0gMTsKKyAgICBpZiAobXNGcm9tQXBwcm94WWVhclRvMTk3
MCArIG1zUGVyRGF5ICogZGF5c0luWWVhcihhcHByb3hZZWFyKSA8PSBtcykKKyAgICAgICAgcmV0
dXJuIGFwcHJveFllYXIgKyAxOworICAgIHJldHVybiBhcHByb3hZZWFyOworfQorCitzdGF0aWMg
aW5saW5lIGludCBkYXlJblllYXIoZG91YmxlIG1zLCBpbnQgeWVhcikKK3sKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50Pihtc1RvRGF5cyhtcykgLSBkYXlzRnJvbTE5NzBUb1llYXIoeWVhcikp
OworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBtc1RvTWlsbGlzZWNvbmRzKGRvdWJsZSBtcykK
K3sKKyAgICBkb3VibGUgcmVzdWx0ID0gZm1vZChtcywgbXNQZXJEYXkpOworICAgIGlmIChyZXN1
bHQgPCAwKQorICAgICAgICByZXN1bHQgKz0gbXNQZXJEYXk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworLy8gMDogU3VuZGF5LCAxOiBNb25kYXksIGV0Yy4KK3N0YXRpYyBpbmxpbmUgaW50IG1z
VG9XZWVrRGF5KGRvdWJsZSBtcykKK3sKKyAgICBpbnQgd2QgPSAoc3RhdGljX2Nhc3Q8aW50Piht
c1RvRGF5cyhtcykpICsgNCkgJSA3OworICAgIGlmICh3ZCA8IDApCisgICAgICAgIHdkICs9IDc7
CisgICAgcmV0dXJuIHdkOworfQorCitzdGF0aWMgaW5saW5lIGludCBtc1RvU2Vjb25kcyhkb3Vi
bGUgbXMpCit7CisgICAgZG91YmxlIHJlc3VsdCA9IGZtb2QoZmxvb3IobXMgLyBtc1BlclNlY29u
ZCksIHNlY29uZHNQZXJNaW51dGUpOworICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICByZXN1
bHQgKz0gc2Vjb25kc1Blck1pbnV0ZTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihyZXN1
bHQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtc1RvTWludXRlcyhkb3VibGUgbXMpCit7Cisg
ICAgZG91YmxlIHJlc3VsdCA9IGZtb2QoZmxvb3IobXMgLyBtc1Blck1pbnV0ZSksIG1pbnV0ZXNQ
ZXJIb3VyKTsKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgcmVzdWx0ICs9IG1pbnV0ZXNQ
ZXJIb3VyOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdCk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgaW50IG1zVG9Ib3Vycyhkb3VibGUgbXMpCit7CisgICAgZG91YmxlIHJlc3VsdCA9
IGZtb2QoZmxvb3IobXMvbXNQZXJIb3VyKSwgaG91cnNQZXJEYXkpOworICAgIGlmIChyZXN1bHQg
PCAwKQorICAgICAgICByZXN1bHQgKz0gaG91cnNQZXJEYXk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4ocmVzdWx0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbW9udGhGcm9tRGF5SW5Z
ZWFyKGludCBkYXlJblllYXIsIGJvb2wgbGVhcFllYXIpCit7CisgICAgY29uc3QgaW50IGQgPSBk
YXlJblllYXI7CisgICAgaW50IHN0ZXA7CisKKyAgICBpZiAoZCA8IChzdGVwID0gMzEpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBzdGVwICs9IChsZWFwWWVhciA/IDI5IDogMjgpOworICAgIGlm
IChkIDwgc3RlcCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgaWYgKGQgPCAoc3RlcCArPSAzMSkp
CisgICAgICAgIHJldHVybiAyOworICAgIGlmIChkIDwgKHN0ZXAgKz0gMzApKQorICAgICAgICBy
ZXR1cm4gMzsKKyAgICBpZiAoZCA8IChzdGVwICs9IDMxKSkKKyAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgaWYgKGQgPCAoc3RlcCArPSAzMCkpCisgICAgICAgIHJldHVybiA1OworICAgIGlmIChkIDwg
KHN0ZXAgKz0gMzEpKQorICAgICAgICByZXR1cm4gNjsKKyAgICBpZiAoZCA8IChzdGVwICs9IDMx
KSkKKyAgICAgICAgcmV0dXJuIDc7CisgICAgaWYgKGQgPCAoc3RlcCArPSAzMCkpCisgICAgICAg
IHJldHVybiA4OworICAgIGlmIChkIDwgKHN0ZXAgKz0gMzEpKQorICAgICAgICByZXR1cm4gOTsK
KyAgICBpZiAoZCA8IChzdGVwICs9IDMwKSkKKyAgICAgICAgcmV0dXJuIDEwOworICAgIHJldHVy
biAxMTsKK30KKworc3RhdGljIGlubGluZSBib29sIGNoZWNrTW9udGgoaW50IGRheUluWWVhciwg
aW50JiBzdGFydERheU9mVGhpc01vbnRoLCBpbnQmIHN0YXJ0RGF5T2ZOZXh0TW9udGgsIGludCBk
YXlzSW5UaGlzTW9udGgpCit7CisgICAgc3RhcnREYXlPZlRoaXNNb250aCA9IHN0YXJ0RGF5T2ZO
ZXh0TW9udGg7CisgICAgc3RhcnREYXlPZk5leHRNb250aCArPSBkYXlzSW5UaGlzTW9udGg7Cisg
ICAgcmV0dXJuIChkYXlJblllYXIgPD0gc3RhcnREYXlPZk5leHRNb250aCk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgaW50IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKGludCBkYXlJblllYXIsIGJvb2wg
bGVhcFllYXIpCit7CisgICAgY29uc3QgaW50IGQgPSBkYXlJblllYXI7CisgICAgaW50IHN0ZXA7
CisgICAgaW50IG5leHQgPSAzMDsKKworICAgIGlmIChkIDw9IG5leHQpCisgICAgICAgIHJldHVy
biBkICsgMTsKKyAgICBjb25zdCBpbnQgZGF5c0luRmViID0gKGxlYXBZZWFyID8gMjkgOiAyOCk7
CisgICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgZGF5c0luRmViKSkKKyAgICAgICAg
cmV0dXJuIGQgLSBzdGVwOworICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMxKSkK
KyAgICAgICAgcmV0dXJuIGQgLSBzdGVwOworICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5l
eHQsIDMwKSkKKyAgICAgICAgcmV0dXJuIGQgLSBzdGVwOworICAgIGlmIChjaGVja01vbnRoKGQs
IHN0ZXAsIG5leHQsIDMxKSkKKyAgICAgICAgcmV0dXJuIGQgLSBzdGVwOworICAgIGlmIChjaGVj
a01vbnRoKGQsIHN0ZXAsIG5leHQsIDMwKSkKKyAgICAgICAgcmV0dXJuIGQgLSBzdGVwOworICAg
IGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMxKSkKKyAgICAgICAgcmV0dXJuIGQgLSBz
dGVwOworICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMxKSkKKyAgICAgICAgcmV0
dXJuIGQgLSBzdGVwOworICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMwKSkKKyAg
ICAgICAgcmV0dXJuIGQgLSBzdGVwOworICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQs
IDMxKSkKKyAgICAgICAgcmV0dXJuIGQgLSBzdGVwOworICAgIGlmIChjaGVja01vbnRoKGQsIHN0
ZXAsIG5leHQsIDMwKSkKKyAgICAgICAgcmV0dXJuIGQgLSBzdGVwOworICAgIHN0ZXAgPSBuZXh0
OworICAgIHJldHVybiBkIC0gc3RlcDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbW9udGhUb0Rh
eUluWWVhcihpbnQgbW9udGgsIGJvb2wgaXNMZWFwWWVhcikKK3sKKyAgICByZXR1cm4gZmlyc3RE
YXlPZk1vbnRoW2lzTGVhcFllYXJdW21vbnRoXTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUg
dGltZVRvTVMoZG91YmxlIGhvdXIsIGRvdWJsZSBtaW4sIGRvdWJsZSBzZWMsIGRvdWJsZSBtcykK
K3sKKyAgICByZXR1cm4gKCgoaG91ciAqIG1pbnV0ZXNQZXJIb3VyICsgbWluKSAqIHNlY29uZHNQ
ZXJNaW51dGUgKyBzZWMpICogbXNQZXJTZWNvbmQgKyBtcyk7Cit9CisKK3N0YXRpYyBpbnQgZGF0
ZVRvRGF5SW5ZZWFyKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXkpCit7CisgICAgeWVhciAr
PSBtb250aCAvIDEyOworCisgICAgbW9udGggJT0gMTI7CisgICAgaWYgKG1vbnRoIDwgMCkgewor
ICAgICAgICBtb250aCArPSAxMjsKKyAgICAgICAgLS15ZWFyOworICAgIH0KKworICAgIGludCB5
ZWFyZGF5ID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcihkYXlzRnJvbTE5NzBUb1llYXIoeWVhcikp
KTsKKyAgICBpbnQgbW9udGhkYXkgPSBtb250aFRvRGF5SW5ZZWFyKG1vbnRoLCBpc0xlYXBZZWFy
KHllYXIpKTsKKworICAgIHJldHVybiB5ZWFyZGF5ICsgbW9udGhkYXkgKyBkYXkgLSAxOworfQor
Citkb3VibGUgZ2V0Q3VycmVudFVUQ1RpbWUoKQoreworICAgIHJldHVybiBmbG9vcihnZXRDdXJy
ZW50VVRDVGltZVdpdGhNaWNyb3NlY29uZHMoKSk7Cit9CisKKy8vIFJldHVybnMgY3VycmVudCB0
aW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSAxIEphbiAxOTcwLgorZG91YmxlIGdldEN1cnJlbnRV
VENUaW1lV2l0aE1pY3Jvc2Vjb25kcygpCit7CisgICAgcmV0dXJuIGN1cnJlbnRUaW1lKCkgKiAx
MDAwLjA7IAorfQorCit2b2lkIGdldExvY2FsVGltZShjb25zdCB0aW1lX3QqIGxvY2FsVGltZSwg
c3RydWN0IHRtKiBsb2NhbFRNKQoreworI2lmIENPTVBJTEVSKE1TVkM3KSB8fCBDT01QSUxFUihN
SU5HVykgfHwgUExBVEZPUk0oV0lOX0NFKQorICAgICpsb2NhbFRNID0gKmxvY2FsdGltZShsb2Nh
bFRpbWUpOworI2VsaWYgQ09NUElMRVIoTVNWQykKKyAgICBsb2NhbHRpbWVfcyhsb2NhbFRNLCBs
b2NhbFRpbWUpOworI2Vsc2UKKyAgICBsb2NhbHRpbWVfcihsb2NhbFRpbWUsIGxvY2FsVE0pOwor
I2VuZGlmCit9CisKKy8vIFRoZXJlIGlzIGEgaGFyZCBsaW1pdCBhdCAyMDM4IHRoYXQgd2UgY3Vy
cmVudGx5IGRvIG5vdCBoYXZlIGEgd29ya2Fyb3VuZAorLy8gZm9yIChyZGFyOi8vcHJvYmxlbS81
MDUyOTc1KS4KK3N0YXRpYyBpbmxpbmUgaW50IG1heGltdW1ZZWFyRm9yRFNUKCkKK3sKKyAgICBy
ZXR1cm4gMjAzNzsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWluaW11bVllYXJGb3JEU1QoKQor
eworICAgIC8vIEJlY2F1c2Ugb2YgdGhlIDIwMzggaXNzdWUgKHNlZSBtYXhpbXVtWWVhckZvckRT
VCkgaWYgdGhlIGN1cnJlbnQgeWVhciBpcworICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgbWF4IHll
YXIgbWludXMgMjcgKDIwMTApLCB3ZSB3YW50IHRvIHVzZSB0aGUgbWF4IHllYXIKKyAgICAvLyBt
aW51cyAyNyBpbnN0ZWFkLCB0byBlbnN1cmUgdGhlcmUgaXMgYSByYW5nZSBvZiAyOCB5ZWFycyB0
aGF0IGFsbCB5ZWFycworICAgIC8vIGNhbiBtYXAgdG8uCisgICAgcmV0dXJuIHN0ZDo6bWluKG1z
VG9ZZWFyKGdldEN1cnJlbnRVVENUaW1lKCkpLCBtYXhpbXVtWWVhckZvckRTVCgpIC0gMjcpIDsK
K30KKworLyoKKyAqIEZpbmQgYW4gZXF1aXZhbGVudCB5ZWFyIGZvciB0aGUgb25lIGdpdmVuLCB3
aGVyZSBlcXVpdmFsZW5jZSBpcyBkZXRlcmluZWQgYnkKKyAqIHRoZSB0d28geWVhcnMgaGF2aW5n
IHRoZSBzYW1lIGxlYXBuZXNzIGFuZCB0aGUgZmlyc3QgZGF5IG9mIHRoZSB5ZWFyLCBmYWxsaW5n
CisgKiBvbiB0aGUgc2FtZSBkYXkgb2YgdGhlIHdlZWsuCisgKgorICogVGhpcyBmdW5jdGlvbiBy
ZXR1cm5zIGEgeWVhciBiZXR3ZWVuIHRoaXMgY3VycmVudCB5ZWFyIGFuZCAyMDM3LCBob3dldmVy
IHRoaXMKKyAqIGZ1bmN0aW9uIHdpbGwgcG90ZW50aWFsbHkgcmV0dXJuIGluY29ycmVjdCByZXN1
bHRzIGlmIHRoZSBjdXJyZW50IHllYXIgaXMgYWZ0ZXIKKyAqIDIwMTAsIChyZGFyOi8vcHJvYmxl
bS81MDUyOTc1KSwgaWYgdGhlIHllYXIgcGFzc2VkIGluIGlzIGJlZm9yZSAxOTAwIG9yIGFmdGVy
CisgKiAyMTAwLCAocmRhcjovL3Byb2JsZW0vNTA1NTAzOCkuCisgKi8KK2ludCBlcXVpdmFsZW50
WWVhckZvckRTVChpbnQgeWVhcikKK3sKKyAgICAvLyBJdCBpcyBvayBpZiB0aGUgY2FjaGVkIHll
YXIgaXMgbm90IHRoZSBjdXJyZW50IHllYXIgYXMgbG9uZyBhcyB0aGUgcnVsZXMKKyAgICAvLyBm
b3IgRFNUIGRpZCBub3QgY2hhbmdlIGJldHdlZW4gdGhlIHR3byB5ZWFyczsgaWYgdGhleSBkaWQg
dGhlIGFwcCB3b3VsZCBuZWVkCisgICAgLy8gdG8gYmUgcmVzdGFydGVkLgorICAgIHN0YXRpYyBp
bnQgbWluWWVhciA9IG1pbmltdW1ZZWFyRm9yRFNUKCk7CisgICAgaW50IG1heFllYXIgPSBtYXhp
bXVtWWVhckZvckRTVCgpOworCisgICAgaW50IGRpZmZlcmVuY2U7CisgICAgaWYgKHllYXIgPiBt
YXhZZWFyKQorICAgICAgICBkaWZmZXJlbmNlID0gbWluWWVhciAtIHllYXI7CisgICAgZWxzZSBp
ZiAoeWVhciA8IG1pblllYXIpCisgICAgICAgIGRpZmZlcmVuY2UgPSBtYXhZZWFyIC0geWVhcjsK
KyAgICBlbHNlCisgICAgICAgIHJldHVybiB5ZWFyOworCisgICAgaW50IHF1b3RpZW50ID0gZGlm
ZmVyZW5jZSAvIDI4OworICAgIGludCBwcm9kdWN0ID0gKHF1b3RpZW50KSAqIDI4OworCisgICAg
eWVhciArPSBwcm9kdWN0OworICAgIEFTU0VSVCgoeWVhciA+PSBtaW5ZZWFyICYmIHllYXIgPD0g
bWF4WWVhcikgfHwgKHByb2R1Y3QgLSB5ZWFyID09IHN0YXRpY19jYXN0PGludD4oTmFOKSkpOwor
ICAgIHJldHVybiB5ZWFyOworfQorCitzdGF0aWMgaW50MzJfdCBjYWxjdWxhdGVVVENPZmZzZXQo
KQoreworICAgIHRtIGxvY2FsdDsKKyAgICBtZW1zZXQoJmxvY2FsdCwgMCwgc2l6ZW9mKGxvY2Fs
dCkpOworIAorICAgIC8vIGdldCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgdGltZSB6b25l
IGFuZCBVVEMgb24gSmFuIDAxLCAyMDAwIDEyOjAwOjAwIEFNCisgICAgbG9jYWx0LnRtX21kYXkg
PSAxOworICAgIGxvY2FsdC50bV95ZWFyID0gMTAwOworICAgIHRpbWVfdCB1dGNPZmZzZXQgPSA5
NDY2ODQ4MDAgLSBta3RpbWUoJmxvY2FsdCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
MzJfdD4odXRjT2Zmc2V0ICogMTAwMCk7Cit9CisKKyNpZiBQTEFURk9STShEQVJXSU4pCitzdGF0
aWMgaW50MzJfdCBzX2NhY2hlZFVUQ09mZnNldDsgLy8gSW4gbWlsbGlzZWNvbmRzLiBBbiBhc3N1
bXB0aW9uIGhlcmUgaXMgdGhhdCBhY2Nlc3MgdG8gYW4gaW50MzJfdCB2YXJpYWJsZSBpcyBhdG9t
aWMgb24gcGxhdGZvcm1zIHRoYXQgdGFrZSB0aGlzIGNvZGUgcGF0aC4KK3N0YXRpYyBib29sIHNf
aGF2ZUNhY2hlZFVUQ09mZnNldDsKK3N0YXRpYyBpbnQgc19ub3RpZmljYXRpb25Ub2tlbjsKKyNl
bmRpZgorCisvKgorICogR2V0IHRoZSBkaWZmZXJlbmNlIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVu
IHRoaXMgdGltZSB6b25lIGFuZCBVVEMgKEdNVCkKKyAqIE5PVCBpbmNsdWRpbmcgRFNULgorICov
Citkb3VibGUgZ2V0VVRDT2Zmc2V0KCkKK3sKKyNpZiBQTEFURk9STShEQVJXSU4pCisgICAgaWYg
KHNfaGF2ZUNhY2hlZFVUQ09mZnNldCkgeworICAgICAgICBpbnQgbm90aWZpZWQ7CisgICAgICAg
IHVpbnQzMl90IHN0YXR1cyA9IG5vdGlmeV9jaGVjayhzX25vdGlmaWNhdGlvblRva2VuLCAmbm90
aWZpZWQpOworICAgICAgICBpZiAoc3RhdHVzID09IE5PVElGWV9TVEFUVVNfT0sgJiYgIW5vdGlm
aWVkKQorICAgICAgICAgICAgcmV0dXJuIHNfY2FjaGVkVVRDT2Zmc2V0OworICAgIH0KKyNlbmRp
ZgorCisgICAgaW50MzJfdCB1dGNPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKKworI2lm
IFBMQVRGT1JNKERBUldJTikKKyAgICAvLyBUaGVvcmV0aWNhbGx5LCBpdCBpcyBwb3NzaWJsZSB0
aGF0IHNldmVyYWwgdGhyZWFkcyB3aWxsIGJlIGV4ZWN1dGluZyB0aGlzIGNvZGUgYXQgb25jZSwg
aW4gd2hpY2ggY2FzZSB3ZSB3aWxsIGhhdmUgYSByYWNlIGNvbmRpdGlvbiwKKyAgICAvLyBhbmQg
YSBuZXdlciB2YWx1ZSBtYXkgYmUgb3ZlcndyaXR0ZW4uIEluIHByYWN0aWNlLCB0aW1lIHpvbmVz
IGRvbid0IGNoYW5nZSB0aGF0IG9mdGVuLgorICAgIHNfY2FjaGVkVVRDT2Zmc2V0ID0gdXRjT2Zm
c2V0OworI2VuZGlmCisKKyAgICByZXR1cm4gdXRjT2Zmc2V0OworfQorCisvKgorICogR2V0IHRo
ZSBEU1Qgb2Zmc2V0IGZvciB0aGUgdGltZSBwYXNzZWQgaW4uICBUYWtlcworICogc2Vjb25kcyAo
bm90IG1pbGxpc2Vjb25kcykgYW5kIGNhbm5vdCBoYW5kbGUgZGF0ZXMgYmVmb3JlIDE5NzAKKyAq
IG9uIHNvbWUgT1MnCisgKi8KK3N0YXRpYyBkb3VibGUgZ2V0RFNUT2Zmc2V0U2ltcGxlKGRvdWJs
ZSBsb2NhbFRpbWVTZWNvbmRzLCBkb3VibGUgdXRjT2Zmc2V0KQoreworICAgIGlmIChsb2NhbFRp
bWVTZWNvbmRzID4gbWF4VW5peFRpbWUpCisgICAgICAgIGxvY2FsVGltZVNlY29uZHMgPSBtYXhV
bml4VGltZTsKKyAgICBlbHNlIGlmIChsb2NhbFRpbWVTZWNvbmRzIDwgMCkgLy8gR28gYWhlYWQg
YSBkYXkgdG8gbWFrZSBsb2NhbHRpbWUgd29yayAoZG9lcyBub3Qgd29yayB3aXRoIDApCisgICAg
ICAgIGxvY2FsVGltZVNlY29uZHMgKz0gc2Vjb25kc1BlckRheTsKKworICAgIC8vaW5wdXQgaXMg
VVRDIHNvIHdlIGhhdmUgdG8gc2hpZnQgYmFjayB0byBsb2NhbCB0aW1lIHRvIGRldGVybWluZSBE
U1QgdGh1cyB0aGUgKyBnZXRVVENPZmZzZXQoKQorICAgIGRvdWJsZSBvZmZzZXRUaW1lID0gKGxv
Y2FsVGltZVNlY29uZHMgKiBtc1BlclNlY29uZCkgKyB1dGNPZmZzZXQ7CisKKyAgICAvLyBPZmZz
ZXQgZnJvbSBVVEMgYnV0IGRvZXNuJ3QgaW5jbHVkZSBEU1Qgb2J2aW91c2x5CisgICAgaW50IG9m
ZnNldEhvdXIgPSAgbXNUb0hvdXJzKG9mZnNldFRpbWUpOworICAgIGludCBvZmZzZXRNaW51dGUg
PSAgbXNUb01pbnV0ZXMob2Zmc2V0VGltZSk7CisKKyAgICAvLyBGSVhNRTogdGltZV90IGhhcyBh
IHBvdGVudGlhbCBwcm9ibGVtIGluIDIwMzgKKyAgICB0aW1lX3QgbG9jYWxUaW1lID0gc3RhdGlj
X2Nhc3Q8dGltZV90Pihsb2NhbFRpbWVTZWNvbmRzKTsKKworICAgIHRtIGxvY2FsVE07CisgICAg
Z2V0TG9jYWxUaW1lKCZsb2NhbFRpbWUsICZsb2NhbFRNKTsKKworICAgIGRvdWJsZSBkaWZmID0g
KChsb2NhbFRNLnRtX2hvdXIgLSBvZmZzZXRIb3VyKSAqIHNlY29uZHNQZXJIb3VyKSArICgobG9j
YWxUTS50bV9taW4gLSBvZmZzZXRNaW51dGUpICogNjApOworCisgICAgaWYgKGRpZmYgPCAwKQor
ICAgICAgICBkaWZmICs9IHNlY29uZHNQZXJEYXk7CisKKyAgICByZXR1cm4gKGRpZmYgKiBtc1Bl
clNlY29uZCk7Cit9CisKKy8vIEdldCB0aGUgRFNUIG9mZnNldCwgZ2l2ZW4gYSB0aW1lIGluIFVU
Qworc3RhdGljIGRvdWJsZSBnZXREU1RPZmZzZXQoZG91YmxlIG1zLCBkb3VibGUgdXRjT2Zmc2V0
KQoreworICAgIC8vIE9uIE1hYyBPUyBYLCB0aGUgY2FsbCB0byBsb2NhbHRpbWUgKHNlZSBnZXRE
U1RPZmZzZXRTaW1wbGUpIHdpbGwgcmV0dXJuIGhpc3RvcmljYWxseSBhY2N1cmF0ZQorICAgIC8v
IERTVCBpbmZvcm1hdGlvbiAoZS5nLiBOZXcgWmVhbGFuZCBkaWQgbm90IGhhdmUgRFNUIGZyb20g
MTk0NiB0byAxOTc0KSBob3dldmVyIHRoZSBKYXZhU2NyaXB0CisgICAgLy8gc3RhbmRhcmQgZXhw
bGljaXRseSBkaWN0YXRlcyB0aGF0IGhpc3RvcmljYWwgaW5mb3JtYXRpb24gc2hvdWxkIG5vdCBi
ZSBjb25zaWRlcmVkIHdoZW4KKyAgICAvLyBkZXRlcm1pbmluZyBEU1QuIEZvciB0aGlzIHJlYXNv
biB3ZSBzaGlmdCBhd2F5IGZyb20geWVhcnMgdGhhdCBsb2NhbHRpbWUgY2FuIGhhbmRsZSBidXQg
d291bGQKKyAgICAvLyByZXR1cm4gaGlzdG9yaWNhbGx5IGFjY3VyYXRlIGluZm9ybWF0aW9uLgor
ICAgIGludCB5ZWFyID0gbXNUb1llYXIobXMpOworICAgIGludCBlcXVpdmFsZW50WWVhciA9IGVx
dWl2YWxlbnRZZWFyRm9yRFNUKHllYXIpOworICAgIGlmICh5ZWFyICE9IGVxdWl2YWxlbnRZZWFy
KSB7CisgICAgICAgIGJvb2wgbGVhcFllYXIgPSBpc0xlYXBZZWFyKHllYXIpOworICAgICAgICBp
bnQgZGF5SW5ZZWFyTG9jYWwgPSBkYXlJblllYXIobXMsIHllYXIpOworICAgICAgICBpbnQgZGF5
SW5Nb250aCA9IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKGRheUluWWVhckxvY2FsLCBsZWFwWWVh
cik7CisgICAgICAgIGludCBtb250aCA9IG1vbnRoRnJvbURheUluWWVhcihkYXlJblllYXJMb2Nh
bCwgbGVhcFllYXIpOworICAgICAgICBpbnQgZGF5ID0gZGF0ZVRvRGF5SW5ZZWFyKGVxdWl2YWxl
bnRZZWFyLCBtb250aCwgZGF5SW5Nb250aCk7CisgICAgICAgIG1zID0gKGRheSAqIG1zUGVyRGF5
KSArIG1zVG9NaWxsaXNlY29uZHMobXMpOworICAgIH0KKworICAgIHJldHVybiBnZXREU1RPZmZz
ZXRTaW1wbGUobXMgLyBtc1BlclNlY29uZCwgdXRjT2Zmc2V0KTsKK30KKworZG91YmxlIGdyZWdv
cmlhbkRhdGVUaW1lVG9NUyhjb25zdCBHcmVnb3JpYW5EYXRlVGltZSYgdCwgZG91YmxlIG1pbGxp
U2Vjb25kcywgYm9vbCBpbnB1dElzVVRDKQoreworICAgIGludCBkYXkgPSBkYXRlVG9EYXlJblll
YXIodC55ZWFyICsgMTkwMCwgdC5tb250aCwgdC5tb250aERheSk7CisgICAgZG91YmxlIG1zID0g
dGltZVRvTVModC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQsIG1pbGxpU2Vjb25kcyk7CisgICAg
ZG91YmxlIHJlc3VsdCA9IChkYXkgKiBtc1BlckRheSkgKyBtczsKKworICAgIGlmICghaW5wdXRJ
c1VUQykgeyAvLyBjb252ZXJ0IHRvIFVUQworICAgICAgICBkb3VibGUgdXRjT2Zmc2V0ID0gZ2V0
VVRDT2Zmc2V0KCk7CisgICAgICAgIHJlc3VsdCAtPSB1dGNPZmZzZXQ7CisgICAgICAgIHJlc3Vs
dCAtPSBnZXREU1RPZmZzZXQocmVzdWx0LCB1dGNPZmZzZXQpOworICAgIH0KKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKGRvdWJsZSBtcywgYm9v
bCBvdXRwdXRJc1VUQywgR3JlZ29yaWFuRGF0ZVRpbWUmIHRtKQoreworICAgIC8vIGlucHV0IGlz
IFVUQworICAgIGRvdWJsZSBkc3RPZmYgPSAwLjA7CisgICAgY29uc3QgZG91YmxlIHV0Y09mZiA9
IGdldFVUQ09mZnNldCgpOworCisgICAgaWYgKCFvdXRwdXRJc1VUQykgeyAgLy8gY29udmVydCB0
byBsb2NhbCB0aW1lCisgICAgICAgIGRzdE9mZiA9IGdldERTVE9mZnNldChtcywgdXRjT2ZmKTsK
KyAgICAgICAgbXMgKz0gZHN0T2ZmICsgdXRjT2ZmOworICAgIH0KKworICAgIGNvbnN0IGludCB5
ZWFyID0gbXNUb1llYXIobXMpOworICAgIHRtLnNlY29uZCAgID0gIG1zVG9TZWNvbmRzKG1zKTsK
KyAgICB0bS5taW51dGUgICA9ICBtc1RvTWludXRlcyhtcyk7CisgICAgdG0uaG91ciAgICAgPSAg
bXNUb0hvdXJzKG1zKTsKKyAgICB0bS53ZWVrRGF5ICA9ICBtc1RvV2Vla0RheShtcyk7CisgICAg
dG0ueWVhckRheSAgPSAgZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKKyAgICB0bS5tb250aERheSA9ICBk
YXlJbk1vbnRoRnJvbURheUluWWVhcih0bS55ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKKyAg
ICB0bS5tb250aCAgICA9ICBtb250aEZyb21EYXlJblllYXIodG0ueWVhckRheSwgaXNMZWFwWWVh
cih5ZWFyKSk7CisgICAgdG0ueWVhciAgICAgPSAgeWVhciAtIDE5MDA7CisgICAgdG0uaXNEU1Qg
ICAgPSAgZHN0T2ZmICE9IDAuMDsKKworICAgIHRtLnV0Y09mZnNldCA9IHN0YXRpY19jYXN0PGxv
bmc+KChkc3RPZmYgKyB1dGNPZmYpIC8gbXNQZXJTZWNvbmQpOworICAgIHRtLnRpbWVab25lID0g
TlVMTDsKK30KKwordm9pZCBpbml0aWFsaXplRGF0ZXMoKQoreworI2lmbmRlZiBOREVCVUcKKyAg
ICBzdGF0aWMgYm9vbCBhbHJlYWR5SW5pdGlhbGl6ZWQ7CisgICAgQVNTRVJUKCFhbHJlYWR5SW5p
dGlhbGl6ZWQrKyk7CisjZW5kaWYKKworICAgIGVxdWl2YWxlbnRZZWFyRm9yRFNUKDIwMDApOyAv
LyBOZWVkIHRvIGNhbGwgb25jZSB0byBpbml0aWFsaXplIGEgc3RhdGljIHVzZWQgaW4gdGhpcyBm
dW5jdGlvbi4KKyNpZiBQTEFURk9STShEQVJXSU4pCisgICAgLy8gUmVnaXN0ZXIgZm9yIGEgbm90
aWZpY2F0aW9uIHdoZW5ldmVyIHRoZSB0aW1lIHpvbmUgY2hhbmdlcy4KKyAgICB1aW50MzJfdCBz
dGF0dXMgPSBub3RpZnlfcmVnaXN0ZXJfY2hlY2soImNvbS5hcHBsZS5zeXN0ZW0udGltZXpvbmUi
LCAmc19ub3RpZmljYXRpb25Ub2tlbik7CisgICAgaWYgKHN0YXR1cyA9PSBOT1RJRllfU1RBVFVT
X09LKSB7CisgICAgICAgIHNfY2FjaGVkVVRDT2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7
CisgICAgICAgIHNfaGF2ZUNhY2hlZFVUQ09mZnNldCA9IHRydWU7CisgICAgfQorI2VuZGlmCit9
CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHltZGhtc1RvU2Vjb25kcyhsb25nIHllYXIsIGludCBt
b24sIGludCBkYXksIGludCBob3VyLCBpbnQgbWludXRlLCBpbnQgc2Vjb25kKQoreworICAgIGRv
dWJsZSBkYXlzID0gKGRheSAtIDMyMDc1KQorICAgICAgICArIGZsb29yKDE0NjEgKiAoeWVhciAr
IDQ4MDAuMCArIChtb24gLSAxNCkgLyAxMikgLyA0KQorICAgICAgICArIDM2NyAqIChtb24gLSAy
IC0gKG1vbiAtIDE0KSAvIDEyICogMTIpIC8gMTIKKyAgICAgICAgLSBmbG9vcigzICogKCh5ZWFy
ICsgNDkwMC4wICsgKG1vbiAtIDE0KSAvIDEyKSAvIDEwMCkgLyA0KQorICAgICAgICAtIDI0NDA1
ODg7CisgICAgcmV0dXJuICgoZGF5cyAqIGhvdXJzUGVyRGF5ICsgaG91cikgKiBtaW51dGVzUGVy
SG91ciArIG1pbnV0ZSkgKiBzZWNvbmRzUGVyTWludXRlICsgc2Vjb25kOworfQorCisvLyBXZSBm
b2xsb3cgdGhlIHJlY29tbWVuZGF0aW9uIG9mIFJGQyAyODIyIHRvIGNvbnNpZGVyIGFsbAorLy8g
b2Jzb2xldGUgdGltZSB6b25lcyBub3QgbGlzdGVkIGhlcmUgZXF1aXZhbGVudCB0byAiLTAwMDAi
Lgorc3RhdGljIGNvbnN0IHN0cnVjdCBLbm93blpvbmUgeworI2lmICFQTEFURk9STShXSU5fT1Mp
CisgICAgY29uc3QKKyNlbmRpZgorICAgICAgICBjaGFyIHR6TmFtZVs0XTsKKyAgICBpbnQgdHpP
ZmZzZXQ7Cit9IGtub3duX3pvbmVzW10gPSB7CisgICAgeyAiVVQiLCAwIH0sCisgICAgeyAiR01U
IiwgMCB9LAorICAgIHsgIkVTVCIsIC0zMDAgfSwKKyAgICB7ICJFRFQiLCAtMjQwIH0sCisgICAg
eyAiQ1NUIiwgLTM2MCB9LAorICAgIHsgIkNEVCIsIC0zMDAgfSwKKyAgICB7ICJNU1QiLCAtNDIw
IH0sCisgICAgeyAiTURUIiwgLTM2MCB9LAorICAgIHsgIlBTVCIsIC00ODAgfSwKKyAgICB7ICJQ
RFQiLCAtNDIwIH0KK307CisKK2lubGluZSBzdGF0aWMgdm9pZCBza2lwU3BhY2VzQW5kQ29tbWVu
dHMoY29uc3QgY2hhciomIHMpCit7CisgICAgaW50IG5lc3RpbmcgPSAwOworICAgIGNoYXIgY2g7
CisgICAgd2hpbGUgKChjaCA9ICpzKSkgeworICAgICAgICBpZiAoIWlzQVNDSUlTcGFjZShjaCkp
IHsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnKCcpCisgICAgICAgICAgICAgICAgbmVzdGluZysr
OworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJyknICYmIG5lc3RpbmcgPiAwKQorICAgICAg
ICAgICAgICAgIG5lc3RpbmctLTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5lc3RpbmcgPT0gMCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzKys7CisgICAgfQor
fQorCisvLyByZXR1cm5zIDAtMTEgKEphbi1EZWMpOyAtMSBvbiBmYWlsdXJlCitzdGF0aWMgaW50
IGZpbmRNb250aChjb25zdCBjaGFyKiBtb250aFN0cikKK3sKKyAgICBBU1NFUlQobW9udGhTdHIp
OworICAgIGNoYXIgbmVlZGxlWzRdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7
CisgICAgICAgIGlmICghKm1vbnRoU3RyKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg
ICBuZWVkbGVbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPih0b0FTQ0lJTG93ZXIoKm1vbnRoU3RyKysp
KTsKKyAgICB9CisgICAgbmVlZGxlWzNdID0gJ1wwJzsKKyAgICBjb25zdCBjaGFyICpoYXlzdGFj
ayA9ICJqYW5mZWJtYXJhcHJtYXlqdW5qdWxhdWdzZXBvY3Rub3ZkZWMiOworICAgIGNvbnN0IGNo
YXIgKnN0ciA9IHN0cnN0cihoYXlzdGFjaywgbmVlZGxlKTsKKyAgICBpZiAoc3RyKSB7CisgICAg
ICAgIGludCBwb3NpdGlvbiA9IHN0YXRpY19jYXN0PGludD4oc3RyIC0gaGF5c3RhY2spOworICAg
ICAgICBpZiAocG9zaXRpb24gJSAzID09IDApCisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24g
LyAzOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlTG9uZyhj
b25zdCBjaGFyKiBzdHJpbmcsIGNoYXIqKiBzdG9wUG9zaXRpb24sIGludCBiYXNlLCBsb25nKiBy
ZXN1bHQpCit7CisgICAgKnJlc3VsdCA9IHN0cnRvbChzdHJpbmcsIHN0b3BQb3NpdGlvbiwgYmFz
ZSk7CisgICAgLy8gQXZvaWQgdGhlIHVzZSBvZiBlcnJubyBhcyBpdCBpcyBub3QgYXZhaWxhYmxl
IG9uIFdpbmRvd3MgQ0UKKyAgICBpZiAoc3RyaW5nID09ICpzdG9wUG9zaXRpb24gfHwgKnJlc3Vs
dCA9PSBMT05HX01JTiB8fCAqcmVzdWx0ID09IExPTkdfTUFYKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2RvdWJsZSBwYXJzZURhdGVGcm9tTnVsbFRlcm1p
bmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpCit7CisgICAgLy8gVGhpcyBw
YXJzZXMgYSBkYXRlIGluIHRoZSBmb3JtOgorICAgIC8vICAgICBUdWVzZGF5LCAwOS1Ob3YtOTkg
MjM6MTI6NDAgR01UCisgICAgLy8gb3IKKyAgICAvLyAgICAgU2F0LCAwMS1KYW4tMjAwMCAwODow
MDowMCBHTVQKKyAgICAvLyBvcgorICAgIC8vICAgICBTYXQsIDAxIEphbiAyMDAwIDA4OjAwOjAw
IEdNVAorICAgIC8vIG9yCisgICAgLy8gICAgIDAxIEphbiA5OSAyMjowMCArMDEwMCAgICAoZXhj
ZXB0aW9ucyBpbiByZmM4MjIvcmZjMjgyMikKKyAgICAvLyAjIyMgbm9uIFJGQyBmb3JtYXRzLCBh
ZGRlZCBmb3IgSmF2YXNjcmlwdDoKKyAgICAvLyAgICAgW1dlZG5lc2RheV0gSmFudWFyeSAwOSAx
OTk5IDIzOjEyOjQwIEdNVAorICAgIC8vICAgICBbV2VkbmVzZGF5XSBKYW51YXJ5IDA5IDIzOjEy
OjQwIEdNVCAxOTk5CisgICAgLy8KKyAgICAvLyBXZSBpZ25vcmUgdGhlIHdlZWtkYXkuCisKKyAg
ICAvLyBTa2lwIGxlYWRpbmcgc3BhY2UKKyAgICBza2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0
cmluZyk7CisKKyAgICBsb25nIG1vbnRoID0gLTE7CisgICAgY29uc3QgY2hhciAqd29yZFN0YXJ0
ID0gZGF0ZVN0cmluZzsKKyAgICAvLyBDaGVjayBjb250ZW50cyBvZiBmaXJzdCB3b3JkcyBpZiBu
b3QgbnVtYmVyCisgICAgd2hpbGUgKCpkYXRlU3RyaW5nICYmICFpc0FTQ0lJRGlnaXQoKmRhdGVT
dHJpbmcpKSB7CisgICAgICAgIGlmIChpc0FTQ0lJU3BhY2UoKmRhdGVTdHJpbmcpIHx8ICpkYXRl
U3RyaW5nID09ICcoJykgeworICAgICAgICAgICAgaWYgKGRhdGVTdHJpbmcgLSB3b3JkU3RhcnQg
Pj0gMykKKyAgICAgICAgICAgICAgICBtb250aCA9IGZpbmRNb250aCh3b3JkU3RhcnQpOworICAg
ICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOworICAgICAgICAgICAg
d29yZFN0YXJ0ID0gZGF0ZVN0cmluZzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgIGRhdGVT
dHJpbmcrKzsKKyAgICB9CisKKyAgICAvLyBNaXNzaW5nIGRlbGltaXRlciBiZXR3ZWVuIG1vbnRo
IGFuZCBkYXkgKGxpa2UgIkphbnVhcnkyOSIpPworICAgIGlmIChtb250aCA9PSAtMSAmJiB3b3Jk
U3RhcnQgIT0gZGF0ZVN0cmluZykKKyAgICAgICAgbW9udGggPSBmaW5kTW9udGgod29yZFN0YXJ0
KTsKKworICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsKKworICAgIGlmICgh
KmRhdGVTdHJpbmcpCisgICAgICAgIHJldHVybiBOYU47CisKKyAgICAvLyAnIDA5LU5vdi05OSAy
MzoxMjo0MCBHTVQnCisgICAgY2hhciogbmV3UG9zU3RyOworICAgIGxvbmcgZGF5OworICAgIGlm
ICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmZGF5KSkKKyAgICAgICAg
cmV0dXJuIE5hTjsKKyAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOworCisgICAgaWYgKCEqZGF0
ZVN0cmluZykKKyAgICAgICAgcmV0dXJuIE5hTjsKKworICAgIGlmIChkYXkgPCAwKQorICAgICAg
ICByZXR1cm4gTmFOOworCisgICAgbG9uZyB5ZWFyID0gMDsKKyAgICBpZiAoZGF5ID4gMzEpIHsK
KyAgICAgICAgLy8gIyMjIHdoZXJlIGlzIHRoZSBib3VuZGFyeSBhbmQgd2hhdCBoYXBwZW5zIGJl
bG93PworICAgICAgICBpZiAoKmRhdGVTdHJpbmcgIT0gJy8nKQorICAgICAgICAgICAgcmV0dXJu
IE5hTjsKKyAgICAgICAgLy8gbG9va3MgbGlrZSBhIFlZWVkvTU0vREQgZGF0ZQorICAgICAgICBp
ZiAoISorK2RhdGVTdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICB5ZWFy
ID0gZGF5OworICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAx
MCwgJm1vbnRoKSkKKyAgICAgICAgICAgIHJldHVybiBOYU47CisgICAgICAgIG1vbnRoIC09IDE7
CisgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CisgICAgICAgIGlmICgqZGF0ZVN0cmlu
ZysrICE9ICcvJyB8fCAhKmRhdGVTdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gTmFOOworICAg
ICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJmRheSkpCisg
ICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwor
ICAgIH0gZWxzZSBpZiAoKmRhdGVTdHJpbmcgPT0gJy8nICYmIG1vbnRoID09IC0xKSB7CisgICAg
ICAgIGRhdGVTdHJpbmcrKzsKKyAgICAgICAgLy8gVGhpcyBsb29rcyBsaWtlIGEgTU0vREQvWVlZ
WSBkYXRlLCBub3QgYW4gUkZDIGRhdGUuCisgICAgICAgIG1vbnRoID0gZGF5IC0gMTsgLy8gMC1i
YXNlZAorICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwg
JmRheSkpCisgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICBpZiAoZGF5IDwgMSB8fCBk
YXkgPiAzMSkKKyAgICAgICAgICAgIHJldHVybiBOYU47CisgICAgICAgIGRhdGVTdHJpbmcgPSBu
ZXdQb3NTdHI7CisgICAgICAgIGlmICgqZGF0ZVN0cmluZyA9PSAnLycpCisgICAgICAgICAgICBk
YXRlU3RyaW5nKys7CisgICAgICAgIGlmICghKmRhdGVTdHJpbmcpCisgICAgICAgICAgICByZXR1
cm4gTmFOOworICAgICB9IGVsc2UgeworICAgICAgICBpZiAoKmRhdGVTdHJpbmcgPT0gJy0nKQor
ICAgICAgICAgICAgZGF0ZVN0cmluZysrOworCisgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50
cyhkYXRlU3RyaW5nKTsKKworICAgICAgICBpZiAoKmRhdGVTdHJpbmcgPT0gJywnKQorICAgICAg
ICAgICAgZGF0ZVN0cmluZysrOworCisgICAgICAgIGlmIChtb250aCA9PSAtMSkgeyAvLyBub3Qg
Zm91bmQgeWV0CisgICAgICAgICAgICBtb250aCA9IGZpbmRNb250aChkYXRlU3RyaW5nKTsKKyAg
ICAgICAgICAgIGlmIChtb250aCA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFOOwor
CisgICAgICAgICAgICB3aGlsZSAoKmRhdGVTdHJpbmcgJiYgKmRhdGVTdHJpbmcgIT0gJy0nICYm
ICpkYXRlU3RyaW5nICE9ICcsJyAmJiAhaXNBU0NJSVNwYWNlKCpkYXRlU3RyaW5nKSkKKyAgICAg
ICAgICAgICAgICBkYXRlU3RyaW5nKys7CisKKyAgICAgICAgICAgIGlmICghKmRhdGVTdHJpbmcp
CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKKworICAgICAgICAgICAgLy8gJy05OSAyMzox
Mjo0MCBHTVQnCisgICAgICAgICAgICBpZiAoKmRhdGVTdHJpbmcgIT0gJy0nICYmICpkYXRlU3Ry
aW5nICE9ICcvJyAmJiAqZGF0ZVN0cmluZyAhPSAnLCcgJiYgIWlzQVNDSUlTcGFjZSgqZGF0ZVN0
cmluZykpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgICAgIGRhdGVTdHJp
bmcrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtb250aCA8IDAgfHwgbW9udGggPiAx
MSkKKyAgICAgICAgcmV0dXJuIE5hTjsKKworICAgIC8vICc5OSAyMzoxMjo0MCBHTVQnCisgICAg
aWYgKHllYXIgPD0gMCAmJiAqZGF0ZVN0cmluZykgeworICAgICAgICBpZiAoIXBhcnNlTG9uZyhk
YXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJnllYXIpKQorICAgICAgICAgICAgcmV0dXJuIE5h
TjsKKyAgICB9CisgICAgCisgICAgLy8gRG9uJ3QgZmFpbCBpZiB0aGUgdGltZSBpcyBtaXNzaW5n
LgorICAgIGxvbmcgaG91ciA9IDA7CisgICAgbG9uZyBtaW51dGUgPSAwOworICAgIGxvbmcgc2Vj
b25kID0gMDsKKyAgICBpZiAoISpuZXdQb3NTdHIpCisgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQ
b3NTdHI7CisgICAgZWxzZSB7CisgICAgICAgIC8vICcgMjM6MTI6NDAgR01UJworICAgICAgICBp
ZiAoIShpc0FTQ0lJU3BhY2UoKm5ld1Bvc1N0cikgfHwgKm5ld1Bvc1N0ciA9PSAnLCcpKSB7Cisg
ICAgICAgICAgICBpZiAoKm5ld1Bvc1N0ciAhPSAnOicpCisgICAgICAgICAgICAgICAgcmV0dXJu
IE5hTjsKKyAgICAgICAgICAgIC8vIFRoZXJlIHdhcyBubyB5ZWFyOyB0aGUgbnVtYmVyIHdhcyB0
aGUgaG91ci4KKyAgICAgICAgICAgIHllYXIgPSAtMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIGluIHRoZSBub3JtYWwgY2FzZSAod2UgcGFyc2VkIHRoZSB5ZWFyKSwgYWR2YW5j
ZSB0byB0aGUgbmV4dCBudW1iZXIKKyAgICAgICAgICAgIGRhdGVTdHJpbmcgPSArK25ld1Bvc1N0
cjsKKyAgICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJmhv
dXIpOworICAgICAgICAvLyBEbyBub3QgY2hlY2sgZm9yIGVycm5vIGhlcmUgc2luY2Ugd2Ugd2Fu
dCB0byBjb250aW51ZQorICAgICAgICAvLyBldmVuIGlmIGVycm5vIHdhcyBzZXQgYmVjYXN1ZSB3
ZSBhcmUgc3RpbGwgbG9va2luZworICAgICAgICAvLyBmb3IgdGhlIHRpbWV6b25lIQorCisgICAg
ICAgIC8vIFJlYWQgYSBudW1iZXI/IElmIG5vdCwgdGhpcyBtaWdodCBiZSBhIHRpbWV6b25lIG5h
bWUuCisgICAgICAgIGlmIChuZXdQb3NTdHIgIT0gZGF0ZVN0cmluZykgeworICAgICAgICAgICAg
ZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKKworICAgICAgICAgICAgaWYgKGhvdXIgPCAwIHx8IGhv
dXIgPiAyMykKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFOOworCisgICAgICAgICAgICBpZiAo
ISpkYXRlU3RyaW5nKQorICAgICAgICAgICAgICAgIHJldHVybiBOYU47CisKKyAgICAgICAgICAg
IC8vICc6MTI6NDAgR01UJworICAgICAgICAgICAgaWYgKCpkYXRlU3RyaW5nKysgIT0gJzonKQor
ICAgICAgICAgICAgICAgIHJldHVybiBOYU47CisKKyAgICAgICAgICAgIGlmICghcGFyc2VMb25n
KGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmbWludXRlKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTmFOOworICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKKworICAgICAg
ICAgICAgaWYgKG1pbnV0ZSA8IDAgfHwgbWludXRlID4gNTkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIE5hTjsKKworICAgICAgICAgICAgLy8gJzo0MCBHTVQnCisgICAgICAgICAgICBpZiAoKmRh
dGVTdHJpbmcgJiYgKmRhdGVTdHJpbmcgIT0gJzonICYmICFpc0FTQ0lJU3BhY2UoKmRhdGVTdHJp
bmcpKQorICAgICAgICAgICAgICAgIHJldHVybiBOYU47CisKKyAgICAgICAgICAgIC8vIHNlY29u
ZHMgYXJlIG9wdGlvbmFsIGluIHJmYzgyMiArIHJmYzI4MjIKKyAgICAgICAgICAgIGlmICgqZGF0
ZVN0cmluZyA9PSc6JykgeworICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcrKzsKKworICAgICAg
ICAgICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmc2Vj
b25kKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgICAgICAgICBk
YXRlU3RyaW5nID0gbmV3UG9zU3RyOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KHNlY29uZCA8IDAgfHwgc2Vjb25kID4gNTkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
YU47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhk
YXRlU3RyaW5nKTsKKworICAgICAgICAgICAgaWYgKHN0cm5jYXNlY21wKGRhdGVTdHJpbmcsICJB
TSIsIDIpID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoaG91ciA+IDEyKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKQor
ICAgICAgICAgICAgICAgICAgICBob3VyID0gMDsKKyAgICAgICAgICAgICAgICBkYXRlU3RyaW5n
ICs9IDI7CisgICAgICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcp
OworICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJuY2FzZWNtcChkYXRlU3RyaW5nLCAiUE0iLCAy
KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGhvdXIgPiAxMikKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMikKKyAgICAg
ICAgICAgICAgICAgICAgaG91ciArPSAxMjsKKyAgICAgICAgICAgICAgICBkYXRlU3RyaW5nICs9
IDI7CisgICAgICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBoYXZlVFogPSBmYWxz
ZTsKKyAgICBpbnQgb2Zmc2V0ID0gMDsKKworICAgIC8vIERvbid0IGZhaWwgaWYgdGhlIHRpbWUg
em9uZSBpcyBtaXNzaW5nLiAKKyAgICAvLyBTb21lIHdlYnNpdGVzIG9taXQgdGhlIHRpbWUgem9u
ZSAoNDI3NTIwNikuCisgICAgaWYgKCpkYXRlU3RyaW5nKSB7CisgICAgICAgIGlmIChzdHJuY2Fz
ZWNtcChkYXRlU3RyaW5nLCAiR01UIiwgMykgPT0gMCB8fCBzdHJuY2FzZWNtcChkYXRlU3RyaW5n
LCAiVVRDIiwgMykgPT0gMCkgeworICAgICAgICAgICAgZGF0ZVN0cmluZyArPSAzOworICAgICAg
ICAgICAgaGF2ZVRaID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgqZGF0ZVN0cmlu
ZyA9PSAnKycgfHwgKmRhdGVTdHJpbmcgPT0gJy0nKSB7CisgICAgICAgICAgICBsb25nIG87Cisg
ICAgICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJm8p
KQorICAgICAgICAgICAgICAgIHJldHVybiBOYU47CisgICAgICAgICAgICBkYXRlU3RyaW5nID0g
bmV3UG9zU3RyOworCisgICAgICAgICAgICBpZiAobyA8IC05OTU5IHx8IG8gPiA5OTU5KQorICAg
ICAgICAgICAgICAgIHJldHVybiBOYU47CisKKyAgICAgICAgICAgIGludCBzZ24gPSAobyA8IDAp
ID8gLTEgOiAxOworICAgICAgICAgICAgbyA9IGFicyhvKTsKKyAgICAgICAgICAgIGlmICgqZGF0
ZVN0cmluZyAhPSAnOicpIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSAoKG8gLyAxMDApICog
NjAgKyAobyAlIDEwMCkpICogc2duOworICAgICAgICAgICAgfSBlbHNlIHsgLy8gR01UKzA1OjAw
CisgICAgICAgICAgICAgICAgbG9uZyBvMjsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcnNlTG9u
ZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJm8yKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE5hTjsKKyAgICAgICAgICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOworICAg
ICAgICAgICAgICAgIG9mZnNldCA9IChvICogNjAgKyBvMikgKiBzZ247CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBoYXZlVFogPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnQoc2l6ZW9mKGtub3duX3pvbmVzKSAvIHNpemVvZihL
bm93blpvbmUpKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKDAgPT0gc3RybmNhc2VjbXAo
ZGF0ZVN0cmluZywga25vd25fem9uZXNbaV0udHpOYW1lLCBzdHJsZW4oa25vd25fem9uZXNbaV0u
dHpOYW1lKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0ga25vd25fem9uZXNbaV0u
dHpPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcgKz0gc3RybGVuKGtub3du
X3pvbmVzW2ldLnR6TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGhhdmVUWiA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3Ry
aW5nKTsKKworICAgIGlmICgqZGF0ZVN0cmluZyAmJiB5ZWFyID09IC0xKSB7CisgICAgICAgIGlm
ICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmeWVhcikpCisgICAgICAg
ICAgICByZXR1cm4gTmFOOworICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOworICAgIH0K
KyAgICAgCisgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOworICAgICAKKyAg
ICAvLyBUcmFpbGluZyBnYXJiYWdlCisgICAgaWYgKCpkYXRlU3RyaW5nKQorICAgICAgICByZXR1
cm4gTmFOOworCisgICAgLy8gWTJLOiBIYW5kbGUgMiBkaWdpdCB5ZWFycy4KKyAgICBpZiAoeWVh
ciA+PSAwICYmIHllYXIgPCAxMDApIHsKKyAgICAgICAgaWYgKHllYXIgPCA1MCkKKyAgICAgICAg
ICAgIHllYXIgKz0gMjAwMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgeWVhciArPSAxOTAw
OworICAgIH0KKworICAgIC8vIGZhbGwgYmFjayB0byBsb2NhbCB0aW1lem9uZQorICAgIGlmICgh
aGF2ZVRaKSB7CisgICAgICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7CisgICAgICAgIHQubW9udGhE
YXkgPSBkYXk7CisgICAgICAgIHQubW9udGggPSBtb250aDsKKyAgICAgICAgdC55ZWFyID0geWVh
ciAtIDE5MDA7CisgICAgICAgIHQuaXNEU1QgPSAtMTsKKyAgICAgICAgdC5zZWNvbmQgPSBzZWNv
bmQ7CisgICAgICAgIHQubWludXRlID0gbWludXRlOworICAgICAgICB0LmhvdXIgPSBob3VyOwor
CisgICAgICAgIC8vIFVzZSBvdXIgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKCkgcmF0aGVyIHRoYW4g
bWt0aW1lKCkgYXMgdGhlIGxhdHRlciBjYW4ndCBoYW5kbGUgdGhlIGZ1bGwgeWVhciByYW5nZS4K
KyAgICAgICAgcmV0dXJuIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCAwLCBmYWxzZSk7CisgICAg
fQorCisgICAgcmV0dXJuICh5bWRobXNUb1NlY29uZHMoeWVhciwgbW9udGggKyAxLCBkYXksIGhv
dXIsIG1pbnV0ZSwgc2Vjb25kKSAtIChvZmZzZXQgKiA2MC4wKSkgKiBtc1BlclNlY29uZDsKK30K
KworZG91YmxlIHRpbWVDbGlwKGRvdWJsZSB0KQoreworICAgIGlmICghaXNmaW5pdGUodCkpCisg
ICAgICAgIHJldHVybiBOYU47CisgICAgaWYgKGZhYnModCkgPiA4LjY0RTE1KQorICAgICAgICBy
ZXR1cm4gTmFOOworICAgIHJldHVybiB0cnVuYyh0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZUV4dHJhcy5oIGIvSmF2YVNjcmlw
dENvcmUvd3RmL0RhdGVFeHRyYXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wYTUyYjE5Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVFeHRy
YXMuaApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVmVyc2lvbjogTVBMIDEuMS9H
UEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3Vi
amVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAi
TGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
YmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
ciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
Z292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgor
ICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29tbXVuaWNhdG9yIGNsaWVudCBj
b2RlLCByZWxlYXNlZAorICogTWFyY2ggMzEsIDE5OTguCisgKgorICogVGhlIEluaXRpYWwgRGV2
ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9u
cyBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxv
cGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5h
dGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0
ZXJtcyBvZgorICogZWl0aGVyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksCisgKiBvciB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGlu
IHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBw
bGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cg
dXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1z
IG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0
bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNp
b25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIg
cHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90
IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91
ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2Yg
dGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKi8KKworI2lmbmRlZiBEYXRlRXh0
cmFzX2gKKyNkZWZpbmUgRGF0ZUV4dHJhc19oCisKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVk
ZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKworbmFtZXNwYWNlIFdURiB7
CisKK3N0cnVjdCBHcmVnb3JpYW5EYXRlVGltZTsKKwordm9pZCBpbml0aWFsaXplRGF0ZXMoKTsK
Kwordm9pZCBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoZG91YmxlLCBib29sIG91dHB1dElzVVRDLCBH
cmVnb3JpYW5EYXRlVGltZSYpOworZG91YmxlIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhjb25zdCBH
cmVnb3JpYW5EYXRlVGltZSYsIGRvdWJsZSwgYm9vbCBpbnB1dElzVVRDKTsKK2RvdWJsZSBnZXRV
VENPZmZzZXQoKTsKK2ludCBlcXVpdmFsZW50WWVhckZvckRTVChpbnQgeWVhcik7Citkb3VibGUg
Z2V0Q3VycmVudFVUQ1RpbWUoKTsKK2RvdWJsZSBnZXRDdXJyZW50VVRDVGltZVdpdGhNaWNyb3Nl
Y29uZHMoKTsKK3ZvaWQgZ2V0TG9jYWxUaW1lKGNvbnN0IHRpbWVfdCosIHRtKik7CisKKy8vIE5v
dCByZWFsbHkgbWF0aCByZWxhdGVkLCBidXQgdGhpcyBpcyBjdXJyZW50bHkgdGhlIG9ubHkgc2hh
cmVkIHBsYWNlIHRvIHB1dCB0aGVzZS4gIAorZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWlu
YXRlZENoYXJhY3RlcnMoY29uc3QgY2hhciopOworZG91YmxlIHRpbWVDbGlwKGRvdWJsZSk7CisK
K2NvbnN0IGNoYXIgKiBjb25zdCB3ZWVrZGF5TmFtZVs3XSA9IHsgIk1vbiIsICJUdWUiLCAiV2Vk
IiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biIgfTsKK2NvbnN0IGNoYXIgKiBjb25zdCBtb250
aE5hbWVbMTJdID0geyAiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLCAi
SnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiIH07CisKK2NvbnN0IGRvdWJs
ZSBob3Vyc1BlckRheSA9IDI0LjA7Citjb25zdCBkb3VibGUgbWludXRlc1BlckhvdXIgPSA2MC4w
OworY29uc3QgZG91YmxlIHNlY29uZHNQZXJIb3VyID0gNjAuMCAqIDYwLjA7Citjb25zdCBkb3Vi
bGUgc2Vjb25kc1Blck1pbnV0ZSA9IDYwLjA7Citjb25zdCBkb3VibGUgbXNQZXJTZWNvbmQgPSAx
MDAwLjA7Citjb25zdCBkb3VibGUgbXNQZXJNaW51dGUgPSA2MC4wICogMTAwMC4wOworY29uc3Qg
ZG91YmxlIG1zUGVySG91ciA9IDYwLjAgKiA2MC4wICogMTAwMC4wOworY29uc3QgZG91YmxlIG1z
UGVyRGF5ID0gMjQuMCAqIDYwLjAgKiA2MC4wICogMTAwMC4wOworCisvLyBJbnRlbnRpb25hbGx5
IG92ZXJyaWRkaW5nIHRoZSBkZWZhdWx0IHRtIG9mIHRoZSBzeXN0ZW0KKy8vIFRlZSBtZW1iZXJz
IG9mIHRtIGRpZmZlciBvbiB2YXJpb3VzIG9wZXJhdGluZyBzeXN0ZW1zLgorc3RydWN0IEdyZWdv
cmlhbkRhdGVUaW1lIDogTm9uY29weWFibGUgeworICAgIEdyZWdvcmlhbkRhdGVUaW1lKCkKKyAg
ICAgICAgOiBzZWNvbmQoMCkKKyAgICAgICAgLCBtaW51dGUoMCkKKyAgICAgICAgLCBob3VyKDAp
CisgICAgICAgICwgd2Vla0RheSgwKQorICAgICAgICAsIG1vbnRoRGF5KDApCisgICAgICAgICwg
eWVhckRheSgwKQorICAgICAgICAsIG1vbnRoKDApCisgICAgICAgICwgeWVhcigwKQorICAgICAg
ICAsIGlzRFNUKDApCisgICAgICAgICwgdXRjT2Zmc2V0KDApCisgICAgICAgICwgdGltZVpvbmUo
MCkKKyAgICB7CisgICAgfQorCisgICAgfkdyZWdvcmlhbkRhdGVUaW1lKCkKKyAgICB7CisgICAg
ICAgIGRlbGV0ZSBbXSB0aW1lWm9uZTsKKyAgICB9CisKKyAgICBHcmVnb3JpYW5EYXRlVGltZShj
b25zdCB0bSYgaW5UbSkKKyAgICAgICAgOiBzZWNvbmQoaW5UbS50bV9zZWMpCisgICAgICAgICwg
bWludXRlKGluVG0udG1fbWluKQorICAgICAgICAsIGhvdXIoaW5UbS50bV9ob3VyKQorICAgICAg
ICAsIHdlZWtEYXkoaW5UbS50bV93ZGF5KQorICAgICAgICAsIG1vbnRoRGF5KGluVG0udG1fbWRh
eSkKKyAgICAgICAgLCB5ZWFyRGF5KGluVG0udG1feWRheSkKKyAgICAgICAgLCBtb250aChpblRt
LnRtX21vbikKKyAgICAgICAgLCB5ZWFyKGluVG0udG1feWVhcikKKyAgICAgICAgLCBpc0RTVChp
blRtLnRtX2lzZHN0KQorICAgIHsKKyNpZiAhUExBVEZPUk0oV0lOX09TKSAmJiAhUExBVEZPUk0o
U09MQVJJUykgJiYgIUNPTVBJTEVSKFJWQ1QpCisgICAgICAgIHV0Y09mZnNldCA9IHN0YXRpY19j
YXN0PGludD4oaW5UbS50bV9nbXRvZmYpOworCisgICAgICAgIGludCBpblpvbmVTaXplID0gc3Ry
bGVuKGluVG0udG1fem9uZSkgKyAxOworICAgICAgICB0aW1lWm9uZSA9IG5ldyBjaGFyW2luWm9u
ZVNpemVdOworICAgICAgICBzdHJuY3B5KHRpbWVab25lLCBpblRtLnRtX3pvbmUsIGluWm9uZVNp
emUpOworI2Vsc2UKKyAgICAgICAgdXRjT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8aW50PihnZXRVVENP
ZmZzZXQoKSAvIG1zUGVyU2Vjb25kICsgKGlzRFNUID8gc2Vjb25kc1BlckhvdXIgOiAwKSk7Cisg
ICAgICAgIHRpbWVab25lID0gMDsKKyNlbmRpZgorICAgIH0KKworICAgIG9wZXJhdG9yIHRtKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHRtIHJldDsKKyAgICAgICAgbWVtc2V0KCZyZXQsIDAsIHNp
emVvZihyZXQpKTsKKworICAgICAgICByZXQudG1fc2VjICAgPSAgc2Vjb25kOworICAgICAgICBy
ZXQudG1fbWluICAgPSAgbWludXRlOworICAgICAgICByZXQudG1faG91ciAgPSAgaG91cjsKKyAg
ICAgICAgcmV0LnRtX3dkYXkgID0gIHdlZWtEYXk7CisgICAgICAgIHJldC50bV9tZGF5ICA9ICBt
b250aERheTsKKyAgICAgICAgcmV0LnRtX3lkYXkgID0gIHllYXJEYXk7CisgICAgICAgIHJldC50
bV9tb24gICA9ICBtb250aDsKKyAgICAgICAgcmV0LnRtX3llYXIgID0gIHllYXI7CisgICAgICAg
IHJldC50bV9pc2RzdCA9ICBpc0RTVDsKKworI2lmICFQTEFURk9STShXSU5fT1MpICYmICFQTEFU
Rk9STShTT0xBUklTKSAmJiAhQ09NUElMRVIoUlZDVCkKKyAgICAgICAgcmV0LnRtX2dtdG9mZiA9
IHN0YXRpY19jYXN0PGxvbmc+KHV0Y09mZnNldCk7CisgICAgICAgIHJldC50bV96b25lID0gdGlt
ZVpvbmU7CisjZW5kaWYKKworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHZvaWQg
Y29weUZyb20oY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmIHJocykKKyAgICB7CisgICAgICAgIHNl
Y29uZCA9IHJocy5zZWNvbmQ7CisgICAgICAgIG1pbnV0ZSA9IHJocy5taW51dGU7CisgICAgICAg
IGhvdXIgPSByaHMuaG91cjsKKyAgICAgICAgd2Vla0RheSA9IHJocy53ZWVrRGF5OworICAgICAg
ICBtb250aERheSA9IHJocy5tb250aERheTsKKyAgICAgICAgeWVhckRheSA9IHJocy55ZWFyRGF5
OworICAgICAgICBtb250aCA9IHJocy5tb250aDsKKyAgICAgICAgeWVhciA9IHJocy55ZWFyOwor
ICAgICAgICBpc0RTVCA9IHJocy5pc0RTVDsKKyAgICAgICAgdXRjT2Zmc2V0ID0gcmhzLnV0Y09m
ZnNldDsKKyAgICAgICAgaWYgKHJocy50aW1lWm9uZSkgeworICAgICAgICAgICAgaW50IGluWm9u
ZVNpemUgPSBzdHJsZW4ocmhzLnRpbWVab25lKSArIDE7CisgICAgICAgICAgICB0aW1lWm9uZSA9
IG5ldyBjaGFyW2luWm9uZVNpemVdOworICAgICAgICAgICAgc3RybmNweSh0aW1lWm9uZSwgcmhz
LnRpbWVab25lLCBpblpvbmVTaXplKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aW1l
Wm9uZSA9IDA7CisgICAgfQorCisgICAgaW50IHNlY29uZDsKKyAgICBpbnQgbWludXRlOworICAg
IGludCBob3VyOworICAgIGludCB3ZWVrRGF5OworICAgIGludCBtb250aERheTsKKyAgICBpbnQg
eWVhckRheTsKKyAgICBpbnQgbW9udGg7CisgICAgaW50IHllYXI7CisgICAgaW50IGlzRFNUOwor
ICAgIGludCB1dGNPZmZzZXQ7CisgICAgY2hhciogdGltZVpvbmU7Cit9OworCitzdGF0aWMgaW5s
aW5lIGludCBnbXRvZmZzZXQoY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmIHQpCit7CisgICAgcmV0
dXJuIHQudXRjT2Zmc2V0OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIERh
dGVFeHRyYXNfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA2ZmNiNjE0Li43NDQ0ZWRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDA5LTA2LTA2ICBE
aW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI2MjM4CisgICAgICAgIEFkZCBwYXJzZURhdGUgaGVscGVyIHRvIEhU
VFBQYXJzZXJzLCB1c2luZyBXVEY6OnBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3Rl
cnMuCisKKyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHkgYWRkZWQsIG5vIG5ldyB0ZXN0cyBu
ZWVkZWQuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0RhdGVNYXRoLmg6
IFJlbW92ZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0RhdGVFeHRyYXMuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZURhdGUpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL0hUVFBQYXJzZXJzLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXNwb25zZUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEYXRlVmFsdWVJ
bkhlYWRlcik6IENoYW5nZWQgdG8gdXNlIHRoZSBuZXcgaGVscGVyLgorCiAyMDA5LTA2LTA1ICBG
dW1pdG9zaGkgVWthaSAgPHVrYWlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
aW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvRGF0ZU1hdGguaCBiL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9EYXRl
TWF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTM1NzQyLi4wMDAwMDAwCi0t
LSBhL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9EYXRlTWF0aC5oCisrKyAvZGV2
L251bGwKQEAgLTEsNCArMCwwIEBACi0jaWZuZGVmIFdlYkNvcmVfRldEX0RhdGVNYXRoX2gKLSNk
ZWZpbmUgV2ViQ29yZV9GV0RfRGF0ZU1hdGhfaAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Rh
dGVNYXRoLmg+Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL0RhdGVFeHRyYXMuaCBiL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0RhdGVFeHRy
YXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTNiY2U4Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvRGF0ZUV4dHJhcy5oCkBA
IC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9EYXRlRXh0cmFzX2gKKyNkZWZpbmUg
V2ViQ29yZV9GV0RfRGF0ZUV4dHJhc19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRGF0ZUV4
dHJhcy5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRU
UFBhcnNlcnMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcApp
bmRleCBhZDY1ZGZlLi44NTAzYWIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvSFRUUFBhcnNlcnMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFy
c2Vycy5jcHAKQEAgLTMxLDcgKzMxLDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSFRUUFBhcnNlcnMuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRlRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTAzLDYgKzEwNywxMSBAQCBi
b29sIHBhcnNlSFRUUFJlZnJlc2goY29uc3QgU3RyaW5nJiByZWZyZXNoLCBib29sIGZyb21IdHRw
RXF1aXZNZXRhLCBkb3VibGUmIGRlbAogICAgIH0KIH0KIAorZG91YmxlIHBhcnNlRGF0ZShjb25z
dCBTdHJpbmcmIHZhbHVlKQoreworICAgIHJldHVybiBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0
ZWRDaGFyYWN0ZXJzKHZhbHVlLnV0ZjgoKS5kYXRhKCkpOworfQorCiBTdHJpbmcgZmlsZW5hbWVG
cm9tSFRUUENvbnRlbnREaXNwb3NpdGlvbihjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIFZl
Y3RvcjxTdHJpbmc+IGtleVZhbHVlUGFpcnM7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvSFRUUFBhcnNlcnMuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFy
c2Vycy5oCmluZGV4IDI4YTljZTkuLjA2NDhhZWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9I
VFRQUGFyc2Vycy5oCkBAIC0zNCw2ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBTdHJpbmc7CiAKICAgICBib29sIHBhcnNlSFRUUFJlZnJlc2goY29uc3QgU3RyaW5nJiBy
ZWZyZXNoLCBib29sIGZyb21IdHRwRXF1aXZNZXRhLCBkb3VibGUmIGRlbGF5LCBTdHJpbmcmIHVy
bCk7CisgICAgZG91YmxlIHBhcnNlRGF0ZShjb25zdCBTdHJpbmcmKTsKICAgICBTdHJpbmcgZmls
ZW5hbWVGcm9tSFRUUENvbnRlbnREaXNwb3NpdGlvbihjb25zdCBTdHJpbmcmKTsgCiAgICAgU3Ry
aW5nIGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29uc3QgU3RyaW5nJik7CiAgICAgU3Ry
aW5nIGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb25zdCBTdHJpbmcmKTsgCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAppbmRleCAz
Zjg5MTdmLi45NjU3NTllIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXNwb25zZUJhc2UuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlc3BvbnNlQmFzZS5jcHAKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIgogCisjaW5jbHVkZSAiSFRUUFBh
cnNlcnMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSA8cnVudGlt
ZS9EYXRlTWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtMzMxLDcg
KzMzMSw3IEBAIHN0YXRpYyBkb3VibGUgcGFyc2VEYXRlVmFsdWVJbkhlYWRlcihjb25zdCBIVFRQ
SGVhZGVyTWFwJiBoZWFkZXJzLCBjb25zdCBBdG9taWNTCiAgICAgLy8gU3VuLCAwNiBOb3YgMTk5
NCAwODo0OTozNyBHTVQgIDsgUkZDIDgyMiwgdXBkYXRlZCBieSBSRkMgMTEyMwogICAgIC8vIFN1
bmRheSwgMDYtTm92LTk0IDA4OjQ5OjM3IEdNVCA7IFJGQyA4NTAsIG9ic29sZXRlZCBieSBSRkMg
MTAzNgogICAgIC8vIFN1biBOb3YgIDYgMDg6NDk6MzcgMTk5NCAgICAgICA7IEFOU0kgQydzIGFz
Y3RpbWUoKSBmb3JtYXQKLSAgICBkb3VibGUgZGF0ZUluTWlsbGlzZWNvbmRzID0gSlNDOjpwYXJz
ZURhdGUoaGVhZGVyVmFsdWUpOworICAgIGRvdWJsZSBkYXRlSW5NaWxsaXNlY29uZHMgPSBwYXJz
ZURhdGUoaGVhZGVyVmFsdWUpOwogICAgIGlmICghaXNmaW5pdGUoZGF0ZUluTWlsbGlzZWNvbmRz
KSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7CiAgICAgcmV0dXJuIGRhdGVJbk1pbGxpc2Vjb25kcyAvIDEwMDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31058</attachid>
            <date>2009-06-08 13:20:14 -0700</date>
            <delta_ts>2009-06-08 15:31:21 -0700</delta_ts>
            <desc>Move DateMath to WTF namespace, v2.</desc>
            <filename>Move-DateMath-to-WTF-namespace-v1.patch</filename>
            <type>text/plain</type>
            <size>171611</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ0NTAzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMDktMDYtMDggIERpbWl0cmkg
R2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjYyMzgKKyAgICAgICAgTW92ZSBtb3N0IG9mIHJ1bnRpbWUvRGF0ZU1hdGggZnVu
Y3Rpb25zIHRvIHd0Zi9EYXRlTWF0aCwgYW5kIHNwbGl0IG9mZiBjb252ZXJzaW9uLXJlbGF0ZWQK
KyAgICAgICAgaGVscGVycyB0byBEYXRlQ29udmVyc2lvbi4KKworICAgICAgICAqIEFsbEluT25l
RmlsZS5jcHA6IENoYW5nZWQgRGF0ZU1hdGgtPkRhdGVDb252ZXJzaW9uLgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOiBEaXR0byBhbmQgYWRkZWQgRGF0ZU1hdGguCisgICAgICAgICogSmF2YVNj
cmlwdENvcmUuZXhwOiBEaXR0by4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5wcmk6IERpdHRv
LgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9X
VEYvV1RGLnZjcHJvajogQWRkZWQgRGF0ZU1hdGguCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogSmF2YVNjcmlwdENv
cmVTb3VyY2VzLmJrbDogRGl0dG8uCisgICAgICAgICogcGNyZS9wY3JlX2V4ZWMuY3BwOiBDaGFu
Z2VkIHRvIHVzZSBEYXRlTWF0aC4KKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlTm9kZS5jcHA6
CisgICAgICAgIChKU0M6OmdldENvdW50KTogQ2hhbmdlZCB0byB1c2UgRGF0ZUNvbnZlcnNpb24u
CisgICAgICAgICogcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwOiBEaXR0by4KKyAgICAgICAg
KiBydW50aW1lL0RhdGVDb252ZXJzaW9uLmNwcDogQ29waWVkIGZyb20gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlTWF0aC5jcHAuCisgICAgICAgIChKU0M6OnBhcnNlRGF0ZSk6IFJlZmFjdG9y
ZWQgdG8gdXNlIG51bGwtdGVybWluYXRlZCBjaGFyYWN0ZXJzIGFzIGlucHV0LgorICAgICAgICAq
IHJ1bnRpbWUvRGF0ZUNvbnZlcnNpb24uaDogQ29waWVkIGZyb20gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlTWF0aC5oLgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcDogQ2hh
bmdlZCB0byB1c2Ugd3RmL0RhdGVNYXRoLgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUluc3RhbmNl
Lmg6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZU1hdGguY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHJ1bnRpbWUvRGF0ZU1hdGguaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0Rh
dGVQcm90b3R5cGUuY3BwOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0luaXRpYWxpemVUaHJl
YWRpbmcuY3BwOiBEaXR0by4KKyAgICAgICAgKiB3dGYvRGF0ZU1hdGguY3BwOiBDb3BpZWQgZnJv
bSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVNYXRoLmNwcC4KKyAgICAgICAgKiB3dGYvRGF0
ZU1hdGguaDogQ29waWVkIGZyb20gSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlTWF0aC5oLgor
CiAyMDA5LTA2LTA4ICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL0FsbEluT25lRmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQWxs
SW5PbmVGaWxlLmNwcAkocmV2aXNpb24gNDQ1MDEpCisrKyBKYXZhU2NyaXB0Q29yZS9BbGxJbk9u
ZUZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAicnVu
dGltZS9Db2xsZWN0b3IuY3BwIgogI2luY2x1ZGUgInJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMu
Y3BwIgogI2luY2x1ZGUgInJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcCIKLSNpbmNsdWRlICJy
dW50aW1lL0RhdGVNYXRoLmNwcCIKKyNpbmNsdWRlICJydW50aW1lL0RhdGVDb252ZXJzaW9uLmNw
cCIKICNpbmNsdWRlICJydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwIgogI2luY2x1ZGUgInJ1bnRp
bWUvRGF0ZUluc3RhbmNlLmNwcCIKICNpbmNsdWRlICJ3dGYvZHRvYS5jcHAiCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDQ1MDEpCisrKyBKYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMzY4LDEwICszNjgsMTAgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgg
XAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcCBcCiAJSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaCBcCisJSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlQ29udmVyc2lvbi5jcHAgXAorCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNv
bnZlcnNpb24uaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuY3BwIFwK
IAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oIFwKLQlKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVNYXRoLmNwcCBcCi0JSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlTWF0
aC5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwIFwKIAlKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FcnJvci5jcHAgXApAQCAtNDc3LDYgKzQ3Nyw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJj
ZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHJhY2luZy5oIFwKIAlKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJp
bmcuaCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcCBcCisJSmF2YVNjcmlwdENv
cmUvd3RmL0RhdGVNYXRoLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9GYXN0QWxsb2NCYXNlLmgg
XAogCUphdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUv
d3RmL0Zhc3RNYWxsb2MuaCBcCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5l
eHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZp
c2lvbiA0NDUwMSkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2lu
ZyBjb3B5KQpAQCAtMjc1LDcgKzI3NSw2IEBAIF9fWk4zSlNDOVN0cnVjdHVyZTQwYWRkUHJvcGVy
dHlUcmFuc2l0aW8KIF9fWk4zSlNDOVN0cnVjdHVyZUMxRU5TXzdKU1ZhbHVlRVJLTlNfOFR5cGVJ
bmZvRQogX19aTjNKU0M5U3RydWN0dXJlRDFFdgogX19aTjNKU0M5Y29uc3RydWN0RVBOU185RXhl
Y1N0YXRlRU5TXzdKU1ZhbHVlRU5TXzEzQ29uc3RydWN0VHlwZUVSS05TXzEzQ29uc3RydWN0RGF0
YUVSS05TXzdBcmdMaXN0RQotX19aTjNKU0M5cGFyc2VEYXRlRVJLTlNfN1VTdHJpbmdFCiBfX1pO
M0pTQ2VxRVJLTlNfN1VTdHJpbmdFUEtjCiBfX1pOM0pTQ2d0RVJLTlNfN1VTdHJpbmdFUzJfCiBf
X1pOM0pTQ2x0RVJLTlNfN1VTdHJpbmdFUzJfCkBAIC0yODksNiArMjg4LDcgQEAgX19aTjNXVEYx
MmRldGFjaFRocmVhZEVqCiBfX1pOM1dURjEyaXNNYWluVGhyZWFkRXYKIF9fWk4zV1RGMTJyYW5k
b21OdW1iZXJFdgogX19aTjNXVEYxM2N1cnJlbnRUaHJlYWRFdgorX19aTjNXVEYzN3BhcnNlRGF0
ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnNFUEtjCiBfX1pOM1dURjEzdHJ5RmFzdENhbGxv
Y0VtbQogX19aTjNXVEYxNVRocmVhZENvbmRpdGlvbjR3YWl0RVJOU181TXV0ZXhFCiBfX1pOM1dU
RjE1VGhyZWFkQ29uZGl0aW9uNnNpZ25hbEV2CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
cHJpCShyZXZpc2lvbiA0NDUwMSkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBy
aQkod29ya2luZyBjb3B5KQpAQCAtMTUyLDggKzE1Miw4IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1
bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAgXAogICAgIHd0Zi9DdXJyZW50VGltZS5jcHAgXAogICAg
IHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcCBcCisgICAgcnVudGltZS9EYXRlQ29udmVyc2lv
bi5jcHAgXAogICAgIHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcCBcCi0gICAgcnVudGltZS9EYXRl
TWF0aC5jcHAgXAogICAgIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAgXAogICAgIGRlYnVnZ2Vy
L0RlYnVnZ2VyLmNwcCBcCiAgICAgZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwIFwKQEAg
LTIxOCw2ICsyMTgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwcm9maWxlci9Qcm9maWxlTm9kZS5j
cHAgXAogICAgIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcCBcCiAgICAgcHJvZmlsZXIvVHJlZVByb2Zp
bGUuY3BwIFwKKyAgICB3dGYvRGF0ZU1hdGguY3BwIFwKICAgICB3dGYvRmFzdE1hbGxvYy5jcHAg
XAogICAgIHd0Zi9UaHJlYWRpbmcuY3BwIFwKICAgICB3dGYvcXQvTWFpblRocmVhZFF0LmNwcApJ
bmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0
NDUwMSkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlU291cmNlcy5ia2wJKHdvcmtp
bmcgY29weSkKQEAgLTg3LDggKzg3LDggQEAgU291cmNlIGZpbGVzIGZvciBKU0NvcmUuCiAgICAg
ICAgIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwCiAgICAgICAgIHJ1bnRpbWUvQ29uc3Ry
dWN0RGF0YS5jcHAKICAgICAgICAgcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCisgICAgICAg
IHJ1bnRpbWUvRGF0ZUNvbnZlcnNpb24uY3BwCiAgICAgICAgIHJ1bnRpbWUvRGF0ZUluc3RhbmNl
LmNwcAotICAgICAgICBydW50aW1lL0RhdGVNYXRoLmNwcAogICAgICAgICBydW50aW1lL0RhdGVQ
cm90b3R5cGUuY3BwCiAgICAgICAgIHJ1bnRpbWUvRXJyb3IuY3BwCiAgICAgICAgIHJ1bnRpbWUv
RXJyb3JDb25zdHJ1Y3Rvci5jcHAKQEAgLTE3MSw2ICsxNzEsNyBAQCBTb3VyY2UgZmlsZXMgZm9y
IEpTQ29yZS4KICAgICAgICAgd3RmL0Fzc2VydGlvbnMuY3BwCiAgICAgICAgIHd0Zi9CeXRlQXJy
YXkuY3BwCiAgICAgICAgIHd0Zi9DdXJyZW50VGltZS5jcHAKKyAgICAgICAgd3RmL0RhdGVNYXRo
LmNwcAogICAgICAgICB3dGYvRmFzdE1hbGxvYy5jcHAKICAgICAgICAgd3RmL0hhc2hUYWJsZS5j
cHAKICAgICAgICAgd3RmL01haW5UaHJlYWQuY3BwCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDQ0NTAxKQorKysgSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNTk2LDExICs1OTYsMTEgQEAKIAkJCQk+DQog
CQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxE
YXRlTWF0aC5jcHAiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxEYXRlQ29udmVy
c2lvbi5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlwuLlxydW50aW1lXERhdGVNYXRoLmgiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
cnVudGltZVxEYXRlQ29udmVyc2lvbi5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxl
DQpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9X
VEYvV1RGLnZjcHJvagkocmV2aXNpb24gNDQ1MDEpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw2ICsy
MzMsMTQgQEAKIAkJCT4NCiAJCTwvRmlsZT4NCiAJCTxGaWxlDQorCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlx3dGZcRGF0ZU1hdGguY3BwIg0KKwkJCT4NCisJCTwvRmlsZT4NCisJCTxGaWxlDQorCQkJ
UmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcRGF0ZU1hdGguaCINCisJCQk+DQorCQk8L0ZpbGU+DQor
CQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXERlcXVlLmgiDQogCQkJPg0KIAkJ
PC9GaWxlPg0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDQ1MDEpCisrKyBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAsNiArMTAwLDkgQEAKIAkJMTgwQjlCRkUwRjE2RTk0RDAwOUJEQkM1IC8q
IEN1cnJlbnRUaW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE4MEI5QUVGMEYxNkM1NjkwMDlCREJDNSAvKiBDdXJyZW50VGltZS5jcHAgKi87IH07
CiAJCTFDNjE1MTZDMEVCQUM3QTAwMDMxMzc2RiAvKiBQcm9maWxlclNlcnZlci5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNjE1MTZBMEVCQUM3QTAw
MDMxMzc2RiAvKiBQcm9maWxlclNlcnZlci5tbSAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxB
R1MgPSAiLWZuby1zdHJpY3QtYWxpYXNpbmciOyB9OyB9OwogCQkxQzYxNTE2RDBFQkFDN0EwMDAz
MTM3NkYgLyogUHJvZmlsZXJTZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDNjE1MTZCMEVCQUM3QTAwMDMxMzc2RiAvKiBQcm9maWxlclNlcnZl
ci5oICovOyB9OworCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZlcnNpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyMTIwMjI5
MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovOyB9OworCQk0MTM1OUNGNjBG
REQ4OUNCMDAyMDYxODAgLyogRGF0ZU1hdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDEzNTlDRjQwRkREODlDQjAwMjA2MTgwIC8qIERhdGVNYXRo
LmNwcCAqLzsgfTsKKwkJNDEzNTlDRjcwRkREODlDQjAwMjA2MTgwIC8qIERhdGVNYXRoLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTM1OUNGNTBGREQ4
OUNCMDAyMDYxODAgLyogRGF0ZU1hdGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk0NDA5RDg0NzBGQUY4MEEyMDA1MjNCODcgLyogT3duUHRyQ29t
bW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDBC
N0FFRDBGQUY3RkNCMDA3MzMyM0UgLyogT3duUHRyQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDRERDQ4NTMwRkFFQTg1MDAwRDZCNEVC
IC8qIFBhc3NPd25QdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ0REQ0ODUyMEZBRUE4NTAwMEQ2QjRFQiAvKiBQYXNzT3duUHRyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUQ1MzcyNkYwRTFDNTQ4
ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVENTM3MjZFMEUxQzU0ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggKi87IH07
CkBAIC0yMTcsNyArMjIwLDYgQEAKIAkJQkMxOEMzRjQwRTE2RjVDRDAwQjM0NDYwIC8qIENvbXBs
ZXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1
QkIyQkM1MDMwRjc3MjEwMUZDRkUxRCAvKiBDb21wbGV0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEMzRjUwRTE2RjVDRDAwQjM0NDYw
IC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjY4RUJCOEMwMjU1RDRDNjAxRkY2MEY3IC8qIGNvbmZpZy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDM0Y2MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBDb25zdHJ1Y3REYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDMThDM0Y5
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVNYXRo
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMx
OEMzRkEwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg1OTAyNTU1OTdEMDFGRjYwRjcgLyogRGVi
dWdnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXJDYWxsRnJhbWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODBEQjlCMEREQzIyN0Yw
MDNDRkRGMiAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDM0ZDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZXF1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4NjEx
MUQwQ0M4MjQ4MzAwODE0MTJCIC8qIERlcXVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU0OSw2ICs1NTEsOCBAQAogCQkxQzkwNTE0NTBCQTlF
OEE3MDA4MUU5RDAgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBh
dGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FBOEI0
QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKYXZhU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFD
QUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0Q29yZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0MTM1OUNGNDBGREQ4OUNCMDAyMDYxODAgLyogRGF0ZU1hdGguY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0ZU1hdGguY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0MTM1OUNGNTBGREQ4OUNCMDAyMDYxODAgLyogRGF0ZU1hdGgu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZU1hdGguaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQwQjdBRUQwRkFGN0ZDQjAwNzMzMjNFIC8qIE93blB0ckNv
bW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPd25QdHJDb21tb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ5MDk3RUUwRjhGODFCNTAwNzZBMzI3IC8q
IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9
IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
NERENDg1MjBGQUVBODUwMDBENkI0RUIgLyogUGFzc093blB0ci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQYXNzT3duUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC04MjMsOCArODI3LDggQEAKIAkJQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBU
YWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKdW1wVGFibGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4
NDggLyogSnVtcFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEp1bXBU
YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMEEyNzIzRjBFNTA5RjFFMDBF
OTZFMTUgLyogTm90Rm91bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90
Rm91bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDIxMjAyMjgwQUQ0MzEwQzAw
RUQ3OUI2IC8qIERhdGVNYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEYXRlTWF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQyMTIwMjI5
MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlTWF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGF0ZU1hdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDIxMjAy
MjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTExRDUxNzUwQjJFNzk4RDAwNTZDMTg4IC8q
IFN0cmluZ0V4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdF
eHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNEE4RjUwRTU1NTc3NTAw
MzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE9wYXF1ZUpTU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjRB
OEY2MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGFxdWVKU1N0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMTY4LDYgKzExNzIsOCBAQAogCQkJCTBCREZGQUQ0MEZDNjE3MTAw
MEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLywKIAkJCQkxODBCOUFFRjBGMTZD
NTY5MDA5QkRCQzUgLyogQ3VycmVudFRpbWUuY3BwICovLAogCQkJCTE4MEI5QUYwMEYxNkM1Njkw
MDlCREJDNSAvKiBDdXJyZW50VGltZS5oICovLAorCQkJCTQxMzU5Q0Y0MEZERDg5Q0IwMDIwNjE4
MCAvKiBEYXRlTWF0aC5jcHAgKi8sCisJCQkJNDEzNTlDRjUwRkREODlDQjAwMjA2MTgwIC8qIERh
dGVNYXRoLmggKi8sCiAJCQkJNTE4NjExMUQwQ0M4MjQ4MzAwODE0MTJCIC8qIERlcXVlLmggKi8s
CiAJCQkJOTM4QzRGNkIwQ0EwNkJDRTAwRDkzMTBBIC8qIERpc2FsbG93Q1R5cGUuaCAqLywKIAkJ
CQk2NTFGNjQxMjAzOUQ1QjVGMDA3ODM5NUMgLyogZHRvYS5jcHAgKi8sCkBAIC0xMzIzLDggKzEz
MjksOCBAQAogCQkJCUJDRDIwMzQ2MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3Iu
aCAqLywKIAkJCQlCQzExNjYwMDBFMTk5N0IxMDA4MDY2REQgLyogRGF0ZUluc3RhbmNlLmNwcCAq
LywKIAkJCQlCQzExNjYwMTBFMTk5N0IxMDA4MDY2REQgLyogRGF0ZUluc3RhbmNlLmggKi8sCi0J
CQkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVNYXRoLmNwcCAqLywKLQkJCQlEMjEy
MDIyOTBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZU1hdGguaCAqLywKKwkJCQlEMjEyMDIyODBBRDQz
MTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3BwICovLAorCQkJCUQyMTIwMjI5MEFENDMx
MEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovLAogCQkJCUJDRDIwMzQ3MEUxNzEzNUUw
MDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmNwcCAqLywKIAkJCQlCQ0QyMDM0ODBFMTcxMzVFMDAy
QzdFODIgLyogRGF0ZVByb3RvdHlwZS5oICovLAogCQkJCUJDMzM3QkVBMEUxQjAwQ0IwMDc2OTE4
QSAvKiBFcnJvci5jcHAgKi8sCkBAIC0xNjMwLDggKzE2MzYsOSBAQAogCQkJCUJDMThDM0Y2MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBDb25zdHJ1Y3REYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxODBC
OUIwODBGMTZEOTRGMDA5QkRCQzUgLyogQ3VycmVudFRpbWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxMTY2MDIwRTE5OTdCNDAwODA2NkREIC8qIERhdGVJbnN0YW5j
ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMxOEMzRjkwRTE2RjVDRDAwQjM0NDYwIC8qIERhdGVN
YXRoLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MTM1OUNGNzBGREQ4OUNCMDAyMDYxODAgLyogRGF0
ZU1hdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRDMEUxNzEzNUUwMDJDN0U4MiAvKiBE
YXRlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDNFODBFMTcxOEY0MDAyQzdF
ODIgLyogRGF0ZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0ZBMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBEZWJ1Z2dlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTI5LDYgKzIx
MzYsNyBAQAogCQkJCUUxQTg2MkQ2MEQ3RjJCNUMwMDFFQzZBQSAvKiBDb2xsYXRvckRlZmF1bHQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBODYyQTkwRDdFQkI3NjAwMUVDNkFBIC8qIENvbGxh
dG9ySUNVLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE4MEI5QkZFMEYxNkU5NEQwMDlCREJDNSAv
KiBDdXJyZW50VGltZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MTM1OUNGNjBGREQ4OUNCMDAy
MDYxODAgLyogRGF0ZU1hdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERG
NzAwNjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MjlEODc4MEVEMjFBQ0QwMEI4OTYxOSAvKiBFeGNlcHRpb25IZWxwZXJzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2V4ZWMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9leGVjLmNwcAkocmV2
aXNpb24gNDQ1MDEpCisrKyBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfZXhlYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgdGhlIEphdmFTY3JpcHQgc3BlY2lmaWNhdGlvbi4g
VGhlcmUgYXJlIAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFJFR0VYUF9ISVNUT0dS
QU0KLSNpbmNsdWRlIDxwYXJzZXIvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvRGF0ZU1hdGgu
aD4KICNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KICNlbmRpZgogCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwCShyZXZpc2lvbiA0NDUwMSkKKysrIEphdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
OSArMjksOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlByb2ZpbGVOb2RlLmgi
CiAKLSNpbmNsdWRlICJEYXRlTWF0aC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyLmgiCiAjaW5jbHVk
ZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KIAogI2lmIFBMQVRGT1JNKFdJ
Tl9PUykKICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBkb3Vi
bGUgZ2V0Q291bnQoKQogICAgIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCZjb3VudGVyKTsKICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb3VudGVyLlF1YWRQYXJ0KSAvIGZyZXF1ZW5j
eS5RdWFkUGFydDsKICNlbHNlCi0gICAgcmV0dXJuIGdldEN1cnJlbnRVVENUaW1lV2l0aE1pY3Jv
c2Vjb25kcygpOworICAgIHJldHVybiBXVEY6OmdldEN1cnJlbnRVVENUaW1lV2l0aE1pY3Jvc2Vj
b25kcygpOwogI2VuZGlmCiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDQ0NTAxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGF0ZUNvbnN0cnVjdG9yLmgiCiAKKyNpbmNs
dWRlICJEYXRlQ29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgotI2luY2x1
ZGUgIkRhdGVNYXRoLmgiCiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIlByb3RvdHlwZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2lu
Y2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgogCiAjaWYgSEFWRShTWVNfVElNRV9IKQpAQCAtNDIsNiArNDMsOCBAQAog
I2luY2x1ZGUgPHN5cy90aW1lYi5oPgogI2VuZGlmCiAKK3VzaW5nIFdURjo6R3JlZ29yaWFuRGF0
ZVRpbWU7CisKIG5hbWVzcGFjZSBKU0MgewogCiAvLyBUT0RPOiBNYWtlVGltZSAoMTUuOS4xMS4x
KSBldGMuID8KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnZlcnNpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnZlcnNpb24uY3Bw
CShyZXZpc2lvbiA0NDUwMSkJKGZyb20gSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlTWF0aC5j
cHA6NDQ1MDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb252ZXJzaW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5
OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBUaGUgT3Jp
Z2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29kZSwgcmVsZWFzZWQK
KyAqIE1hcmNoIDMxLCAxOTk4LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUg
T3JpZ2luYWwgQ29kZSBpcworICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24u
CisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJp
Z2h0IChDKSAxOTk4CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMg
b2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICogb2YgZWl0aGVyIHRo
ZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAorICogaHR0cDov
L3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9j
b3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zp
c2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9m
IHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNp
b24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28K
KyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJz
IHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5k
aWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBh
bmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMg
cmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJ
ZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5
IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEws
IHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRGF0ZU1hdGguaCIKKworI2luY2x1ZGUgIkpTTnVtYmVyQ2VsbC5oIgorI2luY2x1ZGUgPG1h
dGguaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8
d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgorCisjaWYgSEFWRShFUlJOT19IKQorI2luY2x1ZGUgPGVy
cm5vLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKERBUldJTikKKyNpbmNsdWRlIDxub3RpZnku
aD4KKyNlbmRpZgorCisjaWYgSEFWRShTWVNfVElNRV9IKQorI2luY2x1ZGUgPHN5cy90aW1lLmg+
CisjZW5kaWYKKworI2lmIEhBVkUoU1lTX1RJTUVCX0gpCisjaW5jbHVkZSA8c3lzL3RpbWViLmg+
CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIEpTQyB7CisKKy8q
IENvbnN0YW50cyAqLworCitzdGF0aWMgY29uc3QgZG91YmxlIG1pbnV0ZXNQZXJEYXkgPSAyNC4w
ICogNjAuMDsKK3N0YXRpYyBjb25zdCBkb3VibGUgc2Vjb25kc1BlckRheSA9IDI0LjAgKiA2MC4w
ICogNjAuMDsKK3N0YXRpYyBjb25zdCBkb3VibGUgc2Vjb25kc1BlclllYXIgPSAyNC4wICogNjAu
MCAqIDYwLjAgKiAzNjUuMDsKKworc3RhdGljIGNvbnN0IGRvdWJsZSB1c2VjUGVyU2VjID0gMTAw
MDAwMC4wOworCitzdGF0aWMgY29uc3QgZG91YmxlIG1heFVuaXhUaW1lID0gMjE0NTg1OTIwMC4w
OyAvLyAxMi8zMS8yMDM3CisKKy8vIERheSBvZiB5ZWFyIGZvciB0aGUgZmlyc3QgZGF5IG9mIGVh
Y2ggbW9udGgsIHdoZXJlIGluZGV4IDAgaXMgSmFudWFyeSwgYW5kIGRheSAwIGlzIEphbnVhcnkg
MS4KKy8vIEZpcnN0IGZvciBub24tbGVhcCB5ZWFycywgdGhlbiBmb3IgbGVhcCB5ZWFycy4KK3N0
YXRpYyBjb25zdCBpbnQgZmlyc3REYXlPZk1vbnRoWzJdWzEyXSA9IHsKKyAgICB7MCwgMzEsIDU5
LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzR9LAorICAgIHswLCAz
MSwgNjAsIDkxLCAxMjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwgMjc0LCAzMDUsIDMzNX0KK307CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBpc0xlYXBZZWFyKGludCB5ZWFyKQoreworICAgIGlmICh5ZWFy
ICUgNCAhPSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHllYXIgJSA0MDAgPT0g
MCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHllYXIgJSAxMDAgPT0gMCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGlu
dCBkYXlzSW5ZZWFyKGludCB5ZWFyKQoreworICAgIHJldHVybiAzNjUgKyBpc0xlYXBZZWFyKHll
YXIpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBkYXlzRnJvbTE5NzBUb1llYXIoaW50IHll
YXIpCit7CisgICAgLy8gVGhlIEdyZWdvcmlhbiBDYWxlbmRhciBydWxlcyBmb3IgbGVhcCB5ZWFy
czoKKyAgICAvLyBFdmVyeSBmb3VydGggeWVhciBpcyBhIGxlYXAgeWVhci4gIDIwMDQsIDIwMDgs
IGFuZCAyMDEyIGFyZSBsZWFwIHllYXJzLgorICAgIC8vIEhvd2V2ZXIsIGV2ZXJ5IGh1bmRyZWR0
aCB5ZWFyIGlzIG5vdCBhIGxlYXAgeWVhci4gIDE5MDAgYW5kIDIxMDAgYXJlIG5vdCBsZWFwIHll
YXJzLgorICAgIC8vIEV2ZXJ5IGZvdXIgaHVuZHJlZCB5ZWFycywgdGhlcmUncyBhIGxlYXAgeWVh
ciBhZnRlciBhbGwuICAyMDAwIGFuZCAyNDAwIGFyZSBsZWFwIHllYXJzLgorCisgICAgc3RhdGlj
IGNvbnN0IGludCBsZWFwRGF5c0JlZm9yZTE5NzFCeTRSdWxlID0gMTk3MCAvIDQ7CisgICAgc3Rh
dGljIGNvbnN0IGludCBleGNsdWRlZExlYXBEYXlzQmVmb3JlMTk3MUJ5MTAwUnVsZSA9IDE5NzAg
LyAxMDA7CisgICAgc3RhdGljIGNvbnN0IGludCBsZWFwRGF5c0JlZm9yZTE5NzFCeTQwMFJ1bGUg
PSAxOTcwIC8gNDAwOworCisgICAgY29uc3QgZG91YmxlIHllYXJNaW51c09uZSA9IHllYXIgLSAx
OworICAgIGNvbnN0IGRvdWJsZSB5ZWFyc1RvQWRkQnk0UnVsZSA9IGZsb29yKHllYXJNaW51c09u
ZSAvIDQuMCkgLSBsZWFwRGF5c0JlZm9yZTE5NzFCeTRSdWxlOworICAgIGNvbnN0IGRvdWJsZSB5
ZWFyc1RvRXhjbHVkZUJ5MTAwUnVsZSA9IGZsb29yKHllYXJNaW51c09uZSAvIDEwMC4wKSAtIGV4
Y2x1ZGVkTGVhcERheXNCZWZvcmUxOTcxQnkxMDBSdWxlOworICAgIGNvbnN0IGRvdWJsZSB5ZWFy
c1RvQWRkQnk0MDBSdWxlID0gZmxvb3IoeWVhck1pbnVzT25lIC8gNDAwLjApIC0gbGVhcERheXNC
ZWZvcmUxOTcxQnk0MDBSdWxlOworCisgICAgcmV0dXJuIDM2NS4wICogKHllYXIgLSAxOTcwKSAr
IHllYXJzVG9BZGRCeTRSdWxlIC0geWVhcnNUb0V4Y2x1ZGVCeTEwMFJ1bGUgKyB5ZWFyc1RvQWRk
Qnk0MDBSdWxlOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBtc1RvRGF5cyhkb3VibGUgbXMp
Cit7CisgICAgcmV0dXJuIGZsb29yKG1zIC8gbXNQZXJEYXkpOworfQorCitzdGF0aWMgaW5saW5l
IGludCBtc1RvWWVhcihkb3VibGUgbXMpCit7CisgICAgaW50IGFwcHJveFllYXIgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGZsb29yKG1zIC8gKG1zUGVyRGF5ICogMzY1LjI0MjUpKSArIDE5NzApOworICAg
IGRvdWJsZSBtc0Zyb21BcHByb3hZZWFyVG8xOTcwID0gbXNQZXJEYXkgKiBkYXlzRnJvbTE5NzBU
b1llYXIoYXBwcm94WWVhcik7CisgICAgaWYgKG1zRnJvbUFwcHJveFllYXJUbzE5NzAgPiBtcykK
KyAgICAgICAgcmV0dXJuIGFwcHJveFllYXIgLSAxOworICAgIGlmIChtc0Zyb21BcHByb3hZZWFy
VG8xOTcwICsgbXNQZXJEYXkgKiBkYXlzSW5ZZWFyKGFwcHJveFllYXIpIDw9IG1zKQorICAgICAg
ICByZXR1cm4gYXBwcm94WWVhciArIDE7CisgICAgcmV0dXJuIGFwcHJveFllYXI7Cit9CisKK3N0
YXRpYyBpbmxpbmUgaW50IGRheUluWWVhcihkb3VibGUgbXMsIGludCB5ZWFyKQoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1zVG9EYXlzKG1zKSAtIGRheXNGcm9tMTk3MFRvWWVhcih5
ZWFyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIG1zVG9NaWxsaXNlY29uZHMoZG91Ymxl
IG1zKQoreworICAgIGRvdWJsZSByZXN1bHQgPSBmbW9kKG1zLCBtc1BlckRheSk7CisgICAgaWYg
KHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCArPSBtc1BlckRheTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCisvLyAwOiBTdW5kYXksIDE6IE1vbmRheSwgZXRjLgorc3RhdGljIGlubGluZSBp
bnQgbXNUb1dlZWtEYXkoZG91YmxlIG1zKQoreworICAgIGludCB3ZCA9IChzdGF0aWNfY2FzdDxp
bnQ+KG1zVG9EYXlzKG1zKSkgKyA0KSAlIDc7CisgICAgaWYgKHdkIDwgMCkKKyAgICAgICAgd2Qg
Kz0gNzsKKyAgICByZXR1cm4gd2Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1zVG9TZWNvbmRz
KGRvdWJsZSBtcykKK3sKKyAgICBkb3VibGUgcmVzdWx0ID0gZm1vZChmbG9vcihtcyAvIG1zUGVy
U2Vjb25kKSwgc2Vjb25kc1Blck1pbnV0ZSk7CisgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAg
IHJlc3VsdCArPSBzZWNvbmRzUGVyTWludXRlOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1zVG9NaW51dGVzKGRvdWJsZSBtcykK
K3sKKyAgICBkb3VibGUgcmVzdWx0ID0gZm1vZChmbG9vcihtcyAvIG1zUGVyTWludXRlKSwgbWlu
dXRlc1BlckhvdXIpOworICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICByZXN1bHQgKz0gbWlu
dXRlc1BlckhvdXI7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocmVzdWx0KTsKK30KKwor
c3RhdGljIGlubGluZSBpbnQgbXNUb0hvdXJzKGRvdWJsZSBtcykKK3sKKyAgICBkb3VibGUgcmVz
dWx0ID0gZm1vZChmbG9vcihtcy9tc1BlckhvdXIpLCBob3Vyc1BlckRheSk7CisgICAgaWYgKHJl
c3VsdCA8IDApCisgICAgICAgIHJlc3VsdCArPSBob3Vyc1BlckRheTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50PihyZXN1bHQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtb250aEZyb21E
YXlJblllYXIoaW50IGRheUluWWVhciwgYm9vbCBsZWFwWWVhcikKK3sKKyAgICBjb25zdCBpbnQg
ZCA9IGRheUluWWVhcjsKKyAgICBpbnQgc3RlcDsKKworICAgIGlmIChkIDwgKHN0ZXAgPSAzMSkp
CisgICAgICAgIHJldHVybiAwOworICAgIHN0ZXAgKz0gKGxlYXBZZWFyID8gMjkgOiAyOCk7Cisg
ICAgaWYgKGQgPCBzdGVwKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoZCA8IChzdGVwICs9
IDMxKSkKKyAgICAgICAgcmV0dXJuIDI7CisgICAgaWYgKGQgPCAoc3RlcCArPSAzMCkpCisgICAg
ICAgIHJldHVybiAzOworICAgIGlmIChkIDwgKHN0ZXAgKz0gMzEpKQorICAgICAgICByZXR1cm4g
NDsKKyAgICBpZiAoZCA8IChzdGVwICs9IDMwKSkKKyAgICAgICAgcmV0dXJuIDU7CisgICAgaWYg
KGQgPCAoc3RlcCArPSAzMSkpCisgICAgICAgIHJldHVybiA2OworICAgIGlmIChkIDwgKHN0ZXAg
Kz0gMzEpKQorICAgICAgICByZXR1cm4gNzsKKyAgICBpZiAoZCA8IChzdGVwICs9IDMwKSkKKyAg
ICAgICAgcmV0dXJuIDg7CisgICAgaWYgKGQgPCAoc3RlcCArPSAzMSkpCisgICAgICAgIHJldHVy
biA5OworICAgIGlmIChkIDwgKHN0ZXAgKz0gMzApKQorICAgICAgICByZXR1cm4gMTA7CisgICAg
cmV0dXJuIDExOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tNb250aChpbnQgZGF5SW5Z
ZWFyLCBpbnQmIHN0YXJ0RGF5T2ZUaGlzTW9udGgsIGludCYgc3RhcnREYXlPZk5leHRNb250aCwg
aW50IGRheXNJblRoaXNNb250aCkKK3sKKyAgICBzdGFydERheU9mVGhpc01vbnRoID0gc3RhcnRE
YXlPZk5leHRNb250aDsKKyAgICBzdGFydERheU9mTmV4dE1vbnRoICs9IGRheXNJblRoaXNNb250
aDsKKyAgICByZXR1cm4gKGRheUluWWVhciA8PSBzdGFydERheU9mTmV4dE1vbnRoKTsKK30KKwor
c3RhdGljIGlubGluZSBpbnQgZGF5SW5Nb250aEZyb21EYXlJblllYXIoaW50IGRheUluWWVhciwg
Ym9vbCBsZWFwWWVhcikKK3sKKyAgICBjb25zdCBpbnQgZCA9IGRheUluWWVhcjsKKyAgICBpbnQg
c3RlcDsKKyAgICBpbnQgbmV4dCA9IDMwOworCisgICAgaWYgKGQgPD0gbmV4dCkKKyAgICAgICAg
cmV0dXJuIGQgKyAxOworICAgIGNvbnN0IGludCBkYXlzSW5GZWIgPSAobGVhcFllYXIgPyAyOSA6
IDI4KTsKKyAgICBpZiAoY2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCBkYXlzSW5GZWIpKQorICAg
ICAgICByZXR1cm4gZCAtIHN0ZXA7CisgICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwg
MzEpKQorICAgICAgICByZXR1cm4gZCAtIHN0ZXA7CisgICAgaWYgKGNoZWNrTW9udGgoZCwgc3Rl
cCwgbmV4dCwgMzApKQorICAgICAgICByZXR1cm4gZCAtIHN0ZXA7CisgICAgaWYgKGNoZWNrTW9u
dGgoZCwgc3RlcCwgbmV4dCwgMzEpKQorICAgICAgICByZXR1cm4gZCAtIHN0ZXA7CisgICAgaWYg
KGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzApKQorICAgICAgICByZXR1cm4gZCAtIHN0ZXA7
CisgICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzEpKQorICAgICAgICByZXR1cm4g
ZCAtIHN0ZXA7CisgICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzEpKQorICAgICAg
ICByZXR1cm4gZCAtIHN0ZXA7CisgICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzAp
KQorICAgICAgICByZXR1cm4gZCAtIHN0ZXA7CisgICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwg
bmV4dCwgMzEpKQorICAgICAgICByZXR1cm4gZCAtIHN0ZXA7CisgICAgaWYgKGNoZWNrTW9udGgo
ZCwgc3RlcCwgbmV4dCwgMzApKQorICAgICAgICByZXR1cm4gZCAtIHN0ZXA7CisgICAgc3RlcCA9
IG5leHQ7CisgICAgcmV0dXJuIGQgLSBzdGVwOworfQorCitzdGF0aWMgaW5saW5lIGludCBtb250
aFRvRGF5SW5ZZWFyKGludCBtb250aCwgYm9vbCBpc0xlYXBZZWFyKQoreworICAgIHJldHVybiBm
aXJzdERheU9mTW9udGhbaXNMZWFwWWVhcl1bbW9udGhdOworfQorCitzdGF0aWMgaW5saW5lIGRv
dWJsZSB0aW1lVG9NUyhkb3VibGUgaG91ciwgZG91YmxlIG1pbiwgZG91YmxlIHNlYywgZG91Ymxl
IG1zKQoreworICAgIHJldHVybiAoKChob3VyICogbWludXRlc1BlckhvdXIgKyBtaW4pICogc2Vj
b25kc1Blck1pbnV0ZSArIHNlYykgKiBtc1BlclNlY29uZCArIG1zKTsKK30KKworc3RhdGljIGlu
dCBkYXRlVG9EYXlJblllYXIoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSkKK3sKKyAgICB5
ZWFyICs9IG1vbnRoIC8gMTI7CisKKyAgICBtb250aCAlPSAxMjsKKyAgICBpZiAobW9udGggPCAw
KSB7CisgICAgICAgIG1vbnRoICs9IDEyOworICAgICAgICAtLXllYXI7CisgICAgfQorCisgICAg
aW50IHllYXJkYXkgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yKGRheXNGcm9tMTk3MFRvWWVhcih5
ZWFyKSkpOworICAgIGludCBtb250aGRheSA9IG1vbnRoVG9EYXlJblllYXIobW9udGgsIGlzTGVh
cFllYXIoeWVhcikpOworCisgICAgcmV0dXJuIHllYXJkYXkgKyBtb250aGRheSArIGRheSAtIDE7
Cit9CisKK2RvdWJsZSBnZXRDdXJyZW50VVRDVGltZSgpCit7CisgICAgcmV0dXJuIGZsb29yKGdl
dEN1cnJlbnRVVENUaW1lV2l0aE1pY3Jvc2Vjb25kcygpKTsKK30KKworLy8gUmV0dXJucyBjdXJy
ZW50IHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIDEgSmFuIDE5NzAuCitkb3VibGUgZ2V0Q3Vy
cmVudFVUQ1RpbWVXaXRoTWljcm9zZWNvbmRzKCkKK3sKKyAgICByZXR1cm4gY3VycmVudFRpbWUo
KSAqIDEwMDAuMDsgCit9CisKK3ZvaWQgZ2V0TG9jYWxUaW1lKGNvbnN0IHRpbWVfdCogbG9jYWxU
aW1lLCBzdHJ1Y3QgdG0qIGxvY2FsVE0pCit7CisjaWYgQ09NUElMRVIoTVNWQzcpIHx8IENPTVBJ
TEVSKE1JTkdXKSB8fCBQTEFURk9STShXSU5fQ0UpCisgICAgKmxvY2FsVE0gPSAqbG9jYWx0aW1l
KGxvY2FsVGltZSk7CisjZWxpZiBDT01QSUxFUihNU1ZDKQorICAgIGxvY2FsdGltZV9zKGxvY2Fs
VE0sIGxvY2FsVGltZSk7CisjZWxzZQorICAgIGxvY2FsdGltZV9yKGxvY2FsVGltZSwgbG9jYWxU
TSk7CisjZW5kaWYKK30KKworLy8gVGhlcmUgaXMgYSBoYXJkIGxpbWl0IGF0IDIwMzggdGhhdCB3
ZSBjdXJyZW50bHkgZG8gbm90IGhhdmUgYSB3b3JrYXJvdW5kCisvLyBmb3IgKHJkYXI6Ly9wcm9i
bGVtLzUwNTI5NzUpLgorc3RhdGljIGlubGluZSBpbnQgbWF4aW11bVllYXJGb3JEU1QoKQorewor
ICAgIHJldHVybiAyMDM3OworfQorCitzdGF0aWMgaW5saW5lIGludCBtaW5pbXVtWWVhckZvckRT
VCgpCit7CisgICAgLy8gQmVjYXVzZSBvZiB0aGUgMjAzOCBpc3N1ZSAoc2VlIG1heGltdW1ZZWFy
Rm9yRFNUKSBpZiB0aGUgY3VycmVudCB5ZWFyIGlzCisgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSBt
YXggeWVhciBtaW51cyAyNyAoMjAxMCksIHdlIHdhbnQgdG8gdXNlIHRoZSBtYXggeWVhcgorICAg
IC8vIG1pbnVzIDI3IGluc3RlYWQsIHRvIGVuc3VyZSB0aGVyZSBpcyBhIHJhbmdlIG9mIDI4IHll
YXJzIHRoYXQgYWxsIHllYXJzCisgICAgLy8gY2FuIG1hcCB0by4KKyAgICByZXR1cm4gc3RkOjpt
aW4obXNUb1llYXIoZ2V0Q3VycmVudFVUQ1RpbWUoKSksIG1heGltdW1ZZWFyRm9yRFNUKCkgLSAy
NykgOworfQorCisvKgorICogRmluZCBhbiBlcXVpdmFsZW50IHllYXIgZm9yIHRoZSBvbmUgZ2l2
ZW4sIHdoZXJlIGVxdWl2YWxlbmNlIGlzIGRldGVyaW5lZCBieQorICogdGhlIHR3byB5ZWFycyBo
YXZpbmcgdGhlIHNhbWUgbGVhcG5lc3MgYW5kIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHllYXIsIGZh
bGxpbmcKKyAqIG9uIHRoZSBzYW1lIGRheSBvZiB0aGUgd2Vlay4KKyAqCisgKiBUaGlzIGZ1bmN0
aW9uIHJldHVybnMgYSB5ZWFyIGJldHdlZW4gdGhpcyBjdXJyZW50IHllYXIgYW5kIDIwMzcsIGhv
d2V2ZXIgdGhpcworICogZnVuY3Rpb24gd2lsbCBwb3RlbnRpYWxseSByZXR1cm4gaW5jb3JyZWN0
IHJlc3VsdHMgaWYgdGhlIGN1cnJlbnQgeWVhciBpcyBhZnRlcgorICogMjAxMCwgKHJkYXI6Ly9w
cm9ibGVtLzUwNTI5NzUpLCBpZiB0aGUgeWVhciBwYXNzZWQgaW4gaXMgYmVmb3JlIDE5MDAgb3Ig
YWZ0ZXIKKyAqIDIxMDAsIChyZGFyOi8vcHJvYmxlbS81MDU1MDM4KS4KKyAqLworaW50IGVxdWl2
YWxlbnRZZWFyRm9yRFNUKGludCB5ZWFyKQoreworICAgIC8vIEl0IGlzIG9rIGlmIHRoZSBjYWNo
ZWQgeWVhciBpcyBub3QgdGhlIGN1cnJlbnQgeWVhciBhcyBsb25nIGFzIHRoZSBydWxlcworICAg
IC8vIGZvciBEU1QgZGlkIG5vdCBjaGFuZ2UgYmV0d2VlbiB0aGUgdHdvIHllYXJzOyBpZiB0aGV5
IGRpZCB0aGUgYXBwIHdvdWxkIG5lZWQKKyAgICAvLyB0byBiZSByZXN0YXJ0ZWQuCisgICAgc3Rh
dGljIGludCBtaW5ZZWFyID0gbWluaW11bVllYXJGb3JEU1QoKTsKKyAgICBpbnQgbWF4WWVhciA9
IG1heGltdW1ZZWFyRm9yRFNUKCk7CisKKyAgICBpbnQgZGlmZmVyZW5jZTsKKyAgICBpZiAoeWVh
ciA+IG1heFllYXIpCisgICAgICAgIGRpZmZlcmVuY2UgPSBtaW5ZZWFyIC0geWVhcjsKKyAgICBl
bHNlIGlmICh5ZWFyIDwgbWluWWVhcikKKyAgICAgICAgZGlmZmVyZW5jZSA9IG1heFllYXIgLSB5
ZWFyOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHllYXI7CisKKyAgICBpbnQgcXVvdGllbnQg
PSBkaWZmZXJlbmNlIC8gMjg7CisgICAgaW50IHByb2R1Y3QgPSAocXVvdGllbnQpICogMjg7CisK
KyAgICB5ZWFyICs9IHByb2R1Y3Q7CisgICAgQVNTRVJUKCh5ZWFyID49IG1pblllYXIgJiYgeWVh
ciA8PSBtYXhZZWFyKSB8fCAocHJvZHVjdCAtIHllYXIgPT0gc3RhdGljX2Nhc3Q8aW50PihOYU4p
KSk7CisgICAgcmV0dXJuIHllYXI7Cit9CisKK3N0YXRpYyBpbnQzMl90IGNhbGN1bGF0ZVVUQ09m
ZnNldCgpCit7CisgICAgdG0gbG9jYWx0OworICAgIG1lbXNldCgmbG9jYWx0LCAwLCBzaXplb2Yo
bG9jYWx0KSk7CisgCisgICAgLy8gZ2V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyB0aW1l
IHpvbmUgYW5kIFVUQyBvbiBKYW4gMDEsIDIwMDAgMTI6MDA6MDAgQU0KKyAgICBsb2NhbHQudG1f
bWRheSA9IDE7CisgICAgbG9jYWx0LnRtX3llYXIgPSAxMDA7CisgICAgdGltZV90IHV0Y09mZnNl
dCA9IDk0NjY4NDgwMCAtIG1rdGltZSgmbG9jYWx0KTsKKworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQzMl90Pih1dGNPZmZzZXQgKiAxMDAwKTsKK30KKworI2lmIFBMQVRGT1JNKERBUldJTikK
K3N0YXRpYyBpbnQzMl90IHNfY2FjaGVkVVRDT2Zmc2V0OyAvLyBJbiBtaWxsaXNlY29uZHMuIEFu
IGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IGFjY2VzcyB0byBhbiBpbnQzMl90IHZhcmlhYmxlIGlz
IGF0b21pYyBvbiBwbGF0Zm9ybXMgdGhhdCB0YWtlIHRoaXMgY29kZSBwYXRoLgorc3RhdGljIGJv
b2wgc19oYXZlQ2FjaGVkVVRDT2Zmc2V0Oworc3RhdGljIGludCBzX25vdGlmaWNhdGlvblRva2Vu
OworI2VuZGlmCisKKy8qCisgKiBHZXQgdGhlIGRpZmZlcmVuY2UgaW4gbWlsbGlzZWNvbmRzIGJl
dHdlZW4gdGhpcyB0aW1lIHpvbmUgYW5kIFVUQyAoR01UKQorICogTk9UIGluY2x1ZGluZyBEU1Qu
CisgKi8KK2RvdWJsZSBnZXRVVENPZmZzZXQoKQoreworI2lmIFBMQVRGT1JNKERBUldJTikKKyAg
ICBpZiAoc19oYXZlQ2FjaGVkVVRDT2Zmc2V0KSB7CisgICAgICAgIGludCBub3RpZmllZDsKKyAg
ICAgICAgdWludDMyX3Qgc3RhdHVzID0gbm90aWZ5X2NoZWNrKHNfbm90aWZpY2F0aW9uVG9rZW4s
ICZub3RpZmllZCk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gTk9USUZZX1NUQVRVU19PSyAmJiAh
bm90aWZpZWQpCisgICAgICAgICAgICByZXR1cm4gc19jYWNoZWRVVENPZmZzZXQ7CisgICAgfQor
I2VuZGlmCisKKyAgICBpbnQzMl90IHV0Y09mZnNldCA9IGNhbGN1bGF0ZVVUQ09mZnNldCgpOwor
CisjaWYgUExBVEZPUk0oREFSV0lOKQorICAgIC8vIFRoZW9yZXRpY2FsbHksIGl0IGlzIHBvc3Np
YmxlIHRoYXQgc2V2ZXJhbCB0aHJlYWRzIHdpbGwgYmUgZXhlY3V0aW5nIHRoaXMgY29kZSBhdCBv
bmNlLCBpbiB3aGljaCBjYXNlIHdlIHdpbGwgaGF2ZSBhIHJhY2UgY29uZGl0aW9uLAorICAgIC8v
IGFuZCBhIG5ld2VyIHZhbHVlIG1heSBiZSBvdmVyd3JpdHRlbi4gSW4gcHJhY3RpY2UsIHRpbWUg
em9uZXMgZG9uJ3QgY2hhbmdlIHRoYXQgb2Z0ZW4uCisgICAgc19jYWNoZWRVVENPZmZzZXQgPSB1
dGNPZmZzZXQ7CisjZW5kaWYKKworICAgIHJldHVybiB1dGNPZmZzZXQ7Cit9CisKKy8qCisgKiBH
ZXQgdGhlIERTVCBvZmZzZXQgZm9yIHRoZSB0aW1lIHBhc3NlZCBpbi4gIFRha2VzCisgKiBzZWNv
bmRzIChub3QgbWlsbGlzZWNvbmRzKSBhbmQgY2Fubm90IGhhbmRsZSBkYXRlcyBiZWZvcmUgMTk3
MAorICogb24gc29tZSBPUycKKyAqLworc3RhdGljIGRvdWJsZSBnZXREU1RPZmZzZXRTaW1wbGUo
ZG91YmxlIGxvY2FsVGltZVNlY29uZHMsIGRvdWJsZSB1dGNPZmZzZXQpCit7CisgICAgaWYgKGxv
Y2FsVGltZVNlY29uZHMgPiBtYXhVbml4VGltZSkKKyAgICAgICAgbG9jYWxUaW1lU2Vjb25kcyA9
IG1heFVuaXhUaW1lOworICAgIGVsc2UgaWYgKGxvY2FsVGltZVNlY29uZHMgPCAwKSAvLyBHbyBh
aGVhZCBhIGRheSB0byBtYWtlIGxvY2FsdGltZSB3b3JrIChkb2VzIG5vdCB3b3JrIHdpdGggMCkK
KyAgICAgICAgbG9jYWxUaW1lU2Vjb25kcyArPSBzZWNvbmRzUGVyRGF5OworCisgICAgLy9pbnB1
dCBpcyBVVEMgc28gd2UgaGF2ZSB0byBzaGlmdCBiYWNrIHRvIGxvY2FsIHRpbWUgdG8gZGV0ZXJt
aW5lIERTVCB0aHVzIHRoZSArIGdldFVUQ09mZnNldCgpCisgICAgZG91YmxlIG9mZnNldFRpbWUg
PSAobG9jYWxUaW1lU2Vjb25kcyAqIG1zUGVyU2Vjb25kKSArIHV0Y09mZnNldDsKKworICAgIC8v
IE9mZnNldCBmcm9tIFVUQyBidXQgZG9lc24ndCBpbmNsdWRlIERTVCBvYnZpb3VzbHkKKyAgICBp
bnQgb2Zmc2V0SG91ciA9ICBtc1RvSG91cnMob2Zmc2V0VGltZSk7CisgICAgaW50IG9mZnNldE1p
bnV0ZSA9ICBtc1RvTWludXRlcyhvZmZzZXRUaW1lKTsKKworICAgIC8vIEZJWE1FOiB0aW1lX3Qg
aGFzIGEgcG90ZW50aWFsIHByb2JsZW0gaW4gMjAzOAorICAgIHRpbWVfdCBsb2NhbFRpbWUgPSBz
dGF0aWNfY2FzdDx0aW1lX3Q+KGxvY2FsVGltZVNlY29uZHMpOworCisgICAgdG0gbG9jYWxUTTsK
KyAgICBnZXRMb2NhbFRpbWUoJmxvY2FsVGltZSwgJmxvY2FsVE0pOworCisgICAgZG91YmxlIGRp
ZmYgPSAoKGxvY2FsVE0udG1faG91ciAtIG9mZnNldEhvdXIpICogc2Vjb25kc1BlckhvdXIpICsg
KChsb2NhbFRNLnRtX21pbiAtIG9mZnNldE1pbnV0ZSkgKiA2MCk7CisKKyAgICBpZiAoZGlmZiA8
IDApCisgICAgICAgIGRpZmYgKz0gc2Vjb25kc1BlckRheTsKKworICAgIHJldHVybiAoZGlmZiAq
IG1zUGVyU2Vjb25kKTsKK30KKworLy8gR2V0IHRoZSBEU1Qgb2Zmc2V0LCBnaXZlbiBhIHRpbWUg
aW4gVVRDCitzdGF0aWMgZG91YmxlIGdldERTVE9mZnNldChkb3VibGUgbXMsIGRvdWJsZSB1dGNP
ZmZzZXQpCit7CisgICAgLy8gT24gTWFjIE9TIFgsIHRoZSBjYWxsIHRvIGxvY2FsdGltZSAoc2Vl
IGdldERTVE9mZnNldFNpbXBsZSkgd2lsbCByZXR1cm4gaGlzdG9yaWNhbGx5IGFjY3VyYXRlCisg
ICAgLy8gRFNUIGluZm9ybWF0aW9uIChlLmcuIE5ldyBaZWFsYW5kIGRpZCBub3QgaGF2ZSBEU1Qg
ZnJvbSAxOTQ2IHRvIDE5NzQpIGhvd2V2ZXIgdGhlIEphdmFTY3JpcHQKKyAgICAvLyBzdGFuZGFy
ZCBleHBsaWNpdGx5IGRpY3RhdGVzIHRoYXQgaGlzdG9yaWNhbCBpbmZvcm1hdGlvbiBzaG91bGQg
bm90IGJlIGNvbnNpZGVyZWQgd2hlbgorICAgIC8vIGRldGVybWluaW5nIERTVC4gRm9yIHRoaXMg
cmVhc29uIHdlIHNoaWZ0IGF3YXkgZnJvbSB5ZWFycyB0aGF0IGxvY2FsdGltZSBjYW4gaGFuZGxl
IGJ1dCB3b3VsZAorICAgIC8vIHJldHVybiBoaXN0b3JpY2FsbHkgYWNjdXJhdGUgaW5mb3JtYXRp
b24uCisgICAgaW50IHllYXIgPSBtc1RvWWVhcihtcyk7CisgICAgaW50IGVxdWl2YWxlbnRZZWFy
ID0gZXF1aXZhbGVudFllYXJGb3JEU1QoeWVhcik7CisgICAgaWYgKHllYXIgIT0gZXF1aXZhbGVu
dFllYXIpIHsKKyAgICAgICAgYm9vbCBsZWFwWWVhciA9IGlzTGVhcFllYXIoeWVhcik7CisgICAg
ICAgIGludCBkYXlJblllYXJMb2NhbCA9IGRheUluWWVhcihtcywgeWVhcik7CisgICAgICAgIGlu
dCBkYXlJbk1vbnRoID0gZGF5SW5Nb250aEZyb21EYXlJblllYXIoZGF5SW5ZZWFyTG9jYWwsIGxl
YXBZZWFyKTsKKyAgICAgICAgaW50IG1vbnRoID0gbW9udGhGcm9tRGF5SW5ZZWFyKGRheUluWWVh
ckxvY2FsLCBsZWFwWWVhcik7CisgICAgICAgIGludCBkYXkgPSBkYXRlVG9EYXlJblllYXIoZXF1
aXZhbGVudFllYXIsIG1vbnRoLCBkYXlJbk1vbnRoKTsKKyAgICAgICAgbXMgPSAoZGF5ICogbXNQ
ZXJEYXkpICsgbXNUb01pbGxpc2Vjb25kcyhtcyk7CisgICAgfQorCisgICAgcmV0dXJuIGdldERT
VE9mZnNldFNpbXBsZShtcyAvIG1zUGVyU2Vjb25kLCB1dGNPZmZzZXQpOworfQorCitkb3VibGUg
Z3JlZ29yaWFuRGF0ZVRpbWVUb01TKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJiB0LCBkb3VibGUg
bWlsbGlTZWNvbmRzLCBib29sIGlucHV0SXNVVEMpCit7CisgICAgaW50IGRheSA9IGRhdGVUb0Rh
eUluWWVhcih0LnllYXIgKyAxOTAwLCB0Lm1vbnRoLCB0Lm1vbnRoRGF5KTsKKyAgICBkb3VibGUg
bXMgPSB0aW1lVG9NUyh0LmhvdXIsIHQubWludXRlLCB0LnNlY29uZCwgbWlsbGlTZWNvbmRzKTsK
KyAgICBkb3VibGUgcmVzdWx0ID0gKGRheSAqIG1zUGVyRGF5KSArIG1zOworCisgICAgaWYgKCFp
bnB1dElzVVRDKSB7IC8vIGNvbnZlcnQgdG8gVVRDCisgICAgICAgIGRvdWJsZSB1dGNPZmZzZXQg
PSBnZXRVVENPZmZzZXQoKTsKKyAgICAgICAgcmVzdWx0IC09IHV0Y09mZnNldDsKKyAgICAgICAg
cmVzdWx0IC09IGdldERTVE9mZnNldChyZXN1bHQsIHV0Y09mZnNldCk7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoZG91YmxlIG1z
LCBib29sIG91dHB1dElzVVRDLCBHcmVnb3JpYW5EYXRlVGltZSYgdG0pCit7CisgICAgLy8gaW5w
dXQgaXMgVVRDCisgICAgZG91YmxlIGRzdE9mZiA9IDAuMDsKKyAgICBjb25zdCBkb3VibGUgdXRj
T2ZmID0gZ2V0VVRDT2Zmc2V0KCk7CisKKyAgICBpZiAoIW91dHB1dElzVVRDKSB7ICAvLyBjb252
ZXJ0IHRvIGxvY2FsIHRpbWUKKyAgICAgICAgZHN0T2ZmID0gZ2V0RFNUT2Zmc2V0KG1zLCB1dGNP
ZmYpOworICAgICAgICBtcyArPSBkc3RPZmYgKyB1dGNPZmY7CisgICAgfQorCisgICAgY29uc3Qg
aW50IHllYXIgPSBtc1RvWWVhcihtcyk7CisgICAgdG0uc2Vjb25kICAgPSAgbXNUb1NlY29uZHMo
bXMpOworICAgIHRtLm1pbnV0ZSAgID0gIG1zVG9NaW51dGVzKG1zKTsKKyAgICB0bS5ob3VyICAg
ICA9ICBtc1RvSG91cnMobXMpOworICAgIHRtLndlZWtEYXkgID0gIG1zVG9XZWVrRGF5KG1zKTsK
KyAgICB0bS55ZWFyRGF5ICA9ICBkYXlJblllYXIobXMsIHllYXIpOworICAgIHRtLm1vbnRoRGF5
ID0gIGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKHRtLnllYXJEYXksIGlzTGVhcFllYXIoeWVhcikp
OworICAgIHRtLm1vbnRoICAgID0gIG1vbnRoRnJvbURheUluWWVhcih0bS55ZWFyRGF5LCBpc0xl
YXBZZWFyKHllYXIpKTsKKyAgICB0bS55ZWFyICAgICA9ICB5ZWFyIC0gMTkwMDsKKyAgICB0bS5p
c0RTVCAgICA9ICBkc3RPZmYgIT0gMC4wOworCisgICAgdG0udXRjT2Zmc2V0ID0gc3RhdGljX2Nh
c3Q8bG9uZz4oKGRzdE9mZiArIHV0Y09mZikgLyBtc1BlclNlY29uZCk7CisgICAgdG0udGltZVpv
bmUgPSBOVUxMOworfQorCit2b2lkIGluaXREYXRlTWF0aCgpCit7CisjaWZuZGVmIE5ERUJVRwor
ICAgIHN0YXRpYyBib29sIGFscmVhZHlJbml0aWFsaXplZDsKKyAgICBBU1NFUlQoIWFscmVhZHlJ
bml0aWFsaXplZCsrKTsKKyNlbmRpZgorCisgICAgZXF1aXZhbGVudFllYXJGb3JEU1QoMjAwMCk7
IC8vIE5lZWQgdG8gY2FsbCBvbmNlIHRvIGluaXRpYWxpemUgYSBzdGF0aWMgdXNlZCBpbiB0aGlz
IGZ1bmN0aW9uLgorI2lmIFBMQVRGT1JNKERBUldJTikKKyAgICAvLyBSZWdpc3RlciBmb3IgYSBu
b3RpZmljYXRpb24gd2hlbmV2ZXIgdGhlIHRpbWUgem9uZSBjaGFuZ2VzLgorICAgIHVpbnQzMl90
IHN0YXR1cyA9IG5vdGlmeV9yZWdpc3Rlcl9jaGVjaygiY29tLmFwcGxlLnN5c3RlbS50aW1lem9u
ZSIsICZzX25vdGlmaWNhdGlvblRva2VuKTsKKyAgICBpZiAoc3RhdHVzID09IE5PVElGWV9TVEFU
VVNfT0spIHsKKyAgICAgICAgc19jYWNoZWRVVENPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQo
KTsKKyAgICAgICAgc19oYXZlQ2FjaGVkVVRDT2Zmc2V0ID0gdHJ1ZTsKKyAgICB9CisjZW5kaWYK
K30KKworc3RhdGljIGlubGluZSBkb3VibGUgeW1kaG1zVG9TZWNvbmRzKGxvbmcgeWVhciwgaW50
IG1vbiwgaW50IGRheSwgaW50IGhvdXIsIGludCBtaW51dGUsIGludCBzZWNvbmQpCit7CisgICAg
ZG91YmxlIGRheXMgPSAoZGF5IC0gMzIwNzUpCisgICAgICAgICsgZmxvb3IoMTQ2MSAqICh5ZWFy
ICsgNDgwMC4wICsgKG1vbiAtIDE0KSAvIDEyKSAvIDQpCisgICAgICAgICsgMzY3ICogKG1vbiAt
IDIgLSAobW9uIC0gMTQpIC8gMTIgKiAxMikgLyAxMgorICAgICAgICAtIGZsb29yKDMgKiAoKHll
YXIgKyA0OTAwLjAgKyAobW9uIC0gMTQpIC8gMTIpIC8gMTAwKSAvIDQpCisgICAgICAgIC0gMjQ0
MDU4ODsKKyAgICByZXR1cm4gKChkYXlzICogaG91cnNQZXJEYXkgKyBob3VyKSAqIG1pbnV0ZXNQ
ZXJIb3VyICsgbWludXRlKSAqIHNlY29uZHNQZXJNaW51dGUgKyBzZWNvbmQ7Cit9CisKKy8vIFdl
IGZvbGxvdyB0aGUgcmVjb21tZW5kYXRpb24gb2YgUkZDIDI4MjIgdG8gY29uc2lkZXIgYWxsCisv
LyBvYnNvbGV0ZSB0aW1lIHpvbmVzIG5vdCBsaXN0ZWQgaGVyZSBlcXVpdmFsZW50IHRvICItMDAw
MCIuCitzdGF0aWMgY29uc3Qgc3RydWN0IEtub3duWm9uZSB7CisjaWYgIVBMQVRGT1JNKFdJTl9P
UykKKyAgICBjb25zdAorI2VuZGlmCisgICAgICAgIGNoYXIgdHpOYW1lWzRdOworICAgIGludCB0
ek9mZnNldDsKK30ga25vd25fem9uZXNbXSA9IHsKKyAgICB7ICJVVCIsIDAgfSwKKyAgICB7ICJH
TVQiLCAwIH0sCisgICAgeyAiRVNUIiwgLTMwMCB9LAorICAgIHsgIkVEVCIsIC0yNDAgfSwKKyAg
ICB7ICJDU1QiLCAtMzYwIH0sCisgICAgeyAiQ0RUIiwgLTMwMCB9LAorICAgIHsgIk1TVCIsIC00
MjAgfSwKKyAgICB7ICJNRFQiLCAtMzYwIH0sCisgICAgeyAiUFNUIiwgLTQ4MCB9LAorICAgIHsg
IlBEVCIsIC00MjAgfQorfTsKKworaW5saW5lIHN0YXRpYyB2b2lkIHNraXBTcGFjZXNBbmRDb21t
ZW50cyhjb25zdCBjaGFyKiYgcykKK3sKKyAgICBpbnQgbmVzdGluZyA9IDA7CisgICAgY2hhciBj
aDsKKyAgICB3aGlsZSAoKGNoID0gKnMpKSB7CisgICAgICAgIGlmICghaXNBU0NJSVNwYWNlKGNo
KSkgeworICAgICAgICAgICAgaWYgKGNoID09ICcoJykKKyAgICAgICAgICAgICAgICBuZXN0aW5n
Kys7CisgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnKScgJiYgbmVzdGluZyA+IDApCisgICAg
ICAgICAgICAgICAgbmVzdGluZy0tOworICAgICAgICAgICAgZWxzZSBpZiAobmVzdGluZyA9PSAw
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHMrKzsKKyAgICB9
Cit9CisKKy8vIHJldHVybnMgMC0xMSAoSmFuLURlYyk7IC0xIG9uIGZhaWx1cmUKK3N0YXRpYyBp
bnQgZmluZE1vbnRoKGNvbnN0IGNoYXIqIG1vbnRoU3RyKQoreworICAgIEFTU0VSVChtb250aFN0
cik7CisgICAgY2hhciBuZWVkbGVbNF07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kp
IHsKKyAgICAgICAgaWYgKCEqbW9udGhTdHIpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgIG5lZWRsZVtpXSA9IHN0YXRpY19jYXN0PGNoYXI+KHRvQVNDSUlMb3dlcigqbW9udGhTdHIr
KykpOworICAgIH0KKyAgICBuZWVkbGVbM10gPSAnXDAnOworICAgIGNvbnN0IGNoYXIgKmhheXN0
YWNrID0gImphbmZlYm1hcmFwcm1heWp1bmp1bGF1Z3NlcG9jdG5vdmRlYyI7CisgICAgY29uc3Qg
Y2hhciAqc3RyID0gc3Ryc3RyKGhheXN0YWNrLCBuZWVkbGUpOworICAgIGlmIChzdHIpIHsKKyAg
ICAgICAgaW50IHBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8aW50PihzdHIgLSBoYXlzdGFjayk7Cisg
ICAgICAgIGlmIChwb3NpdGlvbiAlIDMgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlv
biAvIDM7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGJvb2wgcGFyc2VMb25n
KGNvbnN0IGNoYXIqIHN0cmluZywgY2hhcioqIHN0b3BQb3NpdGlvbiwgaW50IGJhc2UsIGxvbmcq
IHJlc3VsdCkKK3sKKyAgICAqcmVzdWx0ID0gc3RydG9sKHN0cmluZywgc3RvcFBvc2l0aW9uLCBi
YXNlKTsKKyAgICAvLyBBdm9pZCB0aGUgdXNlIG9mIGVycm5vIGFzIGl0IGlzIG5vdCBhdmFpbGFi
bGUgb24gV2luZG93cyBDRQorICAgIGlmIChzdHJpbmcgPT0gKnN0b3BQb3NpdGlvbiB8fCAqcmVz
dWx0ID09IExPTkdfTUlOIHx8ICpyZXN1bHQgPT0gTE9OR19NQVgpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZG91YmxlIHBhcnNlRGF0ZShjb25zdCBVU3Ry
aW5nICZkYXRlKQoreworICAgIC8vIFRoaXMgcGFyc2VzIGEgZGF0ZSBpbiB0aGUgZm9ybToKKyAg
ICAvLyAgICAgVHVlc2RheSwgMDktTm92LTk5IDIzOjEyOjQwIEdNVAorICAgIC8vIG9yCisgICAg
Ly8gICAgIFNhdCwgMDEtSmFuLTIwMDAgMDg6MDA6MDAgR01UCisgICAgLy8gb3IKKyAgICAvLyAg
ICAgU2F0LCAwMSBKYW4gMjAwMCAwODowMDowMCBHTVQKKyAgICAvLyBvcgorICAgIC8vICAgICAw
MSBKYW4gOTkgMjI6MDAgKzAxMDAgICAgKGV4Y2VwdGlvbnMgaW4gcmZjODIyL3JmYzI4MjIpCisg
ICAgLy8gIyMjIG5vbiBSRkMgZm9ybWF0cywgYWRkZWQgZm9yIEphdmFzY3JpcHQ6CisgICAgLy8g
ICAgIFtXZWRuZXNkYXldIEphbnVhcnkgMDkgMTk5OSAyMzoxMjo0MCBHTVQKKyAgICAvLyAgICAg
W1dlZG5lc2RheV0gSmFudWFyeSAwOSAyMzoxMjo0MCBHTVQgMTk5OQorICAgIC8vCisgICAgLy8g
V2UgaWdub3JlIHRoZSB3ZWVrZGF5LgorCisgICAgQ1N0cmluZyBkYXRlQ1N0cmluZyA9IGRhdGUu
VVRGOFN0cmluZygpOworICAgIGNvbnN0IGNoYXIgKmRhdGVTdHJpbmcgPSBkYXRlQ1N0cmluZy5j
X3N0cigpOworICAgICAKKyAgICAvLyBTa2lwIGxlYWRpbmcgc3BhY2UKKyAgICBza2lwU3BhY2Vz
QW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7CisKKyAgICBsb25nIG1vbnRoID0gLTE7CisgICAgY29u
c3QgY2hhciAqd29yZFN0YXJ0ID0gZGF0ZVN0cmluZzsKKyAgICAvLyBDaGVjayBjb250ZW50cyBv
ZiBmaXJzdCB3b3JkcyBpZiBub3QgbnVtYmVyCisgICAgd2hpbGUgKCpkYXRlU3RyaW5nICYmICFp
c0FTQ0lJRGlnaXQoKmRhdGVTdHJpbmcpKSB7CisgICAgICAgIGlmIChpc0FTQ0lJU3BhY2UoKmRh
dGVTdHJpbmcpIHx8ICpkYXRlU3RyaW5nID09ICcoJykgeworICAgICAgICAgICAgaWYgKGRhdGVT
dHJpbmcgLSB3b3JkU3RhcnQgPj0gMykKKyAgICAgICAgICAgICAgICBtb250aCA9IGZpbmRNb250
aCh3b3JkU3RhcnQpOworICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJp
bmcpOworICAgICAgICAgICAgd29yZFN0YXJ0ID0gZGF0ZVN0cmluZzsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgIGRhdGVTdHJpbmcrKzsKKyAgICB9CisKKyAgICAvLyBNaXNzaW5nIGRlbGlt
aXRlciBiZXR3ZWVuIG1vbnRoIGFuZCBkYXkgKGxpa2UgIkphbnVhcnkyOSIpPworICAgIGlmICht
b250aCA9PSAtMSAmJiB3b3JkU3RhcnQgIT0gZGF0ZVN0cmluZykKKyAgICAgICAgbW9udGggPSBm
aW5kTW9udGgod29yZFN0YXJ0KTsKKworICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3Ry
aW5nKTsKKworICAgIGlmICghKmRhdGVTdHJpbmcpCisgICAgICAgIHJldHVybiBOYU47CisKKyAg
ICAvLyAnIDA5LU5vdi05OSAyMzoxMjo0MCBHTVQnCisgICAgY2hhciogbmV3UG9zU3RyOworICAg
IGxvbmcgZGF5OworICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEw
LCAmZGF5KSkKKyAgICAgICAgcmV0dXJuIE5hTjsKKyAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3Ry
OworCisgICAgaWYgKCEqZGF0ZVN0cmluZykKKyAgICAgICAgcmV0dXJuIE5hTjsKKworICAgIGlm
IChkYXkgPCAwKQorICAgICAgICByZXR1cm4gTmFOOworCisgICAgbG9uZyB5ZWFyID0gMDsKKyAg
ICBpZiAoZGF5ID4gMzEpIHsKKyAgICAgICAgLy8gIyMjIHdoZXJlIGlzIHRoZSBib3VuZGFyeSBh
bmQgd2hhdCBoYXBwZW5zIGJlbG93PworICAgICAgICBpZiAoKmRhdGVTdHJpbmcgIT0gJy8nKQor
ICAgICAgICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgLy8gbG9va3MgbGlrZSBhIFlZWVkvTU0v
REQgZGF0ZQorICAgICAgICBpZiAoISorK2RhdGVTdHJpbmcpCisgICAgICAgICAgICByZXR1cm4g
TmFOOworICAgICAgICB5ZWFyID0gZGF5OworICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3Ry
aW5nLCAmbmV3UG9zU3RyLCAxMCwgJm1vbnRoKSkKKyAgICAgICAgICAgIHJldHVybiBOYU47Cisg
ICAgICAgIG1vbnRoIC09IDE7CisgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CisgICAg
ICAgIGlmICgqZGF0ZVN0cmluZysrICE9ICcvJyB8fCAhKmRhdGVTdHJpbmcpCisgICAgICAgICAg
ICByZXR1cm4gTmFOOworICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9z
U3RyLCAxMCwgJmRheSkpCisgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICBkYXRlU3Ry
aW5nID0gbmV3UG9zU3RyOworICAgIH0gZWxzZSBpZiAoKmRhdGVTdHJpbmcgPT0gJy8nICYmIG1v
bnRoID09IC0xKSB7CisgICAgICAgIGRhdGVTdHJpbmcrKzsKKyAgICAgICAgLy8gVGhpcyBsb29r
cyBsaWtlIGEgTU0vREQvWVlZWSBkYXRlLCBub3QgYW4gUkZDIGRhdGUuCisgICAgICAgIG1vbnRo
ID0gZGF5IC0gMTsgLy8gMC1iYXNlZAorICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5n
LCAmbmV3UG9zU3RyLCAxMCwgJmRheSkpCisgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAg
ICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkKKyAgICAgICAgICAgIHJldHVybiBOYU47CisgICAg
ICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CisgICAgICAgIGlmICgqZGF0ZVN0cmluZyA9PSAn
LycpCisgICAgICAgICAgICBkYXRlU3RyaW5nKys7CisgICAgICAgIGlmICghKmRhdGVTdHJpbmcp
CisgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICB9IGVsc2UgeworICAgICAgICBpZiAoKmRh
dGVTdHJpbmcgPT0gJy0nKQorICAgICAgICAgICAgZGF0ZVN0cmluZysrOworCisgICAgICAgIHNr
aXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsKKworICAgICAgICBpZiAoKmRhdGVTdHJp
bmcgPT0gJywnKQorICAgICAgICAgICAgZGF0ZVN0cmluZysrOworCisgICAgICAgIGlmIChtb250
aCA9PSAtMSkgeyAvLyBub3QgZm91bmQgeWV0CisgICAgICAgICAgICBtb250aCA9IGZpbmRNb250
aChkYXRlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChtb250aCA9PSAtMSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTmFOOworCisgICAgICAgICAgICB3aGlsZSAoKmRhdGVTdHJpbmcgJiYgKmRh
dGVTdHJpbmcgIT0gJy0nICYmICpkYXRlU3RyaW5nICE9ICcsJyAmJiAhaXNBU0NJSVNwYWNlKCpk
YXRlU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBkYXRlU3RyaW5nKys7CisKKyAgICAgICAgICAg
IGlmICghKmRhdGVTdHJpbmcpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKKworICAgICAg
ICAgICAgLy8gJy05OSAyMzoxMjo0MCBHTVQnCisgICAgICAgICAgICBpZiAoKmRhdGVTdHJpbmcg
IT0gJy0nICYmICpkYXRlU3RyaW5nICE9ICcvJyAmJiAqZGF0ZVN0cmluZyAhPSAnLCcgJiYgIWlz
QVNDSUlTcGFjZSgqZGF0ZVN0cmluZykpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKKyAg
ICAgICAgICAgIGRhdGVTdHJpbmcrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtb250
aCA8IDAgfHwgbW9udGggPiAxMSkKKyAgICAgICAgcmV0dXJuIE5hTjsKKworICAgIC8vICc5OSAy
MzoxMjo0MCBHTVQnCisgICAgaWYgKHllYXIgPD0gMCAmJiAqZGF0ZVN0cmluZykgeworICAgICAg
ICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJnllYXIpKQorICAg
ICAgICAgICAgcmV0dXJuIE5hTjsKKyAgICB9CisgICAgCisgICAgLy8gRG9uJ3QgZmFpbCBpZiB0
aGUgdGltZSBpcyBtaXNzaW5nLgorICAgIGxvbmcgaG91ciA9IDA7CisgICAgbG9uZyBtaW51dGUg
PSAwOworICAgIGxvbmcgc2Vjb25kID0gMDsKKyAgICBpZiAoISpuZXdQb3NTdHIpCisgICAgICAg
IGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CisgICAgZWxzZSB7CisgICAgICAgIC8vICcgMjM6MTI6
NDAgR01UJworICAgICAgICBpZiAoIShpc0FTQ0lJU3BhY2UoKm5ld1Bvc1N0cikgfHwgKm5ld1Bv
c1N0ciA9PSAnLCcpKSB7CisgICAgICAgICAgICBpZiAoKm5ld1Bvc1N0ciAhPSAnOicpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgICAgIC8vIFRoZXJlIHdhcyBubyB5ZWFy
OyB0aGUgbnVtYmVyIHdhcyB0aGUgaG91ci4KKyAgICAgICAgICAgIHllYXIgPSAtMTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGluIHRoZSBub3JtYWwgY2FzZSAod2UgcGFyc2Vk
IHRoZSB5ZWFyKSwgYWR2YW5jZSB0byB0aGUgbmV4dCBudW1iZXIKKyAgICAgICAgICAgIGRhdGVT
dHJpbmcgPSArK25ld1Bvc1N0cjsKKyAgICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhk
YXRlU3RyaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIHBhcnNlTG9uZyhkYXRlU3RyaW5nLCAm
bmV3UG9zU3RyLCAxMCwgJmhvdXIpOworICAgICAgICAvLyBEbyBub3QgY2hlY2sgZm9yIGVycm5v
IGhlcmUgc2luY2Ugd2Ugd2FudCB0byBjb250aW51ZQorICAgICAgICAvLyBldmVuIGlmIGVycm5v
IHdhcyBzZXQgYmVjYXN1ZSB3ZSBhcmUgc3RpbGwgbG9va2luZworICAgICAgICAvLyBmb3IgdGhl
IHRpbWV6b25lIQorCisgICAgICAgIC8vIFJlYWQgYSBudW1iZXI/IElmIG5vdCwgdGhpcyBtaWdo
dCBiZSBhIHRpbWV6b25lIG5hbWUuCisgICAgICAgIGlmIChuZXdQb3NTdHIgIT0gZGF0ZVN0cmlu
ZykgeworICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKKworICAgICAgICAgICAg
aWYgKGhvdXIgPCAwIHx8IGhvdXIgPiAyMykKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFOOwor
CisgICAgICAgICAgICBpZiAoISpkYXRlU3RyaW5nKQorICAgICAgICAgICAgICAgIHJldHVybiBO
YU47CisKKyAgICAgICAgICAgIC8vICc6MTI6NDAgR01UJworICAgICAgICAgICAgaWYgKCpkYXRl
U3RyaW5nKysgIT0gJzonKQorICAgICAgICAgICAgICAgIHJldHVybiBOYU47CisKKyAgICAgICAg
ICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmbWludXRlKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5l
d1Bvc1N0cjsKKworICAgICAgICAgICAgaWYgKG1pbnV0ZSA8IDAgfHwgbWludXRlID4gNTkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKKworICAgICAgICAgICAgLy8gJzo0MCBHTVQnCisg
ICAgICAgICAgICBpZiAoKmRhdGVTdHJpbmcgJiYgKmRhdGVTdHJpbmcgIT0gJzonICYmICFpc0FT
Q0lJU3BhY2UoKmRhdGVTdHJpbmcpKQorICAgICAgICAgICAgICAgIHJldHVybiBOYU47CisKKyAg
ICAgICAgICAgIC8vIHNlY29uZHMgYXJlIG9wdGlvbmFsIGluIHJmYzgyMiArIHJmYzI4MjIKKyAg
ICAgICAgICAgIGlmICgqZGF0ZVN0cmluZyA9PSc6JykgeworICAgICAgICAgICAgICAgIGRhdGVT
dHJpbmcrKzsKKworICAgICAgICAgICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZu
ZXdQb3NTdHIsIDEwLCAmc2Vjb25kKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsK
KyAgICAgICAgICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKHNlY29uZCA8IDAgfHwgc2Vjb25kID4gNTkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBOYU47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNraXBT
cGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsKKworICAgICAgICAgICAgaWYgKHN0cm5jYXNl
Y21wKGRhdGVTdHJpbmcsICJBTSIsIDIpID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoaG91
ciA+IDEyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICAgICAgICAg
IGlmIChob3VyID09IDEyKQorICAgICAgICAgICAgICAgICAgICBob3VyID0gMDsKKyAgICAgICAg
ICAgICAgICBkYXRlU3RyaW5nICs9IDI7CisgICAgICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENv
bW1lbnRzKGRhdGVTdHJpbmcpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJuY2FzZWNtcChk
YXRlU3RyaW5nLCAiUE0iLCAyKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGhvdXIgPiAx
MikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgICAgICAgICBpZiAo
aG91ciAhPSAxMikKKyAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjsKKyAgICAgICAgICAg
ICAgICBkYXRlU3RyaW5nICs9IDI7CisgICAgICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1l
bnRzKGRhdGVTdHJpbmcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
Ym9vbCBoYXZlVFogPSBmYWxzZTsKKyAgICBpbnQgb2Zmc2V0ID0gMDsKKworICAgIC8vIERvbid0
IGZhaWwgaWYgdGhlIHRpbWUgem9uZSBpcyBtaXNzaW5nLiAKKyAgICAvLyBTb21lIHdlYnNpdGVz
IG9taXQgdGhlIHRpbWUgem9uZSAoNDI3NTIwNikuCisgICAgaWYgKCpkYXRlU3RyaW5nKSB7Cisg
ICAgICAgIGlmIChzdHJuY2FzZWNtcChkYXRlU3RyaW5nLCAiR01UIiwgMykgPT0gMCB8fCBzdHJu
Y2FzZWNtcChkYXRlU3RyaW5nLCAiVVRDIiwgMykgPT0gMCkgeworICAgICAgICAgICAgZGF0ZVN0
cmluZyArPSAzOworICAgICAgICAgICAgaGF2ZVRaID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICgqZGF0ZVN0cmluZyA9PSAnKycgfHwgKmRhdGVTdHJpbmcgPT0gJy0nKSB7CisgICAg
ICAgICAgICBsb25nIG87CisgICAgICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAm
bmV3UG9zU3RyLCAxMCwgJm8pKQorICAgICAgICAgICAgICAgIHJldHVybiBOYU47CisgICAgICAg
ICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOworCisgICAgICAgICAgICBpZiAobyA8IC05OTU5
IHx8IG8gPiA5OTU5KQorICAgICAgICAgICAgICAgIHJldHVybiBOYU47CisKKyAgICAgICAgICAg
IGludCBzZ24gPSAobyA8IDApID8gLTEgOiAxOworICAgICAgICAgICAgbyA9IGFicyhvKTsKKyAg
ICAgICAgICAgIGlmICgqZGF0ZVN0cmluZyAhPSAnOicpIHsKKyAgICAgICAgICAgICAgICBvZmZz
ZXQgPSAoKG8gLyAxMDApICogNjAgKyAobyAlIDEwMCkpICogc2duOworICAgICAgICAgICAgfSBl
bHNlIHsgLy8gR01UKzA1OjAwCisgICAgICAgICAgICAgICAgbG9uZyBvMjsKKyAgICAgICAgICAg
ICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJm8yKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgICAgICAgICBkYXRlU3RyaW5n
ID0gbmV3UG9zU3RyOworICAgICAgICAgICAgICAgIG9mZnNldCA9IChvICogNjAgKyBvMikgKiBz
Z247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBoYXZlVFogPSB0cnVlOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnQoc2l6ZW9mKGtub3du
X3pvbmVzKSAvIHNpemVvZihLbm93blpvbmUpKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYg
KDAgPT0gc3RybmNhc2VjbXAoZGF0ZVN0cmluZywga25vd25fem9uZXNbaV0udHpOYW1lLCBzdHJs
ZW4oa25vd25fem9uZXNbaV0udHpOYW1lKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
ID0ga25vd25fem9uZXNbaV0udHpPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGRhdGVTdHJp
bmcgKz0gc3RybGVuKGtub3duX3pvbmVzW2ldLnR6TmFtZSk7CisgICAgICAgICAgICAgICAgICAg
IGhhdmVUWiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHNraXBTcGFjZXNB
bmRDb21tZW50cyhkYXRlU3RyaW5nKTsKKworICAgIGlmICgqZGF0ZVN0cmluZyAmJiB5ZWFyID09
IC0xKSB7CisgICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEw
LCAmeWVhcikpCisgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICBkYXRlU3RyaW5nID0g
bmV3UG9zU3RyOworICAgIH0KKyAgICAgCisgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVT
dHJpbmcpOworICAgICAKKyAgICAvLyBUcmFpbGluZyBnYXJiYWdlCisgICAgaWYgKCpkYXRlU3Ry
aW5nKQorICAgICAgICByZXR1cm4gTmFOOworCisgICAgLy8gWTJLOiBIYW5kbGUgMiBkaWdpdCB5
ZWFycy4KKyAgICBpZiAoeWVhciA+PSAwICYmIHllYXIgPCAxMDApIHsKKyAgICAgICAgaWYgKHll
YXIgPCA1MCkKKyAgICAgICAgICAgIHllYXIgKz0gMjAwMDsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeWVhciArPSAxOTAwOworICAgIH0KKworICAgIC8vIGZhbGwgYmFjayB0byBsb2NhbCB0
aW1lem9uZQorICAgIGlmICghaGF2ZVRaKSB7CisgICAgICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7
CisgICAgICAgIHQubW9udGhEYXkgPSBkYXk7CisgICAgICAgIHQubW9udGggPSBtb250aDsKKyAg
ICAgICAgdC55ZWFyID0geWVhciAtIDE5MDA7CisgICAgICAgIHQuaXNEU1QgPSAtMTsKKyAgICAg
ICAgdC5zZWNvbmQgPSBzZWNvbmQ7CisgICAgICAgIHQubWludXRlID0gbWludXRlOworICAgICAg
ICB0LmhvdXIgPSBob3VyOworCisgICAgICAgIC8vIFVzZSBvdXIgZ3JlZ29yaWFuRGF0ZVRpbWVU
b01TKCkgcmF0aGVyIHRoYW4gbWt0aW1lKCkgYXMgdGhlIGxhdHRlciBjYW4ndCBoYW5kbGUgdGhl
IGZ1bGwgeWVhciByYW5nZS4KKyAgICAgICAgcmV0dXJuIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0
LCAwLCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuICh5bWRobXNUb1NlY29uZHMoeWVhciwg
bW9udGggKyAxLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSAtIChvZmZzZXQgKiA2MC4wKSkg
KiBtc1BlclNlY29uZDsKK30KKworZG91YmxlIHRpbWVDbGlwKGRvdWJsZSB0KQoreworICAgIGlm
ICghaXNmaW5pdGUodCkpCisgICAgICAgIHJldHVybiBOYU47CisgICAgaWYgKGZhYnModCkgPiA4
LjY0RTE1KQorICAgICAgICByZXR1cm4gTmFOOworICAgIHJldHVybiB0cnVuYyh0KTsKK30KKwor
VVN0cmluZyBmb3JtYXREYXRlKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lICZ0KQoreworICAgIGNo
YXIgYnVmZmVyWzEwMF07CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVz
ICVzICUwMmQgJTA0ZCIsCisgICAgICAgIHdlZWtkYXlOYW1lWyh0LndlZWtEYXkgKyA2KSAlIDdd
LAorICAgICAgICBtb250aE5hbWVbdC5tb250aF0sIHQubW9udGhEYXksIHQueWVhciArIDE5MDAp
OworICAgIHJldHVybiBidWZmZXI7Cit9CisKK1VTdHJpbmcgZm9ybWF0RGF0ZVVUQ1ZhcmlhbnQo
Y29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUgJnQpCit7CisgICAgY2hhciBidWZmZXJbMTAwXTsKKyAg
ICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMsICUwMmQgJXMgJTA0ZCIsCisg
ICAgICAgIHdlZWtkYXlOYW1lWyh0LndlZWtEYXkgKyA2KSAlIDddLAorICAgICAgICB0Lm1vbnRo
RGF5LCBtb250aE5hbWVbdC5tb250aF0sIHQueWVhciArIDE5MDApOworICAgIHJldHVybiBidWZm
ZXI7Cit9CisKK1VTdHJpbmcgZm9ybWF0VGltZShjb25zdCBHcmVnb3JpYW5EYXRlVGltZSAmdCwg
Ym9vbCB1dGMpCit7CisgICAgY2hhciBidWZmZXJbMTAwXTsKKyAgICBpZiAodXRjKSB7CisgICAg
ICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlMDJkOiUwMmQ6JTAyZCBHTVQi
LCB0LmhvdXIsIHQubWludXRlLCB0LnNlY29uZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50
IG9mZnNldCA9IGFicyhnbXRvZmZzZXQodCkpOworICAgICAgICBjaGFyIHRpbWVab25lTmFtZVs3
MF07CisgICAgICAgIHN0cnVjdCB0bSBndG0gPSB0OworICAgICAgICBzdHJmdGltZSh0aW1lWm9u
ZU5hbWUsIHNpemVvZih0aW1lWm9uZU5hbWUpLCAiJVoiLCAmZ3RtKTsKKworICAgICAgICBpZiAo
dGltZVpvbmVOYW1lWzBdKSB7CisgICAgICAgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihi
dWZmZXIpLCAiJTAyZDolMDJkOiUwMmQgR01UJWMlMDJkJTAyZCAoJXMpIiwKKyAgICAgICAgICAg
ICAgICB0LmhvdXIsIHQubWludXRlLCB0LnNlY29uZCwKKyAgICAgICAgICAgICAgICBnbXRvZmZz
ZXQodCkgPCAwID8gJy0nIDogJysnLCBvZmZzZXQgLyAoNjAqNjApLCAob2Zmc2V0IC8gNjApICUg
NjAsIHRpbWVab25lTmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbnByaW50
ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJTAyZDolMDJkOiUwMmQgR01UJWMlMDJkJTAyZCIs
CisgICAgICAgICAgICAgICAgdC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQsCisgICAgICAgICAg
ICAgICAgZ210b2Zmc2V0KHQpIDwgMCA/ICctJyA6ICcrJywgb2Zmc2V0IC8gKDYwKjYwKSwgKG9m
ZnNldCAvIDYwKSAlIDYwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVVN0cmluZyhi
dWZmZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZUNvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZUNvbnZlcnNpb24uY3BwCShyZXZpc2lvbiA0NDUwMSkKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZUNvbnZlcnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
OCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCiAgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENv
bW11bmljYXRvciBjbGllbnQgY29kZSwgcmVsZWFzZWQKICAqIE1hcmNoIDMxLCAxOTk4LgogICoK
QEAgLTQwLDg1NCArNDEsMTcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRGF0ZU1hdGguaCIKLQotI2luY2x1ZGUgIkpTTnVtYmVyQ2VsbC5oIgotI2luY2x1ZGUgPG1h
dGguaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8
d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotCi0jaWYgSEFWRShFUlJOT19IKQotI2luY2x1ZGUgPGVy
cm5vLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKERBUldJTikKLSNpbmNsdWRlIDxub3RpZnku
aD4KLSNlbmRpZgorI2luY2x1ZGUgIkRhdGVDb252ZXJzaW9uLmgiCiAKLSNpZiBIQVZFKFNZU19U
SU1FX0gpCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCi0jaWYgSEFWRShTWVNfVElN
RUJfSCkKLSNpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSNlbmRpZgorI2luY2x1ZGUgPHd0Zi9EYXRl
TWF0aC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotLyog
Q29uc3RhbnRzICovCi0KLXN0YXRpYyBjb25zdCBkb3VibGUgbWludXRlc1BlckRheSA9IDI0LjAg
KiA2MC4wOwotc3RhdGljIGNvbnN0IGRvdWJsZSBzZWNvbmRzUGVyRGF5ID0gMjQuMCAqIDYwLjAg
KiA2MC4wOwotc3RhdGljIGNvbnN0IGRvdWJsZSBzZWNvbmRzUGVyWWVhciA9IDI0LjAgKiA2MC4w
ICogNjAuMCAqIDM2NS4wOwotCi1zdGF0aWMgY29uc3QgZG91YmxlIHVzZWNQZXJTZWMgPSAxMDAw
MDAwLjA7Ci0KLXN0YXRpYyBjb25zdCBkb3VibGUgbWF4VW5peFRpbWUgPSAyMTQ1ODU5MjAwLjA7
IC8vIDEyLzMxLzIwMzcKLQotLy8gRGF5IG9mIHllYXIgZm9yIHRoZSBmaXJzdCBkYXkgb2YgZWFj
aCBtb250aCwgd2hlcmUgaW5kZXggMCBpcyBKYW51YXJ5LCBhbmQgZGF5IDAgaXMgSmFudWFyeSAx
LgotLy8gRmlyc3QgZm9yIG5vbi1sZWFwIHllYXJzLCB0aGVuIGZvciBsZWFwIHllYXJzLgotc3Rh
dGljIGNvbnN0IGludCBmaXJzdERheU9mTW9udGhbMl1bMTJdID0gewotICAgIHswLCAzMSwgNTks
IDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNH0sCi0gICAgezAsIDMx
LCA2MCwgOTEsIDEyMSwgMTUyLCAxODIsIDIxMywgMjQ0LCAyNzQsIDMwNSwgMzM1fQotfTsKLQot
c3RhdGljIGlubGluZSBib29sIGlzTGVhcFllYXIoaW50IHllYXIpCi17Ci0gICAgaWYgKHllYXIg
JSA0ICE9IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoeWVhciAlIDQwMCA9PSAw
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoeWVhciAlIDEwMCA9PSAwKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50
IGRheXNJblllYXIoaW50IHllYXIpCi17Ci0gICAgcmV0dXJuIDM2NSArIGlzTGVhcFllYXIoeWVh
cik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIGRheXNGcm9tMTk3MFRvWWVhcihpbnQgeWVh
cikKLXsKLSAgICAvLyBUaGUgR3JlZ29yaWFuIENhbGVuZGFyIHJ1bGVzIGZvciBsZWFwIHllYXJz
OgotICAgIC8vIEV2ZXJ5IGZvdXJ0aCB5ZWFyIGlzIGEgbGVhcCB5ZWFyLiAgMjAwNCwgMjAwOCwg
YW5kIDIwMTIgYXJlIGxlYXAgeWVhcnMuCi0gICAgLy8gSG93ZXZlciwgZXZlcnkgaHVuZHJlZHRo
IHllYXIgaXMgbm90IGEgbGVhcCB5ZWFyLiAgMTkwMCBhbmQgMjEwMCBhcmUgbm90IGxlYXAgeWVh
cnMuCi0gICAgLy8gRXZlcnkgZm91ciBodW5kcmVkIHllYXJzLCB0aGVyZSdzIGEgbGVhcCB5ZWFy
IGFmdGVyIGFsbC4gIDIwMDAgYW5kIDI0MDAgYXJlIGxlYXAgeWVhcnMuCi0KLSAgICBzdGF0aWMg
Y29uc3QgaW50IGxlYXBEYXlzQmVmb3JlMTk3MUJ5NFJ1bGUgPSAxOTcwIC8gNDsKLSAgICBzdGF0
aWMgY29uc3QgaW50IGV4Y2x1ZGVkTGVhcERheXNCZWZvcmUxOTcxQnkxMDBSdWxlID0gMTk3MCAv
IDEwMDsKLSAgICBzdGF0aWMgY29uc3QgaW50IGxlYXBEYXlzQmVmb3JlMTk3MUJ5NDAwUnVsZSA9
IDE5NzAgLyA0MDA7Ci0KLSAgICBjb25zdCBkb3VibGUgeWVhck1pbnVzT25lID0geWVhciAtIDE7
Ci0gICAgY29uc3QgZG91YmxlIHllYXJzVG9BZGRCeTRSdWxlID0gZmxvb3IoeWVhck1pbnVzT25l
IC8gNC4wKSAtIGxlYXBEYXlzQmVmb3JlMTk3MUJ5NFJ1bGU7Ci0gICAgY29uc3QgZG91YmxlIHll
YXJzVG9FeGNsdWRlQnkxMDBSdWxlID0gZmxvb3IoeWVhck1pbnVzT25lIC8gMTAwLjApIC0gZXhj
bHVkZWRMZWFwRGF5c0JlZm9yZTE5NzFCeTEwMFJ1bGU7Ci0gICAgY29uc3QgZG91YmxlIHllYXJz
VG9BZGRCeTQwMFJ1bGUgPSBmbG9vcih5ZWFyTWludXNPbmUgLyA0MDAuMCkgLSBsZWFwRGF5c0Jl
Zm9yZTE5NzFCeTQwMFJ1bGU7Ci0KLSAgICByZXR1cm4gMzY1LjAgKiAoeWVhciAtIDE5NzApICsg
eWVhcnNUb0FkZEJ5NFJ1bGUgLSB5ZWFyc1RvRXhjbHVkZUJ5MTAwUnVsZSArIHllYXJzVG9BZGRC
eTQwMFJ1bGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIG1zVG9EYXlzKGRvdWJsZSBtcykK
LXsKLSAgICByZXR1cm4gZmxvb3IobXMgLyBtc1BlckRheSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
aW50IG1zVG9ZZWFyKGRvdWJsZSBtcykKLXsKLSAgICBpbnQgYXBwcm94WWVhciA9IHN0YXRpY19j
YXN0PGludD4oZmxvb3IobXMgLyAobXNQZXJEYXkgKiAzNjUuMjQyNSkpICsgMTk3MCk7Ci0gICAg
ZG91YmxlIG1zRnJvbUFwcHJveFllYXJUbzE5NzAgPSBtc1BlckRheSAqIGRheXNGcm9tMTk3MFRv
WWVhcihhcHByb3hZZWFyKTsKLSAgICBpZiAobXNGcm9tQXBwcm94WWVhclRvMTk3MCA+IG1zKQot
ICAgICAgICByZXR1cm4gYXBwcm94WWVhciAtIDE7Ci0gICAgaWYgKG1zRnJvbUFwcHJveFllYXJU
bzE5NzAgKyBtc1BlckRheSAqIGRheXNJblllYXIoYXBwcm94WWVhcikgPD0gbXMpCi0gICAgICAg
IHJldHVybiBhcHByb3hZZWFyICsgMTsKLSAgICByZXR1cm4gYXBwcm94WWVhcjsKLX0KLQotc3Rh
dGljIGlubGluZSBpbnQgZGF5SW5ZZWFyKGRvdWJsZSBtcywgaW50IHllYXIpCi17Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4obXNUb0RheXMobXMpIC0gZGF5c0Zyb20xOTcwVG9ZZWFyKHll
YXIpKTsKLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgbXNUb01pbGxpc2Vjb25kcyhkb3VibGUg
bXMpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IGZtb2QobXMsIG1zUGVyRGF5KTsKLSAgICBpZiAo
cmVzdWx0IDwgMCkKLSAgICAgICAgcmVzdWx0ICs9IG1zUGVyRGF5OwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLS8vIDA6IFN1bmRheSwgMTogTW9uZGF5LCBldGMuCi1zdGF0aWMgaW5saW5lIGlu
dCBtc1RvV2Vla0RheShkb3VibGUgbXMpCi17Ci0gICAgaW50IHdkID0gKHN0YXRpY19jYXN0PGlu
dD4obXNUb0RheXMobXMpKSArIDQpICUgNzsKLSAgICBpZiAod2QgPCAwKQotICAgICAgICB3ZCAr
PSA3OwotICAgIHJldHVybiB3ZDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbXNUb1NlY29uZHMo
ZG91YmxlIG1zKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBmbW9kKGZsb29yKG1zIC8gbXNQZXJT
ZWNvbmQpLCBzZWNvbmRzUGVyTWludXRlKTsKLSAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAg
cmVzdWx0ICs9IHNlY29uZHNQZXJNaW51dGU7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
cmVzdWx0KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbXNUb01pbnV0ZXMoZG91YmxlIG1zKQot
ewotICAgIGRvdWJsZSByZXN1bHQgPSBmbW9kKGZsb29yKG1zIC8gbXNQZXJNaW51dGUpLCBtaW51
dGVzUGVySG91cik7Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJlc3VsdCArPSBtaW51
dGVzUGVySG91cjsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQpOwotfQotCi1z
dGF0aWMgaW5saW5lIGludCBtc1RvSG91cnMoZG91YmxlIG1zKQotewotICAgIGRvdWJsZSByZXN1
bHQgPSBmbW9kKGZsb29yKG1zL21zUGVySG91ciksIGhvdXJzUGVyRGF5KTsKLSAgICBpZiAocmVz
dWx0IDwgMCkKLSAgICAgICAgcmVzdWx0ICs9IGhvdXJzUGVyRGF5OwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KHJlc3VsdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1vbnRoRnJvbURh
eUluWWVhcihpbnQgZGF5SW5ZZWFyLCBib29sIGxlYXBZZWFyKQotewotICAgIGNvbnN0IGludCBk
ID0gZGF5SW5ZZWFyOwotICAgIGludCBzdGVwOwotCi0gICAgaWYgKGQgPCAoc3RlcCA9IDMxKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3RlcCArPSAobGVhcFllYXIgPyAyOSA6IDI4KTsKLSAg
ICBpZiAoZCA8IHN0ZXApCi0gICAgICAgIHJldHVybiAxOwotICAgIGlmIChkIDwgKHN0ZXAgKz0g
MzEpKQotICAgICAgICByZXR1cm4gMjsKLSAgICBpZiAoZCA8IChzdGVwICs9IDMwKSkKLSAgICAg
ICAgcmV0dXJuIDM7Ci0gICAgaWYgKGQgPCAoc3RlcCArPSAzMSkpCi0gICAgICAgIHJldHVybiA0
OwotICAgIGlmIChkIDwgKHN0ZXAgKz0gMzApKQotICAgICAgICByZXR1cm4gNTsKLSAgICBpZiAo
ZCA8IChzdGVwICs9IDMxKSkKLSAgICAgICAgcmV0dXJuIDY7Ci0gICAgaWYgKGQgPCAoc3RlcCAr
PSAzMSkpCi0gICAgICAgIHJldHVybiA3OwotICAgIGlmIChkIDwgKHN0ZXAgKz0gMzApKQotICAg
ICAgICByZXR1cm4gODsKLSAgICBpZiAoZCA8IChzdGVwICs9IDMxKSkKLSAgICAgICAgcmV0dXJu
IDk7Ci0gICAgaWYgKGQgPCAoc3RlcCArPSAzMCkpCi0gICAgICAgIHJldHVybiAxMDsKLSAgICBy
ZXR1cm4gMTE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja01vbnRoKGludCBkYXlJblll
YXIsIGludCYgc3RhcnREYXlPZlRoaXNNb250aCwgaW50JiBzdGFydERheU9mTmV4dE1vbnRoLCBp
bnQgZGF5c0luVGhpc01vbnRoKQotewotICAgIHN0YXJ0RGF5T2ZUaGlzTW9udGggPSBzdGFydERh
eU9mTmV4dE1vbnRoOwotICAgIHN0YXJ0RGF5T2ZOZXh0TW9udGggKz0gZGF5c0luVGhpc01vbnRo
OwotICAgIHJldHVybiAoZGF5SW5ZZWFyIDw9IHN0YXJ0RGF5T2ZOZXh0TW9udGgpOwotfQotCi1z
dGF0aWMgaW5saW5lIGludCBkYXlJbk1vbnRoRnJvbURheUluWWVhcihpbnQgZGF5SW5ZZWFyLCBi
b29sIGxlYXBZZWFyKQotewotICAgIGNvbnN0IGludCBkID0gZGF5SW5ZZWFyOwotICAgIGludCBz
dGVwOwotICAgIGludCBuZXh0ID0gMzA7Ci0KLSAgICBpZiAoZCA8PSBuZXh0KQotICAgICAgICBy
ZXR1cm4gZCArIDE7Ci0gICAgY29uc3QgaW50IGRheXNJbkZlYiA9IChsZWFwWWVhciA/IDI5IDog
MjgpOwotICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIGRheXNJbkZlYikpCi0gICAg
ICAgIHJldHVybiBkIC0gc3RlcDsKLSAgICBpZiAoY2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCAz
MSkpCi0gICAgICAgIHJldHVybiBkIC0gc3RlcDsKLSAgICBpZiAoY2hlY2tNb250aChkLCBzdGVw
LCBuZXh0LCAzMCkpCi0gICAgICAgIHJldHVybiBkIC0gc3RlcDsKLSAgICBpZiAoY2hlY2tNb250
aChkLCBzdGVwLCBuZXh0LCAzMSkpCi0gICAgICAgIHJldHVybiBkIC0gc3RlcDsKLSAgICBpZiAo
Y2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCAzMCkpCi0gICAgICAgIHJldHVybiBkIC0gc3RlcDsK
LSAgICBpZiAoY2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCAzMSkpCi0gICAgICAgIHJldHVybiBk
IC0gc3RlcDsKLSAgICBpZiAoY2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCAzMSkpCi0gICAgICAg
IHJldHVybiBkIC0gc3RlcDsKLSAgICBpZiAoY2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCAzMCkp
Ci0gICAgICAgIHJldHVybiBkIC0gc3RlcDsKLSAgICBpZiAoY2hlY2tNb250aChkLCBzdGVwLCBu
ZXh0LCAzMSkpCi0gICAgICAgIHJldHVybiBkIC0gc3RlcDsKLSAgICBpZiAoY2hlY2tNb250aChk
LCBzdGVwLCBuZXh0LCAzMCkpCi0gICAgICAgIHJldHVybiBkIC0gc3RlcDsKLSAgICBzdGVwID0g
bmV4dDsKLSAgICByZXR1cm4gZCAtIHN0ZXA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1vbnRo
VG9EYXlJblllYXIoaW50IG1vbnRoLCBib29sIGlzTGVhcFllYXIpCi17Ci0gICAgcmV0dXJuIGZp
cnN0RGF5T2ZNb250aFtpc0xlYXBZZWFyXVttb250aF07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91
YmxlIHRpbWVUb01TKGRvdWJsZSBob3VyLCBkb3VibGUgbWluLCBkb3VibGUgc2VjLCBkb3VibGUg
bXMpCi17Ci0gICAgcmV0dXJuICgoKGhvdXIgKiBtaW51dGVzUGVySG91ciArIG1pbikgKiBzZWNv
bmRzUGVyTWludXRlICsgc2VjKSAqIG1zUGVyU2Vjb25kICsgbXMpOwotfQotCi1zdGF0aWMgaW50
IGRhdGVUb0RheUluWWVhcihpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KQotewotICAgIHll
YXIgKz0gbW9udGggLyAxMjsKLQotICAgIG1vbnRoICU9IDEyOwotICAgIGlmIChtb250aCA8IDAp
IHsKLSAgICAgICAgbW9udGggKz0gMTI7Ci0gICAgICAgIC0teWVhcjsKLSAgICB9Ci0KLSAgICBp
bnQgeWVhcmRheSA9IHN0YXRpY19jYXN0PGludD4oZmxvb3IoZGF5c0Zyb20xOTcwVG9ZZWFyKHll
YXIpKSk7Ci0gICAgaW50IG1vbnRoZGF5ID0gbW9udGhUb0RheUluWWVhcihtb250aCwgaXNMZWFw
WWVhcih5ZWFyKSk7Ci0KLSAgICByZXR1cm4geWVhcmRheSArIG1vbnRoZGF5ICsgZGF5IC0gMTsK
LX0KLQotZG91YmxlIGdldEN1cnJlbnRVVENUaW1lKCkKLXsKLSAgICByZXR1cm4gZmxvb3IoZ2V0
Q3VycmVudFVUQ1RpbWVXaXRoTWljcm9zZWNvbmRzKCkpOwotfQotCi0vLyBSZXR1cm5zIGN1cnJl
bnQgdGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgMSBKYW4gMTk3MC4KLWRvdWJsZSBnZXRDdXJy
ZW50VVRDVGltZVdpdGhNaWNyb3NlY29uZHMoKQotewotICAgIHJldHVybiBjdXJyZW50VGltZSgp
ICogMTAwMC4wOyAKLX0KLQotdm9pZCBnZXRMb2NhbFRpbWUoY29uc3QgdGltZV90KiBsb2NhbFRp
bWUsIHN0cnVjdCB0bSogbG9jYWxUTSkKLXsKLSNpZiBDT01QSUxFUihNU1ZDNykgfHwgQ09NUElM
RVIoTUlOR1cpIHx8IFBMQVRGT1JNKFdJTl9DRSkKLSAgICAqbG9jYWxUTSA9ICpsb2NhbHRpbWUo
bG9jYWxUaW1lKTsKLSNlbGlmIENPTVBJTEVSKE1TVkMpCi0gICAgbG9jYWx0aW1lX3MobG9jYWxU
TSwgbG9jYWxUaW1lKTsKLSNlbHNlCi0gICAgbG9jYWx0aW1lX3IobG9jYWxUaW1lLCBsb2NhbFRN
KTsKLSNlbmRpZgotfQotCi0vLyBUaGVyZSBpcyBhIGhhcmQgbGltaXQgYXQgMjAzOCB0aGF0IHdl
IGN1cnJlbnRseSBkbyBub3QgaGF2ZSBhIHdvcmthcm91bmQKLS8vIGZvciAocmRhcjovL3Byb2Js
ZW0vNTA1Mjk3NSkuCi1zdGF0aWMgaW5saW5lIGludCBtYXhpbXVtWWVhckZvckRTVCgpCi17Ci0g
ICAgcmV0dXJuIDIwMzc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1pbmltdW1ZZWFyRm9yRFNU
KCkKLXsKLSAgICAvLyBCZWNhdXNlIG9mIHRoZSAyMDM4IGlzc3VlIChzZWUgbWF4aW11bVllYXJG
b3JEU1QpIGlmIHRoZSBjdXJyZW50IHllYXIgaXMKLSAgICAvLyBncmVhdGVyIHRoYW4gdGhlIG1h
eCB5ZWFyIG1pbnVzIDI3ICgyMDEwKSwgd2Ugd2FudCB0byB1c2UgdGhlIG1heCB5ZWFyCi0gICAg
Ly8gbWludXMgMjcgaW5zdGVhZCwgdG8gZW5zdXJlIHRoZXJlIGlzIGEgcmFuZ2Ugb2YgMjggeWVh
cnMgdGhhdCBhbGwgeWVhcnMKLSAgICAvLyBjYW4gbWFwIHRvLgotICAgIHJldHVybiBzdGQ6Om1p
bihtc1RvWWVhcihnZXRDdXJyZW50VVRDVGltZSgpKSwgbWF4aW11bVllYXJGb3JEU1QoKSAtIDI3
KSA7Ci19Ci0KLS8qCi0gKiBGaW5kIGFuIGVxdWl2YWxlbnQgeWVhciBmb3IgdGhlIG9uZSBnaXZl
biwgd2hlcmUgZXF1aXZhbGVuY2UgaXMgZGV0ZXJpbmVkIGJ5Ci0gKiB0aGUgdHdvIHllYXJzIGhh
dmluZyB0aGUgc2FtZSBsZWFwbmVzcyBhbmQgdGhlIGZpcnN0IGRheSBvZiB0aGUgeWVhciwgZmFs
bGluZwotICogb24gdGhlIHNhbWUgZGF5IG9mIHRoZSB3ZWVrLgotICoKLSAqIFRoaXMgZnVuY3Rp
b24gcmV0dXJucyBhIHllYXIgYmV0d2VlbiB0aGlzIGN1cnJlbnQgeWVhciBhbmQgMjAzNywgaG93
ZXZlciB0aGlzCi0gKiBmdW5jdGlvbiB3aWxsIHBvdGVudGlhbGx5IHJldHVybiBpbmNvcnJlY3Qg
cmVzdWx0cyBpZiB0aGUgY3VycmVudCB5ZWFyIGlzIGFmdGVyCi0gKiAyMDEwLCAocmRhcjovL3By
b2JsZW0vNTA1Mjk3NSksIGlmIHRoZSB5ZWFyIHBhc3NlZCBpbiBpcyBiZWZvcmUgMTkwMCBvciBh
ZnRlcgotICogMjEwMCwgKHJkYXI6Ly9wcm9ibGVtLzUwNTUwMzgpLgotICovCi1pbnQgZXF1aXZh
bGVudFllYXJGb3JEU1QoaW50IHllYXIpCi17Ci0gICAgLy8gSXQgaXMgb2sgaWYgdGhlIGNhY2hl
ZCB5ZWFyIGlzIG5vdCB0aGUgY3VycmVudCB5ZWFyIGFzIGxvbmcgYXMgdGhlIHJ1bGVzCi0gICAg
Ly8gZm9yIERTVCBkaWQgbm90IGNoYW5nZSBiZXR3ZWVuIHRoZSB0d28geWVhcnM7IGlmIHRoZXkg
ZGlkIHRoZSBhcHAgd291bGQgbmVlZAotICAgIC8vIHRvIGJlIHJlc3RhcnRlZC4KLSAgICBzdGF0
aWMgaW50IG1pblllYXIgPSBtaW5pbXVtWWVhckZvckRTVCgpOwotICAgIGludCBtYXhZZWFyID0g
bWF4aW11bVllYXJGb3JEU1QoKTsKLQotICAgIGludCBkaWZmZXJlbmNlOwotICAgIGlmICh5ZWFy
ID4gbWF4WWVhcikKLSAgICAgICAgZGlmZmVyZW5jZSA9IG1pblllYXIgLSB5ZWFyOwotICAgIGVs
c2UgaWYgKHllYXIgPCBtaW5ZZWFyKQotICAgICAgICBkaWZmZXJlbmNlID0gbWF4WWVhciAtIHll
YXI7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4geWVhcjsKLQotICAgIGludCBxdW90aWVudCA9
IGRpZmZlcmVuY2UgLyAyODsKLSAgICBpbnQgcHJvZHVjdCA9IChxdW90aWVudCkgKiAyODsKLQot
ICAgIHllYXIgKz0gcHJvZHVjdDsKLSAgICBBU1NFUlQoKHllYXIgPj0gbWluWWVhciAmJiB5ZWFy
IDw9IG1heFllYXIpIHx8IChwcm9kdWN0IC0geWVhciA9PSBzdGF0aWNfY2FzdDxpbnQ+KE5hTikp
KTsKLSAgICByZXR1cm4geWVhcjsKLX0KLQotc3RhdGljIGludDMyX3QgY2FsY3VsYXRlVVRDT2Zm
c2V0KCkKLXsKLSAgICB0bSBsb2NhbHQ7Ci0gICAgbWVtc2V0KCZsb2NhbHQsIDAsIHNpemVvZihs
b2NhbHQpKTsKLSAKLSAgICAvLyBnZXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIHRpbWUg
em9uZSBhbmQgVVRDIG9uIEphbiAwMSwgMjAwMCAxMjowMDowMCBBTQotICAgIGxvY2FsdC50bV9t
ZGF5ID0gMTsKLSAgICBsb2NhbHQudG1feWVhciA9IDEwMDsKLSAgICB0aW1lX3QgdXRjT2Zmc2V0
ID0gOTQ2Njg0ODAwIC0gbWt0aW1lKCZsb2NhbHQpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludDMyX3Q+KHV0Y09mZnNldCAqIDEwMDApOwotfQotCi0jaWYgUExBVEZPUk0oREFSV0lOKQot
c3RhdGljIGludDMyX3Qgc19jYWNoZWRVVENPZmZzZXQ7IC8vIEluIG1pbGxpc2Vjb25kcy4gQW4g
YXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgYWNjZXNzIHRvIGFuIGludDMyX3QgdmFyaWFibGUgaXMg
YXRvbWljIG9uIHBsYXRmb3JtcyB0aGF0IHRha2UgdGhpcyBjb2RlIHBhdGguCi1zdGF0aWMgYm9v
bCBzX2hhdmVDYWNoZWRVVENPZmZzZXQ7Ci1zdGF0aWMgaW50IHNfbm90aWZpY2F0aW9uVG9rZW47
Ci0jZW5kaWYKLQotLyoKLSAqIEdldCB0aGUgZGlmZmVyZW5jZSBpbiBtaWxsaXNlY29uZHMgYmV0
d2VlbiB0aGlzIHRpbWUgem9uZSBhbmQgVVRDIChHTVQpCi0gKiBOT1QgaW5jbHVkaW5nIERTVC4K
LSAqLwotZG91YmxlIGdldFVUQ09mZnNldCgpCi17Ci0jaWYgUExBVEZPUk0oREFSV0lOKQotICAg
IGlmIChzX2hhdmVDYWNoZWRVVENPZmZzZXQpIHsKLSAgICAgICAgaW50IG5vdGlmaWVkOwotICAg
ICAgICB1aW50MzJfdCBzdGF0dXMgPSBub3RpZnlfY2hlY2soc19ub3RpZmljYXRpb25Ub2tlbiwg
Jm5vdGlmaWVkKTsKLSAgICAgICAgaWYgKHN0YXR1cyA9PSBOT1RJRllfU1RBVFVTX09LICYmICFu
b3RpZmllZCkKLSAgICAgICAgICAgIHJldHVybiBzX2NhY2hlZFVUQ09mZnNldDsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIGludDMyX3QgdXRjT2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7Ci0K
LSNpZiBQTEFURk9STShEQVJXSU4pCi0gICAgLy8gVGhlb3JldGljYWxseSwgaXQgaXMgcG9zc2li
bGUgdGhhdCBzZXZlcmFsIHRocmVhZHMgd2lsbCBiZSBleGVjdXRpbmcgdGhpcyBjb2RlIGF0IG9u
Y2UsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBoYXZlIGEgcmFjZSBjb25kaXRpb24sCi0gICAgLy8g
YW5kIGEgbmV3ZXIgdmFsdWUgbWF5IGJlIG92ZXJ3cml0dGVuLiBJbiBwcmFjdGljZSwgdGltZSB6
b25lcyBkb24ndCBjaGFuZ2UgdGhhdCBvZnRlbi4KLSAgICBzX2NhY2hlZFVUQ09mZnNldCA9IHV0
Y09mZnNldDsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHV0Y09mZnNldDsKLX0KLQotLyoKLSAqIEdl
dCB0aGUgRFNUIG9mZnNldCBmb3IgdGhlIHRpbWUgcGFzc2VkIGluLiAgVGFrZXMKLSAqIHNlY29u
ZHMgKG5vdCBtaWxsaXNlY29uZHMpIGFuZCBjYW5ub3QgaGFuZGxlIGRhdGVzIGJlZm9yZSAxOTcw
Ci0gKiBvbiBzb21lIE9TJwotICovCi1zdGF0aWMgZG91YmxlIGdldERTVE9mZnNldFNpbXBsZShk
b3VibGUgbG9jYWxUaW1lU2Vjb25kcywgZG91YmxlIHV0Y09mZnNldCkKLXsKLSAgICBpZiAobG9j
YWxUaW1lU2Vjb25kcyA+IG1heFVuaXhUaW1lKQotICAgICAgICBsb2NhbFRpbWVTZWNvbmRzID0g
bWF4VW5peFRpbWU7Ci0gICAgZWxzZSBpZiAobG9jYWxUaW1lU2Vjb25kcyA8IDApIC8vIEdvIGFo
ZWFkIGEgZGF5IHRvIG1ha2UgbG9jYWx0aW1lIHdvcmsgKGRvZXMgbm90IHdvcmsgd2l0aCAwKQot
ICAgICAgICBsb2NhbFRpbWVTZWNvbmRzICs9IHNlY29uZHNQZXJEYXk7Ci0KLSAgICAvL2lucHV0
IGlzIFVUQyBzbyB3ZSBoYXZlIHRvIHNoaWZ0IGJhY2sgdG8gbG9jYWwgdGltZSB0byBkZXRlcm1p
bmUgRFNUIHRodXMgdGhlICsgZ2V0VVRDT2Zmc2V0KCkKLSAgICBkb3VibGUgb2Zmc2V0VGltZSA9
IChsb2NhbFRpbWVTZWNvbmRzICogbXNQZXJTZWNvbmQpICsgdXRjT2Zmc2V0OwotCi0gICAgLy8g
T2Zmc2V0IGZyb20gVVRDIGJ1dCBkb2Vzbid0IGluY2x1ZGUgRFNUIG9idmlvdXNseQotICAgIGlu
dCBvZmZzZXRIb3VyID0gIG1zVG9Ib3VycyhvZmZzZXRUaW1lKTsKLSAgICBpbnQgb2Zmc2V0TWlu
dXRlID0gIG1zVG9NaW51dGVzKG9mZnNldFRpbWUpOwotCi0gICAgLy8gRklYTUU6IHRpbWVfdCBo
YXMgYSBwb3RlbnRpYWwgcHJvYmxlbSBpbiAyMDM4Ci0gICAgdGltZV90IGxvY2FsVGltZSA9IHN0
YXRpY19jYXN0PHRpbWVfdD4obG9jYWxUaW1lU2Vjb25kcyk7Ci0KLSAgICB0bSBsb2NhbFRNOwot
ICAgIGdldExvY2FsVGltZSgmbG9jYWxUaW1lLCAmbG9jYWxUTSk7Ci0KLSAgICBkb3VibGUgZGlm
ZiA9ICgobG9jYWxUTS50bV9ob3VyIC0gb2Zmc2V0SG91cikgKiBzZWNvbmRzUGVySG91cikgKyAo
KGxvY2FsVE0udG1fbWluIC0gb2Zmc2V0TWludXRlKSAqIDYwKTsKLQotICAgIGlmIChkaWZmIDwg
MCkKLSAgICAgICAgZGlmZiArPSBzZWNvbmRzUGVyRGF5OwotCi0gICAgcmV0dXJuIChkaWZmICog
bXNQZXJTZWNvbmQpOwotfQotCi0vLyBHZXQgdGhlIERTVCBvZmZzZXQsIGdpdmVuIGEgdGltZSBp
biBVVEMKLXN0YXRpYyBkb3VibGUgZ2V0RFNUT2Zmc2V0KGRvdWJsZSBtcywgZG91YmxlIHV0Y09m
ZnNldCkKLXsKLSAgICAvLyBPbiBNYWMgT1MgWCwgdGhlIGNhbGwgdG8gbG9jYWx0aW1lIChzZWUg
Z2V0RFNUT2Zmc2V0U2ltcGxlKSB3aWxsIHJldHVybiBoaXN0b3JpY2FsbHkgYWNjdXJhdGUKLSAg
ICAvLyBEU1QgaW5mb3JtYXRpb24gKGUuZy4gTmV3IFplYWxhbmQgZGlkIG5vdCBoYXZlIERTVCBm
cm9tIDE5NDYgdG8gMTk3NCkgaG93ZXZlciB0aGUgSmF2YVNjcmlwdAotICAgIC8vIHN0YW5kYXJk
IGV4cGxpY2l0bHkgZGljdGF0ZXMgdGhhdCBoaXN0b3JpY2FsIGluZm9ybWF0aW9uIHNob3VsZCBu
b3QgYmUgY29uc2lkZXJlZCB3aGVuCi0gICAgLy8gZGV0ZXJtaW5pbmcgRFNULiBGb3IgdGhpcyBy
ZWFzb24gd2Ugc2hpZnQgYXdheSBmcm9tIHllYXJzIHRoYXQgbG9jYWx0aW1lIGNhbiBoYW5kbGUg
YnV0IHdvdWxkCi0gICAgLy8gcmV0dXJuIGhpc3RvcmljYWxseSBhY2N1cmF0ZSBpbmZvcm1hdGlv
bi4KLSAgICBpbnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKLSAgICBpbnQgZXF1aXZhbGVudFllYXIg
PSBlcXVpdmFsZW50WWVhckZvckRTVCh5ZWFyKTsKLSAgICBpZiAoeWVhciAhPSBlcXVpdmFsZW50
WWVhcikgewotICAgICAgICBib29sIGxlYXBZZWFyID0gaXNMZWFwWWVhcih5ZWFyKTsKLSAgICAg
ICAgaW50IGRheUluWWVhckxvY2FsID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKLSAgICAgICAgaW50
IGRheUluTW9udGggPSBkYXlJbk1vbnRoRnJvbURheUluWWVhcihkYXlJblllYXJMb2NhbCwgbGVh
cFllYXIpOwotICAgICAgICBpbnQgbW9udGggPSBtb250aEZyb21EYXlJblllYXIoZGF5SW5ZZWFy
TG9jYWwsIGxlYXBZZWFyKTsKLSAgICAgICAgaW50IGRheSA9IGRhdGVUb0RheUluWWVhcihlcXVp
dmFsZW50WWVhciwgbW9udGgsIGRheUluTW9udGgpOwotICAgICAgICBtcyA9IChkYXkgKiBtc1Bl
ckRheSkgKyBtc1RvTWlsbGlzZWNvbmRzKG1zKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ2V0RFNU
T2Zmc2V0U2ltcGxlKG1zIC8gbXNQZXJTZWNvbmQsIHV0Y09mZnNldCk7Ci19Ci0KLWRvdWJsZSBn
cmVnb3JpYW5EYXRlVGltZVRvTVMoY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmIHQsIGRvdWJsZSBt
aWxsaVNlY29uZHMsIGJvb2wgaW5wdXRJc1VUQykKLXsKLSAgICBpbnQgZGF5ID0gZGF0ZVRvRGF5
SW5ZZWFyKHQueWVhciArIDE5MDAsIHQubW9udGgsIHQubW9udGhEYXkpOwotICAgIGRvdWJsZSBt
cyA9IHRpbWVUb01TKHQuaG91ciwgdC5taW51dGUsIHQuc2Vjb25kLCBtaWxsaVNlY29uZHMpOwot
ICAgIGRvdWJsZSByZXN1bHQgPSAoZGF5ICogbXNQZXJEYXkpICsgbXM7Ci0KLSAgICBpZiAoIWlu
cHV0SXNVVEMpIHsgLy8gY29udmVydCB0byBVVEMKLSAgICAgICAgZG91YmxlIHV0Y09mZnNldCA9
IGdldFVUQ09mZnNldCgpOwotICAgICAgICByZXN1bHQgLT0gdXRjT2Zmc2V0OwotICAgICAgICBy
ZXN1bHQgLT0gZ2V0RFNUT2Zmc2V0KHJlc3VsdCwgdXRjT2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIG1zVG9HcmVnb3JpYW5EYXRlVGltZShkb3VibGUgbXMs
IGJvb2wgb3V0cHV0SXNVVEMsIEdyZWdvcmlhbkRhdGVUaW1lJiB0bSkKLXsKLSAgICAvLyBpbnB1
dCBpcyBVVEMKLSAgICBkb3VibGUgZHN0T2ZmID0gMC4wOwotICAgIGNvbnN0IGRvdWJsZSB1dGNP
ZmYgPSBnZXRVVENPZmZzZXQoKTsKLQotICAgIGlmICghb3V0cHV0SXNVVEMpIHsgIC8vIGNvbnZl
cnQgdG8gbG9jYWwgdGltZQotICAgICAgICBkc3RPZmYgPSBnZXREU1RPZmZzZXQobXMsIHV0Y09m
Zik7Ci0gICAgICAgIG1zICs9IGRzdE9mZiArIHV0Y09mZjsKLSAgICB9Ci0KLSAgICBjb25zdCBp
bnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKLSAgICB0bS5zZWNvbmQgICA9ICBtc1RvU2Vjb25kcyht
cyk7Ci0gICAgdG0ubWludXRlICAgPSAgbXNUb01pbnV0ZXMobXMpOwotICAgIHRtLmhvdXIgICAg
ID0gIG1zVG9Ib3Vycyhtcyk7Ci0gICAgdG0ud2Vla0RheSAgPSAgbXNUb1dlZWtEYXkobXMpOwot
ICAgIHRtLnllYXJEYXkgID0gIGRheUluWWVhcihtcywgeWVhcik7Ci0gICAgdG0ubW9udGhEYXkg
PSAgZGF5SW5Nb250aEZyb21EYXlJblllYXIodG0ueWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7
Ci0gICAgdG0ubW9udGggICAgPSAgbW9udGhGcm9tRGF5SW5ZZWFyKHRtLnllYXJEYXksIGlzTGVh
cFllYXIoeWVhcikpOwotICAgIHRtLnllYXIgICAgID0gIHllYXIgLSAxOTAwOwotICAgIHRtLmlz
RFNUICAgID0gIGRzdE9mZiAhPSAwLjA7Ci0KLSAgICB0bS51dGNPZmZzZXQgPSBzdGF0aWNfY2Fz
dDxsb25nPigoZHN0T2ZmICsgdXRjT2ZmKSAvIG1zUGVyU2Vjb25kKTsKLSAgICB0bS50aW1lWm9u
ZSA9IE5VTEw7Ci19Ci0KLXZvaWQgaW5pdERhdGVNYXRoKCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgc3RhdGljIGJvb2wgYWxyZWFkeUluaXRpYWxpemVkOwotICAgIEFTU0VSVCghYWxyZWFkeUlu
aXRpYWxpemVkKyspOwotI2VuZGlmCi0KLSAgICBlcXVpdmFsZW50WWVhckZvckRTVCgyMDAwKTsg
Ly8gTmVlZCB0byBjYWxsIG9uY2UgdG8gaW5pdGlhbGl6ZSBhIHN0YXRpYyB1c2VkIGluIHRoaXMg
ZnVuY3Rpb24uCi0jaWYgUExBVEZPUk0oREFSV0lOKQotICAgIC8vIFJlZ2lzdGVyIGZvciBhIG5v
dGlmaWNhdGlvbiB3aGVuZXZlciB0aGUgdGltZSB6b25lIGNoYW5nZXMuCi0gICAgdWludDMyX3Qg
c3RhdHVzID0gbm90aWZ5X3JlZ2lzdGVyX2NoZWNrKCJjb20uYXBwbGUuc3lzdGVtLnRpbWV6b25l
IiwgJnNfbm90aWZpY2F0aW9uVG9rZW4pOwotICAgIGlmIChzdGF0dXMgPT0gTk9USUZZX1NUQVRV
U19PSykgewotICAgICAgICBzX2NhY2hlZFVUQ09mZnNldCA9IGNhbGN1bGF0ZVVUQ09mZnNldCgp
OwotICAgICAgICBzX2hhdmVDYWNoZWRVVENPZmZzZXQgPSB0cnVlOwotICAgIH0KLSNlbmRpZgot
fQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSB5bWRobXNUb1NlY29uZHMobG9uZyB5ZWFyLCBpbnQg
bW9uLCBpbnQgZGF5LCBpbnQgaG91ciwgaW50IG1pbnV0ZSwgaW50IHNlY29uZCkKLXsKLSAgICBk
b3VibGUgZGF5cyA9IChkYXkgLSAzMjA3NSkKLSAgICAgICAgKyBmbG9vcigxNDYxICogKHllYXIg
KyA0ODAwLjAgKyAobW9uIC0gMTQpIC8gMTIpIC8gNCkKLSAgICAgICAgKyAzNjcgKiAobW9uIC0g
MiAtIChtb24gLSAxNCkgLyAxMiAqIDEyKSAvIDEyCi0gICAgICAgIC0gZmxvb3IoMyAqICgoeWVh
ciArIDQ5MDAuMCArIChtb24gLSAxNCkgLyAxMikgLyAxMDApIC8gNCkKLSAgICAgICAgLSAyNDQw
NTg4OwotICAgIHJldHVybiAoKGRheXMgKiBob3Vyc1BlckRheSArIGhvdXIpICogbWludXRlc1Bl
ckhvdXIgKyBtaW51dGUpICogc2Vjb25kc1Blck1pbnV0ZSArIHNlY29uZDsKLX0KLQotLy8gV2Ug
Zm9sbG93IHRoZSByZWNvbW1lbmRhdGlvbiBvZiBSRkMgMjgyMiB0byBjb25zaWRlciBhbGwKLS8v
IG9ic29sZXRlIHRpbWUgem9uZXMgbm90IGxpc3RlZCBoZXJlIGVxdWl2YWxlbnQgdG8gIi0wMDAw
Ii4KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgS25vd25ab25lIHsKLSNpZiAhUExBVEZPUk0oV0lOX09T
KQotICAgIGNvbnN0Ci0jZW5kaWYKLSAgICAgICAgY2hhciB0ek5hbWVbNF07Ci0gICAgaW50IHR6
T2Zmc2V0OwotfSBrbm93bl96b25lc1tdID0gewotICAgIHsgIlVUIiwgMCB9LAotICAgIHsgIkdN
VCIsIDAgfSwKLSAgICB7ICJFU1QiLCAtMzAwIH0sCi0gICAgeyAiRURUIiwgLTI0MCB9LAotICAg
IHsgIkNTVCIsIC0zNjAgfSwKLSAgICB7ICJDRFQiLCAtMzAwIH0sCi0gICAgeyAiTVNUIiwgLTQy
MCB9LAotICAgIHsgIk1EVCIsIC0zNjAgfSwKLSAgICB7ICJQU1QiLCAtNDgwIH0sCi0gICAgeyAi
UERUIiwgLTQyMCB9Ci19OwotCi1pbmxpbmUgc3RhdGljIHZvaWQgc2tpcFNwYWNlc0FuZENvbW1l
bnRzKGNvbnN0IGNoYXIqJiBzKQotewotICAgIGludCBuZXN0aW5nID0gMDsKLSAgICBjaGFyIGNo
OwotICAgIHdoaWxlICgoY2ggPSAqcykpIHsKLSAgICAgICAgaWYgKCFpc0FTQ0lJU3BhY2UoY2gp
KSB7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJygnKQotICAgICAgICAgICAgICAgIG5lc3Rpbmcr
KzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICcpJyAmJiBuZXN0aW5nID4gMCkKLSAgICAg
ICAgICAgICAgICBuZXN0aW5nLS07Ci0gICAgICAgICAgICBlbHNlIGlmIChuZXN0aW5nID09IDAp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcysrOwotICAgIH0K
LX0KLQotLy8gcmV0dXJucyAwLTExIChKYW4tRGVjKTsgLTEgb24gZmFpbHVyZQotc3RhdGljIGlu
dCBmaW5kTW9udGgoY29uc3QgY2hhciogbW9udGhTdHIpCi17Ci0gICAgQVNTRVJUKG1vbnRoU3Ry
KTsKLSAgICBjaGFyIG5lZWRsZVs0XTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkg
ewotICAgICAgICBpZiAoISptb250aFN0cikKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAg
ICAgbmVlZGxlW2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4odG9BU0NJSUxvd2VyKCptb250aFN0cisr
KSk7Ci0gICAgfQotICAgIG5lZWRsZVszXSA9ICdcMCc7Ci0gICAgY29uc3QgY2hhciAqaGF5c3Rh
Y2sgPSAiamFuZmVibWFyYXBybWF5anVuanVsYXVnc2Vwb2N0bm92ZGVjIjsKLSAgICBjb25zdCBj
aGFyICpzdHIgPSBzdHJzdHIoaGF5c3RhY2ssIG5lZWRsZSk7Ci0gICAgaWYgKHN0cikgewotICAg
ICAgICBpbnQgcG9zaXRpb24gPSBzdGF0aWNfY2FzdDxpbnQ+KHN0ciAtIGhheXN0YWNrKTsKLSAg
ICAgICAgaWYgKHBvc2l0aW9uICUgMyA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9u
IC8gMzsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgYm9vbCBwYXJzZUxvbmco
Y29uc3QgY2hhciogc3RyaW5nLCBjaGFyKiogc3RvcFBvc2l0aW9uLCBpbnQgYmFzZSwgbG9uZyog
cmVzdWx0KQotewotICAgICpyZXN1bHQgPSBzdHJ0b2woc3RyaW5nLCBzdG9wUG9zaXRpb24sIGJh
c2UpOwotICAgIC8vIEF2b2lkIHRoZSB1c2Ugb2YgZXJybm8gYXMgaXQgaXMgbm90IGF2YWlsYWJs
ZSBvbiBXaW5kb3dzIENFCi0gICAgaWYgKHN0cmluZyA9PSAqc3RvcFBvc2l0aW9uIHx8ICpyZXN1
bHQgPT0gTE9OR19NSU4gfHwgKnJlc3VsdCA9PSBMT05HX01BWCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCiBkb3VibGUgcGFyc2VEYXRlKGNvbnN0IFVTdHJp
bmcgJmRhdGUpCiB7Ci0gICAgLy8gVGhpcyBwYXJzZXMgYSBkYXRlIGluIHRoZSBmb3JtOgotICAg
IC8vICAgICBUdWVzZGF5LCAwOS1Ob3YtOTkgMjM6MTI6NDAgR01UCi0gICAgLy8gb3IKLSAgICAv
LyAgICAgU2F0LCAwMS1KYW4tMjAwMCAwODowMDowMCBHTVQKLSAgICAvLyBvcgotICAgIC8vICAg
ICBTYXQsIDAxIEphbiAyMDAwIDA4OjAwOjAwIEdNVAotICAgIC8vIG9yCi0gICAgLy8gICAgIDAx
IEphbiA5OSAyMjowMCArMDEwMCAgICAoZXhjZXB0aW9ucyBpbiByZmM4MjIvcmZjMjgyMikKLSAg
ICAvLyAjIyMgbm9uIFJGQyBmb3JtYXRzLCBhZGRlZCBmb3IgSmF2YXNjcmlwdDoKLSAgICAvLyAg
ICAgW1dlZG5lc2RheV0gSmFudWFyeSAwOSAxOTk5IDIzOjEyOjQwIEdNVAotICAgIC8vICAgICBb
V2VkbmVzZGF5XSBKYW51YXJ5IDA5IDIzOjEyOjQwIEdNVCAxOTk5Ci0gICAgLy8KLSAgICAvLyBX
ZSBpZ25vcmUgdGhlIHdlZWtkYXkuCi0KLSAgICBDU3RyaW5nIGRhdGVDU3RyaW5nID0gZGF0ZS5V
VEY4U3RyaW5nKCk7Ci0gICAgY29uc3QgY2hhciAqZGF0ZVN0cmluZyA9IGRhdGVDU3RyaW5nLmNf
c3RyKCk7Ci0gICAgIAotICAgIC8vIFNraXAgbGVhZGluZyBzcGFjZQotICAgIHNraXBTcGFjZXNB
bmRDb21tZW50cyhkYXRlU3RyaW5nKTsKLQotICAgIGxvbmcgbW9udGggPSAtMTsKLSAgICBjb25z
dCBjaGFyICp3b3JkU3RhcnQgPSBkYXRlU3RyaW5nOwotICAgIC8vIENoZWNrIGNvbnRlbnRzIG9m
IGZpcnN0IHdvcmRzIGlmIG5vdCBudW1iZXIKLSAgICB3aGlsZSAoKmRhdGVTdHJpbmcgJiYgIWlz
QVNDSUlEaWdpdCgqZGF0ZVN0cmluZykpIHsKLSAgICAgICAgaWYgKGlzQVNDSUlTcGFjZSgqZGF0
ZVN0cmluZykgfHwgKmRhdGVTdHJpbmcgPT0gJygnKSB7Ci0gICAgICAgICAgICBpZiAoZGF0ZVN0
cmluZyAtIHdvcmRTdGFydCA+PSAzKQotICAgICAgICAgICAgICAgIG1vbnRoID0gZmluZE1vbnRo
KHdvcmRTdGFydCk7Ci0gICAgICAgICAgICBza2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0cmlu
Zyk7Ci0gICAgICAgICAgICB3b3JkU3RhcnQgPSBkYXRlU3RyaW5nOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgZGF0ZVN0cmluZysrOwotICAgIH0KLQotICAgIC8vIE1pc3NpbmcgZGVsaW1p
dGVyIGJldHdlZW4gbW9udGggYW5kIGRheSAobGlrZSAiSmFudWFyeTI5Iik/Ci0gICAgaWYgKG1v
bnRoID09IC0xICYmIHdvcmRTdGFydCAhPSBkYXRlU3RyaW5nKQotICAgICAgICBtb250aCA9IGZp
bmRNb250aCh3b3JkU3RhcnQpOwotCi0gICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJp
bmcpOwotCi0gICAgaWYgKCEqZGF0ZVN0cmluZykKLSAgICAgICAgcmV0dXJuIE5hTjsKLQotICAg
IC8vICcgMDktTm92LTk5IDIzOjEyOjQwIEdNVCcKLSAgICBjaGFyKiBuZXdQb3NTdHI7Ci0gICAg
bG9uZyBkYXk7Ci0gICAgaWYgKCFwYXJzZUxvbmcoZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTAs
ICZkYXkpKQotICAgICAgICByZXR1cm4gTmFOOwotICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7
Ci0KLSAgICBpZiAoISpkYXRlU3RyaW5nKQotICAgICAgICByZXR1cm4gTmFOOwotCi0gICAgaWYg
KGRheSA8IDApCi0gICAgICAgIHJldHVybiBOYU47Ci0KLSAgICBsb25nIHllYXIgPSAwOwotICAg
IGlmIChkYXkgPiAzMSkgewotICAgICAgICAvLyAjIyMgd2hlcmUgaXMgdGhlIGJvdW5kYXJ5IGFu
ZCB3aGF0IGhhcHBlbnMgYmVsb3c/Ci0gICAgICAgIGlmICgqZGF0ZVN0cmluZyAhPSAnLycpCi0g
ICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICAvLyBsb29rcyBsaWtlIGEgWVlZWS9NTS9E
RCBkYXRlCi0gICAgICAgIGlmICghKisrZGF0ZVN0cmluZykKLSAgICAgICAgICAgIHJldHVybiBO
YU47Ci0gICAgICAgIHllYXIgPSBkYXk7Ci0gICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJp
bmcsICZuZXdQb3NTdHIsIDEwLCAmbW9udGgpKQotICAgICAgICAgICAgcmV0dXJuIE5hTjsKLSAg
ICAgICAgbW9udGggLT0gMTsKLSAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKLSAgICAg
ICAgaWYgKCpkYXRlU3RyaW5nKysgIT0gJy8nIHx8ICEqZGF0ZVN0cmluZykKLSAgICAgICAgICAg
IHJldHVybiBOYU47Ci0gICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NT
dHIsIDEwLCAmZGF5KSkKLSAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAgIGRhdGVTdHJp
bmcgPSBuZXdQb3NTdHI7Ci0gICAgfSBlbHNlIGlmICgqZGF0ZVN0cmluZyA9PSAnLycgJiYgbW9u
dGggPT0gLTEpIHsKLSAgICAgICAgZGF0ZVN0cmluZysrOwotICAgICAgICAvLyBUaGlzIGxvb2tz
IGxpa2UgYSBNTS9ERC9ZWVlZIGRhdGUsIG5vdCBhbiBSRkMgZGF0ZS4KLSAgICAgICAgbW9udGgg
PSBkYXkgLSAxOyAvLyAwLWJhc2VkCi0gICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcs
ICZuZXdQb3NTdHIsIDEwLCAmZGF5KSkKLSAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAg
IGlmIChkYXkgPCAxIHx8IGRheSA+IDMxKQotICAgICAgICAgICAgcmV0dXJuIE5hTjsKLSAgICAg
ICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKLSAgICAgICAgaWYgKCpkYXRlU3RyaW5nID09ICcv
JykKLSAgICAgICAgICAgIGRhdGVTdHJpbmcrKzsKLSAgICAgICAgaWYgKCEqZGF0ZVN0cmluZykK
LSAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgqZGF0
ZVN0cmluZyA9PSAnLScpCi0gICAgICAgICAgICBkYXRlU3RyaW5nKys7Ci0KLSAgICAgICAgc2tp
cFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOwotCi0gICAgICAgIGlmICgqZGF0ZVN0cmlu
ZyA9PSAnLCcpCi0gICAgICAgICAgICBkYXRlU3RyaW5nKys7Ci0KLSAgICAgICAgaWYgKG1vbnRo
ID09IC0xKSB7IC8vIG5vdCBmb3VuZCB5ZXQKLSAgICAgICAgICAgIG1vbnRoID0gZmluZE1vbnRo
KGRhdGVTdHJpbmcpOwotICAgICAgICAgICAgaWYgKG1vbnRoID09IC0xKQotICAgICAgICAgICAg
ICAgIHJldHVybiBOYU47Ci0KLSAgICAgICAgICAgIHdoaWxlICgqZGF0ZVN0cmluZyAmJiAqZGF0
ZVN0cmluZyAhPSAnLScgJiYgKmRhdGVTdHJpbmcgIT0gJywnICYmICFpc0FTQ0lJU3BhY2UoKmRh
dGVTdHJpbmcpKQotICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcrKzsKLQotICAgICAgICAgICAg
aWYgKCEqZGF0ZVN0cmluZykKLSAgICAgICAgICAgICAgICByZXR1cm4gTmFOOwotCi0gICAgICAg
ICAgICAvLyAnLTk5IDIzOjEyOjQwIEdNVCcKLSAgICAgICAgICAgIGlmICgqZGF0ZVN0cmluZyAh
PSAnLScgJiYgKmRhdGVTdHJpbmcgIT0gJy8nICYmICpkYXRlU3RyaW5nICE9ICcsJyAmJiAhaXNB
U0NJSVNwYWNlKCpkYXRlU3RyaW5nKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTmFOOwotICAg
ICAgICAgICAgZGF0ZVN0cmluZysrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1vbnRo
IDwgMCB8fCBtb250aCA+IDExKQotICAgICAgICByZXR1cm4gTmFOOwotCi0gICAgLy8gJzk5IDIz
OjEyOjQwIEdNVCcKLSAgICBpZiAoeWVhciA8PSAwICYmICpkYXRlU3RyaW5nKSB7Ci0gICAgICAg
IGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmeWVhcikpCi0gICAg
ICAgICAgICByZXR1cm4gTmFOOwotICAgIH0KLSAgICAKLSAgICAvLyBEb24ndCBmYWlsIGlmIHRo
ZSB0aW1lIGlzIG1pc3NpbmcuCi0gICAgbG9uZyBob3VyID0gMDsKLSAgICBsb25nIG1pbnV0ZSA9
IDA7Ci0gICAgbG9uZyBzZWNvbmQgPSAwOwotICAgIGlmICghKm5ld1Bvc1N0cikKLSAgICAgICAg
ZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gJyAyMzoxMjo0
MCBHTVQnCi0gICAgICAgIGlmICghKGlzQVNDSUlTcGFjZSgqbmV3UG9zU3RyKSB8fCAqbmV3UG9z
U3RyID09ICcsJykpIHsKLSAgICAgICAgICAgIGlmICgqbmV3UG9zU3RyICE9ICc6JykKLSAgICAg
ICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICAgICAgLy8gVGhlcmUgd2FzIG5vIHllYXI7
IHRoZSBudW1iZXIgd2FzIHRoZSBob3VyLgotICAgICAgICAgICAgeWVhciA9IC0xOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gaW4gdGhlIG5vcm1hbCBjYXNlICh3ZSBwYXJzZWQg
dGhlIHllYXIpLCBhZHZhbmNlIHRvIHRoZSBuZXh0IG51bWJlcgotICAgICAgICAgICAgZGF0ZVN0
cmluZyA9ICsrbmV3UG9zU3RyOwotICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRh
dGVTdHJpbmcpOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyc2VMb25nKGRhdGVTdHJpbmcsICZu
ZXdQb3NTdHIsIDEwLCAmaG91cik7Ci0gICAgICAgIC8vIERvIG5vdCBjaGVjayBmb3IgZXJybm8g
aGVyZSBzaW5jZSB3ZSB3YW50IHRvIGNvbnRpbnVlCi0gICAgICAgIC8vIGV2ZW4gaWYgZXJybm8g
d2FzIHNldCBiZWNhc3VlIHdlIGFyZSBzdGlsbCBsb29raW5nCi0gICAgICAgIC8vIGZvciB0aGUg
dGltZXpvbmUhCi0KLSAgICAgICAgLy8gUmVhZCBhIG51bWJlcj8gSWYgbm90LCB0aGlzIG1pZ2h0
IGJlIGEgdGltZXpvbmUgbmFtZS4KLSAgICAgICAgaWYgKG5ld1Bvc1N0ciAhPSBkYXRlU3RyaW5n
KSB7Ci0gICAgICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwotCi0gICAgICAgICAgICBp
ZiAoaG91ciA8IDAgfHwgaG91ciA+IDIzKQotICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0K
LSAgICAgICAgICAgIGlmICghKmRhdGVTdHJpbmcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5h
TjsKLQotICAgICAgICAgICAgLy8gJzoxMjo0MCBHTVQnCi0gICAgICAgICAgICBpZiAoKmRhdGVT
dHJpbmcrKyAhPSAnOicpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKLQotICAgICAgICAg
ICAgaWYgKCFwYXJzZUxvbmcoZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTAsICZtaW51dGUpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAgICAgICBkYXRlU3RyaW5nID0gbmV3
UG9zU3RyOwotCi0gICAgICAgICAgICBpZiAobWludXRlIDwgMCB8fCBtaW51dGUgPiA1OSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTmFOOwotCi0gICAgICAgICAgICAvLyAnOjQwIEdNVCcKLSAg
ICAgICAgICAgIGlmICgqZGF0ZVN0cmluZyAmJiAqZGF0ZVN0cmluZyAhPSAnOicgJiYgIWlzQVND
SUlTcGFjZSgqZGF0ZVN0cmluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKLQotICAg
ICAgICAgICAgLy8gc2Vjb25kcyBhcmUgb3B0aW9uYWwgaW4gcmZjODIyICsgcmZjMjgyMgotICAg
ICAgICAgICAgaWYgKCpkYXRlU3RyaW5nID09JzonKSB7Ci0gICAgICAgICAgICAgICAgZGF0ZVN0
cmluZysrOwotCi0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZUxvbmcoZGF0ZVN0cmluZywgJm5l
d1Bvc1N0ciwgMTAsICZzZWNvbmQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFOOwot
ICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoc2Vjb25kIDwgMCB8fCBzZWNvbmQgPiA1OSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE5hTjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2tpcFNw
YWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOwotCi0gICAgICAgICAgICBpZiAoc3RybmNhc2Vj
bXAoZGF0ZVN0cmluZywgIkFNIiwgMikgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChob3Vy
ID4gMTIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAgICAgICAgICAg
aWYgKGhvdXIgPT0gMTIpCi0gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwOwotICAgICAgICAg
ICAgICAgIGRhdGVTdHJpbmcgKz0gMjsKLSAgICAgICAgICAgICAgICBza2lwU3BhY2VzQW5kQ29t
bWVudHMoZGF0ZVN0cmluZyk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cm5jYXNlY21wKGRh
dGVTdHJpbmcsICJQTSIsIDIpID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoaG91ciA+IDEy
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICAgICAgICAgIGlmICho
b3VyICE9IDEyKQotICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyOwotICAgICAgICAgICAg
ICAgIGRhdGVTdHJpbmcgKz0gMjsKLSAgICAgICAgICAgICAgICBza2lwU3BhY2VzQW5kQ29tbWVu
dHMoZGF0ZVN0cmluZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBi
b29sIGhhdmVUWiA9IGZhbHNlOwotICAgIGludCBvZmZzZXQgPSAwOwotCi0gICAgLy8gRG9uJ3Qg
ZmFpbCBpZiB0aGUgdGltZSB6b25lIGlzIG1pc3NpbmcuIAotICAgIC8vIFNvbWUgd2Vic2l0ZXMg
b21pdCB0aGUgdGltZSB6b25lICg0Mjc1MjA2KS4KLSAgICBpZiAoKmRhdGVTdHJpbmcpIHsKLSAg
ICAgICAgaWYgKHN0cm5jYXNlY21wKGRhdGVTdHJpbmcsICJHTVQiLCAzKSA9PSAwIHx8IHN0cm5j
YXNlY21wKGRhdGVTdHJpbmcsICJVVEMiLCAzKSA9PSAwKSB7Ci0gICAgICAgICAgICBkYXRlU3Ry
aW5nICs9IDM7Ci0gICAgICAgICAgICBoYXZlVFogPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCpkYXRlU3RyaW5nID09ICcrJyB8fCAqZGF0ZVN0cmluZyA9PSAnLScpIHsKLSAgICAg
ICAgICAgIGxvbmcgbzsKLSAgICAgICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZu
ZXdQb3NTdHIsIDEwLCAmbykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKLSAgICAgICAg
ICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7Ci0KLSAgICAgICAgICAgIGlmIChvIDwgLTk5NTkg
fHwgbyA+IDk5NTkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKLQotICAgICAgICAgICAg
aW50IHNnbiA9IChvIDwgMCkgPyAtMSA6IDE7Ci0gICAgICAgICAgICBvID0gYWJzKG8pOwotICAg
ICAgICAgICAgaWYgKCpkYXRlU3RyaW5nICE9ICc6JykgewotICAgICAgICAgICAgICAgIG9mZnNl
dCA9ICgobyAvIDEwMCkgKiA2MCArIChvICUgMTAwKSkgKiBzZ247Ci0gICAgICAgICAgICB9IGVs
c2UgeyAvLyBHTVQrMDU6MDAKLSAgICAgICAgICAgICAgICBsb25nIG8yOwotICAgICAgICAgICAg
ICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmbzIpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcg
PSBuZXdQb3NTdHI7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gKG8gKiA2MCArIG8yKSAqIHNn
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGhhdmVUWiA9IHRydWU7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGludChzaXplb2Yoa25vd25f
em9uZXMpIC8gc2l6ZW9mKEtub3duWm9uZSkpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAo
MCA9PSBzdHJuY2FzZWNtcChkYXRlU3RyaW5nLCBrbm93bl96b25lc1tpXS50ek5hbWUsIHN0cmxl
bihrbm93bl96b25lc1tpXS50ek5hbWUpKSkgewotICAgICAgICAgICAgICAgICAgICBvZmZzZXQg
PSBrbm93bl96b25lc1tpXS50ek9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgZGF0ZVN0cmlu
ZyArPSBzdHJsZW4oa25vd25fem9uZXNbaV0udHpOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAg
aGF2ZVRaID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgc2tpcFNwYWNlc0Fu
ZENvbW1lbnRzKGRhdGVTdHJpbmcpOwotCi0gICAgaWYgKCpkYXRlU3RyaW5nICYmIHllYXIgPT0g
LTEpIHsKLSAgICAgICAgaWYgKCFwYXJzZUxvbmcoZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTAs
ICZ5ZWFyKSkKLSAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAgIGRhdGVTdHJpbmcgPSBu
ZXdQb3NTdHI7Ci0gICAgfQotICAgICAKLSAgICBza2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0
cmluZyk7Ci0gICAgIAotICAgIC8vIFRyYWlsaW5nIGdhcmJhZ2UKLSAgICBpZiAoKmRhdGVTdHJp
bmcpCi0gICAgICAgIHJldHVybiBOYU47Ci0KLSAgICAvLyBZMks6IEhhbmRsZSAyIGRpZ2l0IHll
YXJzLgotICAgIGlmICh5ZWFyID49IDAgJiYgeWVhciA8IDEwMCkgewotICAgICAgICBpZiAoeWVh
ciA8IDUwKQotICAgICAgICAgICAgeWVhciArPSAyMDAwOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB5ZWFyICs9IDE5MDA7Ci0gICAgfQotCi0gICAgLy8gZmFsbCBiYWNrIHRvIGxvY2FsIHRp
bWV6b25lCi0gICAgaWYgKCFoYXZlVFopIHsKLSAgICAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsK
LSAgICAgICAgdC5tb250aERheSA9IGRheTsKLSAgICAgICAgdC5tb250aCA9IG1vbnRoOwotICAg
ICAgICB0LnllYXIgPSB5ZWFyIC0gMTkwMDsKLSAgICAgICAgdC5pc0RTVCA9IC0xOwotICAgICAg
ICB0LnNlY29uZCA9IHNlY29uZDsKLSAgICAgICAgdC5taW51dGUgPSBtaW51dGU7Ci0gICAgICAg
IHQuaG91ciA9IGhvdXI7Ci0KLSAgICAgICAgLy8gVXNlIG91ciBncmVnb3JpYW5EYXRlVGltZVRv
TVMoKSByYXRoZXIgdGhhbiBta3RpbWUoKSBhcyB0aGUgbGF0dGVyIGNhbid0IGhhbmRsZSB0aGUg
ZnVsbCB5ZWFyIHJhbmdlLgotICAgICAgICByZXR1cm4gZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHQs
IDAsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKHltZGhtc1RvU2Vjb25kcyh5ZWFyLCBt
b250aCArIDEsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpIC0gKG9mZnNldCAqIDYwLjApKSAq
IG1zUGVyU2Vjb25kOwotfQotCi1kb3VibGUgdGltZUNsaXAoZG91YmxlIHQpCi17Ci0gICAgaWYg
KCFpc2Zpbml0ZSh0KSkKLSAgICAgICAgcmV0dXJuIE5hTjsKLSAgICBpZiAoZmFicyh0KSA+IDgu
NjRFMTUpCi0gICAgICAgIHJldHVybiBOYU47Ci0gICAgcmV0dXJuIHRydW5jKHQpOworICAgIHJl
dHVybiBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGRhdGUuVVRGOFN0cmlu
ZygpLmNfc3RyKCkpOwogfQogCiBVU3RyaW5nIGZvcm1hdERhdGUoY29uc3QgR3JlZ29yaWFuRGF0
ZVRpbWUgJnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVDb252ZXJzaW9uLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWVyZ2VpbmZvCgpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29udmVyc2lvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnZlcnNpb24uaAkocmV2aXNpb24gNDQ1MDEpCShm
cm9tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZU1hdGguaDo0NDUwMSkKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnZlcnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIu
MQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1v
emlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUg
TGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRw
Oi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRl
ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lU
SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2Vl
IHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdo
dHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3Jp
Z2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29kZSwgcmVsZWFzZWQK
KyAqIE1hcmNoIDMxLCAxOTk4LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUg
T3JpZ2luYWwgQ29kZSBpcworICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24u
CisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJp
Z2h0IChDKSAxOTk4CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNv
bnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVp
dGhlciBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVy
ICh0aGUgIkdQTCIpLAorICogb3IgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRo
ZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVh
ZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZl
cnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhl
IEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3Vy
IHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0
ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQg
cmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVx
dWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRo
ZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0
aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBH
UEwgb3IgdGhlIExHUEwuCisgKgorICovCisKKyNpZm5kZWYgRGF0ZU1hdGhfaAorI2RlZmluZSBE
YXRlTWF0aF9oCisKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBVU3Ry
aW5nOworc3RydWN0IEdyZWdvcmlhbkRhdGVUaW1lOworCit2b2lkIGluaXREYXRlTWF0aCgpOwor
dm9pZCBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoZG91YmxlLCBib29sIG91dHB1dElzVVRDLCBHcmVn
b3JpYW5EYXRlVGltZSYpOworZG91YmxlIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhjb25zdCBHcmVn
b3JpYW5EYXRlVGltZSYsIGRvdWJsZSwgYm9vbCBpbnB1dElzVVRDKTsKK2RvdWJsZSBnZXRVVENP
ZmZzZXQoKTsKK2ludCBlcXVpdmFsZW50WWVhckZvckRTVChpbnQgeWVhcik7Citkb3VibGUgZ2V0
Q3VycmVudFVUQ1RpbWUoKTsKK2RvdWJsZSBnZXRDdXJyZW50VVRDVGltZVdpdGhNaWNyb3NlY29u
ZHMoKTsKK3ZvaWQgZ2V0TG9jYWxUaW1lKGNvbnN0IHRpbWVfdCosIHRtKik7CisKKy8vIE5vdCBy
ZWFsbHkgbWF0aCByZWxhdGVkLCBidXQgdGhpcyBpcyBjdXJyZW50bHkgdGhlIG9ubHkgc2hhcmVk
IHBsYWNlIHRvIHB1dCB0aGVzZS4gIAorZG91YmxlIHBhcnNlRGF0ZShjb25zdCBVU3RyaW5nJik7
Citkb3VibGUgdGltZUNsaXAoZG91YmxlKTsKK1VTdHJpbmcgZm9ybWF0RGF0ZShjb25zdCBHcmVn
b3JpYW5EYXRlVGltZSYpOworVVN0cmluZyBmb3JtYXREYXRlVVRDVmFyaWFudChjb25zdCBHcmVn
b3JpYW5EYXRlVGltZSYpOworVVN0cmluZyBmb3JtYXRUaW1lKGNvbnN0IEdyZWdvcmlhbkRhdGVU
aW1lJiwgYm9vbCBpbnB1dElzVVRDKTsKKworCitjb25zdCBjaGFyICogY29uc3Qgd2Vla2RheU5h
bWVbN10gPSB7ICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4i
IH07Citjb25zdCBjaGFyICogY29uc3QgbW9udGhOYW1lWzEyXSA9IHsgIkphbiIsICJGZWIiLCAi
TWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJO
b3YiLCAiRGVjIiB9OworCitjb25zdCBkb3VibGUgaG91cnNQZXJEYXkgPSAyNC4wOworY29uc3Qg
ZG91YmxlIG1pbnV0ZXNQZXJIb3VyID0gNjAuMDsKK2NvbnN0IGRvdWJsZSBzZWNvbmRzUGVySG91
ciA9IDYwLjAgKiA2MC4wOworY29uc3QgZG91YmxlIHNlY29uZHNQZXJNaW51dGUgPSA2MC4wOwor
Y29uc3QgZG91YmxlIG1zUGVyU2Vjb25kID0gMTAwMC4wOworY29uc3QgZG91YmxlIG1zUGVyTWlu
dXRlID0gNjAuMCAqIDEwMDAuMDsKK2NvbnN0IGRvdWJsZSBtc1BlckhvdXIgPSA2MC4wICogNjAu
MCAqIDEwMDAuMDsKK2NvbnN0IGRvdWJsZSBtc1BlckRheSA9IDI0LjAgKiA2MC4wICogNjAuMCAq
IDEwMDAuMDsKKworLy8gSW50ZW50aW9uYWxseSBvdmVycmlkZGluZyB0aGUgZGVmYXVsdCB0bSBv
ZiB0aGUgc3lzdGVtCisvLyBUZWUgbWVtYmVycyBvZiB0bSBkaWZmZXIgb24gdmFyaW91cyBvcGVy
YXRpbmcgc3lzdGVtcy4KK3N0cnVjdCBHcmVnb3JpYW5EYXRlVGltZSA6IE5vbmNvcHlhYmxlIHsK
KyAgICBHcmVnb3JpYW5EYXRlVGltZSgpCisgICAgICAgIDogc2Vjb25kKDApCisgICAgICAgICwg
bWludXRlKDApCisgICAgICAgICwgaG91cigwKQorICAgICAgICAsIHdlZWtEYXkoMCkKKyAgICAg
ICAgLCBtb250aERheSgwKQorICAgICAgICAsIHllYXJEYXkoMCkKKyAgICAgICAgLCBtb250aCgw
KQorICAgICAgICAsIHllYXIoMCkKKyAgICAgICAgLCBpc0RTVCgwKQorICAgICAgICAsIHV0Y09m
ZnNldCgwKQorICAgICAgICAsIHRpbWVab25lKDApCisgICAgeworICAgIH0KKworICAgIH5HcmVn
b3JpYW5EYXRlVGltZSgpCisgICAgeworICAgICAgICBkZWxldGUgW10gdGltZVpvbmU7CisgICAg
fQorCisgICAgR3JlZ29yaWFuRGF0ZVRpbWUoY29uc3QgdG0mIGluVG0pCisgICAgICAgIDogc2Vj
b25kKGluVG0udG1fc2VjKQorICAgICAgICAsIG1pbnV0ZShpblRtLnRtX21pbikKKyAgICAgICAg
LCBob3VyKGluVG0udG1faG91cikKKyAgICAgICAgLCB3ZWVrRGF5KGluVG0udG1fd2RheSkKKyAg
ICAgICAgLCBtb250aERheShpblRtLnRtX21kYXkpCisgICAgICAgICwgeWVhckRheShpblRtLnRt
X3lkYXkpCisgICAgICAgICwgbW9udGgoaW5UbS50bV9tb24pCisgICAgICAgICwgeWVhcihpblRt
LnRtX3llYXIpCisgICAgICAgICwgaXNEU1QoaW5UbS50bV9pc2RzdCkKKyAgICB7CisjaWYgIVBM
QVRGT1JNKFdJTl9PUykgJiYgIVBMQVRGT1JNKFNPTEFSSVMpICYmICFDT01QSUxFUihSVkNUKQor
ICAgICAgICB1dGNPZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGluVG0udG1fZ210b2ZmKTsKKwor
ICAgICAgICBpbnQgaW5ab25lU2l6ZSA9IHN0cmxlbihpblRtLnRtX3pvbmUpICsgMTsKKyAgICAg
ICAgdGltZVpvbmUgPSBuZXcgY2hhcltpblpvbmVTaXplXTsKKyAgICAgICAgc3RybmNweSh0aW1l
Wm9uZSwgaW5UbS50bV96b25lLCBpblpvbmVTaXplKTsKKyNlbHNlCisgICAgICAgIHV0Y09mZnNl
dCA9IHN0YXRpY19jYXN0PGludD4oZ2V0VVRDT2Zmc2V0KCkgLyBtc1BlclNlY29uZCArIChpc0RT
VCA/IHNlY29uZHNQZXJIb3VyIDogMCkpOworICAgICAgICB0aW1lWm9uZSA9IDA7CisjZW5kaWYK
KyAgICB9CisKKyAgICBvcGVyYXRvciB0bSgpIGNvbnN0CisgICAgeworICAgICAgICB0bSByZXQ7
CisgICAgICAgIG1lbXNldCgmcmV0LCAwLCBzaXplb2YocmV0KSk7CisKKyAgICAgICAgcmV0LnRt
X3NlYyAgID0gIHNlY29uZDsKKyAgICAgICAgcmV0LnRtX21pbiAgID0gIG1pbnV0ZTsKKyAgICAg
ICAgcmV0LnRtX2hvdXIgID0gIGhvdXI7CisgICAgICAgIHJldC50bV93ZGF5ICA9ICB3ZWVrRGF5
OworICAgICAgICByZXQudG1fbWRheSAgPSAgbW9udGhEYXk7CisgICAgICAgIHJldC50bV95ZGF5
ICA9ICB5ZWFyRGF5OworICAgICAgICByZXQudG1fbW9uICAgPSAgbW9udGg7CisgICAgICAgIHJl
dC50bV95ZWFyICA9ICB5ZWFyOworICAgICAgICByZXQudG1faXNkc3QgPSAgaXNEU1Q7CisKKyNp
ZiAhUExBVEZPUk0oV0lOX09TKSAmJiAhUExBVEZPUk0oU09MQVJJUykgJiYgIUNPTVBJTEVSKFJW
Q1QpCisgICAgICAgIHJldC50bV9nbXRvZmYgPSBzdGF0aWNfY2FzdDxsb25nPih1dGNPZmZzZXQp
OworICAgICAgICByZXQudG1fem9uZSA9IHRpbWVab25lOworI2VuZGlmCisKKyAgICAgICAgcmV0
dXJuIHJldDsKKyAgICB9CisKKyAgICB2b2lkIGNvcHlGcm9tKGNvbnN0IEdyZWdvcmlhbkRhdGVU
aW1lJiByaHMpCisgICAgeworICAgICAgICBzZWNvbmQgPSByaHMuc2Vjb25kOworICAgICAgICBt
aW51dGUgPSByaHMubWludXRlOworICAgICAgICBob3VyID0gcmhzLmhvdXI7CisgICAgICAgIHdl
ZWtEYXkgPSByaHMud2Vla0RheTsKKyAgICAgICAgbW9udGhEYXkgPSByaHMubW9udGhEYXk7Cisg
ICAgICAgIHllYXJEYXkgPSByaHMueWVhckRheTsKKyAgICAgICAgbW9udGggPSByaHMubW9udGg7
CisgICAgICAgIHllYXIgPSByaHMueWVhcjsKKyAgICAgICAgaXNEU1QgPSByaHMuaXNEU1Q7Cisg
ICAgICAgIHV0Y09mZnNldCA9IHJocy51dGNPZmZzZXQ7CisgICAgICAgIGlmIChyaHMudGltZVpv
bmUpIHsKKyAgICAgICAgICAgIGludCBpblpvbmVTaXplID0gc3RybGVuKHJocy50aW1lWm9uZSkg
KyAxOworICAgICAgICAgICAgdGltZVpvbmUgPSBuZXcgY2hhcltpblpvbmVTaXplXTsKKyAgICAg
ICAgICAgIHN0cm5jcHkodGltZVpvbmUsIHJocy50aW1lWm9uZSwgaW5ab25lU2l6ZSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgdGltZVpvbmUgPSAwOworICAgIH0KKworICAgIGludCBz
ZWNvbmQ7CisgICAgaW50IG1pbnV0ZTsKKyAgICBpbnQgaG91cjsKKyAgICBpbnQgd2Vla0RheTsK
KyAgICBpbnQgbW9udGhEYXk7CisgICAgaW50IHllYXJEYXk7CisgICAgaW50IG1vbnRoOworICAg
IGludCB5ZWFyOworICAgIGludCBpc0RTVDsKKyAgICBpbnQgdXRjT2Zmc2V0OworICAgIGNoYXIq
IHRpbWVab25lOworfTsKKworc3RhdGljIGlubGluZSBpbnQgZ210b2Zmc2V0KGNvbnN0IEdyZWdv
cmlhbkRhdGVUaW1lJiB0KQoreworICAgIHJldHVybiB0LnV0Y09mZnNldDsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEYXRlTWF0aF9oCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVDb252ZXJzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlQ29udmVyc2lvbi5oCShyZXZpc2lvbiA0NDUwMSkKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZUNvbnZlcnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQogICoK
QEAgLTM4LDE1NCArMzksMjIgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBEYXRlTWF0aF9oCi0jZGVm
aW5lIERhdGVNYXRoX2gKKyNpZm5kZWYgRGF0ZUNvbnZlcnNpb25faAorI2RlZmluZSBEYXRlQ29u
dmVyc2lvbl9oCiAKLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CituYW1lc3BhY2UgV1RGIHsKKyAgICBzdHJ1Y3QgR3Jl
Z29yaWFuRGF0ZVRpbWU7Cit9CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBVU3RyaW5nOwot
c3RydWN0IEdyZWdvcmlhbkRhdGVUaW1lOwotCi12b2lkIGluaXREYXRlTWF0aCgpOwotdm9pZCBt
c1RvR3JlZ29yaWFuRGF0ZVRpbWUoZG91YmxlLCBib29sIG91dHB1dElzVVRDLCBHcmVnb3JpYW5E
YXRlVGltZSYpOwotZG91YmxlIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhjb25zdCBHcmVnb3JpYW5E
YXRlVGltZSYsIGRvdWJsZSwgYm9vbCBpbnB1dElzVVRDKTsKLWRvdWJsZSBnZXRVVENPZmZzZXQo
KTsKLWludCBlcXVpdmFsZW50WWVhckZvckRTVChpbnQgeWVhcik7Ci1kb3VibGUgZ2V0Q3VycmVu
dFVUQ1RpbWUoKTsKLWRvdWJsZSBnZXRDdXJyZW50VVRDVGltZVdpdGhNaWNyb3NlY29uZHMoKTsK
LXZvaWQgZ2V0TG9jYWxUaW1lKGNvbnN0IHRpbWVfdCosIHRtKik7CiAKLS8vIE5vdCByZWFsbHkg
bWF0aCByZWxhdGVkLCBidXQgdGhpcyBpcyBjdXJyZW50bHkgdGhlIG9ubHkgc2hhcmVkIHBsYWNl
IHRvIHB1dCB0aGVzZS4gIAogZG91YmxlIHBhcnNlRGF0ZShjb25zdCBVU3RyaW5nJik7Ci1kb3Vi
bGUgdGltZUNsaXAoZG91YmxlKTsKLVVTdHJpbmcgZm9ybWF0RGF0ZShjb25zdCBHcmVnb3JpYW5E
YXRlVGltZSYpOwotVVN0cmluZyBmb3JtYXREYXRlVVRDVmFyaWFudChjb25zdCBHcmVnb3JpYW5E
YXRlVGltZSYpOwotVVN0cmluZyBmb3JtYXRUaW1lKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJiwg
Ym9vbCBpbnB1dElzVVRDKTsKLQotCi1jb25zdCBjaGFyICogY29uc3Qgd2Vla2RheU5hbWVbN10g
PSB7ICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4iIH07Ci1j
b25zdCBjaGFyICogY29uc3QgbW9udGhOYW1lWzEyXSA9IHsgIkphbiIsICJGZWIiLCAiTWFyIiwg
IkFwciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAi
RGVjIiB9OwotCi1jb25zdCBkb3VibGUgaG91cnNQZXJEYXkgPSAyNC4wOwotY29uc3QgZG91Ymxl
IG1pbnV0ZXNQZXJIb3VyID0gNjAuMDsKLWNvbnN0IGRvdWJsZSBzZWNvbmRzUGVySG91ciA9IDYw
LjAgKiA2MC4wOwotY29uc3QgZG91YmxlIHNlY29uZHNQZXJNaW51dGUgPSA2MC4wOwotY29uc3Qg
ZG91YmxlIG1zUGVyU2Vjb25kID0gMTAwMC4wOwotY29uc3QgZG91YmxlIG1zUGVyTWludXRlID0g
NjAuMCAqIDEwMDAuMDsKLWNvbnN0IGRvdWJsZSBtc1BlckhvdXIgPSA2MC4wICogNjAuMCAqIDEw
MDAuMDsKLWNvbnN0IGRvdWJsZSBtc1BlckRheSA9IDI0LjAgKiA2MC4wICogNjAuMCAqIDEwMDAu
MDsKLQotLy8gSW50ZW50aW9uYWxseSBvdmVycmlkZGluZyB0aGUgZGVmYXVsdCB0bSBvZiB0aGUg
c3lzdGVtCi0vLyBUZWUgbWVtYmVycyBvZiB0bSBkaWZmZXIgb24gdmFyaW91cyBvcGVyYXRpbmcg
c3lzdGVtcy4KLXN0cnVjdCBHcmVnb3JpYW5EYXRlVGltZSA6IE5vbmNvcHlhYmxlIHsKLSAgICBH
cmVnb3JpYW5EYXRlVGltZSgpCi0gICAgICAgIDogc2Vjb25kKDApCi0gICAgICAgICwgbWludXRl
KDApCi0gICAgICAgICwgaG91cigwKQotICAgICAgICAsIHdlZWtEYXkoMCkKLSAgICAgICAgLCBt
b250aERheSgwKQotICAgICAgICAsIHllYXJEYXkoMCkKLSAgICAgICAgLCBtb250aCgwKQotICAg
ICAgICAsIHllYXIoMCkKLSAgICAgICAgLCBpc0RTVCgwKQotICAgICAgICAsIHV0Y09mZnNldCgw
KQotICAgICAgICAsIHRpbWVab25lKDApCi0gICAgewotICAgIH0KLQotICAgIH5HcmVnb3JpYW5E
YXRlVGltZSgpCi0gICAgewotICAgICAgICBkZWxldGUgW10gdGltZVpvbmU7Ci0gICAgfQotCi0g
ICAgR3JlZ29yaWFuRGF0ZVRpbWUoY29uc3QgdG0mIGluVG0pCi0gICAgICAgIDogc2Vjb25kKGlu
VG0udG1fc2VjKQotICAgICAgICAsIG1pbnV0ZShpblRtLnRtX21pbikKLSAgICAgICAgLCBob3Vy
KGluVG0udG1faG91cikKLSAgICAgICAgLCB3ZWVrRGF5KGluVG0udG1fd2RheSkKLSAgICAgICAg
LCBtb250aERheShpblRtLnRtX21kYXkpCi0gICAgICAgICwgeWVhckRheShpblRtLnRtX3lkYXkp
Ci0gICAgICAgICwgbW9udGgoaW5UbS50bV9tb24pCi0gICAgICAgICwgeWVhcihpblRtLnRtX3ll
YXIpCi0gICAgICAgICwgaXNEU1QoaW5UbS50bV9pc2RzdCkKLSAgICB7Ci0jaWYgIVBMQVRGT1JN
KFdJTl9PUykgJiYgIVBMQVRGT1JNKFNPTEFSSVMpICYmICFDT01QSUxFUihSVkNUKQotICAgICAg
ICB1dGNPZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGluVG0udG1fZ210b2ZmKTsKLQotICAgICAg
ICBpbnQgaW5ab25lU2l6ZSA9IHN0cmxlbihpblRtLnRtX3pvbmUpICsgMTsKLSAgICAgICAgdGlt
ZVpvbmUgPSBuZXcgY2hhcltpblpvbmVTaXplXTsKLSAgICAgICAgc3RybmNweSh0aW1lWm9uZSwg
aW5UbS50bV96b25lLCBpblpvbmVTaXplKTsKLSNlbHNlCi0gICAgICAgIHV0Y09mZnNldCA9IHN0
YXRpY19jYXN0PGludD4oZ2V0VVRDT2Zmc2V0KCkgLyBtc1BlclNlY29uZCArIChpc0RTVCA/IHNl
Y29uZHNQZXJIb3VyIDogMCkpOwotICAgICAgICB0aW1lWm9uZSA9IDA7Ci0jZW5kaWYKLSAgICB9
Ci0KLSAgICBvcGVyYXRvciB0bSgpIGNvbnN0Ci0gICAgewotICAgICAgICB0bSByZXQ7Ci0gICAg
ICAgIG1lbXNldCgmcmV0LCAwLCBzaXplb2YocmV0KSk7Ci0KLSAgICAgICAgcmV0LnRtX3NlYyAg
ID0gIHNlY29uZDsKLSAgICAgICAgcmV0LnRtX21pbiAgID0gIG1pbnV0ZTsKLSAgICAgICAgcmV0
LnRtX2hvdXIgID0gIGhvdXI7Ci0gICAgICAgIHJldC50bV93ZGF5ICA9ICB3ZWVrRGF5OwotICAg
ICAgICByZXQudG1fbWRheSAgPSAgbW9udGhEYXk7Ci0gICAgICAgIHJldC50bV95ZGF5ICA9ICB5
ZWFyRGF5OwotICAgICAgICByZXQudG1fbW9uICAgPSAgbW9udGg7Ci0gICAgICAgIHJldC50bV95
ZWFyICA9ICB5ZWFyOwotICAgICAgICByZXQudG1faXNkc3QgPSAgaXNEU1Q7Ci0KLSNpZiAhUExB
VEZPUk0oV0lOX09TKSAmJiAhUExBVEZPUk0oU09MQVJJUykgJiYgIUNPTVBJTEVSKFJWQ1QpCi0g
ICAgICAgIHJldC50bV9nbXRvZmYgPSBzdGF0aWNfY2FzdDxsb25nPih1dGNPZmZzZXQpOwotICAg
ICAgICByZXQudG1fem9uZSA9IHRpbWVab25lOwotI2VuZGlmCi0KLSAgICAgICAgcmV0dXJuIHJl
dDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvcHlGcm9tKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJiBy
aHMpCi0gICAgewotICAgICAgICBzZWNvbmQgPSByaHMuc2Vjb25kOwotICAgICAgICBtaW51dGUg
PSByaHMubWludXRlOwotICAgICAgICBob3VyID0gcmhzLmhvdXI7Ci0gICAgICAgIHdlZWtEYXkg
PSByaHMud2Vla0RheTsKLSAgICAgICAgbW9udGhEYXkgPSByaHMubW9udGhEYXk7Ci0gICAgICAg
IHllYXJEYXkgPSByaHMueWVhckRheTsKLSAgICAgICAgbW9udGggPSByaHMubW9udGg7Ci0gICAg
ICAgIHllYXIgPSByaHMueWVhcjsKLSAgICAgICAgaXNEU1QgPSByaHMuaXNEU1Q7Ci0gICAgICAg
IHV0Y09mZnNldCA9IHJocy51dGNPZmZzZXQ7Ci0gICAgICAgIGlmIChyaHMudGltZVpvbmUpIHsK
LSAgICAgICAgICAgIGludCBpblpvbmVTaXplID0gc3RybGVuKHJocy50aW1lWm9uZSkgKyAxOwot
ICAgICAgICAgICAgdGltZVpvbmUgPSBuZXcgY2hhcltpblpvbmVTaXplXTsKLSAgICAgICAgICAg
IHN0cm5jcHkodGltZVpvbmUsIHJocy50aW1lWm9uZSwgaW5ab25lU2l6ZSk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgdGltZVpvbmUgPSAwOwotICAgIH0KLQotICAgIGludCBzZWNvbmQ7
Ci0gICAgaW50IG1pbnV0ZTsKLSAgICBpbnQgaG91cjsKLSAgICBpbnQgd2Vla0RheTsKLSAgICBp
bnQgbW9udGhEYXk7Ci0gICAgaW50IHllYXJEYXk7Ci0gICAgaW50IG1vbnRoOwotICAgIGludCB5
ZWFyOwotICAgIGludCBpc0RTVDsKLSAgICBpbnQgdXRjT2Zmc2V0OwotICAgIGNoYXIqIHRpbWVa
b25lOwotfTsKLQotc3RhdGljIGlubGluZSBpbnQgZ210b2Zmc2V0KGNvbnN0IEdyZWdvcmlhbkRh
dGVUaW1lJiB0KQotewotICAgIHJldHVybiB0LnV0Y09mZnNldDsKLX0KK1VTdHJpbmcgZm9ybWF0
RGF0ZShjb25zdCBXVEY6OkdyZWdvcmlhbkRhdGVUaW1lJik7CitVU3RyaW5nIGZvcm1hdERhdGVV
VENWYXJpYW50KGNvbnN0IFdURjo6R3JlZ29yaWFuRGF0ZVRpbWUmKTsKK1VTdHJpbmcgZm9ybWF0
VGltZShjb25zdCBXVEY6OkdyZWdvcmlhbkRhdGVUaW1lJiwgYm9vbCBpbnB1dElzVVRDKTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBEYXRlTWF0aF9oCisjZW5kaWYgLy8gRGF0
ZUNvbnZlcnNpb25faAoKUHJvcGVydHkgY2hhbmdlcyBvbjogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlQ29udmVyc2lvbi5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptZXJnZWluZm8KCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuY3BwCShyZXZpc2lvbiA0NDUwMSkK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRhdGVJ
bnN0YW5jZS5oIgogCi0jaW5jbHVkZSAiRGF0ZU1hdGguaCIKICNpbmNsdWRlIDxtYXRoLmg+Cisj
aW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC01OCwxMyArNTgsMTMgQEAgdm9pZCBEYXRlSW5zdGFuY2U6Om1z
VG9HcmVnb3JpYW5EYXRlVGltZQogCiAgICAgaWYgKG91dHB1dElzVVRDKSB7CiAgICAgICAgIGlm
IChtX2NhY2hlLT5tX2dyZWdvcmlhbkRhdGVUaW1lVVRDQ2FjaGVkRm9yTVMgIT0gbWlsbGkpIHsK
LSAgICAgICAgICAgIEpTQzo6bXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB0cnVlLCBtX2Nh
Y2hlLT5tX2NhY2hlZEdyZWdvcmlhbkRhdGVUaW1lVVRDKTsKKyAgICAgICAgICAgIFdURjo6bXNU
b0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB0cnVlLCBtX2NhY2hlLT5tX2NhY2hlZEdyZWdvcmlh
bkRhdGVUaW1lVVRDKTsKICAgICAgICAgICAgIG1fY2FjaGUtPm1fZ3JlZ29yaWFuRGF0ZVRpbWVV
VENDYWNoZWRGb3JNUyA9IG1pbGxpOwogICAgICAgICB9CiAgICAgICAgIHQuY29weUZyb20obV9j
YWNoZS0+bV9jYWNoZWRHcmVnb3JpYW5EYXRlVGltZVVUQyk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKG1fY2FjaGUtPm1fZ3JlZ29yaWFuRGF0ZVRpbWVDYWNoZWRGb3JNUyAhPSBtaWxsaSkg
ewotICAgICAgICAgICAgSlNDOjptc1RvR3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIGZhbHNlLCBt
X2NhY2hlLT5tX2NhY2hlZEdyZWdvcmlhbkRhdGVUaW1lKTsKKyAgICAgICAgICAgIFdURjo6bXNU
b0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCBmYWxzZSwgbV9jYWNoZS0+bV9jYWNoZWRHcmVnb3Jp
YW5EYXRlVGltZSk7CiAgICAgICAgICAgICBtX2NhY2hlLT5tX2dyZWdvcmlhbkRhdGVUaW1lQ2Fj
aGVkRm9yTVMgPSBtaWxsaTsKICAgICAgICAgfQogICAgICAgICB0LmNvcHlGcm9tKG1fY2FjaGUt
Pm1fY2FjaGVkR3JlZ29yaWFuRGF0ZVRpbWUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlSW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVJbnN0YW5jZS5oCShyZXZpc2lvbiA0NDUwMSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0ZUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIzLDExIEBACiAKICNpbmNs
dWRlICJKU1dyYXBwZXJPYmplY3QuaCIKIAotbmFtZXNwYWNlIEpTQyB7Ci0KK25hbWVzcGFjZSBX
VEYgewogICAgIHN0cnVjdCBHcmVnb3JpYW5EYXRlVGltZTsKK30KKworbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBEYXRlSW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKICAg
ICBwdWJsaWM6CkBAIC0zNCwxNCArMzYsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
ZG91YmxlIGludGVybmFsTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxWYWx1ZSgpLnVu
Y2hlY2tlZEdldE51bWJlcigpOyB9CiAKLSAgICAgICAgYm9vbCBnZXRUaW1lKEdyZWdvcmlhbkRh
dGVUaW1lJiwgaW50JiBvZmZzZXQpIGNvbnN0OwotICAgICAgICBib29sIGdldFVUQ1RpbWUoR3Jl
Z29yaWFuRGF0ZVRpbWUmKSBjb25zdDsKKyAgICAgICAgYm9vbCBnZXRUaW1lKFdURjo6R3JlZ29y
aWFuRGF0ZVRpbWUmLCBpbnQmIG9mZnNldCkgY29uc3Q7CisgICAgICAgIGJvb2wgZ2V0VVRDVGlt
ZShXVEY6OkdyZWdvcmlhbkRhdGVUaW1lJikgY29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0VGltZShk
b3VibGUmIG1pbGxpc2Vjb25kcywgaW50JiBvZmZzZXQpIGNvbnN0OwogICAgICAgICBib29sIGdl
dFVUQ1RpbWUoZG91YmxlJiBtaWxsaXNlY29uZHMpIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gaW5mbzsKIAotICAgICAgICB2b2lkIG1zVG9HcmVnb3JpYW5EYXRlVGlt
ZShkb3VibGUsIGJvb2wgb3V0cHV0SXNVVEMsIEdyZWdvcmlhbkRhdGVUaW1lJikgY29uc3Q7Cisg
ICAgICAgIHZvaWQgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKGRvdWJsZSwgYm9vbCBvdXRwdXRJc1VU
QywgV1RGOjpHcmVnb3JpYW5EYXRlVGltZSYpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZp
bmZvOyB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVNYXRoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVNYXRoLmNwcAkocmV2aXNpb24gNDQ1
MDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVNYXRoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw5MzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBUaGUgT3JpZ2luYWwgQ29kZSBp
cyBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29kZSwgcmVsZWFzZWQKLSAqIE1hcmNoIDMx
LCAxOTk4LgotICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29k
ZSBpcwotICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCi0gKiBQb3J0aW9u
cyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4
Ci0gKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxl
IG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAotICogaHR0cDovL3d3dy5tb3ppbGxh
Lm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwu
aHRtbAotICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhl
IE1QTCBvciB0aGUgR1BMIGFyZQotICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3Zl
LiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKLSAqIHZlcnNpb24gb2YgdGhpcyBm
aWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KLSAqIGxpY2Vuc2Vz
ICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3Vy
Ci0gKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBk
ZWNpc2lvbiBieQotICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0
aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKLSAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkg
dGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUuCi0gKiBJZiB5b3UgZG8gbm90
IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCi0g
KiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3Ig
dGhlIEdQTC4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0ZU1hdGgu
aCIKLQotI2luY2x1ZGUgIkpTTnVtYmVyQ2VsbC5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNs
dWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5
cGUuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmlu
Z0V4dHJhcy5oPgotCi0jaWYgSEFWRShFUlJOT19IKQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKERBUldJTikKLSNpbmNsdWRlIDxub3RpZnkuaD4KLSNlbmRpZgot
Ci0jaWYgSEFWRShTWVNfVElNRV9IKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLQot
I2lmIEhBVkUoU1lTX1RJTUVCX0gpCi0jaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jZW5kaWYKLQot
dXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLS8qIENvbnN0YW50cyAq
LwotCi1zdGF0aWMgY29uc3QgZG91YmxlIG1pbnV0ZXNQZXJEYXkgPSAyNC4wICogNjAuMDsKLXN0
YXRpYyBjb25zdCBkb3VibGUgc2Vjb25kc1BlckRheSA9IDI0LjAgKiA2MC4wICogNjAuMDsKLXN0
YXRpYyBjb25zdCBkb3VibGUgc2Vjb25kc1BlclllYXIgPSAyNC4wICogNjAuMCAqIDYwLjAgKiAz
NjUuMDsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSB1c2VjUGVyU2VjID0gMTAwMDAwMC4wOwotCi1z
dGF0aWMgY29uc3QgZG91YmxlIG1heFVuaXhUaW1lID0gMjE0NTg1OTIwMC4wOyAvLyAxMi8zMS8y
MDM3Ci0KLS8vIERheSBvZiB5ZWFyIGZvciB0aGUgZmlyc3QgZGF5IG9mIGVhY2ggbW9udGgsIHdo
ZXJlIGluZGV4IDAgaXMgSmFudWFyeSwgYW5kIGRheSAwIGlzIEphbnVhcnkgMS4KLS8vIEZpcnN0
IGZvciBub24tbGVhcCB5ZWFycywgdGhlbiBmb3IgbGVhcCB5ZWFycy4KLXN0YXRpYyBjb25zdCBp
bnQgZmlyc3REYXlPZk1vbnRoWzJdWzEyXSA9IHsKLSAgICB7MCwgMzEsIDU5LCA5MCwgMTIwLCAx
NTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzR9LAotICAgIHswLCAzMSwgNjAsIDkxLCAx
MjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwgMjc0LCAzMDUsIDMzNX0KLX07Ci0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBpc0xlYXBZZWFyKGludCB5ZWFyKQotewotICAgIGlmICh5ZWFyICUgNCAhPSAwKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHllYXIgJSA0MDAgPT0gMCkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgaWYgKHllYXIgJSAxMDAgPT0gMCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkYXlzSW5ZZWFy
KGludCB5ZWFyKQotewotICAgIHJldHVybiAzNjUgKyBpc0xlYXBZZWFyKHllYXIpOwotfQotCi1z
dGF0aWMgaW5saW5lIGRvdWJsZSBkYXlzRnJvbTE5NzBUb1llYXIoaW50IHllYXIpCi17Ci0gICAg
Ly8gVGhlIEdyZWdvcmlhbiBDYWxlbmRhciBydWxlcyBmb3IgbGVhcCB5ZWFyczoKLSAgICAvLyBF
dmVyeSBmb3VydGggeWVhciBpcyBhIGxlYXAgeWVhci4gIDIwMDQsIDIwMDgsIGFuZCAyMDEyIGFy
ZSBsZWFwIHllYXJzLgotICAgIC8vIEhvd2V2ZXIsIGV2ZXJ5IGh1bmRyZWR0aCB5ZWFyIGlzIG5v
dCBhIGxlYXAgeWVhci4gIDE5MDAgYW5kIDIxMDAgYXJlIG5vdCBsZWFwIHllYXJzLgotICAgIC8v
IEV2ZXJ5IGZvdXIgaHVuZHJlZCB5ZWFycywgdGhlcmUncyBhIGxlYXAgeWVhciBhZnRlciBhbGwu
ICAyMDAwIGFuZCAyNDAwIGFyZSBsZWFwIHllYXJzLgotCi0gICAgc3RhdGljIGNvbnN0IGludCBs
ZWFwRGF5c0JlZm9yZTE5NzFCeTRSdWxlID0gMTk3MCAvIDQ7Ci0gICAgc3RhdGljIGNvbnN0IGlu
dCBleGNsdWRlZExlYXBEYXlzQmVmb3JlMTk3MUJ5MTAwUnVsZSA9IDE5NzAgLyAxMDA7Ci0gICAg
c3RhdGljIGNvbnN0IGludCBsZWFwRGF5c0JlZm9yZTE5NzFCeTQwMFJ1bGUgPSAxOTcwIC8gNDAw
OwotCi0gICAgY29uc3QgZG91YmxlIHllYXJNaW51c09uZSA9IHllYXIgLSAxOwotICAgIGNvbnN0
IGRvdWJsZSB5ZWFyc1RvQWRkQnk0UnVsZSA9IGZsb29yKHllYXJNaW51c09uZSAvIDQuMCkgLSBs
ZWFwRGF5c0JlZm9yZTE5NzFCeTRSdWxlOwotICAgIGNvbnN0IGRvdWJsZSB5ZWFyc1RvRXhjbHVk
ZUJ5MTAwUnVsZSA9IGZsb29yKHllYXJNaW51c09uZSAvIDEwMC4wKSAtIGV4Y2x1ZGVkTGVhcERh
eXNCZWZvcmUxOTcxQnkxMDBSdWxlOwotICAgIGNvbnN0IGRvdWJsZSB5ZWFyc1RvQWRkQnk0MDBS
dWxlID0gZmxvb3IoeWVhck1pbnVzT25lIC8gNDAwLjApIC0gbGVhcERheXNCZWZvcmUxOTcxQnk0
MDBSdWxlOwotCi0gICAgcmV0dXJuIDM2NS4wICogKHllYXIgLSAxOTcwKSArIHllYXJzVG9BZGRC
eTRSdWxlIC0geWVhcnNUb0V4Y2x1ZGVCeTEwMFJ1bGUgKyB5ZWFyc1RvQWRkQnk0MDBSdWxlOwot
fQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBtc1RvRGF5cyhkb3VibGUgbXMpCi17Ci0gICAgcmV0
dXJuIGZsb29yKG1zIC8gbXNQZXJEYXkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtc1RvWWVh
cihkb3VibGUgbXMpCi17Ci0gICAgaW50IGFwcHJveFllYXIgPSBzdGF0aWNfY2FzdDxpbnQ+KGZs
b29yKG1zIC8gKG1zUGVyRGF5ICogMzY1LjI0MjUpKSArIDE5NzApOwotICAgIGRvdWJsZSBtc0Zy
b21BcHByb3hZZWFyVG8xOTcwID0gbXNQZXJEYXkgKiBkYXlzRnJvbTE5NzBUb1llYXIoYXBwcm94
WWVhcik7Ci0gICAgaWYgKG1zRnJvbUFwcHJveFllYXJUbzE5NzAgPiBtcykKLSAgICAgICAgcmV0
dXJuIGFwcHJveFllYXIgLSAxOwotICAgIGlmIChtc0Zyb21BcHByb3hZZWFyVG8xOTcwICsgbXNQ
ZXJEYXkgKiBkYXlzSW5ZZWFyKGFwcHJveFllYXIpIDw9IG1zKQotICAgICAgICByZXR1cm4gYXBw
cm94WWVhciArIDE7Ci0gICAgcmV0dXJuIGFwcHJveFllYXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
aW50IGRheUluWWVhcihkb3VibGUgbXMsIGludCB5ZWFyKQotewotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KG1zVG9EYXlzKG1zKSAtIGRheXNGcm9tMTk3MFRvWWVhcih5ZWFyKSk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgZG91YmxlIG1zVG9NaWxsaXNlY29uZHMoZG91YmxlIG1zKQotewotICAg
IGRvdWJsZSByZXN1bHQgPSBmbW9kKG1zLCBtc1BlckRheSk7Ci0gICAgaWYgKHJlc3VsdCA8IDAp
Ci0gICAgICAgIHJlc3VsdCArPSBtc1BlckRheTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0v
LyAwOiBTdW5kYXksIDE6IE1vbmRheSwgZXRjLgotc3RhdGljIGlubGluZSBpbnQgbXNUb1dlZWtE
YXkoZG91YmxlIG1zKQotewotICAgIGludCB3ZCA9IChzdGF0aWNfY2FzdDxpbnQ+KG1zVG9EYXlz
KG1zKSkgKyA0KSAlIDc7Ci0gICAgaWYgKHdkIDwgMCkKLSAgICAgICAgd2QgKz0gNzsKLSAgICBy
ZXR1cm4gd2Q7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1zVG9TZWNvbmRzKGRvdWJsZSBtcykK
LXsKLSAgICBkb3VibGUgcmVzdWx0ID0gZm1vZChmbG9vcihtcyAvIG1zUGVyU2Vjb25kKSwgc2Vj
b25kc1Blck1pbnV0ZSk7Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJlc3VsdCArPSBz
ZWNvbmRzUGVyTWludXRlOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdCk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1zVG9NaW51dGVzKGRvdWJsZSBtcykKLXsKLSAgICBkb3Vi
bGUgcmVzdWx0ID0gZm1vZChmbG9vcihtcyAvIG1zUGVyTWludXRlKSwgbWludXRlc1BlckhvdXIp
OwotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICByZXN1bHQgKz0gbWludXRlc1BlckhvdXI7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocmVzdWx0KTsKLX0KLQotc3RhdGljIGlubGlu
ZSBpbnQgbXNUb0hvdXJzKGRvdWJsZSBtcykKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gZm1vZChm
bG9vcihtcy9tc1BlckhvdXIpLCBob3Vyc1BlckRheSk7Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0g
ICAgICAgIHJlc3VsdCArPSBob3Vyc1BlckRheTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PihyZXN1bHQpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtb250aEZyb21EYXlJblllYXIoaW50
IGRheUluWWVhciwgYm9vbCBsZWFwWWVhcikKLXsKLSAgICBjb25zdCBpbnQgZCA9IGRheUluWWVh
cjsKLSAgICBpbnQgc3RlcDsKLQotICAgIGlmIChkIDwgKHN0ZXAgPSAzMSkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHN0ZXAgKz0gKGxlYXBZZWFyID8gMjkgOiAyOCk7Ci0gICAgaWYgKGQgPCBz
dGVwKQotICAgICAgICByZXR1cm4gMTsKLSAgICBpZiAoZCA8IChzdGVwICs9IDMxKSkKLSAgICAg
ICAgcmV0dXJuIDI7Ci0gICAgaWYgKGQgPCAoc3RlcCArPSAzMCkpCi0gICAgICAgIHJldHVybiAz
OwotICAgIGlmIChkIDwgKHN0ZXAgKz0gMzEpKQotICAgICAgICByZXR1cm4gNDsKLSAgICBpZiAo
ZCA8IChzdGVwICs9IDMwKSkKLSAgICAgICAgcmV0dXJuIDU7Ci0gICAgaWYgKGQgPCAoc3RlcCAr
PSAzMSkpCi0gICAgICAgIHJldHVybiA2OwotICAgIGlmIChkIDwgKHN0ZXAgKz0gMzEpKQotICAg
ICAgICByZXR1cm4gNzsKLSAgICBpZiAoZCA8IChzdGVwICs9IDMwKSkKLSAgICAgICAgcmV0dXJu
IDg7Ci0gICAgaWYgKGQgPCAoc3RlcCArPSAzMSkpCi0gICAgICAgIHJldHVybiA5OwotICAgIGlm
IChkIDwgKHN0ZXAgKz0gMzApKQotICAgICAgICByZXR1cm4gMTA7Ci0gICAgcmV0dXJuIDExOwot
fQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tNb250aChpbnQgZGF5SW5ZZWFyLCBpbnQmIHN0
YXJ0RGF5T2ZUaGlzTW9udGgsIGludCYgc3RhcnREYXlPZk5leHRNb250aCwgaW50IGRheXNJblRo
aXNNb250aCkKLXsKLSAgICBzdGFydERheU9mVGhpc01vbnRoID0gc3RhcnREYXlPZk5leHRNb250
aDsKLSAgICBzdGFydERheU9mTmV4dE1vbnRoICs9IGRheXNJblRoaXNNb250aDsKLSAgICByZXR1
cm4gKGRheUluWWVhciA8PSBzdGFydERheU9mTmV4dE1vbnRoKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBpbnQgZGF5SW5Nb250aEZyb21EYXlJblllYXIoaW50IGRheUluWWVhciwgYm9vbCBsZWFwWWVh
cikKLXsKLSAgICBjb25zdCBpbnQgZCA9IGRheUluWWVhcjsKLSAgICBpbnQgc3RlcDsKLSAgICBp
bnQgbmV4dCA9IDMwOwotCi0gICAgaWYgKGQgPD0gbmV4dCkKLSAgICAgICAgcmV0dXJuIGQgKyAx
OwotICAgIGNvbnN0IGludCBkYXlzSW5GZWIgPSAobGVhcFllYXIgPyAyOSA6IDI4KTsKLSAgICBp
ZiAoY2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCBkYXlzSW5GZWIpKQotICAgICAgICByZXR1cm4g
ZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzEpKQotICAgICAg
ICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzAp
KQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwg
bmV4dCwgMzEpKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgo
ZCwgc3RlcCwgbmV4dCwgMzApKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNo
ZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzEpKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0g
ICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzEpKQotICAgICAgICByZXR1cm4gZCAt
IHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzApKQotICAgICAgICBy
ZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzEpKQot
ICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4
dCwgMzApKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgc3RlcCA9IG5leHQ7Ci0gICAg
cmV0dXJuIGQgLSBzdGVwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtb250aFRvRGF5SW5ZZWFy
KGludCBtb250aCwgYm9vbCBpc0xlYXBZZWFyKQotewotICAgIHJldHVybiBmaXJzdERheU9mTW9u
dGhbaXNMZWFwWWVhcl1bbW9udGhdOwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSB0aW1lVG9N
Uyhkb3VibGUgaG91ciwgZG91YmxlIG1pbiwgZG91YmxlIHNlYywgZG91YmxlIG1zKQotewotICAg
IHJldHVybiAoKChob3VyICogbWludXRlc1BlckhvdXIgKyBtaW4pICogc2Vjb25kc1Blck1pbnV0
ZSArIHNlYykgKiBtc1BlclNlY29uZCArIG1zKTsKLX0KLQotc3RhdGljIGludCBkYXRlVG9EYXlJ
blllYXIoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSkKLXsKLSAgICB5ZWFyICs9IG1vbnRo
IC8gMTI7Ci0KLSAgICBtb250aCAlPSAxMjsKLSAgICBpZiAobW9udGggPCAwKSB7Ci0gICAgICAg
IG1vbnRoICs9IDEyOwotICAgICAgICAtLXllYXI7Ci0gICAgfQotCi0gICAgaW50IHllYXJkYXkg
PSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yKGRheXNGcm9tMTk3MFRvWWVhcih5ZWFyKSkpOwotICAg
IGludCBtb250aGRheSA9IG1vbnRoVG9EYXlJblllYXIobW9udGgsIGlzTGVhcFllYXIoeWVhcikp
OwotCi0gICAgcmV0dXJuIHllYXJkYXkgKyBtb250aGRheSArIGRheSAtIDE7Ci19Ci0KLWRvdWJs
ZSBnZXRDdXJyZW50VVRDVGltZSgpCi17Ci0gICAgcmV0dXJuIGZsb29yKGdldEN1cnJlbnRVVENU
aW1lV2l0aE1pY3Jvc2Vjb25kcygpKTsKLX0KLQotLy8gUmV0dXJucyBjdXJyZW50IHRpbWUgaW4g
bWlsbGlzZWNvbmRzIHNpbmNlIDEgSmFuIDE5NzAuCi1kb3VibGUgZ2V0Q3VycmVudFVUQ1RpbWVX
aXRoTWljcm9zZWNvbmRzKCkKLXsKLSAgICByZXR1cm4gY3VycmVudFRpbWUoKSAqIDEwMDAuMDsg
Ci19Ci0KLXZvaWQgZ2V0TG9jYWxUaW1lKGNvbnN0IHRpbWVfdCogbG9jYWxUaW1lLCBzdHJ1Y3Qg
dG0qIGxvY2FsVE0pCi17Ci0jaWYgQ09NUElMRVIoTVNWQzcpIHx8IENPTVBJTEVSKE1JTkdXKSB8
fCBQTEFURk9STShXSU5fQ0UpCi0gICAgKmxvY2FsVE0gPSAqbG9jYWx0aW1lKGxvY2FsVGltZSk7
Ci0jZWxpZiBDT01QSUxFUihNU1ZDKQotICAgIGxvY2FsdGltZV9zKGxvY2FsVE0sIGxvY2FsVGlt
ZSk7Ci0jZWxzZQotICAgIGxvY2FsdGltZV9yKGxvY2FsVGltZSwgbG9jYWxUTSk7Ci0jZW5kaWYK
LX0KLQotLy8gVGhlcmUgaXMgYSBoYXJkIGxpbWl0IGF0IDIwMzggdGhhdCB3ZSBjdXJyZW50bHkg
ZG8gbm90IGhhdmUgYSB3b3JrYXJvdW5kCi0vLyBmb3IgKHJkYXI6Ly9wcm9ibGVtLzUwNTI5NzUp
Lgotc3RhdGljIGlubGluZSBpbnQgbWF4aW11bVllYXJGb3JEU1QoKQotewotICAgIHJldHVybiAy
MDM3OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtaW5pbXVtWWVhckZvckRTVCgpCi17Ci0gICAg
Ly8gQmVjYXVzZSBvZiB0aGUgMjAzOCBpc3N1ZSAoc2VlIG1heGltdW1ZZWFyRm9yRFNUKSBpZiB0
aGUgY3VycmVudCB5ZWFyIGlzCi0gICAgLy8gZ3JlYXRlciB0aGFuIHRoZSBtYXggeWVhciBtaW51
cyAyNyAoMjAxMCksIHdlIHdhbnQgdG8gdXNlIHRoZSBtYXggeWVhcgotICAgIC8vIG1pbnVzIDI3
IGluc3RlYWQsIHRvIGVuc3VyZSB0aGVyZSBpcyBhIHJhbmdlIG9mIDI4IHllYXJzIHRoYXQgYWxs
IHllYXJzCi0gICAgLy8gY2FuIG1hcCB0by4KLSAgICByZXR1cm4gc3RkOjptaW4obXNUb1llYXIo
Z2V0Q3VycmVudFVUQ1RpbWUoKSksIG1heGltdW1ZZWFyRm9yRFNUKCkgLSAyNykgOwotfQotCi0v
KgotICogRmluZCBhbiBlcXVpdmFsZW50IHllYXIgZm9yIHRoZSBvbmUgZ2l2ZW4sIHdoZXJlIGVx
dWl2YWxlbmNlIGlzIGRldGVyaW5lZCBieQotICogdGhlIHR3byB5ZWFycyBoYXZpbmcgdGhlIHNh
bWUgbGVhcG5lc3MgYW5kIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHllYXIsIGZhbGxpbmcKLSAqIG9u
IHRoZSBzYW1lIGRheSBvZiB0aGUgd2Vlay4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMg
YSB5ZWFyIGJldHdlZW4gdGhpcyBjdXJyZW50IHllYXIgYW5kIDIwMzcsIGhvd2V2ZXIgdGhpcwot
ICogZnVuY3Rpb24gd2lsbCBwb3RlbnRpYWxseSByZXR1cm4gaW5jb3JyZWN0IHJlc3VsdHMgaWYg
dGhlIGN1cnJlbnQgeWVhciBpcyBhZnRlcgotICogMjAxMCwgKHJkYXI6Ly9wcm9ibGVtLzUwNTI5
NzUpLCBpZiB0aGUgeWVhciBwYXNzZWQgaW4gaXMgYmVmb3JlIDE5MDAgb3IgYWZ0ZXIKLSAqIDIx
MDAsIChyZGFyOi8vcHJvYmxlbS81MDU1MDM4KS4KLSAqLwotaW50IGVxdWl2YWxlbnRZZWFyRm9y
RFNUKGludCB5ZWFyKQotewotICAgIC8vIEl0IGlzIG9rIGlmIHRoZSBjYWNoZWQgeWVhciBpcyBu
b3QgdGhlIGN1cnJlbnQgeWVhciBhcyBsb25nIGFzIHRoZSBydWxlcwotICAgIC8vIGZvciBEU1Qg
ZGlkIG5vdCBjaGFuZ2UgYmV0d2VlbiB0aGUgdHdvIHllYXJzOyBpZiB0aGV5IGRpZCB0aGUgYXBw
IHdvdWxkIG5lZWQKLSAgICAvLyB0byBiZSByZXN0YXJ0ZWQuCi0gICAgc3RhdGljIGludCBtaW5Z
ZWFyID0gbWluaW11bVllYXJGb3JEU1QoKTsKLSAgICBpbnQgbWF4WWVhciA9IG1heGltdW1ZZWFy
Rm9yRFNUKCk7Ci0KLSAgICBpbnQgZGlmZmVyZW5jZTsKLSAgICBpZiAoeWVhciA+IG1heFllYXIp
Ci0gICAgICAgIGRpZmZlcmVuY2UgPSBtaW5ZZWFyIC0geWVhcjsKLSAgICBlbHNlIGlmICh5ZWFy
IDwgbWluWWVhcikKLSAgICAgICAgZGlmZmVyZW5jZSA9IG1heFllYXIgLSB5ZWFyOwotICAgIGVs
c2UKLSAgICAgICAgcmV0dXJuIHllYXI7Ci0KLSAgICBpbnQgcXVvdGllbnQgPSBkaWZmZXJlbmNl
IC8gMjg7Ci0gICAgaW50IHByb2R1Y3QgPSAocXVvdGllbnQpICogMjg7Ci0KLSAgICB5ZWFyICs9
IHByb2R1Y3Q7Ci0gICAgQVNTRVJUKCh5ZWFyID49IG1pblllYXIgJiYgeWVhciA8PSBtYXhZZWFy
KSB8fCAocHJvZHVjdCAtIHllYXIgPT0gc3RhdGljX2Nhc3Q8aW50PihOYU4pKSk7Ci0gICAgcmV0
dXJuIHllYXI7Ci19Ci0KLXN0YXRpYyBpbnQzMl90IGNhbGN1bGF0ZVVUQ09mZnNldCgpCi17Ci0g
ICAgdG0gbG9jYWx0OwotICAgIG1lbXNldCgmbG9jYWx0LCAwLCBzaXplb2YobG9jYWx0KSk7Ci0g
Ci0gICAgLy8gZ2V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyB0aW1lIHpvbmUgYW5kIFVU
QyBvbiBKYW4gMDEsIDIwMDAgMTI6MDA6MDAgQU0KLSAgICBsb2NhbHQudG1fbWRheSA9IDE7Ci0g
ICAgbG9jYWx0LnRtX3llYXIgPSAxMDA7Ci0gICAgdGltZV90IHV0Y09mZnNldCA9IDk0NjY4NDgw
MCAtIG1rdGltZSgmbG9jYWx0KTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih1
dGNPZmZzZXQgKiAxMDAwKTsKLX0KLQotI2lmIFBMQVRGT1JNKERBUldJTikKLXN0YXRpYyBpbnQz
Ml90IHNfY2FjaGVkVVRDT2Zmc2V0OyAvLyBJbiBtaWxsaXNlY29uZHMuIEFuIGFzc3VtcHRpb24g
aGVyZSBpcyB0aGF0IGFjY2VzcyB0byBhbiBpbnQzMl90IHZhcmlhYmxlIGlzIGF0b21pYyBvbiBw
bGF0Zm9ybXMgdGhhdCB0YWtlIHRoaXMgY29kZSBwYXRoLgotc3RhdGljIGJvb2wgc19oYXZlQ2Fj
aGVkVVRDT2Zmc2V0Owotc3RhdGljIGludCBzX25vdGlmaWNhdGlvblRva2VuOwotI2VuZGlmCi0K
LS8qCi0gKiBHZXQgdGhlIGRpZmZlcmVuY2UgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4gdGhpcyB0
aW1lIHpvbmUgYW5kIFVUQyAoR01UKQotICogTk9UIGluY2x1ZGluZyBEU1QuCi0gKi8KLWRvdWJs
ZSBnZXRVVENPZmZzZXQoKQotewotI2lmIFBMQVRGT1JNKERBUldJTikKLSAgICBpZiAoc19oYXZl
Q2FjaGVkVVRDT2Zmc2V0KSB7Ci0gICAgICAgIGludCBub3RpZmllZDsKLSAgICAgICAgdWludDMy
X3Qgc3RhdHVzID0gbm90aWZ5X2NoZWNrKHNfbm90aWZpY2F0aW9uVG9rZW4sICZub3RpZmllZCk7
Ci0gICAgICAgIGlmIChzdGF0dXMgPT0gTk9USUZZX1NUQVRVU19PSyAmJiAhbm90aWZpZWQpCi0g
ICAgICAgICAgICByZXR1cm4gc19jYWNoZWRVVENPZmZzZXQ7Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBpbnQzMl90IHV0Y09mZnNldCA9IGNhbGN1bGF0ZVVUQ09mZnNldCgpOwotCi0jaWYgUExBVEZP
Uk0oREFSV0lOKQotICAgIC8vIFRoZW9yZXRpY2FsbHksIGl0IGlzIHBvc3NpYmxlIHRoYXQgc2V2
ZXJhbCB0aHJlYWRzIHdpbGwgYmUgZXhlY3V0aW5nIHRoaXMgY29kZSBhdCBvbmNlLCBpbiB3aGlj
aCBjYXNlIHdlIHdpbGwgaGF2ZSBhIHJhY2UgY29uZGl0aW9uLAotICAgIC8vIGFuZCBhIG5ld2Vy
IHZhbHVlIG1heSBiZSBvdmVyd3JpdHRlbi4gSW4gcHJhY3RpY2UsIHRpbWUgem9uZXMgZG9uJ3Qg
Y2hhbmdlIHRoYXQgb2Z0ZW4uCi0gICAgc19jYWNoZWRVVENPZmZzZXQgPSB1dGNPZmZzZXQ7Ci0j
ZW5kaWYKLQotICAgIHJldHVybiB1dGNPZmZzZXQ7Ci19Ci0KLS8qCi0gKiBHZXQgdGhlIERTVCBv
ZmZzZXQgZm9yIHRoZSB0aW1lIHBhc3NlZCBpbi4gIFRha2VzCi0gKiBzZWNvbmRzIChub3QgbWls
bGlzZWNvbmRzKSBhbmQgY2Fubm90IGhhbmRsZSBkYXRlcyBiZWZvcmUgMTk3MAotICogb24gc29t
ZSBPUycKLSAqLwotc3RhdGljIGRvdWJsZSBnZXREU1RPZmZzZXRTaW1wbGUoZG91YmxlIGxvY2Fs
VGltZVNlY29uZHMsIGRvdWJsZSB1dGNPZmZzZXQpCi17Ci0gICAgaWYgKGxvY2FsVGltZVNlY29u
ZHMgPiBtYXhVbml4VGltZSkKLSAgICAgICAgbG9jYWxUaW1lU2Vjb25kcyA9IG1heFVuaXhUaW1l
OwotICAgIGVsc2UgaWYgKGxvY2FsVGltZVNlY29uZHMgPCAwKSAvLyBHbyBhaGVhZCBhIGRheSB0
byBtYWtlIGxvY2FsdGltZSB3b3JrIChkb2VzIG5vdCB3b3JrIHdpdGggMCkKLSAgICAgICAgbG9j
YWxUaW1lU2Vjb25kcyArPSBzZWNvbmRzUGVyRGF5OwotCi0gICAgLy9pbnB1dCBpcyBVVEMgc28g
d2UgaGF2ZSB0byBzaGlmdCBiYWNrIHRvIGxvY2FsIHRpbWUgdG8gZGV0ZXJtaW5lIERTVCB0aHVz
IHRoZSArIGdldFVUQ09mZnNldCgpCi0gICAgZG91YmxlIG9mZnNldFRpbWUgPSAobG9jYWxUaW1l
U2Vjb25kcyAqIG1zUGVyU2Vjb25kKSArIHV0Y09mZnNldDsKLQotICAgIC8vIE9mZnNldCBmcm9t
IFVUQyBidXQgZG9lc24ndCBpbmNsdWRlIERTVCBvYnZpb3VzbHkKLSAgICBpbnQgb2Zmc2V0SG91
ciA9ICBtc1RvSG91cnMob2Zmc2V0VGltZSk7Ci0gICAgaW50IG9mZnNldE1pbnV0ZSA9ICBtc1Rv
TWludXRlcyhvZmZzZXRUaW1lKTsKLQotICAgIC8vIEZJWE1FOiB0aW1lX3QgaGFzIGEgcG90ZW50
aWFsIHByb2JsZW0gaW4gMjAzOAotICAgIHRpbWVfdCBsb2NhbFRpbWUgPSBzdGF0aWNfY2FzdDx0
aW1lX3Q+KGxvY2FsVGltZVNlY29uZHMpOwotCi0gICAgdG0gbG9jYWxUTTsKLSAgICBnZXRMb2Nh
bFRpbWUoJmxvY2FsVGltZSwgJmxvY2FsVE0pOwotCi0gICAgZG91YmxlIGRpZmYgPSAoKGxvY2Fs
VE0udG1faG91ciAtIG9mZnNldEhvdXIpICogc2Vjb25kc1BlckhvdXIpICsgKChsb2NhbFRNLnRt
X21pbiAtIG9mZnNldE1pbnV0ZSkgKiA2MCk7Ci0KLSAgICBpZiAoZGlmZiA8IDApCi0gICAgICAg
IGRpZmYgKz0gc2Vjb25kc1BlckRheTsKLQotICAgIHJldHVybiAoZGlmZiAqIG1zUGVyU2Vjb25k
KTsKLX0KLQotLy8gR2V0IHRoZSBEU1Qgb2Zmc2V0LCBnaXZlbiBhIHRpbWUgaW4gVVRDCi1zdGF0
aWMgZG91YmxlIGdldERTVE9mZnNldChkb3VibGUgbXMsIGRvdWJsZSB1dGNPZmZzZXQpCi17Ci0g
ICAgLy8gT24gTWFjIE9TIFgsIHRoZSBjYWxsIHRvIGxvY2FsdGltZSAoc2VlIGdldERTVE9mZnNl
dFNpbXBsZSkgd2lsbCByZXR1cm4gaGlzdG9yaWNhbGx5IGFjY3VyYXRlCi0gICAgLy8gRFNUIGlu
Zm9ybWF0aW9uIChlLmcuIE5ldyBaZWFsYW5kIGRpZCBub3QgaGF2ZSBEU1QgZnJvbSAxOTQ2IHRv
IDE5NzQpIGhvd2V2ZXIgdGhlIEphdmFTY3JpcHQKLSAgICAvLyBzdGFuZGFyZCBleHBsaWNpdGx5
IGRpY3RhdGVzIHRoYXQgaGlzdG9yaWNhbCBpbmZvcm1hdGlvbiBzaG91bGQgbm90IGJlIGNvbnNp
ZGVyZWQgd2hlbgotICAgIC8vIGRldGVybWluaW5nIERTVC4gRm9yIHRoaXMgcmVhc29uIHdlIHNo
aWZ0IGF3YXkgZnJvbSB5ZWFycyB0aGF0IGxvY2FsdGltZSBjYW4gaGFuZGxlIGJ1dCB3b3VsZAot
ICAgIC8vIHJldHVybiBoaXN0b3JpY2FsbHkgYWNjdXJhdGUgaW5mb3JtYXRpb24uCi0gICAgaW50
IHllYXIgPSBtc1RvWWVhcihtcyk7Ci0gICAgaW50IGVxdWl2YWxlbnRZZWFyID0gZXF1aXZhbGVu
dFllYXJGb3JEU1QoeWVhcik7Ci0gICAgaWYgKHllYXIgIT0gZXF1aXZhbGVudFllYXIpIHsKLSAg
ICAgICAgYm9vbCBsZWFwWWVhciA9IGlzTGVhcFllYXIoeWVhcik7Ci0gICAgICAgIGludCBkYXlJ
blllYXJMb2NhbCA9IGRheUluWWVhcihtcywgeWVhcik7Ci0gICAgICAgIGludCBkYXlJbk1vbnRo
ID0gZGF5SW5Nb250aEZyb21EYXlJblllYXIoZGF5SW5ZZWFyTG9jYWwsIGxlYXBZZWFyKTsKLSAg
ICAgICAgaW50IG1vbnRoID0gbW9udGhGcm9tRGF5SW5ZZWFyKGRheUluWWVhckxvY2FsLCBsZWFw
WWVhcik7Ci0gICAgICAgIGludCBkYXkgPSBkYXRlVG9EYXlJblllYXIoZXF1aXZhbGVudFllYXIs
IG1vbnRoLCBkYXlJbk1vbnRoKTsKLSAgICAgICAgbXMgPSAoZGF5ICogbXNQZXJEYXkpICsgbXNU
b01pbGxpc2Vjb25kcyhtcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdldERTVE9mZnNldFNpbXBs
ZShtcyAvIG1zUGVyU2Vjb25kLCB1dGNPZmZzZXQpOwotfQotCi1kb3VibGUgZ3JlZ29yaWFuRGF0
ZVRpbWVUb01TKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJiB0LCBkb3VibGUgbWlsbGlTZWNvbmRz
LCBib29sIGlucHV0SXNVVEMpCi17Ci0gICAgaW50IGRheSA9IGRhdGVUb0RheUluWWVhcih0Lnll
YXIgKyAxOTAwLCB0Lm1vbnRoLCB0Lm1vbnRoRGF5KTsKLSAgICBkb3VibGUgbXMgPSB0aW1lVG9N
Uyh0LmhvdXIsIHQubWludXRlLCB0LnNlY29uZCwgbWlsbGlTZWNvbmRzKTsKLSAgICBkb3VibGUg
cmVzdWx0ID0gKGRheSAqIG1zUGVyRGF5KSArIG1zOwotCi0gICAgaWYgKCFpbnB1dElzVVRDKSB7
IC8vIGNvbnZlcnQgdG8gVVRDCi0gICAgICAgIGRvdWJsZSB1dGNPZmZzZXQgPSBnZXRVVENPZmZz
ZXQoKTsKLSAgICAgICAgcmVzdWx0IC09IHV0Y09mZnNldDsKLSAgICAgICAgcmVzdWx0IC09IGdl
dERTVE9mZnNldChyZXN1bHQsIHV0Y09mZnNldCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoZG91YmxlIG1zLCBib29sIG91dHB1
dElzVVRDLCBHcmVnb3JpYW5EYXRlVGltZSYgdG0pCi17Ci0gICAgLy8gaW5wdXQgaXMgVVRDCi0g
ICAgZG91YmxlIGRzdE9mZiA9IDAuMDsKLSAgICBjb25zdCBkb3VibGUgdXRjT2ZmID0gZ2V0VVRD
T2Zmc2V0KCk7Ci0KLSAgICBpZiAoIW91dHB1dElzVVRDKSB7ICAvLyBjb252ZXJ0IHRvIGxvY2Fs
IHRpbWUKLSAgICAgICAgZHN0T2ZmID0gZ2V0RFNUT2Zmc2V0KG1zLCB1dGNPZmYpOwotICAgICAg
ICBtcyArPSBkc3RPZmYgKyB1dGNPZmY7Ci0gICAgfQotCi0gICAgY29uc3QgaW50IHllYXIgPSBt
c1RvWWVhcihtcyk7Ci0gICAgdG0uc2Vjb25kICAgPSAgbXNUb1NlY29uZHMobXMpOwotICAgIHRt
Lm1pbnV0ZSAgID0gIG1zVG9NaW51dGVzKG1zKTsKLSAgICB0bS5ob3VyICAgICA9ICBtc1RvSG91
cnMobXMpOwotICAgIHRtLndlZWtEYXkgID0gIG1zVG9XZWVrRGF5KG1zKTsKLSAgICB0bS55ZWFy
RGF5ICA9ICBkYXlJblllYXIobXMsIHllYXIpOwotICAgIHRtLm1vbnRoRGF5ID0gIGRheUluTW9u
dGhGcm9tRGF5SW5ZZWFyKHRtLnllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOwotICAgIHRtLm1v
bnRoICAgID0gIG1vbnRoRnJvbURheUluWWVhcih0bS55ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIp
KTsKLSAgICB0bS55ZWFyICAgICA9ICB5ZWFyIC0gMTkwMDsKLSAgICB0bS5pc0RTVCAgICA9ICBk
c3RPZmYgIT0gMC4wOwotCi0gICAgdG0udXRjT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8bG9uZz4oKGRz
dE9mZiArIHV0Y09mZikgLyBtc1BlclNlY29uZCk7Ci0gICAgdG0udGltZVpvbmUgPSBOVUxMOwot
fQotCi12b2lkIGluaXREYXRlTWF0aCgpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIHN0YXRpYyBi
b29sIGFscmVhZHlJbml0aWFsaXplZDsKLSAgICBBU1NFUlQoIWFscmVhZHlJbml0aWFsaXplZCsr
KTsKLSNlbmRpZgotCi0gICAgZXF1aXZhbGVudFllYXJGb3JEU1QoMjAwMCk7IC8vIE5lZWQgdG8g
Y2FsbCBvbmNlIHRvIGluaXRpYWxpemUgYSBzdGF0aWMgdXNlZCBpbiB0aGlzIGZ1bmN0aW9uLgot
I2lmIFBMQVRGT1JNKERBUldJTikKLSAgICAvLyBSZWdpc3RlciBmb3IgYSBub3RpZmljYXRpb24g
d2hlbmV2ZXIgdGhlIHRpbWUgem9uZSBjaGFuZ2VzLgotICAgIHVpbnQzMl90IHN0YXR1cyA9IG5v
dGlmeV9yZWdpc3Rlcl9jaGVjaygiY29tLmFwcGxlLnN5c3RlbS50aW1lem9uZSIsICZzX25vdGlm
aWNhdGlvblRva2VuKTsKLSAgICBpZiAoc3RhdHVzID09IE5PVElGWV9TVEFUVVNfT0spIHsKLSAg
ICAgICAgc19jYWNoZWRVVENPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKLSAgICAgICAg
c19oYXZlQ2FjaGVkVVRDT2Zmc2V0ID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RhdGlj
IGlubGluZSBkb3VibGUgeW1kaG1zVG9TZWNvbmRzKGxvbmcgeWVhciwgaW50IG1vbiwgaW50IGRh
eSwgaW50IGhvdXIsIGludCBtaW51dGUsIGludCBzZWNvbmQpCi17Ci0gICAgZG91YmxlIGRheXMg
PSAoZGF5IC0gMzIwNzUpCi0gICAgICAgICsgZmxvb3IoMTQ2MSAqICh5ZWFyICsgNDgwMC4wICsg
KG1vbiAtIDE0KSAvIDEyKSAvIDQpCi0gICAgICAgICsgMzY3ICogKG1vbiAtIDIgLSAobW9uIC0g
MTQpIC8gMTIgKiAxMikgLyAxMgotICAgICAgICAtIGZsb29yKDMgKiAoKHllYXIgKyA0OTAwLjAg
KyAobW9uIC0gMTQpIC8gMTIpIC8gMTAwKSAvIDQpCi0gICAgICAgIC0gMjQ0MDU4ODsKLSAgICBy
ZXR1cm4gKChkYXlzICogaG91cnNQZXJEYXkgKyBob3VyKSAqIG1pbnV0ZXNQZXJIb3VyICsgbWlu
dXRlKSAqIHNlY29uZHNQZXJNaW51dGUgKyBzZWNvbmQ7Ci19Ci0KLS8vIFdlIGZvbGxvdyB0aGUg
cmVjb21tZW5kYXRpb24gb2YgUkZDIDI4MjIgdG8gY29uc2lkZXIgYWxsCi0vLyBvYnNvbGV0ZSB0
aW1lIHpvbmVzIG5vdCBsaXN0ZWQgaGVyZSBlcXVpdmFsZW50IHRvICItMDAwMCIuCi1zdGF0aWMg
Y29uc3Qgc3RydWN0IEtub3duWm9uZSB7Ci0jaWYgIVBMQVRGT1JNKFdJTl9PUykKLSAgICBjb25z
dAotI2VuZGlmCi0gICAgICAgIGNoYXIgdHpOYW1lWzRdOwotICAgIGludCB0ek9mZnNldDsKLX0g
a25vd25fem9uZXNbXSA9IHsKLSAgICB7ICJVVCIsIDAgfSwKLSAgICB7ICJHTVQiLCAwIH0sCi0g
ICAgeyAiRVNUIiwgLTMwMCB9LAotICAgIHsgIkVEVCIsIC0yNDAgfSwKLSAgICB7ICJDU1QiLCAt
MzYwIH0sCi0gICAgeyAiQ0RUIiwgLTMwMCB9LAotICAgIHsgIk1TVCIsIC00MjAgfSwKLSAgICB7
ICJNRFQiLCAtMzYwIH0sCi0gICAgeyAiUFNUIiwgLTQ4MCB9LAotICAgIHsgIlBEVCIsIC00MjAg
fQotfTsKLQotaW5saW5lIHN0YXRpYyB2b2lkIHNraXBTcGFjZXNBbmRDb21tZW50cyhjb25zdCBj
aGFyKiYgcykKLXsKLSAgICBpbnQgbmVzdGluZyA9IDA7Ci0gICAgY2hhciBjaDsKLSAgICB3aGls
ZSAoKGNoID0gKnMpKSB7Ci0gICAgICAgIGlmICghaXNBU0NJSVNwYWNlKGNoKSkgewotICAgICAg
ICAgICAgaWYgKGNoID09ICcoJykKLSAgICAgICAgICAgICAgICBuZXN0aW5nKys7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChjaCA9PSAnKScgJiYgbmVzdGluZyA+IDApCi0gICAgICAgICAgICAgICAg
bmVzdGluZy0tOwotICAgICAgICAgICAgZWxzZSBpZiAobmVzdGluZyA9PSAwKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHMrKzsKLSAgICB9Ci19Ci0KLS8vIHJl
dHVybnMgMC0xMSAoSmFuLURlYyk7IC0xIG9uIGZhaWx1cmUKLXN0YXRpYyBpbnQgZmluZE1vbnRo
KGNvbnN0IGNoYXIqIG1vbnRoU3RyKQotewotICAgIEFTU0VSVChtb250aFN0cik7Ci0gICAgY2hh
ciBuZWVkbGVbNF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAg
aWYgKCEqbW9udGhTdHIpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIG5lZWRsZVtp
XSA9IHN0YXRpY19jYXN0PGNoYXI+KHRvQVNDSUlMb3dlcigqbW9udGhTdHIrKykpOwotICAgIH0K
LSAgICBuZWVkbGVbM10gPSAnXDAnOwotICAgIGNvbnN0IGNoYXIgKmhheXN0YWNrID0gImphbmZl
Ym1hcmFwcm1heWp1bmp1bGF1Z3NlcG9jdG5vdmRlYyI7Ci0gICAgY29uc3QgY2hhciAqc3RyID0g
c3Ryc3RyKGhheXN0YWNrLCBuZWVkbGUpOwotICAgIGlmIChzdHIpIHsKLSAgICAgICAgaW50IHBv
c2l0aW9uID0gc3RhdGljX2Nhc3Q8aW50PihzdHIgLSBoYXlzdGFjayk7Ci0gICAgICAgIGlmIChw
b3NpdGlvbiAlIDMgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiAvIDM7Ci0gICAg
fQotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGJvb2wgcGFyc2VMb25nKGNvbnN0IGNoYXIq
IHN0cmluZywgY2hhcioqIHN0b3BQb3NpdGlvbiwgaW50IGJhc2UsIGxvbmcqIHJlc3VsdCkKLXsK
LSAgICAqcmVzdWx0ID0gc3RydG9sKHN0cmluZywgc3RvcFBvc2l0aW9uLCBiYXNlKTsKLSAgICAv
LyBBdm9pZCB0aGUgdXNlIG9mIGVycm5vIGFzIGl0IGlzIG5vdCBhdmFpbGFibGUgb24gV2luZG93
cyBDRQotICAgIGlmIChzdHJpbmcgPT0gKnN0b3BQb3NpdGlvbiB8fCAqcmVzdWx0ID09IExPTkdf
TUlOIHx8ICpyZXN1bHQgPT0gTE9OR19NQVgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotZG91YmxlIHBhcnNlRGF0ZShjb25zdCBVU3RyaW5nICZkYXRlKQot
ewotICAgIC8vIFRoaXMgcGFyc2VzIGEgZGF0ZSBpbiB0aGUgZm9ybToKLSAgICAvLyAgICAgVHVl
c2RheSwgMDktTm92LTk5IDIzOjEyOjQwIEdNVAotICAgIC8vIG9yCi0gICAgLy8gICAgIFNhdCwg
MDEtSmFuLTIwMDAgMDg6MDA6MDAgR01UCi0gICAgLy8gb3IKLSAgICAvLyAgICAgU2F0LCAwMSBK
YW4gMjAwMCAwODowMDowMCBHTVQKLSAgICAvLyBvcgotICAgIC8vICAgICAwMSBKYW4gOTkgMjI6
MDAgKzAxMDAgICAgKGV4Y2VwdGlvbnMgaW4gcmZjODIyL3JmYzI4MjIpCi0gICAgLy8gIyMjIG5v
biBSRkMgZm9ybWF0cywgYWRkZWQgZm9yIEphdmFzY3JpcHQ6Ci0gICAgLy8gICAgIFtXZWRuZXNk
YXldIEphbnVhcnkgMDkgMTk5OSAyMzoxMjo0MCBHTVQKLSAgICAvLyAgICAgW1dlZG5lc2RheV0g
SmFudWFyeSAwOSAyMzoxMjo0MCBHTVQgMTk5OQotICAgIC8vCi0gICAgLy8gV2UgaWdub3JlIHRo
ZSB3ZWVrZGF5LgotCi0gICAgQ1N0cmluZyBkYXRlQ1N0cmluZyA9IGRhdGUuVVRGOFN0cmluZygp
OwotICAgIGNvbnN0IGNoYXIgKmRhdGVTdHJpbmcgPSBkYXRlQ1N0cmluZy5jX3N0cigpOwotICAg
ICAKLSAgICAvLyBTa2lwIGxlYWRpbmcgc3BhY2UKLSAgICBza2lwU3BhY2VzQW5kQ29tbWVudHMo
ZGF0ZVN0cmluZyk7Ci0KLSAgICBsb25nIG1vbnRoID0gLTE7Ci0gICAgY29uc3QgY2hhciAqd29y
ZFN0YXJ0ID0gZGF0ZVN0cmluZzsKLSAgICAvLyBDaGVjayBjb250ZW50cyBvZiBmaXJzdCB3b3Jk
cyBpZiBub3QgbnVtYmVyCi0gICAgd2hpbGUgKCpkYXRlU3RyaW5nICYmICFpc0FTQ0lJRGlnaXQo
KmRhdGVTdHJpbmcpKSB7Ci0gICAgICAgIGlmIChpc0FTQ0lJU3BhY2UoKmRhdGVTdHJpbmcpIHx8
ICpkYXRlU3RyaW5nID09ICcoJykgewotICAgICAgICAgICAgaWYgKGRhdGVTdHJpbmcgLSB3b3Jk
U3RhcnQgPj0gMykKLSAgICAgICAgICAgICAgICBtb250aCA9IGZpbmRNb250aCh3b3JkU3RhcnQp
OwotICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOwotICAgICAg
ICAgICAgd29yZFN0YXJ0ID0gZGF0ZVN0cmluZzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
IGRhdGVTdHJpbmcrKzsKLSAgICB9Ci0KLSAgICAvLyBNaXNzaW5nIGRlbGltaXRlciBiZXR3ZWVu
IG1vbnRoIGFuZCBkYXkgKGxpa2UgIkphbnVhcnkyOSIpPwotICAgIGlmIChtb250aCA9PSAtMSAm
JiB3b3JkU3RhcnQgIT0gZGF0ZVN0cmluZykKLSAgICAgICAgbW9udGggPSBmaW5kTW9udGgod29y
ZFN0YXJ0KTsKLQotICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsKLQotICAg
IGlmICghKmRhdGVTdHJpbmcpCi0gICAgICAgIHJldHVybiBOYU47Ci0KLSAgICAvLyAnIDA5LU5v
di05OSAyMzoxMjo0MCBHTVQnCi0gICAgY2hhciogbmV3UG9zU3RyOwotICAgIGxvbmcgZGF5Owot
ICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmZGF5KSkKLSAg
ICAgICAgcmV0dXJuIE5hTjsKLSAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwotCi0gICAgaWYg
KCEqZGF0ZVN0cmluZykKLSAgICAgICAgcmV0dXJuIE5hTjsKLQotICAgIGlmIChkYXkgPCAwKQot
ICAgICAgICByZXR1cm4gTmFOOwotCi0gICAgbG9uZyB5ZWFyID0gMDsKLSAgICBpZiAoZGF5ID4g
MzEpIHsKLSAgICAgICAgLy8gIyMjIHdoZXJlIGlzIHRoZSBib3VuZGFyeSBhbmQgd2hhdCBoYXBw
ZW5zIGJlbG93PwotICAgICAgICBpZiAoKmRhdGVTdHJpbmcgIT0gJy8nKQotICAgICAgICAgICAg
cmV0dXJuIE5hTjsKLSAgICAgICAgLy8gbG9va3MgbGlrZSBhIFlZWVkvTU0vREQgZGF0ZQotICAg
ICAgICBpZiAoISorK2RhdGVTdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAg
ICB5ZWFyID0gZGF5OwotICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9z
U3RyLCAxMCwgJm1vbnRoKSkKLSAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAgIG1vbnRo
IC09IDE7Ci0gICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7Ci0gICAgICAgIGlmICgqZGF0
ZVN0cmluZysrICE9ICcvJyB8fCAhKmRhdGVTdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gTmFO
OwotICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJmRh
eSkpCi0gICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9z
U3RyOwotICAgIH0gZWxzZSBpZiAoKmRhdGVTdHJpbmcgPT0gJy8nICYmIG1vbnRoID09IC0xKSB7
Ci0gICAgICAgIGRhdGVTdHJpbmcrKzsKLSAgICAgICAgLy8gVGhpcyBsb29rcyBsaWtlIGEgTU0v
REQvWVlZWSBkYXRlLCBub3QgYW4gUkZDIGRhdGUuCi0gICAgICAgIG1vbnRoID0gZGF5IC0gMTsg
Ly8gMC1iYXNlZAotICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3Ry
LCAxMCwgJmRheSkpCi0gICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICBpZiAoZGF5IDwg
MSB8fCBkYXkgPiAzMSkKLSAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAgIGRhdGVTdHJp
bmcgPSBuZXdQb3NTdHI7Ci0gICAgICAgIGlmICgqZGF0ZVN0cmluZyA9PSAnLycpCi0gICAgICAg
ICAgICBkYXRlU3RyaW5nKys7Ci0gICAgICAgIGlmICghKmRhdGVTdHJpbmcpCi0gICAgICAgICAg
ICByZXR1cm4gTmFOOwotICAgICB9IGVsc2UgewotICAgICAgICBpZiAoKmRhdGVTdHJpbmcgPT0g
Jy0nKQotICAgICAgICAgICAgZGF0ZVN0cmluZysrOwotCi0gICAgICAgIHNraXBTcGFjZXNBbmRD
b21tZW50cyhkYXRlU3RyaW5nKTsKLQotICAgICAgICBpZiAoKmRhdGVTdHJpbmcgPT0gJywnKQot
ICAgICAgICAgICAgZGF0ZVN0cmluZysrOwotCi0gICAgICAgIGlmIChtb250aCA9PSAtMSkgeyAv
LyBub3QgZm91bmQgeWV0Ci0gICAgICAgICAgICBtb250aCA9IGZpbmRNb250aChkYXRlU3RyaW5n
KTsKLSAgICAgICAgICAgIGlmIChtb250aCA9PSAtMSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
TmFOOwotCi0gICAgICAgICAgICB3aGlsZSAoKmRhdGVTdHJpbmcgJiYgKmRhdGVTdHJpbmcgIT0g
Jy0nICYmICpkYXRlU3RyaW5nICE9ICcsJyAmJiAhaXNBU0NJSVNwYWNlKCpkYXRlU3RyaW5nKSkK
LSAgICAgICAgICAgICAgICBkYXRlU3RyaW5nKys7Ci0KLSAgICAgICAgICAgIGlmICghKmRhdGVT
dHJpbmcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKLQotICAgICAgICAgICAgLy8gJy05
OSAyMzoxMjo0MCBHTVQnCi0gICAgICAgICAgICBpZiAoKmRhdGVTdHJpbmcgIT0gJy0nICYmICpk
YXRlU3RyaW5nICE9ICcvJyAmJiAqZGF0ZVN0cmluZyAhPSAnLCcgJiYgIWlzQVNDSUlTcGFjZSgq
ZGF0ZVN0cmluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKLSAgICAgICAgICAgIGRh
dGVTdHJpbmcrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtb250aCA8IDAgfHwgbW9u
dGggPiAxMSkKLSAgICAgICAgcmV0dXJuIE5hTjsKLQotICAgIC8vICc5OSAyMzoxMjo0MCBHTVQn
Ci0gICAgaWYgKHllYXIgPD0gMCAmJiAqZGF0ZVN0cmluZykgewotICAgICAgICBpZiAoIXBhcnNl
TG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJnllYXIpKQotICAgICAgICAgICAgcmV0
dXJuIE5hTjsKLSAgICB9Ci0gICAgCi0gICAgLy8gRG9uJ3QgZmFpbCBpZiB0aGUgdGltZSBpcyBt
aXNzaW5nLgotICAgIGxvbmcgaG91ciA9IDA7Ci0gICAgbG9uZyBtaW51dGUgPSAwOwotICAgIGxv
bmcgc2Vjb25kID0gMDsKLSAgICBpZiAoISpuZXdQb3NTdHIpCi0gICAgICAgIGRhdGVTdHJpbmcg
PSBuZXdQb3NTdHI7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vICcgMjM6MTI6NDAgR01UJwotICAg
ICAgICBpZiAoIShpc0FTQ0lJU3BhY2UoKm5ld1Bvc1N0cikgfHwgKm5ld1Bvc1N0ciA9PSAnLCcp
KSB7Ci0gICAgICAgICAgICBpZiAoKm5ld1Bvc1N0ciAhPSAnOicpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIE5hTjsKLSAgICAgICAgICAgIC8vIFRoZXJlIHdhcyBubyB5ZWFyOyB0aGUgbnVtYmVy
IHdhcyB0aGUgaG91ci4KLSAgICAgICAgICAgIHllYXIgPSAtMTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIGluIHRoZSBub3JtYWwgY2FzZSAod2UgcGFyc2VkIHRoZSB5ZWFyKSwg
YWR2YW5jZSB0byB0aGUgbmV4dCBudW1iZXIKLSAgICAgICAgICAgIGRhdGVTdHJpbmcgPSArK25l
d1Bvc1N0cjsKLSAgICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAx
MCwgJmhvdXIpOwotICAgICAgICAvLyBEbyBub3QgY2hlY2sgZm9yIGVycm5vIGhlcmUgc2luY2Ug
d2Ugd2FudCB0byBjb250aW51ZQotICAgICAgICAvLyBldmVuIGlmIGVycm5vIHdhcyBzZXQgYmVj
YXN1ZSB3ZSBhcmUgc3RpbGwgbG9va2luZwotICAgICAgICAvLyBmb3IgdGhlIHRpbWV6b25lIQot
Ci0gICAgICAgIC8vIFJlYWQgYSBudW1iZXI/IElmIG5vdCwgdGhpcyBtaWdodCBiZSBhIHRpbWV6
b25lIG5hbWUuCi0gICAgICAgIGlmIChuZXdQb3NTdHIgIT0gZGF0ZVN0cmluZykgewotICAgICAg
ICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKLQotICAgICAgICAgICAgaWYgKGhvdXIgPCAw
IHx8IGhvdXIgPiAyMykKLSAgICAgICAgICAgICAgICByZXR1cm4gTmFOOwotCi0gICAgICAgICAg
ICBpZiAoISpkYXRlU3RyaW5nKQotICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0KLSAgICAg
ICAgICAgIC8vICc6MTI6NDAgR01UJwotICAgICAgICAgICAgaWYgKCpkYXRlU3RyaW5nKysgIT0g
JzonKQotICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0KLSAgICAgICAgICAgIGlmICghcGFy
c2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmbWludXRlKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gTmFOOwotICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKLQot
ICAgICAgICAgICAgaWYgKG1pbnV0ZSA8IDAgfHwgbWludXRlID4gNTkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIE5hTjsKLQotICAgICAgICAgICAgLy8gJzo0MCBHTVQnCi0gICAgICAgICAgICBp
ZiAoKmRhdGVTdHJpbmcgJiYgKmRhdGVTdHJpbmcgIT0gJzonICYmICFpc0FTQ0lJU3BhY2UoKmRh
dGVTdHJpbmcpKQotICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0KLSAgICAgICAgICAgIC8v
IHNlY29uZHMgYXJlIG9wdGlvbmFsIGluIHJmYzgyMiArIHJmYzI4MjIKLSAgICAgICAgICAgIGlm
ICgqZGF0ZVN0cmluZyA9PSc6JykgewotICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcrKzsKLQot
ICAgICAgICAgICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEw
LCAmc2Vjb25kKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKLSAgICAgICAgICAg
ICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKHNlY29uZCA8IDAgfHwgc2Vjb25kID4gNTkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBOYU47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21t
ZW50cyhkYXRlU3RyaW5nKTsKLQotICAgICAgICAgICAgaWYgKHN0cm5jYXNlY21wKGRhdGVTdHJp
bmcsICJBTSIsIDIpID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoaG91ciA+IDEyKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICAgICAgICAgIGlmIChob3VyID09
IDEyKQotICAgICAgICAgICAgICAgICAgICBob3VyID0gMDsKLSAgICAgICAgICAgICAgICBkYXRl
U3RyaW5nICs9IDI7Ci0gICAgICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVT
dHJpbmcpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJuY2FzZWNtcChkYXRlU3RyaW5nLCAi
UE0iLCAyKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGhvdXIgPiAxMikKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5hTjsKLSAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMikK
LSAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjsKLSAgICAgICAgICAgICAgICBkYXRlU3Ry
aW5nICs9IDI7Ci0gICAgICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJp
bmcpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBoYXZlVFog
PSBmYWxzZTsKLSAgICBpbnQgb2Zmc2V0ID0gMDsKLQotICAgIC8vIERvbid0IGZhaWwgaWYgdGhl
IHRpbWUgem9uZSBpcyBtaXNzaW5nLiAKLSAgICAvLyBTb21lIHdlYnNpdGVzIG9taXQgdGhlIHRp
bWUgem9uZSAoNDI3NTIwNikuCi0gICAgaWYgKCpkYXRlU3RyaW5nKSB7Ci0gICAgICAgIGlmIChz
dHJuY2FzZWNtcChkYXRlU3RyaW5nLCAiR01UIiwgMykgPT0gMCB8fCBzdHJuY2FzZWNtcChkYXRl
U3RyaW5nLCAiVVRDIiwgMykgPT0gMCkgewotICAgICAgICAgICAgZGF0ZVN0cmluZyArPSAzOwot
ICAgICAgICAgICAgaGF2ZVRaID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgqZGF0
ZVN0cmluZyA9PSAnKycgfHwgKmRhdGVTdHJpbmcgPT0gJy0nKSB7Ci0gICAgICAgICAgICBsb25n
IG87Ci0gICAgICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAx
MCwgJm8pKQotICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAgICAgICBkYXRlU3Ry
aW5nID0gbmV3UG9zU3RyOwotCi0gICAgICAgICAgICBpZiAobyA8IC05OTU5IHx8IG8gPiA5OTU5
KQotICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0KLSAgICAgICAgICAgIGludCBzZ24gPSAo
byA8IDApID8gLTEgOiAxOwotICAgICAgICAgICAgbyA9IGFicyhvKTsKLSAgICAgICAgICAgIGlm
ICgqZGF0ZVN0cmluZyAhPSAnOicpIHsKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSAoKG8gLyAx
MDApICogNjAgKyAobyAlIDEwMCkpICogc2duOwotICAgICAgICAgICAgfSBlbHNlIHsgLy8gR01U
KzA1OjAwCi0gICAgICAgICAgICAgICAgbG9uZyBvMjsKLSAgICAgICAgICAgICAgICBpZiAoIXBh
cnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJm8yKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5hTjsKLSAgICAgICAgICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3Ry
OwotICAgICAgICAgICAgICAgIG9mZnNldCA9IChvICogNjAgKyBvMikgKiBzZ247Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBoYXZlVFogPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnQoc2l6ZW9mKGtub3duX3pvbmVzKSAvIHNp
emVvZihLbm93blpvbmUpKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKDAgPT0gc3RybmNh
c2VjbXAoZGF0ZVN0cmluZywga25vd25fem9uZXNbaV0udHpOYW1lLCBzdHJsZW4oa25vd25fem9u
ZXNbaV0udHpOYW1lKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0ga25vd25fem9u
ZXNbaV0udHpPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcgKz0gc3RybGVu
KGtub3duX3pvbmVzW2ldLnR6TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhdmVUWiA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhk
YXRlU3RyaW5nKTsKLQotICAgIGlmICgqZGF0ZVN0cmluZyAmJiB5ZWFyID09IC0xKSB7Ci0gICAg
ICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmeWVhcikpCi0g
ICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwot
ICAgIH0KLSAgICAgCi0gICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOwotICAg
ICAKLSAgICAvLyBUcmFpbGluZyBnYXJiYWdlCi0gICAgaWYgKCpkYXRlU3RyaW5nKQotICAgICAg
ICByZXR1cm4gTmFOOwotCi0gICAgLy8gWTJLOiBIYW5kbGUgMiBkaWdpdCB5ZWFycy4KLSAgICBp
ZiAoeWVhciA+PSAwICYmIHllYXIgPCAxMDApIHsKLSAgICAgICAgaWYgKHllYXIgPCA1MCkKLSAg
ICAgICAgICAgIHllYXIgKz0gMjAwMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgeWVhciAr
PSAxOTAwOwotICAgIH0KLQotICAgIC8vIGZhbGwgYmFjayB0byBsb2NhbCB0aW1lem9uZQotICAg
IGlmICghaGF2ZVRaKSB7Ci0gICAgICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgICAgIHQu
bW9udGhEYXkgPSBkYXk7Ci0gICAgICAgIHQubW9udGggPSBtb250aDsKLSAgICAgICAgdC55ZWFy
ID0geWVhciAtIDE5MDA7Ci0gICAgICAgIHQuaXNEU1QgPSAtMTsKLSAgICAgICAgdC5zZWNvbmQg
PSBzZWNvbmQ7Ci0gICAgICAgIHQubWludXRlID0gbWludXRlOwotICAgICAgICB0LmhvdXIgPSBo
b3VyOwotCi0gICAgICAgIC8vIFVzZSBvdXIgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKCkgcmF0aGVy
IHRoYW4gbWt0aW1lKCkgYXMgdGhlIGxhdHRlciBjYW4ndCBoYW5kbGUgdGhlIGZ1bGwgeWVhciBy
YW5nZS4KLSAgICAgICAgcmV0dXJuIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCAwLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuICh5bWRobXNUb1NlY29uZHMoeWVhciwgbW9udGggKyAxLCBk
YXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSAtIChvZmZzZXQgKiA2MC4wKSkgKiBtc1BlclNlY29u
ZDsKLX0KLQotZG91YmxlIHRpbWVDbGlwKGRvdWJsZSB0KQotewotICAgIGlmICghaXNmaW5pdGUo
dCkpCi0gICAgICAgIHJldHVybiBOYU47Ci0gICAgaWYgKGZhYnModCkgPiA4LjY0RTE1KQotICAg
ICAgICByZXR1cm4gTmFOOwotICAgIHJldHVybiB0cnVuYyh0KTsKLX0KLQotVVN0cmluZyBmb3Jt
YXREYXRlKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lICZ0KQotewotICAgIGNoYXIgYnVmZmVyWzEw
MF07Ci0gICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzICVzICUwMmQgJTA0
ZCIsCi0gICAgICAgIHdlZWtkYXlOYW1lWyh0LndlZWtEYXkgKyA2KSAlIDddLAotICAgICAgICBt
b250aE5hbWVbdC5tb250aF0sIHQubW9udGhEYXksIHQueWVhciArIDE5MDApOwotICAgIHJldHVy
biBidWZmZXI7Ci19Ci0KLVVTdHJpbmcgZm9ybWF0RGF0ZVVUQ1ZhcmlhbnQoY29uc3QgR3JlZ29y
aWFuRGF0ZVRpbWUgJnQpCi17Ci0gICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICBzbnByaW50Zihi
dWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMsICUwMmQgJXMgJTA0ZCIsCi0gICAgICAgIHdlZWtk
YXlOYW1lWyh0LndlZWtEYXkgKyA2KSAlIDddLAotICAgICAgICB0Lm1vbnRoRGF5LCBtb250aE5h
bWVbdC5tb250aF0sIHQueWVhciArIDE5MDApOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLVVT
dHJpbmcgZm9ybWF0VGltZShjb25zdCBHcmVnb3JpYW5EYXRlVGltZSAmdCwgYm9vbCB1dGMpCi17
Ci0gICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICBpZiAodXRjKSB7Ci0gICAgICAgIHNucHJpbnRm
KGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlMDJkOiUwMmQ6JTAyZCBHTVQiLCB0LmhvdXIsIHQu
bWludXRlLCB0LnNlY29uZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IG9mZnNldCA9IGFi
cyhnbXRvZmZzZXQodCkpOwotICAgICAgICBjaGFyIHRpbWVab25lTmFtZVs3MF07Ci0gICAgICAg
IHN0cnVjdCB0bSBndG0gPSB0OwotICAgICAgICBzdHJmdGltZSh0aW1lWm9uZU5hbWUsIHNpemVv
Zih0aW1lWm9uZU5hbWUpLCAiJVoiLCAmZ3RtKTsKLQotICAgICAgICBpZiAodGltZVpvbmVOYW1l
WzBdKSB7Ci0gICAgICAgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJTAy
ZDolMDJkOiUwMmQgR01UJWMlMDJkJTAyZCAoJXMpIiwKLSAgICAgICAgICAgICAgICB0LmhvdXIs
IHQubWludXRlLCB0LnNlY29uZCwKLSAgICAgICAgICAgICAgICBnbXRvZmZzZXQodCkgPCAwID8g
Jy0nIDogJysnLCBvZmZzZXQgLyAoNjAqNjApLCAob2Zmc2V0IC8gNjApICUgNjAsIHRpbWVab25l
TmFtZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzbnByaW50ZihidWZmZXIsIHNp
emVvZihidWZmZXIpLCAiJTAyZDolMDJkOiUwMmQgR01UJWMlMDJkJTAyZCIsCi0gICAgICAgICAg
ICAgICAgdC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQsCi0gICAgICAgICAgICAgICAgZ210b2Zm
c2V0KHQpIDwgMCA/ICctJyA6ICcrJywgb2Zmc2V0IC8gKDYwKjYwKSwgKG9mZnNldCAvIDYwKSAl
IDYwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gVVN0cmluZyhidWZmZXIpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZU1h
dGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVNYXRoLmgJKHJl
dmlzaW9uIDQ0NTAxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlTWF0aC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVmVyc2lvbjogTVBM
IDEuMS9HUEwgMi4wL0xHUEwgMi4xCi0gKgotICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBh
cmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCi0gKiAxLjEg
KHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKLSAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwotICoKLSAqIFNvZnR3
YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgYmFzaXMsCi0gKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKLSAqIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCi0gKiBMaWNl
bnNlLgotICoKLSAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29tbXVuaWNhdG9yIGNs
aWVudCBjb2RlLCByZWxlYXNlZAotICogTWFyY2ggMzEsIDE5OTguCi0gKgotICogVGhlIEluaXRp
YWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCi0gKiBOZXRzY2FwZSBDb21tdW5p
Y2F0aW9ucyBDb3Jwb3JhdGlvbi4KLSAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwg
RGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgKLSAqIHRoZSBJbml0aWFsIERldmVsb3Bl
ci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBDb250cmlidXRvcihzKToKLSAqCi0gKiBB
bHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVy
IHRoZSB0ZXJtcyBvZgotICogZWl0aGVyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksCi0gKiBvciB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwK
LSAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBh
cmUgYXBwbGljYWJsZSBpbnN0ZWFkCi0gKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8g
YWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQotICogdW5kZXIgdGhl
IHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90
aGVycyB0bwotICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKLSAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBw
cm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCi0gKiBhbmQg
b3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3Ug
ZG8gbm90IGRlbGV0ZQotICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1
c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgotICogdGhlIHRlcm1zIG9mIGFueSBv
bmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KLSAqCi0gKi8KLQotI2lmbmRlZiBE
YXRlTWF0aF9oCi0jZGVmaW5lIERhdGVNYXRoX2gKLQotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNs
dWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIFVTdHJpbmc7Ci1zdHJ1Y3QgR3JlZ29yaWFuRGF0ZVRpbWU7Ci0KLXZv
aWQgaW5pdERhdGVNYXRoKCk7Ci12b2lkIG1zVG9HcmVnb3JpYW5EYXRlVGltZShkb3VibGUsIGJv
b2wgb3V0cHV0SXNVVEMsIEdyZWdvcmlhbkRhdGVUaW1lJik7Ci1kb3VibGUgZ3JlZ29yaWFuRGF0
ZVRpbWVUb01TKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJiwgZG91YmxlLCBib29sIGlucHV0SXNV
VEMpOwotZG91YmxlIGdldFVUQ09mZnNldCgpOwotaW50IGVxdWl2YWxlbnRZZWFyRm9yRFNUKGlu
dCB5ZWFyKTsKLWRvdWJsZSBnZXRDdXJyZW50VVRDVGltZSgpOwotZG91YmxlIGdldEN1cnJlbnRV
VENUaW1lV2l0aE1pY3Jvc2Vjb25kcygpOwotdm9pZCBnZXRMb2NhbFRpbWUoY29uc3QgdGltZV90
KiwgdG0qKTsKLQotLy8gTm90IHJlYWxseSBtYXRoIHJlbGF0ZWQsIGJ1dCB0aGlzIGlzIGN1cnJl
bnRseSB0aGUgb25seSBzaGFyZWQgcGxhY2UgdG8gcHV0IHRoZXNlLiAgCi1kb3VibGUgcGFyc2VE
YXRlKGNvbnN0IFVTdHJpbmcmKTsKLWRvdWJsZSB0aW1lQ2xpcChkb3VibGUpOwotVVN0cmluZyBm
b3JtYXREYXRlKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJik7Ci1VU3RyaW5nIGZvcm1hdERhdGVV
VENWYXJpYW50KGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJik7Ci1VU3RyaW5nIGZvcm1hdFRpbWUo
Y29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmLCBib29sIGlucHV0SXNVVEMpOwotCi0KLWNvbnN0IGNo
YXIgKiBjb25zdCB3ZWVrZGF5TmFtZVs3XSA9IHsgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIs
ICJGcmkiLCAiU2F0IiwgIlN1biIgfTsKLWNvbnN0IGNoYXIgKiBjb25zdCBtb250aE5hbWVbMTJd
ID0geyAiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkF1
ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiIH07Ci0KLWNvbnN0IGRvdWJsZSBob3Vyc1Bl
ckRheSA9IDI0LjA7Ci1jb25zdCBkb3VibGUgbWludXRlc1BlckhvdXIgPSA2MC4wOwotY29uc3Qg
ZG91YmxlIHNlY29uZHNQZXJIb3VyID0gNjAuMCAqIDYwLjA7Ci1jb25zdCBkb3VibGUgc2Vjb25k
c1Blck1pbnV0ZSA9IDYwLjA7Ci1jb25zdCBkb3VibGUgbXNQZXJTZWNvbmQgPSAxMDAwLjA7Ci1j
b25zdCBkb3VibGUgbXNQZXJNaW51dGUgPSA2MC4wICogMTAwMC4wOwotY29uc3QgZG91YmxlIG1z
UGVySG91ciA9IDYwLjAgKiA2MC4wICogMTAwMC4wOwotY29uc3QgZG91YmxlIG1zUGVyRGF5ID0g
MjQuMCAqIDYwLjAgKiA2MC4wICogMTAwMC4wOwotCi0vLyBJbnRlbnRpb25hbGx5IG92ZXJyaWRk
aW5nIHRoZSBkZWZhdWx0IHRtIG9mIHRoZSBzeXN0ZW0KLS8vIFRlZSBtZW1iZXJzIG9mIHRtIGRp
ZmZlciBvbiB2YXJpb3VzIG9wZXJhdGluZyBzeXN0ZW1zLgotc3RydWN0IEdyZWdvcmlhbkRhdGVU
aW1lIDogTm9uY29weWFibGUgewotICAgIEdyZWdvcmlhbkRhdGVUaW1lKCkKLSAgICAgICAgOiBz
ZWNvbmQoMCkKLSAgICAgICAgLCBtaW51dGUoMCkKLSAgICAgICAgLCBob3VyKDApCi0gICAgICAg
ICwgd2Vla0RheSgwKQotICAgICAgICAsIG1vbnRoRGF5KDApCi0gICAgICAgICwgeWVhckRheSgw
KQotICAgICAgICAsIG1vbnRoKDApCi0gICAgICAgICwgeWVhcigwKQotICAgICAgICAsIGlzRFNU
KDApCi0gICAgICAgICwgdXRjT2Zmc2V0KDApCi0gICAgICAgICwgdGltZVpvbmUoMCkKLSAgICB7
Ci0gICAgfQotCi0gICAgfkdyZWdvcmlhbkRhdGVUaW1lKCkKLSAgICB7Ci0gICAgICAgIGRlbGV0
ZSBbXSB0aW1lWm9uZTsKLSAgICB9Ci0KLSAgICBHcmVnb3JpYW5EYXRlVGltZShjb25zdCB0bSYg
aW5UbSkKLSAgICAgICAgOiBzZWNvbmQoaW5UbS50bV9zZWMpCi0gICAgICAgICwgbWludXRlKGlu
VG0udG1fbWluKQotICAgICAgICAsIGhvdXIoaW5UbS50bV9ob3VyKQotICAgICAgICAsIHdlZWtE
YXkoaW5UbS50bV93ZGF5KQotICAgICAgICAsIG1vbnRoRGF5KGluVG0udG1fbWRheSkKLSAgICAg
ICAgLCB5ZWFyRGF5KGluVG0udG1feWRheSkKLSAgICAgICAgLCBtb250aChpblRtLnRtX21vbikK
LSAgICAgICAgLCB5ZWFyKGluVG0udG1feWVhcikKLSAgICAgICAgLCBpc0RTVChpblRtLnRtX2lz
ZHN0KQotICAgIHsKLSNpZiAhUExBVEZPUk0oV0lOX09TKSAmJiAhUExBVEZPUk0oU09MQVJJUykg
JiYgIUNPTVBJTEVSKFJWQ1QpCi0gICAgICAgIHV0Y09mZnNldCA9IHN0YXRpY19jYXN0PGludD4o
aW5UbS50bV9nbXRvZmYpOwotCi0gICAgICAgIGludCBpblpvbmVTaXplID0gc3RybGVuKGluVG0u
dG1fem9uZSkgKyAxOwotICAgICAgICB0aW1lWm9uZSA9IG5ldyBjaGFyW2luWm9uZVNpemVdOwot
ICAgICAgICBzdHJuY3B5KHRpbWVab25lLCBpblRtLnRtX3pvbmUsIGluWm9uZVNpemUpOwotI2Vs
c2UKLSAgICAgICAgdXRjT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8aW50PihnZXRVVENPZmZzZXQoKSAv
IG1zUGVyU2Vjb25kICsgKGlzRFNUID8gc2Vjb25kc1BlckhvdXIgOiAwKSk7Ci0gICAgICAgIHRp
bWVab25lID0gMDsKLSNlbmRpZgotICAgIH0KLQotICAgIG9wZXJhdG9yIHRtKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHRtIHJldDsKLSAgICAgICAgbWVtc2V0KCZyZXQsIDAsIHNpemVvZihyZXQp
KTsKLQotICAgICAgICByZXQudG1fc2VjICAgPSAgc2Vjb25kOwotICAgICAgICByZXQudG1fbWlu
ICAgPSAgbWludXRlOwotICAgICAgICByZXQudG1faG91ciAgPSAgaG91cjsKLSAgICAgICAgcmV0
LnRtX3dkYXkgID0gIHdlZWtEYXk7Ci0gICAgICAgIHJldC50bV9tZGF5ICA9ICBtb250aERheTsK
LSAgICAgICAgcmV0LnRtX3lkYXkgID0gIHllYXJEYXk7Ci0gICAgICAgIHJldC50bV9tb24gICA9
ICBtb250aDsKLSAgICAgICAgcmV0LnRtX3llYXIgID0gIHllYXI7Ci0gICAgICAgIHJldC50bV9p
c2RzdCA9ICBpc0RTVDsKLQotI2lmICFQTEFURk9STShXSU5fT1MpICYmICFQTEFURk9STShTT0xB
UklTKSAmJiAhQ09NUElMRVIoUlZDVCkKLSAgICAgICAgcmV0LnRtX2dtdG9mZiA9IHN0YXRpY19j
YXN0PGxvbmc+KHV0Y09mZnNldCk7Ci0gICAgICAgIHJldC50bV96b25lID0gdGltZVpvbmU7Ci0j
ZW5kaWYKLQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIHZvaWQgY29weUZyb20o
Y29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmIHJocykKLSAgICB7Ci0gICAgICAgIHNlY29uZCA9IHJo
cy5zZWNvbmQ7Ci0gICAgICAgIG1pbnV0ZSA9IHJocy5taW51dGU7Ci0gICAgICAgIGhvdXIgPSBy
aHMuaG91cjsKLSAgICAgICAgd2Vla0RheSA9IHJocy53ZWVrRGF5OwotICAgICAgICBtb250aERh
eSA9IHJocy5tb250aERheTsKLSAgICAgICAgeWVhckRheSA9IHJocy55ZWFyRGF5OwotICAgICAg
ICBtb250aCA9IHJocy5tb250aDsKLSAgICAgICAgeWVhciA9IHJocy55ZWFyOwotICAgICAgICBp
c0RTVCA9IHJocy5pc0RTVDsKLSAgICAgICAgdXRjT2Zmc2V0ID0gcmhzLnV0Y09mZnNldDsKLSAg
ICAgICAgaWYgKHJocy50aW1lWm9uZSkgewotICAgICAgICAgICAgaW50IGluWm9uZVNpemUgPSBz
dHJsZW4ocmhzLnRpbWVab25lKSArIDE7Ci0gICAgICAgICAgICB0aW1lWm9uZSA9IG5ldyBjaGFy
W2luWm9uZVNpemVdOwotICAgICAgICAgICAgc3RybmNweSh0aW1lWm9uZSwgcmhzLnRpbWVab25l
LCBpblpvbmVTaXplKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aW1lWm9uZSA9IDA7
Ci0gICAgfQotCi0gICAgaW50IHNlY29uZDsKLSAgICBpbnQgbWludXRlOwotICAgIGludCBob3Vy
OwotICAgIGludCB3ZWVrRGF5OwotICAgIGludCBtb250aERheTsKLSAgICBpbnQgeWVhckRheTsK
LSAgICBpbnQgbW9udGg7Ci0gICAgaW50IHllYXI7Ci0gICAgaW50IGlzRFNUOwotICAgIGludCB1
dGNPZmZzZXQ7Ci0gICAgY2hhciogdGltZVpvbmU7Ci19OwotCi1zdGF0aWMgaW5saW5lIGludCBn
bXRvZmZzZXQoY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmIHQpCi17Ci0gICAgcmV0dXJuIHQudXRj
T2Zmc2V0OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIERhdGVNYXRoX2gK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24g
NDQ1MDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRGF0ZVByb3RvdHlwZS5oIgogCi0jaW5jbHVkZSAiRGF0ZU1hdGguaCIKKyNpbmNsdWRlICJE
YXRlQ29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcu
aCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNs
dWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVh
ZGluZy5jcHAJKHJldmlzaW9uIDQ0NTAxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDExIEBACiAK
ICNpbmNsdWRlICJKU0ltbWVkaWF0ZS5oIgogI2luY2x1ZGUgIkNvbGxlY3Rvci5oIgotI2luY2x1
ZGUgIkRhdGVNYXRoLmgiCiAjaW5jbHVkZSAiZHRvYS5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIu
aCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXVEY7CkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVUaHJlYWRpbmdPbmNlKCkKICAgICBpbml0aWFsaXplVVN0cmluZygpOwogI2lmIEVOQUJMRShK
U0NfTVVMVElQTEVfVEhSRUFEUykKICAgICBzX2R0b2FQNU11dGV4ID0gbmV3IE11dGV4OwotICAg
IGluaXREYXRlTWF0aCgpOworICAgIFdURjo6aW5pdGlhbGl6ZURhdGVzKCk7CiAjZW5kaWYKIH0K
IApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3BwCShyZXZpc2lvbiA0NDUwMSkJKGZyb20gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlTWF0aC5jcHA6NDQ1MDEpCisrKyBKYXZhU2NyaXB0Q29y
ZS93dGYvRGF0ZU1hdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29tbXVuaWNhdG9yIGNs
aWVudCBjb2RlLCByZWxlYXNlZAorICogTWFyY2ggMzEsIDE5OTguCisgKgorICogVGhlIEluaXRp
YWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBOZXRzY2FwZSBDb21tdW5p
Y2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwg
RGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgKKyAqIHRoZSBJbml0aWFsIERldmVsb3Bl
ci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVybmF0
aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRl
cm1zCisgKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEs
IGZvdW5kIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3Ig
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQg
aHR0cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwgaW4g
d2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisgKiBh
cHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1
c2Ugb2YgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMg
b2Ygb25lIG9mIHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5k
IG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxl
IHVuZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZ3Ro
ZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAor
ICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRo
ZSBjYXNlIG1heSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFi
b3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyIGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRlTWF0aC5oIgorCisjaW5jbHVkZSAiSlNOdW1iZXJD
ZWxsLmgiCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUg
PHRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisKKyNpZiBIQVZFKEVS
Uk5PX0gpCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oREFSV0lO
KQorI2luY2x1ZGUgPG5vdGlmeS5oPgorI2VuZGlmCisKKyNpZiBIQVZFKFNZU19USU1FX0gpCisj
aW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorCisjaWYgSEFWRShTWVNfVElNRUJfSCkKKyNp
bmNsdWRlIDxzeXMvdGltZWIuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCitu
YW1lc3BhY2UgSlNDIHsKKworLyogQ29uc3RhbnRzICovCisKK3N0YXRpYyBjb25zdCBkb3VibGUg
bWludXRlc1BlckRheSA9IDI0LjAgKiA2MC4wOworc3RhdGljIGNvbnN0IGRvdWJsZSBzZWNvbmRz
UGVyRGF5ID0gMjQuMCAqIDYwLjAgKiA2MC4wOworc3RhdGljIGNvbnN0IGRvdWJsZSBzZWNvbmRz
UGVyWWVhciA9IDI0LjAgKiA2MC4wICogNjAuMCAqIDM2NS4wOworCitzdGF0aWMgY29uc3QgZG91
YmxlIHVzZWNQZXJTZWMgPSAxMDAwMDAwLjA7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgbWF4VW5p
eFRpbWUgPSAyMTQ1ODU5MjAwLjA7IC8vIDEyLzMxLzIwMzcKKworLy8gRGF5IG9mIHllYXIgZm9y
IHRoZSBmaXJzdCBkYXkgb2YgZWFjaCBtb250aCwgd2hlcmUgaW5kZXggMCBpcyBKYW51YXJ5LCBh
bmQgZGF5IDAgaXMgSmFudWFyeSAxLgorLy8gRmlyc3QgZm9yIG5vbi1sZWFwIHllYXJzLCB0aGVu
IGZvciBsZWFwIHllYXJzLgorc3RhdGljIGNvbnN0IGludCBmaXJzdERheU9mTW9udGhbMl1bMTJd
ID0geworICAgIHswLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAz
MDQsIDMzNH0sCisgICAgezAsIDMxLCA2MCwgOTEsIDEyMSwgMTUyLCAxODIsIDIxMywgMjQ0LCAy
NzQsIDMwNSwgMzM1fQorfTsKKworc3RhdGljIGlubGluZSBib29sIGlzTGVhcFllYXIoaW50IHll
YXIpCit7CisgICAgaWYgKHllYXIgJSA0ICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoeWVhciAlIDQwMCA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoeWVh
ciAlIDEwMCA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBpbmxpbmUgaW50IGRheXNJblllYXIoaW50IHllYXIpCit7CisgICAgcmV0dXJu
IDM2NSArIGlzTGVhcFllYXIoeWVhcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIGRheXNG
cm9tMTk3MFRvWWVhcihpbnQgeWVhcikKK3sKKyAgICAvLyBUaGUgR3JlZ29yaWFuIENhbGVuZGFy
IHJ1bGVzIGZvciBsZWFwIHllYXJzOgorICAgIC8vIEV2ZXJ5IGZvdXJ0aCB5ZWFyIGlzIGEgbGVh
cCB5ZWFyLiAgMjAwNCwgMjAwOCwgYW5kIDIwMTIgYXJlIGxlYXAgeWVhcnMuCisgICAgLy8gSG93
ZXZlciwgZXZlcnkgaHVuZHJlZHRoIHllYXIgaXMgbm90IGEgbGVhcCB5ZWFyLiAgMTkwMCBhbmQg
MjEwMCBhcmUgbm90IGxlYXAgeWVhcnMuCisgICAgLy8gRXZlcnkgZm91ciBodW5kcmVkIHllYXJz
LCB0aGVyZSdzIGEgbGVhcCB5ZWFyIGFmdGVyIGFsbC4gIDIwMDAgYW5kIDI0MDAgYXJlIGxlYXAg
eWVhcnMuCisKKyAgICBzdGF0aWMgY29uc3QgaW50IGxlYXBEYXlzQmVmb3JlMTk3MUJ5NFJ1bGUg
PSAxOTcwIC8gNDsKKyAgICBzdGF0aWMgY29uc3QgaW50IGV4Y2x1ZGVkTGVhcERheXNCZWZvcmUx
OTcxQnkxMDBSdWxlID0gMTk3MCAvIDEwMDsKKyAgICBzdGF0aWMgY29uc3QgaW50IGxlYXBEYXlz
QmVmb3JlMTk3MUJ5NDAwUnVsZSA9IDE5NzAgLyA0MDA7CisKKyAgICBjb25zdCBkb3VibGUgeWVh
ck1pbnVzT25lID0geWVhciAtIDE7CisgICAgY29uc3QgZG91YmxlIHllYXJzVG9BZGRCeTRSdWxl
ID0gZmxvb3IoeWVhck1pbnVzT25lIC8gNC4wKSAtIGxlYXBEYXlzQmVmb3JlMTk3MUJ5NFJ1bGU7
CisgICAgY29uc3QgZG91YmxlIHllYXJzVG9FeGNsdWRlQnkxMDBSdWxlID0gZmxvb3IoeWVhck1p
bnVzT25lIC8gMTAwLjApIC0gZXhjbHVkZWRMZWFwRGF5c0JlZm9yZTE5NzFCeTEwMFJ1bGU7Cisg
ICAgY29uc3QgZG91YmxlIHllYXJzVG9BZGRCeTQwMFJ1bGUgPSBmbG9vcih5ZWFyTWludXNPbmUg
LyA0MDAuMCkgLSBsZWFwRGF5c0JlZm9yZTE5NzFCeTQwMFJ1bGU7CisKKyAgICByZXR1cm4gMzY1
LjAgKiAoeWVhciAtIDE5NzApICsgeWVhcnNUb0FkZEJ5NFJ1bGUgLSB5ZWFyc1RvRXhjbHVkZUJ5
MTAwUnVsZSArIHllYXJzVG9BZGRCeTQwMFJ1bGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91Ymxl
IG1zVG9EYXlzKGRvdWJsZSBtcykKK3sKKyAgICByZXR1cm4gZmxvb3IobXMgLyBtc1BlckRheSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1zVG9ZZWFyKGRvdWJsZSBtcykKK3sKKyAgICBpbnQg
YXBwcm94WWVhciA9IHN0YXRpY19jYXN0PGludD4oZmxvb3IobXMgLyAobXNQZXJEYXkgKiAzNjUu
MjQyNSkpICsgMTk3MCk7CisgICAgZG91YmxlIG1zRnJvbUFwcHJveFllYXJUbzE5NzAgPSBtc1Bl
ckRheSAqIGRheXNGcm9tMTk3MFRvWWVhcihhcHByb3hZZWFyKTsKKyAgICBpZiAobXNGcm9tQXBw
cm94WWVhclRvMTk3MCA+IG1zKQorICAgICAgICByZXR1cm4gYXBwcm94WWVhciAtIDE7CisgICAg
aWYgKG1zRnJvbUFwcHJveFllYXJUbzE5NzAgKyBtc1BlckRheSAqIGRheXNJblllYXIoYXBwcm94
WWVhcikgPD0gbXMpCisgICAgICAgIHJldHVybiBhcHByb3hZZWFyICsgMTsKKyAgICByZXR1cm4g
YXBwcm94WWVhcjsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGF5SW5ZZWFyKGRvdWJsZSBtcywg
aW50IHllYXIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obXNUb0RheXMobXMpIC0g
ZGF5c0Zyb20xOTcwVG9ZZWFyKHllYXIpKTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgbXNU
b01pbGxpc2Vjb25kcyhkb3VibGUgbXMpCit7CisgICAgZG91YmxlIHJlc3VsdCA9IGZtb2QobXMs
IG1zUGVyRGF5KTsKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgcmVzdWx0ICs9IG1zUGVy
RGF5OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIDA6IFN1bmRheSwgMTogTW9uZGF5LCBl
dGMuCitzdGF0aWMgaW5saW5lIGludCBtc1RvV2Vla0RheShkb3VibGUgbXMpCit7CisgICAgaW50
IHdkID0gKHN0YXRpY19jYXN0PGludD4obXNUb0RheXMobXMpKSArIDQpICUgNzsKKyAgICBpZiAo
d2QgPCAwKQorICAgICAgICB3ZCArPSA3OworICAgIHJldHVybiB3ZDsKK30KKworc3RhdGljIGlu
bGluZSBpbnQgbXNUb1NlY29uZHMoZG91YmxlIG1zKQoreworICAgIGRvdWJsZSByZXN1bHQgPSBm
bW9kKGZsb29yKG1zIC8gbXNQZXJTZWNvbmQpLCBzZWNvbmRzUGVyTWludXRlKTsKKyAgICBpZiAo
cmVzdWx0IDwgMCkKKyAgICAgICAgcmVzdWx0ICs9IHNlY29uZHNQZXJNaW51dGU7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4ocmVzdWx0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbXNU
b01pbnV0ZXMoZG91YmxlIG1zKQoreworICAgIGRvdWJsZSByZXN1bHQgPSBmbW9kKGZsb29yKG1z
IC8gbXNQZXJNaW51dGUpLCBtaW51dGVzUGVySG91cik7CisgICAgaWYgKHJlc3VsdCA8IDApCisg
ICAgICAgIHJlc3VsdCArPSBtaW51dGVzUGVySG91cjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihyZXN1bHQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtc1RvSG91cnMoZG91YmxlIG1z
KQoreworICAgIGRvdWJsZSByZXN1bHQgPSBmbW9kKGZsb29yKG1zL21zUGVySG91ciksIGhvdXJz
UGVyRGF5KTsKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgcmVzdWx0ICs9IGhvdXJzUGVy
RGF5OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdCk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgaW50IG1vbnRoRnJvbURheUluWWVhcihpbnQgZGF5SW5ZZWFyLCBib29sIGxlYXBZZWFy
KQoreworICAgIGNvbnN0IGludCBkID0gZGF5SW5ZZWFyOworICAgIGludCBzdGVwOworCisgICAg
aWYgKGQgPCAoc3RlcCA9IDMxKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgc3RlcCArPSAobGVh
cFllYXIgPyAyOSA6IDI4KTsKKyAgICBpZiAoZCA8IHN0ZXApCisgICAgICAgIHJldHVybiAxOwor
ICAgIGlmIChkIDwgKHN0ZXAgKz0gMzEpKQorICAgICAgICByZXR1cm4gMjsKKyAgICBpZiAoZCA8
IChzdGVwICs9IDMwKSkKKyAgICAgICAgcmV0dXJuIDM7CisgICAgaWYgKGQgPCAoc3RlcCArPSAz
MSkpCisgICAgICAgIHJldHVybiA0OworICAgIGlmIChkIDwgKHN0ZXAgKz0gMzApKQorICAgICAg
ICByZXR1cm4gNTsKKyAgICBpZiAoZCA8IChzdGVwICs9IDMxKSkKKyAgICAgICAgcmV0dXJuIDY7
CisgICAgaWYgKGQgPCAoc3RlcCArPSAzMSkpCisgICAgICAgIHJldHVybiA3OworICAgIGlmIChk
IDwgKHN0ZXAgKz0gMzApKQorICAgICAgICByZXR1cm4gODsKKyAgICBpZiAoZCA8IChzdGVwICs9
IDMxKSkKKyAgICAgICAgcmV0dXJuIDk7CisgICAgaWYgKGQgPCAoc3RlcCArPSAzMCkpCisgICAg
ICAgIHJldHVybiAxMDsKKyAgICByZXR1cm4gMTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBj
aGVja01vbnRoKGludCBkYXlJblllYXIsIGludCYgc3RhcnREYXlPZlRoaXNNb250aCwgaW50JiBz
dGFydERheU9mTmV4dE1vbnRoLCBpbnQgZGF5c0luVGhpc01vbnRoKQoreworICAgIHN0YXJ0RGF5
T2ZUaGlzTW9udGggPSBzdGFydERheU9mTmV4dE1vbnRoOworICAgIHN0YXJ0RGF5T2ZOZXh0TW9u
dGggKz0gZGF5c0luVGhpc01vbnRoOworICAgIHJldHVybiAoZGF5SW5ZZWFyIDw9IHN0YXJ0RGF5
T2ZOZXh0TW9udGgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkYXlJbk1vbnRoRnJvbURheUlu
WWVhcihpbnQgZGF5SW5ZZWFyLCBib29sIGxlYXBZZWFyKQoreworICAgIGNvbnN0IGludCBkID0g
ZGF5SW5ZZWFyOworICAgIGludCBzdGVwOworICAgIGludCBuZXh0ID0gMzA7CisKKyAgICBpZiAo
ZCA8PSBuZXh0KQorICAgICAgICByZXR1cm4gZCArIDE7CisgICAgY29uc3QgaW50IGRheXNJbkZl
YiA9IChsZWFwWWVhciA/IDI5IDogMjgpOworICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5l
eHQsIGRheXNJbkZlYikpCisgICAgICAgIHJldHVybiBkIC0gc3RlcDsKKyAgICBpZiAoY2hlY2tN
b250aChkLCBzdGVwLCBuZXh0LCAzMSkpCisgICAgICAgIHJldHVybiBkIC0gc3RlcDsKKyAgICBp
ZiAoY2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCAzMCkpCisgICAgICAgIHJldHVybiBkIC0gc3Rl
cDsKKyAgICBpZiAoY2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCAzMSkpCisgICAgICAgIHJldHVy
biBkIC0gc3RlcDsKKyAgICBpZiAoY2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCAzMCkpCisgICAg
ICAgIHJldHVybiBkIC0gc3RlcDsKKyAgICBpZiAoY2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCAz
MSkpCisgICAgICAgIHJldHVybiBkIC0gc3RlcDsKKyAgICBpZiAoY2hlY2tNb250aChkLCBzdGVw
LCBuZXh0LCAzMSkpCisgICAgICAgIHJldHVybiBkIC0gc3RlcDsKKyAgICBpZiAoY2hlY2tNb250
aChkLCBzdGVwLCBuZXh0LCAzMCkpCisgICAgICAgIHJldHVybiBkIC0gc3RlcDsKKyAgICBpZiAo
Y2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCAzMSkpCisgICAgICAgIHJldHVybiBkIC0gc3RlcDsK
KyAgICBpZiAoY2hlY2tNb250aChkLCBzdGVwLCBuZXh0LCAzMCkpCisgICAgICAgIHJldHVybiBk
IC0gc3RlcDsKKyAgICBzdGVwID0gbmV4dDsKKyAgICByZXR1cm4gZCAtIHN0ZXA7Cit9CisKK3N0
YXRpYyBpbmxpbmUgaW50IG1vbnRoVG9EYXlJblllYXIoaW50IG1vbnRoLCBib29sIGlzTGVhcFll
YXIpCit7CisgICAgcmV0dXJuIGZpcnN0RGF5T2ZNb250aFtpc0xlYXBZZWFyXVttb250aF07Cit9
CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHRpbWVUb01TKGRvdWJsZSBob3VyLCBkb3VibGUgbWlu
LCBkb3VibGUgc2VjLCBkb3VibGUgbXMpCit7CisgICAgcmV0dXJuICgoKGhvdXIgKiBtaW51dGVz
UGVySG91ciArIG1pbikgKiBzZWNvbmRzUGVyTWludXRlICsgc2VjKSAqIG1zUGVyU2Vjb25kICsg
bXMpOworfQorCitzdGF0aWMgaW50IGRhdGVUb0RheUluWWVhcihpbnQgeWVhciwgaW50IG1vbnRo
LCBpbnQgZGF5KQoreworICAgIHllYXIgKz0gbW9udGggLyAxMjsKKworICAgIG1vbnRoICU9IDEy
OworICAgIGlmIChtb250aCA8IDApIHsKKyAgICAgICAgbW9udGggKz0gMTI7CisgICAgICAgIC0t
eWVhcjsKKyAgICB9CisKKyAgICBpbnQgeWVhcmRheSA9IHN0YXRpY19jYXN0PGludD4oZmxvb3Io
ZGF5c0Zyb20xOTcwVG9ZZWFyKHllYXIpKSk7CisgICAgaW50IG1vbnRoZGF5ID0gbW9udGhUb0Rh
eUluWWVhcihtb250aCwgaXNMZWFwWWVhcih5ZWFyKSk7CisKKyAgICByZXR1cm4geWVhcmRheSAr
IG1vbnRoZGF5ICsgZGF5IC0gMTsKK30KKworZG91YmxlIGdldEN1cnJlbnRVVENUaW1lKCkKK3sK
KyAgICByZXR1cm4gZmxvb3IoZ2V0Q3VycmVudFVUQ1RpbWVXaXRoTWljcm9zZWNvbmRzKCkpOwor
fQorCisvLyBSZXR1cm5zIGN1cnJlbnQgdGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgMSBKYW4g
MTk3MC4KK2RvdWJsZSBnZXRDdXJyZW50VVRDVGltZVdpdGhNaWNyb3NlY29uZHMoKQoreworICAg
IHJldHVybiBjdXJyZW50VGltZSgpICogMTAwMC4wOyAKK30KKwordm9pZCBnZXRMb2NhbFRpbWUo
Y29uc3QgdGltZV90KiBsb2NhbFRpbWUsIHN0cnVjdCB0bSogbG9jYWxUTSkKK3sKKyNpZiBDT01Q
SUxFUihNU1ZDNykgfHwgQ09NUElMRVIoTUlOR1cpIHx8IFBMQVRGT1JNKFdJTl9DRSkKKyAgICAq
bG9jYWxUTSA9ICpsb2NhbHRpbWUobG9jYWxUaW1lKTsKKyNlbGlmIENPTVBJTEVSKE1TVkMpCisg
ICAgbG9jYWx0aW1lX3MobG9jYWxUTSwgbG9jYWxUaW1lKTsKKyNlbHNlCisgICAgbG9jYWx0aW1l
X3IobG9jYWxUaW1lLCBsb2NhbFRNKTsKKyNlbmRpZgorfQorCisvLyBUaGVyZSBpcyBhIGhhcmQg
bGltaXQgYXQgMjAzOCB0aGF0IHdlIGN1cnJlbnRseSBkbyBub3QgaGF2ZSBhIHdvcmthcm91bmQK
Ky8vIGZvciAocmRhcjovL3Byb2JsZW0vNTA1Mjk3NSkuCitzdGF0aWMgaW5saW5lIGludCBtYXhp
bXVtWWVhckZvckRTVCgpCit7CisgICAgcmV0dXJuIDIwMzc7Cit9CisKK3N0YXRpYyBpbmxpbmUg
aW50IG1pbmltdW1ZZWFyRm9yRFNUKCkKK3sKKyAgICAvLyBCZWNhdXNlIG9mIHRoZSAyMDM4IGlz
c3VlIChzZWUgbWF4aW11bVllYXJGb3JEU1QpIGlmIHRoZSBjdXJyZW50IHllYXIgaXMKKyAgICAv
LyBncmVhdGVyIHRoYW4gdGhlIG1heCB5ZWFyIG1pbnVzIDI3ICgyMDEwKSwgd2Ugd2FudCB0byB1
c2UgdGhlIG1heCB5ZWFyCisgICAgLy8gbWludXMgMjcgaW5zdGVhZCwgdG8gZW5zdXJlIHRoZXJl
IGlzIGEgcmFuZ2Ugb2YgMjggeWVhcnMgdGhhdCBhbGwgeWVhcnMKKyAgICAvLyBjYW4gbWFwIHRv
LgorICAgIHJldHVybiBzdGQ6Om1pbihtc1RvWWVhcihnZXRDdXJyZW50VVRDVGltZSgpKSwgbWF4
aW11bVllYXJGb3JEU1QoKSAtIDI3KSA7Cit9CisKKy8qCisgKiBGaW5kIGFuIGVxdWl2YWxlbnQg
eWVhciBmb3IgdGhlIG9uZSBnaXZlbiwgd2hlcmUgZXF1aXZhbGVuY2UgaXMgZGV0ZXJpbmVkIGJ5
CisgKiB0aGUgdHdvIHllYXJzIGhhdmluZyB0aGUgc2FtZSBsZWFwbmVzcyBhbmQgdGhlIGZpcnN0
IGRheSBvZiB0aGUgeWVhciwgZmFsbGluZworICogb24gdGhlIHNhbWUgZGF5IG9mIHRoZSB3ZWVr
LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHllYXIgYmV0d2VlbiB0aGlzIGN1cnJl
bnQgeWVhciBhbmQgMjAzNywgaG93ZXZlciB0aGlzCisgKiBmdW5jdGlvbiB3aWxsIHBvdGVudGlh
bGx5IHJldHVybiBpbmNvcnJlY3QgcmVzdWx0cyBpZiB0aGUgY3VycmVudCB5ZWFyIGlzIGFmdGVy
CisgKiAyMDEwLCAocmRhcjovL3Byb2JsZW0vNTA1Mjk3NSksIGlmIHRoZSB5ZWFyIHBhc3NlZCBp
biBpcyBiZWZvcmUgMTkwMCBvciBhZnRlcgorICogMjEwMCwgKHJkYXI6Ly9wcm9ibGVtLzUwNTUw
MzgpLgorICovCitpbnQgZXF1aXZhbGVudFllYXJGb3JEU1QoaW50IHllYXIpCit7CisgICAgLy8g
SXQgaXMgb2sgaWYgdGhlIGNhY2hlZCB5ZWFyIGlzIG5vdCB0aGUgY3VycmVudCB5ZWFyIGFzIGxv
bmcgYXMgdGhlIHJ1bGVzCisgICAgLy8gZm9yIERTVCBkaWQgbm90IGNoYW5nZSBiZXR3ZWVuIHRo
ZSB0d28geWVhcnM7IGlmIHRoZXkgZGlkIHRoZSBhcHAgd291bGQgbmVlZAorICAgIC8vIHRvIGJl
IHJlc3RhcnRlZC4KKyAgICBzdGF0aWMgaW50IG1pblllYXIgPSBtaW5pbXVtWWVhckZvckRTVCgp
OworICAgIGludCBtYXhZZWFyID0gbWF4aW11bVllYXJGb3JEU1QoKTsKKworICAgIGludCBkaWZm
ZXJlbmNlOworICAgIGlmICh5ZWFyID4gbWF4WWVhcikKKyAgICAgICAgZGlmZmVyZW5jZSA9IG1p
blllYXIgLSB5ZWFyOworICAgIGVsc2UgaWYgKHllYXIgPCBtaW5ZZWFyKQorICAgICAgICBkaWZm
ZXJlbmNlID0gbWF4WWVhciAtIHllYXI7CisgICAgZWxzZQorICAgICAgICByZXR1cm4geWVhcjsK
KworICAgIGludCBxdW90aWVudCA9IGRpZmZlcmVuY2UgLyAyODsKKyAgICBpbnQgcHJvZHVjdCA9
IChxdW90aWVudCkgKiAyODsKKworICAgIHllYXIgKz0gcHJvZHVjdDsKKyAgICBBU1NFUlQoKHll
YXIgPj0gbWluWWVhciAmJiB5ZWFyIDw9IG1heFllYXIpIHx8IChwcm9kdWN0IC0geWVhciA9PSBz
dGF0aWNfY2FzdDxpbnQ+KE5hTikpKTsKKyAgICByZXR1cm4geWVhcjsKK30KKworc3RhdGljIGlu
dDMyX3QgY2FsY3VsYXRlVVRDT2Zmc2V0KCkKK3sKKyAgICB0bSBsb2NhbHQ7CisgICAgbWVtc2V0
KCZsb2NhbHQsIDAsIHNpemVvZihsb2NhbHQpKTsKKyAKKyAgICAvLyBnZXQgdGhlIGRpZmZlcmVu
Y2UgYmV0d2VlbiB0aGlzIHRpbWUgem9uZSBhbmQgVVRDIG9uIEphbiAwMSwgMjAwMCAxMjowMDow
MCBBTQorICAgIGxvY2FsdC50bV9tZGF5ID0gMTsKKyAgICBsb2NhbHQudG1feWVhciA9IDEwMDsK
KyAgICB0aW1lX3QgdXRjT2Zmc2V0ID0gOTQ2Njg0ODAwIC0gbWt0aW1lKCZsb2NhbHQpOworCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHV0Y09mZnNldCAqIDEwMDApOworfQorCisj
aWYgUExBVEZPUk0oREFSV0lOKQorc3RhdGljIGludDMyX3Qgc19jYWNoZWRVVENPZmZzZXQ7IC8v
IEluIG1pbGxpc2Vjb25kcy4gQW4gYXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgYWNjZXNzIHRvIGFu
IGludDMyX3QgdmFyaWFibGUgaXMgYXRvbWljIG9uIHBsYXRmb3JtcyB0aGF0IHRha2UgdGhpcyBj
b2RlIHBhdGguCitzdGF0aWMgYm9vbCBzX2hhdmVDYWNoZWRVVENPZmZzZXQ7CitzdGF0aWMgaW50
IHNfbm90aWZpY2F0aW9uVG9rZW47CisjZW5kaWYKKworLyoKKyAqIEdldCB0aGUgZGlmZmVyZW5j
ZSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGlzIHRpbWUgem9uZSBhbmQgVVRDIChHTVQpCisg
KiBOT1QgaW5jbHVkaW5nIERTVC4KKyAqLworZG91YmxlIGdldFVUQ09mZnNldCgpCit7CisjaWYg
UExBVEZPUk0oREFSV0lOKQorICAgIGlmIChzX2hhdmVDYWNoZWRVVENPZmZzZXQpIHsKKyAgICAg
ICAgaW50IG5vdGlmaWVkOworICAgICAgICB1aW50MzJfdCBzdGF0dXMgPSBub3RpZnlfY2hlY2so
c19ub3RpZmljYXRpb25Ub2tlbiwgJm5vdGlmaWVkKTsKKyAgICAgICAgaWYgKHN0YXR1cyA9PSBO
T1RJRllfU1RBVFVTX09LICYmICFub3RpZmllZCkKKyAgICAgICAgICAgIHJldHVybiBzX2NhY2hl
ZFVUQ09mZnNldDsKKyAgICB9CisjZW5kaWYKKworICAgIGludDMyX3QgdXRjT2Zmc2V0ID0gY2Fs
Y3VsYXRlVVRDT2Zmc2V0KCk7CisKKyNpZiBQTEFURk9STShEQVJXSU4pCisgICAgLy8gVGhlb3Jl
dGljYWxseSwgaXQgaXMgcG9zc2libGUgdGhhdCBzZXZlcmFsIHRocmVhZHMgd2lsbCBiZSBleGVj
dXRpbmcgdGhpcyBjb2RlIGF0IG9uY2UsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBoYXZlIGEgcmFj
ZSBjb25kaXRpb24sCisgICAgLy8gYW5kIGEgbmV3ZXIgdmFsdWUgbWF5IGJlIG92ZXJ3cml0dGVu
LiBJbiBwcmFjdGljZSwgdGltZSB6b25lcyBkb24ndCBjaGFuZ2UgdGhhdCBvZnRlbi4KKyAgICBz
X2NhY2hlZFVUQ09mZnNldCA9IHV0Y09mZnNldDsKKyNlbmRpZgorCisgICAgcmV0dXJuIHV0Y09m
ZnNldDsKK30KKworLyoKKyAqIEdldCB0aGUgRFNUIG9mZnNldCBmb3IgdGhlIHRpbWUgcGFzc2Vk
IGluLiAgVGFrZXMKKyAqIHNlY29uZHMgKG5vdCBtaWxsaXNlY29uZHMpIGFuZCBjYW5ub3QgaGFu
ZGxlIGRhdGVzIGJlZm9yZSAxOTcwCisgKiBvbiBzb21lIE9TJworICovCitzdGF0aWMgZG91Ymxl
IGdldERTVE9mZnNldFNpbXBsZShkb3VibGUgbG9jYWxUaW1lU2Vjb25kcywgZG91YmxlIHV0Y09m
ZnNldCkKK3sKKyAgICBpZiAobG9jYWxUaW1lU2Vjb25kcyA+IG1heFVuaXhUaW1lKQorICAgICAg
ICBsb2NhbFRpbWVTZWNvbmRzID0gbWF4VW5peFRpbWU7CisgICAgZWxzZSBpZiAobG9jYWxUaW1l
U2Vjb25kcyA8IDApIC8vIEdvIGFoZWFkIGEgZGF5IHRvIG1ha2UgbG9jYWx0aW1lIHdvcmsgKGRv
ZXMgbm90IHdvcmsgd2l0aCAwKQorICAgICAgICBsb2NhbFRpbWVTZWNvbmRzICs9IHNlY29uZHNQ
ZXJEYXk7CisKKyAgICAvL2lucHV0IGlzIFVUQyBzbyB3ZSBoYXZlIHRvIHNoaWZ0IGJhY2sgdG8g
bG9jYWwgdGltZSB0byBkZXRlcm1pbmUgRFNUIHRodXMgdGhlICsgZ2V0VVRDT2Zmc2V0KCkKKyAg
ICBkb3VibGUgb2Zmc2V0VGltZSA9IChsb2NhbFRpbWVTZWNvbmRzICogbXNQZXJTZWNvbmQpICsg
dXRjT2Zmc2V0OworCisgICAgLy8gT2Zmc2V0IGZyb20gVVRDIGJ1dCBkb2Vzbid0IGluY2x1ZGUg
RFNUIG9idmlvdXNseQorICAgIGludCBvZmZzZXRIb3VyID0gIG1zVG9Ib3VycyhvZmZzZXRUaW1l
KTsKKyAgICBpbnQgb2Zmc2V0TWludXRlID0gIG1zVG9NaW51dGVzKG9mZnNldFRpbWUpOworCisg
ICAgLy8gRklYTUU6IHRpbWVfdCBoYXMgYSBwb3RlbnRpYWwgcHJvYmxlbSBpbiAyMDM4CisgICAg
dGltZV90IGxvY2FsVGltZSA9IHN0YXRpY19jYXN0PHRpbWVfdD4obG9jYWxUaW1lU2Vjb25kcyk7
CisKKyAgICB0bSBsb2NhbFRNOworICAgIGdldExvY2FsVGltZSgmbG9jYWxUaW1lLCAmbG9jYWxU
TSk7CisKKyAgICBkb3VibGUgZGlmZiA9ICgobG9jYWxUTS50bV9ob3VyIC0gb2Zmc2V0SG91cikg
KiBzZWNvbmRzUGVySG91cikgKyAoKGxvY2FsVE0udG1fbWluIC0gb2Zmc2V0TWludXRlKSAqIDYw
KTsKKworICAgIGlmIChkaWZmIDwgMCkKKyAgICAgICAgZGlmZiArPSBzZWNvbmRzUGVyRGF5Owor
CisgICAgcmV0dXJuIChkaWZmICogbXNQZXJTZWNvbmQpOworfQorCisvLyBHZXQgdGhlIERTVCBv
ZmZzZXQsIGdpdmVuIGEgdGltZSBpbiBVVEMKK3N0YXRpYyBkb3VibGUgZ2V0RFNUT2Zmc2V0KGRv
dWJsZSBtcywgZG91YmxlIHV0Y09mZnNldCkKK3sKKyAgICAvLyBPbiBNYWMgT1MgWCwgdGhlIGNh
bGwgdG8gbG9jYWx0aW1lIChzZWUgZ2V0RFNUT2Zmc2V0U2ltcGxlKSB3aWxsIHJldHVybiBoaXN0
b3JpY2FsbHkgYWNjdXJhdGUKKyAgICAvLyBEU1QgaW5mb3JtYXRpb24gKGUuZy4gTmV3IFplYWxh
bmQgZGlkIG5vdCBoYXZlIERTVCBmcm9tIDE5NDYgdG8gMTk3NCkgaG93ZXZlciB0aGUgSmF2YVNj
cmlwdAorICAgIC8vIHN0YW5kYXJkIGV4cGxpY2l0bHkgZGljdGF0ZXMgdGhhdCBoaXN0b3JpY2Fs
IGluZm9ybWF0aW9uIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCB3aGVuCisgICAgLy8gZGV0ZXJt
aW5pbmcgRFNULiBGb3IgdGhpcyByZWFzb24gd2Ugc2hpZnQgYXdheSBmcm9tIHllYXJzIHRoYXQg
bG9jYWx0aW1lIGNhbiBoYW5kbGUgYnV0IHdvdWxkCisgICAgLy8gcmV0dXJuIGhpc3RvcmljYWxs
eSBhY2N1cmF0ZSBpbmZvcm1hdGlvbi4KKyAgICBpbnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKKyAg
ICBpbnQgZXF1aXZhbGVudFllYXIgPSBlcXVpdmFsZW50WWVhckZvckRTVCh5ZWFyKTsKKyAgICBp
ZiAoeWVhciAhPSBlcXVpdmFsZW50WWVhcikgeworICAgICAgICBib29sIGxlYXBZZWFyID0gaXNM
ZWFwWWVhcih5ZWFyKTsKKyAgICAgICAgaW50IGRheUluWWVhckxvY2FsID0gZGF5SW5ZZWFyKG1z
LCB5ZWFyKTsKKyAgICAgICAgaW50IGRheUluTW9udGggPSBkYXlJbk1vbnRoRnJvbURheUluWWVh
cihkYXlJblllYXJMb2NhbCwgbGVhcFllYXIpOworICAgICAgICBpbnQgbW9udGggPSBtb250aEZy
b21EYXlJblllYXIoZGF5SW5ZZWFyTG9jYWwsIGxlYXBZZWFyKTsKKyAgICAgICAgaW50IGRheSA9
IGRhdGVUb0RheUluWWVhcihlcXVpdmFsZW50WWVhciwgbW9udGgsIGRheUluTW9udGgpOworICAg
ICAgICBtcyA9IChkYXkgKiBtc1BlckRheSkgKyBtc1RvTWlsbGlzZWNvbmRzKG1zKTsKKyAgICB9
CisKKyAgICByZXR1cm4gZ2V0RFNUT2Zmc2V0U2ltcGxlKG1zIC8gbXNQZXJTZWNvbmQsIHV0Y09m
ZnNldCk7Cit9CisKK2RvdWJsZSBncmVnb3JpYW5EYXRlVGltZVRvTVMoY29uc3QgR3JlZ29yaWFu
RGF0ZVRpbWUmIHQsIGRvdWJsZSBtaWxsaVNlY29uZHMsIGJvb2wgaW5wdXRJc1VUQykKK3sKKyAg
ICBpbnQgZGF5ID0gZGF0ZVRvRGF5SW5ZZWFyKHQueWVhciArIDE5MDAsIHQubW9udGgsIHQubW9u
dGhEYXkpOworICAgIGRvdWJsZSBtcyA9IHRpbWVUb01TKHQuaG91ciwgdC5taW51dGUsIHQuc2Vj
b25kLCBtaWxsaVNlY29uZHMpOworICAgIGRvdWJsZSByZXN1bHQgPSAoZGF5ICogbXNQZXJEYXkp
ICsgbXM7CisKKyAgICBpZiAoIWlucHV0SXNVVEMpIHsgLy8gY29udmVydCB0byBVVEMKKyAgICAg
ICAgZG91YmxlIHV0Y09mZnNldCA9IGdldFVUQ09mZnNldCgpOworICAgICAgICByZXN1bHQgLT0g
dXRjT2Zmc2V0OworICAgICAgICByZXN1bHQgLT0gZ2V0RFNUT2Zmc2V0KHJlc3VsdCwgdXRjT2Zm
c2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIG1zVG9HcmVnb3Jp
YW5EYXRlVGltZShkb3VibGUgbXMsIGJvb2wgb3V0cHV0SXNVVEMsIEdyZWdvcmlhbkRhdGVUaW1l
JiB0bSkKK3sKKyAgICAvLyBpbnB1dCBpcyBVVEMKKyAgICBkb3VibGUgZHN0T2ZmID0gMC4wOwor
ICAgIGNvbnN0IGRvdWJsZSB1dGNPZmYgPSBnZXRVVENPZmZzZXQoKTsKKworICAgIGlmICghb3V0
cHV0SXNVVEMpIHsgIC8vIGNvbnZlcnQgdG8gbG9jYWwgdGltZQorICAgICAgICBkc3RPZmYgPSBn
ZXREU1RPZmZzZXQobXMsIHV0Y09mZik7CisgICAgICAgIG1zICs9IGRzdE9mZiArIHV0Y09mZjsK
KyAgICB9CisKKyAgICBjb25zdCBpbnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKKyAgICB0bS5zZWNv
bmQgICA9ICBtc1RvU2Vjb25kcyhtcyk7CisgICAgdG0ubWludXRlICAgPSAgbXNUb01pbnV0ZXMo
bXMpOworICAgIHRtLmhvdXIgICAgID0gIG1zVG9Ib3Vycyhtcyk7CisgICAgdG0ud2Vla0RheSAg
PSAgbXNUb1dlZWtEYXkobXMpOworICAgIHRtLnllYXJEYXkgID0gIGRheUluWWVhcihtcywgeWVh
cik7CisgICAgdG0ubW9udGhEYXkgPSAgZGF5SW5Nb250aEZyb21EYXlJblllYXIodG0ueWVhckRh
eSwgaXNMZWFwWWVhcih5ZWFyKSk7CisgICAgdG0ubW9udGggICAgPSAgbW9udGhGcm9tRGF5SW5Z
ZWFyKHRtLnllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOworICAgIHRtLnllYXIgICAgID0gIHll
YXIgLSAxOTAwOworICAgIHRtLmlzRFNUICAgID0gIGRzdE9mZiAhPSAwLjA7CisKKyAgICB0bS51
dGNPZmZzZXQgPSBzdGF0aWNfY2FzdDxsb25nPigoZHN0T2ZmICsgdXRjT2ZmKSAvIG1zUGVyU2Vj
b25kKTsKKyAgICB0bS50aW1lWm9uZSA9IE5VTEw7Cit9CisKK3ZvaWQgaW5pdERhdGVNYXRoKCkK
K3sKKyNpZm5kZWYgTkRFQlVHCisgICAgc3RhdGljIGJvb2wgYWxyZWFkeUluaXRpYWxpemVkOwor
ICAgIEFTU0VSVCghYWxyZWFkeUluaXRpYWxpemVkKyspOworI2VuZGlmCisKKyAgICBlcXVpdmFs
ZW50WWVhckZvckRTVCgyMDAwKTsgLy8gTmVlZCB0byBjYWxsIG9uY2UgdG8gaW5pdGlhbGl6ZSBh
IHN0YXRpYyB1c2VkIGluIHRoaXMgZnVuY3Rpb24uCisjaWYgUExBVEZPUk0oREFSV0lOKQorICAg
IC8vIFJlZ2lzdGVyIGZvciBhIG5vdGlmaWNhdGlvbiB3aGVuZXZlciB0aGUgdGltZSB6b25lIGNo
YW5nZXMuCisgICAgdWludDMyX3Qgc3RhdHVzID0gbm90aWZ5X3JlZ2lzdGVyX2NoZWNrKCJjb20u
YXBwbGUuc3lzdGVtLnRpbWV6b25lIiwgJnNfbm90aWZpY2F0aW9uVG9rZW4pOworICAgIGlmIChz
dGF0dXMgPT0gTk9USUZZX1NUQVRVU19PSykgeworICAgICAgICBzX2NhY2hlZFVUQ09mZnNldCA9
IGNhbGN1bGF0ZVVUQ09mZnNldCgpOworICAgICAgICBzX2hhdmVDYWNoZWRVVENPZmZzZXQgPSB0
cnVlOworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSB5bWRobXNUb1Nl
Y29uZHMobG9uZyB5ZWFyLCBpbnQgbW9uLCBpbnQgZGF5LCBpbnQgaG91ciwgaW50IG1pbnV0ZSwg
aW50IHNlY29uZCkKK3sKKyAgICBkb3VibGUgZGF5cyA9IChkYXkgLSAzMjA3NSkKKyAgICAgICAg
KyBmbG9vcigxNDYxICogKHllYXIgKyA0ODAwLjAgKyAobW9uIC0gMTQpIC8gMTIpIC8gNCkKKyAg
ICAgICAgKyAzNjcgKiAobW9uIC0gMiAtIChtb24gLSAxNCkgLyAxMiAqIDEyKSAvIDEyCisgICAg
ICAgIC0gZmxvb3IoMyAqICgoeWVhciArIDQ5MDAuMCArIChtb24gLSAxNCkgLyAxMikgLyAxMDAp
IC8gNCkKKyAgICAgICAgLSAyNDQwNTg4OworICAgIHJldHVybiAoKGRheXMgKiBob3Vyc1BlckRh
eSArIGhvdXIpICogbWludXRlc1BlckhvdXIgKyBtaW51dGUpICogc2Vjb25kc1Blck1pbnV0ZSAr
IHNlY29uZDsKK30KKworLy8gV2UgZm9sbG93IHRoZSByZWNvbW1lbmRhdGlvbiBvZiBSRkMgMjgy
MiB0byBjb25zaWRlciBhbGwKKy8vIG9ic29sZXRlIHRpbWUgem9uZXMgbm90IGxpc3RlZCBoZXJl
IGVxdWl2YWxlbnQgdG8gIi0wMDAwIi4KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgS25vd25ab25lIHsK
KyNpZiAhUExBVEZPUk0oV0lOX09TKQorICAgIGNvbnN0CisjZW5kaWYKKyAgICAgICAgY2hhciB0
ek5hbWVbNF07CisgICAgaW50IHR6T2Zmc2V0OworfSBrbm93bl96b25lc1tdID0geworICAgIHsg
IlVUIiwgMCB9LAorICAgIHsgIkdNVCIsIDAgfSwKKyAgICB7ICJFU1QiLCAtMzAwIH0sCisgICAg
eyAiRURUIiwgLTI0MCB9LAorICAgIHsgIkNTVCIsIC0zNjAgfSwKKyAgICB7ICJDRFQiLCAtMzAw
IH0sCisgICAgeyAiTVNUIiwgLTQyMCB9LAorICAgIHsgIk1EVCIsIC0zNjAgfSwKKyAgICB7ICJQ
U1QiLCAtNDgwIH0sCisgICAgeyAiUERUIiwgLTQyMCB9Cit9OworCitpbmxpbmUgc3RhdGljIHZv
aWQgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGNvbnN0IGNoYXIqJiBzKQoreworICAgIGludCBuZXN0
aW5nID0gMDsKKyAgICBjaGFyIGNoOworICAgIHdoaWxlICgoY2ggPSAqcykpIHsKKyAgICAgICAg
aWYgKCFpc0FTQ0lJU3BhY2UoY2gpKSB7CisgICAgICAgICAgICBpZiAoY2ggPT0gJygnKQorICAg
ICAgICAgICAgICAgIG5lc3RpbmcrKzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICcpJyAm
JiBuZXN0aW5nID4gMCkKKyAgICAgICAgICAgICAgICBuZXN0aW5nLS07CisgICAgICAgICAgICBl
bHNlIGlmIChuZXN0aW5nID09IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgcysrOworICAgIH0KK30KKworLy8gcmV0dXJucyAwLTExIChKYW4tRGVjKTsgLTEg
b24gZmFpbHVyZQorc3RhdGljIGludCBmaW5kTW9udGgoY29uc3QgY2hhciogbW9udGhTdHIpCit7
CisgICAgQVNTRVJUKG1vbnRoU3RyKTsKKyAgICBjaGFyIG5lZWRsZVs0XTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICBpZiAoISptb250aFN0cikKKyAgICAgICAg
ICAgIHJldHVybiAtMTsKKyAgICAgICAgbmVlZGxlW2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4odG9B
U0NJSUxvd2VyKCptb250aFN0cisrKSk7CisgICAgfQorICAgIG5lZWRsZVszXSA9ICdcMCc7Cisg
ICAgY29uc3QgY2hhciAqaGF5c3RhY2sgPSAiamFuZmVibWFyYXBybWF5anVuanVsYXVnc2Vwb2N0
bm92ZGVjIjsKKyAgICBjb25zdCBjaGFyICpzdHIgPSBzdHJzdHIoaGF5c3RhY2ssIG5lZWRsZSk7
CisgICAgaWYgKHN0cikgeworICAgICAgICBpbnQgcG9zaXRpb24gPSBzdGF0aWNfY2FzdDxpbnQ+
KHN0ciAtIGhheXN0YWNrKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uICUgMyA9PSAwKQorICAgICAg
ICAgICAgcmV0dXJuIHBvc2l0aW9uIC8gMzsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCitz
dGF0aWMgYm9vbCBwYXJzZUxvbmcoY29uc3QgY2hhciogc3RyaW5nLCBjaGFyKiogc3RvcFBvc2l0
aW9uLCBpbnQgYmFzZSwgbG9uZyogcmVzdWx0KQoreworICAgICpyZXN1bHQgPSBzdHJ0b2woc3Ry
aW5nLCBzdG9wUG9zaXRpb24sIGJhc2UpOworICAgIC8vIEF2b2lkIHRoZSB1c2Ugb2YgZXJybm8g
YXMgaXQgaXMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzIENFCisgICAgaWYgKHN0cmluZyA9PSAq
c3RvcFBvc2l0aW9uIHx8ICpyZXN1bHQgPT0gTE9OR19NSU4gfHwgKnJlc3VsdCA9PSBMT05HX01B
WCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitkb3VibGUg
cGFyc2VEYXRlKGNvbnN0IFVTdHJpbmcgJmRhdGUpCit7CisgICAgLy8gVGhpcyBwYXJzZXMgYSBk
YXRlIGluIHRoZSBmb3JtOgorICAgIC8vICAgICBUdWVzZGF5LCAwOS1Ob3YtOTkgMjM6MTI6NDAg
R01UCisgICAgLy8gb3IKKyAgICAvLyAgICAgU2F0LCAwMS1KYW4tMjAwMCAwODowMDowMCBHTVQK
KyAgICAvLyBvcgorICAgIC8vICAgICBTYXQsIDAxIEphbiAyMDAwIDA4OjAwOjAwIEdNVAorICAg
IC8vIG9yCisgICAgLy8gICAgIDAxIEphbiA5OSAyMjowMCArMDEwMCAgICAoZXhjZXB0aW9ucyBp
biByZmM4MjIvcmZjMjgyMikKKyAgICAvLyAjIyMgbm9uIFJGQyBmb3JtYXRzLCBhZGRlZCBmb3Ig
SmF2YXNjcmlwdDoKKyAgICAvLyAgICAgW1dlZG5lc2RheV0gSmFudWFyeSAwOSAxOTk5IDIzOjEy
OjQwIEdNVAorICAgIC8vICAgICBbV2VkbmVzZGF5XSBKYW51YXJ5IDA5IDIzOjEyOjQwIEdNVCAx
OTk5CisgICAgLy8KKyAgICAvLyBXZSBpZ25vcmUgdGhlIHdlZWtkYXkuCisKKyAgICBDU3RyaW5n
IGRhdGVDU3RyaW5nID0gZGF0ZS5VVEY4U3RyaW5nKCk7CisgICAgY29uc3QgY2hhciAqZGF0ZVN0
cmluZyA9IGRhdGVDU3RyaW5nLmNfc3RyKCk7CisgICAgIAorICAgIC8vIFNraXAgbGVhZGluZyBz
cGFjZQorICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsKKworICAgIGxvbmcg
bW9udGggPSAtMTsKKyAgICBjb25zdCBjaGFyICp3b3JkU3RhcnQgPSBkYXRlU3RyaW5nOworICAg
IC8vIENoZWNrIGNvbnRlbnRzIG9mIGZpcnN0IHdvcmRzIGlmIG5vdCBudW1iZXIKKyAgICB3aGls
ZSAoKmRhdGVTdHJpbmcgJiYgIWlzQVNDSUlEaWdpdCgqZGF0ZVN0cmluZykpIHsKKyAgICAgICAg
aWYgKGlzQVNDSUlTcGFjZSgqZGF0ZVN0cmluZykgfHwgKmRhdGVTdHJpbmcgPT0gJygnKSB7Cisg
ICAgICAgICAgICBpZiAoZGF0ZVN0cmluZyAtIHdvcmRTdGFydCA+PSAzKQorICAgICAgICAgICAg
ICAgIG1vbnRoID0gZmluZE1vbnRoKHdvcmRTdGFydCk7CisgICAgICAgICAgICBza2lwU3BhY2Vz
QW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7CisgICAgICAgICAgICB3b3JkU3RhcnQgPSBkYXRlU3Ry
aW5nOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgZGF0ZVN0cmluZysrOworICAgIH0KKwor
ICAgIC8vIE1pc3NpbmcgZGVsaW1pdGVyIGJldHdlZW4gbW9udGggYW5kIGRheSAobGlrZSAiSmFu
dWFyeTI5Iik/CisgICAgaWYgKG1vbnRoID09IC0xICYmIHdvcmRTdGFydCAhPSBkYXRlU3RyaW5n
KQorICAgICAgICBtb250aCA9IGZpbmRNb250aCh3b3JkU3RhcnQpOworCisgICAgc2tpcFNwYWNl
c0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOworCisgICAgaWYgKCEqZGF0ZVN0cmluZykKKyAgICAg
ICAgcmV0dXJuIE5hTjsKKworICAgIC8vICcgMDktTm92LTk5IDIzOjEyOjQwIEdNVCcKKyAgICBj
aGFyKiBuZXdQb3NTdHI7CisgICAgbG9uZyBkYXk7CisgICAgaWYgKCFwYXJzZUxvbmcoZGF0ZVN0
cmluZywgJm5ld1Bvc1N0ciwgMTAsICZkYXkpKQorICAgICAgICByZXR1cm4gTmFOOworICAgIGRh
dGVTdHJpbmcgPSBuZXdQb3NTdHI7CisKKyAgICBpZiAoISpkYXRlU3RyaW5nKQorICAgICAgICBy
ZXR1cm4gTmFOOworCisgICAgaWYgKGRheSA8IDApCisgICAgICAgIHJldHVybiBOYU47CisKKyAg
ICBsb25nIHllYXIgPSAwOworICAgIGlmIChkYXkgPiAzMSkgeworICAgICAgICAvLyAjIyMgd2hl
cmUgaXMgdGhlIGJvdW5kYXJ5IGFuZCB3aGF0IGhhcHBlbnMgYmVsb3c/CisgICAgICAgIGlmICgq
ZGF0ZVN0cmluZyAhPSAnLycpCisgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICAvLyBs
b29rcyBsaWtlIGEgWVlZWS9NTS9ERCBkYXRlCisgICAgICAgIGlmICghKisrZGF0ZVN0cmluZykK
KyAgICAgICAgICAgIHJldHVybiBOYU47CisgICAgICAgIHllYXIgPSBkYXk7CisgICAgICAgIGlm
ICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmbW9udGgpKQorICAgICAg
ICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgbW9udGggLT0gMTsKKyAgICAgICAgZGF0ZVN0cmlu
ZyA9IG5ld1Bvc1N0cjsKKyAgICAgICAgaWYgKCpkYXRlU3RyaW5nKysgIT0gJy8nIHx8ICEqZGF0
ZVN0cmluZykKKyAgICAgICAgICAgIHJldHVybiBOYU47CisgICAgICAgIGlmICghcGFyc2VMb25n
KGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmZGF5KSkKKyAgICAgICAgICAgIHJldHVybiBO
YU47CisgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CisgICAgfSBlbHNlIGlmICgqZGF0
ZVN0cmluZyA9PSAnLycgJiYgbW9udGggPT0gLTEpIHsKKyAgICAgICAgZGF0ZVN0cmluZysrOwor
ICAgICAgICAvLyBUaGlzIGxvb2tzIGxpa2UgYSBNTS9ERC9ZWVlZIGRhdGUsIG5vdCBhbiBSRkMg
ZGF0ZS4KKyAgICAgICAgbW9udGggPSBkYXkgLSAxOyAvLyAwLWJhc2VkCisgICAgICAgIGlmICgh
cGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmZGF5KSkKKyAgICAgICAgICAg
IHJldHVybiBOYU47CisgICAgICAgIGlmIChkYXkgPCAxIHx8IGRheSA+IDMxKQorICAgICAgICAg
ICAgcmV0dXJuIE5hTjsKKyAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKKyAgICAgICAg
aWYgKCpkYXRlU3RyaW5nID09ICcvJykKKyAgICAgICAgICAgIGRhdGVTdHJpbmcrKzsKKyAgICAg
ICAgaWYgKCEqZGF0ZVN0cmluZykKKyAgICAgICAgICAgIHJldHVybiBOYU47CisgICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmICgqZGF0ZVN0cmluZyA9PSAnLScpCisgICAgICAgICAgICBkYXRlU3Ry
aW5nKys7CisKKyAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOworCisg
ICAgICAgIGlmICgqZGF0ZVN0cmluZyA9PSAnLCcpCisgICAgICAgICAgICBkYXRlU3RyaW5nKys7
CisKKyAgICAgICAgaWYgKG1vbnRoID09IC0xKSB7IC8vIG5vdCBmb3VuZCB5ZXQKKyAgICAgICAg
ICAgIG1vbnRoID0gZmluZE1vbnRoKGRhdGVTdHJpbmcpOworICAgICAgICAgICAgaWYgKG1vbnRo
ID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOYU47CisKKyAgICAgICAgICAgIHdoaWxl
ICgqZGF0ZVN0cmluZyAmJiAqZGF0ZVN0cmluZyAhPSAnLScgJiYgKmRhdGVTdHJpbmcgIT0gJywn
ICYmICFpc0FTQ0lJU3BhY2UoKmRhdGVTdHJpbmcpKQorICAgICAgICAgICAgICAgIGRhdGVTdHJp
bmcrKzsKKworICAgICAgICAgICAgaWYgKCEqZGF0ZVN0cmluZykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTmFOOworCisgICAgICAgICAgICAvLyAnLTk5IDIzOjEyOjQwIEdNVCcKKyAgICAgICAg
ICAgIGlmICgqZGF0ZVN0cmluZyAhPSAnLScgJiYgKmRhdGVTdHJpbmcgIT0gJy8nICYmICpkYXRl
U3RyaW5nICE9ICcsJyAmJiAhaXNBU0NJSVNwYWNlKCpkYXRlU3RyaW5nKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTmFOOworICAgICAgICAgICAgZGF0ZVN0cmluZysrOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKG1vbnRoIDwgMCB8fCBtb250aCA+IDExKQorICAgICAgICByZXR1cm4g
TmFOOworCisgICAgLy8gJzk5IDIzOjEyOjQwIEdNVCcKKyAgICBpZiAoeWVhciA8PSAwICYmICpk
YXRlU3RyaW5nKSB7CisgICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NT
dHIsIDEwLCAmeWVhcikpCisgICAgICAgICAgICByZXR1cm4gTmFOOworICAgIH0KKyAgICAKKyAg
ICAvLyBEb24ndCBmYWlsIGlmIHRoZSB0aW1lIGlzIG1pc3NpbmcuCisgICAgbG9uZyBob3VyID0g
MDsKKyAgICBsb25nIG1pbnV0ZSA9IDA7CisgICAgbG9uZyBzZWNvbmQgPSAwOworICAgIGlmICgh
Km5ld1Bvc1N0cikKKyAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gJyAyMzoxMjo0MCBHTVQnCisgICAgICAgIGlmICghKGlzQVNDSUlTcGFjZSgq
bmV3UG9zU3RyKSB8fCAqbmV3UG9zU3RyID09ICcsJykpIHsKKyAgICAgICAgICAgIGlmICgqbmV3
UG9zU3RyICE9ICc6JykKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICAgICAg
Ly8gVGhlcmUgd2FzIG5vIHllYXI7IHRoZSBudW1iZXIgd2FzIHRoZSBob3VyLgorICAgICAgICAg
ICAgeWVhciA9IC0xOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gaW4gdGhlIG5v
cm1hbCBjYXNlICh3ZSBwYXJzZWQgdGhlIHllYXIpLCBhZHZhbmNlIHRvIHRoZSBuZXh0IG51bWJl
cgorICAgICAgICAgICAgZGF0ZVN0cmluZyA9ICsrbmV3UG9zU3RyOworICAgICAgICAgICAgc2tp
cFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOworICAgICAgICB9CisKKyAgICAgICAgcGFy
c2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmaG91cik7CisgICAgICAgIC8vIERv
IG5vdCBjaGVjayBmb3IgZXJybm8gaGVyZSBzaW5jZSB3ZSB3YW50IHRvIGNvbnRpbnVlCisgICAg
ICAgIC8vIGV2ZW4gaWYgZXJybm8gd2FzIHNldCBiZWNhc3VlIHdlIGFyZSBzdGlsbCBsb29raW5n
CisgICAgICAgIC8vIGZvciB0aGUgdGltZXpvbmUhCisKKyAgICAgICAgLy8gUmVhZCBhIG51bWJl
cj8gSWYgbm90LCB0aGlzIG1pZ2h0IGJlIGEgdGltZXpvbmUgbmFtZS4KKyAgICAgICAgaWYgKG5l
d1Bvc1N0ciAhPSBkYXRlU3RyaW5nKSB7CisgICAgICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9z
U3RyOworCisgICAgICAgICAgICBpZiAoaG91ciA8IDAgfHwgaG91ciA+IDIzKQorICAgICAgICAg
ICAgICAgIHJldHVybiBOYU47CisKKyAgICAgICAgICAgIGlmICghKmRhdGVTdHJpbmcpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5hTjsKKworICAgICAgICAgICAgLy8gJzoxMjo0MCBHTVQnCisg
ICAgICAgICAgICBpZiAoKmRhdGVTdHJpbmcrKyAhPSAnOicpCisgICAgICAgICAgICAgICAgcmV0
dXJuIE5hTjsKKworICAgICAgICAgICAgaWYgKCFwYXJzZUxvbmcoZGF0ZVN0cmluZywgJm5ld1Bv
c1N0ciwgMTAsICZtaW51dGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBOYU47CisgICAgICAg
ICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOworCisgICAgICAgICAgICBpZiAobWludXRlIDwg
MCB8fCBtaW51dGUgPiA1OSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFOOworCisgICAgICAg
ICAgICAvLyAnOjQwIEdNVCcKKyAgICAgICAgICAgIGlmICgqZGF0ZVN0cmluZyAmJiAqZGF0ZVN0
cmluZyAhPSAnOicgJiYgIWlzQVNDSUlTcGFjZSgqZGF0ZVN0cmluZykpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIE5hTjsKKworICAgICAgICAgICAgLy8gc2Vjb25kcyBhcmUgb3B0aW9uYWwgaW4g
cmZjODIyICsgcmZjMjgyMgorICAgICAgICAgICAgaWYgKCpkYXRlU3RyaW5nID09JzonKSB7Cisg
ICAgICAgICAgICAgICAgZGF0ZVN0cmluZysrOworCisgICAgICAgICAgICAgICAgaWYgKCFwYXJz
ZUxvbmcoZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTAsICZzZWNvbmQpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTmFOOworICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NT
dHI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoc2Vjb25kIDwgMCB8fCBzZWNv
bmQgPiA1OSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOworCisgICAg
ICAgICAgICBpZiAoc3RybmNhc2VjbXAoZGF0ZVN0cmluZywgIkFNIiwgMikgPT0gMCkgeworICAg
ICAgICAgICAgICAgIGlmIChob3VyID4gMTIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
YU47CisgICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpCisgICAgICAgICAgICAgICAgICAg
IGhvdXIgPSAwOworICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcgKz0gMjsKKyAgICAgICAgICAg
ICAgICBza2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHN0cm5jYXNlY21wKGRhdGVTdHJpbmcsICJQTSIsIDIpID09IDApIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaG91ciA+IDEyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFOOwor
ICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKQorICAgICAgICAgICAgICAgICAgICBob3Vy
ICs9IDEyOworICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcgKz0gMjsKKyAgICAgICAgICAgICAg
ICBza2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBib29sIGhhdmVUWiA9IGZhbHNlOworICAgIGludCBvZmZzZXQg
PSAwOworCisgICAgLy8gRG9uJ3QgZmFpbCBpZiB0aGUgdGltZSB6b25lIGlzIG1pc3NpbmcuIAor
ICAgIC8vIFNvbWUgd2Vic2l0ZXMgb21pdCB0aGUgdGltZSB6b25lICg0Mjc1MjA2KS4KKyAgICBp
ZiAoKmRhdGVTdHJpbmcpIHsKKyAgICAgICAgaWYgKHN0cm5jYXNlY21wKGRhdGVTdHJpbmcsICJH
TVQiLCAzKSA9PSAwIHx8IHN0cm5jYXNlY21wKGRhdGVTdHJpbmcsICJVVEMiLCAzKSA9PSAwKSB7
CisgICAgICAgICAgICBkYXRlU3RyaW5nICs9IDM7CisgICAgICAgICAgICBoYXZlVFogPSB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCpkYXRlU3RyaW5nID09ICcrJyB8fCAqZGF0ZVN0
cmluZyA9PSAnLScpIHsKKyAgICAgICAgICAgIGxvbmcgbzsKKyAgICAgICAgICAgIGlmICghcGFy
c2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmbykpCisgICAgICAgICAgICAgICAg
cmV0dXJuIE5hTjsKKyAgICAgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CisKKyAgICAg
ICAgICAgIGlmIChvIDwgLTk5NTkgfHwgbyA+IDk5NTkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IE5hTjsKKworICAgICAgICAgICAgaW50IHNnbiA9IChvIDwgMCkgPyAtMSA6IDE7CisgICAgICAg
ICAgICBvID0gYWJzKG8pOworICAgICAgICAgICAgaWYgKCpkYXRlU3RyaW5nICE9ICc6Jykgewor
ICAgICAgICAgICAgICAgIG9mZnNldCA9ICgobyAvIDEwMCkgKiA2MCArIChvICUgMTAwKSkgKiBz
Z247CisgICAgICAgICAgICB9IGVsc2UgeyAvLyBHTVQrMDU6MDAKKyAgICAgICAgICAgICAgICBs
b25nIG8yOworICAgICAgICAgICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQ
b3NTdHIsIDEwLCAmbzIpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAg
ICAgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CisgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gKG8gKiA2MCArIG8yKSAqIHNnbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhhdmVU
WiA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGludChzaXplb2Yoa25vd25fem9uZXMpIC8gc2l6ZW9mKEtub3duWm9uZSkpOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBpZiAoMCA9PSBzdHJuY2FzZWNtcChkYXRlU3RyaW5nLCBrbm93bl96
b25lc1tpXS50ek5hbWUsIHN0cmxlbihrbm93bl96b25lc1tpXS50ek5hbWUpKSkgeworICAgICAg
ICAgICAgICAgICAgICBvZmZzZXQgPSBrbm93bl96b25lc1tpXS50ek9mZnNldDsKKyAgICAgICAg
ICAgICAgICAgICAgZGF0ZVN0cmluZyArPSBzdHJsZW4oa25vd25fem9uZXNbaV0udHpOYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgaGF2ZVRaID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOworCisgICAgaWYgKCpk
YXRlU3RyaW5nICYmIHllYXIgPT0gLTEpIHsKKyAgICAgICAgaWYgKCFwYXJzZUxvbmcoZGF0ZVN0
cmluZywgJm5ld1Bvc1N0ciwgMTAsICZ5ZWFyKSkKKyAgICAgICAgICAgIHJldHVybiBOYU47Cisg
ICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CisgICAgfQorICAgICAKKyAgICBza2lwU3Bh
Y2VzQW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7CisgICAgIAorICAgIC8vIFRyYWlsaW5nIGdhcmJh
Z2UKKyAgICBpZiAoKmRhdGVTdHJpbmcpCisgICAgICAgIHJldHVybiBOYU47CisKKyAgICAvLyBZ
Mks6IEhhbmRsZSAyIGRpZ2l0IHllYXJzLgorICAgIGlmICh5ZWFyID49IDAgJiYgeWVhciA8IDEw
MCkgeworICAgICAgICBpZiAoeWVhciA8IDUwKQorICAgICAgICAgICAgeWVhciArPSAyMDAwOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB5ZWFyICs9IDE5MDA7CisgICAgfQorCisgICAgLy8g
ZmFsbCBiYWNrIHRvIGxvY2FsIHRpbWV6b25lCisgICAgaWYgKCFoYXZlVFopIHsKKyAgICAgICAg
R3JlZ29yaWFuRGF0ZVRpbWUgdDsKKyAgICAgICAgdC5tb250aERheSA9IGRheTsKKyAgICAgICAg
dC5tb250aCA9IG1vbnRoOworICAgICAgICB0LnllYXIgPSB5ZWFyIC0gMTkwMDsKKyAgICAgICAg
dC5pc0RTVCA9IC0xOworICAgICAgICB0LnNlY29uZCA9IHNlY29uZDsKKyAgICAgICAgdC5taW51
dGUgPSBtaW51dGU7CisgICAgICAgIHQuaG91ciA9IGhvdXI7CisKKyAgICAgICAgLy8gVXNlIG91
ciBncmVnb3JpYW5EYXRlVGltZVRvTVMoKSByYXRoZXIgdGhhbiBta3RpbWUoKSBhcyB0aGUgbGF0
dGVyIGNhbid0IGhhbmRsZSB0aGUgZnVsbCB5ZWFyIHJhbmdlLgorICAgICAgICByZXR1cm4gZ3Jl
Z29yaWFuRGF0ZVRpbWVUb01TKHQsIDAsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gKHlt
ZGhtc1RvU2Vjb25kcyh5ZWFyLCBtb250aCArIDEsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQp
IC0gKG9mZnNldCAqIDYwLjApKSAqIG1zUGVyU2Vjb25kOworfQorCitkb3VibGUgdGltZUNsaXAo
ZG91YmxlIHQpCit7CisgICAgaWYgKCFpc2Zpbml0ZSh0KSkKKyAgICAgICAgcmV0dXJuIE5hTjsK
KyAgICBpZiAoZmFicyh0KSA+IDguNjRFMTUpCisgICAgICAgIHJldHVybiBOYU47CisgICAgcmV0
dXJuIHRydW5jKHQpOworfQorCitVU3RyaW5nIGZvcm1hdERhdGUoY29uc3QgR3JlZ29yaWFuRGF0
ZVRpbWUgJnQpCit7CisgICAgY2hhciBidWZmZXJbMTAwXTsKKyAgICBzbnByaW50ZihidWZmZXIs
IHNpemVvZihidWZmZXIpLCAiJXMgJXMgJTAyZCAlMDRkIiwKKyAgICAgICAgd2Vla2RheU5hbWVb
KHQud2Vla0RheSArIDYpICUgN10sCisgICAgICAgIG1vbnRoTmFtZVt0Lm1vbnRoXSwgdC5tb250
aERheSwgdC55ZWFyICsgMTkwMCk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworVVN0cmluZyBm
b3JtYXREYXRlVVRDVmFyaWFudChjb25zdCBHcmVnb3JpYW5EYXRlVGltZSAmdCkKK3sKKyAgICBj
aGFyIGJ1ZmZlclsxMDBdOworICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIl
cywgJTAyZCAlcyAlMDRkIiwKKyAgICAgICAgd2Vla2RheU5hbWVbKHQud2Vla0RheSArIDYpICUg
N10sCisgICAgICAgIHQubW9udGhEYXksIG1vbnRoTmFtZVt0Lm1vbnRoXSwgdC55ZWFyICsgMTkw
MCk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworVVN0cmluZyBmb3JtYXRUaW1lKGNvbnN0IEdy
ZWdvcmlhbkRhdGVUaW1lICZ0LCBib29sIHV0YykKK3sKKyAgICBjaGFyIGJ1ZmZlclsxMDBdOwor
ICAgIGlmICh1dGMpIHsKKyAgICAgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwg
IiUwMmQ6JTAyZDolMDJkIEdNVCIsIHQuaG91ciwgdC5taW51dGUsIHQuc2Vjb25kKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpbnQgb2Zmc2V0ID0gYWJzKGdtdG9mZnNldCh0KSk7CisgICAgICAg
IGNoYXIgdGltZVpvbmVOYW1lWzcwXTsKKyAgICAgICAgc3RydWN0IHRtIGd0bSA9IHQ7CisgICAg
ICAgIHN0cmZ0aW1lKHRpbWVab25lTmFtZSwgc2l6ZW9mKHRpbWVab25lTmFtZSksICIlWiIsICZn
dG0pOworCisgICAgICAgIGlmICh0aW1lWm9uZU5hbWVbMF0pIHsKKyAgICAgICAgICAgIHNucHJp
bnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlMDJkOiUwMmQ6JTAyZCBHTVQlYyUwMmQlMDJk
ICglcykiLAorICAgICAgICAgICAgICAgIHQuaG91ciwgdC5taW51dGUsIHQuc2Vjb25kLAorICAg
ICAgICAgICAgICAgIGdtdG9mZnNldCh0KSA8IDAgPyAnLScgOiAnKycsIG9mZnNldCAvICg2MCo2
MCksIChvZmZzZXQgLyA2MCkgJSA2MCwgdGltZVpvbmVOYW1lKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlMDJkOiUwMmQ6
JTAyZCBHTVQlYyUwMmQlMDJkIiwKKyAgICAgICAgICAgICAgICB0LmhvdXIsIHQubWludXRlLCB0
LnNlY29uZCwKKyAgICAgICAgICAgICAgICBnbXRvZmZzZXQodCkgPCAwID8gJy0nIDogJysnLCBv
ZmZzZXQgLyAoNjAqNjApLCAob2Zmc2V0IC8gNjApICUgNjApOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBVU3RyaW5nKGJ1ZmZlcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS93dGYvRGF0ZU1hdGguY3BwCShyZXZpc2lvbiA0NDUwMSkKKysrIEphdmFTY3JpcHRD
b3JlL3d0Zi9EYXRlTWF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw4IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
ICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiAKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKICAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29tbXVuaWNhdG9y
IGNsaWVudCBjb2RlLCByZWxlYXNlZAogICogTWFyY2ggMzEsIDE5OTguCiAgKgpAQCAtNDIsMTUg
KzQzLDE2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGF0ZU1hdGguaCIKIAot
I2luY2x1ZGUgIkpTTnVtYmVyQ2VsbC5oIgotI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlICJB
c3NlcnRpb25zLmgiCisjaW5jbHVkZSAiQVNDSUlDVHlwZS5oIgorI2luY2x1ZGUgIkN1cnJlbnRU
aW1lLmgiCisjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgorI2luY2x1ZGUgIlN0cmluZ0V4dHJhcy5o
IgorCisjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHRp
bWUuaD4KLSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisKIAogI2lmIEhBVkUoRVJS
Tk9fSCkKICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtNjgsOSArNzAsOSBAQAogI2luY2x1ZGUgPHN5
cy90aW1lYi5oPgogI2VuZGlmCiAKLXVzaW5nIG5hbWVzcGFjZSBXVEY7CisjZGVmaW5lIE5hTiBz
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpCiAKLW5hbWVzcGFjZSBKU0Mg
eworbmFtZXNwYWNlIFdURiB7CiAKIC8qIENvbnN0YW50cyAqLwogCkBAIC00OTYsNyArNDk4LDcg
QEAgdm9pZCBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoZG91YmxlIG1zLCBibwogICAgIHRtLnRpbWVa
b25lID0gTlVMTDsKIH0KIAotdm9pZCBpbml0RGF0ZU1hdGgoKQordm9pZCBpbml0aWFsaXplRGF0
ZXMoKQogewogI2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgYm9vbCBhbHJlYWR5SW5pdGlhbGl6
ZWQ7CkBAIC01OTIsNyArNTk0LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VMb25nKGNvbnN0IGNoYXIq
IHN0cmluZwogICAgIHJldHVybiB0cnVlOwogfQogCi1kb3VibGUgcGFyc2VEYXRlKGNvbnN0IFVT
dHJpbmcgJmRhdGUpCitkb3VibGUgcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVy
cyhjb25zdCBjaGFyKiBkYXRlU3RyaW5nKQogewogICAgIC8vIFRoaXMgcGFyc2VzIGEgZGF0ZSBp
biB0aGUgZm9ybToKICAgICAvLyAgICAgVHVlc2RheSwgMDktTm92LTk5IDIzOjEyOjQwIEdNVApA
QCAtNjA3LDkgKzYwOSw2IEBAIGRvdWJsZSBwYXJzZURhdGUoY29uc3QgVVN0cmluZyAmZGF0ZSkK
ICAgICAvLyAgICAgW1dlZG5lc2RheV0gSmFudWFyeSAwOSAyMzoxMjo0MCBHTVQgMTk5OQogICAg
IC8vCiAgICAgLy8gV2UgaWdub3JlIHRoZSB3ZWVrZGF5LgotCi0gICAgQ1N0cmluZyBkYXRlQ1N0
cmluZyA9IGRhdGUuVVRGOFN0cmluZygpOwotICAgIGNvbnN0IGNoYXIgKmRhdGVTdHJpbmcgPSBk
YXRlQ1N0cmluZy5jX3N0cigpOwogICAgICAKICAgICAvLyBTa2lwIGxlYWRpbmcgc3BhY2UKICAg
ICBza2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7CkBAIC03MTUsNyArNzE0LDcgQEAg
ZG91YmxlIHBhcnNlRGF0ZShjb25zdCBVU3RyaW5nICZkYXRlKQogICAgICAgICBpZiAoIXBhcnNl
TG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJnllYXIpKQogICAgICAgICAgICAgcmV0
dXJuIE5hTjsKICAgICB9Ci0gICAgCisKICAgICAvLyBEb24ndCBmYWlsIGlmIHRoZSB0aW1lIGlz
IG1pc3NpbmcuCiAgICAgbG9uZyBob3VyID0gMDsKICAgICBsb25nIG1pbnV0ZSA9IDA7CkBAIC03
NzIsNyArNzcxLDcgQEAgZG91YmxlIHBhcnNlRGF0ZShjb25zdCBVU3RyaW5nICZkYXRlKQogICAg
ICAgICAgICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAm
c2Vjb25kKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKICAgICAgICAgICAgICAg
ICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAg
ICBpZiAoc2Vjb25kIDwgMCB8fCBzZWNvbmQgPiA1OSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5hTjsKICAgICAgICAgICAgIH0KQEAgLTg0OCw5ICs4NDcsOSBAQCBkb3VibGUgcGFyc2VE
YXRlKGNvbnN0IFVTdHJpbmcgJmRhdGUpCiAgICAgICAgICAgICByZXR1cm4gTmFOOwogICAgICAg
ICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwogICAgIH0KLSAgICAgCisKICAgICBza2lwU3BhY2Vz
QW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7Ci0gICAgIAorCiAgICAgLy8gVHJhaWxpbmcgZ2FyYmFn
ZQogICAgIGlmICgqZGF0ZVN0cmluZykKICAgICAgICAgcmV0dXJuIE5hTjsKQEAgLTg5MCw0NiAr
ODg5LDUgQEAgZG91YmxlIHRpbWVDbGlwKGRvdWJsZSB0KQogICAgIHJldHVybiB0cnVuYyh0KTsK
IH0KIAotVVN0cmluZyBmb3JtYXREYXRlKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lICZ0KQotewot
ICAgIGNoYXIgYnVmZmVyWzEwMF07Ci0gICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVy
KSwgIiVzICVzICUwMmQgJTA0ZCIsCi0gICAgICAgIHdlZWtkYXlOYW1lWyh0LndlZWtEYXkgKyA2
KSAlIDddLAotICAgICAgICBtb250aE5hbWVbdC5tb250aF0sIHQubW9udGhEYXksIHQueWVhciAr
IDE5MDApOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLVVTdHJpbmcgZm9ybWF0RGF0ZVVUQ1Zh
cmlhbnQoY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUgJnQpCi17Ci0gICAgY2hhciBidWZmZXJbMTAw
XTsKLSAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMsICUwMmQgJXMgJTA0
ZCIsCi0gICAgICAgIHdlZWtkYXlOYW1lWyh0LndlZWtEYXkgKyA2KSAlIDddLAotICAgICAgICB0
Lm1vbnRoRGF5LCBtb250aE5hbWVbdC5tb250aF0sIHQueWVhciArIDE5MDApOwotICAgIHJldHVy
biBidWZmZXI7Ci19Ci0KLVVTdHJpbmcgZm9ybWF0VGltZShjb25zdCBHcmVnb3JpYW5EYXRlVGlt
ZSAmdCwgYm9vbCB1dGMpCi17Ci0gICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICBpZiAodXRjKSB7
Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlMDJkOiUwMmQ6JTAy
ZCBHTVQiLCB0LmhvdXIsIHQubWludXRlLCB0LnNlY29uZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaW50IG9mZnNldCA9IGFicyhnbXRvZmZzZXQodCkpOwotICAgICAgICBjaGFyIHRpbWVab25l
TmFtZVs3MF07Ci0gICAgICAgIHN0cnVjdCB0bSBndG0gPSB0OwotICAgICAgICBzdHJmdGltZSh0
aW1lWm9uZU5hbWUsIHNpemVvZih0aW1lWm9uZU5hbWUpLCAiJVoiLCAmZ3RtKTsKLQotICAgICAg
ICBpZiAodGltZVpvbmVOYW1lWzBdKSB7Ci0gICAgICAgICAgICBzbnByaW50ZihidWZmZXIsIHNp
emVvZihidWZmZXIpLCAiJTAyZDolMDJkOiUwMmQgR01UJWMlMDJkJTAyZCAoJXMpIiwKLSAgICAg
ICAgICAgICAgICB0LmhvdXIsIHQubWludXRlLCB0LnNlY29uZCwKLSAgICAgICAgICAgICAgICBn
bXRvZmZzZXQodCkgPCAwID8gJy0nIDogJysnLCBvZmZzZXQgLyAoNjAqNjApLCAob2Zmc2V0IC8g
NjApICUgNjAsIHRpbWVab25lTmFtZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBz
bnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJTAyZDolMDJkOiUwMmQgR01UJWMlMDJk
JTAyZCIsCi0gICAgICAgICAgICAgICAgdC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQsCi0gICAg
ICAgICAgICAgICAgZ210b2Zmc2V0KHQpIDwgMCA/ICctJyA6ICcrJywgb2Zmc2V0IC8gKDYwKjYw
KSwgKG9mZnNldCAvIDYwKSAlIDYwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gVVN0
cmluZyhidWZmZXIpOwotfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK30gLy8gbmFtZXNwYWNlIFdU
RgoKUHJvcGVydHkgY2hhbmdlcyBvbjogSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46bWVyZ2VpbmZvCgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3Rm
L0RhdGVNYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmgJ
KHJldmlzaW9uIDQ0NTAxKQkoZnJvbSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVNYXRoLmg6
NDQ1MDEpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIu
MC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3Qg
dG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vu
c2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
CisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lz
LAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w
bGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVy
bmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisg
KiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29kZSwg
cmVsZWFzZWQKKyAqIE1hcmNoIDMxLCAxOTk4LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3Bl
ciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29y
cG9yYXRpb24uCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBh
cmUgQ29weXJpZ2h0IChDKSAxOTk4CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVs
eSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMg
b2YKKyAqIGVpdGhlciBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAy
IG9yIGxhdGVyICh0aGUgIkdQTCIpLAorICogb3IgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGlj
aCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2Fi
bGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBv
ZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBl
aXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAq
IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBM
LCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBh
Ym92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zp
c2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxl
dGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVy
c2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBN
UEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICovCisKKyNpZm5kZWYgRGF0ZU1hdGhfaAor
I2RlZmluZSBEYXRlTWF0aF9oCisKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBVU3RyaW5nOworc3RydWN0IEdyZWdvcmlhbkRhdGVUaW1lOworCit2b2lkIGluaXREYXRl
TWF0aCgpOwordm9pZCBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoZG91YmxlLCBib29sIG91dHB1dElz
VVRDLCBHcmVnb3JpYW5EYXRlVGltZSYpOworZG91YmxlIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhj
b25zdCBHcmVnb3JpYW5EYXRlVGltZSYsIGRvdWJsZSwgYm9vbCBpbnB1dElzVVRDKTsKK2RvdWJs
ZSBnZXRVVENPZmZzZXQoKTsKK2ludCBlcXVpdmFsZW50WWVhckZvckRTVChpbnQgeWVhcik7Citk
b3VibGUgZ2V0Q3VycmVudFVUQ1RpbWUoKTsKK2RvdWJsZSBnZXRDdXJyZW50VVRDVGltZVdpdGhN
aWNyb3NlY29uZHMoKTsKK3ZvaWQgZ2V0TG9jYWxUaW1lKGNvbnN0IHRpbWVfdCosIHRtKik7CisK
Ky8vIE5vdCByZWFsbHkgbWF0aCByZWxhdGVkLCBidXQgdGhpcyBpcyBjdXJyZW50bHkgdGhlIG9u
bHkgc2hhcmVkIHBsYWNlIHRvIHB1dCB0aGVzZS4gIAorZG91YmxlIHBhcnNlRGF0ZShjb25zdCBV
U3RyaW5nJik7Citkb3VibGUgdGltZUNsaXAoZG91YmxlKTsKK1VTdHJpbmcgZm9ybWF0RGF0ZShj
b25zdCBHcmVnb3JpYW5EYXRlVGltZSYpOworVVN0cmluZyBmb3JtYXREYXRlVVRDVmFyaWFudChj
b25zdCBHcmVnb3JpYW5EYXRlVGltZSYpOworVVN0cmluZyBmb3JtYXRUaW1lKGNvbnN0IEdyZWdv
cmlhbkRhdGVUaW1lJiwgYm9vbCBpbnB1dElzVVRDKTsKKworCitjb25zdCBjaGFyICogY29uc3Qg
d2Vla2RheU5hbWVbN10gPSB7ICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNh
dCIsICJTdW4iIH07Citjb25zdCBjaGFyICogY29uc3QgbW9udGhOYW1lWzEyXSA9IHsgIkphbiIs
ICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBdWciLCAiU2VwIiwg
Ik9jdCIsICJOb3YiLCAiRGVjIiB9OworCitjb25zdCBkb3VibGUgaG91cnNQZXJEYXkgPSAyNC4w
OworY29uc3QgZG91YmxlIG1pbnV0ZXNQZXJIb3VyID0gNjAuMDsKK2NvbnN0IGRvdWJsZSBzZWNv
bmRzUGVySG91ciA9IDYwLjAgKiA2MC4wOworY29uc3QgZG91YmxlIHNlY29uZHNQZXJNaW51dGUg
PSA2MC4wOworY29uc3QgZG91YmxlIG1zUGVyU2Vjb25kID0gMTAwMC4wOworY29uc3QgZG91Ymxl
IG1zUGVyTWludXRlID0gNjAuMCAqIDEwMDAuMDsKK2NvbnN0IGRvdWJsZSBtc1BlckhvdXIgPSA2
MC4wICogNjAuMCAqIDEwMDAuMDsKK2NvbnN0IGRvdWJsZSBtc1BlckRheSA9IDI0LjAgKiA2MC4w
ICogNjAuMCAqIDEwMDAuMDsKKworLy8gSW50ZW50aW9uYWxseSBvdmVycmlkZGluZyB0aGUgZGVm
YXVsdCB0bSBvZiB0aGUgc3lzdGVtCisvLyBUZWUgbWVtYmVycyBvZiB0bSBkaWZmZXIgb24gdmFy
aW91cyBvcGVyYXRpbmcgc3lzdGVtcy4KK3N0cnVjdCBHcmVnb3JpYW5EYXRlVGltZSA6IE5vbmNv
cHlhYmxlIHsKKyAgICBHcmVnb3JpYW5EYXRlVGltZSgpCisgICAgICAgIDogc2Vjb25kKDApCisg
ICAgICAgICwgbWludXRlKDApCisgICAgICAgICwgaG91cigwKQorICAgICAgICAsIHdlZWtEYXko
MCkKKyAgICAgICAgLCBtb250aERheSgwKQorICAgICAgICAsIHllYXJEYXkoMCkKKyAgICAgICAg
LCBtb250aCgwKQorICAgICAgICAsIHllYXIoMCkKKyAgICAgICAgLCBpc0RTVCgwKQorICAgICAg
ICAsIHV0Y09mZnNldCgwKQorICAgICAgICAsIHRpbWVab25lKDApCisgICAgeworICAgIH0KKwor
ICAgIH5HcmVnb3JpYW5EYXRlVGltZSgpCisgICAgeworICAgICAgICBkZWxldGUgW10gdGltZVpv
bmU7CisgICAgfQorCisgICAgR3JlZ29yaWFuRGF0ZVRpbWUoY29uc3QgdG0mIGluVG0pCisgICAg
ICAgIDogc2Vjb25kKGluVG0udG1fc2VjKQorICAgICAgICAsIG1pbnV0ZShpblRtLnRtX21pbikK
KyAgICAgICAgLCBob3VyKGluVG0udG1faG91cikKKyAgICAgICAgLCB3ZWVrRGF5KGluVG0udG1f
d2RheSkKKyAgICAgICAgLCBtb250aERheShpblRtLnRtX21kYXkpCisgICAgICAgICwgeWVhckRh
eShpblRtLnRtX3lkYXkpCisgICAgICAgICwgbW9udGgoaW5UbS50bV9tb24pCisgICAgICAgICwg
eWVhcihpblRtLnRtX3llYXIpCisgICAgICAgICwgaXNEU1QoaW5UbS50bV9pc2RzdCkKKyAgICB7
CisjaWYgIVBMQVRGT1JNKFdJTl9PUykgJiYgIVBMQVRGT1JNKFNPTEFSSVMpICYmICFDT01QSUxF
UihSVkNUKQorICAgICAgICB1dGNPZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGluVG0udG1fZ210
b2ZmKTsKKworICAgICAgICBpbnQgaW5ab25lU2l6ZSA9IHN0cmxlbihpblRtLnRtX3pvbmUpICsg
MTsKKyAgICAgICAgdGltZVpvbmUgPSBuZXcgY2hhcltpblpvbmVTaXplXTsKKyAgICAgICAgc3Ry
bmNweSh0aW1lWm9uZSwgaW5UbS50bV96b25lLCBpblpvbmVTaXplKTsKKyNlbHNlCisgICAgICAg
IHV0Y09mZnNldCA9IHN0YXRpY19jYXN0PGludD4oZ2V0VVRDT2Zmc2V0KCkgLyBtc1BlclNlY29u
ZCArIChpc0RTVCA/IHNlY29uZHNQZXJIb3VyIDogMCkpOworICAgICAgICB0aW1lWm9uZSA9IDA7
CisjZW5kaWYKKyAgICB9CisKKyAgICBvcGVyYXRvciB0bSgpIGNvbnN0CisgICAgeworICAgICAg
ICB0bSByZXQ7CisgICAgICAgIG1lbXNldCgmcmV0LCAwLCBzaXplb2YocmV0KSk7CisKKyAgICAg
ICAgcmV0LnRtX3NlYyAgID0gIHNlY29uZDsKKyAgICAgICAgcmV0LnRtX21pbiAgID0gIG1pbnV0
ZTsKKyAgICAgICAgcmV0LnRtX2hvdXIgID0gIGhvdXI7CisgICAgICAgIHJldC50bV93ZGF5ICA9
ICB3ZWVrRGF5OworICAgICAgICByZXQudG1fbWRheSAgPSAgbW9udGhEYXk7CisgICAgICAgIHJl
dC50bV95ZGF5ICA9ICB5ZWFyRGF5OworICAgICAgICByZXQudG1fbW9uICAgPSAgbW9udGg7Cisg
ICAgICAgIHJldC50bV95ZWFyICA9ICB5ZWFyOworICAgICAgICByZXQudG1faXNkc3QgPSAgaXNE
U1Q7CisKKyNpZiAhUExBVEZPUk0oV0lOX09TKSAmJiAhUExBVEZPUk0oU09MQVJJUykgJiYgIUNP
TVBJTEVSKFJWQ1QpCisgICAgICAgIHJldC50bV9nbXRvZmYgPSBzdGF0aWNfY2FzdDxsb25nPih1
dGNPZmZzZXQpOworICAgICAgICByZXQudG1fem9uZSA9IHRpbWVab25lOworI2VuZGlmCisKKyAg
ICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICB2b2lkIGNvcHlGcm9tKGNvbnN0IEdyZWdv
cmlhbkRhdGVUaW1lJiByaHMpCisgICAgeworICAgICAgICBzZWNvbmQgPSByaHMuc2Vjb25kOwor
ICAgICAgICBtaW51dGUgPSByaHMubWludXRlOworICAgICAgICBob3VyID0gcmhzLmhvdXI7Cisg
ICAgICAgIHdlZWtEYXkgPSByaHMud2Vla0RheTsKKyAgICAgICAgbW9udGhEYXkgPSByaHMubW9u
dGhEYXk7CisgICAgICAgIHllYXJEYXkgPSByaHMueWVhckRheTsKKyAgICAgICAgbW9udGggPSBy
aHMubW9udGg7CisgICAgICAgIHllYXIgPSByaHMueWVhcjsKKyAgICAgICAgaXNEU1QgPSByaHMu
aXNEU1Q7CisgICAgICAgIHV0Y09mZnNldCA9IHJocy51dGNPZmZzZXQ7CisgICAgICAgIGlmIChy
aHMudGltZVpvbmUpIHsKKyAgICAgICAgICAgIGludCBpblpvbmVTaXplID0gc3RybGVuKHJocy50
aW1lWm9uZSkgKyAxOworICAgICAgICAgICAgdGltZVpvbmUgPSBuZXcgY2hhcltpblpvbmVTaXpl
XTsKKyAgICAgICAgICAgIHN0cm5jcHkodGltZVpvbmUsIHJocy50aW1lWm9uZSwgaW5ab25lU2l6
ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGltZVpvbmUgPSAwOworICAgIH0KKwor
ICAgIGludCBzZWNvbmQ7CisgICAgaW50IG1pbnV0ZTsKKyAgICBpbnQgaG91cjsKKyAgICBpbnQg
d2Vla0RheTsKKyAgICBpbnQgbW9udGhEYXk7CisgICAgaW50IHllYXJEYXk7CisgICAgaW50IG1v
bnRoOworICAgIGludCB5ZWFyOworICAgIGludCBpc0RTVDsKKyAgICBpbnQgdXRjT2Zmc2V0Owor
ICAgIGNoYXIqIHRpbWVab25lOworfTsKKworc3RhdGljIGlubGluZSBpbnQgZ210b2Zmc2V0KGNv
bnN0IEdyZWdvcmlhbkRhdGVUaW1lJiB0KQoreworICAgIHJldHVybiB0LnV0Y09mZnNldDsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEYXRlTWF0aF9oCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93
dGYvRGF0ZU1hdGguaAkocmV2aXNpb24gNDQ1MDEpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvRGF0
ZU1hdGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFZl
cnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQogICoKQEAgLTQ1LDEyICs0NiwxMSBAQAog
I2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCi1uYW1l
c3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXVEYgewogCi1jbGFzcyBVU3RyaW5nOwogc3RydWN0IEdy
ZWdvcmlhbkRhdGVUaW1lOwogCi12b2lkIGluaXREYXRlTWF0aCgpOwordm9pZCBpbml0aWFsaXpl
RGF0ZXMoKTsKIHZvaWQgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKGRvdWJsZSwgYm9vbCBvdXRwdXRJ
c1VUQywgR3JlZ29yaWFuRGF0ZVRpbWUmKTsKIGRvdWJsZSBncmVnb3JpYW5EYXRlVGltZVRvTVMo
Y29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmLCBkb3VibGUsIGJvb2wgaW5wdXRJc1VUQyk7CiBkb3Vi
bGUgZ2V0VVRDT2Zmc2V0KCk7CkBAIC02MCwxMiArNjAsOCBAQCBkb3VibGUgZ2V0Q3VycmVudFVU
Q1RpbWVXaXRoTWljcm9zZWNvbmRzCiB2b2lkIGdldExvY2FsVGltZShjb25zdCB0aW1lX3QqLCB0
bSopOwogCiAvLyBOb3QgcmVhbGx5IG1hdGggcmVsYXRlZCwgYnV0IHRoaXMgaXMgY3VycmVudGx5
IHRoZSBvbmx5IHNoYXJlZCBwbGFjZSB0byBwdXQgdGhlc2UuICAKLWRvdWJsZSBwYXJzZURhdGUo
Y29uc3QgVVN0cmluZyYpOworZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJh
Y3RlcnMoY29uc3QgY2hhciopOwogZG91YmxlIHRpbWVDbGlwKGRvdWJsZSk7Ci1VU3RyaW5nIGZv
cm1hdERhdGUoY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmKTsKLVVTdHJpbmcgZm9ybWF0RGF0ZVVU
Q1ZhcmlhbnQoY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmKTsKLVVTdHJpbmcgZm9ybWF0VGltZShj
b25zdCBHcmVnb3JpYW5EYXRlVGltZSYsIGJvb2wgaW5wdXRJc1VUQyk7Ci0KIAogY29uc3QgY2hh
ciAqIGNvbnN0IHdlZWtkYXlOYW1lWzddID0geyAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1Iiwg
IkZyaSIsICJTYXQiLCAiU3VuIiB9OwogY29uc3QgY2hhciAqIGNvbnN0IG1vbnRoTmFtZVsxMl0g
PSB7ICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVn
IiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIgfTsKQEAgLTE4Niw2ICsxODIsNiBAQCBzdGF0
aWMgaW5saW5lIGludCBnbXRvZmZzZXQoY29uc3QgR3JlZ29yCiAgICAgcmV0dXJuIHQudXRjT2Zm
c2V0OwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK30gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5k
aWYgLy8gRGF0ZU1hdGhfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogSmF2YVNjcmlwdENvcmUvd3Rm
L0RhdGVNYXRoLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwoKSW5kZXg6IFdlYkNv
cmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA0
NDUwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMDktMDYtMDggIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYyMzgKKyAgICAgICAgQWRkIHBhcnNl
RGF0ZSBoZWxwZXIgdG8gSFRUUFBhcnNlcnMsIHdoaWNoIHVzZXMgV1RGOjpwYXJzZURhdGVGcm9t
TnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMv
cnVudGltZS9EYXRlTWF0aC5oOiBSZW1vdmVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJz
L3d0Zi9EYXRlTWF0aC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvRGF0ZU1hdGguaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRGF0ZSk6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRGF0ZVZh
bHVlSW5IZWFkZXIpOiBDaGFuZ2VkIHRvIHVzZSB0aGUgbmV3IGhlbHBlci4KKwogMjAwOS0wNi0w
OCAgQWRhbSBMYW5nbGV5ICA8YWdsQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTaWVkZWwuCkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRGF0
ZU1hdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUv
RGF0ZU1hdGguaAkocmV2aXNpb24gNDQ1MDEpCisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3J1bnRpbWUvRGF0ZU1hdGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICswLDAgQEAKLSNpZm5k
ZWYgV2ViQ29yZV9GV0RfRGF0ZU1hdGhfaAotI2RlZmluZSBXZWJDb3JlX0ZXRF9EYXRlTWF0aF9o
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRGF0ZU1hdGguaD4KLSNlbmRpZgpJbmRleDogV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvRGF0ZU1hdGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9EYXRlTWF0aC5oCShyZXZpc2lvbiA0NDUwMSkJKGZy
b20gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0RhdGVNYXRoLmg6NDQ1MDEpCisr
KyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9EYXRlTWF0aC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9EYXRlTWF0aF9oCisjZGVmaW5l
IFdlYkNvcmVfRldEX0RhdGVNYXRoX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9EYXRlTWF0
aC5oPgorI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9EYXRlTWF0aC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptZXJnZWluZm8KCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAJKHJldmlzaW9uIDQ0NTAx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJI
VFRQUGFyc2Vycy5oIgogCisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
VEY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTAzLDYgKzEwNywxMSBAQCBib29sIHBh
cnNlSFRUUFJlZnJlc2goY29uc3QgU3RyaW5nJiByZWZyCiAgICAgfQogfQogCitkb3VibGUgcGFy
c2VEYXRlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgcmV0dXJuIHBhcnNlRGF0ZUZyb21O
dWxsVGVybWluYXRlZENoYXJhY3RlcnModmFsdWUudXRmOCgpLmRhdGEoKSk7Cit9CisKIFN0cmlu
ZyBmaWxlbmFtZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiB7CiAgICAgVmVjdG9yPFN0cmluZz4ga2V5VmFsdWVQYWlyczsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCShyZXZpc2lvbiA0NDUwMSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTdHJpbmc7CiAKICAgICBib29sIHBh
cnNlSFRUUFJlZnJlc2goY29uc3QgU3RyaW5nJiByZWZyZXNoLCBib29sIGZyb21IdHRwRXF1aXZN
ZXRhLCBkb3VibGUmIGRlbGF5LCBTdHJpbmcmIHVybCk7CisgICAgZG91YmxlIHBhcnNlRGF0ZShj
b25zdCBTdHJpbmcmKTsKICAgICBTdHJpbmcgZmlsZW5hbWVGcm9tSFRUUENvbnRlbnREaXNwb3Np
dGlvbihjb25zdCBTdHJpbmcmKTsgCiAgICAgU3RyaW5nIGV4dHJhY3RNSU1FVHlwZUZyb21NZWRp
YVR5cGUoY29uc3QgU3RyaW5nJik7CiAgICAgU3RyaW5nIGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlh
VHlwZShjb25zdCBTdHJpbmcmKTsgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXNwb25zZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAJKHJldmlzaW9uIDQ0NTAxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlc291
cmNlUmVzcG9uc2VCYXNlLmgiCiAKKyNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlIDxydW50aW1lL0RhdGVNYXRoLmg+CiAjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0zMzEsNyArMzMxLDcgQEAgc3RhdGljIGRv
dWJsZSBwYXJzZURhdGVWYWx1ZUluSGVhZGVyKGNvbgogICAgIC8vIFN1biwgMDYgTm92IDE5OTQg
MDg6NDk6MzcgR01UICA7IFJGQyA4MjIsIHVwZGF0ZWQgYnkgUkZDIDExMjMKICAgICAvLyBTdW5k
YXksIDA2LU5vdi05NCAwODo0OTozNyBHTVQgOyBSRkMgODUwLCBvYnNvbGV0ZWQgYnkgUkZDIDEw
MzYKICAgICAvLyBTdW4gTm92ICA2IDA4OjQ5OjM3IDE5OTQgICAgICAgOyBBTlNJIEMncyBhc2N0
aW1lKCkgZm9ybWF0Ci0gICAgZG91YmxlIGRhdGVJbk1pbGxpc2Vjb25kcyA9IEpTQzo6cGFyc2VE
YXRlKGhlYWRlclZhbHVlKTsKKyAgICBkb3VibGUgZGF0ZUluTWlsbGlzZWNvbmRzID0gcGFyc2VE
YXRlKGhlYWRlclZhbHVlKTsKICAgICBpZiAoIWlzZmluaXRlKGRhdGVJbk1pbGxpc2Vjb25kcykp
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
OwogICAgIHJldHVybiBkYXRlSW5NaWxsaXNlY29uZHMgLyAxMDAwOwo=
</data>
<flag name="review"
          id="15817"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>