<?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>71747</bug_id>
          
          <creation_ts>2011-11-07 16:25:31 -0800</creation_ts>
          <short_desc>DateMath.cpp should not depend on JavaScriptCore</short_desc>
          <delta_ts>2011-11-14 16:05:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Rowe (bdash)">mrowe</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>mrowe</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>497577</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-11-07 16:25:31 -0800</bug_when>
    <thetext>While working on making WTF build outside of JavaScriptCore I noticed that wtf/DateMath.cpp includes several headers from JavaScriptCore, and makes use of some JavaScriptCore types such as ExecState, JSGlobalData and DSTOffsetCache. This layering violation needs to be addressed before WTF can be correctly split out of JavaScriptCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497593</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-11-07 16:44:09 -0800</bug_when>
    <thetext>It looks like it may be possible to simply move the USE(JSC) parts of DateMath.h / DateMath.cpp in to a more appropriate file inside JavaScriptCore itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502218</commentid>
    <comment_count>2</comment_count>
      <attachid>115014</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-14 12:50:33 -0800</bug_when>
    <thetext>Created attachment 115014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502221</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-14 12:53:41 -0800</bug_when>
    <thetext>Attachment 115014 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1

Source/JavaScriptCore/runtime/JSDateMath.cpp:76:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSDateMath.cpp:147:  More than one command on the same line in if  [whitespace/parens] [4]
Source/JavaScriptCore/runtime/JSDateMath.cpp:154:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/runtime/JSDateMath.cpp:244:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 4 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502364</commentid>
    <comment_count>4</comment_count>
      <attachid>115014</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-14 15:12:31 -0800</bug_when>
    <thetext>Comment on attachment 115014
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/JSDateMath.cpp:76
&gt;&gt;  #include &quot;ASCIICType.h&quot;
&gt; 
&gt; Alphabetical sorting problem.  [build/include_order] [4]

It’s true, ASCIICType.h should come before Assertions.h.

&gt; Source/JavaScriptCore/runtime/JSDateMath.cpp:82
&gt;  #include &quot;Assertions.h&quot;
&gt;  #include &quot;ASCIICType.h&quot;
&gt;  #include &quot;CurrentTime.h&quot;
&gt; -#if USE(JSC)
&gt;  #include &quot;JSObject.h&quot;
&gt; -#endif
&gt;  #include &quot;MathExtras.h&quot;
&gt; -#if USE(JSC)
&gt;  #include &quot;ScopeChain.h&quot;
&gt; -#endif
&gt;  #include &quot;StdLibExtras.h&quot;
&gt;  #include &quot;StringExtras.h&quot;

Is there a chance we could cut these includes down a bit more? Guess someone can look into that later.

&gt; Source/JavaScriptCore/wtf/DateMath.h:108
&gt; +using WTF::isLeapYear;
&gt;  using WTF::dateToDaysFrom1970;

Entire &quot;using&quot; list should be sorted alphabetically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502427</commentid>
    <comment_count>5</comment_count>
      <attachid>115014</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-14 16:05:10 -0800</bug_when>
    <thetext>Comment on attachment 115014
Patch

Clearing flags on attachment: 115014

Committed r100205: &lt;http://trac.webkit.org/changeset/100205&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502428</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-14 16:05:16 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115014</attachid>
            <date>2011-11-14 12:50:33 -0800</date>
            <delta_ts>2011-11-14 16:05:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71747-20111114125032.patch</filename>
            <type>text/plain</type>
            <size>115147</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwMTc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDExLTExLTE0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
