<?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>5145</bug_id>
          
          <creation_ts>2005-09-26 23:51:53 -0700</creation_ts>
          <short_desc>Replace dlmalloc with tcmalloc</short_desc>
          <delta_ts>2005-09-27 21:57:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>20649</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-09-26 23:51:53 -0700</bug_when>
    <thetext>Google&apos;s tcmalloc is fully threadsafe but just as fast as dlmalloc. This means we can avoid having two 
copies and won&apos;t need to follow weird threadsafety disciplines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20650</commentid>
    <comment_count>1</comment_count>
      <attachid>4057</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-09-27 00:19:03 -0700</bug_when>
    <thetext>Created attachment 4057
Do it (also move a bit more stuff into kxmlcore)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20654</commentid>
    <comment_count>2</comment_count>
      <attachid>4060</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-09-27 02:04:22 -0700</bug_when>
    <thetext>Created attachment 4060
improved version

I forgot to fall back to normal malloc in debug builds. Also fixed a few things
that were ifdef&apos;d wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20678</commentid>
    <comment_count>3</comment_count>
      <attachid>4060</attachid>
    <who name="John Sullivan">sullivan</who>
    <bug_when>2005-09-27 13:45:44 -0700</bug_when>
    <thetext>Comment on attachment 4060
improved version

I talked with mjs about this on IRC.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4057</attachid>
            <date>2005-09-27 00:19:03 -0700</date>
            <delta_ts>2005-09-27 02:04:52 -0700</delta_ts>
            <desc>Do it (also move a bit more stuff into kxmlcore)</desc>
            <filename>use-tcmalloc.patch.txt</filename>
            <type>text/plain</type>
            <size>734228</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgz
NwpkaWZmIC1wIC11IC1yMS44MzcgSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCi0tLSBKYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJMjQgU2VwIDIwMDUgMjI6MzQ6MTIgLTAwMDAJMS44MzcKKysrIEph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkyNyBTZXAgMjAwNSAwNzoxNjo0MyAtMDAwMApAQCAtMSwz
ICsxLDE5MyBAQAorMjAwNS0wOS0yNiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisJLSByZXBsYWNlIGRs
bWFsbG9jIHdpdGggdGNtYWxsb2MKKwlodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hv
d19idWcuY2dpP2lkPTUxNDUKKworCUkgYWxzbyBtb3ZlZCBTaGFyZWRQdHIgYW5kIHRoZSBhc3Nl
cnRpb24gY29kZSBmcm9tIFdlYkNvcmUgaW50byBhCisJbmV3IGt4bWxjb3JlIGRpcmVjdG9yeS4K
KwkKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGtqcy9jb2xsZWN0b3IuY3BwOgorICAgICAgICAoS0pTOjpDb2xsZWN0b3I6OmFs
bG9jYXRlKToKKyAgICAgICAgKEtKUzo6Q29sbGVjdG9yOjpjb2xsZWN0KToKKyAgICAgICAgKiBr
anMvY29uZmlnLmg6CisgICAgICAgICoga2pzL2Zhc3RfbWFsbG9jLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBranMvZmFzdF9tYWxsb2MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBranMvZnVuY3Rp
b24uY3BwOgorICAgICAgICAqIGtqcy9mdW5jdGlvbi5oOgorICAgICAgICAqIGtqcy9mdW5jdGlv
bl9vYmplY3QuY3BwOgorICAgICAgICAqIGtqcy9pZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKEtK
Uzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKiBranMvaW50ZXJuYWwuY3BwOgorICAgICAg
ICAqIGtqcy9pbnRlcm5hbC5oOgorICAgICAgICAqIGtqcy9ub2Rlcy5oOgorICAgICAgICAqIGtq
cy9ub2RlczJzdHJpbmcuY3BwOgorICAgICAgICAqIGtqcy9wcm9wZXJ0eV9tYXAuY3BwOgorICAg
ICAgICAoS0pTOjpQcm9wZXJ0eU1hcDo6flByb3BlcnR5TWFwKToKKyAgICAgICAgKEtKUzo6UHJv
cGVydHlNYXA6OnJlaGFzaCk6CisgICAgICAgICoga2pzL3Njb3BlX2NoYWluLmg6CisgICAgICAg
ICoga2pzL3NoYXJlZF9wdHIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBranMvc3RyaW5nX29iamVj
dC5jcHA6CisgICAgICAgIChTdHJpbmdPYmplY3RGdW5jSW1wOjpjYWxsQXNGdW5jdGlvbik6Cisg
ICAgICAgICoga2pzL3VzdHJpbmcuY3BwOgorICAgICAgICAoS0pTOjpVU3RyaW5nOjpSZXA6OmNy
ZWF0ZUNvcHlpbmcpOgorICAgICAgICAoS0pTOjpVU3RyaW5nOjpSZXA6OmRlc3Ryb3kpOgorICAg
ICAgICAoS0pTOjpVU3RyaW5nOjpleHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChLSlM6OlVTdHJp
bmc6OmV4cGFuZFByZUNhcGFjaXR5KToKKyAgICAgICAgKEtKUzo6VVN0cmluZzo6VVN0cmluZyk6
CisgICAgICAgIChLSlM6OlVTdHJpbmc6OnNwbGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyk6
CisgICAgICAgIChLSlM6OlVTdHJpbmc6OmFwcGVuZCk6CisgICAgICAgIChLSlM6OlVTdHJpbmc6
Om9wZXJhdG9yPSk6CisgICAgICAgIChLSlM6OlVTdHJpbmc6OmRldGFjaCk6CisgICAgICAgICog
a2pzL3VzdHJpbmcuaDoKKyAgICAgICAgKiBreG1sY29yZS9Bc3NlcnRpb25zLmg6IEFkZGVkLgor
ICAgICAgICAqIGt4bWxjb3JlL0Fzc2VydGlvbnMubW06IEFkZGVkLgorICAgICAgICAqIGt4bWxj
b3JlL0Zhc3RNYWxsb2MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEtYTUxDb3JlOjpMZ0Zsb29yKToK
KyAgICAgICAgKEtYTUxDb3JlOjpTaXplQ2xhc3MpOgorICAgICAgICAoS1hNTENvcmU6OkJ5dGVT
aXplRm9yQ2xhc3MpOgorICAgICAgICAoS1hNTENvcmU6OkluaXRTaXplQ2xhc3Nlcyk6CisgICAg
ICAgIChLWE1MQ29yZTo6TWV0YURhdGFBbGxvYyk6CisgICAgICAgIChLWE1MQ29yZTo6UGFnZUhl
YXBBbGxvY2F0b3I6OkluaXQpOgorICAgICAgICAoS1hNTENvcmU6OlBhZ2VIZWFwQWxsb2NhdG9y
OjpOZXcpOgorICAgICAgICAoS1hNTENvcmU6OlBhZ2VIZWFwQWxsb2NhdG9yOjpEZWxldGUpOgor
ICAgICAgICAoS1hNTENvcmU6OlBhZ2VIZWFwQWxsb2NhdG9yOjppbnVzZSk6CisgICAgICAgIChL
WE1MQ29yZTo6cGFnZXMpOgorICAgICAgICAoS1hNTENvcmU6OkFsbG9jYXRpb25TaXplKToKKyAg
ICAgICAgKEtYTUxDb3JlOjpFdmVudCk6CisgICAgICAgIChLWE1MQ29yZTo6TmV3U3Bhbik6Cisg
ICAgICAgIChLWE1MQ29yZTo6RGVsZXRlU3Bhbik6CisgICAgICAgIChLWE1MQ29yZTo6RExMX0lu
aXQpOgorICAgICAgICAoS1hNTENvcmU6OkRMTF9SZW1vdmUpOgorICAgICAgICAoS1hNTENvcmU6
OkRMTF9Jc0VtcHR5KToKKyAgICAgICAgKEtYTUxDb3JlOjpETExfTGVuZ3RoKToKKyAgICAgICAg
KEtYTUxDb3JlOjpETExfUHJpbnQpOgorICAgICAgICAoS1hNTENvcmU6OkRMTF9QcmVwZW5kKToK
KyAgICAgICAgKEtYTUxDb3JlOjpETExfSW5zZXJ0T3JkZXJlZCk6CisgICAgICAgIChLWE1MQ29y
ZTo6KToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19QYWdlSGVhcDo6R2V0RGVzY3JpcHRv
cik6CisgICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfUGFnZUhlYXA6OlN5c3RlbUJ5dGVzKToK
KyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19QYWdlSGVhcDo6RnJlZUJ5dGVzKToKKyAgICAg
ICAgKEtYTUxDb3JlOjpUQ01hbGxvY19QYWdlSGVhcDo6UmVjb3JkU3Bhbik6CisgICAgICAgIChL
WE1MQ29yZTo6VENNYWxsb2NfUGFnZUhlYXA6OlRDTWFsbG9jX1BhZ2VIZWFwKToKKyAgICAgICAg
KEtYTUxDb3JlOjpUQ01hbGxvY19QYWdlSGVhcDo6TmV3KToKKyAgICAgICAgKEtYTUxDb3JlOjpU
Q01hbGxvY19QYWdlSGVhcDo6U3BsaXQpOgorICAgICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX1Bh
Z2VIZWFwOjpDYXJ2ZSk6CisgICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfUGFnZUhlYXA6OkRl
bGV0ZSk6CisgICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfUGFnZUhlYXA6OlJlZ2lzdGVyU2l6
ZUNsYXNzKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19QYWdlSGVhcDo6RHVtcCk6Cisg
ICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfUGFnZUhlYXA6Okdyb3dIZWFwKToKKyAgICAgICAg
KEtYTUxDb3JlOjpUQ01hbGxvY19QYWdlSGVhcDo6Q2hlY2spOgorICAgICAgICAoS1hNTENvcmU6
OlRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVja0xpc3QpOgorICAgICAgICAoS1hNTENvcmU6OlRDTWFs
bG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0OjpJbml0KToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01h
bGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdDo6bGVuZ3RoKToKKyAgICAgICAgKEtYTUxDb3JlOjpU
Q01hbGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdDo6ZW1wdHkpOgorICAgICAgICAoS1hNTENvcmU6
OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0Ojpsb3d3YXRlcm1hcmspOgorICAgICAgICAo
S1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0OjpjbGVhcl9sb3d3YXRlcm1h
cmspOgorICAgICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0OjpQ
dXNoKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdDo6
UG9wKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6ZnJlZWxpc3Rf
bGVuZ3RoKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6U2l6ZSk6
CisgICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6bGVuZ3RoKToK
KyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpJbml0KToKKyAg
ICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpJbnNlcnQpOgorICAg
ICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJlbW92ZSk6CisgICAg
ICAgIChLWE1MQ29yZTo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UG9wdWxhdGUpOgorICAg
ICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpTYW1wbGVBbGxvY2F0aW9uKToK
KyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdCk6CisgICAgICAg
IChLWE1MQ29yZTo6VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkNsZWFudXApOgorICAgICAgICAoS1hN
TENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpBbGxvY2F0ZSk6CisgICAgICAgIChLWE1MQ29y
ZTo6VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlYWxsb2NhdGUpOgorICAgICAgICAoS1hNTENvcmU6
OlRDTWFsbG9jX1RocmVhZENhY2hlOjpGZXRjaEZyb21DZW50cmFsQ2FjaGUpOgorICAgICAgICAo
S1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpSZWxlYXNlVG9DZW50cmFsQ2FjaGUpOgor
ICAgICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpTY2F2ZW5nZSk6CisgICAg
ICAgIChLWE1MQ29yZTo6VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKToKKyAgICAgICAg
KEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQpOgorICAg
ICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpQaWNrTmV4dFNhbXBsZSk6Cisg
ICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRNb2R1bGUpOgorICAg
ICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0VFNEKToKKyAgICAgICAg
KEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6Q3JlYXRlQ2FjaGVJZk5lY2Vzc2FyeSk6
CisgICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlbGV0ZUNhY2hlKToK
KyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6UmVjb21wdXRlVGhyZWFk
Q2FjaGVTaXplKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6UHJp
bnQpOgorICAgICAgICAoS1hNTENvcmU6OkV4dHJhY3RTdGF0cyk6CisgICAgICAgIChLWE1MQ29y
ZTo6RHVtcFN0YXRzKToKKyAgICAgICAgKEtYTUxDb3JlOjpQcmludFN0YXRzKToKKyAgICAgICAg
KEtYTUxDb3JlOjpEdW1wU3RhY2tUcmFjZXMpOgorICAgICAgICAoS1hNTENvcmU6OlRDTWFsbG9j
SW1wbGVtZW50YXRpb246OkdldFN0YXRzKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY0lt
cGxlbWVudGF0aW9uOjpSZWFkU3RhY2tUcmFjZXMpOgorICAgICAgICAoS1hNTENvcmU6OlRDTWFs
bG9jSW1wbGVtZW50YXRpb246OkdldE51bWVyaWNQcm9wZXJ0eSk6CisgICAgICAgIChLWE1MQ29y
ZTo6VENNYWxsb2NJbXBsZW1lbnRhdGlvbjo6U2V0TnVtZXJpY1Byb3BlcnR5KToKKyAgICAgICAg
KEtYTUxDb3JlOjpEb1NhbXBsZWRBbGxvY2F0aW9uKToKKyAgICAgICAgKEtYTUxDb3JlOjpkb19t
YWxsb2MpOgorICAgICAgICAoS1hNTENvcmU6OmRvX2ZyZWUpOgorICAgICAgICAoS1hNTENvcmU6
OmRvX21lbWFsaWduKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY0d1YXJkOjpUQ01hbGxv
Y0d1YXJkKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY0d1YXJkOjp+VENNYWxsb2NHdWFy
ZCk6CisgICAgICAgIChLWE1MQ29yZTo6bWFsbG9jKToKKyAgICAgICAgKEtYTUxDb3JlOjpmcmVl
KToKKyAgICAgICAgKEtYTUxDb3JlOjpjYWxsb2MpOgorICAgICAgICAoS1hNTENvcmU6OmNmcmVl
KToKKyAgICAgICAgKEtYTUxDb3JlOjpyZWFsbG9jKToKKyAgICAgICAgKEtYTUxDb3JlOjptZW1h
bGlnbik6CisgICAgICAgIChLWE1MQ29yZTo6cG9zaXhfbWVtYWxpZ24pOgorICAgICAgICAoS1hN
TENvcmU6OnZhbGxvYyk6CisgICAgICAgIChLWE1MQ29yZTo6cHZhbGxvYyk6CisgICAgICAgIChL
WE1MQ29yZTo6bWFsbG9jX3N0YXRzKToKKyAgICAgICAgKEtYTUxDb3JlOjptYWxsb3B0KToKKyAg
ICAgICAgKEtYTUxDb3JlOjptYWxsaW5mbyk6CisgICAgICAgICoga3htbGNvcmUvRmFzdE1hbGxv
Yy5oOiBBZGRlZC4KKyAgICAgICAgKEtYTUxDb3JlOjpGYXN0QWxsb2NhdGVkOjpvcGVyYXRvciBu
ZXcpOgorICAgICAgICAoS1hNTENvcmU6OkZhc3RBbGxvY2F0ZWQ6Om9wZXJhdG9yIGRlbGV0ZSk6
CisgICAgICAgIChLWE1MQ29yZTo6RmFzdEFsbG9jYXRlZDo6b3BlcmF0b3IgbmV3W10pOgorICAg
ICAgICAoS1hNTENvcmU6OkZhc3RBbGxvY2F0ZWQ6Om9wZXJhdG9yIGRlbGV0ZVtdKToKKyAgICAg
ICAgKiBreG1sY29yZS9TaGFyZWRQdHIuaDogQWRkZWQuCisgICAgICAgIChLWE1MQ29yZTo6U2hh
cmVkUHRyOjpTaGFyZWRQdHIpOgorICAgICAgICAoS1hNTENvcmU6OlNoYXJlZFB0cjo6flNoYXJl
ZFB0cik6CisgICAgICAgIChLWE1MQ29yZTo6U2hhcmVkUHRyOjppc051bGwpOgorICAgICAgICAo
S1hNTENvcmU6OlNoYXJlZFB0cjo6bm90TnVsbCk6CisgICAgICAgIChLWE1MQ29yZTo6U2hhcmVk
UHRyOjpyZXNldCk6CisgICAgICAgIChLWE1MQ29yZTo6U2hhcmVkUHRyOjpnZXQpOgorICAgICAg
ICAoS1hNTENvcmU6OlNoYXJlZFB0cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEtYTUxDb3JlOjpT
aGFyZWRQdHI6Om9wZXJhdG9yLT4pOgorICAgICAgICAoS1hNTENvcmU6OlNoYXJlZFB0cjo6b3Bl
cmF0b3IhKToKKyAgICAgICAgKEtYTUxDb3JlOjpTaGFyZWRQdHI6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoS1hNTENvcmU6Ojo6b3BlcmF0b3IpOgorICAgICAgICAoS1hNTENvcmU6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoS1hNTENvcmU6Om9wZXJhdG9yIT0pOgorICAgICAgICAoS1hNTENv
cmU6OnN0YXRpY19wb2ludGVyX2Nhc3QpOgorICAgICAgICAoS1hNTENvcmU6OmNvbnN0X3BvaW50
ZXJfY2FzdCk6CisgICAgICAgICoga3htbGNvcmUvVENQYWdlTWFwLmg6IEFkZGVkLgorICAgICAg
ICAoVENNYWxsb2NfUGFnZU1hcDE6OlRDTWFsbG9jX1BhZ2VNYXAxKToKKyAgICAgICAgKFRDTWFs
bG9jX1BhZ2VNYXAxOjpFbnN1cmUpOgorICAgICAgICAoVENNYWxsb2NfUGFnZU1hcDE6OmdldCk6
CisgICAgICAgIChUQ01hbGxvY19QYWdlTWFwMTo6c2V0KToKKyAgICAgICAgKFRDTWFsbG9jX1Bh
Z2VNYXAyOjpUQ01hbGxvY19QYWdlTWFwMik6CisgICAgICAgIChUQ01hbGxvY19QYWdlTWFwMjo6
Z2V0KToKKyAgICAgICAgKFRDTWFsbG9jX1BhZ2VNYXAyOjpzZXQpOgorICAgICAgICAoVENNYWxs
b2NfUGFnZU1hcDI6OkVuc3VyZSk6CisgICAgICAgIChUQ01hbGxvY19QYWdlTWFwMzo6TmV3Tm9k
ZSk6CisgICAgICAgIChUQ01hbGxvY19QYWdlTWFwMzo6VENNYWxsb2NfUGFnZU1hcDMpOgorICAg
ICAgICAoVENNYWxsb2NfUGFnZU1hcDM6OmdldCk6CisgICAgICAgIChUQ01hbGxvY19QYWdlTWFw
Mzo6c2V0KToKKyAgICAgICAgKFRDTWFsbG9jX1BhZ2VNYXAzOjpFbnN1cmUpOgorICAgICAgICAq
IGt4bWxjb3JlL1RDU3BpbkxvY2suaDogQWRkZWQuCisgICAgICAgIChUQ01hbGxvY19TcGluTG9j
azo6SW5pdCk6CisgICAgICAgIChUQ01hbGxvY19TcGluTG9jazo6RmluYWxpemUpOgorICAgICAg
ICAoVENNYWxsb2NfU3BpbkxvY2s6OkxvY2spOgorICAgICAgICAoVENNYWxsb2NfU3BpbkxvY2s6
OlVubG9jayk6CisgICAgICAgIChUQ01hbGxvY19TbG93TG9jayk6CisgICAgICAgIChUQ01hbGxv
Y19TcGluTG9ja0hvbGRlcjo6VENNYWxsb2NfU3BpbkxvY2tIb2xkZXIpOgorICAgICAgICAoVENN
YWxsb2NfU3BpbkxvY2tIb2xkZXI6On5UQ01hbGxvY19TcGluTG9ja0hvbGRlcik6CisgICAgICAg
ICoga3htbGNvcmUvVENTeXN0ZW1BbGxvYy5jcHA6IEFkZGVkLgorICAgICAgICAoVHJ5U2Jyayk6
CisgICAgICAgIChUcnlNbWFwKToKKyAgICAgICAgKFRyeURldk1lbSk6CisgICAgICAgIChUQ01h
bGxvY19TeXN0ZW1BbGxvYyk6CisgICAgICAgICoga3htbGNvcmUvVENTeXN0ZW1BbGxvYy5oOiBB
ZGRlZC4KKwogMjAwNS0wOS0yMyAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC1wIC11IC1yMS4xMiBKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCi0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCTE5
IFNlcCAyMDA1IDA2OjU3OjI1IC0wMDAwCTEuMTIKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJMjcgU2VwIDIwMDUgMDc6MTY6NDUgLTAw
MDAKQEAgLTI1LDEyICsyNSwyMSBAQAogLyogRW5kIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9u
ICovCiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTY1MTYyRUVCMDhFNkEx
RkUwMDc1NTZDRCAvKiBTaGFyZWRQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1MTYyRUVBMDhFNkExRkUwMDc1NTZDRCAvKiBTaGFyZWRQdHIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2NTE2MkYw
MjA4RTZBMkQwMDA3NTU2Q0QgLyogU2hhcmVkUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTE2MkVFQTA4RTZBMUZFMDA3NTU2Q0QgLyogU2hhcmVk
UHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NjUyQzEwN0YwOERBN0IxRTAwMjA4ODdEIC8qIHByb3RlY3RlZF9yZWZlcmVuY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkMxMDdFMDhEQTdCMUUw
MDIwODg3RCAvKiBwcm90ZWN0ZWRfcmVmZXJlbmNlLmggKi87IH07CisJCTY1NDFCRDcyMDhFODBB
MTcwMDJDQkVFNyAvKiBUQ1BhZ2VNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1NDFCRDZFMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1BhZ2VNYXAuaCAq
LzsgfTsKKwkJNjU0MUJENzMwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3BpbkxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDFCRDZGMDhFODBBMTcw
MDJDQkVFNyAvKiBUQ1NwaW5Mb2NrLmggKi87IH07CisJCTY1NDFCRDc0MDhFODBBMTcwMDJDQkVF
NyAvKiBUQ1N5c3RlbUFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1NDFCRDcwMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmNw
cCAqLzsgfTsKKwkJNjU0MUJENzUwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3lzdGVtQWxsb2MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDFCRDcxMDhF
ODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmggKi87IH07CiAJCTY1NjIxRTZEMDg5RTg1
OTcwMDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjIxRTZCMDg5RTg1OTcwMDc2MEYzNSAvKiBwcm9wZXJ0
eV9zbG90LmNwcCAqLzsgfTsKIAkJNjU2MjFFNkUwODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5
X3Nsb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
NjIxRTZDMDg5RTg1OTcwMDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU2MjFFNkYwODlFODVEMzAwNzYw
RjM1IC8qIHByb3BlcnR5X3Nsb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjU2MjFFNkIwODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5X3Nsb3Qu
Y3BwICovOyB9OwogCQk2NTYyMUU3MDA4OUU4NUQzMDA3NjBGMzUgLyogcHJvcGVydHlfc2xvdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2MjFFNkMw
ODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5X3Nsb3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2NUVGMkRGNTA4QkVDQzgwMDAwODk0QkIgLyog
c2hhcmVkX3B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjVFRjJERjQwOEJFQ0M4MDAwMDg5NEJCIC8qIHNoYXJlZF9wdHIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2NUUyMTdCRDA4RTdFRUNDMDAy
M0U1RjYgLyogQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjVFMjE3QjcwOEU3RUVDQzAwMjNFNUY2IC8qIEFzc2VydGlvbnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2NUUyMTdCRTA4
RTdFRUNDMDAyM0U1RjYgLyogQXNzZXJ0aW9ucy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RTIxN0I4MDhFN0VFQ0MwMDIzRTVGNiAvKiBBc3NlcnRp
b25zLm1tICovOyB9OworCQk2NUUyMTdCRjA4RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1hbGxvYy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUUyMTdC
OTA4RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1hbGxvYy5jcHAgKi87IH07CisJCTY1RTIxN0MwMDhF
N0VFQ0MwMDIzRTVGNiAvKiBGYXN0TWFsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NUUyMTdCQTA4RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1hbGxv
Yy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1
RUYyREY4MDhCRUNDOEEwMDA4OTRCQiAvKiBzaGFyZWRfcHRyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUVGMkRGNDA4QkVDQzgwMDAwODk0QkIgLyog
c2hhcmVkX3B0ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTkzMDc1NEMwMDhCMEY2ODAwMEFCMzA1NiAvKiBwY3JlX2NvbXBpbGUuYyBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDc1NEJGMDhCMEY2ODAw
MEFCMzA1NiAvKiBwY3JlX2NvbXBpbGUuYyAqLzsgfTsKIAkJOTMwNzU0QzEwOEIwRjY4MDAwQUIz
MDU2IC8qIHBjcmVfY29tcGlsZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTMwNzU0QkYwOEIwRjY4MDAwQUIzMDU2IC8qIHBjcmVfY29tcGlsZS5jICov
OyB9OwpAQCAtMTExLDcgKzEyMCw2IEBACiAJCTkzMkY1QjhDMDgyMkExQzcwMDczNjk3NSAvKiBu
cGFwaS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFD
QTNCNEYwNkNDMjE2NjAwNTYwMEUzIC8qIG5wYXBpLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMyRjVCOEQwODIyQTFDNzAwNzM2OTc1IC8qIG5w
cnVudGltZV9wcml2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MURGRjJDOTA2Q0MzNkY2MDA2RjFFQ0MgLyogbnBydW50aW1lX3ByaXYuaCAqLzsgfTsK
IAkJOTMyRjVCOEUwODIyQTFDNzAwNzM2OTc1IC8qIG5wcnVudGltZV9pbXBsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEFCRjFERTA3MEI2MjhDMDBB
M0FDMDUgLyogbnBydW50aW1lX2ltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk5MzJGNUI4RjA4MjJBMUM3MDA3MzY5NzUgLyogZmFzdF9tYWxs
b2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MUJE
Qzc4MDgwRjEwQ0MwMEYxMDg1NiAvKiBmYXN0X21hbGxvYy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMkY1QjkyMDgyMkExQzcwMDczNjk3NSAv
KiBhcnJheV9vYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjY5MkE4NEQwMjU1NTk3RDAxRkY2MEY3IC8qIGFycmF5X29iamVjdC5jcHAgKi87
IH07CiAJCTkzMkY1QjkzMDgyMkExQzcwMDczNjk3NSAvKiBib29sX29iamVjdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg1MDAyNTU1OTdE
MDFGRjYwRjcgLyogYm9vbF9vYmplY3QuY3BwICovOyB9OwogCQk5MzJGNUI5NDA4MjJBMUM3MDA3
MzY5NzUgLyogY29sbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY2OTJBODUyMDI1NTU5N0QwMUZGNjBGNyAvKiBjb2xsZWN0b3IuY3BwICov
OyB9OwpAQCAtMTcwLDcgKzE3OCw2IEBACiAJCTkzMkY1QkNFMDgyMkExQzcwMDczNjk3NSAvKiBX
ZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTg2M0ZDNDA2NTQyRDMxMDBFOUU4REQgLyogV2ViU2NyaXB0T2JqZWN0Lm1tICov
OyB9OwogCQk5MzJGNUJDRjA4MjJBMUM3MDA3MzY5NzUgLyogam5pX29iamMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdFRjM3MzA2RDY5NTkzMDAw
N0MxQkEgLyogam5pX29iamMubW0gKi87IH07CiAJCTkzMkY1QkQwMDgyMkExQzcwMDczNjk3NSAv
KiBzb2Z0bGlua2luZy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ0MkEzNzYwNzQxNzVDMjAwMEFFMkVEIC8qIHNvZnRsaW5raW5nLmMgKi87IH07Ci0J
CTkzMkY1QkQxMDgyMkExQzcwMDczNjk3NSAvKiBmYXN0X21hbGxvYy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTFCREM3NzA4MEYxMENDMDBGMTA4
NTYgLyogZmFzdF9tYWxsb2MuY3BwICovOyB9OwogCQk5MzJGNUJEMzA4MjJBMUM3MDA3MzY5NzUg
LyogQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2MEE0Q0YwNEIzQjNFNzAwOEFFOTUyIC8qIENvcmVGb3Vu
ZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKIAkJOTMyRjVCRDQwODIyQTFDNzAwNzM2OTc1IC8qIENv
cmVTZXJ2aWNlcy5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NTYwQTYzRDA0QjNCNjlGMDA4QUU5NTIgLyogQ29yZVNlcnZpY2VzLmZy
YW1ld29yayAqLzsgfTsKIAkJOTMyRjVCRDUwODIyQTFDNzAwNzM2OTc1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwpAQCAtMjcxLDcgKzI3OCw2IEBACiAJCUE4NUQ4MjNCMDg3QjI4MjIwMDZBOTE3MiAvKiBucGFw
aS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDQTNC
NEYwNkNDMjE2NjAwNTYwMEUzIC8qIG5wYXBpLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTg1RDgyM0MwODdCMjgyMjAwNkE5MTcyIC8qIG5wcnVu
dGltZV9wcml2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MURGRjJDOTA2Q0MzNkY2MDA2RjFFQ0MgLyogbnBydW50aW1lX3ByaXYuaCAqLzsgfTsKIAkJ
QTg1RDgyM0QwODdCMjgyMjAwNkE5MTcyIC8qIG5wcnVudGltZV9pbXBsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEFCRjFERTA3MEI2MjhDMDBBM0FD
MDUgLyogbnBydW50aW1lX2ltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQlBODVEODIzRTA4N0IyODIyMDA2QTkxNzIgLyogZmFzdF9tYWxsb2Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MUJEQzc4
MDgwRjEwQ0MwMEYxMDg1NiAvKiBmYXN0X21hbGxvYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4NUQ4MjNGMDg3QjI4MjIwMDZBOTE3MiAvKiBj
cmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY2OTJBODU0MDI1NTU5N0QwMUZGNjBGNyAvKiBjcmVhdGVfaGFzaF90YWJsZSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBODVEODI0MTA4
N0IyODIyMDA2QTkxNzIgLyogYXJyYXlfb2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBhcnJh
eV9vYmplY3QuY3BwICovOyB9OwogCQlBODVEODI0MjA4N0IyODIyMDA2QTkxNzIgLyogYm9vbF9v
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjY5MkE4NTAwMjU1NTk3RDAxRkY2MEY3IC8qIGJvb2xfb2JqZWN0LmNwcCAqLzsgfTsKQEAgLTMz
Miw3ICszMzgsNiBAQAogCQlBODVEODI3RDA4N0IyODIyMDA2QTkxNzIgLyogV2ViU2NyaXB0T2Jq
ZWN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4
NjNGQzQwNjU0MkQzMTAwRTlFOEREIC8qIFdlYlNjcmlwdE9iamVjdC5tbSAqLzsgfTsKIAkJQTg1
RDgyN0UwODdCMjgyMjAwNkE5MTcyIC8qIGpuaV9vYmpjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3RUYzNzMwNkQ2OTU5MzAwMDdDMUJBIC8qIGpu
aV9vYmpjLm1tICovOyB9OwogCQlBODVEODI3RjA4N0IyODIyMDA2QTkxNzIgLyogc29mdGxpbmtp
bmcuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NDJB
Mzc2MDc0MTc1QzIwMDBBRTJFRCAvKiBzb2Z0bGlua2luZy5jICovOyB9OwotCQlBODVEODI4MDA4
N0IyODIyMDA2QTkxNzIgLyogZmFzdF9tYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxQkRDNzcwODBGMTBDQzAwRjEwODU2IC8qIGZhc3Rf
bWFsbG9jLmNwcCAqLzsgfTsKIAkJQTg1RDgyODIwODdCMjgyMjAwNkE5MTcyIC8qIENvcmVGb3Vu
ZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1NjBBNENGMDRCM0IzRTcwMDhBRTk1MiAvKiBDb3JlRm91bmRhdGlvbi5mcmFt
ZXdvcmsgKi87IH07CiAJCUE4NUQ4MjgzMDg3QjI4MjIwMDZBOTE3MiAvKiBDb3JlU2VydmljZXMu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjU2MEE2M0QwNEIzQjY5RjAwOEFFOTUyIC8qIENvcmVTZXJ2aWNlcy5mcmFtZXdvcmsgKi87
IH07CiAJCUE4NUQ4Mjg0MDg3QjI4MjIwMDZBOTE3MiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYx
MDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKQEAgLTQ3NCwx
NCArNDc5LDE3IEBACiAJCTUxRjBFQzk3MDVDODhEQzcwMEU2REYxQiAvKiBvYmpjX3V0aWxpdHku
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gb2JqY191dGlsaXR5
Lm1tOyBwYXRoID0gYmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHkubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTY1MEI2OEQ4MDYzOTAzM0YwMDlENDJERSAvKiBwcm90ZWN0ZWRfdmFs
dWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwcm90ZWN0ZWRf
dmFsdWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUwQjY4RDkwNjM5MDMz
RjAwOUQ0MkRFIC8qIHByb3RlY3RlZF92YWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHByb3RlY3RlZF92YWx1ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNjUxQkRDNzcwODBGMTBDQzAwRjEwODU2IC8qIGZhc3RfbWFsbG9jLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBmYXN0X21hbGxvYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTY1MUJEQzc4MDgwRjEwQ0MwMEYxMDg1NiAvKiBmYXN0X21hbGxv
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmFzdF9tYWxsb2MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjUxNjJFRUEwOEU2QTFGRTAwNzU1NkNEIC8qIFNo
YXJlZFB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVkUHRyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MUY2NDEyMDM5RDVCNUYwMDc4Mzk1QyAv
KiBkdG9hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkdG9hLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUxRjY0MTMwMzlENUI1RjAwNzgzOTVD
IC8qIGR0b2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGR0b2EuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUyQzEwN0UwOERBN0IxRTAwMjA4ODdEIC8qIHBy
b3RlY3RlZF9yZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBy
b3RlY3RlZF9yZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU0MTcy
MEUwMzlFMDhCOTAwNThCRkVCIC8qIGRmdGFibGVzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
LmM7IG5hbWUgPSBkZnRhYmxlcy5jOyBwYXRoID0gcGNyZS9kZnRhYmxlcy5jOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NTQxNzIwRjAzOUUwOEI5MDA1OEJGRUIgLyogcGNyZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gcGNyZS5oOyBwYXRoID0gcGNyZS9wY3Jl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NDE3MjE3MDM5RTBCMjgwMDU4QkZF
QiAvKiBwY3JlLWNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gInBj
cmUtY29uZmlnLmgiOyBwYXRoID0gInBjcmUvcGNyZS1jb25maWcuaCI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTY1NDFCRDZFMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1BhZ2VNYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRDUGFnZU1hcC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk2NTQxQkQ2RjA4RTgwQTE3MDAyQ0JFRTcgLyogVENTcGluTG9j
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVENTcGluTG9jay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2NTQxQkQ3MDA4RTgwQTE3MDAyQ0JFRTcgLyogVENT
eXN0ZW1BbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVENT
eXN0ZW1BbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1NDFCRDcxMDhF
ODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUQ1N5c3RlbUFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTY1NjBBNENGMDRCM0IzRTcwMDhBRTk1MiAvKiBDb3JlRm91bmRhdGlvbi5mcmFtZXdvcmsgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZy
YW1ld29yazsgbmFtZSA9IENvcmVGb3VuZGF0aW9uLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL0NvcmVGb3VuZGF0aW9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9
ICI8YWJzb2x1dGU+IjsgfTsKIAkJNjU2MEE2M0QwNEIzQjY5RjAwOEFFOTUyIC8qIENvcmVTZXJ2
aWNlcy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IENvcmVTZXJ2aWNlcy5mcmFtZXdvcms7
IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3Jr
OyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQk2NTYyMUU2QjA4OUU4NTk3MDA3NjBG
MzUgLyogcHJvcGVydHlfc2xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gcHJvcGVydHlfc2xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
ODksNiArNDk3LDExIEBACiAJCTY1QUIwMDQ4MDYyNjFDQkEwMDc2REU2MyAvKiBpbnRlcnByZXRl
cl9tYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVycHJl
dGVyX21hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1QUIwMDQ5MDYyNjFD
QkEwMDc2REU2MyAvKiBpbnRlcnByZXRlcl9tYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IGludGVycHJldGVyX21hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2NUMwMkZCQjA2Mzc0NjJBMDAzRTdFRTYgLyogcHJvdGVjdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gcHJvdGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk2NURFNjQ2RjA4RThDODhBMDA1RDAwMkEgLyogZmFzdF9tYWxsb2MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZhc3RfbWFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTY1RTIxN0I3MDhFN0VFQ0MwMDIzRTVGNiAvKiBBc3NlcnRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3NlcnRpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTY1RTIxN0I4MDhFN0VFQ0MwMDIzRTVGNiAvKiBBc3NlcnRpb25zLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFzc2VydGlvbnMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1RTIxN0I5MDhFN0VFQ0MwMDIzRTVGNiAv
KiBGYXN0TWFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
YXN0TWFsbG9jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjVFMjE3QkEwOEU3
RUVDQzAwMjNFNUY2IC8qIEZhc3RNYWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZhc3RNYWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVFRjJE
RjQwOEJFQ0M4MDAwMDg5NEJCIC8qIHNoYXJlZF9wdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IHNoYXJlZF9wdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzAwREExMTcwNjU5ODRDRTAwNzQ3QzBCIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaDsg
cGF0aCA9IGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MDRGRDM1MzA1Njk3RTZEMDAzREJFRDkgLyogYm9vbF9vYmpl
Y3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGJvb2xfb2JqZWN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NTEsNiArNjY0LDcgQEAKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNjU0MTcyMDAwMzlFMDFCQTAwNThCRkVCIC8q
IGtqcyAqLywKKwkJCQk2NTE2MkVGMTA4RTZBMjFDMDA3NTU2Q0QgLyoga3htbGNvcmUgKi8sCiAJ
CQkJNTE4NTZEOTUwNTYyRUU5QzAwOEI5RDgzIC8qIGJpbmRpbmdzICovLAogCQkJCTY1NDE3MjAz
MDM5RTAxRjkwMDU4QkZFQiAvKiBwY3JlICovLAogCQkJCTkzMkZDM0MyMDgyNEJCNzAwMDVCM0M3
NSAvKiBSZXNvdXJjZXMgKi8sCkBAIC04MTEsNiArODI1LDIyIEBACiAJCQluYW1lID0gYmluZGlu
Z3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk2NTE2MkVGMTA4RTZBMjFD
MDA3NTU2Q0QgLyoga3htbGNvcmUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxk
cmVuID0gKAorCQkJCTY1NDFCRDZFMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1BhZ2VNYXAuaCAqLywK
KwkJCQk2NTQxQkQ2RjA4RTgwQTE3MDAyQ0JFRTcgLyogVENTcGluTG9jay5oICovLAorCQkJCTY1
NDFCRDcwMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmNwcCAqLywKKwkJCQk2NTQx
QkQ3MTA4RTgwQTE3MDAyQ0JFRTcgLyogVENTeXN0ZW1BbGxvYy5oICovLAorCQkJCTY1MTYyRUVB
MDhFNkExRkUwMDc1NTZDRCAvKiBTaGFyZWRQdHIuaCAqLywKKwkJCQk2NUUyMTdCNzA4RTdFRUND
MDAyM0U1RjYgLyogQXNzZXJ0aW9ucy5oICovLAorCQkJCTY1RTIxN0I4MDhFN0VFQ0MwMDIzRTVG
NiAvKiBBc3NlcnRpb25zLm1tICovLAorCQkJCTY1RTIxN0I5MDhFN0VFQ0MwMDIzRTVGNiAvKiBG
YXN0TWFsbG9jLmNwcCAqLywKKwkJCQk2NUUyMTdCQTA4RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1h
bGxvYy5oICovLAorCQkJKTsKKwkJCXBhdGggPSBreG1sY29yZTsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTY1NDE3MjAwMDM5RTAxQkEwMDU4QkZFQiAvKiBranMgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtODY0LDEyICs4OTQsMTEg
QEAKIAkJRjVDMjkwRTUwMjg0Rjk2MDAxODYzNUNBIC8qIE90aGVyIFNvdXJjZXMgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTY1MUJEQzc3MDgwRjEwQ0Mw
MEYxMDg1NiAvKiBmYXN0X21hbGxvYy5jcHAgKi8sCi0JCQkJNjUxQkRDNzgwODBGMTBDQzAwRjEw
ODU2IC8qIGZhc3RfbWFsbG9jLmggKi8sCiAJCQkJNDVFMTJEODgwNkE0OUIwRjAwRTlERjg0IC8q
IHRlc3RranMuY3BwICovLAogCQkJCUY2OTJBODU0MDI1NTU5N0QwMUZGNjBGNyAvKiBjcmVhdGVf
aGFzaF90YWJsZSAqLywKIAkJCQk5M0YxOTgxQTA4MjQ1QUFFMDAxRTlBQkMgLyoga2V5d29yZHMu
dGFibGUgKi8sCiAJCQkJOTMzQTM0OTkwMzhBRTdDNjAwODYzNUNFIC8qIGdyYW1tYXIueSAqLywK
KwkJCQk2NURFNjQ2RjA4RThDODhBMDA1RDAwMkEgLyogZmFzdF9tYWxsb2MuaCAqLywKIAkJCQlG
NjkyQTg2NTAyNTU1OTdEMDFGRjYwRjcgLyogbGV4ZXIuY3BwICovLAogCQkJCUY2OTJBODY2MDI1
NTU5N0QwMUZGNjBGNyAvKiBsZXhlci5oICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBG
NyAvKiBjb25maWcuaCAqLywKQEAgLTk1Niw3ICs5ODUsNiBAQAogCQkJCTkzMkY1QjhDMDgyMkEx
QzcwMDczNjk3NSAvKiBucGFwaS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMyRjVCOEQwODIyQTFD
NzAwNzM2OTc1IC8qIG5wcnVudGltZV9wcml2LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzJGNUI4
RTA4MjJBMUM3MDA3MzY5NzUgLyogbnBydW50aW1lX2ltcGwuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTkzMkY1QjhGMDgyMkExQzcwMDczNjk3NSAvKiBmYXN0X21hbGxvYy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTMyRkMxMUQwODI0QTZBMzAwNUIzQzc1IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjU2MjFFNkUwODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5X3Nsb3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzRTI2QkU2MDhCMTUxNzEwMEY4NTIyNiAvKiBwY3JlX2lu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTk2NCw4ICs5OTIsMTMgQEAKIAkJCQk5M0UyNkJG
RTA4QjE1MUQ0MDBGODUyMjYgLyogdWNwaW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
RTI2QzEzMDhCMTUyM0QwMEY4NTIyNiAvKiB1Y3B0YWJsZS5jIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNFMjZDQ0YwOEIyOTIxOTAwRjg1MjI2IC8qIHNvZnRsaW5raW5nLmggaW4gSGVhZGVycyAqLywK
LQkJCQk2NUVGMkRGNTA4QkVDQzgwMDAwODk0QkIgLyogc2hhcmVkX3B0ci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNjUyQzEwN0YwOERBN0IxRTAwMjA4ODdEIC8qIHByb3RlY3RlZF9yZWZlcmVuY2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTY1MTYyRUVCMDhFNkExRkUwMDc1NTZDRCAvKiBTaGFyZWRQ
dHIuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1RTIxN0JEMDhFN0VFQ0MwMDIzRTVGNiAvKiBBc3Nl
cnRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQk2NUUyMTdDMDA4RTdFRUNDMDAyM0U1RjYgLyog
RmFzdE1hbGxvYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjU0MUJENzIwOEU4MEExNzAwMkNCRUU3
IC8qIFRDUGFnZU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjU0MUJENzMwOEU4MEExNzAwMkNC
RUU3IC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTY1NDFCRDc1MDhFODBBMTcw
MDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTk3Myw2ICsxMDA2
LDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTY1MTYyRjAyMDhFNkEyRDAwMDc1NTZD
RCAvKiBTaGFyZWRQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NUQ4MUY4MDg3QjI4MjIwMDZB
OTE3MiAvKiBhcnJheV9vYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NUQ4MUY5MDg3QjI4
MjIwMDZBOTE3MiAvKiBjb2xsZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NUQ4MUZBMDg3
QjI4MjIwMDZBOTE3MiAvKiBkYXRlX29iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDQyLDcg
KzEwNzYsNiBAQAogCQkJCUE4NUQ4MjNCMDg3QjI4MjIwMDZBOTE3MiAvKiBucGFwaS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTg1RDgyM0MwODdCMjgyMjAwNkE5MTcyIC8qIG5wcnVudGltZV9wcml2
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODVEODIzRDA4N0IyODIyMDA2QTkxNzIgLyogbnBydW50
aW1lX2ltcGwuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4NUQ4MjNFMDg3QjI4MjIwMDZBOTE3MiAv
KiBmYXN0X21hbGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2MjFFNzAwODlFODVEMzAwNzYw
RjM1IC8qIHByb3BlcnR5X3Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NUQ4MjNGMDg3QjI4
MjIwMDZBOTE3MiAvKiBjcmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovLAogCQkJCTkzRTI2
QkU3MDhCMTUxNzEwMEY4NTIyNiAvKiBwY3JlX2ludGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAg
LTE1OTYsNyArMTYyOSw2IEBACiAJCQkJOTMyRjVCQ0UwODIyQTFDNzAwNzM2OTc1IC8qIFdlYlNj
cmlwdE9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzMkY1QkNGMDgyMkExQzcwMDczNjk3
NSAvKiBqbmlfb2JqYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzMkY1QkQwMDgyMkExQzcwMDcz
Njk3NSAvKiBzb2Z0bGlua2luZy5jIGluIFNvdXJjZXMgKi8sCi0JCQkJOTMyRjVCRDEwODIyQTFD
NzAwNzM2OTc1IC8qIGZhc3RfbWFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NjIxRTZE
MDg5RTg1OTcwMDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzMDc1NEMxMDhCMEY2ODAwMEFCMzA1NiAvKiBwY3JlX2NvbXBpbGUuYyBpbiBTb3VyY2VzICov
LAogCQkJCTkzMDc1NEQwMDhCMEY3NDYwMEFCMzA1NiAvKiBwY3JlX3RhYmxlcy5jIGluIFNvdXJj
ZXMgKi8sCkBAIC0xNjA5LDYgKzE2NDEsOSBAQAogCQkJCTkzRTI2QkQ0MDhCMTUxNDEwMEY4NTIy
NiAvKiBwY3JlX3hjbGFzcy5jIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNFMjZDRjcwOEIyOUExQzAw
Rjg1MjI2IC8qIHBjcmVfZ2V0LmMgaW4gU291cmNlcyAqLywKIAkJCQk5M0UyNkREQzA4QjJBNEY0
MDBGODUyMjYgLyogcGNyZV9wcmludGludC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNjVFMjE3QkUw
OEU3RUVDQzAwMjNFNUY2IC8qIEFzc2VydGlvbnMubW0gaW4gU291cmNlcyAqLywKKwkJCQk2NUUy
MTdCRjA4RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1hbGxvYy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk2NTQxQkQ3NDA4RTgwQTE3MDAyQ0JFRTcgLyogVENTeXN0ZW1BbGxvYy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTE2OTEsNyArMTcyNiw2IEBACiAJCQkJQTg1RDgyN0QwODdCMjgyMjAwNkE5MTcy
IC8qIFdlYlNjcmlwdE9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4NUQ4MjdFMDg3QjI4
MjIwMDZBOTE3MiAvKiBqbmlfb2JqYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4NUQ4MjdGMDg3
QjI4MjIwMDZBOTE3MiAvKiBzb2Z0bGlua2luZy5jIGluIFNvdXJjZXMgKi8sCi0JCQkJQTg1RDgy
ODAwODdCMjgyMjAwNkE5MTcyIC8qIGZhc3RfbWFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTY1NjIxRTZGMDg5RTg1RDMwMDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzMDc1NEMwMDhCMEY2ODAwMEFCMzA1NiAvKiBwY3JlX2NvbXBpbGUuYyBpbiBT
b3VyY2VzICovLAogCQkJCTkzMDc1NENGMDhCMEY3NDYwMEFCMzA1NiAvKiBwY3JlX3RhYmxlcy5j
IGluIFNvdXJjZXMgKi8sCkBAIC0xODAwLDcgKzE4MzQsMTAgQEAKIAkJCQlHQ0NfVFJFQVRfV0FS
TklOR1NfQVNfRVJST1JTID0gWUVTOwogCQkJCUdDQ19XQVJOX0FCT1VUX01JU1NJTkdfUFJPVE9U
WVBFUyA9IFlFUzsKIAkJCQlHQ0NfV0FSTl9OT05fVklSVFVBTF9ERVNUUlVDVE9SID0gWUVTOwot
CQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSBpY3U7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9
ICgKKwkJCQkJaWN1LAorCQkJCQkuLAorCQkJCSk7CiAJCQkJSU5GT1BMSVNUX0ZJTEUgPSBJbmZv
LnBsaXN0OwogCQkJCUlOU1RBTExfUEFUSCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1dl
YktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzOwogCQkJCU1BQ09TWF9ERVBMT1lN
RU5UX1RBUkdFVCA9IDEwLjM7CkBAIC0xODUzLDcgKzE4OTAsMTAgQEAKIAkJCQlHQ0NfVFJFQVRf
V0FSTklOR1NfQVNfRVJST1JTID0gWUVTOwogCQkJCUdDQ19XQVJOX0FCT1VUX01JU1NJTkdfUFJP
VE9UWVBFUyA9IFlFUzsKIAkJCQlHQ0NfV0FSTl9OT05fVklSVFVBTF9ERVNUUlVDVE9SID0gWUVT
OwotCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSBpY3U7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRI
UyA9ICgKKwkJCQkJaWN1LAorCQkJCQkuLAorCQkJCSk7CiAJCQkJSU5GT1BMSVNUX0ZJTEUgPSBJ
bmZvLnBsaXN0OwogCQkJCUlOU1RBTExfUEFUSCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L1dlYktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzOwogCQkJCU1BQ09TWF9ERVBM
T1lNRU5UX1RBUkdFVCA9IDEwLjM7CkBAIC0xOTA2LDcgKzE5NDYsMTAgQEAKIAkJCQlHQ0NfVFJF
QVRfV0FSTklOR1NfQVNfRVJST1JTID0gWUVTOwogCQkJCUdDQ19XQVJOX0FCT1VUX01JU1NJTkdf
UFJPVE9UWVBFUyA9IFlFUzsKIAkJCQlHQ0NfV0FSTl9OT05fVklSVFVBTF9ERVNUUlVDVE9SID0g
WUVTOwotCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSBpY3U7CisJCQkJSEVBREVSX1NFQVJDSF9Q
QVRIUyA9ICgKKwkJCQkJaWN1LAorCQkJCQkuLAorCQkJCSk7CiAJCQkJSU5GT1BMSVNUX0ZJTEUg
PSBJbmZvLnBsaXN0OwogCQkJCUlOU1RBTExfUEFUSCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdv
cmtzL1dlYktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzOwogCQkJCU1BQ09TWF9E
RVBMT1lNRU5UX1RBUkdFVCA9IDEwLjM7CkBAIC0xOTU5LDcgKzIwMDIsMTAgQEAKIAkJCQlHQ0Nf
VFJFQVRfV0FSTklOR1NfQVNfRVJST1JTID0gWUVTOwogCQkJCUdDQ19XQVJOX0FCT1VUX01JU1NJ
TkdfUFJPVE9UWVBFUyA9IFlFUzsKIAkJCQlHQ0NfV0FSTl9OT05fVklSVFVBTF9ERVNUUlVDVE9S
ID0gWUVTOwotCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSBpY3U7CisJCQkJSEVBREVSX1NFQVJD
SF9QQVRIUyA9ICgKKwkJCQkJaWN1LAorCQkJCQkuLAorCQkJCSk7CiAJCQkJSU5GT1BMSVNUX0ZJ
TEUgPSBJbmZvLnBsaXN0OwogCQkJCUlOU1RBTExfUEFUSCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL1dlYktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzOwogCQkJCU9USEVS
X0NGTEFHUyA9ICIiOwpAQCAtMjIwOCw2ICsyMjU0LDEwIEBACiAJCQkJR0NDX0dFTkVSQVRFX0RF
QlVHR0lOR19TWU1CT0xTID0gWUVTOwogCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOwog
CQkJCUdDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVM7CisJCQkJSEVBREVSX1NFQVJD
SF9QQVRIUyA9ICgKKwkJCQkJIi1JIiwKKwkJCQkJLiwKKwkJCQkpOwogCQkJCU1BQ09TWF9ERVBM
T1lNRU5UX1RBUkdFVCA9IDEwLjM7CiAJCQkJUFJFQklORElORyA9IE5POwogCQkJCVBST0RVQ1Rf
TkFNRSA9IHRlc3RranM7CkBAIC0yMjM1LDYgKzIyODUsMTAgQEAKIAkJCQlHQ0NfRU5BQkxFX0NQ
UF9FWENFUFRJT05TID0gTk87CiAJCQkJR0NDX0VOQUJMRV9DUFBfUlRUSSA9IE5POwogCQkJCUdD
Q19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVM7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRI
UyA9ICgKKwkJCQkJIi1JIiwKKwkJCQkJLiwKKwkJCQkpOwogCQkJCU1BQ09TWF9ERVBMT1lNRU5U
X1RBUkdFVCA9IDEwLjM7CiAJCQkJUFJFQklORElORyA9IE5POwogCQkJCVBST0RVQ1RfTkFNRSA9
IHRlc3RranM7CkBAIC0yMjYzLDYgKzIzMTcsMTAgQEAKIAkJCQlHQ0NfRU5BQkxFX0NQUF9SVFRJ
ID0gTk87CiAJCQkJR0NDX0dFTkVSQVRFX0RFQlVHR0lOR19TWU1CT0xTID0gWUVTOwogCQkJCUdD
Q19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVM7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRI
UyA9ICgKKwkJCQkJIi1JIiwKKwkJCQkJLiwKKwkJCQkpOwogCQkJCU1BQ09TWF9ERVBMT1lNRU5U
X1RBUkdFVCA9IDEwLjM7CiAJCQkJUFJFQklORElORyA9IE5POwogCQkJCVBST0RVQ1RfTkFNRSA9
IHRlc3RranM7CkBAIC0yMjkwLDYgKzIzNDgsMTAgQEAKIAkJCQlHQ0NfRU5BQkxFX0NQUF9FWENF
UFRJT05TID0gTk87CiAJCQkJR0NDX0VOQUJMRV9DUFBfUlRUSSA9IE5POwogCQkJCUdDQ19UUkVB
VF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVM7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgK
KwkJCQkJIi1JIiwKKwkJCQkJLiwKKwkJCQkpOwogCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RranM7
CiAJCQkJV0FSTklOR19DRkxBR1MgPSAoCiAJCQkJCSItV2FsbCIsCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ranMvY29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2
YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDUK
ZGlmZiAtcCAtdSAtcjEuNDUgSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAKLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCTQgU2VwIDIwMDUgMDY6MjE6NTQgLTAwMDAJ
MS40NQorKysgSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAJMjcgU2VwIDIwMDUgMDc6
MTY6NDYgLTAwMDAKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2luY2x1ZGUgImNvbGxlY3Rvci5oIgog
Ci0jaW5jbHVkZSAiZmFzdF9tYWxsb2MuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9GYXN0TWFsbG9j
Lmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJsaXN0LmgiCiAjaW5jbHVkZSAi
dmFsdWUuaCIKQEAgLTExOCwxMCArMTE4LDEwIEBAIHZvaWQqIENvbGxlY3Rvcjo6YWxsb2NhdGUo
c2l6ZV90IHMpCiAgICAgaWYgKHVzZWRPdmVyc2l6ZUNlbGxzID09IG51bU92ZXJzaXplQ2VsbHMp
IHsKICAgICAgIG51bU92ZXJzaXplQ2VsbHMgPSBtYXgoTUlOX0FSUkFZX1NJWkUsIG51bU92ZXJz
aXplQ2VsbHMgKiBHUk9XVEhfRkFDVE9SKTsKICAgICAgIGhlYXAubnVtT3ZlcnNpemVDZWxscyA9
IG51bU92ZXJzaXplQ2VsbHM7Ci0gICAgICBoZWFwLm92ZXJzaXplQ2VsbHMgPSBzdGF0aWNfY2Fz
dDxDb2xsZWN0b3JDZWxsICoqPihranNfZmFzdF9yZWFsbG9jKGhlYXAub3ZlcnNpemVDZWxscywg
bnVtT3ZlcnNpemVDZWxscyAqIHNpemVvZihDb2xsZWN0b3JDZWxsICopKSk7CisgICAgICBoZWFw
Lm92ZXJzaXplQ2VsbHMgPSBzdGF0aWNfY2FzdDxDb2xsZWN0b3JDZWxsICoqPihmYXN0UmVhbGxv
YyhoZWFwLm92ZXJzaXplQ2VsbHMsIG51bU92ZXJzaXplQ2VsbHMgKiBzaXplb2YoQ29sbGVjdG9y
Q2VsbCAqKSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkICpuZXdDZWxsID0ga2pzX2Zhc3RfbWFs
bG9jKHMpOworICAgIHZvaWQgKm5ld0NlbGwgPSBmYXN0TWFsbG9jKHMpOwogICAgIGhlYXAub3Zl
cnNpemVDZWxsc1t1c2VkT3ZlcnNpemVDZWxsc10gPSBzdGF0aWNfY2FzdDxDb2xsZWN0b3JDZWxs
ICo+KG5ld0NlbGwpOwogICAgIGhlYXAudXNlZE92ZXJzaXplQ2VsbHMgPSB1c2VkT3ZlcnNpemVD
ZWxscyArIDE7CiAgICAgaGVhcC5udW1MaXZlT2JqZWN0cyA9IG51bUxpdmVPYmplY3RzICsgMTsK
QEAgLTE1NiwxMCArMTU2LDEwIEBAIGFsbG9jYXRlTmV3QmxvY2s6CiAgICAgaWYgKHVzZWRCbG9j
a3MgPT0gbnVtQmxvY2tzKSB7CiAgICAgICBudW1CbG9ja3MgPSBtYXgoTUlOX0FSUkFZX1NJWkUs
IG51bUJsb2NrcyAqIEdST1dUSF9GQUNUT1IpOwogICAgICAgaGVhcC5udW1CbG9ja3MgPSBudW1C
bG9ja3M7Ci0gICAgICBoZWFwLmJsb2NrcyA9IHN0YXRpY19jYXN0PENvbGxlY3RvckJsb2NrICoq
PihranNfZmFzdF9yZWFsbG9jKGhlYXAuYmxvY2tzLCBudW1CbG9ja3MgKiBzaXplb2YoQ29sbGVj
dG9yQmxvY2sgKikpKTsKKyAgICAgIGhlYXAuYmxvY2tzID0gc3RhdGljX2Nhc3Q8Q29sbGVjdG9y
QmxvY2sgKio+KGZhc3RSZWFsbG9jKGhlYXAuYmxvY2tzLCBudW1CbG9ja3MgKiBzaXplb2YoQ29s
bGVjdG9yQmxvY2sgKikpKTsKICAgICB9CiAKLSAgICB0YXJnZXRCbG9jayA9IHN0YXRpY19jYXN0
PENvbGxlY3RvckJsb2NrICo+KGtqc19mYXN0X2NhbGxvYygxLCBzaXplb2YoQ29sbGVjdG9yQmxv
Y2spKSk7CisgICAgdGFyZ2V0QmxvY2sgPSBzdGF0aWNfY2FzdDxDb2xsZWN0b3JCbG9jayAqPihm
YXN0Q2FsbG9jKDEsIHNpemVvZihDb2xsZWN0b3JCbG9jaykpKTsKICAgICB0YXJnZXRCbG9jay0+
ZnJlZUxpc3QgPSB0YXJnZXRCbG9jay0+Y2VsbHM7CiAgICAgdGFyZ2V0QmxvY2tVc2VkQ2VsbHMg
PSAwOwogICAgIGhlYXAuYmxvY2tzW3VzZWRCbG9ja3NdID0gdGFyZ2V0QmxvY2s7CkBAIC00NTQs
NyArNDU0LDcgQEAgYm9vbCBDb2xsZWN0b3I6OmNvbGxlY3QoKQogICAgICAgZW1wdHlCbG9ja3Mr
KzsKICAgICAgIGlmIChlbXB0eUJsb2NrcyA+IFNQQVJFX0VNUFRZX0JMT0NLUykgewogI2lmICFE
RUJVR19DT0xMRUNUT1IKLSAgICAgICAga2pzX2Zhc3RfZnJlZShjdXJCbG9jayk7CisgICAgICAg
IGZhc3RGcmVlKGN1ckJsb2NrKTsKICNlbmRpZgogICAgICAgICAvLyBzd2FwIHdpdGggdGhlIGxh
c3QgYmxvY2sgc28gd2UgY29tcGFjdCBhcyB3ZSBnbwogICAgICAgICBoZWFwLmJsb2Nrc1tibG9j
a10gPSBoZWFwLmJsb2Nrc1toZWFwLnVzZWRCbG9ja3MgLSAxXTsKQEAgLTQ2Myw3ICs0NjMsNyBA
QCBib29sIENvbGxlY3Rvcjo6Y29sbGVjdCgpCiAKICAgICAgICAgaWYgKGhlYXAubnVtQmxvY2tz
ID4gTUlOX0FSUkFZX1NJWkUgJiYgaGVhcC51c2VkQmxvY2tzIDwgaGVhcC5udW1CbG9ja3MgLyBM
T1dfV0FURVJfRkFDVE9SKSB7CiAgICAgICAgICAgaGVhcC5udW1CbG9ja3MgPSBoZWFwLm51bUJs
b2NrcyAvIEdST1dUSF9GQUNUT1I7IAotICAgICAgICAgIGhlYXAuYmxvY2tzID0gKENvbGxlY3Rv
ckJsb2NrICoqKWtqc19mYXN0X3JlYWxsb2MoaGVhcC5ibG9ja3MsIGhlYXAubnVtQmxvY2tzICog
c2l6ZW9mKENvbGxlY3RvckJsb2NrICopKTsKKyAgICAgICAgICBoZWFwLmJsb2NrcyA9IChDb2xs
ZWN0b3JCbG9jayAqKilmYXN0UmVhbGxvYyhoZWFwLmJsb2NrcywgaGVhcC5udW1CbG9ja3MgKiBz
aXplb2YoQ29sbGVjdG9yQmxvY2sgKikpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAt
NDgxLDcgKzQ4MSw3IEBAIGJvb2wgQ29sbGVjdG9yOjpjb2xsZWN0KCkKICNpZiBERUJVR19DT0xM
RUNUT1IKICAgICAgIGhlYXAub3ZlcnNpemVDZWxsc1tjZWxsXS0+dS5mcmVlQ2VsbC56ZXJvSWZG
cmVlID0gMDsKICNlbHNlCi0gICAgICBranNfZmFzdF9mcmVlKGltcCk7CisgICAgICBmYXN0RnJl
ZShpbXApOwogI2VuZGlmCiAKICAgICAgIC8vIHN3YXAgd2l0aCB0aGUgbGFzdCBvdmVyc2l6ZSBj
ZWxsIHNvIHdlIGNvbXBhY3QgYXMgd2UgZ28KQEAgLTQ5Miw3ICs0OTIsNyBAQCBib29sIENvbGxl
Y3Rvcjo6Y29sbGVjdCgpCiAKICAgICAgIGlmIChoZWFwLm51bU92ZXJzaXplQ2VsbHMgPiBNSU5f
QVJSQVlfU0laRSAmJiBoZWFwLnVzZWRPdmVyc2l6ZUNlbGxzIDwgaGVhcC5udW1PdmVyc2l6ZUNl
bGxzIC8gTE9XX1dBVEVSX0ZBQ1RPUikgewogICAgICAgICBoZWFwLm51bU92ZXJzaXplQ2VsbHMg
PSBoZWFwLm51bU92ZXJzaXplQ2VsbHMgLyBHUk9XVEhfRkFDVE9SOyAKLSAgICAgICAgaGVhcC5v
dmVyc2l6ZUNlbGxzID0gKENvbGxlY3RvckNlbGwgKiopa2pzX2Zhc3RfcmVhbGxvYyhoZWFwLm92
ZXJzaXplQ2VsbHMsIGhlYXAubnVtT3ZlcnNpemVDZWxscyAqIHNpemVvZihDb2xsZWN0b3JDZWxs
ICopKTsKKyAgICAgICAgaGVhcC5vdmVyc2l6ZUNlbGxzID0gKENvbGxlY3RvckNlbGwgKiopZmFz
dFJlYWxsb2MoaGVhcC5vdmVyc2l6ZUNlbGxzLCBoZWFwLm51bU92ZXJzaXplQ2VsbHMgKiBzaXpl
b2YoQ29sbGVjdG9yQ2VsbCAqKSk7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIGltcC0+
bV9tYXJrZWQgPSBmYWxzZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9jb25maWcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2NvbmZpZy5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEuOCBKYXZhU2NyaXB0Q29yZS9r
anMvY29uZmlnLmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9jb25maWcuaAk0IFNlcCAyMDA1IDAx
OjE4OjEwIC0wMDAwCTEuOAorKysgSmF2YVNjcmlwdENvcmUva2pzL2NvbmZpZy5oCTI3IFNlcCAy
MDA1IDA3OjE2OjQ2IC0wMDAwCkBAIC0xOSw2ICsxOSwxMCBAQAogI2RlZmluZSBIQVZFX0lDVSAx
CiAjZGVmaW5lIEhBVkVfUENSRVBPU0lYIDEKICNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCisjZGVm
aW5lIEhBVkVfU1RESU5UX0ggMQorCisjZGVmaW5lIEhBVkVfTU1BUCAxCisjZGVmaW5lIEhBVkVf
U0JSSyAxCiAKICNpZmRlZiBfX3BwY19fCiAjZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCkBAIC0y
NiwzICszMCw1IEBACiAKIC8qIGRlZmluZSB0byBkZWJ1ZyBnYXJiYWdlIGNvbGxlY3Rpb24gKi8K
ICN1bmRlZiBERUJVR19DT0xMRUNUT1IKKworI2RlZmluZSBLWENfQ0hBTkdFUyAxCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvZmFzdF9tYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGtq
cy9mYXN0X21hbGxvYy5jcHAKZGlmZiAtTiBKYXZhU2NyaXB0Q29yZS9ranMvZmFzdF9tYWxsb2Mu
Y3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZmFzdF9tYWxsb2MuY3BwCTE5IFNlcCAyMDA1IDA2
OjU3OjI3IC0wMDAwCTEuNgorKysgSmF2YVNjcmlwdENvcmUva2pzL2Zhc3RfbWFsbG9jLmNwcAkx
IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDU2MTMgKzAsMCBAQAotLyoKLSAgVGhpcyBp
cyBhIHZlcnNpb24gKGFrYSBkbG1hbGxvYykgb2YgbWFsbG9jL2ZyZWUvcmVhbGxvYyB3cml0dGVu
IGJ5Ci0gIERvdWcgTGVhIGFuZCByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbi4gIFVzZSwg
bW9kaWZ5LCBhbmQKLSAgcmVkaXN0cmlidXRlIHRoaXMgY29kZSB3aXRob3V0IHBlcm1pc3Npb24g
b3IgYWNrbm93bGVkZ2VtZW50IGluIGFueQotICB3YXkgeW91IHdpc2guICBTZW5kIHF1ZXN0aW9u
cywgY29tbWVudHMsIGNvbXBsYWludHMsIHBlcmZvcm1hbmNlCi0gIGRhdGEsIGV0YyB0byBkbEBj
cy5vc3dlZ28uZWR1Ci0KLSogVkVSU0lPTiAyLjcuMiBTYXQgQXVnIDE3IDA5OjA3OjMwIDIwMDIg
IERvdWcgTGVhICAoZGwgYXQgZ2VlKQotCi0gICBOb3RlOiBUaGVyZSBtYXkgYmUgYW4gdXBkYXRl
ZCB2ZXJzaW9uIG9mIHRoaXMgbWFsbG9jIG9idGFpbmFibGUgYXQKLSAgICAgICAgICAgZnRwOi8v
Z2VlLmNzLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLmMKLSAgICAgICAgIENoZWNrIGJlZm9y
ZSBpbnN0YWxsaW5nIQotCi0qIFF1aWNrc3RhcnQKLQotICBUaGlzIGxpYnJhcnkgaXMgYWxsIGlu
IG9uZSBmaWxlIHRvIHNpbXBsaWZ5IHRoZSBtb3N0IGNvbW1vbiB1c2FnZToKLSAgZnRwIGl0LCBj
b21waWxlIGl0ICgtTyksIGFuZCBsaW5rIGl0IGludG8gYW5vdGhlciBwcm9ncmFtLiBBbGwKLSAg
b2YgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIGRlZmF1bHQgdG8gcmVhc29uYWJsZSB2YWx1ZXMg
Zm9yIHVzZSBvbgotICBtb3N0IHVuaXggcGxhdGZvcm1zLiBDb21waWxlIC1EV0lOMzIgZm9yIHJl
YXNvbmFibGUgZGVmYXVsdHMgb24gd2luZG93cy4KLSAgWW91IG1pZ2h0IGxhdGVyIHdhbnQgdG8g
c3RlcCB0aHJvdWdoIHZhcmlvdXMgY29tcGlsZS10aW1lIGFuZCBkeW5hbWljCi0gIHR1bmluZyBv
cHRpb25zLgotCi0gIEZvciBjb252ZW5pZW5jZSwgYW4gaW5jbHVkZSBmaWxlIGZvciBjb2RlIHVz
aW5nIHRoaXMgbWFsbG9jIGlzIGF0OgotICAgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIv
bWlzYy9tYWxsb2MtMi43LjEuaAotICBZb3UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyAuaCBmaWxl
IHVubGVzcyB5b3UgY2FsbCBmdW5jdGlvbnMgbm90Ci0gIGRlZmluZWQgaW4geW91ciBzeXN0ZW0g
aW5jbHVkZSBmaWxlcy4gIFRoZSAuaCBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlCi0gIGV4Y2VycHRz
IGZyb20gdGhpcyBmaWxlIG5lZWRlZCBmb3IgdXNpbmcgdGhpcyBtYWxsb2Mgb24gQU5TSSBDL0Mr
KwotICBzeXN0ZW1zLCBzbyBsb25nIGFzIHlvdSBoYXZlbid0IGNoYW5nZWQgY29tcGlsZS10aW1l
IG9wdGlvbnMgYWJvdXQKLSAgbmFtaW5nIGFuZCB0dW5pbmcgcGFyYW1ldGVycy4gIElmIHlvdSBk
bywgdGhlbiB5b3UgY2FuIGNyZWF0ZSB5b3VyCi0gIG93biBtYWxsb2MuaCB0aGF0IGRvZXMgaW5j
bHVkZSBhbGwgc2V0dGluZ3MgYnkgY3V0dGluZyBhdCB0aGUgcG9pbnQKLSAgaW5kaWNhdGVkIGJl
bG93LgotCi0qIFdoeSB1c2UgdGhpcyBtYWxsb2M/Ci0KLSAgVGhpcyBpcyBub3QgdGhlIGZhc3Rl
c3QsIG1vc3Qgc3BhY2UtY29uc2VydmluZywgbW9zdCBwb3J0YWJsZSwgb3IKLSAgbW9zdCB0dW5h
YmxlIG1hbGxvYyBldmVyIHdyaXR0ZW4uIEhvd2V2ZXIgaXQgaXMgYW1vbmcgdGhlIGZhc3Rlc3QK
LSAgd2hpbGUgYWxzbyBiZWluZyBhbW9uZyB0aGUgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBwb3J0
YWJsZSBhbmQgdHVuYWJsZS4KLSAgQ29uc2lzdGVudCBiYWxhbmNlIGFjcm9zcyB0aGVzZSBmYWN0
b3JzIHJlc3VsdHMgaW4gYSBnb29kIGdlbmVyYWwtcHVycG9zZQotICBhbGxvY2F0b3IgZm9yIG1h
bGxvYy1pbnRlbnNpdmUgcHJvZ3JhbXMuCi0KLSAgVGhlIG1haW4gcHJvcGVydGllcyBvZiB0aGUg
YWxnb3JpdGhtcyBhcmU6Ci0gICogRm9yIGxhcmdlICg+PSA1MTIgYnl0ZXMpIHJlcXVlc3RzLCBp
dCBpcyBhIHB1cmUgYmVzdC1maXQgYWxsb2NhdG9yLAotICAgIHdpdGggdGllcyBub3JtYWxseSBk
ZWNpZGVkIHZpYSBGSUZPIChpLmUuIGxlYXN0IHJlY2VudGx5IHVzZWQpLgotICAqIEZvciBzbWFs
bCAoPD0gNjQgYnl0ZXMgYnkgZGVmYXVsdCkgcmVxdWVzdHMsIGl0IGlzIGEgY2FjaGluZwotICAg
IGFsbG9jYXRvciwgdGhhdCBtYWludGFpbnMgcG9vbHMgb2YgcXVpY2tseSByZWN5Y2xlZCBjaHVu
a3MuCi0gICogSW4gYmV0d2VlbiwgYW5kIGZvciBjb21iaW5hdGlvbnMgb2YgbGFyZ2UgYW5kIHNt
YWxsIHJlcXVlc3RzLCBpdCBkb2VzCi0gICAgdGhlIGJlc3QgaXQgY2FuIHRyeWluZyB0byBtZWV0
IGJvdGggZ29hbHMgYXQgb25jZS4KLSAgKiBGb3IgdmVyeSBsYXJnZSByZXF1ZXN0cyAoPj0gMTI4
S0IgYnkgZGVmYXVsdCksIGl0IHJlbGllcyBvbiBzeXN0ZW0KLSAgICBtZW1vcnkgbWFwcGluZyBm
YWNpbGl0aWVzLCBpZiBzdXBwb3J0ZWQuCi0KLSAgRm9yIGEgbG9uZ2VyIGJ1dCBzbGlnaHRseSBv
dXQgb2YgZGF0ZSBoaWdoLWxldmVsIGRlc2NyaXB0aW9uLCBzZWUKLSAgICAgaHR0cDovL2dlZS5j
cy5vc3dlZ28uZWR1L2RsL2h0bWwvbWFsbG9jLmh0bWwKLQotICBZb3UgbWF5IGFscmVhZHkgYnkg
ZGVmYXVsdCBiZSB1c2luZyBhIEMgbGlicmFyeSBjb250YWluaW5nIGEgbWFsbG9jCi0gIHRoYXQg
aXMgIGJhc2VkIG9uIHNvbWUgdmVyc2lvbiBvZiB0aGlzIG1hbGxvYyAoZm9yIGV4YW1wbGUgaW4K
LSAgbGludXgpLiBZb3UgbWlnaHQgc3RpbGwgd2FudCB0byB1c2UgdGhlIG9uZSBpbiB0aGlzIGZp
bGUgaW4gb3JkZXIgdG8KLSAgY3VzdG9taXplIHNldHRpbmdzIG9yIHRvIGF2b2lkIG92ZXJoZWFk
cyBhc3NvY2lhdGVkIHdpdGggbGlicmFyeQotICB2ZXJzaW9ucy4KLQotKiBDb250ZW50cywgZGVz
Y3JpYmVkIGluIG1vcmUgZGV0YWlsIGluICJkZXNjcmlwdGlvbiBvZiBwdWJsaWMgcm91dGluZXMi
IGJlbG93LgotCi0gIFN0YW5kYXJkIChBTlNJL1NWSUQvLi4uKSAgZnVuY3Rpb25zOgotICAgIG1h
bGxvYyhzaXplX3Qgbik7Ci0gICAgY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxl
bWVudF9zaXplKTsKLSAgICBmcmVlKFZvaWRfdCogcCk7Ci0gICAgcmVhbGxvYyhWb2lkX3QqIHAs
IHNpemVfdCBuKTsKLSAgICBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgbik7Ci0g
ICAgdmFsbG9jKHNpemVfdCBuKTsKLSAgICBtYWxsaW5mbygpCi0gICAgbWFsbG9wdChpbnQgcGFy
YW1ldGVyX251bWJlciwgaW50IHBhcmFtZXRlcl92YWx1ZSkKLQotICBBZGRpdGlvbmFsIGZ1bmN0
aW9uczoKLSAgICBpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBz
aXplLCBWb2lkX3QqIGNodW5rc1tdKTsKLSAgICBpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qg
bl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sIFZvaWRfdCogY2h1bmtzW10pOwotICAgIHB2YWxs
b2Moc2l6ZV90IG4pOwotICAgIGNmcmVlKFZvaWRfdCogcCk7Ci0gICAgbWFsbG9jX3RyaW0oc2l6
ZV90IHBhZCk7Ci0gICAgbWFsbG9jX3VzYWJsZV9zaXplKFZvaWRfdCogcCk7Ci0gICAgbWFsbG9j
X3N0YXRzKCk7Ci0KLSogVml0YWwgc3RhdGlzdGljczoKLQotICBTdXBwb3J0ZWQgcG9pbnRlciBy
ZXByZXNlbnRhdGlvbjogICAgICAgNCBvciA4IGJ5dGVzCi0gIFN1cHBvcnRlZCBzaXplX3QgIHJl
cHJlc2VudGF0aW9uOiAgICAgICA0IG9yIDggYnl0ZXMgCi0gICAgICAgTm90ZSB0aGF0IHNpemVf
dCBpcyBhbGxvd2VkIHRvIGJlIDQgYnl0ZXMgZXZlbiBpZiBwb2ludGVycyBhcmUgOC4KLSAgICAg
ICBZb3UgY2FuIGFkanVzdCB0aGlzIGJ5IGRlZmluaW5nIElOVEVSTkFMX1NJWkVfVAotCi0gIEFs
aWdubWVudDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICogc2l6ZW9mKHNpemVfdCkg
KGRlZmF1bHQpCi0gICAgICAgKGkuZS4sIDggYnl0ZSBhbGlnbm1lbnQgd2l0aCA0Ynl0ZSBzaXpl
X3QpLiBUaGlzIHN1ZmZpY2VzIGZvcgotICAgICAgIG5lYXJseSBhbGwgY3VycmVudCBtYWNoaW5l
cyBhbmQgQyBjb21waWxlcnMuIEhvd2V2ZXIsIHlvdSBjYW4KLSAgICAgICBkZWZpbmUgTUFMTE9D
X0FMSUdOTUVOVCB0byBiZSB3aWRlciB0aGFuIHRoaXMgaWYgbmVjZXNzYXJ5LgotCi0gIE1pbmlt
dW0gb3ZlcmhlYWQgcGVyIGFsbG9jYXRlZCBjaHVuazogICA0IG9yIDggYnl0ZXMKLSAgICAgICBF
YWNoIG1hbGxvY2VkIGNodW5rIGhhcyBhIGhpZGRlbiB3b3JkIG9mIG92ZXJoZWFkIGhvbGRpbmcg
c2l6ZQotICAgICAgIGFuZCBzdGF0dXMgaW5mb3JtYXRpb24uCi0KLSAgTWluaW11bSBhbGxvY2F0
ZWQgc2l6ZTogNC1ieXRlIHB0cnM6ICAxNiBieXRlcyAgICAoaW5jbHVkaW5nIDQgb3ZlcmhlYWQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDgtYnl0ZSBwdHJzOiAgMjQvMzIgYnl0ZXMgKGlu
Y2x1ZGluZywgNC84IG92ZXJoZWFkKQotCi0gICAgICAgV2hlbiBhIGNodW5rIGlzIGZyZWVkLCAx
MiAoZm9yIDRieXRlIHB0cnMpIG9yIDIwIChmb3IgOCBieXRlCi0gICAgICAgcHRycyBidXQgNCBi
eXRlIHNpemUpIG9yIDI0IChmb3IgOC84KSBhZGRpdGlvbmFsIGJ5dGVzIGFyZQotICAgICAgIG5l
ZWRlZDsgNCAoOCkgZm9yIGEgdHJhaWxpbmcgc2l6ZSBmaWVsZCBhbmQgOCAoMTYpIGJ5dGVzIGZv
cgotICAgICAgIGZyZWUgbGlzdCBwb2ludGVycy4gVGh1cywgdGhlIG1pbmltdW0gYWxsb2NhdGFi
bGUgc2l6ZSBpcwotICAgICAgIDE2LzI0LzMyIGJ5dGVzLgotCi0gICAgICAgRXZlbiBhIHJlcXVl
c3QgZm9yIHplcm8gYnl0ZXMgKGkuZS4sIG1hbGxvYygwKSkgcmV0dXJucyBhCi0gICAgICAgcG9p
bnRlciB0byBzb21ldGhpbmcgb2YgdGhlIG1pbmltdW0gYWxsb2NhdGFibGUgc2l6ZS4KLQotICAg
ICAgIFRoZSBtYXhpbXVtIG92ZXJoZWFkIHdhc3RhZ2UgKGkuZS4sIG51bWJlciBvZiBleHRyYSBi
eXRlcwotICAgICAgIGFsbG9jYXRlZCB0aGFuIHdlcmUgcmVxdWVzdGVkIGluIG1hbGxvYykgaXMg
bGVzcyB0aGFuIG9yIGVxdWFsCi0gICAgICAgdG8gdGhlIG1pbmltdW0gc2l6ZSwgZXhjZXB0IGZv
ciByZXF1ZXN0cyA+PSBtbWFwX3RocmVzaG9sZCB0aGF0Ci0gICAgICAgYXJlIHNlcnZpY2VkIHZp
YSBtbWFwKCksIHdoZXJlIHRoZSB3b3JzdCBjYXNlIHdhc3RhZ2UgaXMgMiAqCi0gICAgICAgc2l6
ZW9mKHNpemVfdCkgYnl0ZXMgcGx1cyB0aGUgcmVtYWluZGVyIGZyb20gYSBzeXN0ZW0gcGFnZSAo
dGhlCi0gICAgICAgbWluaW1hbCBtbWFwIHVuaXQpOyB0eXBpY2FsbHkgNDA5NiBvciA4MTkyIGJ5
dGVzLgotCi0gIE1heGltdW0gYWxsb2NhdGVkIHNpemU6ICA0LWJ5dGUgc2l6ZV90OiAyXjMyIG1p
bnVzIGFib3V0IHR3byBwYWdlcyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDgtYnl0ZSBz
aXplX3Q6IDJeNjQgbWludXMgYWJvdXQgdHdvIHBhZ2VzCi0KLSAgICAgICBJdCBpcyBhc3N1bWVk
IHRoYXQgKHBvc3NpYmx5IHNpZ25lZCkgc2l6ZV90IHZhbHVlcyBzdWZmaWNlIHRvCi0gICAgICAg
cmVwcmVzZW50IGNodW5rIHNpemVzLiBgUG9zc2libHkgc2lnbmVkJyBpcyBkdWUgdG8gdGhlIGZh
Y3QKLSAgICAgICB0aGF0IGBzaXplX3QnIG1heSBiZSBkZWZpbmVkIG9uIGEgc3lzdGVtIGFzIGVp
dGhlciBhIHNpZ25lZCBvcgotICAgICAgIGFuIHVuc2lnbmVkIHR5cGUuIFRoZSBJU08gQyBzdGFu
ZGFyZCBzYXlzIHRoYXQgaXQgbXVzdCBiZQotICAgICAgIHVuc2lnbmVkLCBidXQgYSBmZXcgc3lz
dGVtcyBhcmUga25vd24gbm90IHRvIGFkaGVyZSB0byB0aGlzLgotICAgICAgIEFkZGl0aW9uYWxs
eSwgZXZlbiB3aGVuIHNpemVfdCBpcyB1bnNpZ25lZCwgc2JyayAod2hpY2ggaXMgYnkKLSAgICAg
ICBkZWZhdWx0IHVzZWQgdG8gb2J0YWluIG1lbW9yeSBmcm9tIHN5c3RlbSkgYWNjZXB0cyBzaWdu
ZWQKLSAgICAgICBhcmd1bWVudHMsIGFuZCBtYXkgbm90IGJlIGFibGUgdG8gaGFuZGxlIHNpemVf
dC13aWRlIGFyZ3VtZW50cwotICAgICAgIHdpdGggbmVnYXRpdmUgc2lnbiBiaXQuICBHZW5lcmFs
bHksIHZhbHVlcyB0aGF0IHdvdWxkCi0gICAgICAgYXBwZWFyIGFzIG5lZ2F0aXZlIGFmdGVyIGFj
Y291bnRpbmcgZm9yIG92ZXJoZWFkIGFuZCBhbGlnbm1lbnQKLSAgICAgICBhcmUgc3VwcG9ydGVk
IG9ubHkgdmlhIG1tYXAoKSwgd2hpY2ggZG9lcyBub3QgaGF2ZSB0aGlzCi0gICAgICAgbGltaXRh
dGlvbi4KLQotICAgICAgIFJlcXVlc3RzIGZvciBzaXplcyBvdXRzaWRlIHRoZSBhbGxvd2VkIHJh
bmdlIHdpbGwgcGVyZm9ybSBhbiBvcHRpb25hbAotICAgICAgIGZhaWx1cmUgYWN0aW9uIGFuZCB0
aGVuIHJldHVybiBudWxsLiAoUmVxdWVzdHMgbWF5IGFsc28KLSAgICAgICBhbHNvIGZhaWwgYmVj
YXVzZSBhIHN5c3RlbSBpcyBvdXQgb2YgbWVtb3J5LikKLQotICBUaHJlYWQtc2FmZXR5OiBOT1Qg
dGhyZWFkLXNhZmUgdW5sZXNzIFVTRV9NQUxMT0NfTE9DSyBkZWZpbmVkCi0KLSAgICAgICBXaGVu
IFVTRV9NQUxMT0NfTE9DSyBpcyBkZWZpbmVkLCB3cmFwcGVycyBhcmUgY3JlYXRlZCB0bwotICAg
ICAgIHN1cnJvdW5kIGV2ZXJ5IHB1YmxpYyBjYWxsIHdpdGggZWl0aGVyIGEgcHRocmVhZCBtdXRl
eCBvcgotICAgICAgIGEgd2luMzIgc3BpbmxvY2sgKGRlcGVuZGluZyBvbiBXSU4zMikuIFRoaXMg
aXMgbm90Ci0gICAgICAgZXNwZWNpYWxseSBmYXN0LCBhbmQgY2FuIGJlIGEgbWFqb3IgYm90dGxl
bmVjay4KLSAgICAgICBJdCBpcyBkZXNpZ25lZCBvbmx5IHRvIHByb3ZpZGUgbWluaW1hbCBwcm90
ZWN0aW9uCi0gICAgICAgaW4gY29uY3VycmVudCBlbnZpcm9ubWVudHMsIGFuZCB0byBwcm92aWRl
IGEgYmFzaXMgZm9yCi0gICAgICAgZXh0ZW5zaW9ucy4gIElmIHlvdSBhcmUgdXNpbmcgbWFsbG9j
IGluIGEgY29uY3VycmVudCBwcm9ncmFtLAotICAgICAgIHlvdSB3b3VsZCBiZSBmYXIgYmV0dGVy
IG9mZiBvYnRhaW5pbmcgcHRtYWxsb2MsIHdoaWNoIGlzCi0gICAgICAgZGVyaXZlZCBmcm9tIGEg
dmVyc2lvbiBvZiB0aGlzIG1hbGxvYywgYW5kIGlzIHdlbGwtdHVuZWQgZm9yCi0gICAgICAgY29u
Y3VycmVudCBwcm9ncmFtcy4gKFNlZSBodHRwOi8vd3d3Lm1hbGxvYy5kZSkgTm90ZSB0aGF0Ci0g
ICAgICAgZXZlbiB3aGVuIFVTRV9NQUxMT0NfTE9DSyBpcyBkZWZpbmVkLCB5b3UgY2FuIGNhbiBn
dWFyYW50ZWUKLSAgICAgICBmdWxsIHRocmVhZC1zYWZldHkgb25seSBpZiBubyB0aHJlYWRzIGFj
cXVpcmUgbWVtb3J5IHRocm91Z2ggCi0gICAgICAgZGlyZWN0IGNhbGxzIHRvIE1PUkVDT1JFIG9y
IG90aGVyIHN5c3RlbS1sZXZlbCBhbGxvY2F0b3JzLgotCi0gIENvbXBsaWFuY2U6IEkgYmVsaWV2
ZSBpdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgMTk5NyBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9u
Ci0gICAgICAgKFNlZSBodHRwOi8vd3d3Lm9wZW5uYy5vcmcpLiBBbHNvIFNWSUQvWFBHLCBBTlNJ
IEMsIGFuZCBwcm9iYWJseSAKLSAgICAgICBvdGhlcnMgYXMgd2VsbC4KLQotKiBTeW5vcHNpcyBv
ZiBjb21waWxlLXRpbWUgb3B0aW9uczoKLQotICAgIFBlb3BsZSBoYXZlIHJlcG9ydGVkIHVzaW5n
IHByZXZpb3VzIHZlcnNpb25zIG9mIHRoaXMgbWFsbG9jIG9uIGFsbAotICAgIHZlcnNpb25zIG9m
IFVuaXgsIHNvbWV0aW1lcyBieSB0d2Vha2luZyBzb21lIG9mIHRoZSBkZWZpbmVzCi0gICAgYmVs
b3cuIEl0IGhhcyBiZWVuIHRlc3RlZCBtb3N0IGV4dGVuc2l2ZWx5IG9uIFNvbGFyaXMgYW5kCi0g
ICAgTGludXguIEl0IGlzIGFsc28gcmVwb3J0ZWQgdG8gd29yayBvbiBXSU4zMiBwbGF0Zm9ybXMu
Ci0gICAgUGVvcGxlIGFsc28gcmVwb3J0IHVzaW5nIGl0IGluIHN0YW5kLWFsb25lIGVtYmVkZGVk
IHN5c3RlbXMuCi0KLSAgICBUaGUgaW1wbGVtZW50YXRpb24gaXMgaW4gc3RyYWlnaHQsIGhhbmQt
dHVuZWQgQU5TSSBDLiAgSXQgaXMgbm90Ci0gICAgYXQgYWxsIG1vZHVsYXIuIChTb3JyeSEpICBJ
dCB1c2VzIGEgbG90IG9mIG1hY3Jvcy4gIFRvIGJlIGF0IGFsbAotICAgIHVzYWJsZSwgdGhpcyBj
b2RlIHNob3VsZCBiZSBjb21waWxlZCB1c2luZyBhbiBvcHRpbWl6aW5nIGNvbXBpbGVyCi0gICAg
KGZvciBleGFtcGxlIGdjYyAtTzMpIHRoYXQgY2FuIHNpbXBsaWZ5IGV4cHJlc3Npb25zIGFuZCBj
b250cm9sCi0gICAgcGF0aHMuIChGQVE6IHNvbWUgbWFjcm9zIGltcG9ydCB2YXJpYWJsZXMgYXMg
YXJndW1lbnRzIHJhdGhlciB0aGFuCi0gICAgZGVjbGFyZSBsb2NhbHMgYmVjYXVzZSBwZW9wbGUg
cmVwb3J0ZWQgdGhhdCBzb21lIGRlYnVnZ2VycwotICAgIG90aGVyd2lzZSBnZXQgY29uZnVzZWQu
KQotCi0gICAgT1BUSU9OICAgICAgICAgICAgICAgICAgICAgREVGQVVMVCBWQUxVRQotCi0gICAg
Q29tcGlsYXRpb24gRW52aXJvbm1lbnQgb3B0aW9uczoKLQotICAgIF9fU1REX0MgICAgICAgICAg
ICAgICAgICAgIGRlcml2ZWQgZnJvbSBDIGNvbXBpbGVyIGRlZmluZXMKLSAgICBXSU4zMiAgICAg
ICAgICAgICAgICAgICAgICBOT1QgZGVmaW5lZAotICAgIEhBVkVfTUVNQ1BZICAgICAgICAgICAg
ICAgIGRlZmluZWQKLSAgICBVU0VfTUVNQ1BZICAgICAgICAgICAgICAgICAxIGlmIEhBVkVfTUVN
Q1BZIGlzIGRlZmluZWQKLSAgICBIQVZFX01NQVAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGFz
IDEgCi0gICAgTU1BUF9DTEVBUlMgICAgICAgICAgICAgICAgMQotICAgIEhBVkVfTVJFTUFQICAg
ICAgICAgICAgICAgIDAgdW5sZXNzIGxpbnV4IGRlZmluZWQKLSAgICBtYWxsb2NfZ2V0cGFnZXNp
emUgICAgICAgICBkZXJpdmVkIGZyb20gc3lzdGVtICNpbmNsdWRlcywgb3IgNDA5NiBpZiBub3QK
LSAgICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICBOT1QgZGVmaW5lZAotICAgIExBQ0tTX1VO
SVNURF9IICAgICAgICAgICAgIE5PVCBkZWZpbmVkIHVubGVzcyBXSU4zMgotICAgIExBQ0tTX1NZ
U19QQVJBTV9IICAgICAgICAgIE5PVCBkZWZpbmVkIHVubGVzcyBXSU4zMgotICAgIExBQ0tTX1NZ
U19NTUFOX0ggICAgICAgICAgIE5PVCBkZWZpbmVkIHVubGVzcyBXSU4zMgotICAgIExBQ0tTX0ZD
TlRMX0ggICAgICAgICAgICAgIE5PVCBkZWZpbmVkCi0KLSAgICBDaGFuZ2luZyBkZWZhdWx0IHdv
cmQgc2l6ZXM6Ci0KLSAgICBJTlRFUk5BTF9TSVpFX1QgICAgICAgICAgICBzaXplX3QKLSAgICBN
QUxMT0NfQUxJR05NRU5UICAgICAgICAgICAyICogc2l6ZW9mKElOVEVSTkFMX1NJWkVfVCkKLSAg
ICBQVFJfVUlOVCAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nCi0gICAgQ0hVTktfU0la
RV9UICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZwotCi0gICAgQ29uZmlndXJhdGlvbiBhbmQg
ZnVuY3Rpb25hbGl0eSBvcHRpb25zOgotCi0gICAgVVNFX0RMX1BSRUZJWCAgICAgICAgICAgICAg
Tk9UIGRlZmluZWQKLSAgICBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVSUyBOT1QgZGVmaW5lZAot
ICAgIFVTRV9NQUxMT0NfTE9DSyAgICAgICAgICAgIE5PVCBkZWZpbmVkCi0gICAgREVCVUcgICAg
ICAgICAgICAgICAgICAgICAgTk9UIGRlZmluZWQKLSAgICBSRUFMTE9DX1pFUk9fQllURVNfRlJF
RVMgICBOT1QgZGVmaW5lZAotICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTiAgICAgIGVycm5vID0g
RU5PTUVNLCBpZiBfX1NURF9DIGRlZmluZWQsIGVsc2Ugbm8tb3AKLSAgICBUUklNX0ZBU1RCSU5T
ICAgICAgICAgICAgICAwCi0gICAgRklSU1RfU09SVEVEX0JJTl9TSVpFICAgICAgNTEyCi0KLSAg
ICBPcHRpb25zIGZvciBjdXN0b21pemluZyBNT1JFQ09SRToKLQotICAgIE1PUkVDT1JFICAgICAg
ICAgICAgICAgICAgIHNicmsKLSAgICBNT1JFQ09SRV9DT05USUdVT1VTICAgICAgICAxIAotICAg
IE1PUkVDT1JFX0NBTk5PVF9UUklNICAgICAgIE5PVCBkZWZpbmVkCi0gICAgTU1BUF9BU19NT1JF
Q09SRV9TSVpFICAgICAgKDEwMjQgKiAxMDI0KSAKLQotICAgIFR1bmluZyBvcHRpb25zIHRoYXQg
YXJlIGFsc28gZHluYW1pY2FsbHkgY2hhbmdlYWJsZSB2aWEgbWFsbG9wdDoKLQotICAgIERFRkFV
TFRfTVhGQVNUICAgICAgICAgICAgIDY0Ci0gICAgREVGQVVMVF9UUklNX1RIUkVTSE9MRCAgICAg
MjU2ICogMTAyNAotICAgIERFRkFVTFRfVE9QX1BBRCAgICAgICAgICAgIDAKLSAgICBERUZBVUxU
X01NQVBfVEhSRVNIT0xEICAgICAyNTYgKiAxMDI0Ci0gICAgREVGQVVMVF9NTUFQX01BWCAgICAg
ICAgICAgNjU1MzYKLQotICAgIFRoZXJlIGFyZSBzZXZlcmFsIG90aGVyICNkZWZpbmVkIGNvbnN0
YW50cyBhbmQgbWFjcm9zIHRoYXQgeW91Ci0gICAgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byB0b3Vj
aCB1bmxlc3MgeW91IGFyZSBleHRlbmRpbmcgb3IgYWRhcHRpbmcgbWFsbG9jLgotKi8KLQotI2lu
Y2x1ZGUgImZhc3RfbWFsbG9jLmgiCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxz
dGRkZWYuaD4KLQotI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gYWJvcnQoKQotCi0jaWYg
IVdJTjMyCi0jZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMAotI2RlZmluZSBNT1JFQ09SRV9D
QU5OT1RfVFJJTSAxCi0jZW5kaWYKLQotI2luY2x1ZGUgImludGVybmFsLmgiCi0KLW5hbWVzcGFj
ZSBLSlMgewotCi0jaWZuZGVmIE5ERUJVRwotCi0vLyBJbiBkZWJ1Z2dpbmcgYnVpbGRzLCB1c2Ug
dGhlIHN5c3RlbSBtYWxsb2MgZm9yIGl0cyBkZWJ1Z2dpbmcgZmVhdHVyZXMuCi0KLXZvaWQgKmtq
c19mYXN0X21hbGxvYyhzaXplX3QgbikKLXsKLSAgICBhc3NlcnQoSW50ZXJwcmV0ZXJJbXA6Omxv
Y2tDb3VudCgpID4gMCk7Ci0gICAgcmV0dXJuIG1hbGxvYyhuKTsKLX0KLQotdm9pZCAqa2pzX2Zh
c3RfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKQotewotICAg
IGFzc2VydChJbnRlcnByZXRlckltcDo6bG9ja0NvdW50KCkgPiAwKTsKLSAgICByZXR1cm4gY2Fs
bG9jKG5fZWxlbWVudHMsIGVsZW1lbnRfc2l6ZSk7Ci19Ci0KLXZvaWQga2pzX2Zhc3RfZnJlZSh2
b2lkKiBwKQotewotICAgIGFzc2VydChJbnRlcnByZXRlckltcDo6bG9ja0NvdW50KCkgPiAwKTsK
LSAgICBmcmVlKHApOwotfQotCi12b2lkICpranNfZmFzdF9yZWFsbG9jKHZvaWQqIHAsIHNpemVf
dCBuKQotewotICAgIGFzc2VydChJbnRlcnByZXRlckltcDo6bG9ja0NvdW50KCkgPiAwKTsKLSAg
ICByZXR1cm4gcmVhbGxvYyhwLCBuKTsKLX0KLQotI2Vsc2UKLQotLyoKLSAgV0lOMzIgc2V0cyB1
cCBkZWZhdWx0cyBmb3IgTVMgZW52aXJvbm1lbnQgYW5kIGNvbXBpbGVycy4KLSAgT3RoZXJ3aXNl
IGRlZmF1bHRzIGFyZSBmb3IgdW5peC4KLSovCi0KLS8qICNkZWZpbmUgV0lOMzIgKi8KLQotI2lm
ZGVmIFdJTjMyCi0KLSNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2luY2x1ZGUgPHdpbmRv
d3MuaD4KLQotLyogV2luMzIgZG9lc24ndCBzdXBwbHkgb3IgbmVlZCB0aGUgZm9sbG93aW5nIGhl
YWRlcnMgKi8KLSNkZWZpbmUgTEFDS1NfVU5JU1REX0gKLSNkZWZpbmUgTEFDS1NfU1lTX1BBUkFN
X0gKLSNkZWZpbmUgTEFDS1NfU1lTX01NQU5fSAotCi0vKiBVc2UgdGhlIHN1cHBsaWVkIGVtdWxh
dGlvbiBvZiBzYnJrICovCi0jZGVmaW5lIE1PUkVDT1JFIHNicmsKLSNkZWZpbmUgTU9SRUNPUkVf
Q09OVElHVU9VUyAxCi0jZGVmaW5lIE1PUkVDT1JFX0ZBSUxVUkUgICAgKCh2b2lkKikoLTEpKQot
Ci0vKiBVc2UgdGhlIHN1cHBsaWVkIGVtdWxhdGlvbiBvZiBtbWFwIGFuZCBtdW5tYXAgKi8KLSNk
ZWZpbmUgSEFWRV9NTUFQIDEKLSNkZWZpbmUgTVVOTUFQX0ZBSUxVUkUgICgtMSkKLSNkZWZpbmUg
TU1BUF9DTEVBUlMgMQotCi0vKiBUaGVzZSB2YWx1ZXMgZG9uJ3QgcmVhbGx5IG1hdHRlciBpbiB3
aW5kb3dzIG1tYXAgZW11bGF0aW9uICovCi0jZGVmaW5lIE1BUF9QUklWQVRFIDEKLSNkZWZpbmUg
TUFQX0FOT05ZTU9VUyAyCi0jZGVmaW5lIFBST1RfUkVBRCAxCi0jZGVmaW5lIFBST1RfV1JJVEUg
MgotCi0vKiBFbXVsYXRpb24gZnVuY3Rpb25zIGRlZmluZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGZp
bGUgKi8KLQotLyogSWYgVVNFX01BTExPQ19MT0NLLCB1c2Ugc3VwcGxpZWQgY3JpdGljYWwtc2Vj
dGlvbi1iYXNlZCBsb2NrIGZ1bmN0aW9ucyAqLwotI2lmZGVmIFVTRV9NQUxMT0NfTE9DSwotc3Rh
dGljIGludCBzbHdhaXQoaW50ICpzbCk7Ci1zdGF0aWMgaW50IHNscmVsZWFzZShpbnQgKnNsKTsK
LSNlbmRpZgotCi1zdGF0aWMgbG9uZyBnZXRwYWdlc2l6ZSh2b2lkKTsKLXN0YXRpYyBsb25nIGdl
dHJlZ2lvbnNpemUodm9pZCk7Ci1zdGF0aWMgdm9pZCAqc2JyayhwdHJkaWZmX3Qgc2l6ZSk7Ci1z
dGF0aWMgdm9pZCAqbW1hcCh2b2lkICpwdHIsIGxvbmcgc2l6ZSwgbG9uZyBwcm90LCBsb25nIHR5
cGUsIGxvbmcgaGFuZGxlLCBsb25nIGFyZyk7Ci1zdGF0aWMgbG9uZyBtdW5tYXAodm9pZCAqcHRy
LCBsb25nIHNpemUpOwotCi1zdGF0aWMgdm9pZCB2bWluZm8gKHVuc2lnbmVkIGxvbmcqZnJlZSwg
dW5zaWduZWQgbG9uZypyZXNlcnZlZCwgdW5zaWduZWQgbG9uZypjb21taXR0ZWQpOwotc3RhdGlj
IGludCBjcHVpbmZvIChpbnQgd2hvbGUsIHVuc2lnbmVkIGxvbmcqa2VybmVsLCB1bnNpZ25lZCBs
b25nKnVzZXIpOwotCi0jZW5kaWYKLQotLyoKLSAgX19TVERfQyBzaG91bGQgYmUgbm9uemVybyBp
ZiB1c2luZyBBTlNJLXN0YW5kYXJkIEMgY29tcGlsZXIsIGEgQysrCi0gIGNvbXBpbGVyLCBvciBh
IEMgY29tcGlsZXIgc3VmZmljaWVudGx5IGNsb3NlIHRvIEFOU0kgdG8gZ2V0IGF3YXkKLSAgd2l0
aCBpdC4KLSovCi0KLSNpZm5kZWYgX19TVERfQwotI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRl
ZmluZWQoX2NwbHVzcGx1cykKLSNkZWZpbmUgX19TVERfQyAgICAgMQotI2Vsc2UKLSNkZWZpbmUg
X19TVERfQyAgICAgMAotI2VuZGlmIAotI2VuZGlmIC8qX19TVERfQyovCi0KLQotLyoKLSAgVm9p
ZF90KiBpcyB0aGUgcG9pbnRlciB0eXBlIHRoYXQgbWFsbG9jIHNob3VsZCBzYXkgaXQgcmV0dXJu
cwotKi8KLQotI2lmbmRlZiBWb2lkX3QKLSNpZiAoX19TVERfQyB8fCBkZWZpbmVkKFdJTjMyKSkK
LSNkZWZpbmUgVm9pZF90ICAgICAgdm9pZAotI2Vsc2UKLSNkZWZpbmUgVm9pZF90ICAgICAgY2hh
cgotI2VuZGlmCi0jZW5kaWYgLypWb2lkX3QqLwotCi0jaWYgX19TVERfQwotI2luY2x1ZGUgPHN0
ZGRlZi5oPiAgIC8qIGZvciBzaXplX3QgKi8KLSNlbHNlCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+
Ci0jZW5kaWYKLQotLyogZGVmaW5lIExBQ0tTX1VOSVNURF9IIGlmIHlvdXIgc3lzdGVtIGRvZXMg
bm90IGhhdmUgYSA8dW5pc3RkLmg+LiAqLwotCi0vKiAjZGVmaW5lICBMQUNLU19VTklTVERfSCAq
LwotCi0jaWZuZGVmIExBQ0tTX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYK
LQotLyogZGVmaW5lIExBQ0tTX1NZU19QQVJBTV9IIGlmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGhh
dmUgYSA8c3lzL3BhcmFtLmg+LiAqLwotCi0vKiAjZGVmaW5lICBMQUNLU19TWVNfUEFSQU1fSCAq
LwotCi0KLSNpbmNsdWRlIDxzdGRpby5oPiAgICAvKiBuZWVkZWQgZm9yIG1hbGxvY19zdGF0cyAq
LwotI2luY2x1ZGUgPGVycm5vLmg+ICAgIC8qIG5lZWRlZCBmb3Igb3B0aW9uYWwgTUFMTE9DX0ZB
SUxVUkVfQUNUSU9OICovCi0KLQotLyoKLSAgRGVidWdnaW5nOgotCi0gIEJlY2F1c2UgZnJlZWQg
Y2h1bmtzIG1heSBiZSBvdmVyd3JpdHRlbiB3aXRoIGJvb2trZWVwaW5nIGZpZWxkcywgdGhpcwot
ICBtYWxsb2Mgd2lsbCBvZnRlbiBkaWUgd2hlbiBmcmVlZCBtZW1vcnkgaXMgb3ZlcndyaXR0ZW4g
YnkgdXNlcgotICBwcm9ncmFtcy4gIFRoaXMgY2FuIGJlIHZlcnkgZWZmZWN0aXZlIChhbGJlaXQg
aW4gYW4gYW5ub3lpbmcgd2F5KQotICBpbiBoZWxwaW5nIHRyYWNrIGRvd24gZGFuZ2xpbmcgcG9p
bnRlcnMuCi0KLSAgSWYgeW91IGNvbXBpbGUgd2l0aCAtRERFQlVHLCBhIG51bWJlciBvZiBhc3Nl
cnRpb24gY2hlY2tzIGFyZQotICBlbmFibGVkIHRoYXQgd2lsbCBjYXRjaCBtb3JlIG1lbW9yeSBl
cnJvcnMuIFlvdSBwcm9iYWJseSB3b24ndCBiZQotICBhYmxlIHRvIG1ha2UgbXVjaCBzZW5zZSBv
ZiB0aGUgYWN0dWFsIGFzc2VydGlvbiBlcnJvcnMsIGJ1dCB0aGV5Ci0gIHNob3VsZCBoZWxwIHlv
dSBsb2NhdGUgaW5jb3JyZWN0bHkgb3ZlcndyaXR0ZW4gbWVtb3J5LiAgVGhlCi0gIGNoZWNraW5n
IGlzIGZhaXJseSBleHRlbnNpdmUsIGFuZCB3aWxsIHNsb3cgZG93biBleGVjdXRpb24KLSAgbm90
aWNlYWJseS4gQ2FsbGluZyBtYWxsb2Nfc3RhdHMgb3IgbWFsbGluZm8gd2l0aCBERUJVRyBzZXQg
d2lsbAotICBhdHRlbXB0IHRvIGNoZWNrIGV2ZXJ5IG5vbi1tbWFwcGVkIGFsbG9jYXRlZCBhbmQg
ZnJlZSBjaHVuayBpbiB0aGUKLSAgY291cnNlIG9mIGNvbXB1dGluZyB0aGUgc3VtbW1hcmllcy4g
KEJ5IG5hdHVyZSwgbW1hcHBlZCByZWdpb25zCi0gIGNhbm5vdCBiZSBjaGVja2VkIHZlcnkgbXVj
aCBhdXRvbWF0aWNhbGx5LikKLQotICBTZXR0aW5nIERFQlVHIG1heSBhbHNvIGJlIGhlbHBmdWwg
aWYgeW91IGFyZSB0cnlpbmcgdG8gbW9kaWZ5Ci0gIHRoaXMgY29kZS4gVGhlIGFzc2VydGlvbnMg
aW4gdGhlIGNoZWNrIHJvdXRpbmVzIHNwZWxsIG91dCBpbiBtb3JlCi0gIGRldGFpbCB0aGUgYXNz
dW1wdGlvbnMgYW5kIGludmFyaWFudHMgdW5kZXJseWluZyB0aGUgYWxnb3JpdGhtcy4KLQotICBT
ZXR0aW5nIERFQlVHIGRvZXMgTk9UIHByb3ZpZGUgYW4gYXV0b21hdGVkIG1lY2hhbmlzbSBmb3Ig
Y2hlY2tpbmcKLSAgdGhhdCBhbGwgYWNjZXNzZXMgdG8gbWFsbG9jZWQgbWVtb3J5IHN0YXkgd2l0
aGluIHRoZWlyCi0gIGJvdW5kcy4gSG93ZXZlciwgdGhlcmUgYXJlIHNldmVyYWwgYWRkLW9ucyBh
bmQgYWRhcHRhdGlvbnMgb2YgdGhpcwotICBvciBvdGhlciBtYWxsb2NzIGF2YWlsYWJsZSB0aGF0
IGRvIHRoaXMuCi0qLwotCi0vKgotICBUaGUgdW5zaWduZWQgaW50ZWdlciB0eXBlIHVzZWQgZm9y
IGNvbXBhcmluZyBhbnkgdHdvIGNodW5rIHNpemVzLgotICBUaGlzIHNob3VsZCBiZSBhdCBsZWFz
dCBhcyB3aWRlIGFzIHNpemVfdCwgYnV0IHNob3VsZCBub3QgYmUgc2lnbmVkLgotKi8KLQotI2lm
bmRlZiBDSFVOS19TSVpFX1QKLSNkZWZpbmUgQ0hVTktfU0laRV9UIHVuc2lnbmVkIGxvbmcKLSNl
bmRpZgotCi0vKiAKLSAgVGhlIHVuc2lnbmVkIGludGVnZXIgdHlwZSB1c2VkIHRvIGhvbGQgYWRk
cmVzc2VzIHdoZW4gdGhleSBhcmUgYXJlCi0gIG1hbmlwdWxhdGVkIGFzIGludGVnZXJzLiBFeGNl
cHQgdGhhdCBpdCBpcyBub3QgZGVmaW5lZCBvbiBhbGwKLSAgc3lzdGVtcywgaW50cHRyX3Qgd291
bGQgc3VmZmljZS4KLSovCi0jaWZuZGVmIFBUUl9VSU5UCi0jZGVmaW5lIFBUUl9VSU5UIHVuc2ln
bmVkIGxvbmcKLSNlbmRpZgotCi0KLS8qCi0gIElOVEVSTkFMX1NJWkVfVCBpcyB0aGUgd29yZC1z
aXplIHVzZWQgZm9yIGludGVybmFsIGJvb2trZWVwaW5nCi0gIG9mIGNodW5rIHNpemVzLgotCi0g
IFRoZSBkZWZhdWx0IHZlcnNpb24gaXMgdGhlIHNhbWUgYXMgc2l6ZV90LgotCi0gIFdoaWxlIG5v
dCBzdHJpY3RseSBuZWNlc3NhcnksIGl0IGlzIGJlc3QgdG8gZGVmaW5lIHRoaXMgYXMgYW4KLSAg
dW5zaWduZWQgdHlwZSwgZXZlbiBpZiBzaXplX3QgaXMgYSBzaWduZWQgdHlwZS4gVGhpcyBtYXkg
YXZvaWQgc29tZQotICBhcnRpZmljaWFsIHNpemUgbGltaXRhdGlvbnMgb24gc29tZSBzeXN0ZW1z
LgotCi0gIE9uIGEgNjQtYml0IG1hY2hpbmUsIHlvdSBtYXkgYmUgYWJsZSB0byByZWR1Y2UgbWFs
bG9jIG92ZXJoZWFkIGJ5Ci0gIGRlZmluaW5nIElOVEVSTkFMX1NJWkVfVCB0byBiZSBhIDMyIGJp
dCBgdW5zaWduZWQgaW50JyBhdCB0aGUKLSAgZXhwZW5zZSBvZiBub3QgYmVpbmcgYWJsZSB0byBo
YW5kbGUgbW9yZSB0aGFuIDJeMzIgb2YgbWFsbG9jZWQKLSAgc3BhY2UuIElmIHRoaXMgbGltaXRh
dGlvbiBpcyBhY2NlcHRhYmxlLCB5b3UgYXJlIGVuY291cmFnZWQgdG8gc2V0Ci0gIHRoaXMgdW5s
ZXNzIHlvdSBhcmUgb24gYSBwbGF0Zm9ybSByZXF1aXJpbmcgMTZieXRlIGFsaWdubWVudHMuIElu
Ci0gIHRoaXMgY2FzZSB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyB0dXJuIG91dCB0byBuZWdh
dGUgYW55Ci0gIHBvdGVudGlhbCBhZHZhbnRhZ2VzIG9mIGRlY3JlYXNpbmcgc2l6ZV90IHdvcmQg
c2l6ZS4KLQotICBJbXBsZW1lbnRvcnM6IEJld2FyZSBvZiB0aGUgcG9zc2libGUgY29tYmluYXRp
b25zIG9mOgotICAgICAtIElOVEVSTkFMX1NJWkVfVCBtaWdodCBiZSBzaWduZWQgb3IgdW5zaWdu
ZWQsIG1pZ2h0IGJlIDMyIG9yIDY0IGJpdHMsCi0gICAgICAgYW5kIG1pZ2h0IGJlIHRoZSBzYW1l
IHdpZHRoIGFzIGludCBvciBhcyBsb25nCi0gICAgIC0gc2l6ZV90IG1pZ2h0IGhhdmUgZGlmZmVy
ZW50IHdpZHRoIGFuZCBzaWduZWRuZXNzIGFzIElOVEVSTkFMX1NJWkVfVAotICAgICAtIGludCBh
bmQgbG9uZyBtaWdodCBiZSAzMiBvciA2NCBiaXRzLCBhbmQgbWlnaHQgYmUgdGhlIHNhbWUgd2lk
dGgKLSAgVG8gZGVhbCB3aXRoIHRoaXMsIG1vc3QgY29tcGFyaXNvbnMgYW5kIGRpZmZlcmVuY2Ug
Y29tcHV0YXRpb25zCi0gIGFtb25nIElOVEVSTkFMX1NJWkVfVHMgc2hvdWxkIGNhc3QgdGhlbSB0
byBDSFVOS19TSVpFX1QsIGJlaW5nCi0gIGF3YXJlIG9mIHRoZSBmYWN0IHRoYXQgY2FzdGluZyBh
biB1bnNpZ25lZCBpbnQgdG8gYSB3aWRlciBsb25nIGRvZXMKLSAgbm90IHNpZ24tZXh0ZW5kLiAo
VGhpcyBhbHNvIG1ha2VzIGNoZWNraW5nIGZvciBuZWdhdGl2ZSBudW1iZXJzCi0gIGF3a3dhcmQu
KSBTb21lIG9mIHRoZXNlIGNhc3RzIHJlc3VsdCBpbiBoYXJtbGVzcyBjb21waWxlciB3YXJuaW5n
cwotICBvbiBzb21lIHN5c3RlbXMuCi0qLwotCi0jaWZuZGVmIElOVEVSTkFMX1NJWkVfVAotI2Rl
ZmluZSBJTlRFUk5BTF9TSVpFX1Qgc2l6ZV90Ci0jZW5kaWYKLQotLyogVGhlIGNvcnJlc3BvbmRp
bmcgd29yZCBzaXplICovCi0jZGVmaW5lIFNJWkVfU1ogICAgICAgICAgICAgICAgKHNpemVvZihJ
TlRFUk5BTF9TSVpFX1QpKQotCi0KLQotLyoKLSAgTUFMTE9DX0FMSUdOTUVOVCBpcyB0aGUgbWlu
aW11bSBhbGlnbm1lbnQgZm9yIG1hbGxvYydlZCBjaHVua3MuCi0gIEl0IG11c3QgYmUgYSBwb3dl
ciBvZiB0d28gYXQgbGVhc3QgMiAqIFNJWkVfU1osIGV2ZW4gb24gbWFjaGluZXMKLSAgZm9yIHdo
aWNoIHNtYWxsZXIgYWxpZ25tZW50cyB3b3VsZCBzdWZmaWNlLiBJdCBtYXkgYmUgZGVmaW5lZCBh
cwotICBsYXJnZXIgdGhhbiB0aGlzIHRob3VnaC4gTm90ZSBob3dldmVyIHRoYXQgY29kZSBhbmQg
ZGF0YSBzdHJ1Y3R1cmVzCi0gIGFyZSBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlIG9mIDgtYnl0ZSBh
bGlnbm1lbnQuCi0qLwotCi0KLSNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVAotI2RlZmluZSBNQUxM
T0NfQUxJR05NRU5UICAgICAgICgyICogU0laRV9TWikKLSNlbmRpZgotCi0vKiBUaGUgY29ycmVz
cG9uZGluZyBiaXQgbWFzayB2YWx1ZSAqLwotI2RlZmluZSBNQUxMT0NfQUxJR05fTUFTSyAgICAg
IChNQUxMT0NfQUxJR05NRU5UIC0gMSkKLQotCi0KLS8qCi0gIFJFQUxMT0NfWkVST19CWVRFU19G
UkVFUyBzaG91bGQgYmUgc2V0IGlmIGEgY2FsbCB0bwotICByZWFsbG9jIHdpdGggemVybyBieXRl
cyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgYSBjYWxsIHRvIGZyZWUuCi0gIFNvbWUgcGVvcGxlIHRo
aW5rIGl0IHNob3VsZC4gT3RoZXJ3aXNlLCBzaW5jZSB0aGlzIG1hbGxvYwotICByZXR1cm5zIGEg
dW5pcXVlIHBvaW50ZXIgZm9yIG1hbGxvYygwKSwgc28gZG9lcyByZWFsbG9jKHAsIDApLgotKi8K
LQotLyogICAjZGVmaW5lIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAqLwotCi0vKgotICBUUklN
X0ZBU1RCSU5TIGNvbnRyb2xzIHdoZXRoZXIgZnJlZSgpIG9mIGEgdmVyeSBzbWFsbCBjaHVuayBj
YW4KLSAgaW1tZWRpYXRlbHkgbGVhZCB0byB0cmltbWluZy4gU2V0dGluZyB0byB0cnVlICgxKSBj
YW4gcmVkdWNlIG1lbW9yeQotICBmb290cHJpbnQsIGJ1dCB3aWxsIGFsbW9zdCBhbHdheXMgc2xv
dyBkb3duIHByb2dyYW1zIHRoYXQgdXNlIGEgbG90Ci0gIG9mIHNtYWxsIGNodW5rcy4KLQotICBE
ZWZpbmUgdGhpcyBvbmx5IGlmIHlvdSBhcmUgd2lsbGluZyB0byBnaXZlIHVwIHNvbWUgc3BlZWQg
dG8gbW9yZQotICBhZ2dyZXNzaXZlbHkgcmVkdWNlIHN5c3RlbS1sZXZlbCBtZW1vcnkgZm9vdHBy
aW50IHdoZW4gcmVsZWFzaW5nCi0gIG1lbW9yeSBpbiBwcm9ncmFtcyB0aGF0IHVzZSBtYW55IHNt
YWxsIGNodW5rcy4gIFlvdSBjYW4gZ2V0Ci0gIGVzc2VudGlhbGx5IHRoZSBzYW1lIGVmZmVjdCBi
eSBzZXR0aW5nIE1YRkFTVCB0byAwLCBidXQgdGhpcyBjYW4KLSAgbGVhZCB0byBldmVuIGdyZWF0
ZXIgc2xvd2Rvd25zIGluIHByb2dyYW1zIHVzaW5nIG1hbnkgc21hbGwgY2h1bmtzLgotICBUUklN
X0ZBU1RCSU5TIGlzIGFuIGluLWJldHdlZW4gY29tcGlsZS10aW1lIG9wdGlvbiwgdGhhdCBkaXNh
YmxlcwotICBvbmx5IHRob3NlIGNodW5rcyBib3JkZXJpbmcgdG9wbW9zdCBtZW1vcnkgZnJvbSBi
ZWluZyBwbGFjZWQgaW4KLSAgZmFzdGJpbnMuCi0qLwotCi0jaWZuZGVmIFRSSU1fRkFTVEJJTlMK
LSNkZWZpbmUgVFJJTV9GQVNUQklOUyAgMAotI2VuZGlmCi0KLQotLyoKLSAgVVNFX0RMX1BSRUZJ
WCB3aWxsIHByZWZpeCBhbGwgcHVibGljIHJvdXRpbmVzIHdpdGggdGhlIHN0cmluZyAnZGwnLgot
ICBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIHlvdSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgbWFsbG9j
IGluIG9uZSBwYXJ0IAotICBvZiBhIHByb2dyYW0sIHVzaW5nIHlvdXIgcmVndWxhciBzeXN0ZW0g
bWFsbG9jIGVsc2V3aGVyZS4KLSovCi0KLSNkZWZpbmUgVVNFX0RMX1BSRUZJWAotCi0KLS8qCi0g
IFVTRV9NQUxMT0NfTE9DSyBjYXVzZXMgd3JhcHBlciBmdW5jdGlvbnMgdG8gc3Vycm91bmQgZWFj
aAotICBjYWxsYWJsZSByb3V0aW5lIHdpdGggcHRocmVhZCBtdXRleCBsb2NrL3VubG9jay4KLQot
ICBVU0VfTUFMTE9DX0xPQ0sgZm9yY2VzIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTIHRvIGJl
IGRlZmluZWQKLSovCi0KLQotLyogI2RlZmluZSBVU0VfTUFMTE9DX0xPQ0sgKi8KLQotCi0vKgot
ICBJZiBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVSUyBpcyBkZWZpbmVkLCBldmVyeSBwdWJsaWMg
cm91dGluZSBpcwotICBhY3R1YWxseSBhIHdyYXBwZXIgZnVuY3Rpb24gdGhhdCBmaXJzdCBjYWxs
cyBNQUxMT0NfUFJFQUNUSU9OLCB0aGVuCi0gIGNhbGxzIHRoZSBpbnRlcm5hbCByb3V0aW5lLCBh
bmQgZm9sbG93cyBpdCB3aXRoCi0gIE1BTExPQ19QT1NUQUNUSU9OLiBUaGlzIGlzIG5lZWRlZCBm
b3IgbG9ja2luZywgYnV0IHlvdSBjYW4gYWxzbyB1c2UKLSAgdGhpcywgd2l0aG91dCBVU0VfTUFM
TE9DX0xPQ0ssIGZvciBwdXJwb3NlcyBvZiBpbnRlcmNlcHRpb24sCi0gIGluc3RydW1lbnRhdGlv
biwgZXRjLiBJdCBpcyBhIHNhZCBmYWN0IHRoYXQgdXNpbmcgd3JhcHBlcnMgb2Z0ZW4KLSAgbm90
aWNlYWJseSBkZWdyYWRlcyBwZXJmb3JtYW5jZSBvZiBtYWxsb2MtaW50ZW5zaXZlIHByb2dyYW1z
LgotKi8KLQotI2lmZGVmIFVTRV9NQUxMT0NfTE9DSwotI2RlZmluZSBVU0VfUFVCTElDX01BTExP
Q19XUkFQUEVSUwotI2Vsc2UKLS8qICNkZWZpbmUgVVNFX1BVQkxJQ19NQUxMT0NfV1JBUFBFUlMg
Ki8KLSNlbmRpZgotCi0KLS8qIAotICAgVHdvLXBoYXNlIG5hbWUgdHJhbnNsYXRpb24uCi0gICBB
bGwgb2YgdGhlIGFjdHVhbCByb3V0aW5lcyBhcmUgZ2l2ZW4gbWFuZ2xlZCBuYW1lcy4KLSAgIFdo
ZW4gd3JhcHBlcnMgYXJlIHVzZWQsIHRoZXkgYmVjb21lIHRoZSBwdWJsaWMgY2FsbGFibGUgdmVy
c2lvbnMuCi0gICBXaGVuIERMX1BSRUZJWCBpcyB1c2VkLCB0aGUgY2FsbGFibGUgbmFtZXMgYXJl
IHByZWZpeGVkLgotKi8KLQotI2lmbmRlZiBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVSUwotI2Rl
ZmluZSBjQUxMT2MgICAgICBwdWJsaWNfY0FMTE9jCi0jZGVmaW5lIGZSRWUgICAgICAgIHB1Ymxp
Y19mUkVlCi0jZGVmaW5lIGNGUkVlICAgICAgIHB1YmxpY19jRlJFZQotI2RlZmluZSBtQUxMT2Mg
ICAgICBwdWJsaWNfbUFMTE9jCi0jZGVmaW5lIG1FTUFMSUduICAgIHB1YmxpY19tRU1BTElHbgot
I2RlZmluZSByRUFMTE9jICAgICBwdWJsaWNfckVBTExPYwotI2RlZmluZSB2QUxMT2MgICAgICBw
dWJsaWNfdkFMTE9jCi0jZGVmaW5lIHBWQUxMT2MgICAgIHB1YmxpY19wVkFMTE9jCi0jZGVmaW5l
IG1BTExJTkZvICAgIHB1YmxpY19tQUxMSU5GbwotI2RlZmluZSBtQUxMT1B0ICAgICBwdWJsaWNf
bUFMTE9QdAotI2RlZmluZSBtVFJJbSAgICAgICBwdWJsaWNfbVRSSW0KLSNkZWZpbmUgbVNUQVRz
ICAgICAgcHVibGljX21TVEFUcwotI2RlZmluZSBtVVNBQkxlICAgICBwdWJsaWNfbVVTQUJMZQot
I2RlZmluZSBpQ0FMTE9jICAgICBwdWJsaWNfaUNBTExPYwotI2RlZmluZSBpQ09NQUxMT2MgICBw
dWJsaWNfaUNPTUFMTE9jCi0jZW5kaWYKLQotI2lmZGVmIFVTRV9ETF9QUkVGSVgKLSNkZWZpbmUg
cHVibGljX2NBTExPYyAgICBranNfZmFzdF9jYWxsb2MKLSNkZWZpbmUgcHVibGljX2ZSRWUgICAg
ICBranNfZmFzdF9mcmVlCi0jZGVmaW5lIHB1YmxpY19jRlJFZSAgICAga2pzX2Zhc3RfY2ZyZWUK
LSNkZWZpbmUgcHVibGljX21BTExPYyAgICBranNfZmFzdF9tYWxsb2MKLSNkZWZpbmUgcHVibGlj
X21FTUFMSUduICBranNfZmFzdF9tZW1hbGlnbgotI2RlZmluZSBwdWJsaWNfckVBTExPYyAgIGtq
c19mYXN0X3JlYWxsb2MKLSNkZWZpbmUgcHVibGljX3ZBTExPYyAgICBranNfZmFzdF92YWxsb2MK
LSNkZWZpbmUgcHVibGljX3BWQUxMT2MgICBranNfZmFzdF9wdmFsbG9jCi0jZGVmaW5lIHB1Ymxp
Y19tQUxMSU5GbyAga2pzX2Zhc3RfbWFsbGluZm8KLSNkZWZpbmUgcHVibGljX21BTExPUHQgICBr
anNfZmFzdF9tYWxsb3B0Ci0jZGVmaW5lIHB1YmxpY19tVFJJbSAgICAga2pzX2Zhc3RfbWFsbG9j
X3RyaW0KLSNkZWZpbmUgcHVibGljX21TVEFUcyAgICBranNfZmFzdF9tYWxsb2Nfc3RhdHMKLSNk
ZWZpbmUgcHVibGljX21VU0FCTGUgICBranNfZmFzdF9tYWxsb2NfdXNhYmxlX3NpemUKLSNkZWZp
bmUgcHVibGljX2lDQUxMT2MgICBranNfZmFzdF9pbmRlcGVuZGVudF9jYWxsb2MKLSNkZWZpbmUg
cHVibGljX2lDT01BTExPYyBranNfZmFzdF9pbmRlcGVuZGVudF9jb21hbGxvYwotI2Vsc2UgLyog
VVNFX0RMX1BSRUZJWCAqLwotI2RlZmluZSBwdWJsaWNfY0FMTE9jICAgIGNhbGxvYwotI2RlZmlu
ZSBwdWJsaWNfZlJFZSAgICAgIGZyZWUKLSNkZWZpbmUgcHVibGljX2NGUkVlICAgICBjZnJlZQot
I2RlZmluZSBwdWJsaWNfbUFMTE9jICAgIG1hbGxvYwotI2RlZmluZSBwdWJsaWNfbUVNQUxJR24g
IG1lbWFsaWduCi0jZGVmaW5lIHB1YmxpY19yRUFMTE9jICAgcmVhbGxvYwotI2RlZmluZSBwdWJs
aWNfdkFMTE9jICAgIHZhbGxvYwotI2RlZmluZSBwdWJsaWNfcFZBTExPYyAgIHB2YWxsb2MKLSNk
ZWZpbmUgcHVibGljX21BTExJTkZvICBtYWxsaW5mbwotI2RlZmluZSBwdWJsaWNfbUFMTE9QdCAg
IG1hbGxvcHQKLSNkZWZpbmUgcHVibGljX21UUkltICAgICBtYWxsb2NfdHJpbQotI2RlZmluZSBw
dWJsaWNfbVNUQVRzICAgIG1hbGxvY19zdGF0cwotI2RlZmluZSBwdWJsaWNfbVVTQUJMZSAgIG1h
bGxvY191c2FibGVfc2l6ZQotI2RlZmluZSBwdWJsaWNfaUNBTExPYyAgIGluZGVwZW5kZW50X2Nh
bGxvYwotI2RlZmluZSBwdWJsaWNfaUNPTUFMTE9jIGluZGVwZW5kZW50X2NvbWFsbG9jCi0jZW5k
aWYgLyogVVNFX0RMX1BSRUZJWCAqLwotCi0KLS8qCi0gIEhBVkVfTUVNQ1BZIHNob3VsZCBiZSBk
ZWZpbmVkIGlmIHlvdSBhcmUgbm90IG90aGVyd2lzZSB1c2luZwotICBBTlNJIFNURCBDLCBidXQg
c3RpbGwgaGF2ZSBtZW1jcHkgYW5kIG1lbXNldCBpbiB5b3VyIEMgbGlicmFyeQotICBhbmQgd2Fu
dCB0byB1c2UgdGhlbSBpbiBjYWxsb2MgYW5kIHJlYWxsb2MuIE90aGVyd2lzZSBzaW1wbGUKLSAg
bWFjcm8gdmVyc2lvbnMgYXJlIGRlZmluZWQgYmVsb3cuCi0KLSAgVVNFX01FTUNQWSBzaG91bGQg
YmUgZGVmaW5lZCBhcyAxIGlmIHlvdSBhY3R1YWxseSB3YW50IHRvCi0gIGhhdmUgbWVtc2V0IGFu
ZCBtZW1jcHkgY2FsbGVkLiBQZW9wbGUgcmVwb3J0IHRoYXQgdGhlIG1hY3JvCi0gIHZlcnNpb25z
IGFyZSBmYXN0ZXIgdGhhbiBsaWJjIHZlcnNpb25zIG9uIHNvbWUgc3lzdGVtcy4KLSAgCi0gIEV2
ZW4gaWYgVVNFX01FTUNQWSBpcyBzZXQgdG8gMSwgbG9vcHMgdG8gY29weS9jbGVhciBzbWFsbCBj
aHVua3MKLSAgKG9mIDw9IDM2IGJ5dGVzKSBhcmUgbWFudWFsbHkgdW5yb2xsZWQgaW4gcmVhbGxv
YyBhbmQgY2FsbG9jLgotKi8KLQotI2RlZmluZSBIQVZFX01FTUNQWQotCi0jaWZuZGVmIFVTRV9N
RU1DUFkKLSNpZmRlZiBIQVZFX01FTUNQWQotI2RlZmluZSBVU0VfTUVNQ1BZIDEKLSNlbHNlCi0j
ZGVmaW5lIFVTRV9NRU1DUFkgMAotI2VuZGlmCi0jZW5kaWYKLQotCi0jaWYgKF9fU1REX0MgfHwg
ZGVmaW5lZChIQVZFX01FTUNQWSkpCi0KLSNpZmRlZiBXSU4zMgotLyogT24gV2luMzIgbWVtc2V0
IGFuZCBtZW1jcHkgYXJlIGFscmVhZHkgZGVjbGFyZWQgaW4gd2luZG93cy5oICovCi0jZWxzZQot
I2lmIF9fU1REX0MKLWV4dGVybiAiQyIgewotdm9pZCogbWVtc2V0KHZvaWQqLCBpbnQsIHNpemVf
dCk7Ci12b2lkKiBtZW1jcHkodm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QpOwotfQotI2Vsc2UK
LWV4dGVybiAiQyIgewotVm9pZF90KiBtZW1zZXQoKTsKLVZvaWRfdCogbWVtY3B5KCk7Ci19Ci0j
ZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLS8qCi0gIE1BTExPQ19GQUlMVVJFX0FDVElPTiBpcyB0
aGUgYWN0aW9uIHRvIHRha2UgYmVmb3JlICJyZXR1cm4gMCIgd2hlbgotICBtYWxsb2MgZmFpbHMg
dG8gYmUgYWJsZSB0byByZXR1cm4gbWVtb3J5LCBlaXRoZXIgYmVjYXVzZSBtZW1vcnkgaXMKLSAg
ZXhoYXVzdGVkIG9yIGJlY2F1c2Ugb2YgaWxsZWdhbCBhcmd1bWVudHMuCi0gIAotICBCeSBkZWZh
dWx0LCBzZXRzIGVycm5vIGlmIHJ1bm5pbmcgb24gU1REX0MgcGxhdGZvcm0sIGVsc2UgZG9lcyBu
b3RoaW5nLiAgCi0qLwotCi0jaWZuZGVmIE1BTExPQ19GQUlMVVJFX0FDVElPTgotI2lmIF9fU1RE
X0MKLSNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OIFwKLSAgIGVycm5vID0gRU5PTUVNOwot
Ci0jZWxzZQotI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KLSNlbmRpZgotI2VuZGlmCi0K
LS8qCi0gIE1PUkVDT1JFLXJlbGF0ZWQgZGVjbGFyYXRpb25zLiBCeSBkZWZhdWx0LCByZWx5IG9u
IHNicmsKLSovCi0KLQotI2lmZGVmIExBQ0tTX1VOSVNURF9ICi0jaWYgIWRlZmluZWQoX19GcmVl
QlNEX18pICYmICFkZWZpbmVkKF9fT3BlbkJTRF9fKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKQot
I2lmIF9fU1REX0MKLWV4dGVybiBWb2lkX3QqICAgICBzYnJrKHB0cmRpZmZfdCk7Ci0jZWxzZQot
ZXh0ZXJuIFZvaWRfdCogICAgIHNicmsoKTsKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQotLyoK
LSAgTU9SRUNPUkUgaXMgdGhlIG5hbWUgb2YgdGhlIHJvdXRpbmUgdG8gY2FsbCB0byBvYnRhaW4g
bW9yZSBtZW1vcnkKLSAgZnJvbSB0aGUgc3lzdGVtLiAgU2VlIGJlbG93IGZvciBnZW5lcmFsIGd1
aWRhbmNlIG9uIHdyaXRpbmcKLSAgYWx0ZXJuYXRpdmUgTU9SRUNPUkUgZnVuY3Rpb25zLCBhcyB3
ZWxsIGFzIGEgdmVyc2lvbiBmb3IgV0lOMzIgYW5kIGEKLSAgc2FtcGxlIHZlcnNpb24gZm9yIHBy
ZS1PU1ggbWFjb3MuCi0qLwotCi0jaWZuZGVmIE1PUkVDT1JFCi0jZGVmaW5lIE1PUkVDT1JFIHNi
cmsKLSNlbmRpZgotCi0vKgotICBNT1JFQ09SRV9GQUlMVVJFIGlzIHRoZSB2YWx1ZSByZXR1cm5l
ZCB1cG9uIGZhaWx1cmUgb2YgTU9SRUNPUkUKLSAgYXMgd2VsbCBhcyBtbWFwLiBTaW5jZSBpdCBj
YW5ub3QgYmUgYW4gb3RoZXJ3aXNlIHZhbGlkIG1lbW9yeSBhZGRyZXNzLAotICBhbmQgbXVzdCBy
ZWZsZWN0IHZhbHVlcyBvZiBzdGFuZGFyZCBzeXMgY2FsbHMsIHlvdSBwcm9iYWJseSBvdWdodCBu
b3QKLSAgdHJ5IHRvIHJlZGVmaW5lIGl0LgotKi8KLQotI2lmbmRlZiBNT1JFQ09SRV9GQUlMVVJF
Ci0jZGVmaW5lIE1PUkVDT1JFX0ZBSUxVUkUgKC0xKQotI2VuZGlmCi0KLS8qCi0gIElmIE1PUkVD
T1JFX0NPTlRJR1VPVVMgaXMgdHJ1ZSwgdGFrZSBhZHZhbnRhZ2Ugb2YgZmFjdCB0aGF0Ci0gIGNv
bnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFIHdpdGggcG9zaXRpdmUgYXJndW1lbnRzIGFsd2F5
cyByZXR1cm4KLSAgY29udGlndW91cyBpbmNyZWFzaW5nIGFkZHJlc3Nlcy4gIFRoaXMgaXMgdHJ1
ZSBvZiB1bml4IHNicmsuICBFdmVuCi0gIGlmIG5vdCBkZWZpbmVkLCB3aGVuIHJlZ2lvbnMgaGFw
cGVuIHRvIGJlIGNvbnRpZ3VvdXMsIG1hbGxvYyB3aWxsCi0gIHBlcm1pdCBhbGxvY2F0aW9ucyBz
cGFubmluZyByZWdpb25zIG9idGFpbmVkIGZyb20gZGlmZmVyZW50Ci0gIGNhbGxzLiBCdXQgZGVm
aW5pbmcgdGhpcyB3aGVuIGFwcGxpY2FibGUgZW5hYmxlcyBzb21lIHN0cm9uZ2VyCi0gIGNvbnNp
c3RlbmN5IGNoZWNrcyBhbmQgc3BhY2UgZWZmaWNpZW5jaWVzLiAKLSovCi0KLSNpZm5kZWYgTU9S
RUNPUkVfQ09OVElHVU9VUwotI2RlZmluZSBNT1JFQ09SRV9DT05USUdVT1VTIDEKLSNlbmRpZgot
Ci0vKgotICBEZWZpbmUgTU9SRUNPUkVfQ0FOTk9UX1RSSU0gaWYgeW91ciB2ZXJzaW9uIG9mIE1P
UkVDT1JFCi0gIGNhbm5vdCByZWxlYXNlIHNwYWNlIGJhY2sgdG8gdGhlIHN5c3RlbSB3aGVuIGdp
dmVuIG5lZ2F0aXZlCi0gIGFyZ3VtZW50cy4gVGhpcyBpcyBnZW5lcmFsbHkgbmVjZXNzYXJ5IG9u
bHkgaWYgeW91IGFyZSB1c2luZwotICBhIGhhbmQtY3JhZnRlZCBNT1JFQ09SRSBmdW5jdGlvbiB0
aGF0IGNhbm5vdCBoYW5kbGUgbmVnYXRpdmUgYXJndW1lbnRzLgotKi8KLQotLyogI2RlZmluZSBN
T1JFQ09SRV9DQU5OT1RfVFJJTSAqLwotCi0KLS8qCi0gIERlZmluZSBIQVZFX01NQVAgYXMgdHJ1
ZSB0byBvcHRpb25hbGx5IG1ha2UgbWFsbG9jKCkgdXNlIG1tYXAoKSB0bwotICBhbGxvY2F0ZSB2
ZXJ5IGxhcmdlIGJsb2Nrcy4gIFRoZXNlIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlCi0gIG9wZXJh
dGluZyBzeXN0ZW0gaW1tZWRpYXRlbHkgYWZ0ZXIgYSBmcmVlKCkuIEFsc28sIGlmIG1tYXAKLSAg
aXMgYXZhaWxhYmxlLCBpdCBpcyB1c2VkIGFzIGEgYmFja3VwIHN0cmF0ZWd5IGluIGNhc2VzIHdo
ZXJlCi0gIE1PUkVDT1JFIGZhaWxzIHRvIHByb3ZpZGUgc3BhY2UgZnJvbSBzeXN0ZW0uCi0KLSAg
VGhpcyBtYWxsb2MgaXMgYmVzdCB0dW5lZCB0byB3b3JrIHdpdGggbW1hcCBmb3IgbGFyZ2UgcmVx
dWVzdHMuCi0gIElmIHlvdSBkbyBub3QgaGF2ZSBtbWFwLCBvcGVyYXRpb25zIGludm9sdmluZyB2
ZXJ5IGxhcmdlIGNodW5rcyAoMU1CCi0gIG9yIHNvKSBtYXkgYmUgc2xvd2VyIHRoYW4geW91J2Qg
bGlrZS4KLSovCi0KLSNpZm5kZWYgSEFWRV9NTUFQCi0jZGVmaW5lIEhBVkVfTU1BUCAxCi0jZW5k
aWYKLQotI2lmIEhBVkVfTU1BUAotLyogCi0gICBTdGFuZGFyZCB1bml4IG1tYXAgdXNpbmcgL2Rl
di96ZXJvIGNsZWFycyBtZW1vcnkgc28gY2FsbG9jIGRvZXNuJ3QKLSAgIG5lZWQgdG8uCi0qLwot
Ci0jaWZuZGVmIE1NQVBfQ0xFQVJTCi0jZGVmaW5lIE1NQVBfQ0xFQVJTIDEKLSNlbmRpZgotCi0j
ZWxzZSAvKiBubyBtbWFwICovCi0jaWZuZGVmIE1NQVBfQ0xFQVJTCi0jZGVmaW5lIE1NQVBfQ0xF
QVJTIDAKLSNlbmRpZgotI2VuZGlmCi0KLQotLyogCi0gICBNTUFQX0FTX01PUkVDT1JFX1NJWkUg
aXMgdGhlIG1pbmltdW0gbW1hcCBzaXplIGFyZ3VtZW50IHRvIHVzZSBpZgotICAgc2JyayBmYWls
cywgYW5kIG1tYXAgaXMgdXNlZCBhcyBhIGJhY2t1cCAod2hpY2ggaXMgZG9uZSBvbmx5IGlmCi0g
ICBIQVZFX01NQVApLiAgVGhlIHZhbHVlIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBwYWdlIHNpemUu
ICBUaGlzCi0gICBiYWNrdXAgc3RyYXRlZ3kgZ2VuZXJhbGx5IGFwcGxpZXMgb25seSB3aGVuIHN5
c3RlbXMgaGF2ZSAiaG9sZXMiIGluCi0gICBhZGRyZXNzIHNwYWNlLCBzbyBzYnJrIGNhbm5vdCBw
ZXJmb3JtIGNvbnRpZ3VvdXMgZXhwYW5zaW9uLCBidXQKLSAgIHRoZXJlIGlzIHN0aWxsIHNwYWNl
IGF2YWlsYWJsZSBvbiBzeXN0ZW0uICBPbiBzeXN0ZW1zIGZvciB3aGljaAotICAgdGhpcyBpcyBr
bm93biB0byBiZSB1c2VmdWwgKGkuZS4gbW9zdCBsaW51eCBrZXJuZWxzKSwgdGhpcyBvY2N1cnMK
LSAgIG9ubHkgd2hlbiBwcm9ncmFtcyBhbGxvY2F0ZSBodWdlIGFtb3VudHMgb2YgbWVtb3J5LiAg
QmV0d2VlbiB0aGlzLAotICAgYW5kIHRoZSBmYWN0IHRoYXQgbW1hcCByZWdpb25zIHRlbmQgdG8g
YmUgbGltaXRlZCwgdGhlIHNpemUgc2hvdWxkCi0gICBiZSBsYXJnZSwgdG8gYXZvaWQgdG9vIG1h
bnkgbW1hcCBjYWxscyBhbmQgdGh1cyBhdm9pZCBydW5uaW5nIG91dAotICAgb2Yga2VybmVsIHJl
c291cmNlcy4KLSovCi0KLSNpZm5kZWYgTU1BUF9BU19NT1JFQ09SRV9TSVpFCi0jZGVmaW5lIE1N
QVBfQVNfTU9SRUNPUkVfU0laRSAoMTAyNCAqIDEwMjQpCi0jZW5kaWYKLQotLyoKLSAgRGVmaW5l
IEhBVkVfTVJFTUFQIHRvIG1ha2UgcmVhbGxvYygpIHVzZSBtcmVtYXAoKSB0byByZS1hbGxvY2F0
ZQotICBsYXJnZSBibG9ja3MuICBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHBvc3NpYmxlIG9uIExp
bnV4IHdpdGgKLSAga2VybmVsIHZlcnNpb25zIG5ld2VyIHRoYW4gMS4zLjc3LgotKi8KLQotI2lm
bmRlZiBIQVZFX01SRU1BUAotI2lmZGVmIGxpbnV4Ci0jZGVmaW5lIEhBVkVfTVJFTUFQIDEKLSNl
bHNlCi0jZGVmaW5lIEhBVkVfTVJFTUFQIDAKLSNlbmRpZgotCi0jZW5kaWYgLyogSEFWRV9NTUFQ
ICovCi0KLQotLyoKLSAgVGhlIHN5c3RlbSBwYWdlIHNpemUuIFRvIHRoZSBleHRlbnQgcG9zc2li
bGUsIHRoaXMgbWFsbG9jIG1hbmFnZXMKLSAgbWVtb3J5IGZyb20gdGhlIHN5c3RlbSBpbiBwYWdl
LXNpemUgdW5pdHMuICBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBpcwotICBjYWNoZWQgZHVyaW5nIGlu
aXRpYWxpemF0aW9uIGludG8gYSBmaWVsZCBvZiBtYWxsb2Nfc3RhdGUuIFNvIGV2ZW4KLSAgaWYg
bWFsbG9jX2dldHBhZ2VzaXplIGlzIGEgZnVuY3Rpb24sIGl0IGlzIG9ubHkgY2FsbGVkIG9uY2Uu
Ci0KLSAgVGhlIGZvbGxvd2luZyBtZWNoYW5pY3MgZm9yIGdldHBhZ2VzaXplIHdlcmUgYWRhcHRl
ZCBmcm9tIGJzZC9nbnUKLSAgZ2V0cGFnZXNpemUuaC4gSWYgbm9uZSBvZiB0aGUgc3lzdGVtLXBy
b2JlcyBoZXJlIGFwcGx5LCBhIHZhbHVlIG9mCi0gIDQwOTYgaXMgdXNlZCwgd2hpY2ggc2hvdWxk
IGJlIE9LOiBJZiB0aGV5IGRvbid0IGFwcGx5LCB0aGVuIHVzaW5nCi0gIHRoZSBhY3R1YWwgdmFs
dWUgcHJvYmFibHkgZG9lc24ndCBpbXBhY3QgcGVyZm9ybWFuY2UuCi0qLwotCi0KLSNpZm5kZWYg
bWFsbG9jX2dldHBhZ2VzaXplCi0KLSNpZm5kZWYgTEFDS1NfVU5JU1REX0gKLSMgIGluY2x1ZGUg
PHVuaXN0ZC5oPgotI2VuZGlmCi0KLSMgIGlmZGVmIF9TQ19QQUdFU0laRSAgICAgICAgIC8qIHNv
bWUgU1ZSNCBzeXN0ZW1zIG9taXQgYW4gdW5kZXJzY29yZSAqLwotIyAgICBpZm5kZWYgX1NDX1BB
R0VfU0laRQotIyAgICAgIGRlZmluZSBfU0NfUEFHRV9TSVpFIF9TQ19QQUdFU0laRQotIyAgICBl
bmRpZgotIyAgZW5kaWYKLQotIyAgaWZkZWYgX1NDX1BBR0VfU0laRQotIyAgICBkZWZpbmUgbWFs
bG9jX2dldHBhZ2VzaXplIHN5c2NvbmYoX1NDX1BBR0VfU0laRSkKLSMgIGVsc2UKLSMgICAgaWYg
ZGVmaW5lZChCU0QpIHx8IGRlZmluZWQoREdVWCkgfHwgZGVmaW5lZChIQVZFX0dFVFBBR0VTSVpF
KQotICAgICAgIGV4dGVybiBzaXplX3QgZ2V0cGFnZXNpemUoKTsKLSMgICAgICBkZWZpbmUgbWFs
bG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkKLSMgICAgZWxzZQotIyAgICAgIGlmZGVmIFdJ
TjMyIC8qIHVzZSBzdXBwbGllZCBlbXVsYXRpb24gb2YgZ2V0cGFnZXNpemUgKi8KLSMgICAgICAg
IGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUoKSAKLSMgICAgICBlbHNlCi0j
ICAgICAgICBpZm5kZWYgTEFDS1NfU1lTX1BBUkFNX0gKLSMgICAgICAgICAgaW5jbHVkZSA8c3lz
L3BhcmFtLmg+Ci0jICAgICAgICBlbmRpZgotIyAgICAgICAgaWZkZWYgRVhFQ19QQUdFU0laRQot
IyAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIEVYRUNfUEFHRVNJWkUKLSMgICAg
ICAgIGVsc2UKLSMgICAgICAgICAgaWZkZWYgTkJQRwotIyAgICAgICAgICAgIGlmbmRlZiBDTFNJ
WkUKLSMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgTkJQRwotIyAgICAg
ICAgICAgIGVsc2UKLSMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKE5C
UEcgKiBDTFNJWkUpCi0jICAgICAgICAgICAgZW5kaWYKLSMgICAgICAgICAgZWxzZQotIyAgICAg
ICAgICAgIGlmZGVmIE5CUEMKLSMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNp
emUgTkJQQwotIyAgICAgICAgICAgIGVsc2UKLSMgICAgICAgICAgICAgIGlmZGVmIFBBR0VTSVpF
Ci0jICAgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgUEFHRVNJWkUKLSMg
ICAgICAgICAgICAgIGVsc2UgLyoganVzdCBndWVzcyAqLwotIyAgICAgICAgICAgICAgICBkZWZp
bmUgbWFsbG9jX2dldHBhZ2VzaXplICg0MDk2KSAKLSMgICAgICAgICAgICAgIGVuZGlmCi0jICAg
ICAgICAgICAgZW5kaWYKLSMgICAgICAgICAgZW5kaWYKLSMgICAgICAgIGVuZGlmCi0jICAgICAg
ZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyoKLSAgVGhpcyB2ZXJzaW9u
IG9mIG1hbGxvYyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgU1ZJRC9YUEcgbWFsbGluZm8KLSAgcm91
dGluZSB0aGF0IHJldHVybnMgYSBzdHJ1Y3QgY29udGFpbmluZyB1c2FnZSBwcm9wZXJ0aWVzIGFu
ZAotICBzdGF0aXN0aWNzLiBJdCBzaG91bGQgd29yayBvbiBhbnkgU1ZJRC9YUEcgY29tcGxpYW50
IHN5c3RlbSB0aGF0IGhhcwotICBhIC91c3IvaW5jbHVkZS9tYWxsb2MuaCBkZWZpbmluZyBzdHJ1
Y3QgbWFsbGluZm8uIChJZiB5b3UnZCBsaWtlIHRvCi0gIGluc3RhbGwgc3VjaCBhIHRoaW5nIHlv
dXJzZWxmLCBjdXQgb3V0IHRoZSBwcmVsaW1pbmFyeSBkZWNsYXJhdGlvbnMKLSAgYXMgZGVzY3Jp
YmVkIGFib3ZlIGFuZCBiZWxvdyBhbmQgc2F2ZSB0aGVtIGluIGEgbWFsbG9jLmggZmlsZS4gQnV0
Ci0gIHRoZXJlJ3Mgbm8gY29tcGVsbGluZyByZWFzb24gdG8gYm90aGVyIHRvIGRvIHRoaXMuKQot
Ci0gIFRoZSBtYWluIGRlY2xhcmF0aW9uIG5lZWRlZCBpcyB0aGUgbWFsbGluZm8gc3RydWN0IHRo
YXQgaXMgcmV0dXJuZWQKLSAgKGJ5LWNvcHkpIGJ5IG1hbGxpbmZvKCkuICBUaGUgU1ZJRC9YUEcg
bWFsbG9pbmZvIHN0cnVjdCBjb250YWlucyBhCi0gIGJ1bmNoIG9mIGZpZWxkcyB0aGF0IGFyZSBu
b3QgZXZlbiBtZWFuaW5nZnVsIGluIHRoaXMgdmVyc2lvbiBvZgotICBtYWxsb2MuICBUaGVzZSBm
aWVsZHMgYXJlIGFyZSBpbnN0ZWFkIGZpbGxlZCBieSBtYWxsaW5mbygpIHdpdGgKLSAgb3RoZXIg
bnVtYmVycyB0aGF0IG1pZ2h0IGJlIG9mIGludGVyZXN0LgotCi0gIEhBVkVfVVNSX0lOQ0xVREVf
TUFMTE9DX0ggc2hvdWxkIGJlIHNldCBpZiB5b3UgaGF2ZSBhCi0gIC91c3IvaW5jbHVkZS9tYWxs
b2MuaCBmaWxlIHRoYXQgaW5jbHVkZXMgYSBkZWNsYXJhdGlvbiBvZiBzdHJ1Y3QKLSAgbWFsbGlu
Zm8uICBJZiBzbywgaXQgaXMgaW5jbHVkZWQ7IGVsc2UgYW4gU1ZJRDIvWFBHMiBjb21wbGlhbnQK
LSAgdmVyc2lvbiBpcyBkZWNsYXJlZCBiZWxvdy4gIFRoZXNlIG11c3QgYmUgcHJlY2lzZWx5IHRo
ZSBzYW1lIGZvcgotICBtYWxsaW5mbygpIHRvIHdvcmsuICBUaGUgb3JpZ2luYWwgU1ZJRCB2ZXJz
aW9uIG9mIHRoaXMgc3RydWN0LAotICBkZWZpbmVkIG9uIG1vc3Qgc3lzdGVtcyB3aXRoIG1hbGxp
bmZvLCBkZWNsYXJlcyBhbGwgZmllbGRzIGFzCi0gIGludHMuIEJ1dCBzb21lIG90aGVycyBkZWZp
bmUgYXMgdW5zaWduZWQgbG9uZy4gSWYgeW91ciBzeXN0ZW0KLSAgZGVmaW5lcyB0aGUgZmllbGRz
IHVzaW5nIGEgdHlwZSBvZiBkaWZmZXJlbnQgd2lkdGggdGhhbiBsaXN0ZWQgaGVyZSwKLSAgeW91
IG11c3QgI2luY2x1ZGUgeW91ciBzeXN0ZW0gdmVyc2lvbiBhbmQgI2RlZmluZQotICBIQVZFX1VT
Ul9JTkNMVURFX01BTExPQ19ILgotKi8KLQotLyogI2RlZmluZSBIQVZFX1VTUl9JTkNMVURFX01B
TExPQ19IICovCi0KLSNpZmRlZiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ICi0jaW5jbHVkZSAi
L3Vzci9pbmNsdWRlL21hbGxvYy5oIgotI2Vsc2UKLQotLyogU1ZJRDIvWFBHIG1hbGxpbmZvIHN0
cnVjdHVyZSAqLwotCi1zdHJ1Y3QgbWFsbGluZm8gewotICBpbnQgYXJlbmE7ICAgIC8qIG5vbi1t
bWFwcGVkIHNwYWNlIGFsbG9jYXRlZCBmcm9tIHN5c3RlbSAqLwotICBpbnQgb3JkYmxrczsgIC8q
IG51bWJlciBvZiBmcmVlIGNodW5rcyAqLwotICBpbnQgc21ibGtzOyAgIC8qIG51bWJlciBvZiBm
YXN0YmluIGJsb2NrcyAqLwotICBpbnQgaGJsa3M7ICAgIC8qIG51bWJlciBvZiBtbWFwcGVkIHJl
Z2lvbnMgKi8KLSAgaW50IGhibGtoZDsgICAvKiBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8K
LSAgaW50IHVzbWJsa3M7ICAvKiBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLwotICBp
bnQgZnNtYmxrczsgIC8qIHNwYWNlIGF2YWlsYWJsZSBpbiBmcmVlZCBmYXN0YmluIGJsb2NrcyAq
LwotICBpbnQgdW9yZGJsa3M7IC8qIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLwotICBpbnQgZm9y
ZGJsa3M7IC8qIHRvdGFsIGZyZWUgc3BhY2UgKi8KLSAgaW50IGtlZXBjb3N0OyAvKiB0b3AtbW9z
dCwgcmVsZWFzYWJsZSAodmlhIG1hbGxvY190cmltKSBzcGFjZSAqLwotfTsKLQotLyoKLSAgU1ZJ
RC9YUEcgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFtZXRlciBudW1iZXJzIGZvciBtYWxsb3B0
LAotICBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgT25seSBvbmUgb2YgdGhlc2UgKE1f
TVhGQVNUKSBpcyB1c2VkCi0gIGluIHRoaXMgbWFsbG9jLiBUaGUgb3RoZXJzIChNX05MQkxLUywg
TV9HUkFJTiwgTV9LRUVQKSBkb24ndCBhcHBseSwKLSAgc28gc2V0dGluZyB0aGVtIGhhcyBubyBl
ZmZlY3QuIEJ1dCB0aGlzIG1hbGxvYyBhbHNvIHN1cHBvcnRzIG90aGVyCi0gIG9wdGlvbnMgaW4g
bWFsbG9wdCBkZXNjcmliZWQgYmVsb3cuCi0qLwotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLSBk
ZXNjcmlwdGlvbiBvZiBwdWJsaWMgcm91dGluZXMgLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gIG1h
bGxvYyhzaXplX3QgbikKLSAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQg
Y2h1bmsgb2YgYXQgbGVhc3QgbiBieXRlcywgb3IgbnVsbAotICBpZiBubyBzcGFjZSBpcyBhdmFp
bGFibGUuIEFkZGl0aW9uYWxseSwgb24gZmFpbHVyZSwgZXJybm8gaXMKLSAgc2V0IHRvIEVOT01F
TSBvbiBBTlNJIEMgc3lzdGVtcy4KLQotICBJZiBuIGlzIHplcm8sIG1hbGxvYyByZXR1cm5zIGEg
bWludW11bS1zaXplZCBjaHVuay4gKFRoZSBtaW5pbXVtCi0gIHNpemUgaXMgMTYgYnl0ZXMgb24g
bW9zdCAzMmJpdCBzeXN0ZW1zLCBhbmQgMjQgb3IgMzIgYnl0ZXMgb24gNjRiaXQKLSAgc3lzdGVt
cy4pICBPbiBtb3N0IHN5c3RlbXMsIHNpemVfdCBpcyBhbiB1bnNpZ25lZCB0eXBlLCBzbyBjYWxs
cwotICB3aXRoIG5lZ2F0aXZlIGFyZ3VtZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgcmVxdWVzdHMg
Zm9yIGh1Z2UgYW1vdW50cwotICBvZiBzcGFjZSwgd2hpY2ggd2lsbCBvZnRlbiBmYWlsLiBUaGUg
bWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgb2YgbgotICBkaWZmZXJzIGFjcm9zcyBzeXN0ZW1zLCBi
dXQgaXMgaW4gYWxsIGNhc2VzIGxlc3MgdGhhbiB0aGUgbWF4aW11bQotICByZXByZXNlbnRhYmxl
IHZhbHVlIG9mIGEgc2l6ZV90LgotKi8KLSNpZiBfX1NURF9DCi1Wb2lkX3QqICBwdWJsaWNfbUFM
TE9jKHNpemVfdCk7Ci0jZWxzZQotVm9pZF90KiAgcHVibGljX21BTExPYygpOwotI2VuZGlmCi0K
LS8qCi0gIGZyZWUoVm9pZF90KiBwKQotICBSZWxlYXNlcyB0aGUgY2h1bmsgb2YgbWVtb3J5IHBv
aW50ZWQgdG8gYnkgcCwgdGhhdCBoYWQgYmVlbiBwcmV2aW91c2x5Ci0gIGFsbG9jYXRlZCB1c2lu
ZyBtYWxsb2Mgb3IgYSByZWxhdGVkIHJvdXRpbmUgc3VjaCBhcyByZWFsbG9jLgotICBJdCBoYXMg
bm8gZWZmZWN0IGlmIHAgaXMgbnVsbC4gSXQgY2FuIGhhdmUgYXJiaXRyYXJ5IChpLmUuLCBiYWQh
KQotICBlZmZlY3RzIGlmIHAgaGFzIGFscmVhZHkgYmVlbiBmcmVlZC4KLQotICBVbmxlc3MgZGlz
YWJsZWQgKHVzaW5nIG1hbGxvcHQpLCBmcmVlaW5nIHZlcnkgbGFyZ2Ugc3BhY2VzIHdpbGwKLSAg
d2hlbiBwb3NzaWJsZSwgYXV0b21hdGljYWxseSB0cmlnZ2VyIG9wZXJhdGlvbnMgdGhhdCBnaXZl
Ci0gIGJhY2sgdW51c2VkIG1lbW9yeSB0byB0aGUgc3lzdGVtLCB0aHVzIHJlZHVjaW5nIHByb2dy
YW0gZm9vdHByaW50LgotKi8KLSNpZiBfX1NURF9DCi12b2lkICAgICBwdWJsaWNfZlJFZShWb2lk
X3QqKTsKLSNlbHNlCi12b2lkICAgICBwdWJsaWNfZlJFZSgpOwotI2VuZGlmCi0KLS8qCi0gIGNh
bGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7Ci0gIFJldHVybnMg
YSBwb2ludGVyIHRvIG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemUgYnl0ZXMsIHdpdGggYWxsIGxv
Y2F0aW9ucwotICBzZXQgdG8gemVyby4KLSovCi0jaWYgX19TVERfQwotVm9pZF90KiAgcHVibGlj
X2NBTExPYyhzaXplX3QsIHNpemVfdCk7Ci0jZWxzZQotVm9pZF90KiAgcHVibGljX2NBTExPYygp
OwotI2VuZGlmCi0KLS8qCi0gIHJlYWxsb2MoVm9pZF90KiBwLCBzaXplX3QgbikKLSAgUmV0dXJu
cyBhIHBvaW50ZXIgdG8gYSBjaHVuayBvZiBzaXplIG4gdGhhdCBjb250YWlucyB0aGUgc2FtZSBk
YXRhCi0gIGFzIGRvZXMgY2h1bmsgcCB1cCB0byB0aGUgbWluaW11bSBvZiAobiwgcCdzIHNpemUp
IGJ5dGVzLCBvciBudWxsCi0gIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZS4gCi0KLSAgVGhlIHJl
dHVybmVkIHBvaW50ZXIgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgcC4gVGhlIGFsZ29y
aXRobQotICBwcmVmZXJzIGV4dGVuZGluZyBwIHdoZW4gcG9zc2libGUsIG90aGVyd2lzZSBpdCBl
bXBsb3lzIHRoZQotICBlcXVpdmFsZW50IG9mIGEgbWFsbG9jLWNvcHktZnJlZSBzZXF1ZW5jZS4K
LQotICBJZiBwIGlzIG51bGwsIHJlYWxsb2MgaXMgZXF1aXZhbGVudCB0byBtYWxsb2MuICAKLQot
ICBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCByZWFsbG9jIHJldHVybnMgbnVsbCwgZXJybm8g
aXMgc2V0IChpZiBvbgotICBBTlNJKSBhbmQgcCBpcyBOT1QgZnJlZWQuCi0KLSAgaWYgbiBpcyBm
b3IgZmV3ZXIgYnl0ZXMgdGhhbiBhbHJlYWR5IGhlbGQgYnkgcCwgdGhlIG5ld2x5IHVudXNlZAot
ICBzcGFjZSBpcyBsb3BwZWQgb2ZmIGFuZCBmcmVlZCBpZiBwb3NzaWJsZS4gIFVubGVzcyB0aGUg
I2RlZmluZQotICBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgaXMgc2V0LCByZWFsbG9jIHdpdGgg
YSBzaXplIGFyZ3VtZW50IG9mCi0gIHplcm8gKHJlKWFsbG9jYXRlcyBhIG1pbmltdW0tc2l6ZWQg
Y2h1bmsuCi0KLSAgTGFyZ2UgY2h1bmtzIHRoYXQgd2VyZSBpbnRlcm5hbGx5IG9idGFpbmVkIHZp
YSBtbWFwIHdpbGwgYWx3YXlzCi0gIGJlIHJlYWxsb2NhdGVkIHVzaW5nIG1hbGxvYy1jb3B5LWZy
ZWUgc2VxdWVuY2VzIHVubGVzcwotICB0aGUgc3lzdGVtIHN1cHBvcnRzIE1SRU1BUCAoY3VycmVu
dGx5IG9ubHkgbGludXgpLgotCi0gIFRoZSBvbGQgdW5peCByZWFsbG9jIGNvbnZlbnRpb24gb2Yg
YWxsb3dpbmcgdGhlIGxhc3QtZnJlZSdkIGNodW5rCi0gIHRvIGJlIHVzZWQgYXMgYW4gYXJndW1l
bnQgdG8gcmVhbGxvYyBpcyBub3Qgc3VwcG9ydGVkLgotKi8KLSNpZiBfX1NURF9DCi1Wb2lkX3Qq
ICBwdWJsaWNfckVBTExPYyhWb2lkX3QqLCBzaXplX3QpOwotI2Vsc2UKLVZvaWRfdCogIHB1Ymxp
Y19yRUFMTE9jKCk7Ci0jZW5kaWYKLQotLyoKLSAgbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90IG4pOwotICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVu
ayBvZiBuIGJ5dGVzLCBhbGlnbmVkCi0gIGluIGFjY29yZCB3aXRoIHRoZSBhbGlnbm1lbnQgYXJn
dW1lbnQuCi0KLSAgVGhlIGFsaWdubWVudCBhcmd1bWVudCBzaG91bGQgYmUgYSBwb3dlciBvZiB0
d28uIElmIHRoZSBhcmd1bWVudCBpcwotICBub3QgYSBwb3dlciBvZiB0d28sIHRoZSBuZWFyZXN0
IGdyZWF0ZXIgcG93ZXIgaXMgdXNlZC4KLSAgOC1ieXRlIGFsaWdubWVudCBpcyBndWFyYW50ZWVk
IGJ5IG5vcm1hbCBtYWxsb2MgY2FsbHMsIHNvIGRvbid0Ci0gIGJvdGhlciBjYWxsaW5nIG1lbWFs
aWduIHdpdGggYW4gYXJndW1lbnQgb2YgOCBvciBsZXNzLgotCi0gIE92ZXJyZWxpYW5jZSBvbiBt
ZW1hbGlnbiBpcyBhIHN1cmUgd2F5IHRvIGZyYWdtZW50IHNwYWNlLgotKi8KLSNpZiBfX1NURF9D
Ci1Wb2lkX3QqICBwdWJsaWNfbUVNQUxJR24oc2l6ZV90LCBzaXplX3QpOwotI2Vsc2UKLVZvaWRf
dCogIHB1YmxpY19tRU1BTElHbigpOwotI2VuZGlmCi0KLS8qCi0gIHZhbGxvYyhzaXplX3Qgbik7
Ci0gIEVxdWl2YWxlbnQgdG8gbWVtYWxpZ24ocGFnZXNpemUsIG4pLCB3aGVyZSBwYWdlc2l6ZSBp
cyB0aGUgcGFnZQotICBzaXplIG9mIHRoZSBzeXN0ZW0uIElmIHRoZSBwYWdlc2l6ZSBpcyB1bmtu
b3duLCA0MDk2IGlzIHVzZWQuCi0qLwotI2lmIF9fU1REX0MKLVZvaWRfdCogIHB1YmxpY192QUxM
T2Moc2l6ZV90KTsKLSNlbHNlCi1Wb2lkX3QqICBwdWJsaWNfdkFMTE9jKCk7Ci0jZW5kaWYKLQot
Ci0KLS8qCi0gIG1hbGxvcHQoaW50IHBhcmFtZXRlcl9udW1iZXIsIGludCBwYXJhbWV0ZXJfdmFs
dWUpCi0gIFNldHMgdHVuYWJsZSBwYXJhbWV0ZXJzIFRoZSBmb3JtYXQgaXMgdG8gcHJvdmlkZSBh
Ci0gIChwYXJhbWV0ZXItbnVtYmVyLCBwYXJhbWV0ZXItdmFsdWUpIHBhaXIuICBtYWxsb3B0IHRo
ZW4gc2V0cyB0aGUKLSAgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdG8gdGhlIGFyZ3VtZW50IHZh
bHVlIGlmIGl0IGNhbiAoaS5lLiwgc28KLSAgbG9uZyBhcyB0aGUgdmFsdWUgaXMgbWVhbmluZ2Z1
bCksIGFuZCByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBlbHNlCi0gIDAuICBTVklEL1hQRy9BTlNJ
IGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbSBudW1iZXJzIGZvciBtYWxsb3B0LAotICBub3Jt
YWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgT25seSBvbmUgb2YgdGhlc2UgKE1fTVhGQVNUKSBp
cyB1c2VkCi0gIGluIHRoaXMgbWFsbG9jLiBUaGUgb3RoZXJzIChNX05MQkxLUywgTV9HUkFJTiwg
TV9LRUVQKSBkb24ndCBhcHBseSwKLSAgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1
dCB0aGlzIG1hbGxvYyBhbHNvIHN1cHBvcnRzIGZvdXIKLSAgb3RoZXIgb3B0aW9ucyBpbiBtYWxs
b3B0LiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuICBCcmllZmx5LCBzdXBwb3J0ZWQKLSAgcGFyYW1l
dGVycyBhcmUgYXMgZm9sbG93cyAobGlzdGVkIGRlZmF1bHRzIGFyZSBmb3IgInR5cGljYWwiCi0g
IGNvbmZpZ3VyYXRpb25zKS4KLQotICBTeW1ib2wgICAgICAgICAgICBwYXJhbSAjICAgZGVmYXVs
dCAgICBhbGxvd2VkIHBhcmFtIHZhbHVlcwotICBNX01YRkFTVCAgICAgICAgICAxICAgICAgICAg
NjQgICAgICAgICAwLTgwICAoMCBkaXNhYmxlcyBmYXN0YmlucykKLSAgTV9UUklNX1RIUkVTSE9M
RCAtMSAgICAgICAgIDI1NioxMDI0ICAgYW55ICAgKC0xVSBkaXNhYmxlcyB0cmltbWluZykKLSAg
TV9UT1BfUEFEICAgICAgICAtMiAgICAgICAgIDAgICAgICAgICAgYW55ICAKLSAgTV9NTUFQX1RI
UkVTSE9MRCAtMyAgICAgICAgIDI1NioxMDI0ICAgYW55ICAgKG9yIDAgaWYgbm8gTU1BUCBzdXBw
b3J0KQotICBNX01NQVBfTUFYICAgICAgIC00ICAgICAgICAgNjU1MzYgICAgICBhbnkgICAoMCBk
aXNhYmxlcyB1c2Ugb2YgbW1hcCkKLSovCi0jaWYgX19TVERfQwotaW50ICAgICAgcHVibGljX21B
TExPUHQoaW50LCBpbnQpOwotI2Vsc2UKLWludCAgICAgIHB1YmxpY19tQUxMT1B0KCk7Ci0jZW5k
aWYKLQotCi0vKgotICBtYWxsaW5mbygpCi0gIFJldHVybnMgKGJ5IGNvcHkpIGEgc3RydWN0IGNv
bnRhaW5pbmcgdmFyaW91cyBzdW1tYXJ5IHN0YXRpc3RpY3M6Ci0KLSAgYXJlbmE6ICAgICBjdXJy
ZW50IHRvdGFsIG5vbi1tbWFwcGVkIGJ5dGVzIGFsbG9jYXRlZCBmcm9tIHN5c3RlbSAKLSAgb3Jk
YmxrczogICB0aGUgbnVtYmVyIG9mIGZyZWUgY2h1bmtzIAotICBzbWJsa3M6ICAgIHRoZSBudW1i
ZXIgb2YgZmFzdGJpbiBibG9ja3MgKGkuZS4sIHNtYWxsIGNodW5rcyB0aGF0Ci0gICAgICAgICAg
ICAgICBoYXZlIGJlZW4gZnJlZWQgYnV0IG5vdCB1c2UgcmVzdXNlZCBvciBjb25zb2xpZGF0ZWQp
Ci0gIGhibGtzOiAgICAgY3VycmVudCBudW1iZXIgb2YgbW1hcHBlZCByZWdpb25zIAotICBoYmxr
aGQ6ICAgIHRvdGFsIGJ5dGVzIGhlbGQgaW4gbW1hcHBlZCByZWdpb25zIAotICB1c21ibGtzOiAg
IHRoZSBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZS4gVGhpcyB3aWxsIGJlIGdyZWF0ZXIK
LSAgICAgICAgICAgICAgICB0aGFuIGN1cnJlbnQgdG90YWwgaWYgdHJpbW1pbmcgaGFzIG9jY3Vy
cmVkLgotICBmc21ibGtzOiAgIHRvdGFsIGJ5dGVzIGhlbGQgaW4gZmFzdGJpbiBibG9ja3MgCi0g
IHVvcmRibGtzOiAgY3VycmVudCB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKG5vcm1hbCBvciBtbWFw
cGVkKQotICBmb3JkYmxrczogIHRvdGFsIGZyZWUgc3BhY2UgCi0gIGtlZXBjb3N0OiAgdGhlIG1h
eGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgaWRlYWxseSBiZSByZWxlYXNlZAotICAg
ICAgICAgICAgICAgYmFjayB0byBzeXN0ZW0gdmlhIG1hbGxvY190cmltLiAoImlkZWFsbHkiIG1l
YW5zIHRoYXQKLSAgICAgICAgICAgICAgIGl0IGlnbm9yZXMgcGFnZSByZXN0cmljdGlvbnMgZXRj
LikKLQotICBCZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgaW50cywgYnV0IGludGVybmFsIGJvb2tr
ZWVwaW5nIG1heQotICBiZSBrZXB0IGFzIGxvbmdzLCB0aGUgcmVwb3J0ZWQgdmFsdWVzIG1heSB3
cmFwIGFyb3VuZCB6ZXJvIGFuZCAKLSAgdGh1cyBiZSBpbmFjY3VyYXRlLgotKi8KLSNpZiBfX1NU
RF9DCi1zdHJ1Y3QgbWFsbGluZm8gcHVibGljX21BTExJTkZvKHZvaWQpOwotI2Vsc2UKLXN0cnVj
dCBtYWxsaW5mbyBwdWJsaWNfbUFMTElORm8oKTsKLSNlbmRpZgotCi0vKgotICBpbmRlcGVuZGVu
dF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUsIFZvaWRfdCog
Y2h1bmtzW10pOwotCi0gIGluZGVwZW5kZW50X2NhbGxvYyBpcyBzaW1pbGFyIHRvIGNhbGxvYywg
YnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEKLSAgc2luZ2xlIGNsZWFyZWQgc3BhY2UsIGl0IHJl
dHVybnMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gbl9lbGVtZW50cwotICBpbmRlcGVuZGVudCBl
bGVtZW50cyB0aGF0IGNhbiBob2xkIGNvbnRlbnRzIG9mIHNpemUgZWxlbV9zaXplLCBlYWNoCi0g
IG9mIHdoaWNoIHN0YXJ0cyBvdXQgY2xlYXJlZCwgYW5kIGNhbiBiZSBpbmRlcGVuZGVudGx5IGZy
ZWVkLAotICByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvIGJl
IGFkamFjZW50bHkKLSAgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3Vy
IHdpdGggbXVsdGlwbGUgY2FsbG9jcyBvcgotICBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1w
cm92ZSBjYWNoZSBsb2NhbGl0eSBpbiBzb21lCi0gIGFwcGxpY2F0aW9ucy4KLQotICBUaGUgImNo
dW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsLCB3aGljaCBpcwot
ICBwcm9iYWJseSB0aGUgbW9zdCB0eXBpY2FsIHVzYWdlKS4gSWYgaXQgaXMgbnVsbCwgdGhlIHJl
dHVybmVkIGFycmF5Ci0gIGlzIGl0c2VsZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHNob3Vs
ZCBhbHNvIGJlIGZyZWVkIHdoZW4gaXQgaXMKLSAgbm8gbG9uZ2VyIG5lZWRlZC4gT3RoZXJ3aXNl
LCB0aGUgY2h1bmtzIGFycmF5IG11c3QgYmUgb2YgYXQgbGVhc3QKLSAgbl9lbGVtZW50cyBpbiBs
ZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZSBwb2ludGVycyB0byB0aGUKLSAgY2h1bmtz
LgotCi0gIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jYWxsb2MgcmV0dXJucyB0aGlzIHBv
aW50ZXIgYXJyYXksIG9yCi0gIG51bGwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiAgSWYgbl9l
bGVtZW50cyBpcyB6ZXJvIGFuZCAiY2h1bmtzIgotICBpcyBudWxsLCBpdCByZXR1cm5zIGEgY2h1
bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVtZW50cwotICAod2hpY2ggc2hv
dWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgotCi0gIEVhY2ggZWxlbWVudCBtdXN0IGJlIGlu
ZGl2aWR1YWxseSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlcgotICBuZWVkZWQuIElmIHlvdSdk
IGxpa2UgdG8gaW5zdGVhZCBiZSBhYmxlIHRvIGZyZWUgYWxsIGF0IG9uY2UsIHlvdQotICBzaG91
bGQgaW5zdGVhZCB1c2UgcmVndWxhciBjYWxsb2MgYW5kIGFzc2lnbiBwb2ludGVycyBpbnRvIHRo
aXMKLSAgc3BhY2UgdG8gcmVwcmVzZW50IGVsZW1lbnRzLiAgKEluIHRoaXMgY2FzZSB0aG91Z2gs
IHlvdSBjYW5ub3QKLSAgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKLSAgCi0gIGluZGVw
ZW5kZW50X2NhbGxvYyBzaW1wbGlmaWVzIGFuZCBzcGVlZHMgdXAgaW1wbGVtZW50YXRpb25zIG9m
IG1hbnkKLSAga2luZHMgb2YgcG9vbHMuICBJdCBtYXkgYWxzbyBiZSB1c2VmdWwgd2hlbiBjb25z
dHJ1Y3RpbmcgbGFyZ2UgZGF0YQotICBzdHJ1Y3R1cmVzIHRoYXQgaW5pdGlhbGx5IGhhdmUgYSBm
aXhlZCBudW1iZXIgb2YgZml4ZWQtc2l6ZWQgbm9kZXMsCi0gIGJ1dCB0aGUgbnVtYmVyIGlzIG5v
dCBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCBzb21lIG9mIHRoZSBub2RlcwotICBtYXkgbGF0
ZXIgbmVlZCB0byBiZSBmcmVlZC4gRm9yIGV4YW1wbGU6Ci0KLSAgc3RydWN0IE5vZGUgeyBpbnQg
aXRlbTsgc3RydWN0IE5vZGUqIG5leHQ7IH07Ci0gIAotICBzdHJ1Y3QgTm9kZSogYnVpbGRfbGlz
dCgpIHsKLSAgICBzdHJ1Y3QgTm9kZSoqIHBvb2w7Ci0gICAgaW50IG4gPSByZWFkX251bWJlcl9v
Zl9ub2Rlc19uZWVkZWQoKTsKLSAgICBpZiAobiA8PSAwKSByZXR1cm4gMDsKLSAgICBwb29sID0g
KHN0cnVjdCBOb2RlKiopKGluZGVwZW5kZW50X2NhbGxvYyhuLCBzaXplb2Yoc3RydWN0IE5vZGUp
LCAwKTsKLSAgICBpZiAocG9vbCA9PSAwKSBkaWUoKTsgCi0gICAgLy8gb3JnYW5pemUgaW50byBh
IGxpbmtlZCBsaXN0Li4uIAotICAgIHN0cnVjdCBOb2RlKiBmaXJzdCA9IHBvb2xbMF07Ci0gICAg
Zm9yIChpID0gMDsgaSA8IG4tMTsgKytpKSAKLSAgICAgIHBvb2xbaV0tPm5leHQgPSBwb29sW2kr
MV07Ci0gICAgZnJlZShwb29sKTsgICAgIC8vIENhbiBub3cgZnJlZSB0aGUgYXJyYXkgKG9yIG5v
dCwgaWYgaXQgaXMgbmVlZGVkIGxhdGVyKQotICAgIHJldHVybiBmaXJzdDsKLSAgfQotKi8KLSNp
ZiBfX1NURF9DCi1Wb2lkX3QqKiBwdWJsaWNfaUNBTExPYyhzaXplX3QsIHNpemVfdCwgVm9pZF90
KiopOwotI2Vsc2UKLVZvaWRfdCoqIHB1YmxpY19pQ0FMTE9jKCk7Ci0jZW5kaWYKLQotLyoKLSAg
aW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXplc1tdLCBW
b2lkX3QqIGNodW5rc1tdKTsKLQotICBpbmRlcGVuZGVudF9jb21hbGxvYyBhbGxvY2F0ZXMsIGFs
bCBhdCBvbmNlLCBhIHNldCBvZiBuX2VsZW1lbnRzCi0gIGNodW5rcyB3aXRoIHNpemVzIGluZGlj
YXRlZCBpbiB0aGUgInNpemVzIiBhcnJheS4gICAgSXQgcmV0dXJucwotICBhbiBhcnJheSBvZiBw
b2ludGVycyB0byB0aGVzZSBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBjYW4gYmUKLSAgaW5kZXBl
bmRlbnRseSBmcmVlZCwgcmVhbGxvYydlZCBldGMuIFRoZSBlbGVtZW50cyBhcmUgZ3VhcmFudGVl
ZCB0bwotICBiZSBhZGphY2VudGx5IGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0
byBvY2N1ciB3aXRoCi0gIG11bHRpcGxlIGNhbGxvY3Mgb3IgbWFsbG9jcyksIHdoaWNoIG1heSBh
bHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkKLSAgaW4gc29tZSBhcHBsaWNhdGlvbnMuCi0KLSAg
VGhlICJjaHVua3MiIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCkuIElm
IGl0IGlzIG51bGwKLSAgdGhlIHJldHVybmVkIGFycmF5IGlzIGl0c2VsZiBkeW5hbWljYWxseSBh
bGxvY2F0ZWQgYW5kIHNob3VsZCBhbHNvCi0gIGJlIGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2Vy
IG5lZWRlZC4gT3RoZXJ3aXNlLCB0aGUgY2h1bmtzIGFycmF5Ci0gIG11c3QgYmUgb2YgYXQgbGVh
c3Qgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZQotICBwb2lu
dGVycyB0byB0aGUgY2h1bmtzLgotCi0gIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jb21h
bGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKLSAgbnVsbCBpZiB0aGUgYWxsb2Nh
dGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kIGNodW5rcyBpcwotICBudWxs
LCBpdCByZXR1cm5zIGEgY2h1bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVt
ZW50cwotICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgotICAKLSAgRWFj
aCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2Vy
Ci0gIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwg
YXQgb25jZSwgeW91Ci0gIHNob3VsZCBpbnN0ZWFkIHVzZSBhIHNpbmdsZSByZWd1bGFyIG1hbGxv
YywgYW5kIGFzc2lnbiBwb2ludGVycyBhdAotICBwYXJ0aWN1bGFyIG9mZnNldHMgaW4gdGhlIGFn
Z3JlZ2F0ZSBzcGFjZS4gKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdSAKLSAgY2Fubm90IGluZGVw
ZW5kZW50bHkgZnJlZSBlbGVtZW50cy4pCi0KLSAgaW5kZXBlbmRlbnRfY29tYWxsYWMgZGlmZmVy
cyBmcm9tIGluZGVwZW5kZW50X2NhbGxvYyBpbiB0aGF0IGVhY2gKLSAgZWxlbWVudCBtYXkgaGF2
ZSBhIGRpZmZlcmVudCBzaXplLCBhbmQgYWxzbyB0aGF0IGl0IGRvZXMgbm90Ci0gIGF1dG9tYXRp
Y2FsbHkgY2xlYXIgZWxlbWVudHMuCi0KLSAgaW5kZXBlbmRlbnRfY29tYWxsb2MgY2FuIGJlIHVz
ZWQgdG8gc3BlZWQgdXAgYWxsb2NhdGlvbiBpbiBjYXNlcwotICB3aGVyZSBzZXZlcmFsIHN0cnVj
dHMgb3Igb2JqZWN0cyBtdXN0IGFsd2F5cyBiZSBhbGxvY2F0ZWQgYXQgdGhlCi0gIHNhbWUgdGlt
ZS4gIEZvciBleGFtcGxlOgotCi0gIHN0cnVjdCBIZWFkIHsgLi4uIH0KLSAgc3RydWN0IEZvb3Qg
eyAuLi4gfQotCi0gIHZvaWQgc2VuZF9tZXNzYWdlKGNoYXIqIG1zZykgewotICAgIGludCBtc2ds
ZW4gPSBzdHJsZW4obXNnKTsKLSAgICBzaXplX3Qgc2l6ZXNbM10gPSB7IHNpemVvZihzdHJ1Y3Qg
SGVhZCksIG1zZ2xlbiwgc2l6ZW9mKHN0cnVjdCBGb290KSB9OwotICAgIHZvaWQqIGNodW5rc1sz
XTsKLSAgICBpZiAoaW5kZXBlbmRlbnRfY29tYWxsb2MoMywgc2l6ZXMsIGNodW5rcykgPT0gMCkK
LSAgICAgIGRpZSgpOwotICAgIHN0cnVjdCBIZWFkKiBoZWFkID0gKHN0cnVjdCBIZWFkKikoY2h1
bmtzWzBdKTsKLSAgICBjaGFyKiAgICAgICAgYm9keSA9IChjaGFyKikoY2h1bmtzWzFdKTsKLSAg
ICBzdHJ1Y3QgRm9vdCogZm9vdCA9IChzdHJ1Y3QgRm9vdCopKGNodW5rc1syXSk7Ci0gICAgLy8g
Li4uCi0gIH0KLQotICBJbiBnZW5lcmFsIHRob3VnaCwgaW5kZXBlbmRlbnRfY29tYWxsb2MgaXMg
d29ydGggdXNpbmcgb25seSBmb3IKLSAgbGFyZ2VyIHZhbHVlcyBvZiBuX2VsZW1lbnRzLiBGb3Ig
c21hbGwgdmFsdWVzLCB5b3UgcHJvYmFibHkgd29uJ3QKLSAgZGV0ZWN0IGVub3VnaCBkaWZmZXJl
bmNlIGZyb20gc2VyaWVzIG9mIG1hbGxvYyBjYWxscyB0byBib3RoZXIuCi0KLSAgT3ZlcnVzZSBv
ZiBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gaW5jcmVhc2Ugb3ZlcmFsbCBtZW1vcnkgdXNhZ2Us
Ci0gIHNpbmNlIGl0IGNhbm5vdCByZXVzZSBleGlzdGluZyBub25jb250aWd1b3VzIHNtYWxsIGNo
dW5rcyB0aGF0Ci0gIG1pZ2h0IGJlIGF2YWlsYWJsZSBmb3Igc29tZSBvZiB0aGUgZWxlbWVudHMu
Ci0qLwotI2lmIF9fU1REX0MKLVZvaWRfdCoqIHB1YmxpY19pQ09NQUxMT2Moc2l6ZV90LCBzaXpl
X3QqLCBWb2lkX3QqKik7Ci0jZWxzZQotVm9pZF90KiogcHVibGljX2lDT01BTExPYygpOwotI2Vu
ZGlmCi0KLQotLyoKLSAgcHZhbGxvYyhzaXplX3Qgbik7Ci0gIEVxdWl2YWxlbnQgdG8gdmFsbG9j
KG1pbmltdW0tcGFnZS10aGF0LWhvbGRzKG4pKSwgdGhhdCBpcywKLSAgcm91bmQgdXAgbiB0byBu
ZWFyZXN0IHBhZ2VzaXplLgotICovCi0jaWYgX19TVERfQwotVm9pZF90KiAgcHVibGljX3BWQUxM
T2Moc2l6ZV90KTsKLSNlbHNlCi1Wb2lkX3QqICBwdWJsaWNfcFZBTExPYygpOwotI2VuZGlmCi0K
LS8qCi0gIGNmcmVlKFZvaWRfdCogcCk7Ci0gIEVxdWl2YWxlbnQgdG8gZnJlZShwKS4KLQotICBj
ZnJlZSBpcyBuZWVkZWQvZGVmaW5lZCBvbiBzb21lIHN5c3RlbXMgdGhhdCBwYWlyIGl0IHdpdGgg
Y2FsbG9jLAotICBmb3Igb2RkIGhpc3RvcmljYWwgcmVhc29ucyAoc3VjaCBhczogY2ZyZWUgaXMg
dXNlZCBpbiBleGFtcGxlIAotICBjb2RlIGluIHRoZSBmaXJzdCBlZGl0aW9uIG9mIEsmUikuCi0q
LwotI2lmIF9fU1REX0MKLXZvaWQgICAgIHB1YmxpY19jRlJFZShWb2lkX3QqKTsKLSNlbHNlCi12
b2lkICAgICBwdWJsaWNfY0ZSRWUoKTsKLSNlbmRpZgotCi0vKgotICBtYWxsb2NfdHJpbShzaXpl
X3QgcGFkKTsKLQotICBJZiBwb3NzaWJsZSwgZ2l2ZXMgbWVtb3J5IGJhY2sgdG8gdGhlIHN5c3Rl
bSAodmlhIG5lZ2F0aXZlCi0gIGFyZ3VtZW50cyB0byBzYnJrKSBpZiB0aGVyZSBpcyB1bnVzZWQg
bWVtb3J5IGF0IHRoZSBgaGlnaCcgZW5kIG9mCi0gIHRoZSBtYWxsb2MgcG9vbC4gWW91IGNhbiBj
YWxsIHRoaXMgYWZ0ZXIgZnJlZWluZyBsYXJnZSBibG9ja3Mgb2YKLSAgbWVtb3J5IHRvIHBvdGVu
dGlhbGx5IHJlZHVjZSB0aGUgc3lzdGVtLWxldmVsIG1lbW9yeSByZXF1aXJlbWVudHMKLSAgb2Yg
YSBwcm9ncmFtLiBIb3dldmVyLCBpdCBjYW5ub3QgZ3VhcmFudGVlIHRvIHJlZHVjZSBtZW1vcnku
IFVuZGVyCi0gIHNvbWUgYWxsb2NhdGlvbiBwYXR0ZXJucywgc29tZSBsYXJnZSBmcmVlIGJsb2Nr
cyBvZiBtZW1vcnkgd2lsbCBiZQotICBsb2NrZWQgYmV0d2VlbiB0d28gdXNlZCBjaHVua3MsIHNv
IHRoZXkgY2Fubm90IGJlIGdpdmVuIGJhY2sgdG8KLSAgdGhlIHN5c3RlbS4KLSAgCi0gIFRoZSBg
cGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZnJl
ZQotICB0cmFpbGluZyBzcGFjZSB0byBsZWF2ZSB1bnRyaW1tZWQuIElmIHRoaXMgYXJndW1lbnQg
aXMgemVybywKLSAgb25seSB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIG1haW50YWlu
IGludGVybmFsIGRhdGEKLSAgc3RydWN0dXJlcyB3aWxsIGJlIGxlZnQgKG9uZSBwYWdlIG9yIGxl
c3MpLiBOb24temVybyBhcmd1bWVudHMKLSAgY2FuIGJlIHN1cHBsaWVkIHRvIG1haW50YWluIGVu
b3VnaCB0cmFpbGluZyBzcGFjZSB0byBzZXJ2aWNlCi0gIGZ1dHVyZSBleHBlY3RlZCBhbGxvY2F0
aW9ucyB3aXRob3V0IGhhdmluZyB0byByZS1vYnRhaW4gbWVtb3J5Ci0gIGZyb20gdGhlIHN5c3Rl
bS4KLSAgCi0gIE1hbGxvY190cmltIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSByZWxlYXNlZCBh
bnkgbWVtb3J5LCBlbHNlIDAuCi0gIE9uIHN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCAibmVn
YXRpdmUgc2Jya3MiLCBpdCB3aWxsIGFsd2F5cwotICBycmV0dXJuIDAuCi0qLwotI2lmIF9fU1RE
X0MKLWludCAgICAgIHB1YmxpY19tVFJJbShzaXplX3QpOwotI2Vsc2UKLWludCAgICAgIHB1Ymxp
Y19tVFJJbSgpOwotI2VuZGlmCi0KLS8qCi0gIG1hbGxvY191c2FibGVfc2l6ZShWb2lkX3QqIHAp
OwotCi0gIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB5b3UgY2FuIGFjdHVhbGx5IHVzZSBp
bgotICBhbiBhbGxvY2F0ZWQgY2h1bmssIHdoaWNoIG1heSBiZSBtb3JlIHRoYW4geW91IHJlcXVl
c3RlZCAoYWx0aG91Z2gKLSAgb2Z0ZW4gbm90KSBkdWUgdG8gYWxpZ25tZW50IGFuZCBtaW5pbXVt
IHNpemUgY29uc3RyYWludHMuCi0gIFlvdSBjYW4gdXNlIHRoaXMgbWFueSBieXRlcyB3aXRob3V0
IHdvcnJ5aW5nIGFib3V0Ci0gIG92ZXJ3cml0aW5nIG90aGVyIGFsbG9jYXRlZCBvYmplY3RzLiBU
aGlzIGlzIG5vdCBhIHBhcnRpY3VsYXJseSBncmVhdAotICBwcm9ncmFtbWluZyBwcmFjdGljZS4g
bWFsbG9jX3VzYWJsZV9zaXplIGNhbiBiZSBtb3JlIHVzZWZ1bCBpbgotICBkZWJ1Z2dpbmcgYW5k
IGFzc2VydGlvbnMsIGZvciBleGFtcGxlOgotCi0gIHAgPSBtYWxsb2Mobik7Ci0gIGFzc2VydCht
YWxsb2NfdXNhYmxlX3NpemUocCkgPj0gMjU2KTsKLQotKi8KLSNpZiBfX1NURF9DCi1zaXplX3Qg
ICBwdWJsaWNfbVVTQUJMZShWb2lkX3QqKTsKLSNlbHNlCi1zaXplX3QgICBwdWJsaWNfbVVTQUJM
ZSgpOwotI2VuZGlmCi0KLS8qCi0gIG1hbGxvY19zdGF0cygpOwotICBQcmludHMgb24gc3RkZXJy
IHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCi0gIHZp
YSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0
aGFuCi0gIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwg
YW5kIHRoZSBjdXJyZW50Ci0gIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAo
b3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAotICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMg
dGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKLSAgbnVtYmVyIHJlcXVlc3Rl
ZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAotICBiZWNhdXNl
IG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVk
ZXMKLSAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkg
YmUgZ3JlYXRlciB0aGFuCi0gIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFy
ZSBhbGxvY2F0ZWQuCi0KLSAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVt
IG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgotICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2Fs
bHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucwotICAobm9ybWFsbHkgc2Jy
aykgb3V0c2lkZSBvZiBtYWxsb2MuCi0KLSAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBt
b3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCi0gIE1vcmUgaW5mb3JtYXRpb24g
Y2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCi0KLSovCi0jaWYgX19TVERfQwot
dm9pZCAgICAgcHVibGljX21TVEFUcygpOwotI2Vsc2UKLXZvaWQgICAgIHB1YmxpY19tU1RBVHMo
KTsKLSNlbmRpZgotCi0vKiBtYWxsb3B0IHR1bmluZyBvcHRpb25zICovCi0KLS8qCi0gIE1fTVhG
QVNUIGlzIHRoZSBtYXhpbXVtIHJlcXVlc3Qgc2l6ZSB1c2VkIGZvciAiZmFzdGJpbnMiLCBzcGVj
aWFsIGJpbnMKLSAgdGhhdCBob2xkIHJldHVybmVkIGNodW5rcyB3aXRob3V0IGNvbnNvbGlkYXRp
bmcgdGhlaXIgc3BhY2VzLiBUaGlzCi0gIGVuYWJsZXMgZnV0dXJlIHJlcXVlc3RzIGZvciBjaHVu
a3Mgb2YgdGhlIHNhbWUgc2l6ZSB0byBiZSBoYW5kbGVkCi0gIHZlcnkgcXVpY2tseSwgYnV0IGNh
biBpbmNyZWFzZSBmcmFnbWVudGF0aW9uLCBhbmQgdGh1cyBpbmNyZWFzZSB0aGUKLSAgb3ZlcmFs
bCBtZW1vcnkgZm9vdHByaW50IG9mIGEgcHJvZ3JhbS4KLQotICBUaGlzIG1hbGxvYyBtYW5hZ2Vz
IGZhc3RiaW5zIHZlcnkgY29uc2VydmF0aXZlbHkgeWV0IHN0aWxsCi0gIGVmZmljaWVudGx5LCBz
byBmcmFnbWVudGF0aW9uIGlzIHJhcmVseSBhIHByb2JsZW0gZm9yIHZhbHVlcyBsZXNzCi0gIHRo
YW4gb3IgZXF1YWwgdG8gdGhlIGRlZmF1bHQuICBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUg
b2YgTVhGQVNUCi0gIGlzIDgwLiBZb3Ugd291bGRuJ3Qgd2FudCBpdCBhbnkgaGlnaGVyIHRoYW4g
dGhpcyBhbnl3YXkuICBGYXN0YmlucwotICBhcmUgZGVzaWduZWQgZXNwZWNpYWxseSBmb3IgdXNl
IHdpdGggbWFueSBzbWFsbCBzdHJ1Y3RzLCBvYmplY3RzIG9yCi0gIHN0cmluZ3MgLS0gdGhlIGRl
ZmF1bHQgaGFuZGxlcyBzdHJ1Y3RzL29iamVjdHMvYXJyYXlzIHdpdGggc2l6ZXMgdXAKLSAgdG8g
MTYgNGJ5dGUgZmllbGRzLCBvciBzbWFsbCBzdHJpbmdzIHJlcHJlc2VudGluZyB3b3JkcywgdG9r
ZW5zLAotICBldGMuIFVzaW5nIGZhc3RiaW5zIGZvciBsYXJnZXIgb2JqZWN0cyBub3JtYWxseSB3
b3JzZW5zCi0gIGZyYWdtZW50YXRpb24gd2l0aG91dCBpbXByb3Zpbmcgc3BlZWQuCi0KLSAgTV9N
WEZBU1QgaXMgc2V0IGluIFJFUVVFU1Qgc2l6ZSB1bml0cy4gSXQgaXMgaW50ZXJuYWxseSB1c2Vk
IGluCi0gIGNodW5rc2l6ZSB1bml0cywgd2hpY2ggYWRkcyBwYWRkaW5nIGFuZCBhbGlnbm1lbnQu
ICBZb3UgY2FuIHJlZHVjZQotICBNX01YRkFTVCB0byAwIHRvIGRpc2FibGUgYWxsIHVzZSBvZiBm
YXN0Ymlucy4gIFRoaXMgY2F1c2VzIHRoZSBtYWxsb2MKLSAgYWxnb3JpdGhtIHRvIGJlIGEgY2xv
c2VyIGFwcHJveGltYXRpb24gb2YgZmlmby1iZXN0LWZpdCBpbiBhbGwgY2FzZXMsCi0gIG5vdCBq
dXN0IGZvciBsYXJnZXIgcmVxdWVzdHMsIGJ1dCB3aWxsIGdlbmVyYWxseSBjYXVzZSBpdCB0byBi
ZQotICBzbG93ZXIuCi0qLwotCi0KLS8qIE1fTVhGQVNUIGlzIGEgc3RhbmRhcmQgU1ZJRC9YUEcg
dHVuaW5nIG9wdGlvbiwgdXN1YWxseSBsaXN0ZWQgaW4gbWFsbG9jLmggKi8KLSNpZm5kZWYgTV9N
WEZBU1QKLSNkZWZpbmUgTV9NWEZBU1QgICAgICAgICAgICAxICAgIAotI2VuZGlmCi0KLSNpZm5k
ZWYgREVGQVVMVF9NWEZBU1QKLSNkZWZpbmUgREVGQVVMVF9NWEZBU1QgICAgIDY0Ci0jZW5kaWYK
LQotCi0vKgotICBNX1RSSU1fVEhSRVNIT0xEIGlzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiB1bnVz
ZWQgdG9wLW1vc3QgbWVtb3J5Ci0gIHRvIGtlZXAgYmVmb3JlIHJlbGVhc2luZyB2aWEgbWFsbG9j
X3RyaW0gaW4gZnJlZSgpLgotCi0gIEF1dG9tYXRpYyB0cmltbWluZyBpcyBtYWlubHkgdXNlZnVs
IGluIGxvbmctbGl2ZWQgcHJvZ3JhbXMuCi0gIEJlY2F1c2UgdHJpbW1pbmcgdmlhIHNicmsgY2Fu
IGJlIHNsb3cgb24gc29tZSBzeXN0ZW1zLCBhbmQgY2FuCi0gIHNvbWV0aW1lcyBiZSB3YXN0ZWZ1
bCAoaW4gY2FzZXMgd2hlcmUgcHJvZ3JhbXMgaW1tZWRpYXRlbHkKLSAgYWZ0ZXJ3YXJkIGFsbG9j
YXRlIG1vcmUgbGFyZ2UgY2h1bmtzKSB0aGUgdmFsdWUgc2hvdWxkIGJlIGhpZ2gKLSAgZW5vdWdo
IHNvIHRoYXQgeW91ciBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3b3VsZCBpbXByb3ZlIGJ5
Ci0gIHJlbGVhc2luZyB0aGlzIG11Y2ggbWVtb3J5LgotCi0gIFRoZSB0cmltIHRocmVzaG9sZCBh
bmQgdGhlIG1tYXAgY29udHJvbCBwYXJhbWV0ZXJzIChzZWUgYmVsb3cpCi0gIGNhbiBiZSB0cmFk
ZWQgb2ZmIHdpdGggb25lIGFub3RoZXIuIFRyaW1taW5nIGFuZCBtbWFwcGluZyBhcmUKLSAgdHdv
IGRpZmZlcmVudCB3YXlzIG9mIHJlbGVhc2luZyB1bnVzZWQgbWVtb3J5IGJhY2sgdG8gdGhlCi0g
IHN5c3RlbS4gQmV0d2VlbiB0aGVzZSB0d28sIGl0IGlzIG9mdGVuIHBvc3NpYmxlIHRvIGtlZXAK
LSAgc3lzdGVtLWxldmVsIGRlbWFuZHMgb2YgYSBsb25nLWxpdmVkIHByb2dyYW0gZG93biB0byBh
IGJhcmUKLSAgbWluaW11bS4gRm9yIGV4YW1wbGUsIGluIG9uZSB0ZXN0IHN1aXRlIG9mIHNlc3Np
b25zIG1lYXN1cmluZwotICB0aGUgWEY4NiBYIHNlcnZlciBvbiBMaW51eCwgdXNpbmcgYSB0cmlt
IHRocmVzaG9sZCBvZiAxMjhLIGFuZCBhCi0gIG1tYXAgdGhyZXNob2xkIG9mIDE5MksgbGVkIHRv
IG5lYXItbWluaW1hbCBsb25nIHRlcm0gcmVzb3VyY2UKLSAgY29uc3VtcHRpb24uCi0KLSAgSWYg
eW91IGFyZSB1c2luZyB0aGlzIG1hbGxvYyBpbiBhIGxvbmctbGl2ZWQgcHJvZ3JhbSwgaXQgc2hv
dWxkCi0gIHBheSB0byBleHBlcmltZW50IHdpdGggdGhlc2UgdmFsdWVzLiAgQXMgYSByb3VnaCBn
dWlkZSwgeW91Ci0gIG1pZ2h0IHNldCB0byBhIHZhbHVlIGNsb3NlIHRvIHRoZSBhdmVyYWdlIHNp
emUgb2YgYSBwcm9jZXNzCi0gIChwcm9ncmFtKSBydW5uaW5nIG9uIHlvdXIgc3lzdGVtLiAgUmVs
ZWFzaW5nIHRoaXMgbXVjaCBtZW1vcnkKLSAgd291bGQgYWxsb3cgc3VjaCBhIHByb2Nlc3MgdG8g
cnVuIGluIG1lbW9yeS4gIEdlbmVyYWxseSwgaXQncwotICB3b3J0aCBpdCB0byB0dW5lIGZvciB0
cmltbWluZyByYXRoZXIgdGhhbSBtZW1vcnkgbWFwcGluZyB3aGVuIGEKLSAgcHJvZ3JhbSB1bmRl
cmdvZXMgcGhhc2VzIHdoZXJlIHNldmVyYWwgbGFyZ2UgY2h1bmtzIGFyZQotICBhbGxvY2F0ZWQg
YW5kIHJlbGVhc2VkIGluIHdheXMgdGhhdCBjYW4gcmV1c2UgZWFjaCBvdGhlcidzCi0gIHN0b3Jh
Z2UsIHBlcmhhcHMgbWl4ZWQgd2l0aCBwaGFzZXMgd2hlcmUgdGhlcmUgYXJlIG5vIHN1Y2gKLSAg
Y2h1bmtzIGF0IGFsbC4gIEFuZCBpbiB3ZWxsLWJlaGF2ZWQgbG9uZy1saXZlZCBwcm9ncmFtcywK
LSAgY29udHJvbGxpbmcgcmVsZWFzZSBvZiBsYXJnZSBibG9ja3MgdmlhIHRyaW1taW5nIHZlcnN1
cyBtYXBwaW5nCi0gIGlzIHVzdWFsbHkgZmFzdGVyLgotCi0gIEhvd2V2ZXIsIGluIG1vc3QgcHJv
Z3JhbXMsIHRoZXNlIHBhcmFtZXRlcnMgc2VydmUgbWFpbmx5IGFzCi0gIHByb3RlY3Rpb24gYWdh
aW5zdCB0aGUgc3lzdGVtLWxldmVsIGVmZmVjdHMgb2YgY2FycnlpbmcgYXJvdW5kCi0gIG1hc3Np
dmUgYW1vdW50cyBvZiB1bm5lZWRlZCBtZW1vcnkuIFNpbmNlIGZyZXF1ZW50IGNhbGxzIHRvCi0g
IHNicmssIG1tYXAsIGFuZCBtdW5tYXAgb3RoZXJ3aXNlIGRlZ3JhZGUgcGVyZm9ybWFuY2UsIHRo
ZSBkZWZhdWx0Ci0gIHBhcmFtZXRlcnMgYXJlIHNldCB0byByZWxhdGl2ZWx5IGhpZ2ggdmFsdWVz
IHRoYXQgc2VydmUgb25seSBhcwotICBzYWZlZ3VhcmRzLgotCi0gIFRoZSB0cmltIHZhbHVlIG11
c3QgYmUgZ3JlYXRlciB0aGFuIHBhZ2Ugc2l6ZSB0byBoYXZlIGFueSB1c2VmdWwKLSAgZWZmZWN0
LiAgVG8gZGlzYWJsZSB0cmltbWluZyBjb21wbGV0ZWx5LCB5b3UgY2FuIHNldCB0byAKLSAgKHVu
c2lnbmVkIGxvbmcpKC0xKQotCi0gIFRyaW0gc2V0dGluZ3MgaW50ZXJhY3Qgd2l0aCBmYXN0Ymlu
IChNWEZBU1QpIHNldHRpbmdzOiBVbmxlc3MKLSAgVFJJTV9GQVNUQklOUyBpcyBkZWZpbmVkLCBh
dXRvbWF0aWMgdHJpbW1pbmcgbmV2ZXIgdGFrZXMgcGxhY2UgdXBvbgotICBmcmVlaW5nIGEgY2h1
bmsgd2l0aCBzaXplIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNWEZBU1QuIFRyaW1taW5nIGlzCi0g
IGluc3RlYWQgZGVsYXllZCB1bnRpbCBzdWJzZXF1ZW50IGZyZWVpbmcgb2YgbGFyZ2VyIGNodW5r
cy4gSG93ZXZlciwKLSAgeW91IGNhbiBzdGlsbCBmb3JjZSBhbiBhdHRlbXB0ZWQgdHJpbSBieSBj
YWxsaW5nIG1hbGxvY190cmltLgotCi0gIEFsc28sIHRyaW1taW5nIGlzIG5vdCBnZW5lcmFsbHkg
cG9zc2libGUgaW4gY2FzZXMgd2hlcmUKLSAgdGhlIG1haW4gYXJlbmEgaXMgb2J0YWluZWQgdmlh
IG1tYXAuCi0KLSAgTm90ZSB0aGF0IHRoZSB0cmljayBzb21lIHBlb3BsZSB1c2Ugb2YgbWFsbG9j
aW5nIGEgaHVnZSBzcGFjZSBhbmQKLSAgdGhlbiBmcmVlaW5nIGl0IGF0IHByb2dyYW0gc3RhcnR1
cCwgaW4gYW4gYXR0ZW1wdCB0byByZXNlcnZlIHN5c3RlbQotICBtZW1vcnksIGRvZXNuJ3QgaGF2
ZSB0aGUgaW50ZW5kZWQgZWZmZWN0IHVuZGVyIGF1dG9tYXRpYyB0cmltbWluZywKLSAgc2luY2Ug
dGhhdCBtZW1vcnkgd2lsbCBpbW1lZGlhdGVseSBiZSByZXR1cm5lZCB0byB0aGUgc3lzdGVtLgot
Ki8KLQotI2RlZmluZSBNX1RSSU1fVEhSRVNIT0xEICAgICAgIC0xCi0KLSNpZm5kZWYgREVGQVVM
VF9UUklNX1RIUkVTSE9MRAotI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEICgyNTYgKiAx
MDI0KQotI2VuZGlmCi0KLS8qCi0gIE1fVE9QX1BBRCBpcyB0aGUgYW1vdW50IG9mIGV4dHJhIGBw
YWRkaW5nJyBzcGFjZSB0byBhbGxvY2F0ZSBvcgotICByZXRhaW4gd2hlbmV2ZXIgc2JyayBpcyBj
YWxsZWQuIEl0IGlzIHVzZWQgaW4gdHdvIHdheXMgaW50ZXJuYWxseToKLQotICAqIFdoZW4gc2Jy
ayBpcyBjYWxsZWQgdG8gZXh0ZW5kIHRoZSB0b3Agb2YgdGhlIGFyZW5hIHRvIHNhdGlzZnkKLSAg
YSBuZXcgbWFsbG9jIHJlcXVlc3QsIHRoaXMgbXVjaCBwYWRkaW5nIGlzIGFkZGVkIHRvIHRoZSBz
YnJrCi0gIHJlcXVlc3QuCi0KLSAgKiBXaGVuIG1hbGxvY190cmltIGlzIGNhbGxlZCBhdXRvbWF0
aWNhbGx5IGZyb20gZnJlZSgpLAotICBpdCBpcyB1c2VkIGFzIHRoZSBgcGFkJyBhcmd1bWVudC4K
LQotICBJbiBib3RoIGNhc2VzLCB0aGUgYWN0dWFsIGFtb3VudCBvZiBwYWRkaW5nIGlzIHJvdW5k
ZWQKLSAgc28gdGhhdCB0aGUgZW5kIG9mIHRoZSBhcmVuYSBpcyBhbHdheXMgYSBzeXN0ZW0gcGFn
ZSBib3VuZGFyeS4KLQotICBUaGUgbWFpbiByZWFzb24gZm9yIHVzaW5nIHBhZGRpbmcgaXMgdG8g
YXZvaWQgY2FsbGluZyBzYnJrIHNvCi0gIG9mdGVuLiBIYXZpbmcgZXZlbiBhIHNtYWxsIHBhZCBn
cmVhdGx5IHJlZHVjZXMgdGhlIGxpa2VsaWhvb2QKLSAgdGhhdCBuZWFybHkgZXZlcnkgbWFsbG9j
IHJlcXVlc3QgZHVyaW5nIHByb2dyYW0gc3RhcnQtdXAgKG9yCi0gIGFmdGVyIHRyaW1taW5nKSB3
aWxsIGludm9rZSBzYnJrLCB3aGljaCBuZWVkbGVzc2x5IHdhc3RlcwotICB0aW1lLgotCi0gIEF1
dG9tYXRpYyByb3VuZGluZy11cCB0byBwYWdlLXNpemUgdW5pdHMgaXMgbm9ybWFsbHkgc3VmZmlj
aWVudAotICB0byBhdm9pZCBtZWFzdXJhYmxlIG92ZXJoZWFkLCBzbyB0aGUgZGVmYXVsdCBpcyAw
LiAgSG93ZXZlciwgaW4KLSAgc3lzdGVtcyB3aGVyZSBzYnJrIGlzIHJlbGF0aXZlbHkgc2xvdywg
aXQgY2FuIHBheSB0byBpbmNyZWFzZQotICB0aGlzIHZhbHVlLCBhdCB0aGUgZXhwZW5zZSBvZiBj
YXJyeWluZyBhcm91bmQgbW9yZSBtZW1vcnkgdGhhbgotICB0aGUgcHJvZ3JhbSBuZWVkcy4KLSov
Ci0KLSNkZWZpbmUgTV9UT1BfUEFEICAgICAgICAgICAgICAtMgotCi0jaWZuZGVmIERFRkFVTFRf
VE9QX1BBRAotI2RlZmluZSBERUZBVUxUX1RPUF9QQUQgICAgICAgICgwKQotI2VuZGlmCi0KLS8q
Ci0gIE1fTU1BUF9USFJFU0hPTEQgaXMgdGhlIHJlcXVlc3Qgc2l6ZSB0aHJlc2hvbGQgZm9yIHVz
aW5nIG1tYXAoKQotICB0byBzZXJ2aWNlIGEgcmVxdWVzdC4gUmVxdWVzdHMgb2YgYXQgbGVhc3Qg
dGhpcyBzaXplIHRoYXQgY2Fubm90Ci0gIGJlIGFsbG9jYXRlZCB1c2luZyBhbHJlYWR5LWV4aXN0
aW5nIHNwYWNlIHdpbGwgYmUgc2VydmljZWQgdmlhIG1tYXAuCi0gIChJZiBlbm91Z2ggbm9ybWFs
IGZyZWVkIHNwYWNlIGFscmVhZHkgZXhpc3RzIGl0IGlzIHVzZWQgaW5zdGVhZC4pCi0KLSAgVXNp
bmcgbW1hcCBzZWdyZWdhdGVzIHJlbGF0aXZlbHkgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSBzbyB0
aGF0Ci0gIHRoZXkgY2FuIGJlIGluZGl2aWR1YWxseSBvYnRhaW5lZCBhbmQgcmVsZWFzZWQgZnJv
bSB0aGUgaG9zdAotICBzeXN0ZW0uIEEgcmVxdWVzdCBzZXJ2aWNlZCB0aHJvdWdoIG1tYXAgaXMg
bmV2ZXIgcmV1c2VkIGJ5IGFueQotICBvdGhlciByZXF1ZXN0IChhdCBsZWFzdCBub3QgZGlyZWN0
bHk7IHRoZSBzeXN0ZW0gbWF5IGp1c3Qgc28KLSAgaGFwcGVuIHRvIHJlbWFwIHN1Y2Nlc3NpdmUg
cmVxdWVzdHMgdG8gdGhlIHNhbWUgbG9jYXRpb25zKS4KLQotICBTZWdyZWdhdGluZyBzcGFjZSBp
biB0aGlzIHdheSBoYXMgdGhlIGJlbmVmaXRzIHRoYXQ6Ci0KLSAgIDEuIE1tYXBwZWQgc3BhY2Ug
Y2FuIEFMV0FZUyBiZSBpbmRpdmlkdWFsbHkgcmVsZWFzZWQgYmFjayAKLSAgICAgIHRvIHRoZSBz
eXN0ZW0sIHdoaWNoIGhlbHBzIGtlZXAgdGhlIHN5c3RlbSBsZXZlbCBtZW1vcnkgCi0gICAgICBk
ZW1hbmRzIG9mIGEgbG9uZy1saXZlZCBwcm9ncmFtIGxvdy4gCi0gICAyLiBNYXBwZWQgbWVtb3J5
IGNhbiBuZXZlciBiZWNvbWUgYGxvY2tlZCcgYmV0d2VlbgotICAgICAgb3RoZXIgY2h1bmtzLCBh
cyBjYW4gaGFwcGVuIHdpdGggbm9ybWFsbHkgYWxsb2NhdGVkIGNodW5rcywgd2hpY2gKLSAgICAg
IG1lYW5zIHRoYXQgZXZlbiB0cmltbWluZyB2aWEgbWFsbG9jX3RyaW0gd291bGQgbm90IHJlbGVh
c2UgdGhlbS4KLSAgIDMuIE9uIHNvbWUgc3lzdGVtcyB3aXRoICJob2xlcyIgaW4gYWRkcmVzcyBz
cGFjZXMsIG1tYXAgY2FuIG9idGFpbgotICAgICAgbWVtb3J5IHRoYXQgc2JyayBjYW5ub3QuCi0K
LSAgSG93ZXZlciwgaXQgaGFzIHRoZSBkaXNhZHZhbnRhZ2VzIHRoYXQ6Ci0KLSAgIDEuIFRoZSBz
cGFjZSBjYW5ub3QgYmUgcmVjbGFpbWVkLCBjb25zb2xpZGF0ZWQsIGFuZCB0aGVuCi0gICAgICB1
c2VkIHRvIHNlcnZpY2UgbGF0ZXIgcmVxdWVzdHMsIGFzIGhhcHBlbnMgd2l0aCBub3JtYWwgY2h1
bmtzLgotICAgMi4gSXQgY2FuIGxlYWQgdG8gbW9yZSB3YXN0YWdlIGJlY2F1c2Ugb2YgbW1hcCBw
YWdlIGFsaWdubWVudAotICAgICAgcmVxdWlyZW1lbnRzCi0gICAzLiBJdCBjYXVzZXMgbWFsbG9j
IHBlcmZvcm1hbmNlIHRvIGJlIG1vcmUgZGVwZW5kZW50IG9uIGhvc3QKLSAgICAgIHN5c3RlbSBt
ZW1vcnkgbWFuYWdlbWVudCBzdXBwb3J0IHJvdXRpbmVzIHdoaWNoIG1heSB2YXJ5IGluCi0gICAg
ICBpbXBsZW1lbnRhdGlvbiBxdWFsaXR5IGFuZCBtYXkgaW1wb3NlIGFyYml0cmFyeQotICAgICAg
bGltaXRhdGlvbnMuIEdlbmVyYWxseSwgc2VydmljaW5nIGEgcmVxdWVzdCB2aWEgbm9ybWFsCi0g
ICAgICBtYWxsb2Mgc3RlcHMgaXMgZmFzdGVyIHRoYW4gZ29pbmcgdGhyb3VnaCBhIHN5c3RlbSdz
IG1tYXAuCi0KLSAgVGhlIGFkdmFudGFnZXMgb2YgbW1hcCBuZWFybHkgYWx3YXlzIG91dHdlaWdo
IGRpc2FkdmFudGFnZXMgZm9yCi0gICJsYXJnZSIgY2h1bmtzLCBidXQgdGhlIHZhbHVlIG9mICJs
YXJnZSIgdmFyaWVzIGFjcm9zcyBzeXN0ZW1zLiAgVGhlCi0gIGRlZmF1bHQgaXMgYW4gZW1waXJp
Y2FsbHkgZGVyaXZlZCB2YWx1ZSB0aGF0IHdvcmtzIHdlbGwgaW4gbW9zdAotICBzeXN0ZW1zLgot
Ki8KLQotI2RlZmluZSBNX01NQVBfVEhSRVNIT0xEICAgICAgLTMKLQotI2lmbmRlZiBERUZBVUxU
X01NQVBfVEhSRVNIT0xECi0jZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKDI1NiAqIDEw
MjQpCi0jZW5kaWYKLQotLyoKLSAgTV9NTUFQX01BWCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2Yg
cmVxdWVzdHMgdG8gc2ltdWx0YW5lb3VzbHkKLSAgc2VydmljZSB1c2luZyBtbWFwLiBUaGlzIHBh
cmFtZXRlciBleGlzdHMgYmVjYXVzZQotLiBTb21lIHN5c3RlbXMgaGF2ZSBhIGxpbWl0ZWQgbnVt
YmVyIG9mIGludGVybmFsIHRhYmxlcyBmb3IKLSAgdXNlIGJ5IG1tYXAsIGFuZCB1c2luZyBtb3Jl
IHRoYW4gYSBmZXcgb2YgdGhlbSBtYXkgZGVncmFkZQotICBwZXJmb3JtYW5jZS4KLQotICBUaGUg
ZGVmYXVsdCBpcyBzZXQgdG8gYSB2YWx1ZSB0aGF0IHNlcnZlcyBvbmx5IGFzIGEgc2FmZWd1YXJk
LgotICBTZXR0aW5nIHRvIDAgZGlzYWJsZXMgdXNlIG9mIG1tYXAgZm9yIHNlcnZpY2luZyBsYXJn
ZSByZXF1ZXN0cy4gIElmCi0gIEhBVkVfTU1BUCBpcyBub3Qgc2V0LCB0aGUgZGVmYXVsdCB2YWx1
ZSBpcyAwLCBhbmQgYXR0ZW1wdHMgdG8gc2V0IGl0Ci0gIHRvIG5vbi16ZXJvIHZhbHVlcyBpbiBt
YWxsb3B0IHdpbGwgZmFpbC4KLSovCi0KLSNkZWZpbmUgTV9NTUFQX01BWCAgICAgICAgICAgICAt
NAotCi0jaWZuZGVmIERFRkFVTFRfTU1BUF9NQVgKLSNpZiBIQVZFX01NQVAKLSNkZWZpbmUgREVG
QVVMVF9NTUFQX01BWCAgICAgICAoNjU1MzYpCi0jZWxzZQotI2RlZmluZSBERUZBVUxUX01NQVBf
TUFYICAgICAgICgwKQotI2VuZGlmCi0jZW5kaWYKLQotLyogCi0gID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
ICBUbyBtYWtlIGEgZnVsbHkgY3VzdG9taXphYmxlIG1hbGxvYy5oIGhlYWRlciBmaWxlLCBjdXQg
ZXZlcnl0aGluZwotICBhYm92ZSB0aGlzIGxpbmUsIHB1dCBpbnRvIGZpbGUgbWFsbG9jLmgsIGVk
aXQgdG8gc3VpdCwgYW5kICNpbmNsdWRlIGl0IAotICBvbiB0aGUgbmV4dCBsaW5lLCBhcyB3ZWxs
IGFzIGluIHByb2dyYW1zIHRoYXQgdXNlIHRoaXMgbWFsbG9jLgotICA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LSovCi0KLS8qICNpbmNsdWRlICJtYWxsb2MuaCIgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIHB1YmxpYyB3cmFwcGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBV
U0VfUFVCTElDX01BTExPQ19XUkFQUEVSUwotCi0vKiBEZWNsYXJlIGFsbCByb3V0aW5lcyBhcyBp
bnRlcm5hbCAqLwotI2lmIF9fU1REX0MKLXN0YXRpYyBWb2lkX3QqICBtQUxMT2Moc2l6ZV90KTsK
LXN0YXRpYyB2b2lkICAgICBmUkVlKFZvaWRfdCopOwotc3RhdGljIFZvaWRfdCogIHJFQUxMT2Mo
Vm9pZF90Kiwgc2l6ZV90KTsKLXN0YXRpYyBWb2lkX3QqICBtRU1BTElHbihzaXplX3QsIHNpemVf
dCk7Ci1zdGF0aWMgVm9pZF90KiAgdkFMTE9jKHNpemVfdCk7Ci1zdGF0aWMgVm9pZF90KiAgcFZB
TExPYyhzaXplX3QpOwotc3RhdGljIFZvaWRfdCogIGNBTExPYyhzaXplX3QsIHNpemVfdCk7Ci1z
dGF0aWMgVm9pZF90KiogaUNBTExPYyhzaXplX3QsIHNpemVfdCwgVm9pZF90KiopOwotc3RhdGlj
IFZvaWRfdCoqIGlDT01BTExPYyhzaXplX3QsIHNpemVfdCosIFZvaWRfdCoqKTsKLXN0YXRpYyB2
b2lkICAgICBjRlJFZShWb2lkX3QqKTsKLXN0YXRpYyBpbnQgICAgICBtVFJJbShzaXplX3QpOwot
c3RhdGljIHNpemVfdCAgIG1VU0FCTGUoVm9pZF90Kik7Ci1zdGF0aWMgdm9pZCAgICAgbVNUQVRz
KCk7Ci1zdGF0aWMgaW50ICAgICAgbUFMTE9QdChpbnQsIGludCk7Ci1zdGF0aWMgc3RydWN0IG1h
bGxpbmZvIG1BTExJTkZvKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBWb2lkX3QqICBtQUxMT2MoKTsK
LXN0YXRpYyB2b2lkICAgICBmUkVlKCk7Ci1zdGF0aWMgVm9pZF90KiAgckVBTExPYygpOwotc3Rh
dGljIFZvaWRfdCogIG1FTUFMSUduKCk7Ci1zdGF0aWMgVm9pZF90KiAgdkFMTE9jKCk7Ci1zdGF0
aWMgVm9pZF90KiAgcFZBTExPYygpOwotc3RhdGljIFZvaWRfdCogIGNBTExPYygpOwotc3RhdGlj
IFZvaWRfdCoqIGlDQUxMT2MoKTsKLXN0YXRpYyBWb2lkX3QqKiBpQ09NQUxMT2MoKTsKLXN0YXRp
YyB2b2lkICAgICBjRlJFZSgpOwotc3RhdGljIGludCAgICAgIG1UUkltKCk7Ci1zdGF0aWMgc2l6
ZV90ICAgbVVTQUJMZSgpOwotc3RhdGljIHZvaWQgICAgIG1TVEFUcygpOwotc3RhdGljIGludCAg
ICAgIG1BTExPUHQoKTsKLXN0YXRpYyBzdHJ1Y3QgbWFsbGluZm8gbUFMTElORm8oKTsKLSNlbmRp
ZgotCi0vKgotICBNQUxMT0NfUFJFQUNUSU9OIGFuZCBNQUxMT0NfUE9TVEFDVElPTiBzaG91bGQg
YmUKLSAgZGVmaW5lZCB0byByZXR1cm4gMCBvbiBzdWNjZXNzLCBhbmQgbm9uemVybyBvbiBmYWls
dXJlLgotICBUaGUgcmV0dXJuIHZhbHVlIG9mIE1BTExPQ19QT1NUQUNUSU9OIGlzIGN1cnJlbnRs
eSBpZ25vcmVkCi0gIGluIHdyYXBwZXIgZnVuY3Rpb25zIHNpbmNlIHRoZXJlIGlzIG5vIHJlYXNv
bmFibGUgZGVmYXVsdAotICBhY3Rpb24gdG8gdGFrZSBvbiBmYWlsdXJlLgotKi8KLQotCi0jaWZk
ZWYgVVNFX01BTExPQ19MT0NLCi0KLSNpZmRlZiBXSU4zMgotCi1zdGF0aWMgaW50IG1BTExPQ19N
VVRFeDsKLSNkZWZpbmUgTUFMTE9DX1BSRUFDVElPTiAgIHNsd2FpdCgmbUFMTE9DX01VVEV4KQot
I2RlZmluZSBNQUxMT0NfUE9TVEFDVElPTiAgc2xyZWxlYXNlKCZtQUxMT0NfTVVURXgpCi0KLSNl
bHNlCi0KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0KLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgbUFM
TE9DX01VVEV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKLQotI2RlZmluZSBNQUxMT0Nf
UFJFQUNUSU9OICAgcHRocmVhZF9tdXRleF9sb2NrKCZtQUxMT0NfTVVURXgpCi0jZGVmaW5lIE1B
TExPQ19QT1NUQUNUSU9OICBwdGhyZWFkX211dGV4X3VubG9jaygmbUFMTE9DX01VVEV4KQotCi0j
ZW5kaWYgLyogVVNFX01BTExPQ19MT0NLICovCi0KLSNlbHNlCi0KLS8qIFN1YnN0aXR1dGUgYW55
dGhpbmcgeW91IGxpa2UgZm9yIHRoZXNlICovCi0KLSNkZWZpbmUgTUFMTE9DX1BSRUFDVElPTiAg
ICgwKQotI2RlZmluZSBNQUxMT0NfUE9TVEFDVElPTiAgKDApCi0KLSNlbmRpZgotCi1Wb2lkX3Qq
IHB1YmxpY19tQUxMT2Moc2l6ZV90IGJ5dGVzKSB7Ci0gIFZvaWRfdCogbTsKLSAgaWYgKE1BTExP
Q19QUkVBQ1RJT04gIT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0gIG0gPSBtQUxMT2MoYnl0
ZXMpOwotICBpZiAoTUFMTE9DX1BPU1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwot
fQotCi12b2lkIHB1YmxpY19mUkVlKFZvaWRfdCogbSkgewotICBpZiAoTUFMTE9DX1BSRUFDVElP
TiAhPSAwKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGZSRWUobSk7Ci0gIGlmIChNQUxMT0NfUE9T
VEFDVElPTiAhPSAwKSB7Ci0gIH0KLX0KLQotVm9pZF90KiBwdWJsaWNfckVBTExPYyhWb2lkX3Qq
IG0sIHNpemVfdCBieXRlcykgewotICBpZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAg
cmV0dXJuIDA7Ci0gIH0KLSAgbSA9IHJFQUxMT2MobSwgYnl0ZXMpOwotICBpZiAoTUFMTE9DX1BP
U1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi1Wb2lkX3QqIHB1YmxpY19t
RU1BTElHbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKLSAgVm9pZF90KiBtOwot
ICBpZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgbSA9
IG1FTUFMSUduKGFsaWdubWVudCwgYnl0ZXMpOwotICBpZiAoTUFMTE9DX1BPU1RBQ1RJT04gIT0g
MCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi1Wb2lkX3QqIHB1YmxpY192QUxMT2Moc2l6ZV90
IGJ5dGVzKSB7Ci0gIFZvaWRfdCogbTsKLSAgaWYgKE1BTExPQ19QUkVBQ1RJT04gIT0gMCkgewot
ICAgIHJldHVybiAwOwotICB9Ci0gIG0gPSB2QUxMT2MoYnl0ZXMpOwotICBpZiAoTUFMTE9DX1BP
U1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi1Wb2lkX3QqIHB1YmxpY19w
VkFMTE9jKHNpemVfdCBieXRlcykgewotICBWb2lkX3QqIG07Ci0gIGlmIChNQUxMT0NfUFJFQUNU
SU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBtID0gcFZBTExPYyhieXRlcyk7Ci0g
IGlmIChNQUxMT0NfUE9TVEFDVElPTiAhPSAwKSB7Ci0gIH0KLSAgcmV0dXJuIG07Ci19Ci0KLVZv
aWRfdCogcHVibGljX2NBTExPYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1fc2l6ZSkgewotICBWb2lk
X3QqIG07Ci0gIGlmIChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsKLSAg
fQotICBtID0gY0FMTE9jKG4sIGVsZW1fc2l6ZSk7Ci0gIGlmIChNQUxMT0NfUE9TVEFDVElPTiAh
PSAwKSB7Ci0gIH0KLSAgcmV0dXJuIG07Ci19Ci0KLQotVm9pZF90KiogcHVibGljX2lDQUxMT2Mo
c2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUsIFZvaWRfdCoqIGNodW5rcykgewotICBWb2lkX3Qq
KiBtOwotICBpZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0K
LSAgbSA9IGlDQUxMT2MobiwgZWxlbV9zaXplLCBjaHVua3MpOwotICBpZiAoTUFMTE9DX1BPU1RB
Q1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi1Wb2lkX3QqKiBwdWJsaWNfaUNP
TUFMTE9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZXNbXSwgVm9pZF90KiogY2h1bmtzKSB7Ci0gIFZv
aWRfdCoqIG07Ci0gIGlmIChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsK
LSAgfQotICBtID0gaUNPTUFMTE9jKG4sIHNpemVzLCBjaHVua3MpOwotICBpZiAoTUFMTE9DX1BP
U1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi12b2lkIHB1YmxpY19jRlJF
ZShWb2lkX3QqIG0pIHsKLSAgaWYgKE1BTExPQ19QUkVBQ1RJT04gIT0gMCkgewotICAgIHJldHVy
bjsKLSAgfQotICBjRlJFZShtKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9IDApIHsKLSAg
fQotfQotCi1pbnQgcHVibGljX21UUkltKHNpemVfdCBzKSB7Ci0gIGludCByZXN1bHQ7Ci0gIGlm
IChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICByZXN1bHQg
PSBtVFJJbShzKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9IDApIHsKLSAgfQotICByZXR1
cm4gcmVzdWx0OwotfQotCi1zaXplX3QgcHVibGljX21VU0FCTGUoVm9pZF90KiBtKSB7Ci0gIHNp
emVfdCByZXN1bHQ7Ci0gIGlmIChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4g
MDsKLSAgfQotICByZXN1bHQgPSBtVVNBQkxlKG0pOwotICBpZiAoTUFMTE9DX1BPU1RBQ1RJT04g
IT0gMCkgewotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgcHVibGljX21TVEFUcygp
IHsKLSAgaWYgKE1BTExPQ19QUkVBQ1RJT04gIT0gMCkgewotICAgIHJldHVybjsKLSAgfQotICBt
U1RBVHMoKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9IDApIHsKLSAgfQotfQotCi1zdHJ1
Y3QgbWFsbGluZm8gcHVibGljX21BTExJTkZvKCkgewotICBzdHJ1Y3QgbWFsbGluZm8gbTsKLSAg
aWYgKE1BTExPQ19QUkVBQ1RJT04gIT0gMCkgewotICAgIHN0cnVjdCBtYWxsaW5mbyBubSA9IHsg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OwotICAgIHJldHVybiBubTsKLSAgfQotICBt
ID0gbUFMTElORm8oKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9IDApIHsKLSAgfQotICBy
ZXR1cm4gbTsKLX0KLQotaW50IHB1YmxpY19tQUxMT1B0KGludCBwLCBpbnQgdikgewotICBpbnQg
cmVzdWx0OwotICBpZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0g
IH0KLSAgcmVzdWx0ID0gbUFMTE9QdChwLCB2KTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9
IDApIHsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0jZW5kaWYKLQotCi0KLS8qIC0tLS0t
LS0tLS0tLS0gT3B0aW9uYWwgdmVyc2lvbnMgb2YgbWVtY29weSAtLS0tLS0tLS0tLS0tLS0tICov
Ci0KLQotI2lmIFVTRV9NRU1DUFkKLQotLyogCi0gIE5vdGU6IG1lbWNweSBpcyBPTkxZIGludm9r
ZWQgd2l0aCBub24tb3ZlcmxhcHBpbmcgcmVnaW9ucywKLSAgc28gdGhlICh1c3VhbGx5IHNsb3dl
cikgbWVtbW92ZSBpcyBub3QgbmVlZGVkLgotKi8KLQotI2RlZmluZSBNQUxMT0NfQ09QWShkZXN0
LCBzcmMsIG5ieXRlcykgIG1lbWNweShkZXN0LCBzcmMsIG5ieXRlcykKLSNkZWZpbmUgTUFMTE9D
X1pFUk8oZGVzdCwgbmJ5dGVzKSAgICAgICBtZW1zZXQoZGVzdCwgMCwgICBuYnl0ZXMpCi0KLSNl
bHNlIC8qICFVU0VfTUVNQ1BZICovCi0KLS8qIFVzZSBEdWZmJ3MgZGV2aWNlIGZvciBnb29kIHpl
cm9pbmcvY29weWluZyBwZXJmb3JtYW5jZS4gKi8KLQotI2RlZmluZSBNQUxMT0NfWkVSTyhjaGFy
cCwgbmJ5dGVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBJTlRFUk5BTF9TSVpFX1QqIG16cCA9IChJTlRFUk5B
TF9TSVpFX1QqKShjaGFycCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBDSFVOS19T
SVpFX1QgIG1jdG1wID0gKG5ieXRlcykvc2l6ZW9mKElOVEVSTkFMX1NJWkVfVCk7ICAgICAgICAg
ICAgICAgICAgICAgXAotICBsb25nIG1jbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAobWN0bXAgPCA4KSBt
Y24gPSAwOyBlbHNlIHsgbWNuID0gKG1jdG1wLTEpLzg7IG1jdG1wICU9IDg7IH0gICAgICAgICAg
ICAgXAotICBzd2l0Y2ggKG1jdG1wKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgMDogZm9yKDs7KSB7ICptenAr
KyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGNhc2UgNzogICAgICAgICAgICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgNjogICAgICAgICAgICptenArKyA9IDA7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgNTog
ICAgICAgICAgICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGNhc2UgNDogICAgICAgICAgICptenArKyA9IDA7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgMzogICAgICAgICAg
ICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGNhc2UgMjogICAgICAgICAgICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgMTogICAgICAgICAgICptenArKyA9
IDA7IGlmKG1jbiA8PSAwKSBicmVhazsgbWNuLS07IH0gICAgICAgICAgICAgICAgXAotICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIE1BTExPQ19DT1BZKGRlc3Qs
c3JjLG5ieXRlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1k
byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIElOVEVSTkFMX1NJWkVfVCogbWNzcmMgPSAoSU5URVJO
QUxfU0laRV9UKikgc3JjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIElOVEVSTkFM
X1NJWkVfVCogbWNkc3QgPSAoSU5URVJOQUxfU0laRV9UKikgZGVzdDsgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIENIVU5LX1NJWkVfVCAgbWN0bXAgPSAobmJ5dGVzKS9zaXplb2YoSU5U
RVJOQUxfU0laRV9UKTsgICAgICAgICAgICAgICAgICAgICBcCi0gIGxvbmcgbWNuOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGlmIChtY3RtcCA8IDgpIG1jbiA9IDA7IGVsc2UgeyBtY24gPSAobWN0bXAtMSkvODsg
bWN0bXAgJT0gODsgfSAgICAgICAgICAgICBcCi0gIHN3aXRjaCAobWN0bXApIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
Y2FzZSAwOiBmb3IoOzspIHsgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSA3OiAgICAgICAgICAgKm1jZHN0KysgPSAqbWNz
cmMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSA2OiAg
ICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgY2FzZSA1OiAgICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSA0OiAgICAgICAgICAg
Km1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY2FzZSAzOiAgICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSAyOiAgICAgICAgICAgKm1jZHN0Kysg
PSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2Fz
ZSAxOiAgICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgaWYobWNuIDw9IDApIGJyZWFrOyBt
Y24tLTsgfSAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlKDApCi0KLSNl
bmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0gTU1BUCBzdXBwb3J0IC0tLS0tLS0tLS0tLS0t
LS0tLSAgKi8KLQotCi0jaWYgSEFWRV9NTUFQCi0KLSNpZm5kZWYgTEFDS1NfRkNOVExfSAotI2lu
Y2x1ZGUgPGZjbnRsLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBMQUNLU19TWVNfTU1BTl9ICi0jaW5j
bHVkZSA8c3lzL21tYW4uaD4KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoTUFQX0FOT05ZTU9VUykg
JiYgZGVmaW5lZChNQVBfQU5PTikKLSNkZWZpbmUgTUFQX0FOT05ZTU9VUyBNQVBfQU5PTgotI2Vu
ZGlmCi0KLS8qIAotICAgTmVhcmx5IGFsbCB2ZXJzaW9ucyBvZiBtbWFwIHN1cHBvcnQgTUFQX0FO
T05ZTU9VUywgCi0gICBzbyB0aGUgZm9sbG93aW5nIGlzIHVubGlrZWx5IHRvIGJlIG5lZWRlZCwg
YnV0IGlzCi0gICBzdXBwbGllZCBqdXN0IGluIGNhc2UuCi0qLwotCi0jaWZuZGVmIE1BUF9BTk9O
WU1PVVMKLQotc3RhdGljIGludCBkZXZfemVyb19mZCA9IC0xOyAvKiBDYWNoZWQgZmlsZSBkZXNj
cmlwdG9yIGZvciAvZGV2L3plcm8uICovCi0KLSNkZWZpbmUgTU1BUChhZGRyLCBzaXplLCBwcm90
LCBmbGFncykgKChkZXZfemVyb19mZCA8IDApID8gXAotIChkZXZfemVyb19mZCA9IG9wZW4oIi9k
ZXYvemVybyIsIE9fUkRXUiksIFwKLSAgbW1hcCgoYWRkciksIChzaXplKSwgKHByb3QpLCAoZmxh
Z3MpLCBkZXZfemVyb19mZCwgMCkpIDogXAotICAgbW1hcCgoYWRkciksIChzaXplKSwgKHByb3Qp
LCAoZmxhZ3MpLCBkZXZfemVyb19mZCwgMCkpCi0KLSNlbHNlCi0KLSNkZWZpbmUgTU1BUChhZGRy
LCBzaXplLCBwcm90LCBmbGFncykgXAotIChtbWFwKChhZGRyKSwgKHNpemUpLCAocHJvdCksIChm
bGFncyl8TUFQX0FOT05ZTU9VUywgLTEsIDApKQotCi0jZW5kaWYKLQotCi0jZW5kaWYgLyogSEFW
RV9NTUFQICovCi0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENodW5rIHJlcHJl
c2VudGF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotCi0vKgotICBUaGlzIHN0
cnVjdCBkZWNsYXJhdGlvbiBpcyBtaXNsZWFkaW5nIChidXQgYWNjdXJhdGUgYW5kIG5lY2Vzc2Fy
eSkuCi0gIEl0IGRlY2xhcmVzIGEgInZpZXciIGludG8gbWVtb3J5IGFsbG93aW5nIGFjY2VzcyB0
byBuZWNlc3NhcnkKLSAgZmllbGRzIGF0IGtub3duIG9mZnNldHMgZnJvbSBhIGdpdmVuIGJhc2Uu
IFNlZSBleHBsYW5hdGlvbiBiZWxvdy4KLSovCi0KLXN0cnVjdCBtYWxsb2NfY2h1bmsgewotCi0g
IElOVEVSTkFMX1NJWkVfVCAgICAgIHByZXZfc2l6ZTsgIC8qIFNpemUgb2YgcHJldmlvdXMgY2h1
bmsgKGlmIGZyZWUpLiAgKi8KLSAgSU5URVJOQUxfU0laRV9UICAgICAgc2l6ZTsgICAgICAgLyog
U2l6ZSBpbiBieXRlcywgaW5jbHVkaW5nIG92ZXJoZWFkLiAqLwotCi0gIHN0cnVjdCBtYWxsb2Nf
Y2h1bmsqIGZkOyAgICAgICAgIC8qIGRvdWJsZSBsaW5rcyAtLSB1c2VkIG9ubHkgaWYgZnJlZS4g
Ki8KLSAgc3RydWN0IG1hbGxvY19jaHVuayogYms7Ci19OwotCi0KLXR5cGVkZWYgc3RydWN0IG1h
bGxvY19jaHVuayogbWNodW5rcHRyOwotCi0vKgotICAgbWFsbG9jX2NodW5rIGRldGFpbHM6Ci0K
LSAgICAoVGhlIGZvbGxvd2luZyBpbmNsdWRlcyBsaWdodGx5IGVkaXRlZCBleHBsYW5hdGlvbnMg
YnkgQ29saW4gUGx1bWIuKQotCi0gICAgQ2h1bmtzIG9mIG1lbW9yeSBhcmUgbWFpbnRhaW5lZCB1
c2luZyBhIGBib3VuZGFyeSB0YWcnIG1ldGhvZCBhcwotICAgIGRlc2NyaWJlZCBpbiBlLmcuLCBL
bnV0aCBvciBTdGFuZGlzaC4gIChTZWUgdGhlIHBhcGVyIGJ5IFBhdWwKLSAgICBXaWxzb24gZnRw
Oi8vZnRwLmNzLnV0ZXhhcy5lZHUvcHViL2dhcmJhZ2UvYWxsb2NzcnYucHMgZm9yIGEKLSAgICBz
dXJ2ZXkgb2Ygc3VjaCB0ZWNobmlxdWVzLikgIFNpemVzIG9mIGZyZWUgY2h1bmtzIGFyZSBzdG9y
ZWQgYm90aAotICAgIGluIHRoZSBmcm9udCBvZiBlYWNoIGNodW5rIGFuZCBhdCB0aGUgZW5kLiAg
VGhpcyBtYWtlcwotICAgIGNvbnNvbGlkYXRpbmcgZnJhZ21lbnRlZCBjaHVua3MgaW50byBiaWdn
ZXIgY2h1bmtzIHZlcnkgZmFzdC4gIFRoZQotICAgIHNpemUgZmllbGRzIGFsc28gaG9sZCBiaXRz
IHJlcHJlc2VudGluZyB3aGV0aGVyIGNodW5rcyBhcmUgZnJlZSBvcgotICAgIGluIHVzZS4KLQot
ICAgIEFuIGFsbG9jYXRlZCBjaHVuayBsb29rcyBsaWtlIHRoaXM6Ci0KLQotICAgIGNodW5rLT4g
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVu
aywgaWYgYWxsb2NhdGVkICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAg
ICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAg
ICAgICAgICAgICAgICB8UHwKLSAgICAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAg
ICAgICAgICAgIFVzZXIgZGF0YSBzdGFydHMgaGVyZS4uLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgLgotICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIC4gICAgICAgICAgICAgKG1h
bGxvY191c2FibGVfc3BhY2UoKSBieXRlcykgICAgICAgICAgICAgICAgICAgICAuCi0gICAgICAg
ICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAotbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAg
ICAgICAgU2l6ZSBvZiBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKwotCi0KLSAgICBXaGVyZSAiY2h1bmsiIGlzIHRoZSBmcm9u
dCBvZiB0aGUgY2h1bmsgZm9yIHRoZSBwdXJwb3NlIG9mIG1vc3Qgb2YKLSAgICB0aGUgbWFsbG9j
IGNvZGUsIGJ1dCAibWVtIiBpcyB0aGUgcG9pbnRlciB0aGF0IGlzIHJldHVybmVkIHRvIHRoZQot
ICAgIHVzZXIuICAiTmV4dGNodW5rIiBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGNvbnRp
Z3VvdXMgY2h1bmsuCi0KLSAgICBDaHVua3MgYWx3YXlzIGJlZ2luIG9uIGV2ZW4gd29yZCBib3Vu
ZHJpZXMsIHNvIHRoZSBtZW0gcG9ydGlvbgotICAgICh3aGljaCBpcyByZXR1cm5lZCB0byB0aGUg
dXNlcikgaXMgYWxzbyBvbiBhbiBldmVuIHdvcmQgYm91bmRhcnksIGFuZAotICAgIHRodXMgYXQg
bGVhc3QgZG91YmxlLXdvcmQgYWxpZ25lZC4KLQotICAgIEZyZWUgY2h1bmtzIGFyZSBzdG9yZWQg
aW4gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0cywgYW5kIGxvb2sgbGlrZSB0aGlzOgotCi0g
ICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIHBy
ZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rCi0gICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVz
ICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAotICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAg
ICAgICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgaW4gbGlz
dCAgICAgICAgICAgICB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAg
ICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgaW4gbGlzdCAgICAgICAgICAg
IHwKLSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAgICAgICAgICAgIFVudXNl
ZCBzcGFjZSAobWF5IGJlIDAgYnl0ZXMgbG9uZykgICAgICAgICAgICAgICAgLgotICAgICAgICAg
ICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC4KLSAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1uZXh0Y2h1bmstPiArLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwot
ICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0KLSAgICBUaGUgUCAo
UFJFVl9JTlVTRSkgYml0LCBzdG9yZWQgaW4gdGhlIHVudXNlZCBsb3ctb3JkZXIgYml0IG9mIHRo
ZQotICAgIGNodW5rIHNpemUgKHdoaWNoIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIHR3byB3b3Jk
cyksIGlzIGFuIGluLXVzZQotICAgIGJpdCBmb3IgdGhlICpwcmV2aW91cyogY2h1bmsuICBJZiB0
aGF0IGJpdCBpcyAqY2xlYXIqLCB0aGVuIHRoZQotICAgIHdvcmQgYmVmb3JlIHRoZSBjdXJyZW50
IGNodW5rIHNpemUgY29udGFpbnMgdGhlIHByZXZpb3VzIGNodW5rCi0gICAgc2l6ZSwgYW5kIGNh
biBiZSB1c2VkIHRvIGZpbmQgdGhlIGZyb250IG9mIHRoZSBwcmV2aW91cyBjaHVuay4KLSAgICBU
aGUgdmVyeSBmaXJzdCBjaHVuayBhbGxvY2F0ZWQgYWx3YXlzIGhhcyB0aGlzIGJpdCBzZXQsCi0g
ICAgcHJldmVudGluZyBhY2Nlc3MgdG8gbm9uLWV4aXN0ZW50IChvciBub24tb3duZWQpIG1lbW9y
eS4gSWYKLSAgICBwcmV2X2ludXNlIGlzIHNldCBmb3IgYW55IGdpdmVuIGNodW5rLCB0aGVuIHlv
dSBDQU5OT1QgZGV0ZXJtaW5lCi0gICAgdGhlIHNpemUgb2YgdGhlIHByZXZpb3VzIGNodW5rLCBh
bmQgbWlnaHQgZXZlbiBnZXQgYSBtZW1vcnkKLSAgICBhZGRyZXNzaW5nIGZhdWx0IHdoZW4gdHJ5
aW5nIHRvIGRvIHNvLgotCi0gICAgTm90ZSB0aGF0IHRoZSBgZm9vdCcgb2YgdGhlIGN1cnJlbnQg
Y2h1bmsgaXMgYWN0dWFsbHkgcmVwcmVzZW50ZWQKLSAgICBhcyB0aGUgcHJldl9zaXplIG9mIHRo
ZSBORVhUIGNodW5rLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0bwotICAgIGRlYWwgd2l0aCBhbGln
bm1lbnRzIGV0YyBidXQgY2FuIGJlIHZlcnkgY29uZnVzaW5nIHdoZW4gdHJ5aW5nCi0gICAgdG8g
ZXh0ZW5kIG9yIGFkYXB0IHRoaXMgY29kZS4KLQotICAgIFRoZSB0d28gZXhjZXB0aW9ucyB0byBh
bGwgdGhpcyBhcmUKLQotICAgICAxLiBUaGUgc3BlY2lhbCBjaHVuayBgdG9wJyBkb2Vzbid0IGJv
dGhlciB1c2luZyB0aGUKLSAgICAgICAgdHJhaWxpbmcgc2l6ZSBmaWVsZCBzaW5jZSB0aGVyZSBp
cyBubyBuZXh0IGNvbnRpZ3VvdXMgY2h1bmsKLSAgICAgICAgdGhhdCB3b3VsZCBoYXZlIHRvIGlu
ZGV4IG9mZiBpdC4gQWZ0ZXIgaW5pdGlhbGl6YXRpb24sIGB0b3AnCi0gICAgICAgIGlzIGZvcmNl
ZCB0byBhbHdheXMgZXhpc3QuICBJZiBpdCB3b3VsZCBiZWNvbWUgbGVzcyB0aGFuCi0gICAgICAg
IE1JTlNJWkUgYnl0ZXMgbG9uZywgaXQgaXMgcmVwbGVuaXNoZWQuCi0KLSAgICAgMi4gQ2h1bmtz
IGFsbG9jYXRlZCB2aWEgbW1hcCwgd2hpY2ggaGF2ZSB0aGUgc2Vjb25kLWxvd2VzdC1vcmRlcgot
ICAgICAgICBiaXQgKElTX01NQVBQRUQpIHNldCBpbiB0aGVpciBzaXplIGZpZWxkcy4gIEJlY2F1
c2UgdGhleSBhcmUKLSAgICAgICAgYWxsb2NhdGVkIG9uZS1ieS1vbmUsIGVhY2ggbXVzdCBjb250
YWluIGl0cyBvd24gdHJhaWxpbmcgc2l6ZSBmaWVsZC4KLQotKi8KLQotLyoKLSAgLS0tLS0tLS0t
LSBTaXplIGFuZCBhbGlnbm1lbnQgY2hlY2tzIGFuZCBjb252ZXJzaW9ucyAtLS0tLS0tLS0tCi0q
LwotCi0vKiBjb252ZXJzaW9uIGZyb20gbWFsbG9jIGhlYWRlcnMgdG8gdXNlciBwb2ludGVycywg
YW5kIGJhY2sgKi8KLQotI2RlZmluZSBjaHVuazJtZW0ocCkgICAoKFZvaWRfdCopKChjaGFyKiko
cCkgKyAyKlNJWkVfU1opKQotI2RlZmluZSBtZW0yY2h1bmsobWVtKSAoKG1jaHVua3B0cikoKGNo
YXIqKShtZW0pIC0gMipTSVpFX1NaKSkKLQotLyogVGhlIHNtYWxsZXN0IHBvc3NpYmxlIGNodW5r
ICovCi0jZGVmaW5lIE1JTl9DSFVOS19TSVpFICAgICAgICAoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nf
Y2h1bmspKQotCi0vKiBUaGUgc21hbGxlc3Qgc2l6ZSB3ZSBjYW4gbWFsbG9jIGlzIGFuIGFsaWdu
ZWQgbWluaW1hbCBjaHVuayAqLwotCi0jZGVmaW5lIE1JTlNJWkUgIFwKLSAgKENIVU5LX1NJWkVf
VCkoKChNSU5fQ0hVTktfU0laRStNQUxMT0NfQUxJR05fTUFTSykgJiB+TUFMTE9DX0FMSUdOX01B
U0spKQotCi0vKiBDaGVjayBpZiBtIGhhcyBhY2NlcHRhYmxlIGFsaWdubWVudCAqLwotCi0jZGVm
aW5lIGFsaWduZWRfT0sobSkgICgoKFBUUl9VSU5UKSgobSkpICYgKE1BTExPQ19BTElHTl9NQVNL
KSkgPT0gMCkKLQotCi0vKiAKLSAgIENoZWNrIGlmIGEgcmVxdWVzdCBpcyBzbyBsYXJnZSB0aGF0
IGl0IHdvdWxkIHdyYXAgYXJvdW5kIHplcm8gd2hlbgotICAgcGFkZGVkIGFuZCBhbGlnbmVkLiBU
byBzaW1wbGlmeSBzb21lIG90aGVyIGNvZGUsIHRoZSBib3VuZCBpcyBtYWRlCi0gICBsb3cgZW5v
dWdoIHNvIHRoYXQgYWRkaW5nIE1JTlNJWkUgd2lsbCBhbHNvIG5vdCB3cmFwIGFyb3VuZCBzZXJv
LgotKi8KLQotI2RlZmluZSBSRVFVRVNUX09VVF9PRl9SQU5HRShyZXEpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAoKENIVU5LX1NJWkVfVCkocmVxKSA+PSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAoQ0hVTktfU0laRV9UKShJTlRFUk5B
TF9TSVpFX1QpKC0yICogTUlOU0laRSkpICAgIAotCi0vKiBwYWQgcmVxdWVzdCBieXRlcyBpbnRv
IGEgdXNhYmxlIHNpemUgLS0gaW50ZXJuYWwgdmVyc2lvbiAqLwotCi0jZGVmaW5lIHJlcXVlc3Qy
c2l6ZShyZXEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgo
KHJlcSkgKyBTSVpFX1NaICsgTUFMTE9DX0FMSUdOX01BU0sgPCBNSU5TSVpFKSAgPyAgICAgICAg
ICAgICBcCi0gICBNSU5TSVpFIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAoKHJlcSkgKyBTSVpFX1NaICsgTUFMTE9DX0FMSUdOX01B
U0spICYgfk1BTExPQ19BTElHTl9NQVNLKQotCi0vKiAgU2FtZSwgZXhjZXB0IGFsc28gcGVyZm9y
bSBhcmd1bWVudCBjaGVjayAqLwotCi0jZGVmaW5lIGNoZWNrZWRfcmVxdWVzdDJzaXplKHJlcSwg
c3opICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChSRVFVRVNUX09VVF9PRl9S
QU5HRShyZXEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFMTE9D
X0ZBSUxVUkVfQUNUSU9OOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChzeikgPSByZXF1ZXN0MnNpemUocmVxKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLS8qCi0gIC0tLS0t
LS0tLS0tLS0tLSBQaHlzaWNhbCBjaHVuayBvcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLQotKi8K
LQotCi0vKiBzaXplIGZpZWxkIGlzIG9yJ2VkIHdpdGggUFJFVl9JTlVTRSB3aGVuIHByZXZpb3Vz
IGFkamFjZW50IGNodW5rIGluIHVzZSAqLwotI2RlZmluZSBQUkVWX0lOVVNFIDB4MQotCi0vKiBl
eHRyYWN0IGludXNlIGJpdCBvZiBwcmV2aW91cyBjaHVuayAqLwotI2RlZmluZSBwcmV2X2ludXNl
KHApICAgICAgICgocCktPnNpemUgJiBQUkVWX0lOVVNFKQotCi0KLS8qIHNpemUgZmllbGQgaXMg
b3InZWQgd2l0aCBJU19NTUFQUEVEIGlmIHRoZSBjaHVuayB3YXMgb2J0YWluZWQgd2l0aCBtbWFw
KCkgKi8KLSNkZWZpbmUgSVNfTU1BUFBFRCAweDIKLQotLyogY2hlY2sgZm9yIG1tYXAoKSdlZCBj
aHVuayAqLwotI2RlZmluZSBjaHVua19pc19tbWFwcGVkKHApICgocCktPnNpemUgJiBJU19NTUFQ
UEVEKQotCi0vKiAKLSAgQml0cyB0byBtYXNrIG9mZiB3aGVuIGV4dHJhY3Rpbmcgc2l6ZSAKLQot
ICBOb3RlOiBJU19NTUFQUEVEIGlzIGludGVudGlvbmFsbHkgbm90IG1hc2tlZCBvZmYgZnJvbSBz
aXplIGZpZWxkIGluCi0gIG1hY3JvcyBmb3Igd2hpY2ggbW1hcHBlZCBjaHVua3Mgc2hvdWxkIG5l
dmVyIGJlIHNlZW4uIFRoaXMgc2hvdWxkCi0gIGNhdXNlIGhlbHBmdWwgY29yZSBkdW1wcyB0byBv
Y2N1ciBpZiBpdCBpcyB0cmllZCBieSBhY2NpZGVudCBieQotICBwZW9wbGUgZXh0ZW5kaW5nIG9y
IGFkYXB0aW5nIHRoaXMgbWFsbG9jLgotKi8KLSNkZWZpbmUgU0laRV9CSVRTIChQUkVWX0lOVVNF
fElTX01NQVBQRUQpCi0KLS8qIEdldCBzaXplLCBpZ25vcmluZyB1c2UgYml0cyAqLwotI2RlZmlu
ZSBjaHVua3NpemUocCkgICAgICAgICAoKHApLT5zaXplICYgfihTSVpFX0JJVFMpKQotCi0KLS8q
IFB0ciB0byBuZXh0IHBoeXNpY2FsIG1hbGxvY19jaHVuay4gKi8KLSNkZWZpbmUgbmV4dF9jaHVu
ayhwKSAoKG1jaHVua3B0cikoICgoY2hhciopKHApKSArICgocCktPnNpemUgJiB+UFJFVl9JTlVT
RSkgKSkKLQotLyogUHRyIHRvIHByZXZpb3VzIHBoeXNpY2FsIG1hbGxvY19jaHVuayAqLwotI2Rl
ZmluZSBwcmV2X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpIC0gKChwKS0+cHJl
dl9zaXplKSApKQotCi0vKiBUcmVhdCBzcGFjZSBhdCBwdHIgKyBvZmZzZXQgYXMgYSBjaHVuayAq
LwotI2RlZmluZSBjaHVua19hdF9vZmZzZXQocCwgcykgICgobWNodW5rcHRyKSgoKGNoYXIqKShw
KSkgKyAocykpKQotCi0vKiBleHRyYWN0IHAncyBpbnVzZSBiaXQgKi8KLSNkZWZpbmUgaW51c2Uo
cClcCi0oKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkrKChwKS0+c2l6ZSAmIH5QUkVWX0lOVVNF
KSkpLT5zaXplKSAmIFBSRVZfSU5VU0UpCi0KLS8qIHNldC9jbGVhciBjaHVuayBhcyBiZWluZyBp
bnVzZSB3aXRob3V0IG90aGVyd2lzZSBkaXN0dXJiaW5nICovCi0jZGVmaW5lIHNldF9pbnVzZShw
KVwKLSgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAoKHApLT5zaXplICYgflBSRVZfSU5VU0Up
KSktPnNpemUgfD0gUFJFVl9JTlVTRQotCi0jZGVmaW5lIGNsZWFyX2ludXNlKHApXAotKChtY2h1
bmtwdHIpKCgoY2hhciopKHApKSArICgocCktPnNpemUgJiB+UFJFVl9JTlVTRSkpKS0+c2l6ZSAm
PSB+KFBSRVZfSU5VU0UpCi0KLQotLyogY2hlY2svc2V0L2NsZWFyIGludXNlIGJpdHMgaW4ga25v
d24gcGxhY2VzICovCi0jZGVmaW5lIGludXNlX2JpdF9hdF9vZmZzZXQocCwgcylcCi0gKCgobWNo
dW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+c2l6ZSAmIFBSRVZfSU5VU0UpCi0KLSNkZWZp
bmUgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQocCwgcylcCi0gKCgobWNodW5rcHRyKSgoKGNoYXIq
KShwKSkgKyAocykpKS0+c2l6ZSB8PSBQUkVWX0lOVVNFKQotCi0jZGVmaW5lIGNsZWFyX2ludXNl
X2JpdF9hdF9vZmZzZXQocCwgcylcCi0gKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykp
KS0+c2l6ZSAmPSB+KFBSRVZfSU5VU0UpKQotCi0KLS8qIFNldCBzaXplIGF0IGhlYWQsIHdpdGhv
dXQgZGlzdHVyYmluZyBpdHMgdXNlIGJpdCAqLwotI2RlZmluZSBzZXRfaGVhZF9zaXplKHAsIHMp
ICAoKHApLT5zaXplID0gKCgocCktPnNpemUgJiBQUkVWX0lOVVNFKSB8IChzKSkpCi0KLS8qIFNl
dCBzaXplL3VzZSBmaWVsZCAqLwotI2RlZmluZSBzZXRfaGVhZChwLCBzKSAgICAgICAoKHApLT5z
aXplID0gKHMpKQotCi0vKiBTZXQgc2l6ZSBhdCBmb290ZXIgKG9ubHkgd2hlbiBjaHVuayBpcyBu
b3QgaW4gdXNlKSAqLwotI2RlZmluZSBzZXRfZm9vdChwLCBzKSAgICAgICAoKChtY2h1bmtwdHIp
KChjaGFyKikocCkgKyAocykpKS0+cHJldl9zaXplID0gKHMpKQotCi0KLS8qCi0gIC0tLS0tLS0t
LS0tLS0tLS0tLS0tIEludGVybmFsIGRhdGEgc3RydWN0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gICBBbGwgaW50ZXJuYWwgc3RhdGUgaXMgaGVsZCBpbiBhbiBpbnN0YW5jZSBvZiBtYWxs
b2Nfc3RhdGUgZGVmaW5lZAotICAgYmVsb3cuIFRoZXJlIGFyZSBubyBvdGhlciBzdGF0aWMgdmFy
aWFibGVzLCBleGNlcHQgaW4gdHdvIG9wdGlvbmFsCi0gICBjYXNlczogCi0gICAqIElmIFVTRV9N
QUxMT0NfTE9DSyBpcyBkZWZpbmVkLCB0aGUgbUFMTE9DX01VVEV4IGRlY2xhcmVkIGFib3ZlLiAK
LSAgICogSWYgSEFWRV9NTUFQIGlzIHRydWUsIGJ1dCBtbWFwIGRvZXNuJ3Qgc3VwcG9ydAotICAg
ICBNQVBfQU5PTllNT1VTLCBhIGR1bW15IGZpbGUgZGVzY3JpcHRvciBmb3IgbW1hcC4KLQotICAg
QmV3YXJlIG9mIGxvdHMgb2YgdHJpY2tzIHRoYXQgbWluaW1pemUgdGhlIHRvdGFsIGJvb2trZWVw
aW5nIHNwYWNlCi0gICByZXF1aXJlbWVudHMuIFRoZSByZXN1bHQgaXMgYSBsaXR0bGUgb3ZlciAx
SyBieXRlcyAoZm9yIDRieXRlCi0gICBwb2ludGVycyBhbmQgc2l6ZV90LikKLSovCi0KLS8qCi0g
IEJpbnMKLQotICAgIEFuIGFycmF5IG9mIGJpbiBoZWFkZXJzIGZvciBmcmVlIGNodW5rcy4gRWFj
aCBiaW4gaXMgZG91Ymx5Ci0gICAgbGlua2VkLiAgVGhlIGJpbnMgYXJlIGFwcHJveGltYXRlbHkg
cHJvcG9ydGlvbmFsbHkgKGxvZykgc3BhY2VkLgotICAgIFRoZXJlIGFyZSBhIGxvdCBvZiB0aGVz
ZSBiaW5zICgxMjgpLiBUaGlzIG1heSBsb29rIGV4Y2Vzc2l2ZSwgYnV0Ci0gICAgd29ya3MgdmVy
eSB3ZWxsIGluIHByYWN0aWNlLiAgTW9zdCBiaW5zIGhvbGQgc2l6ZXMgdGhhdCBhcmUKLSAgICB1
bnVzdWFsIGFzIG1hbGxvYyByZXF1ZXN0IHNpemVzLCBidXQgYXJlIG1vcmUgdXN1YWwgZm9yIGZy
YWdtZW50cwotICAgIGFuZCBjb25zb2xpZGF0ZWQgc2V0cyBvZiBjaHVua3MsIHdoaWNoIGlzIHdo
YXQgdGhlc2UgYmlucyBob2xkLCBzbwotICAgIHRoZXkgY2FuIGJlIGZvdW5kIHF1aWNrbHkuICBB
bGwgcHJvY2VkdXJlcyBtYWludGFpbiB0aGUgaW52YXJpYW50Ci0gICAgdGhhdCBubyBjb25zb2xp
ZGF0ZWQgY2h1bmsgcGh5c2ljYWxseSBib3JkZXJzIGFub3RoZXIgb25lLCBzbyBlYWNoCi0gICAg
Y2h1bmsgaW4gYSBsaXN0IGlzIGtub3duIHRvIGJlIHByZWNlZWRlZCBhbmQgZm9sbG93ZWQgYnkg
ZWl0aGVyCi0gICAgaW51c2UgY2h1bmtzIG9yIHRoZSBlbmRzIG9mIG1lbW9yeS4KLQotICAgIENo
dW5rcyBpbiBiaW5zIGFyZSBrZXB0IGluIHNpemUgb3JkZXIsIHdpdGggdGllcyBnb2luZyB0byB0
aGUKLSAgICBhcHByb3hpbWF0ZWx5IGxlYXN0IHJlY2VudGx5IHVzZWQgY2h1bmsuIE9yZGVyaW5n
IGlzbid0IG5lZWRlZAotICAgIGZvciB0aGUgc21hbGwgYmlucywgd2hpY2ggYWxsIGNvbnRhaW4g
dGhlIHNhbWUtc2l6ZWQgY2h1bmtzLCBidXQKLSAgICBmYWNpbGl0YXRlcyBiZXN0LWZpdCBhbGxv
Y2F0aW9uIGZvciBsYXJnZXIgY2h1bmtzLiBUaGVzZSBsaXN0cwotICAgIGFyZSBqdXN0IHNlcXVl
bnRpYWwuIEtlZXBpbmcgdGhlbSBpbiBvcmRlciBhbG1vc3QgbmV2ZXIgcmVxdWlyZXMKLSAgICBl
bm91Z2ggdHJhdmVyc2FsIHRvIHdhcnJhbnQgdXNpbmcgZmFuY2llciBvcmRlcmVkIGRhdGEKLSAg
ICBzdHJ1Y3R1cmVzLiAgCi0KLSAgICBDaHVua3Mgb2YgdGhlIHNhbWUgc2l6ZSBhcmUgbGlua2Vk
IHdpdGggdGhlIG1vc3QKLSAgICByZWNlbnRseSBmcmVlZCBhdCB0aGUgZnJvbnQsIGFuZCBhbGxv
Y2F0aW9ucyBhcmUgdGFrZW4gZnJvbSB0aGUKLSAgICBiYWNrLiAgVGhpcyByZXN1bHRzIGluIExS
VSAoRklGTykgYWxsb2NhdGlvbiBvcmRlciwgd2hpY2ggdGVuZHMKLSAgICB0byBnaXZlIGVhY2gg
Y2h1bmsgYW4gZXF1YWwgb3Bwb3J0dW5pdHkgdG8gYmUgY29uc29saWRhdGVkIHdpdGgKLSAgICBh
ZGphY2VudCBmcmVlZCBjaHVua3MsIHJlc3VsdGluZyBpbiBsYXJnZXIgZnJlZSBjaHVua3MgYW5k
IGxlc3MKLSAgICBmcmFnbWVudGF0aW9uLgotCi0gICAgVG8gc2ltcGxpZnkgdXNlIGluIGRvdWJs
ZS1saW5rZWQgbGlzdHMsIGVhY2ggYmluIGhlYWRlciBhY3RzCi0gICAgYXMgYSBtYWxsb2NfY2h1
bmsuIFRoaXMgYXZvaWRzIHNwZWNpYWwtY2FzaW5nIGZvciBoZWFkZXJzLgotICAgIEJ1dCB0byBj
b25zZXJ2ZSBzcGFjZSBhbmQgaW1wcm92ZSBsb2NhbGl0eSwgd2UgYWxsb2NhdGUKLSAgICBvbmx5
IHRoZSBmZC9iayBwb2ludGVycyBvZiBiaW5zLCBhbmQgdGhlbiB1c2UgcmVwb3NpdGlvbmluZyB0
cmlja3MKLSAgICB0byB0cmVhdCB0aGVzZSBhcyB0aGUgZmllbGRzIG9mIGEgbWFsbG9jX2NodW5r
Ki4gIAotKi8KLQotdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBtYmlucHRyOwotCi0vKiBh
ZGRyZXNzaW5nIC0tIG5vdGUgdGhhdCBiaW5fYXQoMCkgZG9lcyBub3QgZXhpc3QgKi8KLSNkZWZp
bmUgYmluX2F0KG0sIGkpICgobWJpbnB0cikoKGNoYXIqKSYoKG0pLT5iaW5zWyhpKTw8MV0pIC0g
KFNJWkVfU1o8PDEpKSkKLQotLyogYW5hbG9nIG9mICsrYmluICovCi0jZGVmaW5lIG5leHRfYmlu
KGIpICAoKG1iaW5wdHIpKChjaGFyKikoYikgKyAoc2l6ZW9mKG1jaHVua3B0cik8PDEpKSkKLQot
LyogUmVtaW5kZXJzIGFib3V0IGxpc3QgZGlyZWN0aW9uYWxpdHkgd2l0aGluIGJpbnMgKi8KLSNk
ZWZpbmUgZmlyc3QoYikgICAgICgoYiktPmZkKQotI2RlZmluZSBsYXN0KGIpICAgICAgKChiKS0+
YmspCi0KLS8qIFRha2UgYSBjaHVuayBvZmYgYSBiaW4gbGlzdCAqLwotI2RlZmluZSB1bmxpbmso
UCwgQkssIEZEKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIEZEID0gUC0+ZmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgQksgPSBQLT5iazsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGRC0+YmsgPSBCSzsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEJL
LT5mZCA9IEZEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLX0KLQotLyoKLSAgSW5kZXhpbmcKLQotICAgIEJpbnMgZm9yIHNpemVzIDwg
NTEyIGJ5dGVzIGNvbnRhaW4gY2h1bmtzIG9mIGFsbCB0aGUgc2FtZSBzaXplLCBzcGFjZWQKLSAg
ICA4IGJ5dGVzIGFwYXJ0LiBMYXJnZXIgYmlucyBhcmUgYXBwcm94aW1hdGVseSBsb2dhcml0aG1p
Y2FsbHkgc3BhY2VkOgotCi0gICAgNjQgYmlucyBvZiBzaXplICAgICAgIDgKLSAgICAzMiBiaW5z
IG9mIHNpemUgICAgICA2NAotICAgIDE2IGJpbnMgb2Ygc2l6ZSAgICAgNTEyCi0gICAgIDggYmlu
cyBvZiBzaXplICAgIDQwOTYKLSAgICAgNCBiaW5zIG9mIHNpemUgICAzMjc2OAotICAgICAyIGJp
bnMgb2Ygc2l6ZSAgMjYyMTQ0Ci0gICAgIDEgYmluICBvZiBzaXplIHdoYXQncyBsZWZ0Ci0KLSAg
ICBUaGUgYmlucyB0b3Agb3V0IGFyb3VuZCAxTUIgYmVjYXVzZSB3ZSBleHBlY3QgdG8gc2Vydmlj
ZSBsYXJnZQotICAgIHJlcXVlc3RzIHZpYSBtbWFwLgotKi8KLQotI2RlZmluZSBOQklOUyAgICAg
ICAgICAgICAgOTYKLSNkZWZpbmUgTlNNQUxMQklOUyAgICAgICAgIDMyCi0jZGVmaW5lIFNNQUxM
QklOX1dJRFRIICAgICAgOAotI2RlZmluZSBNSU5fTEFSR0VfU0laRSAgICAyNTYKLQotI2RlZmlu
ZSBpbl9zbWFsbGJpbl9yYW5nZShzeikgIFwKLSAgKChDSFVOS19TSVpFX1QpKHN6KSA8IChDSFVO
S19TSVpFX1QpTUlOX0xBUkdFX1NJWkUpCi0KLSNkZWZpbmUgc21hbGxiaW5faW5kZXgoc3opICAg
ICAoKCh1bnNpZ25lZCkoc3opKSA+PiAzKQotCi0vKgotICBDb21wdXRlIGluZGV4IGZvciBzaXpl
LiBXZSBleHBlY3QgdGhpcyB0byBiZSBpbmxpbmVkIHdoZW4KLSAgY29tcGlsZWQgd2l0aCBvcHRp
bWl6YXRpb24sIGVsc2Ugbm90LCB3aGljaCB3b3JrcyBvdXQgd2VsbC4KLSovCi1zdGF0aWMgaW50
IGxhcmdlYmluX2luZGV4KHVuc2lnbmVkIGludCBzeikgewotICB1bnNpZ25lZCBpbnQgIHggPSBz
eiA+PiBTTUFMTEJJTl9XSURUSDsgCi0gIHVuc2lnbmVkIGludCBtOyAgICAgICAgICAgIC8qIGJp
dCBwb3NpdGlvbiBvZiBoaWdoZXN0IHNldCBiaXQgb2YgbSAqLwotCi0gIGlmICh4ID49IDB4MTAw
MDApIHJldHVybiBOQklOUy0xOwotCi0gIC8qIE9uIGludGVsLCB1c2UgQlNSTCBpbnN0cnVjdGlv
biB0byBmaW5kIGhpZ2hlc3QgYml0ICovCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5l
ZChpMzg2KQotCi0gIF9fYXNtX18oImJzcmwgJTEsJTBcblx0IgotICAgICAgICAgIDogIj1yIiAo
bSkgCi0gICAgICAgICAgOiAiZyIgICh4KSk7Ci0KLSNlbHNlCi0gIHsKLSAgICAvKgotICAgICAg
QmFzZWQgb24gYnJhbmNoLWZyZWUgbmx6IGFsZ29yaXRobSBpbiBjaGFwdGVyIDUgb2YgSGVucnkK
LSAgICAgIFMuIFdhcnJlbiBKcidzIGJvb2sgIkhhY2tlcidzIERlbGlnaHQiLgotICAgICovCi0K
LSAgICB1bnNpZ25lZCBpbnQgbiA9ICgoeCAtIDB4MTAwKSA+PiAxNikgJiA4OwotICAgIHggPDw9
IG47IAotICAgIG0gPSAoKHggLSAweDEwMDApID4+IDE2KSAmIDQ7Ci0gICAgbiArPSBtOyAKLSAg
ICB4IDw8PSBtOyAKLSAgICBtID0gKCh4IC0gMHg0MDAwKSA+PiAxNikgJiAyOwotICAgIG4gKz0g
bTsgCi0gICAgeCA9ICh4IDw8IG0pID4+IDE0OwotICAgIG0gPSAxMyAtIG4gKyAoeCAmIH4oeD4+
MSkpOwotICB9Ci0jZW5kaWYKLQotICAvKiBVc2UgbmV4dCAyIGJpdHMgdG8gY3JlYXRlIGZpbmVy
LWdyYW51bGFyaXR5IGJpbnMgKi8KLSAgcmV0dXJuIE5TTUFMTEJJTlMgKyAobSA8PCAyKSArICgo
c3ogPj4gKG0gKyA2KSkgJiAzKTsKLX0KLQotI2RlZmluZSBiaW5faW5kZXgoc3opIFwKLSAoKGlu
X3NtYWxsYmluX3JhbmdlKHN6KSkgPyBzbWFsbGJpbl9pbmRleChzeikgOiBsYXJnZWJpbl9pbmRl
eChzeikpCi0KLS8qCi0gIEZJUlNUX1NPUlRFRF9CSU5fU0laRSBpcyB0aGUgY2h1bmsgc2l6ZSBj
b3JyZXNwb25kaW5nIHRvIHRoZQotICBmaXJzdCBiaW4gdGhhdCBpcyBtYWludGFpbmVkIGluIHNv
cnRlZCBvcmRlci4gVGhpcyBtdXN0Ci0gIGJlIHRoZSBzbWFsbGVzdCBzaXplIGNvcnJlc3BvbmRp
bmcgdG8gYSBnaXZlbiBiaW4uCi0KLSAgTm9ybWFsbHksIHRoaXMgc2hvdWxkIGJlIE1JTl9MQVJH
RV9TSVpFLiBCdXQgeW91IGNhbiB3ZWFrZW4KLSAgYmVzdCBmaXQgZ3VhcmFudGVlcyB0byBzb21l
dGltZXMgc3BlZWQgdXAgbWFsbG9jIGJ5IGluY3JlYXNpbmcgdmFsdWUuCi0gIERvaW5nIHRoaXMg
bWVhbnMgdGhhdCBtYWxsb2MgbWF5IGNob29zZSBhIGNodW5rIHRoYXQgaXMgCi0gIG5vbi1iZXN0
LWZpdHRpbmcgYnkgdXAgdG8gdGhlIHdpZHRoIG9mIHRoZSBiaW4uCi0KLSAgU29tZSB1c2VmdWwg
Y3V0b2ZmIHZhbHVlczoKLSAgICAgIDUxMiAtIGFsbCBiaW5zIHNvcnRlZAotICAgICAyNTYwIC0g
bGVhdmVzIGJpbnMgPD0gICAgIDY0IGJ5dGVzIHdpZGUgdW5zb3J0ZWQgIAotICAgIDEyMjg4IC0g
bGVhdmVzIGJpbnMgPD0gICAgNTEyIGJ5dGVzIHdpZGUgdW5zb3J0ZWQKLSAgICA2NTUzNiAtIGxl
YXZlcyBiaW5zIDw9ICAgNDA5NiBieXRlcyB3aWRlIHVuc29ydGVkCi0gICAyNjIxNDQgLSBsZWF2
ZXMgYmlucyA8PSAgMzI3NjggYnl0ZXMgd2lkZSB1bnNvcnRlZAotICAgICAgIC0xIC0gbm8gYmlu
cyBzb3J0ZWQgKG5vdCByZWNvbW1lbmRlZCEpCi0qLwotCi0jZGVmaW5lIEZJUlNUX1NPUlRFRF9C
SU5fU0laRSBNSU5fTEFSR0VfU0laRSAKLS8qICNkZWZpbmUgRklSU1RfU09SVEVEX0JJTl9TSVpF
IDY1NTM2ICovCi0KLS8qCi0gIFVuc29ydGVkIGNodW5rcwotCi0gICAgQWxsIHJlbWFpbmRlcnMg
ZnJvbSBjaHVuayBzcGxpdHMsIGFzIHdlbGwgYXMgYWxsIHJldHVybmVkIGNodW5rcywKLSAgICBh
cmUgZmlyc3QgcGxhY2VkIGluIHRoZSAidW5zb3J0ZWQiIGJpbi4gVGhleSBhcmUgdGhlbiBwbGFj
ZWQKLSAgICBpbiByZWd1bGFyIGJpbnMgYWZ0ZXIgbWFsbG9jIGdpdmVzIHRoZW0gT05FIGNoYW5j
ZSB0byBiZSB1c2VkIGJlZm9yZQotICAgIGJpbm5pbmcuIFNvLCBiYXNpY2FsbHksIHRoZSB1bnNv
cnRlZF9jaHVua3MgbGlzdCBhY3RzIGFzIGEgcXVldWUsCi0gICAgd2l0aCBjaHVua3MgYmVpbmcg
cGxhY2VkIG9uIGl0IGluIGZyZWUgKGFuZCBtYWxsb2NfY29uc29saWRhdGUpLAotICAgIGFuZCB0
YWtlbiBvZmYgKHRvIGJlIGVpdGhlciB1c2VkIG9yIHBsYWNlZCBpbiBiaW5zKSBpbiBtYWxsb2Mu
Ci0qLwotCi0vKiBUaGUgb3RoZXJ3aXNlIHVuaW5kZXhhYmxlIDEtYmluIGlzIHVzZWQgdG8gaG9s
ZCB1bnNvcnRlZCBjaHVua3MuICovCi0jZGVmaW5lIHVuc29ydGVkX2NodW5rcyhNKSAgICAgICAg
ICAoYmluX2F0KE0sIDEpKQotCi0vKgotICBUb3AKLQotICAgIFRoZSB0b3AtbW9zdCBhdmFpbGFi
bGUgY2h1bmsgKGkuZS4sIHRoZSBvbmUgYm9yZGVyaW5nIHRoZSBlbmQgb2YKLSAgICBhdmFpbGFi
bGUgbWVtb3J5KSBpcyB0cmVhdGVkIHNwZWNpYWxseS4gSXQgaXMgbmV2ZXIgaW5jbHVkZWQgaW4K
LSAgICBhbnkgYmluLCBpcyB1c2VkIG9ubHkgaWYgbm8gb3RoZXIgY2h1bmsgaXMgYXZhaWxhYmxl
LCBhbmQgaXMKLSAgICByZWxlYXNlZCBiYWNrIHRvIHRoZSBzeXN0ZW0gaWYgaXQgaXMgdmVyeSBs
YXJnZSAoc2VlCi0gICAgTV9UUklNX1RIUkVTSE9MRCkuICBCZWNhdXNlIHRvcCBpbml0aWFsbHkK
LSAgICBwb2ludHMgdG8gaXRzIG93biBiaW4gd2l0aCBpbml0aWFsIHplcm8gc2l6ZSwgdGh1cyBm
b3JjaW5nCi0gICAgZXh0ZW5zaW9uIG9uIHRoZSBmaXJzdCBtYWxsb2MgcmVxdWVzdCwgd2UgYXZv
aWQgaGF2aW5nIGFueSBzcGVjaWFsCi0gICAgY29kZSBpbiBtYWxsb2MgdG8gY2hlY2sgd2hldGhl
ciBpdCBldmVuIGV4aXN0cyB5ZXQuIEJ1dCB3ZSBzdGlsbAotICAgIG5lZWQgdG8gZG8gc28gd2hl
biBnZXR0aW5nIG1lbW9yeSBmcm9tIHN5c3RlbSwgc28gd2UgbWFrZQotICAgIGluaXRpYWxfdG9w
IHRyZWF0IHRoZSBiaW4gYXMgYSBsZWdhbCBidXQgdW51c2FibGUgY2h1bmsgZHVyaW5nIHRoZQot
ICAgIGludGVydmFsIGJldHdlZW4gaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBmaXJzdCBjYWxsIHRv
Ci0gICAgc1lTTUFMTE9jLiAoVGhpcyBpcyBzb21ld2hhdCBkZWxpY2F0ZSwgc2luY2UgaXQgcmVs
aWVzIG9uCi0gICAgdGhlIDIgcHJlY2VkaW5nIHdvcmRzIHRvIGJlIHplcm8gZHVyaW5nIHRoaXMg
aW50ZXJ2YWwgYXMgd2VsbC4pCi0qLwotCi0vKiBDb252ZW5pZW50bHksIHRoZSB1bnNvcnRlZCBi
aW4gY2FuIGJlIHVzZWQgYXMgZHVtbXkgdG9wIG9uIGZpcnN0IGNhbGwgKi8KLSNkZWZpbmUgaW5p
dGlhbF90b3AoTSkgICAgICAgICAgICAgICh1bnNvcnRlZF9jaHVua3MoTSkpCi0KLS8qCi0gIEJp
bm1hcAotCi0gICAgVG8gaGVscCBjb21wZW5zYXRlIGZvciB0aGUgbGFyZ2UgbnVtYmVyIG9mIGJp
bnMsIGEgb25lLWxldmVsIGluZGV4Ci0gICAgc3RydWN0dXJlIGlzIHVzZWQgZm9yIGJpbi1ieS1i
aW4gc2VhcmNoaW5nLiAgYGJpbm1hcCcgaXMgYQotICAgIGJpdHZlY3RvciByZWNvcmRpbmcgd2hl
dGhlciBiaW5zIGFyZSBkZWZpbml0ZWx5IGVtcHR5IHNvIHRoZXkgY2FuCi0gICAgYmUgc2tpcHBl
ZCBvdmVyIGR1cmluZyBkdXJpbmcgdHJhdmVyc2Fscy4gIFRoZSBiaXRzIGFyZSBOT1QgYWx3YXlz
Ci0gICAgY2xlYXJlZCBhcyBzb29uIGFzIGJpbnMgYXJlIGVtcHR5LCBidXQgaW5zdGVhZCBvbmx5
Ci0gICAgd2hlbiB0aGV5IGFyZSBub3RpY2VkIHRvIGJlIGVtcHR5IGR1cmluZyB0cmF2ZXJzYWwg
aW4gbWFsbG9jLgotKi8KLQotLyogQ29uc2VydmF0aXZlbHkgdXNlIDMyIGJpdHMgcGVyIG1hcCB3
b3JkLCBldmVuIGlmIG9uIDY0Yml0IHN5c3RlbSAqLwotI2RlZmluZSBCSU5NQVBTSElGVCAgICAg
IDUKLSNkZWZpbmUgQklUU1BFUk1BUCAgICAgICAoMVUgPDwgQklOTUFQU0hJRlQpCi0jZGVmaW5l
IEJJTk1BUFNJWkUgICAgICAgKE5CSU5TIC8gQklUU1BFUk1BUCkKLQotI2RlZmluZSBpZHgyYmxv
Y2soaSkgICAgICgoaSkgPj4gQklOTUFQU0hJRlQpCi0jZGVmaW5lIGlkeDJiaXQoaSkgICAgICAg
KCgxVSA8PCAoKGkpICYgKCgxVSA8PCBCSU5NQVBTSElGVCktMSkpKSkKLQotI2RlZmluZSBtYXJr
X2JpbihtLGkpICAgICgobSktPmJpbm1hcFtpZHgyYmxvY2soaSldIHw9ICBpZHgyYml0KGkpKQot
I2RlZmluZSB1bm1hcmtfYmluKG0saSkgICgobSktPmJpbm1hcFtpZHgyYmxvY2soaSldICY9IH4o
aWR4MmJpdChpKSkpCi0jZGVmaW5lIGdldF9iaW5tYXAobSxpKSAgKChtKS0+YmlubWFwW2lkeDJi
bG9jayhpKV0gJiAgIGlkeDJiaXQoaSkpCi0KLS8qCi0gIEZhc3RiaW5zCi0KLSAgICBBbiBhcnJh
eSBvZiBsaXN0cyBob2xkaW5nIHJlY2VudGx5IGZyZWVkIHNtYWxsIGNodW5rcy4gIEZhc3RiaW5z
Ci0gICAgYXJlIG5vdCBkb3VibHkgbGlua2VkLiAgSXQgaXMgZmFzdGVyIHRvIHNpbmdsZS1saW5r
IHRoZW0sIGFuZAotICAgIHNpbmNlIGNodW5rcyBhcmUgbmV2ZXIgcmVtb3ZlZCBmcm9tIHRoZSBt
aWRkbGVzIG9mIHRoZXNlIGxpc3RzLAotICAgIGRvdWJsZSBsaW5raW5nIGlzIG5vdCBuZWNlc3Nh
cnkuIEFsc28sIHVubGlrZSByZWd1bGFyIGJpbnMsIHRoZXkKLSAgICBhcmUgbm90IGV2ZW4gcHJv
Y2Vzc2VkIGluIEZJRk8gb3JkZXIgKHRoZXkgdXNlIGZhc3RlciBMSUZPKSBzaW5jZQotICAgIG9y
ZGVyaW5nIGRvZXNuJ3QgbXVjaCBtYXR0ZXIgaW4gdGhlIHRyYW5zaWVudCBjb250ZXh0cyBpbiB3
aGljaAotICAgIGZhc3RiaW5zIGFyZSBub3JtYWxseSB1c2VkLgotCi0gICAgQ2h1bmtzIGluIGZh
c3RiaW5zIGtlZXAgdGhlaXIgaW51c2UgYml0IHNldCwgc28gdGhleSBjYW5ub3QKLSAgICBiZSBj
b25zb2xpZGF0ZWQgd2l0aCBvdGhlciBmcmVlIGNodW5rcy4gbWFsbG9jX2NvbnNvbGlkYXRlCi0g
ICAgcmVsZWFzZXMgYWxsIGNodW5rcyBpbiBmYXN0YmlucyBhbmQgY29uc29saWRhdGVzIHRoZW0g
d2l0aAotICAgIG90aGVyIGZyZWUgY2h1bmtzLiAKLSovCi0KLXR5cGVkZWYgc3RydWN0IG1hbGxv
Y19jaHVuayogbWZhc3RiaW5wdHI7Ci0KLS8qIG9mZnNldCAyIHRvIHVzZSBvdGhlcndpc2UgdW5p
bmRleGFibGUgZmlyc3QgMiBiaW5zICovCi0jZGVmaW5lIGZhc3RiaW5faW5kZXgoc3opICAgICAg
ICAoKCgodW5zaWduZWQgaW50KShzeikpID4+IDMpIC0gMikKLQotLyogVGhlIG1heGltdW0gZmFz
dGJpbiByZXF1ZXN0IHNpemUgd2Ugc3VwcG9ydCAqLwotI2RlZmluZSBNQVhfRkFTVF9TSVpFICAg
ICA4MAotCi0jZGVmaW5lIE5GQVNUQklOUyAgKGZhc3RiaW5faW5kZXgocmVxdWVzdDJzaXplKE1B
WF9GQVNUX1NJWkUpKSsxKQotCi0vKgotICBGQVNUQklOX0NPTlNPTElEQVRJT05fVEhSRVNIT0xE
IGlzIHRoZSBzaXplIG9mIGEgY2h1bmsgaW4gZnJlZSgpCi0gIHRoYXQgdHJpZ2dlcnMgYXV0b21h
dGljIGNvbnNvbGlkYXRpb24gb2YgcG9zc2libHktc3Vycm91bmRpbmcKLSAgZmFzdGJpbiBjaHVu
a3MuIFRoaXMgaXMgYSBoZXVyaXN0aWMsIHNvIHRoZSBleGFjdCB2YWx1ZSBzaG91bGQgbm90Ci0g
IG1hdHRlciB0b28gbXVjaC4gSXQgaXMgZGVmaW5lZCBhdCBoYWxmIHRoZSBkZWZhdWx0IHRyaW0g
dGhyZXNob2xkIGFzIGEKLSAgY29tcHJvbWlzZSBoZXVyaXN0aWMgdG8gb25seSBhdHRlbXB0IGNv
bnNvbGlkYXRpb24gaWYgaXQgaXMgbGlrZWx5Ci0gIHRvIGxlYWQgdG8gdHJpbW1pbmcuIEhvd2V2
ZXIsIGl0IGlzIG5vdCBkeW5hbWljYWxseSB0dW5hYmxlLCBzaW5jZQotICBjb25zb2xpZGF0aW9u
IHJlZHVjZXMgZnJhZ21lbnRhdGlvbiBzdXJyb3VuZGluZyBsb2FyZ2UgY2h1bmtzIGV2ZW4gCi0g
IGlmIHRyaW1taW5nIGlzIG5vdCB1c2VkLgotKi8KLQotI2RlZmluZSBGQVNUQklOX0NPTlNPTElE
QVRJT05fVEhSRVNIT0xEICBcCi0gICgodW5zaWduZWQgbG9uZykoREVGQVVMVF9UUklNX1RIUkVT
SE9MRCkgPj4gMSkKLQotLyoKLSAgU2luY2UgdGhlIGxvd2VzdCAyIGJpdHMgaW4gbWF4X2Zhc3Qg
ZG9uJ3QgbWF0dGVyIGluIHNpemUgY29tcGFyaXNvbnMsIAotICB0aGV5IGFyZSB1c2VkIGFzIGZs
YWdzLgotKi8KLQotLyoKLSAgQU5ZQ0hVTktTX0JJVCBoZWxkIGluIG1heF9mYXN0IGluZGljYXRl
cyB0aGF0IHRoZXJlIG1heSBiZSBhbnkKLSAgZnJlZWQgY2h1bmtzIGF0IGFsbC4gSXQgaXMgc2V0
IHRydWUgd2hlbiBlbnRlcmluZyBhIGNodW5rIGludG8gYW55Ci0gIGJpbi4KLSovCi0KLSNkZWZp
bmUgQU5ZQ0hVTktTX0JJVCAgICAgICAgKDFVKQotCi0jZGVmaW5lIGhhdmVfYW55Y2h1bmtzKE0p
ICAgICAoKChNKS0+bWF4X2Zhc3QgJiAgQU5ZQ0hVTktTX0JJVCkpCi0jZGVmaW5lIHNldF9hbnlj
aHVua3MoTSkgICAgICAoKE0pLT5tYXhfZmFzdCB8PSAgQU5ZQ0hVTktTX0JJVCkKLSNkZWZpbmUg
Y2xlYXJfYW55Y2h1bmtzKE0pICAgICgoTSktPm1heF9mYXN0ICY9IH5BTllDSFVOS1NfQklUKQot
Ci0vKgotICBGQVNUQ0hVTktTX0JJVCBoZWxkIGluIG1heF9mYXN0IGluZGljYXRlcyB0aGF0IHRo
ZXJlIGFyZSBwcm9iYWJseQotICBzb21lIGZhc3RiaW4gY2h1bmtzLiBJdCBpcyBzZXQgdHJ1ZSBv
biBlbnRlcmluZyBhIGNodW5rIGludG8gYW55Ci0gIGZhc3RiaW4sIGFuZCBjbGVhcmVkIG9ubHkg
aW4gbWFsbG9jX2NvbnNvbGlkYXRlLgotKi8KLQotI2RlZmluZSBGQVNUQ0hVTktTX0JJVCAgICAg
ICAgKDJVKQotCi0jZGVmaW5lIGhhdmVfZmFzdGNodW5rcyhNKSAgICgoKE0pLT5tYXhfZmFzdCAm
ICBGQVNUQ0hVTktTX0JJVCkpCi0jZGVmaW5lIHNldF9mYXN0Y2h1bmtzKE0pICAgICgoTSktPm1h
eF9mYXN0IHw9ICAoRkFTVENIVU5LU19CSVR8QU5ZQ0hVTktTX0JJVCkpCi0jZGVmaW5lIGNsZWFy
X2Zhc3RjaHVua3MoTSkgICgoTSktPm1heF9mYXN0ICY9IH4oRkFTVENIVU5LU19CSVQpKQotCi0v
KiAKLSAgIFNldCB2YWx1ZSBvZiBtYXhfZmFzdC4gCi0gICBVc2UgaW1wb3NzaWJseSBzbWFsbCB2
YWx1ZSBpZiAwLgotKi8KLQotI2RlZmluZSBzZXRfbWF4X2Zhc3QoTSwgcykgXAotICAoTSktPm1h
eF9mYXN0ID0gKCgocykgPT0gMCk/IFNNQUxMQklOX1dJRFRIOiByZXF1ZXN0MnNpemUocykpIHwg
XAotICAoKE0pLT5tYXhfZmFzdCAmICAoRkFTVENIVU5LU19CSVR8QU5ZQ0hVTktTX0JJVCkpCi0K
LSNkZWZpbmUgZ2V0X21heF9mYXN0KE0pIFwKLSAgKChNKS0+bWF4X2Zhc3QgJiB+KEZBU1RDSFVO
S1NfQklUIHwgQU5ZQ0hVTktTX0JJVCkpCi0KLQotLyoKLSAgbW9yZWNvcmVfcHJvcGVydGllcyBp
cyBhIHN0YXR1cyB3b3JkIGhvbGRpbmcgZHluYW1pY2FsbHkgZGlzY292ZXJlZAotICBvciBjb250
cm9sbGVkIHByb3BlcnRpZXMgb2YgdGhlIG1vcmVjb3JlIGZ1bmN0aW9uCi0qLwotCi0jZGVmaW5l
IE1PUkVDT1JFX0NPTlRJR1VPVVNfQklUICAoMVUpCi0KLSNkZWZpbmUgY29udGlndW91cyhNKSBc
Ci0gICAgICAgICgoKE0pLT5tb3JlY29yZV9wcm9wZXJ0aWVzICYgIE1PUkVDT1JFX0NPTlRJR1VP
VVNfQklUKSkKLSNkZWZpbmUgbm9uY29udGlndW91cyhNKSBcCi0gICAgICAgICgoKE0pLT5tb3Jl
Y29yZV9wcm9wZXJ0aWVzICYgIE1PUkVDT1JFX0NPTlRJR1VPVVNfQklUKSA9PSAwKQotI2RlZmlu
ZSBzZXRfY29udGlndW91cyhNKSBcCi0gICAgICAgICgoTSktPm1vcmVjb3JlX3Byb3BlcnRpZXMg
fD0gIE1PUkVDT1JFX0NPTlRJR1VPVVNfQklUKQotI2RlZmluZSBzZXRfbm9uY29udGlndW91cyhN
KSBcCi0gICAgICAgICgoTSktPm1vcmVjb3JlX3Byb3BlcnRpZXMgJj0gfk1PUkVDT1JFX0NPTlRJ
R1VPVVNfQklUKQotCi0KLS8qCi0gICAtLS0tLS0tLS0tLSBJbnRlcm5hbCBzdGF0ZSByZXByZXNl
bnRhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gLS0tLS0tLS0tLS0KLSovCi0KLXN0cnVjdCBtYWxs
b2Nfc3RhdGUgewotCi0gIC8qIFRoZSBtYXhpbXVtIGNodW5rIHNpemUgdG8gYmUgZWxpZ2libGUg
Zm9yIGZhc3RiaW4gKi8KLSAgSU5URVJOQUxfU0laRV9UICBtYXhfZmFzdDsgICAvKiBsb3cgMiBi
aXRzIHVzZWQgYXMgZmxhZ3MgKi8KLQotICAvKiBGYXN0YmlucyAqLwotICBtZmFzdGJpbnB0ciAg
ICAgIGZhc3RiaW5zW05GQVNUQklOU107Ci0KLSAgLyogQmFzZSBvZiB0aGUgdG9wbW9zdCBjaHVu
ayAtLSBub3Qgb3RoZXJ3aXNlIGtlcHQgaW4gYSBiaW4gKi8KLSAgbWNodW5rcHRyICAgICAgICB0
b3A7Ci0KLSAgLyogVGhlIHJlbWFpbmRlciBmcm9tIHRoZSBtb3N0IHJlY2VudCBzcGxpdCBvZiBh
IHNtYWxsIHJlcXVlc3QgKi8KLSAgbWNodW5rcHRyICAgICAgICBsYXN0X3JlbWFpbmRlcjsKLQot
ICAvKiBOb3JtYWwgYmlucyBwYWNrZWQgYXMgZGVzY3JpYmVkIGFib3ZlICovCi0gIG1jaHVua3B0
ciAgICAgICAgYmluc1tOQklOUyAqIDJdOwotCi0gIC8qIEJpdG1hcCBvZiBiaW5zLiBUcmFpbGlu
ZyB6ZXJvIG1hcCBoYW5kbGVzIGNhc2VzIG9mIGxhcmdlc3QgYmlubmVkIHNpemUgKi8KLSAgdW5z
aWduZWQgaW50ICAgICBiaW5tYXBbQklOTUFQU0laRSsxXTsKLQotICAvKiBUdW5hYmxlIHBhcmFt
ZXRlcnMgKi8KLSAgQ0hVTktfU0laRV9UICAgICB0cmltX3RocmVzaG9sZDsKLSAgSU5URVJOQUxf
U0laRV9UICB0b3BfcGFkOwotICBJTlRFUk5BTF9TSVpFX1QgIG1tYXBfdGhyZXNob2xkOwotCi0g
IC8qIE1lbW9yeSBtYXAgc3VwcG9ydCAqLwotICBpbnQgICAgICAgICAgICAgIG5fbW1hcHM7Ci0g
IGludCAgICAgICAgICAgICAgbl9tbWFwc19tYXg7Ci0gIGludCAgICAgICAgICAgICAgbWF4X25f
bW1hcHM7Ci0KLSAgLyogQ2FjaGUgbWFsbG9jX2dldHBhZ2VzaXplICovCi0gIHVuc2lnbmVkIGlu
dCAgICAgcGFnZXNpemU7ICAgIAotCi0gIC8qIFRyYWNrIHByb3BlcnRpZXMgb2YgTU9SRUNPUkUg
Ki8KLSAgdW5zaWduZWQgaW50ICAgICBtb3JlY29yZV9wcm9wZXJ0aWVzOwotCi0gIC8qIFN0YXRp
c3RpY3MgKi8KLSAgSU5URVJOQUxfU0laRV9UICBtbWFwcGVkX21lbTsKLSAgSU5URVJOQUxfU0la
RV9UICBzYnJrZWRfbWVtOwotICBJTlRFUk5BTF9TSVpFX1QgIG1heF9zYnJrZWRfbWVtOwotICBJ
TlRFUk5BTF9TSVpFX1QgIG1heF9tbWFwcGVkX21lbTsKLSAgSU5URVJOQUxfU0laRV9UICBtYXhf
dG90YWxfbWVtOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3N0YXRlICptc3RhdGU7Ci0K
LS8qIAotICAgVGhlcmUgaXMgZXhhY3RseSBvbmUgaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3QgaW4g
dGhpcyBtYWxsb2MuCi0gICBJZiB5b3UgYXJlIGFkYXB0aW5nIHRoaXMgbWFsbG9jIGluIGEgd2F5
IHRoYXQgZG9lcyBOT1QgdXNlIGEgc3RhdGljCi0gICBtYWxsb2Nfc3RhdGUsIHlvdSBNVVNUIGV4
cGxpY2l0bHkgemVyby1maWxsIGl0IGJlZm9yZSB1c2luZy4gVGhpcwotICAgbWFsbG9jIHJlbGll
cyBvbiB0aGUgcHJvcGVydHkgdGhhdCBtYWxsb2Nfc3RhdGUgaXMgaW5pdGlhbGl6ZWQgdG8KLSAg
IGFsbCB6ZXJvZXMgKGFzIGlzIHRydWUgb2YgQyBzdGF0aWNzKS4KLSovCi0KLXN0YXRpYyBzdHJ1
Y3QgbWFsbG9jX3N0YXRlIGF2XzsgIC8qIG5ldmVyIGRpcmVjdGx5IHJlZmVyZW5jZWQgKi8KLQot
LyoKLSAgIEFsbCB1c2VzIG9mIGF2XyBhcmUgdmlhIGdldF9tYWxsb2Nfc3RhdGUoKS4KLSAgIEF0
IG1vc3Qgb25lICJjYWxsIiB0byBnZXRfbWFsbG9jX3N0YXRlIGlzIG1hZGUgcGVyIGludm9jYXRp
b24gb2YKLSAgIHRoZSBwdWJsaWMgdmVyc2lvbnMgb2YgbWFsbG9jIGFuZCBmcmVlLCBidXQgb3Ro
ZXIgcm91dGluZXMKLSAgIHRoYXQgaW4gdHVybiBpbnZva2UgbWFsbG9jIGFuZC9vciBmcmVlIG1h
eSBjYWxsIG1vcmUgdGhlbiBvbmNlLiAKLSAgIEFsc28sIGl0IGlzIGNhbGxlZCBpbiBjaGVjayog
cm91dGluZXMgaWYgREVCVUcgaXMgc2V0LgotKi8KLQotI2RlZmluZSBnZXRfbWFsbG9jX3N0YXRl
KCkgKCYoYXZfKSkKLQotLyoKLSAgSW5pdGlhbGl6ZSBhIG1hbGxvY19zdGF0ZSBzdHJ1Y3QuCi0K
LSAgVGhpcyBpcyBjYWxsZWQgb25seSBmcm9tIHdpdGhpbiBtYWxsb2NfY29uc29saWRhdGUsIHdo
aWNoIG5lZWRzCi0gIGJlIGNhbGxlZCBpbiB0aGUgc2FtZSBjb250ZXh0cyBhbnl3YXkuICBJdCBp
cyBuZXZlciBjYWxsZWQgZGlyZWN0bHkKLSAgb3V0c2lkZSBvZiBtYWxsb2NfY29uc29saWRhdGUg
YmVjYXVzZSBzb21lIG9wdGltaXppbmcgY29tcGlsZXJzIHRyeQotICB0byBpbmxpbmUgaXQgYXQg
YWxsIGNhbGwgcG9pbnRzLCB3aGljaCB0dXJucyBvdXQgbm90IHRvIGJlIGFuCi0gIG9wdGltaXph
dGlvbiBhdCBhbGwuIChJbmxpbmluZyBpdCBpbiBtYWxsb2NfY29uc29saWRhdGUgaXMgZmluZSB0
aG91Z2guKQotKi8KLQotI2lmIF9fU1REX0MKLXN0YXRpYyB2b2lkIG1hbGxvY19pbml0X3N0YXRl
KG1zdGF0ZSBhdikKLSNlbHNlCi1zdGF0aWMgdm9pZCBtYWxsb2NfaW5pdF9zdGF0ZShhdikgbXN0
YXRlIGF2OwotI2VuZGlmCi17Ci0gIGludCAgICAgaTsKLSAgbWJpbnB0ciBiaW47Ci0gIAotICAv
KiBFc3RhYmxpc2ggY2lyY3VsYXIgbGlua3MgZm9yIG5vcm1hbCBiaW5zICovCi0gIGZvciAoaSA9
IDE7IGkgPCBOQklOUzsgKytpKSB7IAotICAgIGJpbiA9IGJpbl9hdChhdixpKTsKLSAgICBiaW4t
PmZkID0gYmluLT5iayA9IGJpbjsKLSAgfQotCi0gIGF2LT50b3BfcGFkICAgICAgICA9IERFRkFV
TFRfVE9QX1BBRDsKLSAgYXYtPm5fbW1hcHNfbWF4ICAgID0gREVGQVVMVF9NTUFQX01BWDsKLSAg
YXYtPm1tYXBfdGhyZXNob2xkID0gREVGQVVMVF9NTUFQX1RIUkVTSE9MRDsKLSAgYXYtPnRyaW1f
dGhyZXNob2xkID0gREVGQVVMVF9UUklNX1RIUkVTSE9MRDsKLQotI2lmIE1PUkVDT1JFX0NPTlRJ
R1VPVVMKLSAgc2V0X2NvbnRpZ3VvdXMoYXYpOwotI2Vsc2UKLSAgc2V0X25vbmNvbnRpZ3VvdXMo
YXYpOwotI2VuZGlmCi0KLQotICBzZXRfbWF4X2Zhc3QoYXYsIERFRkFVTFRfTVhGQVNUKTsKLQot
ICBhdi0+dG9wICAgICAgICAgICAgPSBpbml0aWFsX3RvcChhdik7Ci0gIGF2LT5wYWdlc2l6ZSAg
ICAgICA9IG1hbGxvY19nZXRwYWdlc2l6ZTsKLX0KLQotLyogCi0gICBPdGhlciBpbnRlcm5hbCB1
dGlsaXRpZXMgb3BlcmF0aW5nIG9uIG1zdGF0ZXMKLSovCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMg
Vm9pZF90KiAgc1lTTUFMTE9jKElOVEVSTkFMX1NJWkVfVCwgbXN0YXRlKTsKLSNpZm5kZWYgTU9S
RUNPUkVfQ0FOTk9UX1RSSU0KLXN0YXRpYyBpbnQgICAgICBzWVNUUkltKHNpemVfdCwgbXN0YXRl
KTsKLSNlbmRpZgotc3RhdGljIHZvaWQgICAgIG1hbGxvY19jb25zb2xpZGF0ZShtc3RhdGUpOwot
c3RhdGljIFZvaWRfdCoqIGlBTExPYyhzaXplX3QsIHNpemVfdCosIGludCwgVm9pZF90KiopOwot
I2Vsc2UKLXN0YXRpYyBWb2lkX3QqICBzWVNNQUxMT2MoKTsKLXN0YXRpYyBpbnQgICAgICBzWVNU
UkltKCk7Ci1zdGF0aWMgdm9pZCAgICAgbWFsbG9jX2NvbnNvbGlkYXRlKCk7Ci1zdGF0aWMgVm9p
ZF90KiogaUFMTE9jKCk7Ci0jZW5kaWYKLQotLyoKLSAgRGVidWdnaW5nIHN1cHBvcnQKLQotICBU
aGVzZSByb3V0aW5lcyBtYWtlIGEgbnVtYmVyIG9mIGFzc2VydGlvbnMgYWJvdXQgdGhlIHN0YXRl
cwotICBvZiBkYXRhIHN0cnVjdHVyZXMgdGhhdCBzaG91bGQgYmUgdHJ1ZSBhdCBhbGwgdGltZXMu
IElmIGFueQotICBhcmUgbm90IHRydWUsIGl0J3MgdmVyeSBsaWtlbHkgdGhhdCBhIHVzZXIgcHJv
Z3JhbSBoYXMgc29tZWhvdwotICB0cmFzaGVkIG1lbW9yeS4gKEl0J3MgYWxzbyBwb3NzaWJsZSB0
aGF0IHRoZXJlIGlzIGEgY29kaW5nIGVycm9yCi0gIGluIG1hbGxvYy4gSW4gd2hpY2ggY2FzZSwg
cGxlYXNlIHJlcG9ydCBpdCEpCi0qLwotCi0jaWYgISBERUJVRwotCi0jZGVmaW5lIGNoZWNrX2No
dW5rKFApCi0jZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoUCkKLSNkZWZpbmUgY2hlY2tfaW51c2Vf
Y2h1bmsoUCkKLSNkZWZpbmUgY2hlY2tfcmVtYWxsb2NlZF9jaHVuayhQLE4pCi0jZGVmaW5lIGNo
ZWNrX21hbGxvY2VkX2NodW5rKFAsTikKLSNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKCkKLQot
I2Vsc2UKLSNkZWZpbmUgY2hlY2tfY2h1bmsoUCkgICAgICAgICAgICAgIGRvX2NoZWNrX2NodW5r
KFApCi0jZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoUCkgICAgICAgICBkb19jaGVja19mcmVlX2No
dW5rKFApCi0jZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKFApICAgICAgICBkb19jaGVja19pbnVz
ZV9jaHVuayhQKQotI2RlZmluZSBjaGVja19yZW1hbGxvY2VkX2NodW5rKFAsTikgZG9fY2hlY2tf
cmVtYWxsb2NlZF9jaHVuayhQLE4pCi0jZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKFAsTikg
ICBkb19jaGVja19tYWxsb2NlZF9jaHVuayhQLE4pCi0jZGVmaW5lIGNoZWNrX21hbGxvY19zdGF0
ZSgpICAgICAgICBkb19jaGVja19tYWxsb2Nfc3RhdGUoKQotCi0vKgotICBQcm9wZXJ0aWVzIG9m
IGFsbCBjaHVua3MKLSovCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMgdm9pZCBkb19jaGVja19jaHVu
ayhtY2h1bmtwdHIgcCkKLSNlbHNlCi1zdGF0aWMgdm9pZCBkb19jaGVja19jaHVuayhwKSBtY2h1
bmtwdHIgcDsKLSNlbmRpZgotewotICBtc3RhdGUgYXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0g
IENIVU5LX1NJWkVfVCAgc3ogPSBjaHVua3NpemUocCk7Ci0gIC8qIG1pbiBhbmQgbWF4IHBvc3Np
YmxlIGFkZHJlc3NlcyBhc3N1bWluZyBjb250aWd1b3VzIGFsbG9jYXRpb24gKi8KLSAgY2hhciog
bWF4X2FkZHJlc3MgPSAoY2hhciopKGF2LT50b3ApICsgY2h1bmtzaXplKGF2LT50b3ApOwotICBj
aGFyKiBtaW5fYWRkcmVzcyA9IG1heF9hZGRyZXNzIC0gYXYtPnNicmtlZF9tZW07Ci0KLSAgaWYg
KCFjaHVua19pc19tbWFwcGVkKHApKSB7Ci0gICAgCi0gICAgLyogSGFzIGxlZ2FsIGFkZHJlc3Mg
Li4uICovCi0gICAgaWYgKHAgIT0gYXYtPnRvcCkgewotICAgICAgaWYgKGNvbnRpZ3VvdXMoYXYp
KSB7Ci0gICAgICAgIGFzc2VydCgoKGNoYXIqKXApID49IG1pbl9hZGRyZXNzKTsKLSAgICAgICAg
YXNzZXJ0KCgoY2hhciopcCArIHN6KSA8PSAoKGNoYXIqKShhdi0+dG9wKSkpOwotICAgICAgfQot
ICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIC8qIHRvcCBzaXplIGlzIGFsd2F5cyBhdCBsZWFzdCBN
SU5TSVpFICovCi0gICAgICBhc3NlcnQoKENIVU5LX1NJWkVfVCkoc3opID49IE1JTlNJWkUpOwot
ICAgICAgLyogdG9wIHByZWRlY2Vzc29yIGFsd2F5cyBtYXJrZWQgaW51c2UgKi8KLSAgICAgIGFz
c2VydChwcmV2X2ludXNlKHApKTsKLSAgICB9Ci0gICAgICAKLSAgfQotICBlbHNlIHsKLSNpZiBI
QVZFX01NQVAKLSAgICAvKiBhZGRyZXNzIGlzIG91dHNpZGUgbWFpbiBoZWFwICAqLwotICAgIGlm
IChjb250aWd1b3VzKGF2KSAmJiBhdi0+dG9wICE9IGluaXRpYWxfdG9wKGF2KSkgewotICAgICAg
YXNzZXJ0KCgoY2hhciopcCkgPCBtaW5fYWRkcmVzcyB8fCAoKGNoYXIqKXApID4gbWF4X2FkZHJl
c3MpOwotICAgIH0KLSAgICAvKiBjaHVuayBpcyBwYWdlLWFsaWduZWQgKi8KLSAgICBhc3NlcnQo
KChwLT5wcmV2X3NpemUgKyBzeikgJiAoYXYtPnBhZ2VzaXplLTEpKSA9PSAwKTsKLSAgICAvKiBt
ZW0gaXMgYWxpZ25lZCAqLwotICAgIGFzc2VydChhbGlnbmVkX09LKGNodW5rMm1lbShwKSkpOwot
I2Vsc2UKLSAgICAvKiBmb3JjZSBhbiBhcHByb3ByaWF0ZSBhc3NlcnQgdmlvbGF0aW9uIGlmIGRl
YnVnIHNldCAqLwotICAgIGFzc2VydCghY2h1bmtfaXNfbW1hcHBlZChwKSk7Ci0jZW5kaWYKLSAg
fQotfQotCi0vKgotICBQcm9wZXJ0aWVzIG9mIGZyZWUgY2h1bmtzCi0qLwotCi0jaWYgX19TVERf
Qwotc3RhdGljIHZvaWQgZG9fY2hlY2tfZnJlZV9jaHVuayhtY2h1bmtwdHIgcCkKLSNlbHNlCi1z
dGF0aWMgdm9pZCBkb19jaGVja19mcmVlX2NodW5rKHApIG1jaHVua3B0ciBwOwotI2VuZGlmCi17
Ci0gIG1zdGF0ZSBhdiA9IGdldF9tYWxsb2Nfc3RhdGUoKTsKLQotICBJTlRFUk5BTF9TSVpFX1Qg
c3ogPSBwLT5zaXplICYgflBSRVZfSU5VU0U7Ci0gIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfYXRf
b2Zmc2V0KHAsIHN6KTsKLQotICBkb19jaGVja19jaHVuayhwKTsKLQotICAvKiBDaHVuayBtdXN0
IGNsYWltIHRvIGJlIGZyZWUgLi4uICovCi0gIGFzc2VydCghaW51c2UocCkpOwotICBhc3NlcnQg
KCFjaHVua19pc19tbWFwcGVkKHApKTsKLQotICAvKiBVbmxlc3MgYSBzcGVjaWFsIG1hcmtlciwg
bXVzdCBoYXZlIE9LIGZpZWxkcyAqLwotICBpZiAoKENIVU5LX1NJWkVfVCkoc3opID49IE1JTlNJ
WkUpCi0gIHsKLSAgICBhc3NlcnQoKHN6ICYgTUFMTE9DX0FMSUdOX01BU0spID09IDApOwotICAg
IGFzc2VydChhbGlnbmVkX09LKGNodW5rMm1lbShwKSkpOwotICAgIC8qIC4uLiBtYXRjaGluZyBm
b290ZXIgZmllbGQgKi8KLSAgICBhc3NlcnQobmV4dC0+cHJldl9zaXplID09IHN6KTsKLSAgICAv
KiAuLi4gYW5kIGlzIGZ1bGx5IGNvbnNvbGlkYXRlZCAqLwotICAgIGFzc2VydChwcmV2X2ludXNl
KHApKTsKLSAgICBhc3NlcnQgKG5leHQgPT0gYXYtPnRvcCB8fCBpbnVzZShuZXh0KSk7Ci0KLSAg
ICAvKiAuLi4gYW5kIGhhcyBtaW5pbWFsbHkgc2FuZSBsaW5rcyAqLwotICAgIGFzc2VydChwLT5m
ZC0+YmsgPT0gcCk7Ci0gICAgYXNzZXJ0KHAtPmJrLT5mZCA9PSBwKTsKLSAgfQotICBlbHNlIC8q
IG1hcmtlcnMgYXJlIGFsd2F5cyBvZiBzaXplIFNJWkVfU1ogKi8KLSAgICBhc3NlcnQoc3ogPT0g
U0laRV9TWik7Ci19Ci0KLS8qCi0gIFByb3BlcnRpZXMgb2YgaW51c2UgY2h1bmtzCi0qLwotCi0j
aWYgX19TVERfQwotc3RhdGljIHZvaWQgZG9fY2hlY2tfaW51c2VfY2h1bmsobWNodW5rcHRyIHAp
Ci0jZWxzZQotc3RhdGljIHZvaWQgZG9fY2hlY2tfaW51c2VfY2h1bmsocCkgbWNodW5rcHRyIHA7
Ci0jZW5kaWYKLXsKLSAgbXN0YXRlIGF2ID0gZ2V0X21hbGxvY19zdGF0ZSgpOwotICBtY2h1bmtw
dHIgbmV4dDsKLSAgZG9fY2hlY2tfY2h1bmsocCk7Ci0KLSAgaWYgKGNodW5rX2lzX21tYXBwZWQo
cCkpCi0gICAgcmV0dXJuOyAvKiBtbWFwcGVkIGNodW5rcyBoYXZlIG5vIG5leHQvcHJldiAqLwot
Ci0gIC8qIENoZWNrIHdoZXRoZXIgaXQgY2xhaW1zIHRvIGJlIGluIHVzZSAuLi4gKi8KLSAgYXNz
ZXJ0KGludXNlKHApKTsKLQotICBuZXh0ID0gbmV4dF9jaHVuayhwKTsKLQotICAvKiAuLi4gYW5k
IGlzIHN1cnJvdW5kZWQgYnkgT0sgY2h1bmtzLgotICAgIFNpbmNlIG1vcmUgdGhpbmdzIGNhbiBi
ZSBjaGVja2VkIHdpdGggZnJlZSBjaHVua3MgdGhhbiBpbnVzZSBvbmVzLAotICAgIGlmIGFuIGlu
dXNlIGNodW5rIGJvcmRlcnMgdGhlbSBhbmQgZGVidWcgaXMgb24sIGl0J3Mgd29ydGggZG9pbmcg
dGhlbS4KLSAgKi8KLSAgaWYgKCFwcmV2X2ludXNlKHApKSAgewotICAgIC8qIE5vdGUgdGhhdCB3
ZSBjYW5ub3QgZXZlbiBsb29rIGF0IHByZXYgdW5sZXNzIGl0IGlzIG5vdCBpbnVzZSAqLwotICAg
IG1jaHVua3B0ciBwcnYgPSBwcmV2X2NodW5rKHApOwotICAgIGFzc2VydChuZXh0X2NodW5rKHBy
dikgPT0gcCk7Ci0gICAgZG9fY2hlY2tfZnJlZV9jaHVuayhwcnYpOwotICB9Ci0KLSAgaWYgKG5l
eHQgPT0gYXYtPnRvcCkgewotICAgIGFzc2VydChwcmV2X2ludXNlKG5leHQpKTsKLSAgICBhc3Nl
cnQoY2h1bmtzaXplKG5leHQpID49IE1JTlNJWkUpOwotICB9Ci0gIGVsc2UgaWYgKCFpbnVzZShu
ZXh0KSkKLSAgICBkb19jaGVja19mcmVlX2NodW5rKG5leHQpOwotfQotCi0vKgotICBQcm9wZXJ0
aWVzIG9mIGNodW5rcyByZWN5Y2xlZCBmcm9tIGZhc3RiaW5zCi0qLwotCi0jaWYgX19TVERfQwot
c3RhdGljIHZvaWQgZG9fY2hlY2tfcmVtYWxsb2NlZF9jaHVuayhtY2h1bmtwdHIgcCwgSU5URVJO
QUxfU0laRV9UIHMpCi0jZWxzZQotc3RhdGljIHZvaWQgZG9fY2hlY2tfcmVtYWxsb2NlZF9jaHVu
ayhwLCBzKSBtY2h1bmtwdHIgcDsgSU5URVJOQUxfU0laRV9UIHM7Ci0jZW5kaWYKLXsKLSAgSU5U
RVJOQUxfU0laRV9UIHN6ID0gcC0+c2l6ZSAmIH5QUkVWX0lOVVNFOwotCi0gIGRvX2NoZWNrX2lu
dXNlX2NodW5rKHApOwotCi0gIC8qIExlZ2FsIHNpemUgLi4uICovCi0gIGFzc2VydCgoc3ogJiBN
QUxMT0NfQUxJR05fTUFTSykgPT0gMCk7Ci0gIGFzc2VydCgoQ0hVTktfU0laRV9UKShzeikgPj0g
TUlOU0laRSk7Ci0gIC8qIC4uLiBhbmQgYWxpZ25tZW50ICovCi0gIGFzc2VydChhbGlnbmVkX09L
KGNodW5rMm1lbShwKSkpOwotICAvKiBjaHVuayBpcyBsZXNzIHRoYW4gTUlOU0laRSBtb3JlIHRo
YW4gcmVxdWVzdCAqLwotICBhc3NlcnQoKGxvbmcpKHN6KSAtIChsb25nKShzKSA+PSAwKTsKLSAg
YXNzZXJ0KChsb25nKShzeikgLSAobG9uZykocyArIE1JTlNJWkUpIDwgMCk7Ci19Ci0KLS8qCi0g
IFByb3BlcnRpZXMgb2Ygbm9ucmVjeWNsZWQgY2h1bmtzIGF0IHRoZSBwb2ludCB0aGV5IGFyZSBt
YWxsb2NlZAotKi8KLQotI2lmIF9fU1REX0MKLXN0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY2Vk
X2NodW5rKG1jaHVua3B0ciBwLCBJTlRFUk5BTF9TSVpFX1QgcykKLSNlbHNlCi1zdGF0aWMgdm9p
ZCBkb19jaGVja19tYWxsb2NlZF9jaHVuayhwLCBzKSBtY2h1bmtwdHIgcDsgSU5URVJOQUxfU0la
RV9UIHM7Ci0jZW5kaWYKLXsKLSAgLyogc2FtZSBhcyByZWN5Y2xlZCBjYXNlIC4uLiAqLwotICBk
b19jaGVja19yZW1hbGxvY2VkX2NodW5rKHAsIHMpOwotCi0gIC8qCi0gICAgLi4uIHBsdXMsICBt
dXN0IG9iZXkgaW1wbGVtZW50YXRpb24gaW52YXJpYW50IHRoYXQgcHJldl9pbnVzZSBpcwotICAg
IGFsd2F5cyB0cnVlIG9mIGFueSBhbGxvY2F0ZWQgY2h1bms7IGkuZS4sIHRoYXQgZWFjaCBhbGxv
Y2F0ZWQKLSAgICBjaHVuayBib3JkZXJzIGVpdGhlciBhIHByZXZpb3VzbHkgYWxsb2NhdGVkIGFu
ZCBzdGlsbCBpbi11c2UKLSAgICBjaHVuaywgb3IgdGhlIGJhc2Ugb2YgaXRzIG1lbW9yeSBhcmVu
YS4gVGhpcyBpcyBlbnN1cmVkCi0gICAgYnkgbWFraW5nIGFsbCBhbGxvY2F0aW9ucyBmcm9tIHRo
ZSB0aGUgYGxvd2VzdCcgcGFydCBvZiBhbnkgZm91bmQKLSAgICBjaHVuay4gIFRoaXMgZG9lcyBu
b3QgbmVjZXNzYXJpbHkgaG9sZCBob3dldmVyIGZvciBjaHVua3MKLSAgICByZWN5Y2xlZCB2aWEg
ZmFzdGJpbnMuCi0gICovCi0KLSAgYXNzZXJ0KHByZXZfaW51c2UocCkpOwotfQotCi0KLS8qCi0g
IFByb3BlcnRpZXMgb2YgbWFsbG9jX3N0YXRlLgotCi0gIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3Ig
ZGVidWdnaW5nIG1hbGxvYywgYXMgd2VsbCBhcyBkZXRlY3RpbmcgdXNlcgotICBwcm9ncmFtbWVy
IGVycm9ycyB0aGF0IHNvbWVob3cgd3JpdGUgaW50byBtYWxsb2Nfc3RhdGUuCi0KLSAgSWYgeW91
IGFyZSBleHRlbmRpbmcgb3IgZXhwZXJpbWVudGluZyB3aXRoIHRoaXMgbWFsbG9jLCB5b3UgY2Fu
Ci0gIHByb2JhYmx5IGZpZ3VyZSBvdXQgaG93IHRvIGhhY2sgdGhpcyByb3V0aW5lIHRvIHByaW50
IG91dCBvcgotICBkaXNwbGF5IGNodW5rIGFkZHJlc3Nlcywgc2l6ZXMsIGJpbnMsIGFuZCBvdGhl
ciBpbnN0cnVtZW50YXRpb24uCi0qLwotCi1zdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2Nfc3Rh
dGUoKQotewotICBtc3RhdGUgYXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0gIHVuc2lnbmVkIGlu
dCBpOwotICBtY2h1bmtwdHIgcDsKLSAgbWNodW5rcHRyIHE7Ci0gIG1iaW5wdHIgYjsKLSAgdW5z
aWduZWQgaW50IGJpbmJpdDsKLSAgaW50IGVtcHR5OwotICB1bnNpZ25lZCBpbnQgaWR4OwotICBJ
TlRFUk5BTF9TSVpFX1Qgc2l6ZTsKLSAgQ0hVTktfU0laRV9UICB0b3RhbCA9IDA7Ci0gIGludCBt
YXhfZmFzdF9iaW47Ci0KLSAgLyogaW50ZXJuYWwgc2l6ZV90IG11c3QgYmUgbm8gd2lkZXIgdGhh
biBwb2ludGVyIHR5cGUgKi8KLSAgYXNzZXJ0KHNpemVvZihJTlRFUk5BTF9TSVpFX1QpIDw9IHNp
emVvZihjaGFyKikpOwotCi0gIC8qIGFsaWdubWVudCBpcyBhIHBvd2VyIG9mIDIgKi8KLSAgYXNz
ZXJ0KChNQUxMT0NfQUxJR05NRU5UICYgKE1BTExPQ19BTElHTk1FTlQtMSkpID09IDApOwotCi0g
IC8qIGNhbm5vdCBydW4gcmVtYWluaW5nIGNoZWNrcyB1bnRpbCBmdWxseSBpbml0aWFsaXplZCAq
LwotICBpZiAoYXYtPnRvcCA9PSAwIHx8IGF2LT50b3AgPT0gaW5pdGlhbF90b3AoYXYpKQotICAg
IHJldHVybjsKLQotICAvKiBwYWdlc2l6ZSBpcyBhIHBvd2VyIG9mIDIgKi8KLSAgYXNzZXJ0KChh
di0+cGFnZXNpemUgJiAoYXYtPnBhZ2VzaXplLTEpKSA9PSAwKTsKLQotICAvKiBwcm9wZXJ0aWVz
IG9mIGZhc3RiaW5zICovCi0KLSAgLyogbWF4X2Zhc3QgaXMgaW4gYWxsb3dlZCByYW5nZSAqLwot
ICBhc3NlcnQoZ2V0X21heF9mYXN0KGF2KSA8PSByZXF1ZXN0MnNpemUoTUFYX0ZBU1RfU0laRSkp
OwotCi0gIG1heF9mYXN0X2JpbiA9IGZhc3RiaW5faW5kZXgoYXYtPm1heF9mYXN0KTsKLQotICBm
b3IgKGkgPSAwOyBpIDwgTkZBU1RCSU5TOyArK2kpIHsKLSAgICBwID0gYXYtPmZhc3RiaW5zW2ld
OwotCi0gICAgLyogYWxsIGJpbnMgcGFzdCBtYXhfZmFzdCBhcmUgZW1wdHkgKi8KLSAgICBpZiAo
aSA+IG1heF9mYXN0X2JpbikKLSAgICAgIGFzc2VydChwID09IDApOwotCi0gICAgd2hpbGUgKHAg
IT0gMCkgewotICAgICAgLyogZWFjaCBjaHVuayBjbGFpbXMgdG8gYmUgaW51c2UgKi8KLSAgICAg
IGRvX2NoZWNrX2ludXNlX2NodW5rKHApOwotICAgICAgdG90YWwgKz0gY2h1bmtzaXplKHApOwot
ICAgICAgLyogY2h1bmsgYmVsb25ncyBpbiB0aGlzIGJpbiAqLwotICAgICAgYXNzZXJ0KGZhc3Ri
aW5faW5kZXgoY2h1bmtzaXplKHApKSA9PSBpKTsKLSAgICAgIHAgPSBwLT5mZDsKLSAgICB9Ci0g
IH0KLQotICBpZiAodG90YWwgIT0gMCkKLSAgICBhc3NlcnQoaGF2ZV9mYXN0Y2h1bmtzKGF2KSk7
Ci0gIGVsc2UgaWYgKCFoYXZlX2Zhc3RjaHVua3MoYXYpKQotICAgIGFzc2VydCh0b3RhbCA9PSAw
KTsKLQotICAvKiBjaGVjayBub3JtYWwgYmlucyAqLwotICBmb3IgKGkgPSAxOyBpIDwgTkJJTlM7
ICsraSkgewotICAgIGIgPSBiaW5fYXQoYXYsaSk7Ci0KLSAgICAvKiBiaW5tYXAgaXMgYWNjdXJh
dGUgKGV4Y2VwdCBmb3IgYmluIDEgPT0gdW5zb3J0ZWRfY2h1bmtzKSAqLwotICAgIGlmIChpID49
IDIpIHsKLSAgICAgIGJpbmJpdCA9IGdldF9iaW5tYXAoYXYsaSk7Ci0gICAgICBlbXB0eSA9IGxh
c3QoYikgPT0gYjsKLSAgICAgIGlmICghYmluYml0KQotICAgICAgICBhc3NlcnQoZW1wdHkpOwot
ICAgICAgZWxzZSBpZiAoIWVtcHR5KQotICAgICAgICBhc3NlcnQoYmluYml0KTsKLSAgICB9Ci0K
LSAgICBmb3IgKHAgPSBsYXN0KGIpOyBwICE9IGI7IHAgPSBwLT5iaykgewotICAgICAgLyogZWFj
aCBjaHVuayBjbGFpbXMgdG8gYmUgZnJlZSAqLwotICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhw
KTsKLSAgICAgIHNpemUgPSBjaHVua3NpemUocCk7Ci0gICAgICB0b3RhbCArPSBzaXplOwotICAg
ICAgaWYgKGkgPj0gMikgewotICAgICAgICAvKiBjaHVuayBiZWxvbmdzIGluIGJpbiAqLwotICAg
ICAgICBpZHggPSBiaW5faW5kZXgoc2l6ZSk7Ci0gICAgICAgIGFzc2VydChpZHggPT0gaSk7Ci0g
ICAgICAgIC8qIGxpc3RzIGFyZSBzb3J0ZWQgKi8KLSAgICAgICAgaWYgKChDSFVOS19TSVpFX1Qp
IHNpemUgPj0gKENIVU5LX1NJWkVfVCkoRklSU1RfU09SVEVEX0JJTl9TSVpFKSkgewotICAgICAg
ICAgIGFzc2VydChwLT5iayA9PSBiIHx8IAotICAgICAgICAgICAgICAgICAoQ0hVTktfU0laRV9U
KWNodW5rc2l6ZShwLT5iaykgPj0gCi0gICAgICAgICAgICAgICAgIChDSFVOS19TSVpFX1QpY2h1
bmtzaXplKHApKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyogY2h1bmsgaXMgZm9sbG93
ZWQgYnkgYSBsZWdhbCBjaGFpbiBvZiBpbnVzZSBjaHVua3MgKi8KLSAgICAgIGZvciAocSA9IG5l
eHRfY2h1bmsocCk7Ci0gICAgICAgICAgIChxICE9IGF2LT50b3AgJiYgaW51c2UocSkgJiYgCi0g
ICAgICAgICAgICAgKENIVU5LX1NJWkVfVCkoY2h1bmtzaXplKHEpKSA+PSBNSU5TSVpFKTsKLSAg
ICAgICAgICAgcSA9IG5leHRfY2h1bmsocSkpCi0gICAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5r
KHEpOwotICAgIH0KLSAgfQotCi0gIC8qIHRvcCBjaHVuayBpcyBPSyAqLwotICBjaGVja19jaHVu
ayhhdi0+dG9wKTsKLQotICAvKiBzYW5pdHkgY2hlY2tzIGZvciBzdGF0aXN0aWNzICovCi0KLSAg
YXNzZXJ0KHRvdGFsIDw9IChDSFVOS19TSVpFX1QpKGF2LT5tYXhfdG90YWxfbWVtKSk7Ci0gIGFz
c2VydChhdi0+bl9tbWFwcyA+PSAwKTsKLSAgYXNzZXJ0KGF2LT5uX21tYXBzIDw9IGF2LT5tYXhf
bl9tbWFwcyk7Ci0KLSAgYXNzZXJ0KChDSFVOS19TSVpFX1QpKGF2LT5zYnJrZWRfbWVtKSA8PQot
ICAgICAgICAgKENIVU5LX1NJWkVfVCkoYXYtPm1heF9zYnJrZWRfbWVtKSk7Ci0KLSAgYXNzZXJ0
KChDSFVOS19TSVpFX1QpKGF2LT5tbWFwcGVkX21lbSkgPD0KLSAgICAgICAgIChDSFVOS19TSVpF
X1QpKGF2LT5tYXhfbW1hcHBlZF9tZW0pKTsKLQotICBhc3NlcnQoKENIVU5LX1NJWkVfVCkoYXYt
Pm1heF90b3RhbF9tZW0pID49Ci0gICAgICAgICAoQ0hVTktfU0laRV9UKShhdi0+bW1hcHBlZF9t
ZW0pICsgKENIVU5LX1NJWkVfVCkoYXYtPnNicmtlZF9tZW0pKTsKLX0KLSNlbmRpZgotCi0KLS8q
IC0tLS0tLS0tLS0tIFJvdXRpbmVzIGRlYWxpbmcgd2l0aCBzeXN0ZW0gYWxsb2NhdGlvbiAtLS0t
LS0tLS0tLS0tLSAqLwotCi0vKgotICBzeXNtYWxsb2MgaGFuZGxlcyBtYWxsb2MgY2FzZXMgcmVx
dWlyaW5nIG1vcmUgbWVtb3J5IGZyb20gdGhlIHN5c3RlbS4KLSAgT24gZW50cnksIGl0IGlzIGFz
c3VtZWQgdGhhdCBhdi0+dG9wIGRvZXMgbm90IGhhdmUgZW5vdWdoCi0gIHNwYWNlIHRvIHNlcnZp
Y2UgcmVxdWVzdCBmb3IgbmIgYnl0ZXMsIHRodXMgcmVxdWlyaW5nIHRoYXQgYXYtPnRvcAotICBi
ZSBleHRlbmRlZCBvciByZXBsYWNlZC4KLSovCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMgVm9pZF90
KiBzWVNNQUxMT2MoSU5URVJOQUxfU0laRV9UIG5iLCBtc3RhdGUgYXYpCi0jZWxzZQotc3RhdGlj
IFZvaWRfdCogc1lTTUFMTE9jKG5iLCBhdikgSU5URVJOQUxfU0laRV9UIG5iOyBtc3RhdGUgYXY7
Ci0jZW5kaWYKLXsKLSAgbWNodW5rcHRyICAgICAgIG9sZF90b3A7ICAgICAgICAvKiBpbmNvbWlu
ZyB2YWx1ZSBvZiBhdi0+dG9wICovCi0gIElOVEVSTkFMX1NJWkVfVCBvbGRfc2l6ZTsgICAgICAg
LyogaXRzIHNpemUgKi8KLSAgY2hhciogICAgICAgICAgIG9sZF9lbmQ7ICAgICAgICAvKiBpdHMg
ZW5kIGFkZHJlc3MgKi8KLQotICBsb25nICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgIC8qIGFy
ZyB0byBmaXJzdCBNT1JFQ09SRSBvciBtbWFwIGNhbGwgKi8KLSAgY2hhciogICAgICAgICAgIGJy
azsgICAgICAgICAgICAvKiByZXR1cm4gdmFsdWUgZnJvbSBNT1JFQ09SRSAqLwotCi0gIGxvbmcg
ICAgICAgICAgICBjb3JyZWN0aW9uOyAgICAgLyogYXJnIHRvIDJuZCBNT1JFQ09SRSBjYWxsICov
Ci0gIGNoYXIqICAgICAgICAgICBzbmRfYnJrOyAgICAgICAgLyogMm5kIHJldHVybiB2YWwgKi8K
LQotICBJTlRFUk5BTF9TSVpFX1QgZnJvbnRfbWlzYWxpZ247IC8qIHVudXNhYmxlIGJ5dGVzIGF0
IGZyb250IG9mIG5ldyBzcGFjZSAqLwotICBJTlRFUk5BTF9TSVpFX1QgZW5kX21pc2FsaWduOyAg
IC8qIHBhcnRpYWwgcGFnZSBsZWZ0IGF0IGVuZCBvZiBuZXcgc3BhY2UgKi8KLSAgY2hhciogICAg
ICAgICAgIGFsaWduZWRfYnJrOyAgICAvKiBhbGlnbmVkIG9mZnNldCBpbnRvIGJyayAqLwotCi0g
IG1jaHVua3B0ciAgICAgICBwOyAgICAgICAgICAgICAgLyogdGhlIGFsbG9jYXRlZC9yZXR1cm5l
ZCBjaHVuayAqLwotICBtY2h1bmtwdHIgICAgICAgcmVtYWluZGVyOyAgICAgIC8qIHJlbWFpbmRl
ciBmcm9tIGFsbG9jYXRpb24gKi8KLSAgQ0hVTktfU0laRV9UICAgIHJlbWFpbmRlcl9zaXplOyAv
KiBpdHMgc2l6ZSAqLwotCi0gIENIVU5LX1NJWkVfVCAgICBzdW07ICAgICAgICAgICAgLyogZm9y
IHVwZGF0aW5nIHN0YXRzICovCi0KLSAgc2l6ZV90ICAgICAgICAgIHBhZ2VtYXNrICA9IGF2LT5w
YWdlc2l6ZSAtIDE7Ci0KLSAgLyoKLSAgICBJZiB0aGVyZSBpcyBzcGFjZSBhdmFpbGFibGUgaW4g
ZmFzdGJpbnMsIGNvbnNvbGlkYXRlIGFuZCByZXRyeQotICAgIG1hbGxvYyBmcm9tIHNjcmF0Y2gg
cmF0aGVyIHRoYW4gZ2V0dGluZyBtZW1vcnkgZnJvbSBzeXN0ZW0uICBUaGlzCi0gICAgY2FuIG9j
Y3VyIG9ubHkgaWYgbmIgaXMgaW4gc21hbGxiaW4gcmFuZ2Ugc28gd2UgZGlkbid0IGNvbnNvbGlk
YXRlCi0gICAgdXBvbiBlbnRyeSB0byBtYWxsb2MuIEl0IGlzIG11Y2ggZWFzaWVyIHRvIGhhbmRs
ZSB0aGlzIGNhc2UgaGVyZQotICAgIHRoYW4gaW4gbWFsbG9jIHByb3Blci4KLSAgKi8KLQotICBp
ZiAoaGF2ZV9mYXN0Y2h1bmtzKGF2KSkgewotICAgIGFzc2VydChpbl9zbWFsbGJpbl9yYW5nZShu
YikpOwotICAgIG1hbGxvY19jb25zb2xpZGF0ZShhdik7Ci0gICAgcmV0dXJuIG1BTExPYyhuYiAt
IE1BTExPQ19BTElHTl9NQVNLKTsKLSAgfQotCi0KLSNpZiBIQVZFX01NQVAKLQotICAvKgotICAg
IElmIGhhdmUgbW1hcCwgYW5kIHRoZSByZXF1ZXN0IHNpemUgbWVldHMgdGhlIG1tYXAgdGhyZXNo
b2xkLCBhbmQKLSAgICB0aGUgc3lzdGVtIHN1cHBvcnRzIG1tYXAsIGFuZCB0aGVyZSBhcmUgZmV3
IGVub3VnaCBjdXJyZW50bHkKLSAgICBhbGxvY2F0ZWQgbW1hcHBlZCByZWdpb25zLCB0cnkgdG8g
ZGlyZWN0bHkgbWFwIHRoaXMgcmVxdWVzdAotICAgIHJhdGhlciB0aGFuIGV4cGFuZGluZyB0b3Au
Ci0gICovCi0KLSAgaWYgKChDSFVOS19TSVpFX1QpKG5iKSA+PSAoQ0hVTktfU0laRV9UKShhdi0+
bW1hcF90aHJlc2hvbGQpICYmCi0gICAgICAoYXYtPm5fbW1hcHMgPCBhdi0+bl9tbWFwc19tYXgp
KSB7Ci0KLSAgICBjaGFyKiBtbTsgICAgICAgICAgICAgLyogcmV0dXJuIHZhbHVlIGZyb20gbW1h
cCBjYWxsKi8KLQotICAgIC8qCi0gICAgICBSb3VuZCB1cCBzaXplIHRvIG5lYXJlc3QgcGFnZS4g
IEZvciBtbWFwcGVkIGNodW5rcywgdGhlIG92ZXJoZWFkCi0gICAgICBpcyBvbmUgU0laRV9TWiB1
bml0IGxhcmdlciB0aGFuIGZvciBub3JtYWwgY2h1bmtzLCBiZWNhdXNlIHRoZXJlCi0gICAgICBp
cyBubyBmb2xsb3dpbmcgY2h1bmsgd2hvc2UgcHJldl9zaXplIGZpZWxkIGNvdWxkIGJlIHVzZWQu
Ci0gICAgKi8KLSAgICBzaXplID0gKG5iICsgU0laRV9TWiArIE1BTExPQ19BTElHTl9NQVNLICsg
cGFnZW1hc2spICYgfnBhZ2VtYXNrOwotCi0gICAgLyogRG9uJ3QgdHJ5IGlmIHNpemUgd3JhcHMg
YXJvdW5kIDAgKi8KLSAgICBpZiAoKENIVU5LX1NJWkVfVCkoc2l6ZSkgPiAoQ0hVTktfU0laRV9U
KShuYikpIHsKLQotICAgICAgbW0gPSAoY2hhciopKE1NQVAoMCwgc2l6ZSwgUFJPVF9SRUFEfFBS
T1RfV1JJVEUsIE1BUF9QUklWQVRFKSk7Ci0gICAgICAKLSAgICAgIGlmIChtbSAhPSAoY2hhciop
KE1PUkVDT1JFX0ZBSUxVUkUpKSB7Ci0gICAgICAgIAotICAgICAgICAvKgotICAgICAgICAgIFRo
ZSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtbWFwcGVkIHJlZ2lvbiBpcyBzdG9yZWQKLSAg
ICAgICAgICBpbiB0aGUgcHJldl9zaXplIGZpZWxkIG9mIHRoZSBjaHVuay4gVGhpcyBhbGxvd3Mg
dXMgdG8gYWRqdXN0Ci0gICAgICAgICAgcmV0dXJuZWQgc3RhcnQgYWRkcmVzcyB0byBtZWV0IGFs
aWdubWVudCByZXF1aXJlbWVudHMgaGVyZSAKLSAgICAgICAgICBhbmQgaW4gbWVtYWxpZ24oKSwg
YW5kIHN0aWxsIGJlIGFibGUgdG8gY29tcHV0ZSBwcm9wZXIKLSAgICAgICAgICBhZGRyZXNzIGFy
Z3VtZW50IGZvciBsYXRlciBtdW5tYXAgaW4gZnJlZSgpIGFuZCByZWFsbG9jKCkuCi0gICAgICAg
ICovCi0gICAgICAgIAotICAgICAgICBmcm9udF9taXNhbGlnbiA9IChJTlRFUk5BTF9TSVpFX1Qp
Y2h1bmsybWVtKG1tKSAmIE1BTExPQ19BTElHTl9NQVNLOwotICAgICAgICBpZiAoZnJvbnRfbWlz
YWxpZ24gPiAwKSB7Ci0gICAgICAgICAgY29ycmVjdGlvbiA9IE1BTExPQ19BTElHTk1FTlQgLSBm
cm9udF9taXNhbGlnbjsKLSAgICAgICAgICBwID0gKG1jaHVua3B0cikobW0gKyBjb3JyZWN0aW9u
KTsKLSAgICAgICAgICBwLT5wcmV2X3NpemUgPSBjb3JyZWN0aW9uOwotICAgICAgICAgIHNldF9o
ZWFkKHAsIChzaXplIC0gY29ycmVjdGlvbikgfElTX01NQVBQRUQpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgIHAgPSAobWNodW5rcHRyKW1tOwotICAgICAgICAgIHAtPnBy
ZXZfc2l6ZSA9IDA7Ci0gICAgICAgICAgc2V0X2hlYWQocCwgc2l6ZXxJU19NTUFQUEVEKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgLyogdXBkYXRlIHN0YXRpc3RpY3MgKi8KLSAgICAg
ICAgCi0gICAgICAgIGlmICgrK2F2LT5uX21tYXBzID4gYXYtPm1heF9uX21tYXBzKSAKLSAgICAg
ICAgICBhdi0+bWF4X25fbW1hcHMgPSBhdi0+bl9tbWFwczsKLSAgICAgICAgCi0gICAgICAgIHN1
bSA9IGF2LT5tbWFwcGVkX21lbSArPSBzaXplOwotICAgICAgICBpZiAoc3VtID4gKENIVU5LX1NJ
WkVfVCkoYXYtPm1heF9tbWFwcGVkX21lbSkpIAotICAgICAgICAgIGF2LT5tYXhfbW1hcHBlZF9t
ZW0gPSBzdW07Ci0gICAgICAgIHN1bSArPSBhdi0+c2Jya2VkX21lbTsKLSAgICAgICAgaWYgKHN1
bSA+IChDSFVOS19TSVpFX1QpKGF2LT5tYXhfdG90YWxfbWVtKSkgCi0gICAgICAgICAgYXYtPm1h
eF90b3RhbF9tZW0gPSBzdW07Ci0KLSAgICAgICAgY2hlY2tfY2h1bmsocCk7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gY2h1bmsybWVtKHApOwotICAgICAgfQotICAgIH0KLSAgfQotI2VuZGlm
Ci0KLSAgLyogUmVjb3JkIGluY29taW5nIGNvbmZpZ3VyYXRpb24gb2YgdG9wICovCi0KLSAgb2xk
X3RvcCAgPSBhdi0+dG9wOwotICBvbGRfc2l6ZSA9IGNodW5rc2l6ZShvbGRfdG9wKTsKLSAgb2xk
X2VuZCAgPSAoY2hhciopKGNodW5rX2F0X29mZnNldChvbGRfdG9wLCBvbGRfc2l6ZSkpOwotCi0g
IGJyayA9IHNuZF9icmsgPSAoY2hhciopKE1PUkVDT1JFX0ZBSUxVUkUpOyAKLQotICAvKiAKLSAg
ICAgSWYgbm90IHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIHdlIHJlcXVpcmUgb2xkX3NpemUgdG8g
YmUKLSAgICAgYXQgbGVhc3QgTUlOU0laRSBhbmQgdG8gaGF2ZSBwcmV2X2ludXNlIHNldC4KLSAg
Ki8KLQotICBhc3NlcnQoKG9sZF90b3AgPT0gaW5pdGlhbF90b3AoYXYpICYmIG9sZF9zaXplID09
IDApIHx8IAotICAgICAgICAgKChDSFVOS19TSVpFX1QpIChvbGRfc2l6ZSkgPj0gTUlOU0laRSAm
JgotICAgICAgICAgIHByZXZfaW51c2Uob2xkX3RvcCkpKTsKLQotICAvKiBQcmVjb25kaXRpb246
IG5vdCBlbm91Z2ggY3VycmVudCBzcGFjZSB0byBzYXRpc2Z5IG5iIHJlcXVlc3QgKi8KLSAgYXNz
ZXJ0KChDSFVOS19TSVpFX1QpKG9sZF9zaXplKSA8IChDSFVOS19TSVpFX1QpKG5iICsgTUlOU0la
RSkpOwotCi0gIC8qIFByZWNvbmRpdGlvbjogYWxsIGZhc3RiaW5zIGFyZSBjb25zb2xpZGF0ZWQg
Ki8KLSAgYXNzZXJ0KCFoYXZlX2Zhc3RjaHVua3MoYXYpKTsKLQotCi0gIC8qIFJlcXVlc3QgZW5v
dWdoIHNwYWNlIGZvciBuYiArIHBhZCArIG92ZXJoZWFkICovCi0KLSAgc2l6ZSA9IG5iICsgYXYt
PnRvcF9wYWQgKyBNSU5TSVpFOwotCi0gIC8qCi0gICAgSWYgY29udGlndW91cywgd2UgY2FuIHN1
YnRyYWN0IG91dCBleGlzdGluZyBzcGFjZSB0aGF0IHdlIGhvcGUgdG8KLSAgICBjb21iaW5lIHdp
dGggbmV3IHNwYWNlLiBXZSBhZGQgaXQgYmFjayBsYXRlciBvbmx5IGlmCi0gICAgd2UgZG9uJ3Qg
YWN0dWFsbHkgZ2V0IGNvbnRpZ3VvdXMgc3BhY2UuCi0gICovCi0KLSAgaWYgKGNvbnRpZ3VvdXMo
YXYpKQotICAgIHNpemUgLT0gb2xkX3NpemU7Ci0KLSAgLyoKLSAgICBSb3VuZCB0byBhIG11bHRp
cGxlIG9mIHBhZ2Ugc2l6ZS4KLSAgICBJZiBNT1JFQ09SRSBpcyBub3QgY29udGlndW91cywgdGhp
cyBlbnN1cmVzIHRoYXQgd2Ugb25seSBjYWxsIGl0Ci0gICAgd2l0aCB3aG9sZS1wYWdlIGFyZ3Vt
ZW50cy4gIEFuZCBpZiBNT1JFQ09SRSBpcyBjb250aWd1b3VzIGFuZAotICAgIHRoaXMgaXMgbm90
IGZpcnN0IHRpbWUgdGhyb3VnaCwgdGhpcyBwcmVzZXJ2ZXMgcGFnZS1hbGlnbm1lbnQgb2YKLSAg
ICBwcmV2aW91cyBjYWxscy4gT3RoZXJ3aXNlLCB3ZSBjb3JyZWN0IHRvIHBhZ2UtYWxpZ24gYmVs
b3cuCi0gICovCi0KLSAgc2l6ZSA9IChzaXplICsgcGFnZW1hc2spICYgfnBhZ2VtYXNrOwotCi0g
IC8qCi0gICAgRG9uJ3QgdHJ5IHRvIGNhbGwgTU9SRUNPUkUgaWYgYXJndW1lbnQgaXMgc28gYmln
IGFzIHRvIGFwcGVhcgotICAgIG5lZ2F0aXZlLiBOb3RlIHRoYXQgc2luY2UgbW1hcCB0YWtlcyBz
aXplX3QgYXJnLCBpdCBtYXkgc3VjY2VlZAotICAgIGJlbG93IGV2ZW4gaWYgd2UgY2Fubm90IGNh
bGwgTU9SRUNPUkUuCi0gICovCi0KLSAgaWYgKHNpemUgPiAwKSAKLSAgICBicmsgPSAoY2hhciop
KE1PUkVDT1JFKHNpemUpKTsKLQotICAvKgotICAgIElmIGhhdmUgbW1hcCwgdHJ5IHVzaW5nIGl0
IGFzIGEgYmFja3VwIHdoZW4gTU9SRUNPUkUgZmFpbHMgb3IKLSAgICBjYW5ub3QgYmUgdXNlZC4g
VGhpcyBpcyB3b3J0aCBkb2luZyBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSAiaG9sZXMiIGluCi0gICAg
YWRkcmVzcyBzcGFjZSwgc28gc2JyayBjYW5ub3QgZXh0ZW5kIHRvIGdpdmUgY29udGlndW91cyBz
cGFjZSwgYnV0Ci0gICAgc3BhY2UgaXMgYXZhaWxhYmxlIGVsc2V3aGVyZS4gIE5vdGUgdGhhdCB3
ZSBpZ25vcmUgbW1hcCBtYXggY291bnQKLSAgICBhbmQgdGhyZXNob2xkIGxpbWl0cywgc2luY2Ug
dGhlIHNwYWNlIHdpbGwgbm90IGJlIHVzZWQgYXMgYQotICAgIHNlZ3JlZ2F0ZWQgbW1hcCByZWdp
b24uCi0gICovCi0KLSNpZiBIQVZFX01NQVAKLSAgaWYgKGJyayA9PSAoY2hhciopKE1PUkVDT1JF
X0ZBSUxVUkUpKSB7Ci0KLSAgICAvKiBDYW5ub3QgbWVyZ2Ugd2l0aCBvbGQgdG9wLCBzbyBhZGQg
aXRzIHNpemUgYmFjayBpbiAqLwotICAgIGlmIChjb250aWd1b3VzKGF2KSkKLSAgICAgIHNpemUg
PSAoc2l6ZSArIG9sZF9zaXplICsgcGFnZW1hc2spICYgfnBhZ2VtYXNrOwotCi0gICAgLyogSWYg
d2UgYXJlIHJlbHlpbmcgb24gbW1hcCBhcyBiYWNrdXAsIHRoZW4gdXNlIGxhcmdlciB1bml0cyAq
LwotICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA8IChDSFVOS19TSVpFX1QpKE1NQVBfQVNf
TU9SRUNPUkVfU0laRSkpCi0gICAgICBzaXplID0gTU1BUF9BU19NT1JFQ09SRV9TSVpFOwotCi0g
ICAgLyogRG9uJ3QgdHJ5IGlmIHNpemUgd3JhcHMgYXJvdW5kIDAgKi8KLSAgICBpZiAoKENIVU5L
X1NJWkVfVCkoc2l6ZSkgPiAoQ0hVTktfU0laRV9UKShuYikpIHsKLQotICAgICAgYnJrID0gKGNo
YXIqKShNTUFQKDAsIHNpemUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSkpOwot
ICAgICAgCi0gICAgICBpZiAoYnJrICE9IChjaGFyKikoTU9SRUNPUkVfRkFJTFVSRSkpIHsKLSAg
ICAgICAgCi0gICAgICAgIC8qIFdlIGRvIG5vdCBuZWVkLCBhbmQgY2Fubm90IHVzZSwgYW5vdGhl
ciBzYnJrIGNhbGwgdG8gZmluZCBlbmQgKi8KLSAgICAgICAgc25kX2JyayA9IGJyayArIHNpemU7
Ci0gICAgICAgIAotICAgICAgICAvKiAKLSAgICAgICAgICAgUmVjb3JkIHRoYXQgd2Ugbm8gbG9u
Z2VyIGhhdmUgYSBjb250aWd1b3VzIHNicmsgcmVnaW9uLiAKLSAgICAgICAgICAgQWZ0ZXIgdGhl
IGZpcnN0IHRpbWUgbW1hcCBpcyB1c2VkIGFzIGJhY2t1cCwgd2UgZG8gbm90Ci0gICAgICAgICAg
IGV2ZXIgcmVseSBvbiBjb250aWd1b3VzIHNwYWNlIHNpbmNlIHRoaXMgY291bGQgaW5jb3JyZWN0
bHkKLSAgICAgICAgICAgYnJpZGdlIHJlZ2lvbnMuCi0gICAgICAgICovCi0gICAgICAgIHNldF9u
b25jb250aWd1b3VzKGF2KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSNlbmRpZgotCi0gIGlmIChi
cmsgIT0gKGNoYXIqKShNT1JFQ09SRV9GQUlMVVJFKSkgewotICAgIGF2LT5zYnJrZWRfbWVtICs9
IHNpemU7Ci0KLSAgICAvKgotICAgICAgSWYgTU9SRUNPUkUgZXh0ZW5kcyBwcmV2aW91cyBzcGFj
ZSwgd2UgY2FuIGxpa2V3aXNlIGV4dGVuZCB0b3Agc2l6ZS4KLSAgICAqLwotICAgIAotICAgIGlm
IChicmsgPT0gb2xkX2VuZCAmJiBzbmRfYnJrID09IChjaGFyKikoTU9SRUNPUkVfRkFJTFVSRSkp
IHsKLSAgICAgIHNldF9oZWFkKG9sZF90b3AsIChzaXplICsgb2xkX3NpemUpIHwgUFJFVl9JTlVT
RSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgIE90aGVyd2lzZSwgbWFrZSBhZGp1c3RtZW50czoK
LSAgICAgIAotICAgICAgKiBJZiB0aGUgZmlyc3QgdGltZSB0aHJvdWdoIG9yIG5vbmNvbnRpZ3Vv
dXMsIHdlIG5lZWQgdG8gY2FsbCBzYnJrCi0gICAgICAgIGp1c3QgdG8gZmluZCBvdXQgd2hlcmUg
dGhlIGVuZCBvZiBtZW1vcnkgbGllcy4KLQotICAgICAgKiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0
IGFsbCByZXR1cm5lZCBjaHVua3MgZnJvbSBtYWxsb2Mgd2lsbCBtZWV0Ci0gICAgICAgIE1BTExP
Q19BTElHTk1FTlQKLQotICAgICAgKiBJZiB0aGVyZSB3YXMgYW4gaW50ZXJ2ZW5pbmcgZm9yZWln
biBzYnJrLCB3ZSBuZWVkIHRvIGFkanVzdCBzYnJrCi0gICAgICAgIHJlcXVlc3Qgc2l6ZSB0byBh
Y2NvdW50IGZvciBmYWN0IHRoYXQgd2Ugd2lsbCBub3QgYmUgYWJsZSB0bwotICAgICAgICBjb21i
aW5lIG5ldyBzcGFjZSB3aXRoIGV4aXN0aW5nIHNwYWNlIGluIG9sZF90b3AuCi0KLSAgICAgICog
QWxtb3N0IGFsbCBzeXN0ZW1zIGludGVybmFsbHkgYWxsb2NhdGUgd2hvbGUgcGFnZXMgYXQgYSB0
aW1lLCBpbgotICAgICAgICB3aGljaCBjYXNlIHdlIG1pZ2h0IGFzIHdlbGwgdXNlIHRoZSB3aG9s
ZSBsYXN0IHBhZ2Ugb2YgcmVxdWVzdC4KLSAgICAgICAgU28gd2UgYWxsb2NhdGUgZW5vdWdoIG1v
cmUgbWVtb3J5IHRvIGhpdCBhIHBhZ2UgYm91bmRhcnkgbm93LAotICAgICAgICB3aGljaCBpbiB0
dXJuIGNhdXNlcyBmdXR1cmUgY29udGlndW91cyBjYWxscyB0byBwYWdlLWFsaWduLgotICAgICov
Ci0gICAgCi0gICAgZWxzZSB7Ci0gICAgICBmcm9udF9taXNhbGlnbiA9IDA7Ci0gICAgICBlbmRf
bWlzYWxpZ24gPSAwOwotICAgICAgY29ycmVjdGlvbiA9IDA7Ci0gICAgICBhbGlnbmVkX2JyayA9
IGJyazsKLQotICAgICAgLyoKLSAgICAgICAgSWYgTU9SRUNPUkUgcmV0dXJucyBhbiBhZGRyZXNz
IGxvd2VyIHRoYW4gd2UgaGF2ZSBzZWVuIGJlZm9yZSwKLSAgICAgICAgd2Uga25vdyBpdCBpc24n
dCByZWFsbHkgY29udGlndW91cy4gIFRoaXMgYW5kIHNvbWUgc3Vic2VxdWVudAotICAgICAgICBj
aGVja3MgaGVscCBjb3BlIHdpdGggbm9uLWNvbmZvcm1pbmcgTU9SRUNPUkUgZnVuY3Rpb25zIGFu
ZAotICAgICAgICB0aGUgcHJlc2VuY2Ugb2YgImZvcmVpZ24iIGNhbGxzIHRvIE1PUkVDT1JFIGZy
b20gb3V0c2lkZSBvZgotICAgICAgICBtYWxsb2Mgb3IgYnkgb3RoZXIgdGhyZWFkcy4gIFdlIGNh
bm5vdCBndWFyYW50ZWUgdG8gZGV0ZWN0Ci0gICAgICAgIHRoZXNlIGluIGFsbCBjYXNlcywgYnV0
IGNvcGUgd2l0aCB0aGUgb25lcyB3ZSBkbyBkZXRlY3QuCi0gICAgICAqLwotICAgICAgaWYgKGNv
bnRpZ3VvdXMoYXYpICYmIG9sZF9zaXplICE9IDAgJiYgYnJrIDwgb2xkX2VuZCkgewotICAgICAg
ICBzZXRfbm9uY29udGlndW91cyhhdik7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8qIGhhbmRs
ZSBjb250aWd1b3VzIGNhc2VzICovCi0gICAgICBpZiAoY29udGlndW91cyhhdikpIHsgCi0KLSAg
ICAgICAgLyogCi0gICAgICAgICAgIFdlIGNhbiB0b2xlcmF0ZSBmb3J3YXJkIG5vbi1jb250aWd1
aXRpZXMgaGVyZSAodXN1YWxseSBkdWUKLSAgICAgICAgICAgdG8gZm9yZWlnbiBjYWxscykgYnV0
IHRyZWF0IHRoZW0gYXMgcGFydCBvZiBvdXIgc3BhY2UgZm9yCi0gICAgICAgICAgIHN0YXRzIHJl
cG9ydGluZy4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKG9sZF9zaXplICE9IDApIAotICAgICAg
ICAgIGF2LT5zYnJrZWRfbWVtICs9IGJyayAtIG9sZF9lbmQ7Ci0gICAgICAgIAotICAgICAgICAv
KiBHdWFyYW50ZWUgYWxpZ25tZW50IG9mIGZpcnN0IG5ldyBjaHVuayBtYWRlIGZyb20gdGhpcyBz
cGFjZSAqLwotCi0gICAgICAgIGZyb250X21pc2FsaWduID0gKElOVEVSTkFMX1NJWkVfVCljaHVu
azJtZW0oYnJrKSAmIE1BTExPQ19BTElHTl9NQVNLOwotICAgICAgICBpZiAoZnJvbnRfbWlzYWxp
Z24gPiAwKSB7Ci0KLSAgICAgICAgICAvKgotICAgICAgICAgICAgU2tpcCBvdmVyIHNvbWUgYnl0
ZXMgdG8gYXJyaXZlIGF0IGFuIGFsaWduZWQgcG9zaXRpb24uCi0gICAgICAgICAgICBXZSBkb24n
dCBuZWVkIHRvIHNwZWNpYWxseSBtYXJrIHRoZXNlIHdhc3RlZCBmcm9udCBieXRlcy4KLSAgICAg
ICAgICAgIFRoZXkgd2lsbCBuZXZlciBiZSBhY2Nlc3NlZCBhbnl3YXkgYmVjYXVzZQotICAgICAg
ICAgICAgcHJldl9pbnVzZSBvZiBhdi0+dG9wIChhbmQgYW55IGNodW5rIGNyZWF0ZWQgZnJvbSBp
dHMgc3RhcnQpCi0gICAgICAgICAgICBpcyBhbHdheXMgdHJ1ZSBhZnRlciBpbml0aWFsaXphdGlv
bi4KLSAgICAgICAgICAqLwotCi0gICAgICAgICAgY29ycmVjdGlvbiA9IE1BTExPQ19BTElHTk1F
TlQgLSBmcm9udF9taXNhbGlnbjsKLSAgICAgICAgICBhbGlnbmVkX2JyayArPSBjb3JyZWN0aW9u
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvKgotICAgICAgICAgIElmIHRoaXMgaXNu
J3QgYWRqYWNlbnQgdG8gZXhpc3Rpbmcgc3BhY2UsIHRoZW4gd2Ugd2lsbCBub3QKLSAgICAgICAg
ICBiZSBhYmxlIHRvIG1lcmdlIHdpdGggb2xkX3RvcCBzcGFjZSwgc28gbXVzdCBhZGQgdG8gMm5k
IHJlcXVlc3QuCi0gICAgICAgICovCi0gICAgICAgIAotICAgICAgICBjb3JyZWN0aW9uICs9IG9s
ZF9zaXplOwotICAgICAgICAKLSAgICAgICAgLyogRXh0ZW5kIHRoZSBlbmQgYWRkcmVzcyB0byBo
aXQgYSBwYWdlIGJvdW5kYXJ5ICovCi0gICAgICAgIGVuZF9taXNhbGlnbiA9IChJTlRFUk5BTF9T
SVpFX1QpKGJyayArIHNpemUgKyBjb3JyZWN0aW9uKTsKLSAgICAgICAgY29ycmVjdGlvbiArPSAo
KGVuZF9taXNhbGlnbiArIHBhZ2VtYXNrKSAmIH5wYWdlbWFzaykgLSBlbmRfbWlzYWxpZ247Ci0g
ICAgICAgIAotICAgICAgICBhc3NlcnQoY29ycmVjdGlvbiA+PSAwKTsKLSAgICAgICAgc25kX2Jy
ayA9IChjaGFyKikoTU9SRUNPUkUoY29ycmVjdGlvbikpOwotICAgICAgICAKLSAgICAgICAgaWYg
KHNuZF9icmsgPT0gKGNoYXIqKShNT1JFQ09SRV9GQUlMVVJFKSkgewotICAgICAgICAgIC8qCi0g
ICAgICAgICAgICBJZiBjYW4ndCBhbGxvY2F0ZSBjb3JyZWN0aW9uLCB0cnkgdG8gYXQgbGVhc3Qg
ZmluZCBvdXQgY3VycmVudAotICAgICAgICAgICAgYnJrLiAgSXQgbWlnaHQgYmUgZW5vdWdoIHRv
IHByb2NlZWQgd2l0aG91dCBmYWlsaW5nLgotICAgICAgICAgICovCi0gICAgICAgICAgY29ycmVj
dGlvbiA9IDA7Ci0gICAgICAgICAgc25kX2JyayA9IChjaGFyKikoTU9SRUNPUkUoMCkpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNuZF9icmsgPCBicmspIHsKLSAgICAgICAgICAvKgot
ICAgICAgICAgICAgSWYgdGhlIHNlY29uZCBjYWxsIGdpdmVzIG5vbmNvbnRpZ3VvdXMgc3BhY2Ug
ZXZlbiB0aG91Z2gKLSAgICAgICAgICAgIGl0IHNheXMgaXQgd29uJ3QsIHRoZSBvbmx5IGNvdXJz
ZSBvZiBhY3Rpb24gaXMgdG8gaWdub3JlCi0gICAgICAgICAgICByZXN1bHRzIG9mIHNlY29uZCBj
YWxsLCBhbmQgY29uc2VydmF0aXZlbHkgZXN0aW1hdGUgd2hlcmUKLSAgICAgICAgICAgIHRoZSBm
aXJzdCBjYWxsIGxlZnQgdXMuIEFsc28gc2V0IG5vbmNvbnRpZ3VvdXMsIHNvIHRoaXMKLSAgICAg
ICAgICAgIHdvbid0IGhhcHBlbiBhZ2FpbiwgbGVhdmluZyBhdCBtb3N0IG9uZSBob2xlLgotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBjaGVjayBpcyBpbnRyaW5zaWNh
bGx5IGluY29tcGxldGUuICBCZWNhdXNlCi0gICAgICAgICAgICBNT1JFQ09SRSBpcyBhbGxvd2Vk
IHRvIGdpdmUgbW9yZSBzcGFjZSB0aGFuIHdlIGFzayBmb3IsCi0gICAgICAgICAgICB0aGVyZSBp
cyBubyByZWxpYWJsZSB3YXkgdG8gZGV0ZWN0IGEgbm9uY29udGlndWl0eQotICAgICAgICAgICAg
cHJvZHVjaW5nIGEgZm9yd2FyZCBnYXAgZm9yIHRoZSBzZWNvbmQgY2FsbC4KLSAgICAgICAgICAq
LwotICAgICAgICAgIHNuZF9icmsgPSBicmsgKyBzaXplOwotICAgICAgICAgIGNvcnJlY3Rpb24g
PSAwOwotICAgICAgICAgIHNldF9ub25jb250aWd1b3VzKGF2KTsKLSAgICAgICAgfQotCi0gICAg
ICB9Ci0gICAgICAKLSAgICAgIC8qIGhhbmRsZSBub24tY29udGlndW91cyBjYXNlcyAqLwotICAg
ICAgZWxzZSB7IAotICAgICAgICAvKiBNT1JFQ09SRS9tbWFwIG11c3QgY29ycmVjdGx5IGFsaWdu
ICovCi0gICAgICAgIGFzc2VydChhbGlnbmVkX09LKGNodW5rMm1lbShicmspKSk7Ci0gICAgICAg
IAotICAgICAgICAvKiBGaW5kIG91dCBjdXJyZW50IGVuZCBvZiBtZW1vcnkgKi8KLSAgICAgICAg
aWYgKHNuZF9icmsgPT0gKGNoYXIqKShNT1JFQ09SRV9GQUlMVVJFKSkgewotICAgICAgICAgIHNu
ZF9icmsgPSAoY2hhciopKE1PUkVDT1JFKDApKTsKLSAgICAgICAgICBhdi0+c2Jya2VkX21lbSAr
PSBzbmRfYnJrIC0gYnJrIC0gc2l6ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAg
ICAvKiBBZGp1c3QgdG9wIGJhc2VkIG9uIHJlc3VsdHMgb2Ygc2Vjb25kIHNicmsgKi8KLSAgICAg
IGlmIChzbmRfYnJrICE9IChjaGFyKikoTU9SRUNPUkVfRkFJTFVSRSkpIHsKLSAgICAgICAgYXYt
PnRvcCA9IChtY2h1bmtwdHIpYWxpZ25lZF9icms7Ci0gICAgICAgIHNldF9oZWFkKGF2LT50b3As
IChzbmRfYnJrIC0gYWxpZ25lZF9icmsgKyBjb3JyZWN0aW9uKSB8IFBSRVZfSU5VU0UpOwotICAg
ICAgICBhdi0+c2Jya2VkX21lbSArPSBjb3JyZWN0aW9uOwotICAgICAKLSAgICAgICAgLyoKLSAg
ICAgICAgICBJZiBub3QgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCwgd2UgZWl0aGVyIGhhdmUgYQot
ICAgICAgICAgIGdhcCBkdWUgdG8gZm9yZWlnbiBzYnJrIG9yIGEgbm9uLWNvbnRpZ3VvdXMgcmVn
aW9uLiAgSW5zZXJ0IGEKLSAgICAgICAgICBkb3VibGUgZmVuY2Vwb3N0IGF0IG9sZF90b3AgdG8g
cHJldmVudCBjb25zb2xpZGF0aW9uIHdpdGggc3BhY2UKLSAgICAgICAgICB3ZSBkb24ndCBvd24u
IFRoZXNlIGZlbmNlcG9zdHMgYXJlIGFydGlmaWNpYWwgY2h1bmtzIHRoYXQgYXJlCi0gICAgICAg
ICAgbWFya2VkIGFzIGludXNlIGFuZCBhcmUgaW4gYW55IGNhc2UgdG9vIHNtYWxsIHRvIHVzZS4g
IFdlIG5lZWQKLSAgICAgICAgICB0d28gdG8gbWFrZSBzaXplcyBhbmQgYWxpZ25tZW50cyB3b3Jr
IG91dC4KLSAgICAgICAgKi8KLSAgIAotICAgICAgICBpZiAob2xkX3NpemUgIT0gMCkgewotICAg
ICAgICAgIC8qIAotICAgICAgICAgICAgIFNocmluayBvbGRfdG9wIHRvIGluc2VydCBmZW5jZXBv
c3RzLCBrZWVwaW5nIHNpemUgYQotICAgICAgICAgICAgIG11bHRpcGxlIG9mIE1BTExPQ19BTElH
Tk1FTlQuIFdlIGtub3cgdGhlcmUgaXMgYXQgbGVhc3QKLSAgICAgICAgICAgICBlbm91Z2ggc3Bh
Y2UgaW4gb2xkX3RvcCB0byBkbyB0aGlzLgotICAgICAgICAgICovCi0gICAgICAgICAgb2xkX3Np
emUgPSAob2xkX3NpemUgLSAzKlNJWkVfU1opICYgfk1BTExPQ19BTElHTl9NQVNLOwotICAgICAg
ICAgIHNldF9oZWFkKG9sZF90b3AsIG9sZF9zaXplIHwgUFJFVl9JTlVTRSk7Ci0gICAgICAgICAg
Ci0gICAgICAgICAgLyoKLSAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIGFzc2ln
bm1lbnRzIGNvbXBsZXRlbHkgb3ZlcndyaXRlCi0gICAgICAgICAgICBvbGRfdG9wIHdoZW4gb2xk
X3NpemUgd2FzIHByZXZpb3VzbHkgTUlOU0laRS4gIFRoaXMgaXMKLSAgICAgICAgICAgIGludGVu
dGlvbmFsLiBXZSBuZWVkIHRoZSBmZW5jZXBvc3QsIGV2ZW4gaWYgb2xkX3RvcCBvdGhlcndpc2Ug
Z2V0cwotICAgICAgICAgICAgbG9zdC4KLSAgICAgICAgICAqLwotICAgICAgICAgIGNodW5rX2F0
X29mZnNldChvbGRfdG9wLCBvbGRfc2l6ZSAgICAgICAgICApLT5zaXplID0KLSAgICAgICAgICAg
IFNJWkVfU1p8UFJFVl9JTlVTRTsKLQotICAgICAgICAgIGNodW5rX2F0X29mZnNldChvbGRfdG9w
LCBvbGRfc2l6ZSArIFNJWkVfU1opLT5zaXplID0KLSAgICAgICAgICAgIFNJWkVfU1p8UFJFVl9J
TlVTRTsKLQotICAgICAgICAgIC8qIAotICAgICAgICAgICAgIElmIHBvc3NpYmxlLCByZWxlYXNl
IHRoZSByZXN0LCBzdXBwcmVzc2luZyB0cmltbWluZy4KLSAgICAgICAgICAqLwotICAgICAgICAg
IGlmIChvbGRfc2l6ZSA+PSBNSU5TSVpFKSB7Ci0gICAgICAgICAgICBJTlRFUk5BTF9TSVpFX1Qg
dHQgPSBhdi0+dHJpbV90aHJlc2hvbGQ7Ci0gICAgICAgICAgICBhdi0+dHJpbV90aHJlc2hvbGQg
PSAoSU5URVJOQUxfU0laRV9UKSgtMSk7Ci0gICAgICAgICAgICBmUkVlKGNodW5rMm1lbShvbGRf
dG9wKSk7Ci0gICAgICAgICAgICBhdi0+dHJpbV90aHJlc2hvbGQgPSB0dDsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLyogVXBkYXRlIHN0YXRpc3Rp
Y3MgKi8KLSAgICBzdW0gPSBhdi0+c2Jya2VkX21lbTsKLSAgICBpZiAoc3VtID4gKENIVU5LX1NJ
WkVfVCkoYXYtPm1heF9zYnJrZWRfbWVtKSkKLSAgICAgIGF2LT5tYXhfc2Jya2VkX21lbSA9IHN1
bTsKLSAgICAKLSAgICBzdW0gKz0gYXYtPm1tYXBwZWRfbWVtOwotICAgIGlmIChzdW0gPiAoQ0hV
TktfU0laRV9UKShhdi0+bWF4X3RvdGFsX21lbSkpCi0gICAgICBhdi0+bWF4X3RvdGFsX21lbSA9
IHN1bTsKLQotICAgIGNoZWNrX21hbGxvY19zdGF0ZSgpOwotICAgIAotICAgIC8qIGZpbmFsbHks
IGRvIHRoZSBhbGxvY2F0aW9uICovCi0KLSAgICBwID0gYXYtPnRvcDsKLSAgICBzaXplID0gY2h1
bmtzaXplKHApOwotICAgIAotICAgIC8qIGNoZWNrIHRoYXQgb25lIG9mIHRoZSBhYm92ZSBhbGxv
Y2F0aW9uIHBhdGhzIHN1Y2NlZWRlZCAqLwotICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA+
PSAoQ0hVTktfU0laRV9UKShuYiArIE1JTlNJWkUpKSB7Ci0gICAgICByZW1haW5kZXJfc2l6ZSA9
IHNpemUgLSBuYjsKLSAgICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNldChwLCBuYik7Ci0g
ICAgICBhdi0+dG9wID0gcmVtYWluZGVyOwotICAgICAgc2V0X2hlYWQocCwgbmIgfCBQUkVWX0lO
VVNFKTsKLSAgICAgIHNldF9oZWFkKHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUgfCBQUkVWX0lO
VVNFKTsKLSAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKHAsIG5iKTsKLSAgICAgIHJldHVybiBj
aHVuazJtZW0ocCk7Ci0gICAgfQotCi0gIH0KLQotICAvKiBjYXRjaCBhbGwgZmFpbHVyZSBwYXRo
cyAqLwotICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047Ci0gIHJldHVybiAwOwotfQotCi0KLQotCi0v
KgotICBzWVNUUkltIGlzIGFuIGludmVyc2Ugb2Ygc29ydHMgdG8gc1lTTUFMTE9jLiAgSXQgZ2l2
ZXMgbWVtb3J5IGJhY2sKLSAgdG8gdGhlIHN5c3RlbSAodmlhIG5lZ2F0aXZlIGFyZ3VtZW50cyB0
byBzYnJrKSBpZiB0aGVyZSBpcyB1bnVzZWQKLSAgbWVtb3J5IGF0IHRoZSBgaGlnaCcgZW5kIG9m
IHRoZSBtYWxsb2MgcG9vbC4gSXQgaXMgY2FsbGVkCi0gIGF1dG9tYXRpY2FsbHkgYnkgZnJlZSgp
IHdoZW4gdG9wIHNwYWNlIGV4Y2VlZHMgdGhlIHRyaW0KLSAgdGhyZXNob2xkLiBJdCBpcyBhbHNv
IGNhbGxlZCBieSB0aGUgcHVibGljIG1hbGxvY190cmltIHJvdXRpbmUuICBJdAotICByZXR1cm5z
IDEgaWYgaXQgYWN0dWFsbHkgcmVsZWFzZWQgYW55IG1lbW9yeSwgZWxzZSAwLgotKi8KLQotI2lm
bmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQotCi0jaWYgX19TVERfQwotc3RhdGljIGludCBzWVNU
UkltKHNpemVfdCBwYWQsIG1zdGF0ZSBhdikKLSNlbHNlCi1zdGF0aWMgaW50IHNZU1RSSW0ocGFk
LCBhdikgc2l6ZV90IHBhZDsgbXN0YXRlIGF2OwotI2VuZGlmCi17Ci0gIGxvbmcgIHRvcF9zaXpl
OyAgICAgICAgLyogQW1vdW50IG9mIHRvcC1tb3N0IG1lbW9yeSAqLwotICBsb25nICBleHRyYTsg
ICAgICAgICAgIC8qIEFtb3VudCB0byByZWxlYXNlICovCi0gIGxvbmcgIHJlbGVhc2VkOyAgICAg
ICAgLyogQW1vdW50IGFjdHVhbGx5IHJlbGVhc2VkICovCi0gIGNoYXIqIGN1cnJlbnRfYnJrOyAg
ICAgLyogYWRkcmVzcyByZXR1cm5lZCBieSBwcmUtY2hlY2sgc2JyayBjYWxsICovCi0gIGNoYXIq
IG5ld19icms7ICAgICAgICAgLyogYWRkcmVzcyByZXR1cm5lZCBieSBwb3N0LWNoZWNrIHNicmsg
Y2FsbCAqLwotICBzaXplX3QgcGFnZXN6OwotCi0gIHBhZ2VzeiA9IGF2LT5wYWdlc2l6ZTsKLSAg
dG9wX3NpemUgPSBjaHVua3NpemUoYXYtPnRvcCk7Ci0gIAotICAvKiBSZWxlYXNlIGluIHBhZ2Vz
aXplIHVuaXRzLCBrZWVwaW5nIGF0IGxlYXN0IG9uZSBwYWdlICovCi0gIGV4dHJhID0gKCh0b3Bf
c2l6ZSAtIHBhZCAtIE1JTlNJWkUgKyAocGFnZXN6LTEpKSAvIHBhZ2VzeiAtIDEpICogcGFnZXN6
OwotICAKLSAgaWYgKGV4dHJhID4gMCkgewotICAgIAotICAgIC8qCi0gICAgICBPbmx5IHByb2Nl
ZWQgaWYgZW5kIG9mIG1lbW9yeSBpcyB3aGVyZSB3ZSBsYXN0IHNldCBpdC4KLSAgICAgIFRoaXMg
YXZvaWRzIHByb2JsZW1zIGlmIHRoZXJlIHdlcmUgZm9yZWlnbiBzYnJrIGNhbGxzLgotICAgICov
Ci0gICAgY3VycmVudF9icmsgPSAoY2hhciopKE1PUkVDT1JFKDApKTsKLSAgICBpZiAoY3VycmVu
dF9icmsgPT0gKGNoYXIqKShhdi0+dG9wKSArIHRvcF9zaXplKSB7Ci0gICAgICAKLSAgICAgIC8q
Ci0gICAgICAgIEF0dGVtcHQgdG8gcmVsZWFzZSBtZW1vcnkuIFdlIGlnbm9yZSBNT1JFQ09SRSBy
ZXR1cm4gdmFsdWUsCi0gICAgICAgIGFuZCBpbnN0ZWFkIGNhbGwgYWdhaW4gdG8gZmluZCBvdXQg
d2hlcmUgbmV3IGVuZCBvZiBtZW1vcnkgaXMuCi0gICAgICAgIFRoaXMgYXZvaWRzIHByb2JsZW1z
IGlmIGZpcnN0IGNhbGwgcmVsZWFzZXMgbGVzcyB0aGFuIHdlIGFza2VkLAotICAgICAgICBvZiBp
ZiBmYWlsdXJlIHNvbWVob3cgYWx0ZXJlZCBicmsgdmFsdWUuIChXZSBjb3VsZCBzdGlsbAotICAg
ICAgICBlbmNvdW50ZXIgcHJvYmxlbXMgaWYgaXQgYWx0ZXJlZCBicmsgaW4gc29tZSB2ZXJ5IGJh
ZCB3YXksCi0gICAgICAgIGJ1dCB0aGUgb25seSB0aGluZyB3ZSBjYW4gZG8gaXMgYWRqdXN0IGFu
eXdheSwgd2hpY2ggd2lsbCBjYXVzZQotICAgICAgICBzb21lIGRvd25zdHJlYW0gZmFpbHVyZS4p
Ci0gICAgICAqLwotICAgICAgCi0gICAgICBNT1JFQ09SRSgtZXh0cmEpOwotICAgICAgbmV3X2Jy
ayA9IChjaGFyKikoTU9SRUNPUkUoMCkpOwotICAgICAgCi0gICAgICBpZiAobmV3X2JyayAhPSAo
Y2hhciopTU9SRUNPUkVfRkFJTFVSRSkgewotICAgICAgICByZWxlYXNlZCA9IChsb25nKShjdXJy
ZW50X2JyayAtIG5ld19icmspOwotICAgICAgICAKLSAgICAgICAgaWYgKHJlbGVhc2VkICE9IDAp
IHsKLSAgICAgICAgICAvKiBTdWNjZXNzLiBBZGp1c3QgdG9wLiAqLwotICAgICAgICAgIGF2LT5z
YnJrZWRfbWVtIC09IHJlbGVhc2VkOwotICAgICAgICAgIHNldF9oZWFkKGF2LT50b3AsICh0b3Bf
c2l6ZSAtIHJlbGVhc2VkKSB8IFBSRVZfSU5VU0UpOwotICAgICAgICAgIGNoZWNrX21hbGxvY19z
dGF0ZSgpOwotICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0gIHJldHVybiAwOwotfQotCi0jZW5kaWYKLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIG1hbGxvYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0K
LQotI2lmIF9fU1REX0MKLVZvaWRfdCogbUFMTE9jKHNpemVfdCBieXRlcykKLSNlbHNlCi0gIFZv
aWRfdCogbUFMTE9jKGJ5dGVzKSBzaXplX3QgYnl0ZXM7Ci0jZW5kaWYKLXsKLSAgbXN0YXRlIGF2
ID0gZ2V0X21hbGxvY19zdGF0ZSgpOwotCi0gIElOVEVSTkFMX1NJWkVfVCBuYjsgICAgICAgICAg
ICAgICAvKiBub3JtYWxpemVkIHJlcXVlc3Qgc2l6ZSAqLwotICB1bnNpZ25lZCBpbnQgICAgaWR4
OyAgICAgICAgICAgICAgLyogYXNzb2NpYXRlZCBiaW4gaW5kZXggKi8KLSAgbWJpbnB0ciAgICAg
ICAgIGJpbjsgICAgICAgICAgICAgIC8qIGFzc29jaWF0ZWQgYmluICovCi0gIG1mYXN0YmlucHRy
KiAgICBmYjsgICAgICAgICAgICAgICAvKiBhc3NvY2lhdGVkIGZhc3RiaW4gKi8KLQotICBtY2h1
bmtwdHIgICAgICAgdmljdGltOyAgICAgICAgICAgLyogaW5zcGVjdGVkL3NlbGVjdGVkIGNodW5r
ICovCi0gIElOVEVSTkFMX1NJWkVfVCBzaXplOyAgICAgICAgICAgICAvKiBpdHMgc2l6ZSAqLwot
ICBpbnQgICAgICAgICAgICAgdmljdGltX2luZGV4OyAgICAgLyogaXRzIGJpbiBpbmRleCAqLwot
Ci0gIG1jaHVua3B0ciAgICAgICByZW1haW5kZXI7ICAgICAgICAvKiByZW1haW5kZXIgZnJvbSBh
IHNwbGl0ICovCi0gIENIVU5LX1NJWkVfVCAgICByZW1haW5kZXJfc2l6ZTsgICAvKiBpdHMgc2l6
ZSAqLwotCi0gIHVuc2lnbmVkIGludCAgICBibG9jazsgICAgICAgICAgICAvKiBiaXQgbWFwIHRy
YXZlcnNlciAqLwotICB1bnNpZ25lZCBpbnQgICAgYml0OyAgICAgICAgICAgICAgLyogYml0IG1h
cCB0cmF2ZXJzZXIgKi8KLSAgdW5zaWduZWQgaW50ICAgIG1hcDsgICAgICAgICAgICAgIC8qIGN1
cnJlbnQgd29yZCBvZiBiaW5tYXAgKi8KLQotICBtY2h1bmtwdHIgICAgICAgZndkOyAgICAgICAg
ICAgICAgLyogbWlzYyB0ZW1wIGZvciBsaW5raW5nICovCi0gIG1jaHVua3B0ciAgICAgICBiY2s7
ICAgICAgICAgICAgICAvKiBtaXNjIHRlbXAgZm9yIGxpbmtpbmcgKi8KLQotICAvKgotICAgIENv
bnZlcnQgcmVxdWVzdCBzaXplIHRvIGludGVybmFsIGZvcm0gYnkgYWRkaW5nIFNJWkVfU1ogYnl0
ZXMKLSAgICBvdmVyaGVhZCBwbHVzIHBvc3NpYmx5IG1vcmUgdG8gb2J0YWluIG5lY2Vzc2FyeSBh
bGlnbm1lbnQgYW5kL29yCi0gICAgdG8gb2J0YWluIGEgc2l6ZSBvZiBhdCBsZWFzdCBNSU5TSVpF
LCB0aGUgc21hbGxlc3QgYWxsb2NhdGFibGUKLSAgICBzaXplLiBBbHNvLCBjaGVja2VkX3JlcXVl
c3Qyc2l6ZSB0cmFwcyAocmV0dXJuaW5nIDApIHJlcXVlc3Qgc2l6ZXMKLSAgICB0aGF0IGFyZSBz
byBsYXJnZSB0aGF0IHRoZXkgd3JhcCBhcm91bmQgemVybyB3aGVuIHBhZGRlZCBhbmQKLSAgICBh
bGlnbmVkLgotICAqLwotCi0gIGNoZWNrZWRfcmVxdWVzdDJzaXplKGJ5dGVzLCBuYik7Ci0KLSAg
LyoKLSAgICBCeXBhc3Mgc2VhcmNoIGlmIG5vIGZyZWVzIHlldAotICAgKi8KLSAgaWYgKCFoYXZl
X2FueWNodW5rcyhhdikpIHsKLSAgICBpZiAoYXYtPm1heF9mYXN0ID09IDApIC8qIGluaXRpYWxp
emF0aW9uIGNoZWNrICovCi0gICAgICBtYWxsb2NfY29uc29saWRhdGUoYXYpOwotICAgIGdvdG8g
dXNlX3RvcDsKLSAgfQotCi0gIC8qCi0gICAgSWYgdGhlIHNpemUgcXVhbGlmaWVzIGFzIGEgZmFz
dGJpbiwgZmlyc3QgY2hlY2sgY29ycmVzcG9uZGluZyBiaW4uCi0gICovCi0KLSAgaWYgKChDSFVO
S19TSVpFX1QpKG5iKSA8PSAoQ0hVTktfU0laRV9UKShhdi0+bWF4X2Zhc3QpKSB7IAotICAgIGZi
ID0gJihhdi0+ZmFzdGJpbnNbKGZhc3RiaW5faW5kZXgobmIpKV0pOwotICAgIGlmICggKHZpY3Rp
bSA9ICpmYikgIT0gMCkgewotICAgICAgKmZiID0gdmljdGltLT5mZDsKLSAgICAgIGNoZWNrX3Jl
bWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICByZXR1cm4gY2h1bmsybWVtKHZpY3Rp
bSk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICBJZiBhIHNtYWxsIHJlcXVlc3QsIGNoZWNrIHJl
Z3VsYXIgYmluLiAgU2luY2UgdGhlc2UgInNtYWxsYmlucyIKLSAgICBob2xkIG9uZSBzaXplIGVh
Y2gsIG5vIHNlYXJjaGluZyB3aXRoaW4gYmlucyBpcyBuZWNlc3NhcnkuCi0gICAgKEZvciBhIGxh
cmdlIHJlcXVlc3QsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB1bnNvcnRlZCBjaHVua3MgYXJlCi0g
ICAgcHJvY2Vzc2VkIHRvIGZpbmQgYmVzdCBmaXQuIEJ1dCBmb3Igc21hbGwgb25lcywgZml0cyBh
cmUgZXhhY3QKLSAgICBhbnl3YXksIHNvIHdlIGNhbiBjaGVjayBub3csIHdoaWNoIGlzIGZhc3Rl
ci4pCi0gICovCi0KLSAgaWYgKGluX3NtYWxsYmluX3JhbmdlKG5iKSkgewotICAgIGlkeCA9IHNt
YWxsYmluX2luZGV4KG5iKTsKLSAgICBiaW4gPSBiaW5fYXQoYXYsaWR4KTsKLQotICAgIGlmICgg
KHZpY3RpbSA9IGxhc3QoYmluKSkgIT0gYmluKSB7Ci0gICAgICBiY2sgPSB2aWN0aW0tPmJrOwot
ICAgICAgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQodmljdGltLCBuYik7Ci0gICAgICBiaW4tPmJr
ID0gYmNrOwotICAgICAgYmNrLT5mZCA9IGJpbjsKLSAgICAgIAotICAgICAgY2hlY2tfbWFsbG9j
ZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICByZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7Ci0g
ICAgfQotICB9Ci0KLSAgLyogCi0gICAgIElmIHRoaXMgaXMgYSBsYXJnZSByZXF1ZXN0LCBjb25z
b2xpZGF0ZSBmYXN0YmlucyBiZWZvcmUgY29udGludWluZy4KLSAgICAgV2hpbGUgaXQgbWlnaHQg
bG9vayBleGNlc3NpdmUgdG8ga2lsbCBhbGwgZmFzdGJpbnMgYmVmb3JlCi0gICAgIGV2ZW4gc2Vl
aW5nIGlmIHRoZXJlIGlzIHNwYWNlIGF2YWlsYWJsZSwgdGhpcyBhdm9pZHMKLSAgICAgZnJhZ21l
bnRhdGlvbiBwcm9ibGVtcyBub3JtYWxseSBhc3NvY2lhdGVkIHdpdGggZmFzdGJpbnMuCi0gICAg
IEFsc28sIGluIHByYWN0aWNlLCBwcm9ncmFtcyB0ZW5kIHRvIGhhdmUgcnVucyBvZiBlaXRoZXIg
c21hbGwgb3IKLSAgICAgbGFyZ2UgcmVxdWVzdHMsIGJ1dCBsZXNzIG9mdGVuIG1peHR1cmVzLCBz
byBjb25zb2xpZGF0aW9uIGlzIG5vdCAKLSAgICAgaW52b2tlZCBhbGwgdGhhdCBvZnRlbiBpbiBt
b3N0IHByb2dyYW1zLiBBbmQgdGhlIHByb2dyYW1zIHRoYXQKLSAgICAgaXQgaXMgY2FsbGVkIGZy
ZXF1ZW50bHkgaW4gb3RoZXJ3aXNlIHRlbmQgdG8gZnJhZ21lbnQuCi0gICovCi0KLSAgZWxzZSB7
Ci0gICAgaWR4ID0gbGFyZ2ViaW5faW5kZXgobmIpOwotICAgIGlmIChoYXZlX2Zhc3RjaHVua3Mo
YXYpKSAKLSAgICAgIG1hbGxvY19jb25zb2xpZGF0ZShhdik7Ci0gIH0KLQotICAvKgotICAgIFBy
b2Nlc3MgcmVjZW50bHkgZnJlZWQgb3IgcmVtYWluZGVyZWQgY2h1bmtzLCB0YWtpbmcgb25lIG9u
bHkgaWYKLSAgICBpdCBpcyBleGFjdCBmaXQsIG9yLCBpZiB0aGlzIGEgc21hbGwgcmVxdWVzdCwg
dGhlIGNodW5rIGlzIHJlbWFpbmRlciBmcm9tCi0gICAgdGhlIG1vc3QgcmVjZW50IG5vbi1leGFj
dCBmaXQuICBQbGFjZSBvdGhlciB0cmF2ZXJzZWQgY2h1bmtzIGluCi0gICAgYmlucy4gIE5vdGUg
dGhhdCB0aGlzIHN0ZXAgaXMgdGhlIG9ubHkgcGxhY2UgaW4gYW55IHJvdXRpbmUgd2hlcmUKLSAg
ICBjaHVua3MgYXJlIHBsYWNlZCBpbiBiaW5zLgotICAqLwotICAgIAotICB3aGlsZSAoICh2aWN0
aW0gPSB1bnNvcnRlZF9jaHVua3MoYXYpLT5iaykgIT0gdW5zb3J0ZWRfY2h1bmtzKGF2KSkgewot
ICAgIGJjayA9IHZpY3RpbS0+Yms7Ci0gICAgc2l6ZSA9IGNodW5rc2l6ZSh2aWN0aW0pOwotICAg
IAotICAgIC8qIAotICAgICAgIElmIGEgc21hbGwgcmVxdWVzdCwgdHJ5IHRvIHVzZSBsYXN0IHJl
bWFpbmRlciBpZiBpdCBpcyB0aGUKLSAgICAgICBvbmx5IGNodW5rIGluIHVuc29ydGVkIGJpbi4g
IFRoaXMgaGVscHMgcHJvbW90ZSBsb2NhbGl0eSBmb3IKLSAgICAgICBydW5zIG9mIGNvbnNlY3V0
aXZlIHNtYWxsIHJlcXVlc3RzLiBUaGlzIGlzIHRoZSBvbmx5Ci0gICAgICAgZXhjZXB0aW9uIHRv
IGJlc3QtZml0LCBhbmQgYXBwbGllcyBvbmx5IHdoZW4gdGhlcmUgaXMKLSAgICAgICBubyBleGFj
dCBmaXQgZm9yIGEgc21hbGwgY2h1bmsuCi0gICAgKi8KLSAgICAKLSAgICBpZiAoaW5fc21hbGxi
aW5fcmFuZ2UobmIpICYmIAotICAgICAgICBiY2sgPT0gdW5zb3J0ZWRfY2h1bmtzKGF2KSAmJgot
ICAgICAgICB2aWN0aW0gPT0gYXYtPmxhc3RfcmVtYWluZGVyICYmCi0gICAgICAgIChDSFVOS19T
SVpFX1QpKHNpemUpID4gKENIVU5LX1NJWkVfVCkobmIgKyBNSU5TSVpFKSkgewotICAgICAgCi0g
ICAgICAvKiBzcGxpdCBhbmQgcmVhdHRhY2ggcmVtYWluZGVyICovCi0gICAgICByZW1haW5kZXJf
c2l6ZSA9IHNpemUgLSBuYjsKLSAgICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNldCh2aWN0
aW0sIG5iKTsKLSAgICAgIHVuc29ydGVkX2NodW5rcyhhdiktPmJrID0gdW5zb3J0ZWRfY2h1bmtz
KGF2KS0+ZmQgPSByZW1haW5kZXI7Ci0gICAgICBhdi0+bGFzdF9yZW1haW5kZXIgPSByZW1haW5k
ZXI7IAotICAgICAgcmVtYWluZGVyLT5iayA9IHJlbWFpbmRlci0+ZmQgPSB1bnNvcnRlZF9jaHVu
a3MoYXYpOwotICAgICAgCi0gICAgICBzZXRfaGVhZCh2aWN0aW0sIG5iIHwgUFJFVl9JTlVTRSk7
Ci0gICAgICBzZXRfaGVhZChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplIHwgUFJFVl9JTlVTRSk7
Ci0gICAgICBzZXRfZm9vdChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplKTsKLSAgICAgIAotICAg
ICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICByZXR1cm4gY2h1bmsy
bWVtKHZpY3RpbSk7Ci0gICAgfQotICAgIAotICAgIC8qIHJlbW92ZSBmcm9tIHVuc29ydGVkIGxp
c3QgKi8KLSAgICB1bnNvcnRlZF9jaHVua3MoYXYpLT5iayA9IGJjazsKLSAgICBiY2stPmZkID0g
dW5zb3J0ZWRfY2h1bmtzKGF2KTsKLSAgICAKLSAgICAvKiBUYWtlIG5vdyBpbnN0ZWFkIG9mIGJp
bm5pbmcgaWYgZXhhY3QgZml0ICovCi0gICAgCi0gICAgaWYgKHNpemUgPT0gbmIpIHsKLSAgICAg
IHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0KHZpY3RpbSwgc2l6ZSk7Ci0gICAgICBjaGVja19tYWxs
b2NlZF9jaHVuayh2aWN0aW0sIG5iKTsKLSAgICAgIHJldHVybiBjaHVuazJtZW0odmljdGltKTsK
LSAgICB9Ci0gICAgCi0gICAgLyogcGxhY2UgY2h1bmsgaW4gYmluICovCi0gICAgCi0gICAgaWYg
KGluX3NtYWxsYmluX3JhbmdlKHNpemUpKSB7Ci0gICAgICB2aWN0aW1faW5kZXggPSBzbWFsbGJp
bl9pbmRleChzaXplKTsKLSAgICAgIGJjayA9IGJpbl9hdChhdiwgdmljdGltX2luZGV4KTsKLSAg
ICAgIGZ3ZCA9IGJjay0+ZmQ7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgdmljdGltX2luZGV4
ID0gbGFyZ2ViaW5faW5kZXgoc2l6ZSk7Ci0gICAgICBiY2sgPSBiaW5fYXQoYXYsIHZpY3RpbV9p
bmRleCk7Ci0gICAgICBmd2QgPSBiY2stPmZkOwotICAgICAgCi0gICAgICBpZiAoZndkICE9IGJj
aykgewotICAgICAgICAvKiBpZiBzbWFsbGVyIHRoYW4gc21hbGxlc3QsIHBsYWNlIGZpcnN0ICov
Ci0gICAgICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA8IChDSFVOS19TSVpFX1QpKGJjay0+
YmstPnNpemUpKSB7Ci0gICAgICAgICAgZndkID0gYmNrOwotICAgICAgICAgIGJjayA9IGJjay0+
Yms7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoKENIVU5LX1NJWkVfVCkoc2l6ZSkgPj0g
Ci0gICAgICAgICAgICAgICAgIChDSFVOS19TSVpFX1QpKEZJUlNUX1NPUlRFRF9CSU5fU0laRSkp
IHsKLSAgICAgICAgICAKLSAgICAgICAgICAvKiBtYWludGFpbiBsYXJnZSBiaW5zIGluIHNvcnRl
ZCBvcmRlciAqLwotICAgICAgICAgIHNpemUgfD0gUFJFVl9JTlVTRTsgLyogT3Igd2l0aCBpbnVz
ZSBiaXQgdG8gc3BlZWQgY29tcGFyaXNvbnMgKi8KLSAgICAgICAgICB3aGlsZSAoKENIVU5LX1NJ
WkVfVCkoc2l6ZSkgPCAoQ0hVTktfU0laRV9UKShmd2QtPnNpemUpKSAKLSAgICAgICAgICAgIGZ3
ZCA9IGZ3ZC0+ZmQ7Ci0gICAgICAgICAgYmNrID0gZndkLT5iazsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0KLSAgICAgIAotICAgIG1hcmtfYmluKGF2LCB2aWN0aW1faW5kZXgpOwotICAgIHZp
Y3RpbS0+YmsgPSBiY2s7Ci0gICAgdmljdGltLT5mZCA9IGZ3ZDsKLSAgICBmd2QtPmJrID0gdmlj
dGltOwotICAgIGJjay0+ZmQgPSB2aWN0aW07Ci0gIH0KLSAgCi0gIC8qCi0gICAgSWYgYSBsYXJn
ZSByZXF1ZXN0LCBzY2FuIHRocm91Z2ggdGhlIGNodW5rcyBvZiBjdXJyZW50IGJpbiB0bwotICAg
IGZpbmQgb25lIHRoYXQgZml0cy4gIChUaGlzIHdpbGwgYmUgdGhlIHNtYWxsZXN0IHRoYXQgZml0
cyB1bmxlc3MKLSAgICBGSVJTVF9TT1JURURfQklOX1NJWkUgaGFzIGJlZW4gY2hhbmdlZCBmcm9t
IGRlZmF1bHQuKSAgVGhpcyBpcwotICAgIHRoZSBvbmx5IHN0ZXAgd2hlcmUgYW4gdW5ib3VuZGVk
IG51bWJlciBvZiBjaHVua3MgbWlnaHQgYmUKLSAgICBzY2FubmVkIHdpdGhvdXQgZG9pbmcgYW55
dGhpbmcgdXNlZnVsIHdpdGggdGhlbS4gSG93ZXZlciB0aGUKLSAgICBsaXN0cyB0ZW5kIHRvIGJl
IHNob3J0LgotICAqLwotICAKLSAgaWYgKCFpbl9zbWFsbGJpbl9yYW5nZShuYikpIHsKLSAgICBi
aW4gPSBiaW5fYXQoYXYsIGlkeCk7Ci0gICAgCi0gICAgZm9yICh2aWN0aW0gPSBsYXN0KGJpbik7
IHZpY3RpbSAhPSBiaW47IHZpY3RpbSA9IHZpY3RpbS0+YmspIHsKLSAgICAgIHNpemUgPSBjaHVu
a3NpemUodmljdGltKTsKLSAgICAgIAotICAgICAgaWYgKChDSFVOS19TSVpFX1QpKHNpemUpID49
IChDSFVOS19TSVpFX1QpKG5iKSkgewotICAgICAgICByZW1haW5kZXJfc2l6ZSA9IHNpemUgLSBu
YjsKLSAgICAgICAgdW5saW5rKHZpY3RpbSwgYmNrLCBmd2QpOwotICAgICAgICAKLSAgICAgICAg
LyogRXhoYXVzdCAqLwotICAgICAgICBpZiAocmVtYWluZGVyX3NpemUgPCBNSU5TSVpFKSAgewot
ICAgICAgICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0KHZpY3RpbSwgc2l6ZSk7Ci0gICAgICAg
ICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICAgICAgcmV0dXJuIGNo
dW5rMm1lbSh2aWN0aW0pOwotICAgICAgICB9Ci0gICAgICAgIC8qIFNwbGl0ICovCi0gICAgICAg
IGVsc2UgewotICAgICAgICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNldCh2aWN0aW0sIG5i
KTsKLSAgICAgICAgICB1bnNvcnRlZF9jaHVua3MoYXYpLT5iayA9IHVuc29ydGVkX2NodW5rcyhh
diktPmZkID0gcmVtYWluZGVyOwotICAgICAgICAgIHJlbWFpbmRlci0+YmsgPSByZW1haW5kZXIt
PmZkID0gdW5zb3J0ZWRfY2h1bmtzKGF2KTsKLSAgICAgICAgICBzZXRfaGVhZCh2aWN0aW0sIG5i
IHwgUFJFVl9JTlVTRSk7Ci0gICAgICAgICAgc2V0X2hlYWQocmVtYWluZGVyLCByZW1haW5kZXJf
c2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgICAgIHNldF9mb290KHJlbWFpbmRlciwgcmVtYWlu
ZGVyX3NpemUpOwotICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKHZpY3RpbSwgbmIpOwot
ICAgICAgICAgIHJldHVybiBjaHVuazJtZW0odmljdGltKTsKLSAgICAgICAgfSAKLSAgICAgIH0K
LSAgICB9ICAgIAotICB9Ci0KLSAgLyoKLSAgICBTZWFyY2ggZm9yIGEgY2h1bmsgYnkgc2Nhbm5p
bmcgYmlucywgc3RhcnRpbmcgd2l0aCBuZXh0IGxhcmdlc3QKLSAgICBiaW4uIFRoaXMgc2VhcmNo
IGlzIHN0cmljdGx5IGJ5IGJlc3QtZml0OyBpLmUuLCB0aGUgc21hbGxlc3QKLSAgICAod2l0aCB0
aWVzIGdvaW5nIHRvIGFwcHJveGltYXRlbHkgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQpIGNodW5r
Ci0gICAgdGhhdCBmaXRzIGlzIHNlbGVjdGVkLgotICAgIAotICAgIFRoZSBiaXRtYXAgYXZvaWRz
IG5lZWRpbmcgdG8gY2hlY2sgdGhhdCBtb3N0IGJsb2NrcyBhcmUgbm9uZW1wdHkuCi0gICovCi0g
ICAgCi0gICsraWR4OwotICBiaW4gPSBiaW5fYXQoYXYsaWR4KTsKLSAgYmxvY2sgPSBpZHgyYmxv
Y2soaWR4KTsKLSAgbWFwID0gYXYtPmJpbm1hcFtibG9ja107Ci0gIGJpdCA9IGlkeDJiaXQoaWR4
KTsKLSAgCi0gIGZvciAoOzspIHsKLSAgICAKLSAgICAvKiBTa2lwIHJlc3Qgb2YgYmxvY2sgaWYg
dGhlcmUgYXJlIG5vIG1vcmUgc2V0IGJpdHMgaW4gdGhpcyBibG9jay4gICovCi0gICAgaWYgKGJp
dCA+IG1hcCB8fCBiaXQgPT0gMCkgewotICAgICAgZG8gewotICAgICAgICBpZiAoKytibG9jayA+
PSBCSU5NQVBTSVpFKSAgLyogb3V0IG9mIGJpbnMgKi8KLSAgICAgICAgICBnb3RvIHVzZV90b3A7
Ci0gICAgICB9IHdoaWxlICggKG1hcCA9IGF2LT5iaW5tYXBbYmxvY2tdKSA9PSAwKTsKLSAgICAg
IAotICAgICAgYmluID0gYmluX2F0KGF2LCAoYmxvY2sgPDwgQklOTUFQU0hJRlQpKTsKLSAgICAg
IGJpdCA9IDE7Ci0gICAgfQotICAgIAotICAgIC8qIEFkdmFuY2UgdG8gYmluIHdpdGggc2V0IGJp
dC4gVGhlcmUgbXVzdCBiZSBvbmUuICovCi0gICAgd2hpbGUgKChiaXQgJiBtYXApID09IDApIHsK
LSAgICAgIGJpbiA9IG5leHRfYmluKGJpbik7Ci0gICAgICBiaXQgPDw9IDE7Ci0gICAgICBhc3Nl
cnQoYml0ICE9IDApOwotICAgIH0KLSAgICAKLSAgICAvKiBJbnNwZWN0IHRoZSBiaW4uIEl0IGlz
IGxpa2VseSB0byBiZSBub24tZW1wdHkgKi8KLSAgICB2aWN0aW0gPSBsYXN0KGJpbik7Ci0gICAg
Ci0gICAgLyogIElmIGEgZmFsc2UgYWxhcm0gKGVtcHR5IGJpbiksIGNsZWFyIHRoZSBiaXQuICov
Ci0gICAgaWYgKHZpY3RpbSA9PSBiaW4pIHsKLSAgICAgIGF2LT5iaW5tYXBbYmxvY2tdID0gbWFw
ICY9IH5iaXQ7IC8qIFdyaXRlIHRocm91Z2ggKi8KLSAgICAgIGJpbiA9IG5leHRfYmluKGJpbik7
Ci0gICAgICBiaXQgPDw9IDE7Ci0gICAgfQotICAgIAotICAgIGVsc2UgewotICAgICAgc2l6ZSA9
IGNodW5rc2l6ZSh2aWN0aW0pOwotICAgICAgCi0gICAgICAvKiAgV2Uga25vdyB0aGUgZmlyc3Qg
Y2h1bmsgaW4gdGhpcyBiaW4gaXMgYmlnIGVub3VnaCB0byB1c2UuICovCi0gICAgICBhc3NlcnQo
KENIVU5LX1NJWkVfVCkoc2l6ZSkgPj0gKENIVU5LX1NJWkVfVCkobmIpKTsKLSAgICAgIAotICAg
ICAgcmVtYWluZGVyX3NpemUgPSBzaXplIC0gbmI7Ci0gICAgICAKLSAgICAgIC8qIHVubGluayAq
LwotICAgICAgYmNrID0gdmljdGltLT5iazsKLSAgICAgIGJpbi0+YmsgPSBiY2s7Ci0gICAgICBi
Y2stPmZkID0gYmluOwotICAgICAgCi0gICAgICAvKiBFeGhhdXN0ICovCi0gICAgICBpZiAocmVt
YWluZGVyX3NpemUgPCBNSU5TSVpFKSB7Ci0gICAgICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0
KHZpY3RpbSwgc2l6ZSk7Ci0gICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKHZpY3RpbSwgbmIp
OwotICAgICAgICByZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7Ci0gICAgICB9Ci0gICAgICAKLSAg
ICAgIC8qIFNwbGl0ICovCi0gICAgICBlbHNlIHsKLSAgICAgICAgcmVtYWluZGVyID0gY2h1bmtf
YXRfb2Zmc2V0KHZpY3RpbSwgbmIpOwotICAgICAgICAKLSAgICAgICAgdW5zb3J0ZWRfY2h1bmtz
KGF2KS0+YmsgPSB1bnNvcnRlZF9jaHVua3MoYXYpLT5mZCA9IHJlbWFpbmRlcjsKLSAgICAgICAg
cmVtYWluZGVyLT5iayA9IHJlbWFpbmRlci0+ZmQgPSB1bnNvcnRlZF9jaHVua3MoYXYpOwotICAg
ICAgICAvKiBhZHZlcnRpc2UgYXMgbGFzdCByZW1haW5kZXIgKi8KLSAgICAgICAgaWYgKGluX3Nt
YWxsYmluX3JhbmdlKG5iKSkgCi0gICAgICAgICAgYXYtPmxhc3RfcmVtYWluZGVyID0gcmVtYWlu
ZGVyOyAKLSAgICAgICAgCi0gICAgICAgIHNldF9oZWFkKHZpY3RpbSwgbmIgfCBQUkVWX0lOVVNF
KTsKLSAgICAgICAgc2V0X2hlYWQocmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSB8IFBSRVZfSU5V
U0UpOwotICAgICAgICBzZXRfZm9vdChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplKTsKLSAgICAg
ICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICAgIHJldHVybiBjaHVu
azJtZW0odmljdGltKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICB1c2VfdG9wOiAgICAKLSAg
LyoKLSAgICBJZiBsYXJnZSBlbm91Z2gsIHNwbGl0IG9mZiB0aGUgY2h1bmsgYm9yZGVyaW5nIHRo
ZSBlbmQgb2YgbWVtb3J5Ci0gICAgKGhlbGQgaW4gYXYtPnRvcCkuIE5vdGUgdGhhdCB0aGlzIGlz
IGluIGFjY29yZCB3aXRoIHRoZSBiZXN0LWZpdAotICAgIHNlYXJjaCBydWxlLiAgSW4gZWZmZWN0
LCBhdi0+dG9wIGlzIHRyZWF0ZWQgYXMgbGFyZ2VyIChhbmQgdGh1cwotICAgIGxlc3Mgd2VsbCBm
aXR0aW5nKSB0aGFuIGFueSBvdGhlciBhdmFpbGFibGUgY2h1bmsgc2luY2UgaXQgY2FuCi0gICAg
YmUgZXh0ZW5kZWQgdG8gYmUgYXMgbGFyZ2UgYXMgbmVjZXNzYXJ5ICh1cCB0byBzeXN0ZW0KLSAg
ICBsaW1pdGF0aW9ucykuCi0gICAgCi0gICAgV2UgcmVxdWlyZSB0aGF0IGF2LT50b3AgYWx3YXlz
IGV4aXN0cyAoaS5lLiwgaGFzIHNpemUgPj0KLSAgICBNSU5TSVpFKSBhZnRlciBpbml0aWFsaXph
dGlvbiwgc28gaWYgaXQgd291bGQgb3RoZXJ3aXNlIGJlCi0gICAgZXhodWFzdGVkIGJ5IGN1cnJl
bnQgcmVxdWVzdCwgaXQgaXMgcmVwbGVuaXNoZWQuIChUaGUgbWFpbgotICAgIHJlYXNvbiBmb3Ig
ZW5zdXJpbmcgaXQgZXhpc3RzIGlzIHRoYXQgd2UgbWF5IG5lZWQgTUlOU0laRSBzcGFjZQotICAg
IHRvIHB1dCBpbiBmZW5jZXBvc3RzIGluIHN5c21hbGxvYy4pCi0gICovCi0gIAotICB2aWN0aW0g
PSBhdi0+dG9wOwotICBzaXplID0gY2h1bmtzaXplKHZpY3RpbSk7Ci0gIAotICBpZiAoKENIVU5L
X1NJWkVfVCkoc2l6ZSkgPj0gKENIVU5LX1NJWkVfVCkobmIgKyBNSU5TSVpFKSkgewotICAgIHJl
bWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOwotICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNl
dCh2aWN0aW0sIG5iKTsKLSAgICBhdi0+dG9wID0gcmVtYWluZGVyOwotICAgIHNldF9oZWFkKHZp
Y3RpbSwgbmIgfCBQUkVWX0lOVVNFKTsKLSAgICBzZXRfaGVhZChyZW1haW5kZXIsIHJlbWFpbmRl
cl9zaXplIHwgUFJFVl9JTlVTRSk7Ci0gICAgCi0gICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmlj
dGltLCBuYik7Ci0gICAgcmV0dXJuIGNodW5rMm1lbSh2aWN0aW0pOwotICB9Ci0gIAotICAvKiAK
LSAgICAgSWYgbm8gc3BhY2UgaW4gdG9wLCByZWxheSB0byBoYW5kbGUgc3lzdGVtLWRlcGVuZGVu
dCBjYXNlcyAKLSAgKi8KLSAgcmV0dXJuIHNZU01BTExPYyhuYiwgYXYpOyAgICAKLX0KLQotLyoK
LSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZyZWUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0qLwotCi0jaWYgX19TVERfQwotdm9pZCBmUkVlKFZvaWRfdCogbWVtKQot
I2Vsc2UKLXZvaWQgZlJFZShtZW0pIFZvaWRfdCogbWVtOwotI2VuZGlmCi17Ci0gIG1zdGF0ZSBh
diA9IGdldF9tYWxsb2Nfc3RhdGUoKTsKLQotICBtY2h1bmtwdHIgICAgICAgcDsgICAgICAgICAg
IC8qIGNodW5rIGNvcnJlc3BvbmRpbmcgdG8gbWVtICovCi0gIElOVEVSTkFMX1NJWkVfVCBzaXpl
OyAgICAgICAgLyogaXRzIHNpemUgKi8KLSAgbWZhc3RiaW5wdHIqICAgIGZiOyAgICAgICAgICAv
KiBhc3NvY2lhdGVkIGZhc3RiaW4gKi8KLSAgbWNodW5rcHRyICAgICAgIG5leHRjaHVuazsgICAv
KiBuZXh0IGNvbnRpZ3VvdXMgY2h1bmsgKi8KLSAgSU5URVJOQUxfU0laRV9UIG5leHRzaXplOyAg
ICAvKiBpdHMgc2l6ZSAqLwotICBpbnQgICAgICAgICAgICAgbmV4dGludXNlOyAgIC8qIHRydWUg
aWYgbmV4dGNodW5rIGlzIHVzZWQgKi8KLSAgSU5URVJOQUxfU0laRV9UIHByZXZzaXplOyAgICAv
KiBzaXplIG9mIHByZXZpb3VzIGNvbnRpZ3VvdXMgY2h1bmsgKi8KLSAgbWNodW5rcHRyICAgICAg
IGJjazsgICAgICAgICAvKiBtaXNjIHRlbXAgZm9yIGxpbmtpbmcgKi8KLSAgbWNodW5rcHRyICAg
ICAgIGZ3ZDsgICAgICAgICAvKiBtaXNjIHRlbXAgZm9yIGxpbmtpbmcgKi8KLQotICAvKiBmcmVl
KDApIGhhcyBubyBlZmZlY3QgKi8KLSAgaWYgKG1lbSAhPSAwKSB7Ci0gICAgcCA9IG1lbTJjaHVu
ayhtZW0pOwotICAgIHNpemUgPSBjaHVua3NpemUocCk7Ci0KLSAgICBjaGVja19pbnVzZV9jaHVu
ayhwKTsKLQotICAgIC8qCi0gICAgICBJZiBlbGlnaWJsZSwgcGxhY2UgY2h1bmsgb24gYSBmYXN0
YmluIHNvIGl0IGNhbiBiZSBmb3VuZAotICAgICAgYW5kIHVzZWQgcXVpY2tseSBpbiBtYWxsb2Mu
Ci0gICAgKi8KLQotICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA8PSAoQ0hVTktfU0laRV9U
KShhdi0+bWF4X2Zhc3QpCi0KLSNpZiBUUklNX0ZBU1RCSU5TCi0gICAgICAgIC8qIAotICAgICAg
ICAgICBJZiBUUklNX0ZBU1RCSU5TIHNldCwgZG9uJ3QgcGxhY2UgY2h1bmtzCi0gICAgICAgICAg
IGJvcmRlcmluZyB0b3AgaW50byBmYXN0YmlucwotICAgICAgICAqLwotICAgICAgICAmJiAoY2h1
bmtfYXRfb2Zmc2V0KHAsIHNpemUpICE9IGF2LT50b3ApCi0jZW5kaWYKLSAgICAgICAgKSB7Ci0K
LSAgICAgIHNldF9mYXN0Y2h1bmtzKGF2KTsKLSAgICAgIGZiID0gJihhdi0+ZmFzdGJpbnNbZmFz
dGJpbl9pbmRleChzaXplKV0pOwotICAgICAgcC0+ZmQgPSAqZmI7Ci0gICAgICAqZmIgPSBwOwot
ICAgIH0KLQotICAgIC8qCi0gICAgICAgQ29uc29saWRhdGUgb3RoZXIgbm9uLW1tYXBwZWQgY2h1
bmtzIGFzIHRoZXkgYXJyaXZlLgotICAgICovCi0KLSAgICBlbHNlIGlmICghY2h1bmtfaXNfbW1h
cHBlZChwKSkgewotICAgICAgc2V0X2FueWNodW5rcyhhdik7Ci0KLSAgICAgIG5leHRjaHVuayA9
IGNodW5rX2F0X29mZnNldChwLCBzaXplKTsKLSAgICAgIG5leHRzaXplID0gY2h1bmtzaXplKG5l
eHRjaHVuayk7Ci0KLSAgICAgIC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovCi0gICAgICBpZiAo
IXByZXZfaW51c2UocCkpIHsKLSAgICAgICAgcHJldnNpemUgPSBwLT5wcmV2X3NpemU7Ci0gICAg
ICAgIHNpemUgKz0gcHJldnNpemU7Ci0gICAgICAgIHAgPSBjaHVua19hdF9vZmZzZXQocCwgLSgo
bG9uZykgcHJldnNpemUpKTsKLSAgICAgICAgdW5saW5rKHAsIGJjaywgZndkKTsKLSAgICAgIH0K
LQotICAgICAgaWYgKG5leHRjaHVuayAhPSBhdi0+dG9wKSB7Ci0gICAgICAgIC8qIGdldCBhbmQg
Y2xlYXIgaW51c2UgYml0ICovCi0gICAgICAgIG5leHRpbnVzZSA9IGludXNlX2JpdF9hdF9vZmZz
ZXQobmV4dGNodW5rLCBuZXh0c2l6ZSk7Ci0gICAgICAgIHNldF9oZWFkKG5leHRjaHVuaywgbmV4
dHNpemUpOwotCi0gICAgICAgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8KLSAgICAgICAgaWYg
KCFuZXh0aW51c2UpIHsKLSAgICAgICAgICB1bmxpbmsobmV4dGNodW5rLCBiY2ssIGZ3ZCk7Ci0g
ICAgICAgICAgc2l6ZSArPSBuZXh0c2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAg
ICAgICAgUGxhY2UgdGhlIGNodW5rIGluIHVuc29ydGVkIGNodW5rIGxpc3QuIENodW5rcyBhcmUK
LSAgICAgICAgICBub3QgcGxhY2VkIGludG8gcmVndWxhciBiaW5zIHVudGlsIGFmdGVyIHRoZXkg
aGF2ZQotICAgICAgICAgIGJlZW4gZ2l2ZW4gb25lIGNoYW5jZSB0byBiZSB1c2VkIGluIG1hbGxv
Yy4KLSAgICAgICAgKi8KLQotICAgICAgICBiY2sgPSB1bnNvcnRlZF9jaHVua3MoYXYpOwotICAg
ICAgICBmd2QgPSBiY2stPmZkOwotICAgICAgICBwLT5iayA9IGJjazsKLSAgICAgICAgcC0+ZmQg
PSBmd2Q7Ci0gICAgICAgIGJjay0+ZmQgPSBwOwotICAgICAgICBmd2QtPmJrID0gcDsKLQotICAg
ICAgICBzZXRfaGVhZChwLCBzaXplIHwgUFJFVl9JTlVTRSk7Ci0gICAgICAgIHNldF9mb290KHAs
IHNpemUpOwotICAgICAgICAKLSAgICAgICAgY2hlY2tfZnJlZV9jaHVuayhwKTsKLSAgICAgIH0K
LQotICAgICAgLyoKLSAgICAgICAgIElmIHRoZSBjaHVuayBib3JkZXJzIHRoZSBjdXJyZW50IGhp
Z2ggZW5kIG9mIG1lbW9yeSwKLSAgICAgICAgIGNvbnNvbGlkYXRlIGludG8gdG9wCi0gICAgICAq
LwotCi0gICAgICBlbHNlIHsKLSAgICAgICAgc2l6ZSArPSBuZXh0c2l6ZTsKLSAgICAgICAgc2V0
X2hlYWQocCwgc2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgICBhdi0+dG9wID0gcDsKLSAgICAg
ICAgY2hlY2tfY2h1bmsocCk7Ci0gICAgICB9Ci0KLSAgICAgIC8qCi0gICAgICAgIElmIGZyZWVp
bmcgYSBsYXJnZSBzcGFjZSwgY29uc29saWRhdGUgcG9zc2libHktc3Vycm91bmRpbmcKLSAgICAg
ICAgY2h1bmtzLiBUaGVuLCBpZiB0aGUgdG90YWwgdW51c2VkIHRvcG1vc3QgbWVtb3J5IGV4Y2Vl
ZHMgdHJpbQotICAgICAgICB0aHJlc2hvbGQsIGFzayBtYWxsb2NfdHJpbSB0byByZWR1Y2UgdG9w
LgotCi0gICAgICAgIFVubGVzcyBtYXhfZmFzdCBpcyAwLCB3ZSBkb24ndCBrbm93IGlmIHRoZXJl
IGFyZSBmYXN0YmlucwotICAgICAgICBib3JkZXJpbmcgdG9wLCBzbyB3ZSBjYW5ub3QgdGVsbCBm
b3Igc3VyZSB3aGV0aGVyIHRocmVzaG9sZAotICAgICAgICBoYXMgYmVlbiByZWFjaGVkIHVubGVz
cyBmYXN0YmlucyBhcmUgY29uc29saWRhdGVkLiAgQnV0IHdlCi0gICAgICAgIGRvbid0IHdhbnQg
dG8gY29uc29saWRhdGUgb24gZWFjaCBmcmVlLiAgQXMgYSBjb21wcm9taXNlLAotICAgICAgICBj
b25zb2xpZGF0aW9uIGlzIHBlcmZvcm1lZCBpZiBGQVNUQklOX0NPTlNPTElEQVRJT05fVEhSRVNI
T0xECi0gICAgICAgIGlzIHJlYWNoZWQuCi0gICAgICAqLwotCi0gICAgICBpZiAoKENIVU5LX1NJ
WkVfVCkoc2l6ZSkgPj0gRkFTVEJJTl9DT05TT0xJREFUSU9OX1RIUkVTSE9MRCkgeyAKLSAgICAg
ICAgaWYgKGhhdmVfZmFzdGNodW5rcyhhdikpIAotICAgICAgICAgIG1hbGxvY19jb25zb2xpZGF0
ZShhdik7Ci0KLSNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0gICAgICAgIAotICAgICAgICBp
ZiAoKENIVU5LX1NJWkVfVCkoY2h1bmtzaXplKGF2LT50b3ApKSA+PSAKLSAgICAgICAgICAgIChD
SFVOS19TSVpFX1QpKGF2LT50cmltX3RocmVzaG9sZCkpCi0gICAgICAgICAgc1lTVFJJbShhdi0+
dG9wX3BhZCwgYXYpOwotI2VuZGlmCi0gICAgICB9Ci0KLSAgICB9Ci0gICAgLyoKLSAgICAgIElm
IHRoZSBjaHVuayB3YXMgYWxsb2NhdGVkIHZpYSBtbWFwLCByZWxlYXNlIHZpYSBtdW5tYXAoKQot
ICAgICAgTm90ZSB0aGF0IGlmIEhBVkVfTU1BUCBpcyBmYWxzZSBidXQgY2h1bmtfaXNfbW1hcHBl
ZCBpcwotICAgICAgdHJ1ZSwgdGhlbiB1c2VyIG11c3QgaGF2ZSBvdmVyd3JpdHRlbiBtZW1vcnku
IFRoZXJlJ3Mgbm90aGluZwotICAgICAgd2UgY2FuIGRvIHRvIGNhdGNoIHRoaXMgZXJyb3IgdW5s
ZXNzIERFQlVHIGlzIHNldCwgaW4gd2hpY2ggY2FzZQotICAgICAgY2hlY2tfaW51c2VfY2h1bmsg
KGFib3ZlKSB3aWxsIGhhdmUgdHJpZ2dlcmVkIGVycm9yLgotICAgICovCi0KLSAgICBlbHNlIHsK
LSNpZiBIQVZFX01NQVAKLSAgICAgIGludCByZXQ7Ci0gICAgICBJTlRFUk5BTF9TSVpFX1Qgb2Zm
c2V0ID0gcC0+cHJldl9zaXplOwotICAgICAgYXYtPm5fbW1hcHMtLTsKLSAgICAgIGF2LT5tbWFw
cGVkX21lbSAtPSAoc2l6ZSArIG9mZnNldCk7Ci0gICAgICByZXQgPSBtdW5tYXAoKGNoYXIqKXAg
LSBvZmZzZXQsIHNpemUgKyBvZmZzZXQpOwotICAgICAgLyogbXVubWFwIHJldHVybnMgbm9uLXpl
cm8gb24gZmFpbHVyZSAqLwotICAgICAgYXNzZXJ0KHJldCA9PSAwKTsKLSNlbmRpZgotICAgIH0K
LSAgfQotfQotCi0vKgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvY19jb25zb2xp
ZGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgbWFsbG9jX2NvbnNvbGlkYXRlIGlz
IGEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBmcmVlKCkgdGhhdCB0ZWFycwotICBkb3duIGNodW5r
cyBoZWxkIGluIGZhc3RiaW5zLiAgRnJlZSBpdHNlbGYgY2Fubm90IGJlIHVzZWQgZm9yIHRoaXMK
LSAgcHVycG9zZSBzaW5jZSwgYW1vbmcgb3RoZXIgdGhpbmdzLCBpdCBtaWdodCBwbGFjZSBjaHVu
a3MgYmFjayBvbnRvCi0gIGZhc3RiaW5zLiAgU28sIGluc3RlYWQsIHdlIG5lZWQgdG8gdXNlIGEg
bWlub3IgdmFyaWFudCBvZiB0aGUgc2FtZQotICBjb2RlLgotICAKLSAgQWxzbywgYmVjYXVzZSB0
aGlzIHJvdXRpbmUgbmVlZHMgdG8gYmUgY2FsbGVkIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gKLSAg
bWFsbG9jIGFueXdheSwgaXQgdHVybnMgb3V0IHRvIGJlIHRoZSBwZXJmZWN0IHBsYWNlIHRvIHRy
aWdnZXIKLSAgaW5pdGlhbGl6YXRpb24gY29kZS4KLSovCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMg
dm9pZCBtYWxsb2NfY29uc29saWRhdGUobXN0YXRlIGF2KQotI2Vsc2UKLXN0YXRpYyB2b2lkIG1h
bGxvY19jb25zb2xpZGF0ZShhdikgbXN0YXRlIGF2OwotI2VuZGlmCi17Ci0gIG1mYXN0YmlucHRy
KiAgICBmYjsgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgZmFzdGJpbiBiZWluZyBjb25zb2xp
ZGF0ZWQgKi8KLSAgbWZhc3RiaW5wdHIqICAgIG1heGZiOyAgICAgICAgICAgICAgLyogbGFzdCBm
YXN0YmluIChmb3IgbG9vcCBjb250cm9sKSAqLwotICBtY2h1bmtwdHIgICAgICAgcDsgICAgICAg
ICAgICAgICAgICAvKiBjdXJyZW50IGNodW5rIGJlaW5nIGNvbnNvbGlkYXRlZCAqLwotICBtY2h1
bmtwdHIgICAgICAgbmV4dHA7ICAgICAgICAgICAgICAvKiBuZXh0IGNodW5rIHRvIGNvbnNvbGlk
YXRlICovCi0gIG1jaHVua3B0ciAgICAgICB1bnNvcnRlZF9iaW47ICAgICAgIC8qIGJpbiBoZWFk
ZXIgKi8KLSAgbWNodW5rcHRyICAgICAgIGZpcnN0X3Vuc29ydGVkOyAgICAgLyogY2h1bmsgdG8g
bGluayB0byAqLwotCi0gIC8qIFRoZXNlIGhhdmUgc2FtZSB1c2UgYXMgaW4gZnJlZSgpICovCi0g
IG1jaHVua3B0ciAgICAgICBuZXh0Y2h1bms7Ci0gIElOVEVSTkFMX1NJWkVfVCBzaXplOwotICBJ
TlRFUk5BTF9TSVpFX1QgbmV4dHNpemU7Ci0gIElOVEVSTkFMX1NJWkVfVCBwcmV2c2l6ZTsKLSAg
aW50ICAgICAgICAgICAgIG5leHRpbnVzZTsKLSAgbWNodW5rcHRyICAgICAgIGJjazsKLSAgbWNo
dW5rcHRyICAgICAgIGZ3ZDsKLQotICAvKgotICAgIElmIG1heF9mYXN0IGlzIDAsIHdlIGtub3cg
dGhhdCBhdiBoYXNuJ3QKLSAgICB5ZXQgYmVlbiBpbml0aWFsaXplZCwgaW4gd2hpY2ggY2FzZSBk
byBzbyBiZWxvdwotICAqLwotCi0gIGlmIChhdi0+bWF4X2Zhc3QgIT0gMCkgewotICAgIGNsZWFy
X2Zhc3RjaHVua3MoYXYpOwotCi0gICAgdW5zb3J0ZWRfYmluID0gdW5zb3J0ZWRfY2h1bmtzKGF2
KTsKLQotICAgIC8qCi0gICAgICBSZW1vdmUgZWFjaCBjaHVuayBmcm9tIGZhc3QgYmluIGFuZCBj
b25zb2xpZGF0ZSBpdCwgcGxhY2luZyBpdAotICAgICAgdGhlbiBpbiB1bnNvcnRlZCBiaW4uIEFt
b25nIG90aGVyIHJlYXNvbnMgZm9yIGRvaW5nIHRoaXMsCi0gICAgICBwbGFjaW5nIGluIHVuc29y
dGVkIGJpbiBhdm9pZHMgbmVlZGluZyB0byBjYWxjdWxhdGUgYWN0dWFsIGJpbnMKLSAgICAgIHVu
dGlsIG1hbGxvYyBpcyBzdXJlIHRoYXQgY2h1bmtzIGFyZW4ndCBpbW1lZGlhdGVseSBnb2luZyB0
byBiZQotICAgICAgcmV1c2VkIGFueXdheS4KLSAgICAqLwotICAgIAotICAgIG1heGZiID0gJihh
di0+ZmFzdGJpbnNbZmFzdGJpbl9pbmRleChhdi0+bWF4X2Zhc3QpXSk7Ci0gICAgZmIgPSAmKGF2
LT5mYXN0Ymluc1swXSk7Ci0gICAgZG8gewotICAgICAgaWYgKCAocCA9ICpmYikgIT0gMCkgewot
ICAgICAgICAqZmIgPSAwOwotICAgICAgICAKLSAgICAgICAgZG8gewotICAgICAgICAgIGNoZWNr
X2ludXNlX2NodW5rKHApOwotICAgICAgICAgIG5leHRwID0gcC0+ZmQ7Ci0gICAgICAgICAgCi0g
ICAgICAgICAgLyogU2xpZ2h0bHkgc3RyZWFtbGluZWQgdmVyc2lvbiBvZiBjb25zb2xpZGF0aW9u
IGNvZGUgaW4gZnJlZSgpICovCi0gICAgICAgICAgc2l6ZSA9IHAtPnNpemUgJiB+UFJFVl9JTlVT
RTsKLSAgICAgICAgICBuZXh0Y2h1bmsgPSBjaHVua19hdF9vZmZzZXQocCwgc2l6ZSk7Ci0gICAg
ICAgICAgbmV4dHNpemUgPSBjaHVua3NpemUobmV4dGNodW5rKTsKLSAgICAgICAgICAKLSAgICAg
ICAgICBpZiAoIXByZXZfaW51c2UocCkpIHsKLSAgICAgICAgICAgIHByZXZzaXplID0gcC0+cHJl
dl9zaXplOwotICAgICAgICAgICAgc2l6ZSArPSBwcmV2c2l6ZTsKLSAgICAgICAgICAgIHAgPSBj
aHVua19hdF9vZmZzZXQocCwgLSgobG9uZykgcHJldnNpemUpKTsKLSAgICAgICAgICAgIHVubGlu
ayhwLCBiY2ssIGZ3ZCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGlmIChu
ZXh0Y2h1bmsgIT0gYXYtPnRvcCkgewotICAgICAgICAgICAgbmV4dGludXNlID0gaW51c2VfYml0
X2F0X29mZnNldChuZXh0Y2h1bmssIG5leHRzaXplKTsKLSAgICAgICAgICAgIHNldF9oZWFkKG5l
eHRjaHVuaywgbmV4dHNpemUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW5leHRp
bnVzZSkgewotICAgICAgICAgICAgICBzaXplICs9IG5leHRzaXplOwotICAgICAgICAgICAgICB1
bmxpbmsobmV4dGNodW5rLCBiY2ssIGZ3ZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGZpcnN0X3Vuc29ydGVkID0gdW5zb3J0ZWRfYmluLT5mZDsKLSAgICAgICAg
ICAgIHVuc29ydGVkX2Jpbi0+ZmQgPSBwOwotICAgICAgICAgICAgZmlyc3RfdW5zb3J0ZWQtPmJr
ID0gcDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0X2hlYWQocCwgc2l6ZSB8IFBSRVZf
SU5VU0UpOwotICAgICAgICAgICAgcC0+YmsgPSB1bnNvcnRlZF9iaW47Ci0gICAgICAgICAgICBw
LT5mZCA9IGZpcnN0X3Vuc29ydGVkOwotICAgICAgICAgICAgc2V0X2Zvb3QocCwgc2l6ZSk7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2l6
ZSArPSBuZXh0c2l6ZTsKLSAgICAgICAgICAgIHNldF9oZWFkKHAsIHNpemUgfCBQUkVWX0lOVVNF
KTsKLSAgICAgICAgICAgIGF2LT50b3AgPSBwOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAg
ICAgICAgfSB3aGlsZSAoIChwID0gbmV4dHApICE9IDApOwotICAgICAgICAKLSAgICAgIH0KLSAg
ICB9IHdoaWxlIChmYisrICE9IG1heGZiKTsKLSAgfQotICBlbHNlIHsKLSAgICBtYWxsb2NfaW5p
dF9zdGF0ZShhdik7Ci0gICAgY2hlY2tfbWFsbG9jX3N0YXRlKCk7Ci0gIH0KLX0KLQotLyoKLSAg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlYWxsb2MgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0qLwotCi0KLSNpZiBfX1NURF9DCi1Wb2lkX3QqIHJFQUxMT2MoVm9pZF90
KiBvbGRtZW0sIHNpemVfdCBieXRlcykKLSNlbHNlCi1Wb2lkX3QqIHJFQUxMT2Mob2xkbWVtLCBi
eXRlcykgVm9pZF90KiBvbGRtZW07IHNpemVfdCBieXRlczsKLSNlbmRpZgotewotICBtc3RhdGUg
YXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0KLSAgSU5URVJOQUxfU0laRV9UICBuYjsgICAgICAg
ICAgICAgIC8qIHBhZGRlZCByZXF1ZXN0IHNpemUgKi8KLQotICBtY2h1bmtwdHIgICAgICAgIG9s
ZHA7ICAgICAgICAgICAgLyogY2h1bmsgY29ycmVzcG9uZGluZyB0byBvbGRtZW0gKi8KLSAgSU5U
RVJOQUxfU0laRV9UICBvbGRzaXplOyAgICAgICAgIC8qIGl0cyBzaXplICovCi0KLSAgbWNodW5r
cHRyICAgICAgICBuZXdwOyAgICAgICAgICAgIC8qIGNodW5rIHRvIHJldHVybiAqLwotICBJTlRF
Uk5BTF9TSVpFX1QgIG5ld3NpemU7ICAgICAgICAgLyogaXRzIHNpemUgKi8KLSAgVm9pZF90KiAg
ICAgICAgICBuZXdtZW07ICAgICAgICAgIC8qIGNvcnJlc3BvbmRpbmcgdXNlciBtZW0gKi8KLQot
ICBtY2h1bmtwdHIgICAgICAgIG5leHQ7ICAgICAgICAgICAgLyogbmV4dCBjb250aWd1b3VzIGNo
dW5rIGFmdGVyIG9sZHAgKi8KLQotICBtY2h1bmtwdHIgICAgICAgIHJlbWFpbmRlcjsgICAgICAg
LyogZXh0cmEgc3BhY2UgYXQgZW5kIG9mIG5ld3AgKi8KLSAgQ0hVTktfU0laRV9UICAgICByZW1h
aW5kZXJfc2l6ZTsgIC8qIGl0cyBzaXplICovCi0KLSAgbWNodW5rcHRyICAgICAgICBiY2s7ICAg
ICAgICAgICAgIC8qIG1pc2MgdGVtcCBmb3IgbGlua2luZyAqLwotICBtY2h1bmtwdHIgICAgICAg
IGZ3ZDsgICAgICAgICAgICAgLyogbWlzYyB0ZW1wIGZvciBsaW5raW5nICovCi0KLSAgQ0hVTktf
U0laRV9UICAgICBjb3B5c2l6ZTsgICAgICAgIC8qIGJ5dGVzIHRvIGNvcHkgKi8KLSAgdW5zaWdu
ZWQgaW50ICAgICBuY29waWVzOyAgICAgICAgIC8qIElOVEVSTkFMX1NJWkVfVCB3b3JkcyB0byBj
b3B5ICovCi0gIElOVEVSTkFMX1NJWkVfVCogczsgICAgICAgICAgICAgICAvKiBjb3B5IHNvdXJj
ZSAqLyAKLSAgSU5URVJOQUxfU0laRV9UKiBkOyAgICAgICAgICAgICAgIC8qIGNvcHkgZGVzdGlu
YXRpb24gKi8KLQotCi0jaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCi0gIGlmIChieXRl
cyA9PSAwKSB7Ci0gICAgZlJFZShvbGRtZW0pOwotICAgIHJldHVybiAwOwotICB9Ci0jZW5kaWYK
LQotICAvKiByZWFsbG9jIG9mIG51bGwgaXMgc3VwcG9zZWQgdG8gYmUgc2FtZSBhcyBtYWxsb2Mg
Ki8KLSAgaWYgKG9sZG1lbSA9PSAwKSByZXR1cm4gbUFMTE9jKGJ5dGVzKTsKLQotICBjaGVja2Vk
X3JlcXVlc3Qyc2l6ZShieXRlcywgbmIpOwotCi0gIG9sZHAgICAgPSBtZW0yY2h1bmsob2xkbWVt
KTsKLSAgb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKLQotICBjaGVja19pbnVzZV9jaHVuayhv
bGRwKTsKLQotICBpZiAoIWNodW5rX2lzX21tYXBwZWQob2xkcCkpIHsKLQotICAgIGlmICgoQ0hV
TktfU0laRV9UKShvbGRzaXplKSA+PSAoQ0hVTktfU0laRV9UKShuYikpIHsKLSAgICAgIC8qIGFs
cmVhZHkgYmlnIGVub3VnaDsgc3BsaXQgYmVsb3cgKi8KLSAgICAgIG5ld3AgPSBvbGRwOwotICAg
ICAgbmV3c2l6ZSA9IG9sZHNpemU7Ci0gICAgfQotCi0gICAgZWxzZSB7Ci0gICAgICBuZXh0ID0g
Y2h1bmtfYXRfb2Zmc2V0KG9sZHAsIG9sZHNpemUpOwotCi0gICAgICAvKiBUcnkgdG8gZXhwYW5k
IGZvcndhcmQgaW50byB0b3AgKi8KLSAgICAgIGlmIChuZXh0ID09IGF2LT50b3AgJiYKLSAgICAg
ICAgICAoQ0hVTktfU0laRV9UKShuZXdzaXplID0gb2xkc2l6ZSArIGNodW5rc2l6ZShuZXh0KSkg
Pj0KLSAgICAgICAgICAoQ0hVTktfU0laRV9UKShuYiArIE1JTlNJWkUpKSB7Ci0gICAgICAgIHNl
dF9oZWFkX3NpemUob2xkcCwgbmIpOwotICAgICAgICBhdi0+dG9wID0gY2h1bmtfYXRfb2Zmc2V0
KG9sZHAsIG5iKTsKLSAgICAgICAgc2V0X2hlYWQoYXYtPnRvcCwgKG5ld3NpemUgLSBuYikgfCBQ
UkVWX0lOVVNFKTsKLSAgICAgICAgcmV0dXJuIGNodW5rMm1lbShvbGRwKTsKLSAgICAgIH0KLSAg
ICAgIAotICAgICAgLyogVHJ5IHRvIGV4cGFuZCBmb3J3YXJkIGludG8gbmV4dCBjaHVuazsgIHNw
bGl0IG9mZiByZW1haW5kZXIgYmVsb3cgKi8KLSAgICAgIGVsc2UgaWYgKG5leHQgIT0gYXYtPnRv
cCAmJiAKLSAgICAgICAgICAgICAgICFpbnVzZShuZXh0KSAmJgotICAgICAgICAgICAgICAgKENI
VU5LX1NJWkVfVCkobmV3c2l6ZSA9IG9sZHNpemUgKyBjaHVua3NpemUobmV4dCkpID49Ci0gICAg
ICAgICAgICAgICAoQ0hVTktfU0laRV9UKShuYikpIHsKLSAgICAgICAgbmV3cCA9IG9sZHA7Ci0g
ICAgICAgIHVubGluayhuZXh0LCBiY2ssIGZ3ZCk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGFsbG9j
YXRlLCBjb3B5LCBmcmVlICovCi0gICAgICBlbHNlIHsKLSAgICAgICAgbmV3bWVtID0gbUFMTE9j
KG5iIC0gTUFMTE9DX0FMSUdOX01BU0spOwotICAgICAgICBpZiAobmV3bWVtID09IDApCi0gICAg
ICAgICAgcmV0dXJuIDA7IC8qIHByb3BhZ2F0ZSBmYWlsdXJlICovCi0gICAgICAKLSAgICAgICAg
bmV3cCA9IG1lbTJjaHVuayhuZXdtZW0pOwotICAgICAgICBuZXdzaXplID0gY2h1bmtzaXplKG5l
d3ApOwotICAgICAgICAKLSAgICAgICAgLyoKLSAgICAgICAgICBBdm9pZCBjb3B5IGlmIG5ld3Ag
aXMgbmV4dCBjaHVuayBhZnRlciBvbGRwLgotICAgICAgICAqLwotICAgICAgICBpZiAobmV3cCA9
PSBuZXh0KSB7Ci0gICAgICAgICAgbmV3c2l6ZSArPSBvbGRzaXplOwotICAgICAgICAgIG5ld3Ag
PSBvbGRwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIC8qCi0gICAgICAg
ICAgICBVbnJvbGwgY29weSBvZiA8PSAzNiBieXRlcyAoNzIgaWYgOGJ5dGUgc2l6ZXMpCi0gICAg
ICAgICAgICBXZSBrbm93IHRoYXQgY29udGVudHMgaGF2ZSBhbiBvZGQgbnVtYmVyIG9mCi0gICAg
ICAgICAgICBJTlRFUk5BTF9TSVpFX1Qtc2l6ZWQgd29yZHM7IG1pbmltYWxseSAzLgotICAgICAg
ICAgICovCi0gICAgICAgICAgCi0gICAgICAgICAgY29weXNpemUgPSBvbGRzaXplIC0gU0laRV9T
WjsKLSAgICAgICAgICBzID0gKElOVEVSTkFMX1NJWkVfVCopKG9sZG1lbSk7Ci0gICAgICAgICAg
ZCA9IChJTlRFUk5BTF9TSVpFX1QqKShuZXdtZW0pOwotICAgICAgICAgIG5jb3BpZXMgPSBjb3B5
c2l6ZSAvIHNpemVvZihJTlRFUk5BTF9TSVpFX1QpOwotICAgICAgICAgIGFzc2VydChuY29waWVz
ID49IDMpOwotICAgICAgICAgIAotICAgICAgICAgIGlmIChuY29waWVzID4gOSkKLSAgICAgICAg
ICAgIE1BTExPQ19DT1BZKGQsIHMsIGNvcHlzaXplKTsKLSAgICAgICAgICAKLSAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICooZCswKSA9ICoocyswKTsKLSAgICAgICAgICAgICooZCsxKSA9
ICoocysxKTsKLSAgICAgICAgICAgICooZCsyKSA9ICoocysyKTsKLSAgICAgICAgICAgIGlmIChu
Y29waWVzID4gNCkgewotICAgICAgICAgICAgICAqKGQrMykgPSAqKHMrMyk7Ci0gICAgICAgICAg
ICAgICooZCs0KSA9ICoocys0KTsKLSAgICAgICAgICAgICAgaWYgKG5jb3BpZXMgPiA2KSB7Ci0g
ICAgICAgICAgICAgICAgKihkKzUpID0gKihzKzUpOwotICAgICAgICAgICAgICAgICooZCs2KSA9
ICoocys2KTsKLSAgICAgICAgICAgICAgICBpZiAobmNvcGllcyA+IDgpIHsKLSAgICAgICAgICAg
ICAgICAgICooZCs3KSA9ICoocys3KTsKLSAgICAgICAgICAgICAgICAgICooZCs4KSA9ICoocys4
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgZlJFZShvbGRtZW0pOwotICAgICAgICAg
IGNoZWNrX2ludXNlX2NodW5rKG5ld3ApOwotICAgICAgICAgIHJldHVybiBjaHVuazJtZW0obmV3
cCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBJZiBwb3NzaWJsZSwgZnJl
ZSBleHRyYSBzcGFjZSBpbiBvbGQgb3IgZXh0ZW5kZWQgY2h1bmsgKi8KLQotICAgIGFzc2VydCgo
Q0hVTktfU0laRV9UKShuZXdzaXplKSA+PSAoQ0hVTktfU0laRV9UKShuYikpOwotCi0gICAgcmVt
YWluZGVyX3NpemUgPSBuZXdzaXplIC0gbmI7Ci0KLSAgICBpZiAocmVtYWluZGVyX3NpemUgPCBN
SU5TSVpFKSB7IC8qIG5vdCBlbm91Z2ggZXh0cmEgdG8gc3BsaXQgb2ZmICovCi0gICAgICBzZXRf
aGVhZF9zaXplKG5ld3AsIG5ld3NpemUpOwotICAgICAgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQo
bmV3cCwgbmV3c2l6ZSk7Ci0gICAgfQotICAgIGVsc2UgeyAvKiBzcGxpdCByZW1haW5kZXIgKi8K
LSAgICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNldChuZXdwLCBuYik7Ci0gICAgICBzZXRf
aGVhZF9zaXplKG5ld3AsIG5iKTsKLSAgICAgIHNldF9oZWFkKHJlbWFpbmRlciwgcmVtYWluZGVy
X3NpemUgfCBQUkVWX0lOVVNFKTsKLSAgICAgIC8qIE1hcmsgcmVtYWluZGVyIGFzIGludXNlIHNv
IGZyZWUoKSB3b24ndCBjb21wbGFpbiAqLwotICAgICAgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQo
cmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSk7Ci0gICAgICBmUkVlKGNodW5rMm1lbShyZW1haW5k
ZXIpKTsgCi0gICAgfQotCi0gICAgY2hlY2tfaW51c2VfY2h1bmsobmV3cCk7Ci0gICAgcmV0dXJu
IGNodW5rMm1lbShuZXdwKTsKLSAgfQotCi0gIC8qCi0gICAgSGFuZGxlIG1tYXAgY2FzZXMKLSAg
Ki8KLQotICBlbHNlIHsKLSNpZiBIQVZFX01NQVAKLQotI2lmIEhBVkVfTVJFTUFQCi0gICAgSU5U
RVJOQUxfU0laRV9UIG9mZnNldCA9IG9sZHAtPnByZXZfc2l6ZTsKLSAgICBzaXplX3QgcGFnZW1h
c2sgPSBhdi0+cGFnZXNpemUgLSAxOwotICAgIGNoYXIgKmNwOwotICAgIENIVU5LX1NJWkVfVCAg
c3VtOwotICAgIAotICAgIC8qIE5vdGUgdGhlIGV4dHJhIFNJWkVfU1ogb3ZlcmhlYWQgKi8KLSAg
ICBuZXdzaXplID0gKG5iICsgb2Zmc2V0ICsgU0laRV9TWiArIHBhZ2VtYXNrKSAmIH5wYWdlbWFz
azsKLQotICAgIC8qIGRvbid0IG5lZWQgdG8gcmVtYXAgaWYgc3RpbGwgd2l0aGluIHNhbWUgcGFn
ZSAqLwotICAgIGlmIChvbGRzaXplID09IG5ld3NpemUgLSBvZmZzZXQpIAotICAgICAgcmV0dXJu
IG9sZG1lbTsKLQotICAgIGNwID0gKGNoYXIqKW1yZW1hcCgoY2hhciopb2xkcCAtIG9mZnNldCwg
b2xkc2l6ZSArIG9mZnNldCwgbmV3c2l6ZSwgMSk7Ci0gICAgCi0gICAgaWYgKGNwICE9IChjaGFy
KilNT1JFQ09SRV9GQUlMVVJFKSB7Ci0KLSAgICAgIG5ld3AgPSAobWNodW5rcHRyKShjcCArIG9m
ZnNldCk7Ci0gICAgICBzZXRfaGVhZChuZXdwLCAobmV3c2l6ZSAtIG9mZnNldCl8SVNfTU1BUFBF
RCk7Ci0gICAgICAKLSAgICAgIGFzc2VydChhbGlnbmVkX09LKGNodW5rMm1lbShuZXdwKSkpOwot
ICAgICAgYXNzZXJ0KChuZXdwLT5wcmV2X3NpemUgPT0gb2Zmc2V0KSk7Ci0gICAgICAKLSAgICAg
IC8qIHVwZGF0ZSBzdGF0aXN0aWNzICovCi0gICAgICBzdW0gPSBhdi0+bW1hcHBlZF9tZW0gKz0g
bmV3c2l6ZSAtIG9sZHNpemU7Ci0gICAgICBpZiAoc3VtID4gKENIVU5LX1NJWkVfVCkoYXYtPm1h
eF9tbWFwcGVkX21lbSkpIAotICAgICAgICBhdi0+bWF4X21tYXBwZWRfbWVtID0gc3VtOwotICAg
ICAgc3VtICs9IGF2LT5zYnJrZWRfbWVtOwotICAgICAgaWYgKHN1bSA+IChDSFVOS19TSVpFX1Qp
KGF2LT5tYXhfdG90YWxfbWVtKSkgCi0gICAgICAgIGF2LT5tYXhfdG90YWxfbWVtID0gc3VtOwot
ICAgICAgCi0gICAgICByZXR1cm4gY2h1bmsybWVtKG5ld3ApOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgLyogTm90ZSB0aGUgZXh0cmEgU0laRV9TWiBvdmVyaGVhZC4gKi8KLSAgICBpZiAoKENIVU5L
X1NJWkVfVCkob2xkc2l6ZSkgPj0gKENIVU5LX1NJWkVfVCkobmIgKyBTSVpFX1NaKSkgCi0gICAg
ICBuZXdtZW0gPSBvbGRtZW07IC8qIGRvIG5vdGhpbmcgKi8KLSAgICBlbHNlIHsKLSAgICAgIC8q
IE11c3QgYWxsb2MsIGNvcHksIGZyZWUuICovCi0gICAgICBuZXdtZW0gPSBtQUxMT2MobmIgLSBN
QUxMT0NfQUxJR05fTUFTSyk7Ci0gICAgICBpZiAobmV3bWVtICE9IDApIHsKLSAgICAgICAgTUFM
TE9DX0NPUFkobmV3bWVtLCBvbGRtZW0sIG9sZHNpemUgLSAyKlNJWkVfU1opOwotICAgICAgICBm
UkVlKG9sZG1lbSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuZXdtZW07Ci0KLSNlbHNl
IAotICAgIC8qIElmICFIQVZFX01NQVAsIGJ1dCBjaHVua19pc19tbWFwcGVkLCB1c2VyIG11c3Qg
aGF2ZSBvdmVyd3JpdHRlbiBtZW0gKi8KLSAgICBjaGVja19tYWxsb2Nfc3RhdGUoKTsKLSAgICBN
QUxMT0NfRkFJTFVSRV9BQ1RJT047Ci0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLSAgfQotfQotCi0v
KgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWVtYWxpZ24gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWYgX19TVERfQwotVm9pZF90KiBtRU1BTElHbihz
aXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpCi0jZWxzZQotVm9pZF90KiBtRU1BTElHbihh
bGlnbm1lbnQsIGJ5dGVzKSBzaXplX3QgYWxpZ25tZW50OyBzaXplX3QgYnl0ZXM7Ci0jZW5kaWYK
LXsKLSAgSU5URVJOQUxfU0laRV9UIG5iOyAgICAgICAgICAgICAvKiBwYWRkZWQgIHJlcXVlc3Qg
c2l6ZSAqLwotICBjaGFyKiAgICAgICAgICAgbTsgICAgICAgICAgICAgIC8qIG1lbW9yeSByZXR1
cm5lZCBieSBtYWxsb2MgY2FsbCAqLwotICBtY2h1bmtwdHIgICAgICAgcDsgICAgICAgICAgICAg
IC8qIGNvcnJlc3BvbmRpbmcgY2h1bmsgKi8KLSAgY2hhciogICAgICAgICAgIGJyazsgICAgICAg
ICAgICAvKiBhbGlnbm1lbnQgcG9pbnQgd2l0aGluIHAgKi8KLSAgbWNodW5rcHRyICAgICAgIG5l
d3A7ICAgICAgICAgICAvKiBjaHVuayB0byByZXR1cm4gKi8KLSAgSU5URVJOQUxfU0laRV9UIG5l
d3NpemU7ICAgICAgICAvKiBpdHMgc2l6ZSAqLwotICBJTlRFUk5BTF9TSVpFX1QgbGVhZHNpemU7
ICAgICAgIC8qIGxlYWRpbmcgc3BhY2UgYmVmb3JlIGFsaWdubWVudCBwb2ludCAqLwotICBtY2h1
bmtwdHIgICAgICAgcmVtYWluZGVyOyAgICAgIC8qIHNwYXJlIHJvb20gYXQgZW5kIHRvIHNwbGl0
IG9mZiAqLwotICBDSFVOS19TSVpFX1QgICAgcmVtYWluZGVyX3NpemU7IC8qIGl0cyBzaXplICov
Ci0gIElOVEVSTkFMX1NJWkVfVCBzaXplOwotCi0gIC8qIElmIG5lZWQgbGVzcyBhbGlnbm1lbnQg
dGhhbiB3ZSBnaXZlIGFueXdheSwganVzdCByZWxheSB0byBtYWxsb2MgKi8KLQotICBpZiAoYWxp
Z25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpIHJldHVybiBtQUxMT2MoYnl0ZXMpOwotCi0gIC8q
IE90aGVyd2lzZSwgZW5zdXJlIHRoYXQgaXQgaXMgYXQgbGVhc3QgYSBtaW5pbXVtIGNodW5rIHNp
emUgKi8KLQotICBpZiAoYWxpZ25tZW50IDwgIE1JTlNJWkUpIGFsaWdubWVudCA9IE1JTlNJWkU7
Ci0KLSAgLyogTWFrZSBzdXJlIGFsaWdubWVudCBpcyBwb3dlciBvZiAyIChpbiBjYXNlIE1JTlNJ
WkUgaXMgbm90KS4gICovCi0gIGlmICgoYWxpZ25tZW50ICYgKGFsaWdubWVudCAtIDEpKSAhPSAw
KSB7Ci0gICAgc2l6ZV90IGEgPSBNQUxMT0NfQUxJR05NRU5UICogMjsKLSAgICB3aGlsZSAoKENI
VU5LX1NJWkVfVClhIDwgKENIVU5LX1NJWkVfVClhbGlnbm1lbnQpIGEgPDw9IDE7Ci0gICAgYWxp
Z25tZW50ID0gYTsKLSAgfQotCi0gIGNoZWNrZWRfcmVxdWVzdDJzaXplKGJ5dGVzLCBuYik7Ci0K
LSAgLyoKLSAgICBTdHJhdGVneTogZmluZCBhIHNwb3Qgd2l0aGluIHRoYXQgY2h1bmsgdGhhdCBt
ZWV0cyB0aGUgYWxpZ25tZW50Ci0gICAgcmVxdWVzdCwgYW5kIHRoZW4gcG9zc2libHkgZnJlZSB0
aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UuCi0gICovCi0KLQotICAvKiBDYWxsIG1hbGxv
YyB3aXRoIHdvcnN0IGNhc2UgcGFkZGluZyB0byBoaXQgYWxpZ25tZW50LiAqLwotCi0gIG0gID0g
KGNoYXIqKShtQUxMT2MobmIgKyBhbGlnbm1lbnQgKyBNSU5TSVpFKSk7Ci0KLSAgaWYgKG0gPT0g
MCkgcmV0dXJuIDA7IC8qIHByb3BhZ2F0ZSBmYWlsdXJlICovCi0KLSAgcCA9IG1lbTJjaHVuayht
KTsKLQotICBpZiAoKCgoUFRSX1VJTlQpKG0pKSAlIGFsaWdubWVudCkgIT0gMCkgeyAvKiBtaXNh
bGlnbmVkICovCi0KLSAgICAvKgotICAgICAgRmluZCBhbiBhbGlnbmVkIHNwb3QgaW5zaWRlIGNo
dW5rLiAgU2luY2Ugd2UgbmVlZCB0byBnaXZlIGJhY2sKLSAgICAgIGxlYWRpbmcgc3BhY2UgaW4g
YSBjaHVuayBvZiBhdCBsZWFzdCBNSU5TSVpFLCBpZiB0aGUgZmlyc3QKLSAgICAgIGNhbGN1bGF0
aW9uIHBsYWNlcyB1cyBhdCBhIHNwb3Qgd2l0aCBsZXNzIHRoYW4gTUlOU0laRSBsZWFkZXIsCi0g
ICAgICB3ZSBjYW4gbW92ZSB0byB0aGUgbmV4dCBhbGlnbmVkIHNwb3QgLS0gd2UndmUgYWxsb2Nh
dGVkIGVub3VnaAotICAgICAgdG90YWwgcm9vbSBzbyB0aGF0IHRoaXMgaXMgYWx3YXlzIHBvc3Np
YmxlLgotICAgICovCi0KLSAgICBicmsgPSAoY2hhciopbWVtMmNodW5rKChQVFJfVUlOVCkoKChQ
VFJfVUlOVCkobSArIGFsaWdubWVudCAtIDEpKSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAtKChzaWduZWQgbG9uZykgYWxpZ25tZW50KSkpOwotICAgIGlmICgoQ0hVTktfU0laRV9UKShi
cmsgLSAoY2hhciopKHApKSA8IE1JTlNJWkUpCi0gICAgICBicmsgKz0gYWxpZ25tZW50OwotCi0g
ICAgbmV3cCA9IChtY2h1bmtwdHIpYnJrOwotICAgIGxlYWRzaXplID0gYnJrIC0gKGNoYXIqKShw
KTsKLSAgICBuZXdzaXplID0gY2h1bmtzaXplKHApIC0gbGVhZHNpemU7Ci0KLSAgICAvKiBGb3Ig
bW1hcHBlZCBjaHVua3MsIGp1c3QgYWRqdXN0IG9mZnNldCAqLwotICAgIGlmIChjaHVua19pc19t
bWFwcGVkKHApKSB7Ci0gICAgICBuZXdwLT5wcmV2X3NpemUgPSBwLT5wcmV2X3NpemUgKyBsZWFk
c2l6ZTsKLSAgICAgIHNldF9oZWFkKG5ld3AsIG5ld3NpemV8SVNfTU1BUFBFRCk7Ci0gICAgICBy
ZXR1cm4gY2h1bmsybWVtKG5ld3ApOwotICAgIH0KLQotICAgIC8qIE90aGVyd2lzZSwgZ2l2ZSBi
YWNrIGxlYWRlciwgdXNlIHRoZSByZXN0ICovCi0gICAgc2V0X2hlYWQobmV3cCwgbmV3c2l6ZSB8
IFBSRVZfSU5VU0UpOwotICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0KG5ld3AsIG5ld3NpemUp
OwotICAgIHNldF9oZWFkX3NpemUocCwgbGVhZHNpemUpOwotICAgIGZSRWUoY2h1bmsybWVtKHAp
KTsKLSAgICBwID0gbmV3cDsKLQotICAgIGFzc2VydCAobmV3c2l6ZSA+PSBuYiAmJgotICAgICAg
ICAgICAgKCgoUFRSX1VJTlQpKGNodW5rMm1lbShwKSkpICUgYWxpZ25tZW50KSA9PSAwKTsKLSAg
fQotCi0gIC8qIEFsc28gZ2l2ZSBiYWNrIHNwYXJlIHJvb20gYXQgdGhlIGVuZCAqLwotICBpZiAo
IWNodW5rX2lzX21tYXBwZWQocCkpIHsKLSAgICBzaXplID0gY2h1bmtzaXplKHApOwotICAgIGlm
ICgoQ0hVTktfU0laRV9UKShzaXplKSA+IChDSFVOS19TSVpFX1QpKG5iICsgTUlOU0laRSkpIHsK
LSAgICAgIHJlbWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOwotICAgICAgcmVtYWluZGVyID0gY2h1
bmtfYXRfb2Zmc2V0KHAsIG5iKTsKLSAgICAgIHNldF9oZWFkKHJlbWFpbmRlciwgcmVtYWluZGVy
X3NpemUgfCBQUkVWX0lOVVNFKTsKLSAgICAgIHNldF9oZWFkX3NpemUocCwgbmIpOwotICAgICAg
ZlJFZShjaHVuazJtZW0ocmVtYWluZGVyKSk7Ci0gICAgfQotICB9Ci0KLSAgY2hlY2tfaW51c2Vf
Y2h1bmsocCk7Ci0gIHJldHVybiBjaHVuazJtZW0ocCk7Ci19Ci0KLS8qCi0gIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBjYWxsb2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0qLwotCi0jaWYgX19TVERfQwotVm9pZF90KiBjQUxMT2Moc2l6ZV90IG5fZWxlbWVudHMsIHNp
emVfdCBlbGVtX3NpemUpCi0jZWxzZQotVm9pZF90KiBjQUxMT2Mobl9lbGVtZW50cywgZWxlbV9z
aXplKSBzaXplX3Qgbl9lbGVtZW50czsgc2l6ZV90IGVsZW1fc2l6ZTsKLSNlbmRpZgotewotICBt
Y2h1bmtwdHIgcDsKLSAgQ0hVTktfU0laRV9UICBjbGVhcnNpemU7Ci0gIENIVU5LX1NJWkVfVCAg
bmNsZWFyczsKLSAgSU5URVJOQUxfU0laRV9UKiBkOwotCi0gIFZvaWRfdCogbWVtID0gbUFMTE9j
KG5fZWxlbWVudHMgKiBlbGVtX3NpemUpOwotCi0gIGlmIChtZW0gIT0gMCkgewotICAgIHAgPSBt
ZW0yY2h1bmsobWVtKTsKLQotICAgIGlmICghY2h1bmtfaXNfbW1hcHBlZChwKSkKLSAgICB7ICAK
LSAgICAgIC8qCi0gICAgICAgIFVucm9sbCBjbGVhciBvZiA8PSAzNiBieXRlcyAoNzIgaWYgOGJ5
dGUgc2l6ZXMpCi0gICAgICAgIFdlIGtub3cgdGhhdCBjb250ZW50cyBoYXZlIGFuIG9kZCBudW1i
ZXIgb2YKLSAgICAgICAgSU5URVJOQUxfU0laRV9ULXNpemVkIHdvcmRzOyBtaW5pbWFsbHkgMy4K
LSAgICAgICovCi0KLSAgICAgIGQgPSAoSU5URVJOQUxfU0laRV9UKiltZW07Ci0gICAgICBjbGVh
cnNpemUgPSBjaHVua3NpemUocCkgLSBTSVpFX1NaOwotICAgICAgbmNsZWFycyA9IGNsZWFyc2l6
ZSAvIHNpemVvZihJTlRFUk5BTF9TSVpFX1QpOwotICAgICAgYXNzZXJ0KG5jbGVhcnMgPj0gMyk7
Ci0KLSAgICAgIGlmIChuY2xlYXJzID4gOSkKLSAgICAgICAgTUFMTE9DX1pFUk8oZCwgY2xlYXJz
aXplKTsKLQotICAgICAgZWxzZSB7Ci0gICAgICAgICooZCswKSA9IDA7Ci0gICAgICAgICooZCsx
KSA9IDA7Ci0gICAgICAgICooZCsyKSA9IDA7Ci0gICAgICAgIGlmIChuY2xlYXJzID4gNCkgewot
ICAgICAgICAgICooZCszKSA9IDA7Ci0gICAgICAgICAgKihkKzQpID0gMDsKLSAgICAgICAgICBp
ZiAobmNsZWFycyA+IDYpIHsKLSAgICAgICAgICAgICooZCs1KSA9IDA7Ci0gICAgICAgICAgICAq
KGQrNikgPSAwOwotICAgICAgICAgICAgaWYgKG5jbGVhcnMgPiA4KSB7Ci0gICAgICAgICAgICAg
ICooZCs3KSA9IDA7Ci0gICAgICAgICAgICAgICooZCs4KSA9IDA7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotI2lmICEgTU1BUF9DTEVBUlMK
LSAgICBlbHNlCi0gICAgewotICAgICAgZCA9IChJTlRFUk5BTF9TSVpFX1QqKW1lbTsKLSAgICAg
IC8qCi0gICAgICAgIE5vdGUgdGhlIGFkZGl0aW9uYWwgU0laRV9TWgotICAgICAgKi8KLSAgICAg
IGNsZWFyc2l6ZSA9IGNodW5rc2l6ZShwKSAtIDIqU0laRV9TWjsKLSAgICAgIE1BTExPQ19aRVJP
KGQsIGNsZWFyc2l6ZSk7Ci0gICAgfQotI2VuZGlmCi0gIH0KLSAgcmV0dXJuIG1lbTsKLX0KLQot
LyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNmcmVlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmIF9fU1REX0MKLXZvaWQgY0ZSRWUoVm9pZF90ICpt
ZW0pCi0jZWxzZQotdm9pZCBjRlJFZShtZW0pIFZvaWRfdCAqbWVtOwotI2VuZGlmCi17Ci0gIGZS
RWUobWVtKTsKLX0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbmRlcGVuZGVu
dF9jYWxsb2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmIF9fU1REX0MKLVZv
aWRfdCoqIGlDQUxMT2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUsIFZvaWRf
dCogY2h1bmtzW10pCi0jZWxzZQotVm9pZF90KiogaUNBTExPYyhuX2VsZW1lbnRzLCBlbGVtX3Np
emUsIGNodW5rcykgc2l6ZV90IG5fZWxlbWVudHM7IHNpemVfdCBlbGVtX3NpemU7IFZvaWRfdCog
Y2h1bmtzW107Ci0jZW5kaWYKLXsKLSAgc2l6ZV90IHN6ID0gZWxlbV9zaXplOyAvKiBzZXJ2ZXMg
YXMgMS1lbGVtZW50IGFycmF5ICovCi0gIC8qIG9wdHMgYXJnIG9mIDMgbWVhbnMgYWxsIGVsZW1l
bnRzIGFyZSBzYW1lIHNpemUsIGFuZCBzaG91bGQgYmUgY2xlYXJlZCAqLwotICByZXR1cm4gaUFM
TE9jKG5fZWxlbWVudHMsICZzeiwgMywgY2h1bmtzKTsKLX0KLQotLyoKLSAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBpbmRlcGVuZGVudF9jb21hbGxvYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0qLwotCi0jaWYgX19TVERfQwotVm9pZF90KiogaUNPTUFMTE9jKHNpemVfdCBuX2VsZW1l
bnRzLCBzaXplX3Qgc2l6ZXNbXSwgVm9pZF90KiBjaHVua3NbXSkKLSNlbHNlCi1Wb2lkX3QqKiBp
Q09NQUxMT2Mobl9lbGVtZW50cywgc2l6ZXMsIGNodW5rcykgc2l6ZV90IG5fZWxlbWVudHM7IHNp
emVfdCBzaXplc1tdOyBWb2lkX3QqIGNodW5rc1tdOwotI2VuZGlmCi17Ci0gIHJldHVybiBpQUxM
T2Mobl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7Ci19Ci0KLQotLyoKLSAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlhbGxvYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgaWFsbG9jIHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0IGZvciBpbmRlcGVuZGVudF9YIHJv
dXRpbmVzLCBoYW5kbGluZyBhbGwgb2YKLSAgdGhlIGNvbWJpbmF0aW9ucyB0aGF0IGNhbiByZXN1
bHQuCi0KLSAgVGhlIG9wdHMgYXJnIGhhczoKLSAgICBiaXQgMCBzZXQgaWYgYWxsIGVsZW1lbnRz
IGFyZSBzYW1lIHNpemUgKHVzaW5nIHNpemVzWzBdKQotICAgIGJpdCAxIHNldCBpZiBlbGVtZW50
cyBzaG91bGQgYmUgemVyb2VkCi0qLwotCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMgVm9pZF90Kiog
aUFMTE9jKHNpemVfdCBuX2VsZW1lbnRzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
KiBzaXplcywgIAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0cywKLSAgICAgICAgICAg
ICAgICAgICAgICAgVm9pZF90KiBjaHVua3NbXSkKLSNlbHNlCi1zdGF0aWMgVm9pZF90KiogaUFM
TE9jKG5fZWxlbWVudHMsIHNpemVzLCBvcHRzLCBjaHVua3MpIHNpemVfdCBuX2VsZW1lbnRzOyBz
aXplX3QqIHNpemVzOyBpbnQgb3B0czsgVm9pZF90KiBjaHVua3NbXTsKLSNlbmRpZgotewotICBt
c3RhdGUgYXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0gIElOVEVSTkFMX1NJWkVfVCBlbGVtZW50
X3NpemU7ICAgLyogY2h1bmtzaXplIG9mIGVhY2ggZWxlbWVudCwgaWYgYWxsIHNhbWUgKi8KLSAg
SU5URVJOQUxfU0laRV9UIGNvbnRlbnRzX3NpemU7ICAvKiB0b3RhbCBzaXplIG9mIGVsZW1lbnRz
ICovCi0gIElOVEVSTkFMX1NJWkVfVCBhcnJheV9zaXplOyAgICAgLyogcmVxdWVzdCBzaXplIG9m
IHBvaW50ZXIgYXJyYXkgKi8KLSAgVm9pZF90KiAgICAgICAgIG1lbTsgICAgICAgICAgICAvKiBt
YWxsb2NlZCBhZ2dyZWdhdGUgc3BhY2UgKi8KLSAgbWNodW5rcHRyICAgICAgIHA7ICAgICAgICAg
ICAgICAvKiBjb3JyZXNwb25kaW5nIGNodW5rICovCi0gIElOVEVSTkFMX1NJWkVfVCByZW1haW5k
ZXJfc2l6ZTsgLyogcmVtYWluaW5nIGJ5dGVzIHdoaWxlIHNwbGl0dGluZyAqLwotICBWb2lkX3Qq
KiAgICAgICAgbWFycmF5OyAgICAgICAgIC8qIGVpdGhlciAiY2h1bmtzIiBvciBtYWxsb2NlZCBw
dHIgYXJyYXkgKi8KLSAgbWNodW5rcHRyICAgICAgIGFycmF5X2NodW5rOyAgICAvKiBjaHVuayBm
b3IgbWFsbG9jZWQgcHRyIGFycmF5ICovCi0gIGludCAgICAgICAgICAgICBtbXg7ICAgICAgICAg
ICAgLyogdG8gZGlzYWJsZSBtbWFwICovCi0gIElOVEVSTkFMX1NJWkVfVCBzaXplOyAgICAgICAg
ICAgCi0gIHNpemVfdCAgICAgICAgICBpOwotCi0gIC8qIEVuc3VyZSBpbml0aWFsaXphdGlvbiAq
LwotICBpZiAoYXYtPm1heF9mYXN0ID09IDApIG1hbGxvY19jb25zb2xpZGF0ZShhdik7Ci0KLSAg
LyogY29tcHV0ZSBhcnJheSBsZW5ndGgsIGlmIG5lZWRlZCAqLwotICBpZiAoY2h1bmtzICE9IDAp
IHsKLSAgICBpZiAobl9lbGVtZW50cyA9PSAwKQotICAgICAgcmV0dXJuIGNodW5rczsgLyogbm90
aGluZyB0byBkbyAqLwotICAgIG1hcnJheSA9IGNodW5rczsKLSAgICBhcnJheV9zaXplID0gMDsK
LSAgfQotICBlbHNlIHsKLSAgICAvKiBpZiBlbXB0eSByZXEsIG11c3Qgc3RpbGwgcmV0dXJuIGNo
dW5rIHJlcHJlc2VudGluZyBlbXB0eSBhcnJheSAqLwotICAgIGlmIChuX2VsZW1lbnRzID09IDAp
IAotICAgICAgcmV0dXJuIChWb2lkX3QqKikgbUFMTE9jKDApOwotICAgIG1hcnJheSA9IDA7Ci0g
ICAgYXJyYXlfc2l6ZSA9IHJlcXVlc3Qyc2l6ZShuX2VsZW1lbnRzICogKHNpemVvZihWb2lkX3Qq
KSkpOwotICB9Ci0KLSAgLyogY29tcHV0ZSB0b3RhbCBlbGVtZW50IHNpemUgKi8KLSAgaWYgKG9w
dHMgJiAweDEpIHsgLyogYWxsLXNhbWUtc2l6ZSAqLwotICAgIGVsZW1lbnRfc2l6ZSA9IHJlcXVl
c3Qyc2l6ZSgqc2l6ZXMpOwotICAgIGNvbnRlbnRzX3NpemUgPSBuX2VsZW1lbnRzICogZWxlbWVu
dF9zaXplOwotICB9Ci0gIGVsc2UgeyAvKiBhZGQgdXAgYWxsIHRoZSBzaXplcyAqLwotICAgIGVs
ZW1lbnRfc2l6ZSA9IDA7Ci0gICAgY29udGVudHNfc2l6ZSA9IDA7Ci0gICAgZm9yIChpID0gMDsg
aSAhPSBuX2VsZW1lbnRzOyArK2kpIAotICAgICAgY29udGVudHNfc2l6ZSArPSByZXF1ZXN0MnNp
emUoc2l6ZXNbaV0pOyAgICAgCi0gIH0KLQotICAvKiBzdWJ0cmFjdCBvdXQgYWxpZ25tZW50IGJ5
dGVzIGZyb20gdG90YWwgdG8gbWluaW1pemUgb3ZlcmFsbG9jYXRpb24gKi8KLSAgc2l6ZSA9IGNv
bnRlbnRzX3NpemUgKyBhcnJheV9zaXplIC0gTUFMTE9DX0FMSUdOX01BU0s7Ci0gIAotICAvKiAK
LSAgICAgQWxsb2NhdGUgdGhlIGFnZ3JlZ2F0ZSBjaHVuay4KLSAgICAgQnV0IGZpcnN0IGRpc2Fi
bGUgbW1hcCBzbyBtYWxsb2Mgd29uJ3QgdXNlIGl0LCBzaW5jZQotICAgICB3ZSB3b3VsZCBub3Qg
YmUgYWJsZSB0byBsYXRlciBmcmVlL3JlYWxsb2Mgc3BhY2UgaW50ZXJuYWwKLSAgICAgdG8gYSBz
ZWdyZWdhdGVkIG1tYXAgcmVnaW9uLgotICovCi0gIG1teCA9IGF2LT5uX21tYXBzX21heDsgICAv
KiBkaXNhYmxlIG1tYXAgKi8KLSAgYXYtPm5fbW1hcHNfbWF4ID0gMDsKLSAgbWVtID0gbUFMTE9j
KHNpemUpOwotICBhdi0+bl9tbWFwc19tYXggPSBtbXg7ICAgLyogcmVzZXQgbW1hcCAqLwotICBp
ZiAobWVtID09IDApIAotICAgIHJldHVybiAwOwotCi0gIHAgPSBtZW0yY2h1bmsobWVtKTsKLSAg
YXNzZXJ0KCFjaHVua19pc19tbWFwcGVkKHApKTsgCi0gIHJlbWFpbmRlcl9zaXplID0gY2h1bmtz
aXplKHApOwotCi0gIGlmIChvcHRzICYgMHgyKSB7ICAgICAgIC8qIG9wdGlvbmFsbHkgY2xlYXIg
dGhlIGVsZW1lbnRzICovCi0gICAgTUFMTE9DX1pFUk8obWVtLCByZW1haW5kZXJfc2l6ZSAtIFNJ
WkVfU1ogLSBhcnJheV9zaXplKTsKLSAgfQotCi0gIC8qIElmIG5vdCBwcm92aWRlZCwgYWxsb2Nh
dGUgdGhlIHBvaW50ZXIgYXJyYXkgYXMgZmluYWwgcGFydCBvZiBjaHVuayAqLwotICBpZiAobWFy
cmF5ID09IDApIHsKLSAgICBhcnJheV9jaHVuayA9IGNodW5rX2F0X29mZnNldChwLCBjb250ZW50
c19zaXplKTsKLSAgICBtYXJyYXkgPSAoVm9pZF90KiopIChjaHVuazJtZW0oYXJyYXlfY2h1bmsp
KTsKLSAgICBzZXRfaGVhZChhcnJheV9jaHVuaywgKHJlbWFpbmRlcl9zaXplIC0gY29udGVudHNf
c2l6ZSkgfCBQUkVWX0lOVVNFKTsKLSAgICByZW1haW5kZXJfc2l6ZSA9IGNvbnRlbnRzX3NpemU7
Ci0gIH0KLQotICAvKiBzcGxpdCBvdXQgZWxlbWVudHMgKi8KLSAgZm9yIChpID0gMDsgOyArK2kp
IHsKLSAgICBtYXJyYXlbaV0gPSBjaHVuazJtZW0ocCk7Ci0gICAgaWYgKGkgIT0gbl9lbGVtZW50
cy0xKSB7Ci0gICAgICBpZiAoZWxlbWVudF9zaXplICE9IDApIAotICAgICAgICBzaXplID0gZWxl
bWVudF9zaXplOwotICAgICAgZWxzZQotICAgICAgICBzaXplID0gcmVxdWVzdDJzaXplKHNpemVz
W2ldKTsgICAgICAgICAgCi0gICAgICByZW1haW5kZXJfc2l6ZSAtPSBzaXplOwotICAgICAgc2V0
X2hlYWQocCwgc2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgcCA9IGNodW5rX2F0X29mZnNldChw
LCBzaXplKTsKLSAgICB9Ci0gICAgZWxzZSB7IC8qIHRoZSBmaW5hbCBlbGVtZW50IGFic29yYnMg
YW55IG92ZXJhbGxvY2F0aW9uIHNsb3AgKi8KLSAgICAgIHNldF9oZWFkKHAsIHJlbWFpbmRlcl9z
aXplIHwgUFJFVl9JTlVTRSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotI2lmIERFQlVH
Ci0gIGlmIChtYXJyYXkgIT0gY2h1bmtzKSB7Ci0gICAgLyogZmluYWwgZWxlbWVudCBtdXN0IGhh
dmUgZXhhY3RseSBleGhhdXN0ZWQgY2h1bmsgKi8KLSAgICBpZiAoZWxlbWVudF9zaXplICE9IDAp
IAotICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IGVsZW1lbnRfc2l6ZSk7Ci0gICAgZWxz
ZQotICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSkp
OwotICAgIGNoZWNrX2ludXNlX2NodW5rKG1lbTJjaHVuayhtYXJyYXkpKTsKLSAgfQotCi0gIGZv
ciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQotICAgIGNoZWNrX2ludXNlX2NodW5rKG1l
bTJjaHVuayhtYXJyYXlbaV0pKTsKLSNlbmRpZgotCi0gIHJldHVybiBtYXJyYXk7Ci19Ci0KLQot
LyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHZhbGxvYyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpZiBfX1NURF9DCi1Wb2lkX3QqIHZBTExPYyhzaXpl
X3QgYnl0ZXMpCi0jZWxzZQotVm9pZF90KiB2QUxMT2MoYnl0ZXMpIHNpemVfdCBieXRlczsKLSNl
bmRpZgotewotICAvKiBFbnN1cmUgaW5pdGlhbGl6YXRpb24gKi8KLSAgbXN0YXRlIGF2ID0gZ2V0
X21hbGxvY19zdGF0ZSgpOwotICBpZiAoYXYtPm1heF9mYXN0ID09IDApIG1hbGxvY19jb25zb2xp
ZGF0ZShhdik7Ci0gIHJldHVybiBtRU1BTElHbihhdi0+cGFnZXNpemUsIGJ5dGVzKTsKLX0KLQot
LyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHB2YWxsb2MgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0KLSNpZiBfX1NURF9DCi1Wb2lkX3QqIHBWQUxMT2Mo
c2l6ZV90IGJ5dGVzKQotI2Vsc2UKLVZvaWRfdCogcFZBTExPYyhieXRlcykgc2l6ZV90IGJ5dGVz
OwotI2VuZGlmCi17Ci0gIG1zdGF0ZSBhdiA9IGdldF9tYWxsb2Nfc3RhdGUoKTsKLSAgc2l6ZV90
IHBhZ2VzejsKLQotICAvKiBFbnN1cmUgaW5pdGlhbGl6YXRpb24gKi8KLSAgaWYgKGF2LT5tYXhf
ZmFzdCA9PSAwKSBtYWxsb2NfY29uc29saWRhdGUoYXYpOwotICBwYWdlc3ogPSBhdi0+cGFnZXNp
emU7Ci0gIHJldHVybiBtRU1BTElHbihwYWdlc3osIChieXRlcyArIHBhZ2VzeiAtIDEpICYgfihw
YWdlc3ogLSAxKSk7Ci19Ci0gICAKLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIG1hbGxvY190cmltIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lm
IF9fU1REX0MKLWludCBtVFJJbShzaXplX3QgcGFkKQotI2Vsc2UKLWludCBtVFJJbShwYWQpIHNp
emVfdCBwYWQ7Ci0jZW5kaWYKLXsKLSAgbXN0YXRlIGF2ID0gZ2V0X21hbGxvY19zdGF0ZSgpOwot
ICAvKiBFbnN1cmUgaW5pdGlhbGl6YXRpb24vY29uc29saWRhdGlvbiAqLwotICBtYWxsb2NfY29u
c29saWRhdGUoYXYpOwotCi0jaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNICAgICAgICAKLSAg
cmV0dXJuIHNZU1RSSW0ocGFkLCBhdik7Ci0jZWxzZQotICByZXR1cm4gMDsKLSNlbmRpZgotfQot
Ci0KLS8qCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9jX3VzYWJsZV9zaXplIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpZiBfX1NURF9DCi1zaXplX3QgbVVTQUJM
ZShWb2lkX3QqIG1lbSkKLSNlbHNlCi1zaXplX3QgbVVTQUJMZShtZW0pIFZvaWRfdCogbWVtOwot
I2VuZGlmCi17Ci0gIG1jaHVua3B0ciBwOwotICBpZiAobWVtICE9IDApIHsKLSAgICBwID0gbWVt
MmNodW5rKG1lbSk7Ci0gICAgaWYgKGNodW5rX2lzX21tYXBwZWQocCkpCi0gICAgICByZXR1cm4g
Y2h1bmtzaXplKHApIC0gMipTSVpFX1NaOwotICAgIGVsc2UgaWYgKGludXNlKHApKQotICAgICAg
cmV0dXJuIGNodW5rc2l6ZShwKSAtIFNJWkVfU1o7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8q
Ci0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxsaW5mbyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLXN0cnVjdCBtYWxsaW5mbyBtQUxMSU5GbygpCi17Ci0g
IG1zdGF0ZSBhdiA9IGdldF9tYWxsb2Nfc3RhdGUoKTsKLSAgc3RydWN0IG1hbGxpbmZvIG1pOwot
ICB1bnNpZ25lZCBpbnQgaTsKLSAgbWJpbnB0ciBiOwotICBtY2h1bmtwdHIgcDsKLSAgSU5URVJO
QUxfU0laRV9UIGF2YWlsOwotICBJTlRFUk5BTF9TSVpFX1QgZmFzdGF2YWlsOwotICBpbnQgbmJs
b2NrczsKLSAgaW50IG5mYXN0YmxvY2tzOwotCi0gIC8qIEVuc3VyZSBpbml0aWFsaXphdGlvbiAq
LwotICBpZiAoYXYtPnRvcCA9PSAwKSAgbWFsbG9jX2NvbnNvbGlkYXRlKGF2KTsKLQotICBjaGVj
a19tYWxsb2Nfc3RhdGUoKTsKLQotICAvKiBBY2NvdW50IGZvciB0b3AgKi8KLSAgYXZhaWwgPSBj
aHVua3NpemUoYXYtPnRvcCk7Ci0gIG5ibG9ja3MgPSAxOyAgLyogdG9wIGFsd2F5cyBleGlzdHMg
Ki8KLQotICAvKiB0cmF2ZXJzZSBmYXN0YmlucyAqLwotICBuZmFzdGJsb2NrcyA9IDA7Ci0gIGZh
c3RhdmFpbCA9IDA7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE5GQVNUQklOUzsgKytpKSB7Ci0gICAg
Zm9yIChwID0gYXYtPmZhc3RiaW5zW2ldOyBwICE9IDA7IHAgPSBwLT5mZCkgewotICAgICAgKytu
ZmFzdGJsb2NrczsKLSAgICAgIGZhc3RhdmFpbCArPSBjaHVua3NpemUocCk7Ci0gICAgfQotICB9
Ci0KLSAgYXZhaWwgKz0gZmFzdGF2YWlsOwotCi0gIC8qIHRyYXZlcnNlIHJlZ3VsYXIgYmlucyAq
LwotICBmb3IgKGkgPSAxOyBpIDwgTkJJTlM7ICsraSkgewotICAgIGIgPSBiaW5fYXQoYXYsIGkp
OwotICAgIGZvciAocCA9IGxhc3QoYik7IHAgIT0gYjsgcCA9IHAtPmJrKSB7Ci0gICAgICArK25i
bG9ja3M7Ci0gICAgICBhdmFpbCArPSBjaHVua3NpemUocCk7Ci0gICAgfQotICB9Ci0KLSAgbWku
c21ibGtzID0gbmZhc3RibG9ja3M7Ci0gIG1pLm9yZGJsa3MgPSBuYmxvY2tzOwotICBtaS5mb3Jk
YmxrcyA9IGF2YWlsOwotICBtaS51b3JkYmxrcyA9IGF2LT5zYnJrZWRfbWVtIC0gYXZhaWw7Ci0g
IG1pLmFyZW5hID0gYXYtPnNicmtlZF9tZW07Ci0gIG1pLmhibGtzID0gYXYtPm5fbW1hcHM7Ci0g
IG1pLmhibGtoZCA9IGF2LT5tbWFwcGVkX21lbTsKLSAgbWkuZnNtYmxrcyA9IGZhc3RhdmFpbDsK
LSAgbWkua2VlcGNvc3QgPSBjaHVua3NpemUoYXYtPnRvcCk7Ci0gIG1pLnVzbWJsa3MgPSBhdi0+
bWF4X3RvdGFsX21lbTsKLSAgcmV0dXJuIG1pOwotfQotCi0vKgotICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gbWFsbG9jX3N0YXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotKi8KLQotdm9pZCBtU1RBVHMoKQotewotICBzdHJ1Y3QgbWFsbGluZm8gbWkgPSBtQUxMSU5G
bygpOwotCi0jaWZkZWYgV0lOMzIKLSAgewotICAgIENIVU5LX1NJWkVfVCAgZnJlZSwgcmVzZXJ2
ZWQsIGNvbW1pdHRlZDsKLSAgICB2bWluZm8gKCZmcmVlLCAmcmVzZXJ2ZWQsICZjb21taXR0ZWQp
OwotICAgIGZwcmludGYoc3RkZXJyLCAiZnJlZSBieXRlcyAgICAgICA9ICUxMGx1XG4iLCAKLSAg
ICAgICAgICAgIGZyZWUpOwotICAgIGZwcmludGYoc3RkZXJyLCAicmVzZXJ2ZWQgYnl0ZXMgICA9
ICUxMGx1XG4iLCAKLSAgICAgICAgICAgIHJlc2VydmVkKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwg
ImNvbW1pdHRlZCBieXRlcyAgPSAlMTBsdVxuIiwgCi0gICAgICAgICAgICBjb21taXR0ZWQpOwot
ICB9Ci0jZW5kaWYKLQotCi0gIGZwcmludGYoc3RkZXJyLCAibWF4IHN5c3RlbSBieXRlcyA9ICUx
MGx1XG4iLAotICAgICAgICAgIChDSFVOS19TSVpFX1QpKG1pLnVzbWJsa3MpKTsKLSAgZnByaW50
ZihzdGRlcnIsICJzeXN0ZW0gYnl0ZXMgICAgID0gJTEwbHVcbiIsCi0gICAgICAgICAgKENIVU5L
X1NJWkVfVCkobWkuYXJlbmEgKyBtaS5oYmxraGQpKTsKLSAgZnByaW50ZihzdGRlcnIsICJpbiB1
c2UgYnl0ZXMgICAgID0gJTEwbHVcbiIsCi0gICAgICAgICAgKENIVU5LX1NJWkVfVCkobWkudW9y
ZGJsa3MgKyBtaS5oYmxraGQpKTsKLQotI2lmZGVmIFdJTjMyIAotICB7Ci0gICAgQ0hVTktfU0la
RV9UICBrZXJuZWwsIHVzZXI7Ci0gICAgaWYgKGNwdWluZm8gKFRSVUUsICZrZXJuZWwsICZ1c2Vy
KSkgewotICAgICAgZnByaW50ZihzdGRlcnIsICJrZXJuZWwgbXMgICAgICAgID0gJTEwbHVcbiIs
IAotICAgICAgICAgICAgICBrZXJuZWwpOwotICAgICAgZnByaW50ZihzdGRlcnIsICJ1c2VyIG1z
ICAgICAgICAgID0gJTEwbHVcbiIsIAotICAgICAgICAgICAgICB1c2VyKTsKLSAgICB9Ci0gIH0K
LSNlbmRpZgotfQotCi0KLS8qCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxs
b3B0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmIF9fU1REX0MKLWlu
dCBtQUxMT1B0KGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkKLSNlbHNlCi1pbnQgbUFMTE9Q
dChwYXJhbV9udW1iZXIsIHZhbHVlKSBpbnQgcGFyYW1fbnVtYmVyOyBpbnQgdmFsdWU7Ci0jZW5k
aWYKLXsKLSAgbXN0YXRlIGF2ID0gZ2V0X21hbGxvY19zdGF0ZSgpOwotICAvKiBFbnN1cmUgaW5p
dGlhbGl6YXRpb24vY29uc29saWRhdGlvbiAqLwotICBtYWxsb2NfY29uc29saWRhdGUoYXYpOwot
Ci0gIHN3aXRjaChwYXJhbV9udW1iZXIpIHsKLSAgY2FzZSBNX01YRkFTVDoKLSAgICBpZiAodmFs
dWUgPj0gMCAmJiB2YWx1ZSA8PSBNQVhfRkFTVF9TSVpFKSB7Ci0gICAgICBzZXRfbWF4X2Zhc3Qo
YXYsIHZhbHVlKTsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1
cm4gMDsKLQotICBjYXNlIE1fVFJJTV9USFJFU0hPTEQ6Ci0gICAgYXYtPnRyaW1fdGhyZXNob2xk
ID0gdmFsdWU7Ci0gICAgcmV0dXJuIDE7Ci0KLSAgY2FzZSBNX1RPUF9QQUQ6Ci0gICAgYXYtPnRv
cF9wYWQgPSB2YWx1ZTsKLSAgICByZXR1cm4gMTsKLQotICBjYXNlIE1fTU1BUF9USFJFU0hPTEQ6
Ci0gICAgYXYtPm1tYXBfdGhyZXNob2xkID0gdmFsdWU7Ci0gICAgcmV0dXJuIDE7Ci0KLSAgY2Fz
ZSBNX01NQVBfTUFYOgotI2lmICFIQVZFX01NQVAKLSAgICBpZiAodmFsdWUgIT0gMCkKLSAgICAg
IHJldHVybiAwOwotI2VuZGlmCi0gICAgYXYtPm5fbW1hcHNfbWF4ID0gdmFsdWU7Ci0gICAgcmV0
dXJuIDE7Ci0KLSAgZGVmYXVsdDoKLSAgICByZXR1cm4gMDsKLSAgfQotfQotCi0KLS8qIAotICAt
LS0tLS0tLS0tLS0tLS0tLS0tLSBBbHRlcm5hdGl2ZSBNT1JFQ09SRSBmdW5jdGlvbnMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSovCi0KLQotLyoKLSAgR2VuZXJhbCBSZXF1aXJlbWVudHMgZm9yIE1P
UkVDT1JFLgotCi0gIFRoZSBNT1JFQ09SRSBmdW5jdGlvbiBtdXN0IGhhdmUgdGhlIGZvbGxvd2lu
ZyBwcm9wZXJ0aWVzOgotCi0gIElmIE1PUkVDT1JFX0NPTlRJR1VPVVMgaXMgZmFsc2U6Ci0KLSAg
ICAqIE1PUkVDT1JFIG11c3QgYWxsb2NhdGUgaW4gbXVsdGlwbGVzIG9mIHBhZ2VzaXplLiBJdCB3
aWxsCi0gICAgICBvbmx5IGJlIGNhbGxlZCB3aXRoIGFyZ3VtZW50cyB0aGF0IGFyZSBtdWx0aXBs
ZXMgb2YgcGFnZXNpemUuCi0KLSAgICAqIE1PUkVDT1JFKDApIG11c3QgcmV0dXJuIGFuIGFkZHJl
c3MgdGhhdCBpcyBhdCBsZWFzdCAKLSAgICAgIE1BTExPQ19BTElHTk1FTlQgYWxpZ25lZC4gKFBh
Z2UtYWxpZ25pbmcgYWx3YXlzIHN1ZmZpY2VzLikKLQotICBlbHNlIChpLmUuIElmIE1PUkVDT1JF
X0NPTlRJR1VPVVMgaXMgdHJ1ZSk6Ci0KLSAgICAqIENvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVD
T1JFIHdpdGggcG9zaXRpdmUgYXJndW1lbnRzCi0gICAgICByZXR1cm4gaW5jcmVhc2luZyBhZGRy
ZXNzZXMsIGluZGljYXRpbmcgdGhhdCBzcGFjZSBoYXMgYmVlbgotICAgICAgY29udGlndW91c2x5
IGV4dGVuZGVkLiAKLQotICAgICogTU9SRUNPUkUgbmVlZCBub3QgYWxsb2NhdGUgaW4gbXVsdGlw
bGVzIG9mIHBhZ2VzaXplLgotICAgICAgQ2FsbHMgdG8gTU9SRUNPUkUgbmVlZCBub3QgaGF2ZSBh
cmdzIG9mIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4KLQotICAgICogTU9SRUNPUkUgbmVlZCBub3Qg
cGFnZS1hbGlnbi4KLQotICBJbiBlaXRoZXIgY2FzZToKLQotICAgICogTU9SRUNPUkUgbWF5IGFs
bG9jYXRlIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkLiAoT3IgZXZlbiBsZXNzLAotICAgICAg
YnV0IHRoaXMgd2lsbCBnZW5lcmFsbHkgcmVzdWx0IGluIGEgbWFsbG9jIGZhaWx1cmUuKQotCi0g
ICAgKiBNT1JFQ09SRSBtdXN0IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2hlbiBnaXZlbiBhcmd1bWVu
dCB6ZXJvLCBidXQKLSAgICAgIGluc3RlYWQgcmV0dXJuIG9uZSBwYXN0IHRoZSBlbmQgYWRkcmVz
cyBvZiBtZW1vcnkgZnJvbSBwcmV2aW91cwotICAgICAgbm9uemVybyBjYWxsLiBUaGlzIG1hbGxv
YyBkb2VzIE5PVCBjYWxsIE1PUkVDT1JFKDApCi0gICAgICB1bnRpbCBhdCBsZWFzdCBvbmUgY2Fs
bCB3aXRoIHBvc2l0aXZlIGFyZ3VtZW50cyBpcyBtYWRlLCBzbwotICAgICAgdGhlIGluaXRpYWwg
dmFsdWUgcmV0dXJuZWQgaXMgbm90IGltcG9ydGFudC4KLQotICAgICogRXZlbiB0aG91Z2ggY29u
c2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgbmVlZCBub3QgcmV0dXJuIGNvbnRpZ3VvdXMKLSAg
ICAgIGFkZHJlc3NlcywgaXQgbXVzdCBiZSBPSyBmb3IgbWFsbG9jJ2VkIGNodW5rcyB0byBzcGFu
IG11bHRpcGxlCi0gICAgICByZWdpb25zIGluIHRob3NlIGNhc2VzIHdoZXJlIHRoZXkgZG8gaGFw
cGVuIHRvIGJlIGNvbnRpZ3VvdXMuCi0KLSAgICAqIE1PUkVDT1JFIG5lZWQgbm90IGhhbmRsZSBu
ZWdhdGl2ZSBhcmd1bWVudHMgLS0gaXQgbWF5IGluc3RlYWQKLSAgICAgIGp1c3QgcmV0dXJuIE1P
UkVDT1JFX0ZBSUxVUkUgd2hlbiBnaXZlbiBuZWdhdGl2ZSBhcmd1bWVudHMuCi0gICAgICBOZWdh
dGl2ZSBhcmd1bWVudHMgYXJlIGFsd2F5cyBtdWx0aXBsZXMgb2YgcGFnZXNpemUuIE1PUkVDT1JF
Ci0gICAgICBtdXN0IG5vdCBtaXNpbnRlcnByZXQgbmVnYXRpdmUgYXJncyBhcyBsYXJnZSBwb3Np
dGl2ZSB1bnNpZ25lZAotICAgICAgYXJncy4gWW91IGNhbiBzdXBwcmVzcyBhbGwgc3VjaCBjYWxs
cyBmcm9tIGV2ZW4gb2NjdXJyaW5nIGJ5IGRlZmluaW5nCi0gICAgICBNT1JFQ09SRV9DQU5OT1Rf
VFJJTSwKLQotICBUaGVyZSBpcyBzb21lIHZhcmlhdGlvbiBhY3Jvc3Mgc3lzdGVtcyBhYm91dCB0
aGUgdHlwZSBvZiB0aGUKLSAgYXJndW1lbnQgdG8gc2Jyay9NT1JFQ09SRS4gSWYgc2l6ZV90IGlz
IHVuc2lnbmVkLCB0aGVuIGl0IGNhbm5vdAotICBhY3R1YWxseSBiZSBzaXplX3QsIGJlY2F1c2Ug
c2JyayBzdXBwb3J0cyBuZWdhdGl2ZSBhcmdzLCBzbyBpdCBpcwotICBub3JtYWxseSB0aGUgc2ln
bmVkIHR5cGUgb2YgdGhlIHNhbWUgd2lkdGggYXMgc2l6ZV90IChzb21ldGltZXMKLSAgZGVjbGFy
ZWQgYXMgImludHB0cl90IiwgYW5kIHNvbWV0aW1lcyAicHRyZGlmZl90IikuICBJdCBkb2Vzbid0
IG11Y2gKLSAgbWF0dGVyIHRob3VnaC4gSW50ZXJuYWxseSwgd2UgdXNlICJsb25nIiBhcyBhcmd1
bWVudHMsIHdoaWNoIHNob3VsZAotICB3b3JrIGFjcm9zcyBhbGwgcmVhc29uYWJsZSBwb3NzaWJp
bGl0aWVzLgotCi0gIEFkZGl0aW9uYWxseSwgaWYgTU9SRUNPUkUgZXZlciByZXR1cm5zIGZhaWx1
cmUgZm9yIGEgcG9zaXRpdmUKLSAgcmVxdWVzdCwgYW5kIEhBVkVfTU1BUCBpcyB0cnVlLCB0aGVu
IG1tYXAgaXMgdXNlZCBhcyBhIG5vbmNvbnRpZ3VvdXMKLSAgc3lzdGVtIGFsbG9jYXRvci4gVGhp
cyBpcyBhIHVzZWZ1bCBiYWNrdXAgc3RyYXRlZ3kgZm9yIHN5c3RlbXMgd2l0aAotICBob2xlcyBp
biBhZGRyZXNzIHNwYWNlcyAtLSBpbiB0aGlzIGNhc2Ugc2JyayBjYW5ub3QgY29udGlndW91c2x5
Ci0gIGV4cGFuZCB0aGUgaGVhcCwgYnV0IG1tYXAgbWF5IGJlIGFibGUgdG8gbWFwIG5vbmNvbnRp
Z3VvdXMgc3BhY2UuCi0KLSAgSWYgeW91J2QgbGlrZSBtbWFwIHRvIEFMV0FZUyBiZSB1c2VkLCB5
b3UgY2FuIGRlZmluZSBNT1JFQ09SRSB0byBiZQotICBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJl
dHVybnMgTU9SRUNPUkVfRkFJTFVSRS4KLQotICBNYWxsb2Mgb25seSBoYXMgbGltaXRlZCBhYmls
aXR5IHRvIGRldGVjdCBmYWlsdXJlcyBvZiBNT1JFQ09SRQotICB0byBzdXBwbHkgY29udGlndW91
cyBzcGFjZSB3aGVuIGl0IHNheXMgaXQgY2FuLiBJbiBwYXJ0aWN1bGFyLAotICBtdWx0aXRocmVh
ZGVkIHByb2dyYW1zIHRoYXQgZG8gbm90IHVzZSBsb2NrcyBtYXkgcmVzdWx0IGluCi0gIHJlY2Ug
Y29uZGl0aW9ucyBhY3Jvc3MgY2FsbHMgdG8gTU9SRUNPUkUgdGhhdCByZXN1bHQgaW4gZ2Fwcwot
ICB0aGF0IGNhbm5vdCBiZSBkZXRlY3RlZCBhcyBzdWNoLCBhbmQgc3Vic2VxdWVudCBjb3JydXB0
aW9uLgotCi0gIElmIHlvdSBhcmUgdXNpbmcgdGhpcyBtYWxsb2Mgd2l0aCBzb21ldGhpbmcgb3Ro
ZXIgdGhhbiBzYnJrIChvciBpdHMKLSAgZW11bGF0aW9uKSB0byBzdXBwbHkgbWVtb3J5IHJlZ2lv
bnMsIHlvdSBwcm9iYWJseSB3YW50IHRvIHNldAotICBNT1JFQ09SRV9DT05USUdVT1VTIGFzIGZh
bHNlLiAgQXMgYW4gZXhhbXBsZSwgaGVyZSBpcyBhIGN1c3RvbQotICBhbGxvY2F0b3Iga2luZGx5
IGNvbnRyaWJ1dGVkIGZvciBwcmUtT1NYIG1hY09TLiAgSXQgdXNlcyB2aXJ0dWFsbHkKLSAgYnV0
IG5vdCBuZWNlc3NhcmlseSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbm9uLXBhZ2VkIG1lbW9yeSAo
bG9ja2VkCi0gIGluLCBwcmVzZW50IGFuZCB3b24ndCBnZXQgc3dhcHBlZCBvdXQpLiAgWW91IGNh
biB1c2UgaXQgYnkKLSAgdW5jb21tZW50aW5nIHRoaXMgc2VjdGlvbiwgYWRkaW5nIHNvbWUgI2lu
Y2x1ZGVzLCBhbmQgc2V0dGluZyB1cCB0aGUKLSAgYXBwcm9wcmlhdGUgZGVmaW5lcyBhYm92ZToK
LQotICAgICAgI2RlZmluZSBNT1JFQ09SRSBvc01vcmVDb3JlCi0gICAgICAjZGVmaW5lIE1PUkVD
T1JFX0NPTlRJR1VPVVMgMAotCi0gIFRoZXJlIGlzIGFsc28gYSBzaHV0ZG93biByb3V0aW5lIHRo
YXQgc2hvdWxkIHNvbWVob3cgYmUgY2FsbGVkIGZvcgotICBjbGVhbnVwIHVwb24gcHJvZ3JhbSBl
eGl0LgotCi0gICNkZWZpbmUgTUFYX1BPT0xfRU5UUklFUyAxMDAKLSAgI2RlZmluZSBNSU5JTVVN
X01PUkVDT1JFX1NJWkUgICg2NCAqIDEwMjQpCi0gIHN0YXRpYyBpbnQgbmV4dF9vc19wb29sOwot
ICB2b2lkICpvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107Ci0KLSAgdm9pZCAqb3NNb3Jl
Q29yZShpbnQgc2l6ZSkKLSAgewotICAgIHZvaWQgKnB0ciA9IDA7Ci0gICAgc3RhdGljIHZvaWQg
KnNicmtfdG9wID0gMDsKLQotICAgIGlmIChzaXplID4gMCkKLSAgICB7Ci0gICAgICBpZiAoc2l6
ZSA8IE1JTklNVU1fTU9SRUNPUkVfU0laRSkKLSAgICAgICAgIHNpemUgPSBNSU5JTVVNX01PUkVD
T1JFX1NJWkU7Ci0gICAgICBpZiAoQ3VycmVudEV4ZWN1dGlvbkxldmVsKCkgPT0ga1Rhc2tMZXZl
bCkKLSAgICAgICAgIHB0ciA9IFBvb2xBbGxvY2F0ZVJlc2lkZW50KHNpemUgKyBSTV9QQUdFX1NJ
WkUsIDApOwotICAgICAgaWYgKHB0ciA9PSAwKQotICAgICAgewotICAgICAgICByZXR1cm4gKHZv
aWQgKikgTU9SRUNPUkVfRkFJTFVSRTsKLSAgICAgIH0KLSAgICAgIC8vIHNhdmUgcHRycyBzbyB0
aGV5IGNhbiBiZSBmcmVlZCBkdXJpbmcgY2xlYW51cAotICAgICAgb3VyX29zX3Bvb2xzW25leHRf
b3NfcG9vbF0gPSBwdHI7Ci0gICAgICBuZXh0X29zX3Bvb2wrKzsKLSAgICAgIHB0ciA9ICh2b2lk
ICopICgoKChDSFVOS19TSVpFX1QpIHB0cikgKyBSTV9QQUdFX01BU0spICYgflJNX1BBR0VfTUFT
Syk7Ci0gICAgICBzYnJrX3RvcCA9IChjaGFyICopIHB0ciArIHNpemU7Ci0gICAgICByZXR1cm4g
cHRyOwotICAgIH0KLSAgICBlbHNlIGlmIChzaXplIDwgMCkKLSAgICB7Ci0gICAgICAvLyB3ZSBk
b24ndCBjdXJyZW50bHkgc3VwcG9ydCBzaHJpbmsgYmVoYXZpb3IKLSAgICAgIHJldHVybiAodm9p
ZCAqKSBNT1JFQ09SRV9GQUlMVVJFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0
dXJuIHNicmtfdG9wOwotICAgIH0KLSAgfQotCi0gIC8vIGNsZWFudXAgYW55IGFsbG9jYXRlZCBt
ZW1vcnkgcG9vbHMKLSAgLy8gY2FsbGVkIGFzIGxhc3QgdGhpbmcgYmVmb3JlIHNodXR0aW5nIGRv
d24gZHJpdmVyCi0KLSAgdm9pZCBvc0NsZWFudXBNZW0odm9pZCkKLSAgewotICAgIHZvaWQgKipw
dHI7Ci0KLSAgICBmb3IgKHB0ciA9IG91cl9vc19wb29sczsgcHRyIDwgJm91cl9vc19wb29sc1tN
QVhfUE9PTF9FTlRSSUVTXTsgcHRyKyspCi0gICAgICBpZiAoKnB0cikKLSAgICAgIHsKLSAgICAg
ICAgIFBvb2xEZWFsbG9jYXRlKCpwdHIpOwotICAgICAgICAgKnB0ciA9IDA7Ci0gICAgICB9Ci0g
IH0KLQotKi8KLQotCi0vKiAKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0KLSAgRW11bGF0aW9uIG9mIHNicmsgZm9yIHdp
bjMyLiAKLSAgRG9uYXRlZCBieSBKLiBXYWx0ZXIgPFdhbHRlckBHZU5lU3lzLWUuZGU+LgotICBG
b3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvZGUsIGFuZCBtYWxsb2Mgb24g
V2luMzIsIHNlZSAKLSAgICAgaHR0cDovL3d3dy5nZW5lc3lzLWUuZGUvandhbHRlci8KLSovCi0K
LQotI2lmZGVmIFdJTjMyCi0KLSNpZmRlZiBfREVCVUcKLS8qICNkZWZpbmUgVFJBQ0UgKi8KLSNl
bmRpZgotCi0vKiBTdXBwb3J0IGZvciBVU0VfTUFMTE9DX0xPQ0sgKi8KLSNpZmRlZiBVU0VfTUFM
TE9DX0xPQ0sKLQotLyogV2FpdCBmb3Igc3BpbiBsb2NrICovCi1zdGF0aWMgaW50IHNsd2FpdCAo
aW50ICpzbCkgewotICAgIHdoaWxlIChJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSAoKHZvaWQg
KiopIHNsLCAodm9pZCAqKSAxLCAodm9pZCAqKSAwKSAhPSAwKSAKLQkgICAgU2xlZXAgKDApOwot
ICAgIHJldHVybiAwOwotfQotCi0vKiBSZWxlYXNlIHNwaW4gbG9jayAqLwotc3RhdGljIGludCBz
bHJlbGVhc2UgKGludCAqc2wpIHsKLSAgICBJbnRlcmxvY2tlZEV4Y2hhbmdlIChzbCwgMCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBORUVERUQKLS8qIFNwaW4gbG9jayBmb3IgZW11bGF0
aW9uIGNvZGUgKi8KLXN0YXRpYyBpbnQgZ19zbDsKLSNlbmRpZgotCi0jZW5kaWYgLyogVVNFX01B
TExPQ19MT0NLICovCi0KLS8qIGdldHBhZ2VzaXplIGZvciB3aW5kb3dzICovCi1zdGF0aWMgbG9u
ZyBnZXRwYWdlc2l6ZSAodm9pZCkgewotICAgIHN0YXRpYyBsb25nIGdfcGFnZXNpemUgPSAwOwot
ICAgIGlmICghIGdfcGFnZXNpemUpIHsKLSAgICAgICAgU1lTVEVNX0lORk8gc3lzdGVtX2luZm87
Ci0gICAgICAgIEdldFN5c3RlbUluZm8gKCZzeXN0ZW1faW5mbyk7Ci0gICAgICAgIGdfcGFnZXNp
emUgPSBzeXN0ZW1faW5mby5kd1BhZ2VTaXplOwotICAgIH0KLSAgICByZXR1cm4gZ19wYWdlc2l6
ZTsKLX0KLXN0YXRpYyBsb25nIGdldHJlZ2lvbnNpemUgKHZvaWQpIHsKLSAgICBzdGF0aWMgbG9u
ZyBnX3JlZ2lvbnNpemUgPSAwOwotICAgIGlmICghIGdfcmVnaW9uc2l6ZSkgewotICAgICAgICBT
WVNURU1fSU5GTyBzeXN0ZW1faW5mbzsKLSAgICAgICAgR2V0U3lzdGVtSW5mbyAoJnN5c3RlbV9p
bmZvKTsKLSAgICAgICAgZ19yZWdpb25zaXplID0gc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3Jh
bnVsYXJpdHk7Ci0gICAgfQotICAgIHJldHVybiBnX3JlZ2lvbnNpemU7Ci19Ci0KLS8qIEEgcmVn
aW9uIGxpc3QgZW50cnkgKi8KLXR5cGVkZWYgc3RydWN0IF9yZWdpb25fbGlzdF9lbnRyeSB7Ci0g
ICAgdm9pZCAqdG9wX2FsbG9jYXRlZDsKLSAgICB2b2lkICp0b3BfY29tbWl0dGVkOwotICAgIHZv
aWQgKnRvcF9yZXNlcnZlZDsKLSAgICBsb25nIHJlc2VydmVfc2l6ZTsKLSAgICBzdHJ1Y3QgX3Jl
Z2lvbl9saXN0X2VudHJ5ICpwcmV2aW91czsKLX0gcmVnaW9uX2xpc3RfZW50cnk7Ci0KLS8qIEFs
bG9jYXRlIGFuZCBsaW5rIGEgcmVnaW9uIGVudHJ5IGluIHRoZSByZWdpb24gbGlzdCAqLwotc3Rh
dGljIGludCByZWdpb25fbGlzdF9hcHBlbmQgKHJlZ2lvbl9saXN0X2VudHJ5ICoqbGFzdCwgdm9p
ZCAqYmFzZV9yZXNlcnZlZCwgbG9uZyByZXNlcnZlX3NpemUpIHsKLSAgICByZWdpb25fbGlzdF9l
bnRyeSAqbmV4dCA9IChyZWdpb25fbGlzdF9lbnRyeSAqKSBIZWFwQWxsb2MgKEdldFByb2Nlc3NI
ZWFwICgpLCAwLCBzaXplb2YgKHJlZ2lvbl9saXN0X2VudHJ5KSk7Ci0gICAgaWYgKCEgbmV4dCkK
LSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIG5leHQtPnRvcF9hbGxvY2F0ZWQgPSAoY2hhciAq
KSBiYXNlX3Jlc2VydmVkOwotICAgIG5leHQtPnRvcF9jb21taXR0ZWQgPSAoY2hhciAqKSBiYXNl
X3Jlc2VydmVkOwotICAgIG5leHQtPnRvcF9yZXNlcnZlZCA9IChjaGFyICopIGJhc2VfcmVzZXJ2
ZWQgKyByZXNlcnZlX3NpemU7Ci0gICAgbmV4dC0+cmVzZXJ2ZV9zaXplID0gcmVzZXJ2ZV9zaXpl
OwotICAgIG5leHQtPnByZXZpb3VzID0gKmxhc3Q7Ci0gICAgKmxhc3QgPSBuZXh0OwotICAgIHJl
dHVybiBUUlVFOwotfQotLyogRnJlZSBhbmQgdW5saW5rIHRoZSBsYXN0IHJlZ2lvbiBlbnRyeSBm
cm9tIHRoZSByZWdpb24gbGlzdCAqLwotc3RhdGljIGludCByZWdpb25fbGlzdF9yZW1vdmUgKHJl
Z2lvbl9saXN0X2VudHJ5ICoqbGFzdCkgewotICAgIHJlZ2lvbl9saXN0X2VudHJ5ICpwcmV2aW91
cyA9ICgqbGFzdCktPnByZXZpb3VzOwotICAgIGlmICghIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVh
cCAoKSwgc2l6ZW9mIChyZWdpb25fbGlzdF9lbnRyeSksICpsYXN0KSkKLSAgICAgICAgcmV0dXJu
IEZBTFNFOwotICAgICpsYXN0ID0gcHJldmlvdXM7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLSNk
ZWZpbmUgQ0VJTChzaXplLHRvKQkoKChzaXplKSsodG8pLTEpJn4oKHRvKS0xKSkKLSNkZWZpbmUg
RkxPT1Ioc2l6ZSx0bykJKChzaXplKSZ+KCh0byktMSkpCi0KLSNkZWZpbmUgU0JSS19TQ0FMRSAg
MAotLyogI2RlZmluZSBTQlJLX1NDQUxFICAxICovCi0vKiAjZGVmaW5lIFNCUktfU0NBTEUgIDIg
Ki8KLS8qICNkZWZpbmUgU0JSS19TQ0FMRSAgNCAgKi8KLQotLyogc2JyayBmb3Igd2luZG93cyAq
Lwotc3RhdGljIHZvaWQgKnNicmsgKHB0cmRpZmZfdCBzaXplKSB7Ci0gICAgc3RhdGljIGxvbmcg
Z19wYWdlc2l6ZSwgZ19teV9wYWdlc2l6ZTsKLSAgICBzdGF0aWMgbG9uZyBnX3JlZ2lvbnNpemUs
IGdfbXlfcmVnaW9uc2l6ZTsKLSAgICBzdGF0aWMgcmVnaW9uX2xpc3RfZW50cnkgKmdfbGFzdDsK
LSAgICB2b2lkICpyZXN1bHQgPSAodm9pZCAqKSBNT1JFQ09SRV9GQUlMVVJFOwotI2lmZGVmIFRS
QUNFCi0gICAgcHJpbnRmICgic2JyayAlbGRcbiIsIChsb25nKSBzaXplKTsKLSNlbmRpZgotI2lm
IGRlZmluZWQgKFVTRV9NQUxMT0NfTE9DSykgJiYgZGVmaW5lZCAoTkVFREVEKQotICAgIC8qIFdh
aXQgZm9yIHNwaW4gbG9jayAqLwotICAgIHNsd2FpdCAoJmdfc2wpOwotI2VuZGlmCi0gICAgLyog
Rmlyc3QgdGltZSBpbml0aWFsaXphdGlvbiAqLwotICAgIGlmICghIGdfcGFnZXNpemUpIHsKLSAg
ICAgICAgZ19wYWdlc2l6ZSA9IGdldHBhZ2VzaXplICgpOwotICAgICAgICBnX215X3BhZ2VzaXpl
ID0gZ19wYWdlc2l6ZSA8PCBTQlJLX1NDQUxFOwotICAgIH0KLSAgICBpZiAoISBnX3JlZ2lvbnNp
emUpIHsKLSAgICAgICAgZ19yZWdpb25zaXplID0gZ2V0cmVnaW9uc2l6ZSAoKTsKLSAgICAgICAg
Z19teV9yZWdpb25zaXplID0gZ19yZWdpb25zaXplIDw8IFNCUktfU0NBTEU7Ci0gICAgfQotICAg
IGlmICghIGdfbGFzdCkgewotICAgICAgICBpZiAoISByZWdpb25fbGlzdF9hcHBlbmQgKCZnX2xh
c3QsIDAsIDApKSAKLSAgICAgICAgICAgZ290byBzYnJrX2V4aXQ7Ci0gICAgfQotICAgIC8qIEFz
c2VydCBpbnZhcmlhbnRzICovCi0gICAgYXNzZXJ0IChnX2xhc3QpOwotICAgIGFzc2VydCAoKGNo
YXIgKikgZ19sYXN0LT50b3BfcmVzZXJ2ZWQgLSBnX2xhc3QtPnJlc2VydmVfc2l6ZSA8PSAoY2hh
ciAqKSBnX2xhc3QtPnRvcF9hbGxvY2F0ZWQgJiYKLSAgICAgICAgICAgIGdfbGFzdC0+dG9wX2Fs
bG9jYXRlZCA8PSBnX2xhc3QtPnRvcF9jb21taXR0ZWQpOwotICAgIGFzc2VydCAoKGNoYXIgKikg
Z19sYXN0LT50b3BfcmVzZXJ2ZWQgLSBnX2xhc3QtPnJlc2VydmVfc2l6ZSA8PSAoY2hhciAqKSBn
X2xhc3QtPnRvcF9jb21taXR0ZWQgJiYKLSAgICAgICAgICAgIGdfbGFzdC0+dG9wX2NvbW1pdHRl
ZCA8PSBnX2xhc3QtPnRvcF9yZXNlcnZlZCAmJgotICAgICAgICAgICAgKHVuc2lnbmVkKSBnX2xh
c3QtPnRvcF9jb21taXR0ZWQgJSBnX3BhZ2VzaXplID09IDApOwotICAgIGFzc2VydCAoKHVuc2ln
bmVkKSBnX2xhc3QtPnRvcF9yZXNlcnZlZCAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLSAgICBhc3Nl
cnQgKCh1bnNpZ25lZCkgZ19sYXN0LT5yZXNlcnZlX3NpemUgJSBnX3JlZ2lvbnNpemUgPT0gMCk7
Ci0gICAgLyogQWxsb2NhdGlvbiByZXF1ZXN0ZWQ/ICovCi0gICAgaWYgKHNpemUgPj0gMCkgewot
ICAgICAgICAvKiBBbGxvY2F0aW9uIHNpemUgaXMgdGhlIHJlcXVlc3RlZCBzaXplICovCi0gICAg
ICAgIGxvbmcgYWxsb2NhdGVfc2l6ZSA9IHNpemU7Ci0gICAgICAgIC8qIENvbXB1dGUgdGhlIHNp
emUgdG8gY29tbWl0ICovCi0gICAgICAgIGxvbmcgdG9fY29tbWl0ID0gKGNoYXIgKikgZ19sYXN0
LT50b3BfYWxsb2NhdGVkICsgYWxsb2NhdGVfc2l6ZSAtIChjaGFyICopIGdfbGFzdC0+dG9wX2Nv
bW1pdHRlZDsKLSAgICAgICAgLyogRG8gd2UgcmVhY2ggdGhlIGNvbW1pdCBsaW1pdD8gKi8KLSAg
ICAgICAgaWYgKHRvX2NvbW1pdCA+IDApIHsKLSAgICAgICAgICAgIC8qIFJvdW5kIHNpemUgdG8g
Y29tbWl0ICovCi0gICAgICAgICAgICBsb25nIGNvbW1pdF9zaXplID0gQ0VJTCAodG9fY29tbWl0
LCBnX215X3BhZ2VzaXplKTsKLSAgICAgICAgICAgIC8qIENvbXB1dGUgdGhlIHNpemUgdG8gcmVz
ZXJ2ZSAqLwotICAgICAgICAgICAgbG9uZyB0b19yZXNlcnZlID0gKGNoYXIgKikgZ19sYXN0LT50
b3BfY29tbWl0dGVkICsgY29tbWl0X3NpemUgLSAoY2hhciAqKSBnX2xhc3QtPnRvcF9yZXNlcnZl
ZDsKLSAgICAgICAgICAgIC8qIERvIHdlIHJlYWNoIHRoZSByZXNlcnZlIGxpbWl0PyAqLwotICAg
ICAgICAgICAgaWYgKHRvX3Jlc2VydmUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgLyogQ29tcHV0
ZSB0aGUgcmVtYWluaW5nIHNpemUgdG8gY29tbWl0IGluIHRoZSBjdXJyZW50IHJlZ2lvbiAqLwot
ICAgICAgICAgICAgICAgIGxvbmcgcmVtYWluaW5nX2NvbW1pdF9zaXplID0gKGNoYXIgKikgZ19s
YXN0LT50b3BfcmVzZXJ2ZWQgLSAoY2hhciAqKSBnX2xhc3QtPnRvcF9jb21taXR0ZWQ7Ci0gICAg
ICAgICAgICAgICAgaWYgKHJlbWFpbmluZ19jb21taXRfc2l6ZSA+IDApIHsKLSAgICAgICAgICAg
ICAgICAgICAgLyogQXNzZXJ0IHByZWNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0ICgodW5zaWduZWQpIGdfbGFzdC0+dG9wX2NvbW1pdHRlZCAlIGdfcGFnZXNpemUgPT0g
MCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCAoMCA8IHJlbWFpbmluZ19jb21taXRfc2l6
ZSAmJiByZW1haW5pbmdfY29tbWl0X3NpemUgJSBnX3BhZ2VzaXplID09IDApOyB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvKiBDb21taXQgdGhpcyAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqYmFzZV9jb21taXR0ZWQgPSBWaXJ0dWFsQWxsb2MgKGdfbGFzdC0+dG9wX2NvbW1p
dHRlZCwgcmVtYWluaW5nX2NvbW1pdF9zaXplLAotCQkJCQkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1FTV9DT01NSVQsIFBBR0VfUkVBRFdSSVRFKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIENoZWNrIHJldHVybmVkIHBvaW50ZXIgZm9yIGNvbnNpc3RlbmN5ICovCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZV9jb21taXR0ZWQgIT0gZ19sYXN0LT50b3Bf
Y29tbWl0dGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc2Jya19leGl0Owot
ICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzZXJ0IHBvc3Rjb25kaXRpb25zICovCi0gICAg
ICAgICAgICAgICAgICAgICAgICBhc3NlcnQgKCh1bnNpZ25lZCkgYmFzZV9jb21taXR0ZWQgJSBn
X3BhZ2VzaXplID09IDApOwotI2lmZGVmIFRSQUNFCi0gICAgICAgICAgICAgICAgICAgICAgICBw
cmludGYgKCJDb21taXQgJXAgJWRcbiIsIGJhc2VfY29tbWl0dGVkLCByZW1haW5pbmdfY29tbWl0
X3NpemUpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBBZGp1c3QgdGhlIHJl
Z2lvbnMgY29tbWl0IHRvcCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZ19sYXN0LT50b3Bf
Y29tbWl0dGVkID0gKGNoYXIgKikgYmFzZV9jb21taXR0ZWQgKyByZW1haW5pbmdfY29tbWl0X3Np
emU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IHsKLSAgICAgICAg
ICAgICAgICAgICAgLyogTm93IHdlIGFyZSBnb2luZyB0byBzZWFyY2ggYW5kIHJlc2VydmUuICov
Ci0gICAgICAgICAgICAgICAgICAgIGludCBjb250aWd1b3VzID0gLTE7Ci0gICAgICAgICAgICAg
ICAgICAgIGludCBmb3VuZCA9IEZBTFNFOwotICAgICAgICAgICAgICAgICAgICBNRU1PUllfQkFT
SUNfSU5GT1JNQVRJT04gbWVtb3J5X2luZm87Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQgKmJh
c2VfcmVzZXJ2ZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGxvbmcgcmVzZXJ2ZV9zaXplOwotICAg
ICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUg
Y29udGlndW91cyBtZW1vcnkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpZ3VvdXMg
PSBUUlVFOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogUm91bmQgc2l6ZSB0byByZXNlcnZl
ICovCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlX3NpemUgPSBDRUlMICh0b19yZXNl
cnZlLCBnX215X3JlZ2lvbnNpemUpOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQg
d2l0aCB0aGUgY3VycmVudCByZWdpb24ncyB0b3AgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg
IG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNzID0gZ19sYXN0LT50b3BfcmVzZXJ2ZWQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwotICAgICAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0ICgodW5zaWduZWQpIG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNzICUg
Z19wYWdlc2l6ZSA9PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCAoMCA8IHJl
c2VydmVfc2l6ZSAmJiByZXNlcnZlX3NpemUgJSBnX3JlZ2lvbnNpemUgPT0gMCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoVmlydHVhbFF1ZXJ5IChtZW1vcnlfaW5mby5CYXNlQWRk
cmVzcywgJm1lbW9yeV9pbmZvLCBzaXplb2YgKG1lbW9yeV9pbmZvKSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcG9zdGNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhc3NlcnQgKCh1bnNpZ25lZCkgbWVtb3J5X2luZm8uQmFzZUFkZHJl
c3MgJSBnX3BhZ2VzaXplID09IDApOwotI2lmZGVmIFRSQUNFCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJpbnRmICgiUXVlcnkgJXAgJWQgJXNcbiIsIG1lbW9yeV9pbmZvLkJhc2VBZGRy
ZXNzLCBtZW1vcnlfaW5mby5SZWdpb25TaXplLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lbW9yeV9pbmZvLlN0YXRlID09IE1FTV9GUkVFID8gIkZSRUUiOiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZW1vcnlfaW5mby5TdGF0ZSA9PSBNRU1f
UkVTRVJWRSA/ICJSRVNFUlZFRCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKG1lbW9yeV9pbmZvLlN0YXRlID09IE1FTV9DT01NSVQgPyAiQ09NTUlUVEVEIjogIj8iKSkp
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVnaW9uIGlzIGZyZWUs
IHdlbGwgYWxpZ25lZCBhbmQgYmlnIGVub3VnaDogd2UgYXJlIGRvbmUgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobWVtb3J5X2luZm8uU3RhdGUgPT0gTUVNX0ZSRUUgJiYKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKSBtZW1vcnlfaW5mby5CYXNl
QWRkcmVzcyAlIGdfcmVnaW9uc2l6ZSA9PSAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1lbW9yeV9pbmZvLlJlZ2lvblNpemUgPj0gKHVuc2lnbmVkKSByZXNlcnZlX3NpemUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUUlVFOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnJvbSBub3cgb24gd2UgY2Fu
J3QgZ2V0IGNvbnRpZ3VvdXMgbWVtb3J5ISAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpZ3VvdXMgPSBGQUxTRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNv
bXB1dGUgc2l6ZSB0byByZXNlcnZlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
ZXJ2ZV9zaXplID0gQ0VJTCAoYWxsb2NhdGVfc2l6ZSwgZ19teV9yZWdpb25zaXplKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfaW5mby5CYXNlQWRkcmVzcyA9IChjaGFyICop
IG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNzICsgbWVtb3J5X2luZm8uUmVnaW9uU2l6ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCAoKHVuc2lnbmVkKSBtZW1vcnlfaW5mby5CYXNl
QWRkcmVzcyAlIGdfcGFnZXNpemUgPT0gMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0ICgwIDwgcmVzZXJ2ZV9zaXplICYmIHJlc2VydmVfc2l6ZSAlIGdfcmVnaW9uc2l6ZSA9
PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8qIFNlYXJjaCBmYWlsZWQ/ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISBmb3Vu
ZCkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzYnJrX2V4aXQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwotICAgICAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0ICgodW5zaWduZWQpIG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNzICUg
Z19yZWdpb25zaXplID09IDApOwotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ICgwIDwg
cmVzZXJ2ZV9zaXplICYmIHJlc2VydmVfc2l6ZSAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byByZXNlcnZlIHRoaXMgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJhc2VfcmVzZXJ2ZWQgPSBWaXJ0dWFsQWxsb2MgKG1lbW9yeV9pbmZvLkJh
c2VBZGRyZXNzLCByZXNlcnZlX3NpemUsIAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTUVNX1JFU0VSVkUsIFBBR0VfTk9BQ0NFU1MpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCEgYmFzZV9yZXNlcnZlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCByYyA9IEdldExhc3RFcnJvciAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocmMgIT0gRVJST1JfSU5WQUxJRF9BRERSRVNTKSAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ290byBzYnJrX2V4aXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvKiBBIG51bGwgcG9pbnRlciBzaWduYWxzIChob3BlZnVsbHkp
IGEgcmFjZSBjb25kaXRpb24gd2l0aCBhbm90aGVyIHRocmVhZC4gKi8KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIEluIHRoaXMgY2FzZSwgd2UgdHJ5IGFnYWluLiAqLwotICAgICAgICAgICAg
ICAgICAgICB9IHdoaWxlICghIGJhc2VfcmVzZXJ2ZWQpOwotICAgICAgICAgICAgICAgICAgICAv
KiBDaGVjayByZXR1cm5lZCBwb2ludGVyIGZvciBjb25zaXN0ZW5jeSAqLwotICAgICAgICAgICAg
ICAgICAgICBpZiAobWVtb3J5X2luZm8uQmFzZUFkZHJlc3MgJiYgYmFzZV9yZXNlcnZlZCAhPSBt
ZW1vcnlfaW5mby5CYXNlQWRkcmVzcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc2Jy
a19leGl0OwotICAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcG9zdGNvbmRpdGlvbnMgKi8K
LSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ICgodW5zaWduZWQpIGJhc2VfcmVzZXJ2ZWQgJSBn
X3JlZ2lvbnNpemUgPT0gMCk7Ci0jaWZkZWYgVFJBQ0UKLSAgICAgICAgICAgICAgICAgICAgcHJp
bnRmICgiUmVzZXJ2ZSAlcCAlZFxuIiwgYmFzZV9yZXNlcnZlZCwgcmVzZXJ2ZV9zaXplKTsKLSNl
bmRpZgotICAgICAgICAgICAgICAgICAgICAvKiBEaWQgd2UgZ2V0IGNvbnRpZ3VvdXMgbWVtb3J5
PyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGlndW91cykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbG9uZyBzdGFydF9zaXplID0gKGNoYXIgKikgZ19sYXN0LT50b3BfY29tbWl0
dGVkIC0gKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkOwotICAgICAgICAgICAgICAgICAg
ICAgICAgLyogQWRqdXN0IGFsbG9jYXRpb24gc2l6ZSAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgYWxsb2NhdGVfc2l6ZSAtPSBzdGFydF9zaXplOwotICAgICAgICAgICAgICAgICAgICAgICAg
LyogQWRqdXN0IHRoZSByZWdpb25zIGFsbG9jYXRpb24gdG9wICovCi0gICAgICAgICAgICAgICAg
ICAgICAgICBnX2xhc3QtPnRvcF9hbGxvY2F0ZWQgPSBnX2xhc3QtPnRvcF9jb21taXR0ZWQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNvbXB1dGUgdGhlIHNpemUgdG8gY29tbWl0ICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b19jb21taXQgPSAoY2hhciAqKSBnX2xhc3QtPnRv
cF9hbGxvY2F0ZWQgKyBhbGxvY2F0ZV9zaXplIC0gKGNoYXIgKikgZ19sYXN0LT50b3BfY29tbWl0
dGVkOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogUm91bmQgc2l6ZSB0byBjb21taXQgKi8K
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdF9zaXplID0gQ0VJTCAodG9fY29tbWl0LCBn
X215X3BhZ2VzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgfSAKLSAgICAgICAgICAgICAgICAg
ICAgLyogQXBwZW5kIHRoZSBuZXcgcmVnaW9uIHRvIHRoZSBsaXN0ICovCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghIHJlZ2lvbl9saXN0X2FwcGVuZCAoJmdfbGFzdCwgYmFzZV9yZXNlcnZlZCwg
cmVzZXJ2ZV9zaXplKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc2Jya19leGl0Owot
ICAgICAgICAgICAgICAgICAgICAvKiBEaWRuJ3Qgd2UgZ2V0IGNvbnRpZ3VvdXMgbWVtb3J5PyAq
LwotICAgICAgICAgICAgICAgICAgICBpZiAoISBjb250aWd1b3VzKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvKiBSZWNvbXB1dGUgdGhlIHNpemUgdG8gY29tbWl0ICovCi0gICAgICAgICAg
ICAgICAgICAgICAgICB0b19jb21taXQgPSAoY2hhciAqKSBnX2xhc3QtPnRvcF9hbGxvY2F0ZWQg
KyBhbGxvY2F0ZV9zaXplIC0gKGNoYXIgKikgZ19sYXN0LT50b3BfY29tbWl0dGVkOwotICAgICAg
ICAgICAgICAgICAgICAgICAgLyogUm91bmQgc2l6ZSB0byBjb21taXQgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1pdF9zaXplID0gQ0VJTCAodG9fY29tbWl0LCBnX215X3BhZ2VzaXpl
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gCi0gICAgICAgICAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwotICAgICAgICAgICAg
YXNzZXJ0ICgodW5zaWduZWQpIGdfbGFzdC0+dG9wX2NvbW1pdHRlZCAlIGdfcGFnZXNpemUgPT0g
MCk7Ci0gICAgICAgICAgICBhc3NlcnQgKDAgPCBjb21taXRfc2l6ZSAmJiBjb21taXRfc2l6ZSAl
IGdfcGFnZXNpemUgPT0gMCk7IHsKLSAgICAgICAgICAgICAgICAvKiBDb21taXQgdGhpcyAqLwot
ICAgICAgICAgICAgICAgIHZvaWQgKmJhc2VfY29tbWl0dGVkID0gVmlydHVhbEFsbG9jIChnX2xh
c3QtPnRvcF9jb21taXR0ZWQsIGNvbW1pdF9zaXplLCAKLQkJCQkgICAgCQkJICAgICAgICAgICAg
ICAgICAgICAgTUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpOwotICAgICAgICAgICAgICAgIC8q
IENoZWNrIHJldHVybmVkIHBvaW50ZXIgZm9yIGNvbnNpc3RlbmN5ICovCi0gICAgICAgICAgICAg
ICAgaWYgKGJhc2VfY29tbWl0dGVkICE9IGdfbGFzdC0+dG9wX2NvbW1pdHRlZCkKLSAgICAgICAg
ICAgICAgICAgICAgZ290byBzYnJrX2V4aXQ7Ci0gICAgICAgICAgICAgICAgLyogQXNzZXJ0IHBv
c3Rjb25kaXRpb25zICovCi0gICAgICAgICAgICAgICAgYXNzZXJ0ICgodW5zaWduZWQpIGJhc2Vf
Y29tbWl0dGVkICUgZ19wYWdlc2l6ZSA9PSAwKTsKLSNpZmRlZiBUUkFDRQotICAgICAgICAgICAg
ICAgIHByaW50ZiAoIkNvbW1pdCAlcCAlZFxuIiwgYmFzZV9jb21taXR0ZWQsIGNvbW1pdF9zaXpl
KTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIC8qIEFkanVzdCB0aGUgcmVnaW9ucyBjb21taXQg
dG9wICovCi0gICAgICAgICAgICAgICAgZ19sYXN0LT50b3BfY29tbWl0dGVkID0gKGNoYXIgKikg
YmFzZV9jb21taXR0ZWQgKyBjb21taXRfc2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAK
LSAgICAgICAgLyogQWRqdXN0IHRoZSByZWdpb25zIGFsbG9jYXRpb24gdG9wICovCi0gICAgICAg
IGdfbGFzdC0+dG9wX2FsbG9jYXRlZCA9IChjaGFyICopIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCAr
IGFsbG9jYXRlX3NpemU7Ci0gICAgICAgIHJlc3VsdCA9IChjaGFyICopIGdfbGFzdC0+dG9wX2Fs
bG9jYXRlZCAtIHNpemU7Ci0gICAgLyogRGVhbGxvY2F0aW9uIHJlcXVlc3RlZD8gKi8KLSAgICB9
IGVsc2UgaWYgKHNpemUgPCAwKSB7Ci0gICAgICAgIGxvbmcgZGVhbGxvY2F0ZV9zaXplID0gLSBz
aXplOwotICAgICAgICAvKiBBcyBsb25nIGFzIHdlIGhhdmUgYSByZWdpb24gdG8gcmVsZWFzZSAq
LwotICAgICAgICB3aGlsZSAoKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkIC0gZGVhbGxv
Y2F0ZV9zaXplIDwgKGNoYXIgKikgZ19sYXN0LT50b3BfcmVzZXJ2ZWQgLSBnX2xhc3QtPnJlc2Vy
dmVfc2l6ZSkgewotICAgICAgICAgICAgLyogR2V0IHRoZSBzaXplIHRvIHJlbGVhc2UgKi8KLSAg
ICAgICAgICAgIGxvbmcgcmVsZWFzZV9zaXplID0gZ19sYXN0LT5yZXNlcnZlX3NpemU7Ci0gICAg
ICAgICAgICAvKiBHZXQgdGhlIGJhc2UgYWRkcmVzcyAqLwotICAgICAgICAgICAgdm9pZCAqYmFz
ZV9yZXNlcnZlZCA9IChjaGFyICopIGdfbGFzdC0+dG9wX3Jlc2VydmVkIC0gcmVsZWFzZV9zaXpl
OwotICAgICAgICAgICAgLyogQXNzZXJ0IHByZWNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAgIGFz
c2VydCAoKHVuc2lnbmVkKSBiYXNlX3Jlc2VydmVkICUgZ19yZWdpb25zaXplID09IDApOyAKLSAg
ICAgICAgICAgIGFzc2VydCAoMCA8IHJlbGVhc2Vfc2l6ZSAmJiByZWxlYXNlX3NpemUgJSBnX3Jl
Z2lvbnNpemUgPT0gMCk7IHsKLSAgICAgICAgICAgICAgICAvKiBSZWxlYXNlIHRoaXMgKi8KLSAg
ICAgICAgICAgICAgICBpbnQgcmMgPSBWaXJ0dWFsRnJlZSAoYmFzZV9yZXNlcnZlZCwgMCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTV9SRUxFQVNFKTsKLSAgICAg
ICAgICAgICAgICAvKiBDaGVjayByZXR1cm5lZCBjb2RlIGZvciBjb25zaXN0ZW5jeSAqLwotICAg
ICAgICAgICAgICAgIGlmICghIHJjKQotICAgICAgICAgICAgICAgICAgICBnb3RvIHNicmtfZXhp
dDsKLSNpZmRlZiBUUkFDRQotICAgICAgICAgICAgICAgIHByaW50ZiAoIlJlbGVhc2UgJXAgJWRc
biIsIGJhc2VfcmVzZXJ2ZWQsIHJlbGVhc2Vfc2l6ZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIC8qIEFkanVzdCBkZWFsbG9jYXRpb24gc2l6ZSAqLwotICAgICAgICAgICAg
ZGVhbGxvY2F0ZV9zaXplIC09IChjaGFyICopIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCAtIChjaGFy
ICopIGJhc2VfcmVzZXJ2ZWQ7Ci0gICAgICAgICAgICAvKiBSZW1vdmUgdGhlIG9sZCByZWdpb24g
ZnJvbSB0aGUgbGlzdCAqLwotICAgICAgICAgICAgaWYgKCEgcmVnaW9uX2xpc3RfcmVtb3ZlICgm
Z19sYXN0KSkKLSAgICAgICAgICAgICAgICBnb3RvIHNicmtfZXhpdDsKLSAgICAgICAgfSB7Ci0g
ICAgICAgICAgICAvKiBDb21wdXRlIHRoZSBzaXplIHRvIGRlY29tbWl0ICovCi0gICAgICAgICAg
ICBsb25nIHRvX2RlY29tbWl0ID0gKGNoYXIgKikgZ19sYXN0LT50b3BfY29tbWl0dGVkIC0gKChj
aGFyICopIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCAtIGRlYWxsb2NhdGVfc2l6ZSk7Ci0gICAgICAg
ICAgICBpZiAodG9fZGVjb21taXQgPj0gZ19teV9wYWdlc2l6ZSkgewotICAgICAgICAgICAgICAg
IC8qIENvbXB1dGUgdGhlIHNpemUgdG8gZGVjb21taXQgKi8KLSAgICAgICAgICAgICAgICBsb25n
IGRlY29tbWl0X3NpemUgPSBGTE9PUiAodG9fZGVjb21taXQsIGdfbXlfcGFnZXNpemUpOwotICAg
ICAgICAgICAgICAgIC8qICBDb21wdXRlIHRoZSBiYXNlIGFkZHJlc3MgKi8KLSAgICAgICAgICAg
ICAgICB2b2lkICpiYXNlX2NvbW1pdHRlZCA9IChjaGFyICopIGdfbGFzdC0+dG9wX2NvbW1pdHRl
ZCAtIGRlY29tbWl0X3NpemU7Ci0gICAgICAgICAgICAgICAgLyogQXNzZXJ0IHByZWNvbmRpdGlv
bnMgKi8KLSAgICAgICAgICAgICAgICBhc3NlcnQgKCh1bnNpZ25lZCkgYmFzZV9jb21taXR0ZWQg
JSBnX3BhZ2VzaXplID09IDApOwotICAgICAgICAgICAgICAgIGFzc2VydCAoMCA8IGRlY29tbWl0
X3NpemUgJiYgZGVjb21taXRfc2l6ZSAlIGdfcGFnZXNpemUgPT0gMCk7IHsKLSAgICAgICAgICAg
ICAgICAgICAgLyogRGVjb21taXQgdGhpcyAqLwotICAgICAgICAgICAgICAgICAgICBpbnQgcmMg
PSBWaXJ0dWFsRnJlZSAoKGNoYXIgKikgYmFzZV9jb21taXR0ZWQsIGRlY29tbWl0X3NpemUsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNX0RFQ09NTUlUKTsK
LSAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgcmV0dXJuZWQgY29kZSBmb3IgY29uc2lzdGVu
Y3kgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCEgcmMpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBnb3RvIHNicmtfZXhpdDsKLSNpZmRlZiBUUkFDRQotICAgICAgICAgICAgICAgICAgICBw
cmludGYgKCJEZWNvbW1pdCAlcCAlZFxuIiwgYmFzZV9jb21taXR0ZWQsIGRlY29tbWl0X3NpemUp
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIEFkanVzdCBk
ZWFsbG9jYXRpb24gc2l6ZSBhbmQgcmVnaW9ucyBjb21taXQgYW5kIGFsbG9jYXRlIHRvcCAqLwot
ICAgICAgICAgICAgICAgIGRlYWxsb2NhdGVfc2l6ZSAtPSAoY2hhciAqKSBnX2xhc3QtPnRvcF9h
bGxvY2F0ZWQgLSAoY2hhciAqKSBiYXNlX2NvbW1pdHRlZDsKLSAgICAgICAgICAgICAgICBnX2xh
c3QtPnRvcF9jb21taXR0ZWQgPSBiYXNlX2NvbW1pdHRlZDsKLSAgICAgICAgICAgICAgICBnX2xh
c3QtPnRvcF9hbGxvY2F0ZWQgPSBiYXNlX2NvbW1pdHRlZDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICAvKiBBZGp1c3QgcmVnaW9ucyBhbGxvY2F0ZSB0b3AgKi8KLSAgICAgICAg
Z19sYXN0LT50b3BfYWxsb2NhdGVkID0gKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkIC0g
ZGVhbGxvY2F0ZV9zaXplOwotICAgICAgICAvKiBDaGVjayBmb3IgdW5kZXJmbG93ICovCi0gICAg
ICAgIGlmICgoY2hhciAqKSBnX2xhc3QtPnRvcF9yZXNlcnZlZCAtIGdfbGFzdC0+cmVzZXJ2ZV9z
aXplID4gKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkIHx8Ci0gICAgICAgICAgICBnX2xh
c3QtPnRvcF9hbGxvY2F0ZWQgPiBnX2xhc3QtPnRvcF9jb21taXR0ZWQpIHsKLSAgICAgICAgICAg
IC8qIEFkanVzdCByZWdpb25zIGFsbG9jYXRlIHRvcCAqLwotICAgICAgICAgICAgZ19sYXN0LT50
b3BfYWxsb2NhdGVkID0gKGNoYXIgKikgZ19sYXN0LT50b3BfcmVzZXJ2ZWQgLSBnX2xhc3QtPnJl
c2VydmVfc2l6ZTsKLSAgICAgICAgICAgIGdvdG8gc2Jya19leGl0OwotICAgICAgICB9Ci0gICAg
ICAgIHJlc3VsdCA9IGdfbGFzdC0+dG9wX2FsbG9jYXRlZDsKLSAgICB9Ci0gICAgLyogQXNzZXJ0
IGludmFyaWFudHMgKi8KLSAgICBhc3NlcnQgKGdfbGFzdCk7Ci0gICAgYXNzZXJ0ICgoY2hhciAq
KSBnX2xhc3QtPnRvcF9yZXNlcnZlZCAtIGdfbGFzdC0+cmVzZXJ2ZV9zaXplIDw9IChjaGFyICop
IGdfbGFzdC0+dG9wX2FsbG9jYXRlZCAmJgotICAgICAgICAgICAgZ19sYXN0LT50b3BfYWxsb2Nh
dGVkIDw9IGdfbGFzdC0+dG9wX2NvbW1pdHRlZCk7Ci0gICAgYXNzZXJ0ICgoY2hhciAqKSBnX2xh
c3QtPnRvcF9yZXNlcnZlZCAtIGdfbGFzdC0+cmVzZXJ2ZV9zaXplIDw9IChjaGFyICopIGdfbGFz
dC0+dG9wX2NvbW1pdHRlZCAmJgotICAgICAgICAgICAgZ19sYXN0LT50b3BfY29tbWl0dGVkIDw9
IGdfbGFzdC0+dG9wX3Jlc2VydmVkICYmCi0gICAgICAgICAgICAodW5zaWduZWQpIGdfbGFzdC0+
dG9wX2NvbW1pdHRlZCAlIGdfcGFnZXNpemUgPT0gMCk7Ci0gICAgYXNzZXJ0ICgodW5zaWduZWQp
IGdfbGFzdC0+dG9wX3Jlc2VydmVkICUgZ19yZWdpb25zaXplID09IDApOwotICAgIGFzc2VydCAo
KHVuc2lnbmVkKSBnX2xhc3QtPnJlc2VydmVfc2l6ZSAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLQot
c2Jya19leGl0OgotI2lmIGRlZmluZWQgKFVTRV9NQUxMT0NfTE9DSykgJiYgZGVmaW5lZCAoTkVF
REVEKQotICAgIC8qIFJlbGVhc2Ugc3BpbiBsb2NrICovCi0gICAgc2xyZWxlYXNlICgmZ19zbCk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBtbWFwIGZvciB3aW5kb3dzICov
Ci1zdGF0aWMgdm9pZCAqbW1hcCAodm9pZCAqcHRyLCBsb25nIHNpemUsIGxvbmcgcHJvdCwgbG9u
ZyB0eXBlLCBsb25nIGhhbmRsZSwgbG9uZyBhcmcpIHsKLSAgICBzdGF0aWMgbG9uZyBnX3BhZ2Vz
aXplOwotICAgIHN0YXRpYyBsb25nIGdfcmVnaW9uc2l6ZTsKLSNpZmRlZiBUUkFDRQotICAgIHBy
aW50ZiAoIm1tYXAgJWRcbiIsIHNpemUpOwotI2VuZGlmCi0jaWYgZGVmaW5lZCAoVVNFX01BTExP
Q19MT0NLKSAmJiBkZWZpbmVkIChORUVERUQpCi0gICAgLyogV2FpdCBmb3Igc3BpbiBsb2NrICov
Ci0gICAgc2x3YWl0ICgmZ19zbCk7Ci0jZW5kaWYKLSAgICAvKiBGaXJzdCB0aW1lIGluaXRpYWxp
emF0aW9uICovCi0gICAgaWYgKCEgZ19wYWdlc2l6ZSkgCi0gICAgICAgIGdfcGFnZXNpemUgPSBn
ZXRwYWdlc2l6ZSAoKTsKLSAgICBpZiAoISBnX3JlZ2lvbnNpemUpIAotICAgICAgICBnX3JlZ2lv
bnNpemUgPSBnZXRyZWdpb25zaXplICgpOwotICAgIC8qIEFzc2VydCBwcmVjb25kaXRpb25zICov
Ci0gICAgYXNzZXJ0ICgodW5zaWduZWQpIHB0ciAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLSAgICBh
c3NlcnQgKHNpemUgJSBnX3BhZ2VzaXplID09IDApOwotICAgIC8qIEFsbG9jYXRlIHRoaXMgKi8K
LSAgICBwdHIgPSBWaXJ0dWFsQWxsb2MgKHB0ciwgc2l6ZSwKLQkJCQkJICAgIE1FTV9SRVNFUlZF
IHwgTUVNX0NPTU1JVCB8IE1FTV9UT1BfRE9XTiwgUEFHRV9SRUFEV1JJVEUpOwotICAgIGlmICgh
IHB0cikgewotICAgICAgICBwdHIgPSAodm9pZCAqKSBNT1JFQ09SRV9GQUlMVVJFOwotICAgICAg
ICBnb3RvIG1tYXBfZXhpdDsKLSAgICB9Ci0gICAgLyogQXNzZXJ0IHBvc3Rjb25kaXRpb25zICov
Ci0gICAgYXNzZXJ0ICgodW5zaWduZWQpIHB0ciAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLSNpZmRl
ZiBUUkFDRQotICAgIHByaW50ZiAoIkNvbW1pdCAlcCAlZFxuIiwgcHRyLCBzaXplKTsKLSNlbmRp
ZgotbW1hcF9leGl0OgotI2lmIGRlZmluZWQgKFVTRV9NQUxMT0NfTE9DSykgJiYgZGVmaW5lZCAo
TkVFREVEKQotICAgIC8qIFJlbGVhc2Ugc3BpbiBsb2NrICovCi0gICAgc2xyZWxlYXNlICgmZ19z
bCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcHRyOwotfQotCi0vKiBtdW5tYXAgZm9yIHdpbmRvd3Mg
Ki8KLXN0YXRpYyBsb25nIG11bm1hcCAodm9pZCAqcHRyLCBsb25nIHNpemUpIHsKLSAgICBzdGF0
aWMgbG9uZyBnX3BhZ2VzaXplOwotICAgIHN0YXRpYyBsb25nIGdfcmVnaW9uc2l6ZTsKLSAgICBp
bnQgcmMgPSBNVU5NQVBfRkFJTFVSRTsKLSNpZmRlZiBUUkFDRQotICAgIHByaW50ZiAoIm11bm1h
cCAlcCAlZFxuIiwgcHRyLCBzaXplKTsKLSNlbmRpZgotI2lmIGRlZmluZWQgKFVTRV9NQUxMT0Nf
TE9DSykgJiYgZGVmaW5lZCAoTkVFREVEKQotICAgIC8qIFdhaXQgZm9yIHNwaW4gbG9jayAqLwot
ICAgIHNsd2FpdCAoJmdfc2wpOwotI2VuZGlmCi0gICAgLyogRmlyc3QgdGltZSBpbml0aWFsaXph
dGlvbiAqLwotICAgIGlmICghIGdfcGFnZXNpemUpIAotICAgICAgICBnX3BhZ2VzaXplID0gZ2V0
cGFnZXNpemUgKCk7Ci0gICAgaWYgKCEgZ19yZWdpb25zaXplKSAKLSAgICAgICAgZ19yZWdpb25z
aXplID0gZ2V0cmVnaW9uc2l6ZSAoKTsKLSAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwot
ICAgIGFzc2VydCAoKHVuc2lnbmVkKSBwdHIgJSBnX3JlZ2lvbnNpemUgPT0gMCk7Ci0gICAgYXNz
ZXJ0IChzaXplICUgZ19wYWdlc2l6ZSA9PSAwKTsKLSAgICAvKiBGcmVlIHRoaXMgKi8KLSAgICBp
ZiAoISBWaXJ0dWFsRnJlZSAocHRyLCAwLCAKLSAgICAgICAgICAgICAgICAgICAgICAgTUVNX1JF
TEVBU0UpKQotICAgICAgICBnb3RvIG11bm1hcF9leGl0OwotICAgIHJjID0gMDsKLSNpZmRlZiBU
UkFDRQotICAgIHByaW50ZiAoIlJlbGVhc2UgJXAgJWRcbiIsIHB0ciwgc2l6ZSk7Ci0jZW5kaWYK
LW11bm1hcF9leGl0OgotI2lmIGRlZmluZWQgKFVTRV9NQUxMT0NfTE9DSykgJiYgZGVmaW5lZCAo
TkVFREVEKQotICAgIC8qIFJlbGVhc2Ugc3BpbiBsb2NrICovCi0gICAgc2xyZWxlYXNlICgmZ19z
bCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIHZtaW5mbyAoQ0hV
TktfU0laRV9UICAqZnJlZSwgQ0hVTktfU0laRV9UICAqcmVzZXJ2ZWQsIENIVU5LX1NJWkVfVCAg
KmNvbW1pdHRlZCkgewotICAgIE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiBtZW1vcnlfaW5mbzsK
LSAgICBtZW1vcnlfaW5mby5CYXNlQWRkcmVzcyA9IDA7Ci0gICAgKmZyZWUgPSAqcmVzZXJ2ZWQg
PSAqY29tbWl0dGVkID0gMDsKLSAgICB3aGlsZSAoVmlydHVhbFF1ZXJ5IChtZW1vcnlfaW5mby5C
YXNlQWRkcmVzcywgJm1lbW9yeV9pbmZvLCBzaXplb2YgKG1lbW9yeV9pbmZvKSkpIHsKLSAgICAg
ICAgc3dpdGNoIChtZW1vcnlfaW5mby5TdGF0ZSkgewotICAgICAgICBjYXNlIE1FTV9GUkVFOgot
ICAgICAgICAgICAgKmZyZWUgKz0gbWVtb3J5X2luZm8uUmVnaW9uU2l6ZTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIE1FTV9SRVNFUlZFOgotICAgICAgICAgICAgKnJlc2VydmVk
ICs9IG1lbW9yeV9pbmZvLlJlZ2lvblNpemU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBNRU1fQ09NTUlUOgotICAgICAgICAgICAgKmNvbW1pdHRlZCArPSBtZW1vcnlfaW5mby5S
ZWdpb25TaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtb3J5
X2luZm8uQmFzZUFkZHJlc3MgPSAoY2hhciAqKSBtZW1vcnlfaW5mby5CYXNlQWRkcmVzcyArIG1l
bW9yeV9pbmZvLlJlZ2lvblNpemU7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IGNwdWluZm8gKGlu
dCB3aG9sZSwgQ0hVTktfU0laRV9UICAqa2VybmVsLCBDSFVOS19TSVpFX1QgICp1c2VyKSB7Ci0g
ICAgaWYgKHdob2xlKSB7Ci0gICAgICAgIF9faW50NjQgY3JlYXRpb242NCwgZXhpdDY0LCBrZXJu
ZWw2NCwgdXNlcjY0OwotICAgICAgICBpbnQgcmMgPSBHZXRQcm9jZXNzVGltZXMgKEdldEN1cnJl
bnRQcm9jZXNzICgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRklMRVRJ
TUUgKikgJmNyZWF0aW9uNjQsICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
RklMRVRJTUUgKikgJmV4aXQ2NCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KEZJTEVUSU1FICopICZrZXJuZWw2NCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKEZJTEVUSU1FICopICZ1c2VyNjQpOwotICAgICAgICBpZiAoISByYykgewotICAgICAgICAg
ICAgKmtlcm5lbCA9IDA7Ci0gICAgICAgICAgICAqdXNlciA9IDA7Ci0gICAgICAgICAgICByZXR1
cm4gRkFMU0U7Ci0gICAgICAgIH0gCi0gICAgICAgICprZXJuZWwgPSAoQ0hVTktfU0laRV9UKSAo
a2VybmVsNjQgLyAxMDAwMCk7Ci0gICAgICAgICp1c2VyID0gKENIVU5LX1NJWkVfVCkgKHVzZXI2
NCAvIDEwMDAwKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
X19pbnQ2NCBjcmVhdGlvbjY0LCBleGl0NjQsIGtlcm5lbDY0LCB1c2VyNjQ7Ci0gICAgICAgIGlu
dCByYyA9IEdldFRocmVhZFRpbWVzIChHZXRDdXJyZW50VGhyZWFkICgpLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChGSUxFVElNRSAqKSAmY3JlYXRpb242NCwgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZJTEVUSU1FICopICZleGl0NjQsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZJTEVUSU1FICopICZrZXJuZWw2NCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRklMRVRJTUUgKikgJnVzZXI2NCk7Ci0gICAg
ICAgIGlmICghIHJjKSB7Ci0gICAgICAgICAgICAqa2VybmVsID0gMDsKLSAgICAgICAgICAgICp1
c2VyID0gMDsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfSAKLSAgICAgICAg
Kmtlcm5lbCA9IChDSFVOS19TSVpFX1QpIChrZXJuZWw2NCAvIDEwMDAwKTsKLSAgICAgICAgKnVz
ZXIgPSAoQ0hVTktfU0laRV9UKSAodXNlcjY0IC8gMTAwMDApOwotICAgICAgICByZXR1cm4gVFJV
RTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvKiBXSU4zMiAqLwotCi0jZW5kaWYgLy8gTkRFQlVHCi0K
LX0gIC8qIGVuZCBvZiBuYW1lc3BhY2UgS0pTICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSGlzdG9yeToKLSAgICBW
Mi43LjIgU2F0IEF1ZyAxNyAwOTowNzozMCAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKLSAg
ICAgICogRml4IG1hbGxvY19zdGF0ZSBiaXRtYXAgYXJyYXkgbWlzZGVjbGFyYXRpb24KLQotICAg
IFYyLjcuMSBUaHUgSnVsIDI1IDEwOjU4OjAzIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQot
ICAgICAgKiBBbGxvdyB0dW5pbmcgb2YgRklSU1RfU09SVEVEX0JJTl9TSVpFCi0gICAgICAqIFVz
ZSBQVFJfVUlOVCBhcyB0eXBlIGZvciBhbGwgcHRyLT5pbnQgY2FzdHMuIFRoYW5rcyB0byBKb2hu
IEJlbG1vbnRlLgotICAgICAgKiBCZXR0ZXIgZGV0ZWN0aW9uIGFuZCBzdXBwb3J0IGZvciBub24t
Y29udGlndW91c25lc3Mgb2YgTU9SRUNPUkUuIAotICAgICAgICBUaGFua3MgdG8gQW5kcmVhcyBN
dWVsbGVyLCBDb25hbCBXYWxzaCwgYW5kIFdvbGZyYW0gR2xvZ2VyCi0gICAgICAqIEJ5cGFzcyBt
b3N0IG9mIG1hbGxvYyBpZiBubyBmcmVlcy4gVGhhbmtzIFRvIEVtZXJ5IEJlcmdlci4KLSAgICAg
ICogRml4IGZyZWVpbmcgb2Ygb2xkIHRvcCBub24tY29udGlndW91cyBjaHVuayBpbSBzeXNtYWxs
b2MuCi0gICAgICAqIFJhaXNlZCBkZWZhdWx0IHRyaW0gYW5kIG1hcCB0aHJlc2hvbGRzIHRvIDI1
NksuCi0gICAgICAqIEZpeCBtbWFwLXJlbGF0ZWQgI2RlZmluZXMuIFRoYW5rcyB0byBMdWJvcyBM
dW5hay4KLSAgICAgICogRml4IGNvcHkgbWFjcm9zOyBhZGRlZCBMQUNLU19GQ05UTF9ILiBUaGFu
a3MgdG8gTmVhbCBXYWxmaWVsZC4KLSAgICAgICogQnJhbmNoLWZyZWUgYmluIGNhbGN1bGF0aW9u
Ci0gICAgICAqIERlZmF1bHQgdHJpbSBhbmQgbW1hcCB0aHJlc2hvbGRzIG5vdyAyNTZLLgotCi0g
ICAgVjIuNy4wIFN1biBNYXIgMTEgMTQ6MTQ6MDYgMjAwMSAgRG91ZyBMZWEgIChkbCBhdCBnZWUp
Ci0gICAgICAqIEludHJvZHVjZSBpbmRlcGVuZGVudF9jb21hbGxvYyBhbmQgaW5kZXBlbmRlbnRf
Y2FsbG9jLgotICAgICAgICBUaGFua3MgdG8gTWljaGFlbCBQYWNob3MgZm9yIG1vdGl2YXRpb24g
YW5kIGhlbHAuCi0gICAgICAqIE1ha2Ugb3B0aW9uYWwgLmggZmlsZSBhdmFpbGFibGUKLSAgICAg
ICogQWxsb3cgPiAyR0IgcmVxdWVzdHMgb24gMzJiaXQgc3lzdGVtcy4KLSAgICAgICogbmV3IFdJ
TjMyIHNicmssIG1tYXAsIG11bm1hcCwgbG9jayBjb2RlIGZyb20gPFdhbHRlckBHZU5lU3lzLWUu
ZGU+LgotICAgICAgICBUaGFua3MgYWxzbyB0byBBbmRyZWFzIE11ZWxsZXIgPGEubXVlbGxlciBh
dCBwYXJhZGF0ZWMuZGU+LAotICAgICAgICBhbmQgQW5vbnltb3VzLgotICAgICAgKiBBbGxvdyBv
dmVycmlkZSBvZiBNQUxMT0NfQUxJR05NRU5UIChUaGFua3MgdG8gUnV1ZCBXYWlqIGZvciAKLSAg
ICAgICAgaGVscGluZyB0ZXN0IHRoaXMuKQotICAgICAgKiBtZW1hbGlnbjogY2hlY2sgYWxpZ25t
ZW50IGFyZwotICAgICAgKiByZWFsbG9jOiBkb24ndCB0cnkgdG8gc2hpZnQgY2h1bmtzIGJhY2t3
YXJkcywgc2luY2UgdGhpcwotICAgICAgICBsZWFkcyB0byAgbW9yZSBmcmFnbWVudGF0aW9uIGlu
IHNvbWUgcHJvZ3JhbXMgYW5kIGRvZXNuJ3QKLSAgICAgICAgc2VlbSB0byBoZWxwIGluIGFueSBv
dGhlcnMuCi0gICAgICAqIENvbGxlY3QgYWxsIGNhc2VzIGluIG1hbGxvYyByZXF1aXJpbmcgc3lz
dGVtIG1lbW9yeSBpbnRvIHNZU01BTExPYwotICAgICAgKiBVc2UgbW1hcCBhcyBiYWNrdXAgdG8g
c2JyawotICAgICAgKiBQbGFjZSBhbGwgaW50ZXJuYWwgc3RhdGUgaW4gbWFsbG9jX3N0YXRlCi0g
ICAgICAqIEludHJvZHVjZSBmYXN0YmlucyAoYWx0aG91Z2ggc2ltaWxhciB0byAyLjUuMSkKLSAg
ICAgICogTWFueSBtaW5vciB0dW5pbmdzIGFuZCBjb3NtZXRpYyBpbXByb3ZlbWVudHMKLSAgICAg
ICogSW50cm9kdWNlIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTLCBVU0VfTUFMTE9DX0xPQ0sg
Ci0gICAgICAqIEludHJvZHVjZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04sIE1PUkVDT1JFX0NPTlRJ
R1VPVVMKLSAgICAgICAgVGhhbmtzIHRvIFRvbnkgRS4gQmVubmV0dCA8dGJlbm5ldHRAbnZpZGlh
LmNvbT4gYW5kIG90aGVycy4KLSAgICAgICogSW5jbHVkZSBlcnJuby5oIHRvIHN1cHBvcnQgZGVm
YXVsdCBmYWlsdXJlIGFjdGlvbi4KLQotICAgIFYyLjYuNiBTdW4gRGVjICA1IDA3OjQyOjE5IDE5
OTkgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQotICAgICAgKiByZXR1cm4gbnVsbCBmb3IgbmVnYXRp
dmUgYXJndW1lbnRzCi0gICAgICAqIEFkZGVkIFNldmVyYWwgV0lOMzIgY2xlYW51cHMgZnJvbSBN
YXJ0aW4gQy4gRm9uZyA8bWNmb25nIGF0IHlhaG9vLmNvbT4KLSAgICAgICAgICogQWRkICdMQUNL
U19TWVNfUEFSQU1fSCcgZm9yIHRob3NlIHN5c3RlbXMgd2l0aG91dCAnc3lzL3BhcmFtLmgnCi0g
ICAgICAgICAgKGUuZy4gV0lOMzIgcGxhdGZvcm1zKQotICAgICAgICAgKiBDbGVhbnVwIGhlYWRl
ciBmaWxlIGluY2x1c2lvbiBmb3IgV0lOMzIgcGxhdGZvcm1zCi0gICAgICAgICAqIENsZWFudXAg
Y29kZSB0byBhdm9pZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlciBjb21wbGFpbnRzCi0g
ICAgICAgICAqIEFkZCAnVVNFX0RMX1BSRUZJWCcgdG8gcXVpY2tseSBhbGxvdyBjby1leGlzdGVu
Y2Ugd2l0aCBleGlzdGluZwotICAgICAgICAgICBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcwot
ICAgICAgICAgKiBTZXQgJ21hbGxvY19nZXRwYWdlc2l6ZScgZm9yIFdJTjMyIHBsYXRmb3JtcyAo
bmVlZHMgbW9yZSB3b3JrKQotICAgICAgICAgKiBVc2UgJ2Fzc2VydCcgcmF0aGVyIHRoYW4gJ0FT
U0VSVCcgaW4gV0lOMzIgY29kZSB0byBjb25mb3JtIHRvCi0gICAgICAgICAgIHVzYWdlIG9mICdh
c3NlcnQnIGluIG5vbi1XSU4zMiBjb2RlCi0gICAgICAgICAqIEltcHJvdmUgV0lOMzIgJ3Nicmso
KScgZW11bGF0aW9uJ3MgJ2ZpbmRSZWdpb24oKScgcm91dGluZSB0bwotICAgICAgICAgICBhdm9p
ZCBpbmZpbml0ZSBsb29wCi0gICAgICAqIEFsd2F5cyBjYWxsICdmUkVlKCknIHJhdGhlciB0aGFu
ICdmcmVlKCknCi0KLSAgICBWMi42LjUgV2VkIEp1biAxNyAxNTo1NzozMSAxOTk4ICBEb3VnIExl
YSAgKGRsIGF0IGdlZSkKLSAgICAgICogRml4ZWQgb3JkZXJpbmcgcHJvYmxlbSB3aXRoIGJvdW5k
YXJ5LXN0YW1waW5nCi0KLSAgICBWMi42LjMgU3VuIE1heSAxOSAwODoxNzo1OCAxOTk2ICBEb3Vn
IExlYSAgKGRsIGF0IGdlZSkKLSAgICAgICogQWRkZWQgcHZhbGxvYywgYXMgcmVjb21tZW5kZWQg
YnkgSC5KLiBMaXUKLSAgICAgICogQWRkZWQgNjRiaXQgcG9pbnRlciBzdXBwb3J0IG1haW5seSBm
cm9tIFdvbGZyYW0gR2xvZ2VyCi0gICAgICAqIEFkZGVkIGFub255bW91c2x5IGRvbmF0ZWQgV0lO
MzIgc2JyayBlbXVsYXRpb24KLSAgICAgICogTWFsbG9jLCBjYWxsb2MsIGdldHBhZ2VzaXplOiBh
ZGQgb3B0aW1pemF0aW9ucyBmcm9tIFJheW1vbmQgTmlqc3NlbgotICAgICAgKiBtYWxsb2NfZXh0
ZW5kX3RvcDogZml4IG1hc2sgZXJyb3IgdGhhdCBjYXVzZWQgd2FzdGFnZSBhZnRlcgotICAgICAg
ICBmb3JlaWduIHNicmtzCi0gICAgICAqIEFkZCBsaW51eCBtcmVtYXAgc3VwcG9ydCBjb2RlIGZy
b20gSEogTGl1Ci0KLSAgICBWMi42LjIgVHVlIERlYyAgNSAwNjo1Mjo1NSAxOTk1ICBEb3VnIExl
YSAgKGRsIGF0IGdlZSkKLSAgICAgICogSW50ZWdyYXRlZCBtb3N0IGRvY3VtZW50YXRpb24gd2l0
aCB0aGUgY29kZS4KLSAgICAgICogQWRkIHN1cHBvcnQgZm9yIG1tYXAsIHdpdGggaGVscCBmcm9t
Ci0gICAgICAgIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuCi0g
ICAgICAqIFVzZSBsYXN0X3JlbWFpbmRlciBpbiBtb3JlIGNhc2VzLgotICAgICAgKiBQYWNrIGJp
bnMgdXNpbmcgaWRlYSBmcm9tICBjb2xpbkBueXgxMC5jcy5kdS5lZHUKLSAgICAgICogVXNlIG9y
ZGVyZWQgYmlucyBpbnN0ZWFkIG9mIGJlc3QtZml0IHRocmVzaGhvbGQKLSAgICAgICogRWxpbWlu
YXRlIGJsb2NrLWxvY2FsIGRlY2xzIHRvIHNpbXBsaWZ5IHRyYWNpbmcgYW5kIGRlYnVnZ2luZy4K
LSAgICAgICogU3VwcG9ydCBhbm90aGVyIGNhc2Ugb2YgcmVhbGxvYyB2aWEgbW92ZSBpbnRvIHRv
cAotICAgICAgKiBGaXggZXJyb3Igb2NjdXJpbmcgd2hlbiBpbml0aWFsIHNicmtfYmFzZSBub3Qg
d29yZC1hbGlnbmVkLgotICAgICAgKiBSZWx5IG9uIHBhZ2Ugc2l6ZSBmb3IgdW5pdHMgaW5zdGVh
ZCBvZiBTQlJLX1VOSVQgdG8KLSAgICAgICAgYXZvaWQgc3VycHJpc2VzIGFib3V0IHNicmsgYWxp
Z25tZW50IGNvbnZlbnRpb25zLgotICAgICAgKiBBZGQgbWFsbGluZm8sIG1hbGxvcHQuIFRoYW5r
cyB0byBSYXltb25kIE5panNzZW4KLSAgICAgICAgKHJheW1vbmRAZXMuZWxlLnR1ZS5ubCkgZm9y
IHRoZSBzdWdnZXN0aW9uLgotICAgICAgKiBBZGQgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9jX3Ry
aW0gYW5kIHRvcF9wYWQgbWFsbG9wdCBwYXJhbWV0ZXIuCi0gICAgICAqIE1vcmUgcHJlY2F1dGlv
bnMgZm9yIGNhc2VzIHdoZXJlIG90aGVyIHJvdXRpbmVzIGNhbGwgc2JyaywKLSAgICAgICAgY291
cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KLSAg
ICAgICogQWRkZWQgbWFjcm9zIGV0Yy4sIGFsbG93aW5nIHVzZSBpbiBsaW51eCBsaWJjIGZyb20K
LSAgICAgICAgSC5KLiBMdSAoaGpsQGdudS5haS5taXQuZWR1KQotICAgICAgKiBJbnZlcnRlZCB0
aGlzIGhpc3RvcnkgbGlzdAotCi0gICAgVjIuNi4xIFNhdCBEZWMgIDIgMTQ6MTA6NTcgMTk5NSAg
RG91ZyBMZWEgIChkbCBhdCBnZWUpCi0gICAgICAqIFJlLXR1bmVkIGFuZCBmaXhlZCB0byBiZWhh
dmUgbW9yZSBuaWNlbHkgd2l0aCBWMi42LjAgY2hhbmdlcy4KLSAgICAgICogUmVtb3ZlZCBhbGwg
cHJlYWxsb2NhdGlvbiBjb2RlIHNpbmNlIHVuZGVyIGN1cnJlbnQgc2NoZW1lCi0gICAgICAgIHRo
ZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMKLSAgICAg
ICAgdGhlIHdvcmsgc2F2ZWQgaW4gZ29vZCBjYXNlcyBmb3IgbW9zdCB0ZXN0IHByb2dyYW1zLgot
ICAgICAgKiBObyBsb25nZXIgdXNlIHJldHVybiBsaXN0IG9yIHVuY29uc29saWRhdGVkIGJpbnMg
c2luY2UKLSAgICAgICAgbm8gc2NoZW1lIHVzaW5nIHRoZW0gY29uc2lzdGVudGx5IG91dHBlcmZv
cm1zIHRob3NlIHRoYXQgZG9uJ3QKLSAgICAgICAgZ2l2ZW4gYWJvdmUgY2hhbmdlcy4KLSAgICAg
ICogVXNlIGJlc3QgZml0IGZvciB2ZXJ5IGxhcmdlIGNodW5rcyB0byBwcmV2ZW50IHNvbWUgd29y
c3QtY2FzZXMuCi0gICAgICAqIEFkZGVkIHNvbWUgc3VwcG9ydCBmb3IgZGVidWdnaW5nCi0KLSAg
ICBWMi42LjAgU2F0IE5vdiAgNCAwNzowNToyMyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkK
LSAgICAgICogUmVtb3ZlZCBmb290ZXJzIHdoZW4gY2h1bmtzIGFyZSBpbiB1c2UuIFRoYW5rcyB0
bwotICAgICAgICBQYXVsIFdpbHNvbiAod2lsc29uQGNzLnRleGFzLmVkdSkgZm9yIHRoZSBzdWdn
ZXN0aW9uLgotCi0gICAgVjIuNS40IFdlZCBOb3YgIDEgMDc6NTQ6NTEgMTk5NSAgRG91ZyBMZWEg
IChkbCBhdCBnZWUpCi0gICAgICAqIEFkZGVkIG1hbGxvY190cmltLCB3aXRoIGhlbHAgZnJvbSBX
b2xmcmFtIEdsb2dlcgotICAgICAgICAod21nbG9ARGVudC5NRUQuVW5pLU11ZW5jaGVuLkRFKS4K
LQotICAgIFYyLjUuMyBUdWUgQXByIDI2IDEwOjE2OjAxIDE5OTQgIERvdWcgTGVhICAoZGwgYXQg
ZykKLQotICAgIFYyLjUuMiBUdWUgQXByICA1IDE2OjIwOjQwIDE5OTQgIERvdWcgTGVhICAoZGwg
YXQgZykKLSAgICAgICogcmVhbGxvYzogdHJ5IHRvIGV4cGFuZCBpbiBib3RoIGRpcmVjdGlvbnMK
LSAgICAgICogbWFsbG9jOiBzd2FwIG9yZGVyIG9mIGNsZWFuLWJpbiBzdHJhdGVneTsKLSAgICAg
ICogcmVhbGxvYzogb25seSBjb25kaXRpb25hbGx5IGV4cGFuZCBiYWNrd2FyZHMKLSAgICAgICog
VHJ5IG5vdCB0byBzY2F2ZW5nZSB1c2VkIGJpbnMKLSAgICAgICogVXNlIGJpbiBjb3VudHMgYXMg
YSBndWlkZSB0byBwcmVhbGxvY2F0aW9uCi0gICAgICAqIE9jY2FzaW9uYWxseSBiaW4gcmV0dXJu
IGxpc3QgY2h1bmtzIGluIGZpcnN0IHNjYW4KLSAgICAgICogQWRkIGEgZmV3IG9wdGltaXphdGlv
bnMgZnJvbSBjb2xpbkBueXgxMC5jcy5kdS5lZHUKLQotICAgIFYyLjUuMSBTYXQgQXVnIDE0IDE1
OjQwOjQzIDE5OTMgIERvdWcgTGVhICAoZGwgYXQgZykKLSAgICAgICogZmFzdGVyIGJpbiBjb21w
dXRhdGlvbiAmIHNsaWdodGx5IGRpZmZlcmVudCBiaW5uaW5nCi0gICAgICAqIG1lcmdlZCBhbGwg
Y29uc29saWRhdGlvbnMgdG8gb25lIHBhcnQgb2YgbWFsbG9jIHByb3BlcgotICAgICAgICAgKGVs
aW1pbmF0aW5nIG9sZCBtYWxsb2NfZmluZF9zcGFjZSAmIG1hbGxvY19jbGVhbl9iaW4pCi0gICAg
ICAqIFNjYW4gMiByZXR1cm5zIGNodW5rcyAobm90IGp1c3QgMSkKLSAgICAgICogUHJvcGFnYXRl
IGZhaWx1cmUgaW4gcmVhbGxvYyBpZiBtYWxsb2MgcmV0dXJucyAwCi0gICAgICAqIEFkZCBzdHVm
ZiB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBub24tQU5TSSBjb21waWxlcnMKLSAgICAgICAgICBm
cm9tIGtwdkByZXNlYXJjaC5hdHQuY29tCi0KLSAgICBWMi41IFNhdCBBdWcgIDcgMDc6NDE6NTkg
MTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCi0gICAgICAqIHJlbW92ZWQgcG90
ZW50aWFsIGZvciBvZGQgYWRkcmVzcyBhY2Nlc3MgaW4gcHJldl9jaHVuawotICAgICAgKiByZW1v
dmVkIGRlcGVuZGVuY3kgb24gZ2V0cGFnZXNpemUuaAotICAgICAgKiBtaXNjIGNvc21ldGljcyBh
bmQgYSBiaXQgbW9yZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uCi0gICAgICAqIGFudGljb3NtZXRp
Y3M6IG1hbmdsZWQgbmFtZXMgaW4gbWFjcm9zIHRvIGV2YWRlIGRlYnVnZ2VyIHN0cmFuZ2VuZXNz
Ci0gICAgICAqIHRlc3RlZCBvbiBzcGFyYywgaHAtNzAwLCBkZWMtbWlwcywgcnM2MDAwCi0gICAg
ICAgICAgd2l0aCBnY2MgJiBuYXRpdmUgY2MgKGhwLCBkZWMgb25seSkgYWxsb3dpbmcKLSAgICAg
ICAgICBEZXRsZWZzICYgWm9ybiBjb21wYXJpc29uIHN0dWR5IChpbiBTSUdQTEFOIE5vdGljZXMu
KQotCi0gICAgVHJpYWwgdmVyc2lvbiBGcmkgQXVnIDI4IDEzOjE0OjI5IDE5OTIgIERvdWcgTGVh
ICAoZGwgYXQgZy5vc3dlZ28uZWR1KQotICAgICAgKiBCYXNlZCBsb29zZWx5IG9uIGxpYmcrKy0x
LjJYIG1hbGxvYy4gKEl0IHJldGFpbnMgc29tZSBvZiB0aGUgb3ZlcmFsbAotICAgICAgICAgc3Ry
dWN0dXJlIG9mIG9sZCB2ZXJzaW9uLCAgYnV0IG1vc3QgZGV0YWlscyBkaWZmZXIuKQotCi0qLwpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Zhc3RfbWFsbG9jLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZToga2pzL2Zhc3RfbWFsbG9jLmgKZGlmZiAtTiBKYXZhU2NyaXB0Q29yZS9ranMvZmFzdF9tYWxs
b2MuaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Zhc3RfbWFsbG9jLmgJMTcgQXVnIDIwMDUgMDE6
MDA6MDAgLTAwMDAJMS4yCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZmFzdF9tYWxsb2MuaAkxIEph
biAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqICBCb3N0b24sIE1B
IDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBLSlNfRkFTVF9NQUxMT0NfSAot
I2RlZmluZSBLSlNfRkFTVF9NQUxMT0NfSAotCi0vLyBUaGlzIGlzIGEgY29weSBvZiBkbG1hbGxv
YywgYSBmYXN0IHNpbmdsZS10aHJlYWRlZCBtYWxsb2MgaW1wbGVtZW50YXRpb24uCi0vLyBKYXZh
U2NyaXB0Q29yZSBpcyBtdWx0aS10aHJlYWRlZCwgYnV0IGNlcnRhaW4gYWN0aW9ucyBjYW4gb25s
eSB0YWtlIHBsYWNlIHVuZGVyCi0vLyB0aGUgZ2xvYmFsIGNvbGxlY3RvciBsb2NrLiBUaGVyZWZv
cmUsIHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgb25seSBiZSB1c2VkCi0vLyB3aGlsZSBob2xkaW5n
IHRoZSBjb2xsZWN0b3IgbG9jayAodGhpcyBpcyB0cnVlIHdoZW5lbmV2ZXIgdGhlIGludGVycHJl
dGVyIGlzCi0vLyBleGVjdXRpbmcgb3IgR0MgaXMgdGFraW5nIHBsYWNlKS4KLQotI2luY2x1ZGUg
PHN0ZGxpYi5oPgotCi1uYW1lc3BhY2UgS0pTIHsKLQotdm9pZCAqa2pzX2Zhc3RfbWFsbG9jKHNp
emVfdCBuKTsKLXZvaWQgKmtqc19mYXN0X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90
IGVsZW1lbnRfc2l6ZSk7Ci12b2lkIGtqc19mYXN0X2ZyZWUodm9pZCogcCk7Ci12b2lkICpranNf
ZmFzdF9yZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBuKTsKLQotfQotCi0jZGVmaW5lIEtKU19GQVNU
X0FMTE9DQVRFRCBcCi12b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHMpIHsgcmV0dXJuIEtKUzo6
a2pzX2Zhc3RfbWFsbG9jKHMpOyB9IFwKLXZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHApIHsg
S0pTOjpranNfZmFzdF9mcmVlKHApOyB9Ci0KLSNlbmRpZiAvKiBLSlNfRkFTVF9NQUxMT0NfSCAq
LwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS41OApkaWZmIC1wIC11IC1yMS41OCBKYXZhU2NyaXB0Q29yZS9ranMvZnVu
Y3Rpb24uY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCTQgU2VwIDIwMDUg
MDY6MjE6NTQgLTAwMDAJMS41OAorKysgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAky
NyBTZXAgMjAwNSAwNzoxNjo0NiAtMDAwMApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIm9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJkZWJ1Z2dlci5oIgogI2luY2x1ZGUgImNvbnRleHQuaCIK
LSNpbmNsdWRlICJzaGFyZWRfcHRyLmgiCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUg
PGVycm5vLmg+CkBAIC00Miw4ICs0MSw2IEBACiAKICNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+
CiAKLXVzaW5nIG5hbWVzcGFjZSBLWE1MQ29yZTsKLQogbmFtZXNwYWNlIEtKUyB7CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uSW1wIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24u
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNApkaWZmIC1wIC11IC1yMS4zNCBKYXZhU2NyaXB0
Q29yZS9ranMvZnVuY3Rpb24uaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgJNCBT
ZXAgMjAwNSAwMToxODoxMSAtMDAwMAkxLjM0CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rp
b24uaAkyNyBTZXAgMjAwNSAwNzoxNjo0NiAtMDAwMApAQCAtODEsNyArODEsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKIAogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSAqZXhl
Yyk7CiAgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBGdW5jdGlvbkNvZGU7
IH0KLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHk7CisgICAg
U2hhcmVkUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IENs
YXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIGluZm87CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb25f
b2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUv
a2pzL2Z1bmN0aW9uX29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAt
cCAtdSAtcjEuMzEgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5jcHAKLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuY3BwCTMwIEF1ZyAyMDA1IDIzOjU2OjE0
IC0wMDAwCTEuMzEKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuY3BwCTI3
IFNlcCAyMDA1IDA3OjE2OjQ2IC0wMDAwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8c3Ry
aW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBLSlM7Ci11c2luZyBuYW1lc3BhY2UgS1hNTENvcmU7
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvblByb3RvdHlwZUlt
cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9p
ZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENv
cmUva2pzL2lkZW50aWZpZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXAg
LXUgLXIxLjE5IEphdmFTY3JpcHRDb3JlL2tqcy9pZGVudGlmaWVyLmNwcAotLS0gSmF2YVNjcmlw
dENvcmUva2pzL2lkZW50aWZpZXIuY3BwCTQgU2VwIDIwMDUgMjE6Mzg6MzIgLTAwMDAJMS4xOQor
KysgSmF2YVNjcmlwdENvcmUva2pzL2lkZW50aWZpZXIuY3BwCTI3IFNlcCAyMDA1IDA3OjE2OjQ2
IC0wMDAwCkBAIC0zNSw3ICszNSw3IEBACiAKICNpbmNsdWRlICJpZGVudGlmaWVyLmgiCiAKLSNp
bmNsdWRlICJmYXN0X21hbGxvYy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2MuaD4K
ICNpbmNsdWRlIDxzdHJpbmcuaD4gLy8gZm9yIHN0cmxlbgogI2luY2x1ZGUgPG5ldz4gLy8gZm9y
IHBsYWNlbWVudCBuZXcKIApAQCAtMTI2LDcgKzEyNiw3IEBAIFVTdHJpbmc6OlJlcCAqSWRlbnRp
Zmllcjo6YWRkKGNvbnN0IGNoYXIKICAgICAgICAgaSA9IChpICsgMSkgJiBfdGFibGVTaXplTWFz
azsKICAgICB9CiAgICAgCi0gICAgVUNoYXIgKmQgPSBzdGF0aWNfY2FzdDxVQ2hhciAqPihranNf
ZmFzdF9tYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIGxlbmd0aCkpOworICAgIFVDaGFyICpkID0gc3Rh
dGljX2Nhc3Q8VUNoYXIgKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbGVuZ3RoKSk7CiAg
ICAgZm9yIChpbnQgaiA9IDA7IGogIT0gbGVuZ3RoOyBqKyspCiAgICAgICAgIGRbal0gPSBjW2pd
OwogICAgIApAQCAtMTY1LDcgKzE2NSw3IEBAIFVTdHJpbmc6OlJlcCAqSWRlbnRpZmllcjo6YWRk
KGNvbnN0IFVDaGEKICAgICAgICAgaSA9IChpICsgMSkgJiBfdGFibGVTaXplTWFzazsKICAgICB9
CiAgICAgCi0gICAgVUNoYXIgKmQgPSBzdGF0aWNfY2FzdDxVQ2hhciAqPihranNfZmFzdF9tYWxs
b2Moc2l6ZW9mKFVDaGFyKSAqIGxlbmd0aCkpOworICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8
VUNoYXIgKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbGVuZ3RoKSk7CiAgICAgZm9yIChp
bnQgaiA9IDA7IGogIT0gbGVuZ3RoOyBqKyspCiAgICAgICAgIGRbal0gPSBzW2pdOwogICAgIApJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS43MgpkaWZmIC1wIC11IC1yMS43MiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJu
YWwuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwCTIxIFNlcCAyMDA1IDAx
OjEwOjU0IC0wMDAwCTEuNzIKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAJMjcg
U2VwIDIwMDUgMDc6MTY6NDcgLTAwMDAKQEAgLTUyLDggKzUyLDYgQEAKIAogZXh0ZXJuIGludCBr
anN5eXBhcnNlKCk7CiAKLXVzaW5nIG5hbWVzcGFjZSBLWE1MQ29yZTsKLQogbmFtZXNwYWNlIEtK
UyB7CiAKICNpZiAhQVBQTEVfQ0hBTkdFUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVy
bmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9p
bnRlcm5hbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQwCmRpZmYgLXAgLXUgLXIxLjQwIEph
dmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJu
YWwuaAkxOSBTZXAgMjAwNSAwNjo1NzoyNyAtMDAwMAkxLjQwCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvaW50ZXJuYWwuaAkyNyBTZXAgMjAwNSAwNzoxNjo0NyAtMDAwMApAQCAtMzIsNyArMzIsNyBA
QAogI2luY2x1ZGUgInR5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJzY29wZV9jaGFpbi5oIgotI2luY2x1ZGUgInNoYXJlZF9wdHIuaCIKKyNpbmNsdWRlIDxreG1s
Y29yZS9TaGFyZWRQdHIuaD4KIAogI2lmICFXSU4zMgogI2RlZmluZSBLSlNfTVVMVElQTEVfVEhS
RUFEUyAxCkBAIC0yMDIsOSArMjAyLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAqLwogICBjbGFz
cyBQYXJzZXIgewogICBwdWJsaWM6Ci0gICAgc3RhdGljIEtYTUxDb3JlOjpTaGFyZWRQdHI8UHJv
Z3JhbU5vZGU+IHBhcnNlKGNvbnN0IFVTdHJpbmcgJnNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGlu
ZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVUNoYXIgKmNvZGUsIHVuc2lnbmVkIGludCBsZW5ndGgsIGludCAqc291cmNlSWQg
PSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgKmVyckxpbmUgPSAwLCBVU3RyaW5nICplcnJNc2cgPSAwKTsKKyAgICBzdGF0aWMgU2hhcmVk
UHRyPFByb2dyYW1Ob2RlPiBwYXJzZShjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBzdGFy
dGluZ0xpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVUNoYXIgKmNvZGUsIHVuc2lnbmVkIGludCBsZW5ndGgsIGludCAqc291cmNlSWQgPSAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZXJyTGluZSA9
IDAsIFVTdHJpbmcgKmVyck1zZyA9IDApOwogICAgIHN0YXRpYyB2b2lkIGFjY2VwdChQcm9ncmFt
Tm9kZSAqcHJvZyk7CiAKICAgICBzdGF0aWMgdm9pZCBzYXZlTmV3Tm9kZShOb2RlICpub2RlKTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4zNQpkaWZmIC1wIC11IC1yMS4zNSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAotLS0gSmF2
YVNjcmlwdENvcmUva2pzL25vZGVzLmgJMjQgU2VwIDIwMDUgMjI6MzQ6MTMgLTAwMDAJMS4zNQor
KysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgJMjcgU2VwIDIwMDUgMDc6MTY6NDcgLTAwMDAK
QEAgLTI1LDggKzI1LDggQEAKICNpZm5kZWYgX05PREVTX0hfCiAjZGVmaW5lIF9OT0RFU19IXwog
Ci0jaW5jbHVkZSAiZmFzdF9tYWxsb2MuaCIKLSNpbmNsdWRlICJzaGFyZWRfcHRyLmgiCisjaW5j
bHVkZSA8a3htbGNvcmUvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1NoYXJlZFB0
ci5oPgogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIC8vI2luY2x1ZGUgImRlYnVnZ2VyLmgiCkBA
IC03NywxMyArNzcsMTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAJCSAgT3BJbnN0YW5jZU9mCiAgIH07
CiAKLSAgY2xhc3MgTm9kZSB7CisgIGNsYXNzIE5vZGUgOiBwdWJsaWMgRmFzdEFsbG9jYXRlZCB7
CiAgIHB1YmxpYzoKICAgICBOb2RlKCk7CiAgICAgdmlydHVhbCB+Tm9kZSgpOwogCi0gICAgS0pT
X0ZBU1RfQUxMT0NBVEVEOwotCiAgICAgdmlydHVhbCBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKSA9IDA7CiAgICAgVVN0cmluZyB0b1N0cmluZygpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0ID0gMDsKQEAgLTIyNSw3ICsy
MjMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB9CiAgICAgICAgIAogICBwcml2YXRlOgotICAg
IEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gZ3JvdXA7CisgICAgU2hhcmVkUHRyPE5vZGU+IGdy
b3VwOwogICB9OwogCiAgIGNsYXNzIEVsZW1lbnROb2RlIDogcHVibGljIE5vZGUgewpAQCAtMjM4
LDkgKzIzNiw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBcnJh
eU5vZGU7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxFbGVtZW50Tm9kZT4gbGlzdDsKKyAgICBT
aGFyZWRQdHI8RWxlbWVudE5vZGU+IGxpc3Q7CiAgICAgaW50IGVsaXNpb247Ci0gICAgS1hNTENv
cmU6OlNoYXJlZFB0cjxOb2RlPiBub2RlOworICAgIFNoYXJlZFB0cjxOb2RlPiBub2RlOwogICB9
OwogCiAgIGNsYXNzIEFycmF5Tm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTI1Myw3ICsyNTEsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAg
cHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPEVsZW1lbnROb2RlPiBlbGVtZW50Owor
ICAgIFNoYXJlZFB0cjxFbGVtZW50Tm9kZT4gZWxlbWVudDsKICAgICBpbnQgZWxpc2lvbjsKICAg
ICBib29sIG9wdDsKICAgfTsKQEAgLTI2OSw5ICsyNjcsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgT2JqZWN0TGl0ZXJhbE5vZGU7Ci0gICAgS1hNTENvcmU6OlNo
YXJlZFB0cjxQcm9wZXJ0eU5vZGU+IG5hbWU7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2Rl
PiBhc3NpZ247Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxQcm9wZXJ0eVZhbHVlTm9kZT4gbGlz
dDsKKyAgICBTaGFyZWRQdHI8UHJvcGVydHlOb2RlPiBuYW1lOworICAgIFNoYXJlZFB0cjxOb2Rl
PiBhc3NpZ247CisgICAgU2hhcmVkUHRyPFByb3BlcnR5VmFsdWVOb2RlPiBsaXN0OwogICB9Owog
CiAgIGNsYXNzIE9iamVjdExpdGVyYWxOb2RlIDogcHVibGljIE5vZGUgewpAQCAtMjgxLDcgKzI3
OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0
OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8UHJvcGVydHlWYWx1ZU5vZGU+
IGxpc3Q7CisgICAgU2hhcmVkUHRyPFByb3BlcnR5VmFsdWVOb2RlPiBsaXN0OwogICB9OwogCiAg
IGNsYXNzIFByb3BlcnR5Tm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTMwNyw4ICszMDUsOCBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICBOb2RlICpzdWJzY3JpcHQoKSB7IHJldHVybiBleHByMi5nZXQo
KTsgfQogCiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByMTsK
LSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHIyOworICAgIFNoYXJlZFB0cjxOb2Rl
PiBleHByMTsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjI7CiAgIH07CiAKICAgY2xhc3MgRG90
QWNjZXNzb3JOb2RlIDogcHVibGljIE5vZGUgewpAQCAtMzIzLDcgKzMyMSw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVy
biBpZGVudDsgfQogCiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBl
eHByOworICAgIFNoYXJlZFB0cjxOb2RlPiBleHByOwogICAgIElkZW50aWZpZXIgaWRlbnQ7CiAg
IH07CiAKQEAgLTMzOCw4ICszMzYsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgQXJndW1lbnRzTm9kZTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPEFyZ3VtZW50
TGlzdE5vZGU+IGxpc3Q7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByOworICAg
IFNoYXJlZFB0cjxBcmd1bWVudExpc3ROb2RlPiBsaXN0OworICAgIFNoYXJlZFB0cjxOb2RlPiBl
eHByOwogICB9OwogCiAgIGNsYXNzIEFyZ3VtZW50c05vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC0z
NTEsNyArMzQ5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgTGlzdCBldmFsdWF0ZUxpc3QoRXhl
Y1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZz
KSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPEFyZ3VtZW50TGlz
dE5vZGU+IGxpc3Q7CisgICAgU2hhcmVkUHRyPEFyZ3VtZW50TGlzdE5vZGU+IGxpc3Q7CiAgIH07
CiAKICAgY2xhc3MgTmV3RXhwck5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC0zNjEsOCArMzU5LDgg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhl
Yyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAg
IHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByOwotICAgIEtYTUxD
b3JlOjpTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKKyAgICBTaGFyZWRQdHI8Tm9kZT4g
ZXhwcjsKKyAgICBTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKICAgfTsKIAogICBjbGFz
cyBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC0zNzEsOCArMzY5LDgg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhl
Yyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAg
IHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByOwotICAgIEtYTUxD
b3JlOjpTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKKyAgICBTaGFyZWRQdHI8Tm9kZT4g
ZXhwcjsKKyAgICBTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKICAgfTsKIAogICBjbGFz
cyBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTM4Miw3ICszODAs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBJZGVudGlmaWVyIGlkZW50OwotICAgIEtY
TUxDb3JlOjpTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKKyAgICBTaGFyZWRQdHI8QXJn
dW1lbnRzTm9kZT4gYXJnczsKICAgfTsKIAogICBjbGFzcyBGdW5jdGlvbkNhbGxCcmFja2V0Tm9k
ZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTM5MSw5ICszODksOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJvdGVjdGVkOgotICAgIEtYTUxD
b3JlOjpTaGFyZWRQdHI8Tm9kZT4gYmFzZTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+
IHN1YnNjcmlwdDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPEFyZ3VtZW50c05vZGU+IGFyZ3M7
CisgICAgU2hhcmVkUHRyPE5vZGU+IGJhc2U7CisgICAgU2hhcmVkUHRyPE5vZGU+IHN1YnNjcmlw
dDsKKyAgICBTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKICAgfTsKIAogICBjbGFzcyBG
dW5jdGlvbkNhbGxQYXJlbkJyYWNrZXROb2RlIDogcHVibGljIEZ1bmN0aW9uQ2FsbEJyYWNrZXRO
b2RlIHsKQEAgLTQwOCw5ICs0MDYsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAq
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJvdGVjdGVkOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQ
dHI8Tm9kZT4gYmFzZTsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gYmFzZTsKICAgICBJZGVudGlmaWVy
IGlkZW50OwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKKyAg
ICBTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKICAgfTsKIAogICBjbGFzcyBGdW5jdGlv
bkNhbGxQYXJlbkRvdE5vZGUgOiBwdWJsaWMgRnVuY3Rpb25DYWxsRG90Tm9kZSB7CkBAIC00MzUs
OCArNDMzLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykg
Y29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBtX2Jhc2U7
Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBtX3N1YnNjcmlwdDsKKyAgICBTaGFyZWRQ
dHI8Tm9kZT4gbV9iYXNlOworICAgIFNoYXJlZFB0cjxOb2RlPiBtX3N1YnNjcmlwdDsKICAgICBP
cGVyYXRvciBtX29wZXI7CiAgIH07CiAKQEAgLTQ0Niw3ICs0NDQsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBL
WE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IG1fYmFzZTsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gbV9i
YXNlOwogICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICBPcGVyYXRvciBtX29wZXI7CiAgIH07
CkBAIC00NjYsOCArNDY0LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2Rl
PiBtX2Jhc2U7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBtX3N1YnNjcmlwdDsKKyAg
ICBTaGFyZWRQdHI8Tm9kZT4gbV9iYXNlOworICAgIFNoYXJlZFB0cjxOb2RlPiBtX3N1YnNjcmlw
dDsKICAgfTsKIAogICBjbGFzcyBEZWxldGVEb3ROb2RlIDogcHVibGljIE5vZGUgewpAQCAtNDc2
LDcgKzQ3NCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVj
U3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMp
IGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gbV9iYXNl
OworICAgIFNoYXJlZFB0cjxOb2RlPiBtX2Jhc2U7CiAgICAgSWRlbnRpZmllciBtX2lkZW50Owog
ICB9OwogCkBAIC00ODYsNyArNDg0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAg
KmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0
cjxOb2RlPiBtX2V4cHI7CisgICAgU2hhcmVkUHRyPE5vZGU+IG1fZXhwcjsKICAgfTsKIAogICBj
bGFzcyBWb2lkTm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTQ5NSw3ICs0OTMsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToK
LSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHI7CisgICAgU2hhcmVkUHRyPE5vZGU+
IGV4cHI7CiAgIH07CiAKICAgY2xhc3MgVHlwZU9mUmVzb2x2ZU5vZGUgOiBwdWJsaWMgTm9kZSB7
CkBAIC01MTMsNyArNTExLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2Rl
PiBtX2V4cHI7CisgICAgU2hhcmVkUHRyPE5vZGU+IG1fZXhwcjsKICAgfTsKIAogICBjbGFzcyBQ
cmVmaXhSZXNvbHZlTm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTUzMiw4ICs1MzAsOCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0
ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IG1fYmFzZTsKLSAgICBLWE1MQ29yZTo6
U2hhcmVkUHRyPE5vZGU+IG1fc3Vic2NyaXB0OworICAgIFNoYXJlZFB0cjxOb2RlPiBtX2Jhc2U7
CisgICAgU2hhcmVkUHRyPE5vZGU+IG1fc3Vic2NyaXB0OwogICAgIE9wZXJhdG9yIG1fb3BlcjsK
ICAgfTsKIApAQCAtNTQzLDcgKzU0MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFZhbHVlSW1w
ICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQ
dHI8Tm9kZT4gbV9iYXNlOworICAgIFNoYXJlZFB0cjxOb2RlPiBtX2Jhc2U7CiAgICAgSWRlbnRp
ZmllciBtX2lkZW50OwogICAgIE9wZXJhdG9yIG1fb3BlcjsKICAgfTsKQEAgLTU1NCw3ICs1NTIs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsK
ICAgcHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHI7CisgICAgU2hh
cmVkUHRyPE5vZGU+IGV4cHI7CiAgIH07CiAKICAgY2xhc3MgTmVnYXRlTm9kZSA6IHB1YmxpYyBO
b2RlIHsKQEAgLTU2Myw3ICs1NjEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAq
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRy
PE5vZGU+IGV4cHI7CisgICAgU2hhcmVkUHRyPE5vZGU+IGV4cHI7CiAgIH07CiAKICAgY2xhc3Mg
Qml0d2lzZU5vdE5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC01NzIsNyArNTcwLDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6
Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByOworICAgIFNoYXJlZFB0cjxOb2Rl
PiBleHByOwogICB9OwogCiAgIGNsYXNzIExvZ2ljYWxOb3ROb2RlIDogcHVibGljIE5vZGUgewpA
QCAtNTgxLDcgKzU3OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFZhbHVlSW1wICpldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4g
ZXhwcjsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjsKICAgfTsKIAogICBjbGFzcyBNdWx0Tm9k
ZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTU5MCw4ICs1ODgsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBLWE1MQ29y
ZTo6U2hhcmVkUHRyPE5vZGU+IHRlcm0xOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4g
dGVybTI7CisgICAgU2hhcmVkUHRyPE5vZGU+IHRlcm0xOworICAgIFNoYXJlZFB0cjxOb2RlPiB0
ZXJtMjsKICAgICBjaGFyIG9wZXI7CiAgIH07CiAKQEAgLTYwMSw4ICs1OTksOCBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToK
LSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IHRlcm0xOwotICAgIEtYTUxDb3JlOjpTaGFy
ZWRQdHI8Tm9kZT4gdGVybTI7CisgICAgU2hhcmVkUHRyPE5vZGU+IHRlcm0xOworICAgIFNoYXJl
ZFB0cjxOb2RlPiB0ZXJtMjsKICAgICBjaGFyIG9wZXI7CiAgIH07CiAKQEAgLTYxMyw4ICs2MTEs
OCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsK
ICAgcHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IHRlcm0xOwotICAgIEtY
TUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gdGVybTI7CisgICAgU2hhcmVkUHRyPE5vZGU+IHRlcm0x
OworICAgIFNoYXJlZFB0cjxOb2RlPiB0ZXJtMjsKICAgICBPcGVyYXRvciBvcGVyOwogICB9Owog
CkBAIC02MjUsOCArNjIzLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2Rl
PiBleHByMTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHIyOworICAgIFNoYXJl
ZFB0cjxOb2RlPiBleHByMTsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjI7CiAgICAgT3BlcmF0
b3Igb3BlcjsKICAgfTsKIApAQCAtNjM3LDggKzYzNSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3Jl
OjpTaGFyZWRQdHI8Tm9kZT4gZXhwcjE7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBl
eHByMjsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjE7CisgICAgU2hhcmVkUHRyPE5vZGU+IGV4
cHIyOwogICAgIE9wZXJhdG9yIG9wZXI7CiAgIH07CiAKQEAgLTY0OSw4ICs2NDcsOCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0
ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHIxOwotICAgIEtYTUxDb3JlOjpT
aGFyZWRQdHI8Tm9kZT4gZXhwcjI7CisgICAgU2hhcmVkUHRyPE5vZGU+IGV4cHIxOworICAgIFNo
YXJlZFB0cjxOb2RlPiBleHByMjsKICAgICBPcGVyYXRvciBvcGVyOwogICB9OwogCkBAIC02NjQs
OCArNjYyLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykg
Y29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByMTsK
LSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHIyOworICAgIFNoYXJlZFB0cjxOb2Rl
PiBleHByMTsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjI7CiAgICAgT3BlcmF0b3Igb3BlcjsK
ICAgfTsKIApAQCAtNjc5LDkgKzY3Nyw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFZhbHVlSW1w
ICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQ
dHI8Tm9kZT4gbG9naWNhbDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHIxOwot
ICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gZXhwcjI7CisgICAgU2hhcmVkUHRyPE5vZGU+
IGxvZ2ljYWw7CisgICAgU2hhcmVkUHRyPE5vZGU+IGV4cHIxOworICAgIFNoYXJlZFB0cjxOb2Rl
PiBleHByMjsKICAgfTsKIAogICBjbGFzcyBBc3NpZ25SZXNvbHZlTm9kZSA6IHB1YmxpYyBOb2Rl
IHsKQEAgLTY5Myw3ICs2OTEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHJvdGVjdGVkOgogICAg
IElkZW50aWZpZXIgbV9pZGVudDsKICAgICBPcGVyYXRvciBtX29wZXI7Ci0gICAgS1hNTENvcmU6
OlNoYXJlZFB0cjxOb2RlPiBtX3JpZ2h0OworICAgIFNoYXJlZFB0cjxOb2RlPiBtX3JpZ2h0Owog
ICB9OwogCiAgIGNsYXNzIEFzc2lnbkJyYWNrZXROb2RlIDogcHVibGljIE5vZGUgewpAQCAtNzAz
LDEwICs3MDEsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4
ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAm
cykgY29uc3Q7CiAgIHByb3RlY3RlZDoKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IG1f
YmFzZTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IG1fc3Vic2NyaXB0OworICAgIFNo
YXJlZFB0cjxOb2RlPiBtX2Jhc2U7CisgICAgU2hhcmVkUHRyPE5vZGU+IG1fc3Vic2NyaXB0Owog
ICAgIE9wZXJhdG9yIG1fb3BlcjsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IG1fcmln
aHQ7CisgICAgU2hhcmVkUHRyPE5vZGU+IG1fcmlnaHQ7CiAgIH07CiAKICAgY2xhc3MgQXNzaWdu
RG90Tm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTcxNiwxMCArNzE0LDEwIEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcm90ZWN0ZWQ6Ci0g
ICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBtX2Jhc2U7CisgICAgU2hhcmVkUHRyPE5vZGU+
IG1fYmFzZTsKICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CiAgICAgT3BlcmF0b3IgbV9vcGVyOwot
ICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gbV9yaWdodDsKKyAgICBTaGFyZWRQdHI8Tm9k
ZT4gbV9yaWdodDsKICAgfTsKIAogICBjbGFzcyBDb21tYU5vZGUgOiBwdWJsaWMgTm9kZSB7CkBA
IC03MjgsOCArNzI2LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRl
KEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBl
eHByMTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHIyOworICAgIFNoYXJlZFB0
cjxOb2RlPiBleHByMTsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjI7CiAgIH07CiAKICAgY2xh
c3MgU3RhdExpc3ROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtNzQyLDggKzc0MCw4
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDYXNlQ2xhdXNlTm9k
ZTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFN0YXRlbWVudE5vZGU+IHN0YXRlbWVudDsKLSAg
ICBLWE1MQ29yZTo6U2hhcmVkUHRyPFN0YXRMaXN0Tm9kZT4gbGlzdDsKKyAgICBTaGFyZWRQdHI8
U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50OworICAgIFNoYXJlZFB0cjxTdGF0TGlzdE5vZGU+IGxp
c3Q7CiAgIH07CiAKICAgY2xhc3MgQXNzaWduRXhwck5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC03
NTIsNyArNzUwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4
ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAm
cykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHBy
OworICAgIFNoYXJlZFB0cjxOb2RlPiBleHByOwogICB9OwogCiAgIGNsYXNzIFZhckRlY2xOb2Rl
IDogcHVibGljIE5vZGUgewpAQCAtNzY1LDcgKzc2Myw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBw
cml2YXRlOgogICAgIFR5cGUgdmFyVHlwZTsKICAgICBJZGVudGlmaWVyIGlkZW50OwotICAgIEtY
TUxDb3JlOjpTaGFyZWRQdHI8QXNzaWduRXhwck5vZGU+IGluaXQ7CisgICAgU2hhcmVkUHRyPEFz
c2lnbkV4cHJOb2RlPiBpbml0OwogICB9OwogCiAgIGNsYXNzIFZhckRlY2xMaXN0Tm9kZSA6IHB1
YmxpYyBOb2RlIHsKQEAgLTc4MCw4ICs3NzgsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgRm9yTm9kZTsKICAgICBmcmllbmQgY2xhc3MgVmFyU3RhdGVt
ZW50Tm9kZTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFZhckRlY2xMaXN0Tm9kZT4gbGlzdDsK
LSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFZhckRlY2xOb2RlPiB2YXI7CisgICAgU2hhcmVkUHRy
PFZhckRlY2xMaXN0Tm9kZT4gbGlzdDsKKyAgICBTaGFyZWRQdHI8VmFyRGVjbE5vZGU+IHZhcjsK
ICAgfTsKIAogICBjbGFzcyBWYXJTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUg
ewpAQCAtNzkxLDcgKzc4OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBw
cm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hh
cmVkUHRyPFZhckRlY2xMaXN0Tm9kZT4gbGlzdDsKKyAgICBTaGFyZWRQdHI8VmFyRGVjbExpc3RO
b2RlPiBsaXN0OwogICB9OwogCiAgIGNsYXNzIEJsb2NrTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnRO
b2RlIHsKQEAgLTgwMSw3ICs3OTksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByb3RlY3RlZDoKLSAgICBLWE1MQ29y
ZTo6U2hhcmVkUHRyPFNvdXJjZUVsZW1lbnRzTm9kZT4gc291cmNlOworICAgIFNoYXJlZFB0cjxT
b3VyY2VFbGVtZW50c05vZGU+IHNvdXJjZTsKICAgfTsKIAogICBjbGFzcyBFbXB0eVN0YXRlbWVu
dE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CkBAIC04MTcsNyArODE1LDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlICpleGVj
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAg
cHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHI7CisgICAgU2hhcmVk
UHRyPE5vZGU+IGV4cHI7CiAgIH07CiAKICAgY2xhc3MgSWZOb2RlIDogcHVibGljIFN0YXRlbWVu
dE5vZGUgewpAQCAtODI4LDkgKzgyNiw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwg
dm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBLWE1MQ29y
ZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHI7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxTdGF0ZW1l
bnROb2RlPiBzdGF0ZW1lbnQxOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8U3RhdGVtZW50Tm9k
ZT4gc3RhdGVtZW50MjsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjsKKyAgICBTaGFyZWRQdHI8
U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50MTsKKyAgICBTaGFyZWRQdHI8U3RhdGVtZW50Tm9kZT4g
c3RhdGVtZW50MjsKICAgfTsKIAogICBjbGFzcyBEb1doaWxlTm9kZSA6IHB1YmxpYyBTdGF0ZW1l
bnROb2RlIHsKQEAgLTg0MCw4ICs4MzgsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFs
IHZvaWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENv
cmU6OlNoYXJlZFB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7Ci0gICAgS1hNTENvcmU6OlNo
YXJlZFB0cjxOb2RlPiBleHByOworICAgIFNoYXJlZFB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1l
bnQ7CisgICAgU2hhcmVkUHRyPE5vZGU+IGV4cHI7CiAgIH07CiAKICAgY2xhc3MgV2hpbGVOb2Rl
IDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtODUxLDggKzg0OSw4IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJp
dmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHI7Ci0gICAgS1hNTENvcmU6
OlNoYXJlZFB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CisgICAgU2hhcmVkUHRyPE5vZGU+
IGV4cHI7CisgICAgU2hhcmVkUHRyPFN0YXRlbWVudE5vZGU+IHN0YXRlbWVudDsKICAgfTsKIAog
ICBjbGFzcyBGb3JOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtODY1LDEwICs4NjMs
MTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhF
eGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0g
JnMpIGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gZXhw
cjE7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByMjsKLSAgICBLWE1MQ29yZTo6
U2hhcmVkUHRyPE5vZGU+IGV4cHIzOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8U3RhdGVtZW50
Tm9kZT4gc3RhdGVtZW50OworICAgIFNoYXJlZFB0cjxOb2RlPiBleHByMTsKKyAgICBTaGFyZWRQ
dHI8Tm9kZT4gZXhwcjI7CisgICAgU2hhcmVkUHRyPE5vZGU+IGV4cHIzOworICAgIFNoYXJlZFB0
cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CiAgIH07CiAKICAgY2xhc3MgRm9ySW5Ob2RlIDog
cHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtODgwLDExICs4NzgsMTEgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAg
IHByaXZhdGU6CiAgICAgSWRlbnRpZmllciBpZGVudDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRy
PEFzc2lnbkV4cHJOb2RlPiBpbml0OwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gbGV4
cHI7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByOwotICAgIEtYTUxDb3JlOjpT
aGFyZWRQdHI8VmFyRGVjbE5vZGU+IHZhckRlY2w7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxT
dGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CisgICAgU2hhcmVkUHRyPEFzc2lnbkV4cHJOb2RlPiBp
bml0OworICAgIFNoYXJlZFB0cjxOb2RlPiBsZXhwcjsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhw
cjsKKyAgICBTaGFyZWRQdHI8VmFyRGVjbE5vZGU+IHZhckRlY2w7CisgICAgU2hhcmVkUHRyPFN0
YXRlbWVudE5vZGU+IHN0YXRlbWVudDsKICAgfTsKIAogICBjbGFzcyBDb250aW51ZU5vZGUgOiBw
dWJsaWMgU3RhdGVtZW50Tm9kZSB7CkBAIC05MTMsNyArOTExLDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToK
LSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IHZhbHVlOworICAgIFNoYXJlZFB0cjxOb2Rl
PiB2YWx1ZTsKICAgfTsKIAogICBjbGFzcyBXaXRoTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2Rl
IHsKQEAgLTkyMyw4ICs5MjEsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQg
cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNo
YXJlZFB0cjxOb2RlPiBleHByOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8U3RhdGVtZW50Tm9k
ZT4gc3RhdGVtZW50OworICAgIFNoYXJlZFB0cjxOb2RlPiBleHByOworICAgIFNoYXJlZFB0cjxT
dGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CiAgIH07CiAKICAgY2xhc3MgQ2FzZUNsYXVzZU5vZGUg
OiBwdWJsaWMgTm9kZSB7CkBAIC05MzcsOCArOTM1LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
dmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAg
IEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gZXhwcjsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRy
PFN0YXRMaXN0Tm9kZT4gbGlzdDsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjsKKyAgICBTaGFy
ZWRQdHI8U3RhdExpc3ROb2RlPiBsaXN0OwogICB9OwogCiAgIGNsYXNzIENsYXVzZUxpc3ROb2Rl
IDogcHVibGljIE5vZGUgewpAQCAtOTU0LDggKzk1Miw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBDYXNlQmxvY2tOb2RlOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQ
dHI8Q2FzZUNsYXVzZU5vZGU+IGNsOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Q2xhdXNlTGlz
dE5vZGU+IG54OworICAgIFNoYXJlZFB0cjxDYXNlQ2xhdXNlTm9kZT4gY2w7CisgICAgU2hhcmVk
UHRyPENsYXVzZUxpc3ROb2RlPiBueDsKICAgfTsKIAogICBjbGFzcyBDYXNlQmxvY2tOb2RlIDog
cHVibGljIE5vZGUgewpAQCAtOTY2LDkgKzk2NCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZp
cnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBL
WE1MQ29yZTo6U2hhcmVkUHRyPENsYXVzZUxpc3ROb2RlPiBsaXN0MTsKLSAgICBLWE1MQ29yZTo6
U2hhcmVkUHRyPENhc2VDbGF1c2VOb2RlPiBkZWY7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxD
bGF1c2VMaXN0Tm9kZT4gbGlzdDI7CisgICAgU2hhcmVkUHRyPENsYXVzZUxpc3ROb2RlPiBsaXN0
MTsKKyAgICBTaGFyZWRQdHI8Q2FzZUNsYXVzZU5vZGU+IGRlZjsKKyAgICBTaGFyZWRQdHI8Q2xh
dXNlTGlzdE5vZGU+IGxpc3QyOwogICB9OwogCiAgIGNsYXNzIFN3aXRjaE5vZGUgOiBwdWJsaWMg
U3RhdGVtZW50Tm9kZSB7CkBAIC05NzgsOCArOTc2LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
dmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAg
IEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gZXhwcjsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRy
PENhc2VCbG9ja05vZGU+IGJsb2NrOworICAgIFNoYXJlZFB0cjxOb2RlPiBleHByOworICAgIFNo
YXJlZFB0cjxDYXNlQmxvY2tOb2RlPiBibG9jazsKICAgfTsKIAogICBjbGFzcyBMYWJlbE5vZGUg
OiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CkBAIC05OTAsNyArOTg4LDcgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAg
IHByaXZhdGU6CiAgICAgSWRlbnRpZmllciBsYWJlbDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRy
PFN0YXRlbWVudE5vZGU+IHN0YXRlbWVudDsKKyAgICBTaGFyZWRQdHI8U3RhdGVtZW50Tm9kZT4g
c3RhdGVtZW50OwogICB9OwogCiAgIGNsYXNzIFRocm93Tm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnRO
b2RlIHsKQEAgLTk5OSw3ICs5OTcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIENv
bXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpT
aGFyZWRQdHI8Tm9kZT4gZXhwcjsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjsKICAgfTsKIAog
ICBjbGFzcyBDYXRjaE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CkBAIC0xMDExLDcgKzEw
MDksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBJZGVudGlmaWVyIGlkZW50OwotICAg
IEtYTUxDb3JlOjpTaGFyZWRQdHI8U3RhdGVtZW50Tm9kZT4gYmxvY2s7CisgICAgU2hhcmVkUHRy
PFN0YXRlbWVudE5vZGU+IGJsb2NrOwogICB9OwogCiAgIGNsYXNzIEZpbmFsbHlOb2RlIDogcHVi
bGljIFN0YXRlbWVudE5vZGUgewpAQCAtMTAyMSw3ICsxMDE5LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRl
OgotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8U3RhdGVtZW50Tm9kZT4gYmxvY2s7CisgICAgU2hh
cmVkUHRyPFN0YXRlbWVudE5vZGU+IGJsb2NrOwogICB9OwogCiAgIGNsYXNzIFRyeU5vZGUgOiBw
dWJsaWMgU3RhdGVtZW50Tm9kZSB7CkBAIC0xMDM2LDkgKzEwMzQsOSBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZh
dGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxTdGF0ZW1lbnROb2RlPiBibG9jazsKLSAgICBL
WE1MQ29yZTo6U2hhcmVkUHRyPENhdGNoTm9kZT4gX2NhdGNoOwotICAgIEtYTUxDb3JlOjpTaGFy
ZWRQdHI8RmluYWxseU5vZGU+IF9maW5hbDsKKyAgICBTaGFyZWRQdHI8U3RhdGVtZW50Tm9kZT4g
YmxvY2s7CisgICAgU2hhcmVkUHRyPENhdGNoTm9kZT4gX2NhdGNoOworICAgIFNoYXJlZFB0cjxG
aW5hbGx5Tm9kZT4gX2ZpbmFsOwogICB9OwogCiAgIGNsYXNzIFBhcmFtZXRlck5vZGUgOiBwdWJs
aWMgTm9kZSB7CkBAIC0xMDU1LDcgKzEwNTMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBmcmll
bmQgY2xhc3MgRnVuY0RlY2xOb2RlOwogICAgIGZyaWVuZCBjbGFzcyBGdW5jRXhwck5vZGU7CiAg
ICAgSWRlbnRpZmllciBpZDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFBhcmFtZXRlck5vZGU+
IG5leHQ7CisgICAgU2hhcmVkUHRyPFBhcmFtZXRlck5vZGU+IG5leHQ7CiAgIH07CiAKICAgLy8g
aW5oZXJpdGVkIGJ5IFByb2dyYW1Ob2RlCkBAIC0xMDc4LDggKzEwNzYsOCBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICBmcmllbmQgY2xhc3MgRnVuY0RlY2xOb2RlOwogCiAgICAgSWRlbnRpZmllciBp
ZGVudDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFBhcmFtZXRlck5vZGU+IHBhcmFtOwotICAg
IEtYTUxDb3JlOjpTaGFyZWRQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keTsKKyAgICBTaGFyZWRQ
dHI8UGFyYW1ldGVyTm9kZT4gcGFyYW07CisgICAgU2hhcmVkUHRyPEZ1bmN0aW9uQm9keU5vZGU+
IGJvZHk7CiAgIH07CiAKICAgY2xhc3MgRnVuY0RlY2xOb2RlIDogcHVibGljIFN0YXRlbWVudE5v
ZGUgewpAQCAtMTA5NCw4ICsxMDkyLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgSWRl
bnRpZmllciBpZGVudDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFBhcmFtZXRlck5vZGU+IHBh
cmFtOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keTsKKyAg
ICBTaGFyZWRQdHI8UGFyYW1ldGVyTm9kZT4gcGFyYW07CisgICAgU2hhcmVkUHRyPEZ1bmN0aW9u
Qm9keU5vZGU+IGJvZHk7CiAgIH07CiAKICAgLy8gQSBsaW5rZWQgbGlzdCBvZiBzb3VyY2UgZWxl
bWVudCBub2RlcwpAQCAtMTExMSw4ICsxMTA5LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIEJsb2NrTm9kZTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFN0YXRl
bWVudE5vZGU+IGVsZW1lbnQ7IC8vICd0aGlzJyBlbGVtZW50Ci0gICAgS1hNTENvcmU6OlNoYXJl
ZFB0cjxTb3VyY2VFbGVtZW50c05vZGU+IGVsZW1lbnRzOyAvLyBwb2ludGVyIHRvIG5leHQKKyAg
ICBTaGFyZWRQdHI8U3RhdGVtZW50Tm9kZT4gZWxlbWVudDsgLy8gJ3RoaXMnIGVsZW1lbnQKKyAg
ICBTaGFyZWRQdHI8U291cmNlRWxlbWVudHNOb2RlPiBlbGVtZW50czsgLy8gcG9pbnRlciB0byBu
ZXh0CiAgIH07CiAKICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgRnVuY3Rpb25Cb2R5Tm9k
ZSB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMyc3RyaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcKZGlmZiAtcCAtdSAtcjEuMTcgSmF2YVNjcmlwdENv
cmUva2pzL25vZGVzMnN0cmluZy5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2RlczJzdHJp
bmcuY3BwCTI0IFNlcCAyMDA1IDIyOjM0OjE0IC0wMDAwCTEuMTcKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9ub2RlczJzdHJpbmcuY3BwCTI3IFNlcCAyMDA1IDA3OjE2OjQ3IC0wMDAwCkBAIC0yMyw4
ICsyMyw2IEBACiAKICNpbmNsdWRlICJub2Rlcy5oIgogCi11c2luZyBLWE1MQ29yZTo6U2hhcmVk
UHRyOwotCiBuYW1lc3BhY2UgS0pTIHsKICAgLyoqCiAgICAqIEEgc2ltcGxlIHRleHQgc3RyZWFt
aW5nIGNsYXNzIHRoYXQgaGVscHMgd2l0aCBjb2RlIGluZGVudGF0aW9uLgpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjQ4CmRpZmYgLXAgLXUgLXIxLjQ4IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9t
YXAuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmNwcAkxOSBTZXAgMjAw
NSAwNjo1NzoyNyAtMDAwMAkxLjQ4CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFw
LmNwcAkyNyBTZXAgMjAwNSAwNzoxNjo0OSAtMDAwMApAQCAtMjEsNyArMjEsNyBAQAogCiAjaW5j
bHVkZSAicHJvcGVydHlfbWFwLmgiCiAKLSNpbmNsdWRlICJmYXN0X21hbGxvYy5oIgorI2luY2x1
ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlICJvYmplY3QuaCIKICNpbmNsdWRl
ICJwcm90ZWN0LmgiCiAjaW5jbHVkZSAicmVmZXJlbmNlX2xpc3QuaCIKQEAgLTEyMiw3ICsxMjIs
NyBAQCBQcm9wZXJ0eU1hcDo6flByb3BlcnR5TWFwKCkKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgKyttaW5pbXVtS2V5c1RvUHJvY2VzczsKICAgICB9Ci0gICAga2pzX2Zhc3RfZnJlZShfdGFi
bGUpOworICAgIGZhc3RGcmVlKF90YWJsZSk7CiB9CiAKIHZvaWQgUHJvcGVydHlNYXA6OmNsZWFy
KCkKQEAgLTQyNCw3ICs0MjQsNyBAQCB2b2lkIFByb3BlcnR5TWFwOjpyZWhhc2goaW50IG5ld1Rh
YmxlU2l6CiAgICAgaW50IG9sZFRhYmxlU2l6ZSA9IG9sZFRhYmxlID8gb2xkVGFibGUtPnNpemUg
OiAwOwogICAgIGludCBvbGRUYWJsZUtleUNvdW50ID0gb2xkVGFibGUgPyBvbGRUYWJsZS0+a2V5
Q291bnQgOiAwOwogICAgIAotICAgIF90YWJsZSA9IChUYWJsZSAqKWtqc19mYXN0X2NhbGxvYygx
LCBzaXplb2YoVGFibGUpICsgKG5ld1RhYmxlU2l6ZSAtIDEpICogc2l6ZW9mKEVudHJ5KSApOwor
ICAgIF90YWJsZSA9IChUYWJsZSAqKWZhc3RDYWxsb2MoMSwgc2l6ZW9mKFRhYmxlKSArIChuZXdU
YWJsZVNpemUgLSAxKSAqIHNpemVvZihFbnRyeSkgKTsKICAgICBfdGFibGUtPnNpemUgPSBuZXdU
YWJsZVNpemU7CiAgICAgX3RhYmxlLT5zaXplTWFzayA9IG5ld1RhYmxlU2l6ZSAtIDE7CiAgICAg
X3RhYmxlLT5rZXlDb3VudCA9IG9sZFRhYmxlS2V5Q291bnQ7CkBAIC00NTgsNyArNDU4LDcgQEAg
dm9pZCBQcm9wZXJ0eU1hcDo6cmVoYXNoKGludCBuZXdUYWJsZVNpegogICAgIH0KICAgICBfdGFi
bGUtPmxhc3RJbmRleFVzZWQgPSBsYXN0SW5kZXhVc2VkOwogCi0gICAga2pzX2Zhc3RfZnJlZShv
bGRUYWJsZSk7CisgICAgZmFzdEZyZWUob2xkVGFibGUpOwogCiAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbi5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXAgLXUgLXIxLjEwIEphdmFTY3JpcHRDb3Jl
L2tqcy9zY29wZV9jaGFpbi5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc2NvcGVfY2hhaW4uaAkx
MiBBdWcgMjAwNSAyMzoyMDo0OCAtMDAwMAkxLjEwCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc2Nv
cGVfY2hhaW4uaAkyNyBTZXAgMjAwNSAwNzoxNjo0OSAtMDAwMApAQCAtMjIsMTkgKzIyLDE3IEBA
CiAjaWZuZGVmIEtKU19TQ09QRV9DSEFJTl9ICiAjZGVmaW5lIEtKU19TQ09QRV9DSEFJTl9ICiAK
LSNpbmNsdWRlICJmYXN0X21hbGxvYy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2Mu
aD4KIAogbmFtZXNwYWNlIEtKUyB7CiAKICAgICBjbGFzcyBPYmplY3RJbXA7CiAgICAgCi0gICAg
Y2xhc3MgU2NvcGVDaGFpbk5vZGUgeworICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlIDogcHVibGlj
IEZhc3RBbGxvY2F0ZWQgewogICAgIHB1YmxpYzoKICAgICAgICAgU2NvcGVDaGFpbk5vZGUoU2Nv
cGVDaGFpbk5vZGUgKm4sIE9iamVjdEltcCAqbykKICAgICAgICAgICAgIDogbmV4dChuKSwgb2Jq
ZWN0KG8pLCByZWZDb3VudCgxKSB7IH0KIAotICAgICAgICBLSlNfRkFTVF9BTExPQ0FURUQ7Ci0K
ICAgICAgICAgU2NvcGVDaGFpbk5vZGUgKm5leHQ7CiAgICAgICAgIE9iamVjdEltcCAqb2JqZWN0
OwogICAgICAgICBpbnQgcmVmQ291bnQ7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvc2hhcmVk
X3B0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGtqcy9zaGFyZWRfcHRyLmgKZGlmZiAtTiBKYXZh
U2NyaXB0Q29yZS9ranMvc2hhcmVkX3B0ci5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc2hhcmVk
X3B0ci5oCTMwIEF1ZyAyMDA1IDIzOjU2OjE0IC0wMDAwCTEuMgorKysgSmF2YVNjcmlwdENvcmUv
a2pzL3NoYXJlZF9wdHIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDk4ICswLDAg
QEAKLS8vIC0qLSBjLWJhc2ljLW9mZnNldDogNCAtKi0KLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0ZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBLWE1MQ09SRV9TSEFSRURfUFRSX0gK
LSNkZWZpbmUgS1hNTENPUkVfU0hBUkVEX1BUUl9ICi0KLW5hbWVzcGFjZSBLWE1MQ29yZSB7Ci0K
LS8vIEZJWE1FOiBDaGFuZ2UgdGVtcGxhdGUgbmFtZSB0byBSZWZQdHI/Ci10ZW1wbGF0ZSA8Y2xh
c3MgVD4gY2xhc3MgU2hhcmVkUHRyCi17Ci1wdWJsaWM6Ci0gICAgU2hhcmVkUHRyKCkgOiBtX3B0
cihOVUxMKSB7fQotICAgIFNoYXJlZFB0cihUICpwdHIpIDogbV9wdHIocHRyKSB7IGlmIChwdHIp
IHB0ci0+cmVmKCk7IH0KLSAgICBTaGFyZWRQdHIoY29uc3QgU2hhcmVkUHRyICZvKSA6IG1fcHRy
KG8ubV9wdHIpIHsgaWYgKFQgKnB0ciA9IG1fcHRyKSBwdHItPnJlZigpOyB9Ci0gICAgflNoYXJl
ZFB0cigpIHsgaWYgKFQgKnB0ciA9IG1fcHRyKSBwdHItPmRlcmVmKCk7IH0KLQotICAgIHRlbXBs
YXRlIDxjbGFzcyBVPiBTaGFyZWRQdHIoY29uc3QgU2hhcmVkUHRyPFU+ICZvKSA6IG1fcHRyKG8u
Z2V0KCkpIHsgaWYgKFQgKnB0ciA9IG1fcHRyKSBwdHItPnJlZigpOyB9Ci0KLSAgICAvLyBGSVhN
RTogRGVwcmVjYXRlIGluIGZhdm9yIG9mIG9wZXJhdG9ycyBiZWxvdywgdGhlbiByZW1vdmU/Ci0g
ICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBOVUxMOyB9Ci0gICAgYm9v
bCBub3ROdWxsKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgIT0gTlVMTDsgfQotCi0gICAgLy8gRklY
TUU6IERlcHJlY2F0ZSBpbiBmYXZvciBvZiBvcGVyYXRvcj0sIHRoZW4gcmVtb3ZlPwotICAgIHZv
aWQgcmVzZXQoKSB7IGlmIChUICpwdHIgPSBtX3B0cikgcHRyLT5kZXJlZigpOyBtX3B0ciA9IE5V
TEw7IH0KLSAgICB2b2lkIHJlc2V0KFQgKm8pIHsgaWYgKG8pIG8tPnJlZigpOyBpZiAoVCAqcHRy
ID0gbV9wdHIpIHB0ci0+ZGVyZWYoKTsgbV9wdHIgPSBvOyB9Ci0gICAgCi0gICAgVCAqZ2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9wdHI7IH0KLQotICAgIFQgJm9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuICptX3B0cjsgfQotICAgIFQgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3B0cjsg
fQotCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBOVUxMOyB9
Ci0gICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyICE9IE5VTEw7IH0KLQot
ICAgIFNoYXJlZFB0ciAmb3BlcmF0b3I9KGNvbnN0IFNoYXJlZFB0ciAmKTsKLSAgICBTaGFyZWRQ
dHIgJm9wZXJhdG9yPShUICopOwotCi1wcml2YXRlOgotICAgIFQgKm1fcHRyOwotCi0gICAgb3Bl
cmF0b3IgaW50KCkgY29uc3Q7IC8vIGRlbGliZXJhdGVseSBub3QgaW1wbGVtZW50ZWQ7IGhlbHBz
IHByZXZlbnQgb3BlcmF0b3IgYm9vbCBmcm9tIGNvbnZlcnRpbmcgdG8gaW50IGFjY2lkZW50YWxs
eQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IFNoYXJlZFB0cjxUPiAmU2hhcmVkUHRyPFQ+Ojpv
cGVyYXRvcj0oY29uc3QgU2hhcmVkUHRyPFQ+ICZvKSAKLXsKLSAgICBUICpvcHRyID0gby5tX3B0
cjsKLSAgICBpZiAob3B0cikKLSAgICAgICAgb3B0ci0+cmVmKCk7Ci0gICAgaWYgKFQgKnB0ciA9
IG1fcHRyKQotICAgICAgICBwdHItPmRlcmVmKCk7Ci0gICAgbV9wdHIgPSBvcHRyOwotICAgIHJl
dHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBTaGFyZWRQdHI8VD4g
JlNoYXJlZFB0cjxUPjo6b3BlcmF0b3I9KFQgKm9wdHIpCi17Ci0gICAgaWYgKG9wdHIpCi0gICAg
ICAgIG9wdHItPnJlZigpOwotICAgIGlmIChUICpwdHIgPSBtX3B0cikKLSAgICAgICAgcHRyLT5k
ZXJlZigpOwotICAgIG1fcHRyID0gb3B0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNoYXJlZFB0cjxUPiAm
YSwgY29uc3QgU2hhcmVkUHRyPFQ+ICZiKSB7IHJldHVybiBhLmdldCgpID09IGIuZ2V0KCk7IH0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNoYXJlZFB0
cjxUPiAmYSwgY29uc3QgVCAqYikgeyByZXR1cm4gYS5nZXQoKSA9PSBiOyB9Ci10ZW1wbGF0ZSA8
Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUICphLCBjb25zdCBTaGFyZWRQ
dHI8VD4gJmIpIHsgcmV0dXJuIGEgPT0gYi5nZXQoKTsgfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTaGFyZWRQdHI8VD4gJmEsIGNvbnN0IFNoYXJl
ZFB0cjxUPiAmYikgeyByZXR1cm4gYS5nZXQoKSAhPSBiLmdldCgpOyB9Ci10ZW1wbGF0ZSA8Y2xh
c3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTaGFyZWRQdHI8VD4gJmEsIGNvbnN0
IFQgKmIpIHsgcmV0dXJuIGEuZ2V0KCkgIT0gYjsgfQotdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVCAqYSwgY29uc3QgU2hhcmVkUHRyPFQ+ICZiKSB7IHJl
dHVybiBhICE9IGIuZ2V0KCk7IH0KLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+IGlubGlu
ZSBTaGFyZWRQdHI8VD4gc3RhdGljX3BvaW50ZXJfY2FzdChjb25zdCBTaGFyZWRQdHI8VT4gJnAp
IHsgcmV0dXJuIFNoYXJlZFB0cjxUPihzdGF0aWNfY2FzdDxUICo+KHAuZ2V0KCkpKTsgfQotdGVt
cGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+IGlubGluZSBTaGFyZWRQdHI8VD4gY29uc3RfcG9pbnRl
cl9jYXN0KGNvbnN0IFNoYXJlZFB0cjxVPiAmcCkgeyByZXR1cm4gU2hhcmVkUHRyPFQ+KGNvbnN0
X2Nhc3Q8VCAqPihwLmdldCgpKSk7IH0KLQotfQotCi0jZW5kaWYgLy8gS1hNTENPUkVfU0hBUkVE
X1BUUl9ICkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NQpkaWZmIC1wIC11IC1yMS40NSBKYXZhU2Ny
aXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJp
bmdfb2JqZWN0LmNwcAkxOSBTZXAgMjAwNSAwNjo1NzoyOCAtMDAwMAkxLjQ1CisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAJMjcgU2VwIDIwMDUgMDc6MTY6NTAgLTAwMDAK
QEAgLTc2NSw3ICs3NjUsNyBAQCBWYWx1ZUltcCAqU3RyaW5nT2JqZWN0RnVuY0ltcDo6Y2FsbEFz
RnVuCiB7CiAgIFVTdHJpbmcgczsKICAgaWYgKGFyZ3Muc2l6ZSgpKSB7Ci0gICAgVUNoYXIgKmJ1
ZiA9IHN0YXRpY19jYXN0PFVDaGFyICo+KGtqc19mYXN0X21hbGxvYyhhcmdzLnNpemUoKSAqIHNp
emVvZihVQ2hhcikpKTsKKyAgICBVQ2hhciAqYnVmID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oZmFz
dE1hbGxvYyhhcmdzLnNpemUoKSAqIHNpemVvZihVQ2hhcikpKTsKICAgICBVQ2hhciAqcCA9IGJ1
ZjsKICAgICBMaXN0SXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7CiAgICAgd2hpbGUgKGl0ICE9
IGFyZ3MuZW5kKCkpIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy91c3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYwCmRpZmYgLXAgLXUgLXIxLjYwIEphdmFTY3JpcHRD
b3JlL2tqcy91c3RyaW5nLmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuY3BwCTE2
IFNlcCAyMDA1IDIyOjQyOjMwIC0wMDAwCTEuNjAKKysrIEphdmFTY3JpcHRDb3JlL2tqcy91c3Ry
aW5nLmNwcAkyNyBTZXAgMjAwNSAwNzoxNjo1MCAtMDAwMApAQCAtMzUsNyArMzUsNiBAQAogI2lu
Y2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogCi0jaW5jbHVkZSAiZmFzdF9tYWxsb2MuaCIKICNp
bmNsdWRlICJ1c3RyaW5nLmgiCiAjaW5jbHVkZSAib3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgImlk
ZW50aWZpZXIuaCIKQEAgLTE3OSw3ICsxNzgsNyBAQCBVQ2hhciYgVUNoYXJSZWZlcmVuY2U6OnJl
ZigpIGNvbnN0CiBVU3RyaW5nOjpSZXAgKlVTdHJpbmc6OlJlcDo6Y3JlYXRlQ29weWluZyhjb25z
dCBVQ2hhciAqZCwgaW50IGwpCiB7CiAgIGludCBzaXplSW5CeXRlcyA9IGwgKiBzaXplb2YoVUNo
YXIpOwotICBVQ2hhciAqY29weUQgPSBzdGF0aWNfY2FzdDxVQ2hhciAqPihranNfZmFzdF9tYWxs
b2Moc2l6ZUluQnl0ZXMpKTsKKyAgVUNoYXIgKmNvcHlEID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4o
ZmFzdE1hbGxvYyhzaXplSW5CeXRlcykpOwogICBtZW1jcHkoY29weUQsIGQsIHNpemVJbkJ5dGVz
KTsKIAogICByZXR1cm4gY3JlYXRlKGNvcHlELCBsKTsKQEAgLTIzOCw3ICsyMzcsNyBAQCB2b2lk
IFVTdHJpbmc6OlJlcDo6ZGVzdHJveSgpCiAgIGlmIChiYXNlU3RyaW5nKSB7CiAgICAgYmFzZVN0
cmluZy0+ZGVyZWYoKTsKICAgfSBlbHNlIHsKLSAgICBranNfZmFzdF9mcmVlKGJ1Zik7CisgICAg
ZmFzdEZyZWUoYnVmKTsKICAgfQogICBkZWxldGUgdGhpczsKIH0KQEAgLTM2MCw3ICszNTksNyBA
QCB2b2lkIFVTdHJpbmc6OmV4cGFuZENhcGFjaXR5KGludCByZXF1aXJlCiAKICAgaWYgKHJlcXVp
cmVkTGVuZ3RoID4gci0+Y2FwYWNpdHkpIHsKICAgICBpbnQgbmV3Q2FwYWNpdHkgPSBleHBhbmRl
ZFNpemUocmVxdWlyZWRMZW5ndGgsIHItPnByZUNhcGFjaXR5KTsKLSAgICByLT5idWYgPSBzdGF0
aWNfY2FzdDxVQ2hhciAqPihranNfZmFzdF9yZWFsbG9jKHItPmJ1ZiwgbmV3Q2FwYWNpdHkgKiBz
aXplb2YoVUNoYXIpKSk7CisgICAgci0+YnVmID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oZmFzdFJl
YWxsb2Moci0+YnVmLCBuZXdDYXBhY2l0eSAqIHNpemVvZihVQ2hhcikpKTsKICAgICByLT5jYXBh
Y2l0eSA9IG5ld0NhcGFjaXR5IC0gci0+cHJlQ2FwYWNpdHk7CiAgIH0KICAgaWYgKHJlcXVpcmVk
TGVuZ3RoID4gci0+dXNlZENhcGFjaXR5KSB7CkBAIC0zNzYsOSArMzc1LDkgQEAgdm9pZCBVU3Ry
aW5nOjpleHBhbmRQcmVDYXBhY2l0eShpbnQgcmVxdQogICAgIGludCBuZXdDYXBhY2l0eSA9IGV4
cGFuZGVkU2l6ZShyZXF1aXJlZFByZUNhcCwgci0+Y2FwYWNpdHkpOwogICAgIGludCBkZWx0YSA9
IG5ld0NhcGFjaXR5IC0gci0+Y2FwYWNpdHkgLSByLT5wcmVDYXBhY2l0eTsKIAotICAgIFVDaGFy
ICpuZXdCdWYgPSBzdGF0aWNfY2FzdDxVQ2hhciAqPihranNfZmFzdF9tYWxsb2MobmV3Q2FwYWNp
dHkgKiBzaXplb2YoVUNoYXIpKSk7CisgICAgVUNoYXIgKm5ld0J1ZiA9IHN0YXRpY19jYXN0PFVD
aGFyICo+KGZhc3RNYWxsb2MobmV3Q2FwYWNpdHkgKiBzaXplb2YoVUNoYXIpKSk7CiAgICAgbWVt
Y3B5KG5ld0J1ZiArIGRlbHRhLCByLT5idWYsIChyLT5jYXBhY2l0eSArIHItPnByZUNhcGFjaXR5
KSAqIHNpemVvZihVQ2hhcikpOwotICAgIGtqc19mYXN0X2ZyZWUoci0+YnVmKTsKKyAgICBmYXN0
RnJlZShyLT5idWYpOwogICAgIHItPmJ1ZiA9IG5ld0J1ZjsKIAogICAgIHItPnByZUNhcGFjaXR5
ID0gbmV3Q2FwYWNpdHkgLSByLT5jYXBhY2l0eTsKQEAgLTM5MSw3ICszOTAsNyBAQCB2b2lkIFVT
dHJpbmc6OmV4cGFuZFByZUNhcGFjaXR5KGludCByZXF1CiAKIFVTdHJpbmc6OlVTdHJpbmcoY2hh
ciBjKQogewotICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oa2pzX2Zhc3RfbWFs
bG9jKHNpemVvZihVQ2hhcikpKTsKKyAgICBVQ2hhciAqZCA9IHN0YXRpY19jYXN0PFVDaGFyICo+
KGZhc3RNYWxsb2Moc2l6ZW9mKFVDaGFyKSkpOwogICAgIGRbMF0gPSBjOwogICAgIHJlcCA9IFJl
cDo6Y3JlYXRlKGQsIDEpOwogfQpAQCAtNDA3LDcgKzQwNiw3IEBAIFVTdHJpbmc6OlVTdHJpbmco
Y29uc3QgY2hhciAqYykKICAgICBhdHRhY2goJlJlcDo6ZW1wdHkpOwogICAgIHJldHVybjsKICAg
fQotICBVQ2hhciAqZCA9IHN0YXRpY19jYXN0PFVDaGFyICo+KGtqc19mYXN0X21hbGxvYyhzaXpl
b2YoVUNoYXIpICogbGVuZ3RoKSk7CisgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4o
ZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbGVuZ3RoKSk7CiAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspCiAgICAgZFtpXS51YyA9IGNbaV07CiAgIHJlcCA9IFJlcDo6Y3JlYXRl
KGQsIGxlbmd0aCk7CkBAIC00NzIsNyArNDcxLDcgQEAgVVN0cmluZzo6VVN0cmluZyhjb25zdCBV
U3RyaW5nICZhLCBjb25zdAogICB9IGVsc2UgewogICAgIC8vIGEgZG9lcyBub3QgcXVhbGlmeSBm
b3IgYXBwZW5kLCBhbmQgYiBkb2VzIG5vdCBxdWFsaWZ5IGZvciBwcmVwZW5kLCBnb3R0YSBtYWtl
IGEgd2hvbGUgbmV3IHN0cmluZwogICAgIGludCBuZXdDYXBhY2l0eSA9IGV4cGFuZGVkU2l6ZShs
ZW5ndGgsIDApOwotICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oa2pzX2Zhc3Rf
bWFsbG9jKHNpemVvZihVQ2hhcikgKiBuZXdDYXBhY2l0eSkpOworICAgIFVDaGFyICpkID0gc3Rh
dGljX2Nhc3Q8VUNoYXIgKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbmV3Q2FwYWNpdHkp
KTsKICAgICBtZW1jcHkoZCwgYS5kYXRhKCksIGFTaXplICogc2l6ZW9mKFVDaGFyKSk7CiAgICAg
bWVtY3B5KGQgKyBhU2l6ZSwgYi5kYXRhKCksIGJTaXplICogc2l6ZW9mKFVDaGFyKSk7CiAgICAg
cmVwID0gUmVwOjpjcmVhdGUoZCwgbGVuZ3RoKTsKQEAgLTY0Myw3ICs2NDIsNyBAQCBVU3RyaW5n
IFVTdHJpbmc6OnNwbGljZVN1YnN0cmluZ3NXaXRoU2VwCiAgICAgdG90YWxMZW5ndGggKz0gc2Vw
YXJhdG9yc1tpXS5zaXplKCk7CiAgIH0KIAotICBVQ2hhciAqYnVmZmVyID0gc3RhdGljX2Nhc3Q8
VUNoYXIgKj4oa2pzX2Zhc3RfbWFsbG9jKHRvdGFsTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSkpOwor
ICBVQ2hhciAqYnVmZmVyID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oZmFzdE1hbGxvYyh0b3RhbExl
bmd0aCAqIHNpemVvZihVQ2hhcikpKTsKIAogICBpbnQgbWF4Q291bnQgPSBtYXgocmFuZ2VDb3Vu
dCwgc2VwYXJhdG9yQ291bnQpOwogICBpbnQgYnVmZmVyUG9zID0gMDsKQEAgLTY5Niw3ICs2OTUs
NyBAQCBVU3RyaW5nICZVU3RyaW5nOjphcHBlbmQoY29uc3QgVVN0cmluZyAmCiAgIH0gZWxzZSB7
CiAgICAgLy8gdGhpcyBpcyBzaGFyZWQgd2l0aCBzb21lb25lIHVzaW5nIG1vcmUgY2FwYWNpdHks
IGdvdHRhIG1ha2UgYSB3aG9sZSBuZXcgc3RyaW5nCiAgICAgaW50IG5ld0NhcGFjaXR5ID0gZXhw
YW5kZWRTaXplKGxlbmd0aCwgMCk7Ci0gICAgVUNoYXIgKmQgPSBzdGF0aWNfY2FzdDxVQ2hhciAq
PihranNfZmFzdF9tYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIG5ld0NhcGFjaXR5KSk7CisgICAgVUNo
YXIgKmQgPSBzdGF0aWNfY2FzdDxVQ2hhciAqPihmYXN0TWFsbG9jKHNpemVvZihVQ2hhcikgKiBu
ZXdDYXBhY2l0eSkpOwogICAgIG1lbWNweShkLCBkYXRhKCksIHRoaXNTaXplICogc2l6ZW9mKFVD
aGFyKSk7CiAgICAgbWVtY3B5KGNvbnN0X2Nhc3Q8VUNoYXIgKj4oZCArIHRoaXNTaXplKSwgdC5k
YXRhKCksIHRTaXplICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgcmVsZWFzZSgpOwpAQCAtNzQwLDcg
KzczOSw3IEBAIFVTdHJpbmcgJlVTdHJpbmc6OmFwcGVuZChjb25zdCBjaGFyICp0KQogICB9IGVs
c2UgewogICAgIC8vIHRoaXMgaXMgc2hhcmVkIHdpdGggc29tZW9uZSB1c2luZyBtb3JlIGNhcGFj
aXR5LCBnb3R0YSBtYWtlIGEgd2hvbGUgbmV3IHN0cmluZwogICAgIGludCBuZXdDYXBhY2l0eSA9
IGV4cGFuZGVkU2l6ZShsZW5ndGgsIDApOwotICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNo
YXIgKj4oa2pzX2Zhc3RfbWFsbG9jKHNpemVvZihVQ2hhcikgKiBuZXdDYXBhY2l0eSkpOworICAg
IFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIp
ICogbmV3Q2FwYWNpdHkpKTsKICAgICBtZW1jcHkoZCwgZGF0YSgpLCB0aGlzU2l6ZSAqIHNpemVv
ZihVQ2hhcikpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdFNpemU7ICsraSkKICAgICAgIGRb
dGhpc1NpemUraV0gPSB0W2ldOwpAQCAtNzYxLDcgKzc2MCw3IEBAIFVTdHJpbmcgJlVTdHJpbmc6
OmFwcGVuZCh1bnNpZ25lZCBzaG9ydCAKICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgLy8gdGhp
cyBpcyBlbXB0eSAtIG11c3QgbWFrZSBhIG5ldyByZXAgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRv
IHBvbGx1dGUgdGhlIHNoYXJlZCBlbXB0eSBvbmUgCiAgICAgaW50IG5ld0NhcGFjaXR5ID0gZXhw
YW5kZWRTaXplKDEsIDApOwotICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oa2pz
X2Zhc3RfbWFsbG9jKHNpemVvZihVQ2hhcikgKiBuZXdDYXBhY2l0eSkpOworICAgIFVDaGFyICpk
ID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbmV3Q2Fw
YWNpdHkpKTsKICAgICBkWzBdID0gYzsKICAgICByZWxlYXNlKCk7CiAgICAgcmVwID0gUmVwOjpj
cmVhdGUoZCwgMSk7CkBAIC03ODQsNyArNzgzLDcgQEAgVVN0cmluZyAmVVN0cmluZzo6YXBwZW5k
KHVuc2lnbmVkIHNob3J0IAogICB9IGVsc2UgewogICAgIC8vIHRoaXMgaXMgc2hhcmVkIHdpdGgg
c29tZW9uZSB1c2luZyBtb3JlIGNhcGFjaXR5LCBnb3R0YSBtYWtlIGEgd2hvbGUgbmV3IHN0cmlu
ZwogICAgIGludCBuZXdDYXBhY2l0eSA9IGV4cGFuZGVkU2l6ZSgobGVuZ3RoICsgMSksIDApOwot
ICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oa2pzX2Zhc3RfbWFsbG9jKHNpemVv
ZihVQ2hhcikgKiBuZXdDYXBhY2l0eSkpOworICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNo
YXIgKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbmV3Q2FwYWNpdHkpKTsKICAgICBtZW1j
cHkoZCwgZGF0YSgpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKICAgICBkW2xlbmd0aF0gPSBj
OwogICAgIHJlbGVhc2UoKTsKQEAgLTg0Niw3ICs4NDUsNyBAQCBVU3RyaW5nICZVU3RyaW5nOjpv
cGVyYXRvcj0oY29uc3QgY2hhciAqCiAgICAgcmVwLT5faGFzaCA9IDA7CiAgIH0gZWxzZSB7CiAg
ICAgcmVsZWFzZSgpOwotICAgIGQgPSBzdGF0aWNfY2FzdDxVQ2hhciAqPihranNfZmFzdF9tYWxs
b2Moc2l6ZW9mKFVDaGFyKSAqIGwpKTsKKyAgICBkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oZmFz
dE1hbGxvYyhzaXplb2YoVUNoYXIpICogbCkpOwogICAgIHJlcCA9IFJlcDo6Y3JlYXRlKGQsIGwp
OwogICB9CiAgIGZvciAoaW50IGkgPSAwOyBpIDwgbDsgaSsrKQpAQCAtMTE1Miw3ICsxMTUxLDcg
QEAgdm9pZCBVU3RyaW5nOjpkZXRhY2goKQogewogICBpZiAocmVwLT5yYyA+IDEgfHwgcmVwLT5i
YXNlU3RyaW5nKSB7CiAgICAgaW50IGwgPSBzaXplKCk7Ci0gICAgVUNoYXIgKm4gPSBzdGF0aWNf
Y2FzdDxVQ2hhciAqPihranNfZmFzdF9tYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIGwpKTsKKyAgICBV
Q2hhciAqbiA9IHN0YXRpY19jYXN0PFVDaGFyICo+KGZhc3RNYWxsb2Moc2l6ZW9mKFVDaGFyKSAq
IGwpKTsKICAgICBtZW1jcHkobiwgZGF0YSgpLCBsICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgcmVs
ZWFzZSgpOwogICAgIHJlcCA9IFJlcDo6Y3JlYXRlKG4sIGwpOwpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL3VzdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlw
dENvcmUva2pzL3VzdHJpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MApkaWZmIC1wIC11
IC1yMS40MCBKYXZhU2NyaXB0Q29yZS9ranMvdXN0cmluZy5oCi0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvdXN0cmluZy5oCTE2IFNlcCAyMDA1IDIyOjQyOjMwIC0wMDAwCTEuNDAKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy91c3RyaW5nLmgJMjcgU2VwIDIwMDUgMDc6MTY6NTAgLTAwMDAKQEAgLTI0LDcg
KzI0LDcgQEAKICNpZm5kZWYgX0tKU19VU1RSSU5HX0hfCiAjZGVmaW5lIF9LSlNfVVNUUklOR19I
XwogCi0jaW5jbHVkZSAiZmFzdF9tYWxsb2MuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9GYXN0TWFs
bG9jLmg+CiAKICNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC0x
OTMsNyArMTkzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIC8qKgogICAgKiBAc2hvcnQgVW5pY29k
ZSBzdHJpbmcgY2xhc3MKICAgICovCi0gIGNsYXNzIFVTdHJpbmcgeworICBjbGFzcyBVU3RyaW5n
IDogcHVibGljIEZhc3RBbGxvY2F0ZWQgewogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29u
c3QgVVN0cmluZyYsIGNvbnN0IFVTdHJpbmcmKTsKICAgICBmcmllbmQgY2xhc3MgVUNoYXJSZWZl
cmVuY2U7CiAgICAgZnJpZW5kIGNsYXNzIElkZW50aWZpZXI7CkBAIC0yMDQsNiArMjA0LDkgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICogQGludGVybmFsCiAgICAgICovCiAgICAgc3RydWN0IFJl
cCB7CisKKyAgICAgIEZBU1RfQUxMT0NBVEVEX1BPRDsKKwogICAgICAgc3RhdGljIFJlcCAqY3Jl
YXRlKFVDaGFyICpkLCBpbnQgbCk7CiAgICAgICBzdGF0aWMgUmVwICpjcmVhdGVDb3B5aW5nKGNv
bnN0IFVDaGFyICpkLCBpbnQgbCk7CiAgICAgICBzdGF0aWMgUmVwICpjcmVhdGUoUmVwICpiYXNl
LCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKTsKQEAgLTIxNiw4ICsyMTksNiBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBVQ2hhciAqLCBp
bnQgbGVuZ3RoKTsKICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBjaGFy
ICopOwogCi0gICAgICBLSlNfRkFTVF9BTExPQ0FURUQ7Ci0KICAgICAgIHZvaWQgcmVmKCkgeyAr
K3JjOyB9CiAgICAgICB2b2lkIGRlcmVmKCkgeyBpZiAoLS1yYyA9PSAwKSBkZXN0cm95KCk7IH0K
IApAQCAtMjkxLDggKzI5Miw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqLwogICAgIH5VU3Ry
aW5nKCkgeyByZWxlYXNlKCk7IH0KIAotICAgIEtKU19GQVNUX0FMTE9DQVRFRDsKLQogICAgIC8q
KgogICAgICAqIENvbnN0cnVjdHMgYSBzdHJpbmcgZnJvbSBhbiBpbnQuCiAgICAgICovCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9Bc3NlcnRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZToga3htbGNvcmUvQXNzZXJ0aW9ucy5oCmRpZmYgLU4gSmF2YVNjcmlwdENvcmUva3htbGNvcmUv
QXNzZXJ0aW9ucy5oCi0tLSBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9Bc3NlcnRpb25zLmgJMSBK
YW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgSmF2YVNjcmlwdENvcmUva3htbGNvcmUvQXNzZXJ0
aW9ucy5oCTI3IFNlcCAyMDA1IDA3OjE2OjUxIC0wMDAwCkBAIC0wLDAgKzEsMTY4IEBACisvLyAt
Ki0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgS1hNTENPUkVfQVNTRVJUSU9OU19ICisjZGVmaW5lIEtYTUxDT1JFX0FTU0VSVElP
TlNfSAorCisvLyBubyBuYW1lc3BhY2VzIGJlY2F1c2UgdGhpcyBmaWxlIGhhcyB0byBiZSBpbmNs
dWRhYmxlIGZyb20gQyBhbmQgT2JqZWN0aXZlLUMKKworLy8gTm90ZSwgdGhpcyBmaWxlIHVzZXMg
bWFueSBHQ0MgZXh0ZW5zaW9ucywgYnV0IGl0IHNob3VsZCBiZSBjb21wYXRpYmxlIHdpdGgKKy8v
IEMsIE9iamVjdGl2ZSBDLCBDKyssIGFuZCBPYmplY3RpdmUgQysrLgorCisvLyBGb3Igbm9uLWRl
YnVnIGJ1aWxkcywgZXZlcnl0aGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorLy8gRGVmaW5p
bmcgYW55IG9mIHRoZSBzeW1ib2xzIGV4cGxpY2l0bHkgcHJldmVudHMgdGhpcyBmcm9tIGhhdmlu
ZyBhbnkgZWZmZWN0LgorCisjaWZkZWYgTkRFQlVHCisjZGVmaW5lIEFTU0VSVElPTlNfRElTQUJM
RURfREVGQVVMVCAxCisjZWxzZQorI2RlZmluZSBBU1NFUlRJT05TX0RJU0FCTEVEX0RFRkFVTFQg
MAorI2VuZGlmCisKKyNpZm5kZWYgQVNTRVJUX0RJU0FCTEVECisjZGVmaW5lIEFTU0VSVF9ESVNB
QkxFRCBBU1NFUlRJT05TX0RJU0FCTEVEX0RFRkFVTFQKKyNlbmRpZgorCisjaWZuZGVmIEFTU0VS
VF9BUkdfRElTQUJMRUQKKyNkZWZpbmUgQVNTRVJUX0FSR19ESVNBQkxFRCBBU1NFUlRJT05TX0RJ
U0FCTEVEX0RFRkFVTFQKKyNlbmRpZgorCisjaWZuZGVmIEZBVEFMX0RJU0FCTEVECisjZGVmaW5l
IEZBVEFMX0RJU0FCTEVEIEFTU0VSVElPTlNfRElTQUJMRURfREVGQVVMVAorI2VuZGlmCisKKyNp
Zm5kZWYgRVJST1JfRElTQUJMRUQKKyNkZWZpbmUgRVJST1JfRElTQUJMRUQgQVNTRVJUSU9OU19E
SVNBQkxFRF9ERUZBVUxUCisjZW5kaWYKKworI2lmbmRlZiBMT0dfRElTQUJMRUQKKyNkZWZpbmUg
TE9HX0RJU0FCTEVEIEFTU0VSVElPTlNfRElTQUJMRURfREVGQVVMVAorI2VuZGlmCisKKy8vIFRo
ZXNlIGhlbHBlciBmdW5jdGlvbnMgYXJlIGFsd2F5cyBkZWNsYXJlZCwgYnV0IG5vdCBuZWNlc3Nh
cmlseSBhbHdheXMgZGVmaW5lZCBpZiB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBpcyBkaXNh
YmxlZC4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBl
ZGVmIGVudW0geyBLWENMb2dDaGFubmVsVW5pbml0aWFsaXplZCwgS1hDTG9nQ2hhbm5lbE9mZiwg
S1hDTG9nQ2hhbm5lbE9uIH0gS1hDTG9nQ2hhbm5lbFN0YXRlOworCit0eXBlZGVmIHN0cnVjdCB7
CisgICAgdW5zaWduZWQgbWFzazsKKyAgICBjb25zdCBjaGFyICpkZWZhdWx0TmFtZTsKKyAgICBL
WENMb2dDaGFubmVsU3RhdGUgc3RhdGU7Cit9IEtYQ0xvZ0NoYW5uZWw7CisgICAgCit2b2lkIEtY
Q1JlcG9ydEFzc2VydGlvbkZhaWx1cmUoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0
IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICphc3NlcnRpb24pOwordm9pZCBLWENSZXBvcnRB
c3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2UoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNv
bnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICphc3NlcnRpb24sIGNvbnN0IGNoYXIgKmZv
cm1hdCwgLi4uKTsKK3ZvaWQgS1hDUmVwb3J0QXJndW1lbnRBc3NlcnRpb25GYWlsdXJlKGNvbnN0
IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAq
YXJnTmFtZSwgY29uc3QgY2hhciAqYXNzZXJ0aW9uKTsKK3ZvaWQgS1hDUmVwb3J0RmF0YWxFcnJv
cihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0
IGNoYXIgKmZvcm1hdCwgLi4uKSA7Cit2b2lkIEtYQ1JlcG9ydEVycm9yKGNvbnN0IGNoYXIgKmZp
bGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm9ybWF0LCAu
Li4pOwordm9pZCBLWENMb2coY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIg
KmZ1bmN0aW9uLCBLWENMb2dDaGFubmVsICpjaGFubmVsLCBjb25zdCBjaGFyICpmb3JtYXQsIC4u
Lik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKy8vIENSQVNIIC0tIGdldHMg
dXMgaW50byB0aGUgZGVidWdnZXIgb3IgdGhlIGNyYXNoIHJlcG9ydGVyIC0tIHNpZ25hbHMgYXJl
IGlnbm9yZWQgYnkgdGhlIGNyYXNoIHJlcG9ydGVyIHNvIHdlIG11c3QgZG8gYmV0dGVyCisKKyNk
ZWZpbmUgQ1JBU0goKSAqKGludCAqKTB4YmJhZGJlZWYgPSAwCisKKy8vIEFTU0VSVCwgQVNTRVJU
X1dJVEhfTUVTU0FHRSwgQVNTRVJUX05PVF9SRUFDSEVECisKKyNpZiBBU1NFUlRfRElTQUJMRUQK
KworI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSAoKHZvaWQpMCkKKyNkZWZpbmUgQVNTRVJUX1dJ
VEhfTUVTU0FHRShhc3NlcnRpb24sIGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQorI2RlZmlu
ZSBBU1NFUlRfTk9UX1JFQUNIRUQoKSAoKHZvaWQpMCkKKworI2Vsc2UKKworI2RlZmluZSBBU1NF
UlQoYXNzZXJ0aW9uKSBkbyBcCisgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBcCisgICAgICAgIEtY
Q1JlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBfX1BSRVRUWV9GVU5D
VElPTl9fLCAjYXNzZXJ0aW9uKTsgXAorICAgICAgICBDUkFTSCgpOyBcCisgICAgfSBcCit3aGls
ZSAoMCkKKyNkZWZpbmUgQVNTRVJUX1dJVEhfTUVTU0FHRShhc3NlcnRpb24sIGZvcm1hdEFuZEFy
Z3MuLi4pIGRvIFwKKyAgICBpZiAoIShhc3NlcnRpb24pKSB7IFwKKyAgICAgICAgS1hDUmVwb3J0
QXNzZXJ0aW9uRmFpbHVyZVdpdGhNZXNzYWdlKF9fRklMRV9fLCBfX0xJTkVfXywgX19QUkVUVFlf
RlVOQ1RJT05fXywgI2Fzc2VydGlvbiwgZm9ybWF0QW5kQXJncyk7IFwKKyAgICAgICAgQ1JBU0go
KTsgXAorICAgIH0gXAord2hpbGUgKDApCisjZGVmaW5lIEFTU0VSVF9OT1RfUkVBQ0hFRCgpIGRv
IHsgXAorICAgIEtYQ1JlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBf
X1BSRVRUWV9GVU5DVElPTl9fLCAwKTsgXAorICAgIENSQVNIKCk7IFwKK30gd2hpbGUgKDApCisK
KyNlbmRpZgorCisvLyBBU1NFUlRfQVJHCisKKyNpZiBBU1NFUlRfQVJHX0RJU0FCTEVECisKKyNk
ZWZpbmUgQVNTRVJUX0FSRyhhcmdOYW1lLCBhc3NlcnRpb24pICgodm9pZCkwKQorCisjZWxzZQor
CisjZGVmaW5lIEFTU0VSVF9BUkcoYXJnTmFtZSwgYXNzZXJ0aW9uKSBkbyBcCisgICAgaWYgKCEo
YXNzZXJ0aW9uKSkgeyBcCisgICAgICAgIEtYQ1JlcG9ydEFyZ3VtZW50QXNzZXJ0aW9uRmFpbHVy
ZShfX0ZJTEVfXywgX19MSU5FX18sIF9fUFJFVFRZX0ZVTkNUSU9OX18sICNhcmdOYW1lLCAjYXNz
ZXJ0aW9uKTsgXAorICAgICAgICBDUkFTSCgpOyBcCisgICAgfSBcCit3aGlsZSAoMCkKKworI2Vu
ZGlmCisKKy8vIEZBVEFMCisKKyNpZiBGQVRBTF9ESVNBQkxFRAorI2RlZmluZSBGQVRBTChmb3Jt
YXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKKyNlbHNlCisjZGVmaW5lIEZBVEFMKGZvcm1hdEFuZEFy
Z3MuLi4pIGRvIHsgXAorICAgIEtYQ1JlcG9ydEZhdGFsRXJyb3IoX19GSUxFX18sIF9fTElORV9f
LCBfX1BSRVRUWV9GVU5DVElPTl9fLCBmb3JtYXRBbmRBcmdzKTsgXAorICAgIENSQVNIKCk7IFwK
K30gd2hpbGUgKDApCisjZW5kaWYKKworLy8gRVJST1IKKworI2lmIEVSUk9SX0RJU0FCTEVECisj
ZGVmaW5lIEVSUk9SKGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQorI2Vsc2UKKyNkZWZpbmUg
RVJST1IoZm9ybWF0QW5kQXJncy4uLikgS1hDUmVwb3J0RXJyb3IoX19GSUxFX18sIF9fTElORV9f
LCBfX1BSRVRUWV9GVU5DVElPTl9fLCBmb3JtYXRBbmRBcmdzKQorI2VuZGlmCisKKy8vIExPRwor
CisjaWYgTE9HX0RJU0FCTEVECisjZGVmaW5lIExPRyhjaGFubmVsLCBmb3JtYXRBbmRBcmdzLi4u
KSAoKHZvaWQpMCkKKyNlbHNlCisjZGVmaW5lIExPRyhjaGFubmVsLCBmb3JtYXRBbmRBcmdzLi4u
KSBLWENMb2coX19GSUxFX18sIF9fTElORV9fLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAmSk9JTl9M
T0dfQ0hBTk5FTF9XSVRIX1BSRUZJWChMT0dfQ0hBTk5FTF9QUkVGSVgsIGNoYW5uZWwpLCBmb3Jt
YXRBbmRBcmdzKQorI2RlZmluZSBKT0lOX0xPR19DSEFOTkVMX1dJVEhfUFJFRklYKHByZWZpeCwg
Y2hhbm5lbCkgSk9JTl9MT0dfQ0hBTk5FTF9XSVRIX1BSRUZJWF9MRVZFTF8yKHByZWZpeCwgY2hh
bm5lbCkKKyNkZWZpbmUgSk9JTl9MT0dfQ0hBTk5FTF9XSVRIX1BSRUZJWF9MRVZFTF8yKHByZWZp
eCwgY2hhbm5lbCkgcHJlZml4ICMjIGNoYW5uZWwKKyNlbmRpZgorCisjZW5kaWYgLy8gS1hNTENP
UkVfQVNTRVJUSU9OU19ICkluZGV4OiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9Bc3NlcnRpb25z
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt4bWxjb3JlL0Fzc2VydGlvbnMubW0KZGlmZiAtTiBK
YXZhU2NyaXB0Q29yZS9reG1sY29yZS9Bc3NlcnRpb25zLm1tCi0tLSBKYXZhU2NyaXB0Q29yZS9r
eG1sY29yZS9Bc3NlcnRpb25zLm1tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIEphdmFT
Y3JpcHRDb3JlL2t4bWxjb3JlL0Fzc2VydGlvbnMubW0JMjcgU2VwIDIwMDUgMDc6MTY6NTEgLTAw
MDAKQEAgLTAsMCArMSwxNDQgQEAKKy8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0
IC0qLQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKKworI2Rl
ZmluZSBTVVBQT1JUX09CSkNfTE9HR0lORyAxCisKKyNpZiBTVVBQT1JUX09CSkNfTE9HR0lORwor
I2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGU3RyaW5nLmg+CisjZW5kaWYKKworI2luY2x1ZGUg
PEZvdW5kYXRpb24vTlNTdHJpbmcuaD4KKyNpbmNsdWRlIDxGb3VuZGF0aW9uL05TVXNlckRlZmF1
bHRzLmg+CisjaW5jbHVkZSA8Rm91bmRhdGlvbi9OU1NjYW5uZXIuaD4KKworZXh0ZXJuICJDIiB7
CisKK3N0YXRpYyBpbnQgKCogdmZwcmludGZfbm9fd2FybmluZykoRklMRSAqLCBjb25zdCBjaGFy
ICosIHZhX2xpc3QpID0gdmZwcmludGY7CisKK3N0YXRpYyB2b2lkIHZwcmludGZfc3RkZXJyX29i
amMoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisjaWYgU1VQUE9SVF9PQkpD
X0xPR0dJTkcKKyAgICBpZiAoIXN0cnN0cihmb3JtYXQsICIlQCIpKSB7CisgICAgICAgIENGU3Ry
aW5nUmVmIGNmRm9ybWF0ID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhOVUxMLCBmb3JtYXQs
IGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7CisgICAgICAgIENGU3RyaW5nUmVmIHN0ciA9IENGU3Ry
aW5nQ3JlYXRlV2l0aEZvcm1hdEFuZEFyZ3VtZW50cyhOVUxMLCBOVUxMLCBjZkZvcm1hdCwgYXJn
cyk7CisgICAgICAgIAorICAgICAgICBpbnQgbGVuZ3RoID0gQ0ZTdHJpbmdHZXRNYXhpbXVtU2l6
ZUZvckVuY29kaW5nKENGU3RyaW5nR2V0TGVuZ3RoKHN0ciksIGtDRlN0cmluZ0VuY29kaW5nVVRG
OCk7CisgICAgICAgIGNoYXIgKmJ1ZmZlciA9IChjaGFyICopbWFsbG9jKGxlbmd0aCArIDEpOwor
CisgICAgICAgIENGU3RyaW5nR2V0Q1N0cmluZyhzdHIsIGJ1ZmZlciwgbGVuZ3RoLCBrQ0ZTdHJp
bmdFbmNvZGluZ1VURjgpOworCisgICAgICAgIGZwdXRzKGJ1ZmZlciwgc3RkZXJyKTsKKworICAg
ICAgICBmcmVlKGJ1ZmZlcik7CisgICAgICAgIENGUmVsZWFzZShzdHIpOworICAgICAgICBDRlJl
bGVhc2UoY2ZGb3JtYXQpOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHZmcHJpbnRmX25v
X3dhcm5pbmcoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpOworfQorCit2b2lkIEtYQ1JlcG9ydEFzc2Vy
dGlvbkZhaWx1cmUoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmN0
aW9uLCBjb25zdCBjaGFyICphc3NlcnRpb24pCit7CisgICAgaWYgKGFzc2VydGlvbikKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICI9PT09PT09PT09PT09PT09PVxuQVNTRVJUSU9OIEZBSUxFRDog
JXMgKCVzOiVkICVzKVxuPT09PT09PT09PT09PT09PT1cbiIsIGFzc2VydGlvbiwgZmlsZSwgbGlu
ZSwgZnVuY3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICI9PT09PT09
PT09PT09PT09PVxuU0hPVUxEIE5FVkVSIEJFIFJFQUNIRUQgKCVzOiVkICVzKVxuPT09PT09PT09
PT09PT09PT1cbiIsIGZpbGUsIGxpbmUsIGZ1bmN0aW9uKTsKK30KKwordm9pZCBLWENSZXBvcnRB
c3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2UoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNv
bnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICphc3NlcnRpb24sIGNvbnN0IGNoYXIgKmZv
cm1hdCwgLi4uKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiPT09PT09PT09PT09PT09PT1cbkFT
U0VSVElPTiBGQUlMRUQ6ICIpOworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdz
LCBmb3JtYXQpOworICAgIHZwcmludGZfc3RkZXJyX29iamMoZm9ybWF0LCBhcmdzKTsKKyAgICB2
YV9lbmQoYXJncyk7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiVzICglczolZCAlcylcbj09PT09
PT09PT09PT09PT09XG4iLCBhc3NlcnRpb24sIGZpbGUsIGxpbmUsIGZ1bmN0aW9uKTsKK30KKwor
dm9pZCBLWENSZXBvcnRBcmd1bWVudEFzc2VydGlvbkZhaWx1cmUoY29uc3QgY2hhciAqZmlsZSwg
aW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICphcmdOYW1lLCBjb25z
dCBjaGFyICphc3NlcnRpb24pCit7CisgICAgZnByaW50ZihzdGRlcnIsICI9PT09PT09PT09PT09
PT09PVxuQVJHVU1FTlQgQkFEOiAlcywgJXMgKCVzOiVkICVzKVxuPT09PT09PT09PT09PT09PT1c
biIsIGFyZ05hbWUsIGFzc2VydGlvbiwgZmlsZSwgbGluZSwgZnVuY3Rpb24pOworfQorCit2b2lk
IEtYQ1JlcG9ydEZhdGFsRXJyb3IoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNo
YXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIj09PT09PT09PT09PT09PT09XG5GQVRBTCBFUlJPUjogIik7CisgICAgdmFfbGlzdCBh
cmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgdnByaW50Zl9zdGRlcnJfb2Jq
Yyhmb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwg
IlxuKCVzOiVkICVzKVxuPT09PT09PT09PT09PT09PT1cbiIsIGZpbGUsIGxpbmUsIGZ1bmN0aW9u
KTsKK30KKwordm9pZCBLWENSZXBvcnRFcnJvcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwg
Y29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIGZw
cmludGYoc3RkZXJyLCAiPT09PT09PT09PT09PT09PT1cbkVSUk9SOiAiKTsKKyAgICB2YV9saXN0
IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICB2cHJpbnRmX3N0ZGVycl9v
YmpjKGZvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworICAgIGZwcmludGYoc3RkZXJy
LCAiXG4oJXM6JWQgJXMpXG49PT09PT09PT09PT09PT09PVxuIiwgZmlsZSwgbGluZSwgZnVuY3Rp
b24pOworfQorCitzdGF0aWMgdm9pZCBmcHJpbnRmX29iamMoY29uc3QgY2hhciAqZm9ybWF0LCAu
Li4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Cisg
ICAgdnByaW50Zl9zdGRlcnJfb2JqYyhmb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsK
K30KKworCit2b2lkIEtYQ0xvZyhjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hh
ciAqZnVuY3Rpb24sIEtYQ0xvZ0NoYW5uZWwgKmNoYW5uZWwsIGNvbnN0IGNoYXIgKmZvcm1hdCwg
Li4uKQoreworICAgIGlmIChjaGFubmVsLT5zdGF0ZSA9PSBLWENMb2dDaGFubmVsVW5pbml0aWFs
aXplZCkgeworICAgICAgICBjaGFubmVsLT5zdGF0ZSA9IEtYQ0xvZ0NoYW5uZWxPZmY7CisgICAg
ICAgIE5TU3RyaW5nICpsb2dMZXZlbFN0cmluZyA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIG9iamVjdEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6Y2hh
bm5lbC0+ZGVmYXVsdE5hbWVdXTsKKyAgICAgICAgaWYgKGxvZ0xldmVsU3RyaW5nKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBsb2dMZXZlbDsKKyAgICAgICAgICAgIGlmICghW1tOU1NjYW5uZXIg
c2Nhbm5lcldpdGhTdHJpbmc6bG9nTGV2ZWxTdHJpbmddIHNjYW5IZXhJbnQ6JmxvZ0xldmVsXSkg
eworICAgICAgICAgICAgICAgIGZwcmludGZfb2JqYygidW5hYmxlIHRvIHBhcnNlIGhleCB2YWx1
ZSBmb3IgJXMgKCVAKSwgbG9nZ2luZyBpcyBvZmYiLCBjaGFubmVsLT5kZWZhdWx0TmFtZSwgbG9n
TGV2ZWxTdHJpbmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChsb2dMZXZlbCAm
IGNoYW5uZWwtPm1hc2spID09IGNoYW5uZWwtPm1hc2spIHsKKyAgICAgICAgICAgICAgICBjaGFu
bmVsLT5zdGF0ZSA9IEtYQ0xvZ0NoYW5uZWxPbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBpZiAoY2hhbm5lbC0+c3RhdGUgIT0gS1hDTG9nQ2hhbm5lbE9uKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFy
Z3MsIGZvcm1hdCk7CisgICAgdnByaW50Zl9zdGRlcnJfb2JqYyhmb3JtYXQsIGFyZ3MpOworICAg
IHZhX2VuZChhcmdzKTsKKyAgICBpZiAoZm9ybWF0W3N0cmxlbihmb3JtYXQpIC0gMV0gIT0gJ1xu
JykKKyAgICAgICAgcHV0YygnXG4nLCBzdGRlcnIpOworfQorCit9IC8vIGV4dGVybiAiQyIKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IGt4bWxjb3JlL0Zhc3RNYWxsb2MuY3BwCmRpZmYgLU4gSmF2YVNjcmlwdENvcmUva3ht
bGNvcmUvRmFzdE1hbGxvYy5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0Zhc3RNYWxs
b2MuY3BwCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIEphdmFTY3JpcHRDb3JlL2t4bWxj
b3JlL0Zhc3RNYWxsb2MuY3BwCTI3IFNlcCAyMDA1IDA3OjE2OjUxIC0wMDAwCkBAIC0wLDAgKzEs
MjIyNiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDA1LCBHb29nbGUgSW5jLgorLy8gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIAorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6
CisvLyAKKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
IAorLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworLy8gLS0tCisvLyBBdXRob3I6IFNhbmpheSBHaGVtYXdhdCA8b3BlbnNvdXJjZUBnb29n
bGUuY29tPgorLy8KKy8vIEEgbWFsbG9jIHRoYXQgdXNlcyBhIHBlci10aHJlYWQgY2FjaGUgdG8g
c2F0aXNmeSBzbWFsbCBtYWxsb2MgcmVxdWVzdHMuCisvLyAoVGhlIHRpbWUgZm9yIG1hbGxvYy9m
cmVlIG9mIGEgc21hbGwgb2JqZWN0IGRyb3BzIGZyb20gMzAwIG5zIHRvIDUwIG5zLikKKy8vCisv
LyBTZWUgZG9jL3RjbWFsbG9jLmh0bWwgZm9yIGEgaGlnaC1sZXZlbAorLy8gZGVzY3JpcHRpb24g
b2YgaG93IHRoaXMgbWFsbG9jIHdvcmtzLgorLy8KKy8vIFNZTkNIUk9OSVpBVElPTgorLy8gIDEu
IFRoZSB0aHJlYWQtc3BlY2lmaWMgbGlzdHMgYXJlIGFjY2Vzc2VkIHdpdGhvdXQgYWNxdWlyaW5n
IGFueSBsb2Nrcy4KKy8vICAgICBUaGlzIGlzIHNhZmUgYmVjYXVzZSBlYWNoIHN1Y2ggbGlzdCBp
cyBvbmx5IGFjY2Vzc2VkIGJ5IG9uZSB0aHJlYWQuCisvLyAgMi4gV2UgaGF2ZSBhIGxvY2sgcGVy
IGNlbnRyYWwgZnJlZS1saXN0LCBhbmQgaG9sZCBpdCB3aGlsZSBtYW5pcHVsYXRpbmcKKy8vICAg
ICB0aGUgY2VudHJhbCBmcmVlIGxpc3QgZm9yIGEgcGFydGljdWxhciBzaXplLgorLy8gIDMuIFRo
ZSBjZW50cmFsIHBhZ2UgYWxsb2NhdG9yIGlzIHByb3RlY3RlZCBieSAicGFnZWhlYXBfbG9jayIu
CisvLyAgNC4gVGhlIHBhZ2VtYXAgKHdoaWNoIG1hcHMgZnJvbSBwYWdlLW51bWJlciB0byBkZXNj
cmlwdG9yKSwKKy8vICAgICBjYW4gYmUgcmVhZCB3aXRob3V0IGhvbGRpbmcgYW55IGxvY2tzLCBh
bmQgd3JpdHRlbiB3aGlsZSBob2xkaW5nCisvLyAgICAgdGhlICJwYWdlaGVhcF9sb2NrIi4KKy8v
CisvLyAgICAgVGhpcyBtdWx0aS10aHJlYWRlZCBhY2Nlc3MgdG8gdGhlIHBhZ2VtYXAgaXMgc2Fm
ZSBmb3IgZmFpcmx5CisvLyAgICAgc3VidGxlIHJlYXNvbnMuICBXZSBiYXNpY2FsbHkgYXNzdW1l
IHRoYXQgd2hlbiBhbiBvYmplY3QgWCBpcworLy8gICAgIGFsbG9jYXRlZCBieSB0aHJlYWQgQSBh
bmQgZGVhbGxvY2F0ZWQgYnkgdGhyZWFkIEIsIHRoZXJlIG11c3QKKy8vICAgICBoYXZlIGJlZW4g
YXBwcm9wcmlhdGUgc3luY2hyb25pemF0aW9uIGluIHRoZSBoYW5kb2ZmIG9mIG9iamVjdAorLy8g
ICAgIFggZnJvbSB0aHJlYWQgQSB0byB0aHJlYWQgQi4KKy8vCisvLyBUT0RPOiBCaWFzIHJlY2xh
bWF0aW9uIHRvIGxhcmdlciBhZGRyZXNzZXMKKy8vIFRPRE86IGltcGxlbWVudCBtYWxsaW5mby9t
YWxsb3B0CisvLyBUT0RPOiBCZXR0ZXIgdGVzdGluZworLy8gVE9ETzogUmV0dXJuIG1lbW9yeSB0
byBzeXN0ZW0KKy8vCisvLyA5LzI4LzIwMDMgKG5ldyBwYWdlLWxldmVsIGFsbG9jYXRvciByZXBs
YWNlcyBwdG1hbGxvYzIpOgorLy8gKiBtYWxsb2MvZnJlZSBvZiBzbWFsbCBvYmplY3RzIGdvZXMg
ZnJvbSB+MzAwIG5zIHRvIH41MCBucy4KKy8vICogYWxsb2NhdGlvbiBvZiBhIHJlYXNvbmFibHkg
Y29tcGxpY2F0ZWQgc3RydWN0CisvLyAgIGdvZXMgZnJvbSBhYm91dCAxMTAwIG5zIHRvIGFib3V0
IDMwMCBucy4KKworI2luY2x1ZGUgIkZhc3RNYWxsb2MuaCIKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGRlZi5o
PgorI2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VsaWYg
ZGVmaW5lZCBIQVZFX0lOVFRZUEVTX0gKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2Vsc2UKKyNp
bmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1
ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgor
I2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgIlRDU3BpbkxvY2suaCIKKyNpbmNsdWRlICJU
Q1BhZ2VNYXAuaCIKKyNpbmNsdWRlICJUQ1N5c3RlbUFsbG9jLmgiCisKKyNpbmNsdWRlICJBc3Nl
cnRpb25zLmgiCisKKyNpZiBLWENfQ0hBTkdFUworbmFtZXNwYWNlIEtYTUxDb3JlIHsKKworI2Rl
ZmluZSBtYWxsb2MgZmFzdE1hbGxvYworI2RlZmluZSBjYWxsb2MgZmFzdENhbGxvYworI2RlZmlu
ZSBmcmVlIGZhc3RGcmVlCisjZGVmaW5lIHJlYWxsb2MgZmFzdFJlYWxsb2MKKworI2RlZmluZSBN
RVNTQUdFIEVSUk9SCisjZGVmaW5lIENIRUNLX0NPTkRJVElPTiBBU1NFUlQKKworI2VuZGlmCisK
KyNpZiBkZWZpbmVkIEhBVkVfSU5UVFlQRVNfSAorI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JP
UworI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZGVmaW5lIExMVSAgIFBSSXU2NAorI2Vsc2UKKyNk
ZWZpbmUgTExVICAgImxsdSIgICAgICAgICAgICAgIC8vIGhvcGUgZm9yIHRoZSBiZXN0CisjZW5k
aWYKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb25maWd1cmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8g
Tm90IGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJz
IG1ha2UKKy8vIHNlbnNlLiAgSW4gcGFydGljdWxhciwgaWYga01heFNpemUgaW5jcmVhc2VzLCB5
b3UgbWF5IGhhdmUgdG8KKy8vIGluY3JlYXNlIGtOdW1DbGFzc2VzIGFzIHdlbGwuCitzdGF0aWMg
Y29uc3Qgc2l6ZV90IGtQYWdlU2hpZnQgID0gMTI7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGtQYWdl
U2l6ZSAgID0gMSA8PCBrUGFnZVNoaWZ0Oworc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4U2l6ZSAg
ICA9IDh1ICoga1BhZ2VTaXplOworc3RhdGljIGNvbnN0IHNpemVfdCBrQWxpZ25TaGlmdCA9IDM7
CitzdGF0aWMgY29uc3Qgc2l6ZV90IGtBbGlnbm1lbnQgID0gMSA8PCBrQWxpZ25TaGlmdDsKK3N0
YXRpYyBjb25zdCBzaXplX3Qga051bUNsYXNzZXMgPSAxNzA7CisKKy8vIE1pbmltdW0gbnVtYmVy
IG9mIHBhZ2VzIHRvIGZldGNoIGZyb20gc3lzdGVtIGF0IGEgdGltZS4gIE11c3QgYmUKKy8vIHNp
Z25pZmljYW50bHkgYmlnZ2VyIHRoYW4ga0Jsb2NrU2l6ZSB0byBhbW9ydGl6ZSBzeXN0ZW0tY2Fs
bAorLy8gb3ZlcmhlYWQsIGFuZCBhbHNvIHRvIHJlZHVjZSBleHRlcm5hbCBmcmFnZW1lbnRhdGlv
bi4gIEFsc28sIHdlCisvLyBzaG91bGQga2VlcCB0aGlzIHZhbHVlIGJpZyBiZWNhdXNlIHZhcmlv
dXMgaW5jYXJuYXRpb25zIG9mIExpbnV4CisvLyBoYXZlIHNtYWxsIGxpbWl0cyBvbiB0aGUgbnVt
YmVyIG9mIG1tYXAoKSByZWdpb25zIHBlcgorLy8gYWRkcmVzcy1zcGFjZS4KK3N0YXRpYyBjb25z
dCBzaXplX3Qga01pblN5c3RlbUFsbG9jID0gMSA8PCAoMjAgLSBrUGFnZVNoaWZ0KTsKKworLy8g
TnVtYmVyIG9mIG9iamVjdHMgdG8gbW92ZSBiZXR3ZWVuIGEgcGVyLXRocmVhZCBsaXN0IGFuZCBh
IGNlbnRyYWwKKy8vIGxpc3QgaW4gb25lIHNob3QuICBXZSB3YW50IHRoaXMgdG8gYmUgbm90IHRv
byBzbWFsbCBzbyB3ZSBjYW4KKy8vIGFtb3J0aXplIHRoZSBsb2NrIG92ZXJoZWFkIGZvciBhY2Nl
c3NpbmcgdGhlIGNlbnRyYWwgbGlzdC4gIE1ha2luZworLy8gaXQgdG9vIGJpZyBtYXkgdGVtcG9y
YXJpbHkgY2F1c2UgdW5uZWNlc3NhcnkgbWVtb3J5IHdhc3RhZ2UgaW4gdGhlCisvLyBwZXItdGhy
ZWFkIGZyZWUgbGlzdCB1bnRpbCB0aGUgc2NhdmVuZ2VyIGNsZWFucyB1cCB0aGUgbGlzdC4KK3N0
YXRpYyBjb25zdCBpbnQga051bU9iamVjdHNUb01vdmUgPSAzMjsKKworLy8gTWF4aW11bSBsZW5n
dGggd2UgYWxsb3cgYSBwZXItdGhyZWFkIGZyZWUtbGlzdCB0byBoYXZlIGJlZm9yZSB3ZQorLy8g
bW92ZSBvYmplY3RzIGZyb20gaXQgaW50byB0aGUgY29ycmVzcG9uZGluZyBjZW50cmFsIGZyZWUt
bGlzdC4gIFdlCisvLyB3YW50IHRoaXMgYmlnIHRvIGF2b2lkIGxvY2tpbmcgdGhlIGNlbnRyYWwg
ZnJlZS1saXN0IHRvbyBvZnRlbi4gIEl0CisvLyBzaG91bGQgbm90IGh1cnQgdG8gbWFrZSB0aGlz
IGxpc3Qgc29tZXdoYXQgYmlnIGJlY2F1c2UgdGhlCisvLyBzY2F2ZW5naW5nIGNvZGUgd2lsbCBz
aHJpbmsgaXQgZG93biB3aGVuIGl0cyBjb250ZW50cyBhcmUgbm90IGluIHVzZS4KK3N0YXRpYyBj
b25zdCBpbnQga01heEZyZWVMaXN0TGVuZ3RoID0gMjU2OworCisvLyBMb3dlciBhbmQgdXBwZXIg
Ym91bmRzIG9uIHRoZSBwZXItdGhyZWFkIGNhY2hlIHNpemVzCitzdGF0aWMgY29uc3Qgc2l6ZV90
IGtNaW5UaHJlYWRDYWNoZVNpemUgPSBrTWF4U2l6ZSAqIDI7CitzdGF0aWMgY29uc3Qgc2l6ZV90
IGtNYXhUaHJlYWRDYWNoZVNpemUgPSAyIDw8IDIwOworCisvLyBEZWZhdWx0IGJvdW5kIG9uIHRo
ZSB0b3RhbCBhbW91bnQgb2YgdGhyZWFkIGNhY2hlcworc3RhdGljIGNvbnN0IHNpemVfdCBrRGVm
YXVsdE92ZXJhbGxUaHJlYWRDYWNoZVNpemUgPSAxNiA8PCAyMDsKKworLy8gRm9yIGFsbCBzcGFu
LWxlbmd0aHMgPCBrTWF4UGFnZXMgd2Uga2VlcCBhbiBleGFjdC1zaXplIGxpc3QuCisvLyBSRVFV
SVJFRDoga01heFBhZ2VzID49IGtNaW5TeXN0ZW1BbGxvYzsKK3N0YXRpYyBjb25zdCBzaXplX3Qg
a01heFBhZ2VzID0ga01pblN5c3RlbUFsbG9jOworCisvLyBUd2ljZSB0aGUgYXBwcm94aW1hdGUg
Z2FwIGJldHdlZW4gc2FtcGxpbmcgYWN0aW9ucy4KKy8vIEkuZS4sIHdlIHRha2Ugb25lIHNhbXBs
ZSBhcHByb3hpbWF0ZWx5IG9uY2UgZXZlcnkKKy8vICAgICAga1NhbXBsZVBhcmFtZXRlci8yCisv
LyBieXRlcyBvZiBhbGxvY2F0aW9uLCBpLmUuLCB+IG9uY2UgZXZlcnkgMTI4S0IuCisvLyBNdXN0
IGJlIGEgcHJpbWUgbnVtYmVyLgorc3RhdGljIGNvbnN0IHNpemVfdCBrU2FtcGxlUGFyYW1ldGVy
ID0gMjY2MDUzOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1hcHBpbmcgZnJvbSBzaXplIHRvIHNpemVf
Y2xhc3MgYW5kIHZpY2UgdmVyc2EKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBBIHBhaXIgb2YgYXJyYXlz
IHdlIHVzZSBmb3IgaW1wbGVtZW50aW5nIHRoZSBtYXBwaW5nIGZyb20gYSBzaXplIHRvCisvLyBp
dHMgc2l6ZSBjbGFzcy4gIEluZGV4ZWQgYnkgImZsb29yKGxnKHNpemUpKSIuCitzdGF0aWMgY29u
c3QgaW50IGtTaXplQml0cyA9IDggKiBzaXplb2Yoc2l6ZV90KTsKK3N0YXRpYyB1bnNpZ25lZCBj
aGFyIHNpemVfYmFzZVtrU2l6ZUJpdHNdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2l6ZV9zaGlm
dFtrU2l6ZUJpdHNdOworCisvLyBNYXBwaW5nIGZyb20gc2l6ZSBjbGFzcyB0byBzaXplCitzdGF0
aWMgc2l6ZV90IGNsYXNzX3RvX3NpemVba051bUNsYXNzZXNdOworCisvLyBNYXBwaW5nIGZyb20g
c2l6ZSBjbGFzcyB0byBudW1iZXIgb2YgcGFnZXMgdG8gYWxsb2NhdGUgYXQgYSB0aW1lCitzdGF0
aWMgc2l6ZV90IGNsYXNzX3RvX3BhZ2VzW2tOdW1DbGFzc2VzXTsKKworLy8gUmV0dXJuIGZsb29y
KGxvZzIobikpIGZvciBuID4gMC4KKyNpZiBkZWZpbmVkIF9faTM4Nl9fICYmIGRlZmluZWQgX19H
TlVDX18KK3N0YXRpYyBpbmxpbmUgaW50IExnRmxvb3Ioc2l6ZV90IG4pIHsKKyAgLy8gInJvIiBm
b3IgdGhlIGlucHV0IHNwZWMgbWVhbnMgdGhlIGlucHV0IGNhbiBjb21lIGZyb20gZWl0aGVyIGEK
KyAgLy8gcmVnaXN0ZXIgKCJyIikgb3Igb2Zmc2V0YWJsZSBtZW1vcnkgKCJvIikuCisgIGludCBy
ZXN1bHQ7CisgIF9fYXNtX18oImJzcmwgICUxLCAlMCIKKyAgICAgICAgICA6ICI9ciIgKHJlc3Vs
dCkgICAgICAgICAgICAgICAvLyBPdXRwdXQgc3BlYworICAgICAgICAgIDogInJvIiAobikgICAg
ICAgICAgICAgICAgICAgIC8vIElucHV0IHNwZWMKKyAgICAgICAgICA6ICJjYyIgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDbG9iYmVycyBjb25kaXRpb24tY29kZXMKKyAgICAgICAgICApOwor
ICByZXR1cm4gcmVzdWx0OworfQorCisjZWxpZiBkZWZpbmVkIF9fcHBjX18gJiYgZGVmaW5lZCBf
X0dOVUNfXworc3RhdGljIGlubGluZSBpbnQgTGdGbG9vcihzaXplX3QgbikgeworICAvLyAiciIg
Zm9yIHRoZSBpbnB1dCBzcGVjIG1lYW5zIHRoZSBpbnB1dCBtdXN0IGNvbWUgZnJvbSBhCisgIC8v
IHJlZ2lzdGVyICgiciIpCisgIGludCByZXN1bHQ7CisKKyAgX19hc21fXyAoIntjbnRsenxjbnRs
end9ICUwLCUxIiAKKyAgICAgICAgICAgOiAiPXIiIChyZXN1bHQpICAgICAgICAgICAgICAvLyBP
dXRwdXQgc3BlYworICAgICAgICAgICA6ICJyIiAobikpOyAgICAgICAgICAgICAgICAgIC8vIElu
cHV0IHNwZWMKKworICByZXR1cm4gMzEgLSByZXN1bHQ7Cit9CisKKyNlbHNlCisvLyBOb3RlOiB0
aGUgZm9sbG93aW5nIG9ubHkgd29ya3MgZm9yICJuInMgdGhhdCBmaXQgaW4gMzItYml0cywgYnV0
CisvLyB0aGF0IGlzIGZpbmUgc2luY2Ugd2Ugb25seSB1c2UgaXQgZm9yIHNtYWxsIHNpemVzLgor
c3RhdGljIGlubGluZSBpbnQgTGdGbG9vcihzaXplX3QgbikgeworICBpbnQgbG9nID0gMDsKKyAg
Zm9yIChpbnQgaSA9IDQ7IGkgPj0gMDsgLS1pKSB7CisgICAgaW50IHNoaWZ0ID0gKDEgPDwgaSk7
CisgICAgc2l6ZV90IHggPSBuID4+IHNoaWZ0OworICAgIGlmICh4ICE9IDApIHsKKyAgICAgIG4g
PSB4OworICAgICAgbG9nICs9IHNoaWZ0OworICAgIH0KKyAgfQorICBBU1NFUlQobiA9PSAxKTsK
KyAgcmV0dXJuIGxvZzsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCBTaXplQ2xhc3Mo
c2l6ZV90IHNpemUpIHsKKyAgaWYgKHNpemUgPT0gMCkgc2l6ZSA9IDE7CisgIGNvbnN0IGludCBs
ZyA9IExnRmxvb3Ioc2l6ZSk7CisgIGNvbnN0IGludCBhbGlnbiA9IHNpemVfc2hpZnRbbGddOwor
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzaXplX2Jhc2VbbGddKSArICgoc2l6ZS0xKSA+PiBh
bGlnbik7Cit9CisKKy8vIEdldCB0aGUgYnl0ZS1zaXplIGZvciBhIHNwZWNpZmllZCBjbGFzcwor
c3RhdGljIGlubGluZSBzaXplX3QgQnl0ZVNpemVGb3JDbGFzcyhzaXplX3QgY2wpIHsKKyAgcmV0
dXJuIGNsYXNzX3RvX3NpemVbY2xdOworfQorCisvLyBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGFy
cmF5cworc3RhdGljIHZvaWQgSW5pdFNpemVDbGFzc2VzKCkgeworICAvLyBTcGVjaWFsIGluaXRp
YWxpemF0aW9uIGZvciBzbWFsbCBzaXplcworICBmb3IgKHNpemVfdCBsZyA9IDA7IGxnIDwga0Fs
aWduU2hpZnQ7IGxnKyspIHsKKyAgICBzaXplX2Jhc2VbbGddID0gMTsKKyAgICBzaXplX3NoaWZ0
W2xnXSA9IGtBbGlnblNoaWZ0OworICB9CisKKyAgc2l6ZV90IG5leHRfY2xhc3MgPSAxOworICBp
bnQgYWxpZ25zaGlmdCA9IGtBbGlnblNoaWZ0OworICBpbnQgbGFzdF9sZyA9IC0xOworICBmb3Ig
KHNpemVfdCBzaXplID0ga0FsaWdubWVudDsgc2l6ZSA8PSBrTWF4U2l6ZTsgc2l6ZSArPSAoMSA8
PCBhbGlnbnNoaWZ0KSkgeworICAgIGludCBsZyA9IExnRmxvb3Ioc2l6ZSk7CisgICAgaWYgKGxn
ID4gbGFzdF9sZykgeworICAgICAgLy8gSW5jcmVhc2UgYWxpZ25tZW50IGV2ZXJ5IHNvIG9mdGVu
LgorICAgICAgLy8KKyAgICAgIC8vIFNpbmNlIHdlIGRvdWJsZSB0aGUgYWxpZ25tZW50IGV2ZXJ5
IHRpbWUgc2l6ZSBkb3VibGVzIGFuZAorICAgICAgLy8gc2l6ZSA+PSAxMjgsIHRoaXMgbWVhbnMg
dGhhdCBzcGFjZSB3YXN0ZWQgZHVlIHRvIGFsaWdubWVudCBpcworICAgICAgLy8gYXQgbW9zdCAx
Ni8xMjggaS5lLiwgMTIuNSUuICBQbHVzIHdlIGNhcCB0aGUgYWxpZ25tZW50IGF0IDI1NgorICAg
ICAgLy8gYnl0ZXMsIHNvIHRoZSBzcGFjZSB3YXN0ZWQgYXMgYSBwZXJjZW50YWdlIHN0YXJ0cyBm
YWxsaW5nIGZvcgorICAgICAgLy8gc2l6ZXMgPiAySy4KKyAgICAgIGlmICgobGcgPj0gNykgJiYg
KGFsaWduc2hpZnQgPCA4KSkgeworICAgICAgICBhbGlnbnNoaWZ0Kys7CisgICAgICB9CisgICAg
ICBzaXplX2Jhc2VbbGddID0gbmV4dF9jbGFzcyAtICgoc2l6ZS0xKSA+PiBhbGlnbnNoaWZ0KTsK
KyAgICAgIHNpemVfc2hpZnRbbGddID0gYWxpZ25zaGlmdDsKKyAgICB9CisKKyAgICBjbGFzc190
b19zaXplW25leHRfY2xhc3NdID0gc2l6ZTsKKyAgICBsYXN0X2xnID0gbGc7CisKKyAgICBuZXh0
X2NsYXNzKys7CisgIH0KKyAgaWYgKG5leHRfY2xhc3MgPj0ga051bUNsYXNzZXMpIHsKKyAgICBN
RVNTQUdFKCJ1c2VkIHVwIHRvbyBtYW55IHNpemUgY2xhc3NlczogJWRcbiIsIG5leHRfY2xhc3Mp
OworICAgIGFib3J0KCk7CisgIH0KKworICAvLyBJbml0aWFsaXplIHRoZSBudW1iZXIgb2YgcGFn
ZXMgd2Ugc2hvdWxkIGFsbG9jYXRlIHRvIHNwbGl0IGludG8KKyAgLy8gc21hbGwgb2JqZWN0cyBm
b3IgYSBnaXZlbiBjbGFzcy4KKyAgZm9yIChzaXplX3QgY2wgPSAxOyBjbCA8IG5leHRfY2xhc3M7
IGNsKyspIHsKKyAgICAvLyBBbGxvY2F0ZSBlbm91Z2ggcGFnZXMgc28gbGVmdG92ZXIgaXMgbGVz
cyB0aGFuIDEvOCBvZiB0b3RhbC4KKyAgICAvLyBUaGlzIGJvdW5kcyB3YXN0ZWQgc3BhY2UgdG8g
YXQgbW9zdCAxMi41JS4KKyAgICBzaXplX3QgcHNpemUgPSBrUGFnZVNpemU7CisgICAgY29uc3Qg
c2l6ZV90IHMgPSBjbGFzc190b19zaXplW2NsXTsKKyAgICB3aGlsZSAoKHBzaXplICUgcykgPiAo
cHNpemUgPj4gMykpIHsKKyAgICAgIHBzaXplICs9IGtQYWdlU2l6ZTsKKyAgICB9CisgICAgY2xh
c3NfdG9fcGFnZXNbY2xdID0gcHNpemUgPj4ga1BhZ2VTaGlmdDsKKyAgfQorCisgIC8vIERvdWJs
ZS1jaGVjayBzaXplcyBqdXN0IHRvIGJlIHNhZmUKKyAgZm9yIChzaXplX3Qgc2l6ZSA9IDA7IHNp
emUgPD0ga01heFNpemU7IHNpemUrKykgeworICAgIGNvbnN0IHNpemVfdCBzYyA9IFNpemVDbGFz
cyhzaXplKTsKKyAgICBpZiAoc2MgPT0gMCkgeworICAgICAgTUVTU0FHRSgiQmFkIHNpemUgY2xh
c3MgJWQgZm9yICUiIFBSSXVTICJcbiIsIHNjLCBzaXplKTsKKyAgICAgIGFib3J0KCk7CisgICAg
fQorICAgIGlmIChzYyA+IDEgJiYgc2l6ZSA8PSBjbGFzc190b19zaXplW3NjLTFdKSB7CisgICAg
ICBNRVNTQUdFKCJBbGxvY2F0aW5nIHVubmVjZXNzYXJpbHkgbGFyZ2UgY2xhc3MgJWQgZm9yICUi
IFBSSXVTCisgICAgICAgICAgICAgICJcbiIsIHNjLCBzaXplKTsKKyAgICAgIGFib3J0KCk7Cisg
ICAgfQorICAgIGlmIChzYyA+PSBrTnVtQ2xhc3NlcykgeworICAgICAgTUVTU0FHRSgiQmFkIHNp
emUgY2xhc3MgJWQgZm9yICUiIFBSSXVTICJcbiIsIHNjLCBzaXplKTsKKyAgICAgIGFib3J0KCk7
CisgICAgfQorICAgIGNvbnN0IHNpemVfdCBzID0gY2xhc3NfdG9fc2l6ZVtzY107CisgICAgaWYg
KHNpemUgPiBzKSB7CisgICAgICBNRVNTQUdFKCJCYWQgc2l6ZSAlIiBQUkl1UyAiIGZvciAlIiBQ
Ukl1UyAiIChzYyA9ICVkKVxuIiwgcywgc2l6ZSwgc2MpOworICAgICAgYWJvcnQoKTsKKyAgICB9
CisgICAgaWYgKHMgPT0gMCkgeworICAgICAgTUVTU0FHRSgiQmFkIHNpemUgJSIgUFJJdVMgIiBm
b3IgJSIgUFJJdVMgIiAoc2MgPSAlZClcbiIsIHMsIHNpemUsIHNjKTsKKyAgICAgIGFib3J0KCk7
CisgICAgfQorICB9Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNpbXBsZSBhbGxvY2F0
b3IgZm9yIG9iamVjdHMgb2YgYSBzcGVjaWZpZWQgdHlwZS4gIEV4dGVybmFsIGxvY2tpbmcKKy8v
IGlzIHJlcXVpcmVkIGJlZm9yZSBhY2Nlc3Npbmcgb25lIG9mIHRoZXNlIG9iamVjdHMuCisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKy8vIE1ldGFkYXRhIGFsbG9jYXRvciAtLSBrZWVwcyBzdGF0cyBh
Ym91dCBob3cgbWFueSBieXRlcyBhbGxvY2F0ZWQKK3N0YXRpYyB1aW50NjRfdCBtZXRhZGF0YV9z
eXN0ZW1fYnl0ZXMgPSAwOworc3RhdGljIHZvaWQqIE1ldGFEYXRhQWxsb2Moc2l6ZV90IGJ5dGVz
KSB7CisgIHZvaWQqIHJlc3VsdCA9IFRDTWFsbG9jX1N5c3RlbUFsbG9jKGJ5dGVzKTsKKyAgaWYg
KHJlc3VsdCAhPSBOVUxMKSB7CisgICAgbWV0YWRhdGFfc3lzdGVtX2J5dGVzICs9IGJ5dGVzOwor
ICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorY2xhc3MgUGFn
ZUhlYXBBbGxvY2F0b3IgeworIHByaXZhdGU6CisgIC8vIEhvdyBtdWNoIHRvIGFsbG9jYXRlIGZy
b20gc3lzdGVtIGF0IGEgdGltZQorICBzdGF0aWMgY29uc3QgaW50IGtBbGxvY0luY3JlbWVudCA9
IDMyIDw8IDEwOworCisgIC8vIEFsaWduZWQgc2l6ZSBvZiBUCisgIHN0YXRpYyBjb25zdCBzaXpl
X3Qga0FsaWduZWRTaXplCisgID0gKCgoc2l6ZW9mKFQpICsga0FsaWdubWVudCAtIDEpIC8ga0Fs
aWdubWVudCkgKiBrQWxpZ25tZW50KTsKKworICAvLyBGcmVlIGFyZWEgZnJvbSB3aGljaCB0byBj
YXJ2ZSBuZXcgb2JqZWN0cworICBjaGFyKiBmcmVlX2FyZWFfOworICBzaXplX3QgZnJlZV9hdmFp
bF87CisKKyAgLy8gRnJlZSBsaXN0IG9mIGFscmVhZHkgY2FydmVkIG9iamVjdHMKKyAgdm9pZCog
ZnJlZV9saXN0XzsKKworICAvLyBOdW1iZXIgb2YgYWxsb2NhdGVkIGJ1dCB1bmZyZWVkIG9iamVj
dHMKKyAgaW50IGludXNlXzsKKworIHB1YmxpYzoKKyAgdm9pZCBJbml0KCkgeworICAgIEFTU0VS
VChrQWxpZ25lZFNpemUgPD0ga0FsbG9jSW5jcmVtZW50KTsKKyAgICBpbnVzZV8gPSAwOworICAg
IGZyZWVfYXJlYV8gPSBOVUxMOworICAgIGZyZWVfYXZhaWxfID0gMDsKKyAgICBmcmVlX2xpc3Rf
ID0gTlVMTDsKKyAgfQorCisgIFQqIE5ldygpIHsKKyAgICAvLyBDb25zdWx0IGZyZWUgbGlzdAor
ICAgIHZvaWQqIHJlc3VsdDsKKyAgICBpZiAoZnJlZV9saXN0XyAhPSBOVUxMKSB7CisgICAgICBy
ZXN1bHQgPSBmcmVlX2xpc3RfOworICAgICAgZnJlZV9saXN0XyA9ICoocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KHJlc3VsdCkpOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoZnJlZV9hdmFpbF8g
PCBrQWxpZ25lZFNpemUpIHsKKyAgICAgICAgLy8gTmVlZCBtb3JlIHJvb20KKyAgICAgICAgZnJl
ZV9hcmVhXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KE1ldGFEYXRhQWxsb2Moa0FsbG9jSW5j
cmVtZW50KSk7CisgICAgICAgIGlmIChmcmVlX2FyZWFfID09IE5VTEwpIGFib3J0KCk7CisgICAg
ICAgIGZyZWVfYXZhaWxfID0ga0FsbG9jSW5jcmVtZW50OworICAgICAgfQorICAgICAgcmVzdWx0
ID0gZnJlZV9hcmVhXzsKKyAgICAgIGZyZWVfYXJlYV8gKz0ga0FsaWduZWRTaXplOworICAgICAg
ZnJlZV9hdmFpbF8gLT0ga0FsaWduZWRTaXplOworICAgIH0KKyAgICBpbnVzZV8rKzsKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVzdWx0KTsKKyAgfQorCisgIHZvaWQgRGVsZXRl
KFQqIHApIHsKKyAgICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihwKSkgPSBmcmVlX2xpc3Rf
OworICAgIGZyZWVfbGlzdF8gPSBwOworICAgIGludXNlXy0tOworICB9CisKKyAgaW50IGludXNl
KCkgY29uc3QgeyByZXR1cm4gaW51c2VfOyB9Cit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBTcGFuIC0gYSBjb250aWd1b3VzIHJ1biBvZiBwYWdlcworLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisvLyBUeXBlIHRoYXQgY2FuIGhvbGQgYSBwYWdlIG51bWJlcgordHlwZWRlZiB1aW50cHRyX3Qg
UGFnZUlEOworCisvLyBUeXBlIHRoYXQgY2FuIGhvbGQgdGhlIGxlbmd0aCBvZiBhIHJ1biBvZiBw
YWdlcwordHlwZWRlZiB1aW50cHRyX3QgTGVuZ3RoOworCisvLyBDb252ZXJ0IGJ5dGUgc2l6ZSBp
bnRvIHBhZ2VzCitzdGF0aWMgaW5saW5lIExlbmd0aCBwYWdlcyhzaXplX3QgYnl0ZXMpIHsKKyAg
cmV0dXJuICgoYnl0ZXMgKyBrUGFnZVNpemUgLSAxKSA+PiBrUGFnZVNoaWZ0KTsKK30KKworLy8g
Q29udmVydCBhIHVzZXIgc2l6ZSBpbnRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3aWxsIGFj
dHVhbGx5IGJlCisvLyBhbGxvY2F0ZWQKK3N0YXRpYyBzaXplX3QgQWxsb2NhdGlvblNpemUoc2l6
ZV90IGJ5dGVzKSB7CisgIGlmIChieXRlcyA+IGtNYXhTaXplKSB7CisgICAgLy8gTGFyZ2Ugb2Jq
ZWN0OiB3ZSBhbGxvY2F0ZSBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgcGFnZXMKKyAgICByZXR1cm4g
cGFnZXMoYnl0ZXMpIDw8IGtQYWdlU2hpZnQ7CisgIH0gZWxzZSB7CisgICAgLy8gU21hbGwgb2Jq
ZWN0OiBmaW5kIHRoZSBzaXplIGNsYXNzIHRvIHdoaWNoIGl0IGJlbG9uZ3MKKyAgICByZXR1cm4g
Qnl0ZVNpemVGb3JDbGFzcyhTaXplQ2xhc3MoYnl0ZXMpKTsKKyAgfQorfQorCisvLyBJbmZvcm1h
dGlvbiBrZXB0IGZvciBhIHNwYW4gKGEgY29udGlndW91cyBydW4gb2YgcGFnZXMpLgorc3RydWN0
IFNwYW4geworICBQYWdlSUQgICAgICAgIHN0YXJ0OyAgICAgICAgICAvLyBTdGFydGluZyBwYWdl
IG51bWJlcgorICBMZW5ndGggICAgICAgIGxlbmd0aDsgICAgICAgICAvLyBOdW1iZXIgb2YgcGFn
ZXMgaW4gc3BhbgorICBTcGFuKiAgICAgICAgIG5leHQ7ICAgICAgICAgICAvLyBVc2VkIHdoZW4g
aW4gbGluayBsaXN0CisgIFNwYW4qICAgICAgICAgcHJldjsgICAgICAgICAgIC8vIFVzZWQgd2hl
biBpbiBsaW5rIGxpc3QKKyAgdm9pZCogICAgICAgICBvYmplY3RzOyAgICAgICAgLy8gTGlua2Vk
IGxpc3Qgb2YgZnJlZSBvYmplY3RzCisgIHVuc2lnbmVkIGludCAgZnJlZSA6IDE7ICAgICAgIC8v
IElzIHRoZSBzcGFuIGZyZWUKKyAgdW5zaWduZWQgaW50ICBzYW1wbGUgOiAxOyAgICAgLy8gU2Ft
cGxlZCBvYmplY3Q/CisgIHVuc2lnbmVkIGludCAgc2l6ZWNsYXNzIDogODsgIC8vIFNpemUtY2xh
c3MgZm9yIHNtYWxsIG9iamVjdHMgKG9yIDApCisgIHVuc2lnbmVkIGludCAgcmVmY291bnQgOiAx
MTsgIC8vIE51bWJlciBvZiBub24tZnJlZSBvYmplY3RzCisKKyN1bmRlZiBTUEFOX0hJU1RPUlkK
KyNpZmRlZiBTUEFOX0hJU1RPUlkKKyAgLy8gRm9yIGRlYnVnZ2luZywgd2UgY2FuIGtlZXAgYSBs
b2cgZXZlbnRzIHBlciBzcGFuCisgIGludCBuZXh0aGlzdG9yeTsKKyAgY2hhciBoaXN0b3J5WzY0
XTsKKyAgaW50IHZhbHVlWzY0XTsKKyNlbmRpZgorfTsKKworI2lmZGVmIFNQQU5fSElTVE9SWQor
dm9pZCBFdmVudChTcGFuKiBzcGFuLCBjaGFyIG9wLCBpbnQgdiA9IDApIHsKKyAgc3Bhbi0+aGlz
dG9yeVtzcGFuLT5uZXh0aGlzdG9yeV0gPSBvcDsKKyAgc3Bhbi0+dmFsdWVbc3Bhbi0+bmV4dGhp
c3RvcnldID0gdjsKKyAgc3Bhbi0+bmV4dGhpc3RvcnkrKzsKKyAgaWYgKHNwYW4tPm5leHRoaXN0
b3J5ID09IHNpemVvZihzcGFuLT5oaXN0b3J5KSkgc3Bhbi0+bmV4dGhpc3RvcnkgPSAwOworfQor
I2Vsc2UKKyNkZWZpbmUgRXZlbnQocyxvLHYpICgodm9pZCkgMCkKKyNlbmRpZgorCisvLyBBbGxv
Y2F0b3IvZGVhbGxvY2F0b3IgZm9yIHNwYW5zCitzdGF0aWMgUGFnZUhlYXBBbGxvY2F0b3I8U3Bh
bj4gc3Bhbl9hbGxvY2F0b3I7CitzdGF0aWMgU3BhbiogTmV3U3BhbihQYWdlSUQgcCwgTGVuZ3Ro
IGxlbikgeworICBTcGFuKiByZXN1bHQgPSBzcGFuX2FsbG9jYXRvci5OZXcoKTsKKyAgbWVtc2V0
KHJlc3VsdCwgMCwgc2l6ZW9mKCpyZXN1bHQpKTsKKyAgcmVzdWx0LT5zdGFydCA9IHA7CisgIHJl
c3VsdC0+bGVuZ3RoID0gbGVuOworI2lmZGVmIFNQQU5fSElTVE9SWQorICByZXN1bHQtPm5leHRo
aXN0b3J5ID0gMDsKKyNlbmRpZgorICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5l
IHZvaWQgRGVsZXRlU3BhbihTcGFuKiBzcGFuKSB7CisjaWZuZGVmIE5ERUJVRworICAvLyBJbiBk
ZWJ1ZyBtb2RlLCB0cmFzaCB0aGUgY29udGVudHMgb2YgZGVsZXRlZCBTcGFucworICBtZW1zZXQo
c3BhbiwgMHgzZiwgc2l6ZW9mKCpzcGFuKSk7CisjZW5kaWYKKyAgc3Bhbl9hbGxvY2F0b3IuRGVs
ZXRlKHNwYW4pOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEb3VibHkgbGlua2VkIGxp
c3Qgb2Ygc3BhbnMuCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBE
TExfSW5pdChTcGFuKiBsaXN0KSB7CisgIGxpc3QtPm5leHQgPSBsaXN0OworICBsaXN0LT5wcmV2
ID0gbGlzdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIERMTF9SZW1vdmUoU3Bhbiogc3Bhbikg
eworICBzcGFuLT5wcmV2LT5uZXh0ID0gc3Bhbi0+bmV4dDsKKyAgc3Bhbi0+bmV4dC0+cHJldiA9
IHNwYW4tPnByZXY7CisgIHNwYW4tPnByZXYgPSBOVUxMOworICBzcGFuLT5uZXh0ID0gTlVMTDsK
K30KKworc3RhdGljIGlubGluZSBib29sIERMTF9Jc0VtcHR5KGNvbnN0IFNwYW4qIGxpc3QpIHsK
KyAgcmV0dXJuIGxpc3QtPm5leHQgPT0gbGlzdDsKK30KKworI2lmbmRlZiBLWENfQ0hBTkdFUwor
c3RhdGljIGludCBETExfTGVuZ3RoKGNvbnN0IFNwYW4qIGxpc3QpIHsKKyAgaW50IHJlc3VsdCA9
IDA7CisgIGZvciAoU3BhbiogcyA9IGxpc3QtPm5leHQ7IHMgIT0gbGlzdDsgcyA9IHMtPm5leHQp
IHsKKyAgICByZXN1bHQrKzsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKyNp
ZiAwIC8qIE5vdCBuZWVkZWQgYXQgdGhlIG1vbWVudCAtLSBjYXVzZXMgY29tcGlsZXIgd2Fybmlu
Z3MgaWYgbm90IHVzZWQgKi8KK3N0YXRpYyB2b2lkIERMTF9QcmludChjb25zdCBjaGFyKiBsYWJl
bCwgY29uc3QgU3BhbiogbGlzdCkgeworICBNRVNTQUdFKCIlLTEwcyAlcDoiLCBsYWJlbCwgbGlz
dCk7CisgIGZvciAoY29uc3QgU3BhbiogcyA9IGxpc3QtPm5leHQ7IHMgIT0gbGlzdDsgcyA9IHMt
Pm5leHQpIHsKKyAgICBNRVNTQUdFKCIgPCVwLCV1LCV1PiIsIHMsIHMtPnN0YXJ0LCBzLT5sZW5n
dGgpOworICB9CisgIE1FU1NBR0UoIlxuIik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgRExM
X1ByZXBlbmQoU3BhbiogbGlzdCwgU3Bhbiogc3BhbikgeworICBBU1NFUlQoc3Bhbi0+bmV4dCA9
PSBOVUxMKTsKKyAgQVNTRVJUKHNwYW4tPnByZXYgPT0gTlVMTCk7CisgIHNwYW4tPm5leHQgPSBs
aXN0LT5uZXh0OworICBzcGFuLT5wcmV2ID0gbGlzdDsKKyAgbGlzdC0+bmV4dC0+cHJldiA9IHNw
YW47CisgIGxpc3QtPm5leHQgPSBzcGFuOworfQorCitzdGF0aWMgdm9pZCBETExfSW5zZXJ0T3Jk
ZXJlZChTcGFuKiBsaXN0LCBTcGFuKiBzcGFuKSB7CisgIEFTU0VSVChzcGFuLT5uZXh0ID09IE5V
TEwpOworICBBU1NFUlQoc3Bhbi0+cHJldiA9PSBOVUxMKTsKKyAgLy8gTG9vayBmb3IgYXBwcm9w
cmlhdGUgcGxhY2UgdG8gaW5zZXJ0CisgIFNwYW4qIHggPSBsaXN0OworICB3aGlsZSAoKHgtPm5l
eHQgIT0gbGlzdCkgJiYgKHgtPm5leHQtPnN0YXJ0IDwgc3Bhbi0+c3RhcnQpKSB7CisgICAgeCA9
IHgtPm5leHQ7CisgIH0KKyAgc3Bhbi0+bmV4dCA9IHgtPm5leHQ7CisgIHNwYW4tPnByZXYgPSB4
OworICB4LT5uZXh0LT5wcmV2ID0gc3BhbjsKKyAgeC0+bmV4dCA9IHNwYW47Cit9CisKKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFN0YWNrIHRyYWNlcyBrZXB0IGZvciBzYW1wbGVkIGFsbG9jYXRp
b25zCisvLyAgIFRoZSBmb2xsb3dpbmcgc3RhdGUgaXMgcHJvdGVjdGVkIGJ5IHBhZ2VoZWFwX2xv
Y2tfLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgY29uc3QgaW50IGtNYXhTdGFja0Rl
cHRoID0gMzE7CitzdHJ1Y3QgU3RhY2tUcmFjZSB7CisgIHVpbnRwdHJfdCBzaXplOyAgICAgICAg
ICAvLyBTaXplIG9mIG9iamVjdAorICBpbnQgICAgICAgZGVwdGg7ICAgICAgICAgLy8gTnVtYmVy
IG9mIFBDIHZhbHVlcyBzdG9yZWQgaW4gYXJyYXkgYmVsb3cKKyAgdm9pZCogICAgIHN0YWNrW2tN
YXhTdGFja0RlcHRoXTsKK307CitzdGF0aWMgUGFnZUhlYXBBbGxvY2F0b3I8U3RhY2tUcmFjZT4g
c3RhY2t0cmFjZV9hbGxvY2F0b3I7CitzdGF0aWMgU3BhbiBzYW1wbGVkX29iamVjdHM7CisKKy8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1hcCBmcm9tIHBhZ2UtaWQgdG8gcGVyLXBhZ2UgZGF0YQor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBXZSB1c2UgUGFnZU1hcDI8PiBmb3IgMzItYml0IGFu
ZCBQYWdlTWFwMzw+IGZvciA2NC1iaXQgbWFjaGluZXMuCisKKy8vIFNlbGVjdG9yIGNsYXNzIC0t
IGdlbmVyYWwgc2VsZWN0b3IgdXNlcyAzLWxldmVsIG1hcAordGVtcGxhdGUgPGludCBCSVRTPiBj
bGFzcyBNYXBTZWxlY3RvciB7CisgcHVibGljOgorICB0eXBlZGVmIFRDTWFsbG9jX1BhZ2VNYXAz
PEJJVFMta1BhZ2VTaGlmdD4gVHlwZTsKK307CisKKy8vIEEgdHdvLWxldmVsIG1hcCBmb3IgMzIt
Yml0IG1hY2hpbmVzCit0ZW1wbGF0ZSA8PiBjbGFzcyBNYXBTZWxlY3RvcjwzMj4geworIHB1Ymxp
YzoKKyAgdHlwZWRlZiBUQ01hbGxvY19QYWdlTWFwMjwzMi1rUGFnZVNoaWZ0PiBUeXBlOworfTsK
KworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGFnZS1sZXZlbCBhbGxvY2F0b3IKKy8vICAqIEVh
Z2VyIGNvYWxlc2NpbmcKKy8vCisvLyBIZWFwIGZvciBwYWdlLWxldmVsIGFsbG9jYXRpb24uICBX
ZSBhbGxvdyBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEKKy8vIGNvbnRpZ3VvdXMgcnVucyBvZiBw
YWdlcyAoY2FsbGVkIGEgInNwYW4iKS4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVENN
YWxsb2NfUGFnZUhlYXAgeworIHB1YmxpYzoKKyAgVENNYWxsb2NfUGFnZUhlYXAoKTsKKworICAv
LyBBbGxvY2F0ZSBhIHJ1biBvZiAibiIgcGFnZXMuICBSZXR1cm5zIHplcm8gaWYgb3V0IG9mIG1l
bW9yeS4KKyAgU3BhbiogTmV3KExlbmd0aCBuKTsKKworICAvLyBEZWxldGUgdGhlIHNwYW4gIltw
LCBwK24tMV0iLgorICAvLyBSRVFVSVJFUzogc3BhbiB3YXMgcmV0dXJuZWQgYnkgZWFybGllciBj
YWxsIHRvIE5ldygpIGFuZAorICAvLyAgICAgICAgICAgaGFzIG5vdCB5ZXQgYmVlbiBkZWxldGVk
LgorICB2b2lkIERlbGV0ZShTcGFuKiBzcGFuKTsKKworICAvLyBNYXJrIGFuIGFsbG9jYXRlZCBz
cGFuIGFzIGJlaW5nIHVzZWQgZm9yIHNtYWxsIG9iamVjdHMgb2YgdGhlCisgIC8vIHNwZWNpZmll
ZCBzaXplLWNsYXNzLgorICAvLyBSRVFVSVJFUzogc3BhbiB3YXMgcmV0dXJuZWQgYnkgYW4gZWFy
bGllciBjYWxsIHRvIE5ldygpCisgIC8vICAgICAgICAgICBhbmQgaGFzIG5vdCB5ZXQgYmVlbiBk
ZWxldGVkLgorICB2b2lkIFJlZ2lzdGVyU2l6ZUNsYXNzKFNwYW4qIHNwYW4sIHNpemVfdCBzYyk7
CisKKyAgLy8gU3BsaXQgYW4gYWxsb2NhdGVkIHNwYW4gaW50byB0d28gc3BhbnM6IG9uZSBvZiBs
ZW5ndGggIm4iIHBhZ2VzCisgIC8vIGZvbGxvd2VkIGJ5IGFub3RoZXIgc3BhbiBvZiBsZW5ndGgg
InNwYW4tPmxlbmd0aCAtIG4iIHBhZ2VzLgorICAvLyBNb2RpZmllcyAiKnNwYW4iIHRvIHBvaW50
IHRvIHRoZSBmaXJzdCBzcGFuIG9mIGxlbmd0aCAibiIgcGFnZXMuCisgIC8vIFJldHVybnMgYSBw
b2ludGVyIHRvIHRoZSBzZWNvbmQgc3Bhbi4KKyAgLy8KKyAgLy8gUkVRVUlSRVM6ICIwIDwgbiA8
IHNwYW4tPmxlbmd0aCIKKyAgLy8gUkVRVUlSRVM6ICFzcGFuLT5mcmVlCisgIC8vIFJFUVVJUkVT
OiBzcGFuLT5zaXplY2xhc3MgPT0gMAorICBTcGFuKiBTcGxpdChTcGFuKiBzcGFuLCBMZW5ndGgg
bik7CisKKyAgLy8gUmV0dXJuIHRoZSBkZXNjcmlwdG9yIGZvciB0aGUgc3BlY2lmaWVkIHBhZ2Uu
CisgIGlubGluZSBTcGFuKiBHZXREZXNjcmlwdG9yKFBhZ2VJRCBwKSBjb25zdCB7CisgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+KHBhZ2VtYXBfLmdldChwKSk7CisgIH0KKworICAv
LyBEdW1wIHN0YXRlIHRvIHN0ZGVycgorI2lmbmRlZiBLWENfQ0hBTkdFUworICB2b2lkIER1bXAo
VENNYWxsb2NfUHJpbnRlciogb3V0KTsKKyNlbmRpZgorCisgIC8vIFJldHVybiBudW1iZXIgb2Yg
Ynl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCisgIGlubGluZSB1aW50NjRfdCBTeXN0ZW1CeXRl
cygpIGNvbnN0IHsgcmV0dXJuIHN5c3RlbV9ieXRlc187IH0KKworICAvLyBSZXR1cm4gbnVtYmVy
IG9mIGZyZWUgYnl0ZXMgaW4gaGVhcAorICB1aW50NjRfdCBGcmVlQnl0ZXMoKSBjb25zdCB7Cisg
ICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1aW50NjRfdD4oZnJlZV9wYWdlc18pIDw8IGtQYWdlU2hp
ZnQpOworICB9CisKKyAgYm9vbCBDaGVjaygpOworICBib29sIENoZWNrTGlzdChTcGFuKiBsaXN0
LCBMZW5ndGggbWluX3BhZ2VzLCBMZW5ndGggbWF4X3BhZ2VzKTsKKworIHByaXZhdGU6CisgIC8v
IFBpY2sgdGhlIGFwcHJvcHJpYXRlIG1hcCB0eXBlIGJhc2VkIG9uIHBvaW50ZXIgc2l6ZQorICB0
eXBlZGVmIE1hcFNlbGVjdG9yPDgqc2l6ZW9mKHVpbnRwdHJfdCk+OjpUeXBlIFBhZ2VNYXA7Cisg
IFBhZ2VNYXAgcGFnZW1hcF87CisKKyAgLy8gTGlzdCBvZiBmcmVlIHNwYW5zIG9mIGxlbmd0aCA+
PSBrTWF4UGFnZXMKKyAgU3BhbiBsYXJnZV87CisKKyAgLy8gQXJyYXkgbWFwcGluZyBmcm9tIHNw
YW4gbGVuZ3RoIHRvIGEgZG91Ymx5IGxpbmtlZCBsaXN0IG9mIGZyZWUgc3BhbnMKKyAgU3BhbiBm
cmVlX1trTWF4UGFnZXNdOworCisgIC8vIE51bWJlciBvZiBwYWdlcyBrZXB0IGluIGZyZWUgbGlz
dHMKKyAgdWludHB0cl90IGZyZWVfcGFnZXNfOworCisgIC8vIEJ5dGVzIGFsbG9jYXRlZCBmcm9t
IHN5c3RlbQorICB1aW50NjRfdCBzeXN0ZW1fYnl0ZXNfOworCisgIGJvb2wgR3Jvd0hlYXAoTGVu
Z3RoIG4pOworCisgIC8vIFJFUVVJUkVTICAgc3Bhbi0+bGVuZ3RoID49IG4KKyAgLy8gUmVtb3Zl
IHNwYW4gZnJvbSBpdHMgZnJlZSBsaXN0LCBhbmQgbW92ZSBhbnkgbGVmdG92ZXIgcGFydCBvZgor
ICAvLyBzcGFuIGludG8gYXBwcm9wcmlhdGUgZnJlZSBsaXN0cy4gIEFsc28gdXBkYXRlICJzcGFu
IiB0byBoYXZlCisgIC8vIGxlbmd0aCBleGFjdGx5ICJuIiBhbmQgbWFyayBpdCBhcyBub24tZnJl
ZSBzbyBpdCBjYW4gYmUgcmV0dXJuZWQKKyAgLy8gdG8gdGhlIGNsaWVudC4KKyAgdm9pZCBDYXJ2
ZShTcGFuKiBzcGFuLCBMZW5ndGggbik7CisKKyAgdm9pZCBSZWNvcmRTcGFuKFNwYW4qIHNwYW4p
IHsKKyAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQsIHNwYW4pOworICAgIGlmIChzcGFuLT5s
ZW5ndGggPiAxKSB7CisgICAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQgKyBzcGFuLT5sZW5n
dGggLSAxLCBzcGFuKTsKKyAgICB9CisgIH0KK307CisKK1RDTWFsbG9jX1BhZ2VIZWFwOjpUQ01h
bGxvY19QYWdlSGVhcCgpIDogcGFnZW1hcF8oTWV0YURhdGFBbGxvYyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfcGFnZXNfKDApLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1fYnl0ZXNfKDApIHsKKyAgRExMX0lu
aXQoJmxhcmdlXyk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga01heFBhZ2VzOyBpKyspIHsK
KyAgICBETExfSW5pdCgmZnJlZV9baV0pOworICB9Cit9CisKK2lubGluZSBTcGFuKiBUQ01hbGxv
Y19QYWdlSGVhcDo6TmV3KExlbmd0aCBuKSB7CisgIEFTU0VSVChDaGVjaygpKTsKKyAgaWYgKG4g
PT0gMCkgbiA9IDE7CisKKyAgLy8gRmluZCBmaXJzdCBzaXplID49IG4gdGhhdCBoYXMgYSBub24t
ZW1wdHkgbGlzdAorICBmb3IgKHNpemVfdCBzID0gbjsgcyA8IGtNYXhQYWdlczsgcysrKSB7Cisg
ICAgaWYgKCFETExfSXNFbXB0eSgmZnJlZV9bc10pKSB7CisgICAgICBTcGFuKiByZXN1bHQgPSBm
cmVlX1tzXS5uZXh0OworICAgICAgQ2FydmUocmVzdWx0LCBuKTsKKyAgICAgIEFTU0VSVChDaGVj
aygpKTsKKyAgICAgIGZyZWVfcGFnZXNfIC09IG47CisgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgfQorCisgIC8vIExvb2sgaW4gbGFyZ2UgbGlzdC4gIElmIHdlIGZpcnN0IGRvIG5vdCBm
aW5kIHNvbWV0aGluZywgd2UgdHJ5IHRvCisgIC8vIGdyb3cgdGhlIGhlYXAgYW5kIHRyeSBhZ2Fp
bi4KKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAvLyBmaW5kIHRoZSBiZXN0
IHNwYW4gKGNsb3Nlc3QgdG8gbiBpbiBzaXplKQorICAgIFNwYW4gKmJlc3QgPSBOVUxMOworICAg
IGZvciAoU3Bhbiogc3BhbiA9IGxhcmdlXy5uZXh0OyBzcGFuICE9ICZsYXJnZV87IHNwYW4gPSBz
cGFuLT5uZXh0KSB7CisgICAgICBpZiAoc3Bhbi0+bGVuZ3RoID49IG4gJiYKKyAgICAgICAgICAo
YmVzdCA9PSBOVUxMIHx8IHNwYW4tPmxlbmd0aCA8IGJlc3QtPmxlbmd0aCkpIHsKKyAgICAgICAg
YmVzdCA9IHNwYW47CisgICAgICB9CisgICAgfQorICAgIGlmIChiZXN0ICE9IE5VTEwpIHsKKyAg
ICAgIENhcnZlKGJlc3QsIG4pOworICAgICAgQVNTRVJUKENoZWNrKCkpOworICAgICAgZnJlZV9w
YWdlc18gLT0gbjsKKyAgICAgIHJldHVybiBiZXN0OworICAgIH0KKyAgICBpZiAoaSA9PSAwKSB7
CisgICAgICAvLyBOb3RoaW5nIHN1aXRhYmxlIGluIGxhcmdlIGxpc3QuICBHcm93IHRoZSBoZWFw
IGFuZCBsb29rIGFnYWluLgorICAgICAgaWYgKCFHcm93SGVhcChuKSkgeworICAgICAgICBBU1NF
UlQoQ2hlY2soKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorICAgIH0KKyAgfQor
ICByZXR1cm4gTlVMTDsKK30KKworU3BhbiogVENNYWxsb2NfUGFnZUhlYXA6OlNwbGl0KFNwYW4q
IHNwYW4sIExlbmd0aCBuKSB7CisgIEFTU0VSVCgwIDwgbik7CisgIEFTU0VSVChuIDwgc3Bhbi0+
bGVuZ3RoKTsKKyAgQVNTRVJUKCFzcGFuLT5mcmVlKTsKKyAgQVNTRVJUKHNwYW4tPnNpemVjbGFz
cyA9PSAwKTsKKyAgRXZlbnQoc3BhbiwgJ1QnLCBuKTsKKworICBjb25zdCBpbnQgZXh0cmEgPSBz
cGFuLT5sZW5ndGggLSBuOworICBTcGFuKiBsZWZ0b3ZlciA9IE5ld1NwYW4oc3Bhbi0+c3RhcnQg
KyBuLCBleHRyYSk7CisgIEV2ZW50KGxlZnRvdmVyLCAnVScsIGV4dHJhKTsKKyAgUmVjb3JkU3Bh
bihsZWZ0b3Zlcik7CisgIHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCArIG4gLSAxLCBzcGFuKTsg
Ly8gVXBkYXRlIG1hcCBmcm9tIHBhZ2VpZCB0byBzcGFuCisgIHNwYW4tPmxlbmd0aCA9IG47CisK
KyAgcmV0dXJuIGxlZnRvdmVyOworfQorCitpbmxpbmUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6
Q2FydmUoU3Bhbiogc3BhbiwgTGVuZ3RoIG4pIHsKKyAgQVNTRVJUKG4gPiAwKTsKKyAgRExMX1Jl
bW92ZShzcGFuKTsKKyAgc3Bhbi0+ZnJlZSA9IDA7CisgIEV2ZW50KHNwYW4sICdBJywgbik7CisK
KyAgY29uc3Qgc2l6ZV90IGV4dHJhID0gc3Bhbi0+bGVuZ3RoIC0gbjsKKyAgQVNTRVJUKGV4dHJh
ID49IDApOworICBpZiAoZXh0cmEgPiAwKSB7CisgICAgU3BhbiogbGVmdG92ZXIgPSBOZXdTcGFu
KHNwYW4tPnN0YXJ0ICsgbiwgZXh0cmEpOworICAgIGxlZnRvdmVyLT5mcmVlID0gMTsKKyAgICBF
dmVudChsZWZ0b3ZlciwgJ1MnLCBleHRyYSk7CisgICAgUmVjb3JkU3BhbihsZWZ0b3Zlcik7Cisg
ICAgaWYgKGV4dHJhIDwga01heFBhZ2VzKSB7CisgICAgICBETExfUHJlcGVuZCgmZnJlZV9bZXh0
cmFdLCBsZWZ0b3Zlcik7CisgICAgfSBlbHNlIHsKKyAgICAgIERMTF9JbnNlcnRPcmRlcmVkKCZs
YXJnZV8sIGxlZnRvdmVyKTsKKyAgICB9CisgICAgc3Bhbi0+bGVuZ3RoID0gbjsKKyAgICBwYWdl
bWFwXy5zZXQoc3Bhbi0+c3RhcnQgKyBuIC0gMSwgc3Bhbik7CisgIH0KK30KKworaW5saW5lIHZv
aWQgVENNYWxsb2NfUGFnZUhlYXA6OkRlbGV0ZShTcGFuKiBzcGFuKSB7CisgIEFTU0VSVChDaGVj
aygpKTsKKyAgQVNTRVJUKCFzcGFuLT5mcmVlKTsKKyAgQVNTRVJUKHNwYW4tPmxlbmd0aCA+IDAp
OworICBBU1NFUlQoR2V0RGVzY3JpcHRvcihzcGFuLT5zdGFydCkgPT0gc3Bhbik7CisgIEFTU0VS
VChHZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSkgPT0gc3Bhbik7
CisgIHNwYW4tPnNpemVjbGFzcyA9IDA7CisgIHNwYW4tPnNhbXBsZSA9IDA7CisKKyAgLy8gQ29h
bGVzY2UgLS0gd2UgZ3VhcmFudGVlIHRoYXQgInAiICE9IDAsIHNvIG5vIGJvdW5kcyBjaGVja2lu
ZworICAvLyBuZWNlc3NhcnkuICBXZSBkbyBub3QgYm90aGVyIHJlc2V0dGluZyB0aGUgc3RhbGUg
cGFnZW1hcAorICAvLyBlbnRyaWVzIGZvciB0aGUgcGllY2VzIHdlIGFyZSBtZXJnaW5nIHRvZ2V0
aGVyIGJlY2F1c2Ugd2Ugb25seQorICAvLyBjYXJlIGFib3V0IHRoZSBwYWdlbWFwIGVudHJpZXMg
Zm9yIHRoZSBib3VuZGFyaWVzLgorICBjb25zdCBQYWdlSUQgcCA9IHNwYW4tPnN0YXJ0OworICBj
b25zdCBMZW5ndGggbiA9IHNwYW4tPmxlbmd0aDsKKyAgU3BhbiogcHJldiA9IEdldERlc2NyaXB0
b3IocC0xKTsKKyAgaWYgKHByZXYgIT0gTlVMTCAmJiBwcmV2LT5mcmVlKSB7CisgICAgLy8gTWVy
Z2UgcHJlY2VkaW5nIHNwYW4gaW50byB0aGlzIHNwYW4KKyAgICBBU1NFUlQocHJldi0+c3RhcnQg
KyBwcmV2LT5sZW5ndGggPT0gcCk7CisgICAgY29uc3QgTGVuZ3RoIGxlbiA9IHByZXYtPmxlbmd0
aDsKKyAgICBETExfUmVtb3ZlKHByZXYpOworICAgIERlbGV0ZVNwYW4ocHJldik7CisgICAgc3Bh
bi0+c3RhcnQgLT0gbGVuOworICAgIHNwYW4tPmxlbmd0aCArPSBsZW47CisgICAgcGFnZW1hcF8u
c2V0KHNwYW4tPnN0YXJ0LCBzcGFuKTsKKyAgICBFdmVudChzcGFuLCAnTCcsIGxlbik7CisgIH0K
KyAgU3BhbiogbmV4dCA9IEdldERlc2NyaXB0b3IocCtuKTsKKyAgaWYgKG5leHQgIT0gTlVMTCAm
JiBuZXh0LT5mcmVlKSB7CisgICAgLy8gTWVyZ2UgbmV4dCBzcGFuIGludG8gdGhpcyBzcGFuCisg
ICAgQVNTRVJUKG5leHQtPnN0YXJ0ID09IHArbik7CisgICAgY29uc3QgTGVuZ3RoIGxlbiA9IG5l
eHQtPmxlbmd0aDsKKyAgICBETExfUmVtb3ZlKG5leHQpOworICAgIERlbGV0ZVNwYW4obmV4dCk7
CisgICAgc3Bhbi0+bGVuZ3RoICs9IGxlbjsKKyAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQg
KyBzcGFuLT5sZW5ndGggLSAxLCBzcGFuKTsKKyAgICBFdmVudChzcGFuLCAnUicsIGxlbik7Cisg
IH0KKworICBFdmVudChzcGFuLCAnRCcsIHNwYW4tPmxlbmd0aCk7CisgIHNwYW4tPmZyZWUgPSAx
OworICBpZiAoc3Bhbi0+bGVuZ3RoIDwga01heFBhZ2VzKSB7CisgICAgRExMX1ByZXBlbmQoJmZy
ZWVfW3NwYW4tPmxlbmd0aF0sIHNwYW4pOworICB9IGVsc2UgeworICAgIERMTF9JbnNlcnRPcmRl
cmVkKCZsYXJnZV8sIHNwYW4pOworICB9CisgIGZyZWVfcGFnZXNfICs9IG47CisKKyAgQVNTRVJU
KENoZWNrKCkpOworfQorCit2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpSZWdpc3RlclNpemVDbGFz
cyhTcGFuKiBzcGFuLCBzaXplX3Qgc2MpIHsKKyAgLy8gQXNzb2NpYXRlIHNwYW4gb2JqZWN0IHdp
dGggYWxsIGludGVyaW9yIHBhZ2VzIGFzIHdlbGwKKyAgQVNTRVJUKCFzcGFuLT5mcmVlKTsKKyAg
QVNTRVJUKEdldERlc2NyaXB0b3Ioc3Bhbi0+c3RhcnQpID09IHNwYW4pOworICBBU1NFUlQoR2V0
RGVzY3JpcHRvcihzcGFuLT5zdGFydCtzcGFuLT5sZW5ndGgtMSkgPT0gc3Bhbik7CisgIEV2ZW50
KHNwYW4sICdDJywgc2MpOworICBzcGFuLT5zaXplY2xhc3MgPSBzYzsKKyAgZm9yIChMZW5ndGgg
aSA9IDE7IGkgPCBzcGFuLT5sZW5ndGgtMTsgaSsrKSB7CisgICAgcGFnZW1hcF8uc2V0KHNwYW4t
PnN0YXJ0K2ksIHNwYW4pOworICB9Cit9CisKKyNpZm5kZWYgS1hDX0NIQU5HRVMKK3ZvaWQgVENN
YWxsb2NfUGFnZUhlYXA6OkR1bXAoVENNYWxsb2NfUHJpbnRlciogb3V0KSB7CisgIGludCBub25l
bXB0eV9zaXplcyA9IDA7CisgIGZvciAoaW50IHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspIHsK
KyAgICBpZiAoIURMTF9Jc0VtcHR5KCZmcmVlX1tzXSkpIG5vbmVtcHR5X3NpemVzKys7CisgIH0K
KyAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLVxuIik7CisgIG91dC0+cHJpbnRmKCJQYWdlSGVhcDogJWQgc2l6ZXM7ICU2LjFmIE1C
IGZyZWVcbiIsIG5vbmVtcHR5X3NpemVzLAorICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8ZG91
YmxlPihmcmVlX3BhZ2VzXykgKiBrUGFnZVNpemUpIC8gMTA0ODU3Ni4wKTsKKyAgb3V0LT5wcmlu
dGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7
CisgIHVpbnQ2NF90IGN1bXVsYXRpdmUgPSAwOworICBmb3IgKGludCBzID0gMDsgcyA8IGtNYXhQ
YWdlczsgcysrKSB7CisgICAgaWYgKCFETExfSXNFbXB0eSgmZnJlZV9bc10pKSB7CisgICAgICBj
b25zdCBpbnQgbGlzdF9sZW5ndGggPSBETExfTGVuZ3RoKCZmcmVlX1tzXSk7CisgICAgICB1aW50
NjRfdCBzX3BhZ2VzID0gcyAqIGxpc3RfbGVuZ3RoOworICAgICAgY3VtdWxhdGl2ZSArPSBzX3Bh
Z2VzOworICAgICAgb3V0LT5wcmludGYoIiU2dSBwYWdlcyAqICU2dSBzcGFucyB+ICU2LjFmIE1C
OyAlNi4xZiBNQiBjdW1cbiIsCisgICAgICAgICAgICAgICAgICBzLCBsaXN0X2xlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgIChzX3BhZ2VzIDw8IGtQYWdlU2hpZnQpIC8gMTA0ODU3Ni4wLAorICAg
ICAgICAgICAgICAgICAgKGN1bXVsYXRpdmUgPDwga1BhZ2VTaGlmdCkgLyAxMDQ4NTc2LjApOwor
ICAgIH0KKyAgfQorCisgIHVpbnQ2NF90IGxhcmdlX3BhZ2VzID0gMDsKKyAgaW50IGxhcmdlX3Nw
YW5zID0gMDsKKyAgZm9yIChTcGFuKiBzID0gbGFyZ2VfLm5leHQ7IHMgIT0gJmxhcmdlXzsgcyA9
IHMtPm5leHQpIHsKKyAgICBvdXQtPnByaW50ZigiICAgWyAlNiIgUFJJdVMgIiBzcGFucyBdXG4i
LCBzLT5sZW5ndGgpOworICAgIGxhcmdlX3BhZ2VzICs9IHMtPmxlbmd0aDsKKyAgICBsYXJnZV9z
cGFucysrOworICB9CisgIGN1bXVsYXRpdmUgKz0gbGFyZ2VfcGFnZXM7CisgIG91dC0+cHJpbnRm
KCI+MjU1ICAgbGFyZ2UgKiAlNnUgc3BhbnMgfiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtXG4iLAor
ICAgICAgICAgICAgICBsYXJnZV9zcGFucywKKyAgICAgICAgICAgICAgKGxhcmdlX3BhZ2VzIDw8
IGtQYWdlU2hpZnQpIC8gMTA0ODU3Ni4wLAorICAgICAgICAgICAgICAoY3VtdWxhdGl2ZSA8PCBr
UGFnZVNoaWZ0KSAvIDEwNDg1NzYuMCk7Cit9CisjZW5kaWYKKworYm9vbCBUQ01hbGxvY19QYWdl
SGVhcDo6R3Jvd0hlYXAoTGVuZ3RoIG4pIHsKKyAgQVNTRVJUKGtNYXhQYWdlcyA+PSBrTWluU3lz
dGVtQWxsb2MpOworICBMZW5ndGggYXNrID0gKG4+a01pblN5c3RlbUFsbG9jKSA/IG4gOiBzdGF0
aWNfY2FzdDxMZW5ndGg+KGtNaW5TeXN0ZW1BbGxvYyk7CisgIHZvaWQqIHB0ciA9IFRDTWFsbG9j
X1N5c3RlbUFsbG9jKGFzayA8PCBrUGFnZVNoaWZ0LCBrUGFnZVNpemUpOworICBpZiAocHRyID09
IE5VTEwpIHsKKyAgICBpZiAobiA8IGFzaykgeworICAgICAgLy8gVHJ5IGdyb3dpbmcganVzdCAi
biIgcGFnZXMKKyAgICAgIGFzayA9IG47CisgICAgICBwdHIgPSBUQ01hbGxvY19TeXN0ZW1BbGxv
Yyhhc2sgPDwga1BhZ2VTaGlmdCwga1BhZ2VTaXplKTsKKyAgICB9CisgICAgaWYgKHB0ciA9PSBO
VUxMKSByZXR1cm4gZmFsc2U7CisgIH0KKyAgc3lzdGVtX2J5dGVzXyArPSAoYXNrIDw8IGtQYWdl
U2hpZnQpOworICBjb25zdCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihw
dHIpID4+IGtQYWdlU2hpZnQ7CisgIEFTU0VSVChwID4gMCk7CisKKyAgLy8gTWFrZSBzdXJlIHBh
Z2VtYXBfIGhhcyBlbnRyaWVzIGZvciBhbGwgb2YgdGhlIG5ldyBwYWdlcy4KKyAgLy8gUGx1cyBl
bnN1cmUgb25lIGJlZm9yZSBhbmQgb25lIGFmdGVyIHNvIGNvYWxlc2NpbmcgY29kZQorICAvLyBk
b2VzIG5vdCBuZWVkIGJvdW5kcy1jaGVja2luZy4KKyAgaWYgKHBhZ2VtYXBfLkVuc3VyZShwLTEs
IGFzaysyKSkgeworICAgIC8vIFByZXRlbmQgdGhlIG5ldyBhcmVhIGlzIGFsbG9jYXRlZCBhbmQg
dGhlbiBEZWxldGUoKSBpdCB0bworICAgIC8vIGNhdXNlIGFueSBuZWNlc3NhcnkgY29hbGVzY2lu
ZyB0byBvY2N1ci4KKyAgICAvLworICAgIC8vIFdlIGRvIG5vdCBhZGp1c3QgZnJlZV9wYWdlc18g
aGVyZSBzaW5jZSBEZWxldGUoKSB3aWxsIGRvIGl0IGZvciB1cy4KKyAgICBTcGFuKiBzcGFuID0g
TmV3U3BhbihwLCBhc2spOworICAgIFJlY29yZFNwYW4oc3Bhbik7CisgICAgRGVsZXRlKHNwYW4p
OworICAgIEFTU0VSVChDaGVjaygpKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfSBlbHNlIHsKKyAg
ICAvLyBXZSBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IHdpdGhpbiAicGFnZW1hcF8iCisgICAg
Ly8gVE9ETzogT25jZSB3ZSBjYW4gcmV0dXJuIG1lbW9yeSB0byB0aGUgc3lzdGVtLCByZXR1cm4g
dGhlIG5ldyBzcGFuCisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CisKK2Jvb2wgVENNYWxsb2Nf
UGFnZUhlYXA6OkNoZWNrKCkgeworICBBU1NFUlQoZnJlZV9bMF0ubmV4dCA9PSAmZnJlZV9bMF0p
OworICBDaGVja0xpc3QoJmxhcmdlXywga01heFBhZ2VzLCAxMDAwMDAwMDAwKTsKKyAgZm9yIChM
ZW5ndGggcyA9IDE7IHMgPCBrTWF4UGFnZXM7IHMrKykgeworICAgIENoZWNrTGlzdCgmZnJlZV9b
c10sIHMsIHMpOworICB9CisgIHJldHVybiB0cnVlOworfQorCitib29sIFRDTWFsbG9jX1BhZ2VI
ZWFwOjpDaGVja0xpc3QoU3BhbiogbGlzdCwgTGVuZ3RoIG1pbl9wYWdlcywgTGVuZ3RoIG1heF9w
YWdlcykgeworICBmb3IgKFNwYW4qIHMgPSBsaXN0LT5uZXh0OyBzICE9IGxpc3Q7IHMgPSBzLT5u
ZXh0KSB7CisgICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmZyZWUpOworICAgIENIRUNLX0NPTkRJVElP
TihzLT5sZW5ndGggPj0gbWluX3BhZ2VzKTsKKyAgICBDSEVDS19DT05ESVRJT04ocy0+bGVuZ3Ro
IDw9IG1heF9wYWdlcyk7CisgICAgQ0hFQ0tfQ09ORElUSU9OKEdldERlc2NyaXB0b3Iocy0+c3Rh
cnQpID09IHMpOworICAgIENIRUNLX0NPTkRJVElPTihHZXREZXNjcmlwdG9yKHMtPnN0YXJ0K3Mt
Pmxlbmd0aC0xKSA9PSBzKTsKKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBGcmVlIGxpc3QKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUQ01hbGxvY19UaHJlYWRDYWNo
ZV9GcmVlTGlzdCB7CisgcHJpdmF0ZToKKyAgdm9pZCogICAgbGlzdF87ICAgICAgIC8vIExpbmtl
ZCBsaXN0IG9mIG5vZGVzCisgIHVpbnQxNl90IGxlbmd0aF87ICAgICAvLyBDdXJyZW50IGxlbmd0
aAorICB1aW50MTZfdCBsb3dhdGVyXzsgICAgLy8gTG93IHdhdGVyIG1hcmsgZm9yIGxpc3QgbGVu
Z3RoCisKKyBwdWJsaWM6CisgIHZvaWQgSW5pdCgpIHsKKyAgICBsaXN0XyA9IE5VTEw7CisgICAg
bGVuZ3RoXyA9IDA7CisgICAgbG93YXRlcl8gPSAwOworICB9CisKKyAgLy8gUmV0dXJuIGN1cnJl
bnQgbGVuZ3RoIG9mIGxpc3QKKyAgaW50IGxlbmd0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbGVu
Z3RoXzsKKyAgfQorCisgIC8vIElzIGxpc3QgZW1wdHk/CisgIGJvb2wgZW1wdHkoKSBjb25zdCB7
CisgICAgcmV0dXJuIGxpc3RfID09IE5VTEw7CisgIH0KKworICAvLyBMb3ctd2F0ZXIgbWFyayBt
YW5hZ2VtZW50CisgIGludCBsb3d3YXRlcm1hcmsoKSBjb25zdCB7IHJldHVybiBsb3dhdGVyXzsg
fQorICB2b2lkIGNsZWFyX2xvd3dhdGVybWFyaygpIHsgbG93YXRlcl8gPSBsZW5ndGhfOyB9CisK
KyAgdm9pZCBQdXNoKHZvaWQqIHB0cikgeworICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KHB0cikpID0gbGlzdF87CisgICAgbGlzdF8gPSBwdHI7CisgICAgbGVuZ3RoXysrOworICB9CisK
KyAgdm9pZCogUG9wKCkgeworICAgIEFTU0VSVChsaXN0XyAhPSBOVUxMKTsKKyAgICB2b2lkKiBy
ZXN1bHQgPSBsaXN0XzsKKyAgICBsaXN0XyA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHJl
c3VsdCkpOworICAgIGxlbmd0aF8tLTsKKyAgICBpZiAobGVuZ3RoXyA8IGxvd2F0ZXJfKSBsb3dh
dGVyXyA9IGxlbmd0aF87CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorfTsKKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBEYXRhIGtlcHQgcGVyIHRocmVhZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRDTWFs
bG9jX1RocmVhZENhY2hlIHsKKyBwcml2YXRlOgorICB0eXBlZGVmIFRDTWFsbG9jX1RocmVhZENh
Y2hlX0ZyZWVMaXN0IEZyZWVMaXN0OworCisgIHNpemVfdCAgICAgICAgc2l6ZV87ICAgICAgICAg
ICAgICAgICAgLy8gQ29tYmluZWQgc2l6ZSBvZiBkYXRhCisgIHB0aHJlYWRfdCAgICAgdGlkXzsg
ICAgICAgICAgICAgICAgICAgLy8gV2hpY2ggdGhyZWFkIG93bnMgaXQKKyAgYm9vbCAgICAgICAg
ICBzZXRzcGVjaWZpY187ICAgICAgICAgICAvLyBDYWxsZWQgcHRocmVhZF9zZXRzcGVjaWZpYz8K
KyAgRnJlZUxpc3QgICAgICBsaXN0X1trTnVtQ2xhc3Nlc107ICAgICAvLyBBcnJheSBpbmRleGVk
IGJ5IHNpemUtY2xhc3MKKworICAvLyBXZSBzYW1wbGUgYWxsb2NhdGlvbnMsIGJpYXNlZCBieSB0
aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgorICB1aW50MzJfdCAgICAgIHJuZF87ICAgICAgICAg
ICAgICAgICAgIC8vIENoZWFwIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgIHNpemVfdCAgICAg
ICAgYnl0ZXNfdW50aWxfc2FtcGxlXzsgICAgLy8gQnl0ZXMgdW50aWwgd2Ugc2FtcGxlIG5leHQK
KworIHB1YmxpYzoKKyAgLy8gQWxsIFRocmVhZENhY2hlIG9iamVjdHMgYXJlIGtlcHQgaW4gYSBs
aW5rZWQgbGlzdCAoZm9yIHN0YXRzIGNvbGxlY3Rpb24pCisgIFRDTWFsbG9jX1RocmVhZENhY2hl
KiBuZXh0XzsKKyAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIHByZXZfOworCisgIHZvaWQgSW5pdChw
dGhyZWFkX3QgdGlkKTsKKyAgdm9pZCBDbGVhbnVwKCk7CisKKyAgLy8gQWNjZXNzb3JzIChtb3N0
bHkganVzdCBmb3IgcHJpbnRpbmcgc3RhdHMpCisgIGludCBmcmVlbGlzdF9sZW5ndGgoc2l6ZV90
IGNsKSBjb25zdCB7IHJldHVybiBsaXN0X1tjbF0ubGVuZ3RoKCk7IH0KKworICAvLyBUb3RhbCBi
eXRlIHNpemUgaW4gY2FjaGUKKyAgc2l6ZV90IFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsg
fQorCisgIHZvaWQqIEFsbG9jYXRlKHNpemVfdCBzaXplKTsKKyAgdm9pZCBEZWFsbG9jYXRlKHZv
aWQqIHB0ciwgc2l6ZV90IHNpemVfY2xhc3MpOworCisgIHZvaWQgRmV0Y2hGcm9tQ2VudHJhbENh
Y2hlKHNpemVfdCBjbCk7CisgIHZvaWQgUmVsZWFzZVRvQ2VudHJhbENhY2hlKHNpemVfdCBjbCwg
aW50IE4pOworICB2b2lkIFNjYXZlbmdlKCk7CisgIHZvaWQgUHJpbnQoKSBjb25zdDsKKworICAv
LyBSZWNvcmQgYWxsb2NhdGlvbiBvZiAiayIgYnl0ZXMuICBSZXR1cm4gdHJ1ZSBpZmYgYWxsb2Nh
dGlvbgorICAvLyBzaG91bGQgYmUgc2FtcGxlZAorICBib29sIFNhbXBsZUFsbG9jYXRpb24oc2l6
ZV90IGspOworCisgIC8vIFBpY2sgbmV4dCBzYW1wbGluZyBwb2ludAorICB2b2lkIFBpY2tOZXh0
U2FtcGxlKCk7CisKKyAgc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICBJbml0TW9kdWxlKCk7
CisgIHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgSW5pdFRTRCgpOworICBzdGF0aWMgVENN
YWxsb2NfVGhyZWFkQ2FjaGUqIEdldENhY2hlKCk7CisgIHN0YXRpYyBUQ01hbGxvY19UaHJlYWRD
YWNoZSogR2V0Q2FjaGVJZlByZXNlbnQoKTsKKyAgc3RhdGljIHZvaWQqICAgICAgICAgICAgICAg
ICBDcmVhdGVDYWNoZUlmTmVjZXNzYXJ5KCk7CisgIHN0YXRpYyB2b2lkICAgICAgICAgICAgICAg
ICAgRGVsZXRlQ2FjaGUodm9pZCogcHRyKTsKKyAgc3RhdGljIHZvaWQgICAgICAgICAgICAgICAg
ICBSZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGF0
YSBrZXB0IHBlciBzaXplLWNsYXNzIGluIGNlbnRyYWwgY2FjaGUKKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitj
bGFzcyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0IHsKKyBwdWJsaWM6CisgIHZvaWQgSW5pdChz
aXplX3QgY2wpOworCisgIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCisgIC8vIEluc2VydCBv
YmplY3QuCisgIC8vIE1heSB0ZW1wb3JhcmlseSByZWxlYXNlIGxvY2tfLgorICB2b2lkIEluc2Vy
dCh2b2lkKiBvYmplY3QpOworCisgIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCisgIC8vIFJl
bW92ZSBvYmplY3QgZnJvbSBjYWNoZSBhbmQgcmV0dXJuLgorICAvLyBSZXR1cm4gTlVMTCBpZiBu
byBmcmVlIGVudHJpZXMgaW4gY2FjaGUuCisgIHZvaWQqIFJlbW92ZSgpOworCisgIC8vIFJFUVVJ
UkVTOiBsb2NrXyBpcyBoZWxkCisgIC8vIFBvcHVsYXRlIGNhY2hlIGJ5IGZldGNoaW5nIGZyb20g
dGhlIHBhZ2UgaGVhcC4KKyAgLy8gTWF5IHRlbXBvcmFyaWx5IHJlbGVhc2UgbG9ja18uCisgIHZv
aWQgUG9wdWxhdGUoKTsKKworICAvLyBSRVFVSVJFUzogbG9ja18gaXMgaGVsZAorICAvLyBOdW1i
ZXIgb2YgZnJlZSBvYmplY3RzIGluIGNhY2hlCisgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBjb3VudGVyXzsgfQorCisgIC8vIExvY2sgLS0gZXhwb3NlZCBiZWNhdXNlIGNhbGxlciBncmFi
cyBpdCBiZWZvcmUgdG91Y2hpbmcgdGhpcyBvYmplY3QKKyAgU3BpbkxvY2sgbG9ja187CisKKyBw
cml2YXRlOgorICAvLyBXZSBrZWVwIGxpbmtlZCBsaXN0cyBvZiBlbXB0eSBhbmQgbm9uLWVtb3R5
IHNwYW5zLgorICBzaXplX3QgICBzaXplX2NsYXNzXzsgICAgIC8vIE15IHNpemUgY2xhc3MKKyAg
U3BhbiAgICAgZW1wdHlfOyAgICAgICAgICAvLyBEdW1teSBoZWFkZXIgZm9yIGxpc3Qgb2YgZW1w
dHkgc3BhbnMKKyAgU3BhbiAgICAgbm9uZW1wdHlfOyAgICAgICAvLyBEdW1teSBoZWFkZXIgZm9y
IGxpc3Qgb2Ygbm9uLWVtcHR5IHNwYW5zCisgIHNpemVfdCAgIGNvdW50ZXJfOyAgICAgICAgLy8g
TnVtYmVyIG9mIGZyZWUgb2JqZWN0cyBpbiBjYWNoZSBlbnRyeQorfTsKKworLy8gUGFkIGVhY2gg
Q2VudHJhbENhY2hlIG9iamVjdCB0byBtdWx0aXBsZSBvZiA2NCBieXRlcworY2xhc3MgVENNYWxs
b2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCA6IHB1YmxpYyBUQ01hbGxvY19DZW50cmFsX0ZyZWVM
aXN0IHsKKyBwcml2YXRlOgorICBjaGFyIHBhZF9bKDY0IC0gKHNpemVvZihUQ01hbGxvY19DZW50
cmFsX0ZyZWVMaXN0KSAlIDY0KSkgJSA2NF07Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdsb2Jh
bCB2YXJpYWJsZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBDZW50cmFsIGNhY2hlIC0tIGEgY29sbGVj
dGlvbiBvZiBmcmVlLWxpc3RzLCBvbmUgcGVyIHNpemUtY2xhc3MuCisvLyBXZSBoYXZlIGEgc2Vw
YXJhdGUgbG9jayBwZXIgZnJlZS1saXN0IHRvIHJlZHVjZSBjb250ZW50aW9uLgorc3RhdGljIFRD
TWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQgY2VudHJhbF9jYWNoZVtrTnVtQ2xhc3Nlc107
CisKKy8vIFBhZ2UtbGV2ZWwgYWxsb2NhdG9yCitzdGF0aWMgU3BpbkxvY2sgcGFnZWhlYXBfbG9j
ayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOworc3RhdGljIGNoYXIgcGFnZWhlYXBfbWVtb3J5W3Np
emVvZihUQ01hbGxvY19QYWdlSGVhcCldOworc3RhdGljIGJvb2wgcGhpbml0ZWQgPSBmYWxzZTsK
KworLy8gQXZvaWQgZXh0cmEgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gYnkgbWFraW5nICJwYWdlaGVh
cCIgYmUganVzdCBhbiBhbGlhcworLy8gb2YgcGFnZWhlYXBfbWVtb3J5LgorI2RlZmluZSBwYWdl
aGVhcCAoKFRDTWFsbG9jX1BhZ2VIZWFwKikgcGFnZWhlYXBfbWVtb3J5KQorCisvLyBUaHJlYWQt
c3BlY2lmaWMga2V5LiAgSW5pdGlhbGl6YXRpb24gaGVyZSBpcyBzb21ld2hhdCB0cmlja3kKKy8v
IGJlY2F1c2Ugc29tZSBMaW51eCBzdGFydHVwIGNvZGUgaW52b2tlcyBtYWxsb2MoKSBiZWZvcmUg
aXQKKy8vIGlzIGluIGEgZ29vZCBlbm91Z2ggc3RhdGUgdG8gaGFuZGxlIHB0aHJlYWRfa2V5Y3Jl
YXRlKCkuCisvLyBUaGVyZWZvcmUsIHdlIHVzZSBUU0Qga2V5cyBvbmx5IGFmdGVyIHRzZF9pbml0
ZWQgaXMgc2V0IHRvIHRydWUuCisvLyBVbnRpbCB0aGVuLCB3ZSB1c2UgYSBzbG93IHBhdGggdG8g
Z2V0IHRoZSBoZWFwIG9iamVjdC4KK3N0YXRpYyBib29sIHRzZF9pbml0ZWQgPSBmYWxzZTsKK3N0
YXRpYyBwdGhyZWFkX2tleV90IGhlYXBfa2V5OworCisvLyBBbGxvY2F0b3IgZm9yIHRocmVhZCBo
ZWFwcworc3RhdGljIFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9jX1RocmVhZENhY2hlPiB0aHJl
YWRoZWFwX2FsbG9jYXRvcjsKKworLy8gTGlua2VkIGxpc3Qgb2YgaGVhcCBvYmplY3RzLiAgUHJv
dGVjdGVkIGJ5IHBhZ2VoZWFwX2xvY2suCitzdGF0aWMgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIHRo
cmVhZF9oZWFwcyA9IE5VTEw7CitzdGF0aWMgaW50IHRocmVhZF9oZWFwX2NvdW50ID0gMDsKKwor
Ly8gT3ZlcmFsbCB0aHJlYWQgY2FjaGUgc2l6ZS4gIFByb3RlY3RlZCBieSBwYWdlaGVhcF9sb2Nr
Lgorc3RhdGljIHNpemVfdCBvdmVyYWxsX3RocmVhZF9jYWNoZV9zaXplID0ga0RlZmF1bHRPdmVy
YWxsVGhyZWFkQ2FjaGVTaXplOworCisvLyBHbG9iYWwgcGVyLXRocmVhZCBjYWNoZSBzaXplLiAg
V3JpdGVzIGFyZSBwcm90ZWN0ZWQgYnkKKy8vIHBhZ2VoZWFwX2xvY2suICBSZWFkcyBhcmUgZG9u
ZSB3aXRob3V0IGFueSBsb2NraW5nLCB3aGljaCBzaG91bGQgYmUKKy8vIGZpbmUgYXMgbG9uZyBh
cyBzaXplX3QgY2FuIGJlIHdyaXR0ZW4gYXRvbWljYWxseSBhbmQgd2UgZG9uJ3QgcGxhY2UKKy8v
IGludmFyaWFudHMgYmV0d2VlbiB0aGlzIHZhcmlhYmxlIGFuZCBvdGhlciBwaWVjZXMgb2Ygc3Rh
dGUuCitzdGF0aWMgdm9sYXRpbGUgc2l6ZV90IHBlcl90aHJlYWRfY2FjaGVfc2l6ZSA9IGtNYXhU
aHJlYWRDYWNoZVNpemU7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ2VudHJhbCBjYWNoZSBpbXBsZW1l
bnRhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6
SW5pdChzaXplX3QgY2wpIHsKKyAgbG9ja18uSW5pdCgpOworICBzaXplX2NsYXNzXyA9IGNsOwor
ICBETExfSW5pdCgmZW1wdHlfKTsKKyAgRExMX0luaXQoJm5vbmVtcHR5Xyk7CisgIGNvdW50ZXJf
ID0gMDsKK30KKworaW5saW5lIHZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6SW5zZXJ0
KHZvaWQqIG9iamVjdCkgeworICBjb25zdCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihvYmplY3QpID4+IGtQYWdlU2hpZnQ7CisgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+
R2V0RGVzY3JpcHRvcihwKTsKKyAgQVNTRVJUKHNwYW4gIT0gTlVMTCk7CisgIEFTU0VSVChzcGFu
LT5yZWZjb3VudCA+IDApOworCisgIC8vIElmIHNwYW4gaXMgZW1wdHksIG1vdmUgaXQgdG8gbm9u
LWVtcHR5IGxpc3QKKyAgaWYgKHNwYW4tPm9iamVjdHMgPT0gTlVMTCkgeworICAgIERMTF9SZW1v
dmUoc3Bhbik7CisgICAgRExMX1ByZXBlbmQoJm5vbmVtcHR5Xywgc3Bhbik7CisgICAgRXZlbnQo
c3BhbiwgJ04nLCAwKTsKKyAgfQorCisgIC8vIFRoZSBmb2xsb3dpbmcgY2hlY2sgaXMgZXhwZW5z
aXZlLCBzbyBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0CisgIGlmIChmYWxzZSkgeworICAgIC8v
IENoZWNrIHRoYXQgb2JqZWN0IGRvZXMgbm90IG9jY3VyIGluIGxpc3QKKyAgICBpbnQgZ290ID0g
MDsKKyAgICBmb3IgKHZvaWQqIHAgPSBzcGFuLT5vYmplY3RzOyBwICE9IE5VTEw7IHAgPSAqKCh2
b2lkKiopIHApKSB7CisgICAgICBBU1NFUlQocCAhPSBvYmplY3QpOworICAgICAgZ290Kys7Cisg
ICAgfQorICAgIEFTU0VSVChnb3QgKyBzcGFuLT5yZWZjb3VudCA9PQorICAgICAgICAgICAoc3Bh
bi0+bGVuZ3RoPDxrUGFnZVNoaWZ0KS9CeXRlU2l6ZUZvckNsYXNzKHNwYW4tPnNpemVjbGFzcykp
OworICB9CisKKyAgY291bnRlcl8rKzsKKyAgc3Bhbi0+cmVmY291bnQtLTsKKyAgaWYgKHNwYW4t
PnJlZmNvdW50ID09IDApIHsKKyAgICBFdmVudChzcGFuLCAnIycsIDApOworICAgIGNvdW50ZXJf
IC09IChzcGFuLT5sZW5ndGg8PGtQYWdlU2hpZnQpIC8gQnl0ZVNpemVGb3JDbGFzcyhzcGFuLT5z
aXplY2xhc3MpOworICAgIERMTF9SZW1vdmUoc3Bhbik7CisKKyAgICAvLyBSZWxlYXNlIGNlbnRy
YWwgbGlzdCBsb2NrIHdoaWxlIG9wZXJhdGluZyBvbiBwYWdlaGVhcAorICAgIGxvY2tfLlVubG9j
aygpOworICAgIHsKKyAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOworICAg
ICAgcGFnZWhlYXAtPkRlbGV0ZShzcGFuKTsKKyAgICB9CisgICAgbG9ja18uTG9jaygpOworICB9
IGVsc2UgeworICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG9iamVjdCkpID0gc3Bhbi0+
b2JqZWN0czsKKyAgICBzcGFuLT5vYmplY3RzID0gb2JqZWN0OworICB9Cit9CisKK2lubGluZSB2
b2lkKiBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpSZW1vdmUoKSB7CisgIGlmIChETExfSXNF
bXB0eSgmbm9uZW1wdHlfKSkgcmV0dXJuIE5VTEw7CisgIFNwYW4qIHNwYW4gPSBub25lbXB0eV8u
bmV4dDsKKworICBBU1NFUlQoc3Bhbi0+b2JqZWN0cyAhPSBOVUxMKTsKKyAgc3Bhbi0+cmVmY291
bnQrKzsKKyAgdm9pZCogcmVzdWx0ID0gc3Bhbi0+b2JqZWN0czsKKyAgc3Bhbi0+b2JqZWN0cyA9
ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHJlc3VsdCkpOworICBpZiAoc3Bhbi0+b2JqZWN0
cyA9PSBOVUxMKSB7CisgICAgLy8gTW92ZSB0byBlbXB0eSBsaXN0CisgICAgRExMX1JlbW92ZShz
cGFuKTsKKyAgICBETExfUHJlcGVuZCgmZW1wdHlfLCBzcGFuKTsKKyAgICBFdmVudChzcGFuLCAn
RScsIDApOworICB9CisgIGNvdW50ZXJfLS07CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIEZl
dGNoIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0gYW5kIGFkZCB0byB0aGUgY2VudHJhbCBjYWNoZSBm
cmVlbGlzdC4KK2lubGluZSB2b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlBvcHVsYXRl
KCkgeworICAvLyBSZWxlYXNlIGNlbnRyYWwgbGlzdCBsb2NrIHdoaWxlIG9wZXJhdGluZyBvbiBw
YWdlaGVhcAorICBsb2NrXy5VbmxvY2soKTsKKyAgY29uc3Qgc2l6ZV90IG5wYWdlcyA9IGNsYXNz
X3RvX3BhZ2VzW3NpemVfY2xhc3NfXTsKKworICBTcGFuKiBzcGFuOworICB7CisgICAgU3Bpbkxv
Y2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CisgICAgc3BhbiA9IHBhZ2VoZWFwLT5OZXcobnBh
Z2VzKTsKKyAgICBpZiAoc3BhbikgcGFnZWhlYXAtPlJlZ2lzdGVyU2l6ZUNsYXNzKHNwYW4sIHNp
emVfY2xhc3NfKTsKKyAgfQorICBpZiAoc3BhbiA9PSBOVUxMKSB7CisgICAgTUVTU0FHRSgiYWxs
b2NhdGlvbiBmYWlsZWQ6ICVkXG4iLCBlcnJubyk7CisgICAgbG9ja18uTG9jaygpOworICAgIHJl
dHVybjsKKyAgfQorCisgIC8vIFNwbGl0IHRoZSBibG9jayBpbnRvIHBpZWNlcyBhbmQgYWRkIHRv
IHRoZSBmcmVlLWxpc3QKKyAgLy8gVE9ETzogY29sb3Jpbmcgb2Ygb2JqZWN0cyB0byBhdm9pZCBj
YWNoZSBjb25mbGljdHM/CisgIHZvaWQqKiB0YWlsID0gJnNwYW4tPm9iamVjdHM7CisgIGNoYXIq
IHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hpZnQp
OworICBjaGFyKiBsaW1pdCA9IHB0ciArIChucGFnZXMgPDwga1BhZ2VTaGlmdCk7CisgIGNvbnN0
IHNpemVfdCBzaXplID0gQnl0ZVNpemVGb3JDbGFzcyhzaXplX2NsYXNzXyk7CisgIGludCBudW0g
PSAwOworICB3aGlsZSAocHRyICsgc2l6ZSA8PSBsaW1pdCkgeworICAgICp0YWlsID0gcHRyOwor
ICAgIHRhaWwgPSByZWludGVycHJldF9jYXN0PHZvaWQqKj4ocHRyKTsKKyAgICBwdHIgKz0gc2l6
ZTsKKyAgICBudW0rKzsKKyAgfQorICBBU1NFUlQocHRyIDw9IGxpbWl0KTsKKyAgKnRhaWwgPSBO
VUxMOworICBzcGFuLT5yZWZjb3VudCA9IDA7IC8vIE5vIHN1Yi1vYmplY3QgaW4gdXNlIHlldAor
CisgIC8vIEFkZCBzcGFuIHRvIGxpc3Qgb2Ygbm9uLWVtcHR5IHNwYW5zCisgIGxvY2tfLkxvY2so
KTsKKyAgRExMX1ByZXBlbmQoJm5vbmVtcHR5Xywgc3Bhbik7CisgIGNvdW50ZXJfICs9IG51bTsK
K30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUQ01hbGxvY19UaHJlYWRDYWNoZSBpbXBsZW1lbnRhdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK2lubGluZSBib29sIFRDTWFsbG9jX1RocmVhZENhY2hlOjpTYW1w
bGVBbGxvY2F0aW9uKHNpemVfdCBrKSB7CisgIGlmIChieXRlc191bnRpbF9zYW1wbGVfIDwgaykg
eworICAgIFBpY2tOZXh0U2FtcGxlKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0gZWxzZSB7Cisg
ICAgYnl0ZXNfdW50aWxfc2FtcGxlXyAtPSBrOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQor
Cit2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0KHB0aHJlYWRfdCB0aWQpIHsKKyAgc2l6
ZV8gPSAwOworICBuZXh0XyA9IE5VTEw7CisgIHByZXZfID0gTlVMTDsKKyAgdGlkXyAgPSB0aWQ7
CisgIHNldHNwZWNpZmljXyA9IGZhbHNlOworICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051
bUNsYXNzZXM7ICsrY2wpIHsKKyAgICBsaXN0X1tjbF0uSW5pdCgpOworICB9CisKKyAgLy8gSW5p
dGlhbGl6ZSBSTkcgLS0gcnVuIGl0IGZvciBhIGJpdCB0byBnZXQgdG8gZ29vZCB2YWx1ZXMKKyAg
cm5kXyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
dGhpcykpOworICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgUGlja05leHRT
YW1wbGUoKTsKKyAgfQorfQorCit2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpDbGVhbnVwKCkg
eworICAvLyBQdXQgdW51c2VkIG1lbW9yeSBiYWNrIGludG8gY2VudHJhbCBjYWNoZQorICBmb3Ig
KHNpemVfdCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKKyAgICBGcmVlTGlzdCog
c3JjID0gJmxpc3RfW2NsXTsKKyAgICBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0KiBkc3QgPSAm
Y2VudHJhbF9jYWNoZVtjbF07CisgICAgU3BpbkxvY2tIb2xkZXIgaCgmZHN0LT5sb2NrXyk7Cisg
ICAgd2hpbGUgKCFzcmMtPmVtcHR5KCkpIHsKKyAgICAgIGRzdC0+SW5zZXJ0KHNyYy0+UG9wKCkp
OworICAgIH0KKyAgfQorfQorCitpbmxpbmUgdm9pZCogVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkFs
bG9jYXRlKHNpemVfdCBzaXplKSB7CisgIEFTU0VSVChzaXplIDw9IGtNYXhTaXplKTsKKyAgY29u
c3Qgc2l6ZV90IGNsID0gU2l6ZUNsYXNzKHNpemUpOworICBGcmVlTGlzdCogbGlzdCA9ICZsaXN0
X1tjbF07CisgIGlmIChsaXN0LT5lbXB0eSgpKSB7CisgICAgRmV0Y2hGcm9tQ2VudHJhbENhY2hl
KGNsKTsKKyAgICBpZiAobGlzdC0+ZW1wdHkoKSkgcmV0dXJuIE5VTEw7CisgIH0KKyAgc2l6ZV8g
LT0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7CisgIHJldHVybiBsaXN0LT5Qb3AoKTsKK30KKworaW5s
aW5lIHZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlYWxsb2NhdGUodm9pZCogcHRyLCBzaXpl
X3QgY2wpIHsKKyAgc2l6ZV8gKz0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7CisgIEZyZWVMaXN0KiBs
aXN0ID0gJmxpc3RfW2NsXTsKKyAgbGlzdC0+UHVzaChwdHIpOworICAvLyBJZiBlbm91Z2ggZGF0
YSBpcyBmcmVlLCBwdXQgYmFjayBpbnRvIGNlbnRyYWwgY2FjaGUKKyAgaWYgKGxpc3QtPmxlbmd0
aCgpID4ga01heEZyZWVMaXN0TGVuZ3RoKSB7CisgICAgUmVsZWFzZVRvQ2VudHJhbENhY2hlKGNs
LCBrTnVtT2JqZWN0c1RvTW92ZSk7CisgIH0KKyAgaWYgKHNpemVfID49IHBlcl90aHJlYWRfY2Fj
aGVfc2l6ZSkgU2NhdmVuZ2UoKTsKK30KKworLy8gUmVtb3ZlIHNvbWUgb2JqZWN0cyBvZiBjbGFz
cyAiY2wiIGZyb20gY2VudHJhbCBjYWNoZSBhbmQgYWRkIHRvIHRocmVhZCBoZWFwCitpbmxpbmUg
dm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6RmV0Y2hGcm9tQ2VudHJhbENhY2hlKHNpemVfdCBj
bCkgeworICBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0KiBzcmMgPSAmY2VudHJhbF9jYWNoZVtj
bF07CisgIEZyZWVMaXN0KiBkc3QgPSAmbGlzdF9bY2xdOworICBTcGluTG9ja0hvbGRlciBoKCZz
cmMtPmxvY2tfKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtT2JqZWN0c1RvTW92ZTsgaSsr
KSB7CisgICAgdm9pZCogb2JqZWN0ID0gc3JjLT5SZW1vdmUoKTsKKyAgIGlmIChvYmplY3QgPT0g
TlVMTCkgeworICAgICAgaWYgKGkgPT0gMCkgeworICAgICAgICBzcmMtPlBvcHVsYXRlKCk7ICAg
ICAgICAvLyBUZW1wb3JhcmlseSByZWxlYXNlcyBzcmMtPmxvY2tfCisgICAgICAgIG9iamVjdCA9
IHNyYy0+UmVtb3ZlKCk7CisgICAgIH0KKyAgICAgIGlmIChvYmplY3QgPT0gTlVMTCkgeworICAg
ICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgZHN0LT5QdXNoKG9iamVjdCk7CisgICAg
c2l6ZV8gKz0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7CisgIH0KK30KKworLy8gUmVtb3ZlIHNvbWUg
b2JqZWN0cyBvZiBjbGFzcyAiY2wiIGZyb20gdGhyZWFkIGhlYXAgYW5kIGFkZCB0byBjZW50cmFs
IGNhY2hlCitpbmxpbmUgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6UmVsZWFzZVRvQ2VudHJh
bENhY2hlKHNpemVfdCBjbCwgaW50IE4pIHsKKyAgRnJlZUxpc3QqIHNyYyA9ICZsaXN0X1tjbF07
CisgIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QqIGRzdCA9ICZjZW50cmFsX2NhY2hlW2NsXTsK
KyAgU3BpbkxvY2tIb2xkZXIgaCgmZHN0LT5sb2NrXyk7CisgIGlmIChOID4gc3JjLT5sZW5ndGgo
KSkgTiA9IHNyYy0+bGVuZ3RoKCk7CisgIHNpemVfIC09IE4qQnl0ZVNpemVGb3JDbGFzcyhjbCk7
CisgIHdoaWxlIChOLS0gPiAwKSB7CisgICAgdm9pZCogcHRyID0gc3JjLT5Qb3AoKTsKKyAgICBk
c3QtPkluc2VydChwdHIpOworICB9Cit9CisKKy8vIFJlbGVhc2UgaWRsZSBtZW1vcnkgdG8gdGhl
IGNlbnRyYWwgY2FjaGUKK2lubGluZSB2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpTY2F2ZW5n
ZSgpIHsKKyAgLy8gSWYgdGhlIGxvdy13YXRlciBtYXJrIGZvciB0aGUgZnJlZSBsaXN0IGlzIEws
IGl0IG1lYW5zIHdlIHdvdWxkCisgIC8vIG5vdCBoYXZlIGhhZCB0byBhbGxvY2F0ZSBhbnl0aGlu
ZyBmcm9tIHRoZSBjZW50cmFsIGNhY2hlIGV2ZW4gaWYKKyAgLy8gd2UgaGFkIHJlZHVjZWQgdGhl
IGZyZWUgbGlzdCBzaXplIGJ5IEwuICBXZSBhaW0gdG8gZ2V0IGNsb3NlciB0bworICAvLyB0aGF0
IHNpdHVhdGlvbiBieSBkcm9wcGluZyBMLzIgbm9kZXMgZnJvbSB0aGUgZnJlZSBsaXN0LiAgVGhp
cworICAvLyBtYXkgbm90IHJlbGVhc2UgbXVjaCBtZW1vcnksIGJ1dCBpZiBzbyB3ZSB3aWxsIGNh
bGwgc2NhdmVuZ2UgYWdhaW4KKyAgLy8gcHJldHR5IHNvb24gYW5kIHRoZSBsb3ctd2F0ZXIgbWFy
a3Mgd2lsbCBiZSBoaWdoIG9uIHRoYXQgY2FsbC4KKyNpZm5kZWYgS1hDX0NIQU5HRVMKKyAgaW50
NjQgc3RhcnQgPSBDeWNsZUNsb2NrOjpOb3coKTsKKyNlbmRpZgorCisgIGZvciAoc2l6ZV90IGNs
ID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgY2wrKykgeworICAgIEZyZWVMaXN0KiBsaXN0ID0gJmxp
c3RfW2NsXTsKKyAgICBjb25zdCBpbnQgbG93bWFyayA9IGxpc3QtPmxvd3dhdGVybWFyaygpOwor
ICAgIGlmIChsb3dtYXJrID4gMCkgeworICAgICAgY29uc3QgaW50IGRyb3AgPSAobG93bWFyayA+
IDEpID8gbG93bWFyay8yIDogMTsKKyAgICAgIFJlbGVhc2VUb0NlbnRyYWxDYWNoZShjbCwgZHJv
cCk7CisgICAgfQorICAgIGxpc3QtPmNsZWFyX2xvd3dhdGVybWFyaygpOworICB9CisKKyNpZm5k
ZWYgS1hDX0NIQU5HRVMKKyAgaW50NjQgZmluaXNoID0gQ3ljbGVDbG9jazo6Tm93KCk7CisgIEN5
Y2xlVGltZXIgY3Q7CisgIE1FU1NBR0UoIkdDOiAlLjBmIG5zXG4iLCBjdC5DeWNsZXNUb1VzZWMo
ZmluaXNoLXN0YXJ0KSoxMDAwLjApOworI2VuZGlmCit9CisKK2lubGluZSBUQ01hbGxvY19UaHJl
YWRDYWNoZSogVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKCkgeworICB2b2lkKiBwdHIg
PSBOVUxMOworICBpZiAoIXRzZF9pbml0ZWQpIHsKKyAgICBJbml0TW9kdWxlKCk7CisgIH0gZWxz
ZSB7CisgICAgcHRyID0gcHRocmVhZF9nZXRzcGVjaWZpYyhoZWFwX2tleSk7CisgIH0KKyAgaWYg
KHB0ciA9PSBOVUxMKSBwdHIgPSBDcmVhdGVDYWNoZUlmTmVjZXNzYXJ5KCk7CisgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFRDTWFsbG9jX1RocmVhZENhY2hlKj4ocHRyKTsKK30KKworLy8gSW4g
ZGVsZXRpb24gcGF0aHMsIHdlIGRvIG5vdCB0cnkgdG8gY3JlYXRlIGEgdGhyZWFkLWNhY2hlLiAg
VGhpcyBpcworLy8gYmVjYXVzZSB3ZSBtYXkgYmUgaW4gdGhlIHRocmVhZCBkZXN0cnVjdGlvbiBj
b2RlIGFuZCBtYXkgaGF2ZQorLy8gYWxyZWFkeSBjbGVhbmVkIHVwIHRoZSBjYWNoZSBmb3IgdGhp
cyB0aHJlYWQuCitpbmxpbmUgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIFRDTWFsbG9jX1RocmVhZENh
Y2hlOjpHZXRDYWNoZUlmUHJlc2VudCgpIHsKKyAgaWYgKCF0c2RfaW5pdGVkKSByZXR1cm4gTlVM
TDsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VENNYWxsb2NfVGhyZWFkQ2FjaGUqPgorICAg
IChwdGhyZWFkX2dldHNwZWNpZmljKGhlYXBfa2V5KSk7Cit9CisKK3ZvaWQgVENNYWxsb2NfVGhy
ZWFkQ2FjaGU6OlBpY2tOZXh0U2FtcGxlKCkgeworICAvLyBNYWtlIG5leHQgInJhbmRvbSIgbnVt
YmVyCisgIC8vIHheMzIreF4yMit4XjIreF4xKzEgaXMgYSBwcmltaXRpdmUgcG9seW5vbWlhbCBm
b3IgcmFuZG9tIG51bWJlcnMKKyAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtQb2x5ID0gKDEgPDwg
MjIpIHwgKDEgPDwgMikgfCAoMSA8PCAxKSB8ICgxIDw8IDApOworICB1aW50MzJfdCByID0gcm5k
XzsKKyAgcm5kXyA9IChyIDw8IDEpIF4gKChzdGF0aWNfY2FzdDxpbnQzMl90PihyKSA+PiAzMSkg
JiBrUG9seSk7CisKKyAgLy8gTmV4dCBwb2ludCBpcyAicm5kXyAlICgyKnNhbXBsZV9wZXJpb2Qp
Ii4gIEkuZS4sIGF2ZXJhZ2UKKyAgLy8gaW5jcmVtZW50IGlzICJzYW1wbGVfcGVyaW9kIi4KKyAg
Ynl0ZXNfdW50aWxfc2FtcGxlXyA9IHJuZF8gJSBrU2FtcGxlUGFyYW1ldGVyOworfQorCit2b2lk
IFRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0TW9kdWxlKCkgeworICAvLyBUaGVyZSBpcyBhIHNs
aWdodCBwb3RlbnRpYWwgcmFjZSBoZXJlIGJlY2F1c2Ugb2YgZG91YmxlLWNoZWNrZWQKKyAgLy8g
bG9ja2luZyBpZGlvbS4gIEhvd2V2ZXIsIGFzIGxvbmcgYXMgdGhlIHByb2dyYW0gZG9lcyBhIHNt
YWxsCisgIC8vIGFsbG9jYXRpb24gYmVmb3JlIHN3aXRjaGluZyB0byBtdWx0aS10aHJlYWRlZCBt
b2RlLCB3ZSB3aWxsIGJlCisgIC8vIGZpbmUuICBXZSBpbmNyZWFzZSB0aGUgY2hhbmNlcyBvZiBk
b2luZyBzdWNoIGEgc21hbGwgYWxsb2NhdGlvbgorICAvLyBieSBkb2luZyBvbmUgaW4gdGhlIGNv
bnN0cnVjdG9yIG9mIHRoZSBtb2R1bGVfZW50ZXJfZXhpdF9ob29rCisgIC8vIG9iamVjdCBkZWNs
YXJlZCBiZWxvdy4KKyAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CisgIGlmICgh
cGhpbml0ZWQpIHsKKyAgICBJbml0U2l6ZUNsYXNzZXMoKTsKKyAgICB0aHJlYWRoZWFwX2FsbG9j
YXRvci5Jbml0KCk7CisgICAgc3Bhbl9hbGxvY2F0b3IuSW5pdCgpOworICAgIHNwYW5fYWxsb2Nh
dG9yLk5ldygpOyAvLyBSZWR1Y2UgY2FjaGUgY29uZmxpY3RzCisgICAgc3Bhbl9hbGxvY2F0b3Iu
TmV3KCk7IC8vIFJlZHVjZSBjYWNoZSBjb25mbGljdHMKKyAgICBzdGFja3RyYWNlX2FsbG9jYXRv
ci5Jbml0KCk7CisgICAgRExMX0luaXQoJnNhbXBsZWRfb2JqZWN0cyk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBrTnVtQ2xhc3NlczsgKytpKSB7CisgICAgICBjZW50cmFsX2NhY2hlW2ld
LkluaXQoaSk7CisgICAgfQorICAgIG5ldyAoKHZvaWQqKXBhZ2VoZWFwX21lbW9yeSkgVENNYWxs
b2NfUGFnZUhlYXA7CisgICAgcGhpbml0ZWQgPSAxOworICB9Cit9CisKK3ZvaWQgVENNYWxsb2Nf
VGhyZWFkQ2FjaGU6OkluaXRUU0QoKSB7CisgIEFTU0VSVCghdHNkX2luaXRlZCk7CisgIHB0aHJl
YWRfa2V5X2NyZWF0ZSgmaGVhcF9rZXksIERlbGV0ZUNhY2hlKTsKKyAgdHNkX2luaXRlZCA9IHRy
dWU7CisgICAgCisgIC8vIFdlIG1heSBoYXZlIHVzZWQgYSBmYWtlIHB0aHJlYWRfdCBmb3IgdGhl
IG1haW4gdGhyZWFkLiAgRml4IGl0LgorICBwdGhyZWFkX3QgemVybzsKKyAgbWVtc2V0KCZ6ZXJv
LCAwLCBzaXplb2YoemVybykpOworICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsK
KyAgZm9yIChUQ01hbGxvY19UaHJlYWRDYWNoZSogaCA9IHRocmVhZF9oZWFwczsgaCAhPSBOVUxM
OyBoID0gaC0+bmV4dF8pIHsKKyAgICBpZiAoaC0+dGlkXyA9PSB6ZXJvKSB7CisgICAgICBoLT50
aWRfID0gcHRocmVhZF9zZWxmKCk7CisgICAgfQorICB9Cit9CisKK3ZvaWQqIFRDTWFsbG9jX1Ro
cmVhZENhY2hlOjpDcmVhdGVDYWNoZUlmTmVjZXNzYXJ5KCkgeworICAvLyBJbml0aWFsaXplIHBl
ci10aHJlYWQgZGF0YSBpZiBuZWNlc3NhcnkKKyAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAg
PSBOVUxMOworICB7CisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CisKKyAg
ICAvLyBFYXJseSBvbiBpbiBnbGliYydzIGxpZmUsIHdlIGNhbm5vdCBldmVuIGNhbGwgcHRocmVh
ZF9zZWxmKCkKKyAgICBwdGhyZWFkX3QgbWU7CisgICAgaWYgKCF0c2RfaW5pdGVkKSB7CisgICAg
ICBtZW1zZXQoJm1lLCAwLCBzaXplb2YobWUpKTsKKyAgICB9IGVsc2UgeworICAgICAgbWUgPSBw
dGhyZWFkX3NlbGYoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIG1heSBiZSBhIHJlY3Vyc2l2ZSBt
YWxsb2MgY2FsbCBmcm9tIHB0aHJlYWRfc2V0c3BlY2lmaWMoKQorICAgIC8vIEluIHRoYXQgY2Fz
ZSwgdGhlIGhlYXAgZm9yIHRoaXMgdGhyZWFkIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZAorICAg
IC8vIGFuZCBhZGRlZCB0byB0aGUgbGlua2VkIGxpc3QuICBTbyB3ZSBzZWFyY2ggZm9yIHRoYXQg
Zmlyc3QuCisgICAgZm9yIChUQ01hbGxvY19UaHJlYWRDYWNoZSogaCA9IHRocmVhZF9oZWFwczsg
aCAhPSBOVUxMOyBoID0gaC0+bmV4dF8pIHsKKyAgICAgIGlmIChoLT50aWRfID09IG1lKSB7Cisg
ICAgICAgIGhlYXAgPSBoOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoaGVhcCA9PSBOVUxMKSB7CisgICAgICAvLyBDcmVhdGUgdGhlIGhlYXAgYW5kIGFkZCBpdCB0
byB0aGUgbGlua2VkIGxpc3QKKyAgICAgIGhlYXAgPSB0aHJlYWRoZWFwX2FsbG9jYXRvci5OZXco
KTsKKyAgICAgIGhlYXAtPkluaXQobWUpOworICAgICAgaGVhcC0+bmV4dF8gPSB0aHJlYWRfaGVh
cHM7CisgICAgICBoZWFwLT5wcmV2XyA9IE5VTEw7CisgICAgICBpZiAodGhyZWFkX2hlYXBzICE9
IE5VTEwpIHRocmVhZF9oZWFwcy0+cHJldl8gPSBoZWFwOworICAgICAgdGhyZWFkX2hlYXBzID0g
aGVhcDsKKyAgICAgIHRocmVhZF9oZWFwX2NvdW50Kys7CisgICAgICBSZWNvbXB1dGVUaHJlYWRD
YWNoZVNpemUoKTsKKyAgICB9CisgIH0KKworICAvLyBXZSBjYWxsIHB0aHJlYWRfc2V0c3BlY2lm
aWMoKSBvdXRzaWRlIHRoZSBsb2NrIGJlY2F1c2UgaXQgbWF5CisgIC8vIGNhbGwgbWFsbG9jKCkg
cmVjdXJzaXZlbHkuICBUaGUgcmVjdXJzaXZlIGNhbGwgd2lsbCBuZXZlciBnZXQKKyAgLy8gaGVy
ZSBhZ2FpbiBiZWNhdXNlIGl0IHdpbGwgZmluZCB0aGUgYWxyZWFkeSBhbGxvY2F0ZWQgaGVhcCBp
biB0aGUKKyAgLy8gbGlua2VkIGxpc3Qgb2YgaGVhcHMuCisgIGlmICghaGVhcC0+c2V0c3BlY2lm
aWNfICYmIHRzZF9pbml0ZWQpIHsKKyAgICBoZWFwLT5zZXRzcGVjaWZpY18gPSB0cnVlOworICAg
IHB0aHJlYWRfc2V0c3BlY2lmaWMoaGVhcF9rZXksIGhlYXApOworICB9CisgIHJldHVybiBoZWFw
OworfQorCit2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpEZWxldGVDYWNoZSh2b2lkKiBwdHIp
IHsKKyAgLy8gUmVtb3ZlIGFsbCBtZW1vcnkgZnJvbSBoZWFwCisgIFRDTWFsbG9jX1RocmVhZENh
Y2hlKiBoZWFwOworICBoZWFwID0gcmVpbnRlcnByZXRfY2FzdDxUQ01hbGxvY19UaHJlYWRDYWNo
ZSo+KHB0cik7CisgIGhlYXAtPkNsZWFudXAoKTsKKworICAvLyBSZW1vdmUgZnJvbSBsaW5rZWQg
bGlzdAorICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKKyAgaWYgKGhlYXAtPm5l
eHRfICE9IE5VTEwpIGhlYXAtPm5leHRfLT5wcmV2XyA9IGhlYXAtPnByZXZfOworICBpZiAoaGVh
cC0+cHJldl8gIT0gTlVMTCkgaGVhcC0+cHJldl8tPm5leHRfID0gaGVhcC0+bmV4dF87CisgIGlm
ICh0aHJlYWRfaGVhcHMgPT0gaGVhcCkgdGhyZWFkX2hlYXBzID0gaGVhcC0+bmV4dF87CisgIHRo
cmVhZF9oZWFwX2NvdW50LS07CisgIFJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgpOworCisgIHRo
cmVhZGhlYXBfYWxsb2NhdG9yLkRlbGV0ZShoZWFwKTsKK30KKwordm9pZCBUQ01hbGxvY19UaHJl
YWRDYWNoZTo6UmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCkgeworICAvLyBEaXZpZGUgYXZhaWxh
YmxlIHNwYWNlIGFjcm9zcyB0aHJlYWRzCisgIGludCBuID0gdGhyZWFkX2hlYXBfY291bnQgPiAw
ID8gdGhyZWFkX2hlYXBfY291bnQgOiAxOworICBzaXplX3Qgc3BhY2UgPSBvdmVyYWxsX3RocmVh
ZF9jYWNoZV9zaXplIC8gbjsKKworICAvLyBMaW1pdCB0byBhbGxvd2VkIHJhbmdlCisgIGlmIChz
cGFjZSA8IGtNaW5UaHJlYWRDYWNoZVNpemUpIHNwYWNlID0ga01pblRocmVhZENhY2hlU2l6ZTsK
KyAgaWYgKHNwYWNlID4ga01heFRocmVhZENhY2hlU2l6ZSkgc3BhY2UgPSBrTWF4VGhyZWFkQ2Fj
aGVTaXplOworCisgIHBlcl90aHJlYWRfY2FjaGVfc2l6ZSA9IHNwYWNlOworfQorCit2b2lkIFRD
TWFsbG9jX1RocmVhZENhY2hlOjpQcmludCgpIGNvbnN0IHsKKyAgZm9yIChzaXplX3QgY2wgPSAw
OyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7CisgICAgTUVTU0FHRSgiICAgICAgJTUiIFBSSXVT
ICIgOiAlNGQgbGVuOyAlNGQgbG9cbiIsCisgICAgICAgICAgICBCeXRlU2l6ZUZvckNsYXNzKGNs
KSwKKyAgICAgICAgICAgIGxpc3RfW2NsXS5sZW5ndGgoKSwKKyAgICAgICAgICAgIGxpc3RfW2Ns
XS5sb3d3YXRlcm1hcmsoKSk7CisgIH0KK30KKworLy8gRXh0cmFjdCBpbnRlcmVzdGluZyBzdGF0
cworc3RydWN0IFRDTWFsbG9jU3RhdHMgeworICB1aW50NjRfdCBzeXN0ZW1fYnl0ZXM7ICAgICAg
ICAvLyBCeXRlcyBhbGxvY2VkIGZyb20gc3lzdGVtCisgIHVpbnQ2NF90IHRocmVhZF9ieXRlczsg
ICAgICAgIC8vIEJ5dGVzIGluIHRocmVhZCBjYWNoZXMKKyAgdWludDY0X3QgY2VudHJhbF9ieXRl
czsgICAgICAgLy8gQnl0ZXMgaW4gY2VudHJhbCBjYWNoZQorICB1aW50NjRfdCBwYWdlaGVhcF9i
eXRlczsgICAgICAvLyBCeXRlcyBpbiBwYWdlIGhlYXAKKyAgdWludDY0X3QgbWV0YWRhdGFfYnl0
ZXM7ICAgICAgLy8gQnl0ZXMgYWxsb2NlZCBmb3IgbWV0YWRhdGEKK307CisKKyNpZm5kZWYgS1hD
X0NIQU5HRVMKKy8vIEdldCBzdGF0cyBpbnRvICJyIi4gIEFsc28gZ2V0IHBlci1zaXplLWNsYXNz
IGNvdW50cyBpZiBjbGFzc19jb3VudCAhPSBOVUxMCitzdGF0aWMgdm9pZCBFeHRyYWN0U3RhdHMo
VENNYWxsb2NTdGF0cyogciwgdWludDY0X3QqIGNsYXNzX2NvdW50KSB7CisgIHItPmNlbnRyYWxf
Ynl0ZXMgPSAwOworICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wp
IHsKKyAgICBTcGluTG9ja0hvbGRlciBoKCZjZW50cmFsX2NhY2hlW2NsXS5sb2NrXyk7CisgICAg
Y29uc3QgaW50IGxlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLmxlbmd0aCgpOworICAgIHItPmNl
bnRyYWxfYnl0ZXMgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xhc3MoY2wp
KSAqIGxlbmd0aDsKKyAgICBpZiAoY2xhc3NfY291bnQpIGNsYXNzX2NvdW50W2NsXSA9IGxlbmd0
aDsKKyAgfQorCisgIC8vIEFkZCBzdGF0cyBmcm9tIHBlci10aHJlYWQgaGVhcHMKKyAgci0+dGhy
ZWFkX2J5dGVzID0gMDsKKyAgeyAvLyBzY29wZQorICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2Vo
ZWFwX2xvY2spOworICAgIGZvciAoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGggPSB0aHJlYWRfaGVh
cHM7IGggIT0gTlVMTDsgaCA9IGgtPm5leHRfKSB7CisgICAgICByLT50aHJlYWRfYnl0ZXMgKz0g
aC0+U2l6ZSgpOworICAgICAgaWYgKGNsYXNzX2NvdW50KSB7CisgICAgICAgIGZvciAoc2l6ZV90
IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgeworICAgICAgICAgIGNsYXNzX2NvdW50
W2NsXSArPSBoLT5mcmVlbGlzdF9sZW5ndGgoY2wpOworICAgICAgICB9CisgICAgICB9CisgICAg
fQorICB9CisKKyAgeyAvL3Njb3BlCisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9j
ayk7CisgICAgci0+c3lzdGVtX2J5dGVzID0gcGFnZWhlYXAtPlN5c3RlbUJ5dGVzKCk7CisgICAg
ci0+bWV0YWRhdGFfYnl0ZXMgPSBtZXRhZGF0YV9zeXN0ZW1fYnl0ZXM7CisgICAgci0+cGFnZWhl
YXBfYnl0ZXMgPSBwYWdlaGVhcC0+RnJlZUJ5dGVzKCk7CisgIH0KK30KKyNlbmRpZgorCisjaWZu
ZGVmIEtYQ19DSEFOR0VTCisvLyBXUklURSBzdGF0cyB0byAib3V0Igorc3RhdGljIHZvaWQgRHVt
cFN0YXRzKFRDTWFsbG9jX1ByaW50ZXIqIG91dCwgaW50IGxldmVsKSB7CisgIFRDTWFsbG9jU3Rh
dHMgc3RhdHM7CisgIHVpbnQ2NF90IGNsYXNzX2NvdW50W2tOdW1DbGFzc2VzXTsKKyAgRXh0cmFj
dFN0YXRzKCZzdGF0cywgKGxldmVsID49IDIgPyBjbGFzc19jb3VudCA6IE5VTEwpKTsKKworICBp
ZiAobGV2ZWwgPj0gMikgeworICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICAgIHVpbnQ2NF90IGN1bXVsYXRpdmUg
PSAwOworICAgIGZvciAoaW50IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgeworICAg
ICAgaWYgKGNsYXNzX2NvdW50W2NsXSA+IDApIHsKKyAgICAgICAgdWludDY0X3QgY2xhc3NfYnl0
ZXMgPSBjbGFzc19jb3VudFtjbF0gKiBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKKyAgICAgICAgY3Vt
dWxhdGl2ZSArPSBjbGFzc19ieXRlczsKKyAgICAgICAgb3V0LT5wcmludGYoImNsYXNzICUzZCBb
ICU4IiBQUkl1UyAiIGJ5dGVzIF0gOiAiCisgICAgICAgICAgICAgICAgIiU4IiBMTFUgIiBvYmpz
OyAlNS4xZiBNQjsgJTUuMWYgY3VtIE1CXG4iLAorICAgICAgICAgICAgICAgIGNsLCBCeXRlU2l6
ZUZvckNsYXNzKGNsKSwKKyAgICAgICAgICAgICAgICBjbGFzc19jb3VudFtjbF0sCisgICAgICAg
ICAgICAgICAgY2xhc3NfYnl0ZXMgLyAxMDQ4NTc2LjAsCisgICAgICAgICAgICAgICAgY3VtdWxh
dGl2ZSAvIDEwNDg1NzYuMCk7CisgICAgICB9CisgICAgfQorCisgICAgU3BpbkxvY2tIb2xkZXIg
aCgmcGFnZWhlYXBfbG9jayk7CisgICAgcGFnZWhlYXAtPkR1bXAob3V0KTsKKyAgfQorCisgIGNv
bnN0IHVpbnQ2NF90IGJ5dGVzX2luX3VzZSA9IHN0YXRzLnN5c3RlbV9ieXRlcworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnBhZ2VoZWFwX2J5dGVzCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMuY2VudHJhbF9ieXRlcworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnRocmVhZF9ieXRlczsKKworICBvdXQtPnByaW50
ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisg
ICAgICAgICAgICAgICJNQUxMT0M6ICUxMiIgTExVICIgSGVhcCBzaXplXG4iCisgICAgICAgICAg
ICAgICJNQUxMT0M6ICUxMiIgTExVICIgQnl0ZXMgaW4gdXNlIGJ5IGFwcGxpY2F0aW9uXG4iCisg
ICAgICAgICAgICAgICJNQUxMT0M6ICUxMiIgTExVICIgQnl0ZXMgZnJlZSBpbiBwYWdlIGhlYXBc
biIKKyAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBMTFUgIiBCeXRlcyBmcmVlIGluIGNlbnRy
YWwgY2FjaGVcbiIKKyAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBMTFUgIiBCeXRlcyBmcmVl
IGluIHRocmVhZCBjYWNoZXNcbiIKKyAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBMTFUgIiBT
cGFucyBpbiB1c2VcbiIKKyAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBMTFUgIiBUaHJlYWQg
aGVhcHMgaW4gdXNlXG4iCisgICAgICAgICAgICAgICJNQUxMT0M6ICUxMiIgTExVICIgTWV0YWRh
dGEgYWxsb2NhdGVkXG4iCisgICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsCisgICAgICAgICAgICAgIHN0YXRzLnN5c3RlbV9i
eXRlcywKKyAgICAgICAgICAgICAgYnl0ZXNfaW5fdXNlLAorICAgICAgICAgICAgICBzdGF0cy5w
YWdlaGVhcF9ieXRlcywKKyAgICAgICAgICAgICAgc3RhdHMuY2VudHJhbF9ieXRlcywKKyAgICAg
ICAgICAgICAgc3RhdHMudGhyZWFkX2J5dGVzLAorICAgICAgICAgICAgICB1aW50NjRfdChzcGFu
X2FsbG9jYXRvci5pbnVzZSgpKSwKKyAgICAgICAgICAgICAgdWludDY0X3QodGhyZWFkaGVhcF9h
bGxvY2F0b3IuaW51c2UoKSksCisgICAgICAgICAgICAgIHN0YXRzLm1ldGFkYXRhX2J5dGVzKTsK
K30KKworc3RhdGljIHZvaWQgUHJpbnRTdGF0cyhpbnQgbGV2ZWwpIHsKKyAgY29uc3QgaW50IGtC
dWZmZXJTaXplID0gMTYgPDwgMTA7CisgIGNoYXIqIGJ1ZmZlciA9IG5ldyBjaGFyW2tCdWZmZXJT
aXplXTsKKyAgVENNYWxsb2NfUHJpbnRlciBwcmludGVyKGJ1ZmZlciwga0J1ZmZlclNpemUpOwor
ICBEdW1wU3RhdHMoJnByaW50ZXIsIGxldmVsKTsKKyAgd3JpdGUoU1RERVJSX0ZJTEVOTywgYnVm
ZmVyLCBzdHJsZW4oYnVmZmVyKSk7CisgIGRlbGV0ZVtdIGJ1ZmZlcjsKK30KKworc3RhdGljIHZv
aWQqKiBEdW1wU3RhY2tUcmFjZXMoKSB7CisgIC8vIENvdW50IGhvdyBtdWNoIHNwYWNlIHdlIG5l
ZWQKKyAgaW50IG5lZWRlZF9zbG90cyA9IDA7CisgIHsKKyAgICBTcGluTG9ja0hvbGRlciBoKCZw
YWdlaGVhcF9sb2NrKTsKKyAgICBmb3IgKFNwYW4qIHMgPSBzYW1wbGVkX29iamVjdHMubmV4dDsg
cyAhPSAmc2FtcGxlZF9vYmplY3RzOyBzID0gcy0+bmV4dCkgeworICAgICAgU3RhY2tUcmFjZSog
c3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzLT5vYmplY3RzKTsKKyAgICAg
IG5lZWRlZF9zbG90cyArPSAzICsgc3RhY2stPmRlcHRoOworICAgIH0KKyAgICBuZWVkZWRfc2xv
dHMgKz0gMTAwOyAgICAgICAgICAgIC8vIFNsb3AgaW4gY2FzZSBzYW1wbGUgZ3Jvd3MKKyAgICBu
ZWVkZWRfc2xvdHMgKz0gbmVlZGVkX3Nsb3RzLzg7IC8vIEFuIGV4dHJhIDEyLjUlIHNsb3AKKyAg
fQorCisgIHZvaWQqKiByZXN1bHQgPSBuZXcgdm9pZCpbbmVlZGVkX3Nsb3RzXTsKKyAgaWYgKHJl
c3VsdCA9PSBOVUxMKSB7CisgICAgTUVTU0FHRSgidGNtYWxsb2M6IGNvdWxkIG5vdCBhbGxvY2F0
ZSAlZCBzbG90cyBmb3Igc3RhY2sgdHJhY2VzXG4iLAorICAgICAgICAgICAgbmVlZGVkX3Nsb3Rz
KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFw
X2xvY2spOworICBpbnQgdXNlZF9zbG90cyA9IDA7CisgIGZvciAoU3BhbiogcyA9IHNhbXBsZWRf
b2JqZWN0cy5uZXh0OyBzICE9ICZzYW1wbGVkX29iamVjdHM7IHMgPSBzLT5uZXh0KSB7CisgICAg
QVNTRVJUKHVzZWRfc2xvdHMgPCBuZWVkZWRfc2xvdHMpOyAgLy8gTmVlZCB0byBsZWF2ZSByb29t
IGZvciB0ZXJtaW5hdG9yCisgICAgU3RhY2tUcmFjZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0
PFN0YWNrVHJhY2UqPihzLT5vYmplY3RzKTsKKyAgICBpZiAodXNlZF9zbG90cyArIDMgKyBzdGFj
ay0+ZGVwdGggPj0gbmVlZGVkX3Nsb3RzKSB7CisgICAgICAvLyBObyBtb3JlIHJvb20KKyAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJlc3VsdFt1c2VkX3Nsb3RzKzBdID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oMSk7CisgICAgcmVzdWx0W3VzZWRfc2xvdHMrMV0gPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihzdGFjay0+c2l6ZSk7CisgICAgcmVzdWx0W3VzZWRfc2xvdHMrMl0gPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihzdGFjay0+ZGVwdGgpOworICAgIGZvciAoaW50IGQgPSAwOyBk
IDwgc3RhY2stPmRlcHRoOyBkKyspIHsKKyAgICAgIHJlc3VsdFt1c2VkX3Nsb3RzKzMrZF0gPSBz
dGFjay0+c3RhY2tbZF07CisgICAgfQorICAgIHVzZWRfc2xvdHMgKz0gMyArIHN0YWNrLT5kZXB0
aDsKKyAgfQorICByZXN1bHRbdXNlZF9zbG90c10gPSByZWludGVycHJldF9jYXN0PHZvaWQqPigw
KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisjaWZuZGVmIEtYQ19DSEFOR0VTCisK
Ky8vIFRDTWFsbG9jJ3Mgc3VwcG9ydCBmb3IgZXh0cmEgbWFsbG9jIGludGVyZmFjZXMKK2NsYXNz
IFRDTWFsbG9jSW1wbGVtZW50YXRpb24gOiBwdWJsaWMgTWFsbG9jRXh0ZW5zaW9uIHsKKyBwdWJs
aWM6CisgIHZpcnR1YWwgdm9pZCBHZXRTdGF0cyhjaGFyKiBidWZmZXIsIGludCBidWZmZXJfbGVu
Z3RoKSB7CisgICAgQVNTRVJUKGJ1ZmZlcl9sZW5ndGggPiAwKTsKKyAgICBUQ01hbGxvY19Qcmlu
dGVyIHByaW50ZXIoYnVmZmVyLCBidWZmZXJfbGVuZ3RoKTsKKworICAgIC8vIFByaW50IGxldmVs
IG9uZSBzdGF0cyB1bmxlc3MgbG90cyBvZiBzcGFjZSBpcyBhdmFpbGFibGUKKyAgICBpZiAoYnVm
ZmVyX2xlbmd0aCA8IDEwMDAwKSB7CisgICAgICBEdW1wU3RhdHMoJnByaW50ZXIsIDEpOworICAg
IH0gZWxzZSB7CisgICAgICBEdW1wU3RhdHMoJnByaW50ZXIsIDIpOworICAgIH0KKyAgfQorCisg
IHZpcnR1YWwgdm9pZCoqIFJlYWRTdGFja1RyYWNlcygpIHsKKyAgICByZXR1cm4gRHVtcFN0YWNr
VHJhY2VzKCk7CisgIH0KKworICB2aXJ0dWFsIGJvb2wgR2V0TnVtZXJpY1Byb3BlcnR5KGNvbnN0
IGNoYXIqIG5hbWUsIHNpemVfdCogdmFsdWUpIHsKKyAgICBBU1NFUlQobmFtZSAhPSBOVUxMKTsK
KworICAgIGlmIChzdHJjbXAobmFtZSwgImdlbmVyaWMuY3VycmVudF9hbGxvY2F0ZWRfYnl0ZXMi
KSA9PSAwKSB7CisgICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOworICAgICAgRXh0cmFjdFN0YXRz
KCZzdGF0cywgTlVMTCk7CisgICAgICAqdmFsdWUgPSBzdGF0cy5zeXN0ZW1fYnl0ZXMKKyAgICAg
ICAgICAgICAgIC0gc3RhdHMudGhyZWFkX2J5dGVzCisgICAgICAgICAgICAgICAtIHN0YXRzLmNl
bnRyYWxfYnl0ZXMKKyAgICAgICAgICAgICAgIC0gc3RhdHMucGFnZWhlYXBfYnl0ZXM7CisgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc3RyY21wKG5hbWUsICJnZW5lcmljLmhl
YXBfc2l6ZSIpID09IDApIHsKKyAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7CisgICAgICBFeHRy
YWN0U3RhdHMoJnN0YXRzLCBOVUxMKTsKKyAgICAgICp2YWx1ZSA9IHN0YXRzLnN5c3RlbV9ieXRl
czsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzdHJjbXAobmFtZSwgInRj
bWFsbG9jLnNsYWNrX2J5dGVzIikgPT0gMCkgeworICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYnl0
ZXMgaW4gdGhlIHBhZ2UgaGVhcCBhcmUgbm90IGZyYWdtZW50ZWQgdG9vCisgICAgICAvLyBiYWRs
eSwgYW5kIGFyZSB0aGVyZWZvcmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgorICAgICAgU3Bp
bkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7CisgICAgICAqdmFsdWUgPSBwYWdlaGVhcC0+
RnJlZUJ5dGVzKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc3RyY21w
KG5hbWUsICJ0Y21hbGxvYy5tYXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikgPT0gMCkgewor
ICAgICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7CisgICAgICAqdmFsdWUgPSBv
dmVyYWxsX3RocmVhZF9jYWNoZV9zaXplOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgaWYgKHN0cmNtcChuYW1lLCAidGNtYWxsb2MuY3VycmVudF90b3RhbF90aHJlYWRfY2FjaGVf
Ynl0ZXMiKSA9PSAwKSB7CisgICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOworICAgICAgRXh0cmFj
dFN0YXRzKCZzdGF0cywgTlVMTCk7CisgICAgICAqdmFsdWUgPSBzdGF0cy50aHJlYWRfYnl0ZXM7
CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKwor
ICB2aXJ0dWFsIGJvb2wgU2V0TnVtZXJpY1Byb3BlcnR5KGNvbnN0IGNoYXIqIG5hbWUsIHNpemVf
dCB2YWx1ZSkgeworICAgIEFTU0VSVChuYW1lICE9IE5VTEwpOworCisgICAgaWYgKHN0cmNtcChu
YW1lLCAidGNtYWxsb2MubWF4X3RvdGFsX3RocmVhZF9jYWNoZV9ieXRlcyIpID09IDApIHsKKyAg
ICAgIC8vIENsaXAgdGhlIHZhbHVlIHRvIGEgcmVhc29uYWJsZSByYW5nZQorICAgICAgaWYgKHZh
bHVlIDwga01pblRocmVhZENhY2hlU2l6ZSkgdmFsdWUgPSBrTWluVGhyZWFkQ2FjaGVTaXplOwor
ICAgICAgaWYgKHZhbHVlID4gKDE8PDMwKSkgdmFsdWUgPSAoMTw8MzApOyAgICAgLy8gTGltaXQg
dG8gMUdCCisKKyAgICAgIFNwaW5Mb2NrSG9sZGVyIGwoJnBhZ2VoZWFwX2xvY2spOworICAgICAg
b3ZlcmFsbF90aHJlYWRfY2FjaGVfc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4odmFsdWUpOwor
ICAgICAgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OlJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgpOwor
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9Owor
I2VuZGlmCisKKy8vIFJlZEhhdCA5J3MgcHRocmVhZCBtYW5hZ2VyIGFsbG9jYXRlcyBhbiBvYmpl
Y3QgZGlyZWN0bHkgYnkgY2FsbGluZworLy8gYSBfX2xpYmNfWFhYKCkgcm91dGluZS4gIFRoaXMg
bWVtb3J5IGJsb2NrIGlzIG5vdCBrbm93biB0byB0Y21hbGxvYy4KKy8vIEF0IGNsZWFudXAgdGlt
ZSwgdGhlIHB0aHJlYWQgbWFuYWdlciBjYWxscyBmcmVlKCkgb24gdGhpcworLy8gcG9pbnRlciwg
d2hpY2ggdGhlbiBjcmFzaGVzLgorLy8KKy8vIFdlIGhhY2sgYXJvdW5kIHRoaXMgcHJvYmxlbSBi
eSBkaXNhYmxpbmcgYWxsIGRlYWxsb2NhdGlvbnMKKy8vIGFmdGVyIGEgZ2xvYmFsIG9iamVjdCBk
ZXN0cnVjdG9yIGluIHRoaXMgbW9kdWxlIGhhcyBiZWVuIGNhbGxlZC4KKyNpZm5kZWYgS1hDX0NI
QU5HRVMKK3N0YXRpYyBib29sIHRjbWFsbG9jX2lzX2Rlc3Ryb3llZCA9IGZhbHNlOworI2VuZGlm
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gSGVscGVycyBmb3IgdGhlIGV4cG9ydGVkIHJvdXRpbmVzIGJl
bG93CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworI2lmbmRlZiBLWENfQ0hBTkdFUworCitzdGF0aWMgU3Bhbiog
RG9TYW1wbGVkQWxsb2NhdGlvbihzaXplX3Qgc2l6ZSkgeworICBTcGluTG9ja0hvbGRlciBoKCZw
YWdlaGVhcF9sb2NrKTsKKworICAvLyBBbGxvY2F0ZSBzcGFuCisgIFNwYW4qIHNwYW4gPSBwYWdl
aGVhcC0+TmV3KHBhZ2VzKHNpemUgPT0gMCA/IDEgOiBzaXplKSk7CisgIGlmIChzcGFuID09IE5V
TEwpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIC8vIEFsbG9jYXRlIHN0YWNrIHRyYWNl
CisgIFN0YWNrVHJhY2UqIHN0YWNrID0gc3RhY2t0cmFjZV9hbGxvY2F0b3IuTmV3KCk7CisgIGlm
IChzdGFjayA9PSBOVUxMKSB7CisgICAgLy8gU2FtcGxpbmcgZmFpbGVkIGJlY2F1c2Ugb2YgbGFj
ayBvZiBtZW1vcnkKKyAgICByZXR1cm4gc3BhbjsKKyAgfQorCisgIC8vIEZpbGwgc3RhY2sgdHJh
Y2UgYW5kIHJlY29yZCBwcm9wZXJseQorICBzdGFjay0+ZGVwdGggPSBHZXRTdGFja1RyYWNlKHN0
YWNrLT5zdGFjaywga01heFN0YWNrRGVwdGgsIDIpOworICBzdGFjay0+c2l6ZSA9IHNpemU7Cisg
IHNwYW4tPnNhbXBsZSA9IDE7CisgIHNwYW4tPm9iamVjdHMgPSBzdGFjazsKKyAgRExMX1ByZXBl
bmQoJnNhbXBsZWRfb2JqZWN0cywgc3Bhbik7CisKKyAgcmV0dXJuIHNwYW47Cit9CisjZW5kaWYK
Kworc3RhdGljIGlubGluZSB2b2lkKiBkb19tYWxsb2Moc2l6ZV90IHNpemUpIHsKKworI2lmbmRl
ZiBLWENfQ0hBTkdFUworICBpZiAoVENNYWxsb2NEZWJ1Zzo6bGV2ZWwgPj0gVENNYWxsb2NEZWJ1
Zzo6a1ZlcmJvc2UpIAorICAgIE1FU1NBR0UoIkluIHRjbWFsbG9jIGRvX21hbGxvYyglIiBQUkl1
UyIpXG4iLCBzaXplKTsKKyNlbmRpZgorCisgIC8vIFRoZSBmb2xsb3dpbmcgY2FsbCBmb3JjZXMg
bW9kdWxlIGluaXRpYWxpemF0aW9uCisgIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0gVENN
YWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKCk7CisjaWZuZGVmIEtYQ19DSEFOR0VTCisgIGlm
IChoZWFwLT5TYW1wbGVBbGxvY2F0aW9uKHNpemUpKSB7CisgICAgU3Bhbiogc3BhbiA9IERvU2Ft
cGxlZEFsbG9jYXRpb24oc2l6ZSk7CisgICAgaWYgKHNwYW4gPT0gTlVMTCkgcmV0dXJuIE5VTEw7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNwYW4tPnN0YXJ0IDw8IGtQYWdl
U2hpZnQpOworICB9IGVsc2UKKyNlbmRpZgorICAgICAgaWYgKHNpemUgPiBrTWF4U2l6ZSkgewor
ICAgIC8vIFVzZSBwYWdlLWxldmVsIGFsbG9jYXRvcgorICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBh
Z2VoZWFwX2xvY2spOworICAgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+TmV3KHBhZ2VzKHNpemUp
KTsKKyAgICBpZiAoc3BhbiA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oc3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdCk7CisgIH0gZWxzZSB7
CisgICAgcmV0dXJuIGhlYXAtPkFsbG9jYXRlKHNpemUpOworICB9Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBkb19mcmVlKHZvaWQqIHB0cikgeworI2lmbmRlZiBLWENfQ0hBTkdFUworICBpZiAo
VENNYWxsb2NEZWJ1Zzo6bGV2ZWwgPj0gVENNYWxsb2NEZWJ1Zzo6a1ZlcmJvc2UpIAorICAgIE1F
U1NBR0UoIkluIHRjbWFsbG9jIGRvX2ZyZWUoJXApXG4iLCBwdHIpOworI2VuZGlmCisjaWYgS1hD
X0NIQU5HRVMKKyAgaWYgKHB0ciA9PSBOVUxMKSByZXR1cm47IAorI2Vsc2UKKyAgaWYgKHB0ciA9
PSBOVUxMIHx8IHRjbWFsbG9jX2lzX2Rlc3Ryb3llZCkgcmV0dXJuOworI2VuZGlmCisKKyAgQVNT
RVJUKHBhZ2VoZWFwICE9IE5VTEwpOyAgLy8gU2hvdWxkIG5vdCBjYWxsIGZyZWUoKSBiZWZvcmUg
bWFsbG9jKCkKKyAgY29uc3QgUGFnZUlEIHAgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
cHRyKSA+PiBrUGFnZVNoaWZ0OworICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPkdldERlc2NyaXB0
b3IocCk7CisKKyNpZm5kZWYgS1hDX0NIQU5HRVMKKyAgaWYgKHNwYW4gPT0gTlVMTCkgeworICAg
IC8vIFdlJ3ZlIHNlZW4gc3lzdGVtcyB3aGVyZSBhIHBpZWNlIG9mIG1lbW9yeSBhbGxvY2F0ZWQg
dXNpbmcgdGhlCisgICAgLy8gYWxsb2NhdG9yIGJ1aWx0IGluIHRvIGxpYmMgaXMgZGVhbGxvY2F0
ZWQgdXNpbmcgZnJlZSgpIGFuZAorICAgIC8vIHRoZXJlZm9yZSBlbmRzIHVwIGluc2lkZSB0Y21h
bGxvYyB3aGljaCBjYW4ndCBmaW5kIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcgc3Bhbi4gIFdl
IHNpbGVudGx5IHRocm93IHRoaXMgb2JqZWN0IG9uIHRoZSBmbG9vcgorICAgIC8vIGluc3RlYWQg
b2YgY3Jhc2hpbmcuCisgICAgTUVTU0FHRSgidGNtYWxsb2M6IGlnbm9yaW5nIHBvdGVudGlhbCBn
bGliYy0yLjMuNSBpbmR1Y2VkIGZyZWUgIgorICAgICAgICAgICAgIm9mIGFuIHVua25vd24gb2Jq
ZWN0ICVwXG4iLCBwdHIpOworICAgIHJldHVybjsKKyAgfQorI2VuZGlmCisKKyAgQVNTRVJUKHNw
YW4gIT0gTlVMTCk7CisgIEFTU0VSVCghc3Bhbi0+ZnJlZSk7CisgIGNvbnN0IHNpemVfdCBjbCA9
IHNwYW4tPnNpemVjbGFzczsKKyAgaWYgKGNsICE9IDApIHsKKyAgICBBU1NFUlQoIXNwYW4tPnNh
bXBsZSk7CisgICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAgPSBUQ01hbGxvY19UaHJlYWRD
YWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQoKTsKKyAgICBpZiAoaGVhcCAhPSBOVUxMKSB7CisgICAg
ICBoZWFwLT5EZWFsbG9jYXRlKHB0ciwgY2wpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBEZWxl
dGUgZGlyZWN0bHkgaW50byBjZW50cmFsIGNhY2hlCisgICAgICBTcGluTG9ja0hvbGRlciBoKCZj
ZW50cmFsX2NhY2hlW2NsXS5sb2NrXyk7CisgICAgICBjZW50cmFsX2NhY2hlW2NsXS5JbnNlcnQo
cHRyKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBf
bG9jayk7CisgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpICUga1Bh
Z2VTaXplID09IDApOworICAgIEFTU0VSVChzcGFuLT5zdGFydCA9PSBwKTsKKyAgICBpZiAoc3Bh
bi0+c2FtcGxlKSB7CisgICAgICBETExfUmVtb3ZlKHNwYW4pOworICAgICAgc3RhY2t0cmFjZV9h
bGxvY2F0b3IuRGVsZXRlKHJlaW50ZXJwcmV0X2Nhc3Q8U3RhY2tUcmFjZSo+KHNwYW4tPm9iamVj
dHMpKTsKKyAgICAgIHNwYW4tPm9iamVjdHMgPSBOVUxMOworICAgIH0KKyAgICBwYWdlaGVhcC0+
RGVsZXRlKHNwYW4pOworICB9Cit9CisKKyNpZm5kZWYgS1hDX0NIQU5HRVMKKy8vIEZvciB1c2Ug
YnkgZXhwb3J0ZWQgcm91dGluZXMgYmVsb3cgdGhhdCB3YW50IHNwZWNpZmljIGFsaWdubWVudHMK
Ky8vCisvLyBOb3RlOiB0aGlzIGNvZGUgY2FuIGJlIHNsb3csIGFuZCBjYW4gc2lnbmlmaWNhbnRs
eSBmcmFnbWVudCBtZW1vcnkuCisvLyBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCBtZW1hbGlnbi9w
b3NpeF9tZW1hbGlnbi92YWxsb2MvcHZhbGxvYyB3aWxsCisvLyBub3QgYmUgaW52b2tlZCB2ZXJ5
IG9mdGVuLiAgVGhpcyByZXF1aXJlbWVudCBzaW1wbGlmaWVzIG91cgorLy8gaW1wbGVtZW50YXRp
b24gYW5kIGFsbG93cyB1cyB0byB0dW5lIGZvciBleHBlY3RlZCBhbGxvY2F0aW9uCisvLyBwYXR0
ZXJucy4KK3N0YXRpYyB2b2lkKiBkb19tZW1hbGlnbihzaXplX3QgYWxpZ24sIHNpemVfdCBzaXpl
KSB7CisgIEFTU0VSVCgoYWxpZ24gJiAoYWxpZ24gLSAxKSkgPT0gMCk7CisgIEFTU0VSVChhbGln
biA+IDApOworICBpZiAocGFnZWhlYXAgPT0gTlVMTCkgVENNYWxsb2NfVGhyZWFkQ2FjaGU6Oklu
aXRNb2R1bGUoKTsKKworICAvLyBBbGxvY2F0ZSBhdCBsZWFzdCBvbmUgYnl0ZSB0byBhdm9pZCBi
b3VuZGFyeSBjb25kaXRpb25zIGJlbG93CisgIGlmIChzaXplID09IDApIHNpemUgPSAxOworCisg
IGlmIChzaXplIDw9IGtNYXhTaXplICYmIGFsaWduIDwga1BhZ2VTaXplKSB7CisgICAgLy8gU2Vh
cmNoIHRocm91Z2ggYWNjZXB0YWJsZSBzaXplIGNsYXNzZXMgbG9va2luZyBmb3Igb25lIHdpdGgK
KyAgICAvLyBlbm91Z2ggYWxpZ25tZW50LiAgVGhpcyBkZXBlbmRzIG9uIHRoZSBmYWN0IHRoYXQK
KyAgICAvLyBJbml0U2l6ZUNsYXNzZXMoKSBjdXJyZW50bHkgcHJvZHVjZXMgc2V2ZXJhbCBzaXpl
IGNsYXNzZXMgdGhhdAorICAgIC8vIGFyZSBhbGlnbmVkIGF0IHBvd2VycyBvZiB0d28uICBXZSB3
aWxsIHdhc3RlIHRpbWUgYW5kIHNwYWNlIGlmCisgICAgLy8gd2UgbWlzcyBpbiB0aGUgc2l6ZSBj
bGFzcyBhcnJheSwgYnV0IHRoYXQgaXMgZGVlbWVkIGFjY2VwdGFibGUKKyAgICAvLyBzaW5jZSBt
ZW1hbGlnbigpIHNob3VsZCBiZSB1c2VkIHJhcmVseS4KKyAgICBzaXplX3QgY2wgPSBTaXplQ2xh
c3Moc2l6ZSk7CisgICAgd2hpbGUgKGNsIDwga051bUNsYXNzZXMgJiYgKChjbGFzc190b19zaXpl
W2NsXSAmIChhbGlnbiAtIDEpKSAhPSAwKSkgeworICAgICAgY2wrKzsKKyAgICB9CisgICAgaWYg
KGNsIDwga051bUNsYXNzZXMpIHsKKyAgICAgIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0g
VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKCk7CisgICAgICByZXR1cm4gaGVhcC0+QWxs
b2NhdGUoY2xhc3NfdG9fc2l6ZVtjbF0pOworICAgIH0KKyAgfQorCisgIC8vIFdlIHdpbGwgYWxs
b2NhdGUgZGlyZWN0bHkgZnJvbSB0aGUgcGFnZSBoZWFwCisgIFNwaW5Mb2NrSG9sZGVyIGgoJnBh
Z2VoZWFwX2xvY2spOworCisgIGlmIChhbGlnbiA8PSBrUGFnZVNpemUpIHsKKyAgICAvLyBBbnkg
cGFnZS1sZXZlbCBhbGxvY2F0aW9uIHdpbGwgYmUgZmluZQorICAgIC8vIFRPRE86IFdlIGNvdWxk
IHB1dCB0aGUgcmVzdCBvZiB0aGlzIHBhZ2UgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgLy8gVE9E
TzogY2FjaGUgYnV0IGl0IGRvZXMgbm90IHNlZW0gd29ydGggaXQuCisgICAgU3Bhbiogc3BhbiA9
IHBhZ2VoZWFwLT5OZXcocGFnZXMoc2l6ZSkpOworICAgIGlmIChzcGFuID09IE5VTEwpIHJldHVy
biBOVUxMOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihzcGFuLT5zdGFydCA8
PCBrUGFnZVNoaWZ0KTsKKyAgfQorCisgIC8vIEFsbG9jYXRlIGV4dHJhIHBhZ2VzIGFuZCBjYXJ2
ZSBvZmYgYW4gYWxpZ25lZCBwb3J0aW9uCisgIGNvbnN0IGludCBhbGxvYyA9IHBhZ2VzKHNpemUg
KyBhbGlnbik7CisgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+TmV3KGFsbG9jKTsKKyAgaWYgKHNw
YW4gPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisKKyAgLy8gU2tpcCBzdGFydGluZyBwb3J0aW9uIHNv
IHRoYXQgd2UgZW5kIHVwIGFsaWduZWQKKyAgaW50IHNraXAgPSAwOworICB3aGlsZSAoKCgoc3Bh
bi0+c3RhcnQrc2tpcCkgPDwga1BhZ2VTaGlmdCkgJiAoYWxpZ24gLSAxKSkgIT0gMCkgeworICAg
IHNraXArKzsKKyAgfQorICBBU1NFUlQoc2tpcCA8IGFsbG9jKTsKKyAgaWYgKHNraXAgPiAwKSB7
CisgICAgU3BhbiogcmVzdCA9IHBhZ2VoZWFwLT5TcGxpdChzcGFuLCBza2lwKTsKKyAgICBwYWdl
aGVhcC0+RGVsZXRlKHNwYW4pOworICAgIHNwYW4gPSByZXN0OworICB9CisKKyAgLy8gU2tpcCB0
cmFpbGluZyBwb3J0aW9uIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8gcmV0dXJuCisgIGNvbnN0IHNp
emVfdCBuZWVkZWQgPSBwYWdlcyhzaXplKTsKKyAgQVNTRVJUKHNwYW4tPmxlbmd0aCA+PSBuZWVk
ZWQpOworICBpZiAoc3Bhbi0+bGVuZ3RoID4gbmVlZGVkKSB7CisgICAgU3BhbiogdHJhaWxlciA9
IHBhZ2VoZWFwLT5TcGxpdChzcGFuLCBuZWVkZWQpOworICAgIHBhZ2VoZWFwLT5EZWxldGUodHJh
aWxlcik7CisgIH0KKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNwYW4tPnN0YXJ0
IDw8IGtQYWdlU2hpZnQpOworfQorI2VuZGlmCisKKworLy8gVGhlIGNvbnN0cnVjdG9yIGFsbG9j
YXRlcyBhbiBvYmplY3QgdG8gZW5zdXJlIHRoYXQgaW5pdGlhbGl6YXRpb24KKy8vIHJ1bnMgYmVm
b3JlIG1haW4oKSwgYW5kIHRoZXJlZm9yZSB3ZSBkbyBub3QgaGF2ZSBhIGNoYW5jZSB0byBiZWNv
bWUKKy8vIG11bHRpLXRocmVhZGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbi4gIFdlIGFsc28gY3Jl
YXRlIHRoZSBUU0Qga2V5CisvLyBoZXJlLiAgUHJlc3VtYWJseSBieSB0aGUgdGltZSB0aGlzIGNv
bnN0cnVjdG9yIHJ1bnMsIGdsaWJjIGlzIGluCisvLyBnb29kIGVub3VnaCBzaGFwZSB0byBoYW5k
bGUgcHRocmVhZF9rZXlfY3JlYXRlKCkuCisvLworLy8gVGhlIGNvbnN0cnVjdG9yIGFsc28gdGFr
ZXMgdGhlIG9wcG9ydHVuaXR5IHRvIHRlbGwgU1RMIHRvIHVzZQorLy8gdGNtYWxsb2MuICBXZSB3
YW50IHRvIGRvIHRoaXMgZWFybHksIGJlZm9yZSBjb25zdHJ1Y3QgdGltZSwgc28KKy8vIGFsbCB1
c2VyIFNUTCBhbGxvY2F0aW9ucyBnbyB0aHJvdWdoIHRjbWFsbG9jICh3aGljaCB3b3JrcyByZWFs
bHkKKy8vIHdlbGwgZm9yIFNUTCkuCisvLworLy8gVGhlIGRlc3RydWN0b3IgcHJpbnRzIHN0YXRz
IHdoZW4gdGhlIHByb2dyYW0gZXhpdHMuCisKK2NsYXNzIFRDTWFsbG9jR3VhcmQgeworIHB1Ymxp
YzoKKyAgVENNYWxsb2NHdWFyZCgpIHsKKyNpZm5kZWYgS1hDX0NIQU5HRVMKKyAgICBjaGFyICpl
bnZ2YWw7CisgICAgaWYgKChlbnZ2YWwgPSBnZXRlbnYoIlRDTUFMTE9DX0RFQlVHIikpKSB7Cisg
ICAgICBUQ01hbGxvY0RlYnVnOjpsZXZlbCA9IGF0b2koZW52dmFsKTsKKyAgICAgIE1FU1NBR0Uo
IlNldCB0Y21hbGxvYyBkZWJ1Z2dpbmcgbGV2ZWwgdG8gJWRcbiIsIFRDTWFsbG9jRGVidWc6Omxl
dmVsKTsKKyAgICB9CisjZW5kaWYKKyAgICBkb19mcmVlKGRvX21hbGxvYygxKSk7CisgICAgVENN
YWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRUU0QoKTsKKyAgICBkb19mcmVlKGRvX21hbGxvYygxKSk7
CisjaWZuZGVmIEtYQ19DSEFOR0VTCisgICAgTWFsbG9jRXh0ZW5zaW9uOjpSZWdpc3RlcihuZXcg
VENNYWxsb2NJbXBsZW1lbnRhdGlvbik7CisjZW5kaWYKKyAgfQorCisjaWZuZGVmIEtYQ19DSEFO
R0VTCisgIH5UQ01hbGxvY0d1YXJkKCkgeworICAgIGNvbnN0IGNoYXIqIGVudiA9IGdldGVudigi
TUFMTE9DU1RBVFMiKTsKKyAgICBpZiAoZW52ICE9IE5VTEwpIHsKKyAgICAgIGludCBsZXZlbCA9
IGF0b2koZW52KTsKKyAgICAgIGlmIChsZXZlbCA8IDEpIGxldmVsID0gMTsKKyAgICAgIFByaW50
U3RhdHMobGV2ZWwpOworICAgIH0KKyAgfQorI2VuZGlmCit9OworCitzdGF0aWMgVENNYWxsb2NH
dWFyZCBtb2R1bGVfZW50ZXJfZXhpdF9ob29rOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRXhwb3J0
ZWQgcm91dGluZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBDQVZFQVQ6IFRoZSBjb2RlIHN0cnVjdHVy
ZSBiZWxvdyBlbnN1cmVzIHRoYXQgTWFsbG9jSG9vayBtZXRob2RzIGFyZSBhbHdheXMKKy8vICAg
ICAgICAgY2FsbGVkIGZyb20gdGhlIHN0YWNrIGZyYW1lIG9mIHRoZSBpbnZva2VkIGFsbG9jYXRp
b24gZnVuY3Rpb24uCisvLyAgICAgICAgIGhlYXAtY2hlY2tlci5jYyBkZXBlbmRzIG9uIHRoaXMg
dG8gc3RhcnQgYSBzdGFjayB0cmFjZSBmcm9tCisvLyAgICAgICAgIHRoZSBjYWxsIHRvIHRoZSAo
ZGUpYWxsb2NhdGlvbiBmdW5jdGlvbi4KKworI2lmbmRlZiBLWENfQ0hBTkdFUworZXh0ZXJuICJD
IiAKKyNlbmRpZgordm9pZCogbWFsbG9jKHNpemVfdCBzaXplKSB7CisgIHZvaWQqIHJlc3VsdCA9
IGRvX21hbGxvYyhzaXplKTsKKyAgLy9NYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwg
c2l6ZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZm5kZWYgS1hDX0NIQU5HRVMKK2V4dGVy
biAiQyIgCisjZW5kaWYKK3ZvaWQgZnJlZSh2b2lkKiBwdHIpIHsKKyAgICAvL01hbGxvY0hvb2s6
Okludm9rZURlbGV0ZUhvb2socHRyKTsKKyAgZG9fZnJlZShwdHIpOworfQorCisjaWZuZGVmIEtY
Q19DSEFOR0VTCitleHRlcm4gIkMiIAorI2VuZGlmCit2b2lkKiBjYWxsb2Moc2l6ZV90IG4sIHNp
emVfdCBlbGVtX3NpemUpIHsKKyAgdm9pZCogcmVzdWx0ID0gZG9fbWFsbG9jKG4gKiBlbGVtX3Np
emUpOworICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKKyAgICBtZW1zZXQocmVzdWx0LCAwLCBuICog
ZWxlbV9zaXplKTsKKyAgfQorI2lmbmRlZiBLWENfQ0hBTkdFUworICBNYWxsb2NIb29rOjpJbnZv
a2VOZXdIb29rKHJlc3VsdCwgbiAqIGVsZW1fc2l6ZSk7CisjZW5kaWYKKyAgcmV0dXJuIHJlc3Vs
dDsKK30KKworI2lmbmRlZiBLWENfQ0hBTkdFUworZXh0ZXJuICJDIiAKKyNlbmRpZgordm9pZCBj
ZnJlZSh2b2lkKiBwdHIpIHsKKyNpZm5kZWYgS1hDX0NIQU5HRVMKKyAgTWFsbG9jSG9vazo6SW52
b2tlRGVsZXRlSG9vayhwdHIpOworI2VuZGlmCisgIGRvX2ZyZWUocHRyKTsKK30KKworI2lmbmRl
ZiBLWENfQ0hBTkdFUworZXh0ZXJuICJDIiAKKyNlbmRpZgordm9pZCogcmVhbGxvYyh2b2lkKiBv
bGRfcHRyLCBzaXplX3QgbmV3X3NpemUpIHsKKyAgaWYgKG9sZF9wdHIgPT0gTlVMTCkgeworICAg
IHZvaWQqIHJlc3VsdCA9IGRvX21hbGxvYyhuZXdfc2l6ZSk7CisjaWZuZGVmIEtYQ19DSEFOR0VT
CisgICAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIG5ld19zaXplKTsKKyNlbmRp
ZgorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgaWYgKG5ld19zaXplID09IDApIHsKKyNpZm5k
ZWYgS1hDX0NIQU5HRVMKKyAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKG9sZF9wdHIp
OworI2VuZGlmCisgICAgZG9fZnJlZShvbGRfcHRyKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQor
CisgIC8vIEdldCB0aGUgc2l6ZSBvZiB0aGUgb2xkIGVudHJ5CisgIGNvbnN0IFBhZ2VJRCBwID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG9sZF9wdHIpID4+IGtQYWdlU2hpZnQ7CisgIFNw
YW4qIHNwYW4gPSBwYWdlaGVhcC0+R2V0RGVzY3JpcHRvcihwKTsKKyAgc2l6ZV90IG9sZF9zaXpl
OworICBpZiAoc3Bhbi0+c2l6ZWNsYXNzICE9IDApIHsKKyAgICBvbGRfc2l6ZSA9IEJ5dGVTaXpl
Rm9yQ2xhc3Moc3Bhbi0+c2l6ZWNsYXNzKTsKKyAgfSBlbHNlIHsKKyAgICBvbGRfc2l6ZSA9IHNw
YW4tPmxlbmd0aCA8PCBrUGFnZVNoaWZ0OworICB9CisKKyAgLy8gUmVhbGxvY2F0ZSBpZiB0aGUg
bmV3IHNpemUgaXMgbGFyZ2VyIHRoYW4gdGhlIG9sZCBzaXplLAorICAvLyBvciBpZiB0aGUgbmV3
IHNpemUgaXMgc2lnbmlmaWNhbnRseSBzbWFsbGVyIHRoYW4gdGhlIG9sZCBzaXplLgorICBpZiAo
KG5ld19zaXplID4gb2xkX3NpemUpIHx8IChBbGxvY2F0aW9uU2l6ZShuZXdfc2l6ZSkgPCBvbGRf
c2l6ZSkpIHsKKyAgICAvLyBOZWVkIHRvIHJlYWxsb2NhdGUKKyAgICB2b2lkKiBuZXdfcHRyID0g
ZG9fbWFsbG9jKG5ld19zaXplKTsKKyAgICBpZiAobmV3X3B0ciA9PSBOVUxMKSB7CisgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisjaWZuZGVmIEtYQ19DSEFOR0VTCisgICAgTWFsbG9jSG9vazo6
SW52b2tlTmV3SG9vayhuZXdfcHRyLCBuZXdfc2l6ZSk7CisjZW5kaWYKKyAgICBtZW1jcHkobmV3
X3B0ciwgb2xkX3B0ciwgKChvbGRfc2l6ZSA8IG5ld19zaXplKSA/IG9sZF9zaXplIDogbmV3X3Np
emUpKTsKKyNpZm5kZWYgS1hDX0NIQU5HRVMKKyAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVI
b29rKG9sZF9wdHIpOworI2VuZGlmCisgICAgZG9fZnJlZShvbGRfcHRyKTsKKyAgICByZXR1cm4g
bmV3X3B0cjsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gb2xkX3B0cjsKKyAgfQorfQorCisjaWZu
ZGVmIENPTVBJTEVSX0lOVEVMCisjZGVmaW5lIE9QTkVXX1RIUk9XCisjZGVmaW5lIE9QREVMRVRF
X1RIUk9XCisjZWxzZQorI2RlZmluZSBPUE5FV19USFJPVyB0aHJvdyhzdGQ6OmJhZF9hbGxvYykK
KyNkZWZpbmUgT1BERUxFVEVfVEhST1cgdGhyb3coKQorI2VuZGlmCisKKyNpZm5kZWYgS1hDX0NI
QU5HRVMKKwordm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKSBPUE5FV19USFJPVyB7Cisg
IHZvaWQqIHAgPSBkb19tYWxsb2Moc2l6ZSk7CisgIGlmIChwID09IE5VTEwpIHsKKyAgICBNRVNT
QUdFKCJVbmFibGUgdG8gYWxsb2NhdGUgJSIgUFJJdVMgIiBieXRlczogbmV3IGZhaWxlZFxuIiwg
c2l6ZSk7CisgICAgYWJvcnQoKTsKKyAgfQorICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHAs
IHNpemUpOworICByZXR1cm4gcDsKK30KKwordm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCogcCkg
T1BERUxFVEVfVEhST1cgeworICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKHApOworICBk
b19mcmVlKHApOworfQorCit2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSkgT1BORVdf
VEhST1cgeworICB2b2lkKiBwID0gZG9fbWFsbG9jKHNpemUpOworICBpZiAocCA9PSBOVUxMKSB7
CisgICAgTUVTU0FHRSgiVW5hYmxlIHRvIGFsbG9jYXRlICUiIFBSSXVTICIgYnl0ZXM6IG5ldyBm
YWlsZWRcbiIsIHNpemUpOworICAgIGFib3J0KCk7CisgIH0KKyAgTWFsbG9jSG9vazo6SW52b2tl
TmV3SG9vayhwLCBzaXplKTsKKyAgcmV0dXJuIHA7Cit9CisKK3ZvaWQgb3BlcmF0b3IgZGVsZXRl
W10odm9pZCogcCkgT1BERUxFVEVfVEhST1cgeworICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVI
b29rKHApOworICBkb19mcmVlKHApOworfQorCitleHRlcm4gIkMiIHZvaWQqIG1lbWFsaWduKHNp
emVfdCBhbGlnbiwgc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogcmVzdWx0ID0gZG9fbWVtYWxpZ24o
YWxpZ24sIHNpemUpOworICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7
CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2V4dGVybiAiQyIgaW50IHBvc2l4X21lbWFsaWduKHZv
aWQqKiByZXN1bHRfcHRyLCBzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKSB7CisgIGlmICgoKGFs
aWduICUgc2l6ZW9mKHZvaWQqKSkgIT0gMCkgfHwKKyAgICAgICgoYWxpZ24gJiAoYWxpZ24gLSAx
KSkgIT0gMCkgfHwKKyAgICAgIChhbGlnbiA9PSAwKSkgeworICAgIHJldHVybiBFSU5WQUw7Cisg
IH0KKworICB2b2lkKiByZXN1bHQgPSBkb19tZW1hbGlnbihhbGlnbiwgc2l6ZSk7CisgIE1hbGxv
Y0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKKyAgaWYgKHJlc3VsdCA9PSBOVUxM
KSB7CisgICAgcmV0dXJuIEVOT01FTTsKKyAgfSBlbHNlIHsKKyAgICAqcmVzdWx0X3B0ciA9IHJl
c3VsdDsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCitzdGF0aWMgc2l6ZV90IHBhZ2VzaXplID0g
MDsKKworZXh0ZXJuICJDIiB2b2lkKiB2YWxsb2Moc2l6ZV90IHNpemUpIHsKKyAgLy8gQWxsb2Nh
dGUgcGFnZS1hbGlnbmVkIG9iamVjdCBvZiBsZW5ndGggPj0gc2l6ZSBieXRlcworICBpZiAocGFn
ZXNpemUgPT0gMCkgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOworICB2b2lkKiByZXN1bHQgPSBk
b19tZW1hbGlnbihwYWdlc2l6ZSwgc2l6ZSk7CisgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2so
cmVzdWx0LCBzaXplKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworZXh0ZXJuICJDIiB2b2lkKiBw
dmFsbG9jKHNpemVfdCBzaXplKSB7CisgIC8vIFJvdW5kIHVwIHNpemUgdG8gYSBtdWx0aXBsZSBv
ZiBwYWdlc2l6ZQorICBpZiAocGFnZXNpemUgPT0gMCkgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgp
OworICBzaXplID0gKHNpemUgKyBwYWdlc2l6ZSAtIDEpICYgfihwYWdlc2l6ZSAtIDEpOworICB2
b2lkKiByZXN1bHQgPSBkb19tZW1hbGlnbihwYWdlc2l6ZSwgc2l6ZSk7CisgIE1hbGxvY0hvb2s6
Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworZXh0
ZXJuICJDIiB2b2lkIG1hbGxvY19zdGF0cyh2b2lkKSB7CisgIFByaW50U3RhdHMoMSk7Cit9CisK
K2V4dGVybiAiQyIgaW50IG1hbGxvcHQoaW50IGNtZCwgaW50IHZhbHVlKSB7CisgIHJldHVybiAx
OyAgICAgLy8gSW5kaWNhdGVzIGVycm9yCit9CisKK2V4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZv
IG1hbGxpbmZvKHZvaWQpIHsKKyAgVENNYWxsb2NTdGF0cyBzdGF0czsKKyAgRXh0cmFjdFN0YXRz
KCZzdGF0cywgTlVMTCk7CisKKyAgLy8gSnVzdCBzb21lIG9mIHRoZSBmaWVsZHMgYXJlIGZpbGxl
ZCBpbi4KKyAgc3RydWN0IG1hbGxpbmZvIGluZm87CisgIG1lbXNldCgmaW5mbywgMCwgc2l6ZW9m
KGluZm8pKTsKKworICAvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgc3RydWN0IGNvbnRhaW5zICJpbnQi
IGZpZWxkLCBzbyBzb21lIG9mIHRoZQorICAvLyBzaXplIHZhbHVlcyB3aWxsIGJlIHRydW5jYXRl
ZC4KKyAgaW5mby5hcmVuYSAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRzLnN5c3RlbV9ieXRl
cyk7CisgIGluZm8uZnNtYmxrcyAgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy50aHJlYWRfYnl0
ZXMgKyBzdGF0cy5jZW50cmFsX2J5dGVzKTsKKyAgaW5mby5mb3JkYmxrcyAgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHN0YXRzLnBhZ2VoZWFwX2J5dGVzKTsKKyAgaW5mby51b3JkYmxrcyAgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHN0YXRzLnN5c3RlbV9ieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLSBzdGF0cy50aHJlYWRfYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0gc3RhdHMuY2VudHJhbF9ieXRlcworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLSBzdGF0cy5wYWdlaGVhcF9ieXRlcyk7CisKKyAgcmV0dXJuIGluZm87Cit9
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gU29tZSBsaWJyYXJ5IHJvdXRpbmVzIG9uIFJlZEhhdCA5IGFs
bG9jYXRlIG1lbW9yeSB1c2luZyBtYWxsb2MoKQorLy8gYW5kIGZyZWUgaXQgdXNpbmcgX19saWJj
X2ZyZWUoKSAob3IgdmljZS12ZXJzYSkuICBTaW5jZSB3ZSBwcm92aWRlCisvLyBvdXIgb3duIGlt
cGxlbWVudGF0aW9ucyBvZiBtYWxsb2MvZnJlZSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdAor
Ly8gdGhlIF9fbGliY19YWFggdmFyaWFudHMgYWxzbyBwb2ludCB0byB0aGUgc2FtZSBpbXBsZW1l
bnRhdGlvbnMuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXh0ZXJuICJDIiB7CisjaWYgZGVmaW5lZChfX0dO
VUNfXykgJiYgZGVmaW5lZChIQVZFX19fQVRUUklCVVRFX18pCisgIC8vIFBvdGVudGlhbGx5IGZh
c3RlciB2YXJpYW50cyB0aGF0IHVzZSB0aGUgZ2NjIGFsaWFzIGV4dGVuc2lvbgorI2RlZmluZSBB
TElBUyh4KSBfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMgKHgpKSkKKyAgdm9pZCogX19saWJj
X21hbGxvYyhzaXplX3Qgc2l6ZSkgICAgICAgICAgICAgIEFMSUFTKCJtYWxsb2MiKTsKKyAgdm9p
ZCAgX19saWJjX2ZyZWUodm9pZCogcHRyKSAgICAgICAgICAgICAgICAgIEFMSUFTKCJmcmVlIik7
CisgIHZvaWQqIF9fbGliY19yZWFsbG9jKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpICBBTElBUygi
cmVhbGxvYyIpOworICB2b2lkKiBfX2xpYmNfY2FsbG9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZSkg
ICAgQUxJQVMoImNhbGxvYyIpOworICB2b2lkICBfX2xpYmNfY2ZyZWUodm9pZCogcHRyKSAgICAg
ICAgICAgICAgICAgQUxJQVMoImNmcmVlIik7CisgIHZvaWQqIF9fbGliY19tZW1hbGlnbihzaXpl
X3QgYWxpZ24sIHNpemVfdCBzKSBBTElBUygibWVtYWxpZ24iKTsKKyAgdm9pZCogX19saWJjX3Zh
bGxvYyhzaXplX3Qgc2l6ZSkgICAgICAgICAgICAgIEFMSUFTKCJ2YWxsb2MiKTsKKyAgdm9pZCog
X19saWJjX3B2YWxsb2Moc2l6ZV90IHNpemUpICAgICAgICAgICAgIEFMSUFTKCJwdmFsbG9jIik7
CisgIGludCBfX3Bvc2l4X21lbWFsaWduKHZvaWQqKiByLCBzaXplX3QgYSwgc2l6ZV90IHMpIEFM
SUFTKCJwb3NpeF9tZW1hbGlnbiIpOworI3VuZGVmIEFMSUFTCisjZWxzZQorICAvLyBQb3J0YWJs
ZSB3cmFwcGVycworICB2b2lkKiBfX2xpYmNfbWFsbG9jKHNpemVfdCBzaXplKSAgICAgICAgICAg
ICAgeyByZXR1cm4gbWFsbG9jKHNpemUpOyAgICAgICB9CisgIHZvaWQgIF9fbGliY19mcmVlKHZv
aWQqIHB0cikgICAgICAgICAgICAgICAgICB7IGZyZWUocHRyKTsgICAgICAgICAgICAgICAgIH0K
KyAgdm9pZCogX19saWJjX3JlYWxsb2Modm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkgIHsgcmV0dXJu
IHJlYWxsb2MocHRyLCBzaXplKTsgfQorICB2b2lkKiBfX2xpYmNfY2FsbG9jKHNpemVfdCBuLCBz
aXplX3Qgc2l6ZSkgICAgeyByZXR1cm4gY2FsbG9jKG4sIHNpemUpOyAgICB9CisgIHZvaWQgIF9f
bGliY19jZnJlZSh2b2lkKiBwdHIpICAgICAgICAgICAgICAgICB7IGNmcmVlKHB0cik7ICAgICAg
ICAgICAgICAgIH0KKyAgdm9pZCogX19saWJjX21lbWFsaWduKHNpemVfdCBhbGlnbiwgc2l6ZV90
IHMpIHsgcmV0dXJuIG1lbWFsaWduKGFsaWduLCBzKTsgfQorICB2b2lkKiBfX2xpYmNfdmFsbG9j
KHNpemVfdCBzaXplKSAgICAgICAgICAgICAgeyByZXR1cm4gdmFsbG9jKHNpemUpOyAgICAgICB9
CisgIHZvaWQqIF9fbGliY19wdmFsbG9jKHNpemVfdCBzaXplKSAgICAgICAgICAgICB7IHJldHVy
biBwdmFsbG9jKHNpemUpOyAgICAgIH0KKyAgaW50IF9fcG9zaXhfbWVtYWxpZ24odm9pZCoqIHIs
IHNpemVfdCBhLCBzaXplX3QgcykgeworICAgIHJldHVybiBwb3NpeF9tZW1hbGlnbihyLCBhLCBz
KTsKKyAgfQorI2VuZGlmCisKK30KKworI2VuZGlmCisKKyNpZiBLWENfQ0hBTkdFUworfSAvLyBu
YW1lc3BhY2UgS0pTCisjZW5kaWYKKwpJbmRleDogSmF2YVNjcmlwdENvcmUva3htbGNvcmUvRmFz
dE1hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt4bWxjb3JlL0Zhc3RNYWxsb2MuaApkaWZm
IC1OIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0Zhc3RNYWxsb2MuaAotLS0gSmF2YVNjcmlwdENv
cmUva3htbGNvcmUvRmFzdE1hbGxvYy5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIEph
dmFTY3JpcHRDb3JlL2t4bWxjb3JlL0Zhc3RNYWxsb2MuaAkyNyBTZXAgMjAwNSAwNzoxNjo1MSAt
MDAwMApAQCAtMCwwICsxLDU4IEBACisvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDog
NCAtKi0KKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKKyAqICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBLWE1MQ09SRV9GQVNUX01BTExPQ19ICisjZGVmaW5lIEtYTUxDT1JFX0ZBU1RfTUFMTE9D
X0gKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCituYW1lc3BhY2UgS1hNTENvcmUgeworCisgICAg
dm9pZCAqZmFzdE1hbGxvYyhzaXplX3Qgbik7CisgICAgdm9pZCAqZmFzdENhbGxvYyhzaXplX3Qg
bl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7CisgICAgdm9pZCBmYXN0RnJlZSh2b2lk
KiBwKTsKKyAgICB2b2lkICpmYXN0UmVhbGxvYyh2b2lkKiBwLCBzaXplX3Qgbik7CisgICAgCisg
ICAgc3RydWN0IEZhc3RBbGxvY2F0ZWQgeworICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6
ZV90IHMpIHsgcmV0dXJuIGZhc3RNYWxsb2Mocyk7IH0KKyAgICAgICAgdm9pZCBvcGVyYXRvciBk
ZWxldGUodm9pZCogcCkgeyBmYXN0RnJlZShwKTsgfQorICAgICAgICB2b2lkKiBvcGVyYXRvciBu
ZXdbXShzaXplX3QgcykgeyByZXR1cm4gZmFzdE1hbGxvYyhzKTsgfQorICAgICAgICB2b2lkIG9w
ZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHApIHsgZmFzdEZyZWUocCk7IH0KKyAgICB9OworICAgIAor
ICAgIC8vIFBPRCB0eXBlcyBjYW4ndCBoYXZlIGEgYmFzZSBjbGFzcywgc28gdGhleSBoYXZlIHRv
IHVzZSBhIG1hY3JvIHRvCisgICAgLy8gYWRkIHRoZSBhcHByb3ByaWF0ZSBvcGVyYXRvcnMKKyAg
ICAjZGVmaW5lIEZBU1RfQUxMT0NBVEVEX1BPRCBcCisgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5l
dyhzaXplX3QgcykgeyByZXR1cm4gZmFzdE1hbGxvYyhzKTsgfSBcCisgICAgICAgIHZvaWQgb3Bl
cmF0b3IgZGVsZXRlKHZvaWQqIHApIHsgZmFzdEZyZWUocCk7IH0gXAorICAgICAgICB2b2lkKiBv
cGVyYXRvciBuZXdbXShzaXplX3QgcykgeyByZXR1cm4gZmFzdE1hbGxvYyhzKTsgfSBcCisgICAg
ICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogcCkgeyBmYXN0RnJlZShwKTsgfSBcCisK
K30gLy8gbmFtZXNwYWNlIEtYTUxDb3JlCisKK3VzaW5nIEtYTUxDb3JlOjpmYXN0TWFsbG9jOwor
dXNpbmcgS1hNTENvcmU6OmZhc3RDYWxsb2M7Cit1c2luZyBLWE1MQ29yZTo6ZmFzdFJlYWxsb2M7
Cit1c2luZyBLWE1MQ29yZTo6ZmFzdEZyZWU7Cit1c2luZyBLWE1MQ29yZTo6RmFzdEFsbG9jYXRl
ZDsKKworI2VuZGlmIC8qIEtYTUxDT1JFX0ZBU1RfTUFMTE9DX0ggKi8KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2t4bWxjb3JlL1NoYXJlZFB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt4bWxjb3Jl
L1NoYXJlZFB0ci5oCmRpZmYgLU4gSmF2YVNjcmlwdENvcmUva3htbGNvcmUvU2hhcmVkUHRyLmgK
LS0tIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL1NoYXJlZFB0ci5oCTEgSmFuIDE5NzAgMDA6MDA6
MDAgLTAwMDAKKysrIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL1NoYXJlZFB0ci5oCTI3IFNlcCAy
MDA1IDA3OjE2OjUyIC0wMDAwCkBAIC0wLDAgKzEsMTMxIEBACisvLyAtKi0gbW9kZTogYysrOyBj
LWJhc2ljLW9mZnNldDogNCAtKi0KKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBsaWJyYXJpZXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiBLWE1MQ09SRV9TSEFSRURfUFRSX0gKKyNkZWZpbmUgS1hN
TENPUkVfU0hBUkVEX1BUUl9ICisKK25hbWVzcGFjZSBLWE1MQ29yZSB7CisKKyAgICAvLyBGSVhN
RTogQ2hhbmdlIHRlbXBsYXRlIG5hbWUgdG8gUmVmUHRyPworICAgIHRlbXBsYXRlIDxjbGFzcyBU
PiBjbGFzcyBTaGFyZWRQdHIKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBTaGFyZWRQdHIo
KSA6IG1fcHRyKE5VTEwpIHt9CisgICAgICAgIFNoYXJlZFB0cihUICpwdHIpIDogbV9wdHIocHRy
KSB7IGlmIChwdHIpIHB0ci0+cmVmKCk7IH0KKyAgICAgICAgU2hhcmVkUHRyKGNvbnN0IFNoYXJl
ZFB0ciAmbykgOiBtX3B0cihvLm1fcHRyKSB7IGlmIChUICpwdHIgPSBtX3B0cikgcHRyLT5yZWYo
KTsgfQorICAgICAgICB+U2hhcmVkUHRyKCkgeyBpZiAoVCAqcHRyID0gbV9wdHIpIHB0ci0+ZGVy
ZWYoKTsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFU+IFNoYXJlZFB0cihj
b25zdCBTaGFyZWRQdHI8VT4gJm8pIDogbV9wdHIoby5nZXQoKSkgeyBpZiAoVCAqcHRyID0gbV9w
dHIpIHB0ci0+cmVmKCk7IH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBEZXByZWNhdGUg
aW4gZmF2b3Igb2Ygb3BlcmF0b3JzIGJlbG93LCB0aGVuIHJlbW92ZT8KKyAgICAgICAgYm9vbCBp
c051bGwoKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBOVUxMOyB9CisgICAgICAgIGJvb2wgbm90
TnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyICE9IE5VTEw7IH0KKyAgICAgICAgCisgICAgICAg
IC8vIEZJWE1FOiBEZXByZWNhdGUgaW4gZmF2b3Igb2Ygb3BlcmF0b3I9LCB0aGVuIHJlbW92ZT8K
KyAgICAgICAgdm9pZCByZXNldCgpIHsgaWYgKFQgKnB0ciA9IG1fcHRyKSBwdHItPmRlcmVmKCk7
IG1fcHRyID0gTlVMTDsgfQorICAgICAgICB2b2lkIHJlc2V0KFQgKm8pIHsgaWYgKG8pIG8tPnJl
ZigpOyBpZiAoVCAqcHRyID0gbV9wdHIpIHB0ci0+ZGVyZWYoKTsgbV9wdHIgPSBvOyB9CisgICAg
ICAgIAorICAgICAgICBUICpnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQorICAgICAgICAK
KyAgICAgICAgVCAmb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fcHRyOyB9CisgICAgICAg
IFQgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQorICAgICAgICAKKyAgICAg
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBOVUxMOyB9CisgICAg
ICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3B0ciAhPSBOVUxMOyB9CisgICAg
ICAgIAorICAgICAgICBTaGFyZWRQdHIgJm9wZXJhdG9yPShjb25zdCBTaGFyZWRQdHIgJik7Cisg
ICAgICAgIFNoYXJlZFB0ciAmb3BlcmF0b3I9KFQgKik7CisgICAgICAgIAorICAgIHByaXZhdGU6
CisgICAgICAgIFQgKm1fcHRyOworICAgICAgICAKKyAgICAgICAgb3BlcmF0b3IgaW50KCkgY29u
c3Q7IC8vIGRlbGliZXJhdGVseSBub3QgaW1wbGVtZW50ZWQ7IGhlbHBzIHByZXZlbnQgb3BlcmF0
b3IgYm9vbCBmcm9tIGNvbnZlcnRpbmcgdG8gaW50IGFjY2lkZW50YWxseQorICAgIH07CisgICAg
CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFNoYXJlZFB0cjxUPiAmU2hhcmVkUHRyPFQ+OjpvcGVy
YXRvcj0oY29uc3QgU2hhcmVkUHRyPFQ+ICZvKSAKKyAgICB7CisgICAgICAgIFQgKm9wdHIgPSBv
Lm1fcHRyOworICAgICAgICBpZiAob3B0cikKKyAgICAgICAgICAgIG9wdHItPnJlZigpOworICAg
ICAgICBpZiAoVCAqcHRyID0gbV9wdHIpCisgICAgICAgICAgICBwdHItPmRlcmVmKCk7CisgICAg
ICAgIG1fcHRyID0gb3B0cjsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFNoYXJlZFB0cjxUPiAmU2hhcmVkUHRyPFQ+Ojpv
cGVyYXRvcj0oVCAqb3B0cikKKyAgICB7CisgICAgICAgIGlmIChvcHRyKQorICAgICAgICAgICAg
b3B0ci0+cmVmKCk7CisgICAgICAgIGlmIChUICpwdHIgPSBtX3B0cikKKyAgICAgICAgICAgIHB0
ci0+ZGVyZWYoKTsKKyAgICAgICAgbV9wdHIgPSBvcHRyOworICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFNoYXJlZFB0cjxUPiAmYSwgY29uc3QgU2hhcmVkUHRyPFQ+ICZiKSAKKyAgICB7
IAorICAgICAgICByZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOyAKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFyZWRQdHI8VD4g
JmEsIGNvbnN0IFQgKmIpIAorICAgIHsgCisgICAgICAgIHJldHVybiBhLmdldCgpID09IGI7IAor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBUICphLCBjb25zdCBTaGFyZWRQdHI8VD4gJmIpIAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGEgPT0gYi5nZXQoKTsgCisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNoYXJlZFB0cjxUPiAmYSwgY29uc3QgU2hhcmVk
UHRyPFQ+ICZiKSAKKyAgICB7IAorICAgICAgICByZXR1cm4gYS5nZXQoKSAhPSBiLmdldCgpOyAK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBTaGFyZWRQdHI8VD4gJmEsIGNvbnN0IFQgKmIpCisgICAgeworICAgICAgICByZXR1cm4g
YS5nZXQoKSAhPSBiOyAKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBUICphLCBjb25zdCBTaGFyZWRQdHI8VD4gJmIpIAorICAgIHsg
CisgICAgICAgIHJldHVybiBhICE9IGIuZ2V0KCk7IAorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgVT4gaW5saW5lIFNoYXJlZFB0cjxUPiBzdGF0aWNfcG9pbnRlcl9j
YXN0KGNvbnN0IFNoYXJlZFB0cjxVPiAmcCkgCisgICAgeyAKKyAgICAgICAgcmV0dXJuIFNoYXJl
ZFB0cjxUPihzdGF0aWNfY2FzdDxUICo+KHAuZ2V0KCkpKTsgCisgICAgfQorCisgICAgdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFU+IGlubGluZSBTaGFyZWRQdHI8VD4gY29uc3RfcG9pbnRlcl9j
YXN0KGNvbnN0IFNoYXJlZFB0cjxVPiAmcCkgCisgICAgeyAKKyAgICAgICAgcmV0dXJuIFNoYXJl
ZFB0cjxUPihjb25zdF9jYXN0PFQgKj4ocC5nZXQoKSkpOyAKKyAgICB9CisKK30gLy8gbmFtZXNw
YWNlIEtYTUxDb3JlCisKK3VzaW5nIEtYTUxDb3JlOjpTaGFyZWRQdHI7Cit1c2luZyBLWE1MQ29y
ZTo6c3RhdGljX3BvaW50ZXJfY2FzdDsKK3VzaW5nIEtYTUxDb3JlOjpjb25zdF9wb2ludGVyX2Nh
c3Q7CisKKyNlbmRpZiAvLyBLWE1MQ09SRV9TSEFSRURfUFRSX0gKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2t4bWxjb3JlL1RDUGFnZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt4bWxjb3JlL1RD
UGFnZU1hcC5oCmRpZmYgLU4gSmF2YVNjcmlwdENvcmUva3htbGNvcmUvVENQYWdlTWFwLmgKLS0t
IEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL1RDUGFnZU1hcC5oCTEgSmFuIDE5NzAgMDA6MDA6MDAg
LTAwMDAKKysrIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL1RDUGFnZU1hcC5oCTI3IFNlcCAyMDA1
IDA3OjE2OjUyIC0wMDAwCkBAIC0wLDAgKzEsMjQyIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMDUs
IEdvb2dsZSBJbmMuCisvLyBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisvLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
Ky8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vIAorLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8gCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisvLyAtLS0KKy8vIEF1dGhvcjogU2FuamF5
IEdoZW1hd2F0IDxvcGVuc291cmNlQGdvb2dsZS5jb20+CisvLworLy8gQSBkYXRhIHN0cnVjdHVy
ZSB1c2VkIGJ5IHRoZSBjYWNoaW5nIG1hbGxvYy4gIEl0IG1hcHMgZnJvbSBwYWdlIyB0bworLy8g
YSBwb2ludGVyIHRoYXQgY29udGFpbnMgaW5mbyBhYm91dCB0aGF0IHBhZ2UuICBXZSB1c2UgdHdv
CisvLyByZXByZXNlbnRhdGlvbnM6IG9uZSBmb3IgMzItYml0IGFkZHJlc3NlcywgYW5kIGFub3Ro
ZXIgZm9yIDY0IGJpdAorLy8gYWRkcmVzc2VzLiAgQm90aCByZXByZXNlbnRhdGlvbnMgcHJvdmlk
ZSB0aGUgc2FtZSBpbnRlcmZhY2UuICBUaGUKKy8vIGZpcnN0IHJlcHJlc2VudGF0aW9uIGlzIGlt
cGxlbWVudGVkIGFzIGEgZmxhdCBhcnJheSwgdGhlIHNlY29uZHMgYXMKKy8vIGEgdGhyZWUtbGV2
ZWwgcmFkaXggdHJlZSB0aGF0IHN0cmlwcyBhd2F5IGFwcHJveGltYXRlbHkgMS8zcmQgb2YKKy8v
IHRoZSBiaXRzIGV2ZXJ5IHRpbWUuCisvLworLy8gVGhlIEJJVFMgcGFyYW1ldGVyIHNob3VsZCBi
ZSB0aGUgbnVtYmVyIG9mIGJpdHMgcmVxdWlyZWQgdG8gaG9sZAorLy8gYSBwYWdlIG51bWJlci4g
IEUuZy4sIHdpdGggMzIgYml0IHBvaW50ZXJzIGFuZCA0SyBwYWdlcyAoaS5lLiwKKy8vIHBhZ2Ug
b2Zmc2V0IGZpdHMgaW4gbG93ZXIgMTIgYml0cyksIEJJVFMgPT0gMjAuCisKKyNpZm5kZWYgVENN
QUxMT0NfUEFHRU1BUF9IX18KKyNkZWZpbmUgVENNQUxMT0NfUEFHRU1BUF9IX18KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSAorI2luY2x1ZGUgPHN0ZGlu
dC5oPgorI2VsaWYgZGVmaW5lZCBIQVZFX0lOVFRZUEVTX0gKKyNpbmNsdWRlIDxpbnR0eXBlcy5o
PgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAia3ht
bGNvcmUvQXNzZXJ0aW9ucy5oIgorCisvLyBTaW5nbGUtbGV2ZWwgYXJyYXkKK3RlbXBsYXRlIDxp
bnQgQklUUz4KK2NsYXNzIFRDTWFsbG9jX1BhZ2VNYXAxIHsKKyBwcml2YXRlOgorICB2b2lkKiog
YXJyYXlfOworCisgcHVibGljOgorICB0eXBlZGVmIHVpbnRwdHJfdCBOdW1iZXI7CisKKyAgZXhw
bGljaXQgVENNYWxsb2NfUGFnZU1hcDEodm9pZCogKCphbGxvY2F0b3IpKHNpemVfdCkpIHsKKyAg
ICBhcnJheV8gPSByZWludGVycHJldF9jYXN0PHZvaWQqKj4oKCphbGxvY2F0b3IpKHNpemVvZih2
b2lkKikgPDwgQklUUykpOworICAgIG1lbXNldChhcnJheV8sIDAsIHNpemVvZih2b2lkKikgPDwg
QklUUyk7CisgIH0KKworICAvLyBFbnN1cmUgdGhhdCB0aGUgbWFwIGNvbnRhaW5zIGluaXRpYWxp
emVkIGVudHJpZXMgInggLi4geCtuLTEiLgorICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1
bCwgZmFsc2UgaWYgd2UgY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeS4KKyAgYm9vbCBFbnN1cmUo
TnVtYmVyIHgsIHNpemVfdCBuKSB7CisgICAgLy8gTm90aGluZyB0byBkbyBzaW5jZSBmbGF0IGFy
cmF5IHdhcyBhbGxvY2F0ZSBhdCBzdGFydAorICAgIHJldHVybiB0cnVlOworICB9CisKKyAgLy8g
UkVRVUlSRVMgImsiIGlzIGluIHJhbmdlICJbMCwyXkJJVFMtMV0iLgorICAvLyBSRVFVSVJFUyAi
ayIgaGFzIGJlZW4gZW5zdXJlZCBiZWZvcmUuCisgIC8vCisgIC8vIFJldHVybiB0aGUgY3VycmVu
dCB2YWx1ZSBmb3IgS0VZLiAgUmV0dXJucyAiVmFsdWUoKSIgaWYgbm90CisgIC8vIHlldCBzZXQu
CisgIHZvaWQqIGdldChOdW1iZXIgaykgY29uc3QgeworICAgIHJldHVybiBhcnJheV9ba107Cisg
IH0KKworICAvLyBSRVFVSVJFUyAiayIgaXMgaW4gcmFuZ2UgIlswLDJeQklUUy0xXSIuCisgIC8v
IFJFUVVJUkVTICJrIiBoYXMgYmVlbiBlbnN1cmVkIGJlZm9yZS4KKyAgLy8KKyAgLy8gU2V0cyB0
aGUgdmFsdWUgZm9yIEtFWS4KKyAgdm9pZCBzZXQoTnVtYmVyIGssIHZvaWQqIHYpIHsKKyAgICBh
cnJheV9ba10gPSB2OworICB9Cit9OworCisvLyBUd28tbGV2ZWwgcmFkaXggdHJlZQordGVtcGxh
dGUgPGludCBCSVRTPgorY2xhc3MgVENNYWxsb2NfUGFnZU1hcDIgeworIHByaXZhdGU6CisgIC8v
IFB1dCAzMiBlbnRyaWVzIGluIHRoZSByb290IGFuZCAoMl5CSVRTKS8zMiBlbnRyaWVzIGluIGVh
Y2ggbGVhZi4KKyAgc3RhdGljIGNvbnN0IGludCBST09UX0JJVFMgPSA1OworICBzdGF0aWMgY29u
c3QgaW50IFJPT1RfTEVOR1RIID0gMSA8PCBST09UX0JJVFM7CisKKyAgc3RhdGljIGNvbnN0IGlu
dCBMRUFGX0JJVFMgPSBCSVRTIC0gUk9PVF9CSVRTOworICBzdGF0aWMgY29uc3QgaW50IExFQUZf
TEVOR1RIID0gMSA8PCBMRUFGX0JJVFM7CisKKyAgLy8gTGVhZiBub2RlCisgIHN0cnVjdCBMZWFm
IHsKKyAgICB2b2lkKiB2YWx1ZXNbTEVBRl9MRU5HVEhdOworICB9OworCisgIExlYWYqIHJvb3Rf
W1JPT1RfTEVOR1RIXTsgICAgICAgICAgICAgLy8gUG9pbnRlcnMgdG8gMzIgY2hpbGQgbm9kZXMK
KyAgdm9pZCogKCphbGxvY2F0b3JfKShzaXplX3QpOyAgICAgICAgICAvLyBNZW1vcnkgYWxsb2Nh
dG9yCisKKyBwdWJsaWM6CisgIHR5cGVkZWYgdWludHB0cl90IE51bWJlcjsKKworICBleHBsaWNp
dCBUQ01hbGxvY19QYWdlTWFwMih2b2lkKiAoKmFsbG9jYXRvcikoc2l6ZV90KSkgeworICAgIGFs
bG9jYXRvcl8gPSBhbGxvY2F0b3I7CisgICAgbWVtc2V0KHJvb3RfLCAwLCBzaXplb2Yocm9vdF8p
KTsKKyAgfQorCisgIHZvaWQqIGdldChOdW1iZXIgaykgY29uc3QgeworICAgIEFTU0VSVChrID4+
IEJJVFMgPT0gMCk7CisgICAgY29uc3QgTnVtYmVyIGkxID0gayA+PiBMRUFGX0JJVFM7CisgICAg
Y29uc3QgTnVtYmVyIGkyID0gayAmIChMRUFGX0xFTkdUSC0xKTsKKyAgICByZXR1cm4gcm9vdF9b
aTFdLT52YWx1ZXNbaTJdOworICB9CisKKyAgdm9pZCBzZXQoTnVtYmVyIGssIHZvaWQqIHYpIHsK
KyAgICBBU1NFUlQoayA+PiBCSVRTID09IDApOworICAgIGNvbnN0IE51bWJlciBpMSA9IGsgPj4g
TEVBRl9CSVRTOworICAgIGNvbnN0IE51bWJlciBpMiA9IGsgJiAoTEVBRl9MRU5HVEgtMSk7Cisg
ICAgcm9vdF9baTFdLT52YWx1ZXNbaTJdID0gdjsKKyAgfQorCisgIGJvb2wgRW5zdXJlKE51bWJl
ciBzdGFydCwgc2l6ZV90IG4pIHsKKyAgICBmb3IgKE51bWJlciBrZXkgPSBzdGFydDsga2V5IDw9
IHN0YXJ0ICsgbiAtIDE7ICkgeworICAgICAgY29uc3QgTnVtYmVyIGkxID0ga2V5ID4+IExFQUZf
QklUUzsKKworICAgICAgLy8gTWFrZSAybmQgbGV2ZWwgbm9kZSBpZiBuZWNlc3NhcnkKKyAgICAg
IGlmIChyb290X1tpMV0gPT0gTlVMTCkgeworICAgICAgICBMZWFmKiBsZWFmID0gcmVpbnRlcnBy
ZXRfY2FzdDxMZWFmKj4oKCphbGxvY2F0b3JfKShzaXplb2YoTGVhZikpKTsKKyAgICAgICAgaWYg
KGxlYWYgPT0gTlVMTCkgcmV0dXJuIGZhbHNlOworICAgICAgICBtZW1zZXQobGVhZiwgMCwgc2l6
ZW9mKCpsZWFmKSk7CisgICAgICAgIHJvb3RfW2kxXSA9IGxlYWY7CisgICAgICB9CisKKyAgICAg
IC8vIEFkdmFuY2Uga2V5IHBhc3Qgd2hhdGV2ZXIgaXMgY292ZXJlZCBieSB0aGlzIGxlYWYgbm9k
ZQorICAgICAga2V5ID0gKChrZXkgPj4gTEVBRl9CSVRTKSArIDEpIDw8IExFQUZfQklUUzsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KK307CisKKy8vIFRocmVlLWxldmVsIHJhZGl4IHRy
ZWUKK3RlbXBsYXRlIDxpbnQgQklUUz4KK2NsYXNzIFRDTWFsbG9jX1BhZ2VNYXAzIHsKKyBwcml2
YXRlOgorICAvLyBIb3cgbWFueSBiaXRzIHNob3VsZCB3ZSBjb25zdW1lIGF0IGVhY2ggaW50ZXJp
b3IgbGV2ZWwKKyAgc3RhdGljIGNvbnN0IGludCBJTlRFUklPUl9CSVRTID0gKEJJVFMgKyAyKSAv
IDM7IC8vIFJvdW5kLXVwCisgIHN0YXRpYyBjb25zdCBpbnQgSU5URVJJT1JfTEVOR1RIID0gMSA8
PCBJTlRFUklPUl9CSVRTOworCisgIC8vIEhvdyBtYW55IGJpdHMgc2hvdWxkIHdlIGNvbnN1bWUg
YXQgbGVhZiBsZXZlbAorICBzdGF0aWMgY29uc3QgaW50IExFQUZfQklUUyA9IEJJVFMgLSAyKklO
VEVSSU9SX0JJVFM7CisgIHN0YXRpYyBjb25zdCBpbnQgTEVBRl9MRU5HVEggPSAxIDw8IExFQUZf
QklUUzsKKworICAvLyBJbnRlcmlvciBub2RlCisgIHN0cnVjdCBOb2RlIHsKKyAgICBOb2RlKiBw
dHJzW0lOVEVSSU9SX0xFTkdUSF07CisgIH07CisKKyAgLy8gTGVhZiBub2RlCisgIHN0cnVjdCBM
ZWFmIHsKKyAgICB2b2lkKiB2YWx1ZXNbTEVBRl9MRU5HVEhdOworICB9OworCisgIE5vZGUqIHJv
b3RfOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm9vdCBvZiByYWRpeCB0cmVlCisgIHZv
aWQqICgqYWxsb2NhdG9yXykoc2l6ZV90KTsgICAgICAgICAgLy8gTWVtb3J5IGFsbG9jYXRvcgor
CisgIE5vZGUqIE5ld05vZGUoKSB7CisgICAgTm9kZSogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2Fz
dDxOb2RlKj4oKCphbGxvY2F0b3JfKShzaXplb2YoTm9kZSkpKTsKKyAgICBpZiAocmVzdWx0ICE9
IE5VTEwpIHsKKyAgICAgIG1lbXNldChyZXN1bHQsIDAsIHNpemVvZigqcmVzdWx0KSk7CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworIHB1YmxpYzoKKyAgdHlwZWRlZiB1aW50cHRy
X3QgTnVtYmVyOworCisgIGV4cGxpY2l0IFRDTWFsbG9jX1BhZ2VNYXAzKHZvaWQqICgqYWxsb2Nh
dG9yKShzaXplX3QpKSB7CisgICAgYWxsb2NhdG9yXyA9IGFsbG9jYXRvcjsKKyAgICByb290XyA9
IE5ld05vZGUoKTsKKyAgfQorCisgIHZvaWQqIGdldChOdW1iZXIgaykgY29uc3QgeworICAgIEFT
U0VSVChrID4+IEJJVFMgPT0gMCk7CisgICAgY29uc3QgTnVtYmVyIGkxID0gayA+PiAoTEVBRl9C
SVRTICsgSU5URVJJT1JfQklUUyk7CisgICAgY29uc3QgTnVtYmVyIGkyID0gKGsgPj4gTEVBRl9C
SVRTKSAmIChJTlRFUklPUl9MRU5HVEgtMSk7CisgICAgY29uc3QgTnVtYmVyIGkzID0gayAmIChM
RUFGX0xFTkdUSC0xKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMZWFmKj4ocm9vdF8t
PnB0cnNbaTFdLT5wdHJzW2kyXSktPnZhbHVlc1tpM107CisgIH0KKworICB2b2lkIHNldChOdW1i
ZXIgaywgdm9pZCogdikgeworICAgIEFTU0VSVChrID4+IEJJVFMgPT0gMCk7CisgICAgY29uc3Qg
TnVtYmVyIGkxID0gayA+PiAoTEVBRl9CSVRTICsgSU5URVJJT1JfQklUUyk7CisgICAgY29uc3Qg
TnVtYmVyIGkyID0gKGsgPj4gTEVBRl9CSVRTKSAmIChJTlRFUklPUl9MRU5HVEgtMSk7CisgICAg
Y29uc3QgTnVtYmVyIGkzID0gayAmIChMRUFGX0xFTkdUSC0xKTsKKyAgICByZWludGVycHJldF9j
YXN0PExlYWYqPihyb290Xy0+cHRyc1tpMV0tPnB0cnNbaTJdKS0+dmFsdWVzW2kzXSA9IHY7Cisg
IH0KKworICBib29sIEVuc3VyZShOdW1iZXIgc3RhcnQsIHNpemVfdCBuKSB7CisgICAgZm9yIChO
dW1iZXIga2V5ID0gc3RhcnQ7IGtleSA8PSBzdGFydCArIG4gLSAxOyApIHsKKyAgICAgIGNvbnN0
IE51bWJlciBpMSA9IGtleSA+PiAoTEVBRl9CSVRTICsgSU5URVJJT1JfQklUUyk7CisgICAgICBj
b25zdCBOdW1iZXIgaTIgPSAoa2V5ID4+IExFQUZfQklUUykgJiAoSU5URVJJT1JfTEVOR1RILTEp
OworCisgICAgICAvLyBNYWtlIDJuZCBsZXZlbCBub2RlIGlmIG5lY2Vzc2FyeQorICAgICAgaWYg
KHJvb3RfLT5wdHJzW2kxXSA9PSBOVUxMKSB7CisgICAgICAgIE5vZGUqIG4gPSBOZXdOb2RlKCk7
CisgICAgICAgIGlmIChuID09IE5VTEwpIHJldHVybiBmYWxzZTsKKyAgICAgICAgcm9vdF8tPnB0
cnNbaTFdID0gbjsKKyAgICAgIH0KKworICAgICAgLy8gTWFrZSBsZWFmIG5vZGUgaWYgbmVjZXNz
YXJ5CisgICAgICBpZiAocm9vdF8tPnB0cnNbaTFdLT5wdHJzW2kyXSA9PSBOVUxMKSB7CisgICAg
ICAgIExlYWYqIGxlYWYgPSByZWludGVycHJldF9jYXN0PExlYWYqPigoKmFsbG9jYXRvcl8pKHNp
emVvZihMZWFmKSkpOworICAgICAgICBpZiAobGVhZiA9PSBOVUxMKSByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIG1lbXNldChsZWFmLCAwLCBzaXplb2YoKmxlYWYpKTsKKyAgICAgICAgcm9vdF8tPnB0
cnNbaTFdLT5wdHJzW2kyXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Tm9kZSo+KGxlYWYpOworICAgICAg
fQorCisgICAgICAvLyBBZHZhbmNlIGtleSBwYXN0IHdoYXRldmVyIGlzIGNvdmVyZWQgYnkgdGhp
cyBsZWFmIG5vZGUKKyAgICAgIGtleSA9ICgoa2V5ID4+IExFQUZfQklUUykgKyAxKSA8PCBMRUFG
X0JJVFM7CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9Cit9OworCisjZW5kaWYgIC8vIFRD
TUFMTE9DX1BBR0VNQVBfSF9fCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9UQ1NwaW5M
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga3htbGNvcmUvVENTcGluTG9jay5oCmRpZmYgLU4g
SmF2YVNjcmlwdENvcmUva3htbGNvcmUvVENTcGluTG9jay5oCi0tLSBKYXZhU2NyaXB0Q29yZS9r
eG1sY29yZS9UQ1NwaW5Mb2NrLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgSmF2YVNj
cmlwdENvcmUva3htbGNvcmUvVENTcGluTG9jay5oCTI3IFNlcCAyMDA1IDA3OjE2OjUyIC0wMDAw
CkBAIC0wLDAgKzEsMTUzIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMDUsIEdvb2dsZSBJbmMuCisv
LyBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vIAorLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8gCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisv
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisvLyAtLS0KKy8vIEF1dGhvcjogU2FuamF5IEdoZW1hd2F0IDxvcGVu
c291cmNlQGdvb2dsZS5jb20+CisKKyNpZm5kZWYgVENNQUxMT0NfSU5URVJOQUxfU1BJTkxPQ0tf
SF9fCisjZGVmaW5lIFRDTUFMTE9DX0lOVEVSTkFMX1NQSU5MT0NLX0hfXworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSA8dGltZS5oPiAgICAgICAvKiBGb3IgbmFub3NsZWVwKCkgKi8K
KyNpbmNsdWRlIDxzY2hlZC5oPiAgICAgIC8qIEZvciBzY2hlZF95aWVsZCgpICovCisjaWYgZGVm
aW5lZCBIQVZFX1NURElOVF9ICisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZWxpZiBkZWZpbmVkIEhB
VkVfSU5UVFlQRVNfSAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5
cy90eXBlcy5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CS8qIGZvciBhYm9ydCgpICov
CisKKy8vIEZJWE1FOiBpdCB3b3VsZCBiZSBuaWNlIHRvIHBvcnQgdGhlIGZhc3QgdmVyc2lvbiB0
byBQb3dlclBDIGJ1dCByaWdodCBub3cgaXQgaXMgbm90CisvLyBzaG93aW5nIHVwIG9uIHRoZSBw
cm9maWxlCisjaWYgZGVmaW5lZCBfX2kzODZfXyAmJiBkZWZpbmVkIF9fR05VQ19fCisKK3N0YXRp
YyB2b2lkIFRDTWFsbG9jX1Nsb3dMb2NrKHZvbGF0aWxlIHVuc2lnbmVkIGludCogbG9ja3dvcmQp
OworCisvLyBUaGUgZm9sbG93aW5nIGlzIGEgc3RydWN0IHNvIHRoYXQgaXQgY2FuIGJlIGluaXRp
YWxpemVkIGF0IGNvbXBpbGUgdGltZQorc3RydWN0IFRDTWFsbG9jX1NwaW5Mb2NrIHsKKyAgdm9s
YXRpbGUgdW5zaWduZWQgaW50IHByaXZhdGVfbG9ja3dvcmRfOworCisgIGlubGluZSB2b2lkIElu
aXQoKSB7IHByaXZhdGVfbG9ja3dvcmRfID0gMDsgfQorICBpbmxpbmUgdm9pZCBGaW5hbGl6ZSgp
IHsgfQorICAgIAorICBpbmxpbmUgdm9pZCBMb2NrKCkgeworICAgIGludCByOworICAgIF9fYXNt
X18gX192b2xhdGlsZV9fCisgICAgICAoInhjaGdsICUwLCAlMSIKKyAgICAgICA6ICI9ciIociks
ICI9bSIocHJpdmF0ZV9sb2Nrd29yZF8pCisgICAgICAgOiAiMCIoMSksICJtIihwcml2YXRlX2xv
Y2t3b3JkXykKKyAgICAgICA6ICJtZW1vcnkiKTsKKyAgICBpZiAocikgVENNYWxsb2NfU2xvd0xv
Y2soJnByaXZhdGVfbG9ja3dvcmRfKTsKKyAgfQorCisgIGlubGluZSB2b2lkIFVubG9jaygpIHsK
KyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICAgKCJtb3ZsICQwLCAlMCIKKyAgICAgICA6
ICI9bSIocHJpdmF0ZV9sb2Nrd29yZF8pCisgICAgICAgOiAibSIgKHByaXZhdGVfbG9ja3dvcmRf
KQorICAgICAgIDogIm1lbW9yeSIpOworICB9Cit9OworCisjZGVmaW5lIFNQSU5MT0NLX0lOSVRJ
QUxJWkVSIHsgMCB9CisKK3N0YXRpYyB2b2lkIFRDTWFsbG9jX1Nsb3dMb2NrKHZvbGF0aWxlIHVu
c2lnbmVkIGludCogbG9ja3dvcmQpIHsKKyAgc2NoZWRfeWllbGQoKTsgICAgICAgIC8vIFlpZWxk
IGltbWVkaWF0ZWx5IHNpbmNlIGZhc3QgcGF0aCBmYWlsZWQKKyAgd2hpbGUgKHRydWUpIHsKKyAg
ICBpbnQgcjsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICAgKCJ4Y2hnbCAlMCwgJTEi
CisgICAgICAgOiAiPXIiKHIpLCAiPW0iKCpsb2Nrd29yZCkKKyAgICAgICA6ICIwIigxKSwgIm0i
KCpsb2Nrd29yZCkKKyAgICAgICA6ICJtZW1vcnkiKTsKKyAgICBpZiAoIXIpIHsKKyAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvZGUgd2FzIGFkYXB0ZWQgZnJvbSB0aGUgcHRt
YWxsb2MyIGltcGxlbWVudGF0aW9uIG9mCisgICAgLy8gc3BpbmxvY2tzIHdoaWNoIHdvdWxkIHNj
aGVkX3lpZWxkKCkgdXB0byA1MCB0aW1lcyBiZWZvcmUKKyAgICAvLyBzbGVlcGluZyBvbmNlIGZv
ciBhIGZldyBtaWxsaXNlY29uZHMuICBNaWtlIEJ1cnJvd3Mgc3VnZ2VzdGVkCisgICAgLy8ganVz
dCBkb2luZyBvbmUgc2NoZWRfeWllbGQoKSBvdXRzaWRlIHRoZSBsb29wIGFuZCBhbHdheXMKKyAg
ICAvLyBzbGVlcGluZyBhZnRlciB0aGF0LiAgVGhpcyBjaGFuZ2UgaGVscGVkIGEgZ3JlYXQgZGVh
bCBvbiB0aGUKKyAgICAvLyBwZXJmb3JtYW5jZSBvZiBzcGlubG9ja3MgdW5kZXIgaGlnaCBjb250
ZW50aW9uLiAgQSB0ZXN0IHByb2dyYW0KKyAgICAvLyB3aXRoIDEwIHRocmVhZHMgb24gYSBkdWFs
IFhlb24gKGZvdXIgdmlydHVhbCBwcm9jZXNzb3JzKSB3ZW50CisgICAgLy8gZnJvbSB0YWtpbmcg
MzAgc2Vjb25kcyB0byAxNiBzZWNvbmRzLgorCisgICAgLy8gU2xlZXAgZm9yIGEgZmV3IG1pbGxp
c2Vjb25kcworICAgIHN0cnVjdCB0aW1lc3BlYyB0bTsKKyAgICB0bS50dl9zZWMgPSAwOworICAg
IHRtLnR2X25zZWMgPSAyMDAwMDAxOworICAgIG5hbm9zbGVlcCgmdG0sIE5VTEwpOworICB9Cit9
CisKKyNlbHNlCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKy8vIFBvcnRhYmxlIHZlcnNpb24K
K3N0cnVjdCBUQ01hbGxvY19TcGluTG9jayB7CisgIHB0aHJlYWRfbXV0ZXhfdCBwcml2YXRlX2xv
Y2tfOworCisgIGlubGluZSB2b2lkIEluaXQoKSB7CisgICAgaWYgKHB0aHJlYWRfbXV0ZXhfaW5p
dCgmcHJpdmF0ZV9sb2NrXywgTlVMTCkgIT0gMCkgYWJvcnQoKTsKKyAgfQorICBpbmxpbmUgdm9p
ZCBGaW5hbGl6ZSgpIHsKKyAgICBpZiAocHRocmVhZF9tdXRleF9kZXN0cm95KCZwcml2YXRlX2xv
Y2tfKSAhPSAwKSBhYm9ydCgpOworICB9CisgIGlubGluZSB2b2lkIExvY2soKSB7CisgICAgaWYg
KHB0aHJlYWRfbXV0ZXhfbG9jaygmcHJpdmF0ZV9sb2NrXykgIT0gMCkgYWJvcnQoKTsKKyAgfQor
ICBpbmxpbmUgdm9pZCBVbmxvY2soKSB7CisgICAgaWYgKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZw
cml2YXRlX2xvY2tfKSAhPSAwKSBhYm9ydCgpOworICB9Cit9OworCisjZGVmaW5lIFNQSU5MT0NL
X0lOSVRJQUxJWkVSIHsgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiB9CisKKyNlbmRpZgorCisv
LyBDb3JyZXNwb25kaW5nIGxvY2tlciBvYmplY3QgdGhhdCBhcnJhbmdlcyB0byBhY3F1aXJlIGEg
c3BpbmxvY2sgZm9yCisvLyB0aGUgZHVyYXRpb24gb2YgYSBDKysgc2NvcGUuCitjbGFzcyBUQ01h
bGxvY19TcGluTG9ja0hvbGRlciB7CisgcHJpdmF0ZToKKyAgVENNYWxsb2NfU3BpbkxvY2sqIGxv
Y2tfOworIHB1YmxpYzoKKyAgaW5saW5lIGV4cGxpY2l0IFRDTWFsbG9jX1NwaW5Mb2NrSG9sZGVy
KFRDTWFsbG9jX1NwaW5Mb2NrKiBsKQorICAgIDogbG9ja18obCkgeyBsLT5Mb2NrKCk7IH0KKyAg
aW5saW5lIH5UQ01hbGxvY19TcGluTG9ja0hvbGRlcigpIHsgbG9ja18tPlVubG9jaygpOyB9Cit9
OworCisvLyBTaG9ydC1oYW5kcyBmb3IgY29udmVuaWVudCB1c2UgYnkgdGNtYWxsb2MuY2MKK3R5
cGVkZWYgVENNYWxsb2NfU3BpbkxvY2sgU3BpbkxvY2s7Cit0eXBlZGVmIFRDTWFsbG9jX1NwaW5M
b2NrSG9sZGVyIFNwaW5Mb2NrSG9sZGVyOworCisjZW5kaWYgIC8vIFRDTUFMTE9DX0lOVEVSTkFM
X1NQSU5MT0NLX0hfXwpJbmRleDogSmF2YVNjcmlwdENvcmUva3htbGNvcmUvVENTeXN0ZW1BbGxv
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga3htbGNvcmUvVENTeXN0ZW1BbGxvYy5jcHAKZGlm
ZiAtTiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9UQ1N5c3RlbUFsbG9jLmNwcAotLS0gSmF2YVNj
cmlwdENvcmUva3htbGNvcmUvVENTeXN0ZW1BbGxvYy5jcHAJMSBKYW4gMTk3MCAwMDowMDowMCAt
MDAwMAorKysgSmF2YVNjcmlwdENvcmUva3htbGNvcmUvVENTeXN0ZW1BbGxvYy5jcHAJMjcgU2Vw
IDIwMDUgMDc6MTY6NTIgLTAwMDAKQEAgLTAsMCArMSwyODIgQEAKKy8vIENvcHlyaWdodCAoYykg
MjAwNSwgR29vZ2xlIEluYy4KKy8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyAKKy8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8gCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9u
LgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLyAKKy8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8vIC0tLQorLy8gQXV0aG9yOiBT
YW5qYXkgR2hlbWF3YXQKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIGRlZmluZWQgSEFWRV9T
VERJTlRfSAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VsaWYgZGVmaW5lZCBIQVZFX0lOVFRZUEVT
X0gKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K
KyNlbmRpZgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVk
ZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlICJUQ1N5c3RlbUFsbG9jLmgiCisjaW5jbHVkZSAiVENT
cGluTG9jay5oIgorCisjaWZuZGVmIE1BUF9BTk9OWU1PVVMKKyNkZWZpbmUgTUFQX0FOT05ZTU9V
UyBNQVBfQU5PTgorI2VuZGlmCisKKy8vIFN0cnVjdHVyZSBmb3IgZGlzY292ZXJpbmcgYWxpZ25t
ZW50Cit1bmlvbiBNZW1vcnlBbGlnbmVyIHsKKyAgdm9pZCogIHA7CisgIGRvdWJsZSBkOworICBz
aXplX3QgczsKK307CisKK3N0YXRpYyBTcGluTG9jayBzcGlubG9jayA9IFNQSU5MT0NLX0lOSVRJ
QUxJWkVSOworICAKKy8vIFBhZ2Ugc2l6ZSBpcyBpbml0aWFsaXplZCBvbiBkZW1hbmQKK3N0YXRp
YyBzaXplX3QgcGFnZXNpemUgPSAwOworCisvLyBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCisv
LworLy8gaWYgdXNlX2Rldm1lbSBpcyB0cnVlLCBlaXRoZXIgdXNlX3Nicmsgb3IgdXNlX21tYXAg
bXVzdCBhbHNvIGJlIHRydWUuCisvLyBGb3IgMi4yIGtlcm5lbHMsIGl0IGxvb2tzIGxpa2UgdGhl
IHNicmsgYWRkcmVzcyBzcGFjZSAoNTAwTUJpc2gpIGFuZAorLy8gdGhlIG1tYXAgYWRkcmVzcyBz
cGFjZSAoMTMwME1CaXNoKSBhcmUgZGlzam9pbnQsIHNvIHdlIG5lZWQgYm90aCBhbGxvY2F0b3Jz
CisvLyB0byBnZXQgYXMgbXVjaCB2aXJ0dWFsIG1lbW9yeSBhcyBwb3NzaWJsZS4KK3N0YXRpYyBi
b29sIHVzZV9kZXZtZW0gPSB0cnVlOworc3RhdGljIGJvb2wgdXNlX3NicmsgPSB0cnVlOworc3Rh
dGljIGJvb2wgdXNlX21tYXAgPSB0cnVlOworCisvLyBGbGFncyB0byBrZWVwIHVzIGZyb20gcmV0
cnlpbmcgYWxsb2NhdG9ycyB0aGF0IGZhaWxlZC4KK3N0YXRpYyBib29sIGRldm1lbV9mYWlsdXJl
ID0gZmFsc2U7CitzdGF0aWMgYm9vbCBzYnJrX2ZhaWx1cmUgPSBmYWxzZTsKK3N0YXRpYyBib29s
IG1tYXBfZmFpbHVyZSA9IGZhbHNlOworCisjaWZuZGVmIEtYQ19DSEFOR0VTCitERUZJTkVfaW50
MzIobWFsbG9jX2Rldm1lbV9zdGFydCwgMCwKKyAgICAgICAgICAgICAiUGh5c2ljYWwgbWVtb3J5
IHN0YXJ0aW5nIGxvY2F0aW9uIGluIE1CIGZvciAvZGV2L21lbSBhbGxvY2F0aW9uLiIKKyAgICAg
ICAgICAgICAiICBTZXR0aW5nIHRoaXMgdG8gMCBkaXNhYmxlcyAvZGV2L21lbSBhbGxvY2F0aW9u
Iik7CitERUZJTkVfaW50MzIobWFsbG9jX2Rldm1lbV9saW1pdCwgMCwKKyAgICAgICAgICAgICAi
UGh5c2ljYWwgbWVtb3J5IGxpbWl0IGxvY2F0aW9uIGluIE1CIGZvciAvZGV2L21lbSBhbGxvY2F0
aW9uLiIKKyAgICAgICAgICAgICAiICBTZXR0aW5nIHRoaXMgdG8gMCBtZWFucyBubyBsaW1pdC4i
KTsKKyNlbHNlCitzdGF0aWMgY29uc3QgaW50MzJfdCBGTEFHU19tYWxsb2NfZGV2bWVtX3N0YXJ0
ID0gMDsKK3N0YXRpYyBjb25zdCBpbnQzMl90IEZMQUdTX21hbGxvY19kZXZtZW1fbGltaXQgPSAw
OworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NCUksKKworc3RhdGljIHZvaWQqIFRyeVNicmsoc2l6
ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpIHsKKyAgc2l6ZSA9ICgoc2l6ZSArIGFsaWdubWVu
dCAtIDEpIC8gYWxpZ25tZW50KSAqIGFsaWdubWVudDsKKyAgdm9pZCogcmVzdWx0ID0gc2Jyayhz
aXplKTsKKyAgaWYgKHJlc3VsdCA9PSByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpIHsKKyAg
ICBzYnJrX2ZhaWx1cmUgPSB0cnVlOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgLy8gSXMg
aXQgYWxpZ25lZD8KKyAgdWludHB0cl90IHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihyZXN1bHQpOworICBpZiAoKHB0ciAmIChhbGlnbm1lbnQtMSkpID09IDApICByZXR1cm4gcmVz
dWx0OworCisgIC8vIFRyeSB0byBnZXQgbW9yZSBtZW1vcnkgZm9yIGFsaWdubWVudAorICBzaXpl
X3QgZXh0cmEgPSBhbGlnbm1lbnQgLSAocHRyICYgKGFsaWdubWVudC0xKSk7CisgIHZvaWQqIHIy
ID0gc2JyayhleHRyYSk7CisgIGlmIChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocjIpID09
IChwdHIgKyBzaXplKSkgeworICAgIC8vIENvbnRpZ3VvdXMgd2l0aCBwcmV2aW91cyByZXN1bHQK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyICsgZXh0cmEpOworICB9CisK
KyAgLy8gR2l2ZSB1cCBhbmQgYXNrIGZvciAic2l6ZSArIGFsaWdubWVudCAtIDEiIGJ5dGVzIHNv
CisgIC8vIHRoYXQgd2UgY2FuIGZpbmQgYW4gYWxpZ25lZCByZWdpb24gd2l0aGluIGl0LgorICBy
ZXN1bHQgPSBzYnJrKHNpemUgKyBhbGlnbm1lbnQgLSAxKTsKKyAgaWYgKHJlc3VsdCA9PSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPigtMSkpIHsKKyAgICBzYnJrX2ZhaWx1cmUgPSB0cnVlOworICAg
IHJldHVybiBOVUxMOworICB9CisgIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihy
ZXN1bHQpOworICBpZiAoKHB0ciAmIChhbGlnbm1lbnQtMSkpICE9IDApIHsKKyAgICBwdHIgKz0g
YWxpZ25tZW50IC0gKHB0ciAmIChhbGlnbm1lbnQtMSkpOworICB9CisgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHZvaWQqPihwdHIpOworfQorCisjZW5kaWYgLyogSEFWRV9TQlJLICovCisKKyNp
ZmRlZiBIQVZFX01NQVAKKworc3RhdGljIHZvaWQqIFRyeU1tYXAoc2l6ZV90IHNpemUsIHNpemVf
dCBhbGlnbm1lbnQpIHsKKyAgLy8gRW5mb3JjZSBwYWdlIGFsaWdubWVudAorICBpZiAocGFnZXNp
emUgPT0gMCkgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOworICBpZiAoYWxpZ25tZW50IDwgcGFn
ZXNpemUpIGFsaWdubWVudCA9IHBhZ2VzaXplOworICBzaXplID0gKChzaXplICsgYWxpZ25tZW50
IC0gMSkgLyBhbGlnbm1lbnQpICogYWxpZ25tZW50OworCisgIC8vIEFzayBmb3IgZXh0cmEgbWVt
b3J5IGlmIGFsaWdubWVudCA+IHBhZ2VzaXplCisgIHNpemVfdCBleHRyYSA9IDA7CisgIGlmIChh
bGlnbm1lbnQgPiBwYWdlc2l6ZSkgeworICAgIGV4dHJhID0gYWxpZ25tZW50IC0gcGFnZXNpemU7
CisgIH0KKyAgdm9pZCogcmVzdWx0ID0gbW1hcChOVUxMLCBzaXplICsgZXh0cmEsCisgICAgICAg
ICAgICAgICAgICAgICAgUFJPVF9SRUFEfFBST1RfV1JJVEUsCisgICAgICAgICAgICAgICAgICAg
ICAgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywKKyAgICAgICAgICAgICAgICAgICAgICAtMSwg
MCk7CisgIGlmIChyZXN1bHQgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oTUFQX0ZBSUxFRCkp
IHsKKyAgICBtbWFwX2ZhaWx1cmUgPSB0cnVlOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAg
Ly8gQWRqdXN0IHRoZSByZXR1cm4gbWVtb3J5IHNvIGl0IGlzIGFsaWduZWQKKyAgdWludHB0cl90
IHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyZXN1bHQpOworICBzaXplX3QgYWRq
dXN0ID0gMDsKKyAgaWYgKChwdHIgJiAoYWxpZ25tZW50IC0gMSkpICE9IDApIHsKKyAgICBhZGp1
c3QgPSBhbGlnbm1lbnQgLSAocHRyICYgKGFsaWdubWVudCAtIDEpKTsKKyAgfQorCisgIC8vIFJl
dHVybiB0aGUgdW51c2VkIG1lbW9yeSB0byB0aGUgc3lzdGVtCisgIGlmIChhZGp1c3QgPiAwKSB7
CisgICAgbXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0ciksIGFkanVzdCk7CisgIH0K
KyAgaWYgKGFkanVzdCA8IGV4dHJhKSB7CisgICAgbXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHB0ciArIGFkanVzdCArIHNpemUpLCBleHRyYSAtIGFkanVzdCk7CisgIH0KKworICBwdHIg
Kz0gYWRqdXN0OworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyKTsKK30KKwor
I2VuZGlmIC8qIEhBVkVfTU1BUCAqLworCitzdGF0aWMgdm9pZCogVHJ5RGV2TWVtKHNpemVfdCBz
aXplLCBzaXplX3QgYWxpZ25tZW50KSB7CisgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFs
c2U7CisgIHN0YXRpYyBvZmZfdCBwaHlzbWVtX2Jhc2U7ICAvLyBuZXh0IHBoeXNpY2FsIG1lbW9y
eSBhZGRyZXNzIHRvIGFsbG9jYXRlCisgIHN0YXRpYyBvZmZfdCBwaHlzbWVtX2xpbWl0OyAvLyBt
YXhpbXVtIHBoeXNpY2FsIGFkZHJlc3MgYWxsb3dlZAorICBzdGF0aWMgaW50IHBoeXNtZW1fZmQ7
ICAgICAgLy8gZmlsZSBkZXNjcmlwdG9yIGZvciAvZGV2L21lbQorICAKKyAgLy8gQ2hlY2sgaWYg
d2Ugc2hvdWxkIHVzZSAvZGV2L21lbSBhbGxvY2F0aW9uLiAgTm90ZSB0aGF0IGl0IG1heSB0YWtl
CisgIC8vIGEgd2hpbGUgdG8gZ2V0IHRoaXMgZmxhZyBpbml0aWFsaXplZCwgc28gbWVhbndoaWxl
IHdlIGZhbGwgYmFjayB0bworICAvLyB0aGUgbmV4dCBhbGxvY2F0b3IuICAoSXQgbG9va3MgbGlr
ZSA3TUIgZ2V0cyBhbGxvY2F0ZWQgYmVmb3JlCisgIC8vIHRoaXMgZmxhZyBnZXRzIGluaXRpYWxp
emVkIC1raHIuKQorICBpZiAoRkxBR1NfbWFsbG9jX2Rldm1lbV9zdGFydCA9PSAwKSB7CisgICAg
Ly8gTk9URTogbm90IGEgZGV2bWVtX2ZhaWx1cmUgLSB3ZSdkIGxpa2UgVENNYWxsb2NfU3lzdGVt
QWxsb2MgdG8KKyAgICAvLyB0cnkgdXMgYWdhaW4gbmV4dCB0aW1lLgorICAgIHJldHVybiBOVUxM
OworICB9CisgIAorICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgcGh5c21lbV9mZCA9IG9wZW4o
Ii9kZXYvbWVtIiwgT19SRFdSKTsKKyAgICBpZiAocGh5c21lbV9mZCA8IDApIHsKKyAgICAgIGRl
dm1lbV9mYWlsdXJlID0gdHJ1ZTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwaHlz
bWVtX2Jhc2UgPSBGTEFHU19tYWxsb2NfZGV2bWVtX3N0YXJ0KjEwMjRMTCoxMDI0TEw7CisgICAg
cGh5c21lbV9saW1pdCA9IEZMQUdTX21hbGxvY19kZXZtZW1fbGltaXQqMTAyNExMKjEwMjRMTDsK
KyAgICBpbml0aWFsaXplZCA9IHRydWU7CisgIH0KKyAgCisgIC8vIEVuZm9yY2UgcGFnZSBhbGln
bm1lbnQKKyAgaWYgKHBhZ2VzaXplID09IDApIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKKyAg
aWYgKGFsaWdubWVudCA8IHBhZ2VzaXplKSBhbGlnbm1lbnQgPSBwYWdlc2l6ZTsKKyAgc2l6ZSA9
ICgoc2l6ZSArIGFsaWdubWVudCAtIDEpIC8gYWxpZ25tZW50KSAqIGFsaWdubWVudDsKKworICAv
LyBBc2sgZm9yIGV4dHJhIG1lbW9yeSBpZiBhbGlnbm1lbnQgPiBwYWdlc2l6ZQorICBzaXplX3Qg
ZXh0cmEgPSAwOworICBpZiAoYWxpZ25tZW50ID4gcGFnZXNpemUpIHsKKyAgICBleHRyYSA9IGFs
aWdubWVudCAtIHBhZ2VzaXplOworICB9CisgIAorICAvLyBjaGVjayB0byBzZWUgaWYgd2UgaGF2
ZSBhbnkgbWVtb3J5IGxlZnQKKyAgaWYgKHBoeXNtZW1fbGltaXQgIT0gMCAmJiBwaHlzbWVtX2Jh
c2UgKyBzaXplICsgZXh0cmEgPiBwaHlzbWVtX2xpbWl0KSB7CisgICAgZGV2bWVtX2ZhaWx1cmUg
PSB0cnVlOworICAgIHJldHVybiBOVUxMOworICB9CisgIHZvaWQgKnJlc3VsdCA9IG1tYXAoMCwg
c2l6ZSArIGV4dHJhLCBQUk9UX1dSSVRFfFBST1RfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAg
ICBNQVBfU0hBUkVELCBwaHlzbWVtX2ZkLCBwaHlzbWVtX2Jhc2UpOworICBpZiAocmVzdWx0ID09
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KE1BUF9GQUlMRUQpKSB7CisgICAgZGV2bWVtX2ZhaWx1
cmUgPSB0cnVlOworICAgIHJldHVybiBOVUxMOworICB9CisgIHVpbnRwdHJfdCBwdHIgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmVzdWx0KTsKKyAgCisgIC8vIEFkanVzdCB0aGUgcmV0
dXJuIG1lbW9yeSBzbyBpdCBpcyBhbGlnbmVkCisgIHNpemVfdCBhZGp1c3QgPSAwOworICBpZiAo
KHB0ciAmIChhbGlnbm1lbnQgLSAxKSkgIT0gMCkgeworICAgIGFkanVzdCA9IGFsaWdubWVudCAt
IChwdHIgJiAoYWxpZ25tZW50IC0gMSkpOworICB9CisgIAorICAvLyBSZXR1cm4gdGhlIHVudXNl
ZCB2aXJ0dWFsIG1lbW9yeSB0byB0aGUgc3lzdGVtCisgIGlmIChhZGp1c3QgPiAwKSB7CisgICAg
bXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0ciksIGFkanVzdCk7CisgIH0KKyAgaWYg
KGFkanVzdCA8IGV4dHJhKSB7CisgICAgbXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0
ciArIGFkanVzdCArIHNpemUpLCBleHRyYSAtIGFkanVzdCk7CisgIH0KKyAgCisgIHB0ciArPSBh
ZGp1c3Q7CisgIHBoeXNtZW1fYmFzZSArPSBhZGp1c3QgKyBzaXplOworICAKKyAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0cik7Cit9CisKK3ZvaWQqIFRDTWFsbG9jX1N5c3RlbUFs
bG9jKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KSB7CisjaWZuZGVmIEtYQ19DSEFOR0VT
CisgIGlmIChUQ01hbGxvY0RlYnVnOjpsZXZlbCA+PSBUQ01hbGxvY0RlYnVnOjprVmVyYm9zZSkg
eworICAgIE1FU1NBR0UoIlRDTWFsbG9jX1N5c3RlbUFsbG9jKCUiIFBSSXVTICIsICUiIFBSSXVT
IilcbiIsIAorICAgICAgICAgICAgc2l6ZSwgYWxpZ25tZW50KTsKKyAgfQorI2VuZGlmCisgIFNw
aW5Mb2NrSG9sZGVyIGxvY2tfaG9sZGVyKCZzcGlubG9jayk7CisKKyAgLy8gRW5mb3JjZSBtaW5p
bXVtIGFsaWdubWVudAorICBpZiAoYWxpZ25tZW50IDwgc2l6ZW9mKE1lbW9yeUFsaWduZXIpKSBh
bGlnbm1lbnQgPSBzaXplb2YoTWVtb3J5QWxpZ25lcik7CisKKyAgLy8gVHJ5IHR3aWNlLCBvbmNl
IGF2b2lkaW5nIGFsbG9jYXRvcnMgdGhhdCBmYWlsZWQgYmVmb3JlLCBhbmQgb25jZQorICAvLyBt
b3JlIHRyeWluZyBhbGwgYWxsb2NhdG9ycyBldmVuIGlmIHRoZXkgZmFpbGVkIGJlZm9yZS4KKyAg
Zm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICBpZiAodXNlX2Rldm1lbSAmJiAhZGV2
bWVtX2ZhaWx1cmUpIHsKKyAgICAgIHZvaWQqIHJlc3VsdCA9IFRyeURldk1lbShzaXplLCBhbGln
bm1lbnQpOworICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKSByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyNpZmRlZiBIQVZFX1NCUksKKyAgICBpZiAodXNlX3NicmsgJiYgIXNicmtfZmFpbHVy
ZSkgeworICAgICAgdm9pZCogcmVzdWx0ID0gVHJ5U2JyayhzaXplLCBhbGlnbm1lbnQpOworICAg
ICAgaWYgKHJlc3VsdCAhPSBOVUxMKSByZXR1cm4gcmVzdWx0OworICAgIH0KKyNlbmRpZgorCisj
aWZkZWYgSEFWRV9NTUFQICAgIAorICAgIGlmICh1c2VfbW1hcCAmJiAhbW1hcF9mYWlsdXJlKSB7
CisgICAgICB2b2lkKiByZXN1bHQgPSBUcnlNbWFwKHNpemUsIGFsaWdubWVudCk7CisgICAgICBp
ZiAocmVzdWx0ICE9IE5VTEwpIHJldHVybiByZXN1bHQ7CisgICAgfQorI2VuZGlmCisKKyAgICAv
LyBub3RoaW5nIHdvcmtlZCAtIHJlc2V0IGZhaWx1cmUgZmxhZ3MgYW5kIHRyeSBhZ2FpbgorICAg
IGRldm1lbV9mYWlsdXJlID0gZmFsc2U7CisgICAgc2Jya19mYWlsdXJlID0gZmFsc2U7CisgICAg
bW1hcF9mYWlsdXJlID0gZmFsc2U7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9reG1sY29yZS9UQ1N5c3RlbUFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
a3htbGNvcmUvVENTeXN0ZW1BbGxvYy5oCmRpZmYgLU4gSmF2YVNjcmlwdENvcmUva3htbGNvcmUv
VENTeXN0ZW1BbGxvYy5oCi0tLSBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9UQ1N5c3RlbUFsbG9j
LmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgSmF2YVNjcmlwdENvcmUva3htbGNvcmUv
VENTeXN0ZW1BbGxvYy5oCTI3IFNlcCAyMDA1IDA3OjE2OjUyIC0wMDAwCkBAIC0wLDAgKzEsNDYg
QEAKKy8vIENvcHlyaWdodCAoYykgMjAwNSwgR29vZ2xlIEluYy4KKy8vIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyAKKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8g
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLyAKKy8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
Ky8vIC0tLQorLy8gQXV0aG9yOiBTYW5qYXkgR2hlbWF3YXQKKy8vCisvLyBSb3V0aW5lIHRoYXQg
dXNlcyBzYnJrL21tYXAgdG8gYWxsb2NhdGUgbWVtb3J5IGZyb20gdGhlIHN5c3RlbS4KKy8vIFVz
ZWZ1bCBmb3IgaW1wbGVtZW50aW5nIG1hbGxvYy4KKworI2lmbmRlZiBUQ01BTExPQ19TWVNURU1f
QUxMT0NfSF9fCisjZGVmaW5lIFRDTUFMTE9DX1NZU1RFTV9BTExPQ19IX18KKworLy8gUkVRVUlS
RVM6ICJhbGlnbm1lbnQiIGlzIGEgcG93ZXIgb2YgdHdvIG9yICIwIiB0byBpbmRpY2F0ZSBkZWZh
dWx0IGFsaWdubWVudAorLy8KKy8vIEFsbG9jYXRlIGFuZCByZXR1cm4gIk4iIGJ5dGVzIG9mIHpl
cm9lZCBtZW1vcnkuICBUaGUgcmV0dXJuZWQKKy8vIHBvaW50ZXIgaXMgYSBtdWx0aXBsZSBvZiAi
YWxpZ25tZW50IiBpZiBub24temVyby4gIFJldHVybnMgTlVMTAorLy8gd2hlbiBvdXQgb2YgbWVt
b3J5LgorZXh0ZXJuIHZvaWQqIFRDTWFsbG9jX1N5c3RlbUFsbG9jKHNpemVfdCBieXRlcywgc2l6
ZV90IGFsaWdubWVudCA9IDApOworCisjZW5kaWYgLyogVENNQUxMT0NfU1lTVEVNX0FMTE9DX0hf
XyAqLwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2NgpkaWZmIC1w
IC11IC1yMS4xNjYgV2ViQ29yZS9DaGFuZ2VMb2cKLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCTI3IFNl
cCAyMDA1IDAyOjEwOjQ4IC0wMDAwCTEuMTY2CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkyNyBTZXAg
MjAwNSAwNzoxNzoxOSAtMDAwMApAQCAtMSwzICsxLDE2NSBAQAorMjAwNS0wOS0yNiAgTWFjaWVq
IFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisJLSByZXBsYWNlIGRsbWFsbG9jIHdpdGggdGNtYWxsb2MKKwlodHRwOi8v
YnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTUxNDUKKworCUkgYWxzbyBt
b3ZlZCBTaGFyZWRQdHIgYW5kIHRoZSBhc3NlcnRpb24gY29kZSBmcm9tIFdlYkNvcmUgaW50byBh
CisJbmV3IGt4bWxjb3JlIGRpcmVjdG9yeS4KKwkKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVy
cy9ranMvc2hhcmVkX3B0ci5oOiBSZW1vdmVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJz
L2t4bWxjb3JlL0Fzc2VydGlvbnMuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRl
cnMva3htbGNvcmUvRmFzdE1hbGxvYy5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVh
ZGVycy9reG1sY29yZS9TaGFyZWRQdHIuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hl
YWRlcnMvbWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICoga2h0bWwvY3NzL2Nzc19i
YXNlLmg6CisgICAgICAgICoga2h0bWwvY3NzL2Nzc19jb21wdXRlZHN0eWxlLmNwcDoKKyAgICAg
ICAgKiBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmg6CisgICAgICAgICoga2h0bWwvY3NzL2Nzc192
YWx1ZWltcGwuaDoKKyAgICAgICAgKiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5oOgorICAg
ICAgICAqIGtodG1sL2VjbWEvZG9tcGFyc2VyLmg6CisgICAgICAgICoga2h0bWwvZWNtYS9ranNf
Y3NzLmg6CisgICAgICAgICoga2h0bWwvZWNtYS9ranNfZG9tLmNwcDoKKyAgICAgICAgKiBraHRt
bC9lY21hL2tqc19kb20uaDoKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19ldmVudHMuaDoKKyAg
ICAgICAgKiBraHRtbC9lY21hL2tqc19odG1sLmNwcDoKKyAgICAgICAgKiBraHRtbC9lY21hL2tq
c19odG1sLmg6CisgICAgICAgICoga2h0bWwvZWNtYS9ranNfcmFuZ2UuaDoKKyAgICAgICAgKiBr
aHRtbC9lY21hL2tqc190cmF2ZXJzYWwuaDoKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc192aWV3
cy5jcHA6CisgICAgICAgICoga2h0bWwvZWNtYS9ranNfdmlld3MuaDoKKyAgICAgICAgKiBraHRt
bC9lY21hL2tqc193aW5kb3cuY3BwOgorICAgICAgICAqIGtodG1sL2VjbWEveG1saHR0cHJlcXVl
c3QuaDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAqIGtodG1sL2VkaXRpbmcvYXBwZW5kX25vZGVfY29tbWFuZC5jcHA6CisgICAgICAg
ICoga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcDoKKyAgICAgICAgKiBraHRt
bC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHA6CisgICAgICAgICoga2h0bWwv
ZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcDoKKyAgICAgICAgKiBraHRtbC9lZGl0
aW5nL2RlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21tYW5kLmNwcDoKKyAgICAgICAgKiBraHRtbC9l
ZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvZWRp
dGluZy9lZGl0X2NvbW1hbmQuY3BwOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvaHRtbGVkaXRp
bmcuY3BwOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2ludG9fdGV4dF9ub2RlX2Nv
bW1hbmQuY3BwOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29t
bWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9pbnNlcnRfbm9kZV9iZWZvcmVfY29t
bWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFy
YXRvcl9jb21tYW5kLmNwcDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL2luc2VydF90ZXh0X2Nv
bW1hbmQuY3BwOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvam9pbl90ZXh0X25vZGVzX2NvbW1h
bmQuY3BwOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKiBr
aHRtbC9lZGl0aW5nL21lcmdlX2lkZW50aWNhbF9lbGVtZW50c19jb21tYW5kLmNwcDoKKyAgICAg
ICAgKiBraHRtbC9lZGl0aW5nL21vdmVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwOgorICAgICAgICAq
IGtodG1sL2VkaXRpbmcvcmViYWxhbmNlX3doaXRlc3BhY2VfY29tbWFuZC5jcHA6CisgICAgICAg
ICoga2h0bWwvZWRpdGluZy9yZW1vdmVfY3NzX3Byb3BlcnR5X2NvbW1hbmQuY3BwOgorICAgICAg
ICAqIGtodG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfYXR0cmlidXRlX2NvbW1hbmQuY3BwOgorICAg
ICAgICAqIGtodG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfY29tbWFuZC5jcHA6CisgICAgICAgICog
a2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2NvbW1hbmQuY3Bw
OgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHA6
CisgICAgICAgICoga2h0bWwvZWRpdGluZy9zZXRfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5jcHA6
CisgICAgICAgICoga2h0bWwvZWRpdGluZy9zcGxpdF9lbGVtZW50X2NvbW1hbmQuY3BwOgorICAg
ICAgICAqIGtodG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbW1hbmQuY3BwOgorICAgICAg
ICAqIGtodG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudC5jcHA6
CisgICAgICAgICoga2h0bWwvZWRpdGluZy90eXBpbmdfY29tbWFuZC5jcHA6CisgICAgICAgICog
a2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKiBraHRtbC9lZGl0
aW5nL3Zpc2libGVfcG9zaXRpb24uaDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL3dyYXBfY29u
dGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5kLmNwcDoKKyAgICAgICAgKiBraHRtbC9odG1sL2h0
bWxfaW1hZ2VpbXBsLmg6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oOgor
ICAgICAgICAqIGtodG1sL2h0bWwvaHRtbHBhcnNlci5jcHA6CisgICAgICAgICoga2h0bWwva2h0
bWxwYXJ0X3AuaDoKKyAgICAgICAgKiBraHRtbC9taXNjL2FyZW5hLmNwcDoKKyAgICAgICAgKEFy
ZW5hQWxsb2NhdGUpOgorICAgICAgICAoRnJlZUFyZW5hTGlzdCk6CisgICAgICAgIChBcmVuYUZp
bmlzaCk6CisgICAgICAgICoga2h0bWwvbWlzYy9oYXNodGFibGUuaDoKKyAgICAgICAgKGtodG1s
OjpIYXNoVGFibGU6On5IYXNoVGFibGUpOgorICAgICAgICAoa2h0bWw6Ojo6YWxsb2NhdGVUYWJs
ZSk6CisgICAgICAgIChraHRtbDo6OjpyZWhhc2gpOgorICAgICAgICAoa2h0bWw6Ojo6Y2xlYXIp
OgorICAgICAgICAoa2h0bWw6Ojo6SGFzaFRhYmxlKToKKyAgICAgICAgKiBraHRtbC9taXNjL2xv
YWRlci5jcHA6CisgICAgICAgICoga2h0bWwvbWlzYy9tYWluX3RocmVhZF9tYWxsb2MuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGtodG1sL21pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmg6IFJlbW92
ZWQuCisgICAgICAgICoga2h0bWwvbWlzYy9zaGFyZWQuaDoKKyAgICAgICAgKiBraHRtbC9yZW5k
ZXJpbmcvcmVuZGVyX3N0eWxlLmg6CisgICAgICAgICoga2h0bWwveG1sL2RvbTJfZXZlbnRzaW1w
bC5oOgorICAgICAgICAqIGtodG1sL3htbC9kb20yX3JhbmdlaW1wbC5oOgorICAgICAgICAqIGto
dG1sL3htbC9kb20yX3RyYXZlcnNhbGltcGwuaDoKKyAgICAgICAgKiBraHRtbC94bWwvZG9tMl92
aWV3c2ltcGwuaDoKKyAgICAgICAgKiBraHRtbC94bWwvZG9tX2RvY2ltcGwuaDoKKyAgICAgICAg
KiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcDoKKyAgICAgICAgKE5hbWVkQXR0ck1hcElt
cGw6OmNsZWFyQXR0cmlidXRlcyk6CisgICAgICAgIChOYW1lZEF0dHJNYXBJbXBsOjpvcGVyYXRv
cj0pOgorICAgICAgICAoTmFtZWRBdHRyTWFwSW1wbDo6YWRkQXR0cmlidXRlKToKKyAgICAgICAg
KE5hbWVkQXR0ck1hcEltcGw6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgICoga2h0bWwveG1s
L2RvbV9lbGVtZW50aW1wbC5oOgorICAgICAgICAqIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3Bw
OgorICAgICAgICAqIGtodG1sL3htbC9kb21fbm9kZWltcGwuaDoKKyAgICAgICAgKiBraHRtbC94
bWwvZG9tX3Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKiBraHRtbC94bWwvZG9tX3N0cmluZ2ltcGwu
aDoKKyAgICAgICAgKiBrd3EvRE9NLUNTUy5tbToKKyAgICAgICAgKiBrd3EvRE9NLm1tOgorICAg
ICAgICAqIGt3cS9ET01FdmVudHMubW06CisgICAgICAgICoga3dxL0RPTUhUTUwubW06CisgICAg
ICAgICoga3dxL0RPTUludGVybmFsLm1tOgorICAgICAgICAqIGt3cS9ET01WaWV3cy5tbToKKyAg
ICAgICAgKiBrd3EvS1dRQWNjT2JqZWN0Lm1tOgorICAgICAgICAqIGt3cS9LV1FBY2NPYmplY3RD
YWNoZS5tbToKKyAgICAgICAgKiBrd3EvS1dRQXJyYXlJbXBsLmg6CisgICAgICAgICoga3dxL0tX
UUFycmF5SW1wbC5tbToKKyAgICAgICAgKEtXUUFycmF5SW1wbDo6S1dRQXJyYXlQcml2YXRlOjpL
V1FBcnJheVByaXZhdGUpOgorICAgICAgICAoS1dRQXJyYXlJbXBsOjpLV1FBcnJheVByaXZhdGU6
On5LV1FBcnJheVByaXZhdGUpOgorICAgICAgICAoS1dRQXJyYXlJbXBsOjpyZXNpemUpOgorICAg
ICAgICAqIGt3cS9LV1FBc3NlcnRpb25zLmg6IFJlbW92ZWQuCisgICAgICAgICoga3dxL0tXUUFz
c2VydGlvbnMubTogUmVtb3ZlZC4KKyAgICAgICAgKiBrd3EvS1dRQnV0dG9uLm1tOgorICAgICAg
ICAqIGt3cS9LV1FDU3RyaW5nLm1tOgorICAgICAgICAqIGt3cS9LV1FDbGlwYm9hcmQuaDoKKyAg
ICAgICAgKiBrd3EvS1dRQ2xpcGJvYXJkLm1tOgorICAgICAgICAqIGt3cS9LV1FDb2xvci5tbToK
KyAgICAgICAgKiBrd3EvS1dRQ29tYm9Cb3gubW06CisgICAgICAgICoga3dxL0tXUUVkaXRDb21t
YW5kLm1tOgorICAgICAgICAqIGt3cS9LV1FFeGNlcHRpb25zLmg6CisgICAgICAgICoga3dxL0tX
UUZpbGVCdXR0b24ubW06CisgICAgICAgICoga3dxL0tXUUZvbnRGYW1pbHkuaDoKKyAgICAgICAg
KiBrd3EvS1dRRm9ybURhdGEubW06CisgICAgICAgICoga3dxL0tXUUtIVE1MUGFydC5oOgorICAg
ICAgICAqIGt3cS9LV1FLSFRNTFBhcnQubW06CisgICAgICAgICoga3dxL0tXUUtQYXJ0c0Jyb3dz
ZXJJbnRlcmZhY2UubW06CisgICAgICAgICoga3dxL0tXUUtVUkwubW06CisgICAgICAgICoga3dx
L0tXUUxpc3RCb3gubW06CisgICAgICAgICoga3dxL0tXUUxpc3RJbXBsLm1tOgorICAgICAgICAq
IGt3cS9LV1FMb2dnaW5nLmg6CisgICAgICAgICoga3dxL0tXUUxvZ2dpbmcubToKKyAgICAgICAg
KiBrd3EvS1dRTWFwSW1wbC5oOgorICAgICAgICAqIGt3cS9LV1FNYXBJbXBsLm1tOgorICAgICAg
ICAqIGt3cS9LV1FPYmplY3QubW06CisgICAgICAgICoga3dxL0tXUVBhZ2VTdGF0ZS5tbToKKyAg
ICAgICAgKiBrd3EvS1dRUGFpbnRlci5tbToKKyAgICAgICAgKiBrd3EvS1dRUmVzb3VyY2VMb2Fk
ZXIubW06CisgICAgICAgICoga3dxL0tXUVNpZ25hbC5tbToKKyAgICAgICAgKiBrd3EvS1dRU2xv
dC5tbToKKyAgICAgICAgKiBrd3EvS1dRU3RyaW5nLmg6CisgICAgICAgICoga3dxL0tXUVN0cmlu
Zy5tbToKKyAgICAgICAgKEFMTE9DX1FDSEFSKToKKyAgICAgICAgKFFTdHJpbmc6OnNldEJ1ZmZl
ckZyb21DRlN0cmluZyk6CisgICAgICAgIChhbGxvY2F0ZVBhZ2VOb2RlKToKKyAgICAgICAgKiBr
d3EvS1dRVGV4dEFyZWEubW06CisgICAgICAgICoga3dxL0tXUVRleHRDb2RlYy5tbToKKyAgICAg
ICAgKiBrd3EvS1dRVGV4dEVkaXQubW06CisgICAgICAgICoga3dxL0tXUVRleHRGaWVsZC5tbToK
KyAgICAgICAgKiBrd3EvS1dRVGltZXIubW06CisgICAgICAgICoga3dxL0tXUVZhbHVlTGlzdElt
cGwuaDoKKyAgICAgICAgKiBrd3EvS1dRVmFsdWVMaXN0SW1wbC5tbToKKyAgICAgICAgKiBrd3Ev
V2ViQ29yZUJyaWRnZS5tbToKKyAgICAgICAgKiBrd3EvV2ViQ29yZUNvb2tpZUFkYXB0ZXIubToK
KyAgICAgICAgKiBrd3EvV2ViQ29yZUdyYXBoaWNzQnJpZGdlLm06CisgICAgICAgICoga3dxL1dl
YkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9yeS5tOgorICAgICAgICAqIGt3cS9XZWJDb3JlS2V5R2Vu
ZXJhdG9yLm06CisgICAgICAgICoga3dxL1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5Lm1tOgor
ICAgICAgICAqIGt3cS9XZWJDb3JlVmlld0ZhY3RvcnkubToKKwogMjAwNS0wOS0yNiAgRXJpYyBT
ZWlkZWwgIDxlc2VpZGVsQGFwcGxlLmNvbT4KIAogICAgICAgICBObyByZXZpZXcgbmVlZGVkLCBz
dmcgYnVpbGQgZml4IG9ubHkuCkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2tqcy9z
aGFyZWRfcHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogRm9yd2FyZGluZ0hlYWRlcnMva2pzL3No
YXJlZF9wdHIuaApkaWZmIC1OIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva2pzL3NoYXJlZF9w
dHIuaAotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ranMvc2hhcmVkX3B0ci5oCTMwIEF1
ZyAyMDA1IDIzOjU2OjE1IC0wMDAwCTEuMQorKysgV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9r
anMvc2hhcmVkX3B0ci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEgKzAsMCBAQAot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvc2hhcmVkX3B0ci5oPgpJbmRleDogV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy9reG1sY29yZS9Bc3NlcnRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
Rm9yd2FyZGluZ0hlYWRlcnMva3htbGNvcmUvQXNzZXJ0aW9ucy5oCmRpZmYgLU4gV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9reG1sY29yZS9Bc3NlcnRpb25zLmgKLS0tIFdlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMva3htbGNvcmUvQXNzZXJ0aW9ucy5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAw
MDAKKysrIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva3htbGNvcmUvQXNzZXJ0aW9ucy5oCTI3
IFNlcCAyMDA1IDA3OjE3OjE5IC0wMDAwCkBAIC0wLDAgKzEgQEAKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0Fzc2VydGlvbnMuaD4KSW5kZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva3ht
bGNvcmUvRmFzdE1hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IEZvcndhcmRpbmdIZWFkZXJz
L2t4bWxjb3JlL0Zhc3RNYWxsb2MuaApkaWZmIC1OIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
a3htbGNvcmUvRmFzdE1hbGxvYy5oCi0tLSBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2t4bWxj
b3JlL0Zhc3RNYWxsb2MuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBXZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL2t4bWxjb3JlL0Zhc3RNYWxsb2MuaAkyNyBTZXAgMjAwNSAwNzoxNzox
OSAtMDAwMApAQCAtMCwwICsxIEBACisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9GYXN0TWFsbG9j
Lmg+CkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2t4bWxjb3JlL1NoYXJlZFB0ci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IEZvcndhcmRpbmdIZWFkZXJzL2t4bWxjb3JlL1NoYXJlZFB0
ci5oCmRpZmYgLU4gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9reG1sY29yZS9TaGFyZWRQdHIu
aAotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9reG1sY29yZS9TaGFyZWRQdHIuaAkxIEph
biAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2t4bWxj
b3JlL1NoYXJlZFB0ci5oCTI3IFNlcCAyMDA1IDA3OjE3OjE5IC0wMDAwCkBAIC0wLDAgKzEgQEAK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1NoYXJlZFB0ci5oPgpJbmRleDogV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy9taXNjL21haW5fdGhyZWFkX21hbGxvYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IEZvcndhcmRpbmdIZWFkZXJzL21pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmgKZGlmZiAtTiBX
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL21pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmgKLS0tIFdl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvbWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaAkyNiBBcHIg
MjAwNSAxODo0NjowMyAtMDAwMAkxLjEKKysrIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvbWlz
Yy9tYWluX3RocmVhZF9tYWxsb2MuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xICsw
LDAgQEAKLSNpbXBvcnQgPG1haW5fdGhyZWFkX21hbGxvYy5oPgpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjI4CmRpZmYgLXAgLXUgLXIxLjI4IFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCi0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkyNCBTZXAgMjAwNSAwNTo0OToxNSAtMDAwMAkxLjI4CisrKyBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkyNyBTZXAgMjAwNSAwNzoxNzozMiAtMDAwMApA
QCAtMTY2LDcgKzE2Niw2IEBACiAJCTkzRjE5OTIxMDgyNDVFNTkwMDFFOUFCQyAvKiB4bWxfdG9r
ZW5pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDMwQTAyREU0NDc2MDE4NjM1Q0EgLyogeG1sX3Rva2VuaXplci5oICovOyB9OwogCQk5M0Yx
OTkyMjA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRQXBwbGljYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4Njc2MDJERTNCODYwMUVBNDEyMiAv
KiBLV1FBcHBsaWNhdGlvbi5oICovOyB9OwogCQk5M0YxOTkyMzA4MjQ1RTU5MDAxRTlBQkMgLyog
S1dRQXJyYXlJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNTg3ODRDNTAyREUzNzU4MDFFQTQxMjIgLyogS1dRQXJyYXlJbXBsLmggKi87IH07Ci0J
CTkzRjE5OTI0MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FBc3NlcnRpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzc3RkI1NTAzMkMyMzVDMDA4NjM1
Q0UgLyogS1dRQXNzZXJ0aW9ucy5oICovOyB9OwogCQk5M0YxOTkyNTA4MjQ1RTU5MDAxRTlBQkMg
LyogS1dRQXN5bmNJTy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjU4Nzg2NzkwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUUFzeW5jSU8uaCAqLzsgfTsKIAkJ
OTNGMTk5MjYwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUJydXNoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODY3QjAyREUzQjg2MDFFQTQxMjIgLyog
S1dRQnJ1c2guaCAqLzsgfTsKIAkJOTNGMTk5MjcwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2
N0MwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUUJ1ZmZlci5oICovOyB9OwpAQCAtMzczLDcgKzM3Miw2
IEBACiAJCTkzRjE5OUY5MDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2ludGVyY2hhbmdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCRUE1RTAxRDA3NUNF
REFDMDA5OEE0MzIgLyogaHRtbF9pbnRlcmNoYW5nZS5oICovOyB9OwogCQk5M0YxOTlGQTA4MjQ1
RTU5MDAxRTlBQkMgLyogbWFya3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5Mzc4RDlGQTA3NjQwQTQ2MDA0Qjk3QkYgLyogbWFya3VwLmggKi87IH07
CiAJCTkzRjE5OUZCMDgyNDVFNTkwMDFFOUFCQyAvKiBlZGl0X2FjdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVEQTRBQzk3MDc2RkI4OTEwMERE
MjNFQyAvKiBlZGl0X2FjdGlvbnMuaCAqLzsgfTsKLQkJOTNGMTk5RkMwODI0NUU1OTAwMUU5QUJD
IC8qIG1haW5fdGhyZWFkX21hbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjVGRDlEMkMwODFENzI3RjAwNjM2RjU0IC8qIG1haW5fdGhyZWFkX21h
bGxvYy5oICovOyB9OwogCQk5M0YxOTlGRTA4MjQ1RTU5MDAxRTlBQkMgLyogbGlua0N1cnNvci50
aWZmIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUEx
QjA0OTAyREU4QUJBMDE4NjM1Q0EgLyogbGlua0N1cnNvci50aWZmICovOyB9OwogCQk5M0YxOTlG
RjA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbDQuY3NzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUExQjA1MzAyREU4QjQ2MDE4NjM1Q0EgLyogaHRtbDQu
Y3NzICovOyB9OwogCQk5M0YxOUEwMDA4MjQ1RTU5MDAxRTlBQkMgLyogcXVpcmtzLmNzcyBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4RjYyOTkwNDA1
RjQ1NjAwQTgwMDA0IC8qIHF1aXJrcy5jc3MgKi87IH07CkBAIC01NDksNyArNTQ3LDYgQEAKIAkJ
OTNGMTlBQzcwODI0NUU1OTAwMUU5QUJDIC8qIEtXUU5TVmlld0V4dHJhcy5tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4M0Q1MDIwMzE0MDYyMzAxODYz
NUNFIC8qIEtXUU5TVmlld0V4dHJhcy5tICovOyB9OwogCQk5M0YxOUFDODA4MjQ1RTU5MDAxRTlB
QkMgLyogV2ViQ29yZUhpc3RvcnkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY1NTE3REMzMDMxQUI1NjMwMUE4MDE4MCAvKiBXZWJDb3JlSGlzdG9yeS5t
ICovOyB9OwogCQk5M0YxOUFDOTA4MjQ1RTU5MDAxRTlBQkMgLyogcmVuZGVyX2xheWVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2OTBDRkVCMDMx
QzQ3RjQwMUNBMkFDNCAvKiByZW5kZXJfbGF5ZXIuY3BwICovOyB9OwotCQk5M0YxOUFDQTA4MjQ1
RTU5MDAxRTlBQkMgLyogS1dRQXNzZXJ0aW9ucy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTM3N0ZCNTYwMzJDMjM1QzAwODYzNUNFIC8qIEtXUUFzc2Vy
dGlvbnMubSAqLzsgfTsKIAkJOTNGMTlBQ0IwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUxvZ2dpbmcu
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzODYxREUw
MDMyQzJFNTIwMDg2MzVDRSAvKiBLV1FMb2dnaW5nLm0gKi87IH07CiAJCTkzRjE5QUNDMDgyNDVF
NTkwMDFFOUFCQyAvKiBLV1FGaWxlQnV0dG9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDQ0Y3RDUwMzNCRDQzQzAwODYzNUNFIC8qIEtXUUZpbGVC
dXR0b24ubW0gKi87IH07CiAJCTkzRjE5QUNEMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FSZXNvdXJj
ZUxvYWRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzMzg2QjkxMDM3MDQ1QjMwMDg2MzVDRSAvKiBLV1FSZXNvdXJjZUxvYWRlci5tbSAqLzsgfTsK
QEAgLTYxNiw3ICs2MTMsNiBAQAogCQk5M0YxOUIwRTA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9p
bnRlcmNoYW5nZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCRUE1REJEQTA3NUNFREEwMDA5OEE0MzIgLyogaHRtbF9pbnRlcmNoYW5nZS5jcHAgKi87
IH07CiAJCTkzRjE5QjBGMDgyNDVFNTkwMDFFOUFCQyAvKiBtYXJrdXAuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM3OEQ5RjkwNzY0MEE0NjAwNEI5
N0JGIC8qIG1hcmt1cC5jcHAgKi87IH07CiAJCTkzRjE5QjEwMDgyNDVFNTkwMDFFOUFCQyAvKiBE
T01VdGlsaXR5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTExMTFBQzAwN0JEODEyQzAwQjcxNjJDIC8qIERPTVV0aWxpdHkubW0gKi87IH07Ci0JCTkz
RjE5QjExMDgyNDVFNTkwMDFFOUFCQyAvKiBtYWluX3RocmVhZF9tYWxsb2MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVGRDlEMkIwODFENzI3RjAw
NjM2RjU0IC8qIG1haW5fdGhyZWFkX21hbGxvYy5jcHAgKi87IH07CiAJCTkzRjE5QjEzMDgyNDVF
NTkwMDFFOUFCQyAvKiBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QzI4NjkzMDI4NDZEQ0QwMTg2
MzVDQSAvKiBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yayAqLzsgfTsKIAkJOTNGMTlCMTQw
ODI0NUU1OTAwMUU5QUJDIC8qIENhcmJvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUMyODY5NDAyODQ2RENEMDE4NjM1Q0EgLyog
Q2FyYm9uLmZyYW1ld29yayAqLzsgfTsKIAkJOTNGMTlCMTUwODI0NUU1OTAwMUU5QUJDIC8qIENv
Y29hLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1QzI4Njk1MDI4NDZEQ0QwMTg2MzVDQSAvKiBDb2NvYS5mcmFtZXdvcmsgKi87IH07
CkBAIC05NzYsNyArOTcyLDYgQEAKIAkJQTgyMTJBRUMwODc5NEEyMzAwNjc3MzU5IC8qIHhtbF90
b2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY1MjNEMzBBMDJERTQ0NzYwMTg2MzVDQSAvKiB4bWxfdG9rZW5pemVyLmggKi87IH07CiAJCUE4
MjEyQUVEMDg3OTRBMjMwMDY3NzM1OSAvKiBLV1FBcHBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2NzYwMkRFM0I4NjAxRUE0MTIy
IC8qIEtXUUFwcGxpY2F0aW9uLmggKi87IH07CiAJCUE4MjEyQUVFMDg3OTRBMjMwMDY3NzM1OSAv
KiBLV1FBcnJheUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1ODc4NEM1MDJERTM3NTgwMUVBNDEyMiAvKiBLV1FBcnJheUltcGwuaCAqLzsgfTsK
LQkJQTgyMTJBRUYwODc5NEEyMzAwNjc3MzU5IC8qIEtXUUFzc2VydGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNzdGQjU1MDMyQzIzNUMwMDg2
MzVDRSAvKiBLV1FBc3NlcnRpb25zLmggKi87IH07CiAJCUE4MjEyQUYwMDg3OTRBMjMwMDY3NzM1
OSAvKiBLV1FBc3luY0lPLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNTg3ODY3OTAyREUzQjg2MDFFQTQxMjIgLyogS1dRQXN5bmNJTy5oICovOyB9Owog
CQlBODIxMkFGMTA4Nzk0QTIzMDA2NzczNTkgLyogS1dRQnJ1c2guaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NjdCMDJERTNCODYwMUVBNDEyMiAv
KiBLV1FCcnVzaC5oICovOyB9OwogCQlBODIxMkFGMjA4Nzk0QTIzMDA2NzczNTkgLyogS1dRQnVm
ZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3
ODY3QzAyREUzQjg2MDFFQTQxMjIgLyogS1dRQnVmZmVyLmggKi87IH07CkBAIC0xMTgzLDcgKzEx
NzgsNiBAQAogCQlBODIxMkJCRjA4Nzk0QTIzMDA2NzczNTkgLyogaHRtbF9pbnRlcmNoYW5nZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkVBNUUwMUQw
NzVDRURBQzAwOThBNDMyIC8qIGh0bWxfaW50ZXJjaGFuZ2UuaCAqLzsgfTsKIAkJQTgyMTJCQzAw
ODc5NEEyMzAwNjc3MzU5IC8qIG1hcmt1cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM3OEQ5RkEwNzY0MEE0NjAwNEI5N0JGIC8qIG1hcmt1cC5oICov
OyB9OwogCQlBODIxMkJDMTA4Nzk0QTIzMDA2NzczNTkgLyogZWRpdF9hY3Rpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFREE0QUM5NzA3NkZCODkx
MDBERDIzRUMgLyogZWRpdF9hY3Rpb25zLmggKi87IH07Ci0JCUE4MjEyQkMyMDg3OTRBMjMwMDY3
NzM1OSAvKiBtYWluX3RocmVhZF9tYWxsb2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1RkQ5RDJDMDgxRDcyN0YwMDYzNkY1NCAvKiBtYWluX3RocmVh
ZF9tYWxsb2MuaCAqLzsgfTsKIAkJQTgyMTJCQzMwODc5NEEyMzAwNjc3MzU5IC8qIGVkaXRfY29t
bWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0
RDg3QjYwODMxOTczQjAwODJEQ0ExIC8qIGVkaXRfY29tbWFuZC5oICovOyB9OwogCQlBODIxMkJD
NDA4Nzk0QTIzMDA2NzczNTkgLyogY29tcG9zaXRlX2VkaXRfY29tbWFuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVEQzE2QzMwODMxREQ2RjAwMjI3
NDRFIC8qIGNvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuaCAqLzsgfTsKIAkJQTgyMTJCQzUwODc5NEEy
MzAwNjc3MzU5IC8qIGFwcGVuZF9ub2RlX2NvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QUM3OUEwMDgzMUVENkQwMDkzODVDRSAvKiBhcHBl
bmRfbm9kZV9jb21tYW5kLmggKi87IH07CkBAIC0xMzkzLDcgKzEzODcsNiBAQAogCQlBODIxMkM5
ODA4Nzk0QTIzMDA2NzczNTkgLyogS1dRTlNWaWV3RXh0cmFzLm0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTgzRDUwMjAzMTQwNjIzMDE4NjM1Q0UgLyog
S1dRTlNWaWV3RXh0cmFzLm0gKi87IH07CiAJCUE4MjEyQzk5MDg3OTRBMjMwMDY3NzM1OSAvKiBX
ZWJDb3JlSGlzdG9yeS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjU1MTdEQzMwMzFBQjU2MzAxQTgwMTgwIC8qIFdlYkNvcmVIaXN0b3J5Lm0gKi87IH07
CiAJCUE4MjEyQzlBMDg3OTRBMjMwMDY3NzM1OSAvKiByZW5kZXJfbGF5ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY5MENGRUIwMzFDNDdGNDAx
Q0EyQUM0IC8qIHJlbmRlcl9sYXllci5jcHAgKi87IH07Ci0JCUE4MjEyQzlCMDg3OTRBMjMwMDY3
NzM1OSAvKiBLV1FBc3NlcnRpb25zLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5Mzc3RkI1NjAzMkMyMzVDMDA4NjM1Q0UgLyogS1dRQXNzZXJ0aW9ucy5t
ICovOyB9OwogCQlBODIxMkM5QzA4Nzk0QTIzMDA2NzczNTkgLyogS1dRTG9nZ2luZy5tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM4NjFERTAwMzJDMkU1
MjAwODYzNUNFIC8qIEtXUUxvZ2dpbmcubSAqLzsgfTsKIAkJQTgyMTJDOUQwODc5NEEyMzAwNjc3
MzU5IC8qIEtXUUZpbGVCdXR0b24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0NDRjdENTAzM0JENDNDMDA4NjM1Q0UgLyogS1dRRmlsZUJ1dHRvbi5t
bSAqLzsgfTsKIAkJQTgyMTJDOUUwODc5NEEyMzAwNjc3MzU5IC8qIEtXUVJlc291cmNlTG9hZGVy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzODZC
OTEwMzcwNDVCMzAwODYzNUNFIC8qIEtXUVJlc291cmNlTG9hZGVyLm1tICovOyB9OwpAQCAtMTQ2
MCw3ICsxNDUzLDYgQEAKIAkJQTgyMTJDREMwODc5NEEyMzAwNjc3MzU5IC8qIGh0bWxfaW50ZXJj
aGFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkVBNURCREEwNzVDRURBMDAwOThBNDMyIC8qIGh0bWxfaW50ZXJjaGFuZ2UuY3BwICovOyB9Owog
CQlBODIxMkNERDA4Nzk0QTIzMDA2NzczNTkgLyogbWFya3VwLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNzhEOUY5MDc2NDBBNDYwMDRCOTdCRiAv
KiBtYXJrdXAuY3BwICovOyB9OwogCQlBODIxMkNERTA4Nzk0QTIzMDA2NzczNTkgLyogRE9NVXRp
bGl0eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MTExQUMwMDdCRDgxMkMwMEI3MTYyQyAvKiBET01VdGlsaXR5Lm1tICovOyB9OwotCQlBODIxMkNE
RjA4Nzk0QTIzMDA2NzczNTkgLyogbWFpbl90aHJlYWRfbWFsbG9jLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RkQ5RDJCMDgxRDcyN0YwMDYzNkY1
NCAvKiBtYWluX3RocmVhZF9tYWxsb2MuY3BwICovOyB9OwogCQlBODIxMkNFMDA4Nzk0QTIzMDA2
NzczNTkgLyogZWRpdF9jb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1NEQ4N0I1MDgzMTk3M0IwMDgyRENBMSAvKiBlZGl0X2NvbW1hbmQu
Y3BwICovOyB9OwogCQlBODIxMkNFMTA4Nzk0QTIzMDA2NzczNTkgLyogY29tcG9zaXRlX2VkaXRf
Y29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NURDMTZDMjA4MzFERDZGMDAyMjc0NEUgLyogY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAg
Ki87IH07CiAJCUE4MjEyQ0UyMDg3OTRBMjMwMDY3NzM1OSAvKiBhcHBlbmRfbm9kZV9jb21tYW5k
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QUM3
OTlGMDgzMUVENkQwMDkzODVDRSAvKiBhcHBlbmRfbm9kZV9jb21tYW5kLmNwcCAqLzsgfTsKQEAg
LTI0NjMsOCArMjQ1NSw2IEBACiAJCTY1RjM3ODI3MDg3MEQ5NTgwMDBCMkY5NCAvKiBoYXNodGFi
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGhhc2h0YWJsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1RjM3ODI4MDg3MEQ5NTgwMDBCMkY5
NCAvKiBoYXNodGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGhhc2h0
YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUY4MDY5NzA1NEQ5Rjg2MDA4
QkY3NzYgLyogS1dRRXhjZXB0aW9ucy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBLV1FFeGNlcHRpb25zLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk2NUZEOUQyQjA4MUQ3MjdGMDA2MzZGNTQgLyogbWFpbl90aHJlYWRfbWFsbG9jLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBtYWluX3RocmVhZF9tYWxsb2MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2NUZEOUQyQzA4MUQ3MjdGMDA2MzZGNTQg
LyogbWFpbl90aHJlYWRfbWFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBtYWluX3RocmVhZF9tYWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U2
RkVFRDYwODk4NTgyMzAwQzQ0QzNGIC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlU2NyaXB0RGVidWdnZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U2RkVFRDcwODk4NTgyMzAwQzQ0QzNGIC8qIFdlYkNv
cmVTY3JpcHREZWJ1Z2dlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODMyNTU2RTQwNjFERjE1NTAwN0I4MDU0IC8qIERPTUV4dGVuc2lvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUV4dGVuc2lvbnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI1MDYsOCArMjQ5Niw2IEBACiAJCTkzMzg2QjkxMDM3MDQ1QjMwMDg2
MzVDRSAvKiBLV1FSZXNvdXJjZUxvYWRlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEtXUVJlc291cmNlTG9hZGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5MzQ4OTAwNTA2QzAwMzYzMDA3RTdBQ0UgLyogRE9NUHJpdmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzRFNDM3ODA0MTQyOTRBMDA4NjM1Q0UgLyogcGFyc2VyLnkgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLnlhY2M7IHBhdGggPSBwYXJzZXIueTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJOTM3N0ZCNTUwMzJDMjM1QzAwODYzNUNFIC8qIEtXUUFzc2VydGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtXUUFzc2VydGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTM3N0ZCNTYwMzJDMjM1QzAwODYzNUNFIC8qIEtXUUFz
c2VydGlvbnMubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IEtXUUFzc2Vy
dGlvbnMubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3OEQ5RjkwNzY0MEE0NjAw
NEI5N0JGIC8qIG1hcmt1cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBtYXJrdXAuY3BwOyBwYXRoID0gZWRpdGluZy9tYXJrdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5Mzc4RDlGQTA3NjQwQTQ2MDA0Qjk3QkYgLyogbWFya3VwLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IG1hcmt1cC5oOyBwYXRoID0gZWRpdGluZy9tYXJr
dXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM4NTlFMzIwNjVGQ0FEMzAwQ0Y1
NEVFIC8qIERPTUhUTUxJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBET01IVE1MSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4Mjks
OCArMzgxNyw4IEBACiAJCUE4QzBGQjhDMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzVHlwZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS0NhbnZhc1R5cGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzBGQjhEMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2Fu
dmFzVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLQ2FudmFz
Vmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzBGQjhFMDg5NzAxRjgw
MEJBNTExNCAvKiBLQ2FudmFzVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBLQ2FudmFzVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOERDNjNFODA4
RTBERDBBMDA0NTA3RjcgLyogRWNtYUludGVyZmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBFY21hSW50ZXJmYWNlLmNwcDsgcGF0aCA9ICJrZG9tL2VjbWEvRWNt
YUludGVyZmFjZS5jcHAiOyBzb3VyY2VUcmVlID0gREVSSVZFRF9GSUxFX0RJUjsgfTsKLQkJQThE
QzYzRUIwOEUwREQyQTAwNDUwN0Y3IC8qIEVjbWFJbnRlcmZhY2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRWNtYUludGVyZmFjZS5jcHA7IHBhdGggPSAia3N2ZzIv
ZWNtYS9FY21hSW50ZXJmYWNlLmNwcCI7IHNvdXJjZVRyZWUgPSBERVJJVkVEX0ZJTEVfRElSOyB9
OworCQlBOERDNjNFODA4RTBERDBBMDA0NTA3RjcgLyogRWNtYUludGVyZmFjZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBFY21hSW50ZXJmYWNlLmNwcDsgcGF0aCA9
IGtkb20vZWNtYS9FY21hSW50ZXJmYWNlLmNwcDsgc291cmNlVHJlZSA9IERFUklWRURfRklMRV9E
SVI7IH07CisJCUE4REM2M0VCMDhFMEREMkEwMDQ1MDdGNyAvKiBFY21hSW50ZXJmYWNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEVjbWFJbnRlcmZhY2UuY3BwOyBw
YXRoID0ga3N2ZzIvZWNtYS9FY21hSW50ZXJmYWNlLmNwcDsgc291cmNlVHJlZSA9IERFUklWRURf
RklMRV9ESVI7IH07CiAJCUE4RUE0MzNEMDhFMTRFQUIwMDRCQzM5NiAvKiB4bWxfa2RvbXRva2Vu
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB4bWxfa2RvbXRva2VuaXpl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEVBNDMzRTA4RTE0RUFDMDA0QkMz
OTYgLyogeG1sX2tkb210b2tlbml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0geG1sX2tkb210b2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBOEVBNDMzRjA4RTE0RUFDMDA0QkMzOTYgLyogcmVuZGVyX2tjYW52YXN3cmFwcGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHJlbmRlcl9rY2FudmFzd3JhcHBlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI3MCw4ICs2MjU4LDYgQEAKIAkJRjUy
M0QxNTAwMkRFNDI3MTAxODYzNUNBIC8qIG90aGVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk5Mzc3RkI1NTAzMkMyMzVDMDA4NjM1Q0UgLyogS1dRQXNz
ZXJ0aW9ucy5oICovLAotCQkJCTkzNzdGQjU2MDMyQzIzNUMwMDg2MzVDRSAvKiBLV1FBc3NlcnRp
b25zLm0gKi8sCiAJCQkJRjU4Nzg0Q0MwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUNoYXJzZXRzLmgg
Ki8sCiAJCQkJRjVCRkFBQzEwMzA5Q0RGNjAxODYzNUNFIC8qIGNoYXJhY3Rlci1zZXRzLnR4dCAq
LywKIAkJCQlGNTUwRDcwQjAyRTEzMjgxMDE4NjM1Q0EgLyogbWFjLWVuY29kaW5ncy50eHQgKi8s
CkBAIC02NDk0LDggKzY0ODAsNiBAQAogCQkJCUY1MjNEMjg0MDJERTQzRDcwMTg2MzVDQSAvKiBs
b2FkZXJfY2xpZW50LmggKi8sCiAJCQkJRjUyM0QyODUwMkRFNDNENzAxODYzNUNBIC8qIGxvYWRl
ci5jcHAgKi8sCiAJCQkJRjUyM0QyODYwMkRFNDNENzAxODYzNUNBIC8qIGxvYWRlci5oICovLAot
CQkJCTY1RkQ5RDJCMDgxRDcyN0YwMDYzNkY1NCAvKiBtYWluX3RocmVhZF9tYWxsb2MuY3BwICov
LAotCQkJCTY1RkQ5RDJDMDgxRDcyN0YwMDYzNkY1NCAvKiBtYWluX3RocmVhZF9tYWxsb2MuaCAq
LywKIAkJCQlGNTIzRDI4ODAyREU0M0Q3MDE4NjM1Q0EgLyogc2hhcmVkLmggKi8sCiAJCQkJQkM0
MzNBQ0YwNUQzMDQ2RjAwM0E1QTE0IC8qIHN0cmluZ2l0LmNwcCAqLywKIAkJCQlGNTIzRDI4OTAy
REU0M0Q3MDE4NjM1Q0EgLyogc3RyaW5naXQuaCAqLywKQEAgLTcwMzMsNyArNzAxNyw2IEBACiAJ
CQkJOTNGMTk5MjEwODI0NUU1OTAwMUU5QUJDIC8qIHhtbF90b2tlbml6ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzRjE5OTIyMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FBcHBsaWNhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5MjMwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUFycmF5SW1w
bC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTNGMTk5MjQwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUFz
c2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTI1MDgyNDVFNTkwMDFFOUFCQyAv
KiBLV1FBc3luY0lPLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTkyNjA4MjQ1RTU5MDAxRTlB
QkMgLyogS1dRQnJ1c2guaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTI3MDgyNDVFNTkwMDFF
OUFCQyAvKiBLV1FCdWZmZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzI0Myw3ICs3MjI2LDYgQEAK
IAkJCQk5M0YxOTlGOTA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9pbnRlcmNoYW5nZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTNGMTk5RkEwODI0NUU1OTAwMUU5QUJDIC8qIG1hcmt1cC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTNGMTk5RkIwODI0NUU1OTAwMUU5QUJDIC8qIGVkaXRfYWN0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJOTNGMTk5RkMwODI0NUU1OTAwMUU5QUJDIC8qIG1haW5fdGhy
ZWFkX21hbGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU0RDg3QjgwODMxOTczQjAwODJEQ0Ex
IC8qIGVkaXRfY29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVEQzE2QzUwODMxREQ2RjAw
MjI3NDRFIC8qIGNvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
QUM3OUEyMDgzMUVENkQwMDkzODVDRSAvKiBhcHBlbmRfbm9kZV9jb21tYW5kLmggaW4gSGVhZGVy
cyAqLywKQEAgLTczODEsNyArNzM2Myw2IEBACiAJCQkJQTgyMTJBRUMwODc5NEEyMzAwNjc3MzU5
IC8qIHhtbF90b2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MjEyQUVEMDg3OTRBMjMw
MDY3NzM1OSAvKiBLV1FBcHBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgyMTJBRUUw
ODc5NEEyMzAwNjc3MzU5IC8qIEtXUUFycmF5SW1wbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTgy
MTJBRUYwODc5NEEyMzAwNjc3MzU5IC8qIEtXUUFzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4MjEyQUYwMDg3OTRBMjMwMDY3NzM1OSAvKiBLV1FBc3luY0lPLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBODIxMkFGMTA4Nzk0QTIzMDA2NzczNTkgLyogS1dRQnJ1c2guaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4MjEyQUYyMDg3OTRBMjMwMDY3NzM1OSAvKiBLV1FCdWZmZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzU5MSw3ICs3NTcyLDYgQEAKIAkJCQlBODIxMkJCRjA4Nzk0QTIzMDA2Nzcz
NTkgLyogaHRtbF9pbnRlcmNoYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgyMTJCQzAwODc5
NEEyMzAwNjc3MzU5IC8qIG1hcmt1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgyMTJCQzEwODc5
NEEyMzAwNjc3MzU5IC8qIGVkaXRfYWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTgyMTJC
QzIwODc5NEEyMzAwNjc3MzU5IC8qIG1haW5fdGhyZWFkX21hbGxvYy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTgyMTJCQzMwODc5NEEyMzAwNjc3MzU5IC8qIGVkaXRfY29tbWFuZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTgyMTJCQzQwODc5NEEyMzAwNjc3MzU5IC8qIGNvbXBvc2l0ZV9lZGl0X2Nv
bW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MjEyQkM1MDg3OTRBMjMwMDY3NzM1OSAvKiBh
cHBlbmRfbm9kZV9jb21tYW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTk0ODMsNyArOTQ2Myw2IEBA
CiAJCQkJOTNGMTlBQzcwODI0NUU1OTAwMUU5QUJDIC8qIEtXUU5TVmlld0V4dHJhcy5tIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTNGMTlBQzgwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVIaXN0b3J5
Lm0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFDOTA4MjQ1RTU5MDAxRTlBQkMgLyogcmVuZGVy
X2xheWVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzRjE5QUNBMDgyNDVFNTkwMDFFOUFCQyAv
KiBLV1FBc3NlcnRpb25zLm0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFDQjA4MjQ1RTU5MDAx
RTlBQkMgLyogS1dRTG9nZ2luZy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBQ0MwODI0NUU1
OTAwMUU5QUJDIC8qIEtXUUZpbGVCdXR0b24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFD
RDA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRUmVzb3VyY2VMb2FkZXIubW0gaW4gU291cmNlcyAqLywK
QEAgLTk1NTAsNyArOTUyOSw2IEBACiAJCQkJOTNGMTlCMEUwODI0NUU1OTAwMUU5QUJDIC8qIGh0
bWxfaW50ZXJjaGFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlCMEYwODI0NUU1OTAw
MUU5QUJDIC8qIG1hcmt1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUIxMDA4MjQ1RTU5
MDAxRTlBQkMgLyogRE9NVXRpbGl0eS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTkzRjE5QjExMDgy
NDVFNTkwMDFFOUFCQyAvKiBtYWluX3RocmVhZF9tYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNjU0RDg3QjcwODMxOTczQjAwODJEQ0ExIC8qIGVkaXRfY29tbWFuZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk2NURDMTZDNDA4MzFERDZGMDAyMjc0NEUgLyogY29tcG9zaXRlX2VkaXRfY29t
bWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUFDNzlBMTA4MzFFRDZEMDA5Mzg1Q0UgLyog
YXBwZW5kX25vZGVfY29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk3NTcsNyArOTczNSw2
IEBACiAJCQkJQTgyMTJDOTgwODc5NEEyMzAwNjc3MzU5IC8qIEtXUU5TVmlld0V4dHJhcy5tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTgyMTJDOTkwODc5NEEyMzAwNjc3MzU5IC8qIFdlYkNvcmVIaXN0
b3J5Lm0gaW4gU291cmNlcyAqLywKIAkJCQlBODIxMkM5QTA4Nzk0QTIzMDA2NzczNTkgLyogcmVu
ZGVyX2xheWVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE4MjEyQzlCMDg3OTRBMjMwMDY3NzM1
OSAvKiBLV1FBc3NlcnRpb25zLm0gaW4gU291cmNlcyAqLywKIAkJCQlBODIxMkM5QzA4Nzk0QTIz
MDA2NzczNTkgLyogS1dRTG9nZ2luZy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgyMTJDOUQwODc5
NEEyMzAwNjc3MzU5IC8qIEtXUUZpbGVCdXR0b24ubW0gaW4gU291cmNlcyAqLywKIAkJCQlBODIx
MkM5RTA4Nzk0QTIzMDA2NzczNTkgLyogS1dRUmVzb3VyY2VMb2FkZXIubW0gaW4gU291cmNlcyAq
LywKQEAgLTk4MjQsNyArOTgwMSw2IEBACiAJCQkJQTgyMTJDREMwODc5NEEyMzAwNjc3MzU5IC8q
IGh0bWxfaW50ZXJjaGFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgyMTJDREQwODc5NEEy
MzAwNjc3MzU5IC8qIG1hcmt1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODIxMkNERTA4Nzk0
QTIzMDA2NzczNTkgLyogRE9NVXRpbGl0eS5tbSBpbiBTb3VyY2VzICovLAotCQkJCUE4MjEyQ0RG
MDg3OTRBMjMwMDY3NzM1OSAvKiBtYWluX3RocmVhZF9tYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTgyMTJDRTAwODc5NEEyMzAwNjc3MzU5IC8qIGVkaXRfY29tbWFuZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODIxMkNFMTA4Nzk0QTIzMDA2NzczNTkgLyogY29tcG9zaXRlX2VkaXRf
Y29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODIxMkNFMjA4Nzk0QTIzMDA2NzczNTkg
LyogYXBwZW5kX25vZGVfY29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUv
a2h0bWwva2h0bWxwYXJ0X3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9raHRtbHBhcnRfcC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU5CmRpZmYgLXAg
LXUgLXIxLjU5IFdlYkNvcmUva2h0bWwva2h0bWxwYXJ0X3AuaAotLS0gV2ViQ29yZS9raHRtbC9r
aHRtbHBhcnRfcC5oCTI0IFNlcCAyMDA1IDAxOjE4OjUyIC0wMDAwCTEuNTkKKysrIFdlYkNvcmUv
a2h0bWwva2h0bWxwYXJ0X3AuaAkyNyBTZXAgMjAwNSAwNzoxNzozMiAtMDAwMApAQCAtMjQ1LDcg
KzI0NSw3IEBAIHB1YmxpYzoKICAgbG9uZyBtX2NhY2hlSWQ7CiAjZW5kaWYKICAgUVN0cmluZyBz
Y2hlZHVsZWRTY3JpcHQ7Ci0gIGtodG1sOjpTaGFyZWRQdHI8RE9NOjpOb2RlSW1wbD4gc2NoZWR1
bGVkU2NyaXB0Tm9kZTsKKyAgU2hhcmVkUHRyPERPTTo6Tm9kZUltcGw+IHNjaGVkdWxlZFNjcmlw
dE5vZGU7CiAKICAgS0pTUHJveHkgKm1fanNjcmlwdDsKICAgS0xpYnJhcnkgKm1fa2pzX2xpYjsK
QEAgLTM2Myw3ICszNjMsNyBAQCBwdWJsaWM6CiAgIFN1Ym1pdEZvcm0gKm1fc3VibWl0Rm9ybTsK
IAogICBib29sIG1fYk1vdXNlUHJlc3NlZDsKLSAga2h0bWw6OlNoYXJlZFB0cjxET006Ok5vZGVJ
bXBsPiBtX21vdXNlUHJlc3NOb2RlOyAvL25vZGUgdW5kZXIgdGhlIG1vdXNlIHdoZW4gdGhlIG1v
dXNlIHdhcyBwcmVzc2VkIChzZXQgaW4gdGhlIG1vdXNlIGhhbmRsZXIpCisgIFNoYXJlZFB0cjxE
T006Ok5vZGVJbXBsPiBtX21vdXNlUHJlc3NOb2RlOyAvL25vZGUgdW5kZXIgdGhlIG1vdXNlIHdo
ZW4gdGhlIG1vdXNlIHdhcyBwcmVzc2VkIChzZXQgaW4gdGhlIG1vdXNlIGhhbmRsZXIpCiAKICAg
a2h0bWw6OkVUZXh0R3JhbnVsYXJpdHkgbV9zZWxlY3Rpb25HcmFudWxhcml0eTsKICAgYm9vbCBt
X2JlZ2FuU2VsZWN0aW5nVGV4dDsKSW5kZXg6IFdlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNl
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtcCAtdSAtcjEuMTYgV2ViQ29yZS9r
aHRtbC9jc3MvY3NzX2Jhc2UuaAotLS0gV2ViQ29yZS9raHRtbC9jc3MvY3NzX2Jhc2UuaAkxNiBT
ZXAgMjAwNSAyMjo0MjowMSAtMDAwMAkxLjE2CisrKyBXZWJDb3JlL2todG1sL2Nzcy9jc3NfYmFz
ZS5oCTI3IFNlcCAyMDA1IDA3OjE3OjMyIC0wMDAwCkBAIC00NiwxMyArNDYsMTEgQEAgbmFtZXNw
YWNlIERPTSB7CiAKICAgICBjbGFzcyBEb2N1bWVudEltcGw7CiAKLSAgICBzdHJ1Y3QgQ1NTTmFt
ZXNwYWNlIHsKKyAgICBzdHJ1Y3QgQ1NTTmFtZXNwYWNlIDogcHVibGljIEZhc3RBbGxvY2F0ZWQg
ewogICAgICAgICBBdG9taWNTdHJpbmcgbV9wcmVmaXg7CiAgICAgICAgIEF0b21pY1N0cmluZyBt
X3VyaTsKICAgICAgICAgQ1NTTmFtZXNwYWNlKiBtX3BhcmVudDsKIAotICAgICAgICBNQUlOX1RI
UkVBRF9BTExPQ0FURUQ7Ci0KICAgICAgICAgQ1NTTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgcCwgY29uc3QgQXRvbWljU3RyaW5nJiB1LCBDU1NOYW1lc3BhY2UqIHBhcmVudCkgCiAgICAg
ICAgICAgICA6bV9wcmVmaXgocCksIG1fdXJpKHUpLCBtX3BhcmVudChwYXJlbnQpIHt9CiAgICAg
ICAgIH5DU1NOYW1lc3BhY2UoKSB7IGRlbGV0ZSBtX3BhcmVudDsgfQpAQCAtNzAsNyArNjgsNyBA
QCBuYW1lc3BhY2UgRE9NIHsKICAgICB9OwogICAgIAogLy8gdGhpcyBjbGFzcyByZXByZXNlbnRz
IGEgc2VsZWN0b3IgZm9yIGEgU3R5bGVSdWxlCi0gICAgY2xhc3MgQ1NTU2VsZWN0b3IKKyAgICBj
bGFzcyBDU1NTZWxlY3RvciA6IHB1YmxpYyBGYXN0QWxsb2NhdGVkCiAgICAgewogICAgIHB1Ymxp
YzoKICAgICAgICAgQ1NTU2VsZWN0b3IoKQpAQCAtOTEsOCArODksNiBAQCBuYW1lc3BhY2UgRE9N
IHsKICAgICAgICAgICAgIGRlbGV0ZSBuZXh0U2VsZWN0b3I7CiAJfQogCi0gICAgICAgIE1BSU5f
VEhSRUFEX0FMTE9DQVRFRDsKLQogICAgICAgICB2b2lkIGFwcGVuZChDU1NTZWxlY3Rvciogbikg
ewogICAgICAgICAgICAgaWYgKCFuZXh0U2VsZWN0b3IpIG5leHRTZWxlY3RvciA9IG47IGVsc2Ug
bmV4dFNlbGVjdG9yLT5hcHBlbmQobik7CiAgICAgICAgIH0KQEAgLTE5OCw3ICsxOTQsNyBAQCBu
YW1lc3BhY2UgRE9NIHsKICAgICB9OwogCiAgICAgLy8gYSBzdHlsZSBjbGFzcyB3aGljaCBoYXMg
YSBwYXJlbnQgKGFsbW9zdCBhbGwgaGF2ZSkKLSAgICBjbGFzcyBTdHlsZUJhc2VJbXBsIDogcHVi
bGljIGtodG1sOjpUcmVlU2hhcmVkPFN0eWxlQmFzZUltcGw+CisgICAgY2xhc3MgU3R5bGVCYXNl
SW1wbCA6IHB1YmxpYyBraHRtbDo6VHJlZVNoYXJlZDxTdHlsZUJhc2VJbXBsPiwgcHVibGljIEZh
c3RBbGxvY2F0ZWQKICAgICB7CiAgICAgcHVibGljOgogCVN0eWxlQmFzZUltcGwoKSAgeyBtX3Bh
cmVudCA9IDA7IHN0cmljdFBhcnNpbmcgPSB0cnVlOyBtdWx0aUxlbmd0aCA9IGZhbHNlOyB9CkBA
IC0yMTAsOCArMjA2LDYgQEAgbmFtZXNwYWNlIERPTSB7CiAKIAl2aXJ0dWFsIH5TdHlsZUJhc2VJ
bXBsKCkge30KIAotICAgICAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KIAkvLyByZXR1cm5z
IHRoZSB1cmwgb2YgdGhlIHN0eWxlIHNoZWV0IHRoaXMgb2JqZWN0IGJlbG9uZ3MgdG8KIAlET01T
dHJpbmcgYmFzZVVSTCgpOwogCkluZGV4OiBXZWJDb3JlL2todG1sL2Nzcy9jc3NfY29tcHV0ZWRz
dHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3Nz
L2Nzc19jb21wdXRlZHN0eWxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNgpkaWZmIC1w
IC11IC1yMS4zNiBXZWJDb3JlL2todG1sL2Nzcy9jc3NfY29tcHV0ZWRzdHlsZS5jcHAKLS0tIFdl
YkNvcmUva2h0bWwvY3NzL2Nzc19jb21wdXRlZHN0eWxlLmNwcAkxNiBTZXAgMjAwNSAyMjo0Mjow
MSAtMDAwMAkxLjM2CisrKyBXZWJDb3JlL2todG1sL2Nzcy9jc3NfY29tcHV0ZWRzdHlsZS5jcHAJ
MjcgU2VwIDIwMDUgMDc6MTc6MzMgLTAwMDAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJy
ZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogCiAjaWYgQVBQTEVfQ0hBTkdFUwotI2ltcG9ydCAi
S1dRQXNzZXJ0aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9y
dCAiS1dRRm9udEZhbWlseS5oIgogI2ltcG9ydCAiS1dRTG9nZ2luZy5oIgogI2VuZGlmCkluZGV4
OiBXZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX3J1bGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTcKZGlmZiAtcCAtdSAtcjEuMTcgV2ViQ29yZS9raHRtbC9jc3MvY3NzX3J1bGVp
bXBsLmgKLS0tIFdlYkNvcmUva2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5oCTE2IFNlcCAyMDA1IDIy
OjQyOjAxIC0wMDAwCTEuMTcKKysrIFdlYkNvcmUva2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5oCTI3
IFNlcCAyMDA1IDA3OjE3OjMzIC0wMDAwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY3Nz
L2Nzc19iYXNlLmgiCiAjaW5jbHVkZSAibWlzYy9sb2FkZXJfY2xpZW50LmgiCiAjaW5jbHVkZSAi
bWlzYy9zaGFyZWQuaCIKLSNpbmNsdWRlICJtaXNjL21haW5fdGhyZWFkX21hbGxvYy5oIgorI2lu
Y2x1ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgi
CiAKIG5hbWVzcGFjZSBraHRtbCB7CkBAIC01MSw4ICs1MSw2IEBAIHB1YmxpYzoKICAgICBDU1NS
dWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJlbnQpCiAgICAgICAgIDogU3R5bGVCYXNlSW1wbChw
YXJlbnQpLCBtX3R5cGUoQ1NTUnVsZTo6VU5LTk9XTl9SVUxFKSB7fQogCi0gICAgTUFJTl9USFJF
QURfQUxMT0NBVEVEOwotCiAgICAgdmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIHRydWU7
IH0KICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAK
QEAgLTc0LDggKzcyLDYgQEAgcHVibGljOgogICAgIENTU0NoYXJzZXRSdWxlSW1wbChTdHlsZUJh
c2VJbXBsICpwYXJlbnQpCiAgICAgICAgIDogQ1NTUnVsZUltcGwocGFyZW50KSB7IG1fdHlwZSA9
IENTU1J1bGU6OkNIQVJTRVRfUlVMRTsgfQogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwot
CiAgICAgdmlydHVhbCBib29sIGlzQ2hhcnNldFJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCBET01TdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCkBAIC05Myw4ICs4OSw2IEBAIHB1
YmxpYzoKICAgICBDU1NGb250RmFjZVJ1bGVJbXBsKFN0eWxlQmFzZUltcGwgKnBhcmVudCk7CiAg
ICAgdmlydHVhbCB+Q1NTRm9udEZhY2VSdWxlSW1wbCgpOwogCi0gICAgTUFJTl9USFJFQURfQUxM
T0NBVEVEOwotICAgIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb250RmFj
ZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CkBAIC0xMTMsOCArMTA3LDYgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICBNZWRpYUxpc3RJbXBsICptZWRpYSApOwogICAgIHZpcnR1YWwg
fkNTU0ltcG9ydFJ1bGVJbXBsKCk7CiAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAg
ICBET006OkRPTVN0cmluZyBocmVmKCkgY29uc3QgeyByZXR1cm4gbV9zdHJIcmVmOyB9CiAgICAg
TWVkaWFMaXN0SW1wbCAqbWVkaWEoKSBjb25zdCB7IHJldHVybiBtX2xzdE1lZGlhOyB9CiAgICAg
Q1NTU3R5bGVTaGVldEltcGwgKnN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hl
ZXQ7IH0KQEAgLTE0NSw4ICsxMzcsNiBAQCBwdWJsaWM6CiAgICAgQ1NTUnVsZUxpc3RJbXBsKFN0
eWxlTGlzdEltcGwgKik7CiAgICAgfkNTU1J1bGVMaXN0SW1wbCgpOwogCi0gICAgTUFJTl9USFJF
QURfQUxMT0NBVEVEOwotCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9s
c3RDU1NSdWxlcy5jb3VudCgpOyB9CiAgICAgQ1NTUnVsZUltcGwgKml0ZW0gKCB1bnNpZ25lZCBp
bmRleCApIHsgcmV0dXJuIG1fbHN0Q1NTUnVsZXMuYXQoIGluZGV4ICk7IH0KIApAQCAtMTY3LDgg
KzE1Nyw2IEBAIHB1YmxpYzoKICAgICBDU1NNZWRpYVJ1bGVJbXBsKCBTdHlsZUJhc2VJbXBsICpw
YXJlbnQsIE1lZGlhTGlzdEltcGwgKm1lZGlhTGlzdCwgQ1NTUnVsZUxpc3RJbXBsICpydWxlTGlz
dCApOwogICAgIHZpcnR1YWwgfkNTU01lZGlhUnVsZUltcGwoKTsKIAotICAgIE1BSU5fVEhSRUFE
X0FMTE9DQVRFRDsKLQogICAgIE1lZGlhTGlzdEltcGwgKm1lZGlhKCkgY29uc3QgeyByZXR1cm4g
bV9sc3RNZWRpYTsgfQogICAgIENTU1J1bGVMaXN0SW1wbCAqY3NzUnVsZXMoKSB7IHJldHVybiBt
X2xzdENTU1J1bGVzOyB9CiAKQEAgLTE5Miw4ICsxODAsNiBAQCBwdWJsaWM6CiAgICAgQ1NTUGFn
ZVJ1bGVJbXBsKFN0eWxlQmFzZUltcGwgKnBhcmVudCk7CiAgICAgdmlydHVhbCB+Q1NTUGFnZVJ1
bGVJbXBsKCk7CiAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQog
CiAgICAgdmlydHVhbCBib29sIGlzUGFnZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CkBAIC0yMTMs
OCArMTk5LDYgQEAgcHVibGljOgogICAgIENTU1N0eWxlUnVsZUltcGwoU3R5bGVCYXNlSW1wbCAq
cGFyZW50KTsKICAgICB2aXJ0dWFsIH5DU1NTdHlsZVJ1bGVJbXBsKCk7CiAKLSAgICBNQUlOX1RI
UkVBRF9BTExPQ0FURUQ7Ci0KICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQogCiAgICAgdmlydHVhbCBib29sIGlzU3R5
bGVSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMjQxLDggKzIyNSw2IEBAIGNsYXNzIENTU1Vu
a25vd25SdWxlSW1wbCA6IHB1YmxpYyBDU1NSdWwKIHB1YmxpYzoKICAgICBDU1NVbmtub3duUnVs
ZUltcGwoU3R5bGVCYXNlSW1wbCAqcGFyZW50KSA6IENTU1J1bGVJbXBsKHBhcmVudCkge30KIAot
ICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogICAgIHZpcnR1YWwgYm9vbCBpc1Vua25vd25S
dWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQogfTsKIApJbmRleDogV2ViQ29yZS9raHRtbC9jc3MvY3Nz
X3ZhbHVlaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2Nzcy9jc3NfdmFsdWVpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDkKZGlmZiAtcCAt
dSAtcjEuNDkgV2ViQ29yZS9raHRtbC9jc3MvY3NzX3ZhbHVlaW1wbC5oCi0tLSBXZWJDb3JlL2to
dG1sL2Nzcy9jc3NfdmFsdWVpbXBsLmgJMTYgU2VwIDIwMDUgMjI6NDI6MDIgLTAwMDAJMS40OQor
KysgV2ViQ29yZS9raHRtbC9jc3MvY3NzX3ZhbHVlaW1wbC5oCTI3IFNlcCAyMDA1IDA3OjE3OjMz
IC0wMDAwCkBAIC0yMzgsMTAgKzIzOCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNR
dWlya1ZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQogfTsKIAotY2xhc3MgQ291bnRlckltcGwgOiBw
dWJsaWMga2h0bWw6OlNoYXJlZDxDb3VudGVySW1wbD4geworY2xhc3MgQ291bnRlckltcGwgOiBw
dWJsaWMga2h0bWw6OlNoYXJlZDxDb3VudGVySW1wbD4sIHB1YmxpYyBGYXN0QWxsb2NhdGVkIHsK
IHB1YmxpYzoKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICBET01TdHJpbmcgaWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogICAgIERPTVN0cmluZyBs
aXN0U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2xpc3RTdHlsZTsgfQogICAgIERPTVN0cmluZyBz
ZXBhcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3NlcGFyYXRvcjsgfQpAQCAtMjUxLDEzICsyNDks
MTEgQEAgcHVibGljOgogICAgIERPTVN0cmluZyBtX3NlcGFyYXRvcjsKIH07CiAKLWNsYXNzIFJl
Y3RJbXBsIDogcHVibGljIGtodG1sOjpTaGFyZWQ8UmVjdEltcGw+IHsKK2NsYXNzIFJlY3RJbXBs
IDogcHVibGljIGtodG1sOjpTaGFyZWQ8UmVjdEltcGw+LCBwdWJsaWMgRmFzdEFsbG9jYXRlZCB7
CiBwdWJsaWM6CiAgICAgUmVjdEltcGwoKTsKICAgICB2aXJ0dWFsIH5SZWN0SW1wbCgpOwogCi0g
ICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWVJbXBsICp0
b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcDsgfQogICAgIENTU1ByaW1pdGl2ZVZhbHVlSW1wbCAq
cmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWVJ
bXBsICpib3R0b20oKSBjb25zdCB7IHJldHVybiBtX2JvdHRvbTsgfQpAQCAtMjc4LDEzICsyNzQs
MTEgQEAgcHJvdGVjdGVkOgogLy8gYW5kIGJvcmRlci1zcGFjaW5nIChhbGwgb2Ygd2hpY2ggYXJl
IHNwYWNlLXNlcGFyYXRlZCBzZXRzIG9mIHR3byB2YWx1ZXMpLiAgQXQgdGhlIG1vbWVudCB3ZSBh
cmUgb25seSB1c2luZyBpdCBmb3IKIC8vIGJvcmRlci1yYWRpdXMsIGJ1dCAoRklYTUUpIGJvcmRl
ci1zcGFjaW5nIGFuZCBiYWNrZ3JvdW5kLXBvc2l0aW9uIGNvdWxkIGJlIGNvbnZlcnRlZCBvdmVy
IHRvIHVzZSBpdAogLy8gKGVsaW1pbmF0aW5nIHNvbWUgZXh0cmEgLWtodG1sLSBpbnRlcm5hbCBw
cm9wZXJ0aWVzKS4KLWNsYXNzIFBhaXJJbXBsIDogcHVibGljIGtodG1sOjpTaGFyZWQ8UGFpcklt
cGw+IHsKK2NsYXNzIFBhaXJJbXBsIDogcHVibGljIGtodG1sOjpTaGFyZWQ8UGFpckltcGw+LCBw
dWJsaWMgRmFzdEFsbG9jYXRlZCB7CiBwdWJsaWM6CiAgICAgUGFpckltcGwoKTsKICAgICB2aXJ0
dWFsIH5QYWlySW1wbCgpOwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgQ1NT
UHJpbWl0aXZlVmFsdWVJbXBsICpmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3Q7IH0KICAg
ICBDU1NQcmltaXRpdmVWYWx1ZUltcGwgKnNlY29uZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vjb25k
OyB9CiAKQEAgLTMzMCw4ICszMjQsNiBAQCBwdWJsaWM6CiAgICAgQ1NTSW1hZ2VWYWx1ZUltcGwo
Y29uc3QgRE9NU3RyaW5nICZ1cmwsIFN0eWxlQmFzZUltcGwgKnN0eWxlKTsKICAgICB2aXJ0dWFs
IH5DU1NJbWFnZVZhbHVlSW1wbCgpOwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAg
ICAga2h0bWw6OkNhY2hlZEltYWdlICppbWFnZShraHRtbDo6RG9jTG9hZGVyKiBsb2FkZXIpOwog
CiBwcm90ZWN0ZWQ6CkBAIC0zNDcsOCArMzM5LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBob3Jpem9udGFsUnVsZSwgaW50IHZlcnRpY2FsUnVsZSk7CiAgICAg
dmlydHVhbCB+Q1NTQm9yZGVySW1hZ2VWYWx1ZUltcGwoKTsKIAotICAgIE1BSU5fVEhSRUFEX0FM
TE9DQVRFRDsKLQogICAgIHZpcnR1YWwgRE9NU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIENTU1Zh
bHVlOjpDU1NfQ1VTVE9NOyB9CiAKQEAgLTQyMCw3ICs0MTAsNyBAQCBwdWJsaWM6CiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gYW5vdGhlciBoZWxwZXIgY2xhc3MKLWNsYXNzIENTU1By
b3BlcnR5CitjbGFzcyBDU1NQcm9wZXJ0eSA6IHB1YmxpYyBGYXN0QWxsb2NhdGVkCiB7CiBwdWJs
aWM6CiAgICAgQ1NTUHJvcGVydHkoKSA6IG1faWQoLTEpLCBtX2JJbXBvcnRhbnQoZmFsc2UpLCBt
X3ZhbHVlKDApCkBAIC00NTEsOCArNDQxLDYgQEAgcHVibGljOgogCWlmKG1fdmFsdWUpIG1fdmFs
dWUtPmRlcmVmKCk7CiAgICAgfQogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAg
dm9pZCBzZXRWYWx1ZShDU1NWYWx1ZUltcGwgKnZhbCkgewogCWlmICh2YWwpIHZhbC0+cmVmKCk7
CiAgICAgICAgIGlmIChtX3ZhbHVlKSBtX3ZhbHVlLT5kZXJlZigpOwpJbmRleDogV2ViQ29yZS9r
aHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMzYKZGlmZiAtcCAtdSAtcjEuMzYgV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxl
Y3Rvci5oCi0tLSBXZWJDb3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgJMjcgQXVnIDIw
MDUgMDA6MTQ6MTkgLTAwMDAJMS4zNgorKysgV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxl
Y3Rvci5oCTI3IFNlcCAyMDA1IDA3OjE3OjMzIC0wMDAwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5j
bHVkZSAicmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oIgogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5n
LmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19ydWxlaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvbWFpbl90
aHJlYWRfbWFsbG9jLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvRmFzdE1hbGxvYy5oPgogCiBjbGFz
cyBLSFRNTFNldHRpbmdzOwogY2xhc3MgS0hUTUxWaWV3OwpAQCAtNjIsNyArNjIsNyBAQCBuYW1l
c3BhY2Uga2h0bWwKICAgICAgKiBmb3Igc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBT
ZWxlY3Rvci4gQXQgdGhlIG1vbWVudCBvbmx5IENTU1N0eWxlU2VsZWN0b3IKICAgICAgKiBleGlz
dHMsIGJ1dCBzb21lb25lIG1heSB3aXNoIHRvIGltcGxlbWVudCBYU0wuLi4KICAgICAgKi8KLSAg
ICBjbGFzcyBTdHlsZVNlbGVjdG9yCisgICAgY2xhc3MgU3R5bGVTZWxlY3RvciA6IHB1YmxpYyBG
YXN0QWxsb2NhdGVkCiAgICAgewogICAgIHB1YmxpYzoKIAlTdHlsZVNlbGVjdG9yKCkge307CkBA
IC03Myw4ICs3Myw2IEBAIG5hbWVzcGFjZSBraHRtbAogLy8gCXZpcnR1YWwgflN0eWxlU2VsZWN0
b3IoKSB7fTsKIC8vIAl2aXJ0dWFsIFJlbmRlclN0eWxlICpzdHlsZUZvckVsZW1lbnQoRE9NOjpF
bGVtZW50SW1wbCAqZSkgPSAwOwogCi0gICAgICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQog
CWVudW0gU3RhdGUgewogCSAgICBOb25lID0gMHgwMCwKIAkgICAgSG92ZXIgPSAweDAxLApAQCAt
MjI2LDE0ICsyMjQsMTIgQEAgcHVibGljOgogCXZvaWQgYXBwbHlQcm9wZXJ0eShpbnQgaWQsIERP
TTo6Q1NTVmFsdWVJbXBsICp2YWx1ZSk7CiAgICAgfTsKIAotICAgIGNsYXNzIENTU1J1bGVEYXRh
IHsKKyAgICBjbGFzcyBDU1NSdWxlRGF0YSA6IHB1YmxpYyBGYXN0QWxsb2NhdGVkIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIENTU1J1bGVEYXRhKHVpbnQgcG9zLCBET006OkNTU1N0eWxlUnVsZUlt
cGwqIHIsIERPTTo6Q1NTU2VsZWN0b3IqIHNlbCwgQ1NTUnVsZURhdGEqIHByZXYgPSAwKQogICAg
ICAgICA6bV9wb3NpdGlvbihwb3MpLCBtX3J1bGUociksIG1fc2VsZWN0b3Ioc2VsKSwgbV9uZXh0
KDApIHsgaWYgKHByZXYpIHByZXYtPm1fbmV4dCA9IHRoaXM7IH0KICAgICAgICAgfkNTU1J1bGVE
YXRhKCkgeyBkZWxldGUgbV9uZXh0OyB9CiAKLSAgICAgICAgTUFJTl9USFJFQURfQUxMT0NBVEVE
OwotCiAgICAgICAgIHVpbnQgcG9zaXRpb24oKSB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAgICAg
ICAgIERPTTo6Q1NTU3R5bGVSdWxlSW1wbCogcnVsZSgpIHsgcmV0dXJuIG1fcnVsZTsgfQogICAg
ICAgICBET006OkNTU1NlbGVjdG9yKiBzZWxlY3RvcigpIHsgcmV0dXJuIG1fc2VsZWN0b3I7IH0K
QEAgLTI0NiwxNCArMjQyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUnVsZURhdGEqIG1fbmV4
dDsKICAgICB9OwogCi0gICAgY2xhc3MgQ1NTUnVsZURhdGFMaXN0IHsKKyAgICBjbGFzcyBDU1NS
dWxlRGF0YUxpc3QgOiBwdWJsaWMgRmFzdEFsbG9jYXRlZCB7CiAgICAgcHVibGljOgogICAgICAg
ICBDU1NSdWxlRGF0YUxpc3QodWludCBwb3MsIERPTTo6Q1NTU3R5bGVSdWxlSW1wbCogcnVsZSwg
RE9NOjpDU1NTZWxlY3Rvciogc2VsKQogICAgICAgICB7IG1fZmlyc3QgPSBtX2xhc3QgPSBuZXcg
Q1NTUnVsZURhdGEocG9zLCBydWxlLCBzZWwpOyB9CiAgICAgICAgIH5DU1NSdWxlRGF0YUxpc3Qo
KSB7IGRlbGV0ZSBtX2ZpcnN0OyB9CiAKLSAgICAgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwot
CiAgICAgICAgIENTU1J1bGVEYXRhKiBmaXJzdCgpIHsgcmV0dXJuIG1fZmlyc3Q7IH0KICAgICAg
ICAgQ1NTUnVsZURhdGEqIGxhc3QoKSB7IHJldHVybiBtX2xhc3Q7IH0KICAgICAgICAgCkBAIC0y
NjYsMTQgKzI2MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIENTU1J1bGVEYXRhKiBtX2xhc3Q7CiAg
ICAgfTsKICAgICAKLSAgICBjbGFzcyBDU1NSdWxlU2V0CisgICAgY2xhc3MgQ1NTUnVsZVNldCA6
IHB1YmxpYyBGYXN0QWxsb2NhdGVkCiAgICAgewogICAgIHB1YmxpYzoKICAgICAgICAgQ1NTUnVs
ZVNldCgpOwogICAgICAgICB+Q1NTUnVsZVNldCgpOwogCi0gICAgICAgIE1BSU5fVEhSRUFEX0FM
TE9DQVRFRDsKLQogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8RE9NOjpET01TdHJpbmdJbXBsICos
IENTU1J1bGVEYXRhTGlzdCAqLCBQb2ludGVySGFzaDxET006OkRPTVN0cmluZ0ltcGwgKj4gPiBB
dG9tUnVsZU1hcDsKIAogICAgICAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KERPTTo6Q1NTU3R5
bGVTaGVldEltcGwqIHNoZWV0LCBjb25zdCBET006OkRPTVN0cmluZyAmbWVkaXVtID0gInNjcmVl
biIpOwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2RvbXBhcnNlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEvZG9tcGFyc2VyLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIFdlYkNvcmUva2h0bWwvZWNtYS9kb21w
YXJzZXIuaAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2RvbXBhcnNlci5oCTggQXVnIDIwMDUgMDQ6
MDc6NDAgLTAwMDAJMS4yCisrKyBXZWJDb3JlL2todG1sL2VjbWEvZG9tcGFyc2VyLmgJMjcgU2Vw
IDIwMDUgMDc6MTc6MzMgLTAwMDAKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKICAgICB2aXJ0dWFs
IE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7
CiBwcml2YXRlOgotICAgIGtodG1sOjpTaGFyZWRQdHI8RE9NOjpEb2N1bWVudEltcGw+IGRvYzsK
KyAgICBTaGFyZWRQdHI8RE9NOjpEb2N1bWVudEltcGw+IGRvYzsKICAgfTsKIAogICBjbGFzcyBE
T01QYXJzZXIgOiBwdWJsaWMgRE9NT2JqZWN0IHsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9r
anNfY3NzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNt
YS9ranNfY3NzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkKZGlmZiAtcCAtdSAtcjEuMTkg
V2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuaAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc19j
c3MuaAk4IEF1ZyAyMDA1IDA0OjA3OjQwIC0wMDAwCTEuMTkKKysrIFdlYkNvcmUva2h0bWwvZWNt
YS9ranNfY3NzLmgJMjcgU2VwIDIwMDUgMDc6MTc6MzMgLTAwMDAKQEAgLTYzLDcgKzYzLDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgc3RhdGljIFZhbHVlSW1wICppbmRleEdldHRlcihFeGVjU3Rh
dGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRp
YyBWYWx1ZUltcCAqY3NzUHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgIGtodG1sOjpTaGFyZWRQdHI8RE9NOjpD
U1NTdHlsZURlY2xhcmF0aW9uSW1wbD4gbV9pbXBsOworICAgIFNoYXJlZFB0cjxET006OkNTU1N0
eWxlRGVjbGFyYXRpb25JbXBsPiBtX2ltcGw7CiAgIH07CiAKICAgVmFsdWVJbXAgKmdldERPTUNT
U1N0eWxlRGVjbGFyYXRpb24oRXhlY1N0YXRlICpleGVjLCBET006OkNTU1N0eWxlRGVjbGFyYXRp
b25JbXBsICpkKTsKQEAgLTg0LDcgKzg0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgLy8gQ29u
c3RydWN0b3IgZm9yIGRlcml2ZWQgY2xhc3NlczsgZG9lc24ndCBzZXQgdXAgYSBwcm90b3R5cGUu
CiAgICAgRE9NU3R5bGVTaGVldChET006OlN0eWxlU2hlZXRJbXBsICpzcykgOiBtX2ltcGwoc3Mp
IHsgfQogICBwcml2YXRlOgotICAgIGtodG1sOjpTaGFyZWRQdHI8RE9NOjpTdHlsZVNoZWV0SW1w
bD4gbV9pbXBsOworICAgIFNoYXJlZFB0cjxET006OlN0eWxlU2hlZXRJbXBsPiBtX2ltcGw7CiAg
IH07CiAKICAgVmFsdWVJbXAgKmdldERPTVN0eWxlU2hlZXQoRXhlY1N0YXRlICpleGVjLCBET006
OlN0eWxlU2hlZXRJbXBsICpzcyk7CkBAIC0xMDYsOCArMTA2LDggQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgc3RhdGljIFZhbHVlSW1wICppbmRleEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBWYWx1ZUltcCAqbmFt
ZUdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOwogCi0gICAga2h0bWw6OlNoYXJlZFB0cjxET006OlN0eWxlU2hlZXRMaXN0SW1wbD4gbV9p
bXBsOwotICAgIGtodG1sOjpTaGFyZWRQdHI8RE9NOjpEb2N1bWVudEltcGw+IG1fZG9jOworICAg
IFNoYXJlZFB0cjxET006OlN0eWxlU2hlZXRMaXN0SW1wbD4gbV9pbXBsOworICAgIFNoYXJlZFB0
cjxET006OkRvY3VtZW50SW1wbD4gbV9kb2M7CiAgIH07CiAKICAgLy8gVGhlIGRvY3VtZW50IGlz
IG9ubHkgdXNlZCBmb3IgZ2V0LXN0eWxlc2hlZXQtYnktbmFtZSAobWFrZSBvcHRpb25hbCBpZiBu
ZWNlc3NhcnkpCkBAIC0xMjgsNyArMTI4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgRE9NOjpN
ZWRpYUxpc3RJbXBsICppbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAgIHBy
aXZhdGU6CiAgICAgc3RhdGljIFZhbHVlSW1wICppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwotICAgIGtodG1s
OjpTaGFyZWRQdHI8RE9NOjpNZWRpYUxpc3RJbXBsPiBtX2ltcGw7CisgICAgU2hhcmVkUHRyPERP
TTo6TWVkaWFMaXN0SW1wbD4gbV9pbXBsOwogICB9OwogCiAgIFZhbHVlSW1wICpnZXRET01NZWRp
YUxpc3QoRXhlY1N0YXRlICpleGVjLCBET006Ok1lZGlhTGlzdEltcGwgKm1sKTsKQEAgLTE1OSw3
ICsxNTksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHJpdmF0ZToKICAgICBzdGF0aWMgVmFsdWVJ
bXAgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCk7CiAKLSAgICBraHRtbDo6U2hhcmVkUHRyPERPTTo6Q1NTUnVs
ZUxpc3RJbXBsPiBtX2ltcGw7CisgICAgU2hhcmVkUHRyPERPTTo6Q1NTUnVsZUxpc3RJbXBsPiBt
X2ltcGw7CiAgIH07CiAKICAgVmFsdWVJbXAgKmdldERPTUNTU1J1bGVMaXN0KEV4ZWNTdGF0ZSAq
ZXhlYywgRE9NOjpDU1NSdWxlTGlzdEltcGwgKnJsKTsKQEAgLTE4MSw3ICsxODEsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAgICAgICAgSW1wb3J0X0hyZWYsIEltcG9ydF9NZWRpYSwgSW1wb3J0
X1N0eWxlU2hlZXQsIENoYXJzZXRfRW5jb2RpbmcgfTsKICAgICBET006OkNTU1J1bGVJbXBsICpp
bXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAgIHByaXZhdGU6Ci0gICAga2h0
bWw6OlNoYXJlZFB0cjxET006OkNTU1J1bGVJbXBsPiBtX2ltcGw7CisgICAgU2hhcmVkUHRyPERP
TTo6Q1NTUnVsZUltcGw+IG1faW1wbDsKICAgfTsKIAogICBWYWx1ZUltcCAqZ2V0RE9NQ1NTUnVs
ZShFeGVjU3RhdGUgKmV4ZWMsIERPTTo6Q1NTUnVsZUltcGwgKnIpOwpAQCAtMjE1LDcgKzIxNSw3
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIC8vIENvbnN0cnVjdG9yIGZvciBkZXJpdmVkIGNsYXNz
ZXM7IGRvZXNuJ3Qgc2V0IHVwIGEgcHJvdG90eXBlLgogICAgIERPTUNTU1ZhbHVlKERPTTo6Q1NT
VmFsdWVJbXBsICp2KSA6IG1faW1wbCh2KSB7IH0KICAgcHJpdmF0ZToKLSAgICBraHRtbDo6U2hh
cmVkUHRyPERPTTo6Q1NTVmFsdWVJbXBsPiBtX2ltcGw7CisgICAgU2hhcmVkUHRyPERPTTo6Q1NT
VmFsdWVJbXBsPiBtX2ltcGw7CiAgIH07CiAKICAgVmFsdWVJbXAgKmdldERPTUNTU1ZhbHVlKEV4
ZWNTdGF0ZSAqZXhlYywgRE9NOjpDU1NWYWx1ZUltcGwgKnYpOwpAQCAtMjk5LDcgKzI5OSw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBl
bnVtIHsgVG9wLCBSaWdodCwgQm90dG9tLCBMZWZ0IH07CiAgIHByaXZhdGU6Ci0gICAga2h0bWw6
OlNoYXJlZFB0cjxET006OlJlY3RJbXBsPiBtX3JlY3Q7CisgICAgU2hhcmVkUHRyPERPTTo6UmVj
dEltcGw+IG1fcmVjdDsKICAgfTsKIAogICBWYWx1ZUltcCAqZ2V0RE9NUmVjdChFeGVjU3RhdGUg
KmV4ZWMsIERPTTo6UmVjdEltcGwgKnIpOwpAQCAtMzE1LDcgKzMxNSw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBlbnVtIHsgaWRlbnRp
ZmllciwgbGlzdFN0eWxlLCBzZXBhcmF0b3IgfTsKICAgcHJvdGVjdGVkOgotICAgIGtodG1sOjpT
aGFyZWRQdHI8RE9NOjpDb3VudGVySW1wbD4gbV9jb3VudGVyOworICAgIFNoYXJlZFB0cjxET006
OkNvdW50ZXJJbXBsPiBtX2NvdW50ZXI7CiAgIH07CiAKICAgVmFsdWVJbXAgKmdldERPTUNvdW50
ZXIoRXhlY1N0YXRlICpleGVjLCBET006OkNvdW50ZXJJbXBsICpjKTsKSW5kZXg6IFdlYkNvcmUv
a2h0bWwvZWNtYS9ranNfZG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lY21hL2tqc19kb20uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjk3CmRp
ZmYgLXAgLXUgLXIxLjk3IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcAotLS0gV2ViQ29y
ZS9raHRtbC9lY21hL2tqc19kb20uY3BwCTIyIFNlcCAyMDA1IDE5OjE5OjU2IC0wMDAwCTEuOTcK
KysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcAkyNyBTZXAgMjAwNSAwNzoxNzozNCAt
MDAwMApAQCAtODAsNyArODAsNiBAQCB1c2luZyBET006OlByb2Nlc3NpbmdJbnN0cnVjdGlvbklt
cGw7CiB1c2luZyBET006OlRleHRJbXBsOwogCiB1c2luZyBraHRtbDo6UmVuZGVyT2JqZWN0Owot
dXNpbmcga2h0bWw6OlNoYXJlZFB0cjsKIAogI2luY2x1ZGUgImtqc19kb20ubHV0LmgiCiAKSW5k
ZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNDkKZGlmZiAtcCAtdSAtcjEuNDkgV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uaAotLS0g
V2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uaAkzMSBBdWcgMjAwNSAwNDozODozNiAtMDAwMAkx
LjQ5CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5oCTI3IFNlcCAyMDA1IDA3OjE3OjM1
IC0wMDAwCkBAIC04Miw3ICs4Miw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwcm90ZWN0ZWQ6CiAg
ICAgLy8gQ29uc3RydWN0b3IgZm9yIGluaGVyaXRlZCBjbGFzc2VzOyBkb2Vzbid0IHNldCB1cCBh
IHByb3RvdHlwZS4KICAgICBET01Ob2RlKERPTTo6Tm9kZUltcGwgKm4pOwotICAgIGtodG1sOjpT
aGFyZWRQdHI8RE9NOjpOb2RlSW1wbD4gbV9pbXBsOworICAgIFNoYXJlZFB0cjxET006Ok5vZGVJ
bXBsPiBtX2ltcGw7CiAgIH07CiAKICAgRE9NOjpOb2RlSW1wbCAqdG9Ob2RlKFZhbHVlSW1wICop
OyAvLyByZXR1cm5zIDAgaWYgcGFzc2VkLWluIHZhbHVlIGlzIG5vdCBhIERPTU5vZGUgb2JqZWN0
CkBAIC0xMDgsNyArMTA4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgc3RhdGljIFZhbHVlSW1w
ICppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpOwogICAgIHN0YXRpYyBWYWx1ZUltcCAqbmFtZUdldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
OwogCi0gICAga2h0bWw6OlNoYXJlZFB0cjxET006Ok5vZGVMaXN0SW1wbD4gbV9pbXBsOworICAg
IFNoYXJlZFB0cjxET006Ok5vZGVMaXN0SW1wbD4gbV9pbXBsOwogICB9OwogCiAgIGNsYXNzIERP
TURvY3VtZW50IDogcHVibGljIERPTU5vZGUgewpAQCAtMTg3LDcgKzE4Nyw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIGVudW0geyBIYXNGZWF0dXJlLCBDcmVhdGVEb2N1bWVudFR5cGUsIENyZWF0
ZURvY3VtZW50LCBDcmVhdGVDU1NTdHlsZVNoZWV0LCBDcmVhdGVIVE1MRG9jdW1lbnQgfTsKICAg
ICBET006OkRPTUltcGxlbWVudGF0aW9uSW1wbCAqaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1w
bC5nZXQoKTsgfQogICBwcml2YXRlOgotICAgIGtodG1sOjpTaGFyZWRQdHI8RE9NOjpET01JbXBs
ZW1lbnRhdGlvbkltcGw+IG1faW1wbDsKKyAgICBTaGFyZWRQdHI8RE9NOjpET01JbXBsZW1lbnRh
dGlvbkltcGw+IG1faW1wbDsKICAgfTsKIAogICBjbGFzcyBET01Eb2N1bWVudFR5cGUgOiBwdWJs
aWMgRE9NTm9kZSB7CkBAIC0yMTksNyArMjE5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgc3Rh
dGljIFZhbHVlSW1wICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKICAgICBzdGF0aWMgVmFsdWVJbXAgKmlu
ZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCk7CiAKLSAgICBraHRtbDo6U2hhcmVkUHRyPERPTTo6TmFtZWROb2RlTWFw
SW1wbD4gbV9pbXBsOworICAgIFNoYXJlZFB0cjxET006Ok5hbWVkTm9kZU1hcEltcGw+IG1faW1w
bDsKICAgfTsKIAogICBjbGFzcyBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gOiBwdWJsaWMgRE9N
Tm9kZSB7CkBAIC0yOTEsMTMgKzI5MSwxMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgLy8gd2hlbiBt
dWx0aXBsZSBub2RlcyBoYXZlIHRoZSBzYW1lIG5hbWUuCiAgIGNsYXNzIERPTU5hbWVkTm9kZXND
b2xsZWN0aW9uIDogcHVibGljIERPTU9iamVjdCB7CiAgIHB1YmxpYzoKLSAgICBET01OYW1lZE5v
ZGVzQ29sbGVjdGlvbihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFFWYWx1ZUxpc3Q8IGtodG1sOjpT
aGFyZWRQdHI8RE9NOjpOb2RlSW1wbD4gPiYgbm9kZXMgKTsKKyAgICBET01OYW1lZE5vZGVzQ29s
bGVjdGlvbihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFFWYWx1ZUxpc3Q8IFNoYXJlZFB0cjxET006
Ok5vZGVJbXBsPiA+JiBub2RlcyApOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgcHJp
dmF0ZToKICAgICBzdGF0aWMgVmFsdWVJbXAgKmxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogICAgIHN0YXRp
YyBWYWx1ZUltcCAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKIAotICAgIFFWYWx1ZUxpc3Q8IGtodG1sOjpT
aGFyZWRQdHI8RE9NOjpOb2RlSW1wbD4gPiBtX25vZGVzOworICAgIFFWYWx1ZUxpc3Q8IFNoYXJl
ZFB0cjxET006Ok5vZGVJbXBsPiA+IG1fbm9kZXM7CiAgIH07CiAKICAgY2xhc3MgRE9NQ2hhcmFj
dGVyRGF0YSA6IHB1YmxpYyBET01Ob2RlIHsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNf
ZXZlbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNt
YS9ranNfZXZlbnRzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzMKZGlmZiAtcCAtdSAtcjEu
MzMgV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuaAotLS0gV2ViQ29yZS9raHRtbC9lY21h
L2tqc19ldmVudHMuaAkxOSBTZXAgMjAwNSAxODo1MjoxMCAtMDAwMAkxLjMzCisrKyBXZWJDb3Jl
L2todG1sL2VjbWEva2pzX2V2ZW50cy5oCTI3IFNlcCAyMDA1IDA3OjE3OjM1IC0wMDAwCkBAIC0x
MjcsNyArMTI3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAJICAgU3JjRWxlbWVudCwgUmV0dXJuVmFs
dWUsIENhbmNlbEJ1YmJsZSwgQ2xpcGJvYXJkRGF0YSwgRGF0YVRyYW5zZmVyIH07CiAgICAgRE9N
OjpFdmVudEltcGwgKmltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KICAgcHJv
dGVjdGVkOgotICAgIGtodG1sOjpTaGFyZWRQdHI8RE9NOjpFdmVudEltcGw+IG1faW1wbDsKKyAg
ICBTaGFyZWRQdHI8RE9NOjpFdmVudEltcGw+IG1faW1wbDsKICAgICBtdXRhYmxlIENsaXBib2Fy
ZCAqY2xpcGJvYXJkOwogICB9OwogCkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pz
X2h0bWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzOQpkaWZmIC1wIC11IC1yMS4xMzkg
V2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tq
c19odG1sLmNwcAkxNiBTZXAgMjAwNSAyMjo0MjowNSAtMDAwMAkxLjEzOQorKysgV2ViQ29yZS9r
aHRtbC9lY21hL2tqc19odG1sLmNwcAkyNyBTZXAgMjAwNSAwNzoxNzozNyAtMDAwMApAQCAtMTM0
LDcgKzEzNCw2IEBAIHVzaW5nIERPTTo6Tm9kZUxpc3RJbXBsOwogdXNpbmcgRE9NOjpUZXh0SW1w
bDsKIAogdXNpbmcga2h0bWw6OlJlbmRlckNhbnZhc0ltYWdlOwotdXNpbmcga2h0bWw6OlNoYXJl
ZFB0cjsKIAogI2luY2x1ZGUgImtqc19odG1sLmx1dC5oIgogCkluZGV4OiBXZWJDb3JlL2todG1s
L2VjbWEva2pzX2h0bWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9lY21hL2tqc19odG1sLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTUKZGlmZiAtcCAt
dSAtcjEuNTUgV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmgKLS0tIFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfaHRtbC5oCTggQXVnIDIwMDUgMDQ6MDc6NDEgLTAwMDAJMS41NQorKysgV2ViQ29y
ZS9raHRtbC9lY21hL2tqc19odG1sLmgJMjcgU2VwIDIwMDUgMDc6MTc6MzggLTAwMDAKQEAgLTMx
NCw3ICszMTQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IGluZm87CiAgICAgRE9NOjpIVE1MQ29sbGVjdGlvbkltcGwgKmltcGwoKSBjb25zdCB7IHJldHVy
biBtX2ltcGwuZ2V0KCk7IH0KICAgcHJvdGVjdGVkOgotICAgIGtodG1sOjpTaGFyZWRQdHI8RE9N
OjpIVE1MQ29sbGVjdGlvbkltcGw+IG1faW1wbDsKKyAgICBTaGFyZWRQdHI8RE9NOjpIVE1MQ29s
bGVjdGlvbkltcGw+IG1faW1wbDsKICAgcHJpdmF0ZToKICAgICBzdGF0aWMgVmFsdWVJbXAgKmxl
bmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpOwogICAgIHN0YXRpYyBWYWx1ZUltcCAqaW5kZXhHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsK
QEAgLTMyOSw3ICszMjksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHJpdmF0ZToKICAgICBzdGF0
aWMgVmFsdWVJbXAgKnNlbGVjdGVkSW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKIAotICAgIGtodG1sOjpTaGFy
ZWRQdHI8RE9NOjpIVE1MU2VsZWN0RWxlbWVudEltcGw+IG1fZWxlbWVudDsKKyAgICBTaGFyZWRQ
dHI8RE9NOjpIVE1MU2VsZWN0RWxlbWVudEltcGw+IG1fZWxlbWVudDsKICAgfTsKIAogICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vIE9wdGlvbiBPYmplY3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CkBAIC0zNDAsNyArMzQwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBib29sIGlt
cGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIE9iamVjdEltcCAqY29uc3Ry
dWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7CiAgIHByaXZhdGU6Ci0gICAg
a2h0bWw6OlNoYXJlZFB0cjxET006OkRvY3VtZW50SW1wbD4gbV9kb2M7CisgICAgU2hhcmVkUHRy
PERPTTo6RG9jdW1lbnRJbXBsPiBtX2RvYzsKICAgfTsKIAogICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vIEltYWdlIE9iamVjdCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTM1MSw3ICszNTEs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVj
dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgT2JqZWN0SW1wICpjb25zdHJ1Y3QoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKICAgcHJpdmF0ZToKLSAgICBraHRtbDo6U2hhcmVkUHRy
PERPTTo6RG9jdW1lbnRJbXBsPiBtX2RvYzsKKyAgICBTaGFyZWRQdHI8RE9NOjpEb2N1bWVudElt
cGw+IG1fZG9jOwogICB9OwogCiAgIGNsYXNzIEltYWdlIDogcHVibGljIERPTU9iamVjdCwgcHVi
bGljIGtodG1sOjpDYWNoZWRPYmplY3RDbGllbnQgewpAQCAtNDQwLDcgKzQ0MCw3IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgdm9pZCBzZXRTaGFkb3coRXhlY1N0YXRlICpleGVjKTsKIAotICAgIGto
dG1sOjpTaGFyZWRQdHI8RE9NOjpIVE1MRWxlbWVudEltcGw+IF9lbGVtZW50OworICAgIFNoYXJl
ZFB0cjxET006OkhUTUxFbGVtZW50SW1wbD4gX2VsZW1lbnQ7CiAgICAgYm9vbCBfbmVlZHNGbHVz
aFJhc3RlckNhY2hlOwogICAgIAogICAgIFFQdHJMaXN0PExpc3Q+IHN0YXRlU3RhY2s7CkluZGV4
OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX3JhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfcmFuZ2UuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS45CmRpZmYgLXAgLXUgLXIxLjkgV2ViQ29yZS9raHRtbC9lY21hL2tqc19yYW5nZS5oCi0t
LSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3JhbmdlLmgJOCBBdWcgMjAwNSAwNDowNzo0MSAtMDAw
MAkxLjkKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcmFuZ2UuaAkyNyBTZXAgMjAwNSAwNzox
NzozOCAtMDAwMApAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAg
RGV0YWNoLCBDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgfTsKICAgICBET006OlJhbmdlSW1wbCAq
aW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQogICBwcml2YXRlOgotICAgIGto
dG1sOjpTaGFyZWRQdHI8RE9NOjpSYW5nZUltcGw+IG1faW1wbDsKKyAgICBTaGFyZWRQdHI8RE9N
OjpSYW5nZUltcGw+IG1faW1wbDsKIH07CiAKICAgLy8gQ29uc3RydWN0b3Igb2JqZWN0IFJhbmdl
CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXAgLXUgLXIxLjExIFdlYkNvcmUva2h0bWwvZWNt
YS9ranNfdHJhdmVyc2FsLmgKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmgJ
MTkgU2VwIDIwMDUgMTg6NTI6MTEgLTAwMDAJMS4xMQorKysgV2ViQ29yZS9raHRtbC9lY21hL2tq
c190cmF2ZXJzYWwuaAkyNyBTZXAgMjAwNSAwNzoxNzozOCAtMDAwMApAQCAtNDYsNyArNDYsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgTmV4dE5vZGUsIFByZXZpb3VzTm9kZSwgRGV0
YWNoIH07CiAgICAgRE9NOjpOb2RlSXRlcmF0b3JJbXBsICppbXBsKCkgY29uc3QgeyByZXR1cm4g
bV9pbXBsLmdldCgpOyB9CiAgIHByaXZhdGU6Ci0gICAga2h0bWw6OlNoYXJlZFB0cjxET006Ok5v
ZGVJdGVyYXRvckltcGw+IG1faW1wbDsKKyAgICBTaGFyZWRQdHI8RE9NOjpOb2RlSXRlcmF0b3JJ
bXBsPiBtX2ltcGw7CiAgIH07CiAKICAgLy8gQ29uc3RydWN0b3Igb2JqZWN0IE5vZGVGaWx0ZXIK
QEAgLTcwLDcgKzcwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgRE9NOjpOb2RlRmlsdGVySW1w
bCAqaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQogICAgIGVudW0geyBBY2Nl
cHROb2RlIH07CiAgIHByaXZhdGU6Ci0gICAga2h0bWw6OlNoYXJlZFB0cjxET006Ok5vZGVGaWx0
ZXJJbXBsPiBtX2ltcGw7CisgICAgU2hhcmVkUHRyPERPTTo6Tm9kZUZpbHRlckltcGw+IG1faW1w
bDsKICAgfTsKIAogICBjbGFzcyBET01UcmVlV2Fsa2VyIDogcHVibGljIERPTU9iamVjdCB7CkBA
IC04Nyw3ICs4Nyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgICBQcmV2aW91c05vZGUs
IE5leHROb2RlIH07CiAgICAgRE9NOjpUcmVlV2Fsa2VySW1wbCAqaW1wbCgpIGNvbnN0IHsgcmV0
dXJuIG1faW1wbC5nZXQoKTsgfQogICBwcml2YXRlOgotICAgIGtodG1sOjpTaGFyZWRQdHI8RE9N
OjpUcmVlV2Fsa2VySW1wbD4gbV9pbXBsOworICAgIFNoYXJlZFB0cjxET006OlRyZWVXYWxrZXJJ
bXBsPiBtX2ltcGw7CiAgIH07CiAKICAgVmFsdWVJbXAgKmdldERPTU5vZGVJdGVyYXRvcihFeGVj
U3RhdGUgKmV4ZWMsIERPTTo6Tm9kZUl0ZXJhdG9ySW1wbCAqbmkpOwpJbmRleDogV2ViQ29yZS9r
aHRtbC9lY21hL2tqc192aWV3cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWNtYS9ranNfdmlld3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEy
CmRpZmYgLXAgLXUgLXIxLjEyIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdmlld3MuY3BwCi0tLSBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmNwcAkyOSBBdWcgMjAwNSAyMToyOToxMyAtMDAw
MAkxLjEyCisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmNwcAkyNyBTZXAgMjAwNSAw
NzoxNzozOCAtMDAwMApAQCAtMzIsNyArMzIsNiBAQCB1c2luZyBET006OkRvY3VtZW50SW1wbDsK
IHVzaW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5vZGVJbXBsOwogCi11c2luZyBr
aHRtbDo6U2hhcmVkUHRyOwogCiAjaW5jbHVkZSAia2pzX3ZpZXdzLmx1dC5oIgogCkluZGV4OiBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfdmlld3MuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS44CmRpZmYgLXAgLXUgLXIxLjggV2ViQ29yZS9raHRtbC9lY21hL2tqc192aWV3cy5oCi0tLSBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmgJOCBBdWcgMjAwNSAwNDowNzo0MSAtMDAwMAkx
LjgKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdmlld3MuaAkyNyBTZXAgMjAwNSAwNzoxNzoz
OCAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBET006OkFic3Ry
YWN0Vmlld0ltcGwgKmltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KICAgICBl
bnVtIHsgRG9jdW1lbnQsIEdldENvbXB1dGVkU3R5bGUgfTsKICAgcHJpdmF0ZToKLSAgICBraHRt
bDo6U2hhcmVkUHRyPERPTTo6QWJzdHJhY3RWaWV3SW1wbD4gbV9pbXBsOworICAgIFNoYXJlZFB0
cjxET006OkFic3RyYWN0Vmlld0ltcGw+IG1faW1wbDsKICAgfTsKIAogICBWYWx1ZUltcCAqZ2V0
RE9NQWJzdHJhY3RWaWV3KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpBYnN0cmFjdFZpZXdJbXBsICph
dik7CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xODAKZGlmZiAtcCAtdSAtcjEuMTgwIFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfd2luZG93LmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3Bw
CTI0IFNlcCAyMDA1IDAxOjE4OjUzIC0wMDAwCTEuMTgwCisrKyBXZWJDb3JlL2todG1sL2VjbWEv
a2pzX3dpbmRvdy5jcHAJMjcgU2VwIDIwMDUgMDc6MTc6MzkgLTAwMDAKQEAgLTkwLDcgKzkwLDYg
QEAgdXNpbmcgRE9NOjpIVE1MRWxlbWVudEltcGw7CiB1c2luZyBET006Ok5vZGVJbXBsOwogdXNp
bmcgRE9NOjpQb3NpdGlvbjsKIAotdXNpbmcga2h0bWw6OlNoYXJlZFB0cjsKIHVzaW5nIGtodG1s
OjpUeXBpbmdDb21tYW5kOwogCiB1c2luZyBLUGFydHM6OlJlYWRPbmx5UGFydDsKSW5kZXg6IFdl
YkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVlc3QuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xOQpkaWZmIC1wIC11IC1yMS4xOSBXZWJDb3JlL2todG1sL2VjbWEveG1saHR0
cHJlcXVlc3QuaAotLS0gV2ViQ29yZS9raHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmgJMjMgQXVn
IDIwMDUgMTY6NDU6MTIgLTAwMDAJMS4xOQorKysgV2ViQ29yZS9raHRtbC9lY21hL3htbGh0dHBy
ZXF1ZXN0LmgJMjcgU2VwIDIwMDUgMDc6MTc6MzkgLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25z
dDsKICAgICB2aXJ0dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgTGlzdCAmYXJncyk7CiAgIHByaXZhdGU6Ci0gICAga2h0bWw6OlNoYXJlZFB0cjxET006OkRv
Y3VtZW50SW1wbD4gZG9jOworICAgIFNoYXJlZFB0cjxET006OkRvY3VtZW50SW1wbD4gZG9jOwog
ICB9OwogCiAgIGNsYXNzIFhNTEh0dHBSZXF1ZXN0IDogcHVibGljIERPTU9iamVjdCB7CkBAIC0x
MjUsOCArMTI1LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgS0lPOjpUcmFuc2ZlckpvYiAqIGpv
YjsKIAogICAgIFhNTEh0dHBSZXF1ZXN0U3RhdGUgc3RhdGU7Ci0gICAga2h0bWw6OlNoYXJlZFB0
cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXI7
Ci0gICAga2h0bWw6OlNoYXJlZFB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gb25Mb2Fk
TGlzdGVuZXI7CisgICAgU2hhcmVkUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyPiBvblJl
YWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcjsKKyAgICBTaGFyZWRQdHI8SlNVbnByb3RlY3RlZEV2ZW50
TGlzdGVuZXI+IG9uTG9hZExpc3RlbmVyOwogCiAgICAga2h0bWw6OkRlY29kZXIgKmRlY29kZXI7
CiAgICAgUVN0cmluZyBlbmNvZGluZzsKQEAgLTEzNiw3ICsxMzYsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICBRU3RyaW5nIHJlc3BvbnNlOwogICAgIG11dGFibGUgYm9vbCBjcmVhdGVkRG9jdW1l
bnQ7CiAgICAgbXV0YWJsZSBib29sIHR5cGVJc1hNTDsKLSAgICBtdXRhYmxlIGtodG1sOjpTaGFy
ZWRQdHI8RE9NOjpEb2N1bWVudEltcGw+IHJlc3BvbnNlWE1MOworICAgIG11dGFibGUgU2hhcmVk
UHRyPERPTTo6RG9jdW1lbnRJbXBsPiByZXNwb25zZVhNTDsKIAogICAgIGJvb2wgYWJvcnRlZDsK
ICAgfTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL1Nl
bGVjdGlvbkNvbnRyb2xsZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjk1CmRpZmYgLXAg
LXUgLXIxLjk1IFdlYkNvcmUva2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAot
LS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCTI0IFNlcCAy
MDA1IDA2OjI5OjA3IC0wMDAwCTEuOTUKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9TZWxlY3Rp
b25Db250cm9sbGVyLmNwcAkyNyBTZXAgMjAwNSAwNzoxNzo0MCAtMDAwMApAQCAtNDUsNyArNDUs
NyBAQAogI2luY2x1ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgogCiAjaWYgQVBQTEVfQ0hBTkdF
UwotI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRp
b25zLmg+CiAjZWxzZQogI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9u
KQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvYXBwZW5kX25vZGVfY29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGlu
Zy9hcHBlbmRfbm9kZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGVuZF9ub2RlX2NvbW1hbmQuY3Bw
Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvYXBwZW5kX25vZGVfY29tbWFuZC5jcHAJMTIgTWF5
IDIwMDUgMDQ6MDA6MTkgLTAwMDAJMS4xCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvYXBwZW5k
X25vZGVfY29tbWFuZC5jcHAJMjcgU2VwIDIwMDUgMDc6MTc6NDAgLTAwMDAKQEAgLTI4LDcgKzI4
LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VT
Ci0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlv
bnMuaD4KICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24p
CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5n
L2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0CmRpZmYg
LXAgLXUgLXIxLjE0IFdlYkNvcmUva2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNw
cAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCTI0IFNl
cCAyMDA1IDAxOjE4OjU0IC0wMDAwCTEuMTQKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9hcHBs
eV9zdHlsZV9jb21tYW5kLmNwcAkyNyBTZXAgMjAwNSAwNzoxNzo0MCAtMDAwMApAQCAtNDEsNyAr
NDEsNyBAQAogI2luY2x1ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgogCiAjaWYgQVBQTEVfQ0hB
TkdFUwotI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3Nl
cnRpb25zLmg+CiAjZWxzZQogI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0
aW9uKQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90
ZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNwpkaWZmIC1wIC11IC1yMS43IFdlYkNvcmUva2h0bWwvZWRpdGluZy9icmVha19ibG9j
a3F1b3RlX2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvYnJlYWtfYmxvY2tx
dW90ZV9jb21tYW5kLmNwcAkyNCBTZXAgMjAwNSAwMToxODo1NSAtMDAwMAkxLjcKKysrIFdlYkNv
cmUva2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1
IDA3OjE3OjQwIC0wMDAwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0
aW1wbC5oIgogCiAjaWYgQVBQTEVfQ0hBTkdFUwotI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIK
KyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjZWxzZQogI2RlZmluZSBBU1NFUlQo
YXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2todG1s
L2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC1wIC11IC1yMS4xMiBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAkyNCBTZXAgMjAwNSAwMToxODo1NSAt
MDAwMAkxLjEyCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFu
ZC5jcHAJMjcgU2VwIDIwMDUgMDc6MTc6NDEgLTAwMDAKQEAgLTUyLDcgKzUyLDcgQEAKICNpbmNs
dWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAi
S1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNlbHNl
CiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCiAjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9k
ZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MgpkaWZmIC1wIC11IC1yMS4yIFdlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVfZnJvbV90ZXh0
X25vZGVfY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVfZnJvbV90
ZXh0X25vZGVfY29tbWFuZC5jcHAJMTYgU2VwIDIwMDUgMjI6NDI6MDYgLTAwMDAJMS4yCisrKyBX
ZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuY3BwCTI3
IFNlcCAyMDA1IDA3OjE3OjQxIC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAieG1s
L2RvbV90ZXh0aW1wbC5oIgogCiAjaWYgQVBQTEVfQ0hBTkdFUwotI2luY2x1ZGUgIktXUUFzc2Vy
dGlvbnMuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjZWxzZQogI2RlZmlu
ZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQogI2VuZGlmCkluZGV4OiBXZWJD
b3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rp
b25fY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcKZGlmZiAtcCAtdSAtcjEu
MTcgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAKLS0t
IFdlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTI0IFNl
cCAyMDA1IDAxOjE4OjU1IC0wMDAwCTEuMTcKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxl
dGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1IDA3OjE3OjQxIC0wMDAwCkBAIC0z
OSw3ICszOSw3IEBACiAKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRp
b25zLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIktXUUxv
Z2dpbmcuaCIKICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRp
b24pCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvZWRpdF9jb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2VkaXRfY29tbWFu
ZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1wIC11IC1yMS43IFdlYkNvcmUv
a2h0bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcv
ZWRpdF9jb21tYW5kLmNwcAkyNCBTZXAgMjAwNSAwMToxODo1NSAtMDAwMAkxLjcKKysrIFdlYkNv
cmUva2h0bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1IDA3OjE3OjQxIC0w
MDAwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiY3NzL2Nzc19jb21wdXRlZHN0eWxlLmgi
CiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1
ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRp
b24pIGFzc2VydChhc3NlcnRpb24pCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGlu
Zy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjU3
CmRpZmYgLXAgLXUgLXIxLjI1NyBXZWJDb3JlL2todG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3Bw
Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCTI1IEF1ZyAyMDA1IDIz
OjEzOjQ0IC0wMDAwCTEuMjU3CisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwCTI3IFNlcCAyMDA1IDA3OjE3OjQxIC0wMDAwCkBAIC04NCw3ICs4NCw3IEBAIHVzaW5nIERP
TTo6VGV4dEltcGw7CiB1c2luZyBET006OlRyZWVXYWxrZXJJbXBsOwogCiAjaWYgQVBQTEVfQ0hB
TkdFUwotI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSAiS1dRTG9nZ2luZy5oIgogI2luY2x1ZGUgIktXUUtIVE1MUGFy
dC5oIgogI2Vsc2UKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfaW50b190ZXh0
X25vZGVfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZWRpdGluZy9pbnNlcnRfaW50b190ZXh0X25vZGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIFdlYkNvcmUva2h0bWwvZWRpdGluZy9p
bnNlcnRfaW50b190ZXh0X25vZGVfY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGlu
Zy9pbnNlcnRfaW50b190ZXh0X25vZGVfY29tbWFuZC5jcHAJMTYgU2VwIDIwMDUgMjI6NDI6MDYg
LTAwMDAJMS4yCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X2ludG9fdGV4dF9ub2Rl
X2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1IDA3OjE3OjQxIC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBA
CiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgogCiAjaWYgQVBQTEVfQ0hBTkdFUwotI2lu
Y2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+
CiAjZWxzZQogI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQogI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGlu
Zy9pbnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42
CmRpZmYgLXAgLXUgLXIxLjYgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFr
X2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtf
Y29tbWFuZC5jcHAJMjQgU2VwIDIwMDUgMDE6MTg6NTYgLTAwMDAJMS42CisrKyBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAJMjcgU2VwIDIwMDUgMDc6
MTc6NDEgLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAK
ICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUg
PGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlICJLV1FMb2dnaW5nLmgiCiAjZWxzZQog
I2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQpJbmRleDogV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL2luc2VydF9ub2RlX2JlZm9yZV9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9ub2RlX2Jl
Zm9yZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9ub2RlX2JlZm9yZV9jb21tYW5kLmNwcAot
LS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9ub2RlX2JlZm9yZV9jb21tYW5kLmNwcAkx
MyBNYXkgMjAwNSAwODozNzoxNSAtMDAwMAkxLjEKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9p
bnNlcnRfbm9kZV9iZWZvcmVfY29tbWFuZC5jcHAJMjcgU2VwIDIwMDUgMDc6MTc6NDEgLTAwMDAK
QEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCiAKICNpZiBB
UFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxj
b3JlL0Fzc2VydGlvbnMuaD4KICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2Vy
dChhc3NlcnRpb24pCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRf
cGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2Nv
bW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtcCAtdSAtcjEuNyBXZWJD
b3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAK
LS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21t
YW5kLmNwcAkyNCBTZXAgMjAwNSAwMToxODo1NiAtMDAwMAkxLjcKKysrIFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAkyNyBTZXAgMjAw
NSAwNzoxNzo0MiAtMDAwMApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgInhtbC9kb21fdGV4
dGltcGwuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgi
CisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIktXUUxvZ2dpbmcu
aCIKICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCklu
ZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X3RleHRfY29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfdGV4
dF9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXAgLXUgLXIxLjgg
V2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF90ZXh0X2NvbW1hbmQuY3BwCi0tLSBXZWJDb3Jl
L2todG1sL2VkaXRpbmcvaW5zZXJ0X3RleHRfY29tbWFuZC5jcHAJMjQgU2VwIDIwMDUgMDE6MTg6
NTYgLTAwMDAJMS44CisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X3RleHRfY29tbWFu
ZC5jcHAJMjcgU2VwIDIwMDUgMDc6MTc6NDIgLTAwMDAKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNs
dWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAi
S1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbmNs
dWRlICJLV1FMb2dnaW5nLmgiCiAjZWxzZQogI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3Nl
cnQoYXNzZXJ0aW9uKQpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2pvaW5fdGV4dF9ub2Rl
c19jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lZGl0aW5nL2pvaW5fdGV4dF9ub2Rlc19jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2pvaW5fdGV4dF9u
b2Rlc19jb21tYW5kLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2pvaW5fdGV4dF9ub2Rl
c19jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjEKKysrIFdlYkNvcmUv
a2h0bWwvZWRpdGluZy9qb2luX3RleHRfbm9kZXNfY29tbWFuZC5jcHAJMjcgU2VwIDIwMDUgMDc6
MTc6NDIgLTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBs
LmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2lu
Y2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3Nl
cnRpb24pIGFzc2VydChhc3NlcnRpb24pCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRp
dGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2VkaXRpbmcvbWFya3VwLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNApkaWZmIC1w
IC11IC1yMS4zNCBXZWJDb3JlL2todG1sL2VkaXRpbmcvbWFya3VwLmNwcAotLS0gV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL21hcmt1cC5jcHAJMTYgU2VwIDIwMDUgMjI6NDI6MDcgLTAwMDAJMS4zNAor
KysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL21hcmt1cC5jcHAJMjcgU2VwIDIwMDUgMDc6MTc6NDIg
LTAwMDAKQEAgLTU3LDcgKzU3LDcgQEAgdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006
OlRleHRJbXBsOwogCiAjaWYgQVBQTEVfQ0hBTkdFUwotI2luY2x1ZGUgIktXUUFzc2VydGlvbnMu
aCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSAiS1dRTG9nZ2lu
Zy5oIgogI2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgKCh2b2lkKTApCkluZGV4OiBX
ZWJDb3JlL2todG1sL2VkaXRpbmcvbWVyZ2VfaWRlbnRpY2FsX2VsZW1lbnRzX2NvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvbWVy
Z2VfaWRlbnRpY2FsX2VsZW1lbnRzX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBXZWJDb3JlL2todG1sL2VkaXRpbmcvbWVyZ2VfaWRlbnRpY2Fs
X2VsZW1lbnRzX2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvbWVyZ2VfaWRl
bnRpY2FsX2VsZW1lbnRzX2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEu
MQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL21lcmdlX2lkZW50aWNhbF9lbGVtZW50c19jb21t
YW5kLmNwcAkyNyBTZXAgMjAwNSAwNzoxNzo0MiAtMDAwMApAQCAtMjksNyArMjksNyBAQAogI2lu
Y2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNs
dWRlICJLV1FBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgog
I2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL21vdmVfc2VsZWN0aW9uX2NvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvbW92
ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC1w
IC11IC1yMS4zIFdlYkNvcmUva2h0bWwvZWRpdGluZy9tb3ZlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL21vdmVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTI0
IFNlcCAyMDA1IDAxOjE4OjU3IC0wMDAwCTEuMworKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL21v
dmVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1IDA3OjE3OjQyIC0wMDAwCkBAIC0y
OSw3ICsyOSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAKICNpZiBBUFBMRV9D
SEFOR0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fz
c2VydGlvbnMuaD4KICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3Nl
cnRpb24pCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZWJhbGFuY2Vfd2hp
dGVzcGFjZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL3JlYmFsYW5jZV93aGl0ZXNwYWNlX2NvbW1hbmQuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBXZWJDb3JlL2todG1sL2VkaXRpbmcv
cmViYWxhbmNlX3doaXRlc3BhY2VfY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGlu
Zy9yZWJhbGFuY2Vfd2hpdGVzcGFjZV9jb21tYW5kLmNwcAkxNiBTZXAgMjAwNSAyMjo0MjowNyAt
MDAwMAkxLjIKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFjZV9j
b21tYW5kLmNwcAkyNyBTZXAgMjAwNSAwNzoxNzo0MiAtMDAwMApAQCAtMzEsNyArMzEsNyBAQAog
I2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNs
dWRlICJLV1FBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgog
I2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92ZV9jc3NfcHJvcGVydHlfY29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGlu
Zy9yZW1vdmVfY3NzX3Byb3BlcnR5X2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBXZWJDb3JlL2todG1sL2VkaXRpbmcvcmVtb3ZlX2Nzc19wcm9w
ZXJ0eV9jb21tYW5kLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92ZV9jc3NfcHJv
cGVydHlfY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBXZWJD
b3JlL2todG1sL2VkaXRpbmcvcmVtb3ZlX2Nzc19wcm9wZXJ0eV9jb21tYW5kLmNwcAkyNyBTZXAg
MjAwNSAwNzoxNzo0MiAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImNzcy9jc3Nf
dmFsdWVpbXBsLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9u
cy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNlbHNlCiAjZGVmaW5lIEFT
U0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
a2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9h
dHRyaWJ1dGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC1wIC11
IC1yMS4zIFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29tbWFu
ZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29t
bWFuZC5jcHAJMjkgQXVnIDIwMDUgMjE6Mjk6MTUgLTAwMDAJMS4zCisrKyBXZWJDb3JlL2todG1s
L2VkaXRpbmcvcmVtb3ZlX25vZGVfYXR0cmlidXRlX2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1IDA3
OjE3OjQyIC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50
aW1wbC5oIgogCiAjaWYgQVBQTEVfQ0hBTkdFUwotI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIK
KyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjZWxzZQogI2RlZmluZSBBU1NFUlQo
YXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2todG1s
L2VkaXRpbmcvcmVtb3ZlX25vZGVfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9jb21tYW5kLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEgV2ViQ29yZS9raHRtbC9lZGl0
aW5nL3JlbW92ZV9ub2RlX2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvcmVt
b3ZlX25vZGVfY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBX
ZWJDb3JlL2todG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfY29tbWFuZC5jcHAJMjcgU2VwIDIwMDUg
MDc6MTc6NDIgLTAwMDAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVp
bXBsLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgor
I2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNlbHNlCiAjZGVmaW5lIEFTU0VSVChh
c3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9yZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2NvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmVtb3ZlX25v
ZGVfcHJlc2VydmluZ19jaGlsZHJlbl9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92ZV9ub2RlX3By
ZXNlcnZpbmdfY2hpbGRyZW5fY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9y
ZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3
OjIxOjQ3IC0wMDAwCTEuMQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92ZV9ub2RlX3By
ZXNlcnZpbmdfY2hpbGRyZW5fY29tbWFuZC5jcHAJMjcgU2VwIDIwMDUgMDc6MTc6NDIgLTAwMDAK
QEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCiAKICNpZiBB
UFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxj
b3JlL0Fzc2VydGlvbnMuaD4KICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2Vy
dChhc3NlcnRpb24pCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZXBsYWNl
X3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIxLjE1IFdlYkNvcmUva2h0bWwvZWRpdGlu
Zy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5n
L3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTI0IFNlcCAyMDA1IDAxOjE4OjU3IC0wMDAw
CTEuMTUKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5k
LmNwcAkyNyBTZXAgMjAwNSAwNzoxNzo0MyAtMDAwMApAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1
ZGUgImNzcy9jc3Nwcm9wZXJ0aWVzLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAi
S1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNlbHNl
CiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCiAjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9zZXRfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9zZXRf
bm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZm
IC1wIC11IC1yMS4zIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zZXRfbm9kZV9hdHRyaWJ1dGVfY29t
bWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zZXRfbm9kZV9hdHRyaWJ1dGVfY29t
bWFuZC5jcHAJMjkgQXVnIDIwMDUgMjE6Mjk6MTUgLTAwMDAJMS4zCisrKyBXZWJDb3JlL2todG1s
L2VkaXRpbmcvc2V0X25vZGVfYXR0cmlidXRlX2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1IDA3OjE3
OjQzIC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1w
bC5oIgogCiAjaWYgQVBQTEVfQ0hBTkdFUwotI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNp
bmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjZWxzZQogI2RlZmluZSBBU1NFUlQoYXNz
ZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2todG1sL2Vk
aXRpbmcvc3BsaXRfZWxlbWVudF9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X2VsZW1lbnRfY29tbWFuZC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIFdlYkNvcmUva2h0bWwvZWRp
dGluZy9zcGxpdF9lbGVtZW50X2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcv
c3BsaXRfZWxlbWVudF9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjEK
KysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zcGxpdF9lbGVtZW50X2NvbW1hbmQuY3BwCTI3IFNl
cCAyMDA1IDA3OjE3OjQzIC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAieG1sL2Rv
bV9lbGVtZW50aW1wbC5oIgogCiAjaWYgQVBQTEVfQ0hBTkdFUwotI2luY2x1ZGUgIktXUUFzc2Vy
dGlvbnMuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjZWxzZQogI2RlZmlu
ZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQogI2VuZGlmCkluZGV4OiBXZWJD
b3JlL2todG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2Rl
X2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtcCAtdSAtcjEuMyBX
ZWJDb3JlL2todG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbW1hbmQuY3BwCi0tLSBXZWJD
b3JlL2todG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbW1hbmQuY3BwCTE2IFNlcCAyMDA1
IDIyOjQyOjA3IC0wMDAwCTEuMworKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X3RleHRf
bm9kZV9jb21tYW5kLmNwcAkyNyBTZXAgMjAwNSAwNzoxNzo0MyAtMDAwMApAQCAtMjksNyArMjks
NyBAQAogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMK
LSNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9u
cy5oPgogI2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikK
ICNlbmRpZgpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X3RleHRfbm9kZV9jb250
YWluaW5nX2VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIFdlYkNvcmUva2h0bWwvZWRp
dGluZy9zcGxpdF90ZXh0X25vZGVfY29udGFpbmluZ19lbGVtZW50LmNwcAotLS0gV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL3NwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2VsZW1lbnQuY3BwCTE2IFNl
cCAyMDA1IDIyOjQyOjA3IC0wMDAwCTEuMgorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NwbGl0
X3RleHRfbm9kZV9jb250YWluaW5nX2VsZW1lbnQuY3BwCTI3IFNlcCAyMDA1IDA3OjE3OjQzIC0w
MDAwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3Qu
aCIKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgiCisjaW5j
bHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFzc2Vy
dGlvbikgYXNzZXJ0KGFzc2VydGlvbikKICNlbmRpZgpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0
aW5nL3R5cGluZ19jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yCmRpZmYgLXAgLXUgLXIxLjIgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3R5cGluZ19jb21t
YW5kLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcAkyNCBT
ZXAgMjAwNSAwMToxODo1OCAtMDAwMAkxLjIKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy90eXBp
bmdfY29tbWFuZC5jcHAJMjcgU2VwIDIwMDUgMDc6MTc6NDMgLTAwMDAKQEAgLTM2LDcgKzM2LDcg
QEAKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5j
bHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4K
ICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCiAjZW5k
aWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVf
cG9zaXRpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU4CmRpZmYgLXAgLXUgLXIxLjU4
IFdlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAotLS0gV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwCTE2IFNlcCAyMDA1IDIyOjQyOjA3IC0w
MDAwCTEuNTgKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAky
NyBTZXAgMjAwNSAwNzoxNzo0MyAtMDAwMApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgInht
bC9kb21fdGV4dGltcGwuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3Nl
cnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIktX
UUxvZ2dpbmcuaCIKICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3Nl
cnRpb24pCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJs
ZV9wb3NpdGlvbi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXAgLXUgLXIxLjMx
IFdlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmgKLS0tIFdlYkNvcmUva2h0
bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmgJMTYgU2VwIDIwMDUgMjI6NDI6MDcgLTAwMDAJ
MS4zMQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uaAkyNyBTZXAg
MjAwNSAwNzoxNzo0MyAtMDAwMApAQCAtMTI4LDcgKzEyOCw3IEBAIGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgVmlzaWJsZVBvc2kKICAgICByZXR1cm4gIShhID09IGIpOwogfQogCi1raHRt
bDo6U2hhcmVkUHRyPERPTTo6UmFuZ2VJbXBsPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0
aW9uICZzdGFydCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZlbmQpOworU2hhcmVkUHRyPERPTTo6
UmFuZ2VJbXBsPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZzdGFydCwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZlbmQpOwogYm9vbCBzZXRTdGFydChET006OlJhbmdlSW1wbCAqLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24gJnN0YXJ0KTsKIGJvb2wgc2V0RW5kKERPTTo6UmFuZ2VJbXBs
ICosIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmc3RhcnQpOwogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
VmlzaWJsZVBvc2l0aW9uKGNvbnN0IERPTTo6UmFuZ2VJbXBsICosIEVBZmZpbml0eSk7CkluZGV4
OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvd3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRp
bmcvd3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBXZWJDb3JlL2todG1sL2VkaXRpbmcvd3JhcF9j
b250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRp
bmcvd3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3
OjIxOjQ3IC0wMDAwCTEuMQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3dyYXBfY29udGVudHNf
aW5fZHVtbXlfc3Bhbl9jb21tYW5kLmNwcAkyNyBTZXAgMjAwNSAwNzoxNzo0NCAtMDAwMApAQCAt
MjksNyArMjksNyBAQAogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIKIAogI2lmIEFQ
UExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNv
cmUvQXNzZXJ0aW9ucy5oPgogI2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0
KGFzc2VydGlvbikKICNlbmRpZgpJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2Vp
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2ltYWdlaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI1CmRpZmYgLXAgLXUgLXIx
LjI1IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oCi0tLSBXZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9pbWFnZWltcGwuaAkxNiBTZXAgMjAwNSAyMjo0MjoxMSAtMDAwMAkxLjI1Cisr
KyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAkyNyBTZXAgMjAwNSAwNzoxNzo0
NCAtMDAwMApAQCAtMjI4LDcgKzIyOCw3IEBAIHB1YmxpYzoKICAgICBib29sIG1hcE1vdXNlRXZl
bnQoaW50IHhfLCBpbnQgeV8sIGludCB3aWR0aF8sIGludCBoZWlnaHRfLAogICAgICAgICAgICAg
ICAgICAgICAgICBraHRtbDo6UmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYgaW5mbyk7CiAKLSAgICBr
aHRtbDo6U2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gYXJlYXMoKTsKKyAgICBTaGFyZWRQ
dHI8SFRNTENvbGxlY3Rpb25JbXBsPiBhcmVhcygpOwogCiAgICAgRE9NU3RyaW5nIG5hbWUoKSBj
b25zdDsKICAgICB2b2lkIHNldE5hbWUoIGNvbnN0IERPTVN0cmluZyAmICk7CkluZGV4OiBXZWJD
b3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjcKZGlmZiAtcCAtdSAtcjEuMjcgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfdGFi
bGVpbXBsLmgKLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCTE2IFNlcCAy
MDA1IDIyOjQyOjEyIC0wMDAwCTEuMjcKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxl
aW1wbC5oCTI3IFNlcCAyMDA1IDA3OjE3OjQ0IC0wMDAwCkBAIC04Niw4ICs4Niw4IEBAIHB1Ymxp
YzoKICAgICBIVE1MRWxlbWVudEltcGwgKmluc2VydFJvdyAoIGludCBpbmRleCwgaW50ICZleGNl
cHRpb25jb2RlICk7CiAgICAgdm9pZCBkZWxldGVSb3cgKCBpbnQgaW5kZXgsIGludCAmZXhjZXB0
aW9uY29kZSApOwogCi0gICAga2h0bWw6OlNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IHJv
d3MoKTsKLSAgICBraHRtbDo6U2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gdEJvZGllcygp
OworICAgIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IHJvd3MoKTsKKyAgICBTaGFyZWRQ
dHI8SFRNTENvbGxlY3Rpb25JbXBsPiB0Qm9kaWVzKCk7CiAKICAgICBET01TdHJpbmcgYWxpZ24o
KSBjb25zdDsKICAgICB2b2lkIHNldEFsaWduKCBjb25zdCBET01TdHJpbmcgJiApOwpAQCAtMTg4
LDcgKzE4OCw3IEBAIHB1YmxpYzoKICAgICBET01TdHJpbmcgdkFsaWduKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRWQWxpZ24oIGNvbnN0IERPTVN0cmluZyAmICk7CiAKLSAgICBraHRtbDo6U2hhcmVk
UHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gcm93cygpOworICAgIFNoYXJlZFB0cjxIVE1MQ29sbGVj
dGlvbkltcGw+IHJvd3MoKTsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIxNSw3ICsy
MTUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFNlY3Rpb25Sb3dJbmRleCggaW50ICApOwog
Ci0gICAga2h0bWw6OlNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IGNlbGxzKCk7CisgICAg
U2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gY2VsbHMoKTsKICAgICB2b2lkIHNldENlbGxz
KEhUTUxDb2xsZWN0aW9uSW1wbCAqLCBpbnQgJmV4Y2VwdGlvbik7CiAKICAgICBET01TdHJpbmcg
YWxpZ24oKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJz
ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExMgpkaWZmIC1wIC11IC1yMS4xMTIgV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCi0tLSBXZWJDb3JlL2todG1sL2h0bWwvaHRt
bHBhcnNlci5jcHAJMTYgU2VwIDIwMDUgMjI6NDI6MTIgLTAwMDAJMS4xMTIKKysrIFdlYkNvcmUv
a2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAkyNyBTZXAgMjAwNSAwNzoxNzo0NCAtMDAwMApAQCAt
NDcsNyArNDcsNyBAQAogI2luY2x1ZGUgImh0bWxmYWN0b3J5LmgiCiAjaW5jbHVkZSAieG1sL2Rv
bV90ZXh0aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIKLSNpbmNsdWRlICJt
aXNjL21haW5fdGhyZWFkX21hbGxvYy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2Mu
aD4KICNpbmNsdWRlICJtaXNjL2hhc2hzZXQuaCIKICNpbmNsdWRlICJodG1sL2h0bWx0b2tlbml6
ZXIuaCIKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKQEAgLTcxLDcgKzcxLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIGtodG1sOwogLyoqCiAgKiBAaW50ZXJuYWwKICAqLwotY2xhc3MgSFRNTFN0YWNrRWxl
bQorY2xhc3MgSFRNTFN0YWNrRWxlbSA6IHB1YmxpYyBGYXN0QWxsb2NhdGVkCiB7CiBwdWJsaWM6
CiAgICAgSFRNTFN0YWNrRWxlbShjb25zdCBBdG9taWNTdHJpbmcmIF90YWdOYW1lLApAQCAtODcs
OCArODcsNiBAQCBwdWJsaWM6CiAgICAgICAgIG5leHQoX25leHQpCiAgICAgICAgIHsgfQogCi0g
ICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgQXRvbWljU3RyaW5nIHRhZ05hbWU7CiAg
ICAgaW50IGxldmVsOwogICAgIGJvb2wgc3RyYXlUYWJsZUNvbnRlbnQ7CkluZGV4OiBXZWJDb3Jl
L2todG1sL21pc2MvYXJlbmEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL21pc2MvYXJlbmEuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAt
cCAtdSAtcjEuNSBXZWJDb3JlL2todG1sL21pc2MvYXJlbmEuY3BwCi0tLSBXZWJDb3JlL2todG1s
L21pc2MvYXJlbmEuY3BwCTEgQXVnIDIwMDUgMDQ6MzE6NTcgLTAwMDAJMS41CisrKyBXZWJDb3Jl
L2todG1sL21pc2MvYXJlbmEuY3BwCTI3IFNlcCAyMDA1IDA3OjE3OjQ1IC0wMDAwCkBAIC00Nywx
MSArNDcsOSBAQAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNp
bmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJtYWluX3RocmVhZF9tYWxsb2MuaCIKKyNpbmNs
dWRlIDxreG1sY29yZS9GYXN0TWFsbG9jLmg+CiAKIHVzaW5nIHN0ZDo6bWF4OwotdXNpbmcga2h0
bWw6Om1haW5fdGhyZWFkX21hbGxvYzsKLXVzaW5nIGtodG1sOjptYWluX3RocmVhZF9mcmVlOwog
CiAvLyNkZWZpbmUgREVCVUdfQVJFTkFfTUFMTE9DCiAjaWZkZWYgREVCVUdfQVJFTkFfTUFMTE9D
CkBAIC0xNzYsNyArMTc0LDcgQEAgdm9pZCogQXJlbmFBbGxvY2F0ZShBcmVuYVBvb2wgKnBvb2ws
IHVucwogICAgICAgICBpKys7CiAgICAgICAgIHByaW50ZigiTWFsbG9jOiAlZFxuIiwgaSk7CiAj
ZW5kaWYKLSAgICAgICAgYSA9IChBcmVuYSopbWFpbl90aHJlYWRfbWFsbG9jKHN6KTsKKyAgICAg
ICAgYSA9IChBcmVuYSopZmFzdE1hbGxvYyhzeik7CiAgICAgICAgIGlmIChhKSAgewogICAgICAg
ICAgICAgYS0+bGltaXQgPSAodXdvcmQpYSArIHN6OwogICAgICAgICAgICAgYS0+YmFzZSA9IGEt
PmF2YWlsID0gKHV3b3JkKUFSRU5BX0FMSUdOKHBvb2wsIGEgKyAxKTsKQEAgLTI0Miw3ICsyNDAs
NyBAQCBzdGF0aWMgdm9pZCBGcmVlQXJlbmFMaXN0KEFyZW5hUG9vbCAqcG9vCiAgICAgICAgICAg
ICAgICAgcHJpbnRmKCJGcmVlOiAlZFxuIiwgaSk7CiAgICAgICAgICAgICB9CiAjZW5kaWYKLSAg
ICAgICAgICAgIG1haW5fdGhyZWFkX2ZyZWUoYSk7IGEgPSAwOworICAgICAgICAgICAgZmFzdEZy
ZWUoYSk7IGEgPSAwOwogICAgICAgICB9IHdoaWxlICgoYSA9ICphcCkgIT0gMCk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgLyogSW5zZXJ0IHRoZSB3aG9sZSBhcmVuYSBjaGFpbiBhdCB0aGUgZnJv
bnQgb2YgdGhlIGZyZWVsaXN0LiAqLwpAQCAtMjg2LDcgKzI4NCw3IEBAIHZvaWQgQXJlbmFGaW5p
c2godm9pZCkKIAogICAgIGZvciAoYSA9IGFyZW5hX2ZyZWVsaXN0OyBhOyBhID0gbmV4dCkgewog
ICAgICAgICBuZXh0ID0gYS0+bmV4dDsKLSAgICAgICAgbWFpbl90aHJlYWRfZnJlZShhKTsgYSA9
IDA7CisgICAgICAgIGZhc3RGcmVlKGEpOyBhID0gMDsKICAgICB9CiAgICAgYXJlbmFfZnJlZWxp
c3QgPSBOVUxMOwogfQpJbmRleDogV2ViQ29yZS9raHRtbC9taXNjL2hhc2h0YWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvaGFzaHRhYmxlLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtcCAtdSAtcjEuMTEgV2ViQ29yZS9raHRt
bC9taXNjL2hhc2h0YWJsZS5oCi0tLSBXZWJDb3JlL2todG1sL21pc2MvaGFzaHRhYmxlLmgJMzAg
SnVsIDIwMDUgMDI6MzM6MjEgLTAwMDAJMS4xMQorKysgV2ViQ29yZS9raHRtbC9taXNjL2hhc2h0
YWJsZS5oCTI3IFNlcCAyMDA1IDA3OjE3OjQ1IC0wMDAwCkBAIC0yMyw3ICsyMyw3IEBACiAjaWZu
ZGVmIEhBU0hUQUJMRV9ICiAjZGVmaW5lIEhBU0hUQUJMRV9ICiAKLSNpbmNsdWRlICJtYWluX3Ro
cmVhZF9tYWxsb2MuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9GYXN0TWFsbG9jLmg+CiAjaW5jbHVk
ZSA8dXRpbGl0eT4KIAogbmFtZXNwYWNlIGtodG1sIHsKQEAgLTE3OSw3ICsxNzksNyBAQCBjbGFz
cyBIYXNoVGFibGUgewogICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogCiAgICAgSGFzaFRh
YmxlKCkgOiBtX3RhYmxlKDApLCBtX3RhYmxlU2l6ZSgwKSwgbV90YWJsZVNpemVNYXNrKDApLCBt
X2tleUNvdW50KDApLCBtX2RlbGV0ZWRDb3VudCgwKSB7fQotICAgIH5IYXNoVGFibGUoKSB7IG1h
aW5fdGhyZWFkX2ZyZWUobV90YWJsZSk7IH0KKyAgICB+SGFzaFRhYmxlKCkgeyBmYXN0RnJlZSht
X3RhYmxlKTsgfQogCiAgICAgSGFzaFRhYmxlKGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIpOwogICAg
IHZvaWQgc3dhcChjb25zdCBIYXNoVGFibGUmIG90aGVyKTsKQEAgLTQzMCw5ICs0MzAsOSBAQCBp
bmxpbmUgVmFsdWUgKkhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyCiAgICAgLy8gd291bGQgdXNl
IGEgdGVtcGxhdGUgbWVtYmVyIGZ1bmN0aW9uIHdpdGggZXhwbGljaXQgc3BlY2lhbGl6YXRpb25z
IGhlcmUsIGJ1dAogICAgIC8vIGdjYyBkb2Vzbid0IGFwcGVhciB0byBzdXBwb3J0IHRoYXQKICAg
ICBpZiAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQotICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxWYWx1ZVR5cGUgKj4obWFpbl90aHJlYWRfY2FsbG9jKHNpemUsIHNpemVvZihWYWx1
ZVR5cGUpKSk7IAorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUgKj4o
ZmFzdENhbGxvYyhzaXplLCBzaXplb2YoVmFsdWVUeXBlKSkpOyAKICAgICBlbHNlIHsKLSAgICAg
ICAgVmFsdWVUeXBlICpyZXN1bHQgPSByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSAqPihtYWlu
X3RocmVhZF9tYWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSk7IAorICAgICAgICBWYWx1
ZVR5cGUgKnJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlICo+KGZhc3RNYWxsb2Mo
c2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSk7IAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemU7IGkrKykgewogICAgICAgICAgICAgY2xlYXJCdWNrZXQocmVzdWx0W2ldKTsKICAgICAg
ICAgfQpAQCAtNDc5LDcgKzQ3OSw3IEBAIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RLZXksIEgKIAogICAgIG1fZGVsZXRlZENvdW50ID0gMDsKICAgICAKLSAgICBtYWluX3RocmVh
ZF9mcmVlKG9sZFRhYmxlKTsKKyAgICBmYXN0RnJlZShvbGRUYWJsZSk7CiAKICAgICBjaGVja1Rh
YmxlQ29uc2lzdGVuY3koKTsKIH0KQEAgLTQ4Nyw3ICs0ODcsNyBAQCB2b2lkIEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBICiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCBLZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzPgogaW5saW5lIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNsZWFyKCkKIHsKLSAgICBtYWlu
X3RocmVhZF9mcmVlKG1fdGFibGUpOworICAgIGZhc3RGcmVlKG1fdGFibGUpOwogICAgIG1fdGFi
bGUgPSAwOwogICAgIG1fdGFibGVTaXplID0gMDsKICAgICBtX3RhYmxlU2l6ZU1hc2sgPSAwOwpA
QCAtNTAzLDcgKzUwMyw3IEBAIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNo
RnUKICAgICAsIG1fZGVsZXRlZENvdW50KG90aGVyLm1fZGVsZXRlZENvdW50KQogewogICAgIGlm
IChtX3RhYmxlU2l6ZSAhPSAwKSB7Ci0gICAgICAgIG1fdGFibGUgPSBtYWluX3RocmVhZF9tYWxs
b2MobV90YWJsZVNpemUpOworICAgICAgICBtX3RhYmxlID0gZmFzdE1hbGxvYyhtX3RhYmxlU2l6
ZSk7CiAgICAgICAgIG1lbWNweShvdGhlci5tX3RhYmxlLCBtX3RhYmxlLCBtX3RhYmxlU2l6ZSAq
IHNpemVvZihWYWx1ZVR5cGUpKTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL2todG1sL21pc2Mv
bG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9t
aXNjL2xvYWRlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzUKZGlmZiAtcCAtdSAtcjEu
NzUgV2ViQ29yZS9raHRtbC9taXNjL2xvYWRlci5jcHAKLS0tIFdlYkNvcmUva2h0bWwvbWlzYy9s
b2FkZXIuY3BwCTIxIFNlcCAyMDA1IDIxOjA1OjUzIC0wMDAwCTEuNzUKKysrIFdlYkNvcmUva2h0
bWwvbWlzYy9sb2FkZXIuY3BwCTI3IFNlcCAyMDA1IDA3OjE3OjQ2IC0wMDAwCkBAIC02Miw3ICs2
Miw3IEBACiAjZW5kaWYKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRp
b25zLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIktXUUxv
YWRlci5oIgogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUva2h0bWwvbWlzYy9tYWluX3RocmVhZF9t
YWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGtodG1sL21pc2MvbWFpbl90aHJlYWRfbWFs
bG9jLmNwcApkaWZmIC1OIFdlYkNvcmUva2h0bWwvbWlzYy9tYWluX3RocmVhZF9tYWxsb2MuY3Bw
Ci0tLSBXZWJDb3JlL2todG1sL21pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmNwcAkxOSBTZXAgMjAw
NSAxODo1MjoxMiAtMDAwMAkxLjQKKysrIFdlYkNvcmUva2h0bWwvbWlzYy9tYWluX3RocmVhZF9t
YWxsb2MuY3BwCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsNTY1OCArMCwwIEBACi0v
KgotICBUaGlzIGlzIGEgdmVyc2lvbiAoYWthIGRsbWFsbG9jKSBvZiBtYWxsb2MvZnJlZS9yZWFs
bG9jIHdyaXR0ZW4gYnkKLSAgRG91ZyBMZWEgYW5kIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9t
YWluLiAgVXNlLCBtb2RpZnksIGFuZAotICByZWRpc3RyaWJ1dGUgdGhpcyBjb2RlIHdpdGhvdXQg
cGVybWlzc2lvbiBvciBhY2tub3dsZWRnZW1lbnQgaW4gYW55Ci0gIHdheSB5b3Ugd2lzaC4gIFNl
bmQgcXVlc3Rpb25zLCBjb21tZW50cywgY29tcGxhaW50cywgcGVyZm9ybWFuY2UKLSAgZGF0YSwg
ZXRjIHRvIGRsQGNzLm9zd2Vnby5lZHUKLQotKiBWRVJTSU9OIDIuNy4yIFNhdCBBdWcgMTcgMDk6
MDc6MzAgMjAwMiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCi0KLSAgIE5vdGU6IFRoZXJlIG1heSBi
ZSBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhpcyBtYWxsb2Mgb2J0YWluYWJsZSBhdAotICAgICAg
ICAgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MuYwotICAgICAgICAg
Q2hlY2sgYmVmb3JlIGluc3RhbGxpbmchCi0KLSogUXVpY2tzdGFydAotCi0gIFRoaXMgbGlicmFy
eSBpcyBhbGwgaW4gb25lIGZpbGUgdG8gc2ltcGxpZnkgdGhlIG1vc3QgY29tbW9uIHVzYWdlOgot
ICBmdHAgaXQsIGNvbXBpbGUgaXQgKC1PKSwgYW5kIGxpbmsgaXQgaW50byBhbm90aGVyIHByb2dy
YW0uIEFsbAotICBvZiB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMgZGVmYXVsdCB0byByZWFzb25h
YmxlIHZhbHVlcyBmb3IgdXNlIG9uCi0gIG1vc3QgdW5peCBwbGF0Zm9ybXMuIENvbXBpbGUgLURX
SU4zMiBmb3IgcmVhc29uYWJsZSBkZWZhdWx0cyBvbiB3aW5kb3dzLgotICBZb3UgbWlnaHQgbGF0
ZXIgd2FudCB0byBzdGVwIHRocm91Z2ggdmFyaW91cyBjb21waWxlLXRpbWUgYW5kIGR5bmFtaWMK
LSAgdHVuaW5nIG9wdGlvbnMuCi0KLSAgRm9yIGNvbnZlbmllbmNlLCBhbiBpbmNsdWRlIGZpbGUg
Zm9yIGNvZGUgdXNpbmcgdGhpcyBtYWxsb2MgaXMgYXQ6Ci0gICAgIGZ0cDovL2dlZS5jcy5vc3dl
Z28uZWR1L3B1Yi9taXNjL21hbGxvYy0yLjcuMS5oCi0gIFlvdSBkb24ndCByZWFsbHkgbmVlZCB0
aGlzIC5oIGZpbGUgdW5sZXNzIHlvdSBjYWxsIGZ1bmN0aW9ucyBub3QKLSAgZGVmaW5lZCBpbiB5
b3VyIHN5c3RlbSBpbmNsdWRlIGZpbGVzLiAgVGhlIC5oIGZpbGUgY29udGFpbnMgb25seSB0aGUK
LSAgZXhjZXJwdHMgZnJvbSB0aGlzIGZpbGUgbmVlZGVkIGZvciB1c2luZyB0aGlzIG1hbGxvYyBv
biBBTlNJIEMvQysrCi0gIHN5c3RlbXMsIHNvIGxvbmcgYXMgeW91IGhhdmVuJ3QgY2hhbmdlZCBj
b21waWxlLXRpbWUgb3B0aW9ucyBhYm91dAotICBuYW1pbmcgYW5kIHR1bmluZyBwYXJhbWV0ZXJz
LiAgSWYgeW91IGRvLCB0aGVuIHlvdSBjYW4gY3JlYXRlIHlvdXIKLSAgb3duIG1hbGxvYy5oIHRo
YXQgZG9lcyBpbmNsdWRlIGFsbCBzZXR0aW5ncyBieSBjdXR0aW5nIGF0IHRoZSBwb2ludAotICBp
bmRpY2F0ZWQgYmVsb3cuCi0KLSogV2h5IHVzZSB0aGlzIG1hbGxvYz8KLQotICBUaGlzIGlzIG5v
dCB0aGUgZmFzdGVzdCwgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBtb3N0IHBvcnRhYmxlLCBvcgot
ICBtb3N0IHR1bmFibGUgbWFsbG9jIGV2ZXIgd3JpdHRlbi4gSG93ZXZlciBpdCBpcyBhbW9uZyB0
aGUgZmFzdGVzdAotICB3aGlsZSBhbHNvIGJlaW5nIGFtb25nIHRoZSBtb3N0IHNwYWNlLWNvbnNl
cnZpbmcsIHBvcnRhYmxlIGFuZCB0dW5hYmxlLgotICBDb25zaXN0ZW50IGJhbGFuY2UgYWNyb3Nz
IHRoZXNlIGZhY3RvcnMgcmVzdWx0cyBpbiBhIGdvb2QgZ2VuZXJhbC1wdXJwb3NlCi0gIGFsbG9j
YXRvciBmb3IgbWFsbG9jLWludGVuc2l2ZSBwcm9ncmFtcy4KLQotICBUaGUgbWFpbiBwcm9wZXJ0
aWVzIG9mIHRoZSBhbGdvcml0aG1zIGFyZToKLSAgKiBGb3IgbGFyZ2UgKD49IDUxMiBieXRlcykg
cmVxdWVzdHMsIGl0IGlzIGEgcHVyZSBiZXN0LWZpdCBhbGxvY2F0b3IsCi0gICAgd2l0aCB0aWVz
IG5vcm1hbGx5IGRlY2lkZWQgdmlhIEZJRk8gKGkuZS4gbGVhc3QgcmVjZW50bHkgdXNlZCkuCi0g
ICogRm9yIHNtYWxsICg8PSA2NCBieXRlcyBieSBkZWZhdWx0KSByZXF1ZXN0cywgaXQgaXMgYSBj
YWNoaW5nCi0gICAgYWxsb2NhdG9yLCB0aGF0IG1haW50YWlucyBwb29scyBvZiBxdWlja2x5IHJl
Y3ljbGVkIGNodW5rcy4KLSAgKiBJbiBiZXR3ZWVuLCBhbmQgZm9yIGNvbWJpbmF0aW9ucyBvZiBs
YXJnZSBhbmQgc21hbGwgcmVxdWVzdHMsIGl0IGRvZXMKLSAgICB0aGUgYmVzdCBpdCBjYW4gdHJ5
aW5nIHRvIG1lZXQgYm90aCBnb2FscyBhdCBvbmNlLgotICAqIEZvciB2ZXJ5IGxhcmdlIHJlcXVl
c3RzICg+PSAxMjhLQiBieSBkZWZhdWx0KSwgaXQgcmVsaWVzIG9uIHN5c3RlbQotICAgIG1lbW9y
eSBtYXBwaW5nIGZhY2lsaXRpZXMsIGlmIHN1cHBvcnRlZC4KLQotICBGb3IgYSBsb25nZXIgYnV0
IHNsaWdodGx5IG91dCBvZiBkYXRlIGhpZ2gtbGV2ZWwgZGVzY3JpcHRpb24sIHNlZQotICAgICBo
dHRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvZGwvaHRtbC9tYWxsb2MuaHRtbAotCi0gIFlvdSBtYXkg
YWxyZWFkeSBieSBkZWZhdWx0IGJlIHVzaW5nIGEgQyBsaWJyYXJ5IGNvbnRhaW5pbmcgYSBtYWxs
b2MKLSAgdGhhdCBpcyAgYmFzZWQgb24gc29tZSB2ZXJzaW9uIG9mIHRoaXMgbWFsbG9jIChmb3Ig
ZXhhbXBsZSBpbgotICBsaW51eCkuIFlvdSBtaWdodCBzdGlsbCB3YW50IHRvIHVzZSB0aGUgb25l
IGluIHRoaXMgZmlsZSBpbiBvcmRlciB0bwotICBjdXN0b21pemUgc2V0dGluZ3Mgb3IgdG8gYXZv
aWQgb3ZlcmhlYWRzIGFzc29jaWF0ZWQgd2l0aCBsaWJyYXJ5Ci0gIHZlcnNpb25zLgotCi0qIENv
bnRlbnRzLCBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gImRlc2NyaXB0aW9uIG9mIHB1Ymxp
YyByb3V0aW5lcyIgYmVsb3cuCi0KLSAgU3RhbmRhcmQgKEFOU0kvU1ZJRC8uLi4pICBmdW5jdGlv
bnM6Ci0gICAgbWFsbG9jKHNpemVfdCBuKTsKLSAgICBjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMs
IHNpemVfdCBlbGVtZW50X3NpemUpOwotICAgIGZyZWUoVm9pZF90KiBwKTsKLSAgICByZWFsbG9j
KFZvaWRfdCogcCwgc2l6ZV90IG4pOwotICAgIG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCBuKTsKLSAgICB2YWxsb2Moc2l6ZV90IG4pOwotICAgIG1hbGxpbmZvKCkKLSAgICBtYWxs
b3B0KGludCBwYXJhbWV0ZXJfbnVtYmVyLCBpbnQgcGFyYW1ldGVyX3ZhbHVlKQotCi0gIEFkZGl0
aW9uYWwgZnVuY3Rpb25zOgotICAgIGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50
cywgc2l6ZV90IHNpemUsIFZvaWRfdCogY2h1bmtzW10pOwotICAgIGluZGVwZW5kZW50X2NvbWFs
bG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwgVm9pZF90KiBjaHVua3NbXSk7
Ci0gICAgcHZhbGxvYyhzaXplX3Qgbik7Ci0gICAgY2ZyZWUoVm9pZF90KiBwKTsKLSAgICBtYWxs
b2NfdHJpbShzaXplX3QgcGFkKTsKLSAgICBtYWxsb2NfdXNhYmxlX3NpemUoVm9pZF90KiBwKTsK
LSAgICBtYWxsb2Nfc3RhdHMoKTsKLQotKiBWaXRhbCBzdGF0aXN0aWNzOgotCi0gIFN1cHBvcnRl
ZCBwb2ludGVyIHJlcHJlc2VudGF0aW9uOiAgICAgICA0IG9yIDggYnl0ZXMKLSAgU3VwcG9ydGVk
IHNpemVfdCAgcmVwcmVzZW50YXRpb246ICAgICAgIDQgb3IgOCBieXRlcyAKLSAgICAgICBOb3Rl
IHRoYXQgc2l6ZV90IGlzIGFsbG93ZWQgdG8gYmUgNCBieXRlcyBldmVuIGlmIHBvaW50ZXJzIGFy
ZSA4LgotICAgICAgIFlvdSBjYW4gYWRqdXN0IHRoaXMgYnkgZGVmaW5pbmcgSU5URVJOQUxfU0la
RV9UCi0KLSAgQWxpZ25tZW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKiBzaXpl
b2Yoc2l6ZV90KSAoZGVmYXVsdCkKLSAgICAgICAoaS5lLiwgOCBieXRlIGFsaWdubWVudCB3aXRo
IDRieXRlIHNpemVfdCkuIFRoaXMgc3VmZmljZXMgZm9yCi0gICAgICAgbmVhcmx5IGFsbCBjdXJy
ZW50IG1hY2hpbmVzIGFuZCBDIGNvbXBpbGVycy4gSG93ZXZlciwgeW91IGNhbgotICAgICAgIGRl
ZmluZSBNQUxMT0NfQUxJR05NRU5UIHRvIGJlIHdpZGVyIHRoYW4gdGhpcyBpZiBuZWNlc3Nhcnku
Ci0KLSAgTWluaW11bSBvdmVyaGVhZCBwZXIgYWxsb2NhdGVkIGNodW5rOiAgIDQgb3IgOCBieXRl
cwotICAgICAgIEVhY2ggbWFsbG9jZWQgY2h1bmsgaGFzIGEgaGlkZGVuIHdvcmQgb2Ygb3Zlcmhl
YWQgaG9sZGluZyBzaXplCi0gICAgICAgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbi4KLQotICBNaW5p
bXVtIGFsbG9jYXRlZCBzaXplOiA0LWJ5dGUgcHRyczogIDE2IGJ5dGVzICAgIChpbmNsdWRpbmcg
NCBvdmVyaGVhZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOC1ieXRlIHB0cnM6ICAyNC8z
MiBieXRlcyAoaW5jbHVkaW5nLCA0Lzggb3ZlcmhlYWQpCi0KLSAgICAgICBXaGVuIGEgY2h1bmsg
aXMgZnJlZWQsIDEyIChmb3IgNGJ5dGUgcHRycykgb3IgMjAgKGZvciA4IGJ5dGUKLSAgICAgICBw
dHJzIGJ1dCA0IGJ5dGUgc2l6ZSkgb3IgMjQgKGZvciA4LzgpIGFkZGl0aW9uYWwgYnl0ZXMgYXJl
Ci0gICAgICAgbmVlZGVkOyA0ICg4KSBmb3IgYSB0cmFpbGluZyBzaXplIGZpZWxkIGFuZCA4ICgx
NikgYnl0ZXMgZm9yCi0gICAgICAgZnJlZSBsaXN0IHBvaW50ZXJzLiBUaHVzLCB0aGUgbWluaW11
bSBhbGxvY2F0YWJsZSBzaXplIGlzCi0gICAgICAgMTYvMjQvMzIgYnl0ZXMuCi0KLSAgICAgICBF
dmVuIGEgcmVxdWVzdCBmb3IgemVybyBieXRlcyAoaS5lLiwgbWFsbG9jKDApKSByZXR1cm5zIGEK
LSAgICAgICBwb2ludGVyIHRvIHNvbWV0aGluZyBvZiB0aGUgbWluaW11bSBhbGxvY2F0YWJsZSBz
aXplLgotCi0gICAgICAgVGhlIG1heGltdW0gb3ZlcmhlYWQgd2FzdGFnZSAoaS5lLiwgbnVtYmVy
IG9mIGV4dHJhIGJ5dGVzCi0gICAgICAgYWxsb2NhdGVkIHRoYW4gd2VyZSByZXF1ZXN0ZWQgaW4g
bWFsbG9jKSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwKLSAgICAgICB0byB0aGUgbWluaW11bSBzaXpl
LCBleGNlcHQgZm9yIHJlcXVlc3RzID49IG1tYXBfdGhyZXNob2xkIHRoYXQKLSAgICAgICBhcmUg
c2VydmljZWQgdmlhIG1tYXAoKSwgd2hlcmUgdGhlIHdvcnN0IGNhc2Ugd2FzdGFnZSBpcyAyICoK
LSAgICAgICBzaXplb2Yoc2l6ZV90KSBieXRlcyBwbHVzIHRoZSByZW1haW5kZXIgZnJvbSBhIHN5
c3RlbSBwYWdlICh0aGUKLSAgICAgICBtaW5pbWFsIG1tYXAgdW5pdCk7IHR5cGljYWxseSA0MDk2
IG9yIDgxOTIgYnl0ZXMuCi0KLSAgTWF4aW11bSBhbGxvY2F0ZWQgc2l6ZTogIDQtYnl0ZSBzaXpl
X3Q6IDJeMzIgbWludXMgYWJvdXQgdHdvIHBhZ2VzIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOC1ieXRlIHNpemVfdDogMl42NCBtaW51cyBhYm91dCB0d28gcGFnZXMKLQotICAgICAgIEl0
IGlzIGFzc3VtZWQgdGhhdCAocG9zc2libHkgc2lnbmVkKSBzaXplX3QgdmFsdWVzIHN1ZmZpY2Ug
dG8KLSAgICAgICByZXByZXNlbnQgY2h1bmsgc2l6ZXMuIGBQb3NzaWJseSBzaWduZWQnIGlzIGR1
ZSB0byB0aGUgZmFjdAotICAgICAgIHRoYXQgYHNpemVfdCcgbWF5IGJlIGRlZmluZWQgb24gYSBz
eXN0ZW0gYXMgZWl0aGVyIGEgc2lnbmVkIG9yCi0gICAgICAgYW4gdW5zaWduZWQgdHlwZS4gVGhl
IElTTyBDIHN0YW5kYXJkIHNheXMgdGhhdCBpdCBtdXN0IGJlCi0gICAgICAgdW5zaWduZWQsIGJ1
dCBhIGZldyBzeXN0ZW1zIGFyZSBrbm93biBub3QgdG8gYWRoZXJlIHRvIHRoaXMuCi0gICAgICAg
QWRkaXRpb25hbGx5LCBldmVuIHdoZW4gc2l6ZV90IGlzIHVuc2lnbmVkLCBzYnJrICh3aGljaCBp
cyBieQotICAgICAgIGRlZmF1bHQgdXNlZCB0byBvYnRhaW4gbWVtb3J5IGZyb20gc3lzdGVtKSBh
Y2NlcHRzIHNpZ25lZAotICAgICAgIGFyZ3VtZW50cywgYW5kIG1heSBub3QgYmUgYWJsZSB0byBo
YW5kbGUgc2l6ZV90LXdpZGUgYXJndW1lbnRzCi0gICAgICAgd2l0aCBuZWdhdGl2ZSBzaWduIGJp
dC4gIEdlbmVyYWxseSwgdmFsdWVzIHRoYXQgd291bGQKLSAgICAgICBhcHBlYXIgYXMgbmVnYXRp
dmUgYWZ0ZXIgYWNjb3VudGluZyBmb3Igb3ZlcmhlYWQgYW5kIGFsaWdubWVudAotICAgICAgIGFy
ZSBzdXBwb3J0ZWQgb25seSB2aWEgbW1hcCgpLCB3aGljaCBkb2VzIG5vdCBoYXZlIHRoaXMKLSAg
ICAgICBsaW1pdGF0aW9uLgotCi0gICAgICAgUmVxdWVzdHMgZm9yIHNpemVzIG91dHNpZGUgdGhl
IGFsbG93ZWQgcmFuZ2Ugd2lsbCBwZXJmb3JtIGFuIG9wdGlvbmFsCi0gICAgICAgZmFpbHVyZSBh
Y3Rpb24gYW5kIHRoZW4gcmV0dXJuIG51bGwuIChSZXF1ZXN0cyBtYXkgYWxzbwotICAgICAgIGFs
c28gZmFpbCBiZWNhdXNlIGEgc3lzdGVtIGlzIG91dCBvZiBtZW1vcnkuKQotCi0gIFRocmVhZC1z
YWZldHk6IE5PVCB0aHJlYWQtc2FmZSB1bmxlc3MgVVNFX01BTExPQ19MT0NLIGRlZmluZWQKLQot
ICAgICAgIFdoZW4gVVNFX01BTExPQ19MT0NLIGlzIGRlZmluZWQsIHdyYXBwZXJzIGFyZSBjcmVh
dGVkIHRvCi0gICAgICAgc3Vycm91bmQgZXZlcnkgcHVibGljIGNhbGwgd2l0aCBlaXRoZXIgYSBw
dGhyZWFkIG11dGV4IG9yCi0gICAgICAgYSB3aW4zMiBzcGlubG9jayAoZGVwZW5kaW5nIG9uIFdJ
TjMyKS4gVGhpcyBpcyBub3QKLSAgICAgICBlc3BlY2lhbGx5IGZhc3QsIGFuZCBjYW4gYmUgYSBt
YWpvciBib3R0bGVuZWNrLgotICAgICAgIEl0IGlzIGRlc2lnbmVkIG9ubHkgdG8gcHJvdmlkZSBt
aW5pbWFsIHByb3RlY3Rpb24KLSAgICAgICBpbiBjb25jdXJyZW50IGVudmlyb25tZW50cywgYW5k
IHRvIHByb3ZpZGUgYSBiYXNpcyBmb3IKLSAgICAgICBleHRlbnNpb25zLiAgSWYgeW91IGFyZSB1
c2luZyBtYWxsb2MgaW4gYSBjb25jdXJyZW50IHByb2dyYW0sCi0gICAgICAgeW91IHdvdWxkIGJl
IGZhciBiZXR0ZXIgb2ZmIG9idGFpbmluZyBwdG1hbGxvYywgd2hpY2ggaXMKLSAgICAgICBkZXJp
dmVkIGZyb20gYSB2ZXJzaW9uIG9mIHRoaXMgbWFsbG9jLCBhbmQgaXMgd2VsbC10dW5lZCBmb3IK
LSAgICAgICBjb25jdXJyZW50IHByb2dyYW1zLiAoU2VlIGh0dHA6Ly93d3cubWFsbG9jLmRlKSBO
b3RlIHRoYXQKLSAgICAgICBldmVuIHdoZW4gVVNFX01BTExPQ19MT0NLIGlzIGRlZmluZWQsIHlv
dSBjYW4gY2FuIGd1YXJhbnRlZQotICAgICAgIGZ1bGwgdGhyZWFkLXNhZmV0eSBvbmx5IGlmIG5v
IHRocmVhZHMgYWNxdWlyZSBtZW1vcnkgdGhyb3VnaCAKLSAgICAgICBkaXJlY3QgY2FsbHMgdG8g
TU9SRUNPUkUgb3Igb3RoZXIgc3lzdGVtLWxldmVsIGFsbG9jYXRvcnMuCi0KLSAgQ29tcGxpYW5j
ZTogSSBiZWxpZXZlIGl0IGlzIGNvbXBsaWFudCB3aXRoIHRoZSAxOTk3IFNpbmdsZSBVbml4IFNw
ZWNpZmljYXRpb24KLSAgICAgICAoU2VlIGh0dHA6Ly93d3cub3Blbm5jLm9yZykuIEFsc28gU1ZJ
RC9YUEcsIEFOU0kgQywgYW5kIHByb2JhYmx5IAotICAgICAgIG90aGVycyBhcyB3ZWxsLgotCi0q
IFN5bm9wc2lzIG9mIGNvbXBpbGUtdGltZSBvcHRpb25zOgotCi0gICAgUGVvcGxlIGhhdmUgcmVw
b3J0ZWQgdXNpbmcgcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyBtYWxsb2Mgb24gYWxsCi0gICAg
dmVyc2lvbnMgb2YgVW5peCwgc29tZXRpbWVzIGJ5IHR3ZWFraW5nIHNvbWUgb2YgdGhlIGRlZmlu
ZXMKLSAgICBiZWxvdy4gSXQgaGFzIGJlZW4gdGVzdGVkIG1vc3QgZXh0ZW5zaXZlbHkgb24gU29s
YXJpcyBhbmQKLSAgICBMaW51eC4gSXQgaXMgYWxzbyByZXBvcnRlZCB0byB3b3JrIG9uIFdJTjMy
IHBsYXRmb3Jtcy4KLSAgICBQZW9wbGUgYWxzbyByZXBvcnQgdXNpbmcgaXQgaW4gc3RhbmQtYWxv
bmUgZW1iZWRkZWQgc3lzdGVtcy4KLQotICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpbiBzdHJh
aWdodCwgaGFuZC10dW5lZCBBTlNJIEMuICBJdCBpcyBub3QKLSAgICBhdCBhbGwgbW9kdWxhci4g
KFNvcnJ5ISkgIEl0IHVzZXMgYSBsb3Qgb2YgbWFjcm9zLiAgVG8gYmUgYXQgYWxsCi0gICAgdXNh
YmxlLCB0aGlzIGNvZGUgc2hvdWxkIGJlIGNvbXBpbGVkIHVzaW5nIGFuIG9wdGltaXppbmcgY29t
cGlsZXIKLSAgICAoZm9yIGV4YW1wbGUgZ2NjIC1PMykgdGhhdCBjYW4gc2ltcGxpZnkgZXhwcmVz
c2lvbnMgYW5kIGNvbnRyb2wKLSAgICBwYXRocy4gKEZBUTogc29tZSBtYWNyb3MgaW1wb3J0IHZh
cmlhYmxlcyBhcyBhcmd1bWVudHMgcmF0aGVyIHRoYW4KLSAgICBkZWNsYXJlIGxvY2FscyBiZWNh
dXNlIHBlb3BsZSByZXBvcnRlZCB0aGF0IHNvbWUgZGVidWdnZXJzCi0gICAgb3RoZXJ3aXNlIGdl
dCBjb25mdXNlZC4pCi0KLSAgICBPUFRJT04gICAgICAgICAgICAgICAgICAgICBERUZBVUxUIFZB
TFVFCi0KLSAgICBDb21waWxhdGlvbiBFbnZpcm9ubWVudCBvcHRpb25zOgotCi0gICAgX19TVERf
QyAgICAgICAgICAgICAgICAgICAgZGVyaXZlZCBmcm9tIEMgY29tcGlsZXIgZGVmaW5lcwotICAg
IFdJTjMyICAgICAgICAgICAgICAgICAgICAgIE5PVCBkZWZpbmVkCi0gICAgSEFWRV9NRU1DUFkg
ICAgICAgICAgICAgICAgZGVmaW5lZAotICAgIFVTRV9NRU1DUFkgICAgICAgICAgICAgICAgIDEg
aWYgSEFWRV9NRU1DUFkgaXMgZGVmaW5lZAotICAgIEhBVkVfTU1BUCAgICAgICAgICAgICAgICAg
IGRlZmluZWQgYXMgMSAKLSAgICBNTUFQX0NMRUFSUyAgICAgICAgICAgICAgICAxCi0gICAgSEFW
RV9NUkVNQVAgICAgICAgICAgICAgICAgMCB1bmxlc3MgbGludXggZGVmaW5lZAotICAgIG1hbGxv
Y19nZXRwYWdlc2l6ZSAgICAgICAgIGRlcml2ZWQgZnJvbSBzeXN0ZW0gI2luY2x1ZGVzLCBvciA0
MDk2IGlmIG5vdAotICAgIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggIE5PVCBkZWZpbmVkCi0g
ICAgTEFDS1NfVU5JU1REX0ggICAgICAgICAgICAgTk9UIGRlZmluZWQgdW5sZXNzIFdJTjMyCi0g
ICAgTEFDS1NfU1lTX1BBUkFNX0ggICAgICAgICAgTk9UIGRlZmluZWQgdW5sZXNzIFdJTjMyCi0g
ICAgTEFDS1NfU1lTX01NQU5fSCAgICAgICAgICAgTk9UIGRlZmluZWQgdW5sZXNzIFdJTjMyCi0g
ICAgTEFDS1NfRkNOVExfSCAgICAgICAgICAgICAgTk9UIGRlZmluZWQKLQotICAgIENoYW5naW5n
IGRlZmF1bHQgd29yZCBzaXplczoKLQotICAgIElOVEVSTkFMX1NJWkVfVCAgICAgICAgICAgIHNp
emVfdAotICAgIE1BTExPQ19BTElHTk1FTlQgICAgICAgICAgIDIgKiBzaXplb2YoSU5URVJOQUxf
U0laRV9UKQotICAgIFBUUl9VSU5UICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcKLSAg
ICBDSFVOS19TSVpFX1QgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nCi0KLSAgICBDb25maWd1
cmF0aW9uIGFuZCBmdW5jdGlvbmFsaXR5IG9wdGlvbnM6Ci0KLSAgICBVU0VfRExfUFJFRklYICAg
ICAgICAgICAgICBOT1QgZGVmaW5lZAotICAgIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTIE5P
VCBkZWZpbmVkCi0gICAgVVNFX01BTExPQ19MT0NLICAgICAgICAgICAgTk9UIGRlZmluZWQKLSAg
ICBERUJVRyAgICAgICAgICAgICAgICAgICAgICBOT1QgZGVmaW5lZAotICAgIFJFQUxMT0NfWkVS
T19CWVRFU19GUkVFUyAgIE5PVCBkZWZpbmVkCi0gICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICAg
ICAgZXJybm8gPSBFTk9NRU0sIGlmIF9fU1REX0MgZGVmaW5lZCwgZWxzZSBuby1vcAotICAgIFRS
SU1fRkFTVEJJTlMgICAgICAgICAgICAgIDAKLSAgICBGSVJTVF9TT1JURURfQklOX1NJWkUgICAg
ICA1MTIKLQotICAgIE9wdGlvbnMgZm9yIGN1c3RvbWl6aW5nIE1PUkVDT1JFOgotCi0gICAgTU9S
RUNPUkUgICAgICAgICAgICAgICAgICAgc2JyawotICAgIE1PUkVDT1JFX0NPTlRJR1VPVVMgICAg
ICAgIDEgCi0gICAgTU9SRUNPUkVfQ0FOTk9UX1RSSU0gICAgICAgTk9UIGRlZmluZWQKLSAgICBN
TUFQX0FTX01PUkVDT1JFX1NJWkUgICAgICAoMTAyNCAqIDEwMjQpIAotCi0gICAgVHVuaW5nIG9w
dGlvbnMgdGhhdCBhcmUgYWxzbyBkeW5hbWljYWxseSBjaGFuZ2VhYmxlIHZpYSBtYWxsb3B0Ogot
Ci0gICAgREVGQVVMVF9NWEZBU1QgICAgICAgICAgICAgNjQKLSAgICBERUZBVUxUX1RSSU1fVEhS
RVNIT0xEICAgICAyNTYgKiAxMDI0Ci0gICAgREVGQVVMVF9UT1BfUEFEICAgICAgICAgICAgMAot
ICAgIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgICAgIDI1NiAqIDEwMjQKLSAgICBERUZBVUxUX01N
QVBfTUFYICAgICAgICAgICA2NTUzNgotCi0gICAgVGhlcmUgYXJlIHNldmVyYWwgb3RoZXIgI2Rl
ZmluZWQgY29uc3RhbnRzIGFuZCBtYWNyb3MgdGhhdCB5b3UKLSAgICBwcm9iYWJseSBkb24ndCB3
YW50IHRvIHRvdWNoIHVubGVzcyB5b3UgYXJlIGV4dGVuZGluZyBvciBhZGFwdGluZyBtYWxsb2Mu
Ci0qLwotCi0jaW5jbHVkZSAibWFpbl90aHJlYWRfbWFsbG9jLmgiCi0KLSNkZWZpbmUgTU9SRUNP
UkVfQ09OVElHVU9VUyAwCi0jZGVmaW5lIE1PUkVDT1JFX0NBTk5PVF9UUklNIDEKLSNkZWZpbmUg
TUFMTE9DX0ZBSUxVUkVfQUNUSU9OIGFib3J0KCkKLQotCi1uYW1lc3BhY2Uga2h0bWwgewotCi0j
aWZuZGVmIE5ERUJVRwotCi0vLyBJbiBkZWJ1Z2dpbmcgYnVpbGRzLCB1c2UgdGhlIHN5c3RlbSBt
YWxsb2MgZm9yIGl0cyBkZWJ1Z2dpbmcgZmVhdHVyZXMuCi0KLXZvaWQgKm1haW5fdGhyZWFkX21h
bGxvYyhzaXplX3QgbikKLXsKLSAgICBhc3NlcnQocHRocmVhZF9tYWluX25wKCkpOwotICAgIHJl
dHVybiBtYWxsb2Mobik7Ci19Ci0KLXZvaWQgKm1haW5fdGhyZWFkX2NhbGxvYyhzaXplX3Qgbl9l
bGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSkKLXsKLSAgICBhc3NlcnQocHRocmVhZF9tYWlu
X25wKCkpOwotICAgIHJldHVybiBjYWxsb2Mobl9lbGVtZW50cywgZWxlbWVudF9zaXplKTsKLX0K
LQotdm9pZCBtYWluX3RocmVhZF9mcmVlKHZvaWQqIHApCi17Ci0gICAgLy8gaXQncyBvayB0byBt
YWluX3RocmVhZF9mcmVlIG9uIGEgbm9uLW1haW4gdGhyZWFkIC0gdGhlIGFjdHVhbAotICAgIC8v
IGZyZWUgd2lsbCBiZSBzY2hlZHVsZWQgb24gdGhlIG1haW4gdGhyZWFkIGluIHRoYXQgY2FzZS4K
LSAgICBmcmVlKHApOwotfQotCi12b2lkICptYWluX3RocmVhZF9yZWFsbG9jKHZvaWQqIHAsIHNp
emVfdCBuKQotewotICAgIGFzc2VydChwdGhyZWFkX21haW5fbnAoKSk7Ci0gICAgcmV0dXJuIHJl
YWxsb2MocCwgbik7Ci19Ci0KLSNlbHNlCi0KLS8qCi0gIFdJTjMyIHNldHMgdXAgZGVmYXVsdHMg
Zm9yIE1TIGVudmlyb25tZW50IGFuZCBjb21waWxlcnMuCi0gIE90aGVyd2lzZSBkZWZhdWx0cyBh
cmUgZm9yIHVuaXguCi0qLwotCi0vKiAjZGVmaW5lIFdJTjMyICovCi0KLSNpZmRlZiBXSU4zMgot
Ci0jZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLS8q
IFdpbjMyIGRvZXNuJ3Qgc3VwcGx5IG9yIG5lZWQgdGhlIGZvbGxvd2luZyBoZWFkZXJzICovCi0j
ZGVmaW5lIExBQ0tTX1VOSVNURF9ICi0jZGVmaW5lIExBQ0tTX1NZU19QQVJBTV9ICi0jZGVmaW5l
IExBQ0tTX1NZU19NTUFOX0gKLQotLyogVXNlIHRoZSBzdXBwbGllZCBlbXVsYXRpb24gb2Ygc2Jy
ayAqLwotI2RlZmluZSBNT1JFQ09SRSBzYnJrCi0jZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMg
MQotI2RlZmluZSBNT1JFQ09SRV9GQUlMVVJFICAgICgodm9pZCopKC0xKSkKLQotLyogVXNlIHRo
ZSBzdXBwbGllZCBlbXVsYXRpb24gb2YgbW1hcCBhbmQgbXVubWFwICovCi0jZGVmaW5lIEhBVkVf
TU1BUCAxCi0jZGVmaW5lIE1VTk1BUF9GQUlMVVJFICAoLTEpCi0jZGVmaW5lIE1NQVBfQ0xFQVJT
IDEKLQotLyogVGhlc2UgdmFsdWVzIGRvbid0IHJlYWxseSBtYXR0ZXIgaW4gd2luZG93cyBtbWFw
IGVtdWxhdGlvbiAqLwotI2RlZmluZSBNQVBfUFJJVkFURSAxCi0jZGVmaW5lIE1BUF9BTk9OWU1P
VVMgMgotI2RlZmluZSBQUk9UX1JFQUQgMQotI2RlZmluZSBQUk9UX1dSSVRFIDIKLQotLyogRW11
bGF0aW9uIGZ1bmN0aW9ucyBkZWZpbmVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlICovCi0KLS8q
IElmIFVTRV9NQUxMT0NfTE9DSywgdXNlIHN1cHBsaWVkIGNyaXRpY2FsLXNlY3Rpb24tYmFzZWQg
bG9jayBmdW5jdGlvbnMgKi8KLSNpZmRlZiBVU0VfTUFMTE9DX0xPQ0sKLXN0YXRpYyBpbnQgc2x3
YWl0KGludCAqc2wpOwotc3RhdGljIGludCBzbHJlbGVhc2UoaW50ICpzbCk7Ci0jZW5kaWYKLQot
c3RhdGljIGxvbmcgZ2V0cGFnZXNpemUodm9pZCk7Ci1zdGF0aWMgbG9uZyBnZXRyZWdpb25zaXpl
KHZvaWQpOwotc3RhdGljIHZvaWQgKnNicmsobG9uZyBzaXplKTsKLXN0YXRpYyB2b2lkICptbWFw
KHZvaWQgKnB0ciwgbG9uZyBzaXplLCBsb25nIHByb3QsIGxvbmcgdHlwZSwgbG9uZyBoYW5kbGUs
IGxvbmcgYXJnKTsKLXN0YXRpYyBsb25nIG11bm1hcCh2b2lkICpwdHIsIGxvbmcgc2l6ZSk7Ci0K
LXN0YXRpYyB2b2lkIHZtaW5mbyAodW5zaWduZWQgbG9uZypmcmVlLCB1bnNpZ25lZCBsb25nKnJl
c2VydmVkLCB1bnNpZ25lZCBsb25nKmNvbW1pdHRlZCk7Ci1zdGF0aWMgaW50IGNwdWluZm8gKGlu
dCB3aG9sZSwgdW5zaWduZWQgbG9uZyprZXJuZWwsIHVuc2lnbmVkIGxvbmcqdXNlcik7Ci0KLSNl
bmRpZgotCi0vKgotICBfX1NURF9DIHNob3VsZCBiZSBub256ZXJvIGlmIHVzaW5nIEFOU0ktc3Rh
bmRhcmQgQyBjb21waWxlciwgYSBDKysKLSAgY29tcGlsZXIsIG9yIGEgQyBjb21waWxlciBzdWZm
aWNpZW50bHkgY2xvc2UgdG8gQU5TSSB0byBnZXQgYXdheQotICB3aXRoIGl0LgotKi8KLQotI2lm
bmRlZiBfX1NURF9DCi0jaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfY3BsdXNwbHVz
KQotI2RlZmluZSBfX1NURF9DICAgICAxCi0jZWxzZQotI2RlZmluZSBfX1NURF9DICAgICAwCi0j
ZW5kaWYgCi0jZW5kaWYgLypfX1NURF9DKi8KLQotCi0vKgotICBWb2lkX3QqIGlzIHRoZSBwb2lu
dGVyIHR5cGUgdGhhdCBtYWxsb2Mgc2hvdWxkIHNheSBpdCByZXR1cm5zCi0qLwotCi0jaWZuZGVm
IFZvaWRfdAotI2lmIChfX1NURF9DIHx8IGRlZmluZWQoV0lOMzIpKQotI2RlZmluZSBWb2lkX3Qg
ICAgICB2b2lkCi0jZWxzZQotI2RlZmluZSBWb2lkX3QgICAgICBjaGFyCi0jZW5kaWYKLSNlbmRp
ZiAvKlZvaWRfdCovCi0KLSNpZiBfX1NURF9DCi0jaW5jbHVkZSA8c3RkZGVmLmg+ICAgLyogZm9y
IHNpemVfdCAqLwotI2Vsc2UKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotCi0vKiBk
ZWZpbmUgTEFDS1NfVU5JU1REX0ggaWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSBhIDx1bmlz
dGQuaD4uICovCi0KLS8qICNkZWZpbmUgIExBQ0tTX1VOSVNURF9IICovCi0KLSNpZm5kZWYgTEFD
S1NfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotCi0vKiBkZWZpbmUgTEFD
S1NfU1lTX1BBUkFNX0ggaWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSBhIDxzeXMvcGFyYW0u
aD4uICovCi0KLS8qICNkZWZpbmUgIExBQ0tTX1NZU19QQVJBTV9IICovCi0KLQotI2luY2x1ZGUg
PHN0ZGlvLmg+ICAgIC8qIG5lZWRlZCBmb3IgbWFsbG9jX3N0YXRzICovCi0jaW5jbHVkZSA8ZXJy
bm8uaD4gICAgLyogbmVlZGVkIGZvciBvcHRpb25hbCBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gKi8K
LQotCi0vKgotICBEZWJ1Z2dpbmc6Ci0KLSAgQmVjYXVzZSBmcmVlZCBjaHVua3MgbWF5IGJlIG92
ZXJ3cml0dGVuIHdpdGggYm9va2tlZXBpbmcgZmllbGRzLCB0aGlzCi0gIG1hbGxvYyB3aWxsIG9m
dGVuIGRpZSB3aGVuIGZyZWVkIG1lbW9yeSBpcyBvdmVyd3JpdHRlbiBieSB1c2VyCi0gIHByb2dy
YW1zLiAgVGhpcyBjYW4gYmUgdmVyeSBlZmZlY3RpdmUgKGFsYmVpdCBpbiBhbiBhbm5veWluZyB3
YXkpCi0gIGluIGhlbHBpbmcgdHJhY2sgZG93biBkYW5nbGluZyBwb2ludGVycy4KLQotICBJZiB5
b3UgY29tcGlsZSB3aXRoIC1EREVCVUcsIGEgbnVtYmVyIG9mIGFzc2VydGlvbiBjaGVja3MgYXJl
Ci0gIGVuYWJsZWQgdGhhdCB3aWxsIGNhdGNoIG1vcmUgbWVtb3J5IGVycm9ycy4gWW91IHByb2Jh
Ymx5IHdvbid0IGJlCi0gIGFibGUgdG8gbWFrZSBtdWNoIHNlbnNlIG9mIHRoZSBhY3R1YWwgYXNz
ZXJ0aW9uIGVycm9ycywgYnV0IHRoZXkKLSAgc2hvdWxkIGhlbHAgeW91IGxvY2F0ZSBpbmNvcnJl
Y3RseSBvdmVyd3JpdHRlbiBtZW1vcnkuICBUaGUKLSAgY2hlY2tpbmcgaXMgZmFpcmx5IGV4dGVu
c2l2ZSwgYW5kIHdpbGwgc2xvdyBkb3duIGV4ZWN1dGlvbgotICBub3RpY2VhYmx5LiBDYWxsaW5n
IG1hbGxvY19zdGF0cyBvciBtYWxsaW5mbyB3aXRoIERFQlVHIHNldCB3aWxsCi0gIGF0dGVtcHQg
dG8gY2hlY2sgZXZlcnkgbm9uLW1tYXBwZWQgYWxsb2NhdGVkIGFuZCBmcmVlIGNodW5rIGluIHRo
ZQotICBjb3Vyc2Ugb2YgY29tcHV0aW5nIHRoZSBzdW1tbWFyaWVzLiAoQnkgbmF0dXJlLCBtbWFw
cGVkIHJlZ2lvbnMKLSAgY2Fubm90IGJlIGNoZWNrZWQgdmVyeSBtdWNoIGF1dG9tYXRpY2FsbHku
KQotCi0gIFNldHRpbmcgREVCVUcgbWF5IGFsc28gYmUgaGVscGZ1bCBpZiB5b3UgYXJlIHRyeWlu
ZyB0byBtb2RpZnkKLSAgdGhpcyBjb2RlLiBUaGUgYXNzZXJ0aW9ucyBpbiB0aGUgY2hlY2sgcm91
dGluZXMgc3BlbGwgb3V0IGluIG1vcmUKLSAgZGV0YWlsIHRoZSBhc3N1bXB0aW9ucyBhbmQgaW52
YXJpYW50cyB1bmRlcmx5aW5nIHRoZSBhbGdvcml0aG1zLgotCi0gIFNldHRpbmcgREVCVUcgZG9l
cyBOT1QgcHJvdmlkZSBhbiBhdXRvbWF0ZWQgbWVjaGFuaXNtIGZvciBjaGVja2luZwotICB0aGF0
IGFsbCBhY2Nlc3NlcyB0byBtYWxsb2NlZCBtZW1vcnkgc3RheSB3aXRoaW4gdGhlaXIKLSAgYm91
bmRzLiBIb3dldmVyLCB0aGVyZSBhcmUgc2V2ZXJhbCBhZGQtb25zIGFuZCBhZGFwdGF0aW9ucyBv
ZiB0aGlzCi0gIG9yIG90aGVyIG1hbGxvY3MgYXZhaWxhYmxlIHRoYXQgZG8gdGhpcy4KLSovCi0K
LS8qCi0gIFRoZSB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgdXNlZCBmb3IgY29tcGFyaW5nIGFueSB0
d28gY2h1bmsgc2l6ZXMuCi0gIFRoaXMgc2hvdWxkIGJlIGF0IGxlYXN0IGFzIHdpZGUgYXMgc2l6
ZV90LCBidXQgc2hvdWxkIG5vdCBiZSBzaWduZWQuCi0qLwotCi0jaWZuZGVmIENIVU5LX1NJWkVf
VAotI2RlZmluZSBDSFVOS19TSVpFX1QgdW5zaWduZWQgbG9uZwotI2VuZGlmCi0KLS8qIAotICBU
aGUgdW5zaWduZWQgaW50ZWdlciB0eXBlIHVzZWQgdG8gaG9sZCBhZGRyZXNzZXMgd2hlbiB0aGV5
IGFyZSBhcmUKLSAgbWFuaXB1bGF0ZWQgYXMgaW50ZWdlcnMuIEV4Y2VwdCB0aGF0IGl0IGlzIG5v
dCBkZWZpbmVkIG9uIGFsbAotICBzeXN0ZW1zLCBpbnRwdHJfdCB3b3VsZCBzdWZmaWNlLgotKi8K
LSNpZm5kZWYgUFRSX1VJTlQKLSNkZWZpbmUgUFRSX1VJTlQgdW5zaWduZWQgbG9uZwotI2VuZGlm
Ci0KLQotLyoKLSAgSU5URVJOQUxfU0laRV9UIGlzIHRoZSB3b3JkLXNpemUgdXNlZCBmb3IgaW50
ZXJuYWwgYm9va2tlZXBpbmcKLSAgb2YgY2h1bmsgc2l6ZXMuCi0KLSAgVGhlIGRlZmF1bHQgdmVy
c2lvbiBpcyB0aGUgc2FtZSBhcyBzaXplX3QuCi0KLSAgV2hpbGUgbm90IHN0cmljdGx5IG5lY2Vz
c2FyeSwgaXQgaXMgYmVzdCB0byBkZWZpbmUgdGhpcyBhcyBhbgotICB1bnNpZ25lZCB0eXBlLCBl
dmVuIGlmIHNpemVfdCBpcyBhIHNpZ25lZCB0eXBlLiBUaGlzIG1heSBhdm9pZCBzb21lCi0gIGFy
dGlmaWNpYWwgc2l6ZSBsaW1pdGF0aW9ucyBvbiBzb21lIHN5c3RlbXMuCi0KLSAgT24gYSA2NC1i
aXQgbWFjaGluZSwgeW91IG1heSBiZSBhYmxlIHRvIHJlZHVjZSBtYWxsb2Mgb3ZlcmhlYWQgYnkK
LSAgZGVmaW5pbmcgSU5URVJOQUxfU0laRV9UIHRvIGJlIGEgMzIgYml0IGB1bnNpZ25lZCBpbnQn
IGF0IHRoZQotICBleHBlbnNlIG9mIG5vdCBiZWluZyBhYmxlIHRvIGhhbmRsZSBtb3JlIHRoYW4g
Ml4zMiBvZiBtYWxsb2NlZAotICBzcGFjZS4gSWYgdGhpcyBsaW1pdGF0aW9uIGlzIGFjY2VwdGFi
bGUsIHlvdSBhcmUgZW5jb3VyYWdlZCB0byBzZXQKLSAgdGhpcyB1bmxlc3MgeW91IGFyZSBvbiBh
IHBsYXRmb3JtIHJlcXVpcmluZyAxNmJ5dGUgYWxpZ25tZW50cy4gSW4KLSAgdGhpcyBjYXNlIHRo
ZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIHR1cm4gb3V0IHRvIG5lZ2F0ZSBhbnkKLSAgcG90ZW50
aWFsIGFkdmFudGFnZXMgb2YgZGVjcmVhc2luZyBzaXplX3Qgd29yZCBzaXplLgotCi0gIEltcGxl
bWVudG9yczogQmV3YXJlIG9mIHRoZSBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2Y6Ci0gICAgIC0g
SU5URVJOQUxfU0laRV9UIG1pZ2h0IGJlIHNpZ25lZCBvciB1bnNpZ25lZCwgbWlnaHQgYmUgMzIg
b3IgNjQgYml0cywKLSAgICAgICBhbmQgbWlnaHQgYmUgdGhlIHNhbWUgd2lkdGggYXMgaW50IG9y
IGFzIGxvbmcKLSAgICAgLSBzaXplX3QgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgd2lkdGggYW5kIHNp
Z25lZG5lc3MgYXMgSU5URVJOQUxfU0laRV9UCi0gICAgIC0gaW50IGFuZCBsb25nIG1pZ2h0IGJl
IDMyIG9yIDY0IGJpdHMsIGFuZCBtaWdodCBiZSB0aGUgc2FtZSB3aWR0aAotICBUbyBkZWFsIHdp
dGggdGhpcywgbW9zdCBjb21wYXJpc29ucyBhbmQgZGlmZmVyZW5jZSBjb21wdXRhdGlvbnMKLSAg
YW1vbmcgSU5URVJOQUxfU0laRV9UcyBzaG91bGQgY2FzdCB0aGVtIHRvIENIVU5LX1NJWkVfVCwg
YmVpbmcKLSAgYXdhcmUgb2YgdGhlIGZhY3QgdGhhdCBjYXN0aW5nIGFuIHVuc2lnbmVkIGludCB0
byBhIHdpZGVyIGxvbmcgZG9lcwotICBub3Qgc2lnbi1leHRlbmQuIChUaGlzIGFsc28gbWFrZXMg
Y2hlY2tpbmcgZm9yIG5lZ2F0aXZlIG51bWJlcnMKLSAgYXdrd2FyZC4pIFNvbWUgb2YgdGhlc2Ug
Y2FzdHMgcmVzdWx0IGluIGhhcm1sZXNzIGNvbXBpbGVyIHdhcm5pbmdzCi0gIG9uIHNvbWUgc3lz
dGVtcy4KLSovCi0KLSNpZm5kZWYgSU5URVJOQUxfU0laRV9UCi0jZGVmaW5lIElOVEVSTkFMX1NJ
WkVfVCBzaXplX3QKLSNlbmRpZgotCi0vKiBUaGUgY29ycmVzcG9uZGluZyB3b3JkIHNpemUgKi8K
LSNkZWZpbmUgU0laRV9TWiAgICAgICAgICAgICAgICAoc2l6ZW9mKElOVEVSTkFMX1NJWkVfVCkp
Ci0KLQotCi0vKgotICBNQUxMT0NfQUxJR05NRU5UIGlzIHRoZSBtaW5pbXVtIGFsaWdubWVudCBm
b3IgbWFsbG9jJ2VkIGNodW5rcy4KLSAgSXQgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBhdCBsZWFz
dCAyICogU0laRV9TWiwgZXZlbiBvbiBtYWNoaW5lcwotICBmb3Igd2hpY2ggc21hbGxlciBhbGln
bm1lbnRzIHdvdWxkIHN1ZmZpY2UuIEl0IG1heSBiZSBkZWZpbmVkIGFzCi0gIGxhcmdlciB0aGFu
IHRoaXMgdGhvdWdoLiBOb3RlIGhvd2V2ZXIgdGhhdCBjb2RlIGFuZCBkYXRhIHN0cnVjdHVyZXMK
LSAgYXJlIG9wdGltaXplZCBmb3IgdGhlIGNhc2Ugb2YgOC1ieXRlIGFsaWdubWVudC4KLSovCi0K
LQotI2lmbmRlZiBNQUxMT0NfQUxJR05NRU5UCi0jZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgICAg
ICAgKDIgKiBTSVpFX1NaKQotI2VuZGlmCi0KLS8qIFRoZSBjb3JyZXNwb25kaW5nIGJpdCBtYXNr
IHZhbHVlICovCi0jZGVmaW5lIE1BTExPQ19BTElHTl9NQVNLICAgICAgKE1BTExPQ19BTElHTk1F
TlQgLSAxKQotCi0KLQotLyoKLSAgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTIHNob3VsZCBiZSBz
ZXQgaWYgYSBjYWxsIHRvCi0gIHJlYWxsb2Mgd2l0aCB6ZXJvIGJ5dGVzIHNob3VsZCBiZSB0aGUg
c2FtZSBhcyBhIGNhbGwgdG8gZnJlZS4KLSAgU29tZSBwZW9wbGUgdGhpbmsgaXQgc2hvdWxkLiBP
dGhlcndpc2UsIHNpbmNlIHRoaXMgbWFsbG9jCi0gIHJldHVybnMgYSB1bmlxdWUgcG9pbnRlciBm
b3IgbWFsbG9jKDApLCBzbyBkb2VzIHJlYWxsb2MocCwgMCkuCi0qLwotCi0vKiAgICNkZWZpbmUg
UkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICovCi0KLS8qCi0gIFRSSU1fRkFTVEJJTlMgY29udHJv
bHMgd2hldGhlciBmcmVlKCkgb2YgYSB2ZXJ5IHNtYWxsIGNodW5rIGNhbgotICBpbW1lZGlhdGVs
eSBsZWFkIHRvIHRyaW1taW5nLiBTZXR0aW5nIHRvIHRydWUgKDEpIGNhbiByZWR1Y2UgbWVtb3J5
Ci0gIGZvb3RwcmludCwgYnV0IHdpbGwgYWxtb3N0IGFsd2F5cyBzbG93IGRvd24gcHJvZ3JhbXMg
dGhhdCB1c2UgYSBsb3QKLSAgb2Ygc21hbGwgY2h1bmtzLgotCi0gIERlZmluZSB0aGlzIG9ubHkg
aWYgeW91IGFyZSB3aWxsaW5nIHRvIGdpdmUgdXAgc29tZSBzcGVlZCB0byBtb3JlCi0gIGFnZ3Jl
c3NpdmVseSByZWR1Y2Ugc3lzdGVtLWxldmVsIG1lbW9yeSBmb290cHJpbnQgd2hlbiByZWxlYXNp
bmcKLSAgbWVtb3J5IGluIHByb2dyYW1zIHRoYXQgdXNlIG1hbnkgc21hbGwgY2h1bmtzLiAgWW91
IGNhbiBnZXQKLSAgZXNzZW50aWFsbHkgdGhlIHNhbWUgZWZmZWN0IGJ5IHNldHRpbmcgTVhGQVNU
IHRvIDAsIGJ1dCB0aGlzIGNhbgotICBsZWFkIHRvIGV2ZW4gZ3JlYXRlciBzbG93ZG93bnMgaW4g
cHJvZ3JhbXMgdXNpbmcgbWFueSBzbWFsbCBjaHVua3MuCi0gIFRSSU1fRkFTVEJJTlMgaXMgYW4g
aW4tYmV0d2VlbiBjb21waWxlLXRpbWUgb3B0aW9uLCB0aGF0IGRpc2FibGVzCi0gIG9ubHkgdGhv
c2UgY2h1bmtzIGJvcmRlcmluZyB0b3Btb3N0IG1lbW9yeSBmcm9tIGJlaW5nIHBsYWNlZCBpbgot
ICBmYXN0Ymlucy4KLSovCi0KLSNpZm5kZWYgVFJJTV9GQVNUQklOUwotI2RlZmluZSBUUklNX0ZB
U1RCSU5TICAwCi0jZW5kaWYKLQotCi0vKgotICBVU0VfRExfUFJFRklYIHdpbGwgcHJlZml4IGFs
bCBwdWJsaWMgcm91dGluZXMgd2l0aCB0aGUgc3RyaW5nICdkbCcuCi0gIFRoaXMgaXMgbmVjZXNz
YXJ5IHdoZW4geW91IG9ubHkgd2FudCB0byB1c2UgdGhpcyBtYWxsb2MgaW4gb25lIHBhcnQgCi0g
IG9mIGEgcHJvZ3JhbSwgdXNpbmcgeW91ciByZWd1bGFyIHN5c3RlbSBtYWxsb2MgZWxzZXdoZXJl
LgotKi8KLQotI2RlZmluZSBVU0VfRExfUFJFRklYCi0KLQotLyoKLSAgVVNFX01BTExPQ19MT0NL
IGNhdXNlcyB3cmFwcGVyIGZ1bmN0aW9ucyB0byBzdXJyb3VuZCBlYWNoCi0gIGNhbGxhYmxlIHJv
dXRpbmUgd2l0aCBwdGhyZWFkIG11dGV4IGxvY2svdW5sb2NrLgotCi0gIFVTRV9NQUxMT0NfTE9D
SyBmb3JjZXMgVVNFX1BVQkxJQ19NQUxMT0NfV1JBUFBFUlMgdG8gYmUgZGVmaW5lZAotKi8KLQot
Ci0vKiAjZGVmaW5lIFVTRV9NQUxMT0NfTE9DSyAqLwotCi0KLS8qCi0gIElmIFVTRV9QVUJMSUNf
TUFMTE9DX1dSQVBQRVJTIGlzIGRlZmluZWQsIGV2ZXJ5IHB1YmxpYyByb3V0aW5lIGlzCi0gIGFj
dHVhbGx5IGEgd3JhcHBlciBmdW5jdGlvbiB0aGF0IGZpcnN0IGNhbGxzIE1BTExPQ19QUkVBQ1RJ
T04sIHRoZW4KLSAgY2FsbHMgdGhlIGludGVybmFsIHJvdXRpbmUsIGFuZCBmb2xsb3dzIGl0IHdp
dGgKLSAgTUFMTE9DX1BPU1RBQ1RJT04uIFRoaXMgaXMgbmVlZGVkIGZvciBsb2NraW5nLCBidXQg
eW91IGNhbiBhbHNvIHVzZQotICB0aGlzLCB3aXRob3V0IFVTRV9NQUxMT0NfTE9DSywgZm9yIHB1
cnBvc2VzIG9mIGludGVyY2VwdGlvbiwKLSAgaW5zdHJ1bWVudGF0aW9uLCBldGMuIEl0IGlzIGEg
c2FkIGZhY3QgdGhhdCB1c2luZyB3cmFwcGVycyBvZnRlbgotICBub3RpY2VhYmx5IGRlZ3JhZGVz
IHBlcmZvcm1hbmNlIG9mIG1hbGxvYy1pbnRlbnNpdmUgcHJvZ3JhbXMuCi0qLwotCi0jaWZkZWYg
VVNFX01BTExPQ19MT0NLCi0jZGVmaW5lIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTCi0jZWxz
ZQotLyogI2RlZmluZSBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVSUyAqLwotI2VuZGlmCi0KLQot
LyogCi0gICBUd28tcGhhc2UgbmFtZSB0cmFuc2xhdGlvbi4KLSAgIEFsbCBvZiB0aGUgYWN0dWFs
IHJvdXRpbmVzIGFyZSBnaXZlbiBtYW5nbGVkIG5hbWVzLgotICAgV2hlbiB3cmFwcGVycyBhcmUg
dXNlZCwgdGhleSBiZWNvbWUgdGhlIHB1YmxpYyBjYWxsYWJsZSB2ZXJzaW9ucy4KLSAgIFdoZW4g
RExfUFJFRklYIGlzIHVzZWQsIHRoZSBjYWxsYWJsZSBuYW1lcyBhcmUgcHJlZml4ZWQuCi0qLwot
Ci0jaWZuZGVmIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTCi0jZGVmaW5lIGNBTExPYyAgICAg
IHB1YmxpY19jQUxMT2MKLSNkZWZpbmUgZlJFZSAgICAgICAgcHVibGljX2ZSRWUKLSNkZWZpbmUg
Y0ZSRWUgICAgICAgcHVibGljX2NGUkVlCi0jZGVmaW5lIG1BTExPYyAgICAgIHB1YmxpY19tQUxM
T2MKLSNkZWZpbmUgbUVNQUxJR24gICAgcHVibGljX21FTUFMSUduCi0jZGVmaW5lIHJFQUxMT2Mg
ICAgIHB1YmxpY19yRUFMTE9jCi0jZGVmaW5lIHZBTExPYyAgICAgIHB1YmxpY192QUxMT2MKLSNk
ZWZpbmUgcFZBTExPYyAgICAgcHVibGljX3BWQUxMT2MKLSNkZWZpbmUgbUFMTElORm8gICAgcHVi
bGljX21BTExJTkZvCi0jZGVmaW5lIG1BTExPUHQgICAgIHB1YmxpY19tQUxMT1B0Ci0jZGVmaW5l
IG1UUkltICAgICAgIHB1YmxpY19tVFJJbQotI2RlZmluZSBtU1RBVHMgICAgICBwdWJsaWNfbVNU
QVRzCi0jZGVmaW5lIG1VU0FCTGUgICAgIHB1YmxpY19tVVNBQkxlCi0jZGVmaW5lIGlDQUxMT2Mg
ICAgIHB1YmxpY19pQ0FMTE9jCi0jZGVmaW5lIGlDT01BTExPYyAgIHB1YmxpY19pQ09NQUxMT2MK
LSNlbmRpZgotCi0jaWZkZWYgVVNFX0RMX1BSRUZJWAotI2RlZmluZSBwdWJsaWNfY0FMTE9jICAg
IG1haW5fdGhyZWFkX2NhbGxvYwotI2RlZmluZSBwdWJsaWNfZlJFZSAgICAgIG1haW5fdGhyZWFk
X2ZyZWUKLSNkZWZpbmUgcHVibGljX2NGUkVlICAgICBtYWluX3RocmVhZF9jZnJlZQotI2RlZmlu
ZSBwdWJsaWNfbUFMTE9jICAgIG1haW5fdGhyZWFkX21hbGxvYwotI2RlZmluZSBwdWJsaWNfbUVN
QUxJR24gIG1haW5fdGhyZWFkX21lbWFsaWduCi0jZGVmaW5lIHB1YmxpY19yRUFMTE9jICAgbWFp
bl90aHJlYWRfcmVhbGxvYwotI2RlZmluZSBwdWJsaWNfdkFMTE9jICAgIG1haW5fdGhyZWFkX3Zh
bGxvYwotI2RlZmluZSBwdWJsaWNfcFZBTExPYyAgIG1haW5fdGhyZWFkX3B2YWxsb2MKLSNkZWZp
bmUgcHVibGljX21BTExJTkZvICBtYWluX3RocmVhZF9tYWxsaW5mbwotI2RlZmluZSBwdWJsaWNf
bUFMTE9QdCAgIG1haW5fdGhyZWFkX21hbGxvcHQKLSNkZWZpbmUgcHVibGljX21UUkltICAgICBt
YWluX3RocmVhZF9tYWxsb2NfdHJpbQotI2RlZmluZSBwdWJsaWNfbVNUQVRzICAgIG1haW5fdGhy
ZWFkX21hbGxvY19zdGF0cwotI2RlZmluZSBwdWJsaWNfbVVTQUJMZSAgIG1haW5fdGhyZWFkX21h
bGxvY191c2FibGVfc2l6ZQotI2RlZmluZSBwdWJsaWNfaUNBTExPYyAgIG1haW5fdGhyZWFkX2lu
ZGVwZW5kZW50X2NhbGxvYwotI2RlZmluZSBwdWJsaWNfaUNPTUFMTE9jIG1haW5fdGhyZWFkX2lu
ZGVwZW5kZW50X2NvbWFsbG9jCi0jZWxzZSAvKiBVU0VfRExfUFJFRklYICovCi0jZGVmaW5lIHB1
YmxpY19jQUxMT2MgICAgY2FsbG9jCi0jZGVmaW5lIHB1YmxpY19mUkVlICAgICAgZnJlZQotI2Rl
ZmluZSBwdWJsaWNfY0ZSRWUgICAgIGNmcmVlCi0jZGVmaW5lIHB1YmxpY19tQUxMT2MgICAgbWFs
bG9jCi0jZGVmaW5lIHB1YmxpY19tRU1BTElHbiAgbWVtYWxpZ24KLSNkZWZpbmUgcHVibGljX3JF
QUxMT2MgICByZWFsbG9jCi0jZGVmaW5lIHB1YmxpY192QUxMT2MgICAgdmFsbG9jCi0jZGVmaW5l
IHB1YmxpY19wVkFMTE9jICAgcHZhbGxvYwotI2RlZmluZSBwdWJsaWNfbUFMTElORm8gIG1hbGxp
bmZvCi0jZGVmaW5lIHB1YmxpY19tQUxMT1B0ICAgbWFsbG9wdAotI2RlZmluZSBwdWJsaWNfbVRS
SW0gICAgIG1hbGxvY190cmltCi0jZGVmaW5lIHB1YmxpY19tU1RBVHMgICAgbWFsbG9jX3N0YXRz
Ci0jZGVmaW5lIHB1YmxpY19tVVNBQkxlICAgbWFsbG9jX3VzYWJsZV9zaXplCi0jZGVmaW5lIHB1
YmxpY19pQ0FMTE9jICAgaW5kZXBlbmRlbnRfY2FsbG9jCi0jZGVmaW5lIHB1YmxpY19pQ09NQUxM
T2MgaW5kZXBlbmRlbnRfY29tYWxsb2MKLSNlbmRpZiAvKiBVU0VfRExfUFJFRklYICovCi0KLQot
LyoKLSAgSEFWRV9NRU1DUFkgc2hvdWxkIGJlIGRlZmluZWQgaWYgeW91IGFyZSBub3Qgb3RoZXJ3
aXNlIHVzaW5nCi0gIEFOU0kgU1REIEMsIGJ1dCBzdGlsbCBoYXZlIG1lbWNweSBhbmQgbWVtc2V0
IGluIHlvdXIgQyBsaWJyYXJ5Ci0gIGFuZCB3YW50IHRvIHVzZSB0aGVtIGluIGNhbGxvYyBhbmQg
cmVhbGxvYy4gT3RoZXJ3aXNlIHNpbXBsZQotICBtYWNybyB2ZXJzaW9ucyBhcmUgZGVmaW5lZCBi
ZWxvdy4KLQotICBVU0VfTUVNQ1BZIHNob3VsZCBiZSBkZWZpbmVkIGFzIDEgaWYgeW91IGFjdHVh
bGx5IHdhbnQgdG8KLSAgaGF2ZSBtZW1zZXQgYW5kIG1lbWNweSBjYWxsZWQuIFBlb3BsZSByZXBv
cnQgdGhhdCB0aGUgbWFjcm8KLSAgdmVyc2lvbnMgYXJlIGZhc3RlciB0aGFuIGxpYmMgdmVyc2lv
bnMgb24gc29tZSBzeXN0ZW1zLgotICAKLSAgRXZlbiBpZiBVU0VfTUVNQ1BZIGlzIHNldCB0byAx
LCBsb29wcyB0byBjb3B5L2NsZWFyIHNtYWxsIGNodW5rcwotICAob2YgPD0gMzYgYnl0ZXMpIGFy
ZSBtYW51YWxseSB1bnJvbGxlZCBpbiByZWFsbG9jIGFuZCBjYWxsb2MuCi0qLwotCi0jZGVmaW5l
IEhBVkVfTUVNQ1BZCi0KLSNpZm5kZWYgVVNFX01FTUNQWQotI2lmZGVmIEhBVkVfTUVNQ1BZCi0j
ZGVmaW5lIFVTRV9NRU1DUFkgMQotI2Vsc2UKLSNkZWZpbmUgVVNFX01FTUNQWSAwCi0jZW5kaWYK
LSNlbmRpZgotCi0KLSNpZiAoX19TVERfQyB8fCBkZWZpbmVkKEhBVkVfTUVNQ1BZKSkKLQotI2lm
ZGVmIFdJTjMyCi0vKiBPbiBXaW4zMiBtZW1zZXQgYW5kIG1lbWNweSBhcmUgYWxyZWFkeSBkZWNs
YXJlZCBpbiB3aW5kb3dzLmggKi8KLSNlbHNlCi0jaWYgX19TVERfQwotZXh0ZXJuICJDIiB7Ci12
b2lkKiBtZW1zZXQodm9pZCosIGludCwgc2l6ZV90KTsKLXZvaWQqIG1lbWNweSh2b2lkKiwgY29u
c3Qgdm9pZCosIHNpemVfdCk7Ci19Ci0jZWxzZQotZXh0ZXJuICJDIiB7Ci1Wb2lkX3QqIG1lbXNl
dCgpOwotVm9pZF90KiBtZW1jcHkoKTsKLX0KLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQotLyoK
LSAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OIGlzIHRoZSBhY3Rpb24gdG8gdGFrZSBiZWZvcmUgInJl
dHVybiAwIiB3aGVuCi0gIG1hbGxvYyBmYWlscyB0byBiZSBhYmxlIHRvIHJldHVybiBtZW1vcnks
IGVpdGhlciBiZWNhdXNlIG1lbW9yeSBpcwotICBleGhhdXN0ZWQgb3IgYmVjYXVzZSBvZiBpbGxl
Z2FsIGFyZ3VtZW50cy4KLSAgCi0gIEJ5IGRlZmF1bHQsIHNldHMgZXJybm8gaWYgcnVubmluZyBv
biBTVERfQyBwbGF0Zm9ybSwgZWxzZSBkb2VzIG5vdGhpbmcuICAKLSovCi0KLSNpZm5kZWYgTUFM
TE9DX0ZBSUxVUkVfQUNUSU9OCi0jaWYgX19TVERfQwotI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9B
Q1RJT04gXAotICAgZXJybm8gPSBFTk9NRU07Ci0KLSNlbHNlCi0jZGVmaW5lIE1BTExPQ19GQUlM
VVJFX0FDVElPTgotI2VuZGlmCi0jZW5kaWYKLQotLyoKLSAgTU9SRUNPUkUtcmVsYXRlZCBkZWNs
YXJhdGlvbnMuIEJ5IGRlZmF1bHQsIHJlbHkgb24gc2JyawotKi8KLQotCi0jaWZkZWYgTEFDS1Nf
VU5JU1REX0gKLSNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19PcGVuQlNE
X18pICYmICFkZWZpbmVkKF9fTmV0QlNEX18pCi0jaWYgX19TVERfQwotZXh0ZXJuIFZvaWRfdCog
ICAgIHNicmsocHRyZGlmZl90KTsKLSNlbHNlCi1leHRlcm4gVm9pZF90KiAgICAgc2JyaygpOwot
I2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0vKgotICBNT1JFQ09SRSBpcyB0aGUgbmFtZSBvZiB0
aGUgcm91dGluZSB0byBjYWxsIHRvIG9idGFpbiBtb3JlIG1lbW9yeQotICBmcm9tIHRoZSBzeXN0
ZW0uICBTZWUgYmVsb3cgZm9yIGdlbmVyYWwgZ3VpZGFuY2Ugb24gd3JpdGluZwotICBhbHRlcm5h
dGl2ZSBNT1JFQ09SRSBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgYSB2ZXJzaW9uIGZvciBXSU4zMiBh
bmQgYQotICBzYW1wbGUgdmVyc2lvbiBmb3IgcHJlLU9TWCBtYWNvcy4KLSovCi0KLSNpZm5kZWYg
TU9SRUNPUkUKLSNkZWZpbmUgTU9SRUNPUkUgc2JyawotI2VuZGlmCi0KLS8qCi0gIE1PUkVDT1JF
X0ZBSUxVUkUgaXMgdGhlIHZhbHVlIHJldHVybmVkIHVwb24gZmFpbHVyZSBvZiBNT1JFQ09SRQot
ICBhcyB3ZWxsIGFzIG1tYXAuIFNpbmNlIGl0IGNhbm5vdCBiZSBhbiBvdGhlcndpc2UgdmFsaWQg
bWVtb3J5IGFkZHJlc3MsCi0gIGFuZCBtdXN0IHJlZmxlY3QgdmFsdWVzIG9mIHN0YW5kYXJkIHN5
cyBjYWxscywgeW91IHByb2JhYmx5IG91Z2h0IG5vdAotICB0cnkgdG8gcmVkZWZpbmUgaXQuCi0q
LwotCi0jaWZuZGVmIE1PUkVDT1JFX0ZBSUxVUkUKLSNkZWZpbmUgTU9SRUNPUkVfRkFJTFVSRSAo
LTEpCi0jZW5kaWYKLQotLyoKLSAgSWYgTU9SRUNPUkVfQ09OVElHVU9VUyBpcyB0cnVlLCB0YWtl
IGFkdmFudGFnZSBvZiBmYWN0IHRoYXQKLSAgY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUg
d2l0aCBwb3NpdGl2ZSBhcmd1bWVudHMgYWx3YXlzIHJldHVybgotICBjb250aWd1b3VzIGluY3Jl
YXNpbmcgYWRkcmVzc2VzLiAgVGhpcyBpcyB0cnVlIG9mIHVuaXggc2Jyay4gIEV2ZW4KLSAgaWYg
bm90IGRlZmluZWQsIHdoZW4gcmVnaW9ucyBoYXBwZW4gdG8gYmUgY29udGlndW91cywgbWFsbG9j
IHdpbGwKLSAgcGVybWl0IGFsbG9jYXRpb25zIHNwYW5uaW5nIHJlZ2lvbnMgb2J0YWluZWQgZnJv
bSBkaWZmZXJlbnQKLSAgY2FsbHMuIEJ1dCBkZWZpbmluZyB0aGlzIHdoZW4gYXBwbGljYWJsZSBl
bmFibGVzIHNvbWUgc3Ryb25nZXIKLSAgY29uc2lzdGVuY3kgY2hlY2tzIGFuZCBzcGFjZSBlZmZp
Y2llbmNpZXMuIAotKi8KLQotI2lmbmRlZiBNT1JFQ09SRV9DT05USUdVT1VTCi0jZGVmaW5lIE1P
UkVDT1JFX0NPTlRJR1VPVVMgMQotI2VuZGlmCi0KLS8qCi0gIERlZmluZSBNT1JFQ09SRV9DQU5O
T1RfVFJJTSBpZiB5b3VyIHZlcnNpb24gb2YgTU9SRUNPUkUKLSAgY2Fubm90IHJlbGVhc2Ugc3Bh
Y2UgYmFjayB0byB0aGUgc3lzdGVtIHdoZW4gZ2l2ZW4gbmVnYXRpdmUKLSAgYXJndW1lbnRzLiBU
aGlzIGlzIGdlbmVyYWxseSBuZWNlc3Nhcnkgb25seSBpZiB5b3UgYXJlIHVzaW5nCi0gIGEgaGFu
ZC1jcmFmdGVkIE1PUkVDT1JFIGZ1bmN0aW9uIHRoYXQgY2Fubm90IGhhbmRsZSBuZWdhdGl2ZSBh
cmd1bWVudHMuCi0qLwotCi0vKiAjZGVmaW5lIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCi0KLQot
LyoKLSAgRGVmaW5lIEhBVkVfTU1BUCBhcyB0cnVlIHRvIG9wdGlvbmFsbHkgbWFrZSBtYWxsb2Mo
KSB1c2UgbW1hcCgpIHRvCi0gIGFsbG9jYXRlIHZlcnkgbGFyZ2UgYmxvY2tzLiAgVGhlc2Ugd2ls
bCBiZSByZXR1cm5lZCB0byB0aGUKLSAgb3BlcmF0aW5nIHN5c3RlbSBpbW1lZGlhdGVseSBhZnRl
ciBhIGZyZWUoKS4gQWxzbywgaWYgbW1hcAotICBpcyBhdmFpbGFibGUsIGl0IGlzIHVzZWQgYXMg
YSBiYWNrdXAgc3RyYXRlZ3kgaW4gY2FzZXMgd2hlcmUKLSAgTU9SRUNPUkUgZmFpbHMgdG8gcHJv
dmlkZSBzcGFjZSBmcm9tIHN5c3RlbS4KLQotICBUaGlzIG1hbGxvYyBpcyBiZXN0IHR1bmVkIHRv
IHdvcmsgd2l0aCBtbWFwIGZvciBsYXJnZSByZXF1ZXN0cy4KLSAgSWYgeW91IGRvIG5vdCBoYXZl
IG1tYXAsIG9wZXJhdGlvbnMgaW52b2x2aW5nIHZlcnkgbGFyZ2UgY2h1bmtzICgxTUIKLSAgb3Ig
c28pIG1heSBiZSBzbG93ZXIgdGhhbiB5b3UnZCBsaWtlLgotKi8KLQotI2lmbmRlZiBIQVZFX01N
QVAKLSNkZWZpbmUgSEFWRV9NTUFQIDEKLSNlbmRpZgotCi0jaWYgSEFWRV9NTUFQCi0vKiAKLSAg
IFN0YW5kYXJkIHVuaXggbW1hcCB1c2luZyAvZGV2L3plcm8gY2xlYXJzIG1lbW9yeSBzbyBjYWxs
b2MgZG9lc24ndAotICAgbmVlZCB0by4KLSovCi0KLSNpZm5kZWYgTU1BUF9DTEVBUlMKLSNkZWZp
bmUgTU1BUF9DTEVBUlMgMQotI2VuZGlmCi0KLSNlbHNlIC8qIG5vIG1tYXAgKi8KLSNpZm5kZWYg
TU1BUF9DTEVBUlMKLSNkZWZpbmUgTU1BUF9DTEVBUlMgMAotI2VuZGlmCi0jZW5kaWYKLQotCi0v
KiAKLSAgIE1NQVBfQVNfTU9SRUNPUkVfU0laRSBpcyB0aGUgbWluaW11bSBtbWFwIHNpemUgYXJn
dW1lbnQgdG8gdXNlIGlmCi0gICBzYnJrIGZhaWxzLCBhbmQgbW1hcCBpcyB1c2VkIGFzIGEgYmFj
a3VwICh3aGljaCBpcyBkb25lIG9ubHkgaWYKLSAgIEhBVkVfTU1BUCkuICBUaGUgdmFsdWUgbXVz
dCBiZSBhIG11bHRpcGxlIG9mIHBhZ2Ugc2l6ZS4gIFRoaXMKLSAgIGJhY2t1cCBzdHJhdGVneSBn
ZW5lcmFsbHkgYXBwbGllcyBvbmx5IHdoZW4gc3lzdGVtcyBoYXZlICJob2xlcyIgaW4KLSAgIGFk
ZHJlc3Mgc3BhY2UsIHNvIHNicmsgY2Fubm90IHBlcmZvcm0gY29udGlndW91cyBleHBhbnNpb24s
IGJ1dAotICAgdGhlcmUgaXMgc3RpbGwgc3BhY2UgYXZhaWxhYmxlIG9uIHN5c3RlbS4gIE9uIHN5
c3RlbXMgZm9yIHdoaWNoCi0gICB0aGlzIGlzIGtub3duIHRvIGJlIHVzZWZ1bCAoaS5lLiBtb3N0
IGxpbnV4IGtlcm5lbHMpLCB0aGlzIG9jY3VycwotICAgb25seSB3aGVuIHByb2dyYW1zIGFsbG9j
YXRlIGh1Z2UgYW1vdW50cyBvZiBtZW1vcnkuICBCZXR3ZWVuIHRoaXMsCi0gICBhbmQgdGhlIGZh
Y3QgdGhhdCBtbWFwIHJlZ2lvbnMgdGVuZCB0byBiZSBsaW1pdGVkLCB0aGUgc2l6ZSBzaG91bGQK
LSAgIGJlIGxhcmdlLCB0byBhdm9pZCB0b28gbWFueSBtbWFwIGNhbGxzIGFuZCB0aHVzIGF2b2lk
IHJ1bm5pbmcgb3V0Ci0gICBvZiBrZXJuZWwgcmVzb3VyY2VzLgotKi8KLQotI2lmbmRlZiBNTUFQ
X0FTX01PUkVDT1JFX1NJWkUKLSNkZWZpbmUgTU1BUF9BU19NT1JFQ09SRV9TSVpFICgxMDI0ICog
MTAyNCkKLSNlbmRpZgotCi0vKgotICBEZWZpbmUgSEFWRV9NUkVNQVAgdG8gbWFrZSByZWFsbG9j
KCkgdXNlIG1yZW1hcCgpIHRvIHJlLWFsbG9jYXRlCi0gIGxhcmdlIGJsb2Nrcy4gIFRoaXMgaXMg
Y3VycmVudGx5IG9ubHkgcG9zc2libGUgb24gTGludXggd2l0aAotICBrZXJuZWwgdmVyc2lvbnMg
bmV3ZXIgdGhhbiAxLjMuNzcuCi0qLwotCi0jaWZuZGVmIEhBVkVfTVJFTUFQCi0jaWZkZWYgbGlu
dXgKLSNkZWZpbmUgSEFWRV9NUkVNQVAgMQotI2Vsc2UKLSNkZWZpbmUgSEFWRV9NUkVNQVAgMAot
I2VuZGlmCi0KLSNlbmRpZiAvKiBIQVZFX01NQVAgKi8KLQotCi0vKgotICBUaGUgc3lzdGVtIHBh
Z2Ugc2l6ZS4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhpcyBtYWxsb2MgbWFuYWdlcwotICBt
ZW1vcnkgZnJvbSB0aGUgc3lzdGVtIGluIHBhZ2Utc2l6ZSB1bml0cy4gIE5vdGUgdGhhdCB0aGlz
IHZhbHVlIGlzCi0gIGNhY2hlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW50byBhIGZpZWxkIG9m
IG1hbGxvY19zdGF0ZS4gU28gZXZlbgotICBpZiBtYWxsb2NfZ2V0cGFnZXNpemUgaXMgYSBmdW5j
dGlvbiwgaXQgaXMgb25seSBjYWxsZWQgb25jZS4KLQotICBUaGUgZm9sbG93aW5nIG1lY2hhbmlj
cyBmb3IgZ2V0cGFnZXNpemUgd2VyZSBhZGFwdGVkIGZyb20gYnNkL2dudQotICBnZXRwYWdlc2l6
ZS5oLiBJZiBub25lIG9mIHRoZSBzeXN0ZW0tcHJvYmVzIGhlcmUgYXBwbHksIGEgdmFsdWUgb2YK
LSAgNDA5NiBpcyB1c2VkLCB3aGljaCBzaG91bGQgYmUgT0s6IElmIHRoZXkgZG9uJ3QgYXBwbHks
IHRoZW4gdXNpbmcKLSAgdGhlIGFjdHVhbCB2YWx1ZSBwcm9iYWJseSBkb2Vzbid0IGltcGFjdCBw
ZXJmb3JtYW5jZS4KLSovCi0KLQotI2lmbmRlZiBtYWxsb2NfZ2V0cGFnZXNpemUKLQotI2lmbmRl
ZiBMQUNLU19VTklTVERfSAotIyAgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotIyAgaWZk
ZWYgX1NDX1BBR0VTSVpFICAgICAgICAgLyogc29tZSBTVlI0IHN5c3RlbXMgb21pdCBhbiB1bmRl
cnNjb3JlICovCi0jICAgIGlmbmRlZiBfU0NfUEFHRV9TSVpFCi0jICAgICAgZGVmaW5lIF9TQ19Q
QUdFX1NJWkUgX1NDX1BBR0VTSVpFCi0jICAgIGVuZGlmCi0jICBlbmRpZgotCi0jICBpZmRlZiBf
U0NfUEFHRV9TSVpFCi0jICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgc3lzY29uZihfU0Nf
UEFHRV9TSVpFKQotIyAgZWxzZQotIyAgICBpZiBkZWZpbmVkKEJTRCkgfHwgZGVmaW5lZChER1VY
KSB8fCBkZWZpbmVkKEhBVkVfR0VUUEFHRVNJWkUpCi0gICAgICAgZXh0ZXJuIHNpemVfdCBnZXRw
YWdlc2l6ZSgpOwotIyAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUo
KQotIyAgICBlbHNlCi0jICAgICAgaWZkZWYgV0lOMzIgLyogdXNlIHN1cHBsaWVkIGVtdWxhdGlv
biBvZiBnZXRwYWdlc2l6ZSAqLwotIyAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBn
ZXRwYWdlc2l6ZSgpIAotIyAgICAgIGVsc2UKLSMgICAgICAgIGlmbmRlZiBMQUNLU19TWVNfUEFS
QU1fSAotIyAgICAgICAgICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSMgICAgICAgIGVuZGlmCi0j
ICAgICAgICBpZmRlZiBFWEVDX1BBR0VTSVpFCi0jICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0
cGFnZXNpemUgRVhFQ19QQUdFU0laRQotIyAgICAgICAgZWxzZQotIyAgICAgICAgICBpZmRlZiBO
QlBHCi0jICAgICAgICAgICAgaWZuZGVmIENMU0laRQotIyAgICAgICAgICAgICAgZGVmaW5lIG1h
bGxvY19nZXRwYWdlc2l6ZSBOQlBHCi0jICAgICAgICAgICAgZWxzZQotIyAgICAgICAgICAgICAg
ZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoTkJQRyAqIENMU0laRSkKLSMgICAgICAgICAgICBl
bmRpZgotIyAgICAgICAgICBlbHNlCi0jICAgICAgICAgICAgaWZkZWYgTkJQQwotIyAgICAgICAg
ICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBOQlBDCi0jICAgICAgICAgICAgZWxzZQot
IyAgICAgICAgICAgICAgaWZkZWYgUEFHRVNJWkUKLSMgICAgICAgICAgICAgICAgZGVmaW5lIG1h
bGxvY19nZXRwYWdlc2l6ZSBQQUdFU0laRQotIyAgICAgICAgICAgICAgZWxzZSAvKiBqdXN0IGd1
ZXNzICovCi0jICAgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKDQwOTYp
IAotIyAgICAgICAgICAgICAgZW5kaWYKLSMgICAgICAgICAgICBlbmRpZgotIyAgICAgICAgICBl
bmRpZgotIyAgICAgICAgZW5kaWYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYK
LSNlbmRpZgotCi0vKgotICBUaGlzIHZlcnNpb24gb2YgbWFsbG9jIHN1cHBvcnRzIHRoZSBzdGFu
ZGFyZCBTVklEL1hQRyBtYWxsaW5mbwotICByb3V0aW5lIHRoYXQgcmV0dXJucyBhIHN0cnVjdCBj
b250YWluaW5nIHVzYWdlIHByb3BlcnRpZXMgYW5kCi0gIHN0YXRpc3RpY3MuIEl0IHNob3VsZCB3
b3JrIG9uIGFueSBTVklEL1hQRyBjb21wbGlhbnQgc3lzdGVtIHRoYXQgaGFzCi0gIGEgL3Vzci9p
bmNsdWRlL21hbGxvYy5oIGRlZmluaW5nIHN0cnVjdCBtYWxsaW5mby4gKElmIHlvdSdkIGxpa2Ug
dG8KLSAgaW5zdGFsbCBzdWNoIGEgdGhpbmcgeW91cnNlbGYsIGN1dCBvdXQgdGhlIHByZWxpbWlu
YXJ5IGRlY2xhcmF0aW9ucwotICBhcyBkZXNjcmliZWQgYWJvdmUgYW5kIGJlbG93IGFuZCBzYXZl
IHRoZW0gaW4gYSBtYWxsb2MuaCBmaWxlLiBCdXQKLSAgdGhlcmUncyBubyBjb21wZWxsaW5nIHJl
YXNvbiB0byBib3RoZXIgdG8gZG8gdGhpcy4pCi0KLSAgVGhlIG1haW4gZGVjbGFyYXRpb24gbmVl
ZGVkIGlzIHRoZSBtYWxsaW5mbyBzdHJ1Y3QgdGhhdCBpcyByZXR1cm5lZAotICAoYnktY29weSkg
YnkgbWFsbGluZm8oKS4gIFRoZSBTVklEL1hQRyBtYWxsb2luZm8gc3RydWN0IGNvbnRhaW5zIGEK
LSAgYnVuY2ggb2YgZmllbGRzIHRoYXQgYXJlIG5vdCBldmVuIG1lYW5pbmdmdWwgaW4gdGhpcyB2
ZXJzaW9uIG9mCi0gIG1hbGxvYy4gIFRoZXNlIGZpZWxkcyBhcmUgYXJlIGluc3RlYWQgZmlsbGVk
IGJ5IG1hbGxpbmZvKCkgd2l0aAotICBvdGhlciBudW1iZXJzIHRoYXQgbWlnaHQgYmUgb2YgaW50
ZXJlc3QuCi0KLSAgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCBzaG91bGQgYmUgc2V0IGlmIHlv
dSBoYXZlIGEKLSAgL3Vzci9pbmNsdWRlL21hbGxvYy5oIGZpbGUgdGhhdCBpbmNsdWRlcyBhIGRl
Y2xhcmF0aW9uIG9mIHN0cnVjdAotICBtYWxsaW5mby4gIElmIHNvLCBpdCBpcyBpbmNsdWRlZDsg
ZWxzZSBhbiBTVklEMi9YUEcyIGNvbXBsaWFudAotICB2ZXJzaW9uIGlzIGRlY2xhcmVkIGJlbG93
LiAgVGhlc2UgbXVzdCBiZSBwcmVjaXNlbHkgdGhlIHNhbWUgZm9yCi0gIG1hbGxpbmZvKCkgdG8g
d29yay4gIFRoZSBvcmlnaW5hbCBTVklEIHZlcnNpb24gb2YgdGhpcyBzdHJ1Y3QsCi0gIGRlZmlu
ZWQgb24gbW9zdCBzeXN0ZW1zIHdpdGggbWFsbGluZm8sIGRlY2xhcmVzIGFsbCBmaWVsZHMgYXMK
LSAgaW50cy4gQnV0IHNvbWUgb3RoZXJzIGRlZmluZSBhcyB1bnNpZ25lZCBsb25nLiBJZiB5b3Vy
IHN5c3RlbQotICBkZWZpbmVzIHRoZSBmaWVsZHMgdXNpbmcgYSB0eXBlIG9mIGRpZmZlcmVudCB3
aWR0aCB0aGFuIGxpc3RlZCBoZXJlLAotICB5b3UgbXVzdCAjaW5jbHVkZSB5b3VyIHN5c3RlbSB2
ZXJzaW9uIGFuZCAjZGVmaW5lCi0gIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0guCi0qLwotCi0v
KiAjZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KLQotI2lmZGVmIEhBVkVfVVNS
X0lOQ0xVREVfTUFMTE9DX0gKLSNpbmNsdWRlICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiCi0jZWxz
ZQotCi0vKiBTVklEMi9YUEcgbWFsbGluZm8gc3RydWN0dXJlICovCi0KLXN0cnVjdCBtYWxsaW5m
byB7Ci0gIGludCBhcmVuYTsgICAgLyogbm9uLW1tYXBwZWQgc3BhY2UgYWxsb2NhdGVkIGZyb20g
c3lzdGVtICovCi0gIGludCBvcmRibGtzOyAgLyogbnVtYmVyIG9mIGZyZWUgY2h1bmtzICovCi0g
IGludCBzbWJsa3M7ICAgLyogbnVtYmVyIG9mIGZhc3RiaW4gYmxvY2tzICovCi0gIGludCBoYmxr
czsgICAgLyogbnVtYmVyIG9mIG1tYXBwZWQgcmVnaW9ucyAqLwotICBpbnQgaGJsa2hkOyAgIC8q
IHNwYWNlIGluIG1tYXBwZWQgcmVnaW9ucyAqLwotICBpbnQgdXNtYmxrczsgIC8qIG1heGltdW0g
dG90YWwgYWxsb2NhdGVkIHNwYWNlICovCi0gIGludCBmc21ibGtzOyAgLyogc3BhY2UgYXZhaWxh
YmxlIGluIGZyZWVkIGZhc3RiaW4gYmxvY2tzICovCi0gIGludCB1b3JkYmxrczsgLyogdG90YWwg
YWxsb2NhdGVkIHNwYWNlICovCi0gIGludCBmb3JkYmxrczsgLyogdG90YWwgZnJlZSBzcGFjZSAq
LwotICBpbnQga2VlcGNvc3Q7IC8qIHRvcC1tb3N0LCByZWxlYXNhYmxlICh2aWEgbWFsbG9jX3Ry
aW0pIHNwYWNlICovCi19OwotCi0vKgotICBTVklEL1hQRyBkZWZpbmVzIGZvdXIgc3RhbmRhcmQg
cGFyYW1ldGVyIG51bWJlcnMgZm9yIG1hbGxvcHQsCi0gIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFs
bG9jLmguICBPbmx5IG9uZSBvZiB0aGVzZSAoTV9NWEZBU1QpIGlzIHVzZWQKLSAgaW4gdGhpcyBt
YWxsb2MuIFRoZSBvdGhlcnMgKE1fTkxCTEtTLCBNX0dSQUlOLCBNX0tFRVApIGRvbid0IGFwcGx5
LAotICBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMgbWFsbG9jIGFsc28g
c3VwcG9ydHMgb3RoZXIKLSAgb3B0aW9ucyBpbiBtYWxsb3B0IGRlc2NyaWJlZCBiZWxvdy4KLSov
Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tIGRlc2NyaXB0aW9uIG9mIHB1YmxpYyByb3V0aW5l
cyAtLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAgbWFsbG9jKHNpemVfdCBuKQotICBSZXR1cm5zIGEg
cG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBhdCBsZWFzdCBuIGJ5dGVzLCBv
ciBudWxsCi0gIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZS4gQWRkaXRpb25hbGx5LCBvbiBmYWls
dXJlLCBlcnJubyBpcwotICBzZXQgdG8gRU5PTUVNIG9uIEFOU0kgQyBzeXN0ZW1zLgotCi0gIElm
IG4gaXMgemVybywgbWFsbG9jIHJldHVybnMgYSBtaW51bXVtLXNpemVkIGNodW5rLiAoVGhlIG1p
bmltdW0KLSAgc2l6ZSBpcyAxNiBieXRlcyBvbiBtb3N0IDMyYml0IHN5c3RlbXMsIGFuZCAyNCBv
ciAzMiBieXRlcyBvbiA2NGJpdAotICBzeXN0ZW1zLikgIE9uIG1vc3Qgc3lzdGVtcywgc2l6ZV90
IGlzIGFuIHVuc2lnbmVkIHR5cGUsIHNvIGNhbGxzCi0gIHdpdGggbmVnYXRpdmUgYXJndW1lbnRz
IGFyZSBpbnRlcnByZXRlZCBhcyByZXF1ZXN0cyBmb3IgaHVnZSBhbW91bnRzCi0gIG9mIHNwYWNl
LCB3aGljaCB3aWxsIG9mdGVuIGZhaWwuIFRoZSBtYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZSBvZiBu
Ci0gIGRpZmZlcnMgYWNyb3NzIHN5c3RlbXMsIGJ1dCBpcyBpbiBhbGwgY2FzZXMgbGVzcyB0aGFu
IHRoZSBtYXhpbXVtCi0gIHJlcHJlc2VudGFibGUgdmFsdWUgb2YgYSBzaXplX3QuCi0qLwotI2lm
IF9fU1REX0MKLVZvaWRfdCogIHB1YmxpY19tQUxMT2Moc2l6ZV90KTsKLSNlbHNlCi1Wb2lkX3Qq
ICBwdWJsaWNfbUFMTE9jKCk7Ci0jZW5kaWYKLQotLyoKLSAgZnJlZShWb2lkX3QqIHApCi0gIFJl
bGVhc2VzIHRoZSBjaHVuayBvZiBtZW1vcnkgcG9pbnRlZCB0byBieSBwLCB0aGF0IGhhZCBiZWVu
IHByZXZpb3VzbHkKLSAgYWxsb2NhdGVkIHVzaW5nIG1hbGxvYyBvciBhIHJlbGF0ZWQgcm91dGlu
ZSBzdWNoIGFzIHJlYWxsb2MuCi0gIEl0IGhhcyBubyBlZmZlY3QgaWYgcCBpcyBudWxsLiBJdCBj
YW4gaGF2ZSBhcmJpdHJhcnkgKGkuZS4sIGJhZCEpCi0gIGVmZmVjdHMgaWYgcCBoYXMgYWxyZWFk
eSBiZWVuIGZyZWVkLgotCi0gIFVubGVzcyBkaXNhYmxlZCAodXNpbmcgbWFsbG9wdCksIGZyZWVp
bmcgdmVyeSBsYXJnZSBzcGFjZXMgd2lsbAotICB3aGVuIHBvc3NpYmxlLCBhdXRvbWF0aWNhbGx5
IHRyaWdnZXIgb3BlcmF0aW9ucyB0aGF0IGdpdmUKLSAgYmFjayB1bnVzZWQgbWVtb3J5IHRvIHRo
ZSBzeXN0ZW0sIHRodXMgcmVkdWNpbmcgcHJvZ3JhbSBmb290cHJpbnQuCi0qLwotI2lmIF9fU1RE
X0MKLXZvaWQgICAgIHB1YmxpY19mUkVlKFZvaWRfdCopOwotI2Vsc2UKLXZvaWQgICAgIHB1Ymxp
Y19mUkVlKCk7Ci0jZW5kaWYKLQotLyoKLSAgY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXpl
X3QgZWxlbWVudF9zaXplKTsKLSAgUmV0dXJucyBhIHBvaW50ZXIgdG8gbl9lbGVtZW50cyAqIGVs
ZW1lbnRfc2l6ZSBieXRlcywgd2l0aCBhbGwgbG9jYXRpb25zCi0gIHNldCB0byB6ZXJvLgotKi8K
LSNpZiBfX1NURF9DCi1Wb2lkX3QqICBwdWJsaWNfY0FMTE9jKHNpemVfdCwgc2l6ZV90KTsKLSNl
bHNlCi1Wb2lkX3QqICBwdWJsaWNfY0FMTE9jKCk7Ci0jZW5kaWYKLQotLyoKLSAgcmVhbGxvYyhW
b2lkX3QqIHAsIHNpemVfdCBuKQotICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIGNodW5rIG9mIHNp
emUgbiB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGRhdGEKLSAgYXMgZG9lcyBjaHVuayBwIHVwIHRv
IHRoZSBtaW5pbXVtIG9mIChuLCBwJ3Mgc2l6ZSkgYnl0ZXMsIG9yIG51bGwKLSAgaWYgbm8gc3Bh
Y2UgaXMgYXZhaWxhYmxlLiAKLQotICBUaGUgcmV0dXJuZWQgcG9pbnRlciBtYXkgb3IgbWF5IG5v
dCBiZSB0aGUgc2FtZSBhcyBwLiBUaGUgYWxnb3JpdGhtCi0gIHByZWZlcnMgZXh0ZW5kaW5nIHAg
d2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0IGVtcGxveXMgdGhlCi0gIGVxdWl2YWxlbnQgb2Yg
YSBtYWxsb2MtY29weS1mcmVlIHNlcXVlbmNlLgotCi0gIElmIHAgaXMgbnVsbCwgcmVhbGxvYyBp
cyBlcXVpdmFsZW50IHRvIG1hbGxvYy4gIAotCi0gIElmIHNwYWNlIGlzIG5vdCBhdmFpbGFibGUs
IHJlYWxsb2MgcmV0dXJucyBudWxsLCBlcnJubyBpcyBzZXQgKGlmIG9uCi0gIEFOU0kpIGFuZCBw
IGlzIE5PVCBmcmVlZC4KLQotICBpZiBuIGlzIGZvciBmZXdlciBieXRlcyB0aGFuIGFscmVhZHkg
aGVsZCBieSBwLCB0aGUgbmV3bHkgdW51c2VkCi0gIHNwYWNlIGlzIGxvcHBlZCBvZmYgYW5kIGZy
ZWVkIGlmIHBvc3NpYmxlLiAgVW5sZXNzIHRoZSAjZGVmaW5lCi0gIFJFQUxMT0NfWkVST19CWVRF
U19GUkVFUyBpcyBzZXQsIHJlYWxsb2Mgd2l0aCBhIHNpemUgYXJndW1lbnQgb2YKLSAgemVybyAo
cmUpYWxsb2NhdGVzIGEgbWluaW11bS1zaXplZCBjaHVuay4KLQotICBMYXJnZSBjaHVua3MgdGhh
dCB3ZXJlIGludGVybmFsbHkgb2J0YWluZWQgdmlhIG1tYXAgd2lsbCBhbHdheXMKLSAgYmUgcmVh
bGxvY2F0ZWQgdXNpbmcgbWFsbG9jLWNvcHktZnJlZSBzZXF1ZW5jZXMgdW5sZXNzCi0gIHRoZSBz
eXN0ZW0gc3VwcG9ydHMgTVJFTUFQIChjdXJyZW50bHkgb25seSBsaW51eCkuCi0KLSAgVGhlIG9s
ZCB1bml4IHJlYWxsb2MgY29udmVudGlvbiBvZiBhbGxvd2luZyB0aGUgbGFzdC1mcmVlJ2QgY2h1
bmsKLSAgdG8gYmUgdXNlZCBhcyBhbiBhcmd1bWVudCB0byByZWFsbG9jIGlzIG5vdCBzdXBwb3J0
ZWQuCi0qLwotI2lmIF9fU1REX0MKLVZvaWRfdCogIHB1YmxpY19yRUFMTE9jKFZvaWRfdCosIHNp
emVfdCk7Ci0jZWxzZQotVm9pZF90KiAgcHVibGljX3JFQUxMT2MoKTsKLSNlbmRpZgotCi0vKgot
ICBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgbik7Ci0gIFJldHVybnMgYSBwb2lu
dGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIG4gYnl0ZXMsIGFsaWduZWQKLSAgaW4g
YWNjb3JkIHdpdGggdGhlIGFsaWdubWVudCBhcmd1bWVudC4KLQotICBUaGUgYWxpZ25tZW50IGFy
Z3VtZW50IHNob3VsZCBiZSBhIHBvd2VyIG9mIHR3by4gSWYgdGhlIGFyZ3VtZW50IGlzCi0gIG5v
dCBhIHBvd2VyIG9mIHR3bywgdGhlIG5lYXJlc3QgZ3JlYXRlciBwb3dlciBpcyB1c2VkLgotICA4
LWJ5dGUgYWxpZ25tZW50IGlzIGd1YXJhbnRlZWQgYnkgbm9ybWFsIG1hbGxvYyBjYWxscywgc28g
ZG9uJ3QKLSAgYm90aGVyIGNhbGxpbmcgbWVtYWxpZ24gd2l0aCBhbiBhcmd1bWVudCBvZiA4IG9y
IGxlc3MuCi0KLSAgT3ZlcnJlbGlhbmNlIG9uIG1lbWFsaWduIGlzIGEgc3VyZSB3YXkgdG8gZnJh
Z21lbnQgc3BhY2UuCi0qLwotI2lmIF9fU1REX0MKLVZvaWRfdCogIHB1YmxpY19tRU1BTElHbihz
aXplX3QsIHNpemVfdCk7Ci0jZWxzZQotVm9pZF90KiAgcHVibGljX21FTUFMSUduKCk7Ci0jZW5k
aWYKLQotLyoKLSAgdmFsbG9jKHNpemVfdCBuKTsKLSAgRXF1aXZhbGVudCB0byBtZW1hbGlnbihw
YWdlc2l6ZSwgbiksIHdoZXJlIHBhZ2VzaXplIGlzIHRoZSBwYWdlCi0gIHNpemUgb2YgdGhlIHN5
c3RlbS4gSWYgdGhlIHBhZ2VzaXplIGlzIHVua25vd24sIDQwOTYgaXMgdXNlZC4KLSovCi0jaWYg
X19TVERfQwotVm9pZF90KiAgcHVibGljX3ZBTExPYyhzaXplX3QpOwotI2Vsc2UKLVZvaWRfdCog
IHB1YmxpY192QUxMT2MoKTsKLSNlbmRpZgotCi0KLQotLyoKLSAgbWFsbG9wdChpbnQgcGFyYW1l
dGVyX251bWJlciwgaW50IHBhcmFtZXRlcl92YWx1ZSkKLSAgU2V0cyB0dW5hYmxlIHBhcmFtZXRl
cnMgVGhlIGZvcm1hdCBpcyB0byBwcm92aWRlIGEKLSAgKHBhcmFtZXRlci1udW1iZXIsIHBhcmFt
ZXRlci12YWx1ZSkgcGFpci4gIG1hbGxvcHQgdGhlbiBzZXRzIHRoZQotICBjb3JyZXNwb25kaW5n
IHBhcmFtZXRlciB0byB0aGUgYXJndW1lbnQgdmFsdWUgaWYgaXQgY2FuIChpLmUuLCBzbwotICBs
b25nIGFzIHRoZSB2YWx1ZSBpcyBtZWFuaW5nZnVsKSwgYW5kIHJldHVybnMgMSBpZiBzdWNjZXNz
ZnVsIGVsc2UKLSAgMC4gIFNWSUQvWFBHL0FOU0kgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFt
IG51bWJlcnMgZm9yIG1hbGxvcHQsCi0gIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFsbG9jLmguICBP
bmx5IG9uZSBvZiB0aGVzZSAoTV9NWEZBU1QpIGlzIHVzZWQKLSAgaW4gdGhpcyBtYWxsb2MuIFRo
ZSBvdGhlcnMgKE1fTkxCTEtTLCBNX0dSQUlOLCBNX0tFRVApIGRvbid0IGFwcGx5LAotICBzbyBz
ZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMgbWFsbG9jIGFsc28gc3VwcG9ydHMg
Zm91cgotICBvdGhlciBvcHRpb25zIGluIG1hbGxvcHQuIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4g
IEJyaWVmbHksIHN1cHBvcnRlZAotICBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzIChsaXN0ZWQg
ZGVmYXVsdHMgYXJlIGZvciAidHlwaWNhbCIKLSAgY29uZmlndXJhdGlvbnMpLgotCi0gIFN5bWJv
bCAgICAgICAgICAgIHBhcmFtICMgICBkZWZhdWx0ICAgIGFsbG93ZWQgcGFyYW0gdmFsdWVzCi0g
IE1fTVhGQVNUICAgICAgICAgIDEgICAgICAgICA2NCAgICAgICAgIDAtODAgICgwIGRpc2FibGVz
IGZhc3RiaW5zKQotICBNX1RSSU1fVEhSRVNIT0xEIC0xICAgICAgICAgMjU2KjEwMjQgICBhbnkg
ICAoLTFVIGRpc2FibGVzIHRyaW1taW5nKQotICBNX1RPUF9QQUQgICAgICAgIC0yICAgICAgICAg
MCAgICAgICAgICBhbnkgIAotICBNX01NQVBfVEhSRVNIT0xEIC0zICAgICAgICAgMjU2KjEwMjQg
ICBhbnkgICAob3IgMCBpZiBubyBNTUFQIHN1cHBvcnQpCi0gIE1fTU1BUF9NQVggICAgICAgLTQg
ICAgICAgICA2NTUzNiAgICAgIGFueSAgICgwIGRpc2FibGVzIHVzZSBvZiBtbWFwKQotKi8KLSNp
ZiBfX1NURF9DCi1pbnQgICAgICBwdWJsaWNfbUFMTE9QdChpbnQsIGludCk7Ci0jZWxzZQotaW50
ICAgICAgcHVibGljX21BTExPUHQoKTsKLSNlbmRpZgotCi0KLS8qCi0gIG1hbGxpbmZvKCkKLSAg
UmV0dXJucyAoYnkgY29weSkgYSBzdHJ1Y3QgY29udGFpbmluZyB2YXJpb3VzIHN1bW1hcnkgc3Rh
dGlzdGljczoKLQotICBhcmVuYTogICAgIGN1cnJlbnQgdG90YWwgbm9uLW1tYXBwZWQgYnl0ZXMg
YWxsb2NhdGVkIGZyb20gc3lzdGVtIAotICBvcmRibGtzOiAgIHRoZSBudW1iZXIgb2YgZnJlZSBj
aHVua3MgCi0gIHNtYmxrczogICAgdGhlIG51bWJlciBvZiBmYXN0YmluIGJsb2NrcyAoaS5lLiwg
c21hbGwgY2h1bmtzIHRoYXQKLSAgICAgICAgICAgICAgIGhhdmUgYmVlbiBmcmVlZCBidXQgbm90
IHVzZSByZXN1c2VkIG9yIGNvbnNvbGlkYXRlZCkKLSAgaGJsa3M6ICAgICBjdXJyZW50IG51bWJl
ciBvZiBtbWFwcGVkIHJlZ2lvbnMgCi0gIGhibGtoZDogICAgdG90YWwgYnl0ZXMgaGVsZCBpbiBt
bWFwcGVkIHJlZ2lvbnMgCi0gIHVzbWJsa3M6ICAgdGhlIG1heGltdW0gdG90YWwgYWxsb2NhdGVk
IHNwYWNlLiBUaGlzIHdpbGwgYmUgZ3JlYXRlcgotICAgICAgICAgICAgICAgIHRoYW4gY3VycmVu
dCB0b3RhbCBpZiB0cmltbWluZyBoYXMgb2NjdXJyZWQuCi0gIGZzbWJsa3M6ICAgdG90YWwgYnl0
ZXMgaGVsZCBpbiBmYXN0YmluIGJsb2NrcyAKLSAgdW9yZGJsa3M6ICBjdXJyZW50IHRvdGFsIGFs
bG9jYXRlZCBzcGFjZSAobm9ybWFsIG9yIG1tYXBwZWQpCi0gIGZvcmRibGtzOiAgdG90YWwgZnJl
ZSBzcGFjZSAKLSAga2VlcGNvc3Q6ICB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBj
b3VsZCBpZGVhbGx5IGJlIHJlbGVhc2VkCi0gICAgICAgICAgICAgICBiYWNrIHRvIHN5c3RlbSB2
aWEgbWFsbG9jX3RyaW0uICgiaWRlYWxseSIgbWVhbnMgdGhhdAotICAgICAgICAgICAgICAgaXQg
aWdub3JlcyBwYWdlIHJlc3RyaWN0aW9ucyBldGMuKQotCi0gIEJlY2F1c2UgdGhlc2UgZmllbGRz
IGFyZSBpbnRzLCBidXQgaW50ZXJuYWwgYm9va2tlZXBpbmcgbWF5Ci0gIGJlIGtlcHQgYXMgbG9u
Z3MsIHRoZSByZXBvcnRlZCB2YWx1ZXMgbWF5IHdyYXAgYXJvdW5kIHplcm8gYW5kIAotICB0aHVz
IGJlIGluYWNjdXJhdGUuCi0qLwotI2lmIF9fU1REX0MKLXN0cnVjdCBtYWxsaW5mbyBwdWJsaWNf
bUFMTElORm8odm9pZCk7Ci0jZWxzZQotc3RydWN0IG1hbGxpbmZvIHB1YmxpY19tQUxMSU5Gbygp
OwotI2VuZGlmCi0KLS8qCi0gIGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywg
c2l6ZV90IGVsZW1lbnRfc2l6ZSwgVm9pZF90KiBjaHVua3NbXSk7Ci0KLSAgaW5kZXBlbmRlbnRf
Y2FsbG9jIGlzIHNpbWlsYXIgdG8gY2FsbG9jLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYQot
ICBzaW5nbGUgY2xlYXJlZCBzcGFjZSwgaXQgcmV0dXJucyBhbiBhcnJheSBvZiBwb2ludGVycyB0
byBuX2VsZW1lbnRzCi0gIGluZGVwZW5kZW50IGVsZW1lbnRzIHRoYXQgY2FuIGhvbGQgY29udGVu
dHMgb2Ygc2l6ZSBlbGVtX3NpemUsIGVhY2gKLSAgb2Ygd2hpY2ggc3RhcnRzIG91dCBjbGVhcmVk
LCBhbmQgY2FuIGJlIGluZGVwZW5kZW50bHkgZnJlZWQsCi0gIHJlYWxsb2MnZWQgZXRjLiBUaGUg
ZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWRqYWNlbnRseQotICBhbGxvY2F0ZWQgKHRo
aXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aCBtdWx0aXBsZSBjYWxsb2NzIG9yCi0g
IG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5IGluIHNvbWUK
LSAgYXBwbGljYXRpb25zLgotCi0gIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAo
aS5lLiwgbWF5IGJlIG51bGwsIHdoaWNoIGlzCi0gIHByb2JhYmx5IHRoZSBtb3N0IHR5cGljYWwg
dXNhZ2UpLiBJZiBpdCBpcyBudWxsLCB0aGUgcmV0dXJuZWQgYXJyYXkKLSAgaXMgaXRzZWxmIGR5
bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28gYmUgZnJlZWQgd2hlbiBpdCBpcwot
ICBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkgbXVzdCBiZSBv
ZiBhdCBsZWFzdAotICBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGgg
dGhlIHBvaW50ZXJzIHRvIHRoZQotICBjaHVua3MuCi0KLSAgSW4gZWl0aGVyIGNhc2UsIGluZGVw
ZW5kZW50X2NhbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKLSAgbnVsbCBpZiB0
aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kICJjaHVua3Mi
Ci0gIGlzIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0
aCB6ZXJvIGVsZW1lbnRzCi0gICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCku
Ci0KLSAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMg
bm8gbG9uZ2VyCi0gIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8g
ZnJlZSBhbGwgYXQgb25jZSwgeW91Ci0gIHNob3VsZCBpbnN0ZWFkIHVzZSByZWd1bGFyIGNhbGxv
YyBhbmQgYXNzaWduIHBvaW50ZXJzIGludG8gdGhpcwotICBzcGFjZSB0byByZXByZXNlbnQgZWxl
bWVudHMuICAoSW4gdGhpcyBjYXNlIHRob3VnaCwgeW91IGNhbm5vdAotICBpbmRlcGVuZGVudGx5
IGZyZWUgZWxlbWVudHMuKQotICAKLSAgaW5kZXBlbmRlbnRfY2FsbG9jIHNpbXBsaWZpZXMgYW5k
IHNwZWVkcyB1cCBpbXBsZW1lbnRhdGlvbnMgb2YgbWFueQotICBraW5kcyBvZiBwb29scy4gIEl0
IG1heSBhbHNvIGJlIHVzZWZ1bCB3aGVuIGNvbnN0cnVjdGluZyBsYXJnZSBkYXRhCi0gIHN0cnVj
dHVyZXMgdGhhdCBpbml0aWFsbHkgaGF2ZSBhIGZpeGVkIG51bWJlciBvZiBmaXhlZC1zaXplZCBu
b2RlcywKLSAgYnV0IHRoZSBudW1iZXIgaXMgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZSwgYW5k
IHNvbWUgb2YgdGhlIG5vZGVzCi0gIG1heSBsYXRlciBuZWVkIHRvIGJlIGZyZWVkLiBGb3IgZXhh
bXBsZToKLQotICBzdHJ1Y3QgTm9kZSB7IGludCBpdGVtOyBzdHJ1Y3QgTm9kZSogbmV4dDsgfTsK
LSAgCi0gIHN0cnVjdCBOb2RlKiBidWlsZF9saXN0KCkgewotICAgIHN0cnVjdCBOb2RlKiogcG9v
bDsKLSAgICBpbnQgbiA9IHJlYWRfbnVtYmVyX29mX25vZGVzX25lZWRlZCgpOwotICAgIGlmIChu
IDw9IDApIHJldHVybiAwOwotICAgIHBvb2wgPSAoc3RydWN0IE5vZGUqKikoaW5kZXBlbmRlbnRf
Y2FsbG9jKG4sIHNpemVvZihzdHJ1Y3QgTm9kZSksIDApOwotICAgIGlmIChwb29sID09IDApIGRp
ZSgpOyAKLSAgICAvLyBvcmdhbml6ZSBpbnRvIGEgbGlua2VkIGxpc3QuLi4gCi0gICAgc3RydWN0
IE5vZGUqIGZpcnN0ID0gcG9vbFswXTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbi0xOyArK2kpIAot
ICAgICAgcG9vbFtpXS0+bmV4dCA9IHBvb2xbaSsxXTsKLSAgICBmcmVlKHBvb2wpOyAgICAgLy8g
Q2FuIG5vdyBmcmVlIHRoZSBhcnJheSAob3Igbm90LCBpZiBpdCBpcyBuZWVkZWQgbGF0ZXIpCi0g
ICAgcmV0dXJuIGZpcnN0OwotICB9Ci0qLwotI2lmIF9fU1REX0MKLVZvaWRfdCoqIHB1YmxpY19p
Q0FMTE9jKHNpemVfdCwgc2l6ZV90LCBWb2lkX3QqKik7Ci0jZWxzZQotVm9pZF90KiogcHVibGlj
X2lDQUxMT2MoKTsKLSNlbmRpZgotCi0vKgotICBpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qg
bl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sIFZvaWRfdCogY2h1bmtzW10pOwotCi0gIGluZGVw
ZW5kZW50X2NvbWFsbG9jIGFsbG9jYXRlcywgYWxsIGF0IG9uY2UsIGEgc2V0IG9mIG5fZWxlbWVu
dHMKLSAgY2h1bmtzIHdpdGggc2l6ZXMgaW5kaWNhdGVkIGluIHRoZSAic2l6ZXMiIGFycmF5LiAg
ICBJdCByZXR1cm5zCi0gIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZXNlIGVsZW1lbnRzLCBl
YWNoIG9mIHdoaWNoIGNhbiBiZQotICBpbmRlcGVuZGVudGx5IGZyZWVkLCByZWFsbG9jJ2VkIGV0
Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvCi0gIGJlIGFkamFjZW50bHkgYWxsb2Nh
dGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGgKLSAgbXVsdGlwbGUgY2Fs
bG9jcyBvciBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eQot
ICBpbiBzb21lIGFwcGxpY2F0aW9ucy4KLQotICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0
aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsKS4gSWYgaXQgaXMgbnVsbAotICB0aGUgcmV0dXJuZWQg
YXJyYXkgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28KLSAg
YmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVu
a3MgYXJyYXkKLSAgbXVzdCBiZSBvZiBhdCBsZWFzdCBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQg
aXMgZmlsbGVkIGluIHdpdGggdGhlCi0gIHBvaW50ZXJzIHRvIHRoZSBjaHVua3MuCi0KLSAgSW4g
ZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NvbWFsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFy
cmF5LCBvcgotICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMg
aXMgemVybyBhbmQgY2h1bmtzIGlzCi0gIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNl
bnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCi0gICh3aGljaCBzaG91bGQgYmUgZnJl
ZWQgaWYgbm90IHdhbnRlZCkuCi0gIAotICBFYWNoIGVsZW1lbnQgbXVzdCBiZSBpbmRpdmlkdWFs
bHkgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIKLSAgbmVlZGVkLiBJZiB5b3UnZCBsaWtlIHRv
IGluc3RlYWQgYmUgYWJsZSB0byBmcmVlIGFsbCBhdCBvbmNlLCB5b3UKLSAgc2hvdWxkIGluc3Rl
YWQgdXNlIGEgc2luZ2xlIHJlZ3VsYXIgbWFsbG9jLCBhbmQgYXNzaWduIHBvaW50ZXJzIGF0Ci0g
IHBhcnRpY3VsYXIgb2Zmc2V0cyBpbiB0aGUgYWdncmVnYXRlIHNwYWNlLiAoSW4gdGhpcyBjYXNl
IHRob3VnaCwgeW91IAotICBjYW5ub3QgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKLQot
ICBpbmRlcGVuZGVudF9jb21hbGxhYyBkaWZmZXJzIGZyb20gaW5kZXBlbmRlbnRfY2FsbG9jIGlu
IHRoYXQgZWFjaAotICBlbGVtZW50IG1heSBoYXZlIGEgZGlmZmVyZW50IHNpemUsIGFuZCBhbHNv
IHRoYXQgaXQgZG9lcyBub3QKLSAgYXV0b21hdGljYWxseSBjbGVhciBlbGVtZW50cy4KLQotICBp
bmRlcGVuZGVudF9jb21hbGxvYyBjYW4gYmUgdXNlZCB0byBzcGVlZCB1cCBhbGxvY2F0aW9uIGlu
IGNhc2VzCi0gIHdoZXJlIHNldmVyYWwgc3RydWN0cyBvciBvYmplY3RzIG11c3QgYWx3YXlzIGJl
IGFsbG9jYXRlZCBhdCB0aGUKLSAgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGU6Ci0KLSAgc3RydWN0
IEhlYWQgeyAuLi4gfQotICBzdHJ1Y3QgRm9vdCB7IC4uLiB9Ci0KLSAgdm9pZCBzZW5kX21lc3Nh
Z2UoY2hhciogbXNnKSB7Ci0gICAgaW50IG1zZ2xlbiA9IHN0cmxlbihtc2cpOwotICAgIHNpemVf
dCBzaXplc1szXSA9IHsgc2l6ZW9mKHN0cnVjdCBIZWFkKSwgbXNnbGVuLCBzaXplb2Yoc3RydWN0
IEZvb3QpIH07Ci0gICAgdm9pZCogY2h1bmtzWzNdOwotICAgIGlmIChpbmRlcGVuZGVudF9jb21h
bGxvYygzLCBzaXplcywgY2h1bmtzKSA9PSAwKQotICAgICAgZGllKCk7Ci0gICAgc3RydWN0IEhl
YWQqIGhlYWQgPSAoc3RydWN0IEhlYWQqKShjaHVua3NbMF0pOwotICAgIGNoYXIqICAgICAgICBi
b2R5ID0gKGNoYXIqKShjaHVua3NbMV0pOwotICAgIHN0cnVjdCBGb290KiBmb290ID0gKHN0cnVj
dCBGb290KikoY2h1bmtzWzJdKTsKLSAgICAvLyAuLi4KLSAgfQotCi0gIEluIGdlbmVyYWwgdGhv
dWdoLCBpbmRlcGVuZGVudF9jb21hbGxvYyBpcyB3b3J0aCB1c2luZyBvbmx5IGZvcgotICBsYXJn
ZXIgdmFsdWVzIG9mIG5fZWxlbWVudHMuIEZvciBzbWFsbCB2YWx1ZXMsIHlvdSBwcm9iYWJseSB3
b24ndAotICBkZXRlY3QgZW5vdWdoIGRpZmZlcmVuY2UgZnJvbSBzZXJpZXMgb2YgbWFsbG9jIGNh
bGxzIHRvIGJvdGhlci4KLQotICBPdmVydXNlIG9mIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBp
bmNyZWFzZSBvdmVyYWxsIG1lbW9yeSB1c2FnZSwKLSAgc2luY2UgaXQgY2Fubm90IHJldXNlIGV4
aXN0aW5nIG5vbmNvbnRpZ3VvdXMgc21hbGwgY2h1bmtzIHRoYXQKLSAgbWlnaHQgYmUgYXZhaWxh
YmxlIGZvciBzb21lIG9mIHRoZSBlbGVtZW50cy4KLSovCi0jaWYgX19TVERfQwotVm9pZF90Kiog
cHVibGljX2lDT01BTExPYyhzaXplX3QsIHNpemVfdCosIFZvaWRfdCoqKTsKLSNlbHNlCi1Wb2lk
X3QqKiBwdWJsaWNfaUNPTUFMTE9jKCk7Ci0jZW5kaWYKLQotCi0vKgotICBwdmFsbG9jKHNpemVf
dCBuKTsKLSAgRXF1aXZhbGVudCB0byB2YWxsb2MobWluaW11bS1wYWdlLXRoYXQtaG9sZHMobikp
LCB0aGF0IGlzLAotICByb3VuZCB1cCBuIHRvIG5lYXJlc3QgcGFnZXNpemUuCi0gKi8KLSNpZiBf
X1NURF9DCi1Wb2lkX3QqICBwdWJsaWNfcFZBTExPYyhzaXplX3QpOwotI2Vsc2UKLVZvaWRfdCog
IHB1YmxpY19wVkFMTE9jKCk7Ci0jZW5kaWYKLQotLyoKLSAgY2ZyZWUoVm9pZF90KiBwKTsKLSAg
RXF1aXZhbGVudCB0byBmcmVlKHApLgotCi0gIGNmcmVlIGlzIG5lZWRlZC9kZWZpbmVkIG9uIHNv
bWUgc3lzdGVtcyB0aGF0IHBhaXIgaXQgd2l0aCBjYWxsb2MsCi0gIGZvciBvZGQgaGlzdG9yaWNh
bCByZWFzb25zIChzdWNoIGFzOiBjZnJlZSBpcyB1c2VkIGluIGV4YW1wbGUgCi0gIGNvZGUgaW4g
dGhlIGZpcnN0IGVkaXRpb24gb2YgSyZSKS4KLSovCi0jaWYgX19TVERfQwotdm9pZCAgICAgcHVi
bGljX2NGUkVlKFZvaWRfdCopOwotI2Vsc2UKLXZvaWQgICAgIHB1YmxpY19jRlJFZSgpOwotI2Vu
ZGlmCi0KLS8qCi0gIG1hbGxvY190cmltKHNpemVfdCBwYWQpOwotCi0gIElmIHBvc3NpYmxlLCBn
aXZlcyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUKLSAgYXJndW1lbnRz
IHRvIHNicmspIGlmIHRoZXJlIGlzIHVudXNlZCBtZW1vcnkgYXQgdGhlIGBoaWdoJyBlbmQgb2YK
LSAgdGhlIG1hbGxvYyBwb29sLiBZb3UgY2FuIGNhbGwgdGhpcyBhZnRlciBmcmVlaW5nIGxhcmdl
IGJsb2NrcyBvZgotICBtZW1vcnkgdG8gcG90ZW50aWFsbHkgcmVkdWNlIHRoZSBzeXN0ZW0tbGV2
ZWwgbWVtb3J5IHJlcXVpcmVtZW50cwotICBvZiBhIHByb2dyYW0uIEhvd2V2ZXIsIGl0IGNhbm5v
dCBndWFyYW50ZWUgdG8gcmVkdWNlIG1lbW9yeS4gVW5kZXIKLSAgc29tZSBhbGxvY2F0aW9uIHBh
dHRlcm5zLCBzb21lIGxhcmdlIGZyZWUgYmxvY2tzIG9mIG1lbW9yeSB3aWxsIGJlCi0gIGxvY2tl
ZCBiZXR3ZWVuIHR3byB1c2VkIGNodW5rcywgc28gdGhleSBjYW5ub3QgYmUgZ2l2ZW4gYmFjayB0
bwotICB0aGUgc3lzdGVtLgotICAKLSAgVGhlIGBwYWQnIGFyZ3VtZW50IHRvIG1hbGxvY190cmlt
IHJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBmcmVlCi0gIHRyYWlsaW5nIHNwYWNlIHRvIGxlYXZl
IHVudHJpbW1lZC4gSWYgdGhpcyBhcmd1bWVudCBpcyB6ZXJvLAotICBvbmx5IHRoZSBtaW5pbXVt
IGFtb3VudCBvZiBtZW1vcnkgdG8gbWFpbnRhaW4gaW50ZXJuYWwgZGF0YQotICBzdHJ1Y3R1cmVz
IHdpbGwgYmUgbGVmdCAob25lIHBhZ2Ugb3IgbGVzcykuIE5vbi16ZXJvIGFyZ3VtZW50cwotICBj
YW4gYmUgc3VwcGxpZWQgdG8gbWFpbnRhaW4gZW5vdWdoIHRyYWlsaW5nIHNwYWNlIHRvIHNlcnZp
Y2UKLSAgZnV0dXJlIGV4cGVjdGVkIGFsbG9jYXRpb25zIHdpdGhvdXQgaGF2aW5nIHRvIHJlLW9i
dGFpbiBtZW1vcnkKLSAgZnJvbSB0aGUgc3lzdGVtLgotICAKLSAgTWFsbG9jX3RyaW0gcmV0dXJu
cyAxIGlmIGl0IGFjdHVhbGx5IHJlbGVhc2VkIGFueSBtZW1vcnksIGVsc2UgMC4KLSAgT24gc3lz
dGVtcyB0aGF0IGRvIG5vdCBzdXBwb3J0ICJuZWdhdGl2ZSBzYnJrcyIsIGl0IHdpbGwgYWx3YXlz
Ci0gIHJyZXR1cm4gMC4KLSovCi0jaWYgX19TVERfQwotaW50ICAgICAgcHVibGljX21UUkltKHNp
emVfdCk7Ci0jZWxzZQotaW50ICAgICAgcHVibGljX21UUkltKCk7Ci0jZW5kaWYKLQotLyoKLSAg
bWFsbG9jX3VzYWJsZV9zaXplKFZvaWRfdCogcCk7Ci0KLSAgUmV0dXJucyB0aGUgbnVtYmVyIG9m
IGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluCi0gIGFuIGFsbG9jYXRlZCBjaHVuaywgd2hp
Y2ggbWF5IGJlIG1vcmUgdGhhbiB5b3UgcmVxdWVzdGVkIChhbHRob3VnaAotICBvZnRlbiBub3Qp
IGR1ZSB0byBhbGlnbm1lbnQgYW5kIG1pbmltdW0gc2l6ZSBjb25zdHJhaW50cy4KLSAgWW91IGNh
biB1c2UgdGhpcyBtYW55IGJ5dGVzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQKLSAgb3ZlcndyaXRp
bmcgb3RoZXIgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgbm90IGEgcGFydGljdWxhcmx5IGdy
ZWF0Ci0gIHByb2dyYW1taW5nIHByYWN0aWNlLiBtYWxsb2NfdXNhYmxlX3NpemUgY2FuIGJlIG1v
cmUgdXNlZnVsIGluCi0gIGRlYnVnZ2luZyBhbmQgYXNzZXJ0aW9ucywgZm9yIGV4YW1wbGU6Ci0K
LSAgcCA9IG1hbGxvYyhuKTsKLSAgYXNzZXJ0KG1hbGxvY191c2FibGVfc2l6ZShwKSA+PSAyNTYp
OwotCi0qLwotI2lmIF9fU1REX0MKLXNpemVfdCAgIHB1YmxpY19tVVNBQkxlKFZvaWRfdCopOwot
I2Vsc2UKLXNpemVfdCAgIHB1YmxpY19tVVNBQkxlKCk7Ci0jZW5kaWYKLQotLyoKLSAgbWFsbG9j
X3N0YXRzKCk7Ci0gIFByaW50cyBvbiBzdGRlcnIgdGhlIGFtb3VudCBvZiBzcGFjZSBvYnRhaW5l
ZCBmcm9tIHRoZSBzeXN0ZW0gKGJvdGgKLSAgdmlhIHNicmsgYW5kIG1tYXApLCB0aGUgbWF4aW11
bSBhbW91bnQgKHdoaWNoIG1heSBiZSBtb3JlIHRoYW4KLSAgY3VycmVudCBpZiBtYWxsb2NfdHJp
bSBhbmQvb3IgbXVubWFwIGdvdCBjYWxsZWQpLCBhbmQgdGhlIGN1cnJlbnQKLSAgbnVtYmVyIG9m
IGJ5dGVzIGFsbG9jYXRlZCB2aWEgbWFsbG9jIChvciByZWFsbG9jLCBldGMpIGJ1dCBub3QgeWV0
Ci0gIGZyZWVkLiBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRl
ZCwgbm90IHRoZQotICBudW1iZXIgcmVxdWVzdGVkLiBJdCB3aWxsIGJlIGxhcmdlciB0aGFuIHRo
ZSBudW1iZXIgcmVxdWVzdGVkCi0gIGJlY2F1c2Ugb2YgYWxpZ25tZW50IGFuZCBib29ra2VlcGlu
ZyBvdmVyaGVhZC4gQmVjYXVzZSBpdCBpbmNsdWRlcwotICBhbGlnbm1lbnQgd2FzdGFnZSBhcyBi
ZWluZyBpbiB1c2UsIHRoaXMgZmlndXJlIG1heSBiZSBncmVhdGVyIHRoYW4KLSAgemVybyBldmVu
IHdoZW4gbm8gdXNlci1sZXZlbCBjaHVua3MgYXJlIGFsbG9jYXRlZC4KLQotICBUaGUgcmVwb3J0
ZWQgY3VycmVudCBhbmQgbWF4aW11bSBzeXN0ZW0gbWVtb3J5IGNhbiBiZSBpbmFjY3VyYXRlIGlm
Ci0gIGEgcHJvZ3JhbSBtYWtlcyBvdGhlciBjYWxscyB0byBzeXN0ZW0gbWVtb3J5IGFsbG9jYXRp
b24gZnVuY3Rpb25zCi0gIChub3JtYWxseSBzYnJrKSBvdXRzaWRlIG9mIG1hbGxvYy4KLQotICBt
YWxsb2Nfc3RhdHMgcHJpbnRzIG9ubHkgdGhlIG1vc3QgY29tbW9ubHkgaW50ZXJlc3Rpbmcgc3Rh
dGlzdGljcy4KLSAgTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyBt
YWxsaW5mby4KLQotKi8KLSNpZiBfX1NURF9DCi12b2lkICAgICBwdWJsaWNfbVNUQVRzKCk7Ci0j
ZWxzZQotdm9pZCAgICAgcHVibGljX21TVEFUcygpOwotI2VuZGlmCi0KLS8qIG1hbGxvcHQgdHVu
aW5nIG9wdGlvbnMgKi8KLQotLyoKLSAgTV9NWEZBU1QgaXMgdGhlIG1heGltdW0gcmVxdWVzdCBz
aXplIHVzZWQgZm9yICJmYXN0YmlucyIsIHNwZWNpYWwgYmlucwotICB0aGF0IGhvbGQgcmV0dXJu
ZWQgY2h1bmtzIHdpdGhvdXQgY29uc29saWRhdGluZyB0aGVpciBzcGFjZXMuIFRoaXMKLSAgZW5h
YmxlcyBmdXR1cmUgcmVxdWVzdHMgZm9yIGNodW5rcyBvZiB0aGUgc2FtZSBzaXplIHRvIGJlIGhh
bmRsZWQKLSAgdmVyeSBxdWlja2x5LCBidXQgY2FuIGluY3JlYXNlIGZyYWdtZW50YXRpb24sIGFu
ZCB0aHVzIGluY3JlYXNlIHRoZQotICBvdmVyYWxsIG1lbW9yeSBmb290cHJpbnQgb2YgYSBwcm9n
cmFtLgotCi0gIFRoaXMgbWFsbG9jIG1hbmFnZXMgZmFzdGJpbnMgdmVyeSBjb25zZXJ2YXRpdmVs
eSB5ZXQgc3RpbGwKLSAgZWZmaWNpZW50bHksIHNvIGZyYWdtZW50YXRpb24gaXMgcmFyZWx5IGEg
cHJvYmxlbSBmb3IgdmFsdWVzIGxlc3MKLSAgdGhhbiBvciBlcXVhbCB0byB0aGUgZGVmYXVsdC4g
IFRoZSBtYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZSBvZiBNWEZBU1QKLSAgaXMgODAuIFlvdSB3b3Vs
ZG4ndCB3YW50IGl0IGFueSBoaWdoZXIgdGhhbiB0aGlzIGFueXdheS4gIEZhc3RiaW5zCi0gIGFy
ZSBkZXNpZ25lZCBlc3BlY2lhbGx5IGZvciB1c2Ugd2l0aCBtYW55IHNtYWxsIHN0cnVjdHMsIG9i
amVjdHMgb3IKLSAgc3RyaW5ncyAtLSB0aGUgZGVmYXVsdCBoYW5kbGVzIHN0cnVjdHMvb2JqZWN0
cy9hcnJheXMgd2l0aCBzaXplcyB1cAotICB0byAxNiA0Ynl0ZSBmaWVsZHMsIG9yIHNtYWxsIHN0
cmluZ3MgcmVwcmVzZW50aW5nIHdvcmRzLCB0b2tlbnMsCi0gIGV0Yy4gVXNpbmcgZmFzdGJpbnMg
Zm9yIGxhcmdlciBvYmplY3RzIG5vcm1hbGx5IHdvcnNlbnMKLSAgZnJhZ21lbnRhdGlvbiB3aXRo
b3V0IGltcHJvdmluZyBzcGVlZC4KLQotICBNX01YRkFTVCBpcyBzZXQgaW4gUkVRVUVTVCBzaXpl
IHVuaXRzLiBJdCBpcyBpbnRlcm5hbGx5IHVzZWQgaW4KLSAgY2h1bmtzaXplIHVuaXRzLCB3aGlj
aCBhZGRzIHBhZGRpbmcgYW5kIGFsaWdubWVudC4gIFlvdSBjYW4gcmVkdWNlCi0gIE1fTVhGQVNU
IHRvIDAgdG8gZGlzYWJsZSBhbGwgdXNlIG9mIGZhc3RiaW5zLiAgVGhpcyBjYXVzZXMgdGhlIG1h
bGxvYwotICBhbGdvcml0aG0gdG8gYmUgYSBjbG9zZXIgYXBwcm94aW1hdGlvbiBvZiBmaWZvLWJl
c3QtZml0IGluIGFsbCBjYXNlcywKLSAgbm90IGp1c3QgZm9yIGxhcmdlciByZXF1ZXN0cywgYnV0
IHdpbGwgZ2VuZXJhbGx5IGNhdXNlIGl0IHRvIGJlCi0gIHNsb3dlci4KLSovCi0KLQotLyogTV9N
WEZBU1QgaXMgYSBzdGFuZGFyZCBTVklEL1hQRyB0dW5pbmcgb3B0aW9uLCB1c3VhbGx5IGxpc3Rl
ZCBpbiBtYWxsb2MuaCAqLwotI2lmbmRlZiBNX01YRkFTVAotI2RlZmluZSBNX01YRkFTVCAgICAg
ICAgICAgIDEgICAgCi0jZW5kaWYKLQotI2lmbmRlZiBERUZBVUxUX01YRkFTVAotI2RlZmluZSBE
RUZBVUxUX01YRkFTVCAgICAgNjQKLSNlbmRpZgotCi0KLS8qCi0gIE1fVFJJTV9USFJFU0hPTEQg
aXMgdGhlIG1heGltdW0gYW1vdW50IG9mIHVudXNlZCB0b3AtbW9zdCBtZW1vcnkKLSAgdG8ga2Vl
cCBiZWZvcmUgcmVsZWFzaW5nIHZpYSBtYWxsb2NfdHJpbSBpbiBmcmVlKCkuCi0KLSAgQXV0b21h
dGljIHRyaW1taW5nIGlzIG1haW5seSB1c2VmdWwgaW4gbG9uZy1saXZlZCBwcm9ncmFtcy4KLSAg
QmVjYXVzZSB0cmltbWluZyB2aWEgc2JyayBjYW4gYmUgc2xvdyBvbiBzb21lIHN5c3RlbXMsIGFu
ZCBjYW4KLSAgc29tZXRpbWVzIGJlIHdhc3RlZnVsIChpbiBjYXNlcyB3aGVyZSBwcm9ncmFtcyBp
bW1lZGlhdGVseQotICBhZnRlcndhcmQgYWxsb2NhdGUgbW9yZSBsYXJnZSBjaHVua3MpIHRoZSB2
YWx1ZSBzaG91bGQgYmUgaGlnaAotICBlbm91Z2ggc28gdGhhdCB5b3VyIG92ZXJhbGwgc3lzdGVt
IHBlcmZvcm1hbmNlIHdvdWxkIGltcHJvdmUgYnkKLSAgcmVsZWFzaW5nIHRoaXMgbXVjaCBtZW1v
cnkuCi0KLSAgVGhlIHRyaW0gdGhyZXNob2xkIGFuZCB0aGUgbW1hcCBjb250cm9sIHBhcmFtZXRl
cnMgKHNlZSBiZWxvdykKLSAgY2FuIGJlIHRyYWRlZCBvZmYgd2l0aCBvbmUgYW5vdGhlci4gVHJp
bW1pbmcgYW5kIG1tYXBwaW5nIGFyZQotICB0d28gZGlmZmVyZW50IHdheXMgb2YgcmVsZWFzaW5n
IHVudXNlZCBtZW1vcnkgYmFjayB0byB0aGUKLSAgc3lzdGVtLiBCZXR3ZWVuIHRoZXNlIHR3bywg
aXQgaXMgb2Z0ZW4gcG9zc2libGUgdG8ga2VlcAotICBzeXN0ZW0tbGV2ZWwgZGVtYW5kcyBvZiBh
IGxvbmctbGl2ZWQgcHJvZ3JhbSBkb3duIHRvIGEgYmFyZQotICBtaW5pbXVtLiBGb3IgZXhhbXBs
ZSwgaW4gb25lIHRlc3Qgc3VpdGUgb2Ygc2Vzc2lvbnMgbWVhc3VyaW5nCi0gIHRoZSBYRjg2IFgg
c2VydmVyIG9uIExpbnV4LCB1c2luZyBhIHRyaW0gdGhyZXNob2xkIG9mIDEyOEsgYW5kIGEKLSAg
bW1hcCB0aHJlc2hvbGQgb2YgMTkySyBsZWQgdG8gbmVhci1taW5pbWFsIGxvbmcgdGVybSByZXNv
dXJjZQotICBjb25zdW1wdGlvbi4KLQotICBJZiB5b3UgYXJlIHVzaW5nIHRoaXMgbWFsbG9jIGlu
IGEgbG9uZy1saXZlZCBwcm9ncmFtLCBpdCBzaG91bGQKLSAgcGF5IHRvIGV4cGVyaW1lbnQgd2l0
aCB0aGVzZSB2YWx1ZXMuICBBcyBhIHJvdWdoIGd1aWRlLCB5b3UKLSAgbWlnaHQgc2V0IHRvIGEg
dmFsdWUgY2xvc2UgdG8gdGhlIGF2ZXJhZ2Ugc2l6ZSBvZiBhIHByb2Nlc3MKLSAgKHByb2dyYW0p
IHJ1bm5pbmcgb24geW91ciBzeXN0ZW0uICBSZWxlYXNpbmcgdGhpcyBtdWNoIG1lbW9yeQotICB3
b3VsZCBhbGxvdyBzdWNoIGEgcHJvY2VzcyB0byBydW4gaW4gbWVtb3J5LiAgR2VuZXJhbGx5LCBp
dCdzCi0gIHdvcnRoIGl0IHRvIHR1bmUgZm9yIHRyaW1taW5nIHJhdGhlciB0aGFtIG1lbW9yeSBt
YXBwaW5nIHdoZW4gYQotICBwcm9ncmFtIHVuZGVyZ29lcyBwaGFzZXMgd2hlcmUgc2V2ZXJhbCBs
YXJnZSBjaHVua3MgYXJlCi0gIGFsbG9jYXRlZCBhbmQgcmVsZWFzZWQgaW4gd2F5cyB0aGF0IGNh
biByZXVzZSBlYWNoIG90aGVyJ3MKLSAgc3RvcmFnZSwgcGVyaGFwcyBtaXhlZCB3aXRoIHBoYXNl
cyB3aGVyZSB0aGVyZSBhcmUgbm8gc3VjaAotICBjaHVua3MgYXQgYWxsLiAgQW5kIGluIHdlbGwt
YmVoYXZlZCBsb25nLWxpdmVkIHByb2dyYW1zLAotICBjb250cm9sbGluZyByZWxlYXNlIG9mIGxh
cmdlIGJsb2NrcyB2aWEgdHJpbW1pbmcgdmVyc3VzIG1hcHBpbmcKLSAgaXMgdXN1YWxseSBmYXN0
ZXIuCi0KLSAgSG93ZXZlciwgaW4gbW9zdCBwcm9ncmFtcywgdGhlc2UgcGFyYW1ldGVycyBzZXJ2
ZSBtYWlubHkgYXMKLSAgcHJvdGVjdGlvbiBhZ2FpbnN0IHRoZSBzeXN0ZW0tbGV2ZWwgZWZmZWN0
cyBvZiBjYXJyeWluZyBhcm91bmQKLSAgbWFzc2l2ZSBhbW91bnRzIG9mIHVubmVlZGVkIG1lbW9y
eS4gU2luY2UgZnJlcXVlbnQgY2FsbHMgdG8KLSAgc2JyaywgbW1hcCwgYW5kIG11bm1hcCBvdGhl
cndpc2UgZGVncmFkZSBwZXJmb3JtYW5jZSwgdGhlIGRlZmF1bHQKLSAgcGFyYW1ldGVycyBhcmUg
c2V0IHRvIHJlbGF0aXZlbHkgaGlnaCB2YWx1ZXMgdGhhdCBzZXJ2ZSBvbmx5IGFzCi0gIHNhZmVn
dWFyZHMuCi0KLSAgVGhlIHRyaW0gdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gcGFnZSBzaXpl
IHRvIGhhdmUgYW55IHVzZWZ1bAotICBlZmZlY3QuICBUbyBkaXNhYmxlIHRyaW1taW5nIGNvbXBs
ZXRlbHksIHlvdSBjYW4gc2V0IHRvIAotICAodW5zaWduZWQgbG9uZykoLTEpCi0KLSAgVHJpbSBz
ZXR0aW5ncyBpbnRlcmFjdCB3aXRoIGZhc3RiaW4gKE1YRkFTVCkgc2V0dGluZ3M6IFVubGVzcwot
ICBUUklNX0ZBU1RCSU5TIGlzIGRlZmluZWQsIGF1dG9tYXRpYyB0cmltbWluZyBuZXZlciB0YWtl
cyBwbGFjZSB1cG9uCi0gIGZyZWVpbmcgYSBjaHVuayB3aXRoIHNpemUgbGVzcyB0aGFuIG9yIGVx
dWFsIHRvIE1YRkFTVC4gVHJpbW1pbmcgaXMKLSAgaW5zdGVhZCBkZWxheWVkIHVudGlsIHN1YnNl
cXVlbnQgZnJlZWluZyBvZiBsYXJnZXIgY2h1bmtzLiBIb3dldmVyLAotICB5b3UgY2FuIHN0aWxs
IGZvcmNlIGFuIGF0dGVtcHRlZCB0cmltIGJ5IGNhbGxpbmcgbWFsbG9jX3RyaW0uCi0KLSAgQWxz
bywgdHJpbW1pbmcgaXMgbm90IGdlbmVyYWxseSBwb3NzaWJsZSBpbiBjYXNlcyB3aGVyZQotICB0
aGUgbWFpbiBhcmVuYSBpcyBvYnRhaW5lZCB2aWEgbW1hcC4KLQotICBOb3RlIHRoYXQgdGhlIHRy
aWNrIHNvbWUgcGVvcGxlIHVzZSBvZiBtYWxsb2NpbmcgYSBodWdlIHNwYWNlIGFuZAotICB0aGVu
IGZyZWVpbmcgaXQgYXQgcHJvZ3JhbSBzdGFydHVwLCBpbiBhbiBhdHRlbXB0IHRvIHJlc2VydmUg
c3lzdGVtCi0gIG1lbW9yeSwgZG9lc24ndCBoYXZlIHRoZSBpbnRlbmRlZCBlZmZlY3QgdW5kZXIg
YXV0b21hdGljIHRyaW1taW5nLAotICBzaW5jZSB0aGF0IG1lbW9yeSB3aWxsIGltbWVkaWF0ZWx5
IGJlIHJldHVybmVkIHRvIHRoZSBzeXN0ZW0uCi0qLwotCi0jZGVmaW5lIE1fVFJJTV9USFJFU0hP
TEQgICAgICAgLTEKLQotI2lmbmRlZiBERUZBVUxUX1RSSU1fVEhSRVNIT0xECi0jZGVmaW5lIERF
RkFVTFRfVFJJTV9USFJFU0hPTEQgKDI1NiAqIDEwMjQpCi0jZW5kaWYKLQotLyoKLSAgTV9UT1Bf
UEFEIGlzIHRoZSBhbW91bnQgb2YgZXh0cmEgYHBhZGRpbmcnIHNwYWNlIHRvIGFsbG9jYXRlIG9y
Ci0gIHJldGFpbiB3aGVuZXZlciBzYnJrIGlzIGNhbGxlZC4gSXQgaXMgdXNlZCBpbiB0d28gd2F5
cyBpbnRlcm5hbGx5OgotCi0gICogV2hlbiBzYnJrIGlzIGNhbGxlZCB0byBleHRlbmQgdGhlIHRv
cCBvZiB0aGUgYXJlbmEgdG8gc2F0aXNmeQotICBhIG5ldyBtYWxsb2MgcmVxdWVzdCwgdGhpcyBt
dWNoIHBhZGRpbmcgaXMgYWRkZWQgdG8gdGhlIHNicmsKLSAgcmVxdWVzdC4KLQotICAqIFdoZW4g
bWFsbG9jX3RyaW0gaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBmcmVlKCksCi0gIGl0IGlz
IHVzZWQgYXMgdGhlIGBwYWQnIGFyZ3VtZW50LgotCi0gIEluIGJvdGggY2FzZXMsIHRoZSBhY3R1
YWwgYW1vdW50IG9mIHBhZGRpbmcgaXMgcm91bmRlZAotICBzbyB0aGF0IHRoZSBlbmQgb2YgdGhl
IGFyZW5hIGlzIGFsd2F5cyBhIHN5c3RlbSBwYWdlIGJvdW5kYXJ5LgotCi0gIFRoZSBtYWluIHJl
YXNvbiBmb3IgdXNpbmcgcGFkZGluZyBpcyB0byBhdm9pZCBjYWxsaW5nIHNicmsgc28KLSAgb2Z0
ZW4uIEhhdmluZyBldmVuIGEgc21hbGwgcGFkIGdyZWF0bHkgcmVkdWNlcyB0aGUgbGlrZWxpaG9v
ZAotICB0aGF0IG5lYXJseSBldmVyeSBtYWxsb2MgcmVxdWVzdCBkdXJpbmcgcHJvZ3JhbSBzdGFy
dC11cCAob3IKLSAgYWZ0ZXIgdHJpbW1pbmcpIHdpbGwgaW52b2tlIHNicmssIHdoaWNoIG5lZWRs
ZXNzbHkgd2FzdGVzCi0gIHRpbWUuCi0KLSAgQXV0b21hdGljIHJvdW5kaW5nLXVwIHRvIHBhZ2Ut
c2l6ZSB1bml0cyBpcyBub3JtYWxseSBzdWZmaWNpZW50Ci0gIHRvIGF2b2lkIG1lYXN1cmFibGUg
b3ZlcmhlYWQsIHNvIHRoZSBkZWZhdWx0IGlzIDAuICBIb3dldmVyLCBpbgotICBzeXN0ZW1zIHdo
ZXJlIHNicmsgaXMgcmVsYXRpdmVseSBzbG93LCBpdCBjYW4gcGF5IHRvIGluY3JlYXNlCi0gIHRo
aXMgdmFsdWUsIGF0IHRoZSBleHBlbnNlIG9mIGNhcnJ5aW5nIGFyb3VuZCBtb3JlIG1lbW9yeSB0
aGFuCi0gIHRoZSBwcm9ncmFtIG5lZWRzLgotKi8KLQotI2RlZmluZSBNX1RPUF9QQUQgICAgICAg
ICAgICAgIC0yCi0KLSNpZm5kZWYgREVGQVVMVF9UT1BfUEFECi0jZGVmaW5lIERFRkFVTFRfVE9Q
X1BBRCAgICAgICAgKDApCi0jZW5kaWYKLQotLyoKLSAgTV9NTUFQX1RIUkVTSE9MRCBpcyB0aGUg
cmVxdWVzdCBzaXplIHRocmVzaG9sZCBmb3IgdXNpbmcgbW1hcCgpCi0gIHRvIHNlcnZpY2UgYSBy
ZXF1ZXN0LiBSZXF1ZXN0cyBvZiBhdCBsZWFzdCB0aGlzIHNpemUgdGhhdCBjYW5ub3QKLSAgYmUg
YWxsb2NhdGVkIHVzaW5nIGFscmVhZHktZXhpc3Rpbmcgc3BhY2Ugd2lsbCBiZSBzZXJ2aWNlZCB2
aWEgbW1hcC4KLSAgKElmIGVub3VnaCBub3JtYWwgZnJlZWQgc3BhY2UgYWxyZWFkeSBleGlzdHMg
aXQgaXMgdXNlZCBpbnN0ZWFkLikKLQotICBVc2luZyBtbWFwIHNlZ3JlZ2F0ZXMgcmVsYXRpdmVs
eSBsYXJnZSBjaHVua3Mgb2YgbWVtb3J5IHNvIHRoYXQKLSAgdGhleSBjYW4gYmUgaW5kaXZpZHVh
bGx5IG9idGFpbmVkIGFuZCByZWxlYXNlZCBmcm9tIHRoZSBob3N0Ci0gIHN5c3RlbS4gQSByZXF1
ZXN0IHNlcnZpY2VkIHRocm91Z2ggbW1hcCBpcyBuZXZlciByZXVzZWQgYnkgYW55Ci0gIG90aGVy
IHJlcXVlc3QgKGF0IGxlYXN0IG5vdCBkaXJlY3RseTsgdGhlIHN5c3RlbSBtYXkganVzdCBzbwot
ICBoYXBwZW4gdG8gcmVtYXAgc3VjY2Vzc2l2ZSByZXF1ZXN0cyB0byB0aGUgc2FtZSBsb2NhdGlv
bnMpLgotCi0gIFNlZ3JlZ2F0aW5nIHNwYWNlIGluIHRoaXMgd2F5IGhhcyB0aGUgYmVuZWZpdHMg
dGhhdDoKLQotICAgMS4gTW1hcHBlZCBzcGFjZSBjYW4gQUxXQVlTIGJlIGluZGl2aWR1YWxseSBy
ZWxlYXNlZCBiYWNrIAotICAgICAgdG8gdGhlIHN5c3RlbSwgd2hpY2ggaGVscHMga2VlcCB0aGUg
c3lzdGVtIGxldmVsIG1lbW9yeSAKLSAgICAgIGRlbWFuZHMgb2YgYSBsb25nLWxpdmVkIHByb2dy
YW0gbG93LiAKLSAgIDIuIE1hcHBlZCBtZW1vcnkgY2FuIG5ldmVyIGJlY29tZSBgbG9ja2VkJyBi
ZXR3ZWVuCi0gICAgICBvdGhlciBjaHVua3MsIGFzIGNhbiBoYXBwZW4gd2l0aCBub3JtYWxseSBh
bGxvY2F0ZWQgY2h1bmtzLCB3aGljaAotICAgICAgbWVhbnMgdGhhdCBldmVuIHRyaW1taW5nIHZp
YSBtYWxsb2NfdHJpbSB3b3VsZCBub3QgcmVsZWFzZSB0aGVtLgotICAgMy4gT24gc29tZSBzeXN0
ZW1zIHdpdGggImhvbGVzIiBpbiBhZGRyZXNzIHNwYWNlcywgbW1hcCBjYW4gb2J0YWluCi0gICAg
ICBtZW1vcnkgdGhhdCBzYnJrIGNhbm5vdC4KLQotICBIb3dldmVyLCBpdCBoYXMgdGhlIGRpc2Fk
dmFudGFnZXMgdGhhdDoKLQotICAgMS4gVGhlIHNwYWNlIGNhbm5vdCBiZSByZWNsYWltZWQsIGNv
bnNvbGlkYXRlZCwgYW5kIHRoZW4KLSAgICAgIHVzZWQgdG8gc2VydmljZSBsYXRlciByZXF1ZXN0
cywgYXMgaGFwcGVucyB3aXRoIG5vcm1hbCBjaHVua3MuCi0gICAyLiBJdCBjYW4gbGVhZCB0byBt
b3JlIHdhc3RhZ2UgYmVjYXVzZSBvZiBtbWFwIHBhZ2UgYWxpZ25tZW50Ci0gICAgICByZXF1aXJl
bWVudHMKLSAgIDMuIEl0IGNhdXNlcyBtYWxsb2MgcGVyZm9ybWFuY2UgdG8gYmUgbW9yZSBkZXBl
bmRlbnQgb24gaG9zdAotICAgICAgc3lzdGVtIG1lbW9yeSBtYW5hZ2VtZW50IHN1cHBvcnQgcm91
dGluZXMgd2hpY2ggbWF5IHZhcnkgaW4KLSAgICAgIGltcGxlbWVudGF0aW9uIHF1YWxpdHkgYW5k
IG1heSBpbXBvc2UgYXJiaXRyYXJ5Ci0gICAgICBsaW1pdGF0aW9ucy4gR2VuZXJhbGx5LCBzZXJ2
aWNpbmcgYSByZXF1ZXN0IHZpYSBub3JtYWwKLSAgICAgIG1hbGxvYyBzdGVwcyBpcyBmYXN0ZXIg
dGhhbiBnb2luZyB0aHJvdWdoIGEgc3lzdGVtJ3MgbW1hcC4KLQotICBUaGUgYWR2YW50YWdlcyBv
ZiBtbWFwIG5lYXJseSBhbHdheXMgb3V0d2VpZ2ggZGlzYWR2YW50YWdlcyBmb3IKLSAgImxhcmdl
IiBjaHVua3MsIGJ1dCB0aGUgdmFsdWUgb2YgImxhcmdlIiB2YXJpZXMgYWNyb3NzIHN5c3RlbXMu
ICBUaGUKLSAgZGVmYXVsdCBpcyBhbiBlbXBpcmljYWxseSBkZXJpdmVkIHZhbHVlIHRoYXQgd29y
a3Mgd2VsbCBpbiBtb3N0Ci0gIHN5c3RlbXMuCi0qLwotCi0jZGVmaW5lIE1fTU1BUF9USFJFU0hP
TEQgICAgICAtMwotCi0jaWZuZGVmIERFRkFVTFRfTU1BUF9USFJFU0hPTEQKLSNkZWZpbmUgREVG
QVVMVF9NTUFQX1RIUkVTSE9MRCAoMjU2ICogMTAyNCkKLSNlbmRpZgotCi0vKgotICBNX01NQVBf
TUFYIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0byBzaW11bHRhbmVvdXNseQot
ICBzZXJ2aWNlIHVzaW5nIG1tYXAuIFRoaXMgcGFyYW1ldGVyIGV4aXN0cyBiZWNhdXNlCi0uIFNv
bWUgc3lzdGVtcyBoYXZlIGEgbGltaXRlZCBudW1iZXIgb2YgaW50ZXJuYWwgdGFibGVzIGZvcgot
ICB1c2UgYnkgbW1hcCwgYW5kIHVzaW5nIG1vcmUgdGhhbiBhIGZldyBvZiB0aGVtIG1heSBkZWdy
YWRlCi0gIHBlcmZvcm1hbmNlLgotCi0gIFRoZSBkZWZhdWx0IGlzIHNldCB0byBhIHZhbHVlIHRo
YXQgc2VydmVzIG9ubHkgYXMgYSBzYWZlZ3VhcmQuCi0gIFNldHRpbmcgdG8gMCBkaXNhYmxlcyB1
c2Ugb2YgbW1hcCBmb3Igc2VydmljaW5nIGxhcmdlIHJlcXVlc3RzLiAgSWYKLSAgSEFWRV9NTUFQ
IGlzIG5vdCBzZXQsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDAsIGFuZCBhdHRlbXB0cyB0byBzZXQg
aXQKLSAgdG8gbm9uLXplcm8gdmFsdWVzIGluIG1hbGxvcHQgd2lsbCBmYWlsLgotKi8KLQotI2Rl
ZmluZSBNX01NQVBfTUFYICAgICAgICAgICAgIC00Ci0KLSNpZm5kZWYgREVGQVVMVF9NTUFQX01B
WAotI2lmIEhBVkVfTU1BUAotI2RlZmluZSBERUZBVUxUX01NQVBfTUFYICAgICAgICg2NTUzNikK
LSNlbHNlCi0jZGVmaW5lIERFRkFVTFRfTU1BUF9NQVggICAgICAgKDApCi0jZW5kaWYKLSNlbmRp
ZgotCi0vKiAKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIFRvIG1ha2UgYSBmdWxseSBjdXN0b21pemFi
bGUgbWFsbG9jLmggaGVhZGVyIGZpbGUsIGN1dCBldmVyeXRoaW5nCi0gIGFib3ZlIHRoaXMgbGlu
ZSwgcHV0IGludG8gZmlsZSBtYWxsb2MuaCwgZWRpdCB0byBzdWl0LCBhbmQgI2luY2x1ZGUgaXQg
Ci0gIG9uIHRoZSBuZXh0IGxpbmUsIGFzIHdlbGwgYXMgaW4gcHJvZ3JhbXMgdGhhdCB1c2UgdGhp
cyBtYWxsb2MuCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLQotLyogI2luY2x1ZGUgIm1hbGxvYy5o
IiAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHVibGljIHdyYXBwZXJzIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmZGVmIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTCi0K
LS8qIERlY2xhcmUgYWxsIHJvdXRpbmVzIGFzIGludGVybmFsICovCi0jaWYgX19TVERfQwotc3Rh
dGljIFZvaWRfdCogIG1BTExPYyhzaXplX3QpOwotc3RhdGljIHZvaWQgICAgIGZSRWUoVm9pZF90
Kik7Ci1zdGF0aWMgVm9pZF90KiAgckVBTExPYyhWb2lkX3QqLCBzaXplX3QpOwotc3RhdGljIFZv
aWRfdCogIG1FTUFMSUduKHNpemVfdCwgc2l6ZV90KTsKLXN0YXRpYyBWb2lkX3QqICB2QUxMT2Mo
c2l6ZV90KTsKLXN0YXRpYyBWb2lkX3QqICBwVkFMTE9jKHNpemVfdCk7Ci1zdGF0aWMgVm9pZF90
KiAgY0FMTE9jKHNpemVfdCwgc2l6ZV90KTsKLXN0YXRpYyBWb2lkX3QqKiBpQ0FMTE9jKHNpemVf
dCwgc2l6ZV90LCBWb2lkX3QqKik7Ci1zdGF0aWMgVm9pZF90KiogaUNPTUFMTE9jKHNpemVfdCwg
c2l6ZV90KiwgVm9pZF90KiopOwotc3RhdGljIHZvaWQgICAgIGNGUkVlKFZvaWRfdCopOwotc3Rh
dGljIGludCAgICAgIG1UUkltKHNpemVfdCk7Ci1zdGF0aWMgc2l6ZV90ICAgbVVTQUJMZShWb2lk
X3QqKTsKLXN0YXRpYyB2b2lkICAgICBtU1RBVHMoKTsKLXN0YXRpYyBpbnQgICAgICBtQUxMT1B0
KGludCwgaW50KTsKLXN0YXRpYyBzdHJ1Y3QgbWFsbGluZm8gbUFMTElORm8odm9pZCk7Ci0jZWxz
ZQotc3RhdGljIFZvaWRfdCogIG1BTExPYygpOwotc3RhdGljIHZvaWQgICAgIGZSRWUoKTsKLXN0
YXRpYyBWb2lkX3QqICByRUFMTE9jKCk7Ci1zdGF0aWMgVm9pZF90KiAgbUVNQUxJR24oKTsKLXN0
YXRpYyBWb2lkX3QqICB2QUxMT2MoKTsKLXN0YXRpYyBWb2lkX3QqICBwVkFMTE9jKCk7Ci1zdGF0
aWMgVm9pZF90KiAgY0FMTE9jKCk7Ci1zdGF0aWMgVm9pZF90KiogaUNBTExPYygpOwotc3RhdGlj
IFZvaWRfdCoqIGlDT01BTExPYygpOwotc3RhdGljIHZvaWQgICAgIGNGUkVlKCk7Ci1zdGF0aWMg
aW50ICAgICAgbVRSSW0oKTsKLXN0YXRpYyBzaXplX3QgICBtVVNBQkxlKCk7Ci1zdGF0aWMgdm9p
ZCAgICAgbVNUQVRzKCk7Ci1zdGF0aWMgaW50ICAgICAgbUFMTE9QdCgpOwotc3RhdGljIHN0cnVj
dCBtYWxsaW5mbyBtQUxMSU5GbygpOwotI2VuZGlmCi0KLS8qCi0gIE1BTExPQ19QUkVBQ1RJT04g
YW5kIE1BTExPQ19QT1NUQUNUSU9OIHNob3VsZCBiZQotICBkZWZpbmVkIHRvIHJldHVybiAwIG9u
IHN1Y2Nlc3MsIGFuZCBub256ZXJvIG9uIGZhaWx1cmUuCi0gIFRoZSByZXR1cm4gdmFsdWUgb2Yg
TUFMTE9DX1BPU1RBQ1RJT04gaXMgY3VycmVudGx5IGlnbm9yZWQKLSAgaW4gd3JhcHBlciBmdW5j
dGlvbnMgc2luY2UgdGhlcmUgaXMgbm8gcmVhc29uYWJsZSBkZWZhdWx0Ci0gIGFjdGlvbiB0byB0
YWtlIG9uIGZhaWx1cmUuCi0qLwotCi0KLSNpZmRlZiBVU0VfTUFMTE9DX0xPQ0sKLQotI2lmZGVm
IFdJTjMyCi0KLXN0YXRpYyBpbnQgbUFMTE9DX01VVEV4OwotI2RlZmluZSBNQUxMT0NfUFJFQUNU
SU9OICAgc2x3YWl0KCZtQUxMT0NfTVVURXgpCi0jZGVmaW5lIE1BTExPQ19QT1NUQUNUSU9OICBz
bHJlbGVhc2UoJm1BTExPQ19NVVRFeCkKLQotI2Vsc2UKLQotI2luY2x1ZGUgPHB0aHJlYWQuaD4K
LQotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBtQUxMT0NfTVVURXggPSBQVEhSRUFEX01VVEVYX0lO
SVRJQUxJWkVSOwotCi0jZGVmaW5lIE1BTExPQ19QUkVBQ1RJT04gICBwdGhyZWFkX211dGV4X2xv
Y2soJm1BTExPQ19NVVRFeCkKLSNkZWZpbmUgTUFMTE9DX1BPU1RBQ1RJT04gIHB0aHJlYWRfbXV0
ZXhfdW5sb2NrKCZtQUxMT0NfTVVURXgpCi0KLSNlbmRpZiAvKiBVU0VfTUFMTE9DX0xPQ0sgKi8K
LQotI2Vsc2UKLQotLyogU3Vic3RpdHV0ZSBhbnl0aGluZyB5b3UgbGlrZSBmb3IgdGhlc2UgKi8K
LQotI2RlZmluZSBNQUxMT0NfUFJFQUNUSU9OICAgKDApCi0jZGVmaW5lIE1BTExPQ19QT1NUQUNU
SU9OICAoMCkKLQotI2VuZGlmCi0KLVZvaWRfdCogcHVibGljX21BTExPYyhzaXplX3QgYnl0ZXMp
IHsKLSAgVm9pZF90KiBtOwotICBpZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAgcmV0
dXJuIDA7Ci0gIH0KLSAgbSA9IG1BTExPYyhieXRlcyk7Ci0gIGlmIChNQUxMT0NfUE9TVEFDVElP
TiAhPSAwKSB7Ci0gIH0KLSAgcmV0dXJuIG07Ci19Ci0KLQotc3RhdGljIHB0aHJlYWRfb25jZV90
IGZyZWVfbXV0ZXhfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOwotc3RhdGljIHB0aHJlYWRfbXV0
ZXhfdCBmcmVlX211dGV4Owotc3RhdGljIGludCBzY2hlZHVsZWRfZnJlZV9zaXplOwotc3RhdGlj
IGludCBzY2hlZHVsZWRfZnJlZV9jYXBhY2l0eTsKLXN0YXRpYyBpbnQgc2NoZWR1bGVkX2ZyZWVf
bGlzdDsKLWJvb2wgZnJlZV9pc19zY2hlZHVsZWQ7Ci0KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVf
c2NoZWR1bGVkX2ZyZWVfbGlzdCgpCi17Ci0gICAgcHRocmVhZF9tdXRleF9pbml0KCZmcmVlX211
dGV4LCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgZHJhaW5fc2NoZWR1bGVkX2ZyZWVfbGlzdCgp
Ci17Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZmcmVlX211dGV4KTsKLSAgICBpZiAoZnJlZV9p
c19zY2hlZHVsZWQpIHsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHNjaGVkdWxlZF9mcmVl
X3NpemU7IGkrKykgewotICAgICAgICAgICAgbWFpbl90aHJlYWRfZnJlZShzY2hlZHVsZWRfZnJl
ZV9saXN0W2ldKTsKLSAgICAgICAgfQotICAgICAgICBmcmVlKHNjaGVkdWxlZF9mcmVlX2xpc3Qp
OwotICAgICAgICBzY2hlZHVsZWRfZnJlZV9saXN0ID0gTlVMTDsKLSAgICAgICAgc2NoZWR1bGVk
X2ZyZWVfc2l6ZSA9IDA7Ci0gICAgICAgIHNjaGVkdWxlZF9mcmVlX2NhcGFjaXR5ID0gMDsKLSAg
ICAgICAgZnJlZV9pc19zY2hlZHVsZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcHRocmVhZF9tdXRl
eF91bmxvY2soJmZyZWVfbXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZCBzY2hlZHVsZV9mcmVlX29u
X21haW5fdGhyZWFkKFZvaWRfdCogbSkKLXsKLSAgICBwdGhyZWFkX29uY2UoJmZyZWVfbXV0ZXhf
b25jZSwgaW5pdGlhbGl6ZV9zY2hlZHVsZWRfZnJlZV9saXN0KTsKLQotICAgIHB0aHJlYWRfbXV0
ZXhfbG9jaygmZnJlZV9tdXRleCk7Ci0gICAgaWYgKHNjaGVkdWxlZF9mcmVlX3NpemUgPT0gc2No
ZWR1bGVkX2ZyZWVfY2FwYWNpdHkpIHsKLSAgICAgICAgc2NoZWR1bGVkX2ZyZWVfY2FwYWNpdHkg
PSBzY2hlZHVsZWRfZnJlZV9jYXBhY2l0eSA9PSAwID8gMTYgOiBzY2hlZHVsZWRfZnJlZV9jYXBh
Y2l0eSAqIDEuMjsKLSAgICAgICAgc2NoZWR1bGVkX2ZyZWVfbGlzdCA9IChWb2lkX3QqKilyZWFs
bG9jKHNjaGVkdWxlZF9mcmVlX2xpc3QsIHNpemVvZihWb2lkX3QqKSAqIHNjaGVkdWxlZF9mcmVl
X2NhcGFjaXR5KTsKLSAgICB9Ci0gICAgc2NoZWR1bGVkX2ZyZWVfbGlzdFtzY2hlZHVsZWRfZnJl
ZV9zaXplKytdID0gbTsKLSAgICBpZiAoIWZyZWVfaXNfc2NoZWR1bGVkKSB7Ci0gICAgICAgIFFU
aW1lcjo6aW1tZWRpYXRlU2luZ2xlU2hvdE9uTWFpblRocmVhZCgwLCBkcmFpbl9zY2hlZHVsZWRf
ZnJlZV9saXN0KTsKLSAgICAgICAgZnJlZV9pc19zY2hlZHVsZWQgPSB0cnVlOwotICAgIH0KLSAg
ICBwdGhyZWFkX211dGV4X3VubG9jaygmZnJlZV9tdXRleCk7Ci19Ci0KLXZvaWQgcHVibGljX2ZS
RWUoVm9pZF90KiBtKSB7Ci0gIGlmICghcHRocmVhZF9tYWluX25wKCkpIHsKLSAgICAgIHNjaGVk
dWxlX2ZyZWVfb25fbWFpbl90aHJlYWQobSk7Ci0gICAgICByZXR1cm47Ci0gIH0KLQotICBpZiAo
TUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGZSRWUobSk7Ci0g
IGlmIChNQUxMT0NfUE9TVEFDVElPTiAhPSAwKSB7Ci0gIH0KLX0KLQotVm9pZF90KiBwdWJsaWNf
ckVBTExPYyhWb2lkX3QqIG0sIHNpemVfdCBieXRlcykgewotICBpZiAoTUFMTE9DX1BSRUFDVElP
TiAhPSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgbSA9IHJFQUxMT2MobSwgYnl0ZXMpOwot
ICBpZiAoTUFMTE9DX1BPU1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi1W
b2lkX3QqIHB1YmxpY19tRU1BTElHbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsK
LSAgVm9pZF90KiBtOwotICBpZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAgcmV0dXJu
IDA7Ci0gIH0KLSAgbSA9IG1FTUFMSUduKGFsaWdubWVudCwgYnl0ZXMpOwotICBpZiAoTUFMTE9D
X1BPU1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi1Wb2lkX3QqIHB1Ymxp
Y192QUxMT2Moc2l6ZV90IGJ5dGVzKSB7Ci0gIFZvaWRfdCogbTsKLSAgaWYgKE1BTExPQ19QUkVB
Q1RJT04gIT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0gIG0gPSB2QUxMT2MoYnl0ZXMpOwot
ICBpZiAoTUFMTE9DX1BPU1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi1W
b2lkX3QqIHB1YmxpY19wVkFMTE9jKHNpemVfdCBieXRlcykgewotICBWb2lkX3QqIG07Ci0gIGlm
IChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBtID0gcFZB
TExPYyhieXRlcyk7Ci0gIGlmIChNQUxMT0NfUE9TVEFDVElPTiAhPSAwKSB7Ci0gIH0KLSAgcmV0
dXJuIG07Ci19Ci0KLVZvaWRfdCogcHVibGljX2NBTExPYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1f
c2l6ZSkgewotICBWb2lkX3QqIG07Ci0gIGlmIChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsKLSAg
ICByZXR1cm4gMDsKLSAgfQotICBtID0gY0FMTE9jKG4sIGVsZW1fc2l6ZSk7Ci0gIGlmIChNQUxM
T0NfUE9TVEFDVElPTiAhPSAwKSB7Ci0gIH0KLSAgcmV0dXJuIG07Ci19Ci0KLQotVm9pZF90Kiog
cHVibGljX2lDQUxMT2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUsIFZvaWRfdCoqIGNodW5r
cykgewotICBWb2lkX3QqKiBtOwotICBpZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAg
cmV0dXJuIDA7Ci0gIH0KLSAgbSA9IGlDQUxMT2MobiwgZWxlbV9zaXplLCBjaHVua3MpOwotICBp
ZiAoTUFMTE9DX1BPU1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi1Wb2lk
X3QqKiBwdWJsaWNfaUNPTUFMTE9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZXNbXSwgVm9pZF90Kiog
Y2h1bmtzKSB7Ci0gIFZvaWRfdCoqIG07Ci0gIGlmIChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsK
LSAgICByZXR1cm4gMDsKLSAgfQotICBtID0gaUNPTUFMTE9jKG4sIHNpemVzLCBjaHVua3MpOwot
ICBpZiAoTUFMTE9DX1BPU1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi12
b2lkIHB1YmxpY19jRlJFZShWb2lkX3QqIG0pIHsKLSAgaWYgKE1BTExPQ19QUkVBQ1RJT04gIT0g
MCkgewotICAgIHJldHVybjsKLSAgfQotICBjRlJFZShtKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNU
SU9OICE9IDApIHsKLSAgfQotfQotCi1pbnQgcHVibGljX21UUkltKHNpemVfdCBzKSB7Ci0gIGlu
dCByZXN1bHQ7Ci0gIGlmIChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsK
LSAgfQotICByZXN1bHQgPSBtVFJJbShzKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9IDAp
IHsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zaXplX3QgcHVibGljX21VU0FCTGUoVm9p
ZF90KiBtKSB7Ci0gIHNpemVfdCByZXN1bHQ7Ci0gIGlmIChNQUxMT0NfUFJFQUNUSU9OICE9IDAp
IHsKLSAgICByZXR1cm4gMDsKLSAgfQotICByZXN1bHQgPSBtVVNBQkxlKG0pOwotICBpZiAoTUFM
TE9DX1BPU1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
cHVibGljX21TVEFUcygpIHsKLSAgaWYgKE1BTExPQ19QUkVBQ1RJT04gIT0gMCkgewotICAgIHJl
dHVybjsKLSAgfQotICBtU1RBVHMoKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9IDApIHsK
LSAgfQotfQotCi1zdHJ1Y3QgbWFsbGluZm8gcHVibGljX21BTExJTkZvKCkgewotICBzdHJ1Y3Qg
bWFsbGluZm8gbTsKLSAgaWYgKE1BTExPQ19QUkVBQ1RJT04gIT0gMCkgewotICAgIHN0cnVjdCBt
YWxsaW5mbyBubSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OwotICAgIHJldHVy
biBubTsKLSAgfQotICBtID0gbUFMTElORm8oKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9
IDApIHsKLSAgfQotICByZXR1cm4gbTsKLX0KLQotaW50IHB1YmxpY19tQUxMT1B0KGludCBwLCBp
bnQgdikgewotICBpbnQgcmVzdWx0OwotICBpZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0g
ICAgcmV0dXJuIDA7Ci0gIH0KLSAgcmVzdWx0ID0gbUFMTE9QdChwLCB2KTsKLSAgaWYgKE1BTExP
Q19QT1NUQUNUSU9OICE9IDApIHsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0jZW5kaWYK
LQotCi0KLS8qIC0tLS0tLS0tLS0tLS0gT3B0aW9uYWwgdmVyc2lvbnMgb2YgbWVtY29weSAtLS0t
LS0tLS0tLS0tLS0tICovCi0KLQotI2lmIFVTRV9NRU1DUFkKLQotLyogCi0gIE5vdGU6IG1lbWNw
eSBpcyBPTkxZIGludm9rZWQgd2l0aCBub24tb3ZlcmxhcHBpbmcgcmVnaW9ucywKLSAgc28gdGhl
ICh1c3VhbGx5IHNsb3dlcikgbWVtbW92ZSBpcyBub3QgbmVlZGVkLgotKi8KLQotI2RlZmluZSBN
QUxMT0NfQ09QWShkZXN0LCBzcmMsIG5ieXRlcykgIG1lbWNweShkZXN0LCBzcmMsIG5ieXRlcykK
LSNkZWZpbmUgTUFMTE9DX1pFUk8oZGVzdCwgbmJ5dGVzKSAgICAgICBtZW1zZXQoZGVzdCwgMCwg
ICBuYnl0ZXMpCi0KLSNlbHNlIC8qICFVU0VfTUVNQ1BZICovCi0KLS8qIFVzZSBEdWZmJ3MgZGV2
aWNlIGZvciBnb29kIHplcm9pbmcvY29weWluZyBwZXJmb3JtYW5jZS4gKi8KLQotI2RlZmluZSBN
QUxMT0NfWkVSTyhjaGFycCwgbmJ5dGVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBJTlRFUk5BTF9TSVpFX1Qq
IG16cCA9IChJTlRFUk5BTF9TSVpFX1QqKShjaGFycCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBDSFVOS19TSVpFX1QgIG1jdG1wID0gKG5ieXRlcykvc2l6ZW9mKElOVEVSTkFMX1NJ
WkVfVCk7ICAgICAgICAgICAgICAgICAgICAgXAotICBsb25nIG1jbjsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBp
ZiAobWN0bXAgPCA4KSBtY24gPSAwOyBlbHNlIHsgbWNuID0gKG1jdG1wLTEpLzg7IG1jdG1wICU9
IDg7IH0gICAgICAgICAgICAgXAotICBzd2l0Y2ggKG1jdG1wKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgMDog
Zm9yKDs7KSB7ICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGNhc2UgNzogICAgICAgICAgICptenArKyA9IDA7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgNjogICAgICAgICAg
ICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGNhc2UgNTogICAgICAgICAgICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgNDogICAgICAgICAgICptenArKyA9
IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNh
c2UgMzogICAgICAgICAgICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIGNhc2UgMjogICAgICAgICAgICptenArKyA9IDA7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgMTogICAg
ICAgICAgICptenArKyA9IDA7IGlmKG1jbiA8PSAwKSBicmVhazsgbWNuLS07IH0gICAgICAgICAg
ICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIE1B
TExPQ19DT1BZKGRlc3Qsc3JjLG5ieXRlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIElOVEVSTkFMX1NJWkVfVCog
bWNzcmMgPSAoSU5URVJOQUxfU0laRV9UKikgc3JjOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIElOVEVSTkFMX1NJWkVfVCogbWNkc3QgPSAoSU5URVJOQUxfU0laRV9UKikgZGVzdDsg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIENIVU5LX1NJWkVfVCAgbWN0bXAgPSAobmJ5
dGVzKS9zaXplb2YoSU5URVJOQUxfU0laRV9UKTsgICAgICAgICAgICAgICAgICAgICBcCi0gIGxv
bmcgbWNuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGlmIChtY3RtcCA8IDgpIG1jbiA9IDA7IGVsc2UgeyBtY24g
PSAobWN0bXAtMSkvODsgbWN0bXAgJT0gODsgfSAgICAgICAgICAgICBcCi0gIHN3aXRjaCAobWN0
bXApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgY2FzZSAwOiBmb3IoOzspIHsgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSA3OiAgICAgICAgICAg
Km1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY2FzZSA2OiAgICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSA1OiAgICAgICAgICAgKm1jZHN0Kysg
PSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2Fz
ZSA0OiAgICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgY2FzZSAzOiAgICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMr
KzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSAyOiAgICAg
ICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgY2FzZSAxOiAgICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgaWYobWNu
IDw9IDApIGJyZWFrOyBtY24tLTsgfSAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19
IHdoaWxlKDApCi0KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0gTU1BUCBzdXBwb3J0
IC0tLS0tLS0tLS0tLS0tLS0tLSAgKi8KLQotCi0jaWYgSEFWRV9NTUFQCi0KLSNpZm5kZWYgTEFD
S1NfRkNOVExfSAotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBMQUNLU19T
WVNfTU1BTl9ICi0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQo
TUFQX0FOT05ZTU9VUykgJiYgZGVmaW5lZChNQVBfQU5PTikKLSNkZWZpbmUgTUFQX0FOT05ZTU9V
UyBNQVBfQU5PTgotI2VuZGlmCi0KLS8qIAotICAgTmVhcmx5IGFsbCB2ZXJzaW9ucyBvZiBtbWFw
IHN1cHBvcnQgTUFQX0FOT05ZTU9VUywgCi0gICBzbyB0aGUgZm9sbG93aW5nIGlzIHVubGlrZWx5
IHRvIGJlIG5lZWRlZCwgYnV0IGlzCi0gICBzdXBwbGllZCBqdXN0IGluIGNhc2UuCi0qLwotCi0j
aWZuZGVmIE1BUF9BTk9OWU1PVVMKLQotc3RhdGljIGludCBkZXZfemVyb19mZCA9IC0xOyAvKiBD
YWNoZWQgZmlsZSBkZXNjcmlwdG9yIGZvciAvZGV2L3plcm8uICovCi0KLSNkZWZpbmUgTU1BUChh
ZGRyLCBzaXplLCBwcm90LCBmbGFncykgKChkZXZfemVyb19mZCA8IDApID8gXAotIChkZXZfemVy
b19mZCA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRXUiksIFwKLSAgbW1hcCgoYWRkciksIChzaXpl
KSwgKHByb3QpLCAoZmxhZ3MpLCBkZXZfemVyb19mZCwgMCkpIDogXAotICAgbW1hcCgoYWRkciks
IChzaXplKSwgKHByb3QpLCAoZmxhZ3MpLCBkZXZfemVyb19mZCwgMCkpCi0KLSNlbHNlCi0KLSNk
ZWZpbmUgTU1BUChhZGRyLCBzaXplLCBwcm90LCBmbGFncykgXAotIChtbWFwKChhZGRyKSwgKHNp
emUpLCAocHJvdCksIChmbGFncyl8TUFQX0FOT05ZTU9VUywgLTEsIDApKQotCi0jZW5kaWYKLQot
Ci0jZW5kaWYgLyogSEFWRV9NTUFQICovCi0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gIENodW5rIHJlcHJlc2VudGF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQot
Ci0vKgotICBUaGlzIHN0cnVjdCBkZWNsYXJhdGlvbiBpcyBtaXNsZWFkaW5nIChidXQgYWNjdXJh
dGUgYW5kIG5lY2Vzc2FyeSkuCi0gIEl0IGRlY2xhcmVzIGEgInZpZXciIGludG8gbWVtb3J5IGFs
bG93aW5nIGFjY2VzcyB0byBuZWNlc3NhcnkKLSAgZmllbGRzIGF0IGtub3duIG9mZnNldHMgZnJv
bSBhIGdpdmVuIGJhc2UuIFNlZSBleHBsYW5hdGlvbiBiZWxvdy4KLSovCi0KLXN0cnVjdCBtYWxs
b2NfY2h1bmsgewotCi0gIElOVEVSTkFMX1NJWkVfVCAgICAgIHByZXZfc2l6ZTsgIC8qIFNpemUg
b2YgcHJldmlvdXMgY2h1bmsgKGlmIGZyZWUpLiAgKi8KLSAgSU5URVJOQUxfU0laRV9UICAgICAg
c2l6ZTsgICAgICAgLyogU2l6ZSBpbiBieXRlcywgaW5jbHVkaW5nIG92ZXJoZWFkLiAqLwotCi0g
IHN0cnVjdCBtYWxsb2NfY2h1bmsqIGZkOyAgICAgICAgIC8qIGRvdWJsZSBsaW5rcyAtLSB1c2Vk
IG9ubHkgaWYgZnJlZS4gKi8KLSAgc3RydWN0IG1hbGxvY19jaHVuayogYms7Ci19OwotCi0KLXR5
cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayogbWNodW5rcHRyOwotCi0vKgotICAgbWFsbG9jX2No
dW5rIGRldGFpbHM6Ci0KLSAgICAoVGhlIGZvbGxvd2luZyBpbmNsdWRlcyBsaWdodGx5IGVkaXRl
ZCBleHBsYW5hdGlvbnMgYnkgQ29saW4gUGx1bWIuKQotCi0gICAgQ2h1bmtzIG9mIG1lbW9yeSBh
cmUgbWFpbnRhaW5lZCB1c2luZyBhIGBib3VuZGFyeSB0YWcnIG1ldGhvZCBhcwotICAgIGRlc2Ny
aWJlZCBpbiBlLmcuLCBLbnV0aCBvciBTdGFuZGlzaC4gIChTZWUgdGhlIHBhcGVyIGJ5IFBhdWwK
LSAgICBXaWxzb24gZnRwOi8vZnRwLmNzLnV0ZXhhcy5lZHUvcHViL2dhcmJhZ2UvYWxsb2NzcnYu
cHMgZm9yIGEKLSAgICBzdXJ2ZXkgb2Ygc3VjaCB0ZWNobmlxdWVzLikgIFNpemVzIG9mIGZyZWUg
Y2h1bmtzIGFyZSBzdG9yZWQgYm90aAotICAgIGluIHRoZSBmcm9udCBvZiBlYWNoIGNodW5rIGFu
ZCBhdCB0aGUgZW5kLiAgVGhpcyBtYWtlcwotICAgIGNvbnNvbGlkYXRpbmcgZnJhZ21lbnRlZCBj
aHVua3MgaW50byBiaWdnZXIgY2h1bmtzIHZlcnkgZmFzdC4gIFRoZQotICAgIHNpemUgZmllbGRz
IGFsc28gaG9sZCBiaXRzIHJlcHJlc2VudGluZyB3aGV0aGVyIGNodW5rcyBhcmUgZnJlZSBvcgot
ICAgIGluIHVzZS4KLQotICAgIEFuIGFsbG9jYXRlZCBjaHVuayBsb29rcyBsaWtlIHRoaXM6Ci0K
LQotICAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgU2l6ZSBv
ZiBwcmV2aW91cyBjaHVuaywgaWYgYWxsb2NhdGVkICAgICAgICAgICAgfCB8Ci0gICAgICAgICAg
ICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBi
eXRlcyAgICAgICAgICAgICAgICAgICAgICAgICB8UHwKLSAgICAgIG1lbS0+ICstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0g
ICAgICAgICAgICB8ICAgICAgICAgICAgIFVzZXIgZGF0YSBzdGFydHMgaGVyZS4uLiAgICAgICAg
ICAgICAgICAgICAgICAgICAgLgotICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIC4g
ICAgICAgICAgICAgKG1hbGxvY191c2FibGVfc3BhY2UoKSBieXRlcykgICAgICAgICAgICAgICAg
ICAgICAuCi0gICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAg
ICAgICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuayAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotCi0KLSAgICBXaGVyZSAiY2h1
bmsiIGlzIHRoZSBmcm9udCBvZiB0aGUgY2h1bmsgZm9yIHRoZSBwdXJwb3NlIG9mIG1vc3Qgb2YK
LSAgICB0aGUgbWFsbG9jIGNvZGUsIGJ1dCAibWVtIiBpcyB0aGUgcG9pbnRlciB0aGF0IGlzIHJl
dHVybmVkIHRvIHRoZQotICAgIHVzZXIuICAiTmV4dGNodW5rIiBpcyB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBuZXh0IGNvbnRpZ3VvdXMgY2h1bmsuCi0KLSAgICBDaHVua3MgYWx3YXlzIGJlZ2luIG9u
IGV2ZW4gd29yZCBib3VuZHJpZXMsIHNvIHRoZSBtZW0gcG9ydGlvbgotICAgICh3aGljaCBpcyBy
ZXR1cm5lZCB0byB0aGUgdXNlcikgaXMgYWxzbyBvbiBhbiBldmVuIHdvcmQgYm91bmRhcnksIGFu
ZAotICAgIHRodXMgYXQgbGVhc3QgZG91YmxlLXdvcmQgYWxpZ25lZC4KLQotICAgIEZyZWUgY2h1
bmtzIGFyZSBzdG9yZWQgaW4gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0cywgYW5kIGxvb2sg
bGlrZSB0aGlzOgotCi0gICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAg
ICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK
LSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2Yg
Y2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAotICAgICAgbWVtLT4g
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5l
eHQgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgICB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAg
ICAgICAgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgaW4g
bGlzdCAgICAgICAgICAgIHwKLSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAg
ICAgICAgICAgIFVudXNlZCBzcGFjZSAobWF5IGJlIDAgYnl0ZXMgbG9uZykgICAgICAgICAgICAg
ICAgLgotICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIC4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1uZXh0Y2h1
bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKwotICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBp
biBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
Ci0KLSAgICBUaGUgUCAoUFJFVl9JTlVTRSkgYml0LCBzdG9yZWQgaW4gdGhlIHVudXNlZCBsb3ct
b3JkZXIgYml0IG9mIHRoZQotICAgIGNodW5rIHNpemUgKHdoaWNoIGlzIGFsd2F5cyBhIG11bHRp
cGxlIG9mIHR3byB3b3JkcyksIGlzIGFuIGluLXVzZQotICAgIGJpdCBmb3IgdGhlICpwcmV2aW91
cyogY2h1bmsuICBJZiB0aGF0IGJpdCBpcyAqY2xlYXIqLCB0aGVuIHRoZQotICAgIHdvcmQgYmVm
b3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUgY29udGFpbnMgdGhlIHByZXZpb3VzIGNodW5rCi0g
ICAgc2l6ZSwgYW5kIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIGZyb250IG9mIHRoZSBwcmV2aW91
cyBjaHVuay4KLSAgICBUaGUgdmVyeSBmaXJzdCBjaHVuayBhbGxvY2F0ZWQgYWx3YXlzIGhhcyB0
aGlzIGJpdCBzZXQsCi0gICAgcHJldmVudGluZyBhY2Nlc3MgdG8gbm9uLWV4aXN0ZW50IChvciBu
b24tb3duZWQpIG1lbW9yeS4gSWYKLSAgICBwcmV2X2ludXNlIGlzIHNldCBmb3IgYW55IGdpdmVu
IGNodW5rLCB0aGVuIHlvdSBDQU5OT1QgZGV0ZXJtaW5lCi0gICAgdGhlIHNpemUgb2YgdGhlIHBy
ZXZpb3VzIGNodW5rLCBhbmQgbWlnaHQgZXZlbiBnZXQgYSBtZW1vcnkKLSAgICBhZGRyZXNzaW5n
IGZhdWx0IHdoZW4gdHJ5aW5nIHRvIGRvIHNvLgotCi0gICAgTm90ZSB0aGF0IHRoZSBgZm9vdCcg
b2YgdGhlIGN1cnJlbnQgY2h1bmsgaXMgYWN0dWFsbHkgcmVwcmVzZW50ZWQKLSAgICBhcyB0aGUg
cHJldl9zaXplIG9mIHRoZSBORVhUIGNodW5rLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0bwotICAg
IGRlYWwgd2l0aCBhbGlnbm1lbnRzIGV0YyBidXQgY2FuIGJlIHZlcnkgY29uZnVzaW5nIHdoZW4g
dHJ5aW5nCi0gICAgdG8gZXh0ZW5kIG9yIGFkYXB0IHRoaXMgY29kZS4KLQotICAgIFRoZSB0d28g
ZXhjZXB0aW9ucyB0byBhbGwgdGhpcyBhcmUKLQotICAgICAxLiBUaGUgc3BlY2lhbCBjaHVuayBg
dG9wJyBkb2Vzbid0IGJvdGhlciB1c2luZyB0aGUKLSAgICAgICAgdHJhaWxpbmcgc2l6ZSBmaWVs
ZCBzaW5jZSB0aGVyZSBpcyBubyBuZXh0IGNvbnRpZ3VvdXMgY2h1bmsKLSAgICAgICAgdGhhdCB3
b3VsZCBoYXZlIHRvIGluZGV4IG9mZiBpdC4gQWZ0ZXIgaW5pdGlhbGl6YXRpb24sIGB0b3AnCi0g
ICAgICAgIGlzIGZvcmNlZCB0byBhbHdheXMgZXhpc3QuICBJZiBpdCB3b3VsZCBiZWNvbWUgbGVz
cyB0aGFuCi0gICAgICAgIE1JTlNJWkUgYnl0ZXMgbG9uZywgaXQgaXMgcmVwbGVuaXNoZWQuCi0K
LSAgICAgMi4gQ2h1bmtzIGFsbG9jYXRlZCB2aWEgbW1hcCwgd2hpY2ggaGF2ZSB0aGUgc2Vjb25k
LWxvd2VzdC1vcmRlcgotICAgICAgICBiaXQgKElTX01NQVBQRUQpIHNldCBpbiB0aGVpciBzaXpl
IGZpZWxkcy4gIEJlY2F1c2UgdGhleSBhcmUKLSAgICAgICAgYWxsb2NhdGVkIG9uZS1ieS1vbmUs
IGVhY2ggbXVzdCBjb250YWluIGl0cyBvd24gdHJhaWxpbmcgc2l6ZSBmaWVsZC4KLQotKi8KLQot
LyoKLSAgLS0tLS0tLS0tLSBTaXplIGFuZCBhbGlnbm1lbnQgY2hlY2tzIGFuZCBjb252ZXJzaW9u
cyAtLS0tLS0tLS0tCi0qLwotCi0vKiBjb252ZXJzaW9uIGZyb20gbWFsbG9jIGhlYWRlcnMgdG8g
dXNlciBwb2ludGVycywgYW5kIGJhY2sgKi8KLQotI2RlZmluZSBjaHVuazJtZW0ocCkgICAoKFZv
aWRfdCopKChjaGFyKikocCkgKyAyKlNJWkVfU1opKQotI2RlZmluZSBtZW0yY2h1bmsobWVtKSAo
KG1jaHVua3B0cikoKGNoYXIqKShtZW0pIC0gMipTSVpFX1NaKSkKLQotLyogVGhlIHNtYWxsZXN0
IHBvc3NpYmxlIGNodW5rICovCi0jZGVmaW5lIE1JTl9DSFVOS19TSVpFICAgICAgICAoc2l6ZW9m
KHN0cnVjdCBtYWxsb2NfY2h1bmspKQotCi0vKiBUaGUgc21hbGxlc3Qgc2l6ZSB3ZSBjYW4gbWFs
bG9jIGlzIGFuIGFsaWduZWQgbWluaW1hbCBjaHVuayAqLwotCi0jZGVmaW5lIE1JTlNJWkUgIFwK
LSAgKENIVU5LX1NJWkVfVCkoKChNSU5fQ0hVTktfU0laRStNQUxMT0NfQUxJR05fTUFTSykgJiB+
TUFMTE9DX0FMSUdOX01BU0spKQotCi0vKiBDaGVjayBpZiBtIGhhcyBhY2NlcHRhYmxlIGFsaWdu
bWVudCAqLwotCi0jZGVmaW5lIGFsaWduZWRfT0sobSkgICgoKFBUUl9VSU5UKSgobSkpICYgKE1B
TExPQ19BTElHTl9NQVNLKSkgPT0gMCkKLQotCi0vKiAKLSAgIENoZWNrIGlmIGEgcmVxdWVzdCBp
cyBzbyBsYXJnZSB0aGF0IGl0IHdvdWxkIHdyYXAgYXJvdW5kIHplcm8gd2hlbgotICAgcGFkZGVk
IGFuZCBhbGlnbmVkLiBUbyBzaW1wbGlmeSBzb21lIG90aGVyIGNvZGUsIHRoZSBib3VuZCBpcyBt
YWRlCi0gICBsb3cgZW5vdWdoIHNvIHRoYXQgYWRkaW5nIE1JTlNJWkUgd2lsbCBhbHNvIG5vdCB3
cmFwIGFyb3VuZCBzZXJvLgotKi8KLQotI2RlZmluZSBSRVFVRVNUX09VVF9PRl9SQU5HRShyZXEp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKENIVU5LX1NJWkVfVCkocmVx
KSA+PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAoQ0hVTktf
U0laRV9UKShJTlRFUk5BTF9TSVpFX1QpKC0yICogTUlOU0laRSkpICAgIAotCi0vKiBwYWQgcmVx
dWVzdCBieXRlcyBpbnRvIGEgdXNhYmxlIHNpemUgLS0gaW50ZXJuYWwgdmVyc2lvbiAqLwotCi0j
ZGVmaW5lIHJlcXVlc3Qyc2l6ZShyZXEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICgoKHJlcSkgKyBTSVpFX1NaICsgTUFMTE9DX0FMSUdOX01BU0sgPCBNSU5T
SVpFKSAgPyAgICAgICAgICAgICBcCi0gICBNSU5TSVpFIDogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAoKHJlcSkgKyBTSVpFX1NaICsg
TUFMTE9DX0FMSUdOX01BU0spICYgfk1BTExPQ19BTElHTl9NQVNLKQotCi0vKiAgU2FtZSwgZXhj
ZXB0IGFsc28gcGVyZm9ybSBhcmd1bWVudCBjaGVjayAqLwotCi0jZGVmaW5lIGNoZWNrZWRfcmVx
dWVzdDJzaXplKHJlcSwgc3opICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChS
RVFVRVNUX09VVF9PRl9SQU5HRShyZXEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChzeikgPSByZXF1ZXN0
MnNpemUocmVxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ci0KLS8qCi0gIC0tLS0tLS0tLS0tLS0tLSBQaHlzaWNhbCBjaHVuayBvcGVyYXRpb25zIC0tLS0t
LS0tLS0tLS0tLQotKi8KLQotCi0vKiBzaXplIGZpZWxkIGlzIG9yJ2VkIHdpdGggUFJFVl9JTlVT
RSB3aGVuIHByZXZpb3VzIGFkamFjZW50IGNodW5rIGluIHVzZSAqLwotI2RlZmluZSBQUkVWX0lO
VVNFIDB4MQotCi0vKiBleHRyYWN0IGludXNlIGJpdCBvZiBwcmV2aW91cyBjaHVuayAqLwotI2Rl
ZmluZSBwcmV2X2ludXNlKHApICAgICAgICgocCktPnNpemUgJiBQUkVWX0lOVVNFKQotCi0KLS8q
IHNpemUgZmllbGQgaXMgb3InZWQgd2l0aCBJU19NTUFQUEVEIGlmIHRoZSBjaHVuayB3YXMgb2J0
YWluZWQgd2l0aCBtbWFwKCkgKi8KLSNkZWZpbmUgSVNfTU1BUFBFRCAweDIKLQotLyogY2hlY2sg
Zm9yIG1tYXAoKSdlZCBjaHVuayAqLwotI2RlZmluZSBjaHVua19pc19tbWFwcGVkKHApICgocCkt
PnNpemUgJiBJU19NTUFQUEVEKQotCi0vKiAKLSAgQml0cyB0byBtYXNrIG9mZiB3aGVuIGV4dHJh
Y3Rpbmcgc2l6ZSAKLQotICBOb3RlOiBJU19NTUFQUEVEIGlzIGludGVudGlvbmFsbHkgbm90IG1h
c2tlZCBvZmYgZnJvbSBzaXplIGZpZWxkIGluCi0gIG1hY3JvcyBmb3Igd2hpY2ggbW1hcHBlZCBj
aHVua3Mgc2hvdWxkIG5ldmVyIGJlIHNlZW4uIFRoaXMgc2hvdWxkCi0gIGNhdXNlIGhlbHBmdWwg
Y29yZSBkdW1wcyB0byBvY2N1ciBpZiBpdCBpcyB0cmllZCBieSBhY2NpZGVudCBieQotICBwZW9w
bGUgZXh0ZW5kaW5nIG9yIGFkYXB0aW5nIHRoaXMgbWFsbG9jLgotKi8KLSNkZWZpbmUgU0laRV9C
SVRTIChQUkVWX0lOVVNFfElTX01NQVBQRUQpCi0KLS8qIEdldCBzaXplLCBpZ25vcmluZyB1c2Ug
Yml0cyAqLwotI2RlZmluZSBjaHVua3NpemUocCkgICAgICAgICAoKHApLT5zaXplICYgfihTSVpF
X0JJVFMpKQotCi0KLS8qIFB0ciB0byBuZXh0IHBoeXNpY2FsIG1hbGxvY19jaHVuay4gKi8KLSNk
ZWZpbmUgbmV4dF9jaHVuayhwKSAoKG1jaHVua3B0cikoICgoY2hhciopKHApKSArICgocCktPnNp
emUgJiB+UFJFVl9JTlVTRSkgKSkKLQotLyogUHRyIHRvIHByZXZpb3VzIHBoeXNpY2FsIG1hbGxv
Y19jaHVuayAqLwotI2RlZmluZSBwcmV2X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKiko
cCkpIC0gKChwKS0+cHJldl9zaXplKSApKQotCi0vKiBUcmVhdCBzcGFjZSBhdCBwdHIgKyBvZmZz
ZXQgYXMgYSBjaHVuayAqLwotI2RlZmluZSBjaHVua19hdF9vZmZzZXQocCwgcykgICgobWNodW5r
cHRyKSgoKGNoYXIqKShwKSkgKyAocykpKQotCi0vKiBleHRyYWN0IHAncyBpbnVzZSBiaXQgKi8K
LSNkZWZpbmUgaW51c2UocClcCi0oKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkrKChwKS0+c2l6
ZSAmIH5QUkVWX0lOVVNFKSkpLT5zaXplKSAmIFBSRVZfSU5VU0UpCi0KLS8qIHNldC9jbGVhciBj
aHVuayBhcyBiZWluZyBpbnVzZSB3aXRob3V0IG90aGVyd2lzZSBkaXN0dXJiaW5nICovCi0jZGVm
aW5lIHNldF9pbnVzZShwKVwKLSgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAoKHApLT5zaXpl
ICYgflBSRVZfSU5VU0UpKSktPnNpemUgfD0gUFJFVl9JTlVTRQotCi0jZGVmaW5lIGNsZWFyX2lu
dXNlKHApXAotKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArICgocCktPnNpemUgJiB+UFJFVl9J
TlVTRSkpKS0+c2l6ZSAmPSB+KFBSRVZfSU5VU0UpCi0KLQotLyogY2hlY2svc2V0L2NsZWFyIGlu
dXNlIGJpdHMgaW4ga25vd24gcGxhY2VzICovCi0jZGVmaW5lIGludXNlX2JpdF9hdF9vZmZzZXQo
cCwgcylcCi0gKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+c2l6ZSAmIFBSRVZf
SU5VU0UpCi0KLSNkZWZpbmUgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQocCwgcylcCi0gKCgobWNo
dW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+c2l6ZSB8PSBQUkVWX0lOVVNFKQotCi0jZGVm
aW5lIGNsZWFyX2ludXNlX2JpdF9hdF9vZmZzZXQocCwgcylcCi0gKCgobWNodW5rcHRyKSgoKGNo
YXIqKShwKSkgKyAocykpKS0+c2l6ZSAmPSB+KFBSRVZfSU5VU0UpKQotCi0KLS8qIFNldCBzaXpl
IGF0IGhlYWQsIHdpdGhvdXQgZGlzdHVyYmluZyBpdHMgdXNlIGJpdCAqLwotI2RlZmluZSBzZXRf
aGVhZF9zaXplKHAsIHMpICAoKHApLT5zaXplID0gKCgocCktPnNpemUgJiBQUkVWX0lOVVNFKSB8
IChzKSkpCi0KLS8qIFNldCBzaXplL3VzZSBmaWVsZCAqLwotI2RlZmluZSBzZXRfaGVhZChwLCBz
KSAgICAgICAoKHApLT5zaXplID0gKHMpKQotCi0vKiBTZXQgc2l6ZSBhdCBmb290ZXIgKG9ubHkg
d2hlbiBjaHVuayBpcyBub3QgaW4gdXNlKSAqLwotI2RlZmluZSBzZXRfZm9vdChwLCBzKSAgICAg
ICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9zaXplID0gKHMpKQotCi0K
LS8qCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEludGVybmFsIGRhdGEgc3RydWN0dXJlcyAtLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0gICBBbGwgaW50ZXJuYWwgc3RhdGUgaXMgaGVsZCBpbiBhbiBp
bnN0YW5jZSBvZiBtYWxsb2Nfc3RhdGUgZGVmaW5lZAotICAgYmVsb3cuIFRoZXJlIGFyZSBubyBv
dGhlciBzdGF0aWMgdmFyaWFibGVzLCBleGNlcHQgaW4gdHdvIG9wdGlvbmFsCi0gICBjYXNlczog
Ci0gICAqIElmIFVTRV9NQUxMT0NfTE9DSyBpcyBkZWZpbmVkLCB0aGUgbUFMTE9DX01VVEV4IGRl
Y2xhcmVkIGFib3ZlLiAKLSAgICogSWYgSEFWRV9NTUFQIGlzIHRydWUsIGJ1dCBtbWFwIGRvZXNu
J3Qgc3VwcG9ydAotICAgICBNQVBfQU5PTllNT1VTLCBhIGR1bW15IGZpbGUgZGVzY3JpcHRvciBm
b3IgbW1hcC4KLQotICAgQmV3YXJlIG9mIGxvdHMgb2YgdHJpY2tzIHRoYXQgbWluaW1pemUgdGhl
IHRvdGFsIGJvb2trZWVwaW5nIHNwYWNlCi0gICByZXF1aXJlbWVudHMuIFRoZSByZXN1bHQgaXMg
YSBsaXR0bGUgb3ZlciAxSyBieXRlcyAoZm9yIDRieXRlCi0gICBwb2ludGVycyBhbmQgc2l6ZV90
LikKLSovCi0KLS8qCi0gIEJpbnMKLQotICAgIEFuIGFycmF5IG9mIGJpbiBoZWFkZXJzIGZvciBm
cmVlIGNodW5rcy4gRWFjaCBiaW4gaXMgZG91Ymx5Ci0gICAgbGlua2VkLiAgVGhlIGJpbnMgYXJl
IGFwcHJveGltYXRlbHkgcHJvcG9ydGlvbmFsbHkgKGxvZykgc3BhY2VkLgotICAgIFRoZXJlIGFy
ZSBhIGxvdCBvZiB0aGVzZSBiaW5zICgxMjgpLiBUaGlzIG1heSBsb29rIGV4Y2Vzc2l2ZSwgYnV0
Ci0gICAgd29ya3MgdmVyeSB3ZWxsIGluIHByYWN0aWNlLiAgTW9zdCBiaW5zIGhvbGQgc2l6ZXMg
dGhhdCBhcmUKLSAgICB1bnVzdWFsIGFzIG1hbGxvYyByZXF1ZXN0IHNpemVzLCBidXQgYXJlIG1v
cmUgdXN1YWwgZm9yIGZyYWdtZW50cwotICAgIGFuZCBjb25zb2xpZGF0ZWQgc2V0cyBvZiBjaHVu
a3MsIHdoaWNoIGlzIHdoYXQgdGhlc2UgYmlucyBob2xkLCBzbwotICAgIHRoZXkgY2FuIGJlIGZv
dW5kIHF1aWNrbHkuICBBbGwgcHJvY2VkdXJlcyBtYWludGFpbiB0aGUgaW52YXJpYW50Ci0gICAg
dGhhdCBubyBjb25zb2xpZGF0ZWQgY2h1bmsgcGh5c2ljYWxseSBib3JkZXJzIGFub3RoZXIgb25l
LCBzbyBlYWNoCi0gICAgY2h1bmsgaW4gYSBsaXN0IGlzIGtub3duIHRvIGJlIHByZWNlZWRlZCBh
bmQgZm9sbG93ZWQgYnkgZWl0aGVyCi0gICAgaW51c2UgY2h1bmtzIG9yIHRoZSBlbmRzIG9mIG1l
bW9yeS4KLQotICAgIENodW5rcyBpbiBiaW5zIGFyZSBrZXB0IGluIHNpemUgb3JkZXIsIHdpdGgg
dGllcyBnb2luZyB0byB0aGUKLSAgICBhcHByb3hpbWF0ZWx5IGxlYXN0IHJlY2VudGx5IHVzZWQg
Y2h1bmsuIE9yZGVyaW5nIGlzbid0IG5lZWRlZAotICAgIGZvciB0aGUgc21hbGwgYmlucywgd2hp
Y2ggYWxsIGNvbnRhaW4gdGhlIHNhbWUtc2l6ZWQgY2h1bmtzLCBidXQKLSAgICBmYWNpbGl0YXRl
cyBiZXN0LWZpdCBhbGxvY2F0aW9uIGZvciBsYXJnZXIgY2h1bmtzLiBUaGVzZSBsaXN0cwotICAg
IGFyZSBqdXN0IHNlcXVlbnRpYWwuIEtlZXBpbmcgdGhlbSBpbiBvcmRlciBhbG1vc3QgbmV2ZXIg
cmVxdWlyZXMKLSAgICBlbm91Z2ggdHJhdmVyc2FsIHRvIHdhcnJhbnQgdXNpbmcgZmFuY2llciBv
cmRlcmVkIGRhdGEKLSAgICBzdHJ1Y3R1cmVzLiAgCi0KLSAgICBDaHVua3Mgb2YgdGhlIHNhbWUg
c2l6ZSBhcmUgbGlua2VkIHdpdGggdGhlIG1vc3QKLSAgICByZWNlbnRseSBmcmVlZCBhdCB0aGUg
ZnJvbnQsIGFuZCBhbGxvY2F0aW9ucyBhcmUgdGFrZW4gZnJvbSB0aGUKLSAgICBiYWNrLiAgVGhp
cyByZXN1bHRzIGluIExSVSAoRklGTykgYWxsb2NhdGlvbiBvcmRlciwgd2hpY2ggdGVuZHMKLSAg
ICB0byBnaXZlIGVhY2ggY2h1bmsgYW4gZXF1YWwgb3Bwb3J0dW5pdHkgdG8gYmUgY29uc29saWRh
dGVkIHdpdGgKLSAgICBhZGphY2VudCBmcmVlZCBjaHVua3MsIHJlc3VsdGluZyBpbiBsYXJnZXIg
ZnJlZSBjaHVua3MgYW5kIGxlc3MKLSAgICBmcmFnbWVudGF0aW9uLgotCi0gICAgVG8gc2ltcGxp
ZnkgdXNlIGluIGRvdWJsZS1saW5rZWQgbGlzdHMsIGVhY2ggYmluIGhlYWRlciBhY3RzCi0gICAg
YXMgYSBtYWxsb2NfY2h1bmsuIFRoaXMgYXZvaWRzIHNwZWNpYWwtY2FzaW5nIGZvciBoZWFkZXJz
LgotICAgIEJ1dCB0byBjb25zZXJ2ZSBzcGFjZSBhbmQgaW1wcm92ZSBsb2NhbGl0eSwgd2UgYWxs
b2NhdGUKLSAgICBvbmx5IHRoZSBmZC9iayBwb2ludGVycyBvZiBiaW5zLCBhbmQgdGhlbiB1c2Ug
cmVwb3NpdGlvbmluZyB0cmlja3MKLSAgICB0byB0cmVhdCB0aGVzZSBhcyB0aGUgZmllbGRzIG9m
IGEgbWFsbG9jX2NodW5rKi4gIAotKi8KLQotdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBt
YmlucHRyOwotCi0vKiBhZGRyZXNzaW5nIC0tIG5vdGUgdGhhdCBiaW5fYXQoMCkgZG9lcyBub3Qg
ZXhpc3QgKi8KLSNkZWZpbmUgYmluX2F0KG0sIGkpICgobWJpbnB0cikoKGNoYXIqKSYoKG0pLT5i
aW5zWyhpKTw8MV0pIC0gKFNJWkVfU1o8PDEpKSkKLQotLyogYW5hbG9nIG9mICsrYmluICovCi0j
ZGVmaW5lIG5leHRfYmluKGIpICAoKG1iaW5wdHIpKChjaGFyKikoYikgKyAoc2l6ZW9mKG1jaHVu
a3B0cik8PDEpKSkKLQotLyogUmVtaW5kZXJzIGFib3V0IGxpc3QgZGlyZWN0aW9uYWxpdHkgd2l0
aGluIGJpbnMgKi8KLSNkZWZpbmUgZmlyc3QoYikgICAgICgoYiktPmZkKQotI2RlZmluZSBsYXN0
KGIpICAgICAgKChiKS0+YmspCi0KLS8qIFRha2UgYSBjaHVuayBvZmYgYSBiaW4gbGlzdCAqLwot
I2RlZmluZSB1bmxpbmsoUCwgQkssIEZEKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIEZEID0gUC0+ZmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgQksgPSBQLT5iazsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGRC0+
YmsgPSBCSzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIEJLLT5mZCA9IEZEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotLyoKLSAgSW5kZXhpbmcKLQotICAgIEJp
bnMgZm9yIHNpemVzIDwgNTEyIGJ5dGVzIGNvbnRhaW4gY2h1bmtzIG9mIGFsbCB0aGUgc2FtZSBz
aXplLCBzcGFjZWQKLSAgICA4IGJ5dGVzIGFwYXJ0LiBMYXJnZXIgYmlucyBhcmUgYXBwcm94aW1h
dGVseSBsb2dhcml0aG1pY2FsbHkgc3BhY2VkOgotCi0gICAgNjQgYmlucyBvZiBzaXplICAgICAg
IDgKLSAgICAzMiBiaW5zIG9mIHNpemUgICAgICA2NAotICAgIDE2IGJpbnMgb2Ygc2l6ZSAgICAg
NTEyCi0gICAgIDggYmlucyBvZiBzaXplICAgIDQwOTYKLSAgICAgNCBiaW5zIG9mIHNpemUgICAz
Mjc2OAotICAgICAyIGJpbnMgb2Ygc2l6ZSAgMjYyMTQ0Ci0gICAgIDEgYmluICBvZiBzaXplIHdo
YXQncyBsZWZ0Ci0KLSAgICBUaGUgYmlucyB0b3Agb3V0IGFyb3VuZCAxTUIgYmVjYXVzZSB3ZSBl
eHBlY3QgdG8gc2VydmljZSBsYXJnZQotICAgIHJlcXVlc3RzIHZpYSBtbWFwLgotKi8KLQotI2Rl
ZmluZSBOQklOUyAgICAgICAgICAgICAgOTYKLSNkZWZpbmUgTlNNQUxMQklOUyAgICAgICAgIDMy
Ci0jZGVmaW5lIFNNQUxMQklOX1dJRFRIICAgICAgOAotI2RlZmluZSBNSU5fTEFSR0VfU0laRSAg
ICAyNTYKLQotI2RlZmluZSBpbl9zbWFsbGJpbl9yYW5nZShzeikgIFwKLSAgKChDSFVOS19TSVpF
X1QpKHN6KSA8IChDSFVOS19TSVpFX1QpTUlOX0xBUkdFX1NJWkUpCi0KLSNkZWZpbmUgc21hbGxi
aW5faW5kZXgoc3opICAgICAoKCh1bnNpZ25lZCkoc3opKSA+PiAzKQotCi0vKgotICBDb21wdXRl
IGluZGV4IGZvciBzaXplLiBXZSBleHBlY3QgdGhpcyB0byBiZSBpbmxpbmVkIHdoZW4KLSAgY29t
cGlsZWQgd2l0aCBvcHRpbWl6YXRpb24sIGVsc2Ugbm90LCB3aGljaCB3b3JrcyBvdXQgd2VsbC4K
LSovCi1zdGF0aWMgaW50IGxhcmdlYmluX2luZGV4KHVuc2lnbmVkIGludCBzeikgewotICB1bnNp
Z25lZCBpbnQgIHggPSBzeiA+PiBTTUFMTEJJTl9XSURUSDsgCi0gIHVuc2lnbmVkIGludCBtOyAg
ICAgICAgICAgIC8qIGJpdCBwb3NpdGlvbiBvZiBoaWdoZXN0IHNldCBiaXQgb2YgbSAqLwotCi0g
IGlmICh4ID49IDB4MTAwMDApIHJldHVybiBOQklOUy0xOwotCi0gIC8qIE9uIGludGVsLCB1c2Ug
QlNSTCBpbnN0cnVjdGlvbiB0byBmaW5kIGhpZ2hlc3QgYml0ICovCi0jaWYgZGVmaW5lZChfX0dO
VUNfXykgJiYgZGVmaW5lZChpMzg2KQotCi0gIF9fYXNtX18oImJzcmwgJTEsJTBcblx0IgotICAg
ICAgICAgIDogIj1yIiAobSkgCi0gICAgICAgICAgOiAiZyIgICh4KSk7Ci0KLSNlbHNlCi0gIHsK
LSAgICAvKgotICAgICAgQmFzZWQgb24gYnJhbmNoLWZyZWUgbmx6IGFsZ29yaXRobSBpbiBjaGFw
dGVyIDUgb2YgSGVucnkKLSAgICAgIFMuIFdhcnJlbiBKcidzIGJvb2sgIkhhY2tlcidzIERlbGln
aHQiLgotICAgICovCi0KLSAgICB1bnNpZ25lZCBpbnQgbiA9ICgoeCAtIDB4MTAwKSA+PiAxNikg
JiA4OwotICAgIHggPDw9IG47IAotICAgIG0gPSAoKHggLSAweDEwMDApID4+IDE2KSAmIDQ7Ci0g
ICAgbiArPSBtOyAKLSAgICB4IDw8PSBtOyAKLSAgICBtID0gKCh4IC0gMHg0MDAwKSA+PiAxNikg
JiAyOwotICAgIG4gKz0gbTsgCi0gICAgeCA9ICh4IDw8IG0pID4+IDE0OwotICAgIG0gPSAxMyAt
IG4gKyAoeCAmIH4oeD4+MSkpOwotICB9Ci0jZW5kaWYKLQotICAvKiBVc2UgbmV4dCAyIGJpdHMg
dG8gY3JlYXRlIGZpbmVyLWdyYW51bGFyaXR5IGJpbnMgKi8KLSAgcmV0dXJuIE5TTUFMTEJJTlMg
KyAobSA8PCAyKSArICgoc3ogPj4gKG0gKyA2KSkgJiAzKTsKLX0KLQotI2RlZmluZSBiaW5faW5k
ZXgoc3opIFwKLSAoKGluX3NtYWxsYmluX3JhbmdlKHN6KSkgPyBzbWFsbGJpbl9pbmRleChzeikg
OiBsYXJnZWJpbl9pbmRleChzeikpCi0KLS8qCi0gIEZJUlNUX1NPUlRFRF9CSU5fU0laRSBpcyB0
aGUgY2h1bmsgc2l6ZSBjb3JyZXNwb25kaW5nIHRvIHRoZQotICBmaXJzdCBiaW4gdGhhdCBpcyBt
YWludGFpbmVkIGluIHNvcnRlZCBvcmRlci4gVGhpcyBtdXN0Ci0gIGJlIHRoZSBzbWFsbGVzdCBz
aXplIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBiaW4uCi0KLSAgTm9ybWFsbHksIHRoaXMgc2hv
dWxkIGJlIE1JTl9MQVJHRV9TSVpFLiBCdXQgeW91IGNhbiB3ZWFrZW4KLSAgYmVzdCBmaXQgZ3Vh
cmFudGVlcyB0byBzb21ldGltZXMgc3BlZWQgdXAgbWFsbG9jIGJ5IGluY3JlYXNpbmcgdmFsdWUu
Ci0gIERvaW5nIHRoaXMgbWVhbnMgdGhhdCBtYWxsb2MgbWF5IGNob29zZSBhIGNodW5rIHRoYXQg
aXMgCi0gIG5vbi1iZXN0LWZpdHRpbmcgYnkgdXAgdG8gdGhlIHdpZHRoIG9mIHRoZSBiaW4uCi0K
LSAgU29tZSB1c2VmdWwgY3V0b2ZmIHZhbHVlczoKLSAgICAgIDUxMiAtIGFsbCBiaW5zIHNvcnRl
ZAotICAgICAyNTYwIC0gbGVhdmVzIGJpbnMgPD0gICAgIDY0IGJ5dGVzIHdpZGUgdW5zb3J0ZWQg
IAotICAgIDEyMjg4IC0gbGVhdmVzIGJpbnMgPD0gICAgNTEyIGJ5dGVzIHdpZGUgdW5zb3J0ZWQK
LSAgICA2NTUzNiAtIGxlYXZlcyBiaW5zIDw9ICAgNDA5NiBieXRlcyB3aWRlIHVuc29ydGVkCi0g
ICAyNjIxNDQgLSBsZWF2ZXMgYmlucyA8PSAgMzI3NjggYnl0ZXMgd2lkZSB1bnNvcnRlZAotICAg
ICAgIC0xIC0gbm8gYmlucyBzb3J0ZWQgKG5vdCByZWNvbW1lbmRlZCEpCi0qLwotCi0jZGVmaW5l
IEZJUlNUX1NPUlRFRF9CSU5fU0laRSBNSU5fTEFSR0VfU0laRSAKLS8qICNkZWZpbmUgRklSU1Rf
U09SVEVEX0JJTl9TSVpFIDY1NTM2ICovCi0KLS8qCi0gIFVuc29ydGVkIGNodW5rcwotCi0gICAg
QWxsIHJlbWFpbmRlcnMgZnJvbSBjaHVuayBzcGxpdHMsIGFzIHdlbGwgYXMgYWxsIHJldHVybmVk
IGNodW5rcywKLSAgICBhcmUgZmlyc3QgcGxhY2VkIGluIHRoZSAidW5zb3J0ZWQiIGJpbi4gVGhl
eSBhcmUgdGhlbiBwbGFjZWQKLSAgICBpbiByZWd1bGFyIGJpbnMgYWZ0ZXIgbWFsbG9jIGdpdmVz
IHRoZW0gT05FIGNoYW5jZSB0byBiZSB1c2VkIGJlZm9yZQotICAgIGJpbm5pbmcuIFNvLCBiYXNp
Y2FsbHksIHRoZSB1bnNvcnRlZF9jaHVua3MgbGlzdCBhY3RzIGFzIGEgcXVldWUsCi0gICAgd2l0
aCBjaHVua3MgYmVpbmcgcGxhY2VkIG9uIGl0IGluIGZyZWUgKGFuZCBtYWxsb2NfY29uc29saWRh
dGUpLAotICAgIGFuZCB0YWtlbiBvZmYgKHRvIGJlIGVpdGhlciB1c2VkIG9yIHBsYWNlZCBpbiBi
aW5zKSBpbiBtYWxsb2MuCi0qLwotCi0vKiBUaGUgb3RoZXJ3aXNlIHVuaW5kZXhhYmxlIDEtYmlu
IGlzIHVzZWQgdG8gaG9sZCB1bnNvcnRlZCBjaHVua3MuICovCi0jZGVmaW5lIHVuc29ydGVkX2No
dW5rcyhNKSAgICAgICAgICAoYmluX2F0KE0sIDEpKQotCi0vKgotICBUb3AKLQotICAgIFRoZSB0
b3AtbW9zdCBhdmFpbGFibGUgY2h1bmsgKGkuZS4sIHRoZSBvbmUgYm9yZGVyaW5nIHRoZSBlbmQg
b2YKLSAgICBhdmFpbGFibGUgbWVtb3J5KSBpcyB0cmVhdGVkIHNwZWNpYWxseS4gSXQgaXMgbmV2
ZXIgaW5jbHVkZWQgaW4KLSAgICBhbnkgYmluLCBpcyB1c2VkIG9ubHkgaWYgbm8gb3RoZXIgY2h1
bmsgaXMgYXZhaWxhYmxlLCBhbmQgaXMKLSAgICByZWxlYXNlZCBiYWNrIHRvIHRoZSBzeXN0ZW0g
aWYgaXQgaXMgdmVyeSBsYXJnZSAoc2VlCi0gICAgTV9UUklNX1RIUkVTSE9MRCkuICBCZWNhdXNl
IHRvcCBpbml0aWFsbHkKLSAgICBwb2ludHMgdG8gaXRzIG93biBiaW4gd2l0aCBpbml0aWFsIHpl
cm8gc2l6ZSwgdGh1cyBmb3JjaW5nCi0gICAgZXh0ZW5zaW9uIG9uIHRoZSBmaXJzdCBtYWxsb2Mg
cmVxdWVzdCwgd2UgYXZvaWQgaGF2aW5nIGFueSBzcGVjaWFsCi0gICAgY29kZSBpbiBtYWxsb2Mg
dG8gY2hlY2sgd2hldGhlciBpdCBldmVuIGV4aXN0cyB5ZXQuIEJ1dCB3ZSBzdGlsbAotICAgIG5l
ZWQgdG8gZG8gc28gd2hlbiBnZXR0aW5nIG1lbW9yeSBmcm9tIHN5c3RlbSwgc28gd2UgbWFrZQot
ICAgIGluaXRpYWxfdG9wIHRyZWF0IHRoZSBiaW4gYXMgYSBsZWdhbCBidXQgdW51c2FibGUgY2h1
bmsgZHVyaW5nIHRoZQotICAgIGludGVydmFsIGJldHdlZW4gaW5pdGlhbGl6YXRpb24gYW5kIHRo
ZSBmaXJzdCBjYWxsIHRvCi0gICAgc1lTTUFMTE9jLiAoVGhpcyBpcyBzb21ld2hhdCBkZWxpY2F0
ZSwgc2luY2UgaXQgcmVsaWVzIG9uCi0gICAgdGhlIDIgcHJlY2VkaW5nIHdvcmRzIHRvIGJlIHpl
cm8gZHVyaW5nIHRoaXMgaW50ZXJ2YWwgYXMgd2VsbC4pCi0qLwotCi0vKiBDb252ZW5pZW50bHks
IHRoZSB1bnNvcnRlZCBiaW4gY2FuIGJlIHVzZWQgYXMgZHVtbXkgdG9wIG9uIGZpcnN0IGNhbGwg
Ki8KLSNkZWZpbmUgaW5pdGlhbF90b3AoTSkgICAgICAgICAgICAgICh1bnNvcnRlZF9jaHVua3Mo
TSkpCi0KLS8qCi0gIEJpbm1hcAotCi0gICAgVG8gaGVscCBjb21wZW5zYXRlIGZvciB0aGUgbGFy
Z2UgbnVtYmVyIG9mIGJpbnMsIGEgb25lLWxldmVsIGluZGV4Ci0gICAgc3RydWN0dXJlIGlzIHVz
ZWQgZm9yIGJpbi1ieS1iaW4gc2VhcmNoaW5nLiAgYGJpbm1hcCcgaXMgYQotICAgIGJpdHZlY3Rv
ciByZWNvcmRpbmcgd2hldGhlciBiaW5zIGFyZSBkZWZpbml0ZWx5IGVtcHR5IHNvIHRoZXkgY2Fu
Ci0gICAgYmUgc2tpcHBlZCBvdmVyIGR1cmluZyBkdXJpbmcgdHJhdmVyc2Fscy4gIFRoZSBiaXRz
IGFyZSBOT1QgYWx3YXlzCi0gICAgY2xlYXJlZCBhcyBzb29uIGFzIGJpbnMgYXJlIGVtcHR5LCBi
dXQgaW5zdGVhZCBvbmx5Ci0gICAgd2hlbiB0aGV5IGFyZSBub3RpY2VkIHRvIGJlIGVtcHR5IGR1
cmluZyB0cmF2ZXJzYWwgaW4gbWFsbG9jLgotKi8KLQotLyogQ29uc2VydmF0aXZlbHkgdXNlIDMy
IGJpdHMgcGVyIG1hcCB3b3JkLCBldmVuIGlmIG9uIDY0Yml0IHN5c3RlbSAqLwotI2RlZmluZSBC
SU5NQVBTSElGVCAgICAgIDUKLSNkZWZpbmUgQklUU1BFUk1BUCAgICAgICAoMVUgPDwgQklOTUFQ
U0hJRlQpCi0jZGVmaW5lIEJJTk1BUFNJWkUgICAgICAgKE5CSU5TIC8gQklUU1BFUk1BUCkKLQot
I2RlZmluZSBpZHgyYmxvY2soaSkgICAgICgoaSkgPj4gQklOTUFQU0hJRlQpCi0jZGVmaW5lIGlk
eDJiaXQoaSkgICAgICAgKCgxVSA8PCAoKGkpICYgKCgxVSA8PCBCSU5NQVBTSElGVCktMSkpKSkK
LQotI2RlZmluZSBtYXJrX2JpbihtLGkpICAgICgobSktPmJpbm1hcFtpZHgyYmxvY2soaSldIHw9
ICBpZHgyYml0KGkpKQotI2RlZmluZSB1bm1hcmtfYmluKG0saSkgICgobSktPmJpbm1hcFtpZHgy
YmxvY2soaSldICY9IH4oaWR4MmJpdChpKSkpCi0jZGVmaW5lIGdldF9iaW5tYXAobSxpKSAgKCht
KS0+YmlubWFwW2lkeDJibG9jayhpKV0gJiAgIGlkeDJiaXQoaSkpCi0KLS8qCi0gIEZhc3RiaW5z
Ci0KLSAgICBBbiBhcnJheSBvZiBsaXN0cyBob2xkaW5nIHJlY2VudGx5IGZyZWVkIHNtYWxsIGNo
dW5rcy4gIEZhc3RiaW5zCi0gICAgYXJlIG5vdCBkb3VibHkgbGlua2VkLiAgSXQgaXMgZmFzdGVy
IHRvIHNpbmdsZS1saW5rIHRoZW0sIGFuZAotICAgIHNpbmNlIGNodW5rcyBhcmUgbmV2ZXIgcmVt
b3ZlZCBmcm9tIHRoZSBtaWRkbGVzIG9mIHRoZXNlIGxpc3RzLAotICAgIGRvdWJsZSBsaW5raW5n
IGlzIG5vdCBuZWNlc3NhcnkuIEFsc28sIHVubGlrZSByZWd1bGFyIGJpbnMsIHRoZXkKLSAgICBh
cmUgbm90IGV2ZW4gcHJvY2Vzc2VkIGluIEZJRk8gb3JkZXIgKHRoZXkgdXNlIGZhc3RlciBMSUZP
KSBzaW5jZQotICAgIG9yZGVyaW5nIGRvZXNuJ3QgbXVjaCBtYXR0ZXIgaW4gdGhlIHRyYW5zaWVu
dCBjb250ZXh0cyBpbiB3aGljaAotICAgIGZhc3RiaW5zIGFyZSBub3JtYWxseSB1c2VkLgotCi0g
ICAgQ2h1bmtzIGluIGZhc3RiaW5zIGtlZXAgdGhlaXIgaW51c2UgYml0IHNldCwgc28gdGhleSBj
YW5ub3QKLSAgICBiZSBjb25zb2xpZGF0ZWQgd2l0aCBvdGhlciBmcmVlIGNodW5rcy4gbWFsbG9j
X2NvbnNvbGlkYXRlCi0gICAgcmVsZWFzZXMgYWxsIGNodW5rcyBpbiBmYXN0YmlucyBhbmQgY29u
c29saWRhdGVzIHRoZW0gd2l0aAotICAgIG90aGVyIGZyZWUgY2h1bmtzLiAKLSovCi0KLXR5cGVk
ZWYgc3RydWN0IG1hbGxvY19jaHVuayogbWZhc3RiaW5wdHI7Ci0KLS8qIG9mZnNldCAyIHRvIHVz
ZSBvdGhlcndpc2UgdW5pbmRleGFibGUgZmlyc3QgMiBiaW5zICovCi0jZGVmaW5lIGZhc3RiaW5f
aW5kZXgoc3opICAgICAgICAoKCgodW5zaWduZWQgaW50KShzeikpID4+IDMpIC0gMikKLQotLyog
VGhlIG1heGltdW0gZmFzdGJpbiByZXF1ZXN0IHNpemUgd2Ugc3VwcG9ydCAqLwotI2RlZmluZSBN
QVhfRkFTVF9TSVpFICAgICA4MAotCi0jZGVmaW5lIE5GQVNUQklOUyAgKGZhc3RiaW5faW5kZXgo
cmVxdWVzdDJzaXplKE1BWF9GQVNUX1NJWkUpKSsxKQotCi0vKgotICBGQVNUQklOX0NPTlNPTElE
QVRJT05fVEhSRVNIT0xEIGlzIHRoZSBzaXplIG9mIGEgY2h1bmsgaW4gZnJlZSgpCi0gIHRoYXQg
dHJpZ2dlcnMgYXV0b21hdGljIGNvbnNvbGlkYXRpb24gb2YgcG9zc2libHktc3Vycm91bmRpbmcK
LSAgZmFzdGJpbiBjaHVua3MuIFRoaXMgaXMgYSBoZXVyaXN0aWMsIHNvIHRoZSBleGFjdCB2YWx1
ZSBzaG91bGQgbm90Ci0gIG1hdHRlciB0b28gbXVjaC4gSXQgaXMgZGVmaW5lZCBhdCBoYWxmIHRo
ZSBkZWZhdWx0IHRyaW0gdGhyZXNob2xkIGFzIGEKLSAgY29tcHJvbWlzZSBoZXVyaXN0aWMgdG8g
b25seSBhdHRlbXB0IGNvbnNvbGlkYXRpb24gaWYgaXQgaXMgbGlrZWx5Ci0gIHRvIGxlYWQgdG8g
dHJpbW1pbmcuIEhvd2V2ZXIsIGl0IGlzIG5vdCBkeW5hbWljYWxseSB0dW5hYmxlLCBzaW5jZQot
ICBjb25zb2xpZGF0aW9uIHJlZHVjZXMgZnJhZ21lbnRhdGlvbiBzdXJyb3VuZGluZyBsb2FyZ2Ug
Y2h1bmtzIGV2ZW4gCi0gIGlmIHRyaW1taW5nIGlzIG5vdCB1c2VkLgotKi8KLQotI2RlZmluZSBG
QVNUQklOX0NPTlNPTElEQVRJT05fVEhSRVNIT0xEICBcCi0gICgodW5zaWduZWQgbG9uZykoREVG
QVVMVF9UUklNX1RIUkVTSE9MRCkgPj4gMSkKLQotLyoKLSAgU2luY2UgdGhlIGxvd2VzdCAyIGJp
dHMgaW4gbWF4X2Zhc3QgZG9uJ3QgbWF0dGVyIGluIHNpemUgY29tcGFyaXNvbnMsIAotICB0aGV5
IGFyZSB1c2VkIGFzIGZsYWdzLgotKi8KLQotLyoKLSAgQU5ZQ0hVTktTX0JJVCBoZWxkIGluIG1h
eF9mYXN0IGluZGljYXRlcyB0aGF0IHRoZXJlIG1heSBiZSBhbnkKLSAgZnJlZWQgY2h1bmtzIGF0
IGFsbC4gSXQgaXMgc2V0IHRydWUgd2hlbiBlbnRlcmluZyBhIGNodW5rIGludG8gYW55Ci0gIGJp
bi4KLSovCi0KLSNkZWZpbmUgQU5ZQ0hVTktTX0JJVCAgICAgICAgKDFVKQotCi0jZGVmaW5lIGhh
dmVfYW55Y2h1bmtzKE0pICAgICAoKChNKS0+bWF4X2Zhc3QgJiAgQU5ZQ0hVTktTX0JJVCkpCi0j
ZGVmaW5lIHNldF9hbnljaHVua3MoTSkgICAgICAoKE0pLT5tYXhfZmFzdCB8PSAgQU5ZQ0hVTktT
X0JJVCkKLSNkZWZpbmUgY2xlYXJfYW55Y2h1bmtzKE0pICAgICgoTSktPm1heF9mYXN0ICY9IH5B
TllDSFVOS1NfQklUKQotCi0vKgotICBGQVNUQ0hVTktTX0JJVCBoZWxkIGluIG1heF9mYXN0IGlu
ZGljYXRlcyB0aGF0IHRoZXJlIGFyZSBwcm9iYWJseQotICBzb21lIGZhc3RiaW4gY2h1bmtzLiBJ
dCBpcyBzZXQgdHJ1ZSBvbiBlbnRlcmluZyBhIGNodW5rIGludG8gYW55Ci0gIGZhc3RiaW4sIGFu
ZCBjbGVhcmVkIG9ubHkgaW4gbWFsbG9jX2NvbnNvbGlkYXRlLgotKi8KLQotI2RlZmluZSBGQVNU
Q0hVTktTX0JJVCAgICAgICAgKDJVKQotCi0jZGVmaW5lIGhhdmVfZmFzdGNodW5rcyhNKSAgICgo
KE0pLT5tYXhfZmFzdCAmICBGQVNUQ0hVTktTX0JJVCkpCi0jZGVmaW5lIHNldF9mYXN0Y2h1bmtz
KE0pICAgICgoTSktPm1heF9mYXN0IHw9ICAoRkFTVENIVU5LU19CSVR8QU5ZQ0hVTktTX0JJVCkp
Ci0jZGVmaW5lIGNsZWFyX2Zhc3RjaHVua3MoTSkgICgoTSktPm1heF9mYXN0ICY9IH4oRkFTVENI
VU5LU19CSVQpKQotCi0vKiAKLSAgIFNldCB2YWx1ZSBvZiBtYXhfZmFzdC4gCi0gICBVc2UgaW1w
b3NzaWJseSBzbWFsbCB2YWx1ZSBpZiAwLgotKi8KLQotI2RlZmluZSBzZXRfbWF4X2Zhc3QoTSwg
cykgXAotICAoTSktPm1heF9mYXN0ID0gKCgocykgPT0gMCk/IFNNQUxMQklOX1dJRFRIOiByZXF1
ZXN0MnNpemUocykpIHwgXAotICAoKE0pLT5tYXhfZmFzdCAmICAoRkFTVENIVU5LU19CSVR8QU5Z
Q0hVTktTX0JJVCkpCi0KLSNkZWZpbmUgZ2V0X21heF9mYXN0KE0pIFwKLSAgKChNKS0+bWF4X2Zh
c3QgJiB+KEZBU1RDSFVOS1NfQklUIHwgQU5ZQ0hVTktTX0JJVCkpCi0KLQotLyoKLSAgbW9yZWNv
cmVfcHJvcGVydGllcyBpcyBhIHN0YXR1cyB3b3JkIGhvbGRpbmcgZHluYW1pY2FsbHkgZGlzY292
ZXJlZAotICBvciBjb250cm9sbGVkIHByb3BlcnRpZXMgb2YgdGhlIG1vcmVjb3JlIGZ1bmN0aW9u
Ci0qLwotCi0jZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVNfQklUICAoMVUpCi0KLSNkZWZpbmUg
Y29udGlndW91cyhNKSBcCi0gICAgICAgICgoKE0pLT5tb3JlY29yZV9wcm9wZXJ0aWVzICYgIE1P
UkVDT1JFX0NPTlRJR1VPVVNfQklUKSkKLSNkZWZpbmUgbm9uY29udGlndW91cyhNKSBcCi0gICAg
ICAgICgoKE0pLT5tb3JlY29yZV9wcm9wZXJ0aWVzICYgIE1PUkVDT1JFX0NPTlRJR1VPVVNfQklU
KSA9PSAwKQotI2RlZmluZSBzZXRfY29udGlndW91cyhNKSBcCi0gICAgICAgICgoTSktPm1vcmVj
b3JlX3Byb3BlcnRpZXMgfD0gIE1PUkVDT1JFX0NPTlRJR1VPVVNfQklUKQotI2RlZmluZSBzZXRf
bm9uY29udGlndW91cyhNKSBcCi0gICAgICAgICgoTSktPm1vcmVjb3JlX3Byb3BlcnRpZXMgJj0g
fk1PUkVDT1JFX0NPTlRJR1VPVVNfQklUKQotCi0KLS8qCi0gICAtLS0tLS0tLS0tLSBJbnRlcm5h
bCBzdGF0ZSByZXByZXNlbnRhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gLS0tLS0tLS0tLS0KLSov
Ci0KLXN0cnVjdCBtYWxsb2Nfc3RhdGUgewotCi0gIC8qIFRoZSBtYXhpbXVtIGNodW5rIHNpemUg
dG8gYmUgZWxpZ2libGUgZm9yIGZhc3RiaW4gKi8KLSAgSU5URVJOQUxfU0laRV9UICBtYXhfZmFz
dDsgICAvKiBsb3cgMiBiaXRzIHVzZWQgYXMgZmxhZ3MgKi8KLQotICAvKiBGYXN0YmlucyAqLwot
ICBtZmFzdGJpbnB0ciAgICAgIGZhc3RiaW5zW05GQVNUQklOU107Ci0KLSAgLyogQmFzZSBvZiB0
aGUgdG9wbW9zdCBjaHVuayAtLSBub3Qgb3RoZXJ3aXNlIGtlcHQgaW4gYSBiaW4gKi8KLSAgbWNo
dW5rcHRyICAgICAgICB0b3A7Ci0KLSAgLyogVGhlIHJlbWFpbmRlciBmcm9tIHRoZSBtb3N0IHJl
Y2VudCBzcGxpdCBvZiBhIHNtYWxsIHJlcXVlc3QgKi8KLSAgbWNodW5rcHRyICAgICAgICBsYXN0
X3JlbWFpbmRlcjsKLQotICAvKiBOb3JtYWwgYmlucyBwYWNrZWQgYXMgZGVzY3JpYmVkIGFib3Zl
ICovCi0gIG1jaHVua3B0ciAgICAgICAgYmluc1tOQklOUyAqIDJdOwotCi0gIC8qIEJpdG1hcCBv
ZiBiaW5zLiBUcmFpbGluZyB6ZXJvIG1hcCBoYW5kbGVzIGNhc2VzIG9mIGxhcmdlc3QgYmlubmVk
IHNpemUgKi8KLSAgdW5zaWduZWQgaW50ICAgICBiaW5tYXBbQklOTUFQU0laRSsxXTsKLQotICAv
KiBUdW5hYmxlIHBhcmFtZXRlcnMgKi8KLSAgQ0hVTktfU0laRV9UICAgICB0cmltX3RocmVzaG9s
ZDsKLSAgSU5URVJOQUxfU0laRV9UICB0b3BfcGFkOwotICBJTlRFUk5BTF9TSVpFX1QgIG1tYXBf
dGhyZXNob2xkOwotCi0gIC8qIE1lbW9yeSBtYXAgc3VwcG9ydCAqLwotICBpbnQgICAgICAgICAg
ICAgIG5fbW1hcHM7Ci0gIGludCAgICAgICAgICAgICAgbl9tbWFwc19tYXg7Ci0gIGludCAgICAg
ICAgICAgICAgbWF4X25fbW1hcHM7Ci0KLSAgLyogQ2FjaGUgbWFsbG9jX2dldHBhZ2VzaXplICov
Ci0gIHVuc2lnbmVkIGludCAgICAgcGFnZXNpemU7ICAgIAotCi0gIC8qIFRyYWNrIHByb3BlcnRp
ZXMgb2YgTU9SRUNPUkUgKi8KLSAgdW5zaWduZWQgaW50ICAgICBtb3JlY29yZV9wcm9wZXJ0aWVz
OwotCi0gIC8qIFN0YXRpc3RpY3MgKi8KLSAgSU5URVJOQUxfU0laRV9UICBtbWFwcGVkX21lbTsK
LSAgSU5URVJOQUxfU0laRV9UICBzYnJrZWRfbWVtOwotICBJTlRFUk5BTF9TSVpFX1QgIG1heF9z
YnJrZWRfbWVtOwotICBJTlRFUk5BTF9TSVpFX1QgIG1heF9tbWFwcGVkX21lbTsKLSAgSU5URVJO
QUxfU0laRV9UICBtYXhfdG90YWxfbWVtOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3N0
YXRlICptc3RhdGU7Ci0KLS8qIAotICAgVGhlcmUgaXMgZXhhY3RseSBvbmUgaW5zdGFuY2Ugb2Yg
dGhpcyBzdHJ1Y3QgaW4gdGhpcyBtYWxsb2MuCi0gICBJZiB5b3UgYXJlIGFkYXB0aW5nIHRoaXMg
bWFsbG9jIGluIGEgd2F5IHRoYXQgZG9lcyBOT1QgdXNlIGEgc3RhdGljCi0gICBtYWxsb2Nfc3Rh
dGUsIHlvdSBNVVNUIGV4cGxpY2l0bHkgemVyby1maWxsIGl0IGJlZm9yZSB1c2luZy4gVGhpcwot
ICAgbWFsbG9jIHJlbGllcyBvbiB0aGUgcHJvcGVydHkgdGhhdCBtYWxsb2Nfc3RhdGUgaXMgaW5p
dGlhbGl6ZWQgdG8KLSAgIGFsbCB6ZXJvZXMgKGFzIGlzIHRydWUgb2YgQyBzdGF0aWNzKS4KLSov
Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFsbG9jX3N0YXRlIGF2XzsgIC8qIG5ldmVyIGRpcmVjdGx5IHJl
ZmVyZW5jZWQgKi8KLQotLyoKLSAgIEFsbCB1c2VzIG9mIGF2XyBhcmUgdmlhIGdldF9tYWxsb2Nf
c3RhdGUoKS4KLSAgIEF0IG1vc3Qgb25lICJjYWxsIiB0byBnZXRfbWFsbG9jX3N0YXRlIGlzIG1h
ZGUgcGVyIGludm9jYXRpb24gb2YKLSAgIHRoZSBwdWJsaWMgdmVyc2lvbnMgb2YgbWFsbG9jIGFu
ZCBmcmVlLCBidXQgb3RoZXIgcm91dGluZXMKLSAgIHRoYXQgaW4gdHVybiBpbnZva2UgbWFsbG9j
IGFuZC9vciBmcmVlIG1heSBjYWxsIG1vcmUgdGhlbiBvbmNlLiAKLSAgIEFsc28sIGl0IGlzIGNh
bGxlZCBpbiBjaGVjayogcm91dGluZXMgaWYgREVCVUcgaXMgc2V0LgotKi8KLQotI2RlZmluZSBn
ZXRfbWFsbG9jX3N0YXRlKCkgKCYoYXZfKSkKLQotLyoKLSAgSW5pdGlhbGl6ZSBhIG1hbGxvY19z
dGF0ZSBzdHJ1Y3QuCi0KLSAgVGhpcyBpcyBjYWxsZWQgb25seSBmcm9tIHdpdGhpbiBtYWxsb2Nf
Y29uc29saWRhdGUsIHdoaWNoIG5lZWRzCi0gIGJlIGNhbGxlZCBpbiB0aGUgc2FtZSBjb250ZXh0
cyBhbnl3YXkuICBJdCBpcyBuZXZlciBjYWxsZWQgZGlyZWN0bHkKLSAgb3V0c2lkZSBvZiBtYWxs
b2NfY29uc29saWRhdGUgYmVjYXVzZSBzb21lIG9wdGltaXppbmcgY29tcGlsZXJzIHRyeQotICB0
byBpbmxpbmUgaXQgYXQgYWxsIGNhbGwgcG9pbnRzLCB3aGljaCB0dXJucyBvdXQgbm90IHRvIGJl
IGFuCi0gIG9wdGltaXphdGlvbiBhdCBhbGwuIChJbmxpbmluZyBpdCBpbiBtYWxsb2NfY29uc29s
aWRhdGUgaXMgZmluZSB0aG91Z2guKQotKi8KLQotI2lmIF9fU1REX0MKLXN0YXRpYyB2b2lkIG1h
bGxvY19pbml0X3N0YXRlKG1zdGF0ZSBhdikKLSNlbHNlCi1zdGF0aWMgdm9pZCBtYWxsb2NfaW5p
dF9zdGF0ZShhdikgbXN0YXRlIGF2OwotI2VuZGlmCi17Ci0gIGludCAgICAgaTsKLSAgbWJpbnB0
ciBiaW47Ci0gIAotICAvKiBFc3RhYmxpc2ggY2lyY3VsYXIgbGlua3MgZm9yIG5vcm1hbCBiaW5z
ICovCi0gIGZvciAoaSA9IDE7IGkgPCBOQklOUzsgKytpKSB7IAotICAgIGJpbiA9IGJpbl9hdChh
dixpKTsKLSAgICBiaW4tPmZkID0gYmluLT5iayA9IGJpbjsKLSAgfQotCi0gIGF2LT50b3BfcGFk
ICAgICAgICA9IERFRkFVTFRfVE9QX1BBRDsKLSAgYXYtPm5fbW1hcHNfbWF4ICAgID0gREVGQVVM
VF9NTUFQX01BWDsKLSAgYXYtPm1tYXBfdGhyZXNob2xkID0gREVGQVVMVF9NTUFQX1RIUkVTSE9M
RDsKLSAgYXYtPnRyaW1fdGhyZXNob2xkID0gREVGQVVMVF9UUklNX1RIUkVTSE9MRDsKLQotI2lm
IE1PUkVDT1JFX0NPTlRJR1VPVVMKLSAgc2V0X2NvbnRpZ3VvdXMoYXYpOwotI2Vsc2UKLSAgc2V0
X25vbmNvbnRpZ3VvdXMoYXYpOwotI2VuZGlmCi0KLQotICBzZXRfbWF4X2Zhc3QoYXYsIERFRkFV
TFRfTVhGQVNUKTsKLQotICBhdi0+dG9wICAgICAgICAgICAgPSBpbml0aWFsX3RvcChhdik7Ci0g
IGF2LT5wYWdlc2l6ZSAgICAgICA9IG1hbGxvY19nZXRwYWdlc2l6ZTsKLX0KLQotLyogCi0gICBP
dGhlciBpbnRlcm5hbCB1dGlsaXRpZXMgb3BlcmF0aW5nIG9uIG1zdGF0ZXMKLSovCi0KLSNpZiBf
X1NURF9DCi1zdGF0aWMgVm9pZF90KiAgc1lTTUFMTE9jKElOVEVSTkFMX1NJWkVfVCwgbXN0YXRl
KTsKLSNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0KLXN0YXRpYyBpbnQgICAgICBzWVNUUklt
KHNpemVfdCwgbXN0YXRlKTsKLSNlbmRpZgotc3RhdGljIHZvaWQgICAgIG1hbGxvY19jb25zb2xp
ZGF0ZShtc3RhdGUpOwotc3RhdGljIFZvaWRfdCoqIGlBTExPYyhzaXplX3QsIHNpemVfdCosIGlu
dCwgVm9pZF90KiopOwotI2Vsc2UKLXN0YXRpYyBWb2lkX3QqICBzWVNNQUxMT2MoKTsKLXN0YXRp
YyBpbnQgICAgICBzWVNUUkltKCk7Ci1zdGF0aWMgdm9pZCAgICAgbWFsbG9jX2NvbnNvbGlkYXRl
KCk7Ci1zdGF0aWMgVm9pZF90KiogaUFMTE9jKCk7Ci0jZW5kaWYKLQotLyoKLSAgRGVidWdnaW5n
IHN1cHBvcnQKLQotICBUaGVzZSByb3V0aW5lcyBtYWtlIGEgbnVtYmVyIG9mIGFzc2VydGlvbnMg
YWJvdXQgdGhlIHN0YXRlcwotICBvZiBkYXRhIHN0cnVjdHVyZXMgdGhhdCBzaG91bGQgYmUgdHJ1
ZSBhdCBhbGwgdGltZXMuIElmIGFueQotICBhcmUgbm90IHRydWUsIGl0J3MgdmVyeSBsaWtlbHkg
dGhhdCBhIHVzZXIgcHJvZ3JhbSBoYXMgc29tZWhvdwotICB0cmFzaGVkIG1lbW9yeS4gKEl0J3Mg
YWxzbyBwb3NzaWJsZSB0aGF0IHRoZXJlIGlzIGEgY29kaW5nIGVycm9yCi0gIGluIG1hbGxvYy4g
SW4gd2hpY2ggY2FzZSwgcGxlYXNlIHJlcG9ydCBpdCEpCi0qLwotCi0jaWYgISBERUJVRwotCi0j
ZGVmaW5lIGNoZWNrX2NodW5rKFApCi0jZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoUCkKLSNkZWZp
bmUgY2hlY2tfaW51c2VfY2h1bmsoUCkKLSNkZWZpbmUgY2hlY2tfcmVtYWxsb2NlZF9jaHVuayhQ
LE4pCi0jZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKFAsTikKLSNkZWZpbmUgY2hlY2tfbWFs
bG9jX3N0YXRlKCkKLQotI2Vsc2UKLSNkZWZpbmUgY2hlY2tfY2h1bmsoUCkgICAgICAgICAgICAg
IGRvX2NoZWNrX2NodW5rKFApCi0jZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoUCkgICAgICAgICBk
b19jaGVja19mcmVlX2NodW5rKFApCi0jZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKFApICAgICAg
ICBkb19jaGVja19pbnVzZV9jaHVuayhQKQotI2RlZmluZSBjaGVja19yZW1hbGxvY2VkX2NodW5r
KFAsTikgZG9fY2hlY2tfcmVtYWxsb2NlZF9jaHVuayhQLE4pCi0jZGVmaW5lIGNoZWNrX21hbGxv
Y2VkX2NodW5rKFAsTikgICBkb19jaGVja19tYWxsb2NlZF9jaHVuayhQLE4pCi0jZGVmaW5lIGNo
ZWNrX21hbGxvY19zdGF0ZSgpICAgICAgICBkb19jaGVja19tYWxsb2Nfc3RhdGUoKQotCi0vKgot
ICBQcm9wZXJ0aWVzIG9mIGFsbCBjaHVua3MKLSovCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMgdm9p
ZCBkb19jaGVja19jaHVuayhtY2h1bmtwdHIgcCkKLSNlbHNlCi1zdGF0aWMgdm9pZCBkb19jaGVj
a19jaHVuayhwKSBtY2h1bmtwdHIgcDsKLSNlbmRpZgotewotICBtc3RhdGUgYXYgPSBnZXRfbWFs
bG9jX3N0YXRlKCk7Ci0gIENIVU5LX1NJWkVfVCAgc3ogPSBjaHVua3NpemUocCk7Ci0gIC8qIG1p
biBhbmQgbWF4IHBvc3NpYmxlIGFkZHJlc3NlcyBhc3N1bWluZyBjb250aWd1b3VzIGFsbG9jYXRp
b24gKi8KLSAgY2hhciogbWF4X2FkZHJlc3MgPSAoY2hhciopKGF2LT50b3ApICsgY2h1bmtzaXpl
KGF2LT50b3ApOwotICBjaGFyKiBtaW5fYWRkcmVzcyA9IG1heF9hZGRyZXNzIC0gYXYtPnNicmtl
ZF9tZW07Ci0KLSAgaWYgKCFjaHVua19pc19tbWFwcGVkKHApKSB7Ci0gICAgCi0gICAgLyogSGFz
IGxlZ2FsIGFkZHJlc3MgLi4uICovCi0gICAgaWYgKHAgIT0gYXYtPnRvcCkgewotICAgICAgaWYg
KGNvbnRpZ3VvdXMoYXYpKSB7Ci0gICAgICAgIGFzc2VydCgoKGNoYXIqKXApID49IG1pbl9hZGRy
ZXNzKTsKLSAgICAgICAgYXNzZXJ0KCgoY2hhciopcCArIHN6KSA8PSAoKGNoYXIqKShhdi0+dG9w
KSkpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIC8qIHRvcCBzaXplIGlzIGFs
d2F5cyBhdCBsZWFzdCBNSU5TSVpFICovCi0gICAgICBhc3NlcnQoKENIVU5LX1NJWkVfVCkoc3op
ID49IE1JTlNJWkUpOwotICAgICAgLyogdG9wIHByZWRlY2Vzc29yIGFsd2F5cyBtYXJrZWQgaW51
c2UgKi8KLSAgICAgIGFzc2VydChwcmV2X2ludXNlKHApKTsKLSAgICB9Ci0gICAgICAKLSAgfQot
ICBlbHNlIHsKLSNpZiBIQVZFX01NQVAKLSAgICAvKiBhZGRyZXNzIGlzIG91dHNpZGUgbWFpbiBo
ZWFwICAqLwotICAgIGlmIChjb250aWd1b3VzKGF2KSAmJiBhdi0+dG9wICE9IGluaXRpYWxfdG9w
KGF2KSkgewotICAgICAgYXNzZXJ0KCgoY2hhciopcCkgPCBtaW5fYWRkcmVzcyB8fCAoKGNoYXIq
KXApID4gbWF4X2FkZHJlc3MpOwotICAgIH0KLSAgICAvKiBjaHVuayBpcyBwYWdlLWFsaWduZWQg
Ki8KLSAgICBhc3NlcnQoKChwLT5wcmV2X3NpemUgKyBzeikgJiAoYXYtPnBhZ2VzaXplLTEpKSA9
PSAwKTsKLSAgICAvKiBtZW0gaXMgYWxpZ25lZCAqLwotICAgIGFzc2VydChhbGlnbmVkX09LKGNo
dW5rMm1lbShwKSkpOwotI2Vsc2UKLSAgICAvKiBmb3JjZSBhbiBhcHByb3ByaWF0ZSBhc3NlcnQg
dmlvbGF0aW9uIGlmIGRlYnVnIHNldCAqLwotICAgIGFzc2VydCghY2h1bmtfaXNfbW1hcHBlZChw
KSk7Ci0jZW5kaWYKLSAgfQotfQotCi0vKgotICBQcm9wZXJ0aWVzIG9mIGZyZWUgY2h1bmtzCi0q
LwotCi0jaWYgX19TVERfQwotc3RhdGljIHZvaWQgZG9fY2hlY2tfZnJlZV9jaHVuayhtY2h1bmtw
dHIgcCkKLSNlbHNlCi1zdGF0aWMgdm9pZCBkb19jaGVja19mcmVlX2NodW5rKHApIG1jaHVua3B0
ciBwOwotI2VuZGlmCi17Ci0gIG1zdGF0ZSBhdiA9IGdldF9tYWxsb2Nfc3RhdGUoKTsKLQotICBJ
TlRFUk5BTF9TSVpFX1Qgc3ogPSBwLT5zaXplICYgflBSRVZfSU5VU0U7Ci0gIG1jaHVua3B0ciBu
ZXh0ID0gY2h1bmtfYXRfb2Zmc2V0KHAsIHN6KTsKLQotICBkb19jaGVja19jaHVuayhwKTsKLQot
ICAvKiBDaHVuayBtdXN0IGNsYWltIHRvIGJlIGZyZWUgLi4uICovCi0gIGFzc2VydCghaW51c2Uo
cCkpOwotICBhc3NlcnQgKCFjaHVua19pc19tbWFwcGVkKHApKTsKLQotICAvKiBVbmxlc3MgYSBz
cGVjaWFsIG1hcmtlciwgbXVzdCBoYXZlIE9LIGZpZWxkcyAqLwotICBpZiAoKENIVU5LX1NJWkVf
VCkoc3opID49IE1JTlNJWkUpCi0gIHsKLSAgICBhc3NlcnQoKHN6ICYgTUFMTE9DX0FMSUdOX01B
U0spID09IDApOwotICAgIGFzc2VydChhbGlnbmVkX09LKGNodW5rMm1lbShwKSkpOwotICAgIC8q
IC4uLiBtYXRjaGluZyBmb290ZXIgZmllbGQgKi8KLSAgICBhc3NlcnQobmV4dC0+cHJldl9zaXpl
ID09IHN6KTsKLSAgICAvKiAuLi4gYW5kIGlzIGZ1bGx5IGNvbnNvbGlkYXRlZCAqLwotICAgIGFz
c2VydChwcmV2X2ludXNlKHApKTsKLSAgICBhc3NlcnQgKG5leHQgPT0gYXYtPnRvcCB8fCBpbnVz
ZShuZXh0KSk7Ci0KLSAgICAvKiAuLi4gYW5kIGhhcyBtaW5pbWFsbHkgc2FuZSBsaW5rcyAqLwot
ICAgIGFzc2VydChwLT5mZC0+YmsgPT0gcCk7Ci0gICAgYXNzZXJ0KHAtPmJrLT5mZCA9PSBwKTsK
LSAgfQotICBlbHNlIC8qIG1hcmtlcnMgYXJlIGFsd2F5cyBvZiBzaXplIFNJWkVfU1ogKi8KLSAg
ICBhc3NlcnQoc3ogPT0gU0laRV9TWik7Ci19Ci0KLS8qCi0gIFByb3BlcnRpZXMgb2YgaW51c2Ug
Y2h1bmtzCi0qLwotCi0jaWYgX19TVERfQwotc3RhdGljIHZvaWQgZG9fY2hlY2tfaW51c2VfY2h1
bmsobWNodW5rcHRyIHApCi0jZWxzZQotc3RhdGljIHZvaWQgZG9fY2hlY2tfaW51c2VfY2h1bmso
cCkgbWNodW5rcHRyIHA7Ci0jZW5kaWYKLXsKLSAgbXN0YXRlIGF2ID0gZ2V0X21hbGxvY19zdGF0
ZSgpOwotICBtY2h1bmtwdHIgbmV4dDsKLSAgZG9fY2hlY2tfY2h1bmsocCk7Ci0KLSAgaWYgKGNo
dW5rX2lzX21tYXBwZWQocCkpCi0gICAgcmV0dXJuOyAvKiBtbWFwcGVkIGNodW5rcyBoYXZlIG5v
IG5leHQvcHJldiAqLwotCi0gIC8qIENoZWNrIHdoZXRoZXIgaXQgY2xhaW1zIHRvIGJlIGluIHVz
ZSAuLi4gKi8KLSAgYXNzZXJ0KGludXNlKHApKTsKLQotICBuZXh0ID0gbmV4dF9jaHVuayhwKTsK
LQotICAvKiAuLi4gYW5kIGlzIHN1cnJvdW5kZWQgYnkgT0sgY2h1bmtzLgotICAgIFNpbmNlIG1v
cmUgdGhpbmdzIGNhbiBiZSBjaGVja2VkIHdpdGggZnJlZSBjaHVua3MgdGhhbiBpbnVzZSBvbmVz
LAotICAgIGlmIGFuIGludXNlIGNodW5rIGJvcmRlcnMgdGhlbSBhbmQgZGVidWcgaXMgb24sIGl0
J3Mgd29ydGggZG9pbmcgdGhlbS4KLSAgKi8KLSAgaWYgKCFwcmV2X2ludXNlKHApKSAgewotICAg
IC8qIE5vdGUgdGhhdCB3ZSBjYW5ub3QgZXZlbiBsb29rIGF0IHByZXYgdW5sZXNzIGl0IGlzIG5v
dCBpbnVzZSAqLwotICAgIG1jaHVua3B0ciBwcnYgPSBwcmV2X2NodW5rKHApOwotICAgIGFzc2Vy
dChuZXh0X2NodW5rKHBydikgPT0gcCk7Ci0gICAgZG9fY2hlY2tfZnJlZV9jaHVuayhwcnYpOwot
ICB9Ci0KLSAgaWYgKG5leHQgPT0gYXYtPnRvcCkgewotICAgIGFzc2VydChwcmV2X2ludXNlKG5l
eHQpKTsKLSAgICBhc3NlcnQoY2h1bmtzaXplKG5leHQpID49IE1JTlNJWkUpOwotICB9Ci0gIGVs
c2UgaWYgKCFpbnVzZShuZXh0KSkKLSAgICBkb19jaGVja19mcmVlX2NodW5rKG5leHQpOwotfQot
Ci0vKgotICBQcm9wZXJ0aWVzIG9mIGNodW5rcyByZWN5Y2xlZCBmcm9tIGZhc3RiaW5zCi0qLwot
Ci0jaWYgX19TVERfQwotc3RhdGljIHZvaWQgZG9fY2hlY2tfcmVtYWxsb2NlZF9jaHVuayhtY2h1
bmtwdHIgcCwgSU5URVJOQUxfU0laRV9UIHMpCi0jZWxzZQotc3RhdGljIHZvaWQgZG9fY2hlY2tf
cmVtYWxsb2NlZF9jaHVuayhwLCBzKSBtY2h1bmtwdHIgcDsgSU5URVJOQUxfU0laRV9UIHM7Ci0j
ZW5kaWYKLXsKLSAgSU5URVJOQUxfU0laRV9UIHN6ID0gcC0+c2l6ZSAmIH5QUkVWX0lOVVNFOwot
Ci0gIGRvX2NoZWNrX2ludXNlX2NodW5rKHApOwotCi0gIC8qIExlZ2FsIHNpemUgLi4uICovCi0g
IGFzc2VydCgoc3ogJiBNQUxMT0NfQUxJR05fTUFTSykgPT0gMCk7Ci0gIGFzc2VydCgoQ0hVTktf
U0laRV9UKShzeikgPj0gTUlOU0laRSk7Ci0gIC8qIC4uLiBhbmQgYWxpZ25tZW50ICovCi0gIGFz
c2VydChhbGlnbmVkX09LKGNodW5rMm1lbShwKSkpOwotICAvKiBjaHVuayBpcyBsZXNzIHRoYW4g
TUlOU0laRSBtb3JlIHRoYW4gcmVxdWVzdCAqLwotICBhc3NlcnQoKGxvbmcpKHN6KSAtIChsb25n
KShzKSA+PSAwKTsKLSAgYXNzZXJ0KChsb25nKShzeikgLSAobG9uZykocyArIE1JTlNJWkUpIDwg
MCk7Ci19Ci0KLS8qCi0gIFByb3BlcnRpZXMgb2Ygbm9ucmVjeWNsZWQgY2h1bmtzIGF0IHRoZSBw
b2ludCB0aGV5IGFyZSBtYWxsb2NlZAotKi8KLQotI2lmIF9fU1REX0MKLXN0YXRpYyB2b2lkIGRv
X2NoZWNrX21hbGxvY2VkX2NodW5rKG1jaHVua3B0ciBwLCBJTlRFUk5BTF9TSVpFX1QgcykKLSNl
bHNlCi1zdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2NlZF9jaHVuayhwLCBzKSBtY2h1bmtwdHIg
cDsgSU5URVJOQUxfU0laRV9UIHM7Ci0jZW5kaWYKLXsKLSAgLyogc2FtZSBhcyByZWN5Y2xlZCBj
YXNlIC4uLiAqLwotICBkb19jaGVja19yZW1hbGxvY2VkX2NodW5rKHAsIHMpOwotCi0gIC8qCi0g
ICAgLi4uIHBsdXMsICBtdXN0IG9iZXkgaW1wbGVtZW50YXRpb24gaW52YXJpYW50IHRoYXQgcHJl
dl9pbnVzZSBpcwotICAgIGFsd2F5cyB0cnVlIG9mIGFueSBhbGxvY2F0ZWQgY2h1bms7IGkuZS4s
IHRoYXQgZWFjaCBhbGxvY2F0ZWQKLSAgICBjaHVuayBib3JkZXJzIGVpdGhlciBhIHByZXZpb3Vz
bHkgYWxsb2NhdGVkIGFuZCBzdGlsbCBpbi11c2UKLSAgICBjaHVuaywgb3IgdGhlIGJhc2Ugb2Yg
aXRzIG1lbW9yeSBhcmVuYS4gVGhpcyBpcyBlbnN1cmVkCi0gICAgYnkgbWFraW5nIGFsbCBhbGxv
Y2F0aW9ucyBmcm9tIHRoZSB0aGUgYGxvd2VzdCcgcGFydCBvZiBhbnkgZm91bmQKLSAgICBjaHVu
ay4gIFRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgaG9sZCBob3dldmVyIGZvciBjaHVua3MKLSAg
ICByZWN5Y2xlZCB2aWEgZmFzdGJpbnMuCi0gICovCi0KLSAgYXNzZXJ0KHByZXZfaW51c2UocCkp
OwotfQotCi0KLS8qCi0gIFByb3BlcnRpZXMgb2YgbWFsbG9jX3N0YXRlLgotCi0gIFRoaXMgbWF5
IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIG1hbGxvYywgYXMgd2VsbCBhcyBkZXRlY3RpbmcgdXNl
cgotICBwcm9ncmFtbWVyIGVycm9ycyB0aGF0IHNvbWVob3cgd3JpdGUgaW50byBtYWxsb2Nfc3Rh
dGUuCi0KLSAgSWYgeW91IGFyZSBleHRlbmRpbmcgb3IgZXhwZXJpbWVudGluZyB3aXRoIHRoaXMg
bWFsbG9jLCB5b3UgY2FuCi0gIHByb2JhYmx5IGZpZ3VyZSBvdXQgaG93IHRvIGhhY2sgdGhpcyBy
b3V0aW5lIHRvIHByaW50IG91dCBvcgotICBkaXNwbGF5IGNodW5rIGFkZHJlc3Nlcywgc2l6ZXMs
IGJpbnMsIGFuZCBvdGhlciBpbnN0cnVtZW50YXRpb24uCi0qLwotCi1zdGF0aWMgdm9pZCBkb19j
aGVja19tYWxsb2Nfc3RhdGUoKQotewotICBtc3RhdGUgYXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7
Ci0gIHVuc2lnbmVkIGludCBpOwotICBtY2h1bmtwdHIgcDsKLSAgbWNodW5rcHRyIHE7Ci0gIG1i
aW5wdHIgYjsKLSAgdW5zaWduZWQgaW50IGJpbmJpdDsKLSAgaW50IGVtcHR5OwotICB1bnNpZ25l
ZCBpbnQgaWR4OwotICBJTlRFUk5BTF9TSVpFX1Qgc2l6ZTsKLSAgQ0hVTktfU0laRV9UICB0b3Rh
bCA9IDA7Ci0gIGludCBtYXhfZmFzdF9iaW47Ci0KLSAgLyogaW50ZXJuYWwgc2l6ZV90IG11c3Qg
YmUgbm8gd2lkZXIgdGhhbiBwb2ludGVyIHR5cGUgKi8KLSAgYXNzZXJ0KHNpemVvZihJTlRFUk5B
TF9TSVpFX1QpIDw9IHNpemVvZihjaGFyKikpOwotCi0gIC8qIGFsaWdubWVudCBpcyBhIHBvd2Vy
IG9mIDIgKi8KLSAgYXNzZXJ0KChNQUxMT0NfQUxJR05NRU5UICYgKE1BTExPQ19BTElHTk1FTlQt
MSkpID09IDApOwotCi0gIC8qIGNhbm5vdCBydW4gcmVtYWluaW5nIGNoZWNrcyB1bnRpbCBmdWxs
eSBpbml0aWFsaXplZCAqLwotICBpZiAoYXYtPnRvcCA9PSAwIHx8IGF2LT50b3AgPT0gaW5pdGlh
bF90b3AoYXYpKQotICAgIHJldHVybjsKLQotICAvKiBwYWdlc2l6ZSBpcyBhIHBvd2VyIG9mIDIg
Ki8KLSAgYXNzZXJ0KChhdi0+cGFnZXNpemUgJiAoYXYtPnBhZ2VzaXplLTEpKSA9PSAwKTsKLQot
ICAvKiBwcm9wZXJ0aWVzIG9mIGZhc3RiaW5zICovCi0KLSAgLyogbWF4X2Zhc3QgaXMgaW4gYWxs
b3dlZCByYW5nZSAqLwotICBhc3NlcnQoZ2V0X21heF9mYXN0KGF2KSA8PSByZXF1ZXN0MnNpemUo
TUFYX0ZBU1RfU0laRSkpOwotCi0gIG1heF9mYXN0X2JpbiA9IGZhc3RiaW5faW5kZXgoYXYtPm1h
eF9mYXN0KTsKLQotICBmb3IgKGkgPSAwOyBpIDwgTkZBU1RCSU5TOyArK2kpIHsKLSAgICBwID0g
YXYtPmZhc3RiaW5zW2ldOwotCi0gICAgLyogYWxsIGJpbnMgcGFzdCBtYXhfZmFzdCBhcmUgZW1w
dHkgKi8KLSAgICBpZiAoaSA+IG1heF9mYXN0X2JpbikKLSAgICAgIGFzc2VydChwID09IDApOwot
Ci0gICAgd2hpbGUgKHAgIT0gMCkgewotICAgICAgLyogZWFjaCBjaHVuayBjbGFpbXMgdG8gYmUg
aW51c2UgKi8KLSAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKHApOwotICAgICAgdG90YWwgKz0g
Y2h1bmtzaXplKHApOwotICAgICAgLyogY2h1bmsgYmVsb25ncyBpbiB0aGlzIGJpbiAqLwotICAg
ICAgYXNzZXJ0KGZhc3RiaW5faW5kZXgoY2h1bmtzaXplKHApKSA9PSBpKTsKLSAgICAgIHAgPSBw
LT5mZDsKLSAgICB9Ci0gIH0KLQotICBpZiAodG90YWwgIT0gMCkKLSAgICBhc3NlcnQoaGF2ZV9m
YXN0Y2h1bmtzKGF2KSk7Ci0gIGVsc2UgaWYgKCFoYXZlX2Zhc3RjaHVua3MoYXYpKQotICAgIGFz
c2VydCh0b3RhbCA9PSAwKTsKLQotICAvKiBjaGVjayBub3JtYWwgYmlucyAqLwotICBmb3IgKGkg
PSAxOyBpIDwgTkJJTlM7ICsraSkgewotICAgIGIgPSBiaW5fYXQoYXYsaSk7Ci0KLSAgICAvKiBi
aW5tYXAgaXMgYWNjdXJhdGUgKGV4Y2VwdCBmb3IgYmluIDEgPT0gdW5zb3J0ZWRfY2h1bmtzKSAq
LwotICAgIGlmIChpID49IDIpIHsKLSAgICAgIGJpbmJpdCA9IGdldF9iaW5tYXAoYXYsaSk7Ci0g
ICAgICBlbXB0eSA9IGxhc3QoYikgPT0gYjsKLSAgICAgIGlmICghYmluYml0KQotICAgICAgICBh
c3NlcnQoZW1wdHkpOwotICAgICAgZWxzZSBpZiAoIWVtcHR5KQotICAgICAgICBhc3NlcnQoYmlu
Yml0KTsKLSAgICB9Ci0KLSAgICBmb3IgKHAgPSBsYXN0KGIpOyBwICE9IGI7IHAgPSBwLT5iaykg
ewotICAgICAgLyogZWFjaCBjaHVuayBjbGFpbXMgdG8gYmUgZnJlZSAqLwotICAgICAgZG9fY2hl
Y2tfZnJlZV9jaHVuayhwKTsKLSAgICAgIHNpemUgPSBjaHVua3NpemUocCk7Ci0gICAgICB0b3Rh
bCArPSBzaXplOwotICAgICAgaWYgKGkgPj0gMikgewotICAgICAgICAvKiBjaHVuayBiZWxvbmdz
IGluIGJpbiAqLwotICAgICAgICBpZHggPSBiaW5faW5kZXgoc2l6ZSk7Ci0gICAgICAgIGFzc2Vy
dChpZHggPT0gaSk7Ci0gICAgICAgIC8qIGxpc3RzIGFyZSBzb3J0ZWQgKi8KLSAgICAgICAgaWYg
KChDSFVOS19TSVpFX1QpIHNpemUgPj0gKENIVU5LX1NJWkVfVCkoRklSU1RfU09SVEVEX0JJTl9T
SVpFKSkgewotICAgICAgICAgIGFzc2VydChwLT5iayA9PSBiIHx8IAotICAgICAgICAgICAgICAg
ICAoQ0hVTktfU0laRV9UKWNodW5rc2l6ZShwLT5iaykgPj0gCi0gICAgICAgICAgICAgICAgIChD
SFVOS19TSVpFX1QpY2h1bmtzaXplKHApKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyog
Y2h1bmsgaXMgZm9sbG93ZWQgYnkgYSBsZWdhbCBjaGFpbiBvZiBpbnVzZSBjaHVua3MgKi8KLSAg
ICAgIGZvciAocSA9IG5leHRfY2h1bmsocCk7Ci0gICAgICAgICAgIChxICE9IGF2LT50b3AgJiYg
aW51c2UocSkgJiYgCi0gICAgICAgICAgICAgKENIVU5LX1NJWkVfVCkoY2h1bmtzaXplKHEpKSA+
PSBNSU5TSVpFKTsKLSAgICAgICAgICAgcSA9IG5leHRfY2h1bmsocSkpCi0gICAgICAgIGRvX2No
ZWNrX2ludXNlX2NodW5rKHEpOwotICAgIH0KLSAgfQotCi0gIC8qIHRvcCBjaHVuayBpcyBPSyAq
LwotICBjaGVja19jaHVuayhhdi0+dG9wKTsKLQotICAvKiBzYW5pdHkgY2hlY2tzIGZvciBzdGF0
aXN0aWNzICovCi0KLSAgYXNzZXJ0KHRvdGFsIDw9IChDSFVOS19TSVpFX1QpKGF2LT5tYXhfdG90
YWxfbWVtKSk7Ci0gIGFzc2VydChhdi0+bl9tbWFwcyA+PSAwKTsKLSAgYXNzZXJ0KGF2LT5uX21t
YXBzIDw9IGF2LT5tYXhfbl9tbWFwcyk7Ci0KLSAgYXNzZXJ0KChDSFVOS19TSVpFX1QpKGF2LT5z
YnJrZWRfbWVtKSA8PQotICAgICAgICAgKENIVU5LX1NJWkVfVCkoYXYtPm1heF9zYnJrZWRfbWVt
KSk7Ci0KLSAgYXNzZXJ0KChDSFVOS19TSVpFX1QpKGF2LT5tbWFwcGVkX21lbSkgPD0KLSAgICAg
ICAgIChDSFVOS19TSVpFX1QpKGF2LT5tYXhfbW1hcHBlZF9tZW0pKTsKLQotICBhc3NlcnQoKENI
VU5LX1NJWkVfVCkoYXYtPm1heF90b3RhbF9tZW0pID49Ci0gICAgICAgICAoQ0hVTktfU0laRV9U
KShhdi0+bW1hcHBlZF9tZW0pICsgKENIVU5LX1NJWkVfVCkoYXYtPnNicmtlZF9tZW0pKTsKLX0K
LSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tIFJvdXRpbmVzIGRlYWxpbmcgd2l0aCBzeXN0ZW0g
YWxsb2NhdGlvbiAtLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICBzeXNtYWxsb2MgaGFuZGxlcyBt
YWxsb2MgY2FzZXMgcmVxdWlyaW5nIG1vcmUgbWVtb3J5IGZyb20gdGhlIHN5c3RlbS4KLSAgT24g
ZW50cnksIGl0IGlzIGFzc3VtZWQgdGhhdCBhdi0+dG9wIGRvZXMgbm90IGhhdmUgZW5vdWdoCi0g
IHNwYWNlIHRvIHNlcnZpY2UgcmVxdWVzdCBmb3IgbmIgYnl0ZXMsIHRodXMgcmVxdWlyaW5nIHRo
YXQgYXYtPnRvcAotICBiZSBleHRlbmRlZCBvciByZXBsYWNlZC4KLSovCi0KLSNpZiBfX1NURF9D
Ci1zdGF0aWMgVm9pZF90KiBzWVNNQUxMT2MoSU5URVJOQUxfU0laRV9UIG5iLCBtc3RhdGUgYXYp
Ci0jZWxzZQotc3RhdGljIFZvaWRfdCogc1lTTUFMTE9jKG5iLCBhdikgSU5URVJOQUxfU0laRV9U
IG5iOyBtc3RhdGUgYXY7Ci0jZW5kaWYKLXsKLSAgbWNodW5rcHRyICAgICAgIG9sZF90b3A7ICAg
ICAgICAvKiBpbmNvbWluZyB2YWx1ZSBvZiBhdi0+dG9wICovCi0gIElOVEVSTkFMX1NJWkVfVCBv
bGRfc2l6ZTsgICAgICAgLyogaXRzIHNpemUgKi8KLSAgY2hhciogICAgICAgICAgIG9sZF9lbmQ7
ICAgICAgICAvKiBpdHMgZW5kIGFkZHJlc3MgKi8KLQotICBsb25nICAgICAgICAgICAgc2l6ZTsg
ICAgICAgICAgIC8qIGFyZyB0byBmaXJzdCBNT1JFQ09SRSBvciBtbWFwIGNhbGwgKi8KLSAgY2hh
ciogICAgICAgICAgIGJyazsgICAgICAgICAgICAvKiByZXR1cm4gdmFsdWUgZnJvbSBNT1JFQ09S
RSAqLwotCi0gIGxvbmcgICAgICAgICAgICBjb3JyZWN0aW9uOyAgICAgLyogYXJnIHRvIDJuZCBN
T1JFQ09SRSBjYWxsICovCi0gIGNoYXIqICAgICAgICAgICBzbmRfYnJrOyAgICAgICAgLyogMm5k
IHJldHVybiB2YWwgKi8KLQotICBJTlRFUk5BTF9TSVpFX1QgZnJvbnRfbWlzYWxpZ247IC8qIHVu
dXNhYmxlIGJ5dGVzIGF0IGZyb250IG9mIG5ldyBzcGFjZSAqLwotICBJTlRFUk5BTF9TSVpFX1Qg
ZW5kX21pc2FsaWduOyAgIC8qIHBhcnRpYWwgcGFnZSBsZWZ0IGF0IGVuZCBvZiBuZXcgc3BhY2Ug
Ki8KLSAgY2hhciogICAgICAgICAgIGFsaWduZWRfYnJrOyAgICAvKiBhbGlnbmVkIG9mZnNldCBp
bnRvIGJyayAqLwotCi0gIG1jaHVua3B0ciAgICAgICBwOyAgICAgICAgICAgICAgLyogdGhlIGFs
bG9jYXRlZC9yZXR1cm5lZCBjaHVuayAqLwotICBtY2h1bmtwdHIgICAgICAgcmVtYWluZGVyOyAg
ICAgIC8qIHJlbWFpbmRlciBmcm9tIGFsbG9jYXRpb24gKi8KLSAgQ0hVTktfU0laRV9UICAgIHJl
bWFpbmRlcl9zaXplOyAvKiBpdHMgc2l6ZSAqLwotCi0gIENIVU5LX1NJWkVfVCAgICBzdW07ICAg
ICAgICAgICAgLyogZm9yIHVwZGF0aW5nIHN0YXRzICovCi0KLSAgc2l6ZV90ICAgICAgICAgIHBh
Z2VtYXNrICA9IGF2LT5wYWdlc2l6ZSAtIDE7Ci0KLSAgLyoKLSAgICBJZiB0aGVyZSBpcyBzcGFj
ZSBhdmFpbGFibGUgaW4gZmFzdGJpbnMsIGNvbnNvbGlkYXRlIGFuZCByZXRyeQotICAgIG1hbGxv
YyBmcm9tIHNjcmF0Y2ggcmF0aGVyIHRoYW4gZ2V0dGluZyBtZW1vcnkgZnJvbSBzeXN0ZW0uICBU
aGlzCi0gICAgY2FuIG9jY3VyIG9ubHkgaWYgbmIgaXMgaW4gc21hbGxiaW4gcmFuZ2Ugc28gd2Ug
ZGlkbid0IGNvbnNvbGlkYXRlCi0gICAgdXBvbiBlbnRyeSB0byBtYWxsb2MuIEl0IGlzIG11Y2gg
ZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UgaGVyZQotICAgIHRoYW4gaW4gbWFsbG9jIHByb3Bl
ci4KLSAgKi8KLQotICBpZiAoaGF2ZV9mYXN0Y2h1bmtzKGF2KSkgewotICAgIGFzc2VydChpbl9z
bWFsbGJpbl9yYW5nZShuYikpOwotICAgIG1hbGxvY19jb25zb2xpZGF0ZShhdik7Ci0gICAgcmV0
dXJuIG1BTExPYyhuYiAtIE1BTExPQ19BTElHTl9NQVNLKTsKLSAgfQotCi0KLSNpZiBIQVZFX01N
QVAKLQotICAvKgotICAgIElmIGhhdmUgbW1hcCwgYW5kIHRoZSByZXF1ZXN0IHNpemUgbWVldHMg
dGhlIG1tYXAgdGhyZXNob2xkLCBhbmQKLSAgICB0aGUgc3lzdGVtIHN1cHBvcnRzIG1tYXAsIGFu
ZCB0aGVyZSBhcmUgZmV3IGVub3VnaCBjdXJyZW50bHkKLSAgICBhbGxvY2F0ZWQgbW1hcHBlZCBy
ZWdpb25zLCB0cnkgdG8gZGlyZWN0bHkgbWFwIHRoaXMgcmVxdWVzdAotICAgIHJhdGhlciB0aGFu
IGV4cGFuZGluZyB0b3AuCi0gICovCi0KLSAgaWYgKChDSFVOS19TSVpFX1QpKG5iKSA+PSAoQ0hV
TktfU0laRV9UKShhdi0+bW1hcF90aHJlc2hvbGQpICYmCi0gICAgICAoYXYtPm5fbW1hcHMgPCBh
di0+bl9tbWFwc19tYXgpKSB7Ci0KLSAgICBjaGFyKiBtbTsgICAgICAgICAgICAgLyogcmV0dXJu
IHZhbHVlIGZyb20gbW1hcCBjYWxsKi8KLQotICAgIC8qCi0gICAgICBSb3VuZCB1cCBzaXplIHRv
IG5lYXJlc3QgcGFnZS4gIEZvciBtbWFwcGVkIGNodW5rcywgdGhlIG92ZXJoZWFkCi0gICAgICBp
cyBvbmUgU0laRV9TWiB1bml0IGxhcmdlciB0aGFuIGZvciBub3JtYWwgY2h1bmtzLCBiZWNhdXNl
IHRoZXJlCi0gICAgICBpcyBubyBmb2xsb3dpbmcgY2h1bmsgd2hvc2UgcHJldl9zaXplIGZpZWxk
IGNvdWxkIGJlIHVzZWQuCi0gICAgKi8KLSAgICBzaXplID0gKG5iICsgU0laRV9TWiArIE1BTExP
Q19BTElHTl9NQVNLICsgcGFnZW1hc2spICYgfnBhZ2VtYXNrOwotCi0gICAgLyogRG9uJ3QgdHJ5
IGlmIHNpemUgd3JhcHMgYXJvdW5kIDAgKi8KLSAgICBpZiAoKENIVU5LX1NJWkVfVCkoc2l6ZSkg
PiAoQ0hVTktfU0laRV9UKShuYikpIHsKLQotICAgICAgbW0gPSAoY2hhciopKE1NQVAoMCwgc2l6
ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFKSk7Ci0gICAgICAKLSAgICAgIGlm
IChtbSAhPSAoY2hhciopKE1PUkVDT1JFX0ZBSUxVUkUpKSB7Ci0gICAgICAgIAotICAgICAgICAv
KgotICAgICAgICAgIFRoZSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtbWFwcGVkIHJlZ2lv
biBpcyBzdG9yZWQKLSAgICAgICAgICBpbiB0aGUgcHJldl9zaXplIGZpZWxkIG9mIHRoZSBjaHVu
ay4gVGhpcyBhbGxvd3MgdXMgdG8gYWRqdXN0Ci0gICAgICAgICAgcmV0dXJuZWQgc3RhcnQgYWRk
cmVzcyB0byBtZWV0IGFsaWdubWVudCByZXF1aXJlbWVudHMgaGVyZSAKLSAgICAgICAgICBhbmQg
aW4gbWVtYWxpZ24oKSwgYW5kIHN0aWxsIGJlIGFibGUgdG8gY29tcHV0ZSBwcm9wZXIKLSAgICAg
ICAgICBhZGRyZXNzIGFyZ3VtZW50IGZvciBsYXRlciBtdW5tYXAgaW4gZnJlZSgpIGFuZCByZWFs
bG9jKCkuCi0gICAgICAgICovCi0gICAgICAgIAotICAgICAgICBmcm9udF9taXNhbGlnbiA9IChJ
TlRFUk5BTF9TSVpFX1QpY2h1bmsybWVtKG1tKSAmIE1BTExPQ19BTElHTl9NQVNLOwotICAgICAg
ICBpZiAoZnJvbnRfbWlzYWxpZ24gPiAwKSB7Ci0gICAgICAgICAgY29ycmVjdGlvbiA9IE1BTExP
Q19BTElHTk1FTlQgLSBmcm9udF9taXNhbGlnbjsKLSAgICAgICAgICBwID0gKG1jaHVua3B0ciko
bW0gKyBjb3JyZWN0aW9uKTsKLSAgICAgICAgICBwLT5wcmV2X3NpemUgPSBjb3JyZWN0aW9uOwot
ICAgICAgICAgIHNldF9oZWFkKHAsIChzaXplIC0gY29ycmVjdGlvbikgfElTX01NQVBQRUQpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHAgPSAobWNodW5rcHRyKW1tOwot
ICAgICAgICAgIHAtPnByZXZfc2l6ZSA9IDA7Ci0gICAgICAgICAgc2V0X2hlYWQocCwgc2l6ZXxJ
U19NTUFQUEVEKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLyogdXBkYXRlIHN0YXRp
c3RpY3MgKi8KLSAgICAgICAgCi0gICAgICAgIGlmICgrK2F2LT5uX21tYXBzID4gYXYtPm1heF9u
X21tYXBzKSAKLSAgICAgICAgICBhdi0+bWF4X25fbW1hcHMgPSBhdi0+bl9tbWFwczsKLSAgICAg
ICAgCi0gICAgICAgIHN1bSA9IGF2LT5tbWFwcGVkX21lbSArPSBzaXplOwotICAgICAgICBpZiAo
c3VtID4gKENIVU5LX1NJWkVfVCkoYXYtPm1heF9tbWFwcGVkX21lbSkpIAotICAgICAgICAgIGF2
LT5tYXhfbW1hcHBlZF9tZW0gPSBzdW07Ci0gICAgICAgIHN1bSArPSBhdi0+c2Jya2VkX21lbTsK
LSAgICAgICAgaWYgKHN1bSA+IChDSFVOS19TSVpFX1QpKGF2LT5tYXhfdG90YWxfbWVtKSkgCi0g
ICAgICAgICAgYXYtPm1heF90b3RhbF9tZW0gPSBzdW07Ci0KLSAgICAgICAgY2hlY2tfY2h1bmso
cCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gY2h1bmsybWVtKHApOwotICAgICAgfQotICAg
IH0KLSAgfQotI2VuZGlmCi0KLSAgLyogUmVjb3JkIGluY29taW5nIGNvbmZpZ3VyYXRpb24gb2Yg
dG9wICovCi0KLSAgb2xkX3RvcCAgPSBhdi0+dG9wOwotICBvbGRfc2l6ZSA9IGNodW5rc2l6ZShv
bGRfdG9wKTsKLSAgb2xkX2VuZCAgPSAoY2hhciopKGNodW5rX2F0X29mZnNldChvbGRfdG9wLCBv
bGRfc2l6ZSkpOwotCi0gIGJyayA9IHNuZF9icmsgPSAoY2hhciopKE1PUkVDT1JFX0ZBSUxVUkUp
OyAKLQotICAvKiAKLSAgICAgSWYgbm90IHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIHdlIHJlcXVp
cmUgb2xkX3NpemUgdG8gYmUKLSAgICAgYXQgbGVhc3QgTUlOU0laRSBhbmQgdG8gaGF2ZSBwcmV2
X2ludXNlIHNldC4KLSAgKi8KLQotICBhc3NlcnQoKG9sZF90b3AgPT0gaW5pdGlhbF90b3AoYXYp
ICYmIG9sZF9zaXplID09IDApIHx8IAotICAgICAgICAgKChDSFVOS19TSVpFX1QpIChvbGRfc2l6
ZSkgPj0gTUlOU0laRSAmJgotICAgICAgICAgIHByZXZfaW51c2Uob2xkX3RvcCkpKTsKLQotICAv
KiBQcmVjb25kaXRpb246IG5vdCBlbm91Z2ggY3VycmVudCBzcGFjZSB0byBzYXRpc2Z5IG5iIHJl
cXVlc3QgKi8KLSAgYXNzZXJ0KChDSFVOS19TSVpFX1QpKG9sZF9zaXplKSA8IChDSFVOS19TSVpF
X1QpKG5iICsgTUlOU0laRSkpOwotCi0gIC8qIFByZWNvbmRpdGlvbjogYWxsIGZhc3RiaW5zIGFy
ZSBjb25zb2xpZGF0ZWQgKi8KLSAgYXNzZXJ0KCFoYXZlX2Zhc3RjaHVua3MoYXYpKTsKLQotCi0g
IC8qIFJlcXVlc3QgZW5vdWdoIHNwYWNlIGZvciBuYiArIHBhZCArIG92ZXJoZWFkICovCi0KLSAg
c2l6ZSA9IG5iICsgYXYtPnRvcF9wYWQgKyBNSU5TSVpFOwotCi0gIC8qCi0gICAgSWYgY29udGln
dW91cywgd2UgY2FuIHN1YnRyYWN0IG91dCBleGlzdGluZyBzcGFjZSB0aGF0IHdlIGhvcGUgdG8K
LSAgICBjb21iaW5lIHdpdGggbmV3IHNwYWNlLiBXZSBhZGQgaXQgYmFjayBsYXRlciBvbmx5IGlm
Ci0gICAgd2UgZG9uJ3QgYWN0dWFsbHkgZ2V0IGNvbnRpZ3VvdXMgc3BhY2UuCi0gICovCi0KLSAg
aWYgKGNvbnRpZ3VvdXMoYXYpKQotICAgIHNpemUgLT0gb2xkX3NpemU7Ci0KLSAgLyoKLSAgICBS
b3VuZCB0byBhIG11bHRpcGxlIG9mIHBhZ2Ugc2l6ZS4KLSAgICBJZiBNT1JFQ09SRSBpcyBub3Qg
Y29udGlndW91cywgdGhpcyBlbnN1cmVzIHRoYXQgd2Ugb25seSBjYWxsIGl0Ci0gICAgd2l0aCB3
aG9sZS1wYWdlIGFyZ3VtZW50cy4gIEFuZCBpZiBNT1JFQ09SRSBpcyBjb250aWd1b3VzIGFuZAot
ICAgIHRoaXMgaXMgbm90IGZpcnN0IHRpbWUgdGhyb3VnaCwgdGhpcyBwcmVzZXJ2ZXMgcGFnZS1h
bGlnbm1lbnQgb2YKLSAgICBwcmV2aW91cyBjYWxscy4gT3RoZXJ3aXNlLCB3ZSBjb3JyZWN0IHRv
IHBhZ2UtYWxpZ24gYmVsb3cuCi0gICovCi0KLSAgc2l6ZSA9IChzaXplICsgcGFnZW1hc2spICYg
fnBhZ2VtYXNrOwotCi0gIC8qCi0gICAgRG9uJ3QgdHJ5IHRvIGNhbGwgTU9SRUNPUkUgaWYgYXJn
dW1lbnQgaXMgc28gYmlnIGFzIHRvIGFwcGVhcgotICAgIG5lZ2F0aXZlLiBOb3RlIHRoYXQgc2lu
Y2UgbW1hcCB0YWtlcyBzaXplX3QgYXJnLCBpdCBtYXkgc3VjY2VlZAotICAgIGJlbG93IGV2ZW4g
aWYgd2UgY2Fubm90IGNhbGwgTU9SRUNPUkUuCi0gICovCi0KLSAgaWYgKHNpemUgPiAwKSAKLSAg
ICBicmsgPSAoY2hhciopKE1PUkVDT1JFKHNpemUpKTsKLQotICAvKgotICAgIElmIGhhdmUgbW1h
cCwgdHJ5IHVzaW5nIGl0IGFzIGEgYmFja3VwIHdoZW4gTU9SRUNPUkUgZmFpbHMgb3IKLSAgICBj
YW5ub3QgYmUgdXNlZC4gVGhpcyBpcyB3b3J0aCBkb2luZyBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSAi
aG9sZXMiIGluCi0gICAgYWRkcmVzcyBzcGFjZSwgc28gc2JyayBjYW5ub3QgZXh0ZW5kIHRvIGdp
dmUgY29udGlndW91cyBzcGFjZSwgYnV0Ci0gICAgc3BhY2UgaXMgYXZhaWxhYmxlIGVsc2V3aGVy
ZS4gIE5vdGUgdGhhdCB3ZSBpZ25vcmUgbW1hcCBtYXggY291bnQKLSAgICBhbmQgdGhyZXNob2xk
IGxpbWl0cywgc2luY2UgdGhlIHNwYWNlIHdpbGwgbm90IGJlIHVzZWQgYXMgYQotICAgIHNlZ3Jl
Z2F0ZWQgbW1hcCByZWdpb24uCi0gICovCi0KLSNpZiBIQVZFX01NQVAKLSAgaWYgKGJyayA9PSAo
Y2hhciopKE1PUkVDT1JFX0ZBSUxVUkUpKSB7Ci0KLSAgICAvKiBDYW5ub3QgbWVyZ2Ugd2l0aCBv
bGQgdG9wLCBzbyBhZGQgaXRzIHNpemUgYmFjayBpbiAqLwotICAgIGlmIChjb250aWd1b3VzKGF2
KSkKLSAgICAgIHNpemUgPSAoc2l6ZSArIG9sZF9zaXplICsgcGFnZW1hc2spICYgfnBhZ2VtYXNr
OwotCi0gICAgLyogSWYgd2UgYXJlIHJlbHlpbmcgb24gbW1hcCBhcyBiYWNrdXAsIHRoZW4gdXNl
IGxhcmdlciB1bml0cyAqLwotICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA8IChDSFVOS19T
SVpFX1QpKE1NQVBfQVNfTU9SRUNPUkVfU0laRSkpCi0gICAgICBzaXplID0gTU1BUF9BU19NT1JF
Q09SRV9TSVpFOwotCi0gICAgLyogRG9uJ3QgdHJ5IGlmIHNpemUgd3JhcHMgYXJvdW5kIDAgKi8K
LSAgICBpZiAoKENIVU5LX1NJWkVfVCkoc2l6ZSkgPiAoQ0hVTktfU0laRV9UKShuYikpIHsKLQot
ICAgICAgYnJrID0gKGNoYXIqKShNTUFQKDAsIHNpemUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBN
QVBfUFJJVkFURSkpOwotICAgICAgCi0gICAgICBpZiAoYnJrICE9IChjaGFyKikoTU9SRUNPUkVf
RkFJTFVSRSkpIHsKLSAgICAgICAgCi0gICAgICAgIC8qIFdlIGRvIG5vdCBuZWVkLCBhbmQgY2Fu
bm90IHVzZSwgYW5vdGhlciBzYnJrIGNhbGwgdG8gZmluZCBlbmQgKi8KLSAgICAgICAgc25kX2Jy
ayA9IGJyayArIHNpemU7Ci0gICAgICAgIAotICAgICAgICAvKiAKLSAgICAgICAgICAgUmVjb3Jk
IHRoYXQgd2Ugbm8gbG9uZ2VyIGhhdmUgYSBjb250aWd1b3VzIHNicmsgcmVnaW9uLiAKLSAgICAg
ICAgICAgQWZ0ZXIgdGhlIGZpcnN0IHRpbWUgbW1hcCBpcyB1c2VkIGFzIGJhY2t1cCwgd2UgZG8g
bm90Ci0gICAgICAgICAgIGV2ZXIgcmVseSBvbiBjb250aWd1b3VzIHNwYWNlIHNpbmNlIHRoaXMg
Y291bGQgaW5jb3JyZWN0bHkKLSAgICAgICAgICAgYnJpZGdlIHJlZ2lvbnMuCi0gICAgICAgICov
Ci0gICAgICAgIHNldF9ub25jb250aWd1b3VzKGF2KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSNl
bmRpZgotCi0gIGlmIChicmsgIT0gKGNoYXIqKShNT1JFQ09SRV9GQUlMVVJFKSkgewotICAgIGF2
LT5zYnJrZWRfbWVtICs9IHNpemU7Ci0KLSAgICAvKgotICAgICAgSWYgTU9SRUNPUkUgZXh0ZW5k
cyBwcmV2aW91cyBzcGFjZSwgd2UgY2FuIGxpa2V3aXNlIGV4dGVuZCB0b3Agc2l6ZS4KLSAgICAq
LwotICAgIAotICAgIGlmIChicmsgPT0gb2xkX2VuZCAmJiBzbmRfYnJrID09IChjaGFyKikoTU9S
RUNPUkVfRkFJTFVSRSkpIHsKLSAgICAgIHNldF9oZWFkKG9sZF90b3AsIChzaXplICsgb2xkX3Np
emUpIHwgUFJFVl9JTlVTRSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgIE90aGVyd2lzZSwgbWFr
ZSBhZGp1c3RtZW50czoKLSAgICAgIAotICAgICAgKiBJZiB0aGUgZmlyc3QgdGltZSB0aHJvdWdo
IG9yIG5vbmNvbnRpZ3VvdXMsIHdlIG5lZWQgdG8gY2FsbCBzYnJrCi0gICAgICAgIGp1c3QgdG8g
ZmluZCBvdXQgd2hlcmUgdGhlIGVuZCBvZiBtZW1vcnkgbGllcy4KLQotICAgICAgKiBXZSBuZWVk
IHRvIGVuc3VyZSB0aGF0IGFsbCByZXR1cm5lZCBjaHVua3MgZnJvbSBtYWxsb2Mgd2lsbCBtZWV0
Ci0gICAgICAgIE1BTExPQ19BTElHTk1FTlQKLQotICAgICAgKiBJZiB0aGVyZSB3YXMgYW4gaW50
ZXJ2ZW5pbmcgZm9yZWlnbiBzYnJrLCB3ZSBuZWVkIHRvIGFkanVzdCBzYnJrCi0gICAgICAgIHJl
cXVlc3Qgc2l6ZSB0byBhY2NvdW50IGZvciBmYWN0IHRoYXQgd2Ugd2lsbCBub3QgYmUgYWJsZSB0
bwotICAgICAgICBjb21iaW5lIG5ldyBzcGFjZSB3aXRoIGV4aXN0aW5nIHNwYWNlIGluIG9sZF90
b3AuCi0KLSAgICAgICogQWxtb3N0IGFsbCBzeXN0ZW1zIGludGVybmFsbHkgYWxsb2NhdGUgd2hv
bGUgcGFnZXMgYXQgYSB0aW1lLCBpbgotICAgICAgICB3aGljaCBjYXNlIHdlIG1pZ2h0IGFzIHdl
bGwgdXNlIHRoZSB3aG9sZSBsYXN0IHBhZ2Ugb2YgcmVxdWVzdC4KLSAgICAgICAgU28gd2UgYWxs
b2NhdGUgZW5vdWdoIG1vcmUgbWVtb3J5IHRvIGhpdCBhIHBhZ2UgYm91bmRhcnkgbm93LAotICAg
ICAgICB3aGljaCBpbiB0dXJuIGNhdXNlcyBmdXR1cmUgY29udGlndW91cyBjYWxscyB0byBwYWdl
LWFsaWduLgotICAgICovCi0gICAgCi0gICAgZWxzZSB7Ci0gICAgICBmcm9udF9taXNhbGlnbiA9
IDA7Ci0gICAgICBlbmRfbWlzYWxpZ24gPSAwOwotICAgICAgY29ycmVjdGlvbiA9IDA7Ci0gICAg
ICBhbGlnbmVkX2JyayA9IGJyazsKLQotICAgICAgLyoKLSAgICAgICAgSWYgTU9SRUNPUkUgcmV0
dXJucyBhbiBhZGRyZXNzIGxvd2VyIHRoYW4gd2UgaGF2ZSBzZWVuIGJlZm9yZSwKLSAgICAgICAg
d2Uga25vdyBpdCBpc24ndCByZWFsbHkgY29udGlndW91cy4gIFRoaXMgYW5kIHNvbWUgc3Vic2Vx
dWVudAotICAgICAgICBjaGVja3MgaGVscCBjb3BlIHdpdGggbm9uLWNvbmZvcm1pbmcgTU9SRUNP
UkUgZnVuY3Rpb25zIGFuZAotICAgICAgICB0aGUgcHJlc2VuY2Ugb2YgImZvcmVpZ24iIGNhbGxz
IHRvIE1PUkVDT1JFIGZyb20gb3V0c2lkZSBvZgotICAgICAgICBtYWxsb2Mgb3IgYnkgb3RoZXIg
dGhyZWFkcy4gIFdlIGNhbm5vdCBndWFyYW50ZWUgdG8gZGV0ZWN0Ci0gICAgICAgIHRoZXNlIGlu
IGFsbCBjYXNlcywgYnV0IGNvcGUgd2l0aCB0aGUgb25lcyB3ZSBkbyBkZXRlY3QuCi0gICAgICAq
LwotICAgICAgaWYgKGNvbnRpZ3VvdXMoYXYpICYmIG9sZF9zaXplICE9IDAgJiYgYnJrIDwgb2xk
X2VuZCkgewotICAgICAgICBzZXRfbm9uY29udGlndW91cyhhdik7Ci0gICAgICB9Ci0gICAgICAK
LSAgICAgIC8qIGhhbmRsZSBjb250aWd1b3VzIGNhc2VzICovCi0gICAgICBpZiAoY29udGlndW91
cyhhdikpIHsgCi0KLSAgICAgICAgLyogCi0gICAgICAgICAgIFdlIGNhbiB0b2xlcmF0ZSBmb3J3
YXJkIG5vbi1jb250aWd1aXRpZXMgaGVyZSAodXN1YWxseSBkdWUKLSAgICAgICAgICAgdG8gZm9y
ZWlnbiBjYWxscykgYnV0IHRyZWF0IHRoZW0gYXMgcGFydCBvZiBvdXIgc3BhY2UgZm9yCi0gICAg
ICAgICAgIHN0YXRzIHJlcG9ydGluZy4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKG9sZF9zaXpl
ICE9IDApIAotICAgICAgICAgIGF2LT5zYnJrZWRfbWVtICs9IGJyayAtIG9sZF9lbmQ7Ci0gICAg
ICAgIAotICAgICAgICAvKiBHdWFyYW50ZWUgYWxpZ25tZW50IG9mIGZpcnN0IG5ldyBjaHVuayBt
YWRlIGZyb20gdGhpcyBzcGFjZSAqLwotCi0gICAgICAgIGZyb250X21pc2FsaWduID0gKElOVEVS
TkFMX1NJWkVfVCljaHVuazJtZW0oYnJrKSAmIE1BTExPQ19BTElHTl9NQVNLOwotICAgICAgICBp
ZiAoZnJvbnRfbWlzYWxpZ24gPiAwKSB7Ci0KLSAgICAgICAgICAvKgotICAgICAgICAgICAgU2tp
cCBvdmVyIHNvbWUgYnl0ZXMgdG8gYXJyaXZlIGF0IGFuIGFsaWduZWQgcG9zaXRpb24uCi0gICAg
ICAgICAgICBXZSBkb24ndCBuZWVkIHRvIHNwZWNpYWxseSBtYXJrIHRoZXNlIHdhc3RlZCBmcm9u
dCBieXRlcy4KLSAgICAgICAgICAgIFRoZXkgd2lsbCBuZXZlciBiZSBhY2Nlc3NlZCBhbnl3YXkg
YmVjYXVzZQotICAgICAgICAgICAgcHJldl9pbnVzZSBvZiBhdi0+dG9wIChhbmQgYW55IGNodW5r
IGNyZWF0ZWQgZnJvbSBpdHMgc3RhcnQpCi0gICAgICAgICAgICBpcyBhbHdheXMgdHJ1ZSBhZnRl
ciBpbml0aWFsaXphdGlvbi4KLSAgICAgICAgICAqLwotCi0gICAgICAgICAgY29ycmVjdGlvbiA9
IE1BTExPQ19BTElHTk1FTlQgLSBmcm9udF9taXNhbGlnbjsKLSAgICAgICAgICBhbGlnbmVkX2Jy
ayArPSBjb3JyZWN0aW9uOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvKgotICAgICAg
ICAgIElmIHRoaXMgaXNuJ3QgYWRqYWNlbnQgdG8gZXhpc3Rpbmcgc3BhY2UsIHRoZW4gd2Ugd2ls
bCBub3QKLSAgICAgICAgICBiZSBhYmxlIHRvIG1lcmdlIHdpdGggb2xkX3RvcCBzcGFjZSwgc28g
bXVzdCBhZGQgdG8gMm5kIHJlcXVlc3QuCi0gICAgICAgICovCi0gICAgICAgIAotICAgICAgICBj
b3JyZWN0aW9uICs9IG9sZF9zaXplOwotICAgICAgICAKLSAgICAgICAgLyogRXh0ZW5kIHRoZSBl
bmQgYWRkcmVzcyB0byBoaXQgYSBwYWdlIGJvdW5kYXJ5ICovCi0gICAgICAgIGVuZF9taXNhbGln
biA9IChJTlRFUk5BTF9TSVpFX1QpKGJyayArIHNpemUgKyBjb3JyZWN0aW9uKTsKLSAgICAgICAg
Y29ycmVjdGlvbiArPSAoKGVuZF9taXNhbGlnbiArIHBhZ2VtYXNrKSAmIH5wYWdlbWFzaykgLSBl
bmRfbWlzYWxpZ247Ci0gICAgICAgIAotICAgICAgICBhc3NlcnQoY29ycmVjdGlvbiA+PSAwKTsK
LSAgICAgICAgc25kX2JyayA9IChjaGFyKikoTU9SRUNPUkUoY29ycmVjdGlvbikpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKHNuZF9icmsgPT0gKGNoYXIqKShNT1JFQ09SRV9GQUlMVVJFKSkgewot
ICAgICAgICAgIC8qCi0gICAgICAgICAgICBJZiBjYW4ndCBhbGxvY2F0ZSBjb3JyZWN0aW9uLCB0
cnkgdG8gYXQgbGVhc3QgZmluZCBvdXQgY3VycmVudAotICAgICAgICAgICAgYnJrLiAgSXQgbWln
aHQgYmUgZW5vdWdoIHRvIHByb2NlZWQgd2l0aG91dCBmYWlsaW5nLgotICAgICAgICAgICovCi0g
ICAgICAgICAgY29ycmVjdGlvbiA9IDA7Ci0gICAgICAgICAgc25kX2JyayA9IChjaGFyKikoTU9S
RUNPUkUoMCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNuZF9icmsgPCBicmspIHsK
LSAgICAgICAgICAvKgotICAgICAgICAgICAgSWYgdGhlIHNlY29uZCBjYWxsIGdpdmVzIG5vbmNv
bnRpZ3VvdXMgc3BhY2UgZXZlbiB0aG91Z2gKLSAgICAgICAgICAgIGl0IHNheXMgaXQgd29uJ3Qs
IHRoZSBvbmx5IGNvdXJzZSBvZiBhY3Rpb24gaXMgdG8gaWdub3JlCi0gICAgICAgICAgICByZXN1
bHRzIG9mIHNlY29uZCBjYWxsLCBhbmQgY29uc2VydmF0aXZlbHkgZXN0aW1hdGUgd2hlcmUKLSAg
ICAgICAgICAgIHRoZSBmaXJzdCBjYWxsIGxlZnQgdXMuIEFsc28gc2V0IG5vbmNvbnRpZ3VvdXMs
IHNvIHRoaXMKLSAgICAgICAgICAgIHdvbid0IGhhcHBlbiBhZ2FpbiwgbGVhdmluZyBhdCBtb3N0
IG9uZSBob2xlLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBjaGVj
ayBpcyBpbnRyaW5zaWNhbGx5IGluY29tcGxldGUuICBCZWNhdXNlCi0gICAgICAgICAgICBNT1JF
Q09SRSBpcyBhbGxvd2VkIHRvIGdpdmUgbW9yZSBzcGFjZSB0aGFuIHdlIGFzayBmb3IsCi0gICAg
ICAgICAgICB0aGVyZSBpcyBubyByZWxpYWJsZSB3YXkgdG8gZGV0ZWN0IGEgbm9uY29udGlndWl0
eQotICAgICAgICAgICAgcHJvZHVjaW5nIGEgZm9yd2FyZCBnYXAgZm9yIHRoZSBzZWNvbmQgY2Fs
bC4KLSAgICAgICAgICAqLwotICAgICAgICAgIHNuZF9icmsgPSBicmsgKyBzaXplOwotICAgICAg
ICAgIGNvcnJlY3Rpb24gPSAwOwotICAgICAgICAgIHNldF9ub25jb250aWd1b3VzKGF2KTsKLSAg
ICAgICAgfQotCi0gICAgICB9Ci0gICAgICAKLSAgICAgIC8qIGhhbmRsZSBub24tY29udGlndW91
cyBjYXNlcyAqLwotICAgICAgZWxzZSB7IAotICAgICAgICAvKiBNT1JFQ09SRS9tbWFwIG11c3Qg
Y29ycmVjdGx5IGFsaWduICovCi0gICAgICAgIGFzc2VydChhbGlnbmVkX09LKGNodW5rMm1lbShi
cmspKSk7Ci0gICAgICAgIAotICAgICAgICAvKiBGaW5kIG91dCBjdXJyZW50IGVuZCBvZiBtZW1v
cnkgKi8KLSAgICAgICAgaWYgKHNuZF9icmsgPT0gKGNoYXIqKShNT1JFQ09SRV9GQUlMVVJFKSkg
ewotICAgICAgICAgIHNuZF9icmsgPSAoY2hhciopKE1PUkVDT1JFKDApKTsKLSAgICAgICAgICBh
di0+c2Jya2VkX21lbSArPSBzbmRfYnJrIC0gYnJrIC0gc2l6ZTsKLSAgICAgICAgfQotICAgICAg
fQotICAgICAgCi0gICAgICAvKiBBZGp1c3QgdG9wIGJhc2VkIG9uIHJlc3VsdHMgb2Ygc2Vjb25k
IHNicmsgKi8KLSAgICAgIGlmIChzbmRfYnJrICE9IChjaGFyKikoTU9SRUNPUkVfRkFJTFVSRSkp
IHsKLSAgICAgICAgYXYtPnRvcCA9IChtY2h1bmtwdHIpYWxpZ25lZF9icms7Ci0gICAgICAgIHNl
dF9oZWFkKGF2LT50b3AsIChzbmRfYnJrIC0gYWxpZ25lZF9icmsgKyBjb3JyZWN0aW9uKSB8IFBS
RVZfSU5VU0UpOwotICAgICAgICBhdi0+c2Jya2VkX21lbSArPSBjb3JyZWN0aW9uOwotICAgICAK
LSAgICAgICAgLyoKLSAgICAgICAgICBJZiBub3QgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCwgd2Ug
ZWl0aGVyIGhhdmUgYQotICAgICAgICAgIGdhcCBkdWUgdG8gZm9yZWlnbiBzYnJrIG9yIGEgbm9u
LWNvbnRpZ3VvdXMgcmVnaW9uLiAgSW5zZXJ0IGEKLSAgICAgICAgICBkb3VibGUgZmVuY2Vwb3N0
IGF0IG9sZF90b3AgdG8gcHJldmVudCBjb25zb2xpZGF0aW9uIHdpdGggc3BhY2UKLSAgICAgICAg
ICB3ZSBkb24ndCBvd24uIFRoZXNlIGZlbmNlcG9zdHMgYXJlIGFydGlmaWNpYWwgY2h1bmtzIHRo
YXQgYXJlCi0gICAgICAgICAgbWFya2VkIGFzIGludXNlIGFuZCBhcmUgaW4gYW55IGNhc2UgdG9v
IHNtYWxsIHRvIHVzZS4gIFdlIG5lZWQKLSAgICAgICAgICB0d28gdG8gbWFrZSBzaXplcyBhbmQg
YWxpZ25tZW50cyB3b3JrIG91dC4KLSAgICAgICAgKi8KLSAgIAotICAgICAgICBpZiAob2xkX3Np
emUgIT0gMCkgewotICAgICAgICAgIC8qIAotICAgICAgICAgICAgIFNocmluayBvbGRfdG9wIHRv
IGluc2VydCBmZW5jZXBvc3RzLCBrZWVwaW5nIHNpemUgYQotICAgICAgICAgICAgIG11bHRpcGxl
IG9mIE1BTExPQ19BTElHTk1FTlQuIFdlIGtub3cgdGhlcmUgaXMgYXQgbGVhc3QKLSAgICAgICAg
ICAgICBlbm91Z2ggc3BhY2UgaW4gb2xkX3RvcCB0byBkbyB0aGlzLgotICAgICAgICAgICovCi0g
ICAgICAgICAgb2xkX3NpemUgPSAob2xkX3NpemUgLSAzKlNJWkVfU1opICYgfk1BTExPQ19BTElH
Tl9NQVNLOwotICAgICAgICAgIHNldF9oZWFkKG9sZF90b3AsIG9sZF9zaXplIHwgUFJFVl9JTlVT
RSk7Ci0gICAgICAgICAgCi0gICAgICAgICAgLyoKLSAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUg
Zm9sbG93aW5nIGFzc2lnbm1lbnRzIGNvbXBsZXRlbHkgb3ZlcndyaXRlCi0gICAgICAgICAgICBv
bGRfdG9wIHdoZW4gb2xkX3NpemUgd2FzIHByZXZpb3VzbHkgTUlOU0laRS4gIFRoaXMgaXMKLSAg
ICAgICAgICAgIGludGVudGlvbmFsLiBXZSBuZWVkIHRoZSBmZW5jZXBvc3QsIGV2ZW4gaWYgb2xk
X3RvcCBvdGhlcndpc2UgZ2V0cwotICAgICAgICAgICAgbG9zdC4KLSAgICAgICAgICAqLwotICAg
ICAgICAgIGNodW5rX2F0X29mZnNldChvbGRfdG9wLCBvbGRfc2l6ZSAgICAgICAgICApLT5zaXpl
ID0KLSAgICAgICAgICAgIFNJWkVfU1p8UFJFVl9JTlVTRTsKLQotICAgICAgICAgIGNodW5rX2F0
X29mZnNldChvbGRfdG9wLCBvbGRfc2l6ZSArIFNJWkVfU1opLT5zaXplID0KLSAgICAgICAgICAg
IFNJWkVfU1p8UFJFVl9JTlVTRTsKLQotICAgICAgICAgIC8qIAotICAgICAgICAgICAgIElmIHBv
c3NpYmxlLCByZWxlYXNlIHRoZSByZXN0LCBzdXBwcmVzc2luZyB0cmltbWluZy4KLSAgICAgICAg
ICAqLwotICAgICAgICAgIGlmIChvbGRfc2l6ZSA+PSBNSU5TSVpFKSB7Ci0gICAgICAgICAgICBJ
TlRFUk5BTF9TSVpFX1QgdHQgPSBhdi0+dHJpbV90aHJlc2hvbGQ7Ci0gICAgICAgICAgICBhdi0+
dHJpbV90aHJlc2hvbGQgPSAoSU5URVJOQUxfU0laRV9UKSgtMSk7Ci0gICAgICAgICAgICBmUkVl
KGNodW5rMm1lbShvbGRfdG9wKSk7Ci0gICAgICAgICAgICBhdi0+dHJpbV90aHJlc2hvbGQgPSB0
dDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLyog
VXBkYXRlIHN0YXRpc3RpY3MgKi8KLSAgICBzdW0gPSBhdi0+c2Jya2VkX21lbTsKLSAgICBpZiAo
c3VtID4gKENIVU5LX1NJWkVfVCkoYXYtPm1heF9zYnJrZWRfbWVtKSkKLSAgICAgIGF2LT5tYXhf
c2Jya2VkX21lbSA9IHN1bTsKLSAgICAKLSAgICBzdW0gKz0gYXYtPm1tYXBwZWRfbWVtOwotICAg
IGlmIChzdW0gPiAoQ0hVTktfU0laRV9UKShhdi0+bWF4X3RvdGFsX21lbSkpCi0gICAgICBhdi0+
bWF4X3RvdGFsX21lbSA9IHN1bTsKLQotICAgIGNoZWNrX21hbGxvY19zdGF0ZSgpOwotICAgIAot
ICAgIC8qIGZpbmFsbHksIGRvIHRoZSBhbGxvY2F0aW9uICovCi0KLSAgICBwID0gYXYtPnRvcDsK
LSAgICBzaXplID0gY2h1bmtzaXplKHApOwotICAgIAotICAgIC8qIGNoZWNrIHRoYXQgb25lIG9m
IHRoZSBhYm92ZSBhbGxvY2F0aW9uIHBhdGhzIHN1Y2NlZWRlZCAqLwotICAgIGlmICgoQ0hVTktf
U0laRV9UKShzaXplKSA+PSAoQ0hVTktfU0laRV9UKShuYiArIE1JTlNJWkUpKSB7Ci0gICAgICBy
ZW1haW5kZXJfc2l6ZSA9IHNpemUgLSBuYjsKLSAgICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29m
ZnNldChwLCBuYik7Ci0gICAgICBhdi0+dG9wID0gcmVtYWluZGVyOwotICAgICAgc2V0X2hlYWQo
cCwgbmIgfCBQUkVWX0lOVVNFKTsKLSAgICAgIHNldF9oZWFkKHJlbWFpbmRlciwgcmVtYWluZGVy
X3NpemUgfCBQUkVWX0lOVVNFKTsKLSAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKHAsIG5iKTsK
LSAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7Ci0gICAgfQotCi0gIH0KLQotICAvKiBjYXRjaCBh
bGwgZmFpbHVyZSBwYXRocyAqLwotICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047Ci0gIHJldHVybiAw
OwotfQotCi0KLQotCi0vKgotICBzWVNUUkltIGlzIGFuIGludmVyc2Ugb2Ygc29ydHMgdG8gc1lT
TUFMTE9jLiAgSXQgZ2l2ZXMgbWVtb3J5IGJhY2sKLSAgdG8gdGhlIHN5c3RlbSAodmlhIG5lZ2F0
aXZlIGFyZ3VtZW50cyB0byBzYnJrKSBpZiB0aGVyZSBpcyB1bnVzZWQKLSAgbWVtb3J5IGF0IHRo
ZSBgaGlnaCcgZW5kIG9mIHRoZSBtYWxsb2MgcG9vbC4gSXQgaXMgY2FsbGVkCi0gIGF1dG9tYXRp
Y2FsbHkgYnkgZnJlZSgpIHdoZW4gdG9wIHNwYWNlIGV4Y2VlZHMgdGhlIHRyaW0KLSAgdGhyZXNo
b2xkLiBJdCBpcyBhbHNvIGNhbGxlZCBieSB0aGUgcHVibGljIG1hbGxvY190cmltIHJvdXRpbmUu
ICBJdAotICByZXR1cm5zIDEgaWYgaXQgYWN0dWFsbHkgcmVsZWFzZWQgYW55IG1lbW9yeSwgZWxz
ZSAwLgotKi8KLQotI2lmbmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQotCi0jaWYgX19TVERfQwot
c3RhdGljIGludCBzWVNUUkltKHNpemVfdCBwYWQsIG1zdGF0ZSBhdikKLSNlbHNlCi1zdGF0aWMg
aW50IHNZU1RSSW0ocGFkLCBhdikgc2l6ZV90IHBhZDsgbXN0YXRlIGF2OwotI2VuZGlmCi17Ci0g
IGxvbmcgIHRvcF9zaXplOyAgICAgICAgLyogQW1vdW50IG9mIHRvcC1tb3N0IG1lbW9yeSAqLwot
ICBsb25nICBleHRyYTsgICAgICAgICAgIC8qIEFtb3VudCB0byByZWxlYXNlICovCi0gIGxvbmcg
IHJlbGVhc2VkOyAgICAgICAgLyogQW1vdW50IGFjdHVhbGx5IHJlbGVhc2VkICovCi0gIGNoYXIq
IGN1cnJlbnRfYnJrOyAgICAgLyogYWRkcmVzcyByZXR1cm5lZCBieSBwcmUtY2hlY2sgc2JyayBj
YWxsICovCi0gIGNoYXIqIG5ld19icms7ICAgICAgICAgLyogYWRkcmVzcyByZXR1cm5lZCBieSBw
b3N0LWNoZWNrIHNicmsgY2FsbCAqLwotICBzaXplX3QgcGFnZXN6OwotCi0gIHBhZ2VzeiA9IGF2
LT5wYWdlc2l6ZTsKLSAgdG9wX3NpemUgPSBjaHVua3NpemUoYXYtPnRvcCk7Ci0gIAotICAvKiBS
ZWxlYXNlIGluIHBhZ2VzaXplIHVuaXRzLCBrZWVwaW5nIGF0IGxlYXN0IG9uZSBwYWdlICovCi0g
IGV4dHJhID0gKCh0b3Bfc2l6ZSAtIHBhZCAtIE1JTlNJWkUgKyAocGFnZXN6LTEpKSAvIHBhZ2Vz
eiAtIDEpICogcGFnZXN6OwotICAKLSAgaWYgKGV4dHJhID4gMCkgewotICAgIAotICAgIC8qCi0g
ICAgICBPbmx5IHByb2NlZWQgaWYgZW5kIG9mIG1lbW9yeSBpcyB3aGVyZSB3ZSBsYXN0IHNldCBp
dC4KLSAgICAgIFRoaXMgYXZvaWRzIHByb2JsZW1zIGlmIHRoZXJlIHdlcmUgZm9yZWlnbiBzYnJr
IGNhbGxzLgotICAgICovCi0gICAgY3VycmVudF9icmsgPSAoY2hhciopKE1PUkVDT1JFKDApKTsK
LSAgICBpZiAoY3VycmVudF9icmsgPT0gKGNoYXIqKShhdi0+dG9wKSArIHRvcF9zaXplKSB7Ci0g
ICAgICAKLSAgICAgIC8qCi0gICAgICAgIEF0dGVtcHQgdG8gcmVsZWFzZSBtZW1vcnkuIFdlIGln
bm9yZSBNT1JFQ09SRSByZXR1cm4gdmFsdWUsCi0gICAgICAgIGFuZCBpbnN0ZWFkIGNhbGwgYWdh
aW4gdG8gZmluZCBvdXQgd2hlcmUgbmV3IGVuZCBvZiBtZW1vcnkgaXMuCi0gICAgICAgIFRoaXMg
YXZvaWRzIHByb2JsZW1zIGlmIGZpcnN0IGNhbGwgcmVsZWFzZXMgbGVzcyB0aGFuIHdlIGFza2Vk
LAotICAgICAgICBvZiBpZiBmYWlsdXJlIHNvbWVob3cgYWx0ZXJlZCBicmsgdmFsdWUuIChXZSBj
b3VsZCBzdGlsbAotICAgICAgICBlbmNvdW50ZXIgcHJvYmxlbXMgaWYgaXQgYWx0ZXJlZCBicmsg
aW4gc29tZSB2ZXJ5IGJhZCB3YXksCi0gICAgICAgIGJ1dCB0aGUgb25seSB0aGluZyB3ZSBjYW4g
ZG8gaXMgYWRqdXN0IGFueXdheSwgd2hpY2ggd2lsbCBjYXVzZQotICAgICAgICBzb21lIGRvd25z
dHJlYW0gZmFpbHVyZS4pCi0gICAgICAqLwotICAgICAgCi0gICAgICBNT1JFQ09SRSgtZXh0cmEp
OwotICAgICAgbmV3X2JyayA9IChjaGFyKikoTU9SRUNPUkUoMCkpOwotICAgICAgCi0gICAgICBp
ZiAobmV3X2JyayAhPSAoY2hhciopTU9SRUNPUkVfRkFJTFVSRSkgewotICAgICAgICByZWxlYXNl
ZCA9IChsb25nKShjdXJyZW50X2JyayAtIG5ld19icmspOwotICAgICAgICAKLSAgICAgICAgaWYg
KHJlbGVhc2VkICE9IDApIHsKLSAgICAgICAgICAvKiBTdWNjZXNzLiBBZGp1c3QgdG9wLiAqLwot
ICAgICAgICAgIGF2LT5zYnJrZWRfbWVtIC09IHJlbGVhc2VkOwotICAgICAgICAgIHNldF9oZWFk
KGF2LT50b3AsICh0b3Bfc2l6ZSAtIHJlbGVhc2VkKSB8IFBSRVZfSU5VU0UpOwotICAgICAgICAg
IGNoZWNrX21hbGxvY19zdGF0ZSgpOwotICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiAwOwotfQotCi0jZW5kaWYKLQotLyoKLSAgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLSovCi0KLQotI2lmIF9fU1REX0MKLVZvaWRfdCogbUFMTE9jKHNpemVfdCBieXRl
cykKLSNlbHNlCi0gIFZvaWRfdCogbUFMTE9jKGJ5dGVzKSBzaXplX3QgYnl0ZXM7Ci0jZW5kaWYK
LXsKLSAgbXN0YXRlIGF2ID0gZ2V0X21hbGxvY19zdGF0ZSgpOwotCi0gIElOVEVSTkFMX1NJWkVf
VCBuYjsgICAgICAgICAgICAgICAvKiBub3JtYWxpemVkIHJlcXVlc3Qgc2l6ZSAqLwotICB1bnNp
Z25lZCBpbnQgICAgaWR4OyAgICAgICAgICAgICAgLyogYXNzb2NpYXRlZCBiaW4gaW5kZXggKi8K
LSAgbWJpbnB0ciAgICAgICAgIGJpbjsgICAgICAgICAgICAgIC8qIGFzc29jaWF0ZWQgYmluICov
Ci0gIG1mYXN0YmlucHRyKiAgICBmYjsgICAgICAgICAgICAgICAvKiBhc3NvY2lhdGVkIGZhc3Ri
aW4gKi8KLQotICBtY2h1bmtwdHIgICAgICAgdmljdGltOyAgICAgICAgICAgLyogaW5zcGVjdGVk
L3NlbGVjdGVkIGNodW5rICovCi0gIElOVEVSTkFMX1NJWkVfVCBzaXplOyAgICAgICAgICAgICAv
KiBpdHMgc2l6ZSAqLwotICBpbnQgICAgICAgICAgICAgdmljdGltX2luZGV4OyAgICAgLyogaXRz
IGJpbiBpbmRleCAqLwotCi0gIG1jaHVua3B0ciAgICAgICByZW1haW5kZXI7ICAgICAgICAvKiBy
ZW1haW5kZXIgZnJvbSBhIHNwbGl0ICovCi0gIENIVU5LX1NJWkVfVCAgICByZW1haW5kZXJfc2l6
ZTsgICAvKiBpdHMgc2l6ZSAqLwotCi0gIHVuc2lnbmVkIGludCAgICBibG9jazsgICAgICAgICAg
ICAvKiBiaXQgbWFwIHRyYXZlcnNlciAqLwotICB1bnNpZ25lZCBpbnQgICAgYml0OyAgICAgICAg
ICAgICAgLyogYml0IG1hcCB0cmF2ZXJzZXIgKi8KLSAgdW5zaWduZWQgaW50ICAgIG1hcDsgICAg
ICAgICAgICAgIC8qIGN1cnJlbnQgd29yZCBvZiBiaW5tYXAgKi8KLQotICBtY2h1bmtwdHIgICAg
ICAgZndkOyAgICAgICAgICAgICAgLyogbWlzYyB0ZW1wIGZvciBsaW5raW5nICovCi0gIG1jaHVu
a3B0ciAgICAgICBiY2s7ICAgICAgICAgICAgICAvKiBtaXNjIHRlbXAgZm9yIGxpbmtpbmcgKi8K
LQotICAvKgotICAgIENvbnZlcnQgcmVxdWVzdCBzaXplIHRvIGludGVybmFsIGZvcm0gYnkgYWRk
aW5nIFNJWkVfU1ogYnl0ZXMKLSAgICBvdmVyaGVhZCBwbHVzIHBvc3NpYmx5IG1vcmUgdG8gb2J0
YWluIG5lY2Vzc2FyeSBhbGlnbm1lbnQgYW5kL29yCi0gICAgdG8gb2J0YWluIGEgc2l6ZSBvZiBh
dCBsZWFzdCBNSU5TSVpFLCB0aGUgc21hbGxlc3QgYWxsb2NhdGFibGUKLSAgICBzaXplLiBBbHNv
LCBjaGVja2VkX3JlcXVlc3Qyc2l6ZSB0cmFwcyAocmV0dXJuaW5nIDApIHJlcXVlc3Qgc2l6ZXMK
LSAgICB0aGF0IGFyZSBzbyBsYXJnZSB0aGF0IHRoZXkgd3JhcCBhcm91bmQgemVybyB3aGVuIHBh
ZGRlZCBhbmQKLSAgICBhbGlnbmVkLgotICAqLwotCi0gIGNoZWNrZWRfcmVxdWVzdDJzaXplKGJ5
dGVzLCBuYik7Ci0KLSAgLyoKLSAgICBCeXBhc3Mgc2VhcmNoIGlmIG5vIGZyZWVzIHlldAotICAg
Ki8KLSAgaWYgKCFoYXZlX2FueWNodW5rcyhhdikpIHsKLSAgICBpZiAoYXYtPm1heF9mYXN0ID09
IDApIC8qIGluaXRpYWxpemF0aW9uIGNoZWNrICovCi0gICAgICBtYWxsb2NfY29uc29saWRhdGUo
YXYpOwotICAgIGdvdG8gdXNlX3RvcDsKLSAgfQotCi0gIC8qCi0gICAgSWYgdGhlIHNpemUgcXVh
bGlmaWVzIGFzIGEgZmFzdGJpbiwgZmlyc3QgY2hlY2sgY29ycmVzcG9uZGluZyBiaW4uCi0gICov
Ci0KLSAgaWYgKChDSFVOS19TSVpFX1QpKG5iKSA8PSAoQ0hVTktfU0laRV9UKShhdi0+bWF4X2Zh
c3QpKSB7IAotICAgIGZiID0gJihhdi0+ZmFzdGJpbnNbKGZhc3RiaW5faW5kZXgobmIpKV0pOwot
ICAgIGlmICggKHZpY3RpbSA9ICpmYikgIT0gMCkgewotICAgICAgKmZiID0gdmljdGltLT5mZDsK
LSAgICAgIGNoZWNrX3JlbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICByZXR1cm4g
Y2h1bmsybWVtKHZpY3RpbSk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICBJZiBhIHNtYWxsIHJl
cXVlc3QsIGNoZWNrIHJlZ3VsYXIgYmluLiAgU2luY2UgdGhlc2UgInNtYWxsYmlucyIKLSAgICBo
b2xkIG9uZSBzaXplIGVhY2gsIG5vIHNlYXJjaGluZyB3aXRoaW4gYmlucyBpcyBuZWNlc3Nhcnku
Ci0gICAgKEZvciBhIGxhcmdlIHJlcXVlc3QsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB1bnNvcnRl
ZCBjaHVua3MgYXJlCi0gICAgcHJvY2Vzc2VkIHRvIGZpbmQgYmVzdCBmaXQuIEJ1dCBmb3Igc21h
bGwgb25lcywgZml0cyBhcmUgZXhhY3QKLSAgICBhbnl3YXksIHNvIHdlIGNhbiBjaGVjayBub3cs
IHdoaWNoIGlzIGZhc3Rlci4pCi0gICovCi0KLSAgaWYgKGluX3NtYWxsYmluX3JhbmdlKG5iKSkg
ewotICAgIGlkeCA9IHNtYWxsYmluX2luZGV4KG5iKTsKLSAgICBiaW4gPSBiaW5fYXQoYXYsaWR4
KTsKLQotICAgIGlmICggKHZpY3RpbSA9IGxhc3QoYmluKSkgIT0gYmluKSB7Ci0gICAgICBiY2sg
PSB2aWN0aW0tPmJrOwotICAgICAgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQodmljdGltLCBuYik7
Ci0gICAgICBiaW4tPmJrID0gYmNrOwotICAgICAgYmNrLT5mZCA9IGJpbjsKLSAgICAgIAotICAg
ICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICByZXR1cm4gY2h1bmsy
bWVtKHZpY3RpbSk7Ci0gICAgfQotICB9Ci0KLSAgLyogCi0gICAgIElmIHRoaXMgaXMgYSBsYXJn
ZSByZXF1ZXN0LCBjb25zb2xpZGF0ZSBmYXN0YmlucyBiZWZvcmUgY29udGludWluZy4KLSAgICAg
V2hpbGUgaXQgbWlnaHQgbG9vayBleGNlc3NpdmUgdG8ga2lsbCBhbGwgZmFzdGJpbnMgYmVmb3Jl
Ci0gICAgIGV2ZW4gc2VlaW5nIGlmIHRoZXJlIGlzIHNwYWNlIGF2YWlsYWJsZSwgdGhpcyBhdm9p
ZHMKLSAgICAgZnJhZ21lbnRhdGlvbiBwcm9ibGVtcyBub3JtYWxseSBhc3NvY2lhdGVkIHdpdGgg
ZmFzdGJpbnMuCi0gICAgIEFsc28sIGluIHByYWN0aWNlLCBwcm9ncmFtcyB0ZW5kIHRvIGhhdmUg
cnVucyBvZiBlaXRoZXIgc21hbGwgb3IKLSAgICAgbGFyZ2UgcmVxdWVzdHMsIGJ1dCBsZXNzIG9m
dGVuIG1peHR1cmVzLCBzbyBjb25zb2xpZGF0aW9uIGlzIG5vdCAKLSAgICAgaW52b2tlZCBhbGwg
dGhhdCBvZnRlbiBpbiBtb3N0IHByb2dyYW1zLiBBbmQgdGhlIHByb2dyYW1zIHRoYXQKLSAgICAg
aXQgaXMgY2FsbGVkIGZyZXF1ZW50bHkgaW4gb3RoZXJ3aXNlIHRlbmQgdG8gZnJhZ21lbnQuCi0g
ICovCi0KLSAgZWxzZSB7Ci0gICAgaWR4ID0gbGFyZ2ViaW5faW5kZXgobmIpOwotICAgIGlmICho
YXZlX2Zhc3RjaHVua3MoYXYpKSAKLSAgICAgIG1hbGxvY19jb25zb2xpZGF0ZShhdik7Ci0gIH0K
LQotICAvKgotICAgIFByb2Nlc3MgcmVjZW50bHkgZnJlZWQgb3IgcmVtYWluZGVyZWQgY2h1bmtz
LCB0YWtpbmcgb25lIG9ubHkgaWYKLSAgICBpdCBpcyBleGFjdCBmaXQsIG9yLCBpZiB0aGlzIGEg
c21hbGwgcmVxdWVzdCwgdGhlIGNodW5rIGlzIHJlbWFpbmRlciBmcm9tCi0gICAgdGhlIG1vc3Qg
cmVjZW50IG5vbi1leGFjdCBmaXQuICBQbGFjZSBvdGhlciB0cmF2ZXJzZWQgY2h1bmtzIGluCi0g
ICAgYmlucy4gIE5vdGUgdGhhdCB0aGlzIHN0ZXAgaXMgdGhlIG9ubHkgcGxhY2UgaW4gYW55IHJv
dXRpbmUgd2hlcmUKLSAgICBjaHVua3MgYXJlIHBsYWNlZCBpbiBiaW5zLgotICAqLwotICAgIAot
ICB3aGlsZSAoICh2aWN0aW0gPSB1bnNvcnRlZF9jaHVua3MoYXYpLT5iaykgIT0gdW5zb3J0ZWRf
Y2h1bmtzKGF2KSkgewotICAgIGJjayA9IHZpY3RpbS0+Yms7Ci0gICAgc2l6ZSA9IGNodW5rc2l6
ZSh2aWN0aW0pOwotICAgIAotICAgIC8qIAotICAgICAgIElmIGEgc21hbGwgcmVxdWVzdCwgdHJ5
IHRvIHVzZSBsYXN0IHJlbWFpbmRlciBpZiBpdCBpcyB0aGUKLSAgICAgICBvbmx5IGNodW5rIGlu
IHVuc29ydGVkIGJpbi4gIFRoaXMgaGVscHMgcHJvbW90ZSBsb2NhbGl0eSBmb3IKLSAgICAgICBy
dW5zIG9mIGNvbnNlY3V0aXZlIHNtYWxsIHJlcXVlc3RzLiBUaGlzIGlzIHRoZSBvbmx5Ci0gICAg
ICAgZXhjZXB0aW9uIHRvIGJlc3QtZml0LCBhbmQgYXBwbGllcyBvbmx5IHdoZW4gdGhlcmUgaXMK
LSAgICAgICBubyBleGFjdCBmaXQgZm9yIGEgc21hbGwgY2h1bmsuCi0gICAgKi8KLSAgICAKLSAg
ICBpZiAoaW5fc21hbGxiaW5fcmFuZ2UobmIpICYmIAotICAgICAgICBiY2sgPT0gdW5zb3J0ZWRf
Y2h1bmtzKGF2KSAmJgotICAgICAgICB2aWN0aW0gPT0gYXYtPmxhc3RfcmVtYWluZGVyICYmCi0g
ICAgICAgIChDSFVOS19TSVpFX1QpKHNpemUpID4gKENIVU5LX1NJWkVfVCkobmIgKyBNSU5TSVpF
KSkgewotICAgICAgCi0gICAgICAvKiBzcGxpdCBhbmQgcmVhdHRhY2ggcmVtYWluZGVyICovCi0g
ICAgICByZW1haW5kZXJfc2l6ZSA9IHNpemUgLSBuYjsKLSAgICAgIHJlbWFpbmRlciA9IGNodW5r
X2F0X29mZnNldCh2aWN0aW0sIG5iKTsKLSAgICAgIHVuc29ydGVkX2NodW5rcyhhdiktPmJrID0g
dW5zb3J0ZWRfY2h1bmtzKGF2KS0+ZmQgPSByZW1haW5kZXI7Ci0gICAgICBhdi0+bGFzdF9yZW1h
aW5kZXIgPSByZW1haW5kZXI7IAotICAgICAgcmVtYWluZGVyLT5iayA9IHJlbWFpbmRlci0+ZmQg
PSB1bnNvcnRlZF9jaHVua3MoYXYpOwotICAgICAgCi0gICAgICBzZXRfaGVhZCh2aWN0aW0sIG5i
IHwgUFJFVl9JTlVTRSk7Ci0gICAgICBzZXRfaGVhZChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXpl
IHwgUFJFVl9JTlVTRSk7Ci0gICAgICBzZXRfZm9vdChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXpl
KTsKLSAgICAgIAotICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAg
ICByZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7Ci0gICAgfQotICAgIAotICAgIC8qIHJlbW92ZSBm
cm9tIHVuc29ydGVkIGxpc3QgKi8KLSAgICB1bnNvcnRlZF9jaHVua3MoYXYpLT5iayA9IGJjazsK
LSAgICBiY2stPmZkID0gdW5zb3J0ZWRfY2h1bmtzKGF2KTsKLSAgICAKLSAgICAvKiBUYWtlIG5v
dyBpbnN0ZWFkIG9mIGJpbm5pbmcgaWYgZXhhY3QgZml0ICovCi0gICAgCi0gICAgaWYgKHNpemUg
PT0gbmIpIHsKLSAgICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0KHZpY3RpbSwgc2l6ZSk7Ci0g
ICAgICBjaGVja19tYWxsb2NlZF9jaHVuayh2aWN0aW0sIG5iKTsKLSAgICAgIHJldHVybiBjaHVu
azJtZW0odmljdGltKTsKLSAgICB9Ci0gICAgCi0gICAgLyogcGxhY2UgY2h1bmsgaW4gYmluICov
Ci0gICAgCi0gICAgaWYgKGluX3NtYWxsYmluX3JhbmdlKHNpemUpKSB7Ci0gICAgICB2aWN0aW1f
aW5kZXggPSBzbWFsbGJpbl9pbmRleChzaXplKTsKLSAgICAgIGJjayA9IGJpbl9hdChhdiwgdmlj
dGltX2luZGV4KTsKLSAgICAgIGZ3ZCA9IGJjay0+ZmQ7Ci0gICAgfQotICAgIGVsc2UgewotICAg
ICAgdmljdGltX2luZGV4ID0gbGFyZ2ViaW5faW5kZXgoc2l6ZSk7Ci0gICAgICBiY2sgPSBiaW5f
YXQoYXYsIHZpY3RpbV9pbmRleCk7Ci0gICAgICBmd2QgPSBiY2stPmZkOwotICAgICAgCi0gICAg
ICBpZiAoZndkICE9IGJjaykgewotICAgICAgICAvKiBpZiBzbWFsbGVyIHRoYW4gc21hbGxlc3Qs
IHBsYWNlIGZpcnN0ICovCi0gICAgICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA8IChDSFVO
S19TSVpFX1QpKGJjay0+YmstPnNpemUpKSB7Ci0gICAgICAgICAgZndkID0gYmNrOwotICAgICAg
ICAgIGJjayA9IGJjay0+Yms7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoKENIVU5LX1NJ
WkVfVCkoc2l6ZSkgPj0gCi0gICAgICAgICAgICAgICAgIChDSFVOS19TSVpFX1QpKEZJUlNUX1NP
UlRFRF9CSU5fU0laRSkpIHsKLSAgICAgICAgICAKLSAgICAgICAgICAvKiBtYWludGFpbiBsYXJn
ZSBiaW5zIGluIHNvcnRlZCBvcmRlciAqLwotICAgICAgICAgIHNpemUgfD0gUFJFVl9JTlVTRTsg
LyogT3Igd2l0aCBpbnVzZSBiaXQgdG8gc3BlZWQgY29tcGFyaXNvbnMgKi8KLSAgICAgICAgICB3
aGlsZSAoKENIVU5LX1NJWkVfVCkoc2l6ZSkgPCAoQ0hVTktfU0laRV9UKShmd2QtPnNpemUpKSAK
LSAgICAgICAgICAgIGZ3ZCA9IGZ3ZC0+ZmQ7Ci0gICAgICAgICAgYmNrID0gZndkLT5iazsKLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAgIAotICAgIG1hcmtfYmluKGF2LCB2aWN0aW1f
aW5kZXgpOwotICAgIHZpY3RpbS0+YmsgPSBiY2s7Ci0gICAgdmljdGltLT5mZCA9IGZ3ZDsKLSAg
ICBmd2QtPmJrID0gdmljdGltOwotICAgIGJjay0+ZmQgPSB2aWN0aW07Ci0gIH0KLSAgCi0gIC8q
Ci0gICAgSWYgYSBsYXJnZSByZXF1ZXN0LCBzY2FuIHRocm91Z2ggdGhlIGNodW5rcyBvZiBjdXJy
ZW50IGJpbiB0bwotICAgIGZpbmQgb25lIHRoYXQgZml0cy4gIChUaGlzIHdpbGwgYmUgdGhlIHNt
YWxsZXN0IHRoYXQgZml0cyB1bmxlc3MKLSAgICBGSVJTVF9TT1JURURfQklOX1NJWkUgaGFzIGJl
ZW4gY2hhbmdlZCBmcm9tIGRlZmF1bHQuKSAgVGhpcyBpcwotICAgIHRoZSBvbmx5IHN0ZXAgd2hl
cmUgYW4gdW5ib3VuZGVkIG51bWJlciBvZiBjaHVua3MgbWlnaHQgYmUKLSAgICBzY2FubmVkIHdp
dGhvdXQgZG9pbmcgYW55dGhpbmcgdXNlZnVsIHdpdGggdGhlbS4gSG93ZXZlciB0aGUKLSAgICBs
aXN0cyB0ZW5kIHRvIGJlIHNob3J0LgotICAqLwotICAKLSAgaWYgKCFpbl9zbWFsbGJpbl9yYW5n
ZShuYikpIHsKLSAgICBiaW4gPSBiaW5fYXQoYXYsIGlkeCk7Ci0gICAgCi0gICAgZm9yICh2aWN0
aW0gPSBsYXN0KGJpbik7IHZpY3RpbSAhPSBiaW47IHZpY3RpbSA9IHZpY3RpbS0+YmspIHsKLSAg
ICAgIHNpemUgPSBjaHVua3NpemUodmljdGltKTsKLSAgICAgIAotICAgICAgaWYgKChDSFVOS19T
SVpFX1QpKHNpemUpID49IChDSFVOS19TSVpFX1QpKG5iKSkgewotICAgICAgICByZW1haW5kZXJf
c2l6ZSA9IHNpemUgLSBuYjsKLSAgICAgICAgdW5saW5rKHZpY3RpbSwgYmNrLCBmd2QpOwotICAg
ICAgICAKLSAgICAgICAgLyogRXhoYXVzdCAqLwotICAgICAgICBpZiAocmVtYWluZGVyX3NpemUg
PCBNSU5TSVpFKSAgewotICAgICAgICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0KHZpY3RpbSwg
c2l6ZSk7Ci0gICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAg
ICAgICAgcmV0dXJuIGNodW5rMm1lbSh2aWN0aW0pOwotICAgICAgICB9Ci0gICAgICAgIC8qIFNw
bGl0ICovCi0gICAgICAgIGVsc2UgewotICAgICAgICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29m
ZnNldCh2aWN0aW0sIG5iKTsKLSAgICAgICAgICB1bnNvcnRlZF9jaHVua3MoYXYpLT5iayA9IHVu
c29ydGVkX2NodW5rcyhhdiktPmZkID0gcmVtYWluZGVyOwotICAgICAgICAgIHJlbWFpbmRlci0+
YmsgPSByZW1haW5kZXItPmZkID0gdW5zb3J0ZWRfY2h1bmtzKGF2KTsKLSAgICAgICAgICBzZXRf
aGVhZCh2aWN0aW0sIG5iIHwgUFJFVl9JTlVTRSk7Ci0gICAgICAgICAgc2V0X2hlYWQocmVtYWlu
ZGVyLCByZW1haW5kZXJfc2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgICAgIHNldF9mb290KHJl
bWFpbmRlciwgcmVtYWluZGVyX3NpemUpOwotICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5r
KHZpY3RpbSwgbmIpOwotICAgICAgICAgIHJldHVybiBjaHVuazJtZW0odmljdGltKTsKLSAgICAg
ICAgfSAKLSAgICAgIH0KLSAgICB9ICAgIAotICB9Ci0KLSAgLyoKLSAgICBTZWFyY2ggZm9yIGEg
Y2h1bmsgYnkgc2Nhbm5pbmcgYmlucywgc3RhcnRpbmcgd2l0aCBuZXh0IGxhcmdlc3QKLSAgICBi
aW4uIFRoaXMgc2VhcmNoIGlzIHN0cmljdGx5IGJ5IGJlc3QtZml0OyBpLmUuLCB0aGUgc21hbGxl
c3QKLSAgICAod2l0aCB0aWVzIGdvaW5nIHRvIGFwcHJveGltYXRlbHkgdGhlIGxlYXN0IHJlY2Vu
dGx5IHVzZWQpIGNodW5rCi0gICAgdGhhdCBmaXRzIGlzIHNlbGVjdGVkLgotICAgIAotICAgIFRo
ZSBiaXRtYXAgYXZvaWRzIG5lZWRpbmcgdG8gY2hlY2sgdGhhdCBtb3N0IGJsb2NrcyBhcmUgbm9u
ZW1wdHkuCi0gICovCi0gICAgCi0gICsraWR4OwotICBiaW4gPSBiaW5fYXQoYXYsaWR4KTsKLSAg
YmxvY2sgPSBpZHgyYmxvY2soaWR4KTsKLSAgbWFwID0gYXYtPmJpbm1hcFtibG9ja107Ci0gIGJp
dCA9IGlkeDJiaXQoaWR4KTsKLSAgCi0gIGZvciAoOzspIHsKLSAgICAKLSAgICAvKiBTa2lwIHJl
c3Qgb2YgYmxvY2sgaWYgdGhlcmUgYXJlIG5vIG1vcmUgc2V0IGJpdHMgaW4gdGhpcyBibG9jay4g
ICovCi0gICAgaWYgKGJpdCA+IG1hcCB8fCBiaXQgPT0gMCkgewotICAgICAgZG8gewotICAgICAg
ICBpZiAoKytibG9jayA+PSBCSU5NQVBTSVpFKSAgLyogb3V0IG9mIGJpbnMgKi8KLSAgICAgICAg
ICBnb3RvIHVzZV90b3A7Ci0gICAgICB9IHdoaWxlICggKG1hcCA9IGF2LT5iaW5tYXBbYmxvY2td
KSA9PSAwKTsKLSAgICAgIAotICAgICAgYmluID0gYmluX2F0KGF2LCAoYmxvY2sgPDwgQklOTUFQ
U0hJRlQpKTsKLSAgICAgIGJpdCA9IDE7Ci0gICAgfQotICAgIAotICAgIC8qIEFkdmFuY2UgdG8g
YmluIHdpdGggc2V0IGJpdC4gVGhlcmUgbXVzdCBiZSBvbmUuICovCi0gICAgd2hpbGUgKChiaXQg
JiBtYXApID09IDApIHsKLSAgICAgIGJpbiA9IG5leHRfYmluKGJpbik7Ci0gICAgICBiaXQgPDw9
IDE7Ci0gICAgICBhc3NlcnQoYml0ICE9IDApOwotICAgIH0KLSAgICAKLSAgICAvKiBJbnNwZWN0
IHRoZSBiaW4uIEl0IGlzIGxpa2VseSB0byBiZSBub24tZW1wdHkgKi8KLSAgICB2aWN0aW0gPSBs
YXN0KGJpbik7Ci0gICAgCi0gICAgLyogIElmIGEgZmFsc2UgYWxhcm0gKGVtcHR5IGJpbiksIGNs
ZWFyIHRoZSBiaXQuICovCi0gICAgaWYgKHZpY3RpbSA9PSBiaW4pIHsKLSAgICAgIGF2LT5iaW5t
YXBbYmxvY2tdID0gbWFwICY9IH5iaXQ7IC8qIFdyaXRlIHRocm91Z2ggKi8KLSAgICAgIGJpbiA9
IG5leHRfYmluKGJpbik7Ci0gICAgICBiaXQgPDw9IDE7Ci0gICAgfQotICAgIAotICAgIGVsc2Ug
ewotICAgICAgc2l6ZSA9IGNodW5rc2l6ZSh2aWN0aW0pOwotICAgICAgCi0gICAgICAvKiAgV2Ug
a25vdyB0aGUgZmlyc3QgY2h1bmsgaW4gdGhpcyBiaW4gaXMgYmlnIGVub3VnaCB0byB1c2UuICov
Ci0gICAgICBhc3NlcnQoKENIVU5LX1NJWkVfVCkoc2l6ZSkgPj0gKENIVU5LX1NJWkVfVCkobmIp
KTsKLSAgICAgIAotICAgICAgcmVtYWluZGVyX3NpemUgPSBzaXplIC0gbmI7Ci0gICAgICAKLSAg
ICAgIC8qIHVubGluayAqLwotICAgICAgYmNrID0gdmljdGltLT5iazsKLSAgICAgIGJpbi0+Ymsg
PSBiY2s7Ci0gICAgICBiY2stPmZkID0gYmluOwotICAgICAgCi0gICAgICAvKiBFeGhhdXN0ICov
Ci0gICAgICBpZiAocmVtYWluZGVyX3NpemUgPCBNSU5TSVpFKSB7Ci0gICAgICAgIHNldF9pbnVz
ZV9iaXRfYXRfb2Zmc2V0KHZpY3RpbSwgc2l6ZSk7Ci0gICAgICAgIGNoZWNrX21hbGxvY2VkX2No
dW5rKHZpY3RpbSwgbmIpOwotICAgICAgICByZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7Ci0gICAg
ICB9Ci0gICAgICAKLSAgICAgIC8qIFNwbGl0ICovCi0gICAgICBlbHNlIHsKLSAgICAgICAgcmVt
YWluZGVyID0gY2h1bmtfYXRfb2Zmc2V0KHZpY3RpbSwgbmIpOwotICAgICAgICAKLSAgICAgICAg
dW5zb3J0ZWRfY2h1bmtzKGF2KS0+YmsgPSB1bnNvcnRlZF9jaHVua3MoYXYpLT5mZCA9IHJlbWFp
bmRlcjsKLSAgICAgICAgcmVtYWluZGVyLT5iayA9IHJlbWFpbmRlci0+ZmQgPSB1bnNvcnRlZF9j
aHVua3MoYXYpOwotICAgICAgICAvKiBhZHZlcnRpc2UgYXMgbGFzdCByZW1haW5kZXIgKi8KLSAg
ICAgICAgaWYgKGluX3NtYWxsYmluX3JhbmdlKG5iKSkgCi0gICAgICAgICAgYXYtPmxhc3RfcmVt
YWluZGVyID0gcmVtYWluZGVyOyAKLSAgICAgICAgCi0gICAgICAgIHNldF9oZWFkKHZpY3RpbSwg
bmIgfCBQUkVWX0lOVVNFKTsKLSAgICAgICAgc2V0X2hlYWQocmVtYWluZGVyLCByZW1haW5kZXJf
c2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgICBzZXRfZm9vdChyZW1haW5kZXIsIHJlbWFpbmRl
cl9zaXplKTsKLSAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAg
ICAgIHJldHVybiBjaHVuazJtZW0odmljdGltKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICB1
c2VfdG9wOiAgICAKLSAgLyoKLSAgICBJZiBsYXJnZSBlbm91Z2gsIHNwbGl0IG9mZiB0aGUgY2h1
bmsgYm9yZGVyaW5nIHRoZSBlbmQgb2YgbWVtb3J5Ci0gICAgKGhlbGQgaW4gYXYtPnRvcCkuIE5v
dGUgdGhhdCB0aGlzIGlzIGluIGFjY29yZCB3aXRoIHRoZSBiZXN0LWZpdAotICAgIHNlYXJjaCBy
dWxlLiAgSW4gZWZmZWN0LCBhdi0+dG9wIGlzIHRyZWF0ZWQgYXMgbGFyZ2VyIChhbmQgdGh1cwot
ICAgIGxlc3Mgd2VsbCBmaXR0aW5nKSB0aGFuIGFueSBvdGhlciBhdmFpbGFibGUgY2h1bmsgc2lu
Y2UgaXQgY2FuCi0gICAgYmUgZXh0ZW5kZWQgdG8gYmUgYXMgbGFyZ2UgYXMgbmVjZXNzYXJ5ICh1
cCB0byBzeXN0ZW0KLSAgICBsaW1pdGF0aW9ucykuCi0gICAgCi0gICAgV2UgcmVxdWlyZSB0aGF0
IGF2LT50b3AgYWx3YXlzIGV4aXN0cyAoaS5lLiwgaGFzIHNpemUgPj0KLSAgICBNSU5TSVpFKSBh
ZnRlciBpbml0aWFsaXphdGlvbiwgc28gaWYgaXQgd291bGQgb3RoZXJ3aXNlIGJlCi0gICAgZXho
dWFzdGVkIGJ5IGN1cnJlbnQgcmVxdWVzdCwgaXQgaXMgcmVwbGVuaXNoZWQuIChUaGUgbWFpbgot
ICAgIHJlYXNvbiBmb3IgZW5zdXJpbmcgaXQgZXhpc3RzIGlzIHRoYXQgd2UgbWF5IG5lZWQgTUlO
U0laRSBzcGFjZQotICAgIHRvIHB1dCBpbiBmZW5jZXBvc3RzIGluIHN5c21hbGxvYy4pCi0gICov
Ci0gIAotICB2aWN0aW0gPSBhdi0+dG9wOwotICBzaXplID0gY2h1bmtzaXplKHZpY3RpbSk7Ci0g
IAotICBpZiAoKENIVU5LX1NJWkVfVCkoc2l6ZSkgPj0gKENIVU5LX1NJWkVfVCkobmIgKyBNSU5T
SVpFKSkgewotICAgIHJlbWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOwotICAgIHJlbWFpbmRlciA9
IGNodW5rX2F0X29mZnNldCh2aWN0aW0sIG5iKTsKLSAgICBhdi0+dG9wID0gcmVtYWluZGVyOwot
ICAgIHNldF9oZWFkKHZpY3RpbSwgbmIgfCBQUkVWX0lOVVNFKTsKLSAgICBzZXRfaGVhZChyZW1h
aW5kZXIsIHJlbWFpbmRlcl9zaXplIHwgUFJFVl9JTlVTRSk7Ci0gICAgCi0gICAgY2hlY2tfbWFs
bG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgcmV0dXJuIGNodW5rMm1lbSh2aWN0aW0pOwot
ICB9Ci0gIAotICAvKiAKLSAgICAgSWYgbm8gc3BhY2UgaW4gdG9wLCByZWxheSB0byBoYW5kbGUg
c3lzdGVtLWRlcGVuZGVudCBjYXNlcyAKLSAgKi8KLSAgcmV0dXJuIHNZU01BTExPYyhuYiwgYXYp
OyAgICAKLX0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZyZWUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWYgX19TVERfQwotdm9pZCBmUkVl
KFZvaWRfdCogbWVtKQotI2Vsc2UKLXZvaWQgZlJFZShtZW0pIFZvaWRfdCogbWVtOwotI2VuZGlm
Ci17Ci0gIG1zdGF0ZSBhdiA9IGdldF9tYWxsb2Nfc3RhdGUoKTsKLQotICBtY2h1bmtwdHIgICAg
ICAgcDsgICAgICAgICAgIC8qIGNodW5rIGNvcnJlc3BvbmRpbmcgdG8gbWVtICovCi0gIElOVEVS
TkFMX1NJWkVfVCBzaXplOyAgICAgICAgLyogaXRzIHNpemUgKi8KLSAgbWZhc3RiaW5wdHIqICAg
IGZiOyAgICAgICAgICAvKiBhc3NvY2lhdGVkIGZhc3RiaW4gKi8KLSAgbWNodW5rcHRyICAgICAg
IG5leHRjaHVuazsgICAvKiBuZXh0IGNvbnRpZ3VvdXMgY2h1bmsgKi8KLSAgSU5URVJOQUxfU0la
RV9UIG5leHRzaXplOyAgICAvKiBpdHMgc2l6ZSAqLwotICBpbnQgICAgICAgICAgICAgbmV4dGlu
dXNlOyAgIC8qIHRydWUgaWYgbmV4dGNodW5rIGlzIHVzZWQgKi8KLSAgSU5URVJOQUxfU0laRV9U
IHByZXZzaXplOyAgICAvKiBzaXplIG9mIHByZXZpb3VzIGNvbnRpZ3VvdXMgY2h1bmsgKi8KLSAg
bWNodW5rcHRyICAgICAgIGJjazsgICAgICAgICAvKiBtaXNjIHRlbXAgZm9yIGxpbmtpbmcgKi8K
LSAgbWNodW5rcHRyICAgICAgIGZ3ZDsgICAgICAgICAvKiBtaXNjIHRlbXAgZm9yIGxpbmtpbmcg
Ki8KLQotICAvKiBmcmVlKDApIGhhcyBubyBlZmZlY3QgKi8KLSAgaWYgKG1lbSAhPSAwKSB7Ci0g
ICAgcCA9IG1lbTJjaHVuayhtZW0pOwotICAgIHNpemUgPSBjaHVua3NpemUocCk7Ci0KLSAgICBj
aGVja19pbnVzZV9jaHVuayhwKTsKLQotICAgIC8qCi0gICAgICBJZiBlbGlnaWJsZSwgcGxhY2Ug
Y2h1bmsgb24gYSBmYXN0YmluIHNvIGl0IGNhbiBiZSBmb3VuZAotICAgICAgYW5kIHVzZWQgcXVp
Y2tseSBpbiBtYWxsb2MuCi0gICAgKi8KLQotICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA8
PSAoQ0hVTktfU0laRV9UKShhdi0+bWF4X2Zhc3QpCi0KLSNpZiBUUklNX0ZBU1RCSU5TCi0gICAg
ICAgIC8qIAotICAgICAgICAgICBJZiBUUklNX0ZBU1RCSU5TIHNldCwgZG9uJ3QgcGxhY2UgY2h1
bmtzCi0gICAgICAgICAgIGJvcmRlcmluZyB0b3AgaW50byBmYXN0YmlucwotICAgICAgICAqLwot
ICAgICAgICAmJiAoY2h1bmtfYXRfb2Zmc2V0KHAsIHNpemUpICE9IGF2LT50b3ApCi0jZW5kaWYK
LSAgICAgICAgKSB7Ci0KLSAgICAgIHNldF9mYXN0Y2h1bmtzKGF2KTsKLSAgICAgIGZiID0gJihh
di0+ZmFzdGJpbnNbZmFzdGJpbl9pbmRleChzaXplKV0pOwotICAgICAgcC0+ZmQgPSAqZmI7Ci0g
ICAgICAqZmIgPSBwOwotICAgIH0KLQotICAgIC8qCi0gICAgICAgQ29uc29saWRhdGUgb3RoZXIg
bm9uLW1tYXBwZWQgY2h1bmtzIGFzIHRoZXkgYXJyaXZlLgotICAgICovCi0KLSAgICBlbHNlIGlm
ICghY2h1bmtfaXNfbW1hcHBlZChwKSkgewotICAgICAgc2V0X2FueWNodW5rcyhhdik7Ci0KLSAg
ICAgIG5leHRjaHVuayA9IGNodW5rX2F0X29mZnNldChwLCBzaXplKTsKLSAgICAgIG5leHRzaXpl
ID0gY2h1bmtzaXplKG5leHRjaHVuayk7Ci0KLSAgICAgIC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJk
ICovCi0gICAgICBpZiAoIXByZXZfaW51c2UocCkpIHsKLSAgICAgICAgcHJldnNpemUgPSBwLT5w
cmV2X3NpemU7Ci0gICAgICAgIHNpemUgKz0gcHJldnNpemU7Ci0gICAgICAgIHAgPSBjaHVua19h
dF9vZmZzZXQocCwgLSgobG9uZykgcHJldnNpemUpKTsKLSAgICAgICAgdW5saW5rKHAsIGJjaywg
ZndkKTsKLSAgICAgIH0KLQotICAgICAgaWYgKG5leHRjaHVuayAhPSBhdi0+dG9wKSB7Ci0gICAg
ICAgIC8qIGdldCBhbmQgY2xlYXIgaW51c2UgYml0ICovCi0gICAgICAgIG5leHRpbnVzZSA9IGlu
dXNlX2JpdF9hdF9vZmZzZXQobmV4dGNodW5rLCBuZXh0c2l6ZSk7Ci0gICAgICAgIHNldF9oZWFk
KG5leHRjaHVuaywgbmV4dHNpemUpOwotCi0gICAgICAgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQg
Ki8KLSAgICAgICAgaWYgKCFuZXh0aW51c2UpIHsKLSAgICAgICAgICB1bmxpbmsobmV4dGNodW5r
LCBiY2ssIGZ3ZCk7Ci0gICAgICAgICAgc2l6ZSArPSBuZXh0c2l6ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8qCi0gICAgICAgICAgUGxhY2UgdGhlIGNodW5rIGluIHVuc29ydGVkIGNodW5rIGxp
c3QuIENodW5rcyBhcmUKLSAgICAgICAgICBub3QgcGxhY2VkIGludG8gcmVndWxhciBiaW5zIHVu
dGlsIGFmdGVyIHRoZXkgaGF2ZQotICAgICAgICAgIGJlZW4gZ2l2ZW4gb25lIGNoYW5jZSB0byBi
ZSB1c2VkIGluIG1hbGxvYy4KLSAgICAgICAgKi8KLQotICAgICAgICBiY2sgPSB1bnNvcnRlZF9j
aHVua3MoYXYpOwotICAgICAgICBmd2QgPSBiY2stPmZkOwotICAgICAgICBwLT5iayA9IGJjazsK
LSAgICAgICAgcC0+ZmQgPSBmd2Q7Ci0gICAgICAgIGJjay0+ZmQgPSBwOwotICAgICAgICBmd2Qt
PmJrID0gcDsKLQotICAgICAgICBzZXRfaGVhZChwLCBzaXplIHwgUFJFVl9JTlVTRSk7Ci0gICAg
ICAgIHNldF9mb290KHAsIHNpemUpOwotICAgICAgICAKLSAgICAgICAgY2hlY2tfZnJlZV9jaHVu
ayhwKTsKLSAgICAgIH0KLQotICAgICAgLyoKLSAgICAgICAgIElmIHRoZSBjaHVuayBib3JkZXJz
IHRoZSBjdXJyZW50IGhpZ2ggZW5kIG9mIG1lbW9yeSwKLSAgICAgICAgIGNvbnNvbGlkYXRlIGlu
dG8gdG9wCi0gICAgICAqLwotCi0gICAgICBlbHNlIHsKLSAgICAgICAgc2l6ZSArPSBuZXh0c2l6
ZTsKLSAgICAgICAgc2V0X2hlYWQocCwgc2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgICBhdi0+
dG9wID0gcDsKLSAgICAgICAgY2hlY2tfY2h1bmsocCk7Ci0gICAgICB9Ci0KLSAgICAgIC8qCi0g
ICAgICAgIElmIGZyZWVpbmcgYSBsYXJnZSBzcGFjZSwgY29uc29saWRhdGUgcG9zc2libHktc3Vy
cm91bmRpbmcKLSAgICAgICAgY2h1bmtzLiBUaGVuLCBpZiB0aGUgdG90YWwgdW51c2VkIHRvcG1v
c3QgbWVtb3J5IGV4Y2VlZHMgdHJpbQotICAgICAgICB0aHJlc2hvbGQsIGFzayBtYWxsb2NfdHJp
bSB0byByZWR1Y2UgdG9wLgotCi0gICAgICAgIFVubGVzcyBtYXhfZmFzdCBpcyAwLCB3ZSBkb24n
dCBrbm93IGlmIHRoZXJlIGFyZSBmYXN0YmlucwotICAgICAgICBib3JkZXJpbmcgdG9wLCBzbyB3
ZSBjYW5ub3QgdGVsbCBmb3Igc3VyZSB3aGV0aGVyIHRocmVzaG9sZAotICAgICAgICBoYXMgYmVl
biByZWFjaGVkIHVubGVzcyBmYXN0YmlucyBhcmUgY29uc29saWRhdGVkLiAgQnV0IHdlCi0gICAg
ICAgIGRvbid0IHdhbnQgdG8gY29uc29saWRhdGUgb24gZWFjaCBmcmVlLiAgQXMgYSBjb21wcm9t
aXNlLAotICAgICAgICBjb25zb2xpZGF0aW9uIGlzIHBlcmZvcm1lZCBpZiBGQVNUQklOX0NPTlNP
TElEQVRJT05fVEhSRVNIT0xECi0gICAgICAgIGlzIHJlYWNoZWQuCi0gICAgICAqLwotCi0gICAg
ICBpZiAoKENIVU5LX1NJWkVfVCkoc2l6ZSkgPj0gRkFTVEJJTl9DT05TT0xJREFUSU9OX1RIUkVT
SE9MRCkgeyAKLSAgICAgICAgaWYgKGhhdmVfZmFzdGNodW5rcyhhdikpIAotICAgICAgICAgIG1h
bGxvY19jb25zb2xpZGF0ZShhdik7Ci0KLSNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0gICAg
ICAgIAotICAgICAgICBpZiAoKENIVU5LX1NJWkVfVCkoY2h1bmtzaXplKGF2LT50b3ApKSA+PSAK
LSAgICAgICAgICAgIChDSFVOS19TSVpFX1QpKGF2LT50cmltX3RocmVzaG9sZCkpCi0gICAgICAg
ICAgc1lTVFJJbShhdi0+dG9wX3BhZCwgYXYpOwotI2VuZGlmCi0gICAgICB9Ci0KLSAgICB9Ci0g
ICAgLyoKLSAgICAgIElmIHRoZSBjaHVuayB3YXMgYWxsb2NhdGVkIHZpYSBtbWFwLCByZWxlYXNl
IHZpYSBtdW5tYXAoKQotICAgICAgTm90ZSB0aGF0IGlmIEhBVkVfTU1BUCBpcyBmYWxzZSBidXQg
Y2h1bmtfaXNfbW1hcHBlZCBpcwotICAgICAgdHJ1ZSwgdGhlbiB1c2VyIG11c3QgaGF2ZSBvdmVy
d3JpdHRlbiBtZW1vcnkuIFRoZXJlJ3Mgbm90aGluZwotICAgICAgd2UgY2FuIGRvIHRvIGNhdGNo
IHRoaXMgZXJyb3IgdW5sZXNzIERFQlVHIGlzIHNldCwgaW4gd2hpY2ggY2FzZQotICAgICAgY2hl
Y2tfaW51c2VfY2h1bmsgKGFib3ZlKSB3aWxsIGhhdmUgdHJpZ2dlcmVkIGVycm9yLgotICAgICov
Ci0KLSAgICBlbHNlIHsKLSNpZiBIQVZFX01NQVAKLSAgICAgIGludCByZXQ7Ci0gICAgICBJTlRF
Uk5BTF9TSVpFX1Qgb2Zmc2V0ID0gcC0+cHJldl9zaXplOwotICAgICAgYXYtPm5fbW1hcHMtLTsK
LSAgICAgIGF2LT5tbWFwcGVkX21lbSAtPSAoc2l6ZSArIG9mZnNldCk7Ci0gICAgICByZXQgPSBt
dW5tYXAoKGNoYXIqKXAgLSBvZmZzZXQsIHNpemUgKyBvZmZzZXQpOwotICAgICAgLyogbXVubWFw
IHJldHVybnMgbm9uLXplcm8gb24gZmFpbHVyZSAqLwotICAgICAgYXNzZXJ0KHJldCA9PSAwKTsK
LSNlbmRpZgotICAgIH0KLSAgfQotfQotCi0vKgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IG1hbGxvY19jb25zb2xpZGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgbWFsbG9j
X2NvbnNvbGlkYXRlIGlzIGEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBmcmVlKCkgdGhhdCB0ZWFy
cwotICBkb3duIGNodW5rcyBoZWxkIGluIGZhc3RiaW5zLiAgRnJlZSBpdHNlbGYgY2Fubm90IGJl
IHVzZWQgZm9yIHRoaXMKLSAgcHVycG9zZSBzaW5jZSwgYW1vbmcgb3RoZXIgdGhpbmdzLCBpdCBt
aWdodCBwbGFjZSBjaHVua3MgYmFjayBvbnRvCi0gIGZhc3RiaW5zLiAgU28sIGluc3RlYWQsIHdl
IG5lZWQgdG8gdXNlIGEgbWlub3IgdmFyaWFudCBvZiB0aGUgc2FtZQotICBjb2RlLgotICAKLSAg
QWxzbywgYmVjYXVzZSB0aGlzIHJvdXRpbmUgbmVlZHMgdG8gYmUgY2FsbGVkIHRoZSBmaXJzdCB0
aW1lIHRocm91Z2gKLSAgbWFsbG9jIGFueXdheSwgaXQgdHVybnMgb3V0IHRvIGJlIHRoZSBwZXJm
ZWN0IHBsYWNlIHRvIHRyaWdnZXIKLSAgaW5pdGlhbGl6YXRpb24gY29kZS4KLSovCi0KLSNpZiBf
X1NURF9DCi1zdGF0aWMgdm9pZCBtYWxsb2NfY29uc29saWRhdGUobXN0YXRlIGF2KQotI2Vsc2UK
LXN0YXRpYyB2b2lkIG1hbGxvY19jb25zb2xpZGF0ZShhdikgbXN0YXRlIGF2OwotI2VuZGlmCi17
Ci0gIG1mYXN0YmlucHRyKiAgICBmYjsgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgZmFzdGJp
biBiZWluZyBjb25zb2xpZGF0ZWQgKi8KLSAgbWZhc3RiaW5wdHIqICAgIG1heGZiOyAgICAgICAg
ICAgICAgLyogbGFzdCBmYXN0YmluIChmb3IgbG9vcCBjb250cm9sKSAqLwotICBtY2h1bmtwdHIg
ICAgICAgcDsgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IGNodW5rIGJlaW5nIGNvbnNvbGlk
YXRlZCAqLwotICBtY2h1bmtwdHIgICAgICAgbmV4dHA7ICAgICAgICAgICAgICAvKiBuZXh0IGNo
dW5rIHRvIGNvbnNvbGlkYXRlICovCi0gIG1jaHVua3B0ciAgICAgICB1bnNvcnRlZF9iaW47ICAg
ICAgIC8qIGJpbiBoZWFkZXIgKi8KLSAgbWNodW5rcHRyICAgICAgIGZpcnN0X3Vuc29ydGVkOyAg
ICAgLyogY2h1bmsgdG8gbGluayB0byAqLwotCi0gIC8qIFRoZXNlIGhhdmUgc2FtZSB1c2UgYXMg
aW4gZnJlZSgpICovCi0gIG1jaHVua3B0ciAgICAgICBuZXh0Y2h1bms7Ci0gIElOVEVSTkFMX1NJ
WkVfVCBzaXplOwotICBJTlRFUk5BTF9TSVpFX1QgbmV4dHNpemU7Ci0gIElOVEVSTkFMX1NJWkVf
VCBwcmV2c2l6ZTsKLSAgaW50ICAgICAgICAgICAgIG5leHRpbnVzZTsKLSAgbWNodW5rcHRyICAg
ICAgIGJjazsKLSAgbWNodW5rcHRyICAgICAgIGZ3ZDsKLQotICAvKgotICAgIElmIG1heF9mYXN0
IGlzIDAsIHdlIGtub3cgdGhhdCBhdiBoYXNuJ3QKLSAgICB5ZXQgYmVlbiBpbml0aWFsaXplZCwg
aW4gd2hpY2ggY2FzZSBkbyBzbyBiZWxvdwotICAqLwotCi0gIGlmIChhdi0+bWF4X2Zhc3QgIT0g
MCkgewotICAgIGNsZWFyX2Zhc3RjaHVua3MoYXYpOwotCi0gICAgdW5zb3J0ZWRfYmluID0gdW5z
b3J0ZWRfY2h1bmtzKGF2KTsKLQotICAgIC8qCi0gICAgICBSZW1vdmUgZWFjaCBjaHVuayBmcm9t
IGZhc3QgYmluIGFuZCBjb25zb2xpZGF0ZSBpdCwgcGxhY2luZyBpdAotICAgICAgdGhlbiBpbiB1
bnNvcnRlZCBiaW4uIEFtb25nIG90aGVyIHJlYXNvbnMgZm9yIGRvaW5nIHRoaXMsCi0gICAgICBw
bGFjaW5nIGluIHVuc29ydGVkIGJpbiBhdm9pZHMgbmVlZGluZyB0byBjYWxjdWxhdGUgYWN0dWFs
IGJpbnMKLSAgICAgIHVudGlsIG1hbGxvYyBpcyBzdXJlIHRoYXQgY2h1bmtzIGFyZW4ndCBpbW1l
ZGlhdGVseSBnb2luZyB0byBiZQotICAgICAgcmV1c2VkIGFueXdheS4KLSAgICAqLwotICAgIAot
ICAgIG1heGZiID0gJihhdi0+ZmFzdGJpbnNbZmFzdGJpbl9pbmRleChhdi0+bWF4X2Zhc3QpXSk7
Ci0gICAgZmIgPSAmKGF2LT5mYXN0Ymluc1swXSk7Ci0gICAgZG8gewotICAgICAgaWYgKCAocCA9
ICpmYikgIT0gMCkgewotICAgICAgICAqZmIgPSAwOwotICAgICAgICAKLSAgICAgICAgZG8gewot
ICAgICAgICAgIGNoZWNrX2ludXNlX2NodW5rKHApOwotICAgICAgICAgIG5leHRwID0gcC0+ZmQ7
Ci0gICAgICAgICAgCi0gICAgICAgICAgLyogU2xpZ2h0bHkgc3RyZWFtbGluZWQgdmVyc2lvbiBv
ZiBjb25zb2xpZGF0aW9uIGNvZGUgaW4gZnJlZSgpICovCi0gICAgICAgICAgc2l6ZSA9IHAtPnNp
emUgJiB+UFJFVl9JTlVTRTsKLSAgICAgICAgICBuZXh0Y2h1bmsgPSBjaHVua19hdF9vZmZzZXQo
cCwgc2l6ZSk7Ci0gICAgICAgICAgbmV4dHNpemUgPSBjaHVua3NpemUobmV4dGNodW5rKTsKLSAg
ICAgICAgICAKLSAgICAgICAgICBpZiAoIXByZXZfaW51c2UocCkpIHsKLSAgICAgICAgICAgIHBy
ZXZzaXplID0gcC0+cHJldl9zaXplOwotICAgICAgICAgICAgc2l6ZSArPSBwcmV2c2l6ZTsKLSAg
ICAgICAgICAgIHAgPSBjaHVua19hdF9vZmZzZXQocCwgLSgobG9uZykgcHJldnNpemUpKTsKLSAg
ICAgICAgICAgIHVubGluayhwLCBiY2ssIGZ3ZCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAot
ICAgICAgICAgIGlmIChuZXh0Y2h1bmsgIT0gYXYtPnRvcCkgewotICAgICAgICAgICAgbmV4dGlu
dXNlID0gaW51c2VfYml0X2F0X29mZnNldChuZXh0Y2h1bmssIG5leHRzaXplKTsKLSAgICAgICAg
ICAgIHNldF9oZWFkKG5leHRjaHVuaywgbmV4dHNpemUpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoIW5leHRpbnVzZSkgewotICAgICAgICAgICAgICBzaXplICs9IG5leHRzaXplOwot
ICAgICAgICAgICAgICB1bmxpbmsobmV4dGNodW5rLCBiY2ssIGZ3ZCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZpcnN0X3Vuc29ydGVkID0gdW5zb3J0ZWRfYmlu
LT5mZDsKLSAgICAgICAgICAgIHVuc29ydGVkX2Jpbi0+ZmQgPSBwOwotICAgICAgICAgICAgZmly
c3RfdW5zb3J0ZWQtPmJrID0gcDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0X2hlYWQo
cCwgc2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgICAgICAgcC0+YmsgPSB1bnNvcnRlZF9iaW47
Ci0gICAgICAgICAgICBwLT5mZCA9IGZpcnN0X3Vuc29ydGVkOwotICAgICAgICAgICAgc2V0X2Zv
b3QocCwgc2l6ZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgc2l6ZSArPSBuZXh0c2l6ZTsKLSAgICAgICAgICAgIHNldF9oZWFkKHAsIHNp
emUgfCBQUkVWX0lOVVNFKTsKLSAgICAgICAgICAgIGF2LT50b3AgPSBwOwotICAgICAgICAgIH0K
LSAgICAgICAgICAKLSAgICAgICAgfSB3aGlsZSAoIChwID0gbmV4dHApICE9IDApOwotICAgICAg
ICAKLSAgICAgIH0KLSAgICB9IHdoaWxlIChmYisrICE9IG1heGZiKTsKLSAgfQotICBlbHNlIHsK
LSAgICBtYWxsb2NfaW5pdF9zdGF0ZShhdik7Ci0gICAgY2hlY2tfbWFsbG9jX3N0YXRlKCk7Ci0g
IH0KLX0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlYWxsb2MgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0KLSNpZiBfX1NURF9DCi1Wb2lkX3Qq
IHJFQUxMT2MoVm9pZF90KiBvbGRtZW0sIHNpemVfdCBieXRlcykKLSNlbHNlCi1Wb2lkX3QqIHJF
QUxMT2Mob2xkbWVtLCBieXRlcykgVm9pZF90KiBvbGRtZW07IHNpemVfdCBieXRlczsKLSNlbmRp
ZgotewotICBtc3RhdGUgYXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0KLSAgSU5URVJOQUxfU0la
RV9UICBuYjsgICAgICAgICAgICAgIC8qIHBhZGRlZCByZXF1ZXN0IHNpemUgKi8KLQotICBtY2h1
bmtwdHIgICAgICAgIG9sZHA7ICAgICAgICAgICAgLyogY2h1bmsgY29ycmVzcG9uZGluZyB0byBv
bGRtZW0gKi8KLSAgSU5URVJOQUxfU0laRV9UICBvbGRzaXplOyAgICAgICAgIC8qIGl0cyBzaXpl
ICovCi0KLSAgbWNodW5rcHRyICAgICAgICBuZXdwOyAgICAgICAgICAgIC8qIGNodW5rIHRvIHJl
dHVybiAqLwotICBJTlRFUk5BTF9TSVpFX1QgIG5ld3NpemU7ICAgICAgICAgLyogaXRzIHNpemUg
Ki8KLSAgVm9pZF90KiAgICAgICAgICBuZXdtZW07ICAgICAgICAgIC8qIGNvcnJlc3BvbmRpbmcg
dXNlciBtZW0gKi8KLQotICBtY2h1bmtwdHIgICAgICAgIG5leHQ7ICAgICAgICAgICAgLyogbmV4
dCBjb250aWd1b3VzIGNodW5rIGFmdGVyIG9sZHAgKi8KLQotICBtY2h1bmtwdHIgICAgICAgIHJl
bWFpbmRlcjsgICAgICAgLyogZXh0cmEgc3BhY2UgYXQgZW5kIG9mIG5ld3AgKi8KLSAgQ0hVTktf
U0laRV9UICAgICByZW1haW5kZXJfc2l6ZTsgIC8qIGl0cyBzaXplICovCi0KLSAgbWNodW5rcHRy
ICAgICAgICBiY2s7ICAgICAgICAgICAgIC8qIG1pc2MgdGVtcCBmb3IgbGlua2luZyAqLwotICBt
Y2h1bmtwdHIgICAgICAgIGZ3ZDsgICAgICAgICAgICAgLyogbWlzYyB0ZW1wIGZvciBsaW5raW5n
ICovCi0KLSAgQ0hVTktfU0laRV9UICAgICBjb3B5c2l6ZTsgICAgICAgIC8qIGJ5dGVzIHRvIGNv
cHkgKi8KLSAgdW5zaWduZWQgaW50ICAgICBuY29waWVzOyAgICAgICAgIC8qIElOVEVSTkFMX1NJ
WkVfVCB3b3JkcyB0byBjb3B5ICovCi0gIElOVEVSTkFMX1NJWkVfVCogczsgICAgICAgICAgICAg
ICAvKiBjb3B5IHNvdXJjZSAqLyAKLSAgSU5URVJOQUxfU0laRV9UKiBkOyAgICAgICAgICAgICAg
IC8qIGNvcHkgZGVzdGluYXRpb24gKi8KLQotCi0jaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZS
RUVTCi0gIGlmIChieXRlcyA9PSAwKSB7Ci0gICAgZlJFZShvbGRtZW0pOwotICAgIHJldHVybiAw
OwotICB9Ci0jZW5kaWYKLQotICAvKiByZWFsbG9jIG9mIG51bGwgaXMgc3VwcG9zZWQgdG8gYmUg
c2FtZSBhcyBtYWxsb2MgKi8KLSAgaWYgKG9sZG1lbSA9PSAwKSByZXR1cm4gbUFMTE9jKGJ5dGVz
KTsKLQotICBjaGVja2VkX3JlcXVlc3Qyc2l6ZShieXRlcywgbmIpOwotCi0gIG9sZHAgICAgPSBt
ZW0yY2h1bmsob2xkbWVtKTsKLSAgb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKLQotICBjaGVj
a19pbnVzZV9jaHVuayhvbGRwKTsKLQotICBpZiAoIWNodW5rX2lzX21tYXBwZWQob2xkcCkpIHsK
LQotICAgIGlmICgoQ0hVTktfU0laRV9UKShvbGRzaXplKSA+PSAoQ0hVTktfU0laRV9UKShuYikp
IHsKLSAgICAgIC8qIGFscmVhZHkgYmlnIGVub3VnaDsgc3BsaXQgYmVsb3cgKi8KLSAgICAgIG5l
d3AgPSBvbGRwOwotICAgICAgbmV3c2l6ZSA9IG9sZHNpemU7Ci0gICAgfQotCi0gICAgZWxzZSB7
Ci0gICAgICBuZXh0ID0gY2h1bmtfYXRfb2Zmc2V0KG9sZHAsIG9sZHNpemUpOwotCi0gICAgICAv
KiBUcnkgdG8gZXhwYW5kIGZvcndhcmQgaW50byB0b3AgKi8KLSAgICAgIGlmIChuZXh0ID09IGF2
LT50b3AgJiYKLSAgICAgICAgICAoQ0hVTktfU0laRV9UKShuZXdzaXplID0gb2xkc2l6ZSArIGNo
dW5rc2l6ZShuZXh0KSkgPj0KLSAgICAgICAgICAoQ0hVTktfU0laRV9UKShuYiArIE1JTlNJWkUp
KSB7Ci0gICAgICAgIHNldF9oZWFkX3NpemUob2xkcCwgbmIpOwotICAgICAgICBhdi0+dG9wID0g
Y2h1bmtfYXRfb2Zmc2V0KG9sZHAsIG5iKTsKLSAgICAgICAgc2V0X2hlYWQoYXYtPnRvcCwgKG5l
d3NpemUgLSBuYikgfCBQUkVWX0lOVVNFKTsKLSAgICAgICAgcmV0dXJuIGNodW5rMm1lbShvbGRw
KTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLyogVHJ5IHRvIGV4cGFuZCBmb3J3YXJkIGludG8g
bmV4dCBjaHVuazsgIHNwbGl0IG9mZiByZW1haW5kZXIgYmVsb3cgKi8KLSAgICAgIGVsc2UgaWYg
KG5leHQgIT0gYXYtPnRvcCAmJiAKLSAgICAgICAgICAgICAgICFpbnVzZShuZXh0KSAmJgotICAg
ICAgICAgICAgICAgKENIVU5LX1NJWkVfVCkobmV3c2l6ZSA9IG9sZHNpemUgKyBjaHVua3NpemUo
bmV4dCkpID49Ci0gICAgICAgICAgICAgICAoQ0hVTktfU0laRV9UKShuYikpIHsKLSAgICAgICAg
bmV3cCA9IG9sZHA7Ci0gICAgICAgIHVubGluayhuZXh0LCBiY2ssIGZ3ZCk7Ci0gICAgICB9Ci0K
LSAgICAgIC8qIGFsbG9jYXRlLCBjb3B5LCBmcmVlICovCi0gICAgICBlbHNlIHsKLSAgICAgICAg
bmV3bWVtID0gbUFMTE9jKG5iIC0gTUFMTE9DX0FMSUdOX01BU0spOwotICAgICAgICBpZiAobmV3
bWVtID09IDApCi0gICAgICAgICAgcmV0dXJuIDA7IC8qIHByb3BhZ2F0ZSBmYWlsdXJlICovCi0g
ICAgICAKLSAgICAgICAgbmV3cCA9IG1lbTJjaHVuayhuZXdtZW0pOwotICAgICAgICBuZXdzaXpl
ID0gY2h1bmtzaXplKG5ld3ApOwotICAgICAgICAKLSAgICAgICAgLyoKLSAgICAgICAgICBBdm9p
ZCBjb3B5IGlmIG5ld3AgaXMgbmV4dCBjaHVuayBhZnRlciBvbGRwLgotICAgICAgICAqLwotICAg
ICAgICBpZiAobmV3cCA9PSBuZXh0KSB7Ci0gICAgICAgICAgbmV3c2l6ZSArPSBvbGRzaXplOwot
ICAgICAgICAgIG5ld3AgPSBvbGRwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgIC8qCi0gICAgICAgICAgICBVbnJvbGwgY29weSBvZiA8PSAzNiBieXRlcyAoNzIgaWYgOGJ5
dGUgc2l6ZXMpCi0gICAgICAgICAgICBXZSBrbm93IHRoYXQgY29udGVudHMgaGF2ZSBhbiBvZGQg
bnVtYmVyIG9mCi0gICAgICAgICAgICBJTlRFUk5BTF9TSVpFX1Qtc2l6ZWQgd29yZHM7IG1pbmlt
YWxseSAzLgotICAgICAgICAgICovCi0gICAgICAgICAgCi0gICAgICAgICAgY29weXNpemUgPSBv
bGRzaXplIC0gU0laRV9TWjsKLSAgICAgICAgICBzID0gKElOVEVSTkFMX1NJWkVfVCopKG9sZG1l
bSk7Ci0gICAgICAgICAgZCA9IChJTlRFUk5BTF9TSVpFX1QqKShuZXdtZW0pOwotICAgICAgICAg
IG5jb3BpZXMgPSBjb3B5c2l6ZSAvIHNpemVvZihJTlRFUk5BTF9TSVpFX1QpOwotICAgICAgICAg
IGFzc2VydChuY29waWVzID49IDMpOwotICAgICAgICAgIAotICAgICAgICAgIGlmIChuY29waWVz
ID4gOSkKLSAgICAgICAgICAgIE1BTExPQ19DT1BZKGQsIHMsIGNvcHlzaXplKTsKLSAgICAgICAg
ICAKLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICooZCswKSA9ICoocyswKTsKLSAgICAg
ICAgICAgICooZCsxKSA9ICoocysxKTsKLSAgICAgICAgICAgICooZCsyKSA9ICoocysyKTsKLSAg
ICAgICAgICAgIGlmIChuY29waWVzID4gNCkgewotICAgICAgICAgICAgICAqKGQrMykgPSAqKHMr
Myk7Ci0gICAgICAgICAgICAgICooZCs0KSA9ICoocys0KTsKLSAgICAgICAgICAgICAgaWYgKG5j
b3BpZXMgPiA2KSB7Ci0gICAgICAgICAgICAgICAgKihkKzUpID0gKihzKzUpOwotICAgICAgICAg
ICAgICAgICooZCs2KSA9ICoocys2KTsKLSAgICAgICAgICAgICAgICBpZiAobmNvcGllcyA+IDgp
IHsKLSAgICAgICAgICAgICAgICAgICooZCs3KSA9ICoocys3KTsKLSAgICAgICAgICAgICAgICAg
ICooZCs4KSA9ICoocys4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgZlJFZShvbGRt
ZW0pOwotICAgICAgICAgIGNoZWNrX2ludXNlX2NodW5rKG5ld3ApOwotICAgICAgICAgIHJldHVy
biBjaHVuazJtZW0obmV3cCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBJ
ZiBwb3NzaWJsZSwgZnJlZSBleHRyYSBzcGFjZSBpbiBvbGQgb3IgZXh0ZW5kZWQgY2h1bmsgKi8K
LQotICAgIGFzc2VydCgoQ0hVTktfU0laRV9UKShuZXdzaXplKSA+PSAoQ0hVTktfU0laRV9UKShu
YikpOwotCi0gICAgcmVtYWluZGVyX3NpemUgPSBuZXdzaXplIC0gbmI7Ci0KLSAgICBpZiAocmVt
YWluZGVyX3NpemUgPCBNSU5TSVpFKSB7IC8qIG5vdCBlbm91Z2ggZXh0cmEgdG8gc3BsaXQgb2Zm
ICovCi0gICAgICBzZXRfaGVhZF9zaXplKG5ld3AsIG5ld3NpemUpOwotICAgICAgc2V0X2ludXNl
X2JpdF9hdF9vZmZzZXQobmV3cCwgbmV3c2l6ZSk7Ci0gICAgfQotICAgIGVsc2UgeyAvKiBzcGxp
dCByZW1haW5kZXIgKi8KLSAgICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNldChuZXdwLCBu
Yik7Ci0gICAgICBzZXRfaGVhZF9zaXplKG5ld3AsIG5iKTsKLSAgICAgIHNldF9oZWFkKHJlbWFp
bmRlciwgcmVtYWluZGVyX3NpemUgfCBQUkVWX0lOVVNFKTsKLSAgICAgIC8qIE1hcmsgcmVtYWlu
ZGVyIGFzIGludXNlIHNvIGZyZWUoKSB3b24ndCBjb21wbGFpbiAqLwotICAgICAgc2V0X2ludXNl
X2JpdF9hdF9vZmZzZXQocmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSk7Ci0gICAgICBmUkVlKGNo
dW5rMm1lbShyZW1haW5kZXIpKTsgCi0gICAgfQotCi0gICAgY2hlY2tfaW51c2VfY2h1bmsobmV3
cCk7Ci0gICAgcmV0dXJuIGNodW5rMm1lbShuZXdwKTsKLSAgfQotCi0gIC8qCi0gICAgSGFuZGxl
IG1tYXAgY2FzZXMKLSAgKi8KLQotICBlbHNlIHsKLSNpZiBIQVZFX01NQVAKLQotI2lmIEhBVkVf
TVJFTUFQCi0gICAgSU5URVJOQUxfU0laRV9UIG9mZnNldCA9IG9sZHAtPnByZXZfc2l6ZTsKLSAg
ICBzaXplX3QgcGFnZW1hc2sgPSBhdi0+cGFnZXNpemUgLSAxOwotICAgIGNoYXIgKmNwOwotICAg
IENIVU5LX1NJWkVfVCAgc3VtOwotICAgIAotICAgIC8qIE5vdGUgdGhlIGV4dHJhIFNJWkVfU1og
b3ZlcmhlYWQgKi8KLSAgICBuZXdzaXplID0gKG5iICsgb2Zmc2V0ICsgU0laRV9TWiArIHBhZ2Vt
YXNrKSAmIH5wYWdlbWFzazsKLQotICAgIC8qIGRvbid0IG5lZWQgdG8gcmVtYXAgaWYgc3RpbGwg
d2l0aGluIHNhbWUgcGFnZSAqLwotICAgIGlmIChvbGRzaXplID09IG5ld3NpemUgLSBvZmZzZXQp
IAotICAgICAgcmV0dXJuIG9sZG1lbTsKLQotICAgIGNwID0gKGNoYXIqKW1yZW1hcCgoY2hhciop
b2xkcCAtIG9mZnNldCwgb2xkc2l6ZSArIG9mZnNldCwgbmV3c2l6ZSwgMSk7Ci0gICAgCi0gICAg
aWYgKGNwICE9IChjaGFyKilNT1JFQ09SRV9GQUlMVVJFKSB7Ci0KLSAgICAgIG5ld3AgPSAobWNo
dW5rcHRyKShjcCArIG9mZnNldCk7Ci0gICAgICBzZXRfaGVhZChuZXdwLCAobmV3c2l6ZSAtIG9m
ZnNldCl8SVNfTU1BUFBFRCk7Ci0gICAgICAKLSAgICAgIGFzc2VydChhbGlnbmVkX09LKGNodW5r
Mm1lbShuZXdwKSkpOwotICAgICAgYXNzZXJ0KChuZXdwLT5wcmV2X3NpemUgPT0gb2Zmc2V0KSk7
Ci0gICAgICAKLSAgICAgIC8qIHVwZGF0ZSBzdGF0aXN0aWNzICovCi0gICAgICBzdW0gPSBhdi0+
bW1hcHBlZF9tZW0gKz0gbmV3c2l6ZSAtIG9sZHNpemU7Ci0gICAgICBpZiAoc3VtID4gKENIVU5L
X1NJWkVfVCkoYXYtPm1heF9tbWFwcGVkX21lbSkpIAotICAgICAgICBhdi0+bWF4X21tYXBwZWRf
bWVtID0gc3VtOwotICAgICAgc3VtICs9IGF2LT5zYnJrZWRfbWVtOwotICAgICAgaWYgKHN1bSA+
IChDSFVOS19TSVpFX1QpKGF2LT5tYXhfdG90YWxfbWVtKSkgCi0gICAgICAgIGF2LT5tYXhfdG90
YWxfbWVtID0gc3VtOwotICAgICAgCi0gICAgICByZXR1cm4gY2h1bmsybWVtKG5ld3ApOwotICAg
IH0KLSNlbmRpZgotCi0gICAgLyogTm90ZSB0aGUgZXh0cmEgU0laRV9TWiBvdmVyaGVhZC4gKi8K
LSAgICBpZiAoKENIVU5LX1NJWkVfVCkob2xkc2l6ZSkgPj0gKENIVU5LX1NJWkVfVCkobmIgKyBT
SVpFX1NaKSkgCi0gICAgICBuZXdtZW0gPSBvbGRtZW07IC8qIGRvIG5vdGhpbmcgKi8KLSAgICBl
bHNlIHsKLSAgICAgIC8qIE11c3QgYWxsb2MsIGNvcHksIGZyZWUuICovCi0gICAgICBuZXdtZW0g
PSBtQUxMT2MobmIgLSBNQUxMT0NfQUxJR05fTUFTSyk7Ci0gICAgICBpZiAobmV3bWVtICE9IDAp
IHsKLSAgICAgICAgTUFMTE9DX0NPUFkobmV3bWVtLCBvbGRtZW0sIG9sZHNpemUgLSAyKlNJWkVf
U1opOwotICAgICAgICBmUkVlKG9sZG1lbSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBu
ZXdtZW07Ci0KLSNlbHNlIAotICAgIC8qIElmICFIQVZFX01NQVAsIGJ1dCBjaHVua19pc19tbWFw
cGVkLCB1c2VyIG11c3QgaGF2ZSBvdmVyd3JpdHRlbiBtZW0gKi8KLSAgICBjaGVja19tYWxsb2Nf
c3RhdGUoKTsKLSAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047Ci0gICAgcmV0dXJuIDA7Ci0jZW5k
aWYKLSAgfQotfQotCi0vKgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWVtYWxp
Z24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWYgX19TVERfQwotVm9p
ZF90KiBtRU1BTElHbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpCi0jZWxzZQotVm9p
ZF90KiBtRU1BTElHbihhbGlnbm1lbnQsIGJ5dGVzKSBzaXplX3QgYWxpZ25tZW50OyBzaXplX3Qg
Ynl0ZXM7Ci0jZW5kaWYKLXsKLSAgSU5URVJOQUxfU0laRV9UIG5iOyAgICAgICAgICAgICAvKiBw
YWRkZWQgIHJlcXVlc3Qgc2l6ZSAqLwotICBjaGFyKiAgICAgICAgICAgbTsgICAgICAgICAgICAg
IC8qIG1lbW9yeSByZXR1cm5lZCBieSBtYWxsb2MgY2FsbCAqLwotICBtY2h1bmtwdHIgICAgICAg
cDsgICAgICAgICAgICAgIC8qIGNvcnJlc3BvbmRpbmcgY2h1bmsgKi8KLSAgY2hhciogICAgICAg
ICAgIGJyazsgICAgICAgICAgICAvKiBhbGlnbm1lbnQgcG9pbnQgd2l0aGluIHAgKi8KLSAgbWNo
dW5rcHRyICAgICAgIG5ld3A7ICAgICAgICAgICAvKiBjaHVuayB0byByZXR1cm4gKi8KLSAgSU5U
RVJOQUxfU0laRV9UIG5ld3NpemU7ICAgICAgICAvKiBpdHMgc2l6ZSAqLwotICBJTlRFUk5BTF9T
SVpFX1QgbGVhZHNpemU7ICAgICAgIC8qIGxlYWRpbmcgc3BhY2UgYmVmb3JlIGFsaWdubWVudCBw
b2ludCAqLwotICBtY2h1bmtwdHIgICAgICAgcmVtYWluZGVyOyAgICAgIC8qIHNwYXJlIHJvb20g
YXQgZW5kIHRvIHNwbGl0IG9mZiAqLwotICBDSFVOS19TSVpFX1QgICAgcmVtYWluZGVyX3NpemU7
IC8qIGl0cyBzaXplICovCi0gIElOVEVSTkFMX1NJWkVfVCBzaXplOwotCi0gIC8qIElmIG5lZWQg
bGVzcyBhbGlnbm1lbnQgdGhhbiB3ZSBnaXZlIGFueXdheSwganVzdCByZWxheSB0byBtYWxsb2Mg
Ki8KLQotICBpZiAoYWxpZ25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpIHJldHVybiBtQUxMT2Mo
Ynl0ZXMpOwotCi0gIC8qIE90aGVyd2lzZSwgZW5zdXJlIHRoYXQgaXQgaXMgYXQgbGVhc3QgYSBt
aW5pbXVtIGNodW5rIHNpemUgKi8KLQotICBpZiAoYWxpZ25tZW50IDwgIE1JTlNJWkUpIGFsaWdu
bWVudCA9IE1JTlNJWkU7Ci0KLSAgLyogTWFrZSBzdXJlIGFsaWdubWVudCBpcyBwb3dlciBvZiAy
IChpbiBjYXNlIE1JTlNJWkUgaXMgbm90KS4gICovCi0gIGlmICgoYWxpZ25tZW50ICYgKGFsaWdu
bWVudCAtIDEpKSAhPSAwKSB7Ci0gICAgc2l6ZV90IGEgPSBNQUxMT0NfQUxJR05NRU5UICogMjsK
LSAgICB3aGlsZSAoKENIVU5LX1NJWkVfVClhIDwgKENIVU5LX1NJWkVfVClhbGlnbm1lbnQpIGEg
PDw9IDE7Ci0gICAgYWxpZ25tZW50ID0gYTsKLSAgfQotCi0gIGNoZWNrZWRfcmVxdWVzdDJzaXpl
KGJ5dGVzLCBuYik7Ci0KLSAgLyoKLSAgICBTdHJhdGVneTogZmluZCBhIHNwb3Qgd2l0aGluIHRo
YXQgY2h1bmsgdGhhdCBtZWV0cyB0aGUgYWxpZ25tZW50Ci0gICAgcmVxdWVzdCwgYW5kIHRoZW4g
cG9zc2libHkgZnJlZSB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UuCi0gICovCi0KLQot
ICAvKiBDYWxsIG1hbGxvYyB3aXRoIHdvcnN0IGNhc2UgcGFkZGluZyB0byBoaXQgYWxpZ25tZW50
LiAqLwotCi0gIG0gID0gKGNoYXIqKShtQUxMT2MobmIgKyBhbGlnbm1lbnQgKyBNSU5TSVpFKSk7
Ci0KLSAgaWYgKG0gPT0gMCkgcmV0dXJuIDA7IC8qIHByb3BhZ2F0ZSBmYWlsdXJlICovCi0KLSAg
cCA9IG1lbTJjaHVuayhtKTsKLQotICBpZiAoKCgoUFRSX1VJTlQpKG0pKSAlIGFsaWdubWVudCkg
IT0gMCkgeyAvKiBtaXNhbGlnbmVkICovCi0KLSAgICAvKgotICAgICAgRmluZCBhbiBhbGlnbmVk
IHNwb3QgaW5zaWRlIGNodW5rLiAgU2luY2Ugd2UgbmVlZCB0byBnaXZlIGJhY2sKLSAgICAgIGxl
YWRpbmcgc3BhY2UgaW4gYSBjaHVuayBvZiBhdCBsZWFzdCBNSU5TSVpFLCBpZiB0aGUgZmlyc3QK
LSAgICAgIGNhbGN1bGF0aW9uIHBsYWNlcyB1cyBhdCBhIHNwb3Qgd2l0aCBsZXNzIHRoYW4gTUlO
U0laRSBsZWFkZXIsCi0gICAgICB3ZSBjYW4gbW92ZSB0byB0aGUgbmV4dCBhbGlnbmVkIHNwb3Qg
LS0gd2UndmUgYWxsb2NhdGVkIGVub3VnaAotICAgICAgdG90YWwgcm9vbSBzbyB0aGF0IHRoaXMg
aXMgYWx3YXlzIHBvc3NpYmxlLgotICAgICovCi0KLSAgICBicmsgPSAoY2hhciopbWVtMmNodW5r
KChQVFJfVUlOVCkoKChQVFJfVUlOVCkobSArIGFsaWdubWVudCAtIDEpKSAmCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAtKChzaWduZWQgbG9uZykgYWxpZ25tZW50KSkpOwotICAgIGlmICgo
Q0hVTktfU0laRV9UKShicmsgLSAoY2hhciopKHApKSA8IE1JTlNJWkUpCi0gICAgICBicmsgKz0g
YWxpZ25tZW50OwotCi0gICAgbmV3cCA9IChtY2h1bmtwdHIpYnJrOwotICAgIGxlYWRzaXplID0g
YnJrIC0gKGNoYXIqKShwKTsKLSAgICBuZXdzaXplID0gY2h1bmtzaXplKHApIC0gbGVhZHNpemU7
Ci0KLSAgICAvKiBGb3IgbW1hcHBlZCBjaHVua3MsIGp1c3QgYWRqdXN0IG9mZnNldCAqLwotICAg
IGlmIChjaHVua19pc19tbWFwcGVkKHApKSB7Ci0gICAgICBuZXdwLT5wcmV2X3NpemUgPSBwLT5w
cmV2X3NpemUgKyBsZWFkc2l6ZTsKLSAgICAgIHNldF9oZWFkKG5ld3AsIG5ld3NpemV8SVNfTU1B
UFBFRCk7Ci0gICAgICByZXR1cm4gY2h1bmsybWVtKG5ld3ApOwotICAgIH0KLQotICAgIC8qIE90
aGVyd2lzZSwgZ2l2ZSBiYWNrIGxlYWRlciwgdXNlIHRoZSByZXN0ICovCi0gICAgc2V0X2hlYWQo
bmV3cCwgbmV3c2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0
KG5ld3AsIG5ld3NpemUpOwotICAgIHNldF9oZWFkX3NpemUocCwgbGVhZHNpemUpOwotICAgIGZS
RWUoY2h1bmsybWVtKHApKTsKLSAgICBwID0gbmV3cDsKLQotICAgIGFzc2VydCAobmV3c2l6ZSA+
PSBuYiAmJgotICAgICAgICAgICAgKCgoUFRSX1VJTlQpKGNodW5rMm1lbShwKSkpICUgYWxpZ25t
ZW50KSA9PSAwKTsKLSAgfQotCi0gIC8qIEFsc28gZ2l2ZSBiYWNrIHNwYXJlIHJvb20gYXQgdGhl
IGVuZCAqLwotICBpZiAoIWNodW5rX2lzX21tYXBwZWQocCkpIHsKLSAgICBzaXplID0gY2h1bmtz
aXplKHApOwotICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA+IChDSFVOS19TSVpFX1QpKG5i
ICsgTUlOU0laRSkpIHsKLSAgICAgIHJlbWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOwotICAgICAg
cmVtYWluZGVyID0gY2h1bmtfYXRfb2Zmc2V0KHAsIG5iKTsKLSAgICAgIHNldF9oZWFkKHJlbWFp
bmRlciwgcmVtYWluZGVyX3NpemUgfCBQUkVWX0lOVVNFKTsKLSAgICAgIHNldF9oZWFkX3NpemUo
cCwgbmIpOwotICAgICAgZlJFZShjaHVuazJtZW0ocmVtYWluZGVyKSk7Ci0gICAgfQotICB9Ci0K
LSAgY2hlY2tfaW51c2VfY2h1bmsocCk7Ci0gIHJldHVybiBjaHVuazJtZW0ocCk7Ci19Ci0KLS8q
Ci0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjYWxsb2MgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWYgX19TVERfQwotVm9pZF90KiBjQUxMT2Moc2l6ZV90
IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpCi0jZWxzZQotVm9pZF90KiBjQUxMT2Mobl9l
bGVtZW50cywgZWxlbV9zaXplKSBzaXplX3Qgbl9lbGVtZW50czsgc2l6ZV90IGVsZW1fc2l6ZTsK
LSNlbmRpZgotewotICBtY2h1bmtwdHIgcDsKLSAgQ0hVTktfU0laRV9UICBjbGVhcnNpemU7Ci0g
IENIVU5LX1NJWkVfVCAgbmNsZWFyczsKLSAgSU5URVJOQUxfU0laRV9UKiBkOwotCi0gIFZvaWRf
dCogbWVtID0gbUFMTE9jKG5fZWxlbWVudHMgKiBlbGVtX3NpemUpOwotCi0gIGlmIChtZW0gIT0g
MCkgewotICAgIHAgPSBtZW0yY2h1bmsobWVtKTsKLQotICAgIGlmICghY2h1bmtfaXNfbW1hcHBl
ZChwKSkKLSAgICB7ICAKLSAgICAgIC8qCi0gICAgICAgIFVucm9sbCBjbGVhciBvZiA8PSAzNiBi
eXRlcyAoNzIgaWYgOGJ5dGUgc2l6ZXMpCi0gICAgICAgIFdlIGtub3cgdGhhdCBjb250ZW50cyBo
YXZlIGFuIG9kZCBudW1iZXIgb2YKLSAgICAgICAgSU5URVJOQUxfU0laRV9ULXNpemVkIHdvcmRz
OyBtaW5pbWFsbHkgMy4KLSAgICAgICovCi0KLSAgICAgIGQgPSAoSU5URVJOQUxfU0laRV9UKilt
ZW07Ci0gICAgICBjbGVhcnNpemUgPSBjaHVua3NpemUocCkgLSBTSVpFX1NaOwotICAgICAgbmNs
ZWFycyA9IGNsZWFyc2l6ZSAvIHNpemVvZihJTlRFUk5BTF9TSVpFX1QpOwotICAgICAgYXNzZXJ0
KG5jbGVhcnMgPj0gMyk7Ci0KLSAgICAgIGlmIChuY2xlYXJzID4gOSkKLSAgICAgICAgTUFMTE9D
X1pFUk8oZCwgY2xlYXJzaXplKTsKLQotICAgICAgZWxzZSB7Ci0gICAgICAgICooZCswKSA9IDA7
Ci0gICAgICAgICooZCsxKSA9IDA7Ci0gICAgICAgICooZCsyKSA9IDA7Ci0gICAgICAgIGlmIChu
Y2xlYXJzID4gNCkgewotICAgICAgICAgICooZCszKSA9IDA7Ci0gICAgICAgICAgKihkKzQpID0g
MDsKLSAgICAgICAgICBpZiAobmNsZWFycyA+IDYpIHsKLSAgICAgICAgICAgICooZCs1KSA9IDA7
Ci0gICAgICAgICAgICAqKGQrNikgPSAwOwotICAgICAgICAgICAgaWYgKG5jbGVhcnMgPiA4KSB7
Ci0gICAgICAgICAgICAgICooZCs3KSA9IDA7Ci0gICAgICAgICAgICAgICooZCs4KSA9IDA7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotI2lm
ICEgTU1BUF9DTEVBUlMKLSAgICBlbHNlCi0gICAgewotICAgICAgZCA9IChJTlRFUk5BTF9TSVpF
X1QqKW1lbTsKLSAgICAgIC8qCi0gICAgICAgIE5vdGUgdGhlIGFkZGl0aW9uYWwgU0laRV9TWgot
ICAgICAgKi8KLSAgICAgIGNsZWFyc2l6ZSA9IGNodW5rc2l6ZShwKSAtIDIqU0laRV9TWjsKLSAg
ICAgIE1BTExPQ19aRVJPKGQsIGNsZWFyc2l6ZSk7Ci0gICAgfQotI2VuZGlmCi0gIH0KLSAgcmV0
dXJuIG1lbTsKLX0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNmcmVl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmIF9fU1REX0MKLXZvaWQg
Y0ZSRWUoVm9pZF90ICptZW0pCi0jZWxzZQotdm9pZCBjRlJFZShtZW0pIFZvaWRfdCAqbWVtOwot
I2VuZGlmCi17Ci0gIGZSRWUobWVtKTsKLX0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBpbmRlcGVuZGVudF9jYWxsb2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQot
I2lmIF9fU1REX0MKLVZvaWRfdCoqIGlDQUxMT2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBl
bGVtX3NpemUsIFZvaWRfdCogY2h1bmtzW10pCi0jZWxzZQotVm9pZF90KiogaUNBTExPYyhuX2Vs
ZW1lbnRzLCBlbGVtX3NpemUsIGNodW5rcykgc2l6ZV90IG5fZWxlbWVudHM7IHNpemVfdCBlbGVt
X3NpemU7IFZvaWRfdCogY2h1bmtzW107Ci0jZW5kaWYKLXsKLSAgc2l6ZV90IHN6ID0gZWxlbV9z
aXplOyAvKiBzZXJ2ZXMgYXMgMS1lbGVtZW50IGFycmF5ICovCi0gIC8qIG9wdHMgYXJnIG9mIDMg
bWVhbnMgYWxsIGVsZW1lbnRzIGFyZSBzYW1lIHNpemUsIGFuZCBzaG91bGQgYmUgY2xlYXJlZCAq
LwotICByZXR1cm4gaUFMTE9jKG5fZWxlbWVudHMsICZzeiwgMywgY2h1bmtzKTsKLX0KLQotLyoK
LSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbmRlcGVuZGVudF9jb21hbGxvYyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWYgX19TVERfQwotVm9pZF90KiogaUNPTUFMTE9j
KHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwgVm9pZF90KiBjaHVua3NbXSkKLSNl
bHNlCi1Wb2lkX3QqKiBpQ09NQUxMT2Mobl9lbGVtZW50cywgc2l6ZXMsIGNodW5rcykgc2l6ZV90
IG5fZWxlbWVudHM7IHNpemVfdCBzaXplc1tdOyBWb2lkX3QqIGNodW5rc1tdOwotI2VuZGlmCi17
Ci0gIHJldHVybiBpQUxMT2Mobl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7Ci19Ci0KLQot
LyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlhbGxvYyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgaWFsbG9jIHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0IGZvciBp
bmRlcGVuZGVudF9YIHJvdXRpbmVzLCBoYW5kbGluZyBhbGwgb2YKLSAgdGhlIGNvbWJpbmF0aW9u
cyB0aGF0IGNhbiByZXN1bHQuCi0KLSAgVGhlIG9wdHMgYXJnIGhhczoKLSAgICBiaXQgMCBzZXQg
aWYgYWxsIGVsZW1lbnRzIGFyZSBzYW1lIHNpemUgKHVzaW5nIHNpemVzWzBdKQotICAgIGJpdCAx
IHNldCBpZiBlbGVtZW50cyBzaG91bGQgYmUgemVyb2VkCi0qLwotCi0KLSNpZiBfX1NURF9DCi1z
dGF0aWMgVm9pZF90KiogaUFMTE9jKHNpemVfdCBuX2VsZW1lbnRzLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90KiBzaXplcywgIAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0
cywKLSAgICAgICAgICAgICAgICAgICAgICAgVm9pZF90KiBjaHVua3NbXSkKLSNlbHNlCi1zdGF0
aWMgVm9pZF90KiogaUFMTE9jKG5fZWxlbWVudHMsIHNpemVzLCBvcHRzLCBjaHVua3MpIHNpemVf
dCBuX2VsZW1lbnRzOyBzaXplX3QqIHNpemVzOyBpbnQgb3B0czsgVm9pZF90KiBjaHVua3NbXTsK
LSNlbmRpZgotewotICBtc3RhdGUgYXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0gIElOVEVSTkFM
X1NJWkVfVCBlbGVtZW50X3NpemU7ICAgLyogY2h1bmtzaXplIG9mIGVhY2ggZWxlbWVudCwgaWYg
YWxsIHNhbWUgKi8KLSAgSU5URVJOQUxfU0laRV9UIGNvbnRlbnRzX3NpemU7ICAvKiB0b3RhbCBz
aXplIG9mIGVsZW1lbnRzICovCi0gIElOVEVSTkFMX1NJWkVfVCBhcnJheV9zaXplOyAgICAgLyog
cmVxdWVzdCBzaXplIG9mIHBvaW50ZXIgYXJyYXkgKi8KLSAgVm9pZF90KiAgICAgICAgIG1lbTsg
ICAgICAgICAgICAvKiBtYWxsb2NlZCBhZ2dyZWdhdGUgc3BhY2UgKi8KLSAgbWNodW5rcHRyICAg
ICAgIHA7ICAgICAgICAgICAgICAvKiBjb3JyZXNwb25kaW5nIGNodW5rICovCi0gIElOVEVSTkFM
X1NJWkVfVCByZW1haW5kZXJfc2l6ZTsgLyogcmVtYWluaW5nIGJ5dGVzIHdoaWxlIHNwbGl0dGlu
ZyAqLwotICBWb2lkX3QqKiAgICAgICAgbWFycmF5OyAgICAgICAgIC8qIGVpdGhlciAiY2h1bmtz
IiBvciBtYWxsb2NlZCBwdHIgYXJyYXkgKi8KLSAgbWNodW5rcHRyICAgICAgIGFycmF5X2NodW5r
OyAgICAvKiBjaHVuayBmb3IgbWFsbG9jZWQgcHRyIGFycmF5ICovCi0gIGludCAgICAgICAgICAg
ICBtbXg7ICAgICAgICAgICAgLyogdG8gZGlzYWJsZSBtbWFwICovCi0gIElOVEVSTkFMX1NJWkVf
VCBzaXplOyAgICAgICAgICAgCi0gIHNpemVfdCAgICAgICAgICBpOwotCi0gIC8qIEVuc3VyZSBp
bml0aWFsaXphdGlvbiAqLwotICBpZiAoYXYtPm1heF9mYXN0ID09IDApIG1hbGxvY19jb25zb2xp
ZGF0ZShhdik7Ci0KLSAgLyogY29tcHV0ZSBhcnJheSBsZW5ndGgsIGlmIG5lZWRlZCAqLwotICBp
ZiAoY2h1bmtzICE9IDApIHsKLSAgICBpZiAobl9lbGVtZW50cyA9PSAwKQotICAgICAgcmV0dXJu
IGNodW5rczsgLyogbm90aGluZyB0byBkbyAqLwotICAgIG1hcnJheSA9IGNodW5rczsKLSAgICBh
cnJheV9zaXplID0gMDsKLSAgfQotICBlbHNlIHsKLSAgICAvKiBpZiBlbXB0eSByZXEsIG11c3Qg
c3RpbGwgcmV0dXJuIGNodW5rIHJlcHJlc2VudGluZyBlbXB0eSBhcnJheSAqLwotICAgIGlmIChu
X2VsZW1lbnRzID09IDApIAotICAgICAgcmV0dXJuIChWb2lkX3QqKikgbUFMTE9jKDApOwotICAg
IG1hcnJheSA9IDA7Ci0gICAgYXJyYXlfc2l6ZSA9IHJlcXVlc3Qyc2l6ZShuX2VsZW1lbnRzICog
KHNpemVvZihWb2lkX3QqKSkpOwotICB9Ci0KLSAgLyogY29tcHV0ZSB0b3RhbCBlbGVtZW50IHNp
emUgKi8KLSAgaWYgKG9wdHMgJiAweDEpIHsgLyogYWxsLXNhbWUtc2l6ZSAqLwotICAgIGVsZW1l
bnRfc2l6ZSA9IHJlcXVlc3Qyc2l6ZSgqc2l6ZXMpOwotICAgIGNvbnRlbnRzX3NpemUgPSBuX2Vs
ZW1lbnRzICogZWxlbWVudF9zaXplOwotICB9Ci0gIGVsc2UgeyAvKiBhZGQgdXAgYWxsIHRoZSBz
aXplcyAqLwotICAgIGVsZW1lbnRfc2l6ZSA9IDA7Ci0gICAgY29udGVudHNfc2l6ZSA9IDA7Ci0g
ICAgZm9yIChpID0gMDsgaSAhPSBuX2VsZW1lbnRzOyArK2kpIAotICAgICAgY29udGVudHNfc2l6
ZSArPSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pOyAgICAgCi0gIH0KLQotICAvKiBzdWJ0cmFjdCBv
dXQgYWxpZ25tZW50IGJ5dGVzIGZyb20gdG90YWwgdG8gbWluaW1pemUgb3ZlcmFsbG9jYXRpb24g
Ki8KLSAgc2l6ZSA9IGNvbnRlbnRzX3NpemUgKyBhcnJheV9zaXplIC0gTUFMTE9DX0FMSUdOX01B
U0s7Ci0gIAotICAvKiAKLSAgICAgQWxsb2NhdGUgdGhlIGFnZ3JlZ2F0ZSBjaHVuay4KLSAgICAg
QnV0IGZpcnN0IGRpc2FibGUgbW1hcCBzbyBtYWxsb2Mgd29uJ3QgdXNlIGl0LCBzaW5jZQotICAg
ICB3ZSB3b3VsZCBub3QgYmUgYWJsZSB0byBsYXRlciBmcmVlL3JlYWxsb2Mgc3BhY2UgaW50ZXJu
YWwKLSAgICAgdG8gYSBzZWdyZWdhdGVkIG1tYXAgcmVnaW9uLgotICovCi0gIG1teCA9IGF2LT5u
X21tYXBzX21heDsgICAvKiBkaXNhYmxlIG1tYXAgKi8KLSAgYXYtPm5fbW1hcHNfbWF4ID0gMDsK
LSAgbWVtID0gbUFMTE9jKHNpemUpOwotICBhdi0+bl9tbWFwc19tYXggPSBtbXg7ICAgLyogcmVz
ZXQgbW1hcCAqLwotICBpZiAobWVtID09IDApIAotICAgIHJldHVybiAwOwotCi0gIHAgPSBtZW0y
Y2h1bmsobWVtKTsKLSAgYXNzZXJ0KCFjaHVua19pc19tbWFwcGVkKHApKTsgCi0gIHJlbWFpbmRl
cl9zaXplID0gY2h1bmtzaXplKHApOwotCi0gIGlmIChvcHRzICYgMHgyKSB7ICAgICAgIC8qIG9w
dGlvbmFsbHkgY2xlYXIgdGhlIGVsZW1lbnRzICovCi0gICAgTUFMTE9DX1pFUk8obWVtLCByZW1h
aW5kZXJfc2l6ZSAtIFNJWkVfU1ogLSBhcnJheV9zaXplKTsKLSAgfQotCi0gIC8qIElmIG5vdCBw
cm92aWRlZCwgYWxsb2NhdGUgdGhlIHBvaW50ZXIgYXJyYXkgYXMgZmluYWwgcGFydCBvZiBjaHVu
ayAqLwotICBpZiAobWFycmF5ID09IDApIHsKLSAgICBhcnJheV9jaHVuayA9IGNodW5rX2F0X29m
ZnNldChwLCBjb250ZW50c19zaXplKTsKLSAgICBtYXJyYXkgPSAoVm9pZF90KiopIChjaHVuazJt
ZW0oYXJyYXlfY2h1bmspKTsKLSAgICBzZXRfaGVhZChhcnJheV9jaHVuaywgKHJlbWFpbmRlcl9z
aXplIC0gY29udGVudHNfc2l6ZSkgfCBQUkVWX0lOVVNFKTsKLSAgICByZW1haW5kZXJfc2l6ZSA9
IGNvbnRlbnRzX3NpemU7Ci0gIH0KLQotICAvKiBzcGxpdCBvdXQgZWxlbWVudHMgKi8KLSAgZm9y
IChpID0gMDsgOyArK2kpIHsKLSAgICBtYXJyYXlbaV0gPSBjaHVuazJtZW0ocCk7Ci0gICAgaWYg
KGkgIT0gbl9lbGVtZW50cy0xKSB7Ci0gICAgICBpZiAoZWxlbWVudF9zaXplICE9IDApIAotICAg
ICAgICBzaXplID0gZWxlbWVudF9zaXplOwotICAgICAgZWxzZQotICAgICAgICBzaXplID0gcmVx
dWVzdDJzaXplKHNpemVzW2ldKTsgICAgICAgICAgCi0gICAgICByZW1haW5kZXJfc2l6ZSAtPSBz
aXplOwotICAgICAgc2V0X2hlYWQocCwgc2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgcCA9IGNo
dW5rX2F0X29mZnNldChwLCBzaXplKTsKLSAgICB9Ci0gICAgZWxzZSB7IC8qIHRoZSBmaW5hbCBl
bGVtZW50IGFic29yYnMgYW55IG92ZXJhbGxvY2F0aW9uIHNsb3AgKi8KLSAgICAgIHNldF9oZWFk
KHAsIHJlbWFpbmRlcl9zaXplIHwgUFJFVl9JTlVTRSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0g
IH0KLQotI2lmIERFQlVHCi0gIGlmIChtYXJyYXkgIT0gY2h1bmtzKSB7Ci0gICAgLyogZmluYWwg
ZWxlbWVudCBtdXN0IGhhdmUgZXhhY3RseSBleGhhdXN0ZWQgY2h1bmsgKi8KLSAgICBpZiAoZWxl
bWVudF9zaXplICE9IDApIAotICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IGVsZW1lbnRf
c2l6ZSk7Ci0gICAgZWxzZQotICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IHJlcXVlc3Qy
c2l6ZShzaXplc1tpXSkpOwotICAgIGNoZWNrX2ludXNlX2NodW5rKG1lbTJjaHVuayhtYXJyYXkp
KTsKLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQotICAgIGNoZWNr
X2ludXNlX2NodW5rKG1lbTJjaHVuayhtYXJyYXlbaV0pKTsKLSNlbmRpZgotCi0gIHJldHVybiBt
YXJyYXk7Ci19Ci0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHZhbGxv
YyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpZiBfX1NURF9DCi1Wb2lk
X3QqIHZBTExPYyhzaXplX3QgYnl0ZXMpCi0jZWxzZQotVm9pZF90KiB2QUxMT2MoYnl0ZXMpIHNp
emVfdCBieXRlczsKLSNlbmRpZgotewotICAvKiBFbnN1cmUgaW5pdGlhbGl6YXRpb24gKi8KLSAg
bXN0YXRlIGF2ID0gZ2V0X21hbGxvY19zdGF0ZSgpOwotICBpZiAoYXYtPm1heF9mYXN0ID09IDAp
IG1hbGxvY19jb25zb2xpZGF0ZShhdik7Ci0gIHJldHVybiBtRU1BTElHbihhdi0+cGFnZXNpemUs
IGJ5dGVzKTsKLX0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHB2YWxs
b2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0KLSNpZiBfX1NURF9DCi1W
b2lkX3QqIHBWQUxMT2Moc2l6ZV90IGJ5dGVzKQotI2Vsc2UKLVZvaWRfdCogcFZBTExPYyhieXRl
cykgc2l6ZV90IGJ5dGVzOwotI2VuZGlmCi17Ci0gIG1zdGF0ZSBhdiA9IGdldF9tYWxsb2Nfc3Rh
dGUoKTsKLSAgc2l6ZV90IHBhZ2VzejsKLQotICAvKiBFbnN1cmUgaW5pdGlhbGl6YXRpb24gKi8K
LSAgaWYgKGF2LT5tYXhfZmFzdCA9PSAwKSBtYWxsb2NfY29uc29saWRhdGUoYXYpOwotICBwYWdl
c3ogPSBhdi0+cGFnZXNpemU7Ci0gIHJldHVybiBtRU1BTElHbihwYWdlc3osIChieXRlcyArIHBh
Z2VzeiAtIDEpICYgfihwYWdlc3ogLSAxKSk7Ci19Ci0gICAKLQotLyoKLSAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvY190cmltIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotKi8KLQotI2lmIF9fU1REX0MKLWludCBtVFJJbShzaXplX3QgcGFkKQotI2Vsc2UKLWlu
dCBtVFJJbShwYWQpIHNpemVfdCBwYWQ7Ci0jZW5kaWYKLXsKLSAgbXN0YXRlIGF2ID0gZ2V0X21h
bGxvY19zdGF0ZSgpOwotICAvKiBFbnN1cmUgaW5pdGlhbGl6YXRpb24vY29uc29saWRhdGlvbiAq
LwotICBtYWxsb2NfY29uc29saWRhdGUoYXYpOwotCi0jaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9U
UklNICAgICAgICAKLSAgcmV0dXJuIHNZU1RSSW0ocGFkLCBhdik7Ci0jZWxzZQotICByZXR1cm4g
MDsKLSNlbmRpZgotfQotCi0KLS8qCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9j
X3VzYWJsZV9zaXplIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpZiBfX1NURF9D
Ci1zaXplX3QgbVVTQUJMZShWb2lkX3QqIG1lbSkKLSNlbHNlCi1zaXplX3QgbVVTQUJMZShtZW0p
IFZvaWRfdCogbWVtOwotI2VuZGlmCi17Ci0gIG1jaHVua3B0ciBwOwotICBpZiAobWVtICE9IDAp
IHsKLSAgICBwID0gbWVtMmNodW5rKG1lbSk7Ci0gICAgaWYgKGNodW5rX2lzX21tYXBwZWQocCkp
Ci0gICAgICByZXR1cm4gY2h1bmtzaXplKHApIC0gMipTSVpFX1NaOwotICAgIGVsc2UgaWYgKGlu
dXNlKHApKQotICAgICAgcmV0dXJuIGNodW5rc2l6ZShwKSAtIFNJWkVfU1o7Ci0gIH0KLSAgcmV0
dXJuIDA7Ci19Ci0KLS8qCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxsaW5m
byAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLXN0cnVjdCBtYWxsaW5mbyBt
QUxMSU5GbygpCi17Ci0gIG1zdGF0ZSBhdiA9IGdldF9tYWxsb2Nfc3RhdGUoKTsKLSAgc3RydWN0
IG1hbGxpbmZvIG1pOwotICB1bnNpZ25lZCBpbnQgaTsKLSAgbWJpbnB0ciBiOwotICBtY2h1bmtw
dHIgcDsKLSAgSU5URVJOQUxfU0laRV9UIGF2YWlsOwotICBJTlRFUk5BTF9TSVpFX1QgZmFzdGF2
YWlsOwotICBpbnQgbmJsb2NrczsKLSAgaW50IG5mYXN0YmxvY2tzOwotCi0gIC8qIEVuc3VyZSBp
bml0aWFsaXphdGlvbiAqLwotICBpZiAoYXYtPnRvcCA9PSAwKSAgbWFsbG9jX2NvbnNvbGlkYXRl
KGF2KTsKLQotICBjaGVja19tYWxsb2Nfc3RhdGUoKTsKLQotICAvKiBBY2NvdW50IGZvciB0b3Ag
Ki8KLSAgYXZhaWwgPSBjaHVua3NpemUoYXYtPnRvcCk7Ci0gIG5ibG9ja3MgPSAxOyAgLyogdG9w
IGFsd2F5cyBleGlzdHMgKi8KLQotICAvKiB0cmF2ZXJzZSBmYXN0YmlucyAqLwotICBuZmFzdGJs
b2NrcyA9IDA7Ci0gIGZhc3RhdmFpbCA9IDA7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE5GQVNUQklO
UzsgKytpKSB7Ci0gICAgZm9yIChwID0gYXYtPmZhc3RiaW5zW2ldOyBwICE9IDA7IHAgPSBwLT5m
ZCkgewotICAgICAgKytuZmFzdGJsb2NrczsKLSAgICAgIGZhc3RhdmFpbCArPSBjaHVua3NpemUo
cCk7Ci0gICAgfQotICB9Ci0KLSAgYXZhaWwgKz0gZmFzdGF2YWlsOwotCi0gIC8qIHRyYXZlcnNl
IHJlZ3VsYXIgYmlucyAqLwotICBmb3IgKGkgPSAxOyBpIDwgTkJJTlM7ICsraSkgewotICAgIGIg
PSBiaW5fYXQoYXYsIGkpOwotICAgIGZvciAocCA9IGxhc3QoYik7IHAgIT0gYjsgcCA9IHAtPmJr
KSB7Ci0gICAgICArK25ibG9ja3M7Ci0gICAgICBhdmFpbCArPSBjaHVua3NpemUocCk7Ci0gICAg
fQotICB9Ci0KLSAgbWkuc21ibGtzID0gbmZhc3RibG9ja3M7Ci0gIG1pLm9yZGJsa3MgPSBuYmxv
Y2tzOwotICBtaS5mb3JkYmxrcyA9IGF2YWlsOwotICBtaS51b3JkYmxrcyA9IGF2LT5zYnJrZWRf
bWVtIC0gYXZhaWw7Ci0gIG1pLmFyZW5hID0gYXYtPnNicmtlZF9tZW07Ci0gIG1pLmhibGtzID0g
YXYtPm5fbW1hcHM7Ci0gIG1pLmhibGtoZCA9IGF2LT5tbWFwcGVkX21lbTsKLSAgbWkuZnNtYmxr
cyA9IGZhc3RhdmFpbDsKLSAgbWkua2VlcGNvc3QgPSBjaHVua3NpemUoYXYtPnRvcCk7Ci0gIG1p
LnVzbWJsa3MgPSBhdi0+bWF4X3RvdGFsX21lbTsKLSAgcmV0dXJuIG1pOwotfQotCi0vKgotICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9jX3N0YXRzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotKi8KLQotdm9pZCBtU1RBVHMoKQotewotICBzdHJ1Y3QgbWFsbGlu
Zm8gbWkgPSBtQUxMSU5GbygpOwotCi0jaWZkZWYgV0lOMzIKLSAgewotICAgIENIVU5LX1NJWkVf
VCAgZnJlZSwgcmVzZXJ2ZWQsIGNvbW1pdHRlZDsKLSAgICB2bWluZm8gKCZmcmVlLCAmcmVzZXJ2
ZWQsICZjb21taXR0ZWQpOwotICAgIGZwcmludGYoc3RkZXJyLCAiZnJlZSBieXRlcyAgICAgICA9
ICUxMGx1XG4iLCAKLSAgICAgICAgICAgIGZyZWUpOwotICAgIGZwcmludGYoc3RkZXJyLCAicmVz
ZXJ2ZWQgYnl0ZXMgICA9ICUxMGx1XG4iLCAKLSAgICAgICAgICAgIHJlc2VydmVkKTsKLSAgICBm
cHJpbnRmKHN0ZGVyciwgImNvbW1pdHRlZCBieXRlcyAgPSAlMTBsdVxuIiwgCi0gICAgICAgICAg
ICBjb21taXR0ZWQpOwotICB9Ci0jZW5kaWYKLQotCi0gIGZwcmludGYoc3RkZXJyLCAibWF4IHN5
c3RlbSBieXRlcyA9ICUxMGx1XG4iLAotICAgICAgICAgIChDSFVOS19TSVpFX1QpKG1pLnVzbWJs
a3MpKTsKLSAgZnByaW50ZihzdGRlcnIsICJzeXN0ZW0gYnl0ZXMgICAgID0gJTEwbHVcbiIsCi0g
ICAgICAgICAgKENIVU5LX1NJWkVfVCkobWkuYXJlbmEgKyBtaS5oYmxraGQpKTsKLSAgZnByaW50
ZihzdGRlcnIsICJpbiB1c2UgYnl0ZXMgICAgID0gJTEwbHVcbiIsCi0gICAgICAgICAgKENIVU5L
X1NJWkVfVCkobWkudW9yZGJsa3MgKyBtaS5oYmxraGQpKTsKLQotI2lmZGVmIFdJTjMyIAotICB7
Ci0gICAgQ0hVTktfU0laRV9UICBrZXJuZWwsIHVzZXI7Ci0gICAgaWYgKGNwdWluZm8gKFRSVUUs
ICZrZXJuZWwsICZ1c2VyKSkgewotICAgICAgZnByaW50ZihzdGRlcnIsICJrZXJuZWwgbXMgICAg
ICAgID0gJTEwbHVcbiIsIAotICAgICAgICAgICAgICBrZXJuZWwpOwotICAgICAgZnByaW50Zihz
dGRlcnIsICJ1c2VyIG1zICAgICAgICAgID0gJTEwbHVcbiIsIAotICAgICAgICAgICAgICB1c2Vy
KTsKLSAgICB9Ci0gIH0KLSNlbmRpZgotfQotCi0KLS8qCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBtYWxsb3B0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQot
I2lmIF9fU1REX0MKLWludCBtQUxMT1B0KGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkKLSNl
bHNlCi1pbnQgbUFMTE9QdChwYXJhbV9udW1iZXIsIHZhbHVlKSBpbnQgcGFyYW1fbnVtYmVyOyBp
bnQgdmFsdWU7Ci0jZW5kaWYKLXsKLSAgbXN0YXRlIGF2ID0gZ2V0X21hbGxvY19zdGF0ZSgpOwot
ICAvKiBFbnN1cmUgaW5pdGlhbGl6YXRpb24vY29uc29saWRhdGlvbiAqLwotICBtYWxsb2NfY29u
c29saWRhdGUoYXYpOwotCi0gIHN3aXRjaChwYXJhbV9udW1iZXIpIHsKLSAgY2FzZSBNX01YRkFT
VDoKLSAgICBpZiAodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSBNQVhfRkFTVF9TSVpFKSB7Ci0gICAg
ICBzZXRfbWF4X2Zhc3QoYXYsIHZhbHVlKTsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBl
bHNlCi0gICAgICByZXR1cm4gMDsKLQotICBjYXNlIE1fVFJJTV9USFJFU0hPTEQ6Ci0gICAgYXYt
PnRyaW1fdGhyZXNob2xkID0gdmFsdWU7Ci0gICAgcmV0dXJuIDE7Ci0KLSAgY2FzZSBNX1RPUF9Q
QUQ6Ci0gICAgYXYtPnRvcF9wYWQgPSB2YWx1ZTsKLSAgICByZXR1cm4gMTsKLQotICBjYXNlIE1f
TU1BUF9USFJFU0hPTEQ6Ci0gICAgYXYtPm1tYXBfdGhyZXNob2xkID0gdmFsdWU7Ci0gICAgcmV0
dXJuIDE7Ci0KLSAgY2FzZSBNX01NQVBfTUFYOgotI2lmICFIQVZFX01NQVAKLSAgICBpZiAodmFs
dWUgIT0gMCkKLSAgICAgIHJldHVybiAwOwotI2VuZGlmCi0gICAgYXYtPm5fbW1hcHNfbWF4ID0g
dmFsdWU7Ci0gICAgcmV0dXJuIDE7Ci0KLSAgZGVmYXVsdDoKLSAgICByZXR1cm4gMDsKLSAgfQot
fQotCi0KLS8qIAotICAtLS0tLS0tLS0tLS0tLS0tLS0tLSBBbHRlcm5hdGl2ZSBNT1JFQ09SRSBm
dW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLQotLyoKLSAgR2VuZXJhbCBSZXF1
aXJlbWVudHMgZm9yIE1PUkVDT1JFLgotCi0gIFRoZSBNT1JFQ09SRSBmdW5jdGlvbiBtdXN0IGhh
dmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotCi0gIElmIE1PUkVDT1JFX0NPTlRJR1VPVVMg
aXMgZmFsc2U6Ci0KLSAgICAqIE1PUkVDT1JFIG11c3QgYWxsb2NhdGUgaW4gbXVsdGlwbGVzIG9m
IHBhZ2VzaXplLiBJdCB3aWxsCi0gICAgICBvbmx5IGJlIGNhbGxlZCB3aXRoIGFyZ3VtZW50cyB0
aGF0IGFyZSBtdWx0aXBsZXMgb2YgcGFnZXNpemUuCi0KLSAgICAqIE1PUkVDT1JFKDApIG11c3Qg
cmV0dXJuIGFuIGFkZHJlc3MgdGhhdCBpcyBhdCBsZWFzdCAKLSAgICAgIE1BTExPQ19BTElHTk1F
TlQgYWxpZ25lZC4gKFBhZ2UtYWxpZ25pbmcgYWx3YXlzIHN1ZmZpY2VzLikKLQotICBlbHNlIChp
LmUuIElmIE1PUkVDT1JFX0NPTlRJR1VPVVMgaXMgdHJ1ZSk6Ci0KLSAgICAqIENvbnNlY3V0aXZl
IGNhbGxzIHRvIE1PUkVDT1JFIHdpdGggcG9zaXRpdmUgYXJndW1lbnRzCi0gICAgICByZXR1cm4g
aW5jcmVhc2luZyBhZGRyZXNzZXMsIGluZGljYXRpbmcgdGhhdCBzcGFjZSBoYXMgYmVlbgotICAg
ICAgY29udGlndW91c2x5IGV4dGVuZGVkLiAKLQotICAgICogTU9SRUNPUkUgbmVlZCBub3QgYWxs
b2NhdGUgaW4gbXVsdGlwbGVzIG9mIHBhZ2VzaXplLgotICAgICAgQ2FsbHMgdG8gTU9SRUNPUkUg
bmVlZCBub3QgaGF2ZSBhcmdzIG9mIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4KLQotICAgICogTU9S
RUNPUkUgbmVlZCBub3QgcGFnZS1hbGlnbi4KLQotICBJbiBlaXRoZXIgY2FzZToKLQotICAgICog
TU9SRUNPUkUgbWF5IGFsbG9jYXRlIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkLiAoT3IgZXZl
biBsZXNzLAotICAgICAgYnV0IHRoaXMgd2lsbCBnZW5lcmFsbHkgcmVzdWx0IGluIGEgbWFsbG9j
IGZhaWx1cmUuKQotCi0gICAgKiBNT1JFQ09SRSBtdXN0IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2hl
biBnaXZlbiBhcmd1bWVudCB6ZXJvLCBidXQKLSAgICAgIGluc3RlYWQgcmV0dXJuIG9uZSBwYXN0
IHRoZSBlbmQgYWRkcmVzcyBvZiBtZW1vcnkgZnJvbSBwcmV2aW91cwotICAgICAgbm9uemVybyBj
YWxsLiBUaGlzIG1hbGxvYyBkb2VzIE5PVCBjYWxsIE1PUkVDT1JFKDApCi0gICAgICB1bnRpbCBh
dCBsZWFzdCBvbmUgY2FsbCB3aXRoIHBvc2l0aXZlIGFyZ3VtZW50cyBpcyBtYWRlLCBzbwotICAg
ICAgdGhlIGluaXRpYWwgdmFsdWUgcmV0dXJuZWQgaXMgbm90IGltcG9ydGFudC4KLQotICAgICog
RXZlbiB0aG91Z2ggY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgbmVlZCBub3QgcmV0dXJu
IGNvbnRpZ3VvdXMKLSAgICAgIGFkZHJlc3NlcywgaXQgbXVzdCBiZSBPSyBmb3IgbWFsbG9jJ2Vk
IGNodW5rcyB0byBzcGFuIG11bHRpcGxlCi0gICAgICByZWdpb25zIGluIHRob3NlIGNhc2VzIHdo
ZXJlIHRoZXkgZG8gaGFwcGVuIHRvIGJlIGNvbnRpZ3VvdXMuCi0KLSAgICAqIE1PUkVDT1JFIG5l
ZWQgbm90IGhhbmRsZSBuZWdhdGl2ZSBhcmd1bWVudHMgLS0gaXQgbWF5IGluc3RlYWQKLSAgICAg
IGp1c3QgcmV0dXJuIE1PUkVDT1JFX0ZBSUxVUkUgd2hlbiBnaXZlbiBuZWdhdGl2ZSBhcmd1bWVu
dHMuCi0gICAgICBOZWdhdGl2ZSBhcmd1bWVudHMgYXJlIGFsd2F5cyBtdWx0aXBsZXMgb2YgcGFn
ZXNpemUuIE1PUkVDT1JFCi0gICAgICBtdXN0IG5vdCBtaXNpbnRlcnByZXQgbmVnYXRpdmUgYXJn
cyBhcyBsYXJnZSBwb3NpdGl2ZSB1bnNpZ25lZAotICAgICAgYXJncy4gWW91IGNhbiBzdXBwcmVz
cyBhbGwgc3VjaCBjYWxscyBmcm9tIGV2ZW4gb2NjdXJyaW5nIGJ5IGRlZmluaW5nCi0gICAgICBN
T1JFQ09SRV9DQU5OT1RfVFJJTSwKLQotICBUaGVyZSBpcyBzb21lIHZhcmlhdGlvbiBhY3Jvc3Mg
c3lzdGVtcyBhYm91dCB0aGUgdHlwZSBvZiB0aGUKLSAgYXJndW1lbnQgdG8gc2Jyay9NT1JFQ09S
RS4gSWYgc2l6ZV90IGlzIHVuc2lnbmVkLCB0aGVuIGl0IGNhbm5vdAotICBhY3R1YWxseSBiZSBz
aXplX3QsIGJlY2F1c2Ugc2JyayBzdXBwb3J0cyBuZWdhdGl2ZSBhcmdzLCBzbyBpdCBpcwotICBu
b3JtYWxseSB0aGUgc2lnbmVkIHR5cGUgb2YgdGhlIHNhbWUgd2lkdGggYXMgc2l6ZV90IChzb21l
dGltZXMKLSAgZGVjbGFyZWQgYXMgImludHB0cl90IiwgYW5kIHNvbWV0aW1lcyAicHRyZGlmZl90
IikuICBJdCBkb2Vzbid0IG11Y2gKLSAgbWF0dGVyIHRob3VnaC4gSW50ZXJuYWxseSwgd2UgdXNl
ICJsb25nIiBhcyBhcmd1bWVudHMsIHdoaWNoIHNob3VsZAotICB3b3JrIGFjcm9zcyBhbGwgcmVh
c29uYWJsZSBwb3NzaWJpbGl0aWVzLgotCi0gIEFkZGl0aW9uYWxseSwgaWYgTU9SRUNPUkUgZXZl
ciByZXR1cm5zIGZhaWx1cmUgZm9yIGEgcG9zaXRpdmUKLSAgcmVxdWVzdCwgYW5kIEhBVkVfTU1B
UCBpcyB0cnVlLCB0aGVuIG1tYXAgaXMgdXNlZCBhcyBhIG5vbmNvbnRpZ3VvdXMKLSAgc3lzdGVt
IGFsbG9jYXRvci4gVGhpcyBpcyBhIHVzZWZ1bCBiYWNrdXAgc3RyYXRlZ3kgZm9yIHN5c3RlbXMg
d2l0aAotICBob2xlcyBpbiBhZGRyZXNzIHNwYWNlcyAtLSBpbiB0aGlzIGNhc2Ugc2JyayBjYW5u
b3QgY29udGlndW91c2x5Ci0gIGV4cGFuZCB0aGUgaGVhcCwgYnV0IG1tYXAgbWF5IGJlIGFibGUg
dG8gbWFwIG5vbmNvbnRpZ3VvdXMgc3BhY2UuCi0KLSAgSWYgeW91J2QgbGlrZSBtbWFwIHRvIEFM
V0FZUyBiZSB1c2VkLCB5b3UgY2FuIGRlZmluZSBNT1JFQ09SRSB0byBiZQotICBhIGZ1bmN0aW9u
IHRoYXQgYWx3YXlzIHJldHVybnMgTU9SRUNPUkVfRkFJTFVSRS4KLQotICBNYWxsb2Mgb25seSBo
YXMgbGltaXRlZCBhYmlsaXR5IHRvIGRldGVjdCBmYWlsdXJlcyBvZiBNT1JFQ09SRQotICB0byBz
dXBwbHkgY29udGlndW91cyBzcGFjZSB3aGVuIGl0IHNheXMgaXQgY2FuLiBJbiBwYXJ0aWN1bGFy
LAotICBtdWx0aXRocmVhZGVkIHByb2dyYW1zIHRoYXQgZG8gbm90IHVzZSBsb2NrcyBtYXkgcmVz
dWx0IGluCi0gIHJlY2UgY29uZGl0aW9ucyBhY3Jvc3MgY2FsbHMgdG8gTU9SRUNPUkUgdGhhdCBy
ZXN1bHQgaW4gZ2FwcwotICB0aGF0IGNhbm5vdCBiZSBkZXRlY3RlZCBhcyBzdWNoLCBhbmQgc3Vi
c2VxdWVudCBjb3JydXB0aW9uLgotCi0gIElmIHlvdSBhcmUgdXNpbmcgdGhpcyBtYWxsb2Mgd2l0
aCBzb21ldGhpbmcgb3RoZXIgdGhhbiBzYnJrIChvciBpdHMKLSAgZW11bGF0aW9uKSB0byBzdXBw
bHkgbWVtb3J5IHJlZ2lvbnMsIHlvdSBwcm9iYWJseSB3YW50IHRvIHNldAotICBNT1JFQ09SRV9D
T05USUdVT1VTIGFzIGZhbHNlLiAgQXMgYW4gZXhhbXBsZSwgaGVyZSBpcyBhIGN1c3RvbQotICBh
bGxvY2F0b3Iga2luZGx5IGNvbnRyaWJ1dGVkIGZvciBwcmUtT1NYIG1hY09TLiAgSXQgdXNlcyB2
aXJ0dWFsbHkKLSAgYnV0IG5vdCBuZWNlc3NhcmlseSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbm9u
LXBhZ2VkIG1lbW9yeSAobG9ja2VkCi0gIGluLCBwcmVzZW50IGFuZCB3b24ndCBnZXQgc3dhcHBl
ZCBvdXQpLiAgWW91IGNhbiB1c2UgaXQgYnkKLSAgdW5jb21tZW50aW5nIHRoaXMgc2VjdGlvbiwg
YWRkaW5nIHNvbWUgI2luY2x1ZGVzLCBhbmQgc2V0dGluZyB1cCB0aGUKLSAgYXBwcm9wcmlhdGUg
ZGVmaW5lcyBhYm92ZToKLQotICAgICAgI2RlZmluZSBNT1JFQ09SRSBvc01vcmVDb3JlCi0gICAg
ICAjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMAotCi0gIFRoZXJlIGlzIGFsc28gYSBzaHV0
ZG93biByb3V0aW5lIHRoYXQgc2hvdWxkIHNvbWVob3cgYmUgY2FsbGVkIGZvcgotICBjbGVhbnVw
IHVwb24gcHJvZ3JhbSBleGl0LgotCi0gICNkZWZpbmUgTUFYX1BPT0xfRU5UUklFUyAxMDAKLSAg
I2RlZmluZSBNSU5JTVVNX01PUkVDT1JFX1NJWkUgICg2NCAqIDEwMjQpCi0gIHN0YXRpYyBpbnQg
bmV4dF9vc19wb29sOwotICB2b2lkICpvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107Ci0K
LSAgdm9pZCAqb3NNb3JlQ29yZShpbnQgc2l6ZSkKLSAgewotICAgIHZvaWQgKnB0ciA9IDA7Ci0g
ICAgc3RhdGljIHZvaWQgKnNicmtfdG9wID0gMDsKLQotICAgIGlmIChzaXplID4gMCkKLSAgICB7
Ci0gICAgICBpZiAoc2l6ZSA8IE1JTklNVU1fTU9SRUNPUkVfU0laRSkKLSAgICAgICAgIHNpemUg
PSBNSU5JTVVNX01PUkVDT1JFX1NJWkU7Ci0gICAgICBpZiAoQ3VycmVudEV4ZWN1dGlvbkxldmVs
KCkgPT0ga1Rhc2tMZXZlbCkKLSAgICAgICAgIHB0ciA9IFBvb2xBbGxvY2F0ZVJlc2lkZW50KHNp
emUgKyBSTV9QQUdFX1NJWkUsIDApOwotICAgICAgaWYgKHB0ciA9PSAwKQotICAgICAgewotICAg
ICAgICByZXR1cm4gKHZvaWQgKikgTU9SRUNPUkVfRkFJTFVSRTsKLSAgICAgIH0KLSAgICAgIC8v
IHNhdmUgcHRycyBzbyB0aGV5IGNhbiBiZSBmcmVlZCBkdXJpbmcgY2xlYW51cAotICAgICAgb3Vy
X29zX3Bvb2xzW25leHRfb3NfcG9vbF0gPSBwdHI7Ci0gICAgICBuZXh0X29zX3Bvb2wrKzsKLSAg
ICAgIHB0ciA9ICh2b2lkICopICgoKChDSFVOS19TSVpFX1QpIHB0cikgKyBSTV9QQUdFX01BU0sp
ICYgflJNX1BBR0VfTUFTSyk7Ci0gICAgICBzYnJrX3RvcCA9IChjaGFyICopIHB0ciArIHNpemU7
Ci0gICAgICByZXR1cm4gcHRyOwotICAgIH0KLSAgICBlbHNlIGlmIChzaXplIDwgMCkKLSAgICB7
Ci0gICAgICAvLyB3ZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBzaHJpbmsgYmVoYXZpb3IKLSAg
ICAgIHJldHVybiAodm9pZCAqKSBNT1JFQ09SRV9GQUlMVVJFOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgcmV0dXJuIHNicmtfdG9wOwotICAgIH0KLSAgfQotCi0gIC8vIGNsZWFudXAg
YW55IGFsbG9jYXRlZCBtZW1vcnkgcG9vbHMKLSAgLy8gY2FsbGVkIGFzIGxhc3QgdGhpbmcgYmVm
b3JlIHNodXR0aW5nIGRvd24gZHJpdmVyCi0KLSAgdm9pZCBvc0NsZWFudXBNZW0odm9pZCkKLSAg
ewotICAgIHZvaWQgKipwdHI7Ci0KLSAgICBmb3IgKHB0ciA9IG91cl9vc19wb29sczsgcHRyIDwg
Jm91cl9vc19wb29sc1tNQVhfUE9PTF9FTlRSSUVTXTsgcHRyKyspCi0gICAgICBpZiAoKnB0cikK
LSAgICAgIHsKLSAgICAgICAgIFBvb2xEZWFsbG9jYXRlKCpwdHIpOwotICAgICAgICAgKnB0ciA9
IDA7Ci0gICAgICB9Ci0gIH0KLQotKi8KLQotCi0vKiAKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0KLSAgRW11bGF0aW9u
IG9mIHNicmsgZm9yIHdpbjMyLiAKLSAgRG9uYXRlZCBieSBKLiBXYWx0ZXIgPFdhbHRlckBHZU5l
U3lzLWUuZGU+LgotICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvZGUs
IGFuZCBtYWxsb2Mgb24gV2luMzIsIHNlZSAKLSAgICAgaHR0cDovL3d3dy5nZW5lc3lzLWUuZGUv
andhbHRlci8KLSovCi0KLQotI2lmZGVmIFdJTjMyCi0KLSNpZmRlZiBfREVCVUcKLS8qICNkZWZp
bmUgVFJBQ0UgKi8KLSNlbmRpZgotCi0vKiBTdXBwb3J0IGZvciBVU0VfTUFMTE9DX0xPQ0sgKi8K
LSNpZmRlZiBVU0VfTUFMTE9DX0xPQ0sKLQotLyogV2FpdCBmb3Igc3BpbiBsb2NrICovCi1zdGF0
aWMgaW50IHNsd2FpdCAoaW50ICpzbCkgewotICAgIHdoaWxlIChJbnRlcmxvY2tlZENvbXBhcmVF
eGNoYW5nZSAoKHZvaWQgKiopIHNsLCAodm9pZCAqKSAxLCAodm9pZCAqKSAwKSAhPSAwKSAKLQkg
ICAgU2xlZXAgKDApOwotICAgIHJldHVybiAwOwotfQotCi0vKiBSZWxlYXNlIHNwaW4gbG9jayAq
Lwotc3RhdGljIGludCBzbHJlbGVhc2UgKGludCAqc2wpIHsKLSAgICBJbnRlcmxvY2tlZEV4Y2hh
bmdlIChzbCwgMCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBORUVERUQKLS8qIFNwaW4g
bG9jayBmb3IgZW11bGF0aW9uIGNvZGUgKi8KLXN0YXRpYyBpbnQgZ19zbDsKLSNlbmRpZgotCi0j
ZW5kaWYgLyogVVNFX01BTExPQ19MT0NLICovCi0KLS8qIGdldHBhZ2VzaXplIGZvciB3aW5kb3dz
ICovCi1zdGF0aWMgbG9uZyBnZXRwYWdlc2l6ZSAodm9pZCkgewotICAgIHN0YXRpYyBsb25nIGdf
cGFnZXNpemUgPSAwOwotICAgIGlmICghIGdfcGFnZXNpemUpIHsKLSAgICAgICAgU1lTVEVNX0lO
Rk8gc3lzdGVtX2luZm87Ci0gICAgICAgIEdldFN5c3RlbUluZm8gKCZzeXN0ZW1faW5mbyk7Ci0g
ICAgICAgIGdfcGFnZXNpemUgPSBzeXN0ZW1faW5mby5kd1BhZ2VTaXplOwotICAgIH0KLSAgICBy
ZXR1cm4gZ19wYWdlc2l6ZTsKLX0KLXN0YXRpYyBsb25nIGdldHJlZ2lvbnNpemUgKHZvaWQpIHsK
LSAgICBzdGF0aWMgbG9uZyBnX3JlZ2lvbnNpemUgPSAwOwotICAgIGlmICghIGdfcmVnaW9uc2l6
ZSkgewotICAgICAgICBTWVNURU1fSU5GTyBzeXN0ZW1faW5mbzsKLSAgICAgICAgR2V0U3lzdGVt
SW5mbyAoJnN5c3RlbV9pbmZvKTsKLSAgICAgICAgZ19yZWdpb25zaXplID0gc3lzdGVtX2luZm8u
ZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHk7Ci0gICAgfQotICAgIHJldHVybiBnX3JlZ2lvbnNpemU7
Ci19Ci0KLS8qIEEgcmVnaW9uIGxpc3QgZW50cnkgKi8KLXR5cGVkZWYgc3RydWN0IF9yZWdpb25f
bGlzdF9lbnRyeSB7Ci0gICAgdm9pZCAqdG9wX2FsbG9jYXRlZDsKLSAgICB2b2lkICp0b3BfY29t
bWl0dGVkOwotICAgIHZvaWQgKnRvcF9yZXNlcnZlZDsKLSAgICBsb25nIHJlc2VydmVfc2l6ZTsK
LSAgICBzdHJ1Y3QgX3JlZ2lvbl9saXN0X2VudHJ5ICpwcmV2aW91czsKLX0gcmVnaW9uX2xpc3Rf
ZW50cnk7Ci0KLS8qIEFsbG9jYXRlIGFuZCBsaW5rIGEgcmVnaW9uIGVudHJ5IGluIHRoZSByZWdp
b24gbGlzdCAqLwotc3RhdGljIGludCByZWdpb25fbGlzdF9hcHBlbmQgKHJlZ2lvbl9saXN0X2Vu
dHJ5ICoqbGFzdCwgdm9pZCAqYmFzZV9yZXNlcnZlZCwgbG9uZyByZXNlcnZlX3NpemUpIHsKLSAg
ICByZWdpb25fbGlzdF9lbnRyeSAqbmV4dCA9IEhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCks
IDAsIHNpemVvZiAocmVnaW9uX2xpc3RfZW50cnkpKTsKLSAgICBpZiAoISBuZXh0KQotICAgICAg
ICByZXR1cm4gRkFMU0U7Ci0gICAgbmV4dC0+dG9wX2FsbG9jYXRlZCA9IChjaGFyICopIGJhc2Vf
cmVzZXJ2ZWQ7Ci0gICAgbmV4dC0+dG9wX2NvbW1pdHRlZCA9IChjaGFyICopIGJhc2VfcmVzZXJ2
ZWQ7Ci0gICAgbmV4dC0+dG9wX3Jlc2VydmVkID0gKGNoYXIgKikgYmFzZV9yZXNlcnZlZCArIHJl
c2VydmVfc2l6ZTsKLSAgICBuZXh0LT5yZXNlcnZlX3NpemUgPSByZXNlcnZlX3NpemU7Ci0gICAg
bmV4dC0+cHJldmlvdXMgPSAqbGFzdDsKLSAgICAqbGFzdCA9IG5leHQ7Ci0gICAgcmV0dXJuIFRS
VUU7Ci19Ci0vKiBGcmVlIGFuZCB1bmxpbmsgdGhlIGxhc3QgcmVnaW9uIGVudHJ5IGZyb20gdGhl
IHJlZ2lvbiBsaXN0ICovCi1zdGF0aWMgaW50IHJlZ2lvbl9saXN0X3JlbW92ZSAocmVnaW9uX2xp
c3RfZW50cnkgKipsYXN0KSB7Ci0gICAgcmVnaW9uX2xpc3RfZW50cnkgKnByZXZpb3VzID0gKCps
YXN0KS0+cHJldmlvdXM7Ci0gICAgaWYgKCEgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCBz
aXplb2YgKHJlZ2lvbl9saXN0X2VudHJ5KSwgKmxhc3QpKQotICAgICAgICByZXR1cm4gRkFMU0U7
Ci0gICAgKmxhc3QgPSBwcmV2aW91czsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotI2RlZmluZSBD
RUlMKHNpemUsdG8pCSgoKHNpemUpKyh0byktMSkmfigodG8pLTEpKQotI2RlZmluZSBGTE9PUihz
aXplLHRvKQkoKHNpemUpJn4oKHRvKS0xKSkKLQotI2RlZmluZSBTQlJLX1NDQUxFICAwCi0vKiAj
ZGVmaW5lIFNCUktfU0NBTEUgIDEgKi8KLS8qICNkZWZpbmUgU0JSS19TQ0FMRSAgMiAqLwotLyog
I2RlZmluZSBTQlJLX1NDQUxFICA0ICAqLwotCi0vKiBzYnJrIGZvciB3aW5kb3dzICovCi1zdGF0
aWMgdm9pZCAqc2JyayAobG9uZyBzaXplKSB7Ci0gICAgc3RhdGljIGxvbmcgZ19wYWdlc2l6ZSwg
Z19teV9wYWdlc2l6ZTsKLSAgICBzdGF0aWMgbG9uZyBnX3JlZ2lvbnNpemUsIGdfbXlfcmVnaW9u
c2l6ZTsKLSAgICBzdGF0aWMgcmVnaW9uX2xpc3RfZW50cnkgKmdfbGFzdDsKLSAgICB2b2lkICpy
ZXN1bHQgPSAodm9pZCAqKSBNT1JFQ09SRV9GQUlMVVJFOwotI2lmZGVmIFRSQUNFCi0gICAgcHJp
bnRmICgic2JyayAlZFxuIiwgc2l6ZSk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkIChVU0VfTUFMTE9D
X0xPQ0spICYmIGRlZmluZWQgKE5FRURFRCkKLSAgICAvKiBXYWl0IGZvciBzcGluIGxvY2sgKi8K
LSAgICBzbHdhaXQgKCZnX3NsKTsKLSNlbmRpZgotICAgIC8qIEZpcnN0IHRpbWUgaW5pdGlhbGl6
YXRpb24gKi8KLSAgICBpZiAoISBnX3BhZ2VzaXplKSB7Ci0gICAgICAgIGdfcGFnZXNpemUgPSBn
ZXRwYWdlc2l6ZSAoKTsKLSAgICAgICAgZ19teV9wYWdlc2l6ZSA9IGdfcGFnZXNpemUgPDwgU0JS
S19TQ0FMRTsKLSAgICB9Ci0gICAgaWYgKCEgZ19yZWdpb25zaXplKSB7Ci0gICAgICAgIGdfcmVn
aW9uc2l6ZSA9IGdldHJlZ2lvbnNpemUgKCk7Ci0gICAgICAgIGdfbXlfcmVnaW9uc2l6ZSA9IGdf
cmVnaW9uc2l6ZSA8PCBTQlJLX1NDQUxFOwotICAgIH0KLSAgICBpZiAoISBnX2xhc3QpIHsKLSAg
ICAgICAgaWYgKCEgcmVnaW9uX2xpc3RfYXBwZW5kICgmZ19sYXN0LCAwLCAwKSkgCi0gICAgICAg
ICAgIGdvdG8gc2Jya19leGl0OwotICAgIH0KLSAgICAvKiBBc3NlcnQgaW52YXJpYW50cyAqLwot
ICAgIGFzc2VydCAoZ19sYXN0KTsKLSAgICBhc3NlcnQgKChjaGFyICopIGdfbGFzdC0+dG9wX3Jl
c2VydmVkIC0gZ19sYXN0LT5yZXNlcnZlX3NpemUgPD0gKGNoYXIgKikgZ19sYXN0LT50b3BfYWxs
b2NhdGVkICYmCi0gICAgICAgICAgICBnX2xhc3QtPnRvcF9hbGxvY2F0ZWQgPD0gZ19sYXN0LT50
b3BfY29tbWl0dGVkKTsKLSAgICBhc3NlcnQgKChjaGFyICopIGdfbGFzdC0+dG9wX3Jlc2VydmVk
IC0gZ19sYXN0LT5yZXNlcnZlX3NpemUgPD0gKGNoYXIgKikgZ19sYXN0LT50b3BfY29tbWl0dGVk
ICYmCi0gICAgICAgICAgICBnX2xhc3QtPnRvcF9jb21taXR0ZWQgPD0gZ19sYXN0LT50b3BfcmVz
ZXJ2ZWQgJiYKLSAgICAgICAgICAgICh1bnNpZ25lZCkgZ19sYXN0LT50b3BfY29tbWl0dGVkICUg
Z19wYWdlc2l6ZSA9PSAwKTsKLSAgICBhc3NlcnQgKCh1bnNpZ25lZCkgZ19sYXN0LT50b3BfcmVz
ZXJ2ZWQgJSBnX3JlZ2lvbnNpemUgPT0gMCk7Ci0gICAgYXNzZXJ0ICgodW5zaWduZWQpIGdfbGFz
dC0+cmVzZXJ2ZV9zaXplICUgZ19yZWdpb25zaXplID09IDApOwotICAgIC8qIEFsbG9jYXRpb24g
cmVxdWVzdGVkPyAqLwotICAgIGlmIChzaXplID49IDApIHsKLSAgICAgICAgLyogQWxsb2NhdGlv
biBzaXplIGlzIHRoZSByZXF1ZXN0ZWQgc2l6ZSAqLwotICAgICAgICBsb25nIGFsbG9jYXRlX3Np
emUgPSBzaXplOwotICAgICAgICAvKiBDb21wdXRlIHRoZSBzaXplIHRvIGNvbW1pdCAqLwotICAg
ICAgICBsb25nIHRvX2NvbW1pdCA9IChjaGFyICopIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCArIGFs
bG9jYXRlX3NpemUgLSAoY2hhciAqKSBnX2xhc3QtPnRvcF9jb21taXR0ZWQ7Ci0gICAgICAgIC8q
IERvIHdlIHJlYWNoIHRoZSBjb21taXQgbGltaXQ/ICovCi0gICAgICAgIGlmICh0b19jb21taXQg
PiAwKSB7Ci0gICAgICAgICAgICAvKiBSb3VuZCBzaXplIHRvIGNvbW1pdCAqLwotICAgICAgICAg
ICAgbG9uZyBjb21taXRfc2l6ZSA9IENFSUwgKHRvX2NvbW1pdCwgZ19teV9wYWdlc2l6ZSk7Ci0g
ICAgICAgICAgICAvKiBDb21wdXRlIHRoZSBzaXplIHRvIHJlc2VydmUgKi8KLSAgICAgICAgICAg
IGxvbmcgdG9fcmVzZXJ2ZSA9IChjaGFyICopIGdfbGFzdC0+dG9wX2NvbW1pdHRlZCArIGNvbW1p
dF9zaXplIC0gKGNoYXIgKikgZ19sYXN0LT50b3BfcmVzZXJ2ZWQ7Ci0gICAgICAgICAgICAvKiBE
byB3ZSByZWFjaCB0aGUgcmVzZXJ2ZSBsaW1pdD8gKi8KLSAgICAgICAgICAgIGlmICh0b19yZXNl
cnZlID4gMCkgewotICAgICAgICAgICAgICAgIC8qIENvbXB1dGUgdGhlIHJlbWFpbmluZyBzaXpl
IHRvIGNvbW1pdCBpbiB0aGUgY3VycmVudCByZWdpb24gKi8KLSAgICAgICAgICAgICAgICBsb25n
IHJlbWFpbmluZ19jb21taXRfc2l6ZSA9IChjaGFyICopIGdfbGFzdC0+dG9wX3Jlc2VydmVkIC0g
KGNoYXIgKikgZ19sYXN0LT50b3BfY29tbWl0dGVkOwotICAgICAgICAgICAgICAgIGlmIChyZW1h
aW5pbmdfY29tbWl0X3NpemUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEFzc2VydCBw
cmVjb25kaXRpb25zICovCi0gICAgICAgICAgICAgICAgICAgIGFzc2VydCAoKHVuc2lnbmVkKSBn
X2xhc3QtPnRvcF9jb21taXR0ZWQgJSBnX3BhZ2VzaXplID09IDApOwotICAgICAgICAgICAgICAg
ICAgICBhc3NlcnQgKDAgPCByZW1haW5pbmdfY29tbWl0X3NpemUgJiYgcmVtYWluaW5nX2NvbW1p
dF9zaXplICUgZ19wYWdlc2l6ZSA9PSAwKTsgewotICAgICAgICAgICAgICAgICAgICAgICAgLyog
Q29tbWl0IHRoaXMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhc2VfY29tbWl0
dGVkID0gVmlydHVhbEFsbG9jIChnX2xhc3QtPnRvcF9jb21taXR0ZWQsIHJlbWFpbmluZ19jb21t
aXRfc2l6ZSwKLQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1fQ09N
TUlULCBQQUdFX1JFQURXUklURSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBy
ZXR1cm5lZCBwb2ludGVyIGZvciBjb25zaXN0ZW5jeSAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGJhc2VfY29tbWl0dGVkICE9IGdfbGFzdC0+dG9wX2NvbW1pdHRlZCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIHNicmtfZXhpdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8qIEFzc2VydCBwb3N0Y29uZGl0aW9ucyAqLwotICAgICAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0ICgodW5zaWduZWQpIGJhc2VfY29tbWl0dGVkICUgZ19wYWdlc2l6ZSA9PSAwKTsKLSNp
ZmRlZiBUUkFDRQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiQ29tbWl0ICVwICVk
XG4iLCBiYXNlX2NvbW1pdHRlZCwgcmVtYWluaW5nX2NvbW1pdF9zaXplKTsKLSNlbmRpZgotICAg
ICAgICAgICAgICAgICAgICAgICAgLyogQWRqdXN0IHRoZSByZWdpb25zIGNvbW1pdCB0b3AgKi8K
LSAgICAgICAgICAgICAgICAgICAgICAgIGdfbGFzdC0+dG9wX2NvbW1pdHRlZCA9IChjaGFyICop
IGJhc2VfY29tbWl0dGVkICsgcmVtYWluaW5nX2NvbW1pdF9zaXplOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vdyB3
ZSBhcmUgZ29pbmcgdG8gc2VhcmNoIGFuZCByZXNlcnZlLiAqLwotICAgICAgICAgICAgICAgICAg
ICBpbnQgY29udGlndW91cyA9IC0xOwotICAgICAgICAgICAgICAgICAgICBpbnQgZm91bmQgPSBG
QUxTRTsKLSAgICAgICAgICAgICAgICAgICAgTUVNT1JZX0JBU0lDX0lORk9STUFUSU9OIG1lbW9y
eV9pbmZvOwotICAgICAgICAgICAgICAgICAgICB2b2lkICpiYXNlX3Jlc2VydmVkOwotICAgICAg
ICAgICAgICAgICAgICBsb25nIHJlc2VydmVfc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgZG8g
ewotICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIGNvbnRpZ3VvdXMgbWVtb3J5ICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aWd1b3VzID0gVFJVRTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8qIFJvdW5kIHNpemUgdG8gcmVzZXJ2ZSAqLwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzZXJ2ZV9zaXplID0gQ0VJTCAodG9fcmVzZXJ2ZSwgZ19teV9yZWdpb25zaXpl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IHdpdGggdGhlIGN1cnJlbnQgcmVn
aW9uJ3MgdG9wICovCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfaW5mby5CYXNlQWRk
cmVzcyA9IGdfbGFzdC0+dG9wX3Jlc2VydmVkOwotICAgICAgICAgICAgICAgICAgICAgICAgLyog
QXNzZXJ0IHByZWNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCAo
KHVuc2lnbmVkKSBtZW1vcnlfaW5mby5CYXNlQWRkcmVzcyAlIGdfcGFnZXNpemUgPT0gMCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgKDAgPCByZXNlcnZlX3NpemUgJiYgcmVzZXJ2
ZV9zaXplICUgZ19yZWdpb25zaXplID09IDApOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKFZpcnR1YWxRdWVyeSAobWVtb3J5X2luZm8uQmFzZUFkZHJlc3MsICZtZW1vcnlfaW5mbywg
c2l6ZW9mIChtZW1vcnlfaW5mbykpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog
QXNzZXJ0IHBvc3Rjb25kaXRpb25zICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0ICgodW5zaWduZWQpIG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNzICUgZ19wYWdlc2l6ZSA9PSAw
KTsKLSNpZmRlZiBUUkFDRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIlF1
ZXJ5ICVwICVkICVzXG4iLCBtZW1vcnlfaW5mby5CYXNlQWRkcmVzcywgbWVtb3J5X2luZm8uUmVn
aW9uU2l6ZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfaW5m
by5TdGF0ZSA9PSBNRU1fRlJFRSA/ICJGUkVFIjogCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobWVtb3J5X2luZm8uU3RhdGUgPT0gTUVNX1JFU0VSVkUgPyAiUkVTRVJWRUQi
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZW1vcnlfaW5mby5TdGF0
ZSA9PSBNRU1fQ09NTUlUID8gIkNPTU1JVFRFRCI6ICI/IikpKTsKLSNlbmRpZgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIFJlZ2lvbiBpcyBmcmVlLCB3ZWxsIGFsaWduZWQgYW5kIGJp
ZyBlbm91Z2g6IHdlIGFyZSBkb25lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG1lbW9yeV9pbmZvLlN0YXRlID09IE1FTV9GUkVFICYmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh1bnNpZ25lZCkgbWVtb3J5X2luZm8uQmFzZUFkZHJlc3MgJSBnX3JlZ2lvbnNp
emUgPT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfaW5mby5S
ZWdpb25TaXplID49ICh1bnNpZ25lZCkgcmVzZXJ2ZV9zaXplKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gVFJVRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qIEZyb20gbm93IG9uIHdlIGNhbid0IGdldCBjb250aWd1b3VzIG1l
bW9yeSEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aWd1b3VzID0gRkFMU0U7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVjb21wdXRlIHNpemUgdG8gcmVzZXJ2
ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVfc2l6ZSA9IENFSUwgKGFs
bG9jYXRlX3NpemUsIGdfbXlfcmVnaW9uc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWVtb3J5X2luZm8uQmFzZUFkZHJlc3MgPSAoY2hhciAqKSBtZW1vcnlfaW5mby5CYXNlQWRk
cmVzcyArIG1lbW9yeV9pbmZvLlJlZ2lvblNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLyogQXNzZXJ0IHByZWNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhc3NlcnQgKCh1bnNpZ25lZCkgbWVtb3J5X2luZm8uQmFzZUFkZHJlc3MgJSBnX3BhZ2VzaXpl
ID09IDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCAoMCA8IHJlc2VydmVf
c2l6ZSAmJiByZXNlcnZlX3NpemUgJSBnX3JlZ2lvbnNpemUgPT0gMCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWFyY2ggZmFpbGVkPyAq
LwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgZm91bmQpIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gc2Jya19leGl0OwotICAgICAgICAgICAgICAgICAgICAgICAgLyog
QXNzZXJ0IHByZWNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCAo
KHVuc2lnbmVkKSBtZW1vcnlfaW5mby5CYXNlQWRkcmVzcyAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCAoMCA8IHJlc2VydmVfc2l6ZSAmJiByZXNl
cnZlX3NpemUgJSBnX3JlZ2lvbnNpemUgPT0gMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
KiBUcnkgdG8gcmVzZXJ2ZSB0aGlzICovCi0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlX3Jl
c2VydmVkID0gVmlydHVhbEFsbG9jIChtZW1vcnlfaW5mby5CYXNlQWRkcmVzcywgcmVzZXJ2ZV9z
aXplLCAKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTV9SRVNFUlZF
LCBQQUdFX05PQUNDRVNTKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIGJhc2VfcmVz
ZXJ2ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMgPSBHZXRMYXN0RXJy
b3IgKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJjICE9IEVSUk9SX0lOVkFM
SURfQUREUkVTUykgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc2Jya19l
eGl0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
LyogQSBudWxsIHBvaW50ZXIgc2lnbmFscyAoaG9wZWZ1bGx5KSBhIHJhY2UgY29uZGl0aW9uIHdp
dGggYW5vdGhlciB0aHJlYWQuICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBJbiB0aGlz
IGNhc2UsIHdlIHRyeSBhZ2Fpbi4gKi8KLSAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoISBi
YXNlX3Jlc2VydmVkKTsKLSAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgcmV0dXJuZWQgcG9p
bnRlciBmb3IgY29uc2lzdGVuY3kgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lbW9yeV9p
bmZvLkJhc2VBZGRyZXNzICYmIGJhc2VfcmVzZXJ2ZWQgIT0gbWVtb3J5X2luZm8uQmFzZUFkZHJl
c3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHNicmtfZXhpdDsKLSAgICAgICAgICAg
ICAgICAgICAgLyogQXNzZXJ0IHBvc3Rjb25kaXRpb25zICovCi0gICAgICAgICAgICAgICAgICAg
IGFzc2VydCAoKHVuc2lnbmVkKSBiYXNlX3Jlc2VydmVkICUgZ19yZWdpb25zaXplID09IDApOwot
I2lmZGVmIFRSQUNFCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIlJlc2VydmUgJXAgJWRc
biIsIGJhc2VfcmVzZXJ2ZWQsIHJlc2VydmVfc2l6ZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAg
ICAgICAgLyogRGlkIHdlIGdldCBjb250aWd1b3VzIG1lbW9yeT8gKi8KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbnRpZ3VvdXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3Rh
cnRfc2l6ZSA9IChjaGFyICopIGdfbGFzdC0+dG9wX2NvbW1pdHRlZCAtIChjaGFyICopIGdfbGFz
dC0+dG9wX2FsbG9jYXRlZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkanVzdCBhbGxv
Y2F0aW9uIHNpemUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlX3NpemUgLT0g
c3RhcnRfc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkanVzdCB0aGUgcmVnaW9u
cyBhbGxvY2F0aW9uIHRvcCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZ19sYXN0LT50b3Bf
YWxsb2NhdGVkID0gZ19sYXN0LT50b3BfY29tbWl0dGVkOwotICAgICAgICAgICAgICAgICAgICAg
ICAgLyogUmVjb21wdXRlIHRoZSBzaXplIHRvIGNvbW1pdCAqLwotICAgICAgICAgICAgICAgICAg
ICAgICAgdG9fY29tbWl0ID0gKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkICsgYWxsb2Nh
dGVfc2l6ZSAtIChjaGFyICopIGdfbGFzdC0+dG9wX2NvbW1pdHRlZDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIFJvdW5kIHNpemUgdG8gY29tbWl0ICovCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb21taXRfc2l6ZSA9IENFSUwgKHRvX2NvbW1pdCwgZ19teV9wYWdlc2l6ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAgICAgICAgIC8qIEFwcGVuZCB0aGUgbmV3
IHJlZ2lvbiB0byB0aGUgbGlzdCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoISByZWdpb25f
bGlzdF9hcHBlbmQgKCZnX2xhc3QsIGJhc2VfcmVzZXJ2ZWQsIHJlc2VydmVfc2l6ZSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIHNicmtfZXhpdDsKLSAgICAgICAgICAgICAgICAgICAg
LyogRGlkbid0IHdlIGdldCBjb250aWd1b3VzIG1lbW9yeT8gKi8KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCEgY29udGlndW91cykgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVjb21w
dXRlIHRoZSBzaXplIHRvIGNvbW1pdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdG9fY29t
bWl0ID0gKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkICsgYWxsb2NhdGVfc2l6ZSAtIChj
aGFyICopIGdfbGFzdC0+dG9wX2NvbW1pdHRlZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8q
IFJvdW5kIHNpemUgdG8gY29tbWl0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21taXRf
c2l6ZSA9IENFSUwgKHRvX2NvbW1pdCwgZ19teV9wYWdlc2l6ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IAotICAgICAgICAgICAgLyog
QXNzZXJ0IHByZWNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAgIGFzc2VydCAoKHVuc2lnbmVkKSBn
X2xhc3QtPnRvcF9jb21taXR0ZWQgJSBnX3BhZ2VzaXplID09IDApOwotICAgICAgICAgICAgYXNz
ZXJ0ICgwIDwgY29tbWl0X3NpemUgJiYgY29tbWl0X3NpemUgJSBnX3BhZ2VzaXplID09IDApOyB7
Ci0gICAgICAgICAgICAgICAgLyogQ29tbWl0IHRoaXMgKi8KLSAgICAgICAgICAgICAgICB2b2lk
ICpiYXNlX2NvbW1pdHRlZCA9IFZpcnR1YWxBbGxvYyAoZ19sYXN0LT50b3BfY29tbWl0dGVkLCBj
b21taXRfc2l6ZSwgCi0JCQkJICAgIAkJCSAgICAgICAgICAgICAgICAgICAgIE1FTV9DT01NSVQs
IFBBR0VfUkVBRFdSSVRFKTsKLSAgICAgICAgICAgICAgICAvKiBDaGVjayByZXR1cm5lZCBwb2lu
dGVyIGZvciBjb25zaXN0ZW5jeSAqLwotICAgICAgICAgICAgICAgIGlmIChiYXNlX2NvbW1pdHRl
ZCAhPSBnX2xhc3QtPnRvcF9jb21taXR0ZWQpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gc2Jy
a19leGl0OwotICAgICAgICAgICAgICAgIC8qIEFzc2VydCBwb3N0Y29uZGl0aW9ucyAqLwotICAg
ICAgICAgICAgICAgIGFzc2VydCAoKHVuc2lnbmVkKSBiYXNlX2NvbW1pdHRlZCAlIGdfcGFnZXNp
emUgPT0gMCk7Ci0jaWZkZWYgVFJBQ0UKLSAgICAgICAgICAgICAgICBwcmludGYgKCJDb21taXQg
JXAgJWRcbiIsIGJhc2VfY29tbWl0dGVkLCBjb21taXRfc2l6ZSk7Ci0jZW5kaWYKLSAgICAgICAg
ICAgICAgICAvKiBBZGp1c3QgdGhlIHJlZ2lvbnMgY29tbWl0IHRvcCAqLwotICAgICAgICAgICAg
ICAgIGdfbGFzdC0+dG9wX2NvbW1pdHRlZCA9IChjaGFyICopIGJhc2VfY29tbWl0dGVkICsgY29t
bWl0X3NpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gCi0gICAgICAgIC8qIEFkanVzdCB0
aGUgcmVnaW9ucyBhbGxvY2F0aW9uIHRvcCAqLwotICAgICAgICBnX2xhc3QtPnRvcF9hbGxvY2F0
ZWQgPSAoY2hhciAqKSBnX2xhc3QtPnRvcF9hbGxvY2F0ZWQgKyBhbGxvY2F0ZV9zaXplOwotICAg
ICAgICByZXN1bHQgPSAoY2hhciAqKSBnX2xhc3QtPnRvcF9hbGxvY2F0ZWQgLSBzaXplOwotICAg
IC8qIERlYWxsb2NhdGlvbiByZXF1ZXN0ZWQ/ICovCi0gICAgfSBlbHNlIGlmIChzaXplIDwgMCkg
ewotICAgICAgICBsb25nIGRlYWxsb2NhdGVfc2l6ZSA9IC0gc2l6ZTsKLSAgICAgICAgLyogQXMg
bG9uZyBhcyB3ZSBoYXZlIGEgcmVnaW9uIHRvIHJlbGVhc2UgKi8KLSAgICAgICAgd2hpbGUgKChj
aGFyICopIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCAtIGRlYWxsb2NhdGVfc2l6ZSA8IChjaGFyICop
IGdfbGFzdC0+dG9wX3Jlc2VydmVkIC0gZ19sYXN0LT5yZXNlcnZlX3NpemUpIHsKLSAgICAgICAg
ICAgIC8qIEdldCB0aGUgc2l6ZSB0byByZWxlYXNlICovCi0gICAgICAgICAgICBsb25nIHJlbGVh
c2Vfc2l6ZSA9IGdfbGFzdC0+cmVzZXJ2ZV9zaXplOwotICAgICAgICAgICAgLyogR2V0IHRoZSBi
YXNlIGFkZHJlc3MgKi8KLSAgICAgICAgICAgIHZvaWQgKmJhc2VfcmVzZXJ2ZWQgPSAoY2hhciAq
KSBnX2xhc3QtPnRvcF9yZXNlcnZlZCAtIHJlbGVhc2Vfc2l6ZTsKLSAgICAgICAgICAgIC8qIEFz
c2VydCBwcmVjb25kaXRpb25zICovCi0gICAgICAgICAgICBhc3NlcnQgKCh1bnNpZ25lZCkgYmFz
ZV9yZXNlcnZlZCAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsgCi0gICAgICAgICAgICBhc3NlcnQgKDAg
PCByZWxlYXNlX3NpemUgJiYgcmVsZWFzZV9zaXplICUgZ19yZWdpb25zaXplID09IDApOyB7Ci0g
ICAgICAgICAgICAgICAgLyogUmVsZWFzZSB0aGlzICovCi0gICAgICAgICAgICAgICAgaW50IHJj
ID0gVmlydHVhbEZyZWUgKGJhc2VfcmVzZXJ2ZWQsIDAsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNRU1fUkVMRUFTRSk7Ci0gICAgICAgICAgICAgICAgLyogQ2hlY2sg
cmV0dXJuZWQgY29kZSBmb3IgY29uc2lzdGVuY3kgKi8KLSAgICAgICAgICAgICAgICBpZiAoISBy
YykKLSAgICAgICAgICAgICAgICAgICAgZ290byBzYnJrX2V4aXQ7Ci0jaWZkZWYgVFJBQ0UKLSAg
ICAgICAgICAgICAgICBwcmludGYgKCJSZWxlYXNlICVwICVkXG4iLCBiYXNlX3Jlc2VydmVkLCBy
ZWxlYXNlX3NpemUpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBBZGp1
c3QgZGVhbGxvY2F0aW9uIHNpemUgKi8KLSAgICAgICAgICAgIGRlYWxsb2NhdGVfc2l6ZSAtPSAo
Y2hhciAqKSBnX2xhc3QtPnRvcF9hbGxvY2F0ZWQgLSAoY2hhciAqKSBiYXNlX3Jlc2VydmVkOwot
ICAgICAgICAgICAgLyogUmVtb3ZlIHRoZSBvbGQgcmVnaW9uIGZyb20gdGhlIGxpc3QgKi8KLSAg
ICAgICAgICAgIGlmICghIHJlZ2lvbl9saXN0X3JlbW92ZSAoJmdfbGFzdCkpCi0gICAgICAgICAg
ICAgICAgZ290byBzYnJrX2V4aXQ7Ci0gICAgICAgIH0gewotICAgICAgICAgICAgLyogQ29tcHV0
ZSB0aGUgc2l6ZSB0byBkZWNvbW1pdCAqLwotICAgICAgICAgICAgbG9uZyB0b19kZWNvbW1pdCA9
IChjaGFyICopIGdfbGFzdC0+dG9wX2NvbW1pdHRlZCAtICgoY2hhciAqKSBnX2xhc3QtPnRvcF9h
bGxvY2F0ZWQgLSBkZWFsbG9jYXRlX3NpemUpOwotICAgICAgICAgICAgaWYgKHRvX2RlY29tbWl0
ID49IGdfbXlfcGFnZXNpemUpIHsKLSAgICAgICAgICAgICAgICAvKiBDb21wdXRlIHRoZSBzaXpl
IHRvIGRlY29tbWl0ICovCi0gICAgICAgICAgICAgICAgbG9uZyBkZWNvbW1pdF9zaXplID0gRkxP
T1IgKHRvX2RlY29tbWl0LCBnX215X3BhZ2VzaXplKTsKLSAgICAgICAgICAgICAgICAvKiAgQ29t
cHV0ZSB0aGUgYmFzZSBhZGRyZXNzICovCi0gICAgICAgICAgICAgICAgdm9pZCAqYmFzZV9jb21t
aXR0ZWQgPSAoY2hhciAqKSBnX2xhc3QtPnRvcF9jb21taXR0ZWQgLSBkZWNvbW1pdF9zaXplOwot
ICAgICAgICAgICAgICAgIC8qIEFzc2VydCBwcmVjb25kaXRpb25zICovCi0gICAgICAgICAgICAg
ICAgYXNzZXJ0ICgodW5zaWduZWQpIGJhc2VfY29tbWl0dGVkICUgZ19wYWdlc2l6ZSA9PSAwKTsK
LSAgICAgICAgICAgICAgICBhc3NlcnQgKDAgPCBkZWNvbW1pdF9zaXplICYmIGRlY29tbWl0X3Np
emUgJSBnX3BhZ2VzaXplID09IDApOyB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIERlY29tbWl0
IHRoaXMgKi8KLSAgICAgICAgICAgICAgICAgICAgaW50IHJjID0gVmlydHVhbEZyZWUgKChjaGFy
ICopIGJhc2VfY29tbWl0dGVkLCBkZWNvbW1pdF9zaXplLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1FTV9ERUNPTU1JVCk7Ci0gICAgICAgICAgICAgICAgICAg
IC8qIENoZWNrIHJldHVybmVkIGNvZGUgZm9yIGNvbnNpc3RlbmN5ICovCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghIHJjKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzYnJrX2V4aXQ7
Ci0jaWZkZWYgVFJBQ0UKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiRGVjb21taXQgJXAg
JWRcbiIsIGJhc2VfY29tbWl0dGVkLCBkZWNvbW1pdF9zaXplKTsKLSNlbmRpZgotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBBZGp1c3QgZGVhbGxvY2F0aW9uIHNpemUgYW5k
IHJlZ2lvbnMgY29tbWl0IGFuZCBhbGxvY2F0ZSB0b3AgKi8KLSAgICAgICAgICAgICAgICBkZWFs
bG9jYXRlX3NpemUgLT0gKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkIC0gKGNoYXIgKikg
YmFzZV9jb21taXR0ZWQ7Ci0gICAgICAgICAgICAgICAgZ19sYXN0LT50b3BfY29tbWl0dGVkID0g
YmFzZV9jb21taXR0ZWQ7Ci0gICAgICAgICAgICAgICAgZ19sYXN0LT50b3BfYWxsb2NhdGVkID0g
YmFzZV9jb21taXR0ZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLyogQWRq
dXN0IHJlZ2lvbnMgYWxsb2NhdGUgdG9wICovCi0gICAgICAgIGdfbGFzdC0+dG9wX2FsbG9jYXRl
ZCA9IChjaGFyICopIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCAtIGRlYWxsb2NhdGVfc2l6ZTsKLSAg
ICAgICAgLyogQ2hlY2sgZm9yIHVuZGVyZmxvdyAqLwotICAgICAgICBpZiAoKGNoYXIgKikgZ19s
YXN0LT50b3BfcmVzZXJ2ZWQgLSBnX2xhc3QtPnJlc2VydmVfc2l6ZSA+IChjaGFyICopIGdfbGFz
dC0+dG9wX2FsbG9jYXRlZCB8fAotICAgICAgICAgICAgZ19sYXN0LT50b3BfYWxsb2NhdGVkID4g
Z19sYXN0LT50b3BfY29tbWl0dGVkKSB7Ci0gICAgICAgICAgICAvKiBBZGp1c3QgcmVnaW9ucyBh
bGxvY2F0ZSB0b3AgKi8KLSAgICAgICAgICAgIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCA9IChjaGFy
ICopIGdfbGFzdC0+dG9wX3Jlc2VydmVkIC0gZ19sYXN0LT5yZXNlcnZlX3NpemU7Ci0gICAgICAg
ICAgICBnb3RvIHNicmtfZXhpdDsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQgPSBnX2xhc3Qt
PnRvcF9hbGxvY2F0ZWQ7Ci0gICAgfQotICAgIC8qIEFzc2VydCBpbnZhcmlhbnRzICovCi0gICAg
YXNzZXJ0IChnX2xhc3QpOwotICAgIGFzc2VydCAoKGNoYXIgKikgZ19sYXN0LT50b3BfcmVzZXJ2
ZWQgLSBnX2xhc3QtPnJlc2VydmVfc2l6ZSA8PSAoY2hhciAqKSBnX2xhc3QtPnRvcF9hbGxvY2F0
ZWQgJiYKLSAgICAgICAgICAgIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCA8PSBnX2xhc3QtPnRvcF9j
b21taXR0ZWQpOwotICAgIGFzc2VydCAoKGNoYXIgKikgZ19sYXN0LT50b3BfcmVzZXJ2ZWQgLSBn
X2xhc3QtPnJlc2VydmVfc2l6ZSA8PSAoY2hhciAqKSBnX2xhc3QtPnRvcF9jb21taXR0ZWQgJiYK
LSAgICAgICAgICAgIGdfbGFzdC0+dG9wX2NvbW1pdHRlZCA8PSBnX2xhc3QtPnRvcF9yZXNlcnZl
ZCAmJgotICAgICAgICAgICAgKHVuc2lnbmVkKSBnX2xhc3QtPnRvcF9jb21taXR0ZWQgJSBnX3Bh
Z2VzaXplID09IDApOwotICAgIGFzc2VydCAoKHVuc2lnbmVkKSBnX2xhc3QtPnRvcF9yZXNlcnZl
ZCAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLSAgICBhc3NlcnQgKCh1bnNpZ25lZCkgZ19sYXN0LT5y
ZXNlcnZlX3NpemUgJSBnX3JlZ2lvbnNpemUgPT0gMCk7Ci0KLXNicmtfZXhpdDoKLSNpZiBkZWZp
bmVkIChVU0VfTUFMTE9DX0xPQ0spICYmIGRlZmluZWQgKE5FRURFRCkKLSAgICAvKiBSZWxlYXNl
IHNwaW4gbG9jayAqLwotICAgIHNscmVsZWFzZSAoJmdfc2wpOwotI2VuZGlmCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotLyogbW1hcCBmb3Igd2luZG93cyAqLwotc3RhdGljIHZvaWQgKm1tYXAg
KHZvaWQgKnB0ciwgbG9uZyBzaXplLCBsb25nIHByb3QsIGxvbmcgdHlwZSwgbG9uZyBoYW5kbGUs
IGxvbmcgYXJnKSB7Ci0gICAgc3RhdGljIGxvbmcgZ19wYWdlc2l6ZTsKLSAgICBzdGF0aWMgbG9u
ZyBnX3JlZ2lvbnNpemU7Ci0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYgKCJtbWFwICVkXG4iLCBz
aXplKTsKLSNlbmRpZgotI2lmIGRlZmluZWQgKFVTRV9NQUxMT0NfTE9DSykgJiYgZGVmaW5lZCAo
TkVFREVEKQotICAgIC8qIFdhaXQgZm9yIHNwaW4gbG9jayAqLwotICAgIHNsd2FpdCAoJmdfc2wp
OwotI2VuZGlmCi0gICAgLyogRmlyc3QgdGltZSBpbml0aWFsaXphdGlvbiAqLwotICAgIGlmICgh
IGdfcGFnZXNpemUpIAotICAgICAgICBnX3BhZ2VzaXplID0gZ2V0cGFnZXNpemUgKCk7Ci0gICAg
aWYgKCEgZ19yZWdpb25zaXplKSAKLSAgICAgICAgZ19yZWdpb25zaXplID0gZ2V0cmVnaW9uc2l6
ZSAoKTsKLSAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwotICAgIGFzc2VydCAoKHVuc2ln
bmVkKSBwdHIgJSBnX3JlZ2lvbnNpemUgPT0gMCk7Ci0gICAgYXNzZXJ0IChzaXplICUgZ19wYWdl
c2l6ZSA9PSAwKTsKLSAgICAvKiBBbGxvY2F0ZSB0aGlzICovCi0gICAgcHRyID0gVmlydHVhbEFs
bG9jIChwdHIsIHNpemUsCi0JCQkJCSAgICBNRU1fUkVTRVJWRSB8IE1FTV9DT01NSVQgfCBNRU1f
VE9QX0RPV04sIFBBR0VfUkVBRFdSSVRFKTsKLSAgICBpZiAoISBwdHIpIHsKLSAgICAgICAgcHRy
ID0gKHZvaWQgKikgTU9SRUNPUkVfRkFJTFVSRTsKLSAgICAgICAgZ290byBtbWFwX2V4aXQ7Ci0g
ICAgfQotICAgIC8qIEFzc2VydCBwb3N0Y29uZGl0aW9ucyAqLwotICAgIGFzc2VydCAoKHVuc2ln
bmVkKSBwdHIgJSBnX3JlZ2lvbnNpemUgPT0gMCk7Ci0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYg
KCJDb21taXQgJXAgJWRcbiIsIHB0ciwgc2l6ZSk7Ci0jZW5kaWYKLW1tYXBfZXhpdDoKLSNpZiBk
ZWZpbmVkIChVU0VfTUFMTE9DX0xPQ0spICYmIGRlZmluZWQgKE5FRURFRCkKLSAgICAvKiBSZWxl
YXNlIHNwaW4gbG9jayAqLwotICAgIHNscmVsZWFzZSAoJmdfc2wpOwotI2VuZGlmCi0gICAgcmV0
dXJuIHB0cjsKLX0KLQotLyogbXVubWFwIGZvciB3aW5kb3dzICovCi1zdGF0aWMgbG9uZyBtdW5t
YXAgKHZvaWQgKnB0ciwgbG9uZyBzaXplKSB7Ci0gICAgc3RhdGljIGxvbmcgZ19wYWdlc2l6ZTsK
LSAgICBzdGF0aWMgbG9uZyBnX3JlZ2lvbnNpemU7Ci0gICAgaW50IHJjID0gTVVOTUFQX0ZBSUxV
UkU7Ci0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYgKCJtdW5tYXAgJXAgJWRcbiIsIHB0ciwgc2l6
ZSk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkIChVU0VfTUFMTE9DX0xPQ0spICYmIGRlZmluZWQgKE5F
RURFRCkKLSAgICAvKiBXYWl0IGZvciBzcGluIGxvY2sgKi8KLSAgICBzbHdhaXQgKCZnX3NsKTsK
LSNlbmRpZgotICAgIC8qIEZpcnN0IHRpbWUgaW5pdGlhbGl6YXRpb24gKi8KLSAgICBpZiAoISBn
X3BhZ2VzaXplKSAKLSAgICAgICAgZ19wYWdlc2l6ZSA9IGdldHBhZ2VzaXplICgpOwotICAgIGlm
ICghIGdfcmVnaW9uc2l6ZSkgCi0gICAgICAgIGdfcmVnaW9uc2l6ZSA9IGdldHJlZ2lvbnNpemUg
KCk7Ci0gICAgLyogQXNzZXJ0IHByZWNvbmRpdGlvbnMgKi8KLSAgICBhc3NlcnQgKCh1bnNpZ25l
ZCkgcHRyICUgZ19yZWdpb25zaXplID09IDApOwotICAgIGFzc2VydCAoc2l6ZSAlIGdfcGFnZXNp
emUgPT0gMCk7Ci0gICAgLyogRnJlZSB0aGlzICovCi0gICAgaWYgKCEgVmlydHVhbEZyZWUgKHB0
ciwgMCwgCi0gICAgICAgICAgICAgICAgICAgICAgIE1FTV9SRUxFQVNFKSkKLSAgICAgICAgZ290
byBtdW5tYXBfZXhpdDsKLSAgICByYyA9IDA7Ci0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYgKCJS
ZWxlYXNlICVwICVkXG4iLCBwdHIsIHNpemUpOwotI2VuZGlmCi1tdW5tYXBfZXhpdDoKLSNpZiBk
ZWZpbmVkIChVU0VfTUFMTE9DX0xPQ0spICYmIGRlZmluZWQgKE5FRURFRCkKLSAgICAvKiBSZWxl
YXNlIHNwaW4gbG9jayAqLwotICAgIHNscmVsZWFzZSAoJmdfc2wpOwotI2VuZGlmCi0gICAgcmV0
dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCB2bWluZm8gKENIVU5LX1NJWkVfVCAgKmZyZWUsIENI
VU5LX1NJWkVfVCAgKnJlc2VydmVkLCBDSFVOS19TSVpFX1QgICpjb21taXR0ZWQpIHsKLSAgICBN
RU1PUllfQkFTSUNfSU5GT1JNQVRJT04gbWVtb3J5X2luZm87Ci0gICAgbWVtb3J5X2luZm8uQmFz
ZUFkZHJlc3MgPSAwOwotICAgICpmcmVlID0gKnJlc2VydmVkID0gKmNvbW1pdHRlZCA9IDA7Ci0g
ICAgd2hpbGUgKFZpcnR1YWxRdWVyeSAobWVtb3J5X2luZm8uQmFzZUFkZHJlc3MsICZtZW1vcnlf
aW5mbywgc2l6ZW9mIChtZW1vcnlfaW5mbykpKSB7Ci0gICAgICAgIHN3aXRjaCAobWVtb3J5X2lu
Zm8uU3RhdGUpIHsKLSAgICAgICAgY2FzZSBNRU1fRlJFRToKLSAgICAgICAgICAgICpmcmVlICs9
IG1lbW9yeV9pbmZvLlJlZ2lvblNpemU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBNRU1fUkVTRVJWRToKLSAgICAgICAgICAgICpyZXNlcnZlZCArPSBtZW1vcnlfaW5mby5SZWdp
b25TaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTUVNX0NPTU1JVDoKLSAg
ICAgICAgICAgICpjb21taXR0ZWQgKz0gbWVtb3J5X2luZm8uUmVnaW9uU2l6ZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNzID0g
KGNoYXIgKikgbWVtb3J5X2luZm8uQmFzZUFkZHJlc3MgKyBtZW1vcnlfaW5mby5SZWdpb25TaXpl
OwotICAgIH0KLX0KLQotc3RhdGljIGludCBjcHVpbmZvIChpbnQgd2hvbGUsIENIVU5LX1NJWkVf
VCAgKmtlcm5lbCwgQ0hVTktfU0laRV9UICAqdXNlcikgewotICAgIGlmICh3aG9sZSkgewotICAg
ICAgICBfX2ludDY0IGNyZWF0aW9uNjQsIGV4aXQ2NCwga2VybmVsNjQsIHVzZXI2NDsKLSAgICAg
ICAgaW50IHJjID0gR2V0UHJvY2Vzc1RpbWVzIChHZXRDdXJyZW50UHJvY2VzcyAoKSwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZJTEVUSU1FICopICZjcmVhdGlvbjY0LCAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZJTEVUSU1FICopICZleGl0NjQs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGSUxFVElNRSAqKSAma2VybmVs
NjQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGSUxFVElNRSAqKSAmdXNl
cjY0KTsKLSAgICAgICAgaWYgKCEgcmMpIHsKLSAgICAgICAgICAgICprZXJuZWwgPSAwOwotICAg
ICAgICAgICAgKnVzZXIgPSAwOwotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9
IAotICAgICAgICAqa2VybmVsID0gKENIVU5LX1NJWkVfVCkgKGtlcm5lbDY0IC8gMTAwMDApOwot
ICAgICAgICAqdXNlciA9IChDSFVOS19TSVpFX1QpICh1c2VyNjQgLyAxMDAwMCk7Ci0gICAgICAg
IHJldHVybiBUUlVFOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIF9faW50NjQgY3JlYXRpb242NCwg
ZXhpdDY0LCBrZXJuZWw2NCwgdXNlcjY0OwotICAgICAgICBpbnQgcmMgPSBHZXRUaHJlYWRUaW1l
cyAoR2V0Q3VycmVudFRocmVhZCAoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoRklMRVRJTUUgKikgJmNyZWF0aW9uNjQsICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChGSUxFVElNRSAqKSAmZXhpdDY0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChGSUxFVElNRSAqKSAma2VybmVsNjQsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKEZJTEVUSU1FICopICZ1c2VyNjQpOwotICAgICAgICBpZiAoISByYykgewotICAg
ICAgICAgICAgKmtlcm5lbCA9IDA7Ci0gICAgICAgICAgICAqdXNlciA9IDA7Ci0gICAgICAgICAg
ICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0gCi0gICAgICAgICprZXJuZWwgPSAoQ0hVTktfU0la
RV9UKSAoa2VybmVsNjQgLyAxMDAwMCk7Ci0gICAgICAgICp1c2VyID0gKENIVU5LX1NJWkVfVCkg
KHVzZXI2NCAvIDEwMDAwKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotfQotCi0jZW5k
aWYgLyogV0lOMzIgKi8KLQotI2VuZGlmIC8vIE5ERUJVRwotCi19ICAvKiBlbmQgb2YgbmFtZXNw
YWNlIEtKUyAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLUhpc3Rvcnk6Ci0gICAgVjIuNy4yIFNhdCBBdWcgMTcgMDk6
MDc6MzAgMjAwMiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCi0gICAgICAqIEZpeCBtYWxsb2Nfc3Rh
dGUgYml0bWFwIGFycmF5IG1pc2RlY2xhcmF0aW9uCi0KLSAgICBWMi43LjEgVGh1IEp1bCAyNSAx
MDo1ODowMyAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKLSAgICAgICogQWxsb3cgdHVuaW5n
IG9mIEZJUlNUX1NPUlRFRF9CSU5fU0laRQotICAgICAgKiBVc2UgUFRSX1VJTlQgYXMgdHlwZSBm
b3IgYWxsIHB0ci0+aW50IGNhc3RzLiBUaGFua3MgdG8gSm9obiBCZWxtb250ZS4KLSAgICAgICog
QmV0dGVyIGRldGVjdGlvbiBhbmQgc3VwcG9ydCBmb3Igbm9uLWNvbnRpZ3VvdXNuZXNzIG9mIE1P
UkVDT1JFLiAKLSAgICAgICAgVGhhbmtzIHRvIEFuZHJlYXMgTXVlbGxlciwgQ29uYWwgV2Fsc2gs
IGFuZCBXb2xmcmFtIEdsb2dlcgotICAgICAgKiBCeXBhc3MgbW9zdCBvZiBtYWxsb2MgaWYgbm8g
ZnJlZXMuIFRoYW5rcyBUbyBFbWVyeSBCZXJnZXIuCi0gICAgICAqIEZpeCBmcmVlaW5nIG9mIG9s
ZCB0b3Agbm9uLWNvbnRpZ3VvdXMgY2h1bmsgaW0gc3lzbWFsbG9jLgotICAgICAgKiBSYWlzZWQg
ZGVmYXVsdCB0cmltIGFuZCBtYXAgdGhyZXNob2xkcyB0byAyNTZLLgotICAgICAgKiBGaXggbW1h
cC1yZWxhdGVkICNkZWZpbmVzLiBUaGFua3MgdG8gTHVib3MgTHVuYWsuCi0gICAgICAqIEZpeCBj
b3B5IG1hY3JvczsgYWRkZWQgTEFDS1NfRkNOVExfSC4gVGhhbmtzIHRvIE5lYWwgV2FsZmllbGQu
Ci0gICAgICAqIEJyYW5jaC1mcmVlIGJpbiBjYWxjdWxhdGlvbgotICAgICAgKiBEZWZhdWx0IHRy
aW0gYW5kIG1tYXAgdGhyZXNob2xkcyBub3cgMjU2Sy4KLQotICAgIFYyLjcuMCBTdW4gTWFyIDEx
IDE0OjE0OjA2IDIwMDEgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQotICAgICAgKiBJbnRyb2R1Y2Ug
aW5kZXBlbmRlbnRfY29tYWxsb2MgYW5kIGluZGVwZW5kZW50X2NhbGxvYy4KLSAgICAgICAgVGhh
bmtzIHRvIE1pY2hhZWwgUGFjaG9zIGZvciBtb3RpdmF0aW9uIGFuZCBoZWxwLgotICAgICAgKiBN
YWtlIG9wdGlvbmFsIC5oIGZpbGUgYXZhaWxhYmxlCi0gICAgICAqIEFsbG93ID4gMkdCIHJlcXVl
c3RzIG9uIDMyYml0IHN5c3RlbXMuCi0gICAgICAqIG5ldyBXSU4zMiBzYnJrLCBtbWFwLCBtdW5t
YXAsIGxvY2sgY29kZSBmcm9tIDxXYWx0ZXJAR2VOZVN5cy1lLmRlPi4KLSAgICAgICAgVGhhbmtz
IGFsc28gdG8gQW5kcmVhcyBNdWVsbGVyIDxhLm11ZWxsZXIgYXQgcGFyYWRhdGVjLmRlPiwKLSAg
ICAgICAgYW5kIEFub255bW91cy4KLSAgICAgICogQWxsb3cgb3ZlcnJpZGUgb2YgTUFMTE9DX0FM
SUdOTUVOVCAoVGhhbmtzIHRvIFJ1dWQgV2FpaiBmb3IgCi0gICAgICAgIGhlbHBpbmcgdGVzdCB0
aGlzLikKLSAgICAgICogbWVtYWxpZ246IGNoZWNrIGFsaWdubWVudCBhcmcKLSAgICAgICogcmVh
bGxvYzogZG9uJ3QgdHJ5IHRvIHNoaWZ0IGNodW5rcyBiYWNrd2FyZHMsIHNpbmNlIHRoaXMKLSAg
ICAgICAgbGVhZHMgdG8gIG1vcmUgZnJhZ21lbnRhdGlvbiBpbiBzb21lIHByb2dyYW1zIGFuZCBk
b2Vzbid0Ci0gICAgICAgIHNlZW0gdG8gaGVscCBpbiBhbnkgb3RoZXJzLgotICAgICAgKiBDb2xs
ZWN0IGFsbCBjYXNlcyBpbiBtYWxsb2MgcmVxdWlyaW5nIHN5c3RlbSBtZW1vcnkgaW50byBzWVNN
QUxMT2MKLSAgICAgICogVXNlIG1tYXAgYXMgYmFja3VwIHRvIHNicmsKLSAgICAgICogUGxhY2Ug
YWxsIGludGVybmFsIHN0YXRlIGluIG1hbGxvY19zdGF0ZQotICAgICAgKiBJbnRyb2R1Y2UgZmFz
dGJpbnMgKGFsdGhvdWdoIHNpbWlsYXIgdG8gMi41LjEpCi0gICAgICAqIE1hbnkgbWlub3IgdHVu
aW5ncyBhbmQgY29zbWV0aWMgaW1wcm92ZW1lbnRzCi0gICAgICAqIEludHJvZHVjZSBVU0VfUFVC
TElDX01BTExPQ19XUkFQUEVSUywgVVNFX01BTExPQ19MT0NLIAotICAgICAgKiBJbnRyb2R1Y2Ug
TUFMTE9DX0ZBSUxVUkVfQUNUSU9OLCBNT1JFQ09SRV9DT05USUdVT1VTCi0gICAgICAgIFRoYW5r
cyB0byBUb255IEUuIEJlbm5ldHQgPHRiZW5uZXR0QG52aWRpYS5jb20+IGFuZCBvdGhlcnMuCi0g
ICAgICAqIEluY2x1ZGUgZXJybm8uaCB0byBzdXBwb3J0IGRlZmF1bHQgZmFpbHVyZSBhY3Rpb24u
Ci0KLSAgICBWMi42LjYgU3VuIERlYyAgNSAwNzo0MjoxOSAxOTk5ICBEb3VnIExlYSAgKGRsIGF0
IGdlZSkKLSAgICAgICogcmV0dXJuIG51bGwgZm9yIG5lZ2F0aXZlIGFyZ3VtZW50cwotICAgICAg
KiBBZGRlZCBTZXZlcmFsIFdJTjMyIGNsZWFudXBzIGZyb20gTWFydGluIEMuIEZvbmcgPG1jZm9u
ZyBhdCB5YWhvby5jb20+Ci0gICAgICAgICAqIEFkZCAnTEFDS1NfU1lTX1BBUkFNX0gnIGZvciB0
aG9zZSBzeXN0ZW1zIHdpdGhvdXQgJ3N5cy9wYXJhbS5oJwotICAgICAgICAgIChlLmcuIFdJTjMy
IHBsYXRmb3JtcykKLSAgICAgICAgICogQ2xlYW51cCBoZWFkZXIgZmlsZSBpbmNsdXNpb24gZm9y
IFdJTjMyIHBsYXRmb3JtcwotICAgICAgICAgKiBDbGVhbnVwIGNvZGUgdG8gYXZvaWQgTWljcm9z
b2Z0IFZpc3VhbCBDKysgY29tcGlsZXIgY29tcGxhaW50cwotICAgICAgICAgKiBBZGQgJ1VTRV9E
TF9QUkVGSVgnIHRvIHF1aWNrbHkgYWxsb3cgY28tZXhpc3RlbmNlIHdpdGggZXhpc3RpbmcKLSAg
ICAgICAgICAgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMKLSAgICAgICAgICogU2V0ICdtYWxs
b2NfZ2V0cGFnZXNpemUnIGZvciBXSU4zMiBwbGF0Zm9ybXMgKG5lZWRzIG1vcmUgd29yaykKLSAg
ICAgICAgICogVXNlICdhc3NlcnQnIHJhdGhlciB0aGFuICdBU1NFUlQnIGluIFdJTjMyIGNvZGUg
dG8gY29uZm9ybSB0bwotICAgICAgICAgICB1c2FnZSBvZiAnYXNzZXJ0JyBpbiBub24tV0lOMzIg
Y29kZQotICAgICAgICAgKiBJbXByb3ZlIFdJTjMyICdzYnJrKCknIGVtdWxhdGlvbidzICdmaW5k
UmVnaW9uKCknIHJvdXRpbmUgdG8KLSAgICAgICAgICAgYXZvaWQgaW5maW5pdGUgbG9vcAotICAg
ICAgKiBBbHdheXMgY2FsbCAnZlJFZSgpJyByYXRoZXIgdGhhbiAnZnJlZSgpJwotCi0gICAgVjIu
Ni41IFdlZCBKdW4gMTcgMTU6NTc6MzEgMTk5OCAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCi0gICAg
ICAqIEZpeGVkIG9yZGVyaW5nIHByb2JsZW0gd2l0aCBib3VuZGFyeS1zdGFtcGluZwotCi0gICAg
VjIuNi4zIFN1biBNYXkgMTkgMDg6MTc6NTggMTk5NiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCi0g
ICAgICAqIEFkZGVkIHB2YWxsb2MsIGFzIHJlY29tbWVuZGVkIGJ5IEguSi4gTGl1Ci0gICAgICAq
IEFkZGVkIDY0Yml0IHBvaW50ZXIgc3VwcG9ydCBtYWlubHkgZnJvbSBXb2xmcmFtIEdsb2dlcgot
ICAgICAgKiBBZGRlZCBhbm9ueW1vdXNseSBkb25hdGVkIFdJTjMyIHNicmsgZW11bGF0aW9uCi0g
ICAgICAqIE1hbGxvYywgY2FsbG9jLCBnZXRwYWdlc2l6ZTogYWRkIG9wdGltaXphdGlvbnMgZnJv
bSBSYXltb25kIE5panNzZW4KLSAgICAgICogbWFsbG9jX2V4dGVuZF90b3A6IGZpeCBtYXNrIGVy
cm9yIHRoYXQgY2F1c2VkIHdhc3RhZ2UgYWZ0ZXIKLSAgICAgICAgZm9yZWlnbiBzYnJrcwotICAg
ICAgKiBBZGQgbGludXggbXJlbWFwIHN1cHBvcnQgY29kZSBmcm9tIEhKIExpdQotCi0gICAgVjIu
Ni4yIFR1ZSBEZWMgIDUgMDY6NTI6NTUgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCi0gICAg
ICAqIEludGVncmF0ZWQgbW9zdCBkb2N1bWVudGF0aW9uIHdpdGggdGhlIGNvZGUuCi0gICAgICAq
IEFkZCBzdXBwb3J0IGZvciBtbWFwLCB3aXRoIGhlbHAgZnJvbQotICAgICAgICBXb2xmcmFtIEds
b2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgotICAgICAgKiBVc2UgbGFzdF9yZW1h
aW5kZXIgaW4gbW9yZSBjYXNlcy4KLSAgICAgICogUGFjayBiaW5zIHVzaW5nIGlkZWEgZnJvbSAg
Y29saW5Abnl4MTAuY3MuZHUuZWR1Ci0gICAgICAqIFVzZSBvcmRlcmVkIGJpbnMgaW5zdGVhZCBv
ZiBiZXN0LWZpdCB0aHJlc2hob2xkCi0gICAgICAqIEVsaW1pbmF0ZSBibG9jay1sb2NhbCBkZWNs
cyB0byBzaW1wbGlmeSB0cmFjaW5nIGFuZCBkZWJ1Z2dpbmcuCi0gICAgICAqIFN1cHBvcnQgYW5v
dGhlciBjYXNlIG9mIHJlYWxsb2MgdmlhIG1vdmUgaW50byB0b3AKLSAgICAgICogRml4IGVycm9y
IG9jY3VyaW5nIHdoZW4gaW5pdGlhbCBzYnJrX2Jhc2Ugbm90IHdvcmQtYWxpZ25lZC4KLSAgICAg
ICogUmVseSBvbiBwYWdlIHNpemUgZm9yIHVuaXRzIGluc3RlYWQgb2YgU0JSS19VTklUIHRvCi0g
ICAgICAgIGF2b2lkIHN1cnByaXNlcyBhYm91dCBzYnJrIGFsaWdubWVudCBjb252ZW50aW9ucy4K
LSAgICAgICogQWRkIG1hbGxpbmZvLCBtYWxsb3B0LiBUaGFua3MgdG8gUmF5bW9uZCBOaWpzc2Vu
Ci0gICAgICAgIChyYXltb25kQGVzLmVsZS50dWUubmwpIGZvciB0aGUgc3VnZ2VzdGlvbi4KLSAg
ICAgICogQWRkIGBwYWQnIGFyZ3VtZW50IHRvIG1hbGxvY190cmltIGFuZCB0b3BfcGFkIG1hbGxv
cHQgcGFyYW1ldGVyLgotICAgICAgKiBNb3JlIHByZWNhdXRpb25zIGZvciBjYXNlcyB3aGVyZSBv
dGhlciByb3V0aW5lcyBjYWxsIHNicmssCi0gICAgICAgIGNvdXJ0ZXN5IG9mIFdvbGZyYW0gR2xv
Z2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuCi0gICAgICAqIEFkZGVkIG1hY3JvcyBl
dGMuLCBhbGxvd2luZyB1c2UgaW4gbGludXggbGliYyBmcm9tCi0gICAgICAgIEguSi4gTHUgKGhq
bEBnbnUuYWkubWl0LmVkdSkKLSAgICAgICogSW52ZXJ0ZWQgdGhpcyBoaXN0b3J5IGxpc3QKLQot
ICAgIFYyLjYuMSBTYXQgRGVjICAyIDE0OjEwOjU3IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2Vl
KQotICAgICAgKiBSZS10dW5lZCBhbmQgZml4ZWQgdG8gYmVoYXZlIG1vcmUgbmljZWx5IHdpdGgg
VjIuNi4wIGNoYW5nZXMuCi0gICAgICAqIFJlbW92ZWQgYWxsIHByZWFsbG9jYXRpb24gY29kZSBz
aW5jZSB1bmRlciBjdXJyZW50IHNjaGVtZQotICAgICAgICB0aGUgd29yayByZXF1aXJlZCB0byB1
bmRvIGJhZCBwcmVhbGxvY2F0aW9ucyBleGNlZWRzCi0gICAgICAgIHRoZSB3b3JrIHNhdmVkIGlu
IGdvb2QgY2FzZXMgZm9yIG1vc3QgdGVzdCBwcm9ncmFtcy4KLSAgICAgICogTm8gbG9uZ2VyIHVz
ZSByZXR1cm4gbGlzdCBvciB1bmNvbnNvbGlkYXRlZCBiaW5zIHNpbmNlCi0gICAgICAgIG5vIHNj
aGVtZSB1c2luZyB0aGVtIGNvbnNpc3RlbnRseSBvdXRwZXJmb3JtcyB0aG9zZSB0aGF0IGRvbid0
Ci0gICAgICAgIGdpdmVuIGFib3ZlIGNoYW5nZXMuCi0gICAgICAqIFVzZSBiZXN0IGZpdCBmb3Ig
dmVyeSBsYXJnZSBjaHVua3MgdG8gcHJldmVudCBzb21lIHdvcnN0LWNhc2VzLgotICAgICAgKiBB
ZGRlZCBzb21lIHN1cHBvcnQgZm9yIGRlYnVnZ2luZwotCi0gICAgVjIuNi4wIFNhdCBOb3YgIDQg
MDc6MDU6MjMgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCi0gICAgICAqIFJlbW92ZWQgZm9v
dGVycyB3aGVuIGNodW5rcyBhcmUgaW4gdXNlLiBUaGFua3MgdG8KLSAgICAgICAgUGF1bCBXaWxz
b24gKHdpbHNvbkBjcy50ZXhhcy5lZHUpIGZvciB0aGUgc3VnZ2VzdGlvbi4KLQotICAgIFYyLjUu
NCBXZWQgTm92ICAxIDA3OjU0OjUxIDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQotICAgICAg
KiBBZGRlZCBtYWxsb2NfdHJpbSwgd2l0aCBoZWxwIGZyb20gV29sZnJhbSBHbG9nZXIKLSAgICAg
ICAgKHdtZ2xvQERlbnQuTUVELlVuaS1NdWVuY2hlbi5ERSkuCi0KLSAgICBWMi41LjMgVHVlIEFw
ciAyNiAxMDoxNjowMSAxOTk0ICBEb3VnIExlYSAgKGRsIGF0IGcpCi0KLSAgICBWMi41LjIgVHVl
IEFwciAgNSAxNjoyMDo0MCAxOTk0ICBEb3VnIExlYSAgKGRsIGF0IGcpCi0gICAgICAqIHJlYWxs
b2M6IHRyeSB0byBleHBhbmQgaW4gYm90aCBkaXJlY3Rpb25zCi0gICAgICAqIG1hbGxvYzogc3dh
cCBvcmRlciBvZiBjbGVhbi1iaW4gc3RyYXRlZ3k7Ci0gICAgICAqIHJlYWxsb2M6IG9ubHkgY29u
ZGl0aW9uYWxseSBleHBhbmQgYmFja3dhcmRzCi0gICAgICAqIFRyeSBub3QgdG8gc2NhdmVuZ2Ug
dXNlZCBiaW5zCi0gICAgICAqIFVzZSBiaW4gY291bnRzIGFzIGEgZ3VpZGUgdG8gcHJlYWxsb2Nh
dGlvbgotICAgICAgKiBPY2Nhc2lvbmFsbHkgYmluIHJldHVybiBsaXN0IGNodW5rcyBpbiBmaXJz
dCBzY2FuCi0gICAgICAqIEFkZCBhIGZldyBvcHRpbWl6YXRpb25zIGZyb20gY29saW5Abnl4MTAu
Y3MuZHUuZWR1Ci0KLSAgICBWMi41LjEgU2F0IEF1ZyAxNCAxNTo0MDo0MyAxOTkzICBEb3VnIExl
YSAgKGRsIGF0IGcpCi0gICAgICAqIGZhc3RlciBiaW4gY29tcHV0YXRpb24gJiBzbGlnaHRseSBk
aWZmZXJlbnQgYmlubmluZwotICAgICAgKiBtZXJnZWQgYWxsIGNvbnNvbGlkYXRpb25zIHRvIG9u
ZSBwYXJ0IG9mIG1hbGxvYyBwcm9wZXIKLSAgICAgICAgIChlbGltaW5hdGluZyBvbGQgbWFsbG9j
X2ZpbmRfc3BhY2UgJiBtYWxsb2NfY2xlYW5fYmluKQotICAgICAgKiBTY2FuIDIgcmV0dXJucyBj
aHVua3MgKG5vdCBqdXN0IDEpCi0gICAgICAqIFByb3BhZ2F0ZSBmYWlsdXJlIGluIHJlYWxsb2Mg
aWYgbWFsbG9jIHJldHVybnMgMAotICAgICAgKiBBZGQgc3R1ZmYgdG8gYWxsb3cgY29tcGlsYXRp
b24gb24gbm9uLUFOU0kgY29tcGlsZXJzCi0gICAgICAgICAgZnJvbSBrcHZAcmVzZWFyY2guYXR0
LmNvbQotCi0gICAgVjIuNSBTYXQgQXVnICA3IDA3OjQxOjU5IDE5OTMgIERvdWcgTGVhICAoZGwg
YXQgZy5vc3dlZ28uZWR1KQotICAgICAgKiByZW1vdmVkIHBvdGVudGlhbCBmb3Igb2RkIGFkZHJl
c3MgYWNjZXNzIGluIHByZXZfY2h1bmsKLSAgICAgICogcmVtb3ZlZCBkZXBlbmRlbmN5IG9uIGdl
dHBhZ2VzaXplLmgKLSAgICAgICogbWlzYyBjb3NtZXRpY3MgYW5kIGEgYml0IG1vcmUgaW50ZXJu
YWwgZG9jdW1lbnRhdGlvbgotICAgICAgKiBhbnRpY29zbWV0aWNzOiBtYW5nbGVkIG5hbWVzIGlu
IG1hY3JvcyB0byBldmFkZSBkZWJ1Z2dlciBzdHJhbmdlbmVzcwotICAgICAgKiB0ZXN0ZWQgb24g
c3BhcmMsIGhwLTcwMCwgZGVjLW1pcHMsIHJzNjAwMAotICAgICAgICAgIHdpdGggZ2NjICYgbmF0
aXZlIGNjIChocCwgZGVjIG9ubHkpIGFsbG93aW5nCi0gICAgICAgICAgRGV0bGVmcyAmIFpvcm4g
Y29tcGFyaXNvbiBzdHVkeSAoaW4gU0lHUExBTiBOb3RpY2VzLikKLQotICAgIFRyaWFsIHZlcnNp
b24gRnJpIEF1ZyAyOCAxMzoxNDoyOSAxOTkyICBEb3VnIExlYSAgKGRsIGF0IGcub3N3ZWdvLmVk
dSkKLSAgICAgICogQmFzZWQgbG9vc2VseSBvbiBsaWJnKystMS4yWCBtYWxsb2MuIChJdCByZXRh
aW5zIHNvbWUgb2YgdGhlIG92ZXJhbGwKLSAgICAgICAgIHN0cnVjdHVyZSBvZiBvbGQgdmVyc2lv
biwgIGJ1dCBtb3N0IGRldGFpbHMgZGlmZmVyLikKLQotKi8KSW5kZXg6IFdlYkNvcmUva2h0bWwv
bWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBraHRtbC9taXNj
L21haW5fdGhyZWFkX21hbGxvYy5oCmRpZmYgLU4gV2ViQ29yZS9raHRtbC9taXNjL21haW5fdGhy
ZWFkX21hbGxvYy5oCi0tLSBXZWJDb3JlL2todG1sL21pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmgJ
MTcgQXVnIDIwMDUgMDE6MDc6MjYgLTAwMDAJMS40CisrKyBXZWJDb3JlL2todG1sL21pc2MvbWFp
bl90aHJlYWRfbWFsbG9jLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSw0NCArMCww
IEBACi0vLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0vKgotICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENv
bXB1dGVyLCBJbmMuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiAgQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgS0hUTUxfTUFJTl9USFJFQURfTUFMTE9D
X0gKLSNkZWZpbmUgS0hUTUxfTUFJTl9USFJFQURfTUFMTE9DX0gKLQotLy8gVGhpcyBpcyBhIGNv
cHkgb2YgZGxtYWxsb2MsIGEgZmFzdCBzaW5nbGUtdGhyZWFkZWQgbWFsbG9jIGltcGxlbWVudGF0
aW9uLgotLy8gVGhlcmVmb3JlLCB0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIG9ubHkgYmUgdXNlZCBv
biB0aGUgbWFpbiB0aHJlYWQuCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotbmFtZXNwYWNlIGto
dG1sIHsKLQotdm9pZCAqbWFpbl90aHJlYWRfbWFsbG9jKHNpemVfdCBuKTsKLXZvaWQgKm1haW5f
dGhyZWFkX2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7Ci12
b2lkIG1haW5fdGhyZWFkX2ZyZWUodm9pZCogcCk7Ci12b2lkICptYWluX3RocmVhZF9yZWFsbG9j
KHZvaWQqIHAsIHNpemVfdCBuKTsKLQotI2RlZmluZSBNQUlOX1RIUkVBRF9BTExPQ0FURUQgXAot
dm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzKSB7IHJldHVybiBraHRtbDo6bWFpbl90aHJlYWRf
bWFsbG9jKHMpOyB9IFwKLXZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHApIHsga2h0bWw6Om1h
aW5fdGhyZWFkX2ZyZWUocCk7IH0KLQotfQotCi0jZW5kaWYgLyogS0hUTUxfTUFJTl9USFJFQURf
TUFMTE9DX0ggKi8KSW5kZXg6IFdlYkNvcmUva2h0bWwvbWlzYy9zaGFyZWQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9taXNjL3NoYXJlZC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjcKZGlmZiAtcCAtdSAtcjEuNyBXZWJDb3JlL2todG1sL21pc2Mvc2hh
cmVkLmgKLS0tIFdlYkNvcmUva2h0bWwvbWlzYy9zaGFyZWQuaAkzMCBBdWcgMjAwNSAyMzo1Njox
NSAtMDAwMAkxLjcKKysrIFdlYkNvcmUva2h0bWwvbWlzYy9zaGFyZWQuaAkyNyBTZXAgMjAwNSAw
NzoxNzo0NiAtMDAwMApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgU0hBUkVEX0gKICNkZWZpbmUg
U0hBUkVEX0gKIAotI2luY2x1ZGUgPGtqcy9zaGFyZWRfcHRyLmg+CisjaW5jbHVkZSA8a3htbGNv
cmUvU2hhcmVkUHRyLmg+CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTYyLDEwICs2Miw2IEBA
IHByaXZhdGU6CiAgICAgVHJlZVNoYXJlZCAmb3BlcmF0b3I9KGNvbnN0IFRyZWVTaGFyZWQgJik7
CiB9OwogCi11c2luZyBLWE1MQ29yZTo6U2hhcmVkUHRyOwotdXNpbmcgS1hNTENvcmU6OnN0YXRp
Y19wb2ludGVyX2Nhc3Q7Ci11c2luZyBLWE1MQ29yZTo6Y29uc3RfcG9pbnRlcl9jYXN0OwotCiB9
CiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9zdHlsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg5CmRpZmYgLXAgLXUgLXIxLjg5
IFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oCi0tLSBXZWJDb3JlL2todG1s
L3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuaAkzMCBBdWcgMjAwNSAyMTozNjoyNCAtMDAwMAkxLjg5
CisrKyBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuaAkyNyBTZXAgMjAwNSAw
NzoxNzo0NyAtMDAwMApAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPHFwYWxldHRlLmg+CiAj
aW5jbHVkZSA8cWFwcGxpY2F0aW9uLmg+CiAKLSNpbmNsdWRlICJtaXNjL21haW5fdGhyZWFkX21h
bGxvYy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlICJtaXNj
L2todG1sbGF5b3V0LmgiCiAjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIKICNpbmNsdWRlICJyZW5k
ZXJpbmcvZm9udC5oIgpAQCAtMzYzLDE0ICszNjMsMTIgQEAgcHVibGljOgogCiBlbnVtIEVNYXJn
aW5Db2xsYXBzZSB7IE1DT0xMQVBTRSwgTVNFUEFSQVRFLCBNRElTQ0FSRCB9OwogCi1jbGFzcyBT
dHlsZVN1cnJvdW5kRGF0YSA6IHB1YmxpYyBTaGFyZWQ8U3R5bGVTdXJyb3VuZERhdGE+CitjbGFz
cyBTdHlsZVN1cnJvdW5kRGF0YSA6IHB1YmxpYyBTaGFyZWQ8U3R5bGVTdXJyb3VuZERhdGE+LCBw
dWJsaWMgRmFzdEFsbG9jYXRlZAogewogcHVibGljOgogICAgIFN0eWxlU3Vycm91bmREYXRhKCk7
CiAgICAgU3R5bGVTdXJyb3VuZERhdGEoY29uc3QgU3R5bGVTdXJyb3VuZERhdGEmIG8pOwogICAg
IAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTdHlsZVN1cnJvdW5kRGF0YSYgbykgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFN0eWxlU3Vycm91bmREYXRhJiBvKSBjb25zdCB7CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG8pOwpAQCAtMzg2LDE0ICszODQsMTIgQEAgcHVibGljOgogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEJveCBhdHRyaWJ1dGVzLiBOb3QgaW5o
ZXJpdGVkLgogCi1jbGFzcyBTdHlsZUJveERhdGEgOiBwdWJsaWMgU2hhcmVkPFN0eWxlQm94RGF0
YT4KK2NsYXNzIFN0eWxlQm94RGF0YSA6IHB1YmxpYyBTaGFyZWQ8U3R5bGVCb3hEYXRhPiwgcHVi
bGljIEZhc3RBbGxvY2F0ZWQKIHsKIHB1YmxpYzoKICAgICBTdHlsZUJveERhdGEoKTsKICAgICBT
dHlsZUJveERhdGEoY29uc3QgU3R5bGVCb3hEYXRhJiBvKTsKIAotICAgIE1BSU5fVEhSRUFEX0FM
TE9DQVRFRDsKLQogICAgIC8vIGNvcHkgYW5kIGFzc2lnbm1lbnQKIC8vICAgIFN0eWxlQm94RGF0
YShjb25zdCBTdHlsZUJveERhdGEgJm90aGVyKTsKIC8vICAgIGNvbnN0IFN0eWxlQm94RGF0YSAm
b3BlcmF0b3IgPSAoY29uc3QgU3R5bGVCb3hEYXRhICZvdGhlcik7CkBAIC00NjUsMTUgKzQ2MSwx
MyBAQCBlbnVtIEVVbmljb2RlQmlkaSB7CiAgICAgVUJOb3JtYWwsIEVtYmVkLCBPdmVycmlkZQog
fTsKIAotY2xhc3MgU3R5bGVWaXN1YWxEYXRhIDogcHVibGljIFNoYXJlZDxTdHlsZVZpc3VhbERh
dGE+CitjbGFzcyBTdHlsZVZpc3VhbERhdGEgOiBwdWJsaWMgU2hhcmVkPFN0eWxlVmlzdWFsRGF0
YT4sIHB1YmxpYyBGYXN0QWxsb2NhdGVkCiB7CiBwdWJsaWM6CiAgICAgU3R5bGVWaXN1YWxEYXRh
KCk7CiAgICAgflN0eWxlVmlzdWFsRGF0YSgpOwogICAgIFN0eWxlVmlzdWFsRGF0YShjb25zdCBT
dHlsZVZpc3VhbERhdGEmIG8gKTsKIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogICAg
IGJvb2wgb3BlcmF0b3I9PSggY29uc3QgU3R5bGVWaXN1YWxEYXRhICZvICkgY29uc3QgewogCXJl
dHVybiAoIGNsaXAgPT0gby5jbGlwICYmCiAgICAgICAgICAgICAgICAgIGhhc0NsaXAgPT0gby5o
YXNDbGlwICYmCkBAIC01MTIsMTMgKzUwNiwxMSBAQCBlbnVtIEVCYWNrZ3JvdW5kUmVwZWF0IHsK
ICAgICBSRVBFQVQsIFJFUEVBVF9YLCBSRVBFQVRfWSwgTk9fUkVQRUFUCiB9OwogCi1zdHJ1Y3Qg
QmFja2dyb3VuZExheWVyIHsKK3N0cnVjdCBCYWNrZ3JvdW5kTGF5ZXIgOiBwdWJsaWMgRmFzdEFs
bG9jYXRlZCB7CiBwdWJsaWM6CiAgICAgQmFja2dyb3VuZExheWVyKCk7CiAgICAgfkJhY2tncm91
bmRMYXllcigpOwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgQ2FjaGVkSW1h
Z2UqIGJhY2tncm91bmRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KICAgICBMZW5n
dGggYmFja2dyb3VuZFhQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1feFBvc2l0aW9uOyB9CiAg
ICAgTGVuZ3RoIGJhY2tncm91bmRZUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3lQb3NpdGlv
bjsgfQpAQCAtNjAxLDE1ICs1OTMsMTMgQEAgcHVibGljOgogICAgIEJhY2tncm91bmRMYXllciog
bV9uZXh0OwogfTsKIAotY2xhc3MgU3R5bGVCYWNrZ3JvdW5kRGF0YSA6IHB1YmxpYyBTaGFyZWQ8
U3R5bGVCYWNrZ3JvdW5kRGF0YT4KK2NsYXNzIFN0eWxlQmFja2dyb3VuZERhdGEgOiBwdWJsaWMg
U2hhcmVkPFN0eWxlQmFja2dyb3VuZERhdGE+LCBwdWJsaWMgRmFzdEFsbG9jYXRlZAogewogcHVi
bGljOgogICAgIFN0eWxlQmFja2dyb3VuZERhdGEoKTsKICAgICB+U3R5bGVCYWNrZ3JvdW5kRGF0
YSgpIHt9CiAgICAgU3R5bGVCYWNrZ3JvdW5kRGF0YShjb25zdCBTdHlsZUJhY2tncm91bmREYXRh
JiBvICk7CiAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgU3R5bGVCYWNrZ3JvdW5kRGF0YSYgbykgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFN0eWxlQmFja2dyb3VuZERhdGEgJm8pIGNvbnN0IHsKIAlyZXR1cm4gISgqdGhp
cyA9PSBvKTsKQEAgLTYyNiwxNCArNjE2LDEyIEBAIHB1YmxpYzoKIGVudW0gRU1hcnF1ZWVCZWhh
dmlvciB7IE1OT05FLCBNU0NST0xMLCBNU0xJREUsIE1BTFRFUk5BVEUsIE1VTkZVUkwgfTsKIGVu
dW0gRU1hcnF1ZWVEaXJlY3Rpb24geyBNQVVUTyA9IDAsIE1MRUZUID0gMSwgTVJJR0hUID0gLTEs
IE1VUCA9IDIsIE1ET1dOID0gLTIsIE1GT1JXQVJEID0gMywgTUJBQ0tXQVJEID0gLTMgfTsKIAot
Y2xhc3MgU3R5bGVNYXJxdWVlRGF0YSA6IHB1YmxpYyBTaGFyZWQ8U3R5bGVNYXJxdWVlRGF0YT4K
K2NsYXNzIFN0eWxlTWFycXVlZURhdGEgOiBwdWJsaWMgU2hhcmVkPFN0eWxlTWFycXVlZURhdGE+
LCBwdWJsaWMgRmFzdEFsbG9jYXRlZAogewogcHVibGljOgogICAgIFN0eWxlTWFycXVlZURhdGEo
KTsKICAgICBTdHlsZU1hcnF1ZWVEYXRhKGNvbnN0IFN0eWxlTWFycXVlZURhdGEmIG8pOwogICAg
IAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTdHlsZU1hcnF1ZWVEYXRhJiBvKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
U3R5bGVNYXJxdWVlRGF0YSYgbykgY29uc3QgewogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
KTsKQEAgLTY1NiwxNCArNjQ0LDEyIEBAIGVudW0gRUJveE9yaWVudCB7IEhPUklaT05UQUwsIFZF
UlRJQ0FMIH0KIGVudW0gRUJveExpbmVzIHsgU0lOR0xFLCBNVUxUSVBMRSB9OwogZW51bSBFQm94
RGlyZWN0aW9uIHsgQk5PUk1BTCwgQlJFVkVSU0UgfTsKIAotY2xhc3MgU3R5bGVGbGV4aWJsZUJv
eERhdGEgOiBwdWJsaWMgU2hhcmVkPFN0eWxlRmxleGlibGVCb3hEYXRhPgorY2xhc3MgU3R5bGVG
bGV4aWJsZUJveERhdGEgOiBwdWJsaWMgU2hhcmVkPFN0eWxlRmxleGlibGVCb3hEYXRhPiwgcHVi
bGljIEZhc3RBbGxvY2F0ZWQKIHsKIHB1YmxpYzoKICAgICBTdHlsZUZsZXhpYmxlQm94RGF0YSgp
OwogICAgIFN0eWxlRmxleGlibGVCb3hEYXRhKGNvbnN0IFN0eWxlRmxleGlibGVCb3hEYXRhJiBv
KTsKIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBTdHlsZUZsZXhpYmxlQm94RGF0YSYgbykgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFN0eWxlRmxleGlibGVCb3hEYXRhICZvKSBjb25zdCB7CiAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG8pOwpAQCAtNjgwLDE1ICs2NjYsMTMgQEAgcHVibGljOgogfTsKIAogLy8gVGhp
cyBzdHJ1Y3QgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgc2hhZG93cyBmb3IgdGhlIHRleHQtc2hh
ZG93IGFuZCBib3gtc2hhZG93IHByb3BlcnRpZXMuCi1zdHJ1Y3QgU2hhZG93RGF0YSB7CitzdHJ1
Y3QgU2hhZG93RGF0YSA6IHB1YmxpYyBGYXN0QWxsb2NhdGVkIHsKICAgICBTaGFkb3dEYXRhKGlu
dCBfeCwgaW50IF95LCBpbnQgX2JsdXIsIGNvbnN0IFFDb2xvciYgX2NvbG9yKQogICAgIDp4KF94
KSwgeShfeSksIGJsdXIoX2JsdXIpLCBjb2xvcihfY29sb3IpLCBuZXh0KDApIHt9CiAgICAgU2hh
ZG93RGF0YShjb25zdCBTaGFkb3dEYXRhJiBvKTsKICAgICAKICAgICB+U2hhZG93RGF0YSgpIHsg
ZGVsZXRlIG5leHQ7IH0KIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBTaGFkb3dEYXRhJiBvKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgU2hhZG93RGF0YSAmbykgY29uc3QgewogICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvKTsKQEAgLTc3NywxNSArNzYxLDEzIEBAIGVudW0gRUFwcGVhcmFuY2UgewogLy8gVGhpcyBz
dHJ1Y3QgaXMgZm9yIHJhcmVseSB1c2VkIG5vbi1pbmhlcml0ZWQgQ1NTMyBwcm9wZXJ0aWVzLiAg
QnkgZ3JvdXBpbmcgdGhlbSB0b2dldGhlciwKIC8vIHdlIHNhdmUgc3BhY2UsIGFuZCBvbmx5IGFs
bG9jYXRlIHRoaXMgb2JqZWN0IHdoZW4gc29tZW9uZSBhY3R1YWxseSB1c2VzCiAvLyBhIG5vbi1p
bmhlcml0ZWQgQ1NTMyBwcm9wZXJ0eS4KLWNsYXNzIFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEg
OiBwdWJsaWMgU2hhcmVkPFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGE+CitjbGFzcyBTdHlsZUNT
UzNOb25Jbmhlcml0ZWREYXRhIDogcHVibGljIFNoYXJlZDxTdHlsZUNTUzNOb25Jbmhlcml0ZWRE
YXRhPiwgcHVibGljIEZhc3RBbGxvY2F0ZWQKIHsKIHB1YmxpYzoKICAgICBTdHlsZUNTUzNOb25J
bmhlcml0ZWREYXRhKCk7CiAgICAgflN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEoKTsKICAgICBT
dHlsZUNTUzNOb25Jbmhlcml0ZWREYXRhKGNvbnN0IFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEm
IG8pOwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAjaWZuZGVmIEtIVE1MX05PX1hC
TAogICAgIGJvb2wgYmluZGluZ3NFcXVpdmFsZW50KGNvbnN0IFN0eWxlQ1NTM05vbkluaGVyaXRl
ZERhdGEmIG8pIGNvbnN0OwogI2VuZGlmCkBAIC04MTksMTUgKzgwMSwxMyBAQCBwdWJsaWM6CiAv
LyBUaGlzIHN0cnVjdCBpcyBmb3IgcmFyZWx5IHVzZWQgaW5oZXJpdGVkIENTUzMgcHJvcGVydGll
cy4gIEJ5IGdyb3VwaW5nIHRoZW0gdG9nZXRoZXIsCiAvLyB3ZSBzYXZlIHNwYWNlLCBhbmQgb25s
eSBhbGxvY2F0ZSB0aGlzIG9iamVjdCB3aGVuIHNvbWVvbmUgYWN0dWFsbHkgdXNlcwogLy8gYW4g
aW5oZXJpdGVkIENTUzMgcHJvcGVydHkuCi1jbGFzcyBTdHlsZUNTUzNJbmhlcml0ZWREYXRhIDog
cHVibGljIFNoYXJlZDxTdHlsZUNTUzNJbmhlcml0ZWREYXRhPgorY2xhc3MgU3R5bGVDU1MzSW5o
ZXJpdGVkRGF0YSA6IHB1YmxpYyBTaGFyZWQ8U3R5bGVDU1MzSW5oZXJpdGVkRGF0YT4sIHB1Ymxp
YyBGYXN0QWxsb2NhdGVkCiB7CiBwdWJsaWM6CiAgICAgU3R5bGVDU1MzSW5oZXJpdGVkRGF0YSgp
OwogICAgIH5TdHlsZUNTUzNJbmhlcml0ZWREYXRhKCk7CiAgICAgU3R5bGVDU1MzSW5oZXJpdGVk
RGF0YShjb25zdCBTdHlsZUNTUzNJbmhlcml0ZWREYXRhJiBvKTsKIAotICAgIE1BSU5fVEhSRUFE
X0FMTE9DQVRFRDsKLQogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUNTUzNJbmhlcml0
ZWREYXRhJiBvKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVDU1MzSW5o
ZXJpdGVkRGF0YSAmbykgY29uc3QgewogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsKQEAg
LTg4Miw4ICs4NjIsNiBAQCBwdWJsaWM6CiAgICAgflN0eWxlSW5oZXJpdGVkRGF0YSgpOwogICAg
IFN0eWxlSW5oZXJpdGVkRGF0YShjb25zdCBTdHlsZUluaGVyaXRlZERhdGEmIG8gKTsKIAotICAg
IE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLSAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
U3R5bGVJbmhlcml0ZWREYXRhJiBvKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yICE9ICggY29u
c3QgU3R5bGVJbmhlcml0ZWREYXRhICZvICkgY29uc3QgewogCXJldHVybiAhKCp0aGlzID09IG8p
OwpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tMl9ldmVudHNpbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbTJfZXZlbnRzaW1wbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjMwCmRpZmYgLXAgLXUgLXIxLjMwIFdlYkNvcmUva2h0bWwv
eG1sL2RvbTJfZXZlbnRzaW1wbC5oCi0tLSBXZWJDb3JlL2todG1sL3htbC9kb20yX2V2ZW50c2lt
cGwuaAkxNiBTZXAgMjAwNSAyMjo0MjoxOSAtMDAwMAkxLjMwCisrKyBXZWJDb3JlL2todG1sL3ht
bC9kb20yX2V2ZW50c2ltcGwuaAkyNyBTZXAgMjAwNSAwNzoxNzo0NyAtMDAwMApAQCAtNDQsMTUg
KzQ0LDEzIEBAIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBOb2RlSW1wbDsKIGNsYXNzIENs
aXBib2FyZEltcGw7CiAKLWNsYXNzIEV2ZW50SW1wbCA6IHB1YmxpYyBraHRtbDo6U2hhcmVkPEV2
ZW50SW1wbD4KK2NsYXNzIEV2ZW50SW1wbCA6IHB1YmxpYyBraHRtbDo6U2hhcmVkPEV2ZW50SW1w
bD4sIHB1YmxpYyBGYXN0QWxsb2NhdGVkCiB7CiBwdWJsaWM6CiAgICAgRXZlbnRJbXBsKCk7CiAg
ICAgRXZlbnRJbXBsKGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwgYm9vbCBjYW5CdWJibGVBcmcs
IGJvb2wgY2FuY2VsYWJsZUFyZyk7CiAgICAgdmlydHVhbCB+RXZlbnRJbXBsKCk7CiAKLSAgICBN
QUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICBjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBOb2RlSW1wbCAqdGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV90YXJnZXQ7IH0KICAgICB2b2lkIHNldFRhcmdldChOb2RlSW1wbCAqdGFyZ2V0KTsK
QEAgLTM2MSwxMyArMzU5LDExIEBAIHByaXZhdGU6CiAgICAgaW50IG1fd2hlZWxEZWx0YTsKIH07
CiAKLWNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyIHsKK2NsYXNzIFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyIDogcHVibGljIEZhc3RBbGxvY2F0ZWQgewogcHVibGljOgogICAgIFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBFdmVudExpc3Rl
bmVyICpsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICB+UmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXIoKTsKIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLSAgICAKICAgICBjb25zdCBB
dG9taWNTdHJpbmcgJmV2ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRUeXBlOyB9CiAg
ICAgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIoKSBjb25zdCB7IHJldHVybiBtX2xpc3RlbmVyOyB9
CiAgICAgYm9vbCB1c2VDYXB0dXJlKCkgY29uc3QgeyByZXR1cm4gbV91c2VDYXB0dXJlOyB9CkBA
IC0zODUsMTMgKzM4MSwxMSBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJlZEV2ZW50
TGlzCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
ICZhLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciAmYikgeyByZXR1cm4gIShhID09IGIp
OyB9CiAKIC8vIFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRyYWcgYW5k
IGRyb3AgYW5kIGNvcHkvcGFzdGUKLWNsYXNzIENsaXBib2FyZEltcGwgOiBwdWJsaWMga2h0bWw6
OlNoYXJlZDxDbGlwYm9hcmRJbXBsPiB7CitjbGFzcyBDbGlwYm9hcmRJbXBsIDogcHVibGljIGto
dG1sOjpTaGFyZWQ8Q2xpcGJvYXJkSW1wbD4sIHB1YmxpYyBGYXN0QWxsb2NhdGVkIHsKIHB1Ymxp
YzoKICAgICBDbGlwYm9hcmRJbXBsKCkgeyB9CiAgICAgdmlydHVhbCB+Q2xpcGJvYXJkSW1wbCgp
OwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotICAgIAogICAgIC8vIElzIHRoaXMgb3Bl
cmF0aW9uIGEgZHJhZy1kcm9wIG9yIGEgY29weS1wYXN0ZT8KICAgICB2aXJ0dWFsIGJvb2wgaXNG
b3JEcmFnZ2luZygpIGNvbnN0ID0gMDsKIApJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tMl9y
YW5nZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94
bWwvZG9tMl9yYW5nZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZmIC1wIC11
IC1yMS4yNyBXZWJDb3JlL2todG1sL3htbC9kb20yX3JhbmdlaW1wbC5oCi0tLSBXZWJDb3JlL2to
dG1sL3htbC9kb20yX3JhbmdlaW1wbC5oCTE2IFNlcCAyMDA1IDIyOjQyOjE5IC0wMDAwCTEuMjcK
KysrIFdlYkNvcmUva2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmgJMjcgU2VwIDIwMDUgMDc6MTc6
NDcgLTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgImRvbS9kb20yX3JhbmdlLmgi
CiAjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIKLSNpbmNsdWRlICJtaXNjL21haW5fdGhyZWFkX21h
bGxvYy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2MuaD4KIAogbmFtZXNwYWNlIERP
TSB7CiAKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgRE9NU3RyaW5nOwogY2xhc3MgTm9kZUltcGw7
CiBjbGFzcyBQb3NpdGlvbjsKIAotY2xhc3MgUmFuZ2VJbXBsIDogcHVibGljIGtodG1sOjpTaGFy
ZWQ8UmFuZ2VJbXBsPgorY2xhc3MgUmFuZ2VJbXBsIDogcHVibGljIGtodG1sOjpTaGFyZWQ8UmFu
Z2VJbXBsPiwgcHVibGljIEZhc3RBbGxvY2F0ZWQKIHsKICAgICBmcmllbmQgY2xhc3MgRG9jdW1l
bnRJbXBsOwogcHVibGljOgpAQCAtNTAsOCArNTAsNiBAQCBwdWJsaWM6CiAKICAgICB+UmFuZ2VJ
bXBsKCk7CiAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0gICAgCiAgICAgTm9kZUltcGwg
KnN0YXJ0Q29udGFpbmVyKGludCAmZXhjZXB0aW9uY29kZSkgY29uc3Q7CiAgICAgaW50IHN0YXJ0
T2Zmc2V0KGludCAmZXhjZXB0aW9uY29kZSkgY29uc3Q7CiAgICAgTm9kZUltcGwgKmVuZENvbnRh
aW5lcihpbnQgJmV4Y2VwdGlvbmNvZGUpIGNvbnN0OwpAQCAtMTI1LDcgKzEyMyw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBjb250YWluZWRCeVJlYWRPbmx5KCkgY29uc3Q7CiB9OwogCi1raHRtbDo6
U2hhcmVkUHRyPFJhbmdlSW1wbD4gcmFuZ2VPZkNvbnRlbnRzKE5vZGVJbXBsICpub2RlKTsKK1No
YXJlZFB0cjxSYW5nZUltcGw+IHJhbmdlT2ZDb250ZW50cyhOb2RlSW1wbCAqbm9kZSk7CiAKIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBSYW5nZUltcGwgJiwgY29uc3QgUmFuZ2VJbXBsICYpOwogaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSYW5nZUltcGwgJmEsIGNvbnN0IFJhbmdlSW1wbCAm
YikgeyByZXR1cm4gIShhID09IGIpOyB9CkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb20yX3Ry
YXZlcnNhbGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC94bWwvZG9tMl90cmF2ZXJzYWxpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlm
ZiAtcCAtdSAtcjEuMTEgV2ViQ29yZS9raHRtbC94bWwvZG9tMl90cmF2ZXJzYWxpbXBsLmgKLS0t
IFdlYkNvcmUva2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5oCTE2IFNlcCAyMDA1IDIyOjQy
OjE5IC0wMDAwCTEuMTEKKysrIFdlYkNvcmUva2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5o
CTI3IFNlcCAyMDA1IDA3OjE3OjQ3IC0wMDAwCkBAIC0yOCwyMSArMjgsMTkgQEAKIAogI2luY2x1
ZGUgImRvbS9kb20yX3RyYXZlcnNhbC5oIgogI2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCi0jaW5j
bHVkZSAibWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9GYXN0
TWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBET00gewogCiBjbGFzcyBOb2RlSW1wbDsKIGNsYXNzIERv
Y3VtZW50SW1wbDsKIAotY2xhc3MgTm9kZUZpbHRlckltcGwgOiBwdWJsaWMga2h0bWw6OlNoYXJl
ZDxOb2RlRmlsdGVySW1wbD4KK2NsYXNzIE5vZGVGaWx0ZXJJbXBsIDogcHVibGljIGtodG1sOjpT
aGFyZWQ8Tm9kZUZpbHRlckltcGw+LCBwdWJsaWMgRmFzdEFsbG9jYXRlZAogewogcHVibGljOgog
ICAgIE5vZGVGaWx0ZXJJbXBsKE5vZGVGaWx0ZXJDb25kaXRpb24gKik7CiAgICAgfk5vZGVGaWx0
ZXJJbXBsKCk7CiAgICAgCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotICAgIAogICAgIHNo
b3J0IGFjY2VwdE5vZGUoTm9kZUltcGwgKikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgpAQCAtNTIs
MTQgKzUwLDEyIEBAIHByaXZhdGU6CiAgICAgTm9kZUZpbHRlckNvbmRpdGlvbiAqbV9jb25kaXRp
b247CiB9OwogCi1jbGFzcyBUcmF2ZXJzYWxJbXBsIDogcHVibGljIGtodG1sOjpTaGFyZWQ8VHJh
dmVyc2FsSW1wbD4KK2NsYXNzIFRyYXZlcnNhbEltcGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxU
cmF2ZXJzYWxJbXBsPiwgcHVibGljIEZhc3RBbGxvY2F0ZWQKIHsKIHB1YmxpYzoKICAgICBUcmF2
ZXJzYWxJbXBsKE5vZGVJbXBsICosIGludCB3aGF0VG9TaG93LCBOb2RlRmlsdGVySW1wbCAqLCBi
b29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpOwogICAgIH5UcmF2ZXJzYWxJbXBsKCk7CiAKLSAg
ICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0gICAgCiAgICAgTm9kZUltcGwgKnJvb3QoKSBjb25z
dCB7IHJldHVybiBtX3Jvb3Q7IH0KICAgICB1bnNpZ25lZCB3aGF0VG9TaG93KCkgY29uc3QgeyBy
ZXR1cm4gbV93aGF0VG9TaG93OyB9CiAgICAgTm9kZUZpbHRlckltcGwgKmZpbHRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsdGVyOyB9CkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb20yX3ZpZXdz
aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9k
b20yX3ZpZXdzaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEu
NiBXZWJDb3JlL2todG1sL3htbC9kb20yX3ZpZXdzaW1wbC5oCi0tLSBXZWJDb3JlL2todG1sL3ht
bC9kb20yX3ZpZXdzaW1wbC5oCTEyIE1heSAyMDA1IDE3OjExOjIyIC0wMDAwCTEuNgorKysgV2Vi
Q29yZS9raHRtbC94bWwvZG9tMl92aWV3c2ltcGwuaAkyNyBTZXAgMjAwNSAwNzoxNzo0NyAtMDAw
MApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiY3NzL2Nzc192YWx1ZWltcGwuaCIKICNp
bmNsdWRlICJtaXNjL3NoYXJlZC5oIgotI2luY2x1ZGUgIm1pc2MvbWFpbl90aHJlYWRfbWFsbG9j
LmgiCisjaW5jbHVkZSA8a3htbGNvcmUvRmFzdE1hbGxvYy5oPgogCiBuYW1lc3BhY2UgRE9NIHsK
IApAQCAtMzUsMTQgKzM1LDEyIEBAIGNsYXNzIEVsZW1lbnRJbXBsOwogY2xhc3MgRE9NU3RyaW5n
SW1wbDsKIAogLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKLWNsYXNzIEFic3RyYWN0Vmll
d0ltcGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxBYnN0cmFjdFZpZXdJbXBsPgorY2xhc3MgQWJz
dHJhY3RWaWV3SW1wbCA6IHB1YmxpYyBraHRtbDo6U2hhcmVkPEFic3RyYWN0Vmlld0ltcGw+LCBw
dWJsaWMgRmFzdEFsbG9jYXRlZAogewogcHVibGljOgogICAgIEFic3RyYWN0Vmlld0ltcGwoRG9j
dW1lbnRJbXBsICpfZG9jdW1lbnQpOwogICAgIH5BYnN0cmFjdFZpZXdJbXBsKCk7CiAKLSAgICBN
QUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0gICAgCiAgICAgRG9jdW1lbnRJbXBsICpkb2N1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBDU1NTdHlsZURlY2xhcmF0aW9uSW1w
bCAqZ2V0Q29tcHV0ZWRTdHlsZShFbGVtZW50SW1wbCAqZWx0LCBET01TdHJpbmdJbXBsICpwc2V1
ZG9FbHQpOwogcHJvdGVjdGVkOgpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2Rv
Y2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMjcKZGlmZiAtcCAtdSAtcjEuMTI3IFdl
YkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmgKLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbV9k
b2NpbXBsLmgJMjMgU2VwIDIwMDUgMDM6Mjg6MjggLTAwMDAJMS4xMjcKKysrIFdlYkNvcmUva2h0
bWwveG1sL2RvbV9kb2NpbXBsLmgJMjcgU2VwIDIwMDUgMDc6MTc6NDcgLTAwMDAKQEAgLTEyNSwx
NCArMTI1LDEyIEBAIG5hbWVzcGFjZSBET00gewogICAgICAgICB9CiAgICAgfTsKICAgICAKLWNs
YXNzIERPTUltcGxlbWVudGF0aW9uSW1wbCA6IHB1YmxpYyBraHRtbDo6U2hhcmVkPERPTUltcGxl
bWVudGF0aW9uSW1wbD4KK2NsYXNzIERPTUltcGxlbWVudGF0aW9uSW1wbCA6IHB1YmxpYyBraHRt
bDo6U2hhcmVkPERPTUltcGxlbWVudGF0aW9uSW1wbD4sIHB1YmxpYyBGYXN0QWxsb2NhdGVkCiB7
CiBwdWJsaWM6CiAgICAgRE9NSW1wbGVtZW50YXRpb25JbXBsKCk7CiAgICAgfkRPTUltcGxlbWVu
dGF0aW9uSW1wbCgpOwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgLy8gRE9N
IG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBET01JbXBsZW1lbnRhdGlvbgogICAgIGJvb2wgaGFz
RmVhdHVyZSAoIGNvbnN0IERPTVN0cmluZyAmZmVhdHVyZSwgY29uc3QgRE9NU3RyaW5nICZ2ZXJz
aW9uICk7CiAgICAgRG9jdW1lbnRUeXBlSW1wbCAqY3JlYXRlRG9jdW1lbnRUeXBlKCBjb25zdCBE
T01TdHJpbmcgJnF1YWxpZmllZE5hbWUsIGNvbnN0IERPTVN0cmluZyAmcHVibGljSWQsCkluZGV4
OiBXZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjgyCmRpZmYgLXAgLXUgLXIxLjgyIFdlYkNvcmUva2h0bWwveG1s
L2RvbV9lbGVtZW50aW1wbC5jcHAKLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1w
bC5jcHAJMTYgU2VwIDIwMDUgMjI6NDI6MjAgLTAwMDAJMS44MgorKysgV2ViQ29yZS9raHRtbC94
bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAkyNyBTZXAgMjAwNSAwNzoxNzo0OCAtMDAwMApAQCAtOTY1
LDcgKzk2NSw3IEBAIHZvaWQgTmFtZWRBdHRyTWFwSW1wbDo6Y2xlYXJBdHRyaWJ1dGVzKCkKICAg
ICAgICAgICAgICAgICBhdHRyc1tpXS0+bV9pbXBsLT5tX2VsZW1lbnQgPSAwOwogICAgICAgICAg
ICAgYXR0cnNbaV0tPmRlcmVmKCk7CiAgICAgICAgIH0KLSAgICAgICAgbWFpbl90aHJlYWRfZnJl
ZShhdHRycyk7CisgICAgICAgIGZhc3RGcmVlKGF0dHJzKTsKICAgICAgICAgYXR0cnMgPSAwOwog
ICAgIH0KICAgICBsZW4gPSAwOwpAQCAtOTk2LDcgKzk5Niw3IEBAIE5hbWVkQXR0ck1hcEltcGwm
IE5hbWVkQXR0ck1hcEltcGw6Om9wZXIKIAogICAgIGNsZWFyQXR0cmlidXRlcygpOwogICAgIGxl
biA9IG90aGVyLmxlbjsKLSAgICBhdHRycyA9IHN0YXRpY19jYXN0PEF0dHJpYnV0ZUltcGwgKio+
KG1haW5fdGhyZWFkX21hbGxvYyhsZW4gKiBzaXplb2YoQXR0cmlidXRlSW1wbCAqKSkpOworICAg
IGF0dHJzID0gc3RhdGljX2Nhc3Q8QXR0cmlidXRlSW1wbCAqKj4oZmFzdE1hbGxvYyhsZW4gKiBz
aXplb2YoQXR0cmlidXRlSW1wbCAqKSkpOwogCiAgICAgLy8gZmlyc3QgaW5pdGlhbGl6ZSBhdHRy
cyB2ZWN0b3IsIHRoZW4gY2FsbCBhdHRyaWJ1dGVDaGFuZ2VkIG9uIGl0CiAgICAgLy8gdGhpcyBh
bGxvd3MgYXR0cmlidXRlQ2hhbmdlZCB0byB1c2UgZ2V0QXR0cmlidXRlCkBAIC0xMDE4LDExICsx
MDE4LDExIEBAIE5hbWVkQXR0ck1hcEltcGwmIE5hbWVkQXR0ck1hcEltcGw6Om9wZXIKIHZvaWQg
TmFtZWRBdHRyTWFwSW1wbDo6YWRkQXR0cmlidXRlKEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAg
ICAgLy8gQWRkIHRoZSBhdHRyaWJ1dGUgdG8gdGhlIGxpc3QKLSAgICBBdHRyaWJ1dGVJbXBsICoq
bmV3QXR0cnMgPSBzdGF0aWNfY2FzdDxBdHRyaWJ1dGVJbXBsICoqPihtYWluX3RocmVhZF9tYWxs
b2MoKGxlbiArIDEpICogc2l6ZW9mKEF0dHJpYnV0ZUltcGwgKikpKTsKKyAgICBBdHRyaWJ1dGVJ
bXBsICoqbmV3QXR0cnMgPSBzdGF0aWNfY2FzdDxBdHRyaWJ1dGVJbXBsICoqPihmYXN0TWFsbG9j
KChsZW4gKyAxKSAqIHNpemVvZihBdHRyaWJ1dGVJbXBsICopKSk7CiAgICAgaWYgKGF0dHJzKSB7
CiAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICAgICAgbmV3QXR0cnNb
aV0gPSBhdHRyc1tpXTsKLSAgICAgIG1haW5fdGhyZWFkX2ZyZWUoYXR0cnMpOworICAgICAgZmFz
dEZyZWUoYXR0cnMpOwogICAgIH0KICAgICBhdHRycyA9IG5ld0F0dHJzOwogICAgIGF0dHJzW2xl
bisrXSA9IGF0dHI7CkBAIC0xMDU3LDE5ICsxMDU3LDE5IEBAIHZvaWQgTmFtZWRBdHRyTWFwSW1w
bDo6cmVtb3ZlQXR0cmlidXRlKGMKICAgICBpZiAoYXR0cnNbaW5kZXhdLT5tX2ltcGwpCiAgICAg
ICAgIGF0dHJzW2luZGV4XS0+bV9pbXBsLT5tX2VsZW1lbnQgPSAwOwogICAgIGlmIChsZW4gPT0g
MSkgewotICAgICAgICBtYWluX3RocmVhZF9mcmVlKGF0dHJzKTsKKyAgICAgICAgZmFzdEZyZWUo
YXR0cnMpOwogICAgICAgICBhdHRycyA9IDA7CiAgICAgICAgIGxlbiA9IDA7CiAgICAgfQogICAg
IGVsc2UgewotICAgICAgICBBdHRyaWJ1dGVJbXBsICoqbmV3QXR0cnMgPSBzdGF0aWNfY2FzdDxB
dHRyaWJ1dGVJbXBsICoqPihtYWluX3RocmVhZF9tYWxsb2MoKGxlbiAtIDEpICogc2l6ZW9mKEF0
dHJpYnV0ZUltcGwgKikpKTsKKyAgICAgICAgQXR0cmlidXRlSW1wbCAqKm5ld0F0dHJzID0gc3Rh
dGljX2Nhc3Q8QXR0cmlidXRlSW1wbCAqKj4oZmFzdE1hbGxvYygobGVuIC0gMSkgKiBzaXplb2Yo
QXR0cmlidXRlSW1wbCAqKSkpOwogICAgICAgICB1aW50IGk7CiAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCB1aW50KGluZGV4KTsgaSsrKQogICAgICAgICAgICAgbmV3QXR0cnNbaV0gPSBhdHRyc1tp
XTsKICAgICAgICAgbGVuLS07CiAgICAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspCiAgICAgICAg
ICAgICBuZXdBdHRyc1tpXSA9IGF0dHJzW2krMV07Ci0gICAgICAgIG1haW5fdGhyZWFkX2ZyZWUo
YXR0cnMpOworICAgICAgICBmYXN0RnJlZShhdHRycyk7CiAgICAgICAgIGF0dHJzID0gbmV3QXR0
cnM7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1l
bnRpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTIKZGlmZiAtcCAtdSAtcjEuNTIgV2Vi
Q29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgKLS0tIFdlYkNvcmUva2h0bWwveG1sL2Rv
bV9lbGVtZW50aW1wbC5oCTE2IFNlcCAyMDA1IDIyOjQyOjIwIC0wMDAwCTEuNTIKKysrIFdlYkNv
cmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCTI3IFNlcCAyMDA1IDA3OjE3OjQ4IC0wMDAw
CkBAIC01OCw3ICs1OCw3IEBAIGNsYXNzIEF0dHJJbXBsOwogLy8gdGhlIGFjdHVhbCBBdHRyIChB
dHRySW1wbCkgd2l0aCBpdHMgdmFsdWUgYXMgdGV4dGNoaWxkCiAvLyBpcyBvbmx5IGFsbG9jYXRl
ZCBvbiBkZW1hbmQgYnkgdGhlIERPTSBiaW5kaW5ncy4KIC8vIEFueSB1c2Ugb2YgQXR0ckltcGwg
aW5zaWRlIGtodG1sIHNob3VsZCBiZSBhdm9pZGVkLgotY2xhc3MgQXR0cmlidXRlSW1wbCA6IHB1
YmxpYyBraHRtbDo6U2hhcmVkPEF0dHJpYnV0ZUltcGw+CisgY2xhc3MgQXR0cmlidXRlSW1wbCA6
IHB1YmxpYyBraHRtbDo6U2hhcmVkPEF0dHJpYnV0ZUltcGw+LCBwdWJsaWMgRmFzdEFsbG9jYXRl
ZAogewogICAgIGZyaWVuZCBjbGFzcyBOYW1lZEF0dHJNYXBJbXBsOwogICAgIGZyaWVuZCBjbGFz
cyBFbGVtZW50SW1wbDsKQEAgLTc2LDggKzc2LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+
QXR0cmlidXRlSW1wbCgpIHt9CiAgICAgCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0K
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5w
cmVmaXgoKTsgfQogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lLmxvY2FsTmFtZSgpOyB9CkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb21f
bm9kZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L3htbC9kb21fbm9kZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5MwpkaWZmIC1w
IC11IC1yMS4xOTMgV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAotLS0gV2ViQ29y
ZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAkyNCBTZXAgMjAwNSAwMToxOTowMiAtMDAwMAkx
LjE5MworKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAkyNyBTZXAgMjAwNSAw
NzoxNzo0OSAtMDAwMApAQCAtNTgsNyArNTgsNyBAQAogI2VuZGlmCiAKICNpZiBBUFBMRV9DSEFO
R0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2Vy
dGlvbnMuaD4KICNpbmNsdWRlICJLV1FMb2dnaW5nLmgiCiAjZWxzZQogI2RlZmluZSBBU1NFUlQo
YXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9t
X25vZGVpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
eG1sL2RvbV9ub2RlaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwMgpkaWZmIC1wIC11
IC1yMS4xMDIgV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmgKLS0tIFdlYkNvcmUva2h0
bWwveG1sL2RvbV9ub2RlaW1wbC5oCTIwIFNlcCAyMDA1IDIzOjAxOjQxIC0wMDAwCTEuMTAyCisr
KyBXZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuaAkyNyBTZXAgMjAwNSAwNzoxNzo0OSAt
MDAwMApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNp
bmNsdWRlICJkb20vZG9tX25vZGUuaCIKLSNpbmNsdWRlICJtaXNjL21haW5fdGhyZWFkX21hbGxv
Yy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlICJtaXNjL2hl
bHBlci5oIgogI2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCiAjaW5jbHVkZSAiZG9tX2F0b21pY3N0
cmluZy5oIgpAQCAtNTEsOCArNTEsNiBAQCBuYW1lc3BhY2Uga2h0bWwgewogCiBuYW1lc3BhY2Ug
RE9NIHsKIAotdXNpbmcga2h0bWw6OlNoYXJlZFB0cjsKLQogY2xhc3MgQXRvbWljU3RyaW5nOwog
Y2xhc3MgRG9jdW1lbnRJbXBsOwogY2xhc3MgRWxlbWVudEltcGw7CkBAIC03OCwxNSArNzYsMTMg
QEAgcHJpdmF0ZToKIH07CiAKIC8vIHRoaXMgY2xhc3MgaW1wbGVtZW50cyBub2Rlcywgd2hpY2gg
Y2FuIGhhdmUgYSBwYXJlbnQgYnV0IG5vIGNoaWxkcmVuOgotY2xhc3MgTm9kZUltcGwgOiBwdWJs
aWMga2h0bWw6OlRyZWVTaGFyZWQ8Tm9kZUltcGw+CitjbGFzcyBOb2RlSW1wbCA6IHB1YmxpYyBr
aHRtbDo6VHJlZVNoYXJlZDxOb2RlSW1wbD4sIHB1YmxpYyBGYXN0QWxsb2NhdGVkCiB7CiAgICAg
ZnJpZW5kIGNsYXNzIERvY3VtZW50SW1wbDsKIHB1YmxpYzoKICAgICBOb2RlSW1wbChEb2N1bWVu
dFB0ciAqZG9jKTsKICAgICB2aXJ0dWFsIH5Ob2RlSW1wbCgpOwogCi0gICAgTUFJTl9USFJFQURf
QUxMT0NBVEVEOwotCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlCiAg
ICAgdmlydHVhbCBib29sIGhhc1RhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgp
IGNvbnN0ID0gMDsKQEAgLTU2OSwxNCArNTY1LDEyIEBAIHB1YmxpYzoKIGNsYXNzIE5vZGU7CiBj
bGFzcyBOb2RlSW1wbDsKIAotY2xhc3MgTm9kZUxpc3RJbXBsIDogcHVibGljIGtodG1sOjpTaGFy
ZWQ8Tm9kZUxpc3RJbXBsPgorY2xhc3MgTm9kZUxpc3RJbXBsIDogcHVibGljIGtodG1sOjpTaGFy
ZWQ8Tm9kZUxpc3RJbXBsPiwgcHVibGljIEZhc3RBbGxvY2F0ZWQKIHsKIHB1YmxpYzoKICAgICBO
b2RlTGlzdEltcGwoIE5vZGVJbXBsICpfcm9vdE5vZGUgKTsKICAgICB2aXJ0dWFsIH5Ob2RlTGlz
dEltcGwoKTsKIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogICAgIC8vIERPTSBtZXRo
b2RzICYgYXR0cmlidXRlcyBmb3IgTm9kZUxpc3QKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIE5vZGVJbXBsICppdGVtICggdW5zaWduZWQgaW5k
ZXggKSBjb25zdCA9IDA7CkBAIC02NDIsMTQgKzYzNiwxMiBAQCBwcm90ZWN0ZWQ6CiAvLyBHZW5l
cmljIE5hbWVkTm9kZU1hcCBpbnRlcmZhY2UKIC8vIE90aGVyIGNsYXNzZXMgaW1wbGVtZW50IHRo
aXMgZm9yIG1vcmUgc3BlY2lmaWMgc2l0dWF0aW9ucyBlLmcuIGF0dHJpYnV0ZXMKIC8vIG9mIGFu
IGVsZW1lbnQKLWNsYXNzIE5hbWVkTm9kZU1hcEltcGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxO
YW1lZE5vZGVNYXBJbXBsPgorY2xhc3MgTmFtZWROb2RlTWFwSW1wbCA6IHB1YmxpYyBraHRtbDo6
U2hhcmVkPE5hbWVkTm9kZU1hcEltcGw+LCBwdWJsaWMgRmFzdEFsbG9jYXRlZAogewogcHVibGlj
OgogICAgIE5hbWVkTm9kZU1hcEltcGwoKSB7fQogICAgIHZpcnR1YWwgfk5hbWVkTm9kZU1hcElt
cGwoKSB7fQogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgTm9kZUltcGwgKmdl
dE5hbWVkSXRlbShjb25zdCBET01TdHJpbmcgJm5hbWUpIGNvbnN0IHsgcmV0dXJuIGdldE5hbWVk
SXRlbU5TKERPTVN0cmluZygpLCBuYW1lKTsgfQogICAgIFNoYXJlZFB0cjxOb2RlSW1wbD4gcmVt
b3ZlTmFtZWRJdGVtKGNvbnN0IERPTVN0cmluZyAmbmFtZSwgaW50ICZleGNlcHRpb24pIHsgcmV0
dXJuIHJlbW92ZU5hbWVkSXRlbU5TKERPTVN0cmluZygpLCBuYW1lLCBleGNlcHRpb24pOyB9CiAK
SW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNzgKZGlmZiAtcCAtdSAtcjEuNzggV2ViQ29yZS9raHRtbC94bWwv
ZG9tX3Bvc2l0aW9uLmNwcAotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcAkx
NiBTZXAgMjAwNSAyMjo0MjoyMCAtMDAwMAkxLjc4CisrKyBXZWJDb3JlL2todG1sL3htbC9kb21f
cG9zaXRpb24uY3BwCTI3IFNlcCAyMDA1IDA3OjE3OjUwIC0wMDAwCkBAIC00Nyw3ICs0Nyw3IEBA
CiAjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAi
S1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbmNs
dWRlICJLV1FMb2dnaW5nLmgiCiAjZWxzZQogI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3Nl
cnQoYXNzZXJ0aW9uKQpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX3N0cmlu
Z2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC1wIC11IC1yMS4xNCBXZWJD
b3JlL2todG1sL3htbC9kb21fc3RyaW5naW1wbC5oCi0tLSBXZWJDb3JlL2todG1sL3htbC9kb21f
c3RyaW5naW1wbC5oCTIxIEp1biAyMDA1IDIyOjI3OjU1IC0wMDAwCTEuMTQKKysrIFdlYkNvcmUv
a2h0bWwveG1sL2RvbV9zdHJpbmdpbXBsLmgJMjcgU2VwIDIwMDUgMDc6MTc6NTAgLTAwMDAKQEAg
LTI2LDE0ICsyNiwxNCBAQAogCiAjaW5jbHVkZSAibWlzYy9raHRtbGxheW91dC5oIgogI2luY2x1
ZGUgIm1pc2Mvc2hhcmVkLmgiCi0jaW5jbHVkZSAibWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaCIK
KyNpbmNsdWRlIDxreG1sY29yZS9GYXN0TWFsbG9jLmg+CiAKLSNkZWZpbmUgUVRfQUxMT0NfUUNI
QVJfVkVDKCBOICkgc3RhdGljX2Nhc3Q8UUNoYXIqPihtYWluX3RocmVhZF9tYWxsb2MoIHNpemVv
ZihRQ2hhcikqKCBOICkgKSkKLSNkZWZpbmUgUVRfREVMRVRFX1FDSEFSX1ZFQyggUCApIG1haW5f
dGhyZWFkX2ZyZWUgKCh2b2lkKikoIFAgKSkKKyNkZWZpbmUgUVRfQUxMT0NfUUNIQVJfVkVDKE4p
IHN0YXRpY19jYXN0PFFDaGFyKj4oZmFzdE1hbGxvYyhzaXplb2YoUUNoYXIpKihOKSkpCisjZGVm
aW5lIFFUX0RFTEVURV9RQ0hBUl9WRUMoUCkgZmFzdEZyZWUoUCkKIAogbmFtZXNwYWNlIERPTSB7
CiAKLWNsYXNzIERPTVN0cmluZ0ltcGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxET01TdHJpbmdJ
bXBsPgorY2xhc3MgRE9NU3RyaW5nSW1wbCA6IHB1YmxpYyBraHRtbDo6U2hhcmVkPERPTVN0cmlu
Z0ltcGw+LCBwdWJsaWMgRmFzdEFsbG9jYXRlZAogewogcHJpdmF0ZToKICAgICBzdHJ1Y3QgV2l0
aE9uZVJlZiB7IH07CkBAIC00OCw4ICs0OCw2IEBAIHB1YmxpYzoKICAgICBET01TdHJpbmdJbXBs
KGNvbnN0IFFDaGFyICZjaCk7CiAgICAgfkRPTVN0cmluZ0ltcGwoKTsKICAgICAKLSAgICBNQUlO
X1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyBpZiAoX2hh
c2ggPT0gMCkgX2hhc2ggPSBjb21wdXRlSGFzaChzLCBsKTsgcmV0dXJuIF9oYXNoOyB9CiAgICAg
c3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFFDaGFyICosIGludCBsZW5ndGgpOwog
ICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBjaGFyICopOwpJbmRleDogV2Vi
Q29yZS9rd3EvRE9NLUNTUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9rd3EvRE9NLUNTUy5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZmIC1wIC11IC1y
MS4yNyBXZWJDb3JlL2t3cS9ET00tQ1NTLm1tCi0tLSBXZWJDb3JlL2t3cS9ET00tQ1NTLm1tCTIz
IFNlcCAyMDA1IDE4OjI0OjU4IC0wMDAwCTEuMjcKKysrIFdlYkNvcmUva3dxL0RPTS1DU1MubW0J
MjcgU2VwIDIwMDUgMDc6MTc6NTAgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAKICNpbXBvcnQgImh0
bWxfaGVhZGltcGwuaCIKIAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKLSNpbXBvcnQgIktXUUFz
c2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIktX
UUZvdW5kYXRpb25FeHRyYXMuaCIKIAogdXNpbmcgRE9NOjpBYnN0cmFjdFZpZXdJbXBsOwpJbmRl
eDogV2ViQ29yZS9rd3EvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2t3cS9ET00ubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDcKZGlmZiAtcCAtdSAtcjEu
NDcgV2ViQ29yZS9rd3EvRE9NLm1tCi0tLSBXZWJDb3JlL2t3cS9ET00ubW0JMjAgU2VwIDIwMDUg
MDc6NTU6NTQgLTAwMDAJMS40NworKysgV2ViQ29yZS9rd3EvRE9NLm1tCTI3IFNlcCAyMDA1IDA3
OjE3OjUxIC0wMDAwCkBAIC01NSw3ICs1NSw3IEBACiAjaW1wb3J0ICJET01IVE1MLmgiCiAjaW1w
b3J0ICJET01JbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NUHJpdmF0ZS5oIgotI2ltcG9ydCAiS1dR
QXNzZXJ0aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAi
S1dRRm91bmRhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCAiS1dRS0hUTUxQYXJ0LmgiCiAKQEAgLTk2
LDcgKzk2LDYgQEAgdXNpbmcgRE9NOjpUcmVlV2Fsa2VySW1wbDsKIHVzaW5nIGtodG1sOjpIYXNo
TWFwOwogdXNpbmcga2h0bWw6OlBvaW50ZXJIYXNoOwogdXNpbmcga2h0bWw6OlJlbmRlck9iamVj
dDsKLXVzaW5nIGtodG1sOjpTaGFyZWRQdHI7CiAKIEBpbnRlcmZhY2UgRE9NQXR0ciAoV2ViQ29y
ZUludGVybmFsKQogKyAoRE9NQXR0ciAqKV9hdHRyV2l0aEltcGw6KEF0dHJJbXBsICopaW1wbDsK
SW5kZXg6IFdlYkNvcmUva3dxL0RPTUV2ZW50cy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9rd3EvRE9NRXZlbnRzLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYK
ZGlmZiAtcCAtdSAtcjEuNiBXZWJDb3JlL2t3cS9ET01FdmVudHMubW0KLS0tIFdlYkNvcmUva3dx
L0RPTUV2ZW50cy5tbQkxNiBTZXAgMjAwNSAyMjo0MjoyMyAtMDAwMAkxLjYKKysrIFdlYkNvcmUv
a3dxL0RPTUV2ZW50cy5tbQkyNyBTZXAgMjAwNSAwNzoxNzo1MSAtMDAwMApAQCAtMjgsNyArMjgs
NyBAQAogI2ltcG9ydCAiRE9NRXZlbnRzSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVZpZXdzSW50
ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUludGVybmFsLmgiCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25z
LmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAKICNpbXBvcnQgImRvbV9kb2Np
bXBsLmgiCiAjaW1wb3J0ICJkb20yX2V2ZW50c2ltcGwuaCIKSW5kZXg6IFdlYkNvcmUva3dxL0RP
TUhUTUwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0RPTUhU
TUwubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjkKZGlmZiAtcCAtdSAtcjEuMjkgV2ViQ29y
ZS9rd3EvRE9NSFRNTC5tbQotLS0gV2ViQ29yZS9rd3EvRE9NSFRNTC5tbQkxNiBTZXAgMjAwNSAy
Mjo0MjoyMyAtMDAwMAkxLjI5CisrKyBXZWJDb3JlL2t3cS9ET01IVE1MLm1tCTI3IFNlcCAyMDA1
IDA3OjE3OjUyIC0wMDAwCkBAIC00NSw3ICs0NSw3IEBACiAjaW1wb3J0ICJET01FeHRlbnNpb25z
LmgiCiAjaW1wb3J0ICJET01JbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NSFRNTEludGVybmFsLmgi
Ci0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25z
Lmg+CiAjaW1wb3J0ICJLV1FGb3VuZGF0aW9uRXh0cmFzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBE
T006OkhUTUxOYW1lczsKSW5kZXg6IFdlYkNvcmUva3dxL0RPTUludGVybmFsLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9ET01JbnRlcm5hbC5tbSx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXAgLXUgLXIxLjggV2ViQ29yZS9rd3EvRE9NSW50ZXJu
YWwubW0KLS0tIFdlYkNvcmUva3dxL0RPTUludGVybmFsLm1tCTI5IEF1ZyAyMDA1IDIxOjI5OjI4
IC0wMDAwCTEuOAorKysgV2ViQ29yZS9rd3EvRE9NSW50ZXJuYWwubW0JMjcgU2VwIDIwMDUgMDc6
MTc6NTIgLTAwMDAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbXBvcnQgImtqc19kb20uaCIKICNpbXBv
cnQgImtqc19wcm94eS5oIgogCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxr
eG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0ICJLV1FLSFRNTFBhcnQuaCIKIAogI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIuaD4KSW5kZXg6IFdlYkNvcmUva3dxL0RPTVZp
ZXdzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9ET01WaWV3
cy5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEgV2ViQ29yZS9r
d3EvRE9NVmlld3MubW0KLS0tIFdlYkNvcmUva3dxL0RPTVZpZXdzLm1tCTIzIE1heSAyMDA0IDIy
OjQ1OjI4IC0wMDAwCTEuMQorKysgV2ViQ29yZS9rd3EvRE9NVmlld3MubW0JMjcgU2VwIDIwMDUg
MDc6MTc6NTIgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2ltcG9ydCAiRE9NSW50ZXJuYWwu
aCIKICNpbXBvcnQgIkRPTVZpZXdzSW50ZXJuYWwuaCIKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMu
aCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KIAogI2ltcG9ydCAiZG9tX2RvY2lt
cGwuaCIKICNpbXBvcnQgImRvbTJfdmlld3NpbXBsLmgiCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FB
Y2NPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tX
UUFjY09iamVjdC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44MgpkaWZmIC1wIC11IC1yMS44
MiBXZWJDb3JlL2t3cS9LV1FBY2NPYmplY3QubW0KLS0tIFdlYkNvcmUva3dxL0tXUUFjY09iamVj
dC5tbQkyNCBTZXAgMjAwNSAwMToxOTowMyAtMDAwMAkxLjgyCisrKyBXZWJDb3JlL2t3cS9LV1FB
Y2NPYmplY3QubW0JMjcgU2VwIDIwMDUgMDc6MTc6NTMgLTAwMDAKQEAgLTMxLDcgKzMxLDcgQEAK
ICNpbmNsdWRlIDxtYWNoLW8vZHlsZC5oPgogCiAjaW1wb3J0ICJLV1FBY2NPYmplY3RDYWNoZS5o
IgotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9u
cy5oPgogI2ltcG9ydCAiS1dRRm91bmRhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCAiS1dRV2lkZ2V0
LmgiCiAjaW1wb3J0ICJXZWJDb3JlQnJpZGdlLmgiCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FBY2NP
YmplY3RDYWNoZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3Ev
S1dRQWNjT2JqZWN0Q2FjaGUubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC1wIC11
IC1yMS45IFdlYkNvcmUva3dxL0tXUUFjY09iamVjdENhY2hlLm1tCi0tLSBXZWJDb3JlL2t3cS9L
V1FBY2NPYmplY3RDYWNoZS5tbQk1IEp1biAyMDA1IDA3OjA2OjUyIC0wMDAwCTEuOQorKysgV2Vi
Q29yZS9rd3EvS1dRQWNjT2JqZWN0Q2FjaGUubW0JMjcgU2VwIDIwMDUgMDc6MTc6NTMgLTAwMDAK
QEAgLTI2LDcgKzI2LDcgQEAKICNpbXBvcnQgIktXUUFjY09iamVjdENhY2hlLmgiCiAKICNpbXBv
cnQgIktXUUFjY09iamVjdC5oIgotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgorI2ltcG9ydCA8
a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAiS1dRRm91bmRhdGlvbkV4dHJhcy5oIgog
I2ltcG9ydCAiS1dRU3RyaW5nLmgiCiAjaW1wb3J0ICJyZW5kZXJfb2JqZWN0LmgiCkluZGV4OiBX
ZWJDb3JlL2t3cS9LV1FBcnJheUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9rd3EvS1dRQXJyYXlJbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZm
IC1wIC11IC1yMS44IFdlYkNvcmUva3dxL0tXUUFycmF5SW1wbC5oCi0tLSBXZWJDb3JlL2t3cS9L
V1FBcnJheUltcGwuaAkxNSBBdWcgMjAwNSAwMDozMjo0MCAtMDAwMAkxLjgKKysrIFdlYkNvcmUv
a3dxL0tXUUFycmF5SW1wbC5oCTI3IFNlcCAyMDA1IDA3OjE3OjUzIC0wMDAwCkBAIC0yOSw3ICsy
OSw3IEBACiAjaW5jbHVkZSAiS1dRUmVmUHRyLmgiCiAjaW5jbHVkZSAiS1dRRGVmLmgiCiAjaW5j
bHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSAibWFpbl90aHJlYWRfbWFsbG9jLmgiCisjaW5jbHVk
ZSAia3htbGNvcmUvRmFzdE1hbGxvYy5oIgogCiBjbGFzcyBLV1FBcnJheUltcGwKIHsKQEAgLTUy
LDE0ICs1MiwxMiBAQCBjbGFzcyBLV1FBcnJheUltcGwKICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgS1dRQXJyYXlJbXBsICYpIGNvbnN0OwogCiAgcHJpdmF0ZToKLSAgICBjbGFzcyBLV1FBcnJh
eVByaXZhdGUKKyAgICBjbGFzcyBLV1FBcnJheVByaXZhdGUgOiBwdWJsaWMgRmFzdEFsbG9jYXRl
ZAogICAgIHsKICAgICBwdWJsaWM6CQogCUtXUUFycmF5UHJpdmF0ZShzaXplX3QgcE51bUl0ZW1z
LCBzaXplX3QgcEl0ZW1TaXplKTsKIAl+S1dRQXJyYXlQcml2YXRlKCk7CiAKLSAgICAgICAgTUFJ
Tl9USFJFQURfQUxMT0NBVEVEOwotCiAJc2l6ZV90IG51bUl0ZW1zOwogCXNpemVfdCBpdGVtU2l6
ZTsKIAljaGFyICpkYXRhOwpJbmRleDogV2ViQ29yZS9rd3EvS1dRQXJyYXlJbXBsLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FBcnJheUltcGwubW0sdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtcCAtdSAtcjEuMTIgV2ViQ29yZS9rd3EvS1dR
QXJyYXlJbXBsLm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FBcnJheUltcGwubW0JMTggQXVnIDIwMDUg
MDA6MzE6MjMgLTAwMDAJMS4xMgorKysgV2ViQ29yZS9rd3EvS1dRQXJyYXlJbXBsLm1tCTI3IFNl
cCAyMDA1IDA3OjE3OjUzIC0wMDAwCkBAIC0zMSwyMSArMzEsMTggQEAKICNkZWZpbmUJTUlOKGEs
YikgKCgoYSk8KGIpKT8oYSk6KGIpKQogCiB1c2luZyBzdGQ6Om5vdGhyb3c7Ci11c2luZyBraHRt
bDo6bWFpbl90aHJlYWRfbWFsbG9jOwotdXNpbmcga2h0bWw6Om1haW5fdGhyZWFkX2ZyZWU7Ci11
c2luZyBraHRtbDo6bWFpbl90aHJlYWRfcmVhbGxvYzsKIAogS1dRQXJyYXlJbXBsOjpLV1FBcnJh
eVByaXZhdGU6OktXUUFycmF5UHJpdmF0ZShzaXplX3QgcEl0ZW1TaXplLCBzaXplX3QgcE51bUl0
ZW1zKSA6IAogICAgIG51bUl0ZW1zKHBOdW1JdGVtcyksIAogICAgIGl0ZW1TaXplKHBJdGVtU2l6
ZSksIAotICAgIGRhdGEocE51bUl0ZW1zID4gMCA/IHN0YXRpY19jYXN0PGNoYXIgKj4obWFpbl90
aHJlYWRfbWFsbG9jKGl0ZW1TaXplICogbnVtSXRlbXMpKSA6IE5VTEwpLCAKKyAgICBkYXRhKHBO
dW1JdGVtcyA+IDAgPyBzdGF0aWNfY2FzdDxjaGFyICo+KGZhc3RNYWxsb2MoaXRlbVNpemUgKiBu
dW1JdGVtcykpIDogTlVMTCksIAogICAgIHJlZkNvdW50KDApCiB7CiB9CiAKIEtXUUFycmF5SW1w
bDo6S1dRQXJyYXlQcml2YXRlOjp+S1dRQXJyYXlQcml2YXRlKCkKIHsKLSAgICBtYWluX3RocmVh
ZF9mcmVlKGRhdGEpOworICAgIGZhc3RGcmVlKGRhdGEpOwogfQogCiAKQEAgLTgwLDEzICs3Nywx
MyBAQCBib29sIEtXUUFycmF5SW1wbDo6cmVzaXplKHNpemVfdCBuZXdTaXplCiAgICAgICAgIGNo
YXIgKm5ld0RhdGE7CiAgICAgICAgIAogCWlmIChuZXdTaXplICE9IDApIHsKLQkgICAgbmV3RGF0
YSA9IHN0YXRpY19jYXN0PGNoYXIgKj4obWFpbl90aHJlYWRfcmVhbGxvYyhkLT5kYXRhLCBuZXdT
aXplICogZC0+aXRlbVNpemUpKTsKKwkgICAgbmV3RGF0YSA9IHN0YXRpY19jYXN0PGNoYXIgKj4o
ZmFzdFJlYWxsb2MoZC0+ZGF0YSwgbmV3U2l6ZSAqIGQtPml0ZW1TaXplKSk7CiAJICAgIGlmIChu
ZXdEYXRhID09IE5VTEwpIHsKIAkgICAgICAgIHJldHVybiBmYWxzZTsKIAkgICAgfQogCX0gZWxz
ZSB7CiAJICAgIG5ld0RhdGEgPSBOVUxMOwotICAgICAgICAgICAgbWFpbl90aHJlYWRfZnJlZShk
LT5kYXRhKTsKKyAgICAgICAgICAgIGZhc3RGcmVlKGQtPmRhdGEpOwogCX0KIAogCWQtPmRhdGEg
PSBuZXdEYXRhOwpJbmRleDogV2ViQ29yZS9rd3EvS1dRQXNzZXJ0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IGt3cS9LV1FBc3NlcnRpb25zLmgKZGlmZiAtTiBXZWJDb3JlL2t3cS9LV1FBc3Nl
cnRpb25zLmgKLS0tIFdlYkNvcmUva3dxL0tXUUFzc2VydGlvbnMuaAkyMiBKYW4gMjAwMyAwMDox
MjozNCAtMDAwMAkxLjUKKysrIFdlYkNvcmUva3dxL0tXUUFzc2VydGlvbnMuaAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0v
LyBOb3RlLCB0aGlzIGZpbGUgdXNlcyBtYW55IEdDQyBleHRlbnNpb25zLCBidXQgaXQgc2hvdWxk
IGJlIGNvbXBhdGlibGUgd2l0aAotLy8gQywgT2JqZWN0aXZlIEMsIEMrKywgYW5kIE9iamVjdGl2
ZSBDKysuCi0KLS8vIEZvciBub24tZGVidWcgYnVpbGRzLCBldmVyeXRoaW5nIGlzIGRpc2FibGVk
IGJ5IGRlZmF1bHQuCi0vLyBEZWZpbmluZyBhbnkgb2YgdGhlIHN5bWJvbHMgZXhwbGljaXRseSBw
cmV2ZW50cyB0aGlzIGZyb20gaGF2aW5nIGFueSBlZmZlY3QuCi0KLSNpZmRlZiBOREVCVUcKLSNk
ZWZpbmUgS1dRX0FTU0VSVElPTlNfRElTQUJMRURfREVGQVVMVCAxCi0jZWxzZQotI2RlZmluZSBL
V1FfQVNTRVJUSU9OU19ESVNBQkxFRF9ERUZBVUxUIDAKLSNlbmRpZgotCi0jaWZuZGVmIEFTU0VS
VF9ESVNBQkxFRAotI2RlZmluZSBBU1NFUlRfRElTQUJMRUQgS1dRX0FTU0VSVElPTlNfRElTQUJM
RURfREVGQVVMVAotI2VuZGlmCi0KLSNpZm5kZWYgQVNTRVJUX0FSR19ESVNBQkxFRAotI2RlZmlu
ZSBBU1NFUlRfQVJHX0RJU0FCTEVEIEtXUV9BU1NFUlRJT05TX0RJU0FCTEVEX0RFRkFVTFQKLSNl
bmRpZgotCi0jaWZuZGVmIEZBVEFMX0RJU0FCTEVECi0jZGVmaW5lIEZBVEFMX0RJU0FCTEVEIEtX
UV9BU1NFUlRJT05TX0RJU0FCTEVEX0RFRkFVTFQKLSNlbmRpZgotCi0jaWZuZGVmIEVSUk9SX0RJ
U0FCTEVECi0jZGVmaW5lIEVSUk9SX0RJU0FCTEVEIEtXUV9BU1NFUlRJT05TX0RJU0FCTEVEX0RF
RkFVTFQKLSNlbmRpZgotCi0jaWZuZGVmIExPR19ESVNBQkxFRAotI2RlZmluZSBMT0dfRElTQUJM
RUQgS1dRX0FTU0VSVElPTlNfRElTQUJMRURfREVGQVVMVAotI2VuZGlmCi0KLS8vIFRoZXNlIGhl
bHBlciBmdW5jdGlvbnMgYXJlIGFsd2F5cyBkZWNsYXJlZCwgYnV0IG5vdCBuZWNlc3NhcmlseSBh
bHdheXMgZGVmaW5lZCBpZiB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBpcyBkaXNhYmxlZC4K
LQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi10eXBlZGVmIHN0
cnVjdCB7Ci0gICAgdW5zaWduZWQgbWFzazsKLSAgICBjb25zdCBjaGFyICpkZWZhdWx0TmFtZTsK
LSAgICBlbnVtIHsgS1dRTG9nQ2hhbm5lbFVuaW5pdGlhbGl6ZWQsIEtXUUxvZ0NoYW5uZWxPZmYs
IEtXUUxvZ0NoYW5uZWxPbiB9IHN0YXRlOwotfSBLV1FMb2dDaGFubmVsOwotCi12b2lkIEtXUVJl
cG9ydEFzc2VydGlvbkZhaWx1cmUoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNo
YXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICphc3NlcnRpb24pOwotdm9pZCBLV1FSZXBvcnRBc3Nl
cnRpb25GYWlsdXJlV2l0aE1lc3NhZ2UoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0
IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICphc3NlcnRpb24sIGNvbnN0IGNoYXIgKmZvcm1h
dCwgLi4uKTsKLXZvaWQgS1dRUmVwb3J0QXJndW1lbnRBc3NlcnRpb25GYWlsdXJlKGNvbnN0IGNo
YXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqYXJn
TmFtZSwgY29uc3QgY2hhciAqYXNzZXJ0aW9uKTsKLXZvaWQgS1dRUmVwb3J0RmF0YWxFcnJvcihj
b25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNo
YXIgKmZvcm1hdCwgLi4uKSA7Ci12b2lkIEtXUVJlcG9ydEVycm9yKGNvbnN0IGNoYXIgKmZpbGUs
IGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4p
Owotdm9pZCBLV1FMb2coY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1
bmN0aW9uLCBLV1FMb2dDaGFubmVsICpjaGFubmVsLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7
Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLS8vIENSQVNIIC0tIGdldHMgdXMg
aW50byB0aGUgZGVidWdnZXIgb3IgdGhlIGNyYXNoIHJlcG9ydGVyIC0tIHNpZ25hbHMgYXJlIGln
bm9yZWQgYnkgdGhlIGNyYXNoIHJlcG9ydGVyIHNvIHdlIG11c3QgZG8gYmV0dGVyCi0KLSNkZWZp
bmUgQ1JBU0goKSAqKGludCAqKTB4YmJhZGJlZWYgPSAwCi0KLS8vIEFTU0VSVCwgQVNTRVJUX1dJ
VEhfTUVTU0FHRSwgQVNTRVJUX05PVF9SRUFDSEVECi0KLSNpZiBBU1NFUlRfRElTQUJMRUQKLQot
I2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSAoKHZvaWQpMCkKLSNkZWZpbmUgQVNTRVJUX1dJVEhf
TUVTU0FHRShhc3NlcnRpb24sIGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQotI2RlZmluZSBB
U1NFUlRfTk9UX1JFQUNIRUQoKSAoKHZvaWQpMCkKLQotI2Vsc2UKLQotI2RlZmluZSBBU1NFUlQo
YXNzZXJ0aW9uKSBkbyBcCi0gICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBcCi0gICAgICAgIEtXUVJl
cG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBfX1BSRVRUWV9GVU5DVElP
Tl9fLCAjYXNzZXJ0aW9uKTsgXAotICAgICAgICBDUkFTSCgpOyBcCi0gICAgfSBcCi13aGlsZSAo
MCkKLSNkZWZpbmUgQVNTRVJUX1dJVEhfTUVTU0FHRShhc3NlcnRpb24sIGZvcm1hdEFuZEFyZ3Mu
Li4pIGRvIFwKLSAgICBpZiAoIShhc3NlcnRpb24pKSB7IFwKLSAgICAgICAgS1dRUmVwb3J0QXNz
ZXJ0aW9uRmFpbHVyZVdpdGhNZXNzYWdlKF9fRklMRV9fLCBfX0xJTkVfXywgX19QUkVUVFlfRlVO
Q1RJT05fXywgI2Fzc2VydGlvbiwgZm9ybWF0QW5kQXJncyk7IFwKLSAgICAgICAgQ1JBU0goKTsg
XAotICAgIH0gXAotd2hpbGUgKDApCi0jZGVmaW5lIEFTU0VSVF9OT1RfUkVBQ0hFRCgpIGRvIHsg
XAotICAgIEtXUVJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBfX1BS
RVRUWV9GVU5DVElPTl9fLCAwKTsgXAotICAgIENSQVNIKCk7IFwKLX0gd2hpbGUgKDApCi0KLSNl
bmRpZgotCi0vLyBBU1NFUlRfQVJHCi0KLSNpZiBBU1NFUlRfQVJHX0RJU0FCTEVECi0KLSNkZWZp
bmUgQVNTRVJUX0FSRyhhcmdOYW1lLCBhc3NlcnRpb24pICgodm9pZCkwKQotCi0jZWxzZQotCi0j
ZGVmaW5lIEFTU0VSVF9BUkcoYXJnTmFtZSwgYXNzZXJ0aW9uKSBkbyBcCi0gICAgaWYgKCEoYXNz
ZXJ0aW9uKSkgeyBcCi0gICAgICAgIEtXUVJlcG9ydEFyZ3VtZW50QXNzZXJ0aW9uRmFpbHVyZShf
X0ZJTEVfXywgX19MSU5FX18sIF9fUFJFVFRZX0ZVTkNUSU9OX18sICNhcmdOYW1lLCAjYXNzZXJ0
aW9uKTsgXAotICAgICAgICBDUkFTSCgpOyBcCi0gICAgfSBcCi13aGlsZSAoMCkKLQotI2VuZGlm
Ci0KLS8vIEZBVEFMCi0KLSNpZiBGQVRBTF9ESVNBQkxFRAotI2RlZmluZSBGQVRBTChmb3JtYXRB
bmRBcmdzLi4uKSAoKHZvaWQpMCkKLSNlbHNlCi0jZGVmaW5lIEZBVEFMKGZvcm1hdEFuZEFyZ3Mu
Li4pIGRvIHsgXAotICAgIEtXUVJlcG9ydEZhdGFsRXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBf
X1BSRVRUWV9GVU5DVElPTl9fLCBmb3JtYXRBbmRBcmdzKTsgXAotICAgIENSQVNIKCk7IFwKLX0g
d2hpbGUgKDApCi0jZW5kaWYKLQotLy8gRVJST1IKLQotI2lmIEVSUk9SX0RJU0FCTEVECi0jZGVm
aW5lIEVSUk9SKGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQotI2Vsc2UKLSNkZWZpbmUgRVJS
T1IoZm9ybWF0QW5kQXJncy4uLikgS1dRUmVwb3J0RXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBf
X1BSRVRUWV9GVU5DVElPTl9fLCBmb3JtYXRBbmRBcmdzKQotI2VuZGlmCi0KLS8vIExPRwotCi0j
aWYgTE9HX0RJU0FCTEVECi0jZGVmaW5lIExPRyhjaGFubmVsLCBmb3JtYXRBbmRBcmdzLi4uKSAo
KHZvaWQpMCkKLSNlbHNlCi0jZGVmaW5lIExPRyhjaGFubmVsLCBmb3JtYXRBbmRBcmdzLi4uKSBL
V1FMb2coX19GSUxFX18sIF9fTElORV9fLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAmSk9JTl9MT0df
Q0hBTk5FTF9XSVRIX1BSRUZJWChMT0dfQ0hBTk5FTF9QUkVGSVgsIGNoYW5uZWwpLCBmb3JtYXRB
bmRBcmdzKQotI2RlZmluZSBKT0lOX0xPR19DSEFOTkVMX1dJVEhfUFJFRklYKHByZWZpeCwgY2hh
bm5lbCkgSk9JTl9MT0dfQ0hBTk5FTF9XSVRIX1BSRUZJWF9MRVZFTF8yKHByZWZpeCwgY2hhbm5l
bCkKLSNkZWZpbmUgSk9JTl9MT0dfQ0hBTk5FTF9XSVRIX1BSRUZJWF9MRVZFTF8yKHByZWZpeCwg
Y2hhbm5lbCkgcHJlZml4ICMjIGNoYW5uZWwKLSNlbmRpZgpJbmRleDogV2ViQ29yZS9rd3EvS1dR
QXNzZXJ0aW9ucy5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt3cS9LV1FBc3NlcnRpb25zLm0KZGlm
ZiAtTiBXZWJDb3JlL2t3cS9LV1FBc3NlcnRpb25zLm0KLS0tIFdlYkNvcmUva3dxL0tXUUFzc2Vy
dGlvbnMubQkxIEFwciAyMDA0IDAwOjM0OjA3IC0wMDAwCTEuNAorKysgV2ViQ29yZS9rd3EvS1dR
QXNzZXJ0aW9ucy5tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsMTExICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKLQotc3RhdGlj
IGludCAoKiB2ZnByaW50Zl9ub193YXJuaW5nKShGSUxFICosIGNvbnN0IGNoYXIgKiwgdmFfbGlz
dCkgPSB2ZnByaW50ZjsKLQotc3RhdGljIHZvaWQgdnByaW50Zl9zdGRlcnJfb2JqYyhjb25zdCBj
aGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKLXsKLSAgICBpZiAoIXN0cnN0cihmb3JtYXQsICIl
QCIpKSB7Ci0gICAgICAgIHZmcHJpbnRmX25vX3dhcm5pbmcoc3RkZXJyLCBmb3JtYXQsIGFyZ3Mp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZwdXRzKFtbW1tOU1N0cmluZyBhbGxvY10gaW5pdFdp
dGhGb3JtYXQ6W05TU3RyaW5nIHN0cmluZ1dpdGhDU3RyaW5nOmZvcm1hdF0gYXJndW1lbnRzOmFy
Z3NdIGF1dG9yZWxlYXNlXSBVVEY4U3RyaW5nXSwgc3RkZXJyKTsKLSAgICB9Ci19Ci0KLXZvaWQg
S1dRUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29u
c3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmFzc2VydGlvbikKLXsKLSAgICBpZiAoYXNz
ZXJ0aW9uKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiPT09PT09PT09PT09PT09PT1cbkFT
U0VSVElPTiBGQUlMRUQ6ICVzICglczolZCAlcylcbj09PT09PT09PT09PT09PT09XG4iLCBhc3Nl
cnRpb24sIGZpbGUsIGxpbmUsIGZ1bmN0aW9uKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIj09PT09PT09PT09PT09PT09XG5TSE9VTEQgTkVWRVIgQkUgUkVBQ0hFRCAo
JXM6JWQgJXMpXG49PT09PT09PT09PT09PT09PVxuIiwgZmlsZSwgbGluZSwgZnVuY3Rpb24pOwot
ICAgIH0KLX0KLQotdm9pZCBLV1FSZXBvcnRBc3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2UoY29u
c3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFy
ICphc3NlcnRpb24sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICAgIGZwcmludGYoc3Rk
ZXJyLCAiPT09PT09PT09PT09PT09PT1cbkFTU0VSVElPTiBGQUlMRUQ6ICIpOwotICAgIHZhX2xp
c3QgYXJnczsKLSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIHZwcmludGZfc3RkZXJy
X29iamMoZm9ybWF0LCBhcmdzKTsKLSAgICB2YV9lbmQoYXJncyk7Ci0gICAgZnByaW50ZihzdGRl
cnIsICJcbiVzICglczolZCAlcylcbj09PT09PT09PT09PT09PT09XG4iLCBhc3NlcnRpb24sIGZp
bGUsIGxpbmUsIGZ1bmN0aW9uKTsKLX0KLQotdm9pZCBLV1FSZXBvcnRBcmd1bWVudEFzc2VydGlv
bkZhaWx1cmUoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9u
LCBjb25zdCBjaGFyICphcmdOYW1lLCBjb25zdCBjaGFyICphc3NlcnRpb24pCi17Ci0gICAgZnBy
aW50ZihzdGRlcnIsICI9PT09PT09PT09PT09PT09PVxuQVJHVU1FTlQgQkFEOiAlcywgJXMgKCVz
OiVkICVzKVxuPT09PT09PT09PT09PT09PT1cbiIsIGFyZ05hbWUsIGFzc2VydGlvbiwgZmlsZSwg
bGluZSwgZnVuY3Rpb24pOwotfQotCi12b2lkIEtXUVJlcG9ydEZhdGFsRXJyb3IoY29uc3QgY2hh
ciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICpmb3Jt
YXQsIC4uLikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIj09PT09PT09PT09PT09PT09XG5GQVRB
TCBFUlJPUjogIik7Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1h
dCk7Ci0gICAgdnByaW50Zl9zdGRlcnJfb2JqYyhmb3JtYXQsIGFyZ3MpOwotICAgIHZhX2VuZChh
cmdzKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlxuKCVzOiVkICVzKVxuPT09PT09PT09PT09PT09
PT1cbiIsIGZpbGUsIGxpbmUsIGZ1bmN0aW9uKTsKLX0KLQotdm9pZCBLV1FSZXBvcnRFcnJvcihj
b25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNo
YXIgKmZvcm1hdCwgLi4uKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiPT09PT09PT09PT09PT09
PT1cbkVSUk9SOiAiKTsKLSAgICB2YV9saXN0IGFyZ3M7Ci0gICAgdmFfc3RhcnQoYXJncywgZm9y
bWF0KTsKLSAgICB2cHJpbnRmX3N0ZGVycl9vYmpjKGZvcm1hdCwgYXJncyk7Ci0gICAgdmFfZW5k
KGFyZ3MpOwotICAgIGZwcmludGYoc3RkZXJyLCAiXG4oJXM6JWQgJXMpXG49PT09PT09PT09PT09
PT09PVxuIiwgZmlsZSwgbGluZSwgZnVuY3Rpb24pOwotfQotCi12b2lkIEtXUUxvZyhjb25zdCBj
aGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIEtXUUxvZ0NoYW5uZWwg
KmNoYW5uZWwsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICAgIGlmIChjaGFubmVsLT5z
dGF0ZSA9PSBLV1FMb2dDaGFubmVsVW5pbml0aWFsaXplZCkgewotICAgICAgICBjaGFubmVsLT5z
dGF0ZSA9IEtXUUxvZ0NoYW5uZWxPZmY7Ci0gICAgICAgIE5TU3RyaW5nICpsb2dMZXZlbFN0cmlu
ZyA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIG9iamVjdEZvcktleTpb
TlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6Y2hhbm5lbC0+ZGVmYXVsdE5hbWVdXTsKLSAgICAg
ICAgaWYgKGxvZ0xldmVsU3RyaW5nKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb2dMZXZlbDsK
LSAgICAgICAgICAgIGlmICghW1tOU1NjYW5uZXIgc2Nhbm5lcldpdGhTdHJpbmc6bG9nTGV2ZWxT
dHJpbmddIHNjYW5IZXhJbnQ6JmxvZ0xldmVsXSkgewotICAgICAgICAgICAgICAgIE5TTG9nKEAi
dW5hYmxlIHRvIHBhcnNlIGhleCB2YWx1ZSBmb3IgJXMgKCVAKSwgbG9nZ2luZyBpcyBvZmYiLCBj
aGFubmVsLT5kZWZhdWx0TmFtZSwgbG9nTGV2ZWxTdHJpbmcpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKChsb2dMZXZlbCAmIGNoYW5uZWwtPm1hc2spID09IGNoYW5uZWwtPm1hc2sp
IHsKLSAgICAgICAgICAgICAgICBjaGFubmVsLT5zdGF0ZSA9IEtXUUxvZ0NoYW5uZWxPbjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoY2hhbm5lbC0+c3Rh
dGUgIT0gS1dRTG9nQ2hhbm5lbE9uKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKGNoYW5uZWwtPm1hc2sgIT0gMHgxMDApIC8vIGtvY2llbmRhIGRvZXMgbm90IHdhbnQg
dGhpcyBvdXRwdXQgd2hlbiBsb2dnaW5nIGVkaXRpbmcKLSAgICAgICAgZnByaW50ZihzdGRlcnIs
ICItICVzOiVkICVzIC0gIiwgZmlsZSwgbGluZSwgZnVuY3Rpb24pOwotICAgIHZhX2xpc3QgYXJn
czsKLSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIHZwcmludGZfc3RkZXJyX29iamMo
Zm9ybWF0LCBhcmdzKTsKLSAgICB2YV9lbmQoYXJncyk7Ci0gICAgaWYgKGZvcm1hdFtzdHJsZW4o
Zm9ybWF0KSAtIDFdICE9ICdcbicpCi0gICAgICAgIHB1dGMoJ1xuJywgc3RkZXJyKTsKLX0KSW5k
ZXg6IFdlYkNvcmUva3dxL0tXUUJ1dHRvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9rd3EvS1dRQnV0dG9uLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ0CmRp
ZmYgLXAgLXUgLXIxLjQ0IFdlYkNvcmUva3dxL0tXUUJ1dHRvbi5tbQotLS0gV2ViQ29yZS9rd3Ev
S1dRQnV0dG9uLm1tCTIgQXVnIDIwMDUgMjA6Mjg6NDAgLTAwMDAJMS40NAorKysgV2ViQ29yZS9r
d3EvS1dRQnV0dG9uLm1tCTI3IFNlcCAyMDA1IDA3OjE3OjU0IC0wMDAwCkBAIC0yNSw3ICsyNSw3
IEBACiAKICNpbXBvcnQgIktXUUJ1dHRvbi5oIgogCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgi
CisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0ICJLV1FFeGNlcHRpb25z
LmgiCiAjaW1wb3J0ICJLV1FLSFRNTFBhcnQuaCIKICNpbXBvcnQgIktXUU5TVmlld0V4dHJhcy5o
IgpJbmRleDogV2ViQ29yZS9rd3EvS1dRQ1N0cmluZy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRQ1N0cmluZy5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xNwpkaWZmIC1wIC11IC1yMS4xNyBXZWJDb3JlL2t3cS9LV1FDU3RyaW5nLm1tCi0tLSBXZWJD
b3JlL2t3cS9LV1FDU3RyaW5nLm1tCTEwIE1heSAyMDAzIDA1OjQ2OjU5IC0wMDAwCTEuMTcKKysr
IFdlYkNvcmUva3dxL0tXUUNTdHJpbmcubW0JMjcgU2VwIDIwMDUgMDc6MTc6NTQgLTAwMDAKQEAg
LTI1LDcgKzI1LDcgQEAKIAogI2ltcG9ydCAiS1dRQ1N0cmluZy5oIgogCi0jaW1wb3J0ICJLV1FB
c3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0IDxj
dHlwZS5oPgogCiB1c2luZyBzdGQ6Om9zdHJlYW07CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FDbGlw
Ym9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRQ2xp
cGJvYXJkLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1wIC11IC1yMS43IFdlYkNv
cmUva3dxL0tXUUNsaXBib2FyZC5oCi0tLSBXZWJDb3JlL2t3cS9LV1FDbGlwYm9hcmQuaAkxMCBN
YXkgMjAwNSAyMTo1OToxNSAtMDAwMAkxLjcKKysrIFdlYkNvcmUva3dxL0tXUUNsaXBib2FyZC5o
CTI3IFNlcCAyMDA1IDA3OjE3OjU0IC0wMDAwCkBAIC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAg
ICAgRE9NOjpET01TdHJpbmcgbV9lZmZlY3RBbGxvd2VkOwogICAgIFFQb2ludCBtX2RyYWdMb2M7
CiAgICAgUVBpeG1hcCBtX2RyYWdJbWFnZTsKLSAgICBraHRtbDo6U2hhcmVkUHRyPERPTTo6Tm9k
ZUltcGw+IG1fZHJhZ0ltYWdlRWxlbWVudDsKKyAgICBTaGFyZWRQdHI8RE9NOjpOb2RlSW1wbD4g
bV9kcmFnSW1hZ2VFbGVtZW50OwogICAgIEFjY2Vzc1BvbGljeSBtX3BvbGljeTsKICAgICBpbnQg
bV9jaGFuZ2VDb3VudDsKICAgICBib29sIG1fZHJhZ1N0YXJ0ZWQ7CkluZGV4OiBXZWJDb3JlL2t3
cS9LV1FDbGlwYm9hcmQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL0tXUUNsaXBib2FyZC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZmIC1wIC11
IC1yMS4xNyBXZWJDb3JlL2t3cS9LV1FDbGlwYm9hcmQubW0KLS0tIFdlYkNvcmUva3dxL0tXUUNs
aXBib2FyZC5tbQkyNSBBdWcgMjAwNSAxNzo0NzoyNSAtMDAwMAkxLjE3CisrKyBXZWJDb3JlL2t3
cS9LV1FDbGlwYm9hcmQubW0JMjcgU2VwIDIwMDUgMDc6MTc6NTQgLTAwMDAKQEAgLTI0LDcgKzI0
LDcgQEAKICAqLwogCiAjaW1wb3J0ICJLV1FDbGlwYm9hcmQuaCIKLSNpbXBvcnQgIktXUUFzc2Vy
dGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIktXUUZv
dW5kYXRpb25FeHRyYXMuaCIKICNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgogI2ltcG9ydCAiS1dR
U3RyaW5nTGlzdC5oIgpJbmRleDogV2ViQ29yZS9rd3EvS1dRQ29sb3IubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUNvbG9yLm1tLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjQ0CmRpZmYgLXAgLXUgLXIxLjQ0IFdlYkNvcmUva3dxL0tXUUNvbG9yLm1tCi0t
LSBXZWJDb3JlL2t3cS9LV1FDb2xvci5tbQkxIEF1ZyAyMDA1IDA5OjA2OjMzIC0wMDAwCTEuNDQK
KysrIFdlYkNvcmUva3dxL0tXUUNvbG9yLm1tCTI3IFNlcCAyMDA1IDA3OjE3OjU0IC0wMDAwCkBA
IC0yNyw3ICsyNyw3IEBACiAKICNpbXBvcnQgIktXUU5hbWVzcGFjZS5oIgogI2ltcG9ydCAiS1dR
U3RyaW5nLmgiCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9B
c3NlcnRpb25zLmg+CiAjaW1wb3J0ICJLV1FQYWludGVyLmgiCiAKIC8vIE5TQ29sb3IgY2FsbHMg
ZG9uJ3QgdGhyb3csIHNvIG5vIG5lZWQgdG8gYmxvY2sgQ29jb2EgZXhjZXB0aW9ucyBpbiB0aGlz
IGZpbGUKSW5kZXg6IFdlYkNvcmUva3dxL0tXUUNvbWJvQm94Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FDb21ib0JveC5tbSx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS42NQpkaWZmIC1wIC11IC1yMS42NSBXZWJDb3JlL2t3cS9LV1FDb21ib0JveC5tbQot
LS0gV2ViQ29yZS9rd3EvS1dRQ29tYm9Cb3gubW0JMiBTZXAgMjAwNSAyMTozNDo0NyAtMDAwMAkx
LjY1CisrKyBXZWJDb3JlL2t3cS9LV1FDb21ib0JveC5tbQkyNyBTZXAgMjAwNSAwNzoxNzo1NCAt
MDAwMApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW1wb3J0ICJLV1FDb21ib0JveC5oIgogCi0jaW1w
b3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAj
aW1wb3J0ICJLV1FCdXR0b24uaCIKICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKICNpbXBvcnQg
IktXUUtIVE1MUGFydC5oIgpJbmRleDogV2ViQ29yZS9rd3EvS1dRRWRpdENvbW1hbmQubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUVkaXRDb21tYW5kLm1t
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEuNSBXZWJDb3JlL2t3cS9L
V1FFZGl0Q29tbWFuZC5tbQotLS0gV2ViQ29yZS9rd3EvS1dRRWRpdENvbW1hbmQubW0JNSBPY3Qg
MjAwNCAwNzowMToyMSAtMDAwMAkxLjUKKysrIFdlYkNvcmUva3dxL0tXUUVkaXRDb21tYW5kLm1t
CTI3IFNlcCAyMDA1IDA3OjE3OjU0IC0wMDAwCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbXBvcnQg
IktXUUVkaXRDb21tYW5kLmgiCiAKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQg
PGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMuaCIK
IAogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKSW5kZXg6IFdlYkNvcmUva3dxL0tXUUV4Y2VwdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRRXhjZXB0
aW9ucy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtcCAtdSAtcjEuMyBXZWJDb3Jl
L2t3cS9LV1FFeGNlcHRpb25zLmgKLS0tIFdlYkNvcmUva3dxL0tXUUV4Y2VwdGlvbnMuaAkyNyBP
Y3QgMjAwMyAyMDo1MToyNSAtMDAwMAkxLjMKKysrIFdlYkNvcmUva3dxL0tXUUV4Y2VwdGlvbnMu
aAkyNyBTZXAgMjAwNSAwNzoxNzo1NCAtMDAwMApAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNp
bXBvcnQgPEZvdW5kYXRpb24vTlNFeGNlcHRpb24uaD4KLSNpbXBvcnQgIktXUUFzc2VydGlvbnMu
aCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KIAogY2xhc3MgS1dRTlNIYW5kbGVy
CiB7CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FGaWxlQnV0dG9uLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FGaWxlQnV0dG9uLm1tLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjI3CmRpZmYgLXAgLXUgLXIxLjI3IFdlYkNvcmUva3dxL0tXUUZpbGVCdXR0b24u
bW0KLS0tIFdlYkNvcmUva3dxL0tXUUZpbGVCdXR0b24ubW0JMjkgQXByIDIwMDUgMDA6MzE6MDEg
LTAwMDAJMS4yNworKysgV2ViQ29yZS9rd3EvS1dRRmlsZUJ1dHRvbi5tbQkyNyBTZXAgMjAwNSAw
NzoxNzo1NCAtMDAwMApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW1wb3J0ICJLV1FGaWxlQnV0dG9u
LmgiCiAKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2Vy
dGlvbnMuaD4KICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIktXUUtIVE1MUGFy
dC5oIgogI2ltcG9ydCAiS1dRTlNWaWV3RXh0cmFzLmgiCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FG
b250RmFtaWx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tX
UUZvbnRGYW1pbHkuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQg
V2ViQ29yZS9rd3EvS1dRRm9udEZhbWlseS5oCi0tLSBXZWJDb3JlL2t3cS9LV1FGb250RmFtaWx5
LmgJMjYgQXByIDIwMDUgMTg6NDY6MDQgLTAwMDAJMS40CisrKyBXZWJDb3JlL2t3cS9LV1FGb250
RmFtaWx5LmgJMjcgU2VwIDIwMDUgMDc6MTc6NTQgLTAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKIAog
I2luY2x1ZGUgIktXUVN0cmluZy5oIgogI2luY2x1ZGUgImRvbV9hdG9taWNzdHJpbmcuaCIKLSNp
bmNsdWRlICJtaXNjL21haW5fdGhyZWFkX21hbGxvYy5oIgorI2luY2x1ZGUgImt4bWxjb3JlL0Zh
c3RNYWxsb2MuaCIKIAogI2lmZGVmIF9fT0JKQ19fCiBAY2xhc3MgTlNTdHJpbmc7CkBAIC0zMyw3
ICszMyw3IEBACiBjbGFzcyBOU1N0cmluZzsKICNlbmRpZgogCi1jbGFzcyBLV1FGb250RmFtaWx5
IHsKK2NsYXNzIEtXUUZvbnRGYW1pbHkgOiBwdWJsaWMgRmFzdEFsbG9jYXRlZCB7CiBwdWJsaWM6
CiAgICAgS1dRRm9udEZhbWlseSgpOwogICAgIH5LV1FGb250RmFtaWx5KCkgeyBpZiAoX25leHQp
IF9uZXh0LT5kZXJlZigpOyAgfQpAQCAtNDEsOCArNDEsNiBAQCBwdWJsaWM6CiAgICAgS1dRRm9u
dEZhbWlseShjb25zdCBLV1FGb250RmFtaWx5ICYpOyAgICAKICAgICBLV1FGb250RmFtaWx5ICZv
cGVyYXRvcj0oY29uc3QgS1dRRm9udEZhbWlseSAmKTsKICAgICAgICAgCi0gICAgTUFJTl9USFJF
QURfQUxMT0NBVEVEOwotCiAgICAgdm9pZCBzZXRGYW1pbHkoY29uc3QgRE9NOjpBdG9taWNTdHJp
bmcgJik7CiAgICAgY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIGZhbWlseSgpIGNvbnN0IHsgcmV0
dXJuIF9mYW1pbHk7IH0KICAgICBib29sIGZhbWlseUlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBf
ZmFtaWx5LmlzRW1wdHkoKTsgfQpJbmRleDogV2ViQ29yZS9rd3EvS1dRRm9ybURhdGEubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUZvcm1EYXRhLm1tLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBXZWJDb3JlL2t3cS9LV1FG
b3JtRGF0YS5tbQotLS0gV2ViQ29yZS9rd3EvS1dRRm9ybURhdGEubW0JNiBTZXAgMjAwNCAyMzoy
MzoxNSAtMDAwMAkxLjIKKysrIFdlYkNvcmUva3dxL0tXUUZvcm1EYXRhLm1tCTI3IFNlcCAyMDA1
IDA3OjE3OjU0IC0wMDAwCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbXBvcnQgIktXUUZvcm1EYXRh
LmgiCiAKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2Vy
dGlvbnMuaD4KICNpbXBvcnQgImZvcm1kYXRhLmgiCiAKIHVzaW5nIGtodG1sOjpGb3JtRGF0YTsK
SW5kZXg6IFdlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yMjgKZGlmZiAtcCAtdSAtcjEuMjI4IFdlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5oCi0tLSBX
ZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQuaAkyNCBTZXAgMjAwNSAwMToxOTowNCAtMDAwMAkxLjIy
OAorKysgV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0LmgJMjcgU2VwIDIwMDUgMDc6MTc6NTUgLTAw
MDAKQEAgLTQ3Myw3ICs0NzMsNyBAQCBwcml2YXRlOgogICAgIFdlYlNjcmlwdE9iamVjdCAqX3dp
bmRvd1NjcmlwdE9iamVjdDsKICAgICBOUE9iamVjdCAqX3dpbmRvd1NjcmlwdE5QT2JqZWN0Owog
ICAgIAotICAgIGtodG1sOjpTaGFyZWRQdHI8RE9NOjpOb2RlSW1wbD4gX2RyYWdTcmM7ICAgICAv
LyBlbGVtZW50IHRoYXQgbWF5IGJlIGEgZHJhZyBzb3VyY2UsIGZvciB0aGUgY3VycmVudCBtb3Vz
ZSBnZXN0dXJlCisgICAgU2hhcmVkUHRyPERPTTo6Tm9kZUltcGw+IF9kcmFnU3JjOyAgICAgLy8g
ZWxlbWVudCB0aGF0IG1heSBiZSBhIGRyYWcgc291cmNlLCBmb3IgdGhlIGN1cnJlbnQgbW91c2Ug
Z2VzdHVyZQogICAgIGJvb2wgX2RyYWdTcmNJc0xpbms7CiAgICAgYm9vbCBfZHJhZ1NyY0lzSW1h
Z2U7CiAgICAgYm9vbCBfZHJhZ1NyY0luU2VsZWN0aW9uOwpAQCAtNDgxLDkgKzQ4MSw5IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBfZHJhZ1NyY0lzREhUTUw7CiAgICAgS1dRQ2xpcGJvYXJkICpfZHJh
Z0NsaXBib2FyZDsgICAvLyB1c2VkIG9uIG9ubHkgdGhlIHNvdXJjZSBzaWRlIG9mIGRyYWdnaW5n
CiAgICAgCi0gICAgbXV0YWJsZSBraHRtbDo6U2hhcmVkUHRyPERPTTo6Tm9kZUltcGw+IF9lbGVt
ZW50VG9EcmF3OworICAgIG11dGFibGUgU2hhcmVkUHRyPERPTTo6Tm9kZUltcGw+IF9lbGVtZW50
VG9EcmF3OwogCi0gICAga2h0bWw6OlNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4gbV9tYXJrZWRU
ZXh0UmFuZ2U7CisgICAgU2hhcmVkUHRyPERPTTo6UmFuZ2VJbXBsPiBtX21hcmtlZFRleHRSYW5n
ZTsKICAgICBib29sIG1fbWFya2VkVGV4dFVzZXNVbmRlcmxpbmVzOwogICAgIFFWYWx1ZUxpc3Q8
TWFya2VkVGV4dFVuZGVybGluZT4gbV9tYXJrZWRUZXh0VW5kZXJsaW5lczsKIApJbmRleDogV2Vi
Q29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjc0CmRp
ZmYgLXAgLXUgLXIxLjY3NCBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0KLS0tIFdlYkNvcmUv
a3dxL0tXUUtIVE1MUGFydC5tbQkyNCBTZXAgMjAwNSAwMToxOTowNCAtMDAwMAkxLjY3NAorKysg
V2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tCTI3IFNlcCAyMDA1IDA3OjE3OjU2IC0wMDAwCkBA
IC0xNDUsNyArMTQ1LDYgQEAgdXNpbmcga2h0bWw6OlNFTEVDVF9JR05PUkU7CiB1c2luZyBraHRt
bDo6c2V0RW5kOwogdXNpbmcga2h0bWw6OnNldFN0YXJ0OwogdXNpbmcga2h0bWw6OlNoYWRvd0Rh
dGE7Ci11c2luZyBraHRtbDo6U2hhcmVkUHRyOwogdXNpbmcga2h0bWw6OnN0YXJ0T2ZXb3JkOwog
dXNpbmcga2h0bWw6OnN0YXJ0VmlzaWJsZVBvc2l0aW9uOwogdXNpbmcga2h0bWw6OlN0eWxlRGFz
aGJvYXJkUmVnaW9uOwpJbmRleDogV2ViQ29yZS9rd3EvS1dRS1BhcnRzQnJvd3NlckludGVyZmFj
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS1BhcnRz
QnJvd3NlckludGVyZmFjZS5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMwpkaWZmIC1wIC11
IC1yMS4xMyBXZWJDb3JlL2t3cS9LV1FLUGFydHNCcm93c2VySW50ZXJmYWNlLm1tCi0tLSBXZWJD
b3JlL2t3cS9LV1FLUGFydHNCcm93c2VySW50ZXJmYWNlLm1tCTE2IE5vdiAyMDAzIDIxOjI1OjIz
IC0wMDAwCTEuMTMKKysrIFdlYkNvcmUva3dxL0tXUUtQYXJ0c0Jyb3dzZXJJbnRlcmZhY2UubW0J
MjcgU2VwIDIwMDUgMDc6MTc6NTcgLTAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2ltcG9ydCAi
S1dRS1BhcnRzQnJvd3NlckludGVyZmFjZS5oIgogCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgi
CisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0ICJLV1FFeGNlcHRpb25z
LmgiCiAjaW1wb3J0ICJLV1FLSFRNTFBhcnQuaCIKICNpbXBvcnQgIldlYkNvcmVCcmlkZ2UuaCIK
SW5kZXg6IFdlYkNvcmUva3dxL0tXUUtVUkwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva3dxL0tXUUtVUkwubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTEKZGlm
ZiAtcCAtdSAtcjEuOTEgV2ViQ29yZS9rd3EvS1dRS1VSTC5tbQotLS0gV2ViQ29yZS9rd3EvS1dR
S1VSTC5tbQkyNCBKdW4gMjAwNSAxNjo0ODozOSAtMDAwMAkxLjkxCisrKyBXZWJDb3JlL2t3cS9L
V1FLVVJMLm1tCTI3IFNlcCAyMDA1IDA3OjE3OjU3IC0wMDAwCkBAIC0yNSw3ICsyNSw3IEBACiAK
ICNpbXBvcnQgIktXUUtVUkwuaCIKIAotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgorI2ltcG9y
dCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAiS1dRRm91bmRhdGlvbkV4dHJhcy5o
IgogI2ltcG9ydCAiS1dRUmVnRXhwLmgiCiAjaW1wb3J0ICJLV1FUZXh0Q29kZWMuaCIKSW5kZXg6
IFdlYkNvcmUva3dxL0tXUUxpc3RCb3gubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva3dxL0tXUUxpc3RCb3gubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTcKZGlm
ZiAtcCAtdSAtcjEuNTcgV2ViQ29yZS9rd3EvS1dRTGlzdEJveC5tbQotLS0gV2ViQ29yZS9rd3Ev
S1dRTGlzdEJveC5tbQkyIFNlcCAyMDA1IDIxOjM0OjQ4IC0wMDAwCTEuNTcKKysrIFdlYkNvcmUv
a3dxL0tXUUxpc3RCb3gubW0JMjcgU2VwIDIwMDUgMDc6MTc6NTggLTAwMDAKQEAgLTI1LDcgKzI1
LDcgQEAKIAogI2ltcG9ydCAiS1dRTGlzdEJveC5oIgogCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25z
LmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0ICJLV1FFeGNlcHRp
b25zLmgiCiAjaW1wb3J0ICJLV1FLSFRNTFBhcnQuaCIKICNpbXBvcnQgIktXUU5TVmlld0V4dHJh
cy5oIgpJbmRleDogV2ViQ29yZS9rd3EvS1dRTGlzdEltcGwubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUxpc3RJbXBsLm1tLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjIxCmRpZmYgLXAgLXUgLXIxLjIxIFdlYkNvcmUva3dxL0tXUUxpc3RJbXBsLm1tCi0t
LSBXZWJDb3JlL2t3cS9LV1FMaXN0SW1wbC5tbQkzIEp1bCAyMDA1IDA5OjQ1OjA4IC0wMDAwCTEu
MjEKKysrIFdlYkNvcmUva3dxL0tXUUxpc3RJbXBsLm1tCTI3IFNlcCAyMDA1IDA3OjE3OjU4IC0w
MDAwCkBAIC0yOCwxNiArMjgsMTQgQEAKICNpbXBvcnQgPGNzdGRkZWY+CiAjaW1wb3J0IDxhbGdv
cml0aG0+CiAjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9DRkFycmF5Lmg+Ci0jaW1wb3J0ICJLV1FB
c3NlcnRpb25zLmgiCi0jaW1wb3J0ICJtaXNjL21haW5fdGhyZWFkX21hbGxvYy5oIgorI2ltcG9y
dCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCAia3htbGNvcmUvRmFzdE1hbGxvYy5o
IgogCi1jbGFzcyBLV1FMaXN0Tm9kZQorY2xhc3MgS1dRTGlzdE5vZGUgOiBwdWJsaWMgRmFzdEFs
bG9jYXRlZAogewogcHVibGljOgogICAgIEtXUUxpc3ROb2RlKHZvaWQgKmQpIDogZGF0YShkKSwg
bmV4dChOVUxMKSwgcHJldihOVUxMKSB7IH0KIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsK
LQogICAgIHZvaWQgKmRhdGE7CiAgICAgS1dRTGlzdE5vZGUgKm5leHQ7CiAgICAgS1dRTGlzdE5v
ZGUgKnByZXY7CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FMb2dnaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUxvZ2dpbmcuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS45CmRpZmYgLXAgLXUgLXIxLjkgV2ViQ29yZS9rd3EvS1dRTG9nZ2luZy5oCi0tLSBX
ZWJDb3JlL2t3cS9LV1FMb2dnaW5nLmgJMTEgSnVsIDIwMDUgMjM6MTI6MDEgLTAwMDAJMS45Cisr
KyBXZWJDb3JlL2t3cS9LV1FMb2dnaW5nLmgJMjcgU2VwIDIwMDUgMDc6MTc6NTggLTAwMDAKQEAg
LTIzLDE3ICsyMywxNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2ltcG9ydCAiS1dRQXNz
ZXJ0aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCiAjaWZuZGVmIExP
R19DSEFOTkVMX1BSRUZJWAogI2RlZmluZSBMT0dfQ0hBTk5FTF9QUkVGSVggS1dRTG9nCiAjZW5k
aWYKIAotZXh0ZXJuIEtXUUxvZ0NoYW5uZWwgS1dRTG9nTm90WWV0SW1wbGVtZW50ZWQ7CitleHRl
cm4gS1hDTG9nQ2hhbm5lbCBLV1FMb2dOb3RZZXRJbXBsZW1lbnRlZDsKIAotZXh0ZXJuIEtXUUxv
Z0NoYW5uZWwgS1dRTG9nRnJhbWVzOwotZXh0ZXJuIEtXUUxvZ0NoYW5uZWwgS1dRTG9nTG9hZGlu
ZzsKLWV4dGVybiBLV1FMb2dDaGFubmVsIEtXUUxvZ1BvcHVwQmxvY2tpbmc7Ci1leHRlcm4gS1dR
TG9nQ2hhbm5lbCBLV1FMb2dFdmVudHM7Ci1leHRlcm4gS1dRTG9nQ2hhbm5lbCBLV1FMb2dFZGl0
aW5nOwotZXh0ZXJuIEtXUUxvZ0NoYW5uZWwgS1dRTG9nVGV4dENvbnZlcnNpb247CitleHRlcm4g
S1hDTG9nQ2hhbm5lbCBLV1FMb2dGcmFtZXM7CitleHRlcm4gS1hDTG9nQ2hhbm5lbCBLV1FMb2dM
b2FkaW5nOworZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgS1dRTG9nUG9wdXBCbG9ja2luZzsKK2V4dGVy
biBLWENMb2dDaGFubmVsIEtXUUxvZ0V2ZW50czsKK2V4dGVybiBLWENMb2dDaGFubmVsIEtXUUxv
Z0VkaXRpbmc7CitleHRlcm4gS1hDTG9nQ2hhbm5lbCBLV1FMb2dUZXh0Q29udmVyc2lvbjsKSW5k
ZXg6IFdlYkNvcmUva3dxL0tXUUxvZ2dpbmcubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9rd3EvS1dRTG9nZ2luZy5tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlm
ZiAtcCAtdSAtcjEuOCBXZWJDb3JlL2t3cS9LV1FMb2dnaW5nLm0KLS0tIFdlYkNvcmUva3dxL0tX
UUxvZ2dpbmcubQkxMSBKdWwgMjAwNSAyMzoxMjowMSAtMDAwMAkxLjgKKysrIFdlYkNvcmUva3dx
L0tXUUxvZ2dpbmcubQkyNyBTZXAgMjAwNSAwNzoxNzo1OCAtMDAwMApAQCAtMjUsMTMgKzI1LDEz
IEBACiAKICNpbXBvcnQgIktXUUxvZ2dpbmcuaCIKIAotS1dRTG9nQ2hhbm5lbCBLV1FMb2dOb3RZ
ZXRJbXBsZW1lbnRlZCA9IHsgMHgwMDAwMDAwMSwgIldlYkNvcmVMb2dMZXZlbCIsIEtXUUxvZ0No
YW5uZWxVbmluaXRpYWxpemVkIH07CitLWENMb2dDaGFubmVsIEtXUUxvZ05vdFlldEltcGxlbWVu
dGVkID0geyAweDAwMDAwMDAxLCAiV2ViQ29yZUxvZ0xldmVsIiwgS1hDTG9nQ2hhbm5lbFVuaW5p
dGlhbGl6ZWQgfTsKIAotS1dRTG9nQ2hhbm5lbCBLV1FMb2dGcmFtZXMgPSAgICAgICAgICAgIHsg
MHgwMDAwMDAxMCwgIldlYkNvcmVMb2dMZXZlbCIsIEtXUUxvZ0NoYW5uZWxVbmluaXRpYWxpemVk
IH07Ci1LV1FMb2dDaGFubmVsIEtXUUxvZ0xvYWRpbmcgPSAgICAgICAgICAgeyAweDAwMDAwMDIw
LCAiV2ViQ29yZUxvZ0xldmVsIiwgS1dRTG9nQ2hhbm5lbFVuaW5pdGlhbGl6ZWQgfTsKK0tYQ0xv
Z0NoYW5uZWwgS1dRTG9nRnJhbWVzID0gICAgICAgICAgICB7IDB4MDAwMDAwMTAsICJXZWJDb3Jl
TG9nTGV2ZWwiLCBLWENMb2dDaGFubmVsVW5pbml0aWFsaXplZCB9OworS1hDTG9nQ2hhbm5lbCBL
V1FMb2dMb2FkaW5nID0gICAgICAgICAgIHsgMHgwMDAwMDAyMCwgIldlYkNvcmVMb2dMZXZlbCIs
IEtYQ0xvZ0NoYW5uZWxVbmluaXRpYWxpemVkIH07CiAKLUtXUUxvZ0NoYW5uZWwgS1dRTG9nUG9w
dXBCbG9ja2luZyA9ICAgICB7IDB4MDAwMDAwNDAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLV1FMb2dD
aGFubmVsVW5pbml0aWFsaXplZCB9OworS1hDTG9nQ2hhbm5lbCBLV1FMb2dQb3B1cEJsb2NraW5n
ID0gICAgIHsgMHgwMDAwMDA0MCwgIldlYkNvcmVMb2dMZXZlbCIsIEtYQ0xvZ0NoYW5uZWxVbmlu
aXRpYWxpemVkIH07CiAKLUtXUUxvZ0NoYW5uZWwgS1dRTG9nRXZlbnRzID0gICAgICAgICAgICB7
IDB4MDAwMDAwODAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLV1FMb2dDaGFubmVsVW5pbml0aWFsaXpl
ZCB9OwotS1dRTG9nQ2hhbm5lbCBLV1FMb2dFZGl0aW5nID0gICAgICAgICAgIHsgMHgwMDAwMDEw
MCwgIldlYkNvcmVMb2dMZXZlbCIsIEtXUUxvZ0NoYW5uZWxVbmluaXRpYWxpemVkIH07Ci1LV1FM
b2dDaGFubmVsIEtXUUxvZ1RleHRDb252ZXJzaW9uID0gICAgeyAweDAwMDAwMjAwLCAiV2ViQ29y
ZUxvZ0xldmVsIiwgS1dRTG9nQ2hhbm5lbFVuaW5pdGlhbGl6ZWQgfTsKK0tYQ0xvZ0NoYW5uZWwg
S1dRTG9nRXZlbnRzID0gICAgICAgICAgICB7IDB4MDAwMDAwODAsICJXZWJDb3JlTG9nTGV2ZWwi
LCBLWENMb2dDaGFubmVsVW5pbml0aWFsaXplZCB9OworS1hDTG9nQ2hhbm5lbCBLV1FMb2dFZGl0
aW5nID0gICAgICAgICAgIHsgMHgwMDAwMDEwMCwgIldlYkNvcmVMb2dMZXZlbCIsIEtYQ0xvZ0No
YW5uZWxVbmluaXRpYWxpemVkIH07CitLWENMb2dDaGFubmVsIEtXUUxvZ1RleHRDb252ZXJzaW9u
ID0gICAgeyAweDAwMDAwMjAwLCAiV2ViQ29yZUxvZ0xldmVsIiwgS1hDTG9nQ2hhbm5lbFVuaW5p
dGlhbGl6ZWQgfTsKSW5kZXg6IFdlYkNvcmUva3dxL0tXUU1hcEltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRTWFwSW1wbC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjkKZGlmZiAtcCAtdSAtcjEuOSBXZWJDb3JlL2t3cS9LV1FNYXBJbXBsLmgKLS0t
IFdlYkNvcmUva3dxL0tXUU1hcEltcGwuaAkxNSBBdWcgMjAwNSAwMDozMjo0MCAtMDAwMAkxLjkK
KysrIFdlYkNvcmUva3dxL0tXUU1hcEltcGwuaAkyNyBTZXAgMjAwNSAwNzoxNzo1OCAtMDAwMApA
QCAtMjksMTUgKzI5LDEyIEBACiAjaW5jbHVkZSA8bmV3PgogCiAjaW5jbHVkZSAiS1dRUmVmUHRy
LmgiCi0jaW5jbHVkZSAibWFpbl90aHJlYWRfbWFsbG9jLmgiCisjaW5jbHVkZSAia3htbGNvcmUv
RmFzdE1hbGxvYy5oIgogCiBjbGFzcyBLV1FNYXBJbXBsOwogCi1jbGFzcyBLV1FNYXBOb2RlSW1w
bAorY2xhc3MgS1dRTWFwTm9kZUltcGwgOiBwdWJsaWMgRmFzdEFsbG9jYXRlZAogewotcHVibGlj
OgotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogcHJvdGVjdGVkOgogICAgIHR5cGVkZWYg
ZW51bSB7IFJlZCA9IDAsIEJsYWNrID0gMSB9IEtXUU1hcE5vZGVDb2xvcjsKIApAQCAtNjcsMTAg
KzY0LDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiB9OwogCi1jbGFzcyBLV1FNYXBJdGVyYXRvcklt
cGwgewotcHVibGljOgotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQorY2xhc3MgS1dRTWFw
SXRlcmF0b3JJbXBsIDogcHVibGljIEZhc3RBbGxvY2F0ZWQgewogcHJvdGVjdGVkOgogICAgIEtX
UU1hcE5vZGVJbXBsICpub2RlOwogCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FNYXBJbXBsLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FNYXBJbXBsLm1tLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXAgLXUgLXIxLjEwIFdlYkNvcmUva3dxL0tX
UU1hcEltcGwubW0KLS0tIFdlYkNvcmUva3dxL0tXUU1hcEltcGwubW0JMTUgQXVnIDIwMDUgMDA6
MzI6NDAgLTAwMDAJMS4xMAorKysgV2ViQ29yZS9rd3EvS1dRTWFwSW1wbC5tbQkyNyBTZXAgMjAw
NSAwNzoxNzo1OCAtMDAwMApAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgS1dRTWFwSXRlcmF0b3JJ
bXBsOjppbmNyZW1lbnRJbnRlcm4KIAogLy8gS1dRTWFwSW1wbFByaXZhdGUKIAotY2xhc3MgS1dR
TWFwSW1wbDo6S1dRTWFwUHJpdmF0ZQorY2xhc3MgS1dRTWFwSW1wbDo6S1dRTWFwUHJpdmF0ZSA6
IHB1YmxpYyBGYXN0QWxsb2NhdGVkCiB7CiBwdWJsaWM6CiAgICAgS1dRTWFwUHJpdmF0ZShLV1FN
YXBOb2RlSW1wbCAqbm9kZSwKQEAgLTEyNCw4ICsxMjQsNiBAQCBwdWJsaWM6CiAKICAgICB+S1dR
TWFwUHJpdmF0ZSgpOwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgS1dRTWFw
Tm9kZUltcGwgKmd1YXJkOwogICAgIHVpbnQgbnVtTm9kZXM7CiAgICAgaW50IHJlZkNvdW50OwpJ
bmRleDogV2ViQ29yZS9rd3EvS1dRT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2t3cS9LV1FPYmplY3QubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDYK
ZGlmZiAtcCAtdSAtcjEuNDYgV2ViQ29yZS9rd3EvS1dRT2JqZWN0Lm1tCi0tLSBXZWJDb3JlL2t3
cS9LV1FPYmplY3QubW0JMTggTWF5IDIwMDUgMjE6MTA6MjYgLTAwMDAJMS40NgorKysgV2ViQ29y
ZS9rd3EvS1dRT2JqZWN0Lm1tCTI3IFNlcCAyMDA1IDA3OjE3OjU4IC0wMDAwCkBAIC0yNiw3ICsy
Niw3IEBACiAjaW1wb3J0ICJLV1FPYmplY3QuaCIKIAogI2ltcG9ydCAiS1dRVmFyaWFudC5oIgot
I2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5o
PgogCiAvLyBUaGUgRm91bmRhdGlvbi1sZXZlbCBDb2NvYSBjYWxscyBoZXJlIChOU1RpbWVyLCBO
U0RhdGUsIE5TQXJyYXksCiAvLyBOU0RpY3Rpb25hcnkpIHNob3VsZCBiZSBleGNlcHRpb24tZnJl
ZSwgc28gbm8gbmVlZCB0byBibG9jawpJbmRleDogV2ViQ29yZS9rd3EvS1dRUGFnZVN0YXRlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FQYWdlU3RhdGUu
bW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkKZGlmZiAtcCAtdSAtcjEuMTkgV2ViQ29yZS9r
d3EvS1dRUGFnZVN0YXRlLm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FQYWdlU3RhdGUubW0JMTkgU2Vw
IDIwMDUgMTg6NTI6MTMgLTAwMDAJMS4xOQorKysgV2ViQ29yZS9rd3EvS1dRUGFnZVN0YXRlLm1t
CTI3IFNlcCAyMDA1IDA3OjE3OjU4IC0wMDAwCkBAIC0zMiw3ICszMiw3IEBACiAjaW1wb3J0ICJr
aHRtbHZpZXcuaCIKICNpbXBvcnQgImtqc193aW5kb3cuaCIKIAotI2ltcG9ydCAiS1dRQXNzZXJ0
aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAiS1dRRm91
bmRhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCAiS1dRS0hUTUxQYXJ0LmgiCiAKSW5kZXg6IFdlYkNv
cmUva3dxL0tXUVBhaW50ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva3dxL0tXUVBhaW50ZXIubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQyCmRpZmYgLXAg
LXUgLXIxLjE0MiBXZWJDb3JlL2t3cS9LV1FQYWludGVyLm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FQ
YWludGVyLm1tCTI0IFNlcCAyMDA1IDExOjQ1OjE4IC0wMDAwCTEuMTQyCisrKyBXZWJDb3JlL2t3
cS9LV1FQYWludGVyLm1tCTI3IFNlcCAyMDA1IDA3OjE3OjU5IC0wMDAwCkBAIC0yNSw3ICsyNSw3
IEBACiAKICNpbXBvcnQgIktXUVBhaW50ZXIuaCIKIAotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5o
IgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAiS1dRQnJ1c2guaCIK
ICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMu
aCIKSW5kZXg6IFdlYkNvcmUva3dxL0tXUVJlc291cmNlTG9hZGVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FSZXNvdXJjZUxvYWRlci5tbSx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xNQpkaWZmIC1wIC11IC1yMS4xNSBXZWJDb3JlL2t3cS9LV1FSZXNv
dXJjZUxvYWRlci5tbQotLS0gV2ViQ29yZS9rd3EvS1dRUmVzb3VyY2VMb2FkZXIubW0JOCBTZXAg
MjAwNSAyMTozNTozMCAtMDAwMAkxLjE1CisrKyBXZWJDb3JlL2t3cS9LV1FSZXNvdXJjZUxvYWRl
ci5tbQkyNyBTZXAgMjAwNSAwNzoxNzo1OSAtMDAwMApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW1w
b3J0ICJLV1FSZXNvdXJjZUxvYWRlci5oIgogCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisj
aW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0ICJLV1FLSm9iQ2xhc3Nlcy5o
IgogI2ltcG9ydCAibG9hZGVyLmgiCiAKSW5kZXg6IFdlYkNvcmUva3dxL0tXUVNpZ25hbC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRU2lnbmFsLm1tLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXAgLXUgLXIxLjE5IFdlYkNvcmUva3dxL0tX
UVNpZ25hbC5tbQotLS0gV2ViQ29yZS9rd3EvS1dRU2lnbmFsLm1tCTE0IEp1bCAyMDA1IDAyOjMy
OjMzIC0wMDAwCTEuMTkKKysrIFdlYkNvcmUva3dxL0tXUVNpZ25hbC5tbQkyNyBTZXAgMjAwNSAw
NzoxNzo1OSAtMDAwMApAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiS1dRU2lnbmFsLmgiCiAK
ICNpbXBvcnQgIktXUU9iamVjdC5oIgotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgorI2ltcG9y
dCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCiB1c2luZyBLSU86OkpvYjsKIApJbmRleDogV2Vi
Q29yZS9rd3EvS1dRU2xvdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9rd3EvS1dRU2xvdC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMwpkaWZmIC1wIC11IC1y
MS4zMyBXZWJDb3JlL2t3cS9LV1FTbG90Lm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FTbG90Lm1tCTEg
U2VwIDIwMDUgMTg6NTc6NTMgLTAwMDAJMS4zMworKysgV2ViQ29yZS9rd3EvS1dRU2xvdC5tbQky
NyBTZXAgMjAwNSAwNzoxNzo1OSAtMDAwMApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW1wb3J0ICJL
V1FTbG90LmgiCiAKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3Jl
L0Fzc2VydGlvbnMuaD4KIAogI2ltcG9ydCAiZG9tX2RvY2ltcGwuaCIKICNpbXBvcnQgImtodG1s
X3BhcnQuaCIKSW5kZXg6IFdlYkNvcmUva3dxL0tXUVN0cmluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FTdHJpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xMTcKZGlmZiAtcCAtdSAtcjEuMTE3IFdlYkNvcmUva3dxL0tXUVN0cmluZy5oCi0tLSBX
ZWJDb3JlL2t3cS9LV1FTdHJpbmcuaAkxNiBTZXAgMjAwNSAyMjo0MjoyMyAtMDAwMAkxLjExNwor
KysgV2ViQ29yZS9rd3EvS1dRU3RyaW5nLmgJMjcgU2VwIDIwMDUgMDc6MTc6NTkgLTAwMDAKQEAg
LTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KICNpbmNsdWRlIDxD
b3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgIm1pc2MvbWFpbl90aHJl
YWRfbWFsbG9jLmgiCisjaW5jbHVkZSAia3htbGNvcmUvRmFzdE1hbGxvYy5oIgogI2luY2x1ZGUg
IktXUUNTdHJpbmcuaCIKIAogLy8gTWFrZSBodG1sdG9rZW5pemVyLmNwcCBoYXBweQpAQCAtMzQw
LDcgKzM0MCwxMSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY2hhciBjaCwgUUNoYXIgcWMpCiAj
ZGVmaW5lIFFTX0lOVEVSTkFMX0JVRkZFUl9DSEFSUyBRU19JTlRFUk5BTF9CVUZGRVJfU0laRS0x
CiAjZGVmaW5lIFFTX0lOVEVSTkFMX0JVRkZFUl9VQ0hBUlMgUVNfSU5URVJOQUxfQlVGRkVSX1NJ
WkUvMgogCi1zdHJ1Y3QgS1dRU3RyaW5nRGF0YSB7CitzdHJ1Y3QgS1dRU3RyaW5nRGF0YSAKKyNp
Zm5kZWYgUVNUUklOR19ERUJVR19BTExPQ0FUSU9OUworICAgIDogcHVibGljIEZhc3RBbGxvY2F0
ZWQgCisjZW5kaWYKK3sKICAgICAvLyBVc2VzIHNoYXJlZCBudWxsIGRhdGEuCiAgICAgS1dRU3Ry
aW5nRGF0YSgpOwogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwpAQCAtMzY1LDggKzM2OSw2IEBAIHN0
cnVjdCBLV1FTdHJpbmdEYXRhIHsKICNpZmRlZiBRU1RSSU5HX0RFQlVHX0FMTE9DQVRJT05TCiAg
ICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzKTsKICAgICB2b2lkIG9wZXJhdG9yIGRlbGV0
ZSh2b2lkKnApOwotI2Vsc2UKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAjZW5kaWYKIAog
ICAgIGlubGluZSB2b2lkIHJlZigpIHsgcmVmQ291bnQrKzsgfQpJbmRleDogV2ViQ29yZS9rd3Ev
S1dRU3RyaW5nLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9L
V1FTdHJpbmcubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQwCmRpZmYgLXAgLXUgLXIxLjE0
MCBXZWJDb3JlL2t3cS9LV1FTdHJpbmcubW0KLS0tIFdlYkNvcmUva3dxL0tXUVN0cmluZy5tbQkx
NiBTZXAgMjAwNSAyMjo0MjoyNCAtMDAwMAkxLjE0MAorKysgV2ViQ29yZS9rd3EvS1dRU3RyaW5n
Lm1tCTI3IFNlcCAyMDA1IDA3OjE4OjAwIC0wMDAwCkBAIC0zMywxMSArMzMsNyBAQAogI2ltcG9y
dCAiS1dRU3RyaW5nLmgiCiAjaW1wb3J0ICJLV1FSZWdFeHAuaCIKICNpbXBvcnQgIktXUVRleHRD
b2RlYy5oIgotI2ltcG9ydCAibWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaCIKLQotdXNpbmcga2h0
bWw6Om1haW5fdGhyZWFkX21hbGxvYzsKLXVzaW5nIGtodG1sOjptYWluX3RocmVhZF9yZWFsbG9j
OwotdXNpbmcga2h0bWw6Om1haW5fdGhyZWFkX2ZyZWU7CisjaW1wb3J0ICJreG1sY29yZS9GYXN0
TWFsbG9jLmgiCiAKICNkZWZpbmUgQ0hFQ0tfRk9SX0hBTkRMRV9MRUFLUyAwCiAKQEAgLTEyNyw3
ICsxMjMsNyBAQCBzdGF0aWMgdm9pZCBERUxFVEVfQ0hBUih2b2lkICpwKQogc3RhdGljIFFDaGFy
ICpBTExPQ19RQ0hBUihpbnQgbikKIHsKICAgICBzaXplX3Qgc2l6ZSA9IChzaXplb2YoUUNoYXIp
KiggbiApKTsKLSAgICBRQ2hhciAqcHRyID0gKFFDaGFyICopbWFpbl90aHJlYWRfbWFsbG9jKHNp
emUpOworICAgIFFDaGFyICpwdHIgPSAoUUNoYXIgKilmYXN0X21hbGxvYyhzaXplKTsKIAogICAg
IENGRGljdGlvbmFyeVNldFZhbHVlIChhbGxvY2F0ZWRCdWZmZXJzKCksIHB0ciwgKGNvbnN0IHZv
aWQgKilzaXplKTsKICAgICBpZiAoc2l6ZSA+PSBBTExPQ0FUSU9OX0hJU1RPR1JBTV9TSVpFKQpA
QCAtMjA3LDEzICsyMDMsMTMgQEAgdm9pZCBfcHJpbnRRU3RyaW5nQWxsb2NhdGlvblN0YXRpc3Rp
Y3MoKQogCiAjZWxzZQogCi0jZGVmaW5lIEFMTE9DX0NIQVIoIE4gKSAoY2hhciopIG1haW5fdGhy
ZWFkX21hbGxvYyhOKQotI2RlZmluZSBSRUFMTE9DX0NIQVIoIFAsIE4gKSAoY2hhciAqKSBtYWlu
X3RocmVhZF9yZWFsbG9jKFAsTikKLSNkZWZpbmUgREVMRVRFX0NIQVIoIFAgKSBtYWluX3RocmVh
ZF9mcmVlKFApCi0KLSNkZWZpbmUgQUxMT0NfUUNIQVIoIE4gKSAoUUNoYXIqKSBtYWluX3RocmVh
ZF9tYWxsb2Moc2l6ZW9mKFFDaGFyKSooIE4gKSkKLSNkZWZpbmUgUkVBTExPQ19RQ0hBUiggUCwg
TiApIChRQ2hhciAqKSBtYWluX3RocmVhZF9yZWFsbG9jKFAsc2l6ZW9mKFFDaGFyKSooIE4gKSkK
LSNkZWZpbmUgREVMRVRFX1FDSEFSKCBQICkgbWFpbl90aHJlYWRfZnJlZSggUCApCisjZGVmaW5l
IEFMTE9DX0NIQVIoTikgKGNoYXIqKSBmYXN0TWFsbG9jKE4pCisjZGVmaW5lIFJFQUxMT0NfQ0hB
UihQLCBOKSAoY2hhciAqKSBmYXN0UmVhbGxvYyhQLCBOKQorI2RlZmluZSBERUxFVEVfQ0hBUihQ
KSBmYXN0RnJlZShQKQorCisjZGVmaW5lIEFMTE9DX1FDSEFSKE4pIChRQ2hhciopZmFzdE1hbGxv
YyhzaXplb2YoUUNoYXIpKihOKSkKKyNkZWZpbmUgUkVBTExPQ19RQ0hBUihQLCBOKSAoUUNoYXIg
KilmYXN0UmVhbGxvYyhQLCBzaXplb2YoUUNoYXIpKihOKSkKKyNkZWZpbmUgREVMRVRFX1FDSEFS
KFApIGZhc3RGcmVlKFApCiAKICNlbmRpZiAvLyBRU1RSSU5HX0RFQlVHX0FMTE9DQVRJT05TCiAK
QEAgLTc1OCwxNCArNzU0LDE0IEBAIHZvaWQgUVN0cmluZzo6c2V0QnVmZmVyRnJvbUNGU3RyaW5n
KENGU3QKICAgICBVbmlDaGFyIGZpeGVkU2l6ZUJ1ZmZlclsxMDI0XTsKICAgICBVbmlDaGFyICpi
dWZmZXI7CiAgICAgaWYgKHNpemUgPiAoQ0ZJbmRleCkoc2l6ZW9mKGZpeGVkU2l6ZUJ1ZmZlcikg
LyBzaXplb2YoVW5pQ2hhcikpKSB7Ci0gICAgICAgIGJ1ZmZlciA9IChVbmlDaGFyICopbWFpbl90
aHJlYWRfbWFsbG9jKHNpemUgKiBzaXplb2YoVW5pQ2hhcikpOworICAgICAgICBidWZmZXIgPSAo
VW5pQ2hhciAqKWZhc3RNYWxsb2Moc2l6ZSAqIHNpemVvZihVbmlDaGFyKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgYnVmZmVyID0gZml4ZWRTaXplQnVmZmVyOwogICAgIH0KICAgICBDRlN0cmlu
Z0dldENoYXJhY3RlcnMoY2ZzLCBDRlJhbmdlTWFrZSAoMCwgc2l6ZSksIGJ1ZmZlcik7CiAgICAg
c2V0VW5pY29kZSgoY29uc3QgUUNoYXIgKilidWZmZXIsICh1aW50KXNpemUpOwogICAgIGlmIChi
dWZmZXIgIT0gZml4ZWRTaXplQnVmZmVyKSB7Ci0gICAgICAgIG1haW5fdGhyZWFkX2ZyZWUoYnVm
ZmVyKTsKKyAgICAgICAgZmFzdEZyZWUoYnVmZmVyKTsKICAgICB9CiB9CiAKQEAgLTI5MDIsNyAr
Mjg5OCw3IEBAIHN0YXRpYyBIYW5kbGVOb2RlICppbml0aWFsaXplSGFuZGxlTm9kZUIKIAogc3Rh
dGljIEhhbmRsZVBhZ2VOb2RlICphbGxvY2F0ZVBhZ2VOb2RlKCkKIHsKLSAgICBIYW5kbGVQYWdl
Tm9kZSAqbm9kZSA9IChIYW5kbGVQYWdlTm9kZSAqKW1haW5fdGhyZWFkX21hbGxvYyhzaXplb2Yo
SGFuZGxlUGFnZU5vZGUpKTsKKyAgICBIYW5kbGVQYWdlTm9kZSAqbm9kZSA9IChIYW5kbGVQYWdl
Tm9kZSAqKWZhc3RNYWxsb2Moc2l6ZW9mKEhhbmRsZVBhZ2VOb2RlKSk7CiAgICAgbm9kZS0+bmV4
dCA9IG5vZGUtPnByZXZpb3VzID0gMDsKICAgICBub2RlLT5ub2RlcyA9IGluaXRpYWxpemVIYW5k
bGVOb2RlQmxvY2sobm9kZSk7CiAgICAgcmV0dXJuIG5vZGU7CkluZGV4OiBXZWJDb3JlL2t3cS9L
V1FUZXh0QXJlYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3Ev
S1dRVGV4dEFyZWEubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODkKZGlmZiAtcCAtdSAtcjEu
ODkgV2ViQ29yZS9rd3EvS1dRVGV4dEFyZWEubW0KLS0tIFdlYkNvcmUva3dxL0tXUVRleHRBcmVh
Lm1tCTMxIEF1ZyAyMDA1IDA0OjM4OjQ0IC0wMDAwCTEuODkKKysrIFdlYkNvcmUva3dxL0tXUVRl
eHRBcmVhLm1tCTI3IFNlcCAyMDA1IDA3OjE4OjAxIC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBACiAj
aW1wb3J0ICJET01DU1MuaCIKICNpbXBvcnQgIkRPTUhUTUwuaCIKICNpbXBvcnQgIkV2ZW50TmFt
ZXMuaCIKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2Vy
dGlvbnMuaD4KICNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgogI2ltcG9ydCAiS1dRTlNWaWV3RXh0
cmFzLmgiCiAjaW1wb3J0ICJLV1FUZXh0RWRpdC5oIgpJbmRleDogV2ViQ29yZS9rd3EvS1dRVGV4
dENvZGVjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FU
ZXh0Q29kZWMubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTQKZGlmZiAtcCAtdSAtcjEuNTQg
V2ViQ29yZS9rd3EvS1dRVGV4dENvZGVjLm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FUZXh0Q29kZWMu
bW0JMTIgSnVsIDIwMDUgMTY6Mzc6MjYgLTAwMDAJMS41NAorKysgV2ViQ29yZS9rd3EvS1dRVGV4
dENvZGVjLm1tCTI3IFNlcCAyMDA1IDA3OjE4OjAxIC0wMDAwCkBAIC0yNSw3ICsyNSw3IEBACiAK
ICNpbXBvcnQgIktXUVRleHRDb2RlYy5oIgogCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisj
aW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0ICJLV1FDaGFyc2V0cy5oIgog
I2ltcG9ydCAiS1dRTG9nZ2luZy5oIgogCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FUZXh0RWRpdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGV4dEVkaXQu
bW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTIKZGlmZiAtcCAtdSAtcjEuNTIgV2ViQ29yZS9r
d3EvS1dRVGV4dEVkaXQubW0KLS0tIFdlYkNvcmUva3dxL0tXUVRleHRFZGl0Lm1tCTI0IFNlcCAy
MDA1IDExOjA1OjM0IC0wMDAwCTEuNTIKKysrIFdlYkNvcmUva3dxL0tXUVRleHRFZGl0Lm1tCTI3
IFNlcCAyMDA1IDA3OjE4OjAxIC0wMDAwCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbXBvcnQgIktX
UVRleHRFZGl0LmgiCiAKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxj
b3JlL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIktX
UUxpbmVFZGl0LmgiCiAjaW1wb3J0ICJLV1FQYWxldHRlLmgiCkluZGV4OiBXZWJDb3JlL2t3cS9L
V1FUZXh0RmllbGQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dx
L0tXUVRleHRGaWVsZC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44OApkaWZmIC1wIC11IC1y
MS44OCBXZWJDb3JlL2t3cS9LV1FUZXh0RmllbGQubW0KLS0tIFdlYkNvcmUva3dxL0tXUVRleHRG
aWVsZC5tbQk4IFNlcCAyMDA1IDE4OjA1OjIxIC0wMDAwCTEuODgKKysrIFdlYkNvcmUva3dxL0tX
UVRleHRGaWVsZC5tbQkyNyBTZXAgMjAwNSAwNzoxODowMSAtMDAwMApAQCAtMjUsNyArMjUsNyBA
QAogCiAjaW1wb3J0ICJLV1FUZXh0RmllbGQuaCIKIAotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5o
IgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAiS1dRS0hUTUxQYXJ0
LmgiCiAjaW1wb3J0ICJLV1FMaW5lRWRpdC5oIgogI2ltcG9ydCAiS1dRTlNWaWV3RXh0cmFzLmgi
CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FUaW1lci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGltZXIubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcK
ZGlmZiAtcCAtdSAtcjEuMTcgV2ViQ29yZS9rd3EvS1dRVGltZXIubW0KLS0tIFdlYkNvcmUva3dx
L0tXUVRpbWVyLm1tCTE5IFNlcCAyMDA1IDE4OjUyOjEzIC0wMDAwCTEuMTcKKysrIFdlYkNvcmUv
a3dxL0tXUVRpbWVyLm1tCTI3IFNlcCAyMDA1IDA3OjE4OjAxIC0wMDAwCkBAIC0yNSw3ICsyNSw3
IEBACiAKICNpbXBvcnQgIktXUVRpbWVyLmgiCiAKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIK
KyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIktXUUxvZ2dpbmcuaCIK
ICNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMuaCIKIApJbmRleDogV2ViQ29yZS9rd3EvS1dR
VmFsdWVMaXN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3
cS9LV1FWYWx1ZUxpc3RJbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtcCAt
dSAtcjEuMTEgV2ViQ29yZS9rd3EvS1dRVmFsdWVMaXN0SW1wbC5oCi0tLSBXZWJDb3JlL2t3cS9L
V1FWYWx1ZUxpc3RJbXBsLmgJMTUgQXVnIDIwMDUgMDA6MzI6NDAgLTAwMDAJMS4xMQorKysgV2Vi
Q29yZS9rd3EvS1dRVmFsdWVMaXN0SW1wbC5oCTI3IFNlcCAyMDA1IDA3OjE4OjAyIC0wMDAwCkBA
IC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJLV1FSZWZQdHIuaCIKICNpbmNsdWRlICJLV1FE
ZWYuaCIKLSNpbmNsdWRlICJtYWluX3RocmVhZF9tYWxsb2MuaCIKKyNpbmNsdWRlICJreG1sY29y
ZS9GYXN0TWFsbG9jLmgiCiAKIGNsYXNzIEtXUVZhbHVlTGlzdE5vZGVJbXBsOwogCkBAIC0xMDcs
MTEgKzEwNyw4IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEtXUVZhbHVlTGlzdE5vZGVJ
bXBsOwogfTsKIAotY2xhc3MgS1dRVmFsdWVMaXN0Tm9kZUltcGwKK2NsYXNzIEtXUVZhbHVlTGlz
dE5vZGVJbXBsIDogcHVibGljIEZhc3RBbGxvY2F0ZWQKIHsKLXB1YmxpYzoKLSAgICBNQUlOX1RI
UkVBRF9BTExPQ0FURUQ7Ci0KIHByb3RlY3RlZDoKICAgICBLV1FWYWx1ZUxpc3ROb2RlSW1wbCgp
OwogCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FWYWx1ZUxpc3RJbXBsLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FWYWx1ZUxpc3RJbXBsLm1tLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEzCmRpZmYgLXAgLXUgLXIxLjEzIFdlYkNvcmUva3dxL0tXUVZhbHVl
TGlzdEltcGwubW0KLS0tIFdlYkNvcmUva3dxL0tXUVZhbHVlTGlzdEltcGwubW0JMTUgQXVnIDIw
MDUgMDA6MzI6NDEgLTAwMDAJMS4xMworKysgV2ViQ29yZS9rd3EvS1dRVmFsdWVMaXN0SW1wbC5t
bQkyNyBTZXAgMjAwNSAwNzoxODowMiAtMDAwMApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW1wb3J0
IDxzdGRsaWIuaD4KIAotY2xhc3MgS1dRVmFsdWVMaXN0SW1wbDo6S1dRVmFsdWVMaXN0UHJpdmF0
ZQorY2xhc3MgS1dRVmFsdWVMaXN0SW1wbDo6S1dRVmFsdWVMaXN0UHJpdmF0ZSA6IHB1YmxpYyBG
YXN0QWxsb2NhdGVkCiB7CiBwdWJsaWM6CiAgICAgS1dRVmFsdWVMaXN0UHJpdmF0ZSh2b2lkICgq
ZGVsZXRlRnVuYykoS1dRVmFsdWVMaXN0Tm9kZUltcGwgKiksIEtXUVZhbHVlTGlzdE5vZGVJbXBs
ICooKmNvcHlGdW5jKShLV1FWYWx1ZUxpc3ROb2RlSW1wbCAqKSk7CkBAIC0zNSw4ICszNSw2IEBA
IHB1YmxpYzoKIAogICAgIH5LV1FWYWx1ZUxpc3RQcml2YXRlKCk7CiAKLSAgICBNQUlOX1RIUkVB
RF9BTExPQ0FURUQ7Ci0KICAgICB2b2lkIGNvcHlMaXN0KEtXUVZhbHVlTGlzdE5vZGVJbXBsICps
LCBLV1FWYWx1ZUxpc3ROb2RlSW1wbCAqJmhlYWQsIEtXUVZhbHVlTGlzdE5vZGVJbXBsIComdGFp
bCkgY29uc3Q7CiAgICAgdm9pZCBkZWxldGVMaXN0KEtXUVZhbHVlTGlzdE5vZGVJbXBsICpsKTsK
IApJbmRleDogV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbSx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS40MTcKZGlmZiAtcCAtdSAtcjEuNDE3IFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2Uu
bW0KLS0tIFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0JMjQgU2VwIDIwMDUgMDE6MTk6MDYg
LTAwMDAJMS40MTcKKysrIFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0JMjcgU2VwIDIwMDUg
MDc6MTg6MDMgLTAwMDAKQEAgLTYzLDcgKzYzLDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L3Byb3BlcnR5X21hcC5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvcnVudGltZV9yb290Lmg+
CiAKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlv
bnMuaD4KICNpbXBvcnQgIktXUUNoYXJzZXRzLmgiCiAjaW1wb3J0ICJLV1FDbGlwYm9hcmQuaCIK
ICNpbXBvcnQgIktXUUVkaXRDb21tYW5kLmgiCkBAIC0xMjQsNyArMTI0LDYgQEAgdXNpbmcga2h0
bWw6OlJlbmRlclN0eWxlOwogdXNpbmcga2h0bWw6OlJlbmRlcldpZGdldDsKIHVzaW5nIGtodG1s
OjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDsKIHVzaW5nIGtodG1sOjpTZWxlY3Rpb25Db250cm9s
bGVyOwotdXNpbmcga2h0bWw6OlNoYXJlZFB0cjsKIHVzaW5nIGtodG1sOjpUb2tlbml6ZXI7CiB1
c2luZyBraHRtbDo6VGV4dEl0ZXJhdG9yOwogdXNpbmcga2h0bWw6OlR5cGluZ0NvbW1hbmQ7Cklu
ZGV4OiBXZWJDb3JlL2t3cS9XZWJDb3JlQ29va2llQWRhcHRlci5tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlQ29va2llQWRhcHRlci5tLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBXZWJDb3JlL2t3cS9XZWJDb3JlQ29v
a2llQWRhcHRlci5tCi0tLSBXZWJDb3JlL2t3cS9XZWJDb3JlQ29va2llQWRhcHRlci5tCTIyIEph
biAyMDAzIDAwOjEyOjM2IC0wMDAwCTEuNgorKysgV2ViQ29yZS9rd3EvV2ViQ29yZUNvb2tpZUFk
YXB0ZXIubQkyNyBTZXAgMjAwNSAwNzoxODowMyAtMDAwMApAQCAtMjQsNyArMjQsNyBAQAogICov
CiAKICNpbXBvcnQgIldlYkNvcmVDb29raWVBZGFwdGVyLmgiCi0jaW1wb3J0ICJLV1FBc3NlcnRp
b25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAKIEBpbXBsZW1lbnRhdGlv
biBXZWJDb3JlQ29va2llQWRhcHRlcgogCkluZGV4OiBXZWJDb3JlL2t3cS9XZWJDb3JlR3JhcGhp
Y3NCcmlkZ2UubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2Vi
Q29yZUdyYXBoaWNzQnJpZGdlLm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11
IC1yMS42IFdlYkNvcmUva3dxL1dlYkNvcmVHcmFwaGljc0JyaWRnZS5tCi0tLSBXZWJDb3JlL2t3
cS9XZWJDb3JlR3JhcGhpY3NCcmlkZ2UubQkxNiBBdWcgMjAwNSAxNzozNjozMiAtMDAwMAkxLjYK
KysrIFdlYkNvcmUva3dxL1dlYkNvcmVHcmFwaGljc0JyaWRnZS5tCTI3IFNlcCAyMDA1IDA3OjE4
OjAzIC0wMDAwCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbXBvcnQgIldlYkNvcmVHcmFwaGljc0Jy
aWRnZS5oIgogCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9B
c3NlcnRpb25zLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJDb3JlR3JhcGhpY3NCcmlkZ2UKIApJ
bmRleDogV2ViQ29yZS9rd3EvV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5Lm0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL1dlYkNvcmVJbWFnZVJlbmRlcmVyRmFj
dG9yeS5tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtcCAtdSAtcjEuOSBXZWJDb3Jl
L2t3cS9XZWJDb3JlSW1hZ2VSZW5kZXJlckZhY3RvcnkubQotLS0gV2ViQ29yZS9rd3EvV2ViQ29y
ZUltYWdlUmVuZGVyZXJGYWN0b3J5Lm0JMTAgRGVjIDIwMDQgMDQ6Mzg6MTkgLTAwMDAJMS45Cisr
KyBXZWJDb3JlL2t3cS9XZWJDb3JlSW1hZ2VSZW5kZXJlckZhY3RvcnkubQkyNyBTZXAgMjAwNSAw
NzoxODowMyAtMDAwMApAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbXBvcnQgIldlYkNvcmVJ
bWFnZVJlbmRlcmVyRmFjdG9yeS5oIgotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgorI2ltcG9y
dCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAiS1dRUmVuZGVyVHJlZURlYnVnLmgi
CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJDb3JlSW1hZ2VSZW5kZXJlckZhY3RvcnkKSW5kZXg6IFdl
YkNvcmUva3dxL1dlYkNvcmVLZXlHZW5lcmF0b3IubQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZUtleUdlbmVyYXRvci5tLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjMKZGlmZiAtcCAtdSAtcjEuMyBXZWJDb3JlL2t3cS9XZWJDb3JlS2V5R2VuZXJhdG9y
Lm0KLS0tIFdlYkNvcmUva3dxL1dlYkNvcmVLZXlHZW5lcmF0b3IubQkxOSBNYXkgMjAwNCAxNDoz
NzoxMCAtMDAwMAkxLjMKKysrIFdlYkNvcmUva3dxL1dlYkNvcmVLZXlHZW5lcmF0b3IubQkyNyBT
ZXAgMjAwNSAwNzoxODowMyAtMDAwMApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW1wb3J0ICJXZWJD
b3JlS2V5R2VuZXJhdG9yLmgiCiAKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQg
PGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KIAogc3RhdGljIFdlYkNvcmVLZXlHZW5lcmF0b3IgKnNo
YXJlZEdlbmVyYXRvcjsKIApJbmRleDogV2ViQ29yZS9rd3EvV2ViQ29yZVRleHRSZW5kZXJlckZh
Y3RvcnkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL1dlYkNv
cmVUZXh0UmVuZGVyZXJGYWN0b3J5Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI1CmRpZmYg
LXAgLXUgLXIxLjI1IFdlYkNvcmUva3dxL1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5Lm1tCi0t
LSBXZWJDb3JlL2t3cS9XZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeS5tbQkyNCBTZXAgMjAwNSAx
MTo0NToxOSAtMDAwMAkxLjI1CisrKyBXZWJDb3JlL2t3cS9XZWJDb3JlVGV4dFJlbmRlcmVyRmFj
dG9yeS5tbQkyNyBTZXAgMjAwNSAwNzoxODowMyAtMDAwMApAQCAtMjYsNyArMjYsNyBAQAogI2lt
cG9ydCAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgogI2ltcG9ydCAiV2ViQ29yZVRleHRSZW5kZXJl
ckZhY3RvcnkuaCIKIAotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgorI2ltcG9ydCA8a3htbGNv
cmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAiS1dRS0hUTUxQYXJ0LmgiCiAjaW1wb3J0ICJLV1FM
aXN0Qm94LmgiCiAjaW1wb3J0ICJXZWJDb3JlQnJpZGdlLmgiCkluZGV4OiBXZWJDb3JlL2t3cS9X
ZWJDb3JlVmlld0ZhY3RvcnkubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9rd3EvV2ViQ29yZVZpZXdGYWN0b3J5Lm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlm
ZiAtcCAtdSAtcjEuMTEgV2ViQ29yZS9rd3EvV2ViQ29yZVZpZXdGYWN0b3J5Lm0KLS0tIFdlYkNv
cmUva3dxL1dlYkNvcmVWaWV3RmFjdG9yeS5tCTExIERlYyAyMDAzIDAyOjIwOjQyIC0wMDAwCTEu
MTEKKysrIFdlYkNvcmUva3dxL1dlYkNvcmVWaWV3RmFjdG9yeS5tCTI3IFNlcCAyMDA1IDA3OjE4
OjAzIC0wMDAwCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogI2ltcG9y
dCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1w
b3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJDb3JlVmll
d0ZhY3RvcnkKIAo=
</data>
<flag name="review"
          id="626"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4060</attachid>
            <date>2005-09-27 02:04:22 -0700</date>
            <delta_ts>2005-09-27 13:45:44 -0700</delta_ts>
            <desc>improved version</desc>
            <filename>use-tcmalloc.patch.txt</filename>
            <type>text/plain</type>
            <size>734764</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgz
NwpkaWZmIC1wIC11IC1yMS44MzcgSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCi0tLSBKYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJMjQgU2VwIDIwMDUgMjI6MzQ6MTIgLTAwMDAJMS44MzcKKysrIEph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkyNyBTZXAgMjAwNSAwODo0NDozNyAtMDAwMApAQCAtMSwz
ICsxLDE5MyBAQAorMjAwNS0wOS0yNiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisJLSByZXBsYWNlIGRs
bWFsbG9jIHdpdGggdGNtYWxsb2MKKwlodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hv
d19idWcuY2dpP2lkPTUxNDUKKworCUkgYWxzbyBtb3ZlZCBTaGFyZWRQdHIgYW5kIHRoZSBhc3Nl
cnRpb24gY29kZSBmcm9tIFdlYkNvcmUgaW50byBhCisJbmV3IGt4bWxjb3JlIGRpcmVjdG9yeS4K
KwkKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGtqcy9jb2xsZWN0b3IuY3BwOgorICAgICAgICAoS0pTOjpDb2xsZWN0b3I6OmFs
bG9jYXRlKToKKyAgICAgICAgKEtKUzo6Q29sbGVjdG9yOjpjb2xsZWN0KToKKyAgICAgICAgKiBr
anMvY29uZmlnLmg6CisgICAgICAgICoga2pzL2Zhc3RfbWFsbG9jLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBranMvZmFzdF9tYWxsb2MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBranMvZnVuY3Rp
b24uY3BwOgorICAgICAgICAqIGtqcy9mdW5jdGlvbi5oOgorICAgICAgICAqIGtqcy9mdW5jdGlv
bl9vYmplY3QuY3BwOgorICAgICAgICAqIGtqcy9pZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKEtK
Uzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKiBranMvaW50ZXJuYWwuY3BwOgorICAgICAg
ICAqIGtqcy9pbnRlcm5hbC5oOgorICAgICAgICAqIGtqcy9ub2Rlcy5oOgorICAgICAgICAqIGtq
cy9ub2RlczJzdHJpbmcuY3BwOgorICAgICAgICAqIGtqcy9wcm9wZXJ0eV9tYXAuY3BwOgorICAg
ICAgICAoS0pTOjpQcm9wZXJ0eU1hcDo6flByb3BlcnR5TWFwKToKKyAgICAgICAgKEtKUzo6UHJv
cGVydHlNYXA6OnJlaGFzaCk6CisgICAgICAgICoga2pzL3Njb3BlX2NoYWluLmg6CisgICAgICAg
ICoga2pzL3NoYXJlZF9wdHIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBranMvc3RyaW5nX29iamVj
dC5jcHA6CisgICAgICAgIChTdHJpbmdPYmplY3RGdW5jSW1wOjpjYWxsQXNGdW5jdGlvbik6Cisg
ICAgICAgICoga2pzL3VzdHJpbmcuY3BwOgorICAgICAgICAoS0pTOjpVU3RyaW5nOjpSZXA6OmNy
ZWF0ZUNvcHlpbmcpOgorICAgICAgICAoS0pTOjpVU3RyaW5nOjpSZXA6OmRlc3Ryb3kpOgorICAg
ICAgICAoS0pTOjpVU3RyaW5nOjpleHBhbmRDYXBhY2l0eSk6CisgICAgICAgIChLSlM6OlVTdHJp
bmc6OmV4cGFuZFByZUNhcGFjaXR5KToKKyAgICAgICAgKEtKUzo6VVN0cmluZzo6VVN0cmluZyk6
CisgICAgICAgIChLSlM6OlVTdHJpbmc6OnNwbGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyk6
CisgICAgICAgIChLSlM6OlVTdHJpbmc6OmFwcGVuZCk6CisgICAgICAgIChLSlM6OlVTdHJpbmc6
Om9wZXJhdG9yPSk6CisgICAgICAgIChLSlM6OlVTdHJpbmc6OmRldGFjaCk6CisgICAgICAgICog
a2pzL3VzdHJpbmcuaDoKKyAgICAgICAgKiBreG1sY29yZS9Bc3NlcnRpb25zLmg6IEFkZGVkLgor
ICAgICAgICAqIGt4bWxjb3JlL0Fzc2VydGlvbnMubW06IEFkZGVkLgorICAgICAgICAqIGt4bWxj
b3JlL0Zhc3RNYWxsb2MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEtYTUxDb3JlOjpMZ0Zsb29yKToK
KyAgICAgICAgKEtYTUxDb3JlOjpTaXplQ2xhc3MpOgorICAgICAgICAoS1hNTENvcmU6OkJ5dGVT
aXplRm9yQ2xhc3MpOgorICAgICAgICAoS1hNTENvcmU6OkluaXRTaXplQ2xhc3Nlcyk6CisgICAg
ICAgIChLWE1MQ29yZTo6TWV0YURhdGFBbGxvYyk6CisgICAgICAgIChLWE1MQ29yZTo6UGFnZUhl
YXBBbGxvY2F0b3I6OkluaXQpOgorICAgICAgICAoS1hNTENvcmU6OlBhZ2VIZWFwQWxsb2NhdG9y
OjpOZXcpOgorICAgICAgICAoS1hNTENvcmU6OlBhZ2VIZWFwQWxsb2NhdG9yOjpEZWxldGUpOgor
ICAgICAgICAoS1hNTENvcmU6OlBhZ2VIZWFwQWxsb2NhdG9yOjppbnVzZSk6CisgICAgICAgIChL
WE1MQ29yZTo6cGFnZXMpOgorICAgICAgICAoS1hNTENvcmU6OkFsbG9jYXRpb25TaXplKToKKyAg
ICAgICAgKEtYTUxDb3JlOjpFdmVudCk6CisgICAgICAgIChLWE1MQ29yZTo6TmV3U3Bhbik6Cisg
ICAgICAgIChLWE1MQ29yZTo6RGVsZXRlU3Bhbik6CisgICAgICAgIChLWE1MQ29yZTo6RExMX0lu
aXQpOgorICAgICAgICAoS1hNTENvcmU6OkRMTF9SZW1vdmUpOgorICAgICAgICAoS1hNTENvcmU6
OkRMTF9Jc0VtcHR5KToKKyAgICAgICAgKEtYTUxDb3JlOjpETExfTGVuZ3RoKToKKyAgICAgICAg
KEtYTUxDb3JlOjpETExfUHJpbnQpOgorICAgICAgICAoS1hNTENvcmU6OkRMTF9QcmVwZW5kKToK
KyAgICAgICAgKEtYTUxDb3JlOjpETExfSW5zZXJ0T3JkZXJlZCk6CisgICAgICAgIChLWE1MQ29y
ZTo6KToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19QYWdlSGVhcDo6R2V0RGVzY3JpcHRv
cik6CisgICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfUGFnZUhlYXA6OlN5c3RlbUJ5dGVzKToK
KyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19QYWdlSGVhcDo6RnJlZUJ5dGVzKToKKyAgICAg
ICAgKEtYTUxDb3JlOjpUQ01hbGxvY19QYWdlSGVhcDo6UmVjb3JkU3Bhbik6CisgICAgICAgIChL
WE1MQ29yZTo6VENNYWxsb2NfUGFnZUhlYXA6OlRDTWFsbG9jX1BhZ2VIZWFwKToKKyAgICAgICAg
KEtYTUxDb3JlOjpUQ01hbGxvY19QYWdlSGVhcDo6TmV3KToKKyAgICAgICAgKEtYTUxDb3JlOjpU
Q01hbGxvY19QYWdlSGVhcDo6U3BsaXQpOgorICAgICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX1Bh
Z2VIZWFwOjpDYXJ2ZSk6CisgICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfUGFnZUhlYXA6OkRl
bGV0ZSk6CisgICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfUGFnZUhlYXA6OlJlZ2lzdGVyU2l6
ZUNsYXNzKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19QYWdlSGVhcDo6RHVtcCk6Cisg
ICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfUGFnZUhlYXA6Okdyb3dIZWFwKToKKyAgICAgICAg
KEtYTUxDb3JlOjpUQ01hbGxvY19QYWdlSGVhcDo6Q2hlY2spOgorICAgICAgICAoS1hNTENvcmU6
OlRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVja0xpc3QpOgorICAgICAgICAoS1hNTENvcmU6OlRDTWFs
bG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0OjpJbml0KToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01h
bGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdDo6bGVuZ3RoKToKKyAgICAgICAgKEtYTUxDb3JlOjpU
Q01hbGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdDo6ZW1wdHkpOgorICAgICAgICAoS1hNTENvcmU6
OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0Ojpsb3d3YXRlcm1hcmspOgorICAgICAgICAo
S1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0OjpjbGVhcl9sb3d3YXRlcm1h
cmspOgorICAgICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0OjpQ
dXNoKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdDo6
UG9wKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6ZnJlZWxpc3Rf
bGVuZ3RoKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6U2l6ZSk6
CisgICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6bGVuZ3RoKToK
KyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpJbml0KToKKyAg
ICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpJbnNlcnQpOgorICAg
ICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJlbW92ZSk6CisgICAg
ICAgIChLWE1MQ29yZTo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UG9wdWxhdGUpOgorICAg
ICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpTYW1wbGVBbGxvY2F0aW9uKToK
KyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdCk6CisgICAgICAg
IChLWE1MQ29yZTo6VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkNsZWFudXApOgorICAgICAgICAoS1hN
TENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpBbGxvY2F0ZSk6CisgICAgICAgIChLWE1MQ29y
ZTo6VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlYWxsb2NhdGUpOgorICAgICAgICAoS1hNTENvcmU6
OlRDTWFsbG9jX1RocmVhZENhY2hlOjpGZXRjaEZyb21DZW50cmFsQ2FjaGUpOgorICAgICAgICAo
S1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpSZWxlYXNlVG9DZW50cmFsQ2FjaGUpOgor
ICAgICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpTY2F2ZW5nZSk6CisgICAg
ICAgIChLWE1MQ29yZTo6VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKToKKyAgICAgICAg
KEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQpOgorICAg
ICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpQaWNrTmV4dFNhbXBsZSk6Cisg
ICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRNb2R1bGUpOgorICAg
ICAgICAoS1hNTENvcmU6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0VFNEKToKKyAgICAgICAg
KEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6Q3JlYXRlQ2FjaGVJZk5lY2Vzc2FyeSk6
CisgICAgICAgIChLWE1MQ29yZTo6VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlbGV0ZUNhY2hlKToK
KyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6UmVjb21wdXRlVGhyZWFk
Q2FjaGVTaXplKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6UHJp
bnQpOgorICAgICAgICAoS1hNTENvcmU6OkV4dHJhY3RTdGF0cyk6CisgICAgICAgIChLWE1MQ29y
ZTo6RHVtcFN0YXRzKToKKyAgICAgICAgKEtYTUxDb3JlOjpQcmludFN0YXRzKToKKyAgICAgICAg
KEtYTUxDb3JlOjpEdW1wU3RhY2tUcmFjZXMpOgorICAgICAgICAoS1hNTENvcmU6OlRDTWFsbG9j
SW1wbGVtZW50YXRpb246OkdldFN0YXRzKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY0lt
cGxlbWVudGF0aW9uOjpSZWFkU3RhY2tUcmFjZXMpOgorICAgICAgICAoS1hNTENvcmU6OlRDTWFs
bG9jSW1wbGVtZW50YXRpb246OkdldE51bWVyaWNQcm9wZXJ0eSk6CisgICAgICAgIChLWE1MQ29y
ZTo6VENNYWxsb2NJbXBsZW1lbnRhdGlvbjo6U2V0TnVtZXJpY1Byb3BlcnR5KToKKyAgICAgICAg
KEtYTUxDb3JlOjpEb1NhbXBsZWRBbGxvY2F0aW9uKToKKyAgICAgICAgKEtYTUxDb3JlOjpkb19t
YWxsb2MpOgorICAgICAgICAoS1hNTENvcmU6OmRvX2ZyZWUpOgorICAgICAgICAoS1hNTENvcmU6
OmRvX21lbWFsaWduKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY0d1YXJkOjpUQ01hbGxv
Y0d1YXJkKToKKyAgICAgICAgKEtYTUxDb3JlOjpUQ01hbGxvY0d1YXJkOjp+VENNYWxsb2NHdWFy
ZCk6CisgICAgICAgIChLWE1MQ29yZTo6bWFsbG9jKToKKyAgICAgICAgKEtYTUxDb3JlOjpmcmVl
KToKKyAgICAgICAgKEtYTUxDb3JlOjpjYWxsb2MpOgorICAgICAgICAoS1hNTENvcmU6OmNmcmVl
KToKKyAgICAgICAgKEtYTUxDb3JlOjpyZWFsbG9jKToKKyAgICAgICAgKEtYTUxDb3JlOjptZW1h
bGlnbik6CisgICAgICAgIChLWE1MQ29yZTo6cG9zaXhfbWVtYWxpZ24pOgorICAgICAgICAoS1hN
TENvcmU6OnZhbGxvYyk6CisgICAgICAgIChLWE1MQ29yZTo6cHZhbGxvYyk6CisgICAgICAgIChL
WE1MQ29yZTo6bWFsbG9jX3N0YXRzKToKKyAgICAgICAgKEtYTUxDb3JlOjptYWxsb3B0KToKKyAg
ICAgICAgKEtYTUxDb3JlOjptYWxsaW5mbyk6CisgICAgICAgICoga3htbGNvcmUvRmFzdE1hbGxv
Yy5oOiBBZGRlZC4KKyAgICAgICAgKEtYTUxDb3JlOjpGYXN0QWxsb2NhdGVkOjpvcGVyYXRvciBu
ZXcpOgorICAgICAgICAoS1hNTENvcmU6OkZhc3RBbGxvY2F0ZWQ6Om9wZXJhdG9yIGRlbGV0ZSk6
CisgICAgICAgIChLWE1MQ29yZTo6RmFzdEFsbG9jYXRlZDo6b3BlcmF0b3IgbmV3W10pOgorICAg
ICAgICAoS1hNTENvcmU6OkZhc3RBbGxvY2F0ZWQ6Om9wZXJhdG9yIGRlbGV0ZVtdKToKKyAgICAg
ICAgKiBreG1sY29yZS9TaGFyZWRQdHIuaDogQWRkZWQuCisgICAgICAgIChLWE1MQ29yZTo6U2hh
cmVkUHRyOjpTaGFyZWRQdHIpOgorICAgICAgICAoS1hNTENvcmU6OlNoYXJlZFB0cjo6flNoYXJl
ZFB0cik6CisgICAgICAgIChLWE1MQ29yZTo6U2hhcmVkUHRyOjppc051bGwpOgorICAgICAgICAo
S1hNTENvcmU6OlNoYXJlZFB0cjo6bm90TnVsbCk6CisgICAgICAgIChLWE1MQ29yZTo6U2hhcmVk
UHRyOjpyZXNldCk6CisgICAgICAgIChLWE1MQ29yZTo6U2hhcmVkUHRyOjpnZXQpOgorICAgICAg
ICAoS1hNTENvcmU6OlNoYXJlZFB0cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEtYTUxDb3JlOjpT
aGFyZWRQdHI6Om9wZXJhdG9yLT4pOgorICAgICAgICAoS1hNTENvcmU6OlNoYXJlZFB0cjo6b3Bl
cmF0b3IhKToKKyAgICAgICAgKEtYTUxDb3JlOjpTaGFyZWRQdHI6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoS1hNTENvcmU6Ojo6b3BlcmF0b3IpOgorICAgICAgICAoS1hNTENvcmU6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoS1hNTENvcmU6Om9wZXJhdG9yIT0pOgorICAgICAgICAoS1hNTENv
cmU6OnN0YXRpY19wb2ludGVyX2Nhc3QpOgorICAgICAgICAoS1hNTENvcmU6OmNvbnN0X3BvaW50
ZXJfY2FzdCk6CisgICAgICAgICoga3htbGNvcmUvVENQYWdlTWFwLmg6IEFkZGVkLgorICAgICAg
ICAoVENNYWxsb2NfUGFnZU1hcDE6OlRDTWFsbG9jX1BhZ2VNYXAxKToKKyAgICAgICAgKFRDTWFs
bG9jX1BhZ2VNYXAxOjpFbnN1cmUpOgorICAgICAgICAoVENNYWxsb2NfUGFnZU1hcDE6OmdldCk6
CisgICAgICAgIChUQ01hbGxvY19QYWdlTWFwMTo6c2V0KToKKyAgICAgICAgKFRDTWFsbG9jX1Bh
Z2VNYXAyOjpUQ01hbGxvY19QYWdlTWFwMik6CisgICAgICAgIChUQ01hbGxvY19QYWdlTWFwMjo6
Z2V0KToKKyAgICAgICAgKFRDTWFsbG9jX1BhZ2VNYXAyOjpzZXQpOgorICAgICAgICAoVENNYWxs
b2NfUGFnZU1hcDI6OkVuc3VyZSk6CisgICAgICAgIChUQ01hbGxvY19QYWdlTWFwMzo6TmV3Tm9k
ZSk6CisgICAgICAgIChUQ01hbGxvY19QYWdlTWFwMzo6VENNYWxsb2NfUGFnZU1hcDMpOgorICAg
ICAgICAoVENNYWxsb2NfUGFnZU1hcDM6OmdldCk6CisgICAgICAgIChUQ01hbGxvY19QYWdlTWFw
Mzo6c2V0KToKKyAgICAgICAgKFRDTWFsbG9jX1BhZ2VNYXAzOjpFbnN1cmUpOgorICAgICAgICAq
IGt4bWxjb3JlL1RDU3BpbkxvY2suaDogQWRkZWQuCisgICAgICAgIChUQ01hbGxvY19TcGluTG9j
azo6SW5pdCk6CisgICAgICAgIChUQ01hbGxvY19TcGluTG9jazo6RmluYWxpemUpOgorICAgICAg
ICAoVENNYWxsb2NfU3BpbkxvY2s6OkxvY2spOgorICAgICAgICAoVENNYWxsb2NfU3BpbkxvY2s6
OlVubG9jayk6CisgICAgICAgIChUQ01hbGxvY19TbG93TG9jayk6CisgICAgICAgIChUQ01hbGxv
Y19TcGluTG9ja0hvbGRlcjo6VENNYWxsb2NfU3BpbkxvY2tIb2xkZXIpOgorICAgICAgICAoVENN
YWxsb2NfU3BpbkxvY2tIb2xkZXI6On5UQ01hbGxvY19TcGluTG9ja0hvbGRlcik6CisgICAgICAg
ICoga3htbGNvcmUvVENTeXN0ZW1BbGxvYy5jcHA6IEFkZGVkLgorICAgICAgICAoVHJ5U2Jyayk6
CisgICAgICAgIChUcnlNbWFwKToKKyAgICAgICAgKFRyeURldk1lbSk6CisgICAgICAgIChUQ01h
bGxvY19TeXN0ZW1BbGxvYyk6CisgICAgICAgICoga3htbGNvcmUvVENTeXN0ZW1BbGxvYy5oOiBB
ZGRlZC4KKwogMjAwNS0wOS0yMyAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC1wIC11IC1yMS4xMiBKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCi0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCTE5
IFNlcCAyMDA1IDA2OjU3OjI1IC0wMDAwCTEuMTIKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJMjcgU2VwIDIwMDUgMDg6NDQ6MzkgLTAw
MDAKQEAgLTI1LDEyICsyNSwyMSBAQAogLyogRW5kIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9u
ICovCiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTY1MTYyRUVCMDhFNkEx
RkUwMDc1NTZDRCAvKiBTaGFyZWRQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1MTYyRUVBMDhFNkExRkUwMDc1NTZDRCAvKiBTaGFyZWRQdHIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2NTE2MkYw
MjA4RTZBMkQwMDA3NTU2Q0QgLyogU2hhcmVkUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTE2MkVFQTA4RTZBMUZFMDA3NTU2Q0QgLyogU2hhcmVk
UHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NjUyQzEwN0YwOERBN0IxRTAwMjA4ODdEIC8qIHByb3RlY3RlZF9yZWZlcmVuY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkMxMDdFMDhEQTdCMUUw
MDIwODg3RCAvKiBwcm90ZWN0ZWRfcmVmZXJlbmNlLmggKi87IH07CisJCTY1NDFCRDcyMDhFODBB
MTcwMDJDQkVFNyAvKiBUQ1BhZ2VNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1NDFCRDZFMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1BhZ2VNYXAuaCAq
LzsgfTsKKwkJNjU0MUJENzMwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3BpbkxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDFCRDZGMDhFODBBMTcw
MDJDQkVFNyAvKiBUQ1NwaW5Mb2NrLmggKi87IH07CisJCTY1NDFCRDc0MDhFODBBMTcwMDJDQkVF
NyAvKiBUQ1N5c3RlbUFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1NDFCRDcwMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmNw
cCAqLzsgfTsKKwkJNjU0MUJENzUwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3lzdGVtQWxsb2MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDFCRDcxMDhF
ODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmggKi87IH07CiAJCTY1NjIxRTZEMDg5RTg1
OTcwMDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjIxRTZCMDg5RTg1OTcwMDc2MEYzNSAvKiBwcm9wZXJ0
eV9zbG90LmNwcCAqLzsgfTsKIAkJNjU2MjFFNkUwODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5
X3Nsb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
NjIxRTZDMDg5RTg1OTcwMDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU2MjFFNkYwODlFODVEMzAwNzYw
RjM1IC8qIHByb3BlcnR5X3Nsb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjU2MjFFNkIwODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5X3Nsb3Qu
Y3BwICovOyB9OwogCQk2NTYyMUU3MDA4OUU4NUQzMDA3NjBGMzUgLyogcHJvcGVydHlfc2xvdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2MjFFNkMw
ODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5X3Nsb3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2NUVGMkRGNTA4QkVDQzgwMDAwODk0QkIgLyog
c2hhcmVkX3B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjVFRjJERjQwOEJFQ0M4MDAwMDg5NEJCIC8qIHNoYXJlZF9wdHIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2NUUyMTdCRDA4RTdFRUNDMDAy
M0U1RjYgLyogQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjVFMjE3QjcwOEU3RUVDQzAwMjNFNUY2IC8qIEFzc2VydGlvbnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2NUUyMTdCRTA4
RTdFRUNDMDAyM0U1RjYgLyogQXNzZXJ0aW9ucy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RTIxN0I4MDhFN0VFQ0MwMDIzRTVGNiAvKiBBc3NlcnRp
b25zLm1tICovOyB9OworCQk2NUUyMTdCRjA4RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1hbGxvYy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUUyMTdC
OTA4RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1hbGxvYy5jcHAgKi87IH07CisJCTY1RTIxN0MwMDhF
N0VFQ0MwMDIzRTVGNiAvKiBGYXN0TWFsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NUUyMTdCQTA4RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1hbGxv
Yy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1
RUYyREY4MDhCRUNDOEEwMDA4OTRCQiAvKiBzaGFyZWRfcHRyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUVGMkRGNDA4QkVDQzgwMDAwODk0QkIgLyog
c2hhcmVkX3B0ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTkzMDc1NEMwMDhCMEY2ODAwMEFCMzA1NiAvKiBwY3JlX2NvbXBpbGUuYyBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDc1NEJGMDhCMEY2ODAw
MEFCMzA1NiAvKiBwY3JlX2NvbXBpbGUuYyAqLzsgfTsKIAkJOTMwNzU0QzEwOEIwRjY4MDAwQUIz
MDU2IC8qIHBjcmVfY29tcGlsZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTMwNzU0QkYwOEIwRjY4MDAwQUIzMDU2IC8qIHBjcmVfY29tcGlsZS5jICov
OyB9OwpAQCAtMTExLDcgKzEyMCw2IEBACiAJCTkzMkY1QjhDMDgyMkExQzcwMDczNjk3NSAvKiBu
cGFwaS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFD
QTNCNEYwNkNDMjE2NjAwNTYwMEUzIC8qIG5wYXBpLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMyRjVCOEQwODIyQTFDNzAwNzM2OTc1IC8qIG5w
cnVudGltZV9wcml2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MURGRjJDOTA2Q0MzNkY2MDA2RjFFQ0MgLyogbnBydW50aW1lX3ByaXYuaCAqLzsgfTsK
IAkJOTMyRjVCOEUwODIyQTFDNzAwNzM2OTc1IC8qIG5wcnVudGltZV9pbXBsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEFCRjFERTA3MEI2MjhDMDBB
M0FDMDUgLyogbnBydW50aW1lX2ltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk5MzJGNUI4RjA4MjJBMUM3MDA3MzY5NzUgLyogZmFzdF9tYWxs
b2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MUJE
Qzc4MDgwRjEwQ0MwMEYxMDg1NiAvKiBmYXN0X21hbGxvYy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMkY1QjkyMDgyMkExQzcwMDczNjk3NSAv
KiBhcnJheV9vYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjY5MkE4NEQwMjU1NTk3RDAxRkY2MEY3IC8qIGFycmF5X29iamVjdC5jcHAgKi87
IH07CiAJCTkzMkY1QjkzMDgyMkExQzcwMDczNjk3NSAvKiBib29sX29iamVjdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg1MDAyNTU1OTdE
MDFGRjYwRjcgLyogYm9vbF9vYmplY3QuY3BwICovOyB9OwogCQk5MzJGNUI5NDA4MjJBMUM3MDA3
MzY5NzUgLyogY29sbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY2OTJBODUyMDI1NTU5N0QwMUZGNjBGNyAvKiBjb2xsZWN0b3IuY3BwICov
OyB9OwpAQCAtMTcwLDcgKzE3OCw2IEBACiAJCTkzMkY1QkNFMDgyMkExQzcwMDczNjk3NSAvKiBX
ZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTg2M0ZDNDA2NTQyRDMxMDBFOUU4REQgLyogV2ViU2NyaXB0T2JqZWN0Lm1tICov
OyB9OwogCQk5MzJGNUJDRjA4MjJBMUM3MDA3MzY5NzUgLyogam5pX29iamMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdFRjM3MzA2RDY5NTkzMDAw
N0MxQkEgLyogam5pX29iamMubW0gKi87IH07CiAJCTkzMkY1QkQwMDgyMkExQzcwMDczNjk3NSAv
KiBzb2Z0bGlua2luZy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ0MkEzNzYwNzQxNzVDMjAwMEFFMkVEIC8qIHNvZnRsaW5raW5nLmMgKi87IH07Ci0J
CTkzMkY1QkQxMDgyMkExQzcwMDczNjk3NSAvKiBmYXN0X21hbGxvYy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTFCREM3NzA4MEYxMENDMDBGMTA4
NTYgLyogZmFzdF9tYWxsb2MuY3BwICovOyB9OwogCQk5MzJGNUJEMzA4MjJBMUM3MDA3MzY5NzUg
LyogQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2MEE0Q0YwNEIzQjNFNzAwOEFFOTUyIC8qIENvcmVGb3Vu
ZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKIAkJOTMyRjVCRDQwODIyQTFDNzAwNzM2OTc1IC8qIENv
cmVTZXJ2aWNlcy5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NTYwQTYzRDA0QjNCNjlGMDA4QUU5NTIgLyogQ29yZVNlcnZpY2VzLmZy
YW1ld29yayAqLzsgfTsKIAkJOTMyRjVCRDUwODIyQTFDNzAwNzM2OTc1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwpAQCAtMjcxLDcgKzI3OCw2IEBACiAJCUE4NUQ4MjNCMDg3QjI4MjIwMDZBOTE3MiAvKiBucGFw
aS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDQTNC
NEYwNkNDMjE2NjAwNTYwMEUzIC8qIG5wYXBpLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTg1RDgyM0MwODdCMjgyMjAwNkE5MTcyIC8qIG5wcnVu
dGltZV9wcml2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MURGRjJDOTA2Q0MzNkY2MDA2RjFFQ0MgLyogbnBydW50aW1lX3ByaXYuaCAqLzsgfTsKIAkJ
QTg1RDgyM0QwODdCMjgyMjAwNkE5MTcyIC8qIG5wcnVudGltZV9pbXBsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEFCRjFERTA3MEI2MjhDMDBBM0FD
MDUgLyogbnBydW50aW1lX2ltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQlBODVEODIzRTA4N0IyODIyMDA2QTkxNzIgLyogZmFzdF9tYWxsb2Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MUJEQzc4
MDgwRjEwQ0MwMEYxMDg1NiAvKiBmYXN0X21hbGxvYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4NUQ4MjNGMDg3QjI4MjIwMDZBOTE3MiAvKiBj
cmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY2OTJBODU0MDI1NTU5N0QwMUZGNjBGNyAvKiBjcmVhdGVfaGFzaF90YWJsZSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBODVEODI0MTA4
N0IyODIyMDA2QTkxNzIgLyogYXJyYXlfb2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2OTJBODREMDI1NTU5N0QwMUZGNjBGNyAvKiBhcnJh
eV9vYmplY3QuY3BwICovOyB9OwogCQlBODVEODI0MjA4N0IyODIyMDA2QTkxNzIgLyogYm9vbF9v
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjY5MkE4NTAwMjU1NTk3RDAxRkY2MEY3IC8qIGJvb2xfb2JqZWN0LmNwcCAqLzsgfTsKQEAgLTMz
Miw3ICszMzgsNiBAQAogCQlBODVEODI3RDA4N0IyODIyMDA2QTkxNzIgLyogV2ViU2NyaXB0T2Jq
ZWN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4
NjNGQzQwNjU0MkQzMTAwRTlFOEREIC8qIFdlYlNjcmlwdE9iamVjdC5tbSAqLzsgfTsKIAkJQTg1
RDgyN0UwODdCMjgyMjAwNkE5MTcyIC8qIGpuaV9vYmpjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3RUYzNzMwNkQ2OTU5MzAwMDdDMUJBIC8qIGpu
aV9vYmpjLm1tICovOyB9OwogCQlBODVEODI3RjA4N0IyODIyMDA2QTkxNzIgLyogc29mdGxpbmtp
bmcuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NDJB
Mzc2MDc0MTc1QzIwMDBBRTJFRCAvKiBzb2Z0bGlua2luZy5jICovOyB9OwotCQlBODVEODI4MDA4
N0IyODIyMDA2QTkxNzIgLyogZmFzdF9tYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxQkRDNzcwODBGMTBDQzAwRjEwODU2IC8qIGZhc3Rf
bWFsbG9jLmNwcCAqLzsgfTsKIAkJQTg1RDgyODIwODdCMjgyMjAwNkE5MTcyIC8qIENvcmVGb3Vu
ZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1NjBBNENGMDRCM0IzRTcwMDhBRTk1MiAvKiBDb3JlRm91bmRhdGlvbi5mcmFt
ZXdvcmsgKi87IH07CiAJCUE4NUQ4MjgzMDg3QjI4MjIwMDZBOTE3MiAvKiBDb3JlU2VydmljZXMu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjU2MEE2M0QwNEIzQjY5RjAwOEFFOTUyIC8qIENvcmVTZXJ2aWNlcy5mcmFtZXdvcmsgKi87
IH07CiAJCUE4NUQ4Mjg0MDg3QjI4MjIwMDZBOTE3MiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYx
MDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKQEAgLTQ3NCwx
NCArNDc5LDE3IEBACiAJCTUxRjBFQzk3MDVDODhEQzcwMEU2REYxQiAvKiBvYmpjX3V0aWxpdHku
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gb2JqY191dGlsaXR5
Lm1tOyBwYXRoID0gYmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHkubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTY1MEI2OEQ4MDYzOTAzM0YwMDlENDJERSAvKiBwcm90ZWN0ZWRfdmFs
dWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwcm90ZWN0ZWRf
dmFsdWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUwQjY4RDkwNjM5MDMz
RjAwOUQ0MkRFIC8qIHByb3RlY3RlZF92YWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHByb3RlY3RlZF92YWx1ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNjUxQkRDNzcwODBGMTBDQzAwRjEwODU2IC8qIGZhc3RfbWFsbG9jLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBmYXN0X21hbGxvYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTY1MUJEQzc4MDgwRjEwQ0MwMEYxMDg1NiAvKiBmYXN0X21hbGxv
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmFzdF9tYWxsb2MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjUxNjJFRUEwOEU2QTFGRTAwNzU1NkNEIC8qIFNo
YXJlZFB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVkUHRyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MUY2NDEyMDM5RDVCNUYwMDc4Mzk1QyAv
KiBkdG9hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkdG9hLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUxRjY0MTMwMzlENUI1RjAwNzgzOTVD
IC8qIGR0b2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGR0b2EuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUyQzEwN0UwOERBN0IxRTAwMjA4ODdEIC8qIHBy
b3RlY3RlZF9yZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBy
b3RlY3RlZF9yZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU0MTcy
MEUwMzlFMDhCOTAwNThCRkVCIC8qIGRmdGFibGVzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
LmM7IG5hbWUgPSBkZnRhYmxlcy5jOyBwYXRoID0gcGNyZS9kZnRhYmxlcy5jOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NTQxNzIwRjAzOUUwOEI5MDA1OEJGRUIgLyogcGNyZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gcGNyZS5oOyBwYXRoID0gcGNyZS9wY3Jl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NDE3MjE3MDM5RTBCMjgwMDU4QkZF
QiAvKiBwY3JlLWNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gInBj
cmUtY29uZmlnLmgiOyBwYXRoID0gInBjcmUvcGNyZS1jb25maWcuaCI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTY1NDFCRDZFMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1BhZ2VNYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRDUGFnZU1hcC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk2NTQxQkQ2RjA4RTgwQTE3MDAyQ0JFRTcgLyogVENTcGluTG9j
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVENTcGluTG9jay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2NTQxQkQ3MDA4RTgwQTE3MDAyQ0JFRTcgLyogVENT
eXN0ZW1BbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVENT
eXN0ZW1BbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1NDFCRDcxMDhF
ODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUQ1N5c3RlbUFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTY1NjBBNENGMDRCM0IzRTcwMDhBRTk1MiAvKiBDb3JlRm91bmRhdGlvbi5mcmFtZXdvcmsgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZy
YW1ld29yazsgbmFtZSA9IENvcmVGb3VuZGF0aW9uLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL0NvcmVGb3VuZGF0aW9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9
ICI8YWJzb2x1dGU+IjsgfTsKIAkJNjU2MEE2M0QwNEIzQjY5RjAwOEFFOTUyIC8qIENvcmVTZXJ2
aWNlcy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IENvcmVTZXJ2aWNlcy5mcmFtZXdvcms7
IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3Jr
OyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQk2NTYyMUU2QjA4OUU4NTk3MDA3NjBG
MzUgLyogcHJvcGVydHlfc2xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gcHJvcGVydHlfc2xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
ODksNiArNDk3LDExIEBACiAJCTY1QUIwMDQ4MDYyNjFDQkEwMDc2REU2MyAvKiBpbnRlcnByZXRl
cl9tYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVycHJl
dGVyX21hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1QUIwMDQ5MDYyNjFD
QkEwMDc2REU2MyAvKiBpbnRlcnByZXRlcl9tYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IGludGVycHJldGVyX21hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2NUMwMkZCQjA2Mzc0NjJBMDAzRTdFRTYgLyogcHJvdGVjdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gcHJvdGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk2NURFNjQ2RjA4RThDODhBMDA1RDAwMkEgLyogZmFzdF9tYWxsb2MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZhc3RfbWFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTY1RTIxN0I3MDhFN0VFQ0MwMDIzRTVGNiAvKiBBc3NlcnRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3NlcnRpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTY1RTIxN0I4MDhFN0VFQ0MwMDIzRTVGNiAvKiBBc3NlcnRpb25zLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFzc2VydGlvbnMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1RTIxN0I5MDhFN0VFQ0MwMDIzRTVGNiAv
KiBGYXN0TWFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
YXN0TWFsbG9jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjVFMjE3QkEwOEU3
RUVDQzAwMjNFNUY2IC8qIEZhc3RNYWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZhc3RNYWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVFRjJE
RjQwOEJFQ0M4MDAwMDg5NEJCIC8qIHNoYXJlZF9wdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IHNoYXJlZF9wdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzAwREExMTcwNjU5ODRDRTAwNzQ3QzBCIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaDsg
cGF0aCA9IGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MDRGRDM1MzA1Njk3RTZEMDAzREJFRDkgLyogYm9vbF9vYmpl
Y3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGJvb2xfb2JqZWN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NTEsNiArNjY0LDcgQEAKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNjU0MTcyMDAwMzlFMDFCQTAwNThCRkVCIC8q
IGtqcyAqLywKKwkJCQk2NTE2MkVGMTA4RTZBMjFDMDA3NTU2Q0QgLyoga3htbGNvcmUgKi8sCiAJ
CQkJNTE4NTZEOTUwNTYyRUU5QzAwOEI5RDgzIC8qIGJpbmRpbmdzICovLAogCQkJCTY1NDE3MjAz
MDM5RTAxRjkwMDU4QkZFQiAvKiBwY3JlICovLAogCQkJCTkzMkZDM0MyMDgyNEJCNzAwMDVCM0M3
NSAvKiBSZXNvdXJjZXMgKi8sCkBAIC04MTEsNiArODI1LDIyIEBACiAJCQluYW1lID0gYmluZGlu
Z3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk2NTE2MkVGMTA4RTZBMjFD
MDA3NTU2Q0QgLyoga3htbGNvcmUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxk
cmVuID0gKAorCQkJCTY1NDFCRDZFMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1BhZ2VNYXAuaCAqLywK
KwkJCQk2NTQxQkQ2RjA4RTgwQTE3MDAyQ0JFRTcgLyogVENTcGluTG9jay5oICovLAorCQkJCTY1
NDFCRDcwMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmNwcCAqLywKKwkJCQk2NTQx
QkQ3MTA4RTgwQTE3MDAyQ0JFRTcgLyogVENTeXN0ZW1BbGxvYy5oICovLAorCQkJCTY1MTYyRUVB
MDhFNkExRkUwMDc1NTZDRCAvKiBTaGFyZWRQdHIuaCAqLywKKwkJCQk2NUUyMTdCNzA4RTdFRUND
MDAyM0U1RjYgLyogQXNzZXJ0aW9ucy5oICovLAorCQkJCTY1RTIxN0I4MDhFN0VFQ0MwMDIzRTVG
NiAvKiBBc3NlcnRpb25zLm1tICovLAorCQkJCTY1RTIxN0I5MDhFN0VFQ0MwMDIzRTVGNiAvKiBG
YXN0TWFsbG9jLmNwcCAqLywKKwkJCQk2NUUyMTdCQTA4RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1h
bGxvYy5oICovLAorCQkJKTsKKwkJCXBhdGggPSBreG1sY29yZTsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTY1NDE3MjAwMDM5RTAxQkEwMDU4QkZFQiAvKiBranMgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtODY0LDEyICs4OTQsMTEg
QEAKIAkJRjVDMjkwRTUwMjg0Rjk2MDAxODYzNUNBIC8qIE90aGVyIFNvdXJjZXMgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTY1MUJEQzc3MDgwRjEwQ0Mw
MEYxMDg1NiAvKiBmYXN0X21hbGxvYy5jcHAgKi8sCi0JCQkJNjUxQkRDNzgwODBGMTBDQzAwRjEw
ODU2IC8qIGZhc3RfbWFsbG9jLmggKi8sCiAJCQkJNDVFMTJEODgwNkE0OUIwRjAwRTlERjg0IC8q
IHRlc3RranMuY3BwICovLAogCQkJCUY2OTJBODU0MDI1NTU5N0QwMUZGNjBGNyAvKiBjcmVhdGVf
aGFzaF90YWJsZSAqLywKIAkJCQk5M0YxOTgxQTA4MjQ1QUFFMDAxRTlBQkMgLyoga2V5d29yZHMu
dGFibGUgKi8sCiAJCQkJOTMzQTM0OTkwMzhBRTdDNjAwODYzNUNFIC8qIGdyYW1tYXIueSAqLywK
KwkJCQk2NURFNjQ2RjA4RThDODhBMDA1RDAwMkEgLyogZmFzdF9tYWxsb2MuaCAqLywKIAkJCQlG
NjkyQTg2NTAyNTU1OTdEMDFGRjYwRjcgLyogbGV4ZXIuY3BwICovLAogCQkJCUY2OTJBODY2MDI1
NTU5N0QwMUZGNjBGNyAvKiBsZXhlci5oICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBG
NyAvKiBjb25maWcuaCAqLywKQEAgLTk1Niw3ICs5ODUsNiBAQAogCQkJCTkzMkY1QjhDMDgyMkEx
QzcwMDczNjk3NSAvKiBucGFwaS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMyRjVCOEQwODIyQTFD
NzAwNzM2OTc1IC8qIG5wcnVudGltZV9wcml2LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzJGNUI4
RTA4MjJBMUM3MDA3MzY5NzUgLyogbnBydW50aW1lX2ltcGwuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTkzMkY1QjhGMDgyMkExQzcwMDczNjk3NSAvKiBmYXN0X21hbGxvYy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTMyRkMxMUQwODI0QTZBMzAwNUIzQzc1IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjU2MjFFNkUwODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5X3Nsb3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzRTI2QkU2MDhCMTUxNzEwMEY4NTIyNiAvKiBwY3JlX2lu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTk2NCw4ICs5OTIsMTMgQEAKIAkJCQk5M0UyNkJG
RTA4QjE1MUQ0MDBGODUyMjYgLyogdWNwaW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
RTI2QzEzMDhCMTUyM0QwMEY4NTIyNiAvKiB1Y3B0YWJsZS5jIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNFMjZDQ0YwOEIyOTIxOTAwRjg1MjI2IC8qIHNvZnRsaW5raW5nLmggaW4gSGVhZGVycyAqLywK
LQkJCQk2NUVGMkRGNTA4QkVDQzgwMDAwODk0QkIgLyogc2hhcmVkX3B0ci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNjUyQzEwN0YwOERBN0IxRTAwMjA4ODdEIC8qIHByb3RlY3RlZF9yZWZlcmVuY2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTY1MTYyRUVCMDhFNkExRkUwMDc1NTZDRCAvKiBTaGFyZWRQ
dHIuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1RTIxN0JEMDhFN0VFQ0MwMDIzRTVGNiAvKiBBc3Nl
cnRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQk2NUUyMTdDMDA4RTdFRUNDMDAyM0U1RjYgLyog
RmFzdE1hbGxvYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjU0MUJENzIwOEU4MEExNzAwMkNCRUU3
IC8qIFRDUGFnZU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjU0MUJENzMwOEU4MEExNzAwMkNC
RUU3IC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTY1NDFCRDc1MDhFODBBMTcw
MDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTk3Myw2ICsxMDA2
LDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTY1MTYyRjAyMDhFNkEyRDAwMDc1NTZD
RCAvKiBTaGFyZWRQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NUQ4MUY4MDg3QjI4MjIwMDZB
OTE3MiAvKiBhcnJheV9vYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NUQ4MUY5MDg3QjI4
MjIwMDZBOTE3MiAvKiBjb2xsZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NUQ4MUZBMDg3
QjI4MjIwMDZBOTE3MiAvKiBkYXRlX29iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDQyLDcg
KzEwNzYsNiBAQAogCQkJCUE4NUQ4MjNCMDg3QjI4MjIwMDZBOTE3MiAvKiBucGFwaS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTg1RDgyM0MwODdCMjgyMjAwNkE5MTcyIC8qIG5wcnVudGltZV9wcml2
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODVEODIzRDA4N0IyODIyMDA2QTkxNzIgLyogbnBydW50
aW1lX2ltcGwuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4NUQ4MjNFMDg3QjI4MjIwMDZBOTE3MiAv
KiBmYXN0X21hbGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2MjFFNzAwODlFODVEMzAwNzYw
RjM1IC8qIHByb3BlcnR5X3Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NUQ4MjNGMDg3QjI4
MjIwMDZBOTE3MiAvKiBjcmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovLAogCQkJCTkzRTI2
QkU3MDhCMTUxNzEwMEY4NTIyNiAvKiBwY3JlX2ludGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAg
LTE1OTYsNyArMTYyOSw2IEBACiAJCQkJOTMyRjVCQ0UwODIyQTFDNzAwNzM2OTc1IC8qIFdlYlNj
cmlwdE9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzMkY1QkNGMDgyMkExQzcwMDczNjk3
NSAvKiBqbmlfb2JqYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzMkY1QkQwMDgyMkExQzcwMDcz
Njk3NSAvKiBzb2Z0bGlua2luZy5jIGluIFNvdXJjZXMgKi8sCi0JCQkJOTMyRjVCRDEwODIyQTFD
NzAwNzM2OTc1IC8qIGZhc3RfbWFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NjIxRTZE
MDg5RTg1OTcwMDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzMDc1NEMxMDhCMEY2ODAwMEFCMzA1NiAvKiBwY3JlX2NvbXBpbGUuYyBpbiBTb3VyY2VzICov
LAogCQkJCTkzMDc1NEQwMDhCMEY3NDYwMEFCMzA1NiAvKiBwY3JlX3RhYmxlcy5jIGluIFNvdXJj
ZXMgKi8sCkBAIC0xNjA5LDYgKzE2NDEsOSBAQAogCQkJCTkzRTI2QkQ0MDhCMTUxNDEwMEY4NTIy
NiAvKiBwY3JlX3hjbGFzcy5jIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNFMjZDRjcwOEIyOUExQzAw
Rjg1MjI2IC8qIHBjcmVfZ2V0LmMgaW4gU291cmNlcyAqLywKIAkJCQk5M0UyNkREQzA4QjJBNEY0
MDBGODUyMjYgLyogcGNyZV9wcmludGludC5jIGluIFNvdXJjZXMgKi8sCisJCQkJNjVFMjE3QkUw
OEU3RUVDQzAwMjNFNUY2IC8qIEFzc2VydGlvbnMubW0gaW4gU291cmNlcyAqLywKKwkJCQk2NUUy
MTdCRjA4RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1hbGxvYy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk2NTQxQkQ3NDA4RTgwQTE3MDAyQ0JFRTcgLyogVENTeXN0ZW1BbGxvYy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTE2OTEsNyArMTcyNiw2IEBACiAJCQkJQTg1RDgyN0QwODdCMjgyMjAwNkE5MTcy
IC8qIFdlYlNjcmlwdE9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4NUQ4MjdFMDg3QjI4
MjIwMDZBOTE3MiAvKiBqbmlfb2JqYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4NUQ4MjdGMDg3
QjI4MjIwMDZBOTE3MiAvKiBzb2Z0bGlua2luZy5jIGluIFNvdXJjZXMgKi8sCi0JCQkJQTg1RDgy
ODAwODdCMjgyMjAwNkE5MTcyIC8qIGZhc3RfbWFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTY1NjIxRTZGMDg5RTg1RDMwMDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzMDc1NEMwMDhCMEY2ODAwMEFCMzA1NiAvKiBwY3JlX2NvbXBpbGUuYyBpbiBT
b3VyY2VzICovLAogCQkJCTkzMDc1NENGMDhCMEY3NDYwMEFCMzA1NiAvKiBwY3JlX3RhYmxlcy5j
IGluIFNvdXJjZXMgKi8sCkBAIC0xODAwLDcgKzE4MzQsMTAgQEAKIAkJCQlHQ0NfVFJFQVRfV0FS
TklOR1NfQVNfRVJST1JTID0gWUVTOwogCQkJCUdDQ19XQVJOX0FCT1VUX01JU1NJTkdfUFJPVE9U
WVBFUyA9IFlFUzsKIAkJCQlHQ0NfV0FSTl9OT05fVklSVFVBTF9ERVNUUlVDVE9SID0gWUVTOwot
CQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSBpY3U7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9
ICgKKwkJCQkJaWN1LAorCQkJCQkuLAorCQkJCSk7CiAJCQkJSU5GT1BMSVNUX0ZJTEUgPSBJbmZv
LnBsaXN0OwogCQkJCUlOU1RBTExfUEFUSCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1dl
YktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzOwogCQkJCU1BQ09TWF9ERVBMT1lN
RU5UX1RBUkdFVCA9IDEwLjM7CkBAIC0xODUzLDcgKzE4OTAsMTAgQEAKIAkJCQlHQ0NfVFJFQVRf
V0FSTklOR1NfQVNfRVJST1JTID0gWUVTOwogCQkJCUdDQ19XQVJOX0FCT1VUX01JU1NJTkdfUFJP
VE9UWVBFUyA9IFlFUzsKIAkJCQlHQ0NfV0FSTl9OT05fVklSVFVBTF9ERVNUUlVDVE9SID0gWUVT
OwotCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSBpY3U7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRI
UyA9ICgKKwkJCQkJaWN1LAorCQkJCQkuLAorCQkJCSk7CiAJCQkJSU5GT1BMSVNUX0ZJTEUgPSBJ
bmZvLnBsaXN0OwogCQkJCUlOU1RBTExfUEFUSCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L1dlYktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzOwogCQkJCU1BQ09TWF9ERVBM
T1lNRU5UX1RBUkdFVCA9IDEwLjM7CkBAIC0xOTA2LDcgKzE5NDYsMTAgQEAKIAkJCQlHQ0NfVFJF
QVRfV0FSTklOR1NfQVNfRVJST1JTID0gWUVTOwogCQkJCUdDQ19XQVJOX0FCT1VUX01JU1NJTkdf
UFJPVE9UWVBFUyA9IFlFUzsKIAkJCQlHQ0NfV0FSTl9OT05fVklSVFVBTF9ERVNUUlVDVE9SID0g
WUVTOwotCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSBpY3U7CisJCQkJSEVBREVSX1NFQVJDSF9Q
QVRIUyA9ICgKKwkJCQkJaWN1LAorCQkJCQkuLAorCQkJCSk7CiAJCQkJSU5GT1BMSVNUX0ZJTEUg
PSBJbmZvLnBsaXN0OwogCQkJCUlOU1RBTExfUEFUSCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdv
cmtzL1dlYktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzOwogCQkJCU1BQ09TWF9E
RVBMT1lNRU5UX1RBUkdFVCA9IDEwLjM7CkBAIC0xOTU5LDcgKzIwMDIsMTAgQEAKIAkJCQlHQ0Nf
VFJFQVRfV0FSTklOR1NfQVNfRVJST1JTID0gWUVTOwogCQkJCUdDQ19XQVJOX0FCT1VUX01JU1NJ
TkdfUFJPVE9UWVBFUyA9IFlFUzsKIAkJCQlHQ0NfV0FSTl9OT05fVklSVFVBTF9ERVNUUlVDVE9S
ID0gWUVTOwotCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSBpY3U7CisJCQkJSEVBREVSX1NFQVJD
SF9QQVRIUyA9ICgKKwkJCQkJaWN1LAorCQkJCQkuLAorCQkJCSk7CiAJCQkJSU5GT1BMSVNUX0ZJ
TEUgPSBJbmZvLnBsaXN0OwogCQkJCUlOU1RBTExfUEFUSCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL1dlYktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzOwogCQkJCU9USEVS
X0NGTEFHUyA9ICIiOwpAQCAtMjIwOCw2ICsyMjU0LDEwIEBACiAJCQkJR0NDX0dFTkVSQVRFX0RF
QlVHR0lOR19TWU1CT0xTID0gWUVTOwogCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOwog
CQkJCUdDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVM7CisJCQkJSEVBREVSX1NFQVJD
SF9QQVRIUyA9ICgKKwkJCQkJIi1JIiwKKwkJCQkJLiwKKwkJCQkpOwogCQkJCU1BQ09TWF9ERVBM
T1lNRU5UX1RBUkdFVCA9IDEwLjM7CiAJCQkJUFJFQklORElORyA9IE5POwogCQkJCVBST0RVQ1Rf
TkFNRSA9IHRlc3RranM7CkBAIC0yMjM1LDYgKzIyODUsMTAgQEAKIAkJCQlHQ0NfRU5BQkxFX0NQ
UF9FWENFUFRJT05TID0gTk87CiAJCQkJR0NDX0VOQUJMRV9DUFBfUlRUSSA9IE5POwogCQkJCUdD
Q19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVM7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRI
UyA9ICgKKwkJCQkJIi1JIiwKKwkJCQkJLiwKKwkJCQkpOwogCQkJCU1BQ09TWF9ERVBMT1lNRU5U
X1RBUkdFVCA9IDEwLjM7CiAJCQkJUFJFQklORElORyA9IE5POwogCQkJCVBST0RVQ1RfTkFNRSA9
IHRlc3RranM7CkBAIC0yMjYzLDYgKzIzMTcsMTAgQEAKIAkJCQlHQ0NfRU5BQkxFX0NQUF9SVFRJ
ID0gTk87CiAJCQkJR0NDX0dFTkVSQVRFX0RFQlVHR0lOR19TWU1CT0xTID0gWUVTOwogCQkJCUdD
Q19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVM7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRI
UyA9ICgKKwkJCQkJIi1JIiwKKwkJCQkJLiwKKwkJCQkpOwogCQkJCU1BQ09TWF9ERVBMT1lNRU5U
X1RBUkdFVCA9IDEwLjM7CiAJCQkJUFJFQklORElORyA9IE5POwogCQkJCVBST0RVQ1RfTkFNRSA9
IHRlc3RranM7CkBAIC0yMjkwLDYgKzIzNDgsMTAgQEAKIAkJCQlHQ0NfRU5BQkxFX0NQUF9FWENF
UFRJT05TID0gTk87CiAJCQkJR0NDX0VOQUJMRV9DUFBfUlRUSSA9IE5POwogCQkJCUdDQ19UUkVB
VF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVM7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgK
KwkJCQkJIi1JIiwKKwkJCQkJLiwKKwkJCQkpOwogCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RranM7
CiAJCQkJV0FSTklOR19DRkxBR1MgPSAoCiAJCQkJCSItV2FsbCIsCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ranMvY29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2
YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDUK
ZGlmZiAtcCAtdSAtcjEuNDUgSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAKLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCTQgU2VwIDIwMDUgMDY6MjE6NTQgLTAwMDAJ
MS40NQorKysgSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAJMjcgU2VwIDIwMDUgMDg6
NDQ6MzkgLTAwMDAKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2luY2x1ZGUgImNvbGxlY3Rvci5oIgog
Ci0jaW5jbHVkZSAiZmFzdF9tYWxsb2MuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9GYXN0TWFsbG9j
Lmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJsaXN0LmgiCiAjaW5jbHVkZSAi
dmFsdWUuaCIKQEAgLTExOCwxMCArMTE4LDEwIEBAIHZvaWQqIENvbGxlY3Rvcjo6YWxsb2NhdGUo
c2l6ZV90IHMpCiAgICAgaWYgKHVzZWRPdmVyc2l6ZUNlbGxzID09IG51bU92ZXJzaXplQ2VsbHMp
IHsKICAgICAgIG51bU92ZXJzaXplQ2VsbHMgPSBtYXgoTUlOX0FSUkFZX1NJWkUsIG51bU92ZXJz
aXplQ2VsbHMgKiBHUk9XVEhfRkFDVE9SKTsKICAgICAgIGhlYXAubnVtT3ZlcnNpemVDZWxscyA9
IG51bU92ZXJzaXplQ2VsbHM7Ci0gICAgICBoZWFwLm92ZXJzaXplQ2VsbHMgPSBzdGF0aWNfY2Fz
dDxDb2xsZWN0b3JDZWxsICoqPihranNfZmFzdF9yZWFsbG9jKGhlYXAub3ZlcnNpemVDZWxscywg
bnVtT3ZlcnNpemVDZWxscyAqIHNpemVvZihDb2xsZWN0b3JDZWxsICopKSk7CisgICAgICBoZWFw
Lm92ZXJzaXplQ2VsbHMgPSBzdGF0aWNfY2FzdDxDb2xsZWN0b3JDZWxsICoqPihmYXN0UmVhbGxv
YyhoZWFwLm92ZXJzaXplQ2VsbHMsIG51bU92ZXJzaXplQ2VsbHMgKiBzaXplb2YoQ29sbGVjdG9y
Q2VsbCAqKSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkICpuZXdDZWxsID0ga2pzX2Zhc3RfbWFs
bG9jKHMpOworICAgIHZvaWQgKm5ld0NlbGwgPSBmYXN0TWFsbG9jKHMpOwogICAgIGhlYXAub3Zl
cnNpemVDZWxsc1t1c2VkT3ZlcnNpemVDZWxsc10gPSBzdGF0aWNfY2FzdDxDb2xsZWN0b3JDZWxs
ICo+KG5ld0NlbGwpOwogICAgIGhlYXAudXNlZE92ZXJzaXplQ2VsbHMgPSB1c2VkT3ZlcnNpemVD
ZWxscyArIDE7CiAgICAgaGVhcC5udW1MaXZlT2JqZWN0cyA9IG51bUxpdmVPYmplY3RzICsgMTsK
QEAgLTE1NiwxMCArMTU2LDEwIEBAIGFsbG9jYXRlTmV3QmxvY2s6CiAgICAgaWYgKHVzZWRCbG9j
a3MgPT0gbnVtQmxvY2tzKSB7CiAgICAgICBudW1CbG9ja3MgPSBtYXgoTUlOX0FSUkFZX1NJWkUs
IG51bUJsb2NrcyAqIEdST1dUSF9GQUNUT1IpOwogICAgICAgaGVhcC5udW1CbG9ja3MgPSBudW1C
bG9ja3M7Ci0gICAgICBoZWFwLmJsb2NrcyA9IHN0YXRpY19jYXN0PENvbGxlY3RvckJsb2NrICoq
PihranNfZmFzdF9yZWFsbG9jKGhlYXAuYmxvY2tzLCBudW1CbG9ja3MgKiBzaXplb2YoQ29sbGVj
dG9yQmxvY2sgKikpKTsKKyAgICAgIGhlYXAuYmxvY2tzID0gc3RhdGljX2Nhc3Q8Q29sbGVjdG9y
QmxvY2sgKio+KGZhc3RSZWFsbG9jKGhlYXAuYmxvY2tzLCBudW1CbG9ja3MgKiBzaXplb2YoQ29s
bGVjdG9yQmxvY2sgKikpKTsKICAgICB9CiAKLSAgICB0YXJnZXRCbG9jayA9IHN0YXRpY19jYXN0
PENvbGxlY3RvckJsb2NrICo+KGtqc19mYXN0X2NhbGxvYygxLCBzaXplb2YoQ29sbGVjdG9yQmxv
Y2spKSk7CisgICAgdGFyZ2V0QmxvY2sgPSBzdGF0aWNfY2FzdDxDb2xsZWN0b3JCbG9jayAqPihm
YXN0Q2FsbG9jKDEsIHNpemVvZihDb2xsZWN0b3JCbG9jaykpKTsKICAgICB0YXJnZXRCbG9jay0+
ZnJlZUxpc3QgPSB0YXJnZXRCbG9jay0+Y2VsbHM7CiAgICAgdGFyZ2V0QmxvY2tVc2VkQ2VsbHMg
PSAwOwogICAgIGhlYXAuYmxvY2tzW3VzZWRCbG9ja3NdID0gdGFyZ2V0QmxvY2s7CkBAIC00NTQs
NyArNDU0LDcgQEAgYm9vbCBDb2xsZWN0b3I6OmNvbGxlY3QoKQogICAgICAgZW1wdHlCbG9ja3Mr
KzsKICAgICAgIGlmIChlbXB0eUJsb2NrcyA+IFNQQVJFX0VNUFRZX0JMT0NLUykgewogI2lmICFE
RUJVR19DT0xMRUNUT1IKLSAgICAgICAga2pzX2Zhc3RfZnJlZShjdXJCbG9jayk7CisgICAgICAg
IGZhc3RGcmVlKGN1ckJsb2NrKTsKICNlbmRpZgogICAgICAgICAvLyBzd2FwIHdpdGggdGhlIGxh
c3QgYmxvY2sgc28gd2UgY29tcGFjdCBhcyB3ZSBnbwogICAgICAgICBoZWFwLmJsb2Nrc1tibG9j
a10gPSBoZWFwLmJsb2Nrc1toZWFwLnVzZWRCbG9ja3MgLSAxXTsKQEAgLTQ2Myw3ICs0NjMsNyBA
QCBib29sIENvbGxlY3Rvcjo6Y29sbGVjdCgpCiAKICAgICAgICAgaWYgKGhlYXAubnVtQmxvY2tz
ID4gTUlOX0FSUkFZX1NJWkUgJiYgaGVhcC51c2VkQmxvY2tzIDwgaGVhcC5udW1CbG9ja3MgLyBM
T1dfV0FURVJfRkFDVE9SKSB7CiAgICAgICAgICAgaGVhcC5udW1CbG9ja3MgPSBoZWFwLm51bUJs
b2NrcyAvIEdST1dUSF9GQUNUT1I7IAotICAgICAgICAgIGhlYXAuYmxvY2tzID0gKENvbGxlY3Rv
ckJsb2NrICoqKWtqc19mYXN0X3JlYWxsb2MoaGVhcC5ibG9ja3MsIGhlYXAubnVtQmxvY2tzICog
c2l6ZW9mKENvbGxlY3RvckJsb2NrICopKTsKKyAgICAgICAgICBoZWFwLmJsb2NrcyA9IChDb2xs
ZWN0b3JCbG9jayAqKilmYXN0UmVhbGxvYyhoZWFwLmJsb2NrcywgaGVhcC5udW1CbG9ja3MgKiBz
aXplb2YoQ29sbGVjdG9yQmxvY2sgKikpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAt
NDgxLDcgKzQ4MSw3IEBAIGJvb2wgQ29sbGVjdG9yOjpjb2xsZWN0KCkKICNpZiBERUJVR19DT0xM
RUNUT1IKICAgICAgIGhlYXAub3ZlcnNpemVDZWxsc1tjZWxsXS0+dS5mcmVlQ2VsbC56ZXJvSWZG
cmVlID0gMDsKICNlbHNlCi0gICAgICBranNfZmFzdF9mcmVlKGltcCk7CisgICAgICBmYXN0RnJl
ZShpbXApOwogI2VuZGlmCiAKICAgICAgIC8vIHN3YXAgd2l0aCB0aGUgbGFzdCBvdmVyc2l6ZSBj
ZWxsIHNvIHdlIGNvbXBhY3QgYXMgd2UgZ28KQEAgLTQ5Miw3ICs0OTIsNyBAQCBib29sIENvbGxl
Y3Rvcjo6Y29sbGVjdCgpCiAKICAgICAgIGlmIChoZWFwLm51bU92ZXJzaXplQ2VsbHMgPiBNSU5f
QVJSQVlfU0laRSAmJiBoZWFwLnVzZWRPdmVyc2l6ZUNlbGxzIDwgaGVhcC5udW1PdmVyc2l6ZUNl
bGxzIC8gTE9XX1dBVEVSX0ZBQ1RPUikgewogICAgICAgICBoZWFwLm51bU92ZXJzaXplQ2VsbHMg
PSBoZWFwLm51bU92ZXJzaXplQ2VsbHMgLyBHUk9XVEhfRkFDVE9SOyAKLSAgICAgICAgaGVhcC5v
dmVyc2l6ZUNlbGxzID0gKENvbGxlY3RvckNlbGwgKiopa2pzX2Zhc3RfcmVhbGxvYyhoZWFwLm92
ZXJzaXplQ2VsbHMsIGhlYXAubnVtT3ZlcnNpemVDZWxscyAqIHNpemVvZihDb2xsZWN0b3JDZWxs
ICopKTsKKyAgICAgICAgaGVhcC5vdmVyc2l6ZUNlbGxzID0gKENvbGxlY3RvckNlbGwgKiopZmFz
dFJlYWxsb2MoaGVhcC5vdmVyc2l6ZUNlbGxzLCBoZWFwLm51bU92ZXJzaXplQ2VsbHMgKiBzaXpl
b2YoQ29sbGVjdG9yQ2VsbCAqKSk7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIGltcC0+
bV9tYXJrZWQgPSBmYWxzZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9jb25maWcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2NvbmZpZy5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEuOCBKYXZhU2NyaXB0Q29yZS9r
anMvY29uZmlnLmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9jb25maWcuaAk0IFNlcCAyMDA1IDAx
OjE4OjEwIC0wMDAwCTEuOAorKysgSmF2YVNjcmlwdENvcmUva2pzL2NvbmZpZy5oCTI3IFNlcCAy
MDA1IDA4OjQ0OjM5IC0wMDAwCkBAIC0xOSw2ICsxOSwxMCBAQAogI2RlZmluZSBIQVZFX0lDVSAx
CiAjZGVmaW5lIEhBVkVfUENSRVBPU0lYIDEKICNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCisjZGVm
aW5lIEhBVkVfU1RESU5UX0ggMQorCisjZGVmaW5lIEhBVkVfTU1BUCAxCisjZGVmaW5lIEhBVkVf
U0JSSyAxCiAKICNpZmRlZiBfX3BwY19fCiAjZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCkBAIC0y
NiwzICszMCw1IEBACiAKIC8qIGRlZmluZSB0byBkZWJ1ZyBnYXJiYWdlIGNvbGxlY3Rpb24gKi8K
ICN1bmRlZiBERUJVR19DT0xMRUNUT1IKKworI2RlZmluZSBLWENfQ0hBTkdFUyAxCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvZmFzdF9tYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGtq
cy9mYXN0X21hbGxvYy5jcHAKZGlmZiAtTiBKYXZhU2NyaXB0Q29yZS9ranMvZmFzdF9tYWxsb2Mu
Y3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZmFzdF9tYWxsb2MuY3BwCTE5IFNlcCAyMDA1IDA2
OjU3OjI3IC0wMDAwCTEuNgorKysgSmF2YVNjcmlwdENvcmUva2pzL2Zhc3RfbWFsbG9jLmNwcAkx
IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDU2MTMgKzAsMCBAQAotLyoKLSAgVGhpcyBp
cyBhIHZlcnNpb24gKGFrYSBkbG1hbGxvYykgb2YgbWFsbG9jL2ZyZWUvcmVhbGxvYyB3cml0dGVu
IGJ5Ci0gIERvdWcgTGVhIGFuZCByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbi4gIFVzZSwg
bW9kaWZ5LCBhbmQKLSAgcmVkaXN0cmlidXRlIHRoaXMgY29kZSB3aXRob3V0IHBlcm1pc3Npb24g
b3IgYWNrbm93bGVkZ2VtZW50IGluIGFueQotICB3YXkgeW91IHdpc2guICBTZW5kIHF1ZXN0aW9u
cywgY29tbWVudHMsIGNvbXBsYWludHMsIHBlcmZvcm1hbmNlCi0gIGRhdGEsIGV0YyB0byBkbEBj
cy5vc3dlZ28uZWR1Ci0KLSogVkVSU0lPTiAyLjcuMiBTYXQgQXVnIDE3IDA5OjA3OjMwIDIwMDIg
IERvdWcgTGVhICAoZGwgYXQgZ2VlKQotCi0gICBOb3RlOiBUaGVyZSBtYXkgYmUgYW4gdXBkYXRl
ZCB2ZXJzaW9uIG9mIHRoaXMgbWFsbG9jIG9idGFpbmFibGUgYXQKLSAgICAgICAgICAgZnRwOi8v
Z2VlLmNzLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLmMKLSAgICAgICAgIENoZWNrIGJlZm9y
ZSBpbnN0YWxsaW5nIQotCi0qIFF1aWNrc3RhcnQKLQotICBUaGlzIGxpYnJhcnkgaXMgYWxsIGlu
IG9uZSBmaWxlIHRvIHNpbXBsaWZ5IHRoZSBtb3N0IGNvbW1vbiB1c2FnZToKLSAgZnRwIGl0LCBj
b21waWxlIGl0ICgtTyksIGFuZCBsaW5rIGl0IGludG8gYW5vdGhlciBwcm9ncmFtLiBBbGwKLSAg
b2YgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIGRlZmF1bHQgdG8gcmVhc29uYWJsZSB2YWx1ZXMg
Zm9yIHVzZSBvbgotICBtb3N0IHVuaXggcGxhdGZvcm1zLiBDb21waWxlIC1EV0lOMzIgZm9yIHJl
YXNvbmFibGUgZGVmYXVsdHMgb24gd2luZG93cy4KLSAgWW91IG1pZ2h0IGxhdGVyIHdhbnQgdG8g
c3RlcCB0aHJvdWdoIHZhcmlvdXMgY29tcGlsZS10aW1lIGFuZCBkeW5hbWljCi0gIHR1bmluZyBv
cHRpb25zLgotCi0gIEZvciBjb252ZW5pZW5jZSwgYW4gaW5jbHVkZSBmaWxlIGZvciBjb2RlIHVz
aW5nIHRoaXMgbWFsbG9jIGlzIGF0OgotICAgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIv
bWlzYy9tYWxsb2MtMi43LjEuaAotICBZb3UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyAuaCBmaWxl
IHVubGVzcyB5b3UgY2FsbCBmdW5jdGlvbnMgbm90Ci0gIGRlZmluZWQgaW4geW91ciBzeXN0ZW0g
aW5jbHVkZSBmaWxlcy4gIFRoZSAuaCBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlCi0gIGV4Y2VycHRz
IGZyb20gdGhpcyBmaWxlIG5lZWRlZCBmb3IgdXNpbmcgdGhpcyBtYWxsb2Mgb24gQU5TSSBDL0Mr
KwotICBzeXN0ZW1zLCBzbyBsb25nIGFzIHlvdSBoYXZlbid0IGNoYW5nZWQgY29tcGlsZS10aW1l
IG9wdGlvbnMgYWJvdXQKLSAgbmFtaW5nIGFuZCB0dW5pbmcgcGFyYW1ldGVycy4gIElmIHlvdSBk
bywgdGhlbiB5b3UgY2FuIGNyZWF0ZSB5b3VyCi0gIG93biBtYWxsb2MuaCB0aGF0IGRvZXMgaW5j
bHVkZSBhbGwgc2V0dGluZ3MgYnkgY3V0dGluZyBhdCB0aGUgcG9pbnQKLSAgaW5kaWNhdGVkIGJl
bG93LgotCi0qIFdoeSB1c2UgdGhpcyBtYWxsb2M/Ci0KLSAgVGhpcyBpcyBub3QgdGhlIGZhc3Rl
c3QsIG1vc3Qgc3BhY2UtY29uc2VydmluZywgbW9zdCBwb3J0YWJsZSwgb3IKLSAgbW9zdCB0dW5h
YmxlIG1hbGxvYyBldmVyIHdyaXR0ZW4uIEhvd2V2ZXIgaXQgaXMgYW1vbmcgdGhlIGZhc3Rlc3QK
LSAgd2hpbGUgYWxzbyBiZWluZyBhbW9uZyB0aGUgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBwb3J0
YWJsZSBhbmQgdHVuYWJsZS4KLSAgQ29uc2lzdGVudCBiYWxhbmNlIGFjcm9zcyB0aGVzZSBmYWN0
b3JzIHJlc3VsdHMgaW4gYSBnb29kIGdlbmVyYWwtcHVycG9zZQotICBhbGxvY2F0b3IgZm9yIG1h
bGxvYy1pbnRlbnNpdmUgcHJvZ3JhbXMuCi0KLSAgVGhlIG1haW4gcHJvcGVydGllcyBvZiB0aGUg
YWxnb3JpdGhtcyBhcmU6Ci0gICogRm9yIGxhcmdlICg+PSA1MTIgYnl0ZXMpIHJlcXVlc3RzLCBp
dCBpcyBhIHB1cmUgYmVzdC1maXQgYWxsb2NhdG9yLAotICAgIHdpdGggdGllcyBub3JtYWxseSBk
ZWNpZGVkIHZpYSBGSUZPIChpLmUuIGxlYXN0IHJlY2VudGx5IHVzZWQpLgotICAqIEZvciBzbWFs
bCAoPD0gNjQgYnl0ZXMgYnkgZGVmYXVsdCkgcmVxdWVzdHMsIGl0IGlzIGEgY2FjaGluZwotICAg
IGFsbG9jYXRvciwgdGhhdCBtYWludGFpbnMgcG9vbHMgb2YgcXVpY2tseSByZWN5Y2xlZCBjaHVu
a3MuCi0gICogSW4gYmV0d2VlbiwgYW5kIGZvciBjb21iaW5hdGlvbnMgb2YgbGFyZ2UgYW5kIHNt
YWxsIHJlcXVlc3RzLCBpdCBkb2VzCi0gICAgdGhlIGJlc3QgaXQgY2FuIHRyeWluZyB0byBtZWV0
IGJvdGggZ29hbHMgYXQgb25jZS4KLSAgKiBGb3IgdmVyeSBsYXJnZSByZXF1ZXN0cyAoPj0gMTI4
S0IgYnkgZGVmYXVsdCksIGl0IHJlbGllcyBvbiBzeXN0ZW0KLSAgICBtZW1vcnkgbWFwcGluZyBm
YWNpbGl0aWVzLCBpZiBzdXBwb3J0ZWQuCi0KLSAgRm9yIGEgbG9uZ2VyIGJ1dCBzbGlnaHRseSBv
dXQgb2YgZGF0ZSBoaWdoLWxldmVsIGRlc2NyaXB0aW9uLCBzZWUKLSAgICAgaHR0cDovL2dlZS5j
cy5vc3dlZ28uZWR1L2RsL2h0bWwvbWFsbG9jLmh0bWwKLQotICBZb3UgbWF5IGFscmVhZHkgYnkg
ZGVmYXVsdCBiZSB1c2luZyBhIEMgbGlicmFyeSBjb250YWluaW5nIGEgbWFsbG9jCi0gIHRoYXQg
aXMgIGJhc2VkIG9uIHNvbWUgdmVyc2lvbiBvZiB0aGlzIG1hbGxvYyAoZm9yIGV4YW1wbGUgaW4K
LSAgbGludXgpLiBZb3UgbWlnaHQgc3RpbGwgd2FudCB0byB1c2UgdGhlIG9uZSBpbiB0aGlzIGZp
bGUgaW4gb3JkZXIgdG8KLSAgY3VzdG9taXplIHNldHRpbmdzIG9yIHRvIGF2b2lkIG92ZXJoZWFk
cyBhc3NvY2lhdGVkIHdpdGggbGlicmFyeQotICB2ZXJzaW9ucy4KLQotKiBDb250ZW50cywgZGVz
Y3JpYmVkIGluIG1vcmUgZGV0YWlsIGluICJkZXNjcmlwdGlvbiBvZiBwdWJsaWMgcm91dGluZXMi
IGJlbG93LgotCi0gIFN0YW5kYXJkIChBTlNJL1NWSUQvLi4uKSAgZnVuY3Rpb25zOgotICAgIG1h
bGxvYyhzaXplX3Qgbik7Ci0gICAgY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxl
bWVudF9zaXplKTsKLSAgICBmcmVlKFZvaWRfdCogcCk7Ci0gICAgcmVhbGxvYyhWb2lkX3QqIHAs
IHNpemVfdCBuKTsKLSAgICBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgbik7Ci0g
ICAgdmFsbG9jKHNpemVfdCBuKTsKLSAgICBtYWxsaW5mbygpCi0gICAgbWFsbG9wdChpbnQgcGFy
YW1ldGVyX251bWJlciwgaW50IHBhcmFtZXRlcl92YWx1ZSkKLQotICBBZGRpdGlvbmFsIGZ1bmN0
aW9uczoKLSAgICBpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBz
aXplLCBWb2lkX3QqIGNodW5rc1tdKTsKLSAgICBpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qg
bl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sIFZvaWRfdCogY2h1bmtzW10pOwotICAgIHB2YWxs
b2Moc2l6ZV90IG4pOwotICAgIGNmcmVlKFZvaWRfdCogcCk7Ci0gICAgbWFsbG9jX3RyaW0oc2l6
ZV90IHBhZCk7Ci0gICAgbWFsbG9jX3VzYWJsZV9zaXplKFZvaWRfdCogcCk7Ci0gICAgbWFsbG9j
X3N0YXRzKCk7Ci0KLSogVml0YWwgc3RhdGlzdGljczoKLQotICBTdXBwb3J0ZWQgcG9pbnRlciBy
ZXByZXNlbnRhdGlvbjogICAgICAgNCBvciA4IGJ5dGVzCi0gIFN1cHBvcnRlZCBzaXplX3QgIHJl
cHJlc2VudGF0aW9uOiAgICAgICA0IG9yIDggYnl0ZXMgCi0gICAgICAgTm90ZSB0aGF0IHNpemVf
dCBpcyBhbGxvd2VkIHRvIGJlIDQgYnl0ZXMgZXZlbiBpZiBwb2ludGVycyBhcmUgOC4KLSAgICAg
ICBZb3UgY2FuIGFkanVzdCB0aGlzIGJ5IGRlZmluaW5nIElOVEVSTkFMX1NJWkVfVAotCi0gIEFs
aWdubWVudDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICogc2l6ZW9mKHNpemVfdCkg
KGRlZmF1bHQpCi0gICAgICAgKGkuZS4sIDggYnl0ZSBhbGlnbm1lbnQgd2l0aCA0Ynl0ZSBzaXpl
X3QpLiBUaGlzIHN1ZmZpY2VzIGZvcgotICAgICAgIG5lYXJseSBhbGwgY3VycmVudCBtYWNoaW5l
cyBhbmQgQyBjb21waWxlcnMuIEhvd2V2ZXIsIHlvdSBjYW4KLSAgICAgICBkZWZpbmUgTUFMTE9D
X0FMSUdOTUVOVCB0byBiZSB3aWRlciB0aGFuIHRoaXMgaWYgbmVjZXNzYXJ5LgotCi0gIE1pbmlt
dW0gb3ZlcmhlYWQgcGVyIGFsbG9jYXRlZCBjaHVuazogICA0IG9yIDggYnl0ZXMKLSAgICAgICBF
YWNoIG1hbGxvY2VkIGNodW5rIGhhcyBhIGhpZGRlbiB3b3JkIG9mIG92ZXJoZWFkIGhvbGRpbmcg
c2l6ZQotICAgICAgIGFuZCBzdGF0dXMgaW5mb3JtYXRpb24uCi0KLSAgTWluaW11bSBhbGxvY2F0
ZWQgc2l6ZTogNC1ieXRlIHB0cnM6ICAxNiBieXRlcyAgICAoaW5jbHVkaW5nIDQgb3ZlcmhlYWQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDgtYnl0ZSBwdHJzOiAgMjQvMzIgYnl0ZXMgKGlu
Y2x1ZGluZywgNC84IG92ZXJoZWFkKQotCi0gICAgICAgV2hlbiBhIGNodW5rIGlzIGZyZWVkLCAx
MiAoZm9yIDRieXRlIHB0cnMpIG9yIDIwIChmb3IgOCBieXRlCi0gICAgICAgcHRycyBidXQgNCBi
eXRlIHNpemUpIG9yIDI0IChmb3IgOC84KSBhZGRpdGlvbmFsIGJ5dGVzIGFyZQotICAgICAgIG5l
ZWRlZDsgNCAoOCkgZm9yIGEgdHJhaWxpbmcgc2l6ZSBmaWVsZCBhbmQgOCAoMTYpIGJ5dGVzIGZv
cgotICAgICAgIGZyZWUgbGlzdCBwb2ludGVycy4gVGh1cywgdGhlIG1pbmltdW0gYWxsb2NhdGFi
bGUgc2l6ZSBpcwotICAgICAgIDE2LzI0LzMyIGJ5dGVzLgotCi0gICAgICAgRXZlbiBhIHJlcXVl
c3QgZm9yIHplcm8gYnl0ZXMgKGkuZS4sIG1hbGxvYygwKSkgcmV0dXJucyBhCi0gICAgICAgcG9p
bnRlciB0byBzb21ldGhpbmcgb2YgdGhlIG1pbmltdW0gYWxsb2NhdGFibGUgc2l6ZS4KLQotICAg
ICAgIFRoZSBtYXhpbXVtIG92ZXJoZWFkIHdhc3RhZ2UgKGkuZS4sIG51bWJlciBvZiBleHRyYSBi
eXRlcwotICAgICAgIGFsbG9jYXRlZCB0aGFuIHdlcmUgcmVxdWVzdGVkIGluIG1hbGxvYykgaXMg
bGVzcyB0aGFuIG9yIGVxdWFsCi0gICAgICAgdG8gdGhlIG1pbmltdW0gc2l6ZSwgZXhjZXB0IGZv
ciByZXF1ZXN0cyA+PSBtbWFwX3RocmVzaG9sZCB0aGF0Ci0gICAgICAgYXJlIHNlcnZpY2VkIHZp
YSBtbWFwKCksIHdoZXJlIHRoZSB3b3JzdCBjYXNlIHdhc3RhZ2UgaXMgMiAqCi0gICAgICAgc2l6
ZW9mKHNpemVfdCkgYnl0ZXMgcGx1cyB0aGUgcmVtYWluZGVyIGZyb20gYSBzeXN0ZW0gcGFnZSAo
dGhlCi0gICAgICAgbWluaW1hbCBtbWFwIHVuaXQpOyB0eXBpY2FsbHkgNDA5NiBvciA4MTkyIGJ5
dGVzLgotCi0gIE1heGltdW0gYWxsb2NhdGVkIHNpemU6ICA0LWJ5dGUgc2l6ZV90OiAyXjMyIG1p
bnVzIGFib3V0IHR3byBwYWdlcyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDgtYnl0ZSBz
aXplX3Q6IDJeNjQgbWludXMgYWJvdXQgdHdvIHBhZ2VzCi0KLSAgICAgICBJdCBpcyBhc3N1bWVk
IHRoYXQgKHBvc3NpYmx5IHNpZ25lZCkgc2l6ZV90IHZhbHVlcyBzdWZmaWNlIHRvCi0gICAgICAg
cmVwcmVzZW50IGNodW5rIHNpemVzLiBgUG9zc2libHkgc2lnbmVkJyBpcyBkdWUgdG8gdGhlIGZh
Y3QKLSAgICAgICB0aGF0IGBzaXplX3QnIG1heSBiZSBkZWZpbmVkIG9uIGEgc3lzdGVtIGFzIGVp
dGhlciBhIHNpZ25lZCBvcgotICAgICAgIGFuIHVuc2lnbmVkIHR5cGUuIFRoZSBJU08gQyBzdGFu
ZGFyZCBzYXlzIHRoYXQgaXQgbXVzdCBiZQotICAgICAgIHVuc2lnbmVkLCBidXQgYSBmZXcgc3lz
dGVtcyBhcmUga25vd24gbm90IHRvIGFkaGVyZSB0byB0aGlzLgotICAgICAgIEFkZGl0aW9uYWxs
eSwgZXZlbiB3aGVuIHNpemVfdCBpcyB1bnNpZ25lZCwgc2JyayAod2hpY2ggaXMgYnkKLSAgICAg
ICBkZWZhdWx0IHVzZWQgdG8gb2J0YWluIG1lbW9yeSBmcm9tIHN5c3RlbSkgYWNjZXB0cyBzaWdu
ZWQKLSAgICAgICBhcmd1bWVudHMsIGFuZCBtYXkgbm90IGJlIGFibGUgdG8gaGFuZGxlIHNpemVf
dC13aWRlIGFyZ3VtZW50cwotICAgICAgIHdpdGggbmVnYXRpdmUgc2lnbiBiaXQuICBHZW5lcmFs
bHksIHZhbHVlcyB0aGF0IHdvdWxkCi0gICAgICAgYXBwZWFyIGFzIG5lZ2F0aXZlIGFmdGVyIGFj
Y291bnRpbmcgZm9yIG92ZXJoZWFkIGFuZCBhbGlnbm1lbnQKLSAgICAgICBhcmUgc3VwcG9ydGVk
IG9ubHkgdmlhIG1tYXAoKSwgd2hpY2ggZG9lcyBub3QgaGF2ZSB0aGlzCi0gICAgICAgbGltaXRh
dGlvbi4KLQotICAgICAgIFJlcXVlc3RzIGZvciBzaXplcyBvdXRzaWRlIHRoZSBhbGxvd2VkIHJh
bmdlIHdpbGwgcGVyZm9ybSBhbiBvcHRpb25hbAotICAgICAgIGZhaWx1cmUgYWN0aW9uIGFuZCB0
aGVuIHJldHVybiBudWxsLiAoUmVxdWVzdHMgbWF5IGFsc28KLSAgICAgICBhbHNvIGZhaWwgYmVj
YXVzZSBhIHN5c3RlbSBpcyBvdXQgb2YgbWVtb3J5LikKLQotICBUaHJlYWQtc2FmZXR5OiBOT1Qg
dGhyZWFkLXNhZmUgdW5sZXNzIFVTRV9NQUxMT0NfTE9DSyBkZWZpbmVkCi0KLSAgICAgICBXaGVu
IFVTRV9NQUxMT0NfTE9DSyBpcyBkZWZpbmVkLCB3cmFwcGVycyBhcmUgY3JlYXRlZCB0bwotICAg
ICAgIHN1cnJvdW5kIGV2ZXJ5IHB1YmxpYyBjYWxsIHdpdGggZWl0aGVyIGEgcHRocmVhZCBtdXRl
eCBvcgotICAgICAgIGEgd2luMzIgc3BpbmxvY2sgKGRlcGVuZGluZyBvbiBXSU4zMikuIFRoaXMg
aXMgbm90Ci0gICAgICAgZXNwZWNpYWxseSBmYXN0LCBhbmQgY2FuIGJlIGEgbWFqb3IgYm90dGxl
bmVjay4KLSAgICAgICBJdCBpcyBkZXNpZ25lZCBvbmx5IHRvIHByb3ZpZGUgbWluaW1hbCBwcm90
ZWN0aW9uCi0gICAgICAgaW4gY29uY3VycmVudCBlbnZpcm9ubWVudHMsIGFuZCB0byBwcm92aWRl
IGEgYmFzaXMgZm9yCi0gICAgICAgZXh0ZW5zaW9ucy4gIElmIHlvdSBhcmUgdXNpbmcgbWFsbG9j
IGluIGEgY29uY3VycmVudCBwcm9ncmFtLAotICAgICAgIHlvdSB3b3VsZCBiZSBmYXIgYmV0dGVy
IG9mZiBvYnRhaW5pbmcgcHRtYWxsb2MsIHdoaWNoIGlzCi0gICAgICAgZGVyaXZlZCBmcm9tIGEg
dmVyc2lvbiBvZiB0aGlzIG1hbGxvYywgYW5kIGlzIHdlbGwtdHVuZWQgZm9yCi0gICAgICAgY29u
Y3VycmVudCBwcm9ncmFtcy4gKFNlZSBodHRwOi8vd3d3Lm1hbGxvYy5kZSkgTm90ZSB0aGF0Ci0g
ICAgICAgZXZlbiB3aGVuIFVTRV9NQUxMT0NfTE9DSyBpcyBkZWZpbmVkLCB5b3UgY2FuIGNhbiBn
dWFyYW50ZWUKLSAgICAgICBmdWxsIHRocmVhZC1zYWZldHkgb25seSBpZiBubyB0aHJlYWRzIGFj
cXVpcmUgbWVtb3J5IHRocm91Z2ggCi0gICAgICAgZGlyZWN0IGNhbGxzIHRvIE1PUkVDT1JFIG9y
IG90aGVyIHN5c3RlbS1sZXZlbCBhbGxvY2F0b3JzLgotCi0gIENvbXBsaWFuY2U6IEkgYmVsaWV2
ZSBpdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgMTk5NyBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9u
Ci0gICAgICAgKFNlZSBodHRwOi8vd3d3Lm9wZW5uYy5vcmcpLiBBbHNvIFNWSUQvWFBHLCBBTlNJ
IEMsIGFuZCBwcm9iYWJseSAKLSAgICAgICBvdGhlcnMgYXMgd2VsbC4KLQotKiBTeW5vcHNpcyBv
ZiBjb21waWxlLXRpbWUgb3B0aW9uczoKLQotICAgIFBlb3BsZSBoYXZlIHJlcG9ydGVkIHVzaW5n
IHByZXZpb3VzIHZlcnNpb25zIG9mIHRoaXMgbWFsbG9jIG9uIGFsbAotICAgIHZlcnNpb25zIG9m
IFVuaXgsIHNvbWV0aW1lcyBieSB0d2Vha2luZyBzb21lIG9mIHRoZSBkZWZpbmVzCi0gICAgYmVs
b3cuIEl0IGhhcyBiZWVuIHRlc3RlZCBtb3N0IGV4dGVuc2l2ZWx5IG9uIFNvbGFyaXMgYW5kCi0g
ICAgTGludXguIEl0IGlzIGFsc28gcmVwb3J0ZWQgdG8gd29yayBvbiBXSU4zMiBwbGF0Zm9ybXMu
Ci0gICAgUGVvcGxlIGFsc28gcmVwb3J0IHVzaW5nIGl0IGluIHN0YW5kLWFsb25lIGVtYmVkZGVk
IHN5c3RlbXMuCi0KLSAgICBUaGUgaW1wbGVtZW50YXRpb24gaXMgaW4gc3RyYWlnaHQsIGhhbmQt
dHVuZWQgQU5TSSBDLiAgSXQgaXMgbm90Ci0gICAgYXQgYWxsIG1vZHVsYXIuIChTb3JyeSEpICBJ
dCB1c2VzIGEgbG90IG9mIG1hY3Jvcy4gIFRvIGJlIGF0IGFsbAotICAgIHVzYWJsZSwgdGhpcyBj
b2RlIHNob3VsZCBiZSBjb21waWxlZCB1c2luZyBhbiBvcHRpbWl6aW5nIGNvbXBpbGVyCi0gICAg
KGZvciBleGFtcGxlIGdjYyAtTzMpIHRoYXQgY2FuIHNpbXBsaWZ5IGV4cHJlc3Npb25zIGFuZCBj
b250cm9sCi0gICAgcGF0aHMuIChGQVE6IHNvbWUgbWFjcm9zIGltcG9ydCB2YXJpYWJsZXMgYXMg
YXJndW1lbnRzIHJhdGhlciB0aGFuCi0gICAgZGVjbGFyZSBsb2NhbHMgYmVjYXVzZSBwZW9wbGUg
cmVwb3J0ZWQgdGhhdCBzb21lIGRlYnVnZ2VycwotICAgIG90aGVyd2lzZSBnZXQgY29uZnVzZWQu
KQotCi0gICAgT1BUSU9OICAgICAgICAgICAgICAgICAgICAgREVGQVVMVCBWQUxVRQotCi0gICAg
Q29tcGlsYXRpb24gRW52aXJvbm1lbnQgb3B0aW9uczoKLQotICAgIF9fU1REX0MgICAgICAgICAg
ICAgICAgICAgIGRlcml2ZWQgZnJvbSBDIGNvbXBpbGVyIGRlZmluZXMKLSAgICBXSU4zMiAgICAg
ICAgICAgICAgICAgICAgICBOT1QgZGVmaW5lZAotICAgIEhBVkVfTUVNQ1BZICAgICAgICAgICAg
ICAgIGRlZmluZWQKLSAgICBVU0VfTUVNQ1BZICAgICAgICAgICAgICAgICAxIGlmIEhBVkVfTUVN
Q1BZIGlzIGRlZmluZWQKLSAgICBIQVZFX01NQVAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGFz
IDEgCi0gICAgTU1BUF9DTEVBUlMgICAgICAgICAgICAgICAgMQotICAgIEhBVkVfTVJFTUFQICAg
ICAgICAgICAgICAgIDAgdW5sZXNzIGxpbnV4IGRlZmluZWQKLSAgICBtYWxsb2NfZ2V0cGFnZXNp
emUgICAgICAgICBkZXJpdmVkIGZyb20gc3lzdGVtICNpbmNsdWRlcywgb3IgNDA5NiBpZiBub3QK
LSAgICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICBOT1QgZGVmaW5lZAotICAgIExBQ0tTX1VO
SVNURF9IICAgICAgICAgICAgIE5PVCBkZWZpbmVkIHVubGVzcyBXSU4zMgotICAgIExBQ0tTX1NZ
U19QQVJBTV9IICAgICAgICAgIE5PVCBkZWZpbmVkIHVubGVzcyBXSU4zMgotICAgIExBQ0tTX1NZ
U19NTUFOX0ggICAgICAgICAgIE5PVCBkZWZpbmVkIHVubGVzcyBXSU4zMgotICAgIExBQ0tTX0ZD
TlRMX0ggICAgICAgICAgICAgIE5PVCBkZWZpbmVkCi0KLSAgICBDaGFuZ2luZyBkZWZhdWx0IHdv
cmQgc2l6ZXM6Ci0KLSAgICBJTlRFUk5BTF9TSVpFX1QgICAgICAgICAgICBzaXplX3QKLSAgICBN
QUxMT0NfQUxJR05NRU5UICAgICAgICAgICAyICogc2l6ZW9mKElOVEVSTkFMX1NJWkVfVCkKLSAg
ICBQVFJfVUlOVCAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nCi0gICAgQ0hVTktfU0la
RV9UICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZwotCi0gICAgQ29uZmlndXJhdGlvbiBhbmQg
ZnVuY3Rpb25hbGl0eSBvcHRpb25zOgotCi0gICAgVVNFX0RMX1BSRUZJWCAgICAgICAgICAgICAg
Tk9UIGRlZmluZWQKLSAgICBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVSUyBOT1QgZGVmaW5lZAot
ICAgIFVTRV9NQUxMT0NfTE9DSyAgICAgICAgICAgIE5PVCBkZWZpbmVkCi0gICAgREVCVUcgICAg
ICAgICAgICAgICAgICAgICAgTk9UIGRlZmluZWQKLSAgICBSRUFMTE9DX1pFUk9fQllURVNfRlJF
RVMgICBOT1QgZGVmaW5lZAotICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTiAgICAgIGVycm5vID0g
RU5PTUVNLCBpZiBfX1NURF9DIGRlZmluZWQsIGVsc2Ugbm8tb3AKLSAgICBUUklNX0ZBU1RCSU5T
ICAgICAgICAgICAgICAwCi0gICAgRklSU1RfU09SVEVEX0JJTl9TSVpFICAgICAgNTEyCi0KLSAg
ICBPcHRpb25zIGZvciBjdXN0b21pemluZyBNT1JFQ09SRToKLQotICAgIE1PUkVDT1JFICAgICAg
ICAgICAgICAgICAgIHNicmsKLSAgICBNT1JFQ09SRV9DT05USUdVT1VTICAgICAgICAxIAotICAg
IE1PUkVDT1JFX0NBTk5PVF9UUklNICAgICAgIE5PVCBkZWZpbmVkCi0gICAgTU1BUF9BU19NT1JF
Q09SRV9TSVpFICAgICAgKDEwMjQgKiAxMDI0KSAKLQotICAgIFR1bmluZyBvcHRpb25zIHRoYXQg
YXJlIGFsc28gZHluYW1pY2FsbHkgY2hhbmdlYWJsZSB2aWEgbWFsbG9wdDoKLQotICAgIERFRkFV
TFRfTVhGQVNUICAgICAgICAgICAgIDY0Ci0gICAgREVGQVVMVF9UUklNX1RIUkVTSE9MRCAgICAg
MjU2ICogMTAyNAotICAgIERFRkFVTFRfVE9QX1BBRCAgICAgICAgICAgIDAKLSAgICBERUZBVUxU
X01NQVBfVEhSRVNIT0xEICAgICAyNTYgKiAxMDI0Ci0gICAgREVGQVVMVF9NTUFQX01BWCAgICAg
ICAgICAgNjU1MzYKLQotICAgIFRoZXJlIGFyZSBzZXZlcmFsIG90aGVyICNkZWZpbmVkIGNvbnN0
YW50cyBhbmQgbWFjcm9zIHRoYXQgeW91Ci0gICAgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byB0b3Vj
aCB1bmxlc3MgeW91IGFyZSBleHRlbmRpbmcgb3IgYWRhcHRpbmcgbWFsbG9jLgotKi8KLQotI2lu
Y2x1ZGUgImZhc3RfbWFsbG9jLmgiCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxz
dGRkZWYuaD4KLQotI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gYWJvcnQoKQotCi0jaWYg
IVdJTjMyCi0jZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMAotI2RlZmluZSBNT1JFQ09SRV9D
QU5OT1RfVFJJTSAxCi0jZW5kaWYKLQotI2luY2x1ZGUgImludGVybmFsLmgiCi0KLW5hbWVzcGFj
ZSBLSlMgewotCi0jaWZuZGVmIE5ERUJVRwotCi0vLyBJbiBkZWJ1Z2dpbmcgYnVpbGRzLCB1c2Ug
dGhlIHN5c3RlbSBtYWxsb2MgZm9yIGl0cyBkZWJ1Z2dpbmcgZmVhdHVyZXMuCi0KLXZvaWQgKmtq
c19mYXN0X21hbGxvYyhzaXplX3QgbikKLXsKLSAgICBhc3NlcnQoSW50ZXJwcmV0ZXJJbXA6Omxv
Y2tDb3VudCgpID4gMCk7Ci0gICAgcmV0dXJuIG1hbGxvYyhuKTsKLX0KLQotdm9pZCAqa2pzX2Zh
c3RfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKQotewotICAg
IGFzc2VydChJbnRlcnByZXRlckltcDo6bG9ja0NvdW50KCkgPiAwKTsKLSAgICByZXR1cm4gY2Fs
bG9jKG5fZWxlbWVudHMsIGVsZW1lbnRfc2l6ZSk7Ci19Ci0KLXZvaWQga2pzX2Zhc3RfZnJlZSh2
b2lkKiBwKQotewotICAgIGFzc2VydChJbnRlcnByZXRlckltcDo6bG9ja0NvdW50KCkgPiAwKTsK
LSAgICBmcmVlKHApOwotfQotCi12b2lkICpranNfZmFzdF9yZWFsbG9jKHZvaWQqIHAsIHNpemVf
dCBuKQotewotICAgIGFzc2VydChJbnRlcnByZXRlckltcDo6bG9ja0NvdW50KCkgPiAwKTsKLSAg
ICByZXR1cm4gcmVhbGxvYyhwLCBuKTsKLX0KLQotI2Vsc2UKLQotLyoKLSAgV0lOMzIgc2V0cyB1
cCBkZWZhdWx0cyBmb3IgTVMgZW52aXJvbm1lbnQgYW5kIGNvbXBpbGVycy4KLSAgT3RoZXJ3aXNl
IGRlZmF1bHRzIGFyZSBmb3IgdW5peC4KLSovCi0KLS8qICNkZWZpbmUgV0lOMzIgKi8KLQotI2lm
ZGVmIFdJTjMyCi0KLSNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2luY2x1ZGUgPHdpbmRv
d3MuaD4KLQotLyogV2luMzIgZG9lc24ndCBzdXBwbHkgb3IgbmVlZCB0aGUgZm9sbG93aW5nIGhl
YWRlcnMgKi8KLSNkZWZpbmUgTEFDS1NfVU5JU1REX0gKLSNkZWZpbmUgTEFDS1NfU1lTX1BBUkFN
X0gKLSNkZWZpbmUgTEFDS1NfU1lTX01NQU5fSAotCi0vKiBVc2UgdGhlIHN1cHBsaWVkIGVtdWxh
dGlvbiBvZiBzYnJrICovCi0jZGVmaW5lIE1PUkVDT1JFIHNicmsKLSNkZWZpbmUgTU9SRUNPUkVf
Q09OVElHVU9VUyAxCi0jZGVmaW5lIE1PUkVDT1JFX0ZBSUxVUkUgICAgKCh2b2lkKikoLTEpKQot
Ci0vKiBVc2UgdGhlIHN1cHBsaWVkIGVtdWxhdGlvbiBvZiBtbWFwIGFuZCBtdW5tYXAgKi8KLSNk
ZWZpbmUgSEFWRV9NTUFQIDEKLSNkZWZpbmUgTVVOTUFQX0ZBSUxVUkUgICgtMSkKLSNkZWZpbmUg
TU1BUF9DTEVBUlMgMQotCi0vKiBUaGVzZSB2YWx1ZXMgZG9uJ3QgcmVhbGx5IG1hdHRlciBpbiB3
aW5kb3dzIG1tYXAgZW11bGF0aW9uICovCi0jZGVmaW5lIE1BUF9QUklWQVRFIDEKLSNkZWZpbmUg
TUFQX0FOT05ZTU9VUyAyCi0jZGVmaW5lIFBST1RfUkVBRCAxCi0jZGVmaW5lIFBST1RfV1JJVEUg
MgotCi0vKiBFbXVsYXRpb24gZnVuY3Rpb25zIGRlZmluZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGZp
bGUgKi8KLQotLyogSWYgVVNFX01BTExPQ19MT0NLLCB1c2Ugc3VwcGxpZWQgY3JpdGljYWwtc2Vj
dGlvbi1iYXNlZCBsb2NrIGZ1bmN0aW9ucyAqLwotI2lmZGVmIFVTRV9NQUxMT0NfTE9DSwotc3Rh
dGljIGludCBzbHdhaXQoaW50ICpzbCk7Ci1zdGF0aWMgaW50IHNscmVsZWFzZShpbnQgKnNsKTsK
LSNlbmRpZgotCi1zdGF0aWMgbG9uZyBnZXRwYWdlc2l6ZSh2b2lkKTsKLXN0YXRpYyBsb25nIGdl
dHJlZ2lvbnNpemUodm9pZCk7Ci1zdGF0aWMgdm9pZCAqc2JyayhwdHJkaWZmX3Qgc2l6ZSk7Ci1z
dGF0aWMgdm9pZCAqbW1hcCh2b2lkICpwdHIsIGxvbmcgc2l6ZSwgbG9uZyBwcm90LCBsb25nIHR5
cGUsIGxvbmcgaGFuZGxlLCBsb25nIGFyZyk7Ci1zdGF0aWMgbG9uZyBtdW5tYXAodm9pZCAqcHRy
LCBsb25nIHNpemUpOwotCi1zdGF0aWMgdm9pZCB2bWluZm8gKHVuc2lnbmVkIGxvbmcqZnJlZSwg
dW5zaWduZWQgbG9uZypyZXNlcnZlZCwgdW5zaWduZWQgbG9uZypjb21taXR0ZWQpOwotc3RhdGlj
IGludCBjcHVpbmZvIChpbnQgd2hvbGUsIHVuc2lnbmVkIGxvbmcqa2VybmVsLCB1bnNpZ25lZCBs
b25nKnVzZXIpOwotCi0jZW5kaWYKLQotLyoKLSAgX19TVERfQyBzaG91bGQgYmUgbm9uemVybyBp
ZiB1c2luZyBBTlNJLXN0YW5kYXJkIEMgY29tcGlsZXIsIGEgQysrCi0gIGNvbXBpbGVyLCBvciBh
IEMgY29tcGlsZXIgc3VmZmljaWVudGx5IGNsb3NlIHRvIEFOU0kgdG8gZ2V0IGF3YXkKLSAgd2l0
aCBpdC4KLSovCi0KLSNpZm5kZWYgX19TVERfQwotI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRl
ZmluZWQoX2NwbHVzcGx1cykKLSNkZWZpbmUgX19TVERfQyAgICAgMQotI2Vsc2UKLSNkZWZpbmUg
X19TVERfQyAgICAgMAotI2VuZGlmIAotI2VuZGlmIC8qX19TVERfQyovCi0KLQotLyoKLSAgVm9p
ZF90KiBpcyB0aGUgcG9pbnRlciB0eXBlIHRoYXQgbWFsbG9jIHNob3VsZCBzYXkgaXQgcmV0dXJu
cwotKi8KLQotI2lmbmRlZiBWb2lkX3QKLSNpZiAoX19TVERfQyB8fCBkZWZpbmVkKFdJTjMyKSkK
LSNkZWZpbmUgVm9pZF90ICAgICAgdm9pZAotI2Vsc2UKLSNkZWZpbmUgVm9pZF90ICAgICAgY2hh
cgotI2VuZGlmCi0jZW5kaWYgLypWb2lkX3QqLwotCi0jaWYgX19TVERfQwotI2luY2x1ZGUgPHN0
ZGRlZi5oPiAgIC8qIGZvciBzaXplX3QgKi8KLSNlbHNlCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+
Ci0jZW5kaWYKLQotLyogZGVmaW5lIExBQ0tTX1VOSVNURF9IIGlmIHlvdXIgc3lzdGVtIGRvZXMg
bm90IGhhdmUgYSA8dW5pc3RkLmg+LiAqLwotCi0vKiAjZGVmaW5lICBMQUNLU19VTklTVERfSCAq
LwotCi0jaWZuZGVmIExBQ0tTX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYK
LQotLyogZGVmaW5lIExBQ0tTX1NZU19QQVJBTV9IIGlmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGhh
dmUgYSA8c3lzL3BhcmFtLmg+LiAqLwotCi0vKiAjZGVmaW5lICBMQUNLU19TWVNfUEFSQU1fSCAq
LwotCi0KLSNpbmNsdWRlIDxzdGRpby5oPiAgICAvKiBuZWVkZWQgZm9yIG1hbGxvY19zdGF0cyAq
LwotI2luY2x1ZGUgPGVycm5vLmg+ICAgIC8qIG5lZWRlZCBmb3Igb3B0aW9uYWwgTUFMTE9DX0ZB
SUxVUkVfQUNUSU9OICovCi0KLQotLyoKLSAgRGVidWdnaW5nOgotCi0gIEJlY2F1c2UgZnJlZWQg
Y2h1bmtzIG1heSBiZSBvdmVyd3JpdHRlbiB3aXRoIGJvb2trZWVwaW5nIGZpZWxkcywgdGhpcwot
ICBtYWxsb2Mgd2lsbCBvZnRlbiBkaWUgd2hlbiBmcmVlZCBtZW1vcnkgaXMgb3ZlcndyaXR0ZW4g
YnkgdXNlcgotICBwcm9ncmFtcy4gIFRoaXMgY2FuIGJlIHZlcnkgZWZmZWN0aXZlIChhbGJlaXQg
aW4gYW4gYW5ub3lpbmcgd2F5KQotICBpbiBoZWxwaW5nIHRyYWNrIGRvd24gZGFuZ2xpbmcgcG9p
bnRlcnMuCi0KLSAgSWYgeW91IGNvbXBpbGUgd2l0aCAtRERFQlVHLCBhIG51bWJlciBvZiBhc3Nl
cnRpb24gY2hlY2tzIGFyZQotICBlbmFibGVkIHRoYXQgd2lsbCBjYXRjaCBtb3JlIG1lbW9yeSBl
cnJvcnMuIFlvdSBwcm9iYWJseSB3b24ndCBiZQotICBhYmxlIHRvIG1ha2UgbXVjaCBzZW5zZSBv
ZiB0aGUgYWN0dWFsIGFzc2VydGlvbiBlcnJvcnMsIGJ1dCB0aGV5Ci0gIHNob3VsZCBoZWxwIHlv
dSBsb2NhdGUgaW5jb3JyZWN0bHkgb3ZlcndyaXR0ZW4gbWVtb3J5LiAgVGhlCi0gIGNoZWNraW5n
IGlzIGZhaXJseSBleHRlbnNpdmUsIGFuZCB3aWxsIHNsb3cgZG93biBleGVjdXRpb24KLSAgbm90
aWNlYWJseS4gQ2FsbGluZyBtYWxsb2Nfc3RhdHMgb3IgbWFsbGluZm8gd2l0aCBERUJVRyBzZXQg
d2lsbAotICBhdHRlbXB0IHRvIGNoZWNrIGV2ZXJ5IG5vbi1tbWFwcGVkIGFsbG9jYXRlZCBhbmQg
ZnJlZSBjaHVuayBpbiB0aGUKLSAgY291cnNlIG9mIGNvbXB1dGluZyB0aGUgc3VtbW1hcmllcy4g
KEJ5IG5hdHVyZSwgbW1hcHBlZCByZWdpb25zCi0gIGNhbm5vdCBiZSBjaGVja2VkIHZlcnkgbXVj
aCBhdXRvbWF0aWNhbGx5LikKLQotICBTZXR0aW5nIERFQlVHIG1heSBhbHNvIGJlIGhlbHBmdWwg
aWYgeW91IGFyZSB0cnlpbmcgdG8gbW9kaWZ5Ci0gIHRoaXMgY29kZS4gVGhlIGFzc2VydGlvbnMg
aW4gdGhlIGNoZWNrIHJvdXRpbmVzIHNwZWxsIG91dCBpbiBtb3JlCi0gIGRldGFpbCB0aGUgYXNz
dW1wdGlvbnMgYW5kIGludmFyaWFudHMgdW5kZXJseWluZyB0aGUgYWxnb3JpdGhtcy4KLQotICBT
ZXR0aW5nIERFQlVHIGRvZXMgTk9UIHByb3ZpZGUgYW4gYXV0b21hdGVkIG1lY2hhbmlzbSBmb3Ig
Y2hlY2tpbmcKLSAgdGhhdCBhbGwgYWNjZXNzZXMgdG8gbWFsbG9jZWQgbWVtb3J5IHN0YXkgd2l0
aGluIHRoZWlyCi0gIGJvdW5kcy4gSG93ZXZlciwgdGhlcmUgYXJlIHNldmVyYWwgYWRkLW9ucyBh
bmQgYWRhcHRhdGlvbnMgb2YgdGhpcwotICBvciBvdGhlciBtYWxsb2NzIGF2YWlsYWJsZSB0aGF0
IGRvIHRoaXMuCi0qLwotCi0vKgotICBUaGUgdW5zaWduZWQgaW50ZWdlciB0eXBlIHVzZWQgZm9y
IGNvbXBhcmluZyBhbnkgdHdvIGNodW5rIHNpemVzLgotICBUaGlzIHNob3VsZCBiZSBhdCBsZWFz
dCBhcyB3aWRlIGFzIHNpemVfdCwgYnV0IHNob3VsZCBub3QgYmUgc2lnbmVkLgotKi8KLQotI2lm
bmRlZiBDSFVOS19TSVpFX1QKLSNkZWZpbmUgQ0hVTktfU0laRV9UIHVuc2lnbmVkIGxvbmcKLSNl
bmRpZgotCi0vKiAKLSAgVGhlIHVuc2lnbmVkIGludGVnZXIgdHlwZSB1c2VkIHRvIGhvbGQgYWRk
cmVzc2VzIHdoZW4gdGhleSBhcmUgYXJlCi0gIG1hbmlwdWxhdGVkIGFzIGludGVnZXJzLiBFeGNl
cHQgdGhhdCBpdCBpcyBub3QgZGVmaW5lZCBvbiBhbGwKLSAgc3lzdGVtcywgaW50cHRyX3Qgd291
bGQgc3VmZmljZS4KLSovCi0jaWZuZGVmIFBUUl9VSU5UCi0jZGVmaW5lIFBUUl9VSU5UIHVuc2ln
bmVkIGxvbmcKLSNlbmRpZgotCi0KLS8qCi0gIElOVEVSTkFMX1NJWkVfVCBpcyB0aGUgd29yZC1z
aXplIHVzZWQgZm9yIGludGVybmFsIGJvb2trZWVwaW5nCi0gIG9mIGNodW5rIHNpemVzLgotCi0g
IFRoZSBkZWZhdWx0IHZlcnNpb24gaXMgdGhlIHNhbWUgYXMgc2l6ZV90LgotCi0gIFdoaWxlIG5v
dCBzdHJpY3RseSBuZWNlc3NhcnksIGl0IGlzIGJlc3QgdG8gZGVmaW5lIHRoaXMgYXMgYW4KLSAg
dW5zaWduZWQgdHlwZSwgZXZlbiBpZiBzaXplX3QgaXMgYSBzaWduZWQgdHlwZS4gVGhpcyBtYXkg
YXZvaWQgc29tZQotICBhcnRpZmljaWFsIHNpemUgbGltaXRhdGlvbnMgb24gc29tZSBzeXN0ZW1z
LgotCi0gIE9uIGEgNjQtYml0IG1hY2hpbmUsIHlvdSBtYXkgYmUgYWJsZSB0byByZWR1Y2UgbWFs
bG9jIG92ZXJoZWFkIGJ5Ci0gIGRlZmluaW5nIElOVEVSTkFMX1NJWkVfVCB0byBiZSBhIDMyIGJp
dCBgdW5zaWduZWQgaW50JyBhdCB0aGUKLSAgZXhwZW5zZSBvZiBub3QgYmVpbmcgYWJsZSB0byBo
YW5kbGUgbW9yZSB0aGFuIDJeMzIgb2YgbWFsbG9jZWQKLSAgc3BhY2UuIElmIHRoaXMgbGltaXRh
dGlvbiBpcyBhY2NlcHRhYmxlLCB5b3UgYXJlIGVuY291cmFnZWQgdG8gc2V0Ci0gIHRoaXMgdW5s
ZXNzIHlvdSBhcmUgb24gYSBwbGF0Zm9ybSByZXF1aXJpbmcgMTZieXRlIGFsaWdubWVudHMuIElu
Ci0gIHRoaXMgY2FzZSB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyB0dXJuIG91dCB0byBuZWdh
dGUgYW55Ci0gIHBvdGVudGlhbCBhZHZhbnRhZ2VzIG9mIGRlY3JlYXNpbmcgc2l6ZV90IHdvcmQg
c2l6ZS4KLQotICBJbXBsZW1lbnRvcnM6IEJld2FyZSBvZiB0aGUgcG9zc2libGUgY29tYmluYXRp
b25zIG9mOgotICAgICAtIElOVEVSTkFMX1NJWkVfVCBtaWdodCBiZSBzaWduZWQgb3IgdW5zaWdu
ZWQsIG1pZ2h0IGJlIDMyIG9yIDY0IGJpdHMsCi0gICAgICAgYW5kIG1pZ2h0IGJlIHRoZSBzYW1l
IHdpZHRoIGFzIGludCBvciBhcyBsb25nCi0gICAgIC0gc2l6ZV90IG1pZ2h0IGhhdmUgZGlmZmVy
ZW50IHdpZHRoIGFuZCBzaWduZWRuZXNzIGFzIElOVEVSTkFMX1NJWkVfVAotICAgICAtIGludCBh
bmQgbG9uZyBtaWdodCBiZSAzMiBvciA2NCBiaXRzLCBhbmQgbWlnaHQgYmUgdGhlIHNhbWUgd2lk
dGgKLSAgVG8gZGVhbCB3aXRoIHRoaXMsIG1vc3QgY29tcGFyaXNvbnMgYW5kIGRpZmZlcmVuY2Ug
Y29tcHV0YXRpb25zCi0gIGFtb25nIElOVEVSTkFMX1NJWkVfVHMgc2hvdWxkIGNhc3QgdGhlbSB0
byBDSFVOS19TSVpFX1QsIGJlaW5nCi0gIGF3YXJlIG9mIHRoZSBmYWN0IHRoYXQgY2FzdGluZyBh
biB1bnNpZ25lZCBpbnQgdG8gYSB3aWRlciBsb25nIGRvZXMKLSAgbm90IHNpZ24tZXh0ZW5kLiAo
VGhpcyBhbHNvIG1ha2VzIGNoZWNraW5nIGZvciBuZWdhdGl2ZSBudW1iZXJzCi0gIGF3a3dhcmQu
KSBTb21lIG9mIHRoZXNlIGNhc3RzIHJlc3VsdCBpbiBoYXJtbGVzcyBjb21waWxlciB3YXJuaW5n
cwotICBvbiBzb21lIHN5c3RlbXMuCi0qLwotCi0jaWZuZGVmIElOVEVSTkFMX1NJWkVfVAotI2Rl
ZmluZSBJTlRFUk5BTF9TSVpFX1Qgc2l6ZV90Ci0jZW5kaWYKLQotLyogVGhlIGNvcnJlc3BvbmRp
bmcgd29yZCBzaXplICovCi0jZGVmaW5lIFNJWkVfU1ogICAgICAgICAgICAgICAgKHNpemVvZihJ
TlRFUk5BTF9TSVpFX1QpKQotCi0KLQotLyoKLSAgTUFMTE9DX0FMSUdOTUVOVCBpcyB0aGUgbWlu
aW11bSBhbGlnbm1lbnQgZm9yIG1hbGxvYydlZCBjaHVua3MuCi0gIEl0IG11c3QgYmUgYSBwb3dl
ciBvZiB0d28gYXQgbGVhc3QgMiAqIFNJWkVfU1osIGV2ZW4gb24gbWFjaGluZXMKLSAgZm9yIHdo
aWNoIHNtYWxsZXIgYWxpZ25tZW50cyB3b3VsZCBzdWZmaWNlLiBJdCBtYXkgYmUgZGVmaW5lZCBh
cwotICBsYXJnZXIgdGhhbiB0aGlzIHRob3VnaC4gTm90ZSBob3dldmVyIHRoYXQgY29kZSBhbmQg
ZGF0YSBzdHJ1Y3R1cmVzCi0gIGFyZSBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlIG9mIDgtYnl0ZSBh
bGlnbm1lbnQuCi0qLwotCi0KLSNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVAotI2RlZmluZSBNQUxM
T0NfQUxJR05NRU5UICAgICAgICgyICogU0laRV9TWikKLSNlbmRpZgotCi0vKiBUaGUgY29ycmVz
cG9uZGluZyBiaXQgbWFzayB2YWx1ZSAqLwotI2RlZmluZSBNQUxMT0NfQUxJR05fTUFTSyAgICAg
IChNQUxMT0NfQUxJR05NRU5UIC0gMSkKLQotCi0KLS8qCi0gIFJFQUxMT0NfWkVST19CWVRFU19G
UkVFUyBzaG91bGQgYmUgc2V0IGlmIGEgY2FsbCB0bwotICByZWFsbG9jIHdpdGggemVybyBieXRl
cyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgYSBjYWxsIHRvIGZyZWUuCi0gIFNvbWUgcGVvcGxlIHRo
aW5rIGl0IHNob3VsZC4gT3RoZXJ3aXNlLCBzaW5jZSB0aGlzIG1hbGxvYwotICByZXR1cm5zIGEg
dW5pcXVlIHBvaW50ZXIgZm9yIG1hbGxvYygwKSwgc28gZG9lcyByZWFsbG9jKHAsIDApLgotKi8K
LQotLyogICAjZGVmaW5lIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAqLwotCi0vKgotICBUUklN
X0ZBU1RCSU5TIGNvbnRyb2xzIHdoZXRoZXIgZnJlZSgpIG9mIGEgdmVyeSBzbWFsbCBjaHVuayBj
YW4KLSAgaW1tZWRpYXRlbHkgbGVhZCB0byB0cmltbWluZy4gU2V0dGluZyB0byB0cnVlICgxKSBj
YW4gcmVkdWNlIG1lbW9yeQotICBmb290cHJpbnQsIGJ1dCB3aWxsIGFsbW9zdCBhbHdheXMgc2xv
dyBkb3duIHByb2dyYW1zIHRoYXQgdXNlIGEgbG90Ci0gIG9mIHNtYWxsIGNodW5rcy4KLQotICBE
ZWZpbmUgdGhpcyBvbmx5IGlmIHlvdSBhcmUgd2lsbGluZyB0byBnaXZlIHVwIHNvbWUgc3BlZWQg
dG8gbW9yZQotICBhZ2dyZXNzaXZlbHkgcmVkdWNlIHN5c3RlbS1sZXZlbCBtZW1vcnkgZm9vdHBy
aW50IHdoZW4gcmVsZWFzaW5nCi0gIG1lbW9yeSBpbiBwcm9ncmFtcyB0aGF0IHVzZSBtYW55IHNt
YWxsIGNodW5rcy4gIFlvdSBjYW4gZ2V0Ci0gIGVzc2VudGlhbGx5IHRoZSBzYW1lIGVmZmVjdCBi
eSBzZXR0aW5nIE1YRkFTVCB0byAwLCBidXQgdGhpcyBjYW4KLSAgbGVhZCB0byBldmVuIGdyZWF0
ZXIgc2xvd2Rvd25zIGluIHByb2dyYW1zIHVzaW5nIG1hbnkgc21hbGwgY2h1bmtzLgotICBUUklN
X0ZBU1RCSU5TIGlzIGFuIGluLWJldHdlZW4gY29tcGlsZS10aW1lIG9wdGlvbiwgdGhhdCBkaXNh
YmxlcwotICBvbmx5IHRob3NlIGNodW5rcyBib3JkZXJpbmcgdG9wbW9zdCBtZW1vcnkgZnJvbSBi
ZWluZyBwbGFjZWQgaW4KLSAgZmFzdGJpbnMuCi0qLwotCi0jaWZuZGVmIFRSSU1fRkFTVEJJTlMK
LSNkZWZpbmUgVFJJTV9GQVNUQklOUyAgMAotI2VuZGlmCi0KLQotLyoKLSAgVVNFX0RMX1BSRUZJ
WCB3aWxsIHByZWZpeCBhbGwgcHVibGljIHJvdXRpbmVzIHdpdGggdGhlIHN0cmluZyAnZGwnLgot
ICBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIHlvdSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgbWFsbG9j
IGluIG9uZSBwYXJ0IAotICBvZiBhIHByb2dyYW0sIHVzaW5nIHlvdXIgcmVndWxhciBzeXN0ZW0g
bWFsbG9jIGVsc2V3aGVyZS4KLSovCi0KLSNkZWZpbmUgVVNFX0RMX1BSRUZJWAotCi0KLS8qCi0g
IFVTRV9NQUxMT0NfTE9DSyBjYXVzZXMgd3JhcHBlciBmdW5jdGlvbnMgdG8gc3Vycm91bmQgZWFj
aAotICBjYWxsYWJsZSByb3V0aW5lIHdpdGggcHRocmVhZCBtdXRleCBsb2NrL3VubG9jay4KLQot
ICBVU0VfTUFMTE9DX0xPQ0sgZm9yY2VzIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTIHRvIGJl
IGRlZmluZWQKLSovCi0KLQotLyogI2RlZmluZSBVU0VfTUFMTE9DX0xPQ0sgKi8KLQotCi0vKgot
ICBJZiBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVSUyBpcyBkZWZpbmVkLCBldmVyeSBwdWJsaWMg
cm91dGluZSBpcwotICBhY3R1YWxseSBhIHdyYXBwZXIgZnVuY3Rpb24gdGhhdCBmaXJzdCBjYWxs
cyBNQUxMT0NfUFJFQUNUSU9OLCB0aGVuCi0gIGNhbGxzIHRoZSBpbnRlcm5hbCByb3V0aW5lLCBh
bmQgZm9sbG93cyBpdCB3aXRoCi0gIE1BTExPQ19QT1NUQUNUSU9OLiBUaGlzIGlzIG5lZWRlZCBm
b3IgbG9ja2luZywgYnV0IHlvdSBjYW4gYWxzbyB1c2UKLSAgdGhpcywgd2l0aG91dCBVU0VfTUFM
TE9DX0xPQ0ssIGZvciBwdXJwb3NlcyBvZiBpbnRlcmNlcHRpb24sCi0gIGluc3RydW1lbnRhdGlv
biwgZXRjLiBJdCBpcyBhIHNhZCBmYWN0IHRoYXQgdXNpbmcgd3JhcHBlcnMgb2Z0ZW4KLSAgbm90
aWNlYWJseSBkZWdyYWRlcyBwZXJmb3JtYW5jZSBvZiBtYWxsb2MtaW50ZW5zaXZlIHByb2dyYW1z
LgotKi8KLQotI2lmZGVmIFVTRV9NQUxMT0NfTE9DSwotI2RlZmluZSBVU0VfUFVCTElDX01BTExP
Q19XUkFQUEVSUwotI2Vsc2UKLS8qICNkZWZpbmUgVVNFX1BVQkxJQ19NQUxMT0NfV1JBUFBFUlMg
Ki8KLSNlbmRpZgotCi0KLS8qIAotICAgVHdvLXBoYXNlIG5hbWUgdHJhbnNsYXRpb24uCi0gICBB
bGwgb2YgdGhlIGFjdHVhbCByb3V0aW5lcyBhcmUgZ2l2ZW4gbWFuZ2xlZCBuYW1lcy4KLSAgIFdo
ZW4gd3JhcHBlcnMgYXJlIHVzZWQsIHRoZXkgYmVjb21lIHRoZSBwdWJsaWMgY2FsbGFibGUgdmVy
c2lvbnMuCi0gICBXaGVuIERMX1BSRUZJWCBpcyB1c2VkLCB0aGUgY2FsbGFibGUgbmFtZXMgYXJl
IHByZWZpeGVkLgotKi8KLQotI2lmbmRlZiBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVSUwotI2Rl
ZmluZSBjQUxMT2MgICAgICBwdWJsaWNfY0FMTE9jCi0jZGVmaW5lIGZSRWUgICAgICAgIHB1Ymxp
Y19mUkVlCi0jZGVmaW5lIGNGUkVlICAgICAgIHB1YmxpY19jRlJFZQotI2RlZmluZSBtQUxMT2Mg
ICAgICBwdWJsaWNfbUFMTE9jCi0jZGVmaW5lIG1FTUFMSUduICAgIHB1YmxpY19tRU1BTElHbgot
I2RlZmluZSByRUFMTE9jICAgICBwdWJsaWNfckVBTExPYwotI2RlZmluZSB2QUxMT2MgICAgICBw
dWJsaWNfdkFMTE9jCi0jZGVmaW5lIHBWQUxMT2MgICAgIHB1YmxpY19wVkFMTE9jCi0jZGVmaW5l
IG1BTExJTkZvICAgIHB1YmxpY19tQUxMSU5GbwotI2RlZmluZSBtQUxMT1B0ICAgICBwdWJsaWNf
bUFMTE9QdAotI2RlZmluZSBtVFJJbSAgICAgICBwdWJsaWNfbVRSSW0KLSNkZWZpbmUgbVNUQVRz
ICAgICAgcHVibGljX21TVEFUcwotI2RlZmluZSBtVVNBQkxlICAgICBwdWJsaWNfbVVTQUJMZQot
I2RlZmluZSBpQ0FMTE9jICAgICBwdWJsaWNfaUNBTExPYwotI2RlZmluZSBpQ09NQUxMT2MgICBw
dWJsaWNfaUNPTUFMTE9jCi0jZW5kaWYKLQotI2lmZGVmIFVTRV9ETF9QUkVGSVgKLSNkZWZpbmUg
cHVibGljX2NBTExPYyAgICBranNfZmFzdF9jYWxsb2MKLSNkZWZpbmUgcHVibGljX2ZSRWUgICAg
ICBranNfZmFzdF9mcmVlCi0jZGVmaW5lIHB1YmxpY19jRlJFZSAgICAga2pzX2Zhc3RfY2ZyZWUK
LSNkZWZpbmUgcHVibGljX21BTExPYyAgICBranNfZmFzdF9tYWxsb2MKLSNkZWZpbmUgcHVibGlj
X21FTUFMSUduICBranNfZmFzdF9tZW1hbGlnbgotI2RlZmluZSBwdWJsaWNfckVBTExPYyAgIGtq
c19mYXN0X3JlYWxsb2MKLSNkZWZpbmUgcHVibGljX3ZBTExPYyAgICBranNfZmFzdF92YWxsb2MK
LSNkZWZpbmUgcHVibGljX3BWQUxMT2MgICBranNfZmFzdF9wdmFsbG9jCi0jZGVmaW5lIHB1Ymxp
Y19tQUxMSU5GbyAga2pzX2Zhc3RfbWFsbGluZm8KLSNkZWZpbmUgcHVibGljX21BTExPUHQgICBr
anNfZmFzdF9tYWxsb3B0Ci0jZGVmaW5lIHB1YmxpY19tVFJJbSAgICAga2pzX2Zhc3RfbWFsbG9j
X3RyaW0KLSNkZWZpbmUgcHVibGljX21TVEFUcyAgICBranNfZmFzdF9tYWxsb2Nfc3RhdHMKLSNk
ZWZpbmUgcHVibGljX21VU0FCTGUgICBranNfZmFzdF9tYWxsb2NfdXNhYmxlX3NpemUKLSNkZWZp
bmUgcHVibGljX2lDQUxMT2MgICBranNfZmFzdF9pbmRlcGVuZGVudF9jYWxsb2MKLSNkZWZpbmUg
cHVibGljX2lDT01BTExPYyBranNfZmFzdF9pbmRlcGVuZGVudF9jb21hbGxvYwotI2Vsc2UgLyog
VVNFX0RMX1BSRUZJWCAqLwotI2RlZmluZSBwdWJsaWNfY0FMTE9jICAgIGNhbGxvYwotI2RlZmlu
ZSBwdWJsaWNfZlJFZSAgICAgIGZyZWUKLSNkZWZpbmUgcHVibGljX2NGUkVlICAgICBjZnJlZQot
I2RlZmluZSBwdWJsaWNfbUFMTE9jICAgIG1hbGxvYwotI2RlZmluZSBwdWJsaWNfbUVNQUxJR24g
IG1lbWFsaWduCi0jZGVmaW5lIHB1YmxpY19yRUFMTE9jICAgcmVhbGxvYwotI2RlZmluZSBwdWJs
aWNfdkFMTE9jICAgIHZhbGxvYwotI2RlZmluZSBwdWJsaWNfcFZBTExPYyAgIHB2YWxsb2MKLSNk
ZWZpbmUgcHVibGljX21BTExJTkZvICBtYWxsaW5mbwotI2RlZmluZSBwdWJsaWNfbUFMTE9QdCAg
IG1hbGxvcHQKLSNkZWZpbmUgcHVibGljX21UUkltICAgICBtYWxsb2NfdHJpbQotI2RlZmluZSBw
dWJsaWNfbVNUQVRzICAgIG1hbGxvY19zdGF0cwotI2RlZmluZSBwdWJsaWNfbVVTQUJMZSAgIG1h
bGxvY191c2FibGVfc2l6ZQotI2RlZmluZSBwdWJsaWNfaUNBTExPYyAgIGluZGVwZW5kZW50X2Nh
bGxvYwotI2RlZmluZSBwdWJsaWNfaUNPTUFMTE9jIGluZGVwZW5kZW50X2NvbWFsbG9jCi0jZW5k
aWYgLyogVVNFX0RMX1BSRUZJWCAqLwotCi0KLS8qCi0gIEhBVkVfTUVNQ1BZIHNob3VsZCBiZSBk
ZWZpbmVkIGlmIHlvdSBhcmUgbm90IG90aGVyd2lzZSB1c2luZwotICBBTlNJIFNURCBDLCBidXQg
c3RpbGwgaGF2ZSBtZW1jcHkgYW5kIG1lbXNldCBpbiB5b3VyIEMgbGlicmFyeQotICBhbmQgd2Fu
dCB0byB1c2UgdGhlbSBpbiBjYWxsb2MgYW5kIHJlYWxsb2MuIE90aGVyd2lzZSBzaW1wbGUKLSAg
bWFjcm8gdmVyc2lvbnMgYXJlIGRlZmluZWQgYmVsb3cuCi0KLSAgVVNFX01FTUNQWSBzaG91bGQg
YmUgZGVmaW5lZCBhcyAxIGlmIHlvdSBhY3R1YWxseSB3YW50IHRvCi0gIGhhdmUgbWVtc2V0IGFu
ZCBtZW1jcHkgY2FsbGVkLiBQZW9wbGUgcmVwb3J0IHRoYXQgdGhlIG1hY3JvCi0gIHZlcnNpb25z
IGFyZSBmYXN0ZXIgdGhhbiBsaWJjIHZlcnNpb25zIG9uIHNvbWUgc3lzdGVtcy4KLSAgCi0gIEV2
ZW4gaWYgVVNFX01FTUNQWSBpcyBzZXQgdG8gMSwgbG9vcHMgdG8gY29weS9jbGVhciBzbWFsbCBj
aHVua3MKLSAgKG9mIDw9IDM2IGJ5dGVzKSBhcmUgbWFudWFsbHkgdW5yb2xsZWQgaW4gcmVhbGxv
YyBhbmQgY2FsbG9jLgotKi8KLQotI2RlZmluZSBIQVZFX01FTUNQWQotCi0jaWZuZGVmIFVTRV9N
RU1DUFkKLSNpZmRlZiBIQVZFX01FTUNQWQotI2RlZmluZSBVU0VfTUVNQ1BZIDEKLSNlbHNlCi0j
ZGVmaW5lIFVTRV9NRU1DUFkgMAotI2VuZGlmCi0jZW5kaWYKLQotCi0jaWYgKF9fU1REX0MgfHwg
ZGVmaW5lZChIQVZFX01FTUNQWSkpCi0KLSNpZmRlZiBXSU4zMgotLyogT24gV2luMzIgbWVtc2V0
IGFuZCBtZW1jcHkgYXJlIGFscmVhZHkgZGVjbGFyZWQgaW4gd2luZG93cy5oICovCi0jZWxzZQot
I2lmIF9fU1REX0MKLWV4dGVybiAiQyIgewotdm9pZCogbWVtc2V0KHZvaWQqLCBpbnQsIHNpemVf
dCk7Ci12b2lkKiBtZW1jcHkodm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QpOwotfQotI2Vsc2UK
LWV4dGVybiAiQyIgewotVm9pZF90KiBtZW1zZXQoKTsKLVZvaWRfdCogbWVtY3B5KCk7Ci19Ci0j
ZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLS8qCi0gIE1BTExPQ19GQUlMVVJFX0FDVElPTiBpcyB0
aGUgYWN0aW9uIHRvIHRha2UgYmVmb3JlICJyZXR1cm4gMCIgd2hlbgotICBtYWxsb2MgZmFpbHMg
dG8gYmUgYWJsZSB0byByZXR1cm4gbWVtb3J5LCBlaXRoZXIgYmVjYXVzZSBtZW1vcnkgaXMKLSAg
ZXhoYXVzdGVkIG9yIGJlY2F1c2Ugb2YgaWxsZWdhbCBhcmd1bWVudHMuCi0gIAotICBCeSBkZWZh
dWx0LCBzZXRzIGVycm5vIGlmIHJ1bm5pbmcgb24gU1REX0MgcGxhdGZvcm0sIGVsc2UgZG9lcyBu
b3RoaW5nLiAgCi0qLwotCi0jaWZuZGVmIE1BTExPQ19GQUlMVVJFX0FDVElPTgotI2lmIF9fU1RE
X0MKLSNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OIFwKLSAgIGVycm5vID0gRU5PTUVNOwot
Ci0jZWxzZQotI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KLSNlbmRpZgotI2VuZGlmCi0K
LS8qCi0gIE1PUkVDT1JFLXJlbGF0ZWQgZGVjbGFyYXRpb25zLiBCeSBkZWZhdWx0LCByZWx5IG9u
IHNicmsKLSovCi0KLQotI2lmZGVmIExBQ0tTX1VOSVNURF9ICi0jaWYgIWRlZmluZWQoX19GcmVl
QlNEX18pICYmICFkZWZpbmVkKF9fT3BlbkJTRF9fKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKQot
I2lmIF9fU1REX0MKLWV4dGVybiBWb2lkX3QqICAgICBzYnJrKHB0cmRpZmZfdCk7Ci0jZWxzZQot
ZXh0ZXJuIFZvaWRfdCogICAgIHNicmsoKTsKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQotLyoK
LSAgTU9SRUNPUkUgaXMgdGhlIG5hbWUgb2YgdGhlIHJvdXRpbmUgdG8gY2FsbCB0byBvYnRhaW4g
bW9yZSBtZW1vcnkKLSAgZnJvbSB0aGUgc3lzdGVtLiAgU2VlIGJlbG93IGZvciBnZW5lcmFsIGd1
aWRhbmNlIG9uIHdyaXRpbmcKLSAgYWx0ZXJuYXRpdmUgTU9SRUNPUkUgZnVuY3Rpb25zLCBhcyB3
ZWxsIGFzIGEgdmVyc2lvbiBmb3IgV0lOMzIgYW5kIGEKLSAgc2FtcGxlIHZlcnNpb24gZm9yIHBy
ZS1PU1ggbWFjb3MuCi0qLwotCi0jaWZuZGVmIE1PUkVDT1JFCi0jZGVmaW5lIE1PUkVDT1JFIHNi
cmsKLSNlbmRpZgotCi0vKgotICBNT1JFQ09SRV9GQUlMVVJFIGlzIHRoZSB2YWx1ZSByZXR1cm5l
ZCB1cG9uIGZhaWx1cmUgb2YgTU9SRUNPUkUKLSAgYXMgd2VsbCBhcyBtbWFwLiBTaW5jZSBpdCBj
YW5ub3QgYmUgYW4gb3RoZXJ3aXNlIHZhbGlkIG1lbW9yeSBhZGRyZXNzLAotICBhbmQgbXVzdCBy
ZWZsZWN0IHZhbHVlcyBvZiBzdGFuZGFyZCBzeXMgY2FsbHMsIHlvdSBwcm9iYWJseSBvdWdodCBu
b3QKLSAgdHJ5IHRvIHJlZGVmaW5lIGl0LgotKi8KLQotI2lmbmRlZiBNT1JFQ09SRV9GQUlMVVJF
Ci0jZGVmaW5lIE1PUkVDT1JFX0ZBSUxVUkUgKC0xKQotI2VuZGlmCi0KLS8qCi0gIElmIE1PUkVD
T1JFX0NPTlRJR1VPVVMgaXMgdHJ1ZSwgdGFrZSBhZHZhbnRhZ2Ugb2YgZmFjdCB0aGF0Ci0gIGNv
bnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFIHdpdGggcG9zaXRpdmUgYXJndW1lbnRzIGFsd2F5
cyByZXR1cm4KLSAgY29udGlndW91cyBpbmNyZWFzaW5nIGFkZHJlc3Nlcy4gIFRoaXMgaXMgdHJ1
ZSBvZiB1bml4IHNicmsuICBFdmVuCi0gIGlmIG5vdCBkZWZpbmVkLCB3aGVuIHJlZ2lvbnMgaGFw
cGVuIHRvIGJlIGNvbnRpZ3VvdXMsIG1hbGxvYyB3aWxsCi0gIHBlcm1pdCBhbGxvY2F0aW9ucyBz
cGFubmluZyByZWdpb25zIG9idGFpbmVkIGZyb20gZGlmZmVyZW50Ci0gIGNhbGxzLiBCdXQgZGVm
aW5pbmcgdGhpcyB3aGVuIGFwcGxpY2FibGUgZW5hYmxlcyBzb21lIHN0cm9uZ2VyCi0gIGNvbnNp
c3RlbmN5IGNoZWNrcyBhbmQgc3BhY2UgZWZmaWNpZW5jaWVzLiAKLSovCi0KLSNpZm5kZWYgTU9S
RUNPUkVfQ09OVElHVU9VUwotI2RlZmluZSBNT1JFQ09SRV9DT05USUdVT1VTIDEKLSNlbmRpZgot
Ci0vKgotICBEZWZpbmUgTU9SRUNPUkVfQ0FOTk9UX1RSSU0gaWYgeW91ciB2ZXJzaW9uIG9mIE1P
UkVDT1JFCi0gIGNhbm5vdCByZWxlYXNlIHNwYWNlIGJhY2sgdG8gdGhlIHN5c3RlbSB3aGVuIGdp
dmVuIG5lZ2F0aXZlCi0gIGFyZ3VtZW50cy4gVGhpcyBpcyBnZW5lcmFsbHkgbmVjZXNzYXJ5IG9u
bHkgaWYgeW91IGFyZSB1c2luZwotICBhIGhhbmQtY3JhZnRlZCBNT1JFQ09SRSBmdW5jdGlvbiB0
aGF0IGNhbm5vdCBoYW5kbGUgbmVnYXRpdmUgYXJndW1lbnRzLgotKi8KLQotLyogI2RlZmluZSBN
T1JFQ09SRV9DQU5OT1RfVFJJTSAqLwotCi0KLS8qCi0gIERlZmluZSBIQVZFX01NQVAgYXMgdHJ1
ZSB0byBvcHRpb25hbGx5IG1ha2UgbWFsbG9jKCkgdXNlIG1tYXAoKSB0bwotICBhbGxvY2F0ZSB2
ZXJ5IGxhcmdlIGJsb2Nrcy4gIFRoZXNlIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlCi0gIG9wZXJh
dGluZyBzeXN0ZW0gaW1tZWRpYXRlbHkgYWZ0ZXIgYSBmcmVlKCkuIEFsc28sIGlmIG1tYXAKLSAg
aXMgYXZhaWxhYmxlLCBpdCBpcyB1c2VkIGFzIGEgYmFja3VwIHN0cmF0ZWd5IGluIGNhc2VzIHdo
ZXJlCi0gIE1PUkVDT1JFIGZhaWxzIHRvIHByb3ZpZGUgc3BhY2UgZnJvbSBzeXN0ZW0uCi0KLSAg
VGhpcyBtYWxsb2MgaXMgYmVzdCB0dW5lZCB0byB3b3JrIHdpdGggbW1hcCBmb3IgbGFyZ2UgcmVx
dWVzdHMuCi0gIElmIHlvdSBkbyBub3QgaGF2ZSBtbWFwLCBvcGVyYXRpb25zIGludm9sdmluZyB2
ZXJ5IGxhcmdlIGNodW5rcyAoMU1CCi0gIG9yIHNvKSBtYXkgYmUgc2xvd2VyIHRoYW4geW91J2Qg
bGlrZS4KLSovCi0KLSNpZm5kZWYgSEFWRV9NTUFQCi0jZGVmaW5lIEhBVkVfTU1BUCAxCi0jZW5k
aWYKLQotI2lmIEhBVkVfTU1BUAotLyogCi0gICBTdGFuZGFyZCB1bml4IG1tYXAgdXNpbmcgL2Rl
di96ZXJvIGNsZWFycyBtZW1vcnkgc28gY2FsbG9jIGRvZXNuJ3QKLSAgIG5lZWQgdG8uCi0qLwot
Ci0jaWZuZGVmIE1NQVBfQ0xFQVJTCi0jZGVmaW5lIE1NQVBfQ0xFQVJTIDEKLSNlbmRpZgotCi0j
ZWxzZSAvKiBubyBtbWFwICovCi0jaWZuZGVmIE1NQVBfQ0xFQVJTCi0jZGVmaW5lIE1NQVBfQ0xF
QVJTIDAKLSNlbmRpZgotI2VuZGlmCi0KLQotLyogCi0gICBNTUFQX0FTX01PUkVDT1JFX1NJWkUg
aXMgdGhlIG1pbmltdW0gbW1hcCBzaXplIGFyZ3VtZW50IHRvIHVzZSBpZgotICAgc2JyayBmYWls
cywgYW5kIG1tYXAgaXMgdXNlZCBhcyBhIGJhY2t1cCAod2hpY2ggaXMgZG9uZSBvbmx5IGlmCi0g
ICBIQVZFX01NQVApLiAgVGhlIHZhbHVlIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBwYWdlIHNpemUu
ICBUaGlzCi0gICBiYWNrdXAgc3RyYXRlZ3kgZ2VuZXJhbGx5IGFwcGxpZXMgb25seSB3aGVuIHN5
c3RlbXMgaGF2ZSAiaG9sZXMiIGluCi0gICBhZGRyZXNzIHNwYWNlLCBzbyBzYnJrIGNhbm5vdCBw
ZXJmb3JtIGNvbnRpZ3VvdXMgZXhwYW5zaW9uLCBidXQKLSAgIHRoZXJlIGlzIHN0aWxsIHNwYWNl
IGF2YWlsYWJsZSBvbiBzeXN0ZW0uICBPbiBzeXN0ZW1zIGZvciB3aGljaAotICAgdGhpcyBpcyBr
bm93biB0byBiZSB1c2VmdWwgKGkuZS4gbW9zdCBsaW51eCBrZXJuZWxzKSwgdGhpcyBvY2N1cnMK
LSAgIG9ubHkgd2hlbiBwcm9ncmFtcyBhbGxvY2F0ZSBodWdlIGFtb3VudHMgb2YgbWVtb3J5LiAg
QmV0d2VlbiB0aGlzLAotICAgYW5kIHRoZSBmYWN0IHRoYXQgbW1hcCByZWdpb25zIHRlbmQgdG8g
YmUgbGltaXRlZCwgdGhlIHNpemUgc2hvdWxkCi0gICBiZSBsYXJnZSwgdG8gYXZvaWQgdG9vIG1h
bnkgbW1hcCBjYWxscyBhbmQgdGh1cyBhdm9pZCBydW5uaW5nIG91dAotICAgb2Yga2VybmVsIHJl
c291cmNlcy4KLSovCi0KLSNpZm5kZWYgTU1BUF9BU19NT1JFQ09SRV9TSVpFCi0jZGVmaW5lIE1N
QVBfQVNfTU9SRUNPUkVfU0laRSAoMTAyNCAqIDEwMjQpCi0jZW5kaWYKLQotLyoKLSAgRGVmaW5l
IEhBVkVfTVJFTUFQIHRvIG1ha2UgcmVhbGxvYygpIHVzZSBtcmVtYXAoKSB0byByZS1hbGxvY2F0
ZQotICBsYXJnZSBibG9ja3MuICBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHBvc3NpYmxlIG9uIExp
bnV4IHdpdGgKLSAga2VybmVsIHZlcnNpb25zIG5ld2VyIHRoYW4gMS4zLjc3LgotKi8KLQotI2lm
bmRlZiBIQVZFX01SRU1BUAotI2lmZGVmIGxpbnV4Ci0jZGVmaW5lIEhBVkVfTVJFTUFQIDEKLSNl
bHNlCi0jZGVmaW5lIEhBVkVfTVJFTUFQIDAKLSNlbmRpZgotCi0jZW5kaWYgLyogSEFWRV9NTUFQ
ICovCi0KLQotLyoKLSAgVGhlIHN5c3RlbSBwYWdlIHNpemUuIFRvIHRoZSBleHRlbnQgcG9zc2li
bGUsIHRoaXMgbWFsbG9jIG1hbmFnZXMKLSAgbWVtb3J5IGZyb20gdGhlIHN5c3RlbSBpbiBwYWdl
LXNpemUgdW5pdHMuICBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBpcwotICBjYWNoZWQgZHVyaW5nIGlu
aXRpYWxpemF0aW9uIGludG8gYSBmaWVsZCBvZiBtYWxsb2Nfc3RhdGUuIFNvIGV2ZW4KLSAgaWYg
bWFsbG9jX2dldHBhZ2VzaXplIGlzIGEgZnVuY3Rpb24sIGl0IGlzIG9ubHkgY2FsbGVkIG9uY2Uu
Ci0KLSAgVGhlIGZvbGxvd2luZyBtZWNoYW5pY3MgZm9yIGdldHBhZ2VzaXplIHdlcmUgYWRhcHRl
ZCBmcm9tIGJzZC9nbnUKLSAgZ2V0cGFnZXNpemUuaC4gSWYgbm9uZSBvZiB0aGUgc3lzdGVtLXBy
b2JlcyBoZXJlIGFwcGx5LCBhIHZhbHVlIG9mCi0gIDQwOTYgaXMgdXNlZCwgd2hpY2ggc2hvdWxk
IGJlIE9LOiBJZiB0aGV5IGRvbid0IGFwcGx5LCB0aGVuIHVzaW5nCi0gIHRoZSBhY3R1YWwgdmFs
dWUgcHJvYmFibHkgZG9lc24ndCBpbXBhY3QgcGVyZm9ybWFuY2UuCi0qLwotCi0KLSNpZm5kZWYg
bWFsbG9jX2dldHBhZ2VzaXplCi0KLSNpZm5kZWYgTEFDS1NfVU5JU1REX0gKLSMgIGluY2x1ZGUg
PHVuaXN0ZC5oPgotI2VuZGlmCi0KLSMgIGlmZGVmIF9TQ19QQUdFU0laRSAgICAgICAgIC8qIHNv
bWUgU1ZSNCBzeXN0ZW1zIG9taXQgYW4gdW5kZXJzY29yZSAqLwotIyAgICBpZm5kZWYgX1NDX1BB
R0VfU0laRQotIyAgICAgIGRlZmluZSBfU0NfUEFHRV9TSVpFIF9TQ19QQUdFU0laRQotIyAgICBl
bmRpZgotIyAgZW5kaWYKLQotIyAgaWZkZWYgX1NDX1BBR0VfU0laRQotIyAgICBkZWZpbmUgbWFs
bG9jX2dldHBhZ2VzaXplIHN5c2NvbmYoX1NDX1BBR0VfU0laRSkKLSMgIGVsc2UKLSMgICAgaWYg
ZGVmaW5lZChCU0QpIHx8IGRlZmluZWQoREdVWCkgfHwgZGVmaW5lZChIQVZFX0dFVFBBR0VTSVpF
KQotICAgICAgIGV4dGVybiBzaXplX3QgZ2V0cGFnZXNpemUoKTsKLSMgICAgICBkZWZpbmUgbWFs
bG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkKLSMgICAgZWxzZQotIyAgICAgIGlmZGVmIFdJ
TjMyIC8qIHVzZSBzdXBwbGllZCBlbXVsYXRpb24gb2YgZ2V0cGFnZXNpemUgKi8KLSMgICAgICAg
IGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUoKSAKLSMgICAgICBlbHNlCi0j
ICAgICAgICBpZm5kZWYgTEFDS1NfU1lTX1BBUkFNX0gKLSMgICAgICAgICAgaW5jbHVkZSA8c3lz
L3BhcmFtLmg+Ci0jICAgICAgICBlbmRpZgotIyAgICAgICAgaWZkZWYgRVhFQ19QQUdFU0laRQot
IyAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIEVYRUNfUEFHRVNJWkUKLSMgICAg
ICAgIGVsc2UKLSMgICAgICAgICAgaWZkZWYgTkJQRwotIyAgICAgICAgICAgIGlmbmRlZiBDTFNJ
WkUKLSMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgTkJQRwotIyAgICAg
ICAgICAgIGVsc2UKLSMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKE5C
UEcgKiBDTFNJWkUpCi0jICAgICAgICAgICAgZW5kaWYKLSMgICAgICAgICAgZWxzZQotIyAgICAg
ICAgICAgIGlmZGVmIE5CUEMKLSMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNp
emUgTkJQQwotIyAgICAgICAgICAgIGVsc2UKLSMgICAgICAgICAgICAgIGlmZGVmIFBBR0VTSVpF
Ci0jICAgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgUEFHRVNJWkUKLSMg
ICAgICAgICAgICAgIGVsc2UgLyoganVzdCBndWVzcyAqLwotIyAgICAgICAgICAgICAgICBkZWZp
bmUgbWFsbG9jX2dldHBhZ2VzaXplICg0MDk2KSAKLSMgICAgICAgICAgICAgIGVuZGlmCi0jICAg
ICAgICAgICAgZW5kaWYKLSMgICAgICAgICAgZW5kaWYKLSMgICAgICAgIGVuZGlmCi0jICAgICAg
ZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyoKLSAgVGhpcyB2ZXJzaW9u
IG9mIG1hbGxvYyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgU1ZJRC9YUEcgbWFsbGluZm8KLSAgcm91
dGluZSB0aGF0IHJldHVybnMgYSBzdHJ1Y3QgY29udGFpbmluZyB1c2FnZSBwcm9wZXJ0aWVzIGFu
ZAotICBzdGF0aXN0aWNzLiBJdCBzaG91bGQgd29yayBvbiBhbnkgU1ZJRC9YUEcgY29tcGxpYW50
IHN5c3RlbSB0aGF0IGhhcwotICBhIC91c3IvaW5jbHVkZS9tYWxsb2MuaCBkZWZpbmluZyBzdHJ1
Y3QgbWFsbGluZm8uIChJZiB5b3UnZCBsaWtlIHRvCi0gIGluc3RhbGwgc3VjaCBhIHRoaW5nIHlv
dXJzZWxmLCBjdXQgb3V0IHRoZSBwcmVsaW1pbmFyeSBkZWNsYXJhdGlvbnMKLSAgYXMgZGVzY3Jp
YmVkIGFib3ZlIGFuZCBiZWxvdyBhbmQgc2F2ZSB0aGVtIGluIGEgbWFsbG9jLmggZmlsZS4gQnV0
Ci0gIHRoZXJlJ3Mgbm8gY29tcGVsbGluZyByZWFzb24gdG8gYm90aGVyIHRvIGRvIHRoaXMuKQot
Ci0gIFRoZSBtYWluIGRlY2xhcmF0aW9uIG5lZWRlZCBpcyB0aGUgbWFsbGluZm8gc3RydWN0IHRo
YXQgaXMgcmV0dXJuZWQKLSAgKGJ5LWNvcHkpIGJ5IG1hbGxpbmZvKCkuICBUaGUgU1ZJRC9YUEcg
bWFsbG9pbmZvIHN0cnVjdCBjb250YWlucyBhCi0gIGJ1bmNoIG9mIGZpZWxkcyB0aGF0IGFyZSBu
b3QgZXZlbiBtZWFuaW5nZnVsIGluIHRoaXMgdmVyc2lvbiBvZgotICBtYWxsb2MuICBUaGVzZSBm
aWVsZHMgYXJlIGFyZSBpbnN0ZWFkIGZpbGxlZCBieSBtYWxsaW5mbygpIHdpdGgKLSAgb3RoZXIg
bnVtYmVycyB0aGF0IG1pZ2h0IGJlIG9mIGludGVyZXN0LgotCi0gIEhBVkVfVVNSX0lOQ0xVREVf
TUFMTE9DX0ggc2hvdWxkIGJlIHNldCBpZiB5b3UgaGF2ZSBhCi0gIC91c3IvaW5jbHVkZS9tYWxs
b2MuaCBmaWxlIHRoYXQgaW5jbHVkZXMgYSBkZWNsYXJhdGlvbiBvZiBzdHJ1Y3QKLSAgbWFsbGlu
Zm8uICBJZiBzbywgaXQgaXMgaW5jbHVkZWQ7IGVsc2UgYW4gU1ZJRDIvWFBHMiBjb21wbGlhbnQK
LSAgdmVyc2lvbiBpcyBkZWNsYXJlZCBiZWxvdy4gIFRoZXNlIG11c3QgYmUgcHJlY2lzZWx5IHRo
ZSBzYW1lIGZvcgotICBtYWxsaW5mbygpIHRvIHdvcmsuICBUaGUgb3JpZ2luYWwgU1ZJRCB2ZXJz
aW9uIG9mIHRoaXMgc3RydWN0LAotICBkZWZpbmVkIG9uIG1vc3Qgc3lzdGVtcyB3aXRoIG1hbGxp
bmZvLCBkZWNsYXJlcyBhbGwgZmllbGRzIGFzCi0gIGludHMuIEJ1dCBzb21lIG90aGVycyBkZWZp
bmUgYXMgdW5zaWduZWQgbG9uZy4gSWYgeW91ciBzeXN0ZW0KLSAgZGVmaW5lcyB0aGUgZmllbGRz
IHVzaW5nIGEgdHlwZSBvZiBkaWZmZXJlbnQgd2lkdGggdGhhbiBsaXN0ZWQgaGVyZSwKLSAgeW91
IG11c3QgI2luY2x1ZGUgeW91ciBzeXN0ZW0gdmVyc2lvbiBhbmQgI2RlZmluZQotICBIQVZFX1VT
Ul9JTkNMVURFX01BTExPQ19ILgotKi8KLQotLyogI2RlZmluZSBIQVZFX1VTUl9JTkNMVURFX01B
TExPQ19IICovCi0KLSNpZmRlZiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ICi0jaW5jbHVkZSAi
L3Vzci9pbmNsdWRlL21hbGxvYy5oIgotI2Vsc2UKLQotLyogU1ZJRDIvWFBHIG1hbGxpbmZvIHN0
cnVjdHVyZSAqLwotCi1zdHJ1Y3QgbWFsbGluZm8gewotICBpbnQgYXJlbmE7ICAgIC8qIG5vbi1t
bWFwcGVkIHNwYWNlIGFsbG9jYXRlZCBmcm9tIHN5c3RlbSAqLwotICBpbnQgb3JkYmxrczsgIC8q
IG51bWJlciBvZiBmcmVlIGNodW5rcyAqLwotICBpbnQgc21ibGtzOyAgIC8qIG51bWJlciBvZiBm
YXN0YmluIGJsb2NrcyAqLwotICBpbnQgaGJsa3M7ICAgIC8qIG51bWJlciBvZiBtbWFwcGVkIHJl
Z2lvbnMgKi8KLSAgaW50IGhibGtoZDsgICAvKiBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8K
LSAgaW50IHVzbWJsa3M7ICAvKiBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLwotICBp
bnQgZnNtYmxrczsgIC8qIHNwYWNlIGF2YWlsYWJsZSBpbiBmcmVlZCBmYXN0YmluIGJsb2NrcyAq
LwotICBpbnQgdW9yZGJsa3M7IC8qIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLwotICBpbnQgZm9y
ZGJsa3M7IC8qIHRvdGFsIGZyZWUgc3BhY2UgKi8KLSAgaW50IGtlZXBjb3N0OyAvKiB0b3AtbW9z
dCwgcmVsZWFzYWJsZSAodmlhIG1hbGxvY190cmltKSBzcGFjZSAqLwotfTsKLQotLyoKLSAgU1ZJ
RC9YUEcgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFtZXRlciBudW1iZXJzIGZvciBtYWxsb3B0
LAotICBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgT25seSBvbmUgb2YgdGhlc2UgKE1f
TVhGQVNUKSBpcyB1c2VkCi0gIGluIHRoaXMgbWFsbG9jLiBUaGUgb3RoZXJzIChNX05MQkxLUywg
TV9HUkFJTiwgTV9LRUVQKSBkb24ndCBhcHBseSwKLSAgc28gc2V0dGluZyB0aGVtIGhhcyBubyBl
ZmZlY3QuIEJ1dCB0aGlzIG1hbGxvYyBhbHNvIHN1cHBvcnRzIG90aGVyCi0gIG9wdGlvbnMgaW4g
bWFsbG9wdCBkZXNjcmliZWQgYmVsb3cuCi0qLwotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLSBk
ZXNjcmlwdGlvbiBvZiBwdWJsaWMgcm91dGluZXMgLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gIG1h
bGxvYyhzaXplX3QgbikKLSAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQg
Y2h1bmsgb2YgYXQgbGVhc3QgbiBieXRlcywgb3IgbnVsbAotICBpZiBubyBzcGFjZSBpcyBhdmFp
bGFibGUuIEFkZGl0aW9uYWxseSwgb24gZmFpbHVyZSwgZXJybm8gaXMKLSAgc2V0IHRvIEVOT01F
TSBvbiBBTlNJIEMgc3lzdGVtcy4KLQotICBJZiBuIGlzIHplcm8sIG1hbGxvYyByZXR1cm5zIGEg
bWludW11bS1zaXplZCBjaHVuay4gKFRoZSBtaW5pbXVtCi0gIHNpemUgaXMgMTYgYnl0ZXMgb24g
bW9zdCAzMmJpdCBzeXN0ZW1zLCBhbmQgMjQgb3IgMzIgYnl0ZXMgb24gNjRiaXQKLSAgc3lzdGVt
cy4pICBPbiBtb3N0IHN5c3RlbXMsIHNpemVfdCBpcyBhbiB1bnNpZ25lZCB0eXBlLCBzbyBjYWxs
cwotICB3aXRoIG5lZ2F0aXZlIGFyZ3VtZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgcmVxdWVzdHMg
Zm9yIGh1Z2UgYW1vdW50cwotICBvZiBzcGFjZSwgd2hpY2ggd2lsbCBvZnRlbiBmYWlsLiBUaGUg
bWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgb2YgbgotICBkaWZmZXJzIGFjcm9zcyBzeXN0ZW1zLCBi
dXQgaXMgaW4gYWxsIGNhc2VzIGxlc3MgdGhhbiB0aGUgbWF4aW11bQotICByZXByZXNlbnRhYmxl
IHZhbHVlIG9mIGEgc2l6ZV90LgotKi8KLSNpZiBfX1NURF9DCi1Wb2lkX3QqICBwdWJsaWNfbUFM
TE9jKHNpemVfdCk7Ci0jZWxzZQotVm9pZF90KiAgcHVibGljX21BTExPYygpOwotI2VuZGlmCi0K
LS8qCi0gIGZyZWUoVm9pZF90KiBwKQotICBSZWxlYXNlcyB0aGUgY2h1bmsgb2YgbWVtb3J5IHBv
aW50ZWQgdG8gYnkgcCwgdGhhdCBoYWQgYmVlbiBwcmV2aW91c2x5Ci0gIGFsbG9jYXRlZCB1c2lu
ZyBtYWxsb2Mgb3IgYSByZWxhdGVkIHJvdXRpbmUgc3VjaCBhcyByZWFsbG9jLgotICBJdCBoYXMg
bm8gZWZmZWN0IGlmIHAgaXMgbnVsbC4gSXQgY2FuIGhhdmUgYXJiaXRyYXJ5IChpLmUuLCBiYWQh
KQotICBlZmZlY3RzIGlmIHAgaGFzIGFscmVhZHkgYmVlbiBmcmVlZC4KLQotICBVbmxlc3MgZGlz
YWJsZWQgKHVzaW5nIG1hbGxvcHQpLCBmcmVlaW5nIHZlcnkgbGFyZ2Ugc3BhY2VzIHdpbGwKLSAg
d2hlbiBwb3NzaWJsZSwgYXV0b21hdGljYWxseSB0cmlnZ2VyIG9wZXJhdGlvbnMgdGhhdCBnaXZl
Ci0gIGJhY2sgdW51c2VkIG1lbW9yeSB0byB0aGUgc3lzdGVtLCB0aHVzIHJlZHVjaW5nIHByb2dy
YW0gZm9vdHByaW50LgotKi8KLSNpZiBfX1NURF9DCi12b2lkICAgICBwdWJsaWNfZlJFZShWb2lk
X3QqKTsKLSNlbHNlCi12b2lkICAgICBwdWJsaWNfZlJFZSgpOwotI2VuZGlmCi0KLS8qCi0gIGNh
bGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7Ci0gIFJldHVybnMg
YSBwb2ludGVyIHRvIG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemUgYnl0ZXMsIHdpdGggYWxsIGxv
Y2F0aW9ucwotICBzZXQgdG8gemVyby4KLSovCi0jaWYgX19TVERfQwotVm9pZF90KiAgcHVibGlj
X2NBTExPYyhzaXplX3QsIHNpemVfdCk7Ci0jZWxzZQotVm9pZF90KiAgcHVibGljX2NBTExPYygp
OwotI2VuZGlmCi0KLS8qCi0gIHJlYWxsb2MoVm9pZF90KiBwLCBzaXplX3QgbikKLSAgUmV0dXJu
cyBhIHBvaW50ZXIgdG8gYSBjaHVuayBvZiBzaXplIG4gdGhhdCBjb250YWlucyB0aGUgc2FtZSBk
YXRhCi0gIGFzIGRvZXMgY2h1bmsgcCB1cCB0byB0aGUgbWluaW11bSBvZiAobiwgcCdzIHNpemUp
IGJ5dGVzLCBvciBudWxsCi0gIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZS4gCi0KLSAgVGhlIHJl
dHVybmVkIHBvaW50ZXIgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgcC4gVGhlIGFsZ29y
aXRobQotICBwcmVmZXJzIGV4dGVuZGluZyBwIHdoZW4gcG9zc2libGUsIG90aGVyd2lzZSBpdCBl
bXBsb3lzIHRoZQotICBlcXVpdmFsZW50IG9mIGEgbWFsbG9jLWNvcHktZnJlZSBzZXF1ZW5jZS4K
LQotICBJZiBwIGlzIG51bGwsIHJlYWxsb2MgaXMgZXF1aXZhbGVudCB0byBtYWxsb2MuICAKLQot
ICBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCByZWFsbG9jIHJldHVybnMgbnVsbCwgZXJybm8g
aXMgc2V0IChpZiBvbgotICBBTlNJKSBhbmQgcCBpcyBOT1QgZnJlZWQuCi0KLSAgaWYgbiBpcyBm
b3IgZmV3ZXIgYnl0ZXMgdGhhbiBhbHJlYWR5IGhlbGQgYnkgcCwgdGhlIG5ld2x5IHVudXNlZAot
ICBzcGFjZSBpcyBsb3BwZWQgb2ZmIGFuZCBmcmVlZCBpZiBwb3NzaWJsZS4gIFVubGVzcyB0aGUg
I2RlZmluZQotICBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgaXMgc2V0LCByZWFsbG9jIHdpdGgg
YSBzaXplIGFyZ3VtZW50IG9mCi0gIHplcm8gKHJlKWFsbG9jYXRlcyBhIG1pbmltdW0tc2l6ZWQg
Y2h1bmsuCi0KLSAgTGFyZ2UgY2h1bmtzIHRoYXQgd2VyZSBpbnRlcm5hbGx5IG9idGFpbmVkIHZp
YSBtbWFwIHdpbGwgYWx3YXlzCi0gIGJlIHJlYWxsb2NhdGVkIHVzaW5nIG1hbGxvYy1jb3B5LWZy
ZWUgc2VxdWVuY2VzIHVubGVzcwotICB0aGUgc3lzdGVtIHN1cHBvcnRzIE1SRU1BUCAoY3VycmVu
dGx5IG9ubHkgbGludXgpLgotCi0gIFRoZSBvbGQgdW5peCByZWFsbG9jIGNvbnZlbnRpb24gb2Yg
YWxsb3dpbmcgdGhlIGxhc3QtZnJlZSdkIGNodW5rCi0gIHRvIGJlIHVzZWQgYXMgYW4gYXJndW1l
bnQgdG8gcmVhbGxvYyBpcyBub3Qgc3VwcG9ydGVkLgotKi8KLSNpZiBfX1NURF9DCi1Wb2lkX3Qq
ICBwdWJsaWNfckVBTExPYyhWb2lkX3QqLCBzaXplX3QpOwotI2Vsc2UKLVZvaWRfdCogIHB1Ymxp
Y19yRUFMTE9jKCk7Ci0jZW5kaWYKLQotLyoKLSAgbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90IG4pOwotICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVu
ayBvZiBuIGJ5dGVzLCBhbGlnbmVkCi0gIGluIGFjY29yZCB3aXRoIHRoZSBhbGlnbm1lbnQgYXJn
dW1lbnQuCi0KLSAgVGhlIGFsaWdubWVudCBhcmd1bWVudCBzaG91bGQgYmUgYSBwb3dlciBvZiB0
d28uIElmIHRoZSBhcmd1bWVudCBpcwotICBub3QgYSBwb3dlciBvZiB0d28sIHRoZSBuZWFyZXN0
IGdyZWF0ZXIgcG93ZXIgaXMgdXNlZC4KLSAgOC1ieXRlIGFsaWdubWVudCBpcyBndWFyYW50ZWVk
IGJ5IG5vcm1hbCBtYWxsb2MgY2FsbHMsIHNvIGRvbid0Ci0gIGJvdGhlciBjYWxsaW5nIG1lbWFs
aWduIHdpdGggYW4gYXJndW1lbnQgb2YgOCBvciBsZXNzLgotCi0gIE92ZXJyZWxpYW5jZSBvbiBt
ZW1hbGlnbiBpcyBhIHN1cmUgd2F5IHRvIGZyYWdtZW50IHNwYWNlLgotKi8KLSNpZiBfX1NURF9D
Ci1Wb2lkX3QqICBwdWJsaWNfbUVNQUxJR24oc2l6ZV90LCBzaXplX3QpOwotI2Vsc2UKLVZvaWRf
dCogIHB1YmxpY19tRU1BTElHbigpOwotI2VuZGlmCi0KLS8qCi0gIHZhbGxvYyhzaXplX3Qgbik7
Ci0gIEVxdWl2YWxlbnQgdG8gbWVtYWxpZ24ocGFnZXNpemUsIG4pLCB3aGVyZSBwYWdlc2l6ZSBp
cyB0aGUgcGFnZQotICBzaXplIG9mIHRoZSBzeXN0ZW0uIElmIHRoZSBwYWdlc2l6ZSBpcyB1bmtu
b3duLCA0MDk2IGlzIHVzZWQuCi0qLwotI2lmIF9fU1REX0MKLVZvaWRfdCogIHB1YmxpY192QUxM
T2Moc2l6ZV90KTsKLSNlbHNlCi1Wb2lkX3QqICBwdWJsaWNfdkFMTE9jKCk7Ci0jZW5kaWYKLQot
Ci0KLS8qCi0gIG1hbGxvcHQoaW50IHBhcmFtZXRlcl9udW1iZXIsIGludCBwYXJhbWV0ZXJfdmFs
dWUpCi0gIFNldHMgdHVuYWJsZSBwYXJhbWV0ZXJzIFRoZSBmb3JtYXQgaXMgdG8gcHJvdmlkZSBh
Ci0gIChwYXJhbWV0ZXItbnVtYmVyLCBwYXJhbWV0ZXItdmFsdWUpIHBhaXIuICBtYWxsb3B0IHRo
ZW4gc2V0cyB0aGUKLSAgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdG8gdGhlIGFyZ3VtZW50IHZh
bHVlIGlmIGl0IGNhbiAoaS5lLiwgc28KLSAgbG9uZyBhcyB0aGUgdmFsdWUgaXMgbWVhbmluZ2Z1
bCksIGFuZCByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBlbHNlCi0gIDAuICBTVklEL1hQRy9BTlNJ
IGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbSBudW1iZXJzIGZvciBtYWxsb3B0LAotICBub3Jt
YWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgT25seSBvbmUgb2YgdGhlc2UgKE1fTVhGQVNUKSBp
cyB1c2VkCi0gIGluIHRoaXMgbWFsbG9jLiBUaGUgb3RoZXJzIChNX05MQkxLUywgTV9HUkFJTiwg
TV9LRUVQKSBkb24ndCBhcHBseSwKLSAgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1
dCB0aGlzIG1hbGxvYyBhbHNvIHN1cHBvcnRzIGZvdXIKLSAgb3RoZXIgb3B0aW9ucyBpbiBtYWxs
b3B0LiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuICBCcmllZmx5LCBzdXBwb3J0ZWQKLSAgcGFyYW1l
dGVycyBhcmUgYXMgZm9sbG93cyAobGlzdGVkIGRlZmF1bHRzIGFyZSBmb3IgInR5cGljYWwiCi0g
IGNvbmZpZ3VyYXRpb25zKS4KLQotICBTeW1ib2wgICAgICAgICAgICBwYXJhbSAjICAgZGVmYXVs
dCAgICBhbGxvd2VkIHBhcmFtIHZhbHVlcwotICBNX01YRkFTVCAgICAgICAgICAxICAgICAgICAg
NjQgICAgICAgICAwLTgwICAoMCBkaXNhYmxlcyBmYXN0YmlucykKLSAgTV9UUklNX1RIUkVTSE9M
RCAtMSAgICAgICAgIDI1NioxMDI0ICAgYW55ICAgKC0xVSBkaXNhYmxlcyB0cmltbWluZykKLSAg
TV9UT1BfUEFEICAgICAgICAtMiAgICAgICAgIDAgICAgICAgICAgYW55ICAKLSAgTV9NTUFQX1RI
UkVTSE9MRCAtMyAgICAgICAgIDI1NioxMDI0ICAgYW55ICAgKG9yIDAgaWYgbm8gTU1BUCBzdXBw
b3J0KQotICBNX01NQVBfTUFYICAgICAgIC00ICAgICAgICAgNjU1MzYgICAgICBhbnkgICAoMCBk
aXNhYmxlcyB1c2Ugb2YgbW1hcCkKLSovCi0jaWYgX19TVERfQwotaW50ICAgICAgcHVibGljX21B
TExPUHQoaW50LCBpbnQpOwotI2Vsc2UKLWludCAgICAgIHB1YmxpY19tQUxMT1B0KCk7Ci0jZW5k
aWYKLQotCi0vKgotICBtYWxsaW5mbygpCi0gIFJldHVybnMgKGJ5IGNvcHkpIGEgc3RydWN0IGNv
bnRhaW5pbmcgdmFyaW91cyBzdW1tYXJ5IHN0YXRpc3RpY3M6Ci0KLSAgYXJlbmE6ICAgICBjdXJy
ZW50IHRvdGFsIG5vbi1tbWFwcGVkIGJ5dGVzIGFsbG9jYXRlZCBmcm9tIHN5c3RlbSAKLSAgb3Jk
YmxrczogICB0aGUgbnVtYmVyIG9mIGZyZWUgY2h1bmtzIAotICBzbWJsa3M6ICAgIHRoZSBudW1i
ZXIgb2YgZmFzdGJpbiBibG9ja3MgKGkuZS4sIHNtYWxsIGNodW5rcyB0aGF0Ci0gICAgICAgICAg
ICAgICBoYXZlIGJlZW4gZnJlZWQgYnV0IG5vdCB1c2UgcmVzdXNlZCBvciBjb25zb2xpZGF0ZWQp
Ci0gIGhibGtzOiAgICAgY3VycmVudCBudW1iZXIgb2YgbW1hcHBlZCByZWdpb25zIAotICBoYmxr
aGQ6ICAgIHRvdGFsIGJ5dGVzIGhlbGQgaW4gbW1hcHBlZCByZWdpb25zIAotICB1c21ibGtzOiAg
IHRoZSBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZS4gVGhpcyB3aWxsIGJlIGdyZWF0ZXIK
LSAgICAgICAgICAgICAgICB0aGFuIGN1cnJlbnQgdG90YWwgaWYgdHJpbW1pbmcgaGFzIG9jY3Vy
cmVkLgotICBmc21ibGtzOiAgIHRvdGFsIGJ5dGVzIGhlbGQgaW4gZmFzdGJpbiBibG9ja3MgCi0g
IHVvcmRibGtzOiAgY3VycmVudCB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKG5vcm1hbCBvciBtbWFw
cGVkKQotICBmb3JkYmxrczogIHRvdGFsIGZyZWUgc3BhY2UgCi0gIGtlZXBjb3N0OiAgdGhlIG1h
eGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgaWRlYWxseSBiZSByZWxlYXNlZAotICAg
ICAgICAgICAgICAgYmFjayB0byBzeXN0ZW0gdmlhIG1hbGxvY190cmltLiAoImlkZWFsbHkiIG1l
YW5zIHRoYXQKLSAgICAgICAgICAgICAgIGl0IGlnbm9yZXMgcGFnZSByZXN0cmljdGlvbnMgZXRj
LikKLQotICBCZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgaW50cywgYnV0IGludGVybmFsIGJvb2tr
ZWVwaW5nIG1heQotICBiZSBrZXB0IGFzIGxvbmdzLCB0aGUgcmVwb3J0ZWQgdmFsdWVzIG1heSB3
cmFwIGFyb3VuZCB6ZXJvIGFuZCAKLSAgdGh1cyBiZSBpbmFjY3VyYXRlLgotKi8KLSNpZiBfX1NU
RF9DCi1zdHJ1Y3QgbWFsbGluZm8gcHVibGljX21BTExJTkZvKHZvaWQpOwotI2Vsc2UKLXN0cnVj
dCBtYWxsaW5mbyBwdWJsaWNfbUFMTElORm8oKTsKLSNlbmRpZgotCi0vKgotICBpbmRlcGVuZGVu
dF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUsIFZvaWRfdCog
Y2h1bmtzW10pOwotCi0gIGluZGVwZW5kZW50X2NhbGxvYyBpcyBzaW1pbGFyIHRvIGNhbGxvYywg
YnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEKLSAgc2luZ2xlIGNsZWFyZWQgc3BhY2UsIGl0IHJl
dHVybnMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gbl9lbGVtZW50cwotICBpbmRlcGVuZGVudCBl
bGVtZW50cyB0aGF0IGNhbiBob2xkIGNvbnRlbnRzIG9mIHNpemUgZWxlbV9zaXplLCBlYWNoCi0g
IG9mIHdoaWNoIHN0YXJ0cyBvdXQgY2xlYXJlZCwgYW5kIGNhbiBiZSBpbmRlcGVuZGVudGx5IGZy
ZWVkLAotICByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvIGJl
IGFkamFjZW50bHkKLSAgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3Vy
IHdpdGggbXVsdGlwbGUgY2FsbG9jcyBvcgotICBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1w
cm92ZSBjYWNoZSBsb2NhbGl0eSBpbiBzb21lCi0gIGFwcGxpY2F0aW9ucy4KLQotICBUaGUgImNo
dW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsLCB3aGljaCBpcwot
ICBwcm9iYWJseSB0aGUgbW9zdCB0eXBpY2FsIHVzYWdlKS4gSWYgaXQgaXMgbnVsbCwgdGhlIHJl
dHVybmVkIGFycmF5Ci0gIGlzIGl0c2VsZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHNob3Vs
ZCBhbHNvIGJlIGZyZWVkIHdoZW4gaXQgaXMKLSAgbm8gbG9uZ2VyIG5lZWRlZC4gT3RoZXJ3aXNl
LCB0aGUgY2h1bmtzIGFycmF5IG11c3QgYmUgb2YgYXQgbGVhc3QKLSAgbl9lbGVtZW50cyBpbiBs
ZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZSBwb2ludGVycyB0byB0aGUKLSAgY2h1bmtz
LgotCi0gIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jYWxsb2MgcmV0dXJucyB0aGlzIHBv
aW50ZXIgYXJyYXksIG9yCi0gIG51bGwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiAgSWYgbl9l
bGVtZW50cyBpcyB6ZXJvIGFuZCAiY2h1bmtzIgotICBpcyBudWxsLCBpdCByZXR1cm5zIGEgY2h1
bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVtZW50cwotICAod2hpY2ggc2hv
dWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgotCi0gIEVhY2ggZWxlbWVudCBtdXN0IGJlIGlu
ZGl2aWR1YWxseSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlcgotICBuZWVkZWQuIElmIHlvdSdk
IGxpa2UgdG8gaW5zdGVhZCBiZSBhYmxlIHRvIGZyZWUgYWxsIGF0IG9uY2UsIHlvdQotICBzaG91
bGQgaW5zdGVhZCB1c2UgcmVndWxhciBjYWxsb2MgYW5kIGFzc2lnbiBwb2ludGVycyBpbnRvIHRo
aXMKLSAgc3BhY2UgdG8gcmVwcmVzZW50IGVsZW1lbnRzLiAgKEluIHRoaXMgY2FzZSB0aG91Z2gs
IHlvdSBjYW5ub3QKLSAgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKLSAgCi0gIGluZGVw
ZW5kZW50X2NhbGxvYyBzaW1wbGlmaWVzIGFuZCBzcGVlZHMgdXAgaW1wbGVtZW50YXRpb25zIG9m
IG1hbnkKLSAga2luZHMgb2YgcG9vbHMuICBJdCBtYXkgYWxzbyBiZSB1c2VmdWwgd2hlbiBjb25z
dHJ1Y3RpbmcgbGFyZ2UgZGF0YQotICBzdHJ1Y3R1cmVzIHRoYXQgaW5pdGlhbGx5IGhhdmUgYSBm
aXhlZCBudW1iZXIgb2YgZml4ZWQtc2l6ZWQgbm9kZXMsCi0gIGJ1dCB0aGUgbnVtYmVyIGlzIG5v
dCBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCBzb21lIG9mIHRoZSBub2RlcwotICBtYXkgbGF0
ZXIgbmVlZCB0byBiZSBmcmVlZC4gRm9yIGV4YW1wbGU6Ci0KLSAgc3RydWN0IE5vZGUgeyBpbnQg
aXRlbTsgc3RydWN0IE5vZGUqIG5leHQ7IH07Ci0gIAotICBzdHJ1Y3QgTm9kZSogYnVpbGRfbGlz
dCgpIHsKLSAgICBzdHJ1Y3QgTm9kZSoqIHBvb2w7Ci0gICAgaW50IG4gPSByZWFkX251bWJlcl9v
Zl9ub2Rlc19uZWVkZWQoKTsKLSAgICBpZiAobiA8PSAwKSByZXR1cm4gMDsKLSAgICBwb29sID0g
KHN0cnVjdCBOb2RlKiopKGluZGVwZW5kZW50X2NhbGxvYyhuLCBzaXplb2Yoc3RydWN0IE5vZGUp
LCAwKTsKLSAgICBpZiAocG9vbCA9PSAwKSBkaWUoKTsgCi0gICAgLy8gb3JnYW5pemUgaW50byBh
IGxpbmtlZCBsaXN0Li4uIAotICAgIHN0cnVjdCBOb2RlKiBmaXJzdCA9IHBvb2xbMF07Ci0gICAg
Zm9yIChpID0gMDsgaSA8IG4tMTsgKytpKSAKLSAgICAgIHBvb2xbaV0tPm5leHQgPSBwb29sW2kr
MV07Ci0gICAgZnJlZShwb29sKTsgICAgIC8vIENhbiBub3cgZnJlZSB0aGUgYXJyYXkgKG9yIG5v
dCwgaWYgaXQgaXMgbmVlZGVkIGxhdGVyKQotICAgIHJldHVybiBmaXJzdDsKLSAgfQotKi8KLSNp
ZiBfX1NURF9DCi1Wb2lkX3QqKiBwdWJsaWNfaUNBTExPYyhzaXplX3QsIHNpemVfdCwgVm9pZF90
KiopOwotI2Vsc2UKLVZvaWRfdCoqIHB1YmxpY19pQ0FMTE9jKCk7Ci0jZW5kaWYKLQotLyoKLSAg
aW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXplc1tdLCBW
b2lkX3QqIGNodW5rc1tdKTsKLQotICBpbmRlcGVuZGVudF9jb21hbGxvYyBhbGxvY2F0ZXMsIGFs
bCBhdCBvbmNlLCBhIHNldCBvZiBuX2VsZW1lbnRzCi0gIGNodW5rcyB3aXRoIHNpemVzIGluZGlj
YXRlZCBpbiB0aGUgInNpemVzIiBhcnJheS4gICAgSXQgcmV0dXJucwotICBhbiBhcnJheSBvZiBw
b2ludGVycyB0byB0aGVzZSBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBjYW4gYmUKLSAgaW5kZXBl
bmRlbnRseSBmcmVlZCwgcmVhbGxvYydlZCBldGMuIFRoZSBlbGVtZW50cyBhcmUgZ3VhcmFudGVl
ZCB0bwotICBiZSBhZGphY2VudGx5IGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0
byBvY2N1ciB3aXRoCi0gIG11bHRpcGxlIGNhbGxvY3Mgb3IgbWFsbG9jcyksIHdoaWNoIG1heSBh
bHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkKLSAgaW4gc29tZSBhcHBsaWNhdGlvbnMuCi0KLSAg
VGhlICJjaHVua3MiIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCkuIElm
IGl0IGlzIG51bGwKLSAgdGhlIHJldHVybmVkIGFycmF5IGlzIGl0c2VsZiBkeW5hbWljYWxseSBh
bGxvY2F0ZWQgYW5kIHNob3VsZCBhbHNvCi0gIGJlIGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2Vy
IG5lZWRlZC4gT3RoZXJ3aXNlLCB0aGUgY2h1bmtzIGFycmF5Ci0gIG11c3QgYmUgb2YgYXQgbGVh
c3Qgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZQotICBwb2lu
dGVycyB0byB0aGUgY2h1bmtzLgotCi0gIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jb21h
bGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKLSAgbnVsbCBpZiB0aGUgYWxsb2Nh
dGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kIGNodW5rcyBpcwotICBudWxs
LCBpdCByZXR1cm5zIGEgY2h1bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVt
ZW50cwotICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgotICAKLSAgRWFj
aCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2Vy
Ci0gIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwg
YXQgb25jZSwgeW91Ci0gIHNob3VsZCBpbnN0ZWFkIHVzZSBhIHNpbmdsZSByZWd1bGFyIG1hbGxv
YywgYW5kIGFzc2lnbiBwb2ludGVycyBhdAotICBwYXJ0aWN1bGFyIG9mZnNldHMgaW4gdGhlIGFn
Z3JlZ2F0ZSBzcGFjZS4gKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdSAKLSAgY2Fubm90IGluZGVw
ZW5kZW50bHkgZnJlZSBlbGVtZW50cy4pCi0KLSAgaW5kZXBlbmRlbnRfY29tYWxsYWMgZGlmZmVy
cyBmcm9tIGluZGVwZW5kZW50X2NhbGxvYyBpbiB0aGF0IGVhY2gKLSAgZWxlbWVudCBtYXkgaGF2
ZSBhIGRpZmZlcmVudCBzaXplLCBhbmQgYWxzbyB0aGF0IGl0IGRvZXMgbm90Ci0gIGF1dG9tYXRp
Y2FsbHkgY2xlYXIgZWxlbWVudHMuCi0KLSAgaW5kZXBlbmRlbnRfY29tYWxsb2MgY2FuIGJlIHVz
ZWQgdG8gc3BlZWQgdXAgYWxsb2NhdGlvbiBpbiBjYXNlcwotICB3aGVyZSBzZXZlcmFsIHN0cnVj
dHMgb3Igb2JqZWN0cyBtdXN0IGFsd2F5cyBiZSBhbGxvY2F0ZWQgYXQgdGhlCi0gIHNhbWUgdGlt
ZS4gIEZvciBleGFtcGxlOgotCi0gIHN0cnVjdCBIZWFkIHsgLi4uIH0KLSAgc3RydWN0IEZvb3Qg
eyAuLi4gfQotCi0gIHZvaWQgc2VuZF9tZXNzYWdlKGNoYXIqIG1zZykgewotICAgIGludCBtc2ds
ZW4gPSBzdHJsZW4obXNnKTsKLSAgICBzaXplX3Qgc2l6ZXNbM10gPSB7IHNpemVvZihzdHJ1Y3Qg
SGVhZCksIG1zZ2xlbiwgc2l6ZW9mKHN0cnVjdCBGb290KSB9OwotICAgIHZvaWQqIGNodW5rc1sz
XTsKLSAgICBpZiAoaW5kZXBlbmRlbnRfY29tYWxsb2MoMywgc2l6ZXMsIGNodW5rcykgPT0gMCkK
LSAgICAgIGRpZSgpOwotICAgIHN0cnVjdCBIZWFkKiBoZWFkID0gKHN0cnVjdCBIZWFkKikoY2h1
bmtzWzBdKTsKLSAgICBjaGFyKiAgICAgICAgYm9keSA9IChjaGFyKikoY2h1bmtzWzFdKTsKLSAg
ICBzdHJ1Y3QgRm9vdCogZm9vdCA9IChzdHJ1Y3QgRm9vdCopKGNodW5rc1syXSk7Ci0gICAgLy8g
Li4uCi0gIH0KLQotICBJbiBnZW5lcmFsIHRob3VnaCwgaW5kZXBlbmRlbnRfY29tYWxsb2MgaXMg
d29ydGggdXNpbmcgb25seSBmb3IKLSAgbGFyZ2VyIHZhbHVlcyBvZiBuX2VsZW1lbnRzLiBGb3Ig
c21hbGwgdmFsdWVzLCB5b3UgcHJvYmFibHkgd29uJ3QKLSAgZGV0ZWN0IGVub3VnaCBkaWZmZXJl
bmNlIGZyb20gc2VyaWVzIG9mIG1hbGxvYyBjYWxscyB0byBib3RoZXIuCi0KLSAgT3ZlcnVzZSBv
ZiBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gaW5jcmVhc2Ugb3ZlcmFsbCBtZW1vcnkgdXNhZ2Us
Ci0gIHNpbmNlIGl0IGNhbm5vdCByZXVzZSBleGlzdGluZyBub25jb250aWd1b3VzIHNtYWxsIGNo
dW5rcyB0aGF0Ci0gIG1pZ2h0IGJlIGF2YWlsYWJsZSBmb3Igc29tZSBvZiB0aGUgZWxlbWVudHMu
Ci0qLwotI2lmIF9fU1REX0MKLVZvaWRfdCoqIHB1YmxpY19pQ09NQUxMT2Moc2l6ZV90LCBzaXpl
X3QqLCBWb2lkX3QqKik7Ci0jZWxzZQotVm9pZF90KiogcHVibGljX2lDT01BTExPYygpOwotI2Vu
ZGlmCi0KLQotLyoKLSAgcHZhbGxvYyhzaXplX3Qgbik7Ci0gIEVxdWl2YWxlbnQgdG8gdmFsbG9j
KG1pbmltdW0tcGFnZS10aGF0LWhvbGRzKG4pKSwgdGhhdCBpcywKLSAgcm91bmQgdXAgbiB0byBu
ZWFyZXN0IHBhZ2VzaXplLgotICovCi0jaWYgX19TVERfQwotVm9pZF90KiAgcHVibGljX3BWQUxM
T2Moc2l6ZV90KTsKLSNlbHNlCi1Wb2lkX3QqICBwdWJsaWNfcFZBTExPYygpOwotI2VuZGlmCi0K
LS8qCi0gIGNmcmVlKFZvaWRfdCogcCk7Ci0gIEVxdWl2YWxlbnQgdG8gZnJlZShwKS4KLQotICBj
ZnJlZSBpcyBuZWVkZWQvZGVmaW5lZCBvbiBzb21lIHN5c3RlbXMgdGhhdCBwYWlyIGl0IHdpdGgg
Y2FsbG9jLAotICBmb3Igb2RkIGhpc3RvcmljYWwgcmVhc29ucyAoc3VjaCBhczogY2ZyZWUgaXMg
dXNlZCBpbiBleGFtcGxlIAotICBjb2RlIGluIHRoZSBmaXJzdCBlZGl0aW9uIG9mIEsmUikuCi0q
LwotI2lmIF9fU1REX0MKLXZvaWQgICAgIHB1YmxpY19jRlJFZShWb2lkX3QqKTsKLSNlbHNlCi12
b2lkICAgICBwdWJsaWNfY0ZSRWUoKTsKLSNlbmRpZgotCi0vKgotICBtYWxsb2NfdHJpbShzaXpl
X3QgcGFkKTsKLQotICBJZiBwb3NzaWJsZSwgZ2l2ZXMgbWVtb3J5IGJhY2sgdG8gdGhlIHN5c3Rl
bSAodmlhIG5lZ2F0aXZlCi0gIGFyZ3VtZW50cyB0byBzYnJrKSBpZiB0aGVyZSBpcyB1bnVzZWQg
bWVtb3J5IGF0IHRoZSBgaGlnaCcgZW5kIG9mCi0gIHRoZSBtYWxsb2MgcG9vbC4gWW91IGNhbiBj
YWxsIHRoaXMgYWZ0ZXIgZnJlZWluZyBsYXJnZSBibG9ja3Mgb2YKLSAgbWVtb3J5IHRvIHBvdGVu
dGlhbGx5IHJlZHVjZSB0aGUgc3lzdGVtLWxldmVsIG1lbW9yeSByZXF1aXJlbWVudHMKLSAgb2Yg
YSBwcm9ncmFtLiBIb3dldmVyLCBpdCBjYW5ub3QgZ3VhcmFudGVlIHRvIHJlZHVjZSBtZW1vcnku
IFVuZGVyCi0gIHNvbWUgYWxsb2NhdGlvbiBwYXR0ZXJucywgc29tZSBsYXJnZSBmcmVlIGJsb2Nr
cyBvZiBtZW1vcnkgd2lsbCBiZQotICBsb2NrZWQgYmV0d2VlbiB0d28gdXNlZCBjaHVua3MsIHNv
IHRoZXkgY2Fubm90IGJlIGdpdmVuIGJhY2sgdG8KLSAgdGhlIHN5c3RlbS4KLSAgCi0gIFRoZSBg
cGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZnJl
ZQotICB0cmFpbGluZyBzcGFjZSB0byBsZWF2ZSB1bnRyaW1tZWQuIElmIHRoaXMgYXJndW1lbnQg
aXMgemVybywKLSAgb25seSB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIG1haW50YWlu
IGludGVybmFsIGRhdGEKLSAgc3RydWN0dXJlcyB3aWxsIGJlIGxlZnQgKG9uZSBwYWdlIG9yIGxl
c3MpLiBOb24temVybyBhcmd1bWVudHMKLSAgY2FuIGJlIHN1cHBsaWVkIHRvIG1haW50YWluIGVu
b3VnaCB0cmFpbGluZyBzcGFjZSB0byBzZXJ2aWNlCi0gIGZ1dHVyZSBleHBlY3RlZCBhbGxvY2F0
aW9ucyB3aXRob3V0IGhhdmluZyB0byByZS1vYnRhaW4gbWVtb3J5Ci0gIGZyb20gdGhlIHN5c3Rl
bS4KLSAgCi0gIE1hbGxvY190cmltIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSByZWxlYXNlZCBh
bnkgbWVtb3J5LCBlbHNlIDAuCi0gIE9uIHN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCAibmVn
YXRpdmUgc2Jya3MiLCBpdCB3aWxsIGFsd2F5cwotICBycmV0dXJuIDAuCi0qLwotI2lmIF9fU1RE
X0MKLWludCAgICAgIHB1YmxpY19tVFJJbShzaXplX3QpOwotI2Vsc2UKLWludCAgICAgIHB1Ymxp
Y19tVFJJbSgpOwotI2VuZGlmCi0KLS8qCi0gIG1hbGxvY191c2FibGVfc2l6ZShWb2lkX3QqIHAp
OwotCi0gIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB5b3UgY2FuIGFjdHVhbGx5IHVzZSBp
bgotICBhbiBhbGxvY2F0ZWQgY2h1bmssIHdoaWNoIG1heSBiZSBtb3JlIHRoYW4geW91IHJlcXVl
c3RlZCAoYWx0aG91Z2gKLSAgb2Z0ZW4gbm90KSBkdWUgdG8gYWxpZ25tZW50IGFuZCBtaW5pbXVt
IHNpemUgY29uc3RyYWludHMuCi0gIFlvdSBjYW4gdXNlIHRoaXMgbWFueSBieXRlcyB3aXRob3V0
IHdvcnJ5aW5nIGFib3V0Ci0gIG92ZXJ3cml0aW5nIG90aGVyIGFsbG9jYXRlZCBvYmplY3RzLiBU
aGlzIGlzIG5vdCBhIHBhcnRpY3VsYXJseSBncmVhdAotICBwcm9ncmFtbWluZyBwcmFjdGljZS4g
bWFsbG9jX3VzYWJsZV9zaXplIGNhbiBiZSBtb3JlIHVzZWZ1bCBpbgotICBkZWJ1Z2dpbmcgYW5k
IGFzc2VydGlvbnMsIGZvciBleGFtcGxlOgotCi0gIHAgPSBtYWxsb2Mobik7Ci0gIGFzc2VydCht
YWxsb2NfdXNhYmxlX3NpemUocCkgPj0gMjU2KTsKLQotKi8KLSNpZiBfX1NURF9DCi1zaXplX3Qg
ICBwdWJsaWNfbVVTQUJMZShWb2lkX3QqKTsKLSNlbHNlCi1zaXplX3QgICBwdWJsaWNfbVVTQUJM
ZSgpOwotI2VuZGlmCi0KLS8qCi0gIG1hbGxvY19zdGF0cygpOwotICBQcmludHMgb24gc3RkZXJy
IHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCi0gIHZp
YSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0
aGFuCi0gIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwg
YW5kIHRoZSBjdXJyZW50Ci0gIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAo
b3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAotICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMg
dGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKLSAgbnVtYmVyIHJlcXVlc3Rl
ZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAotICBiZWNhdXNl
IG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVk
ZXMKLSAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkg
YmUgZ3JlYXRlciB0aGFuCi0gIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFy
ZSBhbGxvY2F0ZWQuCi0KLSAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVt
IG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgotICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2Fs
bHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucwotICAobm9ybWFsbHkgc2Jy
aykgb3V0c2lkZSBvZiBtYWxsb2MuCi0KLSAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBt
b3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCi0gIE1vcmUgaW5mb3JtYXRpb24g
Y2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCi0KLSovCi0jaWYgX19TVERfQwot
dm9pZCAgICAgcHVibGljX21TVEFUcygpOwotI2Vsc2UKLXZvaWQgICAgIHB1YmxpY19tU1RBVHMo
KTsKLSNlbmRpZgotCi0vKiBtYWxsb3B0IHR1bmluZyBvcHRpb25zICovCi0KLS8qCi0gIE1fTVhG
QVNUIGlzIHRoZSBtYXhpbXVtIHJlcXVlc3Qgc2l6ZSB1c2VkIGZvciAiZmFzdGJpbnMiLCBzcGVj
aWFsIGJpbnMKLSAgdGhhdCBob2xkIHJldHVybmVkIGNodW5rcyB3aXRob3V0IGNvbnNvbGlkYXRp
bmcgdGhlaXIgc3BhY2VzLiBUaGlzCi0gIGVuYWJsZXMgZnV0dXJlIHJlcXVlc3RzIGZvciBjaHVu
a3Mgb2YgdGhlIHNhbWUgc2l6ZSB0byBiZSBoYW5kbGVkCi0gIHZlcnkgcXVpY2tseSwgYnV0IGNh
biBpbmNyZWFzZSBmcmFnbWVudGF0aW9uLCBhbmQgdGh1cyBpbmNyZWFzZSB0aGUKLSAgb3ZlcmFs
bCBtZW1vcnkgZm9vdHByaW50IG9mIGEgcHJvZ3JhbS4KLQotICBUaGlzIG1hbGxvYyBtYW5hZ2Vz
IGZhc3RiaW5zIHZlcnkgY29uc2VydmF0aXZlbHkgeWV0IHN0aWxsCi0gIGVmZmljaWVudGx5LCBz
byBmcmFnbWVudGF0aW9uIGlzIHJhcmVseSBhIHByb2JsZW0gZm9yIHZhbHVlcyBsZXNzCi0gIHRo
YW4gb3IgZXF1YWwgdG8gdGhlIGRlZmF1bHQuICBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUg
b2YgTVhGQVNUCi0gIGlzIDgwLiBZb3Ugd291bGRuJ3Qgd2FudCBpdCBhbnkgaGlnaGVyIHRoYW4g
dGhpcyBhbnl3YXkuICBGYXN0YmlucwotICBhcmUgZGVzaWduZWQgZXNwZWNpYWxseSBmb3IgdXNl
IHdpdGggbWFueSBzbWFsbCBzdHJ1Y3RzLCBvYmplY3RzIG9yCi0gIHN0cmluZ3MgLS0gdGhlIGRl
ZmF1bHQgaGFuZGxlcyBzdHJ1Y3RzL29iamVjdHMvYXJyYXlzIHdpdGggc2l6ZXMgdXAKLSAgdG8g
MTYgNGJ5dGUgZmllbGRzLCBvciBzbWFsbCBzdHJpbmdzIHJlcHJlc2VudGluZyB3b3JkcywgdG9r
ZW5zLAotICBldGMuIFVzaW5nIGZhc3RiaW5zIGZvciBsYXJnZXIgb2JqZWN0cyBub3JtYWxseSB3
b3JzZW5zCi0gIGZyYWdtZW50YXRpb24gd2l0aG91dCBpbXByb3Zpbmcgc3BlZWQuCi0KLSAgTV9N
WEZBU1QgaXMgc2V0IGluIFJFUVVFU1Qgc2l6ZSB1bml0cy4gSXQgaXMgaW50ZXJuYWxseSB1c2Vk
IGluCi0gIGNodW5rc2l6ZSB1bml0cywgd2hpY2ggYWRkcyBwYWRkaW5nIGFuZCBhbGlnbm1lbnQu
ICBZb3UgY2FuIHJlZHVjZQotICBNX01YRkFTVCB0byAwIHRvIGRpc2FibGUgYWxsIHVzZSBvZiBm
YXN0Ymlucy4gIFRoaXMgY2F1c2VzIHRoZSBtYWxsb2MKLSAgYWxnb3JpdGhtIHRvIGJlIGEgY2xv
c2VyIGFwcHJveGltYXRpb24gb2YgZmlmby1iZXN0LWZpdCBpbiBhbGwgY2FzZXMsCi0gIG5vdCBq
dXN0IGZvciBsYXJnZXIgcmVxdWVzdHMsIGJ1dCB3aWxsIGdlbmVyYWxseSBjYXVzZSBpdCB0byBi
ZQotICBzbG93ZXIuCi0qLwotCi0KLS8qIE1fTVhGQVNUIGlzIGEgc3RhbmRhcmQgU1ZJRC9YUEcg
dHVuaW5nIG9wdGlvbiwgdXN1YWxseSBsaXN0ZWQgaW4gbWFsbG9jLmggKi8KLSNpZm5kZWYgTV9N
WEZBU1QKLSNkZWZpbmUgTV9NWEZBU1QgICAgICAgICAgICAxICAgIAotI2VuZGlmCi0KLSNpZm5k
ZWYgREVGQVVMVF9NWEZBU1QKLSNkZWZpbmUgREVGQVVMVF9NWEZBU1QgICAgIDY0Ci0jZW5kaWYK
LQotCi0vKgotICBNX1RSSU1fVEhSRVNIT0xEIGlzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiB1bnVz
ZWQgdG9wLW1vc3QgbWVtb3J5Ci0gIHRvIGtlZXAgYmVmb3JlIHJlbGVhc2luZyB2aWEgbWFsbG9j
X3RyaW0gaW4gZnJlZSgpLgotCi0gIEF1dG9tYXRpYyB0cmltbWluZyBpcyBtYWlubHkgdXNlZnVs
IGluIGxvbmctbGl2ZWQgcHJvZ3JhbXMuCi0gIEJlY2F1c2UgdHJpbW1pbmcgdmlhIHNicmsgY2Fu
IGJlIHNsb3cgb24gc29tZSBzeXN0ZW1zLCBhbmQgY2FuCi0gIHNvbWV0aW1lcyBiZSB3YXN0ZWZ1
bCAoaW4gY2FzZXMgd2hlcmUgcHJvZ3JhbXMgaW1tZWRpYXRlbHkKLSAgYWZ0ZXJ3YXJkIGFsbG9j
YXRlIG1vcmUgbGFyZ2UgY2h1bmtzKSB0aGUgdmFsdWUgc2hvdWxkIGJlIGhpZ2gKLSAgZW5vdWdo
IHNvIHRoYXQgeW91ciBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3b3VsZCBpbXByb3ZlIGJ5
Ci0gIHJlbGVhc2luZyB0aGlzIG11Y2ggbWVtb3J5LgotCi0gIFRoZSB0cmltIHRocmVzaG9sZCBh
bmQgdGhlIG1tYXAgY29udHJvbCBwYXJhbWV0ZXJzIChzZWUgYmVsb3cpCi0gIGNhbiBiZSB0cmFk
ZWQgb2ZmIHdpdGggb25lIGFub3RoZXIuIFRyaW1taW5nIGFuZCBtbWFwcGluZyBhcmUKLSAgdHdv
IGRpZmZlcmVudCB3YXlzIG9mIHJlbGVhc2luZyB1bnVzZWQgbWVtb3J5IGJhY2sgdG8gdGhlCi0g
IHN5c3RlbS4gQmV0d2VlbiB0aGVzZSB0d28sIGl0IGlzIG9mdGVuIHBvc3NpYmxlIHRvIGtlZXAK
LSAgc3lzdGVtLWxldmVsIGRlbWFuZHMgb2YgYSBsb25nLWxpdmVkIHByb2dyYW0gZG93biB0byBh
IGJhcmUKLSAgbWluaW11bS4gRm9yIGV4YW1wbGUsIGluIG9uZSB0ZXN0IHN1aXRlIG9mIHNlc3Np
b25zIG1lYXN1cmluZwotICB0aGUgWEY4NiBYIHNlcnZlciBvbiBMaW51eCwgdXNpbmcgYSB0cmlt
IHRocmVzaG9sZCBvZiAxMjhLIGFuZCBhCi0gIG1tYXAgdGhyZXNob2xkIG9mIDE5MksgbGVkIHRv
IG5lYXItbWluaW1hbCBsb25nIHRlcm0gcmVzb3VyY2UKLSAgY29uc3VtcHRpb24uCi0KLSAgSWYg
eW91IGFyZSB1c2luZyB0aGlzIG1hbGxvYyBpbiBhIGxvbmctbGl2ZWQgcHJvZ3JhbSwgaXQgc2hv
dWxkCi0gIHBheSB0byBleHBlcmltZW50IHdpdGggdGhlc2UgdmFsdWVzLiAgQXMgYSByb3VnaCBn
dWlkZSwgeW91Ci0gIG1pZ2h0IHNldCB0byBhIHZhbHVlIGNsb3NlIHRvIHRoZSBhdmVyYWdlIHNp
emUgb2YgYSBwcm9jZXNzCi0gIChwcm9ncmFtKSBydW5uaW5nIG9uIHlvdXIgc3lzdGVtLiAgUmVs
ZWFzaW5nIHRoaXMgbXVjaCBtZW1vcnkKLSAgd291bGQgYWxsb3cgc3VjaCBhIHByb2Nlc3MgdG8g
cnVuIGluIG1lbW9yeS4gIEdlbmVyYWxseSwgaXQncwotICB3b3J0aCBpdCB0byB0dW5lIGZvciB0
cmltbWluZyByYXRoZXIgdGhhbSBtZW1vcnkgbWFwcGluZyB3aGVuIGEKLSAgcHJvZ3JhbSB1bmRl
cmdvZXMgcGhhc2VzIHdoZXJlIHNldmVyYWwgbGFyZ2UgY2h1bmtzIGFyZQotICBhbGxvY2F0ZWQg
YW5kIHJlbGVhc2VkIGluIHdheXMgdGhhdCBjYW4gcmV1c2UgZWFjaCBvdGhlcidzCi0gIHN0b3Jh
Z2UsIHBlcmhhcHMgbWl4ZWQgd2l0aCBwaGFzZXMgd2hlcmUgdGhlcmUgYXJlIG5vIHN1Y2gKLSAg
Y2h1bmtzIGF0IGFsbC4gIEFuZCBpbiB3ZWxsLWJlaGF2ZWQgbG9uZy1saXZlZCBwcm9ncmFtcywK
LSAgY29udHJvbGxpbmcgcmVsZWFzZSBvZiBsYXJnZSBibG9ja3MgdmlhIHRyaW1taW5nIHZlcnN1
cyBtYXBwaW5nCi0gIGlzIHVzdWFsbHkgZmFzdGVyLgotCi0gIEhvd2V2ZXIsIGluIG1vc3QgcHJv
Z3JhbXMsIHRoZXNlIHBhcmFtZXRlcnMgc2VydmUgbWFpbmx5IGFzCi0gIHByb3RlY3Rpb24gYWdh
aW5zdCB0aGUgc3lzdGVtLWxldmVsIGVmZmVjdHMgb2YgY2FycnlpbmcgYXJvdW5kCi0gIG1hc3Np
dmUgYW1vdW50cyBvZiB1bm5lZWRlZCBtZW1vcnkuIFNpbmNlIGZyZXF1ZW50IGNhbGxzIHRvCi0g
IHNicmssIG1tYXAsIGFuZCBtdW5tYXAgb3RoZXJ3aXNlIGRlZ3JhZGUgcGVyZm9ybWFuY2UsIHRo
ZSBkZWZhdWx0Ci0gIHBhcmFtZXRlcnMgYXJlIHNldCB0byByZWxhdGl2ZWx5IGhpZ2ggdmFsdWVz
IHRoYXQgc2VydmUgb25seSBhcwotICBzYWZlZ3VhcmRzLgotCi0gIFRoZSB0cmltIHZhbHVlIG11
c3QgYmUgZ3JlYXRlciB0aGFuIHBhZ2Ugc2l6ZSB0byBoYXZlIGFueSB1c2VmdWwKLSAgZWZmZWN0
LiAgVG8gZGlzYWJsZSB0cmltbWluZyBjb21wbGV0ZWx5LCB5b3UgY2FuIHNldCB0byAKLSAgKHVu
c2lnbmVkIGxvbmcpKC0xKQotCi0gIFRyaW0gc2V0dGluZ3MgaW50ZXJhY3Qgd2l0aCBmYXN0Ymlu
IChNWEZBU1QpIHNldHRpbmdzOiBVbmxlc3MKLSAgVFJJTV9GQVNUQklOUyBpcyBkZWZpbmVkLCBh
dXRvbWF0aWMgdHJpbW1pbmcgbmV2ZXIgdGFrZXMgcGxhY2UgdXBvbgotICBmcmVlaW5nIGEgY2h1
bmsgd2l0aCBzaXplIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNWEZBU1QuIFRyaW1taW5nIGlzCi0g
IGluc3RlYWQgZGVsYXllZCB1bnRpbCBzdWJzZXF1ZW50IGZyZWVpbmcgb2YgbGFyZ2VyIGNodW5r
cy4gSG93ZXZlciwKLSAgeW91IGNhbiBzdGlsbCBmb3JjZSBhbiBhdHRlbXB0ZWQgdHJpbSBieSBj
YWxsaW5nIG1hbGxvY190cmltLgotCi0gIEFsc28sIHRyaW1taW5nIGlzIG5vdCBnZW5lcmFsbHkg
cG9zc2libGUgaW4gY2FzZXMgd2hlcmUKLSAgdGhlIG1haW4gYXJlbmEgaXMgb2J0YWluZWQgdmlh
IG1tYXAuCi0KLSAgTm90ZSB0aGF0IHRoZSB0cmljayBzb21lIHBlb3BsZSB1c2Ugb2YgbWFsbG9j
aW5nIGEgaHVnZSBzcGFjZSBhbmQKLSAgdGhlbiBmcmVlaW5nIGl0IGF0IHByb2dyYW0gc3RhcnR1
cCwgaW4gYW4gYXR0ZW1wdCB0byByZXNlcnZlIHN5c3RlbQotICBtZW1vcnksIGRvZXNuJ3QgaGF2
ZSB0aGUgaW50ZW5kZWQgZWZmZWN0IHVuZGVyIGF1dG9tYXRpYyB0cmltbWluZywKLSAgc2luY2Ug
dGhhdCBtZW1vcnkgd2lsbCBpbW1lZGlhdGVseSBiZSByZXR1cm5lZCB0byB0aGUgc3lzdGVtLgot
Ki8KLQotI2RlZmluZSBNX1RSSU1fVEhSRVNIT0xEICAgICAgIC0xCi0KLSNpZm5kZWYgREVGQVVM
VF9UUklNX1RIUkVTSE9MRAotI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEICgyNTYgKiAx
MDI0KQotI2VuZGlmCi0KLS8qCi0gIE1fVE9QX1BBRCBpcyB0aGUgYW1vdW50IG9mIGV4dHJhIGBw
YWRkaW5nJyBzcGFjZSB0byBhbGxvY2F0ZSBvcgotICByZXRhaW4gd2hlbmV2ZXIgc2JyayBpcyBj
YWxsZWQuIEl0IGlzIHVzZWQgaW4gdHdvIHdheXMgaW50ZXJuYWxseToKLQotICAqIFdoZW4gc2Jy
ayBpcyBjYWxsZWQgdG8gZXh0ZW5kIHRoZSB0b3Agb2YgdGhlIGFyZW5hIHRvIHNhdGlzZnkKLSAg
YSBuZXcgbWFsbG9jIHJlcXVlc3QsIHRoaXMgbXVjaCBwYWRkaW5nIGlzIGFkZGVkIHRvIHRoZSBz
YnJrCi0gIHJlcXVlc3QuCi0KLSAgKiBXaGVuIG1hbGxvY190cmltIGlzIGNhbGxlZCBhdXRvbWF0
aWNhbGx5IGZyb20gZnJlZSgpLAotICBpdCBpcyB1c2VkIGFzIHRoZSBgcGFkJyBhcmd1bWVudC4K
LQotICBJbiBib3RoIGNhc2VzLCB0aGUgYWN0dWFsIGFtb3VudCBvZiBwYWRkaW5nIGlzIHJvdW5k
ZWQKLSAgc28gdGhhdCB0aGUgZW5kIG9mIHRoZSBhcmVuYSBpcyBhbHdheXMgYSBzeXN0ZW0gcGFn
ZSBib3VuZGFyeS4KLQotICBUaGUgbWFpbiByZWFzb24gZm9yIHVzaW5nIHBhZGRpbmcgaXMgdG8g
YXZvaWQgY2FsbGluZyBzYnJrIHNvCi0gIG9mdGVuLiBIYXZpbmcgZXZlbiBhIHNtYWxsIHBhZCBn
cmVhdGx5IHJlZHVjZXMgdGhlIGxpa2VsaWhvb2QKLSAgdGhhdCBuZWFybHkgZXZlcnkgbWFsbG9j
IHJlcXVlc3QgZHVyaW5nIHByb2dyYW0gc3RhcnQtdXAgKG9yCi0gIGFmdGVyIHRyaW1taW5nKSB3
aWxsIGludm9rZSBzYnJrLCB3aGljaCBuZWVkbGVzc2x5IHdhc3RlcwotICB0aW1lLgotCi0gIEF1
dG9tYXRpYyByb3VuZGluZy11cCB0byBwYWdlLXNpemUgdW5pdHMgaXMgbm9ybWFsbHkgc3VmZmlj
aWVudAotICB0byBhdm9pZCBtZWFzdXJhYmxlIG92ZXJoZWFkLCBzbyB0aGUgZGVmYXVsdCBpcyAw
LiAgSG93ZXZlciwgaW4KLSAgc3lzdGVtcyB3aGVyZSBzYnJrIGlzIHJlbGF0aXZlbHkgc2xvdywg
aXQgY2FuIHBheSB0byBpbmNyZWFzZQotICB0aGlzIHZhbHVlLCBhdCB0aGUgZXhwZW5zZSBvZiBj
YXJyeWluZyBhcm91bmQgbW9yZSBtZW1vcnkgdGhhbgotICB0aGUgcHJvZ3JhbSBuZWVkcy4KLSov
Ci0KLSNkZWZpbmUgTV9UT1BfUEFEICAgICAgICAgICAgICAtMgotCi0jaWZuZGVmIERFRkFVTFRf
VE9QX1BBRAotI2RlZmluZSBERUZBVUxUX1RPUF9QQUQgICAgICAgICgwKQotI2VuZGlmCi0KLS8q
Ci0gIE1fTU1BUF9USFJFU0hPTEQgaXMgdGhlIHJlcXVlc3Qgc2l6ZSB0aHJlc2hvbGQgZm9yIHVz
aW5nIG1tYXAoKQotICB0byBzZXJ2aWNlIGEgcmVxdWVzdC4gUmVxdWVzdHMgb2YgYXQgbGVhc3Qg
dGhpcyBzaXplIHRoYXQgY2Fubm90Ci0gIGJlIGFsbG9jYXRlZCB1c2luZyBhbHJlYWR5LWV4aXN0
aW5nIHNwYWNlIHdpbGwgYmUgc2VydmljZWQgdmlhIG1tYXAuCi0gIChJZiBlbm91Z2ggbm9ybWFs
IGZyZWVkIHNwYWNlIGFscmVhZHkgZXhpc3RzIGl0IGlzIHVzZWQgaW5zdGVhZC4pCi0KLSAgVXNp
bmcgbW1hcCBzZWdyZWdhdGVzIHJlbGF0aXZlbHkgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSBzbyB0
aGF0Ci0gIHRoZXkgY2FuIGJlIGluZGl2aWR1YWxseSBvYnRhaW5lZCBhbmQgcmVsZWFzZWQgZnJv
bSB0aGUgaG9zdAotICBzeXN0ZW0uIEEgcmVxdWVzdCBzZXJ2aWNlZCB0aHJvdWdoIG1tYXAgaXMg
bmV2ZXIgcmV1c2VkIGJ5IGFueQotICBvdGhlciByZXF1ZXN0IChhdCBsZWFzdCBub3QgZGlyZWN0
bHk7IHRoZSBzeXN0ZW0gbWF5IGp1c3Qgc28KLSAgaGFwcGVuIHRvIHJlbWFwIHN1Y2Nlc3NpdmUg
cmVxdWVzdHMgdG8gdGhlIHNhbWUgbG9jYXRpb25zKS4KLQotICBTZWdyZWdhdGluZyBzcGFjZSBp
biB0aGlzIHdheSBoYXMgdGhlIGJlbmVmaXRzIHRoYXQ6Ci0KLSAgIDEuIE1tYXBwZWQgc3BhY2Ug
Y2FuIEFMV0FZUyBiZSBpbmRpdmlkdWFsbHkgcmVsZWFzZWQgYmFjayAKLSAgICAgIHRvIHRoZSBz
eXN0ZW0sIHdoaWNoIGhlbHBzIGtlZXAgdGhlIHN5c3RlbSBsZXZlbCBtZW1vcnkgCi0gICAgICBk
ZW1hbmRzIG9mIGEgbG9uZy1saXZlZCBwcm9ncmFtIGxvdy4gCi0gICAyLiBNYXBwZWQgbWVtb3J5
IGNhbiBuZXZlciBiZWNvbWUgYGxvY2tlZCcgYmV0d2VlbgotICAgICAgb3RoZXIgY2h1bmtzLCBh
cyBjYW4gaGFwcGVuIHdpdGggbm9ybWFsbHkgYWxsb2NhdGVkIGNodW5rcywgd2hpY2gKLSAgICAg
IG1lYW5zIHRoYXQgZXZlbiB0cmltbWluZyB2aWEgbWFsbG9jX3RyaW0gd291bGQgbm90IHJlbGVh
c2UgdGhlbS4KLSAgIDMuIE9uIHNvbWUgc3lzdGVtcyB3aXRoICJob2xlcyIgaW4gYWRkcmVzcyBz
cGFjZXMsIG1tYXAgY2FuIG9idGFpbgotICAgICAgbWVtb3J5IHRoYXQgc2JyayBjYW5ub3QuCi0K
LSAgSG93ZXZlciwgaXQgaGFzIHRoZSBkaXNhZHZhbnRhZ2VzIHRoYXQ6Ci0KLSAgIDEuIFRoZSBz
cGFjZSBjYW5ub3QgYmUgcmVjbGFpbWVkLCBjb25zb2xpZGF0ZWQsIGFuZCB0aGVuCi0gICAgICB1
c2VkIHRvIHNlcnZpY2UgbGF0ZXIgcmVxdWVzdHMsIGFzIGhhcHBlbnMgd2l0aCBub3JtYWwgY2h1
bmtzLgotICAgMi4gSXQgY2FuIGxlYWQgdG8gbW9yZSB3YXN0YWdlIGJlY2F1c2Ugb2YgbW1hcCBw
YWdlIGFsaWdubWVudAotICAgICAgcmVxdWlyZW1lbnRzCi0gICAzLiBJdCBjYXVzZXMgbWFsbG9j
IHBlcmZvcm1hbmNlIHRvIGJlIG1vcmUgZGVwZW5kZW50IG9uIGhvc3QKLSAgICAgIHN5c3RlbSBt
ZW1vcnkgbWFuYWdlbWVudCBzdXBwb3J0IHJvdXRpbmVzIHdoaWNoIG1heSB2YXJ5IGluCi0gICAg
ICBpbXBsZW1lbnRhdGlvbiBxdWFsaXR5IGFuZCBtYXkgaW1wb3NlIGFyYml0cmFyeQotICAgICAg
bGltaXRhdGlvbnMuIEdlbmVyYWxseSwgc2VydmljaW5nIGEgcmVxdWVzdCB2aWEgbm9ybWFsCi0g
ICAgICBtYWxsb2Mgc3RlcHMgaXMgZmFzdGVyIHRoYW4gZ29pbmcgdGhyb3VnaCBhIHN5c3RlbSdz
IG1tYXAuCi0KLSAgVGhlIGFkdmFudGFnZXMgb2YgbW1hcCBuZWFybHkgYWx3YXlzIG91dHdlaWdo
IGRpc2FkdmFudGFnZXMgZm9yCi0gICJsYXJnZSIgY2h1bmtzLCBidXQgdGhlIHZhbHVlIG9mICJs
YXJnZSIgdmFyaWVzIGFjcm9zcyBzeXN0ZW1zLiAgVGhlCi0gIGRlZmF1bHQgaXMgYW4gZW1waXJp
Y2FsbHkgZGVyaXZlZCB2YWx1ZSB0aGF0IHdvcmtzIHdlbGwgaW4gbW9zdAotICBzeXN0ZW1zLgot
Ki8KLQotI2RlZmluZSBNX01NQVBfVEhSRVNIT0xEICAgICAgLTMKLQotI2lmbmRlZiBERUZBVUxU
X01NQVBfVEhSRVNIT0xECi0jZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKDI1NiAqIDEw
MjQpCi0jZW5kaWYKLQotLyoKLSAgTV9NTUFQX01BWCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2Yg
cmVxdWVzdHMgdG8gc2ltdWx0YW5lb3VzbHkKLSAgc2VydmljZSB1c2luZyBtbWFwLiBUaGlzIHBh
cmFtZXRlciBleGlzdHMgYmVjYXVzZQotLiBTb21lIHN5c3RlbXMgaGF2ZSBhIGxpbWl0ZWQgbnVt
YmVyIG9mIGludGVybmFsIHRhYmxlcyBmb3IKLSAgdXNlIGJ5IG1tYXAsIGFuZCB1c2luZyBtb3Jl
IHRoYW4gYSBmZXcgb2YgdGhlbSBtYXkgZGVncmFkZQotICBwZXJmb3JtYW5jZS4KLQotICBUaGUg
ZGVmYXVsdCBpcyBzZXQgdG8gYSB2YWx1ZSB0aGF0IHNlcnZlcyBvbmx5IGFzIGEgc2FmZWd1YXJk
LgotICBTZXR0aW5nIHRvIDAgZGlzYWJsZXMgdXNlIG9mIG1tYXAgZm9yIHNlcnZpY2luZyBsYXJn
ZSByZXF1ZXN0cy4gIElmCi0gIEhBVkVfTU1BUCBpcyBub3Qgc2V0LCB0aGUgZGVmYXVsdCB2YWx1
ZSBpcyAwLCBhbmQgYXR0ZW1wdHMgdG8gc2V0IGl0Ci0gIHRvIG5vbi16ZXJvIHZhbHVlcyBpbiBt
YWxsb3B0IHdpbGwgZmFpbC4KLSovCi0KLSNkZWZpbmUgTV9NTUFQX01BWCAgICAgICAgICAgICAt
NAotCi0jaWZuZGVmIERFRkFVTFRfTU1BUF9NQVgKLSNpZiBIQVZFX01NQVAKLSNkZWZpbmUgREVG
QVVMVF9NTUFQX01BWCAgICAgICAoNjU1MzYpCi0jZWxzZQotI2RlZmluZSBERUZBVUxUX01NQVBf
TUFYICAgICAgICgwKQotI2VuZGlmCi0jZW5kaWYKLQotLyogCi0gID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
ICBUbyBtYWtlIGEgZnVsbHkgY3VzdG9taXphYmxlIG1hbGxvYy5oIGhlYWRlciBmaWxlLCBjdXQg
ZXZlcnl0aGluZwotICBhYm92ZSB0aGlzIGxpbmUsIHB1dCBpbnRvIGZpbGUgbWFsbG9jLmgsIGVk
aXQgdG8gc3VpdCwgYW5kICNpbmNsdWRlIGl0IAotICBvbiB0aGUgbmV4dCBsaW5lLCBhcyB3ZWxs
IGFzIGluIHByb2dyYW1zIHRoYXQgdXNlIHRoaXMgbWFsbG9jLgotICA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LSovCi0KLS8qICNpbmNsdWRlICJtYWxsb2MuaCIgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIHB1YmxpYyB3cmFwcGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBV
U0VfUFVCTElDX01BTExPQ19XUkFQUEVSUwotCi0vKiBEZWNsYXJlIGFsbCByb3V0aW5lcyBhcyBp
bnRlcm5hbCAqLwotI2lmIF9fU1REX0MKLXN0YXRpYyBWb2lkX3QqICBtQUxMT2Moc2l6ZV90KTsK
LXN0YXRpYyB2b2lkICAgICBmUkVlKFZvaWRfdCopOwotc3RhdGljIFZvaWRfdCogIHJFQUxMT2Mo
Vm9pZF90Kiwgc2l6ZV90KTsKLXN0YXRpYyBWb2lkX3QqICBtRU1BTElHbihzaXplX3QsIHNpemVf
dCk7Ci1zdGF0aWMgVm9pZF90KiAgdkFMTE9jKHNpemVfdCk7Ci1zdGF0aWMgVm9pZF90KiAgcFZB
TExPYyhzaXplX3QpOwotc3RhdGljIFZvaWRfdCogIGNBTExPYyhzaXplX3QsIHNpemVfdCk7Ci1z
dGF0aWMgVm9pZF90KiogaUNBTExPYyhzaXplX3QsIHNpemVfdCwgVm9pZF90KiopOwotc3RhdGlj
IFZvaWRfdCoqIGlDT01BTExPYyhzaXplX3QsIHNpemVfdCosIFZvaWRfdCoqKTsKLXN0YXRpYyB2
b2lkICAgICBjRlJFZShWb2lkX3QqKTsKLXN0YXRpYyBpbnQgICAgICBtVFJJbShzaXplX3QpOwot
c3RhdGljIHNpemVfdCAgIG1VU0FCTGUoVm9pZF90Kik7Ci1zdGF0aWMgdm9pZCAgICAgbVNUQVRz
KCk7Ci1zdGF0aWMgaW50ICAgICAgbUFMTE9QdChpbnQsIGludCk7Ci1zdGF0aWMgc3RydWN0IG1h
bGxpbmZvIG1BTExJTkZvKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBWb2lkX3QqICBtQUxMT2MoKTsK
LXN0YXRpYyB2b2lkICAgICBmUkVlKCk7Ci1zdGF0aWMgVm9pZF90KiAgckVBTExPYygpOwotc3Rh
dGljIFZvaWRfdCogIG1FTUFMSUduKCk7Ci1zdGF0aWMgVm9pZF90KiAgdkFMTE9jKCk7Ci1zdGF0
aWMgVm9pZF90KiAgcFZBTExPYygpOwotc3RhdGljIFZvaWRfdCogIGNBTExPYygpOwotc3RhdGlj
IFZvaWRfdCoqIGlDQUxMT2MoKTsKLXN0YXRpYyBWb2lkX3QqKiBpQ09NQUxMT2MoKTsKLXN0YXRp
YyB2b2lkICAgICBjRlJFZSgpOwotc3RhdGljIGludCAgICAgIG1UUkltKCk7Ci1zdGF0aWMgc2l6
ZV90ICAgbVVTQUJMZSgpOwotc3RhdGljIHZvaWQgICAgIG1TVEFUcygpOwotc3RhdGljIGludCAg
ICAgIG1BTExPUHQoKTsKLXN0YXRpYyBzdHJ1Y3QgbWFsbGluZm8gbUFMTElORm8oKTsKLSNlbmRp
ZgotCi0vKgotICBNQUxMT0NfUFJFQUNUSU9OIGFuZCBNQUxMT0NfUE9TVEFDVElPTiBzaG91bGQg
YmUKLSAgZGVmaW5lZCB0byByZXR1cm4gMCBvbiBzdWNjZXNzLCBhbmQgbm9uemVybyBvbiBmYWls
dXJlLgotICBUaGUgcmV0dXJuIHZhbHVlIG9mIE1BTExPQ19QT1NUQUNUSU9OIGlzIGN1cnJlbnRs
eSBpZ25vcmVkCi0gIGluIHdyYXBwZXIgZnVuY3Rpb25zIHNpbmNlIHRoZXJlIGlzIG5vIHJlYXNv
bmFibGUgZGVmYXVsdAotICBhY3Rpb24gdG8gdGFrZSBvbiBmYWlsdXJlLgotKi8KLQotCi0jaWZk
ZWYgVVNFX01BTExPQ19MT0NLCi0KLSNpZmRlZiBXSU4zMgotCi1zdGF0aWMgaW50IG1BTExPQ19N
VVRFeDsKLSNkZWZpbmUgTUFMTE9DX1BSRUFDVElPTiAgIHNsd2FpdCgmbUFMTE9DX01VVEV4KQot
I2RlZmluZSBNQUxMT0NfUE9TVEFDVElPTiAgc2xyZWxlYXNlKCZtQUxMT0NfTVVURXgpCi0KLSNl
bHNlCi0KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0KLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgbUFM
TE9DX01VVEV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKLQotI2RlZmluZSBNQUxMT0Nf
UFJFQUNUSU9OICAgcHRocmVhZF9tdXRleF9sb2NrKCZtQUxMT0NfTVVURXgpCi0jZGVmaW5lIE1B
TExPQ19QT1NUQUNUSU9OICBwdGhyZWFkX211dGV4X3VubG9jaygmbUFMTE9DX01VVEV4KQotCi0j
ZW5kaWYgLyogVVNFX01BTExPQ19MT0NLICovCi0KLSNlbHNlCi0KLS8qIFN1YnN0aXR1dGUgYW55
dGhpbmcgeW91IGxpa2UgZm9yIHRoZXNlICovCi0KLSNkZWZpbmUgTUFMTE9DX1BSRUFDVElPTiAg
ICgwKQotI2RlZmluZSBNQUxMT0NfUE9TVEFDVElPTiAgKDApCi0KLSNlbmRpZgotCi1Wb2lkX3Qq
IHB1YmxpY19tQUxMT2Moc2l6ZV90IGJ5dGVzKSB7Ci0gIFZvaWRfdCogbTsKLSAgaWYgKE1BTExP
Q19QUkVBQ1RJT04gIT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0gIG0gPSBtQUxMT2MoYnl0
ZXMpOwotICBpZiAoTUFMTE9DX1BPU1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwot
fQotCi12b2lkIHB1YmxpY19mUkVlKFZvaWRfdCogbSkgewotICBpZiAoTUFMTE9DX1BSRUFDVElP
TiAhPSAwKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGZSRWUobSk7Ci0gIGlmIChNQUxMT0NfUE9T
VEFDVElPTiAhPSAwKSB7Ci0gIH0KLX0KLQotVm9pZF90KiBwdWJsaWNfckVBTExPYyhWb2lkX3Qq
IG0sIHNpemVfdCBieXRlcykgewotICBpZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAg
cmV0dXJuIDA7Ci0gIH0KLSAgbSA9IHJFQUxMT2MobSwgYnl0ZXMpOwotICBpZiAoTUFMTE9DX1BP
U1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi1Wb2lkX3QqIHB1YmxpY19t
RU1BTElHbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKLSAgVm9pZF90KiBtOwot
ICBpZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgbSA9
IG1FTUFMSUduKGFsaWdubWVudCwgYnl0ZXMpOwotICBpZiAoTUFMTE9DX1BPU1RBQ1RJT04gIT0g
MCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi1Wb2lkX3QqIHB1YmxpY192QUxMT2Moc2l6ZV90
IGJ5dGVzKSB7Ci0gIFZvaWRfdCogbTsKLSAgaWYgKE1BTExPQ19QUkVBQ1RJT04gIT0gMCkgewot
ICAgIHJldHVybiAwOwotICB9Ci0gIG0gPSB2QUxMT2MoYnl0ZXMpOwotICBpZiAoTUFMTE9DX1BP
U1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi1Wb2lkX3QqIHB1YmxpY19w
VkFMTE9jKHNpemVfdCBieXRlcykgewotICBWb2lkX3QqIG07Ci0gIGlmIChNQUxMT0NfUFJFQUNU
SU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBtID0gcFZBTExPYyhieXRlcyk7Ci0g
IGlmIChNQUxMT0NfUE9TVEFDVElPTiAhPSAwKSB7Ci0gIH0KLSAgcmV0dXJuIG07Ci19Ci0KLVZv
aWRfdCogcHVibGljX2NBTExPYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1fc2l6ZSkgewotICBWb2lk
X3QqIG07Ci0gIGlmIChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsKLSAg
fQotICBtID0gY0FMTE9jKG4sIGVsZW1fc2l6ZSk7Ci0gIGlmIChNQUxMT0NfUE9TVEFDVElPTiAh
PSAwKSB7Ci0gIH0KLSAgcmV0dXJuIG07Ci19Ci0KLQotVm9pZF90KiogcHVibGljX2lDQUxMT2Mo
c2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUsIFZvaWRfdCoqIGNodW5rcykgewotICBWb2lkX3Qq
KiBtOwotICBpZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0K
LSAgbSA9IGlDQUxMT2MobiwgZWxlbV9zaXplLCBjaHVua3MpOwotICBpZiAoTUFMTE9DX1BPU1RB
Q1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi1Wb2lkX3QqKiBwdWJsaWNfaUNP
TUFMTE9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZXNbXSwgVm9pZF90KiogY2h1bmtzKSB7Ci0gIFZv
aWRfdCoqIG07Ci0gIGlmIChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsK
LSAgfQotICBtID0gaUNPTUFMTE9jKG4sIHNpemVzLCBjaHVua3MpOwotICBpZiAoTUFMTE9DX1BP
U1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi12b2lkIHB1YmxpY19jRlJF
ZShWb2lkX3QqIG0pIHsKLSAgaWYgKE1BTExPQ19QUkVBQ1RJT04gIT0gMCkgewotICAgIHJldHVy
bjsKLSAgfQotICBjRlJFZShtKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9IDApIHsKLSAg
fQotfQotCi1pbnQgcHVibGljX21UUkltKHNpemVfdCBzKSB7Ci0gIGludCByZXN1bHQ7Ci0gIGlm
IChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICByZXN1bHQg
PSBtVFJJbShzKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9IDApIHsKLSAgfQotICByZXR1
cm4gcmVzdWx0OwotfQotCi1zaXplX3QgcHVibGljX21VU0FCTGUoVm9pZF90KiBtKSB7Ci0gIHNp
emVfdCByZXN1bHQ7Ci0gIGlmIChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4g
MDsKLSAgfQotICByZXN1bHQgPSBtVVNBQkxlKG0pOwotICBpZiAoTUFMTE9DX1BPU1RBQ1RJT04g
IT0gMCkgewotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgcHVibGljX21TVEFUcygp
IHsKLSAgaWYgKE1BTExPQ19QUkVBQ1RJT04gIT0gMCkgewotICAgIHJldHVybjsKLSAgfQotICBt
U1RBVHMoKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9IDApIHsKLSAgfQotfQotCi1zdHJ1
Y3QgbWFsbGluZm8gcHVibGljX21BTExJTkZvKCkgewotICBzdHJ1Y3QgbWFsbGluZm8gbTsKLSAg
aWYgKE1BTExPQ19QUkVBQ1RJT04gIT0gMCkgewotICAgIHN0cnVjdCBtYWxsaW5mbyBubSA9IHsg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OwotICAgIHJldHVybiBubTsKLSAgfQotICBt
ID0gbUFMTElORm8oKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9IDApIHsKLSAgfQotICBy
ZXR1cm4gbTsKLX0KLQotaW50IHB1YmxpY19tQUxMT1B0KGludCBwLCBpbnQgdikgewotICBpbnQg
cmVzdWx0OwotICBpZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0g
IH0KLSAgcmVzdWx0ID0gbUFMTE9QdChwLCB2KTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9
IDApIHsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0jZW5kaWYKLQotCi0KLS8qIC0tLS0t
LS0tLS0tLS0gT3B0aW9uYWwgdmVyc2lvbnMgb2YgbWVtY29weSAtLS0tLS0tLS0tLS0tLS0tICov
Ci0KLQotI2lmIFVTRV9NRU1DUFkKLQotLyogCi0gIE5vdGU6IG1lbWNweSBpcyBPTkxZIGludm9r
ZWQgd2l0aCBub24tb3ZlcmxhcHBpbmcgcmVnaW9ucywKLSAgc28gdGhlICh1c3VhbGx5IHNsb3dl
cikgbWVtbW92ZSBpcyBub3QgbmVlZGVkLgotKi8KLQotI2RlZmluZSBNQUxMT0NfQ09QWShkZXN0
LCBzcmMsIG5ieXRlcykgIG1lbWNweShkZXN0LCBzcmMsIG5ieXRlcykKLSNkZWZpbmUgTUFMTE9D
X1pFUk8oZGVzdCwgbmJ5dGVzKSAgICAgICBtZW1zZXQoZGVzdCwgMCwgICBuYnl0ZXMpCi0KLSNl
bHNlIC8qICFVU0VfTUVNQ1BZICovCi0KLS8qIFVzZSBEdWZmJ3MgZGV2aWNlIGZvciBnb29kIHpl
cm9pbmcvY29weWluZyBwZXJmb3JtYW5jZS4gKi8KLQotI2RlZmluZSBNQUxMT0NfWkVSTyhjaGFy
cCwgbmJ5dGVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBJTlRFUk5BTF9TSVpFX1QqIG16cCA9IChJTlRFUk5B
TF9TSVpFX1QqKShjaGFycCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBDSFVOS19T
SVpFX1QgIG1jdG1wID0gKG5ieXRlcykvc2l6ZW9mKElOVEVSTkFMX1NJWkVfVCk7ICAgICAgICAg
ICAgICAgICAgICAgXAotICBsb25nIG1jbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAobWN0bXAgPCA4KSBt
Y24gPSAwOyBlbHNlIHsgbWNuID0gKG1jdG1wLTEpLzg7IG1jdG1wICU9IDg7IH0gICAgICAgICAg
ICAgXAotICBzd2l0Y2ggKG1jdG1wKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgMDogZm9yKDs7KSB7ICptenAr
KyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGNhc2UgNzogICAgICAgICAgICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgNjogICAgICAgICAgICptenArKyA9IDA7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgNTog
ICAgICAgICAgICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGNhc2UgNDogICAgICAgICAgICptenArKyA9IDA7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgMzogICAgICAgICAg
ICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGNhc2UgMjogICAgICAgICAgICptenArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgMTogICAgICAgICAgICptenArKyA9
IDA7IGlmKG1jbiA8PSAwKSBicmVhazsgbWNuLS07IH0gICAgICAgICAgICAgICAgXAotICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIE1BTExPQ19DT1BZKGRlc3Qs
c3JjLG5ieXRlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1k
byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIElOVEVSTkFMX1NJWkVfVCogbWNzcmMgPSAoSU5URVJO
QUxfU0laRV9UKikgc3JjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIElOVEVSTkFM
X1NJWkVfVCogbWNkc3QgPSAoSU5URVJOQUxfU0laRV9UKikgZGVzdDsgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIENIVU5LX1NJWkVfVCAgbWN0bXAgPSAobmJ5dGVzKS9zaXplb2YoSU5U
RVJOQUxfU0laRV9UKTsgICAgICAgICAgICAgICAgICAgICBcCi0gIGxvbmcgbWNuOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGlmIChtY3RtcCA8IDgpIG1jbiA9IDA7IGVsc2UgeyBtY24gPSAobWN0bXAtMSkvODsg
bWN0bXAgJT0gODsgfSAgICAgICAgICAgICBcCi0gIHN3aXRjaCAobWN0bXApIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
Y2FzZSAwOiBmb3IoOzspIHsgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSA3OiAgICAgICAgICAgKm1jZHN0KysgPSAqbWNz
cmMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSA2OiAg
ICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgY2FzZSA1OiAgICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSA0OiAgICAgICAgICAg
Km1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY2FzZSAzOiAgICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSAyOiAgICAgICAgICAgKm1jZHN0Kysg
PSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2Fz
ZSAxOiAgICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgaWYobWNuIDw9IDApIGJyZWFrOyBt
Y24tLTsgfSAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlKDApCi0KLSNl
bmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0gTU1BUCBzdXBwb3J0IC0tLS0tLS0tLS0tLS0t
LS0tLSAgKi8KLQotCi0jaWYgSEFWRV9NTUFQCi0KLSNpZm5kZWYgTEFDS1NfRkNOVExfSAotI2lu
Y2x1ZGUgPGZjbnRsLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBMQUNLU19TWVNfTU1BTl9ICi0jaW5j
bHVkZSA8c3lzL21tYW4uaD4KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoTUFQX0FOT05ZTU9VUykg
JiYgZGVmaW5lZChNQVBfQU5PTikKLSNkZWZpbmUgTUFQX0FOT05ZTU9VUyBNQVBfQU5PTgotI2Vu
ZGlmCi0KLS8qIAotICAgTmVhcmx5IGFsbCB2ZXJzaW9ucyBvZiBtbWFwIHN1cHBvcnQgTUFQX0FO
T05ZTU9VUywgCi0gICBzbyB0aGUgZm9sbG93aW5nIGlzIHVubGlrZWx5IHRvIGJlIG5lZWRlZCwg
YnV0IGlzCi0gICBzdXBwbGllZCBqdXN0IGluIGNhc2UuCi0qLwotCi0jaWZuZGVmIE1BUF9BTk9O
WU1PVVMKLQotc3RhdGljIGludCBkZXZfemVyb19mZCA9IC0xOyAvKiBDYWNoZWQgZmlsZSBkZXNj
cmlwdG9yIGZvciAvZGV2L3plcm8uICovCi0KLSNkZWZpbmUgTU1BUChhZGRyLCBzaXplLCBwcm90
LCBmbGFncykgKChkZXZfemVyb19mZCA8IDApID8gXAotIChkZXZfemVyb19mZCA9IG9wZW4oIi9k
ZXYvemVybyIsIE9fUkRXUiksIFwKLSAgbW1hcCgoYWRkciksIChzaXplKSwgKHByb3QpLCAoZmxh
Z3MpLCBkZXZfemVyb19mZCwgMCkpIDogXAotICAgbW1hcCgoYWRkciksIChzaXplKSwgKHByb3Qp
LCAoZmxhZ3MpLCBkZXZfemVyb19mZCwgMCkpCi0KLSNlbHNlCi0KLSNkZWZpbmUgTU1BUChhZGRy
LCBzaXplLCBwcm90LCBmbGFncykgXAotIChtbWFwKChhZGRyKSwgKHNpemUpLCAocHJvdCksIChm
bGFncyl8TUFQX0FOT05ZTU9VUywgLTEsIDApKQotCi0jZW5kaWYKLQotCi0jZW5kaWYgLyogSEFW
RV9NTUFQICovCi0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENodW5rIHJlcHJl
c2VudGF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotCi0vKgotICBUaGlzIHN0
cnVjdCBkZWNsYXJhdGlvbiBpcyBtaXNsZWFkaW5nIChidXQgYWNjdXJhdGUgYW5kIG5lY2Vzc2Fy
eSkuCi0gIEl0IGRlY2xhcmVzIGEgInZpZXciIGludG8gbWVtb3J5IGFsbG93aW5nIGFjY2VzcyB0
byBuZWNlc3NhcnkKLSAgZmllbGRzIGF0IGtub3duIG9mZnNldHMgZnJvbSBhIGdpdmVuIGJhc2Uu
IFNlZSBleHBsYW5hdGlvbiBiZWxvdy4KLSovCi0KLXN0cnVjdCBtYWxsb2NfY2h1bmsgewotCi0g
IElOVEVSTkFMX1NJWkVfVCAgICAgIHByZXZfc2l6ZTsgIC8qIFNpemUgb2YgcHJldmlvdXMgY2h1
bmsgKGlmIGZyZWUpLiAgKi8KLSAgSU5URVJOQUxfU0laRV9UICAgICAgc2l6ZTsgICAgICAgLyog
U2l6ZSBpbiBieXRlcywgaW5jbHVkaW5nIG92ZXJoZWFkLiAqLwotCi0gIHN0cnVjdCBtYWxsb2Nf
Y2h1bmsqIGZkOyAgICAgICAgIC8qIGRvdWJsZSBsaW5rcyAtLSB1c2VkIG9ubHkgaWYgZnJlZS4g
Ki8KLSAgc3RydWN0IG1hbGxvY19jaHVuayogYms7Ci19OwotCi0KLXR5cGVkZWYgc3RydWN0IG1h
bGxvY19jaHVuayogbWNodW5rcHRyOwotCi0vKgotICAgbWFsbG9jX2NodW5rIGRldGFpbHM6Ci0K
LSAgICAoVGhlIGZvbGxvd2luZyBpbmNsdWRlcyBsaWdodGx5IGVkaXRlZCBleHBsYW5hdGlvbnMg
YnkgQ29saW4gUGx1bWIuKQotCi0gICAgQ2h1bmtzIG9mIG1lbW9yeSBhcmUgbWFpbnRhaW5lZCB1
c2luZyBhIGBib3VuZGFyeSB0YWcnIG1ldGhvZCBhcwotICAgIGRlc2NyaWJlZCBpbiBlLmcuLCBL
bnV0aCBvciBTdGFuZGlzaC4gIChTZWUgdGhlIHBhcGVyIGJ5IFBhdWwKLSAgICBXaWxzb24gZnRw
Oi8vZnRwLmNzLnV0ZXhhcy5lZHUvcHViL2dhcmJhZ2UvYWxsb2NzcnYucHMgZm9yIGEKLSAgICBz
dXJ2ZXkgb2Ygc3VjaCB0ZWNobmlxdWVzLikgIFNpemVzIG9mIGZyZWUgY2h1bmtzIGFyZSBzdG9y
ZWQgYm90aAotICAgIGluIHRoZSBmcm9udCBvZiBlYWNoIGNodW5rIGFuZCBhdCB0aGUgZW5kLiAg
VGhpcyBtYWtlcwotICAgIGNvbnNvbGlkYXRpbmcgZnJhZ21lbnRlZCBjaHVua3MgaW50byBiaWdn
ZXIgY2h1bmtzIHZlcnkgZmFzdC4gIFRoZQotICAgIHNpemUgZmllbGRzIGFsc28gaG9sZCBiaXRz
IHJlcHJlc2VudGluZyB3aGV0aGVyIGNodW5rcyBhcmUgZnJlZSBvcgotICAgIGluIHVzZS4KLQot
ICAgIEFuIGFsbG9jYXRlZCBjaHVuayBsb29rcyBsaWtlIHRoaXM6Ci0KLQotICAgIGNodW5rLT4g
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVu
aywgaWYgYWxsb2NhdGVkICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAg
ICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAg
ICAgICAgICAgICAgICB8UHwKLSAgICAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAg
ICAgICAgICAgIFVzZXIgZGF0YSBzdGFydHMgaGVyZS4uLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgLgotICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIC4gICAgICAgICAgICAgKG1h
bGxvY191c2FibGVfc3BhY2UoKSBieXRlcykgICAgICAgICAgICAgICAgICAgICAuCi0gICAgICAg
ICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAotbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAg
ICAgICAgU2l6ZSBvZiBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKwotCi0KLSAgICBXaGVyZSAiY2h1bmsiIGlzIHRoZSBmcm9u
dCBvZiB0aGUgY2h1bmsgZm9yIHRoZSBwdXJwb3NlIG9mIG1vc3Qgb2YKLSAgICB0aGUgbWFsbG9j
IGNvZGUsIGJ1dCAibWVtIiBpcyB0aGUgcG9pbnRlciB0aGF0IGlzIHJldHVybmVkIHRvIHRoZQot
ICAgIHVzZXIuICAiTmV4dGNodW5rIiBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGNvbnRp
Z3VvdXMgY2h1bmsuCi0KLSAgICBDaHVua3MgYWx3YXlzIGJlZ2luIG9uIGV2ZW4gd29yZCBib3Vu
ZHJpZXMsIHNvIHRoZSBtZW0gcG9ydGlvbgotICAgICh3aGljaCBpcyByZXR1cm5lZCB0byB0aGUg
dXNlcikgaXMgYWxzbyBvbiBhbiBldmVuIHdvcmQgYm91bmRhcnksIGFuZAotICAgIHRodXMgYXQg
bGVhc3QgZG91YmxlLXdvcmQgYWxpZ25lZC4KLQotICAgIEZyZWUgY2h1bmtzIGFyZSBzdG9yZWQg
aW4gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0cywgYW5kIGxvb2sgbGlrZSB0aGlzOgotCi0g
ICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIHBy
ZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rCi0gICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVz
ICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAotICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAg
ICAgICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgaW4gbGlz
dCAgICAgICAgICAgICB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAg
ICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgaW4gbGlzdCAgICAgICAgICAg
IHwKLSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAgICAgICAgICAgIFVudXNl
ZCBzcGFjZSAobWF5IGJlIDAgYnl0ZXMgbG9uZykgICAgICAgICAgICAgICAgLgotICAgICAgICAg
ICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC4KLSAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1uZXh0Y2h1bmstPiArLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwot
ICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0KLSAgICBUaGUgUCAo
UFJFVl9JTlVTRSkgYml0LCBzdG9yZWQgaW4gdGhlIHVudXNlZCBsb3ctb3JkZXIgYml0IG9mIHRo
ZQotICAgIGNodW5rIHNpemUgKHdoaWNoIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIHR3byB3b3Jk
cyksIGlzIGFuIGluLXVzZQotICAgIGJpdCBmb3IgdGhlICpwcmV2aW91cyogY2h1bmsuICBJZiB0
aGF0IGJpdCBpcyAqY2xlYXIqLCB0aGVuIHRoZQotICAgIHdvcmQgYmVmb3JlIHRoZSBjdXJyZW50
IGNodW5rIHNpemUgY29udGFpbnMgdGhlIHByZXZpb3VzIGNodW5rCi0gICAgc2l6ZSwgYW5kIGNh
biBiZSB1c2VkIHRvIGZpbmQgdGhlIGZyb250IG9mIHRoZSBwcmV2aW91cyBjaHVuay4KLSAgICBU
aGUgdmVyeSBmaXJzdCBjaHVuayBhbGxvY2F0ZWQgYWx3YXlzIGhhcyB0aGlzIGJpdCBzZXQsCi0g
ICAgcHJldmVudGluZyBhY2Nlc3MgdG8gbm9uLWV4aXN0ZW50IChvciBub24tb3duZWQpIG1lbW9y
eS4gSWYKLSAgICBwcmV2X2ludXNlIGlzIHNldCBmb3IgYW55IGdpdmVuIGNodW5rLCB0aGVuIHlv
dSBDQU5OT1QgZGV0ZXJtaW5lCi0gICAgdGhlIHNpemUgb2YgdGhlIHByZXZpb3VzIGNodW5rLCBh
bmQgbWlnaHQgZXZlbiBnZXQgYSBtZW1vcnkKLSAgICBhZGRyZXNzaW5nIGZhdWx0IHdoZW4gdHJ5
aW5nIHRvIGRvIHNvLgotCi0gICAgTm90ZSB0aGF0IHRoZSBgZm9vdCcgb2YgdGhlIGN1cnJlbnQg
Y2h1bmsgaXMgYWN0dWFsbHkgcmVwcmVzZW50ZWQKLSAgICBhcyB0aGUgcHJldl9zaXplIG9mIHRo
ZSBORVhUIGNodW5rLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0bwotICAgIGRlYWwgd2l0aCBhbGln
bm1lbnRzIGV0YyBidXQgY2FuIGJlIHZlcnkgY29uZnVzaW5nIHdoZW4gdHJ5aW5nCi0gICAgdG8g
ZXh0ZW5kIG9yIGFkYXB0IHRoaXMgY29kZS4KLQotICAgIFRoZSB0d28gZXhjZXB0aW9ucyB0byBh
bGwgdGhpcyBhcmUKLQotICAgICAxLiBUaGUgc3BlY2lhbCBjaHVuayBgdG9wJyBkb2Vzbid0IGJv
dGhlciB1c2luZyB0aGUKLSAgICAgICAgdHJhaWxpbmcgc2l6ZSBmaWVsZCBzaW5jZSB0aGVyZSBp
cyBubyBuZXh0IGNvbnRpZ3VvdXMgY2h1bmsKLSAgICAgICAgdGhhdCB3b3VsZCBoYXZlIHRvIGlu
ZGV4IG9mZiBpdC4gQWZ0ZXIgaW5pdGlhbGl6YXRpb24sIGB0b3AnCi0gICAgICAgIGlzIGZvcmNl
ZCB0byBhbHdheXMgZXhpc3QuICBJZiBpdCB3b3VsZCBiZWNvbWUgbGVzcyB0aGFuCi0gICAgICAg
IE1JTlNJWkUgYnl0ZXMgbG9uZywgaXQgaXMgcmVwbGVuaXNoZWQuCi0KLSAgICAgMi4gQ2h1bmtz
IGFsbG9jYXRlZCB2aWEgbW1hcCwgd2hpY2ggaGF2ZSB0aGUgc2Vjb25kLWxvd2VzdC1vcmRlcgot
ICAgICAgICBiaXQgKElTX01NQVBQRUQpIHNldCBpbiB0aGVpciBzaXplIGZpZWxkcy4gIEJlY2F1
c2UgdGhleSBhcmUKLSAgICAgICAgYWxsb2NhdGVkIG9uZS1ieS1vbmUsIGVhY2ggbXVzdCBjb250
YWluIGl0cyBvd24gdHJhaWxpbmcgc2l6ZSBmaWVsZC4KLQotKi8KLQotLyoKLSAgLS0tLS0tLS0t
LSBTaXplIGFuZCBhbGlnbm1lbnQgY2hlY2tzIGFuZCBjb252ZXJzaW9ucyAtLS0tLS0tLS0tCi0q
LwotCi0vKiBjb252ZXJzaW9uIGZyb20gbWFsbG9jIGhlYWRlcnMgdG8gdXNlciBwb2ludGVycywg
YW5kIGJhY2sgKi8KLQotI2RlZmluZSBjaHVuazJtZW0ocCkgICAoKFZvaWRfdCopKChjaGFyKiko
cCkgKyAyKlNJWkVfU1opKQotI2RlZmluZSBtZW0yY2h1bmsobWVtKSAoKG1jaHVua3B0cikoKGNo
YXIqKShtZW0pIC0gMipTSVpFX1NaKSkKLQotLyogVGhlIHNtYWxsZXN0IHBvc3NpYmxlIGNodW5r
ICovCi0jZGVmaW5lIE1JTl9DSFVOS19TSVpFICAgICAgICAoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nf
Y2h1bmspKQotCi0vKiBUaGUgc21hbGxlc3Qgc2l6ZSB3ZSBjYW4gbWFsbG9jIGlzIGFuIGFsaWdu
ZWQgbWluaW1hbCBjaHVuayAqLwotCi0jZGVmaW5lIE1JTlNJWkUgIFwKLSAgKENIVU5LX1NJWkVf
VCkoKChNSU5fQ0hVTktfU0laRStNQUxMT0NfQUxJR05fTUFTSykgJiB+TUFMTE9DX0FMSUdOX01B
U0spKQotCi0vKiBDaGVjayBpZiBtIGhhcyBhY2NlcHRhYmxlIGFsaWdubWVudCAqLwotCi0jZGVm
aW5lIGFsaWduZWRfT0sobSkgICgoKFBUUl9VSU5UKSgobSkpICYgKE1BTExPQ19BTElHTl9NQVNL
KSkgPT0gMCkKLQotCi0vKiAKLSAgIENoZWNrIGlmIGEgcmVxdWVzdCBpcyBzbyBsYXJnZSB0aGF0
IGl0IHdvdWxkIHdyYXAgYXJvdW5kIHplcm8gd2hlbgotICAgcGFkZGVkIGFuZCBhbGlnbmVkLiBU
byBzaW1wbGlmeSBzb21lIG90aGVyIGNvZGUsIHRoZSBib3VuZCBpcyBtYWRlCi0gICBsb3cgZW5v
dWdoIHNvIHRoYXQgYWRkaW5nIE1JTlNJWkUgd2lsbCBhbHNvIG5vdCB3cmFwIGFyb3VuZCBzZXJv
LgotKi8KLQotI2RlZmluZSBSRVFVRVNUX09VVF9PRl9SQU5HRShyZXEpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAoKENIVU5LX1NJWkVfVCkocmVxKSA+PSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAoQ0hVTktfU0laRV9UKShJTlRFUk5B
TF9TSVpFX1QpKC0yICogTUlOU0laRSkpICAgIAotCi0vKiBwYWQgcmVxdWVzdCBieXRlcyBpbnRv
IGEgdXNhYmxlIHNpemUgLS0gaW50ZXJuYWwgdmVyc2lvbiAqLwotCi0jZGVmaW5lIHJlcXVlc3Qy
c2l6ZShyZXEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgo
KHJlcSkgKyBTSVpFX1NaICsgTUFMTE9DX0FMSUdOX01BU0sgPCBNSU5TSVpFKSAgPyAgICAgICAg
ICAgICBcCi0gICBNSU5TSVpFIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAoKHJlcSkgKyBTSVpFX1NaICsgTUFMTE9DX0FMSUdOX01B
U0spICYgfk1BTExPQ19BTElHTl9NQVNLKQotCi0vKiAgU2FtZSwgZXhjZXB0IGFsc28gcGVyZm9y
bSBhcmd1bWVudCBjaGVjayAqLwotCi0jZGVmaW5lIGNoZWNrZWRfcmVxdWVzdDJzaXplKHJlcSwg
c3opICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChSRVFVRVNUX09VVF9PRl9S
QU5HRShyZXEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFMTE9D
X0ZBSUxVUkVfQUNUSU9OOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChzeikgPSByZXF1ZXN0MnNpemUocmVxKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLS8qCi0gIC0tLS0t
LS0tLS0tLS0tLSBQaHlzaWNhbCBjaHVuayBvcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLQotKi8K
LQotCi0vKiBzaXplIGZpZWxkIGlzIG9yJ2VkIHdpdGggUFJFVl9JTlVTRSB3aGVuIHByZXZpb3Vz
IGFkamFjZW50IGNodW5rIGluIHVzZSAqLwotI2RlZmluZSBQUkVWX0lOVVNFIDB4MQotCi0vKiBl
eHRyYWN0IGludXNlIGJpdCBvZiBwcmV2aW91cyBjaHVuayAqLwotI2RlZmluZSBwcmV2X2ludXNl
KHApICAgICAgICgocCktPnNpemUgJiBQUkVWX0lOVVNFKQotCi0KLS8qIHNpemUgZmllbGQgaXMg
b3InZWQgd2l0aCBJU19NTUFQUEVEIGlmIHRoZSBjaHVuayB3YXMgb2J0YWluZWQgd2l0aCBtbWFw
KCkgKi8KLSNkZWZpbmUgSVNfTU1BUFBFRCAweDIKLQotLyogY2hlY2sgZm9yIG1tYXAoKSdlZCBj
aHVuayAqLwotI2RlZmluZSBjaHVua19pc19tbWFwcGVkKHApICgocCktPnNpemUgJiBJU19NTUFQ
UEVEKQotCi0vKiAKLSAgQml0cyB0byBtYXNrIG9mZiB3aGVuIGV4dHJhY3Rpbmcgc2l6ZSAKLQot
ICBOb3RlOiBJU19NTUFQUEVEIGlzIGludGVudGlvbmFsbHkgbm90IG1hc2tlZCBvZmYgZnJvbSBz
aXplIGZpZWxkIGluCi0gIG1hY3JvcyBmb3Igd2hpY2ggbW1hcHBlZCBjaHVua3Mgc2hvdWxkIG5l
dmVyIGJlIHNlZW4uIFRoaXMgc2hvdWxkCi0gIGNhdXNlIGhlbHBmdWwgY29yZSBkdW1wcyB0byBv
Y2N1ciBpZiBpdCBpcyB0cmllZCBieSBhY2NpZGVudCBieQotICBwZW9wbGUgZXh0ZW5kaW5nIG9y
IGFkYXB0aW5nIHRoaXMgbWFsbG9jLgotKi8KLSNkZWZpbmUgU0laRV9CSVRTIChQUkVWX0lOVVNF
fElTX01NQVBQRUQpCi0KLS8qIEdldCBzaXplLCBpZ25vcmluZyB1c2UgYml0cyAqLwotI2RlZmlu
ZSBjaHVua3NpemUocCkgICAgICAgICAoKHApLT5zaXplICYgfihTSVpFX0JJVFMpKQotCi0KLS8q
IFB0ciB0byBuZXh0IHBoeXNpY2FsIG1hbGxvY19jaHVuay4gKi8KLSNkZWZpbmUgbmV4dF9jaHVu
ayhwKSAoKG1jaHVua3B0cikoICgoY2hhciopKHApKSArICgocCktPnNpemUgJiB+UFJFVl9JTlVT
RSkgKSkKLQotLyogUHRyIHRvIHByZXZpb3VzIHBoeXNpY2FsIG1hbGxvY19jaHVuayAqLwotI2Rl
ZmluZSBwcmV2X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpIC0gKChwKS0+cHJl
dl9zaXplKSApKQotCi0vKiBUcmVhdCBzcGFjZSBhdCBwdHIgKyBvZmZzZXQgYXMgYSBjaHVuayAq
LwotI2RlZmluZSBjaHVua19hdF9vZmZzZXQocCwgcykgICgobWNodW5rcHRyKSgoKGNoYXIqKShw
KSkgKyAocykpKQotCi0vKiBleHRyYWN0IHAncyBpbnVzZSBiaXQgKi8KLSNkZWZpbmUgaW51c2Uo
cClcCi0oKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkrKChwKS0+c2l6ZSAmIH5QUkVWX0lOVVNF
KSkpLT5zaXplKSAmIFBSRVZfSU5VU0UpCi0KLS8qIHNldC9jbGVhciBjaHVuayBhcyBiZWluZyBp
bnVzZSB3aXRob3V0IG90aGVyd2lzZSBkaXN0dXJiaW5nICovCi0jZGVmaW5lIHNldF9pbnVzZShw
KVwKLSgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAoKHApLT5zaXplICYgflBSRVZfSU5VU0Up
KSktPnNpemUgfD0gUFJFVl9JTlVTRQotCi0jZGVmaW5lIGNsZWFyX2ludXNlKHApXAotKChtY2h1
bmtwdHIpKCgoY2hhciopKHApKSArICgocCktPnNpemUgJiB+UFJFVl9JTlVTRSkpKS0+c2l6ZSAm
PSB+KFBSRVZfSU5VU0UpCi0KLQotLyogY2hlY2svc2V0L2NsZWFyIGludXNlIGJpdHMgaW4ga25v
d24gcGxhY2VzICovCi0jZGVmaW5lIGludXNlX2JpdF9hdF9vZmZzZXQocCwgcylcCi0gKCgobWNo
dW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+c2l6ZSAmIFBSRVZfSU5VU0UpCi0KLSNkZWZp
bmUgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQocCwgcylcCi0gKCgobWNodW5rcHRyKSgoKGNoYXIq
KShwKSkgKyAocykpKS0+c2l6ZSB8PSBQUkVWX0lOVVNFKQotCi0jZGVmaW5lIGNsZWFyX2ludXNl
X2JpdF9hdF9vZmZzZXQocCwgcylcCi0gKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykp
KS0+c2l6ZSAmPSB+KFBSRVZfSU5VU0UpKQotCi0KLS8qIFNldCBzaXplIGF0IGhlYWQsIHdpdGhv
dXQgZGlzdHVyYmluZyBpdHMgdXNlIGJpdCAqLwotI2RlZmluZSBzZXRfaGVhZF9zaXplKHAsIHMp
ICAoKHApLT5zaXplID0gKCgocCktPnNpemUgJiBQUkVWX0lOVVNFKSB8IChzKSkpCi0KLS8qIFNl
dCBzaXplL3VzZSBmaWVsZCAqLwotI2RlZmluZSBzZXRfaGVhZChwLCBzKSAgICAgICAoKHApLT5z
aXplID0gKHMpKQotCi0vKiBTZXQgc2l6ZSBhdCBmb290ZXIgKG9ubHkgd2hlbiBjaHVuayBpcyBu
b3QgaW4gdXNlKSAqLwotI2RlZmluZSBzZXRfZm9vdChwLCBzKSAgICAgICAoKChtY2h1bmtwdHIp
KChjaGFyKikocCkgKyAocykpKS0+cHJldl9zaXplID0gKHMpKQotCi0KLS8qCi0gIC0tLS0tLS0t
LS0tLS0tLS0tLS0tIEludGVybmFsIGRhdGEgc3RydWN0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gICBBbGwgaW50ZXJuYWwgc3RhdGUgaXMgaGVsZCBpbiBhbiBpbnN0YW5jZSBvZiBtYWxs
b2Nfc3RhdGUgZGVmaW5lZAotICAgYmVsb3cuIFRoZXJlIGFyZSBubyBvdGhlciBzdGF0aWMgdmFy
aWFibGVzLCBleGNlcHQgaW4gdHdvIG9wdGlvbmFsCi0gICBjYXNlczogCi0gICAqIElmIFVTRV9N
QUxMT0NfTE9DSyBpcyBkZWZpbmVkLCB0aGUgbUFMTE9DX01VVEV4IGRlY2xhcmVkIGFib3ZlLiAK
LSAgICogSWYgSEFWRV9NTUFQIGlzIHRydWUsIGJ1dCBtbWFwIGRvZXNuJ3Qgc3VwcG9ydAotICAg
ICBNQVBfQU5PTllNT1VTLCBhIGR1bW15IGZpbGUgZGVzY3JpcHRvciBmb3IgbW1hcC4KLQotICAg
QmV3YXJlIG9mIGxvdHMgb2YgdHJpY2tzIHRoYXQgbWluaW1pemUgdGhlIHRvdGFsIGJvb2trZWVw
aW5nIHNwYWNlCi0gICByZXF1aXJlbWVudHMuIFRoZSByZXN1bHQgaXMgYSBsaXR0bGUgb3ZlciAx
SyBieXRlcyAoZm9yIDRieXRlCi0gICBwb2ludGVycyBhbmQgc2l6ZV90LikKLSovCi0KLS8qCi0g
IEJpbnMKLQotICAgIEFuIGFycmF5IG9mIGJpbiBoZWFkZXJzIGZvciBmcmVlIGNodW5rcy4gRWFj
aCBiaW4gaXMgZG91Ymx5Ci0gICAgbGlua2VkLiAgVGhlIGJpbnMgYXJlIGFwcHJveGltYXRlbHkg
cHJvcG9ydGlvbmFsbHkgKGxvZykgc3BhY2VkLgotICAgIFRoZXJlIGFyZSBhIGxvdCBvZiB0aGVz
ZSBiaW5zICgxMjgpLiBUaGlzIG1heSBsb29rIGV4Y2Vzc2l2ZSwgYnV0Ci0gICAgd29ya3MgdmVy
eSB3ZWxsIGluIHByYWN0aWNlLiAgTW9zdCBiaW5zIGhvbGQgc2l6ZXMgdGhhdCBhcmUKLSAgICB1
bnVzdWFsIGFzIG1hbGxvYyByZXF1ZXN0IHNpemVzLCBidXQgYXJlIG1vcmUgdXN1YWwgZm9yIGZy
YWdtZW50cwotICAgIGFuZCBjb25zb2xpZGF0ZWQgc2V0cyBvZiBjaHVua3MsIHdoaWNoIGlzIHdo
YXQgdGhlc2UgYmlucyBob2xkLCBzbwotICAgIHRoZXkgY2FuIGJlIGZvdW5kIHF1aWNrbHkuICBB
bGwgcHJvY2VkdXJlcyBtYWludGFpbiB0aGUgaW52YXJpYW50Ci0gICAgdGhhdCBubyBjb25zb2xp
ZGF0ZWQgY2h1bmsgcGh5c2ljYWxseSBib3JkZXJzIGFub3RoZXIgb25lLCBzbyBlYWNoCi0gICAg
Y2h1bmsgaW4gYSBsaXN0IGlzIGtub3duIHRvIGJlIHByZWNlZWRlZCBhbmQgZm9sbG93ZWQgYnkg
ZWl0aGVyCi0gICAgaW51c2UgY2h1bmtzIG9yIHRoZSBlbmRzIG9mIG1lbW9yeS4KLQotICAgIENo
dW5rcyBpbiBiaW5zIGFyZSBrZXB0IGluIHNpemUgb3JkZXIsIHdpdGggdGllcyBnb2luZyB0byB0
aGUKLSAgICBhcHByb3hpbWF0ZWx5IGxlYXN0IHJlY2VudGx5IHVzZWQgY2h1bmsuIE9yZGVyaW5n
IGlzbid0IG5lZWRlZAotICAgIGZvciB0aGUgc21hbGwgYmlucywgd2hpY2ggYWxsIGNvbnRhaW4g
dGhlIHNhbWUtc2l6ZWQgY2h1bmtzLCBidXQKLSAgICBmYWNpbGl0YXRlcyBiZXN0LWZpdCBhbGxv
Y2F0aW9uIGZvciBsYXJnZXIgY2h1bmtzLiBUaGVzZSBsaXN0cwotICAgIGFyZSBqdXN0IHNlcXVl
bnRpYWwuIEtlZXBpbmcgdGhlbSBpbiBvcmRlciBhbG1vc3QgbmV2ZXIgcmVxdWlyZXMKLSAgICBl
bm91Z2ggdHJhdmVyc2FsIHRvIHdhcnJhbnQgdXNpbmcgZmFuY2llciBvcmRlcmVkIGRhdGEKLSAg
ICBzdHJ1Y3R1cmVzLiAgCi0KLSAgICBDaHVua3Mgb2YgdGhlIHNhbWUgc2l6ZSBhcmUgbGlua2Vk
IHdpdGggdGhlIG1vc3QKLSAgICByZWNlbnRseSBmcmVlZCBhdCB0aGUgZnJvbnQsIGFuZCBhbGxv
Y2F0aW9ucyBhcmUgdGFrZW4gZnJvbSB0aGUKLSAgICBiYWNrLiAgVGhpcyByZXN1bHRzIGluIExS
VSAoRklGTykgYWxsb2NhdGlvbiBvcmRlciwgd2hpY2ggdGVuZHMKLSAgICB0byBnaXZlIGVhY2gg
Y2h1bmsgYW4gZXF1YWwgb3Bwb3J0dW5pdHkgdG8gYmUgY29uc29saWRhdGVkIHdpdGgKLSAgICBh
ZGphY2VudCBmcmVlZCBjaHVua3MsIHJlc3VsdGluZyBpbiBsYXJnZXIgZnJlZSBjaHVua3MgYW5k
IGxlc3MKLSAgICBmcmFnbWVudGF0aW9uLgotCi0gICAgVG8gc2ltcGxpZnkgdXNlIGluIGRvdWJs
ZS1saW5rZWQgbGlzdHMsIGVhY2ggYmluIGhlYWRlciBhY3RzCi0gICAgYXMgYSBtYWxsb2NfY2h1
bmsuIFRoaXMgYXZvaWRzIHNwZWNpYWwtY2FzaW5nIGZvciBoZWFkZXJzLgotICAgIEJ1dCB0byBj
b25zZXJ2ZSBzcGFjZSBhbmQgaW1wcm92ZSBsb2NhbGl0eSwgd2UgYWxsb2NhdGUKLSAgICBvbmx5
IHRoZSBmZC9iayBwb2ludGVycyBvZiBiaW5zLCBhbmQgdGhlbiB1c2UgcmVwb3NpdGlvbmluZyB0
cmlja3MKLSAgICB0byB0cmVhdCB0aGVzZSBhcyB0aGUgZmllbGRzIG9mIGEgbWFsbG9jX2NodW5r
Ki4gIAotKi8KLQotdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBtYmlucHRyOwotCi0vKiBh
ZGRyZXNzaW5nIC0tIG5vdGUgdGhhdCBiaW5fYXQoMCkgZG9lcyBub3QgZXhpc3QgKi8KLSNkZWZp
bmUgYmluX2F0KG0sIGkpICgobWJpbnB0cikoKGNoYXIqKSYoKG0pLT5iaW5zWyhpKTw8MV0pIC0g
KFNJWkVfU1o8PDEpKSkKLQotLyogYW5hbG9nIG9mICsrYmluICovCi0jZGVmaW5lIG5leHRfYmlu
KGIpICAoKG1iaW5wdHIpKChjaGFyKikoYikgKyAoc2l6ZW9mKG1jaHVua3B0cik8PDEpKSkKLQot
LyogUmVtaW5kZXJzIGFib3V0IGxpc3QgZGlyZWN0aW9uYWxpdHkgd2l0aGluIGJpbnMgKi8KLSNk
ZWZpbmUgZmlyc3QoYikgICAgICgoYiktPmZkKQotI2RlZmluZSBsYXN0KGIpICAgICAgKChiKS0+
YmspCi0KLS8qIFRha2UgYSBjaHVuayBvZmYgYSBiaW4gbGlzdCAqLwotI2RlZmluZSB1bmxpbmso
UCwgQkssIEZEKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIEZEID0gUC0+ZmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgQksgPSBQLT5iazsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGRC0+YmsgPSBCSzsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEJL
LT5mZCA9IEZEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLX0KLQotLyoKLSAgSW5kZXhpbmcKLQotICAgIEJpbnMgZm9yIHNpemVzIDwg
NTEyIGJ5dGVzIGNvbnRhaW4gY2h1bmtzIG9mIGFsbCB0aGUgc2FtZSBzaXplLCBzcGFjZWQKLSAg
ICA4IGJ5dGVzIGFwYXJ0LiBMYXJnZXIgYmlucyBhcmUgYXBwcm94aW1hdGVseSBsb2dhcml0aG1p
Y2FsbHkgc3BhY2VkOgotCi0gICAgNjQgYmlucyBvZiBzaXplICAgICAgIDgKLSAgICAzMiBiaW5z
IG9mIHNpemUgICAgICA2NAotICAgIDE2IGJpbnMgb2Ygc2l6ZSAgICAgNTEyCi0gICAgIDggYmlu
cyBvZiBzaXplICAgIDQwOTYKLSAgICAgNCBiaW5zIG9mIHNpemUgICAzMjc2OAotICAgICAyIGJp
bnMgb2Ygc2l6ZSAgMjYyMTQ0Ci0gICAgIDEgYmluICBvZiBzaXplIHdoYXQncyBsZWZ0Ci0KLSAg
ICBUaGUgYmlucyB0b3Agb3V0IGFyb3VuZCAxTUIgYmVjYXVzZSB3ZSBleHBlY3QgdG8gc2Vydmlj
ZSBsYXJnZQotICAgIHJlcXVlc3RzIHZpYSBtbWFwLgotKi8KLQotI2RlZmluZSBOQklOUyAgICAg
ICAgICAgICAgOTYKLSNkZWZpbmUgTlNNQUxMQklOUyAgICAgICAgIDMyCi0jZGVmaW5lIFNNQUxM
QklOX1dJRFRIICAgICAgOAotI2RlZmluZSBNSU5fTEFSR0VfU0laRSAgICAyNTYKLQotI2RlZmlu
ZSBpbl9zbWFsbGJpbl9yYW5nZShzeikgIFwKLSAgKChDSFVOS19TSVpFX1QpKHN6KSA8IChDSFVO
S19TSVpFX1QpTUlOX0xBUkdFX1NJWkUpCi0KLSNkZWZpbmUgc21hbGxiaW5faW5kZXgoc3opICAg
ICAoKCh1bnNpZ25lZCkoc3opKSA+PiAzKQotCi0vKgotICBDb21wdXRlIGluZGV4IGZvciBzaXpl
LiBXZSBleHBlY3QgdGhpcyB0byBiZSBpbmxpbmVkIHdoZW4KLSAgY29tcGlsZWQgd2l0aCBvcHRp
bWl6YXRpb24sIGVsc2Ugbm90LCB3aGljaCB3b3JrcyBvdXQgd2VsbC4KLSovCi1zdGF0aWMgaW50
IGxhcmdlYmluX2luZGV4KHVuc2lnbmVkIGludCBzeikgewotICB1bnNpZ25lZCBpbnQgIHggPSBz
eiA+PiBTTUFMTEJJTl9XSURUSDsgCi0gIHVuc2lnbmVkIGludCBtOyAgICAgICAgICAgIC8qIGJp
dCBwb3NpdGlvbiBvZiBoaWdoZXN0IHNldCBiaXQgb2YgbSAqLwotCi0gIGlmICh4ID49IDB4MTAw
MDApIHJldHVybiBOQklOUy0xOwotCi0gIC8qIE9uIGludGVsLCB1c2UgQlNSTCBpbnN0cnVjdGlv
biB0byBmaW5kIGhpZ2hlc3QgYml0ICovCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5l
ZChpMzg2KQotCi0gIF9fYXNtX18oImJzcmwgJTEsJTBcblx0IgotICAgICAgICAgIDogIj1yIiAo
bSkgCi0gICAgICAgICAgOiAiZyIgICh4KSk7Ci0KLSNlbHNlCi0gIHsKLSAgICAvKgotICAgICAg
QmFzZWQgb24gYnJhbmNoLWZyZWUgbmx6IGFsZ29yaXRobSBpbiBjaGFwdGVyIDUgb2YgSGVucnkK
LSAgICAgIFMuIFdhcnJlbiBKcidzIGJvb2sgIkhhY2tlcidzIERlbGlnaHQiLgotICAgICovCi0K
LSAgICB1bnNpZ25lZCBpbnQgbiA9ICgoeCAtIDB4MTAwKSA+PiAxNikgJiA4OwotICAgIHggPDw9
IG47IAotICAgIG0gPSAoKHggLSAweDEwMDApID4+IDE2KSAmIDQ7Ci0gICAgbiArPSBtOyAKLSAg
ICB4IDw8PSBtOyAKLSAgICBtID0gKCh4IC0gMHg0MDAwKSA+PiAxNikgJiAyOwotICAgIG4gKz0g
bTsgCi0gICAgeCA9ICh4IDw8IG0pID4+IDE0OwotICAgIG0gPSAxMyAtIG4gKyAoeCAmIH4oeD4+
MSkpOwotICB9Ci0jZW5kaWYKLQotICAvKiBVc2UgbmV4dCAyIGJpdHMgdG8gY3JlYXRlIGZpbmVy
LWdyYW51bGFyaXR5IGJpbnMgKi8KLSAgcmV0dXJuIE5TTUFMTEJJTlMgKyAobSA8PCAyKSArICgo
c3ogPj4gKG0gKyA2KSkgJiAzKTsKLX0KLQotI2RlZmluZSBiaW5faW5kZXgoc3opIFwKLSAoKGlu
X3NtYWxsYmluX3JhbmdlKHN6KSkgPyBzbWFsbGJpbl9pbmRleChzeikgOiBsYXJnZWJpbl9pbmRl
eChzeikpCi0KLS8qCi0gIEZJUlNUX1NPUlRFRF9CSU5fU0laRSBpcyB0aGUgY2h1bmsgc2l6ZSBj
b3JyZXNwb25kaW5nIHRvIHRoZQotICBmaXJzdCBiaW4gdGhhdCBpcyBtYWludGFpbmVkIGluIHNv
cnRlZCBvcmRlci4gVGhpcyBtdXN0Ci0gIGJlIHRoZSBzbWFsbGVzdCBzaXplIGNvcnJlc3BvbmRp
bmcgdG8gYSBnaXZlbiBiaW4uCi0KLSAgTm9ybWFsbHksIHRoaXMgc2hvdWxkIGJlIE1JTl9MQVJH
RV9TSVpFLiBCdXQgeW91IGNhbiB3ZWFrZW4KLSAgYmVzdCBmaXQgZ3VhcmFudGVlcyB0byBzb21l
dGltZXMgc3BlZWQgdXAgbWFsbG9jIGJ5IGluY3JlYXNpbmcgdmFsdWUuCi0gIERvaW5nIHRoaXMg
bWVhbnMgdGhhdCBtYWxsb2MgbWF5IGNob29zZSBhIGNodW5rIHRoYXQgaXMgCi0gIG5vbi1iZXN0
LWZpdHRpbmcgYnkgdXAgdG8gdGhlIHdpZHRoIG9mIHRoZSBiaW4uCi0KLSAgU29tZSB1c2VmdWwg
Y3V0b2ZmIHZhbHVlczoKLSAgICAgIDUxMiAtIGFsbCBiaW5zIHNvcnRlZAotICAgICAyNTYwIC0g
bGVhdmVzIGJpbnMgPD0gICAgIDY0IGJ5dGVzIHdpZGUgdW5zb3J0ZWQgIAotICAgIDEyMjg4IC0g
bGVhdmVzIGJpbnMgPD0gICAgNTEyIGJ5dGVzIHdpZGUgdW5zb3J0ZWQKLSAgICA2NTUzNiAtIGxl
YXZlcyBiaW5zIDw9ICAgNDA5NiBieXRlcyB3aWRlIHVuc29ydGVkCi0gICAyNjIxNDQgLSBsZWF2
ZXMgYmlucyA8PSAgMzI3NjggYnl0ZXMgd2lkZSB1bnNvcnRlZAotICAgICAgIC0xIC0gbm8gYmlu
cyBzb3J0ZWQgKG5vdCByZWNvbW1lbmRlZCEpCi0qLwotCi0jZGVmaW5lIEZJUlNUX1NPUlRFRF9C
SU5fU0laRSBNSU5fTEFSR0VfU0laRSAKLS8qICNkZWZpbmUgRklSU1RfU09SVEVEX0JJTl9TSVpF
IDY1NTM2ICovCi0KLS8qCi0gIFVuc29ydGVkIGNodW5rcwotCi0gICAgQWxsIHJlbWFpbmRlcnMg
ZnJvbSBjaHVuayBzcGxpdHMsIGFzIHdlbGwgYXMgYWxsIHJldHVybmVkIGNodW5rcywKLSAgICBh
cmUgZmlyc3QgcGxhY2VkIGluIHRoZSAidW5zb3J0ZWQiIGJpbi4gVGhleSBhcmUgdGhlbiBwbGFj
ZWQKLSAgICBpbiByZWd1bGFyIGJpbnMgYWZ0ZXIgbWFsbG9jIGdpdmVzIHRoZW0gT05FIGNoYW5j
ZSB0byBiZSB1c2VkIGJlZm9yZQotICAgIGJpbm5pbmcuIFNvLCBiYXNpY2FsbHksIHRoZSB1bnNv
cnRlZF9jaHVua3MgbGlzdCBhY3RzIGFzIGEgcXVldWUsCi0gICAgd2l0aCBjaHVua3MgYmVpbmcg
cGxhY2VkIG9uIGl0IGluIGZyZWUgKGFuZCBtYWxsb2NfY29uc29saWRhdGUpLAotICAgIGFuZCB0
YWtlbiBvZmYgKHRvIGJlIGVpdGhlciB1c2VkIG9yIHBsYWNlZCBpbiBiaW5zKSBpbiBtYWxsb2Mu
Ci0qLwotCi0vKiBUaGUgb3RoZXJ3aXNlIHVuaW5kZXhhYmxlIDEtYmluIGlzIHVzZWQgdG8gaG9s
ZCB1bnNvcnRlZCBjaHVua3MuICovCi0jZGVmaW5lIHVuc29ydGVkX2NodW5rcyhNKSAgICAgICAg
ICAoYmluX2F0KE0sIDEpKQotCi0vKgotICBUb3AKLQotICAgIFRoZSB0b3AtbW9zdCBhdmFpbGFi
bGUgY2h1bmsgKGkuZS4sIHRoZSBvbmUgYm9yZGVyaW5nIHRoZSBlbmQgb2YKLSAgICBhdmFpbGFi
bGUgbWVtb3J5KSBpcyB0cmVhdGVkIHNwZWNpYWxseS4gSXQgaXMgbmV2ZXIgaW5jbHVkZWQgaW4K
LSAgICBhbnkgYmluLCBpcyB1c2VkIG9ubHkgaWYgbm8gb3RoZXIgY2h1bmsgaXMgYXZhaWxhYmxl
LCBhbmQgaXMKLSAgICByZWxlYXNlZCBiYWNrIHRvIHRoZSBzeXN0ZW0gaWYgaXQgaXMgdmVyeSBs
YXJnZSAoc2VlCi0gICAgTV9UUklNX1RIUkVTSE9MRCkuICBCZWNhdXNlIHRvcCBpbml0aWFsbHkK
LSAgICBwb2ludHMgdG8gaXRzIG93biBiaW4gd2l0aCBpbml0aWFsIHplcm8gc2l6ZSwgdGh1cyBm
b3JjaW5nCi0gICAgZXh0ZW5zaW9uIG9uIHRoZSBmaXJzdCBtYWxsb2MgcmVxdWVzdCwgd2UgYXZv
aWQgaGF2aW5nIGFueSBzcGVjaWFsCi0gICAgY29kZSBpbiBtYWxsb2MgdG8gY2hlY2sgd2hldGhl
ciBpdCBldmVuIGV4aXN0cyB5ZXQuIEJ1dCB3ZSBzdGlsbAotICAgIG5lZWQgdG8gZG8gc28gd2hl
biBnZXR0aW5nIG1lbW9yeSBmcm9tIHN5c3RlbSwgc28gd2UgbWFrZQotICAgIGluaXRpYWxfdG9w
IHRyZWF0IHRoZSBiaW4gYXMgYSBsZWdhbCBidXQgdW51c2FibGUgY2h1bmsgZHVyaW5nIHRoZQot
ICAgIGludGVydmFsIGJldHdlZW4gaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBmaXJzdCBjYWxsIHRv
Ci0gICAgc1lTTUFMTE9jLiAoVGhpcyBpcyBzb21ld2hhdCBkZWxpY2F0ZSwgc2luY2UgaXQgcmVs
aWVzIG9uCi0gICAgdGhlIDIgcHJlY2VkaW5nIHdvcmRzIHRvIGJlIHplcm8gZHVyaW5nIHRoaXMg
aW50ZXJ2YWwgYXMgd2VsbC4pCi0qLwotCi0vKiBDb252ZW5pZW50bHksIHRoZSB1bnNvcnRlZCBi
aW4gY2FuIGJlIHVzZWQgYXMgZHVtbXkgdG9wIG9uIGZpcnN0IGNhbGwgKi8KLSNkZWZpbmUgaW5p
dGlhbF90b3AoTSkgICAgICAgICAgICAgICh1bnNvcnRlZF9jaHVua3MoTSkpCi0KLS8qCi0gIEJp
bm1hcAotCi0gICAgVG8gaGVscCBjb21wZW5zYXRlIGZvciB0aGUgbGFyZ2UgbnVtYmVyIG9mIGJp
bnMsIGEgb25lLWxldmVsIGluZGV4Ci0gICAgc3RydWN0dXJlIGlzIHVzZWQgZm9yIGJpbi1ieS1i
aW4gc2VhcmNoaW5nLiAgYGJpbm1hcCcgaXMgYQotICAgIGJpdHZlY3RvciByZWNvcmRpbmcgd2hl
dGhlciBiaW5zIGFyZSBkZWZpbml0ZWx5IGVtcHR5IHNvIHRoZXkgY2FuCi0gICAgYmUgc2tpcHBl
ZCBvdmVyIGR1cmluZyBkdXJpbmcgdHJhdmVyc2Fscy4gIFRoZSBiaXRzIGFyZSBOT1QgYWx3YXlz
Ci0gICAgY2xlYXJlZCBhcyBzb29uIGFzIGJpbnMgYXJlIGVtcHR5LCBidXQgaW5zdGVhZCBvbmx5
Ci0gICAgd2hlbiB0aGV5IGFyZSBub3RpY2VkIHRvIGJlIGVtcHR5IGR1cmluZyB0cmF2ZXJzYWwg
aW4gbWFsbG9jLgotKi8KLQotLyogQ29uc2VydmF0aXZlbHkgdXNlIDMyIGJpdHMgcGVyIG1hcCB3
b3JkLCBldmVuIGlmIG9uIDY0Yml0IHN5c3RlbSAqLwotI2RlZmluZSBCSU5NQVBTSElGVCAgICAg
IDUKLSNkZWZpbmUgQklUU1BFUk1BUCAgICAgICAoMVUgPDwgQklOTUFQU0hJRlQpCi0jZGVmaW5l
IEJJTk1BUFNJWkUgICAgICAgKE5CSU5TIC8gQklUU1BFUk1BUCkKLQotI2RlZmluZSBpZHgyYmxv
Y2soaSkgICAgICgoaSkgPj4gQklOTUFQU0hJRlQpCi0jZGVmaW5lIGlkeDJiaXQoaSkgICAgICAg
KCgxVSA8PCAoKGkpICYgKCgxVSA8PCBCSU5NQVBTSElGVCktMSkpKSkKLQotI2RlZmluZSBtYXJr
X2JpbihtLGkpICAgICgobSktPmJpbm1hcFtpZHgyYmxvY2soaSldIHw9ICBpZHgyYml0KGkpKQot
I2RlZmluZSB1bm1hcmtfYmluKG0saSkgICgobSktPmJpbm1hcFtpZHgyYmxvY2soaSldICY9IH4o
aWR4MmJpdChpKSkpCi0jZGVmaW5lIGdldF9iaW5tYXAobSxpKSAgKChtKS0+YmlubWFwW2lkeDJi
bG9jayhpKV0gJiAgIGlkeDJiaXQoaSkpCi0KLS8qCi0gIEZhc3RiaW5zCi0KLSAgICBBbiBhcnJh
eSBvZiBsaXN0cyBob2xkaW5nIHJlY2VudGx5IGZyZWVkIHNtYWxsIGNodW5rcy4gIEZhc3RiaW5z
Ci0gICAgYXJlIG5vdCBkb3VibHkgbGlua2VkLiAgSXQgaXMgZmFzdGVyIHRvIHNpbmdsZS1saW5r
IHRoZW0sIGFuZAotICAgIHNpbmNlIGNodW5rcyBhcmUgbmV2ZXIgcmVtb3ZlZCBmcm9tIHRoZSBt
aWRkbGVzIG9mIHRoZXNlIGxpc3RzLAotICAgIGRvdWJsZSBsaW5raW5nIGlzIG5vdCBuZWNlc3Nh
cnkuIEFsc28sIHVubGlrZSByZWd1bGFyIGJpbnMsIHRoZXkKLSAgICBhcmUgbm90IGV2ZW4gcHJv
Y2Vzc2VkIGluIEZJRk8gb3JkZXIgKHRoZXkgdXNlIGZhc3RlciBMSUZPKSBzaW5jZQotICAgIG9y
ZGVyaW5nIGRvZXNuJ3QgbXVjaCBtYXR0ZXIgaW4gdGhlIHRyYW5zaWVudCBjb250ZXh0cyBpbiB3
aGljaAotICAgIGZhc3RiaW5zIGFyZSBub3JtYWxseSB1c2VkLgotCi0gICAgQ2h1bmtzIGluIGZh
c3RiaW5zIGtlZXAgdGhlaXIgaW51c2UgYml0IHNldCwgc28gdGhleSBjYW5ub3QKLSAgICBiZSBj
b25zb2xpZGF0ZWQgd2l0aCBvdGhlciBmcmVlIGNodW5rcy4gbWFsbG9jX2NvbnNvbGlkYXRlCi0g
ICAgcmVsZWFzZXMgYWxsIGNodW5rcyBpbiBmYXN0YmlucyBhbmQgY29uc29saWRhdGVzIHRoZW0g
d2l0aAotICAgIG90aGVyIGZyZWUgY2h1bmtzLiAKLSovCi0KLXR5cGVkZWYgc3RydWN0IG1hbGxv
Y19jaHVuayogbWZhc3RiaW5wdHI7Ci0KLS8qIG9mZnNldCAyIHRvIHVzZSBvdGhlcndpc2UgdW5p
bmRleGFibGUgZmlyc3QgMiBiaW5zICovCi0jZGVmaW5lIGZhc3RiaW5faW5kZXgoc3opICAgICAg
ICAoKCgodW5zaWduZWQgaW50KShzeikpID4+IDMpIC0gMikKLQotLyogVGhlIG1heGltdW0gZmFz
dGJpbiByZXF1ZXN0IHNpemUgd2Ugc3VwcG9ydCAqLwotI2RlZmluZSBNQVhfRkFTVF9TSVpFICAg
ICA4MAotCi0jZGVmaW5lIE5GQVNUQklOUyAgKGZhc3RiaW5faW5kZXgocmVxdWVzdDJzaXplKE1B
WF9GQVNUX1NJWkUpKSsxKQotCi0vKgotICBGQVNUQklOX0NPTlNPTElEQVRJT05fVEhSRVNIT0xE
IGlzIHRoZSBzaXplIG9mIGEgY2h1bmsgaW4gZnJlZSgpCi0gIHRoYXQgdHJpZ2dlcnMgYXV0b21h
dGljIGNvbnNvbGlkYXRpb24gb2YgcG9zc2libHktc3Vycm91bmRpbmcKLSAgZmFzdGJpbiBjaHVu
a3MuIFRoaXMgaXMgYSBoZXVyaXN0aWMsIHNvIHRoZSBleGFjdCB2YWx1ZSBzaG91bGQgbm90Ci0g
IG1hdHRlciB0b28gbXVjaC4gSXQgaXMgZGVmaW5lZCBhdCBoYWxmIHRoZSBkZWZhdWx0IHRyaW0g
dGhyZXNob2xkIGFzIGEKLSAgY29tcHJvbWlzZSBoZXVyaXN0aWMgdG8gb25seSBhdHRlbXB0IGNv
bnNvbGlkYXRpb24gaWYgaXQgaXMgbGlrZWx5Ci0gIHRvIGxlYWQgdG8gdHJpbW1pbmcuIEhvd2V2
ZXIsIGl0IGlzIG5vdCBkeW5hbWljYWxseSB0dW5hYmxlLCBzaW5jZQotICBjb25zb2xpZGF0aW9u
IHJlZHVjZXMgZnJhZ21lbnRhdGlvbiBzdXJyb3VuZGluZyBsb2FyZ2UgY2h1bmtzIGV2ZW4gCi0g
IGlmIHRyaW1taW5nIGlzIG5vdCB1c2VkLgotKi8KLQotI2RlZmluZSBGQVNUQklOX0NPTlNPTElE
QVRJT05fVEhSRVNIT0xEICBcCi0gICgodW5zaWduZWQgbG9uZykoREVGQVVMVF9UUklNX1RIUkVT
SE9MRCkgPj4gMSkKLQotLyoKLSAgU2luY2UgdGhlIGxvd2VzdCAyIGJpdHMgaW4gbWF4X2Zhc3Qg
ZG9uJ3QgbWF0dGVyIGluIHNpemUgY29tcGFyaXNvbnMsIAotICB0aGV5IGFyZSB1c2VkIGFzIGZs
YWdzLgotKi8KLQotLyoKLSAgQU5ZQ0hVTktTX0JJVCBoZWxkIGluIG1heF9mYXN0IGluZGljYXRl
cyB0aGF0IHRoZXJlIG1heSBiZSBhbnkKLSAgZnJlZWQgY2h1bmtzIGF0IGFsbC4gSXQgaXMgc2V0
IHRydWUgd2hlbiBlbnRlcmluZyBhIGNodW5rIGludG8gYW55Ci0gIGJpbi4KLSovCi0KLSNkZWZp
bmUgQU5ZQ0hVTktTX0JJVCAgICAgICAgKDFVKQotCi0jZGVmaW5lIGhhdmVfYW55Y2h1bmtzKE0p
ICAgICAoKChNKS0+bWF4X2Zhc3QgJiAgQU5ZQ0hVTktTX0JJVCkpCi0jZGVmaW5lIHNldF9hbnlj
aHVua3MoTSkgICAgICAoKE0pLT5tYXhfZmFzdCB8PSAgQU5ZQ0hVTktTX0JJVCkKLSNkZWZpbmUg
Y2xlYXJfYW55Y2h1bmtzKE0pICAgICgoTSktPm1heF9mYXN0ICY9IH5BTllDSFVOS1NfQklUKQot
Ci0vKgotICBGQVNUQ0hVTktTX0JJVCBoZWxkIGluIG1heF9mYXN0IGluZGljYXRlcyB0aGF0IHRo
ZXJlIGFyZSBwcm9iYWJseQotICBzb21lIGZhc3RiaW4gY2h1bmtzLiBJdCBpcyBzZXQgdHJ1ZSBv
biBlbnRlcmluZyBhIGNodW5rIGludG8gYW55Ci0gIGZhc3RiaW4sIGFuZCBjbGVhcmVkIG9ubHkg
aW4gbWFsbG9jX2NvbnNvbGlkYXRlLgotKi8KLQotI2RlZmluZSBGQVNUQ0hVTktTX0JJVCAgICAg
ICAgKDJVKQotCi0jZGVmaW5lIGhhdmVfZmFzdGNodW5rcyhNKSAgICgoKE0pLT5tYXhfZmFzdCAm
ICBGQVNUQ0hVTktTX0JJVCkpCi0jZGVmaW5lIHNldF9mYXN0Y2h1bmtzKE0pICAgICgoTSktPm1h
eF9mYXN0IHw9ICAoRkFTVENIVU5LU19CSVR8QU5ZQ0hVTktTX0JJVCkpCi0jZGVmaW5lIGNsZWFy
X2Zhc3RjaHVua3MoTSkgICgoTSktPm1heF9mYXN0ICY9IH4oRkFTVENIVU5LU19CSVQpKQotCi0v
KiAKLSAgIFNldCB2YWx1ZSBvZiBtYXhfZmFzdC4gCi0gICBVc2UgaW1wb3NzaWJseSBzbWFsbCB2
YWx1ZSBpZiAwLgotKi8KLQotI2RlZmluZSBzZXRfbWF4X2Zhc3QoTSwgcykgXAotICAoTSktPm1h
eF9mYXN0ID0gKCgocykgPT0gMCk/IFNNQUxMQklOX1dJRFRIOiByZXF1ZXN0MnNpemUocykpIHwg
XAotICAoKE0pLT5tYXhfZmFzdCAmICAoRkFTVENIVU5LU19CSVR8QU5ZQ0hVTktTX0JJVCkpCi0K
LSNkZWZpbmUgZ2V0X21heF9mYXN0KE0pIFwKLSAgKChNKS0+bWF4X2Zhc3QgJiB+KEZBU1RDSFVO
S1NfQklUIHwgQU5ZQ0hVTktTX0JJVCkpCi0KLQotLyoKLSAgbW9yZWNvcmVfcHJvcGVydGllcyBp
cyBhIHN0YXR1cyB3b3JkIGhvbGRpbmcgZHluYW1pY2FsbHkgZGlzY292ZXJlZAotICBvciBjb250
cm9sbGVkIHByb3BlcnRpZXMgb2YgdGhlIG1vcmVjb3JlIGZ1bmN0aW9uCi0qLwotCi0jZGVmaW5l
IE1PUkVDT1JFX0NPTlRJR1VPVVNfQklUICAoMVUpCi0KLSNkZWZpbmUgY29udGlndW91cyhNKSBc
Ci0gICAgICAgICgoKE0pLT5tb3JlY29yZV9wcm9wZXJ0aWVzICYgIE1PUkVDT1JFX0NPTlRJR1VP
VVNfQklUKSkKLSNkZWZpbmUgbm9uY29udGlndW91cyhNKSBcCi0gICAgICAgICgoKE0pLT5tb3Jl
Y29yZV9wcm9wZXJ0aWVzICYgIE1PUkVDT1JFX0NPTlRJR1VPVVNfQklUKSA9PSAwKQotI2RlZmlu
ZSBzZXRfY29udGlndW91cyhNKSBcCi0gICAgICAgICgoTSktPm1vcmVjb3JlX3Byb3BlcnRpZXMg
fD0gIE1PUkVDT1JFX0NPTlRJR1VPVVNfQklUKQotI2RlZmluZSBzZXRfbm9uY29udGlndW91cyhN
KSBcCi0gICAgICAgICgoTSktPm1vcmVjb3JlX3Byb3BlcnRpZXMgJj0gfk1PUkVDT1JFX0NPTlRJ
R1VPVVNfQklUKQotCi0KLS8qCi0gICAtLS0tLS0tLS0tLSBJbnRlcm5hbCBzdGF0ZSByZXByZXNl
bnRhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gLS0tLS0tLS0tLS0KLSovCi0KLXN0cnVjdCBtYWxs
b2Nfc3RhdGUgewotCi0gIC8qIFRoZSBtYXhpbXVtIGNodW5rIHNpemUgdG8gYmUgZWxpZ2libGUg
Zm9yIGZhc3RiaW4gKi8KLSAgSU5URVJOQUxfU0laRV9UICBtYXhfZmFzdDsgICAvKiBsb3cgMiBi
aXRzIHVzZWQgYXMgZmxhZ3MgKi8KLQotICAvKiBGYXN0YmlucyAqLwotICBtZmFzdGJpbnB0ciAg
ICAgIGZhc3RiaW5zW05GQVNUQklOU107Ci0KLSAgLyogQmFzZSBvZiB0aGUgdG9wbW9zdCBjaHVu
ayAtLSBub3Qgb3RoZXJ3aXNlIGtlcHQgaW4gYSBiaW4gKi8KLSAgbWNodW5rcHRyICAgICAgICB0
b3A7Ci0KLSAgLyogVGhlIHJlbWFpbmRlciBmcm9tIHRoZSBtb3N0IHJlY2VudCBzcGxpdCBvZiBh
IHNtYWxsIHJlcXVlc3QgKi8KLSAgbWNodW5rcHRyICAgICAgICBsYXN0X3JlbWFpbmRlcjsKLQot
ICAvKiBOb3JtYWwgYmlucyBwYWNrZWQgYXMgZGVzY3JpYmVkIGFib3ZlICovCi0gIG1jaHVua3B0
ciAgICAgICAgYmluc1tOQklOUyAqIDJdOwotCi0gIC8qIEJpdG1hcCBvZiBiaW5zLiBUcmFpbGlu
ZyB6ZXJvIG1hcCBoYW5kbGVzIGNhc2VzIG9mIGxhcmdlc3QgYmlubmVkIHNpemUgKi8KLSAgdW5z
aWduZWQgaW50ICAgICBiaW5tYXBbQklOTUFQU0laRSsxXTsKLQotICAvKiBUdW5hYmxlIHBhcmFt
ZXRlcnMgKi8KLSAgQ0hVTktfU0laRV9UICAgICB0cmltX3RocmVzaG9sZDsKLSAgSU5URVJOQUxf
U0laRV9UICB0b3BfcGFkOwotICBJTlRFUk5BTF9TSVpFX1QgIG1tYXBfdGhyZXNob2xkOwotCi0g
IC8qIE1lbW9yeSBtYXAgc3VwcG9ydCAqLwotICBpbnQgICAgICAgICAgICAgIG5fbW1hcHM7Ci0g
IGludCAgICAgICAgICAgICAgbl9tbWFwc19tYXg7Ci0gIGludCAgICAgICAgICAgICAgbWF4X25f
bW1hcHM7Ci0KLSAgLyogQ2FjaGUgbWFsbG9jX2dldHBhZ2VzaXplICovCi0gIHVuc2lnbmVkIGlu
dCAgICAgcGFnZXNpemU7ICAgIAotCi0gIC8qIFRyYWNrIHByb3BlcnRpZXMgb2YgTU9SRUNPUkUg
Ki8KLSAgdW5zaWduZWQgaW50ICAgICBtb3JlY29yZV9wcm9wZXJ0aWVzOwotCi0gIC8qIFN0YXRp
c3RpY3MgKi8KLSAgSU5URVJOQUxfU0laRV9UICBtbWFwcGVkX21lbTsKLSAgSU5URVJOQUxfU0la
RV9UICBzYnJrZWRfbWVtOwotICBJTlRFUk5BTF9TSVpFX1QgIG1heF9zYnJrZWRfbWVtOwotICBJ
TlRFUk5BTF9TSVpFX1QgIG1heF9tbWFwcGVkX21lbTsKLSAgSU5URVJOQUxfU0laRV9UICBtYXhf
dG90YWxfbWVtOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3N0YXRlICptc3RhdGU7Ci0K
LS8qIAotICAgVGhlcmUgaXMgZXhhY3RseSBvbmUgaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3QgaW4g
dGhpcyBtYWxsb2MuCi0gICBJZiB5b3UgYXJlIGFkYXB0aW5nIHRoaXMgbWFsbG9jIGluIGEgd2F5
IHRoYXQgZG9lcyBOT1QgdXNlIGEgc3RhdGljCi0gICBtYWxsb2Nfc3RhdGUsIHlvdSBNVVNUIGV4
cGxpY2l0bHkgemVyby1maWxsIGl0IGJlZm9yZSB1c2luZy4gVGhpcwotICAgbWFsbG9jIHJlbGll
cyBvbiB0aGUgcHJvcGVydHkgdGhhdCBtYWxsb2Nfc3RhdGUgaXMgaW5pdGlhbGl6ZWQgdG8KLSAg
IGFsbCB6ZXJvZXMgKGFzIGlzIHRydWUgb2YgQyBzdGF0aWNzKS4KLSovCi0KLXN0YXRpYyBzdHJ1
Y3QgbWFsbG9jX3N0YXRlIGF2XzsgIC8qIG5ldmVyIGRpcmVjdGx5IHJlZmVyZW5jZWQgKi8KLQot
LyoKLSAgIEFsbCB1c2VzIG9mIGF2XyBhcmUgdmlhIGdldF9tYWxsb2Nfc3RhdGUoKS4KLSAgIEF0
IG1vc3Qgb25lICJjYWxsIiB0byBnZXRfbWFsbG9jX3N0YXRlIGlzIG1hZGUgcGVyIGludm9jYXRp
b24gb2YKLSAgIHRoZSBwdWJsaWMgdmVyc2lvbnMgb2YgbWFsbG9jIGFuZCBmcmVlLCBidXQgb3Ro
ZXIgcm91dGluZXMKLSAgIHRoYXQgaW4gdHVybiBpbnZva2UgbWFsbG9jIGFuZC9vciBmcmVlIG1h
eSBjYWxsIG1vcmUgdGhlbiBvbmNlLiAKLSAgIEFsc28sIGl0IGlzIGNhbGxlZCBpbiBjaGVjayog
cm91dGluZXMgaWYgREVCVUcgaXMgc2V0LgotKi8KLQotI2RlZmluZSBnZXRfbWFsbG9jX3N0YXRl
KCkgKCYoYXZfKSkKLQotLyoKLSAgSW5pdGlhbGl6ZSBhIG1hbGxvY19zdGF0ZSBzdHJ1Y3QuCi0K
LSAgVGhpcyBpcyBjYWxsZWQgb25seSBmcm9tIHdpdGhpbiBtYWxsb2NfY29uc29saWRhdGUsIHdo
aWNoIG5lZWRzCi0gIGJlIGNhbGxlZCBpbiB0aGUgc2FtZSBjb250ZXh0cyBhbnl3YXkuICBJdCBp
cyBuZXZlciBjYWxsZWQgZGlyZWN0bHkKLSAgb3V0c2lkZSBvZiBtYWxsb2NfY29uc29saWRhdGUg
YmVjYXVzZSBzb21lIG9wdGltaXppbmcgY29tcGlsZXJzIHRyeQotICB0byBpbmxpbmUgaXQgYXQg
YWxsIGNhbGwgcG9pbnRzLCB3aGljaCB0dXJucyBvdXQgbm90IHRvIGJlIGFuCi0gIG9wdGltaXph
dGlvbiBhdCBhbGwuIChJbmxpbmluZyBpdCBpbiBtYWxsb2NfY29uc29saWRhdGUgaXMgZmluZSB0
aG91Z2guKQotKi8KLQotI2lmIF9fU1REX0MKLXN0YXRpYyB2b2lkIG1hbGxvY19pbml0X3N0YXRl
KG1zdGF0ZSBhdikKLSNlbHNlCi1zdGF0aWMgdm9pZCBtYWxsb2NfaW5pdF9zdGF0ZShhdikgbXN0
YXRlIGF2OwotI2VuZGlmCi17Ci0gIGludCAgICAgaTsKLSAgbWJpbnB0ciBiaW47Ci0gIAotICAv
KiBFc3RhYmxpc2ggY2lyY3VsYXIgbGlua3MgZm9yIG5vcm1hbCBiaW5zICovCi0gIGZvciAoaSA9
IDE7IGkgPCBOQklOUzsgKytpKSB7IAotICAgIGJpbiA9IGJpbl9hdChhdixpKTsKLSAgICBiaW4t
PmZkID0gYmluLT5iayA9IGJpbjsKLSAgfQotCi0gIGF2LT50b3BfcGFkICAgICAgICA9IERFRkFV
TFRfVE9QX1BBRDsKLSAgYXYtPm5fbW1hcHNfbWF4ICAgID0gREVGQVVMVF9NTUFQX01BWDsKLSAg
YXYtPm1tYXBfdGhyZXNob2xkID0gREVGQVVMVF9NTUFQX1RIUkVTSE9MRDsKLSAgYXYtPnRyaW1f
dGhyZXNob2xkID0gREVGQVVMVF9UUklNX1RIUkVTSE9MRDsKLQotI2lmIE1PUkVDT1JFX0NPTlRJ
R1VPVVMKLSAgc2V0X2NvbnRpZ3VvdXMoYXYpOwotI2Vsc2UKLSAgc2V0X25vbmNvbnRpZ3VvdXMo
YXYpOwotI2VuZGlmCi0KLQotICBzZXRfbWF4X2Zhc3QoYXYsIERFRkFVTFRfTVhGQVNUKTsKLQot
ICBhdi0+dG9wICAgICAgICAgICAgPSBpbml0aWFsX3RvcChhdik7Ci0gIGF2LT5wYWdlc2l6ZSAg
ICAgICA9IG1hbGxvY19nZXRwYWdlc2l6ZTsKLX0KLQotLyogCi0gICBPdGhlciBpbnRlcm5hbCB1
dGlsaXRpZXMgb3BlcmF0aW5nIG9uIG1zdGF0ZXMKLSovCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMg
Vm9pZF90KiAgc1lTTUFMTE9jKElOVEVSTkFMX1NJWkVfVCwgbXN0YXRlKTsKLSNpZm5kZWYgTU9S
RUNPUkVfQ0FOTk9UX1RSSU0KLXN0YXRpYyBpbnQgICAgICBzWVNUUkltKHNpemVfdCwgbXN0YXRl
KTsKLSNlbmRpZgotc3RhdGljIHZvaWQgICAgIG1hbGxvY19jb25zb2xpZGF0ZShtc3RhdGUpOwot
c3RhdGljIFZvaWRfdCoqIGlBTExPYyhzaXplX3QsIHNpemVfdCosIGludCwgVm9pZF90KiopOwot
I2Vsc2UKLXN0YXRpYyBWb2lkX3QqICBzWVNNQUxMT2MoKTsKLXN0YXRpYyBpbnQgICAgICBzWVNU
UkltKCk7Ci1zdGF0aWMgdm9pZCAgICAgbWFsbG9jX2NvbnNvbGlkYXRlKCk7Ci1zdGF0aWMgVm9p
ZF90KiogaUFMTE9jKCk7Ci0jZW5kaWYKLQotLyoKLSAgRGVidWdnaW5nIHN1cHBvcnQKLQotICBU
aGVzZSByb3V0aW5lcyBtYWtlIGEgbnVtYmVyIG9mIGFzc2VydGlvbnMgYWJvdXQgdGhlIHN0YXRl
cwotICBvZiBkYXRhIHN0cnVjdHVyZXMgdGhhdCBzaG91bGQgYmUgdHJ1ZSBhdCBhbGwgdGltZXMu
IElmIGFueQotICBhcmUgbm90IHRydWUsIGl0J3MgdmVyeSBsaWtlbHkgdGhhdCBhIHVzZXIgcHJv
Z3JhbSBoYXMgc29tZWhvdwotICB0cmFzaGVkIG1lbW9yeS4gKEl0J3MgYWxzbyBwb3NzaWJsZSB0
aGF0IHRoZXJlIGlzIGEgY29kaW5nIGVycm9yCi0gIGluIG1hbGxvYy4gSW4gd2hpY2ggY2FzZSwg
cGxlYXNlIHJlcG9ydCBpdCEpCi0qLwotCi0jaWYgISBERUJVRwotCi0jZGVmaW5lIGNoZWNrX2No
dW5rKFApCi0jZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoUCkKLSNkZWZpbmUgY2hlY2tfaW51c2Vf
Y2h1bmsoUCkKLSNkZWZpbmUgY2hlY2tfcmVtYWxsb2NlZF9jaHVuayhQLE4pCi0jZGVmaW5lIGNo
ZWNrX21hbGxvY2VkX2NodW5rKFAsTikKLSNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKCkKLQot
I2Vsc2UKLSNkZWZpbmUgY2hlY2tfY2h1bmsoUCkgICAgICAgICAgICAgIGRvX2NoZWNrX2NodW5r
KFApCi0jZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoUCkgICAgICAgICBkb19jaGVja19mcmVlX2No
dW5rKFApCi0jZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKFApICAgICAgICBkb19jaGVja19pbnVz
ZV9jaHVuayhQKQotI2RlZmluZSBjaGVja19yZW1hbGxvY2VkX2NodW5rKFAsTikgZG9fY2hlY2tf
cmVtYWxsb2NlZF9jaHVuayhQLE4pCi0jZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKFAsTikg
ICBkb19jaGVja19tYWxsb2NlZF9jaHVuayhQLE4pCi0jZGVmaW5lIGNoZWNrX21hbGxvY19zdGF0
ZSgpICAgICAgICBkb19jaGVja19tYWxsb2Nfc3RhdGUoKQotCi0vKgotICBQcm9wZXJ0aWVzIG9m
IGFsbCBjaHVua3MKLSovCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMgdm9pZCBkb19jaGVja19jaHVu
ayhtY2h1bmtwdHIgcCkKLSNlbHNlCi1zdGF0aWMgdm9pZCBkb19jaGVja19jaHVuayhwKSBtY2h1
bmtwdHIgcDsKLSNlbmRpZgotewotICBtc3RhdGUgYXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0g
IENIVU5LX1NJWkVfVCAgc3ogPSBjaHVua3NpemUocCk7Ci0gIC8qIG1pbiBhbmQgbWF4IHBvc3Np
YmxlIGFkZHJlc3NlcyBhc3N1bWluZyBjb250aWd1b3VzIGFsbG9jYXRpb24gKi8KLSAgY2hhciog
bWF4X2FkZHJlc3MgPSAoY2hhciopKGF2LT50b3ApICsgY2h1bmtzaXplKGF2LT50b3ApOwotICBj
aGFyKiBtaW5fYWRkcmVzcyA9IG1heF9hZGRyZXNzIC0gYXYtPnNicmtlZF9tZW07Ci0KLSAgaWYg
KCFjaHVua19pc19tbWFwcGVkKHApKSB7Ci0gICAgCi0gICAgLyogSGFzIGxlZ2FsIGFkZHJlc3Mg
Li4uICovCi0gICAgaWYgKHAgIT0gYXYtPnRvcCkgewotICAgICAgaWYgKGNvbnRpZ3VvdXMoYXYp
KSB7Ci0gICAgICAgIGFzc2VydCgoKGNoYXIqKXApID49IG1pbl9hZGRyZXNzKTsKLSAgICAgICAg
YXNzZXJ0KCgoY2hhciopcCArIHN6KSA8PSAoKGNoYXIqKShhdi0+dG9wKSkpOwotICAgICAgfQot
ICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIC8qIHRvcCBzaXplIGlzIGFsd2F5cyBhdCBsZWFzdCBN
SU5TSVpFICovCi0gICAgICBhc3NlcnQoKENIVU5LX1NJWkVfVCkoc3opID49IE1JTlNJWkUpOwot
ICAgICAgLyogdG9wIHByZWRlY2Vzc29yIGFsd2F5cyBtYXJrZWQgaW51c2UgKi8KLSAgICAgIGFz
c2VydChwcmV2X2ludXNlKHApKTsKLSAgICB9Ci0gICAgICAKLSAgfQotICBlbHNlIHsKLSNpZiBI
QVZFX01NQVAKLSAgICAvKiBhZGRyZXNzIGlzIG91dHNpZGUgbWFpbiBoZWFwICAqLwotICAgIGlm
IChjb250aWd1b3VzKGF2KSAmJiBhdi0+dG9wICE9IGluaXRpYWxfdG9wKGF2KSkgewotICAgICAg
YXNzZXJ0KCgoY2hhciopcCkgPCBtaW5fYWRkcmVzcyB8fCAoKGNoYXIqKXApID4gbWF4X2FkZHJl
c3MpOwotICAgIH0KLSAgICAvKiBjaHVuayBpcyBwYWdlLWFsaWduZWQgKi8KLSAgICBhc3NlcnQo
KChwLT5wcmV2X3NpemUgKyBzeikgJiAoYXYtPnBhZ2VzaXplLTEpKSA9PSAwKTsKLSAgICAvKiBt
ZW0gaXMgYWxpZ25lZCAqLwotICAgIGFzc2VydChhbGlnbmVkX09LKGNodW5rMm1lbShwKSkpOwot
I2Vsc2UKLSAgICAvKiBmb3JjZSBhbiBhcHByb3ByaWF0ZSBhc3NlcnQgdmlvbGF0aW9uIGlmIGRl
YnVnIHNldCAqLwotICAgIGFzc2VydCghY2h1bmtfaXNfbW1hcHBlZChwKSk7Ci0jZW5kaWYKLSAg
fQotfQotCi0vKgotICBQcm9wZXJ0aWVzIG9mIGZyZWUgY2h1bmtzCi0qLwotCi0jaWYgX19TVERf
Qwotc3RhdGljIHZvaWQgZG9fY2hlY2tfZnJlZV9jaHVuayhtY2h1bmtwdHIgcCkKLSNlbHNlCi1z
dGF0aWMgdm9pZCBkb19jaGVja19mcmVlX2NodW5rKHApIG1jaHVua3B0ciBwOwotI2VuZGlmCi17
Ci0gIG1zdGF0ZSBhdiA9IGdldF9tYWxsb2Nfc3RhdGUoKTsKLQotICBJTlRFUk5BTF9TSVpFX1Qg
c3ogPSBwLT5zaXplICYgflBSRVZfSU5VU0U7Ci0gIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfYXRf
b2Zmc2V0KHAsIHN6KTsKLQotICBkb19jaGVja19jaHVuayhwKTsKLQotICAvKiBDaHVuayBtdXN0
IGNsYWltIHRvIGJlIGZyZWUgLi4uICovCi0gIGFzc2VydCghaW51c2UocCkpOwotICBhc3NlcnQg
KCFjaHVua19pc19tbWFwcGVkKHApKTsKLQotICAvKiBVbmxlc3MgYSBzcGVjaWFsIG1hcmtlciwg
bXVzdCBoYXZlIE9LIGZpZWxkcyAqLwotICBpZiAoKENIVU5LX1NJWkVfVCkoc3opID49IE1JTlNJ
WkUpCi0gIHsKLSAgICBhc3NlcnQoKHN6ICYgTUFMTE9DX0FMSUdOX01BU0spID09IDApOwotICAg
IGFzc2VydChhbGlnbmVkX09LKGNodW5rMm1lbShwKSkpOwotICAgIC8qIC4uLiBtYXRjaGluZyBm
b290ZXIgZmllbGQgKi8KLSAgICBhc3NlcnQobmV4dC0+cHJldl9zaXplID09IHN6KTsKLSAgICAv
KiAuLi4gYW5kIGlzIGZ1bGx5IGNvbnNvbGlkYXRlZCAqLwotICAgIGFzc2VydChwcmV2X2ludXNl
KHApKTsKLSAgICBhc3NlcnQgKG5leHQgPT0gYXYtPnRvcCB8fCBpbnVzZShuZXh0KSk7Ci0KLSAg
ICAvKiAuLi4gYW5kIGhhcyBtaW5pbWFsbHkgc2FuZSBsaW5rcyAqLwotICAgIGFzc2VydChwLT5m
ZC0+YmsgPT0gcCk7Ci0gICAgYXNzZXJ0KHAtPmJrLT5mZCA9PSBwKTsKLSAgfQotICBlbHNlIC8q
IG1hcmtlcnMgYXJlIGFsd2F5cyBvZiBzaXplIFNJWkVfU1ogKi8KLSAgICBhc3NlcnQoc3ogPT0g
U0laRV9TWik7Ci19Ci0KLS8qCi0gIFByb3BlcnRpZXMgb2YgaW51c2UgY2h1bmtzCi0qLwotCi0j
aWYgX19TVERfQwotc3RhdGljIHZvaWQgZG9fY2hlY2tfaW51c2VfY2h1bmsobWNodW5rcHRyIHAp
Ci0jZWxzZQotc3RhdGljIHZvaWQgZG9fY2hlY2tfaW51c2VfY2h1bmsocCkgbWNodW5rcHRyIHA7
Ci0jZW5kaWYKLXsKLSAgbXN0YXRlIGF2ID0gZ2V0X21hbGxvY19zdGF0ZSgpOwotICBtY2h1bmtw
dHIgbmV4dDsKLSAgZG9fY2hlY2tfY2h1bmsocCk7Ci0KLSAgaWYgKGNodW5rX2lzX21tYXBwZWQo
cCkpCi0gICAgcmV0dXJuOyAvKiBtbWFwcGVkIGNodW5rcyBoYXZlIG5vIG5leHQvcHJldiAqLwot
Ci0gIC8qIENoZWNrIHdoZXRoZXIgaXQgY2xhaW1zIHRvIGJlIGluIHVzZSAuLi4gKi8KLSAgYXNz
ZXJ0KGludXNlKHApKTsKLQotICBuZXh0ID0gbmV4dF9jaHVuayhwKTsKLQotICAvKiAuLi4gYW5k
IGlzIHN1cnJvdW5kZWQgYnkgT0sgY2h1bmtzLgotICAgIFNpbmNlIG1vcmUgdGhpbmdzIGNhbiBi
ZSBjaGVja2VkIHdpdGggZnJlZSBjaHVua3MgdGhhbiBpbnVzZSBvbmVzLAotICAgIGlmIGFuIGlu
dXNlIGNodW5rIGJvcmRlcnMgdGhlbSBhbmQgZGVidWcgaXMgb24sIGl0J3Mgd29ydGggZG9pbmcg
dGhlbS4KLSAgKi8KLSAgaWYgKCFwcmV2X2ludXNlKHApKSAgewotICAgIC8qIE5vdGUgdGhhdCB3
ZSBjYW5ub3QgZXZlbiBsb29rIGF0IHByZXYgdW5sZXNzIGl0IGlzIG5vdCBpbnVzZSAqLwotICAg
IG1jaHVua3B0ciBwcnYgPSBwcmV2X2NodW5rKHApOwotICAgIGFzc2VydChuZXh0X2NodW5rKHBy
dikgPT0gcCk7Ci0gICAgZG9fY2hlY2tfZnJlZV9jaHVuayhwcnYpOwotICB9Ci0KLSAgaWYgKG5l
eHQgPT0gYXYtPnRvcCkgewotICAgIGFzc2VydChwcmV2X2ludXNlKG5leHQpKTsKLSAgICBhc3Nl
cnQoY2h1bmtzaXplKG5leHQpID49IE1JTlNJWkUpOwotICB9Ci0gIGVsc2UgaWYgKCFpbnVzZShu
ZXh0KSkKLSAgICBkb19jaGVja19mcmVlX2NodW5rKG5leHQpOwotfQotCi0vKgotICBQcm9wZXJ0
aWVzIG9mIGNodW5rcyByZWN5Y2xlZCBmcm9tIGZhc3RiaW5zCi0qLwotCi0jaWYgX19TVERfQwot
c3RhdGljIHZvaWQgZG9fY2hlY2tfcmVtYWxsb2NlZF9jaHVuayhtY2h1bmtwdHIgcCwgSU5URVJO
QUxfU0laRV9UIHMpCi0jZWxzZQotc3RhdGljIHZvaWQgZG9fY2hlY2tfcmVtYWxsb2NlZF9jaHVu
ayhwLCBzKSBtY2h1bmtwdHIgcDsgSU5URVJOQUxfU0laRV9UIHM7Ci0jZW5kaWYKLXsKLSAgSU5U
RVJOQUxfU0laRV9UIHN6ID0gcC0+c2l6ZSAmIH5QUkVWX0lOVVNFOwotCi0gIGRvX2NoZWNrX2lu
dXNlX2NodW5rKHApOwotCi0gIC8qIExlZ2FsIHNpemUgLi4uICovCi0gIGFzc2VydCgoc3ogJiBN
QUxMT0NfQUxJR05fTUFTSykgPT0gMCk7Ci0gIGFzc2VydCgoQ0hVTktfU0laRV9UKShzeikgPj0g
TUlOU0laRSk7Ci0gIC8qIC4uLiBhbmQgYWxpZ25tZW50ICovCi0gIGFzc2VydChhbGlnbmVkX09L
KGNodW5rMm1lbShwKSkpOwotICAvKiBjaHVuayBpcyBsZXNzIHRoYW4gTUlOU0laRSBtb3JlIHRo
YW4gcmVxdWVzdCAqLwotICBhc3NlcnQoKGxvbmcpKHN6KSAtIChsb25nKShzKSA+PSAwKTsKLSAg
YXNzZXJ0KChsb25nKShzeikgLSAobG9uZykocyArIE1JTlNJWkUpIDwgMCk7Ci19Ci0KLS8qCi0g
IFByb3BlcnRpZXMgb2Ygbm9ucmVjeWNsZWQgY2h1bmtzIGF0IHRoZSBwb2ludCB0aGV5IGFyZSBt
YWxsb2NlZAotKi8KLQotI2lmIF9fU1REX0MKLXN0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY2Vk
X2NodW5rKG1jaHVua3B0ciBwLCBJTlRFUk5BTF9TSVpFX1QgcykKLSNlbHNlCi1zdGF0aWMgdm9p
ZCBkb19jaGVja19tYWxsb2NlZF9jaHVuayhwLCBzKSBtY2h1bmtwdHIgcDsgSU5URVJOQUxfU0la
RV9UIHM7Ci0jZW5kaWYKLXsKLSAgLyogc2FtZSBhcyByZWN5Y2xlZCBjYXNlIC4uLiAqLwotICBk
b19jaGVja19yZW1hbGxvY2VkX2NodW5rKHAsIHMpOwotCi0gIC8qCi0gICAgLi4uIHBsdXMsICBt
dXN0IG9iZXkgaW1wbGVtZW50YXRpb24gaW52YXJpYW50IHRoYXQgcHJldl9pbnVzZSBpcwotICAg
IGFsd2F5cyB0cnVlIG9mIGFueSBhbGxvY2F0ZWQgY2h1bms7IGkuZS4sIHRoYXQgZWFjaCBhbGxv
Y2F0ZWQKLSAgICBjaHVuayBib3JkZXJzIGVpdGhlciBhIHByZXZpb3VzbHkgYWxsb2NhdGVkIGFu
ZCBzdGlsbCBpbi11c2UKLSAgICBjaHVuaywgb3IgdGhlIGJhc2Ugb2YgaXRzIG1lbW9yeSBhcmVu
YS4gVGhpcyBpcyBlbnN1cmVkCi0gICAgYnkgbWFraW5nIGFsbCBhbGxvY2F0aW9ucyBmcm9tIHRo
ZSB0aGUgYGxvd2VzdCcgcGFydCBvZiBhbnkgZm91bmQKLSAgICBjaHVuay4gIFRoaXMgZG9lcyBu
b3QgbmVjZXNzYXJpbHkgaG9sZCBob3dldmVyIGZvciBjaHVua3MKLSAgICByZWN5Y2xlZCB2aWEg
ZmFzdGJpbnMuCi0gICovCi0KLSAgYXNzZXJ0KHByZXZfaW51c2UocCkpOwotfQotCi0KLS8qCi0g
IFByb3BlcnRpZXMgb2YgbWFsbG9jX3N0YXRlLgotCi0gIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3Ig
ZGVidWdnaW5nIG1hbGxvYywgYXMgd2VsbCBhcyBkZXRlY3RpbmcgdXNlcgotICBwcm9ncmFtbWVy
IGVycm9ycyB0aGF0IHNvbWVob3cgd3JpdGUgaW50byBtYWxsb2Nfc3RhdGUuCi0KLSAgSWYgeW91
IGFyZSBleHRlbmRpbmcgb3IgZXhwZXJpbWVudGluZyB3aXRoIHRoaXMgbWFsbG9jLCB5b3UgY2Fu
Ci0gIHByb2JhYmx5IGZpZ3VyZSBvdXQgaG93IHRvIGhhY2sgdGhpcyByb3V0aW5lIHRvIHByaW50
IG91dCBvcgotICBkaXNwbGF5IGNodW5rIGFkZHJlc3Nlcywgc2l6ZXMsIGJpbnMsIGFuZCBvdGhl
ciBpbnN0cnVtZW50YXRpb24uCi0qLwotCi1zdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2Nfc3Rh
dGUoKQotewotICBtc3RhdGUgYXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0gIHVuc2lnbmVkIGlu
dCBpOwotICBtY2h1bmtwdHIgcDsKLSAgbWNodW5rcHRyIHE7Ci0gIG1iaW5wdHIgYjsKLSAgdW5z
aWduZWQgaW50IGJpbmJpdDsKLSAgaW50IGVtcHR5OwotICB1bnNpZ25lZCBpbnQgaWR4OwotICBJ
TlRFUk5BTF9TSVpFX1Qgc2l6ZTsKLSAgQ0hVTktfU0laRV9UICB0b3RhbCA9IDA7Ci0gIGludCBt
YXhfZmFzdF9iaW47Ci0KLSAgLyogaW50ZXJuYWwgc2l6ZV90IG11c3QgYmUgbm8gd2lkZXIgdGhh
biBwb2ludGVyIHR5cGUgKi8KLSAgYXNzZXJ0KHNpemVvZihJTlRFUk5BTF9TSVpFX1QpIDw9IHNp
emVvZihjaGFyKikpOwotCi0gIC8qIGFsaWdubWVudCBpcyBhIHBvd2VyIG9mIDIgKi8KLSAgYXNz
ZXJ0KChNQUxMT0NfQUxJR05NRU5UICYgKE1BTExPQ19BTElHTk1FTlQtMSkpID09IDApOwotCi0g
IC8qIGNhbm5vdCBydW4gcmVtYWluaW5nIGNoZWNrcyB1bnRpbCBmdWxseSBpbml0aWFsaXplZCAq
LwotICBpZiAoYXYtPnRvcCA9PSAwIHx8IGF2LT50b3AgPT0gaW5pdGlhbF90b3AoYXYpKQotICAg
IHJldHVybjsKLQotICAvKiBwYWdlc2l6ZSBpcyBhIHBvd2VyIG9mIDIgKi8KLSAgYXNzZXJ0KChh
di0+cGFnZXNpemUgJiAoYXYtPnBhZ2VzaXplLTEpKSA9PSAwKTsKLQotICAvKiBwcm9wZXJ0aWVz
IG9mIGZhc3RiaW5zICovCi0KLSAgLyogbWF4X2Zhc3QgaXMgaW4gYWxsb3dlZCByYW5nZSAqLwot
ICBhc3NlcnQoZ2V0X21heF9mYXN0KGF2KSA8PSByZXF1ZXN0MnNpemUoTUFYX0ZBU1RfU0laRSkp
OwotCi0gIG1heF9mYXN0X2JpbiA9IGZhc3RiaW5faW5kZXgoYXYtPm1heF9mYXN0KTsKLQotICBm
b3IgKGkgPSAwOyBpIDwgTkZBU1RCSU5TOyArK2kpIHsKLSAgICBwID0gYXYtPmZhc3RiaW5zW2ld
OwotCi0gICAgLyogYWxsIGJpbnMgcGFzdCBtYXhfZmFzdCBhcmUgZW1wdHkgKi8KLSAgICBpZiAo
aSA+IG1heF9mYXN0X2JpbikKLSAgICAgIGFzc2VydChwID09IDApOwotCi0gICAgd2hpbGUgKHAg
IT0gMCkgewotICAgICAgLyogZWFjaCBjaHVuayBjbGFpbXMgdG8gYmUgaW51c2UgKi8KLSAgICAg
IGRvX2NoZWNrX2ludXNlX2NodW5rKHApOwotICAgICAgdG90YWwgKz0gY2h1bmtzaXplKHApOwot
ICAgICAgLyogY2h1bmsgYmVsb25ncyBpbiB0aGlzIGJpbiAqLwotICAgICAgYXNzZXJ0KGZhc3Ri
aW5faW5kZXgoY2h1bmtzaXplKHApKSA9PSBpKTsKLSAgICAgIHAgPSBwLT5mZDsKLSAgICB9Ci0g
IH0KLQotICBpZiAodG90YWwgIT0gMCkKLSAgICBhc3NlcnQoaGF2ZV9mYXN0Y2h1bmtzKGF2KSk7
Ci0gIGVsc2UgaWYgKCFoYXZlX2Zhc3RjaHVua3MoYXYpKQotICAgIGFzc2VydCh0b3RhbCA9PSAw
KTsKLQotICAvKiBjaGVjayBub3JtYWwgYmlucyAqLwotICBmb3IgKGkgPSAxOyBpIDwgTkJJTlM7
ICsraSkgewotICAgIGIgPSBiaW5fYXQoYXYsaSk7Ci0KLSAgICAvKiBiaW5tYXAgaXMgYWNjdXJh
dGUgKGV4Y2VwdCBmb3IgYmluIDEgPT0gdW5zb3J0ZWRfY2h1bmtzKSAqLwotICAgIGlmIChpID49
IDIpIHsKLSAgICAgIGJpbmJpdCA9IGdldF9iaW5tYXAoYXYsaSk7Ci0gICAgICBlbXB0eSA9IGxh
c3QoYikgPT0gYjsKLSAgICAgIGlmICghYmluYml0KQotICAgICAgICBhc3NlcnQoZW1wdHkpOwot
ICAgICAgZWxzZSBpZiAoIWVtcHR5KQotICAgICAgICBhc3NlcnQoYmluYml0KTsKLSAgICB9Ci0K
LSAgICBmb3IgKHAgPSBsYXN0KGIpOyBwICE9IGI7IHAgPSBwLT5iaykgewotICAgICAgLyogZWFj
aCBjaHVuayBjbGFpbXMgdG8gYmUgZnJlZSAqLwotICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhw
KTsKLSAgICAgIHNpemUgPSBjaHVua3NpemUocCk7Ci0gICAgICB0b3RhbCArPSBzaXplOwotICAg
ICAgaWYgKGkgPj0gMikgewotICAgICAgICAvKiBjaHVuayBiZWxvbmdzIGluIGJpbiAqLwotICAg
ICAgICBpZHggPSBiaW5faW5kZXgoc2l6ZSk7Ci0gICAgICAgIGFzc2VydChpZHggPT0gaSk7Ci0g
ICAgICAgIC8qIGxpc3RzIGFyZSBzb3J0ZWQgKi8KLSAgICAgICAgaWYgKChDSFVOS19TSVpFX1Qp
IHNpemUgPj0gKENIVU5LX1NJWkVfVCkoRklSU1RfU09SVEVEX0JJTl9TSVpFKSkgewotICAgICAg
ICAgIGFzc2VydChwLT5iayA9PSBiIHx8IAotICAgICAgICAgICAgICAgICAoQ0hVTktfU0laRV9U
KWNodW5rc2l6ZShwLT5iaykgPj0gCi0gICAgICAgICAgICAgICAgIChDSFVOS19TSVpFX1QpY2h1
bmtzaXplKHApKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyogY2h1bmsgaXMgZm9sbG93
ZWQgYnkgYSBsZWdhbCBjaGFpbiBvZiBpbnVzZSBjaHVua3MgKi8KLSAgICAgIGZvciAocSA9IG5l
eHRfY2h1bmsocCk7Ci0gICAgICAgICAgIChxICE9IGF2LT50b3AgJiYgaW51c2UocSkgJiYgCi0g
ICAgICAgICAgICAgKENIVU5LX1NJWkVfVCkoY2h1bmtzaXplKHEpKSA+PSBNSU5TSVpFKTsKLSAg
ICAgICAgICAgcSA9IG5leHRfY2h1bmsocSkpCi0gICAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5r
KHEpOwotICAgIH0KLSAgfQotCi0gIC8qIHRvcCBjaHVuayBpcyBPSyAqLwotICBjaGVja19jaHVu
ayhhdi0+dG9wKTsKLQotICAvKiBzYW5pdHkgY2hlY2tzIGZvciBzdGF0aXN0aWNzICovCi0KLSAg
YXNzZXJ0KHRvdGFsIDw9IChDSFVOS19TSVpFX1QpKGF2LT5tYXhfdG90YWxfbWVtKSk7Ci0gIGFz
c2VydChhdi0+bl9tbWFwcyA+PSAwKTsKLSAgYXNzZXJ0KGF2LT5uX21tYXBzIDw9IGF2LT5tYXhf
bl9tbWFwcyk7Ci0KLSAgYXNzZXJ0KChDSFVOS19TSVpFX1QpKGF2LT5zYnJrZWRfbWVtKSA8PQot
ICAgICAgICAgKENIVU5LX1NJWkVfVCkoYXYtPm1heF9zYnJrZWRfbWVtKSk7Ci0KLSAgYXNzZXJ0
KChDSFVOS19TSVpFX1QpKGF2LT5tbWFwcGVkX21lbSkgPD0KLSAgICAgICAgIChDSFVOS19TSVpF
X1QpKGF2LT5tYXhfbW1hcHBlZF9tZW0pKTsKLQotICBhc3NlcnQoKENIVU5LX1NJWkVfVCkoYXYt
Pm1heF90b3RhbF9tZW0pID49Ci0gICAgICAgICAoQ0hVTktfU0laRV9UKShhdi0+bW1hcHBlZF9t
ZW0pICsgKENIVU5LX1NJWkVfVCkoYXYtPnNicmtlZF9tZW0pKTsKLX0KLSNlbmRpZgotCi0KLS8q
IC0tLS0tLS0tLS0tIFJvdXRpbmVzIGRlYWxpbmcgd2l0aCBzeXN0ZW0gYWxsb2NhdGlvbiAtLS0t
LS0tLS0tLS0tLSAqLwotCi0vKgotICBzeXNtYWxsb2MgaGFuZGxlcyBtYWxsb2MgY2FzZXMgcmVx
dWlyaW5nIG1vcmUgbWVtb3J5IGZyb20gdGhlIHN5c3RlbS4KLSAgT24gZW50cnksIGl0IGlzIGFz
c3VtZWQgdGhhdCBhdi0+dG9wIGRvZXMgbm90IGhhdmUgZW5vdWdoCi0gIHNwYWNlIHRvIHNlcnZp
Y2UgcmVxdWVzdCBmb3IgbmIgYnl0ZXMsIHRodXMgcmVxdWlyaW5nIHRoYXQgYXYtPnRvcAotICBi
ZSBleHRlbmRlZCBvciByZXBsYWNlZC4KLSovCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMgVm9pZF90
KiBzWVNNQUxMT2MoSU5URVJOQUxfU0laRV9UIG5iLCBtc3RhdGUgYXYpCi0jZWxzZQotc3RhdGlj
IFZvaWRfdCogc1lTTUFMTE9jKG5iLCBhdikgSU5URVJOQUxfU0laRV9UIG5iOyBtc3RhdGUgYXY7
Ci0jZW5kaWYKLXsKLSAgbWNodW5rcHRyICAgICAgIG9sZF90b3A7ICAgICAgICAvKiBpbmNvbWlu
ZyB2YWx1ZSBvZiBhdi0+dG9wICovCi0gIElOVEVSTkFMX1NJWkVfVCBvbGRfc2l6ZTsgICAgICAg
LyogaXRzIHNpemUgKi8KLSAgY2hhciogICAgICAgICAgIG9sZF9lbmQ7ICAgICAgICAvKiBpdHMg
ZW5kIGFkZHJlc3MgKi8KLQotICBsb25nICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgIC8qIGFy
ZyB0byBmaXJzdCBNT1JFQ09SRSBvciBtbWFwIGNhbGwgKi8KLSAgY2hhciogICAgICAgICAgIGJy
azsgICAgICAgICAgICAvKiByZXR1cm4gdmFsdWUgZnJvbSBNT1JFQ09SRSAqLwotCi0gIGxvbmcg
ICAgICAgICAgICBjb3JyZWN0aW9uOyAgICAgLyogYXJnIHRvIDJuZCBNT1JFQ09SRSBjYWxsICov
Ci0gIGNoYXIqICAgICAgICAgICBzbmRfYnJrOyAgICAgICAgLyogMm5kIHJldHVybiB2YWwgKi8K
LQotICBJTlRFUk5BTF9TSVpFX1QgZnJvbnRfbWlzYWxpZ247IC8qIHVudXNhYmxlIGJ5dGVzIGF0
IGZyb250IG9mIG5ldyBzcGFjZSAqLwotICBJTlRFUk5BTF9TSVpFX1QgZW5kX21pc2FsaWduOyAg
IC8qIHBhcnRpYWwgcGFnZSBsZWZ0IGF0IGVuZCBvZiBuZXcgc3BhY2UgKi8KLSAgY2hhciogICAg
ICAgICAgIGFsaWduZWRfYnJrOyAgICAvKiBhbGlnbmVkIG9mZnNldCBpbnRvIGJyayAqLwotCi0g
IG1jaHVua3B0ciAgICAgICBwOyAgICAgICAgICAgICAgLyogdGhlIGFsbG9jYXRlZC9yZXR1cm5l
ZCBjaHVuayAqLwotICBtY2h1bmtwdHIgICAgICAgcmVtYWluZGVyOyAgICAgIC8qIHJlbWFpbmRl
ciBmcm9tIGFsbG9jYXRpb24gKi8KLSAgQ0hVTktfU0laRV9UICAgIHJlbWFpbmRlcl9zaXplOyAv
KiBpdHMgc2l6ZSAqLwotCi0gIENIVU5LX1NJWkVfVCAgICBzdW07ICAgICAgICAgICAgLyogZm9y
IHVwZGF0aW5nIHN0YXRzICovCi0KLSAgc2l6ZV90ICAgICAgICAgIHBhZ2VtYXNrICA9IGF2LT5w
YWdlc2l6ZSAtIDE7Ci0KLSAgLyoKLSAgICBJZiB0aGVyZSBpcyBzcGFjZSBhdmFpbGFibGUgaW4g
ZmFzdGJpbnMsIGNvbnNvbGlkYXRlIGFuZCByZXRyeQotICAgIG1hbGxvYyBmcm9tIHNjcmF0Y2gg
cmF0aGVyIHRoYW4gZ2V0dGluZyBtZW1vcnkgZnJvbSBzeXN0ZW0uICBUaGlzCi0gICAgY2FuIG9j
Y3VyIG9ubHkgaWYgbmIgaXMgaW4gc21hbGxiaW4gcmFuZ2Ugc28gd2UgZGlkbid0IGNvbnNvbGlk
YXRlCi0gICAgdXBvbiBlbnRyeSB0byBtYWxsb2MuIEl0IGlzIG11Y2ggZWFzaWVyIHRvIGhhbmRs
ZSB0aGlzIGNhc2UgaGVyZQotICAgIHRoYW4gaW4gbWFsbG9jIHByb3Blci4KLSAgKi8KLQotICBp
ZiAoaGF2ZV9mYXN0Y2h1bmtzKGF2KSkgewotICAgIGFzc2VydChpbl9zbWFsbGJpbl9yYW5nZShu
YikpOwotICAgIG1hbGxvY19jb25zb2xpZGF0ZShhdik7Ci0gICAgcmV0dXJuIG1BTExPYyhuYiAt
IE1BTExPQ19BTElHTl9NQVNLKTsKLSAgfQotCi0KLSNpZiBIQVZFX01NQVAKLQotICAvKgotICAg
IElmIGhhdmUgbW1hcCwgYW5kIHRoZSByZXF1ZXN0IHNpemUgbWVldHMgdGhlIG1tYXAgdGhyZXNo
b2xkLCBhbmQKLSAgICB0aGUgc3lzdGVtIHN1cHBvcnRzIG1tYXAsIGFuZCB0aGVyZSBhcmUgZmV3
IGVub3VnaCBjdXJyZW50bHkKLSAgICBhbGxvY2F0ZWQgbW1hcHBlZCByZWdpb25zLCB0cnkgdG8g
ZGlyZWN0bHkgbWFwIHRoaXMgcmVxdWVzdAotICAgIHJhdGhlciB0aGFuIGV4cGFuZGluZyB0b3Au
Ci0gICovCi0KLSAgaWYgKChDSFVOS19TSVpFX1QpKG5iKSA+PSAoQ0hVTktfU0laRV9UKShhdi0+
bW1hcF90aHJlc2hvbGQpICYmCi0gICAgICAoYXYtPm5fbW1hcHMgPCBhdi0+bl9tbWFwc19tYXgp
KSB7Ci0KLSAgICBjaGFyKiBtbTsgICAgICAgICAgICAgLyogcmV0dXJuIHZhbHVlIGZyb20gbW1h
cCBjYWxsKi8KLQotICAgIC8qCi0gICAgICBSb3VuZCB1cCBzaXplIHRvIG5lYXJlc3QgcGFnZS4g
IEZvciBtbWFwcGVkIGNodW5rcywgdGhlIG92ZXJoZWFkCi0gICAgICBpcyBvbmUgU0laRV9TWiB1
bml0IGxhcmdlciB0aGFuIGZvciBub3JtYWwgY2h1bmtzLCBiZWNhdXNlIHRoZXJlCi0gICAgICBp
cyBubyBmb2xsb3dpbmcgY2h1bmsgd2hvc2UgcHJldl9zaXplIGZpZWxkIGNvdWxkIGJlIHVzZWQu
Ci0gICAgKi8KLSAgICBzaXplID0gKG5iICsgU0laRV9TWiArIE1BTExPQ19BTElHTl9NQVNLICsg
cGFnZW1hc2spICYgfnBhZ2VtYXNrOwotCi0gICAgLyogRG9uJ3QgdHJ5IGlmIHNpemUgd3JhcHMg
YXJvdW5kIDAgKi8KLSAgICBpZiAoKENIVU5LX1NJWkVfVCkoc2l6ZSkgPiAoQ0hVTktfU0laRV9U
KShuYikpIHsKLQotICAgICAgbW0gPSAoY2hhciopKE1NQVAoMCwgc2l6ZSwgUFJPVF9SRUFEfFBS
T1RfV1JJVEUsIE1BUF9QUklWQVRFKSk7Ci0gICAgICAKLSAgICAgIGlmIChtbSAhPSAoY2hhciop
KE1PUkVDT1JFX0ZBSUxVUkUpKSB7Ci0gICAgICAgIAotICAgICAgICAvKgotICAgICAgICAgIFRo
ZSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtbWFwcGVkIHJlZ2lvbiBpcyBzdG9yZWQKLSAg
ICAgICAgICBpbiB0aGUgcHJldl9zaXplIGZpZWxkIG9mIHRoZSBjaHVuay4gVGhpcyBhbGxvd3Mg
dXMgdG8gYWRqdXN0Ci0gICAgICAgICAgcmV0dXJuZWQgc3RhcnQgYWRkcmVzcyB0byBtZWV0IGFs
aWdubWVudCByZXF1aXJlbWVudHMgaGVyZSAKLSAgICAgICAgICBhbmQgaW4gbWVtYWxpZ24oKSwg
YW5kIHN0aWxsIGJlIGFibGUgdG8gY29tcHV0ZSBwcm9wZXIKLSAgICAgICAgICBhZGRyZXNzIGFy
Z3VtZW50IGZvciBsYXRlciBtdW5tYXAgaW4gZnJlZSgpIGFuZCByZWFsbG9jKCkuCi0gICAgICAg
ICovCi0gICAgICAgIAotICAgICAgICBmcm9udF9taXNhbGlnbiA9IChJTlRFUk5BTF9TSVpFX1Qp
Y2h1bmsybWVtKG1tKSAmIE1BTExPQ19BTElHTl9NQVNLOwotICAgICAgICBpZiAoZnJvbnRfbWlz
YWxpZ24gPiAwKSB7Ci0gICAgICAgICAgY29ycmVjdGlvbiA9IE1BTExPQ19BTElHTk1FTlQgLSBm
cm9udF9taXNhbGlnbjsKLSAgICAgICAgICBwID0gKG1jaHVua3B0cikobW0gKyBjb3JyZWN0aW9u
KTsKLSAgICAgICAgICBwLT5wcmV2X3NpemUgPSBjb3JyZWN0aW9uOwotICAgICAgICAgIHNldF9o
ZWFkKHAsIChzaXplIC0gY29ycmVjdGlvbikgfElTX01NQVBQRUQpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgIHAgPSAobWNodW5rcHRyKW1tOwotICAgICAgICAgIHAtPnBy
ZXZfc2l6ZSA9IDA7Ci0gICAgICAgICAgc2V0X2hlYWQocCwgc2l6ZXxJU19NTUFQUEVEKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgLyogdXBkYXRlIHN0YXRpc3RpY3MgKi8KLSAgICAg
ICAgCi0gICAgICAgIGlmICgrK2F2LT5uX21tYXBzID4gYXYtPm1heF9uX21tYXBzKSAKLSAgICAg
ICAgICBhdi0+bWF4X25fbW1hcHMgPSBhdi0+bl9tbWFwczsKLSAgICAgICAgCi0gICAgICAgIHN1
bSA9IGF2LT5tbWFwcGVkX21lbSArPSBzaXplOwotICAgICAgICBpZiAoc3VtID4gKENIVU5LX1NJ
WkVfVCkoYXYtPm1heF9tbWFwcGVkX21lbSkpIAotICAgICAgICAgIGF2LT5tYXhfbW1hcHBlZF9t
ZW0gPSBzdW07Ci0gICAgICAgIHN1bSArPSBhdi0+c2Jya2VkX21lbTsKLSAgICAgICAgaWYgKHN1
bSA+IChDSFVOS19TSVpFX1QpKGF2LT5tYXhfdG90YWxfbWVtKSkgCi0gICAgICAgICAgYXYtPm1h
eF90b3RhbF9tZW0gPSBzdW07Ci0KLSAgICAgICAgY2hlY2tfY2h1bmsocCk7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gY2h1bmsybWVtKHApOwotICAgICAgfQotICAgIH0KLSAgfQotI2VuZGlm
Ci0KLSAgLyogUmVjb3JkIGluY29taW5nIGNvbmZpZ3VyYXRpb24gb2YgdG9wICovCi0KLSAgb2xk
X3RvcCAgPSBhdi0+dG9wOwotICBvbGRfc2l6ZSA9IGNodW5rc2l6ZShvbGRfdG9wKTsKLSAgb2xk
X2VuZCAgPSAoY2hhciopKGNodW5rX2F0X29mZnNldChvbGRfdG9wLCBvbGRfc2l6ZSkpOwotCi0g
IGJyayA9IHNuZF9icmsgPSAoY2hhciopKE1PUkVDT1JFX0ZBSUxVUkUpOyAKLQotICAvKiAKLSAg
ICAgSWYgbm90IHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIHdlIHJlcXVpcmUgb2xkX3NpemUgdG8g
YmUKLSAgICAgYXQgbGVhc3QgTUlOU0laRSBhbmQgdG8gaGF2ZSBwcmV2X2ludXNlIHNldC4KLSAg
Ki8KLQotICBhc3NlcnQoKG9sZF90b3AgPT0gaW5pdGlhbF90b3AoYXYpICYmIG9sZF9zaXplID09
IDApIHx8IAotICAgICAgICAgKChDSFVOS19TSVpFX1QpIChvbGRfc2l6ZSkgPj0gTUlOU0laRSAm
JgotICAgICAgICAgIHByZXZfaW51c2Uob2xkX3RvcCkpKTsKLQotICAvKiBQcmVjb25kaXRpb246
IG5vdCBlbm91Z2ggY3VycmVudCBzcGFjZSB0byBzYXRpc2Z5IG5iIHJlcXVlc3QgKi8KLSAgYXNz
ZXJ0KChDSFVOS19TSVpFX1QpKG9sZF9zaXplKSA8IChDSFVOS19TSVpFX1QpKG5iICsgTUlOU0la
RSkpOwotCi0gIC8qIFByZWNvbmRpdGlvbjogYWxsIGZhc3RiaW5zIGFyZSBjb25zb2xpZGF0ZWQg
Ki8KLSAgYXNzZXJ0KCFoYXZlX2Zhc3RjaHVua3MoYXYpKTsKLQotCi0gIC8qIFJlcXVlc3QgZW5v
dWdoIHNwYWNlIGZvciBuYiArIHBhZCArIG92ZXJoZWFkICovCi0KLSAgc2l6ZSA9IG5iICsgYXYt
PnRvcF9wYWQgKyBNSU5TSVpFOwotCi0gIC8qCi0gICAgSWYgY29udGlndW91cywgd2UgY2FuIHN1
YnRyYWN0IG91dCBleGlzdGluZyBzcGFjZSB0aGF0IHdlIGhvcGUgdG8KLSAgICBjb21iaW5lIHdp
dGggbmV3IHNwYWNlLiBXZSBhZGQgaXQgYmFjayBsYXRlciBvbmx5IGlmCi0gICAgd2UgZG9uJ3Qg
YWN0dWFsbHkgZ2V0IGNvbnRpZ3VvdXMgc3BhY2UuCi0gICovCi0KLSAgaWYgKGNvbnRpZ3VvdXMo
YXYpKQotICAgIHNpemUgLT0gb2xkX3NpemU7Ci0KLSAgLyoKLSAgICBSb3VuZCB0byBhIG11bHRp
cGxlIG9mIHBhZ2Ugc2l6ZS4KLSAgICBJZiBNT1JFQ09SRSBpcyBub3QgY29udGlndW91cywgdGhp
cyBlbnN1cmVzIHRoYXQgd2Ugb25seSBjYWxsIGl0Ci0gICAgd2l0aCB3aG9sZS1wYWdlIGFyZ3Vt
ZW50cy4gIEFuZCBpZiBNT1JFQ09SRSBpcyBjb250aWd1b3VzIGFuZAotICAgIHRoaXMgaXMgbm90
IGZpcnN0IHRpbWUgdGhyb3VnaCwgdGhpcyBwcmVzZXJ2ZXMgcGFnZS1hbGlnbm1lbnQgb2YKLSAg
ICBwcmV2aW91cyBjYWxscy4gT3RoZXJ3aXNlLCB3ZSBjb3JyZWN0IHRvIHBhZ2UtYWxpZ24gYmVs
b3cuCi0gICovCi0KLSAgc2l6ZSA9IChzaXplICsgcGFnZW1hc2spICYgfnBhZ2VtYXNrOwotCi0g
IC8qCi0gICAgRG9uJ3QgdHJ5IHRvIGNhbGwgTU9SRUNPUkUgaWYgYXJndW1lbnQgaXMgc28gYmln
IGFzIHRvIGFwcGVhcgotICAgIG5lZ2F0aXZlLiBOb3RlIHRoYXQgc2luY2UgbW1hcCB0YWtlcyBz
aXplX3QgYXJnLCBpdCBtYXkgc3VjY2VlZAotICAgIGJlbG93IGV2ZW4gaWYgd2UgY2Fubm90IGNh
bGwgTU9SRUNPUkUuCi0gICovCi0KLSAgaWYgKHNpemUgPiAwKSAKLSAgICBicmsgPSAoY2hhciop
KE1PUkVDT1JFKHNpemUpKTsKLQotICAvKgotICAgIElmIGhhdmUgbW1hcCwgdHJ5IHVzaW5nIGl0
IGFzIGEgYmFja3VwIHdoZW4gTU9SRUNPUkUgZmFpbHMgb3IKLSAgICBjYW5ub3QgYmUgdXNlZC4g
VGhpcyBpcyB3b3J0aCBkb2luZyBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSAiaG9sZXMiIGluCi0gICAg
YWRkcmVzcyBzcGFjZSwgc28gc2JyayBjYW5ub3QgZXh0ZW5kIHRvIGdpdmUgY29udGlndW91cyBz
cGFjZSwgYnV0Ci0gICAgc3BhY2UgaXMgYXZhaWxhYmxlIGVsc2V3aGVyZS4gIE5vdGUgdGhhdCB3
ZSBpZ25vcmUgbW1hcCBtYXggY291bnQKLSAgICBhbmQgdGhyZXNob2xkIGxpbWl0cywgc2luY2Ug
dGhlIHNwYWNlIHdpbGwgbm90IGJlIHVzZWQgYXMgYQotICAgIHNlZ3JlZ2F0ZWQgbW1hcCByZWdp
b24uCi0gICovCi0KLSNpZiBIQVZFX01NQVAKLSAgaWYgKGJyayA9PSAoY2hhciopKE1PUkVDT1JF
X0ZBSUxVUkUpKSB7Ci0KLSAgICAvKiBDYW5ub3QgbWVyZ2Ugd2l0aCBvbGQgdG9wLCBzbyBhZGQg
aXRzIHNpemUgYmFjayBpbiAqLwotICAgIGlmIChjb250aWd1b3VzKGF2KSkKLSAgICAgIHNpemUg
PSAoc2l6ZSArIG9sZF9zaXplICsgcGFnZW1hc2spICYgfnBhZ2VtYXNrOwotCi0gICAgLyogSWYg
d2UgYXJlIHJlbHlpbmcgb24gbW1hcCBhcyBiYWNrdXAsIHRoZW4gdXNlIGxhcmdlciB1bml0cyAq
LwotICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA8IChDSFVOS19TSVpFX1QpKE1NQVBfQVNf
TU9SRUNPUkVfU0laRSkpCi0gICAgICBzaXplID0gTU1BUF9BU19NT1JFQ09SRV9TSVpFOwotCi0g
ICAgLyogRG9uJ3QgdHJ5IGlmIHNpemUgd3JhcHMgYXJvdW5kIDAgKi8KLSAgICBpZiAoKENIVU5L
X1NJWkVfVCkoc2l6ZSkgPiAoQ0hVTktfU0laRV9UKShuYikpIHsKLQotICAgICAgYnJrID0gKGNo
YXIqKShNTUFQKDAsIHNpemUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSkpOwot
ICAgICAgCi0gICAgICBpZiAoYnJrICE9IChjaGFyKikoTU9SRUNPUkVfRkFJTFVSRSkpIHsKLSAg
ICAgICAgCi0gICAgICAgIC8qIFdlIGRvIG5vdCBuZWVkLCBhbmQgY2Fubm90IHVzZSwgYW5vdGhl
ciBzYnJrIGNhbGwgdG8gZmluZCBlbmQgKi8KLSAgICAgICAgc25kX2JyayA9IGJyayArIHNpemU7
Ci0gICAgICAgIAotICAgICAgICAvKiAKLSAgICAgICAgICAgUmVjb3JkIHRoYXQgd2Ugbm8gbG9u
Z2VyIGhhdmUgYSBjb250aWd1b3VzIHNicmsgcmVnaW9uLiAKLSAgICAgICAgICAgQWZ0ZXIgdGhl
IGZpcnN0IHRpbWUgbW1hcCBpcyB1c2VkIGFzIGJhY2t1cCwgd2UgZG8gbm90Ci0gICAgICAgICAg
IGV2ZXIgcmVseSBvbiBjb250aWd1b3VzIHNwYWNlIHNpbmNlIHRoaXMgY291bGQgaW5jb3JyZWN0
bHkKLSAgICAgICAgICAgYnJpZGdlIHJlZ2lvbnMuCi0gICAgICAgICovCi0gICAgICAgIHNldF9u
b25jb250aWd1b3VzKGF2KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSNlbmRpZgotCi0gIGlmIChi
cmsgIT0gKGNoYXIqKShNT1JFQ09SRV9GQUlMVVJFKSkgewotICAgIGF2LT5zYnJrZWRfbWVtICs9
IHNpemU7Ci0KLSAgICAvKgotICAgICAgSWYgTU9SRUNPUkUgZXh0ZW5kcyBwcmV2aW91cyBzcGFj
ZSwgd2UgY2FuIGxpa2V3aXNlIGV4dGVuZCB0b3Agc2l6ZS4KLSAgICAqLwotICAgIAotICAgIGlm
IChicmsgPT0gb2xkX2VuZCAmJiBzbmRfYnJrID09IChjaGFyKikoTU9SRUNPUkVfRkFJTFVSRSkp
IHsKLSAgICAgIHNldF9oZWFkKG9sZF90b3AsIChzaXplICsgb2xkX3NpemUpIHwgUFJFVl9JTlVT
RSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgIE90aGVyd2lzZSwgbWFrZSBhZGp1c3RtZW50czoK
LSAgICAgIAotICAgICAgKiBJZiB0aGUgZmlyc3QgdGltZSB0aHJvdWdoIG9yIG5vbmNvbnRpZ3Vv
dXMsIHdlIG5lZWQgdG8gY2FsbCBzYnJrCi0gICAgICAgIGp1c3QgdG8gZmluZCBvdXQgd2hlcmUg
dGhlIGVuZCBvZiBtZW1vcnkgbGllcy4KLQotICAgICAgKiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0
IGFsbCByZXR1cm5lZCBjaHVua3MgZnJvbSBtYWxsb2Mgd2lsbCBtZWV0Ci0gICAgICAgIE1BTExP
Q19BTElHTk1FTlQKLQotICAgICAgKiBJZiB0aGVyZSB3YXMgYW4gaW50ZXJ2ZW5pbmcgZm9yZWln
biBzYnJrLCB3ZSBuZWVkIHRvIGFkanVzdCBzYnJrCi0gICAgICAgIHJlcXVlc3Qgc2l6ZSB0byBh
Y2NvdW50IGZvciBmYWN0IHRoYXQgd2Ugd2lsbCBub3QgYmUgYWJsZSB0bwotICAgICAgICBjb21i
aW5lIG5ldyBzcGFjZSB3aXRoIGV4aXN0aW5nIHNwYWNlIGluIG9sZF90b3AuCi0KLSAgICAgICog
QWxtb3N0IGFsbCBzeXN0ZW1zIGludGVybmFsbHkgYWxsb2NhdGUgd2hvbGUgcGFnZXMgYXQgYSB0
aW1lLCBpbgotICAgICAgICB3aGljaCBjYXNlIHdlIG1pZ2h0IGFzIHdlbGwgdXNlIHRoZSB3aG9s
ZSBsYXN0IHBhZ2Ugb2YgcmVxdWVzdC4KLSAgICAgICAgU28gd2UgYWxsb2NhdGUgZW5vdWdoIG1v
cmUgbWVtb3J5IHRvIGhpdCBhIHBhZ2UgYm91bmRhcnkgbm93LAotICAgICAgICB3aGljaCBpbiB0
dXJuIGNhdXNlcyBmdXR1cmUgY29udGlndW91cyBjYWxscyB0byBwYWdlLWFsaWduLgotICAgICov
Ci0gICAgCi0gICAgZWxzZSB7Ci0gICAgICBmcm9udF9taXNhbGlnbiA9IDA7Ci0gICAgICBlbmRf
bWlzYWxpZ24gPSAwOwotICAgICAgY29ycmVjdGlvbiA9IDA7Ci0gICAgICBhbGlnbmVkX2JyayA9
IGJyazsKLQotICAgICAgLyoKLSAgICAgICAgSWYgTU9SRUNPUkUgcmV0dXJucyBhbiBhZGRyZXNz
IGxvd2VyIHRoYW4gd2UgaGF2ZSBzZWVuIGJlZm9yZSwKLSAgICAgICAgd2Uga25vdyBpdCBpc24n
dCByZWFsbHkgY29udGlndW91cy4gIFRoaXMgYW5kIHNvbWUgc3Vic2VxdWVudAotICAgICAgICBj
aGVja3MgaGVscCBjb3BlIHdpdGggbm9uLWNvbmZvcm1pbmcgTU9SRUNPUkUgZnVuY3Rpb25zIGFu
ZAotICAgICAgICB0aGUgcHJlc2VuY2Ugb2YgImZvcmVpZ24iIGNhbGxzIHRvIE1PUkVDT1JFIGZy
b20gb3V0c2lkZSBvZgotICAgICAgICBtYWxsb2Mgb3IgYnkgb3RoZXIgdGhyZWFkcy4gIFdlIGNh
bm5vdCBndWFyYW50ZWUgdG8gZGV0ZWN0Ci0gICAgICAgIHRoZXNlIGluIGFsbCBjYXNlcywgYnV0
IGNvcGUgd2l0aCB0aGUgb25lcyB3ZSBkbyBkZXRlY3QuCi0gICAgICAqLwotICAgICAgaWYgKGNv
bnRpZ3VvdXMoYXYpICYmIG9sZF9zaXplICE9IDAgJiYgYnJrIDwgb2xkX2VuZCkgewotICAgICAg
ICBzZXRfbm9uY29udGlndW91cyhhdik7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8qIGhhbmRs
ZSBjb250aWd1b3VzIGNhc2VzICovCi0gICAgICBpZiAoY29udGlndW91cyhhdikpIHsgCi0KLSAg
ICAgICAgLyogCi0gICAgICAgICAgIFdlIGNhbiB0b2xlcmF0ZSBmb3J3YXJkIG5vbi1jb250aWd1
aXRpZXMgaGVyZSAodXN1YWxseSBkdWUKLSAgICAgICAgICAgdG8gZm9yZWlnbiBjYWxscykgYnV0
IHRyZWF0IHRoZW0gYXMgcGFydCBvZiBvdXIgc3BhY2UgZm9yCi0gICAgICAgICAgIHN0YXRzIHJl
cG9ydGluZy4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKG9sZF9zaXplICE9IDApIAotICAgICAg
ICAgIGF2LT5zYnJrZWRfbWVtICs9IGJyayAtIG9sZF9lbmQ7Ci0gICAgICAgIAotICAgICAgICAv
KiBHdWFyYW50ZWUgYWxpZ25tZW50IG9mIGZpcnN0IG5ldyBjaHVuayBtYWRlIGZyb20gdGhpcyBz
cGFjZSAqLwotCi0gICAgICAgIGZyb250X21pc2FsaWduID0gKElOVEVSTkFMX1NJWkVfVCljaHVu
azJtZW0oYnJrKSAmIE1BTExPQ19BTElHTl9NQVNLOwotICAgICAgICBpZiAoZnJvbnRfbWlzYWxp
Z24gPiAwKSB7Ci0KLSAgICAgICAgICAvKgotICAgICAgICAgICAgU2tpcCBvdmVyIHNvbWUgYnl0
ZXMgdG8gYXJyaXZlIGF0IGFuIGFsaWduZWQgcG9zaXRpb24uCi0gICAgICAgICAgICBXZSBkb24n
dCBuZWVkIHRvIHNwZWNpYWxseSBtYXJrIHRoZXNlIHdhc3RlZCBmcm9udCBieXRlcy4KLSAgICAg
ICAgICAgIFRoZXkgd2lsbCBuZXZlciBiZSBhY2Nlc3NlZCBhbnl3YXkgYmVjYXVzZQotICAgICAg
ICAgICAgcHJldl9pbnVzZSBvZiBhdi0+dG9wIChhbmQgYW55IGNodW5rIGNyZWF0ZWQgZnJvbSBp
dHMgc3RhcnQpCi0gICAgICAgICAgICBpcyBhbHdheXMgdHJ1ZSBhZnRlciBpbml0aWFsaXphdGlv
bi4KLSAgICAgICAgICAqLwotCi0gICAgICAgICAgY29ycmVjdGlvbiA9IE1BTExPQ19BTElHTk1F
TlQgLSBmcm9udF9taXNhbGlnbjsKLSAgICAgICAgICBhbGlnbmVkX2JyayArPSBjb3JyZWN0aW9u
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvKgotICAgICAgICAgIElmIHRoaXMgaXNu
J3QgYWRqYWNlbnQgdG8gZXhpc3Rpbmcgc3BhY2UsIHRoZW4gd2Ugd2lsbCBub3QKLSAgICAgICAg
ICBiZSBhYmxlIHRvIG1lcmdlIHdpdGggb2xkX3RvcCBzcGFjZSwgc28gbXVzdCBhZGQgdG8gMm5k
IHJlcXVlc3QuCi0gICAgICAgICovCi0gICAgICAgIAotICAgICAgICBjb3JyZWN0aW9uICs9IG9s
ZF9zaXplOwotICAgICAgICAKLSAgICAgICAgLyogRXh0ZW5kIHRoZSBlbmQgYWRkcmVzcyB0byBo
aXQgYSBwYWdlIGJvdW5kYXJ5ICovCi0gICAgICAgIGVuZF9taXNhbGlnbiA9IChJTlRFUk5BTF9T
SVpFX1QpKGJyayArIHNpemUgKyBjb3JyZWN0aW9uKTsKLSAgICAgICAgY29ycmVjdGlvbiArPSAo
KGVuZF9taXNhbGlnbiArIHBhZ2VtYXNrKSAmIH5wYWdlbWFzaykgLSBlbmRfbWlzYWxpZ247Ci0g
ICAgICAgIAotICAgICAgICBhc3NlcnQoY29ycmVjdGlvbiA+PSAwKTsKLSAgICAgICAgc25kX2Jy
ayA9IChjaGFyKikoTU9SRUNPUkUoY29ycmVjdGlvbikpOwotICAgICAgICAKLSAgICAgICAgaWYg
KHNuZF9icmsgPT0gKGNoYXIqKShNT1JFQ09SRV9GQUlMVVJFKSkgewotICAgICAgICAgIC8qCi0g
ICAgICAgICAgICBJZiBjYW4ndCBhbGxvY2F0ZSBjb3JyZWN0aW9uLCB0cnkgdG8gYXQgbGVhc3Qg
ZmluZCBvdXQgY3VycmVudAotICAgICAgICAgICAgYnJrLiAgSXQgbWlnaHQgYmUgZW5vdWdoIHRv
IHByb2NlZWQgd2l0aG91dCBmYWlsaW5nLgotICAgICAgICAgICovCi0gICAgICAgICAgY29ycmVj
dGlvbiA9IDA7Ci0gICAgICAgICAgc25kX2JyayA9IChjaGFyKikoTU9SRUNPUkUoMCkpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNuZF9icmsgPCBicmspIHsKLSAgICAgICAgICAvKgot
ICAgICAgICAgICAgSWYgdGhlIHNlY29uZCBjYWxsIGdpdmVzIG5vbmNvbnRpZ3VvdXMgc3BhY2Ug
ZXZlbiB0aG91Z2gKLSAgICAgICAgICAgIGl0IHNheXMgaXQgd29uJ3QsIHRoZSBvbmx5IGNvdXJz
ZSBvZiBhY3Rpb24gaXMgdG8gaWdub3JlCi0gICAgICAgICAgICByZXN1bHRzIG9mIHNlY29uZCBj
YWxsLCBhbmQgY29uc2VydmF0aXZlbHkgZXN0aW1hdGUgd2hlcmUKLSAgICAgICAgICAgIHRoZSBm
aXJzdCBjYWxsIGxlZnQgdXMuIEFsc28gc2V0IG5vbmNvbnRpZ3VvdXMsIHNvIHRoaXMKLSAgICAg
ICAgICAgIHdvbid0IGhhcHBlbiBhZ2FpbiwgbGVhdmluZyBhdCBtb3N0IG9uZSBob2xlLgotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBjaGVjayBpcyBpbnRyaW5zaWNh
bGx5IGluY29tcGxldGUuICBCZWNhdXNlCi0gICAgICAgICAgICBNT1JFQ09SRSBpcyBhbGxvd2Vk
IHRvIGdpdmUgbW9yZSBzcGFjZSB0aGFuIHdlIGFzayBmb3IsCi0gICAgICAgICAgICB0aGVyZSBp
cyBubyByZWxpYWJsZSB3YXkgdG8gZGV0ZWN0IGEgbm9uY29udGlndWl0eQotICAgICAgICAgICAg
cHJvZHVjaW5nIGEgZm9yd2FyZCBnYXAgZm9yIHRoZSBzZWNvbmQgY2FsbC4KLSAgICAgICAgICAq
LwotICAgICAgICAgIHNuZF9icmsgPSBicmsgKyBzaXplOwotICAgICAgICAgIGNvcnJlY3Rpb24g
PSAwOwotICAgICAgICAgIHNldF9ub25jb250aWd1b3VzKGF2KTsKLSAgICAgICAgfQotCi0gICAg
ICB9Ci0gICAgICAKLSAgICAgIC8qIGhhbmRsZSBub24tY29udGlndW91cyBjYXNlcyAqLwotICAg
ICAgZWxzZSB7IAotICAgICAgICAvKiBNT1JFQ09SRS9tbWFwIG11c3QgY29ycmVjdGx5IGFsaWdu
ICovCi0gICAgICAgIGFzc2VydChhbGlnbmVkX09LKGNodW5rMm1lbShicmspKSk7Ci0gICAgICAg
IAotICAgICAgICAvKiBGaW5kIG91dCBjdXJyZW50IGVuZCBvZiBtZW1vcnkgKi8KLSAgICAgICAg
aWYgKHNuZF9icmsgPT0gKGNoYXIqKShNT1JFQ09SRV9GQUlMVVJFKSkgewotICAgICAgICAgIHNu
ZF9icmsgPSAoY2hhciopKE1PUkVDT1JFKDApKTsKLSAgICAgICAgICBhdi0+c2Jya2VkX21lbSAr
PSBzbmRfYnJrIC0gYnJrIC0gc2l6ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgCi0gICAg
ICAvKiBBZGp1c3QgdG9wIGJhc2VkIG9uIHJlc3VsdHMgb2Ygc2Vjb25kIHNicmsgKi8KLSAgICAg
IGlmIChzbmRfYnJrICE9IChjaGFyKikoTU9SRUNPUkVfRkFJTFVSRSkpIHsKLSAgICAgICAgYXYt
PnRvcCA9IChtY2h1bmtwdHIpYWxpZ25lZF9icms7Ci0gICAgICAgIHNldF9oZWFkKGF2LT50b3As
IChzbmRfYnJrIC0gYWxpZ25lZF9icmsgKyBjb3JyZWN0aW9uKSB8IFBSRVZfSU5VU0UpOwotICAg
ICAgICBhdi0+c2Jya2VkX21lbSArPSBjb3JyZWN0aW9uOwotICAgICAKLSAgICAgICAgLyoKLSAg
ICAgICAgICBJZiBub3QgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCwgd2UgZWl0aGVyIGhhdmUgYQot
ICAgICAgICAgIGdhcCBkdWUgdG8gZm9yZWlnbiBzYnJrIG9yIGEgbm9uLWNvbnRpZ3VvdXMgcmVn
aW9uLiAgSW5zZXJ0IGEKLSAgICAgICAgICBkb3VibGUgZmVuY2Vwb3N0IGF0IG9sZF90b3AgdG8g
cHJldmVudCBjb25zb2xpZGF0aW9uIHdpdGggc3BhY2UKLSAgICAgICAgICB3ZSBkb24ndCBvd24u
IFRoZXNlIGZlbmNlcG9zdHMgYXJlIGFydGlmaWNpYWwgY2h1bmtzIHRoYXQgYXJlCi0gICAgICAg
ICAgbWFya2VkIGFzIGludXNlIGFuZCBhcmUgaW4gYW55IGNhc2UgdG9vIHNtYWxsIHRvIHVzZS4g
IFdlIG5lZWQKLSAgICAgICAgICB0d28gdG8gbWFrZSBzaXplcyBhbmQgYWxpZ25tZW50cyB3b3Jr
IG91dC4KLSAgICAgICAgKi8KLSAgIAotICAgICAgICBpZiAob2xkX3NpemUgIT0gMCkgewotICAg
ICAgICAgIC8qIAotICAgICAgICAgICAgIFNocmluayBvbGRfdG9wIHRvIGluc2VydCBmZW5jZXBv
c3RzLCBrZWVwaW5nIHNpemUgYQotICAgICAgICAgICAgIG11bHRpcGxlIG9mIE1BTExPQ19BTElH
Tk1FTlQuIFdlIGtub3cgdGhlcmUgaXMgYXQgbGVhc3QKLSAgICAgICAgICAgICBlbm91Z2ggc3Bh
Y2UgaW4gb2xkX3RvcCB0byBkbyB0aGlzLgotICAgICAgICAgICovCi0gICAgICAgICAgb2xkX3Np
emUgPSAob2xkX3NpemUgLSAzKlNJWkVfU1opICYgfk1BTExPQ19BTElHTl9NQVNLOwotICAgICAg
ICAgIHNldF9oZWFkKG9sZF90b3AsIG9sZF9zaXplIHwgUFJFVl9JTlVTRSk7Ci0gICAgICAgICAg
Ci0gICAgICAgICAgLyoKLSAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIGFzc2ln
bm1lbnRzIGNvbXBsZXRlbHkgb3ZlcndyaXRlCi0gICAgICAgICAgICBvbGRfdG9wIHdoZW4gb2xk
X3NpemUgd2FzIHByZXZpb3VzbHkgTUlOU0laRS4gIFRoaXMgaXMKLSAgICAgICAgICAgIGludGVu
dGlvbmFsLiBXZSBuZWVkIHRoZSBmZW5jZXBvc3QsIGV2ZW4gaWYgb2xkX3RvcCBvdGhlcndpc2Ug
Z2V0cwotICAgICAgICAgICAgbG9zdC4KLSAgICAgICAgICAqLwotICAgICAgICAgIGNodW5rX2F0
X29mZnNldChvbGRfdG9wLCBvbGRfc2l6ZSAgICAgICAgICApLT5zaXplID0KLSAgICAgICAgICAg
IFNJWkVfU1p8UFJFVl9JTlVTRTsKLQotICAgICAgICAgIGNodW5rX2F0X29mZnNldChvbGRfdG9w
LCBvbGRfc2l6ZSArIFNJWkVfU1opLT5zaXplID0KLSAgICAgICAgICAgIFNJWkVfU1p8UFJFVl9J
TlVTRTsKLQotICAgICAgICAgIC8qIAotICAgICAgICAgICAgIElmIHBvc3NpYmxlLCByZWxlYXNl
IHRoZSByZXN0LCBzdXBwcmVzc2luZyB0cmltbWluZy4KLSAgICAgICAgICAqLwotICAgICAgICAg
IGlmIChvbGRfc2l6ZSA+PSBNSU5TSVpFKSB7Ci0gICAgICAgICAgICBJTlRFUk5BTF9TSVpFX1Qg
dHQgPSBhdi0+dHJpbV90aHJlc2hvbGQ7Ci0gICAgICAgICAgICBhdi0+dHJpbV90aHJlc2hvbGQg
PSAoSU5URVJOQUxfU0laRV9UKSgtMSk7Ci0gICAgICAgICAgICBmUkVlKGNodW5rMm1lbShvbGRf
dG9wKSk7Ci0gICAgICAgICAgICBhdi0+dHJpbV90aHJlc2hvbGQgPSB0dDsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLyogVXBkYXRlIHN0YXRpc3Rp
Y3MgKi8KLSAgICBzdW0gPSBhdi0+c2Jya2VkX21lbTsKLSAgICBpZiAoc3VtID4gKENIVU5LX1NJ
WkVfVCkoYXYtPm1heF9zYnJrZWRfbWVtKSkKLSAgICAgIGF2LT5tYXhfc2Jya2VkX21lbSA9IHN1
bTsKLSAgICAKLSAgICBzdW0gKz0gYXYtPm1tYXBwZWRfbWVtOwotICAgIGlmIChzdW0gPiAoQ0hV
TktfU0laRV9UKShhdi0+bWF4X3RvdGFsX21lbSkpCi0gICAgICBhdi0+bWF4X3RvdGFsX21lbSA9
IHN1bTsKLQotICAgIGNoZWNrX21hbGxvY19zdGF0ZSgpOwotICAgIAotICAgIC8qIGZpbmFsbHks
IGRvIHRoZSBhbGxvY2F0aW9uICovCi0KLSAgICBwID0gYXYtPnRvcDsKLSAgICBzaXplID0gY2h1
bmtzaXplKHApOwotICAgIAotICAgIC8qIGNoZWNrIHRoYXQgb25lIG9mIHRoZSBhYm92ZSBhbGxv
Y2F0aW9uIHBhdGhzIHN1Y2NlZWRlZCAqLwotICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA+
PSAoQ0hVTktfU0laRV9UKShuYiArIE1JTlNJWkUpKSB7Ci0gICAgICByZW1haW5kZXJfc2l6ZSA9
IHNpemUgLSBuYjsKLSAgICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNldChwLCBuYik7Ci0g
ICAgICBhdi0+dG9wID0gcmVtYWluZGVyOwotICAgICAgc2V0X2hlYWQocCwgbmIgfCBQUkVWX0lO
VVNFKTsKLSAgICAgIHNldF9oZWFkKHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUgfCBQUkVWX0lO
VVNFKTsKLSAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKHAsIG5iKTsKLSAgICAgIHJldHVybiBj
aHVuazJtZW0ocCk7Ci0gICAgfQotCi0gIH0KLQotICAvKiBjYXRjaCBhbGwgZmFpbHVyZSBwYXRo
cyAqLwotICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047Ci0gIHJldHVybiAwOwotfQotCi0KLQotCi0v
KgotICBzWVNUUkltIGlzIGFuIGludmVyc2Ugb2Ygc29ydHMgdG8gc1lTTUFMTE9jLiAgSXQgZ2l2
ZXMgbWVtb3J5IGJhY2sKLSAgdG8gdGhlIHN5c3RlbSAodmlhIG5lZ2F0aXZlIGFyZ3VtZW50cyB0
byBzYnJrKSBpZiB0aGVyZSBpcyB1bnVzZWQKLSAgbWVtb3J5IGF0IHRoZSBgaGlnaCcgZW5kIG9m
IHRoZSBtYWxsb2MgcG9vbC4gSXQgaXMgY2FsbGVkCi0gIGF1dG9tYXRpY2FsbHkgYnkgZnJlZSgp
IHdoZW4gdG9wIHNwYWNlIGV4Y2VlZHMgdGhlIHRyaW0KLSAgdGhyZXNob2xkLiBJdCBpcyBhbHNv
IGNhbGxlZCBieSB0aGUgcHVibGljIG1hbGxvY190cmltIHJvdXRpbmUuICBJdAotICByZXR1cm5z
IDEgaWYgaXQgYWN0dWFsbHkgcmVsZWFzZWQgYW55IG1lbW9yeSwgZWxzZSAwLgotKi8KLQotI2lm
bmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQotCi0jaWYgX19TVERfQwotc3RhdGljIGludCBzWVNU
UkltKHNpemVfdCBwYWQsIG1zdGF0ZSBhdikKLSNlbHNlCi1zdGF0aWMgaW50IHNZU1RSSW0ocGFk
LCBhdikgc2l6ZV90IHBhZDsgbXN0YXRlIGF2OwotI2VuZGlmCi17Ci0gIGxvbmcgIHRvcF9zaXpl
OyAgICAgICAgLyogQW1vdW50IG9mIHRvcC1tb3N0IG1lbW9yeSAqLwotICBsb25nICBleHRyYTsg
ICAgICAgICAgIC8qIEFtb3VudCB0byByZWxlYXNlICovCi0gIGxvbmcgIHJlbGVhc2VkOyAgICAg
ICAgLyogQW1vdW50IGFjdHVhbGx5IHJlbGVhc2VkICovCi0gIGNoYXIqIGN1cnJlbnRfYnJrOyAg
ICAgLyogYWRkcmVzcyByZXR1cm5lZCBieSBwcmUtY2hlY2sgc2JyayBjYWxsICovCi0gIGNoYXIq
IG5ld19icms7ICAgICAgICAgLyogYWRkcmVzcyByZXR1cm5lZCBieSBwb3N0LWNoZWNrIHNicmsg
Y2FsbCAqLwotICBzaXplX3QgcGFnZXN6OwotCi0gIHBhZ2VzeiA9IGF2LT5wYWdlc2l6ZTsKLSAg
dG9wX3NpemUgPSBjaHVua3NpemUoYXYtPnRvcCk7Ci0gIAotICAvKiBSZWxlYXNlIGluIHBhZ2Vz
aXplIHVuaXRzLCBrZWVwaW5nIGF0IGxlYXN0IG9uZSBwYWdlICovCi0gIGV4dHJhID0gKCh0b3Bf
c2l6ZSAtIHBhZCAtIE1JTlNJWkUgKyAocGFnZXN6LTEpKSAvIHBhZ2VzeiAtIDEpICogcGFnZXN6
OwotICAKLSAgaWYgKGV4dHJhID4gMCkgewotICAgIAotICAgIC8qCi0gICAgICBPbmx5IHByb2Nl
ZWQgaWYgZW5kIG9mIG1lbW9yeSBpcyB3aGVyZSB3ZSBsYXN0IHNldCBpdC4KLSAgICAgIFRoaXMg
YXZvaWRzIHByb2JsZW1zIGlmIHRoZXJlIHdlcmUgZm9yZWlnbiBzYnJrIGNhbGxzLgotICAgICov
Ci0gICAgY3VycmVudF9icmsgPSAoY2hhciopKE1PUkVDT1JFKDApKTsKLSAgICBpZiAoY3VycmVu
dF9icmsgPT0gKGNoYXIqKShhdi0+dG9wKSArIHRvcF9zaXplKSB7Ci0gICAgICAKLSAgICAgIC8q
Ci0gICAgICAgIEF0dGVtcHQgdG8gcmVsZWFzZSBtZW1vcnkuIFdlIGlnbm9yZSBNT1JFQ09SRSBy
ZXR1cm4gdmFsdWUsCi0gICAgICAgIGFuZCBpbnN0ZWFkIGNhbGwgYWdhaW4gdG8gZmluZCBvdXQg
d2hlcmUgbmV3IGVuZCBvZiBtZW1vcnkgaXMuCi0gICAgICAgIFRoaXMgYXZvaWRzIHByb2JsZW1z
IGlmIGZpcnN0IGNhbGwgcmVsZWFzZXMgbGVzcyB0aGFuIHdlIGFza2VkLAotICAgICAgICBvZiBp
ZiBmYWlsdXJlIHNvbWVob3cgYWx0ZXJlZCBicmsgdmFsdWUuIChXZSBjb3VsZCBzdGlsbAotICAg
ICAgICBlbmNvdW50ZXIgcHJvYmxlbXMgaWYgaXQgYWx0ZXJlZCBicmsgaW4gc29tZSB2ZXJ5IGJh
ZCB3YXksCi0gICAgICAgIGJ1dCB0aGUgb25seSB0aGluZyB3ZSBjYW4gZG8gaXMgYWRqdXN0IGFu
eXdheSwgd2hpY2ggd2lsbCBjYXVzZQotICAgICAgICBzb21lIGRvd25zdHJlYW0gZmFpbHVyZS4p
Ci0gICAgICAqLwotICAgICAgCi0gICAgICBNT1JFQ09SRSgtZXh0cmEpOwotICAgICAgbmV3X2Jy
ayA9IChjaGFyKikoTU9SRUNPUkUoMCkpOwotICAgICAgCi0gICAgICBpZiAobmV3X2JyayAhPSAo
Y2hhciopTU9SRUNPUkVfRkFJTFVSRSkgewotICAgICAgICByZWxlYXNlZCA9IChsb25nKShjdXJy
ZW50X2JyayAtIG5ld19icmspOwotICAgICAgICAKLSAgICAgICAgaWYgKHJlbGVhc2VkICE9IDAp
IHsKLSAgICAgICAgICAvKiBTdWNjZXNzLiBBZGp1c3QgdG9wLiAqLwotICAgICAgICAgIGF2LT5z
YnJrZWRfbWVtIC09IHJlbGVhc2VkOwotICAgICAgICAgIHNldF9oZWFkKGF2LT50b3AsICh0b3Bf
c2l6ZSAtIHJlbGVhc2VkKSB8IFBSRVZfSU5VU0UpOwotICAgICAgICAgIGNoZWNrX21hbGxvY19z
dGF0ZSgpOwotICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0gIHJldHVybiAwOwotfQotCi0jZW5kaWYKLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIG1hbGxvYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0K
LQotI2lmIF9fU1REX0MKLVZvaWRfdCogbUFMTE9jKHNpemVfdCBieXRlcykKLSNlbHNlCi0gIFZv
aWRfdCogbUFMTE9jKGJ5dGVzKSBzaXplX3QgYnl0ZXM7Ci0jZW5kaWYKLXsKLSAgbXN0YXRlIGF2
ID0gZ2V0X21hbGxvY19zdGF0ZSgpOwotCi0gIElOVEVSTkFMX1NJWkVfVCBuYjsgICAgICAgICAg
ICAgICAvKiBub3JtYWxpemVkIHJlcXVlc3Qgc2l6ZSAqLwotICB1bnNpZ25lZCBpbnQgICAgaWR4
OyAgICAgICAgICAgICAgLyogYXNzb2NpYXRlZCBiaW4gaW5kZXggKi8KLSAgbWJpbnB0ciAgICAg
ICAgIGJpbjsgICAgICAgICAgICAgIC8qIGFzc29jaWF0ZWQgYmluICovCi0gIG1mYXN0YmlucHRy
KiAgICBmYjsgICAgICAgICAgICAgICAvKiBhc3NvY2lhdGVkIGZhc3RiaW4gKi8KLQotICBtY2h1
bmtwdHIgICAgICAgdmljdGltOyAgICAgICAgICAgLyogaW5zcGVjdGVkL3NlbGVjdGVkIGNodW5r
ICovCi0gIElOVEVSTkFMX1NJWkVfVCBzaXplOyAgICAgICAgICAgICAvKiBpdHMgc2l6ZSAqLwot
ICBpbnQgICAgICAgICAgICAgdmljdGltX2luZGV4OyAgICAgLyogaXRzIGJpbiBpbmRleCAqLwot
Ci0gIG1jaHVua3B0ciAgICAgICByZW1haW5kZXI7ICAgICAgICAvKiByZW1haW5kZXIgZnJvbSBh
IHNwbGl0ICovCi0gIENIVU5LX1NJWkVfVCAgICByZW1haW5kZXJfc2l6ZTsgICAvKiBpdHMgc2l6
ZSAqLwotCi0gIHVuc2lnbmVkIGludCAgICBibG9jazsgICAgICAgICAgICAvKiBiaXQgbWFwIHRy
YXZlcnNlciAqLwotICB1bnNpZ25lZCBpbnQgICAgYml0OyAgICAgICAgICAgICAgLyogYml0IG1h
cCB0cmF2ZXJzZXIgKi8KLSAgdW5zaWduZWQgaW50ICAgIG1hcDsgICAgICAgICAgICAgIC8qIGN1
cnJlbnQgd29yZCBvZiBiaW5tYXAgKi8KLQotICBtY2h1bmtwdHIgICAgICAgZndkOyAgICAgICAg
ICAgICAgLyogbWlzYyB0ZW1wIGZvciBsaW5raW5nICovCi0gIG1jaHVua3B0ciAgICAgICBiY2s7
ICAgICAgICAgICAgICAvKiBtaXNjIHRlbXAgZm9yIGxpbmtpbmcgKi8KLQotICAvKgotICAgIENv
bnZlcnQgcmVxdWVzdCBzaXplIHRvIGludGVybmFsIGZvcm0gYnkgYWRkaW5nIFNJWkVfU1ogYnl0
ZXMKLSAgICBvdmVyaGVhZCBwbHVzIHBvc3NpYmx5IG1vcmUgdG8gb2J0YWluIG5lY2Vzc2FyeSBh
bGlnbm1lbnQgYW5kL29yCi0gICAgdG8gb2J0YWluIGEgc2l6ZSBvZiBhdCBsZWFzdCBNSU5TSVpF
LCB0aGUgc21hbGxlc3QgYWxsb2NhdGFibGUKLSAgICBzaXplLiBBbHNvLCBjaGVja2VkX3JlcXVl
c3Qyc2l6ZSB0cmFwcyAocmV0dXJuaW5nIDApIHJlcXVlc3Qgc2l6ZXMKLSAgICB0aGF0IGFyZSBz
byBsYXJnZSB0aGF0IHRoZXkgd3JhcCBhcm91bmQgemVybyB3aGVuIHBhZGRlZCBhbmQKLSAgICBh
bGlnbmVkLgotICAqLwotCi0gIGNoZWNrZWRfcmVxdWVzdDJzaXplKGJ5dGVzLCBuYik7Ci0KLSAg
LyoKLSAgICBCeXBhc3Mgc2VhcmNoIGlmIG5vIGZyZWVzIHlldAotICAgKi8KLSAgaWYgKCFoYXZl
X2FueWNodW5rcyhhdikpIHsKLSAgICBpZiAoYXYtPm1heF9mYXN0ID09IDApIC8qIGluaXRpYWxp
emF0aW9uIGNoZWNrICovCi0gICAgICBtYWxsb2NfY29uc29saWRhdGUoYXYpOwotICAgIGdvdG8g
dXNlX3RvcDsKLSAgfQotCi0gIC8qCi0gICAgSWYgdGhlIHNpemUgcXVhbGlmaWVzIGFzIGEgZmFz
dGJpbiwgZmlyc3QgY2hlY2sgY29ycmVzcG9uZGluZyBiaW4uCi0gICovCi0KLSAgaWYgKChDSFVO
S19TSVpFX1QpKG5iKSA8PSAoQ0hVTktfU0laRV9UKShhdi0+bWF4X2Zhc3QpKSB7IAotICAgIGZi
ID0gJihhdi0+ZmFzdGJpbnNbKGZhc3RiaW5faW5kZXgobmIpKV0pOwotICAgIGlmICggKHZpY3Rp
bSA9ICpmYikgIT0gMCkgewotICAgICAgKmZiID0gdmljdGltLT5mZDsKLSAgICAgIGNoZWNrX3Jl
bWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICByZXR1cm4gY2h1bmsybWVtKHZpY3Rp
bSk7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICBJZiBhIHNtYWxsIHJlcXVlc3QsIGNoZWNrIHJl
Z3VsYXIgYmluLiAgU2luY2UgdGhlc2UgInNtYWxsYmlucyIKLSAgICBob2xkIG9uZSBzaXplIGVh
Y2gsIG5vIHNlYXJjaGluZyB3aXRoaW4gYmlucyBpcyBuZWNlc3NhcnkuCi0gICAgKEZvciBhIGxh
cmdlIHJlcXVlc3QsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB1bnNvcnRlZCBjaHVua3MgYXJlCi0g
ICAgcHJvY2Vzc2VkIHRvIGZpbmQgYmVzdCBmaXQuIEJ1dCBmb3Igc21hbGwgb25lcywgZml0cyBh
cmUgZXhhY3QKLSAgICBhbnl3YXksIHNvIHdlIGNhbiBjaGVjayBub3csIHdoaWNoIGlzIGZhc3Rl
ci4pCi0gICovCi0KLSAgaWYgKGluX3NtYWxsYmluX3JhbmdlKG5iKSkgewotICAgIGlkeCA9IHNt
YWxsYmluX2luZGV4KG5iKTsKLSAgICBiaW4gPSBiaW5fYXQoYXYsaWR4KTsKLQotICAgIGlmICgg
KHZpY3RpbSA9IGxhc3QoYmluKSkgIT0gYmluKSB7Ci0gICAgICBiY2sgPSB2aWN0aW0tPmJrOwot
ICAgICAgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQodmljdGltLCBuYik7Ci0gICAgICBiaW4tPmJr
ID0gYmNrOwotICAgICAgYmNrLT5mZCA9IGJpbjsKLSAgICAgIAotICAgICAgY2hlY2tfbWFsbG9j
ZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICByZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7Ci0g
ICAgfQotICB9Ci0KLSAgLyogCi0gICAgIElmIHRoaXMgaXMgYSBsYXJnZSByZXF1ZXN0LCBjb25z
b2xpZGF0ZSBmYXN0YmlucyBiZWZvcmUgY29udGludWluZy4KLSAgICAgV2hpbGUgaXQgbWlnaHQg
bG9vayBleGNlc3NpdmUgdG8ga2lsbCBhbGwgZmFzdGJpbnMgYmVmb3JlCi0gICAgIGV2ZW4gc2Vl
aW5nIGlmIHRoZXJlIGlzIHNwYWNlIGF2YWlsYWJsZSwgdGhpcyBhdm9pZHMKLSAgICAgZnJhZ21l
bnRhdGlvbiBwcm9ibGVtcyBub3JtYWxseSBhc3NvY2lhdGVkIHdpdGggZmFzdGJpbnMuCi0gICAg
IEFsc28sIGluIHByYWN0aWNlLCBwcm9ncmFtcyB0ZW5kIHRvIGhhdmUgcnVucyBvZiBlaXRoZXIg
c21hbGwgb3IKLSAgICAgbGFyZ2UgcmVxdWVzdHMsIGJ1dCBsZXNzIG9mdGVuIG1peHR1cmVzLCBz
byBjb25zb2xpZGF0aW9uIGlzIG5vdCAKLSAgICAgaW52b2tlZCBhbGwgdGhhdCBvZnRlbiBpbiBt
b3N0IHByb2dyYW1zLiBBbmQgdGhlIHByb2dyYW1zIHRoYXQKLSAgICAgaXQgaXMgY2FsbGVkIGZy
ZXF1ZW50bHkgaW4gb3RoZXJ3aXNlIHRlbmQgdG8gZnJhZ21lbnQuCi0gICovCi0KLSAgZWxzZSB7
Ci0gICAgaWR4ID0gbGFyZ2ViaW5faW5kZXgobmIpOwotICAgIGlmIChoYXZlX2Zhc3RjaHVua3Mo
YXYpKSAKLSAgICAgIG1hbGxvY19jb25zb2xpZGF0ZShhdik7Ci0gIH0KLQotICAvKgotICAgIFBy
b2Nlc3MgcmVjZW50bHkgZnJlZWQgb3IgcmVtYWluZGVyZWQgY2h1bmtzLCB0YWtpbmcgb25lIG9u
bHkgaWYKLSAgICBpdCBpcyBleGFjdCBmaXQsIG9yLCBpZiB0aGlzIGEgc21hbGwgcmVxdWVzdCwg
dGhlIGNodW5rIGlzIHJlbWFpbmRlciBmcm9tCi0gICAgdGhlIG1vc3QgcmVjZW50IG5vbi1leGFj
dCBmaXQuICBQbGFjZSBvdGhlciB0cmF2ZXJzZWQgY2h1bmtzIGluCi0gICAgYmlucy4gIE5vdGUg
dGhhdCB0aGlzIHN0ZXAgaXMgdGhlIG9ubHkgcGxhY2UgaW4gYW55IHJvdXRpbmUgd2hlcmUKLSAg
ICBjaHVua3MgYXJlIHBsYWNlZCBpbiBiaW5zLgotICAqLwotICAgIAotICB3aGlsZSAoICh2aWN0
aW0gPSB1bnNvcnRlZF9jaHVua3MoYXYpLT5iaykgIT0gdW5zb3J0ZWRfY2h1bmtzKGF2KSkgewot
ICAgIGJjayA9IHZpY3RpbS0+Yms7Ci0gICAgc2l6ZSA9IGNodW5rc2l6ZSh2aWN0aW0pOwotICAg
IAotICAgIC8qIAotICAgICAgIElmIGEgc21hbGwgcmVxdWVzdCwgdHJ5IHRvIHVzZSBsYXN0IHJl
bWFpbmRlciBpZiBpdCBpcyB0aGUKLSAgICAgICBvbmx5IGNodW5rIGluIHVuc29ydGVkIGJpbi4g
IFRoaXMgaGVscHMgcHJvbW90ZSBsb2NhbGl0eSBmb3IKLSAgICAgICBydW5zIG9mIGNvbnNlY3V0
aXZlIHNtYWxsIHJlcXVlc3RzLiBUaGlzIGlzIHRoZSBvbmx5Ci0gICAgICAgZXhjZXB0aW9uIHRv
IGJlc3QtZml0LCBhbmQgYXBwbGllcyBvbmx5IHdoZW4gdGhlcmUgaXMKLSAgICAgICBubyBleGFj
dCBmaXQgZm9yIGEgc21hbGwgY2h1bmsuCi0gICAgKi8KLSAgICAKLSAgICBpZiAoaW5fc21hbGxi
aW5fcmFuZ2UobmIpICYmIAotICAgICAgICBiY2sgPT0gdW5zb3J0ZWRfY2h1bmtzKGF2KSAmJgot
ICAgICAgICB2aWN0aW0gPT0gYXYtPmxhc3RfcmVtYWluZGVyICYmCi0gICAgICAgIChDSFVOS19T
SVpFX1QpKHNpemUpID4gKENIVU5LX1NJWkVfVCkobmIgKyBNSU5TSVpFKSkgewotICAgICAgCi0g
ICAgICAvKiBzcGxpdCBhbmQgcmVhdHRhY2ggcmVtYWluZGVyICovCi0gICAgICByZW1haW5kZXJf
c2l6ZSA9IHNpemUgLSBuYjsKLSAgICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNldCh2aWN0
aW0sIG5iKTsKLSAgICAgIHVuc29ydGVkX2NodW5rcyhhdiktPmJrID0gdW5zb3J0ZWRfY2h1bmtz
KGF2KS0+ZmQgPSByZW1haW5kZXI7Ci0gICAgICBhdi0+bGFzdF9yZW1haW5kZXIgPSByZW1haW5k
ZXI7IAotICAgICAgcmVtYWluZGVyLT5iayA9IHJlbWFpbmRlci0+ZmQgPSB1bnNvcnRlZF9jaHVu
a3MoYXYpOwotICAgICAgCi0gICAgICBzZXRfaGVhZCh2aWN0aW0sIG5iIHwgUFJFVl9JTlVTRSk7
Ci0gICAgICBzZXRfaGVhZChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplIHwgUFJFVl9JTlVTRSk7
Ci0gICAgICBzZXRfZm9vdChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplKTsKLSAgICAgIAotICAg
ICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICByZXR1cm4gY2h1bmsy
bWVtKHZpY3RpbSk7Ci0gICAgfQotICAgIAotICAgIC8qIHJlbW92ZSBmcm9tIHVuc29ydGVkIGxp
c3QgKi8KLSAgICB1bnNvcnRlZF9jaHVua3MoYXYpLT5iayA9IGJjazsKLSAgICBiY2stPmZkID0g
dW5zb3J0ZWRfY2h1bmtzKGF2KTsKLSAgICAKLSAgICAvKiBUYWtlIG5vdyBpbnN0ZWFkIG9mIGJp
bm5pbmcgaWYgZXhhY3QgZml0ICovCi0gICAgCi0gICAgaWYgKHNpemUgPT0gbmIpIHsKLSAgICAg
IHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0KHZpY3RpbSwgc2l6ZSk7Ci0gICAgICBjaGVja19tYWxs
b2NlZF9jaHVuayh2aWN0aW0sIG5iKTsKLSAgICAgIHJldHVybiBjaHVuazJtZW0odmljdGltKTsK
LSAgICB9Ci0gICAgCi0gICAgLyogcGxhY2UgY2h1bmsgaW4gYmluICovCi0gICAgCi0gICAgaWYg
KGluX3NtYWxsYmluX3JhbmdlKHNpemUpKSB7Ci0gICAgICB2aWN0aW1faW5kZXggPSBzbWFsbGJp
bl9pbmRleChzaXplKTsKLSAgICAgIGJjayA9IGJpbl9hdChhdiwgdmljdGltX2luZGV4KTsKLSAg
ICAgIGZ3ZCA9IGJjay0+ZmQ7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgdmljdGltX2luZGV4
ID0gbGFyZ2ViaW5faW5kZXgoc2l6ZSk7Ci0gICAgICBiY2sgPSBiaW5fYXQoYXYsIHZpY3RpbV9p
bmRleCk7Ci0gICAgICBmd2QgPSBiY2stPmZkOwotICAgICAgCi0gICAgICBpZiAoZndkICE9IGJj
aykgewotICAgICAgICAvKiBpZiBzbWFsbGVyIHRoYW4gc21hbGxlc3QsIHBsYWNlIGZpcnN0ICov
Ci0gICAgICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA8IChDSFVOS19TSVpFX1QpKGJjay0+
YmstPnNpemUpKSB7Ci0gICAgICAgICAgZndkID0gYmNrOwotICAgICAgICAgIGJjayA9IGJjay0+
Yms7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoKENIVU5LX1NJWkVfVCkoc2l6ZSkgPj0g
Ci0gICAgICAgICAgICAgICAgIChDSFVOS19TSVpFX1QpKEZJUlNUX1NPUlRFRF9CSU5fU0laRSkp
IHsKLSAgICAgICAgICAKLSAgICAgICAgICAvKiBtYWludGFpbiBsYXJnZSBiaW5zIGluIHNvcnRl
ZCBvcmRlciAqLwotICAgICAgICAgIHNpemUgfD0gUFJFVl9JTlVTRTsgLyogT3Igd2l0aCBpbnVz
ZSBiaXQgdG8gc3BlZWQgY29tcGFyaXNvbnMgKi8KLSAgICAgICAgICB3aGlsZSAoKENIVU5LX1NJ
WkVfVCkoc2l6ZSkgPCAoQ0hVTktfU0laRV9UKShmd2QtPnNpemUpKSAKLSAgICAgICAgICAgIGZ3
ZCA9IGZ3ZC0+ZmQ7Ci0gICAgICAgICAgYmNrID0gZndkLT5iazsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0KLSAgICAgIAotICAgIG1hcmtfYmluKGF2LCB2aWN0aW1faW5kZXgpOwotICAgIHZp
Y3RpbS0+YmsgPSBiY2s7Ci0gICAgdmljdGltLT5mZCA9IGZ3ZDsKLSAgICBmd2QtPmJrID0gdmlj
dGltOwotICAgIGJjay0+ZmQgPSB2aWN0aW07Ci0gIH0KLSAgCi0gIC8qCi0gICAgSWYgYSBsYXJn
ZSByZXF1ZXN0LCBzY2FuIHRocm91Z2ggdGhlIGNodW5rcyBvZiBjdXJyZW50IGJpbiB0bwotICAg
IGZpbmQgb25lIHRoYXQgZml0cy4gIChUaGlzIHdpbGwgYmUgdGhlIHNtYWxsZXN0IHRoYXQgZml0
cyB1bmxlc3MKLSAgICBGSVJTVF9TT1JURURfQklOX1NJWkUgaGFzIGJlZW4gY2hhbmdlZCBmcm9t
IGRlZmF1bHQuKSAgVGhpcyBpcwotICAgIHRoZSBvbmx5IHN0ZXAgd2hlcmUgYW4gdW5ib3VuZGVk
IG51bWJlciBvZiBjaHVua3MgbWlnaHQgYmUKLSAgICBzY2FubmVkIHdpdGhvdXQgZG9pbmcgYW55
dGhpbmcgdXNlZnVsIHdpdGggdGhlbS4gSG93ZXZlciB0aGUKLSAgICBsaXN0cyB0ZW5kIHRvIGJl
IHNob3J0LgotICAqLwotICAKLSAgaWYgKCFpbl9zbWFsbGJpbl9yYW5nZShuYikpIHsKLSAgICBi
aW4gPSBiaW5fYXQoYXYsIGlkeCk7Ci0gICAgCi0gICAgZm9yICh2aWN0aW0gPSBsYXN0KGJpbik7
IHZpY3RpbSAhPSBiaW47IHZpY3RpbSA9IHZpY3RpbS0+YmspIHsKLSAgICAgIHNpemUgPSBjaHVu
a3NpemUodmljdGltKTsKLSAgICAgIAotICAgICAgaWYgKChDSFVOS19TSVpFX1QpKHNpemUpID49
IChDSFVOS19TSVpFX1QpKG5iKSkgewotICAgICAgICByZW1haW5kZXJfc2l6ZSA9IHNpemUgLSBu
YjsKLSAgICAgICAgdW5saW5rKHZpY3RpbSwgYmNrLCBmd2QpOwotICAgICAgICAKLSAgICAgICAg
LyogRXhoYXVzdCAqLwotICAgICAgICBpZiAocmVtYWluZGVyX3NpemUgPCBNSU5TSVpFKSAgewot
ICAgICAgICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0KHZpY3RpbSwgc2l6ZSk7Ci0gICAgICAg
ICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICAgICAgcmV0dXJuIGNo
dW5rMm1lbSh2aWN0aW0pOwotICAgICAgICB9Ci0gICAgICAgIC8qIFNwbGl0ICovCi0gICAgICAg
IGVsc2UgewotICAgICAgICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNldCh2aWN0aW0sIG5i
KTsKLSAgICAgICAgICB1bnNvcnRlZF9jaHVua3MoYXYpLT5iayA9IHVuc29ydGVkX2NodW5rcyhh
diktPmZkID0gcmVtYWluZGVyOwotICAgICAgICAgIHJlbWFpbmRlci0+YmsgPSByZW1haW5kZXIt
PmZkID0gdW5zb3J0ZWRfY2h1bmtzKGF2KTsKLSAgICAgICAgICBzZXRfaGVhZCh2aWN0aW0sIG5i
IHwgUFJFVl9JTlVTRSk7Ci0gICAgICAgICAgc2V0X2hlYWQocmVtYWluZGVyLCByZW1haW5kZXJf
c2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgICAgIHNldF9mb290KHJlbWFpbmRlciwgcmVtYWlu
ZGVyX3NpemUpOwotICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKHZpY3RpbSwgbmIpOwot
ICAgICAgICAgIHJldHVybiBjaHVuazJtZW0odmljdGltKTsKLSAgICAgICAgfSAKLSAgICAgIH0K
LSAgICB9ICAgIAotICB9Ci0KLSAgLyoKLSAgICBTZWFyY2ggZm9yIGEgY2h1bmsgYnkgc2Nhbm5p
bmcgYmlucywgc3RhcnRpbmcgd2l0aCBuZXh0IGxhcmdlc3QKLSAgICBiaW4uIFRoaXMgc2VhcmNo
IGlzIHN0cmljdGx5IGJ5IGJlc3QtZml0OyBpLmUuLCB0aGUgc21hbGxlc3QKLSAgICAod2l0aCB0
aWVzIGdvaW5nIHRvIGFwcHJveGltYXRlbHkgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQpIGNodW5r
Ci0gICAgdGhhdCBmaXRzIGlzIHNlbGVjdGVkLgotICAgIAotICAgIFRoZSBiaXRtYXAgYXZvaWRz
IG5lZWRpbmcgdG8gY2hlY2sgdGhhdCBtb3N0IGJsb2NrcyBhcmUgbm9uZW1wdHkuCi0gICovCi0g
ICAgCi0gICsraWR4OwotICBiaW4gPSBiaW5fYXQoYXYsaWR4KTsKLSAgYmxvY2sgPSBpZHgyYmxv
Y2soaWR4KTsKLSAgbWFwID0gYXYtPmJpbm1hcFtibG9ja107Ci0gIGJpdCA9IGlkeDJiaXQoaWR4
KTsKLSAgCi0gIGZvciAoOzspIHsKLSAgICAKLSAgICAvKiBTa2lwIHJlc3Qgb2YgYmxvY2sgaWYg
dGhlcmUgYXJlIG5vIG1vcmUgc2V0IGJpdHMgaW4gdGhpcyBibG9jay4gICovCi0gICAgaWYgKGJp
dCA+IG1hcCB8fCBiaXQgPT0gMCkgewotICAgICAgZG8gewotICAgICAgICBpZiAoKytibG9jayA+
PSBCSU5NQVBTSVpFKSAgLyogb3V0IG9mIGJpbnMgKi8KLSAgICAgICAgICBnb3RvIHVzZV90b3A7
Ci0gICAgICB9IHdoaWxlICggKG1hcCA9IGF2LT5iaW5tYXBbYmxvY2tdKSA9PSAwKTsKLSAgICAg
IAotICAgICAgYmluID0gYmluX2F0KGF2LCAoYmxvY2sgPDwgQklOTUFQU0hJRlQpKTsKLSAgICAg
IGJpdCA9IDE7Ci0gICAgfQotICAgIAotICAgIC8qIEFkdmFuY2UgdG8gYmluIHdpdGggc2V0IGJp
dC4gVGhlcmUgbXVzdCBiZSBvbmUuICovCi0gICAgd2hpbGUgKChiaXQgJiBtYXApID09IDApIHsK
LSAgICAgIGJpbiA9IG5leHRfYmluKGJpbik7Ci0gICAgICBiaXQgPDw9IDE7Ci0gICAgICBhc3Nl
cnQoYml0ICE9IDApOwotICAgIH0KLSAgICAKLSAgICAvKiBJbnNwZWN0IHRoZSBiaW4uIEl0IGlz
IGxpa2VseSB0byBiZSBub24tZW1wdHkgKi8KLSAgICB2aWN0aW0gPSBsYXN0KGJpbik7Ci0gICAg
Ci0gICAgLyogIElmIGEgZmFsc2UgYWxhcm0gKGVtcHR5IGJpbiksIGNsZWFyIHRoZSBiaXQuICov
Ci0gICAgaWYgKHZpY3RpbSA9PSBiaW4pIHsKLSAgICAgIGF2LT5iaW5tYXBbYmxvY2tdID0gbWFw
ICY9IH5iaXQ7IC8qIFdyaXRlIHRocm91Z2ggKi8KLSAgICAgIGJpbiA9IG5leHRfYmluKGJpbik7
Ci0gICAgICBiaXQgPDw9IDE7Ci0gICAgfQotICAgIAotICAgIGVsc2UgewotICAgICAgc2l6ZSA9
IGNodW5rc2l6ZSh2aWN0aW0pOwotICAgICAgCi0gICAgICAvKiAgV2Uga25vdyB0aGUgZmlyc3Qg
Y2h1bmsgaW4gdGhpcyBiaW4gaXMgYmlnIGVub3VnaCB0byB1c2UuICovCi0gICAgICBhc3NlcnQo
KENIVU5LX1NJWkVfVCkoc2l6ZSkgPj0gKENIVU5LX1NJWkVfVCkobmIpKTsKLSAgICAgIAotICAg
ICAgcmVtYWluZGVyX3NpemUgPSBzaXplIC0gbmI7Ci0gICAgICAKLSAgICAgIC8qIHVubGluayAq
LwotICAgICAgYmNrID0gdmljdGltLT5iazsKLSAgICAgIGJpbi0+YmsgPSBiY2s7Ci0gICAgICBi
Y2stPmZkID0gYmluOwotICAgICAgCi0gICAgICAvKiBFeGhhdXN0ICovCi0gICAgICBpZiAocmVt
YWluZGVyX3NpemUgPCBNSU5TSVpFKSB7Ci0gICAgICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0
KHZpY3RpbSwgc2l6ZSk7Ci0gICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKHZpY3RpbSwgbmIp
OwotICAgICAgICByZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7Ci0gICAgICB9Ci0gICAgICAKLSAg
ICAgIC8qIFNwbGl0ICovCi0gICAgICBlbHNlIHsKLSAgICAgICAgcmVtYWluZGVyID0gY2h1bmtf
YXRfb2Zmc2V0KHZpY3RpbSwgbmIpOwotICAgICAgICAKLSAgICAgICAgdW5zb3J0ZWRfY2h1bmtz
KGF2KS0+YmsgPSB1bnNvcnRlZF9jaHVua3MoYXYpLT5mZCA9IHJlbWFpbmRlcjsKLSAgICAgICAg
cmVtYWluZGVyLT5iayA9IHJlbWFpbmRlci0+ZmQgPSB1bnNvcnRlZF9jaHVua3MoYXYpOwotICAg
ICAgICAvKiBhZHZlcnRpc2UgYXMgbGFzdCByZW1haW5kZXIgKi8KLSAgICAgICAgaWYgKGluX3Nt
YWxsYmluX3JhbmdlKG5iKSkgCi0gICAgICAgICAgYXYtPmxhc3RfcmVtYWluZGVyID0gcmVtYWlu
ZGVyOyAKLSAgICAgICAgCi0gICAgICAgIHNldF9oZWFkKHZpY3RpbSwgbmIgfCBQUkVWX0lOVVNF
KTsKLSAgICAgICAgc2V0X2hlYWQocmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSB8IFBSRVZfSU5V
U0UpOwotICAgICAgICBzZXRfZm9vdChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplKTsKLSAgICAg
ICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICAgIHJldHVybiBjaHVu
azJtZW0odmljdGltKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICB1c2VfdG9wOiAgICAKLSAg
LyoKLSAgICBJZiBsYXJnZSBlbm91Z2gsIHNwbGl0IG9mZiB0aGUgY2h1bmsgYm9yZGVyaW5nIHRo
ZSBlbmQgb2YgbWVtb3J5Ci0gICAgKGhlbGQgaW4gYXYtPnRvcCkuIE5vdGUgdGhhdCB0aGlzIGlz
IGluIGFjY29yZCB3aXRoIHRoZSBiZXN0LWZpdAotICAgIHNlYXJjaCBydWxlLiAgSW4gZWZmZWN0
LCBhdi0+dG9wIGlzIHRyZWF0ZWQgYXMgbGFyZ2VyIChhbmQgdGh1cwotICAgIGxlc3Mgd2VsbCBm
aXR0aW5nKSB0aGFuIGFueSBvdGhlciBhdmFpbGFibGUgY2h1bmsgc2luY2UgaXQgY2FuCi0gICAg
YmUgZXh0ZW5kZWQgdG8gYmUgYXMgbGFyZ2UgYXMgbmVjZXNzYXJ5ICh1cCB0byBzeXN0ZW0KLSAg
ICBsaW1pdGF0aW9ucykuCi0gICAgCi0gICAgV2UgcmVxdWlyZSB0aGF0IGF2LT50b3AgYWx3YXlz
IGV4aXN0cyAoaS5lLiwgaGFzIHNpemUgPj0KLSAgICBNSU5TSVpFKSBhZnRlciBpbml0aWFsaXph
dGlvbiwgc28gaWYgaXQgd291bGQgb3RoZXJ3aXNlIGJlCi0gICAgZXhodWFzdGVkIGJ5IGN1cnJl
bnQgcmVxdWVzdCwgaXQgaXMgcmVwbGVuaXNoZWQuIChUaGUgbWFpbgotICAgIHJlYXNvbiBmb3Ig
ZW5zdXJpbmcgaXQgZXhpc3RzIGlzIHRoYXQgd2UgbWF5IG5lZWQgTUlOU0laRSBzcGFjZQotICAg
IHRvIHB1dCBpbiBmZW5jZXBvc3RzIGluIHN5c21hbGxvYy4pCi0gICovCi0gIAotICB2aWN0aW0g
PSBhdi0+dG9wOwotICBzaXplID0gY2h1bmtzaXplKHZpY3RpbSk7Ci0gIAotICBpZiAoKENIVU5L
X1NJWkVfVCkoc2l6ZSkgPj0gKENIVU5LX1NJWkVfVCkobmIgKyBNSU5TSVpFKSkgewotICAgIHJl
bWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOwotICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNl
dCh2aWN0aW0sIG5iKTsKLSAgICBhdi0+dG9wID0gcmVtYWluZGVyOwotICAgIHNldF9oZWFkKHZp
Y3RpbSwgbmIgfCBQUkVWX0lOVVNFKTsKLSAgICBzZXRfaGVhZChyZW1haW5kZXIsIHJlbWFpbmRl
cl9zaXplIHwgUFJFVl9JTlVTRSk7Ci0gICAgCi0gICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmlj
dGltLCBuYik7Ci0gICAgcmV0dXJuIGNodW5rMm1lbSh2aWN0aW0pOwotICB9Ci0gIAotICAvKiAK
LSAgICAgSWYgbm8gc3BhY2UgaW4gdG9wLCByZWxheSB0byBoYW5kbGUgc3lzdGVtLWRlcGVuZGVu
dCBjYXNlcyAKLSAgKi8KLSAgcmV0dXJuIHNZU01BTExPYyhuYiwgYXYpOyAgICAKLX0KLQotLyoK
LSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZyZWUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0qLwotCi0jaWYgX19TVERfQwotdm9pZCBmUkVlKFZvaWRfdCogbWVtKQot
I2Vsc2UKLXZvaWQgZlJFZShtZW0pIFZvaWRfdCogbWVtOwotI2VuZGlmCi17Ci0gIG1zdGF0ZSBh
diA9IGdldF9tYWxsb2Nfc3RhdGUoKTsKLQotICBtY2h1bmtwdHIgICAgICAgcDsgICAgICAgICAg
IC8qIGNodW5rIGNvcnJlc3BvbmRpbmcgdG8gbWVtICovCi0gIElOVEVSTkFMX1NJWkVfVCBzaXpl
OyAgICAgICAgLyogaXRzIHNpemUgKi8KLSAgbWZhc3RiaW5wdHIqICAgIGZiOyAgICAgICAgICAv
KiBhc3NvY2lhdGVkIGZhc3RiaW4gKi8KLSAgbWNodW5rcHRyICAgICAgIG5leHRjaHVuazsgICAv
KiBuZXh0IGNvbnRpZ3VvdXMgY2h1bmsgKi8KLSAgSU5URVJOQUxfU0laRV9UIG5leHRzaXplOyAg
ICAvKiBpdHMgc2l6ZSAqLwotICBpbnQgICAgICAgICAgICAgbmV4dGludXNlOyAgIC8qIHRydWUg
aWYgbmV4dGNodW5rIGlzIHVzZWQgKi8KLSAgSU5URVJOQUxfU0laRV9UIHByZXZzaXplOyAgICAv
KiBzaXplIG9mIHByZXZpb3VzIGNvbnRpZ3VvdXMgY2h1bmsgKi8KLSAgbWNodW5rcHRyICAgICAg
IGJjazsgICAgICAgICAvKiBtaXNjIHRlbXAgZm9yIGxpbmtpbmcgKi8KLSAgbWNodW5rcHRyICAg
ICAgIGZ3ZDsgICAgICAgICAvKiBtaXNjIHRlbXAgZm9yIGxpbmtpbmcgKi8KLQotICAvKiBmcmVl
KDApIGhhcyBubyBlZmZlY3QgKi8KLSAgaWYgKG1lbSAhPSAwKSB7Ci0gICAgcCA9IG1lbTJjaHVu
ayhtZW0pOwotICAgIHNpemUgPSBjaHVua3NpemUocCk7Ci0KLSAgICBjaGVja19pbnVzZV9jaHVu
ayhwKTsKLQotICAgIC8qCi0gICAgICBJZiBlbGlnaWJsZSwgcGxhY2UgY2h1bmsgb24gYSBmYXN0
YmluIHNvIGl0IGNhbiBiZSBmb3VuZAotICAgICAgYW5kIHVzZWQgcXVpY2tseSBpbiBtYWxsb2Mu
Ci0gICAgKi8KLQotICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA8PSAoQ0hVTktfU0laRV9U
KShhdi0+bWF4X2Zhc3QpCi0KLSNpZiBUUklNX0ZBU1RCSU5TCi0gICAgICAgIC8qIAotICAgICAg
ICAgICBJZiBUUklNX0ZBU1RCSU5TIHNldCwgZG9uJ3QgcGxhY2UgY2h1bmtzCi0gICAgICAgICAg
IGJvcmRlcmluZyB0b3AgaW50byBmYXN0YmlucwotICAgICAgICAqLwotICAgICAgICAmJiAoY2h1
bmtfYXRfb2Zmc2V0KHAsIHNpemUpICE9IGF2LT50b3ApCi0jZW5kaWYKLSAgICAgICAgKSB7Ci0K
LSAgICAgIHNldF9mYXN0Y2h1bmtzKGF2KTsKLSAgICAgIGZiID0gJihhdi0+ZmFzdGJpbnNbZmFz
dGJpbl9pbmRleChzaXplKV0pOwotICAgICAgcC0+ZmQgPSAqZmI7Ci0gICAgICAqZmIgPSBwOwot
ICAgIH0KLQotICAgIC8qCi0gICAgICAgQ29uc29saWRhdGUgb3RoZXIgbm9uLW1tYXBwZWQgY2h1
bmtzIGFzIHRoZXkgYXJyaXZlLgotICAgICovCi0KLSAgICBlbHNlIGlmICghY2h1bmtfaXNfbW1h
cHBlZChwKSkgewotICAgICAgc2V0X2FueWNodW5rcyhhdik7Ci0KLSAgICAgIG5leHRjaHVuayA9
IGNodW5rX2F0X29mZnNldChwLCBzaXplKTsKLSAgICAgIG5leHRzaXplID0gY2h1bmtzaXplKG5l
eHRjaHVuayk7Ci0KLSAgICAgIC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovCi0gICAgICBpZiAo
IXByZXZfaW51c2UocCkpIHsKLSAgICAgICAgcHJldnNpemUgPSBwLT5wcmV2X3NpemU7Ci0gICAg
ICAgIHNpemUgKz0gcHJldnNpemU7Ci0gICAgICAgIHAgPSBjaHVua19hdF9vZmZzZXQocCwgLSgo
bG9uZykgcHJldnNpemUpKTsKLSAgICAgICAgdW5saW5rKHAsIGJjaywgZndkKTsKLSAgICAgIH0K
LQotICAgICAgaWYgKG5leHRjaHVuayAhPSBhdi0+dG9wKSB7Ci0gICAgICAgIC8qIGdldCBhbmQg
Y2xlYXIgaW51c2UgYml0ICovCi0gICAgICAgIG5leHRpbnVzZSA9IGludXNlX2JpdF9hdF9vZmZz
ZXQobmV4dGNodW5rLCBuZXh0c2l6ZSk7Ci0gICAgICAgIHNldF9oZWFkKG5leHRjaHVuaywgbmV4
dHNpemUpOwotCi0gICAgICAgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8KLSAgICAgICAgaWYg
KCFuZXh0aW51c2UpIHsKLSAgICAgICAgICB1bmxpbmsobmV4dGNodW5rLCBiY2ssIGZ3ZCk7Ci0g
ICAgICAgICAgc2l6ZSArPSBuZXh0c2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAg
ICAgICAgUGxhY2UgdGhlIGNodW5rIGluIHVuc29ydGVkIGNodW5rIGxpc3QuIENodW5rcyBhcmUK
LSAgICAgICAgICBub3QgcGxhY2VkIGludG8gcmVndWxhciBiaW5zIHVudGlsIGFmdGVyIHRoZXkg
aGF2ZQotICAgICAgICAgIGJlZW4gZ2l2ZW4gb25lIGNoYW5jZSB0byBiZSB1c2VkIGluIG1hbGxv
Yy4KLSAgICAgICAgKi8KLQotICAgICAgICBiY2sgPSB1bnNvcnRlZF9jaHVua3MoYXYpOwotICAg
ICAgICBmd2QgPSBiY2stPmZkOwotICAgICAgICBwLT5iayA9IGJjazsKLSAgICAgICAgcC0+ZmQg
PSBmd2Q7Ci0gICAgICAgIGJjay0+ZmQgPSBwOwotICAgICAgICBmd2QtPmJrID0gcDsKLQotICAg
ICAgICBzZXRfaGVhZChwLCBzaXplIHwgUFJFVl9JTlVTRSk7Ci0gICAgICAgIHNldF9mb290KHAs
IHNpemUpOwotICAgICAgICAKLSAgICAgICAgY2hlY2tfZnJlZV9jaHVuayhwKTsKLSAgICAgIH0K
LQotICAgICAgLyoKLSAgICAgICAgIElmIHRoZSBjaHVuayBib3JkZXJzIHRoZSBjdXJyZW50IGhp
Z2ggZW5kIG9mIG1lbW9yeSwKLSAgICAgICAgIGNvbnNvbGlkYXRlIGludG8gdG9wCi0gICAgICAq
LwotCi0gICAgICBlbHNlIHsKLSAgICAgICAgc2l6ZSArPSBuZXh0c2l6ZTsKLSAgICAgICAgc2V0
X2hlYWQocCwgc2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgICBhdi0+dG9wID0gcDsKLSAgICAg
ICAgY2hlY2tfY2h1bmsocCk7Ci0gICAgICB9Ci0KLSAgICAgIC8qCi0gICAgICAgIElmIGZyZWVp
bmcgYSBsYXJnZSBzcGFjZSwgY29uc29saWRhdGUgcG9zc2libHktc3Vycm91bmRpbmcKLSAgICAg
ICAgY2h1bmtzLiBUaGVuLCBpZiB0aGUgdG90YWwgdW51c2VkIHRvcG1vc3QgbWVtb3J5IGV4Y2Vl
ZHMgdHJpbQotICAgICAgICB0aHJlc2hvbGQsIGFzayBtYWxsb2NfdHJpbSB0byByZWR1Y2UgdG9w
LgotCi0gICAgICAgIFVubGVzcyBtYXhfZmFzdCBpcyAwLCB3ZSBkb24ndCBrbm93IGlmIHRoZXJl
IGFyZSBmYXN0YmlucwotICAgICAgICBib3JkZXJpbmcgdG9wLCBzbyB3ZSBjYW5ub3QgdGVsbCBm
b3Igc3VyZSB3aGV0aGVyIHRocmVzaG9sZAotICAgICAgICBoYXMgYmVlbiByZWFjaGVkIHVubGVz
cyBmYXN0YmlucyBhcmUgY29uc29saWRhdGVkLiAgQnV0IHdlCi0gICAgICAgIGRvbid0IHdhbnQg
dG8gY29uc29saWRhdGUgb24gZWFjaCBmcmVlLiAgQXMgYSBjb21wcm9taXNlLAotICAgICAgICBj
b25zb2xpZGF0aW9uIGlzIHBlcmZvcm1lZCBpZiBGQVNUQklOX0NPTlNPTElEQVRJT05fVEhSRVNI
T0xECi0gICAgICAgIGlzIHJlYWNoZWQuCi0gICAgICAqLwotCi0gICAgICBpZiAoKENIVU5LX1NJ
WkVfVCkoc2l6ZSkgPj0gRkFTVEJJTl9DT05TT0xJREFUSU9OX1RIUkVTSE9MRCkgeyAKLSAgICAg
ICAgaWYgKGhhdmVfZmFzdGNodW5rcyhhdikpIAotICAgICAgICAgIG1hbGxvY19jb25zb2xpZGF0
ZShhdik7Ci0KLSNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0gICAgICAgIAotICAgICAgICBp
ZiAoKENIVU5LX1NJWkVfVCkoY2h1bmtzaXplKGF2LT50b3ApKSA+PSAKLSAgICAgICAgICAgIChD
SFVOS19TSVpFX1QpKGF2LT50cmltX3RocmVzaG9sZCkpCi0gICAgICAgICAgc1lTVFJJbShhdi0+
dG9wX3BhZCwgYXYpOwotI2VuZGlmCi0gICAgICB9Ci0KLSAgICB9Ci0gICAgLyoKLSAgICAgIElm
IHRoZSBjaHVuayB3YXMgYWxsb2NhdGVkIHZpYSBtbWFwLCByZWxlYXNlIHZpYSBtdW5tYXAoKQot
ICAgICAgTm90ZSB0aGF0IGlmIEhBVkVfTU1BUCBpcyBmYWxzZSBidXQgY2h1bmtfaXNfbW1hcHBl
ZCBpcwotICAgICAgdHJ1ZSwgdGhlbiB1c2VyIG11c3QgaGF2ZSBvdmVyd3JpdHRlbiBtZW1vcnku
IFRoZXJlJ3Mgbm90aGluZwotICAgICAgd2UgY2FuIGRvIHRvIGNhdGNoIHRoaXMgZXJyb3IgdW5s
ZXNzIERFQlVHIGlzIHNldCwgaW4gd2hpY2ggY2FzZQotICAgICAgY2hlY2tfaW51c2VfY2h1bmsg
KGFib3ZlKSB3aWxsIGhhdmUgdHJpZ2dlcmVkIGVycm9yLgotICAgICovCi0KLSAgICBlbHNlIHsK
LSNpZiBIQVZFX01NQVAKLSAgICAgIGludCByZXQ7Ci0gICAgICBJTlRFUk5BTF9TSVpFX1Qgb2Zm
c2V0ID0gcC0+cHJldl9zaXplOwotICAgICAgYXYtPm5fbW1hcHMtLTsKLSAgICAgIGF2LT5tbWFw
cGVkX21lbSAtPSAoc2l6ZSArIG9mZnNldCk7Ci0gICAgICByZXQgPSBtdW5tYXAoKGNoYXIqKXAg
LSBvZmZzZXQsIHNpemUgKyBvZmZzZXQpOwotICAgICAgLyogbXVubWFwIHJldHVybnMgbm9uLXpl
cm8gb24gZmFpbHVyZSAqLwotICAgICAgYXNzZXJ0KHJldCA9PSAwKTsKLSNlbmRpZgotICAgIH0K
LSAgfQotfQotCi0vKgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvY19jb25zb2xp
ZGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgbWFsbG9jX2NvbnNvbGlkYXRlIGlz
IGEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBmcmVlKCkgdGhhdCB0ZWFycwotICBkb3duIGNodW5r
cyBoZWxkIGluIGZhc3RiaW5zLiAgRnJlZSBpdHNlbGYgY2Fubm90IGJlIHVzZWQgZm9yIHRoaXMK
LSAgcHVycG9zZSBzaW5jZSwgYW1vbmcgb3RoZXIgdGhpbmdzLCBpdCBtaWdodCBwbGFjZSBjaHVu
a3MgYmFjayBvbnRvCi0gIGZhc3RiaW5zLiAgU28sIGluc3RlYWQsIHdlIG5lZWQgdG8gdXNlIGEg
bWlub3IgdmFyaWFudCBvZiB0aGUgc2FtZQotICBjb2RlLgotICAKLSAgQWxzbywgYmVjYXVzZSB0
aGlzIHJvdXRpbmUgbmVlZHMgdG8gYmUgY2FsbGVkIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gKLSAg
bWFsbG9jIGFueXdheSwgaXQgdHVybnMgb3V0IHRvIGJlIHRoZSBwZXJmZWN0IHBsYWNlIHRvIHRy
aWdnZXIKLSAgaW5pdGlhbGl6YXRpb24gY29kZS4KLSovCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMg
dm9pZCBtYWxsb2NfY29uc29saWRhdGUobXN0YXRlIGF2KQotI2Vsc2UKLXN0YXRpYyB2b2lkIG1h
bGxvY19jb25zb2xpZGF0ZShhdikgbXN0YXRlIGF2OwotI2VuZGlmCi17Ci0gIG1mYXN0YmlucHRy
KiAgICBmYjsgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgZmFzdGJpbiBiZWluZyBjb25zb2xp
ZGF0ZWQgKi8KLSAgbWZhc3RiaW5wdHIqICAgIG1heGZiOyAgICAgICAgICAgICAgLyogbGFzdCBm
YXN0YmluIChmb3IgbG9vcCBjb250cm9sKSAqLwotICBtY2h1bmtwdHIgICAgICAgcDsgICAgICAg
ICAgICAgICAgICAvKiBjdXJyZW50IGNodW5rIGJlaW5nIGNvbnNvbGlkYXRlZCAqLwotICBtY2h1
bmtwdHIgICAgICAgbmV4dHA7ICAgICAgICAgICAgICAvKiBuZXh0IGNodW5rIHRvIGNvbnNvbGlk
YXRlICovCi0gIG1jaHVua3B0ciAgICAgICB1bnNvcnRlZF9iaW47ICAgICAgIC8qIGJpbiBoZWFk
ZXIgKi8KLSAgbWNodW5rcHRyICAgICAgIGZpcnN0X3Vuc29ydGVkOyAgICAgLyogY2h1bmsgdG8g
bGluayB0byAqLwotCi0gIC8qIFRoZXNlIGhhdmUgc2FtZSB1c2UgYXMgaW4gZnJlZSgpICovCi0g
IG1jaHVua3B0ciAgICAgICBuZXh0Y2h1bms7Ci0gIElOVEVSTkFMX1NJWkVfVCBzaXplOwotICBJ
TlRFUk5BTF9TSVpFX1QgbmV4dHNpemU7Ci0gIElOVEVSTkFMX1NJWkVfVCBwcmV2c2l6ZTsKLSAg
aW50ICAgICAgICAgICAgIG5leHRpbnVzZTsKLSAgbWNodW5rcHRyICAgICAgIGJjazsKLSAgbWNo
dW5rcHRyICAgICAgIGZ3ZDsKLQotICAvKgotICAgIElmIG1heF9mYXN0IGlzIDAsIHdlIGtub3cg
dGhhdCBhdiBoYXNuJ3QKLSAgICB5ZXQgYmVlbiBpbml0aWFsaXplZCwgaW4gd2hpY2ggY2FzZSBk
byBzbyBiZWxvdwotICAqLwotCi0gIGlmIChhdi0+bWF4X2Zhc3QgIT0gMCkgewotICAgIGNsZWFy
X2Zhc3RjaHVua3MoYXYpOwotCi0gICAgdW5zb3J0ZWRfYmluID0gdW5zb3J0ZWRfY2h1bmtzKGF2
KTsKLQotICAgIC8qCi0gICAgICBSZW1vdmUgZWFjaCBjaHVuayBmcm9tIGZhc3QgYmluIGFuZCBj
b25zb2xpZGF0ZSBpdCwgcGxhY2luZyBpdAotICAgICAgdGhlbiBpbiB1bnNvcnRlZCBiaW4uIEFt
b25nIG90aGVyIHJlYXNvbnMgZm9yIGRvaW5nIHRoaXMsCi0gICAgICBwbGFjaW5nIGluIHVuc29y
dGVkIGJpbiBhdm9pZHMgbmVlZGluZyB0byBjYWxjdWxhdGUgYWN0dWFsIGJpbnMKLSAgICAgIHVu
dGlsIG1hbGxvYyBpcyBzdXJlIHRoYXQgY2h1bmtzIGFyZW4ndCBpbW1lZGlhdGVseSBnb2luZyB0
byBiZQotICAgICAgcmV1c2VkIGFueXdheS4KLSAgICAqLwotICAgIAotICAgIG1heGZiID0gJihh
di0+ZmFzdGJpbnNbZmFzdGJpbl9pbmRleChhdi0+bWF4X2Zhc3QpXSk7Ci0gICAgZmIgPSAmKGF2
LT5mYXN0Ymluc1swXSk7Ci0gICAgZG8gewotICAgICAgaWYgKCAocCA9ICpmYikgIT0gMCkgewot
ICAgICAgICAqZmIgPSAwOwotICAgICAgICAKLSAgICAgICAgZG8gewotICAgICAgICAgIGNoZWNr
X2ludXNlX2NodW5rKHApOwotICAgICAgICAgIG5leHRwID0gcC0+ZmQ7Ci0gICAgICAgICAgCi0g
ICAgICAgICAgLyogU2xpZ2h0bHkgc3RyZWFtbGluZWQgdmVyc2lvbiBvZiBjb25zb2xpZGF0aW9u
IGNvZGUgaW4gZnJlZSgpICovCi0gICAgICAgICAgc2l6ZSA9IHAtPnNpemUgJiB+UFJFVl9JTlVT
RTsKLSAgICAgICAgICBuZXh0Y2h1bmsgPSBjaHVua19hdF9vZmZzZXQocCwgc2l6ZSk7Ci0gICAg
ICAgICAgbmV4dHNpemUgPSBjaHVua3NpemUobmV4dGNodW5rKTsKLSAgICAgICAgICAKLSAgICAg
ICAgICBpZiAoIXByZXZfaW51c2UocCkpIHsKLSAgICAgICAgICAgIHByZXZzaXplID0gcC0+cHJl
dl9zaXplOwotICAgICAgICAgICAgc2l6ZSArPSBwcmV2c2l6ZTsKLSAgICAgICAgICAgIHAgPSBj
aHVua19hdF9vZmZzZXQocCwgLSgobG9uZykgcHJldnNpemUpKTsKLSAgICAgICAgICAgIHVubGlu
ayhwLCBiY2ssIGZ3ZCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGlmIChu
ZXh0Y2h1bmsgIT0gYXYtPnRvcCkgewotICAgICAgICAgICAgbmV4dGludXNlID0gaW51c2VfYml0
X2F0X29mZnNldChuZXh0Y2h1bmssIG5leHRzaXplKTsKLSAgICAgICAgICAgIHNldF9oZWFkKG5l
eHRjaHVuaywgbmV4dHNpemUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW5leHRp
bnVzZSkgewotICAgICAgICAgICAgICBzaXplICs9IG5leHRzaXplOwotICAgICAgICAgICAgICB1
bmxpbmsobmV4dGNodW5rLCBiY2ssIGZ3ZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGZpcnN0X3Vuc29ydGVkID0gdW5zb3J0ZWRfYmluLT5mZDsKLSAgICAgICAg
ICAgIHVuc29ydGVkX2Jpbi0+ZmQgPSBwOwotICAgICAgICAgICAgZmlyc3RfdW5zb3J0ZWQtPmJr
ID0gcDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0X2hlYWQocCwgc2l6ZSB8IFBSRVZf
SU5VU0UpOwotICAgICAgICAgICAgcC0+YmsgPSB1bnNvcnRlZF9iaW47Ci0gICAgICAgICAgICBw
LT5mZCA9IGZpcnN0X3Vuc29ydGVkOwotICAgICAgICAgICAgc2V0X2Zvb3QocCwgc2l6ZSk7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2l6
ZSArPSBuZXh0c2l6ZTsKLSAgICAgICAgICAgIHNldF9oZWFkKHAsIHNpemUgfCBQUkVWX0lOVVNF
KTsKLSAgICAgICAgICAgIGF2LT50b3AgPSBwOwotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAg
ICAgICAgfSB3aGlsZSAoIChwID0gbmV4dHApICE9IDApOwotICAgICAgICAKLSAgICAgIH0KLSAg
ICB9IHdoaWxlIChmYisrICE9IG1heGZiKTsKLSAgfQotICBlbHNlIHsKLSAgICBtYWxsb2NfaW5p
dF9zdGF0ZShhdik7Ci0gICAgY2hlY2tfbWFsbG9jX3N0YXRlKCk7Ci0gIH0KLX0KLQotLyoKLSAg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlYWxsb2MgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0qLwotCi0KLSNpZiBfX1NURF9DCi1Wb2lkX3QqIHJFQUxMT2MoVm9pZF90
KiBvbGRtZW0sIHNpemVfdCBieXRlcykKLSNlbHNlCi1Wb2lkX3QqIHJFQUxMT2Mob2xkbWVtLCBi
eXRlcykgVm9pZF90KiBvbGRtZW07IHNpemVfdCBieXRlczsKLSNlbmRpZgotewotICBtc3RhdGUg
YXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0KLSAgSU5URVJOQUxfU0laRV9UICBuYjsgICAgICAg
ICAgICAgIC8qIHBhZGRlZCByZXF1ZXN0IHNpemUgKi8KLQotICBtY2h1bmtwdHIgICAgICAgIG9s
ZHA7ICAgICAgICAgICAgLyogY2h1bmsgY29ycmVzcG9uZGluZyB0byBvbGRtZW0gKi8KLSAgSU5U
RVJOQUxfU0laRV9UICBvbGRzaXplOyAgICAgICAgIC8qIGl0cyBzaXplICovCi0KLSAgbWNodW5r
cHRyICAgICAgICBuZXdwOyAgICAgICAgICAgIC8qIGNodW5rIHRvIHJldHVybiAqLwotICBJTlRF
Uk5BTF9TSVpFX1QgIG5ld3NpemU7ICAgICAgICAgLyogaXRzIHNpemUgKi8KLSAgVm9pZF90KiAg
ICAgICAgICBuZXdtZW07ICAgICAgICAgIC8qIGNvcnJlc3BvbmRpbmcgdXNlciBtZW0gKi8KLQot
ICBtY2h1bmtwdHIgICAgICAgIG5leHQ7ICAgICAgICAgICAgLyogbmV4dCBjb250aWd1b3VzIGNo
dW5rIGFmdGVyIG9sZHAgKi8KLQotICBtY2h1bmtwdHIgICAgICAgIHJlbWFpbmRlcjsgICAgICAg
LyogZXh0cmEgc3BhY2UgYXQgZW5kIG9mIG5ld3AgKi8KLSAgQ0hVTktfU0laRV9UICAgICByZW1h
aW5kZXJfc2l6ZTsgIC8qIGl0cyBzaXplICovCi0KLSAgbWNodW5rcHRyICAgICAgICBiY2s7ICAg
ICAgICAgICAgIC8qIG1pc2MgdGVtcCBmb3IgbGlua2luZyAqLwotICBtY2h1bmtwdHIgICAgICAg
IGZ3ZDsgICAgICAgICAgICAgLyogbWlzYyB0ZW1wIGZvciBsaW5raW5nICovCi0KLSAgQ0hVTktf
U0laRV9UICAgICBjb3B5c2l6ZTsgICAgICAgIC8qIGJ5dGVzIHRvIGNvcHkgKi8KLSAgdW5zaWdu
ZWQgaW50ICAgICBuY29waWVzOyAgICAgICAgIC8qIElOVEVSTkFMX1NJWkVfVCB3b3JkcyB0byBj
b3B5ICovCi0gIElOVEVSTkFMX1NJWkVfVCogczsgICAgICAgICAgICAgICAvKiBjb3B5IHNvdXJj
ZSAqLyAKLSAgSU5URVJOQUxfU0laRV9UKiBkOyAgICAgICAgICAgICAgIC8qIGNvcHkgZGVzdGlu
YXRpb24gKi8KLQotCi0jaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCi0gIGlmIChieXRl
cyA9PSAwKSB7Ci0gICAgZlJFZShvbGRtZW0pOwotICAgIHJldHVybiAwOwotICB9Ci0jZW5kaWYK
LQotICAvKiByZWFsbG9jIG9mIG51bGwgaXMgc3VwcG9zZWQgdG8gYmUgc2FtZSBhcyBtYWxsb2Mg
Ki8KLSAgaWYgKG9sZG1lbSA9PSAwKSByZXR1cm4gbUFMTE9jKGJ5dGVzKTsKLQotICBjaGVja2Vk
X3JlcXVlc3Qyc2l6ZShieXRlcywgbmIpOwotCi0gIG9sZHAgICAgPSBtZW0yY2h1bmsob2xkbWVt
KTsKLSAgb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKLQotICBjaGVja19pbnVzZV9jaHVuayhv
bGRwKTsKLQotICBpZiAoIWNodW5rX2lzX21tYXBwZWQob2xkcCkpIHsKLQotICAgIGlmICgoQ0hV
TktfU0laRV9UKShvbGRzaXplKSA+PSAoQ0hVTktfU0laRV9UKShuYikpIHsKLSAgICAgIC8qIGFs
cmVhZHkgYmlnIGVub3VnaDsgc3BsaXQgYmVsb3cgKi8KLSAgICAgIG5ld3AgPSBvbGRwOwotICAg
ICAgbmV3c2l6ZSA9IG9sZHNpemU7Ci0gICAgfQotCi0gICAgZWxzZSB7Ci0gICAgICBuZXh0ID0g
Y2h1bmtfYXRfb2Zmc2V0KG9sZHAsIG9sZHNpemUpOwotCi0gICAgICAvKiBUcnkgdG8gZXhwYW5k
IGZvcndhcmQgaW50byB0b3AgKi8KLSAgICAgIGlmIChuZXh0ID09IGF2LT50b3AgJiYKLSAgICAg
ICAgICAoQ0hVTktfU0laRV9UKShuZXdzaXplID0gb2xkc2l6ZSArIGNodW5rc2l6ZShuZXh0KSkg
Pj0KLSAgICAgICAgICAoQ0hVTktfU0laRV9UKShuYiArIE1JTlNJWkUpKSB7Ci0gICAgICAgIHNl
dF9oZWFkX3NpemUob2xkcCwgbmIpOwotICAgICAgICBhdi0+dG9wID0gY2h1bmtfYXRfb2Zmc2V0
KG9sZHAsIG5iKTsKLSAgICAgICAgc2V0X2hlYWQoYXYtPnRvcCwgKG5ld3NpemUgLSBuYikgfCBQ
UkVWX0lOVVNFKTsKLSAgICAgICAgcmV0dXJuIGNodW5rMm1lbShvbGRwKTsKLSAgICAgIH0KLSAg
ICAgIAotICAgICAgLyogVHJ5IHRvIGV4cGFuZCBmb3J3YXJkIGludG8gbmV4dCBjaHVuazsgIHNw
bGl0IG9mZiByZW1haW5kZXIgYmVsb3cgKi8KLSAgICAgIGVsc2UgaWYgKG5leHQgIT0gYXYtPnRv
cCAmJiAKLSAgICAgICAgICAgICAgICFpbnVzZShuZXh0KSAmJgotICAgICAgICAgICAgICAgKENI
VU5LX1NJWkVfVCkobmV3c2l6ZSA9IG9sZHNpemUgKyBjaHVua3NpemUobmV4dCkpID49Ci0gICAg
ICAgICAgICAgICAoQ0hVTktfU0laRV9UKShuYikpIHsKLSAgICAgICAgbmV3cCA9IG9sZHA7Ci0g
ICAgICAgIHVubGluayhuZXh0LCBiY2ssIGZ3ZCk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGFsbG9j
YXRlLCBjb3B5LCBmcmVlICovCi0gICAgICBlbHNlIHsKLSAgICAgICAgbmV3bWVtID0gbUFMTE9j
KG5iIC0gTUFMTE9DX0FMSUdOX01BU0spOwotICAgICAgICBpZiAobmV3bWVtID09IDApCi0gICAg
ICAgICAgcmV0dXJuIDA7IC8qIHByb3BhZ2F0ZSBmYWlsdXJlICovCi0gICAgICAKLSAgICAgICAg
bmV3cCA9IG1lbTJjaHVuayhuZXdtZW0pOwotICAgICAgICBuZXdzaXplID0gY2h1bmtzaXplKG5l
d3ApOwotICAgICAgICAKLSAgICAgICAgLyoKLSAgICAgICAgICBBdm9pZCBjb3B5IGlmIG5ld3Ag
aXMgbmV4dCBjaHVuayBhZnRlciBvbGRwLgotICAgICAgICAqLwotICAgICAgICBpZiAobmV3cCA9
PSBuZXh0KSB7Ci0gICAgICAgICAgbmV3c2l6ZSArPSBvbGRzaXplOwotICAgICAgICAgIG5ld3Ag
PSBvbGRwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIC8qCi0gICAgICAg
ICAgICBVbnJvbGwgY29weSBvZiA8PSAzNiBieXRlcyAoNzIgaWYgOGJ5dGUgc2l6ZXMpCi0gICAg
ICAgICAgICBXZSBrbm93IHRoYXQgY29udGVudHMgaGF2ZSBhbiBvZGQgbnVtYmVyIG9mCi0gICAg
ICAgICAgICBJTlRFUk5BTF9TSVpFX1Qtc2l6ZWQgd29yZHM7IG1pbmltYWxseSAzLgotICAgICAg
ICAgICovCi0gICAgICAgICAgCi0gICAgICAgICAgY29weXNpemUgPSBvbGRzaXplIC0gU0laRV9T
WjsKLSAgICAgICAgICBzID0gKElOVEVSTkFMX1NJWkVfVCopKG9sZG1lbSk7Ci0gICAgICAgICAg
ZCA9IChJTlRFUk5BTF9TSVpFX1QqKShuZXdtZW0pOwotICAgICAgICAgIG5jb3BpZXMgPSBjb3B5
c2l6ZSAvIHNpemVvZihJTlRFUk5BTF9TSVpFX1QpOwotICAgICAgICAgIGFzc2VydChuY29waWVz
ID49IDMpOwotICAgICAgICAgIAotICAgICAgICAgIGlmIChuY29waWVzID4gOSkKLSAgICAgICAg
ICAgIE1BTExPQ19DT1BZKGQsIHMsIGNvcHlzaXplKTsKLSAgICAgICAgICAKLSAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICooZCswKSA9ICoocyswKTsKLSAgICAgICAgICAgICooZCsxKSA9
ICoocysxKTsKLSAgICAgICAgICAgICooZCsyKSA9ICoocysyKTsKLSAgICAgICAgICAgIGlmIChu
Y29waWVzID4gNCkgewotICAgICAgICAgICAgICAqKGQrMykgPSAqKHMrMyk7Ci0gICAgICAgICAg
ICAgICooZCs0KSA9ICoocys0KTsKLSAgICAgICAgICAgICAgaWYgKG5jb3BpZXMgPiA2KSB7Ci0g
ICAgICAgICAgICAgICAgKihkKzUpID0gKihzKzUpOwotICAgICAgICAgICAgICAgICooZCs2KSA9
ICoocys2KTsKLSAgICAgICAgICAgICAgICBpZiAobmNvcGllcyA+IDgpIHsKLSAgICAgICAgICAg
ICAgICAgICooZCs3KSA9ICoocys3KTsKLSAgICAgICAgICAgICAgICAgICooZCs4KSA9ICoocys4
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgZlJFZShvbGRtZW0pOwotICAgICAgICAg
IGNoZWNrX2ludXNlX2NodW5rKG5ld3ApOwotICAgICAgICAgIHJldHVybiBjaHVuazJtZW0obmV3
cCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBJZiBwb3NzaWJsZSwgZnJl
ZSBleHRyYSBzcGFjZSBpbiBvbGQgb3IgZXh0ZW5kZWQgY2h1bmsgKi8KLQotICAgIGFzc2VydCgo
Q0hVTktfU0laRV9UKShuZXdzaXplKSA+PSAoQ0hVTktfU0laRV9UKShuYikpOwotCi0gICAgcmVt
YWluZGVyX3NpemUgPSBuZXdzaXplIC0gbmI7Ci0KLSAgICBpZiAocmVtYWluZGVyX3NpemUgPCBN
SU5TSVpFKSB7IC8qIG5vdCBlbm91Z2ggZXh0cmEgdG8gc3BsaXQgb2ZmICovCi0gICAgICBzZXRf
aGVhZF9zaXplKG5ld3AsIG5ld3NpemUpOwotICAgICAgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQo
bmV3cCwgbmV3c2l6ZSk7Ci0gICAgfQotICAgIGVsc2UgeyAvKiBzcGxpdCByZW1haW5kZXIgKi8K
LSAgICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNldChuZXdwLCBuYik7Ci0gICAgICBzZXRf
aGVhZF9zaXplKG5ld3AsIG5iKTsKLSAgICAgIHNldF9oZWFkKHJlbWFpbmRlciwgcmVtYWluZGVy
X3NpemUgfCBQUkVWX0lOVVNFKTsKLSAgICAgIC8qIE1hcmsgcmVtYWluZGVyIGFzIGludXNlIHNv
IGZyZWUoKSB3b24ndCBjb21wbGFpbiAqLwotICAgICAgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQo
cmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSk7Ci0gICAgICBmUkVlKGNodW5rMm1lbShyZW1haW5k
ZXIpKTsgCi0gICAgfQotCi0gICAgY2hlY2tfaW51c2VfY2h1bmsobmV3cCk7Ci0gICAgcmV0dXJu
IGNodW5rMm1lbShuZXdwKTsKLSAgfQotCi0gIC8qCi0gICAgSGFuZGxlIG1tYXAgY2FzZXMKLSAg
Ki8KLQotICBlbHNlIHsKLSNpZiBIQVZFX01NQVAKLQotI2lmIEhBVkVfTVJFTUFQCi0gICAgSU5U
RVJOQUxfU0laRV9UIG9mZnNldCA9IG9sZHAtPnByZXZfc2l6ZTsKLSAgICBzaXplX3QgcGFnZW1h
c2sgPSBhdi0+cGFnZXNpemUgLSAxOwotICAgIGNoYXIgKmNwOwotICAgIENIVU5LX1NJWkVfVCAg
c3VtOwotICAgIAotICAgIC8qIE5vdGUgdGhlIGV4dHJhIFNJWkVfU1ogb3ZlcmhlYWQgKi8KLSAg
ICBuZXdzaXplID0gKG5iICsgb2Zmc2V0ICsgU0laRV9TWiArIHBhZ2VtYXNrKSAmIH5wYWdlbWFz
azsKLQotICAgIC8qIGRvbid0IG5lZWQgdG8gcmVtYXAgaWYgc3RpbGwgd2l0aGluIHNhbWUgcGFn
ZSAqLwotICAgIGlmIChvbGRzaXplID09IG5ld3NpemUgLSBvZmZzZXQpIAotICAgICAgcmV0dXJu
IG9sZG1lbTsKLQotICAgIGNwID0gKGNoYXIqKW1yZW1hcCgoY2hhciopb2xkcCAtIG9mZnNldCwg
b2xkc2l6ZSArIG9mZnNldCwgbmV3c2l6ZSwgMSk7Ci0gICAgCi0gICAgaWYgKGNwICE9IChjaGFy
KilNT1JFQ09SRV9GQUlMVVJFKSB7Ci0KLSAgICAgIG5ld3AgPSAobWNodW5rcHRyKShjcCArIG9m
ZnNldCk7Ci0gICAgICBzZXRfaGVhZChuZXdwLCAobmV3c2l6ZSAtIG9mZnNldCl8SVNfTU1BUFBF
RCk7Ci0gICAgICAKLSAgICAgIGFzc2VydChhbGlnbmVkX09LKGNodW5rMm1lbShuZXdwKSkpOwot
ICAgICAgYXNzZXJ0KChuZXdwLT5wcmV2X3NpemUgPT0gb2Zmc2V0KSk7Ci0gICAgICAKLSAgICAg
IC8qIHVwZGF0ZSBzdGF0aXN0aWNzICovCi0gICAgICBzdW0gPSBhdi0+bW1hcHBlZF9tZW0gKz0g
bmV3c2l6ZSAtIG9sZHNpemU7Ci0gICAgICBpZiAoc3VtID4gKENIVU5LX1NJWkVfVCkoYXYtPm1h
eF9tbWFwcGVkX21lbSkpIAotICAgICAgICBhdi0+bWF4X21tYXBwZWRfbWVtID0gc3VtOwotICAg
ICAgc3VtICs9IGF2LT5zYnJrZWRfbWVtOwotICAgICAgaWYgKHN1bSA+IChDSFVOS19TSVpFX1Qp
KGF2LT5tYXhfdG90YWxfbWVtKSkgCi0gICAgICAgIGF2LT5tYXhfdG90YWxfbWVtID0gc3VtOwot
ICAgICAgCi0gICAgICByZXR1cm4gY2h1bmsybWVtKG5ld3ApOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgLyogTm90ZSB0aGUgZXh0cmEgU0laRV9TWiBvdmVyaGVhZC4gKi8KLSAgICBpZiAoKENIVU5L
X1NJWkVfVCkob2xkc2l6ZSkgPj0gKENIVU5LX1NJWkVfVCkobmIgKyBTSVpFX1NaKSkgCi0gICAg
ICBuZXdtZW0gPSBvbGRtZW07IC8qIGRvIG5vdGhpbmcgKi8KLSAgICBlbHNlIHsKLSAgICAgIC8q
IE11c3QgYWxsb2MsIGNvcHksIGZyZWUuICovCi0gICAgICBuZXdtZW0gPSBtQUxMT2MobmIgLSBN
QUxMT0NfQUxJR05fTUFTSyk7Ci0gICAgICBpZiAobmV3bWVtICE9IDApIHsKLSAgICAgICAgTUFM
TE9DX0NPUFkobmV3bWVtLCBvbGRtZW0sIG9sZHNpemUgLSAyKlNJWkVfU1opOwotICAgICAgICBm
UkVlKG9sZG1lbSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuZXdtZW07Ci0KLSNlbHNl
IAotICAgIC8qIElmICFIQVZFX01NQVAsIGJ1dCBjaHVua19pc19tbWFwcGVkLCB1c2VyIG11c3Qg
aGF2ZSBvdmVyd3JpdHRlbiBtZW0gKi8KLSAgICBjaGVja19tYWxsb2Nfc3RhdGUoKTsKLSAgICBN
QUxMT0NfRkFJTFVSRV9BQ1RJT047Ci0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLSAgfQotfQotCi0v
KgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWVtYWxpZ24gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWYgX19TVERfQwotVm9pZF90KiBtRU1BTElHbihz
aXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpCi0jZWxzZQotVm9pZF90KiBtRU1BTElHbihh
bGlnbm1lbnQsIGJ5dGVzKSBzaXplX3QgYWxpZ25tZW50OyBzaXplX3QgYnl0ZXM7Ci0jZW5kaWYK
LXsKLSAgSU5URVJOQUxfU0laRV9UIG5iOyAgICAgICAgICAgICAvKiBwYWRkZWQgIHJlcXVlc3Qg
c2l6ZSAqLwotICBjaGFyKiAgICAgICAgICAgbTsgICAgICAgICAgICAgIC8qIG1lbW9yeSByZXR1
cm5lZCBieSBtYWxsb2MgY2FsbCAqLwotICBtY2h1bmtwdHIgICAgICAgcDsgICAgICAgICAgICAg
IC8qIGNvcnJlc3BvbmRpbmcgY2h1bmsgKi8KLSAgY2hhciogICAgICAgICAgIGJyazsgICAgICAg
ICAgICAvKiBhbGlnbm1lbnQgcG9pbnQgd2l0aGluIHAgKi8KLSAgbWNodW5rcHRyICAgICAgIG5l
d3A7ICAgICAgICAgICAvKiBjaHVuayB0byByZXR1cm4gKi8KLSAgSU5URVJOQUxfU0laRV9UIG5l
d3NpemU7ICAgICAgICAvKiBpdHMgc2l6ZSAqLwotICBJTlRFUk5BTF9TSVpFX1QgbGVhZHNpemU7
ICAgICAgIC8qIGxlYWRpbmcgc3BhY2UgYmVmb3JlIGFsaWdubWVudCBwb2ludCAqLwotICBtY2h1
bmtwdHIgICAgICAgcmVtYWluZGVyOyAgICAgIC8qIHNwYXJlIHJvb20gYXQgZW5kIHRvIHNwbGl0
IG9mZiAqLwotICBDSFVOS19TSVpFX1QgICAgcmVtYWluZGVyX3NpemU7IC8qIGl0cyBzaXplICov
Ci0gIElOVEVSTkFMX1NJWkVfVCBzaXplOwotCi0gIC8qIElmIG5lZWQgbGVzcyBhbGlnbm1lbnQg
dGhhbiB3ZSBnaXZlIGFueXdheSwganVzdCByZWxheSB0byBtYWxsb2MgKi8KLQotICBpZiAoYWxp
Z25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpIHJldHVybiBtQUxMT2MoYnl0ZXMpOwotCi0gIC8q
IE90aGVyd2lzZSwgZW5zdXJlIHRoYXQgaXQgaXMgYXQgbGVhc3QgYSBtaW5pbXVtIGNodW5rIHNp
emUgKi8KLQotICBpZiAoYWxpZ25tZW50IDwgIE1JTlNJWkUpIGFsaWdubWVudCA9IE1JTlNJWkU7
Ci0KLSAgLyogTWFrZSBzdXJlIGFsaWdubWVudCBpcyBwb3dlciBvZiAyIChpbiBjYXNlIE1JTlNJ
WkUgaXMgbm90KS4gICovCi0gIGlmICgoYWxpZ25tZW50ICYgKGFsaWdubWVudCAtIDEpKSAhPSAw
KSB7Ci0gICAgc2l6ZV90IGEgPSBNQUxMT0NfQUxJR05NRU5UICogMjsKLSAgICB3aGlsZSAoKENI
VU5LX1NJWkVfVClhIDwgKENIVU5LX1NJWkVfVClhbGlnbm1lbnQpIGEgPDw9IDE7Ci0gICAgYWxp
Z25tZW50ID0gYTsKLSAgfQotCi0gIGNoZWNrZWRfcmVxdWVzdDJzaXplKGJ5dGVzLCBuYik7Ci0K
LSAgLyoKLSAgICBTdHJhdGVneTogZmluZCBhIHNwb3Qgd2l0aGluIHRoYXQgY2h1bmsgdGhhdCBt
ZWV0cyB0aGUgYWxpZ25tZW50Ci0gICAgcmVxdWVzdCwgYW5kIHRoZW4gcG9zc2libHkgZnJlZSB0
aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UuCi0gICovCi0KLQotICAvKiBDYWxsIG1hbGxv
YyB3aXRoIHdvcnN0IGNhc2UgcGFkZGluZyB0byBoaXQgYWxpZ25tZW50LiAqLwotCi0gIG0gID0g
KGNoYXIqKShtQUxMT2MobmIgKyBhbGlnbm1lbnQgKyBNSU5TSVpFKSk7Ci0KLSAgaWYgKG0gPT0g
MCkgcmV0dXJuIDA7IC8qIHByb3BhZ2F0ZSBmYWlsdXJlICovCi0KLSAgcCA9IG1lbTJjaHVuayht
KTsKLQotICBpZiAoKCgoUFRSX1VJTlQpKG0pKSAlIGFsaWdubWVudCkgIT0gMCkgeyAvKiBtaXNh
bGlnbmVkICovCi0KLSAgICAvKgotICAgICAgRmluZCBhbiBhbGlnbmVkIHNwb3QgaW5zaWRlIGNo
dW5rLiAgU2luY2Ugd2UgbmVlZCB0byBnaXZlIGJhY2sKLSAgICAgIGxlYWRpbmcgc3BhY2UgaW4g
YSBjaHVuayBvZiBhdCBsZWFzdCBNSU5TSVpFLCBpZiB0aGUgZmlyc3QKLSAgICAgIGNhbGN1bGF0
aW9uIHBsYWNlcyB1cyBhdCBhIHNwb3Qgd2l0aCBsZXNzIHRoYW4gTUlOU0laRSBsZWFkZXIsCi0g
ICAgICB3ZSBjYW4gbW92ZSB0byB0aGUgbmV4dCBhbGlnbmVkIHNwb3QgLS0gd2UndmUgYWxsb2Nh
dGVkIGVub3VnaAotICAgICAgdG90YWwgcm9vbSBzbyB0aGF0IHRoaXMgaXMgYWx3YXlzIHBvc3Np
YmxlLgotICAgICovCi0KLSAgICBicmsgPSAoY2hhciopbWVtMmNodW5rKChQVFJfVUlOVCkoKChQ
VFJfVUlOVCkobSArIGFsaWdubWVudCAtIDEpKSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAtKChzaWduZWQgbG9uZykgYWxpZ25tZW50KSkpOwotICAgIGlmICgoQ0hVTktfU0laRV9UKShi
cmsgLSAoY2hhciopKHApKSA8IE1JTlNJWkUpCi0gICAgICBicmsgKz0gYWxpZ25tZW50OwotCi0g
ICAgbmV3cCA9IChtY2h1bmtwdHIpYnJrOwotICAgIGxlYWRzaXplID0gYnJrIC0gKGNoYXIqKShw
KTsKLSAgICBuZXdzaXplID0gY2h1bmtzaXplKHApIC0gbGVhZHNpemU7Ci0KLSAgICAvKiBGb3Ig
bW1hcHBlZCBjaHVua3MsIGp1c3QgYWRqdXN0IG9mZnNldCAqLwotICAgIGlmIChjaHVua19pc19t
bWFwcGVkKHApKSB7Ci0gICAgICBuZXdwLT5wcmV2X3NpemUgPSBwLT5wcmV2X3NpemUgKyBsZWFk
c2l6ZTsKLSAgICAgIHNldF9oZWFkKG5ld3AsIG5ld3NpemV8SVNfTU1BUFBFRCk7Ci0gICAgICBy
ZXR1cm4gY2h1bmsybWVtKG5ld3ApOwotICAgIH0KLQotICAgIC8qIE90aGVyd2lzZSwgZ2l2ZSBi
YWNrIGxlYWRlciwgdXNlIHRoZSByZXN0ICovCi0gICAgc2V0X2hlYWQobmV3cCwgbmV3c2l6ZSB8
IFBSRVZfSU5VU0UpOwotICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0KG5ld3AsIG5ld3NpemUp
OwotICAgIHNldF9oZWFkX3NpemUocCwgbGVhZHNpemUpOwotICAgIGZSRWUoY2h1bmsybWVtKHAp
KTsKLSAgICBwID0gbmV3cDsKLQotICAgIGFzc2VydCAobmV3c2l6ZSA+PSBuYiAmJgotICAgICAg
ICAgICAgKCgoUFRSX1VJTlQpKGNodW5rMm1lbShwKSkpICUgYWxpZ25tZW50KSA9PSAwKTsKLSAg
fQotCi0gIC8qIEFsc28gZ2l2ZSBiYWNrIHNwYXJlIHJvb20gYXQgdGhlIGVuZCAqLwotICBpZiAo
IWNodW5rX2lzX21tYXBwZWQocCkpIHsKLSAgICBzaXplID0gY2h1bmtzaXplKHApOwotICAgIGlm
ICgoQ0hVTktfU0laRV9UKShzaXplKSA+IChDSFVOS19TSVpFX1QpKG5iICsgTUlOU0laRSkpIHsK
LSAgICAgIHJlbWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOwotICAgICAgcmVtYWluZGVyID0gY2h1
bmtfYXRfb2Zmc2V0KHAsIG5iKTsKLSAgICAgIHNldF9oZWFkKHJlbWFpbmRlciwgcmVtYWluZGVy
X3NpemUgfCBQUkVWX0lOVVNFKTsKLSAgICAgIHNldF9oZWFkX3NpemUocCwgbmIpOwotICAgICAg
ZlJFZShjaHVuazJtZW0ocmVtYWluZGVyKSk7Ci0gICAgfQotICB9Ci0KLSAgY2hlY2tfaW51c2Vf
Y2h1bmsocCk7Ci0gIHJldHVybiBjaHVuazJtZW0ocCk7Ci19Ci0KLS8qCi0gIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBjYWxsb2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0qLwotCi0jaWYgX19TVERfQwotVm9pZF90KiBjQUxMT2Moc2l6ZV90IG5fZWxlbWVudHMsIHNp
emVfdCBlbGVtX3NpemUpCi0jZWxzZQotVm9pZF90KiBjQUxMT2Mobl9lbGVtZW50cywgZWxlbV9z
aXplKSBzaXplX3Qgbl9lbGVtZW50czsgc2l6ZV90IGVsZW1fc2l6ZTsKLSNlbmRpZgotewotICBt
Y2h1bmtwdHIgcDsKLSAgQ0hVTktfU0laRV9UICBjbGVhcnNpemU7Ci0gIENIVU5LX1NJWkVfVCAg
bmNsZWFyczsKLSAgSU5URVJOQUxfU0laRV9UKiBkOwotCi0gIFZvaWRfdCogbWVtID0gbUFMTE9j
KG5fZWxlbWVudHMgKiBlbGVtX3NpemUpOwotCi0gIGlmIChtZW0gIT0gMCkgewotICAgIHAgPSBt
ZW0yY2h1bmsobWVtKTsKLQotICAgIGlmICghY2h1bmtfaXNfbW1hcHBlZChwKSkKLSAgICB7ICAK
LSAgICAgIC8qCi0gICAgICAgIFVucm9sbCBjbGVhciBvZiA8PSAzNiBieXRlcyAoNzIgaWYgOGJ5
dGUgc2l6ZXMpCi0gICAgICAgIFdlIGtub3cgdGhhdCBjb250ZW50cyBoYXZlIGFuIG9kZCBudW1i
ZXIgb2YKLSAgICAgICAgSU5URVJOQUxfU0laRV9ULXNpemVkIHdvcmRzOyBtaW5pbWFsbHkgMy4K
LSAgICAgICovCi0KLSAgICAgIGQgPSAoSU5URVJOQUxfU0laRV9UKiltZW07Ci0gICAgICBjbGVh
cnNpemUgPSBjaHVua3NpemUocCkgLSBTSVpFX1NaOwotICAgICAgbmNsZWFycyA9IGNsZWFyc2l6
ZSAvIHNpemVvZihJTlRFUk5BTF9TSVpFX1QpOwotICAgICAgYXNzZXJ0KG5jbGVhcnMgPj0gMyk7
Ci0KLSAgICAgIGlmIChuY2xlYXJzID4gOSkKLSAgICAgICAgTUFMTE9DX1pFUk8oZCwgY2xlYXJz
aXplKTsKLQotICAgICAgZWxzZSB7Ci0gICAgICAgICooZCswKSA9IDA7Ci0gICAgICAgICooZCsx
KSA9IDA7Ci0gICAgICAgICooZCsyKSA9IDA7Ci0gICAgICAgIGlmIChuY2xlYXJzID4gNCkgewot
ICAgICAgICAgICooZCszKSA9IDA7Ci0gICAgICAgICAgKihkKzQpID0gMDsKLSAgICAgICAgICBp
ZiAobmNsZWFycyA+IDYpIHsKLSAgICAgICAgICAgICooZCs1KSA9IDA7Ci0gICAgICAgICAgICAq
KGQrNikgPSAwOwotICAgICAgICAgICAgaWYgKG5jbGVhcnMgPiA4KSB7Ci0gICAgICAgICAgICAg
ICooZCs3KSA9IDA7Ci0gICAgICAgICAgICAgICooZCs4KSA9IDA7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotI2lmICEgTU1BUF9DTEVBUlMK
LSAgICBlbHNlCi0gICAgewotICAgICAgZCA9IChJTlRFUk5BTF9TSVpFX1QqKW1lbTsKLSAgICAg
IC8qCi0gICAgICAgIE5vdGUgdGhlIGFkZGl0aW9uYWwgU0laRV9TWgotICAgICAgKi8KLSAgICAg
IGNsZWFyc2l6ZSA9IGNodW5rc2l6ZShwKSAtIDIqU0laRV9TWjsKLSAgICAgIE1BTExPQ19aRVJP
KGQsIGNsZWFyc2l6ZSk7Ci0gICAgfQotI2VuZGlmCi0gIH0KLSAgcmV0dXJuIG1lbTsKLX0KLQot
LyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNmcmVlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmIF9fU1REX0MKLXZvaWQgY0ZSRWUoVm9pZF90ICpt
ZW0pCi0jZWxzZQotdm9pZCBjRlJFZShtZW0pIFZvaWRfdCAqbWVtOwotI2VuZGlmCi17Ci0gIGZS
RWUobWVtKTsKLX0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbmRlcGVuZGVu
dF9jYWxsb2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmIF9fU1REX0MKLVZv
aWRfdCoqIGlDQUxMT2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUsIFZvaWRf
dCogY2h1bmtzW10pCi0jZWxzZQotVm9pZF90KiogaUNBTExPYyhuX2VsZW1lbnRzLCBlbGVtX3Np
emUsIGNodW5rcykgc2l6ZV90IG5fZWxlbWVudHM7IHNpemVfdCBlbGVtX3NpemU7IFZvaWRfdCog
Y2h1bmtzW107Ci0jZW5kaWYKLXsKLSAgc2l6ZV90IHN6ID0gZWxlbV9zaXplOyAvKiBzZXJ2ZXMg
YXMgMS1lbGVtZW50IGFycmF5ICovCi0gIC8qIG9wdHMgYXJnIG9mIDMgbWVhbnMgYWxsIGVsZW1l
bnRzIGFyZSBzYW1lIHNpemUsIGFuZCBzaG91bGQgYmUgY2xlYXJlZCAqLwotICByZXR1cm4gaUFM
TE9jKG5fZWxlbWVudHMsICZzeiwgMywgY2h1bmtzKTsKLX0KLQotLyoKLSAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBpbmRlcGVuZGVudF9jb21hbGxvYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0qLwotCi0jaWYgX19TVERfQwotVm9pZF90KiogaUNPTUFMTE9jKHNpemVfdCBuX2VsZW1l
bnRzLCBzaXplX3Qgc2l6ZXNbXSwgVm9pZF90KiBjaHVua3NbXSkKLSNlbHNlCi1Wb2lkX3QqKiBp
Q09NQUxMT2Mobl9lbGVtZW50cywgc2l6ZXMsIGNodW5rcykgc2l6ZV90IG5fZWxlbWVudHM7IHNp
emVfdCBzaXplc1tdOyBWb2lkX3QqIGNodW5rc1tdOwotI2VuZGlmCi17Ci0gIHJldHVybiBpQUxM
T2Mobl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7Ci19Ci0KLQotLyoKLSAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlhbGxvYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgaWFsbG9jIHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0IGZvciBpbmRlcGVuZGVudF9YIHJv
dXRpbmVzLCBoYW5kbGluZyBhbGwgb2YKLSAgdGhlIGNvbWJpbmF0aW9ucyB0aGF0IGNhbiByZXN1
bHQuCi0KLSAgVGhlIG9wdHMgYXJnIGhhczoKLSAgICBiaXQgMCBzZXQgaWYgYWxsIGVsZW1lbnRz
IGFyZSBzYW1lIHNpemUgKHVzaW5nIHNpemVzWzBdKQotICAgIGJpdCAxIHNldCBpZiBlbGVtZW50
cyBzaG91bGQgYmUgemVyb2VkCi0qLwotCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMgVm9pZF90Kiog
aUFMTE9jKHNpemVfdCBuX2VsZW1lbnRzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
KiBzaXplcywgIAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0cywKLSAgICAgICAgICAg
ICAgICAgICAgICAgVm9pZF90KiBjaHVua3NbXSkKLSNlbHNlCi1zdGF0aWMgVm9pZF90KiogaUFM
TE9jKG5fZWxlbWVudHMsIHNpemVzLCBvcHRzLCBjaHVua3MpIHNpemVfdCBuX2VsZW1lbnRzOyBz
aXplX3QqIHNpemVzOyBpbnQgb3B0czsgVm9pZF90KiBjaHVua3NbXTsKLSNlbmRpZgotewotICBt
c3RhdGUgYXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0gIElOVEVSTkFMX1NJWkVfVCBlbGVtZW50
X3NpemU7ICAgLyogY2h1bmtzaXplIG9mIGVhY2ggZWxlbWVudCwgaWYgYWxsIHNhbWUgKi8KLSAg
SU5URVJOQUxfU0laRV9UIGNvbnRlbnRzX3NpemU7ICAvKiB0b3RhbCBzaXplIG9mIGVsZW1lbnRz
ICovCi0gIElOVEVSTkFMX1NJWkVfVCBhcnJheV9zaXplOyAgICAgLyogcmVxdWVzdCBzaXplIG9m
IHBvaW50ZXIgYXJyYXkgKi8KLSAgVm9pZF90KiAgICAgICAgIG1lbTsgICAgICAgICAgICAvKiBt
YWxsb2NlZCBhZ2dyZWdhdGUgc3BhY2UgKi8KLSAgbWNodW5rcHRyICAgICAgIHA7ICAgICAgICAg
ICAgICAvKiBjb3JyZXNwb25kaW5nIGNodW5rICovCi0gIElOVEVSTkFMX1NJWkVfVCByZW1haW5k
ZXJfc2l6ZTsgLyogcmVtYWluaW5nIGJ5dGVzIHdoaWxlIHNwbGl0dGluZyAqLwotICBWb2lkX3Qq
KiAgICAgICAgbWFycmF5OyAgICAgICAgIC8qIGVpdGhlciAiY2h1bmtzIiBvciBtYWxsb2NlZCBw
dHIgYXJyYXkgKi8KLSAgbWNodW5rcHRyICAgICAgIGFycmF5X2NodW5rOyAgICAvKiBjaHVuayBm
b3IgbWFsbG9jZWQgcHRyIGFycmF5ICovCi0gIGludCAgICAgICAgICAgICBtbXg7ICAgICAgICAg
ICAgLyogdG8gZGlzYWJsZSBtbWFwICovCi0gIElOVEVSTkFMX1NJWkVfVCBzaXplOyAgICAgICAg
ICAgCi0gIHNpemVfdCAgICAgICAgICBpOwotCi0gIC8qIEVuc3VyZSBpbml0aWFsaXphdGlvbiAq
LwotICBpZiAoYXYtPm1heF9mYXN0ID09IDApIG1hbGxvY19jb25zb2xpZGF0ZShhdik7Ci0KLSAg
LyogY29tcHV0ZSBhcnJheSBsZW5ndGgsIGlmIG5lZWRlZCAqLwotICBpZiAoY2h1bmtzICE9IDAp
IHsKLSAgICBpZiAobl9lbGVtZW50cyA9PSAwKQotICAgICAgcmV0dXJuIGNodW5rczsgLyogbm90
aGluZyB0byBkbyAqLwotICAgIG1hcnJheSA9IGNodW5rczsKLSAgICBhcnJheV9zaXplID0gMDsK
LSAgfQotICBlbHNlIHsKLSAgICAvKiBpZiBlbXB0eSByZXEsIG11c3Qgc3RpbGwgcmV0dXJuIGNo
dW5rIHJlcHJlc2VudGluZyBlbXB0eSBhcnJheSAqLwotICAgIGlmIChuX2VsZW1lbnRzID09IDAp
IAotICAgICAgcmV0dXJuIChWb2lkX3QqKikgbUFMTE9jKDApOwotICAgIG1hcnJheSA9IDA7Ci0g
ICAgYXJyYXlfc2l6ZSA9IHJlcXVlc3Qyc2l6ZShuX2VsZW1lbnRzICogKHNpemVvZihWb2lkX3Qq
KSkpOwotICB9Ci0KLSAgLyogY29tcHV0ZSB0b3RhbCBlbGVtZW50IHNpemUgKi8KLSAgaWYgKG9w
dHMgJiAweDEpIHsgLyogYWxsLXNhbWUtc2l6ZSAqLwotICAgIGVsZW1lbnRfc2l6ZSA9IHJlcXVl
c3Qyc2l6ZSgqc2l6ZXMpOwotICAgIGNvbnRlbnRzX3NpemUgPSBuX2VsZW1lbnRzICogZWxlbWVu
dF9zaXplOwotICB9Ci0gIGVsc2UgeyAvKiBhZGQgdXAgYWxsIHRoZSBzaXplcyAqLwotICAgIGVs
ZW1lbnRfc2l6ZSA9IDA7Ci0gICAgY29udGVudHNfc2l6ZSA9IDA7Ci0gICAgZm9yIChpID0gMDsg
aSAhPSBuX2VsZW1lbnRzOyArK2kpIAotICAgICAgY29udGVudHNfc2l6ZSArPSByZXF1ZXN0MnNp
emUoc2l6ZXNbaV0pOyAgICAgCi0gIH0KLQotICAvKiBzdWJ0cmFjdCBvdXQgYWxpZ25tZW50IGJ5
dGVzIGZyb20gdG90YWwgdG8gbWluaW1pemUgb3ZlcmFsbG9jYXRpb24gKi8KLSAgc2l6ZSA9IGNv
bnRlbnRzX3NpemUgKyBhcnJheV9zaXplIC0gTUFMTE9DX0FMSUdOX01BU0s7Ci0gIAotICAvKiAK
LSAgICAgQWxsb2NhdGUgdGhlIGFnZ3JlZ2F0ZSBjaHVuay4KLSAgICAgQnV0IGZpcnN0IGRpc2Fi
bGUgbW1hcCBzbyBtYWxsb2Mgd29uJ3QgdXNlIGl0LCBzaW5jZQotICAgICB3ZSB3b3VsZCBub3Qg
YmUgYWJsZSB0byBsYXRlciBmcmVlL3JlYWxsb2Mgc3BhY2UgaW50ZXJuYWwKLSAgICAgdG8gYSBz
ZWdyZWdhdGVkIG1tYXAgcmVnaW9uLgotICovCi0gIG1teCA9IGF2LT5uX21tYXBzX21heDsgICAv
KiBkaXNhYmxlIG1tYXAgKi8KLSAgYXYtPm5fbW1hcHNfbWF4ID0gMDsKLSAgbWVtID0gbUFMTE9j
KHNpemUpOwotICBhdi0+bl9tbWFwc19tYXggPSBtbXg7ICAgLyogcmVzZXQgbW1hcCAqLwotICBp
ZiAobWVtID09IDApIAotICAgIHJldHVybiAwOwotCi0gIHAgPSBtZW0yY2h1bmsobWVtKTsKLSAg
YXNzZXJ0KCFjaHVua19pc19tbWFwcGVkKHApKTsgCi0gIHJlbWFpbmRlcl9zaXplID0gY2h1bmtz
aXplKHApOwotCi0gIGlmIChvcHRzICYgMHgyKSB7ICAgICAgIC8qIG9wdGlvbmFsbHkgY2xlYXIg
dGhlIGVsZW1lbnRzICovCi0gICAgTUFMTE9DX1pFUk8obWVtLCByZW1haW5kZXJfc2l6ZSAtIFNJ
WkVfU1ogLSBhcnJheV9zaXplKTsKLSAgfQotCi0gIC8qIElmIG5vdCBwcm92aWRlZCwgYWxsb2Nh
dGUgdGhlIHBvaW50ZXIgYXJyYXkgYXMgZmluYWwgcGFydCBvZiBjaHVuayAqLwotICBpZiAobWFy
cmF5ID09IDApIHsKLSAgICBhcnJheV9jaHVuayA9IGNodW5rX2F0X29mZnNldChwLCBjb250ZW50
c19zaXplKTsKLSAgICBtYXJyYXkgPSAoVm9pZF90KiopIChjaHVuazJtZW0oYXJyYXlfY2h1bmsp
KTsKLSAgICBzZXRfaGVhZChhcnJheV9jaHVuaywgKHJlbWFpbmRlcl9zaXplIC0gY29udGVudHNf
c2l6ZSkgfCBQUkVWX0lOVVNFKTsKLSAgICByZW1haW5kZXJfc2l6ZSA9IGNvbnRlbnRzX3NpemU7
Ci0gIH0KLQotICAvKiBzcGxpdCBvdXQgZWxlbWVudHMgKi8KLSAgZm9yIChpID0gMDsgOyArK2kp
IHsKLSAgICBtYXJyYXlbaV0gPSBjaHVuazJtZW0ocCk7Ci0gICAgaWYgKGkgIT0gbl9lbGVtZW50
cy0xKSB7Ci0gICAgICBpZiAoZWxlbWVudF9zaXplICE9IDApIAotICAgICAgICBzaXplID0gZWxl
bWVudF9zaXplOwotICAgICAgZWxzZQotICAgICAgICBzaXplID0gcmVxdWVzdDJzaXplKHNpemVz
W2ldKTsgICAgICAgICAgCi0gICAgICByZW1haW5kZXJfc2l6ZSAtPSBzaXplOwotICAgICAgc2V0
X2hlYWQocCwgc2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgcCA9IGNodW5rX2F0X29mZnNldChw
LCBzaXplKTsKLSAgICB9Ci0gICAgZWxzZSB7IC8qIHRoZSBmaW5hbCBlbGVtZW50IGFic29yYnMg
YW55IG92ZXJhbGxvY2F0aW9uIHNsb3AgKi8KLSAgICAgIHNldF9oZWFkKHAsIHJlbWFpbmRlcl9z
aXplIHwgUFJFVl9JTlVTRSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotI2lmIERFQlVH
Ci0gIGlmIChtYXJyYXkgIT0gY2h1bmtzKSB7Ci0gICAgLyogZmluYWwgZWxlbWVudCBtdXN0IGhh
dmUgZXhhY3RseSBleGhhdXN0ZWQgY2h1bmsgKi8KLSAgICBpZiAoZWxlbWVudF9zaXplICE9IDAp
IAotICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IGVsZW1lbnRfc2l6ZSk7Ci0gICAgZWxz
ZQotICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSkp
OwotICAgIGNoZWNrX2ludXNlX2NodW5rKG1lbTJjaHVuayhtYXJyYXkpKTsKLSAgfQotCi0gIGZv
ciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQotICAgIGNoZWNrX2ludXNlX2NodW5rKG1l
bTJjaHVuayhtYXJyYXlbaV0pKTsKLSNlbmRpZgotCi0gIHJldHVybiBtYXJyYXk7Ci19Ci0KLQot
LyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHZhbGxvYyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpZiBfX1NURF9DCi1Wb2lkX3QqIHZBTExPYyhzaXpl
X3QgYnl0ZXMpCi0jZWxzZQotVm9pZF90KiB2QUxMT2MoYnl0ZXMpIHNpemVfdCBieXRlczsKLSNl
bmRpZgotewotICAvKiBFbnN1cmUgaW5pdGlhbGl6YXRpb24gKi8KLSAgbXN0YXRlIGF2ID0gZ2V0
X21hbGxvY19zdGF0ZSgpOwotICBpZiAoYXYtPm1heF9mYXN0ID09IDApIG1hbGxvY19jb25zb2xp
ZGF0ZShhdik7Ci0gIHJldHVybiBtRU1BTElHbihhdi0+cGFnZXNpemUsIGJ5dGVzKTsKLX0KLQot
LyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHB2YWxsb2MgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0KLSNpZiBfX1NURF9DCi1Wb2lkX3QqIHBWQUxMT2Mo
c2l6ZV90IGJ5dGVzKQotI2Vsc2UKLVZvaWRfdCogcFZBTExPYyhieXRlcykgc2l6ZV90IGJ5dGVz
OwotI2VuZGlmCi17Ci0gIG1zdGF0ZSBhdiA9IGdldF9tYWxsb2Nfc3RhdGUoKTsKLSAgc2l6ZV90
IHBhZ2VzejsKLQotICAvKiBFbnN1cmUgaW5pdGlhbGl6YXRpb24gKi8KLSAgaWYgKGF2LT5tYXhf
ZmFzdCA9PSAwKSBtYWxsb2NfY29uc29saWRhdGUoYXYpOwotICBwYWdlc3ogPSBhdi0+cGFnZXNp
emU7Ci0gIHJldHVybiBtRU1BTElHbihwYWdlc3osIChieXRlcyArIHBhZ2VzeiAtIDEpICYgfihw
YWdlc3ogLSAxKSk7Ci19Ci0gICAKLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIG1hbGxvY190cmltIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lm
IF9fU1REX0MKLWludCBtVFJJbShzaXplX3QgcGFkKQotI2Vsc2UKLWludCBtVFJJbShwYWQpIHNp
emVfdCBwYWQ7Ci0jZW5kaWYKLXsKLSAgbXN0YXRlIGF2ID0gZ2V0X21hbGxvY19zdGF0ZSgpOwot
ICAvKiBFbnN1cmUgaW5pdGlhbGl6YXRpb24vY29uc29saWRhdGlvbiAqLwotICBtYWxsb2NfY29u
c29saWRhdGUoYXYpOwotCi0jaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNICAgICAgICAKLSAg
cmV0dXJuIHNZU1RSSW0ocGFkLCBhdik7Ci0jZWxzZQotICByZXR1cm4gMDsKLSNlbmRpZgotfQot
Ci0KLS8qCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9jX3VzYWJsZV9zaXplIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpZiBfX1NURF9DCi1zaXplX3QgbVVTQUJM
ZShWb2lkX3QqIG1lbSkKLSNlbHNlCi1zaXplX3QgbVVTQUJMZShtZW0pIFZvaWRfdCogbWVtOwot
I2VuZGlmCi17Ci0gIG1jaHVua3B0ciBwOwotICBpZiAobWVtICE9IDApIHsKLSAgICBwID0gbWVt
MmNodW5rKG1lbSk7Ci0gICAgaWYgKGNodW5rX2lzX21tYXBwZWQocCkpCi0gICAgICByZXR1cm4g
Y2h1bmtzaXplKHApIC0gMipTSVpFX1NaOwotICAgIGVsc2UgaWYgKGludXNlKHApKQotICAgICAg
cmV0dXJuIGNodW5rc2l6ZShwKSAtIFNJWkVfU1o7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8q
Ci0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxsaW5mbyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLXN0cnVjdCBtYWxsaW5mbyBtQUxMSU5GbygpCi17Ci0g
IG1zdGF0ZSBhdiA9IGdldF9tYWxsb2Nfc3RhdGUoKTsKLSAgc3RydWN0IG1hbGxpbmZvIG1pOwot
ICB1bnNpZ25lZCBpbnQgaTsKLSAgbWJpbnB0ciBiOwotICBtY2h1bmtwdHIgcDsKLSAgSU5URVJO
QUxfU0laRV9UIGF2YWlsOwotICBJTlRFUk5BTF9TSVpFX1QgZmFzdGF2YWlsOwotICBpbnQgbmJs
b2NrczsKLSAgaW50IG5mYXN0YmxvY2tzOwotCi0gIC8qIEVuc3VyZSBpbml0aWFsaXphdGlvbiAq
LwotICBpZiAoYXYtPnRvcCA9PSAwKSAgbWFsbG9jX2NvbnNvbGlkYXRlKGF2KTsKLQotICBjaGVj
a19tYWxsb2Nfc3RhdGUoKTsKLQotICAvKiBBY2NvdW50IGZvciB0b3AgKi8KLSAgYXZhaWwgPSBj
aHVua3NpemUoYXYtPnRvcCk7Ci0gIG5ibG9ja3MgPSAxOyAgLyogdG9wIGFsd2F5cyBleGlzdHMg
Ki8KLQotICAvKiB0cmF2ZXJzZSBmYXN0YmlucyAqLwotICBuZmFzdGJsb2NrcyA9IDA7Ci0gIGZh
c3RhdmFpbCA9IDA7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE5GQVNUQklOUzsgKytpKSB7Ci0gICAg
Zm9yIChwID0gYXYtPmZhc3RiaW5zW2ldOyBwICE9IDA7IHAgPSBwLT5mZCkgewotICAgICAgKytu
ZmFzdGJsb2NrczsKLSAgICAgIGZhc3RhdmFpbCArPSBjaHVua3NpemUocCk7Ci0gICAgfQotICB9
Ci0KLSAgYXZhaWwgKz0gZmFzdGF2YWlsOwotCi0gIC8qIHRyYXZlcnNlIHJlZ3VsYXIgYmlucyAq
LwotICBmb3IgKGkgPSAxOyBpIDwgTkJJTlM7ICsraSkgewotICAgIGIgPSBiaW5fYXQoYXYsIGkp
OwotICAgIGZvciAocCA9IGxhc3QoYik7IHAgIT0gYjsgcCA9IHAtPmJrKSB7Ci0gICAgICArK25i
bG9ja3M7Ci0gICAgICBhdmFpbCArPSBjaHVua3NpemUocCk7Ci0gICAgfQotICB9Ci0KLSAgbWku
c21ibGtzID0gbmZhc3RibG9ja3M7Ci0gIG1pLm9yZGJsa3MgPSBuYmxvY2tzOwotICBtaS5mb3Jk
YmxrcyA9IGF2YWlsOwotICBtaS51b3JkYmxrcyA9IGF2LT5zYnJrZWRfbWVtIC0gYXZhaWw7Ci0g
IG1pLmFyZW5hID0gYXYtPnNicmtlZF9tZW07Ci0gIG1pLmhibGtzID0gYXYtPm5fbW1hcHM7Ci0g
IG1pLmhibGtoZCA9IGF2LT5tbWFwcGVkX21lbTsKLSAgbWkuZnNtYmxrcyA9IGZhc3RhdmFpbDsK
LSAgbWkua2VlcGNvc3QgPSBjaHVua3NpemUoYXYtPnRvcCk7Ci0gIG1pLnVzbWJsa3MgPSBhdi0+
bWF4X3RvdGFsX21lbTsKLSAgcmV0dXJuIG1pOwotfQotCi0vKgotICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gbWFsbG9jX3N0YXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotKi8KLQotdm9pZCBtU1RBVHMoKQotewotICBzdHJ1Y3QgbWFsbGluZm8gbWkgPSBtQUxMSU5G
bygpOwotCi0jaWZkZWYgV0lOMzIKLSAgewotICAgIENIVU5LX1NJWkVfVCAgZnJlZSwgcmVzZXJ2
ZWQsIGNvbW1pdHRlZDsKLSAgICB2bWluZm8gKCZmcmVlLCAmcmVzZXJ2ZWQsICZjb21taXR0ZWQp
OwotICAgIGZwcmludGYoc3RkZXJyLCAiZnJlZSBieXRlcyAgICAgICA9ICUxMGx1XG4iLCAKLSAg
ICAgICAgICAgIGZyZWUpOwotICAgIGZwcmludGYoc3RkZXJyLCAicmVzZXJ2ZWQgYnl0ZXMgICA9
ICUxMGx1XG4iLCAKLSAgICAgICAgICAgIHJlc2VydmVkKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwg
ImNvbW1pdHRlZCBieXRlcyAgPSAlMTBsdVxuIiwgCi0gICAgICAgICAgICBjb21taXR0ZWQpOwot
ICB9Ci0jZW5kaWYKLQotCi0gIGZwcmludGYoc3RkZXJyLCAibWF4IHN5c3RlbSBieXRlcyA9ICUx
MGx1XG4iLAotICAgICAgICAgIChDSFVOS19TSVpFX1QpKG1pLnVzbWJsa3MpKTsKLSAgZnByaW50
ZihzdGRlcnIsICJzeXN0ZW0gYnl0ZXMgICAgID0gJTEwbHVcbiIsCi0gICAgICAgICAgKENIVU5L
X1NJWkVfVCkobWkuYXJlbmEgKyBtaS5oYmxraGQpKTsKLSAgZnByaW50ZihzdGRlcnIsICJpbiB1
c2UgYnl0ZXMgICAgID0gJTEwbHVcbiIsCi0gICAgICAgICAgKENIVU5LX1NJWkVfVCkobWkudW9y
ZGJsa3MgKyBtaS5oYmxraGQpKTsKLQotI2lmZGVmIFdJTjMyIAotICB7Ci0gICAgQ0hVTktfU0la
RV9UICBrZXJuZWwsIHVzZXI7Ci0gICAgaWYgKGNwdWluZm8gKFRSVUUsICZrZXJuZWwsICZ1c2Vy
KSkgewotICAgICAgZnByaW50ZihzdGRlcnIsICJrZXJuZWwgbXMgICAgICAgID0gJTEwbHVcbiIs
IAotICAgICAgICAgICAgICBrZXJuZWwpOwotICAgICAgZnByaW50ZihzdGRlcnIsICJ1c2VyIG1z
ICAgICAgICAgID0gJTEwbHVcbiIsIAotICAgICAgICAgICAgICB1c2VyKTsKLSAgICB9Ci0gIH0K
LSNlbmRpZgotfQotCi0KLS8qCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxs
b3B0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmIF9fU1REX0MKLWlu
dCBtQUxMT1B0KGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkKLSNlbHNlCi1pbnQgbUFMTE9Q
dChwYXJhbV9udW1iZXIsIHZhbHVlKSBpbnQgcGFyYW1fbnVtYmVyOyBpbnQgdmFsdWU7Ci0jZW5k
aWYKLXsKLSAgbXN0YXRlIGF2ID0gZ2V0X21hbGxvY19zdGF0ZSgpOwotICAvKiBFbnN1cmUgaW5p
dGlhbGl6YXRpb24vY29uc29saWRhdGlvbiAqLwotICBtYWxsb2NfY29uc29saWRhdGUoYXYpOwot
Ci0gIHN3aXRjaChwYXJhbV9udW1iZXIpIHsKLSAgY2FzZSBNX01YRkFTVDoKLSAgICBpZiAodmFs
dWUgPj0gMCAmJiB2YWx1ZSA8PSBNQVhfRkFTVF9TSVpFKSB7Ci0gICAgICBzZXRfbWF4X2Zhc3Qo
YXYsIHZhbHVlKTsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1
cm4gMDsKLQotICBjYXNlIE1fVFJJTV9USFJFU0hPTEQ6Ci0gICAgYXYtPnRyaW1fdGhyZXNob2xk
ID0gdmFsdWU7Ci0gICAgcmV0dXJuIDE7Ci0KLSAgY2FzZSBNX1RPUF9QQUQ6Ci0gICAgYXYtPnRv
cF9wYWQgPSB2YWx1ZTsKLSAgICByZXR1cm4gMTsKLQotICBjYXNlIE1fTU1BUF9USFJFU0hPTEQ6
Ci0gICAgYXYtPm1tYXBfdGhyZXNob2xkID0gdmFsdWU7Ci0gICAgcmV0dXJuIDE7Ci0KLSAgY2Fz
ZSBNX01NQVBfTUFYOgotI2lmICFIQVZFX01NQVAKLSAgICBpZiAodmFsdWUgIT0gMCkKLSAgICAg
IHJldHVybiAwOwotI2VuZGlmCi0gICAgYXYtPm5fbW1hcHNfbWF4ID0gdmFsdWU7Ci0gICAgcmV0
dXJuIDE7Ci0KLSAgZGVmYXVsdDoKLSAgICByZXR1cm4gMDsKLSAgfQotfQotCi0KLS8qIAotICAt
LS0tLS0tLS0tLS0tLS0tLS0tLSBBbHRlcm5hdGl2ZSBNT1JFQ09SRSBmdW5jdGlvbnMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSovCi0KLQotLyoKLSAgR2VuZXJhbCBSZXF1aXJlbWVudHMgZm9yIE1P
UkVDT1JFLgotCi0gIFRoZSBNT1JFQ09SRSBmdW5jdGlvbiBtdXN0IGhhdmUgdGhlIGZvbGxvd2lu
ZyBwcm9wZXJ0aWVzOgotCi0gIElmIE1PUkVDT1JFX0NPTlRJR1VPVVMgaXMgZmFsc2U6Ci0KLSAg
ICAqIE1PUkVDT1JFIG11c3QgYWxsb2NhdGUgaW4gbXVsdGlwbGVzIG9mIHBhZ2VzaXplLiBJdCB3
aWxsCi0gICAgICBvbmx5IGJlIGNhbGxlZCB3aXRoIGFyZ3VtZW50cyB0aGF0IGFyZSBtdWx0aXBs
ZXMgb2YgcGFnZXNpemUuCi0KLSAgICAqIE1PUkVDT1JFKDApIG11c3QgcmV0dXJuIGFuIGFkZHJl
c3MgdGhhdCBpcyBhdCBsZWFzdCAKLSAgICAgIE1BTExPQ19BTElHTk1FTlQgYWxpZ25lZC4gKFBh
Z2UtYWxpZ25pbmcgYWx3YXlzIHN1ZmZpY2VzLikKLQotICBlbHNlIChpLmUuIElmIE1PUkVDT1JF
X0NPTlRJR1VPVVMgaXMgdHJ1ZSk6Ci0KLSAgICAqIENvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVD
T1JFIHdpdGggcG9zaXRpdmUgYXJndW1lbnRzCi0gICAgICByZXR1cm4gaW5jcmVhc2luZyBhZGRy
ZXNzZXMsIGluZGljYXRpbmcgdGhhdCBzcGFjZSBoYXMgYmVlbgotICAgICAgY29udGlndW91c2x5
IGV4dGVuZGVkLiAKLQotICAgICogTU9SRUNPUkUgbmVlZCBub3QgYWxsb2NhdGUgaW4gbXVsdGlw
bGVzIG9mIHBhZ2VzaXplLgotICAgICAgQ2FsbHMgdG8gTU9SRUNPUkUgbmVlZCBub3QgaGF2ZSBh
cmdzIG9mIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4KLQotICAgICogTU9SRUNPUkUgbmVlZCBub3Qg
cGFnZS1hbGlnbi4KLQotICBJbiBlaXRoZXIgY2FzZToKLQotICAgICogTU9SRUNPUkUgbWF5IGFs
bG9jYXRlIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkLiAoT3IgZXZlbiBsZXNzLAotICAgICAg
YnV0IHRoaXMgd2lsbCBnZW5lcmFsbHkgcmVzdWx0IGluIGEgbWFsbG9jIGZhaWx1cmUuKQotCi0g
ICAgKiBNT1JFQ09SRSBtdXN0IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2hlbiBnaXZlbiBhcmd1bWVu
dCB6ZXJvLCBidXQKLSAgICAgIGluc3RlYWQgcmV0dXJuIG9uZSBwYXN0IHRoZSBlbmQgYWRkcmVz
cyBvZiBtZW1vcnkgZnJvbSBwcmV2aW91cwotICAgICAgbm9uemVybyBjYWxsLiBUaGlzIG1hbGxv
YyBkb2VzIE5PVCBjYWxsIE1PUkVDT1JFKDApCi0gICAgICB1bnRpbCBhdCBsZWFzdCBvbmUgY2Fs
bCB3aXRoIHBvc2l0aXZlIGFyZ3VtZW50cyBpcyBtYWRlLCBzbwotICAgICAgdGhlIGluaXRpYWwg
dmFsdWUgcmV0dXJuZWQgaXMgbm90IGltcG9ydGFudC4KLQotICAgICogRXZlbiB0aG91Z2ggY29u
c2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgbmVlZCBub3QgcmV0dXJuIGNvbnRpZ3VvdXMKLSAg
ICAgIGFkZHJlc3NlcywgaXQgbXVzdCBiZSBPSyBmb3IgbWFsbG9jJ2VkIGNodW5rcyB0byBzcGFu
IG11bHRpcGxlCi0gICAgICByZWdpb25zIGluIHRob3NlIGNhc2VzIHdoZXJlIHRoZXkgZG8gaGFw
cGVuIHRvIGJlIGNvbnRpZ3VvdXMuCi0KLSAgICAqIE1PUkVDT1JFIG5lZWQgbm90IGhhbmRsZSBu
ZWdhdGl2ZSBhcmd1bWVudHMgLS0gaXQgbWF5IGluc3RlYWQKLSAgICAgIGp1c3QgcmV0dXJuIE1P
UkVDT1JFX0ZBSUxVUkUgd2hlbiBnaXZlbiBuZWdhdGl2ZSBhcmd1bWVudHMuCi0gICAgICBOZWdh
dGl2ZSBhcmd1bWVudHMgYXJlIGFsd2F5cyBtdWx0aXBsZXMgb2YgcGFnZXNpemUuIE1PUkVDT1JF
Ci0gICAgICBtdXN0IG5vdCBtaXNpbnRlcnByZXQgbmVnYXRpdmUgYXJncyBhcyBsYXJnZSBwb3Np
dGl2ZSB1bnNpZ25lZAotICAgICAgYXJncy4gWW91IGNhbiBzdXBwcmVzcyBhbGwgc3VjaCBjYWxs
cyBmcm9tIGV2ZW4gb2NjdXJyaW5nIGJ5IGRlZmluaW5nCi0gICAgICBNT1JFQ09SRV9DQU5OT1Rf
VFJJTSwKLQotICBUaGVyZSBpcyBzb21lIHZhcmlhdGlvbiBhY3Jvc3Mgc3lzdGVtcyBhYm91dCB0
aGUgdHlwZSBvZiB0aGUKLSAgYXJndW1lbnQgdG8gc2Jyay9NT1JFQ09SRS4gSWYgc2l6ZV90IGlz
IHVuc2lnbmVkLCB0aGVuIGl0IGNhbm5vdAotICBhY3R1YWxseSBiZSBzaXplX3QsIGJlY2F1c2Ug
c2JyayBzdXBwb3J0cyBuZWdhdGl2ZSBhcmdzLCBzbyBpdCBpcwotICBub3JtYWxseSB0aGUgc2ln
bmVkIHR5cGUgb2YgdGhlIHNhbWUgd2lkdGggYXMgc2l6ZV90IChzb21ldGltZXMKLSAgZGVjbGFy
ZWQgYXMgImludHB0cl90IiwgYW5kIHNvbWV0aW1lcyAicHRyZGlmZl90IikuICBJdCBkb2Vzbid0
IG11Y2gKLSAgbWF0dGVyIHRob3VnaC4gSW50ZXJuYWxseSwgd2UgdXNlICJsb25nIiBhcyBhcmd1
bWVudHMsIHdoaWNoIHNob3VsZAotICB3b3JrIGFjcm9zcyBhbGwgcmVhc29uYWJsZSBwb3NzaWJp
bGl0aWVzLgotCi0gIEFkZGl0aW9uYWxseSwgaWYgTU9SRUNPUkUgZXZlciByZXR1cm5zIGZhaWx1
cmUgZm9yIGEgcG9zaXRpdmUKLSAgcmVxdWVzdCwgYW5kIEhBVkVfTU1BUCBpcyB0cnVlLCB0aGVu
IG1tYXAgaXMgdXNlZCBhcyBhIG5vbmNvbnRpZ3VvdXMKLSAgc3lzdGVtIGFsbG9jYXRvci4gVGhp
cyBpcyBhIHVzZWZ1bCBiYWNrdXAgc3RyYXRlZ3kgZm9yIHN5c3RlbXMgd2l0aAotICBob2xlcyBp
biBhZGRyZXNzIHNwYWNlcyAtLSBpbiB0aGlzIGNhc2Ugc2JyayBjYW5ub3QgY29udGlndW91c2x5
Ci0gIGV4cGFuZCB0aGUgaGVhcCwgYnV0IG1tYXAgbWF5IGJlIGFibGUgdG8gbWFwIG5vbmNvbnRp
Z3VvdXMgc3BhY2UuCi0KLSAgSWYgeW91J2QgbGlrZSBtbWFwIHRvIEFMV0FZUyBiZSB1c2VkLCB5
b3UgY2FuIGRlZmluZSBNT1JFQ09SRSB0byBiZQotICBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJl
dHVybnMgTU9SRUNPUkVfRkFJTFVSRS4KLQotICBNYWxsb2Mgb25seSBoYXMgbGltaXRlZCBhYmls
aXR5IHRvIGRldGVjdCBmYWlsdXJlcyBvZiBNT1JFQ09SRQotICB0byBzdXBwbHkgY29udGlndW91
cyBzcGFjZSB3aGVuIGl0IHNheXMgaXQgY2FuLiBJbiBwYXJ0aWN1bGFyLAotICBtdWx0aXRocmVh
ZGVkIHByb2dyYW1zIHRoYXQgZG8gbm90IHVzZSBsb2NrcyBtYXkgcmVzdWx0IGluCi0gIHJlY2Ug
Y29uZGl0aW9ucyBhY3Jvc3MgY2FsbHMgdG8gTU9SRUNPUkUgdGhhdCByZXN1bHQgaW4gZ2Fwcwot
ICB0aGF0IGNhbm5vdCBiZSBkZXRlY3RlZCBhcyBzdWNoLCBhbmQgc3Vic2VxdWVudCBjb3JydXB0
aW9uLgotCi0gIElmIHlvdSBhcmUgdXNpbmcgdGhpcyBtYWxsb2Mgd2l0aCBzb21ldGhpbmcgb3Ro
ZXIgdGhhbiBzYnJrIChvciBpdHMKLSAgZW11bGF0aW9uKSB0byBzdXBwbHkgbWVtb3J5IHJlZ2lv
bnMsIHlvdSBwcm9iYWJseSB3YW50IHRvIHNldAotICBNT1JFQ09SRV9DT05USUdVT1VTIGFzIGZh
bHNlLiAgQXMgYW4gZXhhbXBsZSwgaGVyZSBpcyBhIGN1c3RvbQotICBhbGxvY2F0b3Iga2luZGx5
IGNvbnRyaWJ1dGVkIGZvciBwcmUtT1NYIG1hY09TLiAgSXQgdXNlcyB2aXJ0dWFsbHkKLSAgYnV0
IG5vdCBuZWNlc3NhcmlseSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbm9uLXBhZ2VkIG1lbW9yeSAo
bG9ja2VkCi0gIGluLCBwcmVzZW50IGFuZCB3b24ndCBnZXQgc3dhcHBlZCBvdXQpLiAgWW91IGNh
biB1c2UgaXQgYnkKLSAgdW5jb21tZW50aW5nIHRoaXMgc2VjdGlvbiwgYWRkaW5nIHNvbWUgI2lu
Y2x1ZGVzLCBhbmQgc2V0dGluZyB1cCB0aGUKLSAgYXBwcm9wcmlhdGUgZGVmaW5lcyBhYm92ZToK
LQotICAgICAgI2RlZmluZSBNT1JFQ09SRSBvc01vcmVDb3JlCi0gICAgICAjZGVmaW5lIE1PUkVD
T1JFX0NPTlRJR1VPVVMgMAotCi0gIFRoZXJlIGlzIGFsc28gYSBzaHV0ZG93biByb3V0aW5lIHRo
YXQgc2hvdWxkIHNvbWVob3cgYmUgY2FsbGVkIGZvcgotICBjbGVhbnVwIHVwb24gcHJvZ3JhbSBl
eGl0LgotCi0gICNkZWZpbmUgTUFYX1BPT0xfRU5UUklFUyAxMDAKLSAgI2RlZmluZSBNSU5JTVVN
X01PUkVDT1JFX1NJWkUgICg2NCAqIDEwMjQpCi0gIHN0YXRpYyBpbnQgbmV4dF9vc19wb29sOwot
ICB2b2lkICpvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107Ci0KLSAgdm9pZCAqb3NNb3Jl
Q29yZShpbnQgc2l6ZSkKLSAgewotICAgIHZvaWQgKnB0ciA9IDA7Ci0gICAgc3RhdGljIHZvaWQg
KnNicmtfdG9wID0gMDsKLQotICAgIGlmIChzaXplID4gMCkKLSAgICB7Ci0gICAgICBpZiAoc2l6
ZSA8IE1JTklNVU1fTU9SRUNPUkVfU0laRSkKLSAgICAgICAgIHNpemUgPSBNSU5JTVVNX01PUkVD
T1JFX1NJWkU7Ci0gICAgICBpZiAoQ3VycmVudEV4ZWN1dGlvbkxldmVsKCkgPT0ga1Rhc2tMZXZl
bCkKLSAgICAgICAgIHB0ciA9IFBvb2xBbGxvY2F0ZVJlc2lkZW50KHNpemUgKyBSTV9QQUdFX1NJ
WkUsIDApOwotICAgICAgaWYgKHB0ciA9PSAwKQotICAgICAgewotICAgICAgICByZXR1cm4gKHZv
aWQgKikgTU9SRUNPUkVfRkFJTFVSRTsKLSAgICAgIH0KLSAgICAgIC8vIHNhdmUgcHRycyBzbyB0
aGV5IGNhbiBiZSBmcmVlZCBkdXJpbmcgY2xlYW51cAotICAgICAgb3VyX29zX3Bvb2xzW25leHRf
b3NfcG9vbF0gPSBwdHI7Ci0gICAgICBuZXh0X29zX3Bvb2wrKzsKLSAgICAgIHB0ciA9ICh2b2lk
ICopICgoKChDSFVOS19TSVpFX1QpIHB0cikgKyBSTV9QQUdFX01BU0spICYgflJNX1BBR0VfTUFT
Syk7Ci0gICAgICBzYnJrX3RvcCA9IChjaGFyICopIHB0ciArIHNpemU7Ci0gICAgICByZXR1cm4g
cHRyOwotICAgIH0KLSAgICBlbHNlIGlmIChzaXplIDwgMCkKLSAgICB7Ci0gICAgICAvLyB3ZSBk
b24ndCBjdXJyZW50bHkgc3VwcG9ydCBzaHJpbmsgYmVoYXZpb3IKLSAgICAgIHJldHVybiAodm9p
ZCAqKSBNT1JFQ09SRV9GQUlMVVJFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0
dXJuIHNicmtfdG9wOwotICAgIH0KLSAgfQotCi0gIC8vIGNsZWFudXAgYW55IGFsbG9jYXRlZCBt
ZW1vcnkgcG9vbHMKLSAgLy8gY2FsbGVkIGFzIGxhc3QgdGhpbmcgYmVmb3JlIHNodXR0aW5nIGRv
d24gZHJpdmVyCi0KLSAgdm9pZCBvc0NsZWFudXBNZW0odm9pZCkKLSAgewotICAgIHZvaWQgKipw
dHI7Ci0KLSAgICBmb3IgKHB0ciA9IG91cl9vc19wb29sczsgcHRyIDwgJm91cl9vc19wb29sc1tN
QVhfUE9PTF9FTlRSSUVTXTsgcHRyKyspCi0gICAgICBpZiAoKnB0cikKLSAgICAgIHsKLSAgICAg
ICAgIFBvb2xEZWFsbG9jYXRlKCpwdHIpOwotICAgICAgICAgKnB0ciA9IDA7Ci0gICAgICB9Ci0g
IH0KLQotKi8KLQotCi0vKiAKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0KLSAgRW11bGF0aW9uIG9mIHNicmsgZm9yIHdp
bjMyLiAKLSAgRG9uYXRlZCBieSBKLiBXYWx0ZXIgPFdhbHRlckBHZU5lU3lzLWUuZGU+LgotICBG
b3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvZGUsIGFuZCBtYWxsb2Mgb24g
V2luMzIsIHNlZSAKLSAgICAgaHR0cDovL3d3dy5nZW5lc3lzLWUuZGUvandhbHRlci8KLSovCi0K
LQotI2lmZGVmIFdJTjMyCi0KLSNpZmRlZiBfREVCVUcKLS8qICNkZWZpbmUgVFJBQ0UgKi8KLSNl
bmRpZgotCi0vKiBTdXBwb3J0IGZvciBVU0VfTUFMTE9DX0xPQ0sgKi8KLSNpZmRlZiBVU0VfTUFM
TE9DX0xPQ0sKLQotLyogV2FpdCBmb3Igc3BpbiBsb2NrICovCi1zdGF0aWMgaW50IHNsd2FpdCAo
aW50ICpzbCkgewotICAgIHdoaWxlIChJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSAoKHZvaWQg
KiopIHNsLCAodm9pZCAqKSAxLCAodm9pZCAqKSAwKSAhPSAwKSAKLQkgICAgU2xlZXAgKDApOwot
ICAgIHJldHVybiAwOwotfQotCi0vKiBSZWxlYXNlIHNwaW4gbG9jayAqLwotc3RhdGljIGludCBz
bHJlbGVhc2UgKGludCAqc2wpIHsKLSAgICBJbnRlcmxvY2tlZEV4Y2hhbmdlIChzbCwgMCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBORUVERUQKLS8qIFNwaW4gbG9jayBmb3IgZW11bGF0
aW9uIGNvZGUgKi8KLXN0YXRpYyBpbnQgZ19zbDsKLSNlbmRpZgotCi0jZW5kaWYgLyogVVNFX01B
TExPQ19MT0NLICovCi0KLS8qIGdldHBhZ2VzaXplIGZvciB3aW5kb3dzICovCi1zdGF0aWMgbG9u
ZyBnZXRwYWdlc2l6ZSAodm9pZCkgewotICAgIHN0YXRpYyBsb25nIGdfcGFnZXNpemUgPSAwOwot
ICAgIGlmICghIGdfcGFnZXNpemUpIHsKLSAgICAgICAgU1lTVEVNX0lORk8gc3lzdGVtX2luZm87
Ci0gICAgICAgIEdldFN5c3RlbUluZm8gKCZzeXN0ZW1faW5mbyk7Ci0gICAgICAgIGdfcGFnZXNp
emUgPSBzeXN0ZW1faW5mby5kd1BhZ2VTaXplOwotICAgIH0KLSAgICByZXR1cm4gZ19wYWdlc2l6
ZTsKLX0KLXN0YXRpYyBsb25nIGdldHJlZ2lvbnNpemUgKHZvaWQpIHsKLSAgICBzdGF0aWMgbG9u
ZyBnX3JlZ2lvbnNpemUgPSAwOwotICAgIGlmICghIGdfcmVnaW9uc2l6ZSkgewotICAgICAgICBT
WVNURU1fSU5GTyBzeXN0ZW1faW5mbzsKLSAgICAgICAgR2V0U3lzdGVtSW5mbyAoJnN5c3RlbV9p
bmZvKTsKLSAgICAgICAgZ19yZWdpb25zaXplID0gc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3Jh
bnVsYXJpdHk7Ci0gICAgfQotICAgIHJldHVybiBnX3JlZ2lvbnNpemU7Ci19Ci0KLS8qIEEgcmVn
aW9uIGxpc3QgZW50cnkgKi8KLXR5cGVkZWYgc3RydWN0IF9yZWdpb25fbGlzdF9lbnRyeSB7Ci0g
ICAgdm9pZCAqdG9wX2FsbG9jYXRlZDsKLSAgICB2b2lkICp0b3BfY29tbWl0dGVkOwotICAgIHZv
aWQgKnRvcF9yZXNlcnZlZDsKLSAgICBsb25nIHJlc2VydmVfc2l6ZTsKLSAgICBzdHJ1Y3QgX3Jl
Z2lvbl9saXN0X2VudHJ5ICpwcmV2aW91czsKLX0gcmVnaW9uX2xpc3RfZW50cnk7Ci0KLS8qIEFs
bG9jYXRlIGFuZCBsaW5rIGEgcmVnaW9uIGVudHJ5IGluIHRoZSByZWdpb24gbGlzdCAqLwotc3Rh
dGljIGludCByZWdpb25fbGlzdF9hcHBlbmQgKHJlZ2lvbl9saXN0X2VudHJ5ICoqbGFzdCwgdm9p
ZCAqYmFzZV9yZXNlcnZlZCwgbG9uZyByZXNlcnZlX3NpemUpIHsKLSAgICByZWdpb25fbGlzdF9l
bnRyeSAqbmV4dCA9IChyZWdpb25fbGlzdF9lbnRyeSAqKSBIZWFwQWxsb2MgKEdldFByb2Nlc3NI
ZWFwICgpLCAwLCBzaXplb2YgKHJlZ2lvbl9saXN0X2VudHJ5KSk7Ci0gICAgaWYgKCEgbmV4dCkK
LSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIG5leHQtPnRvcF9hbGxvY2F0ZWQgPSAoY2hhciAq
KSBiYXNlX3Jlc2VydmVkOwotICAgIG5leHQtPnRvcF9jb21taXR0ZWQgPSAoY2hhciAqKSBiYXNl
X3Jlc2VydmVkOwotICAgIG5leHQtPnRvcF9yZXNlcnZlZCA9IChjaGFyICopIGJhc2VfcmVzZXJ2
ZWQgKyByZXNlcnZlX3NpemU7Ci0gICAgbmV4dC0+cmVzZXJ2ZV9zaXplID0gcmVzZXJ2ZV9zaXpl
OwotICAgIG5leHQtPnByZXZpb3VzID0gKmxhc3Q7Ci0gICAgKmxhc3QgPSBuZXh0OwotICAgIHJl
dHVybiBUUlVFOwotfQotLyogRnJlZSBhbmQgdW5saW5rIHRoZSBsYXN0IHJlZ2lvbiBlbnRyeSBm
cm9tIHRoZSByZWdpb24gbGlzdCAqLwotc3RhdGljIGludCByZWdpb25fbGlzdF9yZW1vdmUgKHJl
Z2lvbl9saXN0X2VudHJ5ICoqbGFzdCkgewotICAgIHJlZ2lvbl9saXN0X2VudHJ5ICpwcmV2aW91
cyA9ICgqbGFzdCktPnByZXZpb3VzOwotICAgIGlmICghIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVh
cCAoKSwgc2l6ZW9mIChyZWdpb25fbGlzdF9lbnRyeSksICpsYXN0KSkKLSAgICAgICAgcmV0dXJu
IEZBTFNFOwotICAgICpsYXN0ID0gcHJldmlvdXM7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLSNk
ZWZpbmUgQ0VJTChzaXplLHRvKQkoKChzaXplKSsodG8pLTEpJn4oKHRvKS0xKSkKLSNkZWZpbmUg
RkxPT1Ioc2l6ZSx0bykJKChzaXplKSZ+KCh0byktMSkpCi0KLSNkZWZpbmUgU0JSS19TQ0FMRSAg
MAotLyogI2RlZmluZSBTQlJLX1NDQUxFICAxICovCi0vKiAjZGVmaW5lIFNCUktfU0NBTEUgIDIg
Ki8KLS8qICNkZWZpbmUgU0JSS19TQ0FMRSAgNCAgKi8KLQotLyogc2JyayBmb3Igd2luZG93cyAq
Lwotc3RhdGljIHZvaWQgKnNicmsgKHB0cmRpZmZfdCBzaXplKSB7Ci0gICAgc3RhdGljIGxvbmcg
Z19wYWdlc2l6ZSwgZ19teV9wYWdlc2l6ZTsKLSAgICBzdGF0aWMgbG9uZyBnX3JlZ2lvbnNpemUs
IGdfbXlfcmVnaW9uc2l6ZTsKLSAgICBzdGF0aWMgcmVnaW9uX2xpc3RfZW50cnkgKmdfbGFzdDsK
LSAgICB2b2lkICpyZXN1bHQgPSAodm9pZCAqKSBNT1JFQ09SRV9GQUlMVVJFOwotI2lmZGVmIFRS
QUNFCi0gICAgcHJpbnRmICgic2JyayAlbGRcbiIsIChsb25nKSBzaXplKTsKLSNlbmRpZgotI2lm
IGRlZmluZWQgKFVTRV9NQUxMT0NfTE9DSykgJiYgZGVmaW5lZCAoTkVFREVEKQotICAgIC8qIFdh
aXQgZm9yIHNwaW4gbG9jayAqLwotICAgIHNsd2FpdCAoJmdfc2wpOwotI2VuZGlmCi0gICAgLyog
Rmlyc3QgdGltZSBpbml0aWFsaXphdGlvbiAqLwotICAgIGlmICghIGdfcGFnZXNpemUpIHsKLSAg
ICAgICAgZ19wYWdlc2l6ZSA9IGdldHBhZ2VzaXplICgpOwotICAgICAgICBnX215X3BhZ2VzaXpl
ID0gZ19wYWdlc2l6ZSA8PCBTQlJLX1NDQUxFOwotICAgIH0KLSAgICBpZiAoISBnX3JlZ2lvbnNp
emUpIHsKLSAgICAgICAgZ19yZWdpb25zaXplID0gZ2V0cmVnaW9uc2l6ZSAoKTsKLSAgICAgICAg
Z19teV9yZWdpb25zaXplID0gZ19yZWdpb25zaXplIDw8IFNCUktfU0NBTEU7Ci0gICAgfQotICAg
IGlmICghIGdfbGFzdCkgewotICAgICAgICBpZiAoISByZWdpb25fbGlzdF9hcHBlbmQgKCZnX2xh
c3QsIDAsIDApKSAKLSAgICAgICAgICAgZ290byBzYnJrX2V4aXQ7Ci0gICAgfQotICAgIC8qIEFz
c2VydCBpbnZhcmlhbnRzICovCi0gICAgYXNzZXJ0IChnX2xhc3QpOwotICAgIGFzc2VydCAoKGNo
YXIgKikgZ19sYXN0LT50b3BfcmVzZXJ2ZWQgLSBnX2xhc3QtPnJlc2VydmVfc2l6ZSA8PSAoY2hh
ciAqKSBnX2xhc3QtPnRvcF9hbGxvY2F0ZWQgJiYKLSAgICAgICAgICAgIGdfbGFzdC0+dG9wX2Fs
bG9jYXRlZCA8PSBnX2xhc3QtPnRvcF9jb21taXR0ZWQpOwotICAgIGFzc2VydCAoKGNoYXIgKikg
Z19sYXN0LT50b3BfcmVzZXJ2ZWQgLSBnX2xhc3QtPnJlc2VydmVfc2l6ZSA8PSAoY2hhciAqKSBn
X2xhc3QtPnRvcF9jb21taXR0ZWQgJiYKLSAgICAgICAgICAgIGdfbGFzdC0+dG9wX2NvbW1pdHRl
ZCA8PSBnX2xhc3QtPnRvcF9yZXNlcnZlZCAmJgotICAgICAgICAgICAgKHVuc2lnbmVkKSBnX2xh
c3QtPnRvcF9jb21taXR0ZWQgJSBnX3BhZ2VzaXplID09IDApOwotICAgIGFzc2VydCAoKHVuc2ln
bmVkKSBnX2xhc3QtPnRvcF9yZXNlcnZlZCAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLSAgICBhc3Nl
cnQgKCh1bnNpZ25lZCkgZ19sYXN0LT5yZXNlcnZlX3NpemUgJSBnX3JlZ2lvbnNpemUgPT0gMCk7
Ci0gICAgLyogQWxsb2NhdGlvbiByZXF1ZXN0ZWQ/ICovCi0gICAgaWYgKHNpemUgPj0gMCkgewot
ICAgICAgICAvKiBBbGxvY2F0aW9uIHNpemUgaXMgdGhlIHJlcXVlc3RlZCBzaXplICovCi0gICAg
ICAgIGxvbmcgYWxsb2NhdGVfc2l6ZSA9IHNpemU7Ci0gICAgICAgIC8qIENvbXB1dGUgdGhlIHNp
emUgdG8gY29tbWl0ICovCi0gICAgICAgIGxvbmcgdG9fY29tbWl0ID0gKGNoYXIgKikgZ19sYXN0
LT50b3BfYWxsb2NhdGVkICsgYWxsb2NhdGVfc2l6ZSAtIChjaGFyICopIGdfbGFzdC0+dG9wX2Nv
bW1pdHRlZDsKLSAgICAgICAgLyogRG8gd2UgcmVhY2ggdGhlIGNvbW1pdCBsaW1pdD8gKi8KLSAg
ICAgICAgaWYgKHRvX2NvbW1pdCA+IDApIHsKLSAgICAgICAgICAgIC8qIFJvdW5kIHNpemUgdG8g
Y29tbWl0ICovCi0gICAgICAgICAgICBsb25nIGNvbW1pdF9zaXplID0gQ0VJTCAodG9fY29tbWl0
LCBnX215X3BhZ2VzaXplKTsKLSAgICAgICAgICAgIC8qIENvbXB1dGUgdGhlIHNpemUgdG8gcmVz
ZXJ2ZSAqLwotICAgICAgICAgICAgbG9uZyB0b19yZXNlcnZlID0gKGNoYXIgKikgZ19sYXN0LT50
b3BfY29tbWl0dGVkICsgY29tbWl0X3NpemUgLSAoY2hhciAqKSBnX2xhc3QtPnRvcF9yZXNlcnZl
ZDsKLSAgICAgICAgICAgIC8qIERvIHdlIHJlYWNoIHRoZSByZXNlcnZlIGxpbWl0PyAqLwotICAg
ICAgICAgICAgaWYgKHRvX3Jlc2VydmUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgLyogQ29tcHV0
ZSB0aGUgcmVtYWluaW5nIHNpemUgdG8gY29tbWl0IGluIHRoZSBjdXJyZW50IHJlZ2lvbiAqLwot
ICAgICAgICAgICAgICAgIGxvbmcgcmVtYWluaW5nX2NvbW1pdF9zaXplID0gKGNoYXIgKikgZ19s
YXN0LT50b3BfcmVzZXJ2ZWQgLSAoY2hhciAqKSBnX2xhc3QtPnRvcF9jb21taXR0ZWQ7Ci0gICAg
ICAgICAgICAgICAgaWYgKHJlbWFpbmluZ19jb21taXRfc2l6ZSA+IDApIHsKLSAgICAgICAgICAg
ICAgICAgICAgLyogQXNzZXJ0IHByZWNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0ICgodW5zaWduZWQpIGdfbGFzdC0+dG9wX2NvbW1pdHRlZCAlIGdfcGFnZXNpemUgPT0g
MCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCAoMCA8IHJlbWFpbmluZ19jb21taXRfc2l6
ZSAmJiByZW1haW5pbmdfY29tbWl0X3NpemUgJSBnX3BhZ2VzaXplID09IDApOyB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvKiBDb21taXQgdGhpcyAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqYmFzZV9jb21taXR0ZWQgPSBWaXJ0dWFsQWxsb2MgKGdfbGFzdC0+dG9wX2NvbW1p
dHRlZCwgcmVtYWluaW5nX2NvbW1pdF9zaXplLAotCQkJCQkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1FTV9DT01NSVQsIFBBR0VfUkVBRFdSSVRFKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIENoZWNrIHJldHVybmVkIHBvaW50ZXIgZm9yIGNvbnNpc3RlbmN5ICovCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZV9jb21taXR0ZWQgIT0gZ19sYXN0LT50b3Bf
Y29tbWl0dGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc2Jya19leGl0Owot
ICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzZXJ0IHBvc3Rjb25kaXRpb25zICovCi0gICAg
ICAgICAgICAgICAgICAgICAgICBhc3NlcnQgKCh1bnNpZ25lZCkgYmFzZV9jb21taXR0ZWQgJSBn
X3BhZ2VzaXplID09IDApOwotI2lmZGVmIFRSQUNFCi0gICAgICAgICAgICAgICAgICAgICAgICBw
cmludGYgKCJDb21taXQgJXAgJWRcbiIsIGJhc2VfY29tbWl0dGVkLCByZW1haW5pbmdfY29tbWl0
X3NpemUpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBBZGp1c3QgdGhlIHJl
Z2lvbnMgY29tbWl0IHRvcCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZ19sYXN0LT50b3Bf
Y29tbWl0dGVkID0gKGNoYXIgKikgYmFzZV9jb21taXR0ZWQgKyByZW1haW5pbmdfY29tbWl0X3Np
emU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IHsKLSAgICAgICAg
ICAgICAgICAgICAgLyogTm93IHdlIGFyZSBnb2luZyB0byBzZWFyY2ggYW5kIHJlc2VydmUuICov
Ci0gICAgICAgICAgICAgICAgICAgIGludCBjb250aWd1b3VzID0gLTE7Ci0gICAgICAgICAgICAg
ICAgICAgIGludCBmb3VuZCA9IEZBTFNFOwotICAgICAgICAgICAgICAgICAgICBNRU1PUllfQkFT
SUNfSU5GT1JNQVRJT04gbWVtb3J5X2luZm87Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQgKmJh
c2VfcmVzZXJ2ZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGxvbmcgcmVzZXJ2ZV9zaXplOwotICAg
ICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUg
Y29udGlndW91cyBtZW1vcnkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpZ3VvdXMg
PSBUUlVFOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogUm91bmQgc2l6ZSB0byByZXNlcnZl
ICovCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlX3NpemUgPSBDRUlMICh0b19yZXNl
cnZlLCBnX215X3JlZ2lvbnNpemUpOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQg
d2l0aCB0aGUgY3VycmVudCByZWdpb24ncyB0b3AgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg
IG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNzID0gZ19sYXN0LT50b3BfcmVzZXJ2ZWQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwotICAgICAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0ICgodW5zaWduZWQpIG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNzICUg
Z19wYWdlc2l6ZSA9PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCAoMCA8IHJl
c2VydmVfc2l6ZSAmJiByZXNlcnZlX3NpemUgJSBnX3JlZ2lvbnNpemUgPT0gMCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoVmlydHVhbFF1ZXJ5IChtZW1vcnlfaW5mby5CYXNlQWRk
cmVzcywgJm1lbW9yeV9pbmZvLCBzaXplb2YgKG1lbW9yeV9pbmZvKSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcG9zdGNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhc3NlcnQgKCh1bnNpZ25lZCkgbWVtb3J5X2luZm8uQmFzZUFkZHJl
c3MgJSBnX3BhZ2VzaXplID09IDApOwotI2lmZGVmIFRSQUNFCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJpbnRmICgiUXVlcnkgJXAgJWQgJXNcbiIsIG1lbW9yeV9pbmZvLkJhc2VBZGRy
ZXNzLCBtZW1vcnlfaW5mby5SZWdpb25TaXplLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lbW9yeV9pbmZvLlN0YXRlID09IE1FTV9GUkVFID8gIkZSRUUiOiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZW1vcnlfaW5mby5TdGF0ZSA9PSBNRU1f
UkVTRVJWRSA/ICJSRVNFUlZFRCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKG1lbW9yeV9pbmZvLlN0YXRlID09IE1FTV9DT01NSVQgPyAiQ09NTUlUVEVEIjogIj8iKSkp
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVnaW9uIGlzIGZyZWUs
IHdlbGwgYWxpZ25lZCBhbmQgYmlnIGVub3VnaDogd2UgYXJlIGRvbmUgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobWVtb3J5X2luZm8uU3RhdGUgPT0gTUVNX0ZSRUUgJiYKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKSBtZW1vcnlfaW5mby5CYXNl
QWRkcmVzcyAlIGdfcmVnaW9uc2l6ZSA9PSAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1lbW9yeV9pbmZvLlJlZ2lvblNpemUgPj0gKHVuc2lnbmVkKSByZXNlcnZlX3NpemUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUUlVFOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnJvbSBub3cgb24gd2UgY2Fu
J3QgZ2V0IGNvbnRpZ3VvdXMgbWVtb3J5ISAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpZ3VvdXMgPSBGQUxTRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNv
bXB1dGUgc2l6ZSB0byByZXNlcnZlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
ZXJ2ZV9zaXplID0gQ0VJTCAoYWxsb2NhdGVfc2l6ZSwgZ19teV9yZWdpb25zaXplKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfaW5mby5CYXNlQWRkcmVzcyA9IChjaGFyICop
IG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNzICsgbWVtb3J5X2luZm8uUmVnaW9uU2l6ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCAoKHVuc2lnbmVkKSBtZW1vcnlfaW5mby5CYXNl
QWRkcmVzcyAlIGdfcGFnZXNpemUgPT0gMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0ICgwIDwgcmVzZXJ2ZV9zaXplICYmIHJlc2VydmVfc2l6ZSAlIGdfcmVnaW9uc2l6ZSA9
PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8qIFNlYXJjaCBmYWlsZWQ/ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISBmb3Vu
ZCkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzYnJrX2V4aXQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwotICAgICAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0ICgodW5zaWduZWQpIG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNzICUg
Z19yZWdpb25zaXplID09IDApOwotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ICgwIDwg
cmVzZXJ2ZV9zaXplICYmIHJlc2VydmVfc2l6ZSAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byByZXNlcnZlIHRoaXMgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJhc2VfcmVzZXJ2ZWQgPSBWaXJ0dWFsQWxsb2MgKG1lbW9yeV9pbmZvLkJh
c2VBZGRyZXNzLCByZXNlcnZlX3NpemUsIAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTUVNX1JFU0VSVkUsIFBBR0VfTk9BQ0NFU1MpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCEgYmFzZV9yZXNlcnZlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCByYyA9IEdldExhc3RFcnJvciAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocmMgIT0gRVJST1JfSU5WQUxJRF9BRERSRVNTKSAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ290byBzYnJrX2V4aXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvKiBBIG51bGwgcG9pbnRlciBzaWduYWxzIChob3BlZnVsbHkp
IGEgcmFjZSBjb25kaXRpb24gd2l0aCBhbm90aGVyIHRocmVhZC4gKi8KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIEluIHRoaXMgY2FzZSwgd2UgdHJ5IGFnYWluLiAqLwotICAgICAgICAgICAg
ICAgICAgICB9IHdoaWxlICghIGJhc2VfcmVzZXJ2ZWQpOwotICAgICAgICAgICAgICAgICAgICAv
KiBDaGVjayByZXR1cm5lZCBwb2ludGVyIGZvciBjb25zaXN0ZW5jeSAqLwotICAgICAgICAgICAg
ICAgICAgICBpZiAobWVtb3J5X2luZm8uQmFzZUFkZHJlc3MgJiYgYmFzZV9yZXNlcnZlZCAhPSBt
ZW1vcnlfaW5mby5CYXNlQWRkcmVzcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc2Jy
a19leGl0OwotICAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcG9zdGNvbmRpdGlvbnMgKi8K
LSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ICgodW5zaWduZWQpIGJhc2VfcmVzZXJ2ZWQgJSBn
X3JlZ2lvbnNpemUgPT0gMCk7Ci0jaWZkZWYgVFJBQ0UKLSAgICAgICAgICAgICAgICAgICAgcHJp
bnRmICgiUmVzZXJ2ZSAlcCAlZFxuIiwgYmFzZV9yZXNlcnZlZCwgcmVzZXJ2ZV9zaXplKTsKLSNl
bmRpZgotICAgICAgICAgICAgICAgICAgICAvKiBEaWQgd2UgZ2V0IGNvbnRpZ3VvdXMgbWVtb3J5
PyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGlndW91cykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbG9uZyBzdGFydF9zaXplID0gKGNoYXIgKikgZ19sYXN0LT50b3BfY29tbWl0
dGVkIC0gKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkOwotICAgICAgICAgICAgICAgICAg
ICAgICAgLyogQWRqdXN0IGFsbG9jYXRpb24gc2l6ZSAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgYWxsb2NhdGVfc2l6ZSAtPSBzdGFydF9zaXplOwotICAgICAgICAgICAgICAgICAgICAgICAg
LyogQWRqdXN0IHRoZSByZWdpb25zIGFsbG9jYXRpb24gdG9wICovCi0gICAgICAgICAgICAgICAg
ICAgICAgICBnX2xhc3QtPnRvcF9hbGxvY2F0ZWQgPSBnX2xhc3QtPnRvcF9jb21taXR0ZWQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNvbXB1dGUgdGhlIHNpemUgdG8gY29tbWl0ICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b19jb21taXQgPSAoY2hhciAqKSBnX2xhc3QtPnRv
cF9hbGxvY2F0ZWQgKyBhbGxvY2F0ZV9zaXplIC0gKGNoYXIgKikgZ19sYXN0LT50b3BfY29tbWl0
dGVkOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogUm91bmQgc2l6ZSB0byBjb21taXQgKi8K
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdF9zaXplID0gQ0VJTCAodG9fY29tbWl0LCBn
X215X3BhZ2VzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgfSAKLSAgICAgICAgICAgICAgICAg
ICAgLyogQXBwZW5kIHRoZSBuZXcgcmVnaW9uIHRvIHRoZSBsaXN0ICovCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghIHJlZ2lvbl9saXN0X2FwcGVuZCAoJmdfbGFzdCwgYmFzZV9yZXNlcnZlZCwg
cmVzZXJ2ZV9zaXplKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc2Jya19leGl0Owot
ICAgICAgICAgICAgICAgICAgICAvKiBEaWRuJ3Qgd2UgZ2V0IGNvbnRpZ3VvdXMgbWVtb3J5PyAq
LwotICAgICAgICAgICAgICAgICAgICBpZiAoISBjb250aWd1b3VzKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvKiBSZWNvbXB1dGUgdGhlIHNpemUgdG8gY29tbWl0ICovCi0gICAgICAgICAg
ICAgICAgICAgICAgICB0b19jb21taXQgPSAoY2hhciAqKSBnX2xhc3QtPnRvcF9hbGxvY2F0ZWQg
KyBhbGxvY2F0ZV9zaXplIC0gKGNoYXIgKikgZ19sYXN0LT50b3BfY29tbWl0dGVkOwotICAgICAg
ICAgICAgICAgICAgICAgICAgLyogUm91bmQgc2l6ZSB0byBjb21taXQgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1pdF9zaXplID0gQ0VJTCAodG9fY29tbWl0LCBnX215X3BhZ2VzaXpl
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gCi0gICAgICAgICAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwotICAgICAgICAgICAg
YXNzZXJ0ICgodW5zaWduZWQpIGdfbGFzdC0+dG9wX2NvbW1pdHRlZCAlIGdfcGFnZXNpemUgPT0g
MCk7Ci0gICAgICAgICAgICBhc3NlcnQgKDAgPCBjb21taXRfc2l6ZSAmJiBjb21taXRfc2l6ZSAl
IGdfcGFnZXNpemUgPT0gMCk7IHsKLSAgICAgICAgICAgICAgICAvKiBDb21taXQgdGhpcyAqLwot
ICAgICAgICAgICAgICAgIHZvaWQgKmJhc2VfY29tbWl0dGVkID0gVmlydHVhbEFsbG9jIChnX2xh
c3QtPnRvcF9jb21taXR0ZWQsIGNvbW1pdF9zaXplLCAKLQkJCQkgICAgCQkJICAgICAgICAgICAg
ICAgICAgICAgTUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpOwotICAgICAgICAgICAgICAgIC8q
IENoZWNrIHJldHVybmVkIHBvaW50ZXIgZm9yIGNvbnNpc3RlbmN5ICovCi0gICAgICAgICAgICAg
ICAgaWYgKGJhc2VfY29tbWl0dGVkICE9IGdfbGFzdC0+dG9wX2NvbW1pdHRlZCkKLSAgICAgICAg
ICAgICAgICAgICAgZ290byBzYnJrX2V4aXQ7Ci0gICAgICAgICAgICAgICAgLyogQXNzZXJ0IHBv
c3Rjb25kaXRpb25zICovCi0gICAgICAgICAgICAgICAgYXNzZXJ0ICgodW5zaWduZWQpIGJhc2Vf
Y29tbWl0dGVkICUgZ19wYWdlc2l6ZSA9PSAwKTsKLSNpZmRlZiBUUkFDRQotICAgICAgICAgICAg
ICAgIHByaW50ZiAoIkNvbW1pdCAlcCAlZFxuIiwgYmFzZV9jb21taXR0ZWQsIGNvbW1pdF9zaXpl
KTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIC8qIEFkanVzdCB0aGUgcmVnaW9ucyBjb21taXQg
dG9wICovCi0gICAgICAgICAgICAgICAgZ19sYXN0LT50b3BfY29tbWl0dGVkID0gKGNoYXIgKikg
YmFzZV9jb21taXR0ZWQgKyBjb21taXRfc2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAK
LSAgICAgICAgLyogQWRqdXN0IHRoZSByZWdpb25zIGFsbG9jYXRpb24gdG9wICovCi0gICAgICAg
IGdfbGFzdC0+dG9wX2FsbG9jYXRlZCA9IChjaGFyICopIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCAr
IGFsbG9jYXRlX3NpemU7Ci0gICAgICAgIHJlc3VsdCA9IChjaGFyICopIGdfbGFzdC0+dG9wX2Fs
bG9jYXRlZCAtIHNpemU7Ci0gICAgLyogRGVhbGxvY2F0aW9uIHJlcXVlc3RlZD8gKi8KLSAgICB9
IGVsc2UgaWYgKHNpemUgPCAwKSB7Ci0gICAgICAgIGxvbmcgZGVhbGxvY2F0ZV9zaXplID0gLSBz
aXplOwotICAgICAgICAvKiBBcyBsb25nIGFzIHdlIGhhdmUgYSByZWdpb24gdG8gcmVsZWFzZSAq
LwotICAgICAgICB3aGlsZSAoKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkIC0gZGVhbGxv
Y2F0ZV9zaXplIDwgKGNoYXIgKikgZ19sYXN0LT50b3BfcmVzZXJ2ZWQgLSBnX2xhc3QtPnJlc2Vy
dmVfc2l6ZSkgewotICAgICAgICAgICAgLyogR2V0IHRoZSBzaXplIHRvIHJlbGVhc2UgKi8KLSAg
ICAgICAgICAgIGxvbmcgcmVsZWFzZV9zaXplID0gZ19sYXN0LT5yZXNlcnZlX3NpemU7Ci0gICAg
ICAgICAgICAvKiBHZXQgdGhlIGJhc2UgYWRkcmVzcyAqLwotICAgICAgICAgICAgdm9pZCAqYmFz
ZV9yZXNlcnZlZCA9IChjaGFyICopIGdfbGFzdC0+dG9wX3Jlc2VydmVkIC0gcmVsZWFzZV9zaXpl
OwotICAgICAgICAgICAgLyogQXNzZXJ0IHByZWNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAgIGFz
c2VydCAoKHVuc2lnbmVkKSBiYXNlX3Jlc2VydmVkICUgZ19yZWdpb25zaXplID09IDApOyAKLSAg
ICAgICAgICAgIGFzc2VydCAoMCA8IHJlbGVhc2Vfc2l6ZSAmJiByZWxlYXNlX3NpemUgJSBnX3Jl
Z2lvbnNpemUgPT0gMCk7IHsKLSAgICAgICAgICAgICAgICAvKiBSZWxlYXNlIHRoaXMgKi8KLSAg
ICAgICAgICAgICAgICBpbnQgcmMgPSBWaXJ0dWFsRnJlZSAoYmFzZV9yZXNlcnZlZCwgMCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTV9SRUxFQVNFKTsKLSAgICAg
ICAgICAgICAgICAvKiBDaGVjayByZXR1cm5lZCBjb2RlIGZvciBjb25zaXN0ZW5jeSAqLwotICAg
ICAgICAgICAgICAgIGlmICghIHJjKQotICAgICAgICAgICAgICAgICAgICBnb3RvIHNicmtfZXhp
dDsKLSNpZmRlZiBUUkFDRQotICAgICAgICAgICAgICAgIHByaW50ZiAoIlJlbGVhc2UgJXAgJWRc
biIsIGJhc2VfcmVzZXJ2ZWQsIHJlbGVhc2Vfc2l6ZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIC8qIEFkanVzdCBkZWFsbG9jYXRpb24gc2l6ZSAqLwotICAgICAgICAgICAg
ZGVhbGxvY2F0ZV9zaXplIC09IChjaGFyICopIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCAtIChjaGFy
ICopIGJhc2VfcmVzZXJ2ZWQ7Ci0gICAgICAgICAgICAvKiBSZW1vdmUgdGhlIG9sZCByZWdpb24g
ZnJvbSB0aGUgbGlzdCAqLwotICAgICAgICAgICAgaWYgKCEgcmVnaW9uX2xpc3RfcmVtb3ZlICgm
Z19sYXN0KSkKLSAgICAgICAgICAgICAgICBnb3RvIHNicmtfZXhpdDsKLSAgICAgICAgfSB7Ci0g
ICAgICAgICAgICAvKiBDb21wdXRlIHRoZSBzaXplIHRvIGRlY29tbWl0ICovCi0gICAgICAgICAg
ICBsb25nIHRvX2RlY29tbWl0ID0gKGNoYXIgKikgZ19sYXN0LT50b3BfY29tbWl0dGVkIC0gKChj
aGFyICopIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCAtIGRlYWxsb2NhdGVfc2l6ZSk7Ci0gICAgICAg
ICAgICBpZiAodG9fZGVjb21taXQgPj0gZ19teV9wYWdlc2l6ZSkgewotICAgICAgICAgICAgICAg
IC8qIENvbXB1dGUgdGhlIHNpemUgdG8gZGVjb21taXQgKi8KLSAgICAgICAgICAgICAgICBsb25n
IGRlY29tbWl0X3NpemUgPSBGTE9PUiAodG9fZGVjb21taXQsIGdfbXlfcGFnZXNpemUpOwotICAg
ICAgICAgICAgICAgIC8qICBDb21wdXRlIHRoZSBiYXNlIGFkZHJlc3MgKi8KLSAgICAgICAgICAg
ICAgICB2b2lkICpiYXNlX2NvbW1pdHRlZCA9IChjaGFyICopIGdfbGFzdC0+dG9wX2NvbW1pdHRl
ZCAtIGRlY29tbWl0X3NpemU7Ci0gICAgICAgICAgICAgICAgLyogQXNzZXJ0IHByZWNvbmRpdGlv
bnMgKi8KLSAgICAgICAgICAgICAgICBhc3NlcnQgKCh1bnNpZ25lZCkgYmFzZV9jb21taXR0ZWQg
JSBnX3BhZ2VzaXplID09IDApOwotICAgICAgICAgICAgICAgIGFzc2VydCAoMCA8IGRlY29tbWl0
X3NpemUgJiYgZGVjb21taXRfc2l6ZSAlIGdfcGFnZXNpemUgPT0gMCk7IHsKLSAgICAgICAgICAg
ICAgICAgICAgLyogRGVjb21taXQgdGhpcyAqLwotICAgICAgICAgICAgICAgICAgICBpbnQgcmMg
PSBWaXJ0dWFsRnJlZSAoKGNoYXIgKikgYmFzZV9jb21taXR0ZWQsIGRlY29tbWl0X3NpemUsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNX0RFQ09NTUlUKTsK
LSAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgcmV0dXJuZWQgY29kZSBmb3IgY29uc2lzdGVu
Y3kgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCEgcmMpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBnb3RvIHNicmtfZXhpdDsKLSNpZmRlZiBUUkFDRQotICAgICAgICAgICAgICAgICAgICBw
cmludGYgKCJEZWNvbW1pdCAlcCAlZFxuIiwgYmFzZV9jb21taXR0ZWQsIGRlY29tbWl0X3NpemUp
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIEFkanVzdCBk
ZWFsbG9jYXRpb24gc2l6ZSBhbmQgcmVnaW9ucyBjb21taXQgYW5kIGFsbG9jYXRlIHRvcCAqLwot
ICAgICAgICAgICAgICAgIGRlYWxsb2NhdGVfc2l6ZSAtPSAoY2hhciAqKSBnX2xhc3QtPnRvcF9h
bGxvY2F0ZWQgLSAoY2hhciAqKSBiYXNlX2NvbW1pdHRlZDsKLSAgICAgICAgICAgICAgICBnX2xh
c3QtPnRvcF9jb21taXR0ZWQgPSBiYXNlX2NvbW1pdHRlZDsKLSAgICAgICAgICAgICAgICBnX2xh
c3QtPnRvcF9hbGxvY2F0ZWQgPSBiYXNlX2NvbW1pdHRlZDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICAvKiBBZGp1c3QgcmVnaW9ucyBhbGxvY2F0ZSB0b3AgKi8KLSAgICAgICAg
Z19sYXN0LT50b3BfYWxsb2NhdGVkID0gKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkIC0g
ZGVhbGxvY2F0ZV9zaXplOwotICAgICAgICAvKiBDaGVjayBmb3IgdW5kZXJmbG93ICovCi0gICAg
ICAgIGlmICgoY2hhciAqKSBnX2xhc3QtPnRvcF9yZXNlcnZlZCAtIGdfbGFzdC0+cmVzZXJ2ZV9z
aXplID4gKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkIHx8Ci0gICAgICAgICAgICBnX2xh
c3QtPnRvcF9hbGxvY2F0ZWQgPiBnX2xhc3QtPnRvcF9jb21taXR0ZWQpIHsKLSAgICAgICAgICAg
IC8qIEFkanVzdCByZWdpb25zIGFsbG9jYXRlIHRvcCAqLwotICAgICAgICAgICAgZ19sYXN0LT50
b3BfYWxsb2NhdGVkID0gKGNoYXIgKikgZ19sYXN0LT50b3BfcmVzZXJ2ZWQgLSBnX2xhc3QtPnJl
c2VydmVfc2l6ZTsKLSAgICAgICAgICAgIGdvdG8gc2Jya19leGl0OwotICAgICAgICB9Ci0gICAg
ICAgIHJlc3VsdCA9IGdfbGFzdC0+dG9wX2FsbG9jYXRlZDsKLSAgICB9Ci0gICAgLyogQXNzZXJ0
IGludmFyaWFudHMgKi8KLSAgICBhc3NlcnQgKGdfbGFzdCk7Ci0gICAgYXNzZXJ0ICgoY2hhciAq
KSBnX2xhc3QtPnRvcF9yZXNlcnZlZCAtIGdfbGFzdC0+cmVzZXJ2ZV9zaXplIDw9IChjaGFyICop
IGdfbGFzdC0+dG9wX2FsbG9jYXRlZCAmJgotICAgICAgICAgICAgZ19sYXN0LT50b3BfYWxsb2Nh
dGVkIDw9IGdfbGFzdC0+dG9wX2NvbW1pdHRlZCk7Ci0gICAgYXNzZXJ0ICgoY2hhciAqKSBnX2xh
c3QtPnRvcF9yZXNlcnZlZCAtIGdfbGFzdC0+cmVzZXJ2ZV9zaXplIDw9IChjaGFyICopIGdfbGFz
dC0+dG9wX2NvbW1pdHRlZCAmJgotICAgICAgICAgICAgZ19sYXN0LT50b3BfY29tbWl0dGVkIDw9
IGdfbGFzdC0+dG9wX3Jlc2VydmVkICYmCi0gICAgICAgICAgICAodW5zaWduZWQpIGdfbGFzdC0+
dG9wX2NvbW1pdHRlZCAlIGdfcGFnZXNpemUgPT0gMCk7Ci0gICAgYXNzZXJ0ICgodW5zaWduZWQp
IGdfbGFzdC0+dG9wX3Jlc2VydmVkICUgZ19yZWdpb25zaXplID09IDApOwotICAgIGFzc2VydCAo
KHVuc2lnbmVkKSBnX2xhc3QtPnJlc2VydmVfc2l6ZSAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLQot
c2Jya19leGl0OgotI2lmIGRlZmluZWQgKFVTRV9NQUxMT0NfTE9DSykgJiYgZGVmaW5lZCAoTkVF
REVEKQotICAgIC8qIFJlbGVhc2Ugc3BpbiBsb2NrICovCi0gICAgc2xyZWxlYXNlICgmZ19zbCk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBtbWFwIGZvciB3aW5kb3dzICov
Ci1zdGF0aWMgdm9pZCAqbW1hcCAodm9pZCAqcHRyLCBsb25nIHNpemUsIGxvbmcgcHJvdCwgbG9u
ZyB0eXBlLCBsb25nIGhhbmRsZSwgbG9uZyBhcmcpIHsKLSAgICBzdGF0aWMgbG9uZyBnX3BhZ2Vz
aXplOwotICAgIHN0YXRpYyBsb25nIGdfcmVnaW9uc2l6ZTsKLSNpZmRlZiBUUkFDRQotICAgIHBy
aW50ZiAoIm1tYXAgJWRcbiIsIHNpemUpOwotI2VuZGlmCi0jaWYgZGVmaW5lZCAoVVNFX01BTExP
Q19MT0NLKSAmJiBkZWZpbmVkIChORUVERUQpCi0gICAgLyogV2FpdCBmb3Igc3BpbiBsb2NrICov
Ci0gICAgc2x3YWl0ICgmZ19zbCk7Ci0jZW5kaWYKLSAgICAvKiBGaXJzdCB0aW1lIGluaXRpYWxp
emF0aW9uICovCi0gICAgaWYgKCEgZ19wYWdlc2l6ZSkgCi0gICAgICAgIGdfcGFnZXNpemUgPSBn
ZXRwYWdlc2l6ZSAoKTsKLSAgICBpZiAoISBnX3JlZ2lvbnNpemUpIAotICAgICAgICBnX3JlZ2lv
bnNpemUgPSBnZXRyZWdpb25zaXplICgpOwotICAgIC8qIEFzc2VydCBwcmVjb25kaXRpb25zICov
Ci0gICAgYXNzZXJ0ICgodW5zaWduZWQpIHB0ciAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLSAgICBh
c3NlcnQgKHNpemUgJSBnX3BhZ2VzaXplID09IDApOwotICAgIC8qIEFsbG9jYXRlIHRoaXMgKi8K
LSAgICBwdHIgPSBWaXJ0dWFsQWxsb2MgKHB0ciwgc2l6ZSwKLQkJCQkJICAgIE1FTV9SRVNFUlZF
IHwgTUVNX0NPTU1JVCB8IE1FTV9UT1BfRE9XTiwgUEFHRV9SRUFEV1JJVEUpOwotICAgIGlmICgh
IHB0cikgewotICAgICAgICBwdHIgPSAodm9pZCAqKSBNT1JFQ09SRV9GQUlMVVJFOwotICAgICAg
ICBnb3RvIG1tYXBfZXhpdDsKLSAgICB9Ci0gICAgLyogQXNzZXJ0IHBvc3Rjb25kaXRpb25zICov
Ci0gICAgYXNzZXJ0ICgodW5zaWduZWQpIHB0ciAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLSNpZmRl
ZiBUUkFDRQotICAgIHByaW50ZiAoIkNvbW1pdCAlcCAlZFxuIiwgcHRyLCBzaXplKTsKLSNlbmRp
ZgotbW1hcF9leGl0OgotI2lmIGRlZmluZWQgKFVTRV9NQUxMT0NfTE9DSykgJiYgZGVmaW5lZCAo
TkVFREVEKQotICAgIC8qIFJlbGVhc2Ugc3BpbiBsb2NrICovCi0gICAgc2xyZWxlYXNlICgmZ19z
bCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcHRyOwotfQotCi0vKiBtdW5tYXAgZm9yIHdpbmRvd3Mg
Ki8KLXN0YXRpYyBsb25nIG11bm1hcCAodm9pZCAqcHRyLCBsb25nIHNpemUpIHsKLSAgICBzdGF0
aWMgbG9uZyBnX3BhZ2VzaXplOwotICAgIHN0YXRpYyBsb25nIGdfcmVnaW9uc2l6ZTsKLSAgICBp
bnQgcmMgPSBNVU5NQVBfRkFJTFVSRTsKLSNpZmRlZiBUUkFDRQotICAgIHByaW50ZiAoIm11bm1h
cCAlcCAlZFxuIiwgcHRyLCBzaXplKTsKLSNlbmRpZgotI2lmIGRlZmluZWQgKFVTRV9NQUxMT0Nf
TE9DSykgJiYgZGVmaW5lZCAoTkVFREVEKQotICAgIC8qIFdhaXQgZm9yIHNwaW4gbG9jayAqLwot
ICAgIHNsd2FpdCAoJmdfc2wpOwotI2VuZGlmCi0gICAgLyogRmlyc3QgdGltZSBpbml0aWFsaXph
dGlvbiAqLwotICAgIGlmICghIGdfcGFnZXNpemUpIAotICAgICAgICBnX3BhZ2VzaXplID0gZ2V0
cGFnZXNpemUgKCk7Ci0gICAgaWYgKCEgZ19yZWdpb25zaXplKSAKLSAgICAgICAgZ19yZWdpb25z
aXplID0gZ2V0cmVnaW9uc2l6ZSAoKTsKLSAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwot
ICAgIGFzc2VydCAoKHVuc2lnbmVkKSBwdHIgJSBnX3JlZ2lvbnNpemUgPT0gMCk7Ci0gICAgYXNz
ZXJ0IChzaXplICUgZ19wYWdlc2l6ZSA9PSAwKTsKLSAgICAvKiBGcmVlIHRoaXMgKi8KLSAgICBp
ZiAoISBWaXJ0dWFsRnJlZSAocHRyLCAwLCAKLSAgICAgICAgICAgICAgICAgICAgICAgTUVNX1JF
TEVBU0UpKQotICAgICAgICBnb3RvIG11bm1hcF9leGl0OwotICAgIHJjID0gMDsKLSNpZmRlZiBU
UkFDRQotICAgIHByaW50ZiAoIlJlbGVhc2UgJXAgJWRcbiIsIHB0ciwgc2l6ZSk7Ci0jZW5kaWYK
LW11bm1hcF9leGl0OgotI2lmIGRlZmluZWQgKFVTRV9NQUxMT0NfTE9DSykgJiYgZGVmaW5lZCAo
TkVFREVEKQotICAgIC8qIFJlbGVhc2Ugc3BpbiBsb2NrICovCi0gICAgc2xyZWxlYXNlICgmZ19z
bCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIHZtaW5mbyAoQ0hV
TktfU0laRV9UICAqZnJlZSwgQ0hVTktfU0laRV9UICAqcmVzZXJ2ZWQsIENIVU5LX1NJWkVfVCAg
KmNvbW1pdHRlZCkgewotICAgIE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiBtZW1vcnlfaW5mbzsK
LSAgICBtZW1vcnlfaW5mby5CYXNlQWRkcmVzcyA9IDA7Ci0gICAgKmZyZWUgPSAqcmVzZXJ2ZWQg
PSAqY29tbWl0dGVkID0gMDsKLSAgICB3aGlsZSAoVmlydHVhbFF1ZXJ5IChtZW1vcnlfaW5mby5C
YXNlQWRkcmVzcywgJm1lbW9yeV9pbmZvLCBzaXplb2YgKG1lbW9yeV9pbmZvKSkpIHsKLSAgICAg
ICAgc3dpdGNoIChtZW1vcnlfaW5mby5TdGF0ZSkgewotICAgICAgICBjYXNlIE1FTV9GUkVFOgot
ICAgICAgICAgICAgKmZyZWUgKz0gbWVtb3J5X2luZm8uUmVnaW9uU2l6ZTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIE1FTV9SRVNFUlZFOgotICAgICAgICAgICAgKnJlc2VydmVk
ICs9IG1lbW9yeV9pbmZvLlJlZ2lvblNpemU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBNRU1fQ09NTUlUOgotICAgICAgICAgICAgKmNvbW1pdHRlZCArPSBtZW1vcnlfaW5mby5S
ZWdpb25TaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtb3J5
X2luZm8uQmFzZUFkZHJlc3MgPSAoY2hhciAqKSBtZW1vcnlfaW5mby5CYXNlQWRkcmVzcyArIG1l
bW9yeV9pbmZvLlJlZ2lvblNpemU7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IGNwdWluZm8gKGlu
dCB3aG9sZSwgQ0hVTktfU0laRV9UICAqa2VybmVsLCBDSFVOS19TSVpFX1QgICp1c2VyKSB7Ci0g
ICAgaWYgKHdob2xlKSB7Ci0gICAgICAgIF9faW50NjQgY3JlYXRpb242NCwgZXhpdDY0LCBrZXJu
ZWw2NCwgdXNlcjY0OwotICAgICAgICBpbnQgcmMgPSBHZXRQcm9jZXNzVGltZXMgKEdldEN1cnJl
bnRQcm9jZXNzICgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRklMRVRJ
TUUgKikgJmNyZWF0aW9uNjQsICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
RklMRVRJTUUgKikgJmV4aXQ2NCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KEZJTEVUSU1FICopICZrZXJuZWw2NCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKEZJTEVUSU1FICopICZ1c2VyNjQpOwotICAgICAgICBpZiAoISByYykgewotICAgICAgICAg
ICAgKmtlcm5lbCA9IDA7Ci0gICAgICAgICAgICAqdXNlciA9IDA7Ci0gICAgICAgICAgICByZXR1
cm4gRkFMU0U7Ci0gICAgICAgIH0gCi0gICAgICAgICprZXJuZWwgPSAoQ0hVTktfU0laRV9UKSAo
a2VybmVsNjQgLyAxMDAwMCk7Ci0gICAgICAgICp1c2VyID0gKENIVU5LX1NJWkVfVCkgKHVzZXI2
NCAvIDEwMDAwKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
X19pbnQ2NCBjcmVhdGlvbjY0LCBleGl0NjQsIGtlcm5lbDY0LCB1c2VyNjQ7Ci0gICAgICAgIGlu
dCByYyA9IEdldFRocmVhZFRpbWVzIChHZXRDdXJyZW50VGhyZWFkICgpLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChGSUxFVElNRSAqKSAmY3JlYXRpb242NCwgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZJTEVUSU1FICopICZleGl0NjQsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZJTEVUSU1FICopICZrZXJuZWw2NCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRklMRVRJTUUgKikgJnVzZXI2NCk7Ci0gICAg
ICAgIGlmICghIHJjKSB7Ci0gICAgICAgICAgICAqa2VybmVsID0gMDsKLSAgICAgICAgICAgICp1
c2VyID0gMDsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfSAKLSAgICAgICAg
Kmtlcm5lbCA9IChDSFVOS19TSVpFX1QpIChrZXJuZWw2NCAvIDEwMDAwKTsKLSAgICAgICAgKnVz
ZXIgPSAoQ0hVTktfU0laRV9UKSAodXNlcjY0IC8gMTAwMDApOwotICAgICAgICByZXR1cm4gVFJV
RTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvKiBXSU4zMiAqLwotCi0jZW5kaWYgLy8gTkRFQlVHCi0K
LX0gIC8qIGVuZCBvZiBuYW1lc3BhY2UgS0pTICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSGlzdG9yeToKLSAgICBW
Mi43LjIgU2F0IEF1ZyAxNyAwOTowNzozMCAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKLSAg
ICAgICogRml4IG1hbGxvY19zdGF0ZSBiaXRtYXAgYXJyYXkgbWlzZGVjbGFyYXRpb24KLQotICAg
IFYyLjcuMSBUaHUgSnVsIDI1IDEwOjU4OjAzIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQot
ICAgICAgKiBBbGxvdyB0dW5pbmcgb2YgRklSU1RfU09SVEVEX0JJTl9TSVpFCi0gICAgICAqIFVz
ZSBQVFJfVUlOVCBhcyB0eXBlIGZvciBhbGwgcHRyLT5pbnQgY2FzdHMuIFRoYW5rcyB0byBKb2hu
IEJlbG1vbnRlLgotICAgICAgKiBCZXR0ZXIgZGV0ZWN0aW9uIGFuZCBzdXBwb3J0IGZvciBub24t
Y29udGlndW91c25lc3Mgb2YgTU9SRUNPUkUuIAotICAgICAgICBUaGFua3MgdG8gQW5kcmVhcyBN
dWVsbGVyLCBDb25hbCBXYWxzaCwgYW5kIFdvbGZyYW0gR2xvZ2VyCi0gICAgICAqIEJ5cGFzcyBt
b3N0IG9mIG1hbGxvYyBpZiBubyBmcmVlcy4gVGhhbmtzIFRvIEVtZXJ5IEJlcmdlci4KLSAgICAg
ICogRml4IGZyZWVpbmcgb2Ygb2xkIHRvcCBub24tY29udGlndW91cyBjaHVuayBpbSBzeXNtYWxs
b2MuCi0gICAgICAqIFJhaXNlZCBkZWZhdWx0IHRyaW0gYW5kIG1hcCB0aHJlc2hvbGRzIHRvIDI1
NksuCi0gICAgICAqIEZpeCBtbWFwLXJlbGF0ZWQgI2RlZmluZXMuIFRoYW5rcyB0byBMdWJvcyBM
dW5hay4KLSAgICAgICogRml4IGNvcHkgbWFjcm9zOyBhZGRlZCBMQUNLU19GQ05UTF9ILiBUaGFu
a3MgdG8gTmVhbCBXYWxmaWVsZC4KLSAgICAgICogQnJhbmNoLWZyZWUgYmluIGNhbGN1bGF0aW9u
Ci0gICAgICAqIERlZmF1bHQgdHJpbSBhbmQgbW1hcCB0aHJlc2hvbGRzIG5vdyAyNTZLLgotCi0g
ICAgVjIuNy4wIFN1biBNYXIgMTEgMTQ6MTQ6MDYgMjAwMSAgRG91ZyBMZWEgIChkbCBhdCBnZWUp
Ci0gICAgICAqIEludHJvZHVjZSBpbmRlcGVuZGVudF9jb21hbGxvYyBhbmQgaW5kZXBlbmRlbnRf
Y2FsbG9jLgotICAgICAgICBUaGFua3MgdG8gTWljaGFlbCBQYWNob3MgZm9yIG1vdGl2YXRpb24g
YW5kIGhlbHAuCi0gICAgICAqIE1ha2Ugb3B0aW9uYWwgLmggZmlsZSBhdmFpbGFibGUKLSAgICAg
ICogQWxsb3cgPiAyR0IgcmVxdWVzdHMgb24gMzJiaXQgc3lzdGVtcy4KLSAgICAgICogbmV3IFdJ
TjMyIHNicmssIG1tYXAsIG11bm1hcCwgbG9jayBjb2RlIGZyb20gPFdhbHRlckBHZU5lU3lzLWUu
ZGU+LgotICAgICAgICBUaGFua3MgYWxzbyB0byBBbmRyZWFzIE11ZWxsZXIgPGEubXVlbGxlciBh
dCBwYXJhZGF0ZWMuZGU+LAotICAgICAgICBhbmQgQW5vbnltb3VzLgotICAgICAgKiBBbGxvdyBv
dmVycmlkZSBvZiBNQUxMT0NfQUxJR05NRU5UIChUaGFua3MgdG8gUnV1ZCBXYWlqIGZvciAKLSAg
ICAgICAgaGVscGluZyB0ZXN0IHRoaXMuKQotICAgICAgKiBtZW1hbGlnbjogY2hlY2sgYWxpZ25t
ZW50IGFyZwotICAgICAgKiByZWFsbG9jOiBkb24ndCB0cnkgdG8gc2hpZnQgY2h1bmtzIGJhY2t3
YXJkcywgc2luY2UgdGhpcwotICAgICAgICBsZWFkcyB0byAgbW9yZSBmcmFnbWVudGF0aW9uIGlu
IHNvbWUgcHJvZ3JhbXMgYW5kIGRvZXNuJ3QKLSAgICAgICAgc2VlbSB0byBoZWxwIGluIGFueSBv
dGhlcnMuCi0gICAgICAqIENvbGxlY3QgYWxsIGNhc2VzIGluIG1hbGxvYyByZXF1aXJpbmcgc3lz
dGVtIG1lbW9yeSBpbnRvIHNZU01BTExPYwotICAgICAgKiBVc2UgbW1hcCBhcyBiYWNrdXAgdG8g
c2JyawotICAgICAgKiBQbGFjZSBhbGwgaW50ZXJuYWwgc3RhdGUgaW4gbWFsbG9jX3N0YXRlCi0g
ICAgICAqIEludHJvZHVjZSBmYXN0YmlucyAoYWx0aG91Z2ggc2ltaWxhciB0byAyLjUuMSkKLSAg
ICAgICogTWFueSBtaW5vciB0dW5pbmdzIGFuZCBjb3NtZXRpYyBpbXByb3ZlbWVudHMKLSAgICAg
ICogSW50cm9kdWNlIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTLCBVU0VfTUFMTE9DX0xPQ0sg
Ci0gICAgICAqIEludHJvZHVjZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04sIE1PUkVDT1JFX0NPTlRJ
R1VPVVMKLSAgICAgICAgVGhhbmtzIHRvIFRvbnkgRS4gQmVubmV0dCA8dGJlbm5ldHRAbnZpZGlh
LmNvbT4gYW5kIG90aGVycy4KLSAgICAgICogSW5jbHVkZSBlcnJuby5oIHRvIHN1cHBvcnQgZGVm
YXVsdCBmYWlsdXJlIGFjdGlvbi4KLQotICAgIFYyLjYuNiBTdW4gRGVjICA1IDA3OjQyOjE5IDE5
OTkgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQotICAgICAgKiByZXR1cm4gbnVsbCBmb3IgbmVnYXRp
dmUgYXJndW1lbnRzCi0gICAgICAqIEFkZGVkIFNldmVyYWwgV0lOMzIgY2xlYW51cHMgZnJvbSBN
YXJ0aW4gQy4gRm9uZyA8bWNmb25nIGF0IHlhaG9vLmNvbT4KLSAgICAgICAgICogQWRkICdMQUNL
U19TWVNfUEFSQU1fSCcgZm9yIHRob3NlIHN5c3RlbXMgd2l0aG91dCAnc3lzL3BhcmFtLmgnCi0g
ICAgICAgICAgKGUuZy4gV0lOMzIgcGxhdGZvcm1zKQotICAgICAgICAgKiBDbGVhbnVwIGhlYWRl
ciBmaWxlIGluY2x1c2lvbiBmb3IgV0lOMzIgcGxhdGZvcm1zCi0gICAgICAgICAqIENsZWFudXAg
Y29kZSB0byBhdm9pZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlciBjb21wbGFpbnRzCi0g
ICAgICAgICAqIEFkZCAnVVNFX0RMX1BSRUZJWCcgdG8gcXVpY2tseSBhbGxvdyBjby1leGlzdGVu
Y2Ugd2l0aCBleGlzdGluZwotICAgICAgICAgICBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcwot
ICAgICAgICAgKiBTZXQgJ21hbGxvY19nZXRwYWdlc2l6ZScgZm9yIFdJTjMyIHBsYXRmb3JtcyAo
bmVlZHMgbW9yZSB3b3JrKQotICAgICAgICAgKiBVc2UgJ2Fzc2VydCcgcmF0aGVyIHRoYW4gJ0FT
U0VSVCcgaW4gV0lOMzIgY29kZSB0byBjb25mb3JtIHRvCi0gICAgICAgICAgIHVzYWdlIG9mICdh
c3NlcnQnIGluIG5vbi1XSU4zMiBjb2RlCi0gICAgICAgICAqIEltcHJvdmUgV0lOMzIgJ3Nicmso
KScgZW11bGF0aW9uJ3MgJ2ZpbmRSZWdpb24oKScgcm91dGluZSB0bwotICAgICAgICAgICBhdm9p
ZCBpbmZpbml0ZSBsb29wCi0gICAgICAqIEFsd2F5cyBjYWxsICdmUkVlKCknIHJhdGhlciB0aGFu
ICdmcmVlKCknCi0KLSAgICBWMi42LjUgV2VkIEp1biAxNyAxNTo1NzozMSAxOTk4ICBEb3VnIExl
YSAgKGRsIGF0IGdlZSkKLSAgICAgICogRml4ZWQgb3JkZXJpbmcgcHJvYmxlbSB3aXRoIGJvdW5k
YXJ5LXN0YW1waW5nCi0KLSAgICBWMi42LjMgU3VuIE1heSAxOSAwODoxNzo1OCAxOTk2ICBEb3Vn
IExlYSAgKGRsIGF0IGdlZSkKLSAgICAgICogQWRkZWQgcHZhbGxvYywgYXMgcmVjb21tZW5kZWQg
YnkgSC5KLiBMaXUKLSAgICAgICogQWRkZWQgNjRiaXQgcG9pbnRlciBzdXBwb3J0IG1haW5seSBm
cm9tIFdvbGZyYW0gR2xvZ2VyCi0gICAgICAqIEFkZGVkIGFub255bW91c2x5IGRvbmF0ZWQgV0lO
MzIgc2JyayBlbXVsYXRpb24KLSAgICAgICogTWFsbG9jLCBjYWxsb2MsIGdldHBhZ2VzaXplOiBh
ZGQgb3B0aW1pemF0aW9ucyBmcm9tIFJheW1vbmQgTmlqc3NlbgotICAgICAgKiBtYWxsb2NfZXh0
ZW5kX3RvcDogZml4IG1hc2sgZXJyb3IgdGhhdCBjYXVzZWQgd2FzdGFnZSBhZnRlcgotICAgICAg
ICBmb3JlaWduIHNicmtzCi0gICAgICAqIEFkZCBsaW51eCBtcmVtYXAgc3VwcG9ydCBjb2RlIGZy
b20gSEogTGl1Ci0KLSAgICBWMi42LjIgVHVlIERlYyAgNSAwNjo1Mjo1NSAxOTk1ICBEb3VnIExl
YSAgKGRsIGF0IGdlZSkKLSAgICAgICogSW50ZWdyYXRlZCBtb3N0IGRvY3VtZW50YXRpb24gd2l0
aCB0aGUgY29kZS4KLSAgICAgICogQWRkIHN1cHBvcnQgZm9yIG1tYXAsIHdpdGggaGVscCBmcm9t
Ci0gICAgICAgIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuCi0g
ICAgICAqIFVzZSBsYXN0X3JlbWFpbmRlciBpbiBtb3JlIGNhc2VzLgotICAgICAgKiBQYWNrIGJp
bnMgdXNpbmcgaWRlYSBmcm9tICBjb2xpbkBueXgxMC5jcy5kdS5lZHUKLSAgICAgICogVXNlIG9y
ZGVyZWQgYmlucyBpbnN0ZWFkIG9mIGJlc3QtZml0IHRocmVzaGhvbGQKLSAgICAgICogRWxpbWlu
YXRlIGJsb2NrLWxvY2FsIGRlY2xzIHRvIHNpbXBsaWZ5IHRyYWNpbmcgYW5kIGRlYnVnZ2luZy4K
LSAgICAgICogU3VwcG9ydCBhbm90aGVyIGNhc2Ugb2YgcmVhbGxvYyB2aWEgbW92ZSBpbnRvIHRv
cAotICAgICAgKiBGaXggZXJyb3Igb2NjdXJpbmcgd2hlbiBpbml0aWFsIHNicmtfYmFzZSBub3Qg
d29yZC1hbGlnbmVkLgotICAgICAgKiBSZWx5IG9uIHBhZ2Ugc2l6ZSBmb3IgdW5pdHMgaW5zdGVh
ZCBvZiBTQlJLX1VOSVQgdG8KLSAgICAgICAgYXZvaWQgc3VycHJpc2VzIGFib3V0IHNicmsgYWxp
Z25tZW50IGNvbnZlbnRpb25zLgotICAgICAgKiBBZGQgbWFsbGluZm8sIG1hbGxvcHQuIFRoYW5r
cyB0byBSYXltb25kIE5panNzZW4KLSAgICAgICAgKHJheW1vbmRAZXMuZWxlLnR1ZS5ubCkgZm9y
IHRoZSBzdWdnZXN0aW9uLgotICAgICAgKiBBZGQgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9jX3Ry
aW0gYW5kIHRvcF9wYWQgbWFsbG9wdCBwYXJhbWV0ZXIuCi0gICAgICAqIE1vcmUgcHJlY2F1dGlv
bnMgZm9yIGNhc2VzIHdoZXJlIG90aGVyIHJvdXRpbmVzIGNhbGwgc2JyaywKLSAgICAgICAgY291
cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KLSAg
ICAgICogQWRkZWQgbWFjcm9zIGV0Yy4sIGFsbG93aW5nIHVzZSBpbiBsaW51eCBsaWJjIGZyb20K
LSAgICAgICAgSC5KLiBMdSAoaGpsQGdudS5haS5taXQuZWR1KQotICAgICAgKiBJbnZlcnRlZCB0
aGlzIGhpc3RvcnkgbGlzdAotCi0gICAgVjIuNi4xIFNhdCBEZWMgIDIgMTQ6MTA6NTcgMTk5NSAg
RG91ZyBMZWEgIChkbCBhdCBnZWUpCi0gICAgICAqIFJlLXR1bmVkIGFuZCBmaXhlZCB0byBiZWhh
dmUgbW9yZSBuaWNlbHkgd2l0aCBWMi42LjAgY2hhbmdlcy4KLSAgICAgICogUmVtb3ZlZCBhbGwg
cHJlYWxsb2NhdGlvbiBjb2RlIHNpbmNlIHVuZGVyIGN1cnJlbnQgc2NoZW1lCi0gICAgICAgIHRo
ZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMKLSAgICAg
ICAgdGhlIHdvcmsgc2F2ZWQgaW4gZ29vZCBjYXNlcyBmb3IgbW9zdCB0ZXN0IHByb2dyYW1zLgot
ICAgICAgKiBObyBsb25nZXIgdXNlIHJldHVybiBsaXN0IG9yIHVuY29uc29saWRhdGVkIGJpbnMg
c2luY2UKLSAgICAgICAgbm8gc2NoZW1lIHVzaW5nIHRoZW0gY29uc2lzdGVudGx5IG91dHBlcmZv
cm1zIHRob3NlIHRoYXQgZG9uJ3QKLSAgICAgICAgZ2l2ZW4gYWJvdmUgY2hhbmdlcy4KLSAgICAg
ICogVXNlIGJlc3QgZml0IGZvciB2ZXJ5IGxhcmdlIGNodW5rcyB0byBwcmV2ZW50IHNvbWUgd29y
c3QtY2FzZXMuCi0gICAgICAqIEFkZGVkIHNvbWUgc3VwcG9ydCBmb3IgZGVidWdnaW5nCi0KLSAg
ICBWMi42LjAgU2F0IE5vdiAgNCAwNzowNToyMyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkK
LSAgICAgICogUmVtb3ZlZCBmb290ZXJzIHdoZW4gY2h1bmtzIGFyZSBpbiB1c2UuIFRoYW5rcyB0
bwotICAgICAgICBQYXVsIFdpbHNvbiAod2lsc29uQGNzLnRleGFzLmVkdSkgZm9yIHRoZSBzdWdn
ZXN0aW9uLgotCi0gICAgVjIuNS40IFdlZCBOb3YgIDEgMDc6NTQ6NTEgMTk5NSAgRG91ZyBMZWEg
IChkbCBhdCBnZWUpCi0gICAgICAqIEFkZGVkIG1hbGxvY190cmltLCB3aXRoIGhlbHAgZnJvbSBX
b2xmcmFtIEdsb2dlcgotICAgICAgICAod21nbG9ARGVudC5NRUQuVW5pLU11ZW5jaGVuLkRFKS4K
LQotICAgIFYyLjUuMyBUdWUgQXByIDI2IDEwOjE2OjAxIDE5OTQgIERvdWcgTGVhICAoZGwgYXQg
ZykKLQotICAgIFYyLjUuMiBUdWUgQXByICA1IDE2OjIwOjQwIDE5OTQgIERvdWcgTGVhICAoZGwg
YXQgZykKLSAgICAgICogcmVhbGxvYzogdHJ5IHRvIGV4cGFuZCBpbiBib3RoIGRpcmVjdGlvbnMK
LSAgICAgICogbWFsbG9jOiBzd2FwIG9yZGVyIG9mIGNsZWFuLWJpbiBzdHJhdGVneTsKLSAgICAg
ICogcmVhbGxvYzogb25seSBjb25kaXRpb25hbGx5IGV4cGFuZCBiYWNrd2FyZHMKLSAgICAgICog
VHJ5IG5vdCB0byBzY2F2ZW5nZSB1c2VkIGJpbnMKLSAgICAgICogVXNlIGJpbiBjb3VudHMgYXMg
YSBndWlkZSB0byBwcmVhbGxvY2F0aW9uCi0gICAgICAqIE9jY2FzaW9uYWxseSBiaW4gcmV0dXJu
IGxpc3QgY2h1bmtzIGluIGZpcnN0IHNjYW4KLSAgICAgICogQWRkIGEgZmV3IG9wdGltaXphdGlv
bnMgZnJvbSBjb2xpbkBueXgxMC5jcy5kdS5lZHUKLQotICAgIFYyLjUuMSBTYXQgQXVnIDE0IDE1
OjQwOjQzIDE5OTMgIERvdWcgTGVhICAoZGwgYXQgZykKLSAgICAgICogZmFzdGVyIGJpbiBjb21w
dXRhdGlvbiAmIHNsaWdodGx5IGRpZmZlcmVudCBiaW5uaW5nCi0gICAgICAqIG1lcmdlZCBhbGwg
Y29uc29saWRhdGlvbnMgdG8gb25lIHBhcnQgb2YgbWFsbG9jIHByb3BlcgotICAgICAgICAgKGVs
aW1pbmF0aW5nIG9sZCBtYWxsb2NfZmluZF9zcGFjZSAmIG1hbGxvY19jbGVhbl9iaW4pCi0gICAg
ICAqIFNjYW4gMiByZXR1cm5zIGNodW5rcyAobm90IGp1c3QgMSkKLSAgICAgICogUHJvcGFnYXRl
IGZhaWx1cmUgaW4gcmVhbGxvYyBpZiBtYWxsb2MgcmV0dXJucyAwCi0gICAgICAqIEFkZCBzdHVm
ZiB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBub24tQU5TSSBjb21waWxlcnMKLSAgICAgICAgICBm
cm9tIGtwdkByZXNlYXJjaC5hdHQuY29tCi0KLSAgICBWMi41IFNhdCBBdWcgIDcgMDc6NDE6NTkg
MTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCi0gICAgICAqIHJlbW92ZWQgcG90
ZW50aWFsIGZvciBvZGQgYWRkcmVzcyBhY2Nlc3MgaW4gcHJldl9jaHVuawotICAgICAgKiByZW1v
dmVkIGRlcGVuZGVuY3kgb24gZ2V0cGFnZXNpemUuaAotICAgICAgKiBtaXNjIGNvc21ldGljcyBh
bmQgYSBiaXQgbW9yZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uCi0gICAgICAqIGFudGljb3NtZXRp
Y3M6IG1hbmdsZWQgbmFtZXMgaW4gbWFjcm9zIHRvIGV2YWRlIGRlYnVnZ2VyIHN0cmFuZ2VuZXNz
Ci0gICAgICAqIHRlc3RlZCBvbiBzcGFyYywgaHAtNzAwLCBkZWMtbWlwcywgcnM2MDAwCi0gICAg
ICAgICAgd2l0aCBnY2MgJiBuYXRpdmUgY2MgKGhwLCBkZWMgb25seSkgYWxsb3dpbmcKLSAgICAg
ICAgICBEZXRsZWZzICYgWm9ybiBjb21wYXJpc29uIHN0dWR5IChpbiBTSUdQTEFOIE5vdGljZXMu
KQotCi0gICAgVHJpYWwgdmVyc2lvbiBGcmkgQXVnIDI4IDEzOjE0OjI5IDE5OTIgIERvdWcgTGVh
ICAoZGwgYXQgZy5vc3dlZ28uZWR1KQotICAgICAgKiBCYXNlZCBsb29zZWx5IG9uIGxpYmcrKy0x
LjJYIG1hbGxvYy4gKEl0IHJldGFpbnMgc29tZSBvZiB0aGUgb3ZlcmFsbAotICAgICAgICAgc3Ry
dWN0dXJlIG9mIG9sZCB2ZXJzaW9uLCAgYnV0IG1vc3QgZGV0YWlscyBkaWZmZXIuKQotCi0qLwpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Zhc3RfbWFsbG9jLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZToga2pzL2Zhc3RfbWFsbG9jLmgKZGlmZiAtTiBKYXZhU2NyaXB0Q29yZS9ranMvZmFzdF9tYWxs
b2MuaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Zhc3RfbWFsbG9jLmgJMTcgQXVnIDIwMDUgMDE6
MDA6MDAgLTAwMDAJMS4yCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZmFzdF9tYWxsb2MuaAkxIEph
biAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqICBCb3N0b24sIE1B
IDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBLSlNfRkFTVF9NQUxMT0NfSAot
I2RlZmluZSBLSlNfRkFTVF9NQUxMT0NfSAotCi0vLyBUaGlzIGlzIGEgY29weSBvZiBkbG1hbGxv
YywgYSBmYXN0IHNpbmdsZS10aHJlYWRlZCBtYWxsb2MgaW1wbGVtZW50YXRpb24uCi0vLyBKYXZh
U2NyaXB0Q29yZSBpcyBtdWx0aS10aHJlYWRlZCwgYnV0IGNlcnRhaW4gYWN0aW9ucyBjYW4gb25s
eSB0YWtlIHBsYWNlIHVuZGVyCi0vLyB0aGUgZ2xvYmFsIGNvbGxlY3RvciBsb2NrLiBUaGVyZWZv
cmUsIHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgb25seSBiZSB1c2VkCi0vLyB3aGlsZSBob2xkaW5n
IHRoZSBjb2xsZWN0b3IgbG9jayAodGhpcyBpcyB0cnVlIHdoZW5lbmV2ZXIgdGhlIGludGVycHJl
dGVyIGlzCi0vLyBleGVjdXRpbmcgb3IgR0MgaXMgdGFraW5nIHBsYWNlKS4KLQotI2luY2x1ZGUg
PHN0ZGxpYi5oPgotCi1uYW1lc3BhY2UgS0pTIHsKLQotdm9pZCAqa2pzX2Zhc3RfbWFsbG9jKHNp
emVfdCBuKTsKLXZvaWQgKmtqc19mYXN0X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90
IGVsZW1lbnRfc2l6ZSk7Ci12b2lkIGtqc19mYXN0X2ZyZWUodm9pZCogcCk7Ci12b2lkICpranNf
ZmFzdF9yZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBuKTsKLQotfQotCi0jZGVmaW5lIEtKU19GQVNU
X0FMTE9DQVRFRCBcCi12b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHMpIHsgcmV0dXJuIEtKUzo6
a2pzX2Zhc3RfbWFsbG9jKHMpOyB9IFwKLXZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHApIHsg
S0pTOjpranNfZmFzdF9mcmVlKHApOyB9Ci0KLSNlbmRpZiAvKiBLSlNfRkFTVF9NQUxMT0NfSCAq
LwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS41OApkaWZmIC1wIC11IC1yMS41OCBKYXZhU2NyaXB0Q29yZS9ranMvZnVu
Y3Rpb24uY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCTQgU2VwIDIwMDUg
MDY6MjE6NTQgLTAwMDAJMS41OAorKysgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAky
NyBTZXAgMjAwNSAwODo0NDo0MCAtMDAwMApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIm9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJkZWJ1Z2dlci5oIgogI2luY2x1ZGUgImNvbnRleHQuaCIK
LSNpbmNsdWRlICJzaGFyZWRfcHRyLmgiCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUg
PGVycm5vLmg+CkBAIC00Miw4ICs0MSw2IEBACiAKICNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+
CiAKLXVzaW5nIG5hbWVzcGFjZSBLWE1MQ29yZTsKLQogbmFtZXNwYWNlIEtKUyB7CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uSW1wIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24u
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNApkaWZmIC1wIC11IC1yMS4zNCBKYXZhU2NyaXB0
Q29yZS9ranMvZnVuY3Rpb24uaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgJNCBT
ZXAgMjAwNSAwMToxODoxMSAtMDAwMAkxLjM0CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rp
b24uaAkyNyBTZXAgMjAwNSAwODo0NDo0MCAtMDAwMApAQCAtODEsNyArODEsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKIAogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSAqZXhl
Yyk7CiAgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBGdW5jdGlvbkNvZGU7
IH0KLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHk7CisgICAg
U2hhcmVkUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IENs
YXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIGluZm87CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb25f
b2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUv
a2pzL2Z1bmN0aW9uX29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAt
cCAtdSAtcjEuMzEgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5jcHAKLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuY3BwCTMwIEF1ZyAyMDA1IDIzOjU2OjE0
IC0wMDAwCTEuMzEKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuY3BwCTI3
IFNlcCAyMDA1IDA4OjQ0OjQwIC0wMDAwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8c3Ry
aW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBLSlM7Ci11c2luZyBuYW1lc3BhY2UgS1hNTENvcmU7
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvblByb3RvdHlwZUlt
cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9p
ZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENv
cmUva2pzL2lkZW50aWZpZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXAg
LXUgLXIxLjE5IEphdmFTY3JpcHRDb3JlL2tqcy9pZGVudGlmaWVyLmNwcAotLS0gSmF2YVNjcmlw
dENvcmUva2pzL2lkZW50aWZpZXIuY3BwCTQgU2VwIDIwMDUgMjE6Mzg6MzIgLTAwMDAJMS4xOQor
KysgSmF2YVNjcmlwdENvcmUva2pzL2lkZW50aWZpZXIuY3BwCTI3IFNlcCAyMDA1IDA4OjQ0OjQw
IC0wMDAwCkBAIC0zNSw3ICszNSw3IEBACiAKICNpbmNsdWRlICJpZGVudGlmaWVyLmgiCiAKLSNp
bmNsdWRlICJmYXN0X21hbGxvYy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2MuaD4K
ICNpbmNsdWRlIDxzdHJpbmcuaD4gLy8gZm9yIHN0cmxlbgogI2luY2x1ZGUgPG5ldz4gLy8gZm9y
IHBsYWNlbWVudCBuZXcKIApAQCAtMTI2LDcgKzEyNiw3IEBAIFVTdHJpbmc6OlJlcCAqSWRlbnRp
Zmllcjo6YWRkKGNvbnN0IGNoYXIKICAgICAgICAgaSA9IChpICsgMSkgJiBfdGFibGVTaXplTWFz
azsKICAgICB9CiAgICAgCi0gICAgVUNoYXIgKmQgPSBzdGF0aWNfY2FzdDxVQ2hhciAqPihranNf
ZmFzdF9tYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIGxlbmd0aCkpOworICAgIFVDaGFyICpkID0gc3Rh
dGljX2Nhc3Q8VUNoYXIgKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbGVuZ3RoKSk7CiAg
ICAgZm9yIChpbnQgaiA9IDA7IGogIT0gbGVuZ3RoOyBqKyspCiAgICAgICAgIGRbal0gPSBjW2pd
OwogICAgIApAQCAtMTY1LDcgKzE2NSw3IEBAIFVTdHJpbmc6OlJlcCAqSWRlbnRpZmllcjo6YWRk
KGNvbnN0IFVDaGEKICAgICAgICAgaSA9IChpICsgMSkgJiBfdGFibGVTaXplTWFzazsKICAgICB9
CiAgICAgCi0gICAgVUNoYXIgKmQgPSBzdGF0aWNfY2FzdDxVQ2hhciAqPihranNfZmFzdF9tYWxs
b2Moc2l6ZW9mKFVDaGFyKSAqIGxlbmd0aCkpOworICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8
VUNoYXIgKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbGVuZ3RoKSk7CiAgICAgZm9yIChp
bnQgaiA9IDA7IGogIT0gbGVuZ3RoOyBqKyspCiAgICAgICAgIGRbal0gPSBzW2pdOwogICAgIApJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS43MgpkaWZmIC1wIC11IC1yMS43MiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJu
YWwuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwCTIxIFNlcCAyMDA1IDAx
OjEwOjU0IC0wMDAwCTEuNzIKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAJMjcg
U2VwIDIwMDUgMDg6NDQ6NDAgLTAwMDAKQEAgLTUyLDggKzUyLDYgQEAKIAogZXh0ZXJuIGludCBr
anN5eXBhcnNlKCk7CiAKLXVzaW5nIG5hbWVzcGFjZSBLWE1MQ29yZTsKLQogbmFtZXNwYWNlIEtK
UyB7CiAKICNpZiAhQVBQTEVfQ0hBTkdFUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVy
bmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9p
bnRlcm5hbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQwCmRpZmYgLXAgLXUgLXIxLjQwIEph
dmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJu
YWwuaAkxOSBTZXAgMjAwNSAwNjo1NzoyNyAtMDAwMAkxLjQwCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvaW50ZXJuYWwuaAkyNyBTZXAgMjAwNSAwODo0NDo0MCAtMDAwMApAQCAtMzIsNyArMzIsNyBA
QAogI2luY2x1ZGUgInR5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJzY29wZV9jaGFpbi5oIgotI2luY2x1ZGUgInNoYXJlZF9wdHIuaCIKKyNpbmNsdWRlIDxreG1s
Y29yZS9TaGFyZWRQdHIuaD4KIAogI2lmICFXSU4zMgogI2RlZmluZSBLSlNfTVVMVElQTEVfVEhS
RUFEUyAxCkBAIC0yMDIsOSArMjAyLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAqLwogICBjbGFz
cyBQYXJzZXIgewogICBwdWJsaWM6Ci0gICAgc3RhdGljIEtYTUxDb3JlOjpTaGFyZWRQdHI8UHJv
Z3JhbU5vZGU+IHBhcnNlKGNvbnN0IFVTdHJpbmcgJnNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGlu
ZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVUNoYXIgKmNvZGUsIHVuc2lnbmVkIGludCBsZW5ndGgsIGludCAqc291cmNlSWQg
PSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgKmVyckxpbmUgPSAwLCBVU3RyaW5nICplcnJNc2cgPSAwKTsKKyAgICBzdGF0aWMgU2hhcmVk
UHRyPFByb2dyYW1Ob2RlPiBwYXJzZShjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBzdGFy
dGluZ0xpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVUNoYXIgKmNvZGUsIHVuc2lnbmVkIGludCBsZW5ndGgsIGludCAqc291cmNlSWQgPSAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZXJyTGluZSA9
IDAsIFVTdHJpbmcgKmVyck1zZyA9IDApOwogICAgIHN0YXRpYyB2b2lkIGFjY2VwdChQcm9ncmFt
Tm9kZSAqcHJvZyk7CiAKICAgICBzdGF0aWMgdm9pZCBzYXZlTmV3Tm9kZShOb2RlICpub2RlKTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4zNQpkaWZmIC1wIC11IC1yMS4zNSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAotLS0gSmF2
YVNjcmlwdENvcmUva2pzL25vZGVzLmgJMjQgU2VwIDIwMDUgMjI6MzQ6MTMgLTAwMDAJMS4zNQor
KysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgJMjcgU2VwIDIwMDUgMDg6NDQ6NDEgLTAwMDAK
QEAgLTI1LDggKzI1LDggQEAKICNpZm5kZWYgX05PREVTX0hfCiAjZGVmaW5lIF9OT0RFU19IXwog
Ci0jaW5jbHVkZSAiZmFzdF9tYWxsb2MuaCIKLSNpbmNsdWRlICJzaGFyZWRfcHRyLmgiCisjaW5j
bHVkZSA8a3htbGNvcmUvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1NoYXJlZFB0
ci5oPgogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIC8vI2luY2x1ZGUgImRlYnVnZ2VyLmgiCkBA
IC03NywxMyArNzcsMTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAJCSAgT3BJbnN0YW5jZU9mCiAgIH07
CiAKLSAgY2xhc3MgTm9kZSB7CisgIGNsYXNzIE5vZGUgOiBwdWJsaWMgRmFzdEFsbG9jYXRlZCB7
CiAgIHB1YmxpYzoKICAgICBOb2RlKCk7CiAgICAgdmlydHVhbCB+Tm9kZSgpOwogCi0gICAgS0pT
X0ZBU1RfQUxMT0NBVEVEOwotCiAgICAgdmlydHVhbCBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKSA9IDA7CiAgICAgVVN0cmluZyB0b1N0cmluZygpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0ID0gMDsKQEAgLTIyNSw3ICsy
MjMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB9CiAgICAgICAgIAogICBwcml2YXRlOgotICAg
IEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gZ3JvdXA7CisgICAgU2hhcmVkUHRyPE5vZGU+IGdy
b3VwOwogICB9OwogCiAgIGNsYXNzIEVsZW1lbnROb2RlIDogcHVibGljIE5vZGUgewpAQCAtMjM4
LDkgKzIzNiw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBcnJh
eU5vZGU7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxFbGVtZW50Tm9kZT4gbGlzdDsKKyAgICBT
aGFyZWRQdHI8RWxlbWVudE5vZGU+IGxpc3Q7CiAgICAgaW50IGVsaXNpb247Ci0gICAgS1hNTENv
cmU6OlNoYXJlZFB0cjxOb2RlPiBub2RlOworICAgIFNoYXJlZFB0cjxOb2RlPiBub2RlOwogICB9
OwogCiAgIGNsYXNzIEFycmF5Tm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTI1Myw3ICsyNTEsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAg
cHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPEVsZW1lbnROb2RlPiBlbGVtZW50Owor
ICAgIFNoYXJlZFB0cjxFbGVtZW50Tm9kZT4gZWxlbWVudDsKICAgICBpbnQgZWxpc2lvbjsKICAg
ICBib29sIG9wdDsKICAgfTsKQEAgLTI2OSw5ICsyNjcsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgT2JqZWN0TGl0ZXJhbE5vZGU7Ci0gICAgS1hNTENvcmU6OlNo
YXJlZFB0cjxQcm9wZXJ0eU5vZGU+IG5hbWU7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2Rl
PiBhc3NpZ247Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxQcm9wZXJ0eVZhbHVlTm9kZT4gbGlz
dDsKKyAgICBTaGFyZWRQdHI8UHJvcGVydHlOb2RlPiBuYW1lOworICAgIFNoYXJlZFB0cjxOb2Rl
PiBhc3NpZ247CisgICAgU2hhcmVkUHRyPFByb3BlcnR5VmFsdWVOb2RlPiBsaXN0OwogICB9Owog
CiAgIGNsYXNzIE9iamVjdExpdGVyYWxOb2RlIDogcHVibGljIE5vZGUgewpAQCAtMjgxLDcgKzI3
OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0
OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8UHJvcGVydHlWYWx1ZU5vZGU+
IGxpc3Q7CisgICAgU2hhcmVkUHRyPFByb3BlcnR5VmFsdWVOb2RlPiBsaXN0OwogICB9OwogCiAg
IGNsYXNzIFByb3BlcnR5Tm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTMwNyw4ICszMDUsOCBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICBOb2RlICpzdWJzY3JpcHQoKSB7IHJldHVybiBleHByMi5nZXQo
KTsgfQogCiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByMTsK
LSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHIyOworICAgIFNoYXJlZFB0cjxOb2Rl
PiBleHByMTsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjI7CiAgIH07CiAKICAgY2xhc3MgRG90
QWNjZXNzb3JOb2RlIDogcHVibGljIE5vZGUgewpAQCAtMzIzLDcgKzMyMSw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVy
biBpZGVudDsgfQogCiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBl
eHByOworICAgIFNoYXJlZFB0cjxOb2RlPiBleHByOwogICAgIElkZW50aWZpZXIgaWRlbnQ7CiAg
IH07CiAKQEAgLTMzOCw4ICszMzYsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgQXJndW1lbnRzTm9kZTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPEFyZ3VtZW50
TGlzdE5vZGU+IGxpc3Q7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByOworICAg
IFNoYXJlZFB0cjxBcmd1bWVudExpc3ROb2RlPiBsaXN0OworICAgIFNoYXJlZFB0cjxOb2RlPiBl
eHByOwogICB9OwogCiAgIGNsYXNzIEFyZ3VtZW50c05vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC0z
NTEsNyArMzQ5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgTGlzdCBldmFsdWF0ZUxpc3QoRXhl
Y1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZz
KSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPEFyZ3VtZW50TGlz
dE5vZGU+IGxpc3Q7CisgICAgU2hhcmVkUHRyPEFyZ3VtZW50TGlzdE5vZGU+IGxpc3Q7CiAgIH07
CiAKICAgY2xhc3MgTmV3RXhwck5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC0zNjEsOCArMzU5LDgg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhl
Yyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAg
IHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByOwotICAgIEtYTUxD
b3JlOjpTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKKyAgICBTaGFyZWRQdHI8Tm9kZT4g
ZXhwcjsKKyAgICBTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKICAgfTsKIAogICBjbGFz
cyBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC0zNzEsOCArMzY5LDgg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhl
Yyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAg
IHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByOwotICAgIEtYTUxD
b3JlOjpTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKKyAgICBTaGFyZWRQdHI8Tm9kZT4g
ZXhwcjsKKyAgICBTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKICAgfTsKIAogICBjbGFz
cyBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTM4Miw3ICszODAs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBJZGVudGlmaWVyIGlkZW50OwotICAgIEtY
TUxDb3JlOjpTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKKyAgICBTaGFyZWRQdHI8QXJn
dW1lbnRzTm9kZT4gYXJnczsKICAgfTsKIAogICBjbGFzcyBGdW5jdGlvbkNhbGxCcmFja2V0Tm9k
ZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTM5MSw5ICszODksOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJvdGVjdGVkOgotICAgIEtYTUxD
b3JlOjpTaGFyZWRQdHI8Tm9kZT4gYmFzZTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+
IHN1YnNjcmlwdDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPEFyZ3VtZW50c05vZGU+IGFyZ3M7
CisgICAgU2hhcmVkUHRyPE5vZGU+IGJhc2U7CisgICAgU2hhcmVkUHRyPE5vZGU+IHN1YnNjcmlw
dDsKKyAgICBTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKICAgfTsKIAogICBjbGFzcyBG
dW5jdGlvbkNhbGxQYXJlbkJyYWNrZXROb2RlIDogcHVibGljIEZ1bmN0aW9uQ2FsbEJyYWNrZXRO
b2RlIHsKQEAgLTQwOCw5ICs0MDYsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAq
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJvdGVjdGVkOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQ
dHI8Tm9kZT4gYmFzZTsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gYmFzZTsKICAgICBJZGVudGlmaWVy
IGlkZW50OwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKKyAg
ICBTaGFyZWRQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKICAgfTsKIAogICBjbGFzcyBGdW5jdGlv
bkNhbGxQYXJlbkRvdE5vZGUgOiBwdWJsaWMgRnVuY3Rpb25DYWxsRG90Tm9kZSB7CkBAIC00MzUs
OCArNDMzLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykg
Y29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBtX2Jhc2U7
Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBtX3N1YnNjcmlwdDsKKyAgICBTaGFyZWRQ
dHI8Tm9kZT4gbV9iYXNlOworICAgIFNoYXJlZFB0cjxOb2RlPiBtX3N1YnNjcmlwdDsKICAgICBP
cGVyYXRvciBtX29wZXI7CiAgIH07CiAKQEAgLTQ0Niw3ICs0NDQsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBL
WE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IG1fYmFzZTsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gbV9i
YXNlOwogICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICBPcGVyYXRvciBtX29wZXI7CiAgIH07
CkBAIC00NjYsOCArNDY0LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2Rl
PiBtX2Jhc2U7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBtX3N1YnNjcmlwdDsKKyAg
ICBTaGFyZWRQdHI8Tm9kZT4gbV9iYXNlOworICAgIFNoYXJlZFB0cjxOb2RlPiBtX3N1YnNjcmlw
dDsKICAgfTsKIAogICBjbGFzcyBEZWxldGVEb3ROb2RlIDogcHVibGljIE5vZGUgewpAQCAtNDc2
LDcgKzQ3NCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVj
U3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMp
IGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gbV9iYXNl
OworICAgIFNoYXJlZFB0cjxOb2RlPiBtX2Jhc2U7CiAgICAgSWRlbnRpZmllciBtX2lkZW50Owog
ICB9OwogCkBAIC00ODYsNyArNDg0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAg
KmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0
cjxOb2RlPiBtX2V4cHI7CisgICAgU2hhcmVkUHRyPE5vZGU+IG1fZXhwcjsKICAgfTsKIAogICBj
bGFzcyBWb2lkTm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTQ5NSw3ICs0OTMsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToK
LSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHI7CisgICAgU2hhcmVkUHRyPE5vZGU+
IGV4cHI7CiAgIH07CiAKICAgY2xhc3MgVHlwZU9mUmVzb2x2ZU5vZGUgOiBwdWJsaWMgTm9kZSB7
CkBAIC01MTMsNyArNTExLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2Rl
PiBtX2V4cHI7CisgICAgU2hhcmVkUHRyPE5vZGU+IG1fZXhwcjsKICAgfTsKIAogICBjbGFzcyBQ
cmVmaXhSZXNvbHZlTm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTUzMiw4ICs1MzAsOCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0
ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IG1fYmFzZTsKLSAgICBLWE1MQ29yZTo6
U2hhcmVkUHRyPE5vZGU+IG1fc3Vic2NyaXB0OworICAgIFNoYXJlZFB0cjxOb2RlPiBtX2Jhc2U7
CisgICAgU2hhcmVkUHRyPE5vZGU+IG1fc3Vic2NyaXB0OwogICAgIE9wZXJhdG9yIG1fb3BlcjsK
ICAgfTsKIApAQCAtNTQzLDcgKzU0MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFZhbHVlSW1w
ICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQ
dHI8Tm9kZT4gbV9iYXNlOworICAgIFNoYXJlZFB0cjxOb2RlPiBtX2Jhc2U7CiAgICAgSWRlbnRp
ZmllciBtX2lkZW50OwogICAgIE9wZXJhdG9yIG1fb3BlcjsKICAgfTsKQEAgLTU1NCw3ICs1NTIs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsK
ICAgcHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHI7CisgICAgU2hh
cmVkUHRyPE5vZGU+IGV4cHI7CiAgIH07CiAKICAgY2xhc3MgTmVnYXRlTm9kZSA6IHB1YmxpYyBO
b2RlIHsKQEAgLTU2Myw3ICs1NjEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAq
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRy
PE5vZGU+IGV4cHI7CisgICAgU2hhcmVkUHRyPE5vZGU+IGV4cHI7CiAgIH07CiAKICAgY2xhc3Mg
Qml0d2lzZU5vdE5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC01NzIsNyArNTcwLDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6
Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByOworICAgIFNoYXJlZFB0cjxOb2Rl
PiBleHByOwogICB9OwogCiAgIGNsYXNzIExvZ2ljYWxOb3ROb2RlIDogcHVibGljIE5vZGUgewpA
QCAtNTgxLDcgKzU3OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFZhbHVlSW1wICpldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4g
ZXhwcjsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjsKICAgfTsKIAogICBjbGFzcyBNdWx0Tm9k
ZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTU5MCw4ICs1ODgsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBLWE1MQ29y
ZTo6U2hhcmVkUHRyPE5vZGU+IHRlcm0xOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4g
dGVybTI7CisgICAgU2hhcmVkUHRyPE5vZGU+IHRlcm0xOworICAgIFNoYXJlZFB0cjxOb2RlPiB0
ZXJtMjsKICAgICBjaGFyIG9wZXI7CiAgIH07CiAKQEAgLTYwMSw4ICs1OTksOCBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToK
LSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IHRlcm0xOwotICAgIEtYTUxDb3JlOjpTaGFy
ZWRQdHI8Tm9kZT4gdGVybTI7CisgICAgU2hhcmVkUHRyPE5vZGU+IHRlcm0xOworICAgIFNoYXJl
ZFB0cjxOb2RlPiB0ZXJtMjsKICAgICBjaGFyIG9wZXI7CiAgIH07CiAKQEAgLTYxMyw4ICs2MTEs
OCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsK
ICAgcHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IHRlcm0xOwotICAgIEtY
TUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gdGVybTI7CisgICAgU2hhcmVkUHRyPE5vZGU+IHRlcm0x
OworICAgIFNoYXJlZFB0cjxOb2RlPiB0ZXJtMjsKICAgICBPcGVyYXRvciBvcGVyOwogICB9Owog
CkBAIC02MjUsOCArNjIzLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2Rl
PiBleHByMTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHIyOworICAgIFNoYXJl
ZFB0cjxOb2RlPiBleHByMTsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjI7CiAgICAgT3BlcmF0
b3Igb3BlcjsKICAgfTsKIApAQCAtNjM3LDggKzYzNSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3Jl
OjpTaGFyZWRQdHI8Tm9kZT4gZXhwcjE7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBl
eHByMjsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjE7CisgICAgU2hhcmVkUHRyPE5vZGU+IGV4
cHIyOwogICAgIE9wZXJhdG9yIG9wZXI7CiAgIH07CiAKQEAgLTY0OSw4ICs2NDcsOCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0
ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHIxOwotICAgIEtYTUxDb3JlOjpT
aGFyZWRQdHI8Tm9kZT4gZXhwcjI7CisgICAgU2hhcmVkUHRyPE5vZGU+IGV4cHIxOworICAgIFNo
YXJlZFB0cjxOb2RlPiBleHByMjsKICAgICBPcGVyYXRvciBvcGVyOwogICB9OwogCkBAIC02NjQs
OCArNjYyLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykg
Y29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByMTsK
LSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHIyOworICAgIFNoYXJlZFB0cjxOb2Rl
PiBleHByMTsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjI7CiAgICAgT3BlcmF0b3Igb3BlcjsK
ICAgfTsKIApAQCAtNjc5LDkgKzY3Nyw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFZhbHVlSW1w
ICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQ
dHI8Tm9kZT4gbG9naWNhbDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHIxOwot
ICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gZXhwcjI7CisgICAgU2hhcmVkUHRyPE5vZGU+
IGxvZ2ljYWw7CisgICAgU2hhcmVkUHRyPE5vZGU+IGV4cHIxOworICAgIFNoYXJlZFB0cjxOb2Rl
PiBleHByMjsKICAgfTsKIAogICBjbGFzcyBBc3NpZ25SZXNvbHZlTm9kZSA6IHB1YmxpYyBOb2Rl
IHsKQEAgLTY5Myw3ICs2OTEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHJvdGVjdGVkOgogICAg
IElkZW50aWZpZXIgbV9pZGVudDsKICAgICBPcGVyYXRvciBtX29wZXI7Ci0gICAgS1hNTENvcmU6
OlNoYXJlZFB0cjxOb2RlPiBtX3JpZ2h0OworICAgIFNoYXJlZFB0cjxOb2RlPiBtX3JpZ2h0Owog
ICB9OwogCiAgIGNsYXNzIEFzc2lnbkJyYWNrZXROb2RlIDogcHVibGljIE5vZGUgewpAQCAtNzAz
LDEwICs3MDEsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4
ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAm
cykgY29uc3Q7CiAgIHByb3RlY3RlZDoKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IG1f
YmFzZTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IG1fc3Vic2NyaXB0OworICAgIFNo
YXJlZFB0cjxOb2RlPiBtX2Jhc2U7CisgICAgU2hhcmVkUHRyPE5vZGU+IG1fc3Vic2NyaXB0Owog
ICAgIE9wZXJhdG9yIG1fb3BlcjsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IG1fcmln
aHQ7CisgICAgU2hhcmVkUHRyPE5vZGU+IG1fcmlnaHQ7CiAgIH07CiAKICAgY2xhc3MgQXNzaWdu
RG90Tm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTcxNiwxMCArNzE0LDEwIEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcm90ZWN0ZWQ6Ci0g
ICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBtX2Jhc2U7CisgICAgU2hhcmVkUHRyPE5vZGU+
IG1fYmFzZTsKICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CiAgICAgT3BlcmF0b3IgbV9vcGVyOwot
ICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gbV9yaWdodDsKKyAgICBTaGFyZWRQdHI8Tm9k
ZT4gbV9yaWdodDsKICAgfTsKIAogICBjbGFzcyBDb21tYU5vZGUgOiBwdWJsaWMgTm9kZSB7CkBA
IC03MjgsOCArNzI2LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRl
KEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBl
eHByMTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHIyOworICAgIFNoYXJlZFB0
cjxOb2RlPiBleHByMTsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjI7CiAgIH07CiAKICAgY2xh
c3MgU3RhdExpc3ROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtNzQyLDggKzc0MCw4
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDYXNlQ2xhdXNlTm9k
ZTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFN0YXRlbWVudE5vZGU+IHN0YXRlbWVudDsKLSAg
ICBLWE1MQ29yZTo6U2hhcmVkUHRyPFN0YXRMaXN0Tm9kZT4gbGlzdDsKKyAgICBTaGFyZWRQdHI8
U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50OworICAgIFNoYXJlZFB0cjxTdGF0TGlzdE5vZGU+IGxp
c3Q7CiAgIH07CiAKICAgY2xhc3MgQXNzaWduRXhwck5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC03
NTIsNyArNzUwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4
ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAm
cykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHBy
OworICAgIFNoYXJlZFB0cjxOb2RlPiBleHByOwogICB9OwogCiAgIGNsYXNzIFZhckRlY2xOb2Rl
IDogcHVibGljIE5vZGUgewpAQCAtNzY1LDcgKzc2Myw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBw
cml2YXRlOgogICAgIFR5cGUgdmFyVHlwZTsKICAgICBJZGVudGlmaWVyIGlkZW50OwotICAgIEtY
TUxDb3JlOjpTaGFyZWRQdHI8QXNzaWduRXhwck5vZGU+IGluaXQ7CisgICAgU2hhcmVkUHRyPEFz
c2lnbkV4cHJOb2RlPiBpbml0OwogICB9OwogCiAgIGNsYXNzIFZhckRlY2xMaXN0Tm9kZSA6IHB1
YmxpYyBOb2RlIHsKQEAgLTc4MCw4ICs3NzgsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgRm9yTm9kZTsKICAgICBmcmllbmQgY2xhc3MgVmFyU3RhdGVt
ZW50Tm9kZTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFZhckRlY2xMaXN0Tm9kZT4gbGlzdDsK
LSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFZhckRlY2xOb2RlPiB2YXI7CisgICAgU2hhcmVkUHRy
PFZhckRlY2xMaXN0Tm9kZT4gbGlzdDsKKyAgICBTaGFyZWRQdHI8VmFyRGVjbE5vZGU+IHZhcjsK
ICAgfTsKIAogICBjbGFzcyBWYXJTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUg
ewpAQCAtNzkxLDcgKzc4OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBw
cm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hh
cmVkUHRyPFZhckRlY2xMaXN0Tm9kZT4gbGlzdDsKKyAgICBTaGFyZWRQdHI8VmFyRGVjbExpc3RO
b2RlPiBsaXN0OwogICB9OwogCiAgIGNsYXNzIEJsb2NrTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnRO
b2RlIHsKQEAgLTgwMSw3ICs3OTksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByb3RlY3RlZDoKLSAgICBLWE1MQ29y
ZTo6U2hhcmVkUHRyPFNvdXJjZUVsZW1lbnRzTm9kZT4gc291cmNlOworICAgIFNoYXJlZFB0cjxT
b3VyY2VFbGVtZW50c05vZGU+IHNvdXJjZTsKICAgfTsKIAogICBjbGFzcyBFbXB0eVN0YXRlbWVu
dE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CkBAIC04MTcsNyArODE1LDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlICpleGVj
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAg
cHJpdmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHI7CisgICAgU2hhcmVk
UHRyPE5vZGU+IGV4cHI7CiAgIH07CiAKICAgY2xhc3MgSWZOb2RlIDogcHVibGljIFN0YXRlbWVu
dE5vZGUgewpAQCAtODI4LDkgKzgyNiw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwg
dm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBLWE1MQ29y
ZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHI7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxTdGF0ZW1l
bnROb2RlPiBzdGF0ZW1lbnQxOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8U3RhdGVtZW50Tm9k
ZT4gc3RhdGVtZW50MjsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjsKKyAgICBTaGFyZWRQdHI8
U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50MTsKKyAgICBTaGFyZWRQdHI8U3RhdGVtZW50Tm9kZT4g
c3RhdGVtZW50MjsKICAgfTsKIAogICBjbGFzcyBEb1doaWxlTm9kZSA6IHB1YmxpYyBTdGF0ZW1l
bnROb2RlIHsKQEAgLTg0MCw4ICs4MzgsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFs
IHZvaWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENv
cmU6OlNoYXJlZFB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7Ci0gICAgS1hNTENvcmU6OlNo
YXJlZFB0cjxOb2RlPiBleHByOworICAgIFNoYXJlZFB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1l
bnQ7CisgICAgU2hhcmVkUHRyPE5vZGU+IGV4cHI7CiAgIH07CiAKICAgY2xhc3MgV2hpbGVOb2Rl
IDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtODUxLDggKzg0OSw4IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJp
dmF0ZToKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IGV4cHI7Ci0gICAgS1hNTENvcmU6
OlNoYXJlZFB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CisgICAgU2hhcmVkUHRyPE5vZGU+
IGV4cHI7CisgICAgU2hhcmVkUHRyPFN0YXRlbWVudE5vZGU+IHN0YXRlbWVudDsKICAgfTsKIAog
ICBjbGFzcyBGb3JOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtODY1LDEwICs4NjMs
MTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhF
eGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0g
JnMpIGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gZXhw
cjE7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByMjsKLSAgICBLWE1MQ29yZTo6
U2hhcmVkUHRyPE5vZGU+IGV4cHIzOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8U3RhdGVtZW50
Tm9kZT4gc3RhdGVtZW50OworICAgIFNoYXJlZFB0cjxOb2RlPiBleHByMTsKKyAgICBTaGFyZWRQ
dHI8Tm9kZT4gZXhwcjI7CisgICAgU2hhcmVkUHRyPE5vZGU+IGV4cHIzOworICAgIFNoYXJlZFB0
cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CiAgIH07CiAKICAgY2xhc3MgRm9ySW5Ob2RlIDog
cHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtODgwLDExICs4NzgsMTEgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAg
IHByaXZhdGU6CiAgICAgSWRlbnRpZmllciBpZGVudDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRy
PEFzc2lnbkV4cHJOb2RlPiBpbml0OwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gbGV4
cHI7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxOb2RlPiBleHByOwotICAgIEtYTUxDb3JlOjpT
aGFyZWRQdHI8VmFyRGVjbE5vZGU+IHZhckRlY2w7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxT
dGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CisgICAgU2hhcmVkUHRyPEFzc2lnbkV4cHJOb2RlPiBp
bml0OworICAgIFNoYXJlZFB0cjxOb2RlPiBsZXhwcjsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhw
cjsKKyAgICBTaGFyZWRQdHI8VmFyRGVjbE5vZGU+IHZhckRlY2w7CisgICAgU2hhcmVkUHRyPFN0
YXRlbWVudE5vZGU+IHN0YXRlbWVudDsKICAgfTsKIAogICBjbGFzcyBDb250aW51ZU5vZGUgOiBw
dWJsaWMgU3RhdGVtZW50Tm9kZSB7CkBAIC05MTMsNyArOTExLDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToK
LSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPE5vZGU+IHZhbHVlOworICAgIFNoYXJlZFB0cjxOb2Rl
PiB2YWx1ZTsKICAgfTsKIAogICBjbGFzcyBXaXRoTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2Rl
IHsKQEAgLTkyMyw4ICs5MjEsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQg
cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgS1hNTENvcmU6OlNo
YXJlZFB0cjxOb2RlPiBleHByOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8U3RhdGVtZW50Tm9k
ZT4gc3RhdGVtZW50OworICAgIFNoYXJlZFB0cjxOb2RlPiBleHByOworICAgIFNoYXJlZFB0cjxT
dGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CiAgIH07CiAKICAgY2xhc3MgQ2FzZUNsYXVzZU5vZGUg
OiBwdWJsaWMgTm9kZSB7CkBAIC05MzcsOCArOTM1LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
dmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAg
IEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gZXhwcjsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRy
PFN0YXRMaXN0Tm9kZT4gbGlzdDsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjsKKyAgICBTaGFy
ZWRQdHI8U3RhdExpc3ROb2RlPiBsaXN0OwogICB9OwogCiAgIGNsYXNzIENsYXVzZUxpc3ROb2Rl
IDogcHVibGljIE5vZGUgewpAQCAtOTU0LDggKzk1Miw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBDYXNlQmxvY2tOb2RlOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQ
dHI8Q2FzZUNsYXVzZU5vZGU+IGNsOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8Q2xhdXNlTGlz
dE5vZGU+IG54OworICAgIFNoYXJlZFB0cjxDYXNlQ2xhdXNlTm9kZT4gY2w7CisgICAgU2hhcmVk
UHRyPENsYXVzZUxpc3ROb2RlPiBueDsKICAgfTsKIAogICBjbGFzcyBDYXNlQmxvY2tOb2RlIDog
cHVibGljIE5vZGUgewpAQCAtOTY2LDkgKzk2NCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZp
cnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBL
WE1MQ29yZTo6U2hhcmVkUHRyPENsYXVzZUxpc3ROb2RlPiBsaXN0MTsKLSAgICBLWE1MQ29yZTo6
U2hhcmVkUHRyPENhc2VDbGF1c2VOb2RlPiBkZWY7Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxD
bGF1c2VMaXN0Tm9kZT4gbGlzdDI7CisgICAgU2hhcmVkUHRyPENsYXVzZUxpc3ROb2RlPiBsaXN0
MTsKKyAgICBTaGFyZWRQdHI8Q2FzZUNsYXVzZU5vZGU+IGRlZjsKKyAgICBTaGFyZWRQdHI8Q2xh
dXNlTGlzdE5vZGU+IGxpc3QyOwogICB9OwogCiAgIGNsYXNzIFN3aXRjaE5vZGUgOiBwdWJsaWMg
U3RhdGVtZW50Tm9kZSB7CkBAIC05NzgsOCArOTc2LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
dmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAg
IEtYTUxDb3JlOjpTaGFyZWRQdHI8Tm9kZT4gZXhwcjsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRy
PENhc2VCbG9ja05vZGU+IGJsb2NrOworICAgIFNoYXJlZFB0cjxOb2RlPiBleHByOworICAgIFNo
YXJlZFB0cjxDYXNlQmxvY2tOb2RlPiBibG9jazsKICAgfTsKIAogICBjbGFzcyBMYWJlbE5vZGUg
OiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CkBAIC05OTAsNyArOTg4LDcgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAg
IHByaXZhdGU6CiAgICAgSWRlbnRpZmllciBsYWJlbDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRy
PFN0YXRlbWVudE5vZGU+IHN0YXRlbWVudDsKKyAgICBTaGFyZWRQdHI8U3RhdGVtZW50Tm9kZT4g
c3RhdGVtZW50OwogICB9OwogCiAgIGNsYXNzIFRocm93Tm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnRO
b2RlIHsKQEAgLTk5OSw3ICs5OTcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIENv
bXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAgIEtYTUxDb3JlOjpT
aGFyZWRQdHI8Tm9kZT4gZXhwcjsKKyAgICBTaGFyZWRQdHI8Tm9kZT4gZXhwcjsKICAgfTsKIAog
ICBjbGFzcyBDYXRjaE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CkBAIC0xMDExLDcgKzEw
MDksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBJZGVudGlmaWVyIGlkZW50OwotICAg
IEtYTUxDb3JlOjpTaGFyZWRQdHI8U3RhdGVtZW50Tm9kZT4gYmxvY2s7CisgICAgU2hhcmVkUHRy
PFN0YXRlbWVudE5vZGU+IGJsb2NrOwogICB9OwogCiAgIGNsYXNzIEZpbmFsbHlOb2RlIDogcHVi
bGljIFN0YXRlbWVudE5vZGUgewpAQCAtMTAyMSw3ICsxMDE5LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRl
OgotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8U3RhdGVtZW50Tm9kZT4gYmxvY2s7CisgICAgU2hh
cmVkUHRyPFN0YXRlbWVudE5vZGU+IGJsb2NrOwogICB9OwogCiAgIGNsYXNzIFRyeU5vZGUgOiBw
dWJsaWMgU3RhdGVtZW50Tm9kZSB7CkBAIC0xMDM2LDkgKzEwMzQsOSBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZh
dGU6Ci0gICAgS1hNTENvcmU6OlNoYXJlZFB0cjxTdGF0ZW1lbnROb2RlPiBibG9jazsKLSAgICBL
WE1MQ29yZTo6U2hhcmVkUHRyPENhdGNoTm9kZT4gX2NhdGNoOwotICAgIEtYTUxDb3JlOjpTaGFy
ZWRQdHI8RmluYWxseU5vZGU+IF9maW5hbDsKKyAgICBTaGFyZWRQdHI8U3RhdGVtZW50Tm9kZT4g
YmxvY2s7CisgICAgU2hhcmVkUHRyPENhdGNoTm9kZT4gX2NhdGNoOworICAgIFNoYXJlZFB0cjxG
aW5hbGx5Tm9kZT4gX2ZpbmFsOwogICB9OwogCiAgIGNsYXNzIFBhcmFtZXRlck5vZGUgOiBwdWJs
aWMgTm9kZSB7CkBAIC0xMDU1LDcgKzEwNTMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBmcmll
bmQgY2xhc3MgRnVuY0RlY2xOb2RlOwogICAgIGZyaWVuZCBjbGFzcyBGdW5jRXhwck5vZGU7CiAg
ICAgSWRlbnRpZmllciBpZDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFBhcmFtZXRlck5vZGU+
IG5leHQ7CisgICAgU2hhcmVkUHRyPFBhcmFtZXRlck5vZGU+IG5leHQ7CiAgIH07CiAKICAgLy8g
aW5oZXJpdGVkIGJ5IFByb2dyYW1Ob2RlCkBAIC0xMDc4LDggKzEwNzYsOCBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICBmcmllbmQgY2xhc3MgRnVuY0RlY2xOb2RlOwogCiAgICAgSWRlbnRpZmllciBp
ZGVudDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFBhcmFtZXRlck5vZGU+IHBhcmFtOwotICAg
IEtYTUxDb3JlOjpTaGFyZWRQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keTsKKyAgICBTaGFyZWRQ
dHI8UGFyYW1ldGVyTm9kZT4gcGFyYW07CisgICAgU2hhcmVkUHRyPEZ1bmN0aW9uQm9keU5vZGU+
IGJvZHk7CiAgIH07CiAKICAgY2xhc3MgRnVuY0RlY2xOb2RlIDogcHVibGljIFN0YXRlbWVudE5v
ZGUgewpAQCAtMTA5NCw4ICsxMDkyLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgSWRl
bnRpZmllciBpZGVudDsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFBhcmFtZXRlck5vZGU+IHBh
cmFtOwotICAgIEtYTUxDb3JlOjpTaGFyZWRQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keTsKKyAg
ICBTaGFyZWRQdHI8UGFyYW1ldGVyTm9kZT4gcGFyYW07CisgICAgU2hhcmVkUHRyPEZ1bmN0aW9u
Qm9keU5vZGU+IGJvZHk7CiAgIH07CiAKICAgLy8gQSBsaW5rZWQgbGlzdCBvZiBzb3VyY2UgZWxl
bWVudCBub2RlcwpAQCAtMTExMSw4ICsxMTA5LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIEJsb2NrTm9kZTsKLSAgICBLWE1MQ29yZTo6U2hhcmVkUHRyPFN0YXRl
bWVudE5vZGU+IGVsZW1lbnQ7IC8vICd0aGlzJyBlbGVtZW50Ci0gICAgS1hNTENvcmU6OlNoYXJl
ZFB0cjxTb3VyY2VFbGVtZW50c05vZGU+IGVsZW1lbnRzOyAvLyBwb2ludGVyIHRvIG5leHQKKyAg
ICBTaGFyZWRQdHI8U3RhdGVtZW50Tm9kZT4gZWxlbWVudDsgLy8gJ3RoaXMnIGVsZW1lbnQKKyAg
ICBTaGFyZWRQdHI8U291cmNlRWxlbWVudHNOb2RlPiBlbGVtZW50czsgLy8gcG9pbnRlciB0byBu
ZXh0CiAgIH07CiAKICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgRnVuY3Rpb25Cb2R5Tm9k
ZSB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMyc3RyaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcKZGlmZiAtcCAtdSAtcjEuMTcgSmF2YVNjcmlwdENv
cmUva2pzL25vZGVzMnN0cmluZy5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2RlczJzdHJp
bmcuY3BwCTI0IFNlcCAyMDA1IDIyOjM0OjE0IC0wMDAwCTEuMTcKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9ub2RlczJzdHJpbmcuY3BwCTI3IFNlcCAyMDA1IDA4OjQ0OjQxIC0wMDAwCkBAIC0yMyw4
ICsyMyw2IEBACiAKICNpbmNsdWRlICJub2Rlcy5oIgogCi11c2luZyBLWE1MQ29yZTo6U2hhcmVk
UHRyOwotCiBuYW1lc3BhY2UgS0pTIHsKICAgLyoqCiAgICAqIEEgc2ltcGxlIHRleHQgc3RyZWFt
aW5nIGNsYXNzIHRoYXQgaGVscHMgd2l0aCBjb2RlIGluZGVudGF0aW9uLgpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjQ4CmRpZmYgLXAgLXUgLXIxLjQ4IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9t
YXAuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmNwcAkxOSBTZXAgMjAw
NSAwNjo1NzoyNyAtMDAwMAkxLjQ4CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFw
LmNwcAkyNyBTZXAgMjAwNSAwODo0NDo0MSAtMDAwMApAQCAtMjEsNyArMjEsNyBAQAogCiAjaW5j
bHVkZSAicHJvcGVydHlfbWFwLmgiCiAKLSNpbmNsdWRlICJmYXN0X21hbGxvYy5oIgorI2luY2x1
ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlICJvYmplY3QuaCIKICNpbmNsdWRl
ICJwcm90ZWN0LmgiCiAjaW5jbHVkZSAicmVmZXJlbmNlX2xpc3QuaCIKQEAgLTEyMiw3ICsxMjIs
NyBAQCBQcm9wZXJ0eU1hcDo6flByb3BlcnR5TWFwKCkKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgKyttaW5pbXVtS2V5c1RvUHJvY2VzczsKICAgICB9Ci0gICAga2pzX2Zhc3RfZnJlZShfdGFi
bGUpOworICAgIGZhc3RGcmVlKF90YWJsZSk7CiB9CiAKIHZvaWQgUHJvcGVydHlNYXA6OmNsZWFy
KCkKQEAgLTQyNCw3ICs0MjQsNyBAQCB2b2lkIFByb3BlcnR5TWFwOjpyZWhhc2goaW50IG5ld1Rh
YmxlU2l6CiAgICAgaW50IG9sZFRhYmxlU2l6ZSA9IG9sZFRhYmxlID8gb2xkVGFibGUtPnNpemUg
OiAwOwogICAgIGludCBvbGRUYWJsZUtleUNvdW50ID0gb2xkVGFibGUgPyBvbGRUYWJsZS0+a2V5
Q291bnQgOiAwOwogICAgIAotICAgIF90YWJsZSA9IChUYWJsZSAqKWtqc19mYXN0X2NhbGxvYygx
LCBzaXplb2YoVGFibGUpICsgKG5ld1RhYmxlU2l6ZSAtIDEpICogc2l6ZW9mKEVudHJ5KSApOwor
ICAgIF90YWJsZSA9IChUYWJsZSAqKWZhc3RDYWxsb2MoMSwgc2l6ZW9mKFRhYmxlKSArIChuZXdU
YWJsZVNpemUgLSAxKSAqIHNpemVvZihFbnRyeSkgKTsKICAgICBfdGFibGUtPnNpemUgPSBuZXdU
YWJsZVNpemU7CiAgICAgX3RhYmxlLT5zaXplTWFzayA9IG5ld1RhYmxlU2l6ZSAtIDE7CiAgICAg
X3RhYmxlLT5rZXlDb3VudCA9IG9sZFRhYmxlS2V5Q291bnQ7CkBAIC00NTgsNyArNDU4LDcgQEAg
dm9pZCBQcm9wZXJ0eU1hcDo6cmVoYXNoKGludCBuZXdUYWJsZVNpegogICAgIH0KICAgICBfdGFi
bGUtPmxhc3RJbmRleFVzZWQgPSBsYXN0SW5kZXhVc2VkOwogCi0gICAga2pzX2Zhc3RfZnJlZShv
bGRUYWJsZSk7CisgICAgZmFzdEZyZWUob2xkVGFibGUpOwogCiAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbi5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXAgLXUgLXIxLjEwIEphdmFTY3JpcHRDb3Jl
L2tqcy9zY29wZV9jaGFpbi5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc2NvcGVfY2hhaW4uaAkx
MiBBdWcgMjAwNSAyMzoyMDo0OCAtMDAwMAkxLjEwCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc2Nv
cGVfY2hhaW4uaAkyNyBTZXAgMjAwNSAwODo0NDo0MSAtMDAwMApAQCAtMjIsMTkgKzIyLDE3IEBA
CiAjaWZuZGVmIEtKU19TQ09QRV9DSEFJTl9ICiAjZGVmaW5lIEtKU19TQ09QRV9DSEFJTl9ICiAK
LSNpbmNsdWRlICJmYXN0X21hbGxvYy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2Mu
aD4KIAogbmFtZXNwYWNlIEtKUyB7CiAKICAgICBjbGFzcyBPYmplY3RJbXA7CiAgICAgCi0gICAg
Y2xhc3MgU2NvcGVDaGFpbk5vZGUgeworICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlIDogcHVibGlj
IEZhc3RBbGxvY2F0ZWQgewogICAgIHB1YmxpYzoKICAgICAgICAgU2NvcGVDaGFpbk5vZGUoU2Nv
cGVDaGFpbk5vZGUgKm4sIE9iamVjdEltcCAqbykKICAgICAgICAgICAgIDogbmV4dChuKSwgb2Jq
ZWN0KG8pLCByZWZDb3VudCgxKSB7IH0KIAotICAgICAgICBLSlNfRkFTVF9BTExPQ0FURUQ7Ci0K
ICAgICAgICAgU2NvcGVDaGFpbk5vZGUgKm5leHQ7CiAgICAgICAgIE9iamVjdEltcCAqb2JqZWN0
OwogICAgICAgICBpbnQgcmVmQ291bnQ7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvc2hhcmVk
X3B0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGtqcy9zaGFyZWRfcHRyLmgKZGlmZiAtTiBKYXZh
U2NyaXB0Q29yZS9ranMvc2hhcmVkX3B0ci5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc2hhcmVk
X3B0ci5oCTMwIEF1ZyAyMDA1IDIzOjU2OjE0IC0wMDAwCTEuMgorKysgSmF2YVNjcmlwdENvcmUv
a2pzL3NoYXJlZF9wdHIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDk4ICswLDAg
QEAKLS8vIC0qLSBjLWJhc2ljLW9mZnNldDogNCAtKi0KLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0ZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBLWE1MQ09SRV9TSEFSRURfUFRSX0gK
LSNkZWZpbmUgS1hNTENPUkVfU0hBUkVEX1BUUl9ICi0KLW5hbWVzcGFjZSBLWE1MQ29yZSB7Ci0K
LS8vIEZJWE1FOiBDaGFuZ2UgdGVtcGxhdGUgbmFtZSB0byBSZWZQdHI/Ci10ZW1wbGF0ZSA8Y2xh
c3MgVD4gY2xhc3MgU2hhcmVkUHRyCi17Ci1wdWJsaWM6Ci0gICAgU2hhcmVkUHRyKCkgOiBtX3B0
cihOVUxMKSB7fQotICAgIFNoYXJlZFB0cihUICpwdHIpIDogbV9wdHIocHRyKSB7IGlmIChwdHIp
IHB0ci0+cmVmKCk7IH0KLSAgICBTaGFyZWRQdHIoY29uc3QgU2hhcmVkUHRyICZvKSA6IG1fcHRy
KG8ubV9wdHIpIHsgaWYgKFQgKnB0ciA9IG1fcHRyKSBwdHItPnJlZigpOyB9Ci0gICAgflNoYXJl
ZFB0cigpIHsgaWYgKFQgKnB0ciA9IG1fcHRyKSBwdHItPmRlcmVmKCk7IH0KLQotICAgIHRlbXBs
YXRlIDxjbGFzcyBVPiBTaGFyZWRQdHIoY29uc3QgU2hhcmVkUHRyPFU+ICZvKSA6IG1fcHRyKG8u
Z2V0KCkpIHsgaWYgKFQgKnB0ciA9IG1fcHRyKSBwdHItPnJlZigpOyB9Ci0KLSAgICAvLyBGSVhN
RTogRGVwcmVjYXRlIGluIGZhdm9yIG9mIG9wZXJhdG9ycyBiZWxvdywgdGhlbiByZW1vdmU/Ci0g
ICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBOVUxMOyB9Ci0gICAgYm9v
bCBub3ROdWxsKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgIT0gTlVMTDsgfQotCi0gICAgLy8gRklY
TUU6IERlcHJlY2F0ZSBpbiBmYXZvciBvZiBvcGVyYXRvcj0sIHRoZW4gcmVtb3ZlPwotICAgIHZv
aWQgcmVzZXQoKSB7IGlmIChUICpwdHIgPSBtX3B0cikgcHRyLT5kZXJlZigpOyBtX3B0ciA9IE5V
TEw7IH0KLSAgICB2b2lkIHJlc2V0KFQgKm8pIHsgaWYgKG8pIG8tPnJlZigpOyBpZiAoVCAqcHRy
ID0gbV9wdHIpIHB0ci0+ZGVyZWYoKTsgbV9wdHIgPSBvOyB9Ci0gICAgCi0gICAgVCAqZ2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9wdHI7IH0KLQotICAgIFQgJm9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuICptX3B0cjsgfQotICAgIFQgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3B0cjsg
fQotCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBOVUxMOyB9
Ci0gICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyICE9IE5VTEw7IH0KLQot
ICAgIFNoYXJlZFB0ciAmb3BlcmF0b3I9KGNvbnN0IFNoYXJlZFB0ciAmKTsKLSAgICBTaGFyZWRQ
dHIgJm9wZXJhdG9yPShUICopOwotCi1wcml2YXRlOgotICAgIFQgKm1fcHRyOwotCi0gICAgb3Bl
cmF0b3IgaW50KCkgY29uc3Q7IC8vIGRlbGliZXJhdGVseSBub3QgaW1wbGVtZW50ZWQ7IGhlbHBz
IHByZXZlbnQgb3BlcmF0b3IgYm9vbCBmcm9tIGNvbnZlcnRpbmcgdG8gaW50IGFjY2lkZW50YWxs
eQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IFNoYXJlZFB0cjxUPiAmU2hhcmVkUHRyPFQ+Ojpv
cGVyYXRvcj0oY29uc3QgU2hhcmVkUHRyPFQ+ICZvKSAKLXsKLSAgICBUICpvcHRyID0gby5tX3B0
cjsKLSAgICBpZiAob3B0cikKLSAgICAgICAgb3B0ci0+cmVmKCk7Ci0gICAgaWYgKFQgKnB0ciA9
IG1fcHRyKQotICAgICAgICBwdHItPmRlcmVmKCk7Ci0gICAgbV9wdHIgPSBvcHRyOwotICAgIHJl
dHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBTaGFyZWRQdHI8VD4g
JlNoYXJlZFB0cjxUPjo6b3BlcmF0b3I9KFQgKm9wdHIpCi17Ci0gICAgaWYgKG9wdHIpCi0gICAg
ICAgIG9wdHItPnJlZigpOwotICAgIGlmIChUICpwdHIgPSBtX3B0cikKLSAgICAgICAgcHRyLT5k
ZXJlZigpOwotICAgIG1fcHRyID0gb3B0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNoYXJlZFB0cjxUPiAm
YSwgY29uc3QgU2hhcmVkUHRyPFQ+ICZiKSB7IHJldHVybiBhLmdldCgpID09IGIuZ2V0KCk7IH0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNoYXJlZFB0
cjxUPiAmYSwgY29uc3QgVCAqYikgeyByZXR1cm4gYS5nZXQoKSA9PSBiOyB9Ci10ZW1wbGF0ZSA8
Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUICphLCBjb25zdCBTaGFyZWRQ
dHI8VD4gJmIpIHsgcmV0dXJuIGEgPT0gYi5nZXQoKTsgfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTaGFyZWRQdHI8VD4gJmEsIGNvbnN0IFNoYXJl
ZFB0cjxUPiAmYikgeyByZXR1cm4gYS5nZXQoKSAhPSBiLmdldCgpOyB9Ci10ZW1wbGF0ZSA8Y2xh
c3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTaGFyZWRQdHI8VD4gJmEsIGNvbnN0
IFQgKmIpIHsgcmV0dXJuIGEuZ2V0KCkgIT0gYjsgfQotdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVCAqYSwgY29uc3QgU2hhcmVkUHRyPFQ+ICZiKSB7IHJl
dHVybiBhICE9IGIuZ2V0KCk7IH0KLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+IGlubGlu
ZSBTaGFyZWRQdHI8VD4gc3RhdGljX3BvaW50ZXJfY2FzdChjb25zdCBTaGFyZWRQdHI8VT4gJnAp
IHsgcmV0dXJuIFNoYXJlZFB0cjxUPihzdGF0aWNfY2FzdDxUICo+KHAuZ2V0KCkpKTsgfQotdGVt
cGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+IGlubGluZSBTaGFyZWRQdHI8VD4gY29uc3RfcG9pbnRl
cl9jYXN0KGNvbnN0IFNoYXJlZFB0cjxVPiAmcCkgeyByZXR1cm4gU2hhcmVkUHRyPFQ+KGNvbnN0
X2Nhc3Q8VCAqPihwLmdldCgpKSk7IH0KLQotfQotCi0jZW5kaWYgLy8gS1hNTENPUkVfU0hBUkVE
X1BUUl9ICkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NQpkaWZmIC1wIC11IC1yMS40NSBKYXZhU2Ny
aXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJp
bmdfb2JqZWN0LmNwcAkxOSBTZXAgMjAwNSAwNjo1NzoyOCAtMDAwMAkxLjQ1CisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAJMjcgU2VwIDIwMDUgMDg6NDQ6NDIgLTAwMDAK
QEAgLTc2NSw3ICs3NjUsNyBAQCBWYWx1ZUltcCAqU3RyaW5nT2JqZWN0RnVuY0ltcDo6Y2FsbEFz
RnVuCiB7CiAgIFVTdHJpbmcgczsKICAgaWYgKGFyZ3Muc2l6ZSgpKSB7Ci0gICAgVUNoYXIgKmJ1
ZiA9IHN0YXRpY19jYXN0PFVDaGFyICo+KGtqc19mYXN0X21hbGxvYyhhcmdzLnNpemUoKSAqIHNp
emVvZihVQ2hhcikpKTsKKyAgICBVQ2hhciAqYnVmID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oZmFz
dE1hbGxvYyhhcmdzLnNpemUoKSAqIHNpemVvZihVQ2hhcikpKTsKICAgICBVQ2hhciAqcCA9IGJ1
ZjsKICAgICBMaXN0SXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7CiAgICAgd2hpbGUgKGl0ICE9
IGFyZ3MuZW5kKCkpIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy91c3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYwCmRpZmYgLXAgLXUgLXIxLjYwIEphdmFTY3JpcHRD
b3JlL2tqcy91c3RyaW5nLmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuY3BwCTE2
IFNlcCAyMDA1IDIyOjQyOjMwIC0wMDAwCTEuNjAKKysrIEphdmFTY3JpcHRDb3JlL2tqcy91c3Ry
aW5nLmNwcAkyNyBTZXAgMjAwNSAwODo0NDo0MiAtMDAwMApAQCAtMzUsNyArMzUsNiBAQAogI2lu
Y2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogCi0jaW5jbHVkZSAiZmFzdF9tYWxsb2MuaCIKICNp
bmNsdWRlICJ1c3RyaW5nLmgiCiAjaW5jbHVkZSAib3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgImlk
ZW50aWZpZXIuaCIKQEAgLTE3OSw3ICsxNzgsNyBAQCBVQ2hhciYgVUNoYXJSZWZlcmVuY2U6OnJl
ZigpIGNvbnN0CiBVU3RyaW5nOjpSZXAgKlVTdHJpbmc6OlJlcDo6Y3JlYXRlQ29weWluZyhjb25z
dCBVQ2hhciAqZCwgaW50IGwpCiB7CiAgIGludCBzaXplSW5CeXRlcyA9IGwgKiBzaXplb2YoVUNo
YXIpOwotICBVQ2hhciAqY29weUQgPSBzdGF0aWNfY2FzdDxVQ2hhciAqPihranNfZmFzdF9tYWxs
b2Moc2l6ZUluQnl0ZXMpKTsKKyAgVUNoYXIgKmNvcHlEID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4o
ZmFzdE1hbGxvYyhzaXplSW5CeXRlcykpOwogICBtZW1jcHkoY29weUQsIGQsIHNpemVJbkJ5dGVz
KTsKIAogICByZXR1cm4gY3JlYXRlKGNvcHlELCBsKTsKQEAgLTIzOCw3ICsyMzcsNyBAQCB2b2lk
IFVTdHJpbmc6OlJlcDo6ZGVzdHJveSgpCiAgIGlmIChiYXNlU3RyaW5nKSB7CiAgICAgYmFzZVN0
cmluZy0+ZGVyZWYoKTsKICAgfSBlbHNlIHsKLSAgICBranNfZmFzdF9mcmVlKGJ1Zik7CisgICAg
ZmFzdEZyZWUoYnVmKTsKICAgfQogICBkZWxldGUgdGhpczsKIH0KQEAgLTM2MCw3ICszNTksNyBA
QCB2b2lkIFVTdHJpbmc6OmV4cGFuZENhcGFjaXR5KGludCByZXF1aXJlCiAKICAgaWYgKHJlcXVp
cmVkTGVuZ3RoID4gci0+Y2FwYWNpdHkpIHsKICAgICBpbnQgbmV3Q2FwYWNpdHkgPSBleHBhbmRl
ZFNpemUocmVxdWlyZWRMZW5ndGgsIHItPnByZUNhcGFjaXR5KTsKLSAgICByLT5idWYgPSBzdGF0
aWNfY2FzdDxVQ2hhciAqPihranNfZmFzdF9yZWFsbG9jKHItPmJ1ZiwgbmV3Q2FwYWNpdHkgKiBz
aXplb2YoVUNoYXIpKSk7CisgICAgci0+YnVmID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oZmFzdFJl
YWxsb2Moci0+YnVmLCBuZXdDYXBhY2l0eSAqIHNpemVvZihVQ2hhcikpKTsKICAgICByLT5jYXBh
Y2l0eSA9IG5ld0NhcGFjaXR5IC0gci0+cHJlQ2FwYWNpdHk7CiAgIH0KICAgaWYgKHJlcXVpcmVk
TGVuZ3RoID4gci0+dXNlZENhcGFjaXR5KSB7CkBAIC0zNzYsOSArMzc1LDkgQEAgdm9pZCBVU3Ry
aW5nOjpleHBhbmRQcmVDYXBhY2l0eShpbnQgcmVxdQogICAgIGludCBuZXdDYXBhY2l0eSA9IGV4
cGFuZGVkU2l6ZShyZXF1aXJlZFByZUNhcCwgci0+Y2FwYWNpdHkpOwogICAgIGludCBkZWx0YSA9
IG5ld0NhcGFjaXR5IC0gci0+Y2FwYWNpdHkgLSByLT5wcmVDYXBhY2l0eTsKIAotICAgIFVDaGFy
ICpuZXdCdWYgPSBzdGF0aWNfY2FzdDxVQ2hhciAqPihranNfZmFzdF9tYWxsb2MobmV3Q2FwYWNp
dHkgKiBzaXplb2YoVUNoYXIpKSk7CisgICAgVUNoYXIgKm5ld0J1ZiA9IHN0YXRpY19jYXN0PFVD
aGFyICo+KGZhc3RNYWxsb2MobmV3Q2FwYWNpdHkgKiBzaXplb2YoVUNoYXIpKSk7CiAgICAgbWVt
Y3B5KG5ld0J1ZiArIGRlbHRhLCByLT5idWYsIChyLT5jYXBhY2l0eSArIHItPnByZUNhcGFjaXR5
KSAqIHNpemVvZihVQ2hhcikpOwotICAgIGtqc19mYXN0X2ZyZWUoci0+YnVmKTsKKyAgICBmYXN0
RnJlZShyLT5idWYpOwogICAgIHItPmJ1ZiA9IG5ld0J1ZjsKIAogICAgIHItPnByZUNhcGFjaXR5
ID0gbmV3Q2FwYWNpdHkgLSByLT5jYXBhY2l0eTsKQEAgLTM5MSw3ICszOTAsNyBAQCB2b2lkIFVT
dHJpbmc6OmV4cGFuZFByZUNhcGFjaXR5KGludCByZXF1CiAKIFVTdHJpbmc6OlVTdHJpbmcoY2hh
ciBjKQogewotICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oa2pzX2Zhc3RfbWFs
bG9jKHNpemVvZihVQ2hhcikpKTsKKyAgICBVQ2hhciAqZCA9IHN0YXRpY19jYXN0PFVDaGFyICo+
KGZhc3RNYWxsb2Moc2l6ZW9mKFVDaGFyKSkpOwogICAgIGRbMF0gPSBjOwogICAgIHJlcCA9IFJl
cDo6Y3JlYXRlKGQsIDEpOwogfQpAQCAtNDA3LDcgKzQwNiw3IEBAIFVTdHJpbmc6OlVTdHJpbmco
Y29uc3QgY2hhciAqYykKICAgICBhdHRhY2goJlJlcDo6ZW1wdHkpOwogICAgIHJldHVybjsKICAg
fQotICBVQ2hhciAqZCA9IHN0YXRpY19jYXN0PFVDaGFyICo+KGtqc19mYXN0X21hbGxvYyhzaXpl
b2YoVUNoYXIpICogbGVuZ3RoKSk7CisgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4o
ZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbGVuZ3RoKSk7CiAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspCiAgICAgZFtpXS51YyA9IGNbaV07CiAgIHJlcCA9IFJlcDo6Y3JlYXRl
KGQsIGxlbmd0aCk7CkBAIC00NzIsNyArNDcxLDcgQEAgVVN0cmluZzo6VVN0cmluZyhjb25zdCBV
U3RyaW5nICZhLCBjb25zdAogICB9IGVsc2UgewogICAgIC8vIGEgZG9lcyBub3QgcXVhbGlmeSBm
b3IgYXBwZW5kLCBhbmQgYiBkb2VzIG5vdCBxdWFsaWZ5IGZvciBwcmVwZW5kLCBnb3R0YSBtYWtl
IGEgd2hvbGUgbmV3IHN0cmluZwogICAgIGludCBuZXdDYXBhY2l0eSA9IGV4cGFuZGVkU2l6ZShs
ZW5ndGgsIDApOwotICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oa2pzX2Zhc3Rf
bWFsbG9jKHNpemVvZihVQ2hhcikgKiBuZXdDYXBhY2l0eSkpOworICAgIFVDaGFyICpkID0gc3Rh
dGljX2Nhc3Q8VUNoYXIgKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbmV3Q2FwYWNpdHkp
KTsKICAgICBtZW1jcHkoZCwgYS5kYXRhKCksIGFTaXplICogc2l6ZW9mKFVDaGFyKSk7CiAgICAg
bWVtY3B5KGQgKyBhU2l6ZSwgYi5kYXRhKCksIGJTaXplICogc2l6ZW9mKFVDaGFyKSk7CiAgICAg
cmVwID0gUmVwOjpjcmVhdGUoZCwgbGVuZ3RoKTsKQEAgLTY0Myw3ICs2NDIsNyBAQCBVU3RyaW5n
IFVTdHJpbmc6OnNwbGljZVN1YnN0cmluZ3NXaXRoU2VwCiAgICAgdG90YWxMZW5ndGggKz0gc2Vw
YXJhdG9yc1tpXS5zaXplKCk7CiAgIH0KIAotICBVQ2hhciAqYnVmZmVyID0gc3RhdGljX2Nhc3Q8
VUNoYXIgKj4oa2pzX2Zhc3RfbWFsbG9jKHRvdGFsTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSkpOwor
ICBVQ2hhciAqYnVmZmVyID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oZmFzdE1hbGxvYyh0b3RhbExl
bmd0aCAqIHNpemVvZihVQ2hhcikpKTsKIAogICBpbnQgbWF4Q291bnQgPSBtYXgocmFuZ2VDb3Vu
dCwgc2VwYXJhdG9yQ291bnQpOwogICBpbnQgYnVmZmVyUG9zID0gMDsKQEAgLTY5Niw3ICs2OTUs
NyBAQCBVU3RyaW5nICZVU3RyaW5nOjphcHBlbmQoY29uc3QgVVN0cmluZyAmCiAgIH0gZWxzZSB7
CiAgICAgLy8gdGhpcyBpcyBzaGFyZWQgd2l0aCBzb21lb25lIHVzaW5nIG1vcmUgY2FwYWNpdHks
IGdvdHRhIG1ha2UgYSB3aG9sZSBuZXcgc3RyaW5nCiAgICAgaW50IG5ld0NhcGFjaXR5ID0gZXhw
YW5kZWRTaXplKGxlbmd0aCwgMCk7Ci0gICAgVUNoYXIgKmQgPSBzdGF0aWNfY2FzdDxVQ2hhciAq
PihranNfZmFzdF9tYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIG5ld0NhcGFjaXR5KSk7CisgICAgVUNo
YXIgKmQgPSBzdGF0aWNfY2FzdDxVQ2hhciAqPihmYXN0TWFsbG9jKHNpemVvZihVQ2hhcikgKiBu
ZXdDYXBhY2l0eSkpOwogICAgIG1lbWNweShkLCBkYXRhKCksIHRoaXNTaXplICogc2l6ZW9mKFVD
aGFyKSk7CiAgICAgbWVtY3B5KGNvbnN0X2Nhc3Q8VUNoYXIgKj4oZCArIHRoaXNTaXplKSwgdC5k
YXRhKCksIHRTaXplICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgcmVsZWFzZSgpOwpAQCAtNzQwLDcg
KzczOSw3IEBAIFVTdHJpbmcgJlVTdHJpbmc6OmFwcGVuZChjb25zdCBjaGFyICp0KQogICB9IGVs
c2UgewogICAgIC8vIHRoaXMgaXMgc2hhcmVkIHdpdGggc29tZW9uZSB1c2luZyBtb3JlIGNhcGFj
aXR5LCBnb3R0YSBtYWtlIGEgd2hvbGUgbmV3IHN0cmluZwogICAgIGludCBuZXdDYXBhY2l0eSA9
IGV4cGFuZGVkU2l6ZShsZW5ndGgsIDApOwotICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNo
YXIgKj4oa2pzX2Zhc3RfbWFsbG9jKHNpemVvZihVQ2hhcikgKiBuZXdDYXBhY2l0eSkpOworICAg
IFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIp
ICogbmV3Q2FwYWNpdHkpKTsKICAgICBtZW1jcHkoZCwgZGF0YSgpLCB0aGlzU2l6ZSAqIHNpemVv
ZihVQ2hhcikpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdFNpemU7ICsraSkKICAgICAgIGRb
dGhpc1NpemUraV0gPSB0W2ldOwpAQCAtNzYxLDcgKzc2MCw3IEBAIFVTdHJpbmcgJlVTdHJpbmc6
OmFwcGVuZCh1bnNpZ25lZCBzaG9ydCAKICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgLy8gdGhp
cyBpcyBlbXB0eSAtIG11c3QgbWFrZSBhIG5ldyByZXAgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRv
IHBvbGx1dGUgdGhlIHNoYXJlZCBlbXB0eSBvbmUgCiAgICAgaW50IG5ld0NhcGFjaXR5ID0gZXhw
YW5kZWRTaXplKDEsIDApOwotICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oa2pz
X2Zhc3RfbWFsbG9jKHNpemVvZihVQ2hhcikgKiBuZXdDYXBhY2l0eSkpOworICAgIFVDaGFyICpk
ID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbmV3Q2Fw
YWNpdHkpKTsKICAgICBkWzBdID0gYzsKICAgICByZWxlYXNlKCk7CiAgICAgcmVwID0gUmVwOjpj
cmVhdGUoZCwgMSk7CkBAIC03ODQsNyArNzgzLDcgQEAgVVN0cmluZyAmVVN0cmluZzo6YXBwZW5k
KHVuc2lnbmVkIHNob3J0IAogICB9IGVsc2UgewogICAgIC8vIHRoaXMgaXMgc2hhcmVkIHdpdGgg
c29tZW9uZSB1c2luZyBtb3JlIGNhcGFjaXR5LCBnb3R0YSBtYWtlIGEgd2hvbGUgbmV3IHN0cmlu
ZwogICAgIGludCBuZXdDYXBhY2l0eSA9IGV4cGFuZGVkU2l6ZSgobGVuZ3RoICsgMSksIDApOwot
ICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oa2pzX2Zhc3RfbWFsbG9jKHNpemVv
ZihVQ2hhcikgKiBuZXdDYXBhY2l0eSkpOworICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8VUNo
YXIgKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbmV3Q2FwYWNpdHkpKTsKICAgICBtZW1j
cHkoZCwgZGF0YSgpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKICAgICBkW2xlbmd0aF0gPSBj
OwogICAgIHJlbGVhc2UoKTsKQEAgLTg0Niw3ICs4NDUsNyBAQCBVU3RyaW5nICZVU3RyaW5nOjpv
cGVyYXRvcj0oY29uc3QgY2hhciAqCiAgICAgcmVwLT5faGFzaCA9IDA7CiAgIH0gZWxzZSB7CiAg
ICAgcmVsZWFzZSgpOwotICAgIGQgPSBzdGF0aWNfY2FzdDxVQ2hhciAqPihranNfZmFzdF9tYWxs
b2Moc2l6ZW9mKFVDaGFyKSAqIGwpKTsKKyAgICBkID0gc3RhdGljX2Nhc3Q8VUNoYXIgKj4oZmFz
dE1hbGxvYyhzaXplb2YoVUNoYXIpICogbCkpOwogICAgIHJlcCA9IFJlcDo6Y3JlYXRlKGQsIGwp
OwogICB9CiAgIGZvciAoaW50IGkgPSAwOyBpIDwgbDsgaSsrKQpAQCAtMTE1Miw3ICsxMTUxLDcg
QEAgdm9pZCBVU3RyaW5nOjpkZXRhY2goKQogewogICBpZiAocmVwLT5yYyA+IDEgfHwgcmVwLT5i
YXNlU3RyaW5nKSB7CiAgICAgaW50IGwgPSBzaXplKCk7Ci0gICAgVUNoYXIgKm4gPSBzdGF0aWNf
Y2FzdDxVQ2hhciAqPihranNfZmFzdF9tYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIGwpKTsKKyAgICBV
Q2hhciAqbiA9IHN0YXRpY19jYXN0PFVDaGFyICo+KGZhc3RNYWxsb2Moc2l6ZW9mKFVDaGFyKSAq
IGwpKTsKICAgICBtZW1jcHkobiwgZGF0YSgpLCBsICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgcmVs
ZWFzZSgpOwogICAgIHJlcCA9IFJlcDo6Y3JlYXRlKG4sIGwpOwpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL3VzdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlw
dENvcmUva2pzL3VzdHJpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MApkaWZmIC1wIC11
IC1yMS40MCBKYXZhU2NyaXB0Q29yZS9ranMvdXN0cmluZy5oCi0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvdXN0cmluZy5oCTE2IFNlcCAyMDA1IDIyOjQyOjMwIC0wMDAwCTEuNDAKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy91c3RyaW5nLmgJMjcgU2VwIDIwMDUgMDg6NDQ6NDIgLTAwMDAKQEAgLTI0LDcg
KzI0LDcgQEAKICNpZm5kZWYgX0tKU19VU1RSSU5HX0hfCiAjZGVmaW5lIF9LSlNfVVNUUklOR19I
XwogCi0jaW5jbHVkZSAiZmFzdF9tYWxsb2MuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9GYXN0TWFs
bG9jLmg+CiAKICNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC0x
OTMsNyArMTkzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIC8qKgogICAgKiBAc2hvcnQgVW5pY29k
ZSBzdHJpbmcgY2xhc3MKICAgICovCi0gIGNsYXNzIFVTdHJpbmcgeworICBjbGFzcyBVU3RyaW5n
IDogcHVibGljIEZhc3RBbGxvY2F0ZWQgewogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29u
c3QgVVN0cmluZyYsIGNvbnN0IFVTdHJpbmcmKTsKICAgICBmcmllbmQgY2xhc3MgVUNoYXJSZWZl
cmVuY2U7CiAgICAgZnJpZW5kIGNsYXNzIElkZW50aWZpZXI7CkBAIC0yMDQsNiArMjA0LDkgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICogQGludGVybmFsCiAgICAgICovCiAgICAgc3RydWN0IFJl
cCB7CisKKyAgICAgIEZBU1RfQUxMT0NBVEVEX1BPRDsKKwogICAgICAgc3RhdGljIFJlcCAqY3Jl
YXRlKFVDaGFyICpkLCBpbnQgbCk7CiAgICAgICBzdGF0aWMgUmVwICpjcmVhdGVDb3B5aW5nKGNv
bnN0IFVDaGFyICpkLCBpbnQgbCk7CiAgICAgICBzdGF0aWMgUmVwICpjcmVhdGUoUmVwICpiYXNl
LCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKTsKQEAgLTIxNiw4ICsyMTksNiBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBVQ2hhciAqLCBp
bnQgbGVuZ3RoKTsKICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBjaGFy
ICopOwogCi0gICAgICBLSlNfRkFTVF9BTExPQ0FURUQ7Ci0KICAgICAgIHZvaWQgcmVmKCkgeyAr
K3JjOyB9CiAgICAgICB2b2lkIGRlcmVmKCkgeyBpZiAoLS1yYyA9PSAwKSBkZXN0cm95KCk7IH0K
IApAQCAtMjkxLDggKzI5Miw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqLwogICAgIH5VU3Ry
aW5nKCkgeyByZWxlYXNlKCk7IH0KIAotICAgIEtKU19GQVNUX0FMTE9DQVRFRDsKLQogICAgIC8q
KgogICAgICAqIENvbnN0cnVjdHMgYSBzdHJpbmcgZnJvbSBhbiBpbnQuCiAgICAgICovCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9Bc3NlcnRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZToga3htbGNvcmUvQXNzZXJ0aW9ucy5oCmRpZmYgLU4gSmF2YVNjcmlwdENvcmUva3htbGNvcmUv
QXNzZXJ0aW9ucy5oCi0tLSBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9Bc3NlcnRpb25zLmgJMSBK
YW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgSmF2YVNjcmlwdENvcmUva3htbGNvcmUvQXNzZXJ0
aW9ucy5oCTI3IFNlcCAyMDA1IDA4OjQ0OjQyIC0wMDAwCkBAIC0wLDAgKzEsMTY4IEBACisvLyAt
Ki0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgS1hNTENPUkVfQVNTRVJUSU9OU19ICisjZGVmaW5lIEtYTUxDT1JFX0FTU0VSVElP
TlNfSAorCisvLyBubyBuYW1lc3BhY2VzIGJlY2F1c2UgdGhpcyBmaWxlIGhhcyB0byBiZSBpbmNs
dWRhYmxlIGZyb20gQyBhbmQgT2JqZWN0aXZlLUMKKworLy8gTm90ZSwgdGhpcyBmaWxlIHVzZXMg
bWFueSBHQ0MgZXh0ZW5zaW9ucywgYnV0IGl0IHNob3VsZCBiZSBjb21wYXRpYmxlIHdpdGgKKy8v
IEMsIE9iamVjdGl2ZSBDLCBDKyssIGFuZCBPYmplY3RpdmUgQysrLgorCisvLyBGb3Igbm9uLWRl
YnVnIGJ1aWxkcywgZXZlcnl0aGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorLy8gRGVmaW5p
bmcgYW55IG9mIHRoZSBzeW1ib2xzIGV4cGxpY2l0bHkgcHJldmVudHMgdGhpcyBmcm9tIGhhdmlu
ZyBhbnkgZWZmZWN0LgorCisjaWZkZWYgTkRFQlVHCisjZGVmaW5lIEFTU0VSVElPTlNfRElTQUJM
RURfREVGQVVMVCAxCisjZWxzZQorI2RlZmluZSBBU1NFUlRJT05TX0RJU0FCTEVEX0RFRkFVTFQg
MAorI2VuZGlmCisKKyNpZm5kZWYgQVNTRVJUX0RJU0FCTEVECisjZGVmaW5lIEFTU0VSVF9ESVNB
QkxFRCBBU1NFUlRJT05TX0RJU0FCTEVEX0RFRkFVTFQKKyNlbmRpZgorCisjaWZuZGVmIEFTU0VS
VF9BUkdfRElTQUJMRUQKKyNkZWZpbmUgQVNTRVJUX0FSR19ESVNBQkxFRCBBU1NFUlRJT05TX0RJ
U0FCTEVEX0RFRkFVTFQKKyNlbmRpZgorCisjaWZuZGVmIEZBVEFMX0RJU0FCTEVECisjZGVmaW5l
IEZBVEFMX0RJU0FCTEVEIEFTU0VSVElPTlNfRElTQUJMRURfREVGQVVMVAorI2VuZGlmCisKKyNp
Zm5kZWYgRVJST1JfRElTQUJMRUQKKyNkZWZpbmUgRVJST1JfRElTQUJMRUQgQVNTRVJUSU9OU19E
SVNBQkxFRF9ERUZBVUxUCisjZW5kaWYKKworI2lmbmRlZiBMT0dfRElTQUJMRUQKKyNkZWZpbmUg
TE9HX0RJU0FCTEVEIEFTU0VSVElPTlNfRElTQUJMRURfREVGQVVMVAorI2VuZGlmCisKKy8vIFRo
ZXNlIGhlbHBlciBmdW5jdGlvbnMgYXJlIGFsd2F5cyBkZWNsYXJlZCwgYnV0IG5vdCBuZWNlc3Nh
cmlseSBhbHdheXMgZGVmaW5lZCBpZiB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBpcyBkaXNh
YmxlZC4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBl
ZGVmIGVudW0geyBLWENMb2dDaGFubmVsVW5pbml0aWFsaXplZCwgS1hDTG9nQ2hhbm5lbE9mZiwg
S1hDTG9nQ2hhbm5lbE9uIH0gS1hDTG9nQ2hhbm5lbFN0YXRlOworCit0eXBlZGVmIHN0cnVjdCB7
CisgICAgdW5zaWduZWQgbWFzazsKKyAgICBjb25zdCBjaGFyICpkZWZhdWx0TmFtZTsKKyAgICBL
WENMb2dDaGFubmVsU3RhdGUgc3RhdGU7Cit9IEtYQ0xvZ0NoYW5uZWw7CisgICAgCit2b2lkIEtY
Q1JlcG9ydEFzc2VydGlvbkZhaWx1cmUoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0
IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICphc3NlcnRpb24pOwordm9pZCBLWENSZXBvcnRB
c3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2UoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNv
bnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICphc3NlcnRpb24sIGNvbnN0IGNoYXIgKmZv
cm1hdCwgLi4uKTsKK3ZvaWQgS1hDUmVwb3J0QXJndW1lbnRBc3NlcnRpb25GYWlsdXJlKGNvbnN0
IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAq
YXJnTmFtZSwgY29uc3QgY2hhciAqYXNzZXJ0aW9uKTsKK3ZvaWQgS1hDUmVwb3J0RmF0YWxFcnJv
cihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0
IGNoYXIgKmZvcm1hdCwgLi4uKSA7Cit2b2lkIEtYQ1JlcG9ydEVycm9yKGNvbnN0IGNoYXIgKmZp
bGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm9ybWF0LCAu
Li4pOwordm9pZCBLWENMb2coY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIg
KmZ1bmN0aW9uLCBLWENMb2dDaGFubmVsICpjaGFubmVsLCBjb25zdCBjaGFyICpmb3JtYXQsIC4u
Lik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKy8vIENSQVNIIC0tIGdldHMg
dXMgaW50byB0aGUgZGVidWdnZXIgb3IgdGhlIGNyYXNoIHJlcG9ydGVyIC0tIHNpZ25hbHMgYXJl
IGlnbm9yZWQgYnkgdGhlIGNyYXNoIHJlcG9ydGVyIHNvIHdlIG11c3QgZG8gYmV0dGVyCisKKyNk
ZWZpbmUgQ1JBU0goKSAqKGludCAqKTB4YmJhZGJlZWYgPSAwCisKKy8vIEFTU0VSVCwgQVNTRVJU
X1dJVEhfTUVTU0FHRSwgQVNTRVJUX05PVF9SRUFDSEVECisKKyNpZiBBU1NFUlRfRElTQUJMRUQK
KworI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSAoKHZvaWQpMCkKKyNkZWZpbmUgQVNTRVJUX1dJ
VEhfTUVTU0FHRShhc3NlcnRpb24sIGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQorI2RlZmlu
ZSBBU1NFUlRfTk9UX1JFQUNIRUQoKSAoKHZvaWQpMCkKKworI2Vsc2UKKworI2RlZmluZSBBU1NF
UlQoYXNzZXJ0aW9uKSBkbyBcCisgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBcCisgICAgICAgIEtY
Q1JlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBfX1BSRVRUWV9GVU5D
VElPTl9fLCAjYXNzZXJ0aW9uKTsgXAorICAgICAgICBDUkFTSCgpOyBcCisgICAgfSBcCit3aGls
ZSAoMCkKKyNkZWZpbmUgQVNTRVJUX1dJVEhfTUVTU0FHRShhc3NlcnRpb24sIGZvcm1hdEFuZEFy
Z3MuLi4pIGRvIFwKKyAgICBpZiAoIShhc3NlcnRpb24pKSB7IFwKKyAgICAgICAgS1hDUmVwb3J0
QXNzZXJ0aW9uRmFpbHVyZVdpdGhNZXNzYWdlKF9fRklMRV9fLCBfX0xJTkVfXywgX19QUkVUVFlf
RlVOQ1RJT05fXywgI2Fzc2VydGlvbiwgZm9ybWF0QW5kQXJncyk7IFwKKyAgICAgICAgQ1JBU0go
KTsgXAorICAgIH0gXAord2hpbGUgKDApCisjZGVmaW5lIEFTU0VSVF9OT1RfUkVBQ0hFRCgpIGRv
IHsgXAorICAgIEtYQ1JlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBf
X1BSRVRUWV9GVU5DVElPTl9fLCAwKTsgXAorICAgIENSQVNIKCk7IFwKK30gd2hpbGUgKDApCisK
KyNlbmRpZgorCisvLyBBU1NFUlRfQVJHCisKKyNpZiBBU1NFUlRfQVJHX0RJU0FCTEVECisKKyNk
ZWZpbmUgQVNTRVJUX0FSRyhhcmdOYW1lLCBhc3NlcnRpb24pICgodm9pZCkwKQorCisjZWxzZQor
CisjZGVmaW5lIEFTU0VSVF9BUkcoYXJnTmFtZSwgYXNzZXJ0aW9uKSBkbyBcCisgICAgaWYgKCEo
YXNzZXJ0aW9uKSkgeyBcCisgICAgICAgIEtYQ1JlcG9ydEFyZ3VtZW50QXNzZXJ0aW9uRmFpbHVy
ZShfX0ZJTEVfXywgX19MSU5FX18sIF9fUFJFVFRZX0ZVTkNUSU9OX18sICNhcmdOYW1lLCAjYXNz
ZXJ0aW9uKTsgXAorICAgICAgICBDUkFTSCgpOyBcCisgICAgfSBcCit3aGlsZSAoMCkKKworI2Vu
ZGlmCisKKy8vIEZBVEFMCisKKyNpZiBGQVRBTF9ESVNBQkxFRAorI2RlZmluZSBGQVRBTChmb3Jt
YXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKKyNlbHNlCisjZGVmaW5lIEZBVEFMKGZvcm1hdEFuZEFy
Z3MuLi4pIGRvIHsgXAorICAgIEtYQ1JlcG9ydEZhdGFsRXJyb3IoX19GSUxFX18sIF9fTElORV9f
LCBfX1BSRVRUWV9GVU5DVElPTl9fLCBmb3JtYXRBbmRBcmdzKTsgXAorICAgIENSQVNIKCk7IFwK
K30gd2hpbGUgKDApCisjZW5kaWYKKworLy8gRVJST1IKKworI2lmIEVSUk9SX0RJU0FCTEVECisj
ZGVmaW5lIEVSUk9SKGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQorI2Vsc2UKKyNkZWZpbmUg
RVJST1IoZm9ybWF0QW5kQXJncy4uLikgS1hDUmVwb3J0RXJyb3IoX19GSUxFX18sIF9fTElORV9f
LCBfX1BSRVRUWV9GVU5DVElPTl9fLCBmb3JtYXRBbmRBcmdzKQorI2VuZGlmCisKKy8vIExPRwor
CisjaWYgTE9HX0RJU0FCTEVECisjZGVmaW5lIExPRyhjaGFubmVsLCBmb3JtYXRBbmRBcmdzLi4u
KSAoKHZvaWQpMCkKKyNlbHNlCisjZGVmaW5lIExPRyhjaGFubmVsLCBmb3JtYXRBbmRBcmdzLi4u
KSBLWENMb2coX19GSUxFX18sIF9fTElORV9fLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAmSk9JTl9M
T0dfQ0hBTk5FTF9XSVRIX1BSRUZJWChMT0dfQ0hBTk5FTF9QUkVGSVgsIGNoYW5uZWwpLCBmb3Jt
YXRBbmRBcmdzKQorI2RlZmluZSBKT0lOX0xPR19DSEFOTkVMX1dJVEhfUFJFRklYKHByZWZpeCwg
Y2hhbm5lbCkgSk9JTl9MT0dfQ0hBTk5FTF9XSVRIX1BSRUZJWF9MRVZFTF8yKHByZWZpeCwgY2hh
bm5lbCkKKyNkZWZpbmUgSk9JTl9MT0dfQ0hBTk5FTF9XSVRIX1BSRUZJWF9MRVZFTF8yKHByZWZp
eCwgY2hhbm5lbCkgcHJlZml4ICMjIGNoYW5uZWwKKyNlbmRpZgorCisjZW5kaWYgLy8gS1hNTENP
UkVfQVNTRVJUSU9OU19ICkluZGV4OiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9Bc3NlcnRpb25z
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt4bWxjb3JlL0Fzc2VydGlvbnMubW0KZGlmZiAtTiBK
YXZhU2NyaXB0Q29yZS9reG1sY29yZS9Bc3NlcnRpb25zLm1tCi0tLSBKYXZhU2NyaXB0Q29yZS9r
eG1sY29yZS9Bc3NlcnRpb25zLm1tCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIEphdmFT
Y3JpcHRDb3JlL2t4bWxjb3JlL0Fzc2VydGlvbnMubW0JMjcgU2VwIDIwMDUgMDg6NDQ6NDIgLTAw
MDAKQEAgLTAsMCArMSwxNDQgQEAKKy8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0
IC0qLQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKKworI2Rl
ZmluZSBTVVBQT1JUX09CSkNfTE9HR0lORyAxCisKKyNpZiBTVVBQT1JUX09CSkNfTE9HR0lORwor
I2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGU3RyaW5nLmg+CisjZW5kaWYKKworI2luY2x1ZGUg
PEZvdW5kYXRpb24vTlNTdHJpbmcuaD4KKyNpbmNsdWRlIDxGb3VuZGF0aW9uL05TVXNlckRlZmF1
bHRzLmg+CisjaW5jbHVkZSA8Rm91bmRhdGlvbi9OU1NjYW5uZXIuaD4KKworZXh0ZXJuICJDIiB7
CisKK3N0YXRpYyBpbnQgKCogdmZwcmludGZfbm9fd2FybmluZykoRklMRSAqLCBjb25zdCBjaGFy
ICosIHZhX2xpc3QpID0gdmZwcmludGY7CisKK3N0YXRpYyB2b2lkIHZwcmludGZfc3RkZXJyX29i
amMoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisjaWYgU1VQUE9SVF9PQkpD
X0xPR0dJTkcKKyAgICBpZiAoIXN0cnN0cihmb3JtYXQsICIlQCIpKSB7CisgICAgICAgIENGU3Ry
aW5nUmVmIGNmRm9ybWF0ID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhOVUxMLCBmb3JtYXQs
IGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7CisgICAgICAgIENGU3RyaW5nUmVmIHN0ciA9IENGU3Ry
aW5nQ3JlYXRlV2l0aEZvcm1hdEFuZEFyZ3VtZW50cyhOVUxMLCBOVUxMLCBjZkZvcm1hdCwgYXJn
cyk7CisgICAgICAgIAorICAgICAgICBpbnQgbGVuZ3RoID0gQ0ZTdHJpbmdHZXRNYXhpbXVtU2l6
ZUZvckVuY29kaW5nKENGU3RyaW5nR2V0TGVuZ3RoKHN0ciksIGtDRlN0cmluZ0VuY29kaW5nVVRG
OCk7CisgICAgICAgIGNoYXIgKmJ1ZmZlciA9IChjaGFyICopbWFsbG9jKGxlbmd0aCArIDEpOwor
CisgICAgICAgIENGU3RyaW5nR2V0Q1N0cmluZyhzdHIsIGJ1ZmZlciwgbGVuZ3RoLCBrQ0ZTdHJp
bmdFbmNvZGluZ1VURjgpOworCisgICAgICAgIGZwdXRzKGJ1ZmZlciwgc3RkZXJyKTsKKworICAg
ICAgICBmcmVlKGJ1ZmZlcik7CisgICAgICAgIENGUmVsZWFzZShzdHIpOworICAgICAgICBDRlJl
bGVhc2UoY2ZGb3JtYXQpOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHZmcHJpbnRmX25v
X3dhcm5pbmcoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpOworfQorCit2b2lkIEtYQ1JlcG9ydEFzc2Vy
dGlvbkZhaWx1cmUoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmN0
aW9uLCBjb25zdCBjaGFyICphc3NlcnRpb24pCit7CisgICAgaWYgKGFzc2VydGlvbikKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICI9PT09PT09PT09PT09PT09PVxuQVNTRVJUSU9OIEZBSUxFRDog
JXMgKCVzOiVkICVzKVxuPT09PT09PT09PT09PT09PT1cbiIsIGFzc2VydGlvbiwgZmlsZSwgbGlu
ZSwgZnVuY3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICI9PT09PT09
PT09PT09PT09PVxuU0hPVUxEIE5FVkVSIEJFIFJFQUNIRUQgKCVzOiVkICVzKVxuPT09PT09PT09
PT09PT09PT1cbiIsIGZpbGUsIGxpbmUsIGZ1bmN0aW9uKTsKK30KKwordm9pZCBLWENSZXBvcnRB
c3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2UoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNv
bnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICphc3NlcnRpb24sIGNvbnN0IGNoYXIgKmZv
cm1hdCwgLi4uKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiPT09PT09PT09PT09PT09PT1cbkFT
U0VSVElPTiBGQUlMRUQ6ICIpOworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdz
LCBmb3JtYXQpOworICAgIHZwcmludGZfc3RkZXJyX29iamMoZm9ybWF0LCBhcmdzKTsKKyAgICB2
YV9lbmQoYXJncyk7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiVzICglczolZCAlcylcbj09PT09
PT09PT09PT09PT09XG4iLCBhc3NlcnRpb24sIGZpbGUsIGxpbmUsIGZ1bmN0aW9uKTsKK30KKwor
dm9pZCBLWENSZXBvcnRBcmd1bWVudEFzc2VydGlvbkZhaWx1cmUoY29uc3QgY2hhciAqZmlsZSwg
aW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICphcmdOYW1lLCBjb25z
dCBjaGFyICphc3NlcnRpb24pCit7CisgICAgZnByaW50ZihzdGRlcnIsICI9PT09PT09PT09PT09
PT09PVxuQVJHVU1FTlQgQkFEOiAlcywgJXMgKCVzOiVkICVzKVxuPT09PT09PT09PT09PT09PT1c
biIsIGFyZ05hbWUsIGFzc2VydGlvbiwgZmlsZSwgbGluZSwgZnVuY3Rpb24pOworfQorCit2b2lk
IEtYQ1JlcG9ydEZhdGFsRXJyb3IoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNo
YXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIj09PT09PT09PT09PT09PT09XG5GQVRBTCBFUlJPUjogIik7CisgICAgdmFfbGlzdCBh
cmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgdnByaW50Zl9zdGRlcnJfb2Jq
Yyhmb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwg
IlxuKCVzOiVkICVzKVxuPT09PT09PT09PT09PT09PT1cbiIsIGZpbGUsIGxpbmUsIGZ1bmN0aW9u
KTsKK30KKwordm9pZCBLWENSZXBvcnRFcnJvcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwg
Y29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIGZw
cmludGYoc3RkZXJyLCAiPT09PT09PT09PT09PT09PT1cbkVSUk9SOiAiKTsKKyAgICB2YV9saXN0
IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICB2cHJpbnRmX3N0ZGVycl9v
YmpjKGZvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworICAgIGZwcmludGYoc3RkZXJy
LCAiXG4oJXM6JWQgJXMpXG49PT09PT09PT09PT09PT09PVxuIiwgZmlsZSwgbGluZSwgZnVuY3Rp
b24pOworfQorCitzdGF0aWMgdm9pZCBmcHJpbnRmX29iamMoY29uc3QgY2hhciAqZm9ybWF0LCAu
Li4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Cisg
ICAgdnByaW50Zl9zdGRlcnJfb2JqYyhmb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsK
K30KKworCit2b2lkIEtYQ0xvZyhjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hh
ciAqZnVuY3Rpb24sIEtYQ0xvZ0NoYW5uZWwgKmNoYW5uZWwsIGNvbnN0IGNoYXIgKmZvcm1hdCwg
Li4uKQoreworICAgIGlmIChjaGFubmVsLT5zdGF0ZSA9PSBLWENMb2dDaGFubmVsVW5pbml0aWFs
aXplZCkgeworICAgICAgICBjaGFubmVsLT5zdGF0ZSA9IEtYQ0xvZ0NoYW5uZWxPZmY7CisgICAg
ICAgIE5TU3RyaW5nICpsb2dMZXZlbFN0cmluZyA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIG9iamVjdEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6Y2hh
bm5lbC0+ZGVmYXVsdE5hbWVdXTsKKyAgICAgICAgaWYgKGxvZ0xldmVsU3RyaW5nKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBsb2dMZXZlbDsKKyAgICAgICAgICAgIGlmICghW1tOU1NjYW5uZXIg
c2Nhbm5lcldpdGhTdHJpbmc6bG9nTGV2ZWxTdHJpbmddIHNjYW5IZXhJbnQ6JmxvZ0xldmVsXSkg
eworICAgICAgICAgICAgICAgIGZwcmludGZfb2JqYygidW5hYmxlIHRvIHBhcnNlIGhleCB2YWx1
ZSBmb3IgJXMgKCVAKSwgbG9nZ2luZyBpcyBvZmYiLCBjaGFubmVsLT5kZWZhdWx0TmFtZSwgbG9n
TGV2ZWxTdHJpbmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChsb2dMZXZlbCAm
IGNoYW5uZWwtPm1hc2spID09IGNoYW5uZWwtPm1hc2spIHsKKyAgICAgICAgICAgICAgICBjaGFu
bmVsLT5zdGF0ZSA9IEtYQ0xvZ0NoYW5uZWxPbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBpZiAoY2hhbm5lbC0+c3RhdGUgIT0gS1hDTG9nQ2hhbm5lbE9uKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFy
Z3MsIGZvcm1hdCk7CisgICAgdnByaW50Zl9zdGRlcnJfb2JqYyhmb3JtYXQsIGFyZ3MpOworICAg
IHZhX2VuZChhcmdzKTsKKyAgICBpZiAoZm9ybWF0W3N0cmxlbihmb3JtYXQpIC0gMV0gIT0gJ1xu
JykKKyAgICAgICAgcHV0YygnXG4nLCBzdGRlcnIpOworfQorCit9IC8vIGV4dGVybiAiQyIKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IGt4bWxjb3JlL0Zhc3RNYWxsb2MuY3BwCmRpZmYgLU4gSmF2YVNjcmlwdENvcmUva3ht
bGNvcmUvRmFzdE1hbGxvYy5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0Zhc3RNYWxs
b2MuY3BwCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIEphdmFTY3JpcHRDb3JlL2t4bWxj
b3JlL0Zhc3RNYWxsb2MuY3BwCTI3IFNlcCAyMDA1IDA4OjQ0OjQzIC0wMDAwCkBAIC0wLDAgKzEs
MjI2NSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDA1LCBHb29nbGUgSW5jLgorLy8gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIAorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6
CisvLyAKKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
IAorLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworLy8gLS0tCisvLyBBdXRob3I6IFNhbmpheSBHaGVtYXdhdCA8b3BlbnNvdXJjZUBnb29n
bGUuY29tPgorLy8KKy8vIEEgbWFsbG9jIHRoYXQgdXNlcyBhIHBlci10aHJlYWQgY2FjaGUgdG8g
c2F0aXNmeSBzbWFsbCBtYWxsb2MgcmVxdWVzdHMuCisvLyAoVGhlIHRpbWUgZm9yIG1hbGxvYy9m
cmVlIG9mIGEgc21hbGwgb2JqZWN0IGRyb3BzIGZyb20gMzAwIG5zIHRvIDUwIG5zLikKKy8vCisv
LyBTZWUgZG9jL3RjbWFsbG9jLmh0bWwgZm9yIGEgaGlnaC1sZXZlbAorLy8gZGVzY3JpcHRpb24g
b2YgaG93IHRoaXMgbWFsbG9jIHdvcmtzLgorLy8KKy8vIFNZTkNIUk9OSVpBVElPTgorLy8gIDEu
IFRoZSB0aHJlYWQtc3BlY2lmaWMgbGlzdHMgYXJlIGFjY2Vzc2VkIHdpdGhvdXQgYWNxdWlyaW5n
IGFueSBsb2Nrcy4KKy8vICAgICBUaGlzIGlzIHNhZmUgYmVjYXVzZSBlYWNoIHN1Y2ggbGlzdCBp
cyBvbmx5IGFjY2Vzc2VkIGJ5IG9uZSB0aHJlYWQuCisvLyAgMi4gV2UgaGF2ZSBhIGxvY2sgcGVy
IGNlbnRyYWwgZnJlZS1saXN0LCBhbmQgaG9sZCBpdCB3aGlsZSBtYW5pcHVsYXRpbmcKKy8vICAg
ICB0aGUgY2VudHJhbCBmcmVlIGxpc3QgZm9yIGEgcGFydGljdWxhciBzaXplLgorLy8gIDMuIFRo
ZSBjZW50cmFsIHBhZ2UgYWxsb2NhdG9yIGlzIHByb3RlY3RlZCBieSAicGFnZWhlYXBfbG9jayIu
CisvLyAgNC4gVGhlIHBhZ2VtYXAgKHdoaWNoIG1hcHMgZnJvbSBwYWdlLW51bWJlciB0byBkZXNj
cmlwdG9yKSwKKy8vICAgICBjYW4gYmUgcmVhZCB3aXRob3V0IGhvbGRpbmcgYW55IGxvY2tzLCBh
bmQgd3JpdHRlbiB3aGlsZSBob2xkaW5nCisvLyAgICAgdGhlICJwYWdlaGVhcF9sb2NrIi4KKy8v
CisvLyAgICAgVGhpcyBtdWx0aS10aHJlYWRlZCBhY2Nlc3MgdG8gdGhlIHBhZ2VtYXAgaXMgc2Fm
ZSBmb3IgZmFpcmx5CisvLyAgICAgc3VidGxlIHJlYXNvbnMuICBXZSBiYXNpY2FsbHkgYXNzdW1l
IHRoYXQgd2hlbiBhbiBvYmplY3QgWCBpcworLy8gICAgIGFsbG9jYXRlZCBieSB0aHJlYWQgQSBh
bmQgZGVhbGxvY2F0ZWQgYnkgdGhyZWFkIEIsIHRoZXJlIG11c3QKKy8vICAgICBoYXZlIGJlZW4g
YXBwcm9wcmlhdGUgc3luY2hyb25pemF0aW9uIGluIHRoZSBoYW5kb2ZmIG9mIG9iamVjdAorLy8g
ICAgIFggZnJvbSB0aHJlYWQgQSB0byB0aHJlYWQgQi4KKy8vCisvLyBUT0RPOiBCaWFzIHJlY2xh
bWF0aW9uIHRvIGxhcmdlciBhZGRyZXNzZXMKKy8vIFRPRE86IGltcGxlbWVudCBtYWxsaW5mby9t
YWxsb3B0CisvLyBUT0RPOiBCZXR0ZXIgdGVzdGluZworLy8gVE9ETzogUmV0dXJuIG1lbW9yeSB0
byBzeXN0ZW0KKy8vCisvLyA5LzI4LzIwMDMgKG5ldyBwYWdlLWxldmVsIGFsbG9jYXRvciByZXBs
YWNlcyBwdG1hbGxvYzIpOgorLy8gKiBtYWxsb2MvZnJlZSBvZiBzbWFsbCBvYmplY3RzIGdvZXMg
ZnJvbSB+MzAwIG5zIHRvIH41MCBucy4KKy8vICogYWxsb2NhdGlvbiBvZiBhIHJlYXNvbmFibHkg
Y29tcGxpY2F0ZWQgc3RydWN0CisvLyAgIGdvZXMgZnJvbSBhYm91dCAxMTAwIG5zIHRvIGFib3V0
IDMwMCBucy4KKworI2luY2x1ZGUgIkZhc3RNYWxsb2MuaCIKKworI2lmbmRlZiBOREVCVUcKKyNk
ZWZpbmUgVVNFX1NZU1RFTV9NQUxMT0MgMQorI2VuZGlmCisKKyNpZiBVU0VfU1lTVEVNX01BTExP
QworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK25hbWVzcGFjZSBLWE1MQ29yZSB7CisgICAgCit2
b2lkICpmYXN0TWFsbG9jKHNpemVfdCBuKSAKK3sKKyAgICByZXR1cm4gbWFsbG9jKG4pOworfQor
Cit2b2lkICpmYXN0Q2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXpl
KQoreworICAgIHJldHVybiBjYWxsb2Mobl9lbGVtZW50cywgZWxlbWVudF9zaXplKTsKK30KKwor
dm9pZCBmYXN0RnJlZSh2b2lkKiBwKQoreworICAgIGZyZWUocCk7Cit9CisKK3ZvaWQgKmZhc3RS
ZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBuKQoreworICAgIHJldHVybiByZWFsbG9jKHAsIG4pOwor
fQorCit9IC8vIG5hbWVzcGFjZSBLSlMKKworI2Vsc2UKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgor
I2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VsaWYgZGVm
aW5lZCBIQVZFX0lOVFRZUEVTX0gKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2Vsc2UKKyNpbmNs
dWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUg
PHB0aHJlYWQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgIlRDU3BpbkxvY2suaCIKKyNpbmNsdWRlICJUQ1Bh
Z2VNYXAuaCIKKyNpbmNsdWRlICJUQ1N5c3RlbUFsbG9jLmgiCisKKyNpbmNsdWRlICJBc3NlcnRp
b25zLmgiCisKKyNpZiBLWENfQ0hBTkdFUworbmFtZXNwYWNlIEtYTUxDb3JlIHsKKworI2RlZmlu
ZSBtYWxsb2MgZmFzdE1hbGxvYworI2RlZmluZSBjYWxsb2MgZmFzdENhbGxvYworI2RlZmluZSBm
cmVlIGZhc3RGcmVlCisjZGVmaW5lIHJlYWxsb2MgZmFzdFJlYWxsb2MKKworI2RlZmluZSBNRVNT
QUdFIEVSUk9SCisjZGVmaW5lIENIRUNLX0NPTkRJVElPTiBBU1NFUlQKKworI2VuZGlmCisKKyNp
ZiBkZWZpbmVkIEhBVkVfSU5UVFlQRVNfSAorI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUwor
I2luY2x1ZGUgPGludHR5cGVzLmg+CisjZGVmaW5lIExMVSAgIFBSSXU2NAorI2Vsc2UKKyNkZWZp
bmUgTExVICAgImxsdSIgICAgICAgICAgICAgIC8vIGhvcGUgZm9yIHRoZSBiZXN0CisjZW5kaWYK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBDb25maWd1cmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gTm90
IGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIG1h
a2UKKy8vIHNlbnNlLiAgSW4gcGFydGljdWxhciwgaWYga01heFNpemUgaW5jcmVhc2VzLCB5b3Ug
bWF5IGhhdmUgdG8KKy8vIGluY3JlYXNlIGtOdW1DbGFzc2VzIGFzIHdlbGwuCitzdGF0aWMgY29u
c3Qgc2l6ZV90IGtQYWdlU2hpZnQgID0gMTI7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGtQYWdlU2l6
ZSAgID0gMSA8PCBrUGFnZVNoaWZ0Oworc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4U2l6ZSAgICA9
IDh1ICoga1BhZ2VTaXplOworc3RhdGljIGNvbnN0IHNpemVfdCBrQWxpZ25TaGlmdCA9IDM7Citz
dGF0aWMgY29uc3Qgc2l6ZV90IGtBbGlnbm1lbnQgID0gMSA8PCBrQWxpZ25TaGlmdDsKK3N0YXRp
YyBjb25zdCBzaXplX3Qga051bUNsYXNzZXMgPSAxNzA7CisKKy8vIE1pbmltdW0gbnVtYmVyIG9m
IHBhZ2VzIHRvIGZldGNoIGZyb20gc3lzdGVtIGF0IGEgdGltZS4gIE11c3QgYmUKKy8vIHNpZ25p
ZmljYW50bHkgYmlnZ2VyIHRoYW4ga0Jsb2NrU2l6ZSB0byBhbW9ydGl6ZSBzeXN0ZW0tY2FsbAor
Ly8gb3ZlcmhlYWQsIGFuZCBhbHNvIHRvIHJlZHVjZSBleHRlcm5hbCBmcmFnZW1lbnRhdGlvbi4g
IEFsc28sIHdlCisvLyBzaG91bGQga2VlcCB0aGlzIHZhbHVlIGJpZyBiZWNhdXNlIHZhcmlvdXMg
aW5jYXJuYXRpb25zIG9mIExpbnV4CisvLyBoYXZlIHNtYWxsIGxpbWl0cyBvbiB0aGUgbnVtYmVy
IG9mIG1tYXAoKSByZWdpb25zIHBlcgorLy8gYWRkcmVzcy1zcGFjZS4KK3N0YXRpYyBjb25zdCBz
aXplX3Qga01pblN5c3RlbUFsbG9jID0gMSA8PCAoMjAgLSBrUGFnZVNoaWZ0KTsKKworLy8gTnVt
YmVyIG9mIG9iamVjdHMgdG8gbW92ZSBiZXR3ZWVuIGEgcGVyLXRocmVhZCBsaXN0IGFuZCBhIGNl
bnRyYWwKKy8vIGxpc3QgaW4gb25lIHNob3QuICBXZSB3YW50IHRoaXMgdG8gYmUgbm90IHRvbyBz
bWFsbCBzbyB3ZSBjYW4KKy8vIGFtb3J0aXplIHRoZSBsb2NrIG92ZXJoZWFkIGZvciBhY2Nlc3Np
bmcgdGhlIGNlbnRyYWwgbGlzdC4gIE1ha2luZworLy8gaXQgdG9vIGJpZyBtYXkgdGVtcG9yYXJp
bHkgY2F1c2UgdW5uZWNlc3NhcnkgbWVtb3J5IHdhc3RhZ2UgaW4gdGhlCisvLyBwZXItdGhyZWFk
IGZyZWUgbGlzdCB1bnRpbCB0aGUgc2NhdmVuZ2VyIGNsZWFucyB1cCB0aGUgbGlzdC4KK3N0YXRp
YyBjb25zdCBpbnQga051bU9iamVjdHNUb01vdmUgPSAzMjsKKworLy8gTWF4aW11bSBsZW5ndGgg
d2UgYWxsb3cgYSBwZXItdGhyZWFkIGZyZWUtbGlzdCB0byBoYXZlIGJlZm9yZSB3ZQorLy8gbW92
ZSBvYmplY3RzIGZyb20gaXQgaW50byB0aGUgY29ycmVzcG9uZGluZyBjZW50cmFsIGZyZWUtbGlz
dC4gIFdlCisvLyB3YW50IHRoaXMgYmlnIHRvIGF2b2lkIGxvY2tpbmcgdGhlIGNlbnRyYWwgZnJl
ZS1saXN0IHRvbyBvZnRlbi4gIEl0CisvLyBzaG91bGQgbm90IGh1cnQgdG8gbWFrZSB0aGlzIGxp
c3Qgc29tZXdoYXQgYmlnIGJlY2F1c2UgdGhlCisvLyBzY2F2ZW5naW5nIGNvZGUgd2lsbCBzaHJp
bmsgaXQgZG93biB3aGVuIGl0cyBjb250ZW50cyBhcmUgbm90IGluIHVzZS4KK3N0YXRpYyBjb25z
dCBpbnQga01heEZyZWVMaXN0TGVuZ3RoID0gMjU2OworCisvLyBMb3dlciBhbmQgdXBwZXIgYm91
bmRzIG9uIHRoZSBwZXItdGhyZWFkIGNhY2hlIHNpemVzCitzdGF0aWMgY29uc3Qgc2l6ZV90IGtN
aW5UaHJlYWRDYWNoZVNpemUgPSBrTWF4U2l6ZSAqIDI7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGtN
YXhUaHJlYWRDYWNoZVNpemUgPSAyIDw8IDIwOworCisvLyBEZWZhdWx0IGJvdW5kIG9uIHRoZSB0
b3RhbCBhbW91bnQgb2YgdGhyZWFkIGNhY2hlcworc3RhdGljIGNvbnN0IHNpemVfdCBrRGVmYXVs
dE92ZXJhbGxUaHJlYWRDYWNoZVNpemUgPSAxNiA8PCAyMDsKKworLy8gRm9yIGFsbCBzcGFuLWxl
bmd0aHMgPCBrTWF4UGFnZXMgd2Uga2VlcCBhbiBleGFjdC1zaXplIGxpc3QuCisvLyBSRVFVSVJF
RDoga01heFBhZ2VzID49IGtNaW5TeXN0ZW1BbGxvYzsKK3N0YXRpYyBjb25zdCBzaXplX3Qga01h
eFBhZ2VzID0ga01pblN5c3RlbUFsbG9jOworCisvLyBUd2ljZSB0aGUgYXBwcm94aW1hdGUgZ2Fw
IGJldHdlZW4gc2FtcGxpbmcgYWN0aW9ucy4KKy8vIEkuZS4sIHdlIHRha2Ugb25lIHNhbXBsZSBh
cHByb3hpbWF0ZWx5IG9uY2UgZXZlcnkKKy8vICAgICAga1NhbXBsZVBhcmFtZXRlci8yCisvLyBi
eXRlcyBvZiBhbGxvY2F0aW9uLCBpLmUuLCB+IG9uY2UgZXZlcnkgMTI4S0IuCisvLyBNdXN0IGJl
IGEgcHJpbWUgbnVtYmVyLgorc3RhdGljIGNvbnN0IHNpemVfdCBrU2FtcGxlUGFyYW1ldGVyID0g
MjY2MDUzOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1hcHBpbmcgZnJvbSBzaXplIHRvIHNpemVfY2xh
c3MgYW5kIHZpY2UgdmVyc2EKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBBIHBhaXIgb2YgYXJyYXlzIHdl
IHVzZSBmb3IgaW1wbGVtZW50aW5nIHRoZSBtYXBwaW5nIGZyb20gYSBzaXplIHRvCisvLyBpdHMg
c2l6ZSBjbGFzcy4gIEluZGV4ZWQgYnkgImZsb29yKGxnKHNpemUpKSIuCitzdGF0aWMgY29uc3Qg
aW50IGtTaXplQml0cyA9IDggKiBzaXplb2Yoc2l6ZV90KTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFy
IHNpemVfYmFzZVtrU2l6ZUJpdHNdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2l6ZV9zaGlmdFtr
U2l6ZUJpdHNdOworCisvLyBNYXBwaW5nIGZyb20gc2l6ZSBjbGFzcyB0byBzaXplCitzdGF0aWMg
c2l6ZV90IGNsYXNzX3RvX3NpemVba051bUNsYXNzZXNdOworCisvLyBNYXBwaW5nIGZyb20gc2l6
ZSBjbGFzcyB0byBudW1iZXIgb2YgcGFnZXMgdG8gYWxsb2NhdGUgYXQgYSB0aW1lCitzdGF0aWMg
c2l6ZV90IGNsYXNzX3RvX3BhZ2VzW2tOdW1DbGFzc2VzXTsKKworLy8gUmV0dXJuIGZsb29yKGxv
ZzIobikpIGZvciBuID4gMC4KKyNpZiBkZWZpbmVkIF9faTM4Nl9fICYmIGRlZmluZWQgX19HTlVD
X18KK3N0YXRpYyBpbmxpbmUgaW50IExnRmxvb3Ioc2l6ZV90IG4pIHsKKyAgLy8gInJvIiBmb3Ig
dGhlIGlucHV0IHNwZWMgbWVhbnMgdGhlIGlucHV0IGNhbiBjb21lIGZyb20gZWl0aGVyIGEKKyAg
Ly8gcmVnaXN0ZXIgKCJyIikgb3Igb2Zmc2V0YWJsZSBtZW1vcnkgKCJvIikuCisgIGludCByZXN1
bHQ7CisgIF9fYXNtX18oImJzcmwgICUxLCAlMCIKKyAgICAgICAgICA6ICI9ciIgKHJlc3VsdCkg
ICAgICAgICAgICAgICAvLyBPdXRwdXQgc3BlYworICAgICAgICAgIDogInJvIiAobikgICAgICAg
ICAgICAgICAgICAgIC8vIElucHV0IHNwZWMKKyAgICAgICAgICA6ICJjYyIgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDbG9iYmVycyBjb25kaXRpb24tY29kZXMKKyAgICAgICAgICApOworICBy
ZXR1cm4gcmVzdWx0OworfQorCisjZWxpZiBkZWZpbmVkIF9fcHBjX18gJiYgZGVmaW5lZCBfX0dO
VUNfXworc3RhdGljIGlubGluZSBpbnQgTGdGbG9vcihzaXplX3QgbikgeworICAvLyAiciIgZm9y
IHRoZSBpbnB1dCBzcGVjIG1lYW5zIHRoZSBpbnB1dCBtdXN0IGNvbWUgZnJvbSBhCisgIC8vIHJl
Z2lzdGVyICgiciIpCisgIGludCByZXN1bHQ7CisKKyAgX19hc21fXyAoIntjbnRsenxjbnRsend9
ICUwLCUxIiAKKyAgICAgICAgICAgOiAiPXIiIChyZXN1bHQpICAgICAgICAgICAgICAvLyBPdXRw
dXQgc3BlYworICAgICAgICAgICA6ICJyIiAobikpOyAgICAgICAgICAgICAgICAgIC8vIElucHV0
IHNwZWMKKworICByZXR1cm4gMzEgLSByZXN1bHQ7Cit9CisKKyNlbHNlCisvLyBOb3RlOiB0aGUg
Zm9sbG93aW5nIG9ubHkgd29ya3MgZm9yICJuInMgdGhhdCBmaXQgaW4gMzItYml0cywgYnV0Cisv
LyB0aGF0IGlzIGZpbmUgc2luY2Ugd2Ugb25seSB1c2UgaXQgZm9yIHNtYWxsIHNpemVzLgorc3Rh
dGljIGlubGluZSBpbnQgTGdGbG9vcihzaXplX3QgbikgeworICBpbnQgbG9nID0gMDsKKyAgZm9y
IChpbnQgaSA9IDQ7IGkgPj0gMDsgLS1pKSB7CisgICAgaW50IHNoaWZ0ID0gKDEgPDwgaSk7Cisg
ICAgc2l6ZV90IHggPSBuID4+IHNoaWZ0OworICAgIGlmICh4ICE9IDApIHsKKyAgICAgIG4gPSB4
OworICAgICAgbG9nICs9IHNoaWZ0OworICAgIH0KKyAgfQorICBBU1NFUlQobiA9PSAxKTsKKyAg
cmV0dXJuIGxvZzsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCBTaXplQ2xhc3Moc2l6
ZV90IHNpemUpIHsKKyAgaWYgKHNpemUgPT0gMCkgc2l6ZSA9IDE7CisgIGNvbnN0IGludCBsZyA9
IExnRmxvb3Ioc2l6ZSk7CisgIGNvbnN0IGludCBhbGlnbiA9IHNpemVfc2hpZnRbbGddOworICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzaXplX2Jhc2VbbGddKSArICgoc2l6ZS0xKSA+PiBhbGln
bik7Cit9CisKKy8vIEdldCB0aGUgYnl0ZS1zaXplIGZvciBhIHNwZWNpZmllZCBjbGFzcworc3Rh
dGljIGlubGluZSBzaXplX3QgQnl0ZVNpemVGb3JDbGFzcyhzaXplX3QgY2wpIHsKKyAgcmV0dXJu
IGNsYXNzX3RvX3NpemVbY2xdOworfQorCisvLyBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGFycmF5
cworc3RhdGljIHZvaWQgSW5pdFNpemVDbGFzc2VzKCkgeworICAvLyBTcGVjaWFsIGluaXRpYWxp
emF0aW9uIGZvciBzbWFsbCBzaXplcworICBmb3IgKHNpemVfdCBsZyA9IDA7IGxnIDwga0FsaWdu
U2hpZnQ7IGxnKyspIHsKKyAgICBzaXplX2Jhc2VbbGddID0gMTsKKyAgICBzaXplX3NoaWZ0W2xn
XSA9IGtBbGlnblNoaWZ0OworICB9CisKKyAgc2l6ZV90IG5leHRfY2xhc3MgPSAxOworICBpbnQg
YWxpZ25zaGlmdCA9IGtBbGlnblNoaWZ0OworICBpbnQgbGFzdF9sZyA9IC0xOworICBmb3IgKHNp
emVfdCBzaXplID0ga0FsaWdubWVudDsgc2l6ZSA8PSBrTWF4U2l6ZTsgc2l6ZSArPSAoMSA8PCBh
bGlnbnNoaWZ0KSkgeworICAgIGludCBsZyA9IExnRmxvb3Ioc2l6ZSk7CisgICAgaWYgKGxnID4g
bGFzdF9sZykgeworICAgICAgLy8gSW5jcmVhc2UgYWxpZ25tZW50IGV2ZXJ5IHNvIG9mdGVuLgor
ICAgICAgLy8KKyAgICAgIC8vIFNpbmNlIHdlIGRvdWJsZSB0aGUgYWxpZ25tZW50IGV2ZXJ5IHRp
bWUgc2l6ZSBkb3VibGVzIGFuZAorICAgICAgLy8gc2l6ZSA+PSAxMjgsIHRoaXMgbWVhbnMgdGhh
dCBzcGFjZSB3YXN0ZWQgZHVlIHRvIGFsaWdubWVudCBpcworICAgICAgLy8gYXQgbW9zdCAxNi8x
MjggaS5lLiwgMTIuNSUuICBQbHVzIHdlIGNhcCB0aGUgYWxpZ25tZW50IGF0IDI1NgorICAgICAg
Ly8gYnl0ZXMsIHNvIHRoZSBzcGFjZSB3YXN0ZWQgYXMgYSBwZXJjZW50YWdlIHN0YXJ0cyBmYWxs
aW5nIGZvcgorICAgICAgLy8gc2l6ZXMgPiAySy4KKyAgICAgIGlmICgobGcgPj0gNykgJiYgKGFs
aWduc2hpZnQgPCA4KSkgeworICAgICAgICBhbGlnbnNoaWZ0Kys7CisgICAgICB9CisgICAgICBz
aXplX2Jhc2VbbGddID0gbmV4dF9jbGFzcyAtICgoc2l6ZS0xKSA+PiBhbGlnbnNoaWZ0KTsKKyAg
ICAgIHNpemVfc2hpZnRbbGddID0gYWxpZ25zaGlmdDsKKyAgICB9CisKKyAgICBjbGFzc190b19z
aXplW25leHRfY2xhc3NdID0gc2l6ZTsKKyAgICBsYXN0X2xnID0gbGc7CisKKyAgICBuZXh0X2Ns
YXNzKys7CisgIH0KKyAgaWYgKG5leHRfY2xhc3MgPj0ga051bUNsYXNzZXMpIHsKKyAgICBNRVNT
QUdFKCJ1c2VkIHVwIHRvbyBtYW55IHNpemUgY2xhc3NlczogJWRcbiIsIG5leHRfY2xhc3MpOwor
ICAgIGFib3J0KCk7CisgIH0KKworICAvLyBJbml0aWFsaXplIHRoZSBudW1iZXIgb2YgcGFnZXMg
d2Ugc2hvdWxkIGFsbG9jYXRlIHRvIHNwbGl0IGludG8KKyAgLy8gc21hbGwgb2JqZWN0cyBmb3Ig
YSBnaXZlbiBjbGFzcy4KKyAgZm9yIChzaXplX3QgY2wgPSAxOyBjbCA8IG5leHRfY2xhc3M7IGNs
KyspIHsKKyAgICAvLyBBbGxvY2F0ZSBlbm91Z2ggcGFnZXMgc28gbGVmdG92ZXIgaXMgbGVzcyB0
aGFuIDEvOCBvZiB0b3RhbC4KKyAgICAvLyBUaGlzIGJvdW5kcyB3YXN0ZWQgc3BhY2UgdG8gYXQg
bW9zdCAxMi41JS4KKyAgICBzaXplX3QgcHNpemUgPSBrUGFnZVNpemU7CisgICAgY29uc3Qgc2l6
ZV90IHMgPSBjbGFzc190b19zaXplW2NsXTsKKyAgICB3aGlsZSAoKHBzaXplICUgcykgPiAocHNp
emUgPj4gMykpIHsKKyAgICAgIHBzaXplICs9IGtQYWdlU2l6ZTsKKyAgICB9CisgICAgY2xhc3Nf
dG9fcGFnZXNbY2xdID0gcHNpemUgPj4ga1BhZ2VTaGlmdDsKKyAgfQorCisgIC8vIERvdWJsZS1j
aGVjayBzaXplcyBqdXN0IHRvIGJlIHNhZmUKKyAgZm9yIChzaXplX3Qgc2l6ZSA9IDA7IHNpemUg
PD0ga01heFNpemU7IHNpemUrKykgeworICAgIGNvbnN0IHNpemVfdCBzYyA9IFNpemVDbGFzcyhz
aXplKTsKKyAgICBpZiAoc2MgPT0gMCkgeworICAgICAgTUVTU0FHRSgiQmFkIHNpemUgY2xhc3Mg
JWQgZm9yICUiIFBSSXVTICJcbiIsIHNjLCBzaXplKTsKKyAgICAgIGFib3J0KCk7CisgICAgfQor
ICAgIGlmIChzYyA+IDEgJiYgc2l6ZSA8PSBjbGFzc190b19zaXplW3NjLTFdKSB7CisgICAgICBN
RVNTQUdFKCJBbGxvY2F0aW5nIHVubmVjZXNzYXJpbHkgbGFyZ2UgY2xhc3MgJWQgZm9yICUiIFBS
SXVTCisgICAgICAgICAgICAgICJcbiIsIHNjLCBzaXplKTsKKyAgICAgIGFib3J0KCk7CisgICAg
fQorICAgIGlmIChzYyA+PSBrTnVtQ2xhc3NlcykgeworICAgICAgTUVTU0FHRSgiQmFkIHNpemUg
Y2xhc3MgJWQgZm9yICUiIFBSSXVTICJcbiIsIHNjLCBzaXplKTsKKyAgICAgIGFib3J0KCk7Cisg
ICAgfQorICAgIGNvbnN0IHNpemVfdCBzID0gY2xhc3NfdG9fc2l6ZVtzY107CisgICAgaWYgKHNp
emUgPiBzKSB7CisgICAgICBNRVNTQUdFKCJCYWQgc2l6ZSAlIiBQUkl1UyAiIGZvciAlIiBQUkl1
UyAiIChzYyA9ICVkKVxuIiwgcywgc2l6ZSwgc2MpOworICAgICAgYWJvcnQoKTsKKyAgICB9Cisg
ICAgaWYgKHMgPT0gMCkgeworICAgICAgTUVTU0FHRSgiQmFkIHNpemUgJSIgUFJJdVMgIiBmb3Ig
JSIgUFJJdVMgIiAoc2MgPSAlZClcbiIsIHMsIHNpemUsIHNjKTsKKyAgICAgIGFib3J0KCk7Cisg
ICAgfQorICB9Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNpbXBsZSBhbGxvY2F0b3Ig
Zm9yIG9iamVjdHMgb2YgYSBzcGVjaWZpZWQgdHlwZS4gIEV4dGVybmFsIGxvY2tpbmcKKy8vIGlz
IHJlcXVpcmVkIGJlZm9yZSBhY2Nlc3Npbmcgb25lIG9mIHRoZXNlIG9iamVjdHMuCisvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKKy8vIE1ldGFkYXRhIGFsbG9jYXRvciAtLSBrZWVwcyBzdGF0cyBhYm91
dCBob3cgbWFueSBieXRlcyBhbGxvY2F0ZWQKK3N0YXRpYyB1aW50NjRfdCBtZXRhZGF0YV9zeXN0
ZW1fYnl0ZXMgPSAwOworc3RhdGljIHZvaWQqIE1ldGFEYXRhQWxsb2Moc2l6ZV90IGJ5dGVzKSB7
CisgIHZvaWQqIHJlc3VsdCA9IFRDTWFsbG9jX1N5c3RlbUFsbG9jKGJ5dGVzKTsKKyAgaWYgKHJl
c3VsdCAhPSBOVUxMKSB7CisgICAgbWV0YWRhdGFfc3lzdGVtX2J5dGVzICs9IGJ5dGVzOworICB9
CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorY2xhc3MgUGFnZUhl
YXBBbGxvY2F0b3IgeworIHByaXZhdGU6CisgIC8vIEhvdyBtdWNoIHRvIGFsbG9jYXRlIGZyb20g
c3lzdGVtIGF0IGEgdGltZQorICBzdGF0aWMgY29uc3QgaW50IGtBbGxvY0luY3JlbWVudCA9IDMy
IDw8IDEwOworCisgIC8vIEFsaWduZWQgc2l6ZSBvZiBUCisgIHN0YXRpYyBjb25zdCBzaXplX3Qg
a0FsaWduZWRTaXplCisgID0gKCgoc2l6ZW9mKFQpICsga0FsaWdubWVudCAtIDEpIC8ga0FsaWdu
bWVudCkgKiBrQWxpZ25tZW50KTsKKworICAvLyBGcmVlIGFyZWEgZnJvbSB3aGljaCB0byBjYXJ2
ZSBuZXcgb2JqZWN0cworICBjaGFyKiBmcmVlX2FyZWFfOworICBzaXplX3QgZnJlZV9hdmFpbF87
CisKKyAgLy8gRnJlZSBsaXN0IG9mIGFscmVhZHkgY2FydmVkIG9iamVjdHMKKyAgdm9pZCogZnJl
ZV9saXN0XzsKKworICAvLyBOdW1iZXIgb2YgYWxsb2NhdGVkIGJ1dCB1bmZyZWVkIG9iamVjdHMK
KyAgaW50IGludXNlXzsKKworIHB1YmxpYzoKKyAgdm9pZCBJbml0KCkgeworICAgIEFTU0VSVChr
QWxpZ25lZFNpemUgPD0ga0FsbG9jSW5jcmVtZW50KTsKKyAgICBpbnVzZV8gPSAwOworICAgIGZy
ZWVfYXJlYV8gPSBOVUxMOworICAgIGZyZWVfYXZhaWxfID0gMDsKKyAgICBmcmVlX2xpc3RfID0g
TlVMTDsKKyAgfQorCisgIFQqIE5ldygpIHsKKyAgICAvLyBDb25zdWx0IGZyZWUgbGlzdAorICAg
IHZvaWQqIHJlc3VsdDsKKyAgICBpZiAoZnJlZV9saXN0XyAhPSBOVUxMKSB7CisgICAgICByZXN1
bHQgPSBmcmVlX2xpc3RfOworICAgICAgZnJlZV9saXN0XyA9ICoocmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KHJlc3VsdCkpOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoZnJlZV9hdmFpbF8gPCBr
QWxpZ25lZFNpemUpIHsKKyAgICAgICAgLy8gTmVlZCBtb3JlIHJvb20KKyAgICAgICAgZnJlZV9h
cmVhXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KE1ldGFEYXRhQWxsb2Moa0FsbG9jSW5jcmVt
ZW50KSk7CisgICAgICAgIGlmIChmcmVlX2FyZWFfID09IE5VTEwpIGFib3J0KCk7CisgICAgICAg
IGZyZWVfYXZhaWxfID0ga0FsbG9jSW5jcmVtZW50OworICAgICAgfQorICAgICAgcmVzdWx0ID0g
ZnJlZV9hcmVhXzsKKyAgICAgIGZyZWVfYXJlYV8gKz0ga0FsaWduZWRTaXplOworICAgICAgZnJl
ZV9hdmFpbF8gLT0ga0FsaWduZWRTaXplOworICAgIH0KKyAgICBpbnVzZV8rKzsKKyAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVzdWx0KTsKKyAgfQorCisgIHZvaWQgRGVsZXRlKFQq
IHApIHsKKyAgICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihwKSkgPSBmcmVlX2xpc3RfOwor
ICAgIGZyZWVfbGlzdF8gPSBwOworICAgIGludXNlXy0tOworICB9CisKKyAgaW50IGludXNlKCkg
Y29uc3QgeyByZXR1cm4gaW51c2VfOyB9Cit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBT
cGFuIC0gYSBjb250aWd1b3VzIHJ1biBvZiBwYWdlcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisv
LyBUeXBlIHRoYXQgY2FuIGhvbGQgYSBwYWdlIG51bWJlcgordHlwZWRlZiB1aW50cHRyX3QgUGFn
ZUlEOworCisvLyBUeXBlIHRoYXQgY2FuIGhvbGQgdGhlIGxlbmd0aCBvZiBhIHJ1biBvZiBwYWdl
cwordHlwZWRlZiB1aW50cHRyX3QgTGVuZ3RoOworCisvLyBDb252ZXJ0IGJ5dGUgc2l6ZSBpbnRv
IHBhZ2VzCitzdGF0aWMgaW5saW5lIExlbmd0aCBwYWdlcyhzaXplX3QgYnl0ZXMpIHsKKyAgcmV0
dXJuICgoYnl0ZXMgKyBrUGFnZVNpemUgLSAxKSA+PiBrUGFnZVNoaWZ0KTsKK30KKworLy8gQ29u
dmVydCBhIHVzZXIgc2l6ZSBpbnRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3aWxsIGFjdHVh
bGx5IGJlCisvLyBhbGxvY2F0ZWQKK3N0YXRpYyBzaXplX3QgQWxsb2NhdGlvblNpemUoc2l6ZV90
IGJ5dGVzKSB7CisgIGlmIChieXRlcyA+IGtNYXhTaXplKSB7CisgICAgLy8gTGFyZ2Ugb2JqZWN0
OiB3ZSBhbGxvY2F0ZSBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgcGFnZXMKKyAgICByZXR1cm4gcGFn
ZXMoYnl0ZXMpIDw8IGtQYWdlU2hpZnQ7CisgIH0gZWxzZSB7CisgICAgLy8gU21hbGwgb2JqZWN0
OiBmaW5kIHRoZSBzaXplIGNsYXNzIHRvIHdoaWNoIGl0IGJlbG9uZ3MKKyAgICByZXR1cm4gQnl0
ZVNpemVGb3JDbGFzcyhTaXplQ2xhc3MoYnl0ZXMpKTsKKyAgfQorfQorCisvLyBJbmZvcm1hdGlv
biBrZXB0IGZvciBhIHNwYW4gKGEgY29udGlndW91cyBydW4gb2YgcGFnZXMpLgorc3RydWN0IFNw
YW4geworICBQYWdlSUQgICAgICAgIHN0YXJ0OyAgICAgICAgICAvLyBTdGFydGluZyBwYWdlIG51
bWJlcgorICBMZW5ndGggICAgICAgIGxlbmd0aDsgICAgICAgICAvLyBOdW1iZXIgb2YgcGFnZXMg
aW4gc3BhbgorICBTcGFuKiAgICAgICAgIG5leHQ7ICAgICAgICAgICAvLyBVc2VkIHdoZW4gaW4g
bGluayBsaXN0CisgIFNwYW4qICAgICAgICAgcHJldjsgICAgICAgICAgIC8vIFVzZWQgd2hlbiBp
biBsaW5rIGxpc3QKKyAgdm9pZCogICAgICAgICBvYmplY3RzOyAgICAgICAgLy8gTGlua2VkIGxp
c3Qgb2YgZnJlZSBvYmplY3RzCisgIHVuc2lnbmVkIGludCAgZnJlZSA6IDE7ICAgICAgIC8vIElz
IHRoZSBzcGFuIGZyZWUKKyAgdW5zaWduZWQgaW50ICBzYW1wbGUgOiAxOyAgICAgLy8gU2FtcGxl
ZCBvYmplY3Q/CisgIHVuc2lnbmVkIGludCAgc2l6ZWNsYXNzIDogODsgIC8vIFNpemUtY2xhc3Mg
Zm9yIHNtYWxsIG9iamVjdHMgKG9yIDApCisgIHVuc2lnbmVkIGludCAgcmVmY291bnQgOiAxMTsg
IC8vIE51bWJlciBvZiBub24tZnJlZSBvYmplY3RzCisKKyN1bmRlZiBTUEFOX0hJU1RPUlkKKyNp
ZmRlZiBTUEFOX0hJU1RPUlkKKyAgLy8gRm9yIGRlYnVnZ2luZywgd2UgY2FuIGtlZXAgYSBsb2cg
ZXZlbnRzIHBlciBzcGFuCisgIGludCBuZXh0aGlzdG9yeTsKKyAgY2hhciBoaXN0b3J5WzY0XTsK
KyAgaW50IHZhbHVlWzY0XTsKKyNlbmRpZgorfTsKKworI2lmZGVmIFNQQU5fSElTVE9SWQordm9p
ZCBFdmVudChTcGFuKiBzcGFuLCBjaGFyIG9wLCBpbnQgdiA9IDApIHsKKyAgc3Bhbi0+aGlzdG9y
eVtzcGFuLT5uZXh0aGlzdG9yeV0gPSBvcDsKKyAgc3Bhbi0+dmFsdWVbc3Bhbi0+bmV4dGhpc3Rv
cnldID0gdjsKKyAgc3Bhbi0+bmV4dGhpc3RvcnkrKzsKKyAgaWYgKHNwYW4tPm5leHRoaXN0b3J5
ID09IHNpemVvZihzcGFuLT5oaXN0b3J5KSkgc3Bhbi0+bmV4dGhpc3RvcnkgPSAwOworfQorI2Vs
c2UKKyNkZWZpbmUgRXZlbnQocyxvLHYpICgodm9pZCkgMCkKKyNlbmRpZgorCisvLyBBbGxvY2F0
b3IvZGVhbGxvY2F0b3IgZm9yIHNwYW5zCitzdGF0aWMgUGFnZUhlYXBBbGxvY2F0b3I8U3Bhbj4g
c3Bhbl9hbGxvY2F0b3I7CitzdGF0aWMgU3BhbiogTmV3U3BhbihQYWdlSUQgcCwgTGVuZ3RoIGxl
bikgeworICBTcGFuKiByZXN1bHQgPSBzcGFuX2FsbG9jYXRvci5OZXcoKTsKKyAgbWVtc2V0KHJl
c3VsdCwgMCwgc2l6ZW9mKCpyZXN1bHQpKTsKKyAgcmVzdWx0LT5zdGFydCA9IHA7CisgIHJlc3Vs
dC0+bGVuZ3RoID0gbGVuOworI2lmZGVmIFNQQU5fSElTVE9SWQorICByZXN1bHQtPm5leHRoaXN0
b3J5ID0gMDsKKyNlbmRpZgorICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgRGVsZXRlU3BhbihTcGFuKiBzcGFuKSB7CisjaWZuZGVmIE5ERUJVRworICAvLyBJbiBkZWJ1
ZyBtb2RlLCB0cmFzaCB0aGUgY29udGVudHMgb2YgZGVsZXRlZCBTcGFucworICBtZW1zZXQoc3Bh
biwgMHgzZiwgc2l6ZW9mKCpzcGFuKSk7CisjZW5kaWYKKyAgc3Bhbl9hbGxvY2F0b3IuRGVsZXRl
KHNwYW4pOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEb3VibHkgbGlua2VkIGxpc3Qg
b2Ygc3BhbnMuCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBETExf
SW5pdChTcGFuKiBsaXN0KSB7CisgIGxpc3QtPm5leHQgPSBsaXN0OworICBsaXN0LT5wcmV2ID0g
bGlzdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIERMTF9SZW1vdmUoU3Bhbiogc3Bhbikgewor
ICBzcGFuLT5wcmV2LT5uZXh0ID0gc3Bhbi0+bmV4dDsKKyAgc3Bhbi0+bmV4dC0+cHJldiA9IHNw
YW4tPnByZXY7CisgIHNwYW4tPnByZXYgPSBOVUxMOworICBzcGFuLT5uZXh0ID0gTlVMTDsKK30K
Kworc3RhdGljIGlubGluZSBib29sIERMTF9Jc0VtcHR5KGNvbnN0IFNwYW4qIGxpc3QpIHsKKyAg
cmV0dXJuIGxpc3QtPm5leHQgPT0gbGlzdDsKK30KKworI2lmbmRlZiBLWENfQ0hBTkdFUworc3Rh
dGljIGludCBETExfTGVuZ3RoKGNvbnN0IFNwYW4qIGxpc3QpIHsKKyAgaW50IHJlc3VsdCA9IDA7
CisgIGZvciAoU3BhbiogcyA9IGxpc3QtPm5leHQ7IHMgIT0gbGlzdDsgcyA9IHMtPm5leHQpIHsK
KyAgICByZXN1bHQrKzsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKyNpZiAw
IC8qIE5vdCBuZWVkZWQgYXQgdGhlIG1vbWVudCAtLSBjYXVzZXMgY29tcGlsZXIgd2FybmluZ3Mg
aWYgbm90IHVzZWQgKi8KK3N0YXRpYyB2b2lkIERMTF9QcmludChjb25zdCBjaGFyKiBsYWJlbCwg
Y29uc3QgU3BhbiogbGlzdCkgeworICBNRVNTQUdFKCIlLTEwcyAlcDoiLCBsYWJlbCwgbGlzdCk7
CisgIGZvciAoY29uc3QgU3BhbiogcyA9IGxpc3QtPm5leHQ7IHMgIT0gbGlzdDsgcyA9IHMtPm5l
eHQpIHsKKyAgICBNRVNTQUdFKCIgPCVwLCV1LCV1PiIsIHMsIHMtPnN0YXJ0LCBzLT5sZW5ndGgp
OworICB9CisgIE1FU1NBR0UoIlxuIik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgRExMX1By
ZXBlbmQoU3BhbiogbGlzdCwgU3Bhbiogc3BhbikgeworICBBU1NFUlQoc3Bhbi0+bmV4dCA9PSBO
VUxMKTsKKyAgQVNTRVJUKHNwYW4tPnByZXYgPT0gTlVMTCk7CisgIHNwYW4tPm5leHQgPSBsaXN0
LT5uZXh0OworICBzcGFuLT5wcmV2ID0gbGlzdDsKKyAgbGlzdC0+bmV4dC0+cHJldiA9IHNwYW47
CisgIGxpc3QtPm5leHQgPSBzcGFuOworfQorCitzdGF0aWMgdm9pZCBETExfSW5zZXJ0T3JkZXJl
ZChTcGFuKiBsaXN0LCBTcGFuKiBzcGFuKSB7CisgIEFTU0VSVChzcGFuLT5uZXh0ID09IE5VTEwp
OworICBBU1NFUlQoc3Bhbi0+cHJldiA9PSBOVUxMKTsKKyAgLy8gTG9vayBmb3IgYXBwcm9wcmlh
dGUgcGxhY2UgdG8gaW5zZXJ0CisgIFNwYW4qIHggPSBsaXN0OworICB3aGlsZSAoKHgtPm5leHQg
IT0gbGlzdCkgJiYgKHgtPm5leHQtPnN0YXJ0IDwgc3Bhbi0+c3RhcnQpKSB7CisgICAgeCA9IHgt
Pm5leHQ7CisgIH0KKyAgc3Bhbi0+bmV4dCA9IHgtPm5leHQ7CisgIHNwYW4tPnByZXYgPSB4Owor
ICB4LT5uZXh0LT5wcmV2ID0gc3BhbjsKKyAgeC0+bmV4dCA9IHNwYW47Cit9CisKKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFN0YWNrIHRyYWNlcyBrZXB0IGZvciBzYW1wbGVkIGFsbG9jYXRpb25z
CisvLyAgIFRoZSBmb2xsb3dpbmcgc3RhdGUgaXMgcHJvdGVjdGVkIGJ5IHBhZ2VoZWFwX2xvY2tf
LgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgY29uc3QgaW50IGtNYXhTdGFja0RlcHRo
ID0gMzE7CitzdHJ1Y3QgU3RhY2tUcmFjZSB7CisgIHVpbnRwdHJfdCBzaXplOyAgICAgICAgICAv
LyBTaXplIG9mIG9iamVjdAorICBpbnQgICAgICAgZGVwdGg7ICAgICAgICAgLy8gTnVtYmVyIG9m
IFBDIHZhbHVlcyBzdG9yZWQgaW4gYXJyYXkgYmVsb3cKKyAgdm9pZCogICAgIHN0YWNrW2tNYXhT
dGFja0RlcHRoXTsKK307CitzdGF0aWMgUGFnZUhlYXBBbGxvY2F0b3I8U3RhY2tUcmFjZT4gc3Rh
Y2t0cmFjZV9hbGxvY2F0b3I7CitzdGF0aWMgU3BhbiBzYW1wbGVkX29iamVjdHM7CisKKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIE1hcCBmcm9tIHBhZ2UtaWQgdG8gcGVyLXBhZ2UgZGF0YQorLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisvLyBXZSB1c2UgUGFnZU1hcDI8PiBmb3IgMzItYml0IGFuZCBQ
YWdlTWFwMzw+IGZvciA2NC1iaXQgbWFjaGluZXMuCisKKy8vIFNlbGVjdG9yIGNsYXNzIC0tIGdl
bmVyYWwgc2VsZWN0b3IgdXNlcyAzLWxldmVsIG1hcAordGVtcGxhdGUgPGludCBCSVRTPiBjbGFz
cyBNYXBTZWxlY3RvciB7CisgcHVibGljOgorICB0eXBlZGVmIFRDTWFsbG9jX1BhZ2VNYXAzPEJJ
VFMta1BhZ2VTaGlmdD4gVHlwZTsKK307CisKKy8vIEEgdHdvLWxldmVsIG1hcCBmb3IgMzItYml0
IG1hY2hpbmVzCit0ZW1wbGF0ZSA8PiBjbGFzcyBNYXBTZWxlY3RvcjwzMj4geworIHB1YmxpYzoK
KyAgdHlwZWRlZiBUQ01hbGxvY19QYWdlTWFwMjwzMi1rUGFnZVNoaWZ0PiBUeXBlOworfTsKKwor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGFnZS1sZXZlbCBhbGxvY2F0b3IKKy8vICAqIEVhZ2Vy
IGNvYWxlc2NpbmcKKy8vCisvLyBIZWFwIGZvciBwYWdlLWxldmVsIGFsbG9jYXRpb24uICBXZSBh
bGxvdyBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEKKy8vIGNvbnRpZ3VvdXMgcnVucyBvZiBwYWdl
cyAoY2FsbGVkIGEgInNwYW4iKS4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVENNYWxs
b2NfUGFnZUhlYXAgeworIHB1YmxpYzoKKyAgVENNYWxsb2NfUGFnZUhlYXAoKTsKKworICAvLyBB
bGxvY2F0ZSBhIHJ1biBvZiAibiIgcGFnZXMuICBSZXR1cm5zIHplcm8gaWYgb3V0IG9mIG1lbW9y
eS4KKyAgU3BhbiogTmV3KExlbmd0aCBuKTsKKworICAvLyBEZWxldGUgdGhlIHNwYW4gIltwLCBw
K24tMV0iLgorICAvLyBSRVFVSVJFUzogc3BhbiB3YXMgcmV0dXJuZWQgYnkgZWFybGllciBjYWxs
IHRvIE5ldygpIGFuZAorICAvLyAgICAgICAgICAgaGFzIG5vdCB5ZXQgYmVlbiBkZWxldGVkLgor
ICB2b2lkIERlbGV0ZShTcGFuKiBzcGFuKTsKKworICAvLyBNYXJrIGFuIGFsbG9jYXRlZCBzcGFu
IGFzIGJlaW5nIHVzZWQgZm9yIHNtYWxsIG9iamVjdHMgb2YgdGhlCisgIC8vIHNwZWNpZmllZCBz
aXplLWNsYXNzLgorICAvLyBSRVFVSVJFUzogc3BhbiB3YXMgcmV0dXJuZWQgYnkgYW4gZWFybGll
ciBjYWxsIHRvIE5ldygpCisgIC8vICAgICAgICAgICBhbmQgaGFzIG5vdCB5ZXQgYmVlbiBkZWxl
dGVkLgorICB2b2lkIFJlZ2lzdGVyU2l6ZUNsYXNzKFNwYW4qIHNwYW4sIHNpemVfdCBzYyk7CisK
KyAgLy8gU3BsaXQgYW4gYWxsb2NhdGVkIHNwYW4gaW50byB0d28gc3BhbnM6IG9uZSBvZiBsZW5n
dGggIm4iIHBhZ2VzCisgIC8vIGZvbGxvd2VkIGJ5IGFub3RoZXIgc3BhbiBvZiBsZW5ndGggInNw
YW4tPmxlbmd0aCAtIG4iIHBhZ2VzLgorICAvLyBNb2RpZmllcyAiKnNwYW4iIHRvIHBvaW50IHRv
IHRoZSBmaXJzdCBzcGFuIG9mIGxlbmd0aCAibiIgcGFnZXMuCisgIC8vIFJldHVybnMgYSBwb2lu
dGVyIHRvIHRoZSBzZWNvbmQgc3Bhbi4KKyAgLy8KKyAgLy8gUkVRVUlSRVM6ICIwIDwgbiA8IHNw
YW4tPmxlbmd0aCIKKyAgLy8gUkVRVUlSRVM6ICFzcGFuLT5mcmVlCisgIC8vIFJFUVVJUkVTOiBz
cGFuLT5zaXplY2xhc3MgPT0gMAorICBTcGFuKiBTcGxpdChTcGFuKiBzcGFuLCBMZW5ndGggbik7
CisKKyAgLy8gUmV0dXJuIHRoZSBkZXNjcmlwdG9yIGZvciB0aGUgc3BlY2lmaWVkIHBhZ2UuCisg
IGlubGluZSBTcGFuKiBHZXREZXNjcmlwdG9yKFBhZ2VJRCBwKSBjb25zdCB7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+KHBhZ2VtYXBfLmdldChwKSk7CisgIH0KKworICAvLyBE
dW1wIHN0YXRlIHRvIHN0ZGVycgorI2lmbmRlZiBLWENfQ0hBTkdFUworICB2b2lkIER1bXAoVENN
YWxsb2NfUHJpbnRlciogb3V0KTsKKyNlbmRpZgorCisgIC8vIFJldHVybiBudW1iZXIgb2YgYnl0
ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCisgIGlubGluZSB1aW50NjRfdCBTeXN0ZW1CeXRlcygp
IGNvbnN0IHsgcmV0dXJuIHN5c3RlbV9ieXRlc187IH0KKworICAvLyBSZXR1cm4gbnVtYmVyIG9m
IGZyZWUgYnl0ZXMgaW4gaGVhcAorICB1aW50NjRfdCBGcmVlQnl0ZXMoKSBjb25zdCB7CisgICAg
cmV0dXJuIChzdGF0aWNfY2FzdDx1aW50NjRfdD4oZnJlZV9wYWdlc18pIDw8IGtQYWdlU2hpZnQp
OworICB9CisKKyAgYm9vbCBDaGVjaygpOworICBib29sIENoZWNrTGlzdChTcGFuKiBsaXN0LCBM
ZW5ndGggbWluX3BhZ2VzLCBMZW5ndGggbWF4X3BhZ2VzKTsKKworIHByaXZhdGU6CisgIC8vIFBp
Y2sgdGhlIGFwcHJvcHJpYXRlIG1hcCB0eXBlIGJhc2VkIG9uIHBvaW50ZXIgc2l6ZQorICB0eXBl
ZGVmIE1hcFNlbGVjdG9yPDgqc2l6ZW9mKHVpbnRwdHJfdCk+OjpUeXBlIFBhZ2VNYXA7CisgIFBh
Z2VNYXAgcGFnZW1hcF87CisKKyAgLy8gTGlzdCBvZiBmcmVlIHNwYW5zIG9mIGxlbmd0aCA+PSBr
TWF4UGFnZXMKKyAgU3BhbiBsYXJnZV87CisKKyAgLy8gQXJyYXkgbWFwcGluZyBmcm9tIHNwYW4g
bGVuZ3RoIHRvIGEgZG91Ymx5IGxpbmtlZCBsaXN0IG9mIGZyZWUgc3BhbnMKKyAgU3BhbiBmcmVl
X1trTWF4UGFnZXNdOworCisgIC8vIE51bWJlciBvZiBwYWdlcyBrZXB0IGluIGZyZWUgbGlzdHMK
KyAgdWludHB0cl90IGZyZWVfcGFnZXNfOworCisgIC8vIEJ5dGVzIGFsbG9jYXRlZCBmcm9tIHN5
c3RlbQorICB1aW50NjRfdCBzeXN0ZW1fYnl0ZXNfOworCisgIGJvb2wgR3Jvd0hlYXAoTGVuZ3Ro
IG4pOworCisgIC8vIFJFUVVJUkVTICAgc3Bhbi0+bGVuZ3RoID49IG4KKyAgLy8gUmVtb3ZlIHNw
YW4gZnJvbSBpdHMgZnJlZSBsaXN0LCBhbmQgbW92ZSBhbnkgbGVmdG92ZXIgcGFydCBvZgorICAv
LyBzcGFuIGludG8gYXBwcm9wcmlhdGUgZnJlZSBsaXN0cy4gIEFsc28gdXBkYXRlICJzcGFuIiB0
byBoYXZlCisgIC8vIGxlbmd0aCBleGFjdGx5ICJuIiBhbmQgbWFyayBpdCBhcyBub24tZnJlZSBz
byBpdCBjYW4gYmUgcmV0dXJuZWQKKyAgLy8gdG8gdGhlIGNsaWVudC4KKyAgdm9pZCBDYXJ2ZShT
cGFuKiBzcGFuLCBMZW5ndGggbik7CisKKyAgdm9pZCBSZWNvcmRTcGFuKFNwYW4qIHNwYW4pIHsK
KyAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQsIHNwYW4pOworICAgIGlmIChzcGFuLT5sZW5n
dGggPiAxKSB7CisgICAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQgKyBzcGFuLT5sZW5ndGgg
LSAxLCBzcGFuKTsKKyAgICB9CisgIH0KK307CisKK1RDTWFsbG9jX1BhZ2VIZWFwOjpUQ01hbGxv
Y19QYWdlSGVhcCgpIDogcGFnZW1hcF8oTWV0YURhdGFBbGxvYyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfcGFnZXNfKDApLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1fYnl0ZXNfKDApIHsKKyAgRExMX0luaXQo
JmxhcmdlXyk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga01heFBhZ2VzOyBpKyspIHsKKyAg
ICBETExfSW5pdCgmZnJlZV9baV0pOworICB9Cit9CisKK2lubGluZSBTcGFuKiBUQ01hbGxvY19Q
YWdlSGVhcDo6TmV3KExlbmd0aCBuKSB7CisgIEFTU0VSVChDaGVjaygpKTsKKyAgaWYgKG4gPT0g
MCkgbiA9IDE7CisKKyAgLy8gRmluZCBmaXJzdCBzaXplID49IG4gdGhhdCBoYXMgYSBub24tZW1w
dHkgbGlzdAorICBmb3IgKHNpemVfdCBzID0gbjsgcyA8IGtNYXhQYWdlczsgcysrKSB7CisgICAg
aWYgKCFETExfSXNFbXB0eSgmZnJlZV9bc10pKSB7CisgICAgICBTcGFuKiByZXN1bHQgPSBmcmVl
X1tzXS5uZXh0OworICAgICAgQ2FydmUocmVzdWx0LCBuKTsKKyAgICAgIEFTU0VSVChDaGVjaygp
KTsKKyAgICAgIGZyZWVfcGFnZXNfIC09IG47CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgfQorCisgIC8vIExvb2sgaW4gbGFyZ2UgbGlzdC4gIElmIHdlIGZpcnN0IGRvIG5vdCBmaW5k
IHNvbWV0aGluZywgd2UgdHJ5IHRvCisgIC8vIGdyb3cgdGhlIGhlYXAgYW5kIHRyeSBhZ2Fpbi4K
KyAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAvLyBmaW5kIHRoZSBiZXN0IHNw
YW4gKGNsb3Nlc3QgdG8gbiBpbiBzaXplKQorICAgIFNwYW4gKmJlc3QgPSBOVUxMOworICAgIGZv
ciAoU3Bhbiogc3BhbiA9IGxhcmdlXy5uZXh0OyBzcGFuICE9ICZsYXJnZV87IHNwYW4gPSBzcGFu
LT5uZXh0KSB7CisgICAgICBpZiAoc3Bhbi0+bGVuZ3RoID49IG4gJiYKKyAgICAgICAgICAoYmVz
dCA9PSBOVUxMIHx8IHNwYW4tPmxlbmd0aCA8IGJlc3QtPmxlbmd0aCkpIHsKKyAgICAgICAgYmVz
dCA9IHNwYW47CisgICAgICB9CisgICAgfQorICAgIGlmIChiZXN0ICE9IE5VTEwpIHsKKyAgICAg
IENhcnZlKGJlc3QsIG4pOworICAgICAgQVNTRVJUKENoZWNrKCkpOworICAgICAgZnJlZV9wYWdl
c18gLT0gbjsKKyAgICAgIHJldHVybiBiZXN0OworICAgIH0KKyAgICBpZiAoaSA9PSAwKSB7Cisg
ICAgICAvLyBOb3RoaW5nIHN1aXRhYmxlIGluIGxhcmdlIGxpc3QuICBHcm93IHRoZSBoZWFwIGFu
ZCBsb29rIGFnYWluLgorICAgICAgaWYgKCFHcm93SGVhcChuKSkgeworICAgICAgICBBU1NFUlQo
Q2hlY2soKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorICAgIH0KKyAgfQorICBy
ZXR1cm4gTlVMTDsKK30KKworU3BhbiogVENNYWxsb2NfUGFnZUhlYXA6OlNwbGl0KFNwYW4qIHNw
YW4sIExlbmd0aCBuKSB7CisgIEFTU0VSVCgwIDwgbik7CisgIEFTU0VSVChuIDwgc3Bhbi0+bGVu
Z3RoKTsKKyAgQVNTRVJUKCFzcGFuLT5mcmVlKTsKKyAgQVNTRVJUKHNwYW4tPnNpemVjbGFzcyA9
PSAwKTsKKyAgRXZlbnQoc3BhbiwgJ1QnLCBuKTsKKworICBjb25zdCBpbnQgZXh0cmEgPSBzcGFu
LT5sZW5ndGggLSBuOworICBTcGFuKiBsZWZ0b3ZlciA9IE5ld1NwYW4oc3Bhbi0+c3RhcnQgKyBu
LCBleHRyYSk7CisgIEV2ZW50KGxlZnRvdmVyLCAnVScsIGV4dHJhKTsKKyAgUmVjb3JkU3Bhbihs
ZWZ0b3Zlcik7CisgIHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCArIG4gLSAxLCBzcGFuKTsgLy8g
VXBkYXRlIG1hcCBmcm9tIHBhZ2VpZCB0byBzcGFuCisgIHNwYW4tPmxlbmd0aCA9IG47CisKKyAg
cmV0dXJuIGxlZnRvdmVyOworfQorCitpbmxpbmUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6Q2Fy
dmUoU3Bhbiogc3BhbiwgTGVuZ3RoIG4pIHsKKyAgQVNTRVJUKG4gPiAwKTsKKyAgRExMX1JlbW92
ZShzcGFuKTsKKyAgc3Bhbi0+ZnJlZSA9IDA7CisgIEV2ZW50KHNwYW4sICdBJywgbik7CisKKyAg
Y29uc3Qgc2l6ZV90IGV4dHJhID0gc3Bhbi0+bGVuZ3RoIC0gbjsKKyAgQVNTRVJUKGV4dHJhID49
IDApOworICBpZiAoZXh0cmEgPiAwKSB7CisgICAgU3BhbiogbGVmdG92ZXIgPSBOZXdTcGFuKHNw
YW4tPnN0YXJ0ICsgbiwgZXh0cmEpOworICAgIGxlZnRvdmVyLT5mcmVlID0gMTsKKyAgICBFdmVu
dChsZWZ0b3ZlciwgJ1MnLCBleHRyYSk7CisgICAgUmVjb3JkU3BhbihsZWZ0b3Zlcik7CisgICAg
aWYgKGV4dHJhIDwga01heFBhZ2VzKSB7CisgICAgICBETExfUHJlcGVuZCgmZnJlZV9bZXh0cmFd
LCBsZWZ0b3Zlcik7CisgICAgfSBlbHNlIHsKKyAgICAgIERMTF9JbnNlcnRPcmRlcmVkKCZsYXJn
ZV8sIGxlZnRvdmVyKTsKKyAgICB9CisgICAgc3Bhbi0+bGVuZ3RoID0gbjsKKyAgICBwYWdlbWFw
Xy5zZXQoc3Bhbi0+c3RhcnQgKyBuIC0gMSwgc3Bhbik7CisgIH0KK30KKworaW5saW5lIHZvaWQg
VENNYWxsb2NfUGFnZUhlYXA6OkRlbGV0ZShTcGFuKiBzcGFuKSB7CisgIEFTU0VSVChDaGVjaygp
KTsKKyAgQVNTRVJUKCFzcGFuLT5mcmVlKTsKKyAgQVNTRVJUKHNwYW4tPmxlbmd0aCA+IDApOwor
ICBBU1NFUlQoR2V0RGVzY3JpcHRvcihzcGFuLT5zdGFydCkgPT0gc3Bhbik7CisgIEFTU0VSVChH
ZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSkgPT0gc3Bhbik7Cisg
IHNwYW4tPnNpemVjbGFzcyA9IDA7CisgIHNwYW4tPnNhbXBsZSA9IDA7CisKKyAgLy8gQ29hbGVz
Y2UgLS0gd2UgZ3VhcmFudGVlIHRoYXQgInAiICE9IDAsIHNvIG5vIGJvdW5kcyBjaGVja2luZwor
ICAvLyBuZWNlc3NhcnkuICBXZSBkbyBub3QgYm90aGVyIHJlc2V0dGluZyB0aGUgc3RhbGUgcGFn
ZW1hcAorICAvLyBlbnRyaWVzIGZvciB0aGUgcGllY2VzIHdlIGFyZSBtZXJnaW5nIHRvZ2V0aGVy
IGJlY2F1c2Ugd2Ugb25seQorICAvLyBjYXJlIGFib3V0IHRoZSBwYWdlbWFwIGVudHJpZXMgZm9y
IHRoZSBib3VuZGFyaWVzLgorICBjb25zdCBQYWdlSUQgcCA9IHNwYW4tPnN0YXJ0OworICBjb25z
dCBMZW5ndGggbiA9IHNwYW4tPmxlbmd0aDsKKyAgU3BhbiogcHJldiA9IEdldERlc2NyaXB0b3Io
cC0xKTsKKyAgaWYgKHByZXYgIT0gTlVMTCAmJiBwcmV2LT5mcmVlKSB7CisgICAgLy8gTWVyZ2Ug
cHJlY2VkaW5nIHNwYW4gaW50byB0aGlzIHNwYW4KKyAgICBBU1NFUlQocHJldi0+c3RhcnQgKyBw
cmV2LT5sZW5ndGggPT0gcCk7CisgICAgY29uc3QgTGVuZ3RoIGxlbiA9IHByZXYtPmxlbmd0aDsK
KyAgICBETExfUmVtb3ZlKHByZXYpOworICAgIERlbGV0ZVNwYW4ocHJldik7CisgICAgc3Bhbi0+
c3RhcnQgLT0gbGVuOworICAgIHNwYW4tPmxlbmd0aCArPSBsZW47CisgICAgcGFnZW1hcF8uc2V0
KHNwYW4tPnN0YXJ0LCBzcGFuKTsKKyAgICBFdmVudChzcGFuLCAnTCcsIGxlbik7CisgIH0KKyAg
U3BhbiogbmV4dCA9IEdldERlc2NyaXB0b3IocCtuKTsKKyAgaWYgKG5leHQgIT0gTlVMTCAmJiBu
ZXh0LT5mcmVlKSB7CisgICAgLy8gTWVyZ2UgbmV4dCBzcGFuIGludG8gdGhpcyBzcGFuCisgICAg
QVNTRVJUKG5leHQtPnN0YXJ0ID09IHArbik7CisgICAgY29uc3QgTGVuZ3RoIGxlbiA9IG5leHQt
Pmxlbmd0aDsKKyAgICBETExfUmVtb3ZlKG5leHQpOworICAgIERlbGV0ZVNwYW4obmV4dCk7Cisg
ICAgc3Bhbi0+bGVuZ3RoICs9IGxlbjsKKyAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQgKyBz
cGFuLT5sZW5ndGggLSAxLCBzcGFuKTsKKyAgICBFdmVudChzcGFuLCAnUicsIGxlbik7CisgIH0K
KworICBFdmVudChzcGFuLCAnRCcsIHNwYW4tPmxlbmd0aCk7CisgIHNwYW4tPmZyZWUgPSAxOwor
ICBpZiAoc3Bhbi0+bGVuZ3RoIDwga01heFBhZ2VzKSB7CisgICAgRExMX1ByZXBlbmQoJmZyZWVf
W3NwYW4tPmxlbmd0aF0sIHNwYW4pOworICB9IGVsc2UgeworICAgIERMTF9JbnNlcnRPcmRlcmVk
KCZsYXJnZV8sIHNwYW4pOworICB9CisgIGZyZWVfcGFnZXNfICs9IG47CisKKyAgQVNTRVJUKENo
ZWNrKCkpOworfQorCit2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpSZWdpc3RlclNpemVDbGFzcyhT
cGFuKiBzcGFuLCBzaXplX3Qgc2MpIHsKKyAgLy8gQXNzb2NpYXRlIHNwYW4gb2JqZWN0IHdpdGgg
YWxsIGludGVyaW9yIHBhZ2VzIGFzIHdlbGwKKyAgQVNTRVJUKCFzcGFuLT5mcmVlKTsKKyAgQVNT
RVJUKEdldERlc2NyaXB0b3Ioc3Bhbi0+c3RhcnQpID09IHNwYW4pOworICBBU1NFUlQoR2V0RGVz
Y3JpcHRvcihzcGFuLT5zdGFydCtzcGFuLT5sZW5ndGgtMSkgPT0gc3Bhbik7CisgIEV2ZW50KHNw
YW4sICdDJywgc2MpOworICBzcGFuLT5zaXplY2xhc3MgPSBzYzsKKyAgZm9yIChMZW5ndGggaSA9
IDE7IGkgPCBzcGFuLT5sZW5ndGgtMTsgaSsrKSB7CisgICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0
YXJ0K2ksIHNwYW4pOworICB9Cit9CisKKyNpZm5kZWYgS1hDX0NIQU5HRVMKK3ZvaWQgVENNYWxs
b2NfUGFnZUhlYXA6OkR1bXAoVENNYWxsb2NfUHJpbnRlciogb3V0KSB7CisgIGludCBub25lbXB0
eV9zaXplcyA9IDA7CisgIGZvciAoaW50IHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspIHsKKyAg
ICBpZiAoIURMTF9Jc0VtcHR5KCZmcmVlX1tzXSkpIG5vbmVtcHR5X3NpemVzKys7CisgIH0KKyAg
b3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIik7CisgIG91dC0+cHJpbnRmKCJQYWdlSGVhcDogJWQgc2l6ZXM7ICU2LjFmIE1CIGZy
ZWVcbiIsIG5vbmVtcHR5X3NpemVzLAorICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8ZG91Ymxl
PihmcmVlX3BhZ2VzXykgKiBrUGFnZVNpemUpIC8gMTA0ODU3Ni4wKTsKKyAgb3V0LT5wcmludGYo
Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Cisg
IHVpbnQ2NF90IGN1bXVsYXRpdmUgPSAwOworICBmb3IgKGludCBzID0gMDsgcyA8IGtNYXhQYWdl
czsgcysrKSB7CisgICAgaWYgKCFETExfSXNFbXB0eSgmZnJlZV9bc10pKSB7CisgICAgICBjb25z
dCBpbnQgbGlzdF9sZW5ndGggPSBETExfTGVuZ3RoKCZmcmVlX1tzXSk7CisgICAgICB1aW50NjRf
dCBzX3BhZ2VzID0gcyAqIGxpc3RfbGVuZ3RoOworICAgICAgY3VtdWxhdGl2ZSArPSBzX3BhZ2Vz
OworICAgICAgb3V0LT5wcmludGYoIiU2dSBwYWdlcyAqICU2dSBzcGFucyB+ICU2LjFmIE1COyAl
Ni4xZiBNQiBjdW1cbiIsCisgICAgICAgICAgICAgICAgICBzLCBsaXN0X2xlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgIChzX3BhZ2VzIDw8IGtQYWdlU2hpZnQpIC8gMTA0ODU3Ni4wLAorICAgICAg
ICAgICAgICAgICAgKGN1bXVsYXRpdmUgPDwga1BhZ2VTaGlmdCkgLyAxMDQ4NTc2LjApOworICAg
IH0KKyAgfQorCisgIHVpbnQ2NF90IGxhcmdlX3BhZ2VzID0gMDsKKyAgaW50IGxhcmdlX3NwYW5z
ID0gMDsKKyAgZm9yIChTcGFuKiBzID0gbGFyZ2VfLm5leHQ7IHMgIT0gJmxhcmdlXzsgcyA9IHMt
Pm5leHQpIHsKKyAgICBvdXQtPnByaW50ZigiICAgWyAlNiIgUFJJdVMgIiBzcGFucyBdXG4iLCBz
LT5sZW5ndGgpOworICAgIGxhcmdlX3BhZ2VzICs9IHMtPmxlbmd0aDsKKyAgICBsYXJnZV9zcGFu
cysrOworICB9CisgIGN1bXVsYXRpdmUgKz0gbGFyZ2VfcGFnZXM7CisgIG91dC0+cHJpbnRmKCI+
MjU1ICAgbGFyZ2UgKiAlNnUgc3BhbnMgfiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtXG4iLAorICAg
ICAgICAgICAgICBsYXJnZV9zcGFucywKKyAgICAgICAgICAgICAgKGxhcmdlX3BhZ2VzIDw8IGtQ
YWdlU2hpZnQpIC8gMTA0ODU3Ni4wLAorICAgICAgICAgICAgICAoY3VtdWxhdGl2ZSA8PCBrUGFn
ZVNoaWZ0KSAvIDEwNDg1NzYuMCk7Cit9CisjZW5kaWYKKworYm9vbCBUQ01hbGxvY19QYWdlSGVh
cDo6R3Jvd0hlYXAoTGVuZ3RoIG4pIHsKKyAgQVNTRVJUKGtNYXhQYWdlcyA+PSBrTWluU3lzdGVt
QWxsb2MpOworICBMZW5ndGggYXNrID0gKG4+a01pblN5c3RlbUFsbG9jKSA/IG4gOiBzdGF0aWNf
Y2FzdDxMZW5ndGg+KGtNaW5TeXN0ZW1BbGxvYyk7CisgIHZvaWQqIHB0ciA9IFRDTWFsbG9jX1N5
c3RlbUFsbG9jKGFzayA8PCBrUGFnZVNoaWZ0LCBrUGFnZVNpemUpOworICBpZiAocHRyID09IE5V
TEwpIHsKKyAgICBpZiAobiA8IGFzaykgeworICAgICAgLy8gVHJ5IGdyb3dpbmcganVzdCAibiIg
cGFnZXMKKyAgICAgIGFzayA9IG47CisgICAgICBwdHIgPSBUQ01hbGxvY19TeXN0ZW1BbGxvYyhh
c2sgPDwga1BhZ2VTaGlmdCwga1BhZ2VTaXplKTsKKyAgICB9CisgICAgaWYgKHB0ciA9PSBOVUxM
KSByZXR1cm4gZmFsc2U7CisgIH0KKyAgc3lzdGVtX2J5dGVzXyArPSAoYXNrIDw8IGtQYWdlU2hp
ZnQpOworICBjb25zdCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIp
ID4+IGtQYWdlU2hpZnQ7CisgIEFTU0VSVChwID4gMCk7CisKKyAgLy8gTWFrZSBzdXJlIHBhZ2Vt
YXBfIGhhcyBlbnRyaWVzIGZvciBhbGwgb2YgdGhlIG5ldyBwYWdlcy4KKyAgLy8gUGx1cyBlbnN1
cmUgb25lIGJlZm9yZSBhbmQgb25lIGFmdGVyIHNvIGNvYWxlc2NpbmcgY29kZQorICAvLyBkb2Vz
IG5vdCBuZWVkIGJvdW5kcy1jaGVja2luZy4KKyAgaWYgKHBhZ2VtYXBfLkVuc3VyZShwLTEsIGFz
aysyKSkgeworICAgIC8vIFByZXRlbmQgdGhlIG5ldyBhcmVhIGlzIGFsbG9jYXRlZCBhbmQgdGhl
biBEZWxldGUoKSBpdCB0bworICAgIC8vIGNhdXNlIGFueSBuZWNlc3NhcnkgY29hbGVzY2luZyB0
byBvY2N1ci4KKyAgICAvLworICAgIC8vIFdlIGRvIG5vdCBhZGp1c3QgZnJlZV9wYWdlc18gaGVy
ZSBzaW5jZSBEZWxldGUoKSB3aWxsIGRvIGl0IGZvciB1cy4KKyAgICBTcGFuKiBzcGFuID0gTmV3
U3BhbihwLCBhc2spOworICAgIFJlY29yZFNwYW4oc3Bhbik7CisgICAgRGVsZXRlKHNwYW4pOwor
ICAgIEFTU0VSVChDaGVjaygpKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfSBlbHNlIHsKKyAgICAv
LyBXZSBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IHdpdGhpbiAicGFnZW1hcF8iCisgICAgLy8g
VE9ETzogT25jZSB3ZSBjYW4gcmV0dXJuIG1lbW9yeSB0byB0aGUgc3lzdGVtLCByZXR1cm4gdGhl
IG5ldyBzcGFuCisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CisKK2Jvb2wgVENNYWxsb2NfUGFn
ZUhlYXA6OkNoZWNrKCkgeworICBBU1NFUlQoZnJlZV9bMF0ubmV4dCA9PSAmZnJlZV9bMF0pOwor
ICBDaGVja0xpc3QoJmxhcmdlXywga01heFBhZ2VzLCAxMDAwMDAwMDAwKTsKKyAgZm9yIChMZW5n
dGggcyA9IDE7IHMgPCBrTWF4UGFnZXM7IHMrKykgeworICAgIENoZWNrTGlzdCgmZnJlZV9bc10s
IHMsIHMpOworICB9CisgIHJldHVybiB0cnVlOworfQorCitib29sIFRDTWFsbG9jX1BhZ2VIZWFw
OjpDaGVja0xpc3QoU3BhbiogbGlzdCwgTGVuZ3RoIG1pbl9wYWdlcywgTGVuZ3RoIG1heF9wYWdl
cykgeworICBmb3IgKFNwYW4qIHMgPSBsaXN0LT5uZXh0OyBzICE9IGxpc3Q7IHMgPSBzLT5uZXh0
KSB7CisgICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmZyZWUpOworICAgIENIRUNLX0NPTkRJVElPTihz
LT5sZW5ndGggPj0gbWluX3BhZ2VzKTsKKyAgICBDSEVDS19DT05ESVRJT04ocy0+bGVuZ3RoIDw9
IG1heF9wYWdlcyk7CisgICAgQ0hFQ0tfQ09ORElUSU9OKEdldERlc2NyaXB0b3Iocy0+c3RhcnQp
ID09IHMpOworICAgIENIRUNLX0NPTkRJVElPTihHZXREZXNjcmlwdG9yKHMtPnN0YXJ0K3MtPmxl
bmd0aC0xKSA9PSBzKTsKKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBGcmVlIGxpc3QKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUQ01hbGxvY19UaHJlYWRDYWNoZV9G
cmVlTGlzdCB7CisgcHJpdmF0ZToKKyAgdm9pZCogICAgbGlzdF87ICAgICAgIC8vIExpbmtlZCBs
aXN0IG9mIG5vZGVzCisgIHVpbnQxNl90IGxlbmd0aF87ICAgICAvLyBDdXJyZW50IGxlbmd0aAor
ICB1aW50MTZfdCBsb3dhdGVyXzsgICAgLy8gTG93IHdhdGVyIG1hcmsgZm9yIGxpc3QgbGVuZ3Ro
CisKKyBwdWJsaWM6CisgIHZvaWQgSW5pdCgpIHsKKyAgICBsaXN0XyA9IE5VTEw7CisgICAgbGVu
Z3RoXyA9IDA7CisgICAgbG93YXRlcl8gPSAwOworICB9CisKKyAgLy8gUmV0dXJuIGN1cnJlbnQg
bGVuZ3RoIG9mIGxpc3QKKyAgaW50IGxlbmd0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbGVuZ3Ro
XzsKKyAgfQorCisgIC8vIElzIGxpc3QgZW1wdHk/CisgIGJvb2wgZW1wdHkoKSBjb25zdCB7Cisg
ICAgcmV0dXJuIGxpc3RfID09IE5VTEw7CisgIH0KKworICAvLyBMb3ctd2F0ZXIgbWFyayBtYW5h
Z2VtZW50CisgIGludCBsb3d3YXRlcm1hcmsoKSBjb25zdCB7IHJldHVybiBsb3dhdGVyXzsgfQor
ICB2b2lkIGNsZWFyX2xvd3dhdGVybWFyaygpIHsgbG93YXRlcl8gPSBsZW5ndGhfOyB9CisKKyAg
dm9pZCBQdXNoKHZvaWQqIHB0cikgeworICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHB0
cikpID0gbGlzdF87CisgICAgbGlzdF8gPSBwdHI7CisgICAgbGVuZ3RoXysrOworICB9CisKKyAg
dm9pZCogUG9wKCkgeworICAgIEFTU0VSVChsaXN0XyAhPSBOVUxMKTsKKyAgICB2b2lkKiByZXN1
bHQgPSBsaXN0XzsKKyAgICBsaXN0XyA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHJlc3Vs
dCkpOworICAgIGxlbmd0aF8tLTsKKyAgICBpZiAobGVuZ3RoXyA8IGxvd2F0ZXJfKSBsb3dhdGVy
XyA9IGxlbmd0aF87CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorfTsKKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBEYXRhIGtlcHQgcGVyIHRocmVhZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRDTWFsbG9j
X1RocmVhZENhY2hlIHsKKyBwcml2YXRlOgorICB0eXBlZGVmIFRDTWFsbG9jX1RocmVhZENhY2hl
X0ZyZWVMaXN0IEZyZWVMaXN0OworCisgIHNpemVfdCAgICAgICAgc2l6ZV87ICAgICAgICAgICAg
ICAgICAgLy8gQ29tYmluZWQgc2l6ZSBvZiBkYXRhCisgIHB0aHJlYWRfdCAgICAgdGlkXzsgICAg
ICAgICAgICAgICAgICAgLy8gV2hpY2ggdGhyZWFkIG93bnMgaXQKKyAgYm9vbCAgICAgICAgICBz
ZXRzcGVjaWZpY187ICAgICAgICAgICAvLyBDYWxsZWQgcHRocmVhZF9zZXRzcGVjaWZpYz8KKyAg
RnJlZUxpc3QgICAgICBsaXN0X1trTnVtQ2xhc3Nlc107ICAgICAvLyBBcnJheSBpbmRleGVkIGJ5
IHNpemUtY2xhc3MKKworICAvLyBXZSBzYW1wbGUgYWxsb2NhdGlvbnMsIGJpYXNlZCBieSB0aGUg
c2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgorICB1aW50MzJfdCAgICAgIHJuZF87ICAgICAgICAgICAg
ICAgICAgIC8vIENoZWFwIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgIHNpemVfdCAgICAgICAg
Ynl0ZXNfdW50aWxfc2FtcGxlXzsgICAgLy8gQnl0ZXMgdW50aWwgd2Ugc2FtcGxlIG5leHQKKwor
IHB1YmxpYzoKKyAgLy8gQWxsIFRocmVhZENhY2hlIG9iamVjdHMgYXJlIGtlcHQgaW4gYSBsaW5r
ZWQgbGlzdCAoZm9yIHN0YXRzIGNvbGxlY3Rpb24pCisgIFRDTWFsbG9jX1RocmVhZENhY2hlKiBu
ZXh0XzsKKyAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIHByZXZfOworCisgIHZvaWQgSW5pdChwdGhy
ZWFkX3QgdGlkKTsKKyAgdm9pZCBDbGVhbnVwKCk7CisKKyAgLy8gQWNjZXNzb3JzIChtb3N0bHkg
anVzdCBmb3IgcHJpbnRpbmcgc3RhdHMpCisgIGludCBmcmVlbGlzdF9sZW5ndGgoc2l6ZV90IGNs
KSBjb25zdCB7IHJldHVybiBsaXN0X1tjbF0ubGVuZ3RoKCk7IH0KKworICAvLyBUb3RhbCBieXRl
IHNpemUgaW4gY2FjaGUKKyAgc2l6ZV90IFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQor
CisgIHZvaWQqIEFsbG9jYXRlKHNpemVfdCBzaXplKTsKKyAgdm9pZCBEZWFsbG9jYXRlKHZvaWQq
IHB0ciwgc2l6ZV90IHNpemVfY2xhc3MpOworCisgIHZvaWQgRmV0Y2hGcm9tQ2VudHJhbENhY2hl
KHNpemVfdCBjbCk7CisgIHZvaWQgUmVsZWFzZVRvQ2VudHJhbENhY2hlKHNpemVfdCBjbCwgaW50
IE4pOworICB2b2lkIFNjYXZlbmdlKCk7CisgIHZvaWQgUHJpbnQoKSBjb25zdDsKKworICAvLyBS
ZWNvcmQgYWxsb2NhdGlvbiBvZiAiayIgYnl0ZXMuICBSZXR1cm4gdHJ1ZSBpZmYgYWxsb2NhdGlv
bgorICAvLyBzaG91bGQgYmUgc2FtcGxlZAorICBib29sIFNhbXBsZUFsbG9jYXRpb24oc2l6ZV90
IGspOworCisgIC8vIFBpY2sgbmV4dCBzYW1wbGluZyBwb2ludAorICB2b2lkIFBpY2tOZXh0U2Ft
cGxlKCk7CisKKyAgc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICBJbml0TW9kdWxlKCk7Cisg
IHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgSW5pdFRTRCgpOworICBzdGF0aWMgVENNYWxs
b2NfVGhyZWFkQ2FjaGUqIEdldENhY2hlKCk7CisgIHN0YXRpYyBUQ01hbGxvY19UaHJlYWRDYWNo
ZSogR2V0Q2FjaGVJZlByZXNlbnQoKTsKKyAgc3RhdGljIHZvaWQqICAgICAgICAgICAgICAgICBD
cmVhdGVDYWNoZUlmTmVjZXNzYXJ5KCk7CisgIHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAg
RGVsZXRlQ2FjaGUodm9pZCogcHRyKTsKKyAgc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICBS
ZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGF0YSBr
ZXB0IHBlciBzaXplLWNsYXNzIGluIGNlbnRyYWwgY2FjaGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFz
cyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0IHsKKyBwdWJsaWM6CisgIHZvaWQgSW5pdChzaXpl
X3QgY2wpOworCisgIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCisgIC8vIEluc2VydCBvYmpl
Y3QuCisgIC8vIE1heSB0ZW1wb3JhcmlseSByZWxlYXNlIGxvY2tfLgorICB2b2lkIEluc2VydCh2
b2lkKiBvYmplY3QpOworCisgIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCisgIC8vIFJlbW92
ZSBvYmplY3QgZnJvbSBjYWNoZSBhbmQgcmV0dXJuLgorICAvLyBSZXR1cm4gTlVMTCBpZiBubyBm
cmVlIGVudHJpZXMgaW4gY2FjaGUuCisgIHZvaWQqIFJlbW92ZSgpOworCisgIC8vIFJFUVVJUkVT
OiBsb2NrXyBpcyBoZWxkCisgIC8vIFBvcHVsYXRlIGNhY2hlIGJ5IGZldGNoaW5nIGZyb20gdGhl
IHBhZ2UgaGVhcC4KKyAgLy8gTWF5IHRlbXBvcmFyaWx5IHJlbGVhc2UgbG9ja18uCisgIHZvaWQg
UG9wdWxhdGUoKTsKKworICAvLyBSRVFVSVJFUzogbG9ja18gaXMgaGVsZAorICAvLyBOdW1iZXIg
b2YgZnJlZSBvYmplY3RzIGluIGNhY2hlCisgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBj
b3VudGVyXzsgfQorCisgIC8vIExvY2sgLS0gZXhwb3NlZCBiZWNhdXNlIGNhbGxlciBncmFicyBp
dCBiZWZvcmUgdG91Y2hpbmcgdGhpcyBvYmplY3QKKyAgU3BpbkxvY2sgbG9ja187CisKKyBwcml2
YXRlOgorICAvLyBXZSBrZWVwIGxpbmtlZCBsaXN0cyBvZiBlbXB0eSBhbmQgbm9uLWVtb3R5IHNw
YW5zLgorICBzaXplX3QgICBzaXplX2NsYXNzXzsgICAgIC8vIE15IHNpemUgY2xhc3MKKyAgU3Bh
biAgICAgZW1wdHlfOyAgICAgICAgICAvLyBEdW1teSBoZWFkZXIgZm9yIGxpc3Qgb2YgZW1wdHkg
c3BhbnMKKyAgU3BhbiAgICAgbm9uZW1wdHlfOyAgICAgICAvLyBEdW1teSBoZWFkZXIgZm9yIGxp
c3Qgb2Ygbm9uLWVtcHR5IHNwYW5zCisgIHNpemVfdCAgIGNvdW50ZXJfOyAgICAgICAgLy8gTnVt
YmVyIG9mIGZyZWUgb2JqZWN0cyBpbiBjYWNoZSBlbnRyeQorfTsKKworLy8gUGFkIGVhY2ggQ2Vu
dHJhbENhY2hlIG9iamVjdCB0byBtdWx0aXBsZSBvZiA2NCBieXRlcworY2xhc3MgVENNYWxsb2Nf
Q2VudHJhbF9GcmVlTGlzdFBhZGRlZCA6IHB1YmxpYyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0
IHsKKyBwcml2YXRlOgorICBjaGFyIHBhZF9bKDY0IC0gKHNpemVvZihUQ01hbGxvY19DZW50cmFs
X0ZyZWVMaXN0KSAlIDY0KSkgJSA2NF07Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdsb2JhbCB2
YXJpYWJsZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBDZW50cmFsIGNhY2hlIC0tIGEgY29sbGVjdGlv
biBvZiBmcmVlLWxpc3RzLCBvbmUgcGVyIHNpemUtY2xhc3MuCisvLyBXZSBoYXZlIGEgc2VwYXJh
dGUgbG9jayBwZXIgZnJlZS1saXN0IHRvIHJlZHVjZSBjb250ZW50aW9uLgorc3RhdGljIFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQgY2VudHJhbF9jYWNoZVtrTnVtQ2xhc3Nlc107CisK
Ky8vIFBhZ2UtbGV2ZWwgYWxsb2NhdG9yCitzdGF0aWMgU3BpbkxvY2sgcGFnZWhlYXBfbG9jayA9
IFNQSU5MT0NLX0lOSVRJQUxJWkVSOworc3RhdGljIGNoYXIgcGFnZWhlYXBfbWVtb3J5W3NpemVv
ZihUQ01hbGxvY19QYWdlSGVhcCldOworc3RhdGljIGJvb2wgcGhpbml0ZWQgPSBmYWxzZTsKKwor
Ly8gQXZvaWQgZXh0cmEgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gYnkgbWFraW5nICJwYWdlaGVhcCIg
YmUganVzdCBhbiBhbGlhcworLy8gb2YgcGFnZWhlYXBfbWVtb3J5LgorI2RlZmluZSBwYWdlaGVh
cCAoKFRDTWFsbG9jX1BhZ2VIZWFwKikgcGFnZWhlYXBfbWVtb3J5KQorCisvLyBUaHJlYWQtc3Bl
Y2lmaWMga2V5LiAgSW5pdGlhbGl6YXRpb24gaGVyZSBpcyBzb21ld2hhdCB0cmlja3kKKy8vIGJl
Y2F1c2Ugc29tZSBMaW51eCBzdGFydHVwIGNvZGUgaW52b2tlcyBtYWxsb2MoKSBiZWZvcmUgaXQK
Ky8vIGlzIGluIGEgZ29vZCBlbm91Z2ggc3RhdGUgdG8gaGFuZGxlIHB0aHJlYWRfa2V5Y3JlYXRl
KCkuCisvLyBUaGVyZWZvcmUsIHdlIHVzZSBUU0Qga2V5cyBvbmx5IGFmdGVyIHRzZF9pbml0ZWQg
aXMgc2V0IHRvIHRydWUuCisvLyBVbnRpbCB0aGVuLCB3ZSB1c2UgYSBzbG93IHBhdGggdG8gZ2V0
IHRoZSBoZWFwIG9iamVjdC4KK3N0YXRpYyBib29sIHRzZF9pbml0ZWQgPSBmYWxzZTsKK3N0YXRp
YyBwdGhyZWFkX2tleV90IGhlYXBfa2V5OworCisvLyBBbGxvY2F0b3IgZm9yIHRocmVhZCBoZWFw
cworc3RhdGljIFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9jX1RocmVhZENhY2hlPiB0aHJlYWRo
ZWFwX2FsbG9jYXRvcjsKKworLy8gTGlua2VkIGxpc3Qgb2YgaGVhcCBvYmplY3RzLiAgUHJvdGVj
dGVkIGJ5IHBhZ2VoZWFwX2xvY2suCitzdGF0aWMgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIHRocmVh
ZF9oZWFwcyA9IE5VTEw7CitzdGF0aWMgaW50IHRocmVhZF9oZWFwX2NvdW50ID0gMDsKKworLy8g
T3ZlcmFsbCB0aHJlYWQgY2FjaGUgc2l6ZS4gIFByb3RlY3RlZCBieSBwYWdlaGVhcF9sb2NrLgor
c3RhdGljIHNpemVfdCBvdmVyYWxsX3RocmVhZF9jYWNoZV9zaXplID0ga0RlZmF1bHRPdmVyYWxs
VGhyZWFkQ2FjaGVTaXplOworCisvLyBHbG9iYWwgcGVyLXRocmVhZCBjYWNoZSBzaXplLiAgV3Jp
dGVzIGFyZSBwcm90ZWN0ZWQgYnkKKy8vIHBhZ2VoZWFwX2xvY2suICBSZWFkcyBhcmUgZG9uZSB3
aXRob3V0IGFueSBsb2NraW5nLCB3aGljaCBzaG91bGQgYmUKKy8vIGZpbmUgYXMgbG9uZyBhcyBz
aXplX3QgY2FuIGJlIHdyaXR0ZW4gYXRvbWljYWxseSBhbmQgd2UgZG9uJ3QgcGxhY2UKKy8vIGlu
dmFyaWFudHMgYmV0d2VlbiB0aGlzIHZhcmlhYmxlIGFuZCBvdGhlciBwaWVjZXMgb2Ygc3RhdGUu
CitzdGF0aWMgdm9sYXRpbGUgc2l6ZV90IHBlcl90aHJlYWRfY2FjaGVfc2l6ZSA9IGtNYXhUaHJl
YWRDYWNoZVNpemU7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ2VudHJhbCBjYWNoZSBpbXBsZW1lbnRh
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6SW5p
dChzaXplX3QgY2wpIHsKKyAgbG9ja18uSW5pdCgpOworICBzaXplX2NsYXNzXyA9IGNsOworICBE
TExfSW5pdCgmZW1wdHlfKTsKKyAgRExMX0luaXQoJm5vbmVtcHR5Xyk7CisgIGNvdW50ZXJfID0g
MDsKK30KKworaW5saW5lIHZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6SW5zZXJ0KHZv
aWQqIG9iamVjdCkgeworICBjb25zdCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihvYmplY3QpID4+IGtQYWdlU2hpZnQ7CisgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+R2V0
RGVzY3JpcHRvcihwKTsKKyAgQVNTRVJUKHNwYW4gIT0gTlVMTCk7CisgIEFTU0VSVChzcGFuLT5y
ZWZjb3VudCA+IDApOworCisgIC8vIElmIHNwYW4gaXMgZW1wdHksIG1vdmUgaXQgdG8gbm9uLWVt
cHR5IGxpc3QKKyAgaWYgKHNwYW4tPm9iamVjdHMgPT0gTlVMTCkgeworICAgIERMTF9SZW1vdmUo
c3Bhbik7CisgICAgRExMX1ByZXBlbmQoJm5vbmVtcHR5Xywgc3Bhbik7CisgICAgRXZlbnQoc3Bh
biwgJ04nLCAwKTsKKyAgfQorCisgIC8vIFRoZSBmb2xsb3dpbmcgY2hlY2sgaXMgZXhwZW5zaXZl
LCBzbyBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0CisgIGlmIChmYWxzZSkgeworICAgIC8vIENo
ZWNrIHRoYXQgb2JqZWN0IGRvZXMgbm90IG9jY3VyIGluIGxpc3QKKyAgICBpbnQgZ290ID0gMDsK
KyAgICBmb3IgKHZvaWQqIHAgPSBzcGFuLT5vYmplY3RzOyBwICE9IE5VTEw7IHAgPSAqKCh2b2lk
KiopIHApKSB7CisgICAgICBBU1NFUlQocCAhPSBvYmplY3QpOworICAgICAgZ290Kys7CisgICAg
fQorICAgIEFTU0VSVChnb3QgKyBzcGFuLT5yZWZjb3VudCA9PQorICAgICAgICAgICAoc3Bhbi0+
bGVuZ3RoPDxrUGFnZVNoaWZ0KS9CeXRlU2l6ZUZvckNsYXNzKHNwYW4tPnNpemVjbGFzcykpOwor
ICB9CisKKyAgY291bnRlcl8rKzsKKyAgc3Bhbi0+cmVmY291bnQtLTsKKyAgaWYgKHNwYW4tPnJl
ZmNvdW50ID09IDApIHsKKyAgICBFdmVudChzcGFuLCAnIycsIDApOworICAgIGNvdW50ZXJfIC09
IChzcGFuLT5sZW5ndGg8PGtQYWdlU2hpZnQpIC8gQnl0ZVNpemVGb3JDbGFzcyhzcGFuLT5zaXpl
Y2xhc3MpOworICAgIERMTF9SZW1vdmUoc3Bhbik7CisKKyAgICAvLyBSZWxlYXNlIGNlbnRyYWwg
bGlzdCBsb2NrIHdoaWxlIG9wZXJhdGluZyBvbiBwYWdlaGVhcAorICAgIGxvY2tfLlVubG9jaygp
OworICAgIHsKKyAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOworICAgICAg
cGFnZWhlYXAtPkRlbGV0ZShzcGFuKTsKKyAgICB9CisgICAgbG9ja18uTG9jaygpOworICB9IGVs
c2UgeworICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG9iamVjdCkpID0gc3Bhbi0+b2Jq
ZWN0czsKKyAgICBzcGFuLT5vYmplY3RzID0gb2JqZWN0OworICB9Cit9CisKK2lubGluZSB2b2lk
KiBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpSZW1vdmUoKSB7CisgIGlmIChETExfSXNFbXB0
eSgmbm9uZW1wdHlfKSkgcmV0dXJuIE5VTEw7CisgIFNwYW4qIHNwYW4gPSBub25lbXB0eV8ubmV4
dDsKKworICBBU1NFUlQoc3Bhbi0+b2JqZWN0cyAhPSBOVUxMKTsKKyAgc3Bhbi0+cmVmY291bnQr
KzsKKyAgdm9pZCogcmVzdWx0ID0gc3Bhbi0+b2JqZWN0czsKKyAgc3Bhbi0+b2JqZWN0cyA9ICoo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHJlc3VsdCkpOworICBpZiAoc3Bhbi0+b2JqZWN0cyA9
PSBOVUxMKSB7CisgICAgLy8gTW92ZSB0byBlbXB0eSBsaXN0CisgICAgRExMX1JlbW92ZShzcGFu
KTsKKyAgICBETExfUHJlcGVuZCgmZW1wdHlfLCBzcGFuKTsKKyAgICBFdmVudChzcGFuLCAnRScs
IDApOworICB9CisgIGNvdW50ZXJfLS07CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIEZldGNo
IG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0gYW5kIGFkZCB0byB0aGUgY2VudHJhbCBjYWNoZSBmcmVl
bGlzdC4KK2lubGluZSB2b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlBvcHVsYXRlKCkg
eworICAvLyBSZWxlYXNlIGNlbnRyYWwgbGlzdCBsb2NrIHdoaWxlIG9wZXJhdGluZyBvbiBwYWdl
aGVhcAorICBsb2NrXy5VbmxvY2soKTsKKyAgY29uc3Qgc2l6ZV90IG5wYWdlcyA9IGNsYXNzX3Rv
X3BhZ2VzW3NpemVfY2xhc3NfXTsKKworICBTcGFuKiBzcGFuOworICB7CisgICAgU3BpbkxvY2tI
b2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CisgICAgc3BhbiA9IHBhZ2VoZWFwLT5OZXcobnBhZ2Vz
KTsKKyAgICBpZiAoc3BhbikgcGFnZWhlYXAtPlJlZ2lzdGVyU2l6ZUNsYXNzKHNwYW4sIHNpemVf
Y2xhc3NfKTsKKyAgfQorICBpZiAoc3BhbiA9PSBOVUxMKSB7CisgICAgTUVTU0FHRSgiYWxsb2Nh
dGlvbiBmYWlsZWQ6ICVkXG4iLCBlcnJubyk7CisgICAgbG9ja18uTG9jaygpOworICAgIHJldHVy
bjsKKyAgfQorCisgIC8vIFNwbGl0IHRoZSBibG9jayBpbnRvIHBpZWNlcyBhbmQgYWRkIHRvIHRo
ZSBmcmVlLWxpc3QKKyAgLy8gVE9ETzogY29sb3Jpbmcgb2Ygb2JqZWN0cyB0byBhdm9pZCBjYWNo
ZSBjb25mbGljdHM/CisgIHZvaWQqKiB0YWlsID0gJnNwYW4tPm9iamVjdHM7CisgIGNoYXIqIHB0
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hpZnQpOwor
ICBjaGFyKiBsaW1pdCA9IHB0ciArIChucGFnZXMgPDwga1BhZ2VTaGlmdCk7CisgIGNvbnN0IHNp
emVfdCBzaXplID0gQnl0ZVNpemVGb3JDbGFzcyhzaXplX2NsYXNzXyk7CisgIGludCBudW0gPSAw
OworICB3aGlsZSAocHRyICsgc2l6ZSA8PSBsaW1pdCkgeworICAgICp0YWlsID0gcHRyOworICAg
IHRhaWwgPSByZWludGVycHJldF9jYXN0PHZvaWQqKj4ocHRyKTsKKyAgICBwdHIgKz0gc2l6ZTsK
KyAgICBudW0rKzsKKyAgfQorICBBU1NFUlQocHRyIDw9IGxpbWl0KTsKKyAgKnRhaWwgPSBOVUxM
OworICBzcGFuLT5yZWZjb3VudCA9IDA7IC8vIE5vIHN1Yi1vYmplY3QgaW4gdXNlIHlldAorCisg
IC8vIEFkZCBzcGFuIHRvIGxpc3Qgb2Ygbm9uLWVtcHR5IHNwYW5zCisgIGxvY2tfLkxvY2soKTsK
KyAgRExMX1ByZXBlbmQoJm5vbmVtcHR5Xywgc3Bhbik7CisgIGNvdW50ZXJfICs9IG51bTsKK30K
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBUQ01hbGxvY19UaHJlYWRDYWNoZSBpbXBsZW1lbnRhdGlvbgor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK2lubGluZSBib29sIFRDTWFsbG9jX1RocmVhZENhY2hlOjpTYW1wbGVB
bGxvY2F0aW9uKHNpemVfdCBrKSB7CisgIGlmIChieXRlc191bnRpbF9zYW1wbGVfIDwgaykgewor
ICAgIFBpY2tOZXh0U2FtcGxlKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0gZWxzZSB7CisgICAg
Ynl0ZXNfdW50aWxfc2FtcGxlXyAtPSBrOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQorCit2
b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0KHB0aHJlYWRfdCB0aWQpIHsKKyAgc2l6ZV8g
PSAwOworICBuZXh0XyA9IE5VTEw7CisgIHByZXZfID0gTlVMTDsKKyAgdGlkXyAgPSB0aWQ7Cisg
IHNldHNwZWNpZmljXyA9IGZhbHNlOworICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051bUNs
YXNzZXM7ICsrY2wpIHsKKyAgICBsaXN0X1tjbF0uSW5pdCgpOworICB9CisKKyAgLy8gSW5pdGlh
bGl6ZSBSTkcgLS0gcnVuIGl0IGZvciBhIGJpdCB0byBnZXQgdG8gZ29vZCB2YWx1ZXMKKyAgcm5k
XyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhp
cykpOworICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgUGlja05leHRTYW1w
bGUoKTsKKyAgfQorfQorCit2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpDbGVhbnVwKCkgewor
ICAvLyBQdXQgdW51c2VkIG1lbW9yeSBiYWNrIGludG8gY2VudHJhbCBjYWNoZQorICBmb3IgKHNp
emVfdCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKKyAgICBGcmVlTGlzdCogc3Jj
ID0gJmxpc3RfW2NsXTsKKyAgICBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0KiBkc3QgPSAmY2Vu
dHJhbF9jYWNoZVtjbF07CisgICAgU3BpbkxvY2tIb2xkZXIgaCgmZHN0LT5sb2NrXyk7CisgICAg
d2hpbGUgKCFzcmMtPmVtcHR5KCkpIHsKKyAgICAgIGRzdC0+SW5zZXJ0KHNyYy0+UG9wKCkpOwor
ICAgIH0KKyAgfQorfQorCitpbmxpbmUgdm9pZCogVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkFsbG9j
YXRlKHNpemVfdCBzaXplKSB7CisgIEFTU0VSVChzaXplIDw9IGtNYXhTaXplKTsKKyAgY29uc3Qg
c2l6ZV90IGNsID0gU2l6ZUNsYXNzKHNpemUpOworICBGcmVlTGlzdCogbGlzdCA9ICZsaXN0X1tj
bF07CisgIGlmIChsaXN0LT5lbXB0eSgpKSB7CisgICAgRmV0Y2hGcm9tQ2VudHJhbENhY2hlKGNs
KTsKKyAgICBpZiAobGlzdC0+ZW1wdHkoKSkgcmV0dXJuIE5VTEw7CisgIH0KKyAgc2l6ZV8gLT0g
Qnl0ZVNpemVGb3JDbGFzcyhjbCk7CisgIHJldHVybiBsaXN0LT5Qb3AoKTsKK30KKworaW5saW5l
IHZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlYWxsb2NhdGUodm9pZCogcHRyLCBzaXplX3Qg
Y2wpIHsKKyAgc2l6ZV8gKz0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7CisgIEZyZWVMaXN0KiBsaXN0
ID0gJmxpc3RfW2NsXTsKKyAgbGlzdC0+UHVzaChwdHIpOworICAvLyBJZiBlbm91Z2ggZGF0YSBp
cyBmcmVlLCBwdXQgYmFjayBpbnRvIGNlbnRyYWwgY2FjaGUKKyAgaWYgKGxpc3QtPmxlbmd0aCgp
ID4ga01heEZyZWVMaXN0TGVuZ3RoKSB7CisgICAgUmVsZWFzZVRvQ2VudHJhbENhY2hlKGNsLCBr
TnVtT2JqZWN0c1RvTW92ZSk7CisgIH0KKyAgaWYgKHNpemVfID49IHBlcl90aHJlYWRfY2FjaGVf
c2l6ZSkgU2NhdmVuZ2UoKTsKK30KKworLy8gUmVtb3ZlIHNvbWUgb2JqZWN0cyBvZiBjbGFzcyAi
Y2wiIGZyb20gY2VudHJhbCBjYWNoZSBhbmQgYWRkIHRvIHRocmVhZCBoZWFwCitpbmxpbmUgdm9p
ZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6RmV0Y2hGcm9tQ2VudHJhbENhY2hlKHNpemVfdCBjbCkg
eworICBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0KiBzcmMgPSAmY2VudHJhbF9jYWNoZVtjbF07
CisgIEZyZWVMaXN0KiBkc3QgPSAmbGlzdF9bY2xdOworICBTcGluTG9ja0hvbGRlciBoKCZzcmMt
PmxvY2tfKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtT2JqZWN0c1RvTW92ZTsgaSsrKSB7
CisgICAgdm9pZCogb2JqZWN0ID0gc3JjLT5SZW1vdmUoKTsKKyAgIGlmIChvYmplY3QgPT0gTlVM
TCkgeworICAgICAgaWYgKGkgPT0gMCkgeworICAgICAgICBzcmMtPlBvcHVsYXRlKCk7ICAgICAg
ICAvLyBUZW1wb3JhcmlseSByZWxlYXNlcyBzcmMtPmxvY2tfCisgICAgICAgIG9iamVjdCA9IHNy
Yy0+UmVtb3ZlKCk7CisgICAgIH0KKyAgICAgIGlmIChvYmplY3QgPT0gTlVMTCkgeworICAgICAg
ICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgZHN0LT5QdXNoKG9iamVjdCk7CisgICAgc2l6
ZV8gKz0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7CisgIH0KK30KKworLy8gUmVtb3ZlIHNvbWUgb2Jq
ZWN0cyBvZiBjbGFzcyAiY2wiIGZyb20gdGhyZWFkIGhlYXAgYW5kIGFkZCB0byBjZW50cmFsIGNh
Y2hlCitpbmxpbmUgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6UmVsZWFzZVRvQ2VudHJhbENh
Y2hlKHNpemVfdCBjbCwgaW50IE4pIHsKKyAgRnJlZUxpc3QqIHNyYyA9ICZsaXN0X1tjbF07Cisg
IFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QqIGRzdCA9ICZjZW50cmFsX2NhY2hlW2NsXTsKKyAg
U3BpbkxvY2tIb2xkZXIgaCgmZHN0LT5sb2NrXyk7CisgIGlmIChOID4gc3JjLT5sZW5ndGgoKSkg
TiA9IHNyYy0+bGVuZ3RoKCk7CisgIHNpemVfIC09IE4qQnl0ZVNpemVGb3JDbGFzcyhjbCk7Cisg
IHdoaWxlIChOLS0gPiAwKSB7CisgICAgdm9pZCogcHRyID0gc3JjLT5Qb3AoKTsKKyAgICBkc3Qt
Pkluc2VydChwdHIpOworICB9Cit9CisKKy8vIFJlbGVhc2UgaWRsZSBtZW1vcnkgdG8gdGhlIGNl
bnRyYWwgY2FjaGUKK2lubGluZSB2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpTY2F2ZW5nZSgp
IHsKKyAgLy8gSWYgdGhlIGxvdy13YXRlciBtYXJrIGZvciB0aGUgZnJlZSBsaXN0IGlzIEwsIGl0
IG1lYW5zIHdlIHdvdWxkCisgIC8vIG5vdCBoYXZlIGhhZCB0byBhbGxvY2F0ZSBhbnl0aGluZyBm
cm9tIHRoZSBjZW50cmFsIGNhY2hlIGV2ZW4gaWYKKyAgLy8gd2UgaGFkIHJlZHVjZWQgdGhlIGZy
ZWUgbGlzdCBzaXplIGJ5IEwuICBXZSBhaW0gdG8gZ2V0IGNsb3NlciB0bworICAvLyB0aGF0IHNp
dHVhdGlvbiBieSBkcm9wcGluZyBMLzIgbm9kZXMgZnJvbSB0aGUgZnJlZSBsaXN0LiAgVGhpcwor
ICAvLyBtYXkgbm90IHJlbGVhc2UgbXVjaCBtZW1vcnksIGJ1dCBpZiBzbyB3ZSB3aWxsIGNhbGwg
c2NhdmVuZ2UgYWdhaW4KKyAgLy8gcHJldHR5IHNvb24gYW5kIHRoZSBsb3ctd2F0ZXIgbWFya3Mg
d2lsbCBiZSBoaWdoIG9uIHRoYXQgY2FsbC4KKyNpZm5kZWYgS1hDX0NIQU5HRVMKKyAgaW50NjQg
c3RhcnQgPSBDeWNsZUNsb2NrOjpOb3coKTsKKyNlbmRpZgorCisgIGZvciAoc2l6ZV90IGNsID0g
MDsgY2wgPCBrTnVtQ2xhc3NlczsgY2wrKykgeworICAgIEZyZWVMaXN0KiBsaXN0ID0gJmxpc3Rf
W2NsXTsKKyAgICBjb25zdCBpbnQgbG93bWFyayA9IGxpc3QtPmxvd3dhdGVybWFyaygpOworICAg
IGlmIChsb3dtYXJrID4gMCkgeworICAgICAgY29uc3QgaW50IGRyb3AgPSAobG93bWFyayA+IDEp
ID8gbG93bWFyay8yIDogMTsKKyAgICAgIFJlbGVhc2VUb0NlbnRyYWxDYWNoZShjbCwgZHJvcCk7
CisgICAgfQorICAgIGxpc3QtPmNsZWFyX2xvd3dhdGVybWFyaygpOworICB9CisKKyNpZm5kZWYg
S1hDX0NIQU5HRVMKKyAgaW50NjQgZmluaXNoID0gQ3ljbGVDbG9jazo6Tm93KCk7CisgIEN5Y2xl
VGltZXIgY3Q7CisgIE1FU1NBR0UoIkdDOiAlLjBmIG5zXG4iLCBjdC5DeWNsZXNUb1VzZWMoZmlu
aXNoLXN0YXJ0KSoxMDAwLjApOworI2VuZGlmCit9CisKK2lubGluZSBUQ01hbGxvY19UaHJlYWRD
YWNoZSogVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKCkgeworICB2b2lkKiBwdHIgPSBO
VUxMOworICBpZiAoIXRzZF9pbml0ZWQpIHsKKyAgICBJbml0TW9kdWxlKCk7CisgIH0gZWxzZSB7
CisgICAgcHRyID0gcHRocmVhZF9nZXRzcGVjaWZpYyhoZWFwX2tleSk7CisgIH0KKyAgaWYgKHB0
ciA9PSBOVUxMKSBwdHIgPSBDcmVhdGVDYWNoZUlmTmVjZXNzYXJ5KCk7CisgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFRDTWFsbG9jX1RocmVhZENhY2hlKj4ocHRyKTsKK30KKworLy8gSW4gZGVs
ZXRpb24gcGF0aHMsIHdlIGRvIG5vdCB0cnkgdG8gY3JlYXRlIGEgdGhyZWFkLWNhY2hlLiAgVGhp
cyBpcworLy8gYmVjYXVzZSB3ZSBtYXkgYmUgaW4gdGhlIHRocmVhZCBkZXN0cnVjdGlvbiBjb2Rl
IGFuZCBtYXkgaGF2ZQorLy8gYWxyZWFkeSBjbGVhbmVkIHVwIHRoZSBjYWNoZSBmb3IgdGhpcyB0
aHJlYWQuCitpbmxpbmUgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIFRDTWFsbG9jX1RocmVhZENhY2hl
OjpHZXRDYWNoZUlmUHJlc2VudCgpIHsKKyAgaWYgKCF0c2RfaW5pdGVkKSByZXR1cm4gTlVMTDsK
KyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VENNYWxsb2NfVGhyZWFkQ2FjaGUqPgorICAgIChw
dGhyZWFkX2dldHNwZWNpZmljKGhlYXBfa2V5KSk7Cit9CisKK3ZvaWQgVENNYWxsb2NfVGhyZWFk
Q2FjaGU6OlBpY2tOZXh0U2FtcGxlKCkgeworICAvLyBNYWtlIG5leHQgInJhbmRvbSIgbnVtYmVy
CisgIC8vIHheMzIreF4yMit4XjIreF4xKzEgaXMgYSBwcmltaXRpdmUgcG9seW5vbWlhbCBmb3Ig
cmFuZG9tIG51bWJlcnMKKyAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtQb2x5ID0gKDEgPDwgMjIp
IHwgKDEgPDwgMikgfCAoMSA8PCAxKSB8ICgxIDw8IDApOworICB1aW50MzJfdCByID0gcm5kXzsK
KyAgcm5kXyA9IChyIDw8IDEpIF4gKChzdGF0aWNfY2FzdDxpbnQzMl90PihyKSA+PiAzMSkgJiBr
UG9seSk7CisKKyAgLy8gTmV4dCBwb2ludCBpcyAicm5kXyAlICgyKnNhbXBsZV9wZXJpb2QpIi4g
IEkuZS4sIGF2ZXJhZ2UKKyAgLy8gaW5jcmVtZW50IGlzICJzYW1wbGVfcGVyaW9kIi4KKyAgYnl0
ZXNfdW50aWxfc2FtcGxlXyA9IHJuZF8gJSBrU2FtcGxlUGFyYW1ldGVyOworfQorCit2b2lkIFRD
TWFsbG9jX1RocmVhZENhY2hlOjpJbml0TW9kdWxlKCkgeworICAvLyBUaGVyZSBpcyBhIHNsaWdo
dCBwb3RlbnRpYWwgcmFjZSBoZXJlIGJlY2F1c2Ugb2YgZG91YmxlLWNoZWNrZWQKKyAgLy8gbG9j
a2luZyBpZGlvbS4gIEhvd2V2ZXIsIGFzIGxvbmcgYXMgdGhlIHByb2dyYW0gZG9lcyBhIHNtYWxs
CisgIC8vIGFsbG9jYXRpb24gYmVmb3JlIHN3aXRjaGluZyB0byBtdWx0aS10aHJlYWRlZCBtb2Rl
LCB3ZSB3aWxsIGJlCisgIC8vIGZpbmUuICBXZSBpbmNyZWFzZSB0aGUgY2hhbmNlcyBvZiBkb2lu
ZyBzdWNoIGEgc21hbGwgYWxsb2NhdGlvbgorICAvLyBieSBkb2luZyBvbmUgaW4gdGhlIGNvbnN0
cnVjdG9yIG9mIHRoZSBtb2R1bGVfZW50ZXJfZXhpdF9ob29rCisgIC8vIG9iamVjdCBkZWNsYXJl
ZCBiZWxvdy4KKyAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CisgIGlmICghcGhp
bml0ZWQpIHsKKyAgICBJbml0U2l6ZUNsYXNzZXMoKTsKKyAgICB0aHJlYWRoZWFwX2FsbG9jYXRv
ci5Jbml0KCk7CisgICAgc3Bhbl9hbGxvY2F0b3IuSW5pdCgpOworICAgIHNwYW5fYWxsb2NhdG9y
Lk5ldygpOyAvLyBSZWR1Y2UgY2FjaGUgY29uZmxpY3RzCisgICAgc3Bhbl9hbGxvY2F0b3IuTmV3
KCk7IC8vIFJlZHVjZSBjYWNoZSBjb25mbGljdHMKKyAgICBzdGFja3RyYWNlX2FsbG9jYXRvci5J
bml0KCk7CisgICAgRExMX0luaXQoJnNhbXBsZWRfb2JqZWN0cyk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrTnVtQ2xhc3NlczsgKytpKSB7CisgICAgICBjZW50cmFsX2NhY2hlW2ldLklu
aXQoaSk7CisgICAgfQorICAgIG5ldyAoKHZvaWQqKXBhZ2VoZWFwX21lbW9yeSkgVENNYWxsb2Nf
UGFnZUhlYXA7CisgICAgcGhpbml0ZWQgPSAxOworICB9Cit9CisKK3ZvaWQgVENNYWxsb2NfVGhy
ZWFkQ2FjaGU6OkluaXRUU0QoKSB7CisgIEFTU0VSVCghdHNkX2luaXRlZCk7CisgIHB0aHJlYWRf
a2V5X2NyZWF0ZSgmaGVhcF9rZXksIERlbGV0ZUNhY2hlKTsKKyAgdHNkX2luaXRlZCA9IHRydWU7
CisgICAgCisgIC8vIFdlIG1heSBoYXZlIHVzZWQgYSBmYWtlIHB0aHJlYWRfdCBmb3IgdGhlIG1h
aW4gdGhyZWFkLiAgRml4IGl0LgorICBwdGhyZWFkX3QgemVybzsKKyAgbWVtc2V0KCZ6ZXJvLCAw
LCBzaXplb2YoemVybykpOworICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKKyAg
Zm9yIChUQ01hbGxvY19UaHJlYWRDYWNoZSogaCA9IHRocmVhZF9oZWFwczsgaCAhPSBOVUxMOyBo
ID0gaC0+bmV4dF8pIHsKKyAgICBpZiAoaC0+dGlkXyA9PSB6ZXJvKSB7CisgICAgICBoLT50aWRf
ID0gcHRocmVhZF9zZWxmKCk7CisgICAgfQorICB9Cit9CisKK3ZvaWQqIFRDTWFsbG9jX1RocmVh
ZENhY2hlOjpDcmVhdGVDYWNoZUlmTmVjZXNzYXJ5KCkgeworICAvLyBJbml0aWFsaXplIHBlci10
aHJlYWQgZGF0YSBpZiBuZWNlc3NhcnkKKyAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAgPSBO
VUxMOworICB7CisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CisKKyAgICAv
LyBFYXJseSBvbiBpbiBnbGliYydzIGxpZmUsIHdlIGNhbm5vdCBldmVuIGNhbGwgcHRocmVhZF9z
ZWxmKCkKKyAgICBwdGhyZWFkX3QgbWU7CisgICAgaWYgKCF0c2RfaW5pdGVkKSB7CisgICAgICBt
ZW1zZXQoJm1lLCAwLCBzaXplb2YobWUpKTsKKyAgICB9IGVsc2UgeworICAgICAgbWUgPSBwdGhy
ZWFkX3NlbGYoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIG1heSBiZSBhIHJlY3Vyc2l2ZSBtYWxs
b2MgY2FsbCBmcm9tIHB0aHJlYWRfc2V0c3BlY2lmaWMoKQorICAgIC8vIEluIHRoYXQgY2FzZSwg
dGhlIGhlYXAgZm9yIHRoaXMgdGhyZWFkIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZAorICAgIC8v
IGFuZCBhZGRlZCB0byB0aGUgbGlua2VkIGxpc3QuICBTbyB3ZSBzZWFyY2ggZm9yIHRoYXQgZmly
c3QuCisgICAgZm9yIChUQ01hbGxvY19UaHJlYWRDYWNoZSogaCA9IHRocmVhZF9oZWFwczsgaCAh
PSBOVUxMOyBoID0gaC0+bmV4dF8pIHsKKyAgICAgIGlmIChoLT50aWRfID09IG1lKSB7CisgICAg
ICAgIGhlYXAgPSBoOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
aGVhcCA9PSBOVUxMKSB7CisgICAgICAvLyBDcmVhdGUgdGhlIGhlYXAgYW5kIGFkZCBpdCB0byB0
aGUgbGlua2VkIGxpc3QKKyAgICAgIGhlYXAgPSB0aHJlYWRoZWFwX2FsbG9jYXRvci5OZXcoKTsK
KyAgICAgIGhlYXAtPkluaXQobWUpOworICAgICAgaGVhcC0+bmV4dF8gPSB0aHJlYWRfaGVhcHM7
CisgICAgICBoZWFwLT5wcmV2XyA9IE5VTEw7CisgICAgICBpZiAodGhyZWFkX2hlYXBzICE9IE5V
TEwpIHRocmVhZF9oZWFwcy0+cHJldl8gPSBoZWFwOworICAgICAgdGhyZWFkX2hlYXBzID0gaGVh
cDsKKyAgICAgIHRocmVhZF9oZWFwX2NvdW50Kys7CisgICAgICBSZWNvbXB1dGVUaHJlYWRDYWNo
ZVNpemUoKTsKKyAgICB9CisgIH0KKworICAvLyBXZSBjYWxsIHB0aHJlYWRfc2V0c3BlY2lmaWMo
KSBvdXRzaWRlIHRoZSBsb2NrIGJlY2F1c2UgaXQgbWF5CisgIC8vIGNhbGwgbWFsbG9jKCkgcmVj
dXJzaXZlbHkuICBUaGUgcmVjdXJzaXZlIGNhbGwgd2lsbCBuZXZlciBnZXQKKyAgLy8gaGVyZSBh
Z2FpbiBiZWNhdXNlIGl0IHdpbGwgZmluZCB0aGUgYWxyZWFkeSBhbGxvY2F0ZWQgaGVhcCBpbiB0
aGUKKyAgLy8gbGlua2VkIGxpc3Qgb2YgaGVhcHMuCisgIGlmICghaGVhcC0+c2V0c3BlY2lmaWNf
ICYmIHRzZF9pbml0ZWQpIHsKKyAgICBoZWFwLT5zZXRzcGVjaWZpY18gPSB0cnVlOworICAgIHB0
aHJlYWRfc2V0c3BlY2lmaWMoaGVhcF9rZXksIGhlYXApOworICB9CisgIHJldHVybiBoZWFwOwor
fQorCit2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpEZWxldGVDYWNoZSh2b2lkKiBwdHIpIHsK
KyAgLy8gUmVtb3ZlIGFsbCBtZW1vcnkgZnJvbSBoZWFwCisgIFRDTWFsbG9jX1RocmVhZENhY2hl
KiBoZWFwOworICBoZWFwID0gcmVpbnRlcnByZXRfY2FzdDxUQ01hbGxvY19UaHJlYWRDYWNoZSo+
KHB0cik7CisgIGhlYXAtPkNsZWFudXAoKTsKKworICAvLyBSZW1vdmUgZnJvbSBsaW5rZWQgbGlz
dAorICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKKyAgaWYgKGhlYXAtPm5leHRf
ICE9IE5VTEwpIGhlYXAtPm5leHRfLT5wcmV2XyA9IGhlYXAtPnByZXZfOworICBpZiAoaGVhcC0+
cHJldl8gIT0gTlVMTCkgaGVhcC0+cHJldl8tPm5leHRfID0gaGVhcC0+bmV4dF87CisgIGlmICh0
aHJlYWRfaGVhcHMgPT0gaGVhcCkgdGhyZWFkX2hlYXBzID0gaGVhcC0+bmV4dF87CisgIHRocmVh
ZF9oZWFwX2NvdW50LS07CisgIFJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgpOworCisgIHRocmVh
ZGhlYXBfYWxsb2NhdG9yLkRlbGV0ZShoZWFwKTsKK30KKwordm9pZCBUQ01hbGxvY19UaHJlYWRD
YWNoZTo6UmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCkgeworICAvLyBEaXZpZGUgYXZhaWxhYmxl
IHNwYWNlIGFjcm9zcyB0aHJlYWRzCisgIGludCBuID0gdGhyZWFkX2hlYXBfY291bnQgPiAwID8g
dGhyZWFkX2hlYXBfY291bnQgOiAxOworICBzaXplX3Qgc3BhY2UgPSBvdmVyYWxsX3RocmVhZF9j
YWNoZV9zaXplIC8gbjsKKworICAvLyBMaW1pdCB0byBhbGxvd2VkIHJhbmdlCisgIGlmIChzcGFj
ZSA8IGtNaW5UaHJlYWRDYWNoZVNpemUpIHNwYWNlID0ga01pblRocmVhZENhY2hlU2l6ZTsKKyAg
aWYgKHNwYWNlID4ga01heFRocmVhZENhY2hlU2l6ZSkgc3BhY2UgPSBrTWF4VGhyZWFkQ2FjaGVT
aXplOworCisgIHBlcl90aHJlYWRfY2FjaGVfc2l6ZSA9IHNwYWNlOworfQorCit2b2lkIFRDTWFs
bG9jX1RocmVhZENhY2hlOjpQcmludCgpIGNvbnN0IHsKKyAgZm9yIChzaXplX3QgY2wgPSAwOyBj
bCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7CisgICAgTUVTU0FHRSgiICAgICAgJTUiIFBSSXVTICIg
OiAlNGQgbGVuOyAlNGQgbG9cbiIsCisgICAgICAgICAgICBCeXRlU2l6ZUZvckNsYXNzKGNsKSwK
KyAgICAgICAgICAgIGxpc3RfW2NsXS5sZW5ndGgoKSwKKyAgICAgICAgICAgIGxpc3RfW2NsXS5s
b3d3YXRlcm1hcmsoKSk7CisgIH0KK30KKworLy8gRXh0cmFjdCBpbnRlcmVzdGluZyBzdGF0cwor
c3RydWN0IFRDTWFsbG9jU3RhdHMgeworICB1aW50NjRfdCBzeXN0ZW1fYnl0ZXM7ICAgICAgICAv
LyBCeXRlcyBhbGxvY2VkIGZyb20gc3lzdGVtCisgIHVpbnQ2NF90IHRocmVhZF9ieXRlczsgICAg
ICAgIC8vIEJ5dGVzIGluIHRocmVhZCBjYWNoZXMKKyAgdWludDY0X3QgY2VudHJhbF9ieXRlczsg
ICAgICAgLy8gQnl0ZXMgaW4gY2VudHJhbCBjYWNoZQorICB1aW50NjRfdCBwYWdlaGVhcF9ieXRl
czsgICAgICAvLyBCeXRlcyBpbiBwYWdlIGhlYXAKKyAgdWludDY0X3QgbWV0YWRhdGFfYnl0ZXM7
ICAgICAgLy8gQnl0ZXMgYWxsb2NlZCBmb3IgbWV0YWRhdGEKK307CisKKyNpZm5kZWYgS1hDX0NI
QU5HRVMKKy8vIEdldCBzdGF0cyBpbnRvICJyIi4gIEFsc28gZ2V0IHBlci1zaXplLWNsYXNzIGNv
dW50cyBpZiBjbGFzc19jb3VudCAhPSBOVUxMCitzdGF0aWMgdm9pZCBFeHRyYWN0U3RhdHMoVENN
YWxsb2NTdGF0cyogciwgdWludDY0X3QqIGNsYXNzX2NvdW50KSB7CisgIHItPmNlbnRyYWxfYnl0
ZXMgPSAwOworICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsK
KyAgICBTcGluTG9ja0hvbGRlciBoKCZjZW50cmFsX2NhY2hlW2NsXS5sb2NrXyk7CisgICAgY29u
c3QgaW50IGxlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLmxlbmd0aCgpOworICAgIHItPmNlbnRy
YWxfYnl0ZXMgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xhc3MoY2wpKSAq
IGxlbmd0aDsKKyAgICBpZiAoY2xhc3NfY291bnQpIGNsYXNzX2NvdW50W2NsXSA9IGxlbmd0aDsK
KyAgfQorCisgIC8vIEFkZCBzdGF0cyBmcm9tIHBlci10aHJlYWQgaGVhcHMKKyAgci0+dGhyZWFk
X2J5dGVzID0gMDsKKyAgeyAvLyBzY29wZQorICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFw
X2xvY2spOworICAgIGZvciAoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGggPSB0aHJlYWRfaGVhcHM7
IGggIT0gTlVMTDsgaCA9IGgtPm5leHRfKSB7CisgICAgICByLT50aHJlYWRfYnl0ZXMgKz0gaC0+
U2l6ZSgpOworICAgICAgaWYgKGNsYXNzX2NvdW50KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGNs
ID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgeworICAgICAgICAgIGNsYXNzX2NvdW50W2Ns
XSArPSBoLT5mcmVlbGlzdF9sZW5ndGgoY2wpOworICAgICAgICB9CisgICAgICB9CisgICAgfQor
ICB9CisKKyAgeyAvL3Njb3BlCisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7
CisgICAgci0+c3lzdGVtX2J5dGVzID0gcGFnZWhlYXAtPlN5c3RlbUJ5dGVzKCk7CisgICAgci0+
bWV0YWRhdGFfYnl0ZXMgPSBtZXRhZGF0YV9zeXN0ZW1fYnl0ZXM7CisgICAgci0+cGFnZWhlYXBf
Ynl0ZXMgPSBwYWdlaGVhcC0+RnJlZUJ5dGVzKCk7CisgIH0KK30KKyNlbmRpZgorCisjaWZuZGVm
IEtYQ19DSEFOR0VTCisvLyBXUklURSBzdGF0cyB0byAib3V0Igorc3RhdGljIHZvaWQgRHVtcFN0
YXRzKFRDTWFsbG9jX1ByaW50ZXIqIG91dCwgaW50IGxldmVsKSB7CisgIFRDTWFsbG9jU3RhdHMg
c3RhdHM7CisgIHVpbnQ2NF90IGNsYXNzX2NvdW50W2tOdW1DbGFzc2VzXTsKKyAgRXh0cmFjdFN0
YXRzKCZzdGF0cywgKGxldmVsID49IDIgPyBjbGFzc19jb3VudCA6IE5VTEwpKTsKKworICBpZiAo
bGV2ZWwgPj0gMikgeworICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICAgIHVpbnQ2NF90IGN1bXVsYXRpdmUgPSAw
OworICAgIGZvciAoaW50IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgeworICAgICAg
aWYgKGNsYXNzX2NvdW50W2NsXSA+IDApIHsKKyAgICAgICAgdWludDY0X3QgY2xhc3NfYnl0ZXMg
PSBjbGFzc19jb3VudFtjbF0gKiBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKKyAgICAgICAgY3VtdWxh
dGl2ZSArPSBjbGFzc19ieXRlczsKKyAgICAgICAgb3V0LT5wcmludGYoImNsYXNzICUzZCBbICU4
IiBQUkl1UyAiIGJ5dGVzIF0gOiAiCisgICAgICAgICAgICAgICAgIiU4IiBMTFUgIiBvYmpzOyAl
NS4xZiBNQjsgJTUuMWYgY3VtIE1CXG4iLAorICAgICAgICAgICAgICAgIGNsLCBCeXRlU2l6ZUZv
ckNsYXNzKGNsKSwKKyAgICAgICAgICAgICAgICBjbGFzc19jb3VudFtjbF0sCisgICAgICAgICAg
ICAgICAgY2xhc3NfYnl0ZXMgLyAxMDQ4NTc2LjAsCisgICAgICAgICAgICAgICAgY3VtdWxhdGl2
ZSAvIDEwNDg1NzYuMCk7CisgICAgICB9CisgICAgfQorCisgICAgU3BpbkxvY2tIb2xkZXIgaCgm
cGFnZWhlYXBfbG9jayk7CisgICAgcGFnZWhlYXAtPkR1bXAob3V0KTsKKyAgfQorCisgIGNvbnN0
IHVpbnQ2NF90IGJ5dGVzX2luX3VzZSA9IHN0YXRzLnN5c3RlbV9ieXRlcworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnBhZ2VoZWFwX2J5dGVzCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0gc3RhdHMuY2VudHJhbF9ieXRlcworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtIHN0YXRzLnRocmVhZF9ieXRlczsKKworICBvdXQtPnByaW50Zigi
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAg
ICAgICAgICAgICJNQUxMT0M6ICUxMiIgTExVICIgSGVhcCBzaXplXG4iCisgICAgICAgICAgICAg
ICJNQUxMT0M6ICUxMiIgTExVICIgQnl0ZXMgaW4gdXNlIGJ5IGFwcGxpY2F0aW9uXG4iCisgICAg
ICAgICAgICAgICJNQUxMT0M6ICUxMiIgTExVICIgQnl0ZXMgZnJlZSBpbiBwYWdlIGhlYXBcbiIK
KyAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBMTFUgIiBCeXRlcyBmcmVlIGluIGNlbnRyYWwg
Y2FjaGVcbiIKKyAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBMTFUgIiBCeXRlcyBmcmVlIGlu
IHRocmVhZCBjYWNoZXNcbiIKKyAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBMTFUgIiBTcGFu
cyBpbiB1c2VcbiIKKyAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBMTFUgIiBUaHJlYWQgaGVh
cHMgaW4gdXNlXG4iCisgICAgICAgICAgICAgICJNQUxMT0M6ICUxMiIgTExVICIgTWV0YWRhdGEg
YWxsb2NhdGVkXG4iCisgICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsCisgICAgICAgICAgICAgIHN0YXRzLnN5c3RlbV9ieXRl
cywKKyAgICAgICAgICAgICAgYnl0ZXNfaW5fdXNlLAorICAgICAgICAgICAgICBzdGF0cy5wYWdl
aGVhcF9ieXRlcywKKyAgICAgICAgICAgICAgc3RhdHMuY2VudHJhbF9ieXRlcywKKyAgICAgICAg
ICAgICAgc3RhdHMudGhyZWFkX2J5dGVzLAorICAgICAgICAgICAgICB1aW50NjRfdChzcGFuX2Fs
bG9jYXRvci5pbnVzZSgpKSwKKyAgICAgICAgICAgICAgdWludDY0X3QodGhyZWFkaGVhcF9hbGxv
Y2F0b3IuaW51c2UoKSksCisgICAgICAgICAgICAgIHN0YXRzLm1ldGFkYXRhX2J5dGVzKTsKK30K
Kworc3RhdGljIHZvaWQgUHJpbnRTdGF0cyhpbnQgbGV2ZWwpIHsKKyAgY29uc3QgaW50IGtCdWZm
ZXJTaXplID0gMTYgPDwgMTA7CisgIGNoYXIqIGJ1ZmZlciA9IG5ldyBjaGFyW2tCdWZmZXJTaXpl
XTsKKyAgVENNYWxsb2NfUHJpbnRlciBwcmludGVyKGJ1ZmZlciwga0J1ZmZlclNpemUpOworICBE
dW1wU3RhdHMoJnByaW50ZXIsIGxldmVsKTsKKyAgd3JpdGUoU1RERVJSX0ZJTEVOTywgYnVmZmVy
LCBzdHJsZW4oYnVmZmVyKSk7CisgIGRlbGV0ZVtdIGJ1ZmZlcjsKK30KKworc3RhdGljIHZvaWQq
KiBEdW1wU3RhY2tUcmFjZXMoKSB7CisgIC8vIENvdW50IGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQK
KyAgaW50IG5lZWRlZF9zbG90cyA9IDA7CisgIHsKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdl
aGVhcF9sb2NrKTsKKyAgICBmb3IgKFNwYW4qIHMgPSBzYW1wbGVkX29iamVjdHMubmV4dDsgcyAh
PSAmc2FtcGxlZF9vYmplY3RzOyBzID0gcy0+bmV4dCkgeworICAgICAgU3RhY2tUcmFjZSogc3Rh
Y2sgPSByZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzLT5vYmplY3RzKTsKKyAgICAgIG5l
ZWRlZF9zbG90cyArPSAzICsgc3RhY2stPmRlcHRoOworICAgIH0KKyAgICBuZWVkZWRfc2xvdHMg
Kz0gMTAwOyAgICAgICAgICAgIC8vIFNsb3AgaW4gY2FzZSBzYW1wbGUgZ3Jvd3MKKyAgICBuZWVk
ZWRfc2xvdHMgKz0gbmVlZGVkX3Nsb3RzLzg7IC8vIEFuIGV4dHJhIDEyLjUlIHNsb3AKKyAgfQor
CisgIHZvaWQqKiByZXN1bHQgPSBuZXcgdm9pZCpbbmVlZGVkX3Nsb3RzXTsKKyAgaWYgKHJlc3Vs
dCA9PSBOVUxMKSB7CisgICAgTUVTU0FHRSgidGNtYWxsb2M6IGNvdWxkIG5vdCBhbGxvY2F0ZSAl
ZCBzbG90cyBmb3Igc3RhY2sgdHJhY2VzXG4iLAorICAgICAgICAgICAgbmVlZGVkX3Nsb3RzKTsK
KyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xv
Y2spOworICBpbnQgdXNlZF9zbG90cyA9IDA7CisgIGZvciAoU3BhbiogcyA9IHNhbXBsZWRfb2Jq
ZWN0cy5uZXh0OyBzICE9ICZzYW1wbGVkX29iamVjdHM7IHMgPSBzLT5uZXh0KSB7CisgICAgQVNT
RVJUKHVzZWRfc2xvdHMgPCBuZWVkZWRfc2xvdHMpOyAgLy8gTmVlZCB0byBsZWF2ZSByb29tIGZv
ciB0ZXJtaW5hdG9yCisgICAgU3RhY2tUcmFjZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0
YWNrVHJhY2UqPihzLT5vYmplY3RzKTsKKyAgICBpZiAodXNlZF9zbG90cyArIDMgKyBzdGFjay0+
ZGVwdGggPj0gbmVlZGVkX3Nsb3RzKSB7CisgICAgICAvLyBObyBtb3JlIHJvb20KKyAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJlc3VsdFt1c2VkX3Nsb3RzKzBdID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oMSk7CisgICAgcmVzdWx0W3VzZWRfc2xvdHMrMV0gPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihzdGFjay0+c2l6ZSk7CisgICAgcmVzdWx0W3VzZWRfc2xvdHMrMl0gPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihzdGFjay0+ZGVwdGgpOworICAgIGZvciAoaW50IGQgPSAwOyBkIDwg
c3RhY2stPmRlcHRoOyBkKyspIHsKKyAgICAgIHJlc3VsdFt1c2VkX3Nsb3RzKzMrZF0gPSBzdGFj
ay0+c3RhY2tbZF07CisgICAgfQorICAgIHVzZWRfc2xvdHMgKz0gMyArIHN0YWNrLT5kZXB0aDsK
KyAgfQorICByZXN1bHRbdXNlZF9zbG90c10gPSByZWludGVycHJldF9jYXN0PHZvaWQqPigwKTsK
KyAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisjaWZuZGVmIEtYQ19DSEFOR0VTCisKKy8v
IFRDTWFsbG9jJ3Mgc3VwcG9ydCBmb3IgZXh0cmEgbWFsbG9jIGludGVyZmFjZXMKK2NsYXNzIFRD
TWFsbG9jSW1wbGVtZW50YXRpb24gOiBwdWJsaWMgTWFsbG9jRXh0ZW5zaW9uIHsKKyBwdWJsaWM6
CisgIHZpcnR1YWwgdm9pZCBHZXRTdGF0cyhjaGFyKiBidWZmZXIsIGludCBidWZmZXJfbGVuZ3Ro
KSB7CisgICAgQVNTRVJUKGJ1ZmZlcl9sZW5ndGggPiAwKTsKKyAgICBUQ01hbGxvY19QcmludGVy
IHByaW50ZXIoYnVmZmVyLCBidWZmZXJfbGVuZ3RoKTsKKworICAgIC8vIFByaW50IGxldmVsIG9u
ZSBzdGF0cyB1bmxlc3MgbG90cyBvZiBzcGFjZSBpcyBhdmFpbGFibGUKKyAgICBpZiAoYnVmZmVy
X2xlbmd0aCA8IDEwMDAwKSB7CisgICAgICBEdW1wU3RhdHMoJnByaW50ZXIsIDEpOworICAgIH0g
ZWxzZSB7CisgICAgICBEdW1wU3RhdHMoJnByaW50ZXIsIDIpOworICAgIH0KKyAgfQorCisgIHZp
cnR1YWwgdm9pZCoqIFJlYWRTdGFja1RyYWNlcygpIHsKKyAgICByZXR1cm4gRHVtcFN0YWNrVHJh
Y2VzKCk7CisgIH0KKworICB2aXJ0dWFsIGJvb2wgR2V0TnVtZXJpY1Byb3BlcnR5KGNvbnN0IGNo
YXIqIG5hbWUsIHNpemVfdCogdmFsdWUpIHsKKyAgICBBU1NFUlQobmFtZSAhPSBOVUxMKTsKKwor
ICAgIGlmIChzdHJjbXAobmFtZSwgImdlbmVyaWMuY3VycmVudF9hbGxvY2F0ZWRfYnl0ZXMiKSA9
PSAwKSB7CisgICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOworICAgICAgRXh0cmFjdFN0YXRzKCZz
dGF0cywgTlVMTCk7CisgICAgICAqdmFsdWUgPSBzdGF0cy5zeXN0ZW1fYnl0ZXMKKyAgICAgICAg
ICAgICAgIC0gc3RhdHMudGhyZWFkX2J5dGVzCisgICAgICAgICAgICAgICAtIHN0YXRzLmNlbnRy
YWxfYnl0ZXMKKyAgICAgICAgICAgICAgIC0gc3RhdHMucGFnZWhlYXBfYnl0ZXM7CisgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc3RyY21wKG5hbWUsICJnZW5lcmljLmhlYXBf
c2l6ZSIpID09IDApIHsKKyAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7CisgICAgICBFeHRyYWN0
U3RhdHMoJnN0YXRzLCBOVUxMKTsKKyAgICAgICp2YWx1ZSA9IHN0YXRzLnN5c3RlbV9ieXRlczsK
KyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzdHJjbXAobmFtZSwgInRjbWFs
bG9jLnNsYWNrX2J5dGVzIikgPT0gMCkgeworICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYnl0ZXMg
aW4gdGhlIHBhZ2UgaGVhcCBhcmUgbm90IGZyYWdtZW50ZWQgdG9vCisgICAgICAvLyBiYWRseSwg
YW5kIGFyZSB0aGVyZWZvcmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgorICAgICAgU3Bpbkxv
Y2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7CisgICAgICAqdmFsdWUgPSBwYWdlaGVhcC0+RnJl
ZUJ5dGVzKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc3RyY21wKG5h
bWUsICJ0Y21hbGxvYy5tYXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikgPT0gMCkgeworICAg
ICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7CisgICAgICAqdmFsdWUgPSBvdmVy
YWxsX3RocmVhZF9jYWNoZV9zaXplOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKHN0cmNtcChuYW1lLCAidGNtYWxsb2MuY3VycmVudF90b3RhbF90aHJlYWRfY2FjaGVfYnl0
ZXMiKSA9PSAwKSB7CisgICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOworICAgICAgRXh0cmFjdFN0
YXRzKCZzdGF0cywgTlVMTCk7CisgICAgICAqdmFsdWUgPSBzdGF0cy50aHJlYWRfYnl0ZXM7Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICB2
aXJ0dWFsIGJvb2wgU2V0TnVtZXJpY1Byb3BlcnR5KGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCB2
YWx1ZSkgeworICAgIEFTU0VSVChuYW1lICE9IE5VTEwpOworCisgICAgaWYgKHN0cmNtcChuYW1l
LCAidGNtYWxsb2MubWF4X3RvdGFsX3RocmVhZF9jYWNoZV9ieXRlcyIpID09IDApIHsKKyAgICAg
IC8vIENsaXAgdGhlIHZhbHVlIHRvIGEgcmVhc29uYWJsZSByYW5nZQorICAgICAgaWYgKHZhbHVl
IDwga01pblRocmVhZENhY2hlU2l6ZSkgdmFsdWUgPSBrTWluVGhyZWFkQ2FjaGVTaXplOworICAg
ICAgaWYgKHZhbHVlID4gKDE8PDMwKSkgdmFsdWUgPSAoMTw8MzApOyAgICAgLy8gTGltaXQgdG8g
MUdCCisKKyAgICAgIFNwaW5Mb2NrSG9sZGVyIGwoJnBhZ2VoZWFwX2xvY2spOworICAgICAgb3Zl
cmFsbF90aHJlYWRfY2FjaGVfc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4odmFsdWUpOworICAg
ICAgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OlJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgpOworICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9OworI2Vu
ZGlmCisKKy8vIFJlZEhhdCA5J3MgcHRocmVhZCBtYW5hZ2VyIGFsbG9jYXRlcyBhbiBvYmplY3Qg
ZGlyZWN0bHkgYnkgY2FsbGluZworLy8gYSBfX2xpYmNfWFhYKCkgcm91dGluZS4gIFRoaXMgbWVt
b3J5IGJsb2NrIGlzIG5vdCBrbm93biB0byB0Y21hbGxvYy4KKy8vIEF0IGNsZWFudXAgdGltZSwg
dGhlIHB0aHJlYWQgbWFuYWdlciBjYWxscyBmcmVlKCkgb24gdGhpcworLy8gcG9pbnRlciwgd2hp
Y2ggdGhlbiBjcmFzaGVzLgorLy8KKy8vIFdlIGhhY2sgYXJvdW5kIHRoaXMgcHJvYmxlbSBieSBk
aXNhYmxpbmcgYWxsIGRlYWxsb2NhdGlvbnMKKy8vIGFmdGVyIGEgZ2xvYmFsIG9iamVjdCBkZXN0
cnVjdG9yIGluIHRoaXMgbW9kdWxlIGhhcyBiZWVuIGNhbGxlZC4KKyNpZm5kZWYgS1hDX0NIQU5H
RVMKK3N0YXRpYyBib29sIHRjbWFsbG9jX2lzX2Rlc3Ryb3llZCA9IGZhbHNlOworI2VuZGlmCisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gSGVscGVycyBmb3IgdGhlIGV4cG9ydGVkIHJvdXRpbmVzIGJlbG93
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworI2lmbmRlZiBLWENfQ0hBTkdFUworCitzdGF0aWMgU3BhbiogRG9T
YW1wbGVkQWxsb2NhdGlvbihzaXplX3Qgc2l6ZSkgeworICBTcGluTG9ja0hvbGRlciBoKCZwYWdl
aGVhcF9sb2NrKTsKKworICAvLyBBbGxvY2F0ZSBzcGFuCisgIFNwYW4qIHNwYW4gPSBwYWdlaGVh
cC0+TmV3KHBhZ2VzKHNpemUgPT0gMCA/IDEgOiBzaXplKSk7CisgIGlmIChzcGFuID09IE5VTEwp
IHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIC8vIEFsbG9jYXRlIHN0YWNrIHRyYWNlCisg
IFN0YWNrVHJhY2UqIHN0YWNrID0gc3RhY2t0cmFjZV9hbGxvY2F0b3IuTmV3KCk7CisgIGlmIChz
dGFjayA9PSBOVUxMKSB7CisgICAgLy8gU2FtcGxpbmcgZmFpbGVkIGJlY2F1c2Ugb2YgbGFjayBv
ZiBtZW1vcnkKKyAgICByZXR1cm4gc3BhbjsKKyAgfQorCisgIC8vIEZpbGwgc3RhY2sgdHJhY2Ug
YW5kIHJlY29yZCBwcm9wZXJseQorICBzdGFjay0+ZGVwdGggPSBHZXRTdGFja1RyYWNlKHN0YWNr
LT5zdGFjaywga01heFN0YWNrRGVwdGgsIDIpOworICBzdGFjay0+c2l6ZSA9IHNpemU7CisgIHNw
YW4tPnNhbXBsZSA9IDE7CisgIHNwYW4tPm9iamVjdHMgPSBzdGFjazsKKyAgRExMX1ByZXBlbmQo
JnNhbXBsZWRfb2JqZWN0cywgc3Bhbik7CisKKyAgcmV0dXJuIHNwYW47Cit9CisjZW5kaWYKKwor
c3RhdGljIGlubGluZSB2b2lkKiBkb19tYWxsb2Moc2l6ZV90IHNpemUpIHsKKworI2lmbmRlZiBL
WENfQ0hBTkdFUworICBpZiAoVENNYWxsb2NEZWJ1Zzo6bGV2ZWwgPj0gVENNYWxsb2NEZWJ1Zzo6
a1ZlcmJvc2UpIAorICAgIE1FU1NBR0UoIkluIHRjbWFsbG9jIGRvX21hbGxvYyglIiBQUkl1UyIp
XG4iLCBzaXplKTsKKyNlbmRpZgorCisgIC8vIFRoZSBmb2xsb3dpbmcgY2FsbCBmb3JjZXMgbW9k
dWxlIGluaXRpYWxpemF0aW9uCisgIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0gVENNYWxs
b2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKCk7CisjaWZuZGVmIEtYQ19DSEFOR0VTCisgIGlmICho
ZWFwLT5TYW1wbGVBbGxvY2F0aW9uKHNpemUpKSB7CisgICAgU3Bhbiogc3BhbiA9IERvU2FtcGxl
ZEFsbG9jYXRpb24oc2l6ZSk7CisgICAgaWYgKHNwYW4gPT0gTlVMTCkgcmV0dXJuIE5VTEw7Cisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hp
ZnQpOworICB9IGVsc2UKKyNlbmRpZgorICAgICAgaWYgKHNpemUgPiBrTWF4U2l6ZSkgeworICAg
IC8vIFVzZSBwYWdlLWxldmVsIGFsbG9jYXRvcgorICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2Vo
ZWFwX2xvY2spOworICAgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+TmV3KHBhZ2VzKHNpemUpKTsK
KyAgICBpZiAoc3BhbiA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oc3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIGhlYXAtPkFsbG9jYXRlKHNpemUpOworICB9Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCBkb19mcmVlKHZvaWQqIHB0cikgeworI2lmbmRlZiBLWENfQ0hBTkdFUworICBpZiAoVENN
YWxsb2NEZWJ1Zzo6bGV2ZWwgPj0gVENNYWxsb2NEZWJ1Zzo6a1ZlcmJvc2UpIAorICAgIE1FU1NB
R0UoIkluIHRjbWFsbG9jIGRvX2ZyZWUoJXApXG4iLCBwdHIpOworI2VuZGlmCisjaWYgS1hDX0NI
QU5HRVMKKyAgaWYgKHB0ciA9PSBOVUxMKSByZXR1cm47IAorI2Vsc2UKKyAgaWYgKHB0ciA9PSBO
VUxMIHx8IHRjbWFsbG9jX2lzX2Rlc3Ryb3llZCkgcmV0dXJuOworI2VuZGlmCisKKyAgQVNTRVJU
KHBhZ2VoZWFwICE9IE5VTEwpOyAgLy8gU2hvdWxkIG5vdCBjYWxsIGZyZWUoKSBiZWZvcmUgbWFs
bG9jKCkKKyAgY29uc3QgUGFnZUlEIHAgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRy
KSA+PiBrUGFnZVNoaWZ0OworICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPkdldERlc2NyaXB0b3Io
cCk7CisKKyNpZm5kZWYgS1hDX0NIQU5HRVMKKyAgaWYgKHNwYW4gPT0gTlVMTCkgeworICAgIC8v
IFdlJ3ZlIHNlZW4gc3lzdGVtcyB3aGVyZSBhIHBpZWNlIG9mIG1lbW9yeSBhbGxvY2F0ZWQgdXNp
bmcgdGhlCisgICAgLy8gYWxsb2NhdG9yIGJ1aWx0IGluIHRvIGxpYmMgaXMgZGVhbGxvY2F0ZWQg
dXNpbmcgZnJlZSgpIGFuZAorICAgIC8vIHRoZXJlZm9yZSBlbmRzIHVwIGluc2lkZSB0Y21hbGxv
YyB3aGljaCBjYW4ndCBmaW5kIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcgc3Bhbi4gIFdlIHNp
bGVudGx5IHRocm93IHRoaXMgb2JqZWN0IG9uIHRoZSBmbG9vcgorICAgIC8vIGluc3RlYWQgb2Yg
Y3Jhc2hpbmcuCisgICAgTUVTU0FHRSgidGNtYWxsb2M6IGlnbm9yaW5nIHBvdGVudGlhbCBnbGli
Yy0yLjMuNSBpbmR1Y2VkIGZyZWUgIgorICAgICAgICAgICAgIm9mIGFuIHVua25vd24gb2JqZWN0
ICVwXG4iLCBwdHIpOworICAgIHJldHVybjsKKyAgfQorI2VuZGlmCisKKyAgQVNTRVJUKHNwYW4g
IT0gTlVMTCk7CisgIEFTU0VSVCghc3Bhbi0+ZnJlZSk7CisgIGNvbnN0IHNpemVfdCBjbCA9IHNw
YW4tPnNpemVjbGFzczsKKyAgaWYgKGNsICE9IDApIHsKKyAgICBBU1NFUlQoIXNwYW4tPnNhbXBs
ZSk7CisgICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAgPSBUQ01hbGxvY19UaHJlYWRDYWNo
ZTo6R2V0Q2FjaGVJZlByZXNlbnQoKTsKKyAgICBpZiAoaGVhcCAhPSBOVUxMKSB7CisgICAgICBo
ZWFwLT5EZWFsbG9jYXRlKHB0ciwgY2wpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBEZWxldGUg
ZGlyZWN0bHkgaW50byBjZW50cmFsIGNhY2hlCisgICAgICBTcGluTG9ja0hvbGRlciBoKCZjZW50
cmFsX2NhY2hlW2NsXS5sb2NrXyk7CisgICAgICBjZW50cmFsX2NhY2hlW2NsXS5JbnNlcnQocHRy
KTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9j
ayk7CisgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpICUga1BhZ2VT
aXplID09IDApOworICAgIEFTU0VSVChzcGFuLT5zdGFydCA9PSBwKTsKKyAgICBpZiAoc3Bhbi0+
c2FtcGxlKSB7CisgICAgICBETExfUmVtb3ZlKHNwYW4pOworICAgICAgc3RhY2t0cmFjZV9hbGxv
Y2F0b3IuRGVsZXRlKHJlaW50ZXJwcmV0X2Nhc3Q8U3RhY2tUcmFjZSo+KHNwYW4tPm9iamVjdHMp
KTsKKyAgICAgIHNwYW4tPm9iamVjdHMgPSBOVUxMOworICAgIH0KKyAgICBwYWdlaGVhcC0+RGVs
ZXRlKHNwYW4pOworICB9Cit9CisKKyNpZm5kZWYgS1hDX0NIQU5HRVMKKy8vIEZvciB1c2UgYnkg
ZXhwb3J0ZWQgcm91dGluZXMgYmVsb3cgdGhhdCB3YW50IHNwZWNpZmljIGFsaWdubWVudHMKKy8v
CisvLyBOb3RlOiB0aGlzIGNvZGUgY2FuIGJlIHNsb3csIGFuZCBjYW4gc2lnbmlmaWNhbnRseSBm
cmFnbWVudCBtZW1vcnkuCisvLyBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCBtZW1hbGlnbi9wb3Np
eF9tZW1hbGlnbi92YWxsb2MvcHZhbGxvYyB3aWxsCisvLyBub3QgYmUgaW52b2tlZCB2ZXJ5IG9m
dGVuLiAgVGhpcyByZXF1aXJlbWVudCBzaW1wbGlmaWVzIG91cgorLy8gaW1wbGVtZW50YXRpb24g
YW5kIGFsbG93cyB1cyB0byB0dW5lIGZvciBleHBlY3RlZCBhbGxvY2F0aW9uCisvLyBwYXR0ZXJu
cy4KK3N0YXRpYyB2b2lkKiBkb19tZW1hbGlnbihzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKSB7
CisgIEFTU0VSVCgoYWxpZ24gJiAoYWxpZ24gLSAxKSkgPT0gMCk7CisgIEFTU0VSVChhbGlnbiA+
IDApOworICBpZiAocGFnZWhlYXAgPT0gTlVMTCkgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRN
b2R1bGUoKTsKKworICAvLyBBbGxvY2F0ZSBhdCBsZWFzdCBvbmUgYnl0ZSB0byBhdm9pZCBib3Vu
ZGFyeSBjb25kaXRpb25zIGJlbG93CisgIGlmIChzaXplID09IDApIHNpemUgPSAxOworCisgIGlm
IChzaXplIDw9IGtNYXhTaXplICYmIGFsaWduIDwga1BhZ2VTaXplKSB7CisgICAgLy8gU2VhcmNo
IHRocm91Z2ggYWNjZXB0YWJsZSBzaXplIGNsYXNzZXMgbG9va2luZyBmb3Igb25lIHdpdGgKKyAg
ICAvLyBlbm91Z2ggYWxpZ25tZW50LiAgVGhpcyBkZXBlbmRzIG9uIHRoZSBmYWN0IHRoYXQKKyAg
ICAvLyBJbml0U2l6ZUNsYXNzZXMoKSBjdXJyZW50bHkgcHJvZHVjZXMgc2V2ZXJhbCBzaXplIGNs
YXNzZXMgdGhhdAorICAgIC8vIGFyZSBhbGlnbmVkIGF0IHBvd2VycyBvZiB0d28uICBXZSB3aWxs
IHdhc3RlIHRpbWUgYW5kIHNwYWNlIGlmCisgICAgLy8gd2UgbWlzcyBpbiB0aGUgc2l6ZSBjbGFz
cyBhcnJheSwgYnV0IHRoYXQgaXMgZGVlbWVkIGFjY2VwdGFibGUKKyAgICAvLyBzaW5jZSBtZW1h
bGlnbigpIHNob3VsZCBiZSB1c2VkIHJhcmVseS4KKyAgICBzaXplX3QgY2wgPSBTaXplQ2xhc3Mo
c2l6ZSk7CisgICAgd2hpbGUgKGNsIDwga051bUNsYXNzZXMgJiYgKChjbGFzc190b19zaXplW2Ns
XSAmIChhbGlnbiAtIDEpKSAhPSAwKSkgeworICAgICAgY2wrKzsKKyAgICB9CisgICAgaWYgKGNs
IDwga051bUNsYXNzZXMpIHsKKyAgICAgIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0gVENN
YWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKCk7CisgICAgICByZXR1cm4gaGVhcC0+QWxsb2Nh
dGUoY2xhc3NfdG9fc2l6ZVtjbF0pOworICAgIH0KKyAgfQorCisgIC8vIFdlIHdpbGwgYWxsb2Nh
dGUgZGlyZWN0bHkgZnJvbSB0aGUgcGFnZSBoZWFwCisgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2Vo
ZWFwX2xvY2spOworCisgIGlmIChhbGlnbiA8PSBrUGFnZVNpemUpIHsKKyAgICAvLyBBbnkgcGFn
ZS1sZXZlbCBhbGxvY2F0aW9uIHdpbGwgYmUgZmluZQorICAgIC8vIFRPRE86IFdlIGNvdWxkIHB1
dCB0aGUgcmVzdCBvZiB0aGlzIHBhZ2UgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgLy8gVE9ETzog
Y2FjaGUgYnV0IGl0IGRvZXMgbm90IHNlZW0gd29ydGggaXQuCisgICAgU3Bhbiogc3BhbiA9IHBh
Z2VoZWFwLT5OZXcocGFnZXMoc2l6ZSkpOworICAgIGlmIChzcGFuID09IE5VTEwpIHJldHVybiBO
VUxMOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihzcGFuLT5zdGFydCA8PCBr
UGFnZVNoaWZ0KTsKKyAgfQorCisgIC8vIEFsbG9jYXRlIGV4dHJhIHBhZ2VzIGFuZCBjYXJ2ZSBv
ZmYgYW4gYWxpZ25lZCBwb3J0aW9uCisgIGNvbnN0IGludCBhbGxvYyA9IHBhZ2VzKHNpemUgKyBh
bGlnbik7CisgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+TmV3KGFsbG9jKTsKKyAgaWYgKHNwYW4g
PT0gTlVMTCkgcmV0dXJuIE5VTEw7CisKKyAgLy8gU2tpcCBzdGFydGluZyBwb3J0aW9uIHNvIHRo
YXQgd2UgZW5kIHVwIGFsaWduZWQKKyAgaW50IHNraXAgPSAwOworICB3aGlsZSAoKCgoc3Bhbi0+
c3RhcnQrc2tpcCkgPDwga1BhZ2VTaGlmdCkgJiAoYWxpZ24gLSAxKSkgIT0gMCkgeworICAgIHNr
aXArKzsKKyAgfQorICBBU1NFUlQoc2tpcCA8IGFsbG9jKTsKKyAgaWYgKHNraXAgPiAwKSB7Cisg
ICAgU3BhbiogcmVzdCA9IHBhZ2VoZWFwLT5TcGxpdChzcGFuLCBza2lwKTsKKyAgICBwYWdlaGVh
cC0+RGVsZXRlKHNwYW4pOworICAgIHNwYW4gPSByZXN0OworICB9CisKKyAgLy8gU2tpcCB0cmFp
bGluZyBwb3J0aW9uIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8gcmV0dXJuCisgIGNvbnN0IHNpemVf
dCBuZWVkZWQgPSBwYWdlcyhzaXplKTsKKyAgQVNTRVJUKHNwYW4tPmxlbmd0aCA+PSBuZWVkZWQp
OworICBpZiAoc3Bhbi0+bGVuZ3RoID4gbmVlZGVkKSB7CisgICAgU3BhbiogdHJhaWxlciA9IHBh
Z2VoZWFwLT5TcGxpdChzcGFuLCBuZWVkZWQpOworICAgIHBhZ2VoZWFwLT5EZWxldGUodHJhaWxl
cik7CisgIH0KKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNwYW4tPnN0YXJ0IDw8
IGtQYWdlU2hpZnQpOworfQorI2VuZGlmCisKKworLy8gVGhlIGNvbnN0cnVjdG9yIGFsbG9jYXRl
cyBhbiBvYmplY3QgdG8gZW5zdXJlIHRoYXQgaW5pdGlhbGl6YXRpb24KKy8vIHJ1bnMgYmVmb3Jl
IG1haW4oKSwgYW5kIHRoZXJlZm9yZSB3ZSBkbyBub3QgaGF2ZSBhIGNoYW5jZSB0byBiZWNvbWUK
Ky8vIG11bHRpLXRocmVhZGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbi4gIFdlIGFsc28gY3JlYXRl
IHRoZSBUU0Qga2V5CisvLyBoZXJlLiAgUHJlc3VtYWJseSBieSB0aGUgdGltZSB0aGlzIGNvbnN0
cnVjdG9yIHJ1bnMsIGdsaWJjIGlzIGluCisvLyBnb29kIGVub3VnaCBzaGFwZSB0byBoYW5kbGUg
cHRocmVhZF9rZXlfY3JlYXRlKCkuCisvLworLy8gVGhlIGNvbnN0cnVjdG9yIGFsc28gdGFrZXMg
dGhlIG9wcG9ydHVuaXR5IHRvIHRlbGwgU1RMIHRvIHVzZQorLy8gdGNtYWxsb2MuICBXZSB3YW50
IHRvIGRvIHRoaXMgZWFybHksIGJlZm9yZSBjb25zdHJ1Y3QgdGltZSwgc28KKy8vIGFsbCB1c2Vy
IFNUTCBhbGxvY2F0aW9ucyBnbyB0aHJvdWdoIHRjbWFsbG9jICh3aGljaCB3b3JrcyByZWFsbHkK
Ky8vIHdlbGwgZm9yIFNUTCkuCisvLworLy8gVGhlIGRlc3RydWN0b3IgcHJpbnRzIHN0YXRzIHdo
ZW4gdGhlIHByb2dyYW0gZXhpdHMuCisKK2NsYXNzIFRDTWFsbG9jR3VhcmQgeworIHB1YmxpYzoK
KyAgVENNYWxsb2NHdWFyZCgpIHsKKyNpZm5kZWYgS1hDX0NIQU5HRVMKKyAgICBjaGFyICplbnZ2
YWw7CisgICAgaWYgKChlbnZ2YWwgPSBnZXRlbnYoIlRDTUFMTE9DX0RFQlVHIikpKSB7CisgICAg
ICBUQ01hbGxvY0RlYnVnOjpsZXZlbCA9IGF0b2koZW52dmFsKTsKKyAgICAgIE1FU1NBR0UoIlNl
dCB0Y21hbGxvYyBkZWJ1Z2dpbmcgbGV2ZWwgdG8gJWRcbiIsIFRDTWFsbG9jRGVidWc6OmxldmVs
KTsKKyAgICB9CisjZW5kaWYKKyAgICBkb19mcmVlKGRvX21hbGxvYygxKSk7CisgICAgVENNYWxs
b2NfVGhyZWFkQ2FjaGU6OkluaXRUU0QoKTsKKyAgICBkb19mcmVlKGRvX21hbGxvYygxKSk7Cisj
aWZuZGVmIEtYQ19DSEFOR0VTCisgICAgTWFsbG9jRXh0ZW5zaW9uOjpSZWdpc3RlcihuZXcgVENN
YWxsb2NJbXBsZW1lbnRhdGlvbik7CisjZW5kaWYKKyAgfQorCisjaWZuZGVmIEtYQ19DSEFOR0VT
CisgIH5UQ01hbGxvY0d1YXJkKCkgeworICAgIGNvbnN0IGNoYXIqIGVudiA9IGdldGVudigiTUFM
TE9DU1RBVFMiKTsKKyAgICBpZiAoZW52ICE9IE5VTEwpIHsKKyAgICAgIGludCBsZXZlbCA9IGF0
b2koZW52KTsKKyAgICAgIGlmIChsZXZlbCA8IDEpIGxldmVsID0gMTsKKyAgICAgIFByaW50U3Rh
dHMobGV2ZWwpOworICAgIH0KKyAgfQorI2VuZGlmCit9OworCitzdGF0aWMgVENNYWxsb2NHdWFy
ZCBtb2R1bGVfZW50ZXJfZXhpdF9ob29rOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRXhwb3J0ZWQg
cm91dGluZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBDQVZFQVQ6IFRoZSBjb2RlIHN0cnVjdHVyZSBi
ZWxvdyBlbnN1cmVzIHRoYXQgTWFsbG9jSG9vayBtZXRob2RzIGFyZSBhbHdheXMKKy8vICAgICAg
ICAgY2FsbGVkIGZyb20gdGhlIHN0YWNrIGZyYW1lIG9mIHRoZSBpbnZva2VkIGFsbG9jYXRpb24g
ZnVuY3Rpb24uCisvLyAgICAgICAgIGhlYXAtY2hlY2tlci5jYyBkZXBlbmRzIG9uIHRoaXMgdG8g
c3RhcnQgYSBzdGFjayB0cmFjZSBmcm9tCisvLyAgICAgICAgIHRoZSBjYWxsIHRvIHRoZSAoZGUp
YWxsb2NhdGlvbiBmdW5jdGlvbi4KKworI2lmbmRlZiBLWENfQ0hBTkdFUworZXh0ZXJuICJDIiAK
KyNlbmRpZgordm9pZCogbWFsbG9jKHNpemVfdCBzaXplKSB7CisgIHZvaWQqIHJlc3VsdCA9IGRv
X21hbGxvYyhzaXplKTsKKyNpZm5kZWYgS1hDX0NIQU5HRVMKKyAgTWFsbG9jSG9vazo6SW52b2tl
TmV3SG9vayhyZXN1bHQsIHNpemUpOworI2VuZGlmCisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNp
Zm5kZWYgS1hDX0NIQU5HRVMKK2V4dGVybiAiQyIgCisjZW5kaWYKK3ZvaWQgZnJlZSh2b2lkKiBw
dHIpIHsKKyNpZm5kZWYgS1hDX0NIQU5HRVMKKyAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9v
ayhwdHIpOworI2VuZGlmCisgIGRvX2ZyZWUocHRyKTsKK30KKworI2lmbmRlZiBLWENfQ0hBTkdF
UworZXh0ZXJuICJDIiAKKyNlbmRpZgordm9pZCogY2FsbG9jKHNpemVfdCBuLCBzaXplX3QgZWxl
bV9zaXplKSB7CisgIHZvaWQqIHJlc3VsdCA9IGRvX21hbGxvYyhuICogZWxlbV9zaXplKTsKKyAg
aWYgKHJlc3VsdCAhPSBOVUxMKSB7CisgICAgbWVtc2V0KHJlc3VsdCwgMCwgbiAqIGVsZW1fc2l6
ZSk7CisgIH0KKyNpZm5kZWYgS1hDX0NIQU5HRVMKKyAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9v
ayhyZXN1bHQsIG4gKiBlbGVtX3NpemUpOworI2VuZGlmCisgIHJldHVybiByZXN1bHQ7Cit9CisK
KyNpZm5kZWYgS1hDX0NIQU5HRVMKK2V4dGVybiAiQyIgCisjZW5kaWYKK3ZvaWQgY2ZyZWUodm9p
ZCogcHRyKSB7CisjaWZuZGVmIEtYQ19DSEFOR0VTCisgICAgTWFsbG9jSG9vazo6SW52b2tlRGVs
ZXRlSG9vayhwdHIpOworI2VuZGlmCisgIGRvX2ZyZWUocHRyKTsKK30KKworI2lmbmRlZiBLWENf
Q0hBTkdFUworZXh0ZXJuICJDIiAKKyNlbmRpZgordm9pZCogcmVhbGxvYyh2b2lkKiBvbGRfcHRy
LCBzaXplX3QgbmV3X3NpemUpIHsKKyAgaWYgKG9sZF9wdHIgPT0gTlVMTCkgeworICAgIHZvaWQq
IHJlc3VsdCA9IGRvX21hbGxvYyhuZXdfc2l6ZSk7CisjaWZuZGVmIEtYQ19DSEFOR0VTCisgICAg
TWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIG5ld19zaXplKTsKKyNlbmRpZgorICAg
IHJldHVybiByZXN1bHQ7CisgIH0KKyAgaWYgKG5ld19zaXplID09IDApIHsKKyNpZm5kZWYgS1hD
X0NIQU5HRVMKKyAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKG9sZF9wdHIpOworI2Vu
ZGlmCisgICAgZG9fZnJlZShvbGRfcHRyKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIC8v
IEdldCB0aGUgc2l6ZSBvZiB0aGUgb2xkIGVudHJ5CisgIGNvbnN0IFBhZ2VJRCBwID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KG9sZF9wdHIpID4+IGtQYWdlU2hpZnQ7CisgIFNwYW4qIHNw
YW4gPSBwYWdlaGVhcC0+R2V0RGVzY3JpcHRvcihwKTsKKyAgc2l6ZV90IG9sZF9zaXplOworICBp
ZiAoc3Bhbi0+c2l6ZWNsYXNzICE9IDApIHsKKyAgICBvbGRfc2l6ZSA9IEJ5dGVTaXplRm9yQ2xh
c3Moc3Bhbi0+c2l6ZWNsYXNzKTsKKyAgfSBlbHNlIHsKKyAgICBvbGRfc2l6ZSA9IHNwYW4tPmxl
bmd0aCA8PCBrUGFnZVNoaWZ0OworICB9CisKKyAgLy8gUmVhbGxvY2F0ZSBpZiB0aGUgbmV3IHNp
emUgaXMgbGFyZ2VyIHRoYW4gdGhlIG9sZCBzaXplLAorICAvLyBvciBpZiB0aGUgbmV3IHNpemUg
aXMgc2lnbmlmaWNhbnRseSBzbWFsbGVyIHRoYW4gdGhlIG9sZCBzaXplLgorICBpZiAoKG5ld19z
aXplID4gb2xkX3NpemUpIHx8IChBbGxvY2F0aW9uU2l6ZShuZXdfc2l6ZSkgPCBvbGRfc2l6ZSkp
IHsKKyAgICAvLyBOZWVkIHRvIHJlYWxsb2NhdGUKKyAgICB2b2lkKiBuZXdfcHRyID0gZG9fbWFs
bG9jKG5ld19zaXplKTsKKyAgICBpZiAobmV3X3B0ciA9PSBOVUxMKSB7CisgICAgICByZXR1cm4g
TlVMTDsKKyAgICB9CisjaWZuZGVmIEtYQ19DSEFOR0VTCisgICAgTWFsbG9jSG9vazo6SW52b2tl
TmV3SG9vayhuZXdfcHRyLCBuZXdfc2l6ZSk7CisjZW5kaWYKKyAgICBtZW1jcHkobmV3X3B0ciwg
b2xkX3B0ciwgKChvbGRfc2l6ZSA8IG5ld19zaXplKSA/IG9sZF9zaXplIDogbmV3X3NpemUpKTsK
KyNpZm5kZWYgS1hDX0NIQU5HRVMKKyAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKG9s
ZF9wdHIpOworI2VuZGlmCisgICAgZG9fZnJlZShvbGRfcHRyKTsKKyAgICByZXR1cm4gbmV3X3B0
cjsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gb2xkX3B0cjsKKyAgfQorfQorCisjaWZuZGVmIENP
TVBJTEVSX0lOVEVMCisjZGVmaW5lIE9QTkVXX1RIUk9XCisjZGVmaW5lIE9QREVMRVRFX1RIUk9X
CisjZWxzZQorI2RlZmluZSBPUE5FV19USFJPVyB0aHJvdyhzdGQ6OmJhZF9hbGxvYykKKyNkZWZp
bmUgT1BERUxFVEVfVEhST1cgdGhyb3coKQorI2VuZGlmCisKKyNpZm5kZWYgS1hDX0NIQU5HRVMK
Kwordm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKSBPUE5FV19USFJPVyB7CisgIHZvaWQq
IHAgPSBkb19tYWxsb2Moc2l6ZSk7CisgIGlmIChwID09IE5VTEwpIHsKKyAgICBNRVNTQUdFKCJV
bmFibGUgdG8gYWxsb2NhdGUgJSIgUFJJdVMgIiBieXRlczogbmV3IGZhaWxlZFxuIiwgc2l6ZSk7
CisgICAgYWJvcnQoKTsKKyAgfQorICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHAsIHNpemUp
OworICByZXR1cm4gcDsKK30KKwordm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCogcCkgT1BERUxF
VEVfVEhST1cgeworICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKHApOworICBkb19mcmVl
KHApOworfQorCit2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSkgT1BORVdfVEhST1cg
eworICB2b2lkKiBwID0gZG9fbWFsbG9jKHNpemUpOworICBpZiAocCA9PSBOVUxMKSB7CisgICAg
TUVTU0FHRSgiVW5hYmxlIHRvIGFsbG9jYXRlICUiIFBSSXVTICIgYnl0ZXM6IG5ldyBmYWlsZWRc
biIsIHNpemUpOworICAgIGFib3J0KCk7CisgIH0KKyAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9v
ayhwLCBzaXplKTsKKyAgcmV0dXJuIHA7Cit9CisKK3ZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9p
ZCogcCkgT1BERUxFVEVfVEhST1cgeworICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKHAp
OworICBkb19mcmVlKHApOworfQorCitleHRlcm4gIkMiIHZvaWQqIG1lbWFsaWduKHNpemVfdCBh
bGlnbiwgc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogcmVzdWx0ID0gZG9fbWVtYWxpZ24oYWxpZ24s
IHNpemUpOworICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7CisgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2V4dGVybiAiQyIgaW50IHBvc2l4X21lbWFsaWduKHZvaWQqKiBy
ZXN1bHRfcHRyLCBzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKSB7CisgIGlmICgoKGFsaWduICUg
c2l6ZW9mKHZvaWQqKSkgIT0gMCkgfHwKKyAgICAgICgoYWxpZ24gJiAoYWxpZ24gLSAxKSkgIT0g
MCkgfHwKKyAgICAgIChhbGlnbiA9PSAwKSkgeworICAgIHJldHVybiBFSU5WQUw7CisgIH0KKwor
ICB2b2lkKiByZXN1bHQgPSBkb19tZW1hbGlnbihhbGlnbiwgc2l6ZSk7CisgIE1hbGxvY0hvb2s6
Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKKyAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7Cisg
ICAgcmV0dXJuIEVOT01FTTsKKyAgfSBlbHNlIHsKKyAgICAqcmVzdWx0X3B0ciA9IHJlc3VsdDsK
KyAgICByZXR1cm4gMDsKKyAgfQorfQorCitzdGF0aWMgc2l6ZV90IHBhZ2VzaXplID0gMDsKKwor
ZXh0ZXJuICJDIiB2b2lkKiB2YWxsb2Moc2l6ZV90IHNpemUpIHsKKyAgLy8gQWxsb2NhdGUgcGFn
ZS1hbGlnbmVkIG9iamVjdCBvZiBsZW5ndGggPj0gc2l6ZSBieXRlcworICBpZiAocGFnZXNpemUg
PT0gMCkgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOworICB2b2lkKiByZXN1bHQgPSBkb19tZW1h
bGlnbihwYWdlc2l6ZSwgc2l6ZSk7CisgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0
LCBzaXplKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworZXh0ZXJuICJDIiB2b2lkKiBwdmFsbG9j
KHNpemVfdCBzaXplKSB7CisgIC8vIFJvdW5kIHVwIHNpemUgdG8gYSBtdWx0aXBsZSBvZiBwYWdl
c2l6ZQorICBpZiAocGFnZXNpemUgPT0gMCkgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOworICBz
aXplID0gKHNpemUgKyBwYWdlc2l6ZSAtIDEpICYgfihwYWdlc2l6ZSAtIDEpOworICB2b2lkKiBy
ZXN1bHQgPSBkb19tZW1hbGlnbihwYWdlc2l6ZSwgc2l6ZSk7CisgIE1hbGxvY0hvb2s6Okludm9r
ZU5ld0hvb2socmVzdWx0LCBzaXplKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworZXh0ZXJuICJD
IiB2b2lkIG1hbGxvY19zdGF0cyh2b2lkKSB7CisgIFByaW50U3RhdHMoMSk7Cit9CisKK2V4dGVy
biAiQyIgaW50IG1hbGxvcHQoaW50IGNtZCwgaW50IHZhbHVlKSB7CisgIHJldHVybiAxOyAgICAg
Ly8gSW5kaWNhdGVzIGVycm9yCit9CisKK2V4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIG1hbGxp
bmZvKHZvaWQpIHsKKyAgVENNYWxsb2NTdGF0cyBzdGF0czsKKyAgRXh0cmFjdFN0YXRzKCZzdGF0
cywgTlVMTCk7CisKKyAgLy8gSnVzdCBzb21lIG9mIHRoZSBmaWVsZHMgYXJlIGZpbGxlZCBpbi4K
KyAgc3RydWN0IG1hbGxpbmZvIGluZm87CisgIG1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8p
KTsKKworICAvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgc3RydWN0IGNvbnRhaW5zICJpbnQiIGZpZWxk
LCBzbyBzb21lIG9mIHRoZQorICAvLyBzaXplIHZhbHVlcyB3aWxsIGJlIHRydW5jYXRlZC4KKyAg
aW5mby5hcmVuYSAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRzLnN5c3RlbV9ieXRlcyk7Cisg
IGluZm8uZnNtYmxrcyAgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy50aHJlYWRfYnl0ZXMgKyBz
dGF0cy5jZW50cmFsX2J5dGVzKTsKKyAgaW5mby5mb3JkYmxrcyAgPSBzdGF0aWNfY2FzdDxpbnQ+
KHN0YXRzLnBhZ2VoZWFwX2J5dGVzKTsKKyAgaW5mby51b3JkYmxrcyAgPSBzdGF0aWNfY2FzdDxp
bnQ+KHN0YXRzLnN5c3RlbV9ieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLSBzdGF0cy50aHJlYWRfYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0gc3RhdHMuY2VudHJhbF9ieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLSBzdGF0cy5wYWdlaGVhcF9ieXRlcyk7CisKKyAgcmV0dXJuIGluZm87Cit9CisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gU29tZSBsaWJyYXJ5IHJvdXRpbmVzIG9uIFJlZEhhdCA5IGFsbG9jYXRl
IG1lbW9yeSB1c2luZyBtYWxsb2MoKQorLy8gYW5kIGZyZWUgaXQgdXNpbmcgX19saWJjX2ZyZWUo
KSAob3IgdmljZS12ZXJzYSkuICBTaW5jZSB3ZSBwcm92aWRlCisvLyBvdXIgb3duIGltcGxlbWVu
dGF0aW9ucyBvZiBtYWxsb2MvZnJlZSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdAorLy8gdGhl
IF9fbGliY19YWFggdmFyaWFudHMgYWxzbyBwb2ludCB0byB0aGUgc2FtZSBpbXBsZW1lbnRhdGlv
bnMuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworZXh0ZXJuICJDIiB7CisjaWYgZGVmaW5lZChfX0dOVUNfXykg
JiYgZGVmaW5lZChIQVZFX19fQVRUUklCVVRFX18pCisgIC8vIFBvdGVudGlhbGx5IGZhc3RlciB2
YXJpYW50cyB0aGF0IHVzZSB0aGUgZ2NjIGFsaWFzIGV4dGVuc2lvbgorI2RlZmluZSBBTElBUyh4
KSBfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMgKHgpKSkKKyAgdm9pZCogX19saWJjX21hbGxv
YyhzaXplX3Qgc2l6ZSkgICAgICAgICAgICAgIEFMSUFTKCJtYWxsb2MiKTsKKyAgdm9pZCAgX19s
aWJjX2ZyZWUodm9pZCogcHRyKSAgICAgICAgICAgICAgICAgIEFMSUFTKCJmcmVlIik7CisgIHZv
aWQqIF9fbGliY19yZWFsbG9jKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpICBBTElBUygicmVhbGxv
YyIpOworICB2b2lkKiBfX2xpYmNfY2FsbG9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZSkgICAgQUxJ
QVMoImNhbGxvYyIpOworICB2b2lkICBfX2xpYmNfY2ZyZWUodm9pZCogcHRyKSAgICAgICAgICAg
ICAgICAgQUxJQVMoImNmcmVlIik7CisgIHZvaWQqIF9fbGliY19tZW1hbGlnbihzaXplX3QgYWxp
Z24sIHNpemVfdCBzKSBBTElBUygibWVtYWxpZ24iKTsKKyAgdm9pZCogX19saWJjX3ZhbGxvYyhz
aXplX3Qgc2l6ZSkgICAgICAgICAgICAgIEFMSUFTKCJ2YWxsb2MiKTsKKyAgdm9pZCogX19saWJj
X3B2YWxsb2Moc2l6ZV90IHNpemUpICAgICAgICAgICAgIEFMSUFTKCJwdmFsbG9jIik7CisgIGlu
dCBfX3Bvc2l4X21lbWFsaWduKHZvaWQqKiByLCBzaXplX3QgYSwgc2l6ZV90IHMpIEFMSUFTKCJw
b3NpeF9tZW1hbGlnbiIpOworI3VuZGVmIEFMSUFTCisjZWxzZQorICAvLyBQb3J0YWJsZSB3cmFw
cGVycworICB2b2lkKiBfX2xpYmNfbWFsbG9jKHNpemVfdCBzaXplKSAgICAgICAgICAgICAgeyBy
ZXR1cm4gbWFsbG9jKHNpemUpOyAgICAgICB9CisgIHZvaWQgIF9fbGliY19mcmVlKHZvaWQqIHB0
cikgICAgICAgICAgICAgICAgICB7IGZyZWUocHRyKTsgICAgICAgICAgICAgICAgIH0KKyAgdm9p
ZCogX19saWJjX3JlYWxsb2Modm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkgIHsgcmV0dXJuIHJlYWxs
b2MocHRyLCBzaXplKTsgfQorICB2b2lkKiBfX2xpYmNfY2FsbG9jKHNpemVfdCBuLCBzaXplX3Qg
c2l6ZSkgICAgeyByZXR1cm4gY2FsbG9jKG4sIHNpemUpOyAgICB9CisgIHZvaWQgIF9fbGliY19j
ZnJlZSh2b2lkKiBwdHIpICAgICAgICAgICAgICAgICB7IGNmcmVlKHB0cik7ICAgICAgICAgICAg
ICAgIH0KKyAgdm9pZCogX19saWJjX21lbWFsaWduKHNpemVfdCBhbGlnbiwgc2l6ZV90IHMpIHsg
cmV0dXJuIG1lbWFsaWduKGFsaWduLCBzKTsgfQorICB2b2lkKiBfX2xpYmNfdmFsbG9jKHNpemVf
dCBzaXplKSAgICAgICAgICAgICAgeyByZXR1cm4gdmFsbG9jKHNpemUpOyAgICAgICB9CisgIHZv
aWQqIF9fbGliY19wdmFsbG9jKHNpemVfdCBzaXplKSAgICAgICAgICAgICB7IHJldHVybiBwdmFs
bG9jKHNpemUpOyAgICAgIH0KKyAgaW50IF9fcG9zaXhfbWVtYWxpZ24odm9pZCoqIHIsIHNpemVf
dCBhLCBzaXplX3QgcykgeworICAgIHJldHVybiBwb3NpeF9tZW1hbGlnbihyLCBhLCBzKTsKKyAg
fQorI2VuZGlmCisKK30KKworI2VuZGlmCisKKyNpZiBLWENfQ0hBTkdFUworfSAvLyBuYW1lc3Bh
Y2UgS0pTCisjZW5kaWYKKworI2VuZGlmIC8vIFVTRV9TWVNURU1fTUFMTE9DCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9reG1sY29yZS9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga3ht
bGNvcmUvRmFzdE1hbGxvYy5oCmRpZmYgLU4gSmF2YVNjcmlwdENvcmUva3htbGNvcmUvRmFzdE1h
bGxvYy5oCi0tLSBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9GYXN0TWFsbG9jLmgJMSBKYW4gMTk3
MCAwMDowMDowMCAtMDAwMAorKysgSmF2YVNjcmlwdENvcmUva3htbGNvcmUvRmFzdE1hbGxvYy5o
CTI3IFNlcCAyMDA1IDA4OjQ0OjQzIC0wMDAwCkBAIC0wLDAgKzEsNTggQEAKKy8vIC0qLSBtb2Rl
OiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIGxpYnJhcmllcworICogIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEtYTUxDT1JFX0ZBU1RfTUFMTE9DX0gKKyNkZWZp
bmUgS1hNTENPUkVfRkFTVF9NQUxMT0NfSAorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK25hbWVz
cGFjZSBLWE1MQ29yZSB7CisKKyAgICB2b2lkICpmYXN0TWFsbG9jKHNpemVfdCBuKTsKKyAgICB2
b2lkICpmYXN0Q2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKTsK
KyAgICB2b2lkIGZhc3RGcmVlKHZvaWQqIHApOworICAgIHZvaWQgKmZhc3RSZWFsbG9jKHZvaWQq
IHAsIHNpemVfdCBuKTsKKyAgICAKKyAgICBzdHJ1Y3QgRmFzdEFsbG9jYXRlZCB7CisgICAgICAg
IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QgcykgeyByZXR1cm4gZmFzdE1hbGxvYyhzKTsgfQor
ICAgICAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwKSB7IGZhc3RGcmVlKHApOyB9Cisg
ICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzKSB7IHJldHVybiBmYXN0TWFsbG9j
KHMpOyB9CisgICAgICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogcCkgeyBmYXN0RnJl
ZShwKTsgfQorICAgIH07CisgICAgCisgICAgLy8gUE9EIHR5cGVzIGNhbid0IGhhdmUgYSBiYXNl
IGNsYXNzLCBzbyB0aGV5IGhhdmUgdG8gdXNlIGEgbWFjcm8gdG8KKyAgICAvLyBhZGQgdGhlIGFw
cHJvcHJpYXRlIG9wZXJhdG9ycworICAgICNkZWZpbmUgRkFTVF9BTExPQ0FURURfUE9EIFwKKyAg
ICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzKSB7IHJldHVybiBmYXN0TWFsbG9jKHMp
OyB9IFwKKyAgICAgICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCogcCkgeyBmYXN0RnJlZShw
KTsgfSBcCisgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzKSB7IHJldHVybiBm
YXN0TWFsbG9jKHMpOyB9IFwKKyAgICAgICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiBw
KSB7IGZhc3RGcmVlKHApOyB9IFwKKworfSAvLyBuYW1lc3BhY2UgS1hNTENvcmUKKwordXNpbmcg
S1hNTENvcmU6OmZhc3RNYWxsb2M7Cit1c2luZyBLWE1MQ29yZTo6ZmFzdENhbGxvYzsKK3VzaW5n
IEtYTUxDb3JlOjpmYXN0UmVhbGxvYzsKK3VzaW5nIEtYTUxDb3JlOjpmYXN0RnJlZTsKK3VzaW5n
IEtYTUxDb3JlOjpGYXN0QWxsb2NhdGVkOworCisjZW5kaWYgLyogS1hNTENPUkVfRkFTVF9NQUxM
T0NfSCAqLwpJbmRleDogSmF2YVNjcmlwdENvcmUva3htbGNvcmUvU2hhcmVkUHRyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZToga3htbGNvcmUvU2hhcmVkUHRyLmgKZGlmZiAtTiBKYXZhU2NyaXB0Q29y
ZS9reG1sY29yZS9TaGFyZWRQdHIuaAotLS0gSmF2YVNjcmlwdENvcmUva3htbGNvcmUvU2hhcmVk
UHRyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgSmF2YVNjcmlwdENvcmUva3htbGNv
cmUvU2hhcmVkUHRyLmgJMjcgU2VwIDIwMDUgMDg6NDQ6NDMgLTAwMDAKQEAgLTAsMCArMSwxMzEg
QEAKKy8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcworICogIENvcHlyaWdodCAoQykgMjAw
NSBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEtYTUxDT1JFX1NI
QVJFRF9QVFJfSAorI2RlZmluZSBLWE1MQ09SRV9TSEFSRURfUFRSX0gKKworbmFtZXNwYWNlIEtY
TUxDb3JlIHsKKworICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGVtcGxhdGUgbmFtZSB0byBSZWZQdHI/
CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFNoYXJlZFB0cgorICAgIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFNoYXJlZFB0cigpIDogbV9wdHIoTlVMTCkge30KKyAgICAgICAgU2hhcmVk
UHRyKFQgKnB0cikgOiBtX3B0cihwdHIpIHsgaWYgKHB0cikgcHRyLT5yZWYoKTsgfQorICAgICAg
ICBTaGFyZWRQdHIoY29uc3QgU2hhcmVkUHRyICZvKSA6IG1fcHRyKG8ubV9wdHIpIHsgaWYgKFQg
KnB0ciA9IG1fcHRyKSBwdHItPnJlZigpOyB9CisgICAgICAgIH5TaGFyZWRQdHIoKSB7IGlmIChU
ICpwdHIgPSBtX3B0cikgcHRyLT5kZXJlZigpOyB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVT4gU2hhcmVkUHRyKGNvbnN0IFNoYXJlZFB0cjxVPiAmbykgOiBtX3B0cihvLmdl
dCgpKSB7IGlmIChUICpwdHIgPSBtX3B0cikgcHRyLT5yZWYoKTsgfQorICAgICAgICAKKyAgICAg
ICAgLy8gRklYTUU6IERlcHJlY2F0ZSBpbiBmYXZvciBvZiBvcGVyYXRvcnMgYmVsb3csIHRoZW4g
cmVtb3ZlPworICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID09IE5V
TEw7IH0KKyAgICAgICAgYm9vbCBub3ROdWxsKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgIT0gTlVM
TDsgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IERlcHJlY2F0ZSBpbiBmYXZvciBvZiBv
cGVyYXRvcj0sIHRoZW4gcmVtb3ZlPworICAgICAgICB2b2lkIHJlc2V0KCkgeyBpZiAoVCAqcHRy
ID0gbV9wdHIpIHB0ci0+ZGVyZWYoKTsgbV9wdHIgPSBOVUxMOyB9CisgICAgICAgIHZvaWQgcmVz
ZXQoVCAqbykgeyBpZiAobykgby0+cmVmKCk7IGlmIChUICpwdHIgPSBtX3B0cikgcHRyLT5kZXJl
ZigpOyBtX3B0ciA9IG87IH0KKyAgICAgICAgCisgICAgICAgIFQgKmdldCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHRyOyB9CisgICAgICAgIAorICAgICAgICBUICZvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiAqbV9wdHI7IH0KKyAgICAgICAgVCAqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1f
cHRyOyB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
IG1fcHRyID09IE5VTEw7IH0KKyAgICAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
IG1fcHRyICE9IE5VTEw7IH0KKyAgICAgICAgCisgICAgICAgIFNoYXJlZFB0ciAmb3BlcmF0b3I9
KGNvbnN0IFNoYXJlZFB0ciAmKTsKKyAgICAgICAgU2hhcmVkUHRyICZvcGVyYXRvcj0oVCAqKTsK
KyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVCAqbV9wdHI7CisgICAgICAgIAorICAg
ICAgICBvcGVyYXRvciBpbnQoKSBjb25zdDsgLy8gZGVsaWJlcmF0ZWx5IG5vdCBpbXBsZW1lbnRl
ZDsgaGVscHMgcHJldmVudCBvcGVyYXRvciBib29sIGZyb20gY29udmVydGluZyB0byBpbnQgYWNj
aWRlbnRhbGx5CisgICAgfTsKKyAgICAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gU2hhcmVkUHRy
PFQ+ICZTaGFyZWRQdHI8VD46Om9wZXJhdG9yPShjb25zdCBTaGFyZWRQdHI8VD4gJm8pIAorICAg
IHsKKyAgICAgICAgVCAqb3B0ciA9IG8ubV9wdHI7CisgICAgICAgIGlmIChvcHRyKQorICAgICAg
ICAgICAgb3B0ci0+cmVmKCk7CisgICAgICAgIGlmIChUICpwdHIgPSBtX3B0cikKKyAgICAgICAg
ICAgIHB0ci0+ZGVyZWYoKTsKKyAgICAgICAgbV9wdHIgPSBvcHRyOworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgU2hhcmVk
UHRyPFQ+ICZTaGFyZWRQdHI8VD46Om9wZXJhdG9yPShUICpvcHRyKQorICAgIHsKKyAgICAgICAg
aWYgKG9wdHIpCisgICAgICAgICAgICBvcHRyLT5yZWYoKTsKKyAgICAgICAgaWYgKFQgKnB0ciA9
IG1fcHRyKQorICAgICAgICAgICAgcHRyLT5kZXJlZigpOworICAgICAgICBtX3B0ciA9IG9wdHI7
CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNz
IFQ+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU2hhcmVkUHRyPFQ+ICZhLCBjb25zdCBT
aGFyZWRQdHI8VD4gJmIpIAorICAgIHsgCisgICAgICAgIHJldHVybiBhLmdldCgpID09IGIuZ2V0
KCk7IAorICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFNoYXJlZFB0cjxUPiAmYSwgY29uc3QgVCAqYikgCisgICAgeyAKKyAgICAgICAg
cmV0dXJuIGEuZ2V0KCkgPT0gYjsgCisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDxjbGFzcyBU
PiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQgKmEsIGNvbnN0IFNoYXJlZFB0cjxUPiAm
YikgCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiLmdldCgpOyAKKyAgICB9CisgICAgCisg
ICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU2hhcmVk
UHRyPFQ+ICZhLCBjb25zdCBTaGFyZWRQdHI8VD4gJmIpIAorICAgIHsgCisgICAgICAgIHJldHVy
biBhLmdldCgpICE9IGIuZ2V0KCk7IAorICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNoYXJlZFB0cjxUPiAmYSwgY29uc3QgVCAqYikK
KyAgICB7CisgICAgICAgIHJldHVybiBhLmdldCgpICE9IGI7IAorICAgIH0KKworICAgIHRlbXBs
YXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQgKmEsIGNvbnN0IFNo
YXJlZFB0cjxUPiAmYikgCisgICAgeyAKKyAgICAgICAgcmV0dXJuIGEgIT0gYi5nZXQoKTsgCisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPiBpbmxpbmUgU2hhcmVk
UHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgU2hhcmVkUHRyPFU+ICZwKSAKKyAgICB7
IAorICAgICAgICByZXR1cm4gU2hhcmVkUHRyPFQ+KHN0YXRpY19jYXN0PFQgKj4ocC5nZXQoKSkp
OyAKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4gaW5saW5lIFNoYXJl
ZFB0cjxUPiBjb25zdF9wb2ludGVyX2Nhc3QoY29uc3QgU2hhcmVkUHRyPFU+ICZwKSAKKyAgICB7
IAorICAgICAgICByZXR1cm4gU2hhcmVkUHRyPFQ+KGNvbnN0X2Nhc3Q8VCAqPihwLmdldCgpKSk7
IAorICAgIH0KKworfSAvLyBuYW1lc3BhY2UgS1hNTENvcmUKKwordXNpbmcgS1hNTENvcmU6OlNo
YXJlZFB0cjsKK3VzaW5nIEtYTUxDb3JlOjpzdGF0aWNfcG9pbnRlcl9jYXN0OwordXNpbmcgS1hN
TENvcmU6OmNvbnN0X3BvaW50ZXJfY2FzdDsKKworI2VuZGlmIC8vIEtYTUxDT1JFX1NIQVJFRF9Q
VFJfSApJbmRleDogSmF2YVNjcmlwdENvcmUva3htbGNvcmUvVENQYWdlTWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZToga3htbGNvcmUvVENQYWdlTWFwLmgKZGlmZiAtTiBKYXZhU2NyaXB0Q29yZS9r
eG1sY29yZS9UQ1BhZ2VNYXAuaAotLS0gSmF2YVNjcmlwdENvcmUva3htbGNvcmUvVENQYWdlTWFw
LmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgSmF2YVNjcmlwdENvcmUva3htbGNvcmUv
VENQYWdlTWFwLmgJMjcgU2VwIDIwMDUgMDg6NDQ6NDMgLTAwMDAKQEAgLTAsMCArMSwyNDIgQEAK
Ky8vIENvcHlyaWdodCAoYykgMjAwNSwgR29vZ2xlIEluYy4KKy8vIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyAKKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8gCisv
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLyAKKy8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisv
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8v
IC0tLQorLy8gQXV0aG9yOiBTYW5qYXkgR2hlbWF3YXQgPG9wZW5zb3VyY2VAZ29vZ2xlLmNvbT4K
Ky8vCisvLyBBIGRhdGEgc3RydWN0dXJlIHVzZWQgYnkgdGhlIGNhY2hpbmcgbWFsbG9jLiAgSXQg
bWFwcyBmcm9tIHBhZ2UjIHRvCisvLyBhIHBvaW50ZXIgdGhhdCBjb250YWlucyBpbmZvIGFib3V0
IHRoYXQgcGFnZS4gIFdlIHVzZSB0d28KKy8vIHJlcHJlc2VudGF0aW9uczogb25lIGZvciAzMi1i
aXQgYWRkcmVzc2VzLCBhbmQgYW5vdGhlciBmb3IgNjQgYml0CisvLyBhZGRyZXNzZXMuICBCb3Ro
IHJlcHJlc2VudGF0aW9ucyBwcm92aWRlIHRoZSBzYW1lIGludGVyZmFjZS4gIFRoZQorLy8gZmly
c3QgcmVwcmVzZW50YXRpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSBmbGF0IGFycmF5LCB0aGUgc2Vj
b25kcyBhcworLy8gYSB0aHJlZS1sZXZlbCByYWRpeCB0cmVlIHRoYXQgc3RyaXBzIGF3YXkgYXBw
cm94aW1hdGVseSAxLzNyZCBvZgorLy8gdGhlIGJpdHMgZXZlcnkgdGltZS4KKy8vCisvLyBUaGUg
QklUUyBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRoZSBudW1iZXIgb2YgYml0cyByZXF1aXJlZCB0byBo
b2xkCisvLyBhIHBhZ2UgbnVtYmVyLiAgRS5nLiwgd2l0aCAzMiBiaXQgcG9pbnRlcnMgYW5kIDRL
IHBhZ2VzIChpLmUuLAorLy8gcGFnZSBvZmZzZXQgZml0cyBpbiBsb3dlciAxMiBiaXRzKSwgQklU
UyA9PSAyMC4KKworI2lmbmRlZiBUQ01BTExPQ19QQUdFTUFQX0hfXworI2RlZmluZSBUQ01BTExP
Q19QQUdFTUFQX0hfXworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgZGVmaW5lZCBIQVZFX1NU
RElOVF9ICisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZWxpZiBkZWZpbmVkIEhBVkVfSU5UVFlQRVNf
SAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgor
I2VuZGlmCisKKyNpbmNsdWRlICJreG1sY29yZS9Bc3NlcnRpb25zLmgiCisKKy8vIFNpbmdsZS1s
ZXZlbCBhcnJheQordGVtcGxhdGUgPGludCBCSVRTPgorY2xhc3MgVENNYWxsb2NfUGFnZU1hcDEg
eworIHByaXZhdGU6CisgIHZvaWQqKiBhcnJheV87CisKKyBwdWJsaWM6CisgIHR5cGVkZWYgdWlu
dHB0cl90IE51bWJlcjsKKworICBleHBsaWNpdCBUQ01hbGxvY19QYWdlTWFwMSh2b2lkKiAoKmFs
bG9jYXRvcikoc2l6ZV90KSkgeworICAgIGFycmF5XyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
PigoKmFsbG9jYXRvcikoc2l6ZW9mKHZvaWQqKSA8PCBCSVRTKSk7CisgICAgbWVtc2V0KGFycmF5
XywgMCwgc2l6ZW9mKHZvaWQqKSA8PCBCSVRTKTsKKyAgfQorCisgIC8vIEVuc3VyZSB0aGF0IHRo
ZSBtYXAgY29udGFpbnMgaW5pdGlhbGl6ZWQgZW50cmllcyAieCAuLiB4K24tMSIuCisgIC8vIFJl
dHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBmYWxzZSBpZiB3ZSBjb3VsZCBub3QgYWxsb2NhdGUg
bWVtb3J5LgorICBib29sIEVuc3VyZShOdW1iZXIgeCwgc2l6ZV90IG4pIHsKKyAgICAvLyBOb3Ro
aW5nIHRvIGRvIHNpbmNlIGZsYXQgYXJyYXkgd2FzIGFsbG9jYXRlIGF0IHN0YXJ0CisgICAgcmV0
dXJuIHRydWU7CisgIH0KKworICAvLyBSRVFVSVJFUyAiayIgaXMgaW4gcmFuZ2UgIlswLDJeQklU
Uy0xXSIuCisgIC8vIFJFUVVJUkVTICJrIiBoYXMgYmVlbiBlbnN1cmVkIGJlZm9yZS4KKyAgLy8K
KyAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIGZvciBLRVkuICBSZXR1cm5zICJWYWx1ZSgp
IiBpZiBub3QKKyAgLy8geWV0IHNldC4KKyAgdm9pZCogZ2V0KE51bWJlciBrKSBjb25zdCB7Cisg
ICAgcmV0dXJuIGFycmF5X1trXTsKKyAgfQorCisgIC8vIFJFUVVJUkVTICJrIiBpcyBpbiByYW5n
ZSAiWzAsMl5CSVRTLTFdIi4KKyAgLy8gUkVRVUlSRVMgImsiIGhhcyBiZWVuIGVuc3VyZWQgYmVm
b3JlLgorICAvLworICAvLyBTZXRzIHRoZSB2YWx1ZSBmb3IgS0VZLgorICB2b2lkIHNldChOdW1i
ZXIgaywgdm9pZCogdikgeworICAgIGFycmF5X1trXSA9IHY7CisgIH0KK307CisKKy8vIFR3by1s
ZXZlbCByYWRpeCB0cmVlCit0ZW1wbGF0ZSA8aW50IEJJVFM+CitjbGFzcyBUQ01hbGxvY19QYWdl
TWFwMiB7CisgcHJpdmF0ZToKKyAgLy8gUHV0IDMyIGVudHJpZXMgaW4gdGhlIHJvb3QgYW5kICgy
XkJJVFMpLzMyIGVudHJpZXMgaW4gZWFjaCBsZWFmLgorICBzdGF0aWMgY29uc3QgaW50IFJPT1Rf
QklUUyA9IDU7CisgIHN0YXRpYyBjb25zdCBpbnQgUk9PVF9MRU5HVEggPSAxIDw8IFJPT1RfQklU
UzsKKworICBzdGF0aWMgY29uc3QgaW50IExFQUZfQklUUyA9IEJJVFMgLSBST09UX0JJVFM7Cisg
IHN0YXRpYyBjb25zdCBpbnQgTEVBRl9MRU5HVEggPSAxIDw8IExFQUZfQklUUzsKKworICAvLyBM
ZWFmIG5vZGUKKyAgc3RydWN0IExlYWYgeworICAgIHZvaWQqIHZhbHVlc1tMRUFGX0xFTkdUSF07
CisgIH07CisKKyAgTGVhZiogcm9vdF9bUk9PVF9MRU5HVEhdOyAgICAgICAgICAgICAvLyBQb2lu
dGVycyB0byAzMiBjaGlsZCBub2RlcworICB2b2lkKiAoKmFsbG9jYXRvcl8pKHNpemVfdCk7ICAg
ICAgICAgIC8vIE1lbW9yeSBhbGxvY2F0b3IKKworIHB1YmxpYzoKKyAgdHlwZWRlZiB1aW50cHRy
X3QgTnVtYmVyOworCisgIGV4cGxpY2l0IFRDTWFsbG9jX1BhZ2VNYXAyKHZvaWQqICgqYWxsb2Nh
dG9yKShzaXplX3QpKSB7CisgICAgYWxsb2NhdG9yXyA9IGFsbG9jYXRvcjsKKyAgICBtZW1zZXQo
cm9vdF8sIDAsIHNpemVvZihyb290XykpOworICB9CisKKyAgdm9pZCogZ2V0KE51bWJlciBrKSBj
b25zdCB7CisgICAgQVNTRVJUKGsgPj4gQklUUyA9PSAwKTsKKyAgICBjb25zdCBOdW1iZXIgaTEg
PSBrID4+IExFQUZfQklUUzsKKyAgICBjb25zdCBOdW1iZXIgaTIgPSBrICYgKExFQUZfTEVOR1RI
LTEpOworICAgIHJldHVybiByb290X1tpMV0tPnZhbHVlc1tpMl07CisgIH0KKworICB2b2lkIHNl
dChOdW1iZXIgaywgdm9pZCogdikgeworICAgIEFTU0VSVChrID4+IEJJVFMgPT0gMCk7CisgICAg
Y29uc3QgTnVtYmVyIGkxID0gayA+PiBMRUFGX0JJVFM7CisgICAgY29uc3QgTnVtYmVyIGkyID0g
ayAmIChMRUFGX0xFTkdUSC0xKTsKKyAgICByb290X1tpMV0tPnZhbHVlc1tpMl0gPSB2OworICB9
CisKKyAgYm9vbCBFbnN1cmUoTnVtYmVyIHN0YXJ0LCBzaXplX3QgbikgeworICAgIGZvciAoTnVt
YmVyIGtleSA9IHN0YXJ0OyBrZXkgPD0gc3RhcnQgKyBuIC0gMTsgKSB7CisgICAgICBjb25zdCBO
dW1iZXIgaTEgPSBrZXkgPj4gTEVBRl9CSVRTOworCisgICAgICAvLyBNYWtlIDJuZCBsZXZlbCBu
b2RlIGlmIG5lY2Vzc2FyeQorICAgICAgaWYgKHJvb3RfW2kxXSA9PSBOVUxMKSB7CisgICAgICAg
IExlYWYqIGxlYWYgPSByZWludGVycHJldF9jYXN0PExlYWYqPigoKmFsbG9jYXRvcl8pKHNpemVv
ZihMZWFmKSkpOworICAgICAgICBpZiAobGVhZiA9PSBOVUxMKSByZXR1cm4gZmFsc2U7CisgICAg
ICAgIG1lbXNldChsZWFmLCAwLCBzaXplb2YoKmxlYWYpKTsKKyAgICAgICAgcm9vdF9baTFdID0g
bGVhZjsKKyAgICAgIH0KKworICAgICAgLy8gQWR2YW5jZSBrZXkgcGFzdCB3aGF0ZXZlciBpcyBj
b3ZlcmVkIGJ5IHRoaXMgbGVhZiBub2RlCisgICAgICBrZXkgPSAoKGtleSA+PiBMRUFGX0JJVFMp
ICsgMSkgPDwgTEVBRl9CSVRTOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorfTsKKwor
Ly8gVGhyZWUtbGV2ZWwgcmFkaXggdHJlZQordGVtcGxhdGUgPGludCBCSVRTPgorY2xhc3MgVENN
YWxsb2NfUGFnZU1hcDMgeworIHByaXZhdGU6CisgIC8vIEhvdyBtYW55IGJpdHMgc2hvdWxkIHdl
IGNvbnN1bWUgYXQgZWFjaCBpbnRlcmlvciBsZXZlbAorICBzdGF0aWMgY29uc3QgaW50IElOVEVS
SU9SX0JJVFMgPSAoQklUUyArIDIpIC8gMzsgLy8gUm91bmQtdXAKKyAgc3RhdGljIGNvbnN0IGlu
dCBJTlRFUklPUl9MRU5HVEggPSAxIDw8IElOVEVSSU9SX0JJVFM7CisKKyAgLy8gSG93IG1hbnkg
Yml0cyBzaG91bGQgd2UgY29uc3VtZSBhdCBsZWFmIGxldmVsCisgIHN0YXRpYyBjb25zdCBpbnQg
TEVBRl9CSVRTID0gQklUUyAtIDIqSU5URVJJT1JfQklUUzsKKyAgc3RhdGljIGNvbnN0IGludCBM
RUFGX0xFTkdUSCA9IDEgPDwgTEVBRl9CSVRTOworCisgIC8vIEludGVyaW9yIG5vZGUKKyAgc3Ry
dWN0IE5vZGUgeworICAgIE5vZGUqIHB0cnNbSU5URVJJT1JfTEVOR1RIXTsKKyAgfTsKKworICAv
LyBMZWFmIG5vZGUKKyAgc3RydWN0IExlYWYgeworICAgIHZvaWQqIHZhbHVlc1tMRUFGX0xFTkdU
SF07CisgIH07CisKKyAgTm9kZSogcm9vdF87ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBS
b290IG9mIHJhZGl4IHRyZWUKKyAgdm9pZCogKCphbGxvY2F0b3JfKShzaXplX3QpOyAgICAgICAg
ICAvLyBNZW1vcnkgYWxsb2NhdG9yCisKKyAgTm9kZSogTmV3Tm9kZSgpIHsKKyAgICBOb2RlKiBy
ZXN1bHQgPSByZWludGVycHJldF9jYXN0PE5vZGUqPigoKmFsbG9jYXRvcl8pKHNpemVvZihOb2Rl
KSkpOworICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgeworICAgICAgbWVtc2V0KHJlc3VsdCwgMCwg
c2l6ZW9mKCpyZXN1bHQpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgcHVi
bGljOgorICB0eXBlZGVmIHVpbnRwdHJfdCBOdW1iZXI7CisKKyAgZXhwbGljaXQgVENNYWxsb2Nf
UGFnZU1hcDModm9pZCogKCphbGxvY2F0b3IpKHNpemVfdCkpIHsKKyAgICBhbGxvY2F0b3JfID0g
YWxsb2NhdG9yOworICAgIHJvb3RfID0gTmV3Tm9kZSgpOworICB9CisKKyAgdm9pZCogZ2V0KE51
bWJlciBrKSBjb25zdCB7CisgICAgQVNTRVJUKGsgPj4gQklUUyA9PSAwKTsKKyAgICBjb25zdCBO
dW1iZXIgaTEgPSBrID4+IChMRUFGX0JJVFMgKyBJTlRFUklPUl9CSVRTKTsKKyAgICBjb25zdCBO
dW1iZXIgaTIgPSAoayA+PiBMRUFGX0JJVFMpICYgKElOVEVSSU9SX0xFTkdUSC0xKTsKKyAgICBj
b25zdCBOdW1iZXIgaTMgPSBrICYgKExFQUZfTEVOR1RILTEpOworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PExlYWYqPihyb290Xy0+cHRyc1tpMV0tPnB0cnNbaTJdKS0+dmFsdWVzW2kzXTsK
KyAgfQorCisgIHZvaWQgc2V0KE51bWJlciBrLCB2b2lkKiB2KSB7CisgICAgQVNTRVJUKGsgPj4g
QklUUyA9PSAwKTsKKyAgICBjb25zdCBOdW1iZXIgaTEgPSBrID4+IChMRUFGX0JJVFMgKyBJTlRF
UklPUl9CSVRTKTsKKyAgICBjb25zdCBOdW1iZXIgaTIgPSAoayA+PiBMRUFGX0JJVFMpICYgKElO
VEVSSU9SX0xFTkdUSC0xKTsKKyAgICBjb25zdCBOdW1iZXIgaTMgPSBrICYgKExFQUZfTEVOR1RI
LTEpOworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TGVhZio+KHJvb3RfLT5wdHJzW2kxXS0+cHRyc1tp
Ml0pLT52YWx1ZXNbaTNdID0gdjsKKyAgfQorCisgIGJvb2wgRW5zdXJlKE51bWJlciBzdGFydCwg
c2l6ZV90IG4pIHsKKyAgICBmb3IgKE51bWJlciBrZXkgPSBzdGFydDsga2V5IDw9IHN0YXJ0ICsg
biAtIDE7ICkgeworICAgICAgY29uc3QgTnVtYmVyIGkxID0ga2V5ID4+IChMRUFGX0JJVFMgKyBJ
TlRFUklPUl9CSVRTKTsKKyAgICAgIGNvbnN0IE51bWJlciBpMiA9IChrZXkgPj4gTEVBRl9CSVRT
KSAmIChJTlRFUklPUl9MRU5HVEgtMSk7CisKKyAgICAgIC8vIE1ha2UgMm5kIGxldmVsIG5vZGUg
aWYgbmVjZXNzYXJ5CisgICAgICBpZiAocm9vdF8tPnB0cnNbaTFdID09IE5VTEwpIHsKKyAgICAg
ICAgTm9kZSogbiA9IE5ld05vZGUoKTsKKyAgICAgICAgaWYgKG4gPT0gTlVMTCkgcmV0dXJuIGZh
bHNlOworICAgICAgICByb290Xy0+cHRyc1tpMV0gPSBuOworICAgICAgfQorCisgICAgICAvLyBN
YWtlIGxlYWYgbm9kZSBpZiBuZWNlc3NhcnkKKyAgICAgIGlmIChyb290Xy0+cHRyc1tpMV0tPnB0
cnNbaTJdID09IE5VTEwpIHsKKyAgICAgICAgTGVhZiogbGVhZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
TGVhZio+KCgqYWxsb2NhdG9yXykoc2l6ZW9mKExlYWYpKSk7CisgICAgICAgIGlmIChsZWFmID09
IE5VTEwpIHJldHVybiBmYWxzZTsKKyAgICAgICAgbWVtc2V0KGxlYWYsIDAsIHNpemVvZigqbGVh
ZikpOworICAgICAgICByb290Xy0+cHRyc1tpMV0tPnB0cnNbaTJdID0gcmVpbnRlcnByZXRfY2Fz
dDxOb2RlKj4obGVhZik7CisgICAgICB9CisKKyAgICAgIC8vIEFkdmFuY2Uga2V5IHBhc3Qgd2hh
dGV2ZXIgaXMgY292ZXJlZCBieSB0aGlzIGxlYWYgbm9kZQorICAgICAga2V5ID0gKChrZXkgPj4g
TEVBRl9CSVRTKSArIDEpIDw8IExFQUZfQklUUzsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cisg
IH0KK307CisKKyNlbmRpZiAgLy8gVENNQUxMT0NfUEFHRU1BUF9IX18KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2t4bWxjb3JlL1RDU3BpbkxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBreG1sY29y
ZS9UQ1NwaW5Mb2NrLmgKZGlmZiAtTiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9UQ1NwaW5Mb2Nr
LmgKLS0tIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL1RDU3BpbkxvY2suaAkxIEphbiAxOTcwIDAw
OjAwOjAwIC0wMDAwCisrKyBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9UQ1NwaW5Mb2NrLmgJMjcg
U2VwIDIwMDUgMDg6NDQ6NDMgLTAwMDAKQEAgLTAsMCArMSwxNTMgQEAKKy8vIENvcHlyaWdodCAo
YykgMjAwNSwgR29vZ2xlIEluYy4KKy8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyAKKy8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8gCisvLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLyAKKy8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
Ky8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8vIC0tLQorLy8gQXV0aG9y
OiBTYW5qYXkgR2hlbWF3YXQgPG9wZW5zb3VyY2VAZ29vZ2xlLmNvbT4KKworI2lmbmRlZiBUQ01B
TExPQ19JTlRFUk5BTF9TUElOTE9DS19IX18KKyNkZWZpbmUgVENNQUxMT0NfSU5URVJOQUxfU1BJ
TkxPQ0tfSF9fCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx0aW1lLmg+ICAgICAg
IC8qIEZvciBuYW5vc2xlZXAoKSAqLworI2luY2x1ZGUgPHNjaGVkLmg+ICAgICAgLyogRm9yIHNj
aGVkX3lpZWxkKCkgKi8KKyNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0gKKyNpbmNsdWRlIDxzdGRp
bnQuaD4KKyNlbGlmIGRlZmluZWQgSEFWRV9JTlRUWVBFU19ICisjaW5jbHVkZSA8aW50dHlwZXMu
aD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRs
aWIuaD4JLyogZm9yIGFib3J0KCkgKi8KKworLy8gRklYTUU6IGl0IHdvdWxkIGJlIG5pY2UgdG8g
cG9ydCB0aGUgZmFzdCB2ZXJzaW9uIHRvIFBvd2VyUEMgYnV0IHJpZ2h0IG5vdyBpdCBpcyBub3QK
Ky8vIHNob3dpbmcgdXAgb24gdGhlIHByb2ZpbGUKKyNpZiBkZWZpbmVkIF9faTM4Nl9fICYmIGRl
ZmluZWQgX19HTlVDX18KKworc3RhdGljIHZvaWQgVENNYWxsb2NfU2xvd0xvY2sodm9sYXRpbGUg
dW5zaWduZWQgaW50KiBsb2Nrd29yZCk7CisKKy8vIFRoZSBmb2xsb3dpbmcgaXMgYSBzdHJ1Y3Qg
c28gdGhhdCBpdCBjYW4gYmUgaW5pdGlhbGl6ZWQgYXQgY29tcGlsZSB0aW1lCitzdHJ1Y3QgVENN
YWxsb2NfU3BpbkxvY2sgeworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcHJpdmF0ZV9sb2Nrd29y
ZF87CisKKyAgaW5saW5lIHZvaWQgSW5pdCgpIHsgcHJpdmF0ZV9sb2Nrd29yZF8gPSAwOyB9Cisg
IGlubGluZSB2b2lkIEZpbmFsaXplKCkgeyB9CisgICAgCisgIGlubGluZSB2b2lkIExvY2soKSB7
CisgICAgaW50IHI7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgICgieGNoZ2wgJTAs
ICUxIgorICAgICAgIDogIj1yIihyKSwgIj1tIihwcml2YXRlX2xvY2t3b3JkXykKKyAgICAgICA6
ICIwIigxKSwgIm0iKHByaXZhdGVfbG9ja3dvcmRfKQorICAgICAgIDogIm1lbW9yeSIpOworICAg
IGlmIChyKSBUQ01hbGxvY19TbG93TG9jaygmcHJpdmF0ZV9sb2Nrd29yZF8pOworICB9CisKKyAg
aW5saW5lIHZvaWQgVW5sb2NrKCkgeworICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgICAo
Im1vdmwgJDAsICUwIgorICAgICAgIDogIj1tIihwcml2YXRlX2xvY2t3b3JkXykKKyAgICAgICA6
ICJtIiAocHJpdmF0ZV9sb2Nrd29yZF8pCisgICAgICAgOiAibWVtb3J5Iik7CisgIH0KK307CisK
KyNkZWZpbmUgU1BJTkxPQ0tfSU5JVElBTElaRVIgeyAwIH0KKworc3RhdGljIHZvaWQgVENNYWxs
b2NfU2xvd0xvY2sodm9sYXRpbGUgdW5zaWduZWQgaW50KiBsb2Nrd29yZCkgeworICBzY2hlZF95
aWVsZCgpOyAgICAgICAgLy8gWWllbGQgaW1tZWRpYXRlbHkgc2luY2UgZmFzdCBwYXRoIGZhaWxl
ZAorICB3aGlsZSAodHJ1ZSkgeworICAgIGludCByOworICAgIF9fYXNtX18gX192b2xhdGlsZV9f
CisgICAgICAoInhjaGdsICUwLCAlMSIKKyAgICAgICA6ICI9ciIociksICI9bSIoKmxvY2t3b3Jk
KQorICAgICAgIDogIjAiKDEpLCAibSIoKmxvY2t3b3JkKQorICAgICAgIDogIm1lbW9yeSIpOwor
ICAgIGlmICghcikgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgY29kZSB3
YXMgYWRhcHRlZCBmcm9tIHRoZSBwdG1hbGxvYzIgaW1wbGVtZW50YXRpb24gb2YKKyAgICAvLyBz
cGlubG9ja3Mgd2hpY2ggd291bGQgc2NoZWRfeWllbGQoKSB1cHRvIDUwIHRpbWVzIGJlZm9yZQor
ICAgIC8vIHNsZWVwaW5nIG9uY2UgZm9yIGEgZmV3IG1pbGxpc2Vjb25kcy4gIE1pa2UgQnVycm93
cyBzdWdnZXN0ZWQKKyAgICAvLyBqdXN0IGRvaW5nIG9uZSBzY2hlZF95aWVsZCgpIG91dHNpZGUg
dGhlIGxvb3AgYW5kIGFsd2F5cworICAgIC8vIHNsZWVwaW5nIGFmdGVyIHRoYXQuICBUaGlzIGNo
YW5nZSBoZWxwZWQgYSBncmVhdCBkZWFsIG9uIHRoZQorICAgIC8vIHBlcmZvcm1hbmNlIG9mIHNw
aW5sb2NrcyB1bmRlciBoaWdoIGNvbnRlbnRpb24uICBBIHRlc3QgcHJvZ3JhbQorICAgIC8vIHdp
dGggMTAgdGhyZWFkcyBvbiBhIGR1YWwgWGVvbiAoZm91ciB2aXJ0dWFsIHByb2Nlc3NvcnMpIHdl
bnQKKyAgICAvLyBmcm9tIHRha2luZyAzMCBzZWNvbmRzIHRvIDE2IHNlY29uZHMuCisKKyAgICAv
LyBTbGVlcCBmb3IgYSBmZXcgbWlsbGlzZWNvbmRzCisgICAgc3RydWN0IHRpbWVzcGVjIHRtOwor
ICAgIHRtLnR2X3NlYyA9IDA7CisgICAgdG0udHZfbnNlYyA9IDIwMDAwMDE7CisgICAgbmFub3Ns
ZWVwKCZ0bSwgTlVMTCk7CisgIH0KK30KKworI2Vsc2UKKworI2luY2x1ZGUgPHB0aHJlYWQuaD4K
KworLy8gUG9ydGFibGUgdmVyc2lvbgorc3RydWN0IFRDTWFsbG9jX1NwaW5Mb2NrIHsKKyAgcHRo
cmVhZF9tdXRleF90IHByaXZhdGVfbG9ja187CisKKyAgaW5saW5lIHZvaWQgSW5pdCgpIHsKKyAg
ICBpZiAocHRocmVhZF9tdXRleF9pbml0KCZwcml2YXRlX2xvY2tfLCBOVUxMKSAhPSAwKSBhYm9y
dCgpOworICB9CisgIGlubGluZSB2b2lkIEZpbmFsaXplKCkgeworICAgIGlmIChwdGhyZWFkX211
dGV4X2Rlc3Ryb3koJnByaXZhdGVfbG9ja18pICE9IDApIGFib3J0KCk7CisgIH0KKyAgaW5saW5l
IHZvaWQgTG9jaygpIHsKKyAgICBpZiAocHRocmVhZF9tdXRleF9sb2NrKCZwcml2YXRlX2xvY2tf
KSAhPSAwKSBhYm9ydCgpOworICB9CisgIGlubGluZSB2b2lkIFVubG9jaygpIHsKKyAgICBpZiAo
cHRocmVhZF9tdXRleF91bmxvY2soJnByaXZhdGVfbG9ja18pICE9IDApIGFib3J0KCk7CisgIH0K
K307CisKKyNkZWZpbmUgU1BJTkxPQ0tfSU5JVElBTElaRVIgeyBQVEhSRUFEX01VVEVYX0lOSVRJ
QUxJWkVSIH0KKworI2VuZGlmCisKKy8vIENvcnJlc3BvbmRpbmcgbG9ja2VyIG9iamVjdCB0aGF0
IGFycmFuZ2VzIHRvIGFjcXVpcmUgYSBzcGlubG9jayBmb3IKKy8vIHRoZSBkdXJhdGlvbiBvZiBh
IEMrKyBzY29wZS4KK2NsYXNzIFRDTWFsbG9jX1NwaW5Mb2NrSG9sZGVyIHsKKyBwcml2YXRlOgor
ICBUQ01hbGxvY19TcGluTG9jayogbG9ja187CisgcHVibGljOgorICBpbmxpbmUgZXhwbGljaXQg
VENNYWxsb2NfU3BpbkxvY2tIb2xkZXIoVENNYWxsb2NfU3BpbkxvY2sqIGwpCisgICAgOiBsb2Nr
XyhsKSB7IGwtPkxvY2soKTsgfQorICBpbmxpbmUgflRDTWFsbG9jX1NwaW5Mb2NrSG9sZGVyKCkg
eyBsb2NrXy0+VW5sb2NrKCk7IH0KK307CisKKy8vIFNob3J0LWhhbmRzIGZvciBjb252ZW5pZW50
IHVzZSBieSB0Y21hbGxvYy5jYwordHlwZWRlZiBUQ01hbGxvY19TcGluTG9jayBTcGluTG9jazsK
K3R5cGVkZWYgVENNYWxsb2NfU3BpbkxvY2tIb2xkZXIgU3BpbkxvY2tIb2xkZXI7CisKKyNlbmRp
ZiAgLy8gVENNQUxMT0NfSU5URVJOQUxfU1BJTkxPQ0tfSF9fCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9reG1sY29yZS9UQ1N5c3RlbUFsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBreG1sY29y
ZS9UQ1N5c3RlbUFsbG9jLmNwcApkaWZmIC1OIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL1RDU3lz
dGVtQWxsb2MuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9UQ1N5c3RlbUFsbG9jLmNw
cAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9U
Q1N5c3RlbUFsbG9jLmNwcAkyNyBTZXAgMjAwNSAwODo0NDo0NCAtMDAwMApAQCAtMCwwICsxLDI4
MiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDA1LCBHb29nbGUgSW5jLgorLy8gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIAorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6Cisv
LyAKKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisv
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vIAor
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworLy8gLS0tCisvLyBBdXRob3I6IFNhbmpheSBHaGVtYXdhdAorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaWYgZGVmaW5lZCBIQVZFX1NURElOVF9ICisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZWxp
ZiBkZWZpbmVkIEhBVkVfSU5UVFlQRVNfSAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j
bHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgIlRDU3lzdGVt
QWxsb2MuaCIKKyNpbmNsdWRlICJUQ1NwaW5Mb2NrLmgiCisKKyNpZm5kZWYgTUFQX0FOT05ZTU9V
UworI2RlZmluZSBNQVBfQU5PTllNT1VTIE1BUF9BTk9OCisjZW5kaWYKKworLy8gU3RydWN0dXJl
IGZvciBkaXNjb3ZlcmluZyBhbGlnbm1lbnQKK3VuaW9uIE1lbW9yeUFsaWduZXIgeworICB2b2lk
KiAgcDsKKyAgZG91YmxlIGQ7CisgIHNpemVfdCBzOworfTsKKworc3RhdGljIFNwaW5Mb2NrIHNw
aW5sb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CisgIAorLy8gUGFnZSBzaXplIGlzIGluaXRp
YWxpemVkIG9uIGRlbWFuZAorc3RhdGljIHNpemVfdCBwYWdlc2l6ZSA9IDA7CisKKy8vIENvbmZp
Z3VyYXRpb24gcGFyYW1ldGVycy4KKy8vCisvLyBpZiB1c2VfZGV2bWVtIGlzIHRydWUsIGVpdGhl
ciB1c2Vfc2JyayBvciB1c2VfbW1hcCBtdXN0IGFsc28gYmUgdHJ1ZS4KKy8vIEZvciAyLjIga2Vy
bmVscywgaXQgbG9va3MgbGlrZSB0aGUgc2JyayBhZGRyZXNzIHNwYWNlICg1MDBNQmlzaCkgYW5k
CisvLyB0aGUgbW1hcCBhZGRyZXNzIHNwYWNlICgxMzAwTUJpc2gpIGFyZSBkaXNqb2ludCwgc28g
d2UgbmVlZCBib3RoIGFsbG9jYXRvcnMKKy8vIHRvIGdldCBhcyBtdWNoIHZpcnR1YWwgbWVtb3J5
IGFzIHBvc3NpYmxlLgorc3RhdGljIGJvb2wgdXNlX2Rldm1lbSA9IHRydWU7CitzdGF0aWMgYm9v
bCB1c2Vfc2JyayA9IHRydWU7CitzdGF0aWMgYm9vbCB1c2VfbW1hcCA9IHRydWU7CisKKy8vIEZs
YWdzIHRvIGtlZXAgdXMgZnJvbSByZXRyeWluZyBhbGxvY2F0b3JzIHRoYXQgZmFpbGVkLgorc3Rh
dGljIGJvb2wgZGV2bWVtX2ZhaWx1cmUgPSBmYWxzZTsKK3N0YXRpYyBib29sIHNicmtfZmFpbHVy
ZSA9IGZhbHNlOworc3RhdGljIGJvb2wgbW1hcF9mYWlsdXJlID0gZmFsc2U7CisKKyNpZm5kZWYg
S1hDX0NIQU5HRVMKK0RFRklORV9pbnQzMihtYWxsb2NfZGV2bWVtX3N0YXJ0LCAwLAorICAgICAg
ICAgICAgICJQaHlzaWNhbCBtZW1vcnkgc3RhcnRpbmcgbG9jYXRpb24gaW4gTUIgZm9yIC9kZXYv
bWVtIGFsbG9jYXRpb24uIgorICAgICAgICAgICAgICIgIFNldHRpbmcgdGhpcyB0byAwIGRpc2Fi
bGVzIC9kZXYvbWVtIGFsbG9jYXRpb24iKTsKK0RFRklORV9pbnQzMihtYWxsb2NfZGV2bWVtX2xp
bWl0LCAwLAorICAgICAgICAgICAgICJQaHlzaWNhbCBtZW1vcnkgbGltaXQgbG9jYXRpb24gaW4g
TUIgZm9yIC9kZXYvbWVtIGFsbG9jYXRpb24uIgorICAgICAgICAgICAgICIgIFNldHRpbmcgdGhp
cyB0byAwIG1lYW5zIG5vIGxpbWl0LiIpOworI2Vsc2UKK3N0YXRpYyBjb25zdCBpbnQzMl90IEZM
QUdTX21hbGxvY19kZXZtZW1fc3RhcnQgPSAwOworc3RhdGljIGNvbnN0IGludDMyX3QgRkxBR1Nf
bWFsbG9jX2Rldm1lbV9saW1pdCA9IDA7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU0JSSworCitz
dGF0aWMgdm9pZCogVHJ5U2JyayhzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkgeworICBz
aXplID0gKChzaXplICsgYWxpZ25tZW50IC0gMSkgLyBhbGlnbm1lbnQpICogYWxpZ25tZW50Owor
ICB2b2lkKiByZXN1bHQgPSBzYnJrKHNpemUpOworICBpZiAocmVzdWx0ID09IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KC0xKSkgeworICAgIHNicmtfZmFpbHVyZSA9IHRydWU7CisgICAgcmV0dXJu
IE5VTEw7CisgIH0KKworICAvLyBJcyBpdCBhbGlnbmVkPworICB1aW50cHRyX3QgcHRyID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJlc3VsdCk7CisgIGlmICgocHRyICYgKGFsaWdubWVu
dC0xKSkgPT0gMCkgIHJldHVybiByZXN1bHQ7CisKKyAgLy8gVHJ5IHRvIGdldCBtb3JlIG1lbW9y
eSBmb3IgYWxpZ25tZW50CisgIHNpemVfdCBleHRyYSA9IGFsaWdubWVudCAtIChwdHIgJiAoYWxp
Z25tZW50LTEpKTsKKyAgdm9pZCogcjIgPSBzYnJrKGV4dHJhKTsKKyAgaWYgKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihyMikgPT0gKHB0ciArIHNpemUpKSB7CisgICAgLy8gQ29udGlndW91
cyB3aXRoIHByZXZpb3VzIHJlc3VsdAorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQq
PihwdHIgKyBleHRyYSk7CisgIH0KKworICAvLyBHaXZlIHVwIGFuZCBhc2sgZm9yICJzaXplICsg
YWxpZ25tZW50IC0gMSIgYnl0ZXMgc28KKyAgLy8gdGhhdCB3ZSBjYW4gZmluZCBhbiBhbGlnbmVk
IHJlZ2lvbiB3aXRoaW4gaXQuCisgIHJlc3VsdCA9IHNicmsoc2l6ZSArIGFsaWdubWVudCAtIDEp
OworICBpZiAocmVzdWx0ID09IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkgeworICAgIHNi
cmtfZmFpbHVyZSA9IHRydWU7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgcHRyID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHJlc3VsdCk7CisgIGlmICgocHRyICYgKGFsaWdubWVudC0x
KSkgIT0gMCkgeworICAgIHB0ciArPSBhbGlnbm1lbnQgLSAocHRyICYgKGFsaWdubWVudC0xKSk7
CisgIH0KKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0cik7Cit9CisKKyNlbmRp
ZiAvKiBIQVZFX1NCUksgKi8KKworI2lmZGVmIEhBVkVfTU1BUAorCitzdGF0aWMgdm9pZCogVHJ5
TW1hcChzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkgeworICAvLyBFbmZvcmNlIHBhZ2Ug
YWxpZ25tZW50CisgIGlmIChwYWdlc2l6ZSA9PSAwKSBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7
CisgIGlmIChhbGlnbm1lbnQgPCBwYWdlc2l6ZSkgYWxpZ25tZW50ID0gcGFnZXNpemU7CisgIHNp
emUgPSAoKHNpemUgKyBhbGlnbm1lbnQgLSAxKSAvIGFsaWdubWVudCkgKiBhbGlnbm1lbnQ7CisK
KyAgLy8gQXNrIGZvciBleHRyYSBtZW1vcnkgaWYgYWxpZ25tZW50ID4gcGFnZXNpemUKKyAgc2l6
ZV90IGV4dHJhID0gMDsKKyAgaWYgKGFsaWdubWVudCA+IHBhZ2VzaXplKSB7CisgICAgZXh0cmEg
PSBhbGlnbm1lbnQgLSBwYWdlc2l6ZTsKKyAgfQorICB2b2lkKiByZXN1bHQgPSBtbWFwKE5VTEws
IHNpemUgKyBleHRyYSwKKyAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUR8UFJPVF9XUklU
RSwKKyAgICAgICAgICAgICAgICAgICAgICBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLAorICAg
ICAgICAgICAgICAgICAgICAgIC0xLCAwKTsKKyAgaWYgKHJlc3VsdCA9PSByZWludGVycHJldF9j
YXN0PHZvaWQqPihNQVBfRkFJTEVEKSkgeworICAgIG1tYXBfZmFpbHVyZSA9IHRydWU7CisgICAg
cmV0dXJuIE5VTEw7CisgIH0KKworICAvLyBBZGp1c3QgdGhlIHJldHVybiBtZW1vcnkgc28gaXQg
aXMgYWxpZ25lZAorICB1aW50cHRyX3QgcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHJlc3VsdCk7CisgIHNpemVfdCBhZGp1c3QgPSAwOworICBpZiAoKHB0ciAmIChhbGlnbm1lbnQg
LSAxKSkgIT0gMCkgeworICAgIGFkanVzdCA9IGFsaWdubWVudCAtIChwdHIgJiAoYWxpZ25tZW50
IC0gMSkpOworICB9CisKKyAgLy8gUmV0dXJuIHRoZSB1bnVzZWQgbWVtb3J5IHRvIHRoZSBzeXN0
ZW0KKyAgaWYgKGFkanVzdCA+IDApIHsKKyAgICBtdW5tYXAocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocHRyKSwgYWRqdXN0KTsKKyAgfQorICBpZiAoYWRqdXN0IDwgZXh0cmEpIHsKKyAgICBtdW5t
YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyICsgYWRqdXN0ICsgc2l6ZSksIGV4dHJhIC0g
YWRqdXN0KTsKKyAgfQorCisgIHB0ciArPSBhZGp1c3Q7CisgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPihwdHIpOworfQorCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisKK3N0YXRpYyB2
b2lkKiBUcnlEZXZNZW0oc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpIHsKKyAgc3RhdGlj
IGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgc3RhdGljIG9mZl90IHBoeXNtZW1fYmFzZTsg
IC8vIG5leHQgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MgdG8gYWxsb2NhdGUKKyAgc3RhdGljIG9m
Zl90IHBoeXNtZW1fbGltaXQ7IC8vIG1heGltdW0gcGh5c2ljYWwgYWRkcmVzcyBhbGxvd2VkCisg
IHN0YXRpYyBpbnQgcGh5c21lbV9mZDsgICAgICAvLyBmaWxlIGRlc2NyaXB0b3IgZm9yIC9kZXYv
bWVtCisgIAorICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgdXNlIC9kZXYvbWVtIGFsbG9jYXRpb24u
ICBOb3RlIHRoYXQgaXQgbWF5IHRha2UKKyAgLy8gYSB3aGlsZSB0byBnZXQgdGhpcyBmbGFnIGlu
aXRpYWxpemVkLCBzbyBtZWFud2hpbGUgd2UgZmFsbCBiYWNrIHRvCisgIC8vIHRoZSBuZXh0IGFs
bG9jYXRvci4gIChJdCBsb29rcyBsaWtlIDdNQiBnZXRzIGFsbG9jYXRlZCBiZWZvcmUKKyAgLy8g
dGhpcyBmbGFnIGdldHMgaW5pdGlhbGl6ZWQgLWtoci4pCisgIGlmIChGTEFHU19tYWxsb2NfZGV2
bWVtX3N0YXJ0ID09IDApIHsKKyAgICAvLyBOT1RFOiBub3QgYSBkZXZtZW1fZmFpbHVyZSAtIHdl
J2QgbGlrZSBUQ01hbGxvY19TeXN0ZW1BbGxvYyB0bworICAgIC8vIHRyeSB1cyBhZ2FpbiBuZXh0
IHRpbWUuCisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgCisgIGlmICghaW5pdGlhbGl6ZWQpIHsK
KyAgICBwaHlzbWVtX2ZkID0gb3BlbigiL2Rldi9tZW0iLCBPX1JEV1IpOworICAgIGlmIChwaHlz
bWVtX2ZkIDwgMCkgeworICAgICAgZGV2bWVtX2ZhaWx1cmUgPSB0cnVlOworICAgICAgcmV0dXJu
IE5VTEw7CisgICAgfQorICAgIHBoeXNtZW1fYmFzZSA9IEZMQUdTX21hbGxvY19kZXZtZW1fc3Rh
cnQqMTAyNExMKjEwMjRMTDsKKyAgICBwaHlzbWVtX2xpbWl0ID0gRkxBR1NfbWFsbG9jX2Rldm1l
bV9saW1pdCoxMDI0TEwqMTAyNExMOworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgfQorICAK
KyAgLy8gRW5mb3JjZSBwYWdlIGFsaWdubWVudAorICBpZiAocGFnZXNpemUgPT0gMCkgcGFnZXNp
emUgPSBnZXRwYWdlc2l6ZSgpOworICBpZiAoYWxpZ25tZW50IDwgcGFnZXNpemUpIGFsaWdubWVu
dCA9IHBhZ2VzaXplOworICBzaXplID0gKChzaXplICsgYWxpZ25tZW50IC0gMSkgLyBhbGlnbm1l
bnQpICogYWxpZ25tZW50OworCisgIC8vIEFzayBmb3IgZXh0cmEgbWVtb3J5IGlmIGFsaWdubWVu
dCA+IHBhZ2VzaXplCisgIHNpemVfdCBleHRyYSA9IDA7CisgIGlmIChhbGlnbm1lbnQgPiBwYWdl
c2l6ZSkgeworICAgIGV4dHJhID0gYWxpZ25tZW50IC0gcGFnZXNpemU7CisgIH0KKyAgCisgIC8v
IGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGFueSBtZW1vcnkgbGVmdAorICBpZiAocGh5c21lbV9s
aW1pdCAhPSAwICYmIHBoeXNtZW1fYmFzZSArIHNpemUgKyBleHRyYSA+IHBoeXNtZW1fbGltaXQp
IHsKKyAgICBkZXZtZW1fZmFpbHVyZSA9IHRydWU7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAg
dm9pZCAqcmVzdWx0ID0gbW1hcCgwLCBzaXplICsgZXh0cmEsIFBST1RfV1JJVEV8UFJPVF9SRUFE
LAorICAgICAgICAgICAgICAgICAgICAgIE1BUF9TSEFSRUQsIHBoeXNtZW1fZmQsIHBoeXNtZW1f
YmFzZSk7CisgIGlmIChyZXN1bHQgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oTUFQX0ZBSUxF
RCkpIHsKKyAgICBkZXZtZW1fZmFpbHVyZSA9IHRydWU7CisgICAgcmV0dXJuIE5VTEw7CisgIH0K
KyAgdWludHB0cl90IHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyZXN1bHQpOwor
ICAKKyAgLy8gQWRqdXN0IHRoZSByZXR1cm4gbWVtb3J5IHNvIGl0IGlzIGFsaWduZWQKKyAgc2l6
ZV90IGFkanVzdCA9IDA7CisgIGlmICgocHRyICYgKGFsaWdubWVudCAtIDEpKSAhPSAwKSB7Cisg
ICAgYWRqdXN0ID0gYWxpZ25tZW50IC0gKHB0ciAmIChhbGlnbm1lbnQgLSAxKSk7CisgIH0KKyAg
CisgIC8vIFJldHVybiB0aGUgdW51c2VkIHZpcnR1YWwgbWVtb3J5IHRvIHRoZSBzeXN0ZW0KKyAg
aWYgKGFkanVzdCA+IDApIHsKKyAgICBtdW5tYXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRy
KSwgYWRqdXN0KTsKKyAgfQorICBpZiAoYWRqdXN0IDwgZXh0cmEpIHsKKyAgICBtdW5tYXAocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyICsgYWRqdXN0ICsgc2l6ZSksIGV4dHJhIC0gYWRqdXN0
KTsKKyAgfQorICAKKyAgcHRyICs9IGFkanVzdDsKKyAgcGh5c21lbV9iYXNlICs9IGFkanVzdCAr
IHNpemU7CisgIAorICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyKTsKK30KKwor
dm9pZCogVENNYWxsb2NfU3lzdGVtQWxsb2Moc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQp
IHsKKyNpZm5kZWYgS1hDX0NIQU5HRVMKKyAgaWYgKFRDTWFsbG9jRGVidWc6OmxldmVsID49IFRD
TWFsbG9jRGVidWc6OmtWZXJib3NlKSB7CisgICAgTUVTU0FHRSgiVENNYWxsb2NfU3lzdGVtQWxs
b2MoJSIgUFJJdVMgIiwgJSIgUFJJdVMiKVxuIiwgCisgICAgICAgICAgICBzaXplLCBhbGlnbm1l
bnQpOworICB9CisjZW5kaWYKKyAgU3BpbkxvY2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5sb2Nr
KTsKKworICAvLyBFbmZvcmNlIG1pbmltdW0gYWxpZ25tZW50CisgIGlmIChhbGlnbm1lbnQgPCBz
aXplb2YoTWVtb3J5QWxpZ25lcikpIGFsaWdubWVudCA9IHNpemVvZihNZW1vcnlBbGlnbmVyKTsK
KworICAvLyBUcnkgdHdpY2UsIG9uY2UgYXZvaWRpbmcgYWxsb2NhdG9ycyB0aGF0IGZhaWxlZCBi
ZWZvcmUsIGFuZCBvbmNlCisgIC8vIG1vcmUgdHJ5aW5nIGFsbCBhbGxvY2F0b3JzIGV2ZW4gaWYg
dGhleSBmYWlsZWQgYmVmb3JlLgorICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAg
IGlmICh1c2VfZGV2bWVtICYmICFkZXZtZW1fZmFpbHVyZSkgeworICAgICAgdm9pZCogcmVzdWx0
ID0gVHJ5RGV2TWVtKHNpemUsIGFsaWdubWVudCk7CisgICAgICBpZiAocmVzdWx0ICE9IE5VTEwp
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorI2lmZGVmIEhBVkVfU0JSSworICAgIGlmICh1
c2Vfc2JyayAmJiAhc2Jya19mYWlsdXJlKSB7CisgICAgICB2b2lkKiByZXN1bHQgPSBUcnlTYnJr
KHNpemUsIGFsaWdubWVudCk7CisgICAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHJldHVybiByZXN1
bHQ7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX01NQVAgICAgCisgICAgaWYgKHVzZV9t
bWFwICYmICFtbWFwX2ZhaWx1cmUpIHsKKyAgICAgIHZvaWQqIHJlc3VsdCA9IFRyeU1tYXAoc2l6
ZSwgYWxpZ25tZW50KTsKKyAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisjZW5kaWYKKworICAgIC8vIG5vdGhpbmcgd29ya2VkIC0gcmVzZXQgZmFpbHVyZSBm
bGFncyBhbmQgdHJ5IGFnYWluCisgICAgZGV2bWVtX2ZhaWx1cmUgPSBmYWxzZTsKKyAgICBzYnJr
X2ZhaWx1cmUgPSBmYWxzZTsKKyAgICBtbWFwX2ZhaWx1cmUgPSBmYWxzZTsKKyAgfQorICByZXR1
cm4gTlVMTDsKK30KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL1RDU3lzdGVtQWxsb2Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiBreG1sY29yZS9UQ1N5c3RlbUFsbG9jLmgKZGlmZiAtTiBK
YXZhU2NyaXB0Q29yZS9reG1sY29yZS9UQ1N5c3RlbUFsbG9jLmgKLS0tIEphdmFTY3JpcHRDb3Jl
L2t4bWxjb3JlL1RDU3lzdGVtQWxsb2MuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBK
YXZhU2NyaXB0Q29yZS9reG1sY29yZS9UQ1N5c3RlbUFsbG9jLmgJMjcgU2VwIDIwMDUgMDg6NDQ6
NDQgLTAwMDAKQEAgLTAsMCArMSw0NiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDA1LCBHb29nbGUg
SW5jLgorLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIAorLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisvLyBtZXQ6CisvLyAKKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKy8vIAorLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gLS0tCisvLyBBdXRob3I6IFNhbmpheSBHaGVtYXdh
dAorLy8KKy8vIFJvdXRpbmUgdGhhdCB1c2VzIHNicmsvbW1hcCB0byBhbGxvY2F0ZSBtZW1vcnkg
ZnJvbSB0aGUgc3lzdGVtLgorLy8gVXNlZnVsIGZvciBpbXBsZW1lbnRpbmcgbWFsbG9jLgorCisj
aWZuZGVmIFRDTUFMTE9DX1NZU1RFTV9BTExPQ19IX18KKyNkZWZpbmUgVENNQUxMT0NfU1lTVEVN
X0FMTE9DX0hfXworCisvLyBSRVFVSVJFUzogImFsaWdubWVudCIgaXMgYSBwb3dlciBvZiB0d28g
b3IgIjAiIHRvIGluZGljYXRlIGRlZmF1bHQgYWxpZ25tZW50CisvLworLy8gQWxsb2NhdGUgYW5k
IHJldHVybiAiTiIgYnl0ZXMgb2YgemVyb2VkIG1lbW9yeS4gIFRoZSByZXR1cm5lZAorLy8gcG9p
bnRlciBpcyBhIG11bHRpcGxlIG9mICJhbGlnbm1lbnQiIGlmIG5vbi16ZXJvLiAgUmV0dXJucyBO
VUxMCisvLyB3aGVuIG91dCBvZiBtZW1vcnkuCitleHRlcm4gdm9pZCogVENNYWxsb2NfU3lzdGVt
QWxsb2Moc2l6ZV90IGJ5dGVzLCBzaXplX3QgYWxpZ25tZW50ID0gMCk7CisKKyNlbmRpZiAvKiBU
Q01BTExPQ19TWVNURU1fQUxMT0NfSF9fICovCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9DaGFuZ2VMb2csdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTY2CmRpZmYgLXAgLXUgLXIxLjE2NiBXZWJDb3JlL0NoYW5nZUxvZwotLS0g
V2ViQ29yZS9DaGFuZ2VMb2cJMjcgU2VwIDIwMDUgMDI6MTA6NDggLTAwMDAJMS4xNjYKKysrIFdl
YkNvcmUvQ2hhbmdlTG9nCTI3IFNlcCAyMDA1IDA4OjQ1OjA1IC0wMDAwCkBAIC0xLDMgKzEsMTY1
IEBACisyMDA1LTA5LTI2ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwktIHJlcGxhY2UgZGxtYWxsb2Mg
d2l0aCB0Y21hbGxvYworCWh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTE0NQorCisJSSBhbHNvIG1vdmVkIFNoYXJlZFB0ciBhbmQgdGhlIGFzc2VydGlvbiBj
b2RlIGZyb20gV2ViQ29yZSBpbnRvIGEKKwluZXcga3htbGNvcmUgZGlyZWN0b3J5LgorCQorICAg
ICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2tqcy9zaGFyZWRfcHRyLmg6IFJlbW92ZWQuCisgICAg
ICAgICogRm9yd2FyZGluZ0hlYWRlcnMva3htbGNvcmUvQXNzZXJ0aW9ucy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9reG1sY29yZS9GYXN0TWFsbG9jLmg6IEFkZGVkLgor
ICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2t4bWxjb3JlL1NoYXJlZFB0ci5oOiBBZGRlZC4K
KyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9taXNjL21haW5fdGhyZWFkX21hbGxvYy5oOiBS
ZW1vdmVkLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBraHRtbC9jc3MvY3NzX2Jhc2UuaDoKKyAgICAgICAgKiBraHRtbC9jc3MvY3NzX2Nv
bXB1dGVkc3R5bGUuY3BwOgorICAgICAgICAqIGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuaDoKKyAg
ICAgICAgKiBraHRtbC9jc3MvY3NzX3ZhbHVlaW1wbC5oOgorICAgICAgICAqIGtodG1sL2Nzcy9j
c3NzdHlsZXNlbGVjdG9yLmg6CisgICAgICAgICoga2h0bWwvZWNtYS9kb21wYXJzZXIuaDoKKyAg
ICAgICAgKiBraHRtbC9lY21hL2tqc19jc3MuaDoKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19k
b20uY3BwOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX2RvbS5oOgorICAgICAgICAqIGtodG1s
L2VjbWEva2pzX2V2ZW50cy5oOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX2h0bWwuY3BwOgor
ICAgICAgICAqIGtodG1sL2VjbWEva2pzX2h0bWwuaDoKKyAgICAgICAgKiBraHRtbC9lY21hL2tq
c19yYW5nZS5oOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX3RyYXZlcnNhbC5oOgorICAgICAg
ICAqIGtodG1sL2VjbWEva2pzX3ZpZXdzLmNwcDoKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc192
aWV3cy5oOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHA6CisgICAgICAgICog
a2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5oOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvU2Vs
ZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9hcHBlbmRfbm9k
ZV9jb21tYW5kLmNwcDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1h
bmQuY3BwOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5k
LmNwcDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3Bw
OgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvZGVsZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQu
Y3BwOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL2VkaXRfY29tbWFuZC5jcHA6CisgICAgICAgICog
a2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9p
bnNlcnRfaW50b190ZXh0X25vZGVfY29tbWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGlu
Zy9pbnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5n
L2luc2VydF9ub2RlX2JlZm9yZV9jb21tYW5kLmNwcDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5n
L2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwOgorICAgICAgICAqIGtodG1s
L2VkaXRpbmcvaW5zZXJ0X3RleHRfY29tbWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGlu
Zy9qb2luX3RleHRfbm9kZXNfY29tbWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9t
YXJrdXAuY3BwOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvbWVyZ2VfaWRlbnRpY2FsX2VsZW1l
bnRzX2NvbW1hbmQuY3BwOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvbW92ZV9zZWxlY3Rpb25f
Y29tbWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFj
ZV9jb21tYW5kLmNwcDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL3JlbW92ZV9jc3NfcHJvcGVy
dHlfY29tbWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9hdHRy
aWJ1dGVfY29tbWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9j
b21tYW5kLmNwcDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL3JlbW92ZV9ub2RlX3ByZXNlcnZp
bmdfY2hpbGRyZW5fY29tbWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9yZXBsYWNl
X3NlbGVjdGlvbl9jb21tYW5kLmNwcDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL3NldF9ub2Rl
X2F0dHJpYnV0ZV9jb21tYW5kLmNwcDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL3NwbGl0X2Vs
ZW1lbnRfY29tbWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25v
ZGVfY29tbWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25vZGVf
Y29udGFpbmluZ19lbGVtZW50LmNwcDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL3R5cGluZ19j
b21tYW5kLmNwcDoKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3Bw
OgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5oOgorICAgICAgICAq
IGtodG1sL2VkaXRpbmcvd3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1hbmQuY3BwOgor
ICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaDoKKyAgICAgICAgKiBraHRtbC9o
dG1sL2h0bWxfdGFibGVpbXBsLmg6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1scGFyc2VyLmNw
cDoKKyAgICAgICAgKiBraHRtbC9raHRtbHBhcnRfcC5oOgorICAgICAgICAqIGtodG1sL21pc2Mv
YXJlbmEuY3BwOgorICAgICAgICAoQXJlbmFBbGxvY2F0ZSk6CisgICAgICAgIChGcmVlQXJlbmFM
aXN0KToKKyAgICAgICAgKEFyZW5hRmluaXNoKToKKyAgICAgICAgKiBraHRtbC9taXNjL2hhc2h0
YWJsZS5oOgorICAgICAgICAoa2h0bWw6Okhhc2hUYWJsZTo6fkhhc2hUYWJsZSk6CisgICAgICAg
IChraHRtbDo6OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKGtodG1sOjo6OnJlaGFzaCk6Cisg
ICAgICAgIChraHRtbDo6OjpjbGVhcik6CisgICAgICAgIChraHRtbDo6OjpIYXNoVGFibGUpOgor
ICAgICAgICAqIGtodG1sL21pc2MvbG9hZGVyLmNwcDoKKyAgICAgICAgKiBraHRtbC9taXNjL21h
aW5fdGhyZWFkX21hbGxvYy5jcHA6IFJlbW92ZWQuCisgICAgICAgICoga2h0bWwvbWlzYy9tYWlu
X3RocmVhZF9tYWxsb2MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBraHRtbC9taXNjL3NoYXJlZC5o
OgorICAgICAgICAqIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuaDoKKyAgICAgICAgKiBr
aHRtbC94bWwvZG9tMl9ldmVudHNpbXBsLmg6CisgICAgICAgICoga2h0bWwveG1sL2RvbTJfcmFu
Z2VpbXBsLmg6CisgICAgICAgICoga2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5oOgorICAg
ICAgICAqIGtodG1sL3htbC9kb20yX3ZpZXdzaW1wbC5oOgorICAgICAgICAqIGtodG1sL3htbC9k
b21fZG9jaW1wbC5oOgorICAgICAgICAqIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwOgor
ICAgICAgICAoTmFtZWRBdHRyTWFwSW1wbDo6Y2xlYXJBdHRyaWJ1dGVzKToKKyAgICAgICAgKE5h
bWVkQXR0ck1hcEltcGw6Om9wZXJhdG9yPSk6CisgICAgICAgIChOYW1lZEF0dHJNYXBJbXBsOjph
ZGRBdHRyaWJ1dGUpOgorICAgICAgICAoTmFtZWRBdHRyTWFwSW1wbDo6cmVtb3ZlQXR0cmlidXRl
KToKKyAgICAgICAgKiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmg6CisgICAgICAgICoga2h0
bWwveG1sL2RvbV9ub2RlaW1wbC5jcHA6CisgICAgICAgICoga2h0bWwveG1sL2RvbV9ub2RlaW1w
bC5oOgorICAgICAgICAqIGtodG1sL3htbC9kb21fcG9zaXRpb24uY3BwOgorICAgICAgICAqIGto
dG1sL3htbC9kb21fc3RyaW5naW1wbC5oOgorICAgICAgICAqIGt3cS9ET00tQ1NTLm1tOgorICAg
ICAgICAqIGt3cS9ET00ubW06CisgICAgICAgICoga3dxL0RPTUV2ZW50cy5tbToKKyAgICAgICAg
KiBrd3EvRE9NSFRNTC5tbToKKyAgICAgICAgKiBrd3EvRE9NSW50ZXJuYWwubW06CisgICAgICAg
ICoga3dxL0RPTVZpZXdzLm1tOgorICAgICAgICAqIGt3cS9LV1FBY2NPYmplY3QubW06CisgICAg
ICAgICoga3dxL0tXUUFjY09iamVjdENhY2hlLm1tOgorICAgICAgICAqIGt3cS9LV1FBcnJheUlt
cGwuaDoKKyAgICAgICAgKiBrd3EvS1dRQXJyYXlJbXBsLm1tOgorICAgICAgICAoS1dRQXJyYXlJ
bXBsOjpLV1FBcnJheVByaXZhdGU6OktXUUFycmF5UHJpdmF0ZSk6CisgICAgICAgIChLV1FBcnJh
eUltcGw6OktXUUFycmF5UHJpdmF0ZTo6fktXUUFycmF5UHJpdmF0ZSk6CisgICAgICAgIChLV1FB
cnJheUltcGw6OnJlc2l6ZSk6CisgICAgICAgICoga3dxL0tXUUFzc2VydGlvbnMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBrd3EvS1dRQXNzZXJ0aW9ucy5tOiBSZW1vdmVkLgorICAgICAgICAqIGt3
cS9LV1FCdXR0b24ubW06CisgICAgICAgICoga3dxL0tXUUNTdHJpbmcubW06CisgICAgICAgICog
a3dxL0tXUUNsaXBib2FyZC5oOgorICAgICAgICAqIGt3cS9LV1FDbGlwYm9hcmQubW06CisgICAg
ICAgICoga3dxL0tXUUNvbG9yLm1tOgorICAgICAgICAqIGt3cS9LV1FDb21ib0JveC5tbToKKyAg
ICAgICAgKiBrd3EvS1dRRWRpdENvbW1hbmQubW06CisgICAgICAgICoga3dxL0tXUUV4Y2VwdGlv
bnMuaDoKKyAgICAgICAgKiBrd3EvS1dRRmlsZUJ1dHRvbi5tbToKKyAgICAgICAgKiBrd3EvS1dR
Rm9udEZhbWlseS5oOgorICAgICAgICAqIGt3cS9LV1FGb3JtRGF0YS5tbToKKyAgICAgICAgKiBr
d3EvS1dRS0hUTUxQYXJ0Lmg6CisgICAgICAgICoga3dxL0tXUUtIVE1MUGFydC5tbToKKyAgICAg
ICAgKiBrd3EvS1dRS1BhcnRzQnJvd3NlckludGVyZmFjZS5tbToKKyAgICAgICAgKiBrd3EvS1dR
S1VSTC5tbToKKyAgICAgICAgKiBrd3EvS1dRTGlzdEJveC5tbToKKyAgICAgICAgKiBrd3EvS1dR
TGlzdEltcGwubW06CisgICAgICAgICoga3dxL0tXUUxvZ2dpbmcuaDoKKyAgICAgICAgKiBrd3Ev
S1dRTG9nZ2luZy5tOgorICAgICAgICAqIGt3cS9LV1FNYXBJbXBsLmg6CisgICAgICAgICoga3dx
L0tXUU1hcEltcGwubW06CisgICAgICAgICoga3dxL0tXUU9iamVjdC5tbToKKyAgICAgICAgKiBr
d3EvS1dRUGFnZVN0YXRlLm1tOgorICAgICAgICAqIGt3cS9LV1FQYWludGVyLm1tOgorICAgICAg
ICAqIGt3cS9LV1FSZXNvdXJjZUxvYWRlci5tbToKKyAgICAgICAgKiBrd3EvS1dRU2lnbmFsLm1t
OgorICAgICAgICAqIGt3cS9LV1FTbG90Lm1tOgorICAgICAgICAqIGt3cS9LV1FTdHJpbmcuaDoK
KyAgICAgICAgKiBrd3EvS1dRU3RyaW5nLm1tOgorICAgICAgICAoQUxMT0NfUUNIQVIpOgorICAg
ICAgICAoUVN0cmluZzo6c2V0QnVmZmVyRnJvbUNGU3RyaW5nKToKKyAgICAgICAgKGFsbG9jYXRl
UGFnZU5vZGUpOgorICAgICAgICAqIGt3cS9LV1FUZXh0QXJlYS5tbToKKyAgICAgICAgKiBrd3Ev
S1dRVGV4dENvZGVjLm1tOgorICAgICAgICAqIGt3cS9LV1FUZXh0RWRpdC5tbToKKyAgICAgICAg
KiBrd3EvS1dRVGV4dEZpZWxkLm1tOgorICAgICAgICAqIGt3cS9LV1FUaW1lci5tbToKKyAgICAg
ICAgKiBrd3EvS1dRVmFsdWVMaXN0SW1wbC5oOgorICAgICAgICAqIGt3cS9LV1FWYWx1ZUxpc3RJ
bXBsLm1tOgorICAgICAgICAqIGt3cS9XZWJDb3JlQnJpZGdlLm1tOgorICAgICAgICAqIGt3cS9X
ZWJDb3JlQ29va2llQWRhcHRlci5tOgorICAgICAgICAqIGt3cS9XZWJDb3JlR3JhcGhpY3NCcmlk
Z2UubToKKyAgICAgICAgKiBrd3EvV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5Lm06CisgICAg
ICAgICoga3dxL1dlYkNvcmVLZXlHZW5lcmF0b3IubToKKyAgICAgICAgKiBrd3EvV2ViQ29yZVRl
eHRSZW5kZXJlckZhY3RvcnkubW06CisgICAgICAgICoga3dxL1dlYkNvcmVWaWV3RmFjdG9yeS5t
OgorCiAyMDA1LTA5LTI2ICBFcmljIFNlaWRlbCAgPGVzZWlkZWxAYXBwbGUuY29tPgogCiAgICAg
ICAgIE5vIHJldmlldyBuZWVkZWQsIHN2ZyBidWlsZCBmaXggb25seS4KSW5kZXg6IFdlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMva2pzL3NoYXJlZF9wdHIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBG
b3J3YXJkaW5nSGVhZGVycy9ranMvc2hhcmVkX3B0ci5oCmRpZmYgLU4gV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9ranMvc2hhcmVkX3B0ci5oCi0tLSBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L2tqcy9zaGFyZWRfcHRyLmgJMzAgQXVnIDIwMDUgMjM6NTY6MTUgLTAwMDAJMS4xCisrKyBXZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL2tqcy9zaGFyZWRfcHRyLmgJMSBKYW4gMTk3MCAwMDowMDow
MCAtMDAwMApAQCAtMSArMCwwIEBACi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9zaGFyZWRfcHRy
Lmg+CkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2t4bWxjb3JlL0Fzc2VydGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiBGb3J3YXJkaW5nSGVhZGVycy9reG1sY29yZS9Bc3NlcnRp
b25zLmgKZGlmZiAtTiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2t4bWxjb3JlL0Fzc2VydGlv
bnMuaAotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9reG1sY29yZS9Bc3NlcnRpb25zLmgJ
MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9r
eG1sY29yZS9Bc3NlcnRpb25zLmgJMjcgU2VwIDIwMDUgMDg6NDU6MDUgLTAwMDAKQEAgLTAsMCAr
MSBAQAorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXNzZXJ0aW9ucy5oPgpJbmRleDogV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9reG1sY29yZS9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogRm9yd2FyZGluZ0hlYWRlcnMva3htbGNvcmUvRmFzdE1hbGxvYy5oCmRpZmYgLU4gV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9reG1sY29yZS9GYXN0TWFsbG9jLmgKLS0tIFdlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMva3htbGNvcmUvRmFzdE1hbGxvYy5oCTEgSmFuIDE5NzAgMDA6MDA6
MDAgLTAwMDAKKysrIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva3htbGNvcmUvRmFzdE1hbGxv
Yy5oCTI3IFNlcCAyMDA1IDA4OjQ1OjA1IC0wMDAwCkBAIC0wLDAgKzEgQEAKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0Zhc3RNYWxsb2MuaD4KSW5kZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMva3htbGNvcmUvU2hhcmVkUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogRm9yd2FyZGluZ0hl
YWRlcnMva3htbGNvcmUvU2hhcmVkUHRyLmgKZGlmZiAtTiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL2t4bWxjb3JlL1NoYXJlZFB0ci5oCi0tLSBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2t4
bWxjb3JlL1NoYXJlZFB0ci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFdlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMva3htbGNvcmUvU2hhcmVkUHRyLmgJMjcgU2VwIDIwMDUgMDg6NDU6
MDUgLTAwMDAKQEAgLTAsMCArMSBAQAorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvU2hhcmVkUHRy
Lmg+CkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL21pc2MvbWFpbl90aHJlYWRfbWFs
bG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogRm9yd2FyZGluZ0hlYWRlcnMvbWlzYy9tYWluX3Ro
cmVhZF9tYWxsb2MuaApkaWZmIC1OIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvbWlzYy9tYWlu
X3RocmVhZF9tYWxsb2MuaAotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9taXNjL21haW5f
dGhyZWFkX21hbGxvYy5oCTI2IEFwciAyMDA1IDE4OjQ2OjAzIC0wMDAwCTEuMQorKysgV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9taXNjL21haW5fdGhyZWFkX21hbGxvYy5oCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKQEAgLTEgKzAsMCBAQAotI2ltcG9ydCA8bWFpbl90aHJlYWRfbWFsbG9j
Lmg+CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2osdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjgKZGlmZiAtcCAtdSAtcjEuMjgg
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCTI0IFNlcCAyMDA1IDA1OjQ5OjE1IC0wMDAw
CTEuMjgKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCTI3IFNl
cCAyMDA1IDA4OjQ1OjE5IC0wMDAwCkBAIC0xNjYsNyArMTY2LDYgQEAKIAkJOTNGMTk5MjEwODI0
NUU1OTAwMUU5QUJDIC8qIHhtbF90b2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzBBMDJERTQ0NzYwMTg2MzVDQSAvKiB4bWxfdG9r
ZW5pemVyLmggKi87IH07CiAJCTkzRjE5OTIyMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FBcHBsaWNh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4
Nzg2NzYwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUUFwcGxpY2F0aW9uLmggKi87IH07CiAJCTkzRjE5
OTIzMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FBcnJheUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NEM1MDJERTM3NTgwMUVBNDEyMiAvKiBL
V1FBcnJheUltcGwuaCAqLzsgfTsKLQkJOTNGMTk5MjQwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUFz
c2VydGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzNzdGQjU1MDMyQzIzNUMwMDg2MzVDRSAvKiBLV1FBc3NlcnRpb25zLmggKi87IH07CiAJCTkz
RjE5OTI1MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FBc3luY0lPLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODY3OTAyREUzQjg2MDFFQTQxMjIgLyog
S1dRQXN5bmNJTy5oICovOyB9OwogCQk5M0YxOTkyNjA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRQnJ1
c2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4
NjdCMDJERTNCODYwMUVBNDEyMiAvKiBLV1FCcnVzaC5oICovOyB9OwogCQk5M0YxOTkyNzA4MjQ1
RTU5MDAxRTlBQkMgLyogS1dRQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODY3QzAyREUzQjg2MDFFQTQxMjIgLyogS1dRQnVmZmVyLmgg
Ki87IH07CkBAIC0zNzMsNyArMzcyLDYgQEAKIAkJOTNGMTk5RjkwODI0NUU1OTAwMUU5QUJDIC8q
IGh0bWxfaW50ZXJjaGFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJFQTVFMDFEMDc1Q0VEQUMwMDk4QTQzMiAvKiBodG1sX2ludGVyY2hhbmdlLmgg
Ki87IH07CiAJCTkzRjE5OUZBMDgyNDVFNTkwMDFFOUFCQyAvKiBtYXJrdXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNzhEOUZBMDc2NDBBNDYwMDRC
OTdCRiAvKiBtYXJrdXAuaCAqLzsgfTsKIAkJOTNGMTk5RkIwODI0NUU1OTAwMUU5QUJDIC8qIGVk
aXRfYWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRURBNEFDOTcwNzZGQjg5MTAwREQyM0VDIC8qIGVkaXRfYWN0aW9ucy5oICovOyB9OwotCQk5
M0YxOTlGQzA4MjQ1RTU5MDAxRTlBQkMgLyogbWFpbl90aHJlYWRfbWFsbG9jLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUZEOUQyQzA4MUQ3MjdGMDA2
MzZGNTQgLyogbWFpbl90aHJlYWRfbWFsbG9jLmggKi87IH07CiAJCTkzRjE5OUZFMDgyNDVFNTkw
MDFFOUFCQyAvKiBsaW5rQ3Vyc29yLnRpZmYgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1QTFCMDQ5MDJERThBQkEwMTg2MzVDQSAvKiBsaW5rQ3Vyc29y
LnRpZmYgKi87IH07CiAJCTkzRjE5OUZGMDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sNC5jc3MgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QTFCMDUzMDJE
RThCNDYwMTg2MzVDQSAvKiBodG1sNC5jc3MgKi87IH07CiAJCTkzRjE5QTAwMDgyNDVFNTkwMDFF
OUFCQyAvKiBxdWlya3MuY3NzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzhGNjI5OTA0MDVGNDU2MDBBODAwMDQgLyogcXVpcmtzLmNzcyAqLzsgfTsK
QEAgLTU0OSw3ICs1NDcsNiBAQAogCQk5M0YxOUFDNzA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRTlNW
aWV3RXh0cmFzLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNTgzRDUwMjAzMTQwNjIzMDE4NjM1Q0UgLyogS1dRTlNWaWV3RXh0cmFzLm0gKi87IH07CiAJ
CTkzRjE5QUM4MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlSGlzdG9yeS5tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU1MTdEQzMwMzFBQjU2MzAxQTgw
MTgwIC8qIFdlYkNvcmVIaXN0b3J5Lm0gKi87IH07CiAJCTkzRjE5QUM5MDgyNDVFNTkwMDFFOUFC
QyAvKiByZW5kZXJfbGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjY5MENGRUIwMzFDNDdGNDAxQ0EyQUM0IC8qIHJlbmRlcl9sYXllci5jcHAg
Ki87IH07Ci0JCTkzRjE5QUNBMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FBc3NlcnRpb25zLm0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzc3RkI1NjAzMkMy
MzVDMDA4NjM1Q0UgLyogS1dRQXNzZXJ0aW9ucy5tICovOyB9OwogCQk5M0YxOUFDQjA4MjQ1RTU5
MDAxRTlBQkMgLyogS1dRTG9nZ2luZy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTM4NjFERTAwMzJDMkU1MjAwODYzNUNFIC8qIEtXUUxvZ2dpbmcubSAq
LzsgfTsKIAkJOTNGMTlBQ0MwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUZpbGVCdXR0b24ubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0NDRjdENTAzM0JE
NDNDMDA4NjM1Q0UgLyogS1dRRmlsZUJ1dHRvbi5tbSAqLzsgfTsKIAkJOTNGMTlBQ0QwODI0NUU1
OTAwMUU5QUJDIC8qIEtXUVJlc291cmNlTG9hZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzODZCOTEwMzcwNDVCMzAwODYzNUNFIC8qIEtXUVJl
c291cmNlTG9hZGVyLm1tICovOyB9OwpAQCAtNjE2LDcgKzYxMyw2IEBACiAJCTkzRjE5QjBFMDgy
NDVFNTkwMDFFOUFCQyAvKiBodG1sX2ludGVyY2hhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFQTVEQkRBMDc1Q0VEQTAwMDk4QTQzMiAvKiBo
dG1sX2ludGVyY2hhbmdlLmNwcCAqLzsgfTsKIAkJOTNGMTlCMEYwODI0NUU1OTAwMUU5QUJDIC8q
IG1hcmt1cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5Mzc4RDlGOTA3NjQwQTQ2MDA0Qjk3QkYgLyogbWFya3VwLmNwcCAqLzsgfTsKIAkJOTNGMTlC
MTAwODI0NUU1OTAwMUU5QUJDIC8qIERPTVV0aWxpdHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTExMUFDMDA3QkQ4MTJDMDBCNzE2MkMgLyogRE9N
VXRpbGl0eS5tbSAqLzsgfTsKLQkJOTNGMTlCMTEwODI0NUU1OTAwMUU5QUJDIC8qIG1haW5fdGhy
ZWFkX21hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NUZEOUQyQjA4MUQ3MjdGMDA2MzZGNTQgLyogbWFpbl90aHJlYWRfbWFsbG9jLmNwcCAq
LzsgfTsKIAkJOTNGMTlCMTMwODI0NUU1OTAwMUU5QUJDIC8qIEFwcGxpY2F0aW9uU2VydmljZXMu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjVDMjg2OTMwMjg0NkRDRDAxODYzNUNBIC8qIEFwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3
b3JrICovOyB9OwogCQk5M0YxOUIxNDA4MjQ1RTU5MDAxRTlBQkMgLyogQ2FyYm9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QzI4
Njk0MDI4NDZEQ0QwMTg2MzVDQSAvKiBDYXJib24uZnJhbWV3b3JrICovOyB9OwogCQk5M0YxOUIx
NTA4MjQ1RTU5MDAxRTlBQkMgLyogQ29jb2EuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVDMjg2OTUwMjg0NkRDRDAxODYzNUNBIC8q
IENvY29hLmZyYW1ld29yayAqLzsgfTsKQEAgLTk3Niw3ICs5NzIsNiBAQAogCQlBODIxMkFFQzA4
Nzk0QTIzMDA2NzczNTkgLyogeG1sX3Rva2VuaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMEEwMkRFNDQ3NjAxODYzNUNBIC8qIHhtbF90
b2tlbml6ZXIuaCAqLzsgfTsKIAkJQTgyMTJBRUQwODc5NEEyMzAwNjc3MzU5IC8qIEtXUUFwcGxp
Y2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTg3ODY3NjAyREUzQjg2MDFFQTQxMjIgLyogS1dRQXBwbGljYXRpb24uaCAqLzsgfTsKIAkJQTgy
MTJBRUUwODc5NEEyMzAwNjc3MzU5IC8qIEtXUUFycmF5SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg0QzUwMkRFMzc1ODAxRUE0MTIyIC8q
IEtXUUFycmF5SW1wbC5oICovOyB9OwotCQlBODIxMkFFRjA4Nzk0QTIzMDA2NzczNTkgLyogS1dR
QXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTM3N0ZCNTUwMzJDMjM1QzAwODYzNUNFIC8qIEtXUUFzc2VydGlvbnMuaCAqLzsgfTsKIAkJ
QTgyMTJBRjAwODc5NEEyMzAwNjc3MzU5IC8qIEtXUUFzeW5jSU8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4Njc5MDJERTNCODYwMUVBNDEyMiAv
KiBLV1FBc3luY0lPLmggKi87IH07CiAJCUE4MjEyQUYxMDg3OTRBMjMwMDY3NzM1OSAvKiBLV1FC
cnVzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4
Nzg2N0IwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUUJydXNoLmggKi87IH07CiAJCUE4MjEyQUYyMDg3
OTRBMjMwMDY3NzM1OSAvKiBLV1FCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NjdDMDJERTNCODYwMUVBNDEyMiAvKiBLV1FCdWZmZXIu
aCAqLzsgfTsKQEAgLTExODMsNyArMTE3OCw2IEBACiAJCUE4MjEyQkJGMDg3OTRBMjMwMDY3NzM1
OSAvKiBodG1sX2ludGVyY2hhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCRUE1RTAxRDA3NUNFREFDMDA5OEE0MzIgLyogaHRtbF9pbnRlcmNoYW5n
ZS5oICovOyB9OwogCQlBODIxMkJDMDA4Nzk0QTIzMDA2NzczNTkgLyogbWFya3VwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzc4RDlGQTA3NjQwQTQ2
MDA0Qjk3QkYgLyogbWFya3VwLmggKi87IH07CiAJCUE4MjEyQkMxMDg3OTRBMjMwMDY3NzM1OSAv
KiBlZGl0X2FjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEVEQTRBQzk3MDc2RkI4OTEwMEREMjNFQyAvKiBlZGl0X2FjdGlvbnMuaCAqLzsgfTsK
LQkJQTgyMTJCQzIwODc5NEEyMzAwNjc3MzU5IC8qIG1haW5fdGhyZWFkX21hbGxvYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVGRDlEMkMwODFENzI3
RjAwNjM2RjU0IC8qIG1haW5fdGhyZWFkX21hbGxvYy5oICovOyB9OwogCQlBODIxMkJDMzA4Nzk0
QTIzMDA2NzczNTkgLyogZWRpdF9jb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NTREODdCNjA4MzE5NzNCMDA4MkRDQTEgLyogZWRpdF9jb21t
YW5kLmggKi87IH07CiAJCUE4MjEyQkM0MDg3OTRBMjMwMDY3NzM1OSAvKiBjb21wb3NpdGVfZWRp
dF9jb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NURDMTZDMzA4MzFERDZGMDAyMjc0NEUgLyogY29tcG9zaXRlX2VkaXRfY29tbWFuZC5oICov
OyB9OwogCQlBODIxMkJDNTA4Nzk0QTIzMDA2NzczNTkgLyogYXBwZW5kX25vZGVfY29tbWFuZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVBQzc5QTAw
ODMxRUQ2RDAwOTM4NUNFIC8qIGFwcGVuZF9ub2RlX2NvbW1hbmQuaCAqLzsgfTsKQEAgLTEzOTMs
NyArMTM4Nyw2IEBACiAJCUE4MjEyQzk4MDg3OTRBMjMwMDY3NzM1OSAvKiBLV1FOU1ZpZXdFeHRy
YXMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODNE
NTAyMDMxNDA2MjMwMTg2MzVDRSAvKiBLV1FOU1ZpZXdFeHRyYXMubSAqLzsgfTsKIAkJQTgyMTJD
OTkwODc5NEEyMzAwNjc3MzU5IC8qIFdlYkNvcmVIaXN0b3J5Lm0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTUxN0RDMzAzMUFCNTYzMDFBODAxODAgLyog
V2ViQ29yZUhpc3RvcnkubSAqLzsgfTsKIAkJQTgyMTJDOUEwODc5NEEyMzAwNjc3MzU5IC8qIHJl
bmRlcl9sYXllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNjkwQ0ZFQjAzMUM0N0Y0MDFDQTJBQzQgLyogcmVuZGVyX2xheWVyLmNwcCAqLzsgfTsK
LQkJQTgyMTJDOUIwODc5NEEyMzAwNjc3MzU5IC8qIEtXUUFzc2VydGlvbnMubSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNzdGQjU2MDMyQzIzNUMwMDg2
MzVDRSAvKiBLV1FBc3NlcnRpb25zLm0gKi87IH07CiAJCUE4MjEyQzlDMDg3OTRBMjMwMDY3NzM1
OSAvKiBLV1FMb2dnaW5nLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5Mzg2MURFMDAzMkMyRTUyMDA4NjM1Q0UgLyogS1dRTG9nZ2luZy5tICovOyB9Owog
CQlBODIxMkM5RDA4Nzk0QTIzMDA2NzczNTkgLyogS1dRRmlsZUJ1dHRvbi5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQ0NGN0Q1MDMzQkQ0M0MwMDg2
MzVDRSAvKiBLV1FGaWxlQnV0dG9uLm1tICovOyB9OwogCQlBODIxMkM5RTA4Nzk0QTIzMDA2Nzcz
NTkgLyogS1dRUmVzb3VyY2VMb2FkZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzM4NkI5MTAzNzA0NUIzMDA4NjM1Q0UgLyogS1dRUmVzb3VyY2VM
b2FkZXIubW0gKi87IH07CkBAIC0xNDYwLDcgKzE0NTMsNiBAQAogCQlBODIxMkNEQzA4Nzk0QTIz
MDA2NzczNTkgLyogaHRtbF9pbnRlcmNoYW5nZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCRUE1REJEQTA3NUNFREEwMDA5OEE0MzIgLyogaHRtbF9p
bnRlcmNoYW5nZS5jcHAgKi87IH07CiAJCUE4MjEyQ0REMDg3OTRBMjMwMDY3NzM1OSAvKiBtYXJr
dXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM3
OEQ5RjkwNzY0MEE0NjAwNEI5N0JGIC8qIG1hcmt1cC5jcHAgKi87IH07CiAJCUE4MjEyQ0RFMDg3
OTRBMjMwMDY3NzM1OSAvKiBET01VdGlsaXR5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTExMTFBQzAwN0JEODEyQzAwQjcxNjJDIC8qIERPTVV0aWxp
dHkubW0gKi87IH07Ci0JCUE4MjEyQ0RGMDg3OTRBMjMwMDY3NzM1OSAvKiBtYWluX3RocmVhZF9t
YWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVGRDlEMkIwODFENzI3RjAwNjM2RjU0IC8qIG1haW5fdGhyZWFkX21hbGxvYy5jcHAgKi87IH07
CiAJCUE4MjEyQ0UwMDg3OTRBMjMwMDY3NzM1OSAvKiBlZGl0X2NvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0RDg3QjUwODMxOTczQjAw
ODJEQ0ExIC8qIGVkaXRfY29tbWFuZC5jcHAgKi87IH07CiAJCUE4MjEyQ0UxMDg3OTRBMjMwMDY3
NzM1OSAvKiBjb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1REMxNkMyMDgzMURENkYwMDIyNzQ0RSAvKiBjb21w
b3NpdGVfZWRpdF9jb21tYW5kLmNwcCAqLzsgfTsKIAkJQTgyMTJDRTIwODc5NEEyMzAwNjc3MzU5
IC8qIGFwcGVuZF9ub2RlX2NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjVBQzc5OUYwODMxRUQ2RDAwOTM4NUNFIC8qIGFwcGVuZF9ub2Rl
X2NvbW1hbmQuY3BwICovOyB9OwpAQCAtMjQ2Myw4ICsyNDU1LDYgQEAKIAkJNjVGMzc4MjcwODcw
RDk1ODAwMEIyRjk0IC8qIGhhc2h0YWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gaGFzaHRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjVGMzc4MjgwODcwRDk1ODAwMEIyRjk0IC8qIGhhc2h0YWJsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gaGFzaHRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTY1RjgwNjk3MDU0RDlGODYwMDhCRjc3NiAvKiBLV1FFeGNlcHRpb25zLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtXUUV4Y2VwdGlvbnMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1RkQ5RDJCMDgxRDcyN0YwMDYzNkY1NCAvKiBtYWlu
X3RocmVhZF9tYWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IG1haW5fdGhyZWFkX21hbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1
RkQ5RDJDMDgxRDcyN0YwMDYzNkY1NCAvKiBtYWluX3RocmVhZF9tYWxsb2MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG1haW5fdGhyZWFkX21hbGxvYy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3RTZGRUVENjA4OTg1ODIzMDBDNDRDM0YgLyogV2ViQ29yZVNj
cmlwdERlYnVnZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVT
Y3JpcHREZWJ1Z2dlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RTZGRUVENzA4
OTg1ODIzMDBDNDRDM0YgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzI1NTZFNDA2MURGMTU1MDA3QjgwNTQgLyogRE9N
RXh0ZW5zaW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRXh0ZW5z
aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwNiw4ICsyNDk2LDYgQEAK
IAkJOTMzODZCOTEwMzcwNDVCMzAwODYzNUNFIC8qIEtXUVJlc291cmNlTG9hZGVyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gS1dRUmVzb3VyY2VMb2FkZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNDg5MDA1MDZDMDAzNjMwMDdFN0FDRSAv
KiBET01Qcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01Qcml2
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNEU0Mzc4MDQxNDI5NEEwMDg2
MzVDRSAvKiBwYXJzZXIueSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUueWFjYzsgcGF0aCA9IHBhcnNl
ci55OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5Mzc3RkI1NTAzMkMyMzVDMDA4NjM1
Q0UgLyogS1dRQXNzZXJ0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
S1dRQXNzZXJ0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5Mzc3RkI1NjAz
MkMyMzVDMDA4NjM1Q0UgLyogS1dRQXNzZXJ0aW9ucy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5vYmpjOyBwYXRoID0gS1dRQXNzZXJ0aW9ucy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5Mzc4RDlGOTA3NjQwQTQ2MDA0Qjk3QkYgLyogbWFya3VwLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IG1hcmt1cC5jcHA7IHBhdGggPSBlZGl0aW5nL21hcmt1
cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNzhEOUZBMDc2NDBBNDYwMDRC
OTdCRiAvKiBtYXJrdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbWFya3Vw
Lmg7IHBhdGggPSBlZGl0aW5nL21hcmt1cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5Mzg1OUUzMjA2NUZDQUQzMDBDRjU0RUUgLyogRE9NSFRNTEludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUhUTUxJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzgyOSw4ICszODE3LDggQEAKIAkJQThDMEZCOEMwODk3MDFGODAw
QkE1MTE0IC8qIEtDYW52YXNUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBLQ2FudmFzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDMEZCOEQw
ODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEtDYW52YXNWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQThDMEZCOEUwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNWaWV3LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtDYW52YXNWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUE4REM2M0U4MDhFMEREMEEwMDQ1MDdGNyAvKiBFY21hSW50ZXJmYWNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEVjbWFJbnRlcmZhY2UuY3Bw
OyBwYXRoID0gImtkb20vZWNtYS9FY21hSW50ZXJmYWNlLmNwcCI7IHNvdXJjZVRyZWUgPSBERVJJ
VkVEX0ZJTEVfRElSOyB9OwotCQlBOERDNjNFQjA4RTBERDJBMDA0NTA3RjcgLyogRWNtYUludGVy
ZmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBFY21hSW50ZXJm
YWNlLmNwcDsgcGF0aCA9ICJrc3ZnMi9lY21hL0VjbWFJbnRlcmZhY2UuY3BwIjsgc291cmNlVHJl
ZSA9IERFUklWRURfRklMRV9ESVI7IH07CisJCUE4REM2M0U4MDhFMEREMEEwMDQ1MDdGNyAvKiBF
Y21hSW50ZXJmYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEVj
bWFJbnRlcmZhY2UuY3BwOyBwYXRoID0ga2RvbS9lY21hL0VjbWFJbnRlcmZhY2UuY3BwOyBzb3Vy
Y2VUcmVlID0gREVSSVZFRF9GSUxFX0RJUjsgfTsKKwkJQThEQzYzRUIwOEUwREQyQTAwNDUwN0Y3
IC8qIEVjbWFJbnRlcmZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRWNtYUludGVyZmFjZS5jcHA7IHBhdGggPSBrc3ZnMi9lY21hL0VjbWFJbnRlcmZhY2UuY3Bw
OyBzb3VyY2VUcmVlID0gREVSSVZFRF9GSUxFX0RJUjsgfTsKIAkJQThFQTQzM0QwOEUxNEVBQjAw
NEJDMzk2IC8qIHhtbF9rZG9tdG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IHhtbF9rZG9tdG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE4RUE0MzNFMDhFMTRFQUMwMDRCQzM5NiAvKiB4bWxfa2RvbXRva2VuaXplci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB4bWxfa2RvbXRva2VuaXplci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RUE0MzNGMDhFMTRFQUMwMDRCQzM5NiAvKiBy
ZW5kZXJfa2NhbnZhc3dyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
cmVuZGVyX2tjYW52YXN3cmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02
MjcwLDggKzYyNTgsNiBAQAogCQlGNTIzRDE1MDAyREU0MjcxMDE4NjM1Q0EgLyogb3RoZXIgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTkzNzdGQjU1MDMy
QzIzNUMwMDg2MzVDRSAvKiBLV1FBc3NlcnRpb25zLmggKi8sCi0JCQkJOTM3N0ZCNTYwMzJDMjM1
QzAwODYzNUNFIC8qIEtXUUFzc2VydGlvbnMubSAqLywKIAkJCQlGNTg3ODRDQzAyREUzNzU5MDFF
QTQxMjIgLyogS1dRQ2hhcnNldHMuaCAqLywKIAkJCQlGNUJGQUFDMTAzMDlDREY2MDE4NjM1Q0Ug
LyogY2hhcmFjdGVyLXNldHMudHh0ICovLAogCQkJCUY1NTBENzBCMDJFMTMyODEwMTg2MzVDQSAv
KiBtYWMtZW5jb2RpbmdzLnR4dCAqLywKQEAgLTY0OTQsOCArNjQ4MCw2IEBACiAJCQkJRjUyM0Qy
ODQwMkRFNDNENzAxODYzNUNBIC8qIGxvYWRlcl9jbGllbnQuaCAqLywKIAkJCQlGNTIzRDI4NTAy
REU0M0Q3MDE4NjM1Q0EgLyogbG9hZGVyLmNwcCAqLywKIAkJCQlGNTIzRDI4NjAyREU0M0Q3MDE4
NjM1Q0EgLyogbG9hZGVyLmggKi8sCi0JCQkJNjVGRDlEMkIwODFENzI3RjAwNjM2RjU0IC8qIG1h
aW5fdGhyZWFkX21hbGxvYy5jcHAgKi8sCi0JCQkJNjVGRDlEMkMwODFENzI3RjAwNjM2RjU0IC8q
IG1haW5fdGhyZWFkX21hbGxvYy5oICovLAogCQkJCUY1MjNEMjg4MDJERTQzRDcwMTg2MzVDQSAv
KiBzaGFyZWQuaCAqLywKIAkJCQlCQzQzM0FDRjA1RDMwNDZGMDAzQTVBMTQgLyogc3RyaW5naXQu
Y3BwICovLAogCQkJCUY1MjNEMjg5MDJERTQzRDcwMTg2MzVDQSAvKiBzdHJpbmdpdC5oICovLApA
QCAtNzAzMyw3ICs3MDE3LDYgQEAKIAkJCQk5M0YxOTkyMTA4MjQ1RTU5MDAxRTlBQkMgLyogeG1s
X3Rva2VuaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5MjIwODI0NUU1OTAwMUU5QUJD
IC8qIEtXUUFwcGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTkyMzA4MjQ1RTU5
MDAxRTlBQkMgLyogS1dRQXJyYXlJbXBsLmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOTkyNDA4
MjQ1RTU5MDAxRTlBQkMgLyogS1dRQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNG
MTk5MjUwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUFzeW5jSU8uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzRjE5OTI2MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FCcnVzaC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNGMTk5MjcwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC03MjQzLDcgKzcyMjYsNiBAQAogCQkJCTkzRjE5OUY5MDgyNDVFNTkwMDFFOUFCQyAvKiBo
dG1sX2ludGVyY2hhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlGQTA4MjQ1RTU5MDAx
RTlBQkMgLyogbWFya3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlGQjA4MjQ1RTU5MDAx
RTlBQkMgLyogZWRpdF9hY3Rpb25zLmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOTlGQzA4MjQ1
RTU5MDAxRTlBQkMgLyogbWFpbl90aHJlYWRfbWFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
NTREODdCODA4MzE5NzNCMDA4MkRDQTEgLyogZWRpdF9jb21tYW5kLmggaW4gSGVhZGVycyAqLywK
IAkJCQk2NURDMTZDNTA4MzFERDZGMDAyMjc0NEUgLyogY29tcG9zaXRlX2VkaXRfY29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjVBQzc5QTIwODMxRUQ2RDAwOTM4NUNFIC8qIGFwcGVuZF9u
b2RlX2NvbW1hbmQuaCBpbiBIZWFkZXJzICovLApAQCAtNzM4MSw3ICs3MzYzLDYgQEAKIAkJCQlB
ODIxMkFFQzA4Nzk0QTIzMDA2NzczNTkgLyogeG1sX3Rva2VuaXplci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTgyMTJBRUQwODc5NEEyMzAwNjc3MzU5IC8qIEtXUUFwcGxpY2F0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODIxMkFFRTA4Nzk0QTIzMDA2NzczNTkgLyogS1dRQXJyYXlJbXBsLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlBODIxMkFFRjA4Nzk0QTIzMDA2NzczNTkgLyogS1dRQXNzZXJ0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgyMTJBRjAwODc5NEEyMzAwNjc3MzU5IC8qIEtX
UUFzeW5jSU8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MjEyQUYxMDg3OTRBMjMwMDY3NzM1OSAv
KiBLV1FCcnVzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgyMTJBRjIwODc5NEEyMzAwNjc3MzU5
IC8qIEtXUUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03NTkxLDcgKzc1NzIsNiBAQAogCQkJ
CUE4MjEyQkJGMDg3OTRBMjMwMDY3NzM1OSAvKiBodG1sX2ludGVyY2hhbmdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBODIxMkJDMDA4Nzk0QTIzMDA2NzczNTkgLyogbWFya3VwLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBODIxMkJDMTA4Nzk0QTIzMDA2NzczNTkgLyogZWRpdF9hY3Rpb25zLmggaW4g
SGVhZGVycyAqLywKLQkJCQlBODIxMkJDMjA4Nzk0QTIzMDA2NzczNTkgLyogbWFpbl90aHJlYWRf
bWFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODIxMkJDMzA4Nzk0QTIzMDA2NzczNTkgLyog
ZWRpdF9jb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODIxMkJDNDA4Nzk0QTIzMDA2Nzcz
NTkgLyogY29tcG9zaXRlX2VkaXRfY29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgyMTJC
QzUwODc5NEEyMzAwNjc3MzU5IC8qIGFwcGVuZF9ub2RlX2NvbW1hbmQuaCBpbiBIZWFkZXJzICov
LApAQCAtOTQ4Myw3ICs5NDYzLDYgQEAKIAkJCQk5M0YxOUFDNzA4MjQ1RTU5MDAxRTlBQkMgLyog
S1dRTlNWaWV3RXh0cmFzLm0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFDODA4MjQ1RTU5MDAx
RTlBQkMgLyogV2ViQ29yZUhpc3RvcnkubSBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QUM5MDgy
NDVFNTkwMDFFOUFCQyAvKiByZW5kZXJfbGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNG
MTlBQ0EwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUFzc2VydGlvbnMubSBpbiBTb3VyY2VzICovLAog
CQkJCTkzRjE5QUNCMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FMb2dnaW5nLm0gaW4gU291cmNlcyAq
LywKIAkJCQk5M0YxOUFDQzA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRRmlsZUJ1dHRvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTkzRjE5QUNEMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FSZXNvdXJjZUxv
YWRlci5tbSBpbiBTb3VyY2VzICovLApAQCAtOTU1MCw3ICs5NTI5LDYgQEAKIAkJCQk5M0YxOUIw
RTA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9pbnRlcmNoYW5nZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5M0YxOUIwRjA4MjQ1RTU5MDAxRTlBQkMgLyogbWFya3VwLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzRjE5QjEwMDgyNDVFNTkwMDFFOUFCQyAvKiBET01VdGlsaXR5Lm1tIGluIFNvdXJj
ZXMgKi8sCi0JCQkJOTNGMTlCMTEwODI0NUU1OTAwMUU5QUJDIC8qIG1haW5fdGhyZWFkX21hbGxv
Yy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTREODdCNzA4MzE5NzNCMDA4MkRDQTEgLyogZWRp
dF9jb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1REMxNkM0MDgzMURENkYwMDIyNzQ0
RSAvKiBjb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QUM3
OUExMDgzMUVENkQwMDkzODVDRSAvKiBhcHBlbmRfbm9kZV9jb21tYW5kLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtOTc1Nyw3ICs5NzM1LDYgQEAKIAkJCQlBODIxMkM5ODA4Nzk0QTIzMDA2NzczNTkg
LyogS1dRTlNWaWV3RXh0cmFzLm0gaW4gU291cmNlcyAqLywKIAkJCQlBODIxMkM5OTA4Nzk0QTIz
MDA2NzczNTkgLyogV2ViQ29yZUhpc3RvcnkubSBpbiBTb3VyY2VzICovLAogCQkJCUE4MjEyQzlB
MDg3OTRBMjMwMDY3NzM1OSAvKiByZW5kZXJfbGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
QTgyMTJDOUIwODc5NEEyMzAwNjc3MzU5IC8qIEtXUUFzc2VydGlvbnMubSBpbiBTb3VyY2VzICov
LAogCQkJCUE4MjEyQzlDMDg3OTRBMjMwMDY3NzM1OSAvKiBLV1FMb2dnaW5nLm0gaW4gU291cmNl
cyAqLywKIAkJCQlBODIxMkM5RDA4Nzk0QTIzMDA2NzczNTkgLyogS1dRRmlsZUJ1dHRvbi5tbSBp
biBTb3VyY2VzICovLAogCQkJCUE4MjEyQzlFMDg3OTRBMjMwMDY3NzM1OSAvKiBLV1FSZXNvdXJj
ZUxvYWRlci5tbSBpbiBTb3VyY2VzICovLApAQCAtOTgyNCw3ICs5ODAxLDYgQEAKIAkJCQlBODIx
MkNEQzA4Nzk0QTIzMDA2NzczNTkgLyogaHRtbF9pbnRlcmNoYW5nZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBODIxMkNERDA4Nzk0QTIzMDA2NzczNTkgLyogbWFya3VwLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4MjEyQ0RFMDg3OTRBMjMwMDY3NzM1OSAvKiBET01VdGlsaXR5Lm1tIGluIFNv
dXJjZXMgKi8sCi0JCQkJQTgyMTJDREYwODc5NEEyMzAwNjc3MzU5IC8qIG1haW5fdGhyZWFkX21h
bGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODIxMkNFMDA4Nzk0QTIzMDA2NzczNTkgLyog
ZWRpdF9jb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MjEyQ0UxMDg3OTRBMjMwMDY3
NzM1OSAvKiBjb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
MjEyQ0UyMDg3OTRBMjMwMDY3NzM1OSAvKiBhcHBlbmRfbm9kZV9jb21tYW5kLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogV2ViQ29yZS9raHRtbC9raHRtbHBhcnRfcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1scGFydF9wLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNTkKZGlmZiAtcCAtdSAtcjEuNTkgV2ViQ29yZS9raHRtbC9raHRtbHBhcnRf
cC5oCi0tLSBXZWJDb3JlL2todG1sL2todG1scGFydF9wLmgJMjQgU2VwIDIwMDUgMDE6MTg6NTIg
LTAwMDAJMS41OQorKysgV2ViQ29yZS9raHRtbC9raHRtbHBhcnRfcC5oCTI3IFNlcCAyMDA1IDA4
OjQ1OjE5IC0wMDAwCkBAIC0yNDUsNyArMjQ1LDcgQEAgcHVibGljOgogICBsb25nIG1fY2FjaGVJ
ZDsKICNlbmRpZgogICBRU3RyaW5nIHNjaGVkdWxlZFNjcmlwdDsKLSAga2h0bWw6OlNoYXJlZFB0
cjxET006Ok5vZGVJbXBsPiBzY2hlZHVsZWRTY3JpcHROb2RlOworICBTaGFyZWRQdHI8RE9NOjpO
b2RlSW1wbD4gc2NoZWR1bGVkU2NyaXB0Tm9kZTsKIAogICBLSlNQcm94eSAqbV9qc2NyaXB0Owog
ICBLTGlicmFyeSAqbV9ranNfbGliOwpAQCAtMzYzLDcgKzM2Myw3IEBAIHB1YmxpYzoKICAgU3Vi
bWl0Rm9ybSAqbV9zdWJtaXRGb3JtOwogCiAgIGJvb2wgbV9iTW91c2VQcmVzc2VkOwotICBraHRt
bDo6U2hhcmVkUHRyPERPTTo6Tm9kZUltcGw+IG1fbW91c2VQcmVzc05vZGU7IC8vbm9kZSB1bmRl
ciB0aGUgbW91c2Ugd2hlbiB0aGUgbW91c2Ugd2FzIHByZXNzZWQgKHNldCBpbiB0aGUgbW91c2Ug
aGFuZGxlcikKKyAgU2hhcmVkUHRyPERPTTo6Tm9kZUltcGw+IG1fbW91c2VQcmVzc05vZGU7IC8v
bm9kZSB1bmRlciB0aGUgbW91c2Ugd2hlbiB0aGUgbW91c2Ugd2FzIHByZXNzZWQgKHNldCBpbiB0
aGUgbW91c2UgaGFuZGxlcikKIAogICBraHRtbDo6RVRleHRHcmFudWxhcml0eSBtX3NlbGVjdGlv
bkdyYW51bGFyaXR5OwogICBib29sIG1fYmVnYW5TZWxlY3RpbmdUZXh0OwpJbmRleDogV2ViQ29y
ZS9raHRtbC9jc3MvY3NzX2Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9jc3MvY3NzX2Jhc2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZm
IC1wIC11IC1yMS4xNiBXZWJDb3JlL2todG1sL2Nzcy9jc3NfYmFzZS5oCi0tLSBXZWJDb3JlL2to
dG1sL2Nzcy9jc3NfYmFzZS5oCTE2IFNlcCAyMDA1IDIyOjQyOjAxIC0wMDAwCTEuMTYKKysrIFdl
YkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmgJMjcgU2VwIDIwMDUgMDg6NDU6MTkgLTAwMDAKQEAg
LTQ2LDEzICs0NiwxMSBAQCBuYW1lc3BhY2UgRE9NIHsKIAogICAgIGNsYXNzIERvY3VtZW50SW1w
bDsKIAotICAgIHN0cnVjdCBDU1NOYW1lc3BhY2UgeworICAgIHN0cnVjdCBDU1NOYW1lc3BhY2Ug
OiBwdWJsaWMgRmFzdEFsbG9jYXRlZCB7CiAgICAgICAgIEF0b21pY1N0cmluZyBtX3ByZWZpeDsK
ICAgICAgICAgQXRvbWljU3RyaW5nIG1fdXJpOwogICAgICAgICBDU1NOYW1lc3BhY2UqIG1fcGFy
ZW50OwogCi0gICAgICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogICAgICAgICBDU1NOYW1l
c3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIHUsIENTU05h
bWVzcGFjZSogcGFyZW50KSAKICAgICAgICAgICAgIDptX3ByZWZpeChwKSwgbV91cmkodSksIG1f
cGFyZW50KHBhcmVudCkge30KICAgICAgICAgfkNTU05hbWVzcGFjZSgpIHsgZGVsZXRlIG1fcGFy
ZW50OyB9CkBAIC03MCw3ICs2OCw3IEBAIG5hbWVzcGFjZSBET00gewogICAgIH07CiAgICAgCiAv
LyB0aGlzIGNsYXNzIHJlcHJlc2VudHMgYSBzZWxlY3RvciBmb3IgYSBTdHlsZVJ1bGUKLSAgICBj
bGFzcyBDU1NTZWxlY3RvcgorICAgIGNsYXNzIENTU1NlbGVjdG9yIDogcHVibGljIEZhc3RBbGxv
Y2F0ZWQKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBDU1NTZWxlY3RvcigpCkBAIC05MSw4
ICs4OSw2IEBAIG5hbWVzcGFjZSBET00gewogICAgICAgICAgICAgZGVsZXRlIG5leHRTZWxlY3Rv
cjsKIAl9CiAKLSAgICAgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgICAgIHZvaWQg
YXBwZW5kKENTU1NlbGVjdG9yKiBuKSB7CiAgICAgICAgICAgICBpZiAoIW5leHRTZWxlY3Rvcikg
bmV4dFNlbGVjdG9yID0gbjsgZWxzZSBuZXh0U2VsZWN0b3ItPmFwcGVuZChuKTsKICAgICAgICAg
fQpAQCAtMTk4LDcgKzE5NCw3IEBAIG5hbWVzcGFjZSBET00gewogICAgIH07CiAKICAgICAvLyBh
IHN0eWxlIGNsYXNzIHdoaWNoIGhhcyBhIHBhcmVudCAoYWxtb3N0IGFsbCBoYXZlKQotICAgIGNs
YXNzIFN0eWxlQmFzZUltcGwgOiBwdWJsaWMga2h0bWw6OlRyZWVTaGFyZWQ8U3R5bGVCYXNlSW1w
bD4KKyAgICBjbGFzcyBTdHlsZUJhc2VJbXBsIDogcHVibGljIGtodG1sOjpUcmVlU2hhcmVkPFN0
eWxlQmFzZUltcGw+LCBwdWJsaWMgRmFzdEFsbG9jYXRlZAogICAgIHsKICAgICBwdWJsaWM6CiAJ
U3R5bGVCYXNlSW1wbCgpICB7IG1fcGFyZW50ID0gMDsgc3RyaWN0UGFyc2luZyA9IHRydWU7IG11
bHRpTGVuZ3RoID0gZmFsc2U7IH0KQEAgLTIxMCw4ICsyMDYsNiBAQCBuYW1lc3BhY2UgRE9NIHsK
IAogCXZpcnR1YWwgflN0eWxlQmFzZUltcGwoKSB7fQogCi0gICAgICAgIE1BSU5fVEhSRUFEX0FM
TE9DQVRFRDsKLQogCS8vIHJldHVybnMgdGhlIHVybCBvZiB0aGUgc3R5bGUgc2hlZXQgdGhpcyBv
YmplY3QgYmVsb25ncyB0bwogCURPTVN0cmluZyBiYXNlVVJMKCk7CiAKSW5kZXg6IFdlYkNvcmUv
a2h0bWwvY3NzL2Nzc19jb21wdXRlZHN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX2NvbXB1dGVkc3R5bGUuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjM2CmRpZmYgLXAgLXUgLXIxLjM2IFdlYkNvcmUva2h0bWwvY3NzL2Nzc19j
b21wdXRlZHN0eWxlLmNwcAotLS0gV2ViQ29yZS9raHRtbC9jc3MvY3NzX2NvbXB1dGVkc3R5bGUu
Y3BwCTE2IFNlcCAyMDA1IDIyOjQyOjAxIC0wMDAwCTEuMzYKKysrIFdlYkNvcmUva2h0bWwvY3Nz
L2Nzc19jb21wdXRlZHN0eWxlLmNwcAkyNyBTZXAgMjAwNSAwODo0NToxOSAtMDAwMApAQCAtMzQs
NyArMzQsNyBAQAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAKICNpZiBB
UFBMRV9DSEFOR0VTCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29y
ZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0ICJLV1FGb250RmFtaWx5LmgiCiAjaW1wb3J0ICJLV1FM
b2dnaW5nLmgiCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVs
ZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZmIC1wIC11IC1yMS4xNyBXZWJD
b3JlL2todG1sL2Nzcy9jc3NfcnVsZWltcGwuaAotLS0gV2ViQ29yZS9raHRtbC9jc3MvY3NzX3J1
bGVpbXBsLmgJMTYgU2VwIDIwMDUgMjI6NDI6MDEgLTAwMDAJMS4xNworKysgV2ViQ29yZS9raHRt
bC9jc3MvY3NzX3J1bGVpbXBsLmgJMjcgU2VwIDIwMDUgMDg6NDU6MTkgLTAwMDAKQEAgLTMwLDcg
KzMwLDcgQEAKICNpbmNsdWRlICJjc3MvY3NzX2Jhc2UuaCIKICNpbmNsdWRlICJtaXNjL2xvYWRl
cl9jbGllbnQuaCIKICNpbmNsdWRlICJtaXNjL3NoYXJlZC5oIgotI2luY2x1ZGUgIm1pc2MvbWFp
bl90aHJlYWRfbWFsbG9jLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvRmFzdE1hbGxvYy5oPgogI2lu
Y2x1ZGUgImNzc192YWx1ZWltcGwuaCIKIAogbmFtZXNwYWNlIGtodG1sIHsKQEAgLTUxLDggKzUx
LDYgQEAgcHVibGljOgogICAgIENTU1J1bGVJbXBsKFN0eWxlQmFzZUltcGwgKnBhcmVudCkKICAg
ICAgICAgOiBTdHlsZUJhc2VJbXBsKHBhcmVudCksIG1fdHlwZShDU1NSdWxlOjpVTktOT1dOX1JV
TEUpIHt9CiAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICB2aXJ0dWFsIGJvb2wg
aXNSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHVuc2lnbmVkIHNob3J0IHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KIApAQCAtNzQsOCArNzIsNiBAQCBwdWJsaWM6CiAgICAgQ1NT
Q2hhcnNldFJ1bGVJbXBsKFN0eWxlQmFzZUltcGwgKnBhcmVudCkKICAgICAgICAgOiBDU1NSdWxl
SW1wbChwYXJlbnQpIHsgbV90eXBlID0gQ1NTUnVsZTo6Q0hBUlNFVF9SVUxFOyB9CiAKLSAgICBN
QUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNDaGFyc2V0UnVsZSgp
IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIERPTVN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
CiAKQEAgLTkzLDggKzg5LDYgQEAgcHVibGljOgogICAgIENTU0ZvbnRGYWNlUnVsZUltcGwoU3R5
bGVCYXNlSW1wbCAqcGFyZW50KTsKICAgICB2aXJ0dWFsIH5DU1NGb250RmFjZVJ1bGVJbXBsKCk7
CiAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0gICAgCiAgICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25JbXBsICpzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBpc0ZvbnRGYWNlUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KQEAgLTExMyw4
ICsxMDcsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhTGlzdEltcGwg
Km1lZGlhICk7CiAgICAgdmlydHVhbCB+Q1NTSW1wb3J0UnVsZUltcGwoKTsKIAotICAgIE1BSU5f
VEhSRUFEX0FMTE9DQVRFRDsKLQogICAgIERPTTo6RE9NU3RyaW5nIGhyZWYoKSBjb25zdCB7IHJl
dHVybiBtX3N0ckhyZWY7IH0KICAgICBNZWRpYUxpc3RJbXBsICptZWRpYSgpIGNvbnN0IHsgcmV0
dXJuIG1fbHN0TWVkaWE7IH0KICAgICBDU1NTdHlsZVNoZWV0SW1wbCAqc3R5bGVTaGVldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVldDsgfQpAQCAtMTQ1LDggKzEzNyw2IEBAIHB1YmxpYzoK
ICAgICBDU1NSdWxlTGlzdEltcGwoU3R5bGVMaXN0SW1wbCAqKTsKICAgICB+Q1NTUnVsZUxpc3RJ
bXBsKCk7CiAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX2xzdENTU1J1bGVzLmNvdW50KCk7IH0KICAgICBDU1NSdWxl
SW1wbCAqaXRlbSAoIHVuc2lnbmVkIGluZGV4ICkgeyByZXR1cm4gbV9sc3RDU1NSdWxlcy5hdCgg
aW5kZXggKTsgfQogCkBAIC0xNjcsOCArMTU3LDYgQEAgcHVibGljOgogICAgIENTU01lZGlhUnVs
ZUltcGwoIFN0eWxlQmFzZUltcGwgKnBhcmVudCwgTWVkaWFMaXN0SW1wbCAqbWVkaWFMaXN0LCBD
U1NSdWxlTGlzdEltcGwgKnJ1bGVMaXN0ICk7CiAgICAgdmlydHVhbCB+Q1NTTWVkaWFSdWxlSW1w
bCgpOwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgTWVkaWFMaXN0SW1wbCAq
bWVkaWEoKSBjb25zdCB7IHJldHVybiBtX2xzdE1lZGlhOyB9CiAgICAgQ1NTUnVsZUxpc3RJbXBs
ICpjc3NSdWxlcygpIHsgcmV0dXJuIG1fbHN0Q1NTUnVsZXM7IH0KIApAQCAtMTkyLDggKzE4MCw2
IEBAIHB1YmxpYzoKICAgICBDU1NQYWdlUnVsZUltcGwoU3R5bGVCYXNlSW1wbCAqcGFyZW50KTsK
ICAgICB2aXJ0dWFsIH5DU1NQYWdlUnVsZUltcGwoKTsKIAotICAgIE1BSU5fVEhSRUFEX0FMTE9D
QVRFRDsKLQogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNQYWdlUnVsZSgpIHsg
cmV0dXJuIHRydWU7IH0KQEAgLTIxMyw4ICsxOTksNiBAQCBwdWJsaWM6CiAgICAgQ1NTU3R5bGVS
dWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJlbnQpOwogICAgIHZpcnR1YWwgfkNTU1N0eWxlUnVs
ZUltcGwoKTsKIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CkBAIC0yNDEs
OCArMjI1LDYgQEAgY2xhc3MgQ1NTVW5rbm93blJ1bGVJbXBsIDogcHVibGljIENTU1J1bAogcHVi
bGljOgogICAgIENTU1Vua25vd25SdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJlbnQpIDogQ1NT
UnVsZUltcGwocGFyZW50KSB7fQogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAg
dmlydHVhbCBib29sIGlzVW5rbm93blJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CiB9OwogCkluZGV4
OiBXZWJDb3JlL2todG1sL2Nzcy9jc3NfdmFsdWVpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc192YWx1ZWltcGwuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS40OQpkaWZmIC1wIC11IC1yMS40OSBXZWJDb3JlL2todG1sL2Nzcy9jc3NfdmFs
dWVpbXBsLmgKLS0tIFdlYkNvcmUva2h0bWwvY3NzL2Nzc192YWx1ZWltcGwuaAkxNiBTZXAgMjAw
NSAyMjo0MjowMiAtMDAwMAkxLjQ5CisrKyBXZWJDb3JlL2todG1sL2Nzcy9jc3NfdmFsdWVpbXBs
LmgJMjcgU2VwIDIwMDUgMDg6NDU6MjAgLTAwMDAKQEAgLTIzOCwxMCArMjM4LDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBpc1F1aXJrVmFsdWUoKSB7IHJldHVybiB0cnVlOyB9CiB9Owog
Ci1jbGFzcyBDb3VudGVySW1wbCA6IHB1YmxpYyBraHRtbDo6U2hhcmVkPENvdW50ZXJJbXBsPiB7
CitjbGFzcyBDb3VudGVySW1wbCA6IHB1YmxpYyBraHRtbDo6U2hhcmVkPENvdW50ZXJJbXBsPiwg
cHVibGljIEZhc3RBbGxvY2F0ZWQgewogcHVibGljOgotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRF
RDsKLQogICAgIERPTVN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlm
aWVyOyB9CiAgICAgRE9NU3RyaW5nIGxpc3RTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFN0
eWxlOyB9CiAgICAgRE9NU3RyaW5nIHNlcGFyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VwYXJh
dG9yOyB9CkBAIC0yNTEsMTMgKzI0OSwxMSBAQCBwdWJsaWM6CiAgICAgRE9NU3RyaW5nIG1fc2Vw
YXJhdG9yOwogfTsKIAotY2xhc3MgUmVjdEltcGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxSZWN0
SW1wbD4geworY2xhc3MgUmVjdEltcGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxSZWN0SW1wbD4s
IHB1YmxpYyBGYXN0QWxsb2NhdGVkIHsKIHB1YmxpYzoKICAgICBSZWN0SW1wbCgpOwogICAgIHZp
cnR1YWwgflJlY3RJbXBsKCk7CiAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICBD
U1NQcmltaXRpdmVWYWx1ZUltcGwgKnRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wOyB9CiAgICAg
Q1NTUHJpbWl0aXZlVmFsdWVJbXBsICpyaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHQ7IH0K
ICAgICBDU1NQcmltaXRpdmVWYWx1ZUltcGwgKmJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fYm90
dG9tOyB9CkBAIC0yNzgsMTMgKzI3NCwxMSBAQCBwcm90ZWN0ZWQ6CiAvLyBhbmQgYm9yZGVyLXNw
YWNpbmcgKGFsbCBvZiB3aGljaCBhcmUgc3BhY2Utc2VwYXJhdGVkIHNldHMgb2YgdHdvIHZhbHVl
cykuICBBdCB0aGUgbW9tZW50IHdlIGFyZSBvbmx5IHVzaW5nIGl0IGZvcgogLy8gYm9yZGVyLXJh
ZGl1cywgYnV0IChGSVhNRSkgYm9yZGVyLXNwYWNpbmcgYW5kIGJhY2tncm91bmQtcG9zaXRpb24g
Y291bGQgYmUgY29udmVydGVkIG92ZXIgdG8gdXNlIGl0CiAvLyAoZWxpbWluYXRpbmcgc29tZSBl
eHRyYSAta2h0bWwtIGludGVybmFsIHByb3BlcnRpZXMpLgotY2xhc3MgUGFpckltcGwgOiBwdWJs
aWMga2h0bWw6OlNoYXJlZDxQYWlySW1wbD4geworY2xhc3MgUGFpckltcGwgOiBwdWJsaWMga2h0
bWw6OlNoYXJlZDxQYWlySW1wbD4sIHB1YmxpYyBGYXN0QWxsb2NhdGVkIHsKIHB1YmxpYzoKICAg
ICBQYWlySW1wbCgpOwogICAgIHZpcnR1YWwgflBhaXJJbXBsKCk7CiAKLSAgICBNQUlOX1RIUkVB
RF9BTExPQ0FURUQ7Ci0KICAgICBDU1NQcmltaXRpdmVWYWx1ZUltcGwgKmZpcnN0KCkgY29uc3Qg
eyByZXR1cm4gbV9maXJzdDsgfQogICAgIENTU1ByaW1pdGl2ZVZhbHVlSW1wbCAqc2Vjb25kKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWNvbmQ7IH0KIApAQCAtMzMwLDggKzMyNCw2IEBAIHB1YmxpYzoK
ICAgICBDU1NJbWFnZVZhbHVlSW1wbChjb25zdCBET01TdHJpbmcgJnVybCwgU3R5bGVCYXNlSW1w
bCAqc3R5bGUpOwogICAgIHZpcnR1YWwgfkNTU0ltYWdlVmFsdWVJbXBsKCk7CiAKLSAgICBNQUlO
X1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICBraHRtbDo6Q2FjaGVkSW1hZ2UgKmltYWdlKGtodG1s
OjpEb2NMb2FkZXIqIGxvYWRlcik7CiAKIHByb3RlY3RlZDoKQEAgLTM0Nyw4ICszMzksNiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhvcml6b250YWxSdWxlLCBp
bnQgdmVydGljYWxSdWxlKTsKICAgICB2aXJ0dWFsIH5DU1NCb3JkZXJJbWFnZVZhbHVlSW1wbCgp
OwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgdmlydHVhbCBET01TdHJpbmcg
Y3NzVGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBl
KCkgY29uc3QgeyByZXR1cm4gQ1NTVmFsdWU6OkNTU19DVVNUT007IH0KIApAQCAtNDIwLDcgKzQx
MCw3IEBAIHB1YmxpYzoKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBhbm90aGVyIGhl
bHBlciBjbGFzcwotY2xhc3MgQ1NTUHJvcGVydHkKK2NsYXNzIENTU1Byb3BlcnR5IDogcHVibGlj
IEZhc3RBbGxvY2F0ZWQKIHsKIHB1YmxpYzoKICAgICBDU1NQcm9wZXJ0eSgpIDogbV9pZCgtMSks
IG1fYkltcG9ydGFudChmYWxzZSksIG1fdmFsdWUoMCkKQEAgLTQ1MSw4ICs0NDEsNiBAQCBwdWJs
aWM6CiAJaWYobV92YWx1ZSkgbV92YWx1ZS0+ZGVyZWYoKTsKICAgICB9CiAKLSAgICBNQUlOX1RI
UkVBRF9BTExPQ0FURUQ7Ci0KICAgICB2b2lkIHNldFZhbHVlKENTU1ZhbHVlSW1wbCAqdmFsKSB7
CiAJaWYgKHZhbCkgdmFsLT5yZWYoKTsKICAgICAgICAgaWYgKG1fdmFsdWUpIG1fdmFsdWUtPmRl
cmVmKCk7CkluZGV4OiBXZWJDb3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0
b3IuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNgpkaWZmIC1wIC11IC1yMS4zNiBXZWJDb3Jl
L2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgKLS0tIFdlYkNvcmUva2h0bWwvY3NzL2Nzc3N0
eWxlc2VsZWN0b3IuaAkyNyBBdWcgMjAwNSAwMDoxNDoxOSAtMDAwMAkxLjM2CisrKyBXZWJDb3Jl
L2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgJMjcgU2VwIDIwMDUgMDg6NDU6MjAgLTAwMDAK
QEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgiCiAj
aW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJjc3MvY3NzX3J1bGVpbXBsLmgi
Ci0jaW5jbHVkZSAibWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaCIKKyNpbmNsdWRlIDxreG1sY29y
ZS9GYXN0TWFsbG9jLmg+CiAKIGNsYXNzIEtIVE1MU2V0dGluZ3M7CiBjbGFzcyBLSFRNTFZpZXc7
CkBAIC02Miw3ICs2Miw3IEBAIG5hbWVzcGFjZSBraHRtbAogICAgICAqIGZvciBzcGVjaWZpYyBp
bXBsZW1lbnRhdGlvbnMgb2YgdGhlIFNlbGVjdG9yLiBBdCB0aGUgbW9tZW50IG9ubHkgQ1NTU3R5
bGVTZWxlY3RvcgogICAgICAqIGV4aXN0cywgYnV0IHNvbWVvbmUgbWF5IHdpc2ggdG8gaW1wbGVt
ZW50IFhTTC4uLgogICAgICAqLwotICAgIGNsYXNzIFN0eWxlU2VsZWN0b3IKKyAgICBjbGFzcyBT
dHlsZVNlbGVjdG9yIDogcHVibGljIEZhc3RBbGxvY2F0ZWQKICAgICB7CiAgICAgcHVibGljOgog
CVN0eWxlU2VsZWN0b3IoKSB7fTsKQEAgLTczLDggKzczLDYgQEAgbmFtZXNwYWNlIGtodG1sCiAv
LyAJdmlydHVhbCB+U3R5bGVTZWxlY3RvcigpIHt9OwogLy8gCXZpcnR1YWwgUmVuZGVyU3R5bGUg
KnN0eWxlRm9yRWxlbWVudChET006OkVsZW1lbnRJbXBsICplKSA9IDA7CiAKLSAgICAgICAgTUFJ
Tl9USFJFQURfQUxMT0NBVEVEOwotCiAJZW51bSBTdGF0ZSB7CiAJICAgIE5vbmUgPSAweDAwLAog
CSAgICBIb3ZlciA9IDB4MDEsCkBAIC0yMjYsMTQgKzIyNCwxMiBAQCBwdWJsaWM6CiAJdm9pZCBh
cHBseVByb3BlcnR5KGludCBpZCwgRE9NOjpDU1NWYWx1ZUltcGwgKnZhbHVlKTsKICAgICB9Owog
Ci0gICAgY2xhc3MgQ1NTUnVsZURhdGEgeworICAgIGNsYXNzIENTU1J1bGVEYXRhIDogcHVibGlj
IEZhc3RBbGxvY2F0ZWQgewogICAgIHB1YmxpYzoKICAgICAgICAgQ1NTUnVsZURhdGEodWludCBw
b3MsIERPTTo6Q1NTU3R5bGVSdWxlSW1wbCogciwgRE9NOjpDU1NTZWxlY3Rvciogc2VsLCBDU1NS
dWxlRGF0YSogcHJldiA9IDApCiAgICAgICAgIDptX3Bvc2l0aW9uKHBvcyksIG1fcnVsZShyKSwg
bV9zZWxlY3RvcihzZWwpLCBtX25leHQoMCkgeyBpZiAocHJldikgcHJldi0+bV9uZXh0ID0gdGhp
czsgfQogICAgICAgICB+Q1NTUnVsZURhdGEoKSB7IGRlbGV0ZSBtX25leHQ7IH0KIAotICAgICAg
ICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICAgICAgdWludCBwb3NpdGlvbigpIHsgcmV0
dXJuIG1fcG9zaXRpb247IH0KICAgICAgICAgRE9NOjpDU1NTdHlsZVJ1bGVJbXBsKiBydWxlKCkg
eyByZXR1cm4gbV9ydWxlOyB9CiAgICAgICAgIERPTTo6Q1NTU2VsZWN0b3IqIHNlbGVjdG9yKCkg
eyByZXR1cm4gbV9zZWxlY3RvcjsgfQpAQCAtMjQ2LDE0ICsyNDIsMTIgQEAgcHVibGljOgogICAg
ICAgICBDU1NSdWxlRGF0YSogbV9uZXh0OwogICAgIH07CiAKLSAgICBjbGFzcyBDU1NSdWxlRGF0
YUxpc3QgeworICAgIGNsYXNzIENTU1J1bGVEYXRhTGlzdCA6IHB1YmxpYyBGYXN0QWxsb2NhdGVk
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIENTU1J1bGVEYXRhTGlzdCh1aW50IHBvcywgRE9NOjpD
U1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBET006OkNTU1NlbGVjdG9yKiBzZWwpCiAgICAgICAgIHsg
bV9maXJzdCA9IG1fbGFzdCA9IG5ldyBDU1NSdWxlRGF0YShwb3MsIHJ1bGUsIHNlbCk7IH0KICAg
ICAgICAgfkNTU1J1bGVEYXRhTGlzdCgpIHsgZGVsZXRlIG1fZmlyc3Q7IH0KIAotICAgICAgICBN
QUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICAgICAgQ1NTUnVsZURhdGEqIGZpcnN0KCkgeyBy
ZXR1cm4gbV9maXJzdDsgfQogICAgICAgICBDU1NSdWxlRGF0YSogbGFzdCgpIHsgcmV0dXJuIG1f
bGFzdDsgfQogICAgICAgICAKQEAgLTI2NiwxNCArMjYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAg
Q1NTUnVsZURhdGEqIG1fbGFzdDsKICAgICB9OwogICAgIAotICAgIGNsYXNzIENTU1J1bGVTZXQK
KyAgICBjbGFzcyBDU1NSdWxlU2V0IDogcHVibGljIEZhc3RBbGxvY2F0ZWQKICAgICB7CiAgICAg
cHVibGljOgogICAgICAgICBDU1NSdWxlU2V0KCk7CiAgICAgICAgIH5DU1NSdWxlU2V0KCk7CiAK
LSAgICAgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgICAgIHR5cGVkZWYgSGFzaE1h
cDxET006OkRPTVN0cmluZ0ltcGwgKiwgQ1NTUnVsZURhdGFMaXN0ICosIFBvaW50ZXJIYXNoPERP
TTo6RE9NU3RyaW5nSW1wbCAqPiA+IEF0b21SdWxlTWFwOwogCiAgICAgICAgIHZvaWQgYWRkUnVs
ZXNGcm9tU2hlZXQoRE9NOjpDU1NTdHlsZVNoZWV0SW1wbCogc2hlZXQsIGNvbnN0IERPTTo6RE9N
U3RyaW5nICZtZWRpdW0gPSAic2NyZWVuIik7CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEvZG9t
cGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNt
YS9kb21wYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIg
V2ViQ29yZS9raHRtbC9lY21hL2RvbXBhcnNlci5oCi0tLSBXZWJDb3JlL2todG1sL2VjbWEvZG9t
cGFyc2VyLmgJOCBBdWcgMjAwNSAwNDowNzo0MCAtMDAwMAkxLjIKKysrIFdlYkNvcmUva2h0bWwv
ZWNtYS9kb21wYXJzZXIuaAkyNyBTZXAgMjAwNSAwODo0NToyMCAtMDAwMApAQCAtMzMsNyArMzMs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVj
dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgT2JqZWN0SW1wICpjb25zdHJ1Y3QoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKIHByaXZhdGU6Ci0gICAga2h0bWw6OlNoYXJlZFB0cjxE
T006OkRvY3VtZW50SW1wbD4gZG9jOworICAgIFNoYXJlZFB0cjxET006OkRvY3VtZW50SW1wbD4g
ZG9jOwogICB9OwogCiAgIGNsYXNzIERPTVBhcnNlciA6IHB1YmxpYyBET01PYmplY3QgewpJbmRl
eDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xOQpkaWZmIC1wIC11IC1yMS4xOSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5oCi0tLSBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5oCTggQXVnIDIwMDUgMDQ6MDc6NDAgLTAwMDAJMS4x
OQorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuaAkyNyBTZXAgMjAwNSAwODo0NToyMCAt
MDAwMApAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBzdGF0aWMgVmFsdWVJ
bXAgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIFZhbHVlSW1wICpjc3NQcm9wZXJ0eUdldHRlcihFeGVj
U3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCi0gICAg
a2h0bWw6OlNoYXJlZFB0cjxET006OkNTU1N0eWxlRGVjbGFyYXRpb25JbXBsPiBtX2ltcGw7Cisg
ICAgU2hhcmVkUHRyPERPTTo6Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGw+IG1faW1wbDsKICAgfTsK
IAogICBWYWx1ZUltcCAqZ2V0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbihFeGVjU3RhdGUgKmV4ZWMs
IERPTTo6Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKmQpOwpAQCAtODQsNyArODQsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAvLyBDb25zdHJ1Y3RvciBmb3IgZGVyaXZlZCBjbGFzc2VzOyBkb2Vz
bid0IHNldCB1cCBhIHByb3RvdHlwZS4KICAgICBET01TdHlsZVNoZWV0KERPTTo6U3R5bGVTaGVl
dEltcGwgKnNzKSA6IG1faW1wbChzcykgeyB9CiAgIHByaXZhdGU6Ci0gICAga2h0bWw6OlNoYXJl
ZFB0cjxET006OlN0eWxlU2hlZXRJbXBsPiBtX2ltcGw7CisgICAgU2hhcmVkUHRyPERPTTo6U3R5
bGVTaGVldEltcGw+IG1faW1wbDsKICAgfTsKIAogICBWYWx1ZUltcCAqZ2V0RE9NU3R5bGVTaGVl
dChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6U3R5bGVTaGVldEltcGwgKnNzKTsKQEAgLTEwNiw4ICsx
MDYsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBzdGF0aWMgVmFsdWVJbXAgKmluZGV4R2V0dGVy
KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIFZhbHVlSW1wICpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKLSAgICBraHRtbDo6U2hhcmVkUHRyPERPTTo6
U3R5bGVTaGVldExpc3RJbXBsPiBtX2ltcGw7Ci0gICAga2h0bWw6OlNoYXJlZFB0cjxET006OkRv
Y3VtZW50SW1wbD4gbV9kb2M7CisgICAgU2hhcmVkUHRyPERPTTo6U3R5bGVTaGVldExpc3RJbXBs
PiBtX2ltcGw7CisgICAgU2hhcmVkUHRyPERPTTo6RG9jdW1lbnRJbXBsPiBtX2RvYzsKICAgfTsK
IAogICAvLyBUaGUgZG9jdW1lbnQgaXMgb25seSB1c2VkIGZvciBnZXQtc3R5bGVzaGVldC1ieS1u
YW1lIChtYWtlIG9wdGlvbmFsIGlmIG5lY2Vzc2FyeSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBET006Ok1lZGlhTGlzdEltcGwgKmltcGwoKSBjb25zdCB7IHJldHVy
biBtX2ltcGwuZ2V0KCk7IH0KICAgcHJpdmF0ZToKICAgICBzdGF0aWMgVmFsdWVJbXAgKmluZGV4
R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCk7Ci0gICAga2h0bWw6OlNoYXJlZFB0cjxET006Ok1lZGlhTGlzdEltcGw+IG1f
aW1wbDsKKyAgICBTaGFyZWRQdHI8RE9NOjpNZWRpYUxpc3RJbXBsPiBtX2ltcGw7CiAgIH07CiAK
ICAgVmFsdWVJbXAgKmdldERPTU1lZGlhTGlzdChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6TWVkaWFM
aXN0SW1wbCAqbWwpOwpAQCAtMTU5LDcgKzE1OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwcml2
YXRlOgogICAgIHN0YXRpYyBWYWx1ZUltcCAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKIAotICAgIGtodG1s
OjpTaGFyZWRQdHI8RE9NOjpDU1NSdWxlTGlzdEltcGw+IG1faW1wbDsKKyAgICBTaGFyZWRQdHI8
RE9NOjpDU1NSdWxlTGlzdEltcGw+IG1faW1wbDsKICAgfTsKIAogICBWYWx1ZUltcCAqZ2V0RE9N
Q1NTUnVsZUxpc3QoRXhlY1N0YXRlICpleGVjLCBET006OkNTU1J1bGVMaXN0SW1wbCAqcmwpOwpA
QCAtMTgxLDcgKzE4MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgICBJbXBvcnRfSHJl
ZiwgSW1wb3J0X01lZGlhLCBJbXBvcnRfU3R5bGVTaGVldCwgQ2hhcnNldF9FbmNvZGluZyB9Owog
ICAgIERPTTo6Q1NTUnVsZUltcGwgKmltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7
IH0KICAgcHJpdmF0ZToKLSAgICBraHRtbDo6U2hhcmVkUHRyPERPTTo6Q1NTUnVsZUltcGw+IG1f
aW1wbDsKKyAgICBTaGFyZWRQdHI8RE9NOjpDU1NSdWxlSW1wbD4gbV9pbXBsOwogICB9OwogCiAg
IFZhbHVlSW1wICpnZXRET01DU1NSdWxlKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpDU1NSdWxlSW1w
bCAqcik7CkBAIC0yMTUsNyArMjE1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgLy8gQ29uc3Ry
dWN0b3IgZm9yIGRlcml2ZWQgY2xhc3NlczsgZG9lc24ndCBzZXQgdXAgYSBwcm90b3R5cGUuCiAg
ICAgRE9NQ1NTVmFsdWUoRE9NOjpDU1NWYWx1ZUltcGwgKnYpIDogbV9pbXBsKHYpIHsgfQogICBw
cml2YXRlOgotICAgIGtodG1sOjpTaGFyZWRQdHI8RE9NOjpDU1NWYWx1ZUltcGw+IG1faW1wbDsK
KyAgICBTaGFyZWRQdHI8RE9NOjpDU1NWYWx1ZUltcGw+IG1faW1wbDsKICAgfTsKIAogICBWYWx1
ZUltcCAqZ2V0RE9NQ1NTVmFsdWUoRXhlY1N0YXRlICpleGVjLCBET006OkNTU1ZhbHVlSW1wbCAq
dik7CkBAIC0yOTksNyArMjk5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBpbmZvOwogICAgIGVudW0geyBUb3AsIFJpZ2h0LCBCb3R0b20sIExlZnQgfTsK
ICAgcHJpdmF0ZToKLSAgICBraHRtbDo6U2hhcmVkUHRyPERPTTo6UmVjdEltcGw+IG1fcmVjdDsK
KyAgICBTaGFyZWRQdHI8RE9NOjpSZWN0SW1wbD4gbV9yZWN0OwogICB9OwogCiAgIFZhbHVlSW1w
ICpnZXRET01SZWN0KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpSZWN0SW1wbCAqcik7CkBAIC0zMTUs
NyArMzE1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBp
bmZvOwogICAgIGVudW0geyBpZGVudGlmaWVyLCBsaXN0U3R5bGUsIHNlcGFyYXRvciB9OwogICBw
cm90ZWN0ZWQ6Ci0gICAga2h0bWw6OlNoYXJlZFB0cjxET006OkNvdW50ZXJJbXBsPiBtX2NvdW50
ZXI7CisgICAgU2hhcmVkUHRyPERPTTo6Q291bnRlckltcGw+IG1fY291bnRlcjsKICAgfTsKIAog
ICBWYWx1ZUltcCAqZ2V0RE9NQ291bnRlcihFeGVjU3RhdGUgKmV4ZWMsIERPTTo6Q291bnRlcklt
cGwgKmMpOwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuOTcKZGlmZiAtcCAtdSAtcjEuOTcgV2ViQ29yZS9raHRtbC9lY21h
L2tqc19kb20uY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAJMjIgU2VwIDIw
MDUgMTk6MTk6NTYgLTAwMDAJMS45NworKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3Bw
CTI3IFNlcCAyMDA1IDA4OjQ1OjIxIC0wMDAwCkBAIC04MCw3ICs4MCw2IEBAIHVzaW5nIERPTTo6
UHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7CiAKIHVzaW5n
IGtodG1sOjpSZW5kZXJPYmplY3Q7Ci11c2luZyBraHRtbDo6U2hhcmVkUHRyOwogCiAjaW5jbHVk
ZSAia2pzX2RvbS5sdXQuaCIKIApJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20u
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40OQpkaWZmIC1wIC11IC1yMS40OSBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX2RvbS5oCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5oCTMxIEF1
ZyAyMDA1IDA0OjM4OjM2IC0wMDAwCTEuNDkKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9t
LmgJMjcgU2VwIDIwMDUgMDg6NDU6MjEgLTAwMDAKQEAgLTgyLDcgKzgyLDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgIHByb3RlY3RlZDoKICAgICAvLyBDb25zdHJ1Y3RvciBmb3IgaW5oZXJpdGVkIGNs
YXNzZXM7IGRvZXNuJ3Qgc2V0IHVwIGEgcHJvdG90eXBlLgogICAgIERPTU5vZGUoRE9NOjpOb2Rl
SW1wbCAqbik7Ci0gICAga2h0bWw6OlNoYXJlZFB0cjxET006Ok5vZGVJbXBsPiBtX2ltcGw7Cisg
ICAgU2hhcmVkUHRyPERPTTo6Tm9kZUltcGw+IG1faW1wbDsKICAgfTsKIAogICBET006Ok5vZGVJ
bXBsICp0b05vZGUoVmFsdWVJbXAgKik7IC8vIHJldHVybnMgMCBpZiBwYXNzZWQtaW4gdmFsdWUg
aXMgbm90IGEgRE9NTm9kZSBvYmplY3QKQEAgLTEwOCw3ICsxMDgsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICBzdGF0aWMgVmFsdWVJbXAgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CiAgICAgc3RhdGljIFZh
bHVlSW1wICpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CiAKLSAgICBraHRtbDo6U2hhcmVkUHRyPERPTTo6Tm9k
ZUxpc3RJbXBsPiBtX2ltcGw7CisgICAgU2hhcmVkUHRyPERPTTo6Tm9kZUxpc3RJbXBsPiBtX2lt
cGw7CiAgIH07CiAKICAgY2xhc3MgRE9NRG9jdW1lbnQgOiBwdWJsaWMgRE9NTm9kZSB7CkBAIC0x
ODcsNyArMTg3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgZW51bSB7IEhhc0ZlYXR1cmUsIENy
ZWF0ZURvY3VtZW50VHlwZSwgQ3JlYXRlRG9jdW1lbnQsIENyZWF0ZUNTU1N0eWxlU2hlZXQsIENy
ZWF0ZUhUTUxEb2N1bWVudCB9OwogICAgIERPTTo6RE9NSW1wbGVtZW50YXRpb25JbXBsICppbXBs
KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAgIHByaXZhdGU6Ci0gICAga2h0bWw6
OlNoYXJlZFB0cjxET006OkRPTUltcGxlbWVudGF0aW9uSW1wbD4gbV9pbXBsOworICAgIFNoYXJl
ZFB0cjxET006OkRPTUltcGxlbWVudGF0aW9uSW1wbD4gbV9pbXBsOwogICB9OwogCiAgIGNsYXNz
IERPTURvY3VtZW50VHlwZSA6IHB1YmxpYyBET01Ob2RlIHsKQEAgLTIxOSw3ICsyMTksNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICBzdGF0aWMgVmFsdWVJbXAgKmxlbmd0aEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwog
ICAgIHN0YXRpYyBWYWx1ZUltcCAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKIAotICAgIGtodG1sOjpTaGFy
ZWRQdHI8RE9NOjpOYW1lZE5vZGVNYXBJbXBsPiBtX2ltcGw7CisgICAgU2hhcmVkUHRyPERPTTo6
TmFtZWROb2RlTWFwSW1wbD4gbV9pbXBsOwogICB9OwogCiAgIGNsYXNzIERPTVByb2Nlc3NpbmdJ
bnN0cnVjdGlvbiA6IHB1YmxpYyBET01Ob2RlIHsKQEAgLTI5MSwxMyArMjkxLDEzIEBAIG5hbWVz
cGFjZSBLSlMgewogICAvLyB3aGVuIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUgbmFtZS4K
ICAgY2xhc3MgRE9NTmFtZWROb2Rlc0NvbGxlY3Rpb24gOiBwdWJsaWMgRE9NT2JqZWN0IHsKICAg
cHVibGljOgotICAgIERPTU5hbWVkTm9kZXNDb2xsZWN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgUVZhbHVlTGlzdDwga2h0bWw6OlNoYXJlZFB0cjxET006Ok5vZGVJbXBsPiA+JiBub2RlcyAp
OworICAgIERPTU5hbWVkTm9kZXNDb2xsZWN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgUVZh
bHVlTGlzdDwgU2hhcmVkUHRyPERPTTo6Tm9kZUltcGw+ID4mIG5vZGVzICk7CiAgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5U2xvdCYpOwogICBwcml2YXRlOgogICAgIHN0YXRpYyBWYWx1ZUltcCAqbGVuZ3Ro
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCk7CiAgICAgc3RhdGljIFZhbHVlSW1wICppbmRleEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogCi0g
ICAgUVZhbHVlTGlzdDwga2h0bWw6OlNoYXJlZFB0cjxET006Ok5vZGVJbXBsPiA+IG1fbm9kZXM7
CisgICAgUVZhbHVlTGlzdDwgU2hhcmVkUHRyPERPTTo6Tm9kZUltcGw+ID4gbV9ub2RlczsKICAg
fTsKIAogICBjbGFzcyBET01DaGFyYWN0ZXJEYXRhIDogcHVibGljIERPTU5vZGUgewpJbmRleDog
V2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zMwpkaWZmIC1wIC11IC1yMS4zMyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5o
Ci0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5oCTE5IFNlcCAyMDA1IDE4OjUyOjEw
IC0wMDAwCTEuMzMKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZXZlbnRzLmgJMjcgU2VwIDIw
MDUgMDg6NDU6MjEgLTAwMDAKQEAgLTEyNyw3ICsxMjcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAkg
ICBTcmNFbGVtZW50LCBSZXR1cm5WYWx1ZSwgQ2FuY2VsQnViYmxlLCBDbGlwYm9hcmREYXRhLCBE
YXRhVHJhbnNmZXIgfTsKICAgICBET006OkV2ZW50SW1wbCAqaW1wbCgpIGNvbnN0IHsgcmV0dXJu
IG1faW1wbC5nZXQoKTsgfQogICBwcm90ZWN0ZWQ6Ci0gICAga2h0bWw6OlNoYXJlZFB0cjxET006
OkV2ZW50SW1wbD4gbV9pbXBsOworICAgIFNoYXJlZFB0cjxET006OkV2ZW50SW1wbD4gbV9pbXBs
OwogICAgIG11dGFibGUgQ2xpcGJvYXJkICpjbGlwYm9hcmQ7CiAgIH07CiAKSW5kZXg6IFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MTM5CmRpZmYgLXAgLXUgLXIxLjEzOSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCi0t
LSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCTE2IFNlcCAyMDA1IDIyOjQyOjA1IC0w
MDAwCTEuMTM5CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCTI3IFNlcCAyMDA1
IDA4OjQ1OjI0IC0wMDAwCkBAIC0xMzQsNyArMTM0LDYgQEAgdXNpbmcgRE9NOjpOb2RlTGlzdElt
cGw7CiB1c2luZyBET006OlRleHRJbXBsOwogCiB1c2luZyBraHRtbDo6UmVuZGVyQ2FudmFzSW1h
Z2U7Ci11c2luZyBraHRtbDo6U2hhcmVkUHRyOwogCiAjaW5jbHVkZSAia2pzX2h0bWwubHV0Lmgi
CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS41NQpkaWZmIC1wIC11IC1yMS41NSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0
bWwuaAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmgJOCBBdWcgMjAwNSAwNDowNzo0
MSAtMDAwMAkxLjU1CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuaAkyNyBTZXAgMjAw
NSAwODo0NToyNCAtMDAwMApAQCAtMzE0LDcgKzMxNCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBET006OkhUTUxDb2xsZWN0aW9uSW1w
bCAqaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQogICBwcm90ZWN0ZWQ6Ci0g
ICAga2h0bWw6OlNoYXJlZFB0cjxET006OkhUTUxDb2xsZWN0aW9uSW1wbD4gbV9pbXBsOworICAg
IFNoYXJlZFB0cjxET006OkhUTUxDb2xsZWN0aW9uSW1wbD4gbV9pbXBsOwogICBwcml2YXRlOgog
ICAgIHN0YXRpYyBWYWx1ZUltcCAqbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CiAgICAgc3RhdGljIFZhbHVl
SW1wICppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwpAQCAtMzI5LDcgKzMyOSw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICBwcml2YXRlOgogICAgIHN0YXRpYyBWYWx1ZUltcCAqc2VsZWN0ZWRJbmRleEdldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpOwogCi0gICAga2h0bWw6OlNoYXJlZFB0cjxET006OkhUTUxTZWxlY3RFbGVtZW50SW1wbD4g
bV9lbGVtZW50OworICAgIFNoYXJlZFB0cjxET006OkhUTUxTZWxlY3RFbGVtZW50SW1wbD4gbV9l
bGVtZW50OwogICB9OwogCiAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gT3B0aW9uIE9iamVjdCAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTM0MCw3ICszNDAsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgT2JqZWN0SW1wICpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZh
cmdzKTsKICAgcHJpdmF0ZToKLSAgICBraHRtbDo6U2hhcmVkUHRyPERPTTo6RG9jdW1lbnRJbXBs
PiBtX2RvYzsKKyAgICBTaGFyZWRQdHI8RE9NOjpEb2N1bWVudEltcGw+IG1fZG9jOwogICB9Owog
CiAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gSW1hZ2UgT2JqZWN0IC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwpAQCAtMzUxLDcgKzM1MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwg
Ym9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBPYmplY3RJbXAg
KmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOwogICBwcml2YXRl
OgotICAgIGtodG1sOjpTaGFyZWRQdHI8RE9NOjpEb2N1bWVudEltcGw+IG1fZG9jOworICAgIFNo
YXJlZFB0cjxET006OkRvY3VtZW50SW1wbD4gbV9kb2M7CiAgIH07CiAKICAgY2xhc3MgSW1hZ2Ug
OiBwdWJsaWMgRE9NT2JqZWN0LCBwdWJsaWMga2h0bWw6OkNhY2hlZE9iamVjdENsaWVudCB7CkBA
IC00NDAsNyArNDQwLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHNldFNoYWRvdyhFeGVj
U3RhdGUgKmV4ZWMpOwogCi0gICAga2h0bWw6OlNoYXJlZFB0cjxET006OkhUTUxFbGVtZW50SW1w
bD4gX2VsZW1lbnQ7CisgICAgU2hhcmVkUHRyPERPTTo6SFRNTEVsZW1lbnRJbXBsPiBfZWxlbWVu
dDsKICAgICBib29sIF9uZWVkc0ZsdXNoUmFzdGVyQ2FjaGU7CiAgICAgCiAgICAgUVB0ckxpc3Q8
TGlzdD4gc3RhdGVTdGFjazsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcmFuZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19yYW5n
ZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtcCAtdSAtcjEuOSBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX3JhbmdlLmgKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcmFuZ2UuaAk4
IEF1ZyAyMDA1IDA0OjA3OjQxIC0wMDAwCTEuOQorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19y
YW5nZS5oCTI3IFNlcCAyMDA1IDA4OjQ1OjI0IC0wMDAwCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAgICAgICBEZXRhY2gsIENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCB9
OwogICAgIERPTTo6UmFuZ2VJbXBsICppbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgp
OyB9CiAgIHByaXZhdGU6Ci0gICAga2h0bWw6OlNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4gbV9p
bXBsOworICAgIFNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4gbV9pbXBsOwogfTsKIAogICAvLyBD
b25zdHJ1Y3RvciBvYmplY3QgUmFuZ2UKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdHJh
dmVyc2FsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNt
YS9ranNfdHJhdmVyc2FsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtcCAtdSAt
cjEuMTEgV2ViQ29yZS9raHRtbC9lY21hL2tqc190cmF2ZXJzYWwuaAotLS0gV2ViQ29yZS9raHRt
bC9lY21hL2tqc190cmF2ZXJzYWwuaAkxOSBTZXAgMjAwNSAxODo1MjoxMSAtMDAwMAkxLjExCisr
KyBXZWJDb3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5oCTI3IFNlcCAyMDA1IDA4OjQ1OjI1
IC0wMDAwCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgICBOZXh0
Tm9kZSwgUHJldmlvdXNOb2RlLCBEZXRhY2ggfTsKICAgICBET006Ok5vZGVJdGVyYXRvckltcGwg
KmltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KICAgcHJpdmF0ZToKLSAgICBr
aHRtbDo6U2hhcmVkUHRyPERPTTo6Tm9kZUl0ZXJhdG9ySW1wbD4gbV9pbXBsOworICAgIFNoYXJl
ZFB0cjxET006Ok5vZGVJdGVyYXRvckltcGw+IG1faW1wbDsKICAgfTsKIAogICAvLyBDb25zdHJ1
Y3RvciBvYmplY3QgTm9kZUZpbHRlcgpAQCAtNzAsNyArNzAsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBET006Ok5vZGVGaWx0ZXJJbXBsICppbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdl
dCgpOyB9CiAgICAgZW51bSB7IEFjY2VwdE5vZGUgfTsKICAgcHJpdmF0ZToKLSAgICBraHRtbDo6
U2hhcmVkUHRyPERPTTo6Tm9kZUZpbHRlckltcGw+IG1faW1wbDsKKyAgICBTaGFyZWRQdHI8RE9N
OjpOb2RlRmlsdGVySW1wbD4gbV9pbXBsOwogICB9OwogCiAgIGNsYXNzIERPTVRyZWVXYWxrZXIg
OiBwdWJsaWMgRE9NT2JqZWN0IHsKQEAgLTg3LDcgKzg3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgICAgICAgIFByZXZpb3VzTm9kZSwgTmV4dE5vZGUgfTsKICAgICBET006OlRyZWVXYWxrZXJJ
bXBsICppbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAgIHByaXZhdGU6Ci0g
ICAga2h0bWw6OlNoYXJlZFB0cjxET006OlRyZWVXYWxrZXJJbXBsPiBtX2ltcGw7CisgICAgU2hh
cmVkUHRyPERPTTo6VHJlZVdhbGtlckltcGw+IG1faW1wbDsKICAgfTsKIAogICBWYWx1ZUltcCAq
Z2V0RE9NTm9kZUl0ZXJhdG9yKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpOb2RlSXRlcmF0b3JJbXBs
ICpuaSk7CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc192aWV3cy5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtcCAtdSAtcjEuMTIgV2ViQ29yZS9raHRtbC9l
Y21hL2tqc192aWV3cy5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdmlld3MuY3BwCTI5
IEF1ZyAyMDA1IDIxOjI5OjEzIC0wMDAwCTEuMTIKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNf
dmlld3MuY3BwCTI3IFNlcCAyMDA1IDA4OjQ1OjI1IC0wMDAwCkBAIC0zMiw3ICszMiw2IEBAIHVz
aW5nIERPTTo6RG9jdW1lbnRJbXBsOwogdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKIHVzaW5nIERP
TTo6Tm9kZUltcGw7CiAKLXVzaW5nIGtodG1sOjpTaGFyZWRQdHI7CiAKICNpbmNsdWRlICJranNf
dmlld3MubHV0LmgiCiAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdmlld3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc192aWV3cy5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEuOCBXZWJDb3JlL2todG1s
L2VjbWEva2pzX3ZpZXdzLmgKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdmlld3MuaAk4IEF1
ZyAyMDA1IDA0OjA3OjQxIC0wMDAwCTEuOAorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc192aWV3
cy5oCTI3IFNlcCAyMDA1IDA4OjQ1OjI1IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIERPTTo6QWJzdHJhY3RWaWV3SW1wbCAqaW1wbCgpIGNvbnN0IHsgcmV0dXJu
IG1faW1wbC5nZXQoKTsgfQogICAgIGVudW0geyBEb2N1bWVudCwgR2V0Q29tcHV0ZWRTdHlsZSB9
OwogICBwcml2YXRlOgotICAgIGtodG1sOjpTaGFyZWRQdHI8RE9NOjpBYnN0cmFjdFZpZXdJbXBs
PiBtX2ltcGw7CisgICAgU2hhcmVkUHRyPERPTTo6QWJzdHJhY3RWaWV3SW1wbD4gbV9pbXBsOwog
ICB9OwogCiAgIFZhbHVlSW1wICpnZXRET01BYnN0cmFjdFZpZXcoRXhlY1N0YXRlICpleGVjLCBE
T006OkFic3RyYWN0Vmlld0ltcGwgKmF2KTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNf
d2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9l
Y21hL2tqc193aW5kb3cuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4MApkaWZmIC1wIC11
IC1yMS4xODAgV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwCi0tLSBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX3dpbmRvdy5jcHAJMjQgU2VwIDIwMDUgMDE6MTg6NTMgLTAwMDAJMS4xODAK
KysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAkyNyBTZXAgMjAwNSAwODo0NToy
NiAtMDAwMApAQCAtOTAsNyArOTAsNiBAQCB1c2luZyBET006OkhUTUxFbGVtZW50SW1wbDsKIHVz
aW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogCi11c2luZyBraHRtbDo6
U2hhcmVkUHRyOwogdXNpbmcga2h0bWw6OlR5cGluZ0NvbW1hbmQ7CiAKIHVzaW5nIEtQYXJ0czo6
UmVhZE9ubHlQYXJ0OwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS94bWxodHRw
cmVxdWVzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXAgLXUgLXIxLjE5IFdl
YkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5oCi0tLSBXZWJDb3JlL2todG1sL2VjbWEv
eG1saHR0cHJlcXVlc3QuaAkyMyBBdWcgMjAwNSAxNjo0NToxMiAtMDAwMAkxLjE5CisrKyBXZWJD
b3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVlc3QuaAkyNyBTZXAgMjAwNSAwODo0NToyNiAtMDAw
MApAQCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIGJvb2wgaW1w
bGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgT2JqZWN0SW1wICpjb25zdHJ1
Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKICAgcHJpdmF0ZToKLSAgICBr
aHRtbDo6U2hhcmVkUHRyPERPTTo6RG9jdW1lbnRJbXBsPiBkb2M7CisgICAgU2hhcmVkUHRyPERP
TTo6RG9jdW1lbnRJbXBsPiBkb2M7CiAgIH07CiAKICAgY2xhc3MgWE1MSHR0cFJlcXVlc3QgOiBw
dWJsaWMgRE9NT2JqZWN0IHsKQEAgLTEyNSw4ICsxMjUsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICBLSU86OlRyYW5zZmVySm9iICogam9iOwogCiAgICAgWE1MSHR0cFJlcXVlc3RTdGF0ZSBzdGF0
ZTsKLSAgICBraHRtbDo6U2hhcmVkUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyPiBvblJl
YWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcjsKLSAgICBraHRtbDo6U2hhcmVkUHRyPEpTVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVyPiBvbkxvYWRMaXN0ZW5lcjsKKyAgICBTaGFyZWRQdHI8SlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXI+IG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyOworICAgIFNoYXJl
ZFB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gb25Mb2FkTGlzdGVuZXI7CiAKICAgICBr
aHRtbDo6RGVjb2RlciAqZGVjb2RlcjsKICAgICBRU3RyaW5nIGVuY29kaW5nOwpAQCAtMTM2LDcg
KzEzNiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFFTdHJpbmcgcmVzcG9uc2U7CiAgICAgbXV0
YWJsZSBib29sIGNyZWF0ZWREb2N1bWVudDsKICAgICBtdXRhYmxlIGJvb2wgdHlwZUlzWE1MOwot
ICAgIG11dGFibGUga2h0bWw6OlNoYXJlZFB0cjxET006OkRvY3VtZW50SW1wbD4gcmVzcG9uc2VY
TUw7CisgICAgbXV0YWJsZSBTaGFyZWRQdHI8RE9NOjpEb2N1bWVudEltcGw+IHJlc3BvbnNlWE1M
OwogCiAgICAgYm9vbCBhYm9ydGVkOwogICB9OwpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuOTUKZGlmZiAtcCAtdSAtcjEuOTUgV2ViQ29yZS9raHRtbC9lZGl0aW5nL1Nl
bGVjdGlvbkNvbnRyb2xsZXIuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvU2VsZWN0aW9u
Q29udHJvbGxlci5jcHAJMjQgU2VwIDIwMDUgMDY6Mjk6MDcgLTAwMDAJMS45NQorKysgV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCTI3IFNlcCAyMDA1IDA4OjQ1
OjI2IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbTJfcmFuZ2VpbXBs
LmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2lu
Y2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3Nl
cnRpb24pIGFzc2VydChhc3NlcnRpb24pCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRp
dGluZy9hcHBlbmRfbm9kZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGVuZF9ub2RlX2NvbW1hbmQuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBXZWJDb3JlL2todG1sL2VkaXRpbmcv
YXBwZW5kX25vZGVfY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9hcHBlbmRf
bm9kZV9jb21tYW5kLmNwcAkxMiBNYXkgMjAwNSAwNDowMDoxOSAtMDAwMAkxLjEKKysrIFdlYkNv
cmUva2h0bWwvZWRpdGluZy9hcHBlbmRfbm9kZV9jb21tYW5kLmNwcAkyNyBTZXAgMjAwNSAwODo0
NToyNiAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwu
aCIKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgiCisjaW5j
bHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFzc2Vy
dGlvbikgYXNzZXJ0KGFzc2VydGlvbikKICNlbmRpZgpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0
aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtcCAtdSAtcjEuMTQgV2ViQ29yZS9raHRtbC9lZGl0aW5n
L2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvYXBwbHlf
c3R5bGVfY29tbWFuZC5jcHAJMjQgU2VwIDIwMDUgMDE6MTg6NTQgLTAwMDAJMS4xNAorKysgV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1IDA4
OjQ1OjI3IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbTJfcmFuZ2Vp
bXBsLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgor
I2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNlbHNlCiAjZGVmaW5lIEFTU0VSVChh
c3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5k
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXAgLXUgLXIxLjcgV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0
bWwvZWRpdGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwCTI0IFNlcCAyMDA1IDAxOjE4
OjU1IC0wMDAwCTEuNworKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVf
Y29tbWFuZC5jcHAJMjcgU2VwIDIwMDUgMDg6NDU6MjcgLTAwMDAKQEAgLTMzLDcgKzMzLDcgQEAK
ICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5j
bHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4K
ICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCiAjZW5k
aWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2Nv
bXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYg
LXAgLXUgLXIxLjEyIFdlYkNvcmUva2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5k
LmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3Bw
CTI0IFNlcCAyMDA1IDAxOjE4OjU1IC0wMDAwCTEuMTIKKysrIFdlYkNvcmUva2h0bWwvZWRpdGlu
Zy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAkyNyBTZXAgMjAwNSAwODo0NToyNyAtMDAwMApA
QCAtNTIsNyArNTIsNyBAQAogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKIAogI2lmIEFQ
UExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNv
cmUvQXNzZXJ0aW9ucy5oPgogI2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0
KGFzc2VydGlvbikKICNlbmRpZgpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9m
cm9tX3RleHRfbm9kZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21tYW5kLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIgV2ViQ29yZS9raHRtbC9l
ZGl0aW5nL2RlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21tYW5kLmNwcAotLS0gV2ViQ29yZS9raHRt
bC9lZGl0aW5nL2RlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21tYW5kLmNwcAkxNiBTZXAgMjAwNSAy
Mjo0MjowNiAtMDAwMAkxLjIKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVfZnJvbV90
ZXh0X25vZGVfY29tbWFuZC5jcHAJMjcgU2VwIDIwMDUgMDg6NDU6MjcgLTAwMDAKQEAgLTI4LDcg
KzI4LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAKICNpZiBBUFBMRV9DSEFO
R0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2Vy
dGlvbnMuaD4KICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRp
b24pCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9u
X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xNwpkaWZmIC1wIC11IC1yMS4xNyBXZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX3Nl
bGVjdGlvbl9jb21tYW5kLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxl
Y3Rpb25fY29tbWFuZC5jcHAJMjQgU2VwIDIwMDUgMDE6MTg6NTUgLTAwMDAJMS4xNworKysgV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMjcgU2VwIDIw
MDUgMDg6NDU6MjggLTAwMDAKQEAgLTM5LDcgKzM5LDcgQEAKIAogCiAjaWYgQVBQTEVfQ0hBTkdF
UwotI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRp
b25zLmg+CiAjaW5jbHVkZSAiS1dRTG9nZ2luZy5oIgogI2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFz
c2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9l
ZGl0X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2VkaXRpbmcvZWRpdF9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRp
ZmYgLXAgLXUgLXIxLjcgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2VkaXRfY29tbWFuZC5jcHAKLS0t
IFdlYkNvcmUva2h0bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQuY3BwCTI0IFNlcCAyMDA1IDAxOjE4
OjU1IC0wMDAwCTEuNworKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2VkaXRfY29tbWFuZC5jcHAJ
MjcgU2VwIDIwMDUgMDg6NDU6MjggLTAwMDAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJj
c3MvY3NzX2NvbXB1dGVkc3R5bGUuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRlICJL
V1FBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2Vsc2UK
ICNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKICNlbmRpZgpJbmRl
eDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4yNTcKZGlmZiAtcCAtdSAtcjEuMjU3IFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9odG1sZWRp
dGluZy5jcHAJMjUgQXVnIDIwMDUgMjM6MTM6NDQgLTAwMDAJMS4yNTcKKysrIFdlYkNvcmUva2h0
bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJMjcgU2VwIDIwMDUgMDg6NDU6MjggLTAwMDAKQEAg
LTg0LDcgKzg0LDcgQEAgdXNpbmcgRE9NOjpUZXh0SW1wbDsKIHVzaW5nIERPTTo6VHJlZVdhbGtl
ckltcGw7CiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgor
I2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlICJLV1FMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiS1dRS0hUTUxQYXJ0LmgiCiAjZWxzZQpJbmRleDogV2ViQ29yZS9raHRtbC9l
ZGl0aW5nL2luc2VydF9pbnRvX3RleHRfbm9kZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9pbnRvX3RleHRfbm9k
ZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIg
V2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9pbnRvX3RleHRfbm9kZV9jb21tYW5kLmNwcAot
LS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9pbnRvX3RleHRfbm9kZV9jb21tYW5kLmNw
cAkxNiBTZXAgMjAwNSAyMjo0MjowNiAtMDAwMAkxLjIKKysrIFdlYkNvcmUva2h0bWwvZWRpdGlu
Zy9pbnNlcnRfaW50b190ZXh0X25vZGVfY29tbWFuZC5jcHAJMjcgU2VwIDIwMDUgMDg6NDU6Mjgg
LTAwMDAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAK
ICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUg
PGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24p
IGFzc2VydChhc3NlcnRpb24pCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9p
bnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBXZWJDb3JlL2todG1sL2Vk
aXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRp
dGluZy9pbnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcAkyNCBTZXAgMjAwNSAwMToxODo1NiAt
MDAwMAkxLjYKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVha19jb21t
YW5kLmNwcAkyNyBTZXAgMjAwNSAwODo0NToyOCAtMDAwMApAQCAtMzcsNyArMzcsNyBAQAogI2lu
Y2x1ZGUgImtodG1sX3BhcnQuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FB
c3NlcnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUg
IktXUUxvZ2dpbmcuaCIKICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChh
c3NlcnRpb24pCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X25vZGVfYmVmb3Jl
X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VkaXRpbmcvaW5zZXJ0X25vZGVfYmVmb3JlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X25v
ZGVfYmVmb3JlX2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X25v
ZGVfYmVmb3JlX2NvbW1hbmQuY3BwCTEzIE1heSAyMDA1IDA4OjM3OjE1IC0wMDAwCTEuMQorKysg
V2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9ub2RlX2JlZm9yZV9jb21tYW5kLmNwcAkyNyBT
ZXAgMjAwNSAwODo0NToyOCAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgInhtbC9k
b21fbm9kZWltcGwuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRp
b25zLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2Vsc2UKICNkZWZpbmUg
QVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKICNlbmRpZgpJbmRleDogV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0
X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NwpkaWZmIC1wIC11IC1yMS43IFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBo
X3NlcGFyYXRvcl9jb21tYW5kLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9w
YXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCTI0IFNlcCAyMDA1IDAxOjE4OjU2IC0wMDAw
CTEuNworKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9y
X2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1IDA4OjQ1OjI4IC0wMDAwCkBAIC0zNyw3ICszNyw3IEBA
CiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgogCiAjaWYgQVBQTEVfQ0hBTkdFUwotI2lu
Y2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+
CiAjaW5jbHVkZSAiS1dRTG9nZ2luZy5oIgogI2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFzc2VydGlv
bikgYXNzZXJ0KGFzc2VydGlvbikKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRf
dGV4dF9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL2luc2VydF90ZXh0X2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjgKZGlmZiAtcCAtdSAtcjEuOCBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X3RleHRf
Y29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfdGV4dF9jb21tYW5k
LmNwcAkyNCBTZXAgMjAwNSAwMToxODo1NiAtMDAwMAkxLjgKKysrIFdlYkNvcmUva2h0bWwvZWRp
dGluZy9pbnNlcnRfdGV4dF9jb21tYW5kLmNwcAkyNyBTZXAgMjAwNSAwODo0NToyOCAtMDAwMApA
QCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKIAogI2lmIEFQ
UExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNv
cmUvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIktXUUxvZ2dpbmcuaCIKICNlbHNlCiAjZGVmaW5l
IEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCkluZGV4OiBXZWJDb3JlL2todG1s
L2VkaXRpbmcvam9pbl90ZXh0X25vZGVzX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvam9pbl90ZXh0X25vZGVzX2NvbW1hbmQu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvam9pbl90ZXh0X25vZGVzX2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1s
L2VkaXRpbmcvam9pbl90ZXh0X25vZGVzX2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3
IC0wMDAwCTEuMQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2pvaW5fdGV4dF9ub2Rlc19jb21t
YW5kLmNwcAkyNyBTZXAgMjAwNSAwODo0NToyOSAtMDAwMApAQCAtMjksNyArMjksNyBAQAogI2lu
Y2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRl
ICJLV1FBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2Vs
c2UKICNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKICNlbmRpZgpJ
bmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9tYXJrdXAuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjM0CmRpZmYgLXAgLXUgLXIxLjM0IFdlYkNvcmUva2h0bWwvZWRpdGluZy9t
YXJrdXAuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvbWFya3VwLmNwcAkxNiBTZXAgMjAw
NSAyMjo0MjowNyAtMDAwMAkxLjM0CisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvbWFya3VwLmNw
cAkyNyBTZXAgMjAwNSAwODo0NToyOSAtMDAwMApAQCAtNTcsNyArNTcsNyBAQCB1c2luZyBET006
OlJhbmdlSW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7CiAKICNpZiBBUFBMRV9DSEFOR0VTCi0j
aW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMu
aD4KICNpbmNsdWRlICJLV1FMb2dnaW5nLmgiCiAjZWxzZQogI2RlZmluZSBBU1NFUlQoYXNzZXJ0
aW9uKSAoKHZvaWQpMCkKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9tZXJnZV9pZGVudGlj
YWxfZWxlbWVudHNfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWRpdGluZy9tZXJnZV9pZGVudGljYWxfZWxlbWVudHNfY29tbWFuZC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9tZXJnZV9pZGVudGljYWxfZWxlbWVudHNfY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUv
a2h0bWwvZWRpdGluZy9tZXJnZV9pZGVudGljYWxfZWxlbWVudHNfY29tbWFuZC5jcHAJMjQgTWF5
IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvbWVyZ2Vf
aWRlbnRpY2FsX2VsZW1lbnRzX2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1IDA4OjQ1OjI5IC0wMDAw
CkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgogCiAj
aWYgQVBQTEVfQ0hBTkdFUwotI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNpbmNsdWRlIDxr
eG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjZWxzZQogI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBh
c3NlcnQoYXNzZXJ0aW9uKQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvbW92
ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWRpdGluZy9tb3ZlX3NlbGVjdGlvbl9jb21tYW5kLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIxLjMgV2ViQ29yZS9raHRtbC9lZGl0aW5nL21v
dmVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvbW92ZV9z
ZWxlY3Rpb25fY29tbWFuZC5jcHAJMjQgU2VwIDIwMDUgMDE6MTg6NTcgLTAwMDAJMS4zCisrKyBX
ZWJDb3JlL2todG1sL2VkaXRpbmcvbW92ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMjcgU2VwIDIw
MDUgMDg6NDU6MjkgLTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX2Rv
Y2ltcGwuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgi
CisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2Vsc2UKICNkZWZpbmUgQVNTRVJU
KGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKICNlbmRpZgpJbmRleDogV2ViQ29yZS9raHRt
bC9lZGl0aW5nL3JlYmFsYW5jZV93aGl0ZXNwYWNlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmViYWxhbmNlX3doaXRlc3Bh
Y2VfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4y
IFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFjZV9jb21tYW5kLmNwcAot
LS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlYmFsYW5jZV93aGl0ZXNwYWNlX2NvbW1hbmQuY3Bw
CTE2IFNlcCAyMDA1IDIyOjQyOjA3IC0wMDAwCTEuMgorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5n
L3JlYmFsYW5jZV93aGl0ZXNwYWNlX2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1IDA4OjQ1OjI5IC0w
MDAwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgogCiAj
aWYgQVBQTEVfQ0hBTkdFUwotI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNpbmNsdWRlIDxr
eG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjZWxzZQogI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBh
c3NlcnQoYXNzZXJ0aW9uKQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvcmVt
b3ZlX2Nzc19wcm9wZXJ0eV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92ZV9jc3NfcHJvcGVydHlfY29tbWFuZC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9yZW1vdmVfY3NzX3Byb3BlcnR5X2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1s
L2VkaXRpbmcvcmVtb3ZlX2Nzc19wcm9wZXJ0eV9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoy
MTo0NyAtMDAwMAkxLjEKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfY3NzX3Byb3Bl
cnR5X2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1IDA4OjQ1OjI5IC0wMDAwCkBAIC0yOCw3ICsyOCw3
IEBACiAjaW5jbHVkZSAiY3NzL2Nzc192YWx1ZWltcGwuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMK
LSNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9u
cy5oPgogI2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikK
ICNlbmRpZgpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92ZV9ub2RlX2F0dHJpYnV0
ZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lZGl0aW5nL3JlbW92ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIxLjMgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92
ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Jl
bW92ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNwcAkyOSBBdWcgMjAwNSAyMToyOToxNSAtMDAw
MAkxLjMKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29t
bWFuZC5jcHAJMjcgU2VwIDIwMDUgMDg6NDU6MjkgLTAwMDAKQEAgLTI4LDcgKzI4LDcgQEAKICNp
bmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5j
bHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4K
ICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCiAjZW5k
aWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9jb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92
ZV9ub2RlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBXZWJDb3JlL2todG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfY29tbWFuZC5jcHAKLS0tIFdl
YkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAw
NzoyMTo0NyAtMDAwMAkxLjEKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9j
b21tYW5kLmNwcAkyNyBTZXAgMjAwNSAwODo0NToyOSAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAog
I2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNs
dWRlICJLV1FBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgog
I2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92ZV9ub2RlX3ByZXNlcnZpbmdfY2hp
bGRyZW5fY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2NvbW1hbmQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBXZWJDb3JlL2todG1s
L2VkaXRpbmcvcmVtb3ZlX25vZGVfcHJlc2VydmluZ19jaGlsZHJlbl9jb21tYW5kLmNwcAotLS0g
V2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92ZV9ub2RlX3ByZXNlcnZpbmdfY2hpbGRyZW5fY29t
bWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBXZWJDb3JlL2todG1s
L2VkaXRpbmcvcmVtb3ZlX25vZGVfcHJlc2VydmluZ19jaGlsZHJlbl9jb21tYW5kLmNwcAkyNyBT
ZXAgMjAwNSAwODo0NToyOSAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgInhtbC9k
b21fbm9kZWltcGwuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRp
b25zLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2Vsc2UKICNkZWZpbmUg
QVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKICNlbmRpZgpJbmRleDogV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rp
b25fY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtcCAtdSAtcjEu
MTUgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0t
LSBXZWJDb3JlL2todG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMjQg
U2VwIDIwMDUgMDE6MTg6NTcgLTAwMDAJMS4xNQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Jl
cGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1IDA4OjQ1OjMwIC0wMDAwCkBA
IC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAiY3NzL2Nzc3Byb3BlcnRpZXMuaCIKIAogI2lmIEFQ
UExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNv
cmUvQXNzZXJ0aW9ucy5oPgogI2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0
KGFzc2VydGlvbikKICNlbmRpZgpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NldF9ub2Rl
X2F0dHJpYnV0ZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL3NldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIxLjMgV2ViQ29yZS9raHRtbC9lZGl0aW5n
L3NldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5n
L3NldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNwcAkyOSBBdWcgMjAwNSAyMToyOToxNSAtMDAw
MAkxLjMKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zZXRfbm9kZV9hdHRyaWJ1dGVfY29tbWFu
ZC5jcHAJMjcgU2VwIDIwMDUgMDg6NDU6MzAgLTAwMDAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNs
dWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCi0jaW5jbHVk
ZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNl
bHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCiAjZW5kaWYK
SW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9zcGxpdF9lbGVtZW50X2NvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvc3BsaXRf
ZWxlbWVudF9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X2VsZW1lbnRfY29tbWFuZC5jcHAKLS0t
IFdlYkNvcmUva2h0bWwvZWRpdGluZy9zcGxpdF9lbGVtZW50X2NvbW1hbmQuY3BwCTI0IE1heSAy
MDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X2Vs
ZW1lbnRfY29tbWFuZC5jcHAJMjcgU2VwIDIwMDUgMDg6NDU6MzAgLTAwMDAKQEAgLTI4LDcgKzI4
LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAKICNpZiBBUFBMRV9DSEFO
R0VTCi0jaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2Vy
dGlvbnMuaD4KICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRp
b24pCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25vZGVf
Y29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWRpdGluZy9zcGxpdF90ZXh0X25vZGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMwpkaWZmIC1wIC11IC1yMS4zIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25v
ZGVfY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25vZGVf
Y29tbWFuZC5jcHAJMTYgU2VwIDIwMDUgMjI6NDI6MDcgLTAwMDAJMS4zCisrKyBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbW1hbmQuY3BwCTI3IFNlcCAyMDA1IDA4OjQ1
OjMwIC0wMDAwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5o
IgogCiAjaWYgQVBQTEVfQ0hBTkdFUwotI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNpbmNs
dWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjZWxzZQogI2RlZmluZSBBU1NFUlQoYXNzZXJ0
aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRp
bmcvc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25vZGVfY29u
dGFpbmluZ19lbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUg
LXIxLjIgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2Vs
ZW1lbnQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbnRh
aW5pbmdfZWxlbWVudC5jcHAJMTYgU2VwIDIwMDUgMjI6NDI6MDcgLTAwMDAJMS4yCisrKyBXZWJD
b3JlL2todG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudC5jcHAJ
MjcgU2VwIDIwMDUgMDg6NDU6MzAgLTAwMDAKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJy
ZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogCiAjaWYgQVBQTEVfQ0hBTkdFUwotI2luY2x1ZGUg
IktXUUFzc2VydGlvbnMuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjZWxz
ZQogI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQogI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvdHlwaW5nX2NvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvdHlwaW5nX2NvbW1hbmQu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvdHlwaW5nX2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcv
dHlwaW5nX2NvbW1hbmQuY3BwCTI0IFNlcCAyMDA1IDAxOjE4OjU4IC0wMDAwCTEuMgorKysgV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcAkyNyBTZXAgMjAwNSAwODo0NToz
MCAtMDAwMApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKIAog
I2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8
a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2Vsc2UKICNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikg
YXNzZXJ0KGFzc2VydGlvbikKICNlbmRpZgpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zp
c2libGVfcG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNTgKZGlmZiAtcCAtdSAtcjEuNTggV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfcG9z
aXRpb24uY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAJ
MTYgU2VwIDIwMDUgMjI6NDI6MDcgLTAwMDAJMS41OAorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5n
L3Zpc2libGVfcG9zaXRpb24uY3BwCTI3IFNlcCAyMDA1IDA4OjQ1OjMwIC0wMDAwCkBAIC0zNSw3
ICszNSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgogCiAjaWYgQVBQTEVfQ0hB
TkdFUwotI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSAiS1dRTG9nZ2luZy5oIgogI2Vsc2UKICNkZWZpbmUgQVNTRVJU
KGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGlu
Zy92aXNpYmxlX3Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMzEKZGlmZiAtcCAtdSAtcjEuMzEgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfcG9z
aXRpb24uaAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uaAkxNiBT
ZXAgMjAwNSAyMjo0MjowNyAtMDAwMAkxLjMxCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvdmlz
aWJsZV9wb3NpdGlvbi5oCTI3IFNlcCAyMDA1IDA4OjQ1OjMwIC0wMDAwCkBAIC0xMjgsNyArMTI4
LDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWaXNpYmxlUG9zaQogICAgIHJldHVy
biAhKGEgPT0gYik7CiB9CiAKLWtodG1sOjpTaGFyZWRQdHI8RE9NOjpSYW5nZUltcGw+IG1ha2VS
YW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24g
JmVuZCk7CitTaGFyZWRQdHI8RE9NOjpSYW5nZUltcGw+IG1ha2VSYW5nZShjb25zdCBWaXNpYmxl
UG9zaXRpb24gJnN0YXJ0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmVuZCk7CiBib29sIHNldFN0
YXJ0KERPTTo6UmFuZ2VJbXBsICosIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmc3RhcnQpOwogYm9v
bCBzZXRFbmQoRE9NOjpSYW5nZUltcGwgKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZzdGFydCk7
CiBWaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24oY29uc3QgRE9NOjpSYW5nZUlt
cGwgKiwgRUFmZmluaXR5KTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy93cmFwX2NvbnRl
bnRzX2luX2R1bW15X3NwYW5fY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvZWRpdGluZy93cmFwX2NvbnRlbnRzX2luX2R1bW15X3NwYW5fY29t
bWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIFdlYkNv
cmUva2h0bWwvZWRpdGluZy93cmFwX2NvbnRlbnRzX2luX2R1bW15X3NwYW5fY29tbWFuZC5jcHAK
LS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy93cmFwX2NvbnRlbnRzX2luX2R1bW15X3NwYW5fY29t
bWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBXZWJDb3JlL2todG1s
L2VkaXRpbmcvd3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1hbmQuY3BwCTI3IFNlcCAy
MDA1IDA4OjQ1OjMwIC0wMDAwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV9l
bGVtZW50aW1wbC5oIgogCiAjaWYgQVBQTEVfQ0hBTkdFUwotI2luY2x1ZGUgIktXUUFzc2VydGlv
bnMuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjZWxzZQogI2RlZmluZSBB
U1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQogI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L2todG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMjUKZGlmZiAtcCAtdSAtcjEuMjUgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2Vp
bXBsLmgKLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oCTE2IFNlcCAyMDA1
IDIyOjQyOjExIC0wMDAwCTEuMjUKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1w
bC5oCTI3IFNlcCAyMDA1IDA4OjQ1OjMwIC0wMDAwCkBAIC0yMjgsNyArMjI4LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgbWFwTW91c2VFdmVudChpbnQgeF8sIGludCB5XywgaW50IHdpZHRoXywgaW50
IGhlaWdodF8sCiAgICAgICAgICAgICAgICAgICAgICAgIGtodG1sOjpSZW5kZXJPYmplY3Q6Ok5v
ZGVJbmZvJiBpbmZvKTsKIAotICAgIGtodG1sOjpTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBs
PiBhcmVhcygpOworICAgIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IGFyZWFzKCk7CiAK
ICAgICBET01TdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0TmFtZSggY29uc3QgRE9N
U3RyaW5nICYgKTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF90YWJs
ZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZmIC1wIC11IC1yMS4yNyBXZWJD
b3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxfdGFibGVpbXBsLmgJMTYgU2VwIDIwMDUgMjI6NDI6MTIgLTAwMDAJMS4yNworKysgV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgJMjcgU2VwIDIwMDUgMDg6NDU6MzEgLTAwMDAK
QEAgLTg2LDggKzg2LDggQEAgcHVibGljOgogICAgIEhUTUxFbGVtZW50SW1wbCAqaW5zZXJ0Um93
ICggaW50IGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKICAgICB2b2lkIGRlbGV0ZVJvdyAo
IGludCBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlICk7CiAKLSAgICBraHRtbDo6U2hhcmVkUHRy
PEhUTUxDb2xsZWN0aW9uSW1wbD4gcm93cygpOwotICAgIGtodG1sOjpTaGFyZWRQdHI8SFRNTENv
bGxlY3Rpb25JbXBsPiB0Qm9kaWVzKCk7CisgICAgU2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1w
bD4gcm93cygpOworICAgIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IHRCb2RpZXMoKTsK
IAogICAgIERPTVN0cmluZyBhbGlnbigpIGNvbnN0OwogICAgIHZvaWQgc2V0QWxpZ24oIGNvbnN0
IERPTVN0cmluZyAmICk7CkBAIC0xODgsNyArMTg4LDcgQEAgcHVibGljOgogICAgIERPTVN0cmlu
ZyB2QWxpZ24oKSBjb25zdDsKICAgICB2b2lkIHNldFZBbGlnbiggY29uc3QgRE9NU3RyaW5nICYg
KTsKIAotICAgIGtodG1sOjpTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPiByb3dzKCk7Cisg
ICAgU2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gcm93cygpOwogfTsKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQpAQCAtMjE1LDcgKzIxNSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0U2Vj
dGlvblJvd0luZGV4KCBpbnQgICk7CiAKLSAgICBraHRtbDo6U2hhcmVkUHRyPEhUTUxDb2xsZWN0
aW9uSW1wbD4gY2VsbHMoKTsKKyAgICBTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPiBjZWxs
cygpOwogICAgIHZvaWQgc2V0Q2VsbHMoSFRNTENvbGxlY3Rpb25JbXBsICosIGludCAmZXhjZXB0
aW9uKTsKIAogICAgIERPTVN0cmluZyBhbGlnbigpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxwYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2h0bWwvaHRtbHBhcnNlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEy
CmRpZmYgLXAgLXUgLXIxLjExMiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbHBhcnNlci5jcHAKLS0t
IFdlYkNvcmUva2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAkxNiBTZXAgMjAwNSAyMjo0MjoxMiAt
MDAwMAkxLjExMgorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCTI3IFNlcCAy
MDA1IDA4OjQ1OjMxIC0wMDAwCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAiaHRtbGZhY3Rv
cnkuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9u
b2RlaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmgiCisjaW5jbHVk
ZSA8a3htbGNvcmUvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgIm1pc2MvaGFzaHNldC5oIgogI2lu
Y2x1ZGUgImh0bWwvaHRtbHRva2VuaXplci5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgpAQCAt
NzEsNyArNzEsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAvKioKICAqIEBpbnRlcm5hbAog
ICovCi1jbGFzcyBIVE1MU3RhY2tFbGVtCitjbGFzcyBIVE1MU3RhY2tFbGVtIDogcHVibGljIEZh
c3RBbGxvY2F0ZWQKIHsKIHB1YmxpYzoKICAgICBIVE1MU3RhY2tFbGVtKGNvbnN0IEF0b21pY1N0
cmluZyYgX3RhZ05hbWUsCkBAIC04Nyw4ICs4Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgbmV4dChf
bmV4dCkKICAgICAgICAgeyB9CiAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICBB
dG9taWNTdHJpbmcgdGFnTmFtZTsKICAgICBpbnQgbGV2ZWw7CiAgICAgYm9vbCBzdHJheVRhYmxl
Q29udGVudDsKSW5kZXg6IFdlYkNvcmUva2h0bWwvbWlzYy9hcmVuYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9hcmVuYS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IFdlYkNvcmUva2h0bWwvbWlzYy9hcmVu
YS5jcHAKLS0tIFdlYkNvcmUva2h0bWwvbWlzYy9hcmVuYS5jcHAJMSBBdWcgMjAwNSAwNDozMTo1
NyAtMDAwMAkxLjUKKysrIFdlYkNvcmUva2h0bWwvbWlzYy9hcmVuYS5jcHAJMjcgU2VwIDIwMDUg
MDg6NDU6MzEgLTAwMDAKQEAgLTQ3LDExICs0Nyw5IEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
I2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgIm1haW5f
dGhyZWFkX21hbGxvYy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2MuaD4KIAogdXNp
bmcgc3RkOjptYXg7Ci11c2luZyBraHRtbDo6bWFpbl90aHJlYWRfbWFsbG9jOwotdXNpbmcga2h0
bWw6Om1haW5fdGhyZWFkX2ZyZWU7CiAKIC8vI2RlZmluZSBERUJVR19BUkVOQV9NQUxMT0MKICNp
ZmRlZiBERUJVR19BUkVOQV9NQUxMT0MKQEAgLTE3Niw3ICsxNzQsNyBAQCB2b2lkKiBBcmVuYUFs
bG9jYXRlKEFyZW5hUG9vbCAqcG9vbCwgdW5zCiAgICAgICAgIGkrKzsKICAgICAgICAgcHJpbnRm
KCJNYWxsb2M6ICVkXG4iLCBpKTsKICNlbmRpZgotICAgICAgICBhID0gKEFyZW5hKiltYWluX3Ro
cmVhZF9tYWxsb2Moc3opOworICAgICAgICBhID0gKEFyZW5hKilmYXN0TWFsbG9jKHN6KTsKICAg
ICAgICAgaWYgKGEpICB7CiAgICAgICAgICAgICBhLT5saW1pdCA9ICh1d29yZClhICsgc3o7CiAg
ICAgICAgICAgICBhLT5iYXNlID0gYS0+YXZhaWwgPSAodXdvcmQpQVJFTkFfQUxJR04ocG9vbCwg
YSArIDEpOwpAQCAtMjQyLDcgKzI0MCw3IEBAIHN0YXRpYyB2b2lkIEZyZWVBcmVuYUxpc3QoQXJl
bmFQb29sICpwb28KICAgICAgICAgICAgICAgICBwcmludGYoIkZyZWU6ICVkXG4iLCBpKTsKICAg
ICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgbWFpbl90aHJlYWRfZnJlZShhKTsgYSA9
IDA7CisgICAgICAgICAgICBmYXN0RnJlZShhKTsgYSA9IDA7CiAgICAgICAgIH0gd2hpbGUgKChh
ID0gKmFwKSAhPSAwKTsKICAgICB9IGVsc2UgewogICAgICAgICAvKiBJbnNlcnQgdGhlIHdob2xl
IGFyZW5hIGNoYWluIGF0IHRoZSBmcm9udCBvZiB0aGUgZnJlZWxpc3QuICovCkBAIC0yODYsNyAr
Mjg0LDcgQEAgdm9pZCBBcmVuYUZpbmlzaCh2b2lkKQogCiAgICAgZm9yIChhID0gYXJlbmFfZnJl
ZWxpc3Q7IGE7IGEgPSBuZXh0KSB7CiAgICAgICAgIG5leHQgPSBhLT5uZXh0OwotICAgICAgICBt
YWluX3RocmVhZF9mcmVlKGEpOyBhID0gMDsKKyAgICAgICAgZmFzdEZyZWUoYSk7IGEgPSAwOwog
ICAgIH0KICAgICBhcmVuYV9mcmVlbGlzdCA9IE5VTEw7CiB9CkluZGV4OiBXZWJDb3JlL2todG1s
L21pc2MvaGFzaHRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvbWlzYy9oYXNodGFibGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC1w
IC11IC1yMS4xMSBXZWJDb3JlL2todG1sL21pc2MvaGFzaHRhYmxlLmgKLS0tIFdlYkNvcmUva2h0
bWwvbWlzYy9oYXNodGFibGUuaAkzMCBKdWwgMjAwNSAwMjozMzoyMSAtMDAwMAkxLjExCisrKyBX
ZWJDb3JlL2todG1sL21pc2MvaGFzaHRhYmxlLmgJMjcgU2VwIDIwMDUgMDg6NDU6MzIgLTAwMDAK
QEAgLTIzLDcgKzIzLDcgQEAKICNpZm5kZWYgSEFTSFRBQkxFX0gKICNkZWZpbmUgSEFTSFRBQkxF
X0gKIAotI2luY2x1ZGUgIm1haW5fdGhyZWFkX21hbGxvYy5oIgorI2luY2x1ZGUgPGt4bWxjb3Jl
L0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx1dGlsaXR5PgogCiBuYW1lc3BhY2Uga2h0bWwgewpA
QCAtMTc5LDcgKzE3OSw3IEBAIGNsYXNzIEhhc2hUYWJsZSB7CiAgICAgdHlwZWRlZiBWYWx1ZSBW
YWx1ZVR5cGU7CiAKICAgICBIYXNoVGFibGUoKSA6IG1fdGFibGUoMCksIG1fdGFibGVTaXplKDAp
LCBtX3RhYmxlU2l6ZU1hc2soMCksIG1fa2V5Q291bnQoMCksIG1fZGVsZXRlZENvdW50KDApIHt9
Ci0gICAgfkhhc2hUYWJsZSgpIHsgbWFpbl90aHJlYWRfZnJlZShtX3RhYmxlKTsgfQorICAgIH5I
YXNoVGFibGUoKSB7IGZhc3RGcmVlKG1fdGFibGUpOyB9CiAKICAgICBIYXNoVGFibGUoY29uc3Qg
SGFzaFRhYmxlJiBvdGhlcik7CiAgICAgdm9pZCBzd2FwKGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIp
OwpAQCAtNDMwLDkgKzQzMCw5IEBAIGlubGluZSBWYWx1ZSAqSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHIKICAgICAvLyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBl
eHBsaWNpdCBzcGVjaWFsaXphdGlvbnMgaGVyZSwgYnV0CiAgICAgLy8gZ2NjIGRvZXNuJ3QgYXBw
ZWFyIHRvIHN1cHBvcnQgdGhhdAogICAgIGlmIChUcmFpdHM6OmVtcHR5VmFsdWVJc1plcm8pCi0g
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSAqPihtYWluX3RocmVhZF9j
YWxsb2Moc2l6ZSwgc2l6ZW9mKFZhbHVlVHlwZSkpKTsgCisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PFZhbHVlVHlwZSAqPihmYXN0Q2FsbG9jKHNpemUsIHNpemVvZihWYWx1ZVR5cGUp
KSk7IAogICAgIGVsc2UgewotICAgICAgICBWYWx1ZVR5cGUgKnJlc3VsdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8VmFsdWVUeXBlICo+KG1haW5fdGhyZWFkX21hbGxvYyhzaXplICogc2l6ZW9mKFZhbHVl
VHlwZSkpKTsgCisgICAgICAgIFZhbHVlVHlwZSAqcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxW
YWx1ZVR5cGUgKj4oZmFzdE1hbGxvYyhzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpKTsgCiAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICBjbGVhckJ1
Y2tldChyZXN1bHRbaV0pOwogICAgICAgICB9CkBAIC00NzksNyArNDc5LDcgQEAgdm9pZCBIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSAogCiAgICAgbV9kZWxldGVkQ291bnQgPSAw
OwogICAgIAotICAgIG1haW5fdGhyZWFkX2ZyZWUob2xkVGFibGUpOworICAgIGZhc3RGcmVlKG9s
ZFRhYmxlKTsKIAogICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogfQpAQCAtNDg3LDcgKzQ4
Nyw3IEBAIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEgKIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIEtleSBFeHRyYWN0S2V5KGNvbnN0IFZhbHVl
ICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CiBpbmxpbmUgdm9p
ZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
Pjo6Y2xlYXIoKQogewotICAgIG1haW5fdGhyZWFkX2ZyZWUobV90YWJsZSk7CisgICAgZmFzdEZy
ZWUobV90YWJsZSk7CiAgICAgbV90YWJsZSA9IDA7CiAgICAgbV90YWJsZVNpemUgPSAwOwogICAg
IG1fdGFibGVTaXplTWFzayA9IDA7CkBAIC01MDMsNyArNTAzLDcgQEAgSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdQogICAgICwgbV9kZWxldGVkQ291bnQob3RoZXIubV9k
ZWxldGVkQ291bnQpCiB7CiAgICAgaWYgKG1fdGFibGVTaXplICE9IDApIHsKLSAgICAgICAgbV90
YWJsZSA9IG1haW5fdGhyZWFkX21hbGxvYyhtX3RhYmxlU2l6ZSk7CisgICAgICAgIG1fdGFibGUg
PSBmYXN0TWFsbG9jKG1fdGFibGVTaXplKTsKICAgICAgICAgbWVtY3B5KG90aGVyLm1fdGFibGUs
IG1fdGFibGUsIG1fdGFibGVTaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpOwogICAgIH0KIH0KSW5k
ZXg6IFdlYkNvcmUva2h0bWwvbWlzYy9sb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvbG9hZGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS43NQpkaWZmIC1wIC11IC1yMS43NSBXZWJDb3JlL2todG1sL21pc2MvbG9hZGVyLmNwcAot
LS0gV2ViQ29yZS9raHRtbC9taXNjL2xvYWRlci5jcHAJMjEgU2VwIDIwMDUgMjE6MDU6NTMgLTAw
MDAJMS43NQorKysgV2ViQ29yZS9raHRtbC9taXNjL2xvYWRlci5jcHAJMjcgU2VwIDIwMDUgMDg6
NDU6MzIgLTAwMDAKQEAgLTYyLDcgKzYyLDcgQEAKICNlbmRpZgogCiAjaWYgQVBQTEVfQ0hBTkdF
UwotI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRp
b25zLmg+CiAjaW5jbHVkZSAiS1dRTG9hZGVyLmgiCiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9r
aHRtbC9taXNjL21haW5fdGhyZWFkX21hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0
bWwvbWlzYy9tYWluX3RocmVhZF9tYWxsb2MuY3BwCmRpZmYgLU4gV2ViQ29yZS9raHRtbC9taXNj
L21haW5fdGhyZWFkX21hbGxvYy5jcHAKLS0tIFdlYkNvcmUva2h0bWwvbWlzYy9tYWluX3RocmVh
ZF9tYWxsb2MuY3BwCTE5IFNlcCAyMDA1IDE4OjUyOjEyIC0wMDAwCTEuNAorKysgV2ViQ29yZS9r
aHRtbC9taXNjL21haW5fdGhyZWFkX21hbGxvYy5jcHAJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAw
MApAQCAtMSw1NjU4ICswLDAgQEAKLS8qCi0gIFRoaXMgaXMgYSB2ZXJzaW9uIChha2EgZGxtYWxs
b2MpIG9mIG1hbGxvYy9mcmVlL3JlYWxsb2Mgd3JpdHRlbiBieQotICBEb3VnIExlYSBhbmQgcmVs
ZWFzZWQgdG8gdGhlIHB1YmxpYyBkb21haW4uICBVc2UsIG1vZGlmeSwgYW5kCi0gIHJlZGlzdHJp
YnV0ZSB0aGlzIGNvZGUgd2l0aG91dCBwZXJtaXNzaW9uIG9yIGFja25vd2xlZGdlbWVudCBpbiBh
bnkKLSAgd2F5IHlvdSB3aXNoLiAgU2VuZCBxdWVzdGlvbnMsIGNvbW1lbnRzLCBjb21wbGFpbnRz
LCBwZXJmb3JtYW5jZQotICBkYXRhLCBldGMgdG8gZGxAY3Mub3N3ZWdvLmVkdQotCi0qIFZFUlNJ
T04gMi43LjIgU2F0IEF1ZyAxNyAwOTowNzozMCAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkK
LQotICAgTm90ZTogVGhlcmUgbWF5IGJlIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGlzIG1hbGxv
YyBvYnRhaW5hYmxlIGF0Ci0gICAgICAgICAgIGZ0cDovL2dlZS5jcy5vc3dlZ28uZWR1L3B1Yi9t
aXNjL21hbGxvYy5jCi0gICAgICAgICBDaGVjayBiZWZvcmUgaW5zdGFsbGluZyEKLQotKiBRdWlj
a3N0YXJ0Ci0KLSAgVGhpcyBsaWJyYXJ5IGlzIGFsbCBpbiBvbmUgZmlsZSB0byBzaW1wbGlmeSB0
aGUgbW9zdCBjb21tb24gdXNhZ2U6Ci0gIGZ0cCBpdCwgY29tcGlsZSBpdCAoLU8pLCBhbmQgbGlu
ayBpdCBpbnRvIGFub3RoZXIgcHJvZ3JhbS4gQWxsCi0gIG9mIHRoZSBjb21waWxlLXRpbWUgb3B0
aW9ucyBkZWZhdWx0IHRvIHJlYXNvbmFibGUgdmFsdWVzIGZvciB1c2Ugb24KLSAgbW9zdCB1bml4
IHBsYXRmb3Jtcy4gQ29tcGlsZSAtRFdJTjMyIGZvciByZWFzb25hYmxlIGRlZmF1bHRzIG9uIHdp
bmRvd3MuCi0gIFlvdSBtaWdodCBsYXRlciB3YW50IHRvIHN0ZXAgdGhyb3VnaCB2YXJpb3VzIGNv
bXBpbGUtdGltZSBhbmQgZHluYW1pYwotICB0dW5pbmcgb3B0aW9ucy4KLQotICBGb3IgY29udmVu
aWVuY2UsIGFuIGluY2x1ZGUgZmlsZSBmb3IgY29kZSB1c2luZyB0aGlzIG1hbGxvYyBpcyBhdDoK
LSAgICAgZnRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLTIuNy4xLmgKLSAg
WW91IGRvbid0IHJlYWxseSBuZWVkIHRoaXMgLmggZmlsZSB1bmxlc3MgeW91IGNhbGwgZnVuY3Rp
b25zIG5vdAotICBkZWZpbmVkIGluIHlvdXIgc3lzdGVtIGluY2x1ZGUgZmlsZXMuICBUaGUgLmgg
ZmlsZSBjb250YWlucyBvbmx5IHRoZQotICBleGNlcnB0cyBmcm9tIHRoaXMgZmlsZSBuZWVkZWQg
Zm9yIHVzaW5nIHRoaXMgbWFsbG9jIG9uIEFOU0kgQy9DKysKLSAgc3lzdGVtcywgc28gbG9uZyBh
cyB5b3UgaGF2ZW4ndCBjaGFuZ2VkIGNvbXBpbGUtdGltZSBvcHRpb25zIGFib3V0Ci0gIG5hbWlu
ZyBhbmQgdHVuaW5nIHBhcmFtZXRlcnMuICBJZiB5b3UgZG8sIHRoZW4geW91IGNhbiBjcmVhdGUg
eW91cgotICBvd24gbWFsbG9jLmggdGhhdCBkb2VzIGluY2x1ZGUgYWxsIHNldHRpbmdzIGJ5IGN1
dHRpbmcgYXQgdGhlIHBvaW50Ci0gIGluZGljYXRlZCBiZWxvdy4KLQotKiBXaHkgdXNlIHRoaXMg
bWFsbG9jPwotCi0gIFRoaXMgaXMgbm90IHRoZSBmYXN0ZXN0LCBtb3N0IHNwYWNlLWNvbnNlcnZp
bmcsIG1vc3QgcG9ydGFibGUsIG9yCi0gIG1vc3QgdHVuYWJsZSBtYWxsb2MgZXZlciB3cml0dGVu
LiBIb3dldmVyIGl0IGlzIGFtb25nIHRoZSBmYXN0ZXN0Ci0gIHdoaWxlIGFsc28gYmVpbmcgYW1v
bmcgdGhlIG1vc3Qgc3BhY2UtY29uc2VydmluZywgcG9ydGFibGUgYW5kIHR1bmFibGUuCi0gIENv
bnNpc3RlbnQgYmFsYW5jZSBhY3Jvc3MgdGhlc2UgZmFjdG9ycyByZXN1bHRzIGluIGEgZ29vZCBn
ZW5lcmFsLXB1cnBvc2UKLSAgYWxsb2NhdG9yIGZvciBtYWxsb2MtaW50ZW5zaXZlIHByb2dyYW1z
LgotCi0gIFRoZSBtYWluIHByb3BlcnRpZXMgb2YgdGhlIGFsZ29yaXRobXMgYXJlOgotICAqIEZv
ciBsYXJnZSAoPj0gNTEyIGJ5dGVzKSByZXF1ZXN0cywgaXQgaXMgYSBwdXJlIGJlc3QtZml0IGFs
bG9jYXRvciwKLSAgICB3aXRoIHRpZXMgbm9ybWFsbHkgZGVjaWRlZCB2aWEgRklGTyAoaS5lLiBs
ZWFzdCByZWNlbnRseSB1c2VkKS4KLSAgKiBGb3Igc21hbGwgKDw9IDY0IGJ5dGVzIGJ5IGRlZmF1
bHQpIHJlcXVlc3RzLCBpdCBpcyBhIGNhY2hpbmcKLSAgICBhbGxvY2F0b3IsIHRoYXQgbWFpbnRh
aW5zIHBvb2xzIG9mIHF1aWNrbHkgcmVjeWNsZWQgY2h1bmtzLgotICAqIEluIGJldHdlZW4sIGFu
ZCBmb3IgY29tYmluYXRpb25zIG9mIGxhcmdlIGFuZCBzbWFsbCByZXF1ZXN0cywgaXQgZG9lcwot
ICAgIHRoZSBiZXN0IGl0IGNhbiB0cnlpbmcgdG8gbWVldCBib3RoIGdvYWxzIGF0IG9uY2UuCi0g
ICogRm9yIHZlcnkgbGFyZ2UgcmVxdWVzdHMgKD49IDEyOEtCIGJ5IGRlZmF1bHQpLCBpdCByZWxp
ZXMgb24gc3lzdGVtCi0gICAgbWVtb3J5IG1hcHBpbmcgZmFjaWxpdGllcywgaWYgc3VwcG9ydGVk
LgotCi0gIEZvciBhIGxvbmdlciBidXQgc2xpZ2h0bHkgb3V0IG9mIGRhdGUgaGlnaC1sZXZlbCBk
ZXNjcmlwdGlvbiwgc2VlCi0gICAgIGh0dHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9kbC9odG1sL21h
bGxvYy5odG1sCi0KLSAgWW91IG1heSBhbHJlYWR5IGJ5IGRlZmF1bHQgYmUgdXNpbmcgYSBDIGxp
YnJhcnkgY29udGFpbmluZyBhIG1hbGxvYwotICB0aGF0IGlzICBiYXNlZCBvbiBzb21lIHZlcnNp
b24gb2YgdGhpcyBtYWxsb2MgKGZvciBleGFtcGxlIGluCi0gIGxpbnV4KS4gWW91IG1pZ2h0IHN0
aWxsIHdhbnQgdG8gdXNlIHRoZSBvbmUgaW4gdGhpcyBmaWxlIGluIG9yZGVyIHRvCi0gIGN1c3Rv
bWl6ZSBzZXR0aW5ncyBvciB0byBhdm9pZCBvdmVyaGVhZHMgYXNzb2NpYXRlZCB3aXRoIGxpYnJh
cnkKLSAgdmVyc2lvbnMuCi0KLSogQ29udGVudHMsIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBp
biAiZGVzY3JpcHRpb24gb2YgcHVibGljIHJvdXRpbmVzIiBiZWxvdy4KLQotICBTdGFuZGFyZCAo
QU5TSS9TVklELy4uLikgIGZ1bmN0aW9uczoKLSAgICBtYWxsb2Moc2l6ZV90IG4pOwotICAgIGNh
bGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7Ci0gICAgZnJlZShW
b2lkX3QqIHApOwotICAgIHJlYWxsb2MoVm9pZF90KiBwLCBzaXplX3Qgbik7Ci0gICAgbWVtYWxp
Z24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IG4pOwotICAgIHZhbGxvYyhzaXplX3Qgbik7Ci0g
ICAgbWFsbGluZm8oKQotICAgIG1hbGxvcHQoaW50IHBhcmFtZXRlcl9udW1iZXIsIGludCBwYXJh
bWV0ZXJfdmFsdWUpCi0KLSAgQWRkaXRpb25hbCBmdW5jdGlvbnM6Ci0gICAgaW5kZXBlbmRlbnRf
Y2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZSwgVm9pZF90KiBjaHVua3NbXSk7
Ci0gICAgaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXpl
c1tdLCBWb2lkX3QqIGNodW5rc1tdKTsKLSAgICBwdmFsbG9jKHNpemVfdCBuKTsKLSAgICBjZnJl
ZShWb2lkX3QqIHApOwotICAgIG1hbGxvY190cmltKHNpemVfdCBwYWQpOwotICAgIG1hbGxvY191
c2FibGVfc2l6ZShWb2lkX3QqIHApOwotICAgIG1hbGxvY19zdGF0cygpOwotCi0qIFZpdGFsIHN0
YXRpc3RpY3M6Ci0KLSAgU3VwcG9ydGVkIHBvaW50ZXIgcmVwcmVzZW50YXRpb246ICAgICAgIDQg
b3IgOCBieXRlcwotICBTdXBwb3J0ZWQgc2l6ZV90ICByZXByZXNlbnRhdGlvbjogICAgICAgNCBv
ciA4IGJ5dGVzIAotICAgICAgIE5vdGUgdGhhdCBzaXplX3QgaXMgYWxsb3dlZCB0byBiZSA0IGJ5
dGVzIGV2ZW4gaWYgcG9pbnRlcnMgYXJlIDguCi0gICAgICAgWW91IGNhbiBhZGp1c3QgdGhpcyBi
eSBkZWZpbmluZyBJTlRFUk5BTF9TSVpFX1QKLQotICBBbGlnbm1lbnQ6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMiAqIHNpemVvZihzaXplX3QpIChkZWZhdWx0KQotICAgICAgIChpLmUu
LCA4IGJ5dGUgYWxpZ25tZW50IHdpdGggNGJ5dGUgc2l6ZV90KS4gVGhpcyBzdWZmaWNlcyBmb3IK
LSAgICAgICBuZWFybHkgYWxsIGN1cnJlbnQgbWFjaGluZXMgYW5kIEMgY29tcGlsZXJzLiBIb3dl
dmVyLCB5b3UgY2FuCi0gICAgICAgZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgdG8gYmUgd2lkZXIg
dGhhbiB0aGlzIGlmIG5lY2Vzc2FyeS4KLQotICBNaW5pbXVtIG92ZXJoZWFkIHBlciBhbGxvY2F0
ZWQgY2h1bms6ICAgNCBvciA4IGJ5dGVzCi0gICAgICAgRWFjaCBtYWxsb2NlZCBjaHVuayBoYXMg
YSBoaWRkZW4gd29yZCBvZiBvdmVyaGVhZCBob2xkaW5nIHNpemUKLSAgICAgICBhbmQgc3RhdHVz
IGluZm9ybWF0aW9uLgotCi0gIE1pbmltdW0gYWxsb2NhdGVkIHNpemU6IDQtYnl0ZSBwdHJzOiAg
MTYgYnl0ZXMgICAgKGluY2x1ZGluZyA0IG92ZXJoZWFkKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICA4LWJ5dGUgcHRyczogIDI0LzMyIGJ5dGVzIChpbmNsdWRpbmcsIDQvOCBvdmVyaGVhZCkK
LQotICAgICAgIFdoZW4gYSBjaHVuayBpcyBmcmVlZCwgMTIgKGZvciA0Ynl0ZSBwdHJzKSBvciAy
MCAoZm9yIDggYnl0ZQotICAgICAgIHB0cnMgYnV0IDQgYnl0ZSBzaXplKSBvciAyNCAoZm9yIDgv
OCkgYWRkaXRpb25hbCBieXRlcyBhcmUKLSAgICAgICBuZWVkZWQ7IDQgKDgpIGZvciBhIHRyYWls
aW5nIHNpemUgZmllbGQgYW5kIDggKDE2KSBieXRlcyBmb3IKLSAgICAgICBmcmVlIGxpc3QgcG9p
bnRlcnMuIFRodXMsIHRoZSBtaW5pbXVtIGFsbG9jYXRhYmxlIHNpemUgaXMKLSAgICAgICAxNi8y
NC8zMiBieXRlcy4KLQotICAgICAgIEV2ZW4gYSByZXF1ZXN0IGZvciB6ZXJvIGJ5dGVzIChpLmUu
LCBtYWxsb2MoMCkpIHJldHVybnMgYQotICAgICAgIHBvaW50ZXIgdG8gc29tZXRoaW5nIG9mIHRo
ZSBtaW5pbXVtIGFsbG9jYXRhYmxlIHNpemUuCi0KLSAgICAgICBUaGUgbWF4aW11bSBvdmVyaGVh
ZCB3YXN0YWdlIChpLmUuLCBudW1iZXIgb2YgZXh0cmEgYnl0ZXMKLSAgICAgICBhbGxvY2F0ZWQg
dGhhbiB3ZXJlIHJlcXVlc3RlZCBpbiBtYWxsb2MpIGlzIGxlc3MgdGhhbiBvciBlcXVhbAotICAg
ICAgIHRvIHRoZSBtaW5pbXVtIHNpemUsIGV4Y2VwdCBmb3IgcmVxdWVzdHMgPj0gbW1hcF90aHJl
c2hvbGQgdGhhdAotICAgICAgIGFyZSBzZXJ2aWNlZCB2aWEgbW1hcCgpLCB3aGVyZSB0aGUgd29y
c3QgY2FzZSB3YXN0YWdlIGlzIDIgKgotICAgICAgIHNpemVvZihzaXplX3QpIGJ5dGVzIHBsdXMg
dGhlIHJlbWFpbmRlciBmcm9tIGEgc3lzdGVtIHBhZ2UgKHRoZQotICAgICAgIG1pbmltYWwgbW1h
cCB1bml0KTsgdHlwaWNhbGx5IDQwOTYgb3IgODE5MiBieXRlcy4KLQotICBNYXhpbXVtIGFsbG9j
YXRlZCBzaXplOiAgNC1ieXRlIHNpemVfdDogMl4zMiBtaW51cyBhYm91dCB0d28gcGFnZXMgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICA4LWJ5dGUgc2l6ZV90OiAyXjY0IG1pbnVzIGFib3V0
IHR3byBwYWdlcwotCi0gICAgICAgSXQgaXMgYXNzdW1lZCB0aGF0IChwb3NzaWJseSBzaWduZWQp
IHNpemVfdCB2YWx1ZXMgc3VmZmljZSB0bwotICAgICAgIHJlcHJlc2VudCBjaHVuayBzaXplcy4g
YFBvc3NpYmx5IHNpZ25lZCcgaXMgZHVlIHRvIHRoZSBmYWN0Ci0gICAgICAgdGhhdCBgc2l6ZV90
JyBtYXkgYmUgZGVmaW5lZCBvbiBhIHN5c3RlbSBhcyBlaXRoZXIgYSBzaWduZWQgb3IKLSAgICAg
ICBhbiB1bnNpZ25lZCB0eXBlLiBUaGUgSVNPIEMgc3RhbmRhcmQgc2F5cyB0aGF0IGl0IG11c3Qg
YmUKLSAgICAgICB1bnNpZ25lZCwgYnV0IGEgZmV3IHN5c3RlbXMgYXJlIGtub3duIG5vdCB0byBh
ZGhlcmUgdG8gdGhpcy4KLSAgICAgICBBZGRpdGlvbmFsbHksIGV2ZW4gd2hlbiBzaXplX3QgaXMg
dW5zaWduZWQsIHNicmsgKHdoaWNoIGlzIGJ5Ci0gICAgICAgZGVmYXVsdCB1c2VkIHRvIG9idGFp
biBtZW1vcnkgZnJvbSBzeXN0ZW0pIGFjY2VwdHMgc2lnbmVkCi0gICAgICAgYXJndW1lbnRzLCBh
bmQgbWF5IG5vdCBiZSBhYmxlIHRvIGhhbmRsZSBzaXplX3Qtd2lkZSBhcmd1bWVudHMKLSAgICAg
ICB3aXRoIG5lZ2F0aXZlIHNpZ24gYml0LiAgR2VuZXJhbGx5LCB2YWx1ZXMgdGhhdCB3b3VsZAot
ICAgICAgIGFwcGVhciBhcyBuZWdhdGl2ZSBhZnRlciBhY2NvdW50aW5nIGZvciBvdmVyaGVhZCBh
bmQgYWxpZ25tZW50Ci0gICAgICAgYXJlIHN1cHBvcnRlZCBvbmx5IHZpYSBtbWFwKCksIHdoaWNo
IGRvZXMgbm90IGhhdmUgdGhpcwotICAgICAgIGxpbWl0YXRpb24uCi0KLSAgICAgICBSZXF1ZXN0
cyBmb3Igc2l6ZXMgb3V0c2lkZSB0aGUgYWxsb3dlZCByYW5nZSB3aWxsIHBlcmZvcm0gYW4gb3B0
aW9uYWwKLSAgICAgICBmYWlsdXJlIGFjdGlvbiBhbmQgdGhlbiByZXR1cm4gbnVsbC4gKFJlcXVl
c3RzIG1heSBhbHNvCi0gICAgICAgYWxzbyBmYWlsIGJlY2F1c2UgYSBzeXN0ZW0gaXMgb3V0IG9m
IG1lbW9yeS4pCi0KLSAgVGhyZWFkLXNhZmV0eTogTk9UIHRocmVhZC1zYWZlIHVubGVzcyBVU0Vf
TUFMTE9DX0xPQ0sgZGVmaW5lZAotCi0gICAgICAgV2hlbiBVU0VfTUFMTE9DX0xPQ0sgaXMgZGVm
aW5lZCwgd3JhcHBlcnMgYXJlIGNyZWF0ZWQgdG8KLSAgICAgICBzdXJyb3VuZCBldmVyeSBwdWJs
aWMgY2FsbCB3aXRoIGVpdGhlciBhIHB0aHJlYWQgbXV0ZXggb3IKLSAgICAgICBhIHdpbjMyIHNw
aW5sb2NrIChkZXBlbmRpbmcgb24gV0lOMzIpLiBUaGlzIGlzIG5vdAotICAgICAgIGVzcGVjaWFs
bHkgZmFzdCwgYW5kIGNhbiBiZSBhIG1ham9yIGJvdHRsZW5lY2suCi0gICAgICAgSXQgaXMgZGVz
aWduZWQgb25seSB0byBwcm92aWRlIG1pbmltYWwgcHJvdGVjdGlvbgotICAgICAgIGluIGNvbmN1
cnJlbnQgZW52aXJvbm1lbnRzLCBhbmQgdG8gcHJvdmlkZSBhIGJhc2lzIGZvcgotICAgICAgIGV4
dGVuc2lvbnMuICBJZiB5b3UgYXJlIHVzaW5nIG1hbGxvYyBpbiBhIGNvbmN1cnJlbnQgcHJvZ3Jh
bSwKLSAgICAgICB5b3Ugd291bGQgYmUgZmFyIGJldHRlciBvZmYgb2J0YWluaW5nIHB0bWFsbG9j
LCB3aGljaCBpcwotICAgICAgIGRlcml2ZWQgZnJvbSBhIHZlcnNpb24gb2YgdGhpcyBtYWxsb2Ms
IGFuZCBpcyB3ZWxsLXR1bmVkIGZvcgotICAgICAgIGNvbmN1cnJlbnQgcHJvZ3JhbXMuIChTZWUg
aHR0cDovL3d3dy5tYWxsb2MuZGUpIE5vdGUgdGhhdAotICAgICAgIGV2ZW4gd2hlbiBVU0VfTUFM
TE9DX0xPQ0sgaXMgZGVmaW5lZCwgeW91IGNhbiBjYW4gZ3VhcmFudGVlCi0gICAgICAgZnVsbCB0
aHJlYWQtc2FmZXR5IG9ubHkgaWYgbm8gdGhyZWFkcyBhY3F1aXJlIG1lbW9yeSB0aHJvdWdoIAot
ICAgICAgIGRpcmVjdCBjYWxscyB0byBNT1JFQ09SRSBvciBvdGhlciBzeXN0ZW0tbGV2ZWwgYWxs
b2NhdG9ycy4KLQotICBDb21wbGlhbmNlOiBJIGJlbGlldmUgaXQgaXMgY29tcGxpYW50IHdpdGgg
dGhlIDE5OTcgU2luZ2xlIFVuaXggU3BlY2lmaWNhdGlvbgotICAgICAgIChTZWUgaHR0cDovL3d3
dy5vcGVubmMub3JnKS4gQWxzbyBTVklEL1hQRywgQU5TSSBDLCBhbmQgcHJvYmFibHkgCi0gICAg
ICAgb3RoZXJzIGFzIHdlbGwuCi0KLSogU3lub3BzaXMgb2YgY29tcGlsZS10aW1lIG9wdGlvbnM6
Ci0KLSAgICBQZW9wbGUgaGF2ZSByZXBvcnRlZCB1c2luZyBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0
aGlzIG1hbGxvYyBvbiBhbGwKLSAgICB2ZXJzaW9ucyBvZiBVbml4LCBzb21ldGltZXMgYnkgdHdl
YWtpbmcgc29tZSBvZiB0aGUgZGVmaW5lcwotICAgIGJlbG93LiBJdCBoYXMgYmVlbiB0ZXN0ZWQg
bW9zdCBleHRlbnNpdmVseSBvbiBTb2xhcmlzIGFuZAotICAgIExpbnV4LiBJdCBpcyBhbHNvIHJl
cG9ydGVkIHRvIHdvcmsgb24gV0lOMzIgcGxhdGZvcm1zLgotICAgIFBlb3BsZSBhbHNvIHJlcG9y
dCB1c2luZyBpdCBpbiBzdGFuZC1hbG9uZSBlbWJlZGRlZCBzeXN0ZW1zLgotCi0gICAgVGhlIGlt
cGxlbWVudGF0aW9uIGlzIGluIHN0cmFpZ2h0LCBoYW5kLXR1bmVkIEFOU0kgQy4gIEl0IGlzIG5v
dAotICAgIGF0IGFsbCBtb2R1bGFyLiAoU29ycnkhKSAgSXQgdXNlcyBhIGxvdCBvZiBtYWNyb3Mu
ICBUbyBiZSBhdCBhbGwKLSAgICB1c2FibGUsIHRoaXMgY29kZSBzaG91bGQgYmUgY29tcGlsZWQg
dXNpbmcgYW4gb3B0aW1pemluZyBjb21waWxlcgotICAgIChmb3IgZXhhbXBsZSBnY2MgLU8zKSB0
aGF0IGNhbiBzaW1wbGlmeSBleHByZXNzaW9ucyBhbmQgY29udHJvbAotICAgIHBhdGhzLiAoRkFR
OiBzb21lIG1hY3JvcyBpbXBvcnQgdmFyaWFibGVzIGFzIGFyZ3VtZW50cyByYXRoZXIgdGhhbgot
ICAgIGRlY2xhcmUgbG9jYWxzIGJlY2F1c2UgcGVvcGxlIHJlcG9ydGVkIHRoYXQgc29tZSBkZWJ1
Z2dlcnMKLSAgICBvdGhlcndpc2UgZ2V0IGNvbmZ1c2VkLikKLQotICAgIE9QVElPTiAgICAgICAg
ICAgICAgICAgICAgIERFRkFVTFQgVkFMVUUKLQotICAgIENvbXBpbGF0aW9uIEVudmlyb25tZW50
IG9wdGlvbnM6Ci0KLSAgICBfX1NURF9DICAgICAgICAgICAgICAgICAgICBkZXJpdmVkIGZyb20g
QyBjb21waWxlciBkZWZpbmVzCi0gICAgV0lOMzIgICAgICAgICAgICAgICAgICAgICAgTk9UIGRl
ZmluZWQKLSAgICBIQVZFX01FTUNQWSAgICAgICAgICAgICAgICBkZWZpbmVkCi0gICAgVVNFX01F
TUNQWSAgICAgICAgICAgICAgICAgMSBpZiBIQVZFX01FTUNQWSBpcyBkZWZpbmVkCi0gICAgSEFW
RV9NTUFQICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyAxIAotICAgIE1NQVBfQ0xFQVJTICAg
ICAgICAgICAgICAgIDEKLSAgICBIQVZFX01SRU1BUCAgICAgICAgICAgICAgICAwIHVubGVzcyBs
aW51eCBkZWZpbmVkCi0gICAgbWFsbG9jX2dldHBhZ2VzaXplICAgICAgICAgZGVyaXZlZCBmcm9t
IHN5c3RlbSAjaW5jbHVkZXMsIG9yIDQwOTYgaWYgbm90Ci0gICAgSEFWRV9VU1JfSU5DTFVERV9N
QUxMT0NfSCAgTk9UIGRlZmluZWQKLSAgICBMQUNLU19VTklTVERfSCAgICAgICAgICAgICBOT1Qg
ZGVmaW5lZCB1bmxlc3MgV0lOMzIKLSAgICBMQUNLU19TWVNfUEFSQU1fSCAgICAgICAgICBOT1Qg
ZGVmaW5lZCB1bmxlc3MgV0lOMzIKLSAgICBMQUNLU19TWVNfTU1BTl9IICAgICAgICAgICBOT1Qg
ZGVmaW5lZCB1bmxlc3MgV0lOMzIKLSAgICBMQUNLU19GQ05UTF9IICAgICAgICAgICAgICBOT1Qg
ZGVmaW5lZAotCi0gICAgQ2hhbmdpbmcgZGVmYXVsdCB3b3JkIHNpemVzOgotCi0gICAgSU5URVJO
QUxfU0laRV9UICAgICAgICAgICAgc2l6ZV90Ci0gICAgTUFMTE9DX0FMSUdOTUVOVCAgICAgICAg
ICAgMiAqIHNpemVvZihJTlRFUk5BTF9TSVpFX1QpCi0gICAgUFRSX1VJTlQgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZwotICAgIENIVU5LX1NJWkVfVCAgICAgICAgICAgICAgIHVuc2ln
bmVkIGxvbmcKLQotICAgIENvbmZpZ3VyYXRpb24gYW5kIGZ1bmN0aW9uYWxpdHkgb3B0aW9uczoK
LQotICAgIFVTRV9ETF9QUkVGSVggICAgICAgICAgICAgIE5PVCBkZWZpbmVkCi0gICAgVVNFX1BV
QkxJQ19NQUxMT0NfV1JBUFBFUlMgTk9UIGRlZmluZWQKLSAgICBVU0VfTUFMTE9DX0xPQ0sgICAg
ICAgICAgICBOT1QgZGVmaW5lZAotICAgIERFQlVHICAgICAgICAgICAgICAgICAgICAgIE5PVCBk
ZWZpbmVkCi0gICAgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICAgTk9UIGRlZmluZWQKLSAgICBN
QUxMT0NfRkFJTFVSRV9BQ1RJT04gICAgICBlcnJubyA9IEVOT01FTSwgaWYgX19TVERfQyBkZWZp
bmVkLCBlbHNlIG5vLW9wCi0gICAgVFJJTV9GQVNUQklOUyAgICAgICAgICAgICAgMAotICAgIEZJ
UlNUX1NPUlRFRF9CSU5fU0laRSAgICAgIDUxMgotCi0gICAgT3B0aW9ucyBmb3IgY3VzdG9taXpp
bmcgTU9SRUNPUkU6Ci0KLSAgICBNT1JFQ09SRSAgICAgICAgICAgICAgICAgICBzYnJrCi0gICAg
TU9SRUNPUkVfQ09OVElHVU9VUyAgICAgICAgMSAKLSAgICBNT1JFQ09SRV9DQU5OT1RfVFJJTSAg
ICAgICBOT1QgZGVmaW5lZAotICAgIE1NQVBfQVNfTU9SRUNPUkVfU0laRSAgICAgICgxMDI0ICog
MTAyNCkgCi0KLSAgICBUdW5pbmcgb3B0aW9ucyB0aGF0IGFyZSBhbHNvIGR5bmFtaWNhbGx5IGNo
YW5nZWFibGUgdmlhIG1hbGxvcHQ6Ci0KLSAgICBERUZBVUxUX01YRkFTVCAgICAgICAgICAgICA2
NAotICAgIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgICAgIDI1NiAqIDEwMjQKLSAgICBERUZBVUxU
X1RPUF9QQUQgICAgICAgICAgICAwCi0gICAgREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAgICAgMjU2
ICogMTAyNAotICAgIERFRkFVTFRfTU1BUF9NQVggICAgICAgICAgIDY1NTM2Ci0KLSAgICBUaGVy
ZSBhcmUgc2V2ZXJhbCBvdGhlciAjZGVmaW5lZCBjb25zdGFudHMgYW5kIG1hY3JvcyB0aGF0IHlv
dQotICAgIHByb2JhYmx5IGRvbid0IHdhbnQgdG8gdG91Y2ggdW5sZXNzIHlvdSBhcmUgZXh0ZW5k
aW5nIG9yIGFkYXB0aW5nIG1hbGxvYy4KLSovCi0KLSNpbmNsdWRlICJtYWluX3RocmVhZF9tYWxs
b2MuaCIKLQotI2RlZmluZSBNT1JFQ09SRV9DT05USUdVT1VTIDAKLSNkZWZpbmUgTU9SRUNPUkVf
Q0FOTk9UX1RSSU0gMQotI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gYWJvcnQoKQotCi0K
LW5hbWVzcGFjZSBraHRtbCB7Ci0KLSNpZm5kZWYgTkRFQlVHCi0KLS8vIEluIGRlYnVnZ2luZyBi
dWlsZHMsIHVzZSB0aGUgc3lzdGVtIG1hbGxvYyBmb3IgaXRzIGRlYnVnZ2luZyBmZWF0dXJlcy4K
LQotdm9pZCAqbWFpbl90aHJlYWRfbWFsbG9jKHNpemVfdCBuKQotewotICAgIGFzc2VydChwdGhy
ZWFkX21haW5fbnAoKSk7Ci0gICAgcmV0dXJuIG1hbGxvYyhuKTsKLX0KLQotdm9pZCAqbWFpbl90
aHJlYWRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKQotewot
ICAgIGFzc2VydChwdGhyZWFkX21haW5fbnAoKSk7Ci0gICAgcmV0dXJuIGNhbGxvYyhuX2VsZW1l
bnRzLCBlbGVtZW50X3NpemUpOwotfQotCi12b2lkIG1haW5fdGhyZWFkX2ZyZWUodm9pZCogcCkK
LXsKLSAgICAvLyBpdCdzIG9rIHRvIG1haW5fdGhyZWFkX2ZyZWUgb24gYSBub24tbWFpbiB0aHJl
YWQgLSB0aGUgYWN0dWFsCi0gICAgLy8gZnJlZSB3aWxsIGJlIHNjaGVkdWxlZCBvbiB0aGUgbWFp
biB0aHJlYWQgaW4gdGhhdCBjYXNlLgotICAgIGZyZWUocCk7Ci19Ci0KLXZvaWQgKm1haW5fdGhy
ZWFkX3JlYWxsb2Modm9pZCogcCwgc2l6ZV90IG4pCi17Ci0gICAgYXNzZXJ0KHB0aHJlYWRfbWFp
bl9ucCgpKTsKLSAgICByZXR1cm4gcmVhbGxvYyhwLCBuKTsKLX0KLQotI2Vsc2UKLQotLyoKLSAg
V0lOMzIgc2V0cyB1cCBkZWZhdWx0cyBmb3IgTVMgZW52aXJvbm1lbnQgYW5kIGNvbXBpbGVycy4K
LSAgT3RoZXJ3aXNlIGRlZmF1bHRzIGFyZSBmb3IgdW5peC4KLSovCi0KLS8qICNkZWZpbmUgV0lO
MzIgKi8KLQotI2lmZGVmIFdJTjMyCi0KLSNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2lu
Y2x1ZGUgPHdpbmRvd3MuaD4KLQotLyogV2luMzIgZG9lc24ndCBzdXBwbHkgb3IgbmVlZCB0aGUg
Zm9sbG93aW5nIGhlYWRlcnMgKi8KLSNkZWZpbmUgTEFDS1NfVU5JU1REX0gKLSNkZWZpbmUgTEFD
S1NfU1lTX1BBUkFNX0gKLSNkZWZpbmUgTEFDS1NfU1lTX01NQU5fSAotCi0vKiBVc2UgdGhlIHN1
cHBsaWVkIGVtdWxhdGlvbiBvZiBzYnJrICovCi0jZGVmaW5lIE1PUkVDT1JFIHNicmsKLSNkZWZp
bmUgTU9SRUNPUkVfQ09OVElHVU9VUyAxCi0jZGVmaW5lIE1PUkVDT1JFX0ZBSUxVUkUgICAgKCh2
b2lkKikoLTEpKQotCi0vKiBVc2UgdGhlIHN1cHBsaWVkIGVtdWxhdGlvbiBvZiBtbWFwIGFuZCBt
dW5tYXAgKi8KLSNkZWZpbmUgSEFWRV9NTUFQIDEKLSNkZWZpbmUgTVVOTUFQX0ZBSUxVUkUgICgt
MSkKLSNkZWZpbmUgTU1BUF9DTEVBUlMgMQotCi0vKiBUaGVzZSB2YWx1ZXMgZG9uJ3QgcmVhbGx5
IG1hdHRlciBpbiB3aW5kb3dzIG1tYXAgZW11bGF0aW9uICovCi0jZGVmaW5lIE1BUF9QUklWQVRF
IDEKLSNkZWZpbmUgTUFQX0FOT05ZTU9VUyAyCi0jZGVmaW5lIFBST1RfUkVBRCAxCi0jZGVmaW5l
IFBST1RfV1JJVEUgMgotCi0vKiBFbXVsYXRpb24gZnVuY3Rpb25zIGRlZmluZWQgYXQgdGhlIGVu
ZCBvZiB0aGlzIGZpbGUgKi8KLQotLyogSWYgVVNFX01BTExPQ19MT0NLLCB1c2Ugc3VwcGxpZWQg
Y3JpdGljYWwtc2VjdGlvbi1iYXNlZCBsb2NrIGZ1bmN0aW9ucyAqLwotI2lmZGVmIFVTRV9NQUxM
T0NfTE9DSwotc3RhdGljIGludCBzbHdhaXQoaW50ICpzbCk7Ci1zdGF0aWMgaW50IHNscmVsZWFz
ZShpbnQgKnNsKTsKLSNlbmRpZgotCi1zdGF0aWMgbG9uZyBnZXRwYWdlc2l6ZSh2b2lkKTsKLXN0
YXRpYyBsb25nIGdldHJlZ2lvbnNpemUodm9pZCk7Ci1zdGF0aWMgdm9pZCAqc2Jyayhsb25nIHNp
emUpOwotc3RhdGljIHZvaWQgKm1tYXAodm9pZCAqcHRyLCBsb25nIHNpemUsIGxvbmcgcHJvdCwg
bG9uZyB0eXBlLCBsb25nIGhhbmRsZSwgbG9uZyBhcmcpOwotc3RhdGljIGxvbmcgbXVubWFwKHZv
aWQgKnB0ciwgbG9uZyBzaXplKTsKLQotc3RhdGljIHZvaWQgdm1pbmZvICh1bnNpZ25lZCBsb25n
KmZyZWUsIHVuc2lnbmVkIGxvbmcqcmVzZXJ2ZWQsIHVuc2lnbmVkIGxvbmcqY29tbWl0dGVkKTsK
LXN0YXRpYyBpbnQgY3B1aW5mbyAoaW50IHdob2xlLCB1bnNpZ25lZCBsb25nKmtlcm5lbCwgdW5z
aWduZWQgbG9uZyp1c2VyKTsKLQotI2VuZGlmCi0KLS8qCi0gIF9fU1REX0Mgc2hvdWxkIGJlIG5v
bnplcm8gaWYgdXNpbmcgQU5TSS1zdGFuZGFyZCBDIGNvbXBpbGVyLCBhIEMrKwotICBjb21waWxl
ciwgb3IgYSBDIGNvbXBpbGVyIHN1ZmZpY2llbnRseSBjbG9zZSB0byBBTlNJIHRvIGdldCBhd2F5
Ci0gIHdpdGggaXQuCi0qLwotCi0jaWZuZGVmIF9fU1REX0MKLSNpZiBkZWZpbmVkKF9fU1REQ19f
KSB8fCBkZWZpbmVkKF9jcGx1c3BsdXMpCi0jZGVmaW5lIF9fU1REX0MgICAgIDEKLSNlbHNlCi0j
ZGVmaW5lIF9fU1REX0MgICAgIDAKLSNlbmRpZiAKLSNlbmRpZiAvKl9fU1REX0MqLwotCi0KLS8q
Ci0gIFZvaWRfdCogaXMgdGhlIHBvaW50ZXIgdHlwZSB0aGF0IG1hbGxvYyBzaG91bGQgc2F5IGl0
IHJldHVybnMKLSovCi0KLSNpZm5kZWYgVm9pZF90Ci0jaWYgKF9fU1REX0MgfHwgZGVmaW5lZChX
SU4zMikpCi0jZGVmaW5lIFZvaWRfdCAgICAgIHZvaWQKLSNlbHNlCi0jZGVmaW5lIFZvaWRfdCAg
ICAgIGNoYXIKLSNlbmRpZgotI2VuZGlmIC8qVm9pZF90Ki8KLQotI2lmIF9fU1REX0MKLSNpbmNs
dWRlIDxzdGRkZWYuaD4gICAvKiBmb3Igc2l6ZV90ICovCi0jZWxzZQotI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgotI2VuZGlmCi0KLS8qIGRlZmluZSBMQUNLU19VTklTVERfSCBpZiB5b3VyIHN5c3Rl
bSBkb2VzIG5vdCBoYXZlIGEgPHVuaXN0ZC5oPi4gKi8KLQotLyogI2RlZmluZSAgTEFDS1NfVU5J
U1REX0ggKi8KLQotI2lmbmRlZiBMQUNLU19VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgot
I2VuZGlmCi0KLS8qIGRlZmluZSBMQUNLU19TWVNfUEFSQU1fSCBpZiB5b3VyIHN5c3RlbSBkb2Vz
IG5vdCBoYXZlIGEgPHN5cy9wYXJhbS5oPi4gKi8KLQotLyogI2RlZmluZSAgTEFDS1NfU1lTX1BB
UkFNX0ggKi8KLQotCi0jaW5jbHVkZSA8c3RkaW8uaD4gICAgLyogbmVlZGVkIGZvciBtYWxsb2Nf
c3RhdHMgKi8KLSNpbmNsdWRlIDxlcnJuby5oPiAgICAvKiBuZWVkZWQgZm9yIG9wdGlvbmFsIE1B
TExPQ19GQUlMVVJFX0FDVElPTiAqLwotCi0KLS8qCi0gIERlYnVnZ2luZzoKLQotICBCZWNhdXNl
IGZyZWVkIGNodW5rcyBtYXkgYmUgb3ZlcndyaXR0ZW4gd2l0aCBib29ra2VlcGluZyBmaWVsZHMs
IHRoaXMKLSAgbWFsbG9jIHdpbGwgb2Z0ZW4gZGllIHdoZW4gZnJlZWQgbWVtb3J5IGlzIG92ZXJ3
cml0dGVuIGJ5IHVzZXIKLSAgcHJvZ3JhbXMuICBUaGlzIGNhbiBiZSB2ZXJ5IGVmZmVjdGl2ZSAo
YWxiZWl0IGluIGFuIGFubm95aW5nIHdheSkKLSAgaW4gaGVscGluZyB0cmFjayBkb3duIGRhbmds
aW5nIHBvaW50ZXJzLgotCi0gIElmIHlvdSBjb21waWxlIHdpdGggLURERUJVRywgYSBudW1iZXIg
b2YgYXNzZXJ0aW9uIGNoZWNrcyBhcmUKLSAgZW5hYmxlZCB0aGF0IHdpbGwgY2F0Y2ggbW9yZSBt
ZW1vcnkgZXJyb3JzLiBZb3UgcHJvYmFibHkgd29uJ3QgYmUKLSAgYWJsZSB0byBtYWtlIG11Y2gg
c2Vuc2Ugb2YgdGhlIGFjdHVhbCBhc3NlcnRpb24gZXJyb3JzLCBidXQgdGhleQotICBzaG91bGQg
aGVscCB5b3UgbG9jYXRlIGluY29ycmVjdGx5IG92ZXJ3cml0dGVuIG1lbW9yeS4gIFRoZQotICBj
aGVja2luZyBpcyBmYWlybHkgZXh0ZW5zaXZlLCBhbmQgd2lsbCBzbG93IGRvd24gZXhlY3V0aW9u
Ci0gIG5vdGljZWFibHkuIENhbGxpbmcgbWFsbG9jX3N0YXRzIG9yIG1hbGxpbmZvIHdpdGggREVC
VUcgc2V0IHdpbGwKLSAgYXR0ZW1wdCB0byBjaGVjayBldmVyeSBub24tbW1hcHBlZCBhbGxvY2F0
ZWQgYW5kIGZyZWUgY2h1bmsgaW4gdGhlCi0gIGNvdXJzZSBvZiBjb21wdXRpbmcgdGhlIHN1bW1t
YXJpZXMuIChCeSBuYXR1cmUsIG1tYXBwZWQgcmVnaW9ucwotICBjYW5ub3QgYmUgY2hlY2tlZCB2
ZXJ5IG11Y2ggYXV0b21hdGljYWxseS4pCi0KLSAgU2V0dGluZyBERUJVRyBtYXkgYWxzbyBiZSBo
ZWxwZnVsIGlmIHlvdSBhcmUgdHJ5aW5nIHRvIG1vZGlmeQotICB0aGlzIGNvZGUuIFRoZSBhc3Nl
cnRpb25zIGluIHRoZSBjaGVjayByb3V0aW5lcyBzcGVsbCBvdXQgaW4gbW9yZQotICBkZXRhaWwg
dGhlIGFzc3VtcHRpb25zIGFuZCBpbnZhcmlhbnRzIHVuZGVybHlpbmcgdGhlIGFsZ29yaXRobXMu
Ci0KLSAgU2V0dGluZyBERUJVRyBkb2VzIE5PVCBwcm92aWRlIGFuIGF1dG9tYXRlZCBtZWNoYW5p
c20gZm9yIGNoZWNraW5nCi0gIHRoYXQgYWxsIGFjY2Vzc2VzIHRvIG1hbGxvY2VkIG1lbW9yeSBz
dGF5IHdpdGhpbiB0aGVpcgotICBib3VuZHMuIEhvd2V2ZXIsIHRoZXJlIGFyZSBzZXZlcmFsIGFk
ZC1vbnMgYW5kIGFkYXB0YXRpb25zIG9mIHRoaXMKLSAgb3Igb3RoZXIgbWFsbG9jcyBhdmFpbGFi
bGUgdGhhdCBkbyB0aGlzLgotKi8KLQotLyoKLSAgVGhlIHVuc2lnbmVkIGludGVnZXIgdHlwZSB1
c2VkIGZvciBjb21wYXJpbmcgYW55IHR3byBjaHVuayBzaXplcy4KLSAgVGhpcyBzaG91bGQgYmUg
YXQgbGVhc3QgYXMgd2lkZSBhcyBzaXplX3QsIGJ1dCBzaG91bGQgbm90IGJlIHNpZ25lZC4KLSov
Ci0KLSNpZm5kZWYgQ0hVTktfU0laRV9UCi0jZGVmaW5lIENIVU5LX1NJWkVfVCB1bnNpZ25lZCBs
b25nCi0jZW5kaWYKLQotLyogCi0gIFRoZSB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgdXNlZCB0byBo
b2xkIGFkZHJlc3NlcyB3aGVuIHRoZXkgYXJlIGFyZQotICBtYW5pcHVsYXRlZCBhcyBpbnRlZ2Vy
cy4gRXhjZXB0IHRoYXQgaXQgaXMgbm90IGRlZmluZWQgb24gYWxsCi0gIHN5c3RlbXMsIGludHB0
cl90IHdvdWxkIHN1ZmZpY2UuCi0qLwotI2lmbmRlZiBQVFJfVUlOVAotI2RlZmluZSBQVFJfVUlO
VCB1bnNpZ25lZCBsb25nCi0jZW5kaWYKLQotCi0vKgotICBJTlRFUk5BTF9TSVpFX1QgaXMgdGhl
IHdvcmQtc2l6ZSB1c2VkIGZvciBpbnRlcm5hbCBib29ra2VlcGluZwotICBvZiBjaHVuayBzaXpl
cy4KLQotICBUaGUgZGVmYXVsdCB2ZXJzaW9uIGlzIHRoZSBzYW1lIGFzIHNpemVfdC4KLQotICBX
aGlsZSBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBpdCBpcyBiZXN0IHRvIGRlZmluZSB0aGlzIGFz
IGFuCi0gIHVuc2lnbmVkIHR5cGUsIGV2ZW4gaWYgc2l6ZV90IGlzIGEgc2lnbmVkIHR5cGUuIFRo
aXMgbWF5IGF2b2lkIHNvbWUKLSAgYXJ0aWZpY2lhbCBzaXplIGxpbWl0YXRpb25zIG9uIHNvbWUg
c3lzdGVtcy4KLQotICBPbiBhIDY0LWJpdCBtYWNoaW5lLCB5b3UgbWF5IGJlIGFibGUgdG8gcmVk
dWNlIG1hbGxvYyBvdmVyaGVhZCBieQotICBkZWZpbmluZyBJTlRFUk5BTF9TSVpFX1QgdG8gYmUg
YSAzMiBiaXQgYHVuc2lnbmVkIGludCcgYXQgdGhlCi0gIGV4cGVuc2Ugb2Ygbm90IGJlaW5nIGFi
bGUgdG8gaGFuZGxlIG1vcmUgdGhhbiAyXjMyIG9mIG1hbGxvY2VkCi0gIHNwYWNlLiBJZiB0aGlz
IGxpbWl0YXRpb24gaXMgYWNjZXB0YWJsZSwgeW91IGFyZSBlbmNvdXJhZ2VkIHRvIHNldAotICB0
aGlzIHVubGVzcyB5b3UgYXJlIG9uIGEgcGxhdGZvcm0gcmVxdWlyaW5nIDE2Ynl0ZSBhbGlnbm1l
bnRzLiBJbgotICB0aGlzIGNhc2UgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudHMgdHVybiBvdXQg
dG8gbmVnYXRlIGFueQotICBwb3RlbnRpYWwgYWR2YW50YWdlcyBvZiBkZWNyZWFzaW5nIHNpemVf
dCB3b3JkIHNpemUuCi0KLSAgSW1wbGVtZW50b3JzOiBCZXdhcmUgb2YgdGhlIHBvc3NpYmxlIGNv
bWJpbmF0aW9ucyBvZjoKLSAgICAgLSBJTlRFUk5BTF9TSVpFX1QgbWlnaHQgYmUgc2lnbmVkIG9y
IHVuc2lnbmVkLCBtaWdodCBiZSAzMiBvciA2NCBiaXRzLAotICAgICAgIGFuZCBtaWdodCBiZSB0
aGUgc2FtZSB3aWR0aCBhcyBpbnQgb3IgYXMgbG9uZwotICAgICAtIHNpemVfdCBtaWdodCBoYXZl
IGRpZmZlcmVudCB3aWR0aCBhbmQgc2lnbmVkbmVzcyBhcyBJTlRFUk5BTF9TSVpFX1QKLSAgICAg
LSBpbnQgYW5kIGxvbmcgbWlnaHQgYmUgMzIgb3IgNjQgYml0cywgYW5kIG1pZ2h0IGJlIHRoZSBz
YW1lIHdpZHRoCi0gIFRvIGRlYWwgd2l0aCB0aGlzLCBtb3N0IGNvbXBhcmlzb25zIGFuZCBkaWZm
ZXJlbmNlIGNvbXB1dGF0aW9ucwotICBhbW9uZyBJTlRFUk5BTF9TSVpFX1RzIHNob3VsZCBjYXN0
IHRoZW0gdG8gQ0hVTktfU0laRV9ULCBiZWluZwotICBhd2FyZSBvZiB0aGUgZmFjdCB0aGF0IGNh
c3RpbmcgYW4gdW5zaWduZWQgaW50IHRvIGEgd2lkZXIgbG9uZyBkb2VzCi0gIG5vdCBzaWduLWV4
dGVuZC4gKFRoaXMgYWxzbyBtYWtlcyBjaGVja2luZyBmb3IgbmVnYXRpdmUgbnVtYmVycwotICBh
d2t3YXJkLikgU29tZSBvZiB0aGVzZSBjYXN0cyByZXN1bHQgaW4gaGFybWxlc3MgY29tcGlsZXIg
d2FybmluZ3MKLSAgb24gc29tZSBzeXN0ZW1zLgotKi8KLQotI2lmbmRlZiBJTlRFUk5BTF9TSVpF
X1QKLSNkZWZpbmUgSU5URVJOQUxfU0laRV9UIHNpemVfdAotI2VuZGlmCi0KLS8qIFRoZSBjb3Jy
ZXNwb25kaW5nIHdvcmQgc2l6ZSAqLwotI2RlZmluZSBTSVpFX1NaICAgICAgICAgICAgICAgIChz
aXplb2YoSU5URVJOQUxfU0laRV9UKSkKLQotCi0KLS8qCi0gIE1BTExPQ19BTElHTk1FTlQgaXMg
dGhlIG1pbmltdW0gYWxpZ25tZW50IGZvciBtYWxsb2MnZWQgY2h1bmtzLgotICBJdCBtdXN0IGJl
IGEgcG93ZXIgb2YgdHdvIGF0IGxlYXN0IDIgKiBTSVpFX1NaLCBldmVuIG9uIG1hY2hpbmVzCi0g
IGZvciB3aGljaCBzbWFsbGVyIGFsaWdubWVudHMgd291bGQgc3VmZmljZS4gSXQgbWF5IGJlIGRl
ZmluZWQgYXMKLSAgbGFyZ2VyIHRoYW4gdGhpcyB0aG91Z2guIE5vdGUgaG93ZXZlciB0aGF0IGNv
ZGUgYW5kIGRhdGEgc3RydWN0dXJlcwotICBhcmUgb3B0aW1pemVkIGZvciB0aGUgY2FzZSBvZiA4
LWJ5dGUgYWxpZ25tZW50LgotKi8KLQotCi0jaWZuZGVmIE1BTExPQ19BTElHTk1FTlQKLSNkZWZp
bmUgTUFMTE9DX0FMSUdOTUVOVCAgICAgICAoMiAqIFNJWkVfU1opCi0jZW5kaWYKLQotLyogVGhl
IGNvcnJlc3BvbmRpbmcgYml0IG1hc2sgdmFsdWUgKi8KLSNkZWZpbmUgTUFMTE9DX0FMSUdOX01B
U0sgICAgICAoTUFMTE9DX0FMSUdOTUVOVCAtIDEpCi0KLQotCi0vKgotICBSRUFMTE9DX1pFUk9f
QllURVNfRlJFRVMgc2hvdWxkIGJlIHNldCBpZiBhIGNhbGwgdG8KLSAgcmVhbGxvYyB3aXRoIHpl
cm8gYnl0ZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGEgY2FsbCB0byBmcmVlLgotICBTb21lIHBl
b3BsZSB0aGluayBpdCBzaG91bGQuIE90aGVyd2lzZSwgc2luY2UgdGhpcyBtYWxsb2MKLSAgcmV0
dXJucyBhIHVuaXF1ZSBwb2ludGVyIGZvciBtYWxsb2MoMCksIHNvIGRvZXMgcmVhbGxvYyhwLCAw
KS4KLSovCi0KLS8qICAgI2RlZmluZSBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgKi8KLQotLyoK
LSAgVFJJTV9GQVNUQklOUyBjb250cm9scyB3aGV0aGVyIGZyZWUoKSBvZiBhIHZlcnkgc21hbGwg
Y2h1bmsgY2FuCi0gIGltbWVkaWF0ZWx5IGxlYWQgdG8gdHJpbW1pbmcuIFNldHRpbmcgdG8gdHJ1
ZSAoMSkgY2FuIHJlZHVjZSBtZW1vcnkKLSAgZm9vdHByaW50LCBidXQgd2lsbCBhbG1vc3QgYWx3
YXlzIHNsb3cgZG93biBwcm9ncmFtcyB0aGF0IHVzZSBhIGxvdAotICBvZiBzbWFsbCBjaHVua3Mu
Ci0KLSAgRGVmaW5lIHRoaXMgb25seSBpZiB5b3UgYXJlIHdpbGxpbmcgdG8gZ2l2ZSB1cCBzb21l
IHNwZWVkIHRvIG1vcmUKLSAgYWdncmVzc2l2ZWx5IHJlZHVjZSBzeXN0ZW0tbGV2ZWwgbWVtb3J5
IGZvb3RwcmludCB3aGVuIHJlbGVhc2luZwotICBtZW1vcnkgaW4gcHJvZ3JhbXMgdGhhdCB1c2Ug
bWFueSBzbWFsbCBjaHVua3MuICBZb3UgY2FuIGdldAotICBlc3NlbnRpYWxseSB0aGUgc2FtZSBl
ZmZlY3QgYnkgc2V0dGluZyBNWEZBU1QgdG8gMCwgYnV0IHRoaXMgY2FuCi0gIGxlYWQgdG8gZXZl
biBncmVhdGVyIHNsb3dkb3ducyBpbiBwcm9ncmFtcyB1c2luZyBtYW55IHNtYWxsIGNodW5rcy4K
LSAgVFJJTV9GQVNUQklOUyBpcyBhbiBpbi1iZXR3ZWVuIGNvbXBpbGUtdGltZSBvcHRpb24sIHRo
YXQgZGlzYWJsZXMKLSAgb25seSB0aG9zZSBjaHVua3MgYm9yZGVyaW5nIHRvcG1vc3QgbWVtb3J5
IGZyb20gYmVpbmcgcGxhY2VkIGluCi0gIGZhc3RiaW5zLgotKi8KLQotI2lmbmRlZiBUUklNX0ZB
U1RCSU5TCi0jZGVmaW5lIFRSSU1fRkFTVEJJTlMgIDAKLSNlbmRpZgotCi0KLS8qCi0gIFVTRV9E
TF9QUkVGSVggd2lsbCBwcmVmaXggYWxsIHB1YmxpYyByb3V0aW5lcyB3aXRoIHRoZSBzdHJpbmcg
J2RsJy4KLSAgVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiB5b3Ugb25seSB3YW50IHRvIHVzZSB0aGlz
IG1hbGxvYyBpbiBvbmUgcGFydCAKLSAgb2YgYSBwcm9ncmFtLCB1c2luZyB5b3VyIHJlZ3VsYXIg
c3lzdGVtIG1hbGxvYyBlbHNld2hlcmUuCi0qLwotCi0jZGVmaW5lIFVTRV9ETF9QUkVGSVgKLQot
Ci0vKgotICBVU0VfTUFMTE9DX0xPQ0sgY2F1c2VzIHdyYXBwZXIgZnVuY3Rpb25zIHRvIHN1cnJv
dW5kIGVhY2gKLSAgY2FsbGFibGUgcm91dGluZSB3aXRoIHB0aHJlYWQgbXV0ZXggbG9jay91bmxv
Y2suCi0KLSAgVVNFX01BTExPQ19MT0NLIGZvcmNlcyBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVS
UyB0byBiZSBkZWZpbmVkCi0qLwotCi0KLS8qICNkZWZpbmUgVVNFX01BTExPQ19MT0NLICovCi0K
LQotLyoKLSAgSWYgVVNFX1BVQkxJQ19NQUxMT0NfV1JBUFBFUlMgaXMgZGVmaW5lZCwgZXZlcnkg
cHVibGljIHJvdXRpbmUgaXMKLSAgYWN0dWFsbHkgYSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgZmly
c3QgY2FsbHMgTUFMTE9DX1BSRUFDVElPTiwgdGhlbgotICBjYWxscyB0aGUgaW50ZXJuYWwgcm91
dGluZSwgYW5kIGZvbGxvd3MgaXQgd2l0aAotICBNQUxMT0NfUE9TVEFDVElPTi4gVGhpcyBpcyBu
ZWVkZWQgZm9yIGxvY2tpbmcsIGJ1dCB5b3UgY2FuIGFsc28gdXNlCi0gIHRoaXMsIHdpdGhvdXQg
VVNFX01BTExPQ19MT0NLLCBmb3IgcHVycG9zZXMgb2YgaW50ZXJjZXB0aW9uLAotICBpbnN0cnVt
ZW50YXRpb24sIGV0Yy4gSXQgaXMgYSBzYWQgZmFjdCB0aGF0IHVzaW5nIHdyYXBwZXJzIG9mdGVu
Ci0gIG5vdGljZWFibHkgZGVncmFkZXMgcGVyZm9ybWFuY2Ugb2YgbWFsbG9jLWludGVuc2l2ZSBw
cm9ncmFtcy4KLSovCi0KLSNpZmRlZiBVU0VfTUFMTE9DX0xPQ0sKLSNkZWZpbmUgVVNFX1BVQkxJ
Q19NQUxMT0NfV1JBUFBFUlMKLSNlbHNlCi0vKiAjZGVmaW5lIFVTRV9QVUJMSUNfTUFMTE9DX1dS
QVBQRVJTICovCi0jZW5kaWYKLQotCi0vKiAKLSAgIFR3by1waGFzZSBuYW1lIHRyYW5zbGF0aW9u
LgotICAgQWxsIG9mIHRoZSBhY3R1YWwgcm91dGluZXMgYXJlIGdpdmVuIG1hbmdsZWQgbmFtZXMu
Ci0gICBXaGVuIHdyYXBwZXJzIGFyZSB1c2VkLCB0aGV5IGJlY29tZSB0aGUgcHVibGljIGNhbGxh
YmxlIHZlcnNpb25zLgotICAgV2hlbiBETF9QUkVGSVggaXMgdXNlZCwgdGhlIGNhbGxhYmxlIG5h
bWVzIGFyZSBwcmVmaXhlZC4KLSovCi0KLSNpZm5kZWYgVVNFX1BVQkxJQ19NQUxMT0NfV1JBUFBF
UlMKLSNkZWZpbmUgY0FMTE9jICAgICAgcHVibGljX2NBTExPYwotI2RlZmluZSBmUkVlICAgICAg
ICBwdWJsaWNfZlJFZQotI2RlZmluZSBjRlJFZSAgICAgICBwdWJsaWNfY0ZSRWUKLSNkZWZpbmUg
bUFMTE9jICAgICAgcHVibGljX21BTExPYwotI2RlZmluZSBtRU1BTElHbiAgICBwdWJsaWNfbUVN
QUxJR24KLSNkZWZpbmUgckVBTExPYyAgICAgcHVibGljX3JFQUxMT2MKLSNkZWZpbmUgdkFMTE9j
ICAgICAgcHVibGljX3ZBTExPYwotI2RlZmluZSBwVkFMTE9jICAgICBwdWJsaWNfcFZBTExPYwot
I2RlZmluZSBtQUxMSU5GbyAgICBwdWJsaWNfbUFMTElORm8KLSNkZWZpbmUgbUFMTE9QdCAgICAg
cHVibGljX21BTExPUHQKLSNkZWZpbmUgbVRSSW0gICAgICAgcHVibGljX21UUkltCi0jZGVmaW5l
IG1TVEFUcyAgICAgIHB1YmxpY19tU1RBVHMKLSNkZWZpbmUgbVVTQUJMZSAgICAgcHVibGljX21V
U0FCTGUKLSNkZWZpbmUgaUNBTExPYyAgICAgcHVibGljX2lDQUxMT2MKLSNkZWZpbmUgaUNPTUFM
TE9jICAgcHVibGljX2lDT01BTExPYwotI2VuZGlmCi0KLSNpZmRlZiBVU0VfRExfUFJFRklYCi0j
ZGVmaW5lIHB1YmxpY19jQUxMT2MgICAgbWFpbl90aHJlYWRfY2FsbG9jCi0jZGVmaW5lIHB1Ymxp
Y19mUkVlICAgICAgbWFpbl90aHJlYWRfZnJlZQotI2RlZmluZSBwdWJsaWNfY0ZSRWUgICAgIG1h
aW5fdGhyZWFkX2NmcmVlCi0jZGVmaW5lIHB1YmxpY19tQUxMT2MgICAgbWFpbl90aHJlYWRfbWFs
bG9jCi0jZGVmaW5lIHB1YmxpY19tRU1BTElHbiAgbWFpbl90aHJlYWRfbWVtYWxpZ24KLSNkZWZp
bmUgcHVibGljX3JFQUxMT2MgICBtYWluX3RocmVhZF9yZWFsbG9jCi0jZGVmaW5lIHB1YmxpY192
QUxMT2MgICAgbWFpbl90aHJlYWRfdmFsbG9jCi0jZGVmaW5lIHB1YmxpY19wVkFMTE9jICAgbWFp
bl90aHJlYWRfcHZhbGxvYwotI2RlZmluZSBwdWJsaWNfbUFMTElORm8gIG1haW5fdGhyZWFkX21h
bGxpbmZvCi0jZGVmaW5lIHB1YmxpY19tQUxMT1B0ICAgbWFpbl90aHJlYWRfbWFsbG9wdAotI2Rl
ZmluZSBwdWJsaWNfbVRSSW0gICAgIG1haW5fdGhyZWFkX21hbGxvY190cmltCi0jZGVmaW5lIHB1
YmxpY19tU1RBVHMgICAgbWFpbl90aHJlYWRfbWFsbG9jX3N0YXRzCi0jZGVmaW5lIHB1YmxpY19t
VVNBQkxlICAgbWFpbl90aHJlYWRfbWFsbG9jX3VzYWJsZV9zaXplCi0jZGVmaW5lIHB1YmxpY19p
Q0FMTE9jICAgbWFpbl90aHJlYWRfaW5kZXBlbmRlbnRfY2FsbG9jCi0jZGVmaW5lIHB1YmxpY19p
Q09NQUxMT2MgbWFpbl90aHJlYWRfaW5kZXBlbmRlbnRfY29tYWxsb2MKLSNlbHNlIC8qIFVTRV9E
TF9QUkVGSVggKi8KLSNkZWZpbmUgcHVibGljX2NBTExPYyAgICBjYWxsb2MKLSNkZWZpbmUgcHVi
bGljX2ZSRWUgICAgICBmcmVlCi0jZGVmaW5lIHB1YmxpY19jRlJFZSAgICAgY2ZyZWUKLSNkZWZp
bmUgcHVibGljX21BTExPYyAgICBtYWxsb2MKLSNkZWZpbmUgcHVibGljX21FTUFMSUduICBtZW1h
bGlnbgotI2RlZmluZSBwdWJsaWNfckVBTExPYyAgIHJlYWxsb2MKLSNkZWZpbmUgcHVibGljX3ZB
TExPYyAgICB2YWxsb2MKLSNkZWZpbmUgcHVibGljX3BWQUxMT2MgICBwdmFsbG9jCi0jZGVmaW5l
IHB1YmxpY19tQUxMSU5GbyAgbWFsbGluZm8KLSNkZWZpbmUgcHVibGljX21BTExPUHQgICBtYWxs
b3B0Ci0jZGVmaW5lIHB1YmxpY19tVFJJbSAgICAgbWFsbG9jX3RyaW0KLSNkZWZpbmUgcHVibGlj
X21TVEFUcyAgICBtYWxsb2Nfc3RhdHMKLSNkZWZpbmUgcHVibGljX21VU0FCTGUgICBtYWxsb2Nf
dXNhYmxlX3NpemUKLSNkZWZpbmUgcHVibGljX2lDQUxMT2MgICBpbmRlcGVuZGVudF9jYWxsb2MK
LSNkZWZpbmUgcHVibGljX2lDT01BTExPYyBpbmRlcGVuZGVudF9jb21hbGxvYwotI2VuZGlmIC8q
IFVTRV9ETF9QUkVGSVggKi8KLQotCi0vKgotICBIQVZFX01FTUNQWSBzaG91bGQgYmUgZGVmaW5l
ZCBpZiB5b3UgYXJlIG5vdCBvdGhlcndpc2UgdXNpbmcKLSAgQU5TSSBTVEQgQywgYnV0IHN0aWxs
IGhhdmUgbWVtY3B5IGFuZCBtZW1zZXQgaW4geW91ciBDIGxpYnJhcnkKLSAgYW5kIHdhbnQgdG8g
dXNlIHRoZW0gaW4gY2FsbG9jIGFuZCByZWFsbG9jLiBPdGhlcndpc2Ugc2ltcGxlCi0gIG1hY3Jv
IHZlcnNpb25zIGFyZSBkZWZpbmVkIGJlbG93LgotCi0gIFVTRV9NRU1DUFkgc2hvdWxkIGJlIGRl
ZmluZWQgYXMgMSBpZiB5b3UgYWN0dWFsbHkgd2FudCB0bwotICBoYXZlIG1lbXNldCBhbmQgbWVt
Y3B5IGNhbGxlZC4gUGVvcGxlIHJlcG9ydCB0aGF0IHRoZSBtYWNybwotICB2ZXJzaW9ucyBhcmUg
ZmFzdGVyIHRoYW4gbGliYyB2ZXJzaW9ucyBvbiBzb21lIHN5c3RlbXMuCi0gIAotICBFdmVuIGlm
IFVTRV9NRU1DUFkgaXMgc2V0IHRvIDEsIGxvb3BzIHRvIGNvcHkvY2xlYXIgc21hbGwgY2h1bmtz
Ci0gIChvZiA8PSAzNiBieXRlcykgYXJlIG1hbnVhbGx5IHVucm9sbGVkIGluIHJlYWxsb2MgYW5k
IGNhbGxvYy4KLSovCi0KLSNkZWZpbmUgSEFWRV9NRU1DUFkKLQotI2lmbmRlZiBVU0VfTUVNQ1BZ
Ci0jaWZkZWYgSEFWRV9NRU1DUFkKLSNkZWZpbmUgVVNFX01FTUNQWSAxCi0jZWxzZQotI2RlZmlu
ZSBVU0VfTUVNQ1BZIDAKLSNlbmRpZgotI2VuZGlmCi0KLQotI2lmIChfX1NURF9DIHx8IGRlZmlu
ZWQoSEFWRV9NRU1DUFkpKQotCi0jaWZkZWYgV0lOMzIKLS8qIE9uIFdpbjMyIG1lbXNldCBhbmQg
bWVtY3B5IGFyZSBhbHJlYWR5IGRlY2xhcmVkIGluIHdpbmRvd3MuaCAqLwotI2Vsc2UKLSNpZiBf
X1NURF9DCi1leHRlcm4gIkMiIHsKLXZvaWQqIG1lbXNldCh2b2lkKiwgaW50LCBzaXplX3QpOwot
dm9pZCogbWVtY3B5KHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKLX0KLSNlbHNlCi1leHRl
cm4gIkMiIHsKLVZvaWRfdCogbWVtc2V0KCk7Ci1Wb2lkX3QqIG1lbWNweSgpOwotfQotI2VuZGlm
Ci0jZW5kaWYKLSNlbmRpZgotCi0vKgotICBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gaXMgdGhlIGFj
dGlvbiB0byB0YWtlIGJlZm9yZSAicmV0dXJuIDAiIHdoZW4KLSAgbWFsbG9jIGZhaWxzIHRvIGJl
IGFibGUgdG8gcmV0dXJuIG1lbW9yeSwgZWl0aGVyIGJlY2F1c2UgbWVtb3J5IGlzCi0gIGV4aGF1
c3RlZCBvciBiZWNhdXNlIG9mIGlsbGVnYWwgYXJndW1lbnRzLgotICAKLSAgQnkgZGVmYXVsdCwg
c2V0cyBlcnJubyBpZiBydW5uaW5nIG9uIFNURF9DIHBsYXRmb3JtLCBlbHNlIGRvZXMgbm90aGlu
Zy4gIAotKi8KLQotI2lmbmRlZiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KLSNpZiBfX1NURF9DCi0j
ZGVmaW5lIE1BTExPQ19GQUlMVVJFX0FDVElPTiBcCi0gICBlcnJubyA9IEVOT01FTTsKLQotI2Vs
c2UKLSNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCi0jZW5kaWYKLSNlbmRpZgotCi0vKgot
ICBNT1JFQ09SRS1yZWxhdGVkIGRlY2xhcmF0aW9ucy4gQnkgZGVmYXVsdCwgcmVseSBvbiBzYnJr
Ci0qLwotCi0KLSNpZmRlZiBMQUNLU19VTklTVERfSAotI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiAhZGVmaW5lZChfX09wZW5CU0RfXykgJiYgIWRlZmluZWQoX19OZXRCU0RfXykKLSNpZiBf
X1NURF9DCi1leHRlcm4gVm9pZF90KiAgICAgc2JyayhwdHJkaWZmX3QpOwotI2Vsc2UKLWV4dGVy
biBWb2lkX3QqICAgICBzYnJrKCk7Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLS8qCi0gIE1P
UkVDT1JFIGlzIHRoZSBuYW1lIG9mIHRoZSByb3V0aW5lIHRvIGNhbGwgdG8gb2J0YWluIG1vcmUg
bWVtb3J5Ci0gIGZyb20gdGhlIHN5c3RlbS4gIFNlZSBiZWxvdyBmb3IgZ2VuZXJhbCBndWlkYW5j
ZSBvbiB3cml0aW5nCi0gIGFsdGVybmF0aXZlIE1PUkVDT1JFIGZ1bmN0aW9ucywgYXMgd2VsbCBh
cyBhIHZlcnNpb24gZm9yIFdJTjMyIGFuZCBhCi0gIHNhbXBsZSB2ZXJzaW9uIGZvciBwcmUtT1NY
IG1hY29zLgotKi8KLQotI2lmbmRlZiBNT1JFQ09SRQotI2RlZmluZSBNT1JFQ09SRSBzYnJrCi0j
ZW5kaWYKLQotLyoKLSAgTU9SRUNPUkVfRkFJTFVSRSBpcyB0aGUgdmFsdWUgcmV0dXJuZWQgdXBv
biBmYWlsdXJlIG9mIE1PUkVDT1JFCi0gIGFzIHdlbGwgYXMgbW1hcC4gU2luY2UgaXQgY2Fubm90
IGJlIGFuIG90aGVyd2lzZSB2YWxpZCBtZW1vcnkgYWRkcmVzcywKLSAgYW5kIG11c3QgcmVmbGVj
dCB2YWx1ZXMgb2Ygc3RhbmRhcmQgc3lzIGNhbGxzLCB5b3UgcHJvYmFibHkgb3VnaHQgbm90Ci0g
IHRyeSB0byByZWRlZmluZSBpdC4KLSovCi0KLSNpZm5kZWYgTU9SRUNPUkVfRkFJTFVSRQotI2Rl
ZmluZSBNT1JFQ09SRV9GQUlMVVJFICgtMSkKLSNlbmRpZgotCi0vKgotICBJZiBNT1JFQ09SRV9D
T05USUdVT1VTIGlzIHRydWUsIHRha2UgYWR2YW50YWdlIG9mIGZhY3QgdGhhdAotICBjb25zZWN1
dGl2ZSBjYWxscyB0byBNT1JFQ09SRSB3aXRoIHBvc2l0aXZlIGFyZ3VtZW50cyBhbHdheXMgcmV0
dXJuCi0gIGNvbnRpZ3VvdXMgaW5jcmVhc2luZyBhZGRyZXNzZXMuICBUaGlzIGlzIHRydWUgb2Yg
dW5peCBzYnJrLiAgRXZlbgotICBpZiBub3QgZGVmaW5lZCwgd2hlbiByZWdpb25zIGhhcHBlbiB0
byBiZSBjb250aWd1b3VzLCBtYWxsb2Mgd2lsbAotICBwZXJtaXQgYWxsb2NhdGlvbnMgc3Bhbm5p
bmcgcmVnaW9ucyBvYnRhaW5lZCBmcm9tIGRpZmZlcmVudAotICBjYWxscy4gQnV0IGRlZmluaW5n
IHRoaXMgd2hlbiBhcHBsaWNhYmxlIGVuYWJsZXMgc29tZSBzdHJvbmdlcgotICBjb25zaXN0ZW5j
eSBjaGVja3MgYW5kIHNwYWNlIGVmZmljaWVuY2llcy4gCi0qLwotCi0jaWZuZGVmIE1PUkVDT1JF
X0NPTlRJR1VPVVMKLSNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9VUyAxCi0jZW5kaWYKLQotLyoK
LSAgRGVmaW5lIE1PUkVDT1JFX0NBTk5PVF9UUklNIGlmIHlvdXIgdmVyc2lvbiBvZiBNT1JFQ09S
RQotICBjYW5ub3QgcmVsZWFzZSBzcGFjZSBiYWNrIHRvIHRoZSBzeXN0ZW0gd2hlbiBnaXZlbiBu
ZWdhdGl2ZQotICBhcmd1bWVudHMuIFRoaXMgaXMgZ2VuZXJhbGx5IG5lY2Vzc2FyeSBvbmx5IGlm
IHlvdSBhcmUgdXNpbmcKLSAgYSBoYW5kLWNyYWZ0ZWQgTU9SRUNPUkUgZnVuY3Rpb24gdGhhdCBj
YW5ub3QgaGFuZGxlIG5lZ2F0aXZlIGFyZ3VtZW50cy4KLSovCi0KLS8qICNkZWZpbmUgTU9SRUNP
UkVfQ0FOTk9UX1RSSU0gKi8KLQotCi0vKgotICBEZWZpbmUgSEFWRV9NTUFQIGFzIHRydWUgdG8g
b3B0aW9uYWxseSBtYWtlIG1hbGxvYygpIHVzZSBtbWFwKCkgdG8KLSAgYWxsb2NhdGUgdmVyeSBs
YXJnZSBibG9ja3MuICBUaGVzZSB3aWxsIGJlIHJldHVybmVkIHRvIHRoZQotICBvcGVyYXRpbmcg
c3lzdGVtIGltbWVkaWF0ZWx5IGFmdGVyIGEgZnJlZSgpLiBBbHNvLCBpZiBtbWFwCi0gIGlzIGF2
YWlsYWJsZSwgaXQgaXMgdXNlZCBhcyBhIGJhY2t1cCBzdHJhdGVneSBpbiBjYXNlcyB3aGVyZQot
ICBNT1JFQ09SRSBmYWlscyB0byBwcm92aWRlIHNwYWNlIGZyb20gc3lzdGVtLgotCi0gIFRoaXMg
bWFsbG9jIGlzIGJlc3QgdHVuZWQgdG8gd29yayB3aXRoIG1tYXAgZm9yIGxhcmdlIHJlcXVlc3Rz
LgotICBJZiB5b3UgZG8gbm90IGhhdmUgbW1hcCwgb3BlcmF0aW9ucyBpbnZvbHZpbmcgdmVyeSBs
YXJnZSBjaHVua3MgKDFNQgotICBvciBzbykgbWF5IGJlIHNsb3dlciB0aGFuIHlvdSdkIGxpa2Uu
Ci0qLwotCi0jaWZuZGVmIEhBVkVfTU1BUAotI2RlZmluZSBIQVZFX01NQVAgMQotI2VuZGlmCi0K
LSNpZiBIQVZFX01NQVAKLS8qIAotICAgU3RhbmRhcmQgdW5peCBtbWFwIHVzaW5nIC9kZXYvemVy
byBjbGVhcnMgbWVtb3J5IHNvIGNhbGxvYyBkb2Vzbid0Ci0gICBuZWVkIHRvLgotKi8KLQotI2lm
bmRlZiBNTUFQX0NMRUFSUwotI2RlZmluZSBNTUFQX0NMRUFSUyAxCi0jZW5kaWYKLQotI2Vsc2Ug
Lyogbm8gbW1hcCAqLwotI2lmbmRlZiBNTUFQX0NMRUFSUwotI2RlZmluZSBNTUFQX0NMRUFSUyAw
Ci0jZW5kaWYKLSNlbmRpZgotCi0KLS8qIAotICAgTU1BUF9BU19NT1JFQ09SRV9TSVpFIGlzIHRo
ZSBtaW5pbXVtIG1tYXAgc2l6ZSBhcmd1bWVudCB0byB1c2UgaWYKLSAgIHNicmsgZmFpbHMsIGFu
ZCBtbWFwIGlzIHVzZWQgYXMgYSBiYWNrdXAgKHdoaWNoIGlzIGRvbmUgb25seSBpZgotICAgSEFW
RV9NTUFQKS4gIFRoZSB2YWx1ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgcGFnZSBzaXplLiAgVGhp
cwotICAgYmFja3VwIHN0cmF0ZWd5IGdlbmVyYWxseSBhcHBsaWVzIG9ubHkgd2hlbiBzeXN0ZW1z
IGhhdmUgImhvbGVzIiBpbgotICAgYWRkcmVzcyBzcGFjZSwgc28gc2JyayBjYW5ub3QgcGVyZm9y
bSBjb250aWd1b3VzIGV4cGFuc2lvbiwgYnV0Ci0gICB0aGVyZSBpcyBzdGlsbCBzcGFjZSBhdmFp
bGFibGUgb24gc3lzdGVtLiAgT24gc3lzdGVtcyBmb3Igd2hpY2gKLSAgIHRoaXMgaXMga25vd24g
dG8gYmUgdXNlZnVsIChpLmUuIG1vc3QgbGludXgga2VybmVscyksIHRoaXMgb2NjdXJzCi0gICBv
bmx5IHdoZW4gcHJvZ3JhbXMgYWxsb2NhdGUgaHVnZSBhbW91bnRzIG9mIG1lbW9yeS4gIEJldHdl
ZW4gdGhpcywKLSAgIGFuZCB0aGUgZmFjdCB0aGF0IG1tYXAgcmVnaW9ucyB0ZW5kIHRvIGJlIGxp
bWl0ZWQsIHRoZSBzaXplIHNob3VsZAotICAgYmUgbGFyZ2UsIHRvIGF2b2lkIHRvbyBtYW55IG1t
YXAgY2FsbHMgYW5kIHRodXMgYXZvaWQgcnVubmluZyBvdXQKLSAgIG9mIGtlcm5lbCByZXNvdXJj
ZXMuCi0qLwotCi0jaWZuZGVmIE1NQVBfQVNfTU9SRUNPUkVfU0laRQotI2RlZmluZSBNTUFQX0FT
X01PUkVDT1JFX1NJWkUgKDEwMjQgKiAxMDI0KQotI2VuZGlmCi0KLS8qCi0gIERlZmluZSBIQVZF
X01SRU1BUCB0byBtYWtlIHJlYWxsb2MoKSB1c2UgbXJlbWFwKCkgdG8gcmUtYWxsb2NhdGUKLSAg
bGFyZ2UgYmxvY2tzLiAgVGhpcyBpcyBjdXJyZW50bHkgb25seSBwb3NzaWJsZSBvbiBMaW51eCB3
aXRoCi0gIGtlcm5lbCB2ZXJzaW9ucyBuZXdlciB0aGFuIDEuMy43Ny4KLSovCi0KLSNpZm5kZWYg
SEFWRV9NUkVNQVAKLSNpZmRlZiBsaW51eAotI2RlZmluZSBIQVZFX01SRU1BUCAxCi0jZWxzZQot
I2RlZmluZSBIQVZFX01SRU1BUCAwCi0jZW5kaWYKLQotI2VuZGlmIC8qIEhBVkVfTU1BUCAqLwot
Ci0KLS8qCi0gIFRoZSBzeXN0ZW0gcGFnZSBzaXplLiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0
aGlzIG1hbGxvYyBtYW5hZ2VzCi0gIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0gaW4gcGFnZS1zaXpl
IHVuaXRzLiAgTm90ZSB0aGF0IHRoaXMgdmFsdWUgaXMKLSAgY2FjaGVkIGR1cmluZyBpbml0aWFs
aXphdGlvbiBpbnRvIGEgZmllbGQgb2YgbWFsbG9jX3N0YXRlLiBTbyBldmVuCi0gIGlmIG1hbGxv
Y19nZXRwYWdlc2l6ZSBpcyBhIGZ1bmN0aW9uLCBpdCBpcyBvbmx5IGNhbGxlZCBvbmNlLgotCi0g
IFRoZSBmb2xsb3dpbmcgbWVjaGFuaWNzIGZvciBnZXRwYWdlc2l6ZSB3ZXJlIGFkYXB0ZWQgZnJv
bSBic2QvZ251Ci0gIGdldHBhZ2VzaXplLmguIElmIG5vbmUgb2YgdGhlIHN5c3RlbS1wcm9iZXMg
aGVyZSBhcHBseSwgYSB2YWx1ZSBvZgotICA0MDk2IGlzIHVzZWQsIHdoaWNoIHNob3VsZCBiZSBP
SzogSWYgdGhleSBkb24ndCBhcHBseSwgdGhlbiB1c2luZwotICB0aGUgYWN0dWFsIHZhbHVlIHBy
b2JhYmx5IGRvZXNuJ3QgaW1wYWN0IHBlcmZvcm1hbmNlLgotKi8KLQotCi0jaWZuZGVmIG1hbGxv
Y19nZXRwYWdlc2l6ZQotCi0jaWZuZGVmIExBQ0tTX1VOSVNURF9ICi0jICBpbmNsdWRlIDx1bmlz
dGQuaD4KLSNlbmRpZgotCi0jICBpZmRlZiBfU0NfUEFHRVNJWkUgICAgICAgICAvKiBzb21lIFNW
UjQgc3lzdGVtcyBvbWl0IGFuIHVuZGVyc2NvcmUgKi8KLSMgICAgaWZuZGVmIF9TQ19QQUdFX1NJ
WkUKLSMgICAgICBkZWZpbmUgX1NDX1BBR0VfU0laRSBfU0NfUEFHRVNJWkUKLSMgICAgZW5kaWYK
LSMgIGVuZGlmCi0KLSMgIGlmZGVmIF9TQ19QQUdFX1NJWkUKLSMgICAgZGVmaW5lIG1hbGxvY19n
ZXRwYWdlc2l6ZSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpCi0jICBlbHNlCi0jICAgIGlmIGRlZmlu
ZWQoQlNEKSB8fCBkZWZpbmVkKERHVVgpIHx8IGRlZmluZWQoSEFWRV9HRVRQQUdFU0laRSkKLSAg
ICAgICBleHRlcm4gc2l6ZV90IGdldHBhZ2VzaXplKCk7Ci0jICAgICAgZGVmaW5lIG1hbGxvY19n
ZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpCi0jICAgIGVsc2UKLSMgICAgICBpZmRlZiBXSU4zMiAv
KiB1c2Ugc3VwcGxpZWQgZW11bGF0aW9uIG9mIGdldHBhZ2VzaXplICovCi0jICAgICAgICBkZWZp
bmUgbWFsbG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkgCi0jICAgICAgZWxzZQotIyAgICAg
ICAgaWZuZGVmIExBQ0tTX1NZU19QQVJBTV9ICi0jICAgICAgICAgIGluY2x1ZGUgPHN5cy9wYXJh
bS5oPgotIyAgICAgICAgZW5kaWYKLSMgICAgICAgIGlmZGVmIEVYRUNfUEFHRVNJWkUKLSMgICAg
ICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBFWEVDX1BBR0VTSVpFCi0jICAgICAgICBl
bHNlCi0jICAgICAgICAgIGlmZGVmIE5CUEcKLSMgICAgICAgICAgICBpZm5kZWYgQ0xTSVpFCi0j
ICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEcKLSMgICAgICAgICAg
ICBlbHNlCi0jICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIChOQlBHICog
Q0xTSVpFKQotIyAgICAgICAgICAgIGVuZGlmCi0jICAgICAgICAgIGVsc2UKLSMgICAgICAgICAg
ICBpZmRlZiBOQlBDCi0jICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5C
UEMKLSMgICAgICAgICAgICBlbHNlCi0jICAgICAgICAgICAgICBpZmRlZiBQQUdFU0laRQotIyAg
ICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIFBBR0VTSVpFCi0jICAgICAg
ICAgICAgICBlbHNlIC8qIGp1c3QgZ3Vlc3MgKi8KLSMgICAgICAgICAgICAgICAgZGVmaW5lIG1h
bGxvY19nZXRwYWdlc2l6ZSAoNDA5NikgCi0jICAgICAgICAgICAgICBlbmRpZgotIyAgICAgICAg
ICAgIGVuZGlmCi0jICAgICAgICAgIGVuZGlmCi0jICAgICAgICBlbmRpZgotIyAgICAgIGVuZGlm
Ci0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qCi0gIFRoaXMgdmVyc2lvbiBvZiBt
YWxsb2Mgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIFNWSUQvWFBHIG1hbGxpbmZvCi0gIHJvdXRpbmUg
dGhhdCByZXR1cm5zIGEgc3RydWN0IGNvbnRhaW5pbmcgdXNhZ2UgcHJvcGVydGllcyBhbmQKLSAg
c3RhdGlzdGljcy4gSXQgc2hvdWxkIHdvcmsgb24gYW55IFNWSUQvWFBHIGNvbXBsaWFudCBzeXN0
ZW0gdGhhdCBoYXMKLSAgYSAvdXNyL2luY2x1ZGUvbWFsbG9jLmggZGVmaW5pbmcgc3RydWN0IG1h
bGxpbmZvLiAoSWYgeW91J2QgbGlrZSB0bwotICBpbnN0YWxsIHN1Y2ggYSB0aGluZyB5b3Vyc2Vs
ZiwgY3V0IG91dCB0aGUgcHJlbGltaW5hcnkgZGVjbGFyYXRpb25zCi0gIGFzIGRlc2NyaWJlZCBh
Ym92ZSBhbmQgYmVsb3cgYW5kIHNhdmUgdGhlbSBpbiBhIG1hbGxvYy5oIGZpbGUuIEJ1dAotICB0
aGVyZSdzIG5vIGNvbXBlbGxpbmcgcmVhc29uIHRvIGJvdGhlciB0byBkbyB0aGlzLikKLQotICBU
aGUgbWFpbiBkZWNsYXJhdGlvbiBuZWVkZWQgaXMgdGhlIG1hbGxpbmZvIHN0cnVjdCB0aGF0IGlz
IHJldHVybmVkCi0gIChieS1jb3B5KSBieSBtYWxsaW5mbygpLiAgVGhlIFNWSUQvWFBHIG1hbGxv
aW5mbyBzdHJ1Y3QgY29udGFpbnMgYQotICBidW5jaCBvZiBmaWVsZHMgdGhhdCBhcmUgbm90IGV2
ZW4gbWVhbmluZ2Z1bCBpbiB0aGlzIHZlcnNpb24gb2YKLSAgbWFsbG9jLiAgVGhlc2UgZmllbGRz
IGFyZSBhcmUgaW5zdGVhZCBmaWxsZWQgYnkgbWFsbGluZm8oKSB3aXRoCi0gIG90aGVyIG51bWJl
cnMgdGhhdCBtaWdodCBiZSBvZiBpbnRlcmVzdC4KLQotICBIQVZFX1VTUl9JTkNMVURFX01BTExP
Q19IIHNob3VsZCBiZSBzZXQgaWYgeW91IGhhdmUgYQotICAvdXNyL2luY2x1ZGUvbWFsbG9jLmgg
ZmlsZSB0aGF0IGluY2x1ZGVzIGEgZGVjbGFyYXRpb24gb2Ygc3RydWN0Ci0gIG1hbGxpbmZvLiAg
SWYgc28sIGl0IGlzIGluY2x1ZGVkOyBlbHNlIGFuIFNWSUQyL1hQRzIgY29tcGxpYW50Ci0gIHZl
cnNpb24gaXMgZGVjbGFyZWQgYmVsb3cuICBUaGVzZSBtdXN0IGJlIHByZWNpc2VseSB0aGUgc2Ft
ZSBmb3IKLSAgbWFsbGluZm8oKSB0byB3b3JrLiAgVGhlIG9yaWdpbmFsIFNWSUQgdmVyc2lvbiBv
ZiB0aGlzIHN0cnVjdCwKLSAgZGVmaW5lZCBvbiBtb3N0IHN5c3RlbXMgd2l0aCBtYWxsaW5mbywg
ZGVjbGFyZXMgYWxsIGZpZWxkcyBhcwotICBpbnRzLiBCdXQgc29tZSBvdGhlcnMgZGVmaW5lIGFz
IHVuc2lnbmVkIGxvbmcuIElmIHlvdXIgc3lzdGVtCi0gIGRlZmluZXMgdGhlIGZpZWxkcyB1c2lu
ZyBhIHR5cGUgb2YgZGlmZmVyZW50IHdpZHRoIHRoYW4gbGlzdGVkIGhlcmUsCi0gIHlvdSBtdXN0
ICNpbmNsdWRlIHlvdXIgc3lzdGVtIHZlcnNpb24gYW5kICNkZWZpbmUKLSAgSEFWRV9VU1JfSU5D
TFVERV9NQUxMT0NfSC4KLSovCi0KLS8qICNkZWZpbmUgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0Nf
SCAqLwotCi0jaWZkZWYgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSAotI2luY2x1ZGUgIi91c3Iv
aW5jbHVkZS9tYWxsb2MuaCIKLSNlbHNlCi0KLS8qIFNWSUQyL1hQRyBtYWxsaW5mbyBzdHJ1Y3R1
cmUgKi8KLQotc3RydWN0IG1hbGxpbmZvIHsKLSAgaW50IGFyZW5hOyAgICAvKiBub24tbW1hcHBl
ZCBzcGFjZSBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0gKi8KLSAgaW50IG9yZGJsa3M7ICAvKiBudW1i
ZXIgb2YgZnJlZSBjaHVua3MgKi8KLSAgaW50IHNtYmxrczsgICAvKiBudW1iZXIgb2YgZmFzdGJp
biBibG9ja3MgKi8KLSAgaW50IGhibGtzOyAgICAvKiBudW1iZXIgb2YgbW1hcHBlZCByZWdpb25z
ICovCi0gIGludCBoYmxraGQ7ICAgLyogc3BhY2UgaW4gbW1hcHBlZCByZWdpb25zICovCi0gIGlu
dCB1c21ibGtzOyAgLyogbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KLSAgaW50IGZz
bWJsa3M7ICAvKiBzcGFjZSBhdmFpbGFibGUgaW4gZnJlZWQgZmFzdGJpbiBibG9ja3MgKi8KLSAg
aW50IHVvcmRibGtzOyAvKiB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KLSAgaW50IGZvcmRibGtz
OyAvKiB0b3RhbCBmcmVlIHNwYWNlICovCi0gIGludCBrZWVwY29zdDsgLyogdG9wLW1vc3QsIHJl
bGVhc2FibGUgKHZpYSBtYWxsb2NfdHJpbSkgc3BhY2UgKi8KLX07Ci0KLS8qCi0gIFNWSUQvWFBH
IGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbWV0ZXIgbnVtYmVycyBmb3IgbWFsbG9wdCwKLSAg
bm9ybWFsbHkgZGVmaW5lZCBpbiBtYWxsb2MuaC4gIE9ubHkgb25lIG9mIHRoZXNlIChNX01YRkFT
VCkgaXMgdXNlZAotICBpbiB0aGlzIG1hbGxvYy4gVGhlIG90aGVycyAoTV9OTEJMS1MsIE1fR1JB
SU4sIE1fS0VFUCkgZG9uJ3QgYXBwbHksCi0gIHNvIHNldHRpbmcgdGhlbSBoYXMgbm8gZWZmZWN0
LiBCdXQgdGhpcyBtYWxsb2MgYWxzbyBzdXBwb3J0cyBvdGhlcgotICBvcHRpb25zIGluIG1hbGxv
cHQgZGVzY3JpYmVkIGJlbG93LgotKi8KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0gZGVzY3Jp
cHRpb24gb2YgcHVibGljIHJvdXRpbmVzIC0tLS0tLS0tLS0tLSAqLwotCi0vKgotICBtYWxsb2Mo
c2l6ZV90IG4pCi0gIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5r
IG9mIGF0IGxlYXN0IG4gYnl0ZXMsIG9yIG51bGwKLSAgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxl
LiBBZGRpdGlvbmFsbHksIG9uIGZhaWx1cmUsIGVycm5vIGlzCi0gIHNldCB0byBFTk9NRU0gb24g
QU5TSSBDIHN5c3RlbXMuCi0KLSAgSWYgbiBpcyB6ZXJvLCBtYWxsb2MgcmV0dXJucyBhIG1pbnVt
dW0tc2l6ZWQgY2h1bmsuIChUaGUgbWluaW11bQotICBzaXplIGlzIDE2IGJ5dGVzIG9uIG1vc3Qg
MzJiaXQgc3lzdGVtcywgYW5kIDI0IG9yIDMyIGJ5dGVzIG9uIDY0Yml0Ci0gIHN5c3RlbXMuKSAg
T24gbW9zdCBzeXN0ZW1zLCBzaXplX3QgaXMgYW4gdW5zaWduZWQgdHlwZSwgc28gY2FsbHMKLSAg
d2l0aCBuZWdhdGl2ZSBhcmd1bWVudHMgYXJlIGludGVycHJldGVkIGFzIHJlcXVlc3RzIGZvciBo
dWdlIGFtb3VudHMKLSAgb2Ygc3BhY2UsIHdoaWNoIHdpbGwgb2Z0ZW4gZmFpbC4gVGhlIG1heGlt
dW0gc3VwcG9ydGVkIHZhbHVlIG9mIG4KLSAgZGlmZmVycyBhY3Jvc3Mgc3lzdGVtcywgYnV0IGlz
IGluIGFsbCBjYXNlcyBsZXNzIHRoYW4gdGhlIG1heGltdW0KLSAgcmVwcmVzZW50YWJsZSB2YWx1
ZSBvZiBhIHNpemVfdC4KLSovCi0jaWYgX19TVERfQwotVm9pZF90KiAgcHVibGljX21BTExPYyhz
aXplX3QpOwotI2Vsc2UKLVZvaWRfdCogIHB1YmxpY19tQUxMT2MoKTsKLSNlbmRpZgotCi0vKgot
ICBmcmVlKFZvaWRfdCogcCkKLSAgUmVsZWFzZXMgdGhlIGNodW5rIG9mIG1lbW9yeSBwb2ludGVk
IHRvIGJ5IHAsIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQotICBhbGxvY2F0ZWQgdXNpbmcgbWFs
bG9jIG9yIGEgcmVsYXRlZCByb3V0aW5lIHN1Y2ggYXMgcmVhbGxvYy4KLSAgSXQgaGFzIG5vIGVm
ZmVjdCBpZiBwIGlzIG51bGwuIEl0IGNhbiBoYXZlIGFyYml0cmFyeSAoaS5lLiwgYmFkISkKLSAg
ZWZmZWN0cyBpZiBwIGhhcyBhbHJlYWR5IGJlZW4gZnJlZWQuCi0KLSAgVW5sZXNzIGRpc2FibGVk
ICh1c2luZyBtYWxsb3B0KSwgZnJlZWluZyB2ZXJ5IGxhcmdlIHNwYWNlcyB3aWxsCi0gIHdoZW4g
cG9zc2libGUsIGF1dG9tYXRpY2FsbHkgdHJpZ2dlciBvcGVyYXRpb25zIHRoYXQgZ2l2ZQotICBi
YWNrIHVudXNlZCBtZW1vcnkgdG8gdGhlIHN5c3RlbSwgdGh1cyByZWR1Y2luZyBwcm9ncmFtIGZv
b3RwcmludC4KLSovCi0jaWYgX19TVERfQwotdm9pZCAgICAgcHVibGljX2ZSRWUoVm9pZF90Kik7
Ci0jZWxzZQotdm9pZCAgICAgcHVibGljX2ZSRWUoKTsKLSNlbmRpZgotCi0vKgotICBjYWxsb2Mo
c2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUpOwotICBSZXR1cm5zIGEgcG9p
bnRlciB0byBuX2VsZW1lbnRzICogZWxlbWVudF9zaXplIGJ5dGVzLCB3aXRoIGFsbCBsb2NhdGlv
bnMKLSAgc2V0IHRvIHplcm8uCi0qLwotI2lmIF9fU1REX0MKLVZvaWRfdCogIHB1YmxpY19jQUxM
T2Moc2l6ZV90LCBzaXplX3QpOwotI2Vsc2UKLVZvaWRfdCogIHB1YmxpY19jQUxMT2MoKTsKLSNl
bmRpZgotCi0vKgotICByZWFsbG9jKFZvaWRfdCogcCwgc2l6ZV90IG4pCi0gIFJldHVybnMgYSBw
b2ludGVyIHRvIGEgY2h1bmsgb2Ygc2l6ZSBuIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgZGF0YQot
ICBhcyBkb2VzIGNodW5rIHAgdXAgdG8gdGhlIG1pbmltdW0gb2YgKG4sIHAncyBzaXplKSBieXRl
cywgb3IgbnVsbAotICBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUuIAotCi0gIFRoZSByZXR1cm5l
ZCBwb2ludGVyIG1heSBvciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHAuIFRoZSBhbGdvcml0aG0K
LSAgcHJlZmVycyBleHRlbmRpbmcgcCB3aGVuIHBvc3NpYmxlLCBvdGhlcndpc2UgaXQgZW1wbG95
cyB0aGUKLSAgZXF1aXZhbGVudCBvZiBhIG1hbGxvYy1jb3B5LWZyZWUgc2VxdWVuY2UuCi0KLSAg
SWYgcCBpcyBudWxsLCByZWFsbG9jIGlzIGVxdWl2YWxlbnQgdG8gbWFsbG9jLiAgCi0KLSAgSWYg
c3BhY2UgaXMgbm90IGF2YWlsYWJsZSwgcmVhbGxvYyByZXR1cm5zIG51bGwsIGVycm5vIGlzIHNl
dCAoaWYgb24KLSAgQU5TSSkgYW5kIHAgaXMgTk9UIGZyZWVkLgotCi0gIGlmIG4gaXMgZm9yIGZl
d2VyIGJ5dGVzIHRoYW4gYWxyZWFkeSBoZWxkIGJ5IHAsIHRoZSBuZXdseSB1bnVzZWQKLSAgc3Bh
Y2UgaXMgbG9wcGVkIG9mZiBhbmQgZnJlZWQgaWYgcG9zc2libGUuICBVbmxlc3MgdGhlICNkZWZp
bmUKLSAgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTIGlzIHNldCwgcmVhbGxvYyB3aXRoIGEgc2l6
ZSBhcmd1bWVudCBvZgotICB6ZXJvIChyZSlhbGxvY2F0ZXMgYSBtaW5pbXVtLXNpemVkIGNodW5r
LgotCi0gIExhcmdlIGNodW5rcyB0aGF0IHdlcmUgaW50ZXJuYWxseSBvYnRhaW5lZCB2aWEgbW1h
cCB3aWxsIGFsd2F5cwotICBiZSByZWFsbG9jYXRlZCB1c2luZyBtYWxsb2MtY29weS1mcmVlIHNl
cXVlbmNlcyB1bmxlc3MKLSAgdGhlIHN5c3RlbSBzdXBwb3J0cyBNUkVNQVAgKGN1cnJlbnRseSBv
bmx5IGxpbnV4KS4KLQotICBUaGUgb2xkIHVuaXggcmVhbGxvYyBjb252ZW50aW9uIG9mIGFsbG93
aW5nIHRoZSBsYXN0LWZyZWUnZCBjaHVuawotICB0byBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRv
IHJlYWxsb2MgaXMgbm90IHN1cHBvcnRlZC4KLSovCi0jaWYgX19TVERfQwotVm9pZF90KiAgcHVi
bGljX3JFQUxMT2MoVm9pZF90Kiwgc2l6ZV90KTsKLSNlbHNlCi1Wb2lkX3QqICBwdWJsaWNfckVB
TExPYygpOwotI2VuZGlmCi0KLS8qCi0gIG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCBuKTsKLSAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgY2h1bmsgb2Yg
biBieXRlcywgYWxpZ25lZAotICBpbiBhY2NvcmQgd2l0aCB0aGUgYWxpZ25tZW50IGFyZ3VtZW50
LgotCi0gIFRoZSBhbGlnbm1lbnQgYXJndW1lbnQgc2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLiBJ
ZiB0aGUgYXJndW1lbnQgaXMKLSAgbm90IGEgcG93ZXIgb2YgdHdvLCB0aGUgbmVhcmVzdCBncmVh
dGVyIHBvd2VyIGlzIHVzZWQuCi0gIDgtYnl0ZSBhbGlnbm1lbnQgaXMgZ3VhcmFudGVlZCBieSBu
b3JtYWwgbWFsbG9jIGNhbGxzLCBzbyBkb24ndAotICBib3RoZXIgY2FsbGluZyBtZW1hbGlnbiB3
aXRoIGFuIGFyZ3VtZW50IG9mIDggb3IgbGVzcy4KLQotICBPdmVycmVsaWFuY2Ugb24gbWVtYWxp
Z24gaXMgYSBzdXJlIHdheSB0byBmcmFnbWVudCBzcGFjZS4KLSovCi0jaWYgX19TVERfQwotVm9p
ZF90KiAgcHVibGljX21FTUFMSUduKHNpemVfdCwgc2l6ZV90KTsKLSNlbHNlCi1Wb2lkX3QqICBw
dWJsaWNfbUVNQUxJR24oKTsKLSNlbmRpZgotCi0vKgotICB2YWxsb2Moc2l6ZV90IG4pOwotICBF
cXVpdmFsZW50IHRvIG1lbWFsaWduKHBhZ2VzaXplLCBuKSwgd2hlcmUgcGFnZXNpemUgaXMgdGhl
IHBhZ2UKLSAgc2l6ZSBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgcGFnZXNpemUgaXMgdW5rbm93biwg
NDA5NiBpcyB1c2VkLgotKi8KLSNpZiBfX1NURF9DCi1Wb2lkX3QqICBwdWJsaWNfdkFMTE9jKHNp
emVfdCk7Ci0jZWxzZQotVm9pZF90KiAgcHVibGljX3ZBTExPYygpOwotI2VuZGlmCi0KLQotCi0v
KgotICBtYWxsb3B0KGludCBwYXJhbWV0ZXJfbnVtYmVyLCBpbnQgcGFyYW1ldGVyX3ZhbHVlKQot
ICBTZXRzIHR1bmFibGUgcGFyYW1ldGVycyBUaGUgZm9ybWF0IGlzIHRvIHByb3ZpZGUgYQotICAo
cGFyYW1ldGVyLW51bWJlciwgcGFyYW1ldGVyLXZhbHVlKSBwYWlyLiAgbWFsbG9wdCB0aGVuIHNl
dHMgdGhlCi0gIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHRvIHRoZSBhcmd1bWVudCB2YWx1ZSBp
ZiBpdCBjYW4gKGkuZS4sIHNvCi0gIGxvbmcgYXMgdGhlIHZhbHVlIGlzIG1lYW5pbmdmdWwpLCBh
bmQgcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgZWxzZQotICAwLiAgU1ZJRC9YUEcvQU5TSSBkZWZp
bmVzIGZvdXIgc3RhbmRhcmQgcGFyYW0gbnVtYmVycyBmb3IgbWFsbG9wdCwKLSAgbm9ybWFsbHkg
ZGVmaW5lZCBpbiBtYWxsb2MuaC4gIE9ubHkgb25lIG9mIHRoZXNlIChNX01YRkFTVCkgaXMgdXNl
ZAotICBpbiB0aGlzIG1hbGxvYy4gVGhlIG90aGVycyAoTV9OTEJMS1MsIE1fR1JBSU4sIE1fS0VF
UCkgZG9uJ3QgYXBwbHksCi0gIHNvIHNldHRpbmcgdGhlbSBoYXMgbm8gZWZmZWN0LiBCdXQgdGhp
cyBtYWxsb2MgYWxzbyBzdXBwb3J0cyBmb3VyCi0gIG90aGVyIG9wdGlvbnMgaW4gbWFsbG9wdC4g
U2VlIGJlbG93IGZvciBkZXRhaWxzLiAgQnJpZWZseSwgc3VwcG9ydGVkCi0gIHBhcmFtZXRlcnMg
YXJlIGFzIGZvbGxvd3MgKGxpc3RlZCBkZWZhdWx0cyBhcmUgZm9yICJ0eXBpY2FsIgotICBjb25m
aWd1cmF0aW9ucykuCi0KLSAgU3ltYm9sICAgICAgICAgICAgcGFyYW0gIyAgIGRlZmF1bHQgICAg
YWxsb3dlZCBwYXJhbSB2YWx1ZXMKLSAgTV9NWEZBU1QgICAgICAgICAgMSAgICAgICAgIDY0ICAg
ICAgICAgMC04MCAgKDAgZGlzYWJsZXMgZmFzdGJpbnMpCi0gIE1fVFJJTV9USFJFU0hPTEQgLTEg
ICAgICAgICAyNTYqMTAyNCAgIGFueSAgICgtMVUgZGlzYWJsZXMgdHJpbW1pbmcpCi0gIE1fVE9Q
X1BBRCAgICAgICAgLTIgICAgICAgICAwICAgICAgICAgIGFueSAgCi0gIE1fTU1BUF9USFJFU0hP
TEQgLTMgICAgICAgICAyNTYqMTAyNCAgIGFueSAgIChvciAwIGlmIG5vIE1NQVAgc3VwcG9ydCkK
LSAgTV9NTUFQX01BWCAgICAgICAtNCAgICAgICAgIDY1NTM2ICAgICAgYW55ICAgKDAgZGlzYWJs
ZXMgdXNlIG9mIG1tYXApCi0qLwotI2lmIF9fU1REX0MKLWludCAgICAgIHB1YmxpY19tQUxMT1B0
KGludCwgaW50KTsKLSNlbHNlCi1pbnQgICAgICBwdWJsaWNfbUFMTE9QdCgpOwotI2VuZGlmCi0K
LQotLyoKLSAgbWFsbGluZm8oKQotICBSZXR1cm5zIChieSBjb3B5KSBhIHN0cnVjdCBjb250YWlu
aW5nIHZhcmlvdXMgc3VtbWFyeSBzdGF0aXN0aWNzOgotCi0gIGFyZW5hOiAgICAgY3VycmVudCB0
b3RhbCBub24tbW1hcHBlZCBieXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0gCi0gIG9yZGJsa3M6
ICAgdGhlIG51bWJlciBvZiBmcmVlIGNodW5rcyAKLSAgc21ibGtzOiAgICB0aGUgbnVtYmVyIG9m
IGZhc3RiaW4gYmxvY2tzIChpLmUuLCBzbWFsbCBjaHVua3MgdGhhdAotICAgICAgICAgICAgICAg
aGF2ZSBiZWVuIGZyZWVkIGJ1dCBub3QgdXNlIHJlc3VzZWQgb3IgY29uc29saWRhdGVkKQotICBo
YmxrczogICAgIGN1cnJlbnQgbnVtYmVyIG9mIG1tYXBwZWQgcmVnaW9ucyAKLSAgaGJsa2hkOiAg
ICB0b3RhbCBieXRlcyBoZWxkIGluIG1tYXBwZWQgcmVnaW9ucyAKLSAgdXNtYmxrczogICB0aGUg
bWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UuIFRoaXMgd2lsbCBiZSBncmVhdGVyCi0gICAg
ICAgICAgICAgICAgdGhhbiBjdXJyZW50IHRvdGFsIGlmIHRyaW1taW5nIGhhcyBvY2N1cnJlZC4K
LSAgZnNtYmxrczogICB0b3RhbCBieXRlcyBoZWxkIGluIGZhc3RiaW4gYmxvY2tzIAotICB1b3Jk
YmxrczogIGN1cnJlbnQgdG90YWwgYWxsb2NhdGVkIHNwYWNlIChub3JtYWwgb3IgbW1hcHBlZCkK
LSAgZm9yZGJsa3M6ICB0b3RhbCBmcmVlIHNwYWNlIAotICBrZWVwY29zdDogIHRoZSBtYXhpbXVt
IG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIGlkZWFsbHkgYmUgcmVsZWFzZWQKLSAgICAgICAg
ICAgICAgIGJhY2sgdG8gc3lzdGVtIHZpYSBtYWxsb2NfdHJpbS4gKCJpZGVhbGx5IiBtZWFucyB0
aGF0Ci0gICAgICAgICAgICAgICBpdCBpZ25vcmVzIHBhZ2UgcmVzdHJpY3Rpb25zIGV0Yy4pCi0K
LSAgQmVjYXVzZSB0aGVzZSBmaWVsZHMgYXJlIGludHMsIGJ1dCBpbnRlcm5hbCBib29ra2VlcGlu
ZyBtYXkKLSAgYmUga2VwdCBhcyBsb25ncywgdGhlIHJlcG9ydGVkIHZhbHVlcyBtYXkgd3JhcCBh
cm91bmQgemVybyBhbmQgCi0gIHRodXMgYmUgaW5hY2N1cmF0ZS4KLSovCi0jaWYgX19TVERfQwot
c3RydWN0IG1hbGxpbmZvIHB1YmxpY19tQUxMSU5Gbyh2b2lkKTsKLSNlbHNlCi1zdHJ1Y3QgbWFs
bGluZm8gcHVibGljX21BTExJTkZvKCk7Ci0jZW5kaWYKLQotLyoKLSAgaW5kZXBlbmRlbnRfY2Fs
bG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplLCBWb2lkX3QqIGNodW5r
c1tdKTsKLQotICBpbmRlcGVuZGVudF9jYWxsb2MgaXMgc2ltaWxhciB0byBjYWxsb2MsIGJ1dCBp
bnN0ZWFkIG9mIHJldHVybmluZyBhCi0gIHNpbmdsZSBjbGVhcmVkIHNwYWNlLCBpdCByZXR1cm5z
IGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIG5fZWxlbWVudHMKLSAgaW5kZXBlbmRlbnQgZWxlbWVu
dHMgdGhhdCBjYW4gaG9sZCBjb250ZW50cyBvZiBzaXplIGVsZW1fc2l6ZSwgZWFjaAotICBvZiB3
aGljaCBzdGFydHMgb3V0IGNsZWFyZWQsIGFuZCBjYW4gYmUgaW5kZXBlbmRlbnRseSBmcmVlZCwK
LSAgcmVhbGxvYydlZCBldGMuIFRoZSBlbGVtZW50cyBhcmUgZ3VhcmFudGVlZCB0byBiZSBhZGph
Y2VudGx5Ci0gIGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBvY2N1ciB3aXRo
IG11bHRpcGxlIGNhbGxvY3Mgb3IKLSAgbWFsbG9jcyksIHdoaWNoIG1heSBhbHNvIGltcHJvdmUg
Y2FjaGUgbG9jYWxpdHkgaW4gc29tZQotICBhcHBsaWNhdGlvbnMuCi0KLSAgVGhlICJjaHVua3Mi
IGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCwgd2hpY2ggaXMKLSAgcHJv
YmFibHkgdGhlIG1vc3QgdHlwaWNhbCB1c2FnZSkuIElmIGl0IGlzIG51bGwsIHRoZSByZXR1cm5l
ZCBhcnJheQotICBpcyBpdHNlbGYgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgYWxz
byBiZSBmcmVlZCB3aGVuIGl0IGlzCi0gIG5vIGxvbmdlciBuZWVkZWQuIE90aGVyd2lzZSwgdGhl
IGNodW5rcyBhcnJheSBtdXN0IGJlIG9mIGF0IGxlYXN0Ci0gIG5fZWxlbWVudHMgaW4gbGVuZ3Ro
LiBJdCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUgcG9pbnRlcnMgdG8gdGhlCi0gIGNodW5rcy4KLQot
ICBJbiBlaXRoZXIgY2FzZSwgaW5kZXBlbmRlbnRfY2FsbG9jIHJldHVybnMgdGhpcyBwb2ludGVy
IGFycmF5LCBvcgotICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVu
dHMgaXMgemVybyBhbmQgImNodW5rcyIKLSAgaXMgbnVsbCwgaXQgcmV0dXJucyBhIGNodW5rIHJl
cHJlc2VudGluZyBhbiBhcnJheSB3aXRoIHplcm8gZWxlbWVudHMKLSAgKHdoaWNoIHNob3VsZCBi
ZSBmcmVlZCBpZiBub3Qgd2FudGVkKS4KLQotICBFYWNoIGVsZW1lbnQgbXVzdCBiZSBpbmRpdmlk
dWFsbHkgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIKLSAgbmVlZGVkLiBJZiB5b3UnZCBsaWtl
IHRvIGluc3RlYWQgYmUgYWJsZSB0byBmcmVlIGFsbCBhdCBvbmNlLCB5b3UKLSAgc2hvdWxkIGlu
c3RlYWQgdXNlIHJlZ3VsYXIgY2FsbG9jIGFuZCBhc3NpZ24gcG9pbnRlcnMgaW50byB0aGlzCi0g
IHNwYWNlIHRvIHJlcHJlc2VudCBlbGVtZW50cy4gIChJbiB0aGlzIGNhc2UgdGhvdWdoLCB5b3Ug
Y2Fubm90Ci0gIGluZGVwZW5kZW50bHkgZnJlZSBlbGVtZW50cy4pCi0gIAotICBpbmRlcGVuZGVu
dF9jYWxsb2Mgc2ltcGxpZmllcyBhbmQgc3BlZWRzIHVwIGltcGxlbWVudGF0aW9ucyBvZiBtYW55
Ci0gIGtpbmRzIG9mIHBvb2xzLiAgSXQgbWF5IGFsc28gYmUgdXNlZnVsIHdoZW4gY29uc3RydWN0
aW5nIGxhcmdlIGRhdGEKLSAgc3RydWN0dXJlcyB0aGF0IGluaXRpYWxseSBoYXZlIGEgZml4ZWQg
bnVtYmVyIG9mIGZpeGVkLXNpemVkIG5vZGVzLAotICBidXQgdGhlIG51bWJlciBpcyBub3Qga25v
d24gYXQgY29tcGlsZSB0aW1lLCBhbmQgc29tZSBvZiB0aGUgbm9kZXMKLSAgbWF5IGxhdGVyIG5l
ZWQgdG8gYmUgZnJlZWQuIEZvciBleGFtcGxlOgotCi0gIHN0cnVjdCBOb2RlIHsgaW50IGl0ZW07
IHN0cnVjdCBOb2RlKiBuZXh0OyB9OwotICAKLSAgc3RydWN0IE5vZGUqIGJ1aWxkX2xpc3QoKSB7
Ci0gICAgc3RydWN0IE5vZGUqKiBwb29sOwotICAgIGludCBuID0gcmVhZF9udW1iZXJfb2Zfbm9k
ZXNfbmVlZGVkKCk7Ci0gICAgaWYgKG4gPD0gMCkgcmV0dXJuIDA7Ci0gICAgcG9vbCA9IChzdHJ1
Y3QgTm9kZSoqKShpbmRlcGVuZGVudF9jYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBOb2RlKSwgMCk7
Ci0gICAgaWYgKHBvb2wgPT0gMCkgZGllKCk7IAotICAgIC8vIG9yZ2FuaXplIGludG8gYSBsaW5r
ZWQgbGlzdC4uLiAKLSAgICBzdHJ1Y3QgTm9kZSogZmlyc3QgPSBwb29sWzBdOwotICAgIGZvciAo
aSA9IDA7IGkgPCBuLTE7ICsraSkgCi0gICAgICBwb29sW2ldLT5uZXh0ID0gcG9vbFtpKzFdOwot
ICAgIGZyZWUocG9vbCk7ICAgICAvLyBDYW4gbm93IGZyZWUgdGhlIGFycmF5IChvciBub3QsIGlm
IGl0IGlzIG5lZWRlZCBsYXRlcikKLSAgICByZXR1cm4gZmlyc3Q7Ci0gIH0KLSovCi0jaWYgX19T
VERfQwotVm9pZF90KiogcHVibGljX2lDQUxMT2Moc2l6ZV90LCBzaXplX3QsIFZvaWRfdCoqKTsK
LSNlbHNlCi1Wb2lkX3QqKiBwdWJsaWNfaUNBTExPYygpOwotI2VuZGlmCi0KLS8qCi0gIGluZGVw
ZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwgVm9pZF90
KiBjaHVua3NbXSk7Ci0KLSAgaW5kZXBlbmRlbnRfY29tYWxsb2MgYWxsb2NhdGVzLCBhbGwgYXQg
b25jZSwgYSBzZXQgb2Ygbl9lbGVtZW50cwotICBjaHVua3Mgd2l0aCBzaXplcyBpbmRpY2F0ZWQg
aW4gdGhlICJzaXplcyIgYXJyYXkuICAgIEl0IHJldHVybnMKLSAgYW4gYXJyYXkgb2YgcG9pbnRl
cnMgdG8gdGhlc2UgZWxlbWVudHMsIGVhY2ggb2Ygd2hpY2ggY2FuIGJlCi0gIGluZGVwZW5kZW50
bHkgZnJlZWQsIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8K
LSAgYmUgYWRqYWNlbnRseSBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2Nj
dXIgd2l0aAotICBtdWx0aXBsZSBjYWxsb2NzIG9yIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBp
bXByb3ZlIGNhY2hlIGxvY2FsaXR5Ci0gIGluIHNvbWUgYXBwbGljYXRpb25zLgotCi0gIFRoZSAi
Y2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwpLiBJZiBpdCBp
cyBudWxsCi0gIHRoZSByZXR1cm5lZCBhcnJheSBpcyBpdHNlbGYgZHluYW1pY2FsbHkgYWxsb2Nh
dGVkIGFuZCBzaG91bGQgYWxzbwotICBiZSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVk
ZWQuIE90aGVyd2lzZSwgdGhlIGNodW5rcyBhcnJheQotICBtdXN0IGJlIG9mIGF0IGxlYXN0IG5f
ZWxlbWVudHMgaW4gbGVuZ3RoLiBJdCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUKLSAgcG9pbnRlcnMg
dG8gdGhlIGNodW5rcy4KLQotICBJbiBlaXRoZXIgY2FzZSwgaW5kZXBlbmRlbnRfY29tYWxsb2Mg
cmV0dXJucyB0aGlzIHBvaW50ZXIgYXJyYXksIG9yCi0gIG51bGwgaWYgdGhlIGFsbG9jYXRpb24g
ZmFpbGVkLiAgSWYgbl9lbGVtZW50cyBpcyB6ZXJvIGFuZCBjaHVua3MgaXMKLSAgbnVsbCwgaXQg
cmV0dXJucyBhIGNodW5rIHJlcHJlc2VudGluZyBhbiBhcnJheSB3aXRoIHplcm8gZWxlbWVudHMK
LSAgKHdoaWNoIHNob3VsZCBiZSBmcmVlZCBpZiBub3Qgd2FudGVkKS4KLSAgCi0gIEVhY2ggZWxl
bWVudCBtdXN0IGJlIGluZGl2aWR1YWxseSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlcgotICBu
ZWVkZWQuIElmIHlvdSdkIGxpa2UgdG8gaW5zdGVhZCBiZSBhYmxlIHRvIGZyZWUgYWxsIGF0IG9u
Y2UsIHlvdQotICBzaG91bGQgaW5zdGVhZCB1c2UgYSBzaW5nbGUgcmVndWxhciBtYWxsb2MsIGFu
ZCBhc3NpZ24gcG9pbnRlcnMgYXQKLSAgcGFydGljdWxhciBvZmZzZXRzIGluIHRoZSBhZ2dyZWdh
dGUgc3BhY2UuIChJbiB0aGlzIGNhc2UgdGhvdWdoLCB5b3UgCi0gIGNhbm5vdCBpbmRlcGVuZGVu
dGx5IGZyZWUgZWxlbWVudHMuKQotCi0gIGluZGVwZW5kZW50X2NvbWFsbGFjIGRpZmZlcnMgZnJv
bSBpbmRlcGVuZGVudF9jYWxsb2MgaW4gdGhhdCBlYWNoCi0gIGVsZW1lbnQgbWF5IGhhdmUgYSBk
aWZmZXJlbnQgc2l6ZSwgYW5kIGFsc28gdGhhdCBpdCBkb2VzIG5vdAotICBhdXRvbWF0aWNhbGx5
IGNsZWFyIGVsZW1lbnRzLgotCi0gIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBiZSB1c2VkIHRv
IHNwZWVkIHVwIGFsbG9jYXRpb24gaW4gY2FzZXMKLSAgd2hlcmUgc2V2ZXJhbCBzdHJ1Y3RzIG9y
IG9iamVjdHMgbXVzdCBhbHdheXMgYmUgYWxsb2NhdGVkIGF0IHRoZQotICBzYW1lIHRpbWUuICBG
b3IgZXhhbXBsZToKLQotICBzdHJ1Y3QgSGVhZCB7IC4uLiB9Ci0gIHN0cnVjdCBGb290IHsgLi4u
IH0KLQotICB2b2lkIHNlbmRfbWVzc2FnZShjaGFyKiBtc2cpIHsKLSAgICBpbnQgbXNnbGVuID0g
c3RybGVuKG1zZyk7Ci0gICAgc2l6ZV90IHNpemVzWzNdID0geyBzaXplb2Yoc3RydWN0IEhlYWQp
LCBtc2dsZW4sIHNpemVvZihzdHJ1Y3QgRm9vdCkgfTsKLSAgICB2b2lkKiBjaHVua3NbM107Ci0g
ICAgaWYgKGluZGVwZW5kZW50X2NvbWFsbG9jKDMsIHNpemVzLCBjaHVua3MpID09IDApCi0gICAg
ICBkaWUoKTsKLSAgICBzdHJ1Y3QgSGVhZCogaGVhZCA9IChzdHJ1Y3QgSGVhZCopKGNodW5rc1sw
XSk7Ci0gICAgY2hhciogICAgICAgIGJvZHkgPSAoY2hhciopKGNodW5rc1sxXSk7Ci0gICAgc3Ry
dWN0IEZvb3QqIGZvb3QgPSAoc3RydWN0IEZvb3QqKShjaHVua3NbMl0pOwotICAgIC8vIC4uLgot
ICB9Ci0KLSAgSW4gZ2VuZXJhbCB0aG91Z2gsIGluZGVwZW5kZW50X2NvbWFsbG9jIGlzIHdvcnRo
IHVzaW5nIG9ubHkgZm9yCi0gIGxhcmdlciB2YWx1ZXMgb2Ygbl9lbGVtZW50cy4gRm9yIHNtYWxs
IHZhbHVlcywgeW91IHByb2JhYmx5IHdvbid0Ci0gIGRldGVjdCBlbm91Z2ggZGlmZmVyZW5jZSBm
cm9tIHNlcmllcyBvZiBtYWxsb2MgY2FsbHMgdG8gYm90aGVyLgotCi0gIE92ZXJ1c2Ugb2YgaW5k
ZXBlbmRlbnRfY29tYWxsb2MgY2FuIGluY3JlYXNlIG92ZXJhbGwgbWVtb3J5IHVzYWdlLAotICBz
aW5jZSBpdCBjYW5ub3QgcmV1c2UgZXhpc3Rpbmcgbm9uY29udGlndW91cyBzbWFsbCBjaHVua3Mg
dGhhdAotICBtaWdodCBiZSBhdmFpbGFibGUgZm9yIHNvbWUgb2YgdGhlIGVsZW1lbnRzLgotKi8K
LSNpZiBfX1NURF9DCi1Wb2lkX3QqKiBwdWJsaWNfaUNPTUFMTE9jKHNpemVfdCwgc2l6ZV90Kiwg
Vm9pZF90KiopOwotI2Vsc2UKLVZvaWRfdCoqIHB1YmxpY19pQ09NQUxMT2MoKTsKLSNlbmRpZgot
Ci0KLS8qCi0gIHB2YWxsb2Moc2l6ZV90IG4pOwotICBFcXVpdmFsZW50IHRvIHZhbGxvYyhtaW5p
bXVtLXBhZ2UtdGhhdC1ob2xkcyhuKSksIHRoYXQgaXMsCi0gIHJvdW5kIHVwIG4gdG8gbmVhcmVz
dCBwYWdlc2l6ZS4KLSAqLwotI2lmIF9fU1REX0MKLVZvaWRfdCogIHB1YmxpY19wVkFMTE9jKHNp
emVfdCk7Ci0jZWxzZQotVm9pZF90KiAgcHVibGljX3BWQUxMT2MoKTsKLSNlbmRpZgotCi0vKgot
ICBjZnJlZShWb2lkX3QqIHApOwotICBFcXVpdmFsZW50IHRvIGZyZWUocCkuCi0KLSAgY2ZyZWUg
aXMgbmVlZGVkL2RlZmluZWQgb24gc29tZSBzeXN0ZW1zIHRoYXQgcGFpciBpdCB3aXRoIGNhbGxv
YywKLSAgZm9yIG9kZCBoaXN0b3JpY2FsIHJlYXNvbnMgKHN1Y2ggYXM6IGNmcmVlIGlzIHVzZWQg
aW4gZXhhbXBsZSAKLSAgY29kZSBpbiB0aGUgZmlyc3QgZWRpdGlvbiBvZiBLJlIpLgotKi8KLSNp
ZiBfX1NURF9DCi12b2lkICAgICBwdWJsaWNfY0ZSRWUoVm9pZF90Kik7Ci0jZWxzZQotdm9pZCAg
ICAgcHVibGljX2NGUkVlKCk7Ci0jZW5kaWYKLQotLyoKLSAgbWFsbG9jX3RyaW0oc2l6ZV90IHBh
ZCk7Ci0KLSAgSWYgcG9zc2libGUsIGdpdmVzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0gKHZp
YSBuZWdhdGl2ZQotICBhcmd1bWVudHMgdG8gc2JyaykgaWYgdGhlcmUgaXMgdW51c2VkIG1lbW9y
eSBhdCB0aGUgYGhpZ2gnIGVuZCBvZgotICB0aGUgbWFsbG9jIHBvb2wuIFlvdSBjYW4gY2FsbCB0
aGlzIGFmdGVyIGZyZWVpbmcgbGFyZ2UgYmxvY2tzIG9mCi0gIG1lbW9yeSB0byBwb3RlbnRpYWxs
eSByZWR1Y2UgdGhlIHN5c3RlbS1sZXZlbCBtZW1vcnkgcmVxdWlyZW1lbnRzCi0gIG9mIGEgcHJv
Z3JhbS4gSG93ZXZlciwgaXQgY2Fubm90IGd1YXJhbnRlZSB0byByZWR1Y2UgbWVtb3J5LiBVbmRl
cgotICBzb21lIGFsbG9jYXRpb24gcGF0dGVybnMsIHNvbWUgbGFyZ2UgZnJlZSBibG9ja3Mgb2Yg
bWVtb3J5IHdpbGwgYmUKLSAgbG9ja2VkIGJldHdlZW4gdHdvIHVzZWQgY2h1bmtzLCBzbyB0aGV5
IGNhbm5vdCBiZSBnaXZlbiBiYWNrIHRvCi0gIHRoZSBzeXN0ZW0uCi0gIAotICBUaGUgYHBhZCcg
YXJndW1lbnQgdG8gbWFsbG9jX3RyaW0gcmVwcmVzZW50cyB0aGUgYW1vdW50IG9mIGZyZWUKLSAg
dHJhaWxpbmcgc3BhY2UgdG8gbGVhdmUgdW50cmltbWVkLiBJZiB0aGlzIGFyZ3VtZW50IGlzIHpl
cm8sCi0gIG9ubHkgdGhlIG1pbmltdW0gYW1vdW50IG9mIG1lbW9yeSB0byBtYWludGFpbiBpbnRl
cm5hbCBkYXRhCi0gIHN0cnVjdHVyZXMgd2lsbCBiZSBsZWZ0IChvbmUgcGFnZSBvciBsZXNzKS4g
Tm9uLXplcm8gYXJndW1lbnRzCi0gIGNhbiBiZSBzdXBwbGllZCB0byBtYWludGFpbiBlbm91Z2gg
dHJhaWxpbmcgc3BhY2UgdG8gc2VydmljZQotICBmdXR1cmUgZXhwZWN0ZWQgYWxsb2NhdGlvbnMg
d2l0aG91dCBoYXZpbmcgdG8gcmUtb2J0YWluIG1lbW9yeQotICBmcm9tIHRoZSBzeXN0ZW0uCi0g
IAotICBNYWxsb2NfdHJpbSByZXR1cm5zIDEgaWYgaXQgYWN0dWFsbHkgcmVsZWFzZWQgYW55IG1l
bW9yeSwgZWxzZSAwLgotICBPbiBzeXN0ZW1zIHRoYXQgZG8gbm90IHN1cHBvcnQgIm5lZ2F0aXZl
IHNicmtzIiwgaXQgd2lsbCBhbHdheXMKLSAgcnJldHVybiAwLgotKi8KLSNpZiBfX1NURF9DCi1p
bnQgICAgICBwdWJsaWNfbVRSSW0oc2l6ZV90KTsKLSNlbHNlCi1pbnQgICAgICBwdWJsaWNfbVRS
SW0oKTsKLSNlbmRpZgotCi0vKgotICBtYWxsb2NfdXNhYmxlX3NpemUoVm9pZF90KiBwKTsKLQot
ICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgeW91IGNhbiBhY3R1YWxseSB1c2UgaW4KLSAg
YW4gYWxsb2NhdGVkIGNodW5rLCB3aGljaCBtYXkgYmUgbW9yZSB0aGFuIHlvdSByZXF1ZXN0ZWQg
KGFsdGhvdWdoCi0gIG9mdGVuIG5vdCkgZHVlIHRvIGFsaWdubWVudCBhbmQgbWluaW11bSBzaXpl
IGNvbnN0cmFpbnRzLgotICBZb3UgY2FuIHVzZSB0aGlzIG1hbnkgYnl0ZXMgd2l0aG91dCB3b3Jy
eWluZyBhYm91dAotICBvdmVyd3JpdGluZyBvdGhlciBhbGxvY2F0ZWQgb2JqZWN0cy4gVGhpcyBp
cyBub3QgYSBwYXJ0aWN1bGFybHkgZ3JlYXQKLSAgcHJvZ3JhbW1pbmcgcHJhY3RpY2UuIG1hbGxv
Y191c2FibGVfc2l6ZSBjYW4gYmUgbW9yZSB1c2VmdWwgaW4KLSAgZGVidWdnaW5nIGFuZCBhc3Nl
cnRpb25zLCBmb3IgZXhhbXBsZToKLQotICBwID0gbWFsbG9jKG4pOwotICBhc3NlcnQobWFsbG9j
X3VzYWJsZV9zaXplKHApID49IDI1Nik7Ci0KLSovCi0jaWYgX19TVERfQwotc2l6ZV90ICAgcHVi
bGljX21VU0FCTGUoVm9pZF90Kik7Ci0jZWxzZQotc2l6ZV90ICAgcHVibGljX21VU0FCTGUoKTsK
LSNlbmRpZgotCi0vKgotICBtYWxsb2Nfc3RhdHMoKTsKLSAgUHJpbnRzIG9uIHN0ZGVyciB0aGUg
YW1vdW50IG9mIHNwYWNlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbSAoYm90aAotICB2aWEgc2Jy
ayBhbmQgbW1hcCksIHRoZSBtYXhpbXVtIGFtb3VudCAod2hpY2ggbWF5IGJlIG1vcmUgdGhhbgot
ICBjdXJyZW50IGlmIG1hbGxvY190cmltIGFuZC9vciBtdW5tYXAgZ290IGNhbGxlZCksIGFuZCB0
aGUgY3VycmVudAotICBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIHZpYSBtYWxsb2MgKG9yIHJl
YWxsb2MsIGV0YykgYnV0IG5vdCB5ZXQKLSAgZnJlZWQuIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBu
dW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkLCBub3QgdGhlCi0gIG51bWJlciByZXF1ZXN0ZWQuIEl0
IHdpbGwgYmUgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQKLSAgYmVjYXVzZSBvZiBh
bGlnbm1lbnQgYW5kIGJvb2trZWVwaW5nIG92ZXJoZWFkLiBCZWNhdXNlIGl0IGluY2x1ZGVzCi0g
IGFsaWdubWVudCB3YXN0YWdlIGFzIGJlaW5nIGluIHVzZSwgdGhpcyBmaWd1cmUgbWF5IGJlIGdy
ZWF0ZXIgdGhhbgotICB6ZXJvIGV2ZW4gd2hlbiBubyB1c2VyLWxldmVsIGNodW5rcyBhcmUgYWxs
b2NhdGVkLgotCi0gIFRoZSByZXBvcnRlZCBjdXJyZW50IGFuZCBtYXhpbXVtIHN5c3RlbSBtZW1v
cnkgY2FuIGJlIGluYWNjdXJhdGUgaWYKLSAgYSBwcm9ncmFtIG1ha2VzIG90aGVyIGNhbGxzIHRv
IHN5c3RlbSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMKLSAgKG5vcm1hbGx5IHNicmspIG91
dHNpZGUgb2YgbWFsbG9jLgotCi0gIG1hbGxvY19zdGF0cyBwcmludHMgb25seSB0aGUgbW9zdCBj
b21tb25seSBpbnRlcmVzdGluZyBzdGF0aXN0aWNzLgotICBNb3JlIGluZm9ybWF0aW9uIGNhbiBi
ZSBvYnRhaW5lZCBieSBjYWxsaW5nIG1hbGxpbmZvLgotCi0qLwotI2lmIF9fU1REX0MKLXZvaWQg
ICAgIHB1YmxpY19tU1RBVHMoKTsKLSNlbHNlCi12b2lkICAgICBwdWJsaWNfbVNUQVRzKCk7Ci0j
ZW5kaWYKLQotLyogbWFsbG9wdCB0dW5pbmcgb3B0aW9ucyAqLwotCi0vKgotICBNX01YRkFTVCBp
cyB0aGUgbWF4aW11bSByZXF1ZXN0IHNpemUgdXNlZCBmb3IgImZhc3RiaW5zIiwgc3BlY2lhbCBi
aW5zCi0gIHRoYXQgaG9sZCByZXR1cm5lZCBjaHVua3Mgd2l0aG91dCBjb25zb2xpZGF0aW5nIHRo
ZWlyIHNwYWNlcy4gVGhpcwotICBlbmFibGVzIGZ1dHVyZSByZXF1ZXN0cyBmb3IgY2h1bmtzIG9m
IHRoZSBzYW1lIHNpemUgdG8gYmUgaGFuZGxlZAotICB2ZXJ5IHF1aWNrbHksIGJ1dCBjYW4gaW5j
cmVhc2UgZnJhZ21lbnRhdGlvbiwgYW5kIHRodXMgaW5jcmVhc2UgdGhlCi0gIG92ZXJhbGwgbWVt
b3J5IGZvb3RwcmludCBvZiBhIHByb2dyYW0uCi0KLSAgVGhpcyBtYWxsb2MgbWFuYWdlcyBmYXN0
YmlucyB2ZXJ5IGNvbnNlcnZhdGl2ZWx5IHlldCBzdGlsbAotICBlZmZpY2llbnRseSwgc28gZnJh
Z21lbnRhdGlvbiBpcyByYXJlbHkgYSBwcm9ibGVtIGZvciB2YWx1ZXMgbGVzcwotICB0aGFuIG9y
IGVxdWFsIHRvIHRoZSBkZWZhdWx0LiAgVGhlIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIG9mIE1Y
RkFTVAotICBpcyA4MC4gWW91IHdvdWxkbid0IHdhbnQgaXQgYW55IGhpZ2hlciB0aGFuIHRoaXMg
YW55d2F5LiAgRmFzdGJpbnMKLSAgYXJlIGRlc2lnbmVkIGVzcGVjaWFsbHkgZm9yIHVzZSB3aXRo
IG1hbnkgc21hbGwgc3RydWN0cywgb2JqZWN0cyBvcgotICBzdHJpbmdzIC0tIHRoZSBkZWZhdWx0
IGhhbmRsZXMgc3RydWN0cy9vYmplY3RzL2FycmF5cyB3aXRoIHNpemVzIHVwCi0gIHRvIDE2IDRi
eXRlIGZpZWxkcywgb3Igc21hbGwgc3RyaW5ncyByZXByZXNlbnRpbmcgd29yZHMsIHRva2VucywK
LSAgZXRjLiBVc2luZyBmYXN0YmlucyBmb3IgbGFyZ2VyIG9iamVjdHMgbm9ybWFsbHkgd29yc2Vu
cwotICBmcmFnbWVudGF0aW9uIHdpdGhvdXQgaW1wcm92aW5nIHNwZWVkLgotCi0gIE1fTVhGQVNU
IGlzIHNldCBpbiBSRVFVRVNUIHNpemUgdW5pdHMuIEl0IGlzIGludGVybmFsbHkgdXNlZCBpbgot
ICBjaHVua3NpemUgdW5pdHMsIHdoaWNoIGFkZHMgcGFkZGluZyBhbmQgYWxpZ25tZW50LiAgWW91
IGNhbiByZWR1Y2UKLSAgTV9NWEZBU1QgdG8gMCB0byBkaXNhYmxlIGFsbCB1c2Ugb2YgZmFzdGJp
bnMuICBUaGlzIGNhdXNlcyB0aGUgbWFsbG9jCi0gIGFsZ29yaXRobSB0byBiZSBhIGNsb3NlciBh
cHByb3hpbWF0aW9uIG9mIGZpZm8tYmVzdC1maXQgaW4gYWxsIGNhc2VzLAotICBub3QganVzdCBm
b3IgbGFyZ2VyIHJlcXVlc3RzLCBidXQgd2lsbCBnZW5lcmFsbHkgY2F1c2UgaXQgdG8gYmUKLSAg
c2xvd2VyLgotKi8KLQotCi0vKiBNX01YRkFTVCBpcyBhIHN0YW5kYXJkIFNWSUQvWFBHIHR1bmlu
ZyBvcHRpb24sIHVzdWFsbHkgbGlzdGVkIGluIG1hbGxvYy5oICovCi0jaWZuZGVmIE1fTVhGQVNU
Ci0jZGVmaW5lIE1fTVhGQVNUICAgICAgICAgICAgMSAgICAKLSNlbmRpZgotCi0jaWZuZGVmIERF
RkFVTFRfTVhGQVNUCi0jZGVmaW5lIERFRkFVTFRfTVhGQVNUICAgICA2NAotI2VuZGlmCi0KLQot
LyoKLSAgTV9UUklNX1RIUkVTSE9MRCBpcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgdW51c2VkIHRv
cC1tb3N0IG1lbW9yeQotICB0byBrZWVwIGJlZm9yZSByZWxlYXNpbmcgdmlhIG1hbGxvY190cmlt
IGluIGZyZWUoKS4KLQotICBBdXRvbWF0aWMgdHJpbW1pbmcgaXMgbWFpbmx5IHVzZWZ1bCBpbiBs
b25nLWxpdmVkIHByb2dyYW1zLgotICBCZWNhdXNlIHRyaW1taW5nIHZpYSBzYnJrIGNhbiBiZSBz
bG93IG9uIHNvbWUgc3lzdGVtcywgYW5kIGNhbgotICBzb21ldGltZXMgYmUgd2FzdGVmdWwgKGlu
IGNhc2VzIHdoZXJlIHByb2dyYW1zIGltbWVkaWF0ZWx5Ci0gIGFmdGVyd2FyZCBhbGxvY2F0ZSBt
b3JlIGxhcmdlIGNodW5rcykgdGhlIHZhbHVlIHNob3VsZCBiZSBoaWdoCi0gIGVub3VnaCBzbyB0
aGF0IHlvdXIgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2Ugd291bGQgaW1wcm92ZSBieQotICBy
ZWxlYXNpbmcgdGhpcyBtdWNoIG1lbW9yeS4KLQotICBUaGUgdHJpbSB0aHJlc2hvbGQgYW5kIHRo
ZSBtbWFwIGNvbnRyb2wgcGFyYW1ldGVycyAoc2VlIGJlbG93KQotICBjYW4gYmUgdHJhZGVkIG9m
ZiB3aXRoIG9uZSBhbm90aGVyLiBUcmltbWluZyBhbmQgbW1hcHBpbmcgYXJlCi0gIHR3byBkaWZm
ZXJlbnQgd2F5cyBvZiByZWxlYXNpbmcgdW51c2VkIG1lbW9yeSBiYWNrIHRvIHRoZQotICBzeXN0
ZW0uIEJldHdlZW4gdGhlc2UgdHdvLCBpdCBpcyBvZnRlbiBwb3NzaWJsZSB0byBrZWVwCi0gIHN5
c3RlbS1sZXZlbCBkZW1hbmRzIG9mIGEgbG9uZy1saXZlZCBwcm9ncmFtIGRvd24gdG8gYSBiYXJl
Ci0gIG1pbmltdW0uIEZvciBleGFtcGxlLCBpbiBvbmUgdGVzdCBzdWl0ZSBvZiBzZXNzaW9ucyBt
ZWFzdXJpbmcKLSAgdGhlIFhGODYgWCBzZXJ2ZXIgb24gTGludXgsIHVzaW5nIGEgdHJpbSB0aHJl
c2hvbGQgb2YgMTI4SyBhbmQgYQotICBtbWFwIHRocmVzaG9sZCBvZiAxOTJLIGxlZCB0byBuZWFy
LW1pbmltYWwgbG9uZyB0ZXJtIHJlc291cmNlCi0gIGNvbnN1bXB0aW9uLgotCi0gIElmIHlvdSBh
cmUgdXNpbmcgdGhpcyBtYWxsb2MgaW4gYSBsb25nLWxpdmVkIHByb2dyYW0sIGl0IHNob3VsZAot
ICBwYXkgdG8gZXhwZXJpbWVudCB3aXRoIHRoZXNlIHZhbHVlcy4gIEFzIGEgcm91Z2ggZ3VpZGUs
IHlvdQotICBtaWdodCBzZXQgdG8gYSB2YWx1ZSBjbG9zZSB0byB0aGUgYXZlcmFnZSBzaXplIG9m
IGEgcHJvY2VzcwotICAocHJvZ3JhbSkgcnVubmluZyBvbiB5b3VyIHN5c3RlbS4gIFJlbGVhc2lu
ZyB0aGlzIG11Y2ggbWVtb3J5Ci0gIHdvdWxkIGFsbG93IHN1Y2ggYSBwcm9jZXNzIHRvIHJ1biBp
biBtZW1vcnkuICBHZW5lcmFsbHksIGl0J3MKLSAgd29ydGggaXQgdG8gdHVuZSBmb3IgdHJpbW1p
bmcgcmF0aGVyIHRoYW0gbWVtb3J5IG1hcHBpbmcgd2hlbiBhCi0gIHByb2dyYW0gdW5kZXJnb2Vz
IHBoYXNlcyB3aGVyZSBzZXZlcmFsIGxhcmdlIGNodW5rcyBhcmUKLSAgYWxsb2NhdGVkIGFuZCBy
ZWxlYXNlZCBpbiB3YXlzIHRoYXQgY2FuIHJldXNlIGVhY2ggb3RoZXIncwotICBzdG9yYWdlLCBw
ZXJoYXBzIG1peGVkIHdpdGggcGhhc2VzIHdoZXJlIHRoZXJlIGFyZSBubyBzdWNoCi0gIGNodW5r
cyBhdCBhbGwuICBBbmQgaW4gd2VsbC1iZWhhdmVkIGxvbmctbGl2ZWQgcHJvZ3JhbXMsCi0gIGNv
bnRyb2xsaW5nIHJlbGVhc2Ugb2YgbGFyZ2UgYmxvY2tzIHZpYSB0cmltbWluZyB2ZXJzdXMgbWFw
cGluZwotICBpcyB1c3VhbGx5IGZhc3Rlci4KLQotICBIb3dldmVyLCBpbiBtb3N0IHByb2dyYW1z
LCB0aGVzZSBwYXJhbWV0ZXJzIHNlcnZlIG1haW5seSBhcwotICBwcm90ZWN0aW9uIGFnYWluc3Qg
dGhlIHN5c3RlbS1sZXZlbCBlZmZlY3RzIG9mIGNhcnJ5aW5nIGFyb3VuZAotICBtYXNzaXZlIGFt
b3VudHMgb2YgdW5uZWVkZWQgbWVtb3J5LiBTaW5jZSBmcmVxdWVudCBjYWxscyB0bwotICBzYnJr
LCBtbWFwLCBhbmQgbXVubWFwIG90aGVyd2lzZSBkZWdyYWRlIHBlcmZvcm1hbmNlLCB0aGUgZGVm
YXVsdAotICBwYXJhbWV0ZXJzIGFyZSBzZXQgdG8gcmVsYXRpdmVseSBoaWdoIHZhbHVlcyB0aGF0
IHNlcnZlIG9ubHkgYXMKLSAgc2FmZWd1YXJkcy4KLQotICBUaGUgdHJpbSB2YWx1ZSBtdXN0IGJl
IGdyZWF0ZXIgdGhhbiBwYWdlIHNpemUgdG8gaGF2ZSBhbnkgdXNlZnVsCi0gIGVmZmVjdC4gIFRv
IGRpc2FibGUgdHJpbW1pbmcgY29tcGxldGVseSwgeW91IGNhbiBzZXQgdG8gCi0gICh1bnNpZ25l
ZCBsb25nKSgtMSkKLQotICBUcmltIHNldHRpbmdzIGludGVyYWN0IHdpdGggZmFzdGJpbiAoTVhG
QVNUKSBzZXR0aW5nczogVW5sZXNzCi0gIFRSSU1fRkFTVEJJTlMgaXMgZGVmaW5lZCwgYXV0b21h
dGljIHRyaW1taW5nIG5ldmVyIHRha2VzIHBsYWNlIHVwb24KLSAgZnJlZWluZyBhIGNodW5rIHdp
dGggc2l6ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTVhGQVNULiBUcmltbWluZyBpcwotICBpbnN0
ZWFkIGRlbGF5ZWQgdW50aWwgc3Vic2VxdWVudCBmcmVlaW5nIG9mIGxhcmdlciBjaHVua3MuIEhv
d2V2ZXIsCi0gIHlvdSBjYW4gc3RpbGwgZm9yY2UgYW4gYXR0ZW1wdGVkIHRyaW0gYnkgY2FsbGlu
ZyBtYWxsb2NfdHJpbS4KLQotICBBbHNvLCB0cmltbWluZyBpcyBub3QgZ2VuZXJhbGx5IHBvc3Np
YmxlIGluIGNhc2VzIHdoZXJlCi0gIHRoZSBtYWluIGFyZW5hIGlzIG9idGFpbmVkIHZpYSBtbWFw
LgotCi0gIE5vdGUgdGhhdCB0aGUgdHJpY2sgc29tZSBwZW9wbGUgdXNlIG9mIG1hbGxvY2luZyBh
IGh1Z2Ugc3BhY2UgYW5kCi0gIHRoZW4gZnJlZWluZyBpdCBhdCBwcm9ncmFtIHN0YXJ0dXAsIGlu
IGFuIGF0dGVtcHQgdG8gcmVzZXJ2ZSBzeXN0ZW0KLSAgbWVtb3J5LCBkb2Vzbid0IGhhdmUgdGhl
IGludGVuZGVkIGVmZmVjdCB1bmRlciBhdXRvbWF0aWMgdHJpbW1pbmcsCi0gIHNpbmNlIHRoYXQg
bWVtb3J5IHdpbGwgaW1tZWRpYXRlbHkgYmUgcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4KLSovCi0K
LSNkZWZpbmUgTV9UUklNX1RIUkVTSE9MRCAgICAgICAtMQotCi0jaWZuZGVmIERFRkFVTFRfVFJJ
TV9USFJFU0hPTEQKLSNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCAoMjU2ICogMTAyNCkK
LSNlbmRpZgotCi0vKgotICBNX1RPUF9QQUQgaXMgdGhlIGFtb3VudCBvZiBleHRyYSBgcGFkZGlu
Zycgc3BhY2UgdG8gYWxsb2NhdGUgb3IKLSAgcmV0YWluIHdoZW5ldmVyIHNicmsgaXMgY2FsbGVk
LiBJdCBpcyB1c2VkIGluIHR3byB3YXlzIGludGVybmFsbHk6Ci0KLSAgKiBXaGVuIHNicmsgaXMg
Y2FsbGVkIHRvIGV4dGVuZCB0aGUgdG9wIG9mIHRoZSBhcmVuYSB0byBzYXRpc2Z5Ci0gIGEgbmV3
IG1hbGxvYyByZXF1ZXN0LCB0aGlzIG11Y2ggcGFkZGluZyBpcyBhZGRlZCB0byB0aGUgc2Jyawot
ICByZXF1ZXN0LgotCi0gICogV2hlbiBtYWxsb2NfdHJpbSBpcyBjYWxsZWQgYXV0b21hdGljYWxs
eSBmcm9tIGZyZWUoKSwKLSAgaXQgaXMgdXNlZCBhcyB0aGUgYHBhZCcgYXJndW1lbnQuCi0KLSAg
SW4gYm90aCBjYXNlcywgdGhlIGFjdHVhbCBhbW91bnQgb2YgcGFkZGluZyBpcyByb3VuZGVkCi0g
IHNvIHRoYXQgdGhlIGVuZCBvZiB0aGUgYXJlbmEgaXMgYWx3YXlzIGEgc3lzdGVtIHBhZ2UgYm91
bmRhcnkuCi0KLSAgVGhlIG1haW4gcmVhc29uIGZvciB1c2luZyBwYWRkaW5nIGlzIHRvIGF2b2lk
IGNhbGxpbmcgc2JyayBzbwotICBvZnRlbi4gSGF2aW5nIGV2ZW4gYSBzbWFsbCBwYWQgZ3JlYXRs
eSByZWR1Y2VzIHRoZSBsaWtlbGlob29kCi0gIHRoYXQgbmVhcmx5IGV2ZXJ5IG1hbGxvYyByZXF1
ZXN0IGR1cmluZyBwcm9ncmFtIHN0YXJ0LXVwIChvcgotICBhZnRlciB0cmltbWluZykgd2lsbCBp
bnZva2Ugc2Jyaywgd2hpY2ggbmVlZGxlc3NseSB3YXN0ZXMKLSAgdGltZS4KLQotICBBdXRvbWF0
aWMgcm91bmRpbmctdXAgdG8gcGFnZS1zaXplIHVuaXRzIGlzIG5vcm1hbGx5IHN1ZmZpY2llbnQK
LSAgdG8gYXZvaWQgbWVhc3VyYWJsZSBvdmVyaGVhZCwgc28gdGhlIGRlZmF1bHQgaXMgMC4gIEhv
d2V2ZXIsIGluCi0gIHN5c3RlbXMgd2hlcmUgc2JyayBpcyByZWxhdGl2ZWx5IHNsb3csIGl0IGNh
biBwYXkgdG8gaW5jcmVhc2UKLSAgdGhpcyB2YWx1ZSwgYXQgdGhlIGV4cGVuc2Ugb2YgY2Fycnlp
bmcgYXJvdW5kIG1vcmUgbWVtb3J5IHRoYW4KLSAgdGhlIHByb2dyYW0gbmVlZHMuCi0qLwotCi0j
ZGVmaW5lIE1fVE9QX1BBRCAgICAgICAgICAgICAgLTIKLQotI2lmbmRlZiBERUZBVUxUX1RPUF9Q
QUQKLSNkZWZpbmUgREVGQVVMVF9UT1BfUEFEICAgICAgICAoMCkKLSNlbmRpZgotCi0vKgotICBN
X01NQVBfVEhSRVNIT0xEIGlzIHRoZSByZXF1ZXN0IHNpemUgdGhyZXNob2xkIGZvciB1c2luZyBt
bWFwKCkKLSAgdG8gc2VydmljZSBhIHJlcXVlc3QuIFJlcXVlc3RzIG9mIGF0IGxlYXN0IHRoaXMg
c2l6ZSB0aGF0IGNhbm5vdAotICBiZSBhbGxvY2F0ZWQgdXNpbmcgYWxyZWFkeS1leGlzdGluZyBz
cGFjZSB3aWxsIGJlIHNlcnZpY2VkIHZpYSBtbWFwLgotICAoSWYgZW5vdWdoIG5vcm1hbCBmcmVl
ZCBzcGFjZSBhbHJlYWR5IGV4aXN0cyBpdCBpcyB1c2VkIGluc3RlYWQuKQotCi0gIFVzaW5nIG1t
YXAgc2VncmVnYXRlcyByZWxhdGl2ZWx5IGxhcmdlIGNodW5rcyBvZiBtZW1vcnkgc28gdGhhdAot
ICB0aGV5IGNhbiBiZSBpbmRpdmlkdWFsbHkgb2J0YWluZWQgYW5kIHJlbGVhc2VkIGZyb20gdGhl
IGhvc3QKLSAgc3lzdGVtLiBBIHJlcXVlc3Qgc2VydmljZWQgdGhyb3VnaCBtbWFwIGlzIG5ldmVy
IHJldXNlZCBieSBhbnkKLSAgb3RoZXIgcmVxdWVzdCAoYXQgbGVhc3Qgbm90IGRpcmVjdGx5OyB0
aGUgc3lzdGVtIG1heSBqdXN0IHNvCi0gIGhhcHBlbiB0byByZW1hcCBzdWNjZXNzaXZlIHJlcXVl
c3RzIHRvIHRoZSBzYW1lIGxvY2F0aW9ucykuCi0KLSAgU2VncmVnYXRpbmcgc3BhY2UgaW4gdGhp
cyB3YXkgaGFzIHRoZSBiZW5lZml0cyB0aGF0OgotCi0gICAxLiBNbWFwcGVkIHNwYWNlIGNhbiBB
TFdBWVMgYmUgaW5kaXZpZHVhbGx5IHJlbGVhc2VkIGJhY2sgCi0gICAgICB0byB0aGUgc3lzdGVt
LCB3aGljaCBoZWxwcyBrZWVwIHRoZSBzeXN0ZW0gbGV2ZWwgbWVtb3J5IAotICAgICAgZGVtYW5k
cyBvZiBhIGxvbmctbGl2ZWQgcHJvZ3JhbSBsb3cuIAotICAgMi4gTWFwcGVkIG1lbW9yeSBjYW4g
bmV2ZXIgYmVjb21lIGBsb2NrZWQnIGJldHdlZW4KLSAgICAgIG90aGVyIGNodW5rcywgYXMgY2Fu
IGhhcHBlbiB3aXRoIG5vcm1hbGx5IGFsbG9jYXRlZCBjaHVua3MsIHdoaWNoCi0gICAgICBtZWFu
cyB0aGF0IGV2ZW4gdHJpbW1pbmcgdmlhIG1hbGxvY190cmltIHdvdWxkIG5vdCByZWxlYXNlIHRo
ZW0uCi0gICAzLiBPbiBzb21lIHN5c3RlbXMgd2l0aCAiaG9sZXMiIGluIGFkZHJlc3Mgc3BhY2Vz
LCBtbWFwIGNhbiBvYnRhaW4KLSAgICAgIG1lbW9yeSB0aGF0IHNicmsgY2Fubm90LgotCi0gIEhv
d2V2ZXIsIGl0IGhhcyB0aGUgZGlzYWR2YW50YWdlcyB0aGF0OgotCi0gICAxLiBUaGUgc3BhY2Ug
Y2Fubm90IGJlIHJlY2xhaW1lZCwgY29uc29saWRhdGVkLCBhbmQgdGhlbgotICAgICAgdXNlZCB0
byBzZXJ2aWNlIGxhdGVyIHJlcXVlc3RzLCBhcyBoYXBwZW5zIHdpdGggbm9ybWFsIGNodW5rcy4K
LSAgIDIuIEl0IGNhbiBsZWFkIHRvIG1vcmUgd2FzdGFnZSBiZWNhdXNlIG9mIG1tYXAgcGFnZSBh
bGlnbm1lbnQKLSAgICAgIHJlcXVpcmVtZW50cwotICAgMy4gSXQgY2F1c2VzIG1hbGxvYyBwZXJm
b3JtYW5jZSB0byBiZSBtb3JlIGRlcGVuZGVudCBvbiBob3N0Ci0gICAgICBzeXN0ZW0gbWVtb3J5
IG1hbmFnZW1lbnQgc3VwcG9ydCByb3V0aW5lcyB3aGljaCBtYXkgdmFyeSBpbgotICAgICAgaW1w
bGVtZW50YXRpb24gcXVhbGl0eSBhbmQgbWF5IGltcG9zZSBhcmJpdHJhcnkKLSAgICAgIGxpbWl0
YXRpb25zLiBHZW5lcmFsbHksIHNlcnZpY2luZyBhIHJlcXVlc3QgdmlhIG5vcm1hbAotICAgICAg
bWFsbG9jIHN0ZXBzIGlzIGZhc3RlciB0aGFuIGdvaW5nIHRocm91Z2ggYSBzeXN0ZW0ncyBtbWFw
LgotCi0gIFRoZSBhZHZhbnRhZ2VzIG9mIG1tYXAgbmVhcmx5IGFsd2F5cyBvdXR3ZWlnaCBkaXNh
ZHZhbnRhZ2VzIGZvcgotICAibGFyZ2UiIGNodW5rcywgYnV0IHRoZSB2YWx1ZSBvZiAibGFyZ2Ui
IHZhcmllcyBhY3Jvc3Mgc3lzdGVtcy4gIFRoZQotICBkZWZhdWx0IGlzIGFuIGVtcGlyaWNhbGx5
IGRlcml2ZWQgdmFsdWUgdGhhdCB3b3JrcyB3ZWxsIGluIG1vc3QKLSAgc3lzdGVtcy4KLSovCi0K
LSNkZWZpbmUgTV9NTUFQX1RIUkVTSE9MRCAgICAgIC0zCi0KLSNpZm5kZWYgREVGQVVMVF9NTUFQ
X1RIUkVTSE9MRAotI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEICgyNTYgKiAxMDI0KQot
I2VuZGlmCi0KLS8qCi0gIE1fTU1BUF9NQVggaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlcXVl
c3RzIHRvIHNpbXVsdGFuZW91c2x5Ci0gIHNlcnZpY2UgdXNpbmcgbW1hcC4gVGhpcyBwYXJhbWV0
ZXIgZXhpc3RzIGJlY2F1c2UKLS4gU29tZSBzeXN0ZW1zIGhhdmUgYSBsaW1pdGVkIG51bWJlciBv
ZiBpbnRlcm5hbCB0YWJsZXMgZm9yCi0gIHVzZSBieSBtbWFwLCBhbmQgdXNpbmcgbW9yZSB0aGFu
IGEgZmV3IG9mIHRoZW0gbWF5IGRlZ3JhZGUKLSAgcGVyZm9ybWFuY2UuCi0KLSAgVGhlIGRlZmF1
bHQgaXMgc2V0IHRvIGEgdmFsdWUgdGhhdCBzZXJ2ZXMgb25seSBhcyBhIHNhZmVndWFyZC4KLSAg
U2V0dGluZyB0byAwIGRpc2FibGVzIHVzZSBvZiBtbWFwIGZvciBzZXJ2aWNpbmcgbGFyZ2UgcmVx
dWVzdHMuICBJZgotICBIQVZFX01NQVAgaXMgbm90IHNldCwgdGhlIGRlZmF1bHQgdmFsdWUgaXMg
MCwgYW5kIGF0dGVtcHRzIHRvIHNldCBpdAotICB0byBub24temVybyB2YWx1ZXMgaW4gbWFsbG9w
dCB3aWxsIGZhaWwuCi0qLwotCi0jZGVmaW5lIE1fTU1BUF9NQVggICAgICAgICAgICAgLTQKLQot
I2lmbmRlZiBERUZBVUxUX01NQVBfTUFYCi0jaWYgSEFWRV9NTUFQCi0jZGVmaW5lIERFRkFVTFRf
TU1BUF9NQVggICAgICAgKDY1NTM2KQotI2Vsc2UKLSNkZWZpbmUgREVGQVVMVF9NTUFQX01BWCAg
ICAgICAoMCkKLSNlbmRpZgotI2VuZGlmCi0KLS8qIAotICA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgVG8g
bWFrZSBhIGZ1bGx5IGN1c3RvbWl6YWJsZSBtYWxsb2MuaCBoZWFkZXIgZmlsZSwgY3V0IGV2ZXJ5
dGhpbmcKLSAgYWJvdmUgdGhpcyBsaW5lLCBwdXQgaW50byBmaWxlIG1hbGxvYy5oLCBlZGl0IHRv
IHN1aXQsIGFuZCAjaW5jbHVkZSBpdCAKLSAgb24gdGhlIG5leHQgbGluZSwgYXMgd2VsbCBhcyBp
biBwcm9ncmFtcyB0aGF0IHVzZSB0aGlzIG1hbGxvYy4KLSAgPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwot
Ci0vKiAjaW5jbHVkZSAibWFsbG9jLmgiICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBw
dWJsaWMgd3JhcHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgVVNFX1BV
QkxJQ19NQUxMT0NfV1JBUFBFUlMKLQotLyogRGVjbGFyZSBhbGwgcm91dGluZXMgYXMgaW50ZXJu
YWwgKi8KLSNpZiBfX1NURF9DCi1zdGF0aWMgVm9pZF90KiAgbUFMTE9jKHNpemVfdCk7Ci1zdGF0
aWMgdm9pZCAgICAgZlJFZShWb2lkX3QqKTsKLXN0YXRpYyBWb2lkX3QqICByRUFMTE9jKFZvaWRf
dCosIHNpemVfdCk7Ci1zdGF0aWMgVm9pZF90KiAgbUVNQUxJR24oc2l6ZV90LCBzaXplX3QpOwot
c3RhdGljIFZvaWRfdCogIHZBTExPYyhzaXplX3QpOwotc3RhdGljIFZvaWRfdCogIHBWQUxMT2Mo
c2l6ZV90KTsKLXN0YXRpYyBWb2lkX3QqICBjQUxMT2Moc2l6ZV90LCBzaXplX3QpOwotc3RhdGlj
IFZvaWRfdCoqIGlDQUxMT2Moc2l6ZV90LCBzaXplX3QsIFZvaWRfdCoqKTsKLXN0YXRpYyBWb2lk
X3QqKiBpQ09NQUxMT2Moc2l6ZV90LCBzaXplX3QqLCBWb2lkX3QqKik7Ci1zdGF0aWMgdm9pZCAg
ICAgY0ZSRWUoVm9pZF90Kik7Ci1zdGF0aWMgaW50ICAgICAgbVRSSW0oc2l6ZV90KTsKLXN0YXRp
YyBzaXplX3QgICBtVVNBQkxlKFZvaWRfdCopOwotc3RhdGljIHZvaWQgICAgIG1TVEFUcygpOwot
c3RhdGljIGludCAgICAgIG1BTExPUHQoaW50LCBpbnQpOwotc3RhdGljIHN0cnVjdCBtYWxsaW5m
byBtQUxMSU5Gbyh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgVm9pZF90KiAgbUFMTE9jKCk7Ci1zdGF0
aWMgdm9pZCAgICAgZlJFZSgpOwotc3RhdGljIFZvaWRfdCogIHJFQUxMT2MoKTsKLXN0YXRpYyBW
b2lkX3QqICBtRU1BTElHbigpOwotc3RhdGljIFZvaWRfdCogIHZBTExPYygpOwotc3RhdGljIFZv
aWRfdCogIHBWQUxMT2MoKTsKLXN0YXRpYyBWb2lkX3QqICBjQUxMT2MoKTsKLXN0YXRpYyBWb2lk
X3QqKiBpQ0FMTE9jKCk7Ci1zdGF0aWMgVm9pZF90KiogaUNPTUFMTE9jKCk7Ci1zdGF0aWMgdm9p
ZCAgICAgY0ZSRWUoKTsKLXN0YXRpYyBpbnQgICAgICBtVFJJbSgpOwotc3RhdGljIHNpemVfdCAg
IG1VU0FCTGUoKTsKLXN0YXRpYyB2b2lkICAgICBtU1RBVHMoKTsKLXN0YXRpYyBpbnQgICAgICBt
QUxMT1B0KCk7Ci1zdGF0aWMgc3RydWN0IG1hbGxpbmZvIG1BTExJTkZvKCk7Ci0jZW5kaWYKLQot
LyoKLSAgTUFMTE9DX1BSRUFDVElPTiBhbmQgTUFMTE9DX1BPU1RBQ1RJT04gc2hvdWxkIGJlCi0g
IGRlZmluZWQgdG8gcmV0dXJuIDAgb24gc3VjY2VzcywgYW5kIG5vbnplcm8gb24gZmFpbHVyZS4K
LSAgVGhlIHJldHVybiB2YWx1ZSBvZiBNQUxMT0NfUE9TVEFDVElPTiBpcyBjdXJyZW50bHkgaWdu
b3JlZAotICBpbiB3cmFwcGVyIGZ1bmN0aW9ucyBzaW5jZSB0aGVyZSBpcyBubyByZWFzb25hYmxl
IGRlZmF1bHQKLSAgYWN0aW9uIHRvIHRha2Ugb24gZmFpbHVyZS4KLSovCi0KLQotI2lmZGVmIFVT
RV9NQUxMT0NfTE9DSwotCi0jaWZkZWYgV0lOMzIKLQotc3RhdGljIGludCBtQUxMT0NfTVVURXg7
Ci0jZGVmaW5lIE1BTExPQ19QUkVBQ1RJT04gICBzbHdhaXQoJm1BTExPQ19NVVRFeCkKLSNkZWZp
bmUgTUFMTE9DX1BPU1RBQ1RJT04gIHNscmVsZWFzZSgmbUFMTE9DX01VVEV4KQotCi0jZWxzZQot
Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IG1BTExPQ19N
VVRFeCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci0KLSNkZWZpbmUgTUFMTE9DX1BSRUFD
VElPTiAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbUFMTE9DX01VVEV4KQotI2RlZmluZSBNQUxMT0Nf
UE9TVEFDVElPTiAgcHRocmVhZF9tdXRleF91bmxvY2soJm1BTExPQ19NVVRFeCkKLQotI2VuZGlm
IC8qIFVTRV9NQUxMT0NfTE9DSyAqLwotCi0jZWxzZQotCi0vKiBTdWJzdGl0dXRlIGFueXRoaW5n
IHlvdSBsaWtlIGZvciB0aGVzZSAqLwotCi0jZGVmaW5lIE1BTExPQ19QUkVBQ1RJT04gICAoMCkK
LSNkZWZpbmUgTUFMTE9DX1BPU1RBQ1RJT04gICgwKQotCi0jZW5kaWYKLQotVm9pZF90KiBwdWJs
aWNfbUFMTE9jKHNpemVfdCBieXRlcykgewotICBWb2lkX3QqIG07Ci0gIGlmIChNQUxMT0NfUFJF
QUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBtID0gbUFMTE9jKGJ5dGVzKTsK
LSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9IDApIHsKLSAgfQotICByZXR1cm4gbTsKLX0KLQot
Ci1zdGF0aWMgcHRocmVhZF9vbmNlX3QgZnJlZV9tdXRleF9vbmNlID0gUFRIUkVBRF9PTkNFX0lO
SVQ7Ci1zdGF0aWMgcHRocmVhZF9tdXRleF90IGZyZWVfbXV0ZXg7Ci1zdGF0aWMgaW50IHNjaGVk
dWxlZF9mcmVlX3NpemU7Ci1zdGF0aWMgaW50IHNjaGVkdWxlZF9mcmVlX2NhcGFjaXR5Owotc3Rh
dGljIGludCBzY2hlZHVsZWRfZnJlZV9saXN0OwotYm9vbCBmcmVlX2lzX3NjaGVkdWxlZDsKLQot
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZV9zY2hlZHVsZWRfZnJlZV9saXN0KCkKLXsKLSAgICBwdGhy
ZWFkX211dGV4X2luaXQoJmZyZWVfbXV0ZXgsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBkcmFp
bl9zY2hlZHVsZWRfZnJlZV9saXN0KCkKLXsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJmZyZWVf
bXV0ZXgpOwotICAgIGlmIChmcmVlX2lzX3NjaGVkdWxlZCkgewotICAgICAgICBmb3IoaW50IGkg
PSAwOyBpIDwgc2NoZWR1bGVkX2ZyZWVfc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBtYWluX3Ro
cmVhZF9mcmVlKHNjaGVkdWxlZF9mcmVlX2xpc3RbaV0pOwotICAgICAgICB9Ci0gICAgICAgIGZy
ZWUoc2NoZWR1bGVkX2ZyZWVfbGlzdCk7Ci0gICAgICAgIHNjaGVkdWxlZF9mcmVlX2xpc3QgPSBO
VUxMOwotICAgICAgICBzY2hlZHVsZWRfZnJlZV9zaXplID0gMDsKLSAgICAgICAgc2NoZWR1bGVk
X2ZyZWVfY2FwYWNpdHkgPSAwOwotICAgICAgICBmcmVlX2lzX3NjaGVkdWxlZCA9IGZhbHNlOwot
ICAgIH0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZnJlZV9tdXRleCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHNjaGVkdWxlX2ZyZWVfb25fbWFpbl90aHJlYWQoVm9pZF90KiBtKQotewotICAgIHB0
aHJlYWRfb25jZSgmZnJlZV9tdXRleF9vbmNlLCBpbml0aWFsaXplX3NjaGVkdWxlZF9mcmVlX2xp
c3QpOwotCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZmcmVlX211dGV4KTsKLSAgICBpZiAoc2No
ZWR1bGVkX2ZyZWVfc2l6ZSA9PSBzY2hlZHVsZWRfZnJlZV9jYXBhY2l0eSkgewotICAgICAgICBz
Y2hlZHVsZWRfZnJlZV9jYXBhY2l0eSA9IHNjaGVkdWxlZF9mcmVlX2NhcGFjaXR5ID09IDAgPyAx
NiA6IHNjaGVkdWxlZF9mcmVlX2NhcGFjaXR5ICogMS4yOwotICAgICAgICBzY2hlZHVsZWRfZnJl
ZV9saXN0ID0gKFZvaWRfdCoqKXJlYWxsb2Moc2NoZWR1bGVkX2ZyZWVfbGlzdCwgc2l6ZW9mKFZv
aWRfdCopICogc2NoZWR1bGVkX2ZyZWVfY2FwYWNpdHkpOwotICAgIH0KLSAgICBzY2hlZHVsZWRf
ZnJlZV9saXN0W3NjaGVkdWxlZF9mcmVlX3NpemUrK10gPSBtOwotICAgIGlmICghZnJlZV9pc19z
Y2hlZHVsZWQpIHsKLSAgICAgICAgUVRpbWVyOjppbW1lZGlhdGVTaW5nbGVTaG90T25NYWluVGhy
ZWFkKDAsIGRyYWluX3NjaGVkdWxlZF9mcmVlX2xpc3QpOwotICAgICAgICBmcmVlX2lzX3NjaGVk
dWxlZCA9IHRydWU7Ci0gICAgfQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZmcmVlX211dGV4
KTsKLX0KLQotdm9pZCBwdWJsaWNfZlJFZShWb2lkX3QqIG0pIHsKLSAgaWYgKCFwdGhyZWFkX21h
aW5fbnAoKSkgewotICAgICAgc2NoZWR1bGVfZnJlZV9vbl9tYWluX3RocmVhZChtKTsKLSAgICAg
IHJldHVybjsKLSAgfQotCi0gIGlmIChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1
cm47Ci0gIH0KLSAgZlJFZShtKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9IDApIHsKLSAg
fQotfQotCi1Wb2lkX3QqIHB1YmxpY19yRUFMTE9jKFZvaWRfdCogbSwgc2l6ZV90IGJ5dGVzKSB7
Ci0gIGlmIChNQUxMT0NfUFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBt
ID0gckVBTExPYyhtLCBieXRlcyk7Ci0gIGlmIChNQUxMT0NfUE9TVEFDVElPTiAhPSAwKSB7Ci0g
IH0KLSAgcmV0dXJuIG07Ci19Ci0KLVZvaWRfdCogcHVibGljX21FTUFMSUduKHNpemVfdCBhbGln
bm1lbnQsIHNpemVfdCBieXRlcykgewotICBWb2lkX3QqIG07Ci0gIGlmIChNQUxMT0NfUFJFQUNU
SU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBtID0gbUVNQUxJR24oYWxpZ25tZW50
LCBieXRlcyk7Ci0gIGlmIChNQUxMT0NfUE9TVEFDVElPTiAhPSAwKSB7Ci0gIH0KLSAgcmV0dXJu
IG07Ci19Ci0KLVZvaWRfdCogcHVibGljX3ZBTExPYyhzaXplX3QgYnl0ZXMpIHsKLSAgVm9pZF90
KiBtOwotICBpZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0K
LSAgbSA9IHZBTExPYyhieXRlcyk7Ci0gIGlmIChNQUxMT0NfUE9TVEFDVElPTiAhPSAwKSB7Ci0g
IH0KLSAgcmV0dXJuIG07Ci19Ci0KLVZvaWRfdCogcHVibGljX3BWQUxMT2Moc2l6ZV90IGJ5dGVz
KSB7Ci0gIFZvaWRfdCogbTsKLSAgaWYgKE1BTExPQ19QUkVBQ1RJT04gIT0gMCkgewotICAgIHJl
dHVybiAwOwotICB9Ci0gIG0gPSBwVkFMTE9jKGJ5dGVzKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNU
SU9OICE9IDApIHsKLSAgfQotICByZXR1cm4gbTsKLX0KLQotVm9pZF90KiBwdWJsaWNfY0FMTE9j
KHNpemVfdCBuLCBzaXplX3QgZWxlbV9zaXplKSB7Ci0gIFZvaWRfdCogbTsKLSAgaWYgKE1BTExP
Q19QUkVBQ1RJT04gIT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0gIG0gPSBjQUxMT2Mobiwg
ZWxlbV9zaXplKTsKLSAgaWYgKE1BTExPQ19QT1NUQUNUSU9OICE9IDApIHsKLSAgfQotICByZXR1
cm4gbTsKLX0KLQotCi1Wb2lkX3QqKiBwdWJsaWNfaUNBTExPYyhzaXplX3Qgbiwgc2l6ZV90IGVs
ZW1fc2l6ZSwgVm9pZF90KiogY2h1bmtzKSB7Ci0gIFZvaWRfdCoqIG07Ci0gIGlmIChNQUxMT0Nf
UFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBtID0gaUNBTExPYyhuLCBl
bGVtX3NpemUsIGNodW5rcyk7Ci0gIGlmIChNQUxMT0NfUE9TVEFDVElPTiAhPSAwKSB7Ci0gIH0K
LSAgcmV0dXJuIG07Ci19Ci0KLVZvaWRfdCoqIHB1YmxpY19pQ09NQUxMT2Moc2l6ZV90IG4sIHNp
emVfdCBzaXplc1tdLCBWb2lkX3QqKiBjaHVua3MpIHsKLSAgVm9pZF90KiogbTsKLSAgaWYgKE1B
TExPQ19QUkVBQ1RJT04gIT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0gIG0gPSBpQ09NQUxM
T2Mobiwgc2l6ZXMsIGNodW5rcyk7Ci0gIGlmIChNQUxMT0NfUE9TVEFDVElPTiAhPSAwKSB7Ci0g
IH0KLSAgcmV0dXJuIG07Ci19Ci0KLXZvaWQgcHVibGljX2NGUkVlKFZvaWRfdCogbSkgewotICBp
ZiAoTUFMTE9DX1BSRUFDVElPTiAhPSAwKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGNGUkVlKG0p
OwotICBpZiAoTUFMTE9DX1BPU1RBQ1RJT04gIT0gMCkgewotICB9Ci19Ci0KLWludCBwdWJsaWNf
bVRSSW0oc2l6ZV90IHMpIHsKLSAgaW50IHJlc3VsdDsKLSAgaWYgKE1BTExPQ19QUkVBQ1RJT04g
IT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0gIHJlc3VsdCA9IG1UUkltKHMpOwotICBpZiAo
TUFMTE9DX1BPU1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXNp
emVfdCBwdWJsaWNfbVVTQUJMZShWb2lkX3QqIG0pIHsKLSAgc2l6ZV90IHJlc3VsdDsKLSAgaWYg
KE1BTExPQ19QUkVBQ1RJT04gIT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0gIHJlc3VsdCA9
IG1VU0FCTGUobSk7Ci0gIGlmIChNQUxMT0NfUE9TVEFDVElPTiAhPSAwKSB7Ci0gIH0KLSAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBwdWJsaWNfbVNUQVRzKCkgewotICBpZiAoTUFMTE9DX1BS
RUFDVElPTiAhPSAwKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1TVEFUcygpOwotICBpZiAoTUFM
TE9DX1BPU1RBQ1RJT04gIT0gMCkgewotICB9Ci19Ci0KLXN0cnVjdCBtYWxsaW5mbyBwdWJsaWNf
bUFMTElORm8oKSB7Ci0gIHN0cnVjdCBtYWxsaW5mbyBtOwotICBpZiAoTUFMTE9DX1BSRUFDVElP
TiAhPSAwKSB7Ci0gICAgc3RydWN0IG1hbGxpbmZvIG5tID0geyAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwIH07Ci0gICAgcmV0dXJuIG5tOwotICB9Ci0gIG0gPSBtQUxMSU5GbygpOwotICBp
ZiAoTUFMTE9DX1BPU1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVybiBtOwotfQotCi1pbnQg
cHVibGljX21BTExPUHQoaW50IHAsIGludCB2KSB7Ci0gIGludCByZXN1bHQ7Ci0gIGlmIChNQUxM
T0NfUFJFQUNUSU9OICE9IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICByZXN1bHQgPSBtQUxM
T1B0KHAsIHYpOwotICBpZiAoTUFMTE9DX1BPU1RBQ1RJT04gIT0gMCkgewotICB9Ci0gIHJldHVy
biByZXN1bHQ7Ci19Ci0KLSNlbmRpZgotCi0KLQotLyogLS0tLS0tLS0tLS0tLSBPcHRpb25hbCB2
ZXJzaW9ucyBvZiBtZW1jb3B5IC0tLS0tLS0tLS0tLS0tLS0gKi8KLQotCi0jaWYgVVNFX01FTUNQ
WQotCi0vKiAKLSAgTm90ZTogbWVtY3B5IGlzIE9OTFkgaW52b2tlZCB3aXRoIG5vbi1vdmVybGFw
cGluZyByZWdpb25zLAotICBzbyB0aGUgKHVzdWFsbHkgc2xvd2VyKSBtZW1tb3ZlIGlzIG5vdCBu
ZWVkZWQuCi0qLwotCi0jZGVmaW5lIE1BTExPQ19DT1BZKGRlc3QsIHNyYywgbmJ5dGVzKSAgbWVt
Y3B5KGRlc3QsIHNyYywgbmJ5dGVzKQotI2RlZmluZSBNQUxMT0NfWkVSTyhkZXN0LCBuYnl0ZXMp
ICAgICAgIG1lbXNldChkZXN0LCAwLCAgIG5ieXRlcykKLQotI2Vsc2UgLyogIVVTRV9NRU1DUFkg
Ki8KLQotLyogVXNlIER1ZmYncyBkZXZpY2UgZm9yIGdvb2QgemVyb2luZy9jb3B5aW5nIHBlcmZv
cm1hbmNlLiAqLwotCi0jZGVmaW5lIE1BTExPQ19aRVJPKGNoYXJwLCBuYnl0ZXMpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIElOVEVSTkFMX1NJWkVfVCogbXpwID0gKElOVEVSTkFMX1NJWkVfVCopKGNoYXJwKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIENIVU5LX1NJWkVfVCAgbWN0bXAgPSAobmJ5
dGVzKS9zaXplb2YoSU5URVJOQUxfU0laRV9UKTsgICAgICAgICAgICAgICAgICAgICBcCi0gIGxv
bmcgbWNuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGlmIChtY3RtcCA8IDgpIG1jbiA9IDA7IGVsc2UgeyBtY24g
PSAobWN0bXAtMSkvODsgbWN0bXAgJT0gODsgfSAgICAgICAgICAgICBcCi0gIHN3aXRjaCAobWN0
bXApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgY2FzZSAwOiBmb3IoOzspIHsgKm16cCsrID0gMDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSA3OiAgICAgICAgICAg
Km16cCsrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY2FzZSA2OiAgICAgICAgICAgKm16cCsrID0gMDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSA1OiAgICAgICAgICAgKm16cCsrID0g
MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2Fz
ZSA0OiAgICAgICAgICAgKm16cCsrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgY2FzZSAzOiAgICAgICAgICAgKm16cCsrID0gMDsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSAyOiAgICAg
ICAgICAgKm16cCsrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgY2FzZSAxOiAgICAgICAgICAgKm16cCsrID0gMDsgaWYobWNuIDw9IDApIGJy
ZWFrOyBtY24tLTsgfSAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19
IHdoaWxlKDApCi0KLSNkZWZpbmUgTUFMTE9DX0NPUFkoZGVzdCxzcmMsbmJ5dGVzKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgSU5URVJOQUxfU0laRV9UKiBtY3NyYyA9IChJTlRFUk5BTF9TSVpFX1QqKSBzcmM7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgSU5URVJOQUxfU0laRV9UKiBtY2RzdCA9IChJ
TlRFUk5BTF9TSVpFX1QqKSBkZXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgQ0hV
TktfU0laRV9UICBtY3RtcCA9IChuYnl0ZXMpL3NpemVvZihJTlRFUk5BTF9TSVpFX1QpOyAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgbG9uZyBtY247ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKG1jdG1wIDwg
OCkgbWNuID0gMDsgZWxzZSB7IG1jbiA9IChtY3RtcC0xKS84OyBtY3RtcCAlPSA4OyB9ICAgICAg
ICAgICAgIFwKLSAgc3dpdGNoIChtY3RtcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIDA6IGZvcig7OykgeyAq
bWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBjYXNlIDc6ICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIDY6ICAgICAgICAgICAqbWNkc3QrKyA9
ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNl
IDU6ICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBjYXNlIDQ6ICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysr
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIDM6ICAgICAg
ICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBjYXNlIDI6ICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIDE6ICAgICAgICAgICAqbWNk
c3QrKyA9ICptY3NyYysrOyBpZihtY24gPD0gMCkgYnJlYWs7IG1jbi0tOyB9ICAgICAgIFwKLSAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUoMCkKLQotI2VuZGlmCi0KLS8qIC0tLS0tLS0t
LS0tLS0tLS0tLSBNTUFQIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tICAqLwotCi0KLSNpZiBI
QVZFX01NQVAKLQotI2lmbmRlZiBMQUNLU19GQ05UTF9ICi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNl
bmRpZgotCi0jaWZuZGVmIExBQ0tTX1NZU19NTUFOX0gKLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgot
I2VuZGlmCi0KLSNpZiAhZGVmaW5lZChNQVBfQU5PTllNT1VTKSAmJiBkZWZpbmVkKE1BUF9BTk9O
KQotI2RlZmluZSBNQVBfQU5PTllNT1VTIE1BUF9BTk9OCi0jZW5kaWYKLQotLyogCi0gICBOZWFy
bHkgYWxsIHZlcnNpb25zIG9mIG1tYXAgc3VwcG9ydCBNQVBfQU5PTllNT1VTLCAKLSAgIHNvIHRo
ZSBmb2xsb3dpbmcgaXMgdW5saWtlbHkgdG8gYmUgbmVlZGVkLCBidXQgaXMKLSAgIHN1cHBsaWVk
IGp1c3QgaW4gY2FzZS4KLSovCi0KLSNpZm5kZWYgTUFQX0FOT05ZTU9VUwotCi1zdGF0aWMgaW50
IGRldl96ZXJvX2ZkID0gLTE7IC8qIENhY2hlZCBmaWxlIGRlc2NyaXB0b3IgZm9yIC9kZXYvemVy
by4gKi8KLQotI2RlZmluZSBNTUFQKGFkZHIsIHNpemUsIHByb3QsIGZsYWdzKSAoKGRldl96ZXJv
X2ZkIDwgMCkgPyBcCi0gKGRldl96ZXJvX2ZkID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKSwg
XAotICBtbWFwKChhZGRyKSwgKHNpemUpLCAocHJvdCksIChmbGFncyksIGRldl96ZXJvX2ZkLCAw
KSkgOiBcCi0gICBtbWFwKChhZGRyKSwgKHNpemUpLCAocHJvdCksIChmbGFncyksIGRldl96ZXJv
X2ZkLCAwKSkKLQotI2Vsc2UKLQotI2RlZmluZSBNTUFQKGFkZHIsIHNpemUsIHByb3QsIGZsYWdz
KSBcCi0gKG1tYXAoKGFkZHIpLCAoc2l6ZSksIChwcm90KSwgKGZsYWdzKXxNQVBfQU5PTllNT1VT
LCAtMSwgMCkpCi0KLSNlbmRpZgotCi0KLSNlbmRpZiAvKiBIQVZFX01NQVAgKi8KLQotCi0vKgot
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ2h1bmsgcmVwcmVzZW50YXRpb25zIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0qLwotCi0KLS8qCi0gIFRoaXMgc3RydWN0IGRlY2xhcmF0aW9uIGlz
IG1pc2xlYWRpbmcgKGJ1dCBhY2N1cmF0ZSBhbmQgbmVjZXNzYXJ5KS4KLSAgSXQgZGVjbGFyZXMg
YSAidmlldyIgaW50byBtZW1vcnkgYWxsb3dpbmcgYWNjZXNzIHRvIG5lY2Vzc2FyeQotICBmaWVs
ZHMgYXQga25vd24gb2Zmc2V0cyBmcm9tIGEgZ2l2ZW4gYmFzZS4gU2VlIGV4cGxhbmF0aW9uIGJl
bG93LgotKi8KLQotc3RydWN0IG1hbGxvY19jaHVuayB7Ci0KLSAgSU5URVJOQUxfU0laRV9UICAg
ICAgcHJldl9zaXplOyAgLyogU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAoaWYgZnJlZSkuICAqLwot
ICBJTlRFUk5BTF9TSVpFX1QgICAgICBzaXplOyAgICAgICAvKiBTaXplIGluIGJ5dGVzLCBpbmNs
dWRpbmcgb3ZlcmhlYWQuICovCi0KLSAgc3RydWN0IG1hbGxvY19jaHVuayogZmQ7ICAgICAgICAg
LyogZG91YmxlIGxpbmtzIC0tIHVzZWQgb25seSBpZiBmcmVlLiAqLwotICBzdHJ1Y3QgbWFsbG9j
X2NodW5rKiBiazsKLX07Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBtY2h1bmtw
dHI7Ci0KLS8qCi0gICBtYWxsb2NfY2h1bmsgZGV0YWlsczoKLQotICAgIChUaGUgZm9sbG93aW5n
IGluY2x1ZGVzIGxpZ2h0bHkgZWRpdGVkIGV4cGxhbmF0aW9ucyBieSBDb2xpbiBQbHVtYi4pCi0K
LSAgICBDaHVua3Mgb2YgbWVtb3J5IGFyZSBtYWludGFpbmVkIHVzaW5nIGEgYGJvdW5kYXJ5IHRh
ZycgbWV0aG9kIGFzCi0gICAgZGVzY3JpYmVkIGluIGUuZy4sIEtudXRoIG9yIFN0YW5kaXNoLiAg
KFNlZSB0aGUgcGFwZXIgYnkgUGF1bAotICAgIFdpbHNvbiBmdHA6Ly9mdHAuY3MudXRleGFzLmVk
dS9wdWIvZ2FyYmFnZS9hbGxvY3Nydi5wcyBmb3IgYQotICAgIHN1cnZleSBvZiBzdWNoIHRlY2hu
aXF1ZXMuKSAgU2l6ZXMgb2YgZnJlZSBjaHVua3MgYXJlIHN0b3JlZCBib3RoCi0gICAgaW4gdGhl
IGZyb250IG9mIGVhY2ggY2h1bmsgYW5kIGF0IHRoZSBlbmQuICBUaGlzIG1ha2VzCi0gICAgY29u
c29saWRhdGluZyBmcmFnbWVudGVkIGNodW5rcyBpbnRvIGJpZ2dlciBjaHVua3MgdmVyeSBmYXN0
LiAgVGhlCi0gICAgc2l6ZSBmaWVsZHMgYWxzbyBob2xkIGJpdHMgcmVwcmVzZW50aW5nIHdoZXRo
ZXIgY2h1bmtzIGFyZSBmcmVlIG9yCi0gICAgaW4gdXNlLgotCi0gICAgQW4gYWxsb2NhdGVkIGNo
dW5rIGxvb2tzIGxpa2UgdGhpczoKLQotCi0gICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAg
ICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rLCBpZiBhbGxvY2F0ZWQgICAg
ICAgICAgICB8IHwKLSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAgICAgICAg
ICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAot
ICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgVXNlciBkYXRh
IHN0YXJ0cyBoZXJlLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAuCi0gICAgICAgICAgICAu
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLgotICAgICAgICAgICAgLiAgICAgICAgICAgICAobWFsbG9jX3VzYWJsZV9zcGFjZSgp
IGJ5dGVzKSAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIC4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1uZXh0
Y2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5r
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rCi0KLQotICAgIFdoZXJlICJjaHVuayIgaXMgdGhlIGZyb250IG9mIHRoZSBjaHVuayBmb3Ig
dGhlIHB1cnBvc2Ugb2YgbW9zdCBvZgotICAgIHRoZSBtYWxsb2MgY29kZSwgYnV0ICJtZW0iIGlz
IHRoZSBwb2ludGVyIHRoYXQgaXMgcmV0dXJuZWQgdG8gdGhlCi0gICAgdXNlci4gICJOZXh0Y2h1
bmsiIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgY29udGlndW91cyBjaHVuay4KLQotICAg
IENodW5rcyBhbHdheXMgYmVnaW4gb24gZXZlbiB3b3JkIGJvdW5kcmllcywgc28gdGhlIG1lbSBw
b3J0aW9uCi0gICAgKHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSB1c2VyKSBpcyBhbHNvIG9uIGFu
IGV2ZW4gd29yZCBib3VuZGFyeSwgYW5kCi0gICAgdGh1cyBhdCBsZWFzdCBkb3VibGUtd29yZCBh
bGlnbmVkLgotCi0gICAgRnJlZSBjaHVua3MgYXJlIHN0b3JlZCBpbiBjaXJjdWxhciBkb3VibHkt
bGlua2VkIGxpc3RzLCBhbmQgbG9vayBsaWtlIHRoaXM6Ci0KLSAgICBjaHVuay0+ICstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
Ci0gICAgICAgICAgICB8ICAgICAgICAgICAgIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICBgaGVhZDon
IHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAg
ICAgICAgfFB8Ci0gICAgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAg
ICBGb3J3YXJkIHBvaW50ZXIgdG8gbmV4dCBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgIHwKLSAg
ICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAgICAgICAgICAgIEJhY2sgcG9pbnRl
ciB0byBwcmV2aW91cyBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgfAotICAgICAgICAgICAgKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgVW51c2VkIHNwYWNlIChtYXkgYmUgMCBi
eXRlcyBsb25nKSAgICAgICAgICAgICAgICAuCi0gICAgICAgICAgICAuICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgotICAgICAg
ICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwKLW5leHRjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0r
LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgYGZvb3Q6JyB8ICAgICAg
ICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAg
fAotICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSst
Ky0rLSstKy0rLSstKy0rLSstKy0rLSsKLQotICAgIFRoZSBQIChQUkVWX0lOVVNFKSBiaXQsIHN0
b3JlZCBpbiB0aGUgdW51c2VkIGxvdy1vcmRlciBiaXQgb2YgdGhlCi0gICAgY2h1bmsgc2l6ZSAo
d2hpY2ggaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgdHdvIHdvcmRzKSwgaXMgYW4gaW4tdXNlCi0g
ICAgYml0IGZvciB0aGUgKnByZXZpb3VzKiBjaHVuay4gIElmIHRoYXQgYml0IGlzICpjbGVhcios
IHRoZW4gdGhlCi0gICAgd29yZCBiZWZvcmUgdGhlIGN1cnJlbnQgY2h1bmsgc2l6ZSBjb250YWlu
cyB0aGUgcHJldmlvdXMgY2h1bmsKLSAgICBzaXplLCBhbmQgY2FuIGJlIHVzZWQgdG8gZmluZCB0
aGUgZnJvbnQgb2YgdGhlIHByZXZpb3VzIGNodW5rLgotICAgIFRoZSB2ZXJ5IGZpcnN0IGNodW5r
IGFsbG9jYXRlZCBhbHdheXMgaGFzIHRoaXMgYml0IHNldCwKLSAgICBwcmV2ZW50aW5nIGFjY2Vz
cyB0byBub24tZXhpc3RlbnQgKG9yIG5vbi1vd25lZCkgbWVtb3J5LiBJZgotICAgIHByZXZfaW51
c2UgaXMgc2V0IGZvciBhbnkgZ2l2ZW4gY2h1bmssIHRoZW4geW91IENBTk5PVCBkZXRlcm1pbmUK
LSAgICB0aGUgc2l6ZSBvZiB0aGUgcHJldmlvdXMgY2h1bmssIGFuZCBtaWdodCBldmVuIGdldCBh
IG1lbW9yeQotICAgIGFkZHJlc3NpbmcgZmF1bHQgd2hlbiB0cnlpbmcgdG8gZG8gc28uCi0KLSAg
ICBOb3RlIHRoYXQgdGhlIGBmb290JyBvZiB0aGUgY3VycmVudCBjaHVuayBpcyBhY3R1YWxseSBy
ZXByZXNlbnRlZAotICAgIGFzIHRoZSBwcmV2X3NpemUgb2YgdGhlIE5FWFQgY2h1bmsuIFRoaXMg
bWFrZXMgaXQgZWFzaWVyIHRvCi0gICAgZGVhbCB3aXRoIGFsaWdubWVudHMgZXRjIGJ1dCBjYW4g
YmUgdmVyeSBjb25mdXNpbmcgd2hlbiB0cnlpbmcKLSAgICB0byBleHRlbmQgb3IgYWRhcHQgdGhp
cyBjb2RlLgotCi0gICAgVGhlIHR3byBleGNlcHRpb25zIHRvIGFsbCB0aGlzIGFyZQotCi0gICAg
IDEuIFRoZSBzcGVjaWFsIGNodW5rIGB0b3AnIGRvZXNuJ3QgYm90aGVyIHVzaW5nIHRoZQotICAg
ICAgICB0cmFpbGluZyBzaXplIGZpZWxkIHNpbmNlIHRoZXJlIGlzIG5vIG5leHQgY29udGlndW91
cyBjaHVuawotICAgICAgICB0aGF0IHdvdWxkIGhhdmUgdG8gaW5kZXggb2ZmIGl0LiBBZnRlciBp
bml0aWFsaXphdGlvbiwgYHRvcCcKLSAgICAgICAgaXMgZm9yY2VkIHRvIGFsd2F5cyBleGlzdC4g
IElmIGl0IHdvdWxkIGJlY29tZSBsZXNzIHRoYW4KLSAgICAgICAgTUlOU0laRSBieXRlcyBsb25n
LCBpdCBpcyByZXBsZW5pc2hlZC4KLQotICAgICAyLiBDaHVua3MgYWxsb2NhdGVkIHZpYSBtbWFw
LCB3aGljaCBoYXZlIHRoZSBzZWNvbmQtbG93ZXN0LW9yZGVyCi0gICAgICAgIGJpdCAoSVNfTU1B
UFBFRCkgc2V0IGluIHRoZWlyIHNpemUgZmllbGRzLiAgQmVjYXVzZSB0aGV5IGFyZQotICAgICAg
ICBhbGxvY2F0ZWQgb25lLWJ5LW9uZSwgZWFjaCBtdXN0IGNvbnRhaW4gaXRzIG93biB0cmFpbGlu
ZyBzaXplIGZpZWxkLgotCi0qLwotCi0vKgotICAtLS0tLS0tLS0tIFNpemUgYW5kIGFsaWdubWVu
dCBjaGVja3MgYW5kIGNvbnZlcnNpb25zIC0tLS0tLS0tLS0KLSovCi0KLS8qIGNvbnZlcnNpb24g
ZnJvbSBtYWxsb2MgaGVhZGVycyB0byB1c2VyIHBvaW50ZXJzLCBhbmQgYmFjayAqLwotCi0jZGVm
aW5lIGNodW5rMm1lbShwKSAgICgoVm9pZF90KikoKGNoYXIqKShwKSArIDIqU0laRV9TWikpCi0j
ZGVmaW5lIG1lbTJjaHVuayhtZW0pICgobWNodW5rcHRyKSgoY2hhciopKG1lbSkgLSAyKlNJWkVf
U1opKQotCi0vKiBUaGUgc21hbGxlc3QgcG9zc2libGUgY2h1bmsgKi8KLSNkZWZpbmUgTUlOX0NI
VU5LX1NJWkUgICAgICAgIChzaXplb2Yoc3RydWN0IG1hbGxvY19jaHVuaykpCi0KLS8qIFRoZSBz
bWFsbGVzdCBzaXplIHdlIGNhbiBtYWxsb2MgaXMgYW4gYWxpZ25lZCBtaW5pbWFsIGNodW5rICov
Ci0KLSNkZWZpbmUgTUlOU0laRSAgXAotICAoQ0hVTktfU0laRV9UKSgoKE1JTl9DSFVOS19TSVpF
K01BTExPQ19BTElHTl9NQVNLKSAmIH5NQUxMT0NfQUxJR05fTUFTSykpCi0KLS8qIENoZWNrIGlm
IG0gaGFzIGFjY2VwdGFibGUgYWxpZ25tZW50ICovCi0KLSNkZWZpbmUgYWxpZ25lZF9PSyhtKSAg
KCgoUFRSX1VJTlQpKChtKSkgJiAoTUFMTE9DX0FMSUdOX01BU0spKSA9PSAwKQotCi0KLS8qIAot
ICAgQ2hlY2sgaWYgYSByZXF1ZXN0IGlzIHNvIGxhcmdlIHRoYXQgaXQgd291bGQgd3JhcCBhcm91
bmQgemVybyB3aGVuCi0gICBwYWRkZWQgYW5kIGFsaWduZWQuIFRvIHNpbXBsaWZ5IHNvbWUgb3Ro
ZXIgY29kZSwgdGhlIGJvdW5kIGlzIG1hZGUKLSAgIGxvdyBlbm91Z2ggc28gdGhhdCBhZGRpbmcg
TUlOU0laRSB3aWxsIGFsc28gbm90IHdyYXAgYXJvdW5kIHNlcm8uCi0qLwotCi0jZGVmaW5lIFJF
UVVFU1RfT1VUX09GX1JBTkdFKHJlcSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICgoQ0hVTktfU0laRV9UKShyZXEpID49ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgIChDSFVOS19TSVpFX1QpKElOVEVSTkFMX1NJWkVfVCkoLTIgKiBNSU5T
SVpFKSkgICAgCi0KLS8qIHBhZCByZXF1ZXN0IGJ5dGVzIGludG8gYSB1c2FibGUgc2l6ZSAtLSBp
bnRlcm5hbCB2ZXJzaW9uICovCi0KLSNkZWZpbmUgcmVxdWVzdDJzaXplKHJlcSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCgocmVxKSArIFNJWkVfU1ogKyBN
QUxMT0NfQUxJR05fTUFTSyA8IE1JTlNJWkUpICA/ICAgICAgICAgICAgIFwKLSAgIE1JTlNJWkUg
OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICgocmVxKSArIFNJWkVfU1ogKyBNQUxMT0NfQUxJR05fTUFTSykgJiB+TUFMTE9DX0FMSUdO
X01BU0spCi0KLS8qICBTYW1lLCBleGNlcHQgYWxzbyBwZXJmb3JtIGFyZ3VtZW50IGNoZWNrICov
Ci0KLSNkZWZpbmUgY2hlY2tlZF9yZXF1ZXN0MnNpemUocmVxLCBzeikgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgaWYgKFJFUVVFU1RfT1VUX09GX1JBTkdFKHJlcSkpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gMDsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgKHN6KSA9IHJlcXVlc3Qyc2l6ZShyZXEpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tIFBoeXNpY2Fs
IGNodW5rIG9wZXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0KLS8qIHNpemUgZmllbGQg
aXMgb3InZWQgd2l0aCBQUkVWX0lOVVNFIHdoZW4gcHJldmlvdXMgYWRqYWNlbnQgY2h1bmsgaW4g
dXNlICovCi0jZGVmaW5lIFBSRVZfSU5VU0UgMHgxCi0KLS8qIGV4dHJhY3QgaW51c2UgYml0IG9m
IHByZXZpb3VzIGNodW5rICovCi0jZGVmaW5lIHByZXZfaW51c2UocCkgICAgICAgKChwKS0+c2l6
ZSAmIFBSRVZfSU5VU0UpCi0KLQotLyogc2l6ZSBmaWVsZCBpcyBvcidlZCB3aXRoIElTX01NQVBQ
RUQgaWYgdGhlIGNodW5rIHdhcyBvYnRhaW5lZCB3aXRoIG1tYXAoKSAqLwotI2RlZmluZSBJU19N
TUFQUEVEIDB4MgotCi0vKiBjaGVjayBmb3IgbW1hcCgpJ2VkIGNodW5rICovCi0jZGVmaW5lIGNo
dW5rX2lzX21tYXBwZWQocCkgKChwKS0+c2l6ZSAmIElTX01NQVBQRUQpCi0KLS8qIAotICBCaXRz
IHRvIG1hc2sgb2ZmIHdoZW4gZXh0cmFjdGluZyBzaXplIAotCi0gIE5vdGU6IElTX01NQVBQRUQg
aXMgaW50ZW50aW9uYWxseSBub3QgbWFza2VkIG9mZiBmcm9tIHNpemUgZmllbGQgaW4KLSAgbWFj
cm9zIGZvciB3aGljaCBtbWFwcGVkIGNodW5rcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4gVGhpcyBz
aG91bGQKLSAgY2F1c2UgaGVscGZ1bCBjb3JlIGR1bXBzIHRvIG9jY3VyIGlmIGl0IGlzIHRyaWVk
IGJ5IGFjY2lkZW50IGJ5Ci0gIHBlb3BsZSBleHRlbmRpbmcgb3IgYWRhcHRpbmcgdGhpcyBtYWxs
b2MuCi0qLwotI2RlZmluZSBTSVpFX0JJVFMgKFBSRVZfSU5VU0V8SVNfTU1BUFBFRCkKLQotLyog
R2V0IHNpemUsIGlnbm9yaW5nIHVzZSBiaXRzICovCi0jZGVmaW5lIGNodW5rc2l6ZShwKSAgICAg
ICAgICgocCktPnNpemUgJiB+KFNJWkVfQklUUykpCi0KLQotLyogUHRyIHRvIG5leHQgcGh5c2lj
YWwgbWFsbG9jX2NodW5rLiAqLwotI2RlZmluZSBuZXh0X2NodW5rKHApICgobWNodW5rcHRyKSgg
KChjaGFyKikocCkpICsgKChwKS0+c2l6ZSAmIH5QUkVWX0lOVVNFKSApKQotCi0vKiBQdHIgdG8g
cHJldmlvdXMgcGh5c2ljYWwgbWFsbG9jX2NodW5rICovCi0jZGVmaW5lIHByZXZfY2h1bmsocCkg
KChtY2h1bmtwdHIpKCAoKGNoYXIqKShwKSkgLSAoKHApLT5wcmV2X3NpemUpICkpCi0KLS8qIFRy
ZWF0IHNwYWNlIGF0IHB0ciArIG9mZnNldCBhcyBhIGNodW5rICovCi0jZGVmaW5lIGNodW5rX2F0
X29mZnNldChwLCBzKSAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpCi0KLS8qIGV4
dHJhY3QgcCdzIGludXNlIGJpdCAqLwotI2RlZmluZSBpbnVzZShwKVwKLSgoKChtY2h1bmtwdHIp
KCgoY2hhciopKHApKSsoKHApLT5zaXplICYgflBSRVZfSU5VU0UpKSktPnNpemUpICYgUFJFVl9J
TlVTRSkKLQotLyogc2V0L2NsZWFyIGNodW5rIGFzIGJlaW5nIGludXNlIHdpdGhvdXQgb3RoZXJ3
aXNlIGRpc3R1cmJpbmcgKi8KLSNkZWZpbmUgc2V0X2ludXNlKHApXAotKChtY2h1bmtwdHIpKCgo
Y2hhciopKHApKSArICgocCktPnNpemUgJiB+UFJFVl9JTlVTRSkpKS0+c2l6ZSB8PSBQUkVWX0lO
VVNFCi0KLSNkZWZpbmUgY2xlYXJfaW51c2UocClcCi0oKG1jaHVua3B0cikoKChjaGFyKikocCkp
ICsgKChwKS0+c2l6ZSAmIH5QUkVWX0lOVVNFKSkpLT5zaXplICY9IH4oUFJFVl9JTlVTRSkKLQot
Ci0vKiBjaGVjay9zZXQvY2xlYXIgaW51c2UgYml0cyBpbiBrbm93biBwbGFjZXMgKi8KLSNkZWZp
bmUgaW51c2VfYml0X2F0X29mZnNldChwLCBzKVwKLSAoKChtY2h1bmtwdHIpKCgoY2hhciopKHAp
KSArIChzKSkpLT5zaXplICYgUFJFVl9JTlVTRSkKLQotI2RlZmluZSBzZXRfaW51c2VfYml0X2F0
X29mZnNldChwLCBzKVwKLSAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5zaXpl
IHw9IFBSRVZfSU5VU0UpCi0KLSNkZWZpbmUgY2xlYXJfaW51c2VfYml0X2F0X29mZnNldChwLCBz
KVwKLSAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5zaXplICY9IH4oUFJFVl9J
TlVTRSkpCi0KLQotLyogU2V0IHNpemUgYXQgaGVhZCwgd2l0aG91dCBkaXN0dXJiaW5nIGl0cyB1
c2UgYml0ICovCi0jZGVmaW5lIHNldF9oZWFkX3NpemUocCwgcykgICgocCktPnNpemUgPSAoKChw
KS0+c2l6ZSAmIFBSRVZfSU5VU0UpIHwgKHMpKSkKLQotLyogU2V0IHNpemUvdXNlIGZpZWxkICov
Ci0jZGVmaW5lIHNldF9oZWFkKHAsIHMpICAgICAgICgocCktPnNpemUgPSAocykpCi0KLS8qIFNl
dCBzaXplIGF0IGZvb3RlciAob25seSB3aGVuIGNodW5rIGlzIG5vdCBpbiB1c2UpICovCi0jZGVm
aW5lIHNldF9mb290KHAsIHMpICAgICAgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkp
LT5wcmV2X3NpemUgPSAocykpCi0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW50ZXJu
YWwgZGF0YSBzdHJ1Y3R1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIEFsbCBpbnRlcm5h
bCBzdGF0ZSBpcyBoZWxkIGluIGFuIGluc3RhbmNlIG9mIG1hbGxvY19zdGF0ZSBkZWZpbmVkCi0g
ICBiZWxvdy4gVGhlcmUgYXJlIG5vIG90aGVyIHN0YXRpYyB2YXJpYWJsZXMsIGV4Y2VwdCBpbiB0
d28gb3B0aW9uYWwKLSAgIGNhc2VzOiAKLSAgICogSWYgVVNFX01BTExPQ19MT0NLIGlzIGRlZmlu
ZWQsIHRoZSBtQUxMT0NfTVVURXggZGVjbGFyZWQgYWJvdmUuIAotICAgKiBJZiBIQVZFX01NQVAg
aXMgdHJ1ZSwgYnV0IG1tYXAgZG9lc24ndCBzdXBwb3J0Ci0gICAgIE1BUF9BTk9OWU1PVVMsIGEg
ZHVtbXkgZmlsZSBkZXNjcmlwdG9yIGZvciBtbWFwLgotCi0gICBCZXdhcmUgb2YgbG90cyBvZiB0
cmlja3MgdGhhdCBtaW5pbWl6ZSB0aGUgdG90YWwgYm9va2tlZXBpbmcgc3BhY2UKLSAgIHJlcXVp
cmVtZW50cy4gVGhlIHJlc3VsdCBpcyBhIGxpdHRsZSBvdmVyIDFLIGJ5dGVzIChmb3IgNGJ5dGUK
LSAgIHBvaW50ZXJzIGFuZCBzaXplX3QuKQotKi8KLQotLyoKLSAgQmlucwotCi0gICAgQW4gYXJy
YXkgb2YgYmluIGhlYWRlcnMgZm9yIGZyZWUgY2h1bmtzLiBFYWNoIGJpbiBpcyBkb3VibHkKLSAg
ICBsaW5rZWQuICBUaGUgYmlucyBhcmUgYXBwcm94aW1hdGVseSBwcm9wb3J0aW9uYWxseSAobG9n
KSBzcGFjZWQuCi0gICAgVGhlcmUgYXJlIGEgbG90IG9mIHRoZXNlIGJpbnMgKDEyOCkuIFRoaXMg
bWF5IGxvb2sgZXhjZXNzaXZlLCBidXQKLSAgICB3b3JrcyB2ZXJ5IHdlbGwgaW4gcHJhY3RpY2Uu
ICBNb3N0IGJpbnMgaG9sZCBzaXplcyB0aGF0IGFyZQotICAgIHVudXN1YWwgYXMgbWFsbG9jIHJl
cXVlc3Qgc2l6ZXMsIGJ1dCBhcmUgbW9yZSB1c3VhbCBmb3IgZnJhZ21lbnRzCi0gICAgYW5kIGNv
bnNvbGlkYXRlZCBzZXRzIG9mIGNodW5rcywgd2hpY2ggaXMgd2hhdCB0aGVzZSBiaW5zIGhvbGQs
IHNvCi0gICAgdGhleSBjYW4gYmUgZm91bmQgcXVpY2tseS4gIEFsbCBwcm9jZWR1cmVzIG1haW50
YWluIHRoZSBpbnZhcmlhbnQKLSAgICB0aGF0IG5vIGNvbnNvbGlkYXRlZCBjaHVuayBwaHlzaWNh
bGx5IGJvcmRlcnMgYW5vdGhlciBvbmUsIHNvIGVhY2gKLSAgICBjaHVuayBpbiBhIGxpc3QgaXMg
a25vd24gdG8gYmUgcHJlY2VlZGVkIGFuZCBmb2xsb3dlZCBieSBlaXRoZXIKLSAgICBpbnVzZSBj
aHVua3Mgb3IgdGhlIGVuZHMgb2YgbWVtb3J5LgotCi0gICAgQ2h1bmtzIGluIGJpbnMgYXJlIGtl
cHQgaW4gc2l6ZSBvcmRlciwgd2l0aCB0aWVzIGdvaW5nIHRvIHRoZQotICAgIGFwcHJveGltYXRl
bHkgbGVhc3QgcmVjZW50bHkgdXNlZCBjaHVuay4gT3JkZXJpbmcgaXNuJ3QgbmVlZGVkCi0gICAg
Zm9yIHRoZSBzbWFsbCBiaW5zLCB3aGljaCBhbGwgY29udGFpbiB0aGUgc2FtZS1zaXplZCBjaHVu
a3MsIGJ1dAotICAgIGZhY2lsaXRhdGVzIGJlc3QtZml0IGFsbG9jYXRpb24gZm9yIGxhcmdlciBj
aHVua3MuIFRoZXNlIGxpc3RzCi0gICAgYXJlIGp1c3Qgc2VxdWVudGlhbC4gS2VlcGluZyB0aGVt
IGluIG9yZGVyIGFsbW9zdCBuZXZlciByZXF1aXJlcwotICAgIGVub3VnaCB0cmF2ZXJzYWwgdG8g
d2FycmFudCB1c2luZyBmYW5jaWVyIG9yZGVyZWQgZGF0YQotICAgIHN0cnVjdHVyZXMuICAKLQot
ICAgIENodW5rcyBvZiB0aGUgc2FtZSBzaXplIGFyZSBsaW5rZWQgd2l0aCB0aGUgbW9zdAotICAg
IHJlY2VudGx5IGZyZWVkIGF0IHRoZSBmcm9udCwgYW5kIGFsbG9jYXRpb25zIGFyZSB0YWtlbiBm
cm9tIHRoZQotICAgIGJhY2suICBUaGlzIHJlc3VsdHMgaW4gTFJVIChGSUZPKSBhbGxvY2F0aW9u
IG9yZGVyLCB3aGljaCB0ZW5kcwotICAgIHRvIGdpdmUgZWFjaCBjaHVuayBhbiBlcXVhbCBvcHBv
cnR1bml0eSB0byBiZSBjb25zb2xpZGF0ZWQgd2l0aAotICAgIGFkamFjZW50IGZyZWVkIGNodW5r
cywgcmVzdWx0aW5nIGluIGxhcmdlciBmcmVlIGNodW5rcyBhbmQgbGVzcwotICAgIGZyYWdtZW50
YXRpb24uCi0KLSAgICBUbyBzaW1wbGlmeSB1c2UgaW4gZG91YmxlLWxpbmtlZCBsaXN0cywgZWFj
aCBiaW4gaGVhZGVyIGFjdHMKLSAgICBhcyBhIG1hbGxvY19jaHVuay4gVGhpcyBhdm9pZHMgc3Bl
Y2lhbC1jYXNpbmcgZm9yIGhlYWRlcnMuCi0gICAgQnV0IHRvIGNvbnNlcnZlIHNwYWNlIGFuZCBp
bXByb3ZlIGxvY2FsaXR5LCB3ZSBhbGxvY2F0ZQotICAgIG9ubHkgdGhlIGZkL2JrIHBvaW50ZXJz
IG9mIGJpbnMsIGFuZCB0aGVuIHVzZSByZXBvc2l0aW9uaW5nIHRyaWNrcwotICAgIHRvIHRyZWF0
IHRoZXNlIGFzIHRoZSBmaWVsZHMgb2YgYSBtYWxsb2NfY2h1bmsqLiAgCi0qLwotCi10eXBlZGVm
IHN0cnVjdCBtYWxsb2NfY2h1bmsqIG1iaW5wdHI7Ci0KLS8qIGFkZHJlc3NpbmcgLS0gbm90ZSB0
aGF0IGJpbl9hdCgwKSBkb2VzIG5vdCBleGlzdCAqLwotI2RlZmluZSBiaW5fYXQobSwgaSkgKCht
YmlucHRyKSgoY2hhciopJigobSktPmJpbnNbKGkpPDwxXSkgLSAoU0laRV9TWjw8MSkpKQotCi0v
KiBhbmFsb2cgb2YgKytiaW4gKi8KLSNkZWZpbmUgbmV4dF9iaW4oYikgICgobWJpbnB0cikoKGNo
YXIqKShiKSArIChzaXplb2YobWNodW5rcHRyKTw8MSkpKQotCi0vKiBSZW1pbmRlcnMgYWJvdXQg
bGlzdCBkaXJlY3Rpb25hbGl0eSB3aXRoaW4gYmlucyAqLwotI2RlZmluZSBmaXJzdChiKSAgICAg
KChiKS0+ZmQpCi0jZGVmaW5lIGxhc3QoYikgICAgICAoKGIpLT5iaykKLQotLyogVGFrZSBhIGNo
dW5rIG9mZiBhIGJpbiBsaXN0ICovCi0jZGVmaW5lIHVubGluayhQLCBCSywgRkQpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRkQgPSBQLT5mZDsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBCSyA9IFAtPmJrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIEZELT5iayA9IEJLOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgQkstPmZkID0gRkQ7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0v
KgotICBJbmRleGluZwotCi0gICAgQmlucyBmb3Igc2l6ZXMgPCA1MTIgYnl0ZXMgY29udGFpbiBj
aHVua3Mgb2YgYWxsIHRoZSBzYW1lIHNpemUsIHNwYWNlZAotICAgIDggYnl0ZXMgYXBhcnQuIExh
cmdlciBiaW5zIGFyZSBhcHByb3hpbWF0ZWx5IGxvZ2FyaXRobWljYWxseSBzcGFjZWQ6Ci0KLSAg
ICA2NCBiaW5zIG9mIHNpemUgICAgICAgOAotICAgIDMyIGJpbnMgb2Ygc2l6ZSAgICAgIDY0Ci0g
ICAgMTYgYmlucyBvZiBzaXplICAgICA1MTIKLSAgICAgOCBiaW5zIG9mIHNpemUgICAgNDA5Ngot
ICAgICA0IGJpbnMgb2Ygc2l6ZSAgIDMyNzY4Ci0gICAgIDIgYmlucyBvZiBzaXplICAyNjIxNDQK
LSAgICAgMSBiaW4gIG9mIHNpemUgd2hhdCdzIGxlZnQKLQotICAgIFRoZSBiaW5zIHRvcCBvdXQg
YXJvdW5kIDFNQiBiZWNhdXNlIHdlIGV4cGVjdCB0byBzZXJ2aWNlIGxhcmdlCi0gICAgcmVxdWVz
dHMgdmlhIG1tYXAuCi0qLwotCi0jZGVmaW5lIE5CSU5TICAgICAgICAgICAgICA5NgotI2RlZmlu
ZSBOU01BTExCSU5TICAgICAgICAgMzIKLSNkZWZpbmUgU01BTExCSU5fV0lEVEggICAgICA4Ci0j
ZGVmaW5lIE1JTl9MQVJHRV9TSVpFICAgIDI1NgotCi0jZGVmaW5lIGluX3NtYWxsYmluX3Jhbmdl
KHN6KSAgXAotICAoKENIVU5LX1NJWkVfVCkoc3opIDwgKENIVU5LX1NJWkVfVClNSU5fTEFSR0Vf
U0laRSkKLQotI2RlZmluZSBzbWFsbGJpbl9pbmRleChzeikgICAgICgoKHVuc2lnbmVkKShzeikp
ID4+IDMpCi0KLS8qCi0gIENvbXB1dGUgaW5kZXggZm9yIHNpemUuIFdlIGV4cGVjdCB0aGlzIHRv
IGJlIGlubGluZWQgd2hlbgotICBjb21waWxlZCB3aXRoIG9wdGltaXphdGlvbiwgZWxzZSBub3Qs
IHdoaWNoIHdvcmtzIG91dCB3ZWxsLgotKi8KLXN0YXRpYyBpbnQgbGFyZ2ViaW5faW5kZXgodW5z
aWduZWQgaW50IHN6KSB7Ci0gIHVuc2lnbmVkIGludCAgeCA9IHN6ID4+IFNNQUxMQklOX1dJRFRI
OyAKLSAgdW5zaWduZWQgaW50IG07ICAgICAgICAgICAgLyogYml0IHBvc2l0aW9uIG9mIGhpZ2hl
c3Qgc2V0IGJpdCBvZiBtICovCi0KLSAgaWYgKHggPj0gMHgxMDAwMCkgcmV0dXJuIE5CSU5TLTE7
Ci0KLSAgLyogT24gaW50ZWwsIHVzZSBCU1JMIGluc3RydWN0aW9uIHRvIGZpbmQgaGlnaGVzdCBi
aXQgKi8KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKGkzODYpCi0KLSAgX19hc21f
XygiYnNybCAlMSwlMFxuXHQiCi0gICAgICAgICAgOiAiPXIiIChtKSAKLSAgICAgICAgICA6ICJn
IiAgKHgpKTsKLQotI2Vsc2UKLSAgewotICAgIC8qCi0gICAgICBCYXNlZCBvbiBicmFuY2gtZnJl
ZSBubHogYWxnb3JpdGhtIGluIGNoYXB0ZXIgNSBvZiBIZW5yeQotICAgICAgUy4gV2FycmVuIEpy
J3MgYm9vayAiSGFja2VyJ3MgRGVsaWdodCIuCi0gICAgKi8KLQotICAgIHVuc2lnbmVkIGludCBu
ID0gKCh4IC0gMHgxMDApID4+IDE2KSAmIDg7Ci0gICAgeCA8PD0gbjsgCi0gICAgbSA9ICgoeCAt
IDB4MTAwMCkgPj4gMTYpICYgNDsKLSAgICBuICs9IG07IAotICAgIHggPDw9IG07IAotICAgIG0g
PSAoKHggLSAweDQwMDApID4+IDE2KSAmIDI7Ci0gICAgbiArPSBtOyAKLSAgICB4ID0gKHggPDwg
bSkgPj4gMTQ7Ci0gICAgbSA9IDEzIC0gbiArICh4ICYgfih4Pj4xKSk7Ci0gIH0KLSNlbmRpZgot
Ci0gIC8qIFVzZSBuZXh0IDIgYml0cyB0byBjcmVhdGUgZmluZXItZ3JhbnVsYXJpdHkgYmlucyAq
LwotICByZXR1cm4gTlNNQUxMQklOUyArIChtIDw8IDIpICsgKChzeiA+PiAobSArIDYpKSAmIDMp
OwotfQotCi0jZGVmaW5lIGJpbl9pbmRleChzeikgXAotICgoaW5fc21hbGxiaW5fcmFuZ2Uoc3op
KSA/IHNtYWxsYmluX2luZGV4KHN6KSA6IGxhcmdlYmluX2luZGV4KHN6KSkKLQotLyoKLSAgRklS
U1RfU09SVEVEX0JJTl9TSVpFIGlzIHRoZSBjaHVuayBzaXplIGNvcnJlc3BvbmRpbmcgdG8gdGhl
Ci0gIGZpcnN0IGJpbiB0aGF0IGlzIG1haW50YWluZWQgaW4gc29ydGVkIG9yZGVyLiBUaGlzIG11
c3QKLSAgYmUgdGhlIHNtYWxsZXN0IHNpemUgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIGJpbi4K
LQotICBOb3JtYWxseSwgdGhpcyBzaG91bGQgYmUgTUlOX0xBUkdFX1NJWkUuIEJ1dCB5b3UgY2Fu
IHdlYWtlbgotICBiZXN0IGZpdCBndWFyYW50ZWVzIHRvIHNvbWV0aW1lcyBzcGVlZCB1cCBtYWxs
b2MgYnkgaW5jcmVhc2luZyB2YWx1ZS4KLSAgRG9pbmcgdGhpcyBtZWFucyB0aGF0IG1hbGxvYyBt
YXkgY2hvb3NlIGEgY2h1bmsgdGhhdCBpcyAKLSAgbm9uLWJlc3QtZml0dGluZyBieSB1cCB0byB0
aGUgd2lkdGggb2YgdGhlIGJpbi4KLQotICBTb21lIHVzZWZ1bCBjdXRvZmYgdmFsdWVzOgotICAg
ICAgNTEyIC0gYWxsIGJpbnMgc29ydGVkCi0gICAgIDI1NjAgLSBsZWF2ZXMgYmlucyA8PSAgICAg
NjQgYnl0ZXMgd2lkZSB1bnNvcnRlZCAgCi0gICAgMTIyODggLSBsZWF2ZXMgYmlucyA8PSAgICA1
MTIgYnl0ZXMgd2lkZSB1bnNvcnRlZAotICAgIDY1NTM2IC0gbGVhdmVzIGJpbnMgPD0gICA0MDk2
IGJ5dGVzIHdpZGUgdW5zb3J0ZWQKLSAgIDI2MjE0NCAtIGxlYXZlcyBiaW5zIDw9ICAzMjc2OCBi
eXRlcyB3aWRlIHVuc29ydGVkCi0gICAgICAgLTEgLSBubyBiaW5zIHNvcnRlZCAobm90IHJlY29t
bWVuZGVkISkKLSovCi0KLSNkZWZpbmUgRklSU1RfU09SVEVEX0JJTl9TSVpFIE1JTl9MQVJHRV9T
SVpFIAotLyogI2RlZmluZSBGSVJTVF9TT1JURURfQklOX1NJWkUgNjU1MzYgKi8KLQotLyoKLSAg
VW5zb3J0ZWQgY2h1bmtzCi0KLSAgICBBbGwgcmVtYWluZGVycyBmcm9tIGNodW5rIHNwbGl0cywg
YXMgd2VsbCBhcyBhbGwgcmV0dXJuZWQgY2h1bmtzLAotICAgIGFyZSBmaXJzdCBwbGFjZWQgaW4g
dGhlICJ1bnNvcnRlZCIgYmluLiBUaGV5IGFyZSB0aGVuIHBsYWNlZAotICAgIGluIHJlZ3VsYXIg
YmlucyBhZnRlciBtYWxsb2MgZ2l2ZXMgdGhlbSBPTkUgY2hhbmNlIHRvIGJlIHVzZWQgYmVmb3Jl
Ci0gICAgYmlubmluZy4gU28sIGJhc2ljYWxseSwgdGhlIHVuc29ydGVkX2NodW5rcyBsaXN0IGFj
dHMgYXMgYSBxdWV1ZSwKLSAgICB3aXRoIGNodW5rcyBiZWluZyBwbGFjZWQgb24gaXQgaW4gZnJl
ZSAoYW5kIG1hbGxvY19jb25zb2xpZGF0ZSksCi0gICAgYW5kIHRha2VuIG9mZiAodG8gYmUgZWl0
aGVyIHVzZWQgb3IgcGxhY2VkIGluIGJpbnMpIGluIG1hbGxvYy4KLSovCi0KLS8qIFRoZSBvdGhl
cndpc2UgdW5pbmRleGFibGUgMS1iaW4gaXMgdXNlZCB0byBob2xkIHVuc29ydGVkIGNodW5rcy4g
Ki8KLSNkZWZpbmUgdW5zb3J0ZWRfY2h1bmtzKE0pICAgICAgICAgIChiaW5fYXQoTSwgMSkpCi0K
LS8qCi0gIFRvcAotCi0gICAgVGhlIHRvcC1tb3N0IGF2YWlsYWJsZSBjaHVuayAoaS5lLiwgdGhl
IG9uZSBib3JkZXJpbmcgdGhlIGVuZCBvZgotICAgIGF2YWlsYWJsZSBtZW1vcnkpIGlzIHRyZWF0
ZWQgc3BlY2lhbGx5LiBJdCBpcyBuZXZlciBpbmNsdWRlZCBpbgotICAgIGFueSBiaW4sIGlzIHVz
ZWQgb25seSBpZiBubyBvdGhlciBjaHVuayBpcyBhdmFpbGFibGUsIGFuZCBpcwotICAgIHJlbGVh
c2VkIGJhY2sgdG8gdGhlIHN5c3RlbSBpZiBpdCBpcyB2ZXJ5IGxhcmdlIChzZWUKLSAgICBNX1RS
SU1fVEhSRVNIT0xEKS4gIEJlY2F1c2UgdG9wIGluaXRpYWxseQotICAgIHBvaW50cyB0byBpdHMg
b3duIGJpbiB3aXRoIGluaXRpYWwgemVybyBzaXplLCB0aHVzIGZvcmNpbmcKLSAgICBleHRlbnNp
b24gb24gdGhlIGZpcnN0IG1hbGxvYyByZXF1ZXN0LCB3ZSBhdm9pZCBoYXZpbmcgYW55IHNwZWNp
YWwKLSAgICBjb2RlIGluIG1hbGxvYyB0byBjaGVjayB3aGV0aGVyIGl0IGV2ZW4gZXhpc3RzIHll
dC4gQnV0IHdlIHN0aWxsCi0gICAgbmVlZCB0byBkbyBzbyB3aGVuIGdldHRpbmcgbWVtb3J5IGZy
b20gc3lzdGVtLCBzbyB3ZSBtYWtlCi0gICAgaW5pdGlhbF90b3AgdHJlYXQgdGhlIGJpbiBhcyBh
IGxlZ2FsIGJ1dCB1bnVzYWJsZSBjaHVuayBkdXJpbmcgdGhlCi0gICAgaW50ZXJ2YWwgYmV0d2Vl
biBpbml0aWFsaXphdGlvbiBhbmQgdGhlIGZpcnN0IGNhbGwgdG8KLSAgICBzWVNNQUxMT2MuIChU
aGlzIGlzIHNvbWV3aGF0IGRlbGljYXRlLCBzaW5jZSBpdCByZWxpZXMgb24KLSAgICB0aGUgMiBw
cmVjZWRpbmcgd29yZHMgdG8gYmUgemVybyBkdXJpbmcgdGhpcyBpbnRlcnZhbCBhcyB3ZWxsLikK
LSovCi0KLS8qIENvbnZlbmllbnRseSwgdGhlIHVuc29ydGVkIGJpbiBjYW4gYmUgdXNlZCBhcyBk
dW1teSB0b3Agb24gZmlyc3QgY2FsbCAqLwotI2RlZmluZSBpbml0aWFsX3RvcChNKSAgICAgICAg
ICAgICAgKHVuc29ydGVkX2NodW5rcyhNKSkKLQotLyoKLSAgQmlubWFwCi0KLSAgICBUbyBoZWxw
IGNvbXBlbnNhdGUgZm9yIHRoZSBsYXJnZSBudW1iZXIgb2YgYmlucywgYSBvbmUtbGV2ZWwgaW5k
ZXgKLSAgICBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgYmluLWJ5LWJpbiBzZWFyY2hpbmcuICBgYmlu
bWFwJyBpcyBhCi0gICAgYml0dmVjdG9yIHJlY29yZGluZyB3aGV0aGVyIGJpbnMgYXJlIGRlZmlu
aXRlbHkgZW1wdHkgc28gdGhleSBjYW4KLSAgICBiZSBza2lwcGVkIG92ZXIgZHVyaW5nIGR1cmlu
ZyB0cmF2ZXJzYWxzLiAgVGhlIGJpdHMgYXJlIE5PVCBhbHdheXMKLSAgICBjbGVhcmVkIGFzIHNv
b24gYXMgYmlucyBhcmUgZW1wdHksIGJ1dCBpbnN0ZWFkIG9ubHkKLSAgICB3aGVuIHRoZXkgYXJl
IG5vdGljZWQgdG8gYmUgZW1wdHkgZHVyaW5nIHRyYXZlcnNhbCBpbiBtYWxsb2MuCi0qLwotCi0v
KiBDb25zZXJ2YXRpdmVseSB1c2UgMzIgYml0cyBwZXIgbWFwIHdvcmQsIGV2ZW4gaWYgb24gNjRi
aXQgc3lzdGVtICovCi0jZGVmaW5lIEJJTk1BUFNISUZUICAgICAgNQotI2RlZmluZSBCSVRTUEVS
TUFQICAgICAgICgxVSA8PCBCSU5NQVBTSElGVCkKLSNkZWZpbmUgQklOTUFQU0laRSAgICAgICAo
TkJJTlMgLyBCSVRTUEVSTUFQKQotCi0jZGVmaW5lIGlkeDJibG9jayhpKSAgICAgKChpKSA+PiBC
SU5NQVBTSElGVCkKLSNkZWZpbmUgaWR4MmJpdChpKSAgICAgICAoKDFVIDw8ICgoaSkgJiAoKDFV
IDw8IEJJTk1BUFNISUZUKS0xKSkpKQotCi0jZGVmaW5lIG1hcmtfYmluKG0saSkgICAgKChtKS0+
YmlubWFwW2lkeDJibG9jayhpKV0gfD0gIGlkeDJiaXQoaSkpCi0jZGVmaW5lIHVubWFya19iaW4o
bSxpKSAgKChtKS0+YmlubWFwW2lkeDJibG9jayhpKV0gJj0gfihpZHgyYml0KGkpKSkKLSNkZWZp
bmUgZ2V0X2Jpbm1hcChtLGkpICAoKG0pLT5iaW5tYXBbaWR4MmJsb2NrKGkpXSAmICAgaWR4MmJp
dChpKSkKLQotLyoKLSAgRmFzdGJpbnMKLQotICAgIEFuIGFycmF5IG9mIGxpc3RzIGhvbGRpbmcg
cmVjZW50bHkgZnJlZWQgc21hbGwgY2h1bmtzLiAgRmFzdGJpbnMKLSAgICBhcmUgbm90IGRvdWJs
eSBsaW5rZWQuICBJdCBpcyBmYXN0ZXIgdG8gc2luZ2xlLWxpbmsgdGhlbSwgYW5kCi0gICAgc2lu
Y2UgY2h1bmtzIGFyZSBuZXZlciByZW1vdmVkIGZyb20gdGhlIG1pZGRsZXMgb2YgdGhlc2UgbGlz
dHMsCi0gICAgZG91YmxlIGxpbmtpbmcgaXMgbm90IG5lY2Vzc2FyeS4gQWxzbywgdW5saWtlIHJl
Z3VsYXIgYmlucywgdGhleQotICAgIGFyZSBub3QgZXZlbiBwcm9jZXNzZWQgaW4gRklGTyBvcmRl
ciAodGhleSB1c2UgZmFzdGVyIExJRk8pIHNpbmNlCi0gICAgb3JkZXJpbmcgZG9lc24ndCBtdWNo
IG1hdHRlciBpbiB0aGUgdHJhbnNpZW50IGNvbnRleHRzIGluIHdoaWNoCi0gICAgZmFzdGJpbnMg
YXJlIG5vcm1hbGx5IHVzZWQuCi0KLSAgICBDaHVua3MgaW4gZmFzdGJpbnMga2VlcCB0aGVpciBp
bnVzZSBiaXQgc2V0LCBzbyB0aGV5IGNhbm5vdAotICAgIGJlIGNvbnNvbGlkYXRlZCB3aXRoIG90
aGVyIGZyZWUgY2h1bmtzLiBtYWxsb2NfY29uc29saWRhdGUKLSAgICByZWxlYXNlcyBhbGwgY2h1
bmtzIGluIGZhc3RiaW5zIGFuZCBjb25zb2xpZGF0ZXMgdGhlbSB3aXRoCi0gICAgb3RoZXIgZnJl
ZSBjaHVua3MuIAotKi8KLQotdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBtZmFzdGJpbnB0
cjsKLQotLyogb2Zmc2V0IDIgdG8gdXNlIG90aGVyd2lzZSB1bmluZGV4YWJsZSBmaXJzdCAyIGJp
bnMgKi8KLSNkZWZpbmUgZmFzdGJpbl9pbmRleChzeikgICAgICAgICgoKCh1bnNpZ25lZCBpbnQp
KHN6KSkgPj4gMykgLSAyKQotCi0vKiBUaGUgbWF4aW11bSBmYXN0YmluIHJlcXVlc3Qgc2l6ZSB3
ZSBzdXBwb3J0ICovCi0jZGVmaW5lIE1BWF9GQVNUX1NJWkUgICAgIDgwCi0KLSNkZWZpbmUgTkZB
U1RCSU5TICAoZmFzdGJpbl9pbmRleChyZXF1ZXN0MnNpemUoTUFYX0ZBU1RfU0laRSkpKzEpCi0K
LS8qCi0gIEZBU1RCSU5fQ09OU09MSURBVElPTl9USFJFU0hPTEQgaXMgdGhlIHNpemUgb2YgYSBj
aHVuayBpbiBmcmVlKCkKLSAgdGhhdCB0cmlnZ2VycyBhdXRvbWF0aWMgY29uc29saWRhdGlvbiBv
ZiBwb3NzaWJseS1zdXJyb3VuZGluZwotICBmYXN0YmluIGNodW5rcy4gVGhpcyBpcyBhIGhldXJp
c3RpYywgc28gdGhlIGV4YWN0IHZhbHVlIHNob3VsZCBub3QKLSAgbWF0dGVyIHRvbyBtdWNoLiBJ
dCBpcyBkZWZpbmVkIGF0IGhhbGYgdGhlIGRlZmF1bHQgdHJpbSB0aHJlc2hvbGQgYXMgYQotICBj
b21wcm9taXNlIGhldXJpc3RpYyB0byBvbmx5IGF0dGVtcHQgY29uc29saWRhdGlvbiBpZiBpdCBp
cyBsaWtlbHkKLSAgdG8gbGVhZCB0byB0cmltbWluZy4gSG93ZXZlciwgaXQgaXMgbm90IGR5bmFt
aWNhbGx5IHR1bmFibGUsIHNpbmNlCi0gIGNvbnNvbGlkYXRpb24gcmVkdWNlcyBmcmFnbWVudGF0
aW9uIHN1cnJvdW5kaW5nIGxvYXJnZSBjaHVua3MgZXZlbiAKLSAgaWYgdHJpbW1pbmcgaXMgbm90
IHVzZWQuCi0qLwotCi0jZGVmaW5lIEZBU1RCSU5fQ09OU09MSURBVElPTl9USFJFU0hPTEQgIFwK
LSAgKCh1bnNpZ25lZCBsb25nKShERUZBVUxUX1RSSU1fVEhSRVNIT0xEKSA+PiAxKQotCi0vKgot
ICBTaW5jZSB0aGUgbG93ZXN0IDIgYml0cyBpbiBtYXhfZmFzdCBkb24ndCBtYXR0ZXIgaW4gc2l6
ZSBjb21wYXJpc29ucywgCi0gIHRoZXkgYXJlIHVzZWQgYXMgZmxhZ3MuCi0qLwotCi0vKgotICBB
TllDSFVOS1NfQklUIGhlbGQgaW4gbWF4X2Zhc3QgaW5kaWNhdGVzIHRoYXQgdGhlcmUgbWF5IGJl
IGFueQotICBmcmVlZCBjaHVua3MgYXQgYWxsLiBJdCBpcyBzZXQgdHJ1ZSB3aGVuIGVudGVyaW5n
IGEgY2h1bmsgaW50byBhbnkKLSAgYmluLgotKi8KLQotI2RlZmluZSBBTllDSFVOS1NfQklUICAg
ICAgICAoMVUpCi0KLSNkZWZpbmUgaGF2ZV9hbnljaHVua3MoTSkgICAgICgoKE0pLT5tYXhfZmFz
dCAmICBBTllDSFVOS1NfQklUKSkKLSNkZWZpbmUgc2V0X2FueWNodW5rcyhNKSAgICAgICgoTSkt
Pm1heF9mYXN0IHw9ICBBTllDSFVOS1NfQklUKQotI2RlZmluZSBjbGVhcl9hbnljaHVua3MoTSkg
ICAgKChNKS0+bWF4X2Zhc3QgJj0gfkFOWUNIVU5LU19CSVQpCi0KLS8qCi0gIEZBU1RDSFVOS1Nf
QklUIGhlbGQgaW4gbWF4X2Zhc3QgaW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIHByb2JhYmx5Ci0g
IHNvbWUgZmFzdGJpbiBjaHVua3MuIEl0IGlzIHNldCB0cnVlIG9uIGVudGVyaW5nIGEgY2h1bmsg
aW50byBhbnkKLSAgZmFzdGJpbiwgYW5kIGNsZWFyZWQgb25seSBpbiBtYWxsb2NfY29uc29saWRh
dGUuCi0qLwotCi0jZGVmaW5lIEZBU1RDSFVOS1NfQklUICAgICAgICAoMlUpCi0KLSNkZWZpbmUg
aGF2ZV9mYXN0Y2h1bmtzKE0pICAgKCgoTSktPm1heF9mYXN0ICYgIEZBU1RDSFVOS1NfQklUKSkK
LSNkZWZpbmUgc2V0X2Zhc3RjaHVua3MoTSkgICAgKChNKS0+bWF4X2Zhc3QgfD0gIChGQVNUQ0hV
TktTX0JJVHxBTllDSFVOS1NfQklUKSkKLSNkZWZpbmUgY2xlYXJfZmFzdGNodW5rcyhNKSAgKChN
KS0+bWF4X2Zhc3QgJj0gfihGQVNUQ0hVTktTX0JJVCkpCi0KLS8qIAotICAgU2V0IHZhbHVlIG9m
IG1heF9mYXN0LiAKLSAgIFVzZSBpbXBvc3NpYmx5IHNtYWxsIHZhbHVlIGlmIDAuCi0qLwotCi0j
ZGVmaW5lIHNldF9tYXhfZmFzdChNLCBzKSBcCi0gIChNKS0+bWF4X2Zhc3QgPSAoKChzKSA9PSAw
KT8gU01BTExCSU5fV0lEVEg6IHJlcXVlc3Qyc2l6ZShzKSkgfCBcCi0gICgoTSktPm1heF9mYXN0
ICYgIChGQVNUQ0hVTktTX0JJVHxBTllDSFVOS1NfQklUKSkKLQotI2RlZmluZSBnZXRfbWF4X2Zh
c3QoTSkgXAotICAoKE0pLT5tYXhfZmFzdCAmIH4oRkFTVENIVU5LU19CSVQgfCBBTllDSFVOS1Nf
QklUKSkKLQotCi0vKgotICBtb3JlY29yZV9wcm9wZXJ0aWVzIGlzIGEgc3RhdHVzIHdvcmQgaG9s
ZGluZyBkeW5hbWljYWxseSBkaXNjb3ZlcmVkCi0gIG9yIGNvbnRyb2xsZWQgcHJvcGVydGllcyBv
ZiB0aGUgbW9yZWNvcmUgZnVuY3Rpb24KLSovCi0KLSNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9V
U19CSVQgICgxVSkKLQotI2RlZmluZSBjb250aWd1b3VzKE0pIFwKLSAgICAgICAgKCgoTSktPm1v
cmVjb3JlX3Byb3BlcnRpZXMgJiAgTU9SRUNPUkVfQ09OVElHVU9VU19CSVQpKQotI2RlZmluZSBu
b25jb250aWd1b3VzKE0pIFwKLSAgICAgICAgKCgoTSktPm1vcmVjb3JlX3Byb3BlcnRpZXMgJiAg
TU9SRUNPUkVfQ09OVElHVU9VU19CSVQpID09IDApCi0jZGVmaW5lIHNldF9jb250aWd1b3VzKE0p
IFwKLSAgICAgICAgKChNKS0+bW9yZWNvcmVfcHJvcGVydGllcyB8PSAgTU9SRUNPUkVfQ09OVElH
VU9VU19CSVQpCi0jZGVmaW5lIHNldF9ub25jb250aWd1b3VzKE0pIFwKLSAgICAgICAgKChNKS0+
bW9yZWNvcmVfcHJvcGVydGllcyAmPSB+TU9SRUNPUkVfQ09OVElHVU9VU19CSVQpCi0KLQotLyoK
LSAgIC0tLS0tLS0tLS0tIEludGVybmFsIHN0YXRlIHJlcHJlc2VudGF0aW9uIGFuZCBpbml0aWFs
aXphdGlvbiAtLS0tLS0tLS0tLQotKi8KLQotc3RydWN0IG1hbGxvY19zdGF0ZSB7Ci0KLSAgLyog
VGhlIG1heGltdW0gY2h1bmsgc2l6ZSB0byBiZSBlbGlnaWJsZSBmb3IgZmFzdGJpbiAqLwotICBJ
TlRFUk5BTF9TSVpFX1QgIG1heF9mYXN0OyAgIC8qIGxvdyAyIGJpdHMgdXNlZCBhcyBmbGFncyAq
LwotCi0gIC8qIEZhc3RiaW5zICovCi0gIG1mYXN0YmlucHRyICAgICAgZmFzdGJpbnNbTkZBU1RC
SU5TXTsKLQotICAvKiBCYXNlIG9mIHRoZSB0b3Btb3N0IGNodW5rIC0tIG5vdCBvdGhlcndpc2Ug
a2VwdCBpbiBhIGJpbiAqLwotICBtY2h1bmtwdHIgICAgICAgIHRvcDsKLQotICAvKiBUaGUgcmVt
YWluZGVyIGZyb20gdGhlIG1vc3QgcmVjZW50IHNwbGl0IG9mIGEgc21hbGwgcmVxdWVzdCAqLwot
ICBtY2h1bmtwdHIgICAgICAgIGxhc3RfcmVtYWluZGVyOwotCi0gIC8qIE5vcm1hbCBiaW5zIHBh
Y2tlZCBhcyBkZXNjcmliZWQgYWJvdmUgKi8KLSAgbWNodW5rcHRyICAgICAgICBiaW5zW05CSU5T
ICogMl07Ci0KLSAgLyogQml0bWFwIG9mIGJpbnMuIFRyYWlsaW5nIHplcm8gbWFwIGhhbmRsZXMg
Y2FzZXMgb2YgbGFyZ2VzdCBiaW5uZWQgc2l6ZSAqLwotICB1bnNpZ25lZCBpbnQgICAgIGJpbm1h
cFtCSU5NQVBTSVpFKzFdOwotCi0gIC8qIFR1bmFibGUgcGFyYW1ldGVycyAqLwotICBDSFVOS19T
SVpFX1QgICAgIHRyaW1fdGhyZXNob2xkOwotICBJTlRFUk5BTF9TSVpFX1QgIHRvcF9wYWQ7Ci0g
IElOVEVSTkFMX1NJWkVfVCAgbW1hcF90aHJlc2hvbGQ7Ci0KLSAgLyogTWVtb3J5IG1hcCBzdXBw
b3J0ICovCi0gIGludCAgICAgICAgICAgICAgbl9tbWFwczsKLSAgaW50ICAgICAgICAgICAgICBu
X21tYXBzX21heDsKLSAgaW50ICAgICAgICAgICAgICBtYXhfbl9tbWFwczsKLQotICAvKiBDYWNo
ZSBtYWxsb2NfZ2V0cGFnZXNpemUgKi8KLSAgdW5zaWduZWQgaW50ICAgICBwYWdlc2l6ZTsgICAg
Ci0KLSAgLyogVHJhY2sgcHJvcGVydGllcyBvZiBNT1JFQ09SRSAqLwotICB1bnNpZ25lZCBpbnQg
ICAgIG1vcmVjb3JlX3Byb3BlcnRpZXM7Ci0KLSAgLyogU3RhdGlzdGljcyAqLwotICBJTlRFUk5B
TF9TSVpFX1QgIG1tYXBwZWRfbWVtOwotICBJTlRFUk5BTF9TSVpFX1QgIHNicmtlZF9tZW07Ci0g
IElOVEVSTkFMX1NJWkVfVCAgbWF4X3NicmtlZF9tZW07Ci0gIElOVEVSTkFMX1NJWkVfVCAgbWF4
X21tYXBwZWRfbWVtOwotICBJTlRFUk5BTF9TSVpFX1QgIG1heF90b3RhbF9tZW07Ci19OwotCi10
eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc3RhdGUgKm1zdGF0ZTsKLQotLyogCi0gICBUaGVyZSBpcyBl
eGFjdGx5IG9uZSBpbnN0YW5jZSBvZiB0aGlzIHN0cnVjdCBpbiB0aGlzIG1hbGxvYy4KLSAgIElm
IHlvdSBhcmUgYWRhcHRpbmcgdGhpcyBtYWxsb2MgaW4gYSB3YXkgdGhhdCBkb2VzIE5PVCB1c2Ug
YSBzdGF0aWMKLSAgIG1hbGxvY19zdGF0ZSwgeW91IE1VU1QgZXhwbGljaXRseSB6ZXJvLWZpbGwg
aXQgYmVmb3JlIHVzaW5nLiBUaGlzCi0gICBtYWxsb2MgcmVsaWVzIG9uIHRoZSBwcm9wZXJ0eSB0
aGF0IG1hbGxvY19zdGF0ZSBpcyBpbml0aWFsaXplZCB0bwotICAgYWxsIHplcm9lcyAoYXMgaXMg
dHJ1ZSBvZiBDIHN0YXRpY3MpLgotKi8KLQotc3RhdGljIHN0cnVjdCBtYWxsb2Nfc3RhdGUgYXZf
OyAgLyogbmV2ZXIgZGlyZWN0bHkgcmVmZXJlbmNlZCAqLwotCi0vKgotICAgQWxsIHVzZXMgb2Yg
YXZfIGFyZSB2aWEgZ2V0X21hbGxvY19zdGF0ZSgpLgotICAgQXQgbW9zdCBvbmUgImNhbGwiIHRv
IGdldF9tYWxsb2Nfc3RhdGUgaXMgbWFkZSBwZXIgaW52b2NhdGlvbiBvZgotICAgdGhlIHB1Ymxp
YyB2ZXJzaW9ucyBvZiBtYWxsb2MgYW5kIGZyZWUsIGJ1dCBvdGhlciByb3V0aW5lcwotICAgdGhh
dCBpbiB0dXJuIGludm9rZSBtYWxsb2MgYW5kL29yIGZyZWUgbWF5IGNhbGwgbW9yZSB0aGVuIG9u
Y2UuIAotICAgQWxzbywgaXQgaXMgY2FsbGVkIGluIGNoZWNrKiByb3V0aW5lcyBpZiBERUJVRyBp
cyBzZXQuCi0qLwotCi0jZGVmaW5lIGdldF9tYWxsb2Nfc3RhdGUoKSAoJihhdl8pKQotCi0vKgot
ICBJbml0aWFsaXplIGEgbWFsbG9jX3N0YXRlIHN0cnVjdC4KLQotICBUaGlzIGlzIGNhbGxlZCBv
bmx5IGZyb20gd2l0aGluIG1hbGxvY19jb25zb2xpZGF0ZSwgd2hpY2ggbmVlZHMKLSAgYmUgY2Fs
bGVkIGluIHRoZSBzYW1lIGNvbnRleHRzIGFueXdheS4gIEl0IGlzIG5ldmVyIGNhbGxlZCBkaXJl
Y3RseQotICBvdXRzaWRlIG9mIG1hbGxvY19jb25zb2xpZGF0ZSBiZWNhdXNlIHNvbWUgb3B0aW1p
emluZyBjb21waWxlcnMgdHJ5Ci0gIHRvIGlubGluZSBpdCBhdCBhbGwgY2FsbCBwb2ludHMsIHdo
aWNoIHR1cm5zIG91dCBub3QgdG8gYmUgYW4KLSAgb3B0aW1pemF0aW9uIGF0IGFsbC4gKElubGlu
aW5nIGl0IGluIG1hbGxvY19jb25zb2xpZGF0ZSBpcyBmaW5lIHRob3VnaC4pCi0qLwotCi0jaWYg
X19TVERfQwotc3RhdGljIHZvaWQgbWFsbG9jX2luaXRfc3RhdGUobXN0YXRlIGF2KQotI2Vsc2UK
LXN0YXRpYyB2b2lkIG1hbGxvY19pbml0X3N0YXRlKGF2KSBtc3RhdGUgYXY7Ci0jZW5kaWYKLXsK
LSAgaW50ICAgICBpOwotICBtYmlucHRyIGJpbjsKLSAgCi0gIC8qIEVzdGFibGlzaCBjaXJjdWxh
ciBsaW5rcyBmb3Igbm9ybWFsIGJpbnMgKi8KLSAgZm9yIChpID0gMTsgaSA8IE5CSU5TOyArK2kp
IHsgCi0gICAgYmluID0gYmluX2F0KGF2LGkpOwotICAgIGJpbi0+ZmQgPSBiaW4tPmJrID0gYmlu
OwotICB9Ci0KLSAgYXYtPnRvcF9wYWQgICAgICAgID0gREVGQVVMVF9UT1BfUEFEOwotICBhdi0+
bl9tbWFwc19tYXggICAgPSBERUZBVUxUX01NQVBfTUFYOwotICBhdi0+bW1hcF90aHJlc2hvbGQg
PSBERUZBVUxUX01NQVBfVEhSRVNIT0xEOwotICBhdi0+dHJpbV90aHJlc2hvbGQgPSBERUZBVUxU
X1RSSU1fVEhSRVNIT0xEOwotCi0jaWYgTU9SRUNPUkVfQ09OVElHVU9VUwotICBzZXRfY29udGln
dW91cyhhdik7Ci0jZWxzZQotICBzZXRfbm9uY29udGlndW91cyhhdik7Ci0jZW5kaWYKLQotCi0g
IHNldF9tYXhfZmFzdChhdiwgREVGQVVMVF9NWEZBU1QpOwotCi0gIGF2LT50b3AgICAgICAgICAg
ICA9IGluaXRpYWxfdG9wKGF2KTsKLSAgYXYtPnBhZ2VzaXplICAgICAgID0gbWFsbG9jX2dldHBh
Z2VzaXplOwotfQotCi0vKiAKLSAgIE90aGVyIGludGVybmFsIHV0aWxpdGllcyBvcGVyYXRpbmcg
b24gbXN0YXRlcwotKi8KLQotI2lmIF9fU1REX0MKLXN0YXRpYyBWb2lkX3QqICBzWVNNQUxMT2Mo
SU5URVJOQUxfU0laRV9ULCBtc3RhdGUpOwotI2lmbmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQot
c3RhdGljIGludCAgICAgIHNZU1RSSW0oc2l6ZV90LCBtc3RhdGUpOwotI2VuZGlmCi1zdGF0aWMg
dm9pZCAgICAgbWFsbG9jX2NvbnNvbGlkYXRlKG1zdGF0ZSk7Ci1zdGF0aWMgVm9pZF90KiogaUFM
TE9jKHNpemVfdCwgc2l6ZV90KiwgaW50LCBWb2lkX3QqKik7Ci0jZWxzZQotc3RhdGljIFZvaWRf
dCogIHNZU01BTExPYygpOwotc3RhdGljIGludCAgICAgIHNZU1RSSW0oKTsKLXN0YXRpYyB2b2lk
ICAgICBtYWxsb2NfY29uc29saWRhdGUoKTsKLXN0YXRpYyBWb2lkX3QqKiBpQUxMT2MoKTsKLSNl
bmRpZgotCi0vKgotICBEZWJ1Z2dpbmcgc3VwcG9ydAotCi0gIFRoZXNlIHJvdXRpbmVzIG1ha2Ug
YSBudW1iZXIgb2YgYXNzZXJ0aW9ucyBhYm91dCB0aGUgc3RhdGVzCi0gIG9mIGRhdGEgc3RydWN0
dXJlcyB0aGF0IHNob3VsZCBiZSB0cnVlIGF0IGFsbCB0aW1lcy4gSWYgYW55Ci0gIGFyZSBub3Qg
dHJ1ZSwgaXQncyB2ZXJ5IGxpa2VseSB0aGF0IGEgdXNlciBwcm9ncmFtIGhhcyBzb21laG93Ci0g
IHRyYXNoZWQgbWVtb3J5LiAoSXQncyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgYSBjb2Rp
bmcgZXJyb3IKLSAgaW4gbWFsbG9jLiBJbiB3aGljaCBjYXNlLCBwbGVhc2UgcmVwb3J0IGl0ISkK
LSovCi0KLSNpZiAhIERFQlVHCi0KLSNkZWZpbmUgY2hlY2tfY2h1bmsoUCkKLSNkZWZpbmUgY2hl
Y2tfZnJlZV9jaHVuayhQKQotI2RlZmluZSBjaGVja19pbnVzZV9jaHVuayhQKQotI2RlZmluZSBj
aGVja19yZW1hbGxvY2VkX2NodW5rKFAsTikKLSNkZWZpbmUgY2hlY2tfbWFsbG9jZWRfY2h1bmso
UCxOKQotI2RlZmluZSBjaGVja19tYWxsb2Nfc3RhdGUoKQotCi0jZWxzZQotI2RlZmluZSBjaGVj
a19jaHVuayhQKSAgICAgICAgICAgICAgZG9fY2hlY2tfY2h1bmsoUCkKLSNkZWZpbmUgY2hlY2tf
ZnJlZV9jaHVuayhQKSAgICAgICAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsoUCkKLSNkZWZpbmUgY2hl
Y2tfaW51c2VfY2h1bmsoUCkgICAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKFApCi0jZGVmaW5l
IGNoZWNrX3JlbWFsbG9jZWRfY2h1bmsoUCxOKSBkb19jaGVja19yZW1hbGxvY2VkX2NodW5rKFAs
TikKLSNkZWZpbmUgY2hlY2tfbWFsbG9jZWRfY2h1bmsoUCxOKSAgIGRvX2NoZWNrX21hbGxvY2Vk
X2NodW5rKFAsTikKLSNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKCkgICAgICAgIGRvX2NoZWNr
X21hbGxvY19zdGF0ZSgpCi0KLS8qCi0gIFByb3BlcnRpZXMgb2YgYWxsIGNodW5rcwotKi8KLQot
I2lmIF9fU1REX0MKLXN0YXRpYyB2b2lkIGRvX2NoZWNrX2NodW5rKG1jaHVua3B0ciBwKQotI2Vs
c2UKLXN0YXRpYyB2b2lkIGRvX2NoZWNrX2NodW5rKHApIG1jaHVua3B0ciBwOwotI2VuZGlmCi17
Ci0gIG1zdGF0ZSBhdiA9IGdldF9tYWxsb2Nfc3RhdGUoKTsKLSAgQ0hVTktfU0laRV9UICBzeiA9
IGNodW5rc2l6ZShwKTsKLSAgLyogbWluIGFuZCBtYXggcG9zc2libGUgYWRkcmVzc2VzIGFzc3Vt
aW5nIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiAqLwotICBjaGFyKiBtYXhfYWRkcmVzcyA9IChjaGFy
KikoYXYtPnRvcCkgKyBjaHVua3NpemUoYXYtPnRvcCk7Ci0gIGNoYXIqIG1pbl9hZGRyZXNzID0g
bWF4X2FkZHJlc3MgLSBhdi0+c2Jya2VkX21lbTsKLQotICBpZiAoIWNodW5rX2lzX21tYXBwZWQo
cCkpIHsKLSAgICAKLSAgICAvKiBIYXMgbGVnYWwgYWRkcmVzcyAuLi4gKi8KLSAgICBpZiAocCAh
PSBhdi0+dG9wKSB7Ci0gICAgICBpZiAoY29udGlndW91cyhhdikpIHsKLSAgICAgICAgYXNzZXJ0
KCgoY2hhciopcCkgPj0gbWluX2FkZHJlc3MpOwotICAgICAgICBhc3NlcnQoKChjaGFyKilwICsg
c3opIDw9ICgoY2hhciopKGF2LT50b3ApKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2Ugewot
ICAgICAgLyogdG9wIHNpemUgaXMgYWx3YXlzIGF0IGxlYXN0IE1JTlNJWkUgKi8KLSAgICAgIGFz
c2VydCgoQ0hVTktfU0laRV9UKShzeikgPj0gTUlOU0laRSk7Ci0gICAgICAvKiB0b3AgcHJlZGVj
ZXNzb3IgYWx3YXlzIG1hcmtlZCBpbnVzZSAqLwotICAgICAgYXNzZXJ0KHByZXZfaW51c2UocCkp
OwotICAgIH0KLSAgICAgIAotICB9Ci0gIGVsc2UgewotI2lmIEhBVkVfTU1BUAotICAgIC8qIGFk
ZHJlc3MgaXMgb3V0c2lkZSBtYWluIGhlYXAgICovCi0gICAgaWYgKGNvbnRpZ3VvdXMoYXYpICYm
IGF2LT50b3AgIT0gaW5pdGlhbF90b3AoYXYpKSB7Ci0gICAgICBhc3NlcnQoKChjaGFyKilwKSA8
IG1pbl9hZGRyZXNzIHx8ICgoY2hhciopcCkgPiBtYXhfYWRkcmVzcyk7Ci0gICAgfQotICAgIC8q
IGNodW5rIGlzIHBhZ2UtYWxpZ25lZCAqLwotICAgIGFzc2VydCgoKHAtPnByZXZfc2l6ZSArIHN6
KSAmIChhdi0+cGFnZXNpemUtMSkpID09IDApOwotICAgIC8qIG1lbSBpcyBhbGlnbmVkICovCi0g
ICAgYXNzZXJ0KGFsaWduZWRfT0soY2h1bmsybWVtKHApKSk7Ci0jZWxzZQotICAgIC8qIGZvcmNl
IGFuIGFwcHJvcHJpYXRlIGFzc2VydCB2aW9sYXRpb24gaWYgZGVidWcgc2V0ICovCi0gICAgYXNz
ZXJ0KCFjaHVua19pc19tbWFwcGVkKHApKTsKLSNlbmRpZgotICB9Ci19Ci0KLS8qCi0gIFByb3Bl
cnRpZXMgb2YgZnJlZSBjaHVua3MKLSovCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMgdm9pZCBkb19j
aGVja19mcmVlX2NodW5rKG1jaHVua3B0ciBwKQotI2Vsc2UKLXN0YXRpYyB2b2lkIGRvX2NoZWNr
X2ZyZWVfY2h1bmsocCkgbWNodW5rcHRyIHA7Ci0jZW5kaWYKLXsKLSAgbXN0YXRlIGF2ID0gZ2V0
X21hbGxvY19zdGF0ZSgpOwotCi0gIElOVEVSTkFMX1NJWkVfVCBzeiA9IHAtPnNpemUgJiB+UFJF
Vl9JTlVTRTsKLSAgbWNodW5rcHRyIG5leHQgPSBjaHVua19hdF9vZmZzZXQocCwgc3opOwotCi0g
IGRvX2NoZWNrX2NodW5rKHApOwotCi0gIC8qIENodW5rIG11c3QgY2xhaW0gdG8gYmUgZnJlZSAu
Li4gKi8KLSAgYXNzZXJ0KCFpbnVzZShwKSk7Ci0gIGFzc2VydCAoIWNodW5rX2lzX21tYXBwZWQo
cCkpOwotCi0gIC8qIFVubGVzcyBhIHNwZWNpYWwgbWFya2VyLCBtdXN0IGhhdmUgT0sgZmllbGRz
ICovCi0gIGlmICgoQ0hVTktfU0laRV9UKShzeikgPj0gTUlOU0laRSkKLSAgewotICAgIGFzc2Vy
dCgoc3ogJiBNQUxMT0NfQUxJR05fTUFTSykgPT0gMCk7Ci0gICAgYXNzZXJ0KGFsaWduZWRfT0so
Y2h1bmsybWVtKHApKSk7Ci0gICAgLyogLi4uIG1hdGNoaW5nIGZvb3RlciBmaWVsZCAqLwotICAg
IGFzc2VydChuZXh0LT5wcmV2X3NpemUgPT0gc3opOwotICAgIC8qIC4uLiBhbmQgaXMgZnVsbHkg
Y29uc29saWRhdGVkICovCi0gICAgYXNzZXJ0KHByZXZfaW51c2UocCkpOwotICAgIGFzc2VydCAo
bmV4dCA9PSBhdi0+dG9wIHx8IGludXNlKG5leHQpKTsKLQotICAgIC8qIC4uLiBhbmQgaGFzIG1p
bmltYWxseSBzYW5lIGxpbmtzICovCi0gICAgYXNzZXJ0KHAtPmZkLT5iayA9PSBwKTsKLSAgICBh
c3NlcnQocC0+YmstPmZkID09IHApOwotICB9Ci0gIGVsc2UgLyogbWFya2VycyBhcmUgYWx3YXlz
IG9mIHNpemUgU0laRV9TWiAqLwotICAgIGFzc2VydChzeiA9PSBTSVpFX1NaKTsKLX0KLQotLyoK
LSAgUHJvcGVydGllcyBvZiBpbnVzZSBjaHVua3MKLSovCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMg
dm9pZCBkb19jaGVja19pbnVzZV9jaHVuayhtY2h1bmtwdHIgcCkKLSNlbHNlCi1zdGF0aWMgdm9p
ZCBkb19jaGVja19pbnVzZV9jaHVuayhwKSBtY2h1bmtwdHIgcDsKLSNlbmRpZgotewotICBtc3Rh
dGUgYXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0gIG1jaHVua3B0ciBuZXh0OwotICBkb19jaGVj
a19jaHVuayhwKTsKLQotICBpZiAoY2h1bmtfaXNfbW1hcHBlZChwKSkKLSAgICByZXR1cm47IC8q
IG1tYXBwZWQgY2h1bmtzIGhhdmUgbm8gbmV4dC9wcmV2ICovCi0KLSAgLyogQ2hlY2sgd2hldGhl
ciBpdCBjbGFpbXMgdG8gYmUgaW4gdXNlIC4uLiAqLwotICBhc3NlcnQoaW51c2UocCkpOwotCi0g
IG5leHQgPSBuZXh0X2NodW5rKHApOwotCi0gIC8qIC4uLiBhbmQgaXMgc3Vycm91bmRlZCBieSBP
SyBjaHVua3MuCi0gICAgU2luY2UgbW9yZSB0aGluZ3MgY2FuIGJlIGNoZWNrZWQgd2l0aCBmcmVl
IGNodW5rcyB0aGFuIGludXNlIG9uZXMsCi0gICAgaWYgYW4gaW51c2UgY2h1bmsgYm9yZGVycyB0
aGVtIGFuZCBkZWJ1ZyBpcyBvbiwgaXQncyB3b3J0aCBkb2luZyB0aGVtLgotICAqLwotICBpZiAo
IXByZXZfaW51c2UocCkpICB7Ci0gICAgLyogTm90ZSB0aGF0IHdlIGNhbm5vdCBldmVuIGxvb2sg
YXQgcHJldiB1bmxlc3MgaXQgaXMgbm90IGludXNlICovCi0gICAgbWNodW5rcHRyIHBydiA9IHBy
ZXZfY2h1bmsocCk7Ci0gICAgYXNzZXJ0KG5leHRfY2h1bmsocHJ2KSA9PSBwKTsKLSAgICBkb19j
aGVja19mcmVlX2NodW5rKHBydik7Ci0gIH0KLQotICBpZiAobmV4dCA9PSBhdi0+dG9wKSB7Ci0g
ICAgYXNzZXJ0KHByZXZfaW51c2UobmV4dCkpOwotICAgIGFzc2VydChjaHVua3NpemUobmV4dCkg
Pj0gTUlOU0laRSk7Ci0gIH0KLSAgZWxzZSBpZiAoIWludXNlKG5leHQpKQotICAgIGRvX2NoZWNr
X2ZyZWVfY2h1bmsobmV4dCk7Ci19Ci0KLS8qCi0gIFByb3BlcnRpZXMgb2YgY2h1bmtzIHJlY3lj
bGVkIGZyb20gZmFzdGJpbnMKLSovCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMgdm9pZCBkb19jaGVj
a19yZW1hbGxvY2VkX2NodW5rKG1jaHVua3B0ciBwLCBJTlRFUk5BTF9TSVpFX1QgcykKLSNlbHNl
Ci1zdGF0aWMgdm9pZCBkb19jaGVja19yZW1hbGxvY2VkX2NodW5rKHAsIHMpIG1jaHVua3B0ciBw
OyBJTlRFUk5BTF9TSVpFX1QgczsKLSNlbmRpZgotewotICBJTlRFUk5BTF9TSVpFX1Qgc3ogPSBw
LT5zaXplICYgflBSRVZfSU5VU0U7Ci0KLSAgZG9fY2hlY2tfaW51c2VfY2h1bmsocCk7Ci0KLSAg
LyogTGVnYWwgc2l6ZSAuLi4gKi8KLSAgYXNzZXJ0KChzeiAmIE1BTExPQ19BTElHTl9NQVNLKSA9
PSAwKTsKLSAgYXNzZXJ0KChDSFVOS19TSVpFX1QpKHN6KSA+PSBNSU5TSVpFKTsKLSAgLyogLi4u
IGFuZCBhbGlnbm1lbnQgKi8KLSAgYXNzZXJ0KGFsaWduZWRfT0soY2h1bmsybWVtKHApKSk7Ci0g
IC8qIGNodW5rIGlzIGxlc3MgdGhhbiBNSU5TSVpFIG1vcmUgdGhhbiByZXF1ZXN0ICovCi0gIGFz
c2VydCgobG9uZykoc3opIC0gKGxvbmcpKHMpID49IDApOwotICBhc3NlcnQoKGxvbmcpKHN6KSAt
IChsb25nKShzICsgTUlOU0laRSkgPCAwKTsKLX0KLQotLyoKLSAgUHJvcGVydGllcyBvZiBub25y
ZWN5Y2xlZCBjaHVua3MgYXQgdGhlIHBvaW50IHRoZXkgYXJlIG1hbGxvY2VkCi0qLwotCi0jaWYg
X19TVERfQwotc3RhdGljIHZvaWQgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsobWNodW5rcHRyIHAs
IElOVEVSTkFMX1NJWkVfVCBzKQotI2Vsc2UKLXN0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY2Vk
X2NodW5rKHAsIHMpIG1jaHVua3B0ciBwOyBJTlRFUk5BTF9TSVpFX1QgczsKLSNlbmRpZgotewot
ICAvKiBzYW1lIGFzIHJlY3ljbGVkIGNhc2UgLi4uICovCi0gIGRvX2NoZWNrX3JlbWFsbG9jZWRf
Y2h1bmsocCwgcyk7Ci0KLSAgLyoKLSAgICAuLi4gcGx1cywgIG11c3Qgb2JleSBpbXBsZW1lbnRh
dGlvbiBpbnZhcmlhbnQgdGhhdCBwcmV2X2ludXNlIGlzCi0gICAgYWx3YXlzIHRydWUgb2YgYW55
IGFsbG9jYXRlZCBjaHVuazsgaS5lLiwgdGhhdCBlYWNoIGFsbG9jYXRlZAotICAgIGNodW5rIGJv
cmRlcnMgZWl0aGVyIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgYW5kIHN0aWxsIGluLXVzZQotICAg
IGNodW5rLCBvciB0aGUgYmFzZSBvZiBpdHMgbWVtb3J5IGFyZW5hLiBUaGlzIGlzIGVuc3VyZWQK
LSAgICBieSBtYWtpbmcgYWxsIGFsbG9jYXRpb25zIGZyb20gdGhlIHRoZSBgbG93ZXN0JyBwYXJ0
IG9mIGFueSBmb3VuZAotICAgIGNodW5rLiAgVGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBob2xk
IGhvd2V2ZXIgZm9yIGNodW5rcwotICAgIHJlY3ljbGVkIHZpYSBmYXN0Ymlucy4KLSAgKi8KLQot
ICBhc3NlcnQocHJldl9pbnVzZShwKSk7Ci19Ci0KLQotLyoKLSAgUHJvcGVydGllcyBvZiBtYWxs
b2Nfc3RhdGUuCi0KLSAgVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgbWFsbG9jLCBh
cyB3ZWxsIGFzIGRldGVjdGluZyB1c2VyCi0gIHByb2dyYW1tZXIgZXJyb3JzIHRoYXQgc29tZWhv
dyB3cml0ZSBpbnRvIG1hbGxvY19zdGF0ZS4KLQotICBJZiB5b3UgYXJlIGV4dGVuZGluZyBvciBl
eHBlcmltZW50aW5nIHdpdGggdGhpcyBtYWxsb2MsIHlvdSBjYW4KLSAgcHJvYmFibHkgZmlndXJl
IG91dCBob3cgdG8gaGFjayB0aGlzIHJvdXRpbmUgdG8gcHJpbnQgb3V0IG9yCi0gIGRpc3BsYXkg
Y2h1bmsgYWRkcmVzc2VzLCBzaXplcywgYmlucywgYW5kIG90aGVyIGluc3RydW1lbnRhdGlvbi4K
LSovCi0KLXN0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY19zdGF0ZSgpCi17Ci0gIG1zdGF0ZSBh
diA9IGdldF9tYWxsb2Nfc3RhdGUoKTsKLSAgdW5zaWduZWQgaW50IGk7Ci0gIG1jaHVua3B0ciBw
OwotICBtY2h1bmtwdHIgcTsKLSAgbWJpbnB0ciBiOwotICB1bnNpZ25lZCBpbnQgYmluYml0Owot
ICBpbnQgZW1wdHk7Ci0gIHVuc2lnbmVkIGludCBpZHg7Ci0gIElOVEVSTkFMX1NJWkVfVCBzaXpl
OwotICBDSFVOS19TSVpFX1QgIHRvdGFsID0gMDsKLSAgaW50IG1heF9mYXN0X2JpbjsKLQotICAv
KiBpbnRlcm5hbCBzaXplX3QgbXVzdCBiZSBubyB3aWRlciB0aGFuIHBvaW50ZXIgdHlwZSAqLwot
ICBhc3NlcnQoc2l6ZW9mKElOVEVSTkFMX1NJWkVfVCkgPD0gc2l6ZW9mKGNoYXIqKSk7Ci0KLSAg
LyogYWxpZ25tZW50IGlzIGEgcG93ZXIgb2YgMiAqLwotICBhc3NlcnQoKE1BTExPQ19BTElHTk1F
TlQgJiAoTUFMTE9DX0FMSUdOTUVOVC0xKSkgPT0gMCk7Ci0KLSAgLyogY2Fubm90IHJ1biByZW1h
aW5pbmcgY2hlY2tzIHVudGlsIGZ1bGx5IGluaXRpYWxpemVkICovCi0gIGlmIChhdi0+dG9wID09
IDAgfHwgYXYtPnRvcCA9PSBpbml0aWFsX3RvcChhdikpCi0gICAgcmV0dXJuOwotCi0gIC8qIHBh
Z2VzaXplIGlzIGEgcG93ZXIgb2YgMiAqLwotICBhc3NlcnQoKGF2LT5wYWdlc2l6ZSAmIChhdi0+
cGFnZXNpemUtMSkpID09IDApOwotCi0gIC8qIHByb3BlcnRpZXMgb2YgZmFzdGJpbnMgKi8KLQot
ICAvKiBtYXhfZmFzdCBpcyBpbiBhbGxvd2VkIHJhbmdlICovCi0gIGFzc2VydChnZXRfbWF4X2Zh
c3QoYXYpIDw9IHJlcXVlc3Qyc2l6ZShNQVhfRkFTVF9TSVpFKSk7Ci0KLSAgbWF4X2Zhc3RfYmlu
ID0gZmFzdGJpbl9pbmRleChhdi0+bWF4X2Zhc3QpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBORkFT
VEJJTlM7ICsraSkgewotICAgIHAgPSBhdi0+ZmFzdGJpbnNbaV07Ci0KLSAgICAvKiBhbGwgYmlu
cyBwYXN0IG1heF9mYXN0IGFyZSBlbXB0eSAqLwotICAgIGlmIChpID4gbWF4X2Zhc3RfYmluKQot
ICAgICAgYXNzZXJ0KHAgPT0gMCk7Ci0KLSAgICB3aGlsZSAocCAhPSAwKSB7Ci0gICAgICAvKiBl
YWNoIGNodW5rIGNsYWltcyB0byBiZSBpbnVzZSAqLwotICAgICAgZG9fY2hlY2tfaW51c2VfY2h1
bmsocCk7Ci0gICAgICB0b3RhbCArPSBjaHVua3NpemUocCk7Ci0gICAgICAvKiBjaHVuayBiZWxv
bmdzIGluIHRoaXMgYmluICovCi0gICAgICBhc3NlcnQoZmFzdGJpbl9pbmRleChjaHVua3NpemUo
cCkpID09IGkpOwotICAgICAgcCA9IHAtPmZkOwotICAgIH0KLSAgfQotCi0gIGlmICh0b3RhbCAh
PSAwKQotICAgIGFzc2VydChoYXZlX2Zhc3RjaHVua3MoYXYpKTsKLSAgZWxzZSBpZiAoIWhhdmVf
ZmFzdGNodW5rcyhhdikpCi0gICAgYXNzZXJ0KHRvdGFsID09IDApOwotCi0gIC8qIGNoZWNrIG5v
cm1hbCBiaW5zICovCi0gIGZvciAoaSA9IDE7IGkgPCBOQklOUzsgKytpKSB7Ci0gICAgYiA9IGJp
bl9hdChhdixpKTsKLQotICAgIC8qIGJpbm1hcCBpcyBhY2N1cmF0ZSAoZXhjZXB0IGZvciBiaW4g
MSA9PSB1bnNvcnRlZF9jaHVua3MpICovCi0gICAgaWYgKGkgPj0gMikgewotICAgICAgYmluYml0
ID0gZ2V0X2Jpbm1hcChhdixpKTsKLSAgICAgIGVtcHR5ID0gbGFzdChiKSA9PSBiOwotICAgICAg
aWYgKCFiaW5iaXQpCi0gICAgICAgIGFzc2VydChlbXB0eSk7Ci0gICAgICBlbHNlIGlmICghZW1w
dHkpCi0gICAgICAgIGFzc2VydChiaW5iaXQpOwotICAgIH0KLQotICAgIGZvciAocCA9IGxhc3Qo
Yik7IHAgIT0gYjsgcCA9IHAtPmJrKSB7Ci0gICAgICAvKiBlYWNoIGNodW5rIGNsYWltcyB0byBi
ZSBmcmVlICovCi0gICAgICBkb19jaGVja19mcmVlX2NodW5rKHApOwotICAgICAgc2l6ZSA9IGNo
dW5rc2l6ZShwKTsKLSAgICAgIHRvdGFsICs9IHNpemU7Ci0gICAgICBpZiAoaSA+PSAyKSB7Ci0g
ICAgICAgIC8qIGNodW5rIGJlbG9uZ3MgaW4gYmluICovCi0gICAgICAgIGlkeCA9IGJpbl9pbmRl
eChzaXplKTsKLSAgICAgICAgYXNzZXJ0KGlkeCA9PSBpKTsKLSAgICAgICAgLyogbGlzdHMgYXJl
IHNvcnRlZCAqLwotICAgICAgICBpZiAoKENIVU5LX1NJWkVfVCkgc2l6ZSA+PSAoQ0hVTktfU0la
RV9UKShGSVJTVF9TT1JURURfQklOX1NJWkUpKSB7Ci0gICAgICAgICAgYXNzZXJ0KHAtPmJrID09
IGIgfHwgCi0gICAgICAgICAgICAgICAgIChDSFVOS19TSVpFX1QpY2h1bmtzaXplKHAtPmJrKSA+
PSAKLSAgICAgICAgICAgICAgICAgKENIVU5LX1NJWkVfVCljaHVua3NpemUocCkpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgICAvKiBjaHVuayBpcyBmb2xsb3dlZCBieSBhIGxlZ2FsIGNoYWlu
IG9mIGludXNlIGNodW5rcyAqLwotICAgICAgZm9yIChxID0gbmV4dF9jaHVuayhwKTsKLSAgICAg
ICAgICAgKHEgIT0gYXYtPnRvcCAmJiBpbnVzZShxKSAmJiAKLSAgICAgICAgICAgICAoQ0hVTktf
U0laRV9UKShjaHVua3NpemUocSkpID49IE1JTlNJWkUpOwotICAgICAgICAgICBxID0gbmV4dF9j
aHVuayhxKSkKLSAgICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsocSk7Ci0gICAgfQotICB9Ci0K
LSAgLyogdG9wIGNodW5rIGlzIE9LICovCi0gIGNoZWNrX2NodW5rKGF2LT50b3ApOwotCi0gIC8q
IHNhbml0eSBjaGVja3MgZm9yIHN0YXRpc3RpY3MgKi8KLQotICBhc3NlcnQodG90YWwgPD0gKENI
VU5LX1NJWkVfVCkoYXYtPm1heF90b3RhbF9tZW0pKTsKLSAgYXNzZXJ0KGF2LT5uX21tYXBzID49
IDApOwotICBhc3NlcnQoYXYtPm5fbW1hcHMgPD0gYXYtPm1heF9uX21tYXBzKTsKLQotICBhc3Nl
cnQoKENIVU5LX1NJWkVfVCkoYXYtPnNicmtlZF9tZW0pIDw9Ci0gICAgICAgICAoQ0hVTktfU0la
RV9UKShhdi0+bWF4X3NicmtlZF9tZW0pKTsKLQotICBhc3NlcnQoKENIVU5LX1NJWkVfVCkoYXYt
Pm1tYXBwZWRfbWVtKSA8PQotICAgICAgICAgKENIVU5LX1NJWkVfVCkoYXYtPm1heF9tbWFwcGVk
X21lbSkpOwotCi0gIGFzc2VydCgoQ0hVTktfU0laRV9UKShhdi0+bWF4X3RvdGFsX21lbSkgPj0K
LSAgICAgICAgIChDSFVOS19TSVpFX1QpKGF2LT5tbWFwcGVkX21lbSkgKyAoQ0hVTktfU0laRV9U
KShhdi0+c2Jya2VkX21lbSkpOwotfQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0gUm91dGlu
ZXMgZGVhbGluZyB3aXRoIHN5c3RlbSBhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tICovCi0KLS8q
Ci0gIHN5c21hbGxvYyBoYW5kbGVzIG1hbGxvYyBjYXNlcyByZXF1aXJpbmcgbW9yZSBtZW1vcnkg
ZnJvbSB0aGUgc3lzdGVtLgotICBPbiBlbnRyeSwgaXQgaXMgYXNzdW1lZCB0aGF0IGF2LT50b3Ag
ZG9lcyBub3QgaGF2ZSBlbm91Z2gKLSAgc3BhY2UgdG8gc2VydmljZSByZXF1ZXN0IGZvciBuYiBi
eXRlcywgdGh1cyByZXF1aXJpbmcgdGhhdCBhdi0+dG9wCi0gIGJlIGV4dGVuZGVkIG9yIHJlcGxh
Y2VkLgotKi8KLQotI2lmIF9fU1REX0MKLXN0YXRpYyBWb2lkX3QqIHNZU01BTExPYyhJTlRFUk5B
TF9TSVpFX1QgbmIsIG1zdGF0ZSBhdikKLSNlbHNlCi1zdGF0aWMgVm9pZF90KiBzWVNNQUxMT2Mo
bmIsIGF2KSBJTlRFUk5BTF9TSVpFX1QgbmI7IG1zdGF0ZSBhdjsKLSNlbmRpZgotewotICBtY2h1
bmtwdHIgICAgICAgb2xkX3RvcDsgICAgICAgIC8qIGluY29taW5nIHZhbHVlIG9mIGF2LT50b3Ag
Ki8KLSAgSU5URVJOQUxfU0laRV9UIG9sZF9zaXplOyAgICAgICAvKiBpdHMgc2l6ZSAqLwotICBj
aGFyKiAgICAgICAgICAgb2xkX2VuZDsgICAgICAgIC8qIGl0cyBlbmQgYWRkcmVzcyAqLwotCi0g
IGxvbmcgICAgICAgICAgICBzaXplOyAgICAgICAgICAgLyogYXJnIHRvIGZpcnN0IE1PUkVDT1JF
IG9yIG1tYXAgY2FsbCAqLwotICBjaGFyKiAgICAgICAgICAgYnJrOyAgICAgICAgICAgIC8qIHJl
dHVybiB2YWx1ZSBmcm9tIE1PUkVDT1JFICovCi0KLSAgbG9uZyAgICAgICAgICAgIGNvcnJlY3Rp
b247ICAgICAvKiBhcmcgdG8gMm5kIE1PUkVDT1JFIGNhbGwgKi8KLSAgY2hhciogICAgICAgICAg
IHNuZF9icms7ICAgICAgICAvKiAybmQgcmV0dXJuIHZhbCAqLwotCi0gIElOVEVSTkFMX1NJWkVf
VCBmcm9udF9taXNhbGlnbjsgLyogdW51c2FibGUgYnl0ZXMgYXQgZnJvbnQgb2YgbmV3IHNwYWNl
ICovCi0gIElOVEVSTkFMX1NJWkVfVCBlbmRfbWlzYWxpZ247ICAgLyogcGFydGlhbCBwYWdlIGxl
ZnQgYXQgZW5kIG9mIG5ldyBzcGFjZSAqLwotICBjaGFyKiAgICAgICAgICAgYWxpZ25lZF9icms7
ICAgIC8qIGFsaWduZWQgb2Zmc2V0IGludG8gYnJrICovCi0KLSAgbWNodW5rcHRyICAgICAgIHA7
ICAgICAgICAgICAgICAvKiB0aGUgYWxsb2NhdGVkL3JldHVybmVkIGNodW5rICovCi0gIG1jaHVu
a3B0ciAgICAgICByZW1haW5kZXI7ICAgICAgLyogcmVtYWluZGVyIGZyb20gYWxsb2NhdGlvbiAq
LwotICBDSFVOS19TSVpFX1QgICAgcmVtYWluZGVyX3NpemU7IC8qIGl0cyBzaXplICovCi0KLSAg
Q0hVTktfU0laRV9UICAgIHN1bTsgICAgICAgICAgICAvKiBmb3IgdXBkYXRpbmcgc3RhdHMgKi8K
LQotICBzaXplX3QgICAgICAgICAgcGFnZW1hc2sgID0gYXYtPnBhZ2VzaXplIC0gMTsKLQotICAv
KgotICAgIElmIHRoZXJlIGlzIHNwYWNlIGF2YWlsYWJsZSBpbiBmYXN0YmlucywgY29uc29saWRh
dGUgYW5kIHJldHJ5Ci0gICAgbWFsbG9jIGZyb20gc2NyYXRjaCByYXRoZXIgdGhhbiBnZXR0aW5n
IG1lbW9yeSBmcm9tIHN5c3RlbS4gIFRoaXMKLSAgICBjYW4gb2NjdXIgb25seSBpZiBuYiBpcyBp
biBzbWFsbGJpbiByYW5nZSBzbyB3ZSBkaWRuJ3QgY29uc29saWRhdGUKLSAgICB1cG9uIGVudHJ5
IHRvIG1hbGxvYy4gSXQgaXMgbXVjaCBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZSBoZXJlCi0g
ICAgdGhhbiBpbiBtYWxsb2MgcHJvcGVyLgotICAqLwotCi0gIGlmIChoYXZlX2Zhc3RjaHVua3Mo
YXYpKSB7Ci0gICAgYXNzZXJ0KGluX3NtYWxsYmluX3JhbmdlKG5iKSk7Ci0gICAgbWFsbG9jX2Nv
bnNvbGlkYXRlKGF2KTsKLSAgICByZXR1cm4gbUFMTE9jKG5iIC0gTUFMTE9DX0FMSUdOX01BU0sp
OwotICB9Ci0KLQotI2lmIEhBVkVfTU1BUAotCi0gIC8qCi0gICAgSWYgaGF2ZSBtbWFwLCBhbmQg
dGhlIHJlcXVlc3Qgc2l6ZSBtZWV0cyB0aGUgbW1hcCB0aHJlc2hvbGQsIGFuZAotICAgIHRoZSBz
eXN0ZW0gc3VwcG9ydHMgbW1hcCwgYW5kIHRoZXJlIGFyZSBmZXcgZW5vdWdoIGN1cnJlbnRseQot
ICAgIGFsbG9jYXRlZCBtbWFwcGVkIHJlZ2lvbnMsIHRyeSB0byBkaXJlY3RseSBtYXAgdGhpcyBy
ZXF1ZXN0Ci0gICAgcmF0aGVyIHRoYW4gZXhwYW5kaW5nIHRvcC4KLSAgKi8KLQotICBpZiAoKENI
VU5LX1NJWkVfVCkobmIpID49IChDSFVOS19TSVpFX1QpKGF2LT5tbWFwX3RocmVzaG9sZCkgJiYK
LSAgICAgIChhdi0+bl9tbWFwcyA8IGF2LT5uX21tYXBzX21heCkpIHsKLQotICAgIGNoYXIqIG1t
OyAgICAgICAgICAgICAvKiByZXR1cm4gdmFsdWUgZnJvbSBtbWFwIGNhbGwqLwotCi0gICAgLyoK
LSAgICAgIFJvdW5kIHVwIHNpemUgdG8gbmVhcmVzdCBwYWdlLiAgRm9yIG1tYXBwZWQgY2h1bmtz
LCB0aGUgb3ZlcmhlYWQKLSAgICAgIGlzIG9uZSBTSVpFX1NaIHVuaXQgbGFyZ2VyIHRoYW4gZm9y
IG5vcm1hbCBjaHVua3MsIGJlY2F1c2UgdGhlcmUKLSAgICAgIGlzIG5vIGZvbGxvd2luZyBjaHVu
ayB3aG9zZSBwcmV2X3NpemUgZmllbGQgY291bGQgYmUgdXNlZC4KLSAgICAqLwotICAgIHNpemUg
PSAobmIgKyBTSVpFX1NaICsgTUFMTE9DX0FMSUdOX01BU0sgKyBwYWdlbWFzaykgJiB+cGFnZW1h
c2s7Ci0KLSAgICAvKiBEb24ndCB0cnkgaWYgc2l6ZSB3cmFwcyBhcm91bmQgMCAqLwotICAgIGlm
ICgoQ0hVTktfU0laRV9UKShzaXplKSA+IChDSFVOS19TSVpFX1QpKG5iKSkgewotCi0gICAgICBt
bSA9IChjaGFyKikoTU1BUCgwLCBzaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZB
VEUpKTsKLSAgICAgIAotICAgICAgaWYgKG1tICE9IChjaGFyKikoTU9SRUNPUkVfRkFJTFVSRSkp
IHsKLSAgICAgICAgCi0gICAgICAgIC8qCi0gICAgICAgICAgVGhlIG9mZnNldCB0byB0aGUgc3Rh
cnQgb2YgdGhlIG1tYXBwZWQgcmVnaW9uIGlzIHN0b3JlZAotICAgICAgICAgIGluIHRoZSBwcmV2
X3NpemUgZmllbGQgb2YgdGhlIGNodW5rLiBUaGlzIGFsbG93cyB1cyB0byBhZGp1c3QKLSAgICAg
ICAgICByZXR1cm5lZCBzdGFydCBhZGRyZXNzIHRvIG1lZXQgYWxpZ25tZW50IHJlcXVpcmVtZW50
cyBoZXJlIAotICAgICAgICAgIGFuZCBpbiBtZW1hbGlnbigpLCBhbmQgc3RpbGwgYmUgYWJsZSB0
byBjb21wdXRlIHByb3BlcgotICAgICAgICAgIGFkZHJlc3MgYXJndW1lbnQgZm9yIGxhdGVyIG11
bm1hcCBpbiBmcmVlKCkgYW5kIHJlYWxsb2MoKS4KLSAgICAgICAgKi8KLSAgICAgICAgCi0gICAg
ICAgIGZyb250X21pc2FsaWduID0gKElOVEVSTkFMX1NJWkVfVCljaHVuazJtZW0obW0pICYgTUFM
TE9DX0FMSUdOX01BU0s7Ci0gICAgICAgIGlmIChmcm9udF9taXNhbGlnbiA+IDApIHsKLSAgICAg
ICAgICBjb3JyZWN0aW9uID0gTUFMTE9DX0FMSUdOTUVOVCAtIGZyb250X21pc2FsaWduOwotICAg
ICAgICAgIHAgPSAobWNodW5rcHRyKShtbSArIGNvcnJlY3Rpb24pOwotICAgICAgICAgIHAtPnBy
ZXZfc2l6ZSA9IGNvcnJlY3Rpb247Ci0gICAgICAgICAgc2V0X2hlYWQocCwgKHNpemUgLSBjb3Jy
ZWN0aW9uKSB8SVNfTU1BUFBFRCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgcCA9IChtY2h1bmtwdHIpbW07Ci0gICAgICAgICAgcC0+cHJldl9zaXplID0gMDsKLSAgICAg
ICAgICBzZXRfaGVhZChwLCBzaXplfElTX01NQVBQRUQpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICAvKiB1cGRhdGUgc3RhdGlzdGljcyAqLwotICAgICAgICAKLSAgICAgICAgaWYgKCsr
YXYtPm5fbW1hcHMgPiBhdi0+bWF4X25fbW1hcHMpIAotICAgICAgICAgIGF2LT5tYXhfbl9tbWFw
cyA9IGF2LT5uX21tYXBzOwotICAgICAgICAKLSAgICAgICAgc3VtID0gYXYtPm1tYXBwZWRfbWVt
ICs9IHNpemU7Ci0gICAgICAgIGlmIChzdW0gPiAoQ0hVTktfU0laRV9UKShhdi0+bWF4X21tYXBw
ZWRfbWVtKSkgCi0gICAgICAgICAgYXYtPm1heF9tbWFwcGVkX21lbSA9IHN1bTsKLSAgICAgICAg
c3VtICs9IGF2LT5zYnJrZWRfbWVtOwotICAgICAgICBpZiAoc3VtID4gKENIVU5LX1NJWkVfVCko
YXYtPm1heF90b3RhbF9tZW0pKSAKLSAgICAgICAgICBhdi0+bWF4X3RvdGFsX21lbSA9IHN1bTsK
LQotICAgICAgICBjaGVja19jaHVuayhwKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBjaHVu
azJtZW0ocCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0jZW5kaWYKLQotICAvKiBSZWNvcmQgaW5j
b21pbmcgY29uZmlndXJhdGlvbiBvZiB0b3AgKi8KLQotICBvbGRfdG9wICA9IGF2LT50b3A7Ci0g
IG9sZF9zaXplID0gY2h1bmtzaXplKG9sZF90b3ApOwotICBvbGRfZW5kICA9IChjaGFyKikoY2h1
bmtfYXRfb2Zmc2V0KG9sZF90b3AsIG9sZF9zaXplKSk7Ci0KLSAgYnJrID0gc25kX2JyayA9IChj
aGFyKikoTU9SRUNPUkVfRkFJTFVSRSk7IAotCi0gIC8qIAotICAgICBJZiBub3QgdGhlIGZpcnN0
IHRpbWUgdGhyb3VnaCwgd2UgcmVxdWlyZSBvbGRfc2l6ZSB0byBiZQotICAgICBhdCBsZWFzdCBN
SU5TSVpFIGFuZCB0byBoYXZlIHByZXZfaW51c2Ugc2V0LgotICAqLwotCi0gIGFzc2VydCgob2xk
X3RvcCA9PSBpbml0aWFsX3RvcChhdikgJiYgb2xkX3NpemUgPT0gMCkgfHwgCi0gICAgICAgICAo
KENIVU5LX1NJWkVfVCkgKG9sZF9zaXplKSA+PSBNSU5TSVpFICYmCi0gICAgICAgICAgcHJldl9p
bnVzZShvbGRfdG9wKSkpOwotCi0gIC8qIFByZWNvbmRpdGlvbjogbm90IGVub3VnaCBjdXJyZW50
IHNwYWNlIHRvIHNhdGlzZnkgbmIgcmVxdWVzdCAqLwotICBhc3NlcnQoKENIVU5LX1NJWkVfVCko
b2xkX3NpemUpIDwgKENIVU5LX1NJWkVfVCkobmIgKyBNSU5TSVpFKSk7Ci0KLSAgLyogUHJlY29u
ZGl0aW9uOiBhbGwgZmFzdGJpbnMgYXJlIGNvbnNvbGlkYXRlZCAqLwotICBhc3NlcnQoIWhhdmVf
ZmFzdGNodW5rcyhhdikpOwotCi0KLSAgLyogUmVxdWVzdCBlbm91Z2ggc3BhY2UgZm9yIG5iICsg
cGFkICsgb3ZlcmhlYWQgKi8KLQotICBzaXplID0gbmIgKyBhdi0+dG9wX3BhZCArIE1JTlNJWkU7
Ci0KLSAgLyoKLSAgICBJZiBjb250aWd1b3VzLCB3ZSBjYW4gc3VidHJhY3Qgb3V0IGV4aXN0aW5n
IHNwYWNlIHRoYXQgd2UgaG9wZSB0bwotICAgIGNvbWJpbmUgd2l0aCBuZXcgc3BhY2UuIFdlIGFk
ZCBpdCBiYWNrIGxhdGVyIG9ubHkgaWYKLSAgICB3ZSBkb24ndCBhY3R1YWxseSBnZXQgY29udGln
dW91cyBzcGFjZS4KLSAgKi8KLQotICBpZiAoY29udGlndW91cyhhdikpCi0gICAgc2l6ZSAtPSBv
bGRfc2l6ZTsKLQotICAvKgotICAgIFJvdW5kIHRvIGEgbXVsdGlwbGUgb2YgcGFnZSBzaXplLgot
ICAgIElmIE1PUkVDT1JFIGlzIG5vdCBjb250aWd1b3VzLCB0aGlzIGVuc3VyZXMgdGhhdCB3ZSBv
bmx5IGNhbGwgaXQKLSAgICB3aXRoIHdob2xlLXBhZ2UgYXJndW1lbnRzLiAgQW5kIGlmIE1PUkVD
T1JFIGlzIGNvbnRpZ3VvdXMgYW5kCi0gICAgdGhpcyBpcyBub3QgZmlyc3QgdGltZSB0aHJvdWdo
LCB0aGlzIHByZXNlcnZlcyBwYWdlLWFsaWdubWVudCBvZgotICAgIHByZXZpb3VzIGNhbGxzLiBP
dGhlcndpc2UsIHdlIGNvcnJlY3QgdG8gcGFnZS1hbGlnbiBiZWxvdy4KLSAgKi8KLQotICBzaXpl
ID0gKHNpemUgKyBwYWdlbWFzaykgJiB+cGFnZW1hc2s7Ci0KLSAgLyoKLSAgICBEb24ndCB0cnkg
dG8gY2FsbCBNT1JFQ09SRSBpZiBhcmd1bWVudCBpcyBzbyBiaWcgYXMgdG8gYXBwZWFyCi0gICAg
bmVnYXRpdmUuIE5vdGUgdGhhdCBzaW5jZSBtbWFwIHRha2VzIHNpemVfdCBhcmcsIGl0IG1heSBz
dWNjZWVkCi0gICAgYmVsb3cgZXZlbiBpZiB3ZSBjYW5ub3QgY2FsbCBNT1JFQ09SRS4KLSAgKi8K
LQotICBpZiAoc2l6ZSA+IDApIAotICAgIGJyayA9IChjaGFyKikoTU9SRUNPUkUoc2l6ZSkpOwot
Ci0gIC8qCi0gICAgSWYgaGF2ZSBtbWFwLCB0cnkgdXNpbmcgaXQgYXMgYSBiYWNrdXAgd2hlbiBN
T1JFQ09SRSBmYWlscyBvcgotICAgIGNhbm5vdCBiZSB1c2VkLiBUaGlzIGlzIHdvcnRoIGRvaW5n
IG9uIHN5c3RlbXMgdGhhdCBoYXZlICJob2xlcyIgaW4KLSAgICBhZGRyZXNzIHNwYWNlLCBzbyBz
YnJrIGNhbm5vdCBleHRlbmQgdG8gZ2l2ZSBjb250aWd1b3VzIHNwYWNlLCBidXQKLSAgICBzcGFj
ZSBpcyBhdmFpbGFibGUgZWxzZXdoZXJlLiAgTm90ZSB0aGF0IHdlIGlnbm9yZSBtbWFwIG1heCBj
b3VudAotICAgIGFuZCB0aHJlc2hvbGQgbGltaXRzLCBzaW5jZSB0aGUgc3BhY2Ugd2lsbCBub3Qg
YmUgdXNlZCBhcyBhCi0gICAgc2VncmVnYXRlZCBtbWFwIHJlZ2lvbi4KLSAgKi8KLQotI2lmIEhB
VkVfTU1BUAotICBpZiAoYnJrID09IChjaGFyKikoTU9SRUNPUkVfRkFJTFVSRSkpIHsKLQotICAg
IC8qIENhbm5vdCBtZXJnZSB3aXRoIG9sZCB0b3AsIHNvIGFkZCBpdHMgc2l6ZSBiYWNrIGluICov
Ci0gICAgaWYgKGNvbnRpZ3VvdXMoYXYpKQotICAgICAgc2l6ZSA9IChzaXplICsgb2xkX3NpemUg
KyBwYWdlbWFzaykgJiB+cGFnZW1hc2s7Ci0KLSAgICAvKiBJZiB3ZSBhcmUgcmVseWluZyBvbiBt
bWFwIGFzIGJhY2t1cCwgdGhlbiB1c2UgbGFyZ2VyIHVuaXRzICovCi0gICAgaWYgKChDSFVOS19T
SVpFX1QpKHNpemUpIDwgKENIVU5LX1NJWkVfVCkoTU1BUF9BU19NT1JFQ09SRV9TSVpFKSkKLSAg
ICAgIHNpemUgPSBNTUFQX0FTX01PUkVDT1JFX1NJWkU7Ci0KLSAgICAvKiBEb24ndCB0cnkgaWYg
c2l6ZSB3cmFwcyBhcm91bmQgMCAqLwotICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA+IChD
SFVOS19TSVpFX1QpKG5iKSkgewotCi0gICAgICBicmsgPSAoY2hhciopKE1NQVAoMCwgc2l6ZSwg
UFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFKSk7Ci0gICAgICAKLSAgICAgIGlmIChi
cmsgIT0gKGNoYXIqKShNT1JFQ09SRV9GQUlMVVJFKSkgewotICAgICAgICAKLSAgICAgICAgLyog
V2UgZG8gbm90IG5lZWQsIGFuZCBjYW5ub3QgdXNlLCBhbm90aGVyIHNicmsgY2FsbCB0byBmaW5k
IGVuZCAqLwotICAgICAgICBzbmRfYnJrID0gYnJrICsgc2l6ZTsKLSAgICAgICAgCi0gICAgICAg
IC8qIAotICAgICAgICAgICBSZWNvcmQgdGhhdCB3ZSBubyBsb25nZXIgaGF2ZSBhIGNvbnRpZ3Vv
dXMgc2JyayByZWdpb24uIAotICAgICAgICAgICBBZnRlciB0aGUgZmlyc3QgdGltZSBtbWFwIGlz
IHVzZWQgYXMgYmFja3VwLCB3ZSBkbyBub3QKLSAgICAgICAgICAgZXZlciByZWx5IG9uIGNvbnRp
Z3VvdXMgc3BhY2Ugc2luY2UgdGhpcyBjb3VsZCBpbmNvcnJlY3RseQotICAgICAgICAgICBicmlk
Z2UgcmVnaW9ucy4KLSAgICAgICAgKi8KLSAgICAgICAgc2V0X25vbmNvbnRpZ3VvdXMoYXYpOwot
ICAgICAgfQotICAgIH0KLSAgfQotI2VuZGlmCi0KLSAgaWYgKGJyayAhPSAoY2hhciopKE1PUkVD
T1JFX0ZBSUxVUkUpKSB7Ci0gICAgYXYtPnNicmtlZF9tZW0gKz0gc2l6ZTsKLQotICAgIC8qCi0g
ICAgICBJZiBNT1JFQ09SRSBleHRlbmRzIHByZXZpb3VzIHNwYWNlLCB3ZSBjYW4gbGlrZXdpc2Ug
ZXh0ZW5kIHRvcCBzaXplLgotICAgICovCi0gICAgCi0gICAgaWYgKGJyayA9PSBvbGRfZW5kICYm
IHNuZF9icmsgPT0gKGNoYXIqKShNT1JFQ09SRV9GQUlMVVJFKSkgewotICAgICAgc2V0X2hlYWQo
b2xkX3RvcCwgKHNpemUgKyBvbGRfc2l6ZSkgfCBQUkVWX0lOVVNFKTsKLSAgICB9Ci0KLSAgICAv
KgotICAgICAgT3RoZXJ3aXNlLCBtYWtlIGFkanVzdG1lbnRzOgotICAgICAgCi0gICAgICAqIElm
IHRoZSBmaXJzdCB0aW1lIHRocm91Z2ggb3Igbm9uY29udGlndW91cywgd2UgbmVlZCB0byBjYWxs
IHNicmsKLSAgICAgICAganVzdCB0byBmaW5kIG91dCB3aGVyZSB0aGUgZW5kIG9mIG1lbW9yeSBs
aWVzLgotCi0gICAgICAqIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYWxsIHJldHVybmVkIGNodW5r
cyBmcm9tIG1hbGxvYyB3aWxsIG1lZXQKLSAgICAgICAgTUFMTE9DX0FMSUdOTUVOVAotCi0gICAg
ICAqIElmIHRoZXJlIHdhcyBhbiBpbnRlcnZlbmluZyBmb3JlaWduIHNicmssIHdlIG5lZWQgdG8g
YWRqdXN0IHNicmsKLSAgICAgICAgcmVxdWVzdCBzaXplIHRvIGFjY291bnQgZm9yIGZhY3QgdGhh
dCB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRvCi0gICAgICAgIGNvbWJpbmUgbmV3IHNwYWNlIHdpdGgg
ZXhpc3Rpbmcgc3BhY2UgaW4gb2xkX3RvcC4KLQotICAgICAgKiBBbG1vc3QgYWxsIHN5c3RlbXMg
aW50ZXJuYWxseSBhbGxvY2F0ZSB3aG9sZSBwYWdlcyBhdCBhIHRpbWUsIGluCi0gICAgICAgIHdo
aWNoIGNhc2Ugd2UgbWlnaHQgYXMgd2VsbCB1c2UgdGhlIHdob2xlIGxhc3QgcGFnZSBvZiByZXF1
ZXN0LgotICAgICAgICBTbyB3ZSBhbGxvY2F0ZSBlbm91Z2ggbW9yZSBtZW1vcnkgdG8gaGl0IGEg
cGFnZSBib3VuZGFyeSBub3csCi0gICAgICAgIHdoaWNoIGluIHR1cm4gY2F1c2VzIGZ1dHVyZSBj
b250aWd1b3VzIGNhbGxzIHRvIHBhZ2UtYWxpZ24uCi0gICAgKi8KLSAgICAKLSAgICBlbHNlIHsK
LSAgICAgIGZyb250X21pc2FsaWduID0gMDsKLSAgICAgIGVuZF9taXNhbGlnbiA9IDA7Ci0gICAg
ICBjb3JyZWN0aW9uID0gMDsKLSAgICAgIGFsaWduZWRfYnJrID0gYnJrOwotCi0gICAgICAvKgot
ICAgICAgICBJZiBNT1JFQ09SRSByZXR1cm5zIGFuIGFkZHJlc3MgbG93ZXIgdGhhbiB3ZSBoYXZl
IHNlZW4gYmVmb3JlLAotICAgICAgICB3ZSBrbm93IGl0IGlzbid0IHJlYWxseSBjb250aWd1b3Vz
LiAgVGhpcyBhbmQgc29tZSBzdWJzZXF1ZW50Ci0gICAgICAgIGNoZWNrcyBoZWxwIGNvcGUgd2l0
aCBub24tY29uZm9ybWluZyBNT1JFQ09SRSBmdW5jdGlvbnMgYW5kCi0gICAgICAgIHRoZSBwcmVz
ZW5jZSBvZiAiZm9yZWlnbiIgY2FsbHMgdG8gTU9SRUNPUkUgZnJvbSBvdXRzaWRlIG9mCi0gICAg
ICAgIG1hbGxvYyBvciBieSBvdGhlciB0aHJlYWRzLiAgV2UgY2Fubm90IGd1YXJhbnRlZSB0byBk
ZXRlY3QKLSAgICAgICAgdGhlc2UgaW4gYWxsIGNhc2VzLCBidXQgY29wZSB3aXRoIHRoZSBvbmVz
IHdlIGRvIGRldGVjdC4KLSAgICAgICovCi0gICAgICBpZiAoY29udGlndW91cyhhdikgJiYgb2xk
X3NpemUgIT0gMCAmJiBicmsgPCBvbGRfZW5kKSB7Ci0gICAgICAgIHNldF9ub25jb250aWd1b3Vz
KGF2KTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLyogaGFuZGxlIGNvbnRpZ3VvdXMgY2FzZXMg
Ki8KLSAgICAgIGlmIChjb250aWd1b3VzKGF2KSkgeyAKLQotICAgICAgICAvKiAKLSAgICAgICAg
ICAgV2UgY2FuIHRvbGVyYXRlIGZvcndhcmQgbm9uLWNvbnRpZ3VpdGllcyBoZXJlICh1c3VhbGx5
IGR1ZQotICAgICAgICAgICB0byBmb3JlaWduIGNhbGxzKSBidXQgdHJlYXQgdGhlbSBhcyBwYXJ0
IG9mIG91ciBzcGFjZSBmb3IKLSAgICAgICAgICAgc3RhdHMgcmVwb3J0aW5nLgotICAgICAgICAq
LwotICAgICAgICBpZiAob2xkX3NpemUgIT0gMCkgCi0gICAgICAgICAgYXYtPnNicmtlZF9tZW0g
Kz0gYnJrIC0gb2xkX2VuZDsKLSAgICAgICAgCi0gICAgICAgIC8qIEd1YXJhbnRlZSBhbGlnbm1l
bnQgb2YgZmlyc3QgbmV3IGNodW5rIG1hZGUgZnJvbSB0aGlzIHNwYWNlICovCi0KLSAgICAgICAg
ZnJvbnRfbWlzYWxpZ24gPSAoSU5URVJOQUxfU0laRV9UKWNodW5rMm1lbShicmspICYgTUFMTE9D
X0FMSUdOX01BU0s7Ci0gICAgICAgIGlmIChmcm9udF9taXNhbGlnbiA+IDApIHsKLQotICAgICAg
ICAgIC8qCi0gICAgICAgICAgICBTa2lwIG92ZXIgc29tZSBieXRlcyB0byBhcnJpdmUgYXQgYW4g
YWxpZ25lZCBwb3NpdGlvbi4KLSAgICAgICAgICAgIFdlIGRvbid0IG5lZWQgdG8gc3BlY2lhbGx5
IG1hcmsgdGhlc2Ugd2FzdGVkIGZyb250IGJ5dGVzLgotICAgICAgICAgICAgVGhleSB3aWxsIG5l
dmVyIGJlIGFjY2Vzc2VkIGFueXdheSBiZWNhdXNlCi0gICAgICAgICAgICBwcmV2X2ludXNlIG9m
IGF2LT50b3AgKGFuZCBhbnkgY2h1bmsgY3JlYXRlZCBmcm9tIGl0cyBzdGFydCkKLSAgICAgICAg
ICAgIGlzIGFsd2F5cyB0cnVlIGFmdGVyIGluaXRpYWxpemF0aW9uLgotICAgICAgICAgICovCi0K
LSAgICAgICAgICBjb3JyZWN0aW9uID0gTUFMTE9DX0FMSUdOTUVOVCAtIGZyb250X21pc2FsaWdu
OwotICAgICAgICAgIGFsaWduZWRfYnJrICs9IGNvcnJlY3Rpb247Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIC8qCi0gICAgICAgICAgSWYgdGhpcyBpc24ndCBhZGphY2VudCB0byBleGlz
dGluZyBzcGFjZSwgdGhlbiB3ZSB3aWxsIG5vdAotICAgICAgICAgIGJlIGFibGUgdG8gbWVyZ2Ug
d2l0aCBvbGRfdG9wIHNwYWNlLCBzbyBtdXN0IGFkZCB0byAybmQgcmVxdWVzdC4KLSAgICAgICAg
Ki8KLSAgICAgICAgCi0gICAgICAgIGNvcnJlY3Rpb24gKz0gb2xkX3NpemU7Ci0gICAgICAgIAot
ICAgICAgICAvKiBFeHRlbmQgdGhlIGVuZCBhZGRyZXNzIHRvIGhpdCBhIHBhZ2UgYm91bmRhcnkg
Ki8KLSAgICAgICAgZW5kX21pc2FsaWduID0gKElOVEVSTkFMX1NJWkVfVCkoYnJrICsgc2l6ZSAr
IGNvcnJlY3Rpb24pOwotICAgICAgICBjb3JyZWN0aW9uICs9ICgoZW5kX21pc2FsaWduICsgcGFn
ZW1hc2spICYgfnBhZ2VtYXNrKSAtIGVuZF9taXNhbGlnbjsKLSAgICAgICAgCi0gICAgICAgIGFz
c2VydChjb3JyZWN0aW9uID49IDApOwotICAgICAgICBzbmRfYnJrID0gKGNoYXIqKShNT1JFQ09S
RShjb3JyZWN0aW9uKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc25kX2JyayA9PSAoY2hhciop
KE1PUkVDT1JFX0ZBSUxVUkUpKSB7Ci0gICAgICAgICAgLyoKLSAgICAgICAgICAgIElmIGNhbid0
IGFsbG9jYXRlIGNvcnJlY3Rpb24sIHRyeSB0byBhdCBsZWFzdCBmaW5kIG91dCBjdXJyZW50Ci0g
ICAgICAgICAgICBicmsuICBJdCBtaWdodCBiZSBlbm91Z2ggdG8gcHJvY2VlZCB3aXRob3V0IGZh
aWxpbmcuCi0gICAgICAgICAgKi8KLSAgICAgICAgICBjb3JyZWN0aW9uID0gMDsKLSAgICAgICAg
ICBzbmRfYnJrID0gKGNoYXIqKShNT1JFQ09SRSgwKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAoc25kX2JyayA8IGJyaykgewotICAgICAgICAgIC8qCi0gICAgICAgICAgICBJZiB0aGUg
c2Vjb25kIGNhbGwgZ2l2ZXMgbm9uY29udGlndW91cyBzcGFjZSBldmVuIHRob3VnaAotICAgICAg
ICAgICAgaXQgc2F5cyBpdCB3b24ndCwgdGhlIG9ubHkgY291cnNlIG9mIGFjdGlvbiBpcyB0byBp
Z25vcmUKLSAgICAgICAgICAgIHJlc3VsdHMgb2Ygc2Vjb25kIGNhbGwsIGFuZCBjb25zZXJ2YXRp
dmVseSBlc3RpbWF0ZSB3aGVyZQotICAgICAgICAgICAgdGhlIGZpcnN0IGNhbGwgbGVmdCB1cy4g
QWxzbyBzZXQgbm9uY29udGlndW91cywgc28gdGhpcwotICAgICAgICAgICAgd29uJ3QgaGFwcGVu
IGFnYWluLCBsZWF2aW5nIGF0IG1vc3Qgb25lIGhvbGUuCi0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzIGludHJpbnNpY2FsbHkgaW5jb21wbGV0ZS4gIEJl
Y2F1c2UKLSAgICAgICAgICAgIE1PUkVDT1JFIGlzIGFsbG93ZWQgdG8gZ2l2ZSBtb3JlIHNwYWNl
IHRoYW4gd2UgYXNrIGZvciwKLSAgICAgICAgICAgIHRoZXJlIGlzIG5vIHJlbGlhYmxlIHdheSB0
byBkZXRlY3QgYSBub25jb250aWd1aXR5Ci0gICAgICAgICAgICBwcm9kdWNpbmcgYSBmb3J3YXJk
IGdhcCBmb3IgdGhlIHNlY29uZCBjYWxsLgotICAgICAgICAgICovCi0gICAgICAgICAgc25kX2Jy
ayA9IGJyayArIHNpemU7Ci0gICAgICAgICAgY29ycmVjdGlvbiA9IDA7Ci0gICAgICAgICAgc2V0
X25vbmNvbnRpZ3VvdXMoYXYpOwotICAgICAgICB9Ci0KLSAgICAgIH0KLSAgICAgIAotICAgICAg
LyogaGFuZGxlIG5vbi1jb250aWd1b3VzIGNhc2VzICovCi0gICAgICBlbHNlIHsgCi0gICAgICAg
IC8qIE1PUkVDT1JFL21tYXAgbXVzdCBjb3JyZWN0bHkgYWxpZ24gKi8KLSAgICAgICAgYXNzZXJ0
KGFsaWduZWRfT0soY2h1bmsybWVtKGJyaykpKTsKLSAgICAgICAgCi0gICAgICAgIC8qIEZpbmQg
b3V0IGN1cnJlbnQgZW5kIG9mIG1lbW9yeSAqLwotICAgICAgICBpZiAoc25kX2JyayA9PSAoY2hh
ciopKE1PUkVDT1JFX0ZBSUxVUkUpKSB7Ci0gICAgICAgICAgc25kX2JyayA9IChjaGFyKikoTU9S
RUNPUkUoMCkpOwotICAgICAgICAgIGF2LT5zYnJrZWRfbWVtICs9IHNuZF9icmsgLSBicmsgLSBz
aXplOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8qIEFkanVzdCB0b3AgYmFz
ZWQgb24gcmVzdWx0cyBvZiBzZWNvbmQgc2JyayAqLwotICAgICAgaWYgKHNuZF9icmsgIT0gKGNo
YXIqKShNT1JFQ09SRV9GQUlMVVJFKSkgewotICAgICAgICBhdi0+dG9wID0gKG1jaHVua3B0cilh
bGlnbmVkX2JyazsKLSAgICAgICAgc2V0X2hlYWQoYXYtPnRvcCwgKHNuZF9icmsgLSBhbGlnbmVk
X2JyayArIGNvcnJlY3Rpb24pIHwgUFJFVl9JTlVTRSk7Ci0gICAgICAgIGF2LT5zYnJrZWRfbWVt
ICs9IGNvcnJlY3Rpb247Ci0gICAgIAotICAgICAgICAvKgotICAgICAgICAgIElmIG5vdCB0aGUg
Zmlyc3QgdGltZSB0aHJvdWdoLCB3ZSBlaXRoZXIgaGF2ZSBhCi0gICAgICAgICAgZ2FwIGR1ZSB0
byBmb3JlaWduIHNicmsgb3IgYSBub24tY29udGlndW91cyByZWdpb24uICBJbnNlcnQgYQotICAg
ICAgICAgIGRvdWJsZSBmZW5jZXBvc3QgYXQgb2xkX3RvcCB0byBwcmV2ZW50IGNvbnNvbGlkYXRp
b24gd2l0aCBzcGFjZQotICAgICAgICAgIHdlIGRvbid0IG93bi4gVGhlc2UgZmVuY2Vwb3N0cyBh
cmUgYXJ0aWZpY2lhbCBjaHVua3MgdGhhdCBhcmUKLSAgICAgICAgICBtYXJrZWQgYXMgaW51c2Ug
YW5kIGFyZSBpbiBhbnkgY2FzZSB0b28gc21hbGwgdG8gdXNlLiAgV2UgbmVlZAotICAgICAgICAg
IHR3byB0byBtYWtlIHNpemVzIGFuZCBhbGlnbm1lbnRzIHdvcmsgb3V0LgotICAgICAgICAqLwot
ICAgCi0gICAgICAgIGlmIChvbGRfc2l6ZSAhPSAwKSB7Ci0gICAgICAgICAgLyogCi0gICAgICAg
ICAgICAgU2hyaW5rIG9sZF90b3AgdG8gaW5zZXJ0IGZlbmNlcG9zdHMsIGtlZXBpbmcgc2l6ZSBh
Ci0gICAgICAgICAgICAgbXVsdGlwbGUgb2YgTUFMTE9DX0FMSUdOTUVOVC4gV2Uga25vdyB0aGVy
ZSBpcyBhdCBsZWFzdAotICAgICAgICAgICAgIGVub3VnaCBzcGFjZSBpbiBvbGRfdG9wIHRvIGRv
IHRoaXMuCi0gICAgICAgICAgKi8KLSAgICAgICAgICBvbGRfc2l6ZSA9IChvbGRfc2l6ZSAtIDMq
U0laRV9TWikgJiB+TUFMTE9DX0FMSUdOX01BU0s7Ci0gICAgICAgICAgc2V0X2hlYWQob2xkX3Rv
cCwgb2xkX3NpemUgfCBQUkVWX0lOVVNFKTsKLSAgICAgICAgICAKLSAgICAgICAgICAvKgotICAg
ICAgICAgICAgTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgYXNzaWdubWVudHMgY29tcGxldGVseSBv
dmVyd3JpdGUKLSAgICAgICAgICAgIG9sZF90b3Agd2hlbiBvbGRfc2l6ZSB3YXMgcHJldmlvdXNs
eSBNSU5TSVpFLiAgVGhpcyBpcwotICAgICAgICAgICAgaW50ZW50aW9uYWwuIFdlIG5lZWQgdGhl
IGZlbmNlcG9zdCwgZXZlbiBpZiBvbGRfdG9wIG90aGVyd2lzZSBnZXRzCi0gICAgICAgICAgICBs
b3N0LgotICAgICAgICAgICovCi0gICAgICAgICAgY2h1bmtfYXRfb2Zmc2V0KG9sZF90b3AsIG9s
ZF9zaXplICAgICAgICAgICktPnNpemUgPQotICAgICAgICAgICAgU0laRV9TWnxQUkVWX0lOVVNF
OwotCi0gICAgICAgICAgY2h1bmtfYXRfb2Zmc2V0KG9sZF90b3AsIG9sZF9zaXplICsgU0laRV9T
WiktPnNpemUgPQotICAgICAgICAgICAgU0laRV9TWnxQUkVWX0lOVVNFOwotCi0gICAgICAgICAg
LyogCi0gICAgICAgICAgICAgSWYgcG9zc2libGUsIHJlbGVhc2UgdGhlIHJlc3QsIHN1cHByZXNz
aW5nIHRyaW1taW5nLgotICAgICAgICAgICovCi0gICAgICAgICAgaWYgKG9sZF9zaXplID49IE1J
TlNJWkUpIHsKLSAgICAgICAgICAgIElOVEVSTkFMX1NJWkVfVCB0dCA9IGF2LT50cmltX3RocmVz
aG9sZDsKLSAgICAgICAgICAgIGF2LT50cmltX3RocmVzaG9sZCA9IChJTlRFUk5BTF9TSVpFX1Qp
KC0xKTsKLSAgICAgICAgICAgIGZSRWUoY2h1bmsybWVtKG9sZF90b3ApKTsKLSAgICAgICAgICAg
IGF2LT50cmltX3RocmVzaG9sZCA9IHR0OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
fQotICAgIH0KLSAgICAKLSAgICAvKiBVcGRhdGUgc3RhdGlzdGljcyAqLwotICAgIHN1bSA9IGF2
LT5zYnJrZWRfbWVtOwotICAgIGlmIChzdW0gPiAoQ0hVTktfU0laRV9UKShhdi0+bWF4X3Nicmtl
ZF9tZW0pKQotICAgICAgYXYtPm1heF9zYnJrZWRfbWVtID0gc3VtOwotICAgIAotICAgIHN1bSAr
PSBhdi0+bW1hcHBlZF9tZW07Ci0gICAgaWYgKHN1bSA+IChDSFVOS19TSVpFX1QpKGF2LT5tYXhf
dG90YWxfbWVtKSkKLSAgICAgIGF2LT5tYXhfdG90YWxfbWVtID0gc3VtOwotCi0gICAgY2hlY2tf
bWFsbG9jX3N0YXRlKCk7Ci0gICAgCi0gICAgLyogZmluYWxseSwgZG8gdGhlIGFsbG9jYXRpb24g
Ki8KLQotICAgIHAgPSBhdi0+dG9wOwotICAgIHNpemUgPSBjaHVua3NpemUocCk7Ci0gICAgCi0g
ICAgLyogY2hlY2sgdGhhdCBvbmUgb2YgdGhlIGFib3ZlIGFsbG9jYXRpb24gcGF0aHMgc3VjY2Vl
ZGVkICovCi0gICAgaWYgKChDSFVOS19TSVpFX1QpKHNpemUpID49IChDSFVOS19TSVpFX1QpKG5i
ICsgTUlOU0laRSkpIHsKLSAgICAgIHJlbWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOwotICAgICAg
cmVtYWluZGVyID0gY2h1bmtfYXRfb2Zmc2V0KHAsIG5iKTsKLSAgICAgIGF2LT50b3AgPSByZW1h
aW5kZXI7Ci0gICAgICBzZXRfaGVhZChwLCBuYiB8IFBSRVZfSU5VU0UpOwotICAgICAgc2V0X2hl
YWQocmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgY2hlY2tf
bWFsbG9jZWRfY2h1bmsocCwgbmIpOwotICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsKLSAgICB9
Ci0KLSAgfQotCi0gIC8qIGNhdGNoIGFsbCBmYWlsdXJlIHBhdGhzICovCi0gIE1BTExPQ19GQUlM
VVJFX0FDVElPTjsKLSAgcmV0dXJuIDA7Ci19Ci0KLQotCi0KLS8qCi0gIHNZU1RSSW0gaXMgYW4g
aW52ZXJzZSBvZiBzb3J0cyB0byBzWVNNQUxMT2MuICBJdCBnaXZlcyBtZW1vcnkgYmFjawotICB0
byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUgYXJndW1lbnRzIHRvIHNicmspIGlmIHRoZXJlIGlz
IHVudXNlZAotICBtZW1vcnkgYXQgdGhlIGBoaWdoJyBlbmQgb2YgdGhlIG1hbGxvYyBwb29sLiBJ
dCBpcyBjYWxsZWQKLSAgYXV0b21hdGljYWxseSBieSBmcmVlKCkgd2hlbiB0b3Agc3BhY2UgZXhj
ZWVkcyB0aGUgdHJpbQotICB0aHJlc2hvbGQuIEl0IGlzIGFsc28gY2FsbGVkIGJ5IHRoZSBwdWJs
aWMgbWFsbG9jX3RyaW0gcm91dGluZS4gIEl0Ci0gIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSBy
ZWxlYXNlZCBhbnkgbWVtb3J5LCBlbHNlIDAuCi0qLwotCi0jaWZuZGVmIE1PUkVDT1JFX0NBTk5P
VF9UUklNCi0KLSNpZiBfX1NURF9DCi1zdGF0aWMgaW50IHNZU1RSSW0oc2l6ZV90IHBhZCwgbXN0
YXRlIGF2KQotI2Vsc2UKLXN0YXRpYyBpbnQgc1lTVFJJbShwYWQsIGF2KSBzaXplX3QgcGFkOyBt
c3RhdGUgYXY7Ci0jZW5kaWYKLXsKLSAgbG9uZyAgdG9wX3NpemU7ICAgICAgICAvKiBBbW91bnQg
b2YgdG9wLW1vc3QgbWVtb3J5ICovCi0gIGxvbmcgIGV4dHJhOyAgICAgICAgICAgLyogQW1vdW50
IHRvIHJlbGVhc2UgKi8KLSAgbG9uZyAgcmVsZWFzZWQ7ICAgICAgICAvKiBBbW91bnQgYWN0dWFs
bHkgcmVsZWFzZWQgKi8KLSAgY2hhciogY3VycmVudF9icms7ICAgICAvKiBhZGRyZXNzIHJldHVy
bmVkIGJ5IHByZS1jaGVjayBzYnJrIGNhbGwgKi8KLSAgY2hhciogbmV3X2JyazsgICAgICAgICAv
KiBhZGRyZXNzIHJldHVybmVkIGJ5IHBvc3QtY2hlY2sgc2JyayBjYWxsICovCi0gIHNpemVfdCBw
YWdlc3o7Ci0KLSAgcGFnZXN6ID0gYXYtPnBhZ2VzaXplOwotICB0b3Bfc2l6ZSA9IGNodW5rc2l6
ZShhdi0+dG9wKTsKLSAgCi0gIC8qIFJlbGVhc2UgaW4gcGFnZXNpemUgdW5pdHMsIGtlZXBpbmcg
YXQgbGVhc3Qgb25lIHBhZ2UgKi8KLSAgZXh0cmEgPSAoKHRvcF9zaXplIC0gcGFkIC0gTUlOU0la
RSArIChwYWdlc3otMSkpIC8gcGFnZXN6IC0gMSkgKiBwYWdlc3o7Ci0gIAotICBpZiAoZXh0cmEg
PiAwKSB7Ci0gICAgCi0gICAgLyoKLSAgICAgIE9ubHkgcHJvY2VlZCBpZiBlbmQgb2YgbWVtb3J5
IGlzIHdoZXJlIHdlIGxhc3Qgc2V0IGl0LgotICAgICAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgaWYg
dGhlcmUgd2VyZSBmb3JlaWduIHNicmsgY2FsbHMuCi0gICAgKi8KLSAgICBjdXJyZW50X2JyayA9
IChjaGFyKikoTU9SRUNPUkUoMCkpOwotICAgIGlmIChjdXJyZW50X2JyayA9PSAoY2hhciopKGF2
LT50b3ApICsgdG9wX3NpemUpIHsKLSAgICAgIAotICAgICAgLyoKLSAgICAgICAgQXR0ZW1wdCB0
byByZWxlYXNlIG1lbW9yeS4gV2UgaWdub3JlIE1PUkVDT1JFIHJldHVybiB2YWx1ZSwKLSAgICAg
ICAgYW5kIGluc3RlYWQgY2FsbCBhZ2FpbiB0byBmaW5kIG91dCB3aGVyZSBuZXcgZW5kIG9mIG1l
bW9yeSBpcy4KLSAgICAgICAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgaWYgZmlyc3QgY2FsbCByZWxl
YXNlcyBsZXNzIHRoYW4gd2UgYXNrZWQsCi0gICAgICAgIG9mIGlmIGZhaWx1cmUgc29tZWhvdyBh
bHRlcmVkIGJyayB2YWx1ZS4gKFdlIGNvdWxkIHN0aWxsCi0gICAgICAgIGVuY291bnRlciBwcm9i
bGVtcyBpZiBpdCBhbHRlcmVkIGJyayBpbiBzb21lIHZlcnkgYmFkIHdheSwKLSAgICAgICAgYnV0
IHRoZSBvbmx5IHRoaW5nIHdlIGNhbiBkbyBpcyBhZGp1c3QgYW55d2F5LCB3aGljaCB3aWxsIGNh
dXNlCi0gICAgICAgIHNvbWUgZG93bnN0cmVhbSBmYWlsdXJlLikKLSAgICAgICovCi0gICAgICAK
LSAgICAgIE1PUkVDT1JFKC1leHRyYSk7Ci0gICAgICBuZXdfYnJrID0gKGNoYXIqKShNT1JFQ09S
RSgwKSk7Ci0gICAgICAKLSAgICAgIGlmIChuZXdfYnJrICE9IChjaGFyKilNT1JFQ09SRV9GQUlM
VVJFKSB7Ci0gICAgICAgIHJlbGVhc2VkID0gKGxvbmcpKGN1cnJlbnRfYnJrIC0gbmV3X2Jyayk7
Ci0gICAgICAgIAotICAgICAgICBpZiAocmVsZWFzZWQgIT0gMCkgewotICAgICAgICAgIC8qIFN1
Y2Nlc3MuIEFkanVzdCB0b3AuICovCi0gICAgICAgICAgYXYtPnNicmtlZF9tZW0gLT0gcmVsZWFz
ZWQ7Ci0gICAgICAgICAgc2V0X2hlYWQoYXYtPnRvcCwgKHRvcF9zaXplIC0gcmVsZWFzZWQpIHwg
UFJFVl9JTlVTRSk7Ci0gICAgICAgICAgY2hlY2tfbWFsbG9jX3N0YXRlKCk7Ci0gICAgICAgICAg
cmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19
Ci0KLSNlbmRpZgotCi0vKgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9j
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotCi0jaWYgX19TVERfQwotVm9p
ZF90KiBtQUxMT2Moc2l6ZV90IGJ5dGVzKQotI2Vsc2UKLSAgVm9pZF90KiBtQUxMT2MoYnl0ZXMp
IHNpemVfdCBieXRlczsKLSNlbmRpZgotewotICBtc3RhdGUgYXYgPSBnZXRfbWFsbG9jX3N0YXRl
KCk7Ci0KLSAgSU5URVJOQUxfU0laRV9UIG5iOyAgICAgICAgICAgICAgIC8qIG5vcm1hbGl6ZWQg
cmVxdWVzdCBzaXplICovCi0gIHVuc2lnbmVkIGludCAgICBpZHg7ICAgICAgICAgICAgICAvKiBh
c3NvY2lhdGVkIGJpbiBpbmRleCAqLwotICBtYmlucHRyICAgICAgICAgYmluOyAgICAgICAgICAg
ICAgLyogYXNzb2NpYXRlZCBiaW4gKi8KLSAgbWZhc3RiaW5wdHIqICAgIGZiOyAgICAgICAgICAg
ICAgIC8qIGFzc29jaWF0ZWQgZmFzdGJpbiAqLwotCi0gIG1jaHVua3B0ciAgICAgICB2aWN0aW07
ICAgICAgICAgICAvKiBpbnNwZWN0ZWQvc2VsZWN0ZWQgY2h1bmsgKi8KLSAgSU5URVJOQUxfU0la
RV9UIHNpemU7ICAgICAgICAgICAgIC8qIGl0cyBzaXplICovCi0gIGludCAgICAgICAgICAgICB2
aWN0aW1faW5kZXg7ICAgICAvKiBpdHMgYmluIGluZGV4ICovCi0KLSAgbWNodW5rcHRyICAgICAg
IHJlbWFpbmRlcjsgICAgICAgIC8qIHJlbWFpbmRlciBmcm9tIGEgc3BsaXQgKi8KLSAgQ0hVTktf
U0laRV9UICAgIHJlbWFpbmRlcl9zaXplOyAgIC8qIGl0cyBzaXplICovCi0KLSAgdW5zaWduZWQg
aW50ICAgIGJsb2NrOyAgICAgICAgICAgIC8qIGJpdCBtYXAgdHJhdmVyc2VyICovCi0gIHVuc2ln
bmVkIGludCAgICBiaXQ7ICAgICAgICAgICAgICAvKiBiaXQgbWFwIHRyYXZlcnNlciAqLwotICB1
bnNpZ25lZCBpbnQgICAgbWFwOyAgICAgICAgICAgICAgLyogY3VycmVudCB3b3JkIG9mIGJpbm1h
cCAqLwotCi0gIG1jaHVua3B0ciAgICAgICBmd2Q7ICAgICAgICAgICAgICAvKiBtaXNjIHRlbXAg
Zm9yIGxpbmtpbmcgKi8KLSAgbWNodW5rcHRyICAgICAgIGJjazsgICAgICAgICAgICAgIC8qIG1p
c2MgdGVtcCBmb3IgbGlua2luZyAqLwotCi0gIC8qCi0gICAgQ29udmVydCByZXF1ZXN0IHNpemUg
dG8gaW50ZXJuYWwgZm9ybSBieSBhZGRpbmcgU0laRV9TWiBieXRlcwotICAgIG92ZXJoZWFkIHBs
dXMgcG9zc2libHkgbW9yZSB0byBvYnRhaW4gbmVjZXNzYXJ5IGFsaWdubWVudCBhbmQvb3IKLSAg
ICB0byBvYnRhaW4gYSBzaXplIG9mIGF0IGxlYXN0IE1JTlNJWkUsIHRoZSBzbWFsbGVzdCBhbGxv
Y2F0YWJsZQotICAgIHNpemUuIEFsc28sIGNoZWNrZWRfcmVxdWVzdDJzaXplIHRyYXBzIChyZXR1
cm5pbmcgMCkgcmVxdWVzdCBzaXplcwotICAgIHRoYXQgYXJlIHNvIGxhcmdlIHRoYXQgdGhleSB3
cmFwIGFyb3VuZCB6ZXJvIHdoZW4gcGFkZGVkIGFuZAotICAgIGFsaWduZWQuCi0gICovCi0KLSAg
Y2hlY2tlZF9yZXF1ZXN0MnNpemUoYnl0ZXMsIG5iKTsKLQotICAvKgotICAgIEJ5cGFzcyBzZWFy
Y2ggaWYgbm8gZnJlZXMgeWV0Ci0gICAqLwotICBpZiAoIWhhdmVfYW55Y2h1bmtzKGF2KSkgewot
ICAgIGlmIChhdi0+bWF4X2Zhc3QgPT0gMCkgLyogaW5pdGlhbGl6YXRpb24gY2hlY2sgKi8KLSAg
ICAgIG1hbGxvY19jb25zb2xpZGF0ZShhdik7Ci0gICAgZ290byB1c2VfdG9wOwotICB9Ci0KLSAg
LyoKLSAgICBJZiB0aGUgc2l6ZSBxdWFsaWZpZXMgYXMgYSBmYXN0YmluLCBmaXJzdCBjaGVjayBj
b3JyZXNwb25kaW5nIGJpbi4KLSAgKi8KLQotICBpZiAoKENIVU5LX1NJWkVfVCkobmIpIDw9IChD
SFVOS19TSVpFX1QpKGF2LT5tYXhfZmFzdCkpIHsgCi0gICAgZmIgPSAmKGF2LT5mYXN0Ymluc1so
ZmFzdGJpbl9pbmRleChuYikpXSk7Ci0gICAgaWYgKCAodmljdGltID0gKmZiKSAhPSAwKSB7Ci0g
ICAgICAqZmIgPSB2aWN0aW0tPmZkOwotICAgICAgY2hlY2tfcmVtYWxsb2NlZF9jaHVuayh2aWN0
aW0sIG5iKTsKLSAgICAgIHJldHVybiBjaHVuazJtZW0odmljdGltKTsKLSAgICB9Ci0gIH0KLQot
ICAvKgotICAgIElmIGEgc21hbGwgcmVxdWVzdCwgY2hlY2sgcmVndWxhciBiaW4uICBTaW5jZSB0
aGVzZSAic21hbGxiaW5zIgotICAgIGhvbGQgb25lIHNpemUgZWFjaCwgbm8gc2VhcmNoaW5nIHdp
dGhpbiBiaW5zIGlzIG5lY2Vzc2FyeS4KLSAgICAoRm9yIGEgbGFyZ2UgcmVxdWVzdCwgd2UgbmVl
ZCB0byB3YWl0IHVudGlsIHVuc29ydGVkIGNodW5rcyBhcmUKLSAgICBwcm9jZXNzZWQgdG8gZmlu
ZCBiZXN0IGZpdC4gQnV0IGZvciBzbWFsbCBvbmVzLCBmaXRzIGFyZSBleGFjdAotICAgIGFueXdh
eSwgc28gd2UgY2FuIGNoZWNrIG5vdywgd2hpY2ggaXMgZmFzdGVyLikKLSAgKi8KLQotICBpZiAo
aW5fc21hbGxiaW5fcmFuZ2UobmIpKSB7Ci0gICAgaWR4ID0gc21hbGxiaW5faW5kZXgobmIpOwot
ICAgIGJpbiA9IGJpbl9hdChhdixpZHgpOwotCi0gICAgaWYgKCAodmljdGltID0gbGFzdChiaW4p
KSAhPSBiaW4pIHsKLSAgICAgIGJjayA9IHZpY3RpbS0+Yms7Ci0gICAgICBzZXRfaW51c2VfYml0
X2F0X29mZnNldCh2aWN0aW0sIG5iKTsKLSAgICAgIGJpbi0+YmsgPSBiY2s7Ci0gICAgICBiY2st
PmZkID0gYmluOwotICAgICAgCi0gICAgICBjaGVja19tYWxsb2NlZF9jaHVuayh2aWN0aW0sIG5i
KTsKLSAgICAgIHJldHVybiBjaHVuazJtZW0odmljdGltKTsKLSAgICB9Ci0gIH0KLQotICAvKiAK
LSAgICAgSWYgdGhpcyBpcyBhIGxhcmdlIHJlcXVlc3QsIGNvbnNvbGlkYXRlIGZhc3RiaW5zIGJl
Zm9yZSBjb250aW51aW5nLgotICAgICBXaGlsZSBpdCBtaWdodCBsb29rIGV4Y2Vzc2l2ZSB0byBr
aWxsIGFsbCBmYXN0YmlucyBiZWZvcmUKLSAgICAgZXZlbiBzZWVpbmcgaWYgdGhlcmUgaXMgc3Bh
Y2UgYXZhaWxhYmxlLCB0aGlzIGF2b2lkcwotICAgICBmcmFnbWVudGF0aW9uIHByb2JsZW1zIG5v
cm1hbGx5IGFzc29jaWF0ZWQgd2l0aCBmYXN0Ymlucy4KLSAgICAgQWxzbywgaW4gcHJhY3RpY2Us
IHByb2dyYW1zIHRlbmQgdG8gaGF2ZSBydW5zIG9mIGVpdGhlciBzbWFsbCBvcgotICAgICBsYXJn
ZSByZXF1ZXN0cywgYnV0IGxlc3Mgb2Z0ZW4gbWl4dHVyZXMsIHNvIGNvbnNvbGlkYXRpb24gaXMg
bm90IAotICAgICBpbnZva2VkIGFsbCB0aGF0IG9mdGVuIGluIG1vc3QgcHJvZ3JhbXMuIEFuZCB0
aGUgcHJvZ3JhbXMgdGhhdAotICAgICBpdCBpcyBjYWxsZWQgZnJlcXVlbnRseSBpbiBvdGhlcndp
c2UgdGVuZCB0byBmcmFnbWVudC4KLSAgKi8KLQotICBlbHNlIHsKLSAgICBpZHggPSBsYXJnZWJp
bl9pbmRleChuYik7Ci0gICAgaWYgKGhhdmVfZmFzdGNodW5rcyhhdikpIAotICAgICAgbWFsbG9j
X2NvbnNvbGlkYXRlKGF2KTsKLSAgfQotCi0gIC8qCi0gICAgUHJvY2VzcyByZWNlbnRseSBmcmVl
ZCBvciByZW1haW5kZXJlZCBjaHVua3MsIHRha2luZyBvbmUgb25seSBpZgotICAgIGl0IGlzIGV4
YWN0IGZpdCwgb3IsIGlmIHRoaXMgYSBzbWFsbCByZXF1ZXN0LCB0aGUgY2h1bmsgaXMgcmVtYWlu
ZGVyIGZyb20KLSAgICB0aGUgbW9zdCByZWNlbnQgbm9uLWV4YWN0IGZpdC4gIFBsYWNlIG90aGVy
IHRyYXZlcnNlZCBjaHVua3MgaW4KLSAgICBiaW5zLiAgTm90ZSB0aGF0IHRoaXMgc3RlcCBpcyB0
aGUgb25seSBwbGFjZSBpbiBhbnkgcm91dGluZSB3aGVyZQotICAgIGNodW5rcyBhcmUgcGxhY2Vk
IGluIGJpbnMuCi0gICovCi0gICAgCi0gIHdoaWxlICggKHZpY3RpbSA9IHVuc29ydGVkX2NodW5r
cyhhdiktPmJrKSAhPSB1bnNvcnRlZF9jaHVua3MoYXYpKSB7Ci0gICAgYmNrID0gdmljdGltLT5i
azsKLSAgICBzaXplID0gY2h1bmtzaXplKHZpY3RpbSk7Ci0gICAgCi0gICAgLyogCi0gICAgICAg
SWYgYSBzbWFsbCByZXF1ZXN0LCB0cnkgdG8gdXNlIGxhc3QgcmVtYWluZGVyIGlmIGl0IGlzIHRo
ZQotICAgICAgIG9ubHkgY2h1bmsgaW4gdW5zb3J0ZWQgYmluLiAgVGhpcyBoZWxwcyBwcm9tb3Rl
IGxvY2FsaXR5IGZvcgotICAgICAgIHJ1bnMgb2YgY29uc2VjdXRpdmUgc21hbGwgcmVxdWVzdHMu
IFRoaXMgaXMgdGhlIG9ubHkKLSAgICAgICBleGNlcHRpb24gdG8gYmVzdC1maXQsIGFuZCBhcHBs
aWVzIG9ubHkgd2hlbiB0aGVyZSBpcwotICAgICAgIG5vIGV4YWN0IGZpdCBmb3IgYSBzbWFsbCBj
aHVuay4KLSAgICAqLwotICAgIAotICAgIGlmIChpbl9zbWFsbGJpbl9yYW5nZShuYikgJiYgCi0g
ICAgICAgIGJjayA9PSB1bnNvcnRlZF9jaHVua3MoYXYpICYmCi0gICAgICAgIHZpY3RpbSA9PSBh
di0+bGFzdF9yZW1haW5kZXIgJiYKLSAgICAgICAgKENIVU5LX1NJWkVfVCkoc2l6ZSkgPiAoQ0hV
TktfU0laRV9UKShuYiArIE1JTlNJWkUpKSB7Ci0gICAgICAKLSAgICAgIC8qIHNwbGl0IGFuZCBy
ZWF0dGFjaCByZW1haW5kZXIgKi8KLSAgICAgIHJlbWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOwot
ICAgICAgcmVtYWluZGVyID0gY2h1bmtfYXRfb2Zmc2V0KHZpY3RpbSwgbmIpOwotICAgICAgdW5z
b3J0ZWRfY2h1bmtzKGF2KS0+YmsgPSB1bnNvcnRlZF9jaHVua3MoYXYpLT5mZCA9IHJlbWFpbmRl
cjsKLSAgICAgIGF2LT5sYXN0X3JlbWFpbmRlciA9IHJlbWFpbmRlcjsgCi0gICAgICByZW1haW5k
ZXItPmJrID0gcmVtYWluZGVyLT5mZCA9IHVuc29ydGVkX2NodW5rcyhhdik7Ci0gICAgICAKLSAg
ICAgIHNldF9oZWFkKHZpY3RpbSwgbmIgfCBQUkVWX0lOVVNFKTsKLSAgICAgIHNldF9oZWFkKHJl
bWFpbmRlciwgcmVtYWluZGVyX3NpemUgfCBQUkVWX0lOVVNFKTsKLSAgICAgIHNldF9mb290KHJl
bWFpbmRlciwgcmVtYWluZGVyX3NpemUpOwotICAgICAgCi0gICAgICBjaGVja19tYWxsb2NlZF9j
aHVuayh2aWN0aW0sIG5iKTsKLSAgICAgIHJldHVybiBjaHVuazJtZW0odmljdGltKTsKLSAgICB9
Ci0gICAgCi0gICAgLyogcmVtb3ZlIGZyb20gdW5zb3J0ZWQgbGlzdCAqLwotICAgIHVuc29ydGVk
X2NodW5rcyhhdiktPmJrID0gYmNrOwotICAgIGJjay0+ZmQgPSB1bnNvcnRlZF9jaHVua3MoYXYp
OwotICAgIAotICAgIC8qIFRha2Ugbm93IGluc3RlYWQgb2YgYmlubmluZyBpZiBleGFjdCBmaXQg
Ki8KLSAgICAKLSAgICBpZiAoc2l6ZSA9PSBuYikgewotICAgICAgc2V0X2ludXNlX2JpdF9hdF9v
ZmZzZXQodmljdGltLCBzaXplKTsKLSAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKHZpY3RpbSwg
bmIpOwotICAgICAgcmV0dXJuIGNodW5rMm1lbSh2aWN0aW0pOwotICAgIH0KLSAgICAKLSAgICAv
KiBwbGFjZSBjaHVuayBpbiBiaW4gKi8KLSAgICAKLSAgICBpZiAoaW5fc21hbGxiaW5fcmFuZ2Uo
c2l6ZSkpIHsKLSAgICAgIHZpY3RpbV9pbmRleCA9IHNtYWxsYmluX2luZGV4KHNpemUpOwotICAg
ICAgYmNrID0gYmluX2F0KGF2LCB2aWN0aW1faW5kZXgpOwotICAgICAgZndkID0gYmNrLT5mZDsK
LSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICB2aWN0aW1faW5kZXggPSBsYXJnZWJpbl9pbmRleChz
aXplKTsKLSAgICAgIGJjayA9IGJpbl9hdChhdiwgdmljdGltX2luZGV4KTsKLSAgICAgIGZ3ZCA9
IGJjay0+ZmQ7Ci0gICAgICAKLSAgICAgIGlmIChmd2QgIT0gYmNrKSB7Ci0gICAgICAgIC8qIGlm
IHNtYWxsZXIgdGhhbiBzbWFsbGVzdCwgcGxhY2UgZmlyc3QgKi8KLSAgICAgICAgaWYgKChDSFVO
S19TSVpFX1QpKHNpemUpIDwgKENIVU5LX1NJWkVfVCkoYmNrLT5iay0+c2l6ZSkpIHsKLSAgICAg
ICAgICBmd2QgPSBiY2s7Ci0gICAgICAgICAgYmNrID0gYmNrLT5iazsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA+PSAKLSAgICAgICAgICAgICAgICAg
KENIVU5LX1NJWkVfVCkoRklSU1RfU09SVEVEX0JJTl9TSVpFKSkgewotICAgICAgICAgIAotICAg
ICAgICAgIC8qIG1haW50YWluIGxhcmdlIGJpbnMgaW4gc29ydGVkIG9yZGVyICovCi0gICAgICAg
ICAgc2l6ZSB8PSBQUkVWX0lOVVNFOyAvKiBPciB3aXRoIGludXNlIGJpdCB0byBzcGVlZCBjb21w
YXJpc29ucyAqLwotICAgICAgICAgIHdoaWxlICgoQ0hVTktfU0laRV9UKShzaXplKSA8IChDSFVO
S19TSVpFX1QpKGZ3ZC0+c2l6ZSkpIAotICAgICAgICAgICAgZndkID0gZndkLT5mZDsKLSAgICAg
ICAgICBiY2sgPSBmd2QtPmJrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgICAgCi0g
ICAgbWFya19iaW4oYXYsIHZpY3RpbV9pbmRleCk7Ci0gICAgdmljdGltLT5iayA9IGJjazsKLSAg
ICB2aWN0aW0tPmZkID0gZndkOwotICAgIGZ3ZC0+YmsgPSB2aWN0aW07Ci0gICAgYmNrLT5mZCA9
IHZpY3RpbTsKLSAgfQotICAKLSAgLyoKLSAgICBJZiBhIGxhcmdlIHJlcXVlc3QsIHNjYW4gdGhy
b3VnaCB0aGUgY2h1bmtzIG9mIGN1cnJlbnQgYmluIHRvCi0gICAgZmluZCBvbmUgdGhhdCBmaXRz
LiAgKFRoaXMgd2lsbCBiZSB0aGUgc21hbGxlc3QgdGhhdCBmaXRzIHVubGVzcwotICAgIEZJUlNU
X1NPUlRFRF9CSU5fU0laRSBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gZGVmYXVsdC4pICBUaGlzIGlz
Ci0gICAgdGhlIG9ubHkgc3RlcCB3aGVyZSBhbiB1bmJvdW5kZWQgbnVtYmVyIG9mIGNodW5rcyBt
aWdodCBiZQotICAgIHNjYW5uZWQgd2l0aG91dCBkb2luZyBhbnl0aGluZyB1c2VmdWwgd2l0aCB0
aGVtLiBIb3dldmVyIHRoZQotICAgIGxpc3RzIHRlbmQgdG8gYmUgc2hvcnQuCi0gICovCi0gIAot
ICBpZiAoIWluX3NtYWxsYmluX3JhbmdlKG5iKSkgewotICAgIGJpbiA9IGJpbl9hdChhdiwgaWR4
KTsKLSAgICAKLSAgICBmb3IgKHZpY3RpbSA9IGxhc3QoYmluKTsgdmljdGltICE9IGJpbjsgdmlj
dGltID0gdmljdGltLT5iaykgewotICAgICAgc2l6ZSA9IGNodW5rc2l6ZSh2aWN0aW0pOwotICAg
ICAgCi0gICAgICBpZiAoKENIVU5LX1NJWkVfVCkoc2l6ZSkgPj0gKENIVU5LX1NJWkVfVCkobmIp
KSB7Ci0gICAgICAgIHJlbWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOwotICAgICAgICB1bmxpbmso
dmljdGltLCBiY2ssIGZ3ZCk7Ci0gICAgICAgIAotICAgICAgICAvKiBFeGhhdXN0ICovCi0gICAg
ICAgIGlmIChyZW1haW5kZXJfc2l6ZSA8IE1JTlNJWkUpICB7Ci0gICAgICAgICAgc2V0X2ludXNl
X2JpdF9hdF9vZmZzZXQodmljdGltLCBzaXplKTsKLSAgICAgICAgICBjaGVja19tYWxsb2NlZF9j
aHVuayh2aWN0aW0sIG5iKTsKLSAgICAgICAgICByZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgLyogU3BsaXQgKi8KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
cmVtYWluZGVyID0gY2h1bmtfYXRfb2Zmc2V0KHZpY3RpbSwgbmIpOwotICAgICAgICAgIHVuc29y
dGVkX2NodW5rcyhhdiktPmJrID0gdW5zb3J0ZWRfY2h1bmtzKGF2KS0+ZmQgPSByZW1haW5kZXI7
Ci0gICAgICAgICAgcmVtYWluZGVyLT5iayA9IHJlbWFpbmRlci0+ZmQgPSB1bnNvcnRlZF9jaHVu
a3MoYXYpOwotICAgICAgICAgIHNldF9oZWFkKHZpY3RpbSwgbmIgfCBQUkVWX0lOVVNFKTsKLSAg
ICAgICAgICBzZXRfaGVhZChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplIHwgUFJFVl9JTlVTRSk7
Ci0gICAgICAgICAgc2V0X2Zvb3QocmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSk7Ci0gICAgICAg
ICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICAgICAgcmV0dXJuIGNo
dW5rMm1lbSh2aWN0aW0pOwotICAgICAgICB9IAotICAgICAgfQotICAgIH0gICAgCi0gIH0KLQot
ICAvKgotICAgIFNlYXJjaCBmb3IgYSBjaHVuayBieSBzY2FubmluZyBiaW5zLCBzdGFydGluZyB3
aXRoIG5leHQgbGFyZ2VzdAotICAgIGJpbi4gVGhpcyBzZWFyY2ggaXMgc3RyaWN0bHkgYnkgYmVz
dC1maXQ7IGkuZS4sIHRoZSBzbWFsbGVzdAotICAgICh3aXRoIHRpZXMgZ29pbmcgdG8gYXBwcm94
aW1hdGVseSB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCkgY2h1bmsKLSAgICB0aGF0IGZpdHMgaXMg
c2VsZWN0ZWQuCi0gICAgCi0gICAgVGhlIGJpdG1hcCBhdm9pZHMgbmVlZGluZyB0byBjaGVjayB0
aGF0IG1vc3QgYmxvY2tzIGFyZSBub25lbXB0eS4KLSAgKi8KLSAgICAKLSAgKytpZHg7Ci0gIGJp
biA9IGJpbl9hdChhdixpZHgpOwotICBibG9jayA9IGlkeDJibG9jayhpZHgpOwotICBtYXAgPSBh
di0+YmlubWFwW2Jsb2NrXTsKLSAgYml0ID0gaWR4MmJpdChpZHgpOwotICAKLSAgZm9yICg7Oykg
ewotICAgIAotICAgIC8qIFNraXAgcmVzdCBvZiBibG9jayBpZiB0aGVyZSBhcmUgbm8gbW9yZSBz
ZXQgYml0cyBpbiB0aGlzIGJsb2NrLiAgKi8KLSAgICBpZiAoYml0ID4gbWFwIHx8IGJpdCA9PSAw
KSB7Ci0gICAgICBkbyB7Ci0gICAgICAgIGlmICgrK2Jsb2NrID49IEJJTk1BUFNJWkUpICAvKiBv
dXQgb2YgYmlucyAqLwotICAgICAgICAgIGdvdG8gdXNlX3RvcDsKLSAgICAgIH0gd2hpbGUgKCAo
bWFwID0gYXYtPmJpbm1hcFtibG9ja10pID09IDApOwotICAgICAgCi0gICAgICBiaW4gPSBiaW5f
YXQoYXYsIChibG9jayA8PCBCSU5NQVBTSElGVCkpOwotICAgICAgYml0ID0gMTsKLSAgICB9Ci0g
ICAgCi0gICAgLyogQWR2YW5jZSB0byBiaW4gd2l0aCBzZXQgYml0LiBUaGVyZSBtdXN0IGJlIG9u
ZS4gKi8KLSAgICB3aGlsZSAoKGJpdCAmIG1hcCkgPT0gMCkgewotICAgICAgYmluID0gbmV4dF9i
aW4oYmluKTsKLSAgICAgIGJpdCA8PD0gMTsKLSAgICAgIGFzc2VydChiaXQgIT0gMCk7Ci0gICAg
fQotICAgIAotICAgIC8qIEluc3BlY3QgdGhlIGJpbi4gSXQgaXMgbGlrZWx5IHRvIGJlIG5vbi1l
bXB0eSAqLwotICAgIHZpY3RpbSA9IGxhc3QoYmluKTsKLSAgICAKLSAgICAvKiAgSWYgYSBmYWxz
ZSBhbGFybSAoZW1wdHkgYmluKSwgY2xlYXIgdGhlIGJpdC4gKi8KLSAgICBpZiAodmljdGltID09
IGJpbikgewotICAgICAgYXYtPmJpbm1hcFtibG9ja10gPSBtYXAgJj0gfmJpdDsgLyogV3JpdGUg
dGhyb3VnaCAqLwotICAgICAgYmluID0gbmV4dF9iaW4oYmluKTsKLSAgICAgIGJpdCA8PD0gMTsK
LSAgICB9Ci0gICAgCi0gICAgZWxzZSB7Ci0gICAgICBzaXplID0gY2h1bmtzaXplKHZpY3RpbSk7
Ci0gICAgICAKLSAgICAgIC8qICBXZSBrbm93IHRoZSBmaXJzdCBjaHVuayBpbiB0aGlzIGJpbiBp
cyBiaWcgZW5vdWdoIHRvIHVzZS4gKi8KLSAgICAgIGFzc2VydCgoQ0hVTktfU0laRV9UKShzaXpl
KSA+PSAoQ0hVTktfU0laRV9UKShuYikpOwotICAgICAgCi0gICAgICByZW1haW5kZXJfc2l6ZSA9
IHNpemUgLSBuYjsKLSAgICAgIAotICAgICAgLyogdW5saW5rICovCi0gICAgICBiY2sgPSB2aWN0
aW0tPmJrOwotICAgICAgYmluLT5iayA9IGJjazsKLSAgICAgIGJjay0+ZmQgPSBiaW47Ci0gICAg
ICAKLSAgICAgIC8qIEV4aGF1c3QgKi8KLSAgICAgIGlmIChyZW1haW5kZXJfc2l6ZSA8IE1JTlNJ
WkUpIHsKLSAgICAgICAgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQodmljdGltLCBzaXplKTsKLSAg
ICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICAgIHJldHVybiBj
aHVuazJtZW0odmljdGltKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLyogU3BsaXQgKi8KLSAg
ICAgIGVsc2UgewotICAgICAgICByZW1haW5kZXIgPSBjaHVua19hdF9vZmZzZXQodmljdGltLCBu
Yik7Ci0gICAgICAgIAotICAgICAgICB1bnNvcnRlZF9jaHVua3MoYXYpLT5iayA9IHVuc29ydGVk
X2NodW5rcyhhdiktPmZkID0gcmVtYWluZGVyOwotICAgICAgICByZW1haW5kZXItPmJrID0gcmVt
YWluZGVyLT5mZCA9IHVuc29ydGVkX2NodW5rcyhhdik7Ci0gICAgICAgIC8qIGFkdmVydGlzZSBh
cyBsYXN0IHJlbWFpbmRlciAqLwotICAgICAgICBpZiAoaW5fc21hbGxiaW5fcmFuZ2UobmIpKSAK
LSAgICAgICAgICBhdi0+bGFzdF9yZW1haW5kZXIgPSByZW1haW5kZXI7IAotICAgICAgICAKLSAg
ICAgICAgc2V0X2hlYWQodmljdGltLCBuYiB8IFBSRVZfSU5VU0UpOwotICAgICAgICBzZXRfaGVh
ZChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplIHwgUFJFVl9JTlVTRSk7Ci0gICAgICAgIHNldF9m
b290KHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUpOwotICAgICAgICBjaGVja19tYWxsb2NlZF9j
aHVuayh2aWN0aW0sIG5iKTsKLSAgICAgICAgcmV0dXJuIGNodW5rMm1lbSh2aWN0aW0pOwotICAg
ICAgfQotICAgIH0KLSAgfQotCi0gIHVzZV90b3A6ICAgIAotICAvKgotICAgIElmIGxhcmdlIGVu
b3VnaCwgc3BsaXQgb2ZmIHRoZSBjaHVuayBib3JkZXJpbmcgdGhlIGVuZCBvZiBtZW1vcnkKLSAg
ICAoaGVsZCBpbiBhdi0+dG9wKS4gTm90ZSB0aGF0IHRoaXMgaXMgaW4gYWNjb3JkIHdpdGggdGhl
IGJlc3QtZml0Ci0gICAgc2VhcmNoIHJ1bGUuICBJbiBlZmZlY3QsIGF2LT50b3AgaXMgdHJlYXRl
ZCBhcyBsYXJnZXIgKGFuZCB0aHVzCi0gICAgbGVzcyB3ZWxsIGZpdHRpbmcpIHRoYW4gYW55IG90
aGVyIGF2YWlsYWJsZSBjaHVuayBzaW5jZSBpdCBjYW4KLSAgICBiZSBleHRlbmRlZCB0byBiZSBh
cyBsYXJnZSBhcyBuZWNlc3NhcnkgKHVwIHRvIHN5c3RlbQotICAgIGxpbWl0YXRpb25zKS4KLSAg
ICAKLSAgICBXZSByZXF1aXJlIHRoYXQgYXYtPnRvcCBhbHdheXMgZXhpc3RzIChpLmUuLCBoYXMg
c2l6ZSA+PQotICAgIE1JTlNJWkUpIGFmdGVyIGluaXRpYWxpemF0aW9uLCBzbyBpZiBpdCB3b3Vs
ZCBvdGhlcndpc2UgYmUKLSAgICBleGh1YXN0ZWQgYnkgY3VycmVudCByZXF1ZXN0LCBpdCBpcyBy
ZXBsZW5pc2hlZC4gKFRoZSBtYWluCi0gICAgcmVhc29uIGZvciBlbnN1cmluZyBpdCBleGlzdHMg
aXMgdGhhdCB3ZSBtYXkgbmVlZCBNSU5TSVpFIHNwYWNlCi0gICAgdG8gcHV0IGluIGZlbmNlcG9z
dHMgaW4gc3lzbWFsbG9jLikKLSAgKi8KLSAgCi0gIHZpY3RpbSA9IGF2LT50b3A7Ci0gIHNpemUg
PSBjaHVua3NpemUodmljdGltKTsKLSAgCi0gIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA+PSAo
Q0hVTktfU0laRV9UKShuYiArIE1JTlNJWkUpKSB7Ci0gICAgcmVtYWluZGVyX3NpemUgPSBzaXpl
IC0gbmI7Ci0gICAgcmVtYWluZGVyID0gY2h1bmtfYXRfb2Zmc2V0KHZpY3RpbSwgbmIpOwotICAg
IGF2LT50b3AgPSByZW1haW5kZXI7Ci0gICAgc2V0X2hlYWQodmljdGltLCBuYiB8IFBSRVZfSU5V
U0UpOwotICAgIHNldF9oZWFkKHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUgfCBQUkVWX0lOVVNF
KTsKLSAgICAKLSAgICBjaGVja19tYWxsb2NlZF9jaHVuayh2aWN0aW0sIG5iKTsKLSAgICByZXR1
cm4gY2h1bmsybWVtKHZpY3RpbSk7Ci0gIH0KLSAgCi0gIC8qIAotICAgICBJZiBubyBzcGFjZSBp
biB0b3AsIHJlbGF5IHRvIGhhbmRsZSBzeXN0ZW0tZGVwZW5kZW50IGNhc2VzIAotICAqLwotICBy
ZXR1cm4gc1lTTUFMTE9jKG5iLCBhdik7ICAgIAotfQotCi0vKgotICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gZnJlZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0K
LSNpZiBfX1NURF9DCi12b2lkIGZSRWUoVm9pZF90KiBtZW0pCi0jZWxzZQotdm9pZCBmUkVlKG1l
bSkgVm9pZF90KiBtZW07Ci0jZW5kaWYKLXsKLSAgbXN0YXRlIGF2ID0gZ2V0X21hbGxvY19zdGF0
ZSgpOwotCi0gIG1jaHVua3B0ciAgICAgICBwOyAgICAgICAgICAgLyogY2h1bmsgY29ycmVzcG9u
ZGluZyB0byBtZW0gKi8KLSAgSU5URVJOQUxfU0laRV9UIHNpemU7ICAgICAgICAvKiBpdHMgc2l6
ZSAqLwotICBtZmFzdGJpbnB0ciogICAgZmI7ICAgICAgICAgIC8qIGFzc29jaWF0ZWQgZmFzdGJp
biAqLwotICBtY2h1bmtwdHIgICAgICAgbmV4dGNodW5rOyAgIC8qIG5leHQgY29udGlndW91cyBj
aHVuayAqLwotICBJTlRFUk5BTF9TSVpFX1QgbmV4dHNpemU7ICAgIC8qIGl0cyBzaXplICovCi0g
IGludCAgICAgICAgICAgICBuZXh0aW51c2U7ICAgLyogdHJ1ZSBpZiBuZXh0Y2h1bmsgaXMgdXNl
ZCAqLwotICBJTlRFUk5BTF9TSVpFX1QgcHJldnNpemU7ICAgIC8qIHNpemUgb2YgcHJldmlvdXMg
Y29udGlndW91cyBjaHVuayAqLwotICBtY2h1bmtwdHIgICAgICAgYmNrOyAgICAgICAgIC8qIG1p
c2MgdGVtcCBmb3IgbGlua2luZyAqLwotICBtY2h1bmtwdHIgICAgICAgZndkOyAgICAgICAgIC8q
IG1pc2MgdGVtcCBmb3IgbGlua2luZyAqLwotCi0gIC8qIGZyZWUoMCkgaGFzIG5vIGVmZmVjdCAq
LwotICBpZiAobWVtICE9IDApIHsKLSAgICBwID0gbWVtMmNodW5rKG1lbSk7Ci0gICAgc2l6ZSA9
IGNodW5rc2l6ZShwKTsKLQotICAgIGNoZWNrX2ludXNlX2NodW5rKHApOwotCi0gICAgLyoKLSAg
ICAgIElmIGVsaWdpYmxlLCBwbGFjZSBjaHVuayBvbiBhIGZhc3RiaW4gc28gaXQgY2FuIGJlIGZv
dW5kCi0gICAgICBhbmQgdXNlZCBxdWlja2x5IGluIG1hbGxvYy4KLSAgICAqLwotCi0gICAgaWYg
KChDSFVOS19TSVpFX1QpKHNpemUpIDw9IChDSFVOS19TSVpFX1QpKGF2LT5tYXhfZmFzdCkKLQot
I2lmIFRSSU1fRkFTVEJJTlMKLSAgICAgICAgLyogCi0gICAgICAgICAgIElmIFRSSU1fRkFTVEJJ
TlMgc2V0LCBkb24ndCBwbGFjZSBjaHVua3MKLSAgICAgICAgICAgYm9yZGVyaW5nIHRvcCBpbnRv
IGZhc3RiaW5zCi0gICAgICAgICovCi0gICAgICAgICYmIChjaHVua19hdF9vZmZzZXQocCwgc2l6
ZSkgIT0gYXYtPnRvcCkKLSNlbmRpZgotICAgICAgICApIHsKLQotICAgICAgc2V0X2Zhc3RjaHVu
a3MoYXYpOwotICAgICAgZmIgPSAmKGF2LT5mYXN0Ymluc1tmYXN0YmluX2luZGV4KHNpemUpXSk7
Ci0gICAgICBwLT5mZCA9ICpmYjsKLSAgICAgICpmYiA9IHA7Ci0gICAgfQotCi0gICAgLyoKLSAg
ICAgICBDb25zb2xpZGF0ZSBvdGhlciBub24tbW1hcHBlZCBjaHVua3MgYXMgdGhleSBhcnJpdmUu
Ci0gICAgKi8KLQotICAgIGVsc2UgaWYgKCFjaHVua19pc19tbWFwcGVkKHApKSB7Ci0gICAgICBz
ZXRfYW55Y2h1bmtzKGF2KTsKLQotICAgICAgbmV4dGNodW5rID0gY2h1bmtfYXRfb2Zmc2V0KHAs
IHNpemUpOwotICAgICAgbmV4dHNpemUgPSBjaHVua3NpemUobmV4dGNodW5rKTsKLQotICAgICAg
LyogY29uc29saWRhdGUgYmFja3dhcmQgKi8KLSAgICAgIGlmICghcHJldl9pbnVzZShwKSkgewot
ICAgICAgICBwcmV2c2l6ZSA9IHAtPnByZXZfc2l6ZTsKLSAgICAgICAgc2l6ZSArPSBwcmV2c2l6
ZTsKLSAgICAgICAgcCA9IGNodW5rX2F0X29mZnNldChwLCAtKChsb25nKSBwcmV2c2l6ZSkpOwot
ICAgICAgICB1bmxpbmsocCwgYmNrLCBmd2QpOwotICAgICAgfQotCi0gICAgICBpZiAobmV4dGNo
dW5rICE9IGF2LT50b3ApIHsKLSAgICAgICAgLyogZ2V0IGFuZCBjbGVhciBpbnVzZSBiaXQgKi8K
LSAgICAgICAgbmV4dGludXNlID0gaW51c2VfYml0X2F0X29mZnNldChuZXh0Y2h1bmssIG5leHRz
aXplKTsKLSAgICAgICAgc2V0X2hlYWQobmV4dGNodW5rLCBuZXh0c2l6ZSk7Ci0KLSAgICAgICAg
LyogY29uc29saWRhdGUgZm9yd2FyZCAqLwotICAgICAgICBpZiAoIW5leHRpbnVzZSkgewotICAg
ICAgICAgIHVubGluayhuZXh0Y2h1bmssIGJjaywgZndkKTsKLSAgICAgICAgICBzaXplICs9IG5l
eHRzaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICBQbGFjZSB0aGUgY2h1
bmsgaW4gdW5zb3J0ZWQgY2h1bmsgbGlzdC4gQ2h1bmtzIGFyZQotICAgICAgICAgIG5vdCBwbGFj
ZWQgaW50byByZWd1bGFyIGJpbnMgdW50aWwgYWZ0ZXIgdGhleSBoYXZlCi0gICAgICAgICAgYmVl
biBnaXZlbiBvbmUgY2hhbmNlIHRvIGJlIHVzZWQgaW4gbWFsbG9jLgotICAgICAgICAqLwotCi0g
ICAgICAgIGJjayA9IHVuc29ydGVkX2NodW5rcyhhdik7Ci0gICAgICAgIGZ3ZCA9IGJjay0+ZmQ7
Ci0gICAgICAgIHAtPmJrID0gYmNrOwotICAgICAgICBwLT5mZCA9IGZ3ZDsKLSAgICAgICAgYmNr
LT5mZCA9IHA7Ci0gICAgICAgIGZ3ZC0+YmsgPSBwOwotCi0gICAgICAgIHNldF9oZWFkKHAsIHNp
emUgfCBQUkVWX0lOVVNFKTsKLSAgICAgICAgc2V0X2Zvb3QocCwgc2l6ZSk7Ci0gICAgICAgIAot
ICAgICAgICBjaGVja19mcmVlX2NodW5rKHApOwotICAgICAgfQotCi0gICAgICAvKgotICAgICAg
ICAgSWYgdGhlIGNodW5rIGJvcmRlcnMgdGhlIGN1cnJlbnQgaGlnaCBlbmQgb2YgbWVtb3J5LAot
ICAgICAgICAgY29uc29saWRhdGUgaW50byB0b3AKLSAgICAgICovCi0KLSAgICAgIGVsc2Ugewot
ICAgICAgICBzaXplICs9IG5leHRzaXplOwotICAgICAgICBzZXRfaGVhZChwLCBzaXplIHwgUFJF
Vl9JTlVTRSk7Ci0gICAgICAgIGF2LT50b3AgPSBwOwotICAgICAgICBjaGVja19jaHVuayhwKTsK
LSAgICAgIH0KLQotICAgICAgLyoKLSAgICAgICAgSWYgZnJlZWluZyBhIGxhcmdlIHNwYWNlLCBj
b25zb2xpZGF0ZSBwb3NzaWJseS1zdXJyb3VuZGluZwotICAgICAgICBjaHVua3MuIFRoZW4sIGlm
IHRoZSB0b3RhbCB1bnVzZWQgdG9wbW9zdCBtZW1vcnkgZXhjZWVkcyB0cmltCi0gICAgICAgIHRo
cmVzaG9sZCwgYXNrIG1hbGxvY190cmltIHRvIHJlZHVjZSB0b3AuCi0KLSAgICAgICAgVW5sZXNz
IG1heF9mYXN0IGlzIDAsIHdlIGRvbid0IGtub3cgaWYgdGhlcmUgYXJlIGZhc3RiaW5zCi0gICAg
ICAgIGJvcmRlcmluZyB0b3AsIHNvIHdlIGNhbm5vdCB0ZWxsIGZvciBzdXJlIHdoZXRoZXIgdGhy
ZXNob2xkCi0gICAgICAgIGhhcyBiZWVuIHJlYWNoZWQgdW5sZXNzIGZhc3RiaW5zIGFyZSBjb25z
b2xpZGF0ZWQuICBCdXQgd2UKLSAgICAgICAgZG9uJ3Qgd2FudCB0byBjb25zb2xpZGF0ZSBvbiBl
YWNoIGZyZWUuICBBcyBhIGNvbXByb21pc2UsCi0gICAgICAgIGNvbnNvbGlkYXRpb24gaXMgcGVy
Zm9ybWVkIGlmIEZBU1RCSU5fQ09OU09MSURBVElPTl9USFJFU0hPTEQKLSAgICAgICAgaXMgcmVh
Y2hlZC4KLSAgICAgICovCi0KLSAgICAgIGlmICgoQ0hVTktfU0laRV9UKShzaXplKSA+PSBGQVNU
QklOX0NPTlNPTElEQVRJT05fVEhSRVNIT0xEKSB7IAotICAgICAgICBpZiAoaGF2ZV9mYXN0Y2h1
bmtzKGF2KSkgCi0gICAgICAgICAgbWFsbG9jX2NvbnNvbGlkYXRlKGF2KTsKLQotI2lmbmRlZiBN
T1JFQ09SRV9DQU5OT1RfVFJJTSAgICAgICAgCi0gICAgICAgIGlmICgoQ0hVTktfU0laRV9UKShj
aHVua3NpemUoYXYtPnRvcCkpID49IAotICAgICAgICAgICAgKENIVU5LX1NJWkVfVCkoYXYtPnRy
aW1fdGhyZXNob2xkKSkKLSAgICAgICAgICBzWVNUUkltKGF2LT50b3BfcGFkLCBhdik7Ci0jZW5k
aWYKLSAgICAgIH0KLQotICAgIH0KLSAgICAvKgotICAgICAgSWYgdGhlIGNodW5rIHdhcyBhbGxv
Y2F0ZWQgdmlhIG1tYXAsIHJlbGVhc2UgdmlhIG11bm1hcCgpCi0gICAgICBOb3RlIHRoYXQgaWYg
SEFWRV9NTUFQIGlzIGZhbHNlIGJ1dCBjaHVua19pc19tbWFwcGVkIGlzCi0gICAgICB0cnVlLCB0
aGVuIHVzZXIgbXVzdCBoYXZlIG92ZXJ3cml0dGVuIG1lbW9yeS4gVGhlcmUncyBub3RoaW5nCi0g
ICAgICB3ZSBjYW4gZG8gdG8gY2F0Y2ggdGhpcyBlcnJvciB1bmxlc3MgREVCVUcgaXMgc2V0LCBp
biB3aGljaCBjYXNlCi0gICAgICBjaGVja19pbnVzZV9jaHVuayAoYWJvdmUpIHdpbGwgaGF2ZSB0
cmlnZ2VyZWQgZXJyb3IuCi0gICAgKi8KLQotICAgIGVsc2UgewotI2lmIEhBVkVfTU1BUAotICAg
ICAgaW50IHJldDsKLSAgICAgIElOVEVSTkFMX1NJWkVfVCBvZmZzZXQgPSBwLT5wcmV2X3NpemU7
Ci0gICAgICBhdi0+bl9tbWFwcy0tOwotICAgICAgYXYtPm1tYXBwZWRfbWVtIC09IChzaXplICsg
b2Zmc2V0KTsKLSAgICAgIHJldCA9IG11bm1hcCgoY2hhciopcCAtIG9mZnNldCwgc2l6ZSArIG9m
ZnNldCk7Ci0gICAgICAvKiBtdW5tYXAgcmV0dXJucyBub24temVybyBvbiBmYWlsdXJlICovCi0g
ICAgICBhc3NlcnQocmV0ID09IDApOwotI2VuZGlmCi0gICAgfQotICB9Ci19Ci0KLS8qCi0gIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9jX2NvbnNvbGlkYXRlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotICBtYWxsb2NfY29uc29saWRhdGUgaXMgYSBzcGVjaWFsaXplZCB2ZXJz
aW9uIG9mIGZyZWUoKSB0aGF0IHRlYXJzCi0gIGRvd24gY2h1bmtzIGhlbGQgaW4gZmFzdGJpbnMu
ICBGcmVlIGl0c2VsZiBjYW5ub3QgYmUgdXNlZCBmb3IgdGhpcwotICBwdXJwb3NlIHNpbmNlLCBh
bW9uZyBvdGhlciB0aGluZ3MsIGl0IG1pZ2h0IHBsYWNlIGNodW5rcyBiYWNrIG9udG8KLSAgZmFz
dGJpbnMuICBTbywgaW5zdGVhZCwgd2UgbmVlZCB0byB1c2UgYSBtaW5vciB2YXJpYW50IG9mIHRo
ZSBzYW1lCi0gIGNvZGUuCi0gIAotICBBbHNvLCBiZWNhdXNlIHRoaXMgcm91dGluZSBuZWVkcyB0
byBiZSBjYWxsZWQgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaAotICBtYWxsb2MgYW55d2F5LCBpdCB0
dXJucyBvdXQgdG8gYmUgdGhlIHBlcmZlY3QgcGxhY2UgdG8gdHJpZ2dlcgotICBpbml0aWFsaXph
dGlvbiBjb2RlLgotKi8KLQotI2lmIF9fU1REX0MKLXN0YXRpYyB2b2lkIG1hbGxvY19jb25zb2xp
ZGF0ZShtc3RhdGUgYXYpCi0jZWxzZQotc3RhdGljIHZvaWQgbWFsbG9jX2NvbnNvbGlkYXRlKGF2
KSBtc3RhdGUgYXY7Ci0jZW5kaWYKLXsKLSAgbWZhc3RiaW5wdHIqICAgIGZiOyAgICAgICAgICAg
ICAgICAgLyogY3VycmVudCBmYXN0YmluIGJlaW5nIGNvbnNvbGlkYXRlZCAqLwotICBtZmFzdGJp
bnB0ciogICAgbWF4ZmI7ICAgICAgICAgICAgICAvKiBsYXN0IGZhc3RiaW4gKGZvciBsb29wIGNv
bnRyb2wpICovCi0gIG1jaHVua3B0ciAgICAgICBwOyAgICAgICAgICAgICAgICAgIC8qIGN1cnJl
bnQgY2h1bmsgYmVpbmcgY29uc29saWRhdGVkICovCi0gIG1jaHVua3B0ciAgICAgICBuZXh0cDsg
ICAgICAgICAgICAgIC8qIG5leHQgY2h1bmsgdG8gY29uc29saWRhdGUgKi8KLSAgbWNodW5rcHRy
ICAgICAgIHVuc29ydGVkX2JpbjsgICAgICAgLyogYmluIGhlYWRlciAqLwotICBtY2h1bmtwdHIg
ICAgICAgZmlyc3RfdW5zb3J0ZWQ7ICAgICAvKiBjaHVuayB0byBsaW5rIHRvICovCi0KLSAgLyog
VGhlc2UgaGF2ZSBzYW1lIHVzZSBhcyBpbiBmcmVlKCkgKi8KLSAgbWNodW5rcHRyICAgICAgIG5l
eHRjaHVuazsKLSAgSU5URVJOQUxfU0laRV9UIHNpemU7Ci0gIElOVEVSTkFMX1NJWkVfVCBuZXh0
c2l6ZTsKLSAgSU5URVJOQUxfU0laRV9UIHByZXZzaXplOwotICBpbnQgICAgICAgICAgICAgbmV4
dGludXNlOwotICBtY2h1bmtwdHIgICAgICAgYmNrOwotICBtY2h1bmtwdHIgICAgICAgZndkOwot
Ci0gIC8qCi0gICAgSWYgbWF4X2Zhc3QgaXMgMCwgd2Uga25vdyB0aGF0IGF2IGhhc24ndAotICAg
IHlldCBiZWVuIGluaXRpYWxpemVkLCBpbiB3aGljaCBjYXNlIGRvIHNvIGJlbG93Ci0gICovCi0K
LSAgaWYgKGF2LT5tYXhfZmFzdCAhPSAwKSB7Ci0gICAgY2xlYXJfZmFzdGNodW5rcyhhdik7Ci0K
LSAgICB1bnNvcnRlZF9iaW4gPSB1bnNvcnRlZF9jaHVua3MoYXYpOwotCi0gICAgLyoKLSAgICAg
IFJlbW92ZSBlYWNoIGNodW5rIGZyb20gZmFzdCBiaW4gYW5kIGNvbnNvbGlkYXRlIGl0LCBwbGFj
aW5nIGl0Ci0gICAgICB0aGVuIGluIHVuc29ydGVkIGJpbi4gQW1vbmcgb3RoZXIgcmVhc29ucyBm
b3IgZG9pbmcgdGhpcywKLSAgICAgIHBsYWNpbmcgaW4gdW5zb3J0ZWQgYmluIGF2b2lkcyBuZWVk
aW5nIHRvIGNhbGN1bGF0ZSBhY3R1YWwgYmlucwotICAgICAgdW50aWwgbWFsbG9jIGlzIHN1cmUg
dGhhdCBjaHVua3MgYXJlbid0IGltbWVkaWF0ZWx5IGdvaW5nIHRvIGJlCi0gICAgICByZXVzZWQg
YW55d2F5LgotICAgICovCi0gICAgCi0gICAgbWF4ZmIgPSAmKGF2LT5mYXN0Ymluc1tmYXN0Ymlu
X2luZGV4KGF2LT5tYXhfZmFzdCldKTsKLSAgICBmYiA9ICYoYXYtPmZhc3RiaW5zWzBdKTsKLSAg
ICBkbyB7Ci0gICAgICBpZiAoIChwID0gKmZiKSAhPSAwKSB7Ci0gICAgICAgICpmYiA9IDA7Ci0g
ICAgICAgIAotICAgICAgICBkbyB7Ci0gICAgICAgICAgY2hlY2tfaW51c2VfY2h1bmsocCk7Ci0g
ICAgICAgICAgbmV4dHAgPSBwLT5mZDsKLSAgICAgICAgICAKLSAgICAgICAgICAvKiBTbGlnaHRs
eSBzdHJlYW1saW5lZCB2ZXJzaW9uIG9mIGNvbnNvbGlkYXRpb24gY29kZSBpbiBmcmVlKCkgKi8K
LSAgICAgICAgICBzaXplID0gcC0+c2l6ZSAmIH5QUkVWX0lOVVNFOwotICAgICAgICAgIG5leHRj
aHVuayA9IGNodW5rX2F0X29mZnNldChwLCBzaXplKTsKLSAgICAgICAgICBuZXh0c2l6ZSA9IGNo
dW5rc2l6ZShuZXh0Y2h1bmspOwotICAgICAgICAgIAotICAgICAgICAgIGlmICghcHJldl9pbnVz
ZShwKSkgewotICAgICAgICAgICAgcHJldnNpemUgPSBwLT5wcmV2X3NpemU7Ci0gICAgICAgICAg
ICBzaXplICs9IHByZXZzaXplOwotICAgICAgICAgICAgcCA9IGNodW5rX2F0X29mZnNldChwLCAt
KChsb25nKSBwcmV2c2l6ZSkpOwotICAgICAgICAgICAgdW5saW5rKHAsIGJjaywgZndkKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgaWYgKG5leHRjaHVuayAhPSBhdi0+dG9w
KSB7Ci0gICAgICAgICAgICBuZXh0aW51c2UgPSBpbnVzZV9iaXRfYXRfb2Zmc2V0KG5leHRjaHVu
aywgbmV4dHNpemUpOwotICAgICAgICAgICAgc2V0X2hlYWQobmV4dGNodW5rLCBuZXh0c2l6ZSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbmV4dGludXNlKSB7Ci0gICAgICAgICAg
ICAgIHNpemUgKz0gbmV4dHNpemU7Ci0gICAgICAgICAgICAgIHVubGluayhuZXh0Y2h1bmssIGJj
aywgZndkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmlyc3Rf
dW5zb3J0ZWQgPSB1bnNvcnRlZF9iaW4tPmZkOwotICAgICAgICAgICAgdW5zb3J0ZWRfYmluLT5m
ZCA9IHA7Ci0gICAgICAgICAgICBmaXJzdF91bnNvcnRlZC0+YmsgPSBwOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzZXRfaGVhZChwLCBzaXplIHwgUFJFVl9JTlVTRSk7Ci0gICAgICAgICAg
ICBwLT5iayA9IHVuc29ydGVkX2JpbjsKLSAgICAgICAgICAgIHAtPmZkID0gZmlyc3RfdW5zb3J0
ZWQ7Ci0gICAgICAgICAgICBzZXRfZm9vdChwLCBzaXplKTsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgCi0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzaXplICs9IG5leHRzaXplOwotICAg
ICAgICAgICAgc2V0X2hlYWQocCwgc2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgICAgICAgYXYt
PnRvcCA9IHA7Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICB9IHdoaWxlICggKHAg
PSBuZXh0cCkgIT0gMCk7Ci0gICAgICAgIAotICAgICAgfQotICAgIH0gd2hpbGUgKGZiKysgIT0g
bWF4ZmIpOwotICB9Ci0gIGVsc2UgewotICAgIG1hbGxvY19pbml0X3N0YXRlKGF2KTsKLSAgICBj
aGVja19tYWxsb2Nfc3RhdGUoKTsKLSAgfQotfQotCi0vKgotICAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gcmVhbGxvYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0K
LQotI2lmIF9fU1REX0MKLVZvaWRfdCogckVBTExPYyhWb2lkX3QqIG9sZG1lbSwgc2l6ZV90IGJ5
dGVzKQotI2Vsc2UKLVZvaWRfdCogckVBTExPYyhvbGRtZW0sIGJ5dGVzKSBWb2lkX3QqIG9sZG1l
bTsgc2l6ZV90IGJ5dGVzOwotI2VuZGlmCi17Ci0gIG1zdGF0ZSBhdiA9IGdldF9tYWxsb2Nfc3Rh
dGUoKTsKLQotICBJTlRFUk5BTF9TSVpFX1QgIG5iOyAgICAgICAgICAgICAgLyogcGFkZGVkIHJl
cXVlc3Qgc2l6ZSAqLwotCi0gIG1jaHVua3B0ciAgICAgICAgb2xkcDsgICAgICAgICAgICAvKiBj
aHVuayBjb3JyZXNwb25kaW5nIHRvIG9sZG1lbSAqLwotICBJTlRFUk5BTF9TSVpFX1QgIG9sZHNp
emU7ICAgICAgICAgLyogaXRzIHNpemUgKi8KLQotICBtY2h1bmtwdHIgICAgICAgIG5ld3A7ICAg
ICAgICAgICAgLyogY2h1bmsgdG8gcmV0dXJuICovCi0gIElOVEVSTkFMX1NJWkVfVCAgbmV3c2l6
ZTsgICAgICAgICAvKiBpdHMgc2l6ZSAqLwotICBWb2lkX3QqICAgICAgICAgIG5ld21lbTsgICAg
ICAgICAgLyogY29ycmVzcG9uZGluZyB1c2VyIG1lbSAqLwotCi0gIG1jaHVua3B0ciAgICAgICAg
bmV4dDsgICAgICAgICAgICAvKiBuZXh0IGNvbnRpZ3VvdXMgY2h1bmsgYWZ0ZXIgb2xkcCAqLwot
Ci0gIG1jaHVua3B0ciAgICAgICAgcmVtYWluZGVyOyAgICAgICAvKiBleHRyYSBzcGFjZSBhdCBl
bmQgb2YgbmV3cCAqLwotICBDSFVOS19TSVpFX1QgICAgIHJlbWFpbmRlcl9zaXplOyAgLyogaXRz
IHNpemUgKi8KLQotICBtY2h1bmtwdHIgICAgICAgIGJjazsgICAgICAgICAgICAgLyogbWlzYyB0
ZW1wIGZvciBsaW5raW5nICovCi0gIG1jaHVua3B0ciAgICAgICAgZndkOyAgICAgICAgICAgICAv
KiBtaXNjIHRlbXAgZm9yIGxpbmtpbmcgKi8KLQotICBDSFVOS19TSVpFX1QgICAgIGNvcHlzaXpl
OyAgICAgICAgLyogYnl0ZXMgdG8gY29weSAqLwotICB1bnNpZ25lZCBpbnQgICAgIG5jb3BpZXM7
ICAgICAgICAgLyogSU5URVJOQUxfU0laRV9UIHdvcmRzIHRvIGNvcHkgKi8KLSAgSU5URVJOQUxf
U0laRV9UKiBzOyAgICAgICAgICAgICAgIC8qIGNvcHkgc291cmNlICovIAotICBJTlRFUk5BTF9T
SVpFX1QqIGQ7ICAgICAgICAgICAgICAgLyogY29weSBkZXN0aW5hdGlvbiAqLwotCi0KLSNpZmRl
ZiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMKLSAgaWYgKGJ5dGVzID09IDApIHsKLSAgICBmUkVl
KG9sZG1lbSk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSNlbmRpZgotCi0gIC8qIHJlYWxsb2Mgb2Yg
bnVsbCBpcyBzdXBwb3NlZCB0byBiZSBzYW1lIGFzIG1hbGxvYyAqLwotICBpZiAob2xkbWVtID09
IDApIHJldHVybiBtQUxMT2MoYnl0ZXMpOwotCi0gIGNoZWNrZWRfcmVxdWVzdDJzaXplKGJ5dGVz
LCBuYik7Ci0KLSAgb2xkcCAgICA9IG1lbTJjaHVuayhvbGRtZW0pOwotICBvbGRzaXplID0gY2h1
bmtzaXplKG9sZHApOwotCi0gIGNoZWNrX2ludXNlX2NodW5rKG9sZHApOwotCi0gIGlmICghY2h1
bmtfaXNfbW1hcHBlZChvbGRwKSkgewotCi0gICAgaWYgKChDSFVOS19TSVpFX1QpKG9sZHNpemUp
ID49IChDSFVOS19TSVpFX1QpKG5iKSkgewotICAgICAgLyogYWxyZWFkeSBiaWcgZW5vdWdoOyBz
cGxpdCBiZWxvdyAqLwotICAgICAgbmV3cCA9IG9sZHA7Ci0gICAgICBuZXdzaXplID0gb2xkc2l6
ZTsKLSAgICB9Ci0KLSAgICBlbHNlIHsKLSAgICAgIG5leHQgPSBjaHVua19hdF9vZmZzZXQob2xk
cCwgb2xkc2l6ZSk7Ci0KLSAgICAgIC8qIFRyeSB0byBleHBhbmQgZm9yd2FyZCBpbnRvIHRvcCAq
LwotICAgICAgaWYgKG5leHQgPT0gYXYtPnRvcCAmJgotICAgICAgICAgIChDSFVOS19TSVpFX1Qp
KG5ld3NpemUgPSBvbGRzaXplICsgY2h1bmtzaXplKG5leHQpKSA+PQotICAgICAgICAgIChDSFVO
S19TSVpFX1QpKG5iICsgTUlOU0laRSkpIHsKLSAgICAgICAgc2V0X2hlYWRfc2l6ZShvbGRwLCBu
Yik7Ci0gICAgICAgIGF2LT50b3AgPSBjaHVua19hdF9vZmZzZXQob2xkcCwgbmIpOwotICAgICAg
ICBzZXRfaGVhZChhdi0+dG9wLCAobmV3c2l6ZSAtIG5iKSB8IFBSRVZfSU5VU0UpOwotICAgICAg
ICByZXR1cm4gY2h1bmsybWVtKG9sZHApOwotICAgICAgfQotICAgICAgCi0gICAgICAvKiBUcnkg
dG8gZXhwYW5kIGZvcndhcmQgaW50byBuZXh0IGNodW5rOyAgc3BsaXQgb2ZmIHJlbWFpbmRlciBi
ZWxvdyAqLwotICAgICAgZWxzZSBpZiAobmV4dCAhPSBhdi0+dG9wICYmIAotICAgICAgICAgICAg
ICAgIWludXNlKG5leHQpICYmCi0gICAgICAgICAgICAgICAoQ0hVTktfU0laRV9UKShuZXdzaXpl
ID0gb2xkc2l6ZSArIGNodW5rc2l6ZShuZXh0KSkgPj0KLSAgICAgICAgICAgICAgIChDSFVOS19T
SVpFX1QpKG5iKSkgewotICAgICAgICBuZXdwID0gb2xkcDsKLSAgICAgICAgdW5saW5rKG5leHQs
IGJjaywgZndkKTsKLSAgICAgIH0KLQotICAgICAgLyogYWxsb2NhdGUsIGNvcHksIGZyZWUgKi8K
LSAgICAgIGVsc2UgewotICAgICAgICBuZXdtZW0gPSBtQUxMT2MobmIgLSBNQUxMT0NfQUxJR05f
TUFTSyk7Ci0gICAgICAgIGlmIChuZXdtZW0gPT0gMCkKLSAgICAgICAgICByZXR1cm4gMDsgLyog
cHJvcGFnYXRlIGZhaWx1cmUgKi8KLSAgICAgIAotICAgICAgICBuZXdwID0gbWVtMmNodW5rKG5l
d21lbSk7Ci0gICAgICAgIG5ld3NpemUgPSBjaHVua3NpemUobmV3cCk7Ci0gICAgICAgIAotICAg
ICAgICAvKgotICAgICAgICAgIEF2b2lkIGNvcHkgaWYgbmV3cCBpcyBuZXh0IGNodW5rIGFmdGVy
IG9sZHAuCi0gICAgICAgICovCi0gICAgICAgIGlmIChuZXdwID09IG5leHQpIHsKLSAgICAgICAg
ICBuZXdzaXplICs9IG9sZHNpemU7Ci0gICAgICAgICAgbmV3cCA9IG9sZHA7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgLyoKLSAgICAgICAgICAgIFVucm9sbCBjb3B5IG9m
IDw9IDM2IGJ5dGVzICg3MiBpZiA4Ynl0ZSBzaXplcykKLSAgICAgICAgICAgIFdlIGtub3cgdGhh
dCBjb250ZW50cyBoYXZlIGFuIG9kZCBudW1iZXIgb2YKLSAgICAgICAgICAgIElOVEVSTkFMX1NJ
WkVfVC1zaXplZCB3b3JkczsgbWluaW1hbGx5IDMuCi0gICAgICAgICAgKi8KLSAgICAgICAgICAK
LSAgICAgICAgICBjb3B5c2l6ZSA9IG9sZHNpemUgLSBTSVpFX1NaOwotICAgICAgICAgIHMgPSAo
SU5URVJOQUxfU0laRV9UKikob2xkbWVtKTsKLSAgICAgICAgICBkID0gKElOVEVSTkFMX1NJWkVf
VCopKG5ld21lbSk7Ci0gICAgICAgICAgbmNvcGllcyA9IGNvcHlzaXplIC8gc2l6ZW9mKElOVEVS
TkFMX1NJWkVfVCk7Ci0gICAgICAgICAgYXNzZXJ0KG5jb3BpZXMgPj0gMyk7Ci0gICAgICAgICAg
Ci0gICAgICAgICAgaWYgKG5jb3BpZXMgPiA5KQotICAgICAgICAgICAgTUFMTE9DX0NPUFkoZCwg
cywgY29weXNpemUpOwotICAgICAgICAgIAotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
KihkKzApID0gKihzKzApOwotICAgICAgICAgICAgKihkKzEpID0gKihzKzEpOwotICAgICAgICAg
ICAgKihkKzIpID0gKihzKzIpOwotICAgICAgICAgICAgaWYgKG5jb3BpZXMgPiA0KSB7Ci0gICAg
ICAgICAgICAgICooZCszKSA9ICoocyszKTsKLSAgICAgICAgICAgICAgKihkKzQpID0gKihzKzQp
OwotICAgICAgICAgICAgICBpZiAobmNvcGllcyA+IDYpIHsKLSAgICAgICAgICAgICAgICAqKGQr
NSkgPSAqKHMrNSk7Ci0gICAgICAgICAgICAgICAgKihkKzYpID0gKihzKzYpOwotICAgICAgICAg
ICAgICAgIGlmIChuY29waWVzID4gOCkgewotICAgICAgICAgICAgICAgICAgKihkKzcpID0gKihz
KzcpOwotICAgICAgICAgICAgICAgICAgKihkKzgpID0gKihzKzgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAg
ICAKLSAgICAgICAgICBmUkVlKG9sZG1lbSk7Ci0gICAgICAgICAgY2hlY2tfaW51c2VfY2h1bmso
bmV3cCk7Ci0gICAgICAgICAgcmV0dXJuIGNodW5rMm1lbShuZXdwKTsKLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0KLQotICAgIC8qIElmIHBvc3NpYmxlLCBmcmVlIGV4dHJhIHNwYWNlIGluIG9s
ZCBvciBleHRlbmRlZCBjaHVuayAqLwotCi0gICAgYXNzZXJ0KChDSFVOS19TSVpFX1QpKG5ld3Np
emUpID49IChDSFVOS19TSVpFX1QpKG5iKSk7Ci0KLSAgICByZW1haW5kZXJfc2l6ZSA9IG5ld3Np
emUgLSBuYjsKLQotICAgIGlmIChyZW1haW5kZXJfc2l6ZSA8IE1JTlNJWkUpIHsgLyogbm90IGVu
b3VnaCBleHRyYSB0byBzcGxpdCBvZmYgKi8KLSAgICAgIHNldF9oZWFkX3NpemUobmV3cCwgbmV3
c2l6ZSk7Ci0gICAgICBzZXRfaW51c2VfYml0X2F0X29mZnNldChuZXdwLCBuZXdzaXplKTsKLSAg
ICB9Ci0gICAgZWxzZSB7IC8qIHNwbGl0IHJlbWFpbmRlciAqLwotICAgICAgcmVtYWluZGVyID0g
Y2h1bmtfYXRfb2Zmc2V0KG5ld3AsIG5iKTsKLSAgICAgIHNldF9oZWFkX3NpemUobmV3cCwgbmIp
OwotICAgICAgc2V0X2hlYWQocmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSB8IFBSRVZfSU5VU0Up
OwotICAgICAgLyogTWFyayByZW1haW5kZXIgYXMgaW51c2Ugc28gZnJlZSgpIHdvbid0IGNvbXBs
YWluICovCi0gICAgICBzZXRfaW51c2VfYml0X2F0X29mZnNldChyZW1haW5kZXIsIHJlbWFpbmRl
cl9zaXplKTsKLSAgICAgIGZSRWUoY2h1bmsybWVtKHJlbWFpbmRlcikpOyAKLSAgICB9Ci0KLSAg
ICBjaGVja19pbnVzZV9jaHVuayhuZXdwKTsKLSAgICByZXR1cm4gY2h1bmsybWVtKG5ld3ApOwot
ICB9Ci0KLSAgLyoKLSAgICBIYW5kbGUgbW1hcCBjYXNlcwotICAqLwotCi0gIGVsc2UgewotI2lm
IEhBVkVfTU1BUAotCi0jaWYgSEFWRV9NUkVNQVAKLSAgICBJTlRFUk5BTF9TSVpFX1Qgb2Zmc2V0
ID0gb2xkcC0+cHJldl9zaXplOwotICAgIHNpemVfdCBwYWdlbWFzayA9IGF2LT5wYWdlc2l6ZSAt
IDE7Ci0gICAgY2hhciAqY3A7Ci0gICAgQ0hVTktfU0laRV9UICBzdW07Ci0gICAgCi0gICAgLyog
Tm90ZSB0aGUgZXh0cmEgU0laRV9TWiBvdmVyaGVhZCAqLwotICAgIG5ld3NpemUgPSAobmIgKyBv
ZmZzZXQgKyBTSVpFX1NaICsgcGFnZW1hc2spICYgfnBhZ2VtYXNrOwotCi0gICAgLyogZG9uJ3Qg
bmVlZCB0byByZW1hcCBpZiBzdGlsbCB3aXRoaW4gc2FtZSBwYWdlICovCi0gICAgaWYgKG9sZHNp
emUgPT0gbmV3c2l6ZSAtIG9mZnNldCkgCi0gICAgICByZXR1cm4gb2xkbWVtOwotCi0gICAgY3Ag
PSAoY2hhciopbXJlbWFwKChjaGFyKilvbGRwIC0gb2Zmc2V0LCBvbGRzaXplICsgb2Zmc2V0LCBu
ZXdzaXplLCAxKTsKLSAgICAKLSAgICBpZiAoY3AgIT0gKGNoYXIqKU1PUkVDT1JFX0ZBSUxVUkUp
IHsKLQotICAgICAgbmV3cCA9IChtY2h1bmtwdHIpKGNwICsgb2Zmc2V0KTsKLSAgICAgIHNldF9o
ZWFkKG5ld3AsIChuZXdzaXplIC0gb2Zmc2V0KXxJU19NTUFQUEVEKTsKLSAgICAgIAotICAgICAg
YXNzZXJ0KGFsaWduZWRfT0soY2h1bmsybWVtKG5ld3ApKSk7Ci0gICAgICBhc3NlcnQoKG5ld3At
PnByZXZfc2l6ZSA9PSBvZmZzZXQpKTsKLSAgICAgIAotICAgICAgLyogdXBkYXRlIHN0YXRpc3Rp
Y3MgKi8KLSAgICAgIHN1bSA9IGF2LT5tbWFwcGVkX21lbSArPSBuZXdzaXplIC0gb2xkc2l6ZTsK
LSAgICAgIGlmIChzdW0gPiAoQ0hVTktfU0laRV9UKShhdi0+bWF4X21tYXBwZWRfbWVtKSkgCi0g
ICAgICAgIGF2LT5tYXhfbW1hcHBlZF9tZW0gPSBzdW07Ci0gICAgICBzdW0gKz0gYXYtPnNicmtl
ZF9tZW07Ci0gICAgICBpZiAoc3VtID4gKENIVU5LX1NJWkVfVCkoYXYtPm1heF90b3RhbF9tZW0p
KSAKLSAgICAgICAgYXYtPm1heF90b3RhbF9tZW0gPSBzdW07Ci0gICAgICAKLSAgICAgIHJldHVy
biBjaHVuazJtZW0obmV3cCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvKiBOb3RlIHRoZSBleHRy
YSBTSVpFX1NaIG92ZXJoZWFkLiAqLwotICAgIGlmICgoQ0hVTktfU0laRV9UKShvbGRzaXplKSA+
PSAoQ0hVTktfU0laRV9UKShuYiArIFNJWkVfU1opKSAKLSAgICAgIG5ld21lbSA9IG9sZG1lbTsg
LyogZG8gbm90aGluZyAqLwotICAgIGVsc2UgewotICAgICAgLyogTXVzdCBhbGxvYywgY29weSwg
ZnJlZS4gKi8KLSAgICAgIG5ld21lbSA9IG1BTExPYyhuYiAtIE1BTExPQ19BTElHTl9NQVNLKTsK
LSAgICAgIGlmIChuZXdtZW0gIT0gMCkgewotICAgICAgICBNQUxMT0NfQ09QWShuZXdtZW0sIG9s
ZG1lbSwgb2xkc2l6ZSAtIDIqU0laRV9TWik7Ci0gICAgICAgIGZSRWUob2xkbWVtKTsKLSAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIG5ld21lbTsKLQotI2Vsc2UgCi0gICAgLyogSWYgIUhBVkVf
TU1BUCwgYnV0IGNodW5rX2lzX21tYXBwZWQsIHVzZXIgbXVzdCBoYXZlIG92ZXJ3cml0dGVuIG1l
bSAqLwotICAgIGNoZWNrX21hbGxvY19zdGF0ZSgpOwotICAgIE1BTExPQ19GQUlMVVJFX0FDVElP
TjsKLSAgICByZXR1cm4gMDsKLSNlbmRpZgotICB9Ci19Ci0KLS8qCi0gIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBtZW1hbGlnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSovCi0KLSNpZiBfX1NURF9DCi1Wb2lkX3QqIG1FTUFMSUduKHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCBieXRlcykKLSNlbHNlCi1Wb2lkX3QqIG1FTUFMSUduKGFsaWdubWVudCwgYnl0ZXMpIHNp
emVfdCBhbGlnbm1lbnQ7IHNpemVfdCBieXRlczsKLSNlbmRpZgotewotICBJTlRFUk5BTF9TSVpF
X1QgbmI7ICAgICAgICAgICAgIC8qIHBhZGRlZCAgcmVxdWVzdCBzaXplICovCi0gIGNoYXIqICAg
ICAgICAgICBtOyAgICAgICAgICAgICAgLyogbWVtb3J5IHJldHVybmVkIGJ5IG1hbGxvYyBjYWxs
ICovCi0gIG1jaHVua3B0ciAgICAgICBwOyAgICAgICAgICAgICAgLyogY29ycmVzcG9uZGluZyBj
aHVuayAqLwotICBjaGFyKiAgICAgICAgICAgYnJrOyAgICAgICAgICAgIC8qIGFsaWdubWVudCBw
b2ludCB3aXRoaW4gcCAqLwotICBtY2h1bmtwdHIgICAgICAgbmV3cDsgICAgICAgICAgIC8qIGNo
dW5rIHRvIHJldHVybiAqLwotICBJTlRFUk5BTF9TSVpFX1QgbmV3c2l6ZTsgICAgICAgIC8qIGl0
cyBzaXplICovCi0gIElOVEVSTkFMX1NJWkVfVCBsZWFkc2l6ZTsgICAgICAgLyogbGVhZGluZyBz
cGFjZSBiZWZvcmUgYWxpZ25tZW50IHBvaW50ICovCi0gIG1jaHVua3B0ciAgICAgICByZW1haW5k
ZXI7ICAgICAgLyogc3BhcmUgcm9vbSBhdCBlbmQgdG8gc3BsaXQgb2ZmICovCi0gIENIVU5LX1NJ
WkVfVCAgICByZW1haW5kZXJfc2l6ZTsgLyogaXRzIHNpemUgKi8KLSAgSU5URVJOQUxfU0laRV9U
IHNpemU7Ci0KLSAgLyogSWYgbmVlZCBsZXNzIGFsaWdubWVudCB0aGFuIHdlIGdpdmUgYW55d2F5
LCBqdXN0IHJlbGF5IHRvIG1hbGxvYyAqLwotCi0gIGlmIChhbGlnbm1lbnQgPD0gTUFMTE9DX0FM
SUdOTUVOVCkgcmV0dXJuIG1BTExPYyhieXRlcyk7Ci0KLSAgLyogT3RoZXJ3aXNlLCBlbnN1cmUg
dGhhdCBpdCBpcyBhdCBsZWFzdCBhIG1pbmltdW0gY2h1bmsgc2l6ZSAqLwotCi0gIGlmIChhbGln
bm1lbnQgPCAgTUlOU0laRSkgYWxpZ25tZW50ID0gTUlOU0laRTsKLQotICAvKiBNYWtlIHN1cmUg
YWxpZ25tZW50IGlzIHBvd2VyIG9mIDIgKGluIGNhc2UgTUlOU0laRSBpcyBub3QpLiAgKi8KLSAg
aWYgKChhbGlnbm1lbnQgJiAoYWxpZ25tZW50IC0gMSkpICE9IDApIHsKLSAgICBzaXplX3QgYSA9
IE1BTExPQ19BTElHTk1FTlQgKiAyOwotICAgIHdoaWxlICgoQ0hVTktfU0laRV9UKWEgPCAoQ0hV
TktfU0laRV9UKWFsaWdubWVudCkgYSA8PD0gMTsKLSAgICBhbGlnbm1lbnQgPSBhOwotICB9Ci0K
LSAgY2hlY2tlZF9yZXF1ZXN0MnNpemUoYnl0ZXMsIG5iKTsKLQotICAvKgotICAgIFN0cmF0ZWd5
OiBmaW5kIGEgc3BvdCB3aXRoaW4gdGhhdCBjaHVuayB0aGF0IG1lZXRzIHRoZSBhbGlnbm1lbnQK
LSAgICByZXF1ZXN0LCBhbmQgdGhlbiBwb3NzaWJseSBmcmVlIHRoZSBsZWFkaW5nIGFuZCB0cmFp
bGluZyBzcGFjZS4KLSAgKi8KLQotCi0gIC8qIENhbGwgbWFsbG9jIHdpdGggd29yc3QgY2FzZSBw
YWRkaW5nIHRvIGhpdCBhbGlnbm1lbnQuICovCi0KLSAgbSAgPSAoY2hhciopKG1BTExPYyhuYiAr
IGFsaWdubWVudCArIE1JTlNJWkUpKTsKLQotICBpZiAobSA9PSAwKSByZXR1cm4gMDsgLyogcHJv
cGFnYXRlIGZhaWx1cmUgKi8KLQotICBwID0gbWVtMmNodW5rKG0pOwotCi0gIGlmICgoKChQVFJf
VUlOVCkobSkpICUgYWxpZ25tZW50KSAhPSAwKSB7IC8qIG1pc2FsaWduZWQgKi8KLQotICAgIC8q
Ci0gICAgICBGaW5kIGFuIGFsaWduZWQgc3BvdCBpbnNpZGUgY2h1bmsuICBTaW5jZSB3ZSBuZWVk
IHRvIGdpdmUgYmFjawotICAgICAgbGVhZGluZyBzcGFjZSBpbiBhIGNodW5rIG9mIGF0IGxlYXN0
IE1JTlNJWkUsIGlmIHRoZSBmaXJzdAotICAgICAgY2FsY3VsYXRpb24gcGxhY2VzIHVzIGF0IGEg
c3BvdCB3aXRoIGxlc3MgdGhhbiBNSU5TSVpFIGxlYWRlciwKLSAgICAgIHdlIGNhbiBtb3ZlIHRv
IHRoZSBuZXh0IGFsaWduZWQgc3BvdCAtLSB3ZSd2ZSBhbGxvY2F0ZWQgZW5vdWdoCi0gICAgICB0
b3RhbCByb29tIHNvIHRoYXQgdGhpcyBpcyBhbHdheXMgcG9zc2libGUuCi0gICAgKi8KLQotICAg
IGJyayA9IChjaGFyKiltZW0yY2h1bmsoKFBUUl9VSU5UKSgoKFBUUl9VSU5UKShtICsgYWxpZ25t
ZW50IC0gMSkpICYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oKHNpZ25lZCBsb25nKSBh
bGlnbm1lbnQpKSk7Ci0gICAgaWYgKChDSFVOS19TSVpFX1QpKGJyayAtIChjaGFyKikocCkpIDwg
TUlOU0laRSkKLSAgICAgIGJyayArPSBhbGlnbm1lbnQ7Ci0KLSAgICBuZXdwID0gKG1jaHVua3B0
cilicms7Ci0gICAgbGVhZHNpemUgPSBicmsgLSAoY2hhciopKHApOwotICAgIG5ld3NpemUgPSBj
aHVua3NpemUocCkgLSBsZWFkc2l6ZTsKLQotICAgIC8qIEZvciBtbWFwcGVkIGNodW5rcywganVz
dCBhZGp1c3Qgb2Zmc2V0ICovCi0gICAgaWYgKGNodW5rX2lzX21tYXBwZWQocCkpIHsKLSAgICAg
IG5ld3AtPnByZXZfc2l6ZSA9IHAtPnByZXZfc2l6ZSArIGxlYWRzaXplOwotICAgICAgc2V0X2hl
YWQobmV3cCwgbmV3c2l6ZXxJU19NTUFQUEVEKTsKLSAgICAgIHJldHVybiBjaHVuazJtZW0obmV3
cCk7Ci0gICAgfQotCi0gICAgLyogT3RoZXJ3aXNlLCBnaXZlIGJhY2sgbGVhZGVyLCB1c2UgdGhl
IHJlc3QgKi8KLSAgICBzZXRfaGVhZChuZXdwLCBuZXdzaXplIHwgUFJFVl9JTlVTRSk7Ci0gICAg
c2V0X2ludXNlX2JpdF9hdF9vZmZzZXQobmV3cCwgbmV3c2l6ZSk7Ci0gICAgc2V0X2hlYWRfc2l6
ZShwLCBsZWFkc2l6ZSk7Ci0gICAgZlJFZShjaHVuazJtZW0ocCkpOwotICAgIHAgPSBuZXdwOwot
Ci0gICAgYXNzZXJ0IChuZXdzaXplID49IG5iICYmCi0gICAgICAgICAgICAoKChQVFJfVUlOVCko
Y2h1bmsybWVtKHApKSkgJSBhbGlnbm1lbnQpID09IDApOwotICB9Ci0KLSAgLyogQWxzbyBnaXZl
IGJhY2sgc3BhcmUgcm9vbSBhdCB0aGUgZW5kICovCi0gIGlmICghY2h1bmtfaXNfbW1hcHBlZChw
KSkgewotICAgIHNpemUgPSBjaHVua3NpemUocCk7Ci0gICAgaWYgKChDSFVOS19TSVpFX1QpKHNp
emUpID4gKENIVU5LX1NJWkVfVCkobmIgKyBNSU5TSVpFKSkgewotICAgICAgcmVtYWluZGVyX3Np
emUgPSBzaXplIC0gbmI7Ci0gICAgICByZW1haW5kZXIgPSBjaHVua19hdF9vZmZzZXQocCwgbmIp
OwotICAgICAgc2V0X2hlYWQocmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSB8IFBSRVZfSU5VU0Up
OwotICAgICAgc2V0X2hlYWRfc2l6ZShwLCBuYik7Ci0gICAgICBmUkVlKGNodW5rMm1lbShyZW1h
aW5kZXIpKTsKLSAgICB9Ci0gIH0KLQotICBjaGVja19pbnVzZV9jaHVuayhwKTsKLSAgcmV0dXJu
IGNodW5rMm1lbShwKTsKLX0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IGNhbGxvYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpZiBfX1NURF9D
Ci1Wb2lkX3QqIGNBTExPYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkKLSNl
bHNlCi1Wb2lkX3QqIGNBTExPYyhuX2VsZW1lbnRzLCBlbGVtX3NpemUpIHNpemVfdCBuX2VsZW1l
bnRzOyBzaXplX3QgZWxlbV9zaXplOwotI2VuZGlmCi17Ci0gIG1jaHVua3B0ciBwOwotICBDSFVO
S19TSVpFX1QgIGNsZWFyc2l6ZTsKLSAgQ0hVTktfU0laRV9UICBuY2xlYXJzOwotICBJTlRFUk5B
TF9TSVpFX1QqIGQ7Ci0KLSAgVm9pZF90KiBtZW0gPSBtQUxMT2Mobl9lbGVtZW50cyAqIGVsZW1f
c2l6ZSk7Ci0KLSAgaWYgKG1lbSAhPSAwKSB7Ci0gICAgcCA9IG1lbTJjaHVuayhtZW0pOwotCi0g
ICAgaWYgKCFjaHVua19pc19tbWFwcGVkKHApKQotICAgIHsgIAotICAgICAgLyoKLSAgICAgICAg
VW5yb2xsIGNsZWFyIG9mIDw9IDM2IGJ5dGVzICg3MiBpZiA4Ynl0ZSBzaXplcykKLSAgICAgICAg
V2Uga25vdyB0aGF0IGNvbnRlbnRzIGhhdmUgYW4gb2RkIG51bWJlciBvZgotICAgICAgICBJTlRF
Uk5BTF9TSVpFX1Qtc2l6ZWQgd29yZHM7IG1pbmltYWxseSAzLgotICAgICAgKi8KLQotICAgICAg
ZCA9IChJTlRFUk5BTF9TSVpFX1QqKW1lbTsKLSAgICAgIGNsZWFyc2l6ZSA9IGNodW5rc2l6ZShw
KSAtIFNJWkVfU1o7Ci0gICAgICBuY2xlYXJzID0gY2xlYXJzaXplIC8gc2l6ZW9mKElOVEVSTkFM
X1NJWkVfVCk7Ci0gICAgICBhc3NlcnQobmNsZWFycyA+PSAzKTsKLQotICAgICAgaWYgKG5jbGVh
cnMgPiA5KQotICAgICAgICBNQUxMT0NfWkVSTyhkLCBjbGVhcnNpemUpOwotCi0gICAgICBlbHNl
IHsKLSAgICAgICAgKihkKzApID0gMDsKLSAgICAgICAgKihkKzEpID0gMDsKLSAgICAgICAgKihk
KzIpID0gMDsKLSAgICAgICAgaWYgKG5jbGVhcnMgPiA0KSB7Ci0gICAgICAgICAgKihkKzMpID0g
MDsKLSAgICAgICAgICAqKGQrNCkgPSAwOwotICAgICAgICAgIGlmIChuY2xlYXJzID4gNikgewot
ICAgICAgICAgICAgKihkKzUpID0gMDsKLSAgICAgICAgICAgICooZCs2KSA9IDA7Ci0gICAgICAg
ICAgICBpZiAobmNsZWFycyA+IDgpIHsKLSAgICAgICAgICAgICAgKihkKzcpID0gMDsKLSAgICAg
ICAgICAgICAgKihkKzgpID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9Ci0jaWYgISBNTUFQX0NMRUFSUwotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICBkID0gKElOVEVSTkFMX1NJWkVfVCopbWVtOwotICAgICAgLyoKLSAgICAgICAgTm90ZSB0
aGUgYWRkaXRpb25hbCBTSVpFX1NaCi0gICAgICAqLwotICAgICAgY2xlYXJzaXplID0gY2h1bmtz
aXplKHApIC0gMipTSVpFX1NaOwotICAgICAgTUFMTE9DX1pFUk8oZCwgY2xlYXJzaXplKTsKLSAg
ICB9Ci0jZW5kaWYKLSAgfQotICByZXR1cm4gbWVtOwotfQotCi0vKgotICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gY2ZyZWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0q
LwotCi0jaWYgX19TVERfQwotdm9pZCBjRlJFZShWb2lkX3QgKm1lbSkKLSNlbHNlCi12b2lkIGNG
UkVlKG1lbSkgVm9pZF90ICptZW07Ci0jZW5kaWYKLXsKLSAgZlJFZShtZW0pOwotfQotCi0vKgot
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGluZGVwZW5kZW50X2NhbGxvYyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWYgX19TVERfQwotVm9pZF90KiogaUNBTExPYyhzaXpl
X3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSwgVm9pZF90KiBjaHVua3NbXSkKLSNlbHNl
Ci1Wb2lkX3QqKiBpQ0FMTE9jKG5fZWxlbWVudHMsIGVsZW1fc2l6ZSwgY2h1bmtzKSBzaXplX3Qg
bl9lbGVtZW50czsgc2l6ZV90IGVsZW1fc2l6ZTsgVm9pZF90KiBjaHVua3NbXTsKLSNlbmRpZgot
ewotICBzaXplX3Qgc3ogPSBlbGVtX3NpemU7IC8qIHNlcnZlcyBhcyAxLWVsZW1lbnQgYXJyYXkg
Ki8KLSAgLyogb3B0cyBhcmcgb2YgMyBtZWFucyBhbGwgZWxlbWVudHMgYXJlIHNhbWUgc2l6ZSwg
YW5kIHNob3VsZCBiZSBjbGVhcmVkICovCi0gIHJldHVybiBpQUxMT2Mobl9lbGVtZW50cywgJnN6
LCAzLCBjaHVua3MpOwotfQotCi0vKgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGluZGVw
ZW5kZW50X2NvbWFsbG9jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpZiBfX1NU
RF9DCi1Wb2lkX3QqKiBpQ09NQUxMT2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXplc1td
LCBWb2lkX3QqIGNodW5rc1tdKQotI2Vsc2UKLVZvaWRfdCoqIGlDT01BTExPYyhuX2VsZW1lbnRz
LCBzaXplcywgY2h1bmtzKSBzaXplX3Qgbl9lbGVtZW50czsgc2l6ZV90IHNpemVzW107IFZvaWRf
dCogY2h1bmtzW107Ci0jZW5kaWYKLXsKLSAgcmV0dXJuIGlBTExPYyhuX2VsZW1lbnRzLCBzaXpl
cywgMCwgY2h1bmtzKTsKLX0KLQotCi0vKgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gaWFsbG9jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBpYWxsb2MgcHJvdmlk
ZXMgY29tbW9uIHN1cHBvcnQgZm9yIGluZGVwZW5kZW50X1ggcm91dGluZXMsIGhhbmRsaW5nIGFs
bCBvZgotICB0aGUgY29tYmluYXRpb25zIHRoYXQgY2FuIHJlc3VsdC4KLQotICBUaGUgb3B0cyBh
cmcgaGFzOgotICAgIGJpdCAwIHNldCBpZiBhbGwgZWxlbWVudHMgYXJlIHNhbWUgc2l6ZSAodXNp
bmcgc2l6ZXNbMF0pCi0gICAgYml0IDEgc2V0IGlmIGVsZW1lbnRzIHNob3VsZCBiZSB6ZXJvZWQK
LSovCi0KLQotI2lmIF9fU1REX0MKLXN0YXRpYyBWb2lkX3QqKiBpQUxMT2Moc2l6ZV90IG5fZWxl
bWVudHMsIAotICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqIHNpemVzLCAgCi0gICAgICAg
ICAgICAgICAgICAgICAgIGludCBvcHRzLAotICAgICAgICAgICAgICAgICAgICAgICBWb2lkX3Qq
IGNodW5rc1tdKQotI2Vsc2UKLXN0YXRpYyBWb2lkX3QqKiBpQUxMT2Mobl9lbGVtZW50cywgc2l6
ZXMsIG9wdHMsIGNodW5rcykgc2l6ZV90IG5fZWxlbWVudHM7IHNpemVfdCogc2l6ZXM7IGludCBv
cHRzOyBWb2lkX3QqIGNodW5rc1tdOwotI2VuZGlmCi17Ci0gIG1zdGF0ZSBhdiA9IGdldF9tYWxs
b2Nfc3RhdGUoKTsKLSAgSU5URVJOQUxfU0laRV9UIGVsZW1lbnRfc2l6ZTsgICAvKiBjaHVua3Np
emUgb2YgZWFjaCBlbGVtZW50LCBpZiBhbGwgc2FtZSAqLwotICBJTlRFUk5BTF9TSVpFX1QgY29u
dGVudHNfc2l6ZTsgIC8qIHRvdGFsIHNpemUgb2YgZWxlbWVudHMgKi8KLSAgSU5URVJOQUxfU0la
RV9UIGFycmF5X3NpemU7ICAgICAvKiByZXF1ZXN0IHNpemUgb2YgcG9pbnRlciBhcnJheSAqLwot
ICBWb2lkX3QqICAgICAgICAgbWVtOyAgICAgICAgICAgIC8qIG1hbGxvY2VkIGFnZ3JlZ2F0ZSBz
cGFjZSAqLwotICBtY2h1bmtwdHIgICAgICAgcDsgICAgICAgICAgICAgIC8qIGNvcnJlc3BvbmRp
bmcgY2h1bmsgKi8KLSAgSU5URVJOQUxfU0laRV9UIHJlbWFpbmRlcl9zaXplOyAvKiByZW1haW5p
bmcgYnl0ZXMgd2hpbGUgc3BsaXR0aW5nICovCi0gIFZvaWRfdCoqICAgICAgICBtYXJyYXk7ICAg
ICAgICAgLyogZWl0aGVyICJjaHVua3MiIG9yIG1hbGxvY2VkIHB0ciBhcnJheSAqLwotICBtY2h1
bmtwdHIgICAgICAgYXJyYXlfY2h1bms7ICAgIC8qIGNodW5rIGZvciBtYWxsb2NlZCBwdHIgYXJy
YXkgKi8KLSAgaW50ICAgICAgICAgICAgIG1teDsgICAgICAgICAgICAvKiB0byBkaXNhYmxlIG1t
YXAgKi8KLSAgSU5URVJOQUxfU0laRV9UIHNpemU7ICAgICAgICAgICAKLSAgc2l6ZV90ICAgICAg
ICAgIGk7Ci0KLSAgLyogRW5zdXJlIGluaXRpYWxpemF0aW9uICovCi0gIGlmIChhdi0+bWF4X2Zh
c3QgPT0gMCkgbWFsbG9jX2NvbnNvbGlkYXRlKGF2KTsKLQotICAvKiBjb21wdXRlIGFycmF5IGxl
bmd0aCwgaWYgbmVlZGVkICovCi0gIGlmIChjaHVua3MgIT0gMCkgewotICAgIGlmIChuX2VsZW1l
bnRzID09IDApCi0gICAgICByZXR1cm4gY2h1bmtzOyAvKiBub3RoaW5nIHRvIGRvICovCi0gICAg
bWFycmF5ID0gY2h1bmtzOwotICAgIGFycmF5X3NpemUgPSAwOwotICB9Ci0gIGVsc2UgewotICAg
IC8qIGlmIGVtcHR5IHJlcSwgbXVzdCBzdGlsbCByZXR1cm4gY2h1bmsgcmVwcmVzZW50aW5nIGVt
cHR5IGFycmF5ICovCi0gICAgaWYgKG5fZWxlbWVudHMgPT0gMCkgCi0gICAgICByZXR1cm4gKFZv
aWRfdCoqKSBtQUxMT2MoMCk7Ci0gICAgbWFycmF5ID0gMDsKLSAgICBhcnJheV9zaXplID0gcmVx
dWVzdDJzaXplKG5fZWxlbWVudHMgKiAoc2l6ZW9mKFZvaWRfdCopKSk7Ci0gIH0KLQotICAvKiBj
b21wdXRlIHRvdGFsIGVsZW1lbnQgc2l6ZSAqLwotICBpZiAob3B0cyAmIDB4MSkgeyAvKiBhbGwt
c2FtZS1zaXplICovCi0gICAgZWxlbWVudF9zaXplID0gcmVxdWVzdDJzaXplKCpzaXplcyk7Ci0g
ICAgY29udGVudHNfc2l6ZSA9IG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemU7Ci0gIH0KLSAgZWxz
ZSB7IC8qIGFkZCB1cCBhbGwgdGhlIHNpemVzICovCi0gICAgZWxlbWVudF9zaXplID0gMDsKLSAg
ICBjb250ZW50c19zaXplID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpICE9IG5fZWxlbWVudHM7ICsr
aSkgCi0gICAgICBjb250ZW50c19zaXplICs9IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSk7ICAgICAK
LSAgfQotCi0gIC8qIHN1YnRyYWN0IG91dCBhbGlnbm1lbnQgYnl0ZXMgZnJvbSB0b3RhbCB0byBt
aW5pbWl6ZSBvdmVyYWxsb2NhdGlvbiAqLwotICBzaXplID0gY29udGVudHNfc2l6ZSArIGFycmF5
X3NpemUgLSBNQUxMT0NfQUxJR05fTUFTSzsKLSAgCi0gIC8qIAotICAgICBBbGxvY2F0ZSB0aGUg
YWdncmVnYXRlIGNodW5rLgotICAgICBCdXQgZmlyc3QgZGlzYWJsZSBtbWFwIHNvIG1hbGxvYyB3
b24ndCB1c2UgaXQsIHNpbmNlCi0gICAgIHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGxhdGVyIGZy
ZWUvcmVhbGxvYyBzcGFjZSBpbnRlcm5hbAotICAgICB0byBhIHNlZ3JlZ2F0ZWQgbW1hcCByZWdp
b24uCi0gKi8KLSAgbW14ID0gYXYtPm5fbW1hcHNfbWF4OyAgIC8qIGRpc2FibGUgbW1hcCAqLwot
ICBhdi0+bl9tbWFwc19tYXggPSAwOwotICBtZW0gPSBtQUxMT2Moc2l6ZSk7Ci0gIGF2LT5uX21t
YXBzX21heCA9IG1teDsgICAvKiByZXNldCBtbWFwICovCi0gIGlmIChtZW0gPT0gMCkgCi0gICAg
cmV0dXJuIDA7Ci0KLSAgcCA9IG1lbTJjaHVuayhtZW0pOwotICBhc3NlcnQoIWNodW5rX2lzX21t
YXBwZWQocCkpOyAKLSAgcmVtYWluZGVyX3NpemUgPSBjaHVua3NpemUocCk7Ci0KLSAgaWYgKG9w
dHMgJiAweDIpIHsgICAgICAgLyogb3B0aW9uYWxseSBjbGVhciB0aGUgZWxlbWVudHMgKi8KLSAg
ICBNQUxMT0NfWkVSTyhtZW0sIHJlbWFpbmRlcl9zaXplIC0gU0laRV9TWiAtIGFycmF5X3NpemUp
OwotICB9Ci0KLSAgLyogSWYgbm90IHByb3ZpZGVkLCBhbGxvY2F0ZSB0aGUgcG9pbnRlciBhcnJh
eSBhcyBmaW5hbCBwYXJ0IG9mIGNodW5rICovCi0gIGlmIChtYXJyYXkgPT0gMCkgewotICAgIGFy
cmF5X2NodW5rID0gY2h1bmtfYXRfb2Zmc2V0KHAsIGNvbnRlbnRzX3NpemUpOwotICAgIG1hcnJh
eSA9IChWb2lkX3QqKikgKGNodW5rMm1lbShhcnJheV9jaHVuaykpOwotICAgIHNldF9oZWFkKGFy
cmF5X2NodW5rLCAocmVtYWluZGVyX3NpemUgLSBjb250ZW50c19zaXplKSB8IFBSRVZfSU5VU0Up
OwotICAgIHJlbWFpbmRlcl9zaXplID0gY29udGVudHNfc2l6ZTsKLSAgfQotCi0gIC8qIHNwbGl0
IG91dCBlbGVtZW50cyAqLwotICBmb3IgKGkgPSAwOyA7ICsraSkgewotICAgIG1hcnJheVtpXSA9
IGNodW5rMm1lbShwKTsKLSAgICBpZiAoaSAhPSBuX2VsZW1lbnRzLTEpIHsKLSAgICAgIGlmIChl
bGVtZW50X3NpemUgIT0gMCkgCi0gICAgICAgIHNpemUgPSBlbGVtZW50X3NpemU7Ci0gICAgICBl
bHNlCi0gICAgICAgIHNpemUgPSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pOyAgICAgICAgICAKLSAg
ICAgIHJlbWFpbmRlcl9zaXplIC09IHNpemU7Ci0gICAgICBzZXRfaGVhZChwLCBzaXplIHwgUFJF
Vl9JTlVTRSk7Ci0gICAgICBwID0gY2h1bmtfYXRfb2Zmc2V0KHAsIHNpemUpOwotICAgIH0KLSAg
ICBlbHNlIHsgLyogdGhlIGZpbmFsIGVsZW1lbnQgYWJzb3JicyBhbnkgb3ZlcmFsbG9jYXRpb24g
c2xvcCAqLwotICAgICAgc2V0X2hlYWQocCwgcmVtYWluZGVyX3NpemUgfCBQUkVWX0lOVVNFKTsK
LSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0jaWYgREVCVUcKLSAgaWYgKG1hcnJheSAhPSBj
aHVua3MpIHsKLSAgICAvKiBmaW5hbCBlbGVtZW50IG11c3QgaGF2ZSBleGFjdGx5IGV4aGF1c3Rl
ZCBjaHVuayAqLwotICAgIGlmIChlbGVtZW50X3NpemUgIT0gMCkgCi0gICAgICBhc3NlcnQocmVt
YWluZGVyX3NpemUgPT0gZWxlbWVudF9zaXplKTsKLSAgICBlbHNlCi0gICAgICBhc3NlcnQocmVt
YWluZGVyX3NpemUgPT0gcmVxdWVzdDJzaXplKHNpemVzW2ldKSk7Ci0gICAgY2hlY2tfaW51c2Vf
Y2h1bmsobWVtMmNodW5rKG1hcnJheSkpOwotICB9Ci0KLSAgZm9yIChpID0gMDsgaSAhPSBuX2Vs
ZW1lbnRzOyArK2kpCi0gICAgY2hlY2tfaW51c2VfY2h1bmsobWVtMmNodW5rKG1hcnJheVtpXSkp
OwotI2VuZGlmCi0KLSAgcmV0dXJuIG1hcnJheTsKLX0KLQotCi0vKgotICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gdmFsbG9jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ki8KLQotI2lmIF9fU1REX0MKLVZvaWRfdCogdkFMTE9jKHNpemVfdCBieXRlcykKLSNlbHNlCi1W
b2lkX3QqIHZBTExPYyhieXRlcykgc2l6ZV90IGJ5dGVzOwotI2VuZGlmCi17Ci0gIC8qIEVuc3Vy
ZSBpbml0aWFsaXphdGlvbiAqLwotICBtc3RhdGUgYXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0g
IGlmIChhdi0+bWF4X2Zhc3QgPT0gMCkgbWFsbG9jX2NvbnNvbGlkYXRlKGF2KTsKLSAgcmV0dXJu
IG1FTUFMSUduKGF2LT5wYWdlc2l6ZSwgYnl0ZXMpOwotfQotCi0vKgotICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gcHZhbGxvYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSovCi0KLQotI2lmIF9fU1REX0MKLVZvaWRfdCogcFZBTExPYyhzaXplX3QgYnl0ZXMpCi0jZWxz
ZQotVm9pZF90KiBwVkFMTE9jKGJ5dGVzKSBzaXplX3QgYnl0ZXM7Ci0jZW5kaWYKLXsKLSAgbXN0
YXRlIGF2ID0gZ2V0X21hbGxvY19zdGF0ZSgpOwotICBzaXplX3QgcGFnZXN6OwotCi0gIC8qIEVu
c3VyZSBpbml0aWFsaXphdGlvbiAqLwotICBpZiAoYXYtPm1heF9mYXN0ID09IDApIG1hbGxvY19j
b25zb2xpZGF0ZShhdik7Ci0gIHBhZ2VzeiA9IGF2LT5wYWdlc2l6ZTsKLSAgcmV0dXJuIG1FTUFM
SUduKHBhZ2VzeiwgKGJ5dGVzICsgcGFnZXN6IC0gMSkgJiB+KHBhZ2VzeiAtIDEpKTsKLX0KLSAg
IAotCi0vKgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9jX3RyaW0gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWYgX19TVERfQwotaW50IG1UUklt
KHNpemVfdCBwYWQpCi0jZWxzZQotaW50IG1UUkltKHBhZCkgc2l6ZV90IHBhZDsKLSNlbmRpZgot
ewotICBtc3RhdGUgYXYgPSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0gIC8qIEVuc3VyZSBpbml0aWFs
aXphdGlvbi9jb25zb2xpZGF0aW9uICovCi0gIG1hbGxvY19jb25zb2xpZGF0ZShhdik7Ci0KLSNp
Zm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0gICAgICAgIAotICByZXR1cm4gc1lTVFJJbShwYWQs
IGF2KTsKLSNlbHNlCi0gIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLQotLyoKLSAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBtYWxsb2NfdXNhYmxlX3NpemUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotKi8KLQotI2lmIF9fU1REX0MKLXNpemVfdCBtVVNBQkxlKFZvaWRfdCogbWVtKQotI2Vs
c2UKLXNpemVfdCBtVVNBQkxlKG1lbSkgVm9pZF90KiBtZW07Ci0jZW5kaWYKLXsKLSAgbWNodW5r
cHRyIHA7Ci0gIGlmIChtZW0gIT0gMCkgewotICAgIHAgPSBtZW0yY2h1bmsobWVtKTsKLSAgICBp
ZiAoY2h1bmtfaXNfbW1hcHBlZChwKSkKLSAgICAgIHJldHVybiBjaHVua3NpemUocCkgLSAyKlNJ
WkVfU1o7Ci0gICAgZWxzZSBpZiAoaW51c2UocCkpCi0gICAgICByZXR1cm4gY2h1bmtzaXplKHAp
IC0gU0laRV9TWjsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotLyoKLSAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIG1hbGxpbmZvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ki8KLQotc3RydWN0IG1hbGxpbmZvIG1BTExJTkZvKCkKLXsKLSAgbXN0YXRlIGF2ID0gZ2V0X21h
bGxvY19zdGF0ZSgpOwotICBzdHJ1Y3QgbWFsbGluZm8gbWk7Ci0gIHVuc2lnbmVkIGludCBpOwot
ICBtYmlucHRyIGI7Ci0gIG1jaHVua3B0ciBwOwotICBJTlRFUk5BTF9TSVpFX1QgYXZhaWw7Ci0g
IElOVEVSTkFMX1NJWkVfVCBmYXN0YXZhaWw7Ci0gIGludCBuYmxvY2tzOwotICBpbnQgbmZhc3Ri
bG9ja3M7Ci0KLSAgLyogRW5zdXJlIGluaXRpYWxpemF0aW9uICovCi0gIGlmIChhdi0+dG9wID09
IDApICBtYWxsb2NfY29uc29saWRhdGUoYXYpOwotCi0gIGNoZWNrX21hbGxvY19zdGF0ZSgpOwot
Ci0gIC8qIEFjY291bnQgZm9yIHRvcCAqLwotICBhdmFpbCA9IGNodW5rc2l6ZShhdi0+dG9wKTsK
LSAgbmJsb2NrcyA9IDE7ICAvKiB0b3AgYWx3YXlzIGV4aXN0cyAqLwotCi0gIC8qIHRyYXZlcnNl
IGZhc3RiaW5zICovCi0gIG5mYXN0YmxvY2tzID0gMDsKLSAgZmFzdGF2YWlsID0gMDsKLQotICBm
b3IgKGkgPSAwOyBpIDwgTkZBU1RCSU5TOyArK2kpIHsKLSAgICBmb3IgKHAgPSBhdi0+ZmFzdGJp
bnNbaV07IHAgIT0gMDsgcCA9IHAtPmZkKSB7Ci0gICAgICArK25mYXN0YmxvY2tzOwotICAgICAg
ZmFzdGF2YWlsICs9IGNodW5rc2l6ZShwKTsKLSAgICB9Ci0gIH0KLQotICBhdmFpbCArPSBmYXN0
YXZhaWw7Ci0KLSAgLyogdHJhdmVyc2UgcmVndWxhciBiaW5zICovCi0gIGZvciAoaSA9IDE7IGkg
PCBOQklOUzsgKytpKSB7Ci0gICAgYiA9IGJpbl9hdChhdiwgaSk7Ci0gICAgZm9yIChwID0gbGFz
dChiKTsgcCAhPSBiOyBwID0gcC0+YmspIHsKLSAgICAgICsrbmJsb2NrczsKLSAgICAgIGF2YWls
ICs9IGNodW5rc2l6ZShwKTsKLSAgICB9Ci0gIH0KLQotICBtaS5zbWJsa3MgPSBuZmFzdGJsb2Nr
czsKLSAgbWkub3JkYmxrcyA9IG5ibG9ja3M7Ci0gIG1pLmZvcmRibGtzID0gYXZhaWw7Ci0gIG1p
LnVvcmRibGtzID0gYXYtPnNicmtlZF9tZW0gLSBhdmFpbDsKLSAgbWkuYXJlbmEgPSBhdi0+c2Jy
a2VkX21lbTsKLSAgbWkuaGJsa3MgPSBhdi0+bl9tbWFwczsKLSAgbWkuaGJsa2hkID0gYXYtPm1t
YXBwZWRfbWVtOwotICBtaS5mc21ibGtzID0gZmFzdGF2YWlsOwotICBtaS5rZWVwY29zdCA9IGNo
dW5rc2l6ZShhdi0+dG9wKTsKLSAgbWkudXNtYmxrcyA9IGF2LT5tYXhfdG90YWxfbWVtOwotICBy
ZXR1cm4gbWk7Ci19Ci0KLS8qCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxs
b2Nfc3RhdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi12b2lkIG1TVEFU
cygpCi17Ci0gIHN0cnVjdCBtYWxsaW5mbyBtaSA9IG1BTExJTkZvKCk7Ci0KLSNpZmRlZiBXSU4z
MgotICB7Ci0gICAgQ0hVTktfU0laRV9UICBmcmVlLCByZXNlcnZlZCwgY29tbWl0dGVkOwotICAg
IHZtaW5mbyAoJmZyZWUsICZyZXNlcnZlZCwgJmNvbW1pdHRlZCk7Ci0gICAgZnByaW50ZihzdGRl
cnIsICJmcmVlIGJ5dGVzICAgICAgID0gJTEwbHVcbiIsIAotICAgICAgICAgICAgZnJlZSk7Ci0g
ICAgZnByaW50ZihzdGRlcnIsICJyZXNlcnZlZCBieXRlcyAgID0gJTEwbHVcbiIsIAotICAgICAg
ICAgICAgcmVzZXJ2ZWQpOwotICAgIGZwcmludGYoc3RkZXJyLCAiY29tbWl0dGVkIGJ5dGVzICA9
ICUxMGx1XG4iLCAKLSAgICAgICAgICAgIGNvbW1pdHRlZCk7Ci0gIH0KLSNlbmRpZgotCi0KLSAg
ZnByaW50ZihzdGRlcnIsICJtYXggc3lzdGVtIGJ5dGVzID0gJTEwbHVcbiIsCi0gICAgICAgICAg
KENIVU5LX1NJWkVfVCkobWkudXNtYmxrcykpOwotICBmcHJpbnRmKHN0ZGVyciwgInN5c3RlbSBi
eXRlcyAgICAgPSAlMTBsdVxuIiwKLSAgICAgICAgICAoQ0hVTktfU0laRV9UKShtaS5hcmVuYSAr
IG1pLmhibGtoZCkpOwotICBmcHJpbnRmKHN0ZGVyciwgImluIHVzZSBieXRlcyAgICAgPSAlMTBs
dVxuIiwKLSAgICAgICAgICAoQ0hVTktfU0laRV9UKShtaS51b3JkYmxrcyArIG1pLmhibGtoZCkp
OwotCi0jaWZkZWYgV0lOMzIgCi0gIHsKLSAgICBDSFVOS19TSVpFX1QgIGtlcm5lbCwgdXNlcjsK
LSAgICBpZiAoY3B1aW5mbyAoVFJVRSwgJmtlcm5lbCwgJnVzZXIpKSB7Ci0gICAgICBmcHJpbnRm
KHN0ZGVyciwgImtlcm5lbCBtcyAgICAgICAgPSAlMTBsdVxuIiwgCi0gICAgICAgICAgICAgIGtl
cm5lbCk7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgInVzZXIgbXMgICAgICAgICAgPSAlMTBsdVxu
IiwgCi0gICAgICAgICAgICAgIHVzZXIpOwotICAgIH0KLSAgfQotI2VuZGlmCi19Ci0KLQotLyoK
LSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvcHQgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWYgX19TVERfQwotaW50IG1BTExPUHQoaW50IHBhcmFt
X251bWJlciwgaW50IHZhbHVlKQotI2Vsc2UKLWludCBtQUxMT1B0KHBhcmFtX251bWJlciwgdmFs
dWUpIGludCBwYXJhbV9udW1iZXI7IGludCB2YWx1ZTsKLSNlbmRpZgotewotICBtc3RhdGUgYXYg
PSBnZXRfbWFsbG9jX3N0YXRlKCk7Ci0gIC8qIEVuc3VyZSBpbml0aWFsaXphdGlvbi9jb25zb2xp
ZGF0aW9uICovCi0gIG1hbGxvY19jb25zb2xpZGF0ZShhdik7Ci0KLSAgc3dpdGNoKHBhcmFtX251
bWJlcikgewotICBjYXNlIE1fTVhGQVNUOgotICAgIGlmICh2YWx1ZSA+PSAwICYmIHZhbHVlIDw9
IE1BWF9GQVNUX1NJWkUpIHsKLSAgICAgIHNldF9tYXhfZmFzdChhdiwgdmFsdWUpOwotICAgICAg
cmV0dXJuIDE7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJldHVybiAwOwotCi0gIGNhc2UgTV9U
UklNX1RIUkVTSE9MRDoKLSAgICBhdi0+dHJpbV90aHJlc2hvbGQgPSB2YWx1ZTsKLSAgICByZXR1
cm4gMTsKLQotICBjYXNlIE1fVE9QX1BBRDoKLSAgICBhdi0+dG9wX3BhZCA9IHZhbHVlOwotICAg
IHJldHVybiAxOwotCi0gIGNhc2UgTV9NTUFQX1RIUkVTSE9MRDoKLSAgICBhdi0+bW1hcF90aHJl
c2hvbGQgPSB2YWx1ZTsKLSAgICByZXR1cm4gMTsKLQotICBjYXNlIE1fTU1BUF9NQVg6Ci0jaWYg
IUhBVkVfTU1BUAotICAgIGlmICh2YWx1ZSAhPSAwKQotICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYK
LSAgICBhdi0+bl9tbWFwc19tYXggPSB2YWx1ZTsKLSAgICByZXR1cm4gMTsKLQotICBkZWZhdWx0
OgotICAgIHJldHVybiAwOwotICB9Ci19Ci0KLQotLyogCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0t
IEFsdGVybmF0aXZlIE1PUkVDT1JFIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8K
LQotCi0vKgotICBHZW5lcmFsIFJlcXVpcmVtZW50cyBmb3IgTU9SRUNPUkUuCi0KLSAgVGhlIE1P
UkVDT1JFIGZ1bmN0aW9uIG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6Ci0KLSAg
SWYgTU9SRUNPUkVfQ09OVElHVU9VUyBpcyBmYWxzZToKLQotICAgICogTU9SRUNPUkUgbXVzdCBh
bGxvY2F0ZSBpbiBtdWx0aXBsZXMgb2YgcGFnZXNpemUuIEl0IHdpbGwKLSAgICAgIG9ubHkgYmUg
Y2FsbGVkIHdpdGggYXJndW1lbnRzIHRoYXQgYXJlIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4KLQot
ICAgICogTU9SRUNPUkUoMCkgbXVzdCByZXR1cm4gYW4gYWRkcmVzcyB0aGF0IGlzIGF0IGxlYXN0
IAotICAgICAgTUFMTE9DX0FMSUdOTUVOVCBhbGlnbmVkLiAoUGFnZS1hbGlnbmluZyBhbHdheXMg
c3VmZmljZXMuKQotCi0gIGVsc2UgKGkuZS4gSWYgTU9SRUNPUkVfQ09OVElHVU9VUyBpcyB0cnVl
KToKLQotICAgICogQ29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgd2l0aCBwb3NpdGl2ZSBh
cmd1bWVudHMKLSAgICAgIHJldHVybiBpbmNyZWFzaW5nIGFkZHJlc3NlcywgaW5kaWNhdGluZyB0
aGF0IHNwYWNlIGhhcyBiZWVuCi0gICAgICBjb250aWd1b3VzbHkgZXh0ZW5kZWQuIAotCi0gICAg
KiBNT1JFQ09SRSBuZWVkIG5vdCBhbGxvY2F0ZSBpbiBtdWx0aXBsZXMgb2YgcGFnZXNpemUuCi0g
ICAgICBDYWxscyB0byBNT1JFQ09SRSBuZWVkIG5vdCBoYXZlIGFyZ3Mgb2YgbXVsdGlwbGVzIG9m
IHBhZ2VzaXplLgotCi0gICAgKiBNT1JFQ09SRSBuZWVkIG5vdCBwYWdlLWFsaWduLgotCi0gIElu
IGVpdGhlciBjYXNlOgotCi0gICAgKiBNT1JFQ09SRSBtYXkgYWxsb2NhdGUgbW9yZSBtZW1vcnkg
dGhhbiByZXF1ZXN0ZWQuIChPciBldmVuIGxlc3MsCi0gICAgICBidXQgdGhpcyB3aWxsIGdlbmVy
YWxseSByZXN1bHQgaW4gYSBtYWxsb2MgZmFpbHVyZS4pCi0KLSAgICAqIE1PUkVDT1JFIG11c3Qg
bm90IGFsbG9jYXRlIG1lbW9yeSB3aGVuIGdpdmVuIGFyZ3VtZW50IHplcm8sIGJ1dAotICAgICAg
aW5zdGVhZCByZXR1cm4gb25lIHBhc3QgdGhlIGVuZCBhZGRyZXNzIG9mIG1lbW9yeSBmcm9tIHBy
ZXZpb3VzCi0gICAgICBub256ZXJvIGNhbGwuIFRoaXMgbWFsbG9jIGRvZXMgTk9UIGNhbGwgTU9S
RUNPUkUoMCkKLSAgICAgIHVudGlsIGF0IGxlYXN0IG9uZSBjYWxsIHdpdGggcG9zaXRpdmUgYXJn
dW1lbnRzIGlzIG1hZGUsIHNvCi0gICAgICB0aGUgaW5pdGlhbCB2YWx1ZSByZXR1cm5lZCBpcyBu
b3QgaW1wb3J0YW50LgotCi0gICAgKiBFdmVuIHRob3VnaCBjb25zZWN1dGl2ZSBjYWxscyB0byBN
T1JFQ09SRSBuZWVkIG5vdCByZXR1cm4gY29udGlndW91cwotICAgICAgYWRkcmVzc2VzLCBpdCBt
dXN0IGJlIE9LIGZvciBtYWxsb2MnZWQgY2h1bmtzIHRvIHNwYW4gbXVsdGlwbGUKLSAgICAgIHJl
Z2lvbnMgaW4gdGhvc2UgY2FzZXMgd2hlcmUgdGhleSBkbyBoYXBwZW4gdG8gYmUgY29udGlndW91
cy4KLQotICAgICogTU9SRUNPUkUgbmVlZCBub3QgaGFuZGxlIG5lZ2F0aXZlIGFyZ3VtZW50cyAt
LSBpdCBtYXkgaW5zdGVhZAotICAgICAganVzdCByZXR1cm4gTU9SRUNPUkVfRkFJTFVSRSB3aGVu
IGdpdmVuIG5lZ2F0aXZlIGFyZ3VtZW50cy4KLSAgICAgIE5lZ2F0aXZlIGFyZ3VtZW50cyBhcmUg
YWx3YXlzIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4gTU9SRUNPUkUKLSAgICAgIG11c3Qgbm90IG1p
c2ludGVycHJldCBuZWdhdGl2ZSBhcmdzIGFzIGxhcmdlIHBvc2l0aXZlIHVuc2lnbmVkCi0gICAg
ICBhcmdzLiBZb3UgY2FuIHN1cHByZXNzIGFsbCBzdWNoIGNhbGxzIGZyb20gZXZlbiBvY2N1cnJp
bmcgYnkgZGVmaW5pbmcKLSAgICAgIE1PUkVDT1JFX0NBTk5PVF9UUklNLAotCi0gIFRoZXJlIGlz
IHNvbWUgdmFyaWF0aW9uIGFjcm9zcyBzeXN0ZW1zIGFib3V0IHRoZSB0eXBlIG9mIHRoZQotICBh
cmd1bWVudCB0byBzYnJrL01PUkVDT1JFLiBJZiBzaXplX3QgaXMgdW5zaWduZWQsIHRoZW4gaXQg
Y2Fubm90Ci0gIGFjdHVhbGx5IGJlIHNpemVfdCwgYmVjYXVzZSBzYnJrIHN1cHBvcnRzIG5lZ2F0
aXZlIGFyZ3MsIHNvIGl0IGlzCi0gIG5vcm1hbGx5IHRoZSBzaWduZWQgdHlwZSBvZiB0aGUgc2Ft
ZSB3aWR0aCBhcyBzaXplX3QgKHNvbWV0aW1lcwotICBkZWNsYXJlZCBhcyAiaW50cHRyX3QiLCBh
bmQgc29tZXRpbWVzICJwdHJkaWZmX3QiKS4gIEl0IGRvZXNuJ3QgbXVjaAotICBtYXR0ZXIgdGhv
dWdoLiBJbnRlcm5hbGx5LCB3ZSB1c2UgImxvbmciIGFzIGFyZ3VtZW50cywgd2hpY2ggc2hvdWxk
Ci0gIHdvcmsgYWNyb3NzIGFsbCByZWFzb25hYmxlIHBvc3NpYmlsaXRpZXMuCi0KLSAgQWRkaXRp
b25hbGx5LCBpZiBNT1JFQ09SRSBldmVyIHJldHVybnMgZmFpbHVyZSBmb3IgYSBwb3NpdGl2ZQot
ICByZXF1ZXN0LCBhbmQgSEFWRV9NTUFQIGlzIHRydWUsIHRoZW4gbW1hcCBpcyB1c2VkIGFzIGEg
bm9uY29udGlndW91cwotICBzeXN0ZW0gYWxsb2NhdG9yLiBUaGlzIGlzIGEgdXNlZnVsIGJhY2t1
cCBzdHJhdGVneSBmb3Igc3lzdGVtcyB3aXRoCi0gIGhvbGVzIGluIGFkZHJlc3Mgc3BhY2VzIC0t
IGluIHRoaXMgY2FzZSBzYnJrIGNhbm5vdCBjb250aWd1b3VzbHkKLSAgZXhwYW5kIHRoZSBoZWFw
LCBidXQgbW1hcCBtYXkgYmUgYWJsZSB0byBtYXAgbm9uY29udGlndW91cyBzcGFjZS4KLQotICBJ
ZiB5b3UnZCBsaWtlIG1tYXAgdG8gQUxXQVlTIGJlIHVzZWQsIHlvdSBjYW4gZGVmaW5lIE1PUkVD
T1JFIHRvIGJlCi0gIGEgZnVuY3Rpb24gdGhhdCBhbHdheXMgcmV0dXJucyBNT1JFQ09SRV9GQUlM
VVJFLgotCi0gIE1hbGxvYyBvbmx5IGhhcyBsaW1pdGVkIGFiaWxpdHkgdG8gZGV0ZWN0IGZhaWx1
cmVzIG9mIE1PUkVDT1JFCi0gIHRvIHN1cHBseSBjb250aWd1b3VzIHNwYWNlIHdoZW4gaXQgc2F5
cyBpdCBjYW4uIEluIHBhcnRpY3VsYXIsCi0gIG11bHRpdGhyZWFkZWQgcHJvZ3JhbXMgdGhhdCBk
byBub3QgdXNlIGxvY2tzIG1heSByZXN1bHQgaW4KLSAgcmVjZSBjb25kaXRpb25zIGFjcm9zcyBj
YWxscyB0byBNT1JFQ09SRSB0aGF0IHJlc3VsdCBpbiBnYXBzCi0gIHRoYXQgY2Fubm90IGJlIGRl
dGVjdGVkIGFzIHN1Y2gsIGFuZCBzdWJzZXF1ZW50IGNvcnJ1cHRpb24uCi0KLSAgSWYgeW91IGFy
ZSB1c2luZyB0aGlzIG1hbGxvYyB3aXRoIHNvbWV0aGluZyBvdGhlciB0aGFuIHNicmsgKG9yIGl0
cwotICBlbXVsYXRpb24pIHRvIHN1cHBseSBtZW1vcnkgcmVnaW9ucywgeW91IHByb2JhYmx5IHdh
bnQgdG8gc2V0Ci0gIE1PUkVDT1JFX0NPTlRJR1VPVVMgYXMgZmFsc2UuICBBcyBhbiBleGFtcGxl
LCBoZXJlIGlzIGEgY3VzdG9tCi0gIGFsbG9jYXRvciBraW5kbHkgY29udHJpYnV0ZWQgZm9yIHBy
ZS1PU1ggbWFjT1MuICBJdCB1c2VzIHZpcnR1YWxseQotICBidXQgbm90IG5lY2Vzc2FyaWx5IHBo
eXNpY2FsbHkgY29udGlndW91cyBub24tcGFnZWQgbWVtb3J5IChsb2NrZWQKLSAgaW4sIHByZXNl
bnQgYW5kIHdvbid0IGdldCBzd2FwcGVkIG91dCkuICBZb3UgY2FuIHVzZSBpdCBieQotICB1bmNv
bW1lbnRpbmcgdGhpcyBzZWN0aW9uLCBhZGRpbmcgc29tZSAjaW5jbHVkZXMsIGFuZCBzZXR0aW5n
IHVwIHRoZQotICBhcHByb3ByaWF0ZSBkZWZpbmVzIGFib3ZlOgotCi0gICAgICAjZGVmaW5lIE1P
UkVDT1JFIG9zTW9yZUNvcmUKLSAgICAgICNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9VUyAwCi0K
LSAgVGhlcmUgaXMgYWxzbyBhIHNodXRkb3duIHJvdXRpbmUgdGhhdCBzaG91bGQgc29tZWhvdyBi
ZSBjYWxsZWQgZm9yCi0gIGNsZWFudXAgdXBvbiBwcm9ncmFtIGV4aXQuCi0KLSAgI2RlZmluZSBN
QVhfUE9PTF9FTlRSSUVTIDEwMAotICAjZGVmaW5lIE1JTklNVU1fTU9SRUNPUkVfU0laRSAgKDY0
ICogMTAyNCkKLSAgc3RhdGljIGludCBuZXh0X29zX3Bvb2w7Ci0gIHZvaWQgKm91cl9vc19wb29s
c1tNQVhfUE9PTF9FTlRSSUVTXTsKLQotICB2b2lkICpvc01vcmVDb3JlKGludCBzaXplKQotICB7
Ci0gICAgdm9pZCAqcHRyID0gMDsKLSAgICBzdGF0aWMgdm9pZCAqc2Jya190b3AgPSAwOwotCi0g
ICAgaWYgKHNpemUgPiAwKQotICAgIHsKLSAgICAgIGlmIChzaXplIDwgTUlOSU1VTV9NT1JFQ09S
RV9TSVpFKQotICAgICAgICAgc2l6ZSA9IE1JTklNVU1fTU9SRUNPUkVfU0laRTsKLSAgICAgIGlm
IChDdXJyZW50RXhlY3V0aW9uTGV2ZWwoKSA9PSBrVGFza0xldmVsKQotICAgICAgICAgcHRyID0g
UG9vbEFsbG9jYXRlUmVzaWRlbnQoc2l6ZSArIFJNX1BBR0VfU0laRSwgMCk7Ci0gICAgICBpZiAo
cHRyID09IDApCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAodm9pZCAqKSBNT1JFQ09SRV9GQUlM
VVJFOwotICAgICAgfQotICAgICAgLy8gc2F2ZSBwdHJzIHNvIHRoZXkgY2FuIGJlIGZyZWVkIGR1
cmluZyBjbGVhbnVwCi0gICAgICBvdXJfb3NfcG9vbHNbbmV4dF9vc19wb29sXSA9IHB0cjsKLSAg
ICAgIG5leHRfb3NfcG9vbCsrOwotICAgICAgcHRyID0gKHZvaWQgKikgKCgoKENIVU5LX1NJWkVf
VCkgcHRyKSArIFJNX1BBR0VfTUFTSykgJiB+Uk1fUEFHRV9NQVNLKTsKLSAgICAgIHNicmtfdG9w
ID0gKGNoYXIgKikgcHRyICsgc2l6ZTsKLSAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotICAgIGVs
c2UgaWYgKHNpemUgPCAwKQotICAgIHsKLSAgICAgIC8vIHdlIGRvbid0IGN1cnJlbnRseSBzdXBw
b3J0IHNocmluayBiZWhhdmlvcgotICAgICAgcmV0dXJuICh2b2lkICopIE1PUkVDT1JFX0ZBSUxV
UkU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gc2Jya190b3A7Ci0gICAg
fQotICB9Ci0KLSAgLy8gY2xlYW51cCBhbnkgYWxsb2NhdGVkIG1lbW9yeSBwb29scwotICAvLyBj
YWxsZWQgYXMgbGFzdCB0aGluZyBiZWZvcmUgc2h1dHRpbmcgZG93biBkcml2ZXIKLQotICB2b2lk
IG9zQ2xlYW51cE1lbSh2b2lkKQotICB7Ci0gICAgdm9pZCAqKnB0cjsKLQotICAgIGZvciAocHRy
ID0gb3VyX29zX3Bvb2xzOyBwdHIgPCAmb3VyX29zX3Bvb2xzW01BWF9QT09MX0VOVFJJRVNdOyBw
dHIrKykKLSAgICAgIGlmICgqcHRyKQotICAgICAgewotICAgICAgICAgUG9vbERlYWxsb2NhdGUo
KnB0cik7Ci0gICAgICAgICAqcHRyID0gMDsKLSAgICAgIH0KLSAgfQotCi0qLwotCi0KLS8qIAot
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAKLQotICBFbXVsYXRpb24gb2Ygc2JyayBmb3Igd2luMzIuIAotICBEb25hdGVkIGJ5
IEouIFdhbHRlciA8V2FsdGVyQEdlTmVTeXMtZS5kZT4uCi0gIEZvciBhZGRpdGlvbmFsIGluZm9y
bWF0aW9uIGFib3V0IHRoaXMgY29kZSwgYW5kIG1hbGxvYyBvbiBXaW4zMiwgc2VlIAotICAgICBo
dHRwOi8vd3d3LmdlbmVzeXMtZS5kZS9qd2FsdGVyLwotKi8KLQotCi0jaWZkZWYgV0lOMzIKLQot
I2lmZGVmIF9ERUJVRwotLyogI2RlZmluZSBUUkFDRSAqLwotI2VuZGlmCi0KLS8qIFN1cHBvcnQg
Zm9yIFVTRV9NQUxMT0NfTE9DSyAqLwotI2lmZGVmIFVTRV9NQUxMT0NfTE9DSwotCi0vKiBXYWl0
IGZvciBzcGluIGxvY2sgKi8KLXN0YXRpYyBpbnQgc2x3YWl0IChpbnQgKnNsKSB7Ci0gICAgd2hp
bGUgKEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlICgodm9pZCAqKikgc2wsICh2b2lkICopIDEs
ICh2b2lkICopIDApICE9IDApIAotCSAgICBTbGVlcCAoMCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LS8qIFJlbGVhc2Ugc3BpbiBsb2NrICovCi1zdGF0aWMgaW50IHNscmVsZWFzZSAoaW50ICpzbCkg
ewotICAgIEludGVybG9ja2VkRXhjaGFuZ2UgKHNsLCAwKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
I2lmZGVmIE5FRURFRAotLyogU3BpbiBsb2NrIGZvciBlbXVsYXRpb24gY29kZSAqLwotc3RhdGlj
IGludCBnX3NsOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBVU0VfTUFMTE9DX0xPQ0sgKi8KLQotLyog
Z2V0cGFnZXNpemUgZm9yIHdpbmRvd3MgKi8KLXN0YXRpYyBsb25nIGdldHBhZ2VzaXplICh2b2lk
KSB7Ci0gICAgc3RhdGljIGxvbmcgZ19wYWdlc2l6ZSA9IDA7Ci0gICAgaWYgKCEgZ19wYWdlc2l6
ZSkgewotICAgICAgICBTWVNURU1fSU5GTyBzeXN0ZW1faW5mbzsKLSAgICAgICAgR2V0U3lzdGVt
SW5mbyAoJnN5c3RlbV9pbmZvKTsKLSAgICAgICAgZ19wYWdlc2l6ZSA9IHN5c3RlbV9pbmZvLmR3
UGFnZVNpemU7Ci0gICAgfQotICAgIHJldHVybiBnX3BhZ2VzaXplOwotfQotc3RhdGljIGxvbmcg
Z2V0cmVnaW9uc2l6ZSAodm9pZCkgewotICAgIHN0YXRpYyBsb25nIGdfcmVnaW9uc2l6ZSA9IDA7
Ci0gICAgaWYgKCEgZ19yZWdpb25zaXplKSB7Ci0gICAgICAgIFNZU1RFTV9JTkZPIHN5c3RlbV9p
bmZvOwotICAgICAgICBHZXRTeXN0ZW1JbmZvICgmc3lzdGVtX2luZm8pOwotICAgICAgICBnX3Jl
Z2lvbnNpemUgPSBzeXN0ZW1faW5mby5kd0FsbG9jYXRpb25HcmFudWxhcml0eTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGdfcmVnaW9uc2l6ZTsKLX0KLQotLyogQSByZWdpb24gbGlzdCBlbnRyeSAqLwot
dHlwZWRlZiBzdHJ1Y3QgX3JlZ2lvbl9saXN0X2VudHJ5IHsKLSAgICB2b2lkICp0b3BfYWxsb2Nh
dGVkOwotICAgIHZvaWQgKnRvcF9jb21taXR0ZWQ7Ci0gICAgdm9pZCAqdG9wX3Jlc2VydmVkOwot
ICAgIGxvbmcgcmVzZXJ2ZV9zaXplOwotICAgIHN0cnVjdCBfcmVnaW9uX2xpc3RfZW50cnkgKnBy
ZXZpb3VzOwotfSByZWdpb25fbGlzdF9lbnRyeTsKLQotLyogQWxsb2NhdGUgYW5kIGxpbmsgYSBy
ZWdpb24gZW50cnkgaW4gdGhlIHJlZ2lvbiBsaXN0ICovCi1zdGF0aWMgaW50IHJlZ2lvbl9saXN0
X2FwcGVuZCAocmVnaW9uX2xpc3RfZW50cnkgKipsYXN0LCB2b2lkICpiYXNlX3Jlc2VydmVkLCBs
b25nIHJlc2VydmVfc2l6ZSkgewotICAgIHJlZ2lvbl9saXN0X2VudHJ5ICpuZXh0ID0gSGVhcEFs
bG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgc2l6ZW9mIChyZWdpb25fbGlzdF9lbnRyeSkpOwot
ICAgIGlmICghIG5leHQpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICBuZXh0LT50b3BfYWxs
b2NhdGVkID0gKGNoYXIgKikgYmFzZV9yZXNlcnZlZDsKLSAgICBuZXh0LT50b3BfY29tbWl0dGVk
ID0gKGNoYXIgKikgYmFzZV9yZXNlcnZlZDsKLSAgICBuZXh0LT50b3BfcmVzZXJ2ZWQgPSAoY2hh
ciAqKSBiYXNlX3Jlc2VydmVkICsgcmVzZXJ2ZV9zaXplOwotICAgIG5leHQtPnJlc2VydmVfc2l6
ZSA9IHJlc2VydmVfc2l6ZTsKLSAgICBuZXh0LT5wcmV2aW91cyA9ICpsYXN0OwotICAgICpsYXN0
ID0gbmV4dDsKLSAgICByZXR1cm4gVFJVRTsKLX0KLS8qIEZyZWUgYW5kIHVubGluayB0aGUgbGFz
dCByZWdpb24gZW50cnkgZnJvbSB0aGUgcmVnaW9uIGxpc3QgKi8KLXN0YXRpYyBpbnQgcmVnaW9u
X2xpc3RfcmVtb3ZlIChyZWdpb25fbGlzdF9lbnRyeSAqKmxhc3QpIHsKLSAgICByZWdpb25fbGlz
dF9lbnRyeSAqcHJldmlvdXMgPSAoKmxhc3QpLT5wcmV2aW91czsKLSAgICBpZiAoISBIZWFwRnJl
ZSAoR2V0UHJvY2Vzc0hlYXAgKCksIHNpemVvZiAocmVnaW9uX2xpc3RfZW50cnkpLCAqbGFzdCkp
Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAqbGFzdCA9IHByZXZpb3VzOwotICAgIHJldHVy
biBUUlVFOwotfQotCi0jZGVmaW5lIENFSUwoc2l6ZSx0bykJKCgoc2l6ZSkrKHRvKS0xKSZ+KCh0
byktMSkpCi0jZGVmaW5lIEZMT09SKHNpemUsdG8pCSgoc2l6ZSkmfigodG8pLTEpKQotCi0jZGVm
aW5lIFNCUktfU0NBTEUgIDAKLS8qICNkZWZpbmUgU0JSS19TQ0FMRSAgMSAqLwotLyogI2RlZmlu
ZSBTQlJLX1NDQUxFICAyICovCi0vKiAjZGVmaW5lIFNCUktfU0NBTEUgIDQgICovCi0KLS8qIHNi
cmsgZm9yIHdpbmRvd3MgKi8KLXN0YXRpYyB2b2lkICpzYnJrIChsb25nIHNpemUpIHsKLSAgICBz
dGF0aWMgbG9uZyBnX3BhZ2VzaXplLCBnX215X3BhZ2VzaXplOwotICAgIHN0YXRpYyBsb25nIGdf
cmVnaW9uc2l6ZSwgZ19teV9yZWdpb25zaXplOwotICAgIHN0YXRpYyByZWdpb25fbGlzdF9lbnRy
eSAqZ19sYXN0OwotICAgIHZvaWQgKnJlc3VsdCA9ICh2b2lkICopIE1PUkVDT1JFX0ZBSUxVUkU7
Ci0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYgKCJzYnJrICVkXG4iLCBzaXplKTsKLSNlbmRpZgot
I2lmIGRlZmluZWQgKFVTRV9NQUxMT0NfTE9DSykgJiYgZGVmaW5lZCAoTkVFREVEKQotICAgIC8q
IFdhaXQgZm9yIHNwaW4gbG9jayAqLwotICAgIHNsd2FpdCAoJmdfc2wpOwotI2VuZGlmCi0gICAg
LyogRmlyc3QgdGltZSBpbml0aWFsaXphdGlvbiAqLwotICAgIGlmICghIGdfcGFnZXNpemUpIHsK
LSAgICAgICAgZ19wYWdlc2l6ZSA9IGdldHBhZ2VzaXplICgpOwotICAgICAgICBnX215X3BhZ2Vz
aXplID0gZ19wYWdlc2l6ZSA8PCBTQlJLX1NDQUxFOwotICAgIH0KLSAgICBpZiAoISBnX3JlZ2lv
bnNpemUpIHsKLSAgICAgICAgZ19yZWdpb25zaXplID0gZ2V0cmVnaW9uc2l6ZSAoKTsKLSAgICAg
ICAgZ19teV9yZWdpb25zaXplID0gZ19yZWdpb25zaXplIDw8IFNCUktfU0NBTEU7Ci0gICAgfQot
ICAgIGlmICghIGdfbGFzdCkgewotICAgICAgICBpZiAoISByZWdpb25fbGlzdF9hcHBlbmQgKCZn
X2xhc3QsIDAsIDApKSAKLSAgICAgICAgICAgZ290byBzYnJrX2V4aXQ7Ci0gICAgfQotICAgIC8q
IEFzc2VydCBpbnZhcmlhbnRzICovCi0gICAgYXNzZXJ0IChnX2xhc3QpOwotICAgIGFzc2VydCAo
KGNoYXIgKikgZ19sYXN0LT50b3BfcmVzZXJ2ZWQgLSBnX2xhc3QtPnJlc2VydmVfc2l6ZSA8PSAo
Y2hhciAqKSBnX2xhc3QtPnRvcF9hbGxvY2F0ZWQgJiYKLSAgICAgICAgICAgIGdfbGFzdC0+dG9w
X2FsbG9jYXRlZCA8PSBnX2xhc3QtPnRvcF9jb21taXR0ZWQpOwotICAgIGFzc2VydCAoKGNoYXIg
KikgZ19sYXN0LT50b3BfcmVzZXJ2ZWQgLSBnX2xhc3QtPnJlc2VydmVfc2l6ZSA8PSAoY2hhciAq
KSBnX2xhc3QtPnRvcF9jb21taXR0ZWQgJiYKLSAgICAgICAgICAgIGdfbGFzdC0+dG9wX2NvbW1p
dHRlZCA8PSBnX2xhc3QtPnRvcF9yZXNlcnZlZCAmJgotICAgICAgICAgICAgKHVuc2lnbmVkKSBn
X2xhc3QtPnRvcF9jb21taXR0ZWQgJSBnX3BhZ2VzaXplID09IDApOwotICAgIGFzc2VydCAoKHVu
c2lnbmVkKSBnX2xhc3QtPnRvcF9yZXNlcnZlZCAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLSAgICBh
c3NlcnQgKCh1bnNpZ25lZCkgZ19sYXN0LT5yZXNlcnZlX3NpemUgJSBnX3JlZ2lvbnNpemUgPT0g
MCk7Ci0gICAgLyogQWxsb2NhdGlvbiByZXF1ZXN0ZWQ/ICovCi0gICAgaWYgKHNpemUgPj0gMCkg
ewotICAgICAgICAvKiBBbGxvY2F0aW9uIHNpemUgaXMgdGhlIHJlcXVlc3RlZCBzaXplICovCi0g
ICAgICAgIGxvbmcgYWxsb2NhdGVfc2l6ZSA9IHNpemU7Ci0gICAgICAgIC8qIENvbXB1dGUgdGhl
IHNpemUgdG8gY29tbWl0ICovCi0gICAgICAgIGxvbmcgdG9fY29tbWl0ID0gKGNoYXIgKikgZ19s
YXN0LT50b3BfYWxsb2NhdGVkICsgYWxsb2NhdGVfc2l6ZSAtIChjaGFyICopIGdfbGFzdC0+dG9w
X2NvbW1pdHRlZDsKLSAgICAgICAgLyogRG8gd2UgcmVhY2ggdGhlIGNvbW1pdCBsaW1pdD8gKi8K
LSAgICAgICAgaWYgKHRvX2NvbW1pdCA+IDApIHsKLSAgICAgICAgICAgIC8qIFJvdW5kIHNpemUg
dG8gY29tbWl0ICovCi0gICAgICAgICAgICBsb25nIGNvbW1pdF9zaXplID0gQ0VJTCAodG9fY29t
bWl0LCBnX215X3BhZ2VzaXplKTsKLSAgICAgICAgICAgIC8qIENvbXB1dGUgdGhlIHNpemUgdG8g
cmVzZXJ2ZSAqLwotICAgICAgICAgICAgbG9uZyB0b19yZXNlcnZlID0gKGNoYXIgKikgZ19sYXN0
LT50b3BfY29tbWl0dGVkICsgY29tbWl0X3NpemUgLSAoY2hhciAqKSBnX2xhc3QtPnRvcF9yZXNl
cnZlZDsKLSAgICAgICAgICAgIC8qIERvIHdlIHJlYWNoIHRoZSByZXNlcnZlIGxpbWl0PyAqLwot
ICAgICAgICAgICAgaWYgKHRvX3Jlc2VydmUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgLyogQ29t
cHV0ZSB0aGUgcmVtYWluaW5nIHNpemUgdG8gY29tbWl0IGluIHRoZSBjdXJyZW50IHJlZ2lvbiAq
LwotICAgICAgICAgICAgICAgIGxvbmcgcmVtYWluaW5nX2NvbW1pdF9zaXplID0gKGNoYXIgKikg
Z19sYXN0LT50b3BfcmVzZXJ2ZWQgLSAoY2hhciAqKSBnX2xhc3QtPnRvcF9jb21taXR0ZWQ7Ci0g
ICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ19jb21taXRfc2l6ZSA+IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgLyogQXNzZXJ0IHByZWNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0ICgodW5zaWduZWQpIGdfbGFzdC0+dG9wX2NvbW1pdHRlZCAlIGdfcGFnZXNpemUg
PT0gMCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCAoMCA8IHJlbWFpbmluZ19jb21taXRf
c2l6ZSAmJiByZW1haW5pbmdfY29tbWl0X3NpemUgJSBnX3BhZ2VzaXplID09IDApOyB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvKiBDb21taXQgdGhpcyAqLwotICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqYmFzZV9jb21taXR0ZWQgPSBWaXJ0dWFsQWxsb2MgKGdfbGFzdC0+dG9wX2Nv
bW1pdHRlZCwgcmVtYWluaW5nX2NvbW1pdF9zaXplLAotCQkJCQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1FTV9DT01NSVQsIFBBR0VfUkVBRFdSSVRFKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8qIENoZWNrIHJldHVybmVkIHBvaW50ZXIgZm9yIGNvbnNpc3RlbmN5ICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZV9jb21taXR0ZWQgIT0gZ19sYXN0LT50
b3BfY29tbWl0dGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc2Jya19leGl0
OwotICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzZXJ0IHBvc3Rjb25kaXRpb25zICovCi0g
ICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgKCh1bnNpZ25lZCkgYmFzZV9jb21taXR0ZWQg
JSBnX3BhZ2VzaXplID09IDApOwotI2lmZGVmIFRSQUNFCi0gICAgICAgICAgICAgICAgICAgICAg
ICBwcmludGYgKCJDb21taXQgJXAgJWRcbiIsIGJhc2VfY29tbWl0dGVkLCByZW1haW5pbmdfY29t
bWl0X3NpemUpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBBZGp1c3QgdGhl
IHJlZ2lvbnMgY29tbWl0IHRvcCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZ19sYXN0LT50
b3BfY29tbWl0dGVkID0gKGNoYXIgKikgYmFzZV9jb21taXR0ZWQgKyByZW1haW5pbmdfY29tbWl0
X3NpemU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IHsKLSAgICAg
ICAgICAgICAgICAgICAgLyogTm93IHdlIGFyZSBnb2luZyB0byBzZWFyY2ggYW5kIHJlc2VydmUu
ICovCi0gICAgICAgICAgICAgICAgICAgIGludCBjb250aWd1b3VzID0gLTE7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCBmb3VuZCA9IEZBTFNFOwotICAgICAgICAgICAgICAgICAgICBNRU1PUllf
QkFTSUNfSU5GT1JNQVRJT04gbWVtb3J5X2luZm87Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQg
KmJhc2VfcmVzZXJ2ZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGxvbmcgcmVzZXJ2ZV9zaXplOwot
ICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1
bWUgY29udGlndW91cyBtZW1vcnkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpZ3Vv
dXMgPSBUUlVFOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogUm91bmQgc2l6ZSB0byByZXNl
cnZlICovCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlX3NpemUgPSBDRUlMICh0b19y
ZXNlcnZlLCBnX215X3JlZ2lvbnNpemUpOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogU3Rh
cnQgd2l0aCB0aGUgY3VycmVudCByZWdpb24ncyB0b3AgKi8KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNzID0gZ19sYXN0LT50b3BfcmVzZXJ2ZWQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwotICAgICAgICAg
ICAgICAgICAgICAgICAgYXNzZXJ0ICgodW5zaWduZWQpIG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNz
ICUgZ19wYWdlc2l6ZSA9PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCAoMCA8
IHJlc2VydmVfc2l6ZSAmJiByZXNlcnZlX3NpemUgJSBnX3JlZ2lvbnNpemUgPT0gMCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoVmlydHVhbFF1ZXJ5IChtZW1vcnlfaW5mby5CYXNl
QWRkcmVzcywgJm1lbW9yeV9pbmZvLCBzaXplb2YgKG1lbW9yeV9pbmZvKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcG9zdGNvbmRpdGlvbnMgKi8KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhc3NlcnQgKCh1bnNpZ25lZCkgbWVtb3J5X2luZm8uQmFzZUFk
ZHJlc3MgJSBnX3BhZ2VzaXplID09IDApOwotI2lmZGVmIFRSQUNFCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJpbnRmICgiUXVlcnkgJXAgJWQgJXNcbiIsIG1lbW9yeV9pbmZvLkJhc2VB
ZGRyZXNzLCBtZW1vcnlfaW5mby5SZWdpb25TaXplLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1lbW9yeV9pbmZvLlN0YXRlID09IE1FTV9GUkVFID8gIkZSRUUiOiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZW1vcnlfaW5mby5TdGF0ZSA9PSBN
RU1fUkVTRVJWRSA/ICJSRVNFUlZFRCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKG1lbW9yeV9pbmZvLlN0YXRlID09IE1FTV9DT01NSVQgPyAiQ09NTUlUVEVEIjogIj8i
KSkpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVnaW9uIGlzIGZy
ZWUsIHdlbGwgYWxpZ25lZCBhbmQgYmlnIGVub3VnaDogd2UgYXJlIGRvbmUgKi8KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobWVtb3J5X2luZm8uU3RhdGUgPT0gTUVNX0ZSRUUgJiYK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKSBtZW1vcnlfaW5mby5C
YXNlQWRkcmVzcyAlIGdfcmVnaW9uc2l6ZSA9PSAwICYmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lbW9yeV9pbmZvLlJlZ2lvblNpemUgPj0gKHVuc2lnbmVkKSByZXNlcnZlX3Np
emUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUUlVFOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnJvbSBub3cgb24gd2Ug
Y2FuJ3QgZ2V0IGNvbnRpZ3VvdXMgbWVtb3J5ISAqLwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpZ3VvdXMgPSBGQUxTRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS
ZWNvbXB1dGUgc2l6ZSB0byByZXNlcnZlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzZXJ2ZV9zaXplID0gQ0VJTCAoYWxsb2NhdGVfc2l6ZSwgZ19teV9yZWdpb25zaXplKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfaW5mby5CYXNlQWRkcmVzcyA9IChjaGFy
ICopIG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNzICsgbWVtb3J5X2luZm8uUmVnaW9uU2l6ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCAoKHVuc2lnbmVkKSBtZW1vcnlfaW5mby5C
YXNlQWRkcmVzcyAlIGdfcGFnZXNpemUgPT0gMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0ICgwIDwgcmVzZXJ2ZV9zaXplICYmIHJlc2VydmVfc2l6ZSAlIGdfcmVnaW9uc2l6
ZSA9PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8qIFNlYXJjaCBmYWlsZWQ/ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISBm
b3VuZCkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzYnJrX2V4aXQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwotICAgICAgICAg
ICAgICAgICAgICAgICAgYXNzZXJ0ICgodW5zaWduZWQpIG1lbW9yeV9pbmZvLkJhc2VBZGRyZXNz
ICUgZ19yZWdpb25zaXplID09IDApOwotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ICgw
IDwgcmVzZXJ2ZV9zaXplICYmIHJlc2VydmVfc2l6ZSAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byByZXNlcnZlIHRoaXMgKi8KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJhc2VfcmVzZXJ2ZWQgPSBWaXJ0dWFsQWxsb2MgKG1lbW9yeV9pbmZv
LkJhc2VBZGRyZXNzLCByZXNlcnZlX3NpemUsIAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTUVNX1JFU0VSVkUsIFBBR0VfTk9BQ0NFU1MpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEgYmFzZV9yZXNlcnZlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCByYyA9IEdldExhc3RFcnJvciAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocmMgIT0gRVJST1JfSU5WQUxJRF9BRERSRVNTKSAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ290byBzYnJrX2V4aXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvKiBBIG51bGwgcG9pbnRlciBzaWduYWxzIChob3BlZnVs
bHkpIGEgcmFjZSBjb25kaXRpb24gd2l0aCBhbm90aGVyIHRocmVhZC4gKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8qIEluIHRoaXMgY2FzZSwgd2UgdHJ5IGFnYWluLiAqLwotICAgICAgICAg
ICAgICAgICAgICB9IHdoaWxlICghIGJhc2VfcmVzZXJ2ZWQpOwotICAgICAgICAgICAgICAgICAg
ICAvKiBDaGVjayByZXR1cm5lZCBwb2ludGVyIGZvciBjb25zaXN0ZW5jeSAqLwotICAgICAgICAg
ICAgICAgICAgICBpZiAobWVtb3J5X2luZm8uQmFzZUFkZHJlc3MgJiYgYmFzZV9yZXNlcnZlZCAh
PSBtZW1vcnlfaW5mby5CYXNlQWRkcmVzcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
c2Jya19leGl0OwotICAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgcG9zdGNvbmRpdGlvbnMg
Ki8KLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ICgodW5zaWduZWQpIGJhc2VfcmVzZXJ2ZWQg
JSBnX3JlZ2lvbnNpemUgPT0gMCk7Ci0jaWZkZWYgVFJBQ0UKLSAgICAgICAgICAgICAgICAgICAg
cHJpbnRmICgiUmVzZXJ2ZSAlcCAlZFxuIiwgYmFzZV9yZXNlcnZlZCwgcmVzZXJ2ZV9zaXplKTsK
LSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAvKiBEaWQgd2UgZ2V0IGNvbnRpZ3VvdXMgbWVt
b3J5PyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGlndW91cykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbG9uZyBzdGFydF9zaXplID0gKGNoYXIgKikgZ19sYXN0LT50b3BfY29t
bWl0dGVkIC0gKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkOwotICAgICAgICAgICAgICAg
ICAgICAgICAgLyogQWRqdXN0IGFsbG9jYXRpb24gc2l6ZSAqLwotICAgICAgICAgICAgICAgICAg
ICAgICAgYWxsb2NhdGVfc2l6ZSAtPSBzdGFydF9zaXplOwotICAgICAgICAgICAgICAgICAgICAg
ICAgLyogQWRqdXN0IHRoZSByZWdpb25zIGFsbG9jYXRpb24gdG9wICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICBnX2xhc3QtPnRvcF9hbGxvY2F0ZWQgPSBnX2xhc3QtPnRvcF9jb21taXR0ZWQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNvbXB1dGUgdGhlIHNpemUgdG8gY29tbWl0
ICovCi0gICAgICAgICAgICAgICAgICAgICAgICB0b19jb21taXQgPSAoY2hhciAqKSBnX2xhc3Qt
PnRvcF9hbGxvY2F0ZWQgKyBhbGxvY2F0ZV9zaXplIC0gKGNoYXIgKikgZ19sYXN0LT50b3BfY29t
bWl0dGVkOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogUm91bmQgc2l6ZSB0byBjb21taXQg
Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdF9zaXplID0gQ0VJTCAodG9fY29tbWl0
LCBnX215X3BhZ2VzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgfSAKLSAgICAgICAgICAgICAg
ICAgICAgLyogQXBwZW5kIHRoZSBuZXcgcmVnaW9uIHRvIHRoZSBsaXN0ICovCi0gICAgICAgICAg
ICAgICAgICAgIGlmICghIHJlZ2lvbl9saXN0X2FwcGVuZCAoJmdfbGFzdCwgYmFzZV9yZXNlcnZl
ZCwgcmVzZXJ2ZV9zaXplKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc2Jya19leGl0
OwotICAgICAgICAgICAgICAgICAgICAvKiBEaWRuJ3Qgd2UgZ2V0IGNvbnRpZ3VvdXMgbWVtb3J5
PyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoISBjb250aWd1b3VzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvKiBSZWNvbXB1dGUgdGhlIHNpemUgdG8gY29tbWl0ICovCi0gICAgICAg
ICAgICAgICAgICAgICAgICB0b19jb21taXQgPSAoY2hhciAqKSBnX2xhc3QtPnRvcF9hbGxvY2F0
ZWQgKyBhbGxvY2F0ZV9zaXplIC0gKGNoYXIgKikgZ19sYXN0LT50b3BfY29tbWl0dGVkOwotICAg
ICAgICAgICAgICAgICAgICAgICAgLyogUm91bmQgc2l6ZSB0byBjb21taXQgKi8KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbW1pdF9zaXplID0gQ0VJTCAodG9fY29tbWl0LCBnX215X3BhZ2Vz
aXplKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gCi0gICAgICAgICAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAqLwotICAgICAgICAg
ICAgYXNzZXJ0ICgodW5zaWduZWQpIGdfbGFzdC0+dG9wX2NvbW1pdHRlZCAlIGdfcGFnZXNpemUg
PT0gMCk7Ci0gICAgICAgICAgICBhc3NlcnQgKDAgPCBjb21taXRfc2l6ZSAmJiBjb21taXRfc2l6
ZSAlIGdfcGFnZXNpemUgPT0gMCk7IHsKLSAgICAgICAgICAgICAgICAvKiBDb21taXQgdGhpcyAq
LwotICAgICAgICAgICAgICAgIHZvaWQgKmJhc2VfY29tbWl0dGVkID0gVmlydHVhbEFsbG9jIChn
X2xhc3QtPnRvcF9jb21taXR0ZWQsIGNvbW1pdF9zaXplLCAKLQkJCQkgICAgCQkJICAgICAgICAg
ICAgICAgICAgICAgTUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpOwotICAgICAgICAgICAgICAg
IC8qIENoZWNrIHJldHVybmVkIHBvaW50ZXIgZm9yIGNvbnNpc3RlbmN5ICovCi0gICAgICAgICAg
ICAgICAgaWYgKGJhc2VfY29tbWl0dGVkICE9IGdfbGFzdC0+dG9wX2NvbW1pdHRlZCkKLSAgICAg
ICAgICAgICAgICAgICAgZ290byBzYnJrX2V4aXQ7Ci0gICAgICAgICAgICAgICAgLyogQXNzZXJ0
IHBvc3Rjb25kaXRpb25zICovCi0gICAgICAgICAgICAgICAgYXNzZXJ0ICgodW5zaWduZWQpIGJh
c2VfY29tbWl0dGVkICUgZ19wYWdlc2l6ZSA9PSAwKTsKLSNpZmRlZiBUUkFDRQotICAgICAgICAg
ICAgICAgIHByaW50ZiAoIkNvbW1pdCAlcCAlZFxuIiwgYmFzZV9jb21taXR0ZWQsIGNvbW1pdF9z
aXplKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIC8qIEFkanVzdCB0aGUgcmVnaW9ucyBjb21t
aXQgdG9wICovCi0gICAgICAgICAgICAgICAgZ19sYXN0LT50b3BfY29tbWl0dGVkID0gKGNoYXIg
KikgYmFzZV9jb21taXR0ZWQgKyBjb21taXRfc2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSAKLSAgICAgICAgLyogQWRqdXN0IHRoZSByZWdpb25zIGFsbG9jYXRpb24gdG9wICovCi0gICAg
ICAgIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCA9IChjaGFyICopIGdfbGFzdC0+dG9wX2FsbG9jYXRl
ZCArIGFsbG9jYXRlX3NpemU7Ci0gICAgICAgIHJlc3VsdCA9IChjaGFyICopIGdfbGFzdC0+dG9w
X2FsbG9jYXRlZCAtIHNpemU7Ci0gICAgLyogRGVhbGxvY2F0aW9uIHJlcXVlc3RlZD8gKi8KLSAg
ICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7Ci0gICAgICAgIGxvbmcgZGVhbGxvY2F0ZV9zaXplID0g
LSBzaXplOwotICAgICAgICAvKiBBcyBsb25nIGFzIHdlIGhhdmUgYSByZWdpb24gdG8gcmVsZWFz
ZSAqLwotICAgICAgICB3aGlsZSAoKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkIC0gZGVh
bGxvY2F0ZV9zaXplIDwgKGNoYXIgKikgZ19sYXN0LT50b3BfcmVzZXJ2ZWQgLSBnX2xhc3QtPnJl
c2VydmVfc2l6ZSkgewotICAgICAgICAgICAgLyogR2V0IHRoZSBzaXplIHRvIHJlbGVhc2UgKi8K
LSAgICAgICAgICAgIGxvbmcgcmVsZWFzZV9zaXplID0gZ19sYXN0LT5yZXNlcnZlX3NpemU7Ci0g
ICAgICAgICAgICAvKiBHZXQgdGhlIGJhc2UgYWRkcmVzcyAqLwotICAgICAgICAgICAgdm9pZCAq
YmFzZV9yZXNlcnZlZCA9IChjaGFyICopIGdfbGFzdC0+dG9wX3Jlc2VydmVkIC0gcmVsZWFzZV9z
aXplOwotICAgICAgICAgICAgLyogQXNzZXJ0IHByZWNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAg
IGFzc2VydCAoKHVuc2lnbmVkKSBiYXNlX3Jlc2VydmVkICUgZ19yZWdpb25zaXplID09IDApOyAK
LSAgICAgICAgICAgIGFzc2VydCAoMCA8IHJlbGVhc2Vfc2l6ZSAmJiByZWxlYXNlX3NpemUgJSBn
X3JlZ2lvbnNpemUgPT0gMCk7IHsKLSAgICAgICAgICAgICAgICAvKiBSZWxlYXNlIHRoaXMgKi8K
LSAgICAgICAgICAgICAgICBpbnQgcmMgPSBWaXJ0dWFsRnJlZSAoYmFzZV9yZXNlcnZlZCwgMCwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTV9SRUxFQVNFKTsKLSAg
ICAgICAgICAgICAgICAvKiBDaGVjayByZXR1cm5lZCBjb2RlIGZvciBjb25zaXN0ZW5jeSAqLwot
ICAgICAgICAgICAgICAgIGlmICghIHJjKQotICAgICAgICAgICAgICAgICAgICBnb3RvIHNicmtf
ZXhpdDsKLSNpZmRlZiBUUkFDRQotICAgICAgICAgICAgICAgIHByaW50ZiAoIlJlbGVhc2UgJXAg
JWRcbiIsIGJhc2VfcmVzZXJ2ZWQsIHJlbGVhc2Vfc2l6ZSk7Ci0jZW5kaWYKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIC8qIEFkanVzdCBkZWFsbG9jYXRpb24gc2l6ZSAqLwotICAgICAgICAg
ICAgZGVhbGxvY2F0ZV9zaXplIC09IChjaGFyICopIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCAtIChj
aGFyICopIGJhc2VfcmVzZXJ2ZWQ7Ci0gICAgICAgICAgICAvKiBSZW1vdmUgdGhlIG9sZCByZWdp
b24gZnJvbSB0aGUgbGlzdCAqLwotICAgICAgICAgICAgaWYgKCEgcmVnaW9uX2xpc3RfcmVtb3Zl
ICgmZ19sYXN0KSkKLSAgICAgICAgICAgICAgICBnb3RvIHNicmtfZXhpdDsKLSAgICAgICAgfSB7
Ci0gICAgICAgICAgICAvKiBDb21wdXRlIHRoZSBzaXplIHRvIGRlY29tbWl0ICovCi0gICAgICAg
ICAgICBsb25nIHRvX2RlY29tbWl0ID0gKGNoYXIgKikgZ19sYXN0LT50b3BfY29tbWl0dGVkIC0g
KChjaGFyICopIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCAtIGRlYWxsb2NhdGVfc2l6ZSk7Ci0gICAg
ICAgICAgICBpZiAodG9fZGVjb21taXQgPj0gZ19teV9wYWdlc2l6ZSkgewotICAgICAgICAgICAg
ICAgIC8qIENvbXB1dGUgdGhlIHNpemUgdG8gZGVjb21taXQgKi8KLSAgICAgICAgICAgICAgICBs
b25nIGRlY29tbWl0X3NpemUgPSBGTE9PUiAodG9fZGVjb21taXQsIGdfbXlfcGFnZXNpemUpOwot
ICAgICAgICAgICAgICAgIC8qICBDb21wdXRlIHRoZSBiYXNlIGFkZHJlc3MgKi8KLSAgICAgICAg
ICAgICAgICB2b2lkICpiYXNlX2NvbW1pdHRlZCA9IChjaGFyICopIGdfbGFzdC0+dG9wX2NvbW1p
dHRlZCAtIGRlY29tbWl0X3NpemU7Ci0gICAgICAgICAgICAgICAgLyogQXNzZXJ0IHByZWNvbmRp
dGlvbnMgKi8KLSAgICAgICAgICAgICAgICBhc3NlcnQgKCh1bnNpZ25lZCkgYmFzZV9jb21taXR0
ZWQgJSBnX3BhZ2VzaXplID09IDApOwotICAgICAgICAgICAgICAgIGFzc2VydCAoMCA8IGRlY29t
bWl0X3NpemUgJiYgZGVjb21taXRfc2l6ZSAlIGdfcGFnZXNpemUgPT0gMCk7IHsKLSAgICAgICAg
ICAgICAgICAgICAgLyogRGVjb21taXQgdGhpcyAqLwotICAgICAgICAgICAgICAgICAgICBpbnQg
cmMgPSBWaXJ0dWFsRnJlZSAoKGNoYXIgKikgYmFzZV9jb21taXR0ZWQsIGRlY29tbWl0X3NpemUs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNX0RFQ09NTUlU
KTsKLSAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgcmV0dXJuZWQgY29kZSBmb3IgY29uc2lz
dGVuY3kgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCEgcmMpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIHNicmtfZXhpdDsKLSNpZmRlZiBUUkFDRQotICAgICAgICAgICAgICAgICAg
ICBwcmludGYgKCJEZWNvbW1pdCAlcCAlZFxuIiwgYmFzZV9jb21taXR0ZWQsIGRlY29tbWl0X3Np
emUpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIEFkanVz
dCBkZWFsbG9jYXRpb24gc2l6ZSBhbmQgcmVnaW9ucyBjb21taXQgYW5kIGFsbG9jYXRlIHRvcCAq
LwotICAgICAgICAgICAgICAgIGRlYWxsb2NhdGVfc2l6ZSAtPSAoY2hhciAqKSBnX2xhc3QtPnRv
cF9hbGxvY2F0ZWQgLSAoY2hhciAqKSBiYXNlX2NvbW1pdHRlZDsKLSAgICAgICAgICAgICAgICBn
X2xhc3QtPnRvcF9jb21taXR0ZWQgPSBiYXNlX2NvbW1pdHRlZDsKLSAgICAgICAgICAgICAgICBn
X2xhc3QtPnRvcF9hbGxvY2F0ZWQgPSBiYXNlX2NvbW1pdHRlZDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICAvKiBBZGp1c3QgcmVnaW9ucyBhbGxvY2F0ZSB0b3AgKi8KLSAgICAg
ICAgZ19sYXN0LT50b3BfYWxsb2NhdGVkID0gKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVk
IC0gZGVhbGxvY2F0ZV9zaXplOwotICAgICAgICAvKiBDaGVjayBmb3IgdW5kZXJmbG93ICovCi0g
ICAgICAgIGlmICgoY2hhciAqKSBnX2xhc3QtPnRvcF9yZXNlcnZlZCAtIGdfbGFzdC0+cmVzZXJ2
ZV9zaXplID4gKGNoYXIgKikgZ19sYXN0LT50b3BfYWxsb2NhdGVkIHx8Ci0gICAgICAgICAgICBn
X2xhc3QtPnRvcF9hbGxvY2F0ZWQgPiBnX2xhc3QtPnRvcF9jb21taXR0ZWQpIHsKLSAgICAgICAg
ICAgIC8qIEFkanVzdCByZWdpb25zIGFsbG9jYXRlIHRvcCAqLwotICAgICAgICAgICAgZ19sYXN0
LT50b3BfYWxsb2NhdGVkID0gKGNoYXIgKikgZ19sYXN0LT50b3BfcmVzZXJ2ZWQgLSBnX2xhc3Qt
PnJlc2VydmVfc2l6ZTsKLSAgICAgICAgICAgIGdvdG8gc2Jya19leGl0OwotICAgICAgICB9Ci0g
ICAgICAgIHJlc3VsdCA9IGdfbGFzdC0+dG9wX2FsbG9jYXRlZDsKLSAgICB9Ci0gICAgLyogQXNz
ZXJ0IGludmFyaWFudHMgKi8KLSAgICBhc3NlcnQgKGdfbGFzdCk7Ci0gICAgYXNzZXJ0ICgoY2hh
ciAqKSBnX2xhc3QtPnRvcF9yZXNlcnZlZCAtIGdfbGFzdC0+cmVzZXJ2ZV9zaXplIDw9IChjaGFy
ICopIGdfbGFzdC0+dG9wX2FsbG9jYXRlZCAmJgotICAgICAgICAgICAgZ19sYXN0LT50b3BfYWxs
b2NhdGVkIDw9IGdfbGFzdC0+dG9wX2NvbW1pdHRlZCk7Ci0gICAgYXNzZXJ0ICgoY2hhciAqKSBn
X2xhc3QtPnRvcF9yZXNlcnZlZCAtIGdfbGFzdC0+cmVzZXJ2ZV9zaXplIDw9IChjaGFyICopIGdf
bGFzdC0+dG9wX2NvbW1pdHRlZCAmJgotICAgICAgICAgICAgZ19sYXN0LT50b3BfY29tbWl0dGVk
IDw9IGdfbGFzdC0+dG9wX3Jlc2VydmVkICYmCi0gICAgICAgICAgICAodW5zaWduZWQpIGdfbGFz
dC0+dG9wX2NvbW1pdHRlZCAlIGdfcGFnZXNpemUgPT0gMCk7Ci0gICAgYXNzZXJ0ICgodW5zaWdu
ZWQpIGdfbGFzdC0+dG9wX3Jlc2VydmVkICUgZ19yZWdpb25zaXplID09IDApOwotICAgIGFzc2Vy
dCAoKHVuc2lnbmVkKSBnX2xhc3QtPnJlc2VydmVfc2l6ZSAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsK
LQotc2Jya19leGl0OgotI2lmIGRlZmluZWQgKFVTRV9NQUxMT0NfTE9DSykgJiYgZGVmaW5lZCAo
TkVFREVEKQotICAgIC8qIFJlbGVhc2Ugc3BpbiBsb2NrICovCi0gICAgc2xyZWxlYXNlICgmZ19z
bCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBtbWFwIGZvciB3aW5kb3dz
ICovCi1zdGF0aWMgdm9pZCAqbW1hcCAodm9pZCAqcHRyLCBsb25nIHNpemUsIGxvbmcgcHJvdCwg
bG9uZyB0eXBlLCBsb25nIGhhbmRsZSwgbG9uZyBhcmcpIHsKLSAgICBzdGF0aWMgbG9uZyBnX3Bh
Z2VzaXplOwotICAgIHN0YXRpYyBsb25nIGdfcmVnaW9uc2l6ZTsKLSNpZmRlZiBUUkFDRQotICAg
IHByaW50ZiAoIm1tYXAgJWRcbiIsIHNpemUpOwotI2VuZGlmCi0jaWYgZGVmaW5lZCAoVVNFX01B
TExPQ19MT0NLKSAmJiBkZWZpbmVkIChORUVERUQpCi0gICAgLyogV2FpdCBmb3Igc3BpbiBsb2Nr
ICovCi0gICAgc2x3YWl0ICgmZ19zbCk7Ci0jZW5kaWYKLSAgICAvKiBGaXJzdCB0aW1lIGluaXRp
YWxpemF0aW9uICovCi0gICAgaWYgKCEgZ19wYWdlc2l6ZSkgCi0gICAgICAgIGdfcGFnZXNpemUg
PSBnZXRwYWdlc2l6ZSAoKTsKLSAgICBpZiAoISBnX3JlZ2lvbnNpemUpIAotICAgICAgICBnX3Jl
Z2lvbnNpemUgPSBnZXRyZWdpb25zaXplICgpOwotICAgIC8qIEFzc2VydCBwcmVjb25kaXRpb25z
ICovCi0gICAgYXNzZXJ0ICgodW5zaWduZWQpIHB0ciAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLSAg
ICBhc3NlcnQgKHNpemUgJSBnX3BhZ2VzaXplID09IDApOwotICAgIC8qIEFsbG9jYXRlIHRoaXMg
Ki8KLSAgICBwdHIgPSBWaXJ0dWFsQWxsb2MgKHB0ciwgc2l6ZSwKLQkJCQkJICAgIE1FTV9SRVNF
UlZFIHwgTUVNX0NPTU1JVCB8IE1FTV9UT1BfRE9XTiwgUEFHRV9SRUFEV1JJVEUpOwotICAgIGlm
ICghIHB0cikgewotICAgICAgICBwdHIgPSAodm9pZCAqKSBNT1JFQ09SRV9GQUlMVVJFOwotICAg
ICAgICBnb3RvIG1tYXBfZXhpdDsKLSAgICB9Ci0gICAgLyogQXNzZXJ0IHBvc3Rjb25kaXRpb25z
ICovCi0gICAgYXNzZXJ0ICgodW5zaWduZWQpIHB0ciAlIGdfcmVnaW9uc2l6ZSA9PSAwKTsKLSNp
ZmRlZiBUUkFDRQotICAgIHByaW50ZiAoIkNvbW1pdCAlcCAlZFxuIiwgcHRyLCBzaXplKTsKLSNl
bmRpZgotbW1hcF9leGl0OgotI2lmIGRlZmluZWQgKFVTRV9NQUxMT0NfTE9DSykgJiYgZGVmaW5l
ZCAoTkVFREVEKQotICAgIC8qIFJlbGVhc2Ugc3BpbiBsb2NrICovCi0gICAgc2xyZWxlYXNlICgm
Z19zbCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcHRyOwotfQotCi0vKiBtdW5tYXAgZm9yIHdpbmRv
d3MgKi8KLXN0YXRpYyBsb25nIG11bm1hcCAodm9pZCAqcHRyLCBsb25nIHNpemUpIHsKLSAgICBz
dGF0aWMgbG9uZyBnX3BhZ2VzaXplOwotICAgIHN0YXRpYyBsb25nIGdfcmVnaW9uc2l6ZTsKLSAg
ICBpbnQgcmMgPSBNVU5NQVBfRkFJTFVSRTsKLSNpZmRlZiBUUkFDRQotICAgIHByaW50ZiAoIm11
bm1hcCAlcCAlZFxuIiwgcHRyLCBzaXplKTsKLSNlbmRpZgotI2lmIGRlZmluZWQgKFVTRV9NQUxM
T0NfTE9DSykgJiYgZGVmaW5lZCAoTkVFREVEKQotICAgIC8qIFdhaXQgZm9yIHNwaW4gbG9jayAq
LwotICAgIHNsd2FpdCAoJmdfc2wpOwotI2VuZGlmCi0gICAgLyogRmlyc3QgdGltZSBpbml0aWFs
aXphdGlvbiAqLwotICAgIGlmICghIGdfcGFnZXNpemUpIAotICAgICAgICBnX3BhZ2VzaXplID0g
Z2V0cGFnZXNpemUgKCk7Ci0gICAgaWYgKCEgZ19yZWdpb25zaXplKSAKLSAgICAgICAgZ19yZWdp
b25zaXplID0gZ2V0cmVnaW9uc2l6ZSAoKTsKLSAgICAvKiBBc3NlcnQgcHJlY29uZGl0aW9ucyAq
LwotICAgIGFzc2VydCAoKHVuc2lnbmVkKSBwdHIgJSBnX3JlZ2lvbnNpemUgPT0gMCk7Ci0gICAg
YXNzZXJ0IChzaXplICUgZ19wYWdlc2l6ZSA9PSAwKTsKLSAgICAvKiBGcmVlIHRoaXMgKi8KLSAg
ICBpZiAoISBWaXJ0dWFsRnJlZSAocHRyLCAwLCAKLSAgICAgICAgICAgICAgICAgICAgICAgTUVN
X1JFTEVBU0UpKQotICAgICAgICBnb3RvIG11bm1hcF9leGl0OwotICAgIHJjID0gMDsKLSNpZmRl
ZiBUUkFDRQotICAgIHByaW50ZiAoIlJlbGVhc2UgJXAgJWRcbiIsIHB0ciwgc2l6ZSk7Ci0jZW5k
aWYKLW11bm1hcF9leGl0OgotI2lmIGRlZmluZWQgKFVTRV9NQUxMT0NfTE9DSykgJiYgZGVmaW5l
ZCAoTkVFREVEKQotICAgIC8qIFJlbGVhc2Ugc3BpbiBsb2NrICovCi0gICAgc2xyZWxlYXNlICgm
Z19zbCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIHZtaW5mbyAo
Q0hVTktfU0laRV9UICAqZnJlZSwgQ0hVTktfU0laRV9UICAqcmVzZXJ2ZWQsIENIVU5LX1NJWkVf
VCAgKmNvbW1pdHRlZCkgewotICAgIE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiBtZW1vcnlfaW5m
bzsKLSAgICBtZW1vcnlfaW5mby5CYXNlQWRkcmVzcyA9IDA7Ci0gICAgKmZyZWUgPSAqcmVzZXJ2
ZWQgPSAqY29tbWl0dGVkID0gMDsKLSAgICB3aGlsZSAoVmlydHVhbFF1ZXJ5IChtZW1vcnlfaW5m
by5CYXNlQWRkcmVzcywgJm1lbW9yeV9pbmZvLCBzaXplb2YgKG1lbW9yeV9pbmZvKSkpIHsKLSAg
ICAgICAgc3dpdGNoIChtZW1vcnlfaW5mby5TdGF0ZSkgewotICAgICAgICBjYXNlIE1FTV9GUkVF
OgotICAgICAgICAgICAgKmZyZWUgKz0gbWVtb3J5X2luZm8uUmVnaW9uU2l6ZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1FTV9SRVNFUlZFOgotICAgICAgICAgICAgKnJlc2Vy
dmVkICs9IG1lbW9yeV9pbmZvLlJlZ2lvblNpemU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBNRU1fQ09NTUlUOgotICAgICAgICAgICAgKmNvbW1pdHRlZCArPSBtZW1vcnlfaW5m
by5SZWdpb25TaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbWVt
b3J5X2luZm8uQmFzZUFkZHJlc3MgPSAoY2hhciAqKSBtZW1vcnlfaW5mby5CYXNlQWRkcmVzcyAr
IG1lbW9yeV9pbmZvLlJlZ2lvblNpemU7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IGNwdWluZm8g
KGludCB3aG9sZSwgQ0hVTktfU0laRV9UICAqa2VybmVsLCBDSFVOS19TSVpFX1QgICp1c2VyKSB7
Ci0gICAgaWYgKHdob2xlKSB7Ci0gICAgICAgIF9faW50NjQgY3JlYXRpb242NCwgZXhpdDY0LCBr
ZXJuZWw2NCwgdXNlcjY0OwotICAgICAgICBpbnQgcmMgPSBHZXRQcm9jZXNzVGltZXMgKEdldEN1
cnJlbnRQcm9jZXNzICgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRklM
RVRJTUUgKikgJmNyZWF0aW9uNjQsICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoRklMRVRJTUUgKikgJmV4aXQ2NCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKEZJTEVUSU1FICopICZrZXJuZWw2NCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKEZJTEVUSU1FICopICZ1c2VyNjQpOwotICAgICAgICBpZiAoISByYykgewotICAgICAg
ICAgICAgKmtlcm5lbCA9IDA7Ci0gICAgICAgICAgICAqdXNlciA9IDA7Ci0gICAgICAgICAgICBy
ZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0gCi0gICAgICAgICprZXJuZWwgPSAoQ0hVTktfU0laRV9U
KSAoa2VybmVsNjQgLyAxMDAwMCk7Ci0gICAgICAgICp1c2VyID0gKENIVU5LX1NJWkVfVCkgKHVz
ZXI2NCAvIDEwMDAwKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgX19pbnQ2NCBjcmVhdGlvbjY0LCBleGl0NjQsIGtlcm5lbDY0LCB1c2VyNjQ7Ci0gICAgICAg
IGludCByYyA9IEdldFRocmVhZFRpbWVzIChHZXRDdXJyZW50VGhyZWFkICgpLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChGSUxFVElNRSAqKSAmY3JlYXRpb242NCwgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZJTEVUSU1FICopICZleGl0NjQsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZJTEVUSU1FICopICZrZXJuZWw2NCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRklMRVRJTUUgKikgJnVzZXI2NCk7Ci0g
ICAgICAgIGlmICghIHJjKSB7Ci0gICAgICAgICAgICAqa2VybmVsID0gMDsKLSAgICAgICAgICAg
ICp1c2VyID0gMDsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfSAKLSAgICAg
ICAgKmtlcm5lbCA9IChDSFVOS19TSVpFX1QpIChrZXJuZWw2NCAvIDEwMDAwKTsKLSAgICAgICAg
KnVzZXIgPSAoQ0hVTktfU0laRV9UKSAodXNlcjY0IC8gMTAwMDApOwotICAgICAgICByZXR1cm4g
VFJVRTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvKiBXSU4zMiAqLwotCi0jZW5kaWYgLy8gTkRFQlVH
Ci0KLX0gIC8qIGVuZCBvZiBuYW1lc3BhY2UgS0pTICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSGlzdG9yeToKLSAg
ICBWMi43LjIgU2F0IEF1ZyAxNyAwOTowNzozMCAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkK
LSAgICAgICogRml4IG1hbGxvY19zdGF0ZSBiaXRtYXAgYXJyYXkgbWlzZGVjbGFyYXRpb24KLQot
ICAgIFYyLjcuMSBUaHUgSnVsIDI1IDEwOjU4OjAzIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2Vl
KQotICAgICAgKiBBbGxvdyB0dW5pbmcgb2YgRklSU1RfU09SVEVEX0JJTl9TSVpFCi0gICAgICAq
IFVzZSBQVFJfVUlOVCBhcyB0eXBlIGZvciBhbGwgcHRyLT5pbnQgY2FzdHMuIFRoYW5rcyB0byBK
b2huIEJlbG1vbnRlLgotICAgICAgKiBCZXR0ZXIgZGV0ZWN0aW9uIGFuZCBzdXBwb3J0IGZvciBu
b24tY29udGlndW91c25lc3Mgb2YgTU9SRUNPUkUuIAotICAgICAgICBUaGFua3MgdG8gQW5kcmVh
cyBNdWVsbGVyLCBDb25hbCBXYWxzaCwgYW5kIFdvbGZyYW0gR2xvZ2VyCi0gICAgICAqIEJ5cGFz
cyBtb3N0IG9mIG1hbGxvYyBpZiBubyBmcmVlcy4gVGhhbmtzIFRvIEVtZXJ5IEJlcmdlci4KLSAg
ICAgICogRml4IGZyZWVpbmcgb2Ygb2xkIHRvcCBub24tY29udGlndW91cyBjaHVuayBpbSBzeXNt
YWxsb2MuCi0gICAgICAqIFJhaXNlZCBkZWZhdWx0IHRyaW0gYW5kIG1hcCB0aHJlc2hvbGRzIHRv
IDI1NksuCi0gICAgICAqIEZpeCBtbWFwLXJlbGF0ZWQgI2RlZmluZXMuIFRoYW5rcyB0byBMdWJv
cyBMdW5hay4KLSAgICAgICogRml4IGNvcHkgbWFjcm9zOyBhZGRlZCBMQUNLU19GQ05UTF9ILiBU
aGFua3MgdG8gTmVhbCBXYWxmaWVsZC4KLSAgICAgICogQnJhbmNoLWZyZWUgYmluIGNhbGN1bGF0
aW9uCi0gICAgICAqIERlZmF1bHQgdHJpbSBhbmQgbW1hcCB0aHJlc2hvbGRzIG5vdyAyNTZLLgot
Ci0gICAgVjIuNy4wIFN1biBNYXIgMTEgMTQ6MTQ6MDYgMjAwMSAgRG91ZyBMZWEgIChkbCBhdCBn
ZWUpCi0gICAgICAqIEludHJvZHVjZSBpbmRlcGVuZGVudF9jb21hbGxvYyBhbmQgaW5kZXBlbmRl
bnRfY2FsbG9jLgotICAgICAgICBUaGFua3MgdG8gTWljaGFlbCBQYWNob3MgZm9yIG1vdGl2YXRp
b24gYW5kIGhlbHAuCi0gICAgICAqIE1ha2Ugb3B0aW9uYWwgLmggZmlsZSBhdmFpbGFibGUKLSAg
ICAgICogQWxsb3cgPiAyR0IgcmVxdWVzdHMgb24gMzJiaXQgc3lzdGVtcy4KLSAgICAgICogbmV3
IFdJTjMyIHNicmssIG1tYXAsIG11bm1hcCwgbG9jayBjb2RlIGZyb20gPFdhbHRlckBHZU5lU3lz
LWUuZGU+LgotICAgICAgICBUaGFua3MgYWxzbyB0byBBbmRyZWFzIE11ZWxsZXIgPGEubXVlbGxl
ciBhdCBwYXJhZGF0ZWMuZGU+LAotICAgICAgICBhbmQgQW5vbnltb3VzLgotICAgICAgKiBBbGxv
dyBvdmVycmlkZSBvZiBNQUxMT0NfQUxJR05NRU5UIChUaGFua3MgdG8gUnV1ZCBXYWlqIGZvciAK
LSAgICAgICAgaGVscGluZyB0ZXN0IHRoaXMuKQotICAgICAgKiBtZW1hbGlnbjogY2hlY2sgYWxp
Z25tZW50IGFyZwotICAgICAgKiByZWFsbG9jOiBkb24ndCB0cnkgdG8gc2hpZnQgY2h1bmtzIGJh
Y2t3YXJkcywgc2luY2UgdGhpcwotICAgICAgICBsZWFkcyB0byAgbW9yZSBmcmFnbWVudGF0aW9u
IGluIHNvbWUgcHJvZ3JhbXMgYW5kIGRvZXNuJ3QKLSAgICAgICAgc2VlbSB0byBoZWxwIGluIGFu
eSBvdGhlcnMuCi0gICAgICAqIENvbGxlY3QgYWxsIGNhc2VzIGluIG1hbGxvYyByZXF1aXJpbmcg
c3lzdGVtIG1lbW9yeSBpbnRvIHNZU01BTExPYwotICAgICAgKiBVc2UgbW1hcCBhcyBiYWNrdXAg
dG8gc2JyawotICAgICAgKiBQbGFjZSBhbGwgaW50ZXJuYWwgc3RhdGUgaW4gbWFsbG9jX3N0YXRl
Ci0gICAgICAqIEludHJvZHVjZSBmYXN0YmlucyAoYWx0aG91Z2ggc2ltaWxhciB0byAyLjUuMSkK
LSAgICAgICogTWFueSBtaW5vciB0dW5pbmdzIGFuZCBjb3NtZXRpYyBpbXByb3ZlbWVudHMKLSAg
ICAgICogSW50cm9kdWNlIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTLCBVU0VfTUFMTE9DX0xP
Q0sgCi0gICAgICAqIEludHJvZHVjZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04sIE1PUkVDT1JFX0NP
TlRJR1VPVVMKLSAgICAgICAgVGhhbmtzIHRvIFRvbnkgRS4gQmVubmV0dCA8dGJlbm5ldHRAbnZp
ZGlhLmNvbT4gYW5kIG90aGVycy4KLSAgICAgICogSW5jbHVkZSBlcnJuby5oIHRvIHN1cHBvcnQg
ZGVmYXVsdCBmYWlsdXJlIGFjdGlvbi4KLQotICAgIFYyLjYuNiBTdW4gRGVjICA1IDA3OjQyOjE5
IDE5OTkgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQotICAgICAgKiByZXR1cm4gbnVsbCBmb3IgbmVn
YXRpdmUgYXJndW1lbnRzCi0gICAgICAqIEFkZGVkIFNldmVyYWwgV0lOMzIgY2xlYW51cHMgZnJv
bSBNYXJ0aW4gQy4gRm9uZyA8bWNmb25nIGF0IHlhaG9vLmNvbT4KLSAgICAgICAgICogQWRkICdM
QUNLU19TWVNfUEFSQU1fSCcgZm9yIHRob3NlIHN5c3RlbXMgd2l0aG91dCAnc3lzL3BhcmFtLmgn
Ci0gICAgICAgICAgKGUuZy4gV0lOMzIgcGxhdGZvcm1zKQotICAgICAgICAgKiBDbGVhbnVwIGhl
YWRlciBmaWxlIGluY2x1c2lvbiBmb3IgV0lOMzIgcGxhdGZvcm1zCi0gICAgICAgICAqIENsZWFu
dXAgY29kZSB0byBhdm9pZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlciBjb21wbGFpbnRz
Ci0gICAgICAgICAqIEFkZCAnVVNFX0RMX1BSRUZJWCcgdG8gcXVpY2tseSBhbGxvdyBjby1leGlz
dGVuY2Ugd2l0aCBleGlzdGluZwotICAgICAgICAgICBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5l
cwotICAgICAgICAgKiBTZXQgJ21hbGxvY19nZXRwYWdlc2l6ZScgZm9yIFdJTjMyIHBsYXRmb3Jt
cyAobmVlZHMgbW9yZSB3b3JrKQotICAgICAgICAgKiBVc2UgJ2Fzc2VydCcgcmF0aGVyIHRoYW4g
J0FTU0VSVCcgaW4gV0lOMzIgY29kZSB0byBjb25mb3JtIHRvCi0gICAgICAgICAgIHVzYWdlIG9m
ICdhc3NlcnQnIGluIG5vbi1XSU4zMiBjb2RlCi0gICAgICAgICAqIEltcHJvdmUgV0lOMzIgJ3Ni
cmsoKScgZW11bGF0aW9uJ3MgJ2ZpbmRSZWdpb24oKScgcm91dGluZSB0bwotICAgICAgICAgICBh
dm9pZCBpbmZpbml0ZSBsb29wCi0gICAgICAqIEFsd2F5cyBjYWxsICdmUkVlKCknIHJhdGhlciB0
aGFuICdmcmVlKCknCi0KLSAgICBWMi42LjUgV2VkIEp1biAxNyAxNTo1NzozMSAxOTk4ICBEb3Vn
IExlYSAgKGRsIGF0IGdlZSkKLSAgICAgICogRml4ZWQgb3JkZXJpbmcgcHJvYmxlbSB3aXRoIGJv
dW5kYXJ5LXN0YW1waW5nCi0KLSAgICBWMi42LjMgU3VuIE1heSAxOSAwODoxNzo1OCAxOTk2ICBE
b3VnIExlYSAgKGRsIGF0IGdlZSkKLSAgICAgICogQWRkZWQgcHZhbGxvYywgYXMgcmVjb21tZW5k
ZWQgYnkgSC5KLiBMaXUKLSAgICAgICogQWRkZWQgNjRiaXQgcG9pbnRlciBzdXBwb3J0IG1haW5s
eSBmcm9tIFdvbGZyYW0gR2xvZ2VyCi0gICAgICAqIEFkZGVkIGFub255bW91c2x5IGRvbmF0ZWQg
V0lOMzIgc2JyayBlbXVsYXRpb24KLSAgICAgICogTWFsbG9jLCBjYWxsb2MsIGdldHBhZ2VzaXpl
OiBhZGQgb3B0aW1pemF0aW9ucyBmcm9tIFJheW1vbmQgTmlqc3NlbgotICAgICAgKiBtYWxsb2Nf
ZXh0ZW5kX3RvcDogZml4IG1hc2sgZXJyb3IgdGhhdCBjYXVzZWQgd2FzdGFnZSBhZnRlcgotICAg
ICAgICBmb3JlaWduIHNicmtzCi0gICAgICAqIEFkZCBsaW51eCBtcmVtYXAgc3VwcG9ydCBjb2Rl
IGZyb20gSEogTGl1Ci0KLSAgICBWMi42LjIgVHVlIERlYyAgNSAwNjo1Mjo1NSAxOTk1ICBEb3Vn
IExlYSAgKGRsIGF0IGdlZSkKLSAgICAgICogSW50ZWdyYXRlZCBtb3N0IGRvY3VtZW50YXRpb24g
d2l0aCB0aGUgY29kZS4KLSAgICAgICogQWRkIHN1cHBvcnQgZm9yIG1tYXAsIHdpdGggaGVscCBm
cm9tCi0gICAgICAgIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSku
Ci0gICAgICAqIFVzZSBsYXN0X3JlbWFpbmRlciBpbiBtb3JlIGNhc2VzLgotICAgICAgKiBQYWNr
IGJpbnMgdXNpbmcgaWRlYSBmcm9tICBjb2xpbkBueXgxMC5jcy5kdS5lZHUKLSAgICAgICogVXNl
IG9yZGVyZWQgYmlucyBpbnN0ZWFkIG9mIGJlc3QtZml0IHRocmVzaGhvbGQKLSAgICAgICogRWxp
bWluYXRlIGJsb2NrLWxvY2FsIGRlY2xzIHRvIHNpbXBsaWZ5IHRyYWNpbmcgYW5kIGRlYnVnZ2lu
Zy4KLSAgICAgICogU3VwcG9ydCBhbm90aGVyIGNhc2Ugb2YgcmVhbGxvYyB2aWEgbW92ZSBpbnRv
IHRvcAotICAgICAgKiBGaXggZXJyb3Igb2NjdXJpbmcgd2hlbiBpbml0aWFsIHNicmtfYmFzZSBu
b3Qgd29yZC1hbGlnbmVkLgotICAgICAgKiBSZWx5IG9uIHBhZ2Ugc2l6ZSBmb3IgdW5pdHMgaW5z
dGVhZCBvZiBTQlJLX1VOSVQgdG8KLSAgICAgICAgYXZvaWQgc3VycHJpc2VzIGFib3V0IHNicmsg
YWxpZ25tZW50IGNvbnZlbnRpb25zLgotICAgICAgKiBBZGQgbWFsbGluZm8sIG1hbGxvcHQuIFRo
YW5rcyB0byBSYXltb25kIE5panNzZW4KLSAgICAgICAgKHJheW1vbmRAZXMuZWxlLnR1ZS5ubCkg
Zm9yIHRoZSBzdWdnZXN0aW9uLgotICAgICAgKiBBZGQgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9j
X3RyaW0gYW5kIHRvcF9wYWQgbWFsbG9wdCBwYXJhbWV0ZXIuCi0gICAgICAqIE1vcmUgcHJlY2F1
dGlvbnMgZm9yIGNhc2VzIHdoZXJlIG90aGVyIHJvdXRpbmVzIGNhbGwgc2JyaywKLSAgICAgICAg
Y291cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4K
LSAgICAgICogQWRkZWQgbWFjcm9zIGV0Yy4sIGFsbG93aW5nIHVzZSBpbiBsaW51eCBsaWJjIGZy
b20KLSAgICAgICAgSC5KLiBMdSAoaGpsQGdudS5haS5taXQuZWR1KQotICAgICAgKiBJbnZlcnRl
ZCB0aGlzIGhpc3RvcnkgbGlzdAotCi0gICAgVjIuNi4xIFNhdCBEZWMgIDIgMTQ6MTA6NTcgMTk5
NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCi0gICAgICAqIFJlLXR1bmVkIGFuZCBmaXhlZCB0byBi
ZWhhdmUgbW9yZSBuaWNlbHkgd2l0aCBWMi42LjAgY2hhbmdlcy4KLSAgICAgICogUmVtb3ZlZCBh
bGwgcHJlYWxsb2NhdGlvbiBjb2RlIHNpbmNlIHVuZGVyIGN1cnJlbnQgc2NoZW1lCi0gICAgICAg
IHRoZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMKLSAg
ICAgICAgdGhlIHdvcmsgc2F2ZWQgaW4gZ29vZCBjYXNlcyBmb3IgbW9zdCB0ZXN0IHByb2dyYW1z
LgotICAgICAgKiBObyBsb25nZXIgdXNlIHJldHVybiBsaXN0IG9yIHVuY29uc29saWRhdGVkIGJp
bnMgc2luY2UKLSAgICAgICAgbm8gc2NoZW1lIHVzaW5nIHRoZW0gY29uc2lzdGVudGx5IG91dHBl
cmZvcm1zIHRob3NlIHRoYXQgZG9uJ3QKLSAgICAgICAgZ2l2ZW4gYWJvdmUgY2hhbmdlcy4KLSAg
ICAgICogVXNlIGJlc3QgZml0IGZvciB2ZXJ5IGxhcmdlIGNodW5rcyB0byBwcmV2ZW50IHNvbWUg
d29yc3QtY2FzZXMuCi0gICAgICAqIEFkZGVkIHNvbWUgc3VwcG9ydCBmb3IgZGVidWdnaW5nCi0K
LSAgICBWMi42LjAgU2F0IE5vdiAgNCAwNzowNToyMyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdl
ZSkKLSAgICAgICogUmVtb3ZlZCBmb290ZXJzIHdoZW4gY2h1bmtzIGFyZSBpbiB1c2UuIFRoYW5r
cyB0bwotICAgICAgICBQYXVsIFdpbHNvbiAod2lsc29uQGNzLnRleGFzLmVkdSkgZm9yIHRoZSBz
dWdnZXN0aW9uLgotCi0gICAgVjIuNS40IFdlZCBOb3YgIDEgMDc6NTQ6NTEgMTk5NSAgRG91ZyBM
ZWEgIChkbCBhdCBnZWUpCi0gICAgICAqIEFkZGVkIG1hbGxvY190cmltLCB3aXRoIGhlbHAgZnJv
bSBXb2xmcmFtIEdsb2dlcgotICAgICAgICAod21nbG9ARGVudC5NRUQuVW5pLU11ZW5jaGVuLkRF
KS4KLQotICAgIFYyLjUuMyBUdWUgQXByIDI2IDEwOjE2OjAxIDE5OTQgIERvdWcgTGVhICAoZGwg
YXQgZykKLQotICAgIFYyLjUuMiBUdWUgQXByICA1IDE2OjIwOjQwIDE5OTQgIERvdWcgTGVhICAo
ZGwgYXQgZykKLSAgICAgICogcmVhbGxvYzogdHJ5IHRvIGV4cGFuZCBpbiBib3RoIGRpcmVjdGlv
bnMKLSAgICAgICogbWFsbG9jOiBzd2FwIG9yZGVyIG9mIGNsZWFuLWJpbiBzdHJhdGVneTsKLSAg
ICAgICogcmVhbGxvYzogb25seSBjb25kaXRpb25hbGx5IGV4cGFuZCBiYWNrd2FyZHMKLSAgICAg
ICogVHJ5IG5vdCB0byBzY2F2ZW5nZSB1c2VkIGJpbnMKLSAgICAgICogVXNlIGJpbiBjb3VudHMg
YXMgYSBndWlkZSB0byBwcmVhbGxvY2F0aW9uCi0gICAgICAqIE9jY2FzaW9uYWxseSBiaW4gcmV0
dXJuIGxpc3QgY2h1bmtzIGluIGZpcnN0IHNjYW4KLSAgICAgICogQWRkIGEgZmV3IG9wdGltaXph
dGlvbnMgZnJvbSBjb2xpbkBueXgxMC5jcy5kdS5lZHUKLQotICAgIFYyLjUuMSBTYXQgQXVnIDE0
IDE1OjQwOjQzIDE5OTMgIERvdWcgTGVhICAoZGwgYXQgZykKLSAgICAgICogZmFzdGVyIGJpbiBj
b21wdXRhdGlvbiAmIHNsaWdodGx5IGRpZmZlcmVudCBiaW5uaW5nCi0gICAgICAqIG1lcmdlZCBh
bGwgY29uc29saWRhdGlvbnMgdG8gb25lIHBhcnQgb2YgbWFsbG9jIHByb3BlcgotICAgICAgICAg
KGVsaW1pbmF0aW5nIG9sZCBtYWxsb2NfZmluZF9zcGFjZSAmIG1hbGxvY19jbGVhbl9iaW4pCi0g
ICAgICAqIFNjYW4gMiByZXR1cm5zIGNodW5rcyAobm90IGp1c3QgMSkKLSAgICAgICogUHJvcGFn
YXRlIGZhaWx1cmUgaW4gcmVhbGxvYyBpZiBtYWxsb2MgcmV0dXJucyAwCi0gICAgICAqIEFkZCBz
dHVmZiB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBub24tQU5TSSBjb21waWxlcnMKLSAgICAgICAg
ICBmcm9tIGtwdkByZXNlYXJjaC5hdHQuY29tCi0KLSAgICBWMi41IFNhdCBBdWcgIDcgMDc6NDE6
NTkgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCi0gICAgICAqIHJlbW92ZWQg
cG90ZW50aWFsIGZvciBvZGQgYWRkcmVzcyBhY2Nlc3MgaW4gcHJldl9jaHVuawotICAgICAgKiBy
ZW1vdmVkIGRlcGVuZGVuY3kgb24gZ2V0cGFnZXNpemUuaAotICAgICAgKiBtaXNjIGNvc21ldGlj
cyBhbmQgYSBiaXQgbW9yZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uCi0gICAgICAqIGFudGljb3Nt
ZXRpY3M6IG1hbmdsZWQgbmFtZXMgaW4gbWFjcm9zIHRvIGV2YWRlIGRlYnVnZ2VyIHN0cmFuZ2Vu
ZXNzCi0gICAgICAqIHRlc3RlZCBvbiBzcGFyYywgaHAtNzAwLCBkZWMtbWlwcywgcnM2MDAwCi0g
ICAgICAgICAgd2l0aCBnY2MgJiBuYXRpdmUgY2MgKGhwLCBkZWMgb25seSkgYWxsb3dpbmcKLSAg
ICAgICAgICBEZXRsZWZzICYgWm9ybiBjb21wYXJpc29uIHN0dWR5IChpbiBTSUdQTEFOIE5vdGlj
ZXMuKQotCi0gICAgVHJpYWwgdmVyc2lvbiBGcmkgQXVnIDI4IDEzOjE0OjI5IDE5OTIgIERvdWcg
TGVhICAoZGwgYXQgZy5vc3dlZ28uZWR1KQotICAgICAgKiBCYXNlZCBsb29zZWx5IG9uIGxpYmcr
Ky0xLjJYIG1hbGxvYy4gKEl0IHJldGFpbnMgc29tZSBvZiB0aGUgb3ZlcmFsbAotICAgICAgICAg
c3RydWN0dXJlIG9mIG9sZCB2ZXJzaW9uLCAgYnV0IG1vc3QgZGV0YWlscyBkaWZmZXIuKQotCi0q
LwpJbmRleDogV2ViQ29yZS9raHRtbC9taXNjL21haW5fdGhyZWFkX21hbGxvYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IGtodG1sL21pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmgKZGlmZiAtTiBXZWJD
b3JlL2todG1sL21pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmgKLS0tIFdlYkNvcmUva2h0bWwvbWlz
Yy9tYWluX3RocmVhZF9tYWxsb2MuaAkxNyBBdWcgMjAwNSAwMTowNzoyNiAtMDAwMAkxLjQKKysr
IFdlYkNvcmUva2h0bWwvbWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaAkxIEphbiAxOTcwIDAwOjAw
OjAwIC0wMDAwCkBAIC0xLDQ0ICswLDAgQEAKLS8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAtKi0K
LS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz
MCwKLSAqICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBL
SFRNTF9NQUlOX1RIUkVBRF9NQUxMT0NfSAotI2RlZmluZSBLSFRNTF9NQUlOX1RIUkVBRF9NQUxM
T0NfSAotCi0vLyBUaGlzIGlzIGEgY29weSBvZiBkbG1hbGxvYywgYSBmYXN0IHNpbmdsZS10aHJl
YWRlZCBtYWxsb2MgaW1wbGVtZW50YXRpb24uCi0vLyBUaGVyZWZvcmUsIHRoZXNlIGZ1bmN0aW9u
cyBzaG91bGQgb25seSBiZSB1c2VkIG9uIHRoZSBtYWluIHRocmVhZC4KLQotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotCi1uYW1lc3BhY2Uga2h0bWwgewotCi12b2lkICptYWluX3RocmVhZF9tYWxsb2Mo
c2l6ZV90IG4pOwotdm9pZCAqbWFpbl90aHJlYWRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBz
aXplX3QgZWxlbWVudF9zaXplKTsKLXZvaWQgbWFpbl90aHJlYWRfZnJlZSh2b2lkKiBwKTsKLXZv
aWQgKm1haW5fdGhyZWFkX3JlYWxsb2Modm9pZCogcCwgc2l6ZV90IG4pOwotCi0jZGVmaW5lIE1B
SU5fVEhSRUFEX0FMTE9DQVRFRCBcCi12b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHMpIHsgcmV0
dXJuIGtodG1sOjptYWluX3RocmVhZF9tYWxsb2Mocyk7IH0gXAotdm9pZCBvcGVyYXRvciBkZWxl
dGUodm9pZCogcCkgeyBraHRtbDo6bWFpbl90aHJlYWRfZnJlZShwKTsgfQotCi19Ci0KLSNlbmRp
ZiAvKiBLSFRNTF9NQUlOX1RIUkVBRF9NQUxMT0NfSCAqLwpJbmRleDogV2ViQ29yZS9raHRtbC9t
aXNjL3NoYXJlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L21pc2Mvc2hhcmVkLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1wIC11IC1yMS43
IFdlYkNvcmUva2h0bWwvbWlzYy9zaGFyZWQuaAotLS0gV2ViQ29yZS9raHRtbC9taXNjL3NoYXJl
ZC5oCTMwIEF1ZyAyMDA1IDIzOjU2OjE1IC0wMDAwCTEuNworKysgV2ViQ29yZS9raHRtbC9taXNj
L3NoYXJlZC5oCTI3IFNlcCAyMDA1IDA4OjQ1OjMyIC0wMDAwCkBAIC0xLDcgKzEsNyBAQAogI2lm
bmRlZiBTSEFSRURfSAogI2RlZmluZSBTSEFSRURfSAogCi0jaW5jbHVkZSA8a2pzL3NoYXJlZF9w
dHIuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9TaGFyZWRQdHIuaD4KIAogbmFtZXNwYWNlIGtodG1s
IHsKIApAQCAtNjIsMTAgKzYyLDYgQEAgcHJpdmF0ZToKICAgICBUcmVlU2hhcmVkICZvcGVyYXRv
cj0oY29uc3QgVHJlZVNoYXJlZCAmKTsKIH07CiAKLXVzaW5nIEtYTUxDb3JlOjpTaGFyZWRQdHI7
Ci11c2luZyBLWE1MQ29yZTo6c3RhdGljX3BvaW50ZXJfY2FzdDsKLXVzaW5nIEtYTUxDb3JlOjpj
b25zdF9wb2ludGVyX2Nhc3Q7Ci0KIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2todG1sL3Jl
bmRlcmluZy9yZW5kZXJfc3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuODkKZGlmZiAtcCAtdSAtcjEuODkgV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0
eWxlLmgKLS0tIFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oCTMwIEF1ZyAy
MDA1IDIxOjM2OjI0IC0wMDAwCTEuODkKKysrIFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9zdHlsZS5oCTI3IFNlcCAyMDA1IDA4OjQ1OjMzIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBACiAj
aW5jbHVkZSA8cXBhbGV0dGUuaD4KICNpbmNsdWRlIDxxYXBwbGljYXRpb24uaD4KIAotI2luY2x1
ZGUgIm1pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvRmFzdE1h
bGxvYy5oPgogI2luY2x1ZGUgIm1pc2Mva2h0bWxsYXlvdXQuaCIKICNpbmNsdWRlICJtaXNjL3No
YXJlZC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9mb250LmgiCkBAIC0zNjMsMTQgKzM2MywxMiBA
QCBwdWJsaWM6CiAKIGVudW0gRU1hcmdpbkNvbGxhcHNlIHsgTUNPTExBUFNFLCBNU0VQQVJBVEUs
IE1ESVNDQVJEIH07CiAKLWNsYXNzIFN0eWxlU3Vycm91bmREYXRhIDogcHVibGljIFNoYXJlZDxT
dHlsZVN1cnJvdW5kRGF0YT4KK2NsYXNzIFN0eWxlU3Vycm91bmREYXRhIDogcHVibGljIFNoYXJl
ZDxTdHlsZVN1cnJvdW5kRGF0YT4sIHB1YmxpYyBGYXN0QWxsb2NhdGVkCiB7CiBwdWJsaWM6CiAg
ICAgU3R5bGVTdXJyb3VuZERhdGEoKTsKICAgICBTdHlsZVN1cnJvdW5kRGF0YShjb25zdCBTdHls
ZVN1cnJvdW5kRGF0YSYgbyk7CiAgICAgCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlU3Vycm91bmREYXRhJiBvKSBjb25zdDsKICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVTdXJyb3VuZERhdGEmIG8pIGNvbnN0IHsKICAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gbyk7CkBAIC0zODYsMTQgKzM4NCwxMiBAQCBwdWJsaWM6
CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8g
Qm94IGF0dHJpYnV0ZXMuIE5vdCBpbmhlcml0ZWQuCiAKLWNsYXNzIFN0eWxlQm94RGF0YSA6IHB1
YmxpYyBTaGFyZWQ8U3R5bGVCb3hEYXRhPgorY2xhc3MgU3R5bGVCb3hEYXRhIDogcHVibGljIFNo
YXJlZDxTdHlsZUJveERhdGE+LCBwdWJsaWMgRmFzdEFsbG9jYXRlZAogewogcHVibGljOgogICAg
IFN0eWxlQm94RGF0YSgpOwogICAgIFN0eWxlQm94RGF0YShjb25zdCBTdHlsZUJveERhdGEmIG8p
OwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgLy8gY29weSBhbmQgYXNzaWdu
bWVudAogLy8gICAgU3R5bGVCb3hEYXRhKGNvbnN0IFN0eWxlQm94RGF0YSAmb3RoZXIpOwogLy8g
ICAgY29uc3QgU3R5bGVCb3hEYXRhICZvcGVyYXRvciA9IChjb25zdCBTdHlsZUJveERhdGEgJm90
aGVyKTsKQEAgLTQ2NSwxNSArNDYxLDEzIEBAIGVudW0gRVVuaWNvZGVCaWRpIHsKICAgICBVQk5v
cm1hbCwgRW1iZWQsIE92ZXJyaWRlCiB9OwogCi1jbGFzcyBTdHlsZVZpc3VhbERhdGEgOiBwdWJs
aWMgU2hhcmVkPFN0eWxlVmlzdWFsRGF0YT4KK2NsYXNzIFN0eWxlVmlzdWFsRGF0YSA6IHB1Ymxp
YyBTaGFyZWQ8U3R5bGVWaXN1YWxEYXRhPiwgcHVibGljIEZhc3RBbGxvY2F0ZWQKIHsKIHB1Ymxp
YzoKICAgICBTdHlsZVZpc3VhbERhdGEoKTsKICAgICB+U3R5bGVWaXN1YWxEYXRhKCk7CiAgICAg
U3R5bGVWaXN1YWxEYXRhKGNvbnN0IFN0eWxlVmlzdWFsRGF0YSYgbyApOwogCi0gICAgTUFJTl9U
SFJFQURfQUxMT0NBVEVEOwotCiAgICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBTdHlsZVZpc3Vh
bERhdGEgJm8gKSBjb25zdCB7CiAJcmV0dXJuICggY2xpcCA9PSBvLmNsaXAgJiYKICAgICAgICAg
ICAgICAgICAgaGFzQ2xpcCA9PSBvLmhhc0NsaXAgJiYKQEAgLTUxMiwxMyArNTA2LDExIEBAIGVu
dW0gRUJhY2tncm91bmRSZXBlYXQgewogICAgIFJFUEVBVCwgUkVQRUFUX1gsIFJFUEVBVF9ZLCBO
T19SRVBFQVQKIH07CiAKLXN0cnVjdCBCYWNrZ3JvdW5kTGF5ZXIgeworc3RydWN0IEJhY2tncm91
bmRMYXllciA6IHB1YmxpYyBGYXN0QWxsb2NhdGVkIHsKIHB1YmxpYzoKICAgICBCYWNrZ3JvdW5k
TGF5ZXIoKTsKICAgICB+QmFja2dyb3VuZExheWVyKCk7CiAKLSAgICBNQUlOX1RIUkVBRF9BTExP
Q0FURUQ7Ci0KICAgICBDYWNoZWRJbWFnZSogYmFja2dyb3VuZEltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZTsgfQogICAgIExlbmd0aCBiYWNrZ3JvdW5kWFBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV94UG9zaXRpb247IH0KICAgICBMZW5ndGggYmFja2dyb3VuZFlQb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1feVBvc2l0aW9uOyB9CkBAIC02MDEsMTUgKzU5MywxMyBAQCBwdWJsaWM6
CiAgICAgQmFja2dyb3VuZExheWVyKiBtX25leHQ7CiB9OwogCi1jbGFzcyBTdHlsZUJhY2tncm91
bmREYXRhIDogcHVibGljIFNoYXJlZDxTdHlsZUJhY2tncm91bmREYXRhPgorY2xhc3MgU3R5bGVC
YWNrZ3JvdW5kRGF0YSA6IHB1YmxpYyBTaGFyZWQ8U3R5bGVCYWNrZ3JvdW5kRGF0YT4sIHB1Ymxp
YyBGYXN0QWxsb2NhdGVkCiB7CiBwdWJsaWM6CiAgICAgU3R5bGVCYWNrZ3JvdW5kRGF0YSgpOwog
ICAgIH5TdHlsZUJhY2tncm91bmREYXRhKCkge30KICAgICBTdHlsZUJhY2tncm91bmREYXRhKGNv
bnN0IFN0eWxlQmFja2dyb3VuZERhdGEmIG8gKTsKIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRF
RDsKLQogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUJhY2tncm91bmREYXRhJiBvKSBj
b25zdDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVCYWNrZ3JvdW5kRGF0YSAmbykg
Y29uc3QgewogCXJldHVybiAhKCp0aGlzID09IG8pOwpAQCAtNjI2LDE0ICs2MTYsMTIgQEAgcHVi
bGljOgogZW51bSBFTWFycXVlZUJlaGF2aW9yIHsgTU5PTkUsIE1TQ1JPTEwsIE1TTElERSwgTUFM
VEVSTkFURSwgTVVORlVSTCB9OwogZW51bSBFTWFycXVlZURpcmVjdGlvbiB7IE1BVVRPID0gMCwg
TUxFRlQgPSAxLCBNUklHSFQgPSAtMSwgTVVQID0gMiwgTURPV04gPSAtMiwgTUZPUldBUkQgPSAz
LCBNQkFDS1dBUkQgPSAtMyB9OwogCi1jbGFzcyBTdHlsZU1hcnF1ZWVEYXRhIDogcHVibGljIFNo
YXJlZDxTdHlsZU1hcnF1ZWVEYXRhPgorY2xhc3MgU3R5bGVNYXJxdWVlRGF0YSA6IHB1YmxpYyBT
aGFyZWQ8U3R5bGVNYXJxdWVlRGF0YT4sIHB1YmxpYyBGYXN0QWxsb2NhdGVkCiB7CiBwdWJsaWM6
CiAgICAgU3R5bGVNYXJxdWVlRGF0YSgpOwogICAgIFN0eWxlTWFycXVlZURhdGEoY29uc3QgU3R5
bGVNYXJxdWVlRGF0YSYgbyk7CiAgICAgCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlTWFycXVlZURhdGEmIG8pIGNvbnN0OwogICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZU1hcnF1ZWVEYXRhJiBvKSBjb25zdCB7CiAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG8pOwpAQCAtNjU2LDE0ICs2NDQsMTIgQEAgZW51bSBFQm94
T3JpZW50IHsgSE9SSVpPTlRBTCwgVkVSVElDQUwgfQogZW51bSBFQm94TGluZXMgeyBTSU5HTEUs
IE1VTFRJUExFIH07CiBlbnVtIEVCb3hEaXJlY3Rpb24geyBCTk9STUFMLCBCUkVWRVJTRSB9Owog
Ci1jbGFzcyBTdHlsZUZsZXhpYmxlQm94RGF0YSA6IHB1YmxpYyBTaGFyZWQ8U3R5bGVGbGV4aWJs
ZUJveERhdGE+CitjbGFzcyBTdHlsZUZsZXhpYmxlQm94RGF0YSA6IHB1YmxpYyBTaGFyZWQ8U3R5
bGVGbGV4aWJsZUJveERhdGE+LCBwdWJsaWMgRmFzdEFsbG9jYXRlZAogewogcHVibGljOgogICAg
IFN0eWxlRmxleGlibGVCb3hEYXRhKCk7CiAgICAgU3R5bGVGbGV4aWJsZUJveERhdGEoY29uc3Qg
U3R5bGVGbGV4aWJsZUJveERhdGEmIG8pOwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwot
CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlRmxleGlibGVCb3hEYXRhJiBvKSBjb25z
dDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVGbGV4aWJsZUJveERhdGEgJm8pIGNv
bnN0IHsKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gbyk7CkBAIC02ODAsMTUgKzY2NiwxMyBA
QCBwdWJsaWM6CiB9OwogCiAvLyBUaGlzIHN0cnVjdCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBz
aGFkb3dzIGZvciB0aGUgdGV4dC1zaGFkb3cgYW5kIGJveC1zaGFkb3cgcHJvcGVydGllcy4KLXN0
cnVjdCBTaGFkb3dEYXRhIHsKK3N0cnVjdCBTaGFkb3dEYXRhIDogcHVibGljIEZhc3RBbGxvY2F0
ZWQgewogICAgIFNoYWRvd0RhdGEoaW50IF94LCBpbnQgX3ksIGludCBfYmx1ciwgY29uc3QgUUNv
bG9yJiBfY29sb3IpCiAgICAgOngoX3gpLCB5KF95KSwgYmx1cihfYmx1ciksIGNvbG9yKF9jb2xv
ciksIG5leHQoMCkge30KICAgICBTaGFkb3dEYXRhKGNvbnN0IFNoYWRvd0RhdGEmIG8pOwogICAg
IAogICAgIH5TaGFkb3dEYXRhKCkgeyBkZWxldGUgbmV4dDsgfQogCi0gICAgTUFJTl9USFJFQURf
QUxMT0NBVEVEOwotCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNoYWRvd0RhdGEmIG8pIGNv
bnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTaGFkb3dEYXRhICZvKSBjb25zdCB7CiAg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG8pOwpAQCAtNzc3LDE1ICs3NjEsMTMgQEAgZW51bSBF
QXBwZWFyYW5jZSB7CiAvLyBUaGlzIHN0cnVjdCBpcyBmb3IgcmFyZWx5IHVzZWQgbm9uLWluaGVy
aXRlZCBDU1MzIHByb3BlcnRpZXMuICBCeSBncm91cGluZyB0aGVtIHRvZ2V0aGVyLAogLy8gd2Ug
c2F2ZSBzcGFjZSwgYW5kIG9ubHkgYWxsb2NhdGUgdGhpcyBvYmplY3Qgd2hlbiBzb21lb25lIGFj
dHVhbGx5IHVzZXMKIC8vIGEgbm9uLWluaGVyaXRlZCBDU1MzIHByb3BlcnR5LgotY2xhc3MgU3R5
bGVDU1MzTm9uSW5oZXJpdGVkRGF0YSA6IHB1YmxpYyBTaGFyZWQ8U3R5bGVDU1MzTm9uSW5oZXJp
dGVkRGF0YT4KK2NsYXNzIFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEgOiBwdWJsaWMgU2hhcmVk
PFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGE+LCBwdWJsaWMgRmFzdEFsbG9jYXRlZAogewogcHVi
bGljOgogICAgIFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEoKTsKICAgICB+U3R5bGVDU1MzTm9u
SW5oZXJpdGVkRGF0YSgpOwogICAgIFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEoY29uc3QgU3R5
bGVDU1MzTm9uSW5oZXJpdGVkRGF0YSYgbyk7CiAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7
Ci0KICNpZm5kZWYgS0hUTUxfTk9fWEJMCiAgICAgYm9vbCBiaW5kaW5nc0VxdWl2YWxlbnQoY29u
c3QgU3R5bGVDU1MzTm9uSW5oZXJpdGVkRGF0YSYgbykgY29uc3Q7CiAjZW5kaWYKQEAgLTgxOSwx
NSArODAxLDEzIEBAIHB1YmxpYzoKIC8vIFRoaXMgc3RydWN0IGlzIGZvciByYXJlbHkgdXNlZCBp
bmhlcml0ZWQgQ1NTMyBwcm9wZXJ0aWVzLiAgQnkgZ3JvdXBpbmcgdGhlbSB0b2dldGhlciwKIC8v
IHdlIHNhdmUgc3BhY2UsIGFuZCBvbmx5IGFsbG9jYXRlIHRoaXMgb2JqZWN0IHdoZW4gc29tZW9u
ZSBhY3R1YWxseSB1c2VzCiAvLyBhbiBpbmhlcml0ZWQgQ1NTMyBwcm9wZXJ0eS4KLWNsYXNzIFN0
eWxlQ1NTM0luaGVyaXRlZERhdGEgOiBwdWJsaWMgU2hhcmVkPFN0eWxlQ1NTM0luaGVyaXRlZERh
dGE+CitjbGFzcyBTdHlsZUNTUzNJbmhlcml0ZWREYXRhIDogcHVibGljIFNoYXJlZDxTdHlsZUNT
UzNJbmhlcml0ZWREYXRhPiwgcHVibGljIEZhc3RBbGxvY2F0ZWQKIHsKIHB1YmxpYzoKICAgICBT
dHlsZUNTUzNJbmhlcml0ZWREYXRhKCk7CiAgICAgflN0eWxlQ1NTM0luaGVyaXRlZERhdGEoKTsK
ICAgICBTdHlsZUNTUzNJbmhlcml0ZWREYXRhKGNvbnN0IFN0eWxlQ1NTM0luaGVyaXRlZERhdGEm
IG8pOwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFN0eWxlQ1NTM0luaGVyaXRlZERhdGEmIG8pIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBTdHlsZUNTUzNJbmhlcml0ZWREYXRhICZvKSBjb25zdCB7CiAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG8pOwpAQCAtODgyLDggKzg2Miw2IEBAIHB1YmxpYzoKICAgICB+U3R5
bGVJbmhlcml0ZWREYXRhKCk7CiAgICAgU3R5bGVJbmhlcml0ZWREYXRhKGNvbnN0IFN0eWxlSW5o
ZXJpdGVkRGF0YSYgbyApOwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotICAgIAogICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUluaGVyaXRlZERhdGEmIG8pIGNvbnN0OwogICAg
IGJvb2wgb3BlcmF0b3IgIT0gKCBjb25zdCBTdHlsZUluaGVyaXRlZERhdGEgJm8gKSBjb25zdCB7
CiAJcmV0dXJuICEoKnRoaXMgPT0gbyk7CkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb20yX2V2
ZW50c2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94
bWwvZG9tMl9ldmVudHNpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAtcCAt
dSAtcjEuMzAgV2ViQ29yZS9raHRtbC94bWwvZG9tMl9ldmVudHNpbXBsLmgKLS0tIFdlYkNvcmUv
a2h0bWwveG1sL2RvbTJfZXZlbnRzaW1wbC5oCTE2IFNlcCAyMDA1IDIyOjQyOjE5IC0wMDAwCTEu
MzAKKysrIFdlYkNvcmUva2h0bWwveG1sL2RvbTJfZXZlbnRzaW1wbC5oCTI3IFNlcCAyMDA1IDA4
OjQ1OjMzIC0wMDAwCkBAIC00NCwxNSArNDQsMTMgQEAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKIGNs
YXNzIE5vZGVJbXBsOwogY2xhc3MgQ2xpcGJvYXJkSW1wbDsKIAotY2xhc3MgRXZlbnRJbXBsIDog
cHVibGljIGtodG1sOjpTaGFyZWQ8RXZlbnRJbXBsPgorY2xhc3MgRXZlbnRJbXBsIDogcHVibGlj
IGtodG1sOjpTaGFyZWQ8RXZlbnRJbXBsPiwgcHVibGljIEZhc3RBbGxvY2F0ZWQKIHsKIHB1Ymxp
YzoKICAgICBFdmVudEltcGwoKTsKICAgICBFdmVudEltcGwoY29uc3QgQXRvbWljU3RyaW5nICZ0
eXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKTsKICAgICB2aXJ0dWFs
IH5FdmVudEltcGwoKTsKIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogICAgIGNvbnN0
IEF0b21pY1N0cmluZyAmdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIE5vZGVJ
bXBsICp0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQogICAgIHZvaWQgc2V0VGFy
Z2V0KE5vZGVJbXBsICp0YXJnZXQpOwpAQCAtMzYxLDEzICszNTksMTEgQEAgcHJpdmF0ZToKICAg
ICBpbnQgbV93aGVlbERlbHRhOwogfTsKIAotY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIg
eworY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgRmFzdEFsbG9jYXRlZCB7
CiBwdWJsaWM6CiAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
ICZldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpOwog
ICAgIH5SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcigpOwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NB
VEVEOwotICAgIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9ldmVudFR5cGU7IH0KICAgICBFdmVudExpc3RlbmVyICpsaXN0ZW5lcigpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdGVuZXI7IH0KICAgICBib29sIHVzZUNhcHR1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3VzZUNhcHR1cmU7IH0KQEAgLTM4NSwxMyArMzgxLDExIEBAIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXMKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgJmEsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
ICZiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KIAogLy8gU3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJ
RSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQotY2xhc3MgQ2xpcGJv
YXJkSW1wbCA6IHB1YmxpYyBraHRtbDo6U2hhcmVkPENsaXBib2FyZEltcGw+IHsKK2NsYXNzIENs
aXBib2FyZEltcGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxDbGlwYm9hcmRJbXBsPiwgcHVibGlj
IEZhc3RBbGxvY2F0ZWQgewogcHVibGljOgogICAgIENsaXBib2FyZEltcGwoKSB7IH0KICAgICB2
aXJ0dWFsIH5DbGlwYm9hcmRJbXBsKCk7CiAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0g
ICAgCiAgICAgLy8gSXMgdGhpcyBvcGVyYXRpb24gYSBkcmFnLWRyb3Agb3IgYSBjb3B5LXBhc3Rl
PwogICAgIHZpcnR1YWwgYm9vbCBpc0ZvckRyYWdnaW5nKCkgY29uc3QgPSAwOwogCkluZGV4OiBX
ZWJDb3JlL2todG1sL3htbC9kb20yX3JhbmdlaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb20yX3JhbmdlaW1wbC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjI3CmRpZmYgLXAgLXUgLXIxLjI3IFdlYkNvcmUva2h0bWwveG1sL2RvbTJfcmFu
Z2VpbXBsLmgKLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmgJMTYgU2VwIDIw
MDUgMjI6NDI6MTkgLTAwMDAJMS4yNworKysgV2ViQ29yZS9raHRtbC94bWwvZG9tMl9yYW5nZWlt
cGwuaAkyNyBTZXAgMjAwNSAwODo0NTozNCAtMDAwMApAQCAtMjksNyArMjksNyBAQAogCiAjaW5j
bHVkZSAiZG9tL2RvbTJfcmFuZ2UuaCIKICNpbmNsdWRlICJtaXNjL3NoYXJlZC5oIgotI2luY2x1
ZGUgIm1pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvRmFzdE1h
bGxvYy5oPgogCiBuYW1lc3BhY2UgRE9NIHsKIApAQCAtMzksNyArMzksNyBAQCBjbGFzcyBET01T
dHJpbmc7CiBjbGFzcyBOb2RlSW1wbDsKIGNsYXNzIFBvc2l0aW9uOwogCi1jbGFzcyBSYW5nZUlt
cGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxSYW5nZUltcGw+CitjbGFzcyBSYW5nZUltcGwgOiBw
dWJsaWMga2h0bWw6OlNoYXJlZDxSYW5nZUltcGw+LCBwdWJsaWMgRmFzdEFsbG9jYXRlZAogewog
ICAgIGZyaWVuZCBjbGFzcyBEb2N1bWVudEltcGw7CiBwdWJsaWM6CkBAIC01MCw4ICs1MCw2IEBA
IHB1YmxpYzoKIAogICAgIH5SYW5nZUltcGwoKTsKIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRF
RDsKLSAgICAKICAgICBOb2RlSW1wbCAqc3RhcnRDb250YWluZXIoaW50ICZleGNlcHRpb25jb2Rl
KSBjb25zdDsKICAgICBpbnQgc3RhcnRPZmZzZXQoaW50ICZleGNlcHRpb25jb2RlKSBjb25zdDsK
ICAgICBOb2RlSW1wbCAqZW5kQ29udGFpbmVyKGludCAmZXhjZXB0aW9uY29kZSkgY29uc3Q7CkBA
IC0xMjUsNyArMTIzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGNvbnRhaW5lZEJ5UmVhZE9ubHko
KSBjb25zdDsKIH07CiAKLWtodG1sOjpTaGFyZWRQdHI8UmFuZ2VJbXBsPiByYW5nZU9mQ29udGVu
dHMoTm9kZUltcGwgKm5vZGUpOworU2hhcmVkUHRyPFJhbmdlSW1wbD4gcmFuZ2VPZkNvbnRlbnRz
KE5vZGVJbXBsICpub2RlKTsKIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJhbmdlSW1wbCAmLCBj
b25zdCBSYW5nZUltcGwgJik7CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJhbmdlSW1w
bCAmYSwgY29uc3QgUmFuZ2VJbXBsICZiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KSW5kZXg6IFdl
YkNvcmUva2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb20yX3RyYXZlcnNhbGltcGwuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC1wIC11IC1yMS4xMSBXZWJDb3JlL2todG1sL3htbC9k
b20yX3RyYXZlcnNhbGltcGwuaAotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9tMl90cmF2ZXJzYWxp
bXBsLmgJMTYgU2VwIDIwMDUgMjI6NDI6MTkgLTAwMDAJMS4xMQorKysgV2ViQ29yZS9raHRtbC94
bWwvZG9tMl90cmF2ZXJzYWxpbXBsLmgJMjcgU2VwIDIwMDUgMDg6NDU6MzQgLTAwMDAKQEAgLTI4
LDIxICsyOCwxOSBAQAogCiAjaW5jbHVkZSAiZG9tL2RvbTJfdHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAibWlzYy9zaGFyZWQuaCIKLSNpbmNsdWRlICJtaXNjL21haW5fdGhyZWFkX21hbGxvYy5oIgor
I2luY2x1ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2MuaD4KIAogbmFtZXNwYWNlIERPTSB7CiAKIGNs
YXNzIE5vZGVJbXBsOwogY2xhc3MgRG9jdW1lbnRJbXBsOwogCi1jbGFzcyBOb2RlRmlsdGVySW1w
bCA6IHB1YmxpYyBraHRtbDo6U2hhcmVkPE5vZGVGaWx0ZXJJbXBsPgorY2xhc3MgTm9kZUZpbHRl
ckltcGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxOb2RlRmlsdGVySW1wbD4sIHB1YmxpYyBGYXN0
QWxsb2NhdGVkCiB7CiBwdWJsaWM6CiAgICAgTm9kZUZpbHRlckltcGwoTm9kZUZpbHRlckNvbmRp
dGlvbiAqKTsKICAgICB+Tm9kZUZpbHRlckltcGwoKTsKICAgICAKLSAgICBNQUlOX1RIUkVBRF9B
TExPQ0FURUQ7Ci0gICAgCiAgICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlSW1wbCAqKSBjb25zdDsK
ICAgICAKIHByaXZhdGU6CkBAIC01MiwxNCArNTAsMTIgQEAgcHJpdmF0ZToKICAgICBOb2RlRmls
dGVyQ29uZGl0aW9uICptX2NvbmRpdGlvbjsKIH07CiAKLWNsYXNzIFRyYXZlcnNhbEltcGwgOiBw
dWJsaWMga2h0bWw6OlNoYXJlZDxUcmF2ZXJzYWxJbXBsPgorY2xhc3MgVHJhdmVyc2FsSW1wbCA6
IHB1YmxpYyBraHRtbDo6U2hhcmVkPFRyYXZlcnNhbEltcGw+LCBwdWJsaWMgRmFzdEFsbG9jYXRl
ZAogewogcHVibGljOgogICAgIFRyYXZlcnNhbEltcGwoTm9kZUltcGwgKiwgaW50IHdoYXRUb1No
b3csIE5vZGVGaWx0ZXJJbXBsICosIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7CiAgICAg
flRyYXZlcnNhbEltcGwoKTsKIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLSAgICAKICAg
ICBOb2RlSW1wbCAqcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdDsgfQogICAgIHVuc2lnbmVk
IHdoYXRUb1Nob3coKSBjb25zdCB7IHJldHVybiBtX3doYXRUb1Nob3c7IH0KICAgICBOb2RlRmls
dGVySW1wbCAqZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXI7IH0KSW5kZXg6IFdlYkNv
cmUva2h0bWwveG1sL2RvbTJfdmlld3NpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwveG1sL2RvbTJfdmlld3NpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IFdlYkNvcmUva2h0bWwveG1sL2RvbTJfdmlld3NpbXBs
LmgKLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbTJfdmlld3NpbXBsLmgJMTIgTWF5IDIwMDUgMTc6
MTE6MjIgLTAwMDAJMS42CisrKyBXZWJDb3JlL2todG1sL3htbC9kb20yX3ZpZXdzaW1wbC5oCTI3
IFNlcCAyMDA1IDA4OjQ1OjM0IC0wMDAwCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJj
c3MvY3NzX3ZhbHVlaW1wbC5oIgogI2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCi0jaW5jbHVkZSAi
bWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9GYXN0TWFsbG9j
Lmg+CiAKIG5hbWVzcGFjZSBET00gewogCkBAIC0zNSwxNCArMzUsMTIgQEAgY2xhc3MgRWxlbWVu
dEltcGw7CiBjbGFzcyBET01TdHJpbmdJbXBsOwogCiAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZl
bCAyOgotY2xhc3MgQWJzdHJhY3RWaWV3SW1wbCA6IHB1YmxpYyBraHRtbDo6U2hhcmVkPEFic3Ry
YWN0Vmlld0ltcGw+CitjbGFzcyBBYnN0cmFjdFZpZXdJbXBsIDogcHVibGljIGtodG1sOjpTaGFy
ZWQ8QWJzdHJhY3RWaWV3SW1wbD4sIHB1YmxpYyBGYXN0QWxsb2NhdGVkCiB7CiBwdWJsaWM6CiAg
ICAgQWJzdHJhY3RWaWV3SW1wbChEb2N1bWVudEltcGwgKl9kb2N1bWVudCk7CiAgICAgfkFic3Ry
YWN0Vmlld0ltcGwoKTsKIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLSAgICAKICAgICBE
b2N1bWVudEltcGwgKmRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAg
IENTU1N0eWxlRGVjbGFyYXRpb25JbXBsICpnZXRDb21wdXRlZFN0eWxlKEVsZW1lbnRJbXBsICpl
bHQsIERPTVN0cmluZ0ltcGwgKnBzZXVkb0VsdCk7CiBwcm90ZWN0ZWQ6CkluZGV4OiBXZWJDb3Jl
L2todG1sL3htbC9kb21fZG9jaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL3htbC9kb21fZG9jaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEy
NwpkaWZmIC1wIC11IC1yMS4xMjcgV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuaAotLS0g
V2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuaAkyMyBTZXAgMjAwNSAwMzoyODoyOCAtMDAw
MAkxLjEyNworKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuaAkyNyBTZXAgMjAwNSAw
ODo0NTozNCAtMDAwMApAQCAtMTI1LDE0ICsxMjUsMTIgQEAgbmFtZXNwYWNlIERPTSB7CiAgICAg
ICAgIH0KICAgICB9OwogICAgIAotY2xhc3MgRE9NSW1wbGVtZW50YXRpb25JbXBsIDogcHVibGlj
IGtodG1sOjpTaGFyZWQ8RE9NSW1wbGVtZW50YXRpb25JbXBsPgorY2xhc3MgRE9NSW1wbGVtZW50
YXRpb25JbXBsIDogcHVibGljIGtodG1sOjpTaGFyZWQ8RE9NSW1wbGVtZW50YXRpb25JbXBsPiwg
cHVibGljIEZhc3RBbGxvY2F0ZWQKIHsKIHB1YmxpYzoKICAgICBET01JbXBsZW1lbnRhdGlvbklt
cGwoKTsKICAgICB+RE9NSW1wbGVtZW50YXRpb25JbXBsKCk7CiAKLSAgICBNQUlOX1RIUkVBRF9B
TExPQ0FURUQ7Ci0KICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIERPTUltcGxl
bWVudGF0aW9uCiAgICAgYm9vbCBoYXNGZWF0dXJlICggY29uc3QgRE9NU3RyaW5nICZmZWF0dXJl
LCBjb25zdCBET01TdHJpbmcgJnZlcnNpb24gKTsKICAgICBEb2N1bWVudFR5cGVJbXBsICpjcmVh
dGVEb2N1bWVudFR5cGUoIGNvbnN0IERPTVN0cmluZyAmcXVhbGlmaWVkTmFtZSwgY29uc3QgRE9N
U3RyaW5nICZwdWJsaWNJZCwKSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2Rv
bV9lbGVtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODIKZGlmZiAtcCAtdSAt
cjEuODIgV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAotLS0gV2ViQ29yZS9r
aHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAkxNiBTZXAgMjAwNSAyMjo0MjoyMCAtMDAwMAkx
LjgyCisrKyBXZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCTI3IFNlcCAyMDA1
IDA4OjQ1OjM1IC0wMDAwCkBAIC05NjUsNyArOTY1LDcgQEAgdm9pZCBOYW1lZEF0dHJNYXBJbXBs
OjpjbGVhckF0dHJpYnV0ZXMoKQogICAgICAgICAgICAgICAgIGF0dHJzW2ldLT5tX2ltcGwtPm1f
ZWxlbWVudCA9IDA7CiAgICAgICAgICAgICBhdHRyc1tpXS0+ZGVyZWYoKTsKICAgICAgICAgfQot
ICAgICAgICBtYWluX3RocmVhZF9mcmVlKGF0dHJzKTsKKyAgICAgICAgZmFzdEZyZWUoYXR0cnMp
OwogICAgICAgICBhdHRycyA9IDA7CiAgICAgfQogICAgIGxlbiA9IDA7CkBAIC05OTYsNyArOTk2
LDcgQEAgTmFtZWRBdHRyTWFwSW1wbCYgTmFtZWRBdHRyTWFwSW1wbDo6b3BlcgogCiAgICAgY2xl
YXJBdHRyaWJ1dGVzKCk7CiAgICAgbGVuID0gb3RoZXIubGVuOwotICAgIGF0dHJzID0gc3RhdGlj
X2Nhc3Q8QXR0cmlidXRlSW1wbCAqKj4obWFpbl90aHJlYWRfbWFsbG9jKGxlbiAqIHNpemVvZihB
dHRyaWJ1dGVJbXBsICopKSk7CisgICAgYXR0cnMgPSBzdGF0aWNfY2FzdDxBdHRyaWJ1dGVJbXBs
ICoqPihmYXN0TWFsbG9jKGxlbiAqIHNpemVvZihBdHRyaWJ1dGVJbXBsICopKSk7CiAKICAgICAv
LyBmaXJzdCBpbml0aWFsaXplIGF0dHJzIHZlY3RvciwgdGhlbiBjYWxsIGF0dHJpYnV0ZUNoYW5n
ZWQgb24gaXQKICAgICAvLyB0aGlzIGFsbG93cyBhdHRyaWJ1dGVDaGFuZ2VkIHRvIHVzZSBnZXRB
dHRyaWJ1dGUKQEAgLTEwMTgsMTEgKzEwMTgsMTEgQEAgTmFtZWRBdHRyTWFwSW1wbCYgTmFtZWRB
dHRyTWFwSW1wbDo6b3Blcgogdm9pZCBOYW1lZEF0dHJNYXBJbXBsOjphZGRBdHRyaWJ1dGUoQXR0
cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICAvLyBBZGQgdGhlIGF0dHJpYnV0ZSB0byB0aGUgbGlz
dAotICAgIEF0dHJpYnV0ZUltcGwgKipuZXdBdHRycyA9IHN0YXRpY19jYXN0PEF0dHJpYnV0ZUlt
cGwgKio+KG1haW5fdGhyZWFkX21hbGxvYygobGVuICsgMSkgKiBzaXplb2YoQXR0cmlidXRlSW1w
bCAqKSkpOworICAgIEF0dHJpYnV0ZUltcGwgKipuZXdBdHRycyA9IHN0YXRpY19jYXN0PEF0dHJp
YnV0ZUltcGwgKio+KGZhc3RNYWxsb2MoKGxlbiArIDEpICogc2l6ZW9mKEF0dHJpYnV0ZUltcGwg
KikpKTsKICAgICBpZiAoYXR0cnMpIHsKICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IGxlbjsg
aSsrKQogICAgICAgICBuZXdBdHRyc1tpXSA9IGF0dHJzW2ldOwotICAgICAgbWFpbl90aHJlYWRf
ZnJlZShhdHRycyk7CisgICAgICBmYXN0RnJlZShhdHRycyk7CiAgICAgfQogICAgIGF0dHJzID0g
bmV3QXR0cnM7CiAgICAgYXR0cnNbbGVuKytdID0gYXR0cjsKQEAgLTEwNTcsMTkgKzEwNTcsMTkg
QEAgdm9pZCBOYW1lZEF0dHJNYXBJbXBsOjpyZW1vdmVBdHRyaWJ1dGUoYwogICAgIGlmIChhdHRy
c1tpbmRleF0tPm1faW1wbCkKICAgICAgICAgYXR0cnNbaW5kZXhdLT5tX2ltcGwtPm1fZWxlbWVu
dCA9IDA7CiAgICAgaWYgKGxlbiA9PSAxKSB7Ci0gICAgICAgIG1haW5fdGhyZWFkX2ZyZWUoYXR0
cnMpOworICAgICAgICBmYXN0RnJlZShhdHRycyk7CiAgICAgICAgIGF0dHJzID0gMDsKICAgICAg
ICAgbGVuID0gMDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIEF0dHJpYnV0ZUltcGwgKipu
ZXdBdHRycyA9IHN0YXRpY19jYXN0PEF0dHJpYnV0ZUltcGwgKio+KG1haW5fdGhyZWFkX21hbGxv
YygobGVuIC0gMSkgKiBzaXplb2YoQXR0cmlidXRlSW1wbCAqKSkpOworICAgICAgICBBdHRyaWJ1
dGVJbXBsICoqbmV3QXR0cnMgPSBzdGF0aWNfY2FzdDxBdHRyaWJ1dGVJbXBsICoqPihmYXN0TWFs
bG9jKChsZW4gLSAxKSAqIHNpemVvZihBdHRyaWJ1dGVJbXBsICopKSk7CiAgICAgICAgIHVpbnQg
aTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHVpbnQoaW5kZXgpOyBpKyspCiAgICAgICAgICAg
ICBuZXdBdHRyc1tpXSA9IGF0dHJzW2ldOwogICAgICAgICBsZW4tLTsKICAgICAgICAgZm9yICg7
IGkgPCBsZW47IGkrKykKICAgICAgICAgICAgIG5ld0F0dHJzW2ldID0gYXR0cnNbaSsxXTsKLSAg
ICAgICAgbWFpbl90aHJlYWRfZnJlZShhdHRycyk7CisgICAgICAgIGZhc3RGcmVlKGF0dHJzKTsK
ICAgICAgICAgYXR0cnMgPSBuZXdBdHRyczsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwv
eG1sL2RvbV9lbGVtZW50aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41
MgpkaWZmIC1wIC11IC1yMS41MiBXZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuaAot
LS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgJMTYgU2VwIDIwMDUgMjI6NDI6
MjAgLTAwMDAJMS41MgorKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgJMjcg
U2VwIDIwMDUgMDg6NDU6MzUgLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAgY2xhc3MgQXR0ckltcGw7
CiAvLyB0aGUgYWN0dWFsIEF0dHIgKEF0dHJJbXBsKSB3aXRoIGl0cyB2YWx1ZSBhcyB0ZXh0Y2hp
bGQKIC8vIGlzIG9ubHkgYWxsb2NhdGVkIG9uIGRlbWFuZCBieSB0aGUgRE9NIGJpbmRpbmdzLgog
Ly8gQW55IHVzZSBvZiBBdHRySW1wbCBpbnNpZGUga2h0bWwgc2hvdWxkIGJlIGF2b2lkZWQuCi1j
bGFzcyBBdHRyaWJ1dGVJbXBsIDogcHVibGljIGtodG1sOjpTaGFyZWQ8QXR0cmlidXRlSW1wbD4K
KyBjbGFzcyBBdHRyaWJ1dGVJbXBsIDogcHVibGljIGtodG1sOjpTaGFyZWQ8QXR0cmlidXRlSW1w
bD4sIHB1YmxpYyBGYXN0QWxsb2NhdGVkCiB7CiAgICAgZnJpZW5kIGNsYXNzIE5hbWVkQXR0ck1h
cEltcGw7CiAgICAgZnJpZW5kIGNsYXNzIEVsZW1lbnRJbXBsOwpAQCAtNzYsOCArNzYsNiBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIH5BdHRyaWJ1dGVJbXBsKCkge30KICAgICAKLSAgICBNQUlO
X1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lLnByZWZpeCgpOyB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWUubG9jYWxOYW1lKCk7IH0KSW5kZXg6
IFdlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTkzCmRpZmYgLXAgLXUgLXIxLjE5MyBXZWJDb3JlL2todG1sL3htbC9kb21f
bm9kZWltcGwuY3BwCi0tLSBXZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTI0IFNl
cCAyMDA1IDAxOjE5OjAyIC0wMDAwCTEuMTkzCisrKyBXZWJDb3JlL2todG1sL3htbC9kb21fbm9k
ZWltcGwuY3BwCTI3IFNlcCAyMDA1IDA4OjQ1OjM2IC0wMDAwCkBAIC01OCw3ICs1OCw3IEBACiAj
ZW5kaWYKIAogI2lmIEFQUExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgiCisj
aW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIktXUUxvZ2dpbmcuaCIK
ICNlbHNlCiAjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCkluZGV4
OiBXZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTAyCmRpZmYgLXAgLXUgLXIxLjEwMiBXZWJDb3JlL2todG1sL3htbC9kb21fbm9k
ZWltcGwuaAotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmgJMjAgU2VwIDIwMDUg
MjM6MDE6NDEgLTAwMDAJMS4xMDIKKysrIFdlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5o
CTI3IFNlcCAyMDA1IDA4OjQ1OjM2IC0wMDAwCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJkb20vZG9tX3N0cmluZy5oIgogI2luY2x1ZGUgImRvbS9kb21fbm9kZS5oIgotI2luY2x1ZGUg
Im1pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvRmFzdE1hbGxv
Yy5oPgogI2luY2x1ZGUgIm1pc2MvaGVscGVyLmgiCiAjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIK
ICNpbmNsdWRlICJkb21fYXRvbWljc3RyaW5nLmgiCkBAIC01MSw4ICs1MSw2IEBAIG5hbWVzcGFj
ZSBraHRtbCB7CiAKIG5hbWVzcGFjZSBET00gewogCi11c2luZyBraHRtbDo6U2hhcmVkUHRyOwot
CiBjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBEb2N1bWVudEltcGw7CiBjbGFzcyBFbGVtZW50
SW1wbDsKQEAgLTc4LDE1ICs3NiwxMyBAQCBwcml2YXRlOgogfTsKIAogLy8gdGhpcyBjbGFzcyBp
bXBsZW1lbnRzIG5vZGVzLCB3aGljaCBjYW4gaGF2ZSBhIHBhcmVudCBidXQgbm8gY2hpbGRyZW46
Ci1jbGFzcyBOb2RlSW1wbCA6IHB1YmxpYyBraHRtbDo6VHJlZVNoYXJlZDxOb2RlSW1wbD4KK2Ns
YXNzIE5vZGVJbXBsIDogcHVibGljIGtodG1sOjpUcmVlU2hhcmVkPE5vZGVJbXBsPiwgcHVibGlj
IEZhc3RBbGxvY2F0ZWQKIHsKICAgICBmcmllbmQgY2xhc3MgRG9jdW1lbnRJbXBsOwogcHVibGlj
OgogICAgIE5vZGVJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIHZpcnR1YWwgfk5vZGVJbXBs
KCk7CiAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICAvLyBET00gbWV0aG9kcyAm
IGF0dHJpYnV0ZXMgZm9yIE5vZGUKICAgICB2aXJ0dWFsIGJvb2wgaGFzVGFnTmFtZShjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgRE9NU3RyaW5nIG5vZGVOYW1lKCkgY29uc3QgPSAwOwpAQCAtNTY5LDE0ICs1NjUsMTIgQEAg
cHVibGljOgogY2xhc3MgTm9kZTsKIGNsYXNzIE5vZGVJbXBsOwogCi1jbGFzcyBOb2RlTGlzdElt
cGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxOb2RlTGlzdEltcGw+CitjbGFzcyBOb2RlTGlzdElt
cGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxOb2RlTGlzdEltcGw+LCBwdWJsaWMgRmFzdEFsbG9j
YXRlZAogewogcHVibGljOgogICAgIE5vZGVMaXN0SW1wbCggTm9kZUltcGwgKl9yb290Tm9kZSAp
OwogICAgIHZpcnR1YWwgfk5vZGVMaXN0SW1wbCgpOwogCi0gICAgTUFJTl9USFJFQURfQUxMT0NB
VEVEOwotCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlTGlzdAogICAg
IHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgTm9kZUlt
cGwgKml0ZW0gKCB1bnNpZ25lZCBpbmRleCApIGNvbnN0ID0gMDsKQEAgLTY0MiwxNCArNjM2LDEy
IEBAIHByb3RlY3RlZDoKIC8vIEdlbmVyaWMgTmFtZWROb2RlTWFwIGludGVyZmFjZQogLy8gT3Ro
ZXIgY2xhc3NlcyBpbXBsZW1lbnQgdGhpcyBmb3IgbW9yZSBzcGVjaWZpYyBzaXR1YXRpb25zIGUu
Zy4gYXR0cmlidXRlcwogLy8gb2YgYW4gZWxlbWVudAotY2xhc3MgTmFtZWROb2RlTWFwSW1wbCA6
IHB1YmxpYyBraHRtbDo6U2hhcmVkPE5hbWVkTm9kZU1hcEltcGw+CitjbGFzcyBOYW1lZE5vZGVN
YXBJbXBsIDogcHVibGljIGtodG1sOjpTaGFyZWQ8TmFtZWROb2RlTWFwSW1wbD4sIHB1YmxpYyBG
YXN0QWxsb2NhdGVkCiB7CiBwdWJsaWM6CiAgICAgTmFtZWROb2RlTWFwSW1wbCgpIHt9CiAgICAg
dmlydHVhbCB+TmFtZWROb2RlTWFwSW1wbCgpIHt9CiAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FU
RUQ7Ci0KICAgICBOb2RlSW1wbCAqZ2V0TmFtZWRJdGVtKGNvbnN0IERPTVN0cmluZyAmbmFtZSkg
Y29uc3QgeyByZXR1cm4gZ2V0TmFtZWRJdGVtTlMoRE9NU3RyaW5nKCksIG5hbWUpOyB9CiAgICAg
U2hhcmVkUHRyPE5vZGVJbXBsPiByZW1vdmVOYW1lZEl0ZW0oY29uc3QgRE9NU3RyaW5nICZuYW1l
LCBpbnQgJmV4Y2VwdGlvbikgeyByZXR1cm4gcmVtb3ZlTmFtZWRJdGVtTlMoRE9NU3RyaW5nKCks
IG5hbWUsIGV4Y2VwdGlvbik7IH0KIApJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tX3Bvc2l0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwv
ZG9tX3Bvc2l0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43OApkaWZmIC1wIC11IC1y
MS43OCBXZWJDb3JlL2todG1sL3htbC9kb21fcG9zaXRpb24uY3BwCi0tLSBXZWJDb3JlL2todG1s
L3htbC9kb21fcG9zaXRpb24uY3BwCTE2IFNlcCAyMDA1IDIyOjQyOjIwIC0wMDAwCTEuNzgKKysr
IFdlYkNvcmUva2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAJMjcgU2VwIDIwMDUgMDg6NDU6MzYg
LTAwMDAKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2lmIEFQ
UExFX0NIQU5HRVMKLSNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8a3htbGNv
cmUvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIktXUUxvZ2dpbmcuaCIKICNlbHNlCiAjZGVmaW5l
IEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCkluZGV4OiBXZWJDb3JlL2todG1s
L3htbC9kb21fc3RyaW5naW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL3htbC9kb21fc3RyaW5naW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0
CmRpZmYgLXAgLXUgLXIxLjE0IFdlYkNvcmUva2h0bWwveG1sL2RvbV9zdHJpbmdpbXBsLmgKLS0t
IFdlYkNvcmUva2h0bWwveG1sL2RvbV9zdHJpbmdpbXBsLmgJMjEgSnVuIDIwMDUgMjI6Mjc6NTUg
LTAwMDAJMS4xNAorKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuaAkyNyBTZXAg
MjAwNSAwODo0NTozNiAtMDAwMApAQCAtMjYsMTQgKzI2LDE0IEBACiAKICNpbmNsdWRlICJtaXNj
L2todG1sbGF5b3V0LmgiCiAjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIKLSNpbmNsdWRlICJtaXNj
L21haW5fdGhyZWFkX21hbGxvYy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0Zhc3RNYWxsb2MuaD4K
IAotI2RlZmluZSBRVF9BTExPQ19RQ0hBUl9WRUMoIE4gKSBzdGF0aWNfY2FzdDxRQ2hhcio+KG1h
aW5fdGhyZWFkX21hbGxvYyggc2l6ZW9mKFFDaGFyKSooIE4gKSApKQotI2RlZmluZSBRVF9ERUxF
VEVfUUNIQVJfVkVDKCBQICkgbWFpbl90aHJlYWRfZnJlZSAoKHZvaWQqKSggUCApKQorI2RlZmlu
ZSBRVF9BTExPQ19RQ0hBUl9WRUMoTikgc3RhdGljX2Nhc3Q8UUNoYXIqPihmYXN0TWFsbG9jKHNp
emVvZihRQ2hhcikqKE4pKSkKKyNkZWZpbmUgUVRfREVMRVRFX1FDSEFSX1ZFQyhQKSBmYXN0RnJl
ZShQKQogCiBuYW1lc3BhY2UgRE9NIHsKIAotY2xhc3MgRE9NU3RyaW5nSW1wbCA6IHB1YmxpYyBr
aHRtbDo6U2hhcmVkPERPTVN0cmluZ0ltcGw+CitjbGFzcyBET01TdHJpbmdJbXBsIDogcHVibGlj
IGtodG1sOjpTaGFyZWQ8RE9NU3RyaW5nSW1wbD4sIHB1YmxpYyBGYXN0QWxsb2NhdGVkCiB7CiBw
cml2YXRlOgogICAgIHN0cnVjdCBXaXRoT25lUmVmIHsgfTsKQEAgLTQ4LDggKzQ4LDYgQEAgcHVi
bGljOgogICAgIERPTVN0cmluZ0ltcGwoY29uc3QgUUNoYXIgJmNoKTsKICAgICB+RE9NU3RyaW5n
SW1wbCgpOwogICAgIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdCB7IGlmIChfaGFzaCA9PSAwKSBfaGFzaCA9IGNvbXB1dGVIYXNoKHMsIGwp
OyByZXR1cm4gX2hhc2g7IH0KICAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3Qg
UUNoYXIgKiwgaW50IGxlbmd0aCk7CiAgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNv
bnN0IGNoYXIgKik7CkluZGV4OiBXZWJDb3JlL2t3cS9ET00tQ1NTLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9ET00tQ1NTLm1tLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjI3CmRpZmYgLXAgLXUgLXIxLjI3IFdlYkNvcmUva3dxL0RPTS1DU1MubW0KLS0tIFdl
YkNvcmUva3dxL0RPTS1DU1MubW0JMjMgU2VwIDIwMDUgMTg6MjQ6NTggLTAwMDAJMS4yNworKysg
V2ViQ29yZS9rd3EvRE9NLUNTUy5tbQkyNyBTZXAgMjAwNSAwODo0NTozNyAtMDAwMApAQCAtNDEs
NyArNDEsNyBAQAogI2ltcG9ydCAiaHRtbF9oZWFkaW1wbC5oIgogCiAjaW1wb3J0ICJET01JbnRl
cm5hbC5oIgotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNz
ZXJ0aW9ucy5oPgogI2ltcG9ydCAiS1dRRm91bmRhdGlvbkV4dHJhcy5oIgogCiB1c2luZyBET006
OkFic3RyYWN0Vmlld0ltcGw7CkluZGV4OiBXZWJDb3JlL2t3cS9ET00ubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0RPTS5tbSx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS40NwpkaWZmIC1wIC11IC1yMS40NyBXZWJDb3JlL2t3cS9ET00ubW0KLS0tIFdlYkNvcmUv
a3dxL0RPTS5tbQkyMCBTZXAgMjAwNSAwNzo1NTo1NCAtMDAwMAkxLjQ3CisrKyBXZWJDb3JlL2t3
cS9ET00ubW0JMjcgU2VwIDIwMDUgMDg6NDU6MzggLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAKICNp
bXBvcnQgIkRPTUhUTUwuaCIKICNpbXBvcnQgIkRPTUludGVybmFsLmgiCiAjaW1wb3J0ICJET01Q
cml2YXRlLmgiCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9B
c3NlcnRpb25zLmg+CiAjaW1wb3J0ICJLV1FGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJL
V1FLSFRNTFBhcnQuaCIKIApAQCAtOTYsNyArOTYsNiBAQCB1c2luZyBET006OlRyZWVXYWxrZXJJ
bXBsOwogdXNpbmcga2h0bWw6Okhhc2hNYXA7CiB1c2luZyBraHRtbDo6UG9pbnRlckhhc2g7CiB1
c2luZyBraHRtbDo6UmVuZGVyT2JqZWN0OwotdXNpbmcga2h0bWw6OlNoYXJlZFB0cjsKIAogQGlu
dGVyZmFjZSBET01BdHRyIChXZWJDb3JlSW50ZXJuYWwpCiArIChET01BdHRyICopX2F0dHJXaXRo
SW1wbDooQXR0ckltcGwgKilpbXBsOwpJbmRleDogV2ViQ29yZS9rd3EvRE9NRXZlbnRzLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9ET01FdmVudHMubW0sdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IFdlYkNvcmUva3dxL0RPTUV2
ZW50cy5tbQotLS0gV2ViQ29yZS9rd3EvRE9NRXZlbnRzLm1tCTE2IFNlcCAyMDA1IDIyOjQyOjIz
IC0wMDAwCTEuNgorKysgV2ViQ29yZS9rd3EvRE9NRXZlbnRzLm1tCTI3IFNlcCAyMDA1IDA4OjQ1
OjM4IC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW1wb3J0ICJET01FdmVudHNJbnRlcm5hbC5o
IgogI2ltcG9ydCAiRE9NVmlld3NJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIK
LSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMu
aD4KIAogI2ltcG9ydCAiZG9tX2RvY2ltcGwuaCIKICNpbXBvcnQgImRvbTJfZXZlbnRzaW1wbC5o
IgpJbmRleDogV2ViQ29yZS9rd3EvRE9NSFRNTC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9rd3EvRE9NSFRNTC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOQpk
aWZmIC1wIC11IC1yMS4yOSBXZWJDb3JlL2t3cS9ET01IVE1MLm1tCi0tLSBXZWJDb3JlL2t3cS9E
T01IVE1MLm1tCTE2IFNlcCAyMDA1IDIyOjQyOjIzIC0wMDAwCTEuMjkKKysrIFdlYkNvcmUva3dx
L0RPTUhUTUwubW0JMjcgU2VwIDIwMDUgMDg6NDU6MzkgLTAwMDAKQEAgLTQ1LDcgKzQ1LDcgQEAK
ICNpbXBvcnQgIkRPTUV4dGVuc2lvbnMuaCIKICNpbXBvcnQgIkRPTUludGVybmFsLmgiCiAjaW1w
b3J0ICJET01IVE1MSW50ZXJuYWwuaCIKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBv
cnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIERPTTo6SFRNTE5hbWVzOwpJbmRleDogV2ViQ29yZS9rd3Ev
RE9NSW50ZXJuYWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dx
L0RPTUludGVybmFsLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEu
OCBXZWJDb3JlL2t3cS9ET01JbnRlcm5hbC5tbQotLS0gV2ViQ29yZS9rd3EvRE9NSW50ZXJuYWwu
bW0JMjkgQXVnIDIwMDUgMjE6Mjk6MjggLTAwMDAJMS44CisrKyBXZWJDb3JlL2t3cS9ET01JbnRl
cm5hbC5tbQkyNyBTZXAgMjAwNSAwODo0NTozOSAtMDAwMApAQCAtMzUsNyArMzUsNyBAQAogI2lt
cG9ydCAia2pzX2RvbS5oIgogI2ltcG9ydCAia2pzX3Byb3h5LmgiCiAKLSNpbXBvcnQgIktXUUFz
c2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIktX
UUtIVE1MUGFydC5oIgogCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci5oPgpJ
bmRleDogV2ViQ29yZS9rd3EvRE9NVmlld3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva3dxL0RPTVZpZXdzLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBXZWJDb3JlL2t3cS9ET01WaWV3cy5tbQotLS0gV2ViQ29yZS9rd3EvRE9N
Vmlld3MubW0JMjMgTWF5IDIwMDQgMjI6NDU6MjggLTAwMDAJMS4xCisrKyBXZWJDb3JlL2t3cS9E
T01WaWV3cy5tbQkyNyBTZXAgMjAwNSAwODo0NTozOSAtMDAwMApAQCAtMjcsNyArMjcsNyBAQAog
CiAjaW1wb3J0ICJET01JbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NVmlld3NJbnRlcm5hbC5oIgot
I2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5o
PgogCiAjaW1wb3J0ICJkb21fZG9jaW1wbC5oIgogI2ltcG9ydCAiZG9tMl92aWV3c2ltcGwuaCIK
SW5kZXg6IFdlYkNvcmUva3dxL0tXUUFjY09iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRQWNjT2JqZWN0Lm1tLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjgyCmRpZmYgLXAgLXUgLXIxLjgyIFdlYkNvcmUva3dxL0tXUUFjY09iamVjdC5tbQotLS0g
V2ViQ29yZS9rd3EvS1dRQWNjT2JqZWN0Lm1tCTI0IFNlcCAyMDA1IDAxOjE5OjAzIC0wMDAwCTEu
ODIKKysrIFdlYkNvcmUva3dxL0tXUUFjY09iamVjdC5tbQkyNyBTZXAgMjAwNSAwODo0NTo0MCAt
MDAwMApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPG1hY2gtby9keWxkLmg+CiAKICNpbXBv
cnQgIktXUUFjY09iamVjdENhY2hlLmgiCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1w
b3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0ICJLV1FGb3VuZGF0aW9uRXh0cmFz
LmgiCiAjaW1wb3J0ICJLV1FXaWRnZXQuaCIKICNpbXBvcnQgIldlYkNvcmVCcmlkZ2UuaCIKSW5k
ZXg6IFdlYkNvcmUva3dxL0tXUUFjY09iamVjdENhY2hlLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FBY2NPYmplY3RDYWNoZS5tbSx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS45CmRpZmYgLXAgLXUgLXIxLjkgV2ViQ29yZS9rd3EvS1dRQWNjT2JqZWN0Q2Fj
aGUubW0KLS0tIFdlYkNvcmUva3dxL0tXUUFjY09iamVjdENhY2hlLm1tCTUgSnVuIDIwMDUgMDc6
MDY6NTIgLTAwMDAJMS45CisrKyBXZWJDb3JlL2t3cS9LV1FBY2NPYmplY3RDYWNoZS5tbQkyNyBT
ZXAgMjAwNSAwODo0NTo0MCAtMDAwMApAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiS1dRQWNj
T2JqZWN0Q2FjaGUuaCIKIAogI2ltcG9ydCAiS1dRQWNjT2JqZWN0LmgiCi0jaW1wb3J0ICJLV1FB
c3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0ICJL
V1FGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJLV1FTdHJpbmcuaCIKICNpbXBvcnQgInJl
bmRlcl9vYmplY3QuaCIKSW5kZXg6IFdlYkNvcmUva3dxL0tXUUFycmF5SW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FBcnJheUltcGwuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXAgLXUgLXIxLjggV2ViQ29yZS9rd3EvS1dRQXJyYXlJ
bXBsLmgKLS0tIFdlYkNvcmUva3dxL0tXUUFycmF5SW1wbC5oCTE1IEF1ZyAyMDA1IDAwOjMyOjQw
IC0wMDAwCTEuOAorKysgV2ViQ29yZS9rd3EvS1dRQXJyYXlJbXBsLmgJMjcgU2VwIDIwMDUgMDg6
NDU6NDAgLTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJLV1FSZWZQdHIuaCIKICNp
bmNsdWRlICJLV1FEZWYuaCIKICNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlICJtYWluX3Ro
cmVhZF9tYWxsb2MuaCIKKyNpbmNsdWRlICJreG1sY29yZS9GYXN0TWFsbG9jLmgiCiAKIGNsYXNz
IEtXUUFycmF5SW1wbAogewpAQCAtNTIsMTQgKzUyLDEyIEBAIGNsYXNzIEtXUUFycmF5SW1wbAog
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLV1FBcnJheUltcGwgJikgY29uc3Q7CiAKICBwcml2
YXRlOgotICAgIGNsYXNzIEtXUUFycmF5UHJpdmF0ZQorICAgIGNsYXNzIEtXUUFycmF5UHJpdmF0
ZSA6IHB1YmxpYyBGYXN0QWxsb2NhdGVkCiAgICAgewogICAgIHB1YmxpYzoJCiAJS1dRQXJyYXlQ
cml2YXRlKHNpemVfdCBwTnVtSXRlbXMsIHNpemVfdCBwSXRlbVNpemUpOwogCX5LV1FBcnJheVBy
aXZhdGUoKTsKIAotICAgICAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KIAlzaXplX3QgbnVt
SXRlbXM7CiAJc2l6ZV90IGl0ZW1TaXplOwogCWNoYXIgKmRhdGE7CkluZGV4OiBXZWJDb3JlL2t3
cS9LV1FBcnJheUltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL0tXUUFycmF5SW1wbC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC1wIC11
IC1yMS4xMiBXZWJDb3JlL2t3cS9LV1FBcnJheUltcGwubW0KLS0tIFdlYkNvcmUva3dxL0tXUUFy
cmF5SW1wbC5tbQkxOCBBdWcgMjAwNSAwMDozMToyMyAtMDAwMAkxLjEyCisrKyBXZWJDb3JlL2t3
cS9LV1FBcnJheUltcGwubW0JMjcgU2VwIDIwMDUgMDg6NDU6NDAgLTAwMDAKQEAgLTMxLDIxICsz
MSwxOCBAQAogI2RlZmluZQlNSU4oYSxiKSAoKChhKTwoYikpPyhhKTooYikpCiAKIHVzaW5nIHN0
ZDo6bm90aHJvdzsKLXVzaW5nIGtodG1sOjptYWluX3RocmVhZF9tYWxsb2M7Ci11c2luZyBraHRt
bDo6bWFpbl90aHJlYWRfZnJlZTsKLXVzaW5nIGtodG1sOjptYWluX3RocmVhZF9yZWFsbG9jOwog
CiBLV1FBcnJheUltcGw6OktXUUFycmF5UHJpdmF0ZTo6S1dRQXJyYXlQcml2YXRlKHNpemVfdCBw
SXRlbVNpemUsIHNpemVfdCBwTnVtSXRlbXMpIDogCiAgICAgbnVtSXRlbXMocE51bUl0ZW1zKSwg
CiAgICAgaXRlbVNpemUocEl0ZW1TaXplKSwgCi0gICAgZGF0YShwTnVtSXRlbXMgPiAwID8gc3Rh
dGljX2Nhc3Q8Y2hhciAqPihtYWluX3RocmVhZF9tYWxsb2MoaXRlbVNpemUgKiBudW1JdGVtcykp
IDogTlVMTCksIAorICAgIGRhdGEocE51bUl0ZW1zID4gMCA/IHN0YXRpY19jYXN0PGNoYXIgKj4o
ZmFzdE1hbGxvYyhpdGVtU2l6ZSAqIG51bUl0ZW1zKSkgOiBOVUxMKSwgCiAgICAgcmVmQ291bnQo
MCkKIHsKIH0KIAogS1dRQXJyYXlJbXBsOjpLV1FBcnJheVByaXZhdGU6On5LV1FBcnJheVByaXZh
dGUoKQogewotICAgIG1haW5fdGhyZWFkX2ZyZWUoZGF0YSk7CisgICAgZmFzdEZyZWUoZGF0YSk7
CiB9CiAKIApAQCAtODAsMTMgKzc3LDEzIEBAIGJvb2wgS1dRQXJyYXlJbXBsOjpyZXNpemUoc2l6
ZV90IG5ld1NpemUKICAgICAgICAgY2hhciAqbmV3RGF0YTsKICAgICAgICAgCiAJaWYgKG5ld1Np
emUgIT0gMCkgewotCSAgICBuZXdEYXRhID0gc3RhdGljX2Nhc3Q8Y2hhciAqPihtYWluX3RocmVh
ZF9yZWFsbG9jKGQtPmRhdGEsIG5ld1NpemUgKiBkLT5pdGVtU2l6ZSkpOworCSAgICBuZXdEYXRh
ID0gc3RhdGljX2Nhc3Q8Y2hhciAqPihmYXN0UmVhbGxvYyhkLT5kYXRhLCBuZXdTaXplICogZC0+
aXRlbVNpemUpKTsKIAkgICAgaWYgKG5ld0RhdGEgPT0gTlVMTCkgewogCSAgICAgICAgcmV0dXJu
IGZhbHNlOwogCSAgICB9CiAJfSBlbHNlIHsKIAkgICAgbmV3RGF0YSA9IE5VTEw7Ci0gICAgICAg
ICAgICBtYWluX3RocmVhZF9mcmVlKGQtPmRhdGEpOworICAgICAgICAgICAgZmFzdEZyZWUoZC0+
ZGF0YSk7CiAJfQogCiAJZC0+ZGF0YSA9IG5ld0RhdGE7CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FB
c3NlcnRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga3dxL0tXUUFzc2VydGlvbnMuaApkaWZm
IC1OIFdlYkNvcmUva3dxL0tXUUFzc2VydGlvbnMuaAotLS0gV2ViQ29yZS9rd3EvS1dRQXNzZXJ0
aW9ucy5oCTIyIEphbiAyMDAzIDAwOjEyOjM0IC0wMDAwCTEuNQorKysgV2ViQ29yZS9rd3EvS1dR
QXNzZXJ0aW9ucy5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsMTU4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLS8vIE5vdGUsIHRoaXMgZmlsZSB1c2VzIG1hbnkgR0NDIGV4
dGVuc2lvbnMsIGJ1dCBpdCBzaG91bGQgYmUgY29tcGF0aWJsZSB3aXRoCi0vLyBDLCBPYmplY3Rp
dmUgQywgQysrLCBhbmQgT2JqZWN0aXZlIEMrKy4KLQotLy8gRm9yIG5vbi1kZWJ1ZyBidWlsZHMs
IGV2ZXJ5dGhpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLS8vIERlZmluaW5nIGFueSBvZiB0
aGUgc3ltYm9scyBleHBsaWNpdGx5IHByZXZlbnRzIHRoaXMgZnJvbSBoYXZpbmcgYW55IGVmZmVj
dC4KLQotI2lmZGVmIE5ERUJVRwotI2RlZmluZSBLV1FfQVNTRVJUSU9OU19ESVNBQkxFRF9ERUZB
VUxUIDEKLSNlbHNlCi0jZGVmaW5lIEtXUV9BU1NFUlRJT05TX0RJU0FCTEVEX0RFRkFVTFQgMAot
I2VuZGlmCi0KLSNpZm5kZWYgQVNTRVJUX0RJU0FCTEVECi0jZGVmaW5lIEFTU0VSVF9ESVNBQkxF
RCBLV1FfQVNTRVJUSU9OU19ESVNBQkxFRF9ERUZBVUxUCi0jZW5kaWYKLQotI2lmbmRlZiBBU1NF
UlRfQVJHX0RJU0FCTEVECi0jZGVmaW5lIEFTU0VSVF9BUkdfRElTQUJMRUQgS1dRX0FTU0VSVElP
TlNfRElTQUJMRURfREVGQVVMVAotI2VuZGlmCi0KLSNpZm5kZWYgRkFUQUxfRElTQUJMRUQKLSNk
ZWZpbmUgRkFUQUxfRElTQUJMRUQgS1dRX0FTU0VSVElPTlNfRElTQUJMRURfREVGQVVMVAotI2Vu
ZGlmCi0KLSNpZm5kZWYgRVJST1JfRElTQUJMRUQKLSNkZWZpbmUgRVJST1JfRElTQUJMRUQgS1dR
X0FTU0VSVElPTlNfRElTQUJMRURfREVGQVVMVAotI2VuZGlmCi0KLSNpZm5kZWYgTE9HX0RJU0FC
TEVECi0jZGVmaW5lIExPR19ESVNBQkxFRCBLV1FfQVNTRVJUSU9OU19ESVNBQkxFRF9ERUZBVUxU
Ci0jZW5kaWYKLQotLy8gVGhlc2UgaGVscGVyIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIGRlY2xhcmVk
LCBidXQgbm90IG5lY2Vzc2FyaWx5IGFsd2F5cyBkZWZpbmVkIGlmIHRoZSBjb3JyZXNwb25kaW5n
IGZ1bmN0aW9uIGlzIGRpc2FibGVkLgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIg
ewotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICB1bnNpZ25lZCBtYXNrOwotICAgIGNv
bnN0IGNoYXIgKmRlZmF1bHROYW1lOwotICAgIGVudW0geyBLV1FMb2dDaGFubmVsVW5pbml0aWFs
aXplZCwgS1dRTG9nQ2hhbm5lbE9mZiwgS1dRTG9nQ2hhbm5lbE9uIH0gc3RhdGU7Ci19IEtXUUxv
Z0NoYW5uZWw7Ci0KLXZvaWQgS1dRUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShjb25zdCBjaGFyICpm
aWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmFzc2VydGlv
bik7Ci12b2lkIEtXUVJlcG9ydEFzc2VydGlvbkZhaWx1cmVXaXRoTWVzc2FnZShjb25zdCBjaGFy
ICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmFzc2Vy
dGlvbiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwotdm9pZCBLV1FSZXBvcnRBcmd1bWVudEFz
c2VydGlvbkZhaWx1cmUoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1
bmN0aW9uLCBjb25zdCBjaGFyICphcmdOYW1lLCBjb25zdCBjaGFyICphc3NlcnRpb24pOwotdm9p
ZCBLV1FSZXBvcnRGYXRhbEVycm9yKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBj
aGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIDsKLXZvaWQgS1dRUmVwb3J0
RXJyb3IoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBj
b25zdCBjaGFyICpmb3JtYXQsIC4uLik7Ci12b2lkIEtXUUxvZyhjb25zdCBjaGFyICpmaWxlLCBp
bnQgbGluZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIEtXUUxvZ0NoYW5uZWwgKmNoYW5uZWwsIGNv
bnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYK
LQotLy8gQ1JBU0ggLS0gZ2V0cyB1cyBpbnRvIHRoZSBkZWJ1Z2dlciBvciB0aGUgY3Jhc2ggcmVw
b3J0ZXIgLS0gc2lnbmFscyBhcmUgaWdub3JlZCBieSB0aGUgY3Jhc2ggcmVwb3J0ZXIgc28gd2Ug
bXVzdCBkbyBiZXR0ZXIKLQotI2RlZmluZSBDUkFTSCgpICooaW50ICopMHhiYmFkYmVlZiA9IDAK
LQotLy8gQVNTRVJULCBBU1NFUlRfV0lUSF9NRVNTQUdFLCBBU1NFUlRfTk9UX1JFQUNIRUQKLQot
I2lmIEFTU0VSVF9ESVNBQkxFRAotCi0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pICgodm9pZCkw
KQotI2RlZmluZSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFzc2VydGlvbiwgZm9ybWF0QW5kQXJncy4u
LikgKCh2b2lkKTApCi0jZGVmaW5lIEFTU0VSVF9OT1RfUkVBQ0hFRCgpICgodm9pZCkwKQotCi0j
ZWxzZQotCi0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGRvIFwKLSAgICBpZiAoIShhc3NlcnRp
b24pKSB7IFwKLSAgICAgICAgS1dRUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19M
SU5FX18sIF9fUFJFVFRZX0ZVTkNUSU9OX18sICNhc3NlcnRpb24pOyBcCi0gICAgICAgIENSQVNI
KCk7IFwKLSAgICB9IFwKLXdoaWxlICgwKQotI2RlZmluZSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFz
c2VydGlvbiwgZm9ybWF0QW5kQXJncy4uLikgZG8gXAotICAgIGlmICghKGFzc2VydGlvbikpIHsg
XAotICAgICAgICBLV1FSZXBvcnRBc3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2UoX19GSUxFX18s
IF9fTElORV9fLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAjYXNzZXJ0aW9uLCBmb3JtYXRBbmRBcmdz
KTsgXAotICAgICAgICBDUkFTSCgpOyBcCi0gICAgfSBcCi13aGlsZSAoMCkKLSNkZWZpbmUgQVNT
RVJUX05PVF9SRUFDSEVEKCkgZG8geyBcCi0gICAgS1dRUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShf
X0ZJTEVfXywgX19MSU5FX18sIF9fUFJFVFRZX0ZVTkNUSU9OX18sIDApOyBcCi0gICAgQ1JBU0go
KTsgXAotfSB3aGlsZSAoMCkKLQotI2VuZGlmCi0KLS8vIEFTU0VSVF9BUkcKLQotI2lmIEFTU0VS
VF9BUkdfRElTQUJMRUQKLQotI2RlZmluZSBBU1NFUlRfQVJHKGFyZ05hbWUsIGFzc2VydGlvbikg
KCh2b2lkKTApCi0KLSNlbHNlCi0KLSNkZWZpbmUgQVNTRVJUX0FSRyhhcmdOYW1lLCBhc3NlcnRp
b24pIGRvIFwKLSAgICBpZiAoIShhc3NlcnRpb24pKSB7IFwKLSAgICAgICAgS1dRUmVwb3J0QXJn
dW1lbnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgX19QUkVUVFlfRlVOQ1RJ
T05fXywgI2FyZ05hbWUsICNhc3NlcnRpb24pOyBcCi0gICAgICAgIENSQVNIKCk7IFwKLSAgICB9
IFwKLXdoaWxlICgwKQotCi0jZW5kaWYKLQotLy8gRkFUQUwKLQotI2lmIEZBVEFMX0RJU0FCTEVE
Ci0jZGVmaW5lIEZBVEFMKGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQotI2Vsc2UKLSNkZWZp
bmUgRkFUQUwoZm9ybWF0QW5kQXJncy4uLikgZG8geyBcCi0gICAgS1dRUmVwb3J0RmF0YWxFcnJv
cihfX0ZJTEVfXywgX19MSU5FX18sIF9fUFJFVFRZX0ZVTkNUSU9OX18sIGZvcm1hdEFuZEFyZ3Mp
OyBcCi0gICAgQ1JBU0goKTsgXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0vLyBFUlJPUgotCi0j
aWYgRVJST1JfRElTQUJMRUQKLSNkZWZpbmUgRVJST1IoZm9ybWF0QW5kQXJncy4uLikgKCh2b2lk
KTApCi0jZWxzZQotI2RlZmluZSBFUlJPUihmb3JtYXRBbmRBcmdzLi4uKSBLV1FSZXBvcnRFcnJv
cihfX0ZJTEVfXywgX19MSU5FX18sIF9fUFJFVFRZX0ZVTkNUSU9OX18sIGZvcm1hdEFuZEFyZ3Mp
Ci0jZW5kaWYKLQotLy8gTE9HCi0KLSNpZiBMT0dfRElTQUJMRUQKLSNkZWZpbmUgTE9HKGNoYW5u
ZWwsIGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQotI2Vsc2UKLSNkZWZpbmUgTE9HKGNoYW5u
ZWwsIGZvcm1hdEFuZEFyZ3MuLi4pIEtXUUxvZyhfX0ZJTEVfXywgX19MSU5FX18sIF9fUFJFVFRZ
X0ZVTkNUSU9OX18sICZKT0lOX0xPR19DSEFOTkVMX1dJVEhfUFJFRklYKExPR19DSEFOTkVMX1BS
RUZJWCwgY2hhbm5lbCksIGZvcm1hdEFuZEFyZ3MpCi0jZGVmaW5lIEpPSU5fTE9HX0NIQU5ORUxf
V0lUSF9QUkVGSVgocHJlZml4LCBjaGFubmVsKSBKT0lOX0xPR19DSEFOTkVMX1dJVEhfUFJFRklY
X0xFVkVMXzIocHJlZml4LCBjaGFubmVsKQotI2RlZmluZSBKT0lOX0xPR19DSEFOTkVMX1dJVEhf
UFJFRklYX0xFVkVMXzIocHJlZml4LCBjaGFubmVsKSBwcmVmaXggIyMgY2hhbm5lbAotI2VuZGlm
CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FBc3NlcnRpb25zLm0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
a3dxL0tXUUFzc2VydGlvbnMubQpkaWZmIC1OIFdlYkNvcmUva3dxL0tXUUFzc2VydGlvbnMubQot
LS0gV2ViQ29yZS9rd3EvS1dRQXNzZXJ0aW9ucy5tCTEgQXByIDIwMDQgMDA6MzQ6MDcgLTAwMDAJ
MS40CisrKyBXZWJDb3JlL2t3cS9LV1FBc3NlcnRpb25zLm0JMSBKYW4gMTk3MCAwMDowMDowMCAt
MDAwMApAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCAiS1dR
QXNzZXJ0aW9ucy5oIgotCi1zdGF0aWMgaW50ICgqIHZmcHJpbnRmX25vX3dhcm5pbmcpKEZJTEUg
KiwgY29uc3QgY2hhciAqLCB2YV9saXN0KSA9IHZmcHJpbnRmOwotCi1zdGF0aWMgdm9pZCB2cHJp
bnRmX3N0ZGVycl9vYmpjKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQotewotICAg
IGlmICghc3Ryc3RyKGZvcm1hdCwgIiVAIikpIHsKLSAgICAgICAgdmZwcmludGZfbm9fd2Fybmlu
ZyhzdGRlcnIsIGZvcm1hdCwgYXJncyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnB1dHMoW1tb
W05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aEZvcm1hdDpbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJp
bmc6Zm9ybWF0XSBhcmd1bWVudHM6YXJnc10gYXV0b3JlbGVhc2VdIFVURjhTdHJpbmddLCBzdGRl
cnIpOwotICAgIH0KLX0KLQotdm9pZCBLV1FSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGNvbnN0IGNo
YXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqYXNz
ZXJ0aW9uKQotewotICAgIGlmIChhc3NlcnRpb24pIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs
ICI9PT09PT09PT09PT09PT09PVxuQVNTRVJUSU9OIEZBSUxFRDogJXMgKCVzOiVkICVzKVxuPT09
PT09PT09PT09PT09PT1cbiIsIGFzc2VydGlvbiwgZmlsZSwgbGluZSwgZnVuY3Rpb24pOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiPT09PT09PT09PT09PT09PT1cblNI
T1VMRCBORVZFUiBCRSBSRUFDSEVEICglczolZCAlcylcbj09PT09PT09PT09PT09PT09XG4iLCBm
aWxlLCBsaW5lLCBmdW5jdGlvbik7Ci0gICAgfQotfQotCi12b2lkIEtXUVJlcG9ydEFzc2VydGlv
bkZhaWx1cmVXaXRoTWVzc2FnZShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hh
ciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmFzc2VydGlvbiwgY29uc3QgY2hhciAqZm9ybWF0LCAu
Li4pCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICI9PT09PT09PT09PT09PT09PVxuQVNTRVJUSU9O
IEZBSUxFRDogIik7Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1h
dCk7Ci0gICAgdnByaW50Zl9zdGRlcnJfb2JqYyhmb3JtYXQsIGFyZ3MpOwotICAgIHZhX2VuZChh
cmdzKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlxuJXMgKCVzOiVkICVzKVxuPT09PT09PT09PT09
PT09PT1cbiIsIGFzc2VydGlvbiwgZmlsZSwgbGluZSwgZnVuY3Rpb24pOwotfQotCi12b2lkIEtX
UVJlcG9ydEFyZ3VtZW50QXNzZXJ0aW9uRmFpbHVyZShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGlu
ZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmFyZ05hbWUsIGNvbnN0IGNoYXIg
KmFzc2VydGlvbikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIj09PT09PT09PT09PT09PT09XG5B
UkdVTUVOVCBCQUQ6ICVzLCAlcyAoJXM6JWQgJXMpXG49PT09PT09PT09PT09PT09PVxuIiwgYXJn
TmFtZSwgYXNzZXJ0aW9uLCBmaWxlLCBsaW5lLCBmdW5jdGlvbik7Ci19Ci0KLXZvaWQgS1dRUmVw
b3J0RmF0YWxFcnJvcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVu
Y3Rpb24sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICAgIGZwcmludGYoc3RkZXJyLCAi
PT09PT09PT09PT09PT09PT1cbkZBVEFMIEVSUk9SOiAiKTsKLSAgICB2YV9saXN0IGFyZ3M7Ci0g
ICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLSAgICB2cHJpbnRmX3N0ZGVycl9vYmpjKGZvcm1h
dCwgYXJncyk7Ci0gICAgdmFfZW5kKGFyZ3MpOwotICAgIGZwcmludGYoc3RkZXJyLCAiXG4oJXM6
JWQgJXMpXG49PT09PT09PT09PT09PT09PVxuIiwgZmlsZSwgbGluZSwgZnVuY3Rpb24pOwotfQot
Ci12b2lkIEtXUVJlcG9ydEVycm9yKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBj
aGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gICAgZnByaW50Zihz
dGRlcnIsICI9PT09PT09PT09PT09PT09PVxuRVJST1I6ICIpOwotICAgIHZhX2xpc3QgYXJnczsK
LSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIHZwcmludGZfc3RkZXJyX29iamMoZm9y
bWF0LCBhcmdzKTsKLSAgICB2YV9lbmQoYXJncyk7Ci0gICAgZnByaW50ZihzdGRlcnIsICJcbigl
czolZCAlcylcbj09PT09PT09PT09PT09PT09XG4iLCBmaWxlLCBsaW5lLCBmdW5jdGlvbik7Ci19
Ci0KLXZvaWQgS1dRTG9nKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpm
dW5jdGlvbiwgS1dRTG9nQ2hhbm5lbCAqY2hhbm5lbCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4p
Ci17Ci0gICAgaWYgKGNoYW5uZWwtPnN0YXRlID09IEtXUUxvZ0NoYW5uZWxVbmluaXRpYWxpemVk
KSB7Ci0gICAgICAgIGNoYW5uZWwtPnN0YXRlID0gS1dRTG9nQ2hhbm5lbE9mZjsKLSAgICAgICAg
TlNTdHJpbmcgKmxvZ0xldmVsU3RyaW5nID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpjaGFubmVs
LT5kZWZhdWx0TmFtZV1dOwotICAgICAgICBpZiAobG9nTGV2ZWxTdHJpbmcpIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGxvZ0xldmVsOwotICAgICAgICAgICAgaWYgKCFbW05TU2Nhbm5lciBzY2Fu
bmVyV2l0aFN0cmluZzpsb2dMZXZlbFN0cmluZ10gc2NhbkhleEludDombG9nTGV2ZWxdKSB7Ci0g
ICAgICAgICAgICAgICAgTlNMb2coQCJ1bmFibGUgdG8gcGFyc2UgaGV4IHZhbHVlIGZvciAlcyAo
JUApLCBsb2dnaW5nIGlzIG9mZiIsIGNoYW5uZWwtPmRlZmF1bHROYW1lLCBsb2dMZXZlbFN0cmlu
Zyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGxvZ0xldmVsICYgY2hhbm5lbC0+
bWFzaykgPT0gY2hhbm5lbC0+bWFzaykgewotICAgICAgICAgICAgICAgIGNoYW5uZWwtPnN0YXRl
ID0gS1dRTG9nQ2hhbm5lbE9uOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIGlmIChjaGFubmVsLT5zdGF0ZSAhPSBLV1FMb2dDaGFubmVsT24pIHsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoY2hhbm5lbC0+bWFzayAhPSAweDEwMCkgLy8g
a29jaWVuZGEgZG9lcyBub3Qgd2FudCB0aGlzIG91dHB1dCB3aGVuIGxvZ2dpbmcgZWRpdGluZwot
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi0gJXM6JWQgJXMgLSAiLCBmaWxlLCBsaW5lLCBmdW5j
dGlvbik7Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0g
ICAgdnByaW50Zl9zdGRlcnJfb2JqYyhmb3JtYXQsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsK
LSAgICBpZiAoZm9ybWF0W3N0cmxlbihmb3JtYXQpIC0gMV0gIT0gJ1xuJykKLSAgICAgICAgcHV0
YygnXG4nLCBzdGRlcnIpOwotfQpJbmRleDogV2ViQ29yZS9rd3EvS1dRQnV0dG9uLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FCdXR0b24ubW0sdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNDQKZGlmZiAtcCAtdSAtcjEuNDQgV2ViQ29yZS9rd3EvS1dRQnV0
dG9uLm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FCdXR0b24ubW0JMiBBdWcgMjAwNSAyMDoyODo0MCAt
MDAwMAkxLjQ0CisrKyBXZWJDb3JlL2t3cS9LV1FCdXR0b24ubW0JMjcgU2VwIDIwMDUgMDg6NDU6
NDAgLTAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2ltcG9ydCAiS1dRQnV0dG9uLmgiCiAKLSNp
bXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4K
ICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgogI2lt
cG9ydCAiS1dRTlNWaWV3RXh0cmFzLmgiCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FDU3RyaW5nLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FDU3RyaW5nLm1t
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE3CmRpZmYgLXAgLXUgLXIxLjE3IFdlYkNvcmUva3dx
L0tXUUNTdHJpbmcubW0KLS0tIFdlYkNvcmUva3dxL0tXUUNTdHJpbmcubW0JMTAgTWF5IDIwMDMg
MDU6NDY6NTkgLTAwMDAJMS4xNworKysgV2ViQ29yZS9rd3EvS1dRQ1N0cmluZy5tbQkyNyBTZXAg
MjAwNSAwODo0NTo0MCAtMDAwMApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW1wb3J0ICJLV1FDU3Ry
aW5nLmgiCiAKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fz
c2VydGlvbnMuaD4KICNpbXBvcnQgPGN0eXBlLmg+CiAKIHVzaW5nIHN0ZDo6b3N0cmVhbTsKSW5k
ZXg6IFdlYkNvcmUva3dxL0tXUUNsaXBib2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2t3cS9LV1FDbGlwYm9hcmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43
CmRpZmYgLXAgLXUgLXIxLjcgV2ViQ29yZS9rd3EvS1dRQ2xpcGJvYXJkLmgKLS0tIFdlYkNvcmUv
a3dxL0tXUUNsaXBib2FyZC5oCTEwIE1heSAyMDA1IDIxOjU5OjE1IC0wMDAwCTEuNworKysgV2Vi
Q29yZS9rd3EvS1dRQ2xpcGJvYXJkLmgJMjcgU2VwIDIwMDUgMDg6NDU6NDEgLTAwMDAKQEAgLTk1
LDcgKzk1LDcgQEAgcHJpdmF0ZToKICAgICBET006OkRPTVN0cmluZyBtX2VmZmVjdEFsbG93ZWQ7
CiAgICAgUVBvaW50IG1fZHJhZ0xvYzsKICAgICBRUGl4bWFwIG1fZHJhZ0ltYWdlOwotICAgIGto
dG1sOjpTaGFyZWRQdHI8RE9NOjpOb2RlSW1wbD4gbV9kcmFnSW1hZ2VFbGVtZW50OworICAgIFNo
YXJlZFB0cjxET006Ok5vZGVJbXBsPiBtX2RyYWdJbWFnZUVsZW1lbnQ7CiAgICAgQWNjZXNzUG9s
aWN5IG1fcG9saWN5OwogICAgIGludCBtX2NoYW5nZUNvdW50OwogICAgIGJvb2wgbV9kcmFnU3Rh
cnRlZDsKSW5kZXg6IFdlYkNvcmUva3dxL0tXUUNsaXBib2FyZC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRQ2xpcGJvYXJkLm1tLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjE3CmRpZmYgLXAgLXUgLXIxLjE3IFdlYkNvcmUva3dxL0tXUUNsaXBib2FyZC5t
bQotLS0gV2ViQ29yZS9rd3EvS1dRQ2xpcGJvYXJkLm1tCTI1IEF1ZyAyMDA1IDE3OjQ3OjI1IC0w
MDAwCTEuMTcKKysrIFdlYkNvcmUva3dxL0tXUUNsaXBib2FyZC5tbQkyNyBTZXAgMjAwNSAwODo0
NTo0MSAtMDAwMApAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbXBvcnQgIktXUUNsaXBib2Fy
ZC5oIgotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0
aW9ucy5oPgogI2ltcG9ydCAiS1dRRm91bmRhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCAiS1dRS0hU
TUxQYXJ0LmgiCiAjaW1wb3J0ICJLV1FTdHJpbmdMaXN0LmgiCkluZGV4OiBXZWJDb3JlL2t3cS9L
V1FDb2xvci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dR
Q29sb3IubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQKZGlmZiAtcCAtdSAtcjEuNDQgV2Vi
Q29yZS9rd3EvS1dRQ29sb3IubW0KLS0tIFdlYkNvcmUva3dxL0tXUUNvbG9yLm1tCTEgQXVnIDIw
MDUgMDk6MDY6MzMgLTAwMDAJMS40NAorKysgV2ViQ29yZS9rd3EvS1dRQ29sb3IubW0JMjcgU2Vw
IDIwMDUgMDg6NDU6NDEgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2ltcG9ydCAiS1dRTmFt
ZXNwYWNlLmgiCiAjaW1wb3J0ICJLV1FTdHJpbmcuaCIKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMu
aCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIktXUVBhaW50ZXIu
aCIKIAogLy8gTlNDb2xvciBjYWxscyBkb24ndCB0aHJvdywgc28gbm8gbmVlZCB0byBibG9jayBD
b2NvYSBleGNlcHRpb25zIGluIHRoaXMgZmlsZQpJbmRleDogV2ViQ29yZS9rd3EvS1dRQ29tYm9C
b3gubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUNvbWJv
Qm94Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY1CmRpZmYgLXAgLXUgLXIxLjY1IFdlYkNv
cmUva3dxL0tXUUNvbWJvQm94Lm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FDb21ib0JveC5tbQkyIFNl
cCAyMDA1IDIxOjM0OjQ3IC0wMDAwCTEuNjUKKysrIFdlYkNvcmUva3dxL0tXUUNvbWJvQm94Lm1t
CTI3IFNlcCAyMDA1IDA4OjQ1OjQxIC0wMDAwCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbXBvcnQg
IktXUUNvbWJvQm94LmgiCiAKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4
bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIktXUUJ1dHRvbi5oIgogI2ltcG9ydCAiS1dR
RXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiS1dRS0hUTUxQYXJ0LmgiCkluZGV4OiBXZWJDb3JlL2t3
cS9LV1FFZGl0Q29tbWFuZC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9rd3EvS1dRRWRpdENvbW1hbmQubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1w
IC11IC1yMS41IFdlYkNvcmUva3dxL0tXUUVkaXRDb21tYW5kLm1tCi0tLSBXZWJDb3JlL2t3cS9L
V1FFZGl0Q29tbWFuZC5tbQk1IE9jdCAyMDA0IDA3OjAxOjIxIC0wMDAwCTEuNQorKysgV2ViQ29y
ZS9rd3EvS1dRRWRpdENvbW1hbmQubW0JMjcgU2VwIDIwMDUgMDg6NDU6NDEgLTAwMDAKQEAgLTI1
LDcgKzI1LDcgQEAKIAogI2ltcG9ydCAiS1dRRWRpdENvbW1hbmQuaCIKIAotI2ltcG9ydCAiS1dR
QXNzZXJ0aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAi
S1dRRm91bmRhdGlvbkV4dHJhcy5oIgogCiAjaW1wb3J0ICJodG1sZWRpdGluZy5oIgpJbmRleDog
V2ViQ29yZS9rd3EvS1dRRXhjZXB0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2t3cS9LV1FFeGNlcHRpb25zLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpk
aWZmIC1wIC11IC1yMS4zIFdlYkNvcmUva3dxL0tXUUV4Y2VwdGlvbnMuaAotLS0gV2ViQ29yZS9r
d3EvS1dRRXhjZXB0aW9ucy5oCTI3IE9jdCAyMDAzIDIwOjUxOjI1IC0wMDAwCTEuMworKysgV2Vi
Q29yZS9rd3EvS1dRRXhjZXB0aW9ucy5oCTI3IFNlcCAyMDA1IDA4OjQ1OjQxIC0wMDAwCkBAIC0y
NCw3ICsyNCw3IEBACiAgKi8KIAogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0V4Y2VwdGlvbi5oPgot
I2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5o
PgogCiBjbGFzcyBLV1FOU0hhbmRsZXIKIHsKSW5kZXg6IFdlYkNvcmUva3dxL0tXUUZpbGVCdXR0
b24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUZpbGVC
dXR0b24ubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtcCAtdSAtcjEuMjcgV2Vi
Q29yZS9rd3EvS1dRRmlsZUJ1dHRvbi5tbQotLS0gV2ViQ29yZS9rd3EvS1dRRmlsZUJ1dHRvbi5t
bQkyOSBBcHIgMjAwNSAwMDozMTowMSAtMDAwMAkxLjI3CisrKyBXZWJDb3JlL2t3cS9LV1FGaWxl
QnV0dG9uLm1tCTI3IFNlcCAyMDA1IDA4OjQ1OjQxIC0wMDAwCkBAIC0yNSw3ICsyNSw3IEBACiAK
ICNpbXBvcnQgIktXUUZpbGVCdXR0b24uaCIKIAotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgor
I2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAiS1dRRXhjZXB0aW9ucy5o
IgogI2ltcG9ydCAiS1dRS0hUTUxQYXJ0LmgiCiAjaW1wb3J0ICJLV1FOU1ZpZXdFeHRyYXMuaCIK
SW5kZXg6IFdlYkNvcmUva3dxL0tXUUZvbnRGYW1pbHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRRm9udEZhbWlseS5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjQKZGlmZiAtcCAtdSAtcjEuNCBXZWJDb3JlL2t3cS9LV1FGb250RmFtaWx5LmgKLS0tIFdl
YkNvcmUva3dxL0tXUUZvbnRGYW1pbHkuaAkyNiBBcHIgMjAwNSAxODo0NjowNCAtMDAwMAkxLjQK
KysrIFdlYkNvcmUva3dxL0tXUUZvbnRGYW1pbHkuaAkyNyBTZXAgMjAwNSAwODo0NTo0MSAtMDAw
MApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiS1dRU3RyaW5nLmgiCiAjaW5jbHVkZSAi
ZG9tX2F0b21pY3N0cmluZy5oIgotI2luY2x1ZGUgIm1pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmgi
CisjaW5jbHVkZSAia3htbGNvcmUvRmFzdE1hbGxvYy5oIgogCiAjaWZkZWYgX19PQkpDX18KIEBj
bGFzcyBOU1N0cmluZzsKQEAgLTMzLDcgKzMzLDcgQEAKIGNsYXNzIE5TU3RyaW5nOwogI2VuZGlm
CiAKLWNsYXNzIEtXUUZvbnRGYW1pbHkgeworY2xhc3MgS1dRRm9udEZhbWlseSA6IHB1YmxpYyBG
YXN0QWxsb2NhdGVkIHsKIHB1YmxpYzoKICAgICBLV1FGb250RmFtaWx5KCk7CiAgICAgfktXUUZv
bnRGYW1pbHkoKSB7IGlmIChfbmV4dCkgX25leHQtPmRlcmVmKCk7ICB9CkBAIC00MSw4ICs0MSw2
IEBAIHB1YmxpYzoKICAgICBLV1FGb250RmFtaWx5KGNvbnN0IEtXUUZvbnRGYW1pbHkgJik7ICAg
IAogICAgIEtXUUZvbnRGYW1pbHkgJm9wZXJhdG9yPShjb25zdCBLV1FGb250RmFtaWx5ICYpOwog
ICAgICAgICAKLSAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7Ci0KICAgICB2b2lkIHNldEZhbWls
eShjb25zdCBET006OkF0b21pY1N0cmluZyAmKTsKICAgICBjb25zdCBET006OkF0b21pY1N0cmlu
ZyYgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4gX2ZhbWlseTsgfQogICAgIGJvb2wgZmFtaWx5SXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9mYW1pbHkuaXNFbXB0eSgpOyB9CkluZGV4OiBXZWJDb3Jl
L2t3cS9LV1FGb3JtRGF0YS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9rd3EvS1dRRm9ybURhdGEubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11
IC1yMS4yIFdlYkNvcmUva3dxL0tXUUZvcm1EYXRhLm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FGb3Jt
RGF0YS5tbQk2IFNlcCAyMDA0IDIzOjIzOjE1IC0wMDAwCTEuMgorKysgV2ViQ29yZS9rd3EvS1dR
Rm9ybURhdGEubW0JMjcgU2VwIDIwMDUgMDg6NDU6NDEgLTAwMDAKQEAgLTI1LDcgKzI1LDcgQEAK
IAogI2ltcG9ydCAiS1dRRm9ybURhdGEuaCIKIAotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgor
I2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAiZm9ybWRhdGEuaCIKIAog
dXNpbmcga2h0bWw6OkZvcm1EYXRhOwpJbmRleDogV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIyOApkaWZmIC1wIC11IC1yMS4yMjggV2ViQ29yZS9r
d3EvS1dRS0hUTUxQYXJ0LmgKLS0tIFdlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5oCTI0IFNlcCAy
MDA1IDAxOjE5OjA0IC0wMDAwCTEuMjI4CisrKyBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQuaAky
NyBTZXAgMjAwNSAwODo0NTo0MSAtMDAwMApAQCAtNDczLDcgKzQ3Myw3IEBAIHByaXZhdGU6CiAg
ICAgV2ViU2NyaXB0T2JqZWN0ICpfd2luZG93U2NyaXB0T2JqZWN0OwogICAgIE5QT2JqZWN0ICpf
d2luZG93U2NyaXB0TlBPYmplY3Q7CiAgICAgCi0gICAga2h0bWw6OlNoYXJlZFB0cjxET006Ok5v
ZGVJbXBsPiBfZHJhZ1NyYzsgICAgIC8vIGVsZW1lbnQgdGhhdCBtYXkgYmUgYSBkcmFnIHNvdXJj
ZSwgZm9yIHRoZSBjdXJyZW50IG1vdXNlIGdlc3R1cmUKKyAgICBTaGFyZWRQdHI8RE9NOjpOb2Rl
SW1wbD4gX2RyYWdTcmM7ICAgICAvLyBlbGVtZW50IHRoYXQgbWF5IGJlIGEgZHJhZyBzb3VyY2Us
IGZvciB0aGUgY3VycmVudCBtb3VzZSBnZXN0dXJlCiAgICAgYm9vbCBfZHJhZ1NyY0lzTGluazsK
ICAgICBib29sIF9kcmFnU3JjSXNJbWFnZTsKICAgICBib29sIF9kcmFnU3JjSW5TZWxlY3Rpb247
CkBAIC00ODEsOSArNDgxLDkgQEAgcHJpdmF0ZToKICAgICBib29sIF9kcmFnU3JjSXNESFRNTDsK
ICAgICBLV1FDbGlwYm9hcmQgKl9kcmFnQ2xpcGJvYXJkOyAgIC8vIHVzZWQgb24gb25seSB0aGUg
c291cmNlIHNpZGUgb2YgZHJhZ2dpbmcKICAgICAKLSAgICBtdXRhYmxlIGtodG1sOjpTaGFyZWRQ
dHI8RE9NOjpOb2RlSW1wbD4gX2VsZW1lbnRUb0RyYXc7CisgICAgbXV0YWJsZSBTaGFyZWRQdHI8
RE9NOjpOb2RlSW1wbD4gX2VsZW1lbnRUb0RyYXc7CiAKLSAgICBraHRtbDo6U2hhcmVkUHRyPERP
TTo6UmFuZ2VJbXBsPiBtX21hcmtlZFRleHRSYW5nZTsKKyAgICBTaGFyZWRQdHI8RE9NOjpSYW5n
ZUltcGw+IG1fbWFya2VkVGV4dFJhbmdlOwogICAgIGJvb2wgbV9tYXJrZWRUZXh0VXNlc1VuZGVy
bGluZXM7CiAgICAgUVZhbHVlTGlzdDxNYXJrZWRUZXh0VW5kZXJsaW5lPiBtX21hcmtlZFRleHRV
bmRlcmxpbmVzOwogCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5tbSx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS42NzQKZGlmZiAtcCAtdSAtcjEuNjc0IFdlYkNvcmUva3dxL0tXUUtI
VE1MUGFydC5tbQotLS0gV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tCTI0IFNlcCAyMDA1IDAx
OjE5OjA0IC0wMDAwCTEuNjc0CisrKyBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0JMjcgU2Vw
IDIwMDUgMDg6NDU6NDMgLTAwMDAKQEAgLTE0NSw3ICsxNDUsNiBAQCB1c2luZyBraHRtbDo6U0VM
RUNUX0lHTk9SRTsKIHVzaW5nIGtodG1sOjpzZXRFbmQ7CiB1c2luZyBraHRtbDo6c2V0U3RhcnQ7
CiB1c2luZyBraHRtbDo6U2hhZG93RGF0YTsKLXVzaW5nIGtodG1sOjpTaGFyZWRQdHI7CiB1c2lu
ZyBraHRtbDo6c3RhcnRPZldvcmQ7CiB1c2luZyBraHRtbDo6c3RhcnRWaXNpYmxlUG9zaXRpb247
CiB1c2luZyBraHRtbDo6U3R5bGVEYXNoYm9hcmRSZWdpb247CkluZGV4OiBXZWJDb3JlL2t3cS9L
V1FLUGFydHNCcm93c2VySW50ZXJmYWNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2t3cS9LV1FLUGFydHNCcm93c2VySW50ZXJmYWNlLm1tLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEzCmRpZmYgLXAgLXUgLXIxLjEzIFdlYkNvcmUva3dxL0tXUUtQYXJ0c0Jyb3dz
ZXJJbnRlcmZhY2UubW0KLS0tIFdlYkNvcmUva3dxL0tXUUtQYXJ0c0Jyb3dzZXJJbnRlcmZhY2Uu
bW0JMTYgTm92IDIwMDMgMjE6MjU6MjMgLTAwMDAJMS4xMworKysgV2ViQ29yZS9rd3EvS1dRS1Bh
cnRzQnJvd3NlckludGVyZmFjZS5tbQkyNyBTZXAgMjAwNSAwODo0NTo0MyAtMDAwMApAQCAtMjUs
NyArMjUsNyBAQAogCiAjaW1wb3J0ICJLV1FLUGFydHNCcm93c2VySW50ZXJmYWNlLmgiCiAKLSNp
bXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4K
ICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgogI2lt
cG9ydCAiV2ViQ29yZUJyaWRnZS5oIgpJbmRleDogV2ViQ29yZS9rd3EvS1dRS1VSTC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS1VSTC5tbSx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS45MQpkaWZmIC1wIC11IC1yMS45MSBXZWJDb3JlL2t3cS9LV1FLVVJM
Lm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FLVVJMLm1tCTI0IEp1biAyMDA1IDE2OjQ4OjM5IC0wMDAw
CTEuOTEKKysrIFdlYkNvcmUva3dxL0tXUUtVUkwubW0JMjcgU2VwIDIwMDUgMDg6NDU6NDQgLTAw
MDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2ltcG9ydCAiS1dRS1VSTC5oIgogCi0jaW1wb3J0ICJL
V1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0
ICJLV1FGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJLV1FSZWdFeHAuaCIKICNpbXBvcnQg
IktXUVRleHRDb2RlYy5oIgpJbmRleDogV2ViQ29yZS9rd3EvS1dRTGlzdEJveC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRTGlzdEJveC5tbSx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS41NwpkaWZmIC1wIC11IC1yMS41NyBXZWJDb3JlL2t3cS9LV1FMaXN0
Qm94Lm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FMaXN0Qm94Lm1tCTIgU2VwIDIwMDUgMjE6MzQ6NDgg
LTAwMDAJMS41NworKysgV2ViQ29yZS9rd3EvS1dRTGlzdEJveC5tbQkyNyBTZXAgMjAwNSAwODo0
NTo0NCAtMDAwMApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW1wb3J0ICJLV1FMaXN0Qm94LmgiCiAK
LSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMu
aD4KICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgog
I2ltcG9ydCAiS1dRTlNWaWV3RXh0cmFzLmgiCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FMaXN0SW1w
bC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRTGlzdElt
cGwubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlmZiAtcCAtdSAtcjEuMjEgV2ViQ29y
ZS9rd3EvS1dRTGlzdEltcGwubW0KLS0tIFdlYkNvcmUva3dxL0tXUUxpc3RJbXBsLm1tCTMgSnVs
IDIwMDUgMDk6NDU6MDggLTAwMDAJMS4yMQorKysgV2ViQ29yZS9rd3EvS1dRTGlzdEltcGwubW0J
MjcgU2VwIDIwMDUgMDg6NDU6NDUgLTAwMDAKQEAgLTI4LDE2ICsyOCwxNCBAQAogI2ltcG9ydCA8
Y3N0ZGRlZj4KICNpbXBvcnQgPGFsZ29yaXRobT4KICNpbXBvcnQgPENvcmVGb3VuZGF0aW9uL0NG
QXJyYXkuaD4KLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKLSNpbXBvcnQgIm1pc2MvbWFpbl90
aHJlYWRfbWFsbG9jLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CisjaW1wb3J0
ICJreG1sY29yZS9GYXN0TWFsbG9jLmgiCiAKLWNsYXNzIEtXUUxpc3ROb2RlCitjbGFzcyBLV1FM
aXN0Tm9kZSA6IHB1YmxpYyBGYXN0QWxsb2NhdGVkCiB7CiBwdWJsaWM6CiAgICAgS1dRTGlzdE5v
ZGUodm9pZCAqZCkgOiBkYXRhKGQpLCBuZXh0KE5VTEwpLCBwcmV2KE5VTEwpIHsgfQogCi0gICAg
TUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiAgICAgdm9pZCAqZGF0YTsKICAgICBLV1FMaXN0Tm9k
ZSAqbmV4dDsKICAgICBLV1FMaXN0Tm9kZSAqcHJldjsKSW5kZXg6IFdlYkNvcmUva3dxL0tXUUxv
Z2dpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRTG9n
Z2luZy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtcCAtdSAtcjEuOSBXZWJDb3Jl
L2t3cS9LV1FMb2dnaW5nLmgKLS0tIFdlYkNvcmUva3dxL0tXUUxvZ2dpbmcuaAkxMSBKdWwgMjAw
NSAyMzoxMjowMSAtMDAwMAkxLjkKKysrIFdlYkNvcmUva3dxL0tXUUxvZ2dpbmcuaAkyNyBTZXAg
MjAwNSAwODo0NTo0NSAtMDAwMApAQCAtMjMsMTcgKzIzLDE3IEBACiAgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
ICAqLwogCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3Nl
cnRpb25zLmg+CiAKICNpZm5kZWYgTE9HX0NIQU5ORUxfUFJFRklYCiAjZGVmaW5lIExPR19DSEFO
TkVMX1BSRUZJWCBLV1FMb2cKICNlbmRpZgogCi1leHRlcm4gS1dRTG9nQ2hhbm5lbCBLV1FMb2dO
b3RZZXRJbXBsZW1lbnRlZDsKK2V4dGVybiBLWENMb2dDaGFubmVsIEtXUUxvZ05vdFlldEltcGxl
bWVudGVkOwogCi1leHRlcm4gS1dRTG9nQ2hhbm5lbCBLV1FMb2dGcmFtZXM7Ci1leHRlcm4gS1dR
TG9nQ2hhbm5lbCBLV1FMb2dMb2FkaW5nOwotZXh0ZXJuIEtXUUxvZ0NoYW5uZWwgS1dRTG9nUG9w
dXBCbG9ja2luZzsKLWV4dGVybiBLV1FMb2dDaGFubmVsIEtXUUxvZ0V2ZW50czsKLWV4dGVybiBL
V1FMb2dDaGFubmVsIEtXUUxvZ0VkaXRpbmc7Ci1leHRlcm4gS1dRTG9nQ2hhbm5lbCBLV1FMb2dU
ZXh0Q29udmVyc2lvbjsKK2V4dGVybiBLWENMb2dDaGFubmVsIEtXUUxvZ0ZyYW1lczsKK2V4dGVy
biBLWENMb2dDaGFubmVsIEtXUUxvZ0xvYWRpbmc7CitleHRlcm4gS1hDTG9nQ2hhbm5lbCBLV1FM
b2dQb3B1cEJsb2NraW5nOworZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgS1dRTG9nRXZlbnRzOworZXh0
ZXJuIEtYQ0xvZ0NoYW5uZWwgS1dRTG9nRWRpdGluZzsKK2V4dGVybiBLWENMb2dDaGFubmVsIEtX
UUxvZ1RleHRDb252ZXJzaW9uOwpJbmRleDogV2ViQ29yZS9rd3EvS1dRTG9nZ2luZy5tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FMb2dnaW5nLm0sdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC1wIC11IC1yMS44IFdlYkNvcmUva3dxL0tXUUxvZ2dp
bmcubQotLS0gV2ViQ29yZS9rd3EvS1dRTG9nZ2luZy5tCTExIEp1bCAyMDA1IDIzOjEyOjAxIC0w
MDAwCTEuOAorKysgV2ViQ29yZS9rd3EvS1dRTG9nZ2luZy5tCTI3IFNlcCAyMDA1IDA4OjQ1OjQ1
IC0wMDAwCkBAIC0yNSwxMyArMjUsMTMgQEAKIAogI2ltcG9ydCAiS1dRTG9nZ2luZy5oIgogCi1L
V1FMb2dDaGFubmVsIEtXUUxvZ05vdFlldEltcGxlbWVudGVkID0geyAweDAwMDAwMDAxLCAiV2Vi
Q29yZUxvZ0xldmVsIiwgS1dRTG9nQ2hhbm5lbFVuaW5pdGlhbGl6ZWQgfTsKK0tYQ0xvZ0NoYW5u
ZWwgS1dRTG9nTm90WWV0SW1wbGVtZW50ZWQgPSB7IDB4MDAwMDAwMDEsICJXZWJDb3JlTG9nTGV2
ZWwiLCBLWENMb2dDaGFubmVsVW5pbml0aWFsaXplZCB9OwogCi1LV1FMb2dDaGFubmVsIEtXUUxv
Z0ZyYW1lcyA9ICAgICAgICAgICAgeyAweDAwMDAwMDEwLCAiV2ViQ29yZUxvZ0xldmVsIiwgS1dR
TG9nQ2hhbm5lbFVuaW5pdGlhbGl6ZWQgfTsKLUtXUUxvZ0NoYW5uZWwgS1dRTG9nTG9hZGluZyA9
ICAgICAgICAgICB7IDB4MDAwMDAwMjAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLV1FMb2dDaGFubmVs
VW5pbml0aWFsaXplZCB9OworS1hDTG9nQ2hhbm5lbCBLV1FMb2dGcmFtZXMgPSAgICAgICAgICAg
IHsgMHgwMDAwMDAxMCwgIldlYkNvcmVMb2dMZXZlbCIsIEtYQ0xvZ0NoYW5uZWxVbmluaXRpYWxp
emVkIH07CitLWENMb2dDaGFubmVsIEtXUUxvZ0xvYWRpbmcgPSAgICAgICAgICAgeyAweDAwMDAw
MDIwLCAiV2ViQ29yZUxvZ0xldmVsIiwgS1hDTG9nQ2hhbm5lbFVuaW5pdGlhbGl6ZWQgfTsKIAot
S1dRTG9nQ2hhbm5lbCBLV1FMb2dQb3B1cEJsb2NraW5nID0gICAgIHsgMHgwMDAwMDA0MCwgIldl
YkNvcmVMb2dMZXZlbCIsIEtXUUxvZ0NoYW5uZWxVbmluaXRpYWxpemVkIH07CitLWENMb2dDaGFu
bmVsIEtXUUxvZ1BvcHVwQmxvY2tpbmcgPSAgICAgeyAweDAwMDAwMDQwLCAiV2ViQ29yZUxvZ0xl
dmVsIiwgS1hDTG9nQ2hhbm5lbFVuaW5pdGlhbGl6ZWQgfTsKIAotS1dRTG9nQ2hhbm5lbCBLV1FM
b2dFdmVudHMgPSAgICAgICAgICAgIHsgMHgwMDAwMDA4MCwgIldlYkNvcmVMb2dMZXZlbCIsIEtX
UUxvZ0NoYW5uZWxVbmluaXRpYWxpemVkIH07Ci1LV1FMb2dDaGFubmVsIEtXUUxvZ0VkaXRpbmcg
PSAgICAgICAgICAgeyAweDAwMDAwMTAwLCAiV2ViQ29yZUxvZ0xldmVsIiwgS1dRTG9nQ2hhbm5l
bFVuaW5pdGlhbGl6ZWQgfTsKLUtXUUxvZ0NoYW5uZWwgS1dRTG9nVGV4dENvbnZlcnNpb24gPSAg
ICB7IDB4MDAwMDAyMDAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLV1FMb2dDaGFubmVsVW5pbml0aWFs
aXplZCB9OworS1hDTG9nQ2hhbm5lbCBLV1FMb2dFdmVudHMgPSAgICAgICAgICAgIHsgMHgwMDAw
MDA4MCwgIldlYkNvcmVMb2dMZXZlbCIsIEtYQ0xvZ0NoYW5uZWxVbmluaXRpYWxpemVkIH07CitL
WENMb2dDaGFubmVsIEtXUUxvZ0VkaXRpbmcgPSAgICAgICAgICAgeyAweDAwMDAwMTAwLCAiV2Vi
Q29yZUxvZ0xldmVsIiwgS1hDTG9nQ2hhbm5lbFVuaW5pdGlhbGl6ZWQgfTsKK0tYQ0xvZ0NoYW5u
ZWwgS1dRTG9nVGV4dENvbnZlcnNpb24gPSAgICB7IDB4MDAwMDAyMDAsICJXZWJDb3JlTG9nTGV2
ZWwiLCBLWENMb2dDaGFubmVsVW5pbml0aWFsaXplZCB9OwpJbmRleDogV2ViQ29yZS9rd3EvS1dR
TWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FN
YXBJbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC1wIC11IC1yMS45IFdlYkNv
cmUva3dxL0tXUU1hcEltcGwuaAotLS0gV2ViQ29yZS9rd3EvS1dRTWFwSW1wbC5oCTE1IEF1ZyAy
MDA1IDAwOjMyOjQwIC0wMDAwCTEuOQorKysgV2ViQ29yZS9rd3EvS1dRTWFwSW1wbC5oCTI3IFNl
cCAyMDA1IDA4OjQ1OjQ1IC0wMDAwCkBAIC0yOSwxNSArMjksMTIgQEAKICNpbmNsdWRlIDxuZXc+
CiAKICNpbmNsdWRlICJLV1FSZWZQdHIuaCIKLSNpbmNsdWRlICJtYWluX3RocmVhZF9tYWxsb2Mu
aCIKKyNpbmNsdWRlICJreG1sY29yZS9GYXN0TWFsbG9jLmgiCiAKIGNsYXNzIEtXUU1hcEltcGw7
CiAKLWNsYXNzIEtXUU1hcE5vZGVJbXBsCitjbGFzcyBLV1FNYXBOb2RlSW1wbCA6IHB1YmxpYyBG
YXN0QWxsb2NhdGVkCiB7Ci1wdWJsaWM6Ci0gICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwotCiBw
cm90ZWN0ZWQ6CiAgICAgdHlwZWRlZiBlbnVtIHsgUmVkID0gMCwgQmxhY2sgPSAxIH0gS1dRTWFw
Tm9kZUNvbG9yOwogCkBAIC02NywxMCArNjQsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIH07CiAK
LWNsYXNzIEtXUU1hcEl0ZXJhdG9ySW1wbCB7Ci1wdWJsaWM6Ci0gICAgTUFJTl9USFJFQURfQUxM
T0NBVEVEOwotCitjbGFzcyBLV1FNYXBJdGVyYXRvckltcGwgOiBwdWJsaWMgRmFzdEFsbG9jYXRl
ZCB7CiBwcm90ZWN0ZWQ6CiAgICAgS1dRTWFwTm9kZUltcGwgKm5vZGU7CiAKSW5kZXg6IFdlYkNv
cmUva3dxL0tXUU1hcEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva3dxL0tXUU1hcEltcGwubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtcCAt
dSAtcjEuMTAgV2ViQ29yZS9rd3EvS1dRTWFwSW1wbC5tbQotLS0gV2ViQ29yZS9rd3EvS1dRTWFw
SW1wbC5tbQkxNSBBdWcgMjAwNSAwMDozMjo0MCAtMDAwMAkxLjEwCisrKyBXZWJDb3JlL2t3cS9L
V1FNYXBJbXBsLm1tCTI3IFNlcCAyMDA1IDA4OjQ1OjQ1IC0wMDAwCkBAIC0xMTUsNyArMTE1LDcg
QEAgdm9pZCBLV1FNYXBJdGVyYXRvckltcGw6OmluY3JlbWVudEludGVybgogCiAvLyBLV1FNYXBJ
bXBsUHJpdmF0ZQogCi1jbGFzcyBLV1FNYXBJbXBsOjpLV1FNYXBQcml2YXRlCitjbGFzcyBLV1FN
YXBJbXBsOjpLV1FNYXBQcml2YXRlIDogcHVibGljIEZhc3RBbGxvY2F0ZWQKIHsKIHB1YmxpYzoK
ICAgICBLV1FNYXBQcml2YXRlKEtXUU1hcE5vZGVJbXBsICpub2RlLApAQCAtMTI0LDggKzEyNCw2
IEBAIHB1YmxpYzoKIAogICAgIH5LV1FNYXBQcml2YXRlKCk7CiAKLSAgICBNQUlOX1RIUkVBRF9B
TExPQ0FURUQ7Ci0KICAgICBLV1FNYXBOb2RlSW1wbCAqZ3VhcmQ7CiAgICAgdWludCBudW1Ob2Rl
czsKICAgICBpbnQgcmVmQ291bnQ7CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FPYmplY3QubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUU9iamVjdC5tbSx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS40NgpkaWZmIC1wIC11IC1yMS40NiBXZWJDb3JlL2t3cS9LV1FP
YmplY3QubW0KLS0tIFdlYkNvcmUva3dxL0tXUU9iamVjdC5tbQkxOCBNYXkgMjAwNSAyMToxMDoy
NiAtMDAwMAkxLjQ2CisrKyBXZWJDb3JlL2t3cS9LV1FPYmplY3QubW0JMjcgU2VwIDIwMDUgMDg6
NDU6NDUgLTAwMDAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbXBvcnQgIktXUU9iamVjdC5oIgogCiAj
aW1wb3J0ICJLV1FWYXJpYW50LmgiCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1wb3J0
IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAKIC8vIFRoZSBGb3VuZGF0aW9uLWxldmVsIENvY29h
IGNhbGxzIGhlcmUgKE5TVGltZXIsIE5TRGF0ZSwgTlNBcnJheSwKIC8vIE5TRGljdGlvbmFyeSkg
c2hvdWxkIGJlIGV4Y2VwdGlvbi1mcmVlLCBzbyBubyBuZWVkIHRvIGJsb2NrCkluZGV4OiBXZWJD
b3JlL2t3cS9LV1FQYWdlU3RhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva3dxL0tXUVBhZ2VTdGF0ZS5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZm
IC1wIC11IC1yMS4xOSBXZWJDb3JlL2t3cS9LV1FQYWdlU3RhdGUubW0KLS0tIFdlYkNvcmUva3dx
L0tXUVBhZ2VTdGF0ZS5tbQkxOSBTZXAgMjAwNSAxODo1MjoxMyAtMDAwMAkxLjE5CisrKyBXZWJD
b3JlL2t3cS9LV1FQYWdlU3RhdGUubW0JMjcgU2VwIDIwMDUgMDg6NDU6NDUgLTAwMDAKQEAgLTMy
LDcgKzMyLDcgQEAKICNpbXBvcnQgImtodG1sdmlldy5oIgogI2ltcG9ydCAia2pzX3dpbmRvdy5o
IgogCi0jaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRp
b25zLmg+CiAjaW1wb3J0ICJLV1FGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJLV1FLSFRN
TFBhcnQuaCIKIApJbmRleDogV2ViQ29yZS9rd3EvS1dRUGFpbnRlci5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRUGFpbnRlci5tbSx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xNDIKZGlmZiAtcCAtdSAtcjEuMTQyIFdlYkNvcmUva3dxL0tXUVBhaW50ZXIu
bW0KLS0tIFdlYkNvcmUva3dxL0tXUVBhaW50ZXIubW0JMjQgU2VwIDIwMDUgMTE6NDU6MTggLTAw
MDAJMS4xNDIKKysrIFdlYkNvcmUva3dxL0tXUVBhaW50ZXIubW0JMjcgU2VwIDIwMDUgMDg6NDU6
NDYgLTAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2ltcG9ydCAiS1dRUGFpbnRlci5oIgogCi0j
aW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+
CiAjaW1wb3J0ICJLV1FCcnVzaC5oIgogI2ltcG9ydCAiS1dRRXhjZXB0aW9ucy5oIgogI2ltcG9y
dCAiS1dRRm91bmRhdGlvbkV4dHJhcy5oIgpJbmRleDogV2ViQ29yZS9rd3EvS1dRUmVzb3VyY2VM
b2FkZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVJl
c291cmNlTG9hZGVyLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIx
LjE1IFdlYkNvcmUva3dxL0tXUVJlc291cmNlTG9hZGVyLm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FS
ZXNvdXJjZUxvYWRlci5tbQk4IFNlcCAyMDA1IDIxOjM1OjMwIC0wMDAwCTEuMTUKKysrIFdlYkNv
cmUva3dxL0tXUVJlc291cmNlTG9hZGVyLm1tCTI3IFNlcCAyMDA1IDA4OjQ1OjQ2IC0wMDAwCkBA
IC0yNSw3ICsyNSw3IEBACiAKICNpbXBvcnQgIktXUVJlc291cmNlTG9hZGVyLmgiCiAKLSNpbXBv
cnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNp
bXBvcnQgIktXUUtKb2JDbGFzc2VzLmgiCiAjaW1wb3J0ICJsb2FkZXIuaCIKIApJbmRleDogV2Vi
Q29yZS9rd3EvS1dRU2lnbmFsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2t3cS9LV1FTaWduYWwubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkKZGlmZiAtcCAt
dSAtcjEuMTkgV2ViQ29yZS9rd3EvS1dRU2lnbmFsLm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FTaWdu
YWwubW0JMTQgSnVsIDIwMDUgMDI6MzI6MzMgLTAwMDAJMS4xOQorKysgV2ViQ29yZS9rd3EvS1dR
U2lnbmFsLm1tCTI3IFNlcCAyMDA1IDA4OjQ1OjQ2IC0wMDAwCkBAIC0yNiw3ICsyNiw3IEBACiAj
aW1wb3J0ICJLV1FTaWduYWwuaCIKIAogI2ltcG9ydCAiS1dRT2JqZWN0LmgiCi0jaW1wb3J0ICJL
V1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAKIHVzaW5n
IEtJTzo6Sm9iOwogCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FTbG90Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FTbG90Lm1tLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjMzCmRpZmYgLXAgLXUgLXIxLjMzIFdlYkNvcmUva3dxL0tXUVNsb3QubW0KLS0tIFdl
YkNvcmUva3dxL0tXUVNsb3QubW0JMSBTZXAgMjAwNSAxODo1Nzo1MyAtMDAwMAkxLjMzCisrKyBX
ZWJDb3JlL2t3cS9LV1FTbG90Lm1tCTI3IFNlcCAyMDA1IDA4OjQ1OjQ2IC0wMDAwCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNpbXBvcnQgIktXUVNsb3QuaCIKIAotI2ltcG9ydCAiS1dRQXNzZXJ0aW9u
cy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCiAjaW1wb3J0ICJkb21fZG9j
aW1wbC5oIgogI2ltcG9ydCAia2h0bWxfcGFydC5oIgpJbmRleDogV2ViQ29yZS9rd3EvS1dRU3Ry
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVN0cmlu
Zy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExNwpkaWZmIC1wIC11IC1yMS4xMTcgV2ViQ29y
ZS9rd3EvS1dRU3RyaW5nLmgKLS0tIFdlYkNvcmUva3dxL0tXUVN0cmluZy5oCTE2IFNlcCAyMDA1
IDIyOjQyOjIzIC0wMDAwCTEuMTE3CisrKyBXZWJDb3JlL2t3cS9LV1FTdHJpbmcuaAkyNyBTZXAg
MjAwNSAwODo0NTo0NiAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSA8dW5pY29k
ZS91Y2hhci5oPgogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+Ci0j
aW5jbHVkZSAibWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaCIKKyNpbmNsdWRlICJreG1sY29yZS9G
YXN0TWFsbG9jLmgiCiAjaW5jbHVkZSAiS1dRQ1N0cmluZy5oIgogCiAvLyBNYWtlIGh0bWx0b2tl
bml6ZXIuY3BwIGhhcHB5CkBAIC0zNDAsNyArMzQwLDExIEBAIGlubGluZSBib29sIG9wZXJhdG9y
PChjaGFyIGNoLCBRQ2hhciBxYykKICNkZWZpbmUgUVNfSU5URVJOQUxfQlVGRkVSX0NIQVJTIFFT
X0lOVEVSTkFMX0JVRkZFUl9TSVpFLTEKICNkZWZpbmUgUVNfSU5URVJOQUxfQlVGRkVSX1VDSEFS
UyBRU19JTlRFUk5BTF9CVUZGRVJfU0laRS8yCiAKLXN0cnVjdCBLV1FTdHJpbmdEYXRhIHsKK3N0
cnVjdCBLV1FTdHJpbmdEYXRhIAorI2lmbmRlZiBRU1RSSU5HX0RFQlVHX0FMTE9DQVRJT05TCisg
ICAgOiBwdWJsaWMgRmFzdEFsbG9jYXRlZCAKKyNlbmRpZgorewogICAgIC8vIFVzZXMgc2hhcmVk
IG51bGwgZGF0YS4KICAgICBLV1FTdHJpbmdEYXRhKCk7CiAgICAgdm9pZCBpbml0aWFsaXplKCk7
CkBAIC0zNjUsOCArMzY5LDYgQEAgc3RydWN0IEtXUVN0cmluZ0RhdGEgewogI2lmZGVmIFFTVFJJ
TkdfREVCVUdfQUxMT0NBVElPTlMKICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHMpOwog
ICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqcCk7Ci0jZWxzZQotICAgIE1BSU5fVEhSRUFE
X0FMTE9DQVRFRDsKICNlbmRpZgogCiAgICAgaW5saW5lIHZvaWQgcmVmKCkgeyByZWZDb3VudCsr
OyB9CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FTdHJpbmcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVN0cmluZy5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xNDAKZGlmZiAtcCAtdSAtcjEuMTQwIFdlYkNvcmUva3dxL0tXUVN0cmluZy5tbQotLS0gV2Vi
Q29yZS9rd3EvS1dRU3RyaW5nLm1tCTE2IFNlcCAyMDA1IDIyOjQyOjI0IC0wMDAwCTEuMTQwCisr
KyBXZWJDb3JlL2t3cS9LV1FTdHJpbmcubW0JMjcgU2VwIDIwMDUgMDg6NDU6NDcgLTAwMDAKQEAg
LTMzLDExICszMyw3IEBACiAjaW1wb3J0ICJLV1FTdHJpbmcuaCIKICNpbXBvcnQgIktXUVJlZ0V4
cC5oIgogI2ltcG9ydCAiS1dRVGV4dENvZGVjLmgiCi0jaW1wb3J0ICJtaXNjL21haW5fdGhyZWFk
X21hbGxvYy5oIgotCi11c2luZyBraHRtbDo6bWFpbl90aHJlYWRfbWFsbG9jOwotdXNpbmcga2h0
bWw6Om1haW5fdGhyZWFkX3JlYWxsb2M7Ci11c2luZyBraHRtbDo6bWFpbl90aHJlYWRfZnJlZTsK
KyNpbXBvcnQgImt4bWxjb3JlL0Zhc3RNYWxsb2MuaCIKIAogI2RlZmluZSBDSEVDS19GT1JfSEFO
RExFX0xFQUtTIDAKIApAQCAtMTI3LDcgKzEyMyw3IEBAIHN0YXRpYyB2b2lkIERFTEVURV9DSEFS
KHZvaWQgKnApCiBzdGF0aWMgUUNoYXIgKkFMTE9DX1FDSEFSKGludCBuKQogewogICAgIHNpemVf
dCBzaXplID0gKHNpemVvZihRQ2hhcikqKCBuICkpOwotICAgIFFDaGFyICpwdHIgPSAoUUNoYXIg
KiltYWluX3RocmVhZF9tYWxsb2Moc2l6ZSk7CisgICAgUUNoYXIgKnB0ciA9IChRQ2hhciAqKWZh
c3RfbWFsbG9jKHNpemUpOwogCiAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUgKGFsbG9jYXRlZEJ1
ZmZlcnMoKSwgcHRyLCAoY29uc3Qgdm9pZCAqKXNpemUpOwogICAgIGlmIChzaXplID49IEFMTE9D
QVRJT05fSElTVE9HUkFNX1NJWkUpCkBAIC0yMDcsMTMgKzIwMywxMyBAQCB2b2lkIF9wcmludFFT
dHJpbmdBbGxvY2F0aW9uU3RhdGlzdGljcygpCiAKICNlbHNlCiAKLSNkZWZpbmUgQUxMT0NfQ0hB
UiggTiApIChjaGFyKikgbWFpbl90aHJlYWRfbWFsbG9jKE4pCi0jZGVmaW5lIFJFQUxMT0NfQ0hB
UiggUCwgTiApIChjaGFyICopIG1haW5fdGhyZWFkX3JlYWxsb2MoUCxOKQotI2RlZmluZSBERUxF
VEVfQ0hBUiggUCApIG1haW5fdGhyZWFkX2ZyZWUoUCkKLQotI2RlZmluZSBBTExPQ19RQ0hBUigg
TiApIChRQ2hhciopIG1haW5fdGhyZWFkX21hbGxvYyhzaXplb2YoUUNoYXIpKiggTiApKQotI2Rl
ZmluZSBSRUFMTE9DX1FDSEFSKCBQLCBOICkgKFFDaGFyICopIG1haW5fdGhyZWFkX3JlYWxsb2Mo
UCxzaXplb2YoUUNoYXIpKiggTiApKQotI2RlZmluZSBERUxFVEVfUUNIQVIoIFAgKSBtYWluX3Ro
cmVhZF9mcmVlKCBQICkKKyNkZWZpbmUgQUxMT0NfQ0hBUihOKSAoY2hhciopIGZhc3RNYWxsb2Mo
TikKKyNkZWZpbmUgUkVBTExPQ19DSEFSKFAsIE4pIChjaGFyICopIGZhc3RSZWFsbG9jKFAsIE4p
CisjZGVmaW5lIERFTEVURV9DSEFSKFApIGZhc3RGcmVlKFApCisKKyNkZWZpbmUgQUxMT0NfUUNI
QVIoTikgKFFDaGFyKilmYXN0TWFsbG9jKHNpemVvZihRQ2hhcikqKE4pKQorI2RlZmluZSBSRUFM
TE9DX1FDSEFSKFAsIE4pIChRQ2hhciAqKWZhc3RSZWFsbG9jKFAsIHNpemVvZihRQ2hhcikqKE4p
KQorI2RlZmluZSBERUxFVEVfUUNIQVIoUCkgZmFzdEZyZWUoUCkKIAogI2VuZGlmIC8vIFFTVFJJ
TkdfREVCVUdfQUxMT0NBVElPTlMKIApAQCAtNzU4LDE0ICs3NTQsMTQgQEAgdm9pZCBRU3RyaW5n
OjpzZXRCdWZmZXJGcm9tQ0ZTdHJpbmcoQ0ZTdAogICAgIFVuaUNoYXIgZml4ZWRTaXplQnVmZmVy
WzEwMjRdOwogICAgIFVuaUNoYXIgKmJ1ZmZlcjsKICAgICBpZiAoc2l6ZSA+IChDRkluZGV4KShz
aXplb2YoZml4ZWRTaXplQnVmZmVyKSAvIHNpemVvZihVbmlDaGFyKSkpIHsKLSAgICAgICAgYnVm
ZmVyID0gKFVuaUNoYXIgKiltYWluX3RocmVhZF9tYWxsb2Moc2l6ZSAqIHNpemVvZihVbmlDaGFy
KSk7CisgICAgICAgIGJ1ZmZlciA9IChVbmlDaGFyICopZmFzdE1hbGxvYyhzaXplICogc2l6ZW9m
KFVuaUNoYXIpKTsKICAgICB9IGVsc2UgewogICAgICAgICBidWZmZXIgPSBmaXhlZFNpemVCdWZm
ZXI7CiAgICAgfQogICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhjZnMsIENGUmFuZ2VNYWtlICgw
LCBzaXplKSwgYnVmZmVyKTsKICAgICBzZXRVbmljb2RlKChjb25zdCBRQ2hhciAqKWJ1ZmZlciwg
KHVpbnQpc2l6ZSk7CiAgICAgaWYgKGJ1ZmZlciAhPSBmaXhlZFNpemVCdWZmZXIpIHsKLSAgICAg
ICAgbWFpbl90aHJlYWRfZnJlZShidWZmZXIpOworICAgICAgICBmYXN0RnJlZShidWZmZXIpOwog
ICAgIH0KIH0KIApAQCAtMjkwMiw3ICsyODk4LDcgQEAgc3RhdGljIEhhbmRsZU5vZGUgKmluaXRp
YWxpemVIYW5kbGVOb2RlQgogCiBzdGF0aWMgSGFuZGxlUGFnZU5vZGUgKmFsbG9jYXRlUGFnZU5v
ZGUoKQogewotICAgIEhhbmRsZVBhZ2VOb2RlICpub2RlID0gKEhhbmRsZVBhZ2VOb2RlICopbWFp
bl90aHJlYWRfbWFsbG9jKHNpemVvZihIYW5kbGVQYWdlTm9kZSkpOworICAgIEhhbmRsZVBhZ2VO
b2RlICpub2RlID0gKEhhbmRsZVBhZ2VOb2RlICopZmFzdE1hbGxvYyhzaXplb2YoSGFuZGxlUGFn
ZU5vZGUpKTsKICAgICBub2RlLT5uZXh0ID0gbm9kZS0+cHJldmlvdXMgPSAwOwogICAgIG5vZGUt
Pm5vZGVzID0gaW5pdGlhbGl6ZUhhbmRsZU5vZGVCbG9jayhub2RlKTsKICAgICByZXR1cm4gbm9k
ZTsKSW5kZXg6IFdlYkNvcmUva3dxL0tXUVRleHRBcmVhLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FUZXh0QXJlYS5tbSx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS44OQpkaWZmIC1wIC11IC1yMS44OSBXZWJDb3JlL2t3cS9LV1FUZXh0QXJlYS5tbQotLS0g
V2ViQ29yZS9rd3EvS1dRVGV4dEFyZWEubW0JMzEgQXVnIDIwMDUgMDQ6Mzg6NDQgLTAwMDAJMS44
OQorKysgV2ViQ29yZS9rd3EvS1dRVGV4dEFyZWEubW0JMjcgU2VwIDIwMDUgMDg6NDU6NDggLTAw
MDAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbXBvcnQgIkRPTUNTUy5oIgogI2ltcG9ydCAiRE9NSFRN
TC5oIgogI2ltcG9ydCAiRXZlbnROYW1lcy5oIgotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgor
I2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAiS1dRS0hUTUxQYXJ0Lmgi
CiAjaW1wb3J0ICJLV1FOU1ZpZXdFeHRyYXMuaCIKICNpbXBvcnQgIktXUVRleHRFZGl0LmgiCklu
ZGV4OiBXZWJDb3JlL2t3cS9LV1FUZXh0Q29kZWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva3dxL0tXUVRleHRDb2RlYy5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS41NApkaWZmIC1wIC11IC1yMS41NCBXZWJDb3JlL2t3cS9LV1FUZXh0Q29kZWMubW0KLS0tIFdl
YkNvcmUva3dxL0tXUVRleHRDb2RlYy5tbQkxMiBKdWwgMjAwNSAxNjozNzoyNiAtMDAwMAkxLjU0
CisrKyBXZWJDb3JlL2t3cS9LV1FUZXh0Q29kZWMubW0JMjcgU2VwIDIwMDUgMDg6NDU6NDggLTAw
MDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2ltcG9ydCAiS1dRVGV4dENvZGVjLmgiCiAKLSNpbXBv
cnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNp
bXBvcnQgIktXUUNoYXJzZXRzLmgiCiAjaW1wb3J0ICJLV1FMb2dnaW5nLmgiCiAKSW5kZXg6IFdl
YkNvcmUva3dxL0tXUVRleHRFZGl0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2t3cS9LV1FUZXh0RWRpdC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41MgpkaWZm
IC1wIC11IC1yMS41MiBXZWJDb3JlL2t3cS9LV1FUZXh0RWRpdC5tbQotLS0gV2ViQ29yZS9rd3Ev
S1dRVGV4dEVkaXQubW0JMjQgU2VwIDIwMDUgMTE6MDU6MzQgLTAwMDAJMS41MgorKysgV2ViQ29y
ZS9rd3EvS1dRVGV4dEVkaXQubW0JMjcgU2VwIDIwMDUgMDg6NDU6NDggLTAwMDAKQEAgLTI1LDcg
KzI1LDcgQEAKIAogI2ltcG9ydCAiS1dRVGV4dEVkaXQuaCIKIAotI2ltcG9ydCAiS1dRQXNzZXJ0
aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAiS1dRRXhj
ZXB0aW9ucy5oIgogI2ltcG9ydCAiS1dRTGluZUVkaXQuaCIKICNpbXBvcnQgIktXUVBhbGV0dGUu
aCIKSW5kZXg6IFdlYkNvcmUva3dxL0tXUVRleHRGaWVsZC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGV4dEZpZWxkLm1tLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjg4CmRpZmYgLXAgLXUgLXIxLjg4IFdlYkNvcmUva3dxL0tXUVRleHRGaWVsZC5tbQot
LS0gV2ViQ29yZS9rd3EvS1dRVGV4dEZpZWxkLm1tCTggU2VwIDIwMDUgMTg6MDU6MjEgLTAwMDAJ
MS44OAorKysgV2ViQ29yZS9rd3EvS1dRVGV4dEZpZWxkLm1tCTI3IFNlcCAyMDA1IDA4OjQ1OjQ4
IC0wMDAwCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbXBvcnQgIktXUVRleHRGaWVsZC5oIgogCi0j
aW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+
CiAjaW1wb3J0ICJLV1FLSFRNTFBhcnQuaCIKICNpbXBvcnQgIktXUUxpbmVFZGl0LmgiCiAjaW1w
b3J0ICJLV1FOU1ZpZXdFeHRyYXMuaCIKSW5kZXg6IFdlYkNvcmUva3dxL0tXUVRpbWVyLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FUaW1lci5tbSx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZmIC1wIC11IC1yMS4xNyBXZWJDb3JlL2t3cS9LV1FU
aW1lci5tbQotLS0gV2ViQ29yZS9rd3EvS1dRVGltZXIubW0JMTkgU2VwIDIwMDUgMTg6NTI6MTMg
LTAwMDAJMS4xNworKysgV2ViQ29yZS9rd3EvS1dRVGltZXIubW0JMjcgU2VwIDIwMDUgMDg6NDU6
NDggLTAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2ltcG9ydCAiS1dRVGltZXIuaCIKIAotI2lt
cG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgog
I2ltcG9ydCAiS1dRTG9nZ2luZy5oIgogI2ltcG9ydCAiS1dRRm91bmRhdGlvbkV4dHJhcy5oIgog
CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FWYWx1ZUxpc3RJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVZhbHVlTGlzdEltcGwuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMQpkaWZmIC1wIC11IC1yMS4xMSBXZWJDb3JlL2t3cS9LV1FWYWx1ZUxpc3RJ
bXBsLmgKLS0tIFdlYkNvcmUva3dxL0tXUVZhbHVlTGlzdEltcGwuaAkxNSBBdWcgMjAwNSAwMDoz
Mjo0MCAtMDAwMAkxLjExCisrKyBXZWJDb3JlL2t3cS9LV1FWYWx1ZUxpc3RJbXBsLmgJMjcgU2Vw
IDIwMDUgMDg6NDU6NDkgLTAwMDAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIktXUVJl
ZlB0ci5oIgogI2luY2x1ZGUgIktXUURlZi5oIgotI2luY2x1ZGUgIm1haW5fdGhyZWFkX21hbGxv
Yy5oIgorI2luY2x1ZGUgImt4bWxjb3JlL0Zhc3RNYWxsb2MuaCIKIAogY2xhc3MgS1dRVmFsdWVM
aXN0Tm9kZUltcGw7CiAKQEAgLTEwNywxMSArMTA3LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgS1dRVmFsdWVMaXN0Tm9kZUltcGw7CiB9OwogCi1jbGFzcyBLV1FWYWx1ZUxpc3ROb2Rl
SW1wbAorY2xhc3MgS1dRVmFsdWVMaXN0Tm9kZUltcGwgOiBwdWJsaWMgRmFzdEFsbG9jYXRlZAog
ewotcHVibGljOgotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogcHJvdGVjdGVkOgogICAg
IEtXUVZhbHVlTGlzdE5vZGVJbXBsKCk7CiAKSW5kZXg6IFdlYkNvcmUva3dxL0tXUVZhbHVlTGlz
dEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVZh
bHVlTGlzdEltcGwubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMKZGlmZiAtcCAtdSAtcjEu
MTMgV2ViQ29yZS9rd3EvS1dRVmFsdWVMaXN0SW1wbC5tbQotLS0gV2ViQ29yZS9rd3EvS1dRVmFs
dWVMaXN0SW1wbC5tbQkxNSBBdWcgMjAwNSAwMDozMjo0MSAtMDAwMAkxLjEzCisrKyBXZWJDb3Jl
L2t3cS9LV1FWYWx1ZUxpc3RJbXBsLm1tCTI3IFNlcCAyMDA1IDA4OjQ1OjQ5IC0wMDAwCkBAIC0y
Nyw3ICsyNyw3IEBACiAKICNpbXBvcnQgPHN0ZGxpYi5oPgogCi1jbGFzcyBLV1FWYWx1ZUxpc3RJ
bXBsOjpLV1FWYWx1ZUxpc3RQcml2YXRlCitjbGFzcyBLV1FWYWx1ZUxpc3RJbXBsOjpLV1FWYWx1
ZUxpc3RQcml2YXRlIDogcHVibGljIEZhc3RBbGxvY2F0ZWQKIHsKIHB1YmxpYzoKICAgICBLV1FW
YWx1ZUxpc3RQcml2YXRlKHZvaWQgKCpkZWxldGVGdW5jKShLV1FWYWx1ZUxpc3ROb2RlSW1wbCAq
KSwgS1dRVmFsdWVMaXN0Tm9kZUltcGwgKigqY29weUZ1bmMpKEtXUVZhbHVlTGlzdE5vZGVJbXBs
ICopKTsKQEAgLTM1LDggKzM1LDYgQEAgcHVibGljOgogCiAgICAgfktXUVZhbHVlTGlzdFByaXZh
dGUoKTsKIAotICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKLQogICAgIHZvaWQgY29weUxpc3Qo
S1dRVmFsdWVMaXN0Tm9kZUltcGwgKmwsIEtXUVZhbHVlTGlzdE5vZGVJbXBsIComaGVhZCwgS1dR
VmFsdWVMaXN0Tm9kZUltcGwgKiZ0YWlsKSBjb25zdDsKICAgICB2b2lkIGRlbGV0ZUxpc3QoS1dR
VmFsdWVMaXN0Tm9kZUltcGwgKmwpOwogCkluZGV4OiBXZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlQnJp
ZGdlLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQxNwpkaWZmIC1wIC11IC1yMS40MTcgV2Vi
Q29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQotLS0gV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5t
bQkyNCBTZXAgMjAwNSAwMToxOTowNiAtMDAwMAkxLjQxNworKysgV2ViQ29yZS9rd3EvV2ViQ29y
ZUJyaWRnZS5tbQkyNyBTZXAgMjAwNSAwODo0NTo1MCAtMDAwMApAQCAtNjMsNyArNjMsNyBAQAog
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvcHJvcGVydHlfbWFwLmg+CiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lX3Jvb3QuaD4KIAotI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgorI2lt
cG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCAiS1dRQ2hhcnNldHMuaCIKICNp
bXBvcnQgIktXUUNsaXBib2FyZC5oIgogI2ltcG9ydCAiS1dRRWRpdENvbW1hbmQuaCIKQEAgLTEy
NCw3ICsxMjQsNiBAQCB1c2luZyBraHRtbDo6UmVuZGVyU3R5bGU7CiB1c2luZyBraHRtbDo6UmVu
ZGVyV2lkZ2V0OwogdXNpbmcga2h0bWw6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOwogdXNpbmcg
a2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI7Ci11c2luZyBraHRtbDo6U2hhcmVkUHRyOwogdXNp
bmcga2h0bWw6OlRva2VuaXplcjsKIHVzaW5nIGtodG1sOjpUZXh0SXRlcmF0b3I7CiB1c2luZyBr
aHRtbDo6VHlwaW5nQ29tbWFuZDsKSW5kZXg6IFdlYkNvcmUva3dxL1dlYkNvcmVDb29raWVBZGFw
dGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL1dlYkNvcmVD
b29raWVBZGFwdGVyLm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42
IFdlYkNvcmUva3dxL1dlYkNvcmVDb29raWVBZGFwdGVyLm0KLS0tIFdlYkNvcmUva3dxL1dlYkNv
cmVDb29raWVBZGFwdGVyLm0JMjIgSmFuIDIwMDMgMDA6MTI6MzYgLTAwMDAJMS42CisrKyBXZWJD
b3JlL2t3cS9XZWJDb3JlQ29va2llQWRhcHRlci5tCTI3IFNlcCAyMDA1IDA4OjQ1OjUwIC0wMDAw
CkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2ltcG9ydCAiV2ViQ29yZUNvb2tpZUFkYXB0ZXIu
aCIKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlv
bnMuaD4KIAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVDb29raWVBZGFwdGVyCiAKSW5kZXg6IFdl
YkNvcmUva3dxL1dlYkNvcmVHcmFwaGljc0JyaWRnZS5tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlR3JhcGhpY3NCcmlkZ2UubSx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS42CmRpZmYgLXAgLXUgLXIxLjYgV2ViQ29yZS9rd3EvV2ViQ29yZUdyYXBoaWNz
QnJpZGdlLm0KLS0tIFdlYkNvcmUva3dxL1dlYkNvcmVHcmFwaGljc0JyaWRnZS5tCTE2IEF1ZyAy
MDA1IDE3OjM2OjMyIC0wMDAwCTEuNgorKysgV2ViQ29yZS9rd3EvV2ViQ29yZUdyYXBoaWNzQnJp
ZGdlLm0JMjcgU2VwIDIwMDUgMDg6NDU6NTAgLTAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2lt
cG9ydCAiV2ViQ29yZUdyYXBoaWNzQnJpZGdlLmgiCiAKLSNpbXBvcnQgIktXUUFzc2VydGlvbnMu
aCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KIAogQGltcGxlbWVudGF0aW9uIFdl
YkNvcmVHcmFwaGljc0JyaWRnZQogCkluZGV4OiBXZWJDb3JlL2t3cS9XZWJDb3JlSW1hZ2VSZW5k
ZXJlckZhY3RvcnkubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3Ev
V2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5Lm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpk
aWZmIC1wIC11IC1yMS45IFdlYkNvcmUva3dxL1dlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9yeS5t
Ci0tLSBXZWJDb3JlL2t3cS9XZWJDb3JlSW1hZ2VSZW5kZXJlckZhY3RvcnkubQkxMCBEZWMgMjAw
NCAwNDozODoxOSAtMDAwMAkxLjkKKysrIFdlYkNvcmUva3dxL1dlYkNvcmVJbWFnZVJlbmRlcmVy
RmFjdG9yeS5tCTI3IFNlcCAyMDA1IDA4OjQ1OjUwIC0wMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAg
Ki8KIAogI2ltcG9ydCAiV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5LmgiCi0jaW1wb3J0ICJL
V1FBc3NlcnRpb25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0
ICJLV1FSZW5kZXJUcmVlRGVidWcuaCIKIAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVJbWFnZVJl
bmRlcmVyRmFjdG9yeQpJbmRleDogV2ViQ29yZS9rd3EvV2ViQ29yZUtleUdlbmVyYXRvci5tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlS2V5R2VuZXJh
dG9yLm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC1wIC11IC1yMS4zIFdlYkNvcmUv
a3dxL1dlYkNvcmVLZXlHZW5lcmF0b3IubQotLS0gV2ViQ29yZS9rd3EvV2ViQ29yZUtleUdlbmVy
YXRvci5tCTE5IE1heSAyMDA0IDE0OjM3OjEwIC0wMDAwCTEuMworKysgV2ViQ29yZS9rd3EvV2Vi
Q29yZUtleUdlbmVyYXRvci5tCTI3IFNlcCAyMDA1IDA4OjQ1OjUwIC0wMDAwCkBAIC0yNSw3ICsy
NSw3IEBACiAKICNpbXBvcnQgIldlYkNvcmVLZXlHZW5lcmF0b3IuaCIKIAotI2ltcG9ydCAiS1dR
QXNzZXJ0aW9ucy5oIgorI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCiBzdGF0aWMg
V2ViQ29yZUtleUdlbmVyYXRvciAqc2hhcmVkR2VuZXJhdG9yOwogCkluZGV4OiBXZWJDb3JlL2t3
cS9XZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkubW0sdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMjUKZGlmZiAtcCAtdSAtcjEuMjUgV2ViQ29yZS9rd3EvV2ViQ29yZVRl
eHRSZW5kZXJlckZhY3RvcnkubW0KLS0tIFdlYkNvcmUva3dxL1dlYkNvcmVUZXh0UmVuZGVyZXJG
YWN0b3J5Lm1tCTI0IFNlcCAyMDA1IDExOjQ1OjE5IC0wMDAwCTEuMjUKKysrIFdlYkNvcmUva3dx
L1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5Lm1tCTI3IFNlcCAyMDA1IDA4OjQ1OjUwIC0wMDAw
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCiAjaW1w
b3J0ICJXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeS5oIgogCi0jaW1wb3J0ICJLV1FBc3NlcnRp
b25zLmgiCisjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0ICJLV1FLSFRN
TFBhcnQuaCIKICNpbXBvcnQgIktXUUxpc3RCb3guaCIKICNpbXBvcnQgIldlYkNvcmVCcmlkZ2Uu
aCIKSW5kZXg6IFdlYkNvcmUva3dxL1dlYkNvcmVWaWV3RmFjdG9yeS5tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlVmlld0ZhY3RvcnkubSx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC1wIC11IC1yMS4xMSBXZWJDb3JlL2t3cS9XZWJDb3Jl
Vmlld0ZhY3RvcnkubQotLS0gV2ViQ29yZS9rd3EvV2ViQ29yZVZpZXdGYWN0b3J5Lm0JMTEgRGVj
IDIwMDMgMDI6MjA6NDIgLTAwMDAJMS4xMQorKysgV2ViQ29yZS9rd3EvV2ViQ29yZVZpZXdGYWN0
b3J5Lm0JMjcgU2VwIDIwMDUgMDg6NDU6NTAgLTAwMDAKQEAgLTIzLDcgKzIzLDcgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCiAjaW1wb3J0ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKLSNpbXBvcnQg
IktXUUFzc2VydGlvbnMuaCIKKyNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KIAogQGlt
cGxlbWVudGF0aW9uIFdlYkNvcmVWaWV3RmFjdG9yeQogCg==
</data>
<flag name="review"
          id="628"
          type_id="1"
          status="+"
          setter="sullivan"
    />
          </attachment>
      

    </bug>

</bugzilla>