<?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>153491</bug_id>
          <alias>CVE-2016-4731</alias>
          <creation_ts>2016-01-26 10:22:42 -0800</creation_ts>
          <short_desc>The thing that B3 uses to describe a stack slot should not be a Value</short_desc>
          <delta_ts>2017-10-11 10:24:51 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150279</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1158856</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-26 10:22:42 -0800</bug_when>
    <thetext>Values can be deleted, cloned, replaced, etc.  But when a client creates a stack slot, they want something that survives independently of the Value used to get its address.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158878</commentid>
    <comment_count>1</comment_count>
      <attachid>269891</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-26 11:07:05 -0800</bug_when>
    <thetext>Created attachment 269891
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158917</commentid>
    <comment_count>2</comment_count>
      <attachid>269904</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-26 12:11:49 -0800</bug_when>
    <thetext>Created attachment 269904
the patch

It seems to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158920</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-26 12:14:45 -0800</bug_when>
    <thetext>Attachment 269904 did not pass style-queue:


ERROR: Source/JavaScriptCore/CMakeLists.txt:155:  Alphabetical sorting problem. &quot;b3/B3StackSlot.cpp&quot; should be before &quot;b3/B3StackSlotKind.cpp&quot;.  [list/order] [5]
Total errors found: 1 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158929</commentid>
    <comment_count>4</comment_count>
      <attachid>269904</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-26 12:34:05 -0800</bug_when>
    <thetext>Comment on attachment 269904
the patch

Clearing r? because it&apos;s crashing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158935</commentid>
    <comment_count>5</comment_count>
      <attachid>269906</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-26 12:41:09 -0800</bug_when>
    <thetext>Created attachment 269906
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158938</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-26 12:43:40 -0800</bug_when>
    <thetext>Attachment 269906 did not pass style-queue:


ERROR: Source/JavaScriptCore/CMakeLists.txt:155:  Alphabetical sorting problem. &quot;b3/B3StackSlot.cpp&quot; should be before &quot;b3/B3StackSlotKind.cpp&quot;.  [list/order] [5]
Total errors found: 1 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158955</commentid>
    <comment_count>7</comment_count>
      <attachid>269906</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-01-26 13:05:54 -0800</bug_when>
    <thetext>Comment on attachment 269906
the patch

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

r=me

&gt; Source/JavaScriptCore/b3/B3Procedure.cpp:98
&gt; +    std::unique_ptr&lt;StackSlot&gt; slot(new StackSlot(index, byteSize, kind));

I think &quot;auto slot = std::make_unique&lt;StackSlot&gt;(...)&quot; is a slightly more idiomatic way to write this with no loss of type description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158956</commentid>
    <comment_count>8</comment_count>
      <attachid>269906</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-26 13:06:12 -0800</bug_when>
    <thetext>Comment on attachment 269906
the patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158957</commentid>
    <comment_count>9</comment_count>
      <attachid>269906</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-26 13:06:15 -0800</bug_when>
    <thetext>Comment on attachment 269906
the patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158958</commentid>
    <comment_count>10</comment_count>
      <attachid>269906</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-26 13:06:16 -0800</bug_when>
    <thetext>Comment on attachment 269906
the patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158959</commentid>
    <comment_count>11</comment_count>
      <attachid>269906</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-26 13:06:17 -0800</bug_when>
    <thetext>Comment on attachment 269906
the patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158966</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-26 13:10:48 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 269906 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=269906&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Procedure.cpp:98
&gt; &gt; +    std::unique_ptr&lt;StackSlot&gt; slot(new StackSlot(index, byteSize, kind));
&gt; 
&gt; I think &quot;auto slot = std::make_unique&lt;StackSlot&gt;(...)&quot; is a slightly more
&gt; idiomatic way to write this with no loss of type description.

I agree.  Unfortunately, Visual Studio will claim that this is incorrect because StackSlot&apos;s constructor is private and std::make_unique is not StackSlot&apos;s friend.  Clang figures out that since Procedure is instantiating make_unique and Procedure is StackSlot&apos;s friend, make_unique should be allowed to touch StackSlot&apos;s privates.

Since permission to touch a friend&apos;s privates does not propagate through instantiations in Visual Studio, we&apos;re forced to use this workaround.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158992</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-26 14:05:55 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/195620</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160946</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-01 11:03:35 -0800</bug_when>
    <thetext>*** Bug 153684 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269891</attachid>
            <date>2016-01-26 11:07:05 -0800</date>
            <delta_ts>2016-01-26 12:11:49 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58725</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTU1ODQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTMzLDYgKzUzMyw4IEBACiAJCTBGOTMzMkE1MTRDQTdE
REQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVT
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjkzQjRBOTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTcxOEI5MkM0RDAwMTc4
QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLzsgfTsKIAkJMEY5M0I0QUExOEI5MkM0RDAwMTc4
QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjk0
OTU4NzFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NDk1ODUxQzU3RjQ3NTAwNDEzQTQ4IC8q
IEIzU3RhY2tTbG90LmNwcCAqLzsgfTsKKwkJMEY5NDk1ODgxQzU3RjQ3NTAwNDEzQTQ4IC8qIEIz
U3RhY2tTbG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjk0OTU4NjFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuaCAqLzsgfTsKIAkJMEY5
NTJBQkMxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUJBMUI0ODdBNzcwMEMz
NjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi87IH07CiAJCTBGOTUyQUJEMUI0ODdBNzcw
MEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRS
ZWZlcmVuY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMzYxM0ZDNkZERTAw
MDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC04MzIsOCArODM0LDggQEAKIAkJMEZFQzg1MzExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21h
cFNwZWNpYWwuaCAqLzsgfTsKIAkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tT
bG90S2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLzsgfTsK
IAkJMEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTkxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovOyB9OwotCQkwRkVDODUzNDFCREFDREFDMDA4
MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Ns
b3RWYWx1ZS5jcHAgKi87IH07Ci0JCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
U2xvdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovOyB9Owor
CQkwRkVDODUzNDFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVBMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzNTFCREFDREFD
MDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFz
ZVZhbHVlLmggKi87IH07CiAJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAq
LzsgfTsKIAkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRDFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLzsgfTsKIAkJMEZFQzg1MzgxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2Fz
ZS5oICovOyB9OwpAQCAtMjcxNSw2ICsyNzE3LDggQEAKIAkJMEY5MzMyOUIxNENBN0RDMTAwODVG
M0M2IC8qIFN0cnVjdHVyZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJ1Y3R1cmVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5M0I0QTcxOEI5
MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTQ5NTg1MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNr
U2xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrU2xv
dC5jcHA7IHBhdGggPSBiMy9CM1N0YWNrU2xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGOTQ5NTg2MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrU2xvdC5oOyBwYXRoID0gYjMvQjNTdGFj
a1Nsb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJBQkExQjQ4N0E3NzAw
QzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRyYWNrZWRSZWZlcmVuY2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYWNrZWRSZWZlcmVuY2VzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBW
YWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVQcm9m
aWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMDI4LDggKzMwMzIsOCBAQAog
CQkwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja21hcFNwZWNpYWwuaDsgcGF0aCA9IGIz
L0IzU3RhY2ttYXBTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4
NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmNwcDsgcGF0aCA9IGIzL0Iz
U3RhY2tTbG90S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NEU5
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmg7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtp
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZFQzg0RUExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1N0YWNrU2xvdFZhbHVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZFQzg0RUIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNTdGFja1Nsb3RWYWx1ZS5oOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNT
bG90QmFzZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIz
U2xvdEJhc2VWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1Nsb3RCYXNlVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90
QmFzZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU2xvdEJhc2VW
YWx1ZS5oOyBwYXRoID0gYjMvQjNTbG90QmFzZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdWNjZXNzb3JDb2xsZWN0
aW9uLmg7IHBhdGggPSBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N3aXRjaENhc2UuY3Bw
OyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N3aXRjaENhc2UuaDsgcGF0aCA9IGIzL0IzU3dpdGNo
Q2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDg1Myw2ICs0ODU3LDggQEAK
IAkJCQk0MzQyMkE2NTFDMTYyMjFFMDBFMkVCOTggLyogQjNSZWR1Y2VEb3VibGVUb0Zsb2F0Lmgg
Ki8sCiAJCQkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3Bw
ICovLAogCQkJCTBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmgg
Ki8sCisJCQkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5jcHAg
Ki8sCisJCQkJMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5oICov
LAogCQkJCTBGNkI4QURBMUM0RUZBQzMwMDk2OTA1MiAvKiBCM1NTQUNhbGN1bGF0b3IuY3BwICov
LAogCQkJCTBGNkI4QURCMUM0RUZBQzMwMDk2OTA1MiAvKiBCM1NTQUNhbGN1bGF0b3IuaCAqLywK
IAkJCQkwRjMzRkNGNTFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMuY3BwICovLApAQCAtNDg2MSwxMCArNDg2NywxMCBAQAogCQkJCTBGRUM4NEU3MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovLAogCQkJCTBGMzM4REVGMUJFOTNBRDEw
MDEzQzg4RiAvKiBCM1N0YWNrbWFwVmFsdWUuY3BwICovLAogCQkJCTBGMzM4REYwMUJFOTNBRDEw
MDEzQzg4RiAvKiBCM1N0YWNrbWFwVmFsdWUuaCAqLywKKwkJCQkwRjk0OTU4NTFDNTdGNDc1MDA0
MTNBNDggLyogQjNTdGFja1Nsb3QuY3BwICovLAorCQkJCTBGOTQ5NTg2MUM1N0Y0NzUwMDQxM0E0
OCAvKiBCM1N0YWNrU2xvdC5oICovLAogCQkJCTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrU2xvdEtpbmQuY3BwICovLAogCQkJCTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrU2xvdEtpbmQuaCAqLywKLQkJCQkwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja1Nsb3RWYWx1ZS5jcHAgKi8sCi0JCQkJMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3RhY2tTbG90VmFsdWUuaCAqLywKIAkJCQkwRkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNT
dWNjZXNzb3JDb2xsZWN0aW9uLmggKi8sCiAJCQkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3dpdGNoQ2FzZS5jcHAgKi8sCiAJCQkJMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3dpdGNoQ2FzZS5oICovLApAQCAtNzExMiw3ICs3MTE4LDcgQEAKIAkJCQkwRkVDODVCRDFCRTE0
NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
Qzg1MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4g
SGVhZGVycyAqLywKLQkJCQkwRkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U2xvdEJhc2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzYxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1
MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFQzg1M0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCBpbiBIZWFkZXJzICov
LApAQCAtNzIyMyw2ICs3MjI5LDcgQEAKIAkJCQlDMjE4RDE0MDE2NTVDRkQ1MDA2MkJCODEgLyog
Q29weVdvcmtMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGNDFBMDVDOTQ0MDA1Q0FC
NzYgLyogY3BwX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTFDMUJGMjg2
RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
Rjk0OTU4ODFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUM0RjRCNkYzMUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5w
eSBpbiBIZWFkZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVf
aGFzaF90YWJsZSBpbiBIZWFkZXJzICovLAogCQkJCTk5NTlFOTJCMUJEMTdGQTQwMDFBQTQxMyAv
KiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKQEAgLTg4MDcsNyArODgxNCw3IEBACiAJCQkJMEZF
Qzg1QkMxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
U2xvdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZFQzg1MzQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUzNzFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRUM4NTM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNDU3MDQwMUJFNTg0Q0EwMDYyQTYyOSAvKiBCM1RpbWluZ1Njb3Bl
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTAzMyw2ICs5MDQwLDcgQEAKIAkJCQkwRkUyNTRGNjFB
QkRERDIyMDBBN0M2RDIgLyogREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGOTQ5NTg3
MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjJCREM1MTE1MjI4RkZEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJCREM0QTE1MjI4MDlBMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0
cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1RjE0RUY5MEJCMDBDNzI1MzIgLyog
REZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkocmV2aXNpb24gMTk1NTg0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw4IEBACiAjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCiAj
aW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNQdXJlQ1NFLmgiCi0j
aW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU2xvdEJhc2VWYWx1ZS5o
IgorI2luY2x1ZGUgIkIzU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUtleS5oIgogI2lu
Y2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKQEAgLTEzMCw3
ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2ltcHVyZUJsb2NrRGF0YVttX2Jsb2Nr
XSA9IG1fZGF0YTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoU3RhY2tTbG90VmFsdWUqIHN0
YWNrIDogbV9zdGFja3MpCisgICAgICAgIGZvciAoU2xvdEJhc2VWYWx1ZSogc3RhY2sgOiBtX3N0
YWNrcykKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKDAsIHN0YWNrKTsK
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCB2YWx1ZUluZGV4ID0gMDsgdmFsdWVJbmRleCA8IGJsb2NrLT5zaXplKCk7
ICsrdmFsdWVJbmRleCkgewpAQCAtMzY5LDggKzM3MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8v
IFJpZ2h0IG5vdyB3ZSdyZSByZWx5aW5nIG9uIHRoZSBmYWN0IHRoYXQgQ1NFJ3MgcG9zaXRpb24g
aW4gdGhlIHBoYXNlIG9yZGVyIGlzCiAgICAgICAgIC8vIGFsbW9zdCByaWdodCBiZWZvcmUgU1NB
IGZpeHVwLgogICAgICAgICAgICAgCi0gICAgICAgIFN0YWNrU2xvdFZhbHVlKiBzdGFjayA9IG1f
cHJvYy5hZGQ8U3RhY2tTbG90VmFsdWU+KAotICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCks
IHNpemVvZlR5cGUobV92YWx1ZS0+dHlwZSgpKSwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsK
KyAgICAgICAgU2xvdEJhc2VWYWx1ZSogc3RhY2sgPSBtX3Byb2MuYWRkPFN0YWNrU2xvdFZhbHVl
PigKKyAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLCBtX3Byb2MuYWRkQW5vbnltb3VzU3Rh
Y2tTbG90KG1fdmFsdWUtPnR5cGUoKSkpOwogICAgICAgICBtX3N0YWNrcy5hcHBlbmQoc3RhY2sp
OwogCiAgICAgICAgIE1lbW9yeVZhbHVlKiBsb2FkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PE1l
bW9yeVZhbHVlPigKQEAgLTQ5OCw3ICs0OTksNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1f
aW5kZXg7CiAgICAgVmFsdWUqIG1fdmFsdWU7CiAKLSAgICBWZWN0b3I8U3RhY2tTbG90VmFsdWUq
PiBtX3N0YWNrczsKKyAgICBWZWN0b3I8U2xvdEJhc2VWYWx1ZSo+IG1fc3RhY2tzOwogICAgIEhh
c2hNYXA8VmFsdWUqLCBWZWN0b3I8VmFsdWUqPj4gbV9zdG9yZXM7CiAKICAgICBJbnNlcnRpb25T
ZXQgbV9pbnNlcnRpb25TZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhT
U0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5j
cHAJKHJldmlzaW9uIDE5NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNT
QS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDggQEAKICNpbmNsdWRlICJCM1BoYXNl
U2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1NT
QUNhbGN1bGF0b3IuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisjaW5jbHVkZSAi
QjNTbG90QmFzZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJC
M1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL0NvbW1hUHJpbnRlci5oPgpAQCAtNTEsMTkgKzUyLDE5IEBAIGNvbnN0IGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwogCiB2b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2MsIGNvbnN0IElu
ZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQogewotICAgIEhhc2hNYXA8VmFsdWUqLCBTdGFja1Nsb3RW
YWx1ZSo+IG1hcDsKLSAgICBIYXNoTWFwPFZhbHVlKiwgU3RhY2tTbG90VmFsdWUqPiBwaGlNYXA7
CisgICAgSGFzaE1hcDxWYWx1ZSosIFNsb3RCYXNlVmFsdWUqPiBtYXA7CisgICAgSGFzaE1hcDxW
YWx1ZSosIFNsb3RCYXNlVmFsdWUqPiBwaGlNYXA7CiAKICAgICAvLyBDcmVhdGUgc3RhY2sgc2xv
dHMuCiAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChwcm9jKTsKICAgICBmb3IgKFZhbHVl
KiB2YWx1ZSA6IHZhbHVlcy52YWx1ZXMocHJvYy52YWx1ZXMoKSkpIHsKLSAgICAgICAgU3RhY2tT
bG90VmFsdWUqIHN0YWNrID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxTdGFja1Nsb3RWYWx1ZT4oCi0g
ICAgICAgICAgICAwLCB2YWx1ZS0+b3JpZ2luKCksIHNpemVvZlR5cGUodmFsdWUtPnR5cGUoKSks
IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgICAgIFNsb3RCYXNlVmFsdWUqIHN0YWNr
ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxTbG90QmFzZVZhbHVlPigKKyAgICAgICAgICAgIDAsIHZh
bHVlLT5vcmlnaW4oKSwgcHJvYy5hZGRBbm9ueW1vdXNTdGFja1Nsb3QodmFsdWUtPnR5cGUoKSkp
OwogICAgICAgICBtYXAuYWRkKHZhbHVlLCBzdGFjayk7CiAKICAgICAgICAgaWYgKHZhbHVlLT5v
cGNvZGUoKSA9PSBQaGkpIHsKICAgICAgICAgICAgIFN0YWNrU2xvdFZhbHVlKiBwaGlTdGFjayA9
IGluc2VydGlvblNldC5pbnNlcnQ8U3RhY2tTbG90VmFsdWU+KAotICAgICAgICAgICAgICAgIDAs
IHZhbHVlLT5vcmlnaW4oKSwgc2l6ZW9mVHlwZSh2YWx1ZS0+dHlwZSgpKSwgU3RhY2tTbG90S2lu
ZDo6QW5vbnltb3VzKTsKKyAgICAgICAgICAgICAgICAwLCB2YWx1ZS0+b3JpZ2luKCksIHByb2Mu
YWRkQW5vbnltb3VzU3RhY2tTbG90KHZhbHVlLT50eXBlKCkpKTsKICAgICAgICAgICAgIHBoaU1h
cC5hZGQodmFsdWUsIHBoaVN0YWNrKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEyNiw5ICsxMjcs
MTAgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogICAgIAogICAgIC8vIENvbGxlY3Qg
dGhlIHN0YWNrICJ2YXJpYWJsZXMiLiBJZiB0aGVyZSBhcmVuJ3QgYW55LCB0aGVuIHdlIGRvbid0
IGhhdmUgYW55dGhpbmcgdG8gZG8uCiAgICAgLy8gVGhhdCdzIGEgZmFpcmx5IGNvbW1vbiBjYXNl
LgotICAgIEhhc2hNYXA8U3RhY2tTbG90VmFsdWUqLCBUeXBlPiBzdGFja1ZhcmlhYmxlOworICAg
IEhhc2hNYXA8U3RhY2tTbG90KiwgVHlwZT4gc3RhY2tWYXJpYWJsZTsKICAgICBmb3IgKFZhbHVl
KiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKFN0YWNrU2xvdFZhbHVlKiBz
dGFjayA9IHZhbHVlLT5hczxTdGFja1Nsb3RWYWx1ZT4oKSkgeworICAgICAgICBpZiAoU2xvdEJh
c2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+YXM8U2xvdEJhc2VWYWx1ZT4oKSkgeworICAgICAg
ICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHNsb3RCYXNlLT5zbG90KCk7CiAgICAgICAgICAgICBp
ZiAoc3RhY2stPmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpCiAgICAgICAgICAg
ICAgICAgc3RhY2tWYXJpYWJsZS5hZGQoc3RhY2ssIFZvaWQpOwogICAgICAgICB9CkBAIC0xNDEs
MTQgKzE0MywxNiBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAgICAgLy8gU3RvcmUg
b24gYW5vbnltb3VzIHZhcmlhYmxlcy4KICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFs
dWVzKCkpIHsKICAgICAgICAgYXV0byByZWplY3QgPSBbJl0gKFZhbHVlKiB2YWx1ZSkgewotICAg
ICAgICAgICAgaWYgKFN0YWNrU2xvdFZhbHVlKiBzdGFjayA9IHZhbHVlLT5hczxTdGFja1Nsb3RW
YWx1ZT4oKSkKLSAgICAgICAgICAgICAgICBzdGFja1ZhcmlhYmxlLnJlbW92ZShzdGFjayk7Cisg
ICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+YXM8U2xvdEJh
c2VWYWx1ZT4oKSkKKyAgICAgICAgICAgICAgICBzdGFja1ZhcmlhYmxlLnJlbW92ZShzbG90QmFz
ZS0+c2xvdCgpKTsKICAgICAgICAgfTsKICAgICAgICAgCiAgICAgICAgIGF1dG8gaGFuZGxlQWNj
ZXNzID0gWyZdIChWYWx1ZSogYWNjZXNzLCBUeXBlIHR5cGUpIHsKLSAgICAgICAgICAgIFN0YWNr
U2xvdFZhbHVlKiBzdGFjayA9IGFjY2Vzcy0+bGFzdENoaWxkKCktPmFzPFN0YWNrU2xvdFZhbHVl
PigpOwotICAgICAgICAgICAgaWYgKCFzdGFjaykKKyAgICAgICAgICAgIFNsb3RCYXNlVmFsdWUq
IHNsb3RCYXNlID0gYWNjZXNzLT5sYXN0Q2hpbGQoKS0+YXM8U2xvdEJhc2VWYWx1ZT4oKTsKKyAg
ICAgICAgICAgIGlmICghc2xvdEJhc2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gc2xvdEJhc2UtPnNsb3QoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+b2Zmc2V0KCkpIHsK
ICAgICAgICAgICAgICAgICBzdGFja1ZhcmlhYmxlLnJlbW92ZShzdGFjayk7CkBAIC0xODQsMTYg
KzE4OCwxNCBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBWZWN0b3I8U3RhY2tTbG90VmFsdWUqPiBkZWFkVmFsdWVzOworICAgIFZlY3RvcjxT
dGFja1Nsb3QqPiBkZWFkU2xvdHM7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHN0YWNrVmFyaWFi
bGUpIHsKICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09IFZvaWQpCi0gICAgICAgICAgICBkZWFk
VmFsdWVzLmFwcGVuZChlbnRyeS5rZXkpOworICAgICAgICAgICAgZGVhZFNsb3RzLmFwcGVuZChl
bnRyeS5rZXkpOwogICAgIH0KIAotICAgIGZvciAoU3RhY2tTbG90VmFsdWUqIGRlYWRWYWx1ZSA6
IGRlYWRWYWx1ZXMpIHsKLSAgICAgICAgZGVhZFZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOwotICAg
ICAgICBzdGFja1ZhcmlhYmxlLnJlbW92ZShkZWFkVmFsdWUpOwotICAgIH0KKyAgICBmb3IgKFN0
YWNrU2xvdCogZGVhZFNsb3QgOiBkZWFkU2xvdHMpCisgICAgICAgIHN0YWNrVmFyaWFibGUucmVt
b3ZlKGRlYWRTbG90KTsKIAogICAgIGlmIChzdGFja1ZhcmlhYmxlLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMjA0LDExICsyMDYsMTEgQEAgYm9vbCBmaXhTU0EoUHJvY2Vk
dXJlJiBwcm9jKQogICAgIFNTQUNhbGN1bGF0b3Igc3NhKHByb2MpOwogCiAgICAgLy8gQ3JlYXRl
IGEgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgZm9yIGV2ZXJ5IHN0YWNrIHZhcmlhYmxlLgotICAg
IFZlY3RvcjxTdGFja1Nsb3RWYWx1ZSo+IHZhcmlhYmxlVG9TdGFjazsKLSAgICBIYXNoTWFwPFN0
YWNrU2xvdFZhbHVlKiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBzdGFja1RvVmFyaWFibGU7
CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHZhcmlhYmxlVG9TdGFjazsKKyAgICBIYXNoTWFwPFN0
YWNrU2xvdCosIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gc3RhY2tUb1ZhcmlhYmxlOwogCiAg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IHN0YWNrVmFyaWFibGUpIHsKLSAgICAgICAgU3RhY2tTbG90
VmFsdWUqIHN0YWNrID0gZW50cnkua2V5OworICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gZW50
cnkua2V5OwogICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2Eu
bmV3VmFyaWFibGUoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFibGUtPmluZGV4KCkg
PT0gdmFyaWFibGVUb1N0YWNrLnNpemUoKSk7CiAgICAgICAgIHZhcmlhYmxlVG9TdGFjay5hcHBl
bmQoc3RhY2spOwpAQCAtMjIxLDEwICsyMjMsMTIgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBw
cm9jKQogICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSAhPSBTdG9yZSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgU3RhY2tTbG90VmFsdWUqIHN0YWNrID0g
dmFsdWUtPmNoaWxkKDEpLT5hczxTdGFja1Nsb3RWYWx1ZT4oKTsKLSAgICAgICAgICAgIGlmICgh
c3RhY2spCisgICAgICAgICAgICBTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IHZhbHVlLT5jaGls
ZCgxKS0+YXM8U2xvdEJhc2VWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmICghc2xvdEJhc2UpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sg
PSBzbG90QmFzZS0+c2xvdCgpOworCiAgICAgICAgICAgICBpZiAoU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlID0gc3RhY2tUb1ZhcmlhYmxlLmdldChzdGFjaykpCiAgICAgICAgICAg
ICAgICAgc3NhLm5ld0RlZih2YXJpYWJsZSwgYmxvY2ssIHZhbHVlLT5jaGlsZCgwKSk7CiAgICAg
ICAgIH0KQEAgLTIzMyw3ICsyMzcsNyBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAg
ICAgLy8gRGVjaWRlIHdoZXJlIFBoaXMgYXJlIHRvIGJlIGluc2VydGVkLiBUaGlzIGNyZWF0ZXMg
dGhlbSBidXQgZG9lcyBub3QgaW5zZXJ0IHRoZW0uCiAgICAgc3NhLmNvbXB1dGVQaGlzKAogICAg
ICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayog
YmxvY2spIC0+IFZhbHVlKiB7Ci0gICAgICAgICAgICBTdGFja1Nsb3RWYWx1ZSogc3RhY2sgPSB2
YXJpYWJsZVRvU3RhY2tbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgU3RhY2tTbG90
KiBzdGFjayA9IHZhcmlhYmxlVG9TdGFja1t2YXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAgICAg
ICBWYWx1ZSogcGhpID0gcHJvYy5hZGQ8VmFsdWU+KFBoaSwgc3RhY2tWYXJpYWJsZS5nZXQoc3Rh
Y2spLCBzdGFjay0+b3JpZ2luKCkpOwogICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nKApAQCAtMjUwLDcgKzI1NCw3IEBAIGJvb2wgZml4U1NBKFByb2Nl
ZHVyZSYgcHJvYykKICAgICAgICAgbWFwcGluZy5jbGVhcigpOwogCiAgICAgICAgIGZvciAoYXV0
byYgZW50cnkgOiBzdGFja1RvVmFyaWFibGUpIHsKLSAgICAgICAgICAgIFN0YWNrU2xvdFZhbHVl
KiBzdGFjayA9IGVudHJ5LmtleTsKKyAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSBlbnRy
eS5rZXk7CiAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBl
bnRyeS52YWx1ZTsKIAogICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBzc2Eu
cmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKTsKQEAgLTI1OSw3ICsyNjMsNyBAQCBi
b29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKFNT
QUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhLnBoaXNGb3JCbG9jayhibG9jaykpIHsKLSAg
ICAgICAgICAgIFN0YWNrU2xvdFZhbHVlKiBzdGFjayA9IHZhcmlhYmxlVG9TdGFja1twaGlEZWYt
PnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHZh
cmlhYmxlVG9TdGFja1twaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogCiAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUoMCwgcGhpRGVmLT52YWx1ZSgpKTsKICAgICAgICAg
ICAgIG1hcHBpbmcuc2V0KHN0YWNrLCBwaGlEZWYtPnZhbHVlKCkpOwpAQCAtMjcxLDcgKzI3NSw4
IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJvYykKIAogICAgICAgICAgICAgc3dpdGNoICh2
YWx1ZS0+b3Bjb2RlKCkpIHsKICAgICAgICAgICAgIGNhc2UgTG9hZDogewotICAgICAgICAgICAg
ICAgIGlmIChTdGFja1Nsb3RWYWx1ZSogc3RhY2sgPSB2YWx1ZS0+Y2hpbGQoMCktPmFzPFN0YWNr
U2xvdFZhbHVlPigpKSB7CisgICAgICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RC
YXNlID0gdmFsdWUtPmNoaWxkKDApLT5hczxTbG90QmFzZVZhbHVlPigpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSBzbG90QmFzZS0+c2xvdCgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoVmFsdWUqIHJlcGxhY2VtZW50ID0gbWFwcGluZy5nZXQoc3RhY2spKQog
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocmVwbGFj
ZW1lbnQpOwogICAgICAgICAgICAgICAgIH0KQEAgLTI3OSw3ICsyODQsOCBAQCBib29sIGZpeFNT
QShQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjYXNlIFN0b3JlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKFN0YWNrU2xvdFZhbHVl
KiBzdGFjayA9IHZhbHVlLT5jaGlsZCgxKS0+YXM8U3RhY2tTbG90VmFsdWU+KCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+Y2hpbGQoMSkt
PmFzPFNsb3RCYXNlVmFsdWU+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBz
dGFjayA9IHNsb3RCYXNlLT5zbG90KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja1Rv
VmFyaWFibGUuY29udGFpbnMoc3RhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtYXBw
aW5nLnNldChzdGFjaywgdmFsdWUtPmNoaWxkKDApKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOwpAQCAtMjk5LDcgKzMwNSw3IEBAIGJvb2wgZml4U1NB
KFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBw
aGlEZWYgOiBzc2EucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAgICAg
ICAgIFZhbHVlKiBwaGkgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAgICAg
ICAgICAgICAgIFN0YWNrU2xvdFZhbHVlKiBzdGFjayA9IHZhcmlhYmxlVG9TdGFja1t2YXJpYWJs
ZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHZhcmlhYmxl
VG9TdGFja1t2YXJpYWJsZS0+aW5kZXgoKV07CiAKICAgICAgICAgICAgICAgICBWYWx1ZSogbWFw
cGVkVmFsdWUgPSBtYXBwaW5nLmdldChzdGFjayk7CiAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpIHsKQEAgLTMxOSwxMCArMzI1LDYgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQog
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgfQogCi0gICAgLy8gRmlu
YWxseSwga2lsbCB0aGUgc3RhY2sgc2xvdHMuCi0gICAgZm9yIChTdGFja1Nsb3RWYWx1ZSogc3Rh
Y2sgOiB2YXJpYWJsZVRvU3RhY2spCi0gICAgICAgIHN0YWNrLT5yZXBsYWNlV2l0aE5vcCgpOwot
CiAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiQjMgYWZ0ZXIgU1NBIGNvbnZl
cnNpb246XG4iKTsKICAgICAgICAgZGF0YUxvZyhwcm9jKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAxOTU1ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBlbnVtIE9w
Y29kZSA6IGludDE2X3QgewogICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRoaXMgaXMg
dmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2FyZGxlc3Mg
b2YKICAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBpbnN0YW5j
ZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKICAgICAvLyBz
dGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCi0gICAgU3RhY2tTbG90
LAorICAgIFNsb3RCYXNlLAogCiAgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIu
IFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCiAg
ICAgLy8gcmVnYXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5k
IHRoZSBjb21waWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDE5NTU4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJCM0RhdGFTZWN0aW9uLmgiCiAjaW5jbHVkZSAiQjNE
b21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCisjaW5jbHVkZSAi
QjNTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKQEAgLTkxLDYgKzkyLDIwIEBAIHZvaWQgUHJvY2VkdXJlOjpz
ZXRCbG9ja09yZGVySW1wbChWZWN0b3IKICAgICB9CiB9CiAKK1N0YWNrU2xvdCogUHJvY2VkdXJl
OjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCkKK3sK
KyAgICBzaXplX3QgaW5kZXggPSBhZGRTdGFja1Nsb3RJbmRleCgpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxTdGFja1Nsb3Q+IHNsb3QobmV3IFN0YWNrU2xvdChpbmRleCwgYnl0ZVNpemUsIGtpbmQp
KTsKKyAgICBTdGFja1Nsb3QqIHJlc3VsdCA9IHNsb3QuZ2V0KCk7CisgICAgbV9zdGFja1Nsb3Rz
W2luZGV4XSA9IFdURk1vdmUoc2xvdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RhY2tT
bG90KiBQcm9jZWR1cmU6OmFkZEFub255bW91c1N0YWNrU2xvdChUeXBlIHR5cGUpCit7CisgICAg
cmV0dXJuIGFkZFN0YWNrU2xvdChzaXplb2ZUeXBlKHR5cGUpLCBTdGFja1Nsb3RLaW5kOjpBbm9u
eW1vdXMpOworfQorCiBWYWx1ZSogUHJvY2VkdXJlOjpjbG9uZShWYWx1ZSogdmFsdWUpCiB7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlPiBjbG9uZSh2YWx1ZS0+Y2xvbmVJbXBsKCkpOwpAQCAt
MTkyLDYgKzIwNywxMSBAQCB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
CiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygiICAgICIsIGRlZXBEdW1wKCp0aGlzLCB2YWx1
ZSksICJcbiIpOwogICAgIH0KKyAgICBpZiAoc3RhY2tTbG90cygpLnNpemUoKSkgeworICAgICAg
ICBvdXQucHJpbnQoIlN0YWNrIHNsb3RzOlxuIik7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBz
bG90IDogc3RhY2tTbG90cygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgcG9pbnRl
ckR1bXAoc2xvdCksICI6ICIsIGRlZXBEdW1wKHNsb3QpLCAiXG4iKTsKKyAgICB9CiAgICAgaWYg
KG1fYnlwcm9kdWN0cy0+Y291bnQoKSkKICAgICAgICAgb3V0LnByaW50KCptX2J5cHJvZHVjdHMp
OwogfQpAQCAtMjA2LDYgKzIyNiwxNCBAQCBWZWN0b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6
YmxvY2tzSW5QCiAgICAgcmV0dXJuIEIzOjpibG9ja3NJblBvc3RPcmRlcihhdCgwKSk7CiB9CiAK
K3ZvaWQgUHJvY2VkdXJlOjpkZWxldGVTdGFja1Nsb3QoU3RhY2tTbG90KiBzdGFja1Nsb3QpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGFja1Nsb3RzW3N0YWNrU2xvdC0+aW5kZXgoKV0uZ2V0
KCkgPT0gc3RhY2tTbG90KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc3RhY2tTbG90LT5pc0xvY2tl
ZCgpKTsKKyAgICBtX3N0YWNrU2xvdEluZGV4RnJlZUxpc3QuYXBwZW5kKHN0YWNrU2xvdC0+aW5k
ZXgoKSk7CisgICAgbV9zdGFja1Nsb3RzW3N0YWNrU2xvdC0+aW5kZXgoKV0gPSBudWxscHRyOwor
fQorCiB2b2lkIFByb2NlZHVyZTo6ZGVsZXRlVmFsdWUoVmFsdWUqIHZhbHVlKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKG1fdmFsdWVzW3ZhbHVlLT5pbmRleCgpXS5nZXQoKSA9PSB2YWx1ZSk7CkBA
IC0yODIsNiArMzEwLDE3IEBAIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBQcm9jZWR1cmU6
OmMKICAgICByZXR1cm4gY29kZSgpLmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIH0KIAorc2l6ZV90
IFByb2NlZHVyZTo6YWRkU3RhY2tTbG90SW5kZXgoKQoreworICAgIGlmIChtX3N0YWNrU2xvdElu
ZGV4RnJlZUxpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IG1fc3RhY2tT
bG90cy5zaXplKCk7CisgICAgICAgIG1fc3RhY2tTbG90cy5hcHBlbmQobnVsbHB0cik7CisgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1fc3RhY2tTbG90SW5k
ZXhGcmVlTGlzdC50YWtlTGFzdCgpOworfQorCiBzaXplX3QgUHJvY2VkdXJlOjphZGRWYWx1ZUlu
ZGV4KCkKIHsKICAgICBpZiAobV92YWx1ZUluZGV4RnJlZUxpc3QuaXNFbXB0eSgpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMTk1NTg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAgY2xhc3MgQmFzaWNCbG9jazsKIGNsYXNzIEJsb2NrSW5zZXJ0aW9u
U2V0OwogY2xhc3MgQ0ZHOwogY2xhc3MgRG9taW5hdG9yczsKK2NsYXNzIFN0YWNrU2xvdDsKIGNs
YXNzIFZhbHVlOwogCiBuYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQpAQCAtOTAsNiArOTEs
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2NrKTsKICAgICAgICAg
c2V0QmxvY2tPcmRlckltcGwoYmxvY2tzKTsKICAgICB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2lu
ZCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90KiBhZGRBbm9ueW1vdXNTdGFja1Ns
b3QoVHlwZSk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CiAgICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKQEAgLTE3
Miw2ICsxNzYsNzUgQEAgcHVibGljOgogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5Q
cmVPcmRlcigpOwogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5Qb3N0T3JkZXIoKTsK
IAorICAgIGNsYXNzIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFN0YWNrU2xvdHNDb2xsZWN0aW9uKGNvbnN0IFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgICAg
IDogbV9wcm9jKHByb2MpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2MubV9zdGFja1Nsb3RzLnNpemUoKTsgfQorICAg
ICAgICBTdGFja1Nsb3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Byb2Mu
bV9zdGFja1Nsb3RzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9y
W10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3Io
KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAg
ICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGl0ZXJhdG9yKGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNp
Z25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikK
KyAgICAgICAgICAgICAgICAsIG1faW5kZXgoZmluZE5leHQoaW5kZXgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yKigpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9p
bmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisr
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9p
bmRleCArIDEpOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhl
ci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9jb2xsZWN0aW9u
LT5zaXplKCkgJiYgIW1fY29sbGVjdGlvbi0+YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgICAg
ICBpbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24qIG1f
Y29sbGVjdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisK
KyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywg
MCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIHNpemUoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFByb2NlZHVyZSYg
bV9wcm9jOworICAgIH07CisKKyAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFja1Nsb3RzKCkg
Y29uc3QgeyByZXR1cm4gU3RhY2tTbG90c0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKKyAgICB2b2lk
IGRlbGV0ZVN0YWNrU2xvdChTdGFja1Nsb3QqKTsKKyAgICAKICAgICBjbGFzcyBWYWx1ZXNDb2xs
ZWN0aW9uIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFZhbHVlc0NvbGxlY3Rpb24oY29uc3QgUHJv
Y2VkdXJlJiBwcm9jZWR1cmUpCkBAIC0yOTIsMTAgKzM2NSwxMyBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgc2V0QmxvY2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxvY2sqPiYpOwogCisgICAg
c2l6ZV90IGFkZFN0YWNrU2xvdEluZGV4KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90
IGFkZFZhbHVlSW5kZXgoKTsKLSAgICAKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3Rh
Y2tTbG90Pj4gbV9zdGFja1Nsb3RzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNC
bG9jaz4+IG1fYmxvY2tzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3Zh
bHVlczsKKyAgICBWZWN0b3I8c2l6ZV90PiBtX3N0YWNrU2xvdEluZGV4RnJlZUxpc3Q7CiAgICAg
VmVjdG9yPHNpemVfdD4gbV92YWx1ZUluZGV4RnJlZUxpc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PENGRz4gbV9jZmc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPERvbWluYXRvcnM+IG1fZG9taW5hdG9y
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5j
cHAJKHJldmlzaW9uIDE5NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVj
ZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUg
IkIzUGhpQ2hpbGRyZW4uaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNs
dWRlICJCM1B1cmVDU0UuaCIKKyNpbmNsdWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKKyNpbmNsdWRl
ICJCM1N0YWNrU2xvdC5oIgogI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCiAjaW5jbHVkZSAi
QjNVc2VDb3VudHMuaCIKICNpbmNsdWRlICJCM1ZhbHVlS2V5SW5saW5lcy5oIgpAQCAtMjA3Niwx
NCArMjA3OCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKKyAgICAgICAgSW5kZXhTZXQ8U3RhY2tTbG90PiBsaXZlU3RhY2tTbG90czsKKyAgICAgICAg
CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAg
IHNpemVfdCBzb3VyY2VJbmRleCA9IDA7CiAgICAgICAgICAgICBzaXplX3QgdGFyZ2V0SW5kZXgg
PSAwOwogICAgICAgICAgICAgd2hpbGUgKHNvdXJjZUluZGV4IDwgYmxvY2stPnNpemUoKSkgewog
ICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdChzb3VyY2VJbmRleCsrKTsK
LSAgICAgICAgICAgICAgICBpZiAod29ya2xpc3Quc2F3KHZhbHVlKSkKKyAgICAgICAgICAgICAg
ICBpZiAod29ya2xpc3Quc2F3KHZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoU2xv
dEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+YXM8U2xvdEJhc2VWYWx1ZT4oKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxpdmVTdGFja1Nsb3RzLmFkZChzbG90QmFzZS0+c2xvdCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KHRhcmdldEluZGV4KyspID0gdmFsdWU7Ci0g
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgbV9wcm9jLmRlbGV0ZVZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IGVudGlyZWx5IGNsZWFyIGlmIHRo
aXMgaXMgbmVlZGVkLiBJIHRoaW5rIGl0IG1ha2VzIHNlbnNlIHRvIGhhdmUKQEAgLTIwOTUsNiAr
MjEwMSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgYmxvY2stPnZh
bHVlcygpLnJlc2l6ZSh0YXJnZXRJbmRleCk7CiAgICAgICAgIH0KKworICAgICAgICBmb3IgKFN0
YWNrU2xvdCogc2xvdCA6IG1fcHJvYy5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgICAgIGlmIChz
bG90LT5pc0xvY2tlZCgpIHx8IGxpdmVTdGFja1Nsb3RzLmNvbnRhaW5zKHNsb3QpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9wcm9jLmRlbGV0ZVN0YWNrU2xvdChz
bG90KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHZvaWQgc2ltcGxpZnlTU0EoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5jcHAJKHJldmlzaW9u
IDE5NTU4NCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUu
Y3BwOjE5NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Nsb3RCYXNlVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N0YWNrU2xvdFZhbHVlOjp+U3RhY2tTbG90VmFs
dWUoKQoreworfQorCit2b2lkIFN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXIm
IGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChjb21tYSwg
ImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisKK1Zh
bHVlKiBTdGFja1Nsb3RWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3
IFN0YWNrU2xvdFZhbHVlKCp0aGlzKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU2xvdEJhc2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU2xvdEJhc2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Nsb3RCYXNlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwyNCAr
MjQsMjQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQjNTdGFja1Ns
b3RWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU2xvdEJhc2VWYWx1ZS5oIgogCiAjaWYgRU5BQkxFKEIz
X0pJVCkKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKLVN0YWNrU2xvdFZhbHVl
Ojp+U3RhY2tTbG90VmFsdWUoKQorU2xvdEJhc2VWYWx1ZTo6flNsb3RCYXNlVmFsdWUoKQogewog
fQogCi12b2lkIFN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAordm9pZCBTbG90QmFzZVZhbHVlOjpkdW1wTWV0YShDb21t
YVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmlu
dChjb21tYSwgImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7
CisgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChtX3Nsb3QpKTsKIH0KIAotVmFsdWUq
IFN0YWNrU2xvdFZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAorVmFsdWUqIFNsb3RCYXNlVmFsdWU6
OmNsb25lSW1wbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5ldyBTdGFja1Nsb3RWYWx1ZSgqdGhp
cyk7CisgICAgcmV0dXJuIG5ldyBTbG90QmFzZVZhbHVlKCp0aGlzKTsKIH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTbG90QmFz
ZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJh
c2VWYWx1ZS5oCShyZXZpc2lvbiAxOTU1ODQpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdFZhbHVlLmg6MTk1NTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU2xvdEJhc2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
U3RhY2tTbG90VmFsdWVfaAorI2RlZmluZSBCM1N0YWNrU2xvdFZhbHVlX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlICJCM1Zh
bHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgQWly
IHsKK2NsYXNzIFN0YWNrU2xvdDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBKU19FWFBP
UlRfUFJJVkFURSBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3Rh
Y2tTbG90OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2lu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVk
IGF0IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFj
ayBzbG90cy4gVXNlIHRoZQorICAgIC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4KKyAgICBpbnRw
dHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90
IGlzIExvY2tlZC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgfQorCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKKyAgICBmcmllbmQgY2xhc3Mg
UHJvY2VkdXJlOworCisgICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBv
cmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIFN0YWNrU2xvdCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKQorICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9raW5kKGtp
bmQpCisgICAgICAgICwgbV9vZmZzZXRGcm9tRlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5z
aWduZWQgbV9ieXRlU2l6ZTsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBpbnRwdHJf
dCBtX29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTbG90QmFzZVZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTbG90QmFzZVZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDM4ICsyMywyNCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAot
I2lmbmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKLSNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisj
aWZuZGVmIEIzU2xvdEJhc2VWYWx1ZV9oCisjZGVmaW5lIEIzU2xvdEJhc2VWYWx1ZV9oCiAKICNp
ZiBFTkFCTEUoQjNfSklUKQogCi0jaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCiAjaW5jbHVk
ZSAiQjNWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotbmFtZXNw
YWNlIEFpciB7CiBjbGFzcyBTdGFja1Nsb3Q7Ci19IC8vIG5hbWVzcGFjZSBBaXIKIAotY2xhc3Mg
SlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworY2xhc3Mg
SlNfRVhQT1JUX1BSSVZBVEUgU2xvdEJhc2VWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUg
PT0gU3RhY2tTbG90OyB9CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7
IHJldHVybiBvcGNvZGUgPT0gU2xvdEJhc2U7IH0KIAotICAgIH5TdGFja1Nsb3RWYWx1ZSgpOwor
ICAgIH5TbG90QmFzZVZhbHVlKCk7CiAKLSAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnl0ZVNpemU7IH0KLSAgICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQ7IH0KLQotICAgIC8vIFRoaXMgZ2V0cyBhc3NpZ25lZCBhdCB0aGUgZW5kIG9m
IGNvbXBpbGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxseSBwaW4gc3RhY2sgc2xvdHMuIFVzZSB0
aGUKLSAgICAvLyBzZXQgbWV0aG9kIHRvIGRvIHRoYXQuCi0gICAgaW50cHRyX3Qgb2Zmc2V0RnJv
bUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KLQotICAgIC8vIE5vdGUgdGhh
dCB0aGlzIGlzIG1lYW5pbmdsZXNzIHVubGVzcyB0aGUgc3RhY2sgc2xvdCBpcyBMb2NrZWQuCi0g
ICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCi0gICAgewotICAgICAgICBt
X29mZnNldEZyb21GUCA9IHZhbHVlOwotICAgIH0KKyAgICBTdGFja1Nsb3QqIHNsb3QoKSBjb25z
dCB7IHJldHVybiBtX3Nsb3Q7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZHVtcE1ldGEoQ29t
bWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKQEAgLTYyLDI1ICs0OCwy
MCBAQCBwcm90ZWN0ZWQ6CiAgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOwog
CiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKICAgICBmcmllbmQg
Y2xhc3MgUHJvY2VkdXJlOwogCi0gICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9y
aWdpbiBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCisgICAg
U2xvdEJhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgU3RhY2tTbG90KiBz
bG90KQogICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBTdGFja1Nsb3QsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbikKLSAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQotICAg
ICAgICAsIG1fa2luZChraW5kKQotICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAgICAg
ICwgbV9zbG90KHNsb3QpCiAgICAgewogICAgIH0KIAotICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7
Ci0gICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7Ci0gICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7
CisgICAgU3RhY2tTbG90KiBtX3Nsb3Q7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
IAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCiAKLSNlbmRpZiAvLyBCM1N0YWNrU2xvdFZhbHVl
X2gKKyNlbmRpZiAvLyBCM1Nsb3RCYXNlVmFsdWVfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90LmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3RhY2tTbG90Ojp+U3RhY2tT
bG90KCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrIiwgbV9pbmRleCk7Cit9CisKK3ZvaWQgU3RhY2tT
bG90OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgi
Ynl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZy
b21GUCwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisKK1N0YWNrU2xvdDo6U3RhY2tTbG90KHVu
c2lnbmVkIGluZGV4LCB1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQorICAg
IDogbV9pbmRleChpbmRleCkKKyAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgLCBtX2tp
bmQoa2luZCkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Ns
b3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3Qu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja1Nsb3RfaAorI2RlZmluZSBC
M1N0YWNrU2xvdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Ns
b3RLaW5kLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSBBaXIgeworY2xhc3MgU3RhY2tTbG90Owor
fSAvLyBuYW1lc3BhY2UgQWlyCisKK2NsYXNzIFN0YWNrU2xvdCB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoU3RhY2tTbG90KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVi
bGljOgorICAgIH5TdGFja1Nsb3QoKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25z
dCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBib29sIGlzTG9ja2VkKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kID09IFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDsgfQorICAgIHVuc2lnbmVkIGluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0
IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBz
bG90cy4gVXNlIHRoZQorICAgIC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4KKyAgICB1bnNpZ25l
ZCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlz
IExvY2tlZC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CisK
KyAgICBTdGFja1Nsb3QodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Ns
b3RLaW5kKTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgdW5zaWduZWQgbV9ieXRlU2l6
ZTsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21G
UCB7IDAgfTsKK307CisKK2NsYXNzIERlZXBTdGFja1Nsb3REdW1wIHsKK3B1YmxpYzoKKyAgICBE
ZWVwU3RhY2tTbG90RHVtcChjb25zdCBTdGFja1Nsb3QqIHNsb3QpCisgICAgICAgIDogbV9zbG90
KHNsb3QpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc2xvdCkKKyAgICAgICAgICAgIG1fc2xvdC0+ZGVl
cER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4i
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgU3RhY2tTbG90KiBtX3Nsb3Q7Cit9Owor
CitpbmxpbmUgRGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAoY29uc3QgU3RhY2tTbG90KiBzbG90
KQoreworICAgIHJldHVybiBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QjNTdGFja1Nsb3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Ns
b3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2tTbG90VmFsdWUuY3BwCShyZXZpc2lvbiAxOTU1ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCi0KLSNpZiBF
TkFCTEUoQjNfSklUKQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKLQotU3RhY2tT
bG90VmFsdWU6On5TdGFja1Nsb3RWYWx1ZSgpCi17Ci19Ci0KLXZvaWQgU3RhY2tTbG90VmFsdWU6
OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17
Ci0gICAgb3V0LnByaW50KGNvbW1hLCAiYnl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBraW5k
ID0gIiwgbV9raW5kKTsKLX0KLQotVmFsdWUqIFN0YWNrU2xvdFZhbHVlOjpjbG9uZUltcGwoKSBj
b25zdAotewotICAgIHJldHVybiBuZXcgU3RhY2tTbG90VmFsdWUoKnRoaXMpOwotfQotCi19IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDE5
NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQjNTdGFja1Nsb3RWYWx1ZV9oCi0jZGVm
aW5lIEIzU3RhY2tTbG90VmFsdWVfaAotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1ZGUg
IkIzU3RhY2tTbG90S2luZC5oIgotI2luY2x1ZGUgIkIzVmFsdWUuaCIKLQotbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7Ci0KLW5hbWVzcGFjZSBBaXIgewotY2xhc3MgU3RhY2tTbG90Owot
fSAvLyBuYW1lc3BhY2UgQWlyCi0KLWNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrU2xvdFZh
bHVlIDogcHVibGljIFZhbHVlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9w
Y29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTdGFja1Nsb3Q7IH0KLQotICAgIH5TdGFj
a1Nsb3RWYWx1ZSgpOwotCi0gICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVTaXplOyB9Ci0gICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9r
aW5kOyB9Ci0KLSAgICAvLyBUaGlzIGdldHMgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBjb21waWxh
dGlvbi4gQnV0LCB5b3UgY2FuIHRvdGFsbHkgcGluIHN0YWNrIHNsb3RzLiBVc2UgdGhlCi0gICAg
Ly8gc2V0IG1ldGhvZCB0byBkbyB0aGF0LgotICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9Ci0KLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBp
cyBtZWFuaW5nbGVzcyB1bmxlc3MgdGhlIHN0YWNrIHNsb3QgaXMgTG9ja2VkLgotICAgIHZvaWQg
c2V0T2Zmc2V0RnJvbUZQKGludHB0cl90IHZhbHVlKQotICAgIHsKLSAgICAgICAgbV9vZmZzZXRG
cm9tRlAgPSB2YWx1ZTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGR1bXBNZXRhKENv
bW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBWYWx1ZSog
Y2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNz
IEFpcjo6U3RhY2tTbG90OwotICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7Ci0KLSAgICBTdGFj
a1Nsb3RWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgYnl0ZVNp
emUsIFN0YWNrU2xvdEtpbmQga2luZCkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9w
Y29kZSwgU3RhY2tTbG90LCBwb2ludGVyVHlwZSgpLCBvcmlnaW4pCi0gICAgICAgICwgbV9ieXRl
U2l6ZShieXRlU2l6ZSkKLSAgICAgICAgLCBtX2tpbmQoa2luZCkKLSAgICAgICAgLCBtX29mZnNl
dEZyb21GUCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBtX2J5dGVTaXplOwotICAg
IFN0YWNrU2xvdEtpbmQgbV9raW5kOwotICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQOwotfTsK
LQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCi0KLSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQot
Ci0jZW5kaWYgLy8gQjNTdGFja1Nsb3RWYWx1ZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1
ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM09yaWdpbkR1bXAuaCIKICNpbmNsdWRl
ICJCM1Byb2NlZHVyZUlubGluZXMuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisj
aW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIK
ICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVz
LmgiCkBAIC0zODMsNyArMzgzLDcgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygpIGNvbnN0CiAg
ICAgY2FzZSBDb25zdDY0OgogICAgIGNhc2UgQ29uc3REb3VibGU6CiAgICAgY2FzZSBDb25zdEZs
b2F0OgotICAgIGNhc2UgU3RhY2tTbG90OgorICAgIGNhc2UgU2xvdEJhc2U6CiAgICAgY2FzZSBB
cmd1bWVudFJlZzoKICAgICBjYXNlIEZyYW1lUG9pbnRlcjoKICAgICBjYXNlIEFkZDoKQEAgLTU2
NSw3ICs1NjUsNyBAQCB2b2lkIFZhbHVlOjpjaGVja09wY29kZShPcGNvZGUgb3Bjb2RlKQogICAg
IEFTU0VSVCghQ29udHJvbFZhbHVlOjphY2NlcHRzKG9wY29kZSkpOwogICAgIEFTU0VSVCghTWVt
b3J5VmFsdWU6OmFjY2VwdHMob3Bjb2RlKSk7CiAgICAgQVNTRVJUKCFQYXRjaHBvaW50VmFsdWU6
OmFjY2VwdHMob3Bjb2RlKSk7Ci0gICAgQVNTRVJUKCFTdGFja1Nsb3RWYWx1ZTo6YWNjZXB0cyhv
cGNvZGUpKTsKKyAgICBBU1NFUlQoIVNsb3RCYXNlVmFsdWU6OmFjY2VwdHMob3Bjb2RlKSk7CiAg
ICAgQVNTRVJUKCFVcHNpbG9uVmFsdWU6OmFjY2VwdHMob3Bjb2RlKSk7CiB9CiAjZW5kaWYgLy8g
IUFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJl
dmlzaW9uIDE5NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw4IEBACiAjaW5jbHVkZSAiQjNNYXRoRXh0cmFzLmgi
CiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCi0j
aW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU2xvdEJhc2VWYWx1ZS5o
IgorI2luY2x1ZGUgIkIzU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQjNTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMuaCIKICNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNVcHNp
bG9uVmFsdWUuaCIKQEAgLTQ5ODcsNyArNDk4OCw4IEBAIHZvaWQgdGVzdFN0YWNrU2xvdCgpCiAg
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKICAgICByb290LT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPigKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKLSAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFN0YWNrU2xvdFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSwgU3Rh
Y2tTbG90S2luZDo6QW5vbnltb3VzKSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxTbG90QmFz
ZVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIE9yaWdpbigpLCBtX3Byb2MuYWRkU3RhY2tTbG90
KDEsIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykpKTsKIAogICAgIHZvaWQqIHN0YWNrU2xvdCA9
IGNvbXBpbGVBbmRSdW48dm9pZCo+KHByb2MpOwogICAgIENIRUNLKHN0YWNrU2xvdCA8ICZwcm9j
KTsKQEAgLTUwMTUsOCArNTAxNyw4IEBAIHZvaWQgdGVzdFN0b3JlTG9hZFN0YWNrU2xvdChpbnQg
dmFsdWUpCiAgICAgUHJvY2VkdXJlIHByb2M7CiAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKIAotICAgIFN0YWNrU2xvdFZhbHVlKiBzdGFjayA9IHJvb3QtPmFwcGVuZE5l
dzxTdGFja1Nsb3RWYWx1ZT4oCi0gICAgICAgIHByb2MsIE9yaWdpbigpLCBzaXplb2YoaW50KSwg
U3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICBTbG90QmFzZVZhbHVlKiBzdGFjayA9IHJv
b3QtPmFwcGVuZE5ldzxTbG90QmFzZVZhbHVlPigKKyAgICAgICAgcHJvYywgT3JpZ2luKCksIG1f
cHJvYy5hZGRTdGFja1Nsb3Qoc2l6ZW9mKGludCksIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykp
OwogCiAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKICAgICAgICAgcHJvYywgU3Rv
cmUsIE9yaWdpbigpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUu
Y3BwCShyZXZpc2lvbiAxOTU1ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxNyArNTIsMTcgQEAgQmFzaWNCbG9jayog
Q29kZTo6YWRkQmxvY2soZG91YmxlIGZyZXF1ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVN0
YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RL
aW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKK1N0YWNrU2xvdCogQ29kZTo6YWRkU3Rh
Y2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIEIzOjpTdGFja1Ns
b3QqIGIzU2xvdCkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90KG5ldyBT
dGFja1Nsb3QoYnl0ZVNpemUsIG1fc3RhY2tTbG90cy5zaXplKCksIGtpbmQsIHZhbHVlKSk7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcgU3RhY2tTbG90KGJ5dGVTaXpl
LCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCBiM1Nsb3QpKTsKICAgICBTdGFja1Nsb3QqIHJl
c3VsdCA9IHNsb3QuZ2V0KCk7CiAgICAgbV9zdGFja1Nsb3RzLmFwcGVuZChXVEZNb3ZlKHNsb3Qp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1TdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xv
dChTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCitTdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xvdChC
Mzo6U3RhY2tTbG90KiBiM1Nsb3QpCiB7Ci0gICAgcmV0dXJuIGFkZFN0YWNrU2xvdCh2YWx1ZS0+
Ynl0ZVNpemUoKSwgdmFsdWUtPmtpbmQoKSwgdmFsdWUpOworICAgIHJldHVybiBhZGRTdGFja1Ns
b3QoYjNTbG90LT5ieXRlU2l6ZSgpLCBiM1Nsb3QtPmtpbmQoKSwgYjNTbG90KTsKIH0KIAogU3Bl
Y2lhbCogQ29kZTo6YWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAxOTU1
ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgsOCArNjgsOCBAQCBwdWJsaWM6CiAgICAgLy8gb2YgYW55IHByaW9yIHN0YWNr
IHNsb3QuIEluIGZhY3QsIGFsbCBzdGFjayBzbG90cyB5b3UgY3JlYXRlIGluIHRoZSBmdXR1cmUg
d2lsbCBoYXZlIGFuIGluZGV4CiAgICAgLy8gdGhhdCBpcyA+PSBzdGFja1Nsb3RzKCkuc2l6ZSgp
LgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KAotICAgICAg
ICB1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVs
bHB0cik7Ci0gICAgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QoU3RhY2tTbG90VmFsdWUqKTsKKyAg
ICAgICAgdW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQsIEIzOjpTdGFja1Nsb3QqID0g
bnVsbHB0cik7CisgICAgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QoQjM6OlN0YWNrU2xvdCopOwog
CiAgICAgU3BlY2lhbCogYWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4pOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCShy
ZXZpc2lvbiAxOTU1ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNr
U2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE1ICsyOCwxNSBAQAogCiAjaWYgRU5BQkxF
KEIzX0pJVCkKIAotI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0
YWNrU2xvdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CiAKIHZvaWQgU3RhY2tTbG90OjpzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCiB7
CiAgICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKLSAgICBpZiAobV92YWx1ZSkKLSAgICAgICAg
bV92YWx1ZS0+bV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKKyAgICBpZiAobV9iM1Nsb3QpCisgICAg
ICAgIG1fYjNTbG90LT5tX29mZnNldEZyb21GUCA9IHZhbHVlOwogfQogCiB2b2lkIFN0YWNrU2xv
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtNDcsMTYgKzQ3LDE2IEBAIHZvaWQg
U3RhY2tTbG90OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKIHZvaWQgU3RhY2tTbG90OjpkZWVw
RHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCgiYnl0ZVNpemUg
PSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21GUCwgIiwg
a2luZCA9ICIsIG1fa2luZCk7Ci0gICAgaWYgKG1fdmFsdWUpCi0gICAgICAgIG91dC5wcmludCgi
LCB2YWx1ZSA9ICIsICptX3ZhbHVlKTsKKyAgICBpZiAobV9iM1Nsb3QpCisgICAgICAgIG91dC5w
cmludCgiLCBiM1Nsb3QgPSAiLCAqbV9iM1Nsb3QpOwogfQogCi1TdGFja1Nsb3Q6OlN0YWNrU2xv
dCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtpbmQga2luZCwg
U3RhY2tTbG90VmFsdWUqIHZhbHVlKQorU3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgYnl0
ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kIGtpbmQsIEIzOjpTdGFja1Nsb3Qq
IGIzU2xvdCkKICAgICA6IG1fYnl0ZVNpemUoYnl0ZVNpemUpCiAgICAgLCBtX2luZGV4KGluZGV4
KQogICAgICwgbV9vZmZzZXRGcm9tRlAodmFsdWUgPyB2YWx1ZS0+b2Zmc2V0RnJvbUZQKCkgOiAw
KQogICAgICwgbV9raW5kKGtpbmQpCi0gICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICwgbV9iM1Ns
b3QoYjNTbG90KQogewogICAgIEFTU0VSVChieXRlU2l6ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDE5NTU4NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotY2xh
c3MgU3RhY2tTbG90VmFsdWU7CitjbGFzcyBTdGFja1Nsb3Q7CiAKIG5hbWVzcGFjZSBBaXIgewog
CkBAIC04MCwxMyArODAsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
Q29kZTsKIAotICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgs
IFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKik7CisgICAgU3RhY2tTbG90KHVuc2lnbmVk
IGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90S2luZCwgQjM6OlN0YWNrU2xvdCop
OwogICAgIAogICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CiAgICAgdW5zaWduZWQgbV9pbmRleDsK
ICAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKICAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsK
LSAgICBTdGFja1Nsb3RWYWx1ZSogbV92YWx1ZTsKKyAgICBCMzo6U3RhY2tTbG90KiBtX2IzU2xv
dDsKIH07CiAKIGNsYXNzIERlZXBTdGFja1Nsb3REdW1wIHsKQEAgLTExOSw3ICsxMTksNyBAQCBu
YW1lc3BhY2UgV1RGIHsKIAogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdCogc3RhY2tTbG90KQogewotICAgIG91dC5wcmlu
dCgqc3RhY2tTbG90KTsKKyAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3RhY2tTbG90KSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExCM0NvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQjNDb21waWxlLmNwcAkocmV2aXNpb24gMTk1NTg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIKICNpbmNsdWRl
ICJCM1Byb2NlZHVyZUlubGluZXMuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisj
aW5jbHVkZSAiQjNTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5o
IgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5jcHAJKHJldmlzaW9uIDE5
NTU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw5ICs3OSwxMCBAQCB2b2lkIE91dHB1dDo6YXBwZW5kVG8oTEJhc2lj
QmxvY2sgYmxvY2spCiAgICAgbV9ibG9jayA9IGJsb2NrOwogfQogCi1TdGFja1Nsb3RWYWx1ZSog
T3V0cHV0Ojpsb2NrZWRTdGFja1Nsb3Qoc2l6ZV90IGJ5dGVzKQorU2xvdEJhc2VWYWx1ZSogT3V0
cHV0Ojpsb2NrZWRTdGFja1Nsb3Qoc2l6ZV90IGJ5dGVzKQogewotICAgIHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8U3RhY2tTbG90VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGJ5dGVzLCBTdGFj
a1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8U2xvdEJh
c2VWYWx1ZT4oCisgICAgICAgIG1fcHJvYywgb3JpZ2luKCksIG1fcHJvYy5hZGRTdGFja1Nsb3Qo
Ynl0ZXMsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCkpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpuZWco
TFZhbHVlIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQu
aAkocmV2aXNpb24gMTk1NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091
dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiQjNDb250
cm9sVmFsdWUuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQcm9j
ZWR1cmUuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisjaW5jbHVkZSAiQjNTbG90
QmFzZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVXBz
aWxvblZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKQEAgLTEwMiw3ICsxMDIs
NyBAQCBwdWJsaWM6CiAKICAgICBMVmFsdWUgZnJhbWVQb2ludGVyKCkgeyByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4o
KSk7IH0KIAotICAgIEIzOjpTdGFja1Nsb3RWYWx1ZSogbG9ja2VkU3RhY2tTbG90KHNpemVfdCBi
eXRlcyk7CisgICAgQjM6OlNsb3RCYXNlVmFsdWUqIGxvY2tlZFN0YWNrU2xvdChzaXplX3QgYnl0
ZXMpOwogCiAgICAgTFZhbHVlIGNvbnN0Qm9vbChib29sIHZhbHVlKSB7IHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OkNvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOyB9
CiAgICAgTFZhbHVlIGNvbnN0SW50MzIoaW50MzJfdCB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHZhbHVlKTsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHJldmlzaW9uIDE5NTU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsOSArMjA3LDkgQEAgcHVibGlj
OgogCiAjaWYgRlRMX1VTRVNfQjMKICAgICAgICAgc2l6ZV90IHNpemVPZkNhcHR1cmVkID0gc2l6
ZW9mKEpTVmFsdWUpICogbV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7Ci0gICAgICAgIEIzOjpT
dGFja1Nsb3RWYWx1ZSogY2FwdHVyZWRCYXNlID0gbV9vdXQubG9ja2VkU3RhY2tTbG90KHNpemVP
ZkNhcHR1cmVkKTsKKyAgICAgICAgQjM6OlNsb3RCYXNlVmFsdWUqIGNhcHR1cmVkQmFzZSA9IG1f
b3V0LmxvY2tlZFN0YWNrU2xvdChzaXplT2ZDYXB0dXJlZCk7CiAgICAgICAgIG1fY2FwdHVyZWQg
PSBtX291dC5hZGQoY2FwdHVyZWRCYXNlLCBtX291dC5jb25zdEludFB0cihzaXplT2ZDYXB0dXJl
ZCkpOwotICAgICAgICBzdGF0ZS0+Y2FwdHVyZWRWYWx1ZSA9IGNhcHR1cmVkQmFzZTsKKyAgICAg
ICAgc3RhdGUtPmNhcHR1cmVkVmFsdWUgPSBjYXB0dXJlZEJhc2UtPnNsb3QoKTsKICNlbHNlIC8v
IEZUTF9VU0VTX0IzCiAgICAgICAgIExWYWx1ZSBjYXB0dXJlZEFsbG9jYSA9IG1fb3V0LmFsbG9j
YShhcnJheVR5cGUobV9vdXQuaW50NjQsIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsKSk7CiAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24g
MTk1NTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgQjMg
ewogY2xhc3MgUGF0Y2hwb2ludFZhbHVlOwotY2xhc3MgU3RhY2tTbG90VmFsdWU7CitjbGFzcyBT
dGFja1Nsb3Q7CiB9IC8vIG5hbWVzcGFjZSBCMwogCiBuYW1lc3BhY2UgRlRMIHsKQEAgLTg5LDcg
Kzg5LDcgQEAgcHVibGljOgogICAgIC8vIGFyZSBubyBhcHBsaWNhYmxlIGNhdGNoIGJsb2NrcyBh
bnl3aGVyZSBpbiB0aGUgR3JhcGguCiAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGU+IGRlZmF1bHRFeGNlcHRpb25IYW5kbGU7CiAgICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+
IGV4Y2VwdGlvbkhhbmRsZXIgeyBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD46OmNyZWF0ZSgpIH07
Ci0gICAgQjM6OlN0YWNrU2xvdFZhbHVlKiBjYXB0dXJlZFZhbHVlIHsgbnVsbHB0ciB9OworICAg
IEIzOjpTdGFja1Nsb3QqIGNhcHR1cmVkVmFsdWUgeyBudWxscHRyIH07CiAjZWxzZSAvLyBGVExf
VVNFU19CMwogICAgIHVuc2lnbmVkIGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21h
cElEIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBoYW5kbGVFeGNlcHRpb25TdGFja21hcElE
IHsgVUlOVF9NQVggfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269904</attachid>
            <date>2016-01-26 12:11:49 -0800</date>
            <delta_ts>2016-01-26 12:41:09 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>77535</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1NjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MCBA
QAorMjAxNi0wMS0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB0aGluZyB0aGF0IEIzIHVzZXMgdG8gZGVzY3JpYmUgYSBzdGFjayBzbG90IHNob3VsZCBu
b3QgYmUgYSBWYWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUzNDkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIEIzIHJlcHJlc2VudGVkIHN0YWNrIHNsb3RzIGJ5
IGhhdmluZyBhIFN0YWNrU2xvdFZhbHVlIHRoYXQgY2FycmllZAorICAgICAgICB0d28gbWVhbmlu
Z3M6CisKKyAgICAgICAgLSBJdCByZXByZXNlbnRlZCBhIHN0YWNrIHNsb3QuCisKKyAgICAgICAg
LSBJdCB3YXMgYSBraW5kIG9mIFZhbHVlIGZvciBnZXR0aW5nIHRoZSBiYXNlIG9mIHRoZSBzdGFj
ayBzbG90LgorCisgICAgICAgIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYSB1bnRpbCB5b3Ug
Y29uc2lkZXIgdGhlIGZvbGxvd2luZyBpc3N1ZXMuCisKKyAgICAgICAgMSkgQSBWYWx1ZSBjYW4g
YmUga2lsbGVkIGlmIGl0IGlzIG9uIGFuIHVucmVhY2hhYmxlIHBhdGgsIG9yIGlmIGl0IGhhcyBu
byBlZmZlY3RzIGFuZAorICAgICAgICAgICBub2JvZHkgcmVmZXJzIHRvIGl0LiBCdXQgdGhlIEZU
TCB1c2VzIFN0YWNrU2xvdFZhbHVlIHRvIGFsbG9jYXRlIHNwYWNlIG9uIHRoZSBzdGFjay4KKyAg
ICAgICAgICAgV2hlbiBpdCBkb2VzIHRoaXMsIGl0IGRvZXNuJ3Qgd2FudCBpdCB0byBiZSBraWxs
ZWQuIEl0IHdpbGwgZGVyZWZlcmVuY2UgdGhlIG9iamVjdCwgc28KKyAgICAgICAgICAga2lsbGlu
ZyBpdCBpcyBhIGJ1Zy4KKworICAgICAgICAyKSBBIHByZW1pc2Ugb2YgQjMgaXMgdGhhdCBpdCBz
aG91bGQgYmUgYWx3YXlzIGxlZ2FsIHRvIHBlcmZvcm0gdGhlIGZvbGxvd2luZworICAgICAgICAg
ICB0cmFuc2Zvcm1hdGlvbiBvbiBhIHZhbHVlOgorCisgICAgICAgICAgIHZhbHVlLT5yZXBsYWNl
V2l0aElkZW50aXR5KGluc2VydGlvblNldC5pbnNlcnRWYWx1ZShpbmRleCwgcHJvYy5jbG9uZSh2
YWx1ZSkpKTsKKworICAgICAgICAgICBUaGlzIGluc2VydHMgYSBuZXcgdmFsdWUganVzdCBiZWZv
cmUgdGhlIG9sZCBvbmUuIFRoZSBuZXcgdmFsdWUgaXMgYSBjbG9uZSBvZiB0aGUgb2xkCisgICAg
ICAgICAgIG9uZS4gVGhlbiB0aGUgb2xkIG9uZSBpcyBlc3NlbnRpYWxseSBkZWxldGVkIChhbnl0
aGluZyB0aGF0IGJlY29tZXMgYW4gaWRlbnRpdHkgZGllcworICAgICAgICAgICBzaG9ydGx5IHRo
ZXJlYWZ0ZXIpLiBQcm9ibGVtICgxKSBwcmV2ZW50cyB0aGlzIGZyb20gYmVpbmcgbGVnYWwsIHdo
aWNoIGJyZWFrcyBhIG1ham9yCisgICAgICAgICAgIHByZW1pc2Ugb2YgQjMgSVIuCisKKyAgICAg
ICAgMykgQSBwcmVtaXNlIG9mIEIzIGlzIHRoYXQgaXQgc2hvdWxkIGJlIGFsd2F5cyBsZWdhbCB0
byBwZXJmb3JtIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgdHJhbnNmb3JtYXRpb24gb24gYSB2
YWx1ZToKKworICAgICAgICAgICBCZWZvcmU6CisgICAgICAgICAgICAgICAgICAgQDQyID0gVGhp
bmcoLi4uKQorCisgICAgICAgICAgIEFmdGVyOgorICAgICAgICAgICAgICAgICAgIEJyYW5jaChA
ZG9lc250TWF0dGVyLCAjeWVzLCAjbm8pCisgICAgICAgICAgICAgICBCQiN5ZXM6CisgICAgICAg
ICAgICAgICAgICAgQDQyX29uZSA9IFRoaW5nKC4uLikKKyAgICAgICAgICAgICAgICAgICBVcHNp
bG9uKEA0Ml9vbmUsIF40MikKKyAgICAgICAgICAgICAgICAgICBKdW1wKCNkb25lKQorICAgICAg
ICAgICAgICAgQkIjbm86CisgICAgICAgICAgICAgICAgICAgQDQyX3R3byA9IFRoaW5nKC4uLikK
KyAgICAgICAgICAgICAgICAgICBVcHNpbG9uKEA0Ml90d28sIF40MikKKyAgICAgICAgICAgICAg
ICAgICBKdW1wKCNkb25lKQorICAgICAgICAgICAgICAgQkIjZG9uZToKKyAgICAgICAgICAgICAg
ICAgICBANDIgPSBQaGkoKQorCisgICAgICAgICAgIEJ1dCBwcmlvciB0byB0aGlzIGNoYW5nZSwg
c3VjaCBhIHRyYW5zZm9ybWF0aW9uIG1ha2VzIGFic29sdXRlbHkgbm8gc2Vuc2UgZm9yCisgICAg
ICAgICAgIFN0YWNrU2xvdC4gSXQgd2lsbCAid29yayIgaW4gdGhlIHNlbnNlIHRoYXQgdGhlIGNv
bXBpbGVyIHdpbGwgcHJvY2VlZCB1bmRhdW50ZWQsIGJ1dAorICAgICAgICAgICBpdCB3aWxsIGRp
c2FibGUgU1NBIGZpeC11cCBmb3IgdGhlIGNsb25lZCBzdGFjayBzbG90IGFuZCB3ZSB3aWxsIGVu
ZCB1cCBhbGxvY2F0aW5nIHR3bworICAgICAgICAgICBzdGFjayBzbG90cyBpbnN0ZWFkIG9mIG9u
ZSwgYW5kIHRoZW4gd2Ugd2lsbCBhc3N1bWUgdGhhdCB0aGV5IGJvdGggZXNjYXBlLCB3aGljaCB3
aWxsCisgICAgICAgICAgIGRpc2FibGUgZWZmaWNpZW50IHN0YWNrIGFsbG9jYXRpb24uIE5vdGUg
dGhhdCB0aGUgbW9yYWwgZXF1aXZhbGVudCBvZiB0aGlzCisgICAgICAgICAgIHRyYW5zZm9ybWF0
aW9uIGNvdWxkIGFscmVhZHkgaGFwcGVuIGR1ZSB0byB0YWlsIGR1cGxpY2F0aW9uLCBhbmQgdGhl
IG9ubHkgcmVhc29uIHdoeQorICAgICAgICAgICBpdCdzIG5vdCBhIGJ1ZyByaWdodCBub3cgaXMg
dGhhdCB3ZSBoYXBwZW4gdG8gaG9pc3Qgc3RhY2sgc2xvdHMgdG8gdGhlIHJvb3QgYmxvY2suIEJ1
dAorICAgICAgICAgICB0aGUgd2hvbGUgcG9pbnQgb2Ygb3VyIHN0YWNrIHNsb3RzIHdhcyBzdXBw
b3NlZCB0byBiZSB0aGF0IHRoZXkgZG8gbm90IGhhdmUgdG8gYmUKKyAgICAgICAgICAgaG9pc3Rl
ZC4KKworICAgICAgICBUaGlzIGNoYW5nZSBmaXhlcyB0aGlzIGlzc3VlIGJ5IHNwbGl0dGluZyBT
dGFja1Nsb3RWYWx1ZSBpbnRvIHR3byB0aGluZ3M6IFNsb3RCYXNlVmFsdWUsCisgICAgICAgIHdo
aWNoIGlzIGEgcHVyZSBvcGVyYXRpb24gZm9yIGdldHRpbmcgdGhlIGJhc2UgYWRkcmVzcyBvZiBh
IFN0YWNrU2xvdCwgYW5kIFN0YWNrU2xvdCwKKyAgICAgICAgd2hpY2ggaXMgYSByZXByZXNlbnRh
dGlvbiBvZiB0aGUgYWN0dWFsIHN0YWNrIHNsb3QuIFN0YWNrU2xvdCBjYW5ub3QgZ2V0IGR1cGxp
Y2F0ZWQgYW5kCisgICAgICAgIGNhbiBvbmx5IGJlIGtpbGxlZCBpZiBpdCdzIGFub255bW91cy4g
U2xvdEJhc2VWYWx1ZSBjYW4gYmUga2lsbGVkLCBtb3ZlZCwgY2xvbmVkLAorICAgICAgICBob2lz
dGVkLCBldGMuIFNpbmNlIGl0IGhhcyBubyBlZmZlY3RzIGFuZCBpdCBoYXMgYSBWYWx1ZUtleSwg
aXQncyBvbmUgb2YgdGhlIG1vc3QKKyAgICAgICAgcGVybWlzc2l2ZSBWYWx1ZXMgaW4gdGhlIElS
LCBqdXN0IGFzIG9uZSB3b3VsZCBob3BlIChhZnRlciBhbGwsIHRoZXJlIGlzIGFjdHVhbGx5IHpl
cm8KKyAgICAgICAgY29kZSB0aGF0IG5lZWRzIHRvIGV4ZWN1dGUgdG8gZXZhbHVhdGUgU2xvdEJh
c2VWYWx1ZSkuCisKKyAgICAgICAgVGhpcyBmaXhlcyBhIGNyYXNoIHRoYXQgd2Ugc2F3IHdpdGgg
R3VhcmRNYWxsb2MgYW5kIEFTYW4uIEl0IGFsc28gbWFrZXMgdGhlIElSIGEgbG90IG1vcmUKKyAg
ICAgICAgZWFzeSB0byByZWFzb24gYWJvdXQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGIzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwOgorICAgICAgICAq
IGIzL0IzRml4U1NBLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmRlbW90ZVZhbHVlcyk6CisgICAg
ICAgIChKU0M6OkIzOjpmaXhTU0EpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6Okxvd2VyVG9BaXI6OmVmZmVjdGl2ZUFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpsb3dlcik6CisgICAgICAgICogYjMvQjNPcGNvZGUuY3BwOgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOgorICAgICAg
ICAqIGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2V0
QmxvY2tPcmRlckltcGwpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGRTdGFja1Ns
b3QpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGRBbm9ueW1vdXNTdGFja1Nsb3Qp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpjbG9uZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpibG9ja3NJ
blBvc3RPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmRlbGV0ZVN0YWNrU2xv
dCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmRlbGV0ZVZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OlByb2NlZHVyZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6
OkIzOjpQcm9jZWR1cmU6OmFkZFN0YWNrU2xvdEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlBy
b2NlZHVyZTo6YWRkVmFsdWVJbmRleCk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuaDoKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2V0QmxvY2tPcmRlcik6CisgICAgICAgIChKU0M6
OkIzOjpQcm9jZWR1cmU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpTdGFja1Nsb3RzQ29sbGVjdGlv
bik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246
OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246
Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29s
bGVjdGlvbjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJh
dG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlv
bjo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpT
dGFja1Nsb3RzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6aXRlcmF0b3I6OmZpbmROZXh0
KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246
OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnN0YWNrU2xvdHMpOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpWYWx1ZXNDb2xsZWN0aW9u
KToKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1Ns
b3RCYXNlVmFsdWUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja1Nsb3RWYWx1ZS5jcHAuCisgICAgICAgIChKU0M6OkIzOjpTbG90QmFzZVZhbHVlOjp+U2xv
dEJhc2VWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTbG90QmFzZVZhbHVlOjpkdW1wTWV0YSk6
CisgICAgICAgIChKU0M6OkIzOjpTbG90QmFzZVZhbHVlOjpjbG9uZUltcGwpOgorICAgICAgICAo
SlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6On5TdGFja1Nsb3RWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6OmNsb25lSW1wbCk6IERlbGV0ZWQuCisgICAgICAg
ICogYjMvQjNTbG90QmFzZVZhbHVlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmguCisgICAgICAgICogYjMvQjNTdGFja1Nsb3QuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdDo6flN0YWNrU2xvdCk6CisgICAgICAg
IChKU0M6OkIzOjpTdGFja1Nsb3Q6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90
OjpkZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3Q6OlN0YWNrU2xvdCk6Cisg
ICAgICAgICogYjMvQjNTdGFja1Nsb3QuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFj
a1Nsb3Q6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdDo6a2luZCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3Q6OmlzTG9ja2VkKToKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrU2xvdDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90OjpvZmZzZXRG
cm9tRlApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90OjpzZXRPZmZzZXRGcm9tRlApOgor
ICAgICAgICAoSlNDOjpCMzo6RGVlcFN0YWNrU2xvdER1bXA6OkRlZXBTdGFja1Nsb3REdW1wKToK
KyAgICAgICAgKEpTQzo6QjM6OkRlZXBTdGFja1Nsb3REdW1wOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmg6IFJlbW92ZWQuCisgICAgICAg
ICogYjMvQjNWYWxpZGF0ZS5jcHA6CisgICAgICAgICogYjMvQjNWYWx1ZS5jcHA6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6ZWZmZWN0cyk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6a2V5
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpjaGVja09wY29kZSk6CisgICAgICAgICogYjMv
QjNWYWx1ZUtleS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6bWF0ZXJpYWxpemUp
OgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
Q29kZTo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjphZGRTdGFja1Ns
b3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjphZGRTcGVjaWFsKToKKyAgICAgICAg
KiBiMy9haXIvQWlyQ29kZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJTdGFja1Nsb3QuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlN0YWNrU2xvdDo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Ns
b3Q6OlN0YWNrU2xvdCk6CisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5oOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmFsaWdubWVudCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlN0YWNrU2xvdDo6YjNTbG90KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tT
bG90OjpvZmZzZXRGcm9tRlApOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90Ojp2YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICog
YjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTdGFja1Nsb3QpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdFN0b3JlTG9hZFN0YWNrU2xvdCk6CisgICAgICAgICogZnRsL0ZUTEIz
Q29tcGlsZS5jcHA6CisgICAgICAgICogZnRsL0ZUTEIzT3V0cHV0LmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpPdXRwdXQ6OmFwcGVuZFRvKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6Omxv
Y2tlZFN0YWNrU2xvdCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpuZWcpOgorICAgICAg
ICAqIGZ0bC9GVExCM091dHB1dC5oOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZnJhbWVQ
b2ludGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNvbnN0Qm9vbCk6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0Ojpjb25zdEludDMyKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06Omxv
d2VyKToKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuaDoKKwogMjAxNi0wMS0yNiAgQmVuamFtaW4g
UG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIGEgdXNlbGVz
cyAjaW5jbHVkZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNp
b24gMTk1NTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDcsMTEgKzE0NywxMiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNF
UwogICAgIGIzL0IzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAKICAgICBiMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAogICAgIGIzL0IzU1NBQ2FsY3VsYXRvci5jcHAKKyAgICBiMy9CM1Nsb3RCYXNlVmFs
dWUuY3BwCiAgICAgYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCiAgICAgYjMvQjNT
dGFja21hcFNwZWNpYWwuY3BwCiAgICAgYjMvQjNTdGFja21hcFZhbHVlLmNwcAogICAgIGIzL0Iz
U3RhY2tTbG90S2luZC5jcHAKLSAgICBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAorICAgIGIzL0Iz
U3RhY2tTbG90LmNwcAogICAgIGIzL0IzU3dpdGNoQ2FzZS5jcHAKICAgICBiMy9CM1N3aXRjaFZh
bHVlLmNwcAogICAgIGIzL0IzVGltaW5nU2NvcGUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTk1NTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTUzMyw2ICs1MzMsOCBAQAogCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJl
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkz
MzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5M0I0QTkxOEI5MkM0RDAwMTc4QTNG
IC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5j
cHAgKi87IH07CiAJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgx
OEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5NDk1ODcxQzU3RjQ3NTAwNDEzQTQ4IC8q
IEIzU3RhY2tTbG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTQ5NTg1MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5jcHAgKi87IH07
CisJCTBGOTQ5NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NDk1ODYxQzU3RjQ3NTAwNDEz
QTQ4IC8qIEIzU3RhY2tTbG90LmggKi87IH07CiAJCTBGOTUyQUJDMUI0ODdBNzcwMEMzNjdDNSAv
KiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjk1MkFCQTFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5j
ZXMuY3BwICovOyB9OwogCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVy
ZW5jZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OTUyQUJCMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkw
MDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODMy
LDggKzgzNCw4IEBACiAJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3Bl
Y2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi87IH07CiAJCTBG
RUM4NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi87IH07CiAJCTBGRUM4NTMzMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtp
bmQuaCAqLzsgfTsKLQkJMEZFQzg1MzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovOyB9OwotCQkw
RkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MzQxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZh
bHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VW
YWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5oICovOyB9OwogCQkwRkVD
ODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQzFCREFDREFDMDA4
MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi87IH07CiAJCTBGRUM4NTM3MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNo
Q2FzZS5jcHAgKi87IH07CiAJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLzsgfTsKQEAgLTI3MTUsNiAr
MjcxNyw4IEBACiAJCTBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlU2V0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlk
VmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeUlk
VmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTNCNEE4MThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQdXRCeUlkVmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
Rjk0OTU4NTFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja1Nsb3QuY3BwOyBwYXRoID0gYjMvQjNTdGFj
a1Nsb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk0OTU4NjFDNTdGNDc1
MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNTdGFja1Nsb3QuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJl
bmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2VkUmVm
ZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJCMUI0ODdB
NzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzAyOCw4ICszMDMyLDggQEAKIAkJMEZFQzg0RTcxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmg7IHBhdGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja1Nsb3RLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEIzU3RhY2tTbG90S2luZC5jcHA7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja1Nsb3RLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tT
bG90S2luZC5oOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90VmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuaDsg
cGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Nsb3RCYXNlVmFsdWUuY3BwOyBwYXRo
ID0gYjMvQjNTbG90QmFzZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Nsb3RCYXNlVmFsdWUuaDsgcGF0aCA9IGIzL0IzU2xv
dEJhc2VWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRFQzFCREFD
REFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBwYXRoID0gYjMvQjNTdWNj
ZXNzb3JDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NEVE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNTd2l0Y2hDYXNlLmNwcDsgcGF0aCA9IGIzL0IzU3dpdGNoQ2Fz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NEVFMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNTd2l0Y2hDYXNlLmg7IHBhdGggPSBiMy9CM1N3aXRjaENhc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQ4NTMsNiArNDg1Nyw4IEBACiAJCQkJNDM0MjJBNjUxQzE2MjIxRTAw
RTJFQjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5oICovLAogCQkJCTBGRUM4NUI3MUJFMTQ2
MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLywKIAkJCQkwRkVDODVCODFCRTE0
NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5oICovLAorCQkJCTBGRUM4NEVBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEVCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuaCAqLywKIAkJCQkwRjZCOEFEQTFDNEVGQUMz
MDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmNwcCAqLywKIAkJCQkwRjZCOEFEQjFDNEVGQUMz
MDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmggKi8sCiAJCQkJMEYzM0ZDRjUxQzEzNkUyNTAw
MzIzRjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcCAqLywKQEAgLTQ4NjEsMTAg
KzQ4NjcsMTAgQEAKIAkJCQkwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNw
ZWNpYWwuaCAqLywKIAkJCQkwRjMzOERFRjFCRTkzQUQxMDAxM0M4OEYgLyogQjNTdGFja21hcFZh
bHVlLmNwcCAqLywKIAkJCQkwRjMzOERGMDFCRTkzQUQxMDAxM0M4OEYgLyogQjNTdGFja21hcFZh
bHVlLmggKi8sCisJCQkJMEY5NDk1ODUxQzU3RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmNw
cCAqLywKKwkJCQkwRjk0OTU4NjFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuaCAqLywK
IAkJCQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLywK
IAkJCQkwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8sCi0J
CQkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovLAot
CQkJCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8sCiAJ
CQkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICov
LAogCQkJCTBGRUM4NEVEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwICovLAog
CQkJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLywKQEAgLTcx
MTIsNyArNzExOCw3IEBACiAJCQkJMEZFQzg1QkQxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNl
U3RyZW5ndGguaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZFQzg1
MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxl
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTcyMjMsNiArNzIyOSw3IEBA
CiAJCQkJQzIxOEQxNDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzRGNEI2RjQxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUxQzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0lu
c2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NDk1ODgxQzU3RjQ3NTAwNDEzQTQ4
IC8qIEIzU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGMzFBMDVDOTQ0MDA1
Q0FCNzYgLyogY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk1
REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4gSGVhZGVycyAq
LywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWluLnB5IGluIEhlYWRlcnMg
Ki8sCkBAIC04ODA3LDcgKzg4MTQsNyBAQAogCQkJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAv
KiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTMwMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RC
YXNlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUzOTFCREFDREFD
MDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ1NzA0
MDFCRTU4NENBMDA2MkE2MjkgLyogQjNUaW1pbmdTY29wZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTkwMzMsNiArOTA0MCw3IEBACiAJCQkJMEZFMjU0RjYxQUJEREQyMjAwQTdDNkQyIC8qIERGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2RTg0NUExOTAz
MEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkREQkZCNTE2NjZFRUQ4MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVt
cC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjk0OTU4NzFDNTdGNDc1MDA0MTNBNDggLyogQjNT
dGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNTExNTIyOEZGRDAwQ0Q4OTEw
IC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEExNTIy
ODA5QTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGRkM5NUYxNEVGOTBCQjAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5j
cHAJKHJldmlzaW9uIDE5NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1p
bmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcs
OCBAQAogI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkIzUHVyZUNTRS5oIgotI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFs
dWUuaCIKKyNpbmNsdWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xv
dC5oIgogI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCkBAIC0xMzAsNyArMTMxLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgbV9pbXB1cmVCbG9ja0RhdGFbbV9ibG9ja10gPSBtX2RhdGE7CiAgICAgICAgIH0K
IAotICAgICAgICBmb3IgKFN0YWNrU2xvdFZhbHVlKiBzdGFjayA6IG1fc3RhY2tzKQorICAgICAg
ICBmb3IgKFNsb3RCYXNlVmFsdWUqIHN0YWNrIDogbV9zdGFja3MpCiAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnRWYWx1ZSgwLCBzdGFjayk7CiAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFsdWVJbmRl
eCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgpIHsKQEAgLTM2
OSw4ICszNzAsOCBAQCBwcml2YXRlOgogICAgICAgICAvLyBSaWdodCBub3cgd2UncmUgcmVseWlu
ZyBvbiB0aGUgZmFjdCB0aGF0IENTRSdzIHBvc2l0aW9uIGluIHRoZSBwaGFzZSBvcmRlciBpcwog
ICAgICAgICAvLyBhbG1vc3QgcmlnaHQgYmVmb3JlIFNTQSBmaXh1cC4KICAgICAgICAgICAgIAot
ICAgICAgICBTdGFja1Nsb3RWYWx1ZSogc3RhY2sgPSBtX3Byb2MuYWRkPFN0YWNrU2xvdFZhbHVl
PigKLSAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLCBzaXplb2ZUeXBlKG1fdmFsdWUtPnR5
cGUoKSksIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgICAgIFNsb3RCYXNlVmFsdWUq
IHN0YWNrID0gbV9wcm9jLmFkZDxTbG90QmFzZVZhbHVlPigKKyAgICAgICAgICAgIG1fdmFsdWUt
Pm9yaWdpbigpLCBtX3Byb2MuYWRkQW5vbnltb3VzU3RhY2tTbG90KG1fdmFsdWUtPnR5cGUoKSkp
OwogICAgICAgICBtX3N0YWNrcy5hcHBlbmQoc3RhY2spOwogCiAgICAgICAgIE1lbW9yeVZhbHVl
KiBsb2FkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPigKQEAgLTQ5OCw3ICs0
OTksNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgVmFsdWUqIG1fdmFs
dWU7CiAKLSAgICBWZWN0b3I8U3RhY2tTbG90VmFsdWUqPiBtX3N0YWNrczsKKyAgICBWZWN0b3I8
U2xvdEJhc2VWYWx1ZSo+IG1fc3RhY2tzOwogICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8VmFs
dWUqPj4gbV9zdG9yZXM7CiAKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAJKHJldmlzaW9uIDE5NTU4NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDcgKzM4LDggQEAKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1By
b2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1NTQUNhbGN1bGF0b3IuaCIKLSNpbmNsdWRl
ICJCM1N0YWNrU2xvdFZhbHVlLmgiCisjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCisjaW5j
bHVkZSAiQjNTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1
ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgpAQCAt
NTEsMTkgKzUyLDE5IEBAIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCiB2b2lkIGRlbW90
ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2MsIGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQog
ewotICAgIEhhc2hNYXA8VmFsdWUqLCBTdGFja1Nsb3RWYWx1ZSo+IG1hcDsKLSAgICBIYXNoTWFw
PFZhbHVlKiwgU3RhY2tTbG90VmFsdWUqPiBwaGlNYXA7CisgICAgSGFzaE1hcDxWYWx1ZSosIFNs
b3RCYXNlVmFsdWUqPiBtYXA7CisgICAgSGFzaE1hcDxWYWx1ZSosIFNsb3RCYXNlVmFsdWUqPiBw
aGlNYXA7CiAKICAgICAvLyBDcmVhdGUgc3RhY2sgc2xvdHMuCiAgICAgSW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChwcm9jKTsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlcy52YWx1ZXMo
cHJvYy52YWx1ZXMoKSkpIHsKLSAgICAgICAgU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gaW5zZXJ0
aW9uU2V0Lmluc2VydDxTdGFja1Nsb3RWYWx1ZT4oCi0gICAgICAgICAgICAwLCB2YWx1ZS0+b3Jp
Z2luKCksIHNpemVvZlR5cGUodmFsdWUtPnR5cGUoKSksIFN0YWNrU2xvdEtpbmQ6OkFub255bW91
cyk7CisgICAgICAgIFNsb3RCYXNlVmFsdWUqIHN0YWNrID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxT
bG90QmFzZVZhbHVlPigKKyAgICAgICAgICAgIDAsIHZhbHVlLT5vcmlnaW4oKSwgcHJvYy5hZGRB
bm9ueW1vdXNTdGFja1Nsb3QodmFsdWUtPnR5cGUoKSkpOwogICAgICAgICBtYXAuYWRkKHZhbHVl
LCBzdGFjayk7CiAKICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkpIHsKLSAgICAg
ICAgICAgIFN0YWNrU2xvdFZhbHVlKiBwaGlTdGFjayA9IGluc2VydGlvblNldC5pbnNlcnQ8U3Rh
Y2tTbG90VmFsdWU+KAotICAgICAgICAgICAgICAgIDAsIHZhbHVlLT5vcmlnaW4oKSwgc2l6ZW9m
VHlwZSh2YWx1ZS0+dHlwZSgpKSwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICAgICAg
ICAgIFNsb3RCYXNlVmFsdWUqIHBoaVN0YWNrID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxTbG90QmFz
ZVZhbHVlPigKKyAgICAgICAgICAgICAgICAwLCB2YWx1ZS0+b3JpZ2luKCksIHByb2MuYWRkQW5v
bnltb3VzU3RhY2tTbG90KHZhbHVlLT50eXBlKCkpKTsKICAgICAgICAgICAgIHBoaU1hcC5hZGQo
dmFsdWUsIHBoaVN0YWNrKTsKICAgICAgICAgfQogICAgIH0KQEAgLTg5LDMxICs5MCwzMSBAQCB2
b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2MsIGNvbnN0CiAgICAgICAgICAgICBWYWx1
ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCk7CiAKICAgICAgICAgICAgIGlmICh2YWx1
ZS0+b3Bjb2RlKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFN0YWNrU2xvdFZhbHVl
KiBzdGFjayA9IHBoaU1hcC5nZXQodmFsdWUpKSB7CisgICAgICAgICAgICAgICAgaWYgKFNsb3RC
YXNlVmFsdWUqIHNsb3RCYXNlID0gcGhpTWFwLmdldCh2YWx1ZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZUluZGV4LCBMb2FkLCB2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCks
IHN0YWNrKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgTG9hZCwg
dmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCBzbG90QmFzZSkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSom
IGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFN0
YWNrU2xvdFZhbHVlKiBzdGFjayA9IG1hcC5nZXQoY2hpbGQpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IG1hcC5nZXQoY2hpbGQpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGluc2VydGlvblNldC5pbnNlcnQ8TWVtb3J5VmFs
dWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgsIExvYWQsIGNoaWxk
LT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgc3RhY2spOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlSW5kZXgsIExvYWQsIGNoaWxkLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwg
c2xvdEJhc2UpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgaWYgKFVwc2lsb25WYWx1ZSogdXBzaWxvbiA9IHZhbHVlLT5hczxVcHNp
bG9uVmFsdWU+KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFN0YWNrU2xvdFZhbHVlKiBz
dGFjayA9IHBoaU1hcC5nZXQodXBzaWxvbi0+cGhpKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IHBoaU1hcC5nZXQodXBzaWxvbi0+cGhpKCkp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBTdG9yZSwgdXBz
aWxvbi0+b3JpZ2luKCksIHVwc2lsb24tPmNoaWxkKDApLCBzdGFjayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgU3RvcmUsIHVwc2lsb24tPm9yaWdpbigpLCB1cHNp
bG9uLT5jaGlsZCgwKSwgc2xvdEJhc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUt
PnJlcGxhY2VXaXRoTm9wKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChTdGFja1Nsb3RWYWx1ZSogc3Rh
Y2sgPSBtYXAuZ2V0KHZhbHVlKSkgeworICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNs
b3RCYXNlID0gbWFwLmdldCh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0PE1lbW9yeVZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCArIDEs
IFN0b3JlLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBzdGFjayk7CisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlSW5kZXggKyAxLCBTdG9yZSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZSwgc2xvdEJh
c2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKQEAgLTEyNiw5ICsxMjcsMTAgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBw
cm9jKQogICAgIAogICAgIC8vIENvbGxlY3QgdGhlIHN0YWNrICJ2YXJpYWJsZXMiLiBJZiB0aGVy
ZSBhcmVuJ3QgYW55LCB0aGVuIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gZG8uCiAgICAgLy8g
VGhhdCdzIGEgZmFpcmx5IGNvbW1vbiBjYXNlLgotICAgIEhhc2hNYXA8U3RhY2tTbG90VmFsdWUq
LCBUeXBlPiBzdGFja1ZhcmlhYmxlOworICAgIEhhc2hNYXA8U3RhY2tTbG90KiwgVHlwZT4gc3Rh
Y2tWYXJpYWJsZTsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKLSAg
ICAgICAgaWYgKFN0YWNrU2xvdFZhbHVlKiBzdGFjayA9IHZhbHVlLT5hczxTdGFja1Nsb3RWYWx1
ZT4oKSkgeworICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+YXM8
U2xvdEJhc2VWYWx1ZT4oKSkgeworICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHNsb3RC
YXNlLT5zbG90KCk7CiAgICAgICAgICAgICBpZiAoc3RhY2stPmtpbmQoKSA9PSBTdGFja1Nsb3RL
aW5kOjpBbm9ueW1vdXMpCiAgICAgICAgICAgICAgICAgc3RhY2tWYXJpYWJsZS5hZGQoc3RhY2ss
IFZvaWQpOwogICAgICAgICB9CkBAIC0xNDEsMTQgKzE0MywxNiBAQCBib29sIGZpeFNTQShQcm9j
ZWR1cmUmIHByb2MpCiAgICAgLy8gU3RvcmUgb24gYW5vbnltb3VzIHZhcmlhYmxlcy4KICAgICBm
b3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKICAgICAgICAgYXV0byByZWplY3Qg
PSBbJl0gKFZhbHVlKiB2YWx1ZSkgewotICAgICAgICAgICAgaWYgKFN0YWNrU2xvdFZhbHVlKiBz
dGFjayA9IHZhbHVlLT5hczxTdGFja1Nsb3RWYWx1ZT4oKSkKLSAgICAgICAgICAgICAgICBzdGFj
a1ZhcmlhYmxlLnJlbW92ZShzdGFjayk7CisgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSog
c2xvdEJhc2UgPSB2YWx1ZS0+YXM8U2xvdEJhc2VWYWx1ZT4oKSkKKyAgICAgICAgICAgICAgICBz
dGFja1ZhcmlhYmxlLnJlbW92ZShzbG90QmFzZS0+c2xvdCgpKTsKICAgICAgICAgfTsKICAgICAg
ICAgCiAgICAgICAgIGF1dG8gaGFuZGxlQWNjZXNzID0gWyZdIChWYWx1ZSogYWNjZXNzLCBUeXBl
IHR5cGUpIHsKLSAgICAgICAgICAgIFN0YWNrU2xvdFZhbHVlKiBzdGFjayA9IGFjY2Vzcy0+bGFz
dENoaWxkKCktPmFzPFN0YWNrU2xvdFZhbHVlPigpOwotICAgICAgICAgICAgaWYgKCFzdGFjaykK
KyAgICAgICAgICAgIFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gYWNjZXNzLT5sYXN0Q2hpbGQo
KS0+YXM8U2xvdEJhc2VWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmICghc2xvdEJhc2UpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gc2xv
dEJhc2UtPnNsb3QoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKS0+b2Zmc2V0KCkpIHsKICAgICAgICAgICAgICAgICBzdGFja1ZhcmlhYmxl
LnJlbW92ZShzdGFjayk7CkBAIC0xODQsMTYgKzE4OCwxNCBAQCBib29sIGZpeFNTQShQcm9jZWR1
cmUmIHByb2MpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBWZWN0b3I8U3RhY2tTbG90VmFsdWUq
PiBkZWFkVmFsdWVzOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBkZWFkU2xvdHM7CiAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IHN0YWNrVmFyaWFibGUpIHsKICAgICAgICAgaWYgKGVudHJ5LnZhbHVl
ID09IFZvaWQpCi0gICAgICAgICAgICBkZWFkVmFsdWVzLmFwcGVuZChlbnRyeS5rZXkpOworICAg
ICAgICAgICAgZGVhZFNsb3RzLmFwcGVuZChlbnRyeS5rZXkpOwogICAgIH0KIAotICAgIGZvciAo
U3RhY2tTbG90VmFsdWUqIGRlYWRWYWx1ZSA6IGRlYWRWYWx1ZXMpIHsKLSAgICAgICAgZGVhZFZh
bHVlLT5yZXBsYWNlV2l0aE5vcCgpOwotICAgICAgICBzdGFja1ZhcmlhYmxlLnJlbW92ZShkZWFk
VmFsdWUpOwotICAgIH0KKyAgICBmb3IgKFN0YWNrU2xvdCogZGVhZFNsb3QgOiBkZWFkU2xvdHMp
CisgICAgICAgIHN0YWNrVmFyaWFibGUucmVtb3ZlKGRlYWRTbG90KTsKIAogICAgIGlmIChzdGFj
a1ZhcmlhYmxlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjA0LDExICsy
MDYsMTEgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogICAgIFNTQUNhbGN1bGF0b3Ig
c3NhKHByb2MpOwogCiAgICAgLy8gQ3JlYXRlIGEgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgZm9y
IGV2ZXJ5IHN0YWNrIHZhcmlhYmxlLgotICAgIFZlY3RvcjxTdGFja1Nsb3RWYWx1ZSo+IHZhcmlh
YmxlVG9TdGFjazsKLSAgICBIYXNoTWFwPFN0YWNrU2xvdFZhbHVlKiwgU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqPiBzdGFja1RvVmFyaWFibGU7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHZhcmlh
YmxlVG9TdGFjazsKKyAgICBIYXNoTWFwPFN0YWNrU2xvdCosIFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlKj4gc3RhY2tUb1ZhcmlhYmxlOwogCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHN0YWNrVmFy
aWFibGUpIHsKLSAgICAgICAgU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gZW50cnkua2V5OworICAg
ICAgICBTdGFja1Nsb3QqIHN0YWNrID0gZW50cnkua2V5OwogICAgICAgICBTU0FDYWxjdWxhdG9y
OjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2EubmV3VmFyaWFibGUoKTsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQodmFyaWFibGUtPmluZGV4KCkgPT0gdmFyaWFibGVUb1N0YWNrLnNpemUoKSk7CiAg
ICAgICAgIHZhcmlhYmxlVG9TdGFjay5hcHBlbmQoc3RhY2spOwpAQCAtMjIxLDEwICsyMjMsMTIg
QEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgaWYgKHZhbHVlLT5v
cGNvZGUoKSAhPSBTdG9yZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAg
ICAgU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gdmFsdWUtPmNoaWxkKDEpLT5hczxTdGFja1Nsb3RW
YWx1ZT4oKTsKLSAgICAgICAgICAgIGlmICghc3RhY2spCisgICAgICAgICAgICBTbG90QmFzZVZh
bHVlKiBzbG90QmFzZSA9IHZhbHVlLT5jaGlsZCgxKS0+YXM8U2xvdEJhc2VWYWx1ZT4oKTsKKyAg
ICAgICAgICAgIGlmICghc2xvdEJhc2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKKyAg
ICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSBzbG90QmFzZS0+c2xvdCgpOworCiAgICAgICAg
ICAgICBpZiAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gc3RhY2tUb1Zhcmlh
YmxlLmdldChzdGFjaykpCiAgICAgICAgICAgICAgICAgc3NhLm5ld0RlZih2YXJpYWJsZSwgYmxv
Y2ssIHZhbHVlLT5jaGlsZCgwKSk7CiAgICAgICAgIH0KQEAgLTIzMyw4ICsyMzcsOCBAQCBib29s
IGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAgICAgLy8gRGVjaWRlIHdoZXJlIFBoaXMgYXJlIHRv
IGJlIGluc2VydGVkLiBUaGlzIGNyZWF0ZXMgdGhlbSBidXQgZG9lcyBub3QgaW5zZXJ0IHRoZW0u
CiAgICAgc3NhLmNvbXB1dGVQaGlzKAogICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IFZhbHVlKiB7Ci0gICAgICAgICAg
ICBTdGFja1Nsb3RWYWx1ZSogc3RhY2sgPSB2YXJpYWJsZVRvU3RhY2tbdmFyaWFibGUtPmluZGV4
KCldOwotICAgICAgICAgICAgVmFsdWUqIHBoaSA9IHByb2MuYWRkPFZhbHVlPihQaGksIHN0YWNr
VmFyaWFibGUuZ2V0KHN0YWNrKSwgc3RhY2stPm9yaWdpbigpKTsKKyAgICAgICAgICAgIFN0YWNr
U2xvdCogc3RhY2sgPSB2YXJpYWJsZVRvU3RhY2tbdmFyaWFibGUtPmluZGV4KCldOworICAgICAg
ICAgICAgVmFsdWUqIHBoaSA9IHByb2MuYWRkPFZhbHVlPihQaGksIHN0YWNrVmFyaWFibGUuZ2V0
KHN0YWNrKSwgYmxvY2stPmF0KDApLT5vcmlnaW4oKSk7CiAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAgICAgICJBZGRp
bmcgUGhpIGZvciAiLCBwb2ludGVyRHVtcChzdGFjayksICIgYXQgIiwgKmJsb2NrLCAiOiAiLApA
QCAtMjQ1LDEyICsyNDksMTIgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAg
Ly8gTm93IHBlcmZvcm0gdGhlIGNvbnZlcnNpb24uCiAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlv
blNldChwcm9jKTsKLSAgICBIYXNoTWFwPFN0YWNrU2xvdFZhbHVlKiwgVmFsdWUqPiBtYXBwaW5n
OworICAgIEhhc2hNYXA8U3RhY2tTbG90KiwgVmFsdWUqPiBtYXBwaW5nOwogICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgewogICAgICAgICBtYXBw
aW5nLmNsZWFyKCk7CiAKICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHN0YWNrVG9WYXJpYWJs
ZSkgewotICAgICAgICAgICAgU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gZW50cnkua2V5OworICAg
ICAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IGVudHJ5LmtleTsKICAgICAgICAgICAgIFNTQUNh
bGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IGVudHJ5LnZhbHVlOwogCiAgICAgICAgICAg
ICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYS5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywg
dmFyaWFibGUpOwpAQCAtMjU5LDcgKzI2Myw3IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJv
YykKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYg
OiBzc2EucGhpc0ZvckJsb2NrKGJsb2NrKSkgewotICAgICAgICAgICAgU3RhY2tTbG90VmFsdWUq
IHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07Cisg
ICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3BoaURlZi0+dmFy
aWFibGUoKS0+aW5kZXgoKV07CiAKICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRWYWx1
ZSgwLCBwaGlEZWYtPnZhbHVlKCkpOwogICAgICAgICAgICAgbWFwcGluZy5zZXQoc3RhY2ssIHBo
aURlZi0+dmFsdWUoKSk7CkBAIC0yNzEsNyArMjc1LDggQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJl
JiBwcm9jKQogCiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewogICAgICAg
ICAgICAgY2FzZSBMb2FkOiB7Ci0gICAgICAgICAgICAgICAgaWYgKFN0YWNrU2xvdFZhbHVlKiBz
dGFjayA9IHZhbHVlLT5jaGlsZCgwKS0+YXM8U3RhY2tTbG90VmFsdWU+KCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+Y2hpbGQoMCktPmFz
PFNsb3RCYXNlVmFsdWU+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFj
ayA9IHNsb3RCYXNlLT5zbG90KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogcmVw
bGFjZW1lbnQgPSBtYXBwaW5nLmdldChzdGFjaykpCiAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyZXBsYWNlbWVudCk7CiAgICAgICAgICAgICAgICAg
fQpAQCAtMjc5LDcgKzI4NCw4IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJvYykKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU3RvcmU6IHsKLSAg
ICAgICAgICAgICAgICBpZiAoU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gdmFsdWUtPmNoaWxkKDEp
LT5hczxTdGFja1Nsb3RWYWx1ZT4oKSkgeworICAgICAgICAgICAgICAgIGlmIChTbG90QmFzZVZh
bHVlKiBzbG90QmFzZSA9IHZhbHVlLT5jaGlsZCgxKS0+YXM8U2xvdEJhc2VWYWx1ZT4oKSkgewor
ICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gc2xvdEJhc2UtPnNsb3QoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrVG9WYXJpYWJsZS5jb250YWlucyhzdGFjaykp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcuc2V0KHN0YWNrLCB2YWx1ZS0+Y2hp
bGQoMCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7
CkBAIC0yOTksNyArMzA1LDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogICAgICAg
ICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYS5waGlzRm9yQmxvY2so
c3VjY2Vzc29yQmxvY2spKSB7CiAgICAgICAgICAgICAgICAgVmFsdWUqIHBoaSA9IHBoaURlZi0+
dmFsdWUoKTsKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFi
bGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7Ci0gICAgICAgICAgICAgICAgU3RhY2tTbG90VmFsdWUq
IHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAg
ICAgICBTdGFja1Nsb3QqIHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3ZhcmlhYmxlLT5pbmRleCgp
XTsKIAogICAgICAgICAgICAgICAgIFZhbHVlKiBtYXBwZWRWYWx1ZSA9IG1hcHBpbmcuZ2V0KHN0
YWNrKTsKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewpAQCAtMzE5LDEwICszMjUsNiBA
QCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKICAgICB9CiAKLSAgICAvLyBGaW5hbGx5LCBraWxsIHRoZSBzdGFjayBzbG90
cy4KLSAgICBmb3IgKFN0YWNrU2xvdFZhbHVlKiBzdGFjayA6IHZhcmlhYmxlVG9TdGFjaykKLSAg
ICAgICAgc3RhY2stPnJlcGxhY2VXaXRoTm9wKCk7Ci0KICAgICBpZiAodmVyYm9zZSkgewogICAg
ICAgICBkYXRhTG9nKCJCMyBhZnRlciBTU0EgY29udmVyc2lvbjpcbiIpOwogICAgICAgICBkYXRh
TG9nKHByb2MpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHJldmlzaW9uIDE5NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw4IEBACiAjaW5jbHVkZSAiQjNQ
aGFzZVNjb3BlLmgiCiAjaW5jbHVkZSAiQjNQaGlDaGlsZHJlbi5oIgogI2luY2x1ZGUgIkIzUHJv
Y2VkdXJlLmgiCi0jaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU2xv
dEJhc2VWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQjNVcHNp
bG9uVmFsdWUuaCIKICNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgogI2luY2x1ZGUgIkIzVmFsdWVJ
bmxpbmVzLmgiCkBAIC05MiwxNiArOTMsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJQaGkgdG1wIGZvciAiLCAqdmFsdWUsICI6ICIsIG1fcGhpVG9UbXBbdmFsdWVd
LCAiXG4iKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhc2UgQjM6OlN0YWNrU2xvdDogewotICAgICAgICAgICAgICAgIFN0YWNrU2xvdFZhbHVl
KiBzdGFja1Nsb3RWYWx1ZSA9IHZhbHVlLT5hczxTdGFja1Nsb3RWYWx1ZT4oKTsKLSAgICAgICAg
ICAgICAgICBtX3N0YWNrVG9TdGFjay5hZGQoc3RhY2tTbG90VmFsdWUsIG1fY29kZS5hZGRTdGFj
a1Nsb3Qoc3RhY2tTbG90VmFsdWUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBmb3IgKEIzOjpTdGFja1Nsb3QqIHN0YWNr
IDogbV9wcm9jZWR1cmUuc3RhY2tTbG90cygpKQorICAgICAgICAgICAgbV9zdGFja1RvU3RhY2su
YWRkKHN0YWNrLCBtX2NvZGUuYWRkU3RhY2tTbG90KHN0YWNrKSk7CisKICAgICAgICAgLy8gRmln
dXJlIG91dCB3aGljaCBibG9ja3MgYXJlIG5vdCByYXJlLgogICAgICAgICBtX2Zhc3RXb3JrbGlz
dC5wdXNoKG1fcHJvY2VkdXJlWzBdKTsKICAgICAgICAgd2hpbGUgKEIzOjpCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZmFzdFdvcmtsaXN0LnBvcCgpKSB7CkBAIC00MzMsOCArNDMyLDggQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBGcmFtZVBvaW50ZXI6CiAgICAgICAgICAgICByZXR1cm4gQXJnOjph
ZGRyKFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIG9mZnNldCk7CiAKLSAgICAgICAg
Y2FzZSBCMzo6U3RhY2tTbG90OgotICAgICAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2sobV9zdGFj
a1RvU3RhY2suZ2V0KGFkZHJlc3MtPmFzPFN0YWNrU2xvdFZhbHVlPigpKSwgb2Zmc2V0KTsKKyAg
ICAgICAgY2FzZSBTbG90QmFzZToKKyAgICAgICAgICAgIHJldHVybiBBcmc6OnN0YWNrKG1fc3Rh
Y2tUb1N0YWNrLmdldChhZGRyZXNzLT5hczxTbG90QmFzZVZhbHVlPigpLT5zbG90KCkpLCBvZmZz
ZXQpOwogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2soKTsK
QEAgLTE5MTQsMTAgKzE5MTMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIGNhc2UgQjM6OlN0YWNrU2xvdDogeworICAgICAgICBjYXNlIFNs
b3RCYXNlOiB7CiAgICAgICAgICAgICBhcHBlbmQoCiAgICAgICAgICAgICAgICAgTGVhLAotICAg
ICAgICAgICAgICAgIEFyZzo6c3RhY2sobV9zdGFja1RvU3RhY2suZ2V0KG1fdmFsdWUtPmFzPFN0
YWNrU2xvdFZhbHVlPigpKSksCisgICAgICAgICAgICAgICAgQXJnOjpzdGFjayhtX3N0YWNrVG9T
dGFjay5nZXQobV92YWx1ZS0+YXM8U2xvdEJhc2VWYWx1ZT4oKS0+c2xvdCgpKSksCiAgICAgICAg
ICAgICAgICAgdG1wKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtMjI4NCw3ICsyMjgzLDcgQEAgcHJpdmF0ZToKICAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBt
X3ZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCBtdXN0IGhhdmUgYSBUbXAgaW4g
QWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRoIGEgbm9uLW51bGwgVG1wIGlzICJwaW5uZWQi
LgogICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMg
aXRzIG93biBUbXAuCiAgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2ssIEFpcjo6QmFzaWNCbG9j
ayo+IG1fYmxvY2tUb0Jsb2NrOwotICAgIEhhc2hNYXA8U3RhY2tTbG90VmFsdWUqLCBBaXI6OlN0
YWNrU2xvdCo+IG1fc3RhY2tUb1N0YWNrOworICAgIEhhc2hNYXA8QjM6OlN0YWNrU2xvdCosIEFp
cjo6U3RhY2tTbG90Kj4gbV9zdGFja1RvU3RhY2s7CiAKICAgICBVc2VDb3VudHMgbV91c2VDb3Vu
dHM7CiAgICAgUGhpQ2hpbGRyZW4gbV9waGlDaGlsZHJlbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMTk1NTg0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsOCArOTUsOCBAQCB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3BjCiAgICAgY2FzZSBDb25zdEZs
b2F0OgogICAgICAgICBvdXQucHJpbnQoIkNvbnN0RmxvYXQiKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgU3RhY2tTbG90OgotICAgICAgICBvdXQucHJpbnQoIlN0YWNrU2xvdCIpOworICAg
IGNhc2UgU2xvdEJhc2U6CisgICAgICAgIG91dC5wcmludCgiU2xvdEJhc2UiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgQXJndW1lbnRSZWc6CiAgICAgICAgIG91dC5wcmludCgiQXJndW1l
bnRSZWciKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAx
OTU1ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsNyBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIC8vIFRo
ZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUg
dG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2FyZGxlc3Mgb2YKICAgICAvLyB3aGVyZSBpbiBjb250cm9s
IGZsb3cgeW91IHB1dCBpdC4gRWFjaCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRz
IGEgZGlzam9pbnQgcmFuZ2Ugb2YKICAgICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tT
bG90VmFsdWUgY2xhc3MuCi0gICAgU3RhY2tTbG90LAorICAgIFNsb3RCYXNlLAogCiAgICAgLy8g
VGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGlu
ZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCiAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGVyZSBp
biBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21waWxlciB0YWtlcyBjYXJlIHRv
IGVuc3VyZSB0aGF0IHdlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5jcHAJKHJldmlzaW9uIDE5NTU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJC
M0RhdGFTZWN0aW9uLmgiCiAjaW5jbHVkZSAiQjNEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiQjNP
cGFxdWVCeXByb2R1Y3RzLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKQEAgLTkx
LDYgKzkyLDIwIEBAIHZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3IKICAg
ICB9CiB9CiAKK1N0YWNrU2xvdCogUHJvY2VkdXJlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0
ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBhZGRTdGFj
a1Nsb3RJbmRleCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+IHNsb3QobmV3IFN0
YWNrU2xvdChpbmRleCwgYnl0ZVNpemUsIGtpbmQpKTsKKyAgICBTdGFja1Nsb3QqIHJlc3VsdCA9
IHNsb3QuZ2V0KCk7CisgICAgbV9zdGFja1Nsb3RzW2luZGV4XSA9IFdURk1vdmUoc2xvdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RhY2tTbG90KiBQcm9jZWR1cmU6OmFkZEFub255bW91
c1N0YWNrU2xvdChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIGFkZFN0YWNrU2xvdChzaXplb2ZU
eXBlKHR5cGUpLCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworfQorCiBWYWx1ZSogUHJvY2Vk
dXJlOjpjbG9uZShWYWx1ZSogdmFsdWUpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlPiBj
bG9uZSh2YWx1ZS0+Y2xvbmVJbXBsKCkpOwpAQCAtMTkyLDYgKzIwNywxMSBAQCB2b2lkIFByb2Nl
ZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAgICAgICAgIH0KICAgICAgICAgZGF0YUxv
ZygiICAgICIsIGRlZXBEdW1wKCp0aGlzLCB2YWx1ZSksICJcbiIpOwogICAgIH0KKyAgICBpZiAo
c3RhY2tTbG90cygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNsb3RzOlxu
Iik7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tTbG90cygpKQorICAgICAg
ICAgICAgb3V0LnByaW50KCIgICAgIiwgcG9pbnRlckR1bXAoc2xvdCksICI6ICIsIGRlZXBEdW1w
KHNsb3QpLCAiXG4iKTsKKyAgICB9CiAgICAgaWYgKG1fYnlwcm9kdWN0cy0+Y291bnQoKSkKICAg
ICAgICAgb3V0LnByaW50KCptX2J5cHJvZHVjdHMpOwogfQpAQCAtMjA2LDYgKzIyNiwxNCBAQCBW
ZWN0b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6YmxvY2tzSW5QCiAgICAgcmV0dXJuIEIzOjpi
bG9ja3NJblBvc3RPcmRlcihhdCgwKSk7CiB9CiAKK3ZvaWQgUHJvY2VkdXJlOjpkZWxldGVTdGFj
a1Nsb3QoU3RhY2tTbG90KiBzdGFja1Nsb3QpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGFj
a1Nsb3RzW3N0YWNrU2xvdC0+aW5kZXgoKV0uZ2V0KCkgPT0gc3RhY2tTbG90KTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghc3RhY2tTbG90LT5pc0xvY2tlZCgpKTsKKyAgICBtX3N0YWNrU2xvdEluZGV4
RnJlZUxpc3QuYXBwZW5kKHN0YWNrU2xvdC0+aW5kZXgoKSk7CisgICAgbV9zdGFja1Nsb3RzW3N0
YWNrU2xvdC0+aW5kZXgoKV0gPSBudWxscHRyOworfQorCiB2b2lkIFByb2NlZHVyZTo6ZGVsZXRl
VmFsdWUoVmFsdWUqIHZhbHVlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFsdWVzW3ZhbHVl
LT5pbmRleCgpXS5nZXQoKSA9PSB2YWx1ZSk7CkBAIC0yODIsNiArMzEwLDE3IEBAIGNvbnN0IFJl
Z2lzdGVyQXRPZmZzZXRMaXN0JiBQcm9jZWR1cmU6OmMKICAgICByZXR1cm4gY29kZSgpLmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKTsKIH0KIAorc2l6ZV90IFByb2NlZHVyZTo6YWRkU3RhY2tTbG90SW5k
ZXgoKQoreworICAgIGlmIChtX3N0YWNrU2xvdEluZGV4RnJlZUxpc3QuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHNpemVfdCBpbmRleCA9IG1fc3RhY2tTbG90cy5zaXplKCk7CisgICAgICAgIG1fc3Rh
Y2tTbG90cy5hcHBlbmQobnVsbHB0cik7CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIG1fc3RhY2tTbG90SW5kZXhGcmVlTGlzdC50YWtlTGFzdCgpOworfQor
CiBzaXplX3QgUHJvY2VkdXJlOjphZGRWYWx1ZUluZGV4KCkKIHsKICAgICBpZiAobV92YWx1ZUlu
ZGV4RnJlZUxpc3QuaXNFbXB0eSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuaAkocmV2aXNpb24gMTk1NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1
ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVk
ZSAiQjNTdGFja1Nsb3RLaW5kLmgiCiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSAiQjNW
YWx1ZUtleS5oIgogI2luY2x1ZGUgIlB1cmVOYU4uaCIKQEAgLTQ5LDYgKzUwLDcgQEAgY2xhc3Mg
QmFzaWNCbG9jazsKIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgQ0ZHOwogY2xhc3Mg
RG9taW5hdG9yczsKK2NsYXNzIFN0YWNrU2xvdDsKIGNsYXNzIFZhbHVlOwogCiBuYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQpAQCAtOTAsNiArOTIsOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBibG9ja3MuYXBwZW5kKGJsb2NrKTsKICAgICAgICAgc2V0QmxvY2tPcmRlckltcGwoYmxvY2tz
KTsKICAgICB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3QqIGFkZFN0YWNrU2xv
dCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgU3RhY2tTbG90KiBhZGRBbm9ueW1vdXNTdGFja1Nsb3QoVHlwZSk7CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgVmFs
dWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKQEAgLTE3Miw2ICsxNzcsNzUgQEAgcHVibGljOgog
ICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIFZlY3RvcjxC
YXNpY0Jsb2NrKj4gYmxvY2tzSW5Qb3N0T3JkZXIoKTsKIAorICAgIGNsYXNzIFN0YWNrU2xvdHND
b2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uKGNv
bnN0IFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgICAgIDogbV9wcm9jKHByb2MpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3Byb2MubV9zdGFja1Nsb3RzLnNpemUoKTsgfQorICAgICAgICBTdGFja1Nsb3QqIGF0KHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Byb2MubV9zdGFja1Nsb3RzW2luZGV4XS5nZXQo
KTsgfQorICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9j
b2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0YWNr
U2xvdHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAg
ICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoZmluZE5leHQoaW5kZXgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOworICAgICAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgdW5z
aWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbV9jb2xsZWN0aW9uLT5zaXplKCkgJiYgIW1fY29sbGVjdGlv
bi0+YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICAgICAgaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIGNvbnN0IFByb2NlZHVyZSYgbV9wcm9jOworICAgIH07CisKKyAgICBT
dGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFja1Nsb3RzKCkgY29uc3QgeyByZXR1cm4gU3RhY2tTbG90
c0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKKyAgICB2b2lkIGRlbGV0ZVN0YWNrU2xvdChTdGFja1Ns
b3QqKTsKKyAgICAKICAgICBjbGFzcyBWYWx1ZXNDb2xsZWN0aW9uIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIFZhbHVlc0NvbGxlY3Rpb24oY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUpCkBAIC0y
OTIsMTAgKzM2NiwxMyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc2V0QmxvY2tPcmRlcklt
cGwoVmVjdG9yPEJhc2ljQmxvY2sqPiYpOwogCisgICAgc2l6ZV90IGFkZFN0YWNrU2xvdEluZGV4
KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGFkZFZhbHVlSW5kZXgoKTsKLSAgICAK
KworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90Pj4gbV9zdGFja1Nsb3RzOwog
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKKyAgICBWZWN0b3I8c2l6ZV90
PiBtX3N0YWNrU2xvdEluZGV4RnJlZUxpc3Q7CiAgICAgVmVjdG9yPHNpemVfdD4gbV92YWx1ZUlu
ZGV4RnJlZUxpc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENGRz4gbV9jZmc7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPERvbWluYXRvcnM+IG1fZG9taW5hdG9yczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDE5NTU4NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIkIzUGhpQ2hpbGRyZW4uaCIKICNpbmNs
dWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1B1cmVDU0UuaCIKKyNpbmNs
dWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdC5oIgogI2luY2x1
ZGUgIkIzVXBzaWxvblZhbHVlLmgiCiAjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKICNpbmNsdWRl
ICJCM1ZhbHVlS2V5SW5saW5lcy5oIgpAQCAtMjA3NiwxNCArMjA3OCwxOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgSW5kZXhTZXQ8U3Rh
Y2tTbG90PiBsaXZlU3RhY2tTbG90czsKKyAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIHNpemVfdCBzb3VyY2VJbmRleCA9IDA7
CiAgICAgICAgICAgICBzaXplX3QgdGFyZ2V0SW5kZXggPSAwOwogICAgICAgICAgICAgd2hpbGUg
KHNvdXJjZUluZGV4IDwgYmxvY2stPnNpemUoKSkgewogICAgICAgICAgICAgICAgIFZhbHVlKiB2
YWx1ZSA9IGJsb2NrLT5hdChzb3VyY2VJbmRleCsrKTsKLSAgICAgICAgICAgICAgICBpZiAod29y
a2xpc3Quc2F3KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBpZiAod29ya2xpc3Quc2F3KHZhbHVl
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2
YWx1ZS0+YXM8U2xvdEJhc2VWYWx1ZT4oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVT
dGFja1Nsb3RzLmFkZChzbG90QmFzZS0+c2xvdCgpKTsKICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPmF0KHRhcmdldEluZGV4KyspID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmRlbGV0
ZVZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IC8vIEl0J3Mgbm90IGVudGlyZWx5IGNsZWFyIGlmIHRoaXMgaXMgbmVlZGVkLiBJIHRoaW5rIGl0
IG1ha2VzIHNlbnNlIHRvIGhhdmUKQEAgLTIwOTUsNiArMjEwMSwxMiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYmxvY2stPnZhbHVlcygpLnJlc2l6ZSh0YXJnZXRJbmRl
eCk7CiAgICAgICAgIH0KKworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IG1fcHJvYy5z
dGFja1Nsb3RzKCkpIHsKKyAgICAgICAgICAgIGlmIChzbG90LT5pc0xvY2tlZCgpIHx8IGxpdmVT
dGFja1Nsb3RzLmNvbnRhaW5zKHNsb3QpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgbV9wcm9jLmRlbGV0ZVN0YWNrU2xvdChzbG90KTsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIHZvaWQgc2ltcGxpZnlTU0EoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU2xvdEJhc2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU2xvdEJhc2VWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NTU4NCkJKGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwOjE5NTU4NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Nsb3RCYXNlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK1N0YWNrU2xvdFZhbHVlOjp+U3RhY2tTbG90VmFsdWUoKQoreworfQorCit2b2lkIFN0YWNr
U2xvdFZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChjb21tYSwgImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6
ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisKK1ZhbHVlKiBTdGFja1Nsb3RWYWx1ZTo6Y2xv
bmVJbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IFN0YWNrU2xvdFZhbHVlKCp0aGlzKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Nsb3RCYXNlVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwyNCArMjQsMjYgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
U2xvdEJhc2VWYWx1ZS5oIgogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzU3Rh
Y2tTbG90LmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi1TdGFja1Nsb3RW
YWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK1Nsb3RCYXNlVmFsdWU6On5TbG90QmFzZVZhbHVlKCkK
IHsKIH0KIAotdm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21t
YSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3ZvaWQgU2xvdEJhc2VWYWx1ZTo6ZHVtcE1ldGEo
Q29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQu
cHJpbnQoY29tbWEsICJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIsIGtpbmQgPSAiLCBtX2tp
bmQpOworICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAobV9zbG90KSk7CiB9CiAKLVZh
bHVlKiBTdGFja1Nsb3RWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKK1ZhbHVlKiBTbG90QmFzZVZh
bHVlOjpjbG9uZUltcGwoKSBjb25zdAogewotICAgIHJldHVybiBuZXcgU3RhY2tTbG90VmFsdWUo
KnRoaXMpOworICAgIHJldHVybiBuZXcgU2xvdEJhc2VWYWx1ZSgqdGhpcyk7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xv
dEJhc2VWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Ns
b3RCYXNlVmFsdWUuaAkocmV2aXNpb24gMTk1NTg0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oOjE5NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Nsb3RCYXNlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNl
IEFpciB7CitjbGFzcyBTdGFja1Nsb3Q7Cit9IC8vIG5hbWVzcGFjZSBBaXIKKworY2xhc3MgSlNf
RVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgor
ICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09
IFN0YWNrU2xvdDsgfQorCisgICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBi
eXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIC8vIFRoaXMgZ2V0cyBhc3Np
Z25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxseSBwaW4g
c3RhY2sgc2xvdHMuIFVzZSB0aGUKKyAgICAvLyBzZXQgbWV0aG9kIHRvIGRvIHRoYXQuCisgICAg
aW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0K
KworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIG1lYW5pbmdsZXNzIHVubGVzcyB0aGUgc3RhY2sg
c2xvdCBpcyBMb2NrZWQuCisgICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUp
CisgICAgeworICAgICAgICBtX29mZnNldEZyb21GUCA9IHZhbHVlOworICAgIH0KKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworICAgIFZhbHVlKiBjbG9uZUltcGwoKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CisgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKKworICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmln
aW4gb3JpZ2luLCB1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBTdGFja1Nsb3QsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICAgICAsIG1fa2lu
ZChraW5kKQorICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAg
IHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgaW50
cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdFZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Nsb3RCYXNlVmFsdWUuaAkod29y
a2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMywzOCArMjMsMjQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICov
CiAKLSNpZm5kZWYgQjNTdGFja1Nsb3RWYWx1ZV9oCi0jZGVmaW5lIEIzU3RhY2tTbG90VmFsdWVf
aAorI2lmbmRlZiBCM1Nsb3RCYXNlVmFsdWVfaAorI2RlZmluZSBCM1Nsb3RCYXNlVmFsdWVfaAog
CiAjaWYgRU5BQkxFKEIzX0pJVCkKIAotI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgogI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKLW5h
bWVzcGFjZSBBaXIgewogY2xhc3MgU3RhY2tTbG90OwotfSAvLyBuYW1lc3BhY2UgQWlyCiAKLWNs
YXNzIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrU2xvdFZhbHVlIDogcHVibGljIFZhbHVlIHsKK2Ns
YXNzIEpTX0VYUE9SVF9QUklWQVRFIFNsb3RCYXNlVmFsdWUgOiBwdWJsaWMgVmFsdWUgewogcHVi
bGljOgotICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IFN0YWNrU2xvdDsgfQorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29k
ZSkgeyByZXR1cm4gb3Bjb2RlID09IFNsb3RCYXNlOyB9CiAKLSAgICB+U3RhY2tTbG90VmFsdWUo
KTsKKyAgICB+U2xvdEJhc2VWYWx1ZSgpOwogCi0gICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVTaXplOyB9Ci0gICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9Ci0KLSAgICAvLyBUaGlzIGdldHMgYXNzaWduZWQgYXQgdGhlIGVu
ZCBvZiBjb21waWxhdGlvbi4gQnV0LCB5b3UgY2FuIHRvdGFsbHkgcGluIHN0YWNrIHNsb3RzLiBV
c2UgdGhlCi0gICAgLy8gc2V0IG1ldGhvZCB0byBkbyB0aGF0LgotICAgIGludHB0cl90IG9mZnNl
dEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9Ci0KLSAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBpcyBtZWFuaW5nbGVzcyB1bmxlc3MgdGhlIHN0YWNrIHNsb3QgaXMgTG9ja2Vk
LgotICAgIHZvaWQgc2V0T2Zmc2V0RnJvbUZQKGludHB0cl90IHZhbHVlKQotICAgIHsKLSAgICAg
ICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKLSAgICB9CisgICAgU3RhY2tTbG90KiBzbG90KCkg
Y29uc3QgeyByZXR1cm4gbV9zbG90OyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBNZXRh
KENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC02MiwyNSAr
NDgsMjAgQEAgcHJvdGVjdGVkOgogICAgIFZhbHVlKiBjbG9uZUltcGwoKSBjb25zdCBvdmVycmlk
ZTsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CiAgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4
LCBPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQot
ICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBTdGFja1Nsb3QsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbikKLSAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQotICAgICAgICAs
IG1fa2luZChraW5kKQotICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAgU2xvdEJhc2VW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgU3RhY2tTbG90KiBzbG90KQorICAg
ICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBTbG90QmFzZSwgcG9pbnRlclR5cGUo
KSwgb3JpZ2luKQorICAgICAgICAsIG1fc2xvdChzbG90KQogICAgIHsKICAgICB9CiAKLSAgICB1
bnNpZ25lZCBtX2J5dGVTaXplOwotICAgIFN0YWNrU2xvdEtpbmQgbV9raW5kOwotICAgIGludHB0
cl90IG1fb2Zmc2V0RnJvbUZQOworICAgIFN0YWNrU2xvdCogbV9zbG90OwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQogCi0jZW5kaWYg
Ly8gQjNTdGFja1Nsb3RWYWx1ZV9oCisjZW5kaWYgLy8gQjNTbG90QmFzZVZhbHVlX2gKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdC5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K1N0YWNrU2xvdDo6flN0YWNrU2xvdCgpCit7Cit9CisKK3ZvaWQgU3RhY2tTbG90OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFjayIsIG1faW5kZXgp
OworfQorCit2b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwgb2Zmc2V0RnJv
bUZQID0gIiwgbV9vZmZzZXRGcm9tRlAsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworfQorCitTdGFj
a1Nsb3Q6OlN0YWNrU2xvdCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgYnl0ZVNpemUsIFN0YWNr
U2xvdEtpbmQga2luZCkKKyAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgLCBtX2J5dGVTaXplKGJ5
dGVTaXplKQorICAgICwgbV9raW5kKGtpbmQpCit7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2tTbG90LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3Rh
Y2tTbG90X2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7
CisKK25hbWVzcGFjZSBBaXIgeworY2xhc3MgU3RhY2tTbG90OworfSAvLyBuYW1lc3BhY2UgQWly
CisKK2NsYXNzIFN0YWNrU2xvdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhY2tTbG90
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIH5TdGFja1Ns
b3QoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6
ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQor
ICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gU3RhY2tTbG90S2lu
ZDo6TG9ja2VkOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
OyB9CisKKyAgICAvLyBUaGlzIGdldHMgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlv
bi4gQnV0LCB5b3UgY2FuIHRvdGFsbHkgcGluIHN0YWNrIHNsb3RzLiBVc2UgdGhlCisgICAgLy8g
c2V0IG1ldGhvZCB0byBkbyB0aGF0LgorICAgIHVuc2lnbmVkIG9mZnNldEZyb21GUCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBt
ZWFuaW5nbGVzcyB1bmxlc3MgdGhlIHN0YWNrIHNsb3QgaXMgTG9ja2VkLgorICAgIHZvaWQgc2V0
T2Zmc2V0RnJvbUZQKGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9vZmZzZXRGcm9t
RlAgPSB2YWx1ZTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgU3RhY2tTbG90KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBieXRlU2l6ZSwg
U3RhY2tTbG90S2luZCk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIHVuc2lnbmVkIG1f
Ynl0ZVNpemU7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZz
ZXRGcm9tRlAgeyAwIH07Cit9OworCitjbGFzcyBEZWVwU3RhY2tTbG90RHVtcCB7CitwdWJsaWM6
CisgICAgRGVlcFN0YWNrU2xvdER1bXAoY29uc3QgU3RhY2tTbG90KiBzbG90KQorICAgICAgICA6
IG1fc2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3QpCisgICAgICAgICAgICBtX3Ns
b3QtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgi
PG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFN0YWNrU2xvdCogbV9zbG90
OworfTsKKworaW5saW5lIERlZXBTdGFja1Nsb3REdW1wIGRlZXBEdW1wKGNvbnN0IFN0YWNrU2xv
dCogc2xvdCkKK3sKKyAgICByZXR1cm4gRGVlcFN0YWNrU2xvdER1bXAoc2xvdCk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzU3RhY2tTbG90X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMTk1NTg0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgot
Ci0jaWYgRU5BQkxFKEIzX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0K
LVN0YWNrU2xvdFZhbHVlOjp+U3RhY2tTbG90VmFsdWUoKQotewotfQotCi12b2lkIFN0YWNrU2xv
dFZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBj
b25zdAotewotICAgIG91dC5wcmludChjb21tYSwgImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwg
Iiwga2luZCA9ICIsIG1fa2luZCk7Ci19Ci0KLVZhbHVlKiBTdGFja1Nsb3RWYWx1ZTo6Y2xvbmVJ
bXBsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbmV3IFN0YWNrU2xvdFZhbHVlKCp0aGlzKTsKLX0K
LQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCi0KLSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCShyZXZp
c2lvbiAxOTU1ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEIzU3RhY2tTbG90VmFsdWVf
aAotI2RlZmluZSBCM1N0YWNrU2xvdFZhbHVlX2gKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLSNp
bmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKLSNpbmNsdWRlICJCM1ZhbHVlLmgiCi0KLW5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewotCi1uYW1lc3BhY2UgQWlyIHsKLWNsYXNzIFN0YWNr
U2xvdDsKLX0gLy8gbmFtZXNwYWNlIEFpcgotCi1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBTdGFj
a1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgYWNj
ZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9Ci0KLSAg
ICB+U3RhY2tTbG90VmFsdWUoKTsKLQotICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9ieXRlU2l6ZTsgfQotICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2luZDsgfQotCi0gICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2Yg
Y29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBzbG90cy4gVXNlIHRo
ZQotICAgIC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4KLSAgICBpbnRwdHJfdCBvZmZzZXRGcm9t
RlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQotCi0gICAgLy8gTm90ZSB0aGF0
IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlzIExvY2tlZC4KLSAg
ICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1f
b2Zmc2V0RnJvbUZQID0gdmFsdWU7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBkdW1w
TWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
VmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIGZyaWVu
ZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKLSAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwotCi0g
ICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVk
IGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENo
ZWNrZWRPcGNvZGUsIFN0YWNrU2xvdCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKQotICAgICAgICAs
IG1fYnl0ZVNpemUoYnl0ZVNpemUpCi0gICAgICAgICwgbV9raW5kKGtpbmQpCi0gICAgICAgICwg
bV9vZmZzZXRGcm9tRlAoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbV9ieXRlU2l6
ZTsKLSAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKLSAgICBpbnRwdHJfdCBtX29mZnNldEZyb21G
UDsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi0jZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKLQotI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAotCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxOTU1ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDggQEAKICNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJCM01lbW9yeVZh
bHVlLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdFZh
bHVlLmgiCisjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja1Ns
b3QuaCIKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTE1Miw3ICsxNTMsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0
ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0g
RmxvYXQsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgICAgIGNhc2UgU2xvdEJhc2U6CiAgICAgICAg
ICAgICBjYXNlIEZyYW1lUG9pbnRlcjoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUt
Pm51bUNoaWxkcmVuKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWUtPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwpAQCAt
NDEwLDEwICs0MTEsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZhbGlkYXRlU3RhY2tBY2Nlc3Mo
VmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKTsKLSAgICAgICAgU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gdmFs
dWUtPmxhc3RDaGlsZCgpLT5hczxTdGFja1Nsb3RWYWx1ZT4oKTsKLSAgICAgICAgaWYgKCFzdGFj
aykKKyAgICAgICAgU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+bGFzdENoaWxkKCkt
PmFzPFNsb3RCYXNlVmFsdWU+KCk7CisgICAgICAgIGlmICghc2xvdEJhc2UpCiAgICAgICAgICAg
ICByZXR1cm47CiAKKyAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHNsb3RCYXNlLT5zbG90KCk7
CisKICAgICAgICAgVkFMSURBVEUobWVtb3J5LT5vZmZzZXQoKSA+PSAwLCAoIkF0ICIsICp2YWx1
ZSkpOwogICAgICAgICBWQUxJREFURShtZW1vcnktPm9mZnNldCgpICsgbWVtb3J5LT5hY2Nlc3NC
eXRlU2l6ZSgpIDw9IHN0YWNrLT5ieXRlU2l6ZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NTU4NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsOCBAQAogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJC
M09yaWdpbkR1bXAuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKLSNpbmNsdWRl
ICJCM1N0YWNrU2xvdFZhbHVlLmgiCisjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCisjaW5j
bHVkZSAiQjNTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1
ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUtleUlubGluZXMuaCIKQEAg
LTM4Myw3ICszODQsNyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICBjYXNl
IENvbnN0NjQ6CiAgICAgY2FzZSBDb25zdERvdWJsZToKICAgICBjYXNlIENvbnN0RmxvYXQ6Ci0g
ICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgY2FzZSBTbG90QmFzZToKICAgICBjYXNlIEFyZ3VtZW50
UmVnOgogICAgIGNhc2UgRnJhbWVQb2ludGVyOgogICAgIGNhc2UgQWRkOgpAQCAtNTM1LDYgKzUz
NiwxMCBAQCBWYWx1ZUtleSBWYWx1ZTo6a2V5KCkgY29uc3QKICAgICAgICAgcmV0dXJuIFZhbHVl
S2V5KAogICAgICAgICAgICAgQXJndW1lbnRSZWcsIHR5cGUoKSwKICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDY0X3Q+KGFzPEFyZ3VtZW50UmVnVmFsdWU+KCktPmFyZ3VtZW50UmVnKCkuaW5k
ZXgoKSkpOworICAgIGNhc2UgU2xvdEJhc2U6CisgICAgICAgIHJldHVybiBWYWx1ZUtleSgKKyAg
ICAgICAgICAgIFNsb3RCYXNlLCB0eXBlKCksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ2
NF90PihhczxTbG90QmFzZVZhbHVlPigpLT5zbG90KCktPmluZGV4KCkpKTsKICAgICBkZWZhdWx0
OgogICAgICAgICByZXR1cm4gVmFsdWVLZXkoKTsKICAgICB9CkBAIC01NjUsNyArNTcwLDcgQEAg
dm9pZCBWYWx1ZTo6Y2hlY2tPcGNvZGUoT3Bjb2RlIG9wY29kZSkKICAgICBBU1NFUlQoIUNvbnRy
b2xWYWx1ZTo6YWNjZXB0cyhvcGNvZGUpKTsKICAgICBBU1NFUlQoIU1lbW9yeVZhbHVlOjphY2Nl
cHRzKG9wY29kZSkpOwogICAgIEFTU0VSVCghUGF0Y2hwb2ludFZhbHVlOjphY2NlcHRzKG9wY29k
ZSkpOwotICAgIEFTU0VSVCghU3RhY2tTbG90VmFsdWU6OmFjY2VwdHMob3Bjb2RlKSk7CisgICAg
QVNTRVJUKCFTbG90QmFzZVZhbHVlOjphY2NlcHRzKG9wY29kZSkpOwogICAgIEFTU0VSVCghVXBz
aWxvblZhbHVlOjphY2NlcHRzKG9wY29kZSkpOwogfQogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJM
RUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5jcHAJKHJldmlzaW9u
IDE5NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1Zh
bHVlLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNTbG90
QmFzZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1Zh
bHVlS2V5SW5saW5lcy5oIgogCkBAIC0xMDQsNiArMTA1LDggQEAgVmFsdWUqIFZhbHVlS2V5Ojpt
YXRlcmlhbGl6ZShQcm9jZWR1cmUmIAogICAgICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3RGbG9h
dFZhbHVlPihvcmlnaW4sIGZsb2F0VmFsdWUoKSk7CiAgICAgY2FzZSBBcmd1bWVudFJlZzoKICAg
ICAgICAgcmV0dXJuIHByb2MuYWRkPEFyZ3VtZW50UmVnVmFsdWU+KG9yaWdpbiwgUmVnOjpmcm9t
SW5kZXgoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKCkpKSk7CisgICAgY2FzZSBTbG90QmFz
ZToKKyAgICAgICAgcmV0dXJuIHByb2MuYWRkPFNsb3RCYXNlVmFsdWU+KG9yaWdpbiwgcHJvYy5z
dGFja1Nsb3RzKClbdmFsdWUoKV0pOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lv
biAxOTU1ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsOCBAQAogI2luY2x1ZGUgIkIzTWF0aEV4dHJhcy5oIgogI2lu
Y2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgotI2luY2x1
ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKyNpbmNsdWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKKyNp
bmNsdWRlICJCM1N0YWNrU2xvdC5oIgogI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zLmgiCiAjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVXBzaWxvblZh
bHVlLmgiCkBAIC00OTg3LDcgKzQ5ODgsOCBAQCB2b2lkIHRlc3RTdGFja1Nsb3QoKQogICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4oCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCi0gICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxTdGFja1Nsb3RWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEsIFN0YWNrU2xv
dEtpbmQ6OkFub255bW91cykpOworICAgICAgICByb290LT5hcHBlbmROZXc8U2xvdEJhc2VWYWx1
ZT4oCisgICAgICAgICAgICBwcm9jLCBPcmlnaW4oKSwgcHJvYy5hZGRTdGFja1Nsb3QoMSwgU3Rh
Y2tTbG90S2luZDo6QW5vbnltb3VzKSkpOwogCiAgICAgdm9pZCogc3RhY2tTbG90ID0gY29tcGls
ZUFuZFJ1bjx2b2lkKj4ocHJvYyk7CiAgICAgQ0hFQ0soc3RhY2tTbG90IDwgJnByb2MpOwpAQCAt
NTAxNSw4ICs1MDE3LDggQEAgdm9pZCB0ZXN0U3RvcmVMb2FkU3RhY2tTbG90KGludCB2YWx1ZSkK
ICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOwogCi0gICAgU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gcm9vdC0+YXBwZW5kTmV3PFN0YWNr
U2xvdFZhbHVlPigKLSAgICAgICAgcHJvYywgT3JpZ2luKCksIHNpemVvZihpbnQpLCBTdGFja1Ns
b3RLaW5kOjpBbm9ueW1vdXMpOworICAgIFNsb3RCYXNlVmFsdWUqIHN0YWNrID0gcm9vdC0+YXBw
ZW5kTmV3PFNsb3RCYXNlVmFsdWU+KAorICAgICAgICBwcm9jLCBPcmlnaW4oKSwgcHJvYy5hZGRT
dGFja1Nsb3Qoc2l6ZW9mKGludCksIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykpOwogCiAgICAg
cm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKICAgICAgICAgcHJvYywgU3RvcmUsIE9yaWdp
bigpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZp
c2lvbiAxOTU1ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lh
bC5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCi0jaW5jbHVkZSAiQjNTdGFja1Ns
b3RWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIApAQCAtNTIsMTcgKzUyLDE3IEBAIEJhc2lj
QmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWUKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1TdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3Rh
Y2tTbG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCitTdGFja1Nsb3QqIENvZGU6
OmFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBCMzo6
U3RhY2tTbG90KiBiM1Nsb3QpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xv
dChuZXcgU3RhY2tTbG90KGJ5dGVTaXplLCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCB2YWx1
ZSkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+IHNsb3QobmV3IFN0YWNrU2xvdChi
eXRlU2l6ZSwgbV9zdGFja1Nsb3RzLnNpemUoKSwga2luZCwgYjNTbG90KSk7CiAgICAgU3RhY2tT
bG90KiByZXN1bHQgPSBzbG90LmdldCgpOwogICAgIG1fc3RhY2tTbG90cy5hcHBlbmQoV1RGTW92
ZShzbG90KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotU3RhY2tTbG90KiBDb2RlOjphZGRT
dGFja1Nsb3QoU3RhY2tTbG90VmFsdWUqIHZhbHVlKQorU3RhY2tTbG90KiBDb2RlOjphZGRTdGFj
a1Nsb3QoQjM6OlN0YWNrU2xvdCogYjNTbG90KQogewotICAgIHJldHVybiBhZGRTdGFja1Nsb3Qo
dmFsdWUtPmJ5dGVTaXplKCksIHZhbHVlLT5raW5kKCksIHZhbHVlKTsKKyAgICByZXR1cm4gYWRk
U3RhY2tTbG90KGIzU2xvdC0+Ynl0ZVNpemUoKSwgYjNTbG90LT5raW5kKCksIGIzU2xvdCk7CiB9
CiAKIFNwZWNpYWwqIENvZGU6OmFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+IHNw
ZWNpYWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNp
b24gMTk1NTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDggKzY4LDggQEAgcHVibGljOgogICAgIC8vIG9mIGFueSBwcmlv
ciBzdGFjayBzbG90LiBJbiBmYWN0LCBhbGwgc3RhY2sgc2xvdHMgeW91IGNyZWF0ZSBpbiB0aGUg
ZnV0dXJlIHdpbGwgaGF2ZSBhbiBpbmRleAogICAgIC8vIHRoYXQgaXMgPj0gc3RhY2tTbG90cygp
LnNpemUoKS4KICAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCgK
LSAgICAgICAgdW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVl
KiA9IG51bGxwdHIpOwotICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KFN0YWNrU2xvdFZhbHVl
Kik7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBCMzo6U3RhY2tT
bG90KiA9IG51bGxwdHIpOworICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KEIzOjpTdGFja1Ns
b3QqKTsKIAogICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90
LmNwcAkocmV2aXNpb24gMTk1NTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTdGFja1Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNSArMjgsMTUgQEAKIAogI2lm
IEVOQUJMRShCM19KSVQpCiAKLSNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisjaW5jbHVk
ZSAiQjNTdGFja1Nsb3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgewogCiB2b2lkIFN0YWNrU2xvdDo6c2V0T2Zmc2V0RnJvbUZQKGludHB0cl90IHZh
bHVlKQogewogICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7Ci0gICAgaWYgKG1fdmFsdWUpCi0g
ICAgICAgIG1fdmFsdWUtPm1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgaWYgKG1fYjNTbG90
KQorICAgICAgICBtX2IzU2xvdC0+bV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKIH0KIAogdm9pZCBT
dGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTQ3LDE2ICs0NywxNiBA
QCB2b2lkIFN0YWNrU2xvdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiB2b2lkIFN0YWNrU2xv
dDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoImJ5
dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwgb2Zmc2V0RnJvbUZQID0gIiwgbV9vZmZzZXRGcm9t
RlAsICIsIGtpbmQgPSAiLCBtX2tpbmQpOwotICAgIGlmIChtX3ZhbHVlKQotICAgICAgICBvdXQu
cHJpbnQoIiwgdmFsdWUgPSAiLCAqbV92YWx1ZSk7CisgICAgaWYgKG1fYjNTbG90KQorICAgICAg
ICBvdXQucHJpbnQoIiwgYjNTbG90ID0gIiwgKm1fYjNTbG90KTsKIH0KIAotU3RhY2tTbG90OjpT
dGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5k
IGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKK1N0YWNrU2xvdDo6U3RhY2tTbG90KHVuc2ln
bmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90S2luZCBraW5kLCBCMzo6U3Rh
Y2tTbG90KiBiM1Nsb3QpCiAgICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQogICAgICwgbV9pbmRl
eChpbmRleCkKLSAgICAsIG1fb2Zmc2V0RnJvbUZQKHZhbHVlID8gdmFsdWUtPm9mZnNldEZyb21G
UCgpIDogMCkKKyAgICAsIG1fb2Zmc2V0RnJvbUZQKGIzU2xvdCA/IGIzU2xvdC0+b2Zmc2V0RnJv
bUZQKCkgOiAwKQogICAgICwgbV9raW5kKGtpbmQpCi0gICAgLCBtX3ZhbHVlKHZhbHVlKQorICAg
ICwgbV9iM1Nsb3QoYjNTbG90KQogewogICAgIEFTU0VSVChieXRlU2l6ZSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDE5
NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKIAotY2xhc3MgU3RhY2tTbG90VmFsdWU7CitjbGFzcyBTdGFja1Nsb3Q7CiAKIG5hbWVzcGFj
ZSBBaXIgewogCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIDg7CiAg
ICAgfQogCi0gICAgU3RhY2tTbG90VmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQorICAgIEIzOjpTdGFja1Nsb3QqIGIzU2xvdCgpIGNvbnN0IHsgcmV0dXJuIG1fYjNTbG90
OyB9CiAKICAgICAvLyBaZXJvIG1lYW5zIHRoYXQgaXQncyBub3QgeWV0IGFzc2lnbmVkLgogICAg
IGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9
CkBAIC04MCwxMyArODAsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
Q29kZTsKIAotICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgs
IFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKik7CisgICAgU3RhY2tTbG90KHVuc2lnbmVk
IGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90S2luZCwgQjM6OlN0YWNrU2xvdCop
OwogICAgIAogICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CiAgICAgdW5zaWduZWQgbV9pbmRleDsK
ICAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKICAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsK
LSAgICBTdGFja1Nsb3RWYWx1ZSogbV92YWx1ZTsKKyAgICBCMzo6U3RhY2tTbG90KiBtX2IzU2xv
dDsKIH07CiAKIGNsYXNzIERlZXBTdGFja1Nsb3REdW1wIHsKQEAgLTExOSw3ICsxMTksNyBAQCBu
YW1lc3BhY2UgV1RGIHsKIAogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdCogc3RhY2tTbG90KQogewotICAgIG91dC5wcmlu
dCgqc3RhY2tTbG90KTsKKyAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3RhY2tTbG90KSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExCM0NvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQjNDb21waWxlLmNwcAkocmV2aXNpb24gMTk1NTg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIKICNpbmNsdWRl
ICJCM1Byb2NlZHVyZUlubGluZXMuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisj
aW5jbHVkZSAiQjNTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5o
IgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5jcHAJKHJldmlzaW9uIDE5
NTU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw5ICs3OSwxMCBAQCB2b2lkIE91dHB1dDo6YXBwZW5kVG8oTEJhc2lj
QmxvY2sgYmxvY2spCiAgICAgbV9ibG9jayA9IGJsb2NrOwogfQogCi1TdGFja1Nsb3RWYWx1ZSog
T3V0cHV0Ojpsb2NrZWRTdGFja1Nsb3Qoc2l6ZV90IGJ5dGVzKQorU2xvdEJhc2VWYWx1ZSogT3V0
cHV0Ojpsb2NrZWRTdGFja1Nsb3Qoc2l6ZV90IGJ5dGVzKQogewotICAgIHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8U3RhY2tTbG90VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGJ5dGVzLCBTdGFj
a1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8U2xvdEJh
c2VWYWx1ZT4oCisgICAgICAgIG1fcHJvYywgb3JpZ2luKCksIG1fcHJvYy5hZGRTdGFja1Nsb3Qo
Ynl0ZXMsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCkpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpuZWco
TFZhbHVlIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQu
aAkocmV2aXNpb24gMTk1NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091
dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiQjNDb250
cm9sVmFsdWUuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQcm9j
ZWR1cmUuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisjaW5jbHVkZSAiQjNTbG90
QmFzZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVXBz
aWxvblZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKQEAgLTEwMiw3ICsxMDIs
NyBAQCBwdWJsaWM6CiAKICAgICBMVmFsdWUgZnJhbWVQb2ludGVyKCkgeyByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4o
KSk7IH0KIAotICAgIEIzOjpTdGFja1Nsb3RWYWx1ZSogbG9ja2VkU3RhY2tTbG90KHNpemVfdCBi
eXRlcyk7CisgICAgQjM6OlNsb3RCYXNlVmFsdWUqIGxvY2tlZFN0YWNrU2xvdChzaXplX3QgYnl0
ZXMpOwogCiAgICAgTFZhbHVlIGNvbnN0Qm9vbChib29sIHZhbHVlKSB7IHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OkNvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOyB9
CiAgICAgTFZhbHVlIGNvbnN0SW50MzIoaW50MzJfdCB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHZhbHVlKTsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHJldmlzaW9uIDE5NTU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsOSArMjA3LDkgQEAgcHVibGlj
OgogCiAjaWYgRlRMX1VTRVNfQjMKICAgICAgICAgc2l6ZV90IHNpemVPZkNhcHR1cmVkID0gc2l6
ZW9mKEpTVmFsdWUpICogbV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7Ci0gICAgICAgIEIzOjpT
dGFja1Nsb3RWYWx1ZSogY2FwdHVyZWRCYXNlID0gbV9vdXQubG9ja2VkU3RhY2tTbG90KHNpemVP
ZkNhcHR1cmVkKTsKKyAgICAgICAgQjM6OlNsb3RCYXNlVmFsdWUqIGNhcHR1cmVkQmFzZSA9IG1f
b3V0LmxvY2tlZFN0YWNrU2xvdChzaXplT2ZDYXB0dXJlZCk7CiAgICAgICAgIG1fY2FwdHVyZWQg
PSBtX291dC5hZGQoY2FwdHVyZWRCYXNlLCBtX291dC5jb25zdEludFB0cihzaXplT2ZDYXB0dXJl
ZCkpOwotICAgICAgICBzdGF0ZS0+Y2FwdHVyZWRWYWx1ZSA9IGNhcHR1cmVkQmFzZTsKKyAgICAg
ICAgc3RhdGUtPmNhcHR1cmVkVmFsdWUgPSBjYXB0dXJlZEJhc2UtPnNsb3QoKTsKICNlbHNlIC8v
IEZUTF9VU0VTX0IzCiAgICAgICAgIExWYWx1ZSBjYXB0dXJlZEFsbG9jYSA9IG1fb3V0LmFsbG9j
YShhcnJheVR5cGUobV9vdXQuaW50NjQsIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsKSk7CiAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24g
MTk1NTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgQjMg
ewogY2xhc3MgUGF0Y2hwb2ludFZhbHVlOwotY2xhc3MgU3RhY2tTbG90VmFsdWU7CitjbGFzcyBT
dGFja1Nsb3Q7CiB9IC8vIG5hbWVzcGFjZSBCMwogCiBuYW1lc3BhY2UgRlRMIHsKQEAgLTg5LDcg
Kzg5LDcgQEAgcHVibGljOgogICAgIC8vIGFyZSBubyBhcHBsaWNhYmxlIGNhdGNoIGJsb2NrcyBh
bnl3aGVyZSBpbiB0aGUgR3JhcGguCiAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGU+IGRlZmF1bHRFeGNlcHRpb25IYW5kbGU7CiAgICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+
IGV4Y2VwdGlvbkhhbmRsZXIgeyBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD46OmNyZWF0ZSgpIH07
Ci0gICAgQjM6OlN0YWNrU2xvdFZhbHVlKiBjYXB0dXJlZFZhbHVlIHsgbnVsbHB0ciB9OworICAg
IEIzOjpTdGFja1Nsb3QqIGNhcHR1cmVkVmFsdWUgeyBudWxscHRyIH07CiAjZWxzZSAvLyBGVExf
VVNFU19CMwogICAgIHVuc2lnbmVkIGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21h
cElEIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBoYW5kbGVFeGNlcHRpb25TdGFja21hcElE
IHsgVUlOVF9NQVggfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269906</attachid>
            <date>2016-01-26 12:41:09 -0800</date>
            <delta_ts>2016-01-26 13:05:54 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>78432</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1NjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MCBA
QAorMjAxNi0wMS0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSB0aGluZyB0aGF0IEIzIHVzZXMgdG8gZGVzY3JpYmUgYSBzdGFjayBzbG90IHNob3VsZCBu
b3QgYmUgYSBWYWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUzNDkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIEIzIHJlcHJlc2VudGVkIHN0YWNrIHNsb3RzIGJ5
IGhhdmluZyBhIFN0YWNrU2xvdFZhbHVlIHRoYXQgY2FycmllZAorICAgICAgICB0d28gbWVhbmlu
Z3M6CisKKyAgICAgICAgLSBJdCByZXByZXNlbnRlZCBhIHN0YWNrIHNsb3QuCisKKyAgICAgICAg
LSBJdCB3YXMgYSBraW5kIG9mIFZhbHVlIGZvciBnZXR0aW5nIHRoZSBiYXNlIG9mIHRoZSBzdGFj
ayBzbG90LgorCisgICAgICAgIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYSB1bnRpbCB5b3Ug
Y29uc2lkZXIgdGhlIGZvbGxvd2luZyBpc3N1ZXMuCisKKyAgICAgICAgMSkgQSBWYWx1ZSBjYW4g
YmUga2lsbGVkIGlmIGl0IGlzIG9uIGFuIHVucmVhY2hhYmxlIHBhdGgsIG9yIGlmIGl0IGhhcyBu
byBlZmZlY3RzIGFuZAorICAgICAgICAgICBub2JvZHkgcmVmZXJzIHRvIGl0LiBCdXQgdGhlIEZU
TCB1c2VzIFN0YWNrU2xvdFZhbHVlIHRvIGFsbG9jYXRlIHNwYWNlIG9uIHRoZSBzdGFjay4KKyAg
ICAgICAgICAgV2hlbiBpdCBkb2VzIHRoaXMsIGl0IGRvZXNuJ3Qgd2FudCBpdCB0byBiZSBraWxs
ZWQuIEl0IHdpbGwgZGVyZWZlcmVuY2UgdGhlIG9iamVjdCwgc28KKyAgICAgICAgICAga2lsbGlu
ZyBpdCBpcyBhIGJ1Zy4KKworICAgICAgICAyKSBBIHByZW1pc2Ugb2YgQjMgaXMgdGhhdCBpdCBz
aG91bGQgYmUgYWx3YXlzIGxlZ2FsIHRvIHBlcmZvcm0gdGhlIGZvbGxvd2luZworICAgICAgICAg
ICB0cmFuc2Zvcm1hdGlvbiBvbiBhIHZhbHVlOgorCisgICAgICAgICAgIHZhbHVlLT5yZXBsYWNl
V2l0aElkZW50aXR5KGluc2VydGlvblNldC5pbnNlcnRWYWx1ZShpbmRleCwgcHJvYy5jbG9uZSh2
YWx1ZSkpKTsKKworICAgICAgICAgICBUaGlzIGluc2VydHMgYSBuZXcgdmFsdWUganVzdCBiZWZv
cmUgdGhlIG9sZCBvbmUuIFRoZSBuZXcgdmFsdWUgaXMgYSBjbG9uZSBvZiB0aGUgb2xkCisgICAg
ICAgICAgIG9uZS4gVGhlbiB0aGUgb2xkIG9uZSBpcyBlc3NlbnRpYWxseSBkZWxldGVkIChhbnl0
aGluZyB0aGF0IGJlY29tZXMgYW4gaWRlbnRpdHkgZGllcworICAgICAgICAgICBzaG9ydGx5IHRo
ZXJlYWZ0ZXIpLiBQcm9ibGVtICgxKSBwcmV2ZW50cyB0aGlzIGZyb20gYmVpbmcgbGVnYWwsIHdo
aWNoIGJyZWFrcyBhIG1ham9yCisgICAgICAgICAgIHByZW1pc2Ugb2YgQjMgSVIuCisKKyAgICAg
ICAgMykgQSBwcmVtaXNlIG9mIEIzIGlzIHRoYXQgaXQgc2hvdWxkIGJlIGFsd2F5cyBsZWdhbCB0
byBwZXJmb3JtIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgdHJhbnNmb3JtYXRpb24gb24gYSB2
YWx1ZToKKworICAgICAgICAgICBCZWZvcmU6CisgICAgICAgICAgICAgICAgICAgQDQyID0gVGhp
bmcoLi4uKQorCisgICAgICAgICAgIEFmdGVyOgorICAgICAgICAgICAgICAgICAgIEJyYW5jaChA
ZG9lc250TWF0dGVyLCAjeWVzLCAjbm8pCisgICAgICAgICAgICAgICBCQiN5ZXM6CisgICAgICAg
ICAgICAgICAgICAgQDQyX29uZSA9IFRoaW5nKC4uLikKKyAgICAgICAgICAgICAgICAgICBVcHNp
bG9uKEA0Ml9vbmUsIF40MikKKyAgICAgICAgICAgICAgICAgICBKdW1wKCNkb25lKQorICAgICAg
ICAgICAgICAgQkIjbm86CisgICAgICAgICAgICAgICAgICAgQDQyX3R3byA9IFRoaW5nKC4uLikK
KyAgICAgICAgICAgICAgICAgICBVcHNpbG9uKEA0Ml90d28sIF40MikKKyAgICAgICAgICAgICAg
ICAgICBKdW1wKCNkb25lKQorICAgICAgICAgICAgICAgQkIjZG9uZToKKyAgICAgICAgICAgICAg
ICAgICBANDIgPSBQaGkoKQorCisgICAgICAgICAgIEJ1dCBwcmlvciB0byB0aGlzIGNoYW5nZSwg
c3VjaCBhIHRyYW5zZm9ybWF0aW9uIG1ha2VzIGFic29sdXRlbHkgbm8gc2Vuc2UgZm9yCisgICAg
ICAgICAgIFN0YWNrU2xvdC4gSXQgd2lsbCAid29yayIgaW4gdGhlIHNlbnNlIHRoYXQgdGhlIGNv
bXBpbGVyIHdpbGwgcHJvY2VlZCB1bmRhdW50ZWQsIGJ1dAorICAgICAgICAgICBpdCB3aWxsIGRp
c2FibGUgU1NBIGZpeC11cCBmb3IgdGhlIGNsb25lZCBzdGFjayBzbG90IGFuZCB3ZSB3aWxsIGVu
ZCB1cCBhbGxvY2F0aW5nIHR3bworICAgICAgICAgICBzdGFjayBzbG90cyBpbnN0ZWFkIG9mIG9u
ZSwgYW5kIHRoZW4gd2Ugd2lsbCBhc3N1bWUgdGhhdCB0aGV5IGJvdGggZXNjYXBlLCB3aGljaCB3
aWxsCisgICAgICAgICAgIGRpc2FibGUgZWZmaWNpZW50IHN0YWNrIGFsbG9jYXRpb24uIE5vdGUg
dGhhdCB0aGUgbW9yYWwgZXF1aXZhbGVudCBvZiB0aGlzCisgICAgICAgICAgIHRyYW5zZm9ybWF0
aW9uIGNvdWxkIGFscmVhZHkgaGFwcGVuIGR1ZSB0byB0YWlsIGR1cGxpY2F0aW9uLCBhbmQgdGhl
IG9ubHkgcmVhc29uIHdoeQorICAgICAgICAgICBpdCdzIG5vdCBhIGJ1ZyByaWdodCBub3cgaXMg
dGhhdCB3ZSBoYXBwZW4gdG8gaG9pc3Qgc3RhY2sgc2xvdHMgdG8gdGhlIHJvb3QgYmxvY2suIEJ1
dAorICAgICAgICAgICB0aGUgd2hvbGUgcG9pbnQgb2Ygb3VyIHN0YWNrIHNsb3RzIHdhcyBzdXBw
b3NlZCB0byBiZSB0aGF0IHRoZXkgZG8gbm90IGhhdmUgdG8gYmUKKyAgICAgICAgICAgaG9pc3Rl
ZC4KKworICAgICAgICBUaGlzIGNoYW5nZSBmaXhlcyB0aGlzIGlzc3VlIGJ5IHNwbGl0dGluZyBT
dGFja1Nsb3RWYWx1ZSBpbnRvIHR3byB0aGluZ3M6IFNsb3RCYXNlVmFsdWUsCisgICAgICAgIHdo
aWNoIGlzIGEgcHVyZSBvcGVyYXRpb24gZm9yIGdldHRpbmcgdGhlIGJhc2UgYWRkcmVzcyBvZiBh
IFN0YWNrU2xvdCwgYW5kIFN0YWNrU2xvdCwKKyAgICAgICAgd2hpY2ggaXMgYSByZXByZXNlbnRh
dGlvbiBvZiB0aGUgYWN0dWFsIHN0YWNrIHNsb3QuIFN0YWNrU2xvdCBjYW5ub3QgZ2V0IGR1cGxp
Y2F0ZWQgYW5kCisgICAgICAgIGNhbiBvbmx5IGJlIGtpbGxlZCBpZiBpdCdzIGFub255bW91cy4g
U2xvdEJhc2VWYWx1ZSBjYW4gYmUga2lsbGVkLCBtb3ZlZCwgY2xvbmVkLAorICAgICAgICBob2lz
dGVkLCBldGMuIFNpbmNlIGl0IGhhcyBubyBlZmZlY3RzIGFuZCBpdCBoYXMgYSBWYWx1ZUtleSwg
aXQncyBvbmUgb2YgdGhlIG1vc3QKKyAgICAgICAgcGVybWlzc2l2ZSBWYWx1ZXMgaW4gdGhlIElS
LCBqdXN0IGFzIG9uZSB3b3VsZCBob3BlIChhZnRlciBhbGwsIHRoZXJlIGlzIGFjdHVhbGx5IHpl
cm8KKyAgICAgICAgY29kZSB0aGF0IG5lZWRzIHRvIGV4ZWN1dGUgdG8gZXZhbHVhdGUgU2xvdEJh
c2VWYWx1ZSkuCisKKyAgICAgICAgVGhpcyBmaXhlcyBhIGNyYXNoIHRoYXQgd2Ugc2F3IHdpdGgg
R3VhcmRNYWxsb2MgYW5kIEFTYW4uIEl0IGFsc28gbWFrZXMgdGhlIElSIGEgbG90IG1vcmUKKyAg
ICAgICAgZWFzeSB0byByZWFzb24gYWJvdXQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGIzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwOgorICAgICAgICAq
IGIzL0IzRml4U1NBLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmRlbW90ZVZhbHVlcyk6CisgICAg
ICAgIChKU0M6OkIzOjpmaXhTU0EpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6Okxvd2VyVG9BaXI6OmVmZmVjdGl2ZUFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpsb3dlcik6CisgICAgICAgICogYjMvQjNPcGNvZGUuY3BwOgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOgorICAgICAg
ICAqIGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2V0
QmxvY2tPcmRlckltcGwpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGRTdGFja1Ns
b3QpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGRBbm9ueW1vdXNTdGFja1Nsb3Qp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpjbG9uZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpibG9ja3NJ
blBvc3RPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmRlbGV0ZVN0YWNrU2xv
dCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmRlbGV0ZVZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OlByb2NlZHVyZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6
OkIzOjpQcm9jZWR1cmU6OmFkZFN0YWNrU2xvdEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlBy
b2NlZHVyZTo6YWRkVmFsdWVJbmRleCk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuaDoKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2V0QmxvY2tPcmRlcik6CisgICAgICAgIChKU0M6
OkIzOjpQcm9jZWR1cmU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpTdGFja1Nsb3RzQ29sbGVjdGlv
bik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246
OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246
Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29s
bGVjdGlvbjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJh
dG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlv
bjo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpT
dGFja1Nsb3RzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6aXRlcmF0b3I6OmZpbmROZXh0
KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246
OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnN0YWNrU2xvdHMpOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpWYWx1ZXNDb2xsZWN0aW9u
KToKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1Ns
b3RCYXNlVmFsdWUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja1Nsb3RWYWx1ZS5jcHAuCisgICAgICAgIChKU0M6OkIzOjpTbG90QmFzZVZhbHVlOjp+U2xv
dEJhc2VWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTbG90QmFzZVZhbHVlOjpkdW1wTWV0YSk6
CisgICAgICAgIChKU0M6OkIzOjpTbG90QmFzZVZhbHVlOjpjbG9uZUltcGwpOgorICAgICAgICAo
SlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6On5TdGFja1Nsb3RWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6OmNsb25lSW1wbCk6IERlbGV0ZWQuCisgICAgICAg
ICogYjMvQjNTbG90QmFzZVZhbHVlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmguCisgICAgICAgICogYjMvQjNTdGFja1Nsb3QuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdDo6flN0YWNrU2xvdCk6CisgICAgICAg
IChKU0M6OkIzOjpTdGFja1Nsb3Q6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90
OjpkZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3Q6OlN0YWNrU2xvdCk6Cisg
ICAgICAgICogYjMvQjNTdGFja1Nsb3QuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFj
a1Nsb3Q6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdDo6a2luZCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3Q6OmlzTG9ja2VkKToKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrU2xvdDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90OjpvZmZzZXRG
cm9tRlApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90OjpzZXRPZmZzZXRGcm9tRlApOgor
ICAgICAgICAoSlNDOjpCMzo6RGVlcFN0YWNrU2xvdER1bXA6OkRlZXBTdGFja1Nsb3REdW1wKToK
KyAgICAgICAgKEpTQzo6QjM6OkRlZXBTdGFja1Nsb3REdW1wOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmg6IFJlbW92ZWQuCisgICAgICAg
ICogYjMvQjNWYWxpZGF0ZS5jcHA6CisgICAgICAgICogYjMvQjNWYWx1ZS5jcHA6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6ZWZmZWN0cyk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6a2V5
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpjaGVja09wY29kZSk6CisgICAgICAgICogYjMv
QjNWYWx1ZUtleS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6bWF0ZXJpYWxpemUp
OgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
Q29kZTo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjphZGRTdGFja1Ns
b3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjphZGRTcGVjaWFsKToKKyAgICAgICAg
KiBiMy9haXIvQWlyQ29kZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJTdGFja1Nsb3QuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlN0YWNrU2xvdDo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Ns
b3Q6OlN0YWNrU2xvdCk6CisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5oOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmFsaWdubWVudCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlN0YWNrU2xvdDo6YjNTbG90KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tT
bG90OjpvZmZzZXRGcm9tRlApOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90Ojp2YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICog
YjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTdGFja1Nsb3QpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdFN0b3JlTG9hZFN0YWNrU2xvdCk6CisgICAgICAgICogZnRsL0ZUTEIz
Q29tcGlsZS5jcHA6CisgICAgICAgICogZnRsL0ZUTEIzT3V0cHV0LmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpPdXRwdXQ6OmFwcGVuZFRvKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6Omxv
Y2tlZFN0YWNrU2xvdCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpuZWcpOgorICAgICAg
ICAqIGZ0bC9GVExCM091dHB1dC5oOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZnJhbWVQ
b2ludGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNvbnN0Qm9vbCk6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0Ojpjb25zdEludDMyKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06Omxv
d2VyKToKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuaDoKKwogMjAxNi0wMS0yNiAgQmVuamFtaW4g
UG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIGEgdXNlbGVz
cyAjaW5jbHVkZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNp
b24gMTk1NTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDcsMTEgKzE0NywxMiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNF
UwogICAgIGIzL0IzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAKICAgICBiMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAogICAgIGIzL0IzU1NBQ2FsY3VsYXRvci5jcHAKKyAgICBiMy9CM1Nsb3RCYXNlVmFs
dWUuY3BwCiAgICAgYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCiAgICAgYjMvQjNT
dGFja21hcFNwZWNpYWwuY3BwCiAgICAgYjMvQjNTdGFja21hcFZhbHVlLmNwcAogICAgIGIzL0Iz
U3RhY2tTbG90S2luZC5jcHAKLSAgICBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAorICAgIGIzL0Iz
U3RhY2tTbG90LmNwcAogICAgIGIzL0IzU3dpdGNoQ2FzZS5jcHAKICAgICBiMy9CM1N3aXRjaFZh
bHVlLmNwcAogICAgIGIzL0IzVGltaW5nU2NvcGUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTk1NTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTUzMyw2ICs1MzMsOCBAQAogCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJl
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkz
MzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5M0I0QTkxOEI5MkM0RDAwMTc4QTNG
IC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5j
cHAgKi87IH07CiAJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgx
OEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5NDk1ODcxQzU3RjQ3NTAwNDEzQTQ4IC8q
IEIzU3RhY2tTbG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTQ5NTg1MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5jcHAgKi87IH07
CisJCTBGOTQ5NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NDk1ODYxQzU3RjQ3NTAwNDEz
QTQ4IC8qIEIzU3RhY2tTbG90LmggKi87IH07CiAJCTBGOTUyQUJDMUI0ODdBNzcwMEMzNjdDNSAv
KiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjk1MkFCQTFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5j
ZXMuY3BwICovOyB9OwogCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVy
ZW5jZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OTUyQUJCMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkw
MDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODMy
LDggKzgzNCw4IEBACiAJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3Bl
Y2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi87IH07CiAJCTBG
RUM4NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi87IH07CiAJCTBGRUM4NTMzMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtp
bmQuaCAqLzsgfTsKLQkJMEZFQzg1MzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovOyB9OwotCQkw
RkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MzQxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZh
bHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VW
YWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5oICovOyB9OwogCQkwRkVD
ODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQzFCREFDREFDMDA4
MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi87IH07CiAJCTBGRUM4NTM3MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNo
Q2FzZS5jcHAgKi87IH07CiAJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLzsgfTsKQEAgLTI3MTUsNiAr
MjcxNyw4IEBACiAJCTBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlU2V0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlk
VmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeUlk
VmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTNCNEE4MThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQdXRCeUlkVmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
Rjk0OTU4NTFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja1Nsb3QuY3BwOyBwYXRoID0gYjMvQjNTdGFj
a1Nsb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk0OTU4NjFDNTdGNDc1
MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNTdGFja1Nsb3QuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJl
bmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2VkUmVm
ZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJCMUI0ODdB
NzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzAyOCw4ICszMDMyLDggQEAKIAkJMEZFQzg0RTcxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmg7IHBhdGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja1Nsb3RLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEIzU3RhY2tTbG90S2luZC5jcHA7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja1Nsb3RLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tT
bG90S2luZC5oOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90VmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuaDsg
cGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Nsb3RCYXNlVmFsdWUuY3BwOyBwYXRo
ID0gYjMvQjNTbG90QmFzZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Nsb3RCYXNlVmFsdWUuaDsgcGF0aCA9IGIzL0IzU2xv
dEJhc2VWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRFQzFCREFD
REFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBwYXRoID0gYjMvQjNTdWNj
ZXNzb3JDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NEVE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNTd2l0Y2hDYXNlLmNwcDsgcGF0aCA9IGIzL0IzU3dpdGNoQ2Fz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NEVFMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNTd2l0Y2hDYXNlLmg7IHBhdGggPSBiMy9CM1N3aXRjaENhc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQ4NTMsNiArNDg1Nyw4IEBACiAJCQkJNDM0MjJBNjUxQzE2MjIxRTAw
RTJFQjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5oICovLAogCQkJCTBGRUM4NUI3MUJFMTQ2
MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLywKIAkJCQkwRkVDODVCODFCRTE0
NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5oICovLAorCQkJCTBGRUM4NEVBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEVCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuaCAqLywKIAkJCQkwRjZCOEFEQTFDNEVGQUMz
MDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmNwcCAqLywKIAkJCQkwRjZCOEFEQjFDNEVGQUMz
MDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmggKi8sCiAJCQkJMEYzM0ZDRjUxQzEzNkUyNTAw
MzIzRjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcCAqLywKQEAgLTQ4NjEsMTAg
KzQ4NjcsMTAgQEAKIAkJCQkwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNw
ZWNpYWwuaCAqLywKIAkJCQkwRjMzOERFRjFCRTkzQUQxMDAxM0M4OEYgLyogQjNTdGFja21hcFZh
bHVlLmNwcCAqLywKIAkJCQkwRjMzOERGMDFCRTkzQUQxMDAxM0M4OEYgLyogQjNTdGFja21hcFZh
bHVlLmggKi8sCisJCQkJMEY5NDk1ODUxQzU3RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmNw
cCAqLywKKwkJCQkwRjk0OTU4NjFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuaCAqLywK
IAkJCQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLywK
IAkJCQkwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8sCi0J
CQkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovLAot
CQkJCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8sCiAJ
CQkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICov
LAogCQkJCTBGRUM4NEVEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwICovLAog
CQkJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLywKQEAgLTcx
MTIsNyArNzExOCw3IEBACiAJCQkJMEZFQzg1QkQxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNl
U3RyZW5ndGguaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZFQzg1
MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxl
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTcyMjMsNiArNzIyOSw3IEBA
CiAJCQkJQzIxOEQxNDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzRGNEI2RjQxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUxQzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0lu
c2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NDk1ODgxQzU3RjQ3NTAwNDEzQTQ4
IC8qIEIzU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGMzFBMDVDOTQ0MDA1
Q0FCNzYgLyogY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk1
REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4gSGVhZGVycyAq
LywKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWluLnB5IGluIEhlYWRlcnMg
Ki8sCkBAIC04ODA3LDcgKzg4MTQsNyBAQAogCQkJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAv
KiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTMwMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RC
YXNlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUzOTFCREFDREFD
MDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ1NzA0
MDFCRTU4NENBMDA2MkE2MjkgLyogQjNUaW1pbmdTY29wZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTkwMzMsNiArOTA0MCw3IEBACiAJCQkJMEZFMjU0RjYxQUJEREQyMjAwQTdDNkQyIC8qIERGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2RTg0NUExOTAz
MEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkREQkZCNTE2NjZFRUQ4MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVt
cC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjk0OTU4NzFDNTdGNDc1MDA0MTNBNDggLyogQjNT
dGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNTExNTIyOEZGRDAwQ0Q4OTEw
IC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEExNTIy
ODA5QTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGRkM5NUYxNEVGOTBCQjAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5j
cHAJKHJldmlzaW9uIDE5NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1p
bmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcs
OCBAQAogI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkIzUHVyZUNTRS5oIgotI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFs
dWUuaCIKKyNpbmNsdWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xv
dC5oIgogI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCkBAIC0xMzAsNyArMTMxLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgbV9pbXB1cmVCbG9ja0RhdGFbbV9ibG9ja10gPSBtX2RhdGE7CiAgICAgICAgIH0K
IAotICAgICAgICBmb3IgKFN0YWNrU2xvdFZhbHVlKiBzdGFjayA6IG1fc3RhY2tzKQorICAgICAg
ICBmb3IgKFNsb3RCYXNlVmFsdWUqIHN0YWNrIDogbV9zdGFja3MpCiAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnRWYWx1ZSgwLCBzdGFjayk7CiAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFsdWVJbmRl
eCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgpIHsKQEAgLTM2
OSw4ICszNzAsOCBAQCBwcml2YXRlOgogICAgICAgICAvLyBSaWdodCBub3cgd2UncmUgcmVseWlu
ZyBvbiB0aGUgZmFjdCB0aGF0IENTRSdzIHBvc2l0aW9uIGluIHRoZSBwaGFzZSBvcmRlciBpcwog
ICAgICAgICAvLyBhbG1vc3QgcmlnaHQgYmVmb3JlIFNTQSBmaXh1cC4KICAgICAgICAgICAgIAot
ICAgICAgICBTdGFja1Nsb3RWYWx1ZSogc3RhY2sgPSBtX3Byb2MuYWRkPFN0YWNrU2xvdFZhbHVl
PigKLSAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLCBzaXplb2ZUeXBlKG1fdmFsdWUtPnR5
cGUoKSksIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgICAgIFNsb3RCYXNlVmFsdWUq
IHN0YWNrID0gbV9wcm9jLmFkZDxTbG90QmFzZVZhbHVlPigKKyAgICAgICAgICAgIG1fdmFsdWUt
Pm9yaWdpbigpLCBtX3Byb2MuYWRkQW5vbnltb3VzU3RhY2tTbG90KG1fdmFsdWUtPnR5cGUoKSkp
OwogICAgICAgICBtX3N0YWNrcy5hcHBlbmQoc3RhY2spOwogCiAgICAgICAgIE1lbW9yeVZhbHVl
KiBsb2FkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPigKQEAgLTQ5OCw3ICs0
OTksNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgVmFsdWUqIG1fdmFs
dWU7CiAKLSAgICBWZWN0b3I8U3RhY2tTbG90VmFsdWUqPiBtX3N0YWNrczsKKyAgICBWZWN0b3I8
U2xvdEJhc2VWYWx1ZSo+IG1fc3RhY2tzOwogICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8VmFs
dWUqPj4gbV9zdG9yZXM7CiAKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAJKHJldmlzaW9uIDE5NTU4NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDcgKzM4LDggQEAKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1By
b2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1NTQUNhbGN1bGF0b3IuaCIKLSNpbmNsdWRl
ICJCM1N0YWNrU2xvdFZhbHVlLmgiCisjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCisjaW5j
bHVkZSAiQjNTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1
ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgpAQCAt
NTEsMTkgKzUyLDE5IEBAIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCiB2b2lkIGRlbW90
ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2MsIGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQog
ewotICAgIEhhc2hNYXA8VmFsdWUqLCBTdGFja1Nsb3RWYWx1ZSo+IG1hcDsKLSAgICBIYXNoTWFw
PFZhbHVlKiwgU3RhY2tTbG90VmFsdWUqPiBwaGlNYXA7CisgICAgSGFzaE1hcDxWYWx1ZSosIFNs
b3RCYXNlVmFsdWUqPiBtYXA7CisgICAgSGFzaE1hcDxWYWx1ZSosIFNsb3RCYXNlVmFsdWUqPiBw
aGlNYXA7CiAKICAgICAvLyBDcmVhdGUgc3RhY2sgc2xvdHMuCiAgICAgSW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChwcm9jKTsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlcy52YWx1ZXMo
cHJvYy52YWx1ZXMoKSkpIHsKLSAgICAgICAgU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gaW5zZXJ0
aW9uU2V0Lmluc2VydDxTdGFja1Nsb3RWYWx1ZT4oCi0gICAgICAgICAgICAwLCB2YWx1ZS0+b3Jp
Z2luKCksIHNpemVvZlR5cGUodmFsdWUtPnR5cGUoKSksIFN0YWNrU2xvdEtpbmQ6OkFub255bW91
cyk7CisgICAgICAgIFNsb3RCYXNlVmFsdWUqIHN0YWNrID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxT
bG90QmFzZVZhbHVlPigKKyAgICAgICAgICAgIDAsIHZhbHVlLT5vcmlnaW4oKSwgcHJvYy5hZGRB
bm9ueW1vdXNTdGFja1Nsb3QodmFsdWUtPnR5cGUoKSkpOwogICAgICAgICBtYXAuYWRkKHZhbHVl
LCBzdGFjayk7CiAKICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkpIHsKLSAgICAg
ICAgICAgIFN0YWNrU2xvdFZhbHVlKiBwaGlTdGFjayA9IGluc2VydGlvblNldC5pbnNlcnQ8U3Rh
Y2tTbG90VmFsdWU+KAotICAgICAgICAgICAgICAgIDAsIHZhbHVlLT5vcmlnaW4oKSwgc2l6ZW9m
VHlwZSh2YWx1ZS0+dHlwZSgpKSwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICAgICAg
ICAgIFNsb3RCYXNlVmFsdWUqIHBoaVN0YWNrID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxTbG90QmFz
ZVZhbHVlPigKKyAgICAgICAgICAgICAgICAwLCB2YWx1ZS0+b3JpZ2luKCksIHByb2MuYWRkQW5v
bnltb3VzU3RhY2tTbG90KHZhbHVlLT50eXBlKCkpKTsKICAgICAgICAgICAgIHBoaU1hcC5hZGQo
dmFsdWUsIHBoaVN0YWNrKTsKICAgICAgICAgfQogICAgIH0KQEAgLTg5LDMxICs5MCwzMSBAQCB2
b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2MsIGNvbnN0CiAgICAgICAgICAgICBWYWx1
ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCk7CiAKICAgICAgICAgICAgIGlmICh2YWx1
ZS0+b3Bjb2RlKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFN0YWNrU2xvdFZhbHVl
KiBzdGFjayA9IHBoaU1hcC5nZXQodmFsdWUpKSB7CisgICAgICAgICAgICAgICAgaWYgKFNsb3RC
YXNlVmFsdWUqIHNsb3RCYXNlID0gcGhpTWFwLmdldCh2YWx1ZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZUluZGV4LCBMb2FkLCB2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCks
IHN0YWNrKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgTG9hZCwg
dmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCBzbG90QmFzZSkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSom
IGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFN0
YWNrU2xvdFZhbHVlKiBzdGFjayA9IG1hcC5nZXQoY2hpbGQpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IG1hcC5nZXQoY2hpbGQpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGluc2VydGlvblNldC5pbnNlcnQ8TWVtb3J5VmFs
dWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgsIExvYWQsIGNoaWxk
LT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgc3RhY2spOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlSW5kZXgsIExvYWQsIGNoaWxkLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwg
c2xvdEJhc2UpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgaWYgKFVwc2lsb25WYWx1ZSogdXBzaWxvbiA9IHZhbHVlLT5hczxVcHNp
bG9uVmFsdWU+KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFN0YWNrU2xvdFZhbHVlKiBz
dGFjayA9IHBoaU1hcC5nZXQodXBzaWxvbi0+cGhpKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IHBoaU1hcC5nZXQodXBzaWxvbi0+cGhpKCkp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBTdG9yZSwgdXBz
aWxvbi0+b3JpZ2luKCksIHVwc2lsb24tPmNoaWxkKDApLCBzdGFjayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgU3RvcmUsIHVwc2lsb24tPm9yaWdpbigpLCB1cHNp
bG9uLT5jaGlsZCgwKSwgc2xvdEJhc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUt
PnJlcGxhY2VXaXRoTm9wKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChTdGFja1Nsb3RWYWx1ZSogc3Rh
Y2sgPSBtYXAuZ2V0KHZhbHVlKSkgeworICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNs
b3RCYXNlID0gbWFwLmdldCh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0PE1lbW9yeVZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCArIDEs
IFN0b3JlLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBzdGFjayk7CisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlSW5kZXggKyAxLCBTdG9yZSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZSwgc2xvdEJh
c2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKQEAgLTEyNiw5ICsxMjcsMTAgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBw
cm9jKQogICAgIAogICAgIC8vIENvbGxlY3QgdGhlIHN0YWNrICJ2YXJpYWJsZXMiLiBJZiB0aGVy
ZSBhcmVuJ3QgYW55LCB0aGVuIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gZG8uCiAgICAgLy8g
VGhhdCdzIGEgZmFpcmx5IGNvbW1vbiBjYXNlLgotICAgIEhhc2hNYXA8U3RhY2tTbG90VmFsdWUq
LCBUeXBlPiBzdGFja1ZhcmlhYmxlOworICAgIEhhc2hNYXA8U3RhY2tTbG90KiwgVHlwZT4gc3Rh
Y2tWYXJpYWJsZTsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKLSAg
ICAgICAgaWYgKFN0YWNrU2xvdFZhbHVlKiBzdGFjayA9IHZhbHVlLT5hczxTdGFja1Nsb3RWYWx1
ZT4oKSkgeworICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+YXM8
U2xvdEJhc2VWYWx1ZT4oKSkgeworICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHNsb3RC
YXNlLT5zbG90KCk7CiAgICAgICAgICAgICBpZiAoc3RhY2stPmtpbmQoKSA9PSBTdGFja1Nsb3RL
aW5kOjpBbm9ueW1vdXMpCiAgICAgICAgICAgICAgICAgc3RhY2tWYXJpYWJsZS5hZGQoc3RhY2ss
IFZvaWQpOwogICAgICAgICB9CkBAIC0xNDEsMTQgKzE0MywxNiBAQCBib29sIGZpeFNTQShQcm9j
ZWR1cmUmIHByb2MpCiAgICAgLy8gU3RvcmUgb24gYW5vbnltb3VzIHZhcmlhYmxlcy4KICAgICBm
b3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKICAgICAgICAgYXV0byByZWplY3Qg
PSBbJl0gKFZhbHVlKiB2YWx1ZSkgewotICAgICAgICAgICAgaWYgKFN0YWNrU2xvdFZhbHVlKiBz
dGFjayA9IHZhbHVlLT5hczxTdGFja1Nsb3RWYWx1ZT4oKSkKLSAgICAgICAgICAgICAgICBzdGFj
a1ZhcmlhYmxlLnJlbW92ZShzdGFjayk7CisgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSog
c2xvdEJhc2UgPSB2YWx1ZS0+YXM8U2xvdEJhc2VWYWx1ZT4oKSkKKyAgICAgICAgICAgICAgICBz
dGFja1ZhcmlhYmxlLnJlbW92ZShzbG90QmFzZS0+c2xvdCgpKTsKICAgICAgICAgfTsKICAgICAg
ICAgCiAgICAgICAgIGF1dG8gaGFuZGxlQWNjZXNzID0gWyZdIChWYWx1ZSogYWNjZXNzLCBUeXBl
IHR5cGUpIHsKLSAgICAgICAgICAgIFN0YWNrU2xvdFZhbHVlKiBzdGFjayA9IGFjY2Vzcy0+bGFz
dENoaWxkKCktPmFzPFN0YWNrU2xvdFZhbHVlPigpOwotICAgICAgICAgICAgaWYgKCFzdGFjaykK
KyAgICAgICAgICAgIFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gYWNjZXNzLT5sYXN0Q2hpbGQo
KS0+YXM8U2xvdEJhc2VWYWx1ZT4oKTsKKyAgICAgICAgICAgIGlmICghc2xvdEJhc2UpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gc2xv
dEJhc2UtPnNsb3QoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKS0+b2Zmc2V0KCkpIHsKICAgICAgICAgICAgICAgICBzdGFja1ZhcmlhYmxl
LnJlbW92ZShzdGFjayk7CkBAIC0xODQsMTYgKzE4OCwxNCBAQCBib29sIGZpeFNTQShQcm9jZWR1
cmUmIHByb2MpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBWZWN0b3I8U3RhY2tTbG90VmFsdWUq
PiBkZWFkVmFsdWVzOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBkZWFkU2xvdHM7CiAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IHN0YWNrVmFyaWFibGUpIHsKICAgICAgICAgaWYgKGVudHJ5LnZhbHVl
ID09IFZvaWQpCi0gICAgICAgICAgICBkZWFkVmFsdWVzLmFwcGVuZChlbnRyeS5rZXkpOworICAg
ICAgICAgICAgZGVhZFNsb3RzLmFwcGVuZChlbnRyeS5rZXkpOwogICAgIH0KIAotICAgIGZvciAo
U3RhY2tTbG90VmFsdWUqIGRlYWRWYWx1ZSA6IGRlYWRWYWx1ZXMpIHsKLSAgICAgICAgZGVhZFZh
bHVlLT5yZXBsYWNlV2l0aE5vcCgpOwotICAgICAgICBzdGFja1ZhcmlhYmxlLnJlbW92ZShkZWFk
VmFsdWUpOwotICAgIH0KKyAgICBmb3IgKFN0YWNrU2xvdCogZGVhZFNsb3QgOiBkZWFkU2xvdHMp
CisgICAgICAgIHN0YWNrVmFyaWFibGUucmVtb3ZlKGRlYWRTbG90KTsKIAogICAgIGlmIChzdGFj
a1ZhcmlhYmxlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjA0LDExICsy
MDYsMTEgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogICAgIFNTQUNhbGN1bGF0b3Ig
c3NhKHByb2MpOwogCiAgICAgLy8gQ3JlYXRlIGEgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgZm9y
IGV2ZXJ5IHN0YWNrIHZhcmlhYmxlLgotICAgIFZlY3RvcjxTdGFja1Nsb3RWYWx1ZSo+IHZhcmlh
YmxlVG9TdGFjazsKLSAgICBIYXNoTWFwPFN0YWNrU2xvdFZhbHVlKiwgU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqPiBzdGFja1RvVmFyaWFibGU7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHZhcmlh
YmxlVG9TdGFjazsKKyAgICBIYXNoTWFwPFN0YWNrU2xvdCosIFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlKj4gc3RhY2tUb1ZhcmlhYmxlOwogCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHN0YWNrVmFy
aWFibGUpIHsKLSAgICAgICAgU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gZW50cnkua2V5OworICAg
ICAgICBTdGFja1Nsb3QqIHN0YWNrID0gZW50cnkua2V5OwogICAgICAgICBTU0FDYWxjdWxhdG9y
OjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2EubmV3VmFyaWFibGUoKTsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQodmFyaWFibGUtPmluZGV4KCkgPT0gdmFyaWFibGVUb1N0YWNrLnNpemUoKSk7CiAg
ICAgICAgIHZhcmlhYmxlVG9TdGFjay5hcHBlbmQoc3RhY2spOwpAQCAtMjIxLDEwICsyMjMsMTIg
QEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgaWYgKHZhbHVlLT5v
cGNvZGUoKSAhPSBTdG9yZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAg
ICAgU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gdmFsdWUtPmNoaWxkKDEpLT5hczxTdGFja1Nsb3RW
YWx1ZT4oKTsKLSAgICAgICAgICAgIGlmICghc3RhY2spCisgICAgICAgICAgICBTbG90QmFzZVZh
bHVlKiBzbG90QmFzZSA9IHZhbHVlLT5jaGlsZCgxKS0+YXM8U2xvdEJhc2VWYWx1ZT4oKTsKKyAg
ICAgICAgICAgIGlmICghc2xvdEJhc2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKKyAg
ICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSBzbG90QmFzZS0+c2xvdCgpOworCiAgICAgICAg
ICAgICBpZiAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gc3RhY2tUb1Zhcmlh
YmxlLmdldChzdGFjaykpCiAgICAgICAgICAgICAgICAgc3NhLm5ld0RlZih2YXJpYWJsZSwgYmxv
Y2ssIHZhbHVlLT5jaGlsZCgwKSk7CiAgICAgICAgIH0KQEAgLTIzMyw4ICsyMzcsOCBAQCBib29s
IGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAgICAgLy8gRGVjaWRlIHdoZXJlIFBoaXMgYXJlIHRv
IGJlIGluc2VydGVkLiBUaGlzIGNyZWF0ZXMgdGhlbSBidXQgZG9lcyBub3QgaW5zZXJ0IHRoZW0u
CiAgICAgc3NhLmNvbXB1dGVQaGlzKAogICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IFZhbHVlKiB7Ci0gICAgICAgICAg
ICBTdGFja1Nsb3RWYWx1ZSogc3RhY2sgPSB2YXJpYWJsZVRvU3RhY2tbdmFyaWFibGUtPmluZGV4
KCldOwotICAgICAgICAgICAgVmFsdWUqIHBoaSA9IHByb2MuYWRkPFZhbHVlPihQaGksIHN0YWNr
VmFyaWFibGUuZ2V0KHN0YWNrKSwgc3RhY2stPm9yaWdpbigpKTsKKyAgICAgICAgICAgIFN0YWNr
U2xvdCogc3RhY2sgPSB2YXJpYWJsZVRvU3RhY2tbdmFyaWFibGUtPmluZGV4KCldOworICAgICAg
ICAgICAgVmFsdWUqIHBoaSA9IHByb2MuYWRkPFZhbHVlPihQaGksIHN0YWNrVmFyaWFibGUuZ2V0
KHN0YWNrKSwgYmxvY2stPmF0KDApLT5vcmlnaW4oKSk7CiAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAgICAgICJBZGRp
bmcgUGhpIGZvciAiLCBwb2ludGVyRHVtcChzdGFjayksICIgYXQgIiwgKmJsb2NrLCAiOiAiLApA
QCAtMjQ1LDEyICsyNDksMTIgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAg
Ly8gTm93IHBlcmZvcm0gdGhlIGNvbnZlcnNpb24uCiAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlv
blNldChwcm9jKTsKLSAgICBIYXNoTWFwPFN0YWNrU2xvdFZhbHVlKiwgVmFsdWUqPiBtYXBwaW5n
OworICAgIEhhc2hNYXA8U3RhY2tTbG90KiwgVmFsdWUqPiBtYXBwaW5nOwogICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgewogICAgICAgICBtYXBw
aW5nLmNsZWFyKCk7CiAKICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHN0YWNrVG9WYXJpYWJs
ZSkgewotICAgICAgICAgICAgU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gZW50cnkua2V5OworICAg
ICAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IGVudHJ5LmtleTsKICAgICAgICAgICAgIFNTQUNh
bGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IGVudHJ5LnZhbHVlOwogCiAgICAgICAgICAg
ICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYS5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywg
dmFyaWFibGUpOwpAQCAtMjU5LDcgKzI2Myw3IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJv
YykKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYg
OiBzc2EucGhpc0ZvckJsb2NrKGJsb2NrKSkgewotICAgICAgICAgICAgU3RhY2tTbG90VmFsdWUq
IHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07Cisg
ICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3BoaURlZi0+dmFy
aWFibGUoKS0+aW5kZXgoKV07CiAKICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRWYWx1
ZSgwLCBwaGlEZWYtPnZhbHVlKCkpOwogICAgICAgICAgICAgbWFwcGluZy5zZXQoc3RhY2ssIHBo
aURlZi0+dmFsdWUoKSk7CkBAIC0yNzEsNyArMjc1LDggQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJl
JiBwcm9jKQogCiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewogICAgICAg
ICAgICAgY2FzZSBMb2FkOiB7Ci0gICAgICAgICAgICAgICAgaWYgKFN0YWNrU2xvdFZhbHVlKiBz
dGFjayA9IHZhbHVlLT5jaGlsZCgwKS0+YXM8U3RhY2tTbG90VmFsdWU+KCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+Y2hpbGQoMCktPmFz
PFNsb3RCYXNlVmFsdWU+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFj
ayA9IHNsb3RCYXNlLT5zbG90KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogcmVw
bGFjZW1lbnQgPSBtYXBwaW5nLmdldChzdGFjaykpCiAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyZXBsYWNlbWVudCk7CiAgICAgICAgICAgICAgICAg
fQpAQCAtMjc5LDcgKzI4NCw4IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJvYykKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU3RvcmU6IHsKLSAg
ICAgICAgICAgICAgICBpZiAoU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gdmFsdWUtPmNoaWxkKDEp
LT5hczxTdGFja1Nsb3RWYWx1ZT4oKSkgeworICAgICAgICAgICAgICAgIGlmIChTbG90QmFzZVZh
bHVlKiBzbG90QmFzZSA9IHZhbHVlLT5jaGlsZCgxKS0+YXM8U2xvdEJhc2VWYWx1ZT4oKSkgewor
ICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gc2xvdEJhc2UtPnNsb3QoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrVG9WYXJpYWJsZS5jb250YWlucyhzdGFjaykp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcuc2V0KHN0YWNrLCB2YWx1ZS0+Y2hp
bGQoMCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7
CkBAIC0yOTksNyArMzA1LDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogICAgICAg
ICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYS5waGlzRm9yQmxvY2so
c3VjY2Vzc29yQmxvY2spKSB7CiAgICAgICAgICAgICAgICAgVmFsdWUqIHBoaSA9IHBoaURlZi0+
dmFsdWUoKTsKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFi
bGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7Ci0gICAgICAgICAgICAgICAgU3RhY2tTbG90VmFsdWUq
IHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAg
ICAgICBTdGFja1Nsb3QqIHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3ZhcmlhYmxlLT5pbmRleCgp
XTsKIAogICAgICAgICAgICAgICAgIFZhbHVlKiBtYXBwZWRWYWx1ZSA9IG1hcHBpbmcuZ2V0KHN0
YWNrKTsKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewpAQCAtMzE5LDEwICszMjUsNiBA
QCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKICAgICB9CiAKLSAgICAvLyBGaW5hbGx5LCBraWxsIHRoZSBzdGFjayBzbG90
cy4KLSAgICBmb3IgKFN0YWNrU2xvdFZhbHVlKiBzdGFjayA6IHZhcmlhYmxlVG9TdGFjaykKLSAg
ICAgICAgc3RhY2stPnJlcGxhY2VXaXRoTm9wKCk7Ci0KICAgICBpZiAodmVyYm9zZSkgewogICAg
ICAgICBkYXRhTG9nKCJCMyBhZnRlciBTU0EgY29udmVyc2lvbjpcbiIpOwogICAgICAgICBkYXRh
TG9nKHByb2MpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHJldmlzaW9uIDE5NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw4IEBACiAjaW5jbHVkZSAiQjNQ
aGFzZVNjb3BlLmgiCiAjaW5jbHVkZSAiQjNQaGlDaGlsZHJlbi5oIgogI2luY2x1ZGUgIkIzUHJv
Y2VkdXJlLmgiCi0jaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU2xv
dEJhc2VWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQjNVcHNp
bG9uVmFsdWUuaCIKICNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgogI2luY2x1ZGUgIkIzVmFsdWVJ
bmxpbmVzLmgiCkBAIC05MiwxNiArOTMsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJQaGkgdG1wIGZvciAiLCAqdmFsdWUsICI6ICIsIG1fcGhpVG9UbXBbdmFsdWVd
LCAiXG4iKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhc2UgQjM6OlN0YWNrU2xvdDogewotICAgICAgICAgICAgICAgIFN0YWNrU2xvdFZhbHVl
KiBzdGFja1Nsb3RWYWx1ZSA9IHZhbHVlLT5hczxTdGFja1Nsb3RWYWx1ZT4oKTsKLSAgICAgICAg
ICAgICAgICBtX3N0YWNrVG9TdGFjay5hZGQoc3RhY2tTbG90VmFsdWUsIG1fY29kZS5hZGRTdGFj
a1Nsb3Qoc3RhY2tTbG90VmFsdWUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBmb3IgKEIzOjpTdGFja1Nsb3QqIHN0YWNr
IDogbV9wcm9jZWR1cmUuc3RhY2tTbG90cygpKQorICAgICAgICAgICAgbV9zdGFja1RvU3RhY2su
YWRkKHN0YWNrLCBtX2NvZGUuYWRkU3RhY2tTbG90KHN0YWNrKSk7CisKICAgICAgICAgLy8gRmln
dXJlIG91dCB3aGljaCBibG9ja3MgYXJlIG5vdCByYXJlLgogICAgICAgICBtX2Zhc3RXb3JrbGlz
dC5wdXNoKG1fcHJvY2VkdXJlWzBdKTsKICAgICAgICAgd2hpbGUgKEIzOjpCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZmFzdFdvcmtsaXN0LnBvcCgpKSB7CkBAIC00MzMsOCArNDMyLDggQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBGcmFtZVBvaW50ZXI6CiAgICAgICAgICAgICByZXR1cm4gQXJnOjph
ZGRyKFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIG9mZnNldCk7CiAKLSAgICAgICAg
Y2FzZSBCMzo6U3RhY2tTbG90OgotICAgICAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2sobV9zdGFj
a1RvU3RhY2suZ2V0KGFkZHJlc3MtPmFzPFN0YWNrU2xvdFZhbHVlPigpKSwgb2Zmc2V0KTsKKyAg
ICAgICAgY2FzZSBTbG90QmFzZToKKyAgICAgICAgICAgIHJldHVybiBBcmc6OnN0YWNrKG1fc3Rh
Y2tUb1N0YWNrLmdldChhZGRyZXNzLT5hczxTbG90QmFzZVZhbHVlPigpLT5zbG90KCkpLCBvZmZz
ZXQpOwogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2soKTsK
QEAgLTE5MTQsMTAgKzE5MTMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIGNhc2UgQjM6OlN0YWNrU2xvdDogeworICAgICAgICBjYXNlIFNs
b3RCYXNlOiB7CiAgICAgICAgICAgICBhcHBlbmQoCiAgICAgICAgICAgICAgICAgTGVhLAotICAg
ICAgICAgICAgICAgIEFyZzo6c3RhY2sobV9zdGFja1RvU3RhY2suZ2V0KG1fdmFsdWUtPmFzPFN0
YWNrU2xvdFZhbHVlPigpKSksCisgICAgICAgICAgICAgICAgQXJnOjpzdGFjayhtX3N0YWNrVG9T
dGFjay5nZXQobV92YWx1ZS0+YXM8U2xvdEJhc2VWYWx1ZT4oKS0+c2xvdCgpKSksCiAgICAgICAg
ICAgICAgICAgdG1wKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtMjI4NCw3ICsyMjgzLDcgQEAgcHJpdmF0ZToKICAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBt
X3ZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCBtdXN0IGhhdmUgYSBUbXAgaW4g
QWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRoIGEgbm9uLW51bGwgVG1wIGlzICJwaW5uZWQi
LgogICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMg
aXRzIG93biBUbXAuCiAgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2ssIEFpcjo6QmFzaWNCbG9j
ayo+IG1fYmxvY2tUb0Jsb2NrOwotICAgIEhhc2hNYXA8U3RhY2tTbG90VmFsdWUqLCBBaXI6OlN0
YWNrU2xvdCo+IG1fc3RhY2tUb1N0YWNrOworICAgIEhhc2hNYXA8QjM6OlN0YWNrU2xvdCosIEFp
cjo6U3RhY2tTbG90Kj4gbV9zdGFja1RvU3RhY2s7CiAKICAgICBVc2VDb3VudHMgbV91c2VDb3Vu
dHM7CiAgICAgUGhpQ2hpbGRyZW4gbV9waGlDaGlsZHJlbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMTk1NTg0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsOCArOTUsOCBAQCB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3BjCiAgICAgY2FzZSBDb25zdEZs
b2F0OgogICAgICAgICBvdXQucHJpbnQoIkNvbnN0RmxvYXQiKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgU3RhY2tTbG90OgotICAgICAgICBvdXQucHJpbnQoIlN0YWNrU2xvdCIpOworICAg
IGNhc2UgU2xvdEJhc2U6CisgICAgICAgIG91dC5wcmludCgiU2xvdEJhc2UiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgQXJndW1lbnRSZWc6CiAgICAgICAgIG91dC5wcmludCgiQXJndW1l
bnRSZWciKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAx
OTU1ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsNyBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIC8vIFRo
ZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUg
dG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2FyZGxlc3Mgb2YKICAgICAvLyB3aGVyZSBpbiBjb250cm9s
IGZsb3cgeW91IHB1dCBpdC4gRWFjaCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRz
IGEgZGlzam9pbnQgcmFuZ2Ugb2YKICAgICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tT
bG90VmFsdWUgY2xhc3MuCi0gICAgU3RhY2tTbG90LAorICAgIFNsb3RCYXNlLAogCiAgICAgLy8g
VGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGlu
ZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCiAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGVyZSBp
biBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21waWxlciB0YWtlcyBjYXJlIHRv
IGVuc3VyZSB0aGF0IHdlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5jcHAJKHJldmlzaW9uIDE5NTU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJC
M0RhdGFTZWN0aW9uLmgiCiAjaW5jbHVkZSAiQjNEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiQjNP
cGFxdWVCeXByb2R1Y3RzLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKQEAgLTkx
LDYgKzkyLDIwIEBAIHZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3IKICAg
ICB9CiB9CiAKK1N0YWNrU2xvdCogUHJvY2VkdXJlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0
ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBhZGRTdGFj
a1Nsb3RJbmRleCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+IHNsb3QobmV3IFN0
YWNrU2xvdChpbmRleCwgYnl0ZVNpemUsIGtpbmQpKTsKKyAgICBTdGFja1Nsb3QqIHJlc3VsdCA9
IHNsb3QuZ2V0KCk7CisgICAgbV9zdGFja1Nsb3RzW2luZGV4XSA9IFdURk1vdmUoc2xvdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RhY2tTbG90KiBQcm9jZWR1cmU6OmFkZEFub255bW91
c1N0YWNrU2xvdChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIGFkZFN0YWNrU2xvdChzaXplb2ZU
eXBlKHR5cGUpLCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworfQorCiBWYWx1ZSogUHJvY2Vk
dXJlOjpjbG9uZShWYWx1ZSogdmFsdWUpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlPiBj
bG9uZSh2YWx1ZS0+Y2xvbmVJbXBsKCkpOwpAQCAtMTkyLDYgKzIwNywxMSBAQCB2b2lkIFByb2Nl
ZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAgICAgICAgIH0KICAgICAgICAgZGF0YUxv
ZygiICAgICIsIGRlZXBEdW1wKCp0aGlzLCB2YWx1ZSksICJcbiIpOwogICAgIH0KKyAgICBpZiAo
c3RhY2tTbG90cygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNsb3RzOlxu
Iik7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tTbG90cygpKQorICAgICAg
ICAgICAgb3V0LnByaW50KCIgICAgIiwgcG9pbnRlckR1bXAoc2xvdCksICI6ICIsIGRlZXBEdW1w
KHNsb3QpLCAiXG4iKTsKKyAgICB9CiAgICAgaWYgKG1fYnlwcm9kdWN0cy0+Y291bnQoKSkKICAg
ICAgICAgb3V0LnByaW50KCptX2J5cHJvZHVjdHMpOwogfQpAQCAtMjA2LDYgKzIyNiwxNCBAQCBW
ZWN0b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6YmxvY2tzSW5QCiAgICAgcmV0dXJuIEIzOjpi
bG9ja3NJblBvc3RPcmRlcihhdCgwKSk7CiB9CiAKK3ZvaWQgUHJvY2VkdXJlOjpkZWxldGVTdGFj
a1Nsb3QoU3RhY2tTbG90KiBzdGFja1Nsb3QpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGFj
a1Nsb3RzW3N0YWNrU2xvdC0+aW5kZXgoKV0uZ2V0KCkgPT0gc3RhY2tTbG90KTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghc3RhY2tTbG90LT5pc0xvY2tlZCgpKTsKKyAgICBtX3N0YWNrU2xvdEluZGV4
RnJlZUxpc3QuYXBwZW5kKHN0YWNrU2xvdC0+aW5kZXgoKSk7CisgICAgbV9zdGFja1Nsb3RzW3N0
YWNrU2xvdC0+aW5kZXgoKV0gPSBudWxscHRyOworfQorCiB2b2lkIFByb2NlZHVyZTo6ZGVsZXRl
VmFsdWUoVmFsdWUqIHZhbHVlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFsdWVzW3ZhbHVl
LT5pbmRleCgpXS5nZXQoKSA9PSB2YWx1ZSk7CkBAIC0yODIsNiArMzEwLDE3IEBAIGNvbnN0IFJl
Z2lzdGVyQXRPZmZzZXRMaXN0JiBQcm9jZWR1cmU6OmMKICAgICByZXR1cm4gY29kZSgpLmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKTsKIH0KIAorc2l6ZV90IFByb2NlZHVyZTo6YWRkU3RhY2tTbG90SW5k
ZXgoKQoreworICAgIGlmIChtX3N0YWNrU2xvdEluZGV4RnJlZUxpc3QuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHNpemVfdCBpbmRleCA9IG1fc3RhY2tTbG90cy5zaXplKCk7CisgICAgICAgIG1fc3Rh
Y2tTbG90cy5hcHBlbmQobnVsbHB0cik7CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIG1fc3RhY2tTbG90SW5kZXhGcmVlTGlzdC50YWtlTGFzdCgpOworfQor
CiBzaXplX3QgUHJvY2VkdXJlOjphZGRWYWx1ZUluZGV4KCkKIHsKICAgICBpZiAobV92YWx1ZUlu
ZGV4RnJlZUxpc3QuaXNFbXB0eSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuaAkocmV2aXNpb24gMTk1NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1
ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVk
ZSAiQjNTdGFja1Nsb3RLaW5kLmgiCiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSAiQjNW
YWx1ZUtleS5oIgogI2luY2x1ZGUgIlB1cmVOYU4uaCIKQEAgLTQ5LDYgKzUwLDcgQEAgY2xhc3Mg
QmFzaWNCbG9jazsKIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgQ0ZHOwogY2xhc3Mg
RG9taW5hdG9yczsKK2NsYXNzIFN0YWNrU2xvdDsKIGNsYXNzIFZhbHVlOwogCiBuYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQpAQCAtOTAsNiArOTIsOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBibG9ja3MuYXBwZW5kKGJsb2NrKTsKICAgICAgICAgc2V0QmxvY2tPcmRlckltcGwoYmxvY2tz
KTsKICAgICB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3QqIGFkZFN0YWNrU2xv
dCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgU3RhY2tTbG90KiBhZGRBbm9ueW1vdXNTdGFja1Nsb3QoVHlwZSk7CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgVmFs
dWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKQEAgLTE3Miw2ICsxNzcsNzUgQEAgcHVibGljOgog
ICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIFZlY3RvcjxC
YXNpY0Jsb2NrKj4gYmxvY2tzSW5Qb3N0T3JkZXIoKTsKIAorICAgIGNsYXNzIFN0YWNrU2xvdHND
b2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uKGNv
bnN0IFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgICAgIDogbV9wcm9jKHByb2MpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3Byb2MubV9zdGFja1Nsb3RzLnNpemUoKTsgfQorICAgICAgICBTdGFja1Nsb3QqIGF0KHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Byb2MubV9zdGFja1Nsb3RzW2luZGV4XS5nZXQo
KTsgfQorICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9j
b2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0YWNr
U2xvdHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAg
ICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoZmluZE5leHQoaW5kZXgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOworICAgICAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgdW5z
aWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbV9jb2xsZWN0aW9uLT5zaXplKCkgJiYgIW1fY29sbGVjdGlv
bi0+YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICAgICAgaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIGNvbnN0IFByb2NlZHVyZSYgbV9wcm9jOworICAgIH07CisKKyAgICBT
dGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFja1Nsb3RzKCkgY29uc3QgeyByZXR1cm4gU3RhY2tTbG90
c0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKKyAgICB2b2lkIGRlbGV0ZVN0YWNrU2xvdChTdGFja1Ns
b3QqKTsKKyAgICAKICAgICBjbGFzcyBWYWx1ZXNDb2xsZWN0aW9uIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIFZhbHVlc0NvbGxlY3Rpb24oY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUpCkBAIC0y
OTIsMTAgKzM2NiwxMyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc2V0QmxvY2tPcmRlcklt
cGwoVmVjdG9yPEJhc2ljQmxvY2sqPiYpOwogCisgICAgc2l6ZV90IGFkZFN0YWNrU2xvdEluZGV4
KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGFkZFZhbHVlSW5kZXgoKTsKLSAgICAK
KworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90Pj4gbV9zdGFja1Nsb3RzOwog
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKKyAgICBWZWN0b3I8c2l6ZV90
PiBtX3N0YWNrU2xvdEluZGV4RnJlZUxpc3Q7CiAgICAgVmVjdG9yPHNpemVfdD4gbV92YWx1ZUlu
ZGV4RnJlZUxpc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENGRz4gbV9jZmc7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPERvbWluYXRvcnM+IG1fZG9taW5hdG9yczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDE5NTU4NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgIkIzUGhpQ2hpbGRyZW4uaCIKICNpbmNs
dWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1B1cmVDU0UuaCIKKyNpbmNs
dWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdC5oIgogI2luY2x1
ZGUgIkIzVXBzaWxvblZhbHVlLmgiCiAjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKICNpbmNsdWRl
ICJCM1ZhbHVlS2V5SW5saW5lcy5oIgpAQCAtMjA3NiwxNCArMjA3OCwxOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgSW5kZXhTZXQ8U3Rh
Y2tTbG90PiBsaXZlU3RhY2tTbG90czsKKyAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIHNpemVfdCBzb3VyY2VJbmRleCA9IDA7
CiAgICAgICAgICAgICBzaXplX3QgdGFyZ2V0SW5kZXggPSAwOwogICAgICAgICAgICAgd2hpbGUg
KHNvdXJjZUluZGV4IDwgYmxvY2stPnNpemUoKSkgewogICAgICAgICAgICAgICAgIFZhbHVlKiB2
YWx1ZSA9IGJsb2NrLT5hdChzb3VyY2VJbmRleCsrKTsKLSAgICAgICAgICAgICAgICBpZiAod29y
a2xpc3Quc2F3KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBpZiAod29ya2xpc3Quc2F3KHZhbHVl
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2
YWx1ZS0+YXM8U2xvdEJhc2VWYWx1ZT4oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVT
dGFja1Nsb3RzLmFkZChzbG90QmFzZS0+c2xvdCgpKTsKICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPmF0KHRhcmdldEluZGV4KyspID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmRlbGV0
ZVZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IC8vIEl0J3Mgbm90IGVudGlyZWx5IGNsZWFyIGlmIHRoaXMgaXMgbmVlZGVkLiBJIHRoaW5rIGl0
IG1ha2VzIHNlbnNlIHRvIGhhdmUKQEAgLTIwOTUsNiArMjEwMSwxMiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYmxvY2stPnZhbHVlcygpLnJlc2l6ZSh0YXJnZXRJbmRl
eCk7CiAgICAgICAgIH0KKworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IG1fcHJvYy5z
dGFja1Nsb3RzKCkpIHsKKyAgICAgICAgICAgIGlmIChzbG90LT5pc0xvY2tlZCgpIHx8IGxpdmVT
dGFja1Nsb3RzLmNvbnRhaW5zKHNsb3QpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgbV9wcm9jLmRlbGV0ZVN0YWNrU2xvdChzbG90KTsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIHZvaWQgc2ltcGxpZnlTU0EoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU2xvdEJhc2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU2xvdEJhc2VWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NTU4NCkJKGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwOjE5NTU4NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Nsb3RCYXNlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK1N0YWNrU2xvdFZhbHVlOjp+U3RhY2tTbG90VmFsdWUoKQoreworfQorCit2b2lkIFN0YWNr
U2xvdFZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChjb21tYSwgImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6
ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisKK1ZhbHVlKiBTdGFja1Nsb3RWYWx1ZTo6Y2xv
bmVJbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IFN0YWNrU2xvdFZhbHVlKCp0aGlzKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Nsb3RCYXNlVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwyNCArMjQsMjYgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
U2xvdEJhc2VWYWx1ZS5oIgogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzU3Rh
Y2tTbG90LmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi1TdGFja1Nsb3RW
YWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK1Nsb3RCYXNlVmFsdWU6On5TbG90QmFzZVZhbHVlKCkK
IHsKIH0KIAotdm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21t
YSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3ZvaWQgU2xvdEJhc2VWYWx1ZTo6ZHVtcE1ldGEo
Q29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQu
cHJpbnQoY29tbWEsICJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIsIGtpbmQgPSAiLCBtX2tp
bmQpOworICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAobV9zbG90KSk7CiB9CiAKLVZh
bHVlKiBTdGFja1Nsb3RWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKK1ZhbHVlKiBTbG90QmFzZVZh
bHVlOjpjbG9uZUltcGwoKSBjb25zdAogewotICAgIHJldHVybiBuZXcgU3RhY2tTbG90VmFsdWUo
KnRoaXMpOworICAgIHJldHVybiBuZXcgU2xvdEJhc2VWYWx1ZSgqdGhpcyk7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xv
dEJhc2VWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Ns
b3RCYXNlVmFsdWUuaAkocmV2aXNpb24gMTk1NTg0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oOjE5NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Nsb3RCYXNlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNl
IEFpciB7CitjbGFzcyBTdGFja1Nsb3Q7Cit9IC8vIG5hbWVzcGFjZSBBaXIKKworY2xhc3MgSlNf
RVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgor
ICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09
IFN0YWNrU2xvdDsgfQorCisgICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBi
eXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIC8vIFRoaXMgZ2V0cyBhc3Np
Z25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxseSBwaW4g
c3RhY2sgc2xvdHMuIFVzZSB0aGUKKyAgICAvLyBzZXQgbWV0aG9kIHRvIGRvIHRoYXQuCisgICAg
aW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0K
KworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIG1lYW5pbmdsZXNzIHVubGVzcyB0aGUgc3RhY2sg
c2xvdCBpcyBMb2NrZWQuCisgICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUp
CisgICAgeworICAgICAgICBtX29mZnNldEZyb21GUCA9IHZhbHVlOworICAgIH0KKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworICAgIFZhbHVlKiBjbG9uZUltcGwoKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CisgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKKworICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmln
aW4gb3JpZ2luLCB1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBTdGFja1Nsb3QsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICAgICAsIG1fa2lu
ZChraW5kKQorICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAg
IHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgaW50
cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdFZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Nsb3RCYXNlVmFsdWUuaAkod29y
a2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMywzOCArMjMsMjQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICov
CiAKLSNpZm5kZWYgQjNTdGFja1Nsb3RWYWx1ZV9oCi0jZGVmaW5lIEIzU3RhY2tTbG90VmFsdWVf
aAorI2lmbmRlZiBCM1Nsb3RCYXNlVmFsdWVfaAorI2RlZmluZSBCM1Nsb3RCYXNlVmFsdWVfaAog
CiAjaWYgRU5BQkxFKEIzX0pJVCkKIAotI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgogI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKLW5h
bWVzcGFjZSBBaXIgewogY2xhc3MgU3RhY2tTbG90OwotfSAvLyBuYW1lc3BhY2UgQWlyCiAKLWNs
YXNzIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrU2xvdFZhbHVlIDogcHVibGljIFZhbHVlIHsKK2Ns
YXNzIEpTX0VYUE9SVF9QUklWQVRFIFNsb3RCYXNlVmFsdWUgOiBwdWJsaWMgVmFsdWUgewogcHVi
bGljOgotICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IFN0YWNrU2xvdDsgfQorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29k
ZSkgeyByZXR1cm4gb3Bjb2RlID09IFNsb3RCYXNlOyB9CiAKLSAgICB+U3RhY2tTbG90VmFsdWUo
KTsKKyAgICB+U2xvdEJhc2VWYWx1ZSgpOwogCi0gICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVTaXplOyB9Ci0gICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9Ci0KLSAgICAvLyBUaGlzIGdldHMgYXNzaWduZWQgYXQgdGhlIGVu
ZCBvZiBjb21waWxhdGlvbi4gQnV0LCB5b3UgY2FuIHRvdGFsbHkgcGluIHN0YWNrIHNsb3RzLiBV
c2UgdGhlCi0gICAgLy8gc2V0IG1ldGhvZCB0byBkbyB0aGF0LgotICAgIGludHB0cl90IG9mZnNl
dEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9Ci0KLSAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBpcyBtZWFuaW5nbGVzcyB1bmxlc3MgdGhlIHN0YWNrIHNsb3QgaXMgTG9ja2Vk
LgotICAgIHZvaWQgc2V0T2Zmc2V0RnJvbUZQKGludHB0cl90IHZhbHVlKQotICAgIHsKLSAgICAg
ICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKLSAgICB9CisgICAgU3RhY2tTbG90KiBzbG90KCkg
Y29uc3QgeyByZXR1cm4gbV9zbG90OyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBNZXRh
KENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC02MiwyNSAr
NDgsMjAgQEAgcHJvdGVjdGVkOgogICAgIFZhbHVlKiBjbG9uZUltcGwoKSBjb25zdCBvdmVycmlk
ZTsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CiAgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4
LCBPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQot
ICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBTdGFja1Nsb3QsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbikKLSAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQotICAgICAgICAs
IG1fa2luZChraW5kKQotICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAgU2xvdEJhc2VW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgU3RhY2tTbG90KiBzbG90KQorICAg
ICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBTbG90QmFzZSwgcG9pbnRlclR5cGUo
KSwgb3JpZ2luKQorICAgICAgICAsIG1fc2xvdChzbG90KQogICAgIHsKICAgICB9CiAKLSAgICB1
bnNpZ25lZCBtX2J5dGVTaXplOwotICAgIFN0YWNrU2xvdEtpbmQgbV9raW5kOwotICAgIGludHB0
cl90IG1fb2Zmc2V0RnJvbUZQOworICAgIFN0YWNrU2xvdCogbV9zbG90OwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQogCi0jZW5kaWYg
Ly8gQjNTdGFja1Nsb3RWYWx1ZV9oCisjZW5kaWYgLy8gQjNTbG90QmFzZVZhbHVlX2gKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdC5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K1N0YWNrU2xvdDo6flN0YWNrU2xvdCgpCit7Cit9CisKK3ZvaWQgU3RhY2tTbG90OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFjayIsIG1faW5kZXgp
OworfQorCit2b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwgb2Zmc2V0RnJv
bUZQID0gIiwgbV9vZmZzZXRGcm9tRlAsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworfQorCitTdGFj
a1Nsb3Q6OlN0YWNrU2xvdCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgYnl0ZVNpemUsIFN0YWNr
U2xvdEtpbmQga2luZCkKKyAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgLCBtX2J5dGVTaXplKGJ5
dGVTaXplKQorICAgICwgbV9raW5kKGtpbmQpCit7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2tTbG90LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3Rh
Y2tTbG90X2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7
CisKK25hbWVzcGFjZSBBaXIgeworY2xhc3MgU3RhY2tTbG90OworfSAvLyBuYW1lc3BhY2UgQWly
CisKK2NsYXNzIFN0YWNrU2xvdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhY2tTbG90
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIH5TdGFja1Ns
b3QoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6
ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQor
ICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gU3RhY2tTbG90S2lu
ZDo6TG9ja2VkOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
OyB9CisKKyAgICAvLyBUaGlzIGdldHMgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlv
bi4gQnV0LCB5b3UgY2FuIHRvdGFsbHkgcGluIHN0YWNrIHNsb3RzLiBVc2UgdGhlCisgICAgLy8g
c2V0IG1ldGhvZCB0byBkbyB0aGF0LgorICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBt
ZWFuaW5nbGVzcyB1bmxlc3MgdGhlIHN0YWNrIHNsb3QgaXMgTG9ja2VkLgorICAgIHZvaWQgc2V0
T2Zmc2V0RnJvbUZQKGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9vZmZzZXRGcm9t
RlAgPSB2YWx1ZTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgU3RhY2tTbG90KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBieXRlU2l6ZSwg
U3RhY2tTbG90S2luZCk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIHVuc2lnbmVkIG1f
Ynl0ZVNpemU7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZz
ZXRGcm9tRlAgeyAwIH07Cit9OworCitjbGFzcyBEZWVwU3RhY2tTbG90RHVtcCB7CitwdWJsaWM6
CisgICAgRGVlcFN0YWNrU2xvdER1bXAoY29uc3QgU3RhY2tTbG90KiBzbG90KQorICAgICAgICA6
IG1fc2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3QpCisgICAgICAgICAgICBtX3Ns
b3QtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgi
PG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFN0YWNrU2xvdCogbV9zbG90
OworfTsKKworaW5saW5lIERlZXBTdGFja1Nsb3REdW1wIGRlZXBEdW1wKGNvbnN0IFN0YWNrU2xv
dCogc2xvdCkKK3sKKyAgICByZXR1cm4gRGVlcFN0YWNrU2xvdER1bXAoc2xvdCk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzU3RhY2tTbG90X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMTk1NTg0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgot
Ci0jaWYgRU5BQkxFKEIzX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0K
LVN0YWNrU2xvdFZhbHVlOjp+U3RhY2tTbG90VmFsdWUoKQotewotfQotCi12b2lkIFN0YWNrU2xv
dFZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBj
b25zdAotewotICAgIG91dC5wcmludChjb21tYSwgImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwg
Iiwga2luZCA9ICIsIG1fa2luZCk7Ci19Ci0KLVZhbHVlKiBTdGFja1Nsb3RWYWx1ZTo6Y2xvbmVJ
bXBsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbmV3IFN0YWNrU2xvdFZhbHVlKCp0aGlzKTsKLX0K
LQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCi0KLSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCShyZXZp
c2lvbiAxOTU1ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEIzU3RhY2tTbG90VmFsdWVf
aAotI2RlZmluZSBCM1N0YWNrU2xvdFZhbHVlX2gKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLSNp
bmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKLSNpbmNsdWRlICJCM1ZhbHVlLmgiCi0KLW5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewotCi1uYW1lc3BhY2UgQWlyIHsKLWNsYXNzIFN0YWNr
U2xvdDsKLX0gLy8gbmFtZXNwYWNlIEFpcgotCi1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBTdGFj
a1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgYWNj
ZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9Ci0KLSAg
ICB+U3RhY2tTbG90VmFsdWUoKTsKLQotICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9ieXRlU2l6ZTsgfQotICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2luZDsgfQotCi0gICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2Yg
Y29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBzbG90cy4gVXNlIHRo
ZQotICAgIC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4KLSAgICBpbnRwdHJfdCBvZmZzZXRGcm9t
RlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQotCi0gICAgLy8gTm90ZSB0aGF0
IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlzIExvY2tlZC4KLSAg
ICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1f
b2Zmc2V0RnJvbUZQID0gdmFsdWU7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBkdW1w
TWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
VmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIGZyaWVu
ZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKLSAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwotCi0g
ICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVk
IGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENo
ZWNrZWRPcGNvZGUsIFN0YWNrU2xvdCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKQotICAgICAgICAs
IG1fYnl0ZVNpemUoYnl0ZVNpemUpCi0gICAgICAgICwgbV9raW5kKGtpbmQpCi0gICAgICAgICwg
bV9vZmZzZXRGcm9tRlAoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbV9ieXRlU2l6
ZTsKLSAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKLSAgICBpbnRwdHJfdCBtX29mZnNldEZyb21G
UDsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi0jZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKLQotI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAotCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxOTU1ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDggQEAKICNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJCM01lbW9yeVZh
bHVlLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdFZh
bHVlLmgiCisjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja1Ns
b3QuaCIKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTE1Miw3ICsxNTMsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0
ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0g
RmxvYXQsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgICAgIGNhc2UgU2xvdEJhc2U6CiAgICAgICAg
ICAgICBjYXNlIEZyYW1lUG9pbnRlcjoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUt
Pm51bUNoaWxkcmVuKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWUtPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwpAQCAt
NDEwLDEwICs0MTEsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZhbGlkYXRlU3RhY2tBY2Nlc3Mo
VmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKTsKLSAgICAgICAgU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gdmFs
dWUtPmxhc3RDaGlsZCgpLT5hczxTdGFja1Nsb3RWYWx1ZT4oKTsKLSAgICAgICAgaWYgKCFzdGFj
aykKKyAgICAgICAgU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+bGFzdENoaWxkKCkt
PmFzPFNsb3RCYXNlVmFsdWU+KCk7CisgICAgICAgIGlmICghc2xvdEJhc2UpCiAgICAgICAgICAg
ICByZXR1cm47CiAKKyAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHNsb3RCYXNlLT5zbG90KCk7
CisKICAgICAgICAgVkFMSURBVEUobWVtb3J5LT5vZmZzZXQoKSA+PSAwLCAoIkF0ICIsICp2YWx1
ZSkpOwogICAgICAgICBWQUxJREFURShtZW1vcnktPm9mZnNldCgpICsgbWVtb3J5LT5hY2Nlc3NC
eXRlU2l6ZSgpIDw9IHN0YWNrLT5ieXRlU2l6ZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NTU4NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsOCBAQAogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJC
M09yaWdpbkR1bXAuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKLSNpbmNsdWRl
ICJCM1N0YWNrU2xvdFZhbHVlLmgiCisjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCisjaW5j
bHVkZSAiQjNTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1
ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUtleUlubGluZXMuaCIKQEAg
LTM4Myw3ICszODQsNyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICBjYXNl
IENvbnN0NjQ6CiAgICAgY2FzZSBDb25zdERvdWJsZToKICAgICBjYXNlIENvbnN0RmxvYXQ6Ci0g
ICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgY2FzZSBTbG90QmFzZToKICAgICBjYXNlIEFyZ3VtZW50
UmVnOgogICAgIGNhc2UgRnJhbWVQb2ludGVyOgogICAgIGNhc2UgQWRkOgpAQCAtNTM1LDYgKzUz
NiwxMCBAQCBWYWx1ZUtleSBWYWx1ZTo6a2V5KCkgY29uc3QKICAgICAgICAgcmV0dXJuIFZhbHVl
S2V5KAogICAgICAgICAgICAgQXJndW1lbnRSZWcsIHR5cGUoKSwKICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDY0X3Q+KGFzPEFyZ3VtZW50UmVnVmFsdWU+KCktPmFyZ3VtZW50UmVnKCkuaW5k
ZXgoKSkpOworICAgIGNhc2UgU2xvdEJhc2U6CisgICAgICAgIHJldHVybiBWYWx1ZUtleSgKKyAg
ICAgICAgICAgIFNsb3RCYXNlLCB0eXBlKCksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ2
NF90PihhczxTbG90QmFzZVZhbHVlPigpLT5zbG90KCktPmluZGV4KCkpKTsKICAgICBkZWZhdWx0
OgogICAgICAgICByZXR1cm4gVmFsdWVLZXkoKTsKICAgICB9CkBAIC01NjUsNyArNTcwLDcgQEAg
dm9pZCBWYWx1ZTo6Y2hlY2tPcGNvZGUoT3Bjb2RlIG9wY29kZSkKICAgICBBU1NFUlQoIUNvbnRy
b2xWYWx1ZTo6YWNjZXB0cyhvcGNvZGUpKTsKICAgICBBU1NFUlQoIU1lbW9yeVZhbHVlOjphY2Nl
cHRzKG9wY29kZSkpOwogICAgIEFTU0VSVCghUGF0Y2hwb2ludFZhbHVlOjphY2NlcHRzKG9wY29k
ZSkpOwotICAgIEFTU0VSVCghU3RhY2tTbG90VmFsdWU6OmFjY2VwdHMob3Bjb2RlKSk7CisgICAg
QVNTRVJUKCFTbG90QmFzZVZhbHVlOjphY2NlcHRzKG9wY29kZSkpOwogICAgIEFTU0VSVCghVXBz
aWxvblZhbHVlOjphY2NlcHRzKG9wY29kZSkpOwogfQogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJM
RUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5jcHAJKHJldmlzaW9u
IDE5NTU4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1Zh
bHVlLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNTbG90
QmFzZVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1Zh
bHVlS2V5SW5saW5lcy5oIgogCkBAIC0xMDQsNiArMTA1LDggQEAgVmFsdWUqIFZhbHVlS2V5Ojpt
YXRlcmlhbGl6ZShQcm9jZWR1cmUmIAogICAgICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3RGbG9h
dFZhbHVlPihvcmlnaW4sIGZsb2F0VmFsdWUoKSk7CiAgICAgY2FzZSBBcmd1bWVudFJlZzoKICAg
ICAgICAgcmV0dXJuIHByb2MuYWRkPEFyZ3VtZW50UmVnVmFsdWU+KG9yaWdpbiwgUmVnOjpmcm9t
SW5kZXgoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKCkpKSk7CisgICAgY2FzZSBTbG90QmFz
ZToKKyAgICAgICAgcmV0dXJuIHByb2MuYWRkPFNsb3RCYXNlVmFsdWU+KG9yaWdpbiwgcHJvYy5z
dGFja1Nsb3RzKClbdmFsdWUoKV0pOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lv
biAxOTU1ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsOCBAQAogI2luY2x1ZGUgIkIzTWF0aEV4dHJhcy5oIgogI2lu
Y2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgotI2luY2x1
ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKyNpbmNsdWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKKyNp
bmNsdWRlICJCM1N0YWNrU2xvdC5oIgogI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zLmgiCiAjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVXBzaWxvblZh
bHVlLmgiCkBAIC00OTg3LDcgKzQ5ODgsOCBAQCB2b2lkIHRlc3RTdGFja1Nsb3QoKQogICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4oCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCi0gICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxTdGFja1Nsb3RWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEsIFN0YWNrU2xv
dEtpbmQ6OkFub255bW91cykpOworICAgICAgICByb290LT5hcHBlbmROZXc8U2xvdEJhc2VWYWx1
ZT4oCisgICAgICAgICAgICBwcm9jLCBPcmlnaW4oKSwgcHJvYy5hZGRTdGFja1Nsb3QoMSwgU3Rh
Y2tTbG90S2luZDo6QW5vbnltb3VzKSkpOwogCiAgICAgdm9pZCogc3RhY2tTbG90ID0gY29tcGls
ZUFuZFJ1bjx2b2lkKj4ocHJvYyk7CiAgICAgQ0hFQ0soc3RhY2tTbG90IDwgJnByb2MpOwpAQCAt
NTAxNSw4ICs1MDE3LDggQEAgdm9pZCB0ZXN0U3RvcmVMb2FkU3RhY2tTbG90KGludCB2YWx1ZSkK
ICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOwogCi0gICAgU3RhY2tTbG90VmFsdWUqIHN0YWNrID0gcm9vdC0+YXBwZW5kTmV3PFN0YWNr
U2xvdFZhbHVlPigKLSAgICAgICAgcHJvYywgT3JpZ2luKCksIHNpemVvZihpbnQpLCBTdGFja1Ns
b3RLaW5kOjpBbm9ueW1vdXMpOworICAgIFNsb3RCYXNlVmFsdWUqIHN0YWNrID0gcm9vdC0+YXBw
ZW5kTmV3PFNsb3RCYXNlVmFsdWU+KAorICAgICAgICBwcm9jLCBPcmlnaW4oKSwgcHJvYy5hZGRT
dGFja1Nsb3Qoc2l6ZW9mKGludCksIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykpOwogCiAgICAg
cm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKICAgICAgICAgcHJvYywgU3RvcmUsIE9yaWdp
bigpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZp
c2lvbiAxOTU1ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lh
bC5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCi0jaW5jbHVkZSAiQjNTdGFja1Ns
b3RWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIApAQCAtNTIsMTcgKzUyLDE3IEBAIEJhc2lj
QmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWUKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1TdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3Rh
Y2tTbG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCitTdGFja1Nsb3QqIENvZGU6
OmFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBCMzo6
U3RhY2tTbG90KiBiM1Nsb3QpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xv
dChuZXcgU3RhY2tTbG90KGJ5dGVTaXplLCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCB2YWx1
ZSkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+IHNsb3QobmV3IFN0YWNrU2xvdChi
eXRlU2l6ZSwgbV9zdGFja1Nsb3RzLnNpemUoKSwga2luZCwgYjNTbG90KSk7CiAgICAgU3RhY2tT
bG90KiByZXN1bHQgPSBzbG90LmdldCgpOwogICAgIG1fc3RhY2tTbG90cy5hcHBlbmQoV1RGTW92
ZShzbG90KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotU3RhY2tTbG90KiBDb2RlOjphZGRT
dGFja1Nsb3QoU3RhY2tTbG90VmFsdWUqIHZhbHVlKQorU3RhY2tTbG90KiBDb2RlOjphZGRTdGFj
a1Nsb3QoQjM6OlN0YWNrU2xvdCogYjNTbG90KQogewotICAgIHJldHVybiBhZGRTdGFja1Nsb3Qo
dmFsdWUtPmJ5dGVTaXplKCksIHZhbHVlLT5raW5kKCksIHZhbHVlKTsKKyAgICByZXR1cm4gYWRk
U3RhY2tTbG90KGIzU2xvdC0+Ynl0ZVNpemUoKSwgYjNTbG90LT5raW5kKCksIGIzU2xvdCk7CiB9
CiAKIFNwZWNpYWwqIENvZGU6OmFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+IHNw
ZWNpYWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNp
b24gMTk1NTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDggKzY4LDggQEAgcHVibGljOgogICAgIC8vIG9mIGFueSBwcmlv
ciBzdGFjayBzbG90LiBJbiBmYWN0LCBhbGwgc3RhY2sgc2xvdHMgeW91IGNyZWF0ZSBpbiB0aGUg
ZnV0dXJlIHdpbGwgaGF2ZSBhbiBpbmRleAogICAgIC8vIHRoYXQgaXMgPj0gc3RhY2tTbG90cygp
LnNpemUoKS4KICAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCgK
LSAgICAgICAgdW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVl
KiA9IG51bGxwdHIpOwotICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KFN0YWNrU2xvdFZhbHVl
Kik7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBCMzo6U3RhY2tT
bG90KiA9IG51bGxwdHIpOworICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KEIzOjpTdGFja1Ns
b3QqKTsKIAogICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90
LmNwcAkocmV2aXNpb24gMTk1NTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTdGFja1Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDE1ICsyOCwxNSBAQAogCiAjaWYgRU5B
QkxFKEIzX0pJVCkKIAotI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKyNpbmNsdWRlICJC
M1N0YWNrU2xvdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CiAKIHZvaWQgU3RhY2tTbG90OjpzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUp
CiB7CiAgICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKLSAgICBpZiAobV92YWx1ZSkKLSAgICAg
ICAgbV92YWx1ZS0+bV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKKyAgICBpZiAobV9iM1Nsb3QpCisg
ICAgICAgIG1fYjNTbG90LT5tX29mZnNldEZyb21GUCA9IHZhbHVlOwogfQogCiB2b2lkIFN0YWNr
U2xvdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtNDcsMTYgKzQ3LDE2IEBAIHZv
aWQgU3RhY2tTbG90OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKIHZvaWQgU3RhY2tTbG90Ojpk
ZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCgiYnl0ZVNp
emUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21GUCwg
Iiwga2luZCA9ICIsIG1fa2luZCk7Ci0gICAgaWYgKG1fdmFsdWUpCi0gICAgICAgIG91dC5wcmlu
dCgiLCB2YWx1ZSA9ICIsICptX3ZhbHVlKTsKKyAgICBpZiAobV9iM1Nsb3QpCisgICAgICAgIG91
dC5wcmludCgiLCBiM1Nsb3QgPSAiLCAqbV9iM1Nsb3QsICI6ICgiLCBCMzo6ZGVlcER1bXAobV9i
M1Nsb3QpLCAiKSIpOwogfQogCi1TdGFja1Nsb3Q6OlN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6
ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtpbmQga2luZCwgU3RhY2tTbG90VmFsdWUqIHZh
bHVlKQorU3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGlu
ZGV4LCBTdGFja1Nsb3RLaW5kIGtpbmQsIEIzOjpTdGFja1Nsb3QqIGIzU2xvdCkKICAgICA6IG1f
Ynl0ZVNpemUoYnl0ZVNpemUpCiAgICAgLCBtX2luZGV4KGluZGV4KQotICAgICwgbV9vZmZzZXRG
cm9tRlAodmFsdWUgPyB2YWx1ZS0+b2Zmc2V0RnJvbUZQKCkgOiAwKQorICAgICwgbV9vZmZzZXRG
cm9tRlAoYjNTbG90ID8gYjNTbG90LT5vZmZzZXRGcm9tRlAoKSA6IDApCiAgICAgLCBtX2tpbmQo
a2luZCkKLSAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgLCBtX2IzU2xvdChiM1Nsb3QpCiB7CiAg
ICAgQVNTRVJUKGJ5dGVTaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3RhY2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2aXNpb24gMTk1NTg0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi1jbGFzcyBTdGFja1Nsb3RWYWx1
ZTsKK2NsYXNzIFN0YWNrU2xvdDsKIAogbmFtZXNwYWNlIEFpciB7CiAKQEAgLTY1LDcgKzY1LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gODsKICAgICB9CiAKLSAgICBTdGFja1Nsb3RWYWx1
ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgQjM6OlN0YWNrU2xvdCog
YjNTbG90KCkgY29uc3QgeyByZXR1cm4gbV9iM1Nsb3Q7IH0KIAogICAgIC8vIFplcm8gbWVhbnMg
dGhhdCBpdCdzIG5vdCB5ZXQgYXNzaWduZWQuCiAgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkg
Y29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KQEAgLTgwLDEzICs4MCwxMyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlOwogCi0gICAgU3RhY2tTbG90KHVu
c2lnbmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90
VmFsdWUqKTsKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4
LCBTdGFja1Nsb3RLaW5kLCBCMzo6U3RhY2tTbG90Kik7CiAgICAgCiAgICAgdW5zaWduZWQgbV9i
eXRlU2l6ZTsKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIGludHB0cl90IG1fb2Zmc2V0RnJv
bUZQOwogICAgIFN0YWNrU2xvdEtpbmQgbV9raW5kOwotICAgIFN0YWNrU2xvdFZhbHVlKiBtX3Zh
bHVlOworICAgIEIzOjpTdGFja1Nsb3QqIG1fYjNTbG90OwogfTsKIAogY2xhc3MgRGVlcFN0YWNr
U2xvdER1bXAgewpAQCAtMTE5LDcgKzExOSw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBpbmxpbmUg
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6QjM6OkFpcjo6U3RhY2tT
bG90KiBzdGFja1Nsb3QpCiB7Ci0gICAgb3V0LnByaW50KCpzdGFja1Nsb3QpOworICAgIG91dC5w
cmludChwb2ludGVyRHVtcChzdGFja1Nsb3QpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCShyZXZpc2lv
biAxOTU1ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAj
aW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgot
I2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdC5oIgog
I2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCkBAIC04NCw2ICs4NCwxMiBAQCB2b2lkIGNvbXBp
bGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpbnQgbG9jYWxzT2Zmc2V0ID0K
ICAgICAgICAgc3RhdGUuY2FwdHVyZWRWYWx1ZS0+b2Zmc2V0RnJvbUZQKCkgLyBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpICsgZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOworICAgIGlmIChzaG91bGRE
dW1wRGlzYXNzZW1ibHkoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgImxvY2Fs
c09mZnNldCA9ICIsIGxvY2Fsc09mZnNldCwgIiBmb3Igc3RhY2sgc2xvdDogIiwKKyAgICAgICAg
ICAgIHBvaW50ZXJEdW1wKHN0YXRlLmNhcHR1cmVkVmFsdWUpLCAiIGF0ICIsIFJhd1BvaW50ZXIo
c3RhdGUuY2FwdHVyZWRWYWx1ZSksICJcbiIpOworICAgIH0KKyAgICAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5zaXplKCk7IGktLTspIHsKICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBncmFwaC5tX2lubGluZVZhcmlh
YmxlRGF0YVtpXS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5jcHAJKHJldmlzaW9uIDE5NTU4NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OSw5ICs3OSwxMCBAQCB2b2lkIE91dHB1dDo6YXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2spCiAg
ICAgbV9ibG9jayA9IGJsb2NrOwogfQogCi1TdGFja1Nsb3RWYWx1ZSogT3V0cHV0Ojpsb2NrZWRT
dGFja1Nsb3Qoc2l6ZV90IGJ5dGVzKQorU2xvdEJhc2VWYWx1ZSogT3V0cHV0Ojpsb2NrZWRTdGFj
a1Nsb3Qoc2l6ZV90IGJ5dGVzKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8U3Rh
Y2tTbG90VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGJ5dGVzLCBTdGFja1Nsb3RLaW5kOjpMb2Nr
ZWQpOworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8U2xvdEJhc2VWYWx1ZT4oCisgICAg
ICAgIG1fcHJvYywgb3JpZ2luKCksIG1fcHJvYy5hZGRTdGFja1Nsb3QoYnl0ZXMsIFN0YWNrU2xv
dEtpbmQ6OkxvY2tlZCkpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpuZWcoTFZhbHVlIHZhbHVlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuaAkocmV2aXNpb24gMTk1
NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKICNp
bmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKLSNpbmNs
dWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisjaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCiAj
aW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgogI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCiAj
aW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJsaWM6CiAK
ICAgICBMVmFsdWUgZnJhbWVQb2ludGVyKCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIz
OjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4oKSk7IH0KIAotICAgIEIz
OjpTdGFja1Nsb3RWYWx1ZSogbG9ja2VkU3RhY2tTbG90KHNpemVfdCBieXRlcyk7CisgICAgQjM6
OlNsb3RCYXNlVmFsdWUqIGxvY2tlZFN0YWNrU2xvdChzaXplX3QgYnl0ZXMpOwogCiAgICAgTFZh
bHVlIGNvbnN0Qm9vbChib29sIHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6
OkNvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOyB9CiAgICAgTFZhbHVlIGNv
bnN0SW50MzIoaW50MzJfdCB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpD
b25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHZhbHVlKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5
NTU4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsOSArMjA3LDkgQEAgcHVibGljOgogCiAjaWYgRlRMX1VT
RVNfQjMKICAgICAgICAgc2l6ZV90IHNpemVPZkNhcHR1cmVkID0gc2l6ZW9mKEpTVmFsdWUpICog
bV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7Ci0gICAgICAgIEIzOjpTdGFja1Nsb3RWYWx1ZSog
Y2FwdHVyZWRCYXNlID0gbV9vdXQubG9ja2VkU3RhY2tTbG90KHNpemVPZkNhcHR1cmVkKTsKKyAg
ICAgICAgQjM6OlNsb3RCYXNlVmFsdWUqIGNhcHR1cmVkQmFzZSA9IG1fb3V0LmxvY2tlZFN0YWNr
U2xvdChzaXplT2ZDYXB0dXJlZCk7CiAgICAgICAgIG1fY2FwdHVyZWQgPSBtX291dC5hZGQoY2Fw
dHVyZWRCYXNlLCBtX291dC5jb25zdEludFB0cihzaXplT2ZDYXB0dXJlZCkpOwotICAgICAgICBz
dGF0ZS0+Y2FwdHVyZWRWYWx1ZSA9IGNhcHR1cmVkQmFzZTsKKyAgICAgICAgc3RhdGUtPmNhcHR1
cmVkVmFsdWUgPSBjYXB0dXJlZEJhc2UtPnNsb3QoKTsKICNlbHNlIC8vIEZUTF9VU0VTX0IzCiAg
ICAgICAgIExWYWx1ZSBjYXB0dXJlZEFsbG9jYSA9IG1fb3V0LmFsbG9jYShhcnJheVR5cGUobV9v
dXQuaW50NjQsIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsKSk7CiAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTk1NTg0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3
ICs0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgQjMgewogY2xhc3MgUGF0Y2hw
b2ludFZhbHVlOwotY2xhc3MgU3RhY2tTbG90VmFsdWU7CitjbGFzcyBTdGFja1Nsb3Q7CiB9IC8v
IG5hbWVzcGFjZSBCMwogCiBuYW1lc3BhY2UgRlRMIHsKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGlj
OgogICAgIC8vIGFyZSBubyBhcHBsaWNhYmxlIGNhdGNoIGJsb2NrcyBhbnl3aGVyZSBpbiB0aGUg
R3JhcGguCiAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGRlZmF1bHRFeGNl
cHRpb25IYW5kbGU7CiAgICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+IGV4Y2VwdGlvbkhhbmRs
ZXIgeyBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD46OmNyZWF0ZSgpIH07Ci0gICAgQjM6OlN0YWNr
U2xvdFZhbHVlKiBjYXB0dXJlZFZhbHVlIHsgbnVsbHB0ciB9OworICAgIEIzOjpTdGFja1Nsb3Qq
IGNhcHR1cmVkVmFsdWUgeyBudWxscHRyIH07CiAjZWxzZSAvLyBGVExfVVNFU19CMwogICAgIHVu
c2lnbmVkIGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEIHsgVUlOVF9NQVgg
fTsKICAgICB1bnNpZ25lZCBoYW5kbGVFeGNlcHRpb25TdGFja21hcElEIHsgVUlOVF9NQVggfTsK
</data>
<flag name="review"
          id="294776"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>