<?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>16077</bug_id>
          
          <creation_ts>2007-11-20 18:03:08 -0800</creation_ts>
          <short_desc>XSLT processor &lt;xsl:sort&gt; algorithm is incompatible with other browser implementations</short_desc>
          <delta_ts>2007-11-23 00:30:36 -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>XML</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction, InRadar, YahooBug</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="darren">jdarren</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>61870</commentid>
    <comment_count>0</comment_count>
    <who name="darren">jdarren</who>
    <bug_when>2007-11-20 18:03:08 -0800</bug_when>
    <thetext>When sorting an XML dom using an XSL transformation  (via the &lt;xsl:sort&gt;)  the algorithm doesn&apos;t appear to be to spec:

http://www.w3.org/TR/xslt#sorting

from the spec:
case-order has the value upper-first or lower-first; this applies when data-type=&quot;text&quot;, and specifies that upper-case letters should sort before lower-case letters or vice-versa respectively. For example, if lang=&quot;en&quot;, then A a B b are sorted with case-order=&quot;upper-first&quot; and a A b B are sorted with case-order=&quot;lower-first&quot;. The default value is language dependent.
....

Safari appears to be sorting a list with upper and lower case entries in it like this

  A B a b

rather than like this

 A a B b  *or* a A b B (depending on the value of the case-order attribute).

For a test case, download the XML and XSL files on this page:
   http://www.w3schools.com/xsl/xsl_sort.asp

... then edit the entries to include an artist with all lower-case chars.  Display this in Safari,
FF, and IE to see the difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61871</commentid>
    <comment_count>1</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-20 18:42:54 -0800</bug_when>
    <thetext>A simple standalone reduction based on that example would be helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61873</commentid>
    <comment_count>2</comment_count>
      <attachid>17423</attachid>
    <who name="darren">jdarren</who>
    <bug_when>2007-11-20 18:59:00 -0800</bug_when>
    <thetext>Created attachment 17423
XML file to Sort

XML file to sort</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61874</commentid>
    <comment_count>3</comment_count>
      <attachid>17424</attachid>
    <who name="darren">jdarren</who>
    <bug_when>2007-11-20 18:59:46 -0800</bug_when>
    <thetext>Created attachment 17424
XSL file to do sorting transformation

XSL file to do sorting transformation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61875</commentid>
    <comment_count>4</comment_count>
    <who name="darren">jdarren</who>
    <bug_when>2007-11-20 19:03:23 -0800</bug_when>
    <thetext>To Repro:

1. Download the XML and XSL files attached.
2. Load them In the browser:

Result:
sorted as:
  Angie
  Brad
  abby
  brent

Expected:
sorted as:
  abby
  Angie
  Brad
  brent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61885</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-20 23:35:08 -0800</bug_when>
    <thetext>I have searched libxslt bugs, and it appears to be a well known issue that they refuse to fix: &lt;http://bugzilla.gnome.org/show_bug.cgi?id=143383&gt;.

It&apos;s possible to override the broken default implementation with xsltSetCtxtSortFunc().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61894</commentid>
    <comment_count>6</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-21 01:27:26 -0800</bug_when>
    <thetext>&lt;rdar://problem/5609785&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61932</commentid>
    <comment_count>7</comment_count>
      <attachid>17433</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-21 10:41:34 -0800</bug_when>
    <thetext>Created attachment 17433
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61938</commentid>
    <comment_count>8</comment_count>
      <attachid>17433</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-21 11:34:57 -0800</bug_when>
    <thetext>Comment on attachment 17433
proposed fix

I would think that xml/XSLTUnicodeSort.cpp should be called xml/XSLTUnicodeSortICU.cpp, or at least the ICU parts abstracted out into another file.  Otherwise we&apos;re just going to get lots of #ifdefs when Qt comes and adds their implementation, etc.

Otherwise the change looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61939</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-21 12:00:57 -0800</bug_when>
    <thetext>I agree that we will eventually need to abstract out collation from here - but I feel that it&apos;s something that needs to settle down a bit. Immediately introducing abstractions when adding a new concept sometimes gives poor results due to incomplete understanding of needs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62050</commentid>
    <comment_count>10</comment_count>
      <attachid>17433</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-22 22:48:31 -0800</bug_when>
    <thetext>Comment on attachment 17433
proposed fix

It&apos;s unfortunate that we have to cut &amp; paste so much XSLT code, but I guess there&apos;s no better way. Too bad you can&apos;t just provide a string compare function for it to use.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62058</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-23 00:30:36 -0800</bug_when>
    <thetext>Committed revision 27984.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>17423</attachid>
            <date>2007-11-20 18:59:00 -0800</date>
            <delta_ts>2007-11-20 18:59:00 -0800</delta_ts>
            <desc>XML file to Sort</desc>
            <filename>cdcatalog_sort.xml</filename>
            <type>application/xml</type>
            <size>883</size>
            <attacher name="darren">jdarren</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pg0KPCEtLSBFZGl0ZWQg
d2l0aCBYTUwgU3B5IHYyMDA3IChodHRwOi8vd3d3LmFsdG92YS5jb20pIC0tPg0KPD94bWwtc3R5
bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iY2RjYXRhbG9nX3NvcnQueHNsIj8+DQo8Y2F0
YWxvZz4NCgk8Y2Q+DQoJCTx0aXRsZT5CcmFkcyBUaXRsZTwvdGl0bGU+DQoJCTxhcnRpc3Q+QnJh
ZDwvYXJ0aXN0Pg0KCQk8Y291bnRyeT5VU0E8L2NvdW50cnk+DQoJCTxjb21wYW55PkNvbHVtYmlh
PC9jb21wYW55Pg0KCQk8cHJpY2U+MTAuOTA8L3ByaWNlPg0KCQk8eWVhcj4xOTg1PC95ZWFyPg0K
CTwvY2Q+DQoJPGNkPg0KCQk8dGl0bGU+YnJlbnRzIFRpdGxlPC90aXRsZT4NCgkJPGFydGlzdD5i
cmVudDwvYXJ0aXN0Pg0KCQk8Y291bnRyeT5VSzwvY291bnRyeT4NCgkJPGNvbXBhbnk+Q0JTIFJl
Y29yZHM8L2NvbXBhbnk+DQoJCTxwcmljZT45LjkwPC9wcmljZT4NCgkJPHllYXI+MTk4ODwveWVh
cj4NCgk8L2NkPg0KCTxjZD4NCgkJPHRpdGxlPkFuZ2llcyBUaXRsZTwvdGl0bGU+DQoJCTxhcnRp
c3Q+QW5naWU8L2FydGlzdD4NCgkJPGNvdW50cnk+VVNBPC9jb3VudHJ5Pg0KCQk8Y29tcGFueT5S
Q0E8L2NvbXBhbnk+DQoJCTxwcmljZT45LjkwPC9wcmljZT4NCgkJPHllYXI+MTk4MjwveWVhcj4N
Cgk8L2NkPg0KCTxjZD4NCgkJPHRpdGxlPmFiYmllcyB0aXRsZTwvdGl0bGU+DQoJCTxhcnRpc3Q+
YWJieTwvYXJ0aXN0Pg0KCQk8Y291bnRyeT5VSzwvY291bnRyeT4NCgkJPGNvbXBhbnk+VmlyZ2lu
IHJlY29yZHM8L2NvbXBhbnk+DQoJCTxwcmljZT4xMC4yMDwvcHJpY2U+DQoJCTx5ZWFyPjE5OTA8
L3llYXI+DQoJPC9jZD4NCjwvY2F0YWxvZz4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>17424</attachid>
            <date>2007-11-20 18:59:46 -0800</date>
            <delta_ts>2007-11-20 18:59:46 -0800</delta_ts>
            <desc>XSL file to do sorting transformation</desc>
            <filename>cdcatalog_sort.xsl</filename>
            <type>text/xml</type>
            <size>736</size>
            <attacher name="darren">jdarren</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pg0KPCEtLSBFZGl0ZWQg
d2l0aCBYTUwgU3B5IHYyMDA3IChodHRwOi8vd3d3LmFsdG92YS5jb20pIC0tPg0KPHhzbDpzdHls
ZXNoZWV0IHZlcnNpb249IjEuMCIgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hT
TC9UcmFuc2Zvcm0iPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+DQogIDxodG1sPg0KICA8Ym9k
eT4NCiAgICA8aDI+TXkgQ0QgQ29sbGVjdGlvbjwvaDI+DQogICAgPHRhYmxlIGJvcmRlcj0iMSI+
DQogICAgICA8dHIgYmdjb2xvcj0iIzlhY2QzMiI+DQogICAgICAgIDx0aD5UaXRsZTwvdGg+DQog
ICAgICAgIDx0aD5BcnRpc3Q8L3RoPg0KICAgICAgPC90cj4NCiAgICAgIDx4c2w6Zm9yLWVhY2gg
c2VsZWN0PSJjYXRhbG9nL2NkIj4NCiAgICAgIDx4c2w6c29ydCBzZWxlY3Q9ImFydGlzdCIgY2Fz
ZS1vcmRlcj0ibG93ZXItZmlyc3QiIGRhdGEtdHlwZT0idGV4dCIgb3JkZXI9ImFzY2VuZGluZyIg
Lz4NCiAgICAgIDx0cj4NCiAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJ0aXRsZSIv
PjwvdGQ+DQogICAgICAgIDx0ZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iYXJ0aXN0Ii8+PC90ZD4N
CiAgICAgIDwvdHI+DQogICAgICA8L3hzbDpmb3ItZWFjaD4NCiAgICA8L3RhYmxlPg0KICA8L2Jv
ZHk+DQogIDwvaHRtbD4NCjwveHNsOnRlbXBsYXRlPg0KPC94c2w6c3R5bGVzaGVldD4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17433</attachid>
            <date>2007-11-21 10:41:34 -0800</date>
            <delta_ts>2007-11-22 22:48:31 -0800</delta_ts>
            <desc>proposed fix</desc>
            <filename>16077r1_patch.txt</filename>
            <type>text/plain</type>
            <size>111851</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzk0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDctMTEtMjEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDc3CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS81NjA5Nzg1PiBYU0xUIHByb2Nlc3NvciA8eHNsOnNvcnQ+IGFsZ29yaXRo
bSBpcyBpbmNvbXBhdGlibGUgd2l0aCBvdGhlcgorICAgICAgICBicm93c2VyIGltcGxlbWVudGF0
aW9ucworCisgICAgICAgIFRlc3Q6IGZhc3QveHNsL3NvcnQtdW5pY29kZS54bWwKKworICAgICAg
ICAqIHhtbC9YU0xUUHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNz
b3I6OnRyYW5zZm9ybVRvU3RyaW5nKTogU2V0IGEgY3VzdG9tIHNvcnQgZnVuY3Rpb24uCisKKyAg
ICAgICAgKiB4bWwvWFNMVFVuaWNvZGVTb3J0LmNwcDogQWRkZWQuCisgICAgICAgIChpbml0X3hz
bHRUcmFuc2Zvcm1FcnJvcik6CisgICAgICAgICh4c2x0VHJhbnNmb3JtRXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6eHNsdFVuaWNvZGVTb3J0RnVuY3Rpb24pOgorICAgICAgICAqIHhtbC9YU0xU
VW5pY29kZVNvcnQuaDogQWRkZWQuCisgICAgICAgIElDVS1iYXNlZCBpbXBsZW1lbnRhdGlvbiBv
ZiB4c2w6c29ydCwgdXNpbmcgYW4gZXhhbXBsZSBmcm9tIGxpYnhzbHQgZGlzdHJpYnV0aW9uLgor
ICAgICAgICBPbmx5IG1pbmltYWwgY29kaW5nIHN0eWxlIGZpeGVzIHRvIGVhc2Ugc3luY2hyb25p
emF0aW9uIHdpdGggdXBzdHJlYW0gaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIGljdS91bmlj
b2RlL3Vjb2wuaDogQWRkZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvdXNldC5oOiBBZGRlZC4K
KyAgICAgICAgVGFrZW4gZnJvbSBJQ1UgMy4yCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmts
OgorICAgICAgICBBZGRlZCBYU0xUVW5pY29kZVNvcnQuY3BwLgorCiAyMDA3LTExLTIxICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
ZGFtIFJvYmVuLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyNzkzNikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTc3Nyw2ICs3NzcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICB4bWwv
WFNMSW1wb3J0UnVsZS5jcHAgXAogICAgIHhtbC9YU0xTdHlsZVNoZWV0LmNwcCBcCiAgICAgeG1s
L1hTTFRFeHRlbnNpb25zLmNwcCBcCisgICAgeG1sL1hTTFRVbmljb2RlU29ydC5jcHAgXAogICAg
IHhtbC9YU0xUUHJvY2Vzc29yLmNwcAogCiBndGstcG9ydCB7CkluZGV4OiBXZWJDb3JlL1dlYkNv
cmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAko
cmV2aXNpb24gMjc5MzYpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2luZyBj
b3B5KQpAQCAtNzQwLDYgKzc0MCw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBm
aWxlcyBuZWUKICAgICAgICAgeG1sL1hTTEltcG9ydFJ1bGUuY3BwCiAgICAgICAgIHhtbC9YU0xT
dHlsZVNoZWV0LmNwcAogICAgICAgICB4bWwvWFNMVEV4dGVuc2lvbnMuY3BwCisgICAgICAgIHht
bC9YU0xUVW5pY29kZVNvcnQuY3BwCiAgICAgICAgIHhtbC9YU0xUUHJvY2Vzc29yLmNwcAogICAg
ICAgICB4bWwveG1saHR0cHJlcXVlc3QuY3BwCiAgICAgPC9zZXQ+CkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDI3OTM2KQorKysgV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNTkxNiw2ICs1OTE2
LDE0IEBACiAJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWFNMVFByb2Nlc3Nvci5oIg0KIAkJCQk+
DQogCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXFhTTFRV
bmljb2RlU29ydC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlx4bWxcWFNMVFVuaWNvZGVTb3J0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQogCQk8L0ZpbHRlcj4NCiAJCTxGaWx0ZXINCiAJCQlOYW1lPSJkb20iDQpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI3OTM2KQorKysg
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTM2MjUsNiArMzYyNSw4IEBACiAJCUUxNDg0M0Q2MEE2NzU0QTYwMDdFNEQzOSAvKiBUZXh0
Q29kZWNNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTE0ODQzOTEwQTY3NTJCRjAwN0U0RDM5IC8qIFRleHRDb2RlY01hYy5jcHAgKi87IH07CiAJ
CUUxNTg2Mzk5MENEMTBCNzMwMDY2RTJDOSAvKiBUZXh0Q29kZWNVc2VyRGVmaW5lZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1ODYzOTcwQ0QxMEI3
MzAwNjZFMkM5IC8qIFRleHRDb2RlY1VzZXJEZWZpbmVkLmggKi87IH07CiAJCUUxNTg2MzlBMENE
MTBCNzMwMDY2RTJDOSAvKiBUZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU4NjM5ODBDRDEwQjczMDA2NkUyQzkg
LyogVGV4dENvZGVjVXNlckRlZmluZWQuY3BwICovOyB9OworCQlFMTlGRTk3NTBDRjQ2QUExMDA5
RUJCRUUgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTlGRTk3MzBDRjQ2QUExMDA5RUJCRUUgLyogWFNMVFVuaWNvZGVT
b3J0LmggKi87IH07CisJCUUxOUZFOTc2MENGNDZBQTEwMDlFQkJFRSAvKiBYU0xUVW5pY29kZVNv
cnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5
RkU5NzQwQ0Y0NkFBMTAwOUVCQkVFIC8qIFhTTFRVbmljb2RlU29ydC5jcHAgKi87IH07CiAJCUUx
RTZFRUE0MEI2MjhEQTgwMDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTZFRUEzMEI2MjhEQTgw
MDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcCAqLzsgfTsKIAkJRTFFNkVFQTgwQjYy
OERCMzAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTZFRUE3MEI2MjhEQjMwMDVGMkY3MCAvKiBK
U0hUTUxTZWxlY3RFbGVtZW50LmggKi87IH07CiAJCUUxRUJCQkQ0MEFBQzlCODcwMDFGRThFMiAv
KiBDU1NDaGFyc2V0UnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMUVCQkJEMzBBQUM5Qjg3MDAxRkU4RTIgLyogQ1NTQ2hhcnNldFJ1bGUuY3Bw
ICovOyB9OwpAQCAtNzYyMCw2ICs3NjIyLDggQEAKIAkJRTE0ODQzOTEwQTY3NTJCRjAwN0U0RDM5
IC8qIFRleHRDb2RlY01hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGxpbmVF
bmRpbmcgPSAwOyBuYW1lID0gVGV4dENvZGVjTWFjLmNwcDsgcGF0aCA9IG1hYy9UZXh0Q29kZWNN
YWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU4NjM5NzBDRDEwQjczMDA2
NkUyQzkgLyogVGV4dENvZGVjVXNlckRlZmluZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVGV4dENvZGVjVXNlckRlZmluZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTE1ODYzOTgwQ0QxMEI3MzAwNjZFMkM5IC8qIFRleHRDb2RlY1VzZXJEZWZpbmVkLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb2RlY1VzZXJEZWZp
bmVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE5RkU5NzMwQ0Y0NkFBMTAw
OUVCQkVFIC8qIFhTTFRVbmljb2RlU29ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBYU0xUVW5pY29kZVNvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE5
RkU5NzQwQ0Y0NkFBMTAwOUVCQkVFIC8qIFhTTFRVbmljb2RlU29ydC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYU0xUVW5pY29kZVNvcnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMUU2RUVBMzBCNjI4REE4MDA1RjJGNzAgLyogSlNIVE1MU2Vs
ZWN0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hU
TUxTZWxlY3RFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFFNkVF
QTcwQjYyOERCMzAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IHBhdGggPSBKU0hUTUxTZWxlY3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxRUJCQkQzMEFBQzlCODcwMDFGRThFMiAvKiBDU1NDaGFyc2V0
UnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDaGFyc2V0
UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTU5Myw2ICsxMTU5Nyw4
IEBACiAJCQkJRTFGMUU4MkUwQzNDMkJCOTAwNkRCMzkxIC8qIFhTTFRFeHRlbnNpb25zLmggKi8s
CiAJCQkJQkMwNkYyNEIwNkQxOEE3RTAwNEE2RkEzIC8qIFhTTFRQcm9jZXNzb3IuY3BwICovLAog
CQkJCUJDMDZGMjRDMDZEMThBN0UwMDRBNkZBMyAvKiBYU0xUUHJvY2Vzc29yLmggKi8sCisJCQkJ
RTE5RkU5NzMwQ0Y0NkFBMTAwOUVCQkVFIC8qIFhTTFRVbmljb2RlU29ydC5oICovLAorCQkJCUUx
OUZFOTc0MENGNDZBQTEwMDlFQkJFRSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwICovLAogCQkJKTsK
IAkJCXBhdGggPSB4bWw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTM4OTksNiAr
MTM5MDUsNyBAQAogCQkJCUJDQjE2QzJEMDk3OUMzQkQwMDQ2Nzc0MSAvKiBsb2FkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzMzA5REY4MDk5RTY0OTIwMDU2RTU4MSAvKiBtYXJrdXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2RTU4MSAvKiB2aXNpYmxlX3VuaXRz
LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTlGRTk3NTBDRjQ2QUExMDA5RUJCRUUgLyogWFNMVFVu
aWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTEzOTM3LDcgKzEzOTQ0LDYgQEAKIAkJMDg2
N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0g
UEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjEx
MDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJD
b3JlIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CiAJCQloYXNT
Y2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNo
LApAQCAtMTU0NTQsNiArMTU0NjAsNyBAQAogCQkJCUJDQjE2QzJDMDk3OUMzQkQwMDQ2Nzc0MSAv
KiBsb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlERjcwOTlFNjQ5MjAwNTZFNTgx
IC8qIG1hcmt1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1
ODEgLyogdmlzaWJsZV91bml0cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMTlGRTk3NjBDRjQ2
QUExMDA5RUJCRUUgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
V2ViQ29yZS9pY3UvdW5pY29kZS91Y29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pY3UvdW5p
Y29kZS91Y29sLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2ljdS91bmljb2RlL3Vjb2wuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjE5IEBACisvKgorKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgorKiBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNo
aW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBVQ09MX0gKKyNkZWZpbmUgVUNPTF9I
CisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisjaWYgIVVDT05GSUdfTk9fQ09MTEFU
SU9OCisKKyNpbmNsdWRlICJ1bmljb2RlL3Vub3JtLmgiCisjaW5jbHVkZSAidW5pY29kZS9wYXJz
ZWVyci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWxvYy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXNl
dC5oIgorCisvKioKKyAqIFxmaWxlCisgKiBcYnJpZWYgQyBBUEk6IENvbGxhdG9yIAorICoKKyAq
IDxoMj4gQ29sbGF0b3IgQyBBUEkgPC9oMj4KKyAqCisgKiBUaGUgQyBBUEkgZm9yIENvbGxhdG9y
IHBlcmZvcm1zIGxvY2FsZS1zZW5zaXRpdmUKKyAqIHN0cmluZyBjb21wYXJpc29uLiBZb3UgdXNl
IHRoaXMgc2VydmljZSB0byBidWlsZAorICogc2VhcmNoaW5nIGFuZCBzb3J0aW5nIHJvdXRpbmVz
IGZvciBuYXR1cmFsIGxhbmd1YWdlIHRleHQuCisgKiA8ZW0+SW1wb3J0YW50OiA8L2VtPlRoZSBJ
Q1UgY29sbGF0aW9uIHNlcnZpY2UgaGFzIGJlZW4gcmVpbXBsZW1lbnRlZCAKKyAqIGluIG9yZGVy
IHRvIGFjaGlldmUgYmV0dGVyIHBlcmZvcm1hbmNlIGFuZCBVQ0EgY29tcGxpYW5jZS4gCisgKiBG
b3IgZGV0YWlscywgc2VlIHRoZSAKKyAqIDxhIGhyZWY9Imh0dHA6Ly9pY3Uuc291cmNlZm9yZ2Uu
bmV0L2N2cy9pY3UvfmNoZWNrb3V0fi9pY3VodG1sL2Rlc2lnbi9jb2xsYXRpb24vSUNVX2NvbGxh
dGlvbl9kZXNpZ24uaHRtIj4KKyAqIGNvbGxhdGlvbiBkZXNpZ24gZG9jdW1lbnQ8L2E+LgorICog
PHA+CisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29sbGF0aW9uIHNlcnZpY2Ug
c2VlIAorICogPGEgaHJlZj0iaHR0cDovL2ljdS5zb3VyY2Vmb3JnZS5uZXQvaWN1L3VzZXJndWlk
ZS9Db2xsYXRlX0ludHJvLmh0bWwiPnRoZSB1c2VycyBndWlkZTwvYT4uCisgKiA8cD4KKyAqIENv
bGxhdGlvbiBzZXJ2aWNlIHByb3ZpZGVzIGNvcnJlY3Qgc29ydGluZyBvcmRlcnMgZm9yIG1vc3Qg
bG9jYWxlcyBzdXBwb3J0ZWQgaW4gSUNVLiAKKyAqIElmIHNwZWNpZmljIGRhdGEgZm9yIGEgbG9j
YWxlIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBvcmRlcnMgZXZlbnR1YWxseSBmYWxscyBiYWNrCisg
KiB0byB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy51bmljb2RlLm9yZy91bmljb2RlL3JlcG9ydHMv
dHIxMC8iPlVDQSBzb3J0IG9yZGVyPC9hPi4gCisgKiA8cD4KKyAqIFNvcnQgb3JkZXJpbmcgbWF5
IGJlIGN1c3RvbWl6ZWQgYnkgcHJvdmlkaW5nIHlvdXIgb3duIHNldCBvZiBydWxlcy4gRm9yIG1v
cmUgb24KKyAqIHRoaXMgc3ViamVjdCBzZWUgdGhlIAorICogPGEgaHJlZj0iaHR0cDovL2ljdS5z
b3VyY2Vmb3JnZS5uZXQvaWN1L3VzZXJndWlkZS9Db2xsYXRlX0N1c3RvbWl6YXRpb24uaHRtbCI+
CisgKiBDb2xsYXRpb24gY3VzdG9taXphdGlvbjwvYT4gc2VjdGlvbiBvZiB0aGUgdXNlcnMgZ3Vp
ZGUuCisgKiA8cD4KKyAqIEBzZWUgICAgICAgICBVQ29sbGF0aW9uUmVzdWx0CisgKiBAc2VlICAg
ICAgICAgVU5vcm1hbGl6YXRpb25Nb2RlCisgKiBAc2VlICAgICAgICAgVUNvbGxhdGlvblN0cmVu
Z3RoCisgKiBAc2VlICAgICAgICAgVUNvbGxhdGlvbkVsZW1lbnRzCisgKi8KKworLyoqIEEgY29s
bGF0aW9uIGVsZW1lbnQgaXRlcmF0b3IuCisqICBGb3IgdXNhZ2UgaW4gQyBwcm9ncmFtcy4KKyov
CitzdHJ1Y3QgY29sbEl0ZXJhdGU7CisvKiogc3RydWN0dXJlIHJlcHJlc2VudGluZyBjb2xsYXRp
b24gZWxlbWVudCBpdGVyYXRvciBpbnN0YW5jZSAKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0
eXBlZGVmIHN0cnVjdCBjb2xsSXRlcmF0ZSBjb2xsSXRlcmF0ZTsKKworLyoqIEEgY29sbGF0b3Iu
CisqICBGb3IgdXNhZ2UgaW4gQyBwcm9ncmFtcy4KKyovCitzdHJ1Y3QgVUNvbGxhdG9yOworLyoq
IHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBjb2xsYXRvciBvYmplY3QgaW5zdGFuY2UgCisgKiBA
c3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVUNvbGxhdG9yIFVDb2xsYXRvcjsK
KworCisvKioKKyAqIFVDT0xfTEVTUyBpcyByZXR1cm5lZCBpZiBzb3VyY2Ugc3RyaW5nIGlzIGNv
bXBhcmVkIHRvIGJlIGxlc3MgdGhhbiB0YXJnZXQKKyAqIHN0cmluZyBpbiB0aGUgdV9zdHJjb2xs
KCkgbWV0aG9kLgorICogVUNPTF9FUVVBTCBpcyByZXR1cm5lZCBpZiBzb3VyY2Ugc3RyaW5nIGlz
IGNvbXBhcmVkIHRvIGJlIGVxdWFsIHRvIHRhcmdldAorICogc3RyaW5nIGluIHRoZSB1X3N0cmNv
bGwoKSBtZXRob2QuCisgKiBVQ09MX0dSRUFURVIgaXMgcmV0dXJuZWQgaWYgc291cmNlIHN0cmlu
ZyBpcyBjb21wYXJlZCB0byBiZSBncmVhdGVyIHRoYW4KKyAqIHRhcmdldCBzdHJpbmcgaW4gdGhl
IHVfc3RyY29sbCgpIG1ldGhvZC4KKyAqIEBzZWUgdV9zdHJjb2xsKCkKKyAqIDxwPgorICogUG9z
c2libGUgdmFsdWVzIGZvciBhIGNvbXBhcmlzb24gcmVzdWx0IAorICogQHN0YWJsZSBJQ1UgMi4w
CisgKi8KK3R5cGVkZWYgZW51bSB7CisgIC8qKiBzdHJpbmcgYSA9PSBzdHJpbmcgYiAqLworICBV
Q09MX0VRVUFMICAgID0gMCwKKyAgLyoqIHN0cmluZyBhID4gc3RyaW5nIGIgKi8KKyAgVUNPTF9H
UkVBVEVSICAgID0gMSwKKyAgLyoqIHN0cmluZyBhIDwgc3RyaW5nIGIgKi8KKyAgVUNPTF9MRVNT
ICAgID0gLTEKK30gVUNvbGxhdGlvblJlc3VsdCA7CisKKworLyoqIEVudW0gY29udGFpbmluZyBh
dHRyaWJ1dGUgdmFsdWVzIGZvciBjb250cm9saW5nIGNvbGxhdGlvbiBiZWhhdmlvci4KKyAqIEhl
cmUgYXJlIGFsbCB0aGUgYWxsb3dhYmxlIHZhbHVlcy4gTm90IGV2ZXJ5IGF0dHJpYnV0ZSBjYW4g
dGFrZSBldmVyeSB2YWx1ZS4gVGhlIG9ubHkKKyAqIHVuaXZlcnNhbCB2YWx1ZSBpcyBVQ09MX0RF
RkFVTFQsIHdoaWNoIHJlc2V0cyB0aGUgYXR0cmlidXRlIHZhbHVlIHRvIHRoZSBwcmVkZWZpbmVk
ICAKKyAqIHZhbHVlIGZvciB0aGF0IGxvY2FsZSAKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0
eXBlZGVmIGVudW0geworICAvKiogYWNjZXB0ZWQgYnkgbW9zdCBhdHRyaWJ1dGVzICovCisgIFVD
T0xfREVGQVVMVCA9IC0xLAorCisgIC8qKiBQcmltYXJ5IGNvbGxhdGlvbiBzdHJlbmd0aCAqLwor
ICBVQ09MX1BSSU1BUlkgPSAwLAorICAvKiogU2Vjb25kYXJ5IGNvbGxhdGlvbiBzdHJlbmd0aCAq
LworICBVQ09MX1NFQ09OREFSWSA9IDEsCisgIC8qKiBUZXJ0aWFyeSBjb2xsYXRpb24gc3RyZW5n
dGggKi8KKyAgVUNPTF9URVJUSUFSWSA9IDIsCisgIC8qKiBEZWZhdWx0IGNvbGxhdGlvbiBzdHJl
bmd0aCAqLworICBVQ09MX0RFRkFVTFRfU1RSRU5HVEggPSBVQ09MX1RFUlRJQVJZLAorICBVQ09M
X0NFX1NUUkVOR1RIX0xJTUlULAorICAvKiogUXVhdGVybmFyeSBjb2xsYXRpb24gc3RyZW5ndGgg
Ki8KKyAgVUNPTF9RVUFURVJOQVJZPTMsCisgIC8qKiBJZGVudGljYWwgY29sbGF0aW9uIHN0cmVu
Z3RoICovCisgIFVDT0xfSURFTlRJQ0FMPTE1LAorICBVQ09MX1NUUkVOR1RIX0xJTUlULAorCisg
IC8qKiBUdXJuIHRoZSBmZWF0dXJlIG9mZiAtIHdvcmtzIGZvciBVQ09MX0ZSRU5DSF9DT0xMQVRJ
T04sIAorICAgICAgVUNPTF9DQVNFX0xFVkVMLCBVQ09MX0hJUkFHQU5BX1FVQVRFUk5BUllfTU9E
RQorICAgICAgJiBVQ09MX0RFQ09NUE9TSVRJT05fTU9ERSovCisgIFVDT0xfT0ZGID0gMTYsCisg
IC8qKiBUdXJuIHRoZSBmZWF0dXJlIG9uIC0gd29ya3MgZm9yIFVDT0xfRlJFTkNIX0NPTExBVElP
TiwgCisgICAgICBVQ09MX0NBU0VfTEVWRUwsIFVDT0xfSElSQUdBTkFfUVVBVEVSTkFSWV9NT0RF
CisgICAgICAmIFVDT0xfREVDT01QT1NJVElPTl9NT0RFKi8KKyAgVUNPTF9PTiA9IDE3LAorICAK
KyAgLyoqIFZhbGlkIGZvciBVQ09MX0FMVEVSTkFURV9IQU5ETElORy4gQWx0ZXJuYXRlIGhhbmRs
aW5nIHdpbGwgYmUgc2hpZnRlZCAqLworICBVQ09MX1NISUZURUQgPSAyMCwKKyAgLyoqIFZhbGlk
IGZvciBVQ09MX0FMVEVSTkFURV9IQU5ETElORy4gQWx0ZXJuYXRlIGhhbmRsaW5nIHdpbGwgYmUg
bm9uIGlnbm9yYWJsZSAqLworICBVQ09MX05PTl9JR05PUkFCTEUgPSAyMSwKKworICAvKiogVmFs
aWQgZm9yIFVDT0xfQ0FTRV9GSVJTVCAtIAorICAgICAgbG93ZXIgY2FzZSBzb3J0cyBiZWZvcmUg
dXBwZXIgY2FzZSAqLworICBVQ09MX0xPV0VSX0ZJUlNUID0gMjQsCisgIC8qKiB1cHBlciBjYXNl
IHNvcnRzIGJlZm9yZSBsb3dlciBjYXNlICovCisgIFVDT0xfVVBQRVJfRklSU1QgPSAyNSwKKwor
ICBVQ09MX0FUVFJJQlVURV9WQUxVRV9DT1VOVAorCit9IFVDb2xBdHRyaWJ1dGVWYWx1ZTsKKwor
LyoqCisgKiBCYXNlIGxldHRlciByZXByZXNlbnRzIGEgcHJpbWFyeSBkaWZmZXJlbmNlLiAgU2V0
IGNvbXBhcmlzb24KKyAqIGxldmVsIHRvIFVDT0xfUFJJTUFSWSB0byBpZ25vcmUgc2Vjb25kYXJ5
IGFuZCB0ZXJ0aWFyeSBkaWZmZXJlbmNlcy4KKyAqIFVzZSB0aGlzIHRvIHNldCB0aGUgc3RyZW5n
dGggb2YgYSBDb2xsYXRvciBvYmplY3QuCisgKiBFeGFtcGxlIG9mIHByaW1hcnkgZGlmZmVyZW5j
ZSwgImFiYyIgJmx0OyAiYWJkIgorICogCisgKiBEaWFjcml0aWNhbCBkaWZmZXJlbmNlcyBvbiB0
aGUgc2FtZSBiYXNlIGxldHRlciByZXByZXNlbnQgYSBzZWNvbmRhcnkKKyAqIGRpZmZlcmVuY2Uu
ICBTZXQgY29tcGFyaXNvbiBsZXZlbCB0byBVQ09MX1NFQ09OREFSWSB0byBpZ25vcmUgdGVydGlh
cnkKKyAqIGRpZmZlcmVuY2VzLiBVc2UgdGhpcyB0byBzZXQgdGhlIHN0cmVuZ3RoIG9mIGEgQ29s
bGF0b3Igb2JqZWN0LgorICogRXhhbXBsZSBvZiBzZWNvbmRhcnkgZGlmZmVyZW5jZSwgIuQiID4+
ICJhIi4KKyAqCisgKiBVcHBlcmNhc2UgYW5kIGxvd2VyY2FzZSB2ZXJzaW9ucyBvZiB0aGUgc2Ft
ZSBjaGFyYWN0ZXIgcmVwcmVzZW50cyBhCisgKiB0ZXJ0aWFyeSBkaWZmZXJlbmNlLiAgU2V0IGNv
bXBhcmlzb24gbGV2ZWwgdG8gVUNPTF9URVJUSUFSWSB0byBpbmNsdWRlCisgKiBhbGwgY29tcGFy
aXNvbiBkaWZmZXJlbmNlcy4gVXNlIHRoaXMgdG8gc2V0IHRoZSBzdHJlbmd0aCBvZiBhIENvbGxh
dG9yCisgKiBvYmplY3QuCisgKiBFeGFtcGxlIG9mIHRlcnRpYXJ5IGRpZmZlcmVuY2UsICJhYmMi
ICZsdDsmbHQ7Jmx0OyAiQUJDIi4KKyAqCisgKiBUd28gY2hhcmFjdGVycyBhcmUgY29uc2lkZXJl
ZCAiaWRlbnRpY2FsIiB3aGVuIHRoZXkgaGF2ZSB0aGUgc2FtZQorICogdW5pY29kZSBzcGVsbGlu
Z3MuICBVQ09MX0lERU5USUNBTC4KKyAqIEZvciBleGFtcGxlLCAi5CIgPT0gIuQiLgorICoKKyAq
IFVDb2xsYXRpb25TdHJlbmd0aCBpcyBhbHNvIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdHJlbmd0
aCBvZiBzb3J0IGtleXMgCisgKiBnZW5lcmF0ZWQgZnJvbSBVQ29sbGF0b3Igb2JqZWN0cworICog
VGhlc2UgdmFsdWVzIGNhbiBiZSBub3cgZm91bmQgaW4gdGhlIFVDb2xBdHRyaWJ1dGVWYWx1ZSBl
bnVtLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKiovCit0eXBlZGVmIFVDb2xBdHRyaWJ1dGVWYWx1
ZSBVQ29sbGF0aW9uU3RyZW5ndGg7CisKKy8qKiBBdHRyaWJ1dGVzIHRoYXQgY29sbGF0aW9uIHNl
cnZpY2UgdW5kZXJzdGFuZHMuIEFsbCB0aGUgYXR0cmlidXRlcyBjYW4gdGFrZSBVQ09MX0RFRkFV
TFQKKyAqIHZhbHVlLCBhcyB3ZWxsIGFzIHRoZSB2YWx1ZXMgc3BlY2lmaWMgdG8gZWFjaCBvbmUu
IAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgIC8qKiBBdHRy
aWJ1dGUgZm9yIGRpcmVjdGlvbiBvZiBzZWNvbmRhcnkgd2VpZ2h0cyAtIHVzZWQgaW4gRnJlbmNo
LlwgCisgICAgICAqIEFjY2VwdGFibGUgdmFsdWVzIGFyZSBVQ09MX09OLCB3aGljaCByZXN1bHRz
IGluIHNlY29uZGFyeSB3ZWlnaHRzCisgICAgICAqIGJlaW5nIGNvbnNpZGVyZWQgYmFja3dhcmRz
IGFuZCBVQ09MX09GRiB3aGljaCB0cmVhdHMgc2Vjb25kYXJ5CisgICAgICAqIHdlaWdodHMgaW4g
dGhlIG9yZGVyIHRoZXkgYXBwZWFyLiovCisgICAgIFVDT0xfRlJFTkNIX0NPTExBVElPTiwgCisg
ICAgIC8qKiBBdHRyaWJ1dGUgZm9yIGhhbmRsaW5nIHZhcmlhYmxlIGVsZW1lbnRzLlwgCisgICAg
ICAqIEFjY2VwdGFibGUgdmFsdWVzIGFyZSBVQ09MX05PTl9JR05PUkFCTEUgKGRlZmF1bHQpCisg
ICAgICAqIHdoaWNoIHRyZWF0cyBhbGwgdGhlIGNvZGVwb2ludHMgd2l0aCBub24taWdub3JhYmxl
IAorICAgICAgKiBwcmltYXJ5IHdlaWdodHMgaW4gdGhlIHNhbWUgd2F5LAorICAgICAgKiBhbmQg
VUNPTF9TSElGVEVEIHdoaWNoIGNhdXNlcyBjb2RlcG9pbnRzIHdpdGggcHJpbWFyeSAKKyAgICAg
ICogd2VpZ2h0cyB0aGF0IGFyZSBlcXVhbCBvciBiZWxvdyB0aGUgdmFyaWFibGUgdG9wIHZhbHVl
CisgICAgICAqIHRvIGJlIGlnbm9yZWQgb24gcHJpbWFyeSBsZXZlbCBhbmQgbW92ZWQgdG8gdGhl
IHF1YXRlcm5hcnkgCisgICAgICAqIGxldmVsLiovCisgICAgIFVDT0xfQUxURVJOQVRFX0hBTkRM
SU5HLCAKKyAgICAgLyoqIENvbnRyb2xzIHRoZSBvcmRlcmluZyBvZiB1cHBlciBhbmQgbG93ZXIg
Y2FzZSBsZXR0ZXJzLlwgCisgICAgICAqIEFjY2VwdGFibGUgdmFsdWVzIGFyZSBVQ09MX09GRiAo
ZGVmYXVsdCksIHdoaWNoIG9yZGVycworICAgICAgKiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0
ZXJzIGluIGFjY29yZGFuY2UgdG8gdGhlaXIgdGVydGlhcnkKKyAgICAgICogd2VpZ2h0cywgVUNP
TF9VUFBFUl9GSVJTVCB3aGljaCBmb3JjZXMgdXBwZXIgY2FzZSBsZXR0ZXJzIHRvIAorICAgICAg
KiBzb3J0IGJlZm9yZSBsb3dlciBjYXNlIGxldHRlcnMsIGFuZCBVQ09MX0xPV0VSX0ZJUlNUIHdo
aWNoIGRvZXMgCisgICAgICAqIHRoZSBvcHBvc2l0ZS4gKi8KKyAgICAgVUNPTF9DQVNFX0ZJUlNU
LCAKKyAgICAgLyoqIENvbnRyb2xzIHdoZXRoZXIgYW4gZXh0cmEgY2FzZSBsZXZlbCAocG9zaXRp
b25lZCBiZWZvcmUgdGhlIHRoaXJkCisgICAgICAqIGxldmVsKSBpcyBnZW5lcmF0ZWQgb3Igbm90
LlwgQWNjZXB0YWJsZSB2YWx1ZXMgYXJlIFVDT0xfT0ZGIChkZWZhdWx0KSwgCisgICAgICAqIHdo
ZW4gY2FzZSBsZXZlbCBpcyBub3QgZ2VuZXJhdGVkLCBhbmQgVUNPTF9PTiB3aGljaCBjYXVzZXMg
dGhlIGNhc2UKKyAgICAgICogbGV2ZWwgdG8gYmUgZ2VuZXJhdGVkLlwgQ29udGVudHMgb2YgdGhl
IGNhc2UgbGV2ZWwgYXJlIGFmZmVjdGVkIGJ5CisgICAgICAqIHRoZSB2YWx1ZSBvZiBVQ09MX0NB
U0VfRklSU1QgYXR0cmlidXRlLlwgQSBzaW1wbGUgd2F5IHRvIGlnbm9yZSAKKyAgICAgICogYWNj
ZW50IGRpZmZlcmVuY2VzIGluIGEgc3RyaW5nIGlzIHRvIHNldCB0aGUgc3RyZW5ndGggdG8gVUNP
TF9QUklNQVJZCisgICAgICAqIGFuZCBlbmFibGUgY2FzZSBsZXZlbC4gKi8KKyAgICAgVUNPTF9D
QVNFX0xFVkVMLAorICAgICAvKiogQ29udHJvbHMgd2hldGhlciB0aGUgbm9ybWFsaXphdGlvbiBj
aGVjayBhbmQgbmVjZXNzYXJ5IG5vcm1hbGl6YXRpb25zCisgICAgICAqIGFyZSBwZXJmb3JtZWQu
XCBXaGVuIHNldCB0byBVQ09MX09GRiAoZGVmYXVsdCkgbm8gbm9ybWFsaXphdGlvbiBjaGVjawor
ICAgICAgKiBpcyBwZXJmb3JtZWQuXCBUaGUgY29ycmVjdG5lc3Mgb2YgdGhlIHJlc3VsdCBpcyBn
dWFyYW50ZWVkIG9ubHkgaWYgdGhlIAorICAgICAgKiBpbnB1dCBkYXRhIGlzIGluIHNvLWNhbGxl
ZCBGQ0QgZm9ybSAoc2VlIHVzZXJzIG1hbnVhbCBmb3IgbW9yZSBpbmZvKS5cIAorICAgICAgKiBX
aGVuIHNldCB0byBVQ09MX09OLCBhbiBpbmNyZW1lbnRhbCBjaGVjayBpcyBwZXJmb3JtZWQgdG8g
c2VlIHdoZXRoZXIgdGhlIGlucHV0IGRhdGEKKyAgICAgICogaXMgaW4gdGhlIEZDRCBmb3JtLlwg
SWYgdGhlIGRhdGEgaXMgbm90IGluIHRoZSBGQ0QgZm9ybSwgaW5jcmVtZW50YWwgCisgICAgICAq
IE5GRCBub3JtYWxpemF0aW9uIGlzIHBlcmZvcm1lZC4gKi8KKyAgICAgVUNPTF9OT1JNQUxJWkFU
SU9OX01PREUsIAorICAgICAvKiogQW4gYWxpYXMgZm9yIFVDT0xfTk9STUFMSVpBVElPTl9NT0RF
IGF0dHJpYnV0ZSAqLworICAgICBVQ09MX0RFQ09NUE9TSVRJT05fTU9ERSA9IFVDT0xfTk9STUFM
SVpBVElPTl9NT0RFLAorICAgICAvKiogVGhlIHN0cmVuZ3RoIGF0dHJpYnV0ZS5cIENhbiBiZSBl
aXRoZXIgVUNPTF9QUklNQVJZLCBVQ09MX1NFQ09OREFSWSwKKyAgICAgICogVUNPTF9URVJUSUFS
WSwgVUNPTF9RVUFURVJOQVJZIG9yIFVDT0xfSURFTlRJQ0FMLlwgVGhlIHVzdWFsIHN0cmVuZ3Ro
CisgICAgICAqIGZvciBtb3N0IGxvY2FsZXMgKGV4Y2VwdCBKYXBhbmVzZSkgaXMgdGVydGlhcnku
XCBRdWF0ZXJuYXJ5IHN0cmVuZ3RoIAorICAgICAgKiBpcyB1c2VmdWwgd2hlbiBjb21iaW5lZCB3
aXRoIHNoaWZ0ZWQgc2V0dGluZyBmb3IgYWx0ZXJuYXRlIGhhbmRsaW5nCisgICAgICAqIGF0dHJp
YnV0ZSBhbmQgZm9yIEpJUyB4IDQwNjEgY29sbGF0aW9uLCB3aGVuIGl0IGlzIHVzZWQgdG8gZGlz
dGluZ3Vpc2gKKyAgICAgICogYmV0d2VlbiBLYXRha2FuYSAgYW5kIEhpcmFnYW5hICh0aGlzIGlz
IGFjaGlldmVkIGJ5IHNldHRpbmcgdGhlIAorICAgICAgKiBVQ09MX0hJUkFHQU5BX1FVQVRFUk5B
UlkgbW9kZSB0byBvbi5cIE90aGVyd2lzZSwgcXVhdGVybmFyeSBsZXZlbAorICAgICAgKiBpcyBh
ZmZlY3RlZCBvbmx5IGJ5IHRoZSBudW1iZXIgb2Ygbm9uIGlnbm9yYWJsZSBjb2RlIHBvaW50cyBp
bgorICAgICAgKiB0aGUgc3RyaW5nLlwgSWRlbnRpY2FsIHN0cmVuZ3RoIGlzIHJhcmVseSB1c2Vm
dWwsIGFzIGl0IGFtb3VudHMgCisgICAgICAqIHRvIGNvZGVwb2ludHMgb2YgdGhlIE5GRCBmb3Jt
IG9mIHRoZSBzdHJpbmcuICovCisgICAgIFVDT0xfU1RSRU5HVEgsICAKKyAgICAgLyoqIHdoZW4g
dHVybmVkIG9uLCB0aGlzIGF0dHJpYnV0ZSAKKyAgICAgICogcG9zaXRpb25zIEhpcmFnYW5hIGJl
Zm9yZSBhbGwgIAorICAgICAgKiBub24taWdub3JhYmxlcyBvbiBxdWF0ZXJuYXJ5IGxldmVsCisg
ICAgICAqIFRoaXMgaXMgYSBzbmVha3kgd2F5IHRvIHByb2R1Y2UgSklTCisgICAgICAqIHNvcnQg
b3JkZXIgKi8gICAgIAorICAgICBVQ09MX0hJUkFHQU5BX1FVQVRFUk5BUllfTU9ERSwKKyAgICAg
LyoqIHdoZW4gdHVybmVkIG9uLCB0aGlzIGF0dHJpYnV0ZSAKKyAgICAgICogZ2VuZXJhdGVzIGEg
Y29sbGF0aW9uIGtleQorICAgICAgKiBmb3IgdGhlIG51bWVyaWMgdmFsdWUgb2Ygc3Vic3RyaW5n
cworICAgICAgKiBvZiBkaWdpdHMuIFRoaXMgaXMgYSB3YXkgdG8gZ2V0ICcxMDAnIAorICAgICAg
KiB0byBzb3J0IEFGVEVSICcyJy4qLyAgICAgICAgICAKKyAgICAgVUNPTF9OVU1FUklDX0NPTExB
VElPTiwgCisgICAgIFVDT0xfQVRUUklCVVRFX0NPVU5UCit9IFVDb2xBdHRyaWJ1dGU7CisKKy8q
KiBPcHRpb25zIGZvciByZXRyaWV2aW5nIHRoZSBydWxlIHN0cmluZyAKKyAqICBAc3RhYmxlIElD
VSAyLjAKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgLyoqIFJldHJpZXZlIHRhaWxvcmluZyBvbmx5
ICovCisgIFVDT0xfVEFJTE9SSU5HX09OTFksIAorICAvKiogUmV0cmlldmUgVUNBIHJ1bGVzIGFu
ZCB0YWlsb3JpbmcgKi8KKyAgVUNPTF9GVUxMX1JVTEVTIAorfSBVQ29sUnVsZU9wdGlvbiA7CisK
Ky8qKgorICogT3BlbiBhIFVDb2xsYXRvciBmb3IgY29tcGFyaW5nIHN0cmluZ3MuCisgKiBUaGUg
VUNvbGxhdG9yIHBvaW50ZXIgaXMgdXNlZCBpbiBhbGwgdGhlIGNhbGxzIHRvIHRoZSBDb2xsYXRp
b24gCisgKiBzZXJ2aWNlLiBBZnRlciBmaW5pc2hlZCwgY29sbGF0b3IgbXVzdCBiZSBkaXNwb3Nl
ZCBvZiBieSBjYWxsaW5nCisgKiB7QGxpbmsgI3Vjb2xfY2xvc2UgfS4KKyAqIEBwYXJhbSBsb2Mg
VGhlIGxvY2FsZSBjb250YWluaW5nIHRoZSByZXF1aXJlZCBjb2xsYXRpb24gcnVsZXMuIAorICog
ICAgICAgICAgICBTcGVjaWFsIHZhbHVlcyBmb3IgbG9jYWxlcyBjYW4gYmUgcGFzc2VkIGluIC0g
CisgKiAgICAgICAgICAgIGlmIE5VTEwgaXMgcGFzc2VkIGZvciB0aGUgbG9jYWxlLCB0aGUgZGVm
YXVsdCBsb2NhbGUKKyAqICAgICAgICAgICAgY29sbGF0aW9uIHJ1bGVzIHdpbGwgYmUgdXNlZC4g
SWYgZW1wdHkgc3RyaW5nICgiIikgb3IKKyAqICAgICAgICAgICAgInJvb3QiIGFyZSBwYXNzZWQs
IFVDQSBydWxlcyB3aWxsIGJlIHVzZWQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBh
biBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHJldHVybiBBIHBvaW50ZXIg
dG8gYSBVQ29sbGF0b3IsIG9yIDAgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKiBAc2VlIHVjb2xf
b3BlblJ1bGVzCisgKiBAc2VlIHVjb2xfc2FmZUNsb25lCisgKiBAc2VlIHVjb2xfY2xvc2UKKyAq
IEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVQ29sbGF0b3IqIFVfRVhQT1JUMiAKK3Vj
b2xfb3Blbihjb25zdCBjaGFyICpsb2MsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorICog
UHJvZHVjZSBhbiBVQ29sbGF0b3IgaW5zdGFuY2UgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBzdXBw
bGllZC4KKyAqIFRoZSBydWxlcyBhcmUgdXNlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgb3JkZXJp
bmcsIGRlZmluZWQgaW4gdGhlCisgKiBVQ0EgaW4gYSBwcm9jZXNzIGNhbGxlZCB0YWlsb3Jpbmcu
IFRoZSByZXN1bHRpbmcgVUNvbGxhdG9yIHBvaW50ZXIKKyAqIGNhbiBiZSB1c2VkIGluIHRoZSBz
YW1lIHdheSBhcyB0aGUgb25lIG9idGFpbmVkIGJ5IHtAbGluayAjdWNvbF9zdHJjb2xsIH0uCisg
KiBAcGFyYW0gcnVsZXMgQSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY29sbGF0aW9uIHJ1bGVzLiBG
b3IgdGhlIHN5bnRheAorICogICAgICAgICAgICAgIG9mIHRoZSBydWxlcyBwbGVhc2Ugc2VlIHVz
ZXJzIGd1aWRlLgorICogQHBhcmFtIHJ1bGVzTGVuZ3RoIFRoZSBsZW5ndGggb2YgcnVsZXMsIG9y
IC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSBub3JtYWxpemF0aW9uTW9kZSBUaGUg
bm9ybWFsaXphdGlvbiBtb2RlOiBPbmUgb2YKKyAqICAgICAgICAgICAgIFVDT0xfT0ZGICAgICAo
ZXhwZWN0IHRoZSB0ZXh0IHRvIG5vdCBuZWVkIG5vcm1hbGl6YXRpb24pLAorICogICAgICAgICAg
ICAgVUNPTF9PTiAgICAgIChub3JtYWxpemUpLCBvcgorICogICAgICAgICAgICAgVUNPTF9ERUZB
VUxUIChzZXQgdGhlIG1vZGUgYWNjb3JkaW5nIHRvIHRoZSBydWxlcykKKyAqIEBwYXJhbSBzdHJl
bmd0aCBUaGUgZGVmYXVsdCBjb2xsYXRpb24gc3RyZW5ndGg7IG9uZSBvZiBVQ09MX1BSSU1BUlks
IFVDT0xfU0VDT05EQVJZLAorICogVUNPTF9URVJUSUFSWSwgVUNPTF9JREVOVElDQUwsVUNPTF9E
RUZBVUxUX1NUUkVOR1RIIC0gY2FuIGJlIGFsc28gc2V0IGluIHRoZSBydWxlcy4KKyAqIEBwYXJh
bSBwYXJzZUVycm9yICBBIHBvaW50ZXIgdG8gVVBhcnNlRXJyb3IgdG8gcmVjaWV2ZSBpbmZvcm1h
dGlvbiBhYm91dCBlcnJvcnMKKyAqICAgICAgICAgICAgICAgICAgICBvY2N1cnJlZCBkdXJpbmcg
cGFyc2luZy4gVGhpcyBhcmd1bWVudCBjYW4gY3VycmVudGx5IGJlIHNldAorICogICAgICAgICAg
ICAgICAgICAgIHRvIE5VTEwsIGJ1dCBhdCB1c2VycyBvd24gcmlzay4gUGxlYXNlIHByb3ZpZGUg
YSByZWFsIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJv
ckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIFVD
b2xsYXRvci5cIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXQgTlVMTCBiZSByZXR1cm5lZCBpbiBj
YXNlCisgKiAgICAgICAgIG9mIGVycm9yIC0gcGxlYXNlIHVzZSBzdGF0dXMgYXJndW1lbnQgdG8g
Y2hlY2sgZm9yIGVycm9ycy4KKyAqIEBzZWUgdWNvbF9vcGVuCisgKiBAc2VlIHVjb2xfc2FmZUNs
b25lCisgKiBAc2VlIHVjb2xfY2xvc2UKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJM
RSBVQ29sbGF0b3IqIFVfRVhQT1JUMiAKK3Vjb2xfb3BlblJ1bGVzKCBjb25zdCBVQ2hhciAgICAg
ICAgKnJ1bGVzLAorICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgICBydWxlc0xlbmd0
aCwKKyAgICAgICAgICAgICAgICBVQ29sQXR0cmlidXRlVmFsdWUgbm9ybWFsaXphdGlvbk1vZGUs
CisgICAgICAgICAgICAgICAgVUNvbGxhdGlvblN0cmVuZ3RoIHN0cmVuZ3RoLAorICAgICAgICAg
ICAgICAgIFVQYXJzZUVycm9yICAgICAgICAqcGFyc2VFcnJvciwKKyAgICAgICAgICAgICAgICBV
RXJyb3JDb2RlICAgICAgICAgKnN0YXR1cyk7CisKKy8qKiAKKyAqIE9wZW4gYSBjb2xsYXRvciBk
ZWZpbmVkIGJ5IGEgc2hvcnQgZm9ybSBzdHJpbmcuCisgKiBUaGUgc3RydWN0dXJlIGFuZCB0aGUg
c3ludGF4IG9mIHRoZSBzdHJpbmcgaXMgZGVmaW5lZCBpbiB0aGUgIk5hbWluZyBjb2xsYXRvcnMi
CisgKiBzZWN0aW9uIG9mIHRoZSB1c2VycyBndWlkZTogCisgKiBodHRwOi8vaWN1LnNvdXJjZWZv
cmdlLm5ldC9pY3UvdXNlcmd1aWRlL0NvbGxhdGVfQ29uY2VwdHMuaHRtbCNOYW1pbmdfQ29sbGF0
b3JzCisgKiBBdHRyaWJ1dGVzIGFyZSBvdmVycmlkZW4gYnkgdGhlIHN1YnNlcXVlbnQgYXR0cmli
dXRlcy4gU28sIGZvciAiUzJfUzMiLCBmaW5hbAorICogc3RyZW5ndGggd2lsbCBiZSAzLiAzMDY2
YmlzIGxvY2FsZSBvdmVycmlkZXMgaW5kaXZpZHVhbCBsb2NhbGUgcGFydHMuCisgKiBUaGUgY2Fs
bCB0byB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYSBjYWxsIHRvIHVjb2xfb3Blbiwg
Zm9sbG93ZWQgYnkgYSAKKyAqIHNlcmllcyBvZiBjYWxscyB0byB1Y29sX3NldEF0dHJpYnV0ZSBh
bmQgdWNvbF9zZXRWYXJpYWJsZVRvcC4KKyAqIEBwYXJhbSBkZWZpbml0aW9uIEEgc2hvcnQgc3Ry
aW5nIGNvbnRhaW5pbmcgYSBsb2NhbGUgYW5kIGEgc2V0IG9mIGF0dHJpYnV0ZXMuIAorICogICAg
ICAgICAgICAgICAgICAgQXR0cmlidXRlcyBub3QgZXhwbGljaXRseSBtZW50aW9uZWQgYXJlIGxl
ZnQgYXQgdGhlIGRlZmF1bHQKKyAqICAgICAgICAgICAgICAgICAgIHN0YXRlIGZvciBhIGxvY2Fs
ZS4KKyAqIEBwYXJhbSBwYXJzZUVycm9yIGlmIG5vdCBOVUxMLCBzdHJ1Y3R1cmUgdGhhdCB3aWxs
IGdldCBmaWxsZWQgd2l0aCBlcnJvcidzIHByZQorICogICAgICAgICAgICAgICAgICAgYW5kIHBv
c3QgY29udGV4dCBpbiBjYXNlIG9mIGVycm9yLgorICogQHBhcmFtIGZvcmNlRGVmYXVsdHMgaWYg
RkFMU0UsIHRoZSBzZXR0aW5ncyB0aGF0IGFyZSB0aGUgc2FtZSBhcyB0aGUgY29sbGF0b3IgCisg
KiAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHNldHRpbmdzIHdpbGwgbm90IGJlIGFwcGxpZWQg
KGZvciBleGFtcGxlLCBzZXR0aW5nCisgKiAgICAgICAgICAgICAgICAgICBGcmVuY2ggc2Vjb25k
YXJ5IG9uIGEgRnJlbmNoIGNvbGxhdG9yIHdvdWxkIG5vdCBiZSBleGVjdXRlZCkuIAorICogICAg
ICAgICAgICAgICAgICAgSWYgVFJVRSwgYWxsIHRoZSBzZXR0aW5ncyB3aWxsIGJlIGFwcGxpZWQg
cmVnYXJkbGVzcyBvZiB0aGUgCisgKiAgICAgICAgICAgICAgICAgICBjb2xsYXRvciBkZWZhdWx0
IHZhbHVlLiBJZiB0aGUgZGVmaW5pdGlvbgorICogICAgICAgICAgICAgICAgICAgc3RyaW5ncyBh
cmUgdG8gYmUgY2FjaGVkLCBzaG91bGQgYmUgc2V0IHRvIEZBTFNFLgorICogQHBhcmFtIHN0YXR1
cyAgICAgRXJyb3IgY29kZS4gQXBhcnQgZnJvbSByZWd1bGFyIGVycm9yIGNvbmRpdGlvbnMgY29u
bmVjdGVkIHRvIAorICogICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGluZyBjb2xsYXRvcnMg
KGxpa2Ugb3V0IG9mIG1lbW9yeSBvciBzaW1pbGFyKSwgdGhpcworICogICAgICAgICAgICAgICAg
ICAgQVBJIHdpbGwgcmV0dXJuIGFuIGVycm9yIGlmIGFuIGludmFsaWQgYXR0cmlidXRlIG9yIGF0
dHJpYnV0ZS92YWx1ZQorICogICAgICAgICAgICAgICAgICAgY29tYmluYXRpb24gaXMgc3BlY2lm
aWVkLgorICogQHJldHVybiAgICAgICAgICAgQSBwb2ludGVyIHRvIGEgVUNvbGxhdG9yIG9yIDAg
aWYgYW4gZXJyb3Igb2NjdXJlZCAoaW5jbHVkaW5nIGFuIAorICogICAgICAgICAgICAgICAgICAg
aW52YWxpZCBhdHRyaWJ1dGUpLgorICogQHNlZSB1Y29sX29wZW4KKyAqIEBzZWUgdWNvbF9zZXRB
dHRyaWJ1dGUKKyAqIEBzZWUgdWNvbF9zZXRWYXJpYWJsZVRvcAorICogQHNlZSB1Y29sX2dldFNo
b3J0RGVmaW5pdGlvblN0cmluZworICogQHNlZSB1Y29sX25vcm1hbGl6ZVNob3J0RGVmaW5pdGlv
blN0cmluZworICogQGRyYWZ0IElDVSAzLjAKKyAqCisgKi8KK1VfQ0FQSSBVQ29sbGF0b3IqIFVf
RVhQT1JUMgordWNvbF9vcGVuRnJvbVNob3J0U3RyaW5nKCBjb25zdCBjaGFyICpkZWZpbml0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCBmb3JjZURlZmF1bHRzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBVUGFyc2VFcnJvciAqcGFyc2VFcnJvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworLyoqCisgKiBHZXQgYSBzZXQg
Y29udGFpbmluZyB0aGUgY29udHJhY3Rpb25zIGRlZmluZWQgYnkgdGhlIGNvbGxhdG9yLiBUaGUg
c2V0IGluY2x1ZGVzCisgKiBib3RoIHRoZSBVQ0EgY29udHJhY3Rpb25zIGFuZCB0aGUgY29udHJh
Y3Rpb25zIGRlZmluZWQgYnkgdGhlIGNvbGxhdG9yLiBUaGlzIHNldAorICogd2lsbCBjb250YWlu
IG9ubHkgc3RyaW5ncy4gSWYgYSB0YWlsb3JpbmcgZXhwbGljaXRseSBzdXBwcmVzc2VzIGNvbnRy
YWN0aW9ucyBmcm9tIAorICogdGhlIFVDQSAobGlrZSBSdXNzaWFuKSwgcmVtb3ZlZCBjb250cmFj
dGlvbnMgd2lsbCBub3QgYmUgaW4gdGhlIHJlc3VsdGluZyBzZXQuCisgKiBAcGFyYW0gY29sbCBj
b2xsYXRvciAKKyAqIEBwYXJhbSBjb250cyB0aGUgc2V0IHRvIGhvbGQgdGhlIHJlc3VsdC4gSXQg
Z2V0cyBlbXB0aWVkIGJlZm9yZQorICogICAgICAgICAgICAgIGNvbnRyYWN0aW9ucyBhcmUgYWRk
ZWQuIAorICogQHBhcmFtIHN0YXR1cyB0byBob2xkIHRoZSBlcnJvciBjb2RlCisgKiBAcmV0dXJu
IHRoZSBzaXplIG9mIHRoZSBjb250cmFjdGlvbiBzZXQKKyAqCisgKiBAZHJhZnQgSUNVIDMuMAor
ICovCitVX0NBUEkgaW50MzJfdCBVX0VYUE9SVDIKK3Vjb2xfZ2V0Q29udHJhY3Rpb25zKCBjb25z
dCBVQ29sbGF0b3IgKmNvbGwsCisgICAgICAgICAgICAgICAgICBVU2V0ICpjb250cywKKyAgICAg
ICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworLyoqIAorICogQ2xvc2UgYSBV
Q29sbGF0b3IuCisgKiBPbmNlIGNsb3NlZCwgYSBVQ29sbGF0b3Igc2hvdWxkIG5vdCBiZSB1c2Vk
LlwgRXZlcnkgb3BlbiBjb2xsYXRvciBzaG91bGQKKyAqIGJlIGNsb3NlZC5cIE90aGVyd2lzZSwg
YSBtZW1vcnkgbGVhayB3aWxsIHJlc3VsdC4KKyAqIEBwYXJhbSBjb2xsIFRoZSBVQ29sbGF0b3Ig
dG8gY2xvc2UuCisgKiBAc2VlIHVjb2xfb3BlbgorICogQHNlZSB1Y29sX29wZW5SdWxlcworICog
QHNlZSB1Y29sX3NhZmVDbG9uZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZv
aWQgVV9FWFBPUlQyIAordWNvbF9jbG9zZShVQ29sbGF0b3IgKmNvbGwpOworCisvKioKKyAqIENv
bXBhcmUgdHdvIHN0cmluZ3MuCisgKiBUaGUgc3RyaW5ncyB3aWxsIGJlIGNvbXBhcmVkIHVzaW5n
IHRoZSBvcHRpb25zIGFscmVhZHkgc3BlY2lmaWVkLgorICogQHBhcmFtIGNvbGwgVGhlIFVDb2xs
YXRvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJ1bGVzLgorICogQHBhcmFtIHNvdXJjZSBU
aGUgc291cmNlIHN0cmluZy4KKyAqIEBwYXJhbSBzb3VyY2VMZW5ndGggVGhlIGxlbmd0aCBvZiBz
b3VyY2UsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSB0YXJnZXQgVGhlIHRh
cmdldCBzdHJpbmcuCisgKiBAcGFyYW0gdGFyZ2V0TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGFyZ2V0
LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBAcmV0dXJuIFRoZSByZXN1bHQgb2YgY29t
cGFyaW5nIHRoZSBzdHJpbmdzOyBvbmUgb2YgVUNPTF9FUVVBTCwKKyAqIFVDT0xfR1JFQVRFUiwg
VUNPTF9MRVNTCisgKiBAc2VlIHVjb2xfZ3JlYXRlcgorICogQHNlZSB1Y29sX2dyZWF0ZXJPckVx
dWFsCisgKiBAc2VlIHVjb2xfZXF1YWwKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJM
RSBVQ29sbGF0aW9uUmVzdWx0IFVfRVhQT1JUMiAKK3Vjb2xfc3RyY29sbCggICAgY29uc3QgICAg
VUNvbGxhdG9yICAgICpjb2xsLAorICAgICAgICBjb25zdCAgICBVQ2hhciAgICAgICAgKnNvdXJj
ZSwKKyAgICAgICAgaW50MzJfdCAgICAgICAgICAgIHNvdXJjZUxlbmd0aCwKKyAgICAgICAgY29u
c3QgICAgVUNoYXIgICAgICAgICp0YXJnZXQsCisgICAgICAgIGludDMyX3QgICAgICAgICAgICB0
YXJnZXRMZW5ndGgpOworCisvKioKKyAqIERldGVybWluZSBpZiBvbmUgc3RyaW5nIGlzIGdyZWF0
ZXIgdGhhbiBhbm90aGVyLgorICogVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHtAbGlu
ayAjdWNvbF9zdHJjb2xsIH0gPT0gVUNPTF9HUkVBVEVSCisgKiBAcGFyYW0gY29sbCBUaGUgVUNv
bGxhdG9yIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcnVsZXMuCisgKiBAcGFyYW0gc291cmNl
IFRoZSBzb3VyY2Ugc3RyaW5nLgorICogQHBhcmFtIHNvdXJjZUxlbmd0aCBUaGUgbGVuZ3RoIG9m
IHNvdXJjZSwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorICogQHBhcmFtIHRhcmdldCBUaGUg
dGFyZ2V0IHN0cmluZy4KKyAqIEBwYXJhbSB0YXJnZXRMZW5ndGggVGhlIGxlbmd0aCBvZiB0YXJn
ZXQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAqIEByZXR1cm4gVFJVRSBpZiBzb3VyY2Ug
aXMgZ3JlYXRlciB0aGFuIHRhcmdldCwgRkFMU0Ugb3RoZXJ3aXNlLgorICogQHNlZSB1Y29sX3N0
cmNvbGwKKyAqIEBzZWUgdWNvbF9ncmVhdGVyT3JFcXVhbAorICogQHNlZSB1Y29sX2VxdWFsCisg
KiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyIAordWNvbF9n
cmVhdGVyKGNvbnN0IFVDb2xsYXRvciAqY29sbCwKKyAgICAgICAgICAgICBjb25zdCBVQ2hhciAg
ICAgKnNvdXJjZSwgaW50MzJfdCBzb3VyY2VMZW5ndGgsCisgICAgICAgICAgICAgY29uc3QgVUNo
YXIgICAgICp0YXJnZXQsIGludDMyX3QgdGFyZ2V0TGVuZ3RoKTsKKworLyoqCisgKiBEZXRlcm1p
bmUgaWYgb25lIHN0cmluZyBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYW5vdGhlci4KKyAq
IFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byB7QGxpbmsgI3Vjb2xfc3RyY29sbCB9ICE9
IFVDT0xfTEVTUworICogQHBhcmFtIGNvbGwgVGhlIFVDb2xsYXRvciBjb250YWluaW5nIHRoZSBj
b21wYXJpc29uIHJ1bGVzLgorICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIHN0cmluZy4KKyAq
IEBwYXJhbSBzb3VyY2VMZW5ndGggVGhlIGxlbmd0aCBvZiBzb3VyY2UsIG9yIC0xIGlmIG51bGwt
dGVybWluYXRlZC4KKyAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmcuCisgKiBAcGFy
YW0gdGFyZ2V0TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGFyZ2V0LCBvciAtMSBpZiBudWxsLXRlcm1p
bmF0ZWQuCisgKiBAcmV0dXJuIFRSVUUgaWYgc291cmNlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVh
bCB0byB0YXJnZXQsIEZBTFNFIG90aGVyd2lzZS4KKyAqIEBzZWUgdWNvbF9zdHJjb2xsCisgKiBA
c2VlIHVjb2xfZ3JlYXRlcgorICogQHNlZSB1Y29sX2VxdWFsCisgKiBAc3RhYmxlIElDVSAyLjAK
KyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyIAordWNvbF9ncmVhdGVyT3JFcXVhbChjb25z
dCBVQ29sbGF0b3IgKmNvbGwsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAq
c291cmNlLCBpbnQzMl90IHNvdXJjZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VUNoYXIgICAgICp0YXJnZXQsIGludDMyX3QgdGFyZ2V0TGVuZ3RoKTsKKworLyoqCisgKiBDb21w
YXJlIHR3byBzdHJpbmdzIGZvciBlcXVhbGl0eS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZh
bGVudCB0byB7QGxpbmsgI3Vjb2xfc3RyY29sbCB9ID09IFVDT0xfRVFVQUwKKyAqIEBwYXJhbSBj
b2xsIFRoZSBVQ29sbGF0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiBydWxlcy4KKyAqIEBw
YXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBzdHJpbmcuCisgKiBAcGFyYW0gc291cmNlTGVuZ3RoIFRo
ZSBsZW5ndGggb2Ygc291cmNlLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0g
dGFyZ2V0IFRoZSB0YXJnZXQgc3RyaW5nLgorICogQHBhcmFtIHRhcmdldExlbmd0aCBUaGUgbGVu
Z3RoIG9mIHRhcmdldCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorICogQHJldHVybiBUUlVF
IGlmIHNvdXJjZSBpcyBlcXVhbCB0byB0YXJnZXQsIEZBTFNFIG90aGVyd2lzZQorICogQHNlZSB1
Y29sX3N0cmNvbGwKKyAqIEBzZWUgdWNvbF9ncmVhdGVyCisgKiBAc2VlIHVjb2xfZ3JlYXRlck9y
RXF1YWwKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIg
Cit1Y29sX2VxdWFsKGNvbnN0IFVDb2xsYXRvciAqY29sbCwKKyAgICAgICAgICAgY29uc3QgVUNo
YXIgICAgICpzb3VyY2UsIGludDMyX3Qgc291cmNlTGVuZ3RoLAorICAgICAgICAgICBjb25zdCBV
Q2hhciAgICAgKnRhcmdldCwgaW50MzJfdCB0YXJnZXRMZW5ndGgpOworCisvKioKKyAqIENvbXBh
cmUgdHdvIFVURi04IGVuY29kZWQgdHJpbmdzLgorICogVGhlIHN0cmluZ3Mgd2lsbCBiZSBjb21w
YXJlZCB1c2luZyB0aGUgb3B0aW9ucyBhbHJlYWR5IHNwZWNpZmllZC4KKyAqIEBwYXJhbSBjb2xs
IFRoZSBVQ29sbGF0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiBydWxlcy4KKyAqIEBwYXJh
bSBzSXRlciBUaGUgc291cmNlIHN0cmluZyBpdGVyYXRvci4KKyAqIEBwYXJhbSB0SXRlciBUaGUg
dGFyZ2V0IHN0cmluZyBpdGVyYXRvci4KKyAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBjb21wYXJp
bmcgdGhlIHN0cmluZ3M7IG9uZSBvZiBVQ09MX0VRVUFMLAorICogVUNPTF9HUkVBVEVSLCBVQ09M
X0xFU1MKKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVj
ZWl2ZSBhbnkgZXJyb3JzCisgKiBAc2VlIHVjb2xfc3RyY29sbAorICogQHN0YWJsZSBJQ1UgMi42
CisgKi8KK1VfU1RBQkxFIFVDb2xsYXRpb25SZXN1bHQgVV9FWFBPUlQyIAordWNvbF9zdHJjb2xs
SXRlciggIGNvbnN0ICAgIFVDb2xsYXRvciAgICAqY29sbCwKKyAgICAgICAgICAgICAgICAgIFVD
aGFySXRlcmF0b3IgKnNJdGVyLAorICAgICAgICAgICAgICAgICAgVUNoYXJJdGVyYXRvciAqdEl0
ZXIsCisgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKioKKyAqIEdl
dCB0aGUgY29sbGF0aW9uIHN0cmVuZ3RoIHVzZWQgaW4gYSBVQ29sbGF0b3IuCisgKiBUaGUgc3Ry
ZW5ndGggaW5mbHVlbmNlcyBob3cgc3RyaW5ncyBhcmUgY29tcGFyZWQuCisgKiBAcGFyYW0gY29s
bCBUaGUgVUNvbGxhdG9yIHRvIHF1ZXJ5LgorICogQHJldHVybiBUaGUgY29sbGF0aW9uIHN0cmVu
Z3RoOyBvbmUgb2YgVUNPTF9QUklNQVJZLCBVQ09MX1NFQ09OREFSWSwKKyAqIFVDT0xfVEVSVElB
UlksIFVDT0xfUVVBVEVSTkFSWSwgVUNPTF9JREVOVElDQUwKKyAqIEBzZWUgdWNvbF9zZXRTdHJl
bmd0aAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVDb2xsYXRpb25TdHJlbmd0
aCBVX0VYUE9SVDIgCit1Y29sX2dldFN0cmVuZ3RoKGNvbnN0IFVDb2xsYXRvciAqY29sbCk7CisK
Ky8qKgorICogU2V0IHRoZSBjb2xsYXRpb24gc3RyZW5ndGggdXNlZCBpbiBhIFVDb2xsYXRvci4K
KyAqIFRoZSBzdHJlbmd0aCBpbmZsdWVuY2VzIGhvdyBzdHJpbmdzIGFyZSBjb21wYXJlZC4KKyAq
IEBwYXJhbSBjb2xsIFRoZSBVQ29sbGF0b3IgdG8gc2V0LgorICogQHBhcmFtIHN0cmVuZ3RoIFRo
ZSBkZXNpcmVkIGNvbGxhdGlvbiBzdHJlbmd0aDsgb25lIG9mIFVDT0xfUFJJTUFSWSwgCisgKiBV
Q09MX1NFQ09OREFSWSwgVUNPTF9URVJUSUFSWSwgVUNPTF9RVUFURVJOQVJZLCBVQ09MX0lERU5U
SUNBTCwgVUNPTF9ERUZBVUxUCisgKiBAc2VlIHVjb2xfZ2V0U3RyZW5ndGgKKyAqIEBzdGFibGUg
SUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3Vjb2xfc2V0U3RyZW5ndGgo
VUNvbGxhdG9yICpjb2xsLAorICAgICAgICAgICAgICAgICBVQ29sbGF0aW9uU3RyZW5ndGggc3Ry
ZW5ndGgpOworCisvKioKKyAqIEdldCB0aGUgZGlzcGxheSBuYW1lIGZvciBhIFVDb2xsYXRvci4K
KyAqIFRoZSBkaXNwbGF5IG5hbWUgaXMgc3VpdGFibGUgZm9yIHByZXNlbnRhdGlvbiB0byBhIHVz
ZXIuCisgKiBAcGFyYW0gb2JqTG9jIFRoZSBsb2NhbGUgb2YgdGhlIGNvbGxhdG9yIGluIHF1ZXN0
aW9uLgorICogQHBhcmFtIGRpc3BMb2MgVGhlIGxvY2FsZSBmb3IgZGlzcGxheS4KKyAqIEBwYXJh
bSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGF0dHJpYnV0ZS4K
KyAqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisgKiBA
cGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVy
cm9ycworICogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVy
IHRoYW4gcmVzdWx0TGVuZ3RoLAorICogdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorICogQHN0
YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWNvbF9nZXRE
aXNwbGF5TmFtZSggICAgY29uc3QgICAgY2hhciAgICAgICAgKm9iakxvYywKKyAgICAgICAgICAg
IGNvbnN0ICAgIGNoYXIgICAgICAgICpkaXNwTG9jLAorICAgICAgICAgICAgVUNoYXIgICAgICAg
ICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgIGludDMyX3QgICAgICAgICByZXN1bHRMZW5ndGgs
CisgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAqc3RhdHVzKTsKKworLyoqCisgKiBHZXQg
YSBsb2NhbGUgZm9yIHdoaWNoIGNvbGxhdGlvbiBydWxlcyBhcmUgYXZhaWxhYmxlLgorICogQSBV
Q29sbGF0b3IgaW4gYSBsb2NhbGUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiB3aWxsIHBlcmZv
cm0gdGhlIGNvcnJlY3QKKyAqIGNvbGxhdGlvbiBmb3IgdGhlIGxvY2FsZS4KKyAqIEBwYXJhbSBp
bmRleCBUaGUgaW5kZXggb2YgdGhlIGRlc2lyZWQgbG9jYWxlLgorICogQHJldHVybiBBIGxvY2Fs
ZSBmb3Igd2hpY2ggY29sbGF0aW9uIHJ1bGVzIGFyZSBhdmFpbGFibGUsIG9yIDAgaWYgbm9uZS4K
KyAqIEBzZWUgdWNvbF9jb3VudEF2YWlsYWJsZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1Vf
U1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQT1JUMiAKK3Vjb2xfZ2V0QXZhaWxhYmxlKGludDMyX3Qg
aW5kZXgpOworCisvKioKKyAqIERldGVybWluZSBob3cgbWFueSBsb2NhbGVzIGhhdmUgY29sbGF0
aW9uIHJ1bGVzIGF2YWlsYWJsZS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgbW9zdCB1c2VmdWwgYXMg
ZGV0ZXJtaW5pbmcgdGhlIGxvb3AgZW5kaW5nIGNvbmRpdGlvbiBmb3IKKyAqIGNhbGxzIHRvIHtA
bGluayAjdWNvbF9nZXRBdmFpbGFibGUgfS4KKyAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBsb2Nh
bGVzIGZvciB3aGljaCBjb2xsYXRpb24gcnVsZXMgYXJlIGF2YWlsYWJsZS4KKyAqIEBzZWUgdWNv
bF9nZXRBdmFpbGFibGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQzMl90
IFVfRVhQT1JUMiAKK3Vjb2xfY291bnRBdmFpbGFibGUodm9pZCk7CisKKyNpZiAhVUNPTkZJR19O
T19TRVJWSUNFCisvKioKKyAqIENyZWF0ZSBhIHN0cmluZyBlbnVtZXJhdG9yIG9mIGFsbCBsb2Nh
bGVzIGZvciB3aGljaCBhIHZhbGlkCisgKiBjb2xsYXRvciBtYXkgYmUgb3BlbmVkLgorICogQHBh
cmFtIHN0YXR1cyBpbnB1dC1vdXRwdXQgZXJyb3IgY29kZQorICogQHJldHVybiBhIHN0cmluZyBl
bnVtZXJhdGlvbiBvdmVyIGxvY2FsZSBzdHJpbmdzLiBUaGUgY2FsbGVyIGlzCisgKiByZXNwb25z
aWJsZSBmb3IgY2xvc2luZyB0aGUgcmVzdWx0LgorICogQGRyYWZ0IElDVSAzLjAKKyAqLworVV9E
UkFGVCBVRW51bWVyYXRpb24qIFVfRVhQT1JUMgordWNvbF9vcGVuQXZhaWxhYmxlTG9jYWxlcyhV
RXJyb3JDb2RlICpzdGF0dXMpOworI2VuZGlmCisKKy8qKgorICogQ3JlYXRlIGEgc3RyaW5nIGVu
dW1lcmF0b3Igb2YgYWxsIHBvc3NpYmxlIGtleXdvcmRzIHRoYXQgYXJlIHJlbGV2YW50IHRvCisg
KiBjb2xsYXRpb24uIEF0IHRoaXMgcG9pbnQsIHRoZSBvbmx5IHJlY29nbml6ZWQga2V5d29yZCBm
b3IgdGhpcworICogc2VydmljZSBpcyAiY29sbGF0aW9uIi4KKyAqIEBwYXJhbSBzdGF0dXMgaW5w
dXQtb3V0cHV0IGVycm9yIGNvZGUKKyAqIEByZXR1cm4gYSBzdHJpbmcgZW51bWVyYXRpb24gb3Zl
ciBsb2NhbGUgc3RyaW5ncy4gVGhlIGNhbGxlciBpcworICogcmVzcG9uc2libGUgZm9yIGNsb3Np
bmcgdGhlIHJlc3VsdC4KKyAqIEBkcmFmdCBJQ1UgMy4wCisgKi8KK1VfRFJBRlQgVUVudW1lcmF0
aW9uKiBVX0VYUE9SVDIKK3Vjb2xfZ2V0S2V5d29yZHMoVUVycm9yQ29kZSAqc3RhdHVzKTsKKwor
LyoqCisgKiBHaXZlbiBhIGtleXdvcmQsIGNyZWF0ZSBhIHN0cmluZyBlbnVtZXJhdGlvbiBvZiBh
bGwgdmFsdWVzCisgKiBmb3IgdGhhdCBrZXl3b3JkIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB1c2Uu
CisgKiBAcGFyYW0ga2V5d29yZCBhIHBhcnRpY3VsYXIga2V5d29yZCBhcyBlbnVtZXJhdGVkIGJ5
CisgKiB1Y29sX2dldEtleXdvcmRzLiBJZiBhbnkgb3RoZXIga2V5d29yZCBpcyBwYXNzZWQgaW4s
ICpzdGF0dXMgaXMgc2V0CisgKiB0byBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1IuCisgKiBAcGFy
YW0gc3RhdHVzIGlucHV0LW91dHB1dCBlcnJvciBjb2RlCisgKiBAcmV0dXJuIGEgc3RyaW5nIGVu
dW1lcmF0aW9uIG92ZXIgY29sbGF0aW9uIGtleXdvcmQgdmFsdWVzLCBvciBOVUxMCisgKiB1cG9u
IGVycm9yLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjbG9zaW5nIHRoZSByZXN1bHQu
CisgKiBAZHJhZnQgSUNVIDMuMAorICovCitVX0RSQUZUIFVFbnVtZXJhdGlvbiogVV9FWFBPUlQy
Cit1Y29sX2dldEtleXdvcmRWYWx1ZXMoY29uc3QgY2hhciAqa2V5d29yZCwgVUVycm9yQ29kZSAq
c3RhdHVzKTsKKworLyoqCisgKiBSZXR1cm4gdGhlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGxv
Y2FsZSBmb3IgdGhlIGdpdmVuCisgKiByZXF1ZXN0ZWQgbG9jYWxlLCB3aXRoIHJlc3BlY3QgdG8g
Z2l2ZW4ga2V5d29yZCwgZm9yIHRoZQorICogY29sbGF0aW9uIHNlcnZpY2UuICBJZiB0d28gbG9j
YWxlcyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0LCB0aGVuCisgKiBjb2xsYXRvcnMgaW5zdGFudGlh
dGVkIGZvciB0aGVzZSBsb2NhbGVzIHdpbGwgYmVoYXZlCisgKiBlcXVpdmFsZW50bHkuICBUaGUg
Y29udmVyc2UgaXMgbm90IGFsd2F5cyB0cnVlOyB0d28gY29sbGF0b3JzCisgKiBtYXkgaW4gZmFj
dCBiZSBlcXVpdmFsZW50LCBidXQgcmV0dXJuIGRpZmZlcmVudCByZXN1bHRzLCBkdWUgdG8KKyAq
IGludGVybmFsIGRldGFpbHMuICBUaGUgcmV0dXJuIHJlc3VsdCBoYXMgbm8gb3RoZXIgbWVhbmlu
ZyB0aGFuCisgKiB0aGF0IHN0YXRlZCBhYm92ZSwgYW5kIGltcGxpZXMgbm90aGluZyBhcyB0byB0
aGUgcmVsYXRpb25zaGlwCisgKiBiZXR3ZWVuIHRoZSB0d28gbG9jYWxlcy4gIFRoaXMgaXMgaW50
ZW5kZWQgZm9yIHVzZSBieQorICogYXBwbGljYXRpb25zIHdobyB3aXNoIHRvIGNhY2hlIGNvbGxh
dG9ycywgb3Igb3RoZXJ3aXNlIHJldXNlCisgKiBjb2xsYXRvcnMgd2hlbiBwb3NzaWJsZS4gIFRo
ZSBmdW5jdGlvbmFsIGVxdWl2YWxlbnQgbWF5IGNoYW5nZQorICogb3ZlciB0aW1lLiAgRm9yIG1v
cmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIDxhCisgKiBocmVmPSJodHRwOi8vaWN1LnNv
dXJjZWZvcmdlLm5ldC9pY3UvdXNlcmd1aWRlL2xvY2FsZS5odG1sI3NlcnZpY2VzIj4KKyAqIExv
Y2FsZXMgYW5kIFNlcnZpY2VzPC9hPiBzZWN0aW9uIG9mIHRoZSBJQ1UgVXNlciBHdWlkZS4KKyAq
IEBwYXJhbSByZXN1bHQgZmlsbGluIGZvciB0aGUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgbG9j
YWxlCisgKiBAcGFyYW0gcmVzdWx0Q2FwYWNpdHkgY2FwYWNpdHkgb2YgdGhlIGZpbGxpbiBidWZm
ZXIKKyAqIEBwYXJhbSBrZXl3b3JkIGEgcGFydGljdWxhciBrZXl3b3JkIGFzIGVudW1lcmF0ZWQg
YnkKKyAqIHVjb2xfZ2V0S2V5d29yZHMuCisgKiBAcGFyYW0gbG9jYWxlIHRoZSByZXF1ZXN0ZWQg
bG9jYWxlCisgKiBAcGFyYW0gaXNBdmFpbGFibGUgaWYgbm9uLU5VTEwsIHBvaW50ZXIgdG8gYSBm
aWxsaW4gcGFyYW1ldGVyIHRoYXQKKyAqIGluZGljYXRlcyB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQg
bG9jYWxlIHdhcyAnYXZhaWxhYmxlJyB0byB0aGUKKyAqIGNvbGxhdGlvbiBzZXJ2aWNlLiBBIGxv
Y2FsZSBpcyBkZWZpbmVkIGFzICdhdmFpbGFibGUnIGlmIGl0CisgKiBwaHlzaWNhbGx5IGV4aXN0
cyB3aXRoaW4gdGhlIGNvbGxhdGlvbiBsb2NhbGUgZGF0YS4KKyAqIEBwYXJhbSBzdGF0dXMgcG9p
bnRlciB0byBpbnB1dC1vdXRwdXQgZXJyb3IgY29kZQorICogQHJldHVybiB0aGUgYWN0dWFsIGJ1
ZmZlciBzaXplIG5lZWRlZCBmb3IgdGhlIGxvY2FsZS4gIElmIGdyZWF0ZXIKKyAqIHRoYW4gcmVz
dWx0Q2FwYWNpdHksIHRoZSByZXR1cm5lZCBmdWxsIG5hbWUgd2lsbCBiZSB0cnVuY2F0ZWQgYW5k
CisgKiBhbiBlcnJvciBjb2RlIHdpbGwgYmUgcmV0dXJuZWQuCisgKiBAZHJhZnQgSUNVIDMuMAor
ICovCitVX0RSQUZUIGludDMyX3QgVV9FWFBPUlQyCit1Y29sX2dldEZ1bmN0aW9uYWxFcXVpdmFs
ZW50KGNoYXIqIHJlc3VsdCwgaW50MzJfdCByZXN1bHRDYXBhY2l0eSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhcioga2V5d29yZCwgY29uc3QgY2hhciogbG9jYWxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCogaXNBdmFpbGFibGUsIFVFcnJvckNv
ZGUqIHN0YXR1cyk7CisKKy8qKgorICogR2V0IHRoZSBjb2xsYXRpb24gcnVsZXMgZnJvbSBhIFVD
b2xsYXRvci4KKyAqIFRoZSBydWxlcyB3aWxsIGZvbGxvdyB0aGUgcnVsZSBzeW50YXguCisgKiBA
cGFyYW0gY29sbCBUaGUgVUNvbGxhdG9yIHRvIHF1ZXJ5LgorICogQHBhcmFtIGxlbmd0aCAKKyAq
IEByZXR1cm4gVGhlIGNvbGxhdGlvbiBydWxlcy4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSBjb25zdCBVQ2hhciogVV9FWFBPUlQyIAordWNvbF9nZXRSdWxlcyggICAgY29uc3Qg
ICAgVUNvbGxhdG9yICAgICpjb2xsLCAKKyAgICAgICAgaW50MzJfdCAgICAgICAgICAgICpsZW5n
dGgpOworCisvKiogR2V0IHRoZSBzaG9ydCBkZWZpbml0aW9uIHN0cmluZyBmb3IgYSBjb2xsYXRv
ci4gVGhpcyBBUEkgaGFydmVzdHMgdGhlIGNvbGxhdG9yJ3MKKyAqICBsb2NhbGUgYW5kIHRoZSBh
dHRyaWJ1dGUgc2V0IGFuZCBwcm9kdWNlcyBhIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGZvciBv
cGVuaW5nIAorICogIGEgY29sbGF0b3Igd2l0aCB0aGUgc2FtZSBwcm9wZXJ0aWVzIHVzaW5nIHRo
ZSB1Y29sX29wZW5Gcm9tU2hvcnRTdHJpbmcgQVBJLgorICogIFRoaXMgc3RyaW5nIHdpbGwgYmUg
bm9ybWFsaXplZC4KKyAqICBUaGUgc3RydWN0dXJlIGFuZCB0aGUgc3ludGF4IG9mIHRoZSBzdHJp
bmcgaXMgZGVmaW5lZCBpbiB0aGUgIk5hbWluZyBjb2xsYXRvcnMiCisgKiAgc2VjdGlvbiBvZiB0
aGUgdXNlcnMgZ3VpZGU6IAorICogIGh0dHA6Ly9pY3Uuc291cmNlZm9yZ2UubmV0L2ljdS91c2Vy
Z3VpZGUvQ29sbGF0ZV9Db25jZXB0cy5odG1sI05hbWluZ19Db2xsYXRvcnMKKyAqICBUaGlzIEFQ
SSBzdXBwb3J0cyBwcmVmbGlnaHRpbmcuCisgKiAgQHBhcmFtIGNvbGwgYSBjb2xsYXRvcgorICog
IEBwYXJhbSBsb2NhbGUgYSBsb2NhbGUgdGhhdCB3aWxsIGFwcGVhciBhcyBhIGNvbGxhdG9ycyBs
b2NhbGUgaW4gdGhlIHJlc3VsdGluZworICogICAgICAgICAgICAgICAgc2hvcnQgc3RyaW5nIGRl
ZmluaXRpb24uIElmIE5VTEwsIHRoZSBsb2NhbGUgd2lsbCBiZSBoYXJ2ZXN0ZWQgCisgKiAgICAg
ICAgICAgICAgICBmcm9tIHRoZSBjb2xsYXRvci4KKyAqICBAcGFyYW0gYnVmZmVyIHNwYWNlIHRv
IGhvbGQgdGhlIHJlc3VsdGluZyBzdHJpbmcKKyAqICBAcGFyYW0gY2FwYWNpdHkgY2FwYWNpdHkg
b2YgdGhlIGJ1ZmZlcgorICogIEBwYXJhbSBzdGF0dXMgZm9yIHJldHVybmluZyBlcnJvcnMuIEFs
bCB0aGUgcHJlZmxpZ2h0aW5nIGVycm9ycyBhcmUgZmVhdHVyZWQKKyAqICBAcmV0dXJuIGxlbmd0
aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZworICogIEBzZWUgdWNvbF9vcGVuRnJvbVNob3J0U3Ry
aW5nCisgKiAgQHNlZSB1Y29sX25vcm1hbGl6ZVNob3J0RGVmaW5pdGlvblN0cmluZworICogIEBk
cmFmdCBJQ1UgMy4wCisgKi8KK1VfQ0FQSSBpbnQzMl90IFVfRVhQT1JUMgordWNvbF9nZXRTaG9y
dERlZmluaXRpb25TdHJpbmcoY29uc3QgVUNvbGxhdG9yICpjb2xsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbG9jYWxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCBjYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUg
KnN0YXR1cyk7CisKKy8qKiBWZXJpZmllcyBhbmQgbm9ybWFsaXplcyBzaG9ydCBkZWZpbml0aW9u
IHN0cmluZy4KKyAqICBOb3JtYWxpemVkIHNob3J0IGRlZmluaXRpb24gc3RyaW5nIGhhcyBhbGwg
dGhlIG9wdGlvbiBzb3J0ZWQgYnkgdGhlIGFyZ3VtZW50IG5hbWUsCisgKiAgc28gdGhhdCBlcXVp
dmFsZW50IGRlZmluaXRpb24gc3RyaW5ncyBhcmUgdGhlIHNhbWUuIAorICogIFRoaXMgQVBJIHN1
cHBvcnRzIHByZWZsaWdodGluZy4KKyAqICBAcGFyYW0gc291cmNlIGRlZmluaXRpb24gc3RyaW5n
CisgKiAgQHBhcmFtIGRlc3RpbmF0aW9uIHNwYWNlIHRvIGhvbGQgdGhlIHJlc3VsdGluZyBzdHJp
bmcKKyAqICBAcGFyYW0gY2FwYWNpdHkgY2FwYWNpdHkgb2YgdGhlIGJ1ZmZlcgorICogIEBwYXJh
bSBwYXJzZUVycm9yIGlmIG5vdCBOVUxMLCBzdHJ1Y3R1cmUgdGhhdCB3aWxsIGdldCBmaWxsZWQg
d2l0aCBlcnJvcidzIHByZQorICogICAgICAgICAgICAgICAgICAgYW5kIHBvc3QgY29udGV4dCBp
biBjYXNlIG9mIGVycm9yLgorICogIEBwYXJhbSBzdGF0dXMgICAgIEVycm9yIGNvZGUuIFRoaXMg
QVBJIHdpbGwgcmV0dXJuIGFuIGVycm9yIGlmIGFuIGludmFsaWQgYXR0cmlidXRlIAorICogICAg
ICAgICAgICAgICAgICAgIG9yIGF0dHJpYnV0ZS92YWx1ZSBjb21iaW5hdGlvbiBpcyBzcGVjaWZp
ZWQuIEFsbCB0aGUgcHJlZmxpZ2h0aW5nIAorICogICAgICAgICAgICAgICAgICAgIGVycm9ycyBh
cmUgYWxzbyBmZWF0dXJlZAorICogIEByZXR1cm4gbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgbm9y
bWFsaXplZCBzdHJpbmcuCisgKgorICogIEBzZWUgdWNvbF9vcGVuRnJvbVNob3J0U3RyaW5nCisg
KiAgQHNlZSB1Y29sX2dldFNob3J0RGVmaW5pdGlvblN0cmluZworICogCisgKiAgQGRyYWZ0IElD
VSAzLjAKKyAqLworCitVX0NBUEkgaW50MzJfdCBVX0VYUE9SVDIKK3Vjb2xfbm9ybWFsaXplU2hv
cnREZWZpbml0aW9uU3RyaW5nKGNvbnN0IGNoYXIgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKmRlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50MzJfdCBjYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVQYXJzZUVycm9yICpwYXJzZUVycm9yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsKKyAgICAgICAgCisKKy8q
KgorICogR2V0IGEgc29ydCBrZXkgZm9yIGEgc3RyaW5nIGZyb20gYSBVQ29sbGF0b3IuCisgKiBT
b3J0IGtleXMgbWF5IGJlIGNvbXBhcmVkIHVzaW5nIDxUVD5zdHJjbXA8L1RUPi4KKyAqIEBwYXJh
bSBjb2xsIFRoZSBVQ29sbGF0b3IgY29udGFpbmluZyB0aGUgY29sbGF0aW9uIHJ1bGVzLgorICog
QHBhcmFtIHNvdXJjZSBUaGUgc3RyaW5nIHRvIHRyYW5zZm9ybS4KKyAqIEBwYXJhbSBzb3VyY2VM
ZW5ndGggVGhlIGxlbmd0aCBvZiBzb3VyY2UsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAq
IEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGF0dHJp
YnV0ZS4KKyAqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQu
CisgKiBAcmV0dXJuIFRoZSBzaXplIG5lZWRlZCB0byBmdWxseSBzdG9yZSB0aGUgc29ydCBrZXku
LgorICogQHNlZSB1Y29sX2tleUhhc2hDb2RlCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9T
VEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1Y29sX2dldFNvcnRLZXkoY29uc3QgICAgVUNvbGxh
dG9yICAgICpjb2xsLAorICAgICAgICBjb25zdCAgICBVQ2hhciAgICAgICAgKnNvdXJjZSwKKyAg
ICAgICAgaW50MzJfdCAgICAgICAgc291cmNlTGVuZ3RoLAorICAgICAgICB1aW50OF90ICAgICAg
ICAqcmVzdWx0LAorICAgICAgICBpbnQzMl90ICAgICAgICByZXN1bHRMZW5ndGgpOworCisKKy8q
KiBHZXRzIHRoZSBuZXh0IGNvdW50IGJ5dGVzIG9mIGEgc29ydCBrZXkuIENhbGxlciBuZWVkcwor
ICogIHRvIHByZXNlcnZlIHN0YXRlIGFycmF5IGJldHdlZW4gY2FsbHMgYW5kIHRvIHByb3ZpZGUK
KyAqICB0aGUgc2FtZSB0eXBlIG9mIFVDaGFySXRlcmF0b3Igc2V0IHdpdGggdGhlIHNhbWUgc3Ry
aW5nLgorICogIFRoZSBkZXN0aW5hdGlvbiBidWZmZXIgcHJvdmlkZWQgbXVzdCBiZSBiaWcgZW5v
dWdoIHRvIHN0b3JlCisgKiAgdGhlIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMuIEdlbmVyYXRl
ZCBzb3J0a2V5IGlzIG5vdCAKKyAqICBjb21wYXRpYmxlIHdpdGggc29ydGtleXMgZ2VuZXJhdGVk
IHVzaW5nIHVjb2xfZ2V0U29ydEtleQorICogIEFQSSwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IGNv
bXByZXNzaW9uLiBJZiB1bmNvbXByZXNzZWQKKyAqICBzb3J0a2V5cyBhcmUgcmVxdWlyZWQsIHRo
aXMgQVBJIGNhbiBiZSB1c2VkLgorICogIEBwYXJhbSBjb2xsIFRoZSBVQ29sbGF0b3IgY29udGFp
bmluZyB0aGUgY29sbGF0aW9uIHJ1bGVzLgorICogIEBwYXJhbSBpdGVyIFVDaGFySXRlcmF0b3Ig
Y29udGFpbmluZyB0aGUgc3RyaW5nIHdlIG5lZWQgCisgKiAgICAgICAgICAgICAgdGhlIHNvcnQg
a2V5IHRvIGJlIGNhbGN1bGF0ZWQgZm9yLgorICogIEBwYXJhbSBzdGF0ZSBPcGFxdWUgc3RhdGUg
b2Ygc29ydGtleSBpdGVyYXRpb24uCisgKiAgQHBhcmFtIGRlc3QgQnVmZmVyIHRvIGhvbGQgdGhl
IHJlc3VsdGluZyBzb3J0a2V5IHBhcnQKKyAqICBAcGFyYW0gY291bnQgbnVtYmVyIG9mIHNvcnQg
a2V5IGJ5dGVzIHJlcXVpcmVkLgorICogIEBwYXJhbSBzdGF0dXMgZXJyb3IgY29kZSBpbmRpY2F0
b3IuCisgKiAgQHJldHVybiB0aGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyBvZiBhIHNvcnRrZXku
IEl0IGNhbiBiZQorICogICAgICAgICAgc21hbGxlciB0aGFuIGNvdW50IGlmIHdlIGhhdmUgcmVh
Y2hlZCB0aGUgZW5kIG9mIAorICogICAgICAgICAgdGhlIHNvcnQga2V5LgorICogIEBzdGFibGUg
SUNVIDIuNgorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3Vjb2xfbmV4dFNvcnRL
ZXlQYXJ0KGNvbnN0IFVDb2xsYXRvciAqY29sbCwKKyAgICAgICAgICAgICAgICAgICAgIFVDaGFy
SXRlcmF0b3IgKml0ZXIsCisgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzdGF0ZVsyXSwK
KyAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRlc3QsIGludDMyX3QgY291bnQsCisgICAg
ICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKiogZW51bSB0aGF0IGlz
IHRha2VuIGJ5IHVjb2xfZ2V0Qm91bmQgQVBJIAorICogU2VlIGJlbG93IGZvciBleHBsYW5hdGlv
biAgICAgICAgICAgICAgICAKKyAqIGRvIG5vdCBjaGFuZ2UgdGhlIHZhbHVlcyBhc3NpZ25lZCB0
byB0aGUgCisgKiBtZW1iZXJzIG9mIHRoaXMgZW51bS4gVW5kZXJseWluZyBjb2RlICAgIAorICog
ZGVwZW5kcyBvbiB0aGVtIGhhdmluZyB0aGVzZSBudW1iZXJzICAgICAKKyAqIEBzdGFibGUgSUNV
IDIuMAorICovCit0eXBlZGVmIGVudW0geworICAvKiogbG93ZXIgYm91bmQgKi8KKyAgVUNPTF9C
T1VORF9MT1dFUiA9IDAsCisgIC8qKiB1cHBlciBib3VuZCB0aGF0IHdpbGwgbWF0Y2ggc3RyaW5n
cyBvZiBleGFjdCBzaXplICovCisgIFVDT0xfQk9VTkRfVVBQRVIgPSAxLAorICAvKiogdXBwZXIg
Ym91bmQgdGhhdCB3aWxsIG1hdGNoIGFsbCB0aGUgc3RyaW5ncyB0aGF0IGhhdmUgdGhlIHNhbWUg
aW5pdGlhbCBzdWJzdHJpbmcgYXMgdGhlIGdpdmVuIHN0cmluZyAqLworICBVQ09MX0JPVU5EX1VQ
UEVSX0xPTkcgPSAyLAorICBVQ09MX0JPVU5EX1ZBTFVFX0NPVU5UCit9IFVDb2xCb3VuZE1vZGU7
CisKKy8qKgorICogUHJvZHVjZSBhIGJvdW5kIGZvciBhIGdpdmVuIHNvcnRrZXkgYW5kIGEgbnVt
YmVyIG9mIGxldmVscy4KKyAqIFJldHVybiB2YWx1ZSBpcyBhbHdheXMgdGhlIG51bWJlciBvZiBi
eXRlcyBuZWVkZWQsIHJlZ2FyZGxlc3Mgb2YgCisgKiB3aGV0aGVyIHRoZSByZXN1bHQgYnVmZmVy
IHdhcyBiaWcgZW5vdWdoIG9yIGV2ZW4gdmFsaWQuPGJyPgorICogUmVzdWx0aW5nIGJvdW5kcyBj
YW4gYmUgdXNlZCB0byBwcm9kdWNlIGEgcmFuZ2Ugb2Ygc3RyaW5ncyB0aGF0IGFyZQorICogYmV0
d2VlbiB1cHBlciBhbmQgbG93ZXIgYm91bmRzLiBGb3IgZXhhbXBsZSwgaWYgYm91bmRzIGFyZSBw
cm9kdWNlZAorICogZm9yIGEgc29ydGtleSBvZiBzdHJpbmcgInNtaXRoIiwgc3RyaW5ncyBiZXR3
ZWVuIHVwcGVyIGFuZCBsb3dlciAKKyAqIGJvdW5kcyB3aXRoIG9uZSBsZXZlbCB3b3VsZCBpbmNs
dWRlICJTbWl0aCIsICJTTUlUSCIsICJzTWlUaCIuPGJyPgorICogVGhlcmUgYXJlIHR3byB1cHBl
ciBib3VuZHMgdGhhdCBjYW4gYmUgcHJvZHVjZWQuIElmIFVDT0xfQk9VTkRfVVBQRVIKKyAqIGlz
IHByb2R1Y2VkLCBzdHJpbmdzIG1hdGNoZWQgd291bGQgYmUgYXMgYWJvdmUuIEhvd2V2ZXIsIGlm
IGJvdW5kCisgKiBwcm9kdWNlZCB1c2luZyBVQ09MX0JPVU5EX1VQUEVSX0xPTkcgaXMgdXNlZCwg
dGhlIGFib3ZlIGV4YW1wbGUgd2lsbAorICogYWxzbyBtYXRjaCAiU21pdGhzb25pYW4iIGFuZCBz
aW1pbGFyLjxicj4KKyAqIEZvciBtb3JlIG9uIHVzYWdlLCBzZWUgZXhhbXBsZSBpbiBjaW50bHRz
dC9jYXBpdHN0LmMgaW4gcHJvY2VkdXJlCisgKiBUZXN0Qm91bmRzLgorICogU29ydCBrZXlzIG1h
eSBiZSBjb21wYXJlZCB1c2luZyA8VFQ+c3RyY21wPC9UVD4uCisgKiBAcGFyYW0gc291cmNlIFRo
ZSBzb3VyY2Ugc29ydGtleS4KKyAqIEBwYXJhbSBzb3VyY2VMZW5ndGggVGhlIGxlbmd0aCBvZiBz
b3VyY2UsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4gCisgKiAgICAgICAgICAgICAgICAgICAg
IChJZiBhbiB1bm1vZGlmaWVkIHNvcnRrZXkgaXMgcGFzc2VkLCBpdCBpcyBhbHdheXMgbnVsbCAK
KyAqICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQpLgorICogQHBhcmFtIGJvdW5kVHlw
ZSBUeXBlIG9mIGJvdW5kIHJlcXVpcmVkLiBJdCBjYW4gYmUgVUNPTF9CT1VORF9MT1dFUiwgd2hp
Y2ggCisgKiAgICAgICAgICAgICAgICAgIHByb2R1Y2VzIGEgbG93ZXIgaW5jbHVzaXZlIGJvdW5k
LCBVQ09MX0JPVU5EX1VQUEVSLCB0aGF0IAorICogICAgICAgICAgICAgICAgICBwcm9kdWNlcyB1
cHBlciBib3VuZCB0aGF0IG1hdGNoZXMgc3RyaW5ncyBvZiB0aGUgc2FtZSBsZW5ndGggCisgKiAg
ICAgICAgICAgICAgICAgIG9yIFVDT0xfQk9VTkRfVVBQRVJfTE9ORyB0aGF0IG1hdGNoZXMgc3Ry
aW5ncyB0aGF0IGhhdmUgdGhlIAorICogICAgICAgICAgICAgICAgICBzYW1lIHN0YXJ0aW5nIHN1
YnN0cmluZyBhcyB0aGUgc291cmNlIHN0cmluZy4KKyAqIEBwYXJhbSBub09mTGV2ZWxzICBOdW1i
ZXIgb2YgbGV2ZWxzIHJlcXVpcmVkIGluIHRoZSByZXN1bHRpbmcgYm91bmQgKGZvciBtb3N0IAor
ICogICAgICAgICAgICAgICAgICAgIHVzZXMsIHRoZSByZWNvbW1lbmRlZCB2YWx1ZSBpcyAxKS4g
U2VlIHVzZXJzIGd1aWRlIGZvciAKKyAqICAgICAgICAgICAgICAgICAgICBleHBsYW5hdGlvbiBv
biBudW1iZXIgb2YgbGV2ZWxzIGEgc29ydGtleSBjYW4gaGF2ZS4KKyAqIEBwYXJhbSByZXN1bHQg
QSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHJlc3VsdGluZyBzb3J0a2V5Lgor
ICogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyAqIEBw
YXJhbSBzdGF0dXMgVXNlZCBmb3IgcmV0dXJuaW5nIGVycm9yIGNvZGUgaWYgc29tZXRoaW5nIHdl
bnQgd3JvbmcuIElmIHRoZSAKKyAqICAgICAgICAgICAgICAgbnVtYmVyIG9mIGxldmVscyByZXF1
ZXN0ZWQgaXMgaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZiBsZXZlbHMKKyAqICAgICAgICAgICAg
ICAgaW4gdGhlIHNvdXJjZSBrZXksIGEgd2FybmluZyAoVV9TT1JUX0tFWV9UT09fU0hPUlRfV0FS
TklORykgaXMgCisgKiAgICAgICAgICAgICAgIGlzc3VlZC4KKyAqIEByZXR1cm4gVGhlIHNpemUg
bmVlZGVkIHRvIGZ1bGx5IHN0b3JlIHRoZSBib3VuZC4gCisgKiBAc2VlIHVjb2xfa2V5SGFzaENv
ZGUKKyAqIEBzdGFibGUgSUNVIDIuMQorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAK
K3Vjb2xfZ2V0Qm91bmQoY29uc3QgdWludDhfdCAgICAgICAqc291cmNlLAorICAgICAgICBpbnQz
Ml90ICAgICAgICAgICAgIHNvdXJjZUxlbmd0aCwKKyAgICAgICAgVUNvbEJvdW5kTW9kZSAgICAg
ICBib3VuZFR5cGUsCisgICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgbm9PZkxldmVscywKKyAg
ICAgICAgdWludDhfdCAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICBpbnQzMl90ICAgICAg
ICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgVUVycm9yQ29kZSAgICAgICAgICAqc3RhdHVz
KTsKKyAgICAgICAgCisvKioKKyAqIEdldHMgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gZm9yIGEg
Q29sbGF0b3IuIFZlcnNpb24gaXMgY3VycmVudGx5CisgKiBhbiBvcGFxdWUgMzItYml0IG51bWJl
ciB3aGljaCBkZXBlbmRzLCBhbW9uZyBvdGhlciB0aGluZ3MsIG9uIG1ham9yCisgKiB2ZXJzaW9u
cyBvZiB0aGUgY29sbGF0b3IgdGFpbG9yaW5nIGFuZCBVQ0EuCisgKiBAcGFyYW0gY29sbCBUaGUg
VUNvbGxhdG9yIHRvIHF1ZXJ5LgorICogQHBhcmFtIGluZm8gdGhlIHZlcnNpb24gIyBpbmZvcm1h
dGlvbiwgdGhlIHJlc3VsdCB3aWxsIGJlIGZpbGxlZCBpbgorICogQHN0YWJsZSBJQ1UgMi4wCisg
Ki8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1Y29sX2dldFZlcnNpb24oY29uc3QgVUNvbGxh
dG9yKiBjb2xsLCBVVmVyc2lvbkluZm8gaW5mbyk7CisKKy8qKgorICogR2V0cyB0aGUgVUNBIHZl
cnNpb24gaW5mb3JtYXRpb24gZm9yIGEgQ29sbGF0b3IuIFZlcnNpb24gaXMgdGhlCisgKiBVQ0Eg
dmVyc2lvbiBudW1iZXIgKDMuMS4xLCA0LjApLgorICogQHBhcmFtIGNvbGwgVGhlIFVDb2xsYXRv
ciB0byBxdWVyeS4KKyAqIEBwYXJhbSBpbmZvIHRoZSB2ZXJzaW9uICMgaW5mb3JtYXRpb24sIHRo
ZSByZXN1bHQgd2lsbCBiZSBmaWxsZWQgaW4KKyAqIEBkcmFmdCBJQ1UgMi44CisgKi8KK1VfRFJB
RlQgdm9pZCBVX0VYUE9SVDIKK3Vjb2xfZ2V0VUNBVmVyc2lvbihjb25zdCBVQ29sbGF0b3IqIGNv
bGwsIFVWZXJzaW9uSW5mbyBpbmZvKTsKKworLyoqIAorICogTWVyZ2UgdHdvIHNvcnQga2V5cy4g
VGhlIGxldmVscyBhcmUgbWVyZ2VkIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBjb3VudGVycGFy
dHMKKyAqIChwcmltYXJpZXMgd2l0aCBwcmltYXJpZXMsIHNlY29uZGFyaWVzIHdpdGggc2Vjb25k
YXJpZXMgZXRjLikuIEJldHdlZW4gdGhlIHZhbHVlcworICogZnJvbSB0aGUgc2FtZSBsZXZlbCBh
IHNlcGFyYXRvciBpcyBpbnNlcnRlZC4KKyAqIGV4YW1wbGUgKHVuY29tcHJlc3NlZCk6IAorICog
MTkxQjFEIDAxIDA1MDUwNSAwMSA5MTA1MDUgMDAgYW5kIDFGMjEyMyAwMSAwNTA1MDUgMDEgOTEw
NTA1IDAwCisgKiB3aWxsIGJlIG1lcmdlZCBhcyAKKyAqIDE5MUIxRCAwMiAxRjIxMjMwMSAwNTA1
MDUgMDIgMDUwNTA1IDAxIDkxMDUwNSAwMiA5MTA1MDUgMDAKKyAqIFRoaXMgYWxsb3dzIGZvciBj
b25jYXRlbmF0aW5nIG9mIGZpcnN0IGFuZCBsYXN0IG5hbWVzIGZvciBzb3J0aW5nLCBhbW9uZyBv
dGhlciB0aGluZ3MuCisgKiBJZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdCBiaWcgZW5v
dWdoLCB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLgorICogSWYgYW55IG9mIHNvdXJjZSBsZW5n
dGhzIGFyZSB6ZXJvIG9yIGFueSBvZiBzb3VyY2UgcG9pbnRlcnMgYXJlIE5VTEwvdW5kZWZpbmVk
LCAKKyAqIHJlc3VsdCBpcyBvZiBzaXplIHplcm8uCisgKiBAcGFyYW0gc3JjMSBwb2ludGVyIHRv
IHRoZSBmaXJzdCBzb3J0a2V5CisgKiBAcGFyYW0gc3JjMUxlbmd0aCBsZW5ndGggb2YgdGhlIGZp
cnN0IHNvcnRrZXkKKyAqIEBwYXJhbSBzcmMyIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBzb3J0a2V5
CisgKiBAcGFyYW0gc3JjMkxlbmd0aCBsZW5ndGggb2YgdGhlIHNlY29uZCBzb3J0a2V5CisgKiBA
cGFyYW0gZGVzdCBidWZmZXIgdG8gaG9sZCB0aGUgcmVzdWx0CisgKiBAcGFyYW0gZGVzdENhcGFj
aXR5IHNpemUgb2YgdGhlIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdAorICogQHJldHVybiBzaXplIG9m
IHRoZSByZXN1bHQuIElmIHRoZSBidWZmZXIgaXMgYmlnIGVub3VnaCBzaXplIGlzIGFsd2F5cwor
ICogICAgICAgICBzcmMxTGVuZ3RoK3NyYzJMZW5ndGgtMQorICogQHN0YWJsZSBJQ1UgMi4wCisg
Ki8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWNvbF9tZXJnZVNvcnRrZXlzKGNvbnN0
IHVpbnQ4X3QgKnNyYzEsIGludDMyX3Qgc3JjMUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICBj
b25zdCB1aW50OF90ICpzcmMyLCBpbnQzMl90IHNyYzJMZW5ndGgsCisgICAgICAgICAgICAgICAg
ICAgdWludDhfdCAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHkpOworCisvKioKKyAqIFVuaXZl
cnNhbCBhdHRyaWJ1dGUgc2V0dGVyCisgKiBAcGFyYW0gY29sbCBjb2xsYXRvciB3aGljaCBhdHRy
aWJ1dGVzIGFyZSB0byBiZSBjaGFuZ2VkCisgKiBAcGFyYW0gYXR0ciBhdHRyaWJ1dGUgdHlwZSAK
KyAqIEBwYXJhbSB2YWx1ZSBhdHRyaWJ1dGUgdmFsdWUKKyAqIEBwYXJhbSBzdGF0dXMgdG8gaW5k
aWNhdGUgd2hldGhlciB0aGUgb3BlcmF0aW9uIHdlbnQgb24gc21vb3RobHkgb3IgdGhlcmUgd2Vy
ZSBlcnJvcnMKKyAqIEBzZWUgVUNvbEF0dHJpYnV0ZQorICogQHNlZSBVQ29sQXR0cmlidXRlVmFs
dWUKKyAqIEBzZWUgdWNvbF9nZXRBdHRyaWJ1dGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3Vjb2xfc2V0QXR0cmlidXRlKFVDb2xsYXRvciAqY29s
bCwgVUNvbEF0dHJpYnV0ZSBhdHRyLCBVQ29sQXR0cmlidXRlVmFsdWUgdmFsdWUsIFVFcnJvckNv
ZGUgKnN0YXR1cyk7CisKKy8qKgorICogVW5pdmVyc2FsIGF0dHJpYnV0ZSBnZXR0ZXIKKyAqIEBw
YXJhbSBjb2xsIGNvbGxhdG9yIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIGNoYW5nZWQKKyAq
IEBwYXJhbSBhdHRyIGF0dHJpYnV0ZSB0eXBlCisgKiBAcmV0dXJuIGF0dHJpYnV0ZSB2YWx1ZQor
ICogQHBhcmFtIHN0YXR1cyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBvcGVyYXRpb24gd2VudCBv
biBzbW9vdGhseSBvciB0aGVyZSB3ZXJlIGVycm9ycworICogQHNlZSBVQ29sQXR0cmlidXRlCisg
KiBAc2VlIFVDb2xBdHRyaWJ1dGVWYWx1ZQorICogQHNlZSB1Y29sX3NldEF0dHJpYnV0ZQorICog
QHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVDb2xBdHRyaWJ1dGVWYWx1ZSAgVV9FWFBP
UlQyIAordWNvbF9nZXRBdHRyaWJ1dGUoY29uc3QgVUNvbGxhdG9yICpjb2xsLCBVQ29sQXR0cmli
dXRlIGF0dHIsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKiBWYXJpYWJsZSB0b3AKKyAqIGlz
IGEgdHdvIGJ5dGUgcHJpbWFyeSB2YWx1ZSB3aGljaCBjYXVzZXMgYWxsIHRoZSBjb2RlcG9pbnRz
IHdpdGggcHJpbWFyeSB2YWx1ZXMgdGhhdAorICogYXJlIGxlc3Mgb3IgZXF1YWwgdGhhbiB0aGUg
dmFyaWFibGUgdG9wIHRvIGJlIHNoaWZ0ZWQgd2hlbiBhbHRlcm5hdGUgaGFuZGxpbmcgaXMgc2V0
CisgKiB0byBVQ09MX1NISUZURUQuCisgKiBTZXRzIHRoZSB2YXJpYWJsZSB0b3AgdG8gYSBjb2xs
YXRpb24gZWxlbWVudCB2YWx1ZSBvZiBhIHN0cmluZyBzdXBwbGllZC4gCisgKiBAcGFyYW0gY29s
bCBjb2xsYXRvciB3aGljaCB2YXJpYWJsZSB0b3AgbmVlZHMgdG8gYmUgY2hhbmdlZAorICogQHBh
cmFtIHZhclRvcCBvbmUgb3IgbW9yZSAoaWYgY29udHJhY3Rpb24pIFVDaGFycyB0byB3aGljaCB0
aGUgdmFyaWFibGUgdG9wIHNob3VsZCBiZSBzZXQKKyAqIEBwYXJhbSBsZW4gbGVuZ3RoIG9mIHZh
cmlhYmxlIHRvcCBzdHJpbmcuIElmIC0xIGl0IGlzIGNvbnNpZGVyZWQgdG8gYmUgemVybyB0ZXJt
aW5hdGVkLgorICogQHBhcmFtIHN0YXR1cyBlcnJvciBjb2RlLiBJZiBlcnJvciBjb2RlIGlzIHNl
dCwgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQuIAorICogICAgICAgICAgICAgICBFcnJv
cnMgc2V0IGJ5IHRoaXMgZnVuY3Rpb24gYXJlOiA8YnI+CisgKiAgICBVX0NFX05PVF9GT1VORF9F
UlJPUiBpZiBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciB3YXMgcGFzc2VkIGFuZCB0aGVyZSBpcyBu
byBzdWNoIAorICogICAgYSBjb250cmFjdGlvbjxicj4KKyAqICAgIFVfUFJJTUFSWV9UT09fTE9O
R19FUlJPUiBpZiB0aGUgcHJpbWFyeSBmb3IgdGhlIHZhcmlhYmxlIHRvcCBoYXMgbW9yZSB0aGFu
IHR3byBieXRlcworICogQHJldHVybiBhIDMyIGJpdCB2YWx1ZSBjb250YWluaW5nIHRoZSB2YWx1
ZSBvZiB0aGUgdmFyaWFibGUgdG9wIGluIHVwcGVyIDE2IGJpdHMuIAorICogICAgICAgICBMb3dl
ciAxNiBiaXRzIGFyZSB1bmRlZmluZWQKKyAqIEBzZWUgdWNvbF9nZXRWYXJpYWJsZVRvcAorICog
QHNlZSB1Y29sX3Jlc3RvcmVWYXJpYWJsZVRvcAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1Vf
U1RBQkxFIHVpbnQzMl90IFVfRVhQT1JUMiAKK3Vjb2xfc2V0VmFyaWFibGVUb3AoVUNvbGxhdG9y
ICpjb2xsLCAKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnZhclRvcCwgaW50MzJf
dCBsZW4sIAorICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKiog
CisgKiBHZXRzIHRoZSB2YXJpYWJsZSB0b3AgdmFsdWUgb2YgYSBDb2xsYXRvci4gCisgKiBMb3dl
ciAxNiBiaXRzIGFyZSB1bmRlZmluZWQgYW5kIHNob3VsZCBiZSBpZ25vcmVkLgorICogQHBhcmFt
IGNvbGwgY29sbGF0b3Igd2hpY2ggdmFyaWFibGUgdG9wIG5lZWRzIHRvIGJlIHJldHJpZXZlZAor
ICogQHBhcmFtIHN0YXR1cyBlcnJvciBjb2RlIChub3QgY2hhbmdlZCBieSBmdW5jdGlvbikuIElm
IGVycm9yIGNvZGUgaXMgc2V0LCAKKyAqICAgICAgICAgICAgICAgdGhlIHJldHVybiB2YWx1ZSBp
cyB1bmRlZmluZWQuCisgKiBAcmV0dXJuIHRoZSB2YXJpYWJsZSB0b3AgdmFsdWUgb2YgYSBDb2xs
YXRvci4KKyAqIEBzZWUgdWNvbF9zZXRWYXJpYWJsZVRvcAorICogQHNlZSB1Y29sX3Jlc3RvcmVW
YXJpYWJsZVRvcAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHVpbnQzMl90IFVf
RVhQT1JUMiB1Y29sX2dldFZhcmlhYmxlVG9wKGNvbnN0IFVDb2xsYXRvciAqY29sbCwgVUVycm9y
Q29kZSAqc3RhdHVzKTsKKworLyoqIAorICogU2V0cyB0aGUgdmFyaWFibGUgdG9wIHRvIGEgY29s
bGF0aW9uIGVsZW1lbnQgdmFsdWUgc3VwcGxpZWQuIFZhcmlhYmxlIHRvcCBpcyAKKyAqIHNldCB0
byB0aGUgdXBwZXIgMTYgYml0cy4gCisgKiBMb3dlciAxNiBiaXRzIGFyZSBpZ25vcmVkLgorICog
QHBhcmFtIGNvbGwgY29sbGF0b3Igd2hpY2ggdmFyaWFibGUgdG9wIG5lZWRzIHRvIGJlIGNoYW5n
ZWQKKyAqIEBwYXJhbSB2YXJUb3AgQ0UgdmFsdWUsIGFzIHJldHVybmVkIGJ5IHVjb2xfc2V0VmFy
aWFibGVUb3Agb3IgdWNvbClnZXRWYXJpYWJsZVRvcAorICogQHBhcmFtIHN0YXR1cyBlcnJvciBj
b2RlIChub3QgY2hhbmdlZCBieSBmdW5jdGlvbikKKyAqIEBzZWUgdWNvbF9nZXRWYXJpYWJsZVRv
cAorICogQHNlZSB1Y29sX3NldFZhcmlhYmxlVG9wCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwor
VV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1Y29sX3Jlc3RvcmVWYXJpYWJsZVRvcChVQ29sbGF0
b3IgKmNvbGwsIGNvbnN0IHVpbnQzMl90IHZhclRvcCwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKwor
LyoqCisgKiBUaHJlYWQgc2FmZSBjbG9uaW5nIG9wZXJhdGlvbi4gVGhlIHJlc3VsdCBpcyBhIGNs
b25lIG9mIGEgZ2l2ZW4gY29sbGF0b3IuCisgKiBAcGFyYW0gY29sbCBjb2xsYXRvciB0byBiZSBj
bG9uZWQKKyAqIEBwYXJhbSBzdGFja0J1ZmZlciB1c2VyIGFsbG9jYXRlZCBzcGFjZSBmb3IgdGhl
IG5ldyBjbG9uZS4gCisgKiBJZiBOVUxMIG5ldyBtZW1vcnkgd2lsbCBiZSBhbGxvY2F0ZWQuIAor
ICogIElmIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoLCBuZXcgbWVtb3J5IHdpbGwgYmUgYWxs
b2NhdGVkLgorICogIENsaWVudHMgY2FuIHVzZSB0aGUgVV9DT0xfU0FGRUNMT05FX0JVRkZFUlNJ
WkUuIAorICogIFRoaXMgd2lsbCBwcm9iYWJseSBiZSBlbm91Z2ggdG8gYXZvaWQgbWVtb3J5IGFs
bG9jYXRpb25zLgorICogQHBhcmFtIHBCdWZmZXJTaXplIHBvaW50ZXIgdG8gc2l6ZSBvZiBhbGxv
Y2F0ZWQgc3BhY2UuIAorICogIElmICpwQnVmZmVyU2l6ZSA9PSAwLCBhIHN1ZmZpY2llbnQgc2l6
ZSBmb3IgdXNlIGluIGNsb25pbmcgd2lsbCAKKyAqICBiZSByZXR1cm5lZCAoJ3ByZS1mbGlnaHRp
bmcnKQorICogIElmICpwQnVmZmVyU2l6ZSBpcyBub3QgZW5vdWdoIGZvciBhIHN0YWNrLWJhc2Vk
IHNhZmUgY2xvbmUsIAorICogIG5ldyBtZW1vcnkgd2lsbCBiZSBhbGxvY2F0ZWQuCisgKiBAcGFy
YW0gc3RhdHVzIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIG9wZXJhdGlvbiB3ZW50IG9uIHNtb290
aGx5IG9yIHRoZXJlIHdlcmUgZXJyb3JzCisgKiAgICBBbiBpbmZvcm1hdGlvbmFsIHN0YXR1cyB2
YWx1ZSwgVV9TQUZFQ0xPTkVfQUxMT0NBVEVEX0VSUk9SLCBpcyB1c2VkIGlmIGFueQorICogYWxs
b2NhdGlvbnMgd2VyZSBuZWNlc3NhcnkuCisgKiBAcmV0dXJuIHBvaW50ZXIgdG8gdGhlIG5ldyBj
bG9uZQorICogQHNlZSB1Y29sX29wZW4KKyAqIEBzZWUgdWNvbF9vcGVuUnVsZXMKKyAqIEBzZWUg
dWNvbF9jbG9zZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVDb2xsYXRvciog
VV9FWFBPUlQyIAordWNvbF9zYWZlQ2xvbmUoY29uc3QgVUNvbGxhdG9yICpjb2xsLAorICAgICAg
ICAgICAgICAgdm9pZCAgICAgICAgICAgICpzdGFja0J1ZmZlciwKKyAgICAgICAgICAgICAgIGlu
dDMyX3QgICAgICAgICAqcEJ1ZmZlclNpemUsCisgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAg
ICAgKnN0YXR1cyk7CisKKy8qKiBkZWZhdWx0IG1lbW9yeSBzaXplIGZvciB0aGUgbmV3IGNsb25l
LiBJdCBuZWVkcyB0byBiZSB0aGlzIGxhcmdlIGZvciBvcy80MDAgbGFyZ2UgcG9pbnRlcnMgCisg
KiBAc3RhYmxlIElDVSAyLjAKKyAqLworI2RlZmluZSBVX0NPTF9TQUZFQ0xPTkVfQlVGRkVSU0la
RSA1MTIKKworLyoqCisgKiBSZXR1cm5zIGN1cnJlbnQgcnVsZXMuIERlbHRhIGRlZmluZXMgd2hl
dGhlciBmdWxsIHJ1bGVzIGFyZSByZXR1cm5lZCBvciBqdXN0IHRoZSB0YWlsb3JpbmcuIAorICog
UmV0dXJucyBudW1iZXIgb2YgVUNoYXJzIG5lZWRlZCB0byBzdG9yZSBydWxlcy4gSWYgYnVmZmVy
IGlzIE5VTEwgb3IgYnVmZmVyTGVuIGlzIG5vdCBlbm91Z2ggCisgKiB0byBzdG9yZSBydWxlcywg
d2lsbCBzdG9yZSB1cCB0byBhdmFpbGFibGUgc3BhY2UuCisgKiBAcGFyYW0gY29sbCBjb2xsYXRv
ciB0byBnZXQgdGhlIHJ1bGVzIGZyb20KKyAqIEBwYXJhbSBkZWx0YSBvbmUgb2YgVUNPTF9UQUlM
T1JJTkdfT05MWSwgVUNPTF9GVUxMX1JVTEVTLiAKKyAqIEBwYXJhbSBidWZmZXIgYnVmZmVyIHRv
IHN0b3JlIHRoZSByZXN1bHQgaW4uIElmIE5VTEwsIHlvdSdsbCBnZXQgbm8gcnVsZXMuCisgKiBA
cGFyYW0gYnVmZmVyTGVuIGxlbmdodCBvZiBidWZmZXIgdG8gc3RvcmUgcnVsZXMgaW4uIElmIGxl
c3MgdGhlbiBuZWVkZWQgeW91J2xsIGdldCBvbmx5IHRoZSBwYXJ0IHRoYXQgZml0cyBpbi4KKyAq
IEByZXR1cm4gY3VycmVudCBydWxlcworICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IGludDMyX3QgVV9FWFBPUlQyIAordWNvbF9nZXRSdWxlc0V4KGNvbnN0IFVDb2xsYXRvciAqY29s
bCwgVUNvbFJ1bGVPcHRpb24gZGVsdGEsIFVDaGFyICpidWZmZXIsIGludDMyX3QgYnVmZmVyTGVu
KTsKKworLyoqCisgKiBnZXRzIHRoZSBsb2NhbGUgbmFtZSBvZiB0aGUgY29sbGF0b3IuIElmIHRo
ZSBjb2xsYXRvcgorICogaXMgaW5zdGFudGlhdGVkIGZyb20gdGhlIHJ1bGVzLCB0aGVuIHRoaXMg
ZnVuY3Rpb24gcmV0dXJucworICogTlVMTC4KKyAqIEBwYXJhbSBjb2xsIFRoZSBVQ29sbGF0b3Ig
Zm9yIHdoaWNoIHRoZSBsb2NhbGUgaXMgbmVlZGVkCisgKiBAcGFyYW0gdHlwZSBZb3UgY2FuIGNo
b29zZSBiZXR3ZWVuIHJlcXVlc3RlZCwgdmFsaWQgYW5kIGFjdHVhbAorICogICAgICAgICAgICAg
bG9jYWxlLiBGb3IgZGVzY3JpcHRpb24gc2VlIHRoZSBkZWZpbml0aW9uIG9mCisgKiAgICAgICAg
ICAgICBVTG9jRGF0YUxvY2FsZVR5cGUgaW4gdWxvYy5oCisgKiBAcGFyYW0gc3RhdHVzIGVycm9y
IGNvZGUgb2YgdGhlIG9wZXJhdGlvbgorICogQHJldHVybiByZWFsIGxvY2FsZSBuYW1lIGZyb20g
d2hpY2ggdGhlIGNvbGxhdGlvbiBkYXRhIGNvbWVzLiAKKyAqICAgICAgICAgSWYgdGhlIGNvbGxh
dG9yIHdhcyBpbnN0YW50aWF0ZWQgZnJvbSBydWxlcywgcmV0dXJucworICogICAgICAgICBOVUxM
LgorICogQGRlcHJlY2F0ZWQgSUNVIDIuOCBVc2UgdWNvbF9nZXRMb2NhbGVCeVR5cGUgaW5zdGVh
ZAorICovCitVX0RFUFJFQ0FURUQgY29uc3QgY2hhciAqIFVfRVhQT1JUMgordWNvbF9nZXRMb2Nh
bGUoY29uc3QgVUNvbGxhdG9yICpjb2xsLCBVTG9jRGF0YUxvY2FsZVR5cGUgdHlwZSwgVUVycm9y
Q29kZSAqc3RhdHVzKTsKKworCisvKioKKyAqIGdldHMgdGhlIGxvY2FsZSBuYW1lIG9mIHRoZSBj
b2xsYXRvci4gSWYgdGhlIGNvbGxhdG9yCisgKiBpcyBpbnN0YW50aWF0ZWQgZnJvbSB0aGUgcnVs
ZXMsIHRoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgKiBOVUxMLgorICogQHBhcmFtIGNvbGwg
VGhlIFVDb2xsYXRvciBmb3Igd2hpY2ggdGhlIGxvY2FsZSBpcyBuZWVkZWQKKyAqIEBwYXJhbSB0
eXBlIFlvdSBjYW4gY2hvb3NlIGJldHdlZW4gcmVxdWVzdGVkLCB2YWxpZCBhbmQgYWN0dWFsCisg
KiAgICAgICAgICAgICBsb2NhbGUuIEZvciBkZXNjcmlwdGlvbiBzZWUgdGhlIGRlZmluaXRpb24g
b2YKKyAqICAgICAgICAgICAgIFVMb2NEYXRhTG9jYWxlVHlwZSBpbiB1bG9jLmgKKyAqIEBwYXJh
bSBzdGF0dXMgZXJyb3IgY29kZSBvZiB0aGUgb3BlcmF0aW9uCisgKiBAcmV0dXJuIHJlYWwgbG9j
YWxlIG5hbWUgZnJvbSB3aGljaCB0aGUgY29sbGF0aW9uIGRhdGEgY29tZXMuIAorICogICAgICAg
ICBJZiB0aGUgY29sbGF0b3Igd2FzIGluc3RhbnRpYXRlZCBmcm9tIHJ1bGVzLCByZXR1cm5zCisg
KiAgICAgICAgIE5VTEwuCisgKiBAZHJhZnQgSUNVIDIuOCBsaWtlbHkgdG8gY2hhbmdlIGluIElD
VSAzLjAsIGJhc2VkIG9uIGZlZWRiYWNrCisgKi8KK1VfRFJBRlQgY29uc3QgY2hhciAqIFVfRVhQ
T1JUMgordWNvbF9nZXRMb2NhbGVCeVR5cGUoY29uc3QgVUNvbGxhdG9yICpjb2xsLCBVTG9jRGF0
YUxvY2FsZVR5cGUgdHlwZSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworLyoqCisgKiBHZXQgYW4g
VW5pY29kZSBzZXQgdGhhdCBjb250YWlucyBhbGwgdGhlIGNoYXJhY3RlcnMgYW5kIHNlcXVlbmNl
cyB0YWlsb3JlZCBpbiAKKyAqIHRoaXMgY29sbGF0b3IuIFRoZSByZXN1bHQgbXVzdCBiZSBkaXNw
b3NlZCBvZiBieSB1c2luZyB1c2V0X2Nsb3NlLgorICogQHBhcmFtIGNvbGwgICAgICAgIFRoZSBV
Q29sbGF0b3IgZm9yIHdoaWNoIHdlIHdhbnQgdG8gZ2V0IHRhaWxvcmVkIGNoYXJzCisgKiBAcGFy
YW0gc3RhdHVzICAgICAgZXJyb3IgY29kZSBvZiB0aGUgb3BlcmF0aW9uCisgKiBAcmV0dXJuIGEg
cG9pbnRlciB0byBuZXdseSBjcmVhdGVkIFVTZXQuIE11c3QgYmUgYmUgZGlzcG9zZWQgYnkgdXNp
bmcgdXNldF9jbG9zZQorICogQHNlZSB1Y29sX29wZW5SdWxlcworICogQHNlZSB1c2V0X2Nsb3Nl
CisgKiBAc3RhYmxlIElDVSAyLjQKKyAqLworVV9TVEFCTEUgVVNldCAqIFVfRVhQT1JUMgordWNv
bF9nZXRUYWlsb3JlZFNldChjb25zdCBVQ29sbGF0b3IgKmNvbGwsIFVFcnJvckNvZGUgKnN0YXR1
cyk7CisKKy8qKgorICogUmV0dXJuZWQgYnkgdWNvbF9jb2xsYXRvclRvSWRlbnRpZmllciB0byBz
aWduaWZ5IHRoYXQgY29sbGF0b3IgaXMKKyAqIG5vdCBlbmNvZGFibGUgYXMgYW4gaWRlbnRpZmll
ci4KKyAqIEBpbnRlcm5hbCBJQ1UgMy4wCisgKi8KKyNkZWZpbmUgVUNPTF9TSVRfQ09MTEFUT1Jf
Tk9UX0VOQ09EQUJMRSAweDgwMDAwMDAwCisKKy8qKgorICogR2V0IGEgMzEtYml0IGlkZW50aWZp
ZXIgZ2l2ZW4gYSBjb2xsYXRvci4gCisgKiBAcGFyYW0gY29sbCBVQ29sbGF0b3IKKyAqICBAcGFy
YW0gbG9jYWxlIGEgbG9jYWxlIHRoYXQgd2lsbCBhcHBlYXIgYXMgYSBjb2xsYXRvcnMgbG9jYWxl
IGluIHRoZSByZXN1bHRpbmcKKyAqICAgICAgICAgICAgICAgIHNob3J0IHN0cmluZyBkZWZpbml0
aW9uLiBJZiBOVUxMLCB0aGUgbG9jYWxlIHdpbGwgYmUgaGFydmVzdGVkIAorICogICAgICAgICAg
ICAgICAgZnJvbSB0aGUgY29sbGF0b3IuCisgKiBAcGFyYW0gc3RhdHVzIGhvbGRzIGVycm9yIG1l
c3NhZ2VzCisgKiBAcmV0dXJuIDMxLWJpdCBpZGVudGlmaWVyLiBNU0IgaXMgdXNlZCBpZiB0aGUg
Y29sbGF0b3IgY2Fubm90IGJlIGVuY29kZWQuIEluIHRoYXQKKyAqICAgICAgICAgY2FzZSBVQ09M
X1NJVF9DT0xMQVRPUl9OT1RfRU5DT0RBQkxFIGlzIHJldHVybmVkCisgKiBAc2VlIHVjb2xfb3Bl
bkZyb21JZGVudGlmaWVyCisgKiBAc2VlIHVjb2xfaWRlbnRpZmllclRvU2hvcnRTdHJpbmcKKyAq
IEBpbnRlcm5hbCBJQ1UgMy4wCisgKi8KK1VfSU5URVJOQUwgdWludDMyX3QgVV9FWFBPUlQyCit1
Y29sX2NvbGxhdG9yVG9JZGVudGlmaWVyKGNvbnN0IFVDb2xsYXRvciAqY29sbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbG9jYWxlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKioKKyAqIE9wZW4gYSBjb2xsYXRvciBn
aXZlbiBhIDMxLWJpdCBpZGVudGlmaWVyCisgKiBAcGFyYW0gaWRlbnRpZmllciAzMS1iaXQgaWRl
bnRpZmllciwgZW5jb2RlZCBieSBjYWxsaW5nIHVjb2xfY29sbGF0b3JUb0lkZW50aWZpZXIKKyAq
IEBwYXJhbSBmb3JjZURlZmF1bHRzIGlmIEZBTFNFLCB0aGUgc2V0dGluZ3MgdGhhdCBhcmUgdGhl
IHNhbWUgYXMgdGhlIGNvbGxhdG9yIAorICogICAgICAgICAgICAgICAgICAgZGVmYXVsdCBzZXR0
aW5ncyB3aWxsIG5vdCBiZSBhcHBsaWVkIChmb3IgZXhhbXBsZSwgc2V0dGluZworICogICAgICAg
ICAgICAgICAgICAgRnJlbmNoIHNlY29uZGFyeSBvbiBhIEZyZW5jaCBjb2xsYXRvciB3b3VsZCBu
b3QgYmUgZXhlY3V0ZWQpLiAKKyAqICAgICAgICAgICAgICAgICAgIElmIFRSVUUsIGFsbCB0aGUg
c2V0dGluZ3Mgd2lsbCBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgdGhlIAorICogICAgICAgICAg
ICAgICAgICAgY29sbGF0b3IgZGVmYXVsdCB2YWx1ZS4gSWYgdGhlIGRlZmluaXRpb24KKyAqICAg
ICAgICAgICAgICAgICAgIHN0cmluZ3MgdGhhdCBjYW4gYmUgcHJvZHVjZWQgZnJvbSBhIGNvbGxh
dG9yIGluc3RhbnRpYXRlZCBieSAKKyAqICAgICAgICAgICAgICAgICAgIGNhbGxpbmcgdGhpcyBB
UEkgYXJlIHRvIGJlIGNhY2hlZCwgc2hvdWxkIGJlIHNldCB0byBGQUxTRS4KKyAqIEBwYXJhbSBz
dGF0dXMgZm9yIHJldHVybmluZyBlcnJvcnMKKyAqIEByZXR1cm4gVUNvbGxhdG9yIG9iamVjdAor
ICogQHNlZSB1Y29sX2NvbGxhdG9yVG9JZGVudGlmaWVyCisgKiBAc2VlIHVjb2xfaWRlbnRpZmll
clRvU2hvcnRTdHJpbmcKKyAqIEBpbnRlcm5hbCBJQ1UgMy4wCisgKi8KK1VfSU5URVJOQUwgVUNv
bGxhdG9yKiBVX0VYUE9SVDIKK3Vjb2xfb3BlbkZyb21JZGVudGlmaWVyKHVpbnQzMl90IGlkZW50
aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCBmb3JjZURlZmF1bHRzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisvKioKKyAqIENh
bGN1bGF0ZSB0aGUgc2hvcnQgZGVmaW5pdGlvbiBzdHJpbmcgZ2l2ZW4gYW4gaWRlbnRpZmllci4g
U3VwcG9ydHMgcHJlZmxpZ2h0aW5nLgorICogQHBhcmFtIGlkZW50aWZpZXIgMzEtYml0IGlkZW50
aWZpZXIsIGVuY29kZWQgYnkgY2FsbGluZyB1Y29sX2NvbGxhdG9yVG9JZGVudGlmaWVyCisgKiBA
cGFyYW0gYnVmZmVyIGJ1ZmZlciB0byBzdG9yZSB0aGUgcmVzdWx0CisgKiBAcGFyYW0gY2FwYWNp
dHkgYnVmZmVyIGNhcGFjaXR5CisgKiBAcGFyYW0gZm9yY2VEZWZhdWx0cyB3aGV0aGVyIHRoZSBz
ZXR0aW5ncyB0aGF0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZGVmYXVsdCBzZXR0aW5nCisgKiAgICAg
ICAgICAgICAgICAgICAgICBzaG91bGQgYmUgZm9yY2VkIGFueXdheS4gU2V0dGluZyB0aGlzIGFy
Z3VtZW50IHRvIEZBTFNFIHJlZHVjZXMKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBudW1i
ZXIgb2YgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLCBidXQgZGVjcmVhc2VzIHBlcmZvcm1hY2UK
KyAqICAgICAgICAgICAgICAgICAgICAgIGFzIGEgY29sbGF0b3IgaGFzIHRvIGJlIGluc3RhbnRp
YXRlZC4KKyAqIEBwYXJhbSBzdGF0dXMgZm9yIHJldHVybmluZyBlcnJvcnMKKyAqIEByZXR1cm4g
bGVuZ3RoIG9mIHRoZSBzaG9ydCBkZWZpbml0aW9uIHN0cmluZworICogQHNlZSB1Y29sX2NvbGxh
dG9yVG9JZGVudGlmaWVyCisgKiBAc2VlIHVjb2xfb3BlbkZyb21JZGVudGlmaWVyCisgKiBAc2Vl
IHVjb2xfc2hvcnRTdHJpbmdUb0lkZW50aWZpZXIKKyAqIEBpbnRlcm5hbCBJQ1UgMy4wCisgKi8K
K1VfSU5URVJOQUwgaW50MzJfdCBVX0VYUE9SVDIKK3Vjb2xfaWRlbnRpZmllclRvU2hvcnRTdHJp
bmcodWludDMyX3QgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGNhcGFjaXR5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCBmb3JjZURlZmF1bHRzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKioKKyAq
IENhbGN1bGF0ZSB0aGUgaWRlbnRpZmllciBnaXZlbiBhIHNob3J0IGRlZmluaXRpb24gc3RyaW5n
LiBTdXBwb3J0cyBwcmVmbGlnaHRpbmcuCisgKiBAcGFyYW0gZGVmaW5pdGlvbiBzaG9ydCBzdHJp
bmcgZGVmaW5pdGlvbgorICogQHBhcmFtIGZvcmNlRGVmYXVsdHMgd2hldGhlciB0aGUgc2V0dGlu
Z3MgdGhhdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGRlZmF1bHQgc2V0dGluZworICogICAgICAgICAg
ICAgICAgICAgICAgc2hvdWxkIGJlIGZvcmNlZCBhbnl3YXkuIFNldHRpbmcgdGhpcyBhcmd1bWVu
dCB0byBGQUxTRSByZWR1Y2VzCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgbnVtYmVyIG9m
IGRpZmZlcmVudCBjb25maWd1cmF0aW9ucywgYnV0IGRlY3JlYXNlcyBwZXJmb3JtYWNlCisgKiAg
ICAgICAgICAgICAgICAgICAgICBhcyBhIGNvbGxhdG9yIGhhcyB0byBiZSBpbnN0YW50aWF0ZWQu
CisgKiBAcGFyYW0gc3RhdHVzIGZvciByZXR1cm5pbmcgZXJyb3JzCisgKiBAcmV0dXJuIGlkZW50
aWZpZXIKKyAqIEBzZWUgdWNvbF9jb2xsYXRvclRvSWRlbnRpZmllcgorICogQHNlZSB1Y29sX29w
ZW5Gcm9tSWRlbnRpZmllcgorICogQHNlZSB1Y29sX2lkZW50aWZpZXJUb1Nob3J0U3RyaW5nCisg
KiBAaW50ZXJuYWwgSUNVIDMuMAorICovCitVX0lOVEVSTkFMIHVpbnQzMl90IFVfRVhQT1JUMgor
dWNvbF9zaG9ydFN0cmluZ1RvSWRlbnRpZmllcihjb25zdCBjaGFyICpkZWZpbml0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCBmb3JjZURlZmF1bHRzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKworLyoqCisgKiBV
bml2ZXJzYWwgYXR0cmlidXRlIGdldHRlciB0aGF0IHJldHVybnMgVUNPTF9ERUZBVUxUIGlmIHRo
ZSB2YWx1ZSBpcyBkZWZhdWx0CisgKiBAcGFyYW0gY29sbCBjb2xsYXRvciB3aGljaCBhdHRyaWJ1
dGVzIGFyZSB0byBiZSBjaGFuZ2VkCisgKiBAcGFyYW0gYXR0ciBhdHRyaWJ1dGUgdHlwZQorICog
QHJldHVybiBhdHRyaWJ1dGUgdmFsdWUgb3IgVUNPTF9ERUZBVUxUIGlmIHRoZSB2YWx1ZSBpcyBk
ZWZhdWx0CisgKiBAcGFyYW0gc3RhdHVzIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIG9wZXJhdGlv
biB3ZW50IG9uIHNtb290aGx5IG9yIHRoZXJlIHdlcmUgZXJyb3JzCisgKiBAc2VlIFVDb2xBdHRy
aWJ1dGUKKyAqIEBzZWUgVUNvbEF0dHJpYnV0ZVZhbHVlCisgKiBAc2VlIHVjb2xfc2V0QXR0cmli
dXRlCisgKiBAaW50ZXJuYWwgSUNVIDMuMAorICovCitVX0lOVEVSTkFMIFVDb2xBdHRyaWJ1dGVW
YWx1ZSAgVV9FWFBPUlQyCit1Y29sX2dldEF0dHJpYnV0ZU9yRGVmYXVsdChjb25zdCBVQ29sbGF0
b3IgKmNvbGwsIFVDb2xBdHRyaWJ1dGUgYXR0ciwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworLyoq
IENoZWNrIHdoZXRoZXIgdHdvIGNvbGxhdG9ycyBhcmUgZXF1YWwuIENvbGxhdG9ycyBhcmUgY29u
c2lkZXJlZCBlcXVhbCBpZiB0aGV5CisgKiAgd2lsbCBzb3J0IHN0cmluZ3MgdGhlIHNhbWUuIFRo
aXMgbWVhbnMgdGhhdCBib3RoIHRoZSBjdXJyZW50IGF0dHJpYnV0ZXMgYW5kIHRoZQorICogIHJ1
bGVzIG11c3QgYmUgZXF1aXZhbGVudC4gQ3VycmVudGx5IHVzZWQgZm9yIFJ1bGVCYXNlZENvbGxh
dG9yOjpvcGVyYXRvcj09LgorICogIEBwYXJhbSBzb3VyY2UgZmlyc3QgY29sbGF0b3IKKyAqICBA
cGFyYW0gdGFyZ2V0IHNlY29uZCBjb2xsYXRvcgorICogIEByZXR1cm4gVFJVRSBvciBGQUxTRQor
ICogIEBpbnRlcm5hbCBJQ1UgMy4wCisgKi8KK1VfSU5URVJOQUwgVUJvb2wgVV9FWFBPUlQyCit1
Y29sX2VxdWFscyhjb25zdCBVQ29sbGF0b3IgKnNvdXJjZSwgY29uc3QgVUNvbGxhdG9yICp0YXJn
ZXQpOworCisvKiogQ2FsY3VsYXRlcyB0aGUgc2V0IG9mIHVuc2FmZSBjb2RlIHBvaW50cywgZ2l2
ZW4gYSBjb2xsYXRvci4KKyAqICAgQSBjaGFyYWN0ZXIgaXMgdW5zYWZlIGlmIHlvdSBjb3VsZCBh
cHBlbmQgYW55IGNoYXJhY3RlciBhbmQgY2F1c2UgdGhlIG9yZGVyaW5nIHRvIGFsdGVyIHNpZ25p
ZmljYW50bHkuCisgKiAgIENvbGxhdGlvbiBzb3J0cyBpbiBub3JtYWxpemVkIG9yZGVyLCBzbyBh
bnl0aGluZyB0aGF0IHJlYXJyYW5nZXMgaW4gbm9ybWFsaXphdGlvbiBjYW4gY2F1c2UgdGhpcy4K
KyAqICAgVGh1cyBpZiB5b3UgaGF2ZSBhIGNoYXJhY3RlciBsaWtlIGFfdW1sYXV0LCBhbmQgeW91
IGFkZCBhIGxvd2VyX2RvdCB0byBpdCwKKyAqICAgdGhlbiBpdCBub3JtYWxpemVzIHRvIGFfbG93
ZXJfZG90ICsgdW1sYXV0LCBhbmQgc29ydHMgZGlmZmVyZW50bHkuCisgKiAgQHBhcmFtIGNvbGwg
Q29sbGF0b3IKKyAqICBAcGFyYW0gdW5zYWZlIGEgZmlsbC1pbiBzZXQgdG8gcmVjZWl2ZSB0aGUg
dW5zYWZlIHBvaW50cworICogIEBwYXJhbSBzdGF0dXMgZm9yIGNhdGNoaW5nIGVycm9ycworICog
IEByZXR1cm4gbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzZXQKKyAqICBAaW50ZXJuYWwgSUNV
IDMuMAorICovCitVX0lOVEVSTkFMIGludDMyX3QgVV9FWFBPUlQyCit1Y29sX2dldFVuc2FmZVNl
dCggY29uc3QgVUNvbGxhdG9yICpjb2xsLAorICAgICAgICAgICAgICAgICAgVVNldCAqdW5zYWZl
LAorICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworLyoqIFJlc2V0IFVD
QSdzIHN0YXRpYyBwb2ludGVycy4gWW91IGRvbid0IHdhbnQgdG8gdXNlIHRoaXMsIHVubGVzcyB5
b3VyIHN0YXRpYyBtZW1vcnkgY2FuIGdvIGF3YXkuCisgKiBAaW50ZXJuYWwgSUNVIDMuMi4xCisg
Ki8KK1VfSU5URVJOQUwgdm9pZCBVX0VYUE9SVDIKK3Vjb2xfZm9yZ2V0VUNBKHZvaWQpOworCisv
KiogVG91Y2hlcyBhbGwgcmVzb3VyY2VzIG5lZWRlZCBmb3IgaW5zdGFudGlhdGluZyBhIGNvbGxh
dG9yIGZyb20gYSBzaG9ydCBzdHJpbmcgZGVmaW5pdGlvbiwKKyAqICB0aHVzIGZpbGxpbmcgdXAg
dGhlIGNhY2hlLgorICogQHBhcmFtIGRlZmluaXRpb24gQSBzaG9ydCBzdHJpbmcgY29udGFpbmlu
ZyBhIGxvY2FsZSBhbmQgYSBzZXQgb2YgYXR0cmlidXRlcy4gCisgKiAgICAgICAgICAgICAgICAg
ICBBdHRyaWJ1dGVzIG5vdCBleHBsaWNpdGx5IG1lbnRpb25lZCBhcmUgbGVmdCBhdCB0aGUgZGVm
YXVsdAorICogICAgICAgICAgICAgICAgICAgc3RhdGUgZm9yIGEgbG9jYWxlLgorICogQHBhcmFt
IHBhcnNlRXJyb3IgaWYgbm90IE5VTEwsIHN0cnVjdHVyZSB0aGF0IHdpbGwgZ2V0IGZpbGxlZCB3
aXRoIGVycm9yJ3MgcHJlCisgKiAgICAgICAgICAgICAgICAgICBhbmQgcG9zdCBjb250ZXh0IGlu
IGNhc2Ugb2YgZXJyb3IuCisgKiBAcGFyYW0gZm9yY2VEZWZhdWx0cyBpZiBGQUxTRSwgdGhlIHNl
dHRpbmdzIHRoYXQgYXJlIHRoZSBzYW1lIGFzIHRoZSBjb2xsYXRvciAKKyAqICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQgc2V0dGluZ3Mgd2lsbCBub3QgYmUgYXBwbGllZCAoZm9yIGV4YW1wbGUs
IHNldHRpbmcKKyAqICAgICAgICAgICAgICAgICAgIEZyZW5jaCBzZWNvbmRhcnkgb24gYSBGcmVu
Y2ggY29sbGF0b3Igd291bGQgbm90IGJlIGV4ZWN1dGVkKS4gCisgKiAgICAgICAgICAgICAgICAg
ICBJZiBUUlVFLCBhbGwgdGhlIHNldHRpbmdzIHdpbGwgYmUgYXBwbGllZCByZWdhcmRsZXNzIG9m
IHRoZSAKKyAqICAgICAgICAgICAgICAgICAgIGNvbGxhdG9yIGRlZmF1bHQgdmFsdWUuIElmIHRo
ZSBkZWZpbml0aW9uCisgKiAgICAgICAgICAgICAgICAgICBzdHJpbmdzIGFyZSB0byBiZSBjYWNo
ZWQsIHNob3VsZCBiZSBzZXQgdG8gRkFMU0UuCisgKiBAcGFyYW0gc3RhdHVzICAgICBFcnJvciBj
b2RlLiBBcGFydCBmcm9tIHJlZ3VsYXIgZXJyb3IgY29uZGl0aW9ucyBjb25uZWN0ZWQgdG8gCisg
KiAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0aW5nIGNvbGxhdG9ycyAobGlrZSBvdXQgb2Yg
bWVtb3J5IG9yIHNpbWlsYXIpLCB0aGlzCisgKiAgICAgICAgICAgICAgICAgICBBUEkgd2lsbCBy
ZXR1cm4gYW4gZXJyb3IgaWYgYW4gaW52YWxpZCBhdHRyaWJ1dGUgb3IgYXR0cmlidXRlL3ZhbHVl
CisgKiAgICAgICAgICAgICAgICAgICBjb21iaW5hdGlvbiBpcyBzcGVjaWZpZWQuCisgKiBAc2Vl
IHVjb2xfb3BlbkZyb21TaG9ydFN0cmluZworICogQGludGVybmFsIElDVSAzLjIuMQorICovCitV
X0lOVEVSTkFMIHZvaWQgVV9FWFBPUlQyCit1Y29sX3ByZXBhcmVTaG9ydFN0cmluZ09wZW4oIGNv
bnN0IGNoYXIgKmRlZmluaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVCb29sIGZv
cmNlRGVmYXVsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVQYXJzZUVycm9yICpwYXJz
ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOwor
CisvKiogQ3JlYXRlcyBhIGJpbmFyeSBpbWFnZSBvZiBhIGNvbGxhdG9yLiBUaGlzIGJpbmFyeSBp
bWFnZSBjYW4gYmUgc3RvcmVkIGFuZCAKKyAqICBsYXRlciB1c2VkIHRvIGluc3RhbnRpYXRlIGEg
Y29sbGF0b3IgdXNpbmcgdWNvbF9vcGVuQmluYXJ5LgorICogIFRoaXMgQVBJIHN1cHBvcnRzIHBy
ZWZsaWdodGluZy4KKyAqICBAcGFyYW0gY29sbCBDb2xsYXRvcgorICogIEBwYXJhbSBidWZmZXIg
YSBmaWxsLWluIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBiaW5hcnkgaW1hZ2UKKyAqICBAcGFyYW0g
Y2FwYWNpdHkgY2FwYWNpdHkgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICogIEBwYXJhbSBz
dGF0dXMgZm9yIGNhdGNoaW5nIGVycm9ycworICogIEByZXR1cm4gc2l6ZSBvZiB0aGUgaW1hZ2UK
KyAqICBAc2VlIHVjb2xfb3BlbkJpbmFyeQorICogIEBkcmFmdCBJQ1UgMy4yCisgKi8KK1VfRFJB
RlQgaW50MzJfdCBVX0VYUE9SVDIKK3Vjb2xfY2xvbmVCaW5hcnkoY29uc3QgVUNvbGxhdG9yICpj
b2xsLAorICAgICAgICAgICAgICAgICB1aW50OF90ICpidWZmZXIsIGludDMyX3QgY2FwYWNpdHks
CisgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKiBPcGVucyBhIGNv
bGxhdG9yIGZyb20gYSBjb2xsYXRvciBiaW5hcnkgaW1hZ2UgY3JlYXRlZCB1c2luZworICogIHVj
b2xfY2xvbmVCaW5hcnkuIEJpbmFyeSBpbWFnZSB1c2VkIGluIGluc3RhbnRpYXRpb24gb2YgdGhl
IAorICogIGNvbGxhdG9yIHJlbWFpbnMgb3duZWQgYnkgdGhlIHVzZXIgYW5kIHNob3VsZCBzdGF5
IGFyb3VuZCBmb3IgCisgKiAgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb2xsYXRvci4gVGhlIEFQSSBh
bHNvIHRha2VzIGEgYmFzZSBjb2xsYXRvcgorICogIHdoaWNoIHVzdWFseSBzaG91bGQgYmUgVUNB
LgorICogIEBwYXJhbSBiaW4gYmluYXJ5IGltYWdlIG93bmVkIGJ5IHRoZSB1c2VyIGFuZCByZXF1
aXJlZCB0aHJvdWdoIHRoZQorICogICAgICAgICAgICAgbGlmZXRpbWUgb2YgdGhlIGNvbGxhdG9y
CisgKiAgQHBhcmFtIGxlbmd0aCBzaXplIG9mIHRoZSBpbWFnZS4gSWYgbmVnYXRpdmUsIHRoZSBB
UEkgd2lsbCB0cnkgdG8KKyAqICAgICAgICAgICAgICAgIGZpZ3VyZSBvdXQgdGhlIGxlbmd0aCBv
ZiB0aGUgaW1hZ2UKKyAqICBAcGFyYW0gYmFzZSBmYWxsYmFjayBjb2xsYXRvciwgdXN1YWxseSBV
Q0EuIEJhc2UgaXMgcmVxdWlyZWQgdG8gYmUKKyAqICAgICAgICAgICAgICBwcmVzZW50IHRocm91
Z2ggdGhlIGxpZmV0aW1lIG9mIHRoZSBjb2xsYXRvci4gQ3VycmVudGx5IAorICogICAgICAgICAg
ICAgIGl0IGNhbm5vdCBiZSBOVUxMLgorICogIEBwYXJhbSBzdGF0dXMgZm9yIGNhdGNoaW5nIGVy
cm9ycworICogIEByZXR1cm4gbmV3bHkgY3JlYXRlZCBjb2xsYXRvcgorICogIEBzZWUgdWNvbF9j
bG9uZUJpbmFyeQorICogIEBkcmFmdCBJQ1UgMy4yCisgKi8KK1VfRFJBRlQgVUNvbGxhdG9yKiBV
X0VYUE9SVDIKK3Vjb2xfb3BlbkJpbmFyeShjb25zdCB1aW50OF90ICpiaW4sIGludDMyX3QgbGVu
Z3RoLCAKKyAgICAgICAgICAgICAgICBjb25zdCBVQ29sbGF0b3IgKmJhc2UsIAorICAgICAgICAg
ICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworI2VuZGlmIC8qICNpZiAhVUNPTkZJR19O
T19DT0xMQVRJT04gKi8KKworI2VuZGlmCisKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUv
aWN1L3VuaWNvZGUvdWNvbC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5h
dGl2ZQoKSW5kZXg6IFdlYkNvcmUvaWN1L3VuaWNvZGUvdXNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaWN1L3VuaWNvZGUvdXNldC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9pY3UvdW5p
Y29kZS91c2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQ1IEBACisvKgorKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA0LCBJbnRlcm5hdGlv
bmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgZmlsZSBuYW1l
OiAgdXNldC5oCisqICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyogICB0YWIgc2l6ZTogICA4IChu
b3QgdXNlZCkKKyogICBpbmRlbnRhdGlvbjo0CisqCisqICAgY3JlYXRlZCBvbjogMjAwMm1hcjA3
CisqICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyoKKyogICBDIHZlcnNpb24gb2Yg
VW5pY29kZVNldC4KKyovCisKKworLyoqCisgKiBcZmlsZQorICogXGJyaWVmIEMgQVBJOiBVbmlj
b2RlIFNldAorICoKKyAqIDxwPlRoaXMgaXMgYSBDIHdyYXBwZXIgYXJvdW5kIHRoZSBDKysgVW5p
Y29kZVNldCBjbGFzcy48L3A+CisgKi8KKworI2lmbmRlZiBfX1VTRVRfSF9fCisjZGVmaW5lIF9f
VVNFVF9IX18KKworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisjaW5jbHVkZSAidW5pY29k
ZS91Y2hhci5oIgorCisjaWZuZGVmIFVDTlZfSAorc3RydWN0IFVTZXQ7CisvKioKKyAqIEEgVW5p
Y29kZVNldC4gIFVzZSB0aGUgdXNldF8qIEFQSSB0byBtYW5pcHVsYXRlLiAgQ3JlYXRlIHdpdGgK
KyAqIHVzZXRfb3BlbiosIGFuZCBkZXN0cm95IHdpdGggdXNldF9jbG9zZS4KKyAqIEBzdGFibGUg
SUNVIDIuNAorICovCit0eXBlZGVmIHN0cnVjdCBVU2V0IFVTZXQ7CisjZW5kaWYKKworLyoqCisg
KiBCaXRtYXNrIHZhbHVlcyB0byBiZSBwYXNzZWQgdG8gdXNldF9vcGVuUGF0dGVybk9wdGlvbnMo
KSBvcgorICogdXNldF9hcHBseVBhdHRlcm4oKSB0YWtpbmcgYW4gb3B0aW9uIHBhcmFtZXRlci4K
KyAqIEBzdGFibGUgSUNVIDIuNAorICovCitlbnVtIHsKKyAgICAvKioKKyAgICAgKiBJZ25vcmUg
d2hpdGUgc3BhY2Ugd2l0aGluIHBhdHRlcm5zIHVubGVzcyBxdW90ZWQgb3IgZXNjYXBlZC4KKyAg
ICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBVU0VUX0lHTk9SRV9TUEFDRSA9IDEs
ICAKKworICAgIC8qKgorICAgICAqIEVuYWJsZSBjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nLiAg
RS5nLiwgIlthYl0iIHdpdGggdGhpcyBmbGFnCisgICAgICogd2lsbCBtYXRjaCAnYScsICdBJywg
J2InLCBhbmQgJ0InLiAgIlteYWJdIiB3aXRoIHRoaXMgZmxhZyB3aWxsCisgICAgICogbWF0Y2gg
YWxsIGV4Y2VwdCAnYScsICdBJywgJ2InLCBhbmQgJ0InLiBUaGlzIHBlcmZvcm1zIGEgZnVsbAor
ICAgICAqIGNsb3N1cmUgb3ZlciBjYXNlIG1hcHBpbmdzLCBlLmcuIFUrMDE3RiBmb3Igcy4KKyAg
ICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBVU0VUX0NBU0VfSU5TRU5TSVRJVkUg
PSAyLCAgCisKKyAgICAvKioKKyAgICAgKiBCaXRtYXNrIGZvciBVbmljb2RlU2V0OjpjbG9zZU92
ZXIoKSBpbmRpY2F0aW5nIGxldHRlciBjYXNlLgorICAgICAqIFRoaXMgbWF5IGJlIE9SZWQgdG9n
ZXRoZXIgd2l0aCBvdGhlciBzZWxlY3RvcnMuCisgICAgICogQGludGVybmFsCisgICAgICovCisg
ICAgVVNFVF9DQVNFID0gMiwKKworICAgIC8qKgorICAgICAqIEVuYWJsZSBjYXNlIGluc2Vuc2l0
aXZlIG1hdGNoaW5nLiAgRS5nLiwgIlthYl0iIHdpdGggdGhpcyBmbGFnCisgICAgICogd2lsbCBt
YXRjaCAnYScsICdBJywgJ2InLCBhbmQgJ0InLiAgIlteYWJdIiB3aXRoIHRoaXMgZmxhZyB3aWxs
CisgICAgICogbWF0Y2ggYWxsIGV4Y2VwdCAnYScsICdBJywgJ2InLCBhbmQgJ0InLiBUaGlzIGFk
ZHMgdGhlIGxvd2VyLSwKKyAgICAgKiB0aXRsZS0sIGFuZCB1cHBlcmNhc2UgbWFwcGluZ3MgYXMg
d2VsbCBhcyB0aGUgY2FzZSBmb2xkaW5nCisgICAgICogb2YgZWFjaCBleGlzdGluZyBlbGVtZW50
IGluIHRoZSBzZXQuCisgICAgICogQGRyYWZ0IElDVSAzLjIKKyAgICAgKi8KKyAgICBVU0VUX0FE
RF9DQVNFX01BUFBJTkdTID0gNCwKKworICAgIC8qKgorICAgICAqIEVub3VnaCBmb3IgYW55IHNp
bmdsZS1jb2RlIHBvaW50IHNldAorICAgICAqIEBpbnRlcm5hbAorICAgICAqLworICAgIFVTRVRf
U0VSSUFMSVpFRF9TVEFUSUNfQVJSQVlfQ0FQQUNJVFk9OAorfTsKKworLyoqCisgKiBBIHNlcmlh
bGl6ZWQgZm9ybSBvZiBhIFVuaWNvZGUgc2V0LiAgTGltaXRlZCBtYW5pcHVsYXRpb25zIGFyZQor
ICogcG9zc2libGUgZGlyZWN0bHkgb24gYSBzZXJpYWxpemVkIHNldC4gIFNlZSBiZWxvdy4KKyAq
IEBzdGFibGUgSUNVIDIuNAorICovCit0eXBlZGVmIHN0cnVjdCBVU2VyaWFsaXplZFNldCB7Cisg
ICAgLyoqCisgICAgICogVGhlIHNlcmlhbGl6ZWQgVW5pY29kZSBTZXQuCisgICAgICogQHN0YWJs
ZSBJQ1UgMi40CisgICAgICovCisgICAgY29uc3QgdWludDE2X3QgKmFycmF5OworICAgIC8qKgor
ICAgICAqIFRoZSBsZW5ndGggb2YgdGhlIGFycmF5IHRoYXQgY29udGFpbnMgQk1QIGNoYXJhY3Rl
cnMuCisgICAgICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgaW50MzJfdCBibXBMZW5n
dGg7CisgICAgLyoqCisgICAgICogVGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgYXJyYXkuCisgICAg
ICogQHN0YWJsZSBJQ1UgMi40CisgICAgICovCisgICAgaW50MzJfdCBsZW5ndGg7CisgICAgLyoq
CisgICAgICogQSBzbWFsbCBidWZmZXIgZm9yIHRoZSBhcnJheSB0byByZWR1Y2UgbWVtb3J5IGFs
bG9jYXRpb25zLgorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAgIHVpbnQxNl90
IHN0YXRpY0FycmF5W1VTRVRfU0VSSUFMSVpFRF9TVEFUSUNfQVJSQVlfQ0FQQUNJVFldOworfSBV
U2VyaWFsaXplZFNldDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVVNldCBBUEkKKyAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisKKy8qKgorICogQ3JlYXRlcyBhIFVTZXQgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHJh
bmdlIG9mIGNoYXJhY3RlcnMKKyAqIHN0YXJ0Li5lbmQsIGluY2x1c2l2ZS4KKyAqIEBwYXJhbSBz
dGFydCBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHJhbmdlLCBpbmNsdXNpdmUKKyAqIEBwYXJhbSBl
bmQgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIHJhbmdlLCBpbmNsdXNpdmUKKyAqIEByZXR1cm4gYSBu
ZXdseSBjcmVhdGVkIFVTZXQuICBUaGUgY2FsbGVyIG11c3QgY2FsbCB1c2V0X2Nsb3NlKCkgb24K
KyAqIGl0IHdoZW4gZG9uZS4KKyAqIEBzdGFibGUgSUNVIDIuNAorICovCitVX1NUQUJMRSBVU2V0
KiBVX0VYUE9SVDIKK3VzZXRfb3BlbihVQ2hhcjMyIHN0YXJ0LCBVQ2hhcjMyIGVuZCk7CisKKy8q
KgorICogQ3JlYXRlcyBhIHNldCBmcm9tIHRoZSBnaXZlbiBwYXR0ZXJuLiAgU2VlIHRoZSBVbmlj
b2RlU2V0IGNsYXNzCisgKiBkZXNjcmlwdGlvbiBmb3IgdGhlIHN5bnRheCBvZiB0aGUgcGF0dGVy
biBsYW5ndWFnZS4KKyAqIEBwYXJhbSBwYXR0ZXJuIGEgc3RyaW5nIHNwZWNpZnlpbmcgd2hhdCBj
aGFyYWN0ZXJzIGFyZSBpbiB0aGUgc2V0CisgKiBAcGFyYW0gcGF0dGVybkxlbmd0aCB0aGUgbGVu
Z3RoIG9mIHRoZSBwYXR0ZXJuLCBvciAtMSBpZiBudWxsCisgKiB0ZXJtaW5hdGVkCisgKiBAcGFy
YW0gZWMgdGhlIGVycm9yIGNvZGUKKyAqIEBzdGFibGUgSUNVIDIuNAorICovCitVX1NUQUJMRSBV
U2V0KiBVX0VYUE9SVDIKK3VzZXRfb3BlblBhdHRlcm4oY29uc3QgVUNoYXIqIHBhdHRlcm4sIGlu
dDMyX3QgcGF0dGVybkxlbmd0aCwKKyAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogZWMpOwor
CisvKioKKyAqIENyZWF0ZXMgYSBzZXQgZnJvbSB0aGUgZ2l2ZW4gcGF0dGVybi4gIFNlZSB0aGUg
VW5pY29kZVNldCBjbGFzcworICogZGVzY3JpcHRpb24gZm9yIHRoZSBzeW50YXggb2YgdGhlIHBh
dHRlcm4gbGFuZ3VhZ2UuCisgKiBAcGFyYW0gcGF0dGVybiBhIHN0cmluZyBzcGVjaWZ5aW5nIHdo
YXQgY2hhcmFjdGVycyBhcmUgaW4gdGhlIHNldAorICogQHBhcmFtIHBhdHRlcm5MZW5ndGggdGhl
IGxlbmd0aCBvZiB0aGUgcGF0dGVybiwgb3IgLTEgaWYgbnVsbAorICogdGVybWluYXRlZAorICog
QHBhcmFtIG9wdGlvbnMgYml0bWFzayBmb3Igb3B0aW9ucyB0byBhcHBseSB0byB0aGUgcGF0dGVy
bi4KKyAqIFZhbGlkIG9wdGlvbnMgYXJlIFVTRVRfSUdOT1JFX1NQQUNFIGFuZCBVU0VUX0NBU0Vf
SU5TRU5TSVRJVkUuCisgKiBAcGFyYW0gZWMgdGhlIGVycm9yIGNvZGUKKyAqIEBzdGFibGUgSUNV
IDIuNAorICovCitVX1NUQUJMRSBVU2V0KiBVX0VYUE9SVDIKK3VzZXRfb3BlblBhdHRlcm5PcHRp
b25zKGNvbnN0IFVDaGFyKiBwYXR0ZXJuLCBpbnQzMl90IHBhdHRlcm5MZW5ndGgsCisgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IG9wdGlvbnMsCisgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUq
IGVjKTsKKworLyoqCisgKiBEaXNwb3NlcyBvZiB0aGUgc3RvcmFnZSB1c2VkIGJ5IGEgVVNldCBv
YmplY3QuICBUaGlzIGZ1bmN0aW9uIHNob3VsZAorICogYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBm
b3Igb2JqZWN0cyByZXR1cm5lZCBieSB1c2V0X29wZW4oKS4KKyAqIEBwYXJhbSBzZXQgdGhlIG9i
amVjdCB0byBkaXNwb3NlIG9mCisgKiBAc3RhYmxlIElDVSAyLjQKKyAqLworVV9TVEFCTEUgdm9p
ZCBVX0VYUE9SVDIKK3VzZXRfY2xvc2UoVVNldCogc2V0KTsKKworLyoqCisgKiBDYXVzZXMgdGhl
IFVTZXQgb2JqZWN0IHRvIHJlcHJlc2VudCB0aGUgcmFuZ2UgPGNvZGU+c3RhcnQgLSBlbmQ8L2Nv
ZGU+LgorICogSWYgPGNvZGU+c3RhcnQgPiBlbmQ8L2NvZGU+IHRoZW4gdGhpcyBVU2V0IGlzIHNl
dCB0byBhbiBlbXB0eSByYW5nZS4KKyAqIEBwYXJhbSBzZXQgdGhlIG9iamVjdCB0byBzZXQgdG8g
dGhlIGdpdmVuIHJhbmdlCisgKiBAcGFyYW0gc3RhcnQgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBz
ZXQsIGluY2x1c2l2ZQorICogQHBhcmFtIGVuZCBsYXN0IGNoYXJhY3RlciBpbiB0aGUgc2V0LCBp
bmNsdXNpdmUKKyAqIEBkcmFmdCBJQ1UgMy4yCisgKi8KK1VfRFJBRlQgdm9pZCBVX0VYUE9SVDIK
K3VzZXRfc2V0KFVTZXQqIHNldCwKKyAgICAgICAgIFVDaGFyMzIgc3RhcnQsIFVDaGFyMzIgZW5k
KTsKKworLyoqCisgKiBNb2RpZmllcyB0aGUgc2V0IHRvIHJlcHJlc2VudCB0aGUgc2V0IHNwZWNp
ZmllZCBieSB0aGUgZ2l2ZW4KKyAqIHBhdHRlcm4uIFNlZSB0aGUgVW5pY29kZVNldCBjbGFzcyBk
ZXNjcmlwdGlvbiBmb3IgdGhlIHN5bnRheCBvZiAKKyAqIHRoZSBwYXR0ZXJuIGxhbmd1YWdlLiBT
ZWUgYWxzbyB0aGUgVXNlciBHdWlkZSBjaGFwdGVyIGFib3V0IFVuaWNvZGVTZXQuCisgKiA8ZW0+
RW1wdGllcyB0aGUgc2V0IHBhc3NlZCBiZWZvcmUgYXBwbHlpbmcgdGhlIHBhdHRlcm4uPC9lbT4K
KyAqIEBwYXJhbSBzZXQgICAgICAgICAgICAgICBUaGUgc2V0IHRvIHdoaWNoIHRoZSBwYXR0ZXJu
IGlzIHRvIGJlIGFwcGxpZWQuIAorICogQHBhcmFtIHBhdHRlcm4gICAgICAgICAgIEEgcG9pbnRl
ciB0byBVQ2hhciBzdHJpbmcgc3BlY2lmeWluZyB3aGF0IGNoYXJhY3RlcnMgYXJlIGluIHRoZSBz
ZXQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNoYXJhY3RlciBhdCBwYXR0ZXJu
WzBdIG11c3QgYmUgYSAnWycuCisgKiBAcGFyYW0gcGF0dGVybkxlbmd0aCAgICAgVGhlIGxlbmd0
aCBvZiB0aGUgVUNoYXIgc3RyaW5nLiAtMSBpZiBOVUwgdGVybWluYXRlZC4KKyAqIEBwYXJhbSBv
cHRpb25zICAgICAgICAgICBBIGJpdG1hc2sgZm9yIG9wdGlvbnMgdG8gYXBwbHkgdG8gdGhlIHBh
dHRlcm4uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgb3B0aW9ucyBhcmUgVVNF
VF9JR05PUkVfU1BBQ0UgYW5kIFVTRVRfQ0FTRV9JTlNFTlNJVElWRS4KKyAqIEBwYXJhbSBzdGF0
dXMgICAgICAgICAgICBSZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBwYXR0ZXJuIGNhbm5vdCBiZSBw
YXJzZWQuCisgKiBAcmV0dXJuICAgICAgICAgICAgICAgICAgVXBvbiBzdWNjZXNzZnVsIHBhcnNl
LCB0aGUgdmFsdWUgaXMgZWl0aGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGlu
ZGV4IG9mIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGNsb3NpbmcgJ10nIAorICogICAgICAgICAg
ICAgICAgICAgICAgICAgIG9mIHRoZSBwYXJzZWQgcGF0dGVybi4KKyAqICAgICAgICAgICAgICAg
ICAgICAgICAgICBJZiB0aGUgc3RhdHVzIGNvZGUgaW5kaWNhdGVzIGZhaWx1cmUsIHRoZW4gdGhl
IHJldHVybiB2YWx1ZSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0aGUgaW5kZXgg
b2YgdGhlIGVycm9yIGluIHRoZSBzb3VyY2UuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAqIEBkcmFmdCBJQ1UgMi44CisgKi8KK1VfRFJBRlQgaW50MzJfdCBVX0VYUE9S
VDIgCit1c2V0X2FwcGx5UGF0dGVybihVU2V0ICpzZXQsCisgICAgICAgICAgICAgICAgICBjb25z
dCBVQ2hhciAqcGF0dGVybiwgaW50MzJfdCBwYXR0ZXJuTGVuZ3RoLAorICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1
cyk7CisKKy8qKgorICogTW9kaWZpZXMgdGhlIHNldCB0byBjb250YWluIHRob3NlIGNvZGUgcG9p
bnRzIHdoaWNoIGhhdmUgdGhlIGdpdmVuIHZhbHVlCisgKiBmb3IgdGhlIGdpdmVuIGJpbmFyeSBv
ciBlbnVtZXJhdGVkIHByb3BlcnR5LCBhcyByZXR1cm5lZCBieQorICogdV9nZXRJbnRQcm9wZXJ0
eVZhbHVlLiAgUHJpb3IgY29udGVudHMgb2YgdGhpcyBzZXQgYXJlIGxvc3QuCisgKgorICogQHBh
cmFtIHNldCB0aGUgb2JqZWN0IHRvIGNvbnRhaW4gdGhlIGNvZGUgcG9pbnRzIGRlZmluZWQgYnkg
dGhlIHByb3BlcnR5CisgKgorICogQHBhcmFtIHByb3AgYSBwcm9wZXJ0eSBpbiB0aGUgcmFuZ2Ug
VUNIQVJfQklOX1NUQVJULi5VQ0hBUl9CSU5fTElNSVQtMQorICogb3IgVUNIQVJfSU5UX1NUQVJU
Li5VQ0hBUl9JTlRfTElNSVQtMQorICogb3IgVUNIQVJfTUFTS19TVEFSVC4uVUNIQVJfTUFTS19M
SU1JVC0xLgorICoKKyAqIEBwYXJhbSB2YWx1ZSBhIHZhbHVlIGluIHRoZSByYW5nZSB1X2dldElu
dFByb3BlcnR5TWluVmFsdWUocHJvcCkuLgorICogdV9nZXRJbnRQcm9wZXJ0eU1heFZhbHVlKHBy
b3ApLCB3aXRoIG9uZSBleGNlcHRpb24uICBJZiBwcm9wIGlzCisgKiBVQ0hBUl9HRU5FUkFMX0NB
VEVHT1JZX01BU0ssIHRoZW4gdmFsdWUgc2hvdWxkIG5vdCBiZSBhIFVDaGFyQ2F0ZWdvcnksIGJ1
dAorICogcmF0aGVyIGEgbWFzayB2YWx1ZSBwcm9kdWNlZCBieSBVX0dFVF9HQ19NQVNLKCkuICBU
aGlzIGFsbG93cyBncm91cGVkCisgKiBjYXRlZ29yaWVzIHN1Y2ggYXMgWzpMOl0gdG8gYmUgcmVw
cmVzZW50ZWQuCisgKgorICogQHBhcmFtIGVjIGVycm9yIGNvZGUgaW5wdXQvb3V0cHV0IHBhcmFt
ZXRlcgorICoKKyAqIEBkcmFmdCBJQ1UgMy4yCisgKi8KK1VfRFJBRlQgdm9pZCBVX0VYUE9SVDIK
K3VzZXRfYXBwbHlJbnRQcm9wZXJ0eVZhbHVlKFVTZXQqIHNldCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVQcm9wZXJ0eSBwcm9wLCBpbnQzMl90IHZhbHVlLCBVRXJyb3JDb2RlKiBlYyk7
CisKKy8qKgorICogTW9kaWZpZXMgdGhlIHNldCB0byBjb250YWluIHRob3NlIGNvZGUgcG9pbnRz
IHdoaWNoIGhhdmUgdGhlCisgKiBnaXZlbiB2YWx1ZSBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LiAg
UHJpb3IgY29udGVudHMgb2YgdGhpcworICogc2V0IGFyZSBsb3N0LgorICoKKyAqIEBwYXJhbSBz
ZXQgdGhlIG9iamVjdCB0byBjb250YWluIHRoZSBjb2RlIHBvaW50cyBkZWZpbmVkIGJ5IHRoZSBn
aXZlbgorICogcHJvcGVydHkgYW5kIHZhbHVlIGFsaWFzCisgKgorICogQHBhcmFtIHByb3AgYSBz
dHJpbmcgc3BlY2lmeWluZyBhIHByb3BlcnR5IGFsaWFzLCBlaXRoZXIgc2hvcnQgb3IgbG9uZy4K
KyAqIFRoZSBuYW1lIGlzIG1hdGNoZWQgbG9vc2VseS4gIFNlZSBQcm9wZXJ0eUFsaWFzZXMudHh0
IGZvciBuYW1lcyBhbmQgYQorICogZGVzY3JpcHRpb24gb2YgbG9vc2UgbWF0Y2hpbmcuICBJZiB0
aGUgdmFsdWUgc3RyaW5nIGlzIGVtcHR5LCB0aGVuIHRoaXMKKyAqIHN0cmluZyBpcyBpbnRlcnBy
ZXRlZCBhcyBlaXRoZXIgYSBHZW5lcmFsX0NhdGVnb3J5IHZhbHVlIGFsaWFzLCBhIFNjcmlwdAor
ICogdmFsdWUgYWxpYXMsIGEgYmluYXJ5IHByb3BlcnR5IGFsaWFzLCBvciBhIHNwZWNpYWwgSUQu
ICBTcGVjaWFsIElEcyBhcmUKKyAqIG1hdGNoZWQgbG9vc2VseSBhbmQgY29ycmVzcG9uZCB0byB0
aGUgZm9sbG93aW5nIHNldHM6CisgKgorICogIkFOWSIgPSBbXFx1MDAwMC1cXFUwMDEwRkZGRl0s
CisgKiAiQVNDSUkiID0gW1xcdTAwMDAtXFx1MDA3Rl0uCisgKgorICogQHBhcmFtIHByb3BMZW5n
dGggdGhlIGxlbmd0aCBvZiB0aGUgcHJvcCwgb3IgLTEgaWYgTlVMTAorICoKKyAqIEBwYXJhbSB2
YWx1ZSBhIHN0cmluZyBzcGVjaWZ5aW5nIGEgdmFsdWUgYWxpYXMsIGVpdGhlciBzaG9ydCBvciBs
b25nLgorICogVGhlIG5hbWUgaXMgbWF0Y2hlZCBsb29zZWx5LiAgU2VlIFByb3BlcnR5VmFsdWVB
bGlhc2VzLnR4dCBmb3IgbmFtZXMKKyAqIGFuZCBhIGRlc2NyaXB0aW9uIG9mIGxvb3NlIG1hdGNo
aW5nLiAgSW4gYWRkaXRpb24gdG8gYWxpYXNlcyBsaXN0ZWQsCisgKiBudW1lcmljIHZhbHVlcyBh
bmQgY2Fub25pY2FsIGNvbWJpbmluZyBjbGFzc2VzIG1heSBiZSBleHByZXNzZWQKKyAqIG51bWVy
aWNhbGx5LCBlLmcuLCAoIm52IiwgIjAuNSIpIG9yICgiY2NjIiwgIjIyMCIpLiAgVGhlIHZhbHVl
IHN0cmluZworICogbWF5IGFsc28gYmUgZW1wdHkuCisgKgorICogQHBhcmFtIHZhbHVlTGVuZ3Ro
IHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlLCBvciAtMSBpZiBOVUxMCisgKgorICogQHBhcmFtIGVj
IGVycm9yIGNvZGUgaW5wdXQvb3V0cHV0IHBhcmFtZXRlcgorICoKKyAqIEBkcmFmdCBJQ1UgMy4y
CisgKi8KK1VfRFJBRlQgdm9pZCBVX0VYUE9SVDIKK3VzZXRfYXBwbHlQcm9wZXJ0eUFsaWFzKFVT
ZXQqIHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpwcm9wLCBpbnQz
Ml90IHByb3BMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAqdmFs
dWUsIGludDMyX3QgdmFsdWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JD
b2RlKiBlYyk7CisKKy8qKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHBvc2l0aW9uLCBp
biB0aGUgZ2l2ZW4gcGF0dGVybiwgYXBwZWFycworICogdG8gYmUgdGhlIHN0YXJ0IG9mIGEgVW5p
Y29kZVNldCBwYXR0ZXJuLgorICoKKyAqIEBwYXJhbSBwYXR0ZXJuIGEgc3RyaW5nIHNwZWNpZnlp
bmcgdGhlIHBhdHRlcm4KKyAqIEBwYXJhbSBwYXR0ZXJuTGVuZ3RoIHRoZSBsZW5ndGggb2YgdGhl
IHBhdHRlcm4sIG9yIC0xIGlmIE5VTEwKKyAqIEBwYXJhbSBwb3MgdGhlIGdpdmVuIHBvc2l0aW9u
CisgKiBAZHJhZnQgSUNVIDMuMgorICovCitVX0RSQUZUIFVCb29sIFVfRVhQT1JUMgordXNldF9y
ZXNlbWJsZXNQYXR0ZXJuKGNvbnN0IFVDaGFyICpwYXR0ZXJuLCBpbnQzMl90IHBhdHRlcm5MZW5n
dGgsCisgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBwb3MpOworCisvKioKKyAqIFJldHVy
bnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzZXQuICBJZiB0aGUgcmVzdWx0IG9m
CisgKiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIGEgdXNldF9vcGVuUGF0dGVy
bigpLCBpdAorICogd2lsbCBwcm9kdWNlIGFub3RoZXIgc2V0IHRoYXQgaXMgZXF1YWwgdG8gdGhp
cyBvbmUuCisgKiBAcGFyYW0gc2V0IHRoZSBzZXQKKyAqIEBwYXJhbSByZXN1bHQgdGhlIHN0cmlu
ZyB0byByZWNlaXZlIHRoZSBydWxlcywgbWF5IGJlIE5VTEwKKyAqIEBwYXJhbSByZXN1bHRDYXBh
Y2l0eSB0aGUgY2FwYWNpdHkgb2YgcmVzdWx0LCBtYXkgYmUgMCBpZiByZXN1bHQgaXMgTlVMTAor
ICogQHBhcmFtIGVzY2FwZVVucHJpbnRhYmxlIGlmIFRSVUUgdGhlbiBjb252ZXJ0IHVucHJpbnRh
YmxlCisgKiBjaGFyYWN0ZXIgdG8gdGhlaXIgaGV4IGVzY2FwZSByZXByZXNlbnRhdGlvbnMsIFxc
dXh4eHggb3IKKyAqIFxcVXh4eHh4eHh4LiAgVW5wcmludGFibGUgY2hhcmFjdGVycyBhcmUgdGhv
c2Ugb3RoZXIgdGhhbgorICogVSswMDBBLCBVKzAwMjAuLlUrMDA3RS4KKyAqIEBwYXJhbSBlYyBl
cnJvciBjb2RlLgorICogQHJldHVybiBsZW5ndGggb2Ygc3RyaW5nLCBwb3NzaWJseSBsYXJnZXIg
dGhhbiByZXN1bHRDYXBhY2l0eQorICogQHN0YWJsZSBJQ1UgMi40CisgKi8KK1VfU1RBQkxFIGlu
dDMyX3QgVV9FWFBPUlQyCit1c2V0X3RvUGF0dGVybihjb25zdCBVU2V0KiBzZXQsCisgICAgICAg
ICAgICAgICBVQ2hhciogcmVzdWx0LCBpbnQzMl90IHJlc3VsdENhcGFjaXR5LAorICAgICAgICAg
ICAgICAgVUJvb2wgZXNjYXBlVW5wcmludGFibGUsCisgICAgICAgICAgICAgICBVRXJyb3JDb2Rl
KiBlYyk7CisKKy8qKgorICogQWRkcyB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHRvIHRoZSBnaXZlbiBV
U2V0LiAgQWZ0ZXIgdGhpcyBjYWxsLAorICogdXNldF9jb250YWlucyhzZXQsIGMpIHdpbGwgcmV0
dXJuIFRSVUUuCisgKiBAcGFyYW0gc2V0IHRoZSBvYmplY3QgdG8gd2hpY2ggdG8gYWRkIHRoZSBj
aGFyYWN0ZXIKKyAqIEBwYXJhbSBjIHRoZSBjaGFyYWN0ZXIgdG8gYWRkCisgKiBAc3RhYmxlIElD
VSAyLjQKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VzZXRfYWRkKFVTZXQqIHNldCwg
VUNoYXIzMiBjKTsKKworLyoqCisgKiBBZGRzIGFsbCBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHNw
ZWNpZmllZCBzZXQgdG8gdGhpcyBzZXQgaWYKKyAqIHRoZXkncmUgbm90IGFscmVhZHkgcHJlc2Vu
dC4gIFRoaXMgb3BlcmF0aW9uIGVmZmVjdGl2ZWx5CisgKiBtb2RpZmllcyB0aGlzIHNldCBzbyB0
aGF0IGl0cyB2YWx1ZSBpcyB0aGUgPGk+dW5pb248L2k+IG9mIHRoZSB0d28KKyAqIHNldHMuICBU
aGUgYmVoYXZpb3Igb2YgdGhpcyBvcGVyYXRpb24gaXMgdW5zcGVjaWZpZWQgaWYgdGhlIHNwZWNp
ZmllZAorICogY29sbGVjdGlvbiBpcyBtb2RpZmllZCB3aGlsZSB0aGUgb3BlcmF0aW9uIGlzIGlu
IHByb2dyZXNzLgorICoKKyAqIEBwYXJhbSBzZXQgdGhlIG9iamVjdCB0byB3aGljaCB0byBhZGQg
dGhlIHNldAorICogQHBhcmFtIGFkZGl0aW9uYWxTZXQgdGhlIHNvdXJjZSBzZXQgd2hvc2UgZWxl
bWVudHMgYXJlIHRvIGJlIGFkZGVkIHRvIHRoaXMgc2V0LgorICogQHN0YWJsZSBJQ1UgMi42Cisg
Ki8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1c2V0X2FkZEFsbChVU2V0KiBzZXQsIGNvbnN0
IFVTZXQgKmFkZGl0aW9uYWxTZXQpOworCisvKioKKyAqIEFkZHMgdGhlIGdpdmVuIHJhbmdlIG9m
IGNoYXJhY3RlcnMgdG8gdGhlIGdpdmVuIFVTZXQuICBBZnRlciB0aGlzIGNhbGwsCisgKiB1c2V0
X2NvbnRhaW5zKHNldCwgc3RhcnQsIGVuZCkgd2lsbCByZXR1cm4gVFJVRS4KKyAqIEBwYXJhbSBz
ZXQgdGhlIG9iamVjdCB0byB3aGljaCB0byBhZGQgdGhlIGNoYXJhY3RlcgorICogQHBhcmFtIHN0
YXJ0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHJhbmdlIHRvIGFkZCwgaW5jbHVzaXZlCisg
KiBAcGFyYW0gZW5kIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgcmFuZ2UgdG8gYWRkLCBpbmNs
dXNpdmUKKyAqIEBzdGFibGUgSUNVIDIuMgorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgor
dXNldF9hZGRSYW5nZShVU2V0KiBzZXQsIFVDaGFyMzIgc3RhcnQsIFVDaGFyMzIgZW5kKTsKKwor
LyoqCisgKiBBZGRzIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlIGdpdmVuIFVTZXQuICBBZnRlciB0
aGlzIGNhbGwsCisgKiB1c2V0X2NvbnRhaW5zU3RyaW5nKHNldCwgc3RyLCBzdHJMZW4pIHdpbGwg
cmV0dXJuIFRSVUUuCisgKiBAcGFyYW0gc2V0IHRoZSBvYmplY3QgdG8gd2hpY2ggdG8gYWRkIHRo
ZSBjaGFyYWN0ZXIKKyAqIEBwYXJhbSBzdHIgdGhlIHN0cmluZyB0byBhZGQKKyAqIEBwYXJhbSBz
dHJMZW4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIG9yIC0xIGlmIG51bGwgdGVybWluYXRlZC4K
KyAqIEBzdGFibGUgSUNVIDIuNAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordXNldF9h
ZGRTdHJpbmcoVVNldCogc2V0LCBjb25zdCBVQ2hhciogc3RyLCBpbnQzMl90IHN0ckxlbik7CisK
Ky8qKgorICogUmVtb3ZlcyB0aGUgZ2l2ZW4gY2hhcmFjdGVyIGZyb20gdGhlIGdpdmVuIFVTZXQu
ICBBZnRlciB0aGlzIGNhbGwsCisgKiB1c2V0X2NvbnRhaW5zKHNldCwgYykgd2lsbCByZXR1cm4g
RkFMU0UuCisgKiBAcGFyYW0gc2V0IHRoZSBvYmplY3QgZnJvbSB3aGljaCB0byByZW1vdmUgdGhl
IGNoYXJhY3RlcgorICogQHBhcmFtIGMgdGhlIGNoYXJhY3RlciB0byByZW1vdmUKKyAqIEBzdGFi
bGUgSUNVIDIuNAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordXNldF9yZW1vdmUoVVNl
dCogc2V0LCBVQ2hhcjMyIGMpOworCisvKioKKyAqIFJlbW92ZXMgdGhlIGdpdmVuIHJhbmdlIG9m
IGNoYXJhY3RlcnMgZnJvbSB0aGUgZ2l2ZW4gVVNldC4gIEFmdGVyIHRoaXMgY2FsbCwKKyAqIHVz
ZXRfY29udGFpbnMoc2V0LCBzdGFydCwgZW5kKSB3aWxsIHJldHVybiBGQUxTRS4KKyAqIEBwYXJh
bSBzZXQgdGhlIG9iamVjdCB0byB3aGljaCB0byBhZGQgdGhlIGNoYXJhY3RlcgorICogQHBhcmFt
IHN0YXJ0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHJhbmdlIHRvIHJlbW92ZSwgaW5jbHVz
aXZlCisgKiBAcGFyYW0gZW5kIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgcmFuZ2UgdG8gcmVt
b3ZlLCBpbmNsdXNpdmUKKyAqIEBzdGFibGUgSUNVIDIuMgorICovCitVX1NUQUJMRSB2b2lkIFVf
RVhQT1JUMgordXNldF9yZW1vdmVSYW5nZShVU2V0KiBzZXQsIFVDaGFyMzIgc3RhcnQsIFVDaGFy
MzIgZW5kKTsKKworLyoqCisgKiBSZW1vdmVzIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlIGdpdmVu
IFVTZXQuICBBZnRlciB0aGlzIGNhbGwsCisgKiB1c2V0X2NvbnRhaW5zU3RyaW5nKHNldCwgc3Ry
LCBzdHJMZW4pIHdpbGwgcmV0dXJuIEZBTFNFLgorICogQHBhcmFtIHNldCB0aGUgb2JqZWN0IHRv
IHdoaWNoIHRvIGFkZCB0aGUgY2hhcmFjdGVyCisgKiBAcGFyYW0gc3RyIHRoZSBzdHJpbmcgdG8g
cmVtb3ZlCisgKiBAcGFyYW0gc3RyTGVuIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBvciAtMSBp
ZiBudWxsIHRlcm1pbmF0ZWQuCisgKiBAc3RhYmxlIElDVSAyLjQKKyAqLworVV9TVEFCTEUgdm9p
ZCBVX0VYUE9SVDIKK3VzZXRfcmVtb3ZlU3RyaW5nKFVTZXQqIHNldCwgY29uc3QgVUNoYXIqIHN0
ciwgaW50MzJfdCBzdHJMZW4pOworCisvKioKKyAqIFJlbW92ZXMgZnJvbSB0aGlzIHNldCBhbGwg
b2YgaXRzIGVsZW1lbnRzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiB0aGUKKyAqIHNwZWNpZmllZCBz
ZXQuICBUaGlzIG9wZXJhdGlvbiBlZmZlY3RpdmVseSBtb2RpZmllcyB0aGlzCisgKiBzZXQgc28g
dGhhdCBpdHMgdmFsdWUgaXMgdGhlIDxpPmFzeW1tZXRyaWMgc2V0IGRpZmZlcmVuY2U8L2k+IG9m
CisgKiB0aGUgdHdvIHNldHMuCisgKiBAcGFyYW0gc2V0IHRoZSBvYmplY3QgZnJvbSB3aGljaCB0
aGUgZWxlbWVudHMgYXJlIHRvIGJlIHJlbW92ZWQKKyAqIEBwYXJhbSByZW1vdmVTZXQgdGhlIG9i
amVjdCB0aGF0IGRlZmluZXMgd2hpY2ggZWxlbWVudHMgd2lsbCBiZQorICogcmVtb3ZlZCBmcm9t
IHRoaXMgc2V0CisgKiBAZHJhZnQgSUNVIDMuMgorICovCitVX0RSQUZUIHZvaWQgVV9FWFBPUlQy
Cit1c2V0X3JlbW92ZUFsbChVU2V0KiBzZXQsIGNvbnN0IFVTZXQqIHJlbW92ZVNldCk7CisKKy8q
KgorICogUmV0YWluIG9ubHkgdGhlIGVsZW1lbnRzIGluIHRoaXMgc2V0IHRoYXQgYXJlIGNvbnRh
aW5lZCBpbiB0aGUKKyAqIHNwZWNpZmllZCByYW5nZS4gIElmIDxjb2RlPnN0YXJ0ID4gZW5kPC9j
b2RlPiB0aGVuIGFuIGVtcHR5IHJhbmdlIGlzCisgKiByZXRhaW5lZCwgbGVhdmluZyB0aGUgc2V0
IGVtcHR5LiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvCisgKiBhIGJvb2xlYW4gbG9naWMgQU5ELCBv
ciBhIHNldCBJTlRFUlNFQ1RJT04uCisgKgorICogQHBhcmFtIHNldCB0aGUgb2JqZWN0IGZvciB3
aGljaCB0byByZXRhaW4gb25seSB0aGUgc3BlY2lmaWVkIHJhbmdlCisgKiBAcGFyYW0gc3RhcnQg
Zmlyc3QgY2hhcmFjdGVyLCBpbmNsdXNpdmUsIG9mIHJhbmdlIHRvIGJlIHJldGFpbmVkCisgKiB0
byB0aGlzIHNldC4KKyAqIEBwYXJhbSBlbmQgbGFzdCBjaGFyYWN0ZXIsIGluY2x1c2l2ZSwgb2Yg
cmFuZ2UgdG8gYmUgcmV0YWluZWQKKyAqIHRvIHRoaXMgc2V0LgorICogQGRyYWZ0IElDVSAzLjIK
KyAqLworVV9EUkFGVCB2b2lkIFVfRVhQT1JUMgordXNldF9yZXRhaW4oVVNldCogc2V0LCBVQ2hh
cjMyIHN0YXJ0LCBVQ2hhcjMyIGVuZCk7CisKKy8qKgorICogUmV0YWlucyBvbmx5IHRoZSBlbGVt
ZW50cyBpbiB0aGlzIHNldCB0aGF0IGFyZSBjb250YWluZWQgaW4gdGhlCisgKiBzcGVjaWZpZWQg
c2V0LiAgSW4gb3RoZXIgd29yZHMsIHJlbW92ZXMgZnJvbSB0aGlzIHNldCBhbGwgb2YKKyAqIGl0
cyBlbGVtZW50cyB0aGF0IGFyZSBub3QgY29udGFpbmVkIGluIHRoZSBzcGVjaWZpZWQgc2V0LiAg
VGhpcworICogb3BlcmF0aW9uIGVmZmVjdGl2ZWx5IG1vZGlmaWVzIHRoaXMgc2V0IHNvIHRoYXQg
aXRzIHZhbHVlIGlzCisgKiB0aGUgPGk+aW50ZXJzZWN0aW9uPC9pPiBvZiB0aGUgdHdvIHNldHMu
CisgKgorICogQHBhcmFtIHNldCB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIHBlcmZvcm0gdGhlIHJl
dGFpbgorICogQHBhcmFtIHJldGFpbiBzZXQgdGhhdCBkZWZpbmVzIHdoaWNoIGVsZW1lbnRzIHRo
aXMgc2V0IHdpbGwgcmV0YWluCisgKiBAZHJhZnQgSUNVIDMuMgorICovCitVX0RSQUZUIHZvaWQg
VV9FWFBPUlQyCit1c2V0X3JldGFpbkFsbChVU2V0KiBzZXQsIGNvbnN0IFVTZXQqIHJldGFpbik7
CisKKy8qKgorICogUmVhbGxvY2F0ZSB0aGlzIG9iamVjdHMgaW50ZXJuYWwgc3RydWN0dXJlcyB0
byB0YWtlIHVwIHRoZSBsZWFzdAorICogcG9zc2libGUgc3BhY2UsIHdpdGhvdXQgY2hhbmdpbmcg
dGhpcyBvYmplY3QncyB2YWx1ZS4KKyAqCisgKiBAcGFyYW0gc2V0IHRoZSBvYmplY3Qgb24gd2hp
Y2ggdG8gcGVyZnJvbSB0aGUgY29tcGFjdAorICogQGRyYWZ0IElDVSAzLjIKKyAqLworVV9EUkFG
VCB2b2lkIFVfRVhQT1JUMgordXNldF9jb21wYWN0KFVTZXQqIHNldCk7CisKKy8qKgorICogSW52
ZXJ0cyB0aGlzIHNldC4gIFRoaXMgb3BlcmF0aW9uIG1vZGlmaWVzIHRoaXMgc2V0IHNvIHRoYXQK
KyAqIGl0cyB2YWx1ZSBpcyBpdHMgY29tcGxlbWVudC4gIFRoaXMgb3BlcmF0aW9uIGRvZXMgbm90
IGFmZmVjdAorICogdGhlIG11bHRpY2hhcmFjdGVyIHN0cmluZ3MsIGlmIGFueS4KKyAqIEBwYXJh
bSBzZXQgdGhlIHNldAorICogQHN0YWJsZSBJQ1UgMi40CisgKi8KK1VfU1RBQkxFIHZvaWQgVV9F
WFBPUlQyCit1c2V0X2NvbXBsZW1lbnQoVVNldCogc2V0KTsKKworLyoqCisgKiBDb21wbGVtZW50
cyBpbiB0aGlzIHNldCBhbGwgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBzcGVjaWZpZWQKKyAq
IHNldC4gIEFueSBjaGFyYWN0ZXIgaW4gdGhlIG90aGVyIHNldCB3aWxsIGJlIHJlbW92ZWQgaWYg
aXQgaXMKKyAqIGluIHRoaXMgc2V0LCBvciB3aWxsIGJlIGFkZGVkIGlmIGl0IGlzIG5vdCBpbiB0
aGlzIHNldC4KKyAqCisgKiBAcGFyYW0gc2V0IHRoZSBzZXQgd2l0aCB3aGljaCB0byBjb21wbGVt
ZW50CisgKiBAcGFyYW0gY29tcGxlbWVudCBzZXQgdGhhdCBkZWZpbmVzIHdoaWNoIGVsZW1lbnRz
IHdpbGwgYmUgeG9yJ2VkCisgKiBmcm9tIHRoaXMgc2V0LgorICogQGRyYWZ0IElDVSAzLjIKKyAq
LworVV9EUkFGVCB2b2lkIFVfRVhQT1JUMgordXNldF9jb21wbGVtZW50QWxsKFVTZXQqIHNldCwg
Y29uc3QgVVNldCogY29tcGxlbWVudCk7CisKKy8qKgorICogUmVtb3ZlcyBhbGwgb2YgdGhlIGVs
ZW1lbnRzIGZyb20gdGhpcyBzZXQuICBUaGlzIHNldCB3aWxsIGJlCisgKiBlbXB0eSBhZnRlciB0
aGlzIGNhbGwgcmV0dXJucy4KKyAqIEBwYXJhbSBzZXQgdGhlIHNldAorICogQHN0YWJsZSBJQ1Ug
Mi40CisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1c2V0X2NsZWFyKFVTZXQqIHNldCk7
CisKKy8qKgorICogUmV0dXJucyBUUlVFIGlmIHRoZSBnaXZlbiBVU2V0IGNvbnRhaW5zIG5vIGNo
YXJhY3RlcnMgYW5kIG5vCisgKiBzdHJpbmdzLgorICogQHBhcmFtIHNldCB0aGUgc2V0CisgKiBA
cmV0dXJuIHRydWUgaWYgc2V0IGlzIGVtcHR5CisgKiBAc3RhYmxlIElDVSAyLjQKKyAqLworVV9T
VEFCTEUgVUJvb2wgVV9FWFBPUlQyCit1c2V0X2lzRW1wdHkoY29uc3QgVVNldCogc2V0KTsKKwor
LyoqCisgKiBSZXR1cm5zIFRSVUUgaWYgdGhlIGdpdmVuIFVTZXQgY29udGFpbnMgdGhlIGdpdmVu
IGNoYXJhY3Rlci4KKyAqIEBwYXJhbSBzZXQgdGhlIHNldAorICogQHBhcmFtIGMgVGhlIGNvZGVw
b2ludCB0byBjaGVjayBmb3Igd2l0aGluIHRoZSBzZXQKKyAqIEByZXR1cm4gdHJ1ZSBpZiBzZXQg
Y29udGFpbnMgYworICogQHN0YWJsZSBJQ1UgMi40CisgKi8KK1VfU1RBQkxFIFVCb29sIFVfRVhQ
T1JUMgordXNldF9jb250YWlucyhjb25zdCBVU2V0KiBzZXQsIFVDaGFyMzIgYyk7CisKKy8qKgor
ICogUmV0dXJucyBUUlVFIGlmIHRoZSBnaXZlbiBVU2V0IGNvbnRhaW5zIGFsbCBjaGFyYWN0ZXJz
IGMKKyAqIHdoZXJlIHN0YXJ0IDw9IGMgJiYgYyA8PSBlbmQuCisgKiBAcGFyYW0gc2V0IHRoZSBz
ZXQKKyAqIEBwYXJhbSBzdGFydCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSByYW5nZSB0byB0
ZXN0LCBpbmNsdXNpdmUKKyAqIEBwYXJhbSBlbmQgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBy
YW5nZSB0byB0ZXN0LCBpbmNsdXNpdmUKKyAqIEByZXR1cm4gVFJVRSBpZiBzZXQgY29udGFpbnMg
dGhlIHJhbmdlCisgKiBAc3RhYmxlIElDVSAyLjIKKyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBP
UlQyCit1c2V0X2NvbnRhaW5zUmFuZ2UoY29uc3QgVVNldCogc2V0LCBVQ2hhcjMyIHN0YXJ0LCBV
Q2hhcjMyIGVuZCk7CisKKy8qKgorICogUmV0dXJucyBUUlVFIGlmIHRoZSBnaXZlbiBVU2V0IGNv
bnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcuCisgKiBAcGFyYW0gc2V0IHRoZSBzZXQKKyAqIEBwYXJh
bSBzdHIgdGhlIHN0cmluZworICogQHBhcmFtIHN0ckxlbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJp
bmcgb3IgLTEgaWYgbnVsbCB0ZXJtaW5hdGVkLgorICogQHJldHVybiB0cnVlIGlmIHNldCBjb250
YWlucyBzdHIKKyAqIEBzdGFibGUgSUNVIDIuNAorICovCitVX1NUQUJMRSBVQm9vbCBVX0VYUE9S
VDIKK3VzZXRfY29udGFpbnNTdHJpbmcoY29uc3QgVVNldCogc2V0LCBjb25zdCBVQ2hhciogc3Ry
LCBpbnQzMl90IHN0ckxlbik7CisKKy8qKgorICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGdp
dmVuIGNoYXJhY3RlciB3aXRoaW4gdGhpcyBzZXQsIHdoZXJlCisgKiB0aGUgc2V0IGlzIG9yZGVy
ZWQgYnkgYXNjZW5kaW5nIGNvZGUgcG9pbnQuICBJZiB0aGUgY2hhcmFjdGVyCisgKiBpcyBub3Qg
aW4gdGhpcyBzZXQsIHJldHVybiAtMS4gIFRoZSBpbnZlcnNlIG9mIHRoaXMgbWV0aG9kIGlzCisg
KiA8Y29kZT5jaGFyQXQoKTwvY29kZT4uCisgKiBAcGFyYW0gc2V0IHRoZSBzZXQKKyAqIEBwYXJh
bSBjIHRoZSBjaGFyYWN0ZXIgdG8gb2J0YWluIHRoZSBpbmRleCBmb3IKKyAqIEByZXR1cm4gYW4g
aW5kZXggZnJvbSAwLi5zaXplKCktMSwgb3IgLTEKKyAqIEBkcmFmdCBJQ1UgMy4yCisgKi8KK1Vf
RFJBRlQgaW50MzJfdCBVX0VYUE9SVDIKK3VzZXRfaW5kZXhPZihjb25zdCBVU2V0KiBzZXQsIFVD
aGFyMzIgYyk7CisKKy8qKgorICogUmV0dXJucyB0aGUgY2hhcmFjdGVyIGF0IHRoZSBnaXZlbiBp
bmRleCB3aXRoaW4gdGhpcyBzZXQsIHdoZXJlCisgKiB0aGUgc2V0IGlzIG9yZGVyZWQgYnkgYXNj
ZW5kaW5nIGNvZGUgcG9pbnQuICBJZiB0aGUgaW5kZXggaXMKKyAqIG91dCBvZiByYW5nZSwgcmV0
dXJuIChVQ2hhcjMyKS0xLiAgVGhlIGludmVyc2Ugb2YgdGhpcyBtZXRob2QgaXMKKyAqIDxjb2Rl
PmluZGV4T2YoKTwvY29kZT4uCisgKiBAcGFyYW0gc2V0IHRoZSBzZXQKKyAqIEBwYXJhbSBpbmRl
eCBhbiBpbmRleCBmcm9tIDAuLnNpemUoKS0xIHRvIG9idGFpbiB0aGUgY2hhciBmb3IKKyAqIEBy
ZXR1cm4gdGhlIGNoYXJhY3RlciBhdCB0aGUgZ2l2ZW4gaW5kZXgsIG9yIChVQ2hhcjMyKS0xLgor
ICogQGRyYWZ0IElDVSAzLjIKKyAqLworVV9EUkFGVCBVQ2hhcjMyIFVfRVhQT1JUMgordXNldF9j
aGFyQXQoY29uc3QgVVNldCogc2V0LCBpbnQzMl90IGluZGV4KTsKKworLyoqCisgKiBSZXR1cm5z
IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhbmQgc3RyaW5ncyBjb250YWluZWQgaW4gdGhlIGdp
dmVuCisgKiBVU2V0LgorICogQHBhcmFtIHNldCB0aGUgc2V0CisgKiBAcmV0dXJuIGEgbm9uLW5l
Z2F0aXZlIGludGVnZXIgY291bnRpbmcgdGhlIGNoYXJhY3RlcnMgYW5kIHN0cmluZ3MKKyAqIGNv
bnRhaW5lZCBpbiBzZXQKKyAqIEBzdGFibGUgSUNVIDIuNAorICovCitVX1NUQUJMRSBpbnQzMl90
IFVfRVhQT1JUMgordXNldF9zaXplKGNvbnN0IFVTZXQqIHNldCk7CisKKy8qKgorICogUmV0dXJu
cyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoaXMgc2V0LiAgQW4gaXRlbSBpcyBlaXRoZXIgYSBy
YW5nZQorICogb2YgY2hhcmFjdGVycyBvciBhIHNpbmdsZSBtdWx0aWNoYXJhY3RlciBzdHJpbmcu
CisgKiBAcGFyYW0gc2V0IHRoZSBzZXQKKyAqIEByZXR1cm4gYSBub24tbmVnYXRpdmUgaW50ZWdl
ciBjb3VudGluZyB0aGUgY2hhcmFjdGVyIHJhbmdlcworICogYW5kL29yIHN0cmluZ3MgY29udGFp
bmVkIGluIHNldAorICogQHN0YWJsZSBJQ1UgMi40CisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9F
WFBPUlQyCit1c2V0X2dldEl0ZW1Db3VudChjb25zdCBVU2V0KiBzZXQpOworCisvKioKKyAqIFJl
dHVybnMgYW4gaXRlbSBvZiB0aGlzIHNldC4gIEFuIGl0ZW0gaXMgZWl0aGVyIGEgcmFuZ2Ugb2YK
KyAqIGNoYXJhY3RlcnMgb3IgYSBzaW5nbGUgbXVsdGljaGFyYWN0ZXIgc3RyaW5nLgorICogQHBh
cmFtIHNldCB0aGUgc2V0CisgKiBAcGFyYW0gaXRlbUluZGV4IGEgbm9uLW5lZ2F0aXZlIGludGVn
ZXIgaW4gdGhlIHJhbmdlIDAuLgorICogdXNldF9nZXRJdGVtQ291bnQoc2V0KS0xCisgKiBAcGFy
YW0gc3RhcnQgcG9pbnRlciB0byB2YXJpYWJsZSB0byByZWNlaXZlIGZpcnN0IGNoYXJhY3Rlcgor
ICogaW4gcmFuZ2UsIGluY2x1c2l2ZQorICogQHBhcmFtIGVuZCBwb2ludGVyIHRvIHZhcmlhYmxl
IHRvIHJlY2VpdmUgbGFzdCBjaGFyYWN0ZXIgaW4gcmFuZ2UsCisgKiBpbmNsdXNpdmUKKyAqIEBw
YXJhbSBzdHIgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHN0cmluZywgbWF5IGJlIE5VTEwKKyAqIEBw
YXJhbSBzdHJDYXBhY2l0eSBjYXBhY2l0eSBvZiBzdHIsIG9yIDAgaWYgc3RyIGlzIE5VTEwKKyAq
IEBwYXJhbSBlYyBlcnJvciBjb2RlCisgKiBAcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHN0cmlu
ZyAoPj0gMiksIG9yIDAgaWYgdGhlIGl0ZW0gaXMgYQorICogcmFuZ2UsIGluIHdoaWNoIGNhc2Ug
aXQgaXMgdGhlIHJhbmdlICpzdGFydC4uKmVuZCwgb3IgLTEgaWYKKyAqIGl0ZW1JbmRleCBpcyBv
dXQgb2YgcmFuZ2UKKyAqIEBzdGFibGUgSUNVIDIuNAorICovCitVX1NUQUJMRSBpbnQzMl90IFVf
RVhQT1JUMgordXNldF9nZXRJdGVtKGNvbnN0IFVTZXQqIHNldCwgaW50MzJfdCBpdGVtSW5kZXgs
CisgICAgICAgICAgICAgVUNoYXIzMiogc3RhcnQsIFVDaGFyMzIqIGVuZCwKKyAgICAgICAgICAg
ICBVQ2hhciogc3RyLCBpbnQzMl90IHN0ckNhcGFjaXR5LAorICAgICAgICAgICAgIFVFcnJvckNv
ZGUqIGVjKTsKKworLyoqCisgKiBSZXR1cm5zIHRydWUgaWYgc2V0MSBjb250YWlucyBhbGwgdGhl
IGNoYXJhY3RlcnMgYW5kIHN0cmluZ3MKKyAqIG9mIHNldDIuIEl0IGFuc3dlcnMgdGhlIHF1ZXN0
aW9uLCAnSXMgc2V0MSBhIHN1YnNldCBvZiBzZXQyPycKKyAqIEBwYXJhbSBzZXQxIHNldCB0byBi
ZSBjaGVja2VkIGZvciBjb250YWlubWVudAorICogQHBhcmFtIHNldDIgc2V0IHRvIGJlIGNoZWNr
ZWQgZm9yIGNvbnRhaW5tZW50CisgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHRlc3QgY29uZGl0aW9u
IGlzIG1ldAorICogQGRyYWZ0IElDVSAzLjIKKyAqLworVV9EUkFGVCBVQm9vbCBVX0VYUE9SVDIK
K3VzZXRfY29udGFpbnNBbGwoY29uc3QgVVNldCogc2V0MSwgY29uc3QgVVNldCogc2V0Mik7CisK
Ky8qKgorICogUmV0dXJucyB0cnVlIGlmIHNldDEgY29udGFpbnMgbm9uZSBvZiB0aGUgY2hhcmFj
dGVycyBhbmQgc3RyaW5ncworICogb2Ygc2V0Mi4gSXQgYW5zd2VycyB0aGUgcXVlc3Rpb24sICdJ
cyBzZXQxIGEgZGlzam9pbnQgc2V0IG9mIHNldDI/JworICogQHBhcmFtIHNldDEgc2V0IHRvIGJl
IGNoZWNrZWQgZm9yIGNvbnRhaW5tZW50CisgKiBAcGFyYW0gc2V0MiBzZXQgdG8gYmUgY2hlY2tl
ZCBmb3IgY29udGFpbm1lbnQKKyAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBjb25kaXRpb24g
aXMgbWV0CisgKiBAZHJhZnQgSUNVIDMuMgorICovCitVX0RSQUZUIFVCb29sIFVfRVhQT1JUMgor
dXNldF9jb250YWluc05vbmUoY29uc3QgVVNldCogc2V0MSwgY29uc3QgVVNldCogc2V0Mik7CisK
Ky8qKgorICogUmV0dXJucyB0cnVlIGlmIHNldDEgY29udGFpbnMgc29tZSBvZiB0aGUgY2hhcmFj
dGVycyBhbmQgc3RyaW5ncworICogb2Ygc2V0Mi4gSXQgYW5zd2VycyB0aGUgcXVlc3Rpb24sICdE
b2VzIHNldDEgYW5kIHNldDIgaGF2ZSBhbiBpbnRlcnNlY3Rpb24/JworICogQHBhcmFtIHNldDEg
c2V0IHRvIGJlIGNoZWNrZWQgZm9yIGNvbnRhaW5tZW50CisgKiBAcGFyYW0gc2V0MiBzZXQgdG8g
YmUgY2hlY2tlZCBmb3IgY29udGFpbm1lbnQKKyAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGVzdCBj
b25kaXRpb24gaXMgbWV0CisgKiBAZHJhZnQgSUNVIDMuMgorICovCitVX0RSQUZUIFVCb29sIFVf
RVhQT1JUMgordXNldF9jb250YWluc1NvbWUoY29uc3QgVVNldCogc2V0MSwgY29uc3QgVVNldCog
c2V0Mik7CisKKy8qKgorICogUmV0dXJucyB0cnVlIGlmIHNldDEgY29udGFpbnMgYWxsIG9mIHRo
ZSBjaGFyYWN0ZXJzIGFuZCBzdHJpbmdzCisgKiBvZiBzZXQyLCBhbmQgdmlzIHZlcnNhLiBJdCBh
bnN3ZXJzIHRoZSBxdWVzdGlvbiwgJ0lzIHNldDEgZXF1YWwgdG8gc2V0Mj8nCisgKiBAcGFyYW0g
c2V0MSBzZXQgdG8gYmUgY2hlY2tlZCBmb3IgY29udGFpbm1lbnQKKyAqIEBwYXJhbSBzZXQyIHNl
dCB0byBiZSBjaGVja2VkIGZvciBjb250YWlubWVudAorICogQHJldHVybiB0cnVlIGlmIHRoZSB0
ZXN0IGNvbmRpdGlvbiBpcyBtZXQKKyAqIEBkcmFmdCBJQ1UgMy4yCisgKi8KK1VfRFJBRlQgVUJv
b2wgVV9FWFBPUlQyCit1c2V0X2VxdWFscyhjb25zdCBVU2V0KiBzZXQxLCBjb25zdCBVU2V0KiBz
ZXQyKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgorICogU2VyaWFsaXplZCBzZXQgQVBJCisgKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworCisvKioKKyAqIFNlcmlhbGl6ZXMgdGhpcyBzZXQgaW50byBhbiBhcnJheSBvZiAxNi1i
aXQgaW50ZWdlcnMuICBTZXJpYWxpemF0aW9uCisgKiAoY3VycmVudGx5KSBvbmx5IHJlY29yZHMg
dGhlIGNoYXJhY3RlcnMgaW4gdGhlIHNldDsgbXVsdGljaGFyYWN0ZXIKKyAqIHN0cmluZ3MgYXJl
IGlnbm9yZWQuCisgKgorICogVGhlIGFycmF5CisgKiBoYXMgZm9sbG93aW5nIGZvcm1hdCAoZWFj
aCBsaW5lIGlzIG9uZSAxNi1iaXQgaW50ZWdlcik6CisgKgorICogIGxlbmd0aCAgICAgPSAobisy
Km0pIHwgKG0hPTA/MHg4MDAwOjApCisgKiAgYm1wTGVuZ3RoICA9IG47IHByZXNlbnQgaWYgbSE9
MAorICogIGJtcFswXQorICogIGJtcFsxXQorICogIC4uLgorICogIGJtcFtuLTFdCisgKiAgc3Vw
cC1oaWdoWzBdCisgKiAgc3VwcC1sb3dbMF0KKyAqICBzdXBwLWhpZ2hbMV0KKyAqICBzdXBwLWxv
d1sxXQorICogIC4uLgorICogIHN1cHAtaGlnaFttLTFdCisgKiAgc3VwcC1sb3dbbS0xXQorICoK
KyAqIFRoZSBhcnJheSBzdGFydHMgd2l0aCBhIGhlYWRlci4gIEFmdGVyIHRoZSBoZWFkZXIgYXJl
IG4gYm1wCisgKiBjb2RlIHBvaW50cywgdGhlbiBtIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludHMu
ICBFaXRoZXIgbiBvciBtCisgKiBvciBib3RoIG1heSBiZSB6ZXJvLiAgbisyKm0gaXMgYWx3YXlz
IDw9IDB4N0ZGRi4KKyAqCisgKiBJZiB0aGVyZSBhcmUgbm8gc3VwcGxlbWVudGFyeSBjaGFyYWN0
ZXJzIChpZiBtPT0wKSB0aGVuIHRoZQorICogaGVhZGVyIGlzIG9uZSAxNi1iaXQgaW50ZWdlciwg
J2xlbmd0aCcsIHdpdGggdmFsdWUgbi4KKyAqCisgKiBJZiB0aGVyZSBhcmUgc3VwcGxlbWVudGFy
eSBjaGFyYWN0ZXJzIChpZiBtIT0wKSB0aGVuIHRoZSBoZWFkZXIKKyAqIGlzIHR3byAxNi1iaXQg
aW50ZWdlcnMuICBUaGUgZmlyc3QsICdsZW5ndGgnLCBoYXMgdmFsdWUKKyAqIChuKzIqbSl8MHg4
MDAwLiAgVGhlIHNlY29uZCwgJ2JtcExlbmd0aCcsIGhhcyB2YWx1ZSBuLgorICoKKyAqIEFmdGVy
IHRoZSBoZWFkZXIgdGhlIGNvZGUgcG9pbnRzIGFyZSBzdG9yZWQgaW4gYXNjZW5kaW5nIG9yZGVy
LgorICogU3VwcGxlbWVudGFyeSBjb2RlIHBvaW50cyBhcmUgc3RvcmVkIGFzIG1vc3Qgc2lnbmlm
aWNhbnQgMTYKKyAqIGJpdHMgZm9sbG93ZWQgYnkgbGVhc3Qgc2lnbmlmaWNhbnQgMTYgYml0cy4K
KyAqCisgKiBAcGFyYW0gc2V0IHRoZSBzZXQKKyAqIEBwYXJhbSBkZXN0IHBvaW50ZXIgdG8gYnVm
ZmVyIG9mIGRlc3RDYXBhY2l0eSAxNi1iaXQgaW50ZWdlcnMuCisgKiBNYXkgYmUgTlVMTCBvbmx5
IGlmIGRlc3RDYXBhY2l0eSBpcyB6ZXJvLgorICogQHBhcmFtIGRlc3RDYXBhY2l0eSBzaXplIG9m
IGRlc3QsIG9yIHplcm8uICBNdXN0IG5vdCBiZSBuZWdhdGl2ZS4KKyAqIEBwYXJhbSBwRXJyb3JD
b2RlIHBvaW50ZXIgdG8gdGhlIGVycm9yIGNvZGUuICBXaWxsIGJlIHNldCB0bworICogVV9JTkRF
WF9PVVRPRkJPVU5EU19FUlJPUiBpZiBuKzIqbSA+IDB4N0ZGRi4gIFdpbGwgYmUgc2V0IHRvCisg
KiBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUiBpZiBuKzIqbSsobSE9MD8yOjEpID4gZGVzdENhcGFj
aXR5LgorICogQHJldHVybiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBzZXJpYWxpemVkIGZvcm1h
dCwgaW5jbHVkaW5nCisgKiB0aGUgaGVhZGVyLCB0aGF0IGlzLCBuKzIqbSsobSE9MD8yOjEpLCBv
ciAwIG9uIGVycm9yIG90aGVyCisgKiB0aGFuIFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SLgorICog
QHN0YWJsZSBJQ1UgMi40CisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCit1c2V0X3Nl
cmlhbGl6ZShjb25zdCBVU2V0KiBzZXQsIHVpbnQxNl90KiBkZXN0LCBpbnQzMl90IGRlc3RDYXBh
Y2l0eSwgVUVycm9yQ29kZSogcEVycm9yQ29kZSk7CisKKy8qKgorICogR2l2ZW4gYSBzZXJpYWxp
emVkIGFycmF5LCBmaWxsIGluIHRoZSBnaXZlbiBzZXJpYWxpemVkIHNldCBvYmplY3QuCisgKiBA
cGFyYW0gZmlsbFNldCBwb2ludGVyIHRvIHJlc3VsdAorICogQHBhcmFtIHNyYyBwb2ludGVyIHRv
IHN0YXJ0IG9mIGFycmF5CisgKiBAcGFyYW0gc3JjTGVuZ3RoIGxlbmd0aCBvZiBhcnJheQorICog
QHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBhcnJheSBpcyB2YWxpZCwgb3RoZXJ3aXNlIGZhbHNl
CisgKiBAc3RhYmxlIElDVSAyLjQKKyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyCit1c2V0
X2dldFNlcmlhbGl6ZWRTZXQoVVNlcmlhbGl6ZWRTZXQqIGZpbGxTZXQsIGNvbnN0IHVpbnQxNl90
KiBzcmMsIGludDMyX3Qgc3JjTGVuZ3RoKTsKKworLyoqCisgKiBTZXQgdGhlIFVTZXJpYWxpemVk
U2V0IHRvIGNvbnRhaW4gdGhlIGdpdmVuIGNoYXJhY3RlciAoYW5kIG5vdGhpbmcKKyAqIGVsc2Up
LgorICogQHBhcmFtIGZpbGxTZXQgcG9pbnRlciB0byByZXN1bHQKKyAqIEBwYXJhbSBjIFRoZSBj
b2RlcG9pbnQgdG8gc2V0CisgKiBAc3RhYmxlIElDVSAyLjQKKyAqLworVV9TVEFCTEUgdm9pZCBV
X0VYUE9SVDIKK3VzZXRfc2V0U2VyaWFsaXplZFRvT25lKFVTZXJpYWxpemVkU2V0KiBmaWxsU2V0
LCBVQ2hhcjMyIGMpOworCisvKioKKyAqIFJldHVybnMgVFJVRSBpZiB0aGUgZ2l2ZW4gVVNlcmlh
bGl6ZWRTZXQgY29udGFpbnMgdGhlIGdpdmVuCisgKiBjaGFyYWN0ZXIuCisgKiBAcGFyYW0gc2V0
IHRoZSBzZXJpYWxpemVkIHNldAorICogQHBhcmFtIGMgVGhlIGNvZGVwb2ludCB0byBjaGVjayBm
b3Igd2l0aGluIHRoZSBzZXQKKyAqIEByZXR1cm4gdHJ1ZSBpZiBzZXQgY29udGFpbnMgYworICog
QHN0YWJsZSBJQ1UgMi40CisgKi8KK1VfU1RBQkxFIFVCb29sIFVfRVhQT1JUMgordXNldF9zZXJp
YWxpemVkQ29udGFpbnMoY29uc3QgVVNlcmlhbGl6ZWRTZXQqIHNldCwgVUNoYXIzMiBjKTsKKwor
LyoqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGlzam9pbnQgcmFuZ2VzIG9mIGNoYXJhY3Rl
cnMgY29udGFpbmVkIGluCisgKiB0aGUgZ2l2ZW4gc2VyaWFsaXplZCBzZXQuICBJZ25vcmVzIGFu
eSBzdHJpbmdzIGNvbnRhaW5lZCBpbiB0aGUKKyAqIHNldC4KKyAqIEBwYXJhbSBzZXQgdGhlIHNl
cmlhbGl6ZWQgc2V0CisgKiBAcmV0dXJuIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgY291bnRpbmcg
dGhlIGNoYXJhY3RlciByYW5nZXMKKyAqIGNvbnRhaW5lZCBpbiBzZXQKKyAqIEBzdGFibGUgSUNV
IDIuNAorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgordXNldF9nZXRTZXJpYWxpemVk
UmFuZ2VDb3VudChjb25zdCBVU2VyaWFsaXplZFNldCogc2V0KTsKKworLyoqCisgKiBSZXR1cm5z
IGEgcmFuZ2Ugb2YgY2hhcmFjdGVycyBjb250YWluZWQgaW4gdGhlIGdpdmVuIHNlcmlhbGl6ZWQK
KyAqIHNldC4KKyAqIEBwYXJhbSBzZXQgdGhlIHNlcmlhbGl6ZWQgc2V0CisgKiBAcGFyYW0gcmFu
Z2VJbmRleCBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGluIHRoZSByYW5nZSAwLi4KKyAqIHVzZXRf
Z2V0U2VyaWFsaXplZFJhbmdlQ291bnQoc2V0KS0xCisgKiBAcGFyYW0gcFN0YXJ0IHBvaW50ZXIg
dG8gdmFyaWFibGUgdG8gcmVjZWl2ZSBmaXJzdCBjaGFyYWN0ZXIKKyAqIGluIHJhbmdlLCBpbmNs
dXNpdmUKKyAqIEBwYXJhbSBwRW5kIHBvaW50ZXIgdG8gdmFyaWFibGUgdG8gcmVjZWl2ZSBsYXN0
IGNoYXJhY3RlciBpbiByYW5nZSwKKyAqIGluY2x1c2l2ZQorICogQHJldHVybiB0cnVlIGlmIHJh
bmdlSW5kZXggaXMgdmFsaWQsIG90aGVyd2lzZSBmYWxzZQorICogQHN0YWJsZSBJQ1UgMi40Cisg
Ki8KK1VfU1RBQkxFIFVCb29sIFVfRVhQT1JUMgordXNldF9nZXRTZXJpYWxpemVkUmFuZ2UoY29u
c3QgVVNlcmlhbGl6ZWRTZXQqIHNldCwgaW50MzJfdCByYW5nZUluZGV4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgVUNoYXIzMiogcFN0YXJ0LCBVQ2hhcjMyKiBwRW5kKTsKKworI2VuZGlmCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2ljdS91bmljb2RlL3VzZXQuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL3htbC9YU0xU
UHJvY2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNw
cAkocmV2aXNpb24gMjc5MzYpCisrKyBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29k
ZXIuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJYU0xURXh0ZW5zaW9u
cy5oIgorI2luY2x1ZGUgIlhTTFRVbmljb2RlU29ydC5oIgogI2luY2x1ZGUgImxvYWRlci5oIgog
I2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgPGxpYnhzbHQvaW1wb3J0cy5oPgpAQCAtNjMs
NiArNjQsNyBAQCBTT0ZUX0xJTksobGlieHNsdCwgeHNsdEZyZWVUcmFuc2Zvcm1Db250CiBTT0ZU
X0xJTksobGlieHNsdCwgeHNsdE5ld1RyYW5zZm9ybUNvbnRleHQsIHhzbHRUcmFuc2Zvcm1Db250
ZXh0UHRyLCAoeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUsIHhtbERvY1B0ciBkb2MpLCAoc3R5bGUs
IGRvYykpCiBTT0ZUX0xJTksobGlieHNsdCwgeHNsdEFwcGx5U3R5bGVzaGVldFVzZXIsIHhtbERv
Y1B0ciwgKHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlLCB4bWxEb2NQdHIgZG9jLCBjb25zdCBjaGFy
KiogcGFyYW1zLCBjb25zdCBjaGFyKiBvdXRwdXQsIEZJTEUqIHByb2ZpbGUsIHhzbHRUcmFuc2Zv
cm1Db250ZXh0UHRyIHVzZXJDdHh0KSwgKHN0eWxlLCBkb2MsIHBhcmFtcywgb3V0cHV0LCBwcm9m
aWxlLCB1c2VyQ3R4dCkpCiBTT0ZUX0xJTksobGlieHNsdCwgeHNsdFF1b3RlVXNlclBhcmFtcywg
aW50LCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwgY29uc3QgY2hhcioqIHBhcmFtcyks
IChjdHh0LCBwYXJhbXMpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRTZXRDdHh0U29ydEZ1bmMs
IHZvaWQsICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCB4c2x0U29ydEZ1bmMgaGFuZGxl
ciksIChjdHh0LCBoYW5kbGVyKSkKIFNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0U2V0TG9hZGVyRnVu
Yywgdm9pZCwgKHhzbHREb2NMb2FkZXJGdW5jIGYpLCAoZikpCiBTT0ZUX0xJTksobGlieHNsdCwg
eHNsdFNhdmVSZXN1bHRUbywgaW50LCAoeG1sT3V0cHV0QnVmZmVyUHRyIGJ1ZiwgeG1sRG9jUHRy
IHJlc3VsdCwgeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUpLCAoYnVmLCByZXN1bHQsIHN0eWxlKSkK
IFNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0TmV4dEltcG9ydCwgeHNsdFN0eWxlc2hlZXRQdHIsICh4
c2x0U3R5bGVzaGVldFB0ciBzdHlsZSksIChzdHlsZSkpCkBAIC0zNDksNiArMzUxLDExIEBAIGJv
b2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm8KIAogICAgICAgICB4c2x0VHJh
bnNmb3JtQ29udGV4dFB0ciB0cmFuc2Zvcm1Db250ZXh0ID0geHNsdE5ld1RyYW5zZm9ybUNvbnRl
eHQoc2hlZXQsIHNvdXJjZURvYyk7CiAgICAgICAgIHJlZ2lzdGVyWFNMVEV4dGVuc2lvbnModHJh
bnNmb3JtQ29udGV4dCk7CisjaWYgVVNFKElDVV9VTklDT0RFKQorICAgICAgICAvLyA8aHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzc+OiBYU0xUIHByb2Nlc3NvciA8
eHNsOnNvcnQ+IGFsZ29yaXRobSBvbmx5IGNvbXBhcmVzIGJ5IGNvZGUgcG9pbnQKKyAgICAgICAg
Ly8gT25seSBpbXBsZW1lbnRlZCBmb3IgSUNVIHlldC4KKyAgICAgICAgeHNsdFNldEN0eHRTb3J0
RnVuYyh0cmFuc2Zvcm1Db250ZXh0LCB4c2x0VW5pY29kZVNvcnRGdW5jdGlvbik7CisjZW5kaWYK
IAogICAgICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gbGlieHNsdC4g
CiAgICAgICAgIC8vIFRoZSBidWcgaGFzIGJlZW4gZml4ZWQgaW4gdmVyc2lvbiAxLjEuMTMsIHNv
IG9uY2Ugd2Ugc2hpcCB0aGF0IHRoaXMgY2FuIGJlIHJlbW92ZWQuCkluZGV4OiBXZWJDb3JlL3ht
bC9YU0xUVW5pY29kZVNvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTFRVbmlj
b2RlU29ydC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlhTTFRVbmljb2RlU29ydC5oIgorCisjaWYgRU5BQkxFKFhTTFQpICYmIFVTRShJ
Q1VfVU5JQ09ERSkKKworI2luY2x1ZGUgPGxpYnhzbHQvdGVtcGxhdGVzLmg+CisjaW5jbHVkZSA8
bGlieHNsdC94c2x0dXRpbHMuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjbnYuaD4KKyNpbmNsdWRl
IDx1bmljb2RlL3Vjb2wuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VzdHJpbmcuaD4KKworI2lmIFBM
QVRGT1JNKE1BQykKKyNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgorI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShNQUMpCitTT0ZUX0xJTktfTElCUkFSWShsaWJ4c2x0KQorU09GVF9MSU5LKGxpYnhzbHQs
IHhzbHRDb21wdXRlU29ydFJlc3VsdCwgeG1sWFBhdGhPYmplY3RQdHIqLCAoeHNsdFRyYW5zZm9y
bUNvbnRleHRQdHIgY3R4dCwgeG1sTm9kZVB0ciBzb3J0KSwgKGN0eHQsIHNvcnQpKQorU09GVF9M
SU5LKGxpYnhzbHQsIHhzbHRFdmFsQXR0clZhbHVlVGVtcGxhdGUsIHhtbENoYXIqLCAoeHNsdFRy
YW5zZm9ybUNvbnRleHRQdHIgY3R4dCwgeG1sTm9kZVB0ciBub2RlLCBjb25zdCB4bWxDaGFyICpu
YW1lLCBjb25zdCB4bWxDaGFyICpucyksIChjdHh0LCBub2RlLCBuYW1lLCBucykpCisKK3N0YXRp
YyB2b2lkIGluaXRfeHNsdFRyYW5zZm9ybUVycm9yKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0
eHQsIHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlLCB4bWxOb2RlUHRyIG5vZGUsIGNvbnN0IGNoYXIg
KiwgLi4uKQorI2lmIENPTVBJTEVSKEdDQykKKyAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChw
cmludGYsIDQsIDUpKSkKKyNlbmRpZgorOworc3RhdGljIHZvaWQgKCpzb2Z0TGlua194c2x0VHJh
bnNmb3JtRXJyb3IpKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQsIHhzbHRTdHlsZXNoZWV0
UHRyIHN0eWxlLCB4bWxOb2RlUHRyIG5vZGUsIGNvbnN0IGNoYXIgKiwgLi4uKSA9IGluaXRfeHNs
dFRyYW5zZm9ybUVycm9yOworCitzdGF0aWMgdm9pZCBpbml0X3hzbHRUcmFuc2Zvcm1FcnJvcih4
c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCB4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSwgeG1s
Tm9kZVB0ciBub2RlLCBjb25zdCBjaGFyKiBtc2csIC4uLikKK3sKKyAgICBzb2Z0TGlua194c2x0
VHJhbnNmb3JtRXJyb3IgPSAodm9pZCAoKikgKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQs
IHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlLCB4bWxOb2RlUHRyIG5vZGUsIGNvbnN0IGNoYXIgKiwg
Li4uKSlkbHN5bShsaWJ4c2x0TGlicmFyeSgpLCAieHNsdFRyYW5zZm9ybUVycm9yIik7CisgICAg
QVNTRVJUKHNvZnRMaW5rX3hzbHRUcmFuc2Zvcm1FcnJvcik7CisKKyAgICB2YV9saXN0IGFyZ3M7
CisgICAgdmFfc3RhcnQoYXJncywgbXNnKTsKKyNpZiBQTEFURk9STShXSU5fT1MpCisgICAgY2hh
ciBzdHJbMTAyNF07CisgICAgdnNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0cikgLSAxLCBtc2csIGFy
Z3MpOworI2Vsc2UKKyAgICBjaGFyKiBzdHI7CisgICAgdmFzcHJpbnRmKCZzdHIsIG1zZywgYXJn
cyk7CisjZW5kaWYKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICBzb2Z0TGlua194c2x0VHJhbnNm
b3JtRXJyb3IoY3R4dCwgc3R5bGUsIG5vZGUsICIlcyIsIHN0cik7CisKKyNpZiAhUExBVEZPUk0o
V0lOX09TKQorICAgIGZyZWUoc3RyKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCB4c2x0VHJh
bnNmb3JtRXJyb3IoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwgeHNsdFN0eWxlc2hlZXRQ
dHIgc3R5bGUsIHhtbE5vZGVQdHIgbm9kZSwgY29uc3QgY2hhciogbXNnLCAuLi4pCisjaWYgQ09N
UElMRVIoR0NDKQorICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgNCwgNSkpKQor
I2VuZGlmCis7CisKK2lubGluZSB2b2lkIHhzbHRUcmFuc2Zvcm1FcnJvcih4c2x0VHJhbnNmb3Jt
Q29udGV4dFB0ciBjdHh0LCB4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSwgeG1sTm9kZVB0ciBub2Rl
LCBjb25zdCBjaGFyKiBtc2csIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3Rh
cnQoYXJncywgbXNnKTsKKyNpZiBQTEFURk9STShXSU5fT1MpCisgICAgY2hhciBzdHJbMTAyNF07
CisgICAgdnNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0cikgLSAxLCBtc2csIGFyZ3MpOworI2Vsc2UK
KyAgICBjaGFyKiBzdHI7CisgICAgdmFzcHJpbnRmKCZzdHIsIG1zZywgYXJncyk7CisjZW5kaWYK
KyAgICB2YV9lbmQoYXJncyk7CisKKyAgICBzb2Z0TGlua194c2x0VHJhbnNmb3JtRXJyb3IoY3R4
dCwgc3R5bGUsIG5vZGUsICIlcyIsIHN0cik7CisKKyNpZiAhUExBVEZPUk0oV0lOX09TKQorICAg
IGZyZWUoc3RyKTsKKyNlbmRpZgorfQorCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBCYXNlZCBvbiBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZyb20gbGlieHNsdCAxLjEuMjIg
YW5kIHhzbHRJQ1VTb3J0LmMgZXhhbXBsZS4KK3ZvaWQgeHNsdFVuaWNvZGVTb3J0RnVuY3Rpb24o
eHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwgeG1sTm9kZVB0ciAqc29ydHMsIGludCBuYnNv
cnRzKQoreworI2lmZGVmIFhTTFRfUkVGQUNUT1JFRAorICAgIHhzbHRTdHlsZUl0ZW1Tb3J0UHRy
IGNvbXA7CisjZWxzZQorICAgIHhzbHRTdHlsZVByZUNvbXBQdHIgY29tcDsKKyNlbmRpZgorICAg
IHhtbFhQYXRoT2JqZWN0UHRyICpyZXN1bHRzVGFiW1hTTFRfTUFYX1NPUlRdOworICAgIHhtbFhQ
YXRoT2JqZWN0UHRyICpyZXN1bHRzID0gTlVMTCwgKnJlczsKKyAgICB4bWxOb2RlU2V0UHRyIGxp
c3QgPSBOVUxMOworICAgIGludCBkZXNjZW5kaW5nLCBudW1iZXIsIGRlc2MsIG51bWI7CisgICAg
aW50IGxlbiA9IDA7CisgICAgaW50IGksIGosIGluY3I7CisgICAgaW50IHRzdDsKKyAgICBpbnQg
ZGVwdGg7CisgICAgeG1sTm9kZVB0ciBub2RlOworICAgIHhtbFhQYXRoT2JqZWN0UHRyIHRtcDsg
ICAgCisgICAgaW50IHRlbXBzdHlwZVtYU0xUX01BWF9TT1JUXSwgdGVtcG9yZGVyW1hTTFRfTUFY
X1NPUlRdOworCisgICAgLyogU3RhcnQgSUNVIGNoYW5nZSAqLworICAgIFVDb2xsYXRvciAqY29s
bCA9IDA7CisgICAgVUNvbnZlcnRlciAqY29udjsKKyAgICBVRXJyb3JDb2RlIHN0YXR1czsKKyAg
ICBVQ2hhciAqdGFyZ2V0LCp0YXJnZXQyOworICAgIGludCB0YXJnZXRsZW4sIHRhcmdldDJsZW47
CisgICAgLyogRW5kIElDVSBjaGFuZ2UgKi8KKworICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAo
c29ydHMgPT0gTlVMTCkgfHwgKG5ic29ydHMgPD0gMCkgfHwKKyAgICAgICAgKG5ic29ydHMgPj0g
WFNMVF9NQVhfU09SVCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc29ydHNbMF0gPT0gTlVM
TCkKKyAgICAgICAgcmV0dXJuOworICAgIGNvbXAgPSBzdGF0aWNfY2FzdDx4c2x0U3R5bGVQcmVD
b21wKj4oc29ydHNbMF0tPnBzdmkpOworICAgIGlmIChjb21wID09IE5VTEwpCisgICAgICAgIHJl
dHVybjsKKworICAgIGxpc3QgPSBjdHh0LT5ub2RlTGlzdDsKKyAgICBpZiAoKGxpc3QgPT0gTlVM
TCkgfHwgKGxpc3QtPm5vZGVOciA8PSAxKSkKKyAgICAgICAgcmV0dXJuOyAvKiBub3RoaW5nIHRv
IGRvICovCisKKyAgICBmb3IgKGogPSAwOyBqIDwgbmJzb3J0czsgaisrKSB7CisgICAgICAgIGNv
bXAgPSBzdGF0aWNfY2FzdDx4c2x0U3R5bGVQcmVDb21wKj4oc29ydHNbal0tPnBzdmkpOworICAg
ICAgICB0ZW1wc3R5cGVbal0gPSAwOworICAgICAgICBpZiAoKGNvbXAtPnN0eXBlID09IE5VTEwp
ICYmIChjb21wLT5oYXNfc3R5cGUgIT0gMCkpIHsKKyAgICAgICAgICAgIGNvbXAtPnN0eXBlID0K
KyAgICAgICAgICAgICAgICB4c2x0RXZhbEF0dHJWYWx1ZVRlbXBsYXRlKGN0eHQsIHNvcnRzW2pd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHhtbENo
YXIgKikgImRhdGEtdHlwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYU0xUX05BTUVTUEFDRSk7CisgICAgICAgICAgICBpZiAoY29tcC0+c3R5cGUgIT0gTlVM
TCkgeworICAgICAgICAgICAgICAgIHRlbXBzdHlwZVtqXSA9IDE7CisgICAgICAgICAgICAgICAg
aWYgKHhtbFN0ckVxdWFsKGNvbXAtPnN0eXBlLCAoY29uc3QgeG1sQ2hhciAqKSAidGV4dCIpKQor
ICAgICAgICAgICAgICAgICAgICBjb21wLT5udW1iZXIgPSAwOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHhtbFN0ckVxdWFsKGNvbXAtPnN0eXBlLCAoY29uc3QgeG1sQ2hhciAqKSAibnVtYmVy
IikpCisgICAgICAgICAgICAgICAgICAgIGNvbXAtPm51bWJlciA9IDE7CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHhzbHRUcmFuc2Zvcm1FcnJvcihjdHh0LCBO
VUxMLCBzb3J0c1tqXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInhzbHREb1NvcnRGdW5j
dGlvbjogbm8gc3VwcG9ydCBmb3IgZGF0YS10eXBlID0gJXNcbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcC0+c3R5cGUpOworICAgICAgICAgICAgICAgICAgICBj
b21wLT5udW1iZXIgPSAwOyAvKiB1c2UgZGVmYXVsdCAqLworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0ZW1wb3JkZXJbal0gPSAwOworICAgICAg
ICBpZiAoKGNvbXAtPm9yZGVyID09IE5VTEwpICYmIChjb21wLT5oYXNfb3JkZXIgIT0gMCkpIHsK
KyAgICAgICAgICAgIGNvbXAtPm9yZGVyID0geHNsdEV2YWxBdHRyVmFsdWVUZW1wbGF0ZShjdHh0
LCBzb3J0c1tqXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY29uc3QgeG1sQ2hhciAqKSAib3JkZXIiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhTTFRfTkFNRVNQQUNFKTsKKyAgICAgICAg
ICAgIGlmIChjb21wLT5vcmRlciAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgdGVtcG9yZGVy
W2pdID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoeG1sU3RyRXF1YWwoY29tcC0+b3JkZXIsIChj
b25zdCB4bWxDaGFyICopICJhc2NlbmRpbmciKSkKKyAgICAgICAgICAgICAgICAgICAgY29tcC0+
ZGVzY2VuZGluZyA9IDA7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoeG1sU3RyRXF1YWwoY29t
cC0+b3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHht
bENoYXIgKikgImRlc2NlbmRpbmciKSkKKyAgICAgICAgICAgICAgICAgICAgY29tcC0+ZGVzY2Vu
ZGluZyA9IDE7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHhz
bHRUcmFuc2Zvcm1FcnJvcihjdHh0LCBOVUxMLCBzb3J0c1tqXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInhzbHREb1NvcnRGdW5jdGlvbjogaW52YWxpZCB2YWx1ZSAlcyBmb3Igb3Jk
ZXJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC0+b3JkZXIp
OworICAgICAgICAgICAgICAgICAgICBjb21wLT5kZXNjZW5kaW5nID0gMDsgLyogdXNlIGRlZmF1
bHQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBsZW4gPSBsaXN0LT5ub2RlTnI7CisKKyAgICByZXN1bHRzVGFiWzBdID0geHNsdENv
bXB1dGVTb3J0UmVzdWx0KGN0eHQsIHNvcnRzWzBdKTsKKyAgICBmb3IgKGkgPSAxO2kgPCBYU0xU
X01BWF9TT1JUO2krKykKKyAgICAgICAgcmVzdWx0c1RhYltpXSA9IE5VTEw7CisKKyAgICByZXN1
bHRzID0gcmVzdWx0c1RhYlswXTsKKworICAgIGNvbXAgPSBzdGF0aWNfY2FzdDx4c2x0U3R5bGVQ
cmVDb21wKj4oc29ydHNbMF0tPnBzdmkpOworICAgIGRlc2NlbmRpbmcgPSBjb21wLT5kZXNjZW5k
aW5nOworICAgIG51bWJlciA9IGNvbXAtPm51bWJlcjsKKyAgICBpZiAocmVzdWx0cyA9PSBOVUxM
KQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBTdGFydCBJQ1UgY2hhbmdlICovCisgICAgc3Rh
dHVzID0gVV9aRVJPX0VSUk9SOworICAgIGNvbnYgPSB1Y252X29wZW4oIlVURjgiLCAmc3RhdHVz
KTsKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCisgICAgICAgIHhzbHRUcmFuc2Zvcm1FcnJv
cihjdHh0LCBOVUxMLCBOVUxMLCAieHNsdElDVVNvcnRGdW5jdGlvbjogRXJyb3Igb3BlbmluZyBj
b252ZXJ0ZXJcbiIpOworCisgICAgaWYgKGNvbXAtPmhhc19sYW5nKSAKKyAgICAgICAgY29sbCA9
IHVjb2xfb3BlbigoY29uc3QgY2hhciopY29tcC0+bGFuZywgJnN0YXR1cyk7CisgICAgaWYgKFVf
RkFJTFVSRShzdGF0dXMpIHx8ICFjb21wLT5oYXNfbGFuZykgeworICAgICAgICBzdGF0dXMgPSBV
X1pFUk9fRVJST1I7CisgICAgICAgIGNvbGwgPSB1Y29sX29wZW4oImVuIiwgJnN0YXR1cyk7Cisg
ICAgfQorICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgeHNsdFRyYW5zZm9ybUVy
cm9yKGN0eHQsIE5VTEwsIE5VTEwsICJ4c2x0SUNVU29ydEZ1bmN0aW9uOiBFcnJvciBvcGVuaW5n
IGNvbGxhdG9yXG4iKTsKKworICAgIGlmIChjb21wLT5sb3dlcl9maXJzdCkgCisgICAgICAgIHVj
b2xfc2V0QXR0cmlidXRlKGNvbGwsVUNPTF9DQVNFX0ZJUlNULFVDT0xfTE9XRVJfRklSU1QsJnN0
YXR1cyk7CisgICAgZWxzZSAKKyAgICAgICAgdWNvbF9zZXRBdHRyaWJ1dGUoY29sbCxVQ09MX0NB
U0VfRklSU1QsVUNPTF9VUFBFUl9GSVJTVCwmc3RhdHVzKTsKKyAgICBpZiAoVV9GQUlMVVJFKHN0
YXR1cykpCisgICAgICAgIHhzbHRUcmFuc2Zvcm1FcnJvcihjdHh0LCBOVUxMLCBOVUxMLCAieHNs
dElDVVNvcnRGdW5jdGlvbjogRXJyb3Igc2V0dGluZyBjb2xsYXRvciBhdHRyaWJ1dGVcbiIpOwor
ICAgIC8qIEVuZCBJQ1UgY2hhbmdlICovCisKKyAgICAvKiBTaGVsbCdzIHNvcnQgb2Ygbm9kZS1z
ZXQgKi8KKyAgICBmb3IgKGluY3IgPSBsZW4gLyAyOyBpbmNyID4gMDsgaW5jciAvPSAyKSB7Cisg
ICAgICAgIGZvciAoaSA9IGluY3I7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgaiA9IGkg
LSBpbmNyOworICAgICAgICAgICAgaWYgKHJlc3VsdHNbaV0gPT0gTlVMTCkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKGogPj0gMCkg
eworICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzW2pdID09IE5VTEwpCisgICAgICAgICAgICAg
ICAgICAgIHRzdCA9IDE7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIG1ha2UgTmFO
IHNtYWxsZXIgdGhhbiBudW1iZXIgaW4gYWNjb3JkYW5jZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2l0aCBYU0xUIHNwZWMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4bWxY
UGF0aElzTmFOKHJlc3VsdHNbal0tPmZsb2F0dmFsKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh4bWxYUGF0aElzTmFOKHJlc3VsdHNbaiArIGluY3JdLT5mbG9hdHZhbCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdCA9IDA7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3QgPSAt
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeG1sWFBhdGhJc05hTihyZXN1
bHRzW2ogKyBpbmNyXS0+ZmxvYXR2YWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRz
dCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRzW2pdLT5mbG9h
dHZhbCA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2ogKyBpbmNy
XS0+ZmxvYXR2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0ID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdHNbal0tPmZsb2F0dmFsID4gCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbaiArIGluY3JdLT5mbG9hdHZhbCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3QgPSAxOworICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSB0c3QgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IElDVSBjaGFuZ2UgKi8KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRhcmdldGxlbiA9IHhtbFN0cmxlbihyZXN1bHRzW2pdLT5zdHJpbmd2YWwpICog
MjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDJsZW4gPSB4bWxTdHJsZW4ocmVzdWx0
c1tqICsgaW5jcl0tPnN0cmluZ3ZhbCkgKiAyOworICAgICAgICAgICAgICAgICAgICAgICAgdGFy
Z2V0ID0gKFVDaGFyKil4bWxNYWxsb2ModGFyZ2V0bGVuICogc2l6ZW9mKFVDaGFyKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0YXJnZXQyID0gKFVDaGFyKil4bWxNYWxsb2ModGFyZ2V0Mmxl
biAqIHNpemVvZihVQ2hhcikpOworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0bGVuID0g
dWNudl90b1VDaGFycyhjb252LCB0YXJnZXQsIHRhcmdldGxlbiwgKGNvbnN0IGNoYXIqKXJlc3Vs
dHNbal0tPnN0cmluZ3ZhbCwgLTEsICZzdGF0dXMpOworICAgICAgICAgICAgICAgICAgICAgICAg
dGFyZ2V0MmxlbiA9IHVjbnZfdG9VQ2hhcnMoY29udiwgdGFyZ2V0MiwgdGFyZ2V0MmxlbiwgKGNv
bnN0IGNoYXIqKXJlc3VsdHNbaitpbmNyXS0+c3RyaW5ndmFsLCAtMSwgJnN0YXR1cyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0c3QgPSB1Y29sX3N0cmNvbGwoY29sbCwgdGFyZ2V0LCB1X3N0
cmxlbih0YXJnZXQpLCB0YXJnZXQyLCB1X3N0cmxlbih0YXJnZXQyKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvKiBFbmQgSUNVIGNoYW5nZSAqLworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChkZXNjZW5kaW5nKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdHN0ID0gLXRzdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRz
dCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAq
IE9rYXkgd2UgbmVlZCB0byB1c2UgbXVsdGkgbGV2ZWwgc29ydHMKKyAgICAgICAgICAgICAgICAg
ICAgICovCisgICAgICAgICAgICAgICAgICAgIGRlcHRoID0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKGRlcHRoIDwgbmJzb3J0cykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHNvcnRzW2RlcHRoXSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgY29tcCA9IHN0YXRpY19jYXN0PHhzbHRTdHlsZVBy
ZUNvbXAqPihzb3J0c1tkZXB0aF0tPnBzdmkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGNvbXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc2MgPSBjb21wLT5kZXNjZW5kaW5nOworICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtYiA9IGNvbXAtPm51bWJlcjsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbXB1dGUgdGhlIHJlc3VsdCBvZiB0
aGUgbmV4dCBsZXZlbCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBmdWxsIHNl
dCwgdGhpcyBtaWdodCBiZSBvcHRpbWl6ZWQgLi4uIG9yIG5vdAorICAgICAgICAgICAgICAgICAg
ICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0c1RhYltkZXB0aF0g
PT0gTlVMTCkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1RhYltkZXB0aF0g
PSB4c2x0Q29tcHV0ZVNvcnRSZXN1bHQoY3R4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydHNbZGVwdGhdKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcyA9IHJlc3VsdHNUYWJbZGVwdGhdOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlcyA9PSBOVUxMKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNbal0gPT0gTlVMTCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNbaitpbmNyXSAhPSBOVUxMKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0c3QgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSBtYWtlIE5hTiBzbWFsbGVyIHRoYW4gbnVt
YmVyIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY29yZGFuY2Ugd2l0
aCBYU0xUIHNwZWMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhtbFhQ
YXRoSXNOYU4ocmVzW2pdLT5mbG9hdHZhbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh4bWxYUGF0aElzTmFOKHJlc1tqICsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyXS0+ZmxvYXR2YWwpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdCA9IDA7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHN0ID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoeG1sWFBhdGhJc05hTihyZXNbaiArIGluY3JdLT4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0dmFsKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRzdCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHJlc1tqXS0+ZmxvYXR2YWwgPT0gcmVzW2ogKyBpbmNyXS0+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdHZhbCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdCA9IDA7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc1tqXS0+ZmxvYXR2YWwgPiAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNbaiArIGluY3JdLT5mbG9hdHZhbCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdCA9IDE7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgdHN0ID0gLTE7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3Rh
cnQgSUNVIGNoYW5nZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRs
ZW4gPSB4bWxTdHJsZW4ocmVzW2pdLT5zdHJpbmd2YWwpICogMjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0MmxlbiA9IHhtbFN0cmxlbihyZXNbaiArIGluY3JdLT5zdHJp
bmd2YWwpICogMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gKFVD
aGFyKil4bWxNYWxsb2ModGFyZ2V0bGVuICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRhcmdldDIgPSAoVUNoYXIqKXhtbE1hbGxvYyh0YXJnZXQybGVu
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdl
dGxlbiA9IHVjbnZfdG9VQ2hhcnMoY29udiwgdGFyZ2V0LCB0YXJnZXRsZW4sIChjb25zdCBjaGFy
KilyZXNbal0tPnN0cmluZ3ZhbCwgLTEsICZzdGF0dXMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0YXJnZXQybGVuID0gdWNudl90b1VDaGFycyhjb252LCB0YXJnZXQyLCB0YXJn
ZXQybGVuLCAoY29uc3QgY2hhciopcmVzW2oraW5jcl0tPnN0cmluZ3ZhbCwgLTEsICZzdGF0dXMp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3QgPSB1Y29sX3N0cmNvbGwoY29s
bCwgdGFyZ2V0LCB1X3N0cmxlbih0YXJnZXQpLCB0YXJnZXQyLCB1X3N0cmxlbih0YXJnZXQyKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBJQ1UgY2hhbmdlICovCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChkZXNjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3QgPSAtdHN0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvKgor
ICAgICAgICAgICAgICAgICAgICAgICAgICogaWYgd2Ugc3RpbGwgY2FuJ3QgZGlmZmVyZW5jaWF0
ZSBhdCB0aGlzIGxldmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgKiB0cnkgb25lIGxldmVs
IGRlZXBlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRzdCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGgrKzsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodHN0ID09IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgdHN0ID0gcmVzdWx0c1tqXS0+aW5kZXggPiByZXN1bHRzW2ogKyBpbmNy
XS0+aW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0c3QgPiAw
KSB7CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IHJlc3VsdHNbal07CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdHNbal0gPSByZXN1bHRzW2ogKyBpbmNyXTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0c1tqICsgaW5jcl0gPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBs
aXN0LT5ub2RlVGFiW2pdOworICAgICAgICAgICAgICAgICAgICBsaXN0LT5ub2RlVGFiW2pdID0g
bGlzdC0+bm9kZVRhYltqICsgaW5jcl07CisgICAgICAgICAgICAgICAgICAgIGxpc3QtPm5vZGVU
YWJbaiArIGluY3JdID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgZGVwdGggPSAxOworICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoZGVwdGggPCBuYnNvcnRzKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc29ydHNbZGVwdGhdID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0c1RhYltk
ZXB0aF0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlc3VsdHNUYWJbZGVwdGhdOworICAgICAgICAgICAg
ICAgICAgICAgICAgdG1wID0gcmVzW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2pd
ID0gcmVzW2ogKyBpbmNyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc1tqICsgaW5jcl0g
PSB0bXA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCsrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGogLT0gaW5jcjsKKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvKiBTdGFydCBJQ1UgY2hhbmdlICovCisgICAgdWNvbF9jbG9zZShj
b2xsKTsKKyAgICB1Y252X2Nsb3NlKGNvbnYpOworICAgIC8qIEVuZCBJQ1UgY2hhbmdlICovCisK
KyAgICBmb3IgKGogPSAwOyBqIDwgbmJzb3J0czsgaisrKSB7CisgICAgICAgIGNvbXAgPSBzdGF0
aWNfY2FzdDx4c2x0U3R5bGVQcmVDb21wKj4oc29ydHNbal0tPnBzdmkpOworICAgICAgICBpZiAo
dGVtcHN0eXBlW2pdID09IDEpIHsKKyAgICAgICAgICAgIC8qIFRoZSBkYXRhLXR5cGUgbmVlZHMg
dG8gYmUgcmVjb21wdXRlZCBlYWNoIHRpbWUgKi8KKyAgICAgICAgICAgIHhtbEZyZWUoKHZvaWQg
KikoY29tcC0+c3R5cGUpKTsKKyAgICAgICAgICAgIGNvbXAtPnN0eXBlID0gTlVMTDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGVtcG9yZGVyW2pdID09IDEpIHsKKyAgICAgICAgICAgIC8qIFRo
ZSBvcmRlciBuZWVkcyB0byBiZSByZWNvbXB1dGVkIGVhY2ggdGltZSAqLworICAgICAgICAgICAg
eG1sRnJlZSgodm9pZCAqKShjb21wLT5vcmRlcikpOworICAgICAgICAgICAgY29tcC0+b3JkZXIg
PSBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHRzVGFiW2pdICE9IE5VTEwpIHsK
KyAgICAgICAgICAgIGZvciAoaSA9IDA7aSA8IGxlbjtpKyspCisgICAgICAgICAgICAgICAgeG1s
WFBhdGhGcmVlT2JqZWN0KHJlc3VsdHNUYWJbal1baV0pOworICAgICAgICAgICAgeG1sRnJlZShy
ZXN1bHRzVGFiW2pdKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfQorCisjZW5kaWYKClByb3Bl
cnR5IGNoYW5nZXMgb246IFdlYkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5jcHAKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS94bWwvWFNM
VFVuaWNvZGVTb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgWFNMVFVuaWNvZGVTb3J0X2gKKyNkZWZpbmUg
WFNMVFVuaWNvZGVTb3J0X2gKKworLy8gT25seSBpbXBsZW1lbnRlZCBmb3IgSUNVIHlldC4KKyNp
ZiBFTkFCTEUoWFNMVCkgJiYgVVNFKElDVV9VTklDT0RFKQorCisjaW5jbHVkZSA8bGlieHNsdC94
c2x0SW50ZXJuYWxzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIHZvaWQgeHNsdFVu
aWNvZGVTb3J0RnVuY3Rpb24oeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwgeG1sTm9kZVB0
ciogc29ydHMsIGludCBuYnNvcnRzKTsKKworfQorCisjZW5kaWYKKyNlbmRpZgoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0LmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1l
OiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjc5NDApCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAwNy0xMS0yMSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2
MDk3ODU+IFhTTFQgcHJvY2Vzc29yIDx4c2w6c29ydD4gYWxnb3JpdGhtIGlzIGluY29tcGF0aWJs
ZSB3aXRoIG90aGVyCisgICAgICAgIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zCisKKyAgICAgICAg
KiBmYXN0L3hzbC9zb3J0LXVuaWNvZGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L3hzbC9zb3J0LXVuaWNvZGUueG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hzbC9zb3J0
LXVuaWNvZGUueHNsOiBBZGRlZC4KKwogMjAwNy0xMS0yMSAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC94c2wvc29ydC11bmljb2RlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3hzbC9zb3J0LXVuaWNvZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wvc29ydC11bmljb2RlLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAorbG93ZXItZmlyc3QKKworVGl0bGUJQXJ0aXN0
CithYmJpZXMgdGl0bGUJYQorQW5naWVzIFRpdGxlCUEKK2JyZW50cyBUaXRsZQliCitCcmFkcyBU
aXRsZQlCCit5ZQnQtQoreW8J0ZEKK3poCdC2Cit1cHBlci1maXJzdAorCitUaXRsZQlBcnRpc3QK
K0FuZ2llcyBUaXRsZQlBCithYmJpZXMgdGl0bGUJYQorQnJhZHMgVGl0bGUJQgorYnJlbnRzIFRp
dGxlCWIKK3llCdC1Cit5bwnRkQoremgJ0LYKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRl
c3RzL2Zhc3QveHNsL3NvcnQtdW5pY29kZS1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBz
dm46bWltZS10eXBlCiAgICsgdGV4dC9wbGFpbgpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0
aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94c2wvc29ydC11bmljb2RlLnhtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hzbC9zb3J0LXVuaWNvZGUueG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wvc29ydC11bmljb2RlLnhtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4N
Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJzb3J0LXVuaWNvZGUueHNs
Ij8+DQorPGNhdGFsb2c+DQorCTxjZD4NCisJCTx0aXRsZT5CcmFkcyBUaXRsZTwvdGl0bGU+DQor
CQk8YXJ0aXN0PkI8L2FydGlzdD4NCisJCTxjb3VudHJ5PlVTQTwvY291bnRyeT4NCisJCTxjb21w
YW55PkNvbHVtYmlhPC9jb21wYW55Pg0KKwkJPHByaWNlPjEwLjkwPC9wcmljZT4NCisJCTx5ZWFy
PjE5ODU8L3llYXI+DQorCTwvY2Q+DQorCTxjZD4NCisJCTx0aXRsZT5icmVudHMgVGl0bGU8L3Rp
dGxlPg0KKwkJPGFydGlzdD5iPC9hcnRpc3Q+DQorCQk8Y291bnRyeT5VSzwvY291bnRyeT4NCisJ
CTxjb21wYW55PkNCUyBSZWNvcmRzPC9jb21wYW55Pg0KKwkJPHByaWNlPjkuOTA8L3ByaWNlPg0K
KwkJPHllYXI+MTk4ODwveWVhcj4NCisJPC9jZD4NCisJPGNkPg0KKwkJPHRpdGxlPkFuZ2llcyBU
aXRsZTwvdGl0bGU+DQorCQk8YXJ0aXN0PkE8L2FydGlzdD4NCisJCTxjb3VudHJ5PlVTQTwvY291
bnRyeT4NCisJCTxjb21wYW55PlJDQTwvY29tcGFueT4NCisJCTxwcmljZT45LjkwPC9wcmljZT4N
CisJCTx5ZWFyPjE5ODI8L3llYXI+DQorCTwvY2Q+DQorCTxjZD4NCisJCTx0aXRsZT5hYmJpZXMg
dGl0bGU8L3RpdGxlPg0KKwkJPGFydGlzdD5hPC9hcnRpc3Q+DQorCQk8Y291bnRyeT5VSzwvY291
bnRyeT4NCisJCTxjb21wYW55PlZpcmdpbiByZWNvcmRzPC9jb21wYW55Pg0KKwkJPHByaWNlPjEw
LjIwPC9wcmljZT4NCisJCTx5ZWFyPjE5OTA8L3llYXI+DQorCTwvY2Q+DQorCTxjZD4NCisJCTx0
aXRsZT55ZTwvdGl0bGU+DQorCQk8YXJ0aXN0PtC1PC9hcnRpc3Q+DQorCQk8Y291bnRyeT5VSzwv
Y291bnRyeT4NCisJCTxjb21wYW55PlZpcmdpbiByZWNvcmRzPC9jb21wYW55Pg0KKwkJPHByaWNl
PjEwLjIwPC9wcmljZT4NCisJCTx5ZWFyPjE5OTA8L3llYXI+DQorCTwvY2Q+DQorCTxjZD4NCisJ
CTx0aXRsZT55bzwvdGl0bGU+DQorCQk8YXJ0aXN0PtGRPC9hcnRpc3Q+DQorCQk8Y291bnRyeT5V
SzwvY291bnRyeT4NCisJCTxjb21wYW55PlZpcmdpbiByZWNvcmRzPC9jb21wYW55Pg0KKwkJPHBy
aWNlPjEwLjIwPC9wcmljZT4NCisJCTx5ZWFyPjE5OTA8L3llYXI+DQorCTwvY2Q+DQorCTxjZD4N
CisJCTx0aXRsZT56aDwvdGl0bGU+DQorCQk8YXJ0aXN0PtC2PC9hcnRpc3Q+DQorCQk8Y291bnRy
eT5VSzwvY291bnRyeT4NCisJCTxjb21wYW55PlZpcmdpbiByZWNvcmRzPC9jb21wYW55Pg0KKwkJ
PHByaWNlPjEwLjIwPC9wcmljZT4NCisJCTx5ZWFyPjE5OTA8L3llYXI+DQorCTwvY2Q+DQorPC9j
YXRhbG9nPg0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QveHNsL3NvcnQt
dW5pY29kZS54bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC94bWwK
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hzbC9zb3J0LXVuaWNvZGUueHNsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3NvcnQtdW5pY29kZS54c2wJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3hzbC9zb3J0LXVuaWNvZGUueHNsCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+
DQorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIgeG1sbnM6eHNsPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPg0KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPg0KKyAg
PGh0bWw+DQorICA8Ym9keT4NCisgICAgPHNjcmlwdD4NCisgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQ0KKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOw0KKyAgICA8L3NjcmlwdD4NCisgICAgPGgyPmxvd2VyLWZpcnN0PC9oMj4NCisgICAgPHRh
YmxlIGJvcmRlcj0iMSI+DQorICAgICAgPHRyIGJnY29sb3I9IiM5YWNkMzIiPg0KKyAgICAgICAg
PHRoPlRpdGxlPC90aD4NCisgICAgICAgIDx0aD5BcnRpc3Q8L3RoPg0KKyAgICAgIDwvdHI+DQor
ICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImNhdGFsb2cvY2QiPg0KKyAgICAgIDx4c2w6c29y
dCBzZWxlY3Q9ImFydGlzdCIgZGF0YS10eXBlPSJ0ZXh0IiBvcmRlcj0iYXNjZW5kaW5nIiBjYXNl
LW9yZGVyPSJsb3dlci1maXJzdCIgLz4NCisgICAgICA8dHI+DQorICAgICAgICA8dGQ+PHhzbDp2
YWx1ZS1vZiBzZWxlY3Q9InRpdGxlIi8+PC90ZD4NCisgICAgICAgIDx0ZD48eHNsOnZhbHVlLW9m
IHNlbGVjdD0iYXJ0aXN0Ii8+PC90ZD4NCisgICAgICA8L3RyPg0KKyAgICAgIDwveHNsOmZvci1l
YWNoPg0KKyAgICA8L3RhYmxlPg0KKyAgICA8aDI+dXBwZXItZmlyc3Q8L2gyPg0KKyAgICA8dGFi
bGUgYm9yZGVyPSIxIj4NCisgICAgICA8dHIgYmdjb2xvcj0iIzlhY2QzMiI+DQorICAgICAgICA8
dGg+VGl0bGU8L3RoPg0KKyAgICAgICAgPHRoPkFydGlzdDwvdGg+DQorICAgICAgPC90cj4NCisg
ICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iY2F0YWxvZy9jZCI+DQorICAgICAgPHhzbDpzb3J0
IHNlbGVjdD0iYXJ0aXN0IiBkYXRhLXR5cGU9InRleHQiIG9yZGVyPSJhc2NlbmRpbmciIGNhc2Ut
b3JkZXI9InVwcGVyLWZpcnN0IiAvPg0KKyAgICAgIDx0cj4NCisgICAgICAgIDx0ZD48eHNsOnZh
bHVlLW9mIHNlbGVjdD0idGl0bGUiLz48L3RkPg0KKyAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Yg
c2VsZWN0PSJhcnRpc3QiLz48L3RkPg0KKyAgICAgIDwvdHI+DQorICAgICAgPC94c2w6Zm9yLWVh
Y2g+DQorICAgIDwvdGFibGU+DQorICA8L2JvZHk+DQorICA8L2h0bWw+DQorPC94c2w6dGVtcGxh
dGU+DQorPC94c2w6c3R5bGVzaGVldD4NCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0
cy9mYXN0L3hzbC9zb3J0LXVuaWNvZGUueHNsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlw
ZQogICArIHRleHQveG1sCgo=
</data>
<flag name="review"
          id="7480"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>