<?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>161744</bug_id>
          
          <creation_ts>2016-09-08 10:57:06 -0700</creation_ts>
          <short_desc>Move JSMap/JSSet over to Auxiliary MarkedSpace</short_desc>
          <delta_ts>2016-09-08 12:01:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>160989</dependson>
          <blocked>159658</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1227641</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-08 10:57:06 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227642</commentid>
    <comment_count>1</comment_count>
      <attachid>288279</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-08 11:00:04 -0700</bug_when>
    <thetext>Created attachment 288279
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227650</commentid>
    <comment_count>2</comment_count>
      <attachid>288284</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-08 11:14:11 -0700</bug_when>
    <thetext>Created attachment 288284
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227653</commentid>
    <comment_count>3</comment_count>
      <attachid>288284</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-08 11:17:43 -0700</bug_when>
    <thetext>Comment on attachment 288284
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        This moves the buffer out of CopiedSpace and into Auxiliary MarkedSpace.

Also mention that you&apos;re removing MapData since it&apos;s no longer used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227677</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-08 12:01:29 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/205654</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288279</attachid>
            <date>2016-09-08 11:00:04 -0700</date>
            <delta_ts>2016-09-08 11:14:11 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32415</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1NjUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDE2LTA5LTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBKU01hcC9KU1NldCBvdmVyIHRvIEF1eGlsaWFyeSBNYXJrZWRTcGFjZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNzQ0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIG1vdmVz
IHRoZSBidWZmZXIgb3V0IG9mIENvcGllZFNwYWNlIGFuZCBpbnRvIEF1eGlsaWFyeSBNYXJrZWRT
cGFjZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBwdXJlbHkgbWVjaGFuaWNhbCBjaGFu
Z2UuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGhlYXAvQ29weVRva2VuLmg6CisgICAgICAgICogcnVudGltZS9IYXNoTWFw
SW1wbC5jcHA6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmNv
cHlCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwu
aDoKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0pTTWFwSXRlcmF0b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHA6CisgICAgICAgICogcnVudGlt
ZS9KU1NldEl0ZXJhdG9yLmg6CisgICAgICAgICogcnVudGltZS9NYXBCYXNlLmNwcDoKKyAgICAg
ICAgKiBydW50aW1lL01hcERhdGEuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL01hcERh
dGFJbmxpbmVzLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3Bw
OgorICAgICAgICAqIHJ1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1bnRp
bWUvU2V0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKwogMjAxNi0w
OS0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFR5cGVkIGFy
cmF5cyBzaG91bGQgdXNlIE1hcmtlZFNwYWNlIGluc3RlYWQgb2YgQ29waWVkU3BhY2UKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDU2NDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNiBAQAogLyogRW5kIFBCWEFnZ3JlZ2F0ZVRhcmdl
dCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0JCTBBNjQ0
MTUxOTQyMEE2QzYxQUQxODgyRSAvKiBNYXBEYXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTkzRDQzQ0NBMEJCRTA2RDg5QzU5NzA3IC8q
IE1hcERhdGFJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYwMTIzMzIxOTQ0RUExQjAwODQzQTBDIC8qIERGR1ZhbHVlU3RyZW5ndGgu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwMTIz
MzAxOTQ0RUExQjAwODQzQTBDIC8qIERGR1ZhbHVlU3RyZW5ndGguY3BwICovOyB9OwogCQkwRjAx
MjMzMzE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVTdHJlbmd0aC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwMTIzMzExOTQ0RUExQjAwODQzQTBD
IC8qIERGR1ZhbHVlU3RyZW5ndGguaCAqLzsgfTsKIAkJMEYwMzMyQzAxOEFERkFFMTAwNUY5NzlB
IC8qIEV4aXRpbmdKSVRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMDMzMkJGMThBREZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklUVHlwZS5j
cHAgKi87IH07CkBAIC0xNzY5LDcgKzE3NjgsNiBAQAogCQlBNzdGMTgyNTE2NDE5MkM3MDA2NDBB
NDcgLyogUGFyc2VyTW9kZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3ODRBMjYxMTFE
MTY2MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyogQVNUQnVpbGRl
ci5oICovOyB9OwogCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcx
MUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyog
TWFwRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg1RjZCQzE4QzU1M0ZFMDBGMTA2MjYg
LyogU3BpbGxSZWdpc3RlcnNNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0ZGNjQ3QTE4QzUyRTg1MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNN
b2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTc4QTk3NzQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2QzE3OTczOEI4
MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLzsgfTsKIAkJQTc4QTk3NzUxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERG
R0ZhaWxlZEZpbmFsaXplci5oICovOyB9OwpAQCAtMzQ0NSw3ICszNDQzLDYgQEAKIAkJNTNGQTJB
RTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMTElu
dFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1M0ZEMDREMTFEN0FCMTg3MDAzMjg3RDMgLyogV0FTTUNhbGxp
bmdDb252ZW50aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdB
U01DYWxsaW5nQ29udmVudGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
RkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXQVNNQ2FsbGluZ0NvbnZlbnRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUNhbGxpbmdDb252ZW50aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcwNyAvKiBNYXBE
YXRhSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDVEOEFEMDBFMEQwRUJFMDBG
OUM2OTIgLyogbGliZWRpdC5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliZWRpdC5k
eWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmVkaXQuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29s
dXRlPiI7IH07CiAJCTVEQUZENkNCMTQ2QjY4NjMwMEZCRUZCNCAvKiBKU0MueGNjb25maWcgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29u
ZmlnOyBwYXRoID0gSlNDLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
RERERjQ0NjE0RkVFNzIyMDBCNEZCNEQgLyogTExJbnREZXNpcmVkT2Zmc2V0cy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludERlc2lyZWRPZmZzZXRzLmg7IHBhdGggPSBM
TEludE9mZnNldHMvTExJbnREZXNpcmVkT2Zmc2V0cy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwpAQCAtNDA2MCw3ICs0MDU3LDYgQEAKIAkJQTc3RjE4MUYxNjQwODhCMjAw
NjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb2RlQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzdGMTgy
MDE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvZGVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzdG
MTgyNDE2NDE5MjU0MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFy
c2VyTW9kZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTc4NTA3RDUxN0NCQzZG
RDAwMTFGNkU3IC8qIE1hcERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFwRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4
MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFp
bGVkRmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkQx
Nzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuaDsgcGF0aCA9IGRmZy9ERkdGYWls
ZWRGaW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkUxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZpbmFsaXplci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MDY1LDggKzYwNjEsNiBAQAogCQkJ
CTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi8sCiAJCQkJQTcwMDg3Mzcx
N0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBNzAwODczODE3
Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCAqLywKLQkJCQlBNzg1MDdENTE3Q0JD
NkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovLAotCQkJCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcw
NyAvKiBNYXBEYXRhSW5saW5lcy5oICovLAogCQkJCUE3NERFRjhEMTgyRDk5MTQwMDUyMkMyMiAv
KiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQTc0REVGOEUxODJEOTkxNDAwNTIy
QzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmggKi8sCiAJCQkJQTcwMDg3M0IxN0NCRThEMzAw
QzNFNjQzIC8qIE1hcFByb3RvdHlwZS5jcHAgKi8sCkBAIC04MTA4LDkgKzgxMDIsNyBAQAogCQkJ
CTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2NDMg
LyogTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3ODUwN0Q3MTdDQkM2RkQw
MDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RjFDMENENjg1
MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwQTY0NDE1MTk0MjBBNkM2MUFEMTg4MkUgLyogTWFwRGF0YUlubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3NERFRjk0MTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRv
clByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwMDg3M0UxN0NCRThEMzAwQzNFNjQz
IC8qIE1hcFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJCOTE2QzIxNERBMDE0RTAw
Q0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAkocmV2aXNpb24gMjA1NjQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIENvcHlUb2tlbiB7Ci0gICAgTWFwQmFj
a2luZ1N0b3JlQ29weVRva2VuLAogICAgIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tl
bgogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJ
bXBsLmNwcAkocmV2aXNpb24gMjA1NjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGFzaE1hcEltcGwuaCIKIAotI2luY2x1ZGUgIkNv
cGllZEJsb2NrSW5saW5lcy5oIgotI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTcwLDI0ICs2OSw5
IEBAIHZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2gKIAogICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2hlYWQpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX3RhaWwpOwotCi0gICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09iamVjdCwgTWFw
QmFja2luZ1N0b3JlQ29weVRva2VuLCB0aGlzT2JqZWN0LT5tX2J1ZmZlci5nZXQoKSwgdGhpc09i
amVjdC0+YnVmZmVyU2l6ZUluQnl0ZXMoKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBIYXNo
TWFwQnVja2V0Pgotdm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6Y29weUJhY2tpbmdT
dG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4p
Ci17Ci0gICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7Ci0K
LSAgICBIYXNoTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwp
OwotICAgIGlmICh0b2tlbiA9PSBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4gJiYgdmlzaXRvci5j
aGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX2J1ZmZlci5nZXQoKSkpIHsKLSAgICAgICAg
SGFzaE1hcEJ1ZmZlclR5cGUqIG9sZEJ1ZmZlciA9IHRoaXNPYmplY3QtPm1fYnVmZmVyLmdldCgp
OwotICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZUluQnl0ZXMgPSB0aGlzT2JqZWN0LT5idWZmZXJT
aXplSW5CeXRlcygpOwotICAgICAgICBIYXNoTWFwQnVmZmVyVHlwZSogbmV3QnVmZmVyID0gc3Rh
dGljX2Nhc3Q8SGFzaE1hcEJ1ZmZlclR5cGUqPih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UoYnVm
ZmVyU2l6ZUluQnl0ZXMpKTsKLSAgICAgICAgbWVtY3B5KG5ld0J1ZmZlciwgb2xkQnVmZmVyLCBi
dWZmZXJTaXplSW5CeXRlcyk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fYnVmZmVyLnNldFdpdGhv
dXRCYXJyaWVyKG5ld0J1ZmZlcik7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRCdWZmZXIs
IGJ1ZmZlclNpemVJbkJ5dGVzKTsKLSAgICB9CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPm1f
YnVmZmVyKQorICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+bV9idWZm
ZXIuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjA1NjQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNTEsOSArMTUxLDggQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBzaXpl
X3QgYWxsb2NhdGlvblNpemUgPSBIYXNoTWFwQnVmZmVyOjphbGxvY2F0aW9uU2l6ZShjYXBhY2l0
eSk7Ci0gICAgICAgIHZvaWQqIGRhdGEgPSBudWxscHRyOwotICAgICAgICBEZWZlckdDRm9yQVdo
aWxlIGRlZmVyKHZtLmhlYXApOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9y
YWdlKG93bmVyLCBhbGxvY2F0aW9uU2l6ZSwgJmRhdGEpKSB7CisgICAgICAgIHZvaWQqIGRhdGEg
PSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG93bmVyLCBhbGxvY2F0aW9uU2l6ZSk7Cisg
ICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CkBAIC0y
NTksNyArMjU4LDYgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2lu
Z1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKIAogICAgIEhhc2hNYXBJ
bXBsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQpAQCAtNTE1LDcgKzUxMyw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0ZUJhcnJpZXI8
SGFzaE1hcEJ1Y2tldFR5cGU+IG1faGVhZDsKICAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tl
dFR5cGU+IG1fdGFpbDsKLSAgICBDb3B5QmFycmllcjxIYXNoTWFwQnVmZmVyVHlwZT4gbV9idWZm
ZXI7CisgICAgQXV4aWxpYXJ5QmFycmllcjxIYXNoTWFwQnVmZmVyVHlwZSo+IG1fYnVmZmVyOwog
ICAgIHVpbnQzMl90IG1fc2l6ZTsKICAgICB1aW50MzJfdCBtX2RlbGV0ZUNvdW50OwogICAgIHVp
bnQzMl90IG1fY2FwYWNpdHk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjA1NjQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01hcC5o
IgotI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCShyZXZp
c2lvbiAyMDU2NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJJdGVyYXRp
b25LaW5kLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2lu
Y2x1ZGUgIk1hcERhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDU2
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTU2V0LmgiCi0jaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0
SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NldEl0ZXJhdG9yLmgJKHJldmlzaW9uIDIwNTY0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsNiBA
QAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKIAotI2luY2x1ZGUg
Ik1hcERhdGEuaCIKLQogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTU2V0SXRlcmF0b3IgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBCYXNlLmNwcAkocmV2aXNpb24gMjA1NjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXBCYXNlLmgiCiAKLSNpbmNsdWRlICJT
bG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCShy
ZXZpc2lvbiAyMDU2NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRh
LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBNYXBEYXRhX2gKLSNkZWZpbmUgTWFwRGF0YV9oCi0KLSNpbmNsdWRlICJDb3B5
QmFycmllci5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIldlYWtHQ01hcElubGlu
ZXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBWTTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+Ci1jbGFzcyBNYXBE
YXRhSW1wbCB7Ci1wdWJsaWM6Ci0gICAgZW51bSA6IGludDMyX3QgewotICAgICAgICBtaW5pbXVt
TWFwU2l6ZSA9IDgKLSAgICB9OwotCi0gICAgY2xhc3MgSXRlcmF0b3JEYXRhIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBNYXBEYXRhSW1wbDsKLQotICAgICAgICBJdGVyYXRv
ckRhdGEoY29uc3QgTWFwRGF0YUltcGwqKTsKLSAgICAgICAgYm9vbCBuZXh0KFdURjo6S2V5VmFs
dWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+Jik7Ci0KLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgd2hpbGUgcGFja2luZyBhIG1hcCdzIGJhY2tpbmcgc3RvcmUuIFRoZQotICAgICAg
ICAvLyBwYXNzZWQtaW4gaW5kZXggaXMgdGhlIG5ldyBpbmRleCB0aGUgZW50cnkgd291bGQgaGF2
ZSBhZnRlciBwYWNraW5nLgotICAgICAgICB2b2lkIGRpZFJlbW92ZUVudHJ5KGludDMyX3QgcGFj
a2VkSW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0ZpbmlzaGVkKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAobV9pbmRleCA8PSBwYWNrZWRJ
bmRleCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIC0tbV9pbmRleDsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZGlkUmVtb3ZlQWxsRW50cmllcygpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChpc0ZpbmlzaGVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgbV9pbmRleCA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGZp
bmlzaCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1faW5kZXggPSAtMTsKLSAgICAgICAgfQot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBlbnN1cmVTbG90KCkgY29uc3Q7Ci0gICAgICAg
IGJvb2wgaXNGaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggPT0gLTE7IH0KLSAgICAg
ICAgaW50MzJfdCByZWZyZXNoQ3Vyc29yKCkgY29uc3Q7Ci0KLSAgICAgICAgY29uc3QgTWFwRGF0
YUltcGwqIG1fbWFwRGF0YTsKLSAgICAgICAgbXV0YWJsZSBpbnQzMl90IG1faW5kZXg7Ci0gICAg
fTsKLSAgICBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSXRlcmF0b3JE
YXRhKTsKLQotICAgIHN0cnVjdCBLZXlUeXBlIHsKLSAgICAgICAgQUxXQVlTX0lOTElORSBLZXlU
eXBlKCkgeyB9Ci0gICAgICAgIEtleVR5cGUoSlNWYWx1ZSk7Ci0gICAgICAgIEpTVmFsdWUgdmFs
dWU7Ci0gICAgfTsKLQotICAgIE1hcERhdGFJbXBsKFZNJiwgSlNDZWxsKiBvd25lcik7Ci0KLSAg
ICB2b2lkIHNldChFeGVjU3RhdGUqLCBKU0NlbGwqIG93bmVyLCBLZXlUeXBlLCBKU1ZhbHVlKTsK
LSAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBLZXlUeXBlKTsKLSAgICBib29sIHJlbW92ZShF
eGVjU3RhdGUqLCBLZXlUeXBlKTsKLSAgICBib29sIGNvbnRhaW5zKEV4ZWNTdGF0ZSosIEtleVR5
cGUpOwotICAgIHNpemVfdCBzaXplKEV4ZWNTdGF0ZSopIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZSAt
IG1fZGVsZXRlZENvdW50OyB9Ci0KLSAgICBJdGVyYXRvckRhdGEgY3JlYXRlSXRlcmF0b3JEYXRh
KEpTSXRlcmF0b3IqKTsKLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgY29weUJhY2tpbmdT
dG9yZShDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7Ci0KLSAgICBzaXplX3QgY2FwYWNpdHlJbkJ5
dGVzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhY2l0eSAqIHNpemVvZihFbnRyeSk7IH0KLQotcHJp
dmF0ZToKLSAgICB0eXBlZGVmIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50
MzJfdD4gSW5kZXhUcmFpdHM7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8SlNDZWxsKiwgaW50MzJf
dCwgdHlwZW5hbWUgV1RGOjpEZWZhdWx0SGFzaDxKU0NlbGwqPjo6SGFzaCwgV1RGOjpIYXNoVHJh
aXRzPEpTQ2VsbCo+LCBJbmRleFRyYWl0cz4gQ2VsbEtleWVkTWFwOwotICAgIHR5cGVkZWYgSGFz
aE1hcDxFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVk
SlNWYWx1ZUhhc2hUcmFpdHMsIEluZGV4VHJhaXRzPiBWYWx1ZUtleWVkTWFwOwotICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgaW50MzJfdCwgdHlwZW5hbWUgV1RGOjpEZWZhdWx0SGFz
aDxTdHJpbmdJbXBsKj46Okhhc2gsIFdURjo6SGFzaFRyYWl0czxTdHJpbmdJbXBsKj4sIEluZGV4
VHJhaXRzPiBTdHJpbmdLZXllZE1hcDsKLQotICAgIEFMV0FZU19JTkxJTkUgRW50cnkqIGZpbmQo
RXhlY1N0YXRlKiwgS2V5VHlwZSk7Ci0gICAgQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNT
dGF0ZSosIEpTQ2VsbCogb3duZXIsIEtleVR5cGUpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBN
YXAsIHR5cGVuYW1lIEtleT4gQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNTdGF0ZSosIEpT
Q2VsbCogb3duZXIsIE1hcCYsIEtleSwgS2V5VHlwZSk7Ci0KLSAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgc2hvdWxkUGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZENvdW50OyB9Ci0gICAgQ2hl
Y2tlZEJvb2xlYW4gZW5zdXJlU3BhY2VGb3JBcHBlbmQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvd25l
cik7Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUo
RW50cnkqIGRlc3RpbmF0aW9uLCBpbnQzMl90IG5ld1NpemUpOwotICAgIEFMV0FZU19JTkxJTkUg
dm9pZCByZXBsYWNlQmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdT
aXplKTsKLQotICAgIENlbGxLZXllZE1hcCBtX2NlbGxLZXllZFRhYmxlOwotICAgIFZhbHVlS2V5
ZWRNYXAgbV92YWx1ZUtleWVkVGFibGU7Ci0gICAgU3RyaW5nS2V5ZWRNYXAgbV9zdHJpbmdLZXll
ZFRhYmxlOwotICAgIGludDMyX3QgbV9jYXBhY2l0eTsKLSAgICBpbnQzMl90IG1fc2l6ZTsKLSAg
ICBpbnQzMl90IG1fZGVsZXRlZENvdW50OwotICAgIEpTQ2VsbCogbV9vd25lcjsKLSAgICBDb3B5
QmFycmllcjxFbnRyeT4gbV9lbnRyaWVzOwotICAgIFdlYWtHQ01hcDxKU0l0ZXJhdG9yKiwgSlNJ
dGVyYXRvcj4gbV9pdGVyYXRvcnM7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlw
ZW5hbWUgSlNJdGVyYXRvcj4KLUFMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnksIEpTSXRl
cmF0b3I+OjpNYXBEYXRhSW1wbChWTSYgdm0sIEpTQ2VsbCogb3duZXIpCi0gICAgOiBtX2NhcGFj
aXR5KDApCi0gICAgLCBtX3NpemUoMCkKLSAgICAsIG1fZGVsZXRlZENvdW50KDApCi0gICAgLCBt
X293bmVyKG93bmVyKQotICAgICwgbV9pdGVyYXRvcnModm0pCi17Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgotQUxXQVlTX0lOTElORSBNYXBEYXRh
SW1wbDxFbnRyeSwgSlNJdGVyYXRvcj46OktleVR5cGU6OktleVR5cGUoSlNWYWx1ZSB2KQotewot
ICAgIGlmICghdi5pc0RvdWJsZSgpKSB7Ci0gICAgICAgIHZhbHVlID0gdjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBkb3VibGUgZCA9IHYuYXNEb3VibGUoKTsKLSAgICBpZiAoc3RkOjpp
c25hbihkKSkgewotICAgICAgICB2YWx1ZSA9IHY7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4odi5hc0RvdWJsZSgpKTsKLSAgICBpZiAoaSAh
PSBkKQotICAgICAgICB2YWx1ZSA9IHY7Ci0gICAgZWxzZQotICAgICAgICB2YWx1ZSA9IGpzTnVt
YmVyKGkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRv
cj4KLUFMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjpJdGVyYXRv
ckRhdGE6Okl0ZXJhdG9yRGF0YShjb25zdCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvcj4q
IG1hcERhdGEpCi0gICAgOiBtX21hcERhdGEobWFwRGF0YSkKLSAgICAsIG1faW5kZXgoMCkKLXsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+Ci1BTFdB
WVNfSU5MSU5FIGJvb2wgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjpJdGVyYXRvckRh
dGE6Om5leHQoV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4mIHBhaXIpCi17Ci0g
ICAgaWYgKCFlbnN1cmVTbG90KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBFbnRyeSog
ZW50cnkgPSAmbV9tYXBEYXRhLT5tX2VudHJpZXMuZ2V0KClbbV9pbmRleF07Ci0gICAgcGFpciA9
IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+KGVudHJ5LT5rZXkoKS5nZXQoKSwg
ZW50cnktPnZhbHVlKCkuZ2V0KCkpOwotICAgIG1faW5kZXggKz0gMTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotLy8gVGhpcyBpcyBhIGJpdCBnbmFybHkuIFdlIHVzZSBhbiBpbmRleCBvZiAtMSB0
byBpbmRpY2F0ZSB0aGUKLS8vIGZpbmlzaGVkIHN0YXRlLiBCeSBjYXN0aW5nIHRvIHVuc2lnbmVk
IHdlIGNhbiBpbW1lZGlhdGVseQotLy8gdGVzdCBpZiBib3RoIGl0ZXJhdG9ycyBhcmUgYXQgdGhl
IGVuZCBvZiB0aGVpciBpdGVyYXRpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5h
bWUgSlNJdGVyYXRvcj4KLUFMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJ
dGVyYXRvcj46Okl0ZXJhdG9yRGF0YTo6ZW5zdXJlU2xvdCgpIGNvbnN0Ci17Ci0gICAgaW50MzJf
dCBpbmRleCA9IHJlZnJlc2hDdXJzb3IoKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90
PihpbmRleCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbWFwRGF0YS0+bV9zaXplKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+Ci1BTFdBWVNfSU5M
SU5FIGludDMyX3QgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjpJdGVyYXRvckRhdGE6
OnJlZnJlc2hDdXJzb3IoKSBjb25zdAotewotICAgIGlmIChpc0ZpbmlzaGVkKCkpCi0gICAgICAg
IHJldHVybiBtX2luZGV4OwotCi0gICAgRW50cnkqIGVudHJpZXMgPSBtX21hcERhdGEtPm1fZW50
cmllcy5nZXQoKTsKLSAgICBzaXplX3QgZW5kID0gbV9tYXBEYXRhLT5tX3NpemU7Ci0gICAgd2hp
bGUgKHN0YXRpY19jYXN0PHNpemVfdD4obV9pbmRleCkgPCBlbmQgJiYgIWVudHJpZXNbbV9pbmRl
eF0ua2V5KCkpCi0gICAgICAgIG1faW5kZXgrKzsKLSAgICByZXR1cm4gbV9pbmRleDsKLX0KLQot
fQotCi0jZW5kaWYgLyogIWRlZmluZWQoTWFwRGF0YV9oKSAqLwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCShyZXZpc2lvbiAyMDU2NDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCShub25l
eGlzdGVudCkKQEAgLTEsMjcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1
IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJDb3BpZWRBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIK
LSNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVz
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5h
bWUgSlNJdGVyYXRvcj4KLWlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9y
Pjo6Y2xlYXIoKQotewotICAgIG1fY2VsbEtleWVkVGFibGUuY2xlYXIoKTsKLSAgICBtX3ZhbHVl
S2V5ZWRUYWJsZS5jbGVhcigpOwotICAgIG1fc3RyaW5nS2V5ZWRUYWJsZS5jbGVhcigpOwotICAg
IG1fY2FwYWNpdHkgPSAwOwotICAgIG1fc2l6ZSA9IDA7Ci0gICAgbV9kZWxldGVkQ291bnQgPSAw
OwotICAgIG1fZW50cmllcy5jbGVhcigpOwotICAgIG1faXRlcmF0b3JzLmZvckVhY2goW10oSlNJ
dGVyYXRvciogaXRlcmF0b3IsIEpTSXRlcmF0b3IqKSB7Ci0gICAgICAgIGl0ZXJhdG9yLT5pdGVy
YXRvckRhdGEoKS0+ZGlkUmVtb3ZlQWxsRW50cmllcygpOwotICAgIH0pOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KLWlubGluZSBFbnRyeSogTWFw
RGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjpmaW5kKEV4ZWNTdGF0ZSogZXhlYywgS2V5VHlw
ZSBrZXkpCi17Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGF1dG8g
aXRlciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5maW5kKGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVl
KGV4ZWMpLmltcGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5l
bmQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gJm1fZW50cmllcy5n
ZXQoKVtpdGVyLT52YWx1ZV07Ci0gICAgfQotICAgIGlmIChrZXkudmFsdWUuaXNDZWxsKCkpIHsK
LSAgICAgICAgYXV0byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtleS52YWx1ZS5hc0Nl
bGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fY2VsbEtleWVkVGFibGUuZW5kKCkpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KClbaXRlci0+
dmFsdWVdOwotICAgIH0KLQotICAgIGF1dG8gaXRlciA9IG1fdmFsdWVLZXllZFRhYmxlLmZpbmQo
SlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSkpOwotICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXll
ZFRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gJm1fZW50cmllcy5n
ZXQoKVtpdGVyLT52YWx1ZV07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFt
ZSBKU0l0ZXJhdG9yPgotaW5saW5lIGJvb2wgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+
Ojpjb250YWlucyhFeGVjU3RhdGUqIGV4ZWMsIEtleVR5cGUga2V5KQotewotICAgIHJldHVybiBm
aW5kKGV4ZWMsIGtleSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBK
U0l0ZXJhdG9yPgotdGVtcGxhdGUgPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5PgotaW5saW5l
IEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvcj46OmFkZChFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogb3duZXIsIE1hcCYgbWFwLCBLZXkga2V5LCBLZXlUeXBlIGtleVZhbHVlKQot
ewotICAgIHR5cGVuYW1lIE1hcDo6aXRlcmF0b3IgbG9jYXRpb24gPSBtYXAuZmluZChrZXkpOwot
ICAgIGlmIChsb2NhdGlvbiAhPSBtYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAmbV9lbnRyaWVz
LmdldCgpW2xvY2F0aW9uLT52YWx1ZV07Ci0KLSAgICBpZiAoIWVuc3VyZVNwYWNlRm9yQXBwZW5k
KGV4ZWMsIG93bmVyKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IG1h
cC5hZGQoa2V5LCBtX3NpemUpOwotICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5
KTsKLSAgICBFbnRyeSogZW50cnkgPSAmbV9lbnRyaWVzLmdldCgpW21fc2l6ZSsrXTsKLSAgICBu
ZXcgKGVudHJ5KSBFbnRyeSgpOwotICAgIGVudHJ5LT5zZXRLZXkoZXhlYy0+dm0oKSwgb3duZXIs
IGtleVZhbHVlLnZhbHVlKTsKLSAgICByZXR1cm4gZW50cnk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgotaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8
RW50cnksIEpTSXRlcmF0b3I+OjpzZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyLCBL
ZXlUeXBlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBFbnRyeSogbG9jYXRpb24gPSBhZGQo
ZXhlYywgb3duZXIsIGtleSk7Ci0gICAgaWYgKCFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwot
ICAgIGxvY2F0aW9uLT5zZXRWYWx1ZShleGVjLT52bSgpLCBvd25lciwgdmFsdWUpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KLWlubGluZSBFbnRy
eSogTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjphZGQoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIG93bmVyLCBLZXlUeXBlIGtleSkKLXsKLSAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5n
KCkpCi0gICAgICAgIHJldHVybiBhZGQoZXhlYywgb3duZXIsIG1fc3RyaW5nS2V5ZWRUYWJsZSwg
YXNTdHJpbmcoa2V5LnZhbHVlKS0+dmFsdWUoZXhlYykuaW1wbCgpLCBrZXkpOwotICAgIGlmIChr
ZXkudmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBhZGQoZXhlYywgb3duZXIsIG1fY2Vs
bEtleWVkVGFibGUsIGtleS52YWx1ZS5hc0NlbGwoKSwga2V5KTsKLSAgICByZXR1cm4gYWRkKGV4
ZWMsIG93bmVyLCBtX3ZhbHVlS2V5ZWRUYWJsZSwgSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSks
IGtleSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9y
PgotaW5saW5lIEpTVmFsdWUgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjpnZXQoRXhl
Y1N0YXRlKiBleGVjLCBLZXlUeXBlIGtleSkKLXsKLSAgICBpZiAoRW50cnkqIGVudHJ5ID0gZmlu
ZChleGVjLCBrZXkpKQotICAgICAgICByZXR1cm4gZW50cnktPnZhbHVlKCkuZ2V0KCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWUoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1l
IEpTSXRlcmF0b3I+Ci1pbmxpbmUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvcj46
OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIEtleVR5cGUga2V5KQotewotICAgIGludDMyX3QgbG9j
YXRpb247Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGF1dG8gaXRl
ciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5maW5kKGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGV4
ZWMpLmltcGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52
YWx1ZTsKLSAgICAgICAgbV9zdHJpbmdLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKLSAgICB9IGVs
c2UgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX2NlbGxL
ZXllZFRhYmxlLmZpbmQoa2V5LnZhbHVlLmFzQ2VsbCgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0g
bV9jZWxsS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKLSAgICAgICAgbV9jZWxsS2V5ZWRUYWJsZS5yZW1v
dmUoaXRlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBpdGVyID0gbV92YWx1ZUtleWVk
VGFibGUuZmluZChKU1ZhbHVlOjplbmNvZGUoa2V5LnZhbHVlKSk7Ci0gICAgICAgIGlmIChpdGVy
ID09IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOwotICAgICAgICBtX3ZhbHVlS2V5ZWRUYWJs
ZS5yZW1vdmUoaXRlcik7Ci0gICAgfQotICAgIG1fZW50cmllcy5nZXQoKVtsb2NhdGlvbl0uY2xl
YXIoKTsKLSAgICBtX2RlbGV0ZWRDb3VudCsrOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KLWlubGluZSB2b2lkIE1h
cERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6cmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUo
RW50cnkqIGRlc3RpbmF0aW9uLCBpbnQzMl90IG5ld0NhcGFjaXR5KQotewotICAgIEFTU0VSVChz
aG91bGRQYWNrKCkpOwotICAgIGludDMyX3QgbmV3RW5kID0gMDsKLSAgICBSRUxFQVNFX0FTU0VS
VChuZXdDYXBhY2l0eSA+IDApOwotICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsg
aSsrKSB7Ci0gICAgICAgIEVudHJ5JiBlbnRyeSA9IG1fZW50cmllcy5nZXQoKVtpXTsKLSAgICAg
ICAgaWYgKCFlbnRyeS5rZXkoKSkgewotICAgICAgICAgICAgbV9pdGVyYXRvcnMuZm9yRWFjaChb
bmV3RW5kXShKU0l0ZXJhdG9yKiBpdGVyYXRvciwgSlNJdGVyYXRvciopIHsKLSAgICAgICAgICAg
ICAgICBpdGVyYXRvci0+aXRlcmF0b3JEYXRhKCktPmRpZFJlbW92ZUVudHJ5KG5ld0VuZCk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IEFTU0VSVChuZXdFbmQgPCBuZXdDYXBhY2l0eSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uW25ld0Vu
ZF0gPSBlbnRyeTsKLQotICAgICAgICAvLyBXZSBvdmVyd3JpdGUgdGhlIG9sZCBlbnRyeSB3aXRo
IGEgZm9yd2FyZGluZyBpbmRleCBmb3IgdGhlIG5ldyBlbnRyeSwKLSAgICAgICAgLy8gc28gdGhh
dCB3ZSBjYW4gZml4IHVwIG91ciBoYXNoIHRhYmxlcyBiZWxvdyB3aXRob3V0IGRvaW5nIGFkZGl0
aW9uYWwKLSAgICAgICAgLy8gaGFzaCBsb29rdXBzCi0gICAgICAgIGVudHJ5LnNldEtleVdpdGhv
dXRXcml0ZUJhcnJpZXIoanNOdW1iZXIobmV3RW5kKSk7Ci0gICAgICAgIG5ld0VuZCsrOwotICAg
IH0KLQotICAgIC8vIEZpeHVwIGZvciB0aGUgaGFzaG1hcHMKLSAgICBmb3IgKGF1dG8gcHRyID0g
bV92YWx1ZUtleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgp
OyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllcy5nZXQoKVtwdHItPnZhbHVl
XS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7Ci0gICAgZm9yIChhdXRvIHB0ciA9IG1fY2VsbEtleWVk
VGFibGUuYmVnaW4oKTsgcHRyICE9IG1fY2VsbEtleWVkVGFibGUuZW5kKCk7ICsrcHRyKQotICAg
ICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldCgpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgp
LmFzSW50MzIoKTsKLSAgICBmb3IgKGF1dG8gcHRyID0gbV9zdHJpbmdLZXllZFRhYmxlLmJlZ2lu
KCk7IHB0ciAhPSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHIt
PnZhbHVlID0gbV9lbnRyaWVzLmdldCgpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIo
KTsKLQotICAgIEFTU0VSVCgobV9zaXplIC0gbmV3RW5kKSA9PSBtX2RlbGV0ZWRDb3VudCk7Ci0g
ICAgbV9kZWxldGVkQ291bnQgPSAwOwotCi0gICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5Owot
ICAgIG1fc2l6ZSA9IG5ld0VuZDsKLSAgICBtX2VudHJpZXMuc2V0V2l0aG91dEJhcnJpZXIoZGVz
dGluYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVy
YXRvcj4KLWlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6cmVwbGFj
ZUJhY2tpbmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3Q2FwYWNpdHkpCi17
Ci0gICAgQVNTRVJUKCFzaG91bGRQYWNrKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKG5ld0NhcGFj
aXR5ID4gMCk7Ci0gICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fY2FwYWNpdHkpOwotICAgIG1l
bWNweShkZXN0aW5hdGlvbiwgbV9lbnRyaWVzLmdldCgpLCBzaXplb2YoRW50cnkpICogbV9zaXpl
KTsKLSAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7Ci0gICAgbV9lbnRyaWVzLnNldFdpdGhv
dXRCYXJyaWVyKGRlc3RpbmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5
cGVuYW1lIEpTSXRlcmF0b3I+Ci1pbmxpbmUgQ2hlY2tlZEJvb2xlYW4gTWFwRGF0YUltcGw8RW50
cnksIEpTSXRlcmF0b3I+OjplbnN1cmVTcGFjZUZvckFwcGVuZChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogb3duZXIpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAobV9jYXBhY2l0eSA+IG1fc2l6
ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzaXplX3QgcmVxdWlyZWRTaXplID0gc3Rk
OjptYXgobV9jYXBhY2l0eSArIChtX2NhcGFjaXR5IC8gMikgKyAxLCBzdGF0aWNfY2FzdDxpbnQz
Ml90PihtaW5pbXVtTWFwU2l6ZSkpOwotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSBudWxscHRyOwot
ICAgIERlZmVyR0MgZGVmZXIoKmV4ZWMtPmhlYXAoKSk7Ci0gICAgaWYgKCFleGVjLT5oZWFwKCkt
PnRyeUFsbG9jYXRlU3RvcmFnZShvd25lciwgcmVxdWlyZWRTaXplICogc2l6ZW9mKEVudHJ5KSwg
Jm5ld1N0b3JhZ2UpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29w
ZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgRW50cnkqIG5ld0VudHJpZXMg
PSBzdGF0aWNfY2FzdDxFbnRyeSo+KG5ld1N0b3JhZ2UpOwotICAgIGlmIChzaG91bGRQYWNrKCkp
Ci0gICAgICAgIHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVk
U2l6ZSk7Ci0gICAgZWxzZQotICAgICAgICByZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJpZXMs
IHJlcXVpcmVkU2l6ZSk7Ci0gICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIob3duZXIpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUg
SlNJdGVyYXRvcj4KLWlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAg
ICBFbnRyeSogZW50cmllcyA9IG1fZW50cmllcy5nZXQoKTsKLSAgICBpZiAoIWVudHJpZXMpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAobV9kZWxldGVkQ291bnQpIHsKLSAgICAgICAgZm9yIChp
bnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghZW50cmll
c1tpXS5rZXkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGVudHJp
ZXNbaV0udmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIEd1YXJhbnRlZWQgdGhhdCBhbGwgZmllbGRzIG9mIEVudHJ5IHR5cGUgaXMgV3Jp
dGVCYXJyaWVyPFVua25vd24+LgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhyZWludGVy
cHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZlbnRyaWVzWzBdKSwgbV9zaXplICog
KHNpemVvZihFbnRyeSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwotICAgIH0K
LQotICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVyLCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4s
IG1fZW50cmllcy5nZXQoKSwgY2FwYWNpdHlJbkJ5dGVzKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KLWlubGluZSB2b2lkIE1hcERhdGFJbXBs
PEVudHJ5LCBKU0l0ZXJhdG9yPjo6Y29weUJhY2tpbmdTdG9yZShDb3B5VmlzaXRvciYgdmlzaXRv
ciwgQ29weVRva2VuIHRva2VuKQotewotICAgIGlmICh0b2tlbiA9PSBNYXBCYWNraW5nU3RvcmVD
b3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShtX2VudHJpZXMuZ2V0KCkpKSB7
Ci0gICAgICAgIEVudHJ5KiBvbGRFbnRyaWVzID0gbV9lbnRyaWVzLmdldCgpOwotICAgICAgICBF
bnRyeSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4odmlzaXRvci5hbGxvY2F0ZU5l
d1NwYWNlKGNhcGFjaXR5SW5CeXRlcygpKSk7Ci0gICAgICAgIGlmIChzaG91bGRQYWNrKCkpCi0g
ICAgICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCBtX2NhcGFj
aXR5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVwbGFjZUJhY2tpbmdTdG9yZShuZXdF
bnRyaWVzLCBtX2NhcGFjaXR5KTsKLSAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZEVudHJpZXMs
IGNhcGFjaXR5SW5CeXRlcygpKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5
LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgotaW5saW5lIGF1dG8gTWFwRGF0YUltcGw8RW50cnksIEpT
SXRlcmF0b3I+OjpjcmVhdGVJdGVyYXRvckRhdGEoSlNJdGVyYXRvciogaXRlcmF0b3IpIC0+IEl0
ZXJhdG9yRGF0YQotewotICAgIG1faXRlcmF0b3JzLnNldChpdGVyYXRvciwgaXRlcmF0b3IpOwot
ICAgIHJldHVybiBJdGVyYXRvckRhdGEodGhpcyk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NjQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVk
ZSAiSlNNYXBJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgotI2luY2x1ZGUgIk1hcERh
dGFJbmxpbmVzLmgiCiAKICNpbmNsdWRlICJNYXBQcm90b3R5cGUubHV0LmgiCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDIwNTY0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNTZXQuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCiAjaW5jbHVkZSAiU2V0UHJvdG90eXBlLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2V0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TZXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU2NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw2IEBACiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiTG9va3VwLmgiCi0jaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKIAogI2lu
Y2x1ZGUgIlNldFByb3RvdHlwZS5sdXQuaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkocmV2aXNpb24gMjA1NjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw2IEBACiAjaW5jbHVkZSAi
TExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKLSNp
bmNsdWRlICJNYXBEYXRhLmgiCiAjaW5jbHVkZSAiTmF0aXZlU3RkRnVuY3Rpb25DZWxsLmgiCiAj
aW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288284</attachid>
            <date>2016-09-08 11:14:11 -0700</date>
            <delta_ts>2016-09-08 11:17:43 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33635</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1NjUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDE2LTA5LTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBKU01hcC9KU1NldCBvdmVyIHRvIEF1eGlsaWFyeSBNYXJrZWRTcGFjZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNzQ0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIG1vdmVz
IHRoZSBidWZmZXIgb3V0IG9mIENvcGllZFNwYWNlIGFuZCBpbnRvIEF1eGlsaWFyeSBNYXJrZWRT
cGFjZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBwdXJlbHkgbWVjaGFuaWNhbCBjaGFu
Z2UuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGhlYXAvQ29weVRva2VuLmg6CisgICAgICAgICogcnVudGltZS9IYXNoTWFw
SW1wbC5jcHA6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmNv
cHlCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwu
aDoKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0pTTWFwSXRlcmF0b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHA6CisgICAgICAgICogcnVudGlt
ZS9KU1NldEl0ZXJhdG9yLmg6CisgICAgICAgICogcnVudGltZS9NYXBCYXNlLmNwcDoKKyAgICAg
ICAgKiBydW50aW1lL01hcERhdGEuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL01hcERh
dGFJbmxpbmVzLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3Bw
OgorICAgICAgICAqIHJ1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIHJ1bnRp
bWUvU2V0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKwogMjAxNi0w
OS0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFR5cGVkIGFy
cmF5cyBzaG91bGQgdXNlIE1hcmtlZFNwYWNlIGluc3RlYWQgb2YgQ29waWVkU3BhY2UKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDU2NTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNiBAQAogLyogRW5kIFBCWEFnZ3JlZ2F0ZVRhcmdl
dCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0JCTBBNjQ0
MTUxOTQyMEE2QzYxQUQxODgyRSAvKiBNYXBEYXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTkzRDQzQ0NBMEJCRTA2RDg5QzU5NzA3IC8q
IE1hcERhdGFJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYwMTIzMzIxOTQ0RUExQjAwODQzQTBDIC8qIERGR1ZhbHVlU3RyZW5ndGgu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwMTIz
MzAxOTQ0RUExQjAwODQzQTBDIC8qIERGR1ZhbHVlU3RyZW5ndGguY3BwICovOyB9OwogCQkwRjAx
MjMzMzE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVTdHJlbmd0aC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwMTIzMzExOTQ0RUExQjAwODQzQTBD
IC8qIERGR1ZhbHVlU3RyZW5ndGguaCAqLzsgfTsKIAkJMEYwMzMyQzAxOEFERkFFMTAwNUY5NzlB
IC8qIEV4aXRpbmdKSVRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMDMzMkJGMThBREZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklUVHlwZS5j
cHAgKi87IH07CkBAIC0xNzY5LDcgKzE3NjgsNiBAQAogCQlBNzdGMTgyNTE2NDE5MkM3MDA2NDBB
NDcgLyogUGFyc2VyTW9kZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3ODRBMjYxMTFE
MTY2MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyogQVNUQnVpbGRl
ci5oICovOyB9OwogCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcx
MUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyog
TWFwRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg1RjZCQzE4QzU1M0ZFMDBGMTA2MjYg
LyogU3BpbGxSZWdpc3RlcnNNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0ZGNjQ3QTE4QzUyRTg1MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNN
b2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTc4QTk3NzQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhBOTc2QzE3OTczOEI4
MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLzsgfTsKIAkJQTc4QTk3NzUxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4QTk3NkQxNzk3MzhCODAwOURGNzQ0IC8qIERG
R0ZhaWxlZEZpbmFsaXplci5oICovOyB9OwpAQCAtMzQ0NSw3ICszNDQzLDYgQEAKIAkJNTNGQTJB
RTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMTElu
dFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1M0ZEMDREMTFEN0FCMTg3MDAzMjg3RDMgLyogV0FTTUNhbGxp
bmdDb252ZW50aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdB
U01DYWxsaW5nQ29udmVudGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
RkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXQVNNQ2FsbGluZ0NvbnZlbnRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUNhbGxpbmdDb252ZW50aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcwNyAvKiBNYXBE
YXRhSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDVEOEFEMDBFMEQwRUJFMDBG
OUM2OTIgLyogbGliZWRpdC5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliZWRpdC5k
eWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmVkaXQuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29s
dXRlPiI7IH07CiAJCTVEQUZENkNCMTQ2QjY4NjMwMEZCRUZCNCAvKiBKU0MueGNjb25maWcgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29u
ZmlnOyBwYXRoID0gSlNDLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
RERERjQ0NjE0RkVFNzIyMDBCNEZCNEQgLyogTExJbnREZXNpcmVkT2Zmc2V0cy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludERlc2lyZWRPZmZzZXRzLmg7IHBhdGggPSBM
TEludE9mZnNldHMvTExJbnREZXNpcmVkT2Zmc2V0cy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwpAQCAtNDA2MCw3ICs0MDU3LDYgQEAKIAkJQTc3RjE4MUYxNjQwODhCMjAw
NjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb2RlQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzdGMTgy
MDE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvZGVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzdG
MTgyNDE2NDE5MjU0MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFy
c2VyTW9kZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTc4NTA3RDUxN0NCQzZG
RDAwMTFGNkU3IC8qIE1hcERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFwRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4
MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFp
bGVkRmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkQx
Nzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuaDsgcGF0aCA9IGRmZy9ERkdGYWls
ZWRGaW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkUxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZpbmFsaXplci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MDY1LDggKzYwNjEsNiBAQAogCQkJ
CTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi8sCiAJCQkJQTcwMDg3Mzcx
N0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBNzAwODczODE3
Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCAqLywKLQkJCQlBNzg1MDdENTE3Q0JD
NkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovLAotCQkJCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcw
NyAvKiBNYXBEYXRhSW5saW5lcy5oICovLAogCQkJCUE3NERFRjhEMTgyRDk5MTQwMDUyMkMyMiAv
KiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQTc0REVGOEUxODJEOTkxNDAwNTIy
QzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmggKi8sCiAJCQkJQTcwMDg3M0IxN0NCRThEMzAw
QzNFNjQzIC8qIE1hcFByb3RvdHlwZS5jcHAgKi8sCkBAIC04MTA4LDkgKzgxMDIsNyBAQAogCQkJ
CTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2NDMg
LyogTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3ODUwN0Q3MTdDQkM2RkQw
MDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RjFDMENENjg1
MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwQTY0NDE1MTk0MjBBNkM2MUFEMTg4MkUgLyogTWFwRGF0YUlubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3NERFRjk0MTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRv
clByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwMDg3M0UxN0NCRThEMzAwQzNFNjQz
IC8qIE1hcFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJCOTE2QzIxNERBMDE0RTAw
Q0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAkocmV2aXNpb24gMjA1NjUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIENvcHlUb2tlbiB7Ci0gICAgTWFwQmFj
a2luZ1N0b3JlQ29weVRva2VuLAogICAgIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tl
bgogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJ
bXBsLmNwcAkocmV2aXNpb24gMjA1NjUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGFzaE1hcEltcGwuaCIKIAotI2luY2x1ZGUgIkNv
cGllZEJsb2NrSW5saW5lcy5oIgotI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTcwLDI0ICs2OSw5
IEBAIHZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2gKIAogICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2hlYWQpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX3RhaWwpOwotCi0gICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09iamVjdCwgTWFw
QmFja2luZ1N0b3JlQ29weVRva2VuLCB0aGlzT2JqZWN0LT5tX2J1ZmZlci5nZXQoKSwgdGhpc09i
amVjdC0+YnVmZmVyU2l6ZUluQnl0ZXMoKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBIYXNo
TWFwQnVja2V0Pgotdm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6Y29weUJhY2tpbmdT
dG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4p
Ci17Ci0gICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7Ci0K
LSAgICBIYXNoTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwp
OwotICAgIGlmICh0b2tlbiA9PSBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4gJiYgdmlzaXRvci5j
aGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX2J1ZmZlci5nZXQoKSkpIHsKLSAgICAgICAg
SGFzaE1hcEJ1ZmZlclR5cGUqIG9sZEJ1ZmZlciA9IHRoaXNPYmplY3QtPm1fYnVmZmVyLmdldCgp
OwotICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZUluQnl0ZXMgPSB0aGlzT2JqZWN0LT5idWZmZXJT
aXplSW5CeXRlcygpOwotICAgICAgICBIYXNoTWFwQnVmZmVyVHlwZSogbmV3QnVmZmVyID0gc3Rh
dGljX2Nhc3Q8SGFzaE1hcEJ1ZmZlclR5cGUqPih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UoYnVm
ZmVyU2l6ZUluQnl0ZXMpKTsKLSAgICAgICAgbWVtY3B5KG5ld0J1ZmZlciwgb2xkQnVmZmVyLCBi
dWZmZXJTaXplSW5CeXRlcyk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fYnVmZmVyLnNldFdpdGhv
dXRCYXJyaWVyKG5ld0J1ZmZlcik7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRCdWZmZXIs
IGJ1ZmZlclNpemVJbkJ5dGVzKTsKLSAgICB9CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPm1f
YnVmZmVyKQorICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+bV9idWZm
ZXIuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjA1NjUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNTEsOSArMTUxLDggQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBzaXpl
X3QgYWxsb2NhdGlvblNpemUgPSBIYXNoTWFwQnVmZmVyOjphbGxvY2F0aW9uU2l6ZShjYXBhY2l0
eSk7Ci0gICAgICAgIHZvaWQqIGRhdGEgPSBudWxscHRyOwotICAgICAgICBEZWZlckdDRm9yQVdo
aWxlIGRlZmVyKHZtLmhlYXApOwotICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9y
YWdlKG93bmVyLCBhbGxvY2F0aW9uU2l6ZSwgJmRhdGEpKSB7CisgICAgICAgIHZvaWQqIGRhdGEg
PSB2bS5oZWFwLnRyeUFsbG9jYXRlQXV4aWxpYXJ5KG93bmVyLCBhbGxvY2F0aW9uU2l6ZSk7Cisg
ICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CkBAIC0y
NTksNyArMjU4LDYgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2lu
Z1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKIAogICAgIEhhc2hNYXBJ
bXBsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQpAQCAtNTE1LDcgKzUxMyw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0ZUJhcnJpZXI8
SGFzaE1hcEJ1Y2tldFR5cGU+IG1faGVhZDsKICAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tl
dFR5cGU+IG1fdGFpbDsKLSAgICBDb3B5QmFycmllcjxIYXNoTWFwQnVmZmVyVHlwZT4gbV9idWZm
ZXI7CisgICAgQXV4aWxpYXJ5QmFycmllcjxIYXNoTWFwQnVmZmVyVHlwZSo+IG1fYnVmZmVyOwog
ICAgIHVpbnQzMl90IG1fc2l6ZTsKICAgICB1aW50MzJfdCBtX2RlbGV0ZUNvdW50OwogICAgIHVp
bnQzMl90IG1fY2FwYWNpdHk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjA1NjUyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01hcC5o
IgotI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCShyZXZp
c2lvbiAyMDU2NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJJdGVyYXRp
b25LaW5kLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2lu
Y2x1ZGUgIk1hcERhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDU2
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTU2V0LmgiCi0jaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0
SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NldEl0ZXJhdG9yLmgJKHJldmlzaW9uIDIwNTY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsNiBA
QAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKIAotI2luY2x1ZGUg
Ik1hcERhdGEuaCIKLQogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTU2V0SXRlcmF0b3IgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBCYXNlLmNwcAkocmV2aXNpb24gMjA1NjUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXBCYXNlLmgiCiAKLSNpbmNsdWRlICJT
bG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCShy
ZXZpc2lvbiAyMDU2NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRh
LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBNYXBEYXRhX2gKLSNkZWZpbmUgTWFwRGF0YV9oCi0KLSNpbmNsdWRlICJDb3B5
QmFycmllci5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIldlYWtHQ01hcElubGlu
ZXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBWTTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+Ci1jbGFzcyBNYXBE
YXRhSW1wbCB7Ci1wdWJsaWM6Ci0gICAgZW51bSA6IGludDMyX3QgewotICAgICAgICBtaW5pbXVt
TWFwU2l6ZSA9IDgKLSAgICB9OwotCi0gICAgY2xhc3MgSXRlcmF0b3JEYXRhIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBNYXBEYXRhSW1wbDsKLQotICAgICAgICBJdGVyYXRv
ckRhdGEoY29uc3QgTWFwRGF0YUltcGwqKTsKLSAgICAgICAgYm9vbCBuZXh0KFdURjo6S2V5VmFs
dWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+Jik7Ci0KLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgd2hpbGUgcGFja2luZyBhIG1hcCdzIGJhY2tpbmcgc3RvcmUuIFRoZQotICAgICAg
ICAvLyBwYXNzZWQtaW4gaW5kZXggaXMgdGhlIG5ldyBpbmRleCB0aGUgZW50cnkgd291bGQgaGF2
ZSBhZnRlciBwYWNraW5nLgotICAgICAgICB2b2lkIGRpZFJlbW92ZUVudHJ5KGludDMyX3QgcGFj
a2VkSW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0ZpbmlzaGVkKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAobV9pbmRleCA8PSBwYWNrZWRJ
bmRleCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIC0tbV9pbmRleDsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZGlkUmVtb3ZlQWxsRW50cmllcygpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChpc0ZpbmlzaGVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgbV9pbmRleCA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGZp
bmlzaCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1faW5kZXggPSAtMTsKLSAgICAgICAgfQot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBlbnN1cmVTbG90KCkgY29uc3Q7Ci0gICAgICAg
IGJvb2wgaXNGaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggPT0gLTE7IH0KLSAgICAg
ICAgaW50MzJfdCByZWZyZXNoQ3Vyc29yKCkgY29uc3Q7Ci0KLSAgICAgICAgY29uc3QgTWFwRGF0
YUltcGwqIG1fbWFwRGF0YTsKLSAgICAgICAgbXV0YWJsZSBpbnQzMl90IG1faW5kZXg7Ci0gICAg
fTsKLSAgICBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSXRlcmF0b3JE
YXRhKTsKLQotICAgIHN0cnVjdCBLZXlUeXBlIHsKLSAgICAgICAgQUxXQVlTX0lOTElORSBLZXlU
eXBlKCkgeyB9Ci0gICAgICAgIEtleVR5cGUoSlNWYWx1ZSk7Ci0gICAgICAgIEpTVmFsdWUgdmFs
dWU7Ci0gICAgfTsKLQotICAgIE1hcERhdGFJbXBsKFZNJiwgSlNDZWxsKiBvd25lcik7Ci0KLSAg
ICB2b2lkIHNldChFeGVjU3RhdGUqLCBKU0NlbGwqIG93bmVyLCBLZXlUeXBlLCBKU1ZhbHVlKTsK
LSAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBLZXlUeXBlKTsKLSAgICBib29sIHJlbW92ZShF
eGVjU3RhdGUqLCBLZXlUeXBlKTsKLSAgICBib29sIGNvbnRhaW5zKEV4ZWNTdGF0ZSosIEtleVR5
cGUpOwotICAgIHNpemVfdCBzaXplKEV4ZWNTdGF0ZSopIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZSAt
IG1fZGVsZXRlZENvdW50OyB9Ci0KLSAgICBJdGVyYXRvckRhdGEgY3JlYXRlSXRlcmF0b3JEYXRh
KEpTSXRlcmF0b3IqKTsKLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgY29weUJhY2tpbmdT
dG9yZShDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7Ci0KLSAgICBzaXplX3QgY2FwYWNpdHlJbkJ5
dGVzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhY2l0eSAqIHNpemVvZihFbnRyeSk7IH0KLQotcHJp
dmF0ZToKLSAgICB0eXBlZGVmIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50
MzJfdD4gSW5kZXhUcmFpdHM7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8SlNDZWxsKiwgaW50MzJf
dCwgdHlwZW5hbWUgV1RGOjpEZWZhdWx0SGFzaDxKU0NlbGwqPjo6SGFzaCwgV1RGOjpIYXNoVHJh
aXRzPEpTQ2VsbCo+LCBJbmRleFRyYWl0cz4gQ2VsbEtleWVkTWFwOwotICAgIHR5cGVkZWYgSGFz
aE1hcDxFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVk
SlNWYWx1ZUhhc2hUcmFpdHMsIEluZGV4VHJhaXRzPiBWYWx1ZUtleWVkTWFwOwotICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgaW50MzJfdCwgdHlwZW5hbWUgV1RGOjpEZWZhdWx0SGFz
aDxTdHJpbmdJbXBsKj46Okhhc2gsIFdURjo6SGFzaFRyYWl0czxTdHJpbmdJbXBsKj4sIEluZGV4
VHJhaXRzPiBTdHJpbmdLZXllZE1hcDsKLQotICAgIEFMV0FZU19JTkxJTkUgRW50cnkqIGZpbmQo
RXhlY1N0YXRlKiwgS2V5VHlwZSk7Ci0gICAgQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNT
dGF0ZSosIEpTQ2VsbCogb3duZXIsIEtleVR5cGUpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBN
YXAsIHR5cGVuYW1lIEtleT4gQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNTdGF0ZSosIEpT
Q2VsbCogb3duZXIsIE1hcCYsIEtleSwgS2V5VHlwZSk7Ci0KLSAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgc2hvdWxkUGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZENvdW50OyB9Ci0gICAgQ2hl
Y2tlZEJvb2xlYW4gZW5zdXJlU3BhY2VGb3JBcHBlbmQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvd25l
cik7Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUo
RW50cnkqIGRlc3RpbmF0aW9uLCBpbnQzMl90IG5ld1NpemUpOwotICAgIEFMV0FZU19JTkxJTkUg
dm9pZCByZXBsYWNlQmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdT
aXplKTsKLQotICAgIENlbGxLZXllZE1hcCBtX2NlbGxLZXllZFRhYmxlOwotICAgIFZhbHVlS2V5
ZWRNYXAgbV92YWx1ZUtleWVkVGFibGU7Ci0gICAgU3RyaW5nS2V5ZWRNYXAgbV9zdHJpbmdLZXll
ZFRhYmxlOwotICAgIGludDMyX3QgbV9jYXBhY2l0eTsKLSAgICBpbnQzMl90IG1fc2l6ZTsKLSAg
ICBpbnQzMl90IG1fZGVsZXRlZENvdW50OwotICAgIEpTQ2VsbCogbV9vd25lcjsKLSAgICBDb3B5
QmFycmllcjxFbnRyeT4gbV9lbnRyaWVzOwotICAgIFdlYWtHQ01hcDxKU0l0ZXJhdG9yKiwgSlNJ
dGVyYXRvcj4gbV9pdGVyYXRvcnM7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlw
ZW5hbWUgSlNJdGVyYXRvcj4KLUFMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnksIEpTSXRl
cmF0b3I+OjpNYXBEYXRhSW1wbChWTSYgdm0sIEpTQ2VsbCogb3duZXIpCi0gICAgOiBtX2NhcGFj
aXR5KDApCi0gICAgLCBtX3NpemUoMCkKLSAgICAsIG1fZGVsZXRlZENvdW50KDApCi0gICAgLCBt
X293bmVyKG93bmVyKQotICAgICwgbV9pdGVyYXRvcnModm0pCi17Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgotQUxXQVlTX0lOTElORSBNYXBEYXRh
SW1wbDxFbnRyeSwgSlNJdGVyYXRvcj46OktleVR5cGU6OktleVR5cGUoSlNWYWx1ZSB2KQotewot
ICAgIGlmICghdi5pc0RvdWJsZSgpKSB7Ci0gICAgICAgIHZhbHVlID0gdjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBkb3VibGUgZCA9IHYuYXNEb3VibGUoKTsKLSAgICBpZiAoc3RkOjpp
c25hbihkKSkgewotICAgICAgICB2YWx1ZSA9IHY7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4odi5hc0RvdWJsZSgpKTsKLSAgICBpZiAoaSAh
PSBkKQotICAgICAgICB2YWx1ZSA9IHY7Ci0gICAgZWxzZQotICAgICAgICB2YWx1ZSA9IGpzTnVt
YmVyKGkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRv
cj4KLUFMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjpJdGVyYXRv
ckRhdGE6Okl0ZXJhdG9yRGF0YShjb25zdCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvcj4q
IG1hcERhdGEpCi0gICAgOiBtX21hcERhdGEobWFwRGF0YSkKLSAgICAsIG1faW5kZXgoMCkKLXsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+Ci1BTFdB
WVNfSU5MSU5FIGJvb2wgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjpJdGVyYXRvckRh
dGE6Om5leHQoV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4mIHBhaXIpCi17Ci0g
ICAgaWYgKCFlbnN1cmVTbG90KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBFbnRyeSog
ZW50cnkgPSAmbV9tYXBEYXRhLT5tX2VudHJpZXMuZ2V0KClbbV9pbmRleF07Ci0gICAgcGFpciA9
IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+KGVudHJ5LT5rZXkoKS5nZXQoKSwg
ZW50cnktPnZhbHVlKCkuZ2V0KCkpOwotICAgIG1faW5kZXggKz0gMTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotLy8gVGhpcyBpcyBhIGJpdCBnbmFybHkuIFdlIHVzZSBhbiBpbmRleCBvZiAtMSB0
byBpbmRpY2F0ZSB0aGUKLS8vIGZpbmlzaGVkIHN0YXRlLiBCeSBjYXN0aW5nIHRvIHVuc2lnbmVk
IHdlIGNhbiBpbW1lZGlhdGVseQotLy8gdGVzdCBpZiBib3RoIGl0ZXJhdG9ycyBhcmUgYXQgdGhl
IGVuZCBvZiB0aGVpciBpdGVyYXRpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5h
bWUgSlNJdGVyYXRvcj4KLUFMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJ
dGVyYXRvcj46Okl0ZXJhdG9yRGF0YTo6ZW5zdXJlU2xvdCgpIGNvbnN0Ci17Ci0gICAgaW50MzJf
dCBpbmRleCA9IHJlZnJlc2hDdXJzb3IoKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90
PihpbmRleCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbWFwRGF0YS0+bV9zaXplKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+Ci1BTFdBWVNfSU5M
SU5FIGludDMyX3QgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjpJdGVyYXRvckRhdGE6
OnJlZnJlc2hDdXJzb3IoKSBjb25zdAotewotICAgIGlmIChpc0ZpbmlzaGVkKCkpCi0gICAgICAg
IHJldHVybiBtX2luZGV4OwotCi0gICAgRW50cnkqIGVudHJpZXMgPSBtX21hcERhdGEtPm1fZW50
cmllcy5nZXQoKTsKLSAgICBzaXplX3QgZW5kID0gbV9tYXBEYXRhLT5tX3NpemU7Ci0gICAgd2hp
bGUgKHN0YXRpY19jYXN0PHNpemVfdD4obV9pbmRleCkgPCBlbmQgJiYgIWVudHJpZXNbbV9pbmRl
eF0ua2V5KCkpCi0gICAgICAgIG1faW5kZXgrKzsKLSAgICByZXR1cm4gbV9pbmRleDsKLX0KLQot
fQotCi0jZW5kaWYgLyogIWRlZmluZWQoTWFwRGF0YV9oKSAqLwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCShyZXZpc2lvbiAyMDU2NTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCShub25l
eGlzdGVudCkKQEAgLTEsMjcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1
IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJDb3BpZWRBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIK
LSNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVz
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5h
bWUgSlNJdGVyYXRvcj4KLWlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9y
Pjo6Y2xlYXIoKQotewotICAgIG1fY2VsbEtleWVkVGFibGUuY2xlYXIoKTsKLSAgICBtX3ZhbHVl
S2V5ZWRUYWJsZS5jbGVhcigpOwotICAgIG1fc3RyaW5nS2V5ZWRUYWJsZS5jbGVhcigpOwotICAg
IG1fY2FwYWNpdHkgPSAwOwotICAgIG1fc2l6ZSA9IDA7Ci0gICAgbV9kZWxldGVkQ291bnQgPSAw
OwotICAgIG1fZW50cmllcy5jbGVhcigpOwotICAgIG1faXRlcmF0b3JzLmZvckVhY2goW10oSlNJ
dGVyYXRvciogaXRlcmF0b3IsIEpTSXRlcmF0b3IqKSB7Ci0gICAgICAgIGl0ZXJhdG9yLT5pdGVy
YXRvckRhdGEoKS0+ZGlkUmVtb3ZlQWxsRW50cmllcygpOwotICAgIH0pOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KLWlubGluZSBFbnRyeSogTWFw
RGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjpmaW5kKEV4ZWNTdGF0ZSogZXhlYywgS2V5VHlw
ZSBrZXkpCi17Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGF1dG8g
aXRlciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5maW5kKGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVl
KGV4ZWMpLmltcGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5l
bmQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gJm1fZW50cmllcy5n
ZXQoKVtpdGVyLT52YWx1ZV07Ci0gICAgfQotICAgIGlmIChrZXkudmFsdWUuaXNDZWxsKCkpIHsK
LSAgICAgICAgYXV0byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtleS52YWx1ZS5hc0Nl
bGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fY2VsbEtleWVkVGFibGUuZW5kKCkpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KClbaXRlci0+
dmFsdWVdOwotICAgIH0KLQotICAgIGF1dG8gaXRlciA9IG1fdmFsdWVLZXllZFRhYmxlLmZpbmQo
SlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSkpOwotICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXll
ZFRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gJm1fZW50cmllcy5n
ZXQoKVtpdGVyLT52YWx1ZV07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFt
ZSBKU0l0ZXJhdG9yPgotaW5saW5lIGJvb2wgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+
Ojpjb250YWlucyhFeGVjU3RhdGUqIGV4ZWMsIEtleVR5cGUga2V5KQotewotICAgIHJldHVybiBm
aW5kKGV4ZWMsIGtleSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBK
U0l0ZXJhdG9yPgotdGVtcGxhdGUgPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5PgotaW5saW5l
IEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvcj46OmFkZChFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogb3duZXIsIE1hcCYgbWFwLCBLZXkga2V5LCBLZXlUeXBlIGtleVZhbHVlKQot
ewotICAgIHR5cGVuYW1lIE1hcDo6aXRlcmF0b3IgbG9jYXRpb24gPSBtYXAuZmluZChrZXkpOwot
ICAgIGlmIChsb2NhdGlvbiAhPSBtYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAmbV9lbnRyaWVz
LmdldCgpW2xvY2F0aW9uLT52YWx1ZV07Ci0KLSAgICBpZiAoIWVuc3VyZVNwYWNlRm9yQXBwZW5k
KGV4ZWMsIG93bmVyKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IG1h
cC5hZGQoa2V5LCBtX3NpemUpOwotICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5
KTsKLSAgICBFbnRyeSogZW50cnkgPSAmbV9lbnRyaWVzLmdldCgpW21fc2l6ZSsrXTsKLSAgICBu
ZXcgKGVudHJ5KSBFbnRyeSgpOwotICAgIGVudHJ5LT5zZXRLZXkoZXhlYy0+dm0oKSwgb3duZXIs
IGtleVZhbHVlLnZhbHVlKTsKLSAgICByZXR1cm4gZW50cnk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgotaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8
RW50cnksIEpTSXRlcmF0b3I+OjpzZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyLCBL
ZXlUeXBlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBFbnRyeSogbG9jYXRpb24gPSBhZGQo
ZXhlYywgb3duZXIsIGtleSk7Ci0gICAgaWYgKCFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwot
ICAgIGxvY2F0aW9uLT5zZXRWYWx1ZShleGVjLT52bSgpLCBvd25lciwgdmFsdWUpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KLWlubGluZSBFbnRy
eSogTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjphZGQoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIG93bmVyLCBLZXlUeXBlIGtleSkKLXsKLSAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5n
KCkpCi0gICAgICAgIHJldHVybiBhZGQoZXhlYywgb3duZXIsIG1fc3RyaW5nS2V5ZWRUYWJsZSwg
YXNTdHJpbmcoa2V5LnZhbHVlKS0+dmFsdWUoZXhlYykuaW1wbCgpLCBrZXkpOwotICAgIGlmIChr
ZXkudmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBhZGQoZXhlYywgb3duZXIsIG1fY2Vs
bEtleWVkVGFibGUsIGtleS52YWx1ZS5hc0NlbGwoKSwga2V5KTsKLSAgICByZXR1cm4gYWRkKGV4
ZWMsIG93bmVyLCBtX3ZhbHVlS2V5ZWRUYWJsZSwgSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSks
IGtleSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9y
PgotaW5saW5lIEpTVmFsdWUgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjpnZXQoRXhl
Y1N0YXRlKiBleGVjLCBLZXlUeXBlIGtleSkKLXsKLSAgICBpZiAoRW50cnkqIGVudHJ5ID0gZmlu
ZChleGVjLCBrZXkpKQotICAgICAgICByZXR1cm4gZW50cnktPnZhbHVlKCkuZ2V0KCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWUoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1l
IEpTSXRlcmF0b3I+Ci1pbmxpbmUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvcj46
OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIEtleVR5cGUga2V5KQotewotICAgIGludDMyX3QgbG9j
YXRpb247Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGF1dG8gaXRl
ciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5maW5kKGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGV4
ZWMpLmltcGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52
YWx1ZTsKLSAgICAgICAgbV9zdHJpbmdLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKLSAgICB9IGVs
c2UgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX2NlbGxL
ZXllZFRhYmxlLmZpbmQoa2V5LnZhbHVlLmFzQ2VsbCgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0g
bV9jZWxsS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKLSAgICAgICAgbV9jZWxsS2V5ZWRUYWJsZS5yZW1v
dmUoaXRlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBpdGVyID0gbV92YWx1ZUtleWVk
VGFibGUuZmluZChKU1ZhbHVlOjplbmNvZGUoa2V5LnZhbHVlKSk7Ci0gICAgICAgIGlmIChpdGVy
ID09IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOwotICAgICAgICBtX3ZhbHVlS2V5ZWRUYWJs
ZS5yZW1vdmUoaXRlcik7Ci0gICAgfQotICAgIG1fZW50cmllcy5nZXQoKVtsb2NhdGlvbl0uY2xl
YXIoKTsKLSAgICBtX2RlbGV0ZWRDb3VudCsrOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KLWlubGluZSB2b2lkIE1h
cERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6cmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUo
RW50cnkqIGRlc3RpbmF0aW9uLCBpbnQzMl90IG5ld0NhcGFjaXR5KQotewotICAgIEFTU0VSVChz
aG91bGRQYWNrKCkpOwotICAgIGludDMyX3QgbmV3RW5kID0gMDsKLSAgICBSRUxFQVNFX0FTU0VS
VChuZXdDYXBhY2l0eSA+IDApOwotICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsg
aSsrKSB7Ci0gICAgICAgIEVudHJ5JiBlbnRyeSA9IG1fZW50cmllcy5nZXQoKVtpXTsKLSAgICAg
ICAgaWYgKCFlbnRyeS5rZXkoKSkgewotICAgICAgICAgICAgbV9pdGVyYXRvcnMuZm9yRWFjaChb
bmV3RW5kXShKU0l0ZXJhdG9yKiBpdGVyYXRvciwgSlNJdGVyYXRvciopIHsKLSAgICAgICAgICAg
ICAgICBpdGVyYXRvci0+aXRlcmF0b3JEYXRhKCktPmRpZFJlbW92ZUVudHJ5KG5ld0VuZCk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IEFTU0VSVChuZXdFbmQgPCBuZXdDYXBhY2l0eSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uW25ld0Vu
ZF0gPSBlbnRyeTsKLQotICAgICAgICAvLyBXZSBvdmVyd3JpdGUgdGhlIG9sZCBlbnRyeSB3aXRo
IGEgZm9yd2FyZGluZyBpbmRleCBmb3IgdGhlIG5ldyBlbnRyeSwKLSAgICAgICAgLy8gc28gdGhh
dCB3ZSBjYW4gZml4IHVwIG91ciBoYXNoIHRhYmxlcyBiZWxvdyB3aXRob3V0IGRvaW5nIGFkZGl0
aW9uYWwKLSAgICAgICAgLy8gaGFzaCBsb29rdXBzCi0gICAgICAgIGVudHJ5LnNldEtleVdpdGhv
dXRXcml0ZUJhcnJpZXIoanNOdW1iZXIobmV3RW5kKSk7Ci0gICAgICAgIG5ld0VuZCsrOwotICAg
IH0KLQotICAgIC8vIEZpeHVwIGZvciB0aGUgaGFzaG1hcHMKLSAgICBmb3IgKGF1dG8gcHRyID0g
bV92YWx1ZUtleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgp
OyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllcy5nZXQoKVtwdHItPnZhbHVl
XS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7Ci0gICAgZm9yIChhdXRvIHB0ciA9IG1fY2VsbEtleWVk
VGFibGUuYmVnaW4oKTsgcHRyICE9IG1fY2VsbEtleWVkVGFibGUuZW5kKCk7ICsrcHRyKQotICAg
ICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldCgpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgp
LmFzSW50MzIoKTsKLSAgICBmb3IgKGF1dG8gcHRyID0gbV9zdHJpbmdLZXllZFRhYmxlLmJlZ2lu
KCk7IHB0ciAhPSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHIt
PnZhbHVlID0gbV9lbnRyaWVzLmdldCgpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIo
KTsKLQotICAgIEFTU0VSVCgobV9zaXplIC0gbmV3RW5kKSA9PSBtX2RlbGV0ZWRDb3VudCk7Ci0g
ICAgbV9kZWxldGVkQ291bnQgPSAwOwotCi0gICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5Owot
ICAgIG1fc2l6ZSA9IG5ld0VuZDsKLSAgICBtX2VudHJpZXMuc2V0V2l0aG91dEJhcnJpZXIoZGVz
dGluYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVy
YXRvcj4KLWlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6cmVwbGFj
ZUJhY2tpbmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3Q2FwYWNpdHkpCi17
Ci0gICAgQVNTRVJUKCFzaG91bGRQYWNrKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKG5ld0NhcGFj
aXR5ID4gMCk7Ci0gICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fY2FwYWNpdHkpOwotICAgIG1l
bWNweShkZXN0aW5hdGlvbiwgbV9lbnRyaWVzLmdldCgpLCBzaXplb2YoRW50cnkpICogbV9zaXpl
KTsKLSAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7Ci0gICAgbV9lbnRyaWVzLnNldFdpdGhv
dXRCYXJyaWVyKGRlc3RpbmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5
cGVuYW1lIEpTSXRlcmF0b3I+Ci1pbmxpbmUgQ2hlY2tlZEJvb2xlYW4gTWFwRGF0YUltcGw8RW50
cnksIEpTSXRlcmF0b3I+OjplbnN1cmVTcGFjZUZvckFwcGVuZChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogb3duZXIpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAobV9jYXBhY2l0eSA+IG1fc2l6
ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzaXplX3QgcmVxdWlyZWRTaXplID0gc3Rk
OjptYXgobV9jYXBhY2l0eSArIChtX2NhcGFjaXR5IC8gMikgKyAxLCBzdGF0aWNfY2FzdDxpbnQz
Ml90PihtaW5pbXVtTWFwU2l6ZSkpOwotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSBudWxscHRyOwot
ICAgIERlZmVyR0MgZGVmZXIoKmV4ZWMtPmhlYXAoKSk7Ci0gICAgaWYgKCFleGVjLT5oZWFwKCkt
PnRyeUFsbG9jYXRlU3RvcmFnZShvd25lciwgcmVxdWlyZWRTaXplICogc2l6ZW9mKEVudHJ5KSwg
Jm5ld1N0b3JhZ2UpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29w
ZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgRW50cnkqIG5ld0VudHJpZXMg
PSBzdGF0aWNfY2FzdDxFbnRyeSo+KG5ld1N0b3JhZ2UpOwotICAgIGlmIChzaG91bGRQYWNrKCkp
Ci0gICAgICAgIHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVk
U2l6ZSk7Ci0gICAgZWxzZQotICAgICAgICByZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJpZXMs
IHJlcXVpcmVkU2l6ZSk7Ci0gICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIob3duZXIpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUg
SlNJdGVyYXRvcj4KLWlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAg
ICBFbnRyeSogZW50cmllcyA9IG1fZW50cmllcy5nZXQoKTsKLSAgICBpZiAoIWVudHJpZXMpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAobV9kZWxldGVkQ291bnQpIHsKLSAgICAgICAgZm9yIChp
bnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghZW50cmll
c1tpXS5rZXkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGVudHJp
ZXNbaV0udmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIEd1YXJhbnRlZWQgdGhhdCBhbGwgZmllbGRzIG9mIEVudHJ5IHR5cGUgaXMgV3Jp
dGVCYXJyaWVyPFVua25vd24+LgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhyZWludGVy
cHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZlbnRyaWVzWzBdKSwgbV9zaXplICog
KHNpemVvZihFbnRyeSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwotICAgIH0K
LQotICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVyLCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4s
IG1fZW50cmllcy5nZXQoKSwgY2FwYWNpdHlJbkJ5dGVzKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KLWlubGluZSB2b2lkIE1hcERhdGFJbXBs
PEVudHJ5LCBKU0l0ZXJhdG9yPjo6Y29weUJhY2tpbmdTdG9yZShDb3B5VmlzaXRvciYgdmlzaXRv
ciwgQ29weVRva2VuIHRva2VuKQotewotICAgIGlmICh0b2tlbiA9PSBNYXBCYWNraW5nU3RvcmVD
b3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShtX2VudHJpZXMuZ2V0KCkpKSB7
Ci0gICAgICAgIEVudHJ5KiBvbGRFbnRyaWVzID0gbV9lbnRyaWVzLmdldCgpOwotICAgICAgICBF
bnRyeSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4odmlzaXRvci5hbGxvY2F0ZU5l
d1NwYWNlKGNhcGFjaXR5SW5CeXRlcygpKSk7Ci0gICAgICAgIGlmIChzaG91bGRQYWNrKCkpCi0g
ICAgICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCBtX2NhcGFj
aXR5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVwbGFjZUJhY2tpbmdTdG9yZShuZXdF
bnRyaWVzLCBtX2NhcGFjaXR5KTsKLSAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZEVudHJpZXMs
IGNhcGFjaXR5SW5CeXRlcygpKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5
LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgotaW5saW5lIGF1dG8gTWFwRGF0YUltcGw8RW50cnksIEpT
SXRlcmF0b3I+OjpjcmVhdGVJdGVyYXRvckRhdGEoSlNJdGVyYXRvciogaXRlcmF0b3IpIC0+IEl0
ZXJhdG9yRGF0YQotewotICAgIG1faXRlcmF0b3JzLnNldChpdGVyYXRvciwgaXRlcmF0b3IpOwot
ICAgIHJldHVybiBJdGVyYXRvckRhdGEodGhpcyk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NjUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVk
ZSAiSlNNYXBJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgotI2luY2x1ZGUgIk1hcERh
dGFJbmxpbmVzLmgiCiAKICNpbmNsdWRlICJNYXBQcm90b3R5cGUubHV0LmgiCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDIwNTY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNTZXQuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCiAjaW5jbHVkZSAiU2V0UHJvdG90eXBlLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2V0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TZXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU2NTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw2IEBACiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiTG9va3VwLmgiCi0jaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKIAogI2lu
Y2x1ZGUgIlNldFByb3RvdHlwZS5sdXQuaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkocmV2aXNpb24gMjA1NjUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw2IEBACiAjaW5jbHVkZSAi
TExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKLSNp
bmNsdWRlICJNYXBEYXRhLmgiCiAjaW5jbHVkZSAiTmF0aXZlU3RkRnVuY3Rpb25DZWxsLmgiCiAj
aW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwNTY1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA5LTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgTW92ZSBKU01hcC9KU1NldCBvdmVyIHRvIEF1eGlsaWFyeSBNYXJr
ZWRTcGFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYxNzQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICog
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKwogMjAxNi0wOS0wOCAgWXVz
dWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBTY3JpcHRSdW5u
ZXIgc2hvdWxkIGJlIGRyaXZlbiBieSBQZW5kaW5nU2NyaXB0IHJhdGhlciB0aGFuIFNjcmlwdEVs
ZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjA1NjUyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzAsOCArNzAsNiBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTZXQuaD4KICNpbmNsdWRlIDxydW50
aW1lL0pTU2V0SXRlcmF0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4K
LSNpbmNsdWRlIDxydW50aW1lL01hcERhdGEuaD4KLSNpbmNsdWRlIDxydW50aW1lL01hcERhdGFJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL1JlZ0V4
cC5oPgo=
</data>
<flag name="review"
          id="311644"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>