RGF0ZU1hdGguY3BwIHNob3VsZCBub3QgZGVwZW5kIG9uIEphdmFTY3JpcHRDb3JlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTc0NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMg
dGhlIEpTQy1zcGVjaWZpYyBwYXJ0cyBvZiBEYXRlTWF0aCBpbnRvIEpTRGF0ZU1hdGggaW4KKyAg
ICAgICAgSmF2YVNjcmlwdENvcmUuICBUaGVyZSBzaG91bGRuJ3QgYmUgYW55IGJlaGF2aW9yIGNo
YW5nZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxl
Lmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgICogcnVudGltZS9EYXRlQ29udmVyc2lvbi5jcHA6CisgICAgICAgICogcnVudGlt
ZS9EYXRlSW5zdGFuY2UuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUluc3RhbmNlQ2FjaGUu
aDoKKyAgICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwOgorICAgICAgICAqIHJ1bnRp
bWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHA6CisgICAgICAgICogcnVudGltZS9KU0RhdGVNYXRo
LmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5jcHAu
CisgICAgICAgIChKU0M6OnRpbWVUb01TKToKKyAgICAgICAgKEpTQzo6bXNUb1NlY29uZHMpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNEYXRlTWF0aC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL0RhdGVNYXRoLmguCisgICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDoKKyAg
ICAgICAgKFdURjo6aXNMZWFwWWVhcik6CisgICAgICAgIChXVEY6Om1zVG9EYXlzKToKKyAgICAg
ICAgKFdURjo6bXNUb01pbnV0ZXMpOgorICAgICAgICAoV1RGOjptc1RvSG91cnMpOgorICAgICAg
ICAoV1RGOjpwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKToKKyAgICAgICAg
KFdURjo6bWFrZVJGQzI4MjJEYXRlU3RyaW5nKToKKyAgICAgICAgKiB3dGYvRGF0ZU1hdGguaDoK
KwogMjAxMS0xMS0xNCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjgw
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDAxNzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTE0Niw2ICsxNDYsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRp
bWUvSlNBcnJheS5jcHAKICAgICBydW50aW1lL0pTQnl0ZUFycmF5LmNwcAogICAgIHJ1bnRpbWUv
SlNDZWxsLmNwcAorICAgIHJ1bnRpbWUvSlNEYXRlTWF0aC5jcHAKICAgICBydW50aW1lL0pTRnVu
Y3Rpb24uY3BwCiAgICAgcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCiAgICAgcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkocmV2aXNpb24gMTAwMTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTM4MCw2ICszODAsOCBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0J5
dGVBcnJheS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGF0ZU1hdGguaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNw
cCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkocmV2
aXNpb24gMTAwMTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5
cGkJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDcgQEAKICAgICAgICAgICAgICdydW50aW1l
L0pTQXJyYXkuaCcsCiAgICAgICAgICAgICAncnVudGltZS9KU0J5dGVBcnJheS5oJywKICAgICAg
ICAgICAgICdydW50aW1lL0pTQ2VsbC5oJywKKyAgICAgICAgICAgICdydW50aW1lL0pTRGF0ZU1h
dGguaCcsCiAgICAgICAgICAgICAncnVudGltZS9KU0Z1bmN0aW9uLmgnLAogICAgICAgICAgICAg
J3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmgnLApAQCAtNDc3LDYgKzQ3OCw3IEBACiAgICAgICAgICAgICAncnVudGltZS9KU0Fy
cmF5LmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9KU0J5dGVBcnJheS5jcHAnLAogICAgICAg
ICAgICAgJ3J1bnRpbWUvSlNDZWxsLmNwcCcsCisgICAgICAgICAgICAncnVudGltZS9KU0RhdGVN
YXRoLmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9KU0Z1bmN0aW9uLmNwcCcsCiAgICAgICAg
ICAgICAncnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwJywKICAgICAgICAgICAgICdydW50aW1l
L0pTR2xvYmFsRGF0YS5jcHAnLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlz
aW9uIDEwMDE3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjQsNiArMTY0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9KU0Fy
cmF5LmNwcCBcCiAgICAgcnVudGltZS9KU0J5dGVBcnJheS5jcHAgXAogICAgIHJ1bnRpbWUvSlND
ZWxsLmNwcCBcCisgICAgcnVudGltZS9KU0RhdGVNYXRoLmNwcCBcCiAgICAgcnVudGltZS9KU0Z1
bmN0aW9uLmNwcCBcCiAgICAgcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwIFwKICAgICBydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEwMDE3MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03OTgsNiArNzk4LDE0
IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XHJ1bnRpbWVcSlNEYXRlTWF0aC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNEYXRlTWF0aC5oIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEpTRnVuY3Rp
b24uY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxMDAxNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDM4LDYg
KzQzOCw4IEBACiAJCTk2OUEwNzlCMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzk1MEVEMUQzQUUw
MEYxRjY4MSAvKiBPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk5NkRENzM3OTBGOURBMzEwMDAyN0ZCQ0MgLyogVk1UYWdzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NkRENzM3ODBGOURBMzEw
MDAyN0ZCQ0MgLyogVk1UYWdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTcxRURFQTYxMTY5RTBEMzAwNUU0MjYyIC8qIFRlcm1pbmF0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3RjY5MDNBMTE2
OURGN0YwMEE2QkI0NiAvKiBUZXJtaW5hdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTc4ODAxNDAxNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0
ZU1hdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTc4OEZDMjIxNDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovOyB9OworCQk5Nzg4
MDE0MTE0NzFBRDkyMDA0MUIwMTYgLyogSlNEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc4OEZDMjMxNDcxQUQwQzAwNjhDRTJEIC8qIEpT
RGF0ZU1hdGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk5Nzk0MUE1NzEzMDI5QUFCMDA0QTM0NDcgLyogT1NSYW5kb21Tb3VyY2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc5NDFBM0YxMzAyOTlE
QjAwNEEzNDQ3IC8qIE9TUmFuZG9tU291cmNlLmNwcCAqLzsgfTsKIAkJOTc5NDFBNUExMzAyOUFD
QzAwNEEzNDQ3IC8qIE9TUmFuZG9tU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5Nzk0MUE0MDEzMDI5OURCMDA0QTM0NDcgLyogT1NSYW5kb21T
b3VyY2UuaCAqLzsgfTsKIAkJOTc5NDFBN0UxMzAyQTA5ODAwNEEzNDQ3IC8qIENyeXB0b2dyYXBo
aWNhbGx5UmFuZG9tTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3OTQxQTdDMTMwMkEwOTgwMDRBMzQ0NyAvKiBDcnlwdG9ncmFwaGljYWxs
eVJhbmRvbU51bWJlci5jcHAgKi87IH07CkBAIC0xMjU5LDYgKzEyNjEsOCBAQAogCQk5NjlBMDc5
NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE9wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NjlBMDkyMjBF
RDFFMDlDMDBGMUY2ODEgLyogQ29tcGxldGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb21wbGV0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTZERDczNzgwRjlEQTMxMDAwMjdGQkNDIC8qIFZNVGFncy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBWTVRhZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTc4OEZDMjIxNDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRlTWF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTk3ODhGQzIzMTQ3MUFEMEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0ZU1hdGguaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTc5NDFBM0YxMzAyOTlEQjAwNEEzNDQ3IC8qIE9TUmFuZG9tU291
cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TUmFuZG9tU291
cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc5NDFBNDAxMzAyOTlEQjAw
NEEzNDQ3IC8qIE9TUmFuZG9tU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE9TUmFuZG9tU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3OTQx
QTdDMTMwMkEwOTgwMDRBMzQ0NyAvKiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTYwLDYgKzIx
NjQsOCBAQAogCQkJCUE3OTFFRjI2MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5dGVBcnJheS5oICov
LAogCQkJCUJDN0Y4RkJBMEUxOUQxRUYwMDg2MzJDMCAvKiBKU0NlbGwuY3BwICovLAogCQkJCUJD
MTE2N0Q4MEUxOUJDQzkwMDgwNjZERCAvKiBKU0NlbGwuaCAqLywKKwkJCQk5Nzg4RkMyMjE0NzFB
RDBDMDA2OENFMkQgLyogSlNEYXRlTWF0aC5jcHAgKi8sCisJCQkJOTc4OEZDMjMxNDcxQUQwQzAw
NjhDRTJEIC8qIEpTRGF0ZU1hdGguaCAqLywKIAkJCQlGNjkyQTg1RTAyNTU1OTdEMDFGRjYwRjcg
LyogSlNGdW5jdGlvbi5jcHAgKi8sCiAJCQkJRjY5MkE4NUYwMjU1NTk3RDAxRkY2MEY3IC8qIEpT
RnVuY3Rpb24uaCAqLywKIAkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogSlNHbG9iYWxE
YXRhLmNwcCAqLywKQEAgLTI5NTMsNiArMjk1OSw3IEBACiAJCQkJMEZDMDk3QTIxNDZCMjhDQzAw
Q0YyNDQyIC8qIERGR1RodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MzE3MzgxNDZCQUM2
OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1RjA4
Q0YxNDZDNzYzMzAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTk3ODgwMTQxMTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTM0OTAsNiArMzQ5Nyw3IEBACiAJCQkJMEZDMDk3OTIxNDZBNkY3MzAwQ0Yy
NDQyIC8qIERGR09TUkV4aXRDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTc5
RTE0NkIyNzIxMDBDRjI0NDIgLyogREZHQ29ycmVjdGFibGVKdW1wUG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk5Nzg4MDE0MDE0NzFBRDkyMDA0MUIwMTYgLyogSlNEYXRlTWF0aC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTAwMTcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkRhdGVDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAi
RGF0ZUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpT
RGF0ZU1hdGguaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgpAQCAtMzIsNyArMzMsNiBAQAogI2luY2x1
ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx0aW1l
Lmg+Ci0jaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KIAogI2lmIE9TKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRlQ29udmVyc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnZlcnNpb24uY3BwCShyZXZpc2lvbiAxMDAx
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29udmVyc2lvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDEwICs0NCwxMCBAQAogI2luY2x1ZGUgIkRhdGVDb252ZXJz
aW9uLmgiCiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKU0RhdGVNYXRoLmgi
CiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCiAjaW5jbHVk
ZSAiVVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9T
dHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcAkocmV2aXNp
b24gMTAwMTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTAgKzIyLDEwIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRGF0ZUluc3RhbmNlLmgiCiAKKyNpbmNsdWRlICJKU0RhdGVNYXRoLmgi
CiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKIAogI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNs
dWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgV1RGOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZUluc3RhbmNlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlSW5zdGFuY2VDYWNoZS5oCShyZXZpc2lvbiAxMDAxNzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2VDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIERhdGVJbnN0YW5jZUNhY2hlX2gKICNkZWZpbmUgRGF0
ZUluc3RhbmNlQ2FjaGVfaAogCi0jaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CisjaW5jbHVkZSAi
SlNEYXRlTWF0aC5oIgogI2luY2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDEwMDE3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRGF0ZUNv
bnZlcnNpb24uaCIKICNpbmNsdWRlICJEYXRlSW5zdGFuY2UuaCIKICNpbmNsdWRlICJFcnJvci5o
IgorI2luY2x1ZGUgIkpTRGF0ZU1hdGguaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgog
I2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdCdWlsZGVyLmgiCkBAIC00
Myw3ICs0NCw2IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gMTAw
MTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywxMSBAQAogI2luY2x1ZGUgIkhlYXAu
aCIKICNpbmNsdWRlICJIZXVyaXN0aWNzLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2lu
Y2x1ZGUgIkpTRGF0ZU1hdGguaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1
ZGUgIlVTdHJpbmcuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlICJkdG9h
LmgiCi0jaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgogI2luY2x1ZGUgPHd0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaD4KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAJKHJldmlzaW9uIDEwMDE3MikJ
KGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5jcHA6MTAwMTcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5
IFRvcmNoIE1vYmlsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwICZ5ZXQsIExMQy4gKG5h
dGVAYW5keWV0Lm5ldCkKKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11
bmljYXRvciBjbGllbnQgY29kZSwgcmVsZWFzZWQKKyAqIE1hcmNoIDMxLCAxOTk4LgorICoKKyAq
IFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogTmV0c2Nh
cGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRo
ZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4CisgKiB0aGUgSW5pdGlh
bCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisg
KiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVu
ZGVyIHRoZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZl
cnNpb24gMS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUg
Ik1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAs
IGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAi
R1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BM
IGFyZQorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2gg
dG8gYWxsb3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIg
dGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRo
ZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICog
ZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5v
dGljZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUg
R1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJv
dmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KKworICog
Q29weXJpZ2h0IDIwMDYtMjAwOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAg
ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQKKyAqICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRhdGVNYXRoLmgiCisKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgiCisjaW5jbHVk
ZSAiQVNDSUlDVHlwZS5oIgorI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisjaWYgVVNFKEpTQykK
KyNpbmNsdWRlICJKU09iamVjdC5oIgorI2VuZGlmCisjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgor
I2lmIFVTRShKU0MpCisjaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgorI2VuZGlmCisjaW5jbHVkZSAi
U3RkTGliRXh0cmFzLmgiCisjaW5jbHVkZSAiU3RyaW5nRXh0cmFzLmgiCisKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1
ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CisKKyNpZiBIQVZFKEVSUk5PX0gpCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNl
bmRpZgorCisjaWYgT1MoV0lOQ0UpCitleHRlcm4gIkMiIHNpemVfdCBzdHJmdGltZShjaGFyICog
Y29uc3QgcywgY29uc3Qgc2l6ZV90IG1heHNpemUsIGNvbnN0IGNoYXIgKiBjb25zdCBmb3JtYXQs
IGNvbnN0IHN0cnVjdCB0bSAqIGNvbnN0IHQpOworZXh0ZXJuICJDIiBzdHJ1Y3QgdG0gKiBsb2Nh
bHRpbWUoY29uc3QgdGltZV90ICp0aW1lcik7CisjZW5kaWYKKworI2lmIEhBVkUoU1lTX1RJTUVf
SCkKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisKKyNpZiBIQVZFKFNZU19USU1FQl9I
KQorI2luY2x1ZGUgPHN5cy90aW1lYi5oPgorI2VuZGlmCisKKyNpZiBVU0UoSlNDKQorI2luY2x1
ZGUgIkNhbGxGcmFtZS5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVz
cGFjZSBXVEYgeworCisvKiBDb25zdGFudHMgKi8KKworc3RhdGljIGNvbnN0IGRvdWJsZSBtaW51
dGVzUGVyRGF5ID0gMjQuMCAqIDYwLjA7CitzdGF0aWMgY29uc3QgZG91YmxlIHNlY29uZHNQZXJE
YXkgPSAyNC4wICogNjAuMCAqIDYwLjA7CitzdGF0aWMgY29uc3QgZG91YmxlIHNlY29uZHNQZXJZ
ZWFyID0gMjQuMCAqIDYwLjAgKiA2MC4wICogMzY1LjA7CisKK3N0YXRpYyBjb25zdCBkb3VibGUg
dXNlY1BlclNlYyA9IDEwMDAwMDAuMDsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhVbml4VGlt
ZSA9IDIxNDU4NTkyMDAuMDsgLy8gMTIvMzEvMjAzNworLy8gRUNNQVNjcmlwdCBhc2tzIG5vdCB0
byBzdXBwb3J0IGZvciBhIGRhdGUgb2Ygd2hpY2ggdG90YWwKKy8vIG1pbGxpc2Vjb25kIHZhbHVl
IGlzIGxhcmdlciB0aGFuIHRoZSBmb2xsb3dpbmcgdmFsdWUuCisvLyBTZWUgMTUuOS4xLjE0IG9m
IEVDTUEtMjYyIDV0aCBlZGl0aW9uLgorc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhFQ01BU2NyaXB0
VGltZSA9IDguNjRFMTU7CisKKy8vIERheSBvZiB5ZWFyIGZvciB0aGUgZmlyc3QgZGF5IG9mIGVh
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
Cit7CisgICAgcmV0dXJuIGZsb29yKG1zIC8gbXNQZXJEYXkpOworfQorCitzdGF0aWMgU3RyaW5n
IHR3b0RpZ2l0U3RyaW5nRnJvbU51bWJlcihpbnQgbnVtYmVyKQoreworICAgIEFTU0VSVChudW1i
ZXIgPj0gMCAmJiBudW1iZXIgPCAxMDApOworICAgIGlmIChudW1iZXIgPiA5KQorICAgICAgICBy
ZXR1cm4gU3RyaW5nOjpudW1iZXIobnVtYmVyKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiMCIs
IFN0cmluZzo6bnVtYmVyKG51bWJlcikpOworfQorCitpbnQgbXNUb1llYXIoZG91YmxlIG1zKQor
eworICAgIGludCBhcHByb3hZZWFyID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcihtcyAvIChtc1Bl
ckRheSAqIDM2NS4yNDI1KSkgKyAxOTcwKTsKKyAgICBkb3VibGUgbXNGcm9tQXBwcm94WWVhclRv
MTk3MCA9IG1zUGVyRGF5ICogZGF5c0Zyb20xOTcwVG9ZZWFyKGFwcHJveFllYXIpOworICAgIGlm
IChtc0Zyb21BcHByb3hZZWFyVG8xOTcwID4gbXMpCisgICAgICAgIHJldHVybiBhcHByb3hZZWFy
IC0gMTsKKyAgICBpZiAobXNGcm9tQXBwcm94WWVhclRvMTk3MCArIG1zUGVyRGF5ICogZGF5c0lu
WWVhcihhcHByb3hZZWFyKSA8PSBtcykKKyAgICAgICAgcmV0dXJuIGFwcHJveFllYXIgKyAxOwor
ICAgIHJldHVybiBhcHByb3hZZWFyOworfQorCitpbnQgZGF5SW5ZZWFyKGRvdWJsZSBtcywgaW50
IHllYXIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obXNUb0RheXMobXMpIC0gZGF5
c0Zyb20xOTcwVG9ZZWFyKHllYXIpKTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgbXNUb01p
bGxpc2Vjb25kcyhkb3VibGUgbXMpCit7CisgICAgZG91YmxlIHJlc3VsdCA9IGZtb2QobXMsIG1z
UGVyRGF5KTsKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgcmVzdWx0ICs9IG1zUGVyRGF5
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIDA6IFN1bmRheSwgMTogTW9uZGF5LCBldGMu
CitzdGF0aWMgaW5saW5lIGludCBtc1RvV2Vla0RheShkb3VibGUgbXMpCit7CisgICAgaW50IHdk
ID0gKHN0YXRpY19jYXN0PGludD4obXNUb0RheXMobXMpKSArIDQpICUgNzsKKyAgICBpZiAod2Qg
PCAwKQorICAgICAgICB3ZCArPSA3OworICAgIHJldHVybiB3ZDsKK30KKworc3RhdGljIGlubGlu
ZSBpbnQgbXNUb1NlY29uZHMoZG91YmxlIG1zKQoreworICAgIGRvdWJsZSByZXN1bHQgPSBmbW9k
KGZsb29yKG1zIC8gbXNQZXJTZWNvbmQpLCBzZWNvbmRzUGVyTWludXRlKTsKKyAgICBpZiAocmVz
dWx0IDwgMCkKKyAgICAgICAgcmVzdWx0ICs9IHNlY29uZHNQZXJNaW51dGU7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4ocmVzdWx0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbXNUb01p
bnV0ZXMoZG91YmxlIG1zKQoreworICAgIGRvdWJsZSByZXN1bHQgPSBmbW9kKGZsb29yKG1zIC8g
bXNQZXJNaW51dGUpLCBtaW51dGVzUGVySG91cik7CisgICAgaWYgKHJlc3VsdCA8IDApCisgICAg
ICAgIHJlc3VsdCArPSBtaW51dGVzUGVySG91cjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PihyZXN1bHQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtc1RvSG91cnMoZG91YmxlIG1zKQor
eworICAgIGRvdWJsZSByZXN1bHQgPSBmbW9kKGZsb29yKG1zL21zUGVySG91ciksIGhvdXJzUGVy
RGF5KTsKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgcmVzdWx0ICs9IGhvdXJzUGVyRGF5
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdCk7Cit9CisKK2ludCBtb250aEZy
b21EYXlJblllYXIoaW50IGRheUluWWVhciwgYm9vbCBsZWFwWWVhcikKK3sKKyAgICBjb25zdCBp
bnQgZCA9IGRheUluWWVhcjsKKyAgICBpbnQgc3RlcDsKKworICAgIGlmIChkIDwgKHN0ZXAgPSAz
MSkpCisgICAgICAgIHJldHVybiAwOworICAgIHN0ZXAgKz0gKGxlYXBZZWFyID8gMjkgOiAyOCk7
CisgICAgaWYgKGQgPCBzdGVwKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoZCA8IChzdGVw
ICs9IDMxKSkKKyAgICAgICAgcmV0dXJuIDI7CisgICAgaWYgKGQgPCAoc3RlcCArPSAzMCkpCisg
ICAgICAgIHJldHVybiAzOworICAgIGlmIChkIDwgKHN0ZXAgKz0gMzEpKQorICAgICAgICByZXR1
cm4gNDsKKyAgICBpZiAoZCA8IChzdGVwICs9IDMwKSkKKyAgICAgICAgcmV0dXJuIDU7CisgICAg
aWYgKGQgPCAoc3RlcCArPSAzMSkpCisgICAgICAgIHJldHVybiA2OworICAgIGlmIChkIDwgKHN0
ZXAgKz0gMzEpKQorICAgICAgICByZXR1cm4gNzsKKyAgICBpZiAoZCA8IChzdGVwICs9IDMwKSkK
KyAgICAgICAgcmV0dXJuIDg7CisgICAgaWYgKGQgPCAoc3RlcCArPSAzMSkpCisgICAgICAgIHJl
dHVybiA5OworICAgIGlmIChkIDwgKHN0ZXAgKz0gMzApKQorICAgICAgICByZXR1cm4gMTA7Cisg
ICAgcmV0dXJuIDExOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tNb250aChpbnQgZGF5
SW5ZZWFyLCBpbnQmIHN0YXJ0RGF5T2ZUaGlzTW9udGgsIGludCYgc3RhcnREYXlPZk5leHRNb250
aCwgaW50IGRheXNJblRoaXNNb250aCkKK3sKKyAgICBzdGFydERheU9mVGhpc01vbnRoID0gc3Rh
cnREYXlPZk5leHRNb250aDsKKyAgICBzdGFydERheU9mTmV4dE1vbnRoICs9IGRheXNJblRoaXNN
b250aDsKKyAgICByZXR1cm4gKGRheUluWWVhciA8PSBzdGFydERheU9mTmV4dE1vbnRoKTsKK30K
KworaW50IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKGludCBkYXlJblllYXIsIGJvb2wgbGVhcFll
YXIpCit7CisgICAgY29uc3QgaW50IGQgPSBkYXlJblllYXI7CisgICAgaW50IHN0ZXA7CisgICAg
aW50IG5leHQgPSAzMDsKKworICAgIGlmIChkIDw9IG5leHQpCisgICAgICAgIHJldHVybiBkICsg
MTsKKyAgICBjb25zdCBpbnQgZGF5c0luRmViID0gKGxlYXBZZWFyID8gMjkgOiAyOCk7CisgICAg
aWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgZGF5c0luRmViKSkKKyAgICAgICAgcmV0dXJu
IGQgLSBzdGVwOworICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMxKSkKKyAgICAg
ICAgcmV0dXJuIGQgLSBzdGVwOworICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMw
KSkKKyAgICAgICAgcmV0dXJuIGQgLSBzdGVwOworICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAs
IG5leHQsIDMxKSkKKyAgICAgICAgcmV0dXJuIGQgLSBzdGVwOworICAgIGlmIChjaGVja01vbnRo
KGQsIHN0ZXAsIG5leHQsIDMwKSkKKyAgICAgICAgcmV0dXJuIGQgLSBzdGVwOworICAgIGlmIChj
aGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMxKSkKKyAgICAgICAgcmV0dXJuIGQgLSBzdGVwOwor
ICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMxKSkKKyAgICAgICAgcmV0dXJuIGQg
LSBzdGVwOworICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMwKSkKKyAgICAgICAg
cmV0dXJuIGQgLSBzdGVwOworICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMxKSkK
KyAgICAgICAgcmV0dXJuIGQgLSBzdGVwOworICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5l
eHQsIDMwKSkKKyAgICAgICAgcmV0dXJuIGQgLSBzdGVwOworICAgIHN0ZXAgPSBuZXh0OworICAg
IHJldHVybiBkIC0gc3RlcDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbW9udGhUb0RheUluWWVh
cihpbnQgbW9udGgsIGJvb2wgaXNMZWFwWWVhcikKK3sKKyAgICByZXR1cm4gZmlyc3REYXlPZk1v
bnRoW2lzTGVhcFllYXJdW21vbnRoXTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgdGltZVRv
TVMoZG91YmxlIGhvdXIsIGRvdWJsZSBtaW4sIGRvdWJsZSBzZWMsIGRvdWJsZSBtcykKK3sKKyAg
ICByZXR1cm4gKCgoaG91ciAqIG1pbnV0ZXNQZXJIb3VyICsgbWluKSAqIHNlY29uZHNQZXJNaW51
dGUgKyBzZWMpICogbXNQZXJTZWNvbmQgKyBtcyk7Cit9CisKK2RvdWJsZSBkYXRlVG9EYXlzRnJv
bTE5NzAoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSkKK3sKKyAgICB5ZWFyICs9IG1vbnRo
IC8gMTI7CisKKyAgICBtb250aCAlPSAxMjsKKyAgICBpZiAobW9udGggPCAwKSB7CisgICAgICAg
IG1vbnRoICs9IDEyOworICAgICAgICAtLXllYXI7CisgICAgfQorCisgICAgZG91YmxlIHllYXJk
YXkgPSBmbG9vcihkYXlzRnJvbTE5NzBUb1llYXIoeWVhcikpOworICAgIEFTU0VSVCgoeWVhciA+
PSAxOTcwICYmIHllYXJkYXkgPj0gMCkgfHwgKHllYXIgPCAxOTcwICYmIHllYXJkYXkgPCAwKSk7
CisgICAgaW50IG1vbnRoZGF5ID0gbW9udGhUb0RheUluWWVhcihtb250aCwgaXNMZWFwWWVhcih5
ZWFyKSk7CisKKyAgICByZXR1cm4geWVhcmRheSArIG1vbnRoZGF5ICsgZGF5IC0gMTsKK30KKwor
Ly8gVGhlcmUgaXMgYSBoYXJkIGxpbWl0IGF0IDIwMzggdGhhdCB3ZSBjdXJyZW50bHkgZG8gbm90
IGhhdmUgYSB3b3JrYXJvdW5kCisvLyBmb3IgKHJkYXI6Ly9wcm9ibGVtLzUwNTI5NzUpLgorc3Rh
dGljIGlubGluZSBpbnQgbWF4aW11bVllYXJGb3JEU1QoKQoreworICAgIHJldHVybiAyMDM3Owor
fQorCitzdGF0aWMgaW5saW5lIGludCBtaW5pbXVtWWVhckZvckRTVCgpCit7CisgICAgLy8gQmVj
YXVzZSBvZiB0aGUgMjAzOCBpc3N1ZSAoc2VlIG1heGltdW1ZZWFyRm9yRFNUKSBpZiB0aGUgY3Vy
cmVudCB5ZWFyIGlzCisgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSBtYXggeWVhciBtaW51cyAyNyAo
MjAxMCksIHdlIHdhbnQgdG8gdXNlIHRoZSBtYXggeWVhcgorICAgIC8vIG1pbnVzIDI3IGluc3Rl
YWQsIHRvIGVuc3VyZSB0aGVyZSBpcyBhIHJhbmdlIG9mIDI4IHllYXJzIHRoYXQgYWxsIHllYXJz
CisgICAgLy8gY2FuIG1hcCB0by4KKyAgICByZXR1cm4gc3RkOjptaW4obXNUb1llYXIoanNDdXJy
ZW50VGltZSgpKSwgbWF4aW11bVllYXJGb3JEU1QoKSAtIDI3KSA7Cit9CisKKy8qCisgKiBGaW5k
IGFuIGVxdWl2YWxlbnQgeWVhciBmb3IgdGhlIG9uZSBnaXZlbiwgd2hlcmUgZXF1aXZhbGVuY2Ug
aXMgZGV0ZXJpbmVkIGJ5CisgKiB0aGUgdHdvIHllYXJzIGhhdmluZyB0aGUgc2FtZSBsZWFwbmVz
cyBhbmQgdGhlIGZpcnN0IGRheSBvZiB0aGUgeWVhciwgZmFsbGluZworICogb24gdGhlIHNhbWUg
ZGF5IG9mIHRoZSB3ZWVrLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHllYXIgYmV0
d2VlbiB0aGlzIGN1cnJlbnQgeWVhciBhbmQgMjAzNywgaG93ZXZlciB0aGlzCisgKiBmdW5jdGlv
biB3aWxsIHBvdGVudGlhbGx5IHJldHVybiBpbmNvcnJlY3QgcmVzdWx0cyBpZiB0aGUgY3VycmVu
dCB5ZWFyIGlzIGFmdGVyCisgKiAyMDEwLCAocmRhcjovL3Byb2JsZW0vNTA1Mjk3NSksIGlmIHRo
ZSB5ZWFyIHBhc3NlZCBpbiBpcyBiZWZvcmUgMTkwMCBvciBhZnRlcgorICogMjEwMCwgKHJkYXI6
Ly9wcm9ibGVtLzUwNTUwMzgpLgorICovCitpbnQgZXF1aXZhbGVudFllYXJGb3JEU1QoaW50IHll
YXIpCit7CisgICAgLy8gSXQgaXMgb2sgaWYgdGhlIGNhY2hlZCB5ZWFyIGlzIG5vdCB0aGUgY3Vy
cmVudCB5ZWFyIGFzIGxvbmcgYXMgdGhlIHJ1bGVzCisgICAgLy8gZm9yIERTVCBkaWQgbm90IGNo
YW5nZSBiZXR3ZWVuIHRoZSB0d28geWVhcnM7IGlmIHRoZXkgZGlkIHRoZSBhcHAgd291bGQgbmVl
ZAorICAgIC8vIHRvIGJlIHJlc3RhcnRlZC4KKyAgICBzdGF0aWMgaW50IG1pblllYXIgPSBtaW5p
bXVtWWVhckZvckRTVCgpOworICAgIGludCBtYXhZZWFyID0gbWF4aW11bVllYXJGb3JEU1QoKTsK
KworICAgIGludCBkaWZmZXJlbmNlOworICAgIGlmICh5ZWFyID4gbWF4WWVhcikKKyAgICAgICAg
ZGlmZmVyZW5jZSA9IG1pblllYXIgLSB5ZWFyOworICAgIGVsc2UgaWYgKHllYXIgPCBtaW5ZZWFy
KQorICAgICAgICBkaWZmZXJlbmNlID0gbWF4WWVhciAtIHllYXI7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4geWVhcjsKKworICAgIGludCBxdW90aWVudCA9IGRpZmZlcmVuY2UgLyAyODsKKyAg
ICBpbnQgcHJvZHVjdCA9IChxdW90aWVudCkgKiAyODsKKworICAgIHllYXIgKz0gcHJvZHVjdDsK
KyAgICBBU1NFUlQoKHllYXIgPj0gbWluWWVhciAmJiB5ZWFyIDw9IG1heFllYXIpIHx8IChwcm9k
dWN0IC0geWVhciA9PSBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCkpKSk7CisgICAgcmV0dXJuIHllYXI7Cit9CisKK2ludDMyX3QgY2FsY3Vs
YXRlVVRDT2Zmc2V0KCkKK3sKKyAgICB0aW1lX3QgbG9jYWxUaW1lID0gdGltZSgwKTsKKyAgICB0
bSBsb2NhbHQ7CisgICAgZ2V0TG9jYWxUaW1lKCZsb2NhbFRpbWUsICZsb2NhbHQpOworCisgICAg
Ly8gR2V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyB0aW1lIHpvbmUgYW5kIFVUQyBvbiB0
aGUgMXN0IG9mIEphbnVhcnkgb2YgdGhpcyB5ZWFyLgorICAgIGxvY2FsdC50bV9zZWMgPSAwOwor
ICAgIGxvY2FsdC50bV9taW4gPSAwOworICAgIGxvY2FsdC50bV9ob3VyID0gMDsKKyAgICBsb2Nh
bHQudG1fbWRheSA9IDE7CisgICAgbG9jYWx0LnRtX21vbiA9IDA7CisgICAgLy8gTm90IHNldHRp
bmcgbG9jYWx0LnRtX3llYXIhCisgICAgbG9jYWx0LnRtX3dkYXkgPSAwOworICAgIGxvY2FsdC50
bV95ZGF5ID0gMDsKKyAgICBsb2NhbHQudG1faXNkc3QgPSAwOworI2lmIEhBVkUoVE1fR01UT0ZG
KQorICAgIGxvY2FsdC50bV9nbXRvZmYgPSAwOworI2VuZGlmCisjaWYgSEFWRShUTV9aT05FKQor
ICAgIGxvY2FsdC50bV96b25lID0gMDsKKyNlbmRpZgorICAgIAorI2lmIEhBVkUoVElNRUdNKQor
ICAgIHRpbWVfdCB1dGNPZmZzZXQgPSB0aW1lZ20oJmxvY2FsdCkgLSBta3RpbWUoJmxvY2FsdCk7
CisjZWxzZQorICAgIC8vIFVzaW5nIGEgY2FubmVkIGRhdGUgb2YgMDEvMDEvMjAwOSBvbiBwbGF0
Zm9ybXMgd2l0aCB3ZWFrZXIgZGF0ZS1oYW5kbGluZyBmb28uCisgICAgbG9jYWx0LnRtX3llYXIg
PSAxMDk7CisgICAgdGltZV90IHV0Y09mZnNldCA9IDEyMzA3NjgwMDAgLSBta3RpbWUoJmxvY2Fs
dCk7CisjZW5kaWYKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih1dGNPZmZzZXQg
KiAxMDAwKTsKK30KKworLyoKKyAqIEdldCB0aGUgRFNUIG9mZnNldCBmb3IgdGhlIHRpbWUgcGFz
c2VkIGluLgorICovCitzdGF0aWMgZG91YmxlIGNhbGN1bGF0ZURTVE9mZnNldFNpbXBsZShkb3Vi
bGUgbG9jYWxUaW1lU2Vjb25kcywgZG91YmxlIHV0Y09mZnNldCkKK3sKKyAgICBpZiAobG9jYWxU
aW1lU2Vjb25kcyA+IG1heFVuaXhUaW1lKQorICAgICAgICBsb2NhbFRpbWVTZWNvbmRzID0gbWF4
VW5peFRpbWU7CisgICAgZWxzZSBpZiAobG9jYWxUaW1lU2Vjb25kcyA8IDApIC8vIEdvIGFoZWFk
IGEgZGF5IHRvIG1ha2UgbG9jYWx0aW1lIHdvcmsgKGRvZXMgbm90IHdvcmsgd2l0aCAwKQorICAg
ICAgICBsb2NhbFRpbWVTZWNvbmRzICs9IHNlY29uZHNQZXJEYXk7CisKKyAgICAvL2lucHV0IGlz
IFVUQyBzbyB3ZSBoYXZlIHRvIHNoaWZ0IGJhY2sgdG8gbG9jYWwgdGltZSB0byBkZXRlcm1pbmUg
RFNUIHRodXMgdGhlICsgZ2V0VVRDT2Zmc2V0KCkKKyAgICBkb3VibGUgb2Zmc2V0VGltZSA9IChs
b2NhbFRpbWVTZWNvbmRzICogbXNQZXJTZWNvbmQpICsgdXRjT2Zmc2V0OworCisgICAgLy8gT2Zm
c2V0IGZyb20gVVRDIGJ1dCBkb2Vzbid0IGluY2x1ZGUgRFNUIG9idmlvdXNseQorICAgIGludCBv
ZmZzZXRIb3VyID0gIG1zVG9Ib3VycyhvZmZzZXRUaW1lKTsKKyAgICBpbnQgb2Zmc2V0TWludXRl
ID0gIG1zVG9NaW51dGVzKG9mZnNldFRpbWUpOworCisgICAgLy8gRklYTUU6IHRpbWVfdCBoYXMg
YSBwb3RlbnRpYWwgcHJvYmxlbSBpbiAyMDM4CisgICAgdGltZV90IGxvY2FsVGltZSA9IHN0YXRp
Y19jYXN0PHRpbWVfdD4obG9jYWxUaW1lU2Vjb25kcyk7CisKKyAgICB0bSBsb2NhbFRNOworICAg
IGdldExvY2FsVGltZSgmbG9jYWxUaW1lLCAmbG9jYWxUTSk7CisKKyAgICBkb3VibGUgZGlmZiA9
ICgobG9jYWxUTS50bV9ob3VyIC0gb2Zmc2V0SG91cikgKiBzZWNvbmRzUGVySG91cikgKyAoKGxv
Y2FsVE0udG1fbWluIC0gb2Zmc2V0TWludXRlKSAqIDYwKTsKKworICAgIGlmIChkaWZmIDwgMCkK
KyAgICAgICAgZGlmZiArPSBzZWNvbmRzUGVyRGF5OworCisgICAgcmV0dXJuIChkaWZmICogbXNQ
ZXJTZWNvbmQpOworfQorCisvLyBHZXQgdGhlIERTVCBvZmZzZXQsIGdpdmVuIGEgdGltZSBpbiBV
VEMKK2RvdWJsZSBjYWxjdWxhdGVEU1RPZmZzZXQoZG91YmxlIG1zLCBkb3VibGUgdXRjT2Zmc2V0
KQoreworICAgIC8vIE9uIE1hYyBPUyBYLCB0aGUgY2FsbCB0byBsb2NhbHRpbWUgKHNlZSBjYWxj
dWxhdGVEU1RPZmZzZXRTaW1wbGUpIHdpbGwgcmV0dXJuIGhpc3RvcmljYWxseSBhY2N1cmF0ZQor
ICAgIC8vIERTVCBpbmZvcm1hdGlvbiAoZS5nLiBOZXcgWmVhbGFuZCBkaWQgbm90IGhhdmUgRFNU
IGZyb20gMTk0NiB0byAxOTc0KSBob3dldmVyIHRoZSBKYXZhU2NyaXB0CisgICAgLy8gc3RhbmRh
cmQgZXhwbGljaXRseSBkaWN0YXRlcyB0aGF0IGhpc3RvcmljYWwgaW5mb3JtYXRpb24gc2hvdWxk
IG5vdCBiZSBjb25zaWRlcmVkIHdoZW4KKyAgICAvLyBkZXRlcm1pbmluZyBEU1QuIEZvciB0aGlz
IHJlYXNvbiB3ZSBzaGlmdCBhd2F5IGZyb20geWVhcnMgdGhhdCBsb2NhbHRpbWUgY2FuIGhhbmRs
ZSBidXQgd291bGQKKyAgICAvLyByZXR1cm4gaGlzdG9yaWNhbGx5IGFjY3VyYXRlIGluZm9ybWF0
aW9uLgorICAgIGludCB5ZWFyID0gbXNUb1llYXIobXMpOworICAgIGludCBlcXVpdmFsZW50WWVh
ciA9IGVxdWl2YWxlbnRZZWFyRm9yRFNUKHllYXIpOworICAgIGlmICh5ZWFyICE9IGVxdWl2YWxl
bnRZZWFyKSB7CisgICAgICAgIGJvb2wgbGVhcFllYXIgPSBpc0xlYXBZZWFyKHllYXIpOworICAg
ICAgICBpbnQgZGF5SW5ZZWFyTG9jYWwgPSBkYXlJblllYXIobXMsIHllYXIpOworICAgICAgICBp
bnQgZGF5SW5Nb250aCA9IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKGRheUluWWVhckxvY2FsLCBs
ZWFwWWVhcik7CisgICAgICAgIGludCBtb250aCA9IG1vbnRoRnJvbURheUluWWVhcihkYXlJblll
YXJMb2NhbCwgbGVhcFllYXIpOworICAgICAgICBkb3VibGUgZGF5ID0gZGF0ZVRvRGF5c0Zyb20x
OTcwKGVxdWl2YWxlbnRZZWFyLCBtb250aCwgZGF5SW5Nb250aCk7CisgICAgICAgIG1zID0gKGRh
eSAqIG1zUGVyRGF5KSArIG1zVG9NaWxsaXNlY29uZHMobXMpOworICAgIH0KKworICAgIHJldHVy
biBjYWxjdWxhdGVEU1RPZmZzZXRTaW1wbGUobXMgLyBtc1BlclNlY29uZCwgdXRjT2Zmc2V0KTsK
K30KKwordm9pZCBpbml0aWFsaXplRGF0ZXMoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBzdGF0
aWMgYm9vbCBhbHJlYWR5SW5pdGlhbGl6ZWQ7CisgICAgQVNTRVJUKCFhbHJlYWR5SW5pdGlhbGl6
ZWQpOworICAgIGFscmVhZHlJbml0aWFsaXplZCA9IHRydWU7CisjZW5kaWYKKworICAgIGVxdWl2
YWxlbnRZZWFyRm9yRFNUKDIwMDApOyAvLyBOZWVkIHRvIGNhbGwgb25jZSB0byBpbml0aWFsaXpl
IGEgc3RhdGljIHVzZWQgaW4gdGhpcyBmdW5jdGlvbi4KK30KKworc3RhdGljIGlubGluZSBkb3Vi
bGUgeW1kaG1zVG9TZWNvbmRzKGxvbmcgeWVhciwgaW50IG1vbiwgaW50IGRheSwgaW50IGhvdXIs
IGludCBtaW51dGUsIGRvdWJsZSBzZWNvbmQpCit7CisgICAgZG91YmxlIGRheXMgPSAoZGF5IC0g
MzIwNzUpCisgICAgICAgICsgZmxvb3IoMTQ2MSAqICh5ZWFyICsgNDgwMC4wICsgKG1vbiAtIDE0
KSAvIDEyKSAvIDQpCisgICAgICAgICsgMzY3ICogKG1vbiAtIDIgLSAobW9uIC0gMTQpIC8gMTIg
KiAxMikgLyAxMgorICAgICAgICAtIGZsb29yKDMgKiAoKHllYXIgKyA0OTAwLjAgKyAobW9uIC0g
MTQpIC8gMTIpIC8gMTAwKSAvIDQpCisgICAgICAgIC0gMjQ0MDU4ODsKKyAgICByZXR1cm4gKChk
YXlzICogaG91cnNQZXJEYXkgKyBob3VyKSAqIG1pbnV0ZXNQZXJIb3VyICsgbWludXRlKSAqIHNl
Y29uZHNQZXJNaW51dGUgKyBzZWNvbmQ7Cit9CisKKy8vIFdlIGZvbGxvdyB0aGUgcmVjb21tZW5k
YXRpb24gb2YgUkZDIDI4MjIgdG8gY29uc2lkZXIgYWxsCisvLyBvYnNvbGV0ZSB0aW1lIHpvbmVz
IG5vdCBsaXN0ZWQgaGVyZSBlcXVpdmFsZW50IHRvICItMDAwMCIuCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IEtub3duWm9uZSB7CisjaWYgIU9TKFdJTkRPV1MpCisgICAgY29uc3QKKyNlbmRpZgorICAg
ICAgICBjaGFyIHR6TmFtZVs0XTsKKyAgICBpbnQgdHpPZmZzZXQ7Cit9IGtub3duX3pvbmVzW10g
PSB7CisgICAgeyAiVVQiLCAwIH0sCisgICAgeyAiR01UIiwgMCB9LAorICAgIHsgIkVTVCIsIC0z
MDAgfSwKKyAgICB7ICJFRFQiLCAtMjQwIH0sCisgICAgeyAiQ1NUIiwgLTM2MCB9LAorICAgIHsg
IkNEVCIsIC0zMDAgfSwKKyAgICB7ICJNU1QiLCAtNDIwIH0sCisgICAgeyAiTURUIiwgLTM2MCB9
LAorICAgIHsgIlBTVCIsIC00ODAgfSwKKyAgICB7ICJQRFQiLCAtNDIwIH0KK307CisKK2lubGlu
ZSBzdGF0aWMgdm9pZCBza2lwU3BhY2VzQW5kQ29tbWVudHMoY29uc3QgY2hhciomIHMpCit7Cisg
ICAgaW50IG5lc3RpbmcgPSAwOworICAgIGNoYXIgY2g7CisgICAgd2hpbGUgKChjaCA9ICpzKSkg
eworICAgICAgICBpZiAoIWlzQVNDSUlTcGFjZShjaCkpIHsKKyAgICAgICAgICAgIGlmIChjaCA9
PSAnKCcpCisgICAgICAgICAgICAgICAgbmVzdGluZysrOworICAgICAgICAgICAgZWxzZSBpZiAo
Y2ggPT0gJyknICYmIG5lc3RpbmcgPiAwKQorICAgICAgICAgICAgICAgIG5lc3RpbmctLTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKG5lc3RpbmcgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBzKys7CisgICAgfQorfQorCisvLyByZXR1cm5zIDAtMTEgKEph
bi1EZWMpOyAtMSBvbiBmYWlsdXJlCitzdGF0aWMgaW50IGZpbmRNb250aChjb25zdCBjaGFyKiBt
b250aFN0cikKK3sKKyAgICBBU1NFUlQobW9udGhTdHIpOworICAgIGNoYXIgbmVlZGxlWzRdOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgIGlmICghKm1vbnRoU3Ry
KQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBuZWVkbGVbaV0gPSBzdGF0aWNfY2Fz
dDxjaGFyPih0b0FTQ0lJTG93ZXIoKm1vbnRoU3RyKyspKTsKKyAgICB9CisgICAgbmVlZGxlWzNd
ID0gJ1wwJzsKKyAgICBjb25zdCBjaGFyICpoYXlzdGFjayA9ICJqYW5mZWJtYXJhcHJtYXlqdW5q
dWxhdWdzZXBvY3Rub3ZkZWMiOworICAgIGNvbnN0IGNoYXIgKnN0ciA9IHN0cnN0cihoYXlzdGFj
aywgbmVlZGxlKTsKKyAgICBpZiAoc3RyKSB7CisgICAgICAgIGludCBwb3NpdGlvbiA9IHN0YXRp
Y19jYXN0PGludD4oc3RyIC0gaGF5c3RhY2spOworICAgICAgICBpZiAocG9zaXRpb24gJSAzID09
IDApCisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gLyAzOworICAgIH0KKyAgICByZXR1cm4g
LTE7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlTG9uZyhjb25zdCBjaGFyKiBzdHJpbmcsIGNoYXIq
KiBzdG9wUG9zaXRpb24sIGludCBiYXNlLCBsb25nKiByZXN1bHQpCit7CisgICAgKnJlc3VsdCA9
IHN0cnRvbChzdHJpbmcsIHN0b3BQb3NpdGlvbiwgYmFzZSk7CisgICAgLy8gQXZvaWQgdGhlIHVz
ZSBvZiBlcnJubyBhcyBpdCBpcyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MgQ0UKKyAgICBpZiAo
c3RyaW5nID09ICpzdG9wUG9zaXRpb24gfHwgKnJlc3VsdCA9PSBMT05HX01JTiB8fCAqcmVzdWx0
ID09IExPTkdfTUFYKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2RvdWJsZSBwYXJzZUVTNURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGNvbnN0
IGNoYXIqIGRhdGVTdHJpbmcpCit7CisgICAgLy8gVGhpcyBwYXJzZXMgYSBkYXRlIG9mIHRoZSBm
b3JtIGRlZmluZWQgaW4gRUNNQS0yNjItNSwgc2VjdGlvbiAxNS45LjEuMTUKKyAgICAvLyAoc2lt
aWxhciB0byBSRkMgMzMzOSAvIElTTyA4NjAxOiBZWVlZLU1NLUREVEhIOm1tOnNzWy5zc3NdWiku
CisgICAgLy8gSW4gbW9zdCBjYXNlcyBpdCBpcyBpbnRlbnRpb25hbGx5IHN0cmljdCAoZS5nLiBj
b3JyZWN0IGZpZWxkIHdpZHRocywgbm8gc3RyYXkgd2hpdGVzcGFjZSkuCisgICAgCisgICAgc3Rh
dGljIGNvbnN0IGxvbmcgZGF5c1Blck1vbnRoWzEyXSA9IHsgMzEsIDI5LCAzMSwgMzAsIDMxLCAz
MCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSB9OworICAgIAorICAgIGNvbnN0IGNoYXIqIGN1cnJl
bnRQb3NpdGlvbiA9IGRhdGVTdHJpbmc7CisgICAgY2hhciogcG9zdFBhcnNlUG9zaXRpb247Cisg
ICAgCisgICAgLy8gVGhpcyBpcyBhIGJpdCBtb3JlIGxlbmllbnQgb24gdGhlIHllYXIgc3RyaW5n
IHRoYW4gRVM1IHNwZWNpZmllczoKKyAgICAvLyBpbnN0ZWFkIG9mIHJlc3RyaWN0aW5nIHRvIDQg
ZGlnaXRzIChvciA2IGRpZ2l0cyB3aXRoIG1hbmRhdG9yeSArLy0pLAorICAgIC8vIGl0IGFjY2Vw
dHMgYW55IGludGVnZXIgdmFsdWUuIENvbnNpZGVyIHRoaXMgYW4gaW1wbGVtZW50YXRpb24gZmFs
bGJhY2suCisgICAgbG9uZyB5ZWFyOworICAgIGlmICghcGFyc2VMb25nKGN1cnJlbnRQb3NpdGlv
biwgJnBvc3RQYXJzZVBvc2l0aW9uLCAxMCwgJnllYXIpKQorICAgICAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICBpZiAoKnBvc3RQYXJzZVBv
c2l0aW9uICE9ICctJykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7CisgICAgY3VycmVudFBvc2l0aW9uID0gcG9zdFBhcnNlUG9zaXRpb24g
KyAxOworICAgIAorICAgIGxvbmcgbW9udGg7CisgICAgaWYgKCFpc0FTQ0lJRGlnaXQoKmN1cnJl
bnRQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
OnF1aWV0X05hTigpOworICAgIGlmICghcGFyc2VMb25nKGN1cnJlbnRQb3NpdGlvbiwgJnBvc3RQ
YXJzZVBvc2l0aW9uLCAxMCwgJm1vbnRoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgaWYgKCpwb3N0UGFyc2VQb3NpdGlvbiAh
PSAnLScgfHwgKHBvc3RQYXJzZVBvc2l0aW9uIC0gY3VycmVudFBvc2l0aW9uKSAhPSAyKQorICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAg
ICBjdXJyZW50UG9zaXRpb24gPSBwb3N0UGFyc2VQb3NpdGlvbiArIDE7CisgICAgCisgICAgbG9u
ZyBkYXk7CisgICAgaWYgKCFpc0FTQ0lJRGlnaXQoKmN1cnJlbnRQb3NpdGlvbikpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIGlm
ICghcGFyc2VMb25nKGN1cnJlbnRQb3NpdGlvbiwgJnBvc3RQYXJzZVBvc2l0aW9uLCAxMCwgJmRh
eSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05h
TigpOworICAgIGlmICgqcG9zdFBhcnNlUG9zaXRpb24gIT0gJ1QnIHx8IChwb3N0UGFyc2VQb3Np
dGlvbiAtIGN1cnJlbnRQb3NpdGlvbikgIT0gMikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgY3VycmVudFBvc2l0aW9uID0gcG9z
dFBhcnNlUG9zaXRpb24gKyAxOworICAgIAorICAgIGxvbmcgaG91cnM7CisgICAgaWYgKCFpc0FT
Q0lJRGlnaXQoKmN1cnJlbnRQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIGlmICghcGFyc2VMb25nKGN1cnJlbnRQ
b3NpdGlvbiwgJnBvc3RQYXJzZVBvc2l0aW9uLCAxMCwgJmhvdXJzKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgaWYgKCpwb3N0
UGFyc2VQb3NpdGlvbiAhPSAnOicgfHwgKHBvc3RQYXJzZVBvc2l0aW9uIC0gY3VycmVudFBvc2l0
aW9uKSAhPSAyKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpx
dWlldF9OYU4oKTsKKyAgICBjdXJyZW50UG9zaXRpb24gPSBwb3N0UGFyc2VQb3NpdGlvbiArIDE7
CisgICAgCisgICAgbG9uZyBtaW51dGVzOworICAgIGlmICghaXNBU0NJSURpZ2l0KCpjdXJyZW50
UG9zaXRpb24pKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpx
dWlldF9OYU4oKTsKKyAgICBpZiAoIXBhcnNlTG9uZyhjdXJyZW50UG9zaXRpb24sICZwb3N0UGFy
c2VQb3NpdGlvbiwgMTAsICZtaW51dGVzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgaWYgKCpwb3N0UGFyc2VQb3NpdGlvbiAh
PSAnOicgfHwgKHBvc3RQYXJzZVBvc2l0aW9uIC0gY3VycmVudFBvc2l0aW9uKSAhPSAyKQorICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAg
ICBjdXJyZW50UG9zaXRpb24gPSBwb3N0UGFyc2VQb3NpdGlvbiArIDE7CisgICAgCisgICAgbG9u
ZyBpbnRTZWNvbmRzOworICAgIGlmICghaXNBU0NJSURpZ2l0KCpjdXJyZW50UG9zaXRpb24pKQor
ICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsK
KyAgICBpZiAoIXBhcnNlTG9uZyhjdXJyZW50UG9zaXRpb24sICZwb3N0UGFyc2VQb3NpdGlvbiwg
MTAsICZpbnRTZWNvbmRzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgaWYgKChwb3N0UGFyc2VQb3NpdGlvbiAtIGN1cnJlbnRQ
b3NpdGlvbikgIT0gMikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7CisgICAgCisgICAgZG91YmxlIHNlY29uZHMgPSBpbnRTZWNvbmRzOwor
ICAgIGlmICgqcG9zdFBhcnNlUG9zaXRpb24gPT0gJy4nKSB7CisgICAgICAgIGN1cnJlbnRQb3Np
dGlvbiA9IHBvc3RQYXJzZVBvc2l0aW9uICsgMTsKKyAgICAgICAgCisgICAgICAgIC8vIEluIEVD
TUEtMjYyLTUgaXQncyBhIGJpdCB1bmNsZWFyIGlmICcuJyBjYW4gYmUgcHJlc2VudCB3aXRob3V0
IG1pbGxpc2Vjb25kcywgYnV0CisgICAgICAgIC8vIGEgcmVhc29uYWJsZSBpbnRlcnByZXRhdGlv
biBndWlkZWQgYnkgdGhlIGdpdmVuIGV4YW1wbGVzIGFuZCBSRkMgMzMzOSBzYXlzICJubyIuCisg
ICAgICAgIC8vIFdlIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3RlciB0byBhdm9pZCByZWFkaW5nICsv
LSB0aW1lem9uZSBob3VycyBhZnRlciBhbiBpbnZhbGlkIGRlY2ltYWwuCisgICAgICAgIGlmICgh
aXNBU0NJSURpZ2l0KCpjdXJyZW50UG9zaXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIAorICAgICAgICAv
LyBXZSBhcmUgbW9yZSBsZW5pZW50IHRoYW4gRVM1IGJ5IGFjY2VwdGluZyBtb3JlIG9yIGxlc3Mg
dGhhbiAzIGZyYWN0aW9uIGRpZ2l0cy4KKyAgICAgICAgbG9uZyBmcmFjU2Vjb25kczsKKyAgICAg
ICAgaWYgKCFwYXJzZUxvbmcoY3VycmVudFBvc2l0aW9uLCAmcG9zdFBhcnNlUG9zaXRpb24sIDEw
LCAmZnJhY1NlY29uZHMpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIAorICAgICAgICBsb25nIG51bUZyYWNEaWdp
dHMgPSBwb3N0UGFyc2VQb3NpdGlvbiAtIGN1cnJlbnRQb3NpdGlvbjsKKyAgICAgICAgc2Vjb25k
cyArPSBmcmFjU2Vjb25kcyAqIHBvdygxMC4wLCBzdGF0aWNfY2FzdDxkb3VibGU+KC1udW1GcmFj
RGlnaXRzKSk7CisgICAgfQorICAgIGN1cnJlbnRQb3NpdGlvbiA9IHBvc3RQYXJzZVBvc2l0aW9u
OworICAgIAorICAgIC8vIEEgZmV3IG9mIHRoZXNlIGNoZWNrcyBjb3VsZCBiZSBkb25lIGlubGlu
ZSBhYm92ZSwgYnV0IHNpbmNlIG1hbnkgb2YgdGhlbSBhcmUgaW50ZXJyZWxhdGVkCisgICAgLy8g
d2Ugd291bGQgYmUgc2FjcmlmaWNpbmcgcmVhZGFiaWxpdHkgdG8gIm9wdGltaXplIiB0aGUgKHBy
ZXN1bWFibHkgbGVzcyBjb21tb24pIGZhaWx1cmUgcGF0aC4KKyAgICBpZiAobW9udGggPCAxIHx8
IG1vbnRoID4gMTIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
OnF1aWV0X05hTigpOworICAgIGlmIChkYXkgPCAxIHx8IGRheSA+IGRheXNQZXJNb250aFttb250
aCAtIDFdKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWll
dF9OYU4oKTsKKyAgICBpZiAobW9udGggPT0gMiAmJiBkYXkgPiAyOCAmJiAhaXNMZWFwWWVhcih5
ZWFyKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRf
TmFOKCk7CisgICAgaWYgKGhvdXJzIDwgMCB8fCBob3VycyA+IDI0KQorICAgICAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICBpZiAoaG91cnMg
PT0gMjQgJiYgKG1pbnV0ZXMgfHwgc2Vjb25kcykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIGlmIChtaW51dGVzIDwgMCB8fCBt
aW51dGVzID4gNTkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
OnF1aWV0X05hTigpOworICAgIGlmIChzZWNvbmRzIDwgMCB8fCBzZWNvbmRzID49IDYxKQorICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAg
ICBpZiAoc2Vjb25kcyA+IDYwKSB7CisgICAgICAgIC8vIERpc2NhcmQgbGVhcCBzZWNvbmRzIGJ5
IGNsYW1waW5nIHRvIHRoZSBlbmQgb2YgYSBtaW51dGUuCisgICAgICAgIHNlY29uZHMgPSA2MDsK
KyAgICB9CisgICAgCisgICAgbG9uZyB0aW1lWm9uZVNlY29uZHMgPSAwOworICAgIGlmICgqY3Vy
cmVudFBvc2l0aW9uICE9ICdaJykgeworICAgICAgICBib29sIHR6TmVnYXRpdmU7CisgICAgICAg
IGlmICgqY3VycmVudFBvc2l0aW9uID09ICctJykKKyAgICAgICAgICAgIHR6TmVnYXRpdmUgPSB0
cnVlOworICAgICAgICBlbHNlIGlmICgqY3VycmVudFBvc2l0aW9uID09ICcrJykKKyAgICAgICAg
ICAgIHR6TmVnYXRpdmUgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIGN1cnJl
bnRQb3NpdGlvbiArPSAxOworICAgICAgICAKKyAgICAgICAgbG9uZyB0ekhvdXJzOworICAgICAg
ICBsb25nIHR6SG91cnNBYnM7CisgICAgICAgIGxvbmcgdHpNaW51dGVzOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoKmN1cnJlbnRQb3NpdGlvbikpCisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAgICAg
aWYgKCFwYXJzZUxvbmcoY3VycmVudFBvc2l0aW9uLCAmcG9zdFBhcnNlUG9zaXRpb24sIDEwLCAm
dHpIb3VycykpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKTsKKyAgICAgICAgaWYgKCpwb3N0UGFyc2VQb3NpdGlvbiAhPSAnOicgfHwg
KHBvc3RQYXJzZVBvc2l0aW9uIC0gY3VycmVudFBvc2l0aW9uKSAhPSAyKQorICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAg
IHR6SG91cnNBYnMgPSBsYWJzKHR6SG91cnMpOworICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBw
b3N0UGFyc2VQb3NpdGlvbiArIDE7CisgICAgICAgIAorICAgICAgICBpZiAoIWlzQVNDSUlEaWdp
dCgqY3VycmVudFBvc2l0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgICAgICBpZiAoIXBhcnNlTG9uZyhjdXJyZW50
UG9zaXRpb24sICZwb3N0UGFyc2VQb3NpdGlvbiwgMTAsICZ0ek1pbnV0ZXMpKQorICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAg
ICAgIGlmICgocG9zdFBhcnNlUG9zaXRpb24gLSBjdXJyZW50UG9zaXRpb24pICE9IDIpCisgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsK
KyAgICAgICAgY3VycmVudFBvc2l0aW9uID0gcG9zdFBhcnNlUG9zaXRpb247CisgICAgICAgIAor
ICAgICAgICBpZiAodHpIb3Vyc0FicyA+IDI0KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIGlmICh0ek1pbnV0ZXMg
PCAwIHx8IHR6TWludXRlcyA+IDU5KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIAorICAgICAgICB0aW1lWm9uZVNl
Y29uZHMgPSA2MCAqICh0ek1pbnV0ZXMgKyAoNjAgKiB0ekhvdXJzQWJzKSk7CisgICAgICAgIGlm
ICh0ek5lZ2F0aXZlKQorICAgICAgICAgICAgdGltZVpvbmVTZWNvbmRzID0gLXRpbWVab25lU2Vj
b25kczsKKyAgICB9IGVsc2UgeworICAgICAgICBjdXJyZW50UG9zaXRpb24gKz0gMTsKKyAgICB9
CisgICAgaWYgKCpjdXJyZW50UG9zaXRpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIAorICAgIGRvdWJsZSBkYXRlU2Vjb25k
cyA9IHltZGhtc1RvU2Vjb25kcyh5ZWFyLCBtb250aCwgZGF5LCBob3VycywgbWludXRlcywgc2Vj
b25kcykgLSB0aW1lWm9uZVNlY29uZHM7CisgICAgcmV0dXJuIGRhdGVTZWNvbmRzICogbXNQZXJT
ZWNvbmQ7Cit9CisKKy8vIE9kZCBjYXNlIHdoZXJlICdleGVjJyBpcyBhbGxvd2VkIHRvIGJlIDAs
IHRvIGFjY29tb2RhdGUgYSBjYWxsZXIgaW4gV2ViQ29yZS4KK3N0YXRpYyBkb3VibGUgcGFyc2VE
YXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhjb25zdCBjaGFyKiBkYXRlU3RyaW5nLCBi
b29sJiBoYXZlVFosIGludCYgb2Zmc2V0KQoreworICAgIGhhdmVUWiA9IGZhbHNlOworICAgIG9m
ZnNldCA9IDA7CisKKyAgICAvLyBUaGlzIHBhcnNlcyBhIGRhdGUgaW4gdGhlIGZvcm06CisgICAg
Ly8gICAgIFR1ZXNkYXksIDA5LU5vdi05OSAyMzoxMjo0MCBHTVQKKyAgICAvLyBvcgorICAgIC8v
ICAgICBTYXQsIDAxLUphbi0yMDAwIDA4OjAwOjAwIEdNVAorICAgIC8vIG9yCisgICAgLy8gICAg
IFNhdCwgMDEgSmFuIDIwMDAgMDg6MDA6MDAgR01UCisgICAgLy8gb3IKKyAgICAvLyAgICAgMDEg
SmFuIDk5IDIyOjAwICswMTAwICAgIChleGNlcHRpb25zIGluIHJmYzgyMi9yZmMyODIyKQorICAg
IC8vICMjIyBub24gUkZDIGZvcm1hdHMsIGFkZGVkIGZvciBKYXZhc2NyaXB0OgorICAgIC8vICAg
ICBbV2VkbmVzZGF5XSBKYW51YXJ5IDA5IDE5OTkgMjM6MTI6NDAgR01UCisgICAgLy8gICAgIFtX
ZWRuZXNkYXldIEphbnVhcnkgMDkgMjM6MTI6NDAgR01UIDE5OTkKKyAgICAvLworICAgIC8vIFdl
IGlnbm9yZSB0aGUgd2Vla2RheS4KKyAgICAgCisgICAgLy8gU2tpcCBsZWFkaW5nIHNwYWNlCisg
ICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOworCisgICAgbG9uZyBtb250aCA9
IC0xOworICAgIGNvbnN0IGNoYXIgKndvcmRTdGFydCA9IGRhdGVTdHJpbmc7CisgICAgLy8gQ2hl
Y2sgY29udGVudHMgb2YgZmlyc3Qgd29yZHMgaWYgbm90IG51bWJlcgorICAgIHdoaWxlICgqZGF0
ZVN0cmluZyAmJiAhaXNBU0NJSURpZ2l0KCpkYXRlU3RyaW5nKSkgeworICAgICAgICBpZiAoaXNB
U0NJSVNwYWNlKCpkYXRlU3RyaW5nKSB8fCAqZGF0ZVN0cmluZyA9PSAnKCcpIHsKKyAgICAgICAg
ICAgIGlmIChkYXRlU3RyaW5nIC0gd29yZFN0YXJ0ID49IDMpCisgICAgICAgICAgICAgICAgbW9u
dGggPSBmaW5kTW9udGgod29yZFN0YXJ0KTsKKyAgICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21t
ZW50cyhkYXRlU3RyaW5nKTsKKyAgICAgICAgICAgIHdvcmRTdGFydCA9IGRhdGVTdHJpbmc7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICBkYXRlU3RyaW5nKys7CisgICAgfQorCisgICAgLy8g
TWlzc2luZyBkZWxpbWl0ZXIgYmV0d2VlbiBtb250aCBhbmQgZGF5IChsaWtlICJKYW51YXJ5Mjki
KT8KKyAgICBpZiAobW9udGggPT0gLTEgJiYgd29yZFN0YXJ0ICE9IGRhdGVTdHJpbmcpCisgICAg
ICAgIG1vbnRoID0gZmluZE1vbnRoKHdvcmRTdGFydCk7CisKKyAgICBza2lwU3BhY2VzQW5kQ29t
bWVudHMoZGF0ZVN0cmluZyk7CisKKyAgICBpZiAoISpkYXRlU3RyaW5nKQorICAgICAgICByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKworICAgIC8vICcg
MDktTm92LTk5IDIzOjEyOjQwIEdNVCcKKyAgICBjaGFyKiBuZXdQb3NTdHI7CisgICAgbG9uZyBk
YXk7CisgICAgaWYgKCFwYXJzZUxvbmcoZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTAsICZkYXkp
KQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4o
KTsKKyAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOworCisgICAgaWYgKCEqZGF0ZVN0cmluZykK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7
CisKKyAgICBpZiAoZGF5IDwgMCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisKKyAgICBsb25nIHllYXIgPSAwOworICAgIGlmIChkYXkg
PiAzMSkgeworICAgICAgICAvLyAjIyMgd2hlcmUgaXMgdGhlIGJvdW5kYXJ5IGFuZCB3aGF0IGhh
cHBlbnMgYmVsb3c/CisgICAgICAgIGlmICgqZGF0ZVN0cmluZyAhPSAnLycpCisgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAg
ICAgLy8gbG9va3MgbGlrZSBhIFlZWVkvTU0vREQgZGF0ZQorICAgICAgICBpZiAoISorK2RhdGVT
dHJpbmcpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpx
dWlldF9OYU4oKTsKKyAgICAgICAgeWVhciA9IGRheTsKKyAgICAgICAgaWYgKCFwYXJzZUxvbmco
ZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTAsICZtb250aCkpCisgICAgICAgICAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgbW9udGgg
LT0gMTsKKyAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKKyAgICAgICAgaWYgKCpkYXRl
U3RyaW5nKysgIT0gJy8nIHx8ICEqZGF0ZVN0cmluZykKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgICAgICBpZiAoIXBhcnNl
TG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJmRheSkpCisgICAgICAgICAgICByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgZGF0
ZVN0cmluZyA9IG5ld1Bvc1N0cjsKKyAgICB9IGVsc2UgaWYgKCpkYXRlU3RyaW5nID09ICcvJyAm
JiBtb250aCA9PSAtMSkgeworICAgICAgICBkYXRlU3RyaW5nKys7CisgICAgICAgIC8vIFRoaXMg
bG9va3MgbGlrZSBhIE1NL0REL1lZWVkgZGF0ZSwgbm90IGFuIFJGQyBkYXRlLgorICAgICAgICBt
b250aCA9IGRheSAtIDE7IC8vIDAtYmFzZWQKKyAgICAgICAgaWYgKCFwYXJzZUxvbmcoZGF0ZVN0
cmluZywgJm5ld1Bvc1N0ciwgMTAsICZkYXkpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIGlmIChkYXkgPCAxIHx8
IGRheSA+IDMxKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CisgICAgICAg
IGlmICgqZGF0ZVN0cmluZyA9PSAnLycpCisgICAgICAgICAgICBkYXRlU3RyaW5nKys7CisgICAg
ICAgIGlmICghKmRhdGVTdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCpk
YXRlU3RyaW5nID09ICctJykKKyAgICAgICAgICAgIGRhdGVTdHJpbmcrKzsKKworICAgICAgICBz
a2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7CisKKyAgICAgICAgaWYgKCpkYXRlU3Ry
aW5nID09ICcsJykKKyAgICAgICAgICAgIGRhdGVTdHJpbmcrKzsKKworICAgICAgICBpZiAobW9u
dGggPT0gLTEpIHsgLy8gbm90IGZvdW5kIHlldAorICAgICAgICAgICAgbW9udGggPSBmaW5kTW9u
dGgoZGF0ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAobW9udGggPT0gLTEpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisK
KyAgICAgICAgICAgIHdoaWxlICgqZGF0ZVN0cmluZyAmJiAqZGF0ZVN0cmluZyAhPSAnLScgJiYg
KmRhdGVTdHJpbmcgIT0gJywnICYmICFpc0FTQ0lJU3BhY2UoKmRhdGVTdHJpbmcpKQorICAgICAg
ICAgICAgICAgIGRhdGVTdHJpbmcrKzsKKworICAgICAgICAgICAgaWYgKCEqZGF0ZVN0cmluZykK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWll
dF9OYU4oKTsKKworICAgICAgICAgICAgLy8gJy05OSAyMzoxMjo0MCBHTVQnCisgICAgICAgICAg
ICBpZiAoKmRhdGVTdHJpbmcgIT0gJy0nICYmICpkYXRlU3RyaW5nICE9ICcvJyAmJiAqZGF0ZVN0
cmluZyAhPSAnLCcgJiYgIWlzQVNDSUlTcGFjZSgqZGF0ZVN0cmluZykpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAg
ICAgICAgICBkYXRlU3RyaW5nKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobW9udGgg
PCAwIHx8IG1vbnRoID4gMTEpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OnF1aWV0X05hTigpOworCisgICAgLy8gJzk5IDIzOjEyOjQwIEdNVCcKKyAgICBpZiAo
eWVhciA8PSAwICYmICpkYXRlU3RyaW5nKSB7CisgICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVT
dHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmeWVhcikpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICB9CisKKyAgICAvLyBEb24n
dCBmYWlsIGlmIHRoZSB0aW1lIGlzIG1pc3NpbmcuCisgICAgbG9uZyBob3VyID0gMDsKKyAgICBs
b25nIG1pbnV0ZSA9IDA7CisgICAgbG9uZyBzZWNvbmQgPSAwOworICAgIGlmICghKm5ld1Bvc1N0
cikKKyAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKKyAgICBlbHNlIHsKKyAgICAgICAg
Ly8gJyAyMzoxMjo0MCBHTVQnCisgICAgICAgIGlmICghKGlzQVNDSUlTcGFjZSgqbmV3UG9zU3Ry
KSB8fCAqbmV3UG9zU3RyID09ICcsJykpIHsKKyAgICAgICAgICAgIGlmICgqbmV3UG9zU3RyICE9
ICc6JykKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKTsKKyAgICAgICAgICAgIC8vIFRoZXJlIHdhcyBubyB5ZWFyOyB0aGUgbnVt
YmVyIHdhcyB0aGUgaG91ci4KKyAgICAgICAgICAgIHllYXIgPSAtMTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIGluIHRoZSBub3JtYWwgY2FzZSAod2UgcGFyc2VkIHRoZSB5ZWFy
KSwgYWR2YW5jZSB0byB0aGUgbmV4dCBudW1iZXIKKyAgICAgICAgICAgIGRhdGVTdHJpbmcgPSAr
K25ld1Bvc1N0cjsKKyAgICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5n
KTsKKyAgICAgICAgfQorCisgICAgICAgIHBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3Ry
LCAxMCwgJmhvdXIpOworICAgICAgICAvLyBEbyBub3QgY2hlY2sgZm9yIGVycm5vIGhlcmUgc2lu
Y2Ugd2Ugd2FudCB0byBjb250aW51ZQorICAgICAgICAvLyBldmVuIGlmIGVycm5vIHdhcyBzZXQg
YmVjYXN1ZSB3ZSBhcmUgc3RpbGwgbG9va2luZworICAgICAgICAvLyBmb3IgdGhlIHRpbWV6b25l
IQorCisgICAgICAgIC8vIFJlYWQgYSBudW1iZXI/IElmIG5vdCwgdGhpcyBtaWdodCBiZSBhIHRp
bWV6b25lIG5hbWUuCisgICAgICAgIGlmIChuZXdQb3NTdHIgIT0gZGF0ZVN0cmluZykgeworICAg
ICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKKworICAgICAgICAgICAgaWYgKGhvdXIg
PCAwIHx8IGhvdXIgPiAyMykKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKworICAgICAgICAgICAgaWYgKCEqZGF0ZVN0cmlu
ZykKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpx
dWlldF9OYU4oKTsKKworICAgICAgICAgICAgLy8gJzoxMjo0MCBHTVQnCisgICAgICAgICAgICBp
ZiAoKmRhdGVTdHJpbmcrKyAhPSAnOicpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisKKyAgICAgICAgICAgIGlmICghcGFy
c2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmbWludXRlKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAg
ICAgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CisKKyAgICAgICAgICAgIGlmIChtaW51
dGUgPCAwIHx8IG1pbnV0ZSA+IDU5KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworCisgICAgICAgICAgICAvLyAnOjQwIEdN
VCcKKyAgICAgICAgICAgIGlmICgqZGF0ZVN0cmluZyAmJiAqZGF0ZVN0cmluZyAhPSAnOicgJiYg
IWlzQVNDSUlTcGFjZSgqZGF0ZVN0cmluZykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisKKyAgICAgICAgICAgIC8vIHNl
Y29uZHMgYXJlIG9wdGlvbmFsIGluIHJmYzgyMiArIHJmYzI4MjIKKyAgICAgICAgICAgIGlmICgq
ZGF0ZVN0cmluZyA9PSc6JykgeworICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcrKzsKKworICAg
ICAgICAgICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAm
c2Vjb25kKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bv
c1N0cjsKKworICAgICAgICAgICAgICAgIGlmIChzZWNvbmQgPCAwIHx8IHNlY29uZCA+IDU5KQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpx
dWlldF9OYU4oKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENv
bW1lbnRzKGRhdGVTdHJpbmcpOworCisgICAgICAgICAgICBpZiAoc3RybmNhc2VjbXAoZGF0ZVN0
cmluZywgIkFNIiwgMikgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChob3VyID4gMTIpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1
aWV0X05hTigpOworICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKQorICAgICAgICAgICAg
ICAgICAgICBob3VyID0gMDsKKyAgICAgICAgICAgICAgICBkYXRlU3RyaW5nICs9IDI7CisgICAg
ICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChzdHJuY2FzZWNtcChkYXRlU3RyaW5nLCAiUE0iLCAyKSA9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGhvdXIgPiAxMikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgICAgICAg
ICAgaWYgKGhvdXIgIT0gMTIpCisgICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7CisgICAg
ICAgICAgICAgICAgZGF0ZVN0cmluZyArPSAyOworICAgICAgICAgICAgICAgIHNraXBTcGFjZXNB
bmRDb21tZW50cyhkYXRlU3RyaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIERvbid0IGZhaWwgaWYgdGhlIHRpbWUgem9uZSBpcyBtaXNzaW5nLiAKKyAgICAv
LyBTb21lIHdlYnNpdGVzIG9taXQgdGhlIHRpbWUgem9uZSAoNDI3NTIwNikuCisgICAgaWYgKCpk
YXRlU3RyaW5nKSB7CisgICAgICAgIGlmIChzdHJuY2FzZWNtcChkYXRlU3RyaW5nLCAiR01UIiwg
MykgPT0gMCB8fCBzdHJuY2FzZWNtcChkYXRlU3RyaW5nLCAiVVRDIiwgMykgPT0gMCkgeworICAg
ICAgICAgICAgZGF0ZVN0cmluZyArPSAzOworICAgICAgICAgICAgaGF2ZVRaID0gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICgqZGF0ZVN0cmluZyA9PSAnKycgfHwgKmRhdGVTdHJpbmcg
PT0gJy0nKSB7CisgICAgICAgICAgICBsb25nIG87CisgICAgICAgICAgICBpZiAoIXBhcnNlTG9u
ZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJm8pKQorICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgICAgICAgICAg
ZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKKworICAgICAgICAgICAgaWYgKG8gPCAtOTk1OSB8fCBv
ID4gOTk1OSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjpxdWlldF9OYU4oKTsKKworICAgICAgICAgICAgaW50IHNnbiA9IChvIDwgMCkgPyAtMSA6
IDE7CisgICAgICAgICAgICBvID0gbGFicyhvKTsKKyAgICAgICAgICAgIGlmICgqZGF0ZVN0cmlu
ZyAhPSAnOicpIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSAoKG8gLyAxMDApICogNjAgKyAo
byAlIDEwMCkpICogc2duOworICAgICAgICAgICAgfSBlbHNlIHsgLy8gR01UKzA1OjAwCisgICAg
ICAgICAgICAgICAgbG9uZyBvMjsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRl
U3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJm8yKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgICAgICAg
ICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSAobyAq
IDYwICsgbzIpICogc2duOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaGF2ZVRaID0gdHJ1
ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
V1RGX0FSUkFZX0xFTkdUSChrbm93bl96b25lcyk7ICsraSkgeworICAgICAgICAgICAgICAgIGlm
ICgwID09IHN0cm5jYXNlY21wKGRhdGVTdHJpbmcsIGtub3duX3pvbmVzW2ldLnR6TmFtZSwgc3Ry
bGVuKGtub3duX3pvbmVzW2ldLnR6TmFtZSkpKSB7CisgICAgICAgICAgICAgICAgICAgIG9mZnNl
dCA9IGtub3duX3pvbmVzW2ldLnR6T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBkYXRlU3Ry
aW5nICs9IHN0cmxlbihrbm93bl96b25lc1tpXS50ek5hbWUpOworICAgICAgICAgICAgICAgICAg
ICBoYXZlVFogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBza2lwU3BhY2Vz
QW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7CisKKyAgICBpZiAoKmRhdGVTdHJpbmcgJiYgeWVhciA9
PSAtMSkgeworICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAx
MCwgJnllYXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CisgICAgfQor
CisgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOworCisgICAgLy8gVHJhaWxp
bmcgZ2FyYmFnZQorICAgIGlmICgqZGF0ZVN0cmluZykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisKKyAgICAvLyBZMks6IEhhbmRsZSAy
IGRpZ2l0IHllYXJzLgorICAgIGlmICh5ZWFyID49IDAgJiYgeWVhciA8IDEwMCkgeworICAgICAg
ICBpZiAoeWVhciA8IDUwKQorICAgICAgICAgICAgeWVhciArPSAyMDAwOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB5ZWFyICs9IDE5MDA7CisgICAgfQorICAgIAorICAgIHJldHVybiB5bWRo
bXNUb1NlY29uZHMoeWVhciwgbW9udGggKyAxLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSAq
IG1zUGVyU2Vjb25kOworfQorCitkb3VibGUgcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hh
cmFjdGVycyhjb25zdCBjaGFyKiBkYXRlU3RyaW5nKQoreworICAgIGJvb2wgaGF2ZVRaOworICAg
IGludCBvZmZzZXQ7CisgICAgZG91YmxlIG1zID0gcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVk
Q2hhcmFjdGVycyhkYXRlU3RyaW5nLCBoYXZlVFosIG9mZnNldCk7CisgICAgaWYgKGlzbmFuKG1z
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7CisKKyAgICAvLyBmYWxsIGJhY2sgdG8gbG9jYWwgdGltZXpvbmUKKyAgICBpZiAoIWhhdmVU
WikgeworICAgICAgICBkb3VibGUgdXRjT2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7Cisg
ICAgICAgIGRvdWJsZSBkc3RPZmZzZXQgPSBjYWxjdWxhdGVEU1RPZmZzZXQobXMsIHV0Y09mZnNl
dCk7CisgICAgICAgIG9mZnNldCA9IHN0YXRpY19jYXN0PGludD4oKHV0Y09mZnNldCArIGRzdE9m
ZnNldCkgLyBtc1Blck1pbnV0ZSk7CisgICAgfQorICAgIHJldHVybiBtcyAtIChvZmZzZXQgKiBt
c1Blck1pbnV0ZSk7Cit9CisKK2RvdWJsZSB0aW1lQ2xpcChkb3VibGUgdCkKK3sKKyAgICBpZiAo
IWlzZmluaXRlKHQpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKTsKKyAgICBpZiAoZmFicyh0KSA+IG1heEVDTUFTY3JpcHRUaW1lKQorICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAg
ICByZXR1cm4gdHJ1bmModCk7Cit9CisKKy8vIFNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRt
bC9yZmMyODIyI3NlY3Rpb24tMy4zIGZvciBtb3JlIGluZm9ybWF0aW9uLgorU3RyaW5nIG1ha2VS
RkMyODIyRGF0ZVN0cmluZyh1bnNpZ25lZCBkYXlPZldlZWssIHVuc2lnbmVkIGRheSwgdW5zaWdu
ZWQgbW9udGgsIHVuc2lnbmVkIHllYXIsIHVuc2lnbmVkIGhvdXJzLCB1bnNpZ25lZCBtaW51dGVz
LCB1bnNpZ25lZCBzZWNvbmRzLCBpbnQgdXRjT2Zmc2V0KQoreworICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh3ZWVrZGF5TmFtZVtkYXlP
ZldlZWtdKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcihkYXkpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1vbnRoTmFtZVttb250aF0pOworICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoU3Ry
aW5nOjpudW1iZXIoeWVhcikpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgIik7CisKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0d29EaWdpdFN0cmluZ0Zyb21OdW1iZXIoaG91cnMpKTsK
KyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHR3b0RpZ2l0U3RyaW5nRnJvbU51bWJlcihtaW51dGVzKSk7CisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJzonKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0d29EaWdpdFN0cmluZ0Zyb21O
dW1iZXIoc2Vjb25kcykpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCh1dGNPZmZzZXQgPiAwID8gIisiIDogIi0iKTsKKyAgICBpbnQg
YWJzb2x1dGVVVENPZmZzZXQgPSBhYnModXRjT2Zmc2V0KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0d29EaWdpdFN0cmluZ0Zyb21OdW1iZXIoYWJzb2x1dGVVVENPZmZzZXQgLyA2MCkpOwor
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHR3b0RpZ2l0U3RyaW5nRnJvbU51bWJlcihhYnNvbHV0
ZVVUQ09mZnNldCAlIDYwKSk7CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OworfQorfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNpZiBVU0UoSlNDKQorbmFtZXNwYWNlIEpTQyB7
CisKKy8vIEdldCB0aGUgRFNUIG9mZnNldCBmb3IgdGhlIHRpbWUgcGFzc2VkIGluLgorLy8KKy8v
IE5PVEU6IFRoZSBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBubyB0aW1l
IHpvbmVzIGhhdmUKKy8vIG1vcmUgdGhhbiBvbmUgZGF5bGlnaHQgc2F2aW5ncyBvZmZzZXQgY2hh
bmdlIHBlciBtb250aC4KKy8vIElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggTmFOIGl0
IHJldHVybnMgTmFOLgorc3RhdGljIGRvdWJsZSBnZXREU1RPZmZzZXQoRXhlY1N0YXRlKiBleGVj
LCBkb3VibGUgbXMsIGRvdWJsZSB1dGNPZmZzZXQpCit7CisgICAgRFNUT2Zmc2V0Q2FjaGUmIGNh
Y2hlID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmRzdE9mZnNldENhY2hlOworICAgIGRvdWJsZSBzdGFy
dCA9IGNhY2hlLnN0YXJ0OworICAgIGRvdWJsZSBlbmQgPSBjYWNoZS5lbmQ7CisKKyAgICBpZiAo
c3RhcnQgPD0gbXMpIHsKKyAgICAgICAgLy8gSWYgdGhlIHRpbWUgZml0cyBpbiB0aGUgY2FjaGVk
IGludGVydmFsLCByZXR1cm4gdGhlIGNhY2hlZCBvZmZzZXQuCisgICAgICAgIGlmIChtcyA8PSBl
bmQpIHJldHVybiBjYWNoZS5vZmZzZXQ7CisKKyAgICAgICAgLy8gQ29tcHV0ZSBhIHBvc3NpYmxl
IG5ldyBpbnRlcnZhbCBlbmQuCisgICAgICAgIGRvdWJsZSBuZXdFbmQgPSBlbmQgKyBjYWNoZS5p
bmNyZW1lbnQ7CisKKyAgICAgICAgaWYgKG1zIDw9IG5ld0VuZCkgeworICAgICAgICAgICAgZG91
YmxlIGVuZE9mZnNldCA9IGNhbGN1bGF0ZURTVE9mZnNldChuZXdFbmQsIHV0Y09mZnNldCk7Cisg
ICAgICAgICAgICBpZiAoY2FjaGUub2Zmc2V0ID09IGVuZE9mZnNldCkgeworICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBvZmZzZXQgYXQgdGhlIGVuZCBvZiB0aGUgbmV3IGludGVydmFsIHN0aWxs
IG1hdGNoZXMKKyAgICAgICAgICAgICAgICAvLyB0aGUgb2Zmc2V0IGluIHRoZSBjYWNoZSwgd2Ug
Z3JvdyB0aGUgY2FjaGVkIHRpbWUgaW50ZXJ2YWwKKyAgICAgICAgICAgICAgICAvLyBhbmQgcmV0
dXJuIHRoZSBvZmZzZXQuCisgICAgICAgICAgICAgICAgY2FjaGUuZW5kID0gbmV3RW5kOworICAg
ICAgICAgICAgICAgIGNhY2hlLmluY3JlbWVudCA9IG1zUGVyTW9udGg7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVuZE9mZnNldDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgZG91YmxlIG9mZnNldCA9IGNhbGN1bGF0ZURTVE9mZnNldChtcywgdXRjT2Zmc2V0KTsKKyAg
ICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09IGVuZE9mZnNldCkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgb2Zmc2V0IGF0IHRoZSBnaXZlbiB0aW1lIGlzIGVxdWFsIHRvIHRoZSBvZmZz
ZXQgYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIG5ldyBlbmQgb2YgdGhlIGludGVydmFs
LCBzbyB0aGF0IG1lYW5zIHRoYXQgd2UndmUganVzdCBza2lwcGVkCisgICAgICAgICAgICAgICAg
ICAgIC8vIHRoZSBwb2ludCBpbiB0aW1lIHdoZXJlIHRoZSBEU1Qgb2Zmc2V0IGNoYW5nZSBvY2N1
cnJlZC4gVXBkYXRlZAorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgaW50ZXJ2YWwgdG8gcmVm
bGVjdCB0aGlzIGFuZCByZXNldCB0aGUgaW5jcmVtZW50LgorICAgICAgICAgICAgICAgICAgICBj
YWNoZS5zdGFydCA9IG1zOworICAgICAgICAgICAgICAgICAgICBjYWNoZS5lbmQgPSBuZXdFbmQ7
CisgICAgICAgICAgICAgICAgICAgIGNhY2hlLmluY3JlbWVudCA9IG1zUGVyTW9udGg7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGludGVydmFs
IGNvbnRhaW5zIGEgRFNUIG9mZnNldCBjaGFuZ2UgYW5kIHRoZSBnaXZlbiB0aW1lIGlzCisgICAg
ICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBpdC4gQWRqdXN0IHRoZSBpbmNyZW1lbnQgdG8gYXZv
aWQgYSBsaW5lYXIgc2VhcmNoIGZvcgorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb2Zmc2V0
IGNoYW5nZSBwb2ludCBhbmQgY2hhbmdlIHRoZSBlbmQgb2YgdGhlIGludGVydmFsLgorICAgICAg
ICAgICAgICAgICAgICBjYWNoZS5pbmNyZW1lbnQgLz0gMzsKKyAgICAgICAgICAgICAgICAgICAg
Y2FjaGUuZW5kID0gbXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFVw
ZGF0ZSB0aGUgb2Zmc2V0IGluIHRoZSBjYWNoZSBhbmQgcmV0dXJuIGl0LgorICAgICAgICAgICAg
ICAgIGNhY2hlLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ29tcHV0ZSB0aGUg
RFNUIG9mZnNldCBmb3IgdGhlIHRpbWUgYW5kIHNocmluayB0aGUgY2FjaGUgaW50ZXJ2YWwKKyAg
ICAvLyB0byBvbmx5IGNvbnRhaW4gdGhlIHRpbWUuIFRoaXMgYWxsb3dzIGZhc3QgcmVwZWF0ZWQg
RFNUIG9mZnNldAorICAgIC8vIGNvbXB1dGF0aW9ucyBmb3IgdGhlIHNhbWUgdGltZS4KKyAgICBk
b3VibGUgb2Zmc2V0ID0gY2FsY3VsYXRlRFNUT2Zmc2V0KG1zLCB1dGNPZmZzZXQpOworICAgIGNh
Y2hlLm9mZnNldCA9IG9mZnNldDsKKyAgICBjYWNoZS5zdGFydCA9IG1zOworICAgIGNhY2hlLmVu
ZCA9IG1zOworICAgIGNhY2hlLmluY3JlbWVudCA9IG1zUGVyTW9udGg7CisgICAgcmV0dXJuIG9m
ZnNldDsKK30KKworLyoKKyAqIEdldCB0aGUgZGlmZmVyZW5jZSBpbiBtaWxsaXNlY29uZHMgYmV0
d2VlbiB0aGlzIHRpbWUgem9uZSBhbmQgVVRDIChHTVQpCisgKiBOT1QgaW5jbHVkaW5nIERTVC4K
KyAqLworZG91YmxlIGdldFVUQ09mZnNldChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgZG91Ymxl
IHV0Y09mZnNldCA9IGV4ZWMtPmdsb2JhbERhdGEoKS5jYWNoZWRVVENPZmZzZXQ7CisgICAgaWYg
KCFpc25hbih1dGNPZmZzZXQpKQorICAgICAgICByZXR1cm4gdXRjT2Zmc2V0OworICAgIGV4ZWMt
Pmdsb2JhbERhdGEoKS5jYWNoZWRVVENPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKKyAg
ICByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLmNhY2hlZFVUQ09mZnNldDsKK30KKworZG91Ymxl
IGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEdyZWdvcmlhbkRh
dGVUaW1lJiB0LCBkb3VibGUgbWlsbGlTZWNvbmRzLCBib29sIGlucHV0SXNVVEMpCit7CisgICAg
ZG91YmxlIGRheSA9IGRhdGVUb0RheXNGcm9tMTk3MCh0LnllYXIgKyAxOTAwLCB0Lm1vbnRoLCB0
Lm1vbnRoRGF5KTsKKyAgICBkb3VibGUgbXMgPSB0aW1lVG9NUyh0LmhvdXIsIHQubWludXRlLCB0
LnNlY29uZCwgbWlsbGlTZWNvbmRzKTsKKyAgICBkb3VibGUgcmVzdWx0ID0gKGRheSAqIFdURjo6
bXNQZXJEYXkpICsgbXM7CisKKyAgICBpZiAoIWlucHV0SXNVVEMpIHsgLy8gY29udmVydCB0byBV
VEMKKyAgICAgICAgZG91YmxlIHV0Y09mZnNldCA9IGdldFVUQ09mZnNldChleGVjKTsKKyAgICAg
ICAgcmVzdWx0IC09IHV0Y09mZnNldDsKKyAgICAgICAgcmVzdWx0IC09IGdldERTVE9mZnNldChl
eGVjLCByZXN1bHQsIHV0Y09mZnNldCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworLy8gaW5wdXQgaXMgVVRDCit2b2lkIG1zVG9HcmVnb3JpYW5EYXRlVGltZShFeGVjU3RhdGUq
IGV4ZWMsIGRvdWJsZSBtcywgYm9vbCBvdXRwdXRJc1VUQywgR3JlZ29yaWFuRGF0ZVRpbWUmIHRt
KQoreworICAgIGRvdWJsZSBkc3RPZmYgPSAwLjA7CisgICAgZG91YmxlIHV0Y09mZiA9IDAuMDsK
KyAgICBpZiAoIW91dHB1dElzVVRDKSB7CisgICAgICAgIHV0Y09mZiA9IGdldFVUQ09mZnNldChl
eGVjKTsKKyAgICAgICAgZHN0T2ZmID0gZ2V0RFNUT2Zmc2V0KGV4ZWMsIG1zLCB1dGNPZmYpOwor
ICAgICAgICBtcyArPSBkc3RPZmYgKyB1dGNPZmY7CisgICAgfQorCisgICAgY29uc3QgaW50IHll
YXIgPSBtc1RvWWVhcihtcyk7CisgICAgdG0uc2Vjb25kICAgPSAgbXNUb1NlY29uZHMobXMpOwor
ICAgIHRtLm1pbnV0ZSAgID0gIG1zVG9NaW51dGVzKG1zKTsKKyAgICB0bS5ob3VyICAgICA9ICBt
c1RvSG91cnMobXMpOworICAgIHRtLndlZWtEYXkgID0gIG1zVG9XZWVrRGF5KG1zKTsKKyAgICB0
bS55ZWFyRGF5ICA9ICBkYXlJblllYXIobXMsIHllYXIpOworICAgIHRtLm1vbnRoRGF5ID0gIGRh
eUluTW9udGhGcm9tRGF5SW5ZZWFyKHRtLnllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOworICAg
IHRtLm1vbnRoICAgID0gIG1vbnRoRnJvbURheUluWWVhcih0bS55ZWFyRGF5LCBpc0xlYXBZZWFy
KHllYXIpKTsKKyAgICB0bS55ZWFyICAgICA9ICB5ZWFyIC0gMTkwMDsKKyAgICB0bS5pc0RTVCAg
ICA9ICBkc3RPZmYgIT0gMC4wOworICAgIHRtLnV0Y09mZnNldCA9IHN0YXRpY19jYXN0PGxvbmc+
KChkc3RPZmYgKyB1dGNPZmYpIC8gV1RGOjptc1BlclNlY29uZCk7CisgICAgdG0udGltZVpvbmUg
PSBudWxscHRyOworfQorCitkb3VibGUgcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFj
dGVycyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpCit7CisgICAgQVNT
RVJUKGV4ZWMpOworICAgIGJvb2wgaGF2ZVRaOworICAgIGludCBvZmZzZXQ7CisgICAgZG91Ymxl
IG1zID0gV1RGOjpwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGRhdGVTdHJp
bmcsIGhhdmVUWiwgb2Zmc2V0KTsKKyAgICBpZiAoaXNuYW4obXMpKQorICAgICAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKworICAgIC8vIGZhbGwg
YmFjayB0byBsb2NhbCB0aW1lem9uZQorICAgIGlmICghaGF2ZVRaKSB7CisgICAgICAgIGRvdWJs
ZSB1dGNPZmZzZXQgPSBnZXRVVENPZmZzZXQoZXhlYyk7CisgICAgICAgIGRvdWJsZSBkc3RPZmZz
ZXQgPSBnZXREU1RPZmZzZXQoZXhlYywgbXMsIHV0Y09mZnNldCk7CisgICAgICAgIG9mZnNldCA9
IHN0YXRpY19jYXN0PGludD4oKHV0Y09mZnNldCArIGRzdE9mZnNldCkgLyBXVEY6Om1zUGVyTWlu
dXRlKTsKKyAgICB9CisgICAgcmV0dXJuIG1zIC0gKG9mZnNldCAqIFdURjo6bXNQZXJNaW51dGUp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKyNlbmRpZiAvLyBVU0UoSlNDKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAJKHJldmlzaW9uIDEw
MDE3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MCwxOCArNzAsMTQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRGF0ZU1hdGguaCIKKyNpbmNsdWRlICJKU0RhdGVNYXRoLmgiCiAKICNp
bmNsdWRlICJBc3NlcnRpb25zLmgiCiAjaW5jbHVkZSAiQVNDSUlDVHlwZS5oIgogI2luY2x1ZGUg
IkN1cnJlbnRUaW1lLmgiCi0jaWYgVVNFKEpTQykKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2Vu
ZGlmCiAjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgotI2lmIFVTRShKU0MpCiAjaW5jbHVkZSAiU2Nv
cGVDaGFpbi5oIgotI2VuZGlmCiAjaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCiAjaW5jbHVkZSAi
U3RyaW5nRXh0cmFzLmgiCiAKQEAgLTEwOSwxMDUgKzEwNSwyMSBAQCBleHRlcm4gIkMiIHN0cnVj
dCB0bSAqIGxvY2FsdGltZShjb25zdCB0CiAjaW5jbHVkZSA8c3lzL3RpbWViLmg+CiAjZW5kaWYK
IAotI2lmIFVTRShKU0MpCi0jaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCi0jZW5kaWYKLQogdXNpbmcg
bmFtZXNwYWNlIFdURjsKIAotbmFtZXNwYWNlIFdURiB7Ci0KLS8qIENvbnN0YW50cyAqLwotCi1z
dGF0aWMgY29uc3QgZG91YmxlIG1pbnV0ZXNQZXJEYXkgPSAyNC4wICogNjAuMDsKLXN0YXRpYyBj
b25zdCBkb3VibGUgc2Vjb25kc1BlckRheSA9IDI0LjAgKiA2MC4wICogNjAuMDsKLXN0YXRpYyBj
b25zdCBkb3VibGUgc2Vjb25kc1BlclllYXIgPSAyNC4wICogNjAuMCAqIDYwLjAgKiAzNjUuMDsK
LQotc3RhdGljIGNvbnN0IGRvdWJsZSB1c2VjUGVyU2VjID0gMTAwMDAwMC4wOwotCi1zdGF0aWMg
Y29uc3QgZG91YmxlIG1heFVuaXhUaW1lID0gMjE0NTg1OTIwMC4wOyAvLyAxMi8zMS8yMDM3Ci0v
LyBFQ01BU2NyaXB0IGFza3Mgbm90IHRvIHN1cHBvcnQgZm9yIGEgZGF0ZSBvZiB3aGljaCB0b3Rh
bAotLy8gbWlsbGlzZWNvbmQgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdGhlIGZvbGxvd2luZyB2YWx1
ZS4KLS8vIFNlZSAxNS45LjEuMTQgb2YgRUNNQS0yNjIgNXRoIGVkaXRpb24uCi1zdGF0aWMgY29u
c3QgZG91YmxlIG1heEVDTUFTY3JpcHRUaW1lID0gOC42NEUxNTsKLQotLy8gRGF5IG9mIHllYXIg
Zm9yIHRoZSBmaXJzdCBkYXkgb2YgZWFjaCBtb250aCwgd2hlcmUgaW5kZXggMCBpcyBKYW51YXJ5
LCBhbmQgZGF5IDAgaXMgSmFudWFyeSAxLgotLy8gRmlyc3QgZm9yIG5vbi1sZWFwIHllYXJzLCB0
aGVuIGZvciBsZWFwIHllYXJzLgotc3RhdGljIGNvbnN0IGludCBmaXJzdERheU9mTW9udGhbMl1b
MTJdID0gewotICAgIHswLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjcz
LCAzMDQsIDMzNH0sCi0gICAgezAsIDMxLCA2MCwgOTEsIDEyMSwgMTUyLCAxODIsIDIxMywgMjQ0
LCAyNzQsIDMwNSwgMzM1fQotfTsKLQotc3RhdGljIGlubGluZSBib29sIGlzTGVhcFllYXIoaW50
IHllYXIpCi17Ci0gICAgaWYgKHllYXIgJSA0ICE9IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoeWVhciAlIDQwMCA9PSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAo
eWVhciAlIDEwMCA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRheXNJblllYXIoaW50IHllYXIpCi17Ci0gICAgcmV0
dXJuIDM2NSArIGlzTGVhcFllYXIoeWVhcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIGRh
eXNGcm9tMTk3MFRvWWVhcihpbnQgeWVhcikKLXsKLSAgICAvLyBUaGUgR3JlZ29yaWFuIENhbGVu
ZGFyIHJ1bGVzIGZvciBsZWFwIHllYXJzOgotICAgIC8vIEV2ZXJ5IGZvdXJ0aCB5ZWFyIGlzIGEg
bGVhcCB5ZWFyLiAgMjAwNCwgMjAwOCwgYW5kIDIwMTIgYXJlIGxlYXAgeWVhcnMuCi0gICAgLy8g
SG93ZXZlciwgZXZlcnkgaHVuZHJlZHRoIHllYXIgaXMgbm90IGEgbGVhcCB5ZWFyLiAgMTkwMCBh
bmQgMjEwMCBhcmUgbm90IGxlYXAgeWVhcnMuCi0gICAgLy8gRXZlcnkgZm91ciBodW5kcmVkIHll
YXJzLCB0aGVyZSdzIGEgbGVhcCB5ZWFyIGFmdGVyIGFsbC4gIDIwMDAgYW5kIDI0MDAgYXJlIGxl
YXAgeWVhcnMuCi0KLSAgICBzdGF0aWMgY29uc3QgaW50IGxlYXBEYXlzQmVmb3JlMTk3MUJ5NFJ1
bGUgPSAxOTcwIC8gNDsKLSAgICBzdGF0aWMgY29uc3QgaW50IGV4Y2x1ZGVkTGVhcERheXNCZWZv
cmUxOTcxQnkxMDBSdWxlID0gMTk3MCAvIDEwMDsKLSAgICBzdGF0aWMgY29uc3QgaW50IGxlYXBE
YXlzQmVmb3JlMTk3MUJ5NDAwUnVsZSA9IDE5NzAgLyA0MDA7Ci0KLSAgICBjb25zdCBkb3VibGUg
eWVhck1pbnVzT25lID0geWVhciAtIDE7Ci0gICAgY29uc3QgZG91YmxlIHllYXJzVG9BZGRCeTRS
dWxlID0gZmxvb3IoeWVhck1pbnVzT25lIC8gNC4wKSAtIGxlYXBEYXlzQmVmb3JlMTk3MUJ5NFJ1
bGU7Ci0gICAgY29uc3QgZG91YmxlIHllYXJzVG9FeGNsdWRlQnkxMDBSdWxlID0gZmxvb3IoeWVh
ck1pbnVzT25lIC8gMTAwLjApIC0gZXhjbHVkZWRMZWFwRGF5c0JlZm9yZTE5NzFCeTEwMFJ1bGU7
Ci0gICAgY29uc3QgZG91YmxlIHllYXJzVG9BZGRCeTQwMFJ1bGUgPSBmbG9vcih5ZWFyTWludXNP
bmUgLyA0MDAuMCkgLSBsZWFwRGF5c0JlZm9yZTE5NzFCeTQwMFJ1bGU7Ci0KLSAgICByZXR1cm4g
MzY1LjAgKiAoeWVhciAtIDE5NzApICsgeWVhcnNUb0FkZEJ5NFJ1bGUgLSB5ZWFyc1RvRXhjbHVk
ZUJ5MTAwUnVsZSArIHllYXJzVG9BZGRCeTQwMFJ1bGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91
YmxlIG1zVG9EYXlzKGRvdWJsZSBtcykKLXsKLSAgICByZXR1cm4gZmxvb3IobXMgLyBtc1BlckRh
eSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgdHdvRGlnaXRTdHJpbmdGcm9tTnVtYmVyKGludCBudW1i
ZXIpCi17Ci0gICAgQVNTRVJUKG51bWJlciA+PSAwICYmIG51bWJlciA8IDEwMCk7Ci0gICAgaWYg
KG51bWJlciA+IDkpCi0gICAgICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihudW1iZXIpOwotICAg
IHJldHVybiBtYWtlU3RyaW5nKCIwIiwgU3RyaW5nOjpudW1iZXIobnVtYmVyKSk7Ci19Ci0KLWlu
dCBtc1RvWWVhcihkb3VibGUgbXMpCi17Ci0gICAgaW50IGFwcHJveFllYXIgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yKG1zIC8gKG1zUGVyRGF5ICogMzY1LjI0MjUpKSArIDE5NzApOwotICAgIGRv
dWJsZSBtc0Zyb21BcHByb3hZZWFyVG8xOTcwID0gbXNQZXJEYXkgKiBkYXlzRnJvbTE5NzBUb1ll
YXIoYXBwcm94WWVhcik7Ci0gICAgaWYgKG1zRnJvbUFwcHJveFllYXJUbzE5NzAgPiBtcykKLSAg
ICAgICAgcmV0dXJuIGFwcHJveFllYXIgLSAxOwotICAgIGlmIChtc0Zyb21BcHByb3hZZWFyVG8x
OTcwICsgbXNQZXJEYXkgKiBkYXlzSW5ZZWFyKGFwcHJveFllYXIpIDw9IG1zKQotICAgICAgICBy
ZXR1cm4gYXBwcm94WWVhciArIDE7Ci0gICAgcmV0dXJuIGFwcHJveFllYXI7Ci19CituYW1lc3Bh
Y2UgSlNDIHsKIAotaW50IGRheUluWWVhcihkb3VibGUgbXMsIGludCB5ZWFyKQorc3RhdGljIGlu
bGluZSBkb3VibGUgdGltZVRvTVMoZG91YmxlIGhvdXIsIGRvdWJsZSBtaW4sIGRvdWJsZSBzZWMs
IGRvdWJsZSBtcykKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihtc1RvRGF5cyhtcykg
LSBkYXlzRnJvbTE5NzBUb1llYXIoeWVhcikpOworICAgIHJldHVybiAoKChob3VyICogbWludXRl
c1BlckhvdXIgKyBtaW4pICogc2Vjb25kc1Blck1pbnV0ZSArIHNlYykgKiBtc1BlclNlY29uZCAr
IG1zKTsKIH0KIAotc3RhdGljIGlubGluZSBkb3VibGUgbXNUb01pbGxpc2Vjb25kcyhkb3VibGUg
bXMpCitzdGF0aWMgaW5saW5lIGludCBtc1RvU2Vjb25kcyhkb3VibGUgbXMpCiB7Ci0gICAgZG91
YmxlIHJlc3VsdCA9IGZtb2QobXMsIG1zUGVyRGF5KTsKKyAgICBkb3VibGUgcmVzdWx0ID0gZm1v
ZChmbG9vcihtcyAvIG1zUGVyU2Vjb25kKSwgc2Vjb25kc1Blck1pbnV0ZSk7CiAgICAgaWYgKHJl
c3VsdCA8IDApCi0gICAgICAgIHJlc3VsdCArPSBtc1BlckRheTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICByZXN1bHQgKz0gc2Vjb25kc1Blck1pbnV0ZTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihyZXN1bHQpOwogfQogCiAvLyAwOiBTdW5kYXksIDE6IE1vbmRheSwgZXRjLgpA
QCAtMjE5LDg0MCArMTMxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgbXNUb1dlZWtEYXkoZG91Ymxl
IG1zKQogICAgIHJldHVybiB3ZDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbXNUb1NlY29uZHMo
ZG91YmxlIG1zKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBmbW9kKGZsb29yKG1zIC8gbXNQZXJT
ZWNvbmQpLCBzZWNvbmRzUGVyTWludXRlKTsKLSAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAg
cmVzdWx0ICs9IHNlY29uZHNQZXJNaW51dGU7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
cmVzdWx0KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbXNUb01pbnV0ZXMoZG91YmxlIG1zKQot
ewotICAgIGRvdWJsZSByZXN1bHQgPSBmbW9kKGZsb29yKG1zIC8gbXNQZXJNaW51dGUpLCBtaW51
dGVzUGVySG91cik7Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJlc3VsdCArPSBtaW51
dGVzUGVySG91cjsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQpOwotfQotCi1z
dGF0aWMgaW5saW5lIGludCBtc1RvSG91cnMoZG91YmxlIG1zKQotewotICAgIGRvdWJsZSByZXN1
bHQgPSBmbW9kKGZsb29yKG1zL21zUGVySG91ciksIGhvdXJzUGVyRGF5KTsKLSAgICBpZiAocmVz
dWx0IDwgMCkKLSAgICAgICAgcmVzdWx0ICs9IGhvdXJzUGVyRGF5OwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KHJlc3VsdCk7Ci19Ci0KLWludCBtb250aEZyb21EYXlJblllYXIoaW50IGRh
eUluWWVhciwgYm9vbCBsZWFwWWVhcikKLXsKLSAgICBjb25zdCBpbnQgZCA9IGRheUluWWVhcjsK
LSAgICBpbnQgc3RlcDsKLQotICAgIGlmIChkIDwgKHN0ZXAgPSAzMSkpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHN0ZXAgKz0gKGxlYXBZZWFyID8gMjkgOiAyOCk7Ci0gICAgaWYgKGQgPCBzdGVw
KQotICAgICAgICByZXR1cm4gMTsKLSAgICBpZiAoZCA8IChzdGVwICs9IDMxKSkKLSAgICAgICAg
cmV0dXJuIDI7Ci0gICAgaWYgKGQgPCAoc3RlcCArPSAzMCkpCi0gICAgICAgIHJldHVybiAzOwot
ICAgIGlmIChkIDwgKHN0ZXAgKz0gMzEpKQotICAgICAgICByZXR1cm4gNDsKLSAgICBpZiAoZCA8
IChzdGVwICs9IDMwKSkKLSAgICAgICAgcmV0dXJuIDU7Ci0gICAgaWYgKGQgPCAoc3RlcCArPSAz
MSkpCi0gICAgICAgIHJldHVybiA2OwotICAgIGlmIChkIDwgKHN0ZXAgKz0gMzEpKQotICAgICAg
ICByZXR1cm4gNzsKLSAgICBpZiAoZCA8IChzdGVwICs9IDMwKSkKLSAgICAgICAgcmV0dXJuIDg7
Ci0gICAgaWYgKGQgPCAoc3RlcCArPSAzMSkpCi0gICAgICAgIHJldHVybiA5OwotICAgIGlmIChk
IDwgKHN0ZXAgKz0gMzApKQotICAgICAgICByZXR1cm4gMTA7Ci0gICAgcmV0dXJuIDExOwotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tNb250aChpbnQgZGF5SW5ZZWFyLCBpbnQmIHN0YXJ0
RGF5T2ZUaGlzTW9udGgsIGludCYgc3RhcnREYXlPZk5leHRNb250aCwgaW50IGRheXNJblRoaXNN
b250aCkKLXsKLSAgICBzdGFydERheU9mVGhpc01vbnRoID0gc3RhcnREYXlPZk5leHRNb250aDsK
LSAgICBzdGFydERheU9mTmV4dE1vbnRoICs9IGRheXNJblRoaXNNb250aDsKLSAgICByZXR1cm4g
KGRheUluWWVhciA8PSBzdGFydERheU9mTmV4dE1vbnRoKTsKLX0KLQotaW50IGRheUluTW9udGhG
cm9tRGF5SW5ZZWFyKGludCBkYXlJblllYXIsIGJvb2wgbGVhcFllYXIpCi17Ci0gICAgY29uc3Qg
aW50IGQgPSBkYXlJblllYXI7Ci0gICAgaW50IHN0ZXA7Ci0gICAgaW50IG5leHQgPSAzMDsKLQot
ICAgIGlmIChkIDw9IG5leHQpCi0gICAgICAgIHJldHVybiBkICsgMTsKLSAgICBjb25zdCBpbnQg
ZGF5c0luRmViID0gKGxlYXBZZWFyID8gMjkgOiAyOCk7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwg
c3RlcCwgbmV4dCwgZGF5c0luRmViKSkKLSAgICAgICAgcmV0dXJuIGQgLSBzdGVwOwotICAgIGlm
IChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMxKSkKLSAgICAgICAgcmV0dXJuIGQgLSBzdGVw
OwotICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMwKSkKLSAgICAgICAgcmV0dXJu
IGQgLSBzdGVwOwotICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMxKSkKLSAgICAg
ICAgcmV0dXJuIGQgLSBzdGVwOwotICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMw
KSkKLSAgICAgICAgcmV0dXJuIGQgLSBzdGVwOwotICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAs
IG5leHQsIDMxKSkKLSAgICAgICAgcmV0dXJuIGQgLSBzdGVwOwotICAgIGlmIChjaGVja01vbnRo
KGQsIHN0ZXAsIG5leHQsIDMxKSkKLSAgICAgICAgcmV0dXJuIGQgLSBzdGVwOwotICAgIGlmIChj
aGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMwKSkKLSAgICAgICAgcmV0dXJuIGQgLSBzdGVwOwot
ICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMxKSkKLSAgICAgICAgcmV0dXJuIGQg
LSBzdGVwOwotICAgIGlmIChjaGVja01vbnRoKGQsIHN0ZXAsIG5leHQsIDMwKSkKLSAgICAgICAg
cmV0dXJuIGQgLSBzdGVwOwotICAgIHN0ZXAgPSBuZXh0OwotICAgIHJldHVybiBkIC0gc3RlcDsK
LX0KLQotc3RhdGljIGlubGluZSBpbnQgbW9udGhUb0RheUluWWVhcihpbnQgbW9udGgsIGJvb2wg
aXNMZWFwWWVhcikKLXsKLSAgICByZXR1cm4gZmlyc3REYXlPZk1vbnRoW2lzTGVhcFllYXJdW21v
bnRoXTsKLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgdGltZVRvTVMoZG91YmxlIGhvdXIsIGRv
dWJsZSBtaW4sIGRvdWJsZSBzZWMsIGRvdWJsZSBtcykKLXsKLSAgICByZXR1cm4gKCgoaG91ciAq
IG1pbnV0ZXNQZXJIb3VyICsgbWluKSAqIHNlY29uZHNQZXJNaW51dGUgKyBzZWMpICogbXNQZXJT
ZWNvbmQgKyBtcyk7Ci19Ci0KLWRvdWJsZSBkYXRlVG9EYXlzRnJvbTE5NzAoaW50IHllYXIsIGlu
dCBtb250aCwgaW50IGRheSkKLXsKLSAgICB5ZWFyICs9IG1vbnRoIC8gMTI7Ci0KLSAgICBtb250
aCAlPSAxMjsKLSAgICBpZiAobW9udGggPCAwKSB7Ci0gICAgICAgIG1vbnRoICs9IDEyOwotICAg
ICAgICAtLXllYXI7Ci0gICAgfQotCi0gICAgZG91YmxlIHllYXJkYXkgPSBmbG9vcihkYXlzRnJv
bTE5NzBUb1llYXIoeWVhcikpOwotICAgIEFTU0VSVCgoeWVhciA+PSAxOTcwICYmIHllYXJkYXkg
Pj0gMCkgfHwgKHllYXIgPCAxOTcwICYmIHllYXJkYXkgPCAwKSk7Ci0gICAgaW50IG1vbnRoZGF5
ID0gbW9udGhUb0RheUluWWVhcihtb250aCwgaXNMZWFwWWVhcih5ZWFyKSk7Ci0KLSAgICByZXR1
cm4geWVhcmRheSArIG1vbnRoZGF5ICsgZGF5IC0gMTsKLX0KLQotLy8gVGhlcmUgaXMgYSBoYXJk
IGxpbWl0IGF0IDIwMzggdGhhdCB3ZSBjdXJyZW50bHkgZG8gbm90IGhhdmUgYSB3b3JrYXJvdW5k
Ci0vLyBmb3IgKHJkYXI6Ly9wcm9ibGVtLzUwNTI5NzUpLgotc3RhdGljIGlubGluZSBpbnQgbWF4
aW11bVllYXJGb3JEU1QoKQotewotICAgIHJldHVybiAyMDM3OwotfQotCi1zdGF0aWMgaW5saW5l
IGludCBtaW5pbXVtWWVhckZvckRTVCgpCi17Ci0gICAgLy8gQmVjYXVzZSBvZiB0aGUgMjAzOCBp
c3N1ZSAoc2VlIG1heGltdW1ZZWFyRm9yRFNUKSBpZiB0aGUgY3VycmVudCB5ZWFyIGlzCi0gICAg
Ly8gZ3JlYXRlciB0aGFuIHRoZSBtYXggeWVhciBtaW51cyAyNyAoMjAxMCksIHdlIHdhbnQgdG8g
dXNlIHRoZSBtYXggeWVhcgotICAgIC8vIG1pbnVzIDI3IGluc3RlYWQsIHRvIGVuc3VyZSB0aGVy
ZSBpcyBhIHJhbmdlIG9mIDI4IHllYXJzIHRoYXQgYWxsIHllYXJzCi0gICAgLy8gY2FuIG1hcCB0
by4KLSAgICByZXR1cm4gc3RkOjptaW4obXNUb1llYXIoanNDdXJyZW50VGltZSgpKSwgbWF4aW11
bVllYXJGb3JEU1QoKSAtIDI3KSA7Ci19Ci0KLS8qCi0gKiBGaW5kIGFuIGVxdWl2YWxlbnQgeWVh
ciBmb3IgdGhlIG9uZSBnaXZlbiwgd2hlcmUgZXF1aXZhbGVuY2UgaXMgZGV0ZXJpbmVkIGJ5Ci0g
KiB0aGUgdHdvIHllYXJzIGhhdmluZyB0aGUgc2FtZSBsZWFwbmVzcyBhbmQgdGhlIGZpcnN0IGRh
eSBvZiB0aGUgeWVhciwgZmFsbGluZwotICogb24gdGhlIHNhbWUgZGF5IG9mIHRoZSB3ZWVrLgot
ICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHllYXIgYmV0d2VlbiB0aGlzIGN1cnJlbnQg
eWVhciBhbmQgMjAzNywgaG93ZXZlciB0aGlzCi0gKiBmdW5jdGlvbiB3aWxsIHBvdGVudGlhbGx5
IHJldHVybiBpbmNvcnJlY3QgcmVzdWx0cyBpZiB0aGUgY3VycmVudCB5ZWFyIGlzIGFmdGVyCi0g
KiAyMDEwLCAocmRhcjovL3Byb2JsZW0vNTA1Mjk3NSksIGlmIHRoZSB5ZWFyIHBhc3NlZCBpbiBp
cyBiZWZvcmUgMTkwMCBvciBhZnRlcgotICogMjEwMCwgKHJkYXI6Ly9wcm9ibGVtLzUwNTUwMzgp
LgotICovCi1pbnQgZXF1aXZhbGVudFllYXJGb3JEU1QoaW50IHllYXIpCi17Ci0gICAgLy8gSXQg
aXMgb2sgaWYgdGhlIGNhY2hlZCB5ZWFyIGlzIG5vdCB0aGUgY3VycmVudCB5ZWFyIGFzIGxvbmcg
YXMgdGhlIHJ1bGVzCi0gICAgLy8gZm9yIERTVCBkaWQgbm90IGNoYW5nZSBiZXR3ZWVuIHRoZSB0
d28geWVhcnM7IGlmIHRoZXkgZGlkIHRoZSBhcHAgd291bGQgbmVlZAotICAgIC8vIHRvIGJlIHJl
c3RhcnRlZC4KLSAgICBzdGF0aWMgaW50IG1pblllYXIgPSBtaW5pbXVtWWVhckZvckRTVCgpOwot
ICAgIGludCBtYXhZZWFyID0gbWF4aW11bVllYXJGb3JEU1QoKTsKLQotICAgIGludCBkaWZmZXJl
bmNlOwotICAgIGlmICh5ZWFyID4gbWF4WWVhcikKLSAgICAgICAgZGlmZmVyZW5jZSA9IG1pblll
YXIgLSB5ZWFyOwotICAgIGVsc2UgaWYgKHllYXIgPCBtaW5ZZWFyKQotICAgICAgICBkaWZmZXJl
bmNlID0gbWF4WWVhciAtIHllYXI7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4geWVhcjsKLQot
ICAgIGludCBxdW90aWVudCA9IGRpZmZlcmVuY2UgLyAyODsKLSAgICBpbnQgcHJvZHVjdCA9IChx
dW90aWVudCkgKiAyODsKLQotICAgIHllYXIgKz0gcHJvZHVjdDsKLSAgICBBU1NFUlQoKHllYXIg
Pj0gbWluWWVhciAmJiB5ZWFyIDw9IG1heFllYXIpIHx8IChwcm9kdWN0IC0geWVhciA9PSBzdGF0
aWNfY2FzdDxpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkpKSk7
Ci0gICAgcmV0dXJuIHllYXI7Ci19Ci0KLWludDMyX3QgY2FsY3VsYXRlVVRDT2Zmc2V0KCkKLXsK
LSAgICB0aW1lX3QgbG9jYWxUaW1lID0gdGltZSgwKTsKLSAgICB0bSBsb2NhbHQ7Ci0gICAgZ2V0
TG9jYWxUaW1lKCZsb2NhbFRpbWUsICZsb2NhbHQpOwotCi0gICAgLy8gR2V0IHRoZSBkaWZmZXJl
bmNlIGJldHdlZW4gdGhpcyB0aW1lIHpvbmUgYW5kIFVUQyBvbiB0aGUgMXN0IG9mIEphbnVhcnkg
b2YgdGhpcyB5ZWFyLgotICAgIGxvY2FsdC50bV9zZWMgPSAwOwotICAgIGxvY2FsdC50bV9taW4g
PSAwOwotICAgIGxvY2FsdC50bV9ob3VyID0gMDsKLSAgICBsb2NhbHQudG1fbWRheSA9IDE7Ci0g
ICAgbG9jYWx0LnRtX21vbiA9IDA7Ci0gICAgLy8gTm90IHNldHRpbmcgbG9jYWx0LnRtX3llYXIh
Ci0gICAgbG9jYWx0LnRtX3dkYXkgPSAwOwotICAgIGxvY2FsdC50bV95ZGF5ID0gMDsKLSAgICBs
b2NhbHQudG1faXNkc3QgPSAwOwotI2lmIEhBVkUoVE1fR01UT0ZGKQotICAgIGxvY2FsdC50bV9n
bXRvZmYgPSAwOwotI2VuZGlmCi0jaWYgSEFWRShUTV9aT05FKQotICAgIGxvY2FsdC50bV96b25l
ID0gMDsKLSNlbmRpZgotICAgIAotI2lmIEhBVkUoVElNRUdNKQotICAgIHRpbWVfdCB1dGNPZmZz
ZXQgPSB0aW1lZ20oJmxvY2FsdCkgLSBta3RpbWUoJmxvY2FsdCk7Ci0jZWxzZQotICAgIC8vIFVz
aW5nIGEgY2FubmVkIGRhdGUgb2YgMDEvMDEvMjAwOSBvbiBwbGF0Zm9ybXMgd2l0aCB3ZWFrZXIg
ZGF0ZS1oYW5kbGluZyBmb28uCi0gICAgbG9jYWx0LnRtX3llYXIgPSAxMDk7Ci0gICAgdGltZV90
IHV0Y09mZnNldCA9IDEyMzA3NjgwMDAgLSBta3RpbWUoJmxvY2FsdCk7Ci0jZW5kaWYKLQotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih1dGNPZmZzZXQgKiAxMDAwKTsKLX0KLQotLyoK
LSAqIEdldCB0aGUgRFNUIG9mZnNldCBmb3IgdGhlIHRpbWUgcGFzc2VkIGluLgotICovCi1zdGF0
aWMgZG91YmxlIGNhbGN1bGF0ZURTVE9mZnNldFNpbXBsZShkb3VibGUgbG9jYWxUaW1lU2Vjb25k
cywgZG91YmxlIHV0Y09mZnNldCkKLXsKLSAgICBpZiAobG9jYWxUaW1lU2Vjb25kcyA+IG1heFVu
aXhUaW1lKQotICAgICAgICBsb2NhbFRpbWVTZWNvbmRzID0gbWF4VW5peFRpbWU7Ci0gICAgZWxz
ZSBpZiAobG9jYWxUaW1lU2Vjb25kcyA8IDApIC8vIEdvIGFoZWFkIGEgZGF5IHRvIG1ha2UgbG9j
YWx0aW1lIHdvcmsgKGRvZXMgbm90IHdvcmsgd2l0aCAwKQotICAgICAgICBsb2NhbFRpbWVTZWNv
bmRzICs9IHNlY29uZHNQZXJEYXk7Ci0KLSAgICAvL2lucHV0IGlzIFVUQyBzbyB3ZSBoYXZlIHRv
IHNoaWZ0IGJhY2sgdG8gbG9jYWwgdGltZSB0byBkZXRlcm1pbmUgRFNUIHRodXMgdGhlICsgZ2V0
VVRDT2Zmc2V0KCkKLSAgICBkb3VibGUgb2Zmc2V0VGltZSA9IChsb2NhbFRpbWVTZWNvbmRzICog
bXNQZXJTZWNvbmQpICsgdXRjT2Zmc2V0OwotCi0gICAgLy8gT2Zmc2V0IGZyb20gVVRDIGJ1dCBk
b2Vzbid0IGluY2x1ZGUgRFNUIG9idmlvdXNseQotICAgIGludCBvZmZzZXRIb3VyID0gIG1zVG9I
b3VycyhvZmZzZXRUaW1lKTsKLSAgICBpbnQgb2Zmc2V0TWludXRlID0gIG1zVG9NaW51dGVzKG9m
ZnNldFRpbWUpOwotCi0gICAgLy8gRklYTUU6IHRpbWVfdCBoYXMgYSBwb3RlbnRpYWwgcHJvYmxl
bSBpbiAyMDM4Ci0gICAgdGltZV90IGxvY2FsVGltZSA9IHN0YXRpY19jYXN0PHRpbWVfdD4obG9j
YWxUaW1lU2Vjb25kcyk7Ci0KLSAgICB0bSBsb2NhbFRNOwotICAgIGdldExvY2FsVGltZSgmbG9j
YWxUaW1lLCAmbG9jYWxUTSk7Ci0KLSAgICBkb3VibGUgZGlmZiA9ICgobG9jYWxUTS50bV9ob3Vy
IC0gb2Zmc2V0SG91cikgKiBzZWNvbmRzUGVySG91cikgKyAoKGxvY2FsVE0udG1fbWluIC0gb2Zm
c2V0TWludXRlKSAqIDYwKTsKLQotICAgIGlmIChkaWZmIDwgMCkKLSAgICAgICAgZGlmZiArPSBz
ZWNvbmRzUGVyRGF5OwotCi0gICAgcmV0dXJuIChkaWZmICogbXNQZXJTZWNvbmQpOwotfQotCi0v
LyBHZXQgdGhlIERTVCBvZmZzZXQsIGdpdmVuIGEgdGltZSBpbiBVVEMKLWRvdWJsZSBjYWxjdWxh
dGVEU1RPZmZzZXQoZG91YmxlIG1zLCBkb3VibGUgdXRjT2Zmc2V0KQotewotICAgIC8vIE9uIE1h
YyBPUyBYLCB0aGUgY2FsbCB0byBsb2NhbHRpbWUgKHNlZSBjYWxjdWxhdGVEU1RPZmZzZXRTaW1w
bGUpIHdpbGwgcmV0dXJuIGhpc3RvcmljYWxseSBhY2N1cmF0ZQotICAgIC8vIERTVCBpbmZvcm1h
dGlvbiAoZS5nLiBOZXcgWmVhbGFuZCBkaWQgbm90IGhhdmUgRFNUIGZyb20gMTk0NiB0byAxOTc0
KSBob3dldmVyIHRoZSBKYXZhU2NyaXB0Ci0gICAgLy8gc3RhbmRhcmQgZXhwbGljaXRseSBkaWN0
YXRlcyB0aGF0IGhpc3RvcmljYWwgaW5mb3JtYXRpb24gc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVk
IHdoZW4KLSAgICAvLyBkZXRlcm1pbmluZyBEU1QuIEZvciB0aGlzIHJlYXNvbiB3ZSBzaGlmdCBh
d2F5IGZyb20geWVhcnMgdGhhdCBsb2NhbHRpbWUgY2FuIGhhbmRsZSBidXQgd291bGQKLSAgICAv
LyByZXR1cm4gaGlzdG9yaWNhbGx5IGFjY3VyYXRlIGluZm9ybWF0aW9uLgotICAgIGludCB5ZWFy
ID0gbXNUb1llYXIobXMpOwotICAgIGludCBlcXVpdmFsZW50WWVhciA9IGVxdWl2YWxlbnRZZWFy
Rm9yRFNUKHllYXIpOwotICAgIGlmICh5ZWFyICE9IGVxdWl2YWxlbnRZZWFyKSB7Ci0gICAgICAg
IGJvb2wgbGVhcFllYXIgPSBpc0xlYXBZZWFyKHllYXIpOwotICAgICAgICBpbnQgZGF5SW5ZZWFy
TG9jYWwgPSBkYXlJblllYXIobXMsIHllYXIpOwotICAgICAgICBpbnQgZGF5SW5Nb250aCA9IGRh
eUluTW9udGhGcm9tRGF5SW5ZZWFyKGRheUluWWVhckxvY2FsLCBsZWFwWWVhcik7Ci0gICAgICAg
IGludCBtb250aCA9IG1vbnRoRnJvbURheUluWWVhcihkYXlJblllYXJMb2NhbCwgbGVhcFllYXIp
OwotICAgICAgICBkb3VibGUgZGF5ID0gZGF0ZVRvRGF5c0Zyb20xOTcwKGVxdWl2YWxlbnRZZWFy
LCBtb250aCwgZGF5SW5Nb250aCk7Ci0gICAgICAgIG1zID0gKGRheSAqIG1zUGVyRGF5KSArIG1z
VG9NaWxsaXNlY29uZHMobXMpOwotICAgIH0KLQotICAgIHJldHVybiBjYWxjdWxhdGVEU1RPZmZz
ZXRTaW1wbGUobXMgLyBtc1BlclNlY29uZCwgdXRjT2Zmc2V0KTsKLX0KLQotdm9pZCBpbml0aWFs
aXplRGF0ZXMoKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBzdGF0aWMgYm9vbCBhbHJlYWR5SW5p
dGlhbGl6ZWQ7Ci0gICAgQVNTRVJUKCFhbHJlYWR5SW5pdGlhbGl6ZWQpOwotICAgIGFscmVhZHlJ
bml0aWFsaXplZCA9IHRydWU7Ci0jZW5kaWYKLQotICAgIGVxdWl2YWxlbnRZZWFyRm9yRFNUKDIw
MDApOyAvLyBOZWVkIHRvIGNhbGwgb25jZSB0byBpbml0aWFsaXplIGEgc3RhdGljIHVzZWQgaW4g
dGhpcyBmdW5jdGlvbi4KLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgeW1kaG1zVG9TZWNvbmRz
KGxvbmcgeWVhciwgaW50IG1vbiwgaW50IGRheSwgaW50IGhvdXIsIGludCBtaW51dGUsIGRvdWJs
ZSBzZWNvbmQpCi17Ci0gICAgZG91YmxlIGRheXMgPSAoZGF5IC0gMzIwNzUpCi0gICAgICAgICsg
Zmxvb3IoMTQ2MSAqICh5ZWFyICsgNDgwMC4wICsgKG1vbiAtIDE0KSAvIDEyKSAvIDQpCi0gICAg
ICAgICsgMzY3ICogKG1vbiAtIDIgLSAobW9uIC0gMTQpIC8gMTIgKiAxMikgLyAxMgotICAgICAg
ICAtIGZsb29yKDMgKiAoKHllYXIgKyA0OTAwLjAgKyAobW9uIC0gMTQpIC8gMTIpIC8gMTAwKSAv
IDQpCi0gICAgICAgIC0gMjQ0MDU4ODsKLSAgICByZXR1cm4gKChkYXlzICogaG91cnNQZXJEYXkg
KyBob3VyKSAqIG1pbnV0ZXNQZXJIb3VyICsgbWludXRlKSAqIHNlY29uZHNQZXJNaW51dGUgKyBz
ZWNvbmQ7Ci19Ci0KLS8vIFdlIGZvbGxvdyB0aGUgcmVjb21tZW5kYXRpb24gb2YgUkZDIDI4MjIg
dG8gY29uc2lkZXIgYWxsCi0vLyBvYnNvbGV0ZSB0aW1lIHpvbmVzIG5vdCBsaXN0ZWQgaGVyZSBl
cXVpdmFsZW50IHRvICItMDAwMCIuCi1zdGF0aWMgY29uc3Qgc3RydWN0IEtub3duWm9uZSB7Ci0j
aWYgIU9TKFdJTkRPV1MpCi0gICAgY29uc3QKLSNlbmRpZgotICAgICAgICBjaGFyIHR6TmFtZVs0
XTsKLSAgICBpbnQgdHpPZmZzZXQ7Ci19IGtub3duX3pvbmVzW10gPSB7Ci0gICAgeyAiVVQiLCAw
IH0sCi0gICAgeyAiR01UIiwgMCB9LAotICAgIHsgIkVTVCIsIC0zMDAgfSwKLSAgICB7ICJFRFQi
LCAtMjQwIH0sCi0gICAgeyAiQ1NUIiwgLTM2MCB9LAotICAgIHsgIkNEVCIsIC0zMDAgfSwKLSAg
ICB7ICJNU1QiLCAtNDIwIH0sCi0gICAgeyAiTURUIiwgLTM2MCB9LAotICAgIHsgIlBTVCIsIC00
ODAgfSwKLSAgICB7ICJQRFQiLCAtNDIwIH0KLX07Ci0KLWlubGluZSBzdGF0aWMgdm9pZCBza2lw
U3BhY2VzQW5kQ29tbWVudHMoY29uc3QgY2hhciomIHMpCi17Ci0gICAgaW50IG5lc3RpbmcgPSAw
OwotICAgIGNoYXIgY2g7Ci0gICAgd2hpbGUgKChjaCA9ICpzKSkgewotICAgICAgICBpZiAoIWlz
QVNDSUlTcGFjZShjaCkpIHsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnKCcpCi0gICAgICAgICAg
ICAgICAgbmVzdGluZysrOwotICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJyknICYmIG5lc3Rp
bmcgPiAwKQotICAgICAgICAgICAgICAgIG5lc3RpbmctLTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KG5lc3RpbmcgPT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBzKys7Ci0gICAgfQotfQotCi0vLyByZXR1cm5zIDAtMTEgKEphbi1EZWMpOyAtMSBvbiBmYWls
dXJlCi1zdGF0aWMgaW50IGZpbmRNb250aChjb25zdCBjaGFyKiBtb250aFN0cikKLXsKLSAgICBB
U1NFUlQobW9udGhTdHIpOwotICAgIGNoYXIgbmVlZGxlWzRdOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGlmICghKm1vbnRoU3RyKQotICAgICAgICAgICAgcmV0
dXJuIC0xOwotICAgICAgICBuZWVkbGVbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPih0b0FTQ0lJTG93
ZXIoKm1vbnRoU3RyKyspKTsKLSAgICB9Ci0gICAgbmVlZGxlWzNdID0gJ1wwJzsKLSAgICBjb25z
dCBjaGFyICpoYXlzdGFjayA9ICJqYW5mZWJtYXJhcHJtYXlqdW5qdWxhdWdzZXBvY3Rub3ZkZWMi
OwotICAgIGNvbnN0IGNoYXIgKnN0ciA9IHN0cnN0cihoYXlzdGFjaywgbmVlZGxlKTsKLSAgICBp
ZiAoc3RyKSB7Ci0gICAgICAgIGludCBwb3NpdGlvbiA9IHN0YXRpY19jYXN0PGludD4oc3RyIC0g
aGF5c3RhY2spOwotICAgICAgICBpZiAocG9zaXRpb24gJSAzID09IDApCi0gICAgICAgICAgICBy
ZXR1cm4gcG9zaXRpb24gLyAzOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBi
b29sIHBhcnNlTG9uZyhjb25zdCBjaGFyKiBzdHJpbmcsIGNoYXIqKiBzdG9wUG9zaXRpb24sIGlu
dCBiYXNlLCBsb25nKiByZXN1bHQpCi17Ci0gICAgKnJlc3VsdCA9IHN0cnRvbChzdHJpbmcsIHN0
b3BQb3NpdGlvbiwgYmFzZSk7Ci0gICAgLy8gQXZvaWQgdGhlIHVzZSBvZiBlcnJubyBhcyBpdCBp
cyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MgQ0UKLSAgICBpZiAoc3RyaW5nID09ICpzdG9wUG9z
aXRpb24gfHwgKnJlc3VsdCA9PSBMT05HX01JTiB8fCAqcmVzdWx0ID09IExPTkdfTUFYKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWRvdWJsZSBwYXJzZUVT
NURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcp
Ci17Ci0gICAgLy8gVGhpcyBwYXJzZXMgYSBkYXRlIG9mIHRoZSBmb3JtIGRlZmluZWQgaW4gRUNN
QS0yNjItNSwgc2VjdGlvbiAxNS45LjEuMTUKLSAgICAvLyAoc2ltaWxhciB0byBSRkMgMzMzOSAv
IElTTyA4NjAxOiBZWVlZLU1NLUREVEhIOm1tOnNzWy5zc3NdWikuCi0gICAgLy8gSW4gbW9zdCBj
YXNlcyBpdCBpcyBpbnRlbnRpb25hbGx5IHN0cmljdCAoZS5nLiBjb3JyZWN0IGZpZWxkIHdpZHRo
cywgbm8gc3RyYXkgd2hpdGVzcGFjZSkuCi0gICAgCi0gICAgc3RhdGljIGNvbnN0IGxvbmcgZGF5
c1Blck1vbnRoWzEyXSA9IHsgMzEsIDI5LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEs
IDMwLCAzMSB9OwotICAgIAotICAgIGNvbnN0IGNoYXIqIGN1cnJlbnRQb3NpdGlvbiA9IGRhdGVT
dHJpbmc7Ci0gICAgY2hhciogcG9zdFBhcnNlUG9zaXRpb247Ci0gICAgCi0gICAgLy8gVGhpcyBp
cyBhIGJpdCBtb3JlIGxlbmllbnQgb24gdGhlIHllYXIgc3RyaW5nIHRoYW4gRVM1IHNwZWNpZmll
czoKLSAgICAvLyBpbnN0ZWFkIG9mIHJlc3RyaWN0aW5nIHRvIDQgZGlnaXRzIChvciA2IGRpZ2l0
cyB3aXRoIG1hbmRhdG9yeSArLy0pLAotICAgIC8vIGl0IGFjY2VwdHMgYW55IGludGVnZXIgdmFs
dWUuIENvbnNpZGVyIHRoaXMgYW4gaW1wbGVtZW50YXRpb24gZmFsbGJhY2suCi0gICAgbG9uZyB5
ZWFyOwotICAgIGlmICghcGFyc2VMb25nKGN1cnJlbnRQb3NpdGlvbiwgJnBvc3RQYXJzZVBvc2l0
aW9uLCAxMCwgJnllYXIpKQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjpxdWlldF9OYU4oKTsKLSAgICBpZiAoKnBvc3RQYXJzZVBvc2l0aW9uICE9ICctJykKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgY3VycmVudFBvc2l0aW9uID0gcG9zdFBhcnNlUG9zaXRpb24gKyAxOwotICAgIAotICAgIGxv
bmcgbW9udGg7Ci0gICAgaWYgKCFpc0FTQ0lJRGlnaXQoKmN1cnJlbnRQb3NpdGlvbikpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAg
IGlmICghcGFyc2VMb25nKGN1cnJlbnRQb3NpdGlvbiwgJnBvc3RQYXJzZVBvc2l0aW9uLCAxMCwg
Jm1vbnRoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVp
ZXRfTmFOKCk7Ci0gICAgaWYgKCpwb3N0UGFyc2VQb3NpdGlvbiAhPSAnLScgfHwgKHBvc3RQYXJz
ZVBvc2l0aW9uIC0gY3VycmVudFBvc2l0aW9uKSAhPSAyKQotICAgICAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBjdXJyZW50UG9zaXRpb24g
PSBwb3N0UGFyc2VQb3NpdGlvbiArIDE7Ci0gICAgCi0gICAgbG9uZyBkYXk7Ci0gICAgaWYgKCFp
c0FTQ0lJRGlnaXQoKmN1cnJlbnRQb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgIGlmICghcGFyc2VMb25nKGN1cnJl
bnRQb3NpdGlvbiwgJnBvc3RQYXJzZVBvc2l0aW9uLCAxMCwgJmRheSkpCi0gICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgIGlmICgqcG9z
dFBhcnNlUG9zaXRpb24gIT0gJ1QnIHx8IChwb3N0UGFyc2VQb3NpdGlvbiAtIGN1cnJlbnRQb3Np
dGlvbikgIT0gMikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCk7Ci0gICAgY3VycmVudFBvc2l0aW9uID0gcG9zdFBhcnNlUG9zaXRpb24gKyAx
OwotICAgIAotICAgIGxvbmcgaG91cnM7Ci0gICAgaWYgKCFpc0FTQ0lJRGlnaXQoKmN1cnJlbnRQ
b3NpdGlvbikpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1
aWV0X05hTigpOwotICAgIGlmICghcGFyc2VMb25nKGN1cnJlbnRQb3NpdGlvbiwgJnBvc3RQYXJz
ZVBvc2l0aW9uLCAxMCwgJmhvdXJzKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgaWYgKCpwb3N0UGFyc2VQb3NpdGlvbiAhPSAn
OicgfHwgKHBvc3RQYXJzZVBvc2l0aW9uIC0gY3VycmVudFBvc2l0aW9uKSAhPSAyKQotICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBj
dXJyZW50UG9zaXRpb24gPSBwb3N0UGFyc2VQb3NpdGlvbiArIDE7Ci0gICAgCi0gICAgbG9uZyBt
aW51dGVzOwotICAgIGlmICghaXNBU0NJSURpZ2l0KCpjdXJyZW50UG9zaXRpb24pKQotICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBp
ZiAoIXBhcnNlTG9uZyhjdXJyZW50UG9zaXRpb24sICZwb3N0UGFyc2VQb3NpdGlvbiwgMTAsICZt
aW51dGVzKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVp
ZXRfTmFOKCk7Ci0gICAgaWYgKCpwb3N0UGFyc2VQb3NpdGlvbiAhPSAnOicgfHwgKHBvc3RQYXJz
ZVBvc2l0aW9uIC0gY3VycmVudFBvc2l0aW9uKSAhPSAyKQotICAgICAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBjdXJyZW50UG9zaXRpb24g
PSBwb3N0UGFyc2VQb3NpdGlvbiArIDE7Ci0gICAgCi0gICAgbG9uZyBpbnRTZWNvbmRzOwotICAg
IGlmICghaXNBU0NJSURpZ2l0KCpjdXJyZW50UG9zaXRpb24pKQotICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBpZiAoIXBhcnNlTG9u
ZyhjdXJyZW50UG9zaXRpb24sICZwb3N0UGFyc2VQb3NpdGlvbiwgMTAsICZpbnRTZWNvbmRzKSkK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7
Ci0gICAgaWYgKChwb3N0UGFyc2VQb3NpdGlvbiAtIGN1cnJlbnRQb3NpdGlvbikgIT0gMikKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgCi0gICAgZG91YmxlIHNlY29uZHMgPSBpbnRTZWNvbmRzOwotICAgIGlmICgqcG9zdFBhcnNl
UG9zaXRpb24gPT0gJy4nKSB7Ci0gICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IHBvc3RQYXJzZVBv
c2l0aW9uICsgMTsKLSAgICAgICAgCi0gICAgICAgIC8vIEluIEVDTUEtMjYyLTUgaXQncyBhIGJp
dCB1bmNsZWFyIGlmICcuJyBjYW4gYmUgcHJlc2VudCB3aXRob3V0IG1pbGxpc2Vjb25kcywgYnV0
Ci0gICAgICAgIC8vIGEgcmVhc29uYWJsZSBpbnRlcnByZXRhdGlvbiBndWlkZWQgYnkgdGhlIGdp
dmVuIGV4YW1wbGVzIGFuZCBSRkMgMzMzOSBzYXlzICJubyIuCi0gICAgICAgIC8vIFdlIGNoZWNr
IHRoZSBuZXh0IGNoYXJhY3RlciB0byBhdm9pZCByZWFkaW5nICsvLSB0aW1lem9uZSBob3VycyBh
ZnRlciBhbiBpbnZhbGlkIGRlY2ltYWwuCi0gICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpjdXJy
ZW50UG9zaXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBhcmUgbW9yZSBsZW5p
ZW50IHRoYW4gRVM1IGJ5IGFjY2VwdGluZyBtb3JlIG9yIGxlc3MgdGhhbiAzIGZyYWN0aW9uIGRp
Z2l0cy4KLSAgICAgICAgbG9uZyBmcmFjU2Vjb25kczsKLSAgICAgICAgaWYgKCFwYXJzZUxvbmco
Y3VycmVudFBvc2l0aW9uLCAmcG9zdFBhcnNlUG9zaXRpb24sIDEwLCAmZnJhY1NlY29uZHMpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7Ci0gICAgICAgIAotICAgICAgICBsb25nIG51bUZyYWNEaWdpdHMgPSBwb3N0UGFyc2VQb3Np
dGlvbiAtIGN1cnJlbnRQb3NpdGlvbjsKLSAgICAgICAgc2Vjb25kcyArPSBmcmFjU2Vjb25kcyAq
IHBvdygxMC4wLCBzdGF0aWNfY2FzdDxkb3VibGU+KC1udW1GcmFjRGlnaXRzKSk7Ci0gICAgfQot
ICAgIGN1cnJlbnRQb3NpdGlvbiA9IHBvc3RQYXJzZVBvc2l0aW9uOwotICAgIAotICAgIC8vIEEg
ZmV3IG9mIHRoZXNlIGNoZWNrcyBjb3VsZCBiZSBkb25lIGlubGluZSBhYm92ZSwgYnV0IHNpbmNl
IG1hbnkgb2YgdGhlbSBhcmUgaW50ZXJyZWxhdGVkCi0gICAgLy8gd2Ugd291bGQgYmUgc2Fjcmlm
aWNpbmcgcmVhZGFiaWxpdHkgdG8gIm9wdGltaXplIiB0aGUgKHByZXN1bWFibHkgbGVzcyBjb21t
b24pIGZhaWx1cmUgcGF0aC4KLSAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAg
IGlmIChkYXkgPCAxIHx8IGRheSA+IGRheXNQZXJNb250aFttb250aCAtIDFdKQotICAgICAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBpZiAo
bW9udGggPT0gMiAmJiBkYXkgPiAyOCAmJiAhaXNMZWFwWWVhcih5ZWFyKSkKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgaWYgKGhv
dXJzIDwgMCB8fCBob3VycyA+IDI0KQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBpZiAoaG91cnMgPT0gMjQgJiYgKG1pbnV0ZXMg
fHwgc2Vjb25kcykpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
OnF1aWV0X05hTigpOwotICAgIGlmIChtaW51dGVzIDwgMCB8fCBtaW51dGVzID4gNTkpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAg
IGlmIChzZWNvbmRzIDwgMCB8fCBzZWNvbmRzID49IDYxKQotICAgICAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBpZiAoc2Vjb25kcyA+IDYw
KSB7Ci0gICAgICAgIC8vIERpc2NhcmQgbGVhcCBzZWNvbmRzIGJ5IGNsYW1waW5nIHRvIHRoZSBl
bmQgb2YgYSBtaW51dGUuCi0gICAgICAgIHNlY29uZHMgPSA2MDsKLSAgICB9Ci0gICAgCi0gICAg
bG9uZyB0aW1lWm9uZVNlY29uZHMgPSAwOwotICAgIGlmICgqY3VycmVudFBvc2l0aW9uICE9ICda
JykgewotICAgICAgICBib29sIHR6TmVnYXRpdmU7Ci0gICAgICAgIGlmICgqY3VycmVudFBvc2l0
aW9uID09ICctJykKLSAgICAgICAgICAgIHR6TmVnYXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNl
IGlmICgqY3VycmVudFBvc2l0aW9uID09ICcrJykKLSAgICAgICAgICAgIHR6TmVnYXRpdmUgPSBm
YWxzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGN1cnJlbnRQb3NpdGlvbiArPSAxOwot
ICAgICAgICAKLSAgICAgICAgbG9uZyB0ekhvdXJzOwotICAgICAgICBsb25nIHR6SG91cnNBYnM7
Ci0gICAgICAgIGxvbmcgdHpNaW51dGVzOwotICAgICAgICAKLSAgICAgICAgaWYgKCFpc0FTQ0lJ
RGlnaXQoKmN1cnJlbnRQb3NpdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgaWYgKCFwYXJzZUxvbmcoY3Vy
cmVudFBvc2l0aW9uLCAmcG9zdFBhcnNlUG9zaXRpb24sIDEwLCAmdHpIb3VycykpCi0gICAgICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAg
ICAgICAgaWYgKCpwb3N0UGFyc2VQb3NpdGlvbiAhPSAnOicgfHwgKHBvc3RQYXJzZVBvc2l0aW9u
IC0gY3VycmVudFBvc2l0aW9uKSAhPSAyKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIHR6SG91cnNBYnMgPSBsYWJz
KHR6SG91cnMpOwotICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBwb3N0UGFyc2VQb3NpdGlvbiAr
IDE7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqY3VycmVudFBvc2l0aW9u
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpOwotICAgICAgICBpZiAoIXBhcnNlTG9uZyhjdXJyZW50UG9zaXRpb24sICZwb3N0UGFy
c2VQb3NpdGlvbiwgMTAsICZ0ek1pbnV0ZXMpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGlmICgocG9zdFBhcnNl
UG9zaXRpb24gLSBjdXJyZW50UG9zaXRpb24pICE9IDIpCi0gICAgICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgY3VycmVudFBv
c2l0aW9uID0gcG9zdFBhcnNlUG9zaXRpb247Ci0gICAgICAgIAotICAgICAgICBpZiAodHpIb3Vy
c0FicyA+IDI0KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGlmICh0ek1pbnV0ZXMgPCAwIHx8IHR6TWludXRlcyA+
IDU5KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVp
ZXRfTmFOKCk7Ci0gICAgICAgIAotICAgICAgICB0aW1lWm9uZVNlY29uZHMgPSA2MCAqICh0ek1p
bnV0ZXMgKyAoNjAgKiB0ekhvdXJzQWJzKSk7Ci0gICAgICAgIGlmICh0ek5lZ2F0aXZlKQotICAg
ICAgICAgICAgdGltZVpvbmVTZWNvbmRzID0gLXRpbWVab25lU2Vjb25kczsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBjdXJyZW50UG9zaXRpb24gKz0gMTsKLSAgICB9Ci0gICAgaWYgKCpjdXJyZW50
UG9zaXRpb24pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1
aWV0X05hTigpOwotICAgIAotICAgIGRvdWJsZSBkYXRlU2Vjb25kcyA9IHltZGhtc1RvU2Vjb25k
cyh5ZWFyLCBtb250aCwgZGF5LCBob3VycywgbWludXRlcywgc2Vjb25kcykgLSB0aW1lWm9uZVNl
Y29uZHM7Ci0gICAgcmV0dXJuIGRhdGVTZWNvbmRzICogbXNQZXJTZWNvbmQ7Ci19Ci0KLS8vIE9k
ZCBjYXNlIHdoZXJlICdleGVjJyBpcyBhbGxvd2VkIHRvIGJlIDAsIHRvIGFjY29tb2RhdGUgYSBj
YWxsZXIgaW4gV2ViQ29yZS4KLXN0YXRpYyBkb3VibGUgcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5h
dGVkQ2hhcmFjdGVycyhjb25zdCBjaGFyKiBkYXRlU3RyaW5nLCBib29sJiBoYXZlVFosIGludCYg
b2Zmc2V0KQotewotICAgIGhhdmVUWiA9IGZhbHNlOwotICAgIG9mZnNldCA9IDA7Ci0KLSAgICAv
LyBUaGlzIHBhcnNlcyBhIGRhdGUgaW4gdGhlIGZvcm06Ci0gICAgLy8gICAgIFR1ZXNkYXksIDA5
LU5vdi05OSAyMzoxMjo0MCBHTVQKLSAgICAvLyBvcgotICAgIC8vICAgICBTYXQsIDAxLUphbi0y
MDAwIDA4OjAwOjAwIEdNVAotICAgIC8vIG9yCi0gICAgLy8gICAgIFNhdCwgMDEgSmFuIDIwMDAg
MDg6MDA6MDAgR01UCi0gICAgLy8gb3IKLSAgICAvLyAgICAgMDEgSmFuIDk5IDIyOjAwICswMTAw
ICAgIChleGNlcHRpb25zIGluIHJmYzgyMi9yZmMyODIyKQotICAgIC8vICMjIyBub24gUkZDIGZv
cm1hdHMsIGFkZGVkIGZvciBKYXZhc2NyaXB0OgotICAgIC8vICAgICBbV2VkbmVzZGF5XSBKYW51
YXJ5IDA5IDE5OTkgMjM6MTI6NDAgR01UCi0gICAgLy8gICAgIFtXZWRuZXNkYXldIEphbnVhcnkg
MDkgMjM6MTI6NDAgR01UIDE5OTkKLSAgICAvLwotICAgIC8vIFdlIGlnbm9yZSB0aGUgd2Vla2Rh
eS4KLSAgICAgCi0gICAgLy8gU2tpcCBsZWFkaW5nIHNwYWNlCi0gICAgc2tpcFNwYWNlc0FuZENv
bW1lbnRzKGRhdGVTdHJpbmcpOwotCi0gICAgbG9uZyBtb250aCA9IC0xOwotICAgIGNvbnN0IGNo
YXIgKndvcmRTdGFydCA9IGRhdGVTdHJpbmc7Ci0gICAgLy8gQ2hlY2sgY29udGVudHMgb2YgZmly
c3Qgd29yZHMgaWYgbm90IG51bWJlcgotICAgIHdoaWxlICgqZGF0ZVN0cmluZyAmJiAhaXNBU0NJ
SURpZ2l0KCpkYXRlU3RyaW5nKSkgewotICAgICAgICBpZiAoaXNBU0NJSVNwYWNlKCpkYXRlU3Ry
aW5nKSB8fCAqZGF0ZVN0cmluZyA9PSAnKCcpIHsKLSAgICAgICAgICAgIGlmIChkYXRlU3RyaW5n
IC0gd29yZFN0YXJ0ID49IDMpCi0gICAgICAgICAgICAgICAgbW9udGggPSBmaW5kTW9udGgod29y
ZFN0YXJ0KTsKLSAgICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsK
LSAgICAgICAgICAgIHdvcmRTdGFydCA9IGRhdGVTdHJpbmc7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICBkYXRlU3RyaW5nKys7Ci0gICAgfQotCi0gICAgLy8gTWlzc2luZyBkZWxpbWl0ZXIg
YmV0d2VlbiBtb250aCBhbmQgZGF5IChsaWtlICJKYW51YXJ5MjkiKT8KLSAgICBpZiAobW9udGgg
PT0gLTEgJiYgd29yZFN0YXJ0ICE9IGRhdGVTdHJpbmcpCi0gICAgICAgIG1vbnRoID0gZmluZE1v
bnRoKHdvcmRTdGFydCk7Ci0KLSAgICBza2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7
Ci0KLSAgICBpZiAoISpkYXRlU3RyaW5nKQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLQotICAgIC8vICcgMDktTm92LTk5IDIzOjEyOjQw
IEdNVCcKLSAgICBjaGFyKiBuZXdQb3NTdHI7Ci0gICAgbG9uZyBkYXk7Ci0gICAgaWYgKCFwYXJz
ZUxvbmcoZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTAsICZkYXkpKQotICAgICAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBkYXRlU3RyaW5n
ID0gbmV3UG9zU3RyOwotCi0gICAgaWYgKCEqZGF0ZVN0cmluZykKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0KLSAgICBpZiAoZGF5IDwg
MCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7Ci0KLSAgICBsb25nIHllYXIgPSAwOwotICAgIGlmIChkYXkgPiAzMSkgewotICAgICAgICAv
LyAjIyMgd2hlcmUgaXMgdGhlIGJvdW5kYXJ5IGFuZCB3aGF0IGhhcHBlbnMgYmVsb3c/Ci0gICAg
ICAgIGlmICgqZGF0ZVN0cmluZyAhPSAnLycpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgLy8gbG9va3MgbGlrZSBh
IFlZWVkvTU0vREQgZGF0ZQotICAgICAgICBpZiAoISorK2RhdGVTdHJpbmcpCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAg
ICAgeWVhciA9IGRheTsKLSAgICAgICAgaWYgKCFwYXJzZUxvbmcoZGF0ZVN0cmluZywgJm5ld1Bv
c1N0ciwgMTAsICZtb250aCkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgbW9udGggLT0gMTsKLSAgICAgICAgZGF0
ZVN0cmluZyA9IG5ld1Bvc1N0cjsKLSAgICAgICAgaWYgKCpkYXRlU3RyaW5nKysgIT0gJy8nIHx8
ICEqZGF0ZVN0cmluZykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAm
bmV3UG9zU3RyLCAxMCwgJmRheSkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0
cjsKLSAgICB9IGVsc2UgaWYgKCpkYXRlU3RyaW5nID09ICcvJyAmJiBtb250aCA9PSAtMSkgewot
ICAgICAgICBkYXRlU3RyaW5nKys7Ci0gICAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIE1NL0RE
L1lZWVkgZGF0ZSwgbm90IGFuIFJGQyBkYXRlLgotICAgICAgICBtb250aCA9IGRheSAtIDE7IC8v
IDAtYmFzZWQKLSAgICAgICAgaWYgKCFwYXJzZUxvbmcoZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwg
MTAsICZkYXkpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGlmIChkYXkgPCAxIHx8IGRheSA+IDMxKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7Ci0gICAgICAgIGlmICgqZGF0ZVN0cmluZyA9
PSAnLycpCi0gICAgICAgICAgICBkYXRlU3RyaW5nKys7Ci0gICAgICAgIGlmICghKmRhdGVTdHJp
bmcpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWll
dF9OYU4oKTsKLSAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCpkYXRlU3RyaW5nID09ICctJykK
LSAgICAgICAgICAgIGRhdGVTdHJpbmcrKzsKLQotICAgICAgICBza2lwU3BhY2VzQW5kQ29tbWVu
dHMoZGF0ZVN0cmluZyk7Ci0KLSAgICAgICAgaWYgKCpkYXRlU3RyaW5nID09ICcsJykKLSAgICAg
ICAgICAgIGRhdGVTdHJpbmcrKzsKLQotICAgICAgICBpZiAobW9udGggPT0gLTEpIHsgLy8gbm90
IGZvdW5kIHlldAotICAgICAgICAgICAgbW9udGggPSBmaW5kTW9udGgoZGF0ZVN0cmluZyk7Ci0g
ICAgICAgICAgICBpZiAobW9udGggPT0gLTEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0KLSAgICAgICAgICAgIHdoaWxl
ICgqZGF0ZVN0cmluZyAmJiAqZGF0ZVN0cmluZyAhPSAnLScgJiYgKmRhdGVTdHJpbmcgIT0gJywn
ICYmICFpc0FTQ0lJU3BhY2UoKmRhdGVTdHJpbmcpKQotICAgICAgICAgICAgICAgIGRhdGVTdHJp
bmcrKzsKLQotICAgICAgICAgICAgaWYgKCEqZGF0ZVN0cmluZykKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLQotICAgICAg
ICAgICAgLy8gJy05OSAyMzoxMjo0MCBHTVQnCi0gICAgICAgICAgICBpZiAoKmRhdGVTdHJpbmcg
IT0gJy0nICYmICpkYXRlU3RyaW5nICE9ICcvJyAmJiAqZGF0ZVN0cmluZyAhPSAnLCcgJiYgIWlz
QVNDSUlTcGFjZSgqZGF0ZVN0cmluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgICAgICBkYXRlU3RyaW5n
Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobW9udGggPCAwIHx8IG1vbnRoID4gMTEp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
OwotCi0gICAgLy8gJzk5IDIzOjEyOjQwIEdNVCcKLSAgICBpZiAoeWVhciA8PSAwICYmICpkYXRl
U3RyaW5nKSB7Ci0gICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIs
IDEwLCAmeWVhcikpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjpxdWlldF9OYU4oKTsKLSAgICB9Ci0KLSAgICAvLyBEb24ndCBmYWlsIGlmIHRoZSB0aW1l
IGlzIG1pc3NpbmcuCi0gICAgbG9uZyBob3VyID0gMDsKLSAgICBsb25nIG1pbnV0ZSA9IDA7Ci0g
ICAgbG9uZyBzZWNvbmQgPSAwOwotICAgIGlmICghKm5ld1Bvc1N0cikKLSAgICAgICAgZGF0ZVN0
cmluZyA9IG5ld1Bvc1N0cjsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gJyAyMzoxMjo0MCBHTVQn
Ci0gICAgICAgIGlmICghKGlzQVNDSUlTcGFjZSgqbmV3UG9zU3RyKSB8fCAqbmV3UG9zU3RyID09
ICcsJykpIHsKLSAgICAgICAgICAgIGlmICgqbmV3UG9zU3RyICE9ICc6JykKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAg
ICAgICAgICAgIC8vIFRoZXJlIHdhcyBubyB5ZWFyOyB0aGUgbnVtYmVyIHdhcyB0aGUgaG91ci4K
LSAgICAgICAgICAgIHllYXIgPSAtMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IGluIHRoZSBub3JtYWwgY2FzZSAod2UgcGFyc2VkIHRoZSB5ZWFyKSwgYWR2YW5jZSB0byB0aGUg
bmV4dCBudW1iZXIKLSAgICAgICAgICAgIGRhdGVTdHJpbmcgPSArK25ld1Bvc1N0cjsKLSAgICAg
ICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJmhvdXIpOwotICAg
ICAgICAvLyBEbyBub3QgY2hlY2sgZm9yIGVycm5vIGhlcmUgc2luY2Ugd2Ugd2FudCB0byBjb250
aW51ZQotICAgICAgICAvLyBldmVuIGlmIGVycm5vIHdhcyBzZXQgYmVjYXN1ZSB3ZSBhcmUgc3Rp
bGwgbG9va2luZwotICAgICAgICAvLyBmb3IgdGhlIHRpbWV6b25lIQotCi0gICAgICAgIC8vIFJl
YWQgYSBudW1iZXI/IElmIG5vdCwgdGhpcyBtaWdodCBiZSBhIHRpbWV6b25lIG5hbWUuCi0gICAg
ICAgIGlmIChuZXdQb3NTdHIgIT0gZGF0ZVN0cmluZykgewotICAgICAgICAgICAgZGF0ZVN0cmlu
ZyA9IG5ld1Bvc1N0cjsKLQotICAgICAgICAgICAgaWYgKGhvdXIgPCAwIHx8IGhvdXIgPiAyMykK
LSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWll
dF9OYU4oKTsKLQotICAgICAgICAgICAgaWYgKCEqZGF0ZVN0cmluZykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLQotICAg
ICAgICAgICAgLy8gJzoxMjo0MCBHTVQnCi0gICAgICAgICAgICBpZiAoKmRhdGVTdHJpbmcrKyAh
PSAnOicpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7Ci0KLSAgICAgICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcs
ICZuZXdQb3NTdHIsIDEwLCAmbWludXRlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgICAgIGRhdGVTdHJp
bmcgPSBuZXdQb3NTdHI7Ci0KLSAgICAgICAgICAgIGlmIChtaW51dGUgPCAwIHx8IG1pbnV0ZSA+
IDU5KQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
OnF1aWV0X05hTigpOwotCi0gICAgICAgICAgICAvLyAnOjQwIEdNVCcKLSAgICAgICAgICAgIGlm
ICgqZGF0ZVN0cmluZyAmJiAqZGF0ZVN0cmluZyAhPSAnOicgJiYgIWlzQVNDSUlTcGFjZSgqZGF0
ZVN0cmluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCk7Ci0KLSAgICAgICAgICAgIC8vIHNlY29uZHMgYXJlIG9wdGlvbmFs
IGluIHJmYzgyMiArIHJmYzI4MjIKLSAgICAgICAgICAgIGlmICgqZGF0ZVN0cmluZyA9PSc6Jykg
ewotICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcrKzsKLQotICAgICAgICAgICAgICAgIGlmICgh
cGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmc2Vjb25kKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7Ci0gICAgICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKLQotICAgICAgICAg
ICAgICAgIGlmIChzZWNvbmQgPCAwIHx8IHNlY29uZCA+IDU5KQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcp
OwotCi0gICAgICAgICAgICBpZiAoc3RybmNhc2VjbXAoZGF0ZVN0cmluZywgIkFNIiwgMikgPT0g
MCkgewotICAgICAgICAgICAgICAgIGlmIChob3VyID4gMTIpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgICAg
ICAgICAgICAgIGlmIChob3VyID09IDEyKQotICAgICAgICAgICAgICAgICAgICBob3VyID0gMDsK
LSAgICAgICAgICAgICAgICBkYXRlU3RyaW5nICs9IDI7Ci0gICAgICAgICAgICAgICAgc2tpcFNw
YWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJu
Y2FzZWNtcChkYXRlU3RyaW5nLCAiUE0iLCAyKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGhvdXIgPiAxMikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIp
Ci0gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7Ci0gICAgICAgICAgICAgICAgZGF0ZVN0
cmluZyArPSAyOwotICAgICAgICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3Ry
aW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIERvbid0IGZh
aWwgaWYgdGhlIHRpbWUgem9uZSBpcyBtaXNzaW5nLiAKLSAgICAvLyBTb21lIHdlYnNpdGVzIG9t
aXQgdGhlIHRpbWUgem9uZSAoNDI3NTIwNikuCi0gICAgaWYgKCpkYXRlU3RyaW5nKSB7Ci0gICAg
ICAgIGlmIChzdHJuY2FzZWNtcChkYXRlU3RyaW5nLCAiR01UIiwgMykgPT0gMCB8fCBzdHJuY2Fz
ZWNtcChkYXRlU3RyaW5nLCAiVVRDIiwgMykgPT0gMCkgewotICAgICAgICAgICAgZGF0ZVN0cmlu
ZyArPSAzOwotICAgICAgICAgICAgaGF2ZVRaID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICgqZGF0ZVN0cmluZyA9PSAnKycgfHwgKmRhdGVTdHJpbmcgPT0gJy0nKSB7Ci0gICAgICAg
ICAgICBsb25nIG87Ci0gICAgICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3
UG9zU3RyLCAxMCwgJm8pKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bv
c1N0cjsKLQotICAgICAgICAgICAgaWYgKG8gPCAtOTk1OSB8fCBvID4gOTk1OSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsK
LQotICAgICAgICAgICAgaW50IHNnbiA9IChvIDwgMCkgPyAtMSA6IDE7Ci0gICAgICAgICAgICBv
ID0gbGFicyhvKTsKLSAgICAgICAgICAgIGlmICgqZGF0ZVN0cmluZyAhPSAnOicpIHsKLSAgICAg
ICAgICAgICAgICBvZmZzZXQgPSAoKG8gLyAxMDApICogNjAgKyAobyAlIDEwMCkpICogc2duOwot
ICAgICAgICAgICAgfSBlbHNlIHsgLy8gR01UKzA1OjAwCi0gICAgICAgICAgICAgICAgbG9uZyBv
MjsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3Ry
LCAxMCwgJm8yKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5l
d1Bvc1N0cjsKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSAobyAqIDYwICsgbzIpICogc2duOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaGF2ZVRaID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChr
bm93bl96b25lcyk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmICgwID09IHN0cm5jYXNlY21w
KGRhdGVTdHJpbmcsIGtub3duX3pvbmVzW2ldLnR6TmFtZSwgc3RybGVuKGtub3duX3pvbmVzW2ld
LnR6TmFtZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGtub3duX3pvbmVzW2ld
LnR6T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBkYXRlU3RyaW5nICs9IHN0cmxlbihrbm93
bl96b25lc1tpXS50ek5hbWUpOwotICAgICAgICAgICAgICAgICAgICBoYXZlVFogPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBza2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0
cmluZyk7Ci0KLSAgICBpZiAoKmRhdGVTdHJpbmcgJiYgeWVhciA9PSAtMSkgewotICAgICAgICBp
ZiAoIXBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJnllYXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7Ci0gICAgfQotCi0gICAgc2tpcFNwYWNlc0Fu
ZENvbW1lbnRzKGRhdGVTdHJpbmcpOwotCi0gICAgLy8gVHJhaWxpbmcgZ2FyYmFnZQotICAgIGlm
ICgqZGF0ZVN0cmluZykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7Ci0KLSAgICAvLyBZMks6IEhhbmRsZSAyIGRpZ2l0IHllYXJzLgotICAg
IGlmICh5ZWFyID49IDAgJiYgeWVhciA8IDEwMCkgewotICAgICAgICBpZiAoeWVhciA8IDUwKQot
ICAgICAgICAgICAgeWVhciArPSAyMDAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB5ZWFy
ICs9IDE5MDA7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB5bWRobXNUb1NlY29uZHMoeWVhciwg
bW9udGggKyAxLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSAqIG1zUGVyU2Vjb25kOwotfQot
Ci1kb3VibGUgcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhjb25zdCBjaGFy
KiBkYXRlU3RyaW5nKQotewotICAgIGJvb2wgaGF2ZVRaOwotICAgIGludCBvZmZzZXQ7Ci0gICAg
ZG91YmxlIG1zID0gcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhkYXRlU3Ry
aW5nLCBoYXZlVFosIG9mZnNldCk7Ci0gICAgaWYgKGlzbmFuKG1zKSkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0KLSAgICAvLyBmYWxs
IGJhY2sgdG8gbG9jYWwgdGltZXpvbmUKLSAgICBpZiAoIWhhdmVUWikgewotICAgICAgICBkb3Vi
bGUgdXRjT2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7Ci0gICAgICAgIGRvdWJsZSBkc3RP
ZmZzZXQgPSBjYWxjdWxhdGVEU1RPZmZzZXQobXMsIHV0Y09mZnNldCk7Ci0gICAgICAgIG9mZnNl
dCA9IHN0YXRpY19jYXN0PGludD4oKHV0Y09mZnNldCArIGRzdE9mZnNldCkgLyBtc1Blck1pbnV0
ZSk7Ci0gICAgfQotICAgIHJldHVybiBtcyAtIChvZmZzZXQgKiBtc1Blck1pbnV0ZSk7Ci19Ci0K
LWRvdWJsZSB0aW1lQ2xpcChkb3VibGUgdCkKLXsKLSAgICBpZiAoIWlzZmluaXRlKHQpKQotICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAg
ICBpZiAoZmFicyh0KSA+IG1heEVDTUFTY3JpcHRUaW1lKQotICAgICAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICByZXR1cm4gdHJ1bmModCk7
Ci19Ci0KLS8vIFNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI3NlY3Rpb24t
My4zIGZvciBtb3JlIGluZm9ybWF0aW9uLgotU3RyaW5nIG1ha2VSRkMyODIyRGF0ZVN0cmluZyh1
bnNpZ25lZCBkYXlPZldlZWssIHVuc2lnbmVkIGRheSwgdW5zaWduZWQgbW9udGgsIHVuc2lnbmVk
IHllYXIsIHVuc2lnbmVkIGhvdXJzLCB1bnNpZ25lZCBtaW51dGVzLCB1bnNpZ25lZCBzZWNvbmRz
LCBpbnQgdXRjT2Zmc2V0KQotewotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh3ZWVrZGF5TmFtZVtkYXlPZldlZWtdKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6
Om51bWJlcihkYXkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICIpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1vbnRoTmFtZVttb250aF0pOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCIgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIoeWVhcikp
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgIik7Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0d29EaWdpdFN0cmluZ0Zyb21OdW1iZXIoaG91cnMpKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgnOicpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHR3b0RpZ2l0U3RyaW5nRnJv
bU51bWJlcihtaW51dGVzKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJzonKTsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCh0d29EaWdpdFN0cmluZ0Zyb21OdW1iZXIoc2Vjb25kcykpOwot
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcgJyk7Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCh1dGNPZmZzZXQgPiAwID8gIisiIDogIi0iKTsKLSAgICBpbnQgYWJzb2x1dGVVVENPZmZzZXQg
PSBhYnModXRjT2Zmc2V0KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0d29EaWdpdFN0cmlu
Z0Zyb21OdW1iZXIoYWJzb2x1dGVVVENPZmZzZXQgLyA2MCkpOwotICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHR3b0RpZ2l0U3RyaW5nRnJvbU51bWJlcihhYnNvbHV0ZVVUQ09mZnNldCAlIDYwKSk7
Ci0KLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwotfQotfSAvLyBuYW1lc3Bh
Y2UgV1RGCi0KLSNpZiBVU0UoSlNDKQotbmFtZXNwYWNlIEpTQyB7Ci0KIC8vIEdldCB0aGUgRFNU
IG9mZnNldCBmb3IgdGhlIHRpbWUgcGFzc2VkIGluLgogLy8KIC8vIE5PVEU6IFRoZSBpbXBsZW1l
bnRhdGlvbiByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBubyB0aW1lIHpvbmVzIGhhdmUKQEAgLTEx
ODcsNCArMjY1LDMgQEAgZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhYwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKLSNlbmRpZiAvLyBVU0UoSlNDKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguaAkocmV2aXNpb24gMTAwMTcyKQko
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmg6MTAwMTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBWZXJzaW9uOiBN
UEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxl
IGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEu
MSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29m
dHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g
IkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBl
eHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBs
YW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExp
Y2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgTW96aWxsYSBDb21tdW5pY2F0b3Ig
Y2xpZW50IGNvZGUsIHJlbGVhc2VkCisgKiBNYXJjaCAzMSwgMTk5OC4KKyAqCisgKiBUaGUgSW5p
dGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIE5ldHNjYXBlIENvbW11
bmljYXRpb25zIENvcnBvcmF0aW9uLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlh
bCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMTk5OAorICogdGhlIEluaXRpYWwgRGV2ZWxv
cGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAq
IEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5k
ZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwKKyAqIG9yIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIp
LAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BM
IGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0
byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0
aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cg
b3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFu
ZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlv
dSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5
IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55
IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqLworCisjaWZuZGVm
IERhdGVNYXRoX2gKKyNkZWZpbmUgRGF0ZU1hdGhfaAorCisjaW5jbHVkZSA8bWF0aC5oPgorI2lu
Y2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4K
KyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093bkFy
cmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFjZSBXVEYgewordm9pZCBpbml0aWFsaXplRGF0ZXMo
KTsKK2ludCBlcXVpdmFsZW50WWVhckZvckRTVChpbnQgeWVhcik7CisKKy8vIE5vdCByZWFsbHkg
bWF0aCByZWxhdGVkLCBidXQgdGhpcyBpcyBjdXJyZW50bHkgdGhlIG9ubHkgc2hhcmVkIHBsYWNl
IHRvIHB1dCB0aGVzZS4KK2RvdWJsZSBwYXJzZUVTNURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFy
YWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpOworZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxs
VGVybWluYXRlZENoYXJhY3RlcnMoY29uc3QgY2hhciogZGF0ZVN0cmluZyk7Citkb3VibGUgdGlt
ZUNsaXAoZG91YmxlKTsKKy8vIGRheU9mV2VlazogWzAsIDZdIDAgYmVpbmcgTW9uZGF5LCBkYXk6
IFsxLCAzMV0sIG1vbnRoOiBbMCwgMTFdLCB5ZWFyOiBleDogMjAxMSwgaG91cnM6IFswLCAyM10s
IG1pbnV0ZXM6IFswLCA1OV0sIHNlY29uZHM6IFswLCA1OV0sIHV0Y09mZnNldDogWy03MjAsNzIw
XS4gCitTdHJpbmcgbWFrZVJGQzI4MjJEYXRlU3RyaW5nKHVuc2lnbmVkIGRheU9mV2VlaywgdW5z
aWduZWQgZGF5LCB1bnNpZ25lZCBtb250aCwgdW5zaWduZWQgeWVhciwgdW5zaWduZWQgaG91cnMs
IHVuc2lnbmVkIG1pbnV0ZXMsIHVuc2lnbmVkIHNlY29uZHMsIGludCB1dGNPZmZzZXQpOworCitp
bmxpbmUgZG91YmxlIGpzQ3VycmVudFRpbWUoKQoreworICAgIC8vIEphdmFTY3JpcHQgZG9lc24n
dCByZWNvZ25pemUgZnJhY3Rpb25zIG9mIGEgbWlsbGlzZWNvbmQuCisgICAgcmV0dXJuIGZsb29y
KFdURjo6Y3VycmVudFRpbWVNUygpKTsKK30KKworY29uc3QgY2hhciAqIGNvbnN0IHdlZWtkYXlO
YW1lWzddID0geyAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiLCAiU3Vu
IiB9OworY29uc3QgY2hhciAqIGNvbnN0IG1vbnRoTmFtZVsxMl0gPSB7ICJKYW4iLCAiRmViIiwg
Ik1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAi
Tm92IiwgIkRlYyIgfTsKKworY29uc3QgZG91YmxlIGhvdXJzUGVyRGF5ID0gMjQuMDsKK2NvbnN0
IGRvdWJsZSBtaW51dGVzUGVySG91ciA9IDYwLjA7Citjb25zdCBkb3VibGUgc2Vjb25kc1Blckhv
dXIgPSA2MC4wICogNjAuMDsKK2NvbnN0IGRvdWJsZSBzZWNvbmRzUGVyTWludXRlID0gNjAuMDsK
K2NvbnN0IGRvdWJsZSBtc1BlclNlY29uZCA9IDEwMDAuMDsKK2NvbnN0IGRvdWJsZSBtc1Blck1p
bnV0ZSA9IDYwLjAgKiAxMDAwLjA7Citjb25zdCBkb3VibGUgbXNQZXJIb3VyID0gNjAuMCAqIDYw
LjAgKiAxMDAwLjA7Citjb25zdCBkb3VibGUgbXNQZXJEYXkgPSAyNC4wICogNjAuMCAqIDYwLjAg
KiAxMDAwLjA7Citjb25zdCBkb3VibGUgbXNQZXJNb250aCA9IDI1OTIwMDAwMDAuMDsKKworLy8g
UmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgZnJvbSAxOTcwLTAxLTAxIHRvIHRoZSBzcGVjaWZp
ZWQgZGF0ZS4KK2RvdWJsZSBkYXRlVG9EYXlzRnJvbTE5NzAoaW50IHllYXIsIGludCBtb250aCwg
aW50IGRheSk7CitpbnQgbXNUb1llYXIoZG91YmxlIG1zKTsKK2ludCBkYXlJblllYXIoZG91Ymxl
IG1zLCBpbnQgeWVhcik7CitpbnQgbW9udGhGcm9tRGF5SW5ZZWFyKGludCBkYXlJblllYXIsIGJv
b2wgbGVhcFllYXIpOworaW50IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKGludCBkYXlJblllYXIs
IGJvb2wgbGVhcFllYXIpOworCisvLyBSZXR1cm5zIG9mZnNldCBtaWxsaXNlY29uZHMgZm9yIFVU
QyBhbmQgRFNULgoraW50MzJfdCBjYWxjdWxhdGVVVENPZmZzZXQoKTsKK2RvdWJsZSBjYWxjdWxh
dGVEU1RPZmZzZXQoZG91YmxlIG1zLCBkb3VibGUgdXRjT2Zmc2V0KTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKK3VzaW5nIFdURjo6YWRvcHRBcnJheVB0cjsKK3VzaW5nIFdURjo6ZGF0ZVRvRGF5
c0Zyb20xOTcwOwordXNpbmcgV1RGOjpkYXlJbk1vbnRoRnJvbURheUluWWVhcjsKK3VzaW5nIFdU
Rjo6ZGF5SW5ZZWFyOwordXNpbmcgV1RGOjptaW51dGVzUGVySG91cjsKK3VzaW5nIFdURjo6bW9u
dGhGcm9tRGF5SW5ZZWFyOwordXNpbmcgV1RGOjptc1BlckRheTsKK3VzaW5nIFdURjo6bXNQZXJN
aW51dGU7Cit1c2luZyBXVEY6Om1zUGVyU2Vjb25kOwordXNpbmcgV1RGOjptc1RvWWVhcjsKK3Vz
aW5nIFdURjo6c2Vjb25kc1Blck1pbnV0ZTsKK3VzaW5nIFdURjo6cGFyc2VEYXRlRnJvbU51bGxU
ZXJtaW5hdGVkQ2hhcmFjdGVyczsKK3VzaW5nIFdURjo6bWFrZVJGQzI4MjJEYXRlU3RyaW5nOwor
dXNpbmcgV1RGOjpjYWxjdWxhdGVVVENPZmZzZXQ7Cit1c2luZyBXVEY6OmNhbGN1bGF0ZURTVE9m
ZnNldDsKKworI2lmIFVTRShKU0MpCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4ZWNTdGF0ZTsK
K3N0cnVjdCBHcmVnb3JpYW5EYXRlVGltZTsKKwordm9pZCBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUo
RXhlY1N0YXRlKiwgZG91YmxlLCBib29sIG91dHB1dElzVVRDLCBHcmVnb3JpYW5EYXRlVGltZSYp
OworZG91YmxlIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhFeGVjU3RhdGUqLCBjb25zdCBHcmVnb3Jp
YW5EYXRlVGltZSYsIGRvdWJsZSwgYm9vbCBpbnB1dElzVVRDKTsKK2RvdWJsZSBnZXRVVENPZmZz
ZXQoRXhlY1N0YXRlKik7Citkb3VibGUgcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFj
dGVycyhFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBkYXRlU3RyaW5nKTsKKworLy8gSW50ZW50aW9u
YWxseSBvdmVycmlkZGluZyB0aGUgZGVmYXVsdCB0bSBvZiB0aGUgc3lzdGVtLgorLy8gVGhlIG1l
bWJlcnMgb2YgdG0gZGlmZmVyIG9uIHZhcmlvdXMgb3BlcmF0aW5nIHN5c3RlbXMuCitzdHJ1Y3Qg
R3JlZ29yaWFuRGF0ZVRpbWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyZWdvcmlhbkRh
dGVUaW1lKTsKK3B1YmxpYzoKKyAgICBHcmVnb3JpYW5EYXRlVGltZSgpCisgICAgICAgIDogc2Vj
b25kKDApCisgICAgICAgICwgbWludXRlKDApCisgICAgICAgICwgaG91cigwKQorICAgICAgICAs
IHdlZWtEYXkoMCkKKyAgICAgICAgLCBtb250aERheSgwKQorICAgICAgICAsIHllYXJEYXkoMCkK
KyAgICAgICAgLCBtb250aCgwKQorICAgICAgICAsIHllYXIoMCkKKyAgICAgICAgLCBpc0RTVCgw
KQorICAgICAgICAsIHV0Y09mZnNldCgwKQorICAgIHsKKyAgICB9CisKKyAgICBHcmVnb3JpYW5E
YXRlVGltZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IHRtJiBpblRtKQorICAgICAgICA6IHNlY29u
ZChpblRtLnRtX3NlYykKKyAgICAgICAgLCBtaW51dGUoaW5UbS50bV9taW4pCisgICAgICAgICwg
aG91cihpblRtLnRtX2hvdXIpCisgICAgICAgICwgd2Vla0RheShpblRtLnRtX3dkYXkpCisgICAg
ICAgICwgbW9udGhEYXkoaW5UbS50bV9tZGF5KQorICAgICAgICAsIHllYXJEYXkoaW5UbS50bV95
ZGF5KQorICAgICAgICAsIG1vbnRoKGluVG0udG1fbW9uKQorICAgICAgICAsIHllYXIoaW5UbS50
bV95ZWFyKQorICAgICAgICAsIGlzRFNUKGluVG0udG1faXNkc3QpCisgICAgeworICAgICAgICBV
TlVTRURfUEFSQU0oZXhlYyk7CisjaWYgSEFWRShUTV9HTVRPRkYpCisgICAgICAgIHV0Y09mZnNl
dCA9IHN0YXRpY19jYXN0PGludD4oaW5UbS50bV9nbXRvZmYpOworI2Vsc2UKKyAgICAgICAgdXRj
T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8aW50PihnZXRVVENPZmZzZXQoZXhlYykgLyBXVEY6Om1zUGVy
U2Vjb25kICsgKGlzRFNUID8gV1RGOjpzZWNvbmRzUGVySG91ciA6IDApKTsKKyNlbmRpZgorCisj
aWYgSEFWRShUTV9aT05FKQorICAgICAgICBpbnQgaW5ab25lU2l6ZSA9IHN0cmxlbihpblRtLnRt
X3pvbmUpICsgMTsKKyAgICAgICAgdGltZVpvbmUgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2lu
Wm9uZVNpemVdKTsKKyAgICAgICAgc3RybmNweSh0aW1lWm9uZS5nZXQoKSwgaW5UbS50bV96b25l
LCBpblpvbmVTaXplKTsKKyNlbHNlCisgICAgICAgIHRpbWVab25lID0gbnVsbHB0cjsKKyNlbmRp
ZgorICAgIH0KKworICAgIG9wZXJhdG9yIHRtKCkgY29uc3QKKyAgICB7CisgICAgICAgIHRtIHJl
dDsKKyAgICAgICAgbWVtc2V0KCZyZXQsIDAsIHNpemVvZihyZXQpKTsKKworICAgICAgICByZXQu
dG1fc2VjICAgPSAgc2Vjb25kOworICAgICAgICByZXQudG1fbWluICAgPSAgbWludXRlOworICAg
ICAgICByZXQudG1faG91ciAgPSAgaG91cjsKKyAgICAgICAgcmV0LnRtX3dkYXkgID0gIHdlZWtE
YXk7CisgICAgICAgIHJldC50bV9tZGF5ICA9ICBtb250aERheTsKKyAgICAgICAgcmV0LnRtX3lk
YXkgID0gIHllYXJEYXk7CisgICAgICAgIHJldC50bV9tb24gICA9ICBtb250aDsKKyAgICAgICAg
cmV0LnRtX3llYXIgID0gIHllYXI7CisgICAgICAgIHJldC50bV9pc2RzdCA9ICBpc0RTVDsKKwor
I2lmIEhBVkUoVE1fR01UT0ZGKQorICAgICAgICByZXQudG1fZ210b2ZmID0gc3RhdGljX2Nhc3Q8
bG9uZz4odXRjT2Zmc2V0KTsKKyNlbmRpZgorI2lmIEhBVkUoVE1fWk9ORSkKKyAgICAgICAgcmV0
LnRtX3pvbmUgPSB0aW1lWm9uZS5nZXQoKTsKKyNlbmRpZgorCisgICAgICAgIHJldHVybiByZXQ7
CisgICAgfQorCisgICAgdm9pZCBjb3B5RnJvbShjb25zdCBHcmVnb3JpYW5EYXRlVGltZSYgcmhz
KQorICAgIHsKKyAgICAgICAgc2Vjb25kID0gcmhzLnNlY29uZDsKKyAgICAgICAgbWludXRlID0g
cmhzLm1pbnV0ZTsKKyAgICAgICAgaG91ciA9IHJocy5ob3VyOworICAgICAgICB3ZWVrRGF5ID0g
cmhzLndlZWtEYXk7CisgICAgICAgIG1vbnRoRGF5ID0gcmhzLm1vbnRoRGF5OworICAgICAgICB5
ZWFyRGF5ID0gcmhzLnllYXJEYXk7CisgICAgICAgIG1vbnRoID0gcmhzLm1vbnRoOworICAgICAg
ICB5ZWFyID0gcmhzLnllYXI7CisgICAgICAgIGlzRFNUID0gcmhzLmlzRFNUOworICAgICAgICB1
dGNPZmZzZXQgPSByaHMudXRjT2Zmc2V0OworICAgICAgICBpZiAocmhzLnRpbWVab25lKSB7Cisg
ICAgICAgICAgICBpbnQgaW5ab25lU2l6ZSA9IHN0cmxlbihyaHMudGltZVpvbmUuZ2V0KCkpICsg
MTsKKyAgICAgICAgICAgIHRpbWVab25lID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltpblpvbmVT
aXplXSk7CisgICAgICAgICAgICBzdHJuY3B5KHRpbWVab25lLmdldCgpLCByaHMudGltZVpvbmUu
Z2V0KCksIGluWm9uZVNpemUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRpbWVab25l
ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpbnQgc2Vjb25kOworICAgIGludCBtaW51dGU7Cisg
ICAgaW50IGhvdXI7CisgICAgaW50IHdlZWtEYXk7CisgICAgaW50IG1vbnRoRGF5OworICAgIGlu
dCB5ZWFyRGF5OworICAgIGludCBtb250aDsKKyAgICBpbnQgeWVhcjsKKyAgICBpbnQgaXNEU1Q7
CisgICAgaW50IHV0Y09mZnNldDsKKyAgICBPd25BcnJheVB0cjxjaGFyPiB0aW1lWm9uZTsKK307
CisKK3N0YXRpYyBpbmxpbmUgaW50IGdtdG9mZnNldChjb25zdCBHcmVnb3JpYW5EYXRlVGltZSYg
dCkKK3sKKyAgICByZXR1cm4gdC51dGNPZmZzZXQ7Cit9Cit9IC8vIG5hbWVzcGFjZSBKU0MKKyNl
bmRpZiAvLyBVU0UoSlNDKQorCisjZW5kaWYgLy8gRGF0ZU1hdGhfaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguaAkocmV2aXNpb24gMTAwMTcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw4MSArNDAsMTMgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBEYXRlTWF0aF9oCi0jZGVm
aW5lIERhdGVNYXRoX2gKKyNpZm5kZWYgSlNEYXRlTWF0aF9oCisjZGVmaW5lIEpTRGF0ZU1hdGhf
aAogCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0
cmluZy5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
LSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0KLW5hbWVzcGFjZSBX
VEYgewotdm9pZCBpbml0aWFsaXplRGF0ZXMoKTsKLWludCBlcXVpdmFsZW50WWVhckZvckRTVChp
bnQgeWVhcik7Ci0KLS8vIE5vdCByZWFsbHkgbWF0aCByZWxhdGVkLCBidXQgdGhpcyBpcyBjdXJy
ZW50bHkgdGhlIG9ubHkgc2hhcmVkIHBsYWNlIHRvIHB1dCB0aGVzZS4KLWRvdWJsZSBwYXJzZUVT
NURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcp
OwotZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoY29uc3QgY2hh
ciogZGF0ZVN0cmluZyk7Ci1kb3VibGUgdGltZUNsaXAoZG91YmxlKTsKLS8vIGRheU9mV2Vlazog
WzAsIDZdIDAgYmVpbmcgTW9uZGF5LCBkYXk6IFsxLCAzMV0sIG1vbnRoOiBbMCwgMTFdLCB5ZWFy
OiBleDogMjAxMSwgaG91cnM6IFswLCAyM10sIG1pbnV0ZXM6IFswLCA1OV0sIHNlY29uZHM6IFsw
LCA1OV0sIHV0Y09mZnNldDogWy03MjAsNzIwXS4gCi1TdHJpbmcgbWFrZVJGQzI4MjJEYXRlU3Ry
aW5nKHVuc2lnbmVkIGRheU9mV2VlaywgdW5zaWduZWQgZGF5LCB1bnNpZ25lZCBtb250aCwgdW5z
aWduZWQgeWVhciwgdW5zaWduZWQgaG91cnMsIHVuc2lnbmVkIG1pbnV0ZXMsIHVuc2lnbmVkIHNl
Y29uZHMsIGludCB1dGNPZmZzZXQpOworI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgogCi1pbmxp
bmUgZG91YmxlIGpzQ3VycmVudFRpbWUoKQotewotICAgIC8vIEphdmFTY3JpcHQgZG9lc24ndCBy
ZWNvZ25pemUgZnJhY3Rpb25zIG9mIGEgbWlsbGlzZWNvbmQuCi0gICAgcmV0dXJuIGZsb29yKFdU
Rjo6Y3VycmVudFRpbWVNUygpKTsKLX0KLQotY29uc3QgY2hhciAqIGNvbnN0IHdlZWtkYXlOYW1l
WzddID0geyAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiLCAiU3VuIiB9
OwotY29uc3QgY2hhciAqIGNvbnN0IG1vbnRoTmFtZVsxMl0gPSB7ICJKYW4iLCAiRmViIiwgIk1h
ciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92
IiwgIkRlYyIgfTsKLQotY29uc3QgZG91YmxlIGhvdXJzUGVyRGF5ID0gMjQuMDsKLWNvbnN0IGRv
dWJsZSBtaW51dGVzUGVySG91ciA9IDYwLjA7Ci1jb25zdCBkb3VibGUgc2Vjb25kc1BlckhvdXIg
PSA2MC4wICogNjAuMDsKLWNvbnN0IGRvdWJsZSBzZWNvbmRzUGVyTWludXRlID0gNjAuMDsKLWNv
bnN0IGRvdWJsZSBtc1BlclNlY29uZCA9IDEwMDAuMDsKLWNvbnN0IGRvdWJsZSBtc1Blck1pbnV0
ZSA9IDYwLjAgKiAxMDAwLjA7Ci1jb25zdCBkb3VibGUgbXNQZXJIb3VyID0gNjAuMCAqIDYwLjAg
KiAxMDAwLjA7Ci1jb25zdCBkb3VibGUgbXNQZXJEYXkgPSAyNC4wICogNjAuMCAqIDYwLjAgKiAx
MDAwLjA7Ci1jb25zdCBkb3VibGUgbXNQZXJNb250aCA9IDI1OTIwMDAwMDAuMDsKLQotLy8gUmV0
dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgZnJvbSAxOTcwLTAxLTAxIHRvIHRoZSBzcGVjaWZpZWQg
ZGF0ZS4KLWRvdWJsZSBkYXRlVG9EYXlzRnJvbTE5NzAoaW50IHllYXIsIGludCBtb250aCwgaW50
IGRheSk7Ci1pbnQgbXNUb1llYXIoZG91YmxlIG1zKTsKLWludCBkYXlJblllYXIoZG91YmxlIG1z
LCBpbnQgeWVhcik7Ci1pbnQgbW9udGhGcm9tRGF5SW5ZZWFyKGludCBkYXlJblllYXIsIGJvb2wg
bGVhcFllYXIpOwotaW50IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKGludCBkYXlJblllYXIsIGJv
b2wgbGVhcFllYXIpOwotCi0vLyBSZXR1cm5zIG9mZnNldCBtaWxsaXNlY29uZHMgZm9yIFVUQyBh
bmQgRFNULgotaW50MzJfdCBjYWxjdWxhdGVVVENPZmZzZXQoKTsKLWRvdWJsZSBjYWxjdWxhdGVE
U1RPZmZzZXQoZG91YmxlIG1zLCBkb3VibGUgdXRjT2Zmc2V0KTsKLQotfSAvLyBuYW1lc3BhY2Ug
V1RGCi0KLXVzaW5nIFdURjo6YWRvcHRBcnJheVB0cjsKLXVzaW5nIFdURjo6ZGF0ZVRvRGF5c0Zy
b20xOTcwOwotdXNpbmcgV1RGOjpkYXlJbk1vbnRoRnJvbURheUluWWVhcjsKLXVzaW5nIFdURjo6
ZGF5SW5ZZWFyOwotdXNpbmcgV1RGOjptaW51dGVzUGVySG91cjsKLXVzaW5nIFdURjo6bW9udGhG
cm9tRGF5SW5ZZWFyOwotdXNpbmcgV1RGOjptc1BlckRheTsKLXVzaW5nIFdURjo6bXNQZXJNaW51
dGU7Ci11c2luZyBXVEY6Om1zUGVyU2Vjb25kOwotdXNpbmcgV1RGOjptc1RvWWVhcjsKLXVzaW5n
IFdURjo6c2Vjb25kc1Blck1pbnV0ZTsKLXVzaW5nIFdURjo6cGFyc2VEYXRlRnJvbU51bGxUZXJt
aW5hdGVkQ2hhcmFjdGVyczsKLXVzaW5nIFdURjo6bWFrZVJGQzI4MjJEYXRlU3RyaW5nOwotdXNp
bmcgV1RGOjpjYWxjdWxhdGVVVENPZmZzZXQ7Ci11c2luZyBXVEY6OmNhbGN1bGF0ZURTVE9mZnNl
dDsKLQotI2lmIFVTRShKU0MpCiBuYW1lc3BhY2UgSlNDIHsKKwogY2xhc3MgRXhlY1N0YXRlOwog
c3RydWN0IEdyZWdvcmlhbkRhdGVUaW1lOwogCkBAIC0yMzEsNyArMTYzLDcgQEAgc3RhdGljIGlu
bGluZSBpbnQgZ210b2Zmc2V0KGNvbnN0IEdyZWdvcgogewogICAgIHJldHVybiB0LnV0Y09mZnNl
dDsKIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCi0jZW5kaWYgLy8gVVNFKEpTQykKIAotI2VuZGlm
IC8vIERhdGVNYXRoX2gKKyNlbmRpZiAvLyBKU0RhdGVNYXRoX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvRGF0ZU1hdGguY3BwCShyZXZpc2lvbiAxMDAxNzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTMgKzc1
LDcgQEAKICNpbmNsdWRlICJBc3NlcnRpb25zLmgiCiAjaW5jbHVkZSAiQVNDSUlDVHlwZS5oIgog
I2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCi0jaWYgVVNFKEpTQykKLSNpbmNsdWRlICJKU09iamVj
dC5oIgotI2VuZGlmCiAjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgotI2lmIFVTRShKU0MpCi0jaW5j
bHVkZSAiU2NvcGVDaGFpbi5oIgotI2VuZGlmCiAjaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCiAj
aW5jbHVkZSAiU3RyaW5nRXh0cmFzLmgiCiAKQEAgLTEwOSwxMCArMTAzLDYgQEAgZXh0ZXJuICJD
IiBzdHJ1Y3QgdG0gKiBsb2NhbHRpbWUoY29uc3QgdAogI2luY2x1ZGUgPHN5cy90aW1lYi5oPgog
I2VuZGlmCiAKLSNpZiBVU0UoSlNDKQotI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgotI2VuZGlmCi0K
IHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMTM4LDcgKzEyOCw3
IEBAIHN0YXRpYyBjb25zdCBpbnQgZmlyc3REYXlPZk1vbnRoWzJdWzEyXSAKICAgICB7MCwgMzEs
IDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzV9CiB9OwogCi1z
dGF0aWMgaW5saW5lIGJvb2wgaXNMZWFwWWVhcihpbnQgeWVhcikKK2Jvb2wgaXNMZWFwWWVhcihp
bnQgeWVhcikKIHsKICAgICBpZiAoeWVhciAlIDQgIT0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTczLDcgKzE2Myw3IEBAIHN0YXRpYyBpbmxpbmUgZG91YmxlIGRheXNGcm9tMTk3MFRv
WWVhcigKICAgICByZXR1cm4gMzY1LjAgKiAoeWVhciAtIDE5NzApICsgeWVhcnNUb0FkZEJ5NFJ1
bGUgLSB5ZWFyc1RvRXhjbHVkZUJ5MTAwUnVsZSArIHllYXJzVG9BZGRCeTQwMFJ1bGU7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgZG91YmxlIG1zVG9EYXlzKGRvdWJsZSBtcykKK2RvdWJsZSBtc1RvRGF5
cyhkb3VibGUgbXMpCiB7CiAgICAgcmV0dXJuIGZsb29yKG1zIC8gbXNQZXJEYXkpOwogfQpAQCAt
MjEwLDI0ICsyMDAsNyBAQCBzdGF0aWMgaW5saW5lIGRvdWJsZSBtc1RvTWlsbGlzZWNvbmRzKGRv
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLy8gMDogU3VuZGF5LCAxOiBNb25kYXksIGV0Yy4K
LXN0YXRpYyBpbmxpbmUgaW50IG1zVG9XZWVrRGF5KGRvdWJsZSBtcykKLXsKLSAgICBpbnQgd2Qg
PSAoc3RhdGljX2Nhc3Q8aW50Pihtc1RvRGF5cyhtcykpICsgNCkgJSA3OwotICAgIGlmICh3ZCA8
IDApCi0gICAgICAgIHdkICs9IDc7Ci0gICAgcmV0dXJuIHdkOwotfQotCi1zdGF0aWMgaW5saW5l
IGludCBtc1RvU2Vjb25kcyhkb3VibGUgbXMpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IGZtb2Qo
Zmxvb3IobXMgLyBtc1BlclNlY29uZCksIHNlY29uZHNQZXJNaW51dGUpOwotICAgIGlmIChyZXN1
bHQgPCAwKQotICAgICAgICByZXN1bHQgKz0gc2Vjb25kc1Blck1pbnV0ZTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihyZXN1bHQpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtc1RvTWlu
dXRlcyhkb3VibGUgbXMpCitpbnQgbXNUb01pbnV0ZXMoZG91YmxlIG1zKQogewogICAgIGRvdWJs
ZSByZXN1bHQgPSBmbW9kKGZsb29yKG1zIC8gbXNQZXJNaW51dGUpLCBtaW51dGVzUGVySG91cik7
CiAgICAgaWYgKHJlc3VsdCA8IDApCkBAIC0yMzUsNyArMjA4LDcgQEAgc3RhdGljIGlubGluZSBp
bnQgbXNUb01pbnV0ZXMoZG91YmxlIG1zKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHJl
c3VsdCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG1zVG9Ib3Vycyhkb3VibGUgbXMpCitpbnQg
bXNUb0hvdXJzKGRvdWJsZSBtcykKIHsKICAgICBkb3VibGUgcmVzdWx0ID0gZm1vZChmbG9vciht
cy9tc1BlckhvdXIpLCBob3Vyc1BlckRheSk7CiAgICAgaWYgKHJlc3VsdCA8IDApCkBAIC0zMTks
MTEgKzI5Miw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1vbnRoVG9EYXlJblllYXIoaW50IG0KICAg
ICByZXR1cm4gZmlyc3REYXlPZk1vbnRoW2lzTGVhcFllYXJdW21vbnRoXTsKIH0KIAotc3RhdGlj
IGlubGluZSBkb3VibGUgdGltZVRvTVMoZG91YmxlIGhvdXIsIGRvdWJsZSBtaW4sIGRvdWJsZSBz
ZWMsIGRvdWJsZSBtcykKLXsKLSAgICByZXR1cm4gKCgoaG91ciAqIG1pbnV0ZXNQZXJIb3VyICsg
bWluKSAqIHNlY29uZHNQZXJNaW51dGUgKyBzZWMpICogbXNQZXJTZWNvbmQgKyBtcyk7Ci19Ci0K
IGRvdWJsZSBkYXRlVG9EYXlzRnJvbTE5NzAoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSkK
IHsKICAgICB5ZWFyICs9IG1vbnRoIC8gMTI7CkBAIC03MjQsNyArNjkyLDcgQEAgZG91YmxlIHBh
cnNlRVM1RGF0ZUZyb21OdWxsVGVybWluYXRlZENoYQogfQogCiAvLyBPZGQgY2FzZSB3aGVyZSAn
ZXhlYycgaXMgYWxsb3dlZCB0byBiZSAwLCB0byBhY2NvbW9kYXRlIGEgY2FsbGVyIGluIFdlYkNv
cmUuCi1zdGF0aWMgZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMo
Y29uc3QgY2hhciogZGF0ZVN0cmluZywgYm9vbCYgaGF2ZVRaLCBpbnQmIG9mZnNldCkKK2RvdWJs
ZSBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVT
dHJpbmcsIGJvb2wmIGhhdmVUWiwgaW50JiBvZmZzZXQpCiB7CiAgICAgaGF2ZVRaID0gZmFsc2U7
CiAgICAgb2Zmc2V0ID0gMDsKQEAgLTEwNDgsMTQzICsxMDE2LDUgQEAgU3RyaW5nIG1ha2VSRkMy
ODIyRGF0ZVN0cmluZyh1bnNpZ25lZCBkYQogCiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKTsKIH0KLX0gLy8gbmFtZXNwYWNlIFdURgogCi0jaWYgVVNFKEpTQykKLW5hbWVzcGFj
ZSBKU0MgewotCi0vLyBHZXQgdGhlIERTVCBvZmZzZXQgZm9yIHRoZSB0aW1lIHBhc3NlZCBpbi4K
LS8vCi0vLyBOT1RFOiBUaGUgaW1wbGVtZW50YXRpb24gcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQg
bm8gdGltZSB6b25lcyBoYXZlCi0vLyBtb3JlIHRoYW4gb25lIGRheWxpZ2h0IHNhdmluZ3Mgb2Zm
c2V0IGNoYW5nZSBwZXIgbW9udGguCi0vLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRo
IE5hTiBpdCByZXR1cm5zIE5hTi4KLXN0YXRpYyBkb3VibGUgZ2V0RFNUT2Zmc2V0KEV4ZWNTdGF0
ZSogZXhlYywgZG91YmxlIG1zLCBkb3VibGUgdXRjT2Zmc2V0KQotewotICAgIERTVE9mZnNldENh
Y2hlJiBjYWNoZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5kc3RPZmZzZXRDYWNoZTsKLSAgICBkb3Vi
bGUgc3RhcnQgPSBjYWNoZS5zdGFydDsKLSAgICBkb3VibGUgZW5kID0gY2FjaGUuZW5kOwotCi0g
ICAgaWYgKHN0YXJ0IDw9IG1zKSB7Ci0gICAgICAgIC8vIElmIHRoZSB0aW1lIGZpdHMgaW4gdGhl
IGNhY2hlZCBpbnRlcnZhbCwgcmV0dXJuIHRoZSBjYWNoZWQgb2Zmc2V0LgotICAgICAgICBpZiAo
bXMgPD0gZW5kKSByZXR1cm4gY2FjaGUub2Zmc2V0OwotCi0gICAgICAgIC8vIENvbXB1dGUgYSBw
b3NzaWJsZSBuZXcgaW50ZXJ2YWwgZW5kLgotICAgICAgICBkb3VibGUgbmV3RW5kID0gZW5kICsg
Y2FjaGUuaW5jcmVtZW50OwotCi0gICAgICAgIGlmIChtcyA8PSBuZXdFbmQpIHsKLSAgICAgICAg
ICAgIGRvdWJsZSBlbmRPZmZzZXQgPSBjYWxjdWxhdGVEU1RPZmZzZXQobmV3RW5kLCB1dGNPZmZz
ZXQpOwotICAgICAgICAgICAgaWYgKGNhY2hlLm9mZnNldCA9PSBlbmRPZmZzZXQpIHsKLSAgICAg
ICAgICAgICAgICAvLyBJZiB0aGUgb2Zmc2V0IGF0IHRoZSBlbmQgb2YgdGhlIG5ldyBpbnRlcnZh
bCBzdGlsbCBtYXRjaGVzCi0gICAgICAgICAgICAgICAgLy8gdGhlIG9mZnNldCBpbiB0aGUgY2Fj
aGUsIHdlIGdyb3cgdGhlIGNhY2hlZCB0aW1lIGludGVydmFsCi0gICAgICAgICAgICAgICAgLy8g
YW5kIHJldHVybiB0aGUgb2Zmc2V0LgotICAgICAgICAgICAgICAgIGNhY2hlLmVuZCA9IG5ld0Vu
ZDsKLSAgICAgICAgICAgICAgICBjYWNoZS5pbmNyZW1lbnQgPSBtc1Blck1vbnRoOwotICAgICAg
ICAgICAgICAgIHJldHVybiBlbmRPZmZzZXQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGRvdWJsZSBvZmZzZXQgPSBjYWxjdWxhdGVEU1RPZmZzZXQobXMsIHV0Y09mZnNl
dCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBlbmRPZmZzZXQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gVGhlIG9mZnNldCBhdCB0aGUgZ2l2ZW4gdGltZSBpcyBlcXVhbCB0byB0
aGUgb2Zmc2V0IGF0IHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBuZXcgZW5kIG9mIHRoZSBp
bnRlcnZhbCwgc28gdGhhdCBtZWFucyB0aGF0IHdlJ3ZlIGp1c3Qgc2tpcHBlZAotICAgICAgICAg
ICAgICAgICAgICAvLyB0aGUgcG9pbnQgaW4gdGltZSB3aGVyZSB0aGUgRFNUIG9mZnNldCBjaGFu
Z2Ugb2NjdXJyZWQuIFVwZGF0ZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGludGVydmFs
IHRvIHJlZmxlY3QgdGhpcyBhbmQgcmVzZXQgdGhlIGluY3JlbWVudC4KLSAgICAgICAgICAgICAg
ICAgICAgY2FjaGUuc3RhcnQgPSBtczsKLSAgICAgICAgICAgICAgICAgICAgY2FjaGUuZW5kID0g
bmV3RW5kOwotICAgICAgICAgICAgICAgICAgICBjYWNoZS5pbmNyZW1lbnQgPSBtc1Blck1vbnRo
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBp
bnRlcnZhbCBjb250YWlucyBhIERTVCBvZmZzZXQgY2hhbmdlIGFuZCB0aGUgZ2l2ZW4gdGltZSBp
cwotICAgICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgaXQuIEFkanVzdCB0aGUgaW5jcmVtZW50
IHRvIGF2b2lkIGEgbGluZWFyIHNlYXJjaCBmb3IKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IG9mZnNldCBjaGFuZ2UgcG9pbnQgYW5kIGNoYW5nZSB0aGUgZW5kIG9mIHRoZSBpbnRlcnZhbC4K
LSAgICAgICAgICAgICAgICAgICAgY2FjaGUuaW5jcmVtZW50IC89IDM7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhY2hlLmVuZCA9IG1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAvLyBVcGRhdGUgdGhlIG9mZnNldCBpbiB0aGUgY2FjaGUgYW5kIHJldHVybiBpdC4KLSAgICAg
ICAgICAgICAgICBjYWNoZS5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IG9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENvbXB1
dGUgdGhlIERTVCBvZmZzZXQgZm9yIHRoZSB0aW1lIGFuZCBzaHJpbmsgdGhlIGNhY2hlIGludGVy
dmFsCi0gICAgLy8gdG8gb25seSBjb250YWluIHRoZSB0aW1lLiBUaGlzIGFsbG93cyBmYXN0IHJl
cGVhdGVkIERTVCBvZmZzZXQKLSAgICAvLyBjb21wdXRhdGlvbnMgZm9yIHRoZSBzYW1lIHRpbWUu
Ci0gICAgZG91YmxlIG9mZnNldCA9IGNhbGN1bGF0ZURTVE9mZnNldChtcywgdXRjT2Zmc2V0KTsK
LSAgICBjYWNoZS5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgY2FjaGUuc3RhcnQgPSBtczsKLSAgICBj
YWNoZS5lbmQgPSBtczsKLSAgICBjYWNoZS5pbmNyZW1lbnQgPSBtc1Blck1vbnRoOwotICAgIHJl
dHVybiBvZmZzZXQ7Ci19Ci0KLS8qCi0gKiBHZXQgdGhlIGRpZmZlcmVuY2UgaW4gbWlsbGlzZWNv
bmRzIGJldHdlZW4gdGhpcyB0aW1lIHpvbmUgYW5kIFVUQyAoR01UKQotICogTk9UIGluY2x1ZGlu
ZyBEU1QuCi0gKi8KLWRvdWJsZSBnZXRVVENPZmZzZXQoRXhlY1N0YXRlKiBleGVjKQotewotICAg
IGRvdWJsZSB1dGNPZmZzZXQgPSBleGVjLT5nbG9iYWxEYXRhKCkuY2FjaGVkVVRDT2Zmc2V0Owot
ICAgIGlmICghaXNuYW4odXRjT2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIHV0Y09mZnNldDsKLSAg
ICBleGVjLT5nbG9iYWxEYXRhKCkuY2FjaGVkVVRDT2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zmc2V0
KCk7Ci0gICAgcmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5jYWNoZWRVVENPZmZzZXQ7Ci19Ci0K
LWRvdWJsZSBncmVnb3JpYW5EYXRlVGltZVRvTVMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBHcmVn
b3JpYW5EYXRlVGltZSYgdCwgZG91YmxlIG1pbGxpU2Vjb25kcywgYm9vbCBpbnB1dElzVVRDKQot
ewotICAgIGRvdWJsZSBkYXkgPSBkYXRlVG9EYXlzRnJvbTE5NzAodC55ZWFyICsgMTkwMCwgdC5t
b250aCwgdC5tb250aERheSk7Ci0gICAgZG91YmxlIG1zID0gdGltZVRvTVModC5ob3VyLCB0Lm1p
bnV0ZSwgdC5zZWNvbmQsIG1pbGxpU2Vjb25kcyk7Ci0gICAgZG91YmxlIHJlc3VsdCA9IChkYXkg
KiBXVEY6Om1zUGVyRGF5KSArIG1zOwotCi0gICAgaWYgKCFpbnB1dElzVVRDKSB7IC8vIGNvbnZl
cnQgdG8gVVRDCi0gICAgICAgIGRvdWJsZSB1dGNPZmZzZXQgPSBnZXRVVENPZmZzZXQoZXhlYyk7
Ci0gICAgICAgIHJlc3VsdCAtPSB1dGNPZmZzZXQ7Ci0gICAgICAgIHJlc3VsdCAtPSBnZXREU1RP
ZmZzZXQoZXhlYywgcmVzdWx0LCB1dGNPZmZzZXQpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLS8vIGlucHV0IGlzIFVUQwotdm9pZCBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoRXhl
Y1N0YXRlKiBleGVjLCBkb3VibGUgbXMsIGJvb2wgb3V0cHV0SXNVVEMsIEdyZWdvcmlhbkRhdGVU
aW1lJiB0bSkKLXsKLSAgICBkb3VibGUgZHN0T2ZmID0gMC4wOwotICAgIGRvdWJsZSB1dGNPZmYg
PSAwLjA7Ci0gICAgaWYgKCFvdXRwdXRJc1VUQykgewotICAgICAgICB1dGNPZmYgPSBnZXRVVENP
ZmZzZXQoZXhlYyk7Ci0gICAgICAgIGRzdE9mZiA9IGdldERTVE9mZnNldChleGVjLCBtcywgdXRj
T2ZmKTsKLSAgICAgICAgbXMgKz0gZHN0T2ZmICsgdXRjT2ZmOwotICAgIH0KLQotICAgIGNvbnN0
IGludCB5ZWFyID0gbXNUb1llYXIobXMpOwotICAgIHRtLnNlY29uZCAgID0gIG1zVG9TZWNvbmRz
KG1zKTsKLSAgICB0bS5taW51dGUgICA9ICBtc1RvTWludXRlcyhtcyk7Ci0gICAgdG0uaG91ciAg
ICAgPSAgbXNUb0hvdXJzKG1zKTsKLSAgICB0bS53ZWVrRGF5ICA9ICBtc1RvV2Vla0RheShtcyk7
Ci0gICAgdG0ueWVhckRheSAgPSAgZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKLSAgICB0bS5tb250aERh
eSA9ICBkYXlJbk1vbnRoRnJvbURheUluWWVhcih0bS55ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIp
KTsKLSAgICB0bS5tb250aCAgICA9ICBtb250aEZyb21EYXlJblllYXIodG0ueWVhckRheSwgaXNM
ZWFwWWVhcih5ZWFyKSk7Ci0gICAgdG0ueWVhciAgICAgPSAgeWVhciAtIDE5MDA7Ci0gICAgdG0u
aXNEU1QgICAgPSAgZHN0T2ZmICE9IDAuMDsKLSAgICB0bS51dGNPZmZzZXQgPSBzdGF0aWNfY2Fz
dDxsb25nPigoZHN0T2ZmICsgdXRjT2ZmKSAvIFdURjo6bXNQZXJTZWNvbmQpOwotICAgIHRtLnRp
bWVab25lID0gbnVsbHB0cjsKLX0KLQotZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRl
ZENoYXJhY3RlcnMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBkYXRlU3RyaW5nKQotewot
ICAgIEFTU0VSVChleGVjKTsKLSAgICBib29sIGhhdmVUWjsKLSAgICBpbnQgb2Zmc2V0OwotICAg
IGRvdWJsZSBtcyA9IFdURjo6cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhk
YXRlU3RyaW5nLCBoYXZlVFosIG9mZnNldCk7Ci0gICAgaWYgKGlzbmFuKG1zKSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0KLSAgICAv
LyBmYWxsIGJhY2sgdG8gbG9jYWwgdGltZXpvbmUKLSAgICBpZiAoIWhhdmVUWikgewotICAgICAg
ICBkb3VibGUgdXRjT2Zmc2V0ID0gZ2V0VVRDT2Zmc2V0KGV4ZWMpOwotICAgICAgICBkb3VibGUg
ZHN0T2Zmc2V0ID0gZ2V0RFNUT2Zmc2V0KGV4ZWMsIG1zLCB1dGNPZmZzZXQpOwotICAgICAgICBv
ZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KCh1dGNPZmZzZXQgKyBkc3RPZmZzZXQpIC8gV1RGOjpt
c1Blck1pbnV0ZSk7Ci0gICAgfQotICAgIHJldHVybiBtcyAtIChvZmZzZXQgKiBXVEY6Om1zUGVy
TWludXRlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0jZW5kaWYgLy8gVVNFKEpTQykKK30g
Ly8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaAko
cmV2aXNpb24gMTAwMTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMiArNTUsMTQgQEAKICNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KIAogbmFtZXNwYWNlIFdURiB7CisKIHZvaWQgaW5pdGlhbGl6ZURhdGVzKCk7CiBp
bnQgZXF1aXZhbGVudFllYXJGb3JEU1QoaW50IHllYXIpOwogCiAvLyBOb3QgcmVhbGx5IG1hdGgg
cmVsYXRlZCwgYnV0IHRoaXMgaXMgY3VycmVudGx5IHRoZSBvbmx5IHNoYXJlZCBwbGFjZSB0byBw
dXQgdGhlc2UuCiBkb3VibGUgcGFyc2VFUzVEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVy
cyhjb25zdCBjaGFyKiBkYXRlU3RyaW5nKTsKIGRvdWJsZSBwYXJzZURhdGVGcm9tTnVsbFRlcm1p
bmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpOworZG91YmxlIHBhcnNlRGF0
ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoY29uc3QgY2hhciogZGF0ZVN0cmluZywgYm9v
bCYgaGF2ZVRaLCBpbnQmIG9mZnNldCk7CiBkb3VibGUgdGltZUNsaXAoZG91YmxlKTsKIC8vIGRh
eU9mV2VlazogWzAsIDZdIDAgYmVpbmcgTW9uZGF5LCBkYXk6IFsxLCAzMV0sIG1vbnRoOiBbMCwg
MTFdLCB5ZWFyOiBleDogMjAxMSwgaG91cnM6IFswLCAyM10sIG1pbnV0ZXM6IFswLCA1OV0sIHNl
Y29uZHM6IFswLCA1OV0sIHV0Y09mZnNldDogWy03MjAsNzIwXS4gCiBTdHJpbmcgbWFrZVJGQzI4
MjJEYXRlU3RyaW5nKHVuc2lnbmVkIGRheU9mV2VlaywgdW5zaWduZWQgZGF5LCB1bnNpZ25lZCBt
b250aCwgdW5zaWduZWQgeWVhciwgdW5zaWduZWQgaG91cnMsIHVuc2lnbmVkIG1pbnV0ZXMsIHVu
c2lnbmVkIHNlY29uZHMsIGludCB1dGNPZmZzZXQpOwpAQCAtNzEsOCArNzMsOCBAQCBpbmxpbmUg
ZG91YmxlIGpzQ3VycmVudFRpbWUoKQogICAgIHJldHVybiBmbG9vcihXVEY6OmN1cnJlbnRUaW1l
TVMoKSk7CiB9CiAKLWNvbnN0IGNoYXIgKiBjb25zdCB3ZWVrZGF5TmFtZVs3XSA9IHsgIk1vbiIs
ICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biIgfTsKLWNvbnN0IGNoYXIg
KiBjb25zdCBtb250aE5hbWVbMTJdID0geyAiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1h
eSIsICJKdW4iLCAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiIH07Citj
b25zdCBjaGFyKiBjb25zdCB3ZWVrZGF5TmFtZVs3XSA9IHsgIk1vbiIsICJUdWUiLCAiV2VkIiwg
IlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biIgfTsKK2NvbnN0IGNoYXIqIGNvbnN0IG1vbnRoTmFt
ZVsxMl0gPSB7ICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwi
LCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIgfTsKIAogY29uc3QgZG91YmxlIGhv
dXJzUGVyRGF5ID0gMjQuMDsKIGNvbnN0IGRvdWJsZSBtaW51dGVzUGVySG91ciA9IDYwLjA7CkBA
IC04NCw5ICs4NiwxNCBAQCBjb25zdCBkb3VibGUgbXNQZXJIb3VyID0gNjAuMCAqIDYwLjAgKiAx
CiBjb25zdCBkb3VibGUgbXNQZXJEYXkgPSAyNC4wICogNjAuMCAqIDYwLjAgKiAxMDAwLjA7CiBj
b25zdCBkb3VibGUgbXNQZXJNb250aCA9IDI1OTIwMDAwMDAuMDsKIAorYm9vbCBpc0xlYXBZZWFy
KGludCB5ZWFyKTsKKwogLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgZnJvbSAxOTcwLTAx
LTAxIHRvIHRoZSBzcGVjaWZpZWQgZGF0ZS4KIGRvdWJsZSBkYXRlVG9EYXlzRnJvbTE5NzAoaW50
IHllYXIsIGludCBtb250aCwgaW50IGRheSk7CiBpbnQgbXNUb1llYXIoZG91YmxlIG1zKTsKK2Rv
dWJsZSBtc1RvRGF5cyhkb3VibGUgbXMpOworaW50IG1zVG9NaW51dGVzKGRvdWJsZSBtcyk7Citp
bnQgbXNUb0hvdXJzKGRvdWJsZSBtcyk7CiBpbnQgZGF5SW5ZZWFyKGRvdWJsZSBtcywgaW50IHll
YXIpOwogaW50IG1vbnRoRnJvbURheUluWWVhcihpbnQgZGF5SW5ZZWFyLCBib29sIGxlYXBZZWFy
KTsKIGludCBkYXlJbk1vbnRoRnJvbURheUluWWVhcihpbnQgZGF5SW5ZZWFyLCBib29sIGxlYXBZ
ZWFyKTsKQEAgLTk3LDcgKzEwNCw3IEBAIGRvdWJsZSBjYWxjdWxhdGVEU1RPZmZzZXQoZG91Ymxl
IG1zLCBkb3UKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLXVzaW5nIFdURjo6YWRvcHRBcnJheVB0
cjsKK3VzaW5nIFdURjo6aXNMZWFwWWVhcjsKIHVzaW5nIFdURjo6ZGF0ZVRvRGF5c0Zyb20xOTcw
OwogdXNpbmcgV1RGOjpkYXlJbk1vbnRoRnJvbURheUluWWVhcjsKIHVzaW5nIFdURjo6ZGF5SW5Z
ZWFyOwpAQCAtMTA3LDEzMSArMTE0LDEzIEBAIHVzaW5nIFdURjo6bXNQZXJEYXk7CiB1c2luZyBX
VEY6Om1zUGVyTWludXRlOwogdXNpbmcgV1RGOjptc1BlclNlY29uZDsKIHVzaW5nIFdURjo6bXNU
b1llYXI7Cit1c2luZyBXVEY6Om1zVG9EYXlzOwordXNpbmcgV1RGOjptc1RvTWludXRlczsKK3Vz
aW5nIFdURjo6bXNUb0hvdXJzOwogdXNpbmcgV1RGOjpzZWNvbmRzUGVyTWludXRlOwogdXNpbmcg
V1RGOjpwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzOwogdXNpbmcgV1RGOjpt
YWtlUkZDMjgyMkRhdGVTdHJpbmc7CiB1c2luZyBXVEY6OmNhbGN1bGF0ZVVUQ09mZnNldDsKIHVz
aW5nIFdURjo6Y2FsY3VsYXRlRFNUT2Zmc2V0OwogCi0jaWYgVVNFKEpTQykKLW5hbWVzcGFjZSBK
U0MgewotY2xhc3MgRXhlY1N0YXRlOwotc3RydWN0IEdyZWdvcmlhbkRhdGVUaW1lOwotCi12b2lk
IG1zVG9HcmVnb3JpYW5EYXRlVGltZShFeGVjU3RhdGUqLCBkb3VibGUsIGJvb2wgb3V0cHV0SXNV
VEMsIEdyZWdvcmlhbkRhdGVUaW1lJik7Ci1kb3VibGUgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKEV4
ZWNTdGF0ZSosIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJiwgZG91YmxlLCBib29sIGlucHV0SXNV
VEMpOwotZG91YmxlIGdldFVUQ09mZnNldChFeGVjU3RhdGUqKTsKLWRvdWJsZSBwYXJzZURhdGVG
cm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKEV4ZWNTdGF0ZSosIGNvbnN0IGNoYXIqIGRhdGVT
dHJpbmcpOwotCi0vLyBJbnRlbnRpb25hbGx5IG92ZXJyaWRkaW5nIHRoZSBkZWZhdWx0IHRtIG9m
IHRoZSBzeXN0ZW0uCi0vLyBUaGUgbWVtYmVycyBvZiB0bSBkaWZmZXIgb24gdmFyaW91cyBvcGVy
YXRpbmcgc3lzdGVtcy4KLXN0cnVjdCBHcmVnb3JpYW5EYXRlVGltZSB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoR3JlZ29yaWFuRGF0ZVRpbWUpOwotcHVibGljOgotICAgIEdyZWdvcmlhbkRh
dGVUaW1lKCkKLSAgICAgICAgOiBzZWNvbmQoMCkKLSAgICAgICAgLCBtaW51dGUoMCkKLSAgICAg
ICAgLCBob3VyKDApCi0gICAgICAgICwgd2Vla0RheSgwKQotICAgICAgICAsIG1vbnRoRGF5KDAp
Ci0gICAgICAgICwgeWVhckRheSgwKQotICAgICAgICAsIG1vbnRoKDApCi0gICAgICAgICwgeWVh
cigwKQotICAgICAgICAsIGlzRFNUKDApCi0gICAgICAgICwgdXRjT2Zmc2V0KDApCi0gICAgewot
ICAgIH0KLQotICAgIEdyZWdvcmlhbkRhdGVUaW1lKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgdG0m
IGluVG0pCi0gICAgICAgIDogc2Vjb25kKGluVG0udG1fc2VjKQotICAgICAgICAsIG1pbnV0ZShp
blRtLnRtX21pbikKLSAgICAgICAgLCBob3VyKGluVG0udG1faG91cikKLSAgICAgICAgLCB3ZWVr
RGF5KGluVG0udG1fd2RheSkKLSAgICAgICAgLCBtb250aERheShpblRtLnRtX21kYXkpCi0gICAg
ICAgICwgeWVhckRheShpblRtLnRtX3lkYXkpCi0gICAgICAgICwgbW9udGgoaW5UbS50bV9tb24p
Ci0gICAgICAgICwgeWVhcihpblRtLnRtX3llYXIpCi0gICAgICAgICwgaXNEU1QoaW5UbS50bV9p
c2RzdCkKLSAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSNpZiBIQVZFKFRNX0dN
VE9GRikKLSAgICAgICAgdXRjT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8aW50PihpblRtLnRtX2dtdG9m
Zik7Ci0jZWxzZQotICAgICAgICB1dGNPZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGdldFVUQ09m
ZnNldChleGVjKSAvIFdURjo6bXNQZXJTZWNvbmQgKyAoaXNEU1QgPyBXVEY6OnNlY29uZHNQZXJI
b3VyIDogMCkpOwotI2VuZGlmCi0KLSNpZiBIQVZFKFRNX1pPTkUpCi0gICAgICAgIGludCBpblpv
bmVTaXplID0gc3RybGVuKGluVG0udG1fem9uZSkgKyAxOwotICAgICAgICB0aW1lWm9uZSA9IGFk
b3B0QXJyYXlQdHIobmV3IGNoYXJbaW5ab25lU2l6ZV0pOwotICAgICAgICBzdHJuY3B5KHRpbWVa
b25lLmdldCgpLCBpblRtLnRtX3pvbmUsIGluWm9uZVNpemUpOwotI2Vsc2UKLSAgICAgICAgdGlt
ZVpvbmUgPSBudWxscHRyOwotI2VuZGlmCi0gICAgfQotCi0gICAgb3BlcmF0b3IgdG0oKSBjb25z
dAotICAgIHsKLSAgICAgICAgdG0gcmV0OwotICAgICAgICBtZW1zZXQoJnJldCwgMCwgc2l6ZW9m
KHJldCkpOwotCi0gICAgICAgIHJldC50bV9zZWMgICA9ICBzZWNvbmQ7Ci0gICAgICAgIHJldC50
bV9taW4gICA9ICBtaW51dGU7Ci0gICAgICAgIHJldC50bV9ob3VyICA9ICBob3VyOwotICAgICAg
ICByZXQudG1fd2RheSAgPSAgd2Vla0RheTsKLSAgICAgICAgcmV0LnRtX21kYXkgID0gIG1vbnRo
RGF5OwotICAgICAgICByZXQudG1feWRheSAgPSAgeWVhckRheTsKLSAgICAgICAgcmV0LnRtX21v
biAgID0gIG1vbnRoOwotICAgICAgICByZXQudG1feWVhciAgPSAgeWVhcjsKLSAgICAgICAgcmV0
LnRtX2lzZHN0ID0gIGlzRFNUOwotCi0jaWYgSEFWRShUTV9HTVRPRkYpCi0gICAgICAgIHJldC50
bV9nbXRvZmYgPSBzdGF0aWNfY2FzdDxsb25nPih1dGNPZmZzZXQpOwotI2VuZGlmCi0jaWYgSEFW
RShUTV9aT05FKQotICAgICAgICByZXQudG1fem9uZSA9IHRpbWVab25lLmdldCgpOwotI2VuZGlm
Ci0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvcHlGcm9tKGNvbnN0
IEdyZWdvcmlhbkRhdGVUaW1lJiByaHMpCi0gICAgewotICAgICAgICBzZWNvbmQgPSByaHMuc2Vj
b25kOwotICAgICAgICBtaW51dGUgPSByaHMubWludXRlOwotICAgICAgICBob3VyID0gcmhzLmhv
dXI7Ci0gICAgICAgIHdlZWtEYXkgPSByaHMud2Vla0RheTsKLSAgICAgICAgbW9udGhEYXkgPSBy
aHMubW9udGhEYXk7Ci0gICAgICAgIHllYXJEYXkgPSByaHMueWVhckRheTsKLSAgICAgICAgbW9u
dGggPSByaHMubW9udGg7Ci0gICAgICAgIHllYXIgPSByaHMueWVhcjsKLSAgICAgICAgaXNEU1Qg
PSByaHMuaXNEU1Q7Ci0gICAgICAgIHV0Y09mZnNldCA9IHJocy51dGNPZmZzZXQ7Ci0gICAgICAg
IGlmIChyaHMudGltZVpvbmUpIHsKLSAgICAgICAgICAgIGludCBpblpvbmVTaXplID0gc3RybGVu
KHJocy50aW1lWm9uZS5nZXQoKSkgKyAxOwotICAgICAgICAgICAgdGltZVpvbmUgPSBhZG9wdEFy
cmF5UHRyKG5ldyBjaGFyW2luWm9uZVNpemVdKTsKLSAgICAgICAgICAgIHN0cm5jcHkodGltZVpv
bmUuZ2V0KCksIHJocy50aW1lWm9uZS5nZXQoKSwgaW5ab25lU2l6ZSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgdGltZVpvbmUgPSBudWxscHRyOwotICAgIH0KLQotICAgIGludCBzZWNv
bmQ7Ci0gICAgaW50IG1pbnV0ZTsKLSAgICBpbnQgaG91cjsKLSAgICBpbnQgd2Vla0RheTsKLSAg
ICBpbnQgbW9udGhEYXk7Ci0gICAgaW50IHllYXJEYXk7Ci0gICAgaW50IG1vbnRoOwotICAgIGlu
dCB5ZWFyOwotICAgIGludCBpc0RTVDsKLSAgICBpbnQgdXRjT2Zmc2V0OwotICAgIE93bkFycmF5
UHRyPGNoYXI+IHRpbWVab25lOwotfTsKLQotc3RhdGljIGlubGluZSBpbnQgZ210b2Zmc2V0KGNv
bnN0IEdyZWdvcmlhbkRhdGVUaW1lJiB0KQotewotICAgIHJldHVybiB0LnV0Y09mZnNldDsKLX0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotI2VuZGlmIC8vIFVTRShKU0MpCi0KICNlbmRpZiAvLyBEYXRl
TWF0aF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>