<?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>166847</bug_id>
          
          <creation_ts>2017-01-09 09:59:29 -0800</creation_ts>
          <short_desc>GC barrier shouldn&apos;t need any fences</short_desc>
          <delta_ts>2017-01-09 21:00:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=166878</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>165909</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1265040</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-09 09:59:29 -0800</bug_when>
    <thetext>My initial implementation of the retreating wavefront barrier required a store-load fence.

This is not necessary if you do some double-buffering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265061</commentid>
    <comment_count>1</comment_count>
      <attachid>298366</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-09 10:58:09 -0800</bug_when>
    <thetext>Created attachment 298366
work in progress

I ought to be able to benchmark this soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265125</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-01-09 13:47:56 -0800</bug_when>
    <thetext>&lt;rdar://problem/29934388&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265277</commentid>
    <comment_count>3</comment_count>
      <attachid>298439</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-09 20:18:02 -0800</bug_when>
    <thetext>Created attachment 298439
all of the optimizations _except_ the rescan/fence removal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265285</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-09 20:56:46 -0800</bug_when>
    <thetext>It appears that the barrier based on the rescan bit is best for programs that repeatedly store into the same object.

The barrier based on an optimized, and inlined, store-load fence is best for programs that obey the generational hypothesis.

I think that the latter kind of barrier is also giving better splay-latency numbers.

I&apos;m going to create a new bug for the optimized (but not rescan log) barrier, and get that landed.  I&apos;ll leave this bug in limbo for now.  It seems like it&apos;s sometimes, but not always, a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265286</commentid>
    <comment_count>5</comment_count>
      <attachid>298443</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-09 20:57:52 -0800</bug_when>
    <thetext>Created attachment 298443
it seems to work

But it doesn&apos;t seem as good as the TSO barrier, after the TSO barrier gets all of the other optimizations.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298366</attachid>
            <date>2017-01-09 10:58:09 -0800</date>
            <delta_ts>2017-01-09 20:57:52 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>42395</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTA0OTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzE0LDYgKzcxNCw3IEBACiAJCTBGQ0VGQURGMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRp
b24uY3BwICovOyB9OwogCQkwRkNFRkFFMDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQURF
MTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDJENjJE
MUUyNDBDRDQwMEE3RUIzRCAvKiBXcml0ZUJhcnJpZXJCdWZmZXJJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyRDYyQzFFMjQwQ0QxMDBB
N0VCM0QgLyogV3JpdGVCYXJyaWVyQnVmZmVySW5saW5lcy5oICovOyB9OwogCQkwRkQzQzgyNjE0
MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2
ZXIuY3BwICovOyB9OwogCQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMjE0
MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi87IH07CiAJCTBGRDNFNDAxMUI2MThBQUYw
MEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0UzRkYx
QjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5jcHAgKi87IH07CkBAIC0zMTUyLDYgKzMxNTMsNyBAQAogCQkwRkNFRkFERDE4MDczOEMw
MDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRlRMTG9jYXRpb24uY3BwOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZU
TExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExvY2F0aW9u
Lmg7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQyRDYyQzFFMjQwQ0QxMDBBN0VCM0QgLyogV3JpdGVCYXJy
aWVyQnVmZmVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0
ZUJhcnJpZXJCdWZmZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgx
Q0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Ry
aXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA7IHBhdGgg
PSBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU3ODUsNiArNTc4Nyw3IEBACiAJCQkJMTQxNTAx
MzIxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggKi8sCiAJCQkJMkE0RUM5MDkx
ODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi8sCiAJCQkJMkE0RUM5
MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovLAorCQkJCTBGRDJE
NjJDMUUyNDBDRDEwMEE3RUIzRCAvKiBXcml0ZUJhcnJpZXJCdWZmZXJJbmxpbmVzLmggKi8sCiAJ
CQkJMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwICov
LAogCQkJCTBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0Lmgg
Ki8sCiAJCQkpOwpAQCAtNzc0MCw2ICs3NzQzLDcgQEAKIAkJCQkwRkZBNTQ5ODE2Qjg4MzUzMDBC
M0E5ODIgLyogQTY0RE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRkU1MUMxOTIyQTNC
QzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFMzBG
M0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZEMkQ2MkQxRTI0MENENDAwQTdFQjNEIC8qIFdyaXRlQmFycmllckJ1ZmZlcklubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENDkzN0M0MUREQkU2MTQwMDc3QzgwNyAvKiBBYnN0
cmFjdE1vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NUYwRjUxNEQxMDYzQzAw
QUM3NjQ5IC8qIEFic3RyYWN0UEMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNzBCNEY2MUJGMjYy
MDUwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNl
LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIxMDQ5
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjk2NCw4ICsyOTY0LDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAg
ICBjYXNlIFN0b3JlQmFycmllcjoKLSAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjogeworICAg
IGNhc2UgU3RvcmVCYXJyaWVyOiB7CiAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3Bl
Y0NlbGwpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyOSwxMSAr
NDI5LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICB3cml0ZShKU0NlbGxfY2VsbFN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAg
ICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKLSAgICAgICAgcmVhZChIZWFwKTsKLSAgICAgICAg
d3JpdGUoSlNDZWxsX2NlbGxTdGF0ZSk7Ci0gICAgICAgIHJldHVybjsKLQogICAgIGNhc2UgSW52
YWxpZGF0aW9uUG9pbnQ6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oSW52YWxpZGF0aW9uUG9pbnRMb2MsIFdhdGNocG9pbnRfZmlyZSksIExhenlO
b2RlKG5vZGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNF
eGl0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcnNFeGl0U3RhdGUuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjcsNyArNjcsNiBAQCBib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kCiAg
ICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBDb3VudEV4ZWN1
dGlvbjoKICAgICBjYXNlIFN0b3JlQmFycmllcjoKLSAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmll
cjoKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgLy8gVGhlc2UgZG8gY2xvYmJlciBtZW1vcnksIGJ1
dCBub3RoaW5nIHRoYXQgaXMgb2JzZXJ2YWJsZS4gSXQgbWF5IGJlIG5pY2UgdG8gc2VwYXJhdGUg
dGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lv
biAyMTA0OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsNiBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgIGNhc2Ug
TG9vcEhpbnQ6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6Ci0gICAgY2FzZSBGZW5jZWRTdG9yZUJh
cnJpZXI6CiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICBjYXNlIE5vdGlmeVdyaXRl
OgogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2NSw3
ICsxNDY1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAgICAgIGNh
c2UgR2V0U3RhY2s6CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgotICAgICAgICBjYXNlIEZl
bmNlZFN0b3JlQmFycmllcjoKICAgICAgICAgY2FzZSBHZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6
CiAgICAgICAgIGNhc2UgU2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAgICBjYXNlIFJl
Y29yZFJlZ0V4cENhY2hlZFJlc3VsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNiBAQCBFeGl0
TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqCiAgICAgY2FzZSBOb3RpZnlXcml0
ZToKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFN0b3JlQmFycmllcjoKLSAgICBj
YXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgIGNhc2Ug
UHV0Q2xvc3VyZVZhcjoKICAgICBjYXNlIFJlY29yZFJlZ0V4cENhY2hlZFJlc3VsdDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTIzLDcg
KzkyMyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTdG9yZUJhcnJpZXIoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gU3RvcmVCYXJyaWVyIHx8IG9wKCkgPT0gRmVuY2VkU3RvcmVC
YXJyaWVyOworICAgICAgICByZXR1cm4gb3AoKSA9PSBTdG9yZUJhcnJpZXI7CiAgICAgfQogCiAg
ICAgYm9vbCBoYXNJZGVudGlmaWVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDcgKzM5NCw2IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhDaGVja1dhdGNoZG9nVGltZXIs
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICAvKiBXcml0ZSBiYXJyaWVycyAqL1wKICAgICBtYWNy
byhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhGZW5jZWRTdG9y
ZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogRm9yLWluIGVudW1l
cmF0aW9uIG9wY29kZXMgKi9cCiAgICAgbWFjcm8oR2V0RW51bWVyYWJsZUxlbmd0aCwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI1LDcgKzEwMjUs
NiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICBjYXNlIEtpbGxT
dGFjazoKICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6Ci0gICAgICAgIGNhc2UgRmVuY2VkU3Rv
cmVCYXJyaWVyOgogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICBjYXNlIEdldFJlZ0V4
cE9iamVjdExhc3RJbmRleDoKICAgICAgICAgY2FzZSBTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAko
cmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4OCw3ICszODgsNiBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGNhc2UgU3RvcmVCYXJyaWVyOgotICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAgIGNh
c2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToK
ICAgICAgICAgLy8gV2UgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQgdGhlc2UgY2Fubm90IGJl
IHB1dCBhbnl3aGVyZSwgd2hpY2ggZm9yY2VzIHRoZSBjb21waWxlciB0bwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTYxLDggKzUxNjEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAotICAgIGNhc2UgU3RvcmVCYXJyaWVyOgotICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJy
aWVyOiB7CisgICAgY2FzZSBTdG9yZUJhcnJpZXI6IHsKICAgICAgICAgY29tcGlsZVN0b3JlQmFy
cmllcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMTA0
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MzUwLDggKzUzNTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVucmVhY2hhYmxlKG5vZGUpOwogICAgICAg
ICBicmVhazsKIAotICAgIGNhc2UgU3RvcmVCYXJyaWVyOgotICAgIGNhc2UgRmVuY2VkU3RvcmVC
YXJyaWVyOiB7CisgICAgY2FzZSBTdG9yZUJhcnJpZXI6IHsKICAgICAgICAgY29tcGlsZVN0b3Jl
QmFycmllcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIxMDQ5
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw2IEBACiAjaW5jbHVkZSAiUmVnRXhwQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJXcml0ZUJhcnJpZXJCdWZmZXIuaCIKICNpbmNs
dWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CkBAIC05MDIwLDEwICs5MDE5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bGlua0JyYW5jaGVzKCkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFy
cmllcihOb2RlKiBub2RlKQogewotICAgIEFTU0VSVChub2RlLT5vcCgpID09IFN0b3JlQmFycmll
ciB8fCBub2RlLT5vcCgpID09IEZlbmNlZFN0b3JlQmFycmllcik7Ci0gICAgCi0gICAgYm9vbCBp
c0ZlbmNlZCA9IG5vZGUtPm9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyOwotICAgIAogICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7
CkBAIC05MDMyLDM0ICs5MDI3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9y
ZUJhcnJpZXIKICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKICAgICBH
UFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKICAgICAKLSAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgb2s7Ci0gICAgCi0gICAgaWYgKGlzRmVuY2VkKSB7Ci0gICAgICAgIG9rLmFw
cGVuZChtX2ppdC5iYXJyaWVyQnJhbmNoKGJhc2VHUFIsIHNjcmF0Y2gxR1BSKSk7Ci0gICAgICAg
IAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub0ZlbmNlID0gbV9qaXQuanVtcElmTXV0YXRv
ckZlbmNlTm90TmVlZGVkKCk7Ci0gICAgICAgIG1faml0Lm1lbW9yeUZlbmNlKCk7Ci0gICAgICAg
IG9rLmFwcGVuZChtX2ppdC5iYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKLSAg
ICAgICAgbm9GZW5jZS5saW5rKCZtX2ppdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG9rLmFwcGVu
ZChtX2ppdC5iYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKLQotICAgIFdyaXRl
QmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gbV9qaXQudm0oKS0+aGVhcC5tX3dy
aXRlQmFycmllckJ1ZmZlcjsKLSAgICBtX2ppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1
cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaDJHUFIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5lZWRUb0ZsdXNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVy
QnVmZmVyLmNhcGFjaXR5KCkpKTsKLQotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOwotICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIHdyaXRlQmFycmll
ckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwotCi0gICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxR1BSKTsKLSAgICAv
LyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBh
ZGRlZCAxIHRvIHNjcmF0Y2gyLgotICAgIG1faml0LnN0b3JlUHRyKGJhc2VHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwotCi0g
ICAgb2suYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgbmVlZFRvRmx1c2gubGluaygmbV9qaXQp
OworICAgIEpJVENvbXBpbGVyOjpKdW1wIG9rID0gbV9qaXQuYmFycmllckJyYW5jaChiYXNlR1BS
LCBzY3JhdGNoMUdQUik7CiAKICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BS
UmVnKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVy
LCBiYXNlR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoLCBiYXNlR1BSKTsKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcp
OwogCiAgICAgb2subGluaygmbV9qaXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAko
cmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJh
cnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw5IEBA
IHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlQobV9iYXJyaWVyUG9pbnRzLmlzRW1wdHko
KSk7CiAgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgaWYgdGhpcyBw
aGFzZSBzaG91bGQga2VlcCBkb2luZyB0aGUgY2x1c3RlcmluZy4gVGhlIHJlZHVuZGFuY3kKKyAg
ICAgICAgLy8gZWxpbWluYXRpb24gaXMgdXNlZnVsIGZvciBzdXJlIHRob3VnaC4KKyAgICAgICAg
CiAgICAgICAgIC8vIEZpcnN0IGlkZW50aWZ5IHRoZSBwbGFjZXMgd2hlcmUgd2Ugd291bGQgd2Fu
dCB0byBwbGFjZSBhbGwgb2YgdGhlIGJhcnJpZXJzIGJhc2VkIG9uIGEKICAgICAgICAgLy8gYmFj
a3dhcmRzIGFuYWx5c2lzLiBXZSB1c2UgdGhlIGZ1dHVyZUdDIGZsYWcgdG8gdGVsbCB1cyBpZiB3
ZSBoYWQgc2VlbiBhIEdDLiBTaW5jZSB0aGlzCiAgICAgICAgIC8vIGlzIGEgYmFja3dhcmRzIGFu
YWx5c2lzLCB3aGVuIHdlIGdldCB0byBhIG5vZGUsIGZ1dHVyZUdDIHRlbGxzIHVzIGlmIGEgR0Mg
d2lsbCBoYXBwZW4KQEAgLTEzOSwxNCArMTQyLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBOb2RlKiBjaGlsZCA9IGl0ZXItPmNoaWxkOwogICAgICAgICAgICAgICAgIENvZGVPcmlnaW4g
c2VtYW50aWNPcmlnaW4gPSBpdGVyLT5zZW1hbnRpY09yaWdpbjsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBOb2RlVHlwZSB0eXBlOwotICAgICAgICAgICAgICAgIGlmIChPcHRp
b25zOjp1c2VDb25jdXJyZW50QmFycmllcnMoKSAmJiBpdGVyID09IG1fbmVlZGVkQmFycmllcnMu
YmVnaW4oKSkKLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3JlQmFycmllcjsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBTdG9yZUJh
cnJpZXI7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgdHlw
ZSwgb3JpZ2luLndpdGhTZW1hbnRpYyhzZW1hbnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLndpdGhTZW1hbnRp
YyhzZW1hbnRpY09yaWdpbiksCiAgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQsIEtub3du
Q2VsbFVzZSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5y
ZXNpemUoMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNCw3ICsxMjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAg
ICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZpYmVycywgSlNSb3BlU3RyaW5nOjpvZmZzZXRPZkZpYmVy
cygpLCBzaXplb2YoV3JpdGVCYXJyaWVyPEpTU3RyaW5nPikpIFwKICAgICBtYWNybyhNYXJrZWRT
cGFjZV9TdWJzcGFjZV9hbGxvY2F0b3JGb3JTaXplU3RlcCwgT0JKRUNUX09GRlNFVE9GKE1hcmtl
ZFNwYWNlOjpTdWJzcGFjZSwgYWxsb2NhdG9yRm9yU2l6ZVN0ZXApLCBzaXplb2YoTWFya2VkQWxs
b2NhdG9yKikpIFwKICAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfb3ZlcmZsb3dTdG9yYWdlLCBT
Y29wZWRBcmd1bWVudHM6Om92ZXJmbG93U3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSBcCi0gICAgbWFjcm8oV3JpdGVCYXJyaWVyQnVmZmVyX2J1ZmZlckNvbnRlbnRzLCAw
LCBzaXplb2YoSlNDZWxsKikpIFwKICAgICBtYWNybyhjaGFyYWN0ZXJzOCwgMCwgc2l6ZW9mKExD
aGFyKSkgXAogICAgIG1hY3JvKGNoYXJhY3RlcnMxNiwgMCwgc2l6ZW9mKFVDaGFyKSkgXAogICAg
IG1hY3JvKGluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIDAsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw2IEBAIGlubGluZSBD
YXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldFR5cGVkQXJyYXlC
eXRlT2Zmc2V0OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6
Ci0gICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2Ug
RGlyZWN0Q2FsbDoKICAgICBjYXNlIFRhaWxDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05NzcsNyArOTc3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNvbXBpbGVDb3VudEV4
ZWN1dGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVy
OgotICAgICAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICAgICAgICAgIGNvbXBpbGVT
dG9yZUJhcnJpZXIoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEhhc0luZGV4
ZWRQcm9wZXJ0eToKQEAgLTgzNDksNyArODM0OCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlU3RvcmVCYXJyaWVyKCkKICAgICB7Ci0gICAgICAgIGVtaXRTdG9yZUJhcnJpZXIo
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9ub2RlLT5vcCgpID09IEZlbmNlZFN0b3JlQmFy
cmllcik7CisgICAgICAgIGVtaXRTdG9yZUJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgpCkBA
IC0xMzAzOCw5MiArMTMwMzcsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0Lmxv
YWQ4WmVyb0V4dDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSk7CiAgICAgfQogCi0g
ICAgdm9pZCBlbWl0U3RvcmVCYXJyaWVyKExWYWx1ZSBiYXNlLCBib29sIGlzRmVuY2VkKQorICAg
IHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSkKICAgICB7CiAgICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsK
IAotICAgICAgICBMVmFsdWUgdGhyZXNob2xkOwotICAgICAgICBpZiAoaXNGZW5jZWQpCi0gICAg
ICAgICAgICB0aHJlc2hvbGQgPSBtX291dC5sb2FkMzIobV9vdXQuYWJzb2x1dGUodm0oKS5oZWFw
LmFkZHJlc3NPZkJhcnJpZXJUaHJlc2hvbGQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB0aHJlc2hvbGQgPSBtX291dC5jb25zdEludDMyKGJsYWNrVGhyZXNob2xkKTsKKyAgICAgICAg
TFZhbHVlIHRocmVzaG9sZCA9IG1fb3V0LmxvYWQzMihtX291dC5hYnNvbHV0ZSh2bSgpLmhlYXAu
YWRkcmVzc09mQmFycmllclRocmVzaG9sZCgpKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5i
cmFuY2goCiAgICAgICAgICAgICBtX291dC5hYm92ZShsb2FkQ2VsbFN0YXRlKGJhc2UpLCB0aHJl
c2hvbGQpLAogICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd1Bh
dGgpKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNs
b3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgLy8gV2UgZW1pdCB0aGUg
c3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBvZiBjYXNlcywgdGhpcyB3
aWxsIG5ldmVyIGZpcmUuIEFuZAotICAgICAgICAvLyB3aGVuIGl0IGRvZXMgZmlyZSwgaXQgbWFr
ZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2luZyBvdXIgSklUIHJhdGhl
ciB0aGFuCi0gICAgICAgIC8vIHdhc3RpbmcgQjMncyB0aW1lIG9wdGltaXppbmcgaXQuCi0gICAg
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGxhenlTbG93UGF0aCgKLSAgICAgICAg
ICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6
eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBMYXp5
U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZlbmNlZCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0ZlbmNlID0gaml0Lmp1bXBJZk11dGF0
b3JGZW5jZU5vdE5lZWRlZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tZW1v
cnlGZW5jZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5kb25lSnVtcHMu
YXBwZW5kKGppdC5iYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub0ZlbmNlLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBwYXJhbXMubGF6eVNsb3dQYXRoLT51c2Vk
UmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3Igc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmxvY2soYmFzZUdQUik7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJz
QnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6
OlNwYWNlRm9yQ0NhbGwpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJl
YWR5IHNhdmVkIHRoZXNlLCBzbyB3aGVuIHdlIG1ha2UgYSBzbG93IHBhdGggY2FsbCwgd2UgZG9u
J3QgaGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2F2ZSB0aGVtIGFnYWluLgot
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0
KHNjcmF0Y2gxLCBzY3JhdGNoMikpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUJh
cnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGppdC52bSgpLT5oZWFwLndyaXRlQmFy
cmllckJ1ZmZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMih3cml0ZUJh
cnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNoMik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbmVlZFRvRmx1c2ggPSBqaXQuYnJhbmNo
MzIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1
YWwsIHNjcmF0Y2gyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDIs
IHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIod3JpdGVC
YXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaDEpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2gxLCBzY3JhdGNoMiwgQ0NhbGxIZWxw
ZXJzOjpTY2FsZVB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KGppdCwgcHJlc2VydmVkU3RhdGUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMu
ZG9uZUp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
bmVlZFRvRmx1c2gubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycywgaml0LCBw
YXJhbXMubGF6eVNsb3dQYXRoLT5jYWxsU2l0ZUluZGV4KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLmV4Y2VwdGlvbkp1bXBzLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmll
ckJ1ZmZlciwgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNl
R1BSKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5y
ZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGJh
c2UpOworICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChpc0ZlbmNlZCkKLSAgICAgICAgICAgIG1faGVhcHMuZGVjb3Jh
dGVQYXRjaHBvaW50UmVhZCgmbV9oZWFwcy5yb290LCBwYXRjaHBvaW50KTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9pbnRSZWFkKCZtX2hlYXBzLkpT
Q2VsbF9jZWxsU3RhdGUsIHBhdGNocG9pbnQpOwotICAgICAgICBtX2hlYXBzLmRlY29yYXRlUGF0
Y2hwb2ludFdyaXRlKCZtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUsIHBhdGNocG9pbnQpOworICAg
ICAgICBMVmFsdWUgY2FsbCA9IHZtQ2FsbChWb2lkLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgpLCBtX2NhbGxGcmFtZSwgYmFzZSk7CisgICAgICAgIG1faGVh
cHMuZGVjb3JhdGVDQ2FsbFJlYWQoJm1faGVhcHMucm9vdCwgY2FsbCk7CisgICAgICAgIG1faGVh
cHMuZGVjb3JhdGVDQ2FsbFdyaXRlKCZtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUsIGNhbGwpOwog
ICAgICAgICAKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCisgICAgICAgIAog
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICB9CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkocmV2aXNpb24g
MjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDI1ICsyOSwyMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotZW51bSBj
bGFzcyBDZWxsU3RhdGUgOiB1aW50OF90IHsKLSAgICAvLyBUaGUgb2JqZWN0IGlzIGVpdGhlciBj
dXJyZW50bHkgYmVpbmcgc2Nhbm5lZCwgb3IgaXQgaGFzIGZpbmlzaGVkIGJlaW5nIHNjYW5uZWQs
IG9yIHRoaXMKLSAgICAvLyBpcyBhIGZ1bGwgY29sbGVjdGlvbiBhbmQgaXQncyBhY3R1YWxseSBh
IHdoaXRlIG9iamVjdCAoeW91J2Qga25vdyBiZWNhdXNlIGl0cyBtYXJrIGJpdAotICAgIC8vIHdv
dWxkIGJlIGNsZWFyKS4KLSAgICBQb3NzaWJseU9sZE9yQmxhY2sgPSAwLAotICAgIAotICAgIC8v
IFRoZSBvYmplY3QgaXMgaW4gZWRlbi4gRHVyaW5nIEdDLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9i
amVjdCBoYXMgbm90IGJlZW4gbWFya2VkIHlldC4KLSAgICBEZWZpbml0ZWx5TmV3QW5kV2hpdGUg
PSAxLAotCi0gICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5u
ZWQuCi0gICAgRGVmaW5pdGVseUdyZXkgPSAyLAotfTsKK3R5cGVkZWYgdWludDhfdCBDZWxsU3Rh
dGU7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDA7IC8vIHggPD0g
YmxhY2tUaHJlc2hvbGQgbWVhbnMgeCBpcyBQb3NzaWJseU9sZE9yQmxhY2suCi1zdGF0aWMgY29u
c3QgdW5zaWduZWQgdGF1dG9sb2dpY2FsVGhyZXNob2xkID0gMTAwOyAvLyB4IDw9IHRhdXRvbG9n
aWNhbFRocmVzaG9sZCBpcyBhbHdheXMgdHJ1ZS4KK3N0YXRpYyBjb25zdCBDZWxsU3RhdGUgQ29s
b3JNYXNrID0gMzsKK3N0YXRpYyBjb25zdCBDZWxsU3RhdGUgQmxhY2sgPSAwOworc3RhdGljIGNv
bnN0IENlbGxTdGF0ZSBHcmV5ID0gMTsKK3N0YXRpYyBjb25zdCBDZWxsU3RhdGUgV2hpdGUgPSAy
Oworc3RhdGljIGNvbnN0IENlbGxTdGF0ZSBSZXNjYW5CaXQgPSA0OwogCi1pbmxpbmUgYm9vbCBp
c1dpdGhpblRocmVzaG9sZChDZWxsU3RhdGUgY2VsbFN0YXRlLCB1bnNpZ25lZCB0aHJlc2hvbGQp
CitzdGF0aWMgY29uc3QgQ2VsbFN0YXRlIGJsYWNrVGhyZXNob2xkID0gMDsgLy8geCA8PSBibGFj
a1RocmVzaG9sZCBtZWFucyB4IGlzIEJsYWNrLgorc3RhdGljIGNvbnN0IENlbGxTdGF0ZSBub3RS
ZXNjYW5UaHJlc2hvbGQgPSBDb2xvck1hc2s7IC8vIHggPD0gbm90UmVzY2FuVGhyZXNob2xkIG1l
YW5zIHggaXMgQmxhY2ssIEdyZXksIG9yIFdoaXRlLgorCitpbmxpbmUgYm9vbCBpc1dpdGhpblRo
cmVzaG9sZChDZWxsU3RhdGUgY2VsbFN0YXRlLCBDZWxsU3RhdGUgdGhyZXNob2xkKQogewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFN0YXRlKSA8PSB0aHJlc2hvbGQ7Cisg
ICAgcmV0dXJuIGNlbGxTdGF0ZSA8PSB0aHJlc2hvbGQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMDQ5NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTIsMTEgKzI5MiwxMSBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUp
CiAgICAgLCBtX21hY2hpbmVUaHJlYWRzKHRoaXMpCiAgICAgLCBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yKHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzKSkKICAgICAsIG1fbXV0YXRv
ck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQorICAgICwgbV9y
ZXNjYW5Mb2coT3B0aW9uczo6cmVzY2FuTG9nU2l6ZSgpKQogICAgICwgbV9oYW5kbGVTZXQodm0p
CiAgICAgLCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tTZXQ+KCkpCiAg
ICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJSb3V0aW5lU2V0
PigpKQogICAgICwgbV9pc1NhZmVUb0NvbGxlY3QoZmFsc2UpCi0gICAgLCBtX3dyaXRlQmFycmll
ckJ1ZmZlcigyNTYpCiAgICAgLCBtX3ZtKHZtKQogICAgIC8vIFdlIHNlZWQgd2l0aCAxMG1zIHNv
IHRoYXQgR0NBY3Rpdml0eUNhbGxiYWNrOjpkaWRBbGxvY2F0ZSBkb2Vzbid0IGNvbnRpbnVvdXNs
eSAKICAgICAvLyBzY2hlZHVsZSB0aGUgdGltZXIgaWYgd2UndmUgbmV2ZXIgZG9uZSBhIGNvbGxl
Y3Rpb24uCkBAIC02MjIsNyArNjIyLDcgQEAgdm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3Vi
bGUgZ2NTdGFydAogICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICAgICAgdmlz
aXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICAgICAgREZHOjptYXJrQ29k
ZUJsb2NrcygqbV92bSwgc2xvdFZpc2l0b3IpOwotICAgICAgICBib29sIHNob3VsZFRlcm1pbmF0
ZSA9IHNsb3RWaXNpdG9yLmlzRW1wdHkoKSAmJiBtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHko
KTsKKyAgICAgICAgYm9vbCBzaG91bGRUZXJtaW5hdGUgPSBzbG90VmlzaXRvci5pc0VtcHR5KCkg
JiYgbV9tdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkgJiYgbV9yZXNjYW5Mb2cuaXNFbXB0eSgp
OwogICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKICAgICAgICAgICAg
IGRhdGFMb2coc2xvdFZpc2l0b3IuY29sbGVjdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiKyIsIG1f
bXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgc2xvdFZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygp
LnNpemUoKSwgIiwgYT0iLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC8gMTAyNCwgIiBrYiwg
Yj0iLCBtX2JhcnJpZXJzRXhlY3V0ZWQsICIsIG11PSIsIHNjaGVkdWxlci5jdXJyZW50RGVjaXNp
b24oKS50YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSwgIiAiKTsKQEAgLTY0MCw4ICs2NDAsNyBA
QCB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0CiAgICAgICAgIGlmIChz
aG91bGRUZXJtaW5hdGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIC8v
IFRoZSBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzIGFyZSBhY2Nlc3NlZCBieSB0aGUgY29sbGVj
dG9yIHRocmVhZCAoaS5lLiB0aGlzIHRocmVhZCkKLSAgICAgICAgLy8gd2l0aG91dCBsb2Nrcy4g
VGhhdCdzIHdoeSB3ZSBkb3VibGUtYnVmZmVyLgorICAgICAgICBtX3Jlc2NhbkxvZy5mbHVzaCgq
dGhpcyk7CiAgICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRv
ci5tdXRhdG9yTWFya1N0YWNrKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQpAQCAtOTk4LDI3ICs5OTcsNiBAQCB2b2lkIEhl
YXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCkKICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+
ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7CiB9CiAKLXZvaWQgSGVhcDo6
YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCogY2VsbCkKLXsKLSAgICBBU1NFUlQoY2Vs
bCk7Ci0gICAgQVNTRVJUKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkgfHwgIWlzQ29tcGls
YXRpb25UaHJlYWQoKSk7Ci0gICAgbV9iYXJyaWVyc0V4ZWN1dGVkKys7Ci0gICAgaWYgKCFIZWFw
Ojppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgewotICAgICAgICAvLyBEdXJpbmcgYSBmdWxs
IGNvbGxlY3Rpb24gYSBzdG9yZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJp
dml2ZWQgcGFzdAotICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxsIG1hbmlmZXN0IGFzIGEgc3Rv
cmUgdG8gYW4gdW5tYXJrZWQgYmxhY2sgb2JqZWN0LiBJZiB0aGUgb2JqZWN0IGdldHMKLSAgICAg
ICAgLy8gbWFya2VkIGF0IHNvbWUgdGltZSBhZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3du
IHRoZSBub3JtYWwgbWFya2luZyBwYXRoLiBXZSBjYW4KLSAgICAgICAgLy8gc2FmZWx5IGlnbm9y
ZSB0aGVzZSBzdG9yZXMuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gSXQgY291bGQg
YmUgdGhhdCB0aGUgb2JqZWN0IHdhcyAqanVzdCogbWFya2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhl
IGNvbGxlY3RvciBtYXkgc2V0IHRoZQotICAgIC8vIHN0YXRlIHRvIERlZmluaXRlbHlHcmV5IGFu
ZCB0aGVuIHRvIFBvc3NpYmx5T2xkT3JCbGFjayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMg
dG8KLSAgICAvLyByYWNlIHdpdGggdGhlIGNvbGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0
aGlzIGlzIGFjY3VyYXRlIGJlY2F1c2UgdGhlIG9iamVjdCBfd2lsbF8KLSAgICAvLyBnZXQgc2Nh
bm5lZCBhZ2Fpbi4gSWYgd2UgbG9zZSB0aGVuIHNvbWVvbmUgZWxzZSB3aWxsIGJhcnJpZXIgdGhl
IG9iamVjdCBhZ2Fpbi4gVGhhdCB3b3VsZAotICAgIC8vIGJlIHVuZm9ydHVuYXRlIGJ1dCBub3Qg
dGhlIGVuZCBvZiB0aGUgd29ybGQuCi0gICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6
RGVmaW5pdGVseUdyZXkpOwotICAgIG1fbXV0YXRvck1hcmtTdGFjay0+YXBwZW5kKGNlbGwpOwot
fQotCiB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKIHsKICAgICBpZiAoIW1faXNTYWZl
VG9Db2xsZWN0KQpAQCAtMTIzMiw3ICsxMjEwLDYgQEAgdm9pZCBIZWFwOjpzdG9wVGhlV29ybGQo
KQogICAgIAogICAgIHZtKCktPnNoYWRvd0NoaWNrZW4oKS51cGRhdGUoKnZtKCksIHZtKCktPnRv
cENhbGxGcmFtZSk7CiAgICAgCi0gICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKICAgICBt
X3N0cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRUYWJsZXMoKTsKICAgICBtX29iamVjdFNwYWNlLnN0
b3BBbGxvY2F0aW5nKCk7CiAgICAgCkBAIC0xNjQ4LDExICsxNjI1LDYgQEAgdm9pZCBIZWFwOjp3
aWxsU3RhcnRDb2xsZWN0aW9uKHN0ZDo6b3B0aQogICAgICAgICBvYnNlcnZlci0+d2lsbEdhcmJh
Z2VDb2xsZWN0KCk7CiB9CiAKLXZvaWQgSGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKQot
ewotICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZsdXNoKCp0aGlzKTsKLX0KLQogdm9pZCBIZWFw
OjpwcmVwYXJlRm9yTWFya2luZygpCiB7CiAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yTWFy
a2luZygpOwpAQCAtMTkzMywxMiArMTkwNSw2IEBAIHZvaWQgSGVhcDo6em9tYmlmeURlYWRPYmpl
Y3RzKCkKICAgICBtX29iamVjdFNwYWNlLmZvckVhY2hEZWFkQ2VsbChpdGVyYXRpb25TY29wZSwg
Wm9tYmlmeSgpKTsKIH0KIAotdm9pZCBIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihKU0Nl
bGwqIGNlbGwpCi17Ci0gICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwotICAg
IG1fd3JpdGVCYXJyaWVyQnVmZmVyLmFkZChjZWxsKTsKLX0KLQogYm9vbCBIZWFwOjpzaG91bGRE
b0Z1bGxDb2xsZWN0aW9uKHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBzY29wZSkgY29u
c3QKIHsKICAgICBpZiAoIU9wdGlvbnM6OnVzZUdlbmVyYXRpb25hbEdDKCkpCkBAIC0yMDEyLDE1
ICsxOTc4LDcwIEBAIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MKIAog
dm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20pCiB7Ci0g
ICAgaWYgKFVOTElLRUxZKG11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSkgewotICAgICAgICAvLyBJ
biB0aGlzIGNhc2UsIHRoZSBiYXJyaWVyVGhyZXNob2xkIGlzIHRoZSB0YXV0b2xvZ2ljYWwgdGhy
ZXNob2xkLCBzbyBmcm9tIGNvdWxkIHN0aWxsIGJlCi0gICAgICAgIC8vIG5vdCBibGFjay4gQnV0
IHdlIGNhbid0IGtub3cgZm9yIHN1cmUgdW50aWwgd2UgZmlyZSBvZmYgYSBmZW5jZS4KLSAgICAg
ICAgV1RGOjpzdG9yZUxvYWRGZW5jZSgpOwotICAgICAgICBpZiAoZnJvbS0+Y2VsbFN0YXRlKCkg
IT0gQ2VsbFN0YXRlOjpQb3NzaWJseU9sZE9yQmxhY2spCisgICAgZm9yICg7OykgeworICAgICAg
ICBDZWxsU3RhdGUgY2VsbFN0YXRlID0gZnJvbS0+Y2VsbFN0YXRlKCk7CisgICAgICAgIGlmIChj
ZWxsU3RhdGUgJiBSZXNjYW5CaXQpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChm
cm9tLT5hdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVXZWFrUmVsYXhlZChjZWxsU3RhdGUs
IGNlbGxTdGF0ZSB8IFJlc2NhbkJpdCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgLy8gTk9URTogV2UgbWF5IGZvcmdldCB0aGUgUmVzY2FuIGJpdCBhdCB0aGlzIHBvaW50
LiBJdCdzIE9LIHRvIGZvcmdldCBhYm91dCBpdCEKKyAgICAKKyAgICBtX3Jlc2NhbkxvZy5hZGQo
KnRoaXMsIGZyb20pOworfQorCit2b2lkIEhlYXA6OmZpbmlzaFdyaXRlQmFycmllcihjb25zdCBK
U0NlbGwqIGZyb20pCit7CisgICAgSlNDZWxsKiBjZWxsID0gY29uc3RfY2FzdDxKU0NlbGwqPihm
cm9tKTsKKyAgICAKKyAgICBDZWxsU3RhdGUgY2VsbFN0YXRlOworICAgIGZvciAoOzspIHsKKyAg
ICAgICAgY2VsbFN0YXRlID0gY2VsbC0+Y2VsbFN0YXRlKCk7CisgICAgICAgIGlmICghKGNlbGxT
dGF0ZSAmIFJlc2NhbkJpdCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGNlbGwt
PmF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVdlYWtSZWxheGVkKGNlbGxTdGF0ZSwgY2Vs
bFN0YXRlICYgflJlc2NhbkJpdCkpCisgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0g
ICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOworICAgIGNlbGxTdGF0ZSAmPSB+UmVzY2FuQml0
OworICAgIAorICAgIHN3aXRjaCAoY2VsbFN0YXRlKSB7CisgICAgY2FzZSBCbGFjazoKKyAgICAg
ICAgaWYgKEhlYXA6OmlzTWFya2VkKGNlbGwpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5z
IHRoYXQgd2UgcmVhbGx5IGRpZCBuZWVkIGEgYmFycmllciBvbiB0aGlzIG9iamVjdC4gR3JleSB0
aGUKKyAgICAgICAgICAgIC8vIG9iamVjdCBhbmQgcHV0IGl0IG9uIHRoZSBtYXJrIHN0YWNrLiBO
b3RlIHRoYXQgdGhpcyBzZXRDZWxsU3RhdGUgY2FsbCBpcyBhIHJhY2UsCisgICAgICAgICAgICAv
LyBidXQgdGhhdCdzIE9LOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdlIHdpbiB0
aGUgcmFjZTogdGhlIG9iamVjdCB0aGlua3MgaXQncyBncmV5IGFuZCBpdCdzIG9uIHRoZSBtdXRh
dG9yIG1hcmsgc3RhY2ssCisgICAgICAgICAgICAvLyB3aGljaCBlbnN1cmVzIHRoYXQgaXQgd2ls
bCBiZSByZXNjYW5uZWQuIFRoYXQncyBjb25zaXN0ZW50LgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIFdlIGxvc2UgdGhlIHJhY2U6IHRoZSBvYmplY3Qgd2lsbCBkZWZpbml0ZWx5IGJl
IHJlc2Nhbm5lZCBidXQgaXQgdGhpbmtzIGl0J3MKKyAgICAgICAgICAgIC8vIGJsYWNrLCBzbyB3
ZSBtYXkgYmFycmllciBpdCBhZ2Fpbi4gSXQncyBPSyBmb3IgYSByYWNlIHRvIGNhdXNlIHVzIHRv
IHJlcGVhdCB3b3JrLgorICAgICAgICAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKEdyZXkpOworICAg
ICAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT5hcHBlbmQoY2VsbCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBXZSdyZSBkb2luZyBhIGZ1bGwgY29sbGVjdGlvbiBhbmQgdGhp
cyBvYmplY3QgaXMgYWN0dWFsbHkgd2hpdGUhIEJ1dCBpdCBjb3VsZCBiZQorICAgICAgICAgICAg
Ly8gZ3JleWVkIGFuZCBibGFja2VkIGF0IGFueSB0aW1lLiBXZSB0cmVhZCBzbyBjYXJlZnVsbHku
CisgICAgICAgICAgICBpZiAoY2VsbC0+Y29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nKEJs
YWNrLCBXaGl0ZSkgPT0gQmxhY2spIHsKKyAgICAgICAgICAgICAgICAvLyBPSyAtIHRoZSBvYmpl
Y3QgdGhpbmtzIGl0J3Mgd2hpdGUgbm93LiBCdXQgdGhlIGFib3ZlIGNvdWxkIGhhdmUgc3VjY2Vl
ZGVkCisgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIG9iamVjdCB3YXMgYmxhY2tlZCBieSB0
aGUgR0MgYmVjYXVzZSBpdCBtYXJrZWQgaXQuIEJ1dCBpZiB0aGF0IHdhcworICAgICAgICAgICAg
ICAgIC8vIHRydWUgdGhlbiB0aGUgb2JqZWN0IHdvdWxkIGJlIG1hcmtlZCBub3cuCisgICAgICAg
ICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNlbGwpKQorICAgICAgICAgICAgICAgICAgICBj
ZWxsLT5zZXRDZWxsU3RhdGUoQmxhY2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JleToKKyAgICAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2Vk
KGNlbGwpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXaGl0ZToKKyAgICAgICAgQVNTRVJU
KCFIZWFwOjppc01hcmtlZChjZWxsKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KIH0KIAogYm9vbCBIZWFwOjppc0N1cnJlbnRUaHJlYWRCdXN5KCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDE2ICsxMTYsMTMgQEAgcHVi
bGljOgogICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNWYWx1ZSB0
byk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRv
KTsKICAgICAKLSAgICB2b2lkIHdyaXRlQmFycmllcldpdGhvdXRGZW5jZShjb25zdCBKU0NlbGwq
IGZyb20pOwotICAgIAogICAgIHZvaWQgbXV0YXRvckZlbmNlKCk7CiAgICAgCiAgICAgLy8gVGFr
ZSB0aGlzIGlmIHlvdSBrbm93IHRoYXQgZnJvbS0+Y2VsbFN0YXRlKCkgPCBiYXJyaWVyVGhyZXNo
b2xkLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVyU2xvd1BhdGgoY29u
c3QgSlNDZWxsKiBmcm9tKTsKLQotICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVy
QnVmZmVyKCkgeyByZXR1cm4gbV93cml0ZUJhcnJpZXJCdWZmZXI7IH0KLSAgICB2b2lkIGZsdXNo
V3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCopOwogICAgIAorICAgIHZvaWQgZmluaXNoV3JpdGVC
YXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSk7CisKICAgICB2b2lkIHdyaXRlQmFycmllck9wYXF1
ZVJvb3Qodm9pZCopOwogCiAgICAgSGVhcChWTSosIEhlYXBUeXBlKTsKQEAgLTEzNyw5ICsxMzQs
NiBAQCBwdWJsaWM6CiAgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9v
YmplY3RTcGFjZTsgfQogICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcygpIHsgcmV0
dXJuIG1fbWFjaGluZVRocmVhZHM7IH0KIAotICAgIFNsb3RWaXNpdG9yJiBjb2xsZWN0b3JTbG90
VmlzaXRvcigpIHsgcmV0dXJuICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOyB9Ci0gICAgTWFya1N0
YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiAqbV9tdXRhdG9yTWFya1N0YWNr
OyB9Ci0KICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGZ1bGxBY3Rp
dml0eUNhbGxiYWNrKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNr
KiBlZGVuQWN0aXZpdHlDYWxsYmFjaygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0
R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9vbCk7CkBAIC00NDYsNyArNDQwLDYgQEAg
cHJpdmF0ZToKICAgICAKICAgICB2b2lkIHN1c3BlbmRDb21waWxlclRocmVhZHMoKTsKICAgICB2
b2lkIHdpbGxTdGFydENvbGxlY3Rpb24oc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+KTsK
LSAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9y
TWFya2luZygpOwogICAgIAogICAgIHZvaWQgbWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRU
aW1lKTsKQEAgLTQ3MCw3ICs0NjMsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsRmluYWxpemVycygpOwogICAgIHZvaWQgY2xlYXJVbm1hcmtlZEV4ZWN1dGFibGVz
KCk7CiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCopOwogICAgIHZv
aWQgdXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpOwogICAgIHZvaWQgZGlkRmluaXNoQ29sbGVjdGlv
bihkb3VibGUgZ2NTdGFydFRpbWUpOwogICAgIHZvaWQgcmVzdW1lQ29tcGlsZXJUaHJlYWRzKCk7
CkBAIC01MjUsOCArNTE3LDYgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9leHRyYU1lbW9yeVNp
emU7CiAgICAgc2l6ZV90IG1fZGVwcmVjYXRlZEV4dHJhTWVtb3J5U2l6ZTsKIAotICAgIEhhc2hT
ZXQ8Y29uc3QgSlNDZWxsKj4gbV9jb3B5aW5nUmVtZW1iZXJlZFNldDsKLQogICAgIFByb3RlY3RD
b3VudFNldCBtX3Byb3RlY3RlZFZhbHVlczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxN
YXJrZWRBcmd1bWVudEJ1ZmZlcio+PiBtX21hcmtMaXN0U2V0OwogCkBAIC01MzQsNiArNTI0LDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG1fY29s
bGVjdG9yU2xvdFZpc2l0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBt
X211dGF0b3JNYXJrU3RhY2s7CisgICAgV3JpdGVCYXJyaWVyQnVmZmVyIG1fcmVzY2FuTG9nOwog
CiAgICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtp
bmcgdGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBv
dmVyIHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBh
bW91bnQgb2YgbWVtb3J5IGZyb20KQEAgLTU1NCw3ICs1NDUsNiBAQCBwcml2YXRlOgogICAgIAog
ICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7CiAKLSAgICBXcml0ZUJhcnJpZXJCdWZmZXIgbV93
cml0ZUJhcnJpZXJCdWZmZXI7CiAgICAgYm9vbCBtX211dGF0b3JTaG91bGRCZUZlbmNlZCB7IE9w
dGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpIH07CiAgICAgdW5zaWduZWQgbV9iYXJyaWVyVGhy
ZXNob2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJl
c2hvbGQgOiBibGFja1RocmVzaG9sZCB9OwogICAgIFZlY3Rvcjxib29sKj4gbV9tdXRhdG9yU2hv
dWxkQmVGZW5jZWRDYWNoZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJ
bmxpbmVzLmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OCwxNSArMTQ4LDYgQEAgaW5saW5l
IHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQwogICAgICAgICB3cml0ZUJhcnJpZXJT
bG93UGF0aChmcm9tKTsKIH0KIAotaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyV2l0aG91
dEZlbmNlKGNvbnN0IEpTQ2VsbCogZnJvbSkKLXsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tT
X1ZBTElEKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oZnJvbSkpOwotICAgIGlmICghZnJvbSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmIChVTkxJS0VMWShpc1dpdGhpblRocmVzaG9sZChmcm9tLT5jZWxs
U3RhdGUoKSwgYmxhY2tUaHJlc2hvbGQpKSkKLSAgICAgICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZy
b20pOwotfQotCiBpbmxpbmUgdm9pZCBIZWFwOjptdXRhdG9yRmVuY2UoKQogewogICAgIGlmIChp
c1g4NigpIHx8IFVOTElLRUxZKG11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyQnVmZmVyLmNwcAkocmV2
aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVy
QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMjQgKzQ2LDkgQEAgV3JpdGVCYXJyaWVy
QnVmZmVyOjp+V3JpdGVCYXJyaWVyQnVmZmVyKAogICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKIH0K
IAotdm9pZCBXcml0ZUJhcnJpZXJCdWZmZXI6OmZsdXNoKEhlYXAmIGhlYXApCi17Ci0gICAgQVNT
RVJUKG1fY3VycmVudEluZGV4IDw9IG1fY2FwYWNpdHkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9jdXJyZW50SW5kZXg7ICsraSkKLSAgICAgICAgaGVhcC53cml0ZUJhcnJpZXIobV9i
dWZmZXJbaV0pOwotICAgIG1fY3VycmVudEluZGV4ID0gMDsKLX0KLQogdm9pZCBXcml0ZUJhcnJp
ZXJCdWZmZXI6OnJlc2V0KCkKIHsKICAgICBtX2N1cnJlbnRJbmRleCA9IDA7CiB9CiAKLXZvaWQg
V3JpdGVCYXJyaWVyQnVmZmVyOjphZGQoSlNDZWxsKiBjZWxsKQotewotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfTE9PS1NfVkFMSUQoY2VsbCk7Ci0gICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDwgbV9j
YXBhY2l0eSk7Ci0gICAgbV9idWZmZXJbbV9jdXJyZW50SW5kZXgrK10gPSBjZWxsOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRl
QmFycmllckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1dyaXRlQmFycmllckJ1ZmZlci5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NiwxMCArMzYsMTQgQEAgY2xhc3MgV3JpdGVCYXJyaWVyQnVmZmVyIHsKIHB1YmxpYzoKICAgICBX
cml0ZUJhcnJpZXJCdWZmZXIodW5zaWduZWQgY2FwYWNpdHkpOwogICAgIH5Xcml0ZUJhcnJpZXJC
dWZmZXIoKTsKLQotICAgIHZvaWQgYWRkKEpTQ2VsbCopOworICAgIAogICAgIHZvaWQgZmx1c2go
SGVhcCYpOworCisgICAgdm9pZCBhZGQoSGVhcCYsIGNvbnN0IEpTQ2VsbCopOworICAgIAogICAg
IHZvaWQgcmVzZXQoKTsKKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAh
bV9jdXJyZW50SW5kZXg7IH0KIAogICAgIHVuc2lnbmVkKiBjdXJyZW50SW5kZXhBZGRyZXNzKCkK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZm
ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV3Jp
dGVCYXJyaWVyQnVmZmVySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyQnVmZmVyLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCit2b2lkIFdyaXRlQmFycmllckJ1ZmZlcjo6Zmx1c2goSGVhcCYgaGVhcCkKK3sK
KyAgICBBU1NFUlQobV9jdXJyZW50SW5kZXggPD0gbV9jYXBhY2l0eSk7CisgICAgV1RGOjpzdG9y
ZUxvYWRGZW5jZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50SW5kZXg7
ICsraSkKKyAgICAgICAgaGVhcC5maW5pc2hXcml0ZUJhcnJpZXIobV9idWZmZXJbaV0pOworICAg
IG1fY3VycmVudEluZGV4ID0gMDsKK30KKwordm9pZCBXcml0ZUJhcnJpZXJCdWZmZXI6OmFkZChI
ZWFwJiBoZWFwLCBjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKG1fY3VycmVudEluZGV4
ID09IG1fY2FwYWNpdHkpCisgICAgICAgIGZsdXNoKGhlYXApOworICAgIEFTU0VSVChtX2N1cnJl
bnRJbmRleCA8IG1fY2FwYWNpdHkpOworICAgIG1fYnVmZmVyW21fY3VycmVudEluZGV4KytdID0g
Y2VsbDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjkxLDE3ICsxMjkxLDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZW1pdFN0b3Jl
U3RydWN0dXJlV2l0aFR5cGVJbmZvKEFzc2VtYmx5SGVscGVycyYgaml0LCBUcnVzdGVkSW1tUHRy
IHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCBkZXN0KTsKIAotICAgIEp1bXAgYmFycmllckJyYW5jaFdp
dGhvdXRGZW5jZShHUFJSZWcgY2VsbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBicmFuY2g4KEFi
b3ZlLCBBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoYmxhY2tUaHJlc2hvbGQpKTsKLSAgICB9Ci0KLSAgICBKdW1wIGJhcnJpZXJCcmFuY2hXaXRo
b3V0RmVuY2UoSlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgdWludDhfdCogYWRkcmVzcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZz
ZXQoKTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDgoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhhZGRy
ZXNzKSwgVHJ1c3RlZEltbTMyKGJsYWNrVGhyZXNob2xkKSk7Ci0gICAgfQotICAgIAogICAgIEp1
bXAgYmFycmllckJyYW5jaChHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2hHUFIpCiAgICAgewog
ICAgICAgICBsb2FkOChBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKQEAgLTEzMTUsMTUgKzEzMDQsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBicmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAu
YWRkcmVzc09mQmFycmllclRocmVzaG9sZCgpKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYmFy
cmllclN0b3JlTG9hZEZlbmNlKCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29u
Y3VycmVudEJhcnJpZXJzKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEp1bXAgb2sg
PSBqdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQoKTsKLSAgICAgICAgbWVtb3J5RmVuY2UoKTsK
LSAgICAgICAgb2subGluayh0aGlzKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBtdXRhdG9yRmVu
Y2UoKQogICAgIHsKICAgICAgICAgaWYgKGlzWDg2KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxODgsMTMgKzIxODgsNiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2Nh
dGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKLXZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICB2bS0+aGVhcC5m
bHVzaFdyaXRlQmFycmllckJ1ZmZlcihjZWxsKTsKLX0KLQogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk9TUldyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsK
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDcgKzQyNiw2
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEUKIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFn
ZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7
CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQ
cm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RG
X0lOVEVSTkFMOwogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJp
ZXJCdWZmZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODYsNyArMTE4Niw3IEBAIHZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmUKIAogICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCiAg
ICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRW
YWx1ZSkKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTg4LDYgKzE4OCw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYo
Ym9vbCwgY29sbGVjdENvbnRpbnVvdXNseSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoZG91YmxlLCBjb2xsZWN0Q29udGludW91c2x5UGVyaW9kTVMsIDEsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCisgICAgdihib29sLCByZXNjYW5Mb2dTaXplLCAxMDI0LCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KGJvb2wsIHZlcmJvc2VWaXNpdFJhY2UsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KGJvb2wsIG9wdGltaXplUGFyYWxsZWxTbG90VmlzaXRvcnNGb3JTdG9wcGVkTXV0
YXRvciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIGxhcmdlSGVh
cFNpemUsIDMyICogMTAyNCAqIDEwMjQsIE5vcm1hbCwgbnVsbHB0cikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298439</attachid>
            <date>2017-01-09 20:18:02 -0800</date>
            <delta_ts>2017-01-09 20:57:52 -0800</delta_ts>
            <desc>all of the optimizations _except_ the rescan/fence removal</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33160</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwNTM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDE3LTAxLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U3RyZWFtbGluZSB0aGUgR0MgYmFycmllciBzbG93cGF0aAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGltcGxlbWVudHMgdHdvIG9w
dGltaXphdGlvbnMgdG8gdGhlIGJhcnJpZXI6CisgICAgICAgIAorICAgICAgICAtIFJlbW92ZXMg
dGhlIHdyaXRlIGJhcnJpZXIgYnVmZmVyLiBUaGlzIHdhcyBqdXN0IG92ZXJoZWFkLgorICAgICAg
ICAKKyAgICAgICAgLSBUZWFjaGVzIHRoZSBzbG93IHBhdGggaG93IHRvIHdoaXRlIGFuIG9iamVj
dCB0aGF0IHdhcyBibGFjayBidXQgdW5tYXJrZWQsIGVuc3VyaW5nIHRoYXQKKyAgICAgICAgICB3
ZSBkb24ndCB0YWtlIHNsb3cgcGF0aCBmb3IgdGhpcyBvYmplY3QgYWdhaW4uCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjplbWl0U3RvcmVCYXJy
aWVyKToKKyAgICAgICAgKiBoZWFwL0NlbGxTdGF0ZS5oOgorICAgICAgICAqIGhlYXAvSGVhcC5j
cHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJr
VG9GaXhwb2ludCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OnN0b3BUaGVXb3JsZCk6CisgICAgICAgIChKU0M6OkhlYXA6Ondy
aXRlQmFycmllclNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YnVpbGRDb25zdHJhaW50
U2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJh
cnJpZXJCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2spOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2spOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogaGVhcC9Xcml0ZUJh
cnJpZXJCdWZmZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvV3JpdGVCYXJyaWVyQnVm
ZmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAg
ICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogcnVudGltZS9KU0NlbGxJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZUlEQmxvYi5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OlN0cnVjdHVy
ZUlEQmxvYik6CisKIDIwMTctMDEtMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCBmaXggY2xvb3AuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjEwNTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTEyMzAsOCArMTIzMCw2IEBACiAJCTJBMTExMjQ2MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21H
ZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJBMTExMjQ0MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQTQ4RDE5MTE3
NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMUI1NzQxNzZBMjI0RDAwMEUyQTIzIC8q
IEFQSUNhbGxiYWNrRnVuY3Rpb24uaCAqLzsgfTsKIAkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNE
IC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJBNEJCN0YyMThBNDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRW
YWx1ZUludGVybmFsLmggKi87IH07Ci0JCTJBNEVDOTBCMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0
ZUJhcnJpZXJCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkE0RUM5MDkxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5j
cHAgKi87IH07Ci0JCTJBNEVDOTBDMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZm
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNEVD
OTBBMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQTdBNThFRjE4MDhBNEM0MDAy
MEJERjcgLyogRGVmZXJHQy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi87IH07
CiAJCTJBODM2Mzg1MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBODM2Mzgz
MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLzsgfTsKIAkJ
MkE4MzYzODYxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBODM2Mzg0MThEN0Qw
RUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2MzcsOCArMzYzNSw2IEBACiAJCTJB
MzQzRjc0MThBMTc0OEIwMDM5QjA4NSAvKiBHQ1NlZ21lbnRlZEFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDU2VnbWVudGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkEzNDNGNzcxOEExNzQ5RDAwMzlCMDg1IC8qIEdDU2VnbWVudGVkQXJy
YXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDU2VnbWVudGVk
QXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBNEJCN0YyMThB
NDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMkE0RUM5MDkxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmll
ckJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXcml0ZUJh
cnJpZXJCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQTRFQzkwQTE4
NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllckJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWZlckdDLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkE4MzYzODMxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2
aXR5Q2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRWRl
bkdDQWN0aXZpdHlDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJB
ODM2Mzg0MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU4MTQsOCArNTgxMCw2IEBACiAJCQkJMTRFODRG
OUIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtTZXQuY3BwICovLAogCQkJCTE0RTg0RjlDMTRFRTFB
Q0MwMEQ2RDVENCAvKiBXZWFrU2V0LmggKi8sCiAJCQkJMTQxNTAxMzIxNTRCQjEzRjAwNUQ4Qzk4
IC8qIFdlYWtTZXRJbmxpbmVzLmggKi8sCi0JCQkJMkE0RUM5MDkxODYwRDZDMjAwOTRGNzgyIC8q
IFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi8sCi0JCQkJMkE0RUM5MEExODYwRDZDMjAwOTRGNzgy
IC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovLAogCQkJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYw
MyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLywKIAkJCQkwRkM4MTUwOTE0MDQzQkQyMDBD
RkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovLAogCQkJKTsKQEAgLTkxMDIsNyArOTA5
Niw2IEBACiAJCQkJQURCQzU0RDUxREY4RUEyQjAwNUJGNzM4IC8qIFdlYkFzc2VtYmx5VG9KU0Nh
bGxlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0N0EwRTE2RjVDRDAwQjM0NDYwIC8qIFdl
YktpdEF2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEQ0I5NzMxMkU1MTkzRjAw
OTExOTQwIC8qIFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkE0RUM5MEMxODYw
RDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzJCNkQ3NTMxOEEzMzc5MzAwNEE5MzAxIC8qIFdyaXRlQmFycmllcklubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBw
b3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0IxNjBFRDEyQjRFMDAxRDY0OUYgLyogWDg2
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNDkzLDcgKzEwNDg2LDYgQEAKIAkJCQlB
RDJGQ0JGQzFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUFEMkZDQkZFMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3Nl
bWJseVRhYmxlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFEQkM1NEQ0MURGOEVB
MkIwMDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJMkE0RUM5MEIxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVy
U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QUIzQTE3OTlFNEIyMDBEMjgzM0Qg
LyogWDg2RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUyMTEx
MUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CShyZXZpc2lvbiAyMTA1MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNiBAQAogI2luY2x1ZGUg
IlJlZ0V4cENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5j
bHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVy
QnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Cb3gu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtODkwNSwxMSArODkwNCw5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIKICAgICAKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDEodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAg
IAogICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaDFH
UFIgPSBzY3JhdGNoMS5ncHIoKTsKLSAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5n
cHIoKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgb2s7CiAgICAgCkBAIC04OTIz
LDIyICs4OTIwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcgog
ICAgIH0gZWxzZQogICAgICAgICBvay5hcHBlbmQobV9qaXQuYmFycmllckJyYW5jaFdpdGhvdXRG
ZW5jZShiYXNlR1BSKSk7CiAKLSAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1
ZmZlciA9IG1faml0LnZtKCktPmhlYXAubV93cml0ZUJhcnJpZXJCdWZmZXI7Ci0gICAgbV9qaXQu
bG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2gy
R1BSKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9GbHVzaCA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7Ci0KLSAgICBt
X2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKLSAgICBtX2ppdC5zdG9y
ZTMyKHNjcmF0Y2gyR1BSLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygp
KTsKLQotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVm
ZmVyKCkpLCBzY3JhdGNoMUdQUik7Ci0gICAgLy8gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6ZW9m
KHZvaWQqKSBiZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoMi4KLSAgICBtX2pp
dC5zdG9yZVB0cihiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gxR1BS
LCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBzdGF0aWNfY2FzdDxpbnQz
Ml90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKLQotICAgIG9rLmFwcGVuZChtX2ppdC5qdW1wKCkpOwot
ICAgIG5lZWRUb0ZsdXNoLmxpbmsoJm1faml0KTsKLQogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKEludmFsaWRHUFJSZWcpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0
ZUJhcnJpZXJCdWZmZXIsIGJhc2VHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3Jp
dGVCYXJyaWVyU2xvd1BhdGgsIGJhc2VHUFIpOwogICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
SW52YWxpZEdQUlJlZyk7CiAKICAgICBvay5saW5rKCZtX2ppdCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMTA1MjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyOTYyLDYgKzEyOTYyLDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgCisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQ
YXRoKTsKIAogICAgICAgICBMVmFsdWUgdGhyZXNob2xkOwogICAgICAgICBpZiAoaXNGZW5jZWQp
CkBAIC0xMjk3Myw3NCArMTI5NzUsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmFi
b3ZlKGxvYWRDZWxsU3RhdGUoYmFzZSksIHRocmVzaG9sZCksCiAgICAgICAgICAgICB1c3VhbGx5
KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93UGF0aCkpOwogCi0gICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIAotICAgICAgICAvLyBXZSBlbWl0IHRoZSBzdG9yZSBiYXJyaWVyIHNsb3cgcGF0aCBsYXpp
bHkuIEluIGEgbG90IG9mIGNhc2VzLCB0aGlzIHdpbGwgbmV2ZXIgZmlyZS4gQW5kCi0gICAgICAg
IC8vIHdoZW4gaXQgZG9lcyBmaXJlLCBpdCBtYWtlcyBzZW5zZSBmb3IgdXMgdG8gZ2VuZXJhdGUg
dGhpcyBjb2RlIHVzaW5nIG91ciBKSVQgcmF0aGVyIHRoYW4KLSAgICAgICAgLy8gd2FzdGluZyBC
MydzIHRpbWUgb3B0aW1pemluZyBpdC4KLSAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRp
b24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAg
ICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwot
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJhdG9yKAot
ICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6
OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzRmVuY2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIG5vRmVuY2UgPSBqaXQuanVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVkKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaml0Lm1lbW9yeUZlbmNlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0LmJhcnJpZXJCcmFuY2hXaXRo
b3V0RmVuY2UoYmFzZUdQUikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vRmVuY2Uu
bGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVy
cyA9IHBhcmFtcy5sYXp5U2xvd1BhdGgtPnVzZWRSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IodXNlZFJlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxID0gc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOwotICAgICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZl
ZFN0YXRlID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhlc2UsIHNvIHdoZW4gd2Ug
bWFrZSBhIHNsb3cgcGF0aCBjYWxsLCB3ZSBkb24ndCBoYXZlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0byBzYXZlIHRoZW0gYWdhaW4uCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2Vk
UmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQoc2NyYXRjaDEsIHNjcmF0Y2gyKSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVm
ZmVyID0gaml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRy
ZXNzKCksIHNjcmF0Y2gyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBuZWVkVG9GbHVzaCA9IGppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVm
ZmVyLmNhcGFjaXR5KCkpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZDMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJ
bmRleEFkZHJlc3MoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3Jh
dGNoMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaDEsIHNjcmF0Y2gyLCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkp
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJl
c3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5kb25lSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBuZWVkVG9GbHVzaC5saW5rKCZqaXQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1c2VkUmVnaXN0ZXJzLCBqaXQsIHBhcmFtcy5sYXp5U2xvd1BhdGgtPmNhbGxTaXRl
SW5kZXgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZXhjZXB0aW9uSnVt
cHMsIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBJbnZhbGlkR1BSUmVnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBp
bmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMu
ZG9uZUp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgYmFzZSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KHNsb3dQYXRoLCBjb250aW51YXRpb24pOwogICAgICAgICAKLSAgICAgICAgaWYgKGlzRmVuY2Vk
KQotICAgICAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9pbnRSZWFkKCZtX2hlYXBzLnJv
b3QsIHBhdGNocG9pbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2hlYXBzLmRlY29y
YXRlUGF0Y2hwb2ludFJlYWQoJm1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSwgcGF0Y2hwb2ludCk7
Ci0gICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRjaHBvaW50V3JpdGUoJm1faGVhcHMuSlNDZWxs
X2NlbGxTdGF0ZSwgcGF0Y2hwb2ludCk7CisgICAgICAgIExWYWx1ZSBjYWxsID0gdm1DYWxsKFZv
aWQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCksIG1fY2Fs
bEZyYW1lLCBiYXNlKTsKKyAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZUNDYWxsUmVhZCgmbV9oZWFw
cy5yb290LCBjYWxsKTsKKyAgICAgICAgbV9oZWFwcy5kZWNvcmF0ZUNDYWxsV3JpdGUoJm1faGVh
cHMuSlNDZWxsX2NlbGxTdGF0ZSwgY2FsbCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxT
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0
ZS5oCShyZXZpc2lvbiAyMTA1MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxs
U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTcgKzI5LDIwIEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCisvLyBUaGUgQ2VsbFN0YXRlIG9mIGEgY2VsbCBpcyBhIGtpbmQgb2YgaGludCBhYm91
dCB3aGF0IHRoZSBzdGF0ZSBvZiB0aGUgY2VsbCBpcy4KIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDog
dWludDhfdCB7CiAgICAgLy8gVGhlIG9iamVjdCBpcyBlaXRoZXIgY3VycmVudGx5IGJlaW5nIHNj
YW5uZWQsIG9yIGl0IGhhcyBmaW5pc2hlZCBiZWluZyBzY2FubmVkLCBvciB0aGlzCiAgICAgLy8g
aXMgYSBmdWxsIGNvbGxlY3Rpb24gYW5kIGl0J3MgYWN0dWFsbHkgYSB3aGl0ZSBvYmplY3QgKHlv
dSdkIGtub3cgYmVjYXVzZSBpdHMgbWFyayBiaXQKICAgICAvLyB3b3VsZCBiZSBjbGVhcikuCi0g
ICAgUG9zc2libHlPbGRPckJsYWNrID0gMCwKKyAgICBQb3NzaWJseUJsYWNrID0gMCwKICAgICAK
ICAgICAvLyBUaGUgb2JqZWN0IGlzIGluIGVkZW4uIER1cmluZyBHQywgdGhpcyBtZWFucyB0aGF0
IHRoZSBvYmplY3QgaGFzIG5vdCBiZWVuIG1hcmtlZCB5ZXQuCi0gICAgRGVmaW5pdGVseU5ld0Fu
ZFdoaXRlID0gMSwKKyAgICBEZWZpbml0ZWx5V2hpdGUgPSAxLAogCi0gICAgLy8gVGhlIG9iamVj
dCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQuCi0gICAgRGVmaW5pdGVseUdyZXkg
PSAyLAorICAgIC8vIFRoaXMgc29ydGEgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGlzIGdyZXkgLSBp
LmUuIGl0IHdpbGwgYmUgc2Nhbm5lZC4gT3IgaXQgY291bGQgYmUgd2hpdGUKKyAgICAvLyBkdXJp
bmcgYSBmdWxsIGNvbGxlY3Rpb24gaWYgaXRzIG1hcmsgYml0IGlzIGNsZWFyLiBUaGF0IHdvdWxk
IGhhcHBlbiBpZiBpdCBoYWQgYmVlbiBibGFjaywKKyAgICAvLyBnb3QgYmFycmllcmVkLCBhbmQg
d2UgZGlkIGEgZnVsbCBjb2xsZWN0aW9uLgorICAgIFBvc3NpYmx5R3JleSA9IDIKIH07CiAKIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDA7IC8vIHggPD0gYmxhY2tUaHJl
c2hvbGQgbWVhbnMgeCBpcyBQb3NzaWJseU9sZE9yQmxhY2suCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjEwNTIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Myw3ICsyNjMsNiBAQCBIZWFw
OjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2NvZGVCbG9ja3Moc3Rk
OjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tTZXQ+KCkpCiAgICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhz
dGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJSb3V0aW5lU2V0PigpKQogICAgICwgbV9pc1NhZmVUb0Nv
bGxlY3QoZmFsc2UpCi0gICAgLCBtX3dyaXRlQmFycmllckJ1ZmZlcigyNTYpCiAgICAgLCBtX3Zt
KHZtKQogICAgIC8vIFdlIHNlZWQgd2l0aCAxMG1zIHNvIHRoYXQgR0NBY3Rpdml0eUNhbGxiYWNr
OjpkaWRBbGxvY2F0ZSBkb2Vzbid0IGNvbnRpbnVvdXNseSAKICAgICAvLyBzY2hlZHVsZSB0aGUg
dGltZXIgaWYgd2UndmUgbmV2ZXIgZG9uZSBhIGNvbGxlY3Rpb24uCkBAIC01ODQsNyArNTgzLDcg
QEAgdm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydAogICAgIAogICAgIGZv
ciAodW5zaWduZWQgaXRlcmF0aW9uID0gMTsgOyArK2l0ZXJhdGlvbikgewogICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgIGRhdGFMb2coImkjIiwgaXRlcmF0aW9uLCAi
ICIsIHNsb3RWaXNpdG9yLmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwgIisiLCBtX211dGF0
b3JNYXJrU3RhY2stPnNpemUoKSArIHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKS5zaXpl
KCksICIgYj0iLCBtX2JhcnJpZXJzRXhlY3V0ZWQsICIgIik7CisgICAgICAgICAgICBkYXRhTG9n
KCJpIyIsIGl0ZXJhdGlvbiwgIiBiPSIsIG1fYmFycmllcnNFeGVjdXRlZCwgIiAiKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChzbG90VmlzaXRvci5kaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKICAg
ICAgICAgICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwpAQCAtNjEwLDYgKzYwOSw5
IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICAgICAgICAg
IG1fc2NoZWR1bGVyLT5kaWRFeGVjdXRlQ29uc3RyYWludHMoKTsKICAgICAgICAgfQogICAgICAg
ICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKHNs
b3RWaXNpdG9yLmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwgIisiLCBtX211dGF0b3JNYXJr
U3RhY2stPnNpemUoKSArIHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKS5zaXplKCksICIg
Iik7CisgICAgICAgIAogICAgICAgICB7CiAgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVy
IGVuYWJsZXIoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgc2xvdFZpc2l0b3IuZHJhaW5JblBh
cmFsbGVsKG1fc2NoZWR1bGVyLT50aW1lVG9SZXN1bWUoKSk7CkBAIC05NDAsMjQgKzk0Miw0OSBA
QCB2b2lkIEhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCkKICAgICBtX2ppdFN0dWJS
b3V0aW5lcy0+ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7CiB9CiAKLXZv
aWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3ZvaWQgSGVh
cDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCogY29uc3RDZWxsKQogeworICAgIEpT
Q2VsbCogY2VsbCA9IGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY29uc3RDZWxsKTsKICAgICBBU1NFUlQo
Y2VsbCk7CiAgICAgQVNTRVJUKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkgfHwgIWlzQ29t
cGlsYXRpb25UaHJlYWQoKSk7CiAgICAgbV9iYXJyaWVyc0V4ZWN1dGVkKys7Ci0gICAgaWYgKCFI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgewotICAgICAgICAvLyBEdXJpbmcgYSBm
dWxsIGNvbGxlY3Rpb24gYSBzdG9yZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBz
dXJpdml2ZWQgcGFzdAotICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxsIG1hbmlmZXN0IGFzIGEg
c3RvcmUgdG8gYW4gdW5tYXJrZWQgYmxhY2sgb2JqZWN0LiBJZiB0aGUgb2JqZWN0IGdldHMKLSAg
ICAgICAgLy8gbWFya2VkIGF0IHNvbWUgdGltZSBhZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBk
b3duIHRoZSBub3JtYWwgbWFya2luZyBwYXRoLiBXZSBjYW4KLSAgICAgICAgLy8gc2FmZWx5IGln
bm9yZSB0aGVzZSBzdG9yZXMuCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fbXV0
YXRvclNob3VsZEJlRmVuY2VkKSB7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAg
ICAgICBpZiAoIWlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgICAgICAvLyBE
dXJpbmcgYSBmdWxsIGNvbGxlY3Rpb24gYSBzdG9yZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0
aGF0IGhhZCBzdXJpdml2ZWQgcGFzdAorICAgICAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBt
YW5pZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJsYWNrIG9iamVjdC4gSWYgdGhlIG9i
amVjdCBnZXRzCisgICAgICAgICAgICAvLyBtYXJrZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMg
dGhlbiBpdCB3aWxsIGdvIGRvd24gdGhlIG5vcm1hbCBtYXJraW5nIHBhdGguIFdlIGNhbgorICAg
ICAgICAgICAgLy8gc2FmZWx5IGlnbm9yZSB0aGVzZSBzdG9yZXMuCisgICAgICAgICAgICBpZiAo
Y2VsbC0+YXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nKENlbGxTdGF0ZTo6UG9z
c2libHlCbGFjaywgQ2VsbFN0YXRlOjpEZWZpbml0ZWx5V2hpdGUpID09IENlbGxTdGF0ZTo6UG9z
c2libHlCbGFjaykgeworICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwcm90ZWN0IGFnYWluc3Qg
dGhpcyByYWNlOgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgIDEp
IE9iamVjdCBzdGFydHMgb3V0IGJsYWNrICsgdW5tYXJrZWQuCisgICAgICAgICAgICAgICAgLy8g
ICAgIC0tPiBXZSBkbyBpc01hcmtlZENvbmN1cnJlbnRseSBoZXJlLgorICAgICAgICAgICAgICAg
IC8vICAgICAyKSBPYmplY3QgaXMgbWFya2VkIGFuZCBncmV5ZWQuCisgICAgICAgICAgICAgICAg
Ly8gICAgIDMpIE9iamVjdCBpcyBzY2FubmVkIGFuZCBibGFja2VkLgorICAgICAgICAgICAgICAg
IC8vICAgICAtLT4gV2UgZG8gYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nIGhl
cmUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ug
d2Ugd291bGQgaGF2ZSBtYWRlIHRoZSBvYmplY3Qgd2hpdGUgYWdhaW4sIGV2ZW4gdGhvdWdoIGl0
IHNob3VsZAorICAgICAgICAgICAgICAgIC8vIGJlIGJsYWNrLiBUaGlzIGNoZWNrIGxldHMgdXMg
Y29ycmVjdCBvdXIgbWlzdGFrZS4gVGhpcyByZWxpZXMgb24gdGhlIGZhY3QgdGhhdAorICAgICAg
ICAgICAgICAgIC8vIGlzTWFya2VkQ29uY3VycmVudGx5IGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5
IHRvIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKCFpc01hcmtlZENvbmN1cnJlbnRseShjZWxs
KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBPSyAtIHRoZSBvYmplY3QgcmVhbGx5IGRlc2Vy
dmVzIHRvIGJlIHdoaXRlIQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEl0J3MgZGlmZmlj
dWx0IHRvIHdvcmsgb3V0IHdoZXRoZXIgdGhlIG9iamVjdCBzaG91bGQgYmUgZ3JleSBvciBibGFj
ayBhdAorICAgICAgICAgICAgICAgIC8vIHRoaXMgcG9pbnQuIFdlIHNheSBibGFjayBjb25zZXJ2
YXRpdmVseS4KKyAgICAgICAgICAgICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpQ
b3NzaWJseUJsYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZQorICAg
ICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOwogICAgIC8vIEl0
IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFucyB0
aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKICAgICAvLyBzdGF0ZSB0byBEZWZpbml0ZWx5
R3JleSBhbmQgdGhlbiB0byBQb3NzaWJseU9sZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3MgT0sg
Zm9yIHVzIHRvCiAgICAgLy8gcmFjZSB3aXRoIHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ugd2lu
IHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfCiAgICAgLy8g
Z2V0IHNjYW5uZWQgYWdhaW4uIElmIHdlIGxvc2UgdGhlbiBzb21lb25lIGVsc2Ugd2lsbCBiYXJy
aWVyIHRoZSBvYmplY3QgYWdhaW4uIFRoYXQgd291bGQKICAgICAvLyBiZSB1bmZvcnR1bmF0ZSBi
dXQgbm90IHRoZSBlbmQgb2YgdGhlIHdvcmxkLgotICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxs
U3RhdGU6OkRlZmluaXRlbHlHcmV5KTsKKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRl
OjpQb3NzaWJseUdyZXkpOwogICAgIG1fbXV0YXRvck1hcmtTdGFjay0+YXBwZW5kKGNlbGwpOwog
fQogCkBAIC0xMTc3LDcgKzEyMDQsNiBAQCB2b2lkIEhlYXA6OnN0b3BUaGVXb3JsZCgpCiAgICAg
CiAgICAgdm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZy
YW1lKTsKICAgICAKLSAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwogICAgIG1fc3RydWN0
dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOwogICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9j
YXRpbmcoKTsKICAgICAKQEAgLTE1OTcsMTEgKzE2MjMsNiBAQCB2b2lkIEhlYXA6OndpbGxTdGFy
dENvbGxlY3Rpb24oc3RkOjpvcHRpCiAgICAgICAgIG9ic2VydmVyLT53aWxsR2FyYmFnZUNvbGxl
Y3QoKTsKIH0KIAotdm9pZCBIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpCi17Ci0gICAg
bV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwotfQotCiB2b2lkIEhlYXA6OnByZXBh
cmVGb3JNYXJraW5nKCkKIHsKICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JNYXJraW5nKCk7
CkBAIC0xODgyLDEyICsxOTAzLDYgQEAgdm9pZCBIZWFwOjp6b21iaWZ5RGVhZE9iamVjdHMoKQog
ICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaERlYWRDZWxsKGl0ZXJhdGlvblNjb3BlLCBab21iaWZ5
KCkpOwogfQogCi12b2lkIEhlYXA6OmZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCogY2Vs
bCkKLXsKLSAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVzaCgqdGhpcyk7Ci0gICAgbV93cml0
ZUJhcnJpZXJCdWZmZXIuYWRkKGNlbGwpOwotfQotCiBib29sIEhlYXA6OnNob3VsZERvRnVsbENv
bGxlY3Rpb24oc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IHNjb3BlKSBjb25zdAogewog
ICAgIGlmICghT3B0aW9uczo6dXNlR2VuZXJhdGlvbmFsR0MoKSkKQEAgLTE5NjUsNyArMTk4MCw3
IEBAIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyU2xvd1BhdGgoY29uc3QgSlMKICAgICAgICAgLy8g
SW4gdGhpcyBjYXNlLCB0aGUgYmFycmllclRocmVzaG9sZCBpcyB0aGUgdGF1dG9sb2dpY2FsIHRo
cmVzaG9sZCwgc28gZnJvbSBjb3VsZCBzdGlsbCBiZQogICAgICAgICAvLyBub3QgYmxhY2suIEJ1
dCB3ZSBjYW4ndCBrbm93IGZvciBzdXJlIHVudGlsIHdlIGZpcmUgb2ZmIGEgZmVuY2UuCiAgICAg
ICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsKLSAgICAgICAgaWYgKGZyb20tPmNlbGxTdGF0ZSgp
ICE9IENlbGxTdGF0ZTo6UG9zc2libHlPbGRPckJsYWNrKQorICAgICAgICBpZiAoZnJvbS0+Y2Vs
bFN0YXRlKCkgIT0gQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNrKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKQEAgLTIyMTMsNyArMjIyOCw3IEBAIHZvaWQgSGVhcDo6YnVpbGRDb25z
dHJhaW50U2V0KCkKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMgYSBjb25zdHJh
aW50IG9ubHkgaWYgaXQncyBibGFjay4KICAgICAgICAgICAgICAgICAgICAgaWYgKEhlYXA6Omlz
TWFya2VkKGNvZGVCbG9jaykKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+
Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseU9sZE9yQmxhY2spCisgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBjb2RlQmxvY2stPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6UG9z
c2libHlCbGFjaykKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLnZpc2l0QXND
b25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMTA1MjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQz
LDYgQEAKICNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKICNpbmNsdWRlICJXZWFrSGFuZGxlT3du
ZXIuaCIKICNpbmNsdWRlICJXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCi0jaW5jbHVkZSAiV3Jp
dGVCYXJyaWVyQnVmZmVyLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyU3VwcG9ydC5oIgogI2lu
Y2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAg
LTEyNSw5ICsxMjQsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGFrZSB0aGlzIGlmIHlvdSBrbm93IHRo
YXQgZnJvbS0+Y2VsbFN0YXRlKCkgPCBiYXJyaWVyVGhyZXNob2xkLgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgd3JpdGVCYXJyaWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKTsKIAot
ICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyKCkgeyByZXR1cm4gbV93
cml0ZUJhcnJpZXJCdWZmZXI7IH0KLSAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEpT
Q2VsbCopOwotICAgIAogICAgIHZvaWQgd3JpdGVCYXJyaWVyT3BhcXVlUm9vdCh2b2lkKik7CiAK
ICAgICBIZWFwKFZNKiwgSGVhcFR5cGUpOwpAQCAtNDQ1LDcgKzQ0MSw2IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgdm9pZCBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7CiAgICAgdm9pZCB3aWxsU3Rh
cnRDb2xsZWN0aW9uKHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPik7Ci0gICAgdm9pZCBm
bHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwogICAgIHZvaWQgcHJlcGFyZUZvck1hcmtpbmcoKTsK
ICAgICAKICAgICB2b2lkIG1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0VGltZSk7CkBAIC01
NjQsNyArNTU5LDYgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0
OwogCi0gICAgV3JpdGVCYXJyaWVyQnVmZmVyIG1fd3JpdGVCYXJyaWVyQnVmZmVyOwogICAgIGJv
b2wgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIo
KSB9OwogICAgIHVuc2lnbmVkIG1fYmFycmllclRocmVzaG9sZCB7IE9wdGlvbnM6OmZvcmNlRmVu
Y2VkQmFycmllcigpID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hvbGQgfTsK
ICAgICBWZWN0b3I8Ym9vbCo+IG1fbXV0YXRvclNob3VsZEJlRmVuY2VkQ2FjaGVzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjEw
NTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlND
ZWxsT3JBdXhpbGlhcgogICAgICAgICBKU0NlbGwqIGpzQ2VsbCA9IHN0YXRpY19jYXN0PEpTQ2Vs
bCo+KGhlYXBDZWxsKTsKICAgICAgICAgdmFsaWRhdGVDZWxsKGpzQ2VsbCk7CiAgICAgICAgIAot
ICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkRlZmluaXRlbHlHcmV5KTsK
KyAgICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpQb3NzaWJseUdyZXkpOwog
CiAgICAgICAgIGFwcGVuZFRvTWFya1N0YWNrKGpzQ2VsbCk7CiAgICAgICAgIHJldHVybjsKQEAg
LTI2Niw3ICsyNjYsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnNldE1hcmtl
CiAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGUgb2JqZWN0IGlzIGdyZXkgYW5kIHRoYXQ6CiAgICAg
Ly8gSW4gY2FzZSBvZiBjb25jdXJyZW50IEdDOiBpdCdzIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGdy
ZXkgaW4gdGhpcyBHQyBjeWNsZS4KICAgICAvLyBJbiBjYXNlIG9mIGVkZW4gY29sbGVjdGlvbjog
aXQncyBhIG5ldyBvYmplY3QgdGhhdCBiZWNhbWUgZ3JleSByYXRoZXIgdGhhbiBhbiBvbGQgcmVt
ZW1iZXJlZCBvYmplY3QuCi0gICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6RGVmaW5p
dGVseUdyZXkpOworICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OlBvc3NpYmx5R3Jl
eSk7CiAgICAgCiAgICAgYXBwZW5kVG9NYXJrU3RhY2soY29udGFpbmVyLCBjZWxsKTsKIH0KQEAg
LTI4NCw3ICsyODQsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRv
CiB7CiAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKICAgICBB
U1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwotICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9
PSBDZWxsU3RhdGU6OkRlZmluaXRlbHlHcmV5KTsKKyAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRl
KCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseUdyZXkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3Rl
TWFya2VkKCk7CiAgICAgCkBAIC0zNzEsNyArMzcxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNs
b3RWaXNpdG9yOjp2aXNpdENoaQogICAgIC8vIG5vdCBjbGVhciB0byBtZSB0aGF0IGl0IHdvdWxk
IGJlIGNvcnJlY3Qgb3IgcHJvZml0YWJsZSB0byBiYWlsIGhlcmUgaWYgdGhlIG9iamVjdCBpcyBh
bHJlYWR5CiAgICAgLy8gYmxhY2suCiAgICAgCi0gICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxT
dGF0ZTo6UG9zc2libHlPbGRPckJsYWNrKTsKKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0
YXRlOjpQb3NzaWJseUJsYWNrKTsKICAgICAKICAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmll
ckJ1ZmZlci5jcHAJKHJldmlzaW9uIDIxMDUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dyaXRlQmFycmllckJ1ZmZlci5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldyaXRlQmFycmll
ckJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiR0NBc3NlcnRpb25zLmgiCi0jaW5jbHVkZSAiSGVhcC5o
IgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRl
ICJTdHJ1Y3R1cmUuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVdyaXRlQmFycmllckJ1ZmZlcjo6
V3JpdGVCYXJyaWVyQnVmZmVyKHVuc2lnbmVkIGNhcGFjaXR5KQotICAgIDogbV9jdXJyZW50SW5k
ZXgoMCkKLSAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCi0gICAgLCBtX2J1ZmZlcihzdGF0aWNf
Y2FzdDxKU0NlbGwqKj4oZmFzdE1hbGxvYyhzaXplb2YoSlNDZWxsKikgKiBjYXBhY2l0eSkpKQot
ewotfQotCi1Xcml0ZUJhcnJpZXJCdWZmZXI6On5Xcml0ZUJhcnJpZXJCdWZmZXIoKQotewotICAg
IGZhc3RGcmVlKG1fYnVmZmVyKTsKLX0KLQotdm9pZCBXcml0ZUJhcnJpZXJCdWZmZXI6OmZsdXNo
KEhlYXAmIGhlYXApCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDw9IG1fY2FwYWNpdHkp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50SW5kZXg7ICsraSkKLSAgICAg
ICAgaGVhcC53cml0ZUJhcnJpZXIobV9idWZmZXJbaV0pOwotICAgIG1fY3VycmVudEluZGV4ID0g
MDsKLX0KLQotdm9pZCBXcml0ZUJhcnJpZXJCdWZmZXI6OnJlc2V0KCkKLXsKLSAgICBtX2N1cnJl
bnRJbmRleCA9IDA7Ci19Ci0KLXZvaWQgV3JpdGVCYXJyaWVyQnVmZmVyOjphZGQoSlNDZWxsKiBj
ZWxsKQotewotICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1NfVkFMSUQoY2VsbCk7Ci0gICAgQVNT
RVJUKG1fY3VycmVudEluZGV4IDwgbV9jYXBhY2l0eSk7Ci0gICAgbV9idWZmZXJbbV9jdXJyZW50
SW5kZXgrK10gPSBjZWxsOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5oCShyZXZpc2lvbiAy
MTA1MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1jbGFzcyBIZWFwOwotY2xhc3MgSlNDZWxsOwotCi1jbGFzcyBXcml0ZUJhcnJpZXJCdWZm
ZXIgewotcHVibGljOgotICAgIFdyaXRlQmFycmllckJ1ZmZlcih1bnNpZ25lZCBjYXBhY2l0eSk7
Ci0gICAgfldyaXRlQmFycmllckJ1ZmZlcigpOwotCi0gICAgdm9pZCBhZGQoSlNDZWxsKik7Ci0g
ICAgdm9pZCBmbHVzaChIZWFwJik7Ci0gICAgdm9pZCByZXNldCgpOwotCi0gICAgdW5zaWduZWQq
IGN1cnJlbnRJbmRleEFkZHJlc3MoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX2N1cnJlbnRJ
bmRleDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9jYXBhY2l0eTsKLSAgICB9Ci0KLSAgICBKU0NlbGwqKiBidWZmZXIoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1
bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKLSAgICBjb25zdCB1bnNpZ25lZCBtX2NhcGFjaXR5Owot
ICAgIEpTQ2VsbCoqIGNvbnN0IG1fYnVmZmVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDIxMDUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxODgsMTMgKzIxODgsNiBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHJlc3VsdCk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25GbHVzaFdyaXRl
QmFycmllckJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKLSAgICB2bS0+aGVhcC5mbHVzaFdyaXRlQmFycmllckJ1ZmZlcihjZWxsKTsKLX0KLQog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9TUldyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMTA1MjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDI2LDcgKzQyNiw2IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRU
b1Njb3BlKEUKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZs
eVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNP
YmplY3QqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxs
b2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwogCi12b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgoRXhlY1N0YXRlKiwg
SlNDZWxsKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKEV4
ZWNTdGF0ZSosIEpTQ2VsbCopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyMTA1MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3
ICs0MSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIEpTQ2VsbDo6SlNDZWxsKENyZWF0
aW5nRWFybHlDZWxsVGFnKQotICAgIDogbV9jZWxsU3RhdGUoQ2VsbFN0YXRlOjpEZWZpbml0ZWx5
TmV3QW5kV2hpdGUpCisgICAgOiBtX2NlbGxTdGF0ZShDZWxsU3RhdGU6OkRlZmluaXRlbHlXaGl0
ZSkKIHsKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiB9CkBAIC01MSw3ICs1
MSw3IEBAIGlubGluZSBKU0NlbGw6OkpTQ2VsbChWTSYsIFN0cnVjdHVyZSogc3QKICAgICAsIG1f
aW5kZXhpbmdUeXBlQW5kTWlzYyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rv
cnkoKSkKICAgICAsIG1fdHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKQogICAgICwg
bV9mbGFncyhzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpCi0gICAgLCBt
X2NlbGxTdGF0ZShDZWxsU3RhdGU6OkRlZmluaXRlbHlOZXdBbmRXaGl0ZSkKKyAgICAsIG1fY2Vs
bFN0YXRlKENlbGxTdGF0ZTo6RGVmaW5pdGVseVdoaXRlKQogewogICAgIEFTU0VSVCghaXNDb21w
aWxhdGlvblRocmVhZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlEQmxvYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCShyZXZpc2lvbiAyMTA1MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgICAgICB1LmZpZWxkcy5pbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5ID0gaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeTsKICAgICAgICAgdS5m
aWVsZHMudHlwZSA9IHR5cGVJbmZvLnR5cGUoKTsKICAgICAgICAgdS5maWVsZHMuaW5saW5lVHlw
ZUZsYWdzID0gdHlwZUluZm8uaW5saW5lVHlwZUZsYWdzKCk7Ci0gICAgICAgIHUuZmllbGRzLmRl
ZmF1bHRDZWxsU3RhdGUgPSBDZWxsU3RhdGU6OkRlZmluaXRlbHlOZXdBbmRXaGl0ZTsKKyAgICAg
ICAgdS5maWVsZHMuZGVmYXVsdENlbGxTdGF0ZSA9IENlbGxTdGF0ZTo6RGVmaW5pdGVseVdoaXRl
OwogICAgIH0KIAogICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVyZUlEQmxvYiYgb3Ro
ZXIpIHsgdS5kb3VibGVXb3JkID0gb3RoZXIudS5kb3VibGVXb3JkOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298443</attachid>
            <date>2017-01-09 20:57:52 -0800</date>
            <delta_ts>2017-01-09 20:57:52 -0800</delta_ts>
            <desc>it seems to work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>76316</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwNTIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBA
QAorMjAxNy0wMS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIGJhcnJpZXIgc2hvdWxkbid0IG5lZWQgYW55IGZlbmNlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODQ3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBPdXIgY3VycmVudCBiYXJyaWVy
LCBwcmlvciB0byB0aGlzIHBhdGNoLCBpbnZvbHZlcyBhIHNsb3cgcGF0aCBleGVjdXRpb24sIGlu
Y2x1ZGluZyBhCisgICAgICAgIHN0b3JlLWxvYWQgZmVuY2UsIGV2ZXJ5IHRpbWUgdGhhdCBhbnkg
b2JqZWN0IGlzIHN0b3JlZCB0byBkdXJpbmcgR0MuIENvbWJpbmVkIHdpdGggdGhlCisgICAgICAg
IGFuY2llbnQgYmFycmllciBidWZmZXJpbmcgb3B0aW1pemF0aW9uLCBzdG9yZXMgdG8gb2xkIG9i
amVjdHMgcHJvYmFibHkgZW5kIHVwIGdldHRpbmcKKyAgICAgICAgbG9nZ2VkIGFuZCBldmVudHVh
bGx5IHJlamVjdGVkIHdpdGggYW4gaXNNYXJrZWQgY2hlY2suIFRoYXQgbWVhbnMgcmVhbGx5IGhp
Z2ggb3ZlcmhlYWRzCisgICAgICAgIGZvciBhbnkgcHJvZ3JhbSB0aGF0IHZpb2xhdGVzIHRoZSBn
ZW5lcmF0aW9uYWwgaHlwb3RoZXNpcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggaW50
cm9kdWNlcyBhIGJhcnJpZXIgdGhhdCB1c2VzIGEgUmVzY2FuQml0IGluIHRoZSBjZWxsU3RhdGUg
dG8gZGV0ZXJtaW5lIGlmCisgICAgICAgIHRoZSBvYmplY3QgaGFkIGJlZW4gbG9nZ2VkLiBUaGUg
YmFycmllciBkb2Vzbid0IGRvIGFueXRoaW5nIGZvciBhbHJlYWR5LWxvZ2dlZCBvYmplY3RzLgor
ICAgICAgICBUaGlzIGRvZXNuJ3QgcmVxdWlyZSBhbnkgZmVuY2VzLCBzaW5jZSB0aGUgcmVzY2Fu
IGJpdCBpcyBvbmx5IGNsZWFyZWQgd2hlbiB3ZSBmbHVzaCB0aGUKKyAgICAgICAgbG9nLiBMb2cg
Zmx1c2hpbmcgaGFwcGVucyBvbiB0aGUgbWFpbiB0aHJlYWQgb3IgYnkgR0MuIAorCisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgor
ICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJl
cml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N0b3JlQmFycmllcik6CisgICAgICAgICogZGZnL0RG
R05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6b3NyV3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBkZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9F
eGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJh
cnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaDoKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RvcmVCYXJyaWVyKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZW1pdFN0b3JlQmFycmllcik6Cisg
ICAgICAgICogaGVhcC9DZWxsU3RhdGUuaDoKKyAgICAgICAgKEpTQzo6aXNXaXRoaW5UaHJlc2hv
bGQpOgorICAgICAgICAoSlNDOjp3aXRoTmV3Q29sb3IpOgorICAgICAgICAqIGhlYXAvSGVhcC5j
cHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJr
VG9GaXhwb2ludCk6CisgICAgICAgIChKU0M6OkhlYXA6OnN0b3BUaGVXb3JsZCk6CisgICAgICAg
IChKU0M6OkhlYXA6OnJlc3VtZVRoZVdvcmxkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y2Fub25p
Y2FsaXplQmxhY2spOgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJpZXJTbG93UGF0aCk6
CisgICAgICAgIChKU0M6OkhlYXA6OmhhbmRsZUJ1ZmZlcmVkUmVzY2FuKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6ZmluaXNoV3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YnVpbGRD
b25zdHJhaW50U2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0TXV0YXRvclNob3VsZEJlRmVu
Y2VkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpOiBEZWxldGVkLgor
ICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0b3JTbG90
VmlzaXRvcik6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllckJ1ZmZlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkhlYXA6Om11dGF0b3JNYXJrU3RhY2spOiBEZWxldGVkLgorICAg
ICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6d3JpdGVCYXJy
aWVyV2l0aG91dEZlbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNr
KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGhlYXAvV3Jp
dGVCYXJyaWVyQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyQnVmZmVyOjpm
bHVzaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6YWRkKTog
RGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL1dyaXRlQmFycmllckJ1ZmZlci5oOgorICAgICAgICAo
SlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6OnNpemUpOgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJp
ZXJCdWZmZXI6OmlzRW1wdHkpOgorICAgICAgICAqIGhlYXAvV3JpdGVCYXJyaWVyQnVmZmVySW5s
aW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyQnVmZmVyOjpmbHVzaCk6
CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6YWRkKToKKyAgICAgICAgKiBqaXQv
QXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YmFycmll
ckJyYW5jaFdpdGhvdXRGZW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6YmFycmllclN0b3JlTG9hZEZlbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklU
T3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlV2Vhayk6CisgICAgICAgICogcnVu
dGltZS9KU0NlbGxJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsKToKKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlE
QmxvYi5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OlN0cnVjdHVyZUlEQmxvYik6
CisKIDIwMTctMDEtMDggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBNYWtlIHRoZSBjb2xsZWN0b3IncyBmaXhwb2ludCBzbWFydCBhYm91dCBzY2hlZHVsaW5nIHdv
cmsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTA1MjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzI1LDYgKzcyNSw3IEBACiAJCTBGQ0VGQURGMTgw
NzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9j
YXRpb24uY3BwICovOyB9OwogCQkwRkNFRkFFMDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VG
QURFMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAv
KiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDJE
NjJEMUUyNDBDRDQwMEE3RUIzRCAvKiBXcml0ZUJhcnJpZXJCdWZmZXJJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyRDYyQzFFMjQwQ0Qx
MDBBN0VCM0QgLyogV3JpdGVCYXJyaWVyQnVmZmVySW5saW5lcy5oICovOyB9OwogCQkwRkQzQzgy
NjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdE
cml2ZXIuY3BwICovOyB9OwogCQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgy
MjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi87IH07CiAJCTBGRDNFNDAxMUI2MThB
QUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0Uz
RkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5jcHAgKi87IH07CkBAIC0zMTc0LDYgKzMxNzUsNyBAQAogCQkwRkNFRkFERDE4MDcz
OEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRlRMTG9jYXRpb24uY3BwOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8q
IEZUTExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExvY2F0
aW9uLmg7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkQyRDYyQzFFMjQwQ0QxMDBBN0VCM0QgLyogV3JpdGVC
YXJyaWVyQnVmZmVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
cml0ZUJhcnJpZXJCdWZmZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdEcml2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMjE0MTE1RDBFMDBG
RDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHA7IHBh
dGggPSBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU4MTYsNiArNTgxOCw3IEBACiAJCQkJMTQx
NTAxMzIxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggKi8sCiAJCQkJMkE0RUM5
MDkxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi8sCiAJCQkJMkE0
RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovLAorCQkJCTBG
RDJENjJDMUUyNDBDRDEwMEE3RUIzRCAvKiBXcml0ZUJhcnJpZXJCdWZmZXJJbmxpbmVzLmggKi8s
CiAJCQkJMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3Bw
ICovLAogCQkJCTBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0
LmggKi8sCiAJCQkpOwpAQCAtNzc3Myw2ICs3Nzc2LDcgQEAKIAkJCQkwRkZBNTQ5ODE2Qjg4MzUz
MDBCM0E5ODIgLyogQTY0RE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRkU1MUMxOTIy
QTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFF
MzBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZEMkQ2MkQxRTI0MENENDAwQTdFQjNEIC8qIFdyaXRlQmFycmllckJ1ZmZlcklu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENDkzN0M0MUREQkU2MTQwMDc3QzgwNyAvKiBB
YnN0cmFjdE1vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NUYwRjUxNEQxMDYz
QzAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNzBCNEY2MUJG
MjYyMDUwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRC
YXNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIx
MDUyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5NDUsOCArMjk0NSw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgY2FzZSBTdG9yZUJhcnJpZXI6Ci0gICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6IHsK
KyAgICBjYXNlIFN0b3JlQmFycmllcjogewogICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCks
IFNwZWNDZWxsKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIxMDUyMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDI5
LDExICs0MjksNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgICAgIHdyaXRlKEpTQ2VsbF9jZWxsU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAg
IAotICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgotICAgICAgICByZWFkKEhlYXApOwotICAg
ICAgICB3cml0ZShKU0NlbGxfY2VsbFN0YXRlKTsKLSAgICAgICAgcmV0dXJuOwotCiAgICAgY2Fz
ZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAg
ZGVmKEhlYXBMb2NhdGlvbihJbnZhbGlkYXRpb25Qb2ludExvYywgV2F0Y2hwb2ludF9maXJlKSwg
TGF6eU5vZGUobm9kZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyc0V4aXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHJldmlzaW9uIDIxMDUyMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY3LDcgKzY3LDYgQEAgYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZAog
ICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgQ291bnRFeGVj
dXRpb246CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6Ci0gICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJp
ZXI6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIC8vIFRoZXNlIGRvIGNsb2JiZXIgbWVtb3J5LCBi
dXQgbm90aGluZyB0aGF0IGlzIG9ic2VydmFibGUuIEl0IG1heSBiZSBuaWNlIHRvIHNlcGFyYXRl
IHRoZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNp
b24gMjEwNTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjAzLDcgKzIwMyw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2Fz
ZSBMb29wSGludDoKICAgICBjYXNlIFN0b3JlQmFycmllcjoKLSAgICBjYXNlIEZlbmNlZFN0b3Jl
QmFycmllcjoKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgIGNhc2UgTm90aWZ5V3Jp
dGU6CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyMTA1MjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1
Nyw3ICsxNDU3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAgICAg
IGNhc2UgR2V0U3RhY2s6CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgotICAgICAgICBjYXNl
IEZlbmNlZFN0b3JlQmFycmllcjoKICAgICAgICAgY2FzZSBHZXRSZWdFeHBPYmplY3RMYXN0SW5k
ZXg6CiAgICAgICAgIGNhc2UgU2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OgogICAgICAgICBjYXNl
IFJlY29yZFJlZ0V4cENhY2hlZFJlc3VsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMjEwNTIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg3LDcgKzg3LDYgQEAg
RXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgTm90aWZ5
V3JpdGU6CiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6Ci0g
ICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBj
YXNlIFB1dENsb3N1cmVWYXI6CiAgICAgY2FzZSBSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjEwNTIxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05
MjMsNyArOTIzLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1N0b3JlQmFycmllcigpCiAgICAg
ewotICAgICAgICByZXR1cm4gb3AoKSA9PSBTdG9yZUJhcnJpZXIgfHwgb3AoKSA9PSBGZW5jZWRT
dG9yZUJhcnJpZXI7CisgICAgICAgIHJldHVybiBvcCgpID09IFN0b3JlQmFycmllcjsKICAgICB9
CiAKICAgICBib29sIGhhc0lkZW50aWZpZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjEwNTIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzkzLDcgKzM5Myw2IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhDaGVja1dhdGNoZG9n
VGltZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICAvKiBXcml0ZSBiYXJyaWVycyAqL1wKICAg
ICBtYWNybyhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhGZW5j
ZWRTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogRm9yLWlu
IGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAgICAgbWFjcm8oR2V0RW51bWVyYWJsZUxlbmd0aCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2
aXNpb24gMjEwNTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBy
ZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogCiBzdGF0aWMgdm9pZCBvc3JXcml0
ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gp
CiB7Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4g
PSBqaXQuYmFycmllckJyYW5jaFdpdGhvdXRGZW5jZShvd25lcik7CisgICAgQXNzZW1ibHlIZWxw
ZXJzOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBqaXQuYmFycmllckJyYW5jaChv
d25lciwgc2NyYXRjaCk7CiAKICAgICAvLyBXZSBuZWVkIHRoZXNlIGV4dHJhIHNsb3RzIGJlY2F1
c2Ugc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlIHdpbGwgdXNlIHBva2Ugb24geDg2LgogI2lm
IENQVShYODYpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjEwNTIxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDI0LDcgKzEwMjQsNiBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICBjYXNlIEtpbGxTdGFjazoKICAgICAgICAgY2Fz
ZSBTdG9yZUJhcnJpZXI6Ci0gICAgICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOgogICAgICAg
ICBjYXNlIEdldFN0YWNrOgogICAgICAgICBjYXNlIEdldFJlZ0V4cE9iamVjdExhc3RJbmRleDoK
ICAgICAgICAgY2FzZSBTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjEwNTIxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zODgsNyArMzg4LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjYXNlIFN0b3JlQmFycmll
cjoKLSAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjoKICAgICBjYXNlIFB1dFN0cnVjdHVyZToK
ICAgICBjYXNlIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgICAgIC8vIFdlIGNv
bnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IHRoZXNlIGNhbm5vdCBiZSBwdXQgYW55d2hlcmUsIHdo
aWNoIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjEwNTIx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC01MTU2LDggKzUxNTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgU3RvcmVC
YXJyaWVyOgotICAgIGNhc2UgRmVuY2VkU3RvcmVCYXJyaWVyOiB7CisgICAgY2FzZSBTdG9yZUJh
cnJpZXI6IHsKICAgICAgICAgY29tcGlsZVN0b3JlQmFycmllcihub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMTA1MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTM0
NSw4ICs1MzQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICB1bnJlYWNoYWJsZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIFN0
b3JlQmFycmllcjoKLSAgICBjYXNlIEZlbmNlZFN0b3JlQmFycmllcjogeworICAgIGNhc2UgU3Rv
cmVCYXJyaWVyOiB7CiAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMTA1MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDcg
KzYwLDYgQEAKICNpbmNsdWRlICJSZWdFeHBDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlNjb3Bl
ZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgotI2lu
Y2x1ZGUgIldyaXRlQmFycmllckJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTg4
OTksNDYgKzg4OTgsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0JyYW5jaGVzKCkKIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcihOb2RlKiBub2RlKQogewot
ICAgIEFTU0VSVChub2RlLT5vcCgpID09IFN0b3JlQmFycmllciB8fCBub2RlLT5vcCgpID09IEZl
bmNlZFN0b3JlQmFycmllcik7Ci0gICAgCi0gICAgYm9vbCBpc0ZlbmNlZCA9IG5vZGUtPm9wKCkg
PT0gRmVuY2VkU3RvcmVCYXJyaWVyOwotICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlz
KTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdw
cigpOwotICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwotICAgIAotICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBvazsKICAgICAKLSAgICBpZiAoaXNGZW5jZWQpIHsKLSAg
ICAgICAgb2suYXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2goYmFzZUdQUiwgc2NyYXRjaDFHUFIp
KTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vRmVuY2UgPSBtX2ppdC5q
dW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQoKTsKLSAgICAgICAgbV9qaXQubWVtb3J5RmVuY2Uo
KTsKLSAgICAgICAgb2suYXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UoYmFz
ZUdQUikpOwotICAgICAgICBub0ZlbmNlLmxpbmsoJm1faml0KTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgb2suYXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UoYmFzZUdQUikpOwot
Ci0gICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBtX2ppdC52bSgp
LT5oZWFwLm1fd3JpdGVCYXJyaWVyQnVmZmVyOwotICAgIG1faml0LmxvYWQzMih3cml0ZUJhcnJp
ZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNoMkdQUik7Ci0gICAgSklUQ29t
cGlsZXI6Okp1bXAgbmVlZFRvRmx1c2ggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih3
cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpOwotCi0gICAgbV9qaXQuYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7Ci0gICAgbV9qaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwg
d3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7Ci0KLSAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaDFH
UFIpOwotICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3
ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaDIuCi0gICAgbV9qaXQuc3RvcmVQdHIoYmFzZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lk
KikpKSk7Ci0KLSAgICBvay5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICBuZWVkVG9GbHVzaC5s
aW5rKCZtX2ppdCk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgb2sgPSBtX2ppdC5iYXJyaWVyQnJh
bmNoKGJhc2VHUFIsIHNjcmF0Y2gxR1BSKTsKIAogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJz
KEludmFsaWRHUFJSZWcpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJh
cnJpZXJCdWZmZXIsIGJhc2VHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgsIGJhc2VHUFIpOwogICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52
YWxpZEdQUlJlZyk7CiAKICAgICBvay5saW5rKCZtX2ppdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5n
UGhhc2UuY3BwCShyZXZpc2lvbiAyMTA1MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsNiAr
ODMsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fYmFycmllclBvaW50cy5p
c0VtcHR5KCkpOwogICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIGlm
IHRoaXMgcGhhc2Ugc2hvdWxkIGtlZXAgZG9pbmcgdGhlIGNsdXN0ZXJpbmcuIFRoZSByZWR1bmRh
bmN5CisgICAgICAgIC8vIGVsaW1pbmF0aW9uIGlzIHVzZWZ1bCBmb3Igc3VyZSB0aG91Z2guCisg
ICAgICAgIAogICAgICAgICAvLyBGaXJzdCBpZGVudGlmeSB0aGUgcGxhY2VzIHdoZXJlIHdlIHdv
dWxkIHdhbnQgdG8gcGxhY2UgYWxsIG9mIHRoZSBiYXJyaWVycyBiYXNlZCBvbiBhCiAgICAgICAg
IC8vIGJhY2t3YXJkcyBhbmFseXNpcy4gV2UgdXNlIHRoZSBmdXR1cmVHQyBmbGFnIHRvIHRlbGwg
dXMgaWYgd2UgaGFkIHNlZW4gYSBHQy4gU2luY2UgdGhpcwogICAgICAgICAvLyBpcyBhIGJhY2t3
YXJkcyBhbmFseXNpcywgd2hlbiB3ZSBnZXQgdG8gYSBub2RlLCBmdXR1cmVHQyB0ZWxscyB1cyBp
ZiBhIEdDIHdpbGwgaGFwcGVuCkBAIC0xMzksMTQgKzE0Miw4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgTm9kZSogY2hpbGQgPSBpdGVyLT5jaGlsZDsKICAgICAgICAgICAgICAgICBDb2Rl
T3JpZ2luIHNlbWFudGljT3JpZ2luID0gaXRlci0+c2VtYW50aWNPcmlnaW47CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZVR5cGUgdHlwZTsKLSAgICAgICAgICAgICAgICBp
ZiAoT3B0aW9uczo6dXNlQ29uY3VycmVudEJhcnJpZXJzKCkgJiYgaXRlciA9PSBtX25lZWRlZEJh
cnJpZXJzLmJlZ2luKCkpCi0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBGZW5jZWRTdG9yZUJh
cnJpZXI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB0eXBlID0g
U3RvcmVCYXJyaWVyOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIHR5cGUsIG9yaWdpbi53aXRoU2VtYW50aWMoc2VtYW50aWNPcmlnaW4pLAorICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG9yaWdpbi53aXRo
U2VtYW50aWMoc2VtYW50aWNPcmlnaW4pLAogICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxk
LCBLbm93bkNlbGxVc2UpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fbmVlZGVkQmFy
cmllcnMucmVzaXplKDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIx
MDUyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsMTMgKzQ2Nyw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZShtX2dyYXBoLCBtX25vZGUpKQogICAgICAg
ICAgICAgb3JpZ2luID0gb3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpOwogICAgICAgICAKLSAgICAg
ICAgTm9kZVR5cGUgdHlwZTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJy
aWVycygpKQotICAgICAgICAgICAgdHlwZSA9IEZlbmNlZFN0b3JlQmFycmllcjsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdHlwZSA9IFN0b3JlQmFycmllcjsKLSAgICAgICAgCi0gICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgdHlwZSwgb3Jp
Z2luLCBiYXNlKTsKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgs
IFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG9yaWdpbiwgYmFzZSk7CiAgICAgfQogICAgIAogICAg
IGJvb2wgcmVhbGx5SW5zZXJ0QmFycmllcnMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIx
MDUyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI0LDcgKzEyNCw2IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfZmliZXJzLCBKU1JvcGVT
dHJpbmc6Om9mZnNldE9mRmliZXJzKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KSkg
XAogICAgIG1hY3JvKE1hcmtlZFNwYWNlX1N1YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVwLCBP
QkpFQ1RfT0ZGU0VUT0YoTWFya2VkU3BhY2U6OlN1YnNwYWNlLCBhbGxvY2F0b3JGb3JTaXplU3Rl
cCksIHNpemVvZihNYXJrZWRBbGxvY2F0b3IqKSkgXAogICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50
c19vdmVyZmxvd1N0b3JhZ2UsIFNjb3BlZEFyZ3VtZW50czo6b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0
KCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKLSAgICBtYWNybyhXcml0ZUJhcnJpZXJCdWZm
ZXJfYnVmZmVyQ29udGVudHMsIDAsIHNpemVvZihKU0NlbGwqKSkgXAogICAgIG1hY3JvKGNoYXJh
Y3RlcnM4LCAwLCBzaXplb2YoTENoYXIpKSBcCiAgICAgbWFjcm8oY2hhcmFjdGVyczE2LCAwLCBz
aXplb2YoVUNoYXIpKSBcCiAgICAgbWFjcm8oaW5kZXhlZEludDMyUHJvcGVydGllcywgMCwgc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjEwNTIxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQz
LDcgKzE0Myw2IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAg
ICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAg
ICAgY2FzZSBTdG9yZUJhcnJpZXI6Ci0gICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6CiAgICAg
Y2FzZSBDYWxsOgogICAgIGNhc2UgRGlyZWN0Q2FsbDoKICAgICBjYXNlIFRhaWxDYWxsOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2
aXNpb24gMjEwNTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTc0LDcgKzk3NCw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBjb21waWxlQ291bnRFeGVjdXRpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIFN0b3JlQmFycmllcjoKLSAgICAgICAgY2FzZSBGZW5jZWRTdG9yZUJhcnJpZXI6
CiAgICAgICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CkBAIC04MjY5LDcgKzgyNjgsNyBAQCBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZVN0b3JlQmFycmllcigpCiAgICAgewotICAg
ICAgICBlbWl0U3RvcmVCYXJyaWVyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fbm9kZS0+
b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXIpOworICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVI
YXNJbmRleGVkUHJvcGVydHkoKQpAQCAtMTI5NTgsOTIgKzEyOTU3LDI3IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBtX291dC5sb2FkOFplcm9FeHQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9j
ZWxsU3RhdGUpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFz
ZSwgYm9vbCBpc0ZlbmNlZCkKKyAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZhbHVlIGJhc2Up
CiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Js
b2Nrc0JlZm9yZShzbG93UGF0aCk7CiAKLSAgICAgICAgTFZhbHVlIHRocmVzaG9sZDsKLSAgICAg
ICAgaWYgKGlzRmVuY2VkKQotICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQubG9hZDMyKG1f
b3V0LmFic29sdXRlKHZtKCkuaGVhcC5hZGRyZXNzT2ZCYXJyaWVyVGhyZXNob2xkKCkpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdGhyZXNob2xkID0gbV9vdXQuY29uc3RJbnQzMihibGFj
a1RocmVzaG9sZCk7CisgICAgICAgIExWYWx1ZSB0aHJlc2hvbGQgPSBtX291dC5sb2FkMzIobV9v
dXQuYWJzb2x1dGUodm0oKS5oZWFwLmFkZHJlc3NPZkJhcnJpZXJUaHJlc2hvbGQoKSkpOwogICAg
ICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAogICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9h
ZENlbGxTdGF0ZShiYXNlKSwgdGhyZXNob2xkKSwKICAgICAgICAgICAgIHVzdWFsbHkoY29udGlu
dWF0aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIFdlIGVtaXQgdGhlIHN0b3JlIGJhcnJpZXIgc2xvdyBwYXRoIGxhemlseS4gSW4g
YSBsb3Qgb2YgY2FzZXMsIHRoaXMgd2lsbCBuZXZlciBmaXJlLiBBbmQKLSAgICAgICAgLy8gd2hl
biBpdCBkb2VzIGZpcmUsIGl0IG1ha2VzIHNlbnNlIGZvciB1cyB0byBnZW5lcmF0ZSB0aGlzIGNv
ZGUgdXNpbmcgb3VyIEpJVCByYXRoZXIgdGhhbgotICAgICAgICAvLyB3YXN0aW5nIEIzJ3MgdGlt
ZSBvcHRpbWl6aW5nIGl0LgotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBs
YXp5U2xvd1BhdGgoCi0gICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxv
Y2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVhdGVHZW5lcmF0b3IoCi0gICAgICAg
ICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIExhenlTbG93UGF0aDo6R2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGZW5j
ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9G
ZW5jZSA9IGppdC5qdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQubWVtb3J5RmVuY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQuYmFycmllckJyYW5jaFdpdGhvdXRGZW5j
ZShiYXNlR1BSKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9GZW5jZS5saW5rKCZq
aXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gcGFy
YW1zLmxhenlTbG93UGF0aC0+dXNlZFJlZ2lzdGVycygpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcih1c2Vk
UmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvci5sb2NrKGJhc2VHUFIpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaDEgPSBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUg
PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5w
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzYXZlZCB0aGVzZSwgc28gd2hlbiB3ZSBtYWtlIGEg
c2xvdyBwYXRoIGNhbGwsIHdlIGRvbid0IGhhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRvIHNhdmUgdGhlbSBhZ2Fpbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRSZWdpc3Rl
cnMuZXhjbHVkZShSZWdpc3RlclNldChzY3JhdGNoMSwgc2NyYXRjaDIpKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBq
aXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwg
c2NyYXRjaDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5l
ZWRUb0ZsdXNoID0gaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBzY3JhdGNoMiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3cml0ZUJhcnJpZXJCdWZmZXIuY2Fw
YWNpdHkoKSkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZTMyKHNjcmF0Y2gyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRk
cmVzcygpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cigKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiYXNlR1BSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNo
MSwgc2NyYXRjaDIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZVJl
dXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJmppdCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVzZWRSZWdpc3RlcnMsIGppdCwgcGFyYW1zLmxhenlTbG93UGF0aC0+Y2FsbFNpdGVJbmRleCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5leGNlcHRpb25KdW1wcywgb3Bl
cmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIEludmFsaWRHUFJSZWcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmFzZUdQUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQs
IHByZXNlcnZlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5kb25lSnVt
cHMuYXBwZW5kKGppdC5qdW1wKCkpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIH0sCi0gICAgICAgICAgICBiYXNlKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1Bh
dGgsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAotICAgICAgICBpZiAoaXNGZW5jZWQpCi0gICAg
ICAgICAgICBtX2hlYXBzLmRlY29yYXRlUGF0Y2hwb2ludFJlYWQoJm1faGVhcHMucm9vdCwgcGF0
Y2hwb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faGVhcHMuZGVjb3JhdGVQYXRj
aHBvaW50UmVhZCgmbV9oZWFwcy5KU0NlbGxfY2VsbFN0YXRlLCBwYXRjaHBvaW50KTsKLSAgICAg
ICAgbV9oZWFwcy5kZWNvcmF0ZVBhdGNocG9pbnRXcml0ZSgmbV9oZWFwcy5KU0NlbGxfY2VsbFN0
YXRlLCBwYXRjaHBvaW50KTsKKyAgICAgICAgTFZhbHVlIGNhbGwgPSB2bUNhbGwoVm9pZCwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKSwgbV9jYWxsRnJhbWUs
IGJhc2UpOworICAgICAgICBtX2hlYXBzLmRlY29yYXRlQ0NhbGxSZWFkKCZtX2hlYXBzLnJvb3Qs
IGNhbGwpOworICAgICAgICBtX2hlYXBzLmRlY29yYXRlQ0NhbGxXcml0ZSgmbV9oZWFwcy5KU0Nl
bGxfY2VsbFN0YXRlLCBjYWxsKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLQorICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ2VsbFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q2VsbFN0YXRlLmgJKHJldmlzaW9uIDIxMDUyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NlbGxTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMjUgKzI5LDIxIEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1lbnVtIGNsYXNzIENlbGxTdGF0ZSA6IHVpbnQ4X3QgewotICAgIC8v
IFRoZSBvYmplY3QgaXMgZWl0aGVyIGN1cnJlbnRseSBiZWluZyBzY2FubmVkLCBvciBpdCBoYXMg
ZmluaXNoZWQgYmVpbmcgc2Nhbm5lZCwgb3IgdGhpcwotICAgIC8vIGlzIGEgZnVsbCBjb2xsZWN0
aW9uIGFuZCBpdCdzIGFjdHVhbGx5IGEgd2hpdGUgb2JqZWN0ICh5b3UnZCBrbm93IGJlY2F1c2Ug
aXRzIG1hcmsgYml0Ci0gICAgLy8gd291bGQgYmUgY2xlYXIpLgotICAgIFBvc3NpYmx5T2xkT3JC
bGFjayA9IDAsCi0gICAgCi0gICAgLy8gVGhlIG9iamVjdCBpcyBpbiBlZGVuLiBEdXJpbmcgR0Ms
IHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhhcyBub3QgYmVlbiBtYXJrZWQgeWV0LgotICAg
IERlZmluaXRlbHlOZXdBbmRXaGl0ZSA9IDEsCi0KLSAgICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkg
LSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZC4KLSAgICBEZWZpbml0ZWx5R3JleSA9IDIsCi19Owor
Ly8gVXNlIGFuIGludCBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBkbyBhIGJ1bmNoIG9m
IG1hdGggb24gaXQuCit0eXBlZGVmIHVpbnQ4X3QgQ2VsbFN0YXRlOwogCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgYmxhY2tUaHJlc2hvbGQgPSAwOyAvLyB4IDw9IGJsYWNrVGhyZXNob2xkIG1lYW5z
IHggaXMgUG9zc2libHlPbGRPckJsYWNrLgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRhdXRvbG9n
aWNhbFRocmVzaG9sZCA9IDEwMDsgLy8geCA8PSB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgaXMgYWx3
YXlzIHRydWUuCitzdGF0aWMgY29uc3QgQ2VsbFN0YXRlIENvbG9yTWFzayA9IDM7CitzdGF0aWMg
Y29uc3QgQ2VsbFN0YXRlIEJsYWNrID0gMDsKK3N0YXRpYyBjb25zdCBDZWxsU3RhdGUgR3JleSA9
IDE7CitzdGF0aWMgY29uc3QgQ2VsbFN0YXRlIFdoaXRlID0gMjsKK3N0YXRpYyBjb25zdCBDZWxs
U3RhdGUgUmVzY2FuQml0ID0gNDsKIAotaW5saW5lIGJvb2wgaXNXaXRoaW5UaHJlc2hvbGQoQ2Vs
bFN0YXRlIGNlbGxTdGF0ZSwgdW5zaWduZWQgdGhyZXNob2xkKQorc3RhdGljIGNvbnN0IENlbGxT
dGF0ZSBibGFja1RocmVzaG9sZCA9IDA7IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQgbWVhbnMgeCBp
cyBCbGFjay4KK3N0YXRpYyBjb25zdCBDZWxsU3RhdGUgbm90UmVzY2FuVGhyZXNob2xkID0gQ29s
b3JNYXNrOyAvLyB4IDw9IG5vdFJlc2NhblRocmVzaG9sZCBtZWFucyB4IGlzIEJsYWNrLCBHcmV5
LCBvciBXaGl0ZS4KKworaW5saW5lIGJvb2wgaXNXaXRoaW5UaHJlc2hvbGQoQ2VsbFN0YXRlIGNl
bGxTdGF0ZSwgQ2VsbFN0YXRlIHRocmVzaG9sZCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNlbGxTdGF0ZSkgPD0gdGhyZXNob2xkOworICAgIHJldHVybiBjZWxsU3RhdGUg
PD0gdGhyZXNob2xkOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDIxMDUyMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMzEgKzY3LDQxIEBA
IHByaXZhdGU6CiAgICAgSGVhcCYgbV9oZWFwOwogfTsKIAotI2lmbmRlZiBOREVCVUcKIGNsYXNz
IERpc2FsbG93R0MgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERpc2FsbG93R0MpOwogcHVi
bGljOgogICAgIERpc2FsbG93R0MoKQogICAgIHsKKyNpZm5kZWYgTkRFQlVHCiAgICAgICAgIFdU
Rjo6dGhyZWFkU3BlY2lmaWNTZXQoc19pc0dDRGlzYWxsb3dlZE9uQ3VycmVudFRocmVhZCwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4odHJ1ZSkpOworI2VuZGlmCiAgICAgfQogCiAgICAgfkRpc2Fs
bG93R0MoKQogICAgIHsKKyNpZm5kZWYgTkRFQlVHCiAgICAgICAgIFdURjo6dGhyZWFkU3BlY2lm
aWNTZXQoc19pc0dDRGlzYWxsb3dlZE9uQ3VycmVudFRocmVhZCwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oZmFsc2UpKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHN0YXRpYyBib29sIGlzR0NEaXNh
bGxvd2VkT25DdXJyZW50VGhyZWFkKCkKICAgICB7CisjaWZuZGVmIE5ERUJVRwogICAgICAgICBy
ZXR1cm4gISFXVEY6OnRocmVhZFNwZWNpZmljR2V0KHNfaXNHQ0Rpc2FsbG93ZWRPbkN1cnJlbnRU
aHJlYWQpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiAgICAgfQogICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKQogICAgIHsKKyNpZm5kZWYgTkRFQlVHCiAgICAgICAg
IFdURjo6dGhyZWFkU3BlY2lmaWNLZXlDcmVhdGUoJnNfaXNHQ0Rpc2FsbG93ZWRPbkN1cnJlbnRU
aHJlYWQsIDApOworI2VuZGlmCiAgICAgfQogCisjaWZuZGVmIE5ERUJVRwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBXVEY6OlRocmVhZFNwZWNpZmljS2V5IHNfaXNHQ0Rpc2FsbG93ZWRP
bkN1cnJlbnRUaHJlYWQ7CisjZW5kaWYKIH07Ci0jZW5kaWYgLy8gTkRFQlVHCiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9u
IDIxMDUyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIK
ICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCisjaW5jbHVkZSAi
V3JpdGVCYXJyaWVyQnVmZmVySW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAt
MjU5LDExICsyNjAsMTEgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQog
ICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQogICAgICwgbV9jb2xsZWN0b3JTbG90VmlzaXRv
cihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykpCiAgICAgLCBtX211dGF0b3JN
YXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKKyAgICAsIG1fcmVz
Y2FuTG9nKE9wdGlvbnM6OnJlc2NhbkxvZ1NpemUoKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQog
ICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAg
ICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4o
KSkKICAgICAsIG1faXNTYWZlVG9Db2xsZWN0KGZhbHNlKQotICAgICwgbV93cml0ZUJhcnJpZXJC
dWZmZXIoMjU2KQogICAgICwgbV92bSh2bSkKICAgICAvLyBXZSBzZWVkIHdpdGggMTBtcyBzbyB0
aGF0IEdDQWN0aXZpdHlDYWxsYmFjazo6ZGlkQWxsb2NhdGUgZG9lc24ndCBjb250aW51b3VzbHkg
CiAgICAgLy8gc2NoZWR1bGUgdGhlIHRpbWVyIGlmIHdlJ3ZlIG5ldmVyIGRvbmUgYSBjb2xsZWN0
aW9uLgpAQCAtNTg0LDcgKzU4NSw3IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91Ymxl
IGdjU3RhcnQKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlvbiA9IDE7IDsgKytpdGVy
YXRpb24pIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAgICAgICAgICBkYXRh
TG9nKCJpIyIsIGl0ZXJhdGlvbiwgIiAiLCBzbG90VmlzaXRvci5jb2xsZWN0b3JNYXJrU3RhY2so
KS5zaXplKCksICIrIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBzbG90VmlzaXRvci5t
dXRhdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiIGI9IiwgbV9iYXJyaWVyc0V4ZWN1dGVkLCAiICIp
OworICAgICAgICAgICAgZGF0YUxvZygiaSMiLCBpdGVyYXRpb24sICIgYj0iLCBtX2JhcnJpZXJz
RXhlY3V0ZWQsICIgIik7CiAgICAgICAgIAogICAgICAgICBpZiAoc2xvdFZpc2l0b3IuZGlkUmVh
Y2hUZXJtaW5hdGlvbigpKSB7CiAgICAgICAgICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1w
dHkoKTsKQEAgLTYxMCw2ICs2MTEsOSBAQCB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJs
ZSBnY1N0YXJ0CiAgICAgICAgICAgICBtX3NjaGVkdWxlci0+ZGlkRXhlY3V0ZUNvbnN0cmFpbnRz
KCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQor
ICAgICAgICAgICAgZGF0YUxvZyhzbG90VmlzaXRvci5jb2xsZWN0b3JNYXJrU3RhY2soKS5zaXpl
KCksICIrIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBzbG90VmlzaXRvci5tdXRhdG9y
TWFya1N0YWNrKCkuc2l6ZSgpLCAiICIpOworICAgICAgICAKICAgICAgICAgewogICAgICAgICAg
ICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKHNsb3RWaXNpdG9yKTsKICAgICAgICAgICAg
IHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxlbChtX3NjaGVkdWxlci0+dGltZVRvUmVzdW1lKCkp
OwpAQCAtOTQwLDI3ICs5NDQsNiBAQCB2b2lkIEhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRD
b2RlKCkKICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1
YlJvdXRpbmVzKCk7CiB9CiAKLXZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpT
Q2VsbCogY2VsbCkKLXsKLSAgICBBU1NFUlQoY2VsbCk7Ci0gICAgQVNTRVJUKCFPcHRpb25zOjp1
c2VDb25jdXJyZW50SklUKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgbV9iYXJy
aWVyc0V4ZWN1dGVkKys7Ci0gICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxs
KSkgewotICAgICAgICAvLyBEdXJpbmcgYSBmdWxsIGNvbGxlY3Rpb24gYSBzdG9yZSBpbnRvIGFu
IHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJpdml2ZWQgcGFzdAotICAgICAgICAvLyBjb2xs
ZWN0aW9ucyB3aWxsIG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5tYXJrZWQgYmxhY2sgb2Jq
ZWN0LiBJZiB0aGUgb2JqZWN0IGdldHMKLSAgICAgICAgLy8gbWFya2VkIGF0IHNvbWUgdGltZSBh
ZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFya2luZyBwYXRoLiBX
ZSBjYW4KLSAgICAgICAgLy8gc2FmZWx5IGlnbm9yZSB0aGVzZSBzdG9yZXMuCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgLy8gSXQgY291bGQgYmUgdGhhdCB0aGUgb2JqZWN0IHdhcyAqanVz
dCogbWFya2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxlY3RvciBtYXkgc2V0IHRoZQotICAg
IC8vIHN0YXRlIHRvIERlZmluaXRlbHlHcmV5IGFuZCB0aGVuIHRvIFBvc3NpYmx5T2xkT3JCbGFj
ayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMgdG8KLSAgICAvLyByYWNlIHdpdGggdGhlIGNv
bGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0aGlzIGlzIGFjY3VyYXRlIGJlY2F1c2UgdGhl
IG9iamVjdCBfd2lsbF8KLSAgICAvLyBnZXQgc2Nhbm5lZCBhZ2Fpbi4gSWYgd2UgbG9zZSB0aGVu
IHNvbWVvbmUgZWxzZSB3aWxsIGJhcnJpZXIgdGhlIG9iamVjdCBhZ2Fpbi4gVGhhdCB3b3VsZAot
ICAgIC8vIGJlIHVuZm9ydHVuYXRlIGJ1dCBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGQuCi0gICAg
Y2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6RGVmaW5pdGVseUdyZXkpOwotICAgIG1fbXV0
YXRvck1hcmtTdGFjay0+YXBwZW5kKGNlbGwpOwotfQotCiB2b2lkIEhlYXA6OmNvbGxlY3RBbGxH
YXJiYWdlKCkKIHsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQpAQCAtMTE3Nyw3ICsxMTYw
LDYgQEAgdm9pZCBIZWFwOjpzdG9wVGhlV29ybGQoKQogICAgIAogICAgIHZtKCktPnNoYWRvd0No
aWNrZW4oKS51cGRhdGUoKnZtKCksIHZtKCktPnRvcENhbGxGcmFtZSk7CiAgICAgCi0gICAgZmx1
c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKICAgICBtX3N0cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRU
YWJsZXMoKTsKICAgICBtX29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7CiAgICAgCkBAIC0x
MTk0LDcgKzExNzYsNyBAQCB2b2lkIEhlYXA6OnJlc3VtZVRoZVdvcmxkKCkKICAgICBtX29iamVj
dFNwYWNlLnJlc3VtZUFsbG9jYXRpbmcoKTsKICAgICAKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQg
PSAwOwotICAgIAorCiAgICAgUkVMRUFTRV9BU1NFUlQobV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRU
aGVXb3JsZElzU3RvcHBlZCk7CiAgICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElz
U3RvcHBlZCA9IGZhbHNlOwogICAgIApAQCAtMTU5NywxMSArMTU3OSw2IEBAIHZvaWQgSGVhcDo6
d2lsbFN0YXJ0Q29sbGVjdGlvbihzdGQ6Om9wdGkKICAgICAgICAgb2JzZXJ2ZXItPndpbGxHYXJi
YWdlQ29sbGVjdCgpOwogfQogCi12b2lkIEhlYXA6OmZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCkK
LXsKLSAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVzaCgqdGhpcyk7Ci19Ci0KIHZvaWQgSGVh
cDo6cHJlcGFyZUZvck1hcmtpbmcoKQogewogICAgIG1fb2JqZWN0U3BhY2UucHJlcGFyZUZvck1h
cmtpbmcoKTsKQEAgLTE4ODIsMTIgKzE4NTksNiBAQCB2b2lkIEhlYXA6OnpvbWJpZnlEZWFkT2Jq
ZWN0cygpCiAgICAgbV9vYmplY3RTcGFjZS5mb3JFYWNoRGVhZENlbGwoaXRlcmF0aW9uU2NvcGUs
IFpvbWJpZnkoKSk7CiB9CiAKLXZvaWQgSGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoSlND
ZWxsKiBjZWxsKQotewotICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZsdXNoKCp0aGlzKTsKLSAg
ICBtX3dyaXRlQmFycmllckJ1ZmZlci5hZGQoY2VsbCk7Ci19Ci0KIGJvb2wgSGVhcDo6c2hvdWxk
RG9GdWxsQ29sbGVjdGlvbihzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gc2NvcGUpIGNv
bnN0CiB7CiAgICAgaWYgKCFPcHRpb25zOjp1c2VHZW5lcmF0aW9uYWxHQygpKQpAQCAtMTk1OSwx
NyArMTkzMCwxMzMgQEAgdm9pZCBIZWFwOjpmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBTYwog
ICAgIHJldHVybiBtX2NvZGVCbG9ja3MtPml0ZXJhdGUoZnVuYyk7CiB9CiAKK0FMV0FZU19JTkxJ
TkUgYm9vbCBIZWFwOjpjYW5vbmljYWxpemVCbGFjayhKU0NlbGwqIGNlbGwpCit7CisgICAgaWYg
KCFtX211dGF0b3JTaG91bGRCZUZlbmNlZCkgeworICAgICAgICBBU1NFUlQoaXNNYXJrZWQoY2Vs
bCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgV1RGOjpsb2FkTG9h
ZEZlbmNlKCk7CisgICAgCisgICAgaWYgKGlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBXZSdyZSBkb2luZyBhIGZ1bGwgY29sbGVj
dGlvbiBhbmQgdGhpcyBvYmplY3QgaXMgYWN0dWFsbHkgd2hpdGUhIEJ1dCBpdCBjb3VsZCBiZQor
ICAgIC8vIGdyZXllZCBhbmQgYmxhY2tlZCBhdCBhbnkgdGltZS4gV2UgdHJlYWQgc28gY2FyZWZ1
bGx5LgorICAgIGlmIChjZWxsLT5hdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVTdHJvbmco
QmxhY2ssIFdoaXRlKSAhPSBCbGFjaykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBO
b3cgd2UgcHJvdGVjdCBhZ2FpbnN0IHRoaXMgcmFjZToKKyAgICAvLworICAgIC8vICAgICAxKSBP
YmplY3Qgc3RhcnRzIG91dCBibGFjayArIHVubWFya2VkLgorICAgIC8vICAgICAtLT4gV2UgZG8g
aXNNYXJrZWRDb25jdXJyZW50bHkgaGVyZS4KKyAgICAvLyAgICAgMikgT2JqZWN0IGlzIG1hcmtl
ZCBhbmQgZ3JleWVkLgorICAgIC8vICAgICAzKSBPYmplY3QgaXMgc2Nhbm5lZCBhbmQgYmxhY2tl
ZC4KKyAgICAvLyAgICAgLS0+IFdlIGRvIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0
cm9uZyBoZXJlLgorICAgIC8vCisgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGhhdmUgbWFk
ZSB0aGUgb2JqZWN0IHdoaXRlIGFnYWluLCBldmVuIHRob3VnaCBpdCBzaG91bGQgYmUgYmxhY2su
CisgICAgLy8gVGhpcyBjaGVjayBsZXRzIHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2UuIFRoaXMgcmVs
aWVzIG9uIHRoZSBmYWN0IHRoYXQgaXNNYXJrZWRDb25jdXJyZW50bHkKKyAgICAvLyBjb252ZXJn
ZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgorICAgIGlmIChpc01hcmtlZENvbmN1cnJlbnRseShj
ZWxsKSkgeworICAgICAgICAvLyBJdCdzIGRpZmZpY3VsdCB0byB3b3JrIG91dCB3aGV0aGVyIHRo
ZSBvYmplY3Qgc2hvdWxkIGJlIGdyZXkgb3IgYmxhY2sgYXQgdGhpcyBwb2ludC4KKyAgICAgICAg
Ly8gV2Ugc2F5IGJsYWNrIGNvbnNlcnZhdGl2ZWx5LgorICAgICAgICBjZWxsLT5zZXRDZWxsU3Rh
dGUoQmxhY2spOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGZhbHNlOworfQorCiB2b2lkIEhlYXA6OndyaXRlQmFycmllclNsb3dQYXRoKGNvbnN0IEpTQ2Vs
bCogZnJvbSkKIHsKLSAgICBpZiAoVU5MSUtFTFkobXV0YXRvclNob3VsZEJlRmVuY2VkKCkpKSB7
Ci0gICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIGJhcnJpZXJUaHJlc2hvbGQgaXMgdGhlIHRh
dXRvbG9naWNhbCB0aHJlc2hvbGQsIHNvIGZyb20gY291bGQgc3RpbGwgYmUKLSAgICAgICAgLy8g
bm90IGJsYWNrLiBCdXQgd2UgY2FuJ3Qga25vdyBmb3Igc3VyZSB1bnRpbCB3ZSBmaXJlIG9mZiBh
IGZlbmNlLgotICAgICAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7Ci0gICAgICAgIGlmIChmcm9t
LT5jZWxsU3RhdGUoKSAhPSBDZWxsU3RhdGU6OlBvc3NpYmx5T2xkT3JCbGFjaykKKyAgICBtX2Jh
cnJpZXJzRXhlY3V0ZWQrKzsKKyAgICAKKyAgICBpZiAoIW1fbXV0YXRvclNob3VsZEJlRmVuY2Vk
KSB7CisgICAgICAgIC8vIFRoZXJlJ3Mgbm8gY2hhbmNlIG9mIGEgcmFjZS4gV2UgY2FuIGhhbmRs
ZSB0aGlzIGRpcmVjdGx5LgorICAgICAgICBmaW5pc2hXcml0ZUJhcnJpZXIoZnJvbSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgSlNDZWxsKiBjZWxsID0gY29uc3RfY2FzdDxK
U0NlbGwqPihmcm9tKTsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIENlbGxTdGF0ZSBj
ZWxsU3RhdGUgPSBjZWxsLT5jZWxsU3RhdGUoKTsKKyAgICAgICAgaWYgKGNlbGxTdGF0ZSAmIFJl
c2NhbkJpdCkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIE5PVEU6
IEl0J3Mgc3VwZXIgdGVtcHRpbmcgdG8gbm90IHB1dCB0aGUgb2JqZWN0IGludG8gdGhlIHJlc2Nh
biBsb2cgaWYgaXRzIHN0YXRlCisgICAgICAgIC8vIG5vdyBpbmRpY2F0ZXMgdGhhdCBpdCdzIGdy
ZXkgb3Igd2hpdGUuIFRoYXQgd291bGQgYmUgd3JvbmcsIHNpbmNlIHRoZSByZXNjYW4gYml0Cisg
ICAgICAgIC8vIGJlaW5nIHNldCBpcyBtZWFudCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBvYmplY3Qg
aXMgc2FmZSB0byBzdG9yZSB0byB3aXRob3V0CisgICAgICAgIC8vIGJhcnJpZXJzLiBUaGUgR0Mg
Y291bGQgYmxhY2sgdGhlIG9iamVjdCBpbiB0aGUgbWVhbnRpbWUsIGFuZCBpZiBpdCBkb2VzIHNv
LCBpdAorICAgICAgICAvLyB3aWxsIGxlYXZlIHRoZSByZXNjYW4gYml0IHNldC4gRXZlbiBpZiB0
aGUgR0MgZGlkIHNtYXJ0IHRoaW5ncyB0byB0aGUgcmVzY2FuIGJpdCwKKyAgICAgICAgLy8gdGhl
IGZhY3QgdGhhdCB0aGUgcmVzY2FuIGJpdCB3b3VsZCBoYXZlIHRvIGJlIHN5bmNocm9ub3VzbHkg
Y2xlYXJlZCBwcmlvciB0bworICAgICAgICAvLyB2aXNpdGluZyBtZWFucyB0aGF0IHRoZSBiYXJy
aWVyIHdvdWxkIG5lZWQgYSBmZW5jZS4gVGhlIHdob2xlIHBvaW50IG9mIHRoaXMgaXMgdG8KKyAg
ICAgICAgLy8gYXZvaWQgYSBmZW5jZSEKKyAgICAgICAgaWYgKGNlbGwtPmF0b21pY0NvbXBhcmVF
eGNoYW5nZUNlbGxTdGF0ZVdlYWsoY2VsbFN0YXRlLCBjZWxsU3RhdGUgfCBSZXNjYW5CaXQpKQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAotICAgIGFkZFRvUmVtZW1iZXJlZFNldChm
cm9tKTsKKyAgICAvLyBOT1RFOiBXZSBtYXkgZm9yZ2V0IHRoZSBSZXNjYW4gYml0IGF0IHRoaXMg
cG9pbnQuIEl0J3MgT0sgdG8gZm9yZ2V0IGFib3V0IGl0IQorICAgIAorICAgIC8vIFRoaXMgbWF5
IGNhbGwgZmluaXNoV3JpdGVCYXJyaWVyKCkgb24gdGhpcyBjZWxsIGFuZCBzb21lIHByaW9yIGNl
bGxzLgorICAgIG1fcmVzY2FuTG9nLmFkZCgqdGhpcywgY2VsbCk7Cit9CisKKy8vIFRoaXMgaXMg
b25seSBjYWxsZWQgZnJvbSBXcml0ZUJhcnJpZXJCdWZmZXI6OmZsdXNoKCkuCitBTFdBWVNfSU5M
SU5FIHZvaWQgSGVhcDo6aGFuZGxlQnVmZmVyZWRSZXNjYW4oY29uc3QgSlNDZWxsKiBmcm9tKQor
eworICAgIEpTQ2VsbCogY2VsbCA9IGNvbnN0X2Nhc3Q8SlNDZWxsKj4oZnJvbSk7CisgICAgCisg
ICAgQ2VsbFN0YXRlIGNlbGxTdGF0ZTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGNlbGxTdGF0
ZSA9IGNlbGwtPmNlbGxTdGF0ZSgpOworICAgICAgICBpZiAoIShjZWxsU3RhdGUgJiBSZXNjYW5C
aXQpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIFRoaXMgY2FuIGJlIHJlbGF4ZWQg
c2luY2Ugd2UgaGFkIGEgZmVuY2UgYWxyZWFkeSBpbiB3cml0ZUJhcnJpZXJTbG93UGF0aCgpLgor
ICAgICAgICBpZiAoY2VsbC0+YXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlV2Vha1JlbGF4
ZWQoY2VsbFN0YXRlLCBjZWxsU3RhdGUgJiB+UmVzY2FuQml0KSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAKKyAgICBmaW5pc2hXcml0ZUJhcnJpZXIoZnJvbSwgY2VsbFN0YXRlKTsK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIEhlYXA6OmZpbmlzaFdyaXRlQmFycmllcihjb25zdCBK
U0NlbGwqIGZyb20pCit7CisgICAgZmluaXNoV3JpdGVCYXJyaWVyKGZyb20sIGZyb20tPmNlbGxT
dGF0ZSgpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEhlYXA6OmZpbmlzaFdyaXRlQmFycmll
cihjb25zdCBKU0NlbGwqIGZyb20sIENlbGxTdGF0ZSBjZWxsU3RhdGUpCit7CisgICAgSlNDZWxs
KiBjZWxsID0gY29uc3RfY2FzdDxKU0NlbGwqPihmcm9tKTsKKyAgICAKKyAgICBzd2l0Y2ggKGNl
bGxTdGF0ZSAmIENvbG9yTWFzaykgeworICAgIGNhc2UgQmxhY2s6CisgICAgICAgIGlmIChjYW5v
bmljYWxpemVCbGFjayhjZWxsKSkgeworICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdl
IHJlYWxseSBkaWQgbmVlZCBhIGJhcnJpZXIgb24gdGhpcyBvYmplY3QuIEdyZXkgdGhlCisgICAg
ICAgICAgICAvLyBvYmplY3QgYW5kIHB1dCBpdCBvbiB0aGUgbWFyayBzdGFjay4gTm90ZSB0aGF0
IHRoaXMgc2V0Q2VsbFN0YXRlIGNhbGwgaXMgYSByYWNlLAorICAgICAgICAgICAgLy8gYnV0IHRo
YXQncyBPSzoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBXZSB3aW4gdGhlIHJhY2U6
IHRoZSBvYmplY3QgdGhpbmtzIGl0J3MgZ3JleSBhbmQgaXQncyBvbiB0aGUgbXV0YXRvciBtYXJr
IHN0YWNrLAorICAgICAgICAgICAgLy8gd2hpY2ggZW5zdXJlcyB0aGF0IGl0IHdpbGwgYmUgcmVz
Y2FubmVkLiBUaGF0J3MgY29uc2lzdGVudC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv
LyBXZSBsb3NlIHRoZSByYWNlOiB0aGUgb2JqZWN0IHdpbGwgZGVmaW5pdGVseSBiZSByZXNjYW5u
ZWQgYnV0IGl0IHRoaW5rcyBpdCdzCisgICAgICAgICAgICAvLyBibGFjaywgc28gd2UgbWF5IGJh
cnJpZXIgaXQgYWdhaW4uIEl0J3MgT0sgZm9yIGEgcmFjZSB0byBjYXVzZSB1cyB0byByZXBlYXQg
d29yay4KKyAgICAgICAgICAgIGNlbGwtPnNldENlbGxTdGF0ZShHcmV5KTsKKyAgICAgICAgICAg
IG1fbXV0YXRvck1hcmtTdGFjay0+YXBwZW5kKGNlbGwpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JleToKKyAgICAgICAgLy8gVGhlIG9iamVjdCBjb3VsZCBiZSBtYXJr
ZWQgb3Igbm90LiBJZiBpdCdzIG1hcmtlZCB0aGVuIGl0J3MgcmVhbGx5IGdyZXkuIElmIGl0J3Mg
bm90CisgICAgICAgIC8vIG1hcmtlZCB0aGVuIGl0J3Mgd2hpdGUgYW5kIHdlJ3JlIGluIGEgZnVs
bCBjb2xsZWN0aW9uLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFdoaXRlOgorICAgICAgICAv
LyBUaGUgb2JqZWN0IHdhcyBwcmV2aW91c2x5IG5vdCBtYXJrZWQgYnV0IGNvdWxkIGhhdmUgYmVl
biBtYXJrZWQgc2luY2Ugd2UgZGlkIHRoaW5ncy4KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQogfQogCiBib29sIEhlYXA6OmlzQ3VycmVudFRocmVhZEJ1c3koKQpAQCAtMjIxMyw3
ICsyMzAwLDcgQEAgdm9pZCBIZWFwOjpidWlsZENvbnN0cmFpbnRTZXQoKQogICAgICAgICAgICAg
ICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
VmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBpdCdzIGJsYWNrLgog
ICAgICAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY29kZUJsb2NrKQotICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6
OlBvc3NpYmx5T2xkT3JCbGFjaykKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChjb2RlQmxv
Y2stPmNlbGxTdGF0ZSgpICYgQ29sb3JNYXNrKSA9PSBCbGFjaykKICAgICAgICAgICAgICAgICAg
ICAgICAgIHNsb3RWaXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0sCkBAIC0yMjIyLDYgKzIzMDksOCBAQCB2b2lkIEhlYXA6
OmJ1aWxkQ29uc3RyYWludFNldCgpCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAg
ICJNbXMiLCAiTXV0YXRvciBNYXJrIFN0YWNrIiwKICAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgICAgIG1f
cmVzY2FuTG9nLmZsdXNoKCp0aGlzKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSW5k
aWNhdGUgdG8gdGhlIGZpeHBvaW50IHRoYXQgd2UgaW50cm9kdWNlZCB3b3JrIQogICAgICAgICAg
ICAgc2l6ZV90IHNpemUgPSBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKTsKICAgICAgICAgICAg
IHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChzaXplKTsKQEAgLTIyMzIsNyArMjMyMSw3IEBA
IHZvaWQgSGVhcDo6YnVpbGRDb25zdHJhaW50U2V0KCkKICAgICAgICAgICAgIG1fbXV0YXRvck1h
cmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogICAg
ICAgICB9LAogICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJikgLT4gZG91YmxlIHsKLSAgICAg
ICAgICAgIHJldHVybiBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmVzY2FuTG9nLnNpemUoKTsKICAg
ICAgICAgfSwKICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsK
IH0KQEAgLTIzMjMsNyArMjQxMiw3IEBAIHZvaWQgSGVhcDo6YWRkTXV0YXRvclNob3VsZEJlRmVu
Y2VkQ2FjaGUKIHZvaWQgSGVhcDo6c2V0TXV0YXRvclNob3VsZEJlRmVuY2VkKGJvb2wgdmFsdWUp
CiB7CiAgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgPSB2YWx1ZTsKLSAgICBtX2JhcnJpZXJU
aHJlc2hvbGQgPSB2YWx1ZSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xk
OworICAgIG1fYmFycmllclRocmVzaG9sZCA9IHZhbHVlID8gbm90UmVzY2FuVGhyZXNob2xkIDog
YmxhY2tUaHJlc2hvbGQ7CiAgICAgZm9yIChib29sKiBjYWNoZSA6IG1fbXV0YXRvclNob3VsZEJl
RmVuY2VkQ2FjaGVzKQogICAgICAgICAqY2FjaGUgPSB2YWx1ZTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIxMDUyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDE1ICsxMTgsMTAgQEAgcHVi
bGljOgogICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSwgSlNWYWx1ZSB0
byk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRv
KTsKICAgICAKLSAgICB2b2lkIHdyaXRlQmFycmllcldpdGhvdXRGZW5jZShjb25zdCBKU0NlbGwq
IGZyb20pOwotICAgIAogICAgIHZvaWQgbXV0YXRvckZlbmNlKCk7CiAgICAgCiAgICAgLy8gVGFr
ZSB0aGlzIGlmIHlvdSBrbm93IHRoYXQgZnJvbS0+Y2VsbFN0YXRlKCkgPCBiYXJyaWVyVGhyZXNo
b2xkLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVyU2xvd1BhdGgoY29u
c3QgSlNDZWxsKiBmcm9tKTsKLQotICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVy
QnVmZmVyKCkgeyByZXR1cm4gbV93cml0ZUJhcnJpZXJCdWZmZXI7IH0KLSAgICB2b2lkIGZsdXNo
V3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgd3JpdGVCYXJyaWVy
T3BhcXVlUm9vdCh2b2lkKik7CiAKQEAgLTE0MCw3ICsxMzUsNiBAQCBwdWJsaWM6CiAgICAgTWFj
aGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsg
fQogCiAgICAgU2xvdFZpc2l0b3ImIGNvbGxlY3RvclNsb3RWaXNpdG9yKCkgeyByZXR1cm4gKm1f
Y29sbGVjdG9yU2xvdFZpc2l0b3I7IH0KLSAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtT
dGFjaygpIHsgcmV0dXJuICptX211dGF0b3JNYXJrU3RhY2s7IH0KIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZnVsbEFjdGl2aXR5Q2FsbGJhY2soKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGVkZW5BY3Rpdml0eUNhbGxiYWNr
KCk7CkBAIC0yOTcsNiArMjkxLDE0IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBiYXJyaWVyVGhy
ZXNob2xkKCkgY29uc3QgeyByZXR1cm4gbV9iYXJyaWVyVGhyZXNob2xkOyB9CiAgICAgY29uc3Qg
dW5zaWduZWQqIGFkZHJlc3NPZkJhcnJpZXJUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiAmbV9i
YXJyaWVyVGhyZXNob2xkOyB9CiAKKyAgICB2b2lkIGhhbmRsZUJ1ZmZlcmVkUmVzY2FuKGNvbnN0
IEpTQ2VsbCogZnJvbSk7CisgICAgdm9pZCBmaW5pc2hXcml0ZUJhcnJpZXIoY29uc3QgSlNDZWxs
KiBmcm9tKTsKKyAgICB2b2lkIGZpbmlzaFdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIGZyb20s
IENlbGxTdGF0ZSk7CisgICAgCisgICAgLy8gQ2FsbCB0aGlzIGlmIGFuIG9iamVjdCBzZWVtcyBi
bGFjayBkdXJpbmcgbWFya2luZy4gUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgcmVhbGx5
CisgICAgLy8gYmxhY2suIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlIGFuZCB0cmllcyB0byBjbGVh
biB1cCBpdHMgc3RhdGUuCisgICAgYm9vbCBjYW5vbmljYWxpemVCbGFjayhKU0NlbGwqKTsKKwog
ICAgIC8vIElmIHRydWUsIHRoZSBHQyBiZWxpZXZlcyB0aGF0IHRoZSBtdXRhdG9yIGlzIGN1cnJl
bnRseSBtZXNzaW5nIHdpdGggdGhlIGhlYXAuIFdlIGNhbGwgdGhpcwogICAgIC8vICJoYXZpbmcg
aGVhcCBhY2Nlc3MiLiBUaGUgR0MgbWF5IGJsb2NrIGlmIHRoZSBtdXRhdG9yIGlzIGluIHRoaXMg
c3RhdGUuIElmIGZhbHNlLCB0aGUgR0MgbWF5CiAgICAgLy8gY3VycmVudGx5IGJlIGRvaW5nIHRo
aW5ncyB0byB0aGUgaGVhcCB0aGF0IG1ha2UgdGhlIGhlYXAgdW5zYWZlIHRvIGFjY2VzcyBmb3Ig
dGhlIG11dGF0b3IuCkBAIC00NDUsNyArNDQ3LDYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IHN1c3BlbmRDb21waWxlclRocmVhZHMoKTsKICAgICB2b2lkIHdpbGxTdGFydENvbGxlY3Rpb24o
c3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+KTsKLSAgICB2b2lkIGZsdXNoV3JpdGVCYXJy
aWVyQnVmZmVyKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yTWFya2luZygpOwogICAgIAogICAgIHZv
aWQgbWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKTsKQEAgLTQ2OCw3ICs0NjksNiBA
QCBwcml2YXRlOgogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwog
ICAgIHZvaWQgY2xlYXJVbm1hcmtlZEV4ZWN1dGFibGVzKCk7CiAgICAgdm9pZCBkZWxldGVVbm1h
cmtlZENvbXBpbGVkQ29kZSgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkVG9SZW1l
bWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCopOwogICAgIHZvaWQgdXBkYXRlQWxsb2NhdGlvbkxpbWl0
cygpOwogICAgIHZvaWQgZGlkRmluaXNoQ29sbGVjdGlvbihkb3VibGUgZ2NTdGFydFRpbWUpOwog
ICAgIHZvaWQgcmVzdW1lQ29tcGlsZXJUaHJlYWRzKCk7CkBAIC01MzMsOCArNTMzLDYgQEAgcHJp
dmF0ZToKICAgICBzaXplX3QgbV9leHRyYU1lbW9yeVNpemU7CiAgICAgc2l6ZV90IG1fZGVwcmVj
YXRlZEV4dHJhTWVtb3J5U2l6ZTsKIAotICAgIEhhc2hTZXQ8Y29uc3QgSlNDZWxsKj4gbV9jb3B5
aW5nUmVtZW1iZXJlZFNldDsKLQogICAgIFByb3RlY3RDb3VudFNldCBtX3Byb3RlY3RlZFZhbHVl
czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+PiBt
X21hcmtMaXN0U2V0OwogCkBAIC01NDIsNiArNTQwLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX211dGF0b3JNYXJrU3RhY2s7CisgICAg
V3JpdGVCYXJyaWVyQnVmZmVyIG1fcmVzY2FuTG9nOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxNYXJraW5nQ29uc3RyYWludFNldD4gbV9jb25zdHJhaW50U2V0OwogCkBAIC01NjQsOSArNTYz
LDggQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0OwogCi0gICAg
V3JpdGVCYXJyaWVyQnVmZmVyIG1fd3JpdGVCYXJyaWVyQnVmZmVyOwogICAgIGJvb2wgbV9tdXRh
dG9yU2hvdWxkQmVGZW5jZWQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSB9OwotICAg
IHVuc2lnbmVkIG1fYmFycmllclRocmVzaG9sZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmll
cigpID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hvbGQgfTsKKyAgICB1bnNp
Z25lZCBtX2JhcnJpZXJUaHJlc2hvbGQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSA/
IG5vdFJlc2NhblRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xkIH07CiAgICAgVmVjdG9yPGJvb2wq
PiBtX211dGF0b3JTaG91bGRCZUZlbmNlZENhY2hlczsKIAogICAgIFZNKiBtX3ZtOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMTA1MjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDgsMTUgKzE0OCw2IEBAIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihj
b25zdCBKU0MKICAgICAgICAgd3JpdGVCYXJyaWVyU2xvd1BhdGgoZnJvbSk7CiB9CiAKLWlubGlu
ZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcldpdGhvdXRGZW5jZShjb25zdCBKU0NlbGwqIGZyb20p
Ci17Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9MT09LU19WQUxJRChjb25zdF9jYXN0PEpTQ2VsbCo+
KGZyb20pKTsKLSAgICBpZiAoIWZyb20pCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoVU5MSUtF
TFkoaXNXaXRoaW5UaHJlc2hvbGQoZnJvbS0+Y2VsbFN0YXRlKCksIGJsYWNrVGhyZXNob2xkKSkp
Ci0gICAgICAgIGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKLX0KLQogaW5saW5lIHZvaWQgSGVh
cDo6bXV0YXRvckZlbmNlKCkKIHsKICAgICBpZiAoaXNYODYoKSB8fCBVTkxJS0VMWShtdXRhdG9y
U2hvdWxkQmVGZW5jZWQoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMTA1MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCw3ICsyMDQsNyBAQCB2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyCiAgICAgICAgIEpTQ2VsbCog
anNDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwogICAgICAgICB2YWxpZGF0
ZUNlbGwoanNDZWxsKTsKICAgICAgICAgCi0gICAgICAgIGpzQ2VsbC0+c2V0Q2VsbFN0YXRlKENl
bGxTdGF0ZTo6RGVmaW5pdGVseUdyZXkpOworICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShH
cmV5KTsKIAogICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhqc0NlbGwpOwogICAgICAgICByZXR1
cm47CkBAIC0yNjYsNyArMjY2LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjpz
ZXRNYXJrZQogICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0
OgogICAgIC8vIEluIGNhc2Ugb2YgY29uY3VycmVudCBHQzogaXQncyB0aGUgZmlyc3QgdGltZSBp
dCBpcyBncmV5IGluIHRoaXMgR0MgY3ljbGUuCiAgICAgLy8gSW4gY2FzZSBvZiBlZGVuIGNvbGxl
Y3Rpb246IGl0J3MgYSBuZXcgb2JqZWN0IHRoYXQgYmVjYW1lIGdyZXkgcmF0aGVyIHRoYW4gYW4g
b2xkIHJlbWVtYmVyZWQgb2JqZWN0LgotICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6
OkRlZmluaXRlbHlHcmV5KTsKKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoR3JleSk7CiAgICAgCiAg
ICAgYXBwZW5kVG9NYXJrU3RhY2soY29udGFpbmVyLCBjZWxsKTsKIH0KQEAgLTI4NCw3ICsyODQs
NyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvCiB7CiAgICAgQVNT
RVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwt
PmlzWmFwcGVkKCkpOwotICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6
OkRlZmluaXRlbHlHcmV5KTsKKyAgICBBU1NFUlQoKGNlbGwtPmNlbGxTdGF0ZSgpICYgQ29sb3JN
YXNrKSA9PSBHcmV5KTsKICAgICAKICAgICBjb250YWluZXIubm90ZU1hcmtlZCgpOwogICAgIApA
QCAtMzcxLDcgKzM3MSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRD
aGkKICAgICAvLyBub3QgY2xlYXIgdG8gbWUgdGhhdCBpdCB3b3VsZCBiZSBjb3JyZWN0IG9yIHBy
b2ZpdGFibGUgdG8gYmFpbCBoZXJlIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQogICAgIC8vIGJs
YWNrLgogICAgIAotICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OlBvc3NpYmx5T2xk
T3JCbGFjayk7CisgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKEJsYWNrKTsKICAgICAKICAgICBXVEY6
OnN0b3JlTG9hZEZlbmNlKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Xcml0ZUJhcnJpZXJCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5jcHAJKHJldmlzaW9uIDIxMDUyMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDYsMjQgKzQ2LDkgQEAgV3JpdGVCYXJyaWVyQnVmZmVyOjp+V3JpdGVCYXJyaWVyQnVm
ZmVyKAogICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKIH0KIAotdm9pZCBXcml0ZUJhcnJpZXJCdWZm
ZXI6OmZsdXNoKEhlYXAmIGhlYXApCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDw9IG1f
Y2FwYWNpdHkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50SW5kZXg7ICsr
aSkKLSAgICAgICAgaGVhcC53cml0ZUJhcnJpZXIobV9idWZmZXJbaV0pOwotICAgIG1fY3VycmVu
dEluZGV4ID0gMDsKLX0KLQogdm9pZCBXcml0ZUJhcnJpZXJCdWZmZXI6OnJlc2V0KCkKIHsKICAg
ICBtX2N1cnJlbnRJbmRleCA9IDA7CiB9CiAKLXZvaWQgV3JpdGVCYXJyaWVyQnVmZmVyOjphZGQo
SlNDZWxsKiBjZWxsKQotewotICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1NfVkFMSUQoY2VsbCk7
Ci0gICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDwgbV9jYXBhY2l0eSk7Ci0gICAgbV9idWZmZXJb
bV9jdXJyZW50SW5kZXgrK10gPSBjZWxsOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5oCShy
ZXZpc2lvbiAyMTA1MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJp
ZXJCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMCArMzYsMTUgQEAgY2xhc3MgV3Jp
dGVCYXJyaWVyQnVmZmVyIHsKIHB1YmxpYzoKICAgICBXcml0ZUJhcnJpZXJCdWZmZXIodW5zaWdu
ZWQgY2FwYWNpdHkpOwogICAgIH5Xcml0ZUJhcnJpZXJCdWZmZXIoKTsKLQotICAgIHZvaWQgYWRk
KEpTQ2VsbCopOworICAgIAogICAgIHZvaWQgZmx1c2goSGVhcCYpOworCisgICAgdm9pZCBhZGQo
SGVhcCYsIGNvbnN0IEpTQ2VsbCopOworICAgIAogICAgIHZvaWQgcmVzZXQoKTsKKyAgICAKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEluZGV4OyB9CisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fY3VycmVudEluZGV4OyB9CiAKICAgICB1bnNp
Z25lZCogY3VycmVudEluZGV4QWRkcmVzcygpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyQnVmZmVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlcklubGluZXMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZm
ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIldyaXRl
QmFycmllckJ1ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHZvaWQgV3JpdGVC
YXJyaWVyQnVmZmVyOjpmbHVzaChIZWFwJiBoZWFwKQoreworICAgIEFTU0VSVChtX2N1cnJlbnRJ
bmRleCA8PSBtX2NhcGFjaXR5KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVu
dEluZGV4OyArK2kpCisgICAgICAgIGhlYXAuaGFuZGxlQnVmZmVyZWRSZXNjYW4obV9idWZmZXJb
aV0pOworICAgIG1fY3VycmVudEluZGV4ID0gMDsKK30KKworaW5saW5lIHZvaWQgV3JpdGVCYXJy
aWVyQnVmZmVyOjphZGQoSGVhcCYgaGVhcCwgY29uc3QgSlNDZWxsKiBjZWxsKQoreworICAgIGlm
IChtX2N1cnJlbnRJbmRleCA9PSBtX2NhcGFjaXR5KQorICAgICAgICBmbHVzaChoZWFwKTsKKyAg
ICBBU1NFUlQobV9jdXJyZW50SW5kZXggPCBtX2NhcGFjaXR5KTsKKyAgICBtX2J1ZmZlclttX2N1
cnJlbnRJbmRleCsrXSA9IGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMjEwNTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyOTEsMTcgKzEy
OTEsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBlbWl0U3RvcmVTdHJ1Y3R1cmVXaXRo
VHlwZUluZm8oQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFRydXN0ZWRJbW1QdHIgc3RydWN0dXJlLCBS
ZWdpc3RlcklEIGRlc3QpOwogCi0gICAgSnVtcCBiYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKEdQ
UlJlZyBjZWxsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDgoQWJvdmUsIEFkZHJlc3Mo
Y2VsbCwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihibGFja1RocmVz
aG9sZCkpOwotICAgIH0KLQotICAgIEp1bXAgYmFycmllckJyYW5jaFdpdGhvdXRGZW5jZShKU0Nl
bGwqIGNlbGwpCi0gICAgewotICAgICAgICB1aW50OF90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oY2VsbCkgKyBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpOwotICAgICAg
ICByZXR1cm4gYnJhbmNoOChBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKGFkZHJlc3MpLCBUcnVzdGVk
SW1tMzIoYmxhY2tUaHJlc2hvbGQpKTsKLSAgICB9Ci0gICAgCiAgICAgSnVtcCBiYXJyaWVyQnJh
bmNoKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaEdQUikKICAgICB7CiAgICAgICAgIGxvYWQ4
KEFkZHJlc3MoY2VsbCwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwpA
QCAtMTMxNSwxNSArMTMwNCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFi
b3ZlLCBzY3JhdGNoR1BSLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZCYXJy
aWVyVGhyZXNob2xkKCkpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBiYXJyaWVyU3RvcmVMb2Fk
RmVuY2UoKQotICAgIHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50QmFycmll
cnMoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSnVtcCBvayA9IGp1bXBJZk11dGF0
b3JGZW5jZU5vdE5lZWRlZCgpOwotICAgICAgICBtZW1vcnlGZW5jZSgpOwotICAgICAgICBvay5s
aW5rKHRoaXMpOwotICAgIH0KLSAgICAKICAgICB2b2lkIG11dGF0b3JGZW5jZSgpCiAgICAgewog
ICAgICAgICBpZiAoaXNYODYoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjEwNTIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxODgsMTMgKzIx
ODgsNiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKLXZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogY2VsbCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICB2bS0+aGVhcC5mbHVzaFdyaXRlQmFy
cmllckJ1ZmZlcihjZWxsKTsKLX0KLQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9TUldy
aXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5oCShyZXZpc2lvbiAyMTA1MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyNiw3ICs0MjYsNiBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlh
bENhcGFjaXR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwogY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9y
YWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsK
IAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEV4
ZWNTdGF0ZSosIEpTQ2VsbCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk9TUldyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlz
aW9uIDIxMDUyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExODYsNyArMTE4Niw3IEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmUKIAogICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2Up
CiAgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSkKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCShyZXZpc2lvbiAyMTA1MjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIzLDcgKzIyMyw2IEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoVk0m
IHZtKQogICAgIFNUQVRJQ19BU1NFUlQoR2V0UHV0SW5mbzo6aW5pdGlhbGl6YXRpb25CaXRzID09
IDB4ZmZjMDApOwogCiAgICAgU1RBVElDX0FTU0VSVChNYXJrZWRCbG9jazo6YmxvY2tTaXplID09
IDE2ICogMTAyNCk7Ci0gICAgU1RBVElDX0FTU0VSVChibGFja1RocmVzaG9sZCA9PSAwKTsKIAog
ICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6
OnRhaWxNYXJrZXIoKSkgPT0gc3RhdGljX2Nhc3Q8dWludHB0cl90PigweDdhMTEpKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDIxMDUyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC00OTQsNyArNDk0LDcgQEAgbWFjcm8gd3JpdGVCYXJyaWVyT25PcGVyYW5kKGNlbGxPcGVyYW5k
KQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbihjZWxsT3BlcmFuZCwgdDEpCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZVBheWxvYWQodDEsIENlbGxUYWcsIHQyLCAud3JpdGVCYXJyaWVyRG9u
ZSkKICAgICBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbigKLSAgICAgICAgdDIsIAorICAgICAg
ICB0MiwgdDAsCiAgICAgICAgIG1hY3JvKCkKICAgICAgICAgICAgIHB1c2ggY2ZyLCBQQwogICAg
ICAgICAgICAgIyBXZSBtYWtlIHR3byBleHRyYSBzbG90cyBiZWNhdXNlIGNDYWxsMiB3aWxsIHBv
a2UuCkBAIC01MjUsNyArNTI1LDcgQEAgbWFjcm8gd3JpdGVCYXJyaWVyT25HbG9iYWwodmFsdWVP
cGVyYW5kLAogICAgIGxvYWRIZWxwZXIodDMpCiAKICAgICBza2lwSWZJc1JlbWVtYmVyZWRPcklu
RWRlbigKLSAgICAgICAgdDMsCisgICAgICAgIHQzLCB0MCwKICAgICAgICAgbWFjcm8oKQogICAg
ICAgICAgICAgcHVzaCBjZnIsIFBDCiAgICAgICAgICAgICAjIFdlIG1ha2UgdHdvIGV4dHJhIHNs
b3RzIGJlY2F1c2UgY0NhbGwyIHdpbGwgcG9rZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAy
MTA1MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDA2LDcgKzQwNiw3IEBAIG1hY3JvIHdyaXRlQmFy
cmllck9uT3BlcmFuZChjZWxsT3BlcmFuZCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oY2Vs
bE9wZXJhbmQsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHQxLCB0MiwgLndy
aXRlQmFycmllckRvbmUpCiAgICAgc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oCi0gICAgICAg
IHQyLAorICAgICAgICB0MiwgdDAsCiAgICAgICAgIG1hY3JvKCkKICAgICAgICAgICAgIHB1c2gg
UEIsIFBDCiAgICAgICAgICAgICBtb3ZlIHQyLCBhMSAjIHQyIGNhbiBiZSBhMCAobm90IG9uIDY0
IGJpdHMsIGJ1dCBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5KQpAQCAtNDMzLDcgKzQzMyw3IEBAIG1h
Y3JvIHdyaXRlQmFycmllck9uR2xvYmFsKHZhbHVlT3BlcmFuZCwKIAogICAgIGxvYWRIZWxwZXIo
dDMpCiAgICAgc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oCi0gICAgICAgIHQzLAorICAgICAg
ICB0MywgdDAsCiAgICAgICAgIG1hY3JvKCkKICAgICAgICAgICAgIHB1c2ggUEIsIFBDCiAgICAg
ICAgICAgICBtb3ZlIGNmciwgYTAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIxMDUyMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDA5LDggKzQwOSw2IEBAIGNvbnN0IE5vdEluaXRpYWxpemF0aW9uID0gMgog
Y29uc3QgTWFya2VkQmxvY2tTaXplID0gMTYgKiAxMDI0CiBjb25zdCBNYXJrZWRCbG9ja01hc2sg
PSB+KE1hcmtlZEJsb2NrU2l6ZSAtIDEpCiAKLWNvbnN0IEJsYWNrVGhyZXNob2xkID0gMAotCiAj
IEFsbG9jYXRpb24gY29uc3RhbnRzCiBpZiBKU1ZBTFVFNjQKICAgICBjb25zdCBKU0ZpbmFsT2Jq
ZWN0U2l6ZUNsYXNzSW5kZXggPSAxCkBAIC04NzMsOSArODcxLDExIEBAIG1hY3JvIGFycmF5UHJv
ZmlsZShjZWxsQW5kSW5kZXhpbmdUeXBlLCAKICAgICBsb2FkYiBKU0NlbGw6Om1faW5kZXhpbmdU
eXBlQW5kTWlzY1tjZWxsXSwgaW5kZXhpbmdUeXBlCiBlbmQKIAotbWFjcm8gc2tpcElmSXNSZW1l
bWJlcmVkT3JJbkVkZW4oY2VsbCwgc2xvd1BhdGgpCi0gICAgbWVtZmVuY2UKLSAgICBiYmEgSlND
ZWxsOjptX2NlbGxTdGF0ZVtjZWxsXSwgQmxhY2tUaHJlc2hvbGQsIC5kb25lCittYWNybyBza2lw
SWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzY3JhdGNoLCBzbG93UGF0aCkKKyAgICBsb2Fk
cCBDb2RlQmxvY2tbY2ZyXSwgc2NyYXRjaAorICAgIGxvYWRwIENvZGVCbG9jazo6bV92bVtzY3Jh
dGNoXSwgc2NyYXRjaAorICAgIGxvYWRpIFZNOjpoZWFwICsgSGVhcDo6bV9iYXJyaWVyVGhyZXNo
b2xkLCBzY3JhdGNoCisgICAgYmJhIEpTQ2VsbDo6bV9jZWxsU3RhdGVbY2VsbF0sIHNjcmF0Y2gs
IC5kb25lCiAgICAgc2xvd1BhdGgoKQogLmRvbmU6CiBlbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMTA1MjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4
LDcgKzI5OCw3IEBAIHZvaWQgSlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWUKIH0K
IAogLy8gVGhpcyBtZXRob2QgbWFrZXMgcm9vbSBpbiB0aGUgdmVjdG9yLCBidXQgbGVhdmVzIHRo
ZSBuZXcgc3BhY2UgZm9yIGNvdW50IHNsb3RzIHVuY2xlYXJlZC4KLWJvb2wgSlNBcnJheTo6dW5z
aGlmdENvdW50U2xvd0Nhc2UoVk0mIHZtLCBEZWZlckdDJiwgYm9vbCBhZGRUb0Zyb250LCB1bnNp
Z25lZCBjb3VudCkKK2Jvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBWTSYgdm0sIERlZmVyR0MmLCBib29sIGFkZFRvRnJvbnQsIHVuc2lnbmVk
IGNvdW50KQogewogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFn
ZSh2bSk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKTsK
QEAgLTg5Miw2ICs4OTIsOSBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9y
YWdlCiAgICAgaWYgKHN0YXJ0SW5kZXggPj0gdmVjdG9yTGVuZ3RoKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAKKyAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jaygqdGhpcyk7CisgICAgCiAgICAgaWYgKHN0YXJ0SW5kZXggKyBjb3VudCA+IHZl
Y3Rvckxlbmd0aCkKICAgICAgICAgY291bnQgPSB2ZWN0b3JMZW5ndGggLSBzdGFydEluZGV4Owog
ICAgIApAQCAtOTMwLDcgKzkzMyw3IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJh
eVN0b3JhZ2UKICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBCdXR0ZXJmbHksIHdoaWNoIG5l
ZWRzIHRvIHBvaW50IGF0IHRoZSBmaXJzdCBpbmRleGVkIHByb3BlcnR5IGluIHRoZSB1c2VkCiAg
ICAgICAgIC8vIHBvcnRpb24gb2YgdGhlIHZlY3Rvci4KICAgICAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS0+c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKLSAg
ICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0aG91dEJhcnJpZXIoYnV0dGVyZmx5KTsKKyAgICAgICAg
c2V0QnV0dGVyZmx5KHZtLCBidXR0ZXJmbHkpOwogICAgICAgICBzdG9yYWdlID0gYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgKz0gY291bnQ7
CiAKQEAgLTEwNzUsNyArMTA3OCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFy
cmF5U3RvcmEKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAg
IFJFTEVBU0VfQVNTRVJUKHN0YXJ0SW5kZXggPD0gbGVuZ3RoKTsKLQorICAgIAogICAgIC8vIElm
IHRoZSBhcnJheSBjb250YWlucyBob2xlcyBvciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwg
c3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5lcmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlw
ZS4KICAgICBpZiAoc3RvcmFnZS0+aGFzSG9sZXMoKSB8fCBzdG9yYWdlLT5pblNwYXJzZU1vZGUo
KSB8fCBzaG91bGRVc2VTbG93UHV0KGluZGV4aW5nVHlwZSgpKSkKQEAgLTEwOTgsNyArMTEwMSw3
IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmEKICAgICAgICAgc2V0
QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgIH0gZWxzZSBpZiAoIW1vdmVGcm9udCAm
JiB2ZWN0b3JMZW5ndGggLSBsZW5ndGggPj0gY291bnQpCiAgICAgICAgIHN0b3JhZ2UgPSBzdG9y
YWdlLT5idXR0ZXJmbHkoKS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgZWxzZSBpZiAodW5zaGlmdENv
dW50U2xvd0Nhc2Uodm0sIGRlZmVyR0MsIG1vdmVGcm9udCwgY291bnQpKQorICAgIGVsc2UgaWYg
KHVuc2hpZnRDb3VudFNsb3dDYXNlKGxvY2tlciwgdm0sIGRlZmVyR0MsIG1vdmVGcm9udCwgY291
bnQpKQogICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyMTA1MjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3
ICsxNzcsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhp
bmdUeXBlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KTsK
ICAgICBib29sIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSopOwotICAgIGJvb2wg
dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mLCBEZWZlckdDJiwgYm9vbCwgdW5zaWduZWQpOworICAg
IGJvb2wgdW5zaGlmdENvdW50U2xvd0Nhc2UoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBWTSYsIERl
ZmVyR0MmLCBib29sLCB1bnNpZ25lZCk7CiAKICAgICBib29sIHNldExlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9u
LCBBcnJheVN0b3JhZ2UqKTsKICAgICB2b2lkIHNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSos
IGJvb2wgd3JpdGFibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgJKHJldmlzaW9uIDIxMDUyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNiArMTc5LDExIEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIHNldENlbGxTdGF0ZShDZWxsU3RhdGUgZGF0YSkgY29uc3QgeyBjb25zdF9jYXN0
PEpTQ2VsbCo+KHRoaXMpLT5tX2NlbGxTdGF0ZSA9IGRhdGE7IH0KICAgICAKKyAgICBib29sIGF0
b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVdlYWsoQ2VsbFN0YXRlIG9sZFN0YXRlLCBDZWxs
U3RhdGUgbmV3U3RhdGUsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3Jk
ZXJfc2VxX2NzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmF0b21pY0NvbXBhcmVFeGNo
YW5nZVdlYWsoJm1fY2VsbFN0YXRlLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG9yZGVyKTsKKyAgICB9
CisKICAgICBib29sIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVdlYWtSZWxheGVkKENl
bGxTdGF0ZSBvbGRTdGF0ZSwgQ2VsbFN0YXRlIG5ld1N0YXRlKQogICAgIHsKICAgICAgICAgcmV0
dXJuIFdURjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlV2Vha1JlbGF4ZWQoJm1fY2VsbFN0YXRlLCBv
bGRTdGF0ZSwgbmV3U3RhdGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjEwNTIxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyAr
NDEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBKU0NlbGw6OkpTQ2VsbChDcmVhdGlu
Z0Vhcmx5Q2VsbFRhZykKLSAgICA6IG1fY2VsbFN0YXRlKENlbGxTdGF0ZTo6RGVmaW5pdGVseU5l
d0FuZFdoaXRlKQorICAgIDogbV9jZWxsU3RhdGUoV2hpdGUpCiB7CiAgICAgQVNTRVJUKCFpc0Nv
bXBpbGF0aW9uVGhyZWFkKCkpOwogfQpAQCAtNTEsNyArNTEsNyBAQCBpbmxpbmUgSlNDZWxsOjpK
U0NlbGwoVk0mLCBTdHJ1Y3R1cmUqIHN0CiAgICAgLCBtX2luZGV4aW5nVHlwZUFuZE1pc2Moc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpCiAgICAgLCBtX3R5cGUoc3Ry
dWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSkKICAgICAsIG1fZmxhZ3Moc3RydWN0dXJlLT50eXBl
SW5mbygpLmlubGluZVR5cGVGbGFncygpKQotICAgICwgbV9jZWxsU3RhdGUoQ2VsbFN0YXRlOjpE
ZWZpbml0ZWx5TmV3QW5kV2hpdGUpCisgICAgLCBtX2NlbGxTdGF0ZShXaGl0ZSkKIHsKICAgICBB
U1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMTA1MjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
Myw2ICszODMsMTYgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdAog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBzdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUo
c3RydWN0dXJlSUQpOwogICAgIGxhc3RPZmZzZXQgPSBzdHJ1Y3R1cmUtPmxhc3RPZmZzZXQoKTsK
KyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KTsKKyAgICBMb2NrZXI8SlNDZWxsPiBsb2NrZXIoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKKyAgICBz
d2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6CisgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgbG9ja2VyID0gTG9ja2VyPEpTQ2VsbD4oKnRoaXMpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7
CiAgICAgYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7CiAgICAgaWYgKCFidXR0ZXJmbHkp
CkBAIC0zOTUsMjcgKzQwNSwxNyBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6
OnZpc2l0CiAgICAgCiAgICAgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGll
cyh2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSwgbGFzdE9mZnNldCk7CiAgICAgCi0gICAg
SW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOwotICAgIHN3
aXRjaCAob2xkVHlwZSkgeworICAgIEFTU0VSVChpbmRleGluZ1R5cGUgPT0gc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSk7CisgICAgCisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgLy8gVGhpcyBsb2NrIGlzIGhlcmUgdG8g
cHJvdGVjdCBDb250aWd1b3VzLT5BcnJheVN0b3JhZ2UgdHJhbnNpdGlvbnMsIGJ1dCB3ZSBjb3Vs
ZCBtYWtlIHRoYXQKLSAgICAgICAgLy8gcmFjZSB3b3JrIGlmIHdlIG5lZWRlZCB0by4KLSAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jaygqdGhpcyk7Ci0gICAgICAgIEluZGV4aW5nVHlwZSBu
ZXdUeXBlID0gdGhpcy0+aW5kZXhpbmdUeXBlKCk7Ci0gICAgICAgIGJ1dHRlcmZseSA9IHRoaXMt
PmJ1dHRlcmZseSgpOwotICAgICAgICBzd2l0Y2ggKG5ld1R5cGUpIHsKLSAgICAgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogLy8g
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVMKLSAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAgICBpZiAo
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCi0gICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmQoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzoKKyAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwogICAgICAgICBicmVhazsKLSAgICB9CiAgICAgZGVm
YXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjEwNTIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNiArMTg4LDcgQEAg
dHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCBjb2xsZWN0Q29u
dGludW91c2x5LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIGNvbGxl
Y3RDb250aW51b3VzbHlQZXJpb2RNUywgMSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29s
LCBmb3JjZUZlbmNlZEJhcnJpZXIsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KHVu
c2lnbmVkLCByZXNjYW5Mb2dTaXplLCAxNjM4NCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihi
b29sLCB2ZXJib3NlVmlzaXRSYWNlLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihi
b29sLCBvcHRpbWl6ZVBhcmFsbGVsU2xvdFZpc2l0b3JzRm9yU3RvcHBlZE11dGF0b3IsIGZhbHNl
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KHVuc2lnbmVkLCBsYXJnZUhlYXBTaXplLCAzMiAq
IDEwMjQgKiAxMDI0LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCShyZXZpc2lvbiAyMTA1MjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgICAgICB1LmZpZWxkcy5pbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5ID0gaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeTsK
ICAgICAgICAgdS5maWVsZHMudHlwZSA9IHR5cGVJbmZvLnR5cGUoKTsKICAgICAgICAgdS5maWVs
ZHMuaW5saW5lVHlwZUZsYWdzID0gdHlwZUluZm8uaW5saW5lVHlwZUZsYWdzKCk7Ci0gICAgICAg
IHUuZmllbGRzLmRlZmF1bHRDZWxsU3RhdGUgPSBDZWxsU3RhdGU6OkRlZmluaXRlbHlOZXdBbmRX
aGl0ZTsKKyAgICAgICAgdS5maWVsZHMuZGVmYXVsdENlbGxTdGF0ZSA9IFdoaXRlOwogICAgIH0K
IAogICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVyZUlEQmxvYiYgb3RoZXIpIHsgdS5k
b3VibGVXb3JkID0gb3RoZXIudS5kb3VibGVXb3JkOyB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9E
YXRhTG9nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmNwcAkocmV2
aXNpb24gMjEwNTIxKQorKysgU291cmNlL1dURi93dGYvRGF0YUxvZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDYgKzUzLDcgQEAgbmFtZXNwYWNlIFdURiB7CiBzdGF0aWMgUHJpbnRTdHJlYW0q
IHNfZmlsZTsKIAogc3RhdGljIHVpbnQ2NF90IHNfZmlsZURhdGFbKHNpemVvZihGaWxlUHJpbnRT
dHJlYW0pICsgNykgLyA4XTsKK3N0YXRpYyB1aW50NjRfdCBzX2xvY2tlZEZpbGVEYXRhWyhzaXpl
b2YoTG9ja2VkUHJpbnRTdHJlYW0pICsgNykgLyA4XTsKIAogc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZUxvZ0ZpbGVPbmNlKCkKIHsKQEAgLTExOSwxOSArMTIwLDE2IEBAIHN0YXRpYyB2b2lkIGluaXRp
YWxpemVMb2dGaWxlT25jZSgpCiAgICAgfQogI2VuZGlmIC8vIERBVEFfTE9HX1RPX0ZJTEUKICAg
ICAKLSAgICBib29sIHdyYXBXaXRoTG9ja2VkID0gdHJ1ZTsKLSAgICAKICAgICBpZiAoIWZpbGUp
IHsKICAgICAgICAgLy8gVXNlIHBsYWNlbWVudCBuZXc7IHRoaXMgbWFrZXMgaXQgZWFzaWVyIHRv
IHVzZSBkYXRhTG9nKCkgdG8gZGVidWcKICAgICAgICAgLy8gZmFzdE1hbGxvYy4KICAgICAgICAg
ZmlsZSA9IG5ldyAoc19maWxlRGF0YSkgRmlsZVByaW50U3RyZWFtKHN0ZGVyciwgRmlsZVByaW50
U3RyZWFtOjpCb3Jyb3cpOwotICAgICAgICB3cmFwV2l0aExvY2tlZCA9IGZhbHNlOwogICAgIH0K
ICAgICAKICAgICBzZXR2YnVmKGZpbGUtPmZpbGUoKSwgMCwgX0lPTkJGLCAwKTsgLy8gUHJlZmVy
IHVuYnVmZmVyZWQgb3V0cHV0LCBzbyB0aGF0IHdlIGdldCBhIGZ1bGwgbG9nIHVwb24gY3Jhc2gg
b3IgZGVhZGxvY2suCiAgICAgCi0gICAgaWYgKHdyYXBXaXRoTG9ja2VkKQotICAgICAgICBzX2Zp
bGUgPSBuZXcgTG9ja2VkUHJpbnRTdHJlYW0oc3RkOjp1bmlxdWVfcHRyPEZpbGVQcmludFN0cmVh
bT4oZmlsZSkpOworICAgIGlmIChmYWxzZSkKKyAgICAgICAgc19maWxlID0gbmV3IChzX2xvY2tl
ZEZpbGVEYXRhKSBMb2NrZWRQcmludFN0cmVhbShzdGQ6OnVuaXF1ZV9wdHI8RmlsZVByaW50U3Ry
ZWFtPihmaWxlKSk7CiAgICAgZWxzZQogICAgICAgICBzX2ZpbGUgPSBmaWxlOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>