<?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>170569</bug_id>
          
          <creation_ts>2017-04-06 15:01:13 -0700</creation_ts>
          <short_desc>Linear scan should run liveness only once</short_desc>
          <delta_ts>2017-04-06 17:11:39 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</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>1295068</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-06 15:01:13 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295069</commentid>
    <comment_count>1</comment_count>
      <attachid>306430</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-06 15:01:50 -0700</bug_when>
    <thetext>Created attachment 306430
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295113</commentid>
    <comment_count>2</comment_count>
      <attachid>306437</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-06 16:50:27 -0700</bug_when>
    <thetext>Created attachment 306437
the patch

another 10% -O1 compile time speed-up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295126</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-06 17:06:57 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #2)
&gt; Created attachment 306437 [details]
&gt; the patch
&gt; 
&gt; another 10% -O1 compile time speed-up

Actually, further testing shows that it&apos;s only a 6% speed-up.  Still good though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295127</commentid>
    <comment_count>4</comment_count>
      <attachid>306437</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-06 17:09:33 -0700</bug_when>
    <thetext>Comment on attachment 306437
the patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295128</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-06 17:11:39 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/215071/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306430</attachid>
            <date>2017-04-06 15:01:50 -0700</date>
            <delta_ts>2017-04-06 16:50:27 -0700</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37045</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTUwNTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw2IEBACiAJCTBGMTVGMTVGMTRCN0E3
M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25T
bG93UGF0aHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjE3MjVGRjFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3MjVGRTFCNDg3
MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgKi87IH07CiAJCTBGMTgyOTY5MUU5
MkVFNTQwMDVCMUVBOCAvKiBBaXJMaXZlbmVzc0FkYXB0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTgyOTY4MUU5MkVFNTEwMDVCMUVBOCAvKiBB
aXJMaXZlbmVzc0FkYXB0ZXIuaCAqLzsgfTsKLQkJMEYxODI5NkIxRTkyRjZEQzAwNUIxRUE4IC8q
IEFpckxpdmVuZXNzQ29uc3RyYWludHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTgyOTZBMUU5MkY2REEwMDVCMUVBOCAvKiBBaXJMaXZlbmVzc0Nv
bnN0cmFpbnRzLmggKi87IH07CiAJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CiAJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5
RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgfTsKIAkJMEYxOTBDQUMxODlEODJG
NjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8q
IFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovOyB9OwpAQCAtNDU1LDYgKzQ1NCw3IEBACiAJ
CTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVBNjI4MjE4OEM5OEQ0MDA3MkM5
REYgLyogRlRMVmFsdWVSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNUFFMkM0MURGNEYyODAwMDY2RUZFMSAvKiBWTUlubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTBCQjNBMUI3
Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVCNEEzMzFDODRGMEQ2MDBGMUIxN0UgLyogU2xvd1Bh
dGhSZXR1cm5UeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjVCNEEzMjFDODRGMEQ2MDBGMUIxN0UgLyogU2xvd1BhdGhSZXR1cm5UeXBlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY1Q0Y5ODEx
RTk2RjE3RjAwQzE4NjkyIC8qIEFpclRtcE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODAxRTk2RjE3RDAwQzE4NjkyIC8qIEFpclRtcE1h
cC5oICovOyB9OwogCQkwRjVEMDg1RDFCOENGOTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVEMDg1
QzFCOENGOTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi87IH07CiAJCTBGNUVGOTFF
MTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRo
dW5rcy5jcHAgKi87IH07CiAJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAvKiBKSVRUaHVua3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFD
MTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjY1OSw3ICsyNjU5LDYgQEAKIAkJMEYxNUYxNUQx
NEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb21tb25TbG93UGF0aHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYxNzI1RkUxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWluaWZpZWRHcmFwaC5jcHA7
IHBhdGggPSBkZmcvREZHTWluaWZpZWRHcmFwaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMTgyOTY4MUU5MkVFNTEwMDVCMUVBOCAvKiBBaXJMaXZlbmVzc0FkYXB0ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5lc3NBZGFwdGVyLmg7IHBh
dGggPSBiMy9haXIvQWlyTGl2ZW5lc3NBZGFwdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGMTgyOTZBMUU5MkY2REEwMDVCMUVBOCAvKiBBaXJMaXZlbmVzc0NvbnN0cmFpbnRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxpdmVuZXNzQ29uc3RyYWlu
dHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJMaXZlbmVzc0NvbnN0cmFpbnRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgcGF0aCA9IGRmZy9ERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjE4RDNDRTFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE5MENBQTE4OUQ4MkY2MDAw
QUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcDsgcGF0aCA9IHByb2Zp
bGVyL1Byb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjk5MSw2ICsyOTkwLDcgQEAKIAkJMEY1QTYyODExODhDOThENDAwNzJDOURGIC8qIEZU
TFZhbHVlUmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRM
VmFsdWVSYW5nZS5jcHA7IHBhdGggPSBmdGwvRlRMVmFsdWVSYW5nZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNUE2MjgyMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJh
bmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFZhbHVlUmFuZ2UuaDsg
cGF0aCA9IGZ0bC9GVExWYWx1ZVJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNUI0QTMyMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93UGF0aFJldHVyblR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvd1BhdGhSZXR1cm5UeXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUNGOTgwMUU5NkYxN0QwMEMxODY5MiAvKiBBaXJUbXBN
YXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVG1wTWFwLmg7IHBhdGgg
PSBiMy9haXIvQWlyVG1wTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUQw
ODVDMUI4Q0Y5OUQwMDExNDNCNCAvKiBERkdOb2RlT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05vZGVPcmlnaW4uY3BwOyBwYXRoID0gZGZnL0RGR05v
ZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVFRjkxQjE2ODc4
Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpJVFRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUVGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC01NjIzLDcgKzU2MjMsNiBAQAogCQkJCTBGREY2N0Q1MUQ5REM0M0UwMDFCOTgyNSAvKiBBaXJL
aW5kLmggKi8sCiAJCQkJMjY4NEQ0MzcxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmgg
Ki8sCiAJCQkJMEYxODI5NjgxRTkyRUU1MTAwNUIxRUE4IC8qIEFpckxpdmVuZXNzQWRhcHRlci5o
ICovLAotCQkJCTBGMTgyOTZBMUU5MkY2REEwMDVCMUVBOCAvKiBBaXJMaXZlbmVzc0NvbnN0cmFp
bnRzLmggKi8sCiAJCQkJMEZFMzRDMTcxQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1JlZ2lzdGVy
UHJlc3N1cmUuY3BwICovLAogCQkJCTBGRTM0QzE4MUM0QjM5QUUwMDAzQTUxMiAvKiBBaXJMb2dS
ZWdpc3RlclByZXNzdXJlLmggKi8sCiAJCQkJMEY2MTgzMjUxQzQ1QkYwNzAwNzI0NTBCIC8qIEFp
ckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgKi8sCkBAIC01NjU4LDYgKzU2NTcsNyBAQAogCQkJCTBG
RUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovLAogCQkJCTBGRUM4NTY5MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLywKIAkJCQkwRkVDODU2QTFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wSW5saW5lcy5oICovLAorCQkJCTBGNUNGOTgwMUU5NkYxN0QwMEMxODY5MiAv
KiBBaXJUbXBNYXAuaCAqLywKIAkJCQkwRjlDMDNENDFFOTQ3NkYwMDBDRDkxMjUgLyogQWlyVG1w
U2V0LmggKi8sCiAJCQkJMEZFMEU0QUIxQzI0Qzk0QTAwMkUxN0I2IC8qIEFpclRtcFdpZHRoLmNw
cCAqLywKIAkJCQkwRkUwRTRBQzFDMjRDOTRBMDAyRTE3QjYgLyogQWlyVG1wV2lkdGguaCAqLywK
QEAgLTg5ODUsNyArODk4NSw2IEBACiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpT
TWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4
RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0REVGOTYxODJEOTkx
NDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMTgyOTZC
MUU5MkY2REMwMDVCMUVBOCAvKiBBaXJMaXZlbmVzc0NvbnN0cmFpbnRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5OTU5RTkyRDFCRDE3RkE0MDAxQUE0MTMgLyoganNtaW4ucHkgaW4gSGVhZGVycyAq
LywKIAkJCQlFM0QyMzlDOTFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1bGVFbnZpcm9ubWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRDk3MjI3NTJEQzU0NDU5QjkxMjVCNTM5IC8qIEpTTW9kdWxl
TG9hZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTkxODYsNiArOTE4NSw3IEBACiAJCQkJMEZCQjcz
QjgxREVGM0FBRTAwMkMwMDlFIC8qIFByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNzI5QTUxNjZBRDM1MTAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNv
ZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUNGOTgxMUU5NkYxN0YwMEMxODY5MiAvKiBBaXJU
bXBNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQ
cm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMzkxMkExNjc3MUMzNjAw
OUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGVMaXZlbmVz
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlTGl2
ZW5lc3MuaAkocmV2aXNpb24gMjE1MDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFyaWFibGVMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMCBAQCBzdHJ1
Y3QgVmFyaWFibGVMaXZlbmVzc0FkYXB0ZXIgewogICAgIHsKICAgICB9CiAgICAgCisgICAgdm9p
ZCBwcmVwYXJlVG9Db21wdXRlKCkKKyAgICB7CisgICAgfQorICAgIAogICAgIHVuc2lnbmVkIG51
bUluZGljZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHByb2MudmFyaWFibGVzKCkuc2l6ZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVy
c0J5TGluZWFyU2Nhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAJKHJldmlzaW9uIDIxNTA1
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTMgKzEwNSwxMiBAQCBzdHJ1
Y3QgQ2xvYmJlciB7CiAgICAgUmVnaXN0ZXJTZXQgcmVnczsKIH07CiAKLXRlbXBsYXRlPEJhbmsg
YmFuaz4KIGNsYXNzIExpbmVhclNjYW4gewogcHVibGljOgogICAgIExpbmVhclNjYW4oQ29kZSYg
Y29kZSkKICAgICAgICAgOiBtX2NvZGUoY29kZSkKICAgICAgICAgLCBtX3N0YXJ0SW5kZXgoY29k
ZS5zaXplKCkpCi0gICAgICAgICwgbV9tYXAoY29kZS5udW1UbXBzKGJhbmspKQorICAgICAgICAs
IG1fbWFwKGNvZGUpCiAgICAgICAgICwgbV9pbnNlcnRpb25TZXRzKGNvZGUuc2l6ZSgpKQogICAg
IHsKICAgICB9CkBAIC0xMjcsNyArMTI2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAg
ICBmb3IgKDs7KSB7CiAgICAgICAgICAgICBwcmVwYXJlSW50ZXJ2YWxzKCk7Ci0gICAgICAgICAg
ICBhdHRlbXB0U2NhbigpOworICAgICAgICAgICAgZm9yRWFjaEJhbmsoCisgICAgICAgICAgICAg
ICAgWyZdIChCYW5rIGJhbmspIHsKKyAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdFNjYW4oYmFu
ayk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoIW1fZGlkU3BpbGwpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7CkBAIC0x
MzksOCArMTQxLDEyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBidWlsZFJlZ2lzdGVy
U2V0KCkKICAgICB7Ci0gICAgICAgIG1fcmVnaXN0ZXJzID0gbV9jb2RlLnJlZ3NJblByaW9yaXR5
T3JkZXIoYmFuayk7Ci0gICAgICAgIG1fcmVnaXN0ZXJTZXQuc2V0QWxsKG1fcmVnaXN0ZXJzKTsK
KyAgICAgICAgZm9yRWFjaEJhbmsoCisgICAgICAgICAgICBbJl0gKEJhbmsgYmFuaykgeworICAg
ICAgICAgICAgICAgIG1fcmVnaXN0ZXJzW2JhbmtdID0gbV9jb2RlLnJlZ3NJblByaW9yaXR5T3Jk
ZXIoYmFuayk7CisgICAgICAgICAgICAgICAgbV9yZWdpc3RlclNldFtiYW5rXS5zZXRBbGwobV9y
ZWdpc3RlcnNbYmFua10pOworICAgICAgICAgICAgICAgIG1fdW5pZmllZFJlZ2lzdGVyU2V0Lm1l
cmdlKG1fcmVnaXN0ZXJTZXRbYmFua10pOworICAgICAgICAgICAgfSk7CiAgICAgfQogCiAgICAg
dm9pZCBidWlsZEluZGljZXMoKQpAQCAtMTc4LDcgKzE4NCw3IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBidWlsZEludGVydmFscygpCiAgICAgewotICAgICAgICBUbXBMaXZlbmVzczxiYW5r
PiBsaXZlbmVzcyhtX2NvZGUpOworICAgICAgICBVbmlmaWVkVG1wTGl2ZW5lc3MgbGl2ZW5lc3Mo
bV9jb2RlKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2Nv
ZGUpIHsKICAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFk
KGJsb2NrKTsKQEAgLTIyMyw3ICsyMjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2LT5raW5kLm9wY29kZSA9PSBQ
YXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZSZWdzLm1lcmdlKHByZXYtPmV4dHJh
Q2xvYmJlcmVkUmVncygpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJldlJlZ3MuZmlsdGVyKG1f
cmVnaXN0ZXJTZXQpOworICAgICAgICAgICAgICAgICAgICBwcmV2UmVncy5maWx0ZXIobV91bmlm
aWVkUmVnaXN0ZXJTZXQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZSZWdzLmlzRW1w
dHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xvYmJlcnMuYXBwZW5kKENsb2JiZXIo
aW5kZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyIC0gMSwgcHJldlJlZ3MpKTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0yNTYsMTAgKzI2MiwxMCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAg
aWYgKHZlcmJvc2UoKSkgewogICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJ2YWxzOlxuIik7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBtX2NvZGUu
bnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRleCkgewotICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBU
bXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1fY29kZS5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgIFsmXSAoVG1wIHRt
cCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21h
cFt0bXBdLCAiXG4iKTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKQEAgLTI3NiwyMyArMjgyLDI1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzcGlsbEV2
ZXJ5dGhpbmcoKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRt
cEluZGV4IDwgbV9jb2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgpCi0gICAgICAgICAgICBz
cGlsbChUbXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KSk7CisgICAgICAgIG1fY29kZS5m
b3JFYWNoVG1wKAorICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAg
c3BpbGwodG1wKTsKKyAgICAgICAgICAgIH0pOwogICAgIH0KICAgICAKICAgICB2b2lkIHByZXBh
cmVJbnRlcnZhbHMoKQogICAgIHsKICAgICAgICAgbV90bXBzLnJlc2l6ZSgwKTsKICAgICAgICAg
Ci0gICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG1fY29kZS5u
dW1UbXBzKGJhbmspOyArK3RtcEluZGV4KSB7Ci0gICAgICAgICAgICBUbXAgdG1wID0gVG1wOjp0
bXBGb3JJbmRleChiYW5rLCB0bXBJbmRleCk7Ci0gICAgICAgICAgICBUbXBEYXRhJiBkYXRhID0g
bV9tYXBbdG1wXTsKLSAgICAgICAgICAgIGlmIChkYXRhLnNwaWxsZWQpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRhdGEuYXNzaWduZWQgPSBS
ZWcoKTsKLSAgICAgICAgICAgIG1fdG1wcy5hcHBlbmQodG1wKTsKLSAgICAgICAgfQorICAgICAg
ICBtX2NvZGUuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgeworICAgICAg
ICAgICAgICAgIFRtcERhdGEmIGRhdGEgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgICAgIGlm
IChkYXRhLnNwaWxsZWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGRhdGEuYXNzaWduZWQgPSBSZWcoKTsKKyAgICAgICAg
ICAgICAgICBtX3RtcHMuYXBwZW5kKHRtcCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgCiAg
ICAgICAgIHN0ZDo6c29ydCgKICAgICAgICAgICAgIG1fdG1wcy5iZWdpbigpLCBtX3RtcHMuZW5k
KCksCkBAIC0zMTcsNyArMzI1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRtcDsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBhdHRlbXB0U2NhbigpCisgICAgdm9pZCBhdHRlbXB0U2NhbihC
YW5rIGJhbmspCiAgICAgewogICAgICAgICAvLyBUaGlzIGlzIG1vZGVsZWQgYWZ0ZXIgTGluZWFy
U2NhblJlZ2lzdGVyQWxsb2NhdGlvbiBpbiBGaWcuIDEgaW4KICAgICAgICAgLy8gaHR0cDovL2Rs
LmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MC4KQEAgLTMyOCw2ICszMzYsOSBAQCBwcml2
YXRlOgogICAgICAgICAKICAgICAgICAgc2l6ZV90IGNsb2JiZXJJbmRleCA9IDA7CiAgICAgICAg
IGZvciAoVG1wJiB0bXAgOiBtX3RtcHMpIHsKKyAgICAgICAgICAgIGlmICh0bXAuYmFuaygpICE9
IGJhbmspCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKICAgICAgICAg
ICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKICAgICAgICAgICAgIHNpemVfdCBpbmRl
eCA9IGVudHJ5LmludGVydmFsLmJlZ2luKCk7CiAgICAgICAgICAgICAKQEAgLTM4MSw3ICszOTIs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHdoaWxlIChjbG9iYmVySW5kZXggPCBtX2Ns
b2JiZXJzLnNpemUoKSAmJiBtX2Nsb2JiZXJzW2Nsb2JiZXJJbmRleF0uaW5kZXggPCBpbmRleCkK
ICAgICAgICAgICAgICAgICAgICAgY2xvYmJlckluZGV4Kys7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcG9zc2libGVSZWdzID0gbV9yZWdpc3RlclNldDsK
KyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwb3NzaWJsZVJlZ3MgPSBtX3JlZ2lzdGVyU2V0
W2JhbmtdOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBjbG9iYmVySW5kZXg7IGkg
PCBtX2Nsb2JiZXJzLnNpemUoKSAmJiBtX2Nsb2JiZXJzW2ldLmluZGV4IDwgZW50cnkuaW50ZXJ2
YWwuZW5kKCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVSZWdzLmV4Y2x1ZGUo
bV9jbG9iYmVyc1tpXS5yZWdzKTsKICAgICAgICAgICAgICAgICAKQEAgLTM5Myw5ICs0MDQsOSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgUG9zc2libGUgcmVnczogIiwg
ZW50cnkucG9zc2libGVSZWdzLCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8g
RmluZCBhIGZyZWUgcmVnaXN0ZXIgdGhhdCB3ZSBhcmUgYWxsb3dlZCB0byB1c2UuCi0gICAgICAg
ICAgICBpZiAobV9hY3RpdmUuc2l6ZSgpICE9IG1fcmVnaXN0ZXJzLnNpemUoKSkgeworICAgICAg
ICAgICAgaWYgKG1fYWN0aXZlLnNpemUoKSAhPSBtX3JlZ2lzdGVyc1tiYW5rXS5zaXplKCkpIHsK
ICAgICAgICAgICAgICAgICBib29sIGRpZEFzc2lnbiA9IGZhbHNlOwotICAgICAgICAgICAgICAg
IGZvciAoUmVnIHJlZyA6IG1fcmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAgZm9yIChSZWcg
cmVnIDogbV9yZWdpc3RlcnNbYmFua10pIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IENvdWxkIGRvIHByaW9yaXR5IGNvbG9yaW5nIGhlcmUuCiAgICAgICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAzMDQKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX2FjdGl2ZVJlZ3MuY29udGFpbnMocmVnKSAmJiBlbnRyeS5wb3Nz
aWJsZVJlZ3MuY29udGFpbnMocmVnKSkgewpAQCAtNDgxLDggKzQ5Miw2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGFyZy5pc1JlZygpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChhcmcuYmFuaygpICE9IGJhbmspCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzcGlsbGVkID0g
bV9tYXBbYXJnLnRtcCgpXS5zcGlsbGVkOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXNwaWxs
ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQ5MywxMSArNTAyLDkg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGYWxsIGJh
Y2sgb24gdGhlIGhhcmQgd2F5LgogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKLSAg
ICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsgdG1w
QmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpS
b2xlIHJvbGUsIEJhbmsgYmFuaywgV2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0bXAuaXNSZWcoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodG1wQmFuayAhPSBiYW5rKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCog
c3BpbGxlZCA9IG1fbWFwW3RtcF0uc3BpbGxlZDsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghc3BpbGxlZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC01MjQs
MTAgKzUzMSwxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2UoKSkgewog
ICAgICAgICAgICAgZGF0YUxvZygiQWJvdXQgdG8gYWxsb2NhdGUgcmVnaXN0ZXJzLiBTdGF0ZSBv
ZiBhbGwgdG1wczpcbiIpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7
IHRtcEluZGV4IDwgbV9jb2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgpIHsKLSAgICAgICAg
ICAgICAgICBUbXAgdG1wID0gVG1wOjp0bXBGb3JJbmRleChiYW5rLCB0bXBJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBtX2NvZGUuZm9yRWFjaFRtcCgKKyAgICAgICAg
ICAgICAgICBbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
ICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7CisgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICBkYXRhTG9nKCJJUjpcbiIpOwogICAgICAgICAgICAgZGF0YUxvZyhtX2NvZGUp
OwogICAgICAgICB9CkBAIC01NDAsOCArNTQ3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgWyZdIChUbXAmIHRtcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5p
c1JlZygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0bXAuYmFuaygpICE9IGJhbmspCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICBSZWcgcmVnID0gbV9tYXBbdG1wXS5hc3NpZ25lZDsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghcmVnKSB7CkBAIC01NTUsMTAgKzU2MCwxMSBAQCBwcml2YXRlOgogICAg
IH0KICAgICAKICAgICBDb2RlJiBtX2NvZGU7Ci0gICAgVmVjdG9yPFJlZz4gbV9yZWdpc3RlcnM7
Ci0gICAgUmVnaXN0ZXJTZXQgbV9yZWdpc3RlclNldDsKKyAgICBWZWN0b3I8UmVnPiBtX3JlZ2lz
dGVyc1tudW1CYW5rc107CisgICAgUmVnaXN0ZXJTZXQgbV9yZWdpc3RlclNldFtudW1CYW5rc107
CisgICAgUmVnaXN0ZXJTZXQgbV91bmlmaWVkUmVnaXN0ZXJTZXQ7CiAgICAgSW5kZXhNYXA8QmFz
aWNCbG9jayosIHNpemVfdD4gbV9zdGFydEluZGV4OwotICAgIEluZGV4TWFwPFRtcDo6SW5kZXhl
ZDxiYW5rPiwgVG1wRGF0YT4gbV9tYXA7CisgICAgVG1wTWFwPFRtcERhdGE+IG1fbWFwOwogICAg
IEluZGV4TWFwPEJhc2ljQmxvY2sqLCBQaGFzZUluc2VydGlvblNldD4gbV9pbnNlcnRpb25TZXRz
OwogICAgIFZlY3RvcjxDbG9iYmVyPiBtX2Nsb2JiZXJzOyAvLyBBZnRlciB3ZSBhbGxvY2F0ZSB0
aGlzLCB3ZSBoYXBwaWx5IHBvaW50IHBvaW50ZXJzIGludG8gaXQuCiAgICAgVmVjdG9yPFRtcD4g
bV90bXBzOwpAQCAtNTY3LDEyICs1NzMsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkU3Bp
bGwgeyBmYWxzZSB9OwogfTsKIAotdGVtcGxhdGU8QmFuayBiYW5rPgogdm9pZCBydW5MaW5lYXJT
Y2FuKENvZGUmIGNvZGUpCiB7CiAgICAgaWYgKHZlcmJvc2UoKSkKICAgICAgICAgZGF0YUxvZygi
QWlyIGJlZm9yZSBsaW5lYXIgc2NhbiBmb3IgIiwgYmFuaywgIjpcbiIsIGNvZGUpOwotICAgIExp
bmVhclNjYW48YmFuaz4gbGluZWFyU2Nhbihjb2RlKTsKKyAgICBMaW5lYXJTY2FuIGxpbmVhclNj
YW4oY29kZSk7CiAgICAgbGluZWFyU2Nhbi5ydW4oKTsKICAgICBpZiAodmVyYm9zZSgpKQogICAg
ICAgICBkYXRhTG9nKCJBaXIgYWZ0ZXIgbGluZWFyIHNjYW4gZm9yICIsIGJhbmssICI6XG4iLCBj
b2RlKTsKQEAgLTU4NCw4ICs1ODksNyBAQCB2b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJT
Y2FuKENvZGUmCiB7CiAgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVJl
Z2lzdGVyc0J5TGluZWFyU2NhbiIpOwogICAgIHBhZEludGVyZmVyZW5jZShjb2RlKTsKLSAgICBy
dW5MaW5lYXJTY2FuPEZQPihjb2RlKTsKLSAgICBydW5MaW5lYXJTY2FuPEdQPihjb2RlKTsKKyAg
ICBydW5MaW5lYXJTY2FuKGNvZGUpOwogICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUp
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNp
b24gMjE1MDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzMCw2ICsxMzAsMTcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaFRtcChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBiYW5rSW5kZXggPSAwOyBiYW5rSW5kZXggPCBudW1CYW5r
czsgKytiYW5rSW5kZXgpIHsKKyAgICAgICAgICAgIEJhbmsgYmFuayA9IHN0YXRpY19jYXN0PEJh
bms+KGJhbmtJbmRleCk7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1UbXBzID0gdGhpcy0+bnVt
VG1wcyhiYW5rKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1UbXBz
OyArK2kpCisgICAgICAgICAgICAgICAgZnVuYyhUbXA6OnRtcEZvckluZGV4KGJhbmssIGkpKTsK
KyAgICAgICAgfQorICAgIH0KIAogICAgIHVuc2lnbmVkIGNhbGxBcmdBcmVhU2l6ZUluQnl0ZXMo
KSBjb25zdCB7IHJldHVybiBtX2NhbGxBcmdBcmVhU2l6ZTsgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAyMTUwNTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDcgQEAgdXNpbmcgVG1wTGl2ZW5lc3MgPSBMaXZlbmVzczxUbXBMaXZlbmVz
cwogCiB0eXBlZGVmIExpdmVuZXNzPFRtcExpdmVuZXNzQWRhcHRlcjxHUD4+IEdQTGl2ZW5lc3M7
CiB0eXBlZGVmIExpdmVuZXNzPFRtcExpdmVuZXNzQWRhcHRlcjxGUD4+IEZQTGl2ZW5lc3M7Cit0
eXBlZGVmIExpdmVuZXNzPFVuaWZpZWRUbXBMaXZlbmVzcz4+IFVuaWZpZWRUbXBMaXZlbmVzczsK
IHR5cGVkZWYgTGl2ZW5lc3M8U3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyPiBTdGFja1Nsb3RMaXZl
bmVzczsKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzc0FkYXB0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzQWRhcHRlci5oCShyZXZpc2lv
biAyMTUwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzQWRh
cHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiQWlyQ0ZH
LmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiQWlyTGl2ZW5lc3NDb25zdHJhaW50cy5oIgogI2luY2x1ZGUgIkFpclN0YWNrU2xv
dC5oIgogI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIKIApAQCAtNDEsMTAgKzQwLDU5IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0ZXI+CiBzdHJ1Y3QgTGl2ZW5lc3NBZGFwdGVyIHsKICAgICB0
eXBlZGVmIEFpcjo6Q0ZHIENGRzsKICAgICAKKyAgICB0eXBlZGVmIFZlY3Rvcjx1bnNpZ25lZCwg
ND4gQWN0aW9uc0xpc3Q7CisgICAgCisgICAgc3RydWN0IEFjdGlvbnMgeworICAgICAgICBBY3Rp
b25zKCkgeyB9CisgICAgICAgIAorICAgICAgICBBY3Rpb25zTGlzdCB1c2U7CisgICAgICAgIEFj
dGlvbnNMaXN0IGRlZjsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgVmVjdG9yPEFjdGlvbnMs
IDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBBY3Rpb25zRm9yQm91bmRhcnk7CisgICAgCiAgICAg
TGl2ZW5lc3NBZGFwdGVyKENvZGUmIGNvZGUpCiAgICAgICAgIDogY29kZShjb2RlKQotICAgICAg
ICAsIGNvbnN0cmFpbnRzKGNvZGUpCisgICAgICAgICwgbV9hY3Rpb25zKGNvZGUuc2l6ZSgpKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgQWRhcHRlciYgYWRhcHRlcigpCisgICAgeworICAgICAg
ICByZXR1cm4gKnN0YXRpY19jYXN0PEFkYXB0ZXIqPih0aGlzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBwcmVwYXJlVG9Db21wdXRlKCkKICAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIEFjdGlvbnNGb3JCb3VuZGFyeSYgYWN0aW9u
c0ZvckJvdW5kYXJ5ID0gbV9hY3Rpb25zW2Jsb2NrXTsKKyAgICAgICAgICAgIGFjdGlvbnNGb3JC
b3VuZGFyeS5yZXNpemUoYmxvY2stPnNpemUoKSArIDEpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTsp
IHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7Cisg
ICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKKyAg
ICAgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFy
Zzo6Um9sZSByb2xlLCBCYW5rIGJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIUFkYXB0ZXI6OmFjY2VwdHNCYW5rKGJhbmspIHx8ICFBZGFwdGVyOjphY2NlcHRzUm9s
ZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
YWRhcHRlcigpLnZhbHVlVG9JbmRleCh0aGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlVc2Uocm9sZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uc0ZvckJvdW5kYXJ5W2luc3RJbmRleF0udXNl
LmFwcGVuZElmTm90Q29udGFpbnMoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KEFyZzo6aXNFYXJseURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rp
b25zRm9yQm91bmRhcnlbaW5zdEluZGV4XS5kZWYuYXBwZW5kSWZOb3RDb250YWlucyhpbmRleCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVVc2Uocm9sZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uc0ZvckJvdW5kYXJ5W2luc3RJbmRleCArIDFd
LnVzZS5hcHBlbmRJZk5vdENvbnRhaW5zKGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
Y3Rpb25zRm9yQm91bmRhcnlbaW5zdEluZGV4ICsgMV0uZGVmLmFwcGVuZElmTm90Q29udGFpbnMo
aW5kZXgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBBY3Rpb25zJiBhY3Rpb25zQXQoQmFzaWNCbG9jayogYmxvY2ss
IHVuc2lnbmVkIGluc3RCb3VuZGFyeUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWN0
aW9uc1tibG9ja11baW5zdEJvdW5kYXJ5SW5kZXhdOwogICAgIH0KICAgICAKICAgICB1bnNpZ25l
ZCBibG9ja1NpemUoQmFzaWNCbG9jayogYmxvY2spCkBAIC01NSwxOSArMTAzLDE5IEBAIHN0cnVj
dCBMaXZlbmVzc0FkYXB0ZXIgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9p
ZCBmb3JFYWNoVXNlKEJhc2ljQmxvY2sqIGJsb2NrLCBzaXplX3QgaW5zdEJvdW5kYXJ5SW5kZXgs
IGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDog
Y29uc3RyYWludHMuYXQoYmxvY2ssIGluc3RCb3VuZGFyeUluZGV4KS51c2UpCisgICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggOiBhY3Rpb25zQXQoYmxvY2ssIGluc3RCb3VuZGFyeUluZGV4KS51
c2UpCiAgICAgICAgICAgICBmdW5jKGluZGV4KTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hEZWYoQmFzaWNCbG9jayogYmxvY2ssIHNp
emVfdCBpbnN0Qm91bmRhcnlJbmRleCwgY29uc3QgRnVuYyYgZnVuYykKICAgICB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXggOiBjb25zdHJhaW50cy5hdChibG9jaywgaW5zdEJvdW5kYXJ5
SW5kZXgpLmRlZikKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA6IGFjdGlvbnNBdChibG9j
aywgaW5zdEJvdW5kYXJ5SW5kZXgpLmRlZikKICAgICAgICAgICAgIGZ1bmMoaW5kZXgpOwogICAg
IH0KIAogICAgIENvZGUmIGNvZGU7Ci0gICAgTGl2ZW5lc3NDb25zdHJhaW50czxBZGFwdGVyPiBj
b25zdHJhaW50czsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQWN0aW9uc0ZvckJvdW5kYXJ5
PiBtX2FjdGlvbnM7CiB9OwogCiB0ZW1wbGF0ZTxCYW5rIGFkYXB0ZXJCYW5rLCBBcmc6OlRlbXBl
cmF0dXJlIG1pbmltdW1UZW1wZXJhdHVyZSA9IEFyZzo6Q29sZD4KQEAgLTg0LDggKzEzMiw3IEBA
IHN0cnVjdCBUbXBMaXZlbmVzc0FkYXB0ZXIgOiBMaXZlbmVzc0FkYXAKIAogICAgIHVuc2lnbmVk
IG51bUluZGljZXMoKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgbnVtVG1wcyA9IEJhc2U6OmNv
ZGUubnVtVG1wcyhhZGFwdGVyQmFuayk7Ci0gICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBl
cjxhZGFwdGVyQmFuaz46OmFic29sdXRlSW5kZXgobnVtVG1wcyk7CisgICAgICAgIHJldHVybiBU
bXA6OmFic29sdXRlSW5kZXhFbmQoQmFzZTo6Y29kZSwgYWRhcHRlckJhbmspOwogICAgIH0KICAg
ICBzdGF0aWMgYm9vbCBhY2NlcHRzQmFuayhCYW5rIGJhbmspIHsgcmV0dXJuIGJhbmsgPT0gYWRh
cHRlckJhbms7IH0KICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzUm9sZShBcmc6OlJvbGUgcm9sZSkg
eyByZXR1cm4gQXJnOjp0ZW1wZXJhdHVyZShyb2xlKSA+PSBtaW5pbXVtVGVtcGVyYXR1cmU7IH0K
QEAgLTkzLDYgKzE0MCwyOSBAQCBzdHJ1Y3QgVG1wTGl2ZW5lc3NBZGFwdGVyIDogTGl2ZW5lc3NB
ZGFwCiAgICAgc3RhdGljIFRtcCBpbmRleFRvVmFsdWUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJu
IEFic29sdXRlVG1wTWFwcGVyPGFkYXB0ZXJCYW5rPjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaW5k
ZXgpOyB9CiB9OwogCitzdHJ1Y3QgVW5pZmllZFRtcExpdmVuZXNzQWRhcHRlciA6IExpdmVuZXNz
QWRhcHRlcjxVbmlmaWVkVG1wTGl2ZW5lc3NBZGFwdGVyPiB7CisgICAgdHlwZWRlZiBMaXZlbmVz
c0FkYXB0ZXI8VW5pZmllZFRtcExpdmVuZXNzQWRhcHRlcj4gQmFzZTsKKyAgICAKKyAgICBzdGF0
aWMgY29uc3RleHByIGNvbnN0IGNoYXJzKiBuYW1lID0gIlVuaWZpZWRUbXBMaXZlbmVzcyI7CisK
KyAgICB0eXBlZGVmIFRtcCBUaGluZzsKKyAgICAKKyAgICBVbmlmaWVkVG1wTGl2ZW5lc3NBZGFw
dGVyKENvZGUmIGNvZGUpCisgICAgICAgIDogQmFzZShjb2RlKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgbnVtSW5kaWNlcygpCisgICAgeworICAgICAgICByZXR1cm4gVG1wOjps
aW5lYXJJbmRleEVuZChjb2RlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgYWNjZXB0
c0JhbmsoQmFuaykgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHN0YXRpYyBib29sIGFjY2VwdHNSb2xl
KEFyZzo6Um9sZSkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHVuc2lnbmVkIHZhbHVlVG9JbmRleChU
bXAgdG1wKSB7IHJldHVybiB0bXAubGluZWFybHlJbmRleGVkKGNvZGUpLmluZGV4KCk7IH0KKyAg
ICBUbXAgaW5kZXhUb1ZhbHVlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBUbXA6OnRtcEZvckxp
bmVhckluZGV4KGNvZGUsIGluZGV4KTsgfQorfTsKKwogc3RydWN0IFN0YWNrU2xvdExpdmVuZXNz
QWRhcHRlciA6IExpdmVuZXNzQWRhcHRlcjxTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXI+IHsKICAg
ICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIG5hbWUgPSAiU3RhY2tTbG90TGl2ZW5lc3Mi
OwogICAgIHR5cGVkZWYgU3RhY2tTbG90KiBUaGluZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3NDb25zdHJhaW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3NDb25zdHJhaW50cy5oCShyZXZpc2lv
biAyMTUwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzQ29u
c3RyYWludHMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJM
RShCM19KSVQpCi0KLSNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCi0jaW5jbHVkZSAiQWlyQ29k
ZS5oIgotI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0luZGV4TWFw
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRlcj4KLWNsYXNzIExpdmVuZXNzQ29uc3RyYWludHMgewot
cHVibGljOgotICAgIHR5cGVkZWYgVmVjdG9yPHVuc2lnbmVkLCA0PiBBY3Rpb25zTGlzdDsKLSAg
ICAKLSAgICBzdHJ1Y3QgQWN0aW9ucyB7Ci0gICAgICAgIEFjdGlvbnMoKSB7IH0KLSAgICAgICAg
Ci0gICAgICAgIEFjdGlvbnNMaXN0IHVzZTsKLSAgICAgICAgQWN0aW9uc0xpc3QgZGVmOwotICAg
IH07Ci0gICAgCi0gICAgdHlwZWRlZiBWZWN0b3I8QWN0aW9ucywgMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+IEFjdGlvbnNGb3JCb3VuZGFyeTsKLSAgICAKLSAgICBMaXZlbmVzc0NvbnN0cmFpbnRz
KENvZGUmIGNvZGUpCi0gICAgICAgIDogbV9jb2RlKGNvZGUpCi0gICAgICAgICwgbV9hY3Rpb25z
KGNvZGUuc2l6ZSgpKQotICAgIHsKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Y29kZSkgewotICAgICAgICAgICAgQWN0aW9uc0ZvckJvdW5kYXJ5JiBhY3Rpb25zRm9yQm91bmRh
cnkgPSBtX2FjdGlvbnNbYmxvY2tdOwotICAgICAgICAgICAgYWN0aW9uc0ZvckJvdW5kYXJ5LnJl
c2l6ZShibG9jay0+c2l6ZSgpICsgMSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAo
c2l6ZV90IGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewotICAgICAg
ICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLSAgICAgICAgICAg
ICAgICBpbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAotICAgICAgICAgICAg
ICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJv
bGUsIEJhbmsgYmFuaywgV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQWRh
cHRlcjo6YWNjZXB0c0JhbmsoYmFuaykgfHwgIUFkYXB0ZXI6OmFjY2VwdHNSb2xlKHJvbGUpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBBZGFwdGVyOjp2
YWx1ZVRvSW5kZXgodGhpbmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5VXNlKHJvbGUpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFjdGlvbnNGb3JCb3VuZGFyeVtpbnN0SW5kZXhdLnVzZS5hcHBlbmRJZk5v
dENvbnRhaW5zKGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFy
bHlEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uc0ZvckJvdW5k
YXJ5W2luc3RJbmRleF0uZGVmLmFwcGVuZElmTm90Q29udGFpbnMoaW5kZXgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlVXNlKHJvbGUpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFjdGlvbnNGb3JCb3VuZGFyeVtpbnN0SW5kZXggKyAxXS51c2UuYXBwZW5k
SWZOb3RDb250YWlucyhpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c0xhdGVEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uc0ZvckJv
dW5kYXJ5W2luc3RJbmRleCArIDFdLmRlZi5hcHBlbmRJZk5vdENvbnRhaW5zKGluZGV4KTsKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgQWN0aW9ucyYgYXQoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluc3RCb3Vu
ZGFyeUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYWN0aW9uc1tibG9ja11baW5zdEJv
dW5kYXJ5SW5kZXhdOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgQ29kZSYgbV9jb2RlOwot
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBBY3Rpb25zRm9yQm91bmRhcnk+IG1fYWN0aW9uczsK
LX07Ci0KLX0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKLQotI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2
ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJl
Z0xpdmVuZXNzLmgJKHJldmlzaW9uIDIxNTA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyUmVnTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsMTQgQEAg
cHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBMb2Nh
bENhbGMoVW5pZmllZFRtcExpdmVuZXNzJiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxvY2spCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdFRhaWwo
YmxvY2spKSB7CisgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAg
ICAgICAgICBtX3dvcmtzZXQuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBsaXZlKCkgY29uc3QKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fd29ya3NldDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDIxNTA1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQCB0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNvbnN0IFRtcDo6SW5kZXhlCiB0ZW1wbGF0
ZTw+IGNvbnN0IGNoYXIqIGNvbnN0IFRtcDo6SW5kZXhlZDxGUD46OmR1bXBQcmVmaXggPSAiJWZ0
bXAiOwogdGVtcGxhdGU8PiBjb25zdCBjaGFyKiBjb25zdCBUbXA6OkFic29sdXRlbHlJbmRleGVk
PEdQPjo6ZHVtcFByZWZpeCA9ICIlYWJzIjsKIHRlbXBsYXRlPD4gY29uc3QgY2hhciogY29uc3Qg
VG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDxGUD46OmR1bXBQcmVmaXggPSAiJWZhYnMiOworY29uc3Qg
Y2hhciogY29uc3QgVG1wOjpMaW5lYXJseUluZGV4ZWQ6OmR1bXBQcmVmaXggPSAiJWx0bXAiOwog
CiB2b2lkIFRtcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAyMTUwNTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICsz
Niw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAK
IGNsYXNzIEFyZzsKK2NsYXNzIENvZGU7CiAKIC8vIEEgVG1wIGlzIGEgZ2VuZXJhbGl6YXRpb24g
b2YgYSByZWdpc3Rlci4gSXQgY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW55IEdQUiBvciBGUFIu
IEl0IGNhbiBhbHNvCiAvLyBiZSB1c2VkIHRvIHJlZmVyIHRvIGFuIHVuYWxsb2NhdGVkIHJlZ2lz
dGVyIChpLmUuIGEgdGVtcG9yYXJ5KS4gTGlrZSBtYW55IEFpciBjbGFzc2VzLCB3ZSB1c2UKQEAg
LTE2NSw2ICsxNjYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdGVtcGxhdGU8QmFuayBiYW5rPiBj
bGFzcyBJbmRleGVkOwogICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4gY2xhc3MgQWJzb2x1dGVseUlu
ZGV4ZWQ7CisgICAgY2xhc3MgTGluZWFybHlJbmRleGVkOwogICAgIAogICAgIHRlbXBsYXRlPEJh
bmsgYmFuaz4KICAgICBJbmRleGVkPGJhbms+IGluZGV4ZWQoKSBjb25zdDsKQEAgLTE3Miw2ICsx
NzQsMTIgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KICAgICBBYnNvbHV0ZWx5
SW5kZXhlZDxiYW5rPiBhYnNvbHV0ZWx5SW5kZXhlZCgpIGNvbnN0OwogICAgIAorICAgIExpbmVh
cmx5SW5kZXhlZCBsaW5lYXJseUluZGV4ZWQoQ29kZSYpIGNvbnN0OworCisgICAgdW5zaWduZWQg
aW5kZXhFbmQoQ29kZSYsIEJhbmspIGNvbnN0OworICAgIHVuc2lnbmVkIGFic29sdXRlSW5kZXhF
bmQoQ29kZSYsIEJhbmspIGNvbnN0OworICAgIHVuc2lnbmVkIGxpbmVhckluZGV4RW5kKENvZGUm
KSBjb25zdDsKKyAgICAKICAgICBib29sIGlzQWxpdmUoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuICEhKnRoaXM7CkBAIC0yMTQsNyArMjIyLDkgQEAgcHVibGljOgogICAgIH0KICAgICAK
ICAgICBzdGF0aWMgVG1wIHRtcEZvckFic29sdXRlSW5kZXgoQmFuaywgdW5zaWduZWQpOwotCisg
ICAgCisgICAgc3RhdGljIFRtcCB0bXBGb3JMaW5lYXJJbmRleChDb2RlJiwgdW5zaWduZWQpOwor
ICAgIAogcHJpdmF0ZToKICAgICBzdGF0aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQog
ICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5l
cy5oCShyZXZpc2lvbiAyMTUwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clRtcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJM
RShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCiAj
aW5jbHVkZSAiQWlyVG1wLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKQEAgLTEyNCw2ICsxMjUsMjcgQEAgcHVibGljOgogICAgIH0KIH07CiAKK2Ns
YXNzIFRtcDo6TGluZWFybHlJbmRleGVkIDogcHVibGljIFRtcCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisgICAgCisgICAgTGluZWFybHlJbmRl
eGVkKFRtcCB0bXAsIENvZGUmIGNvZGUpCisgICAgICAgIDogVG1wKHRtcCkKKyAgICAgICAgLCBt
X2NvZGUoJmNvZGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHVuc2ln
bmVkIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAgICAg
ICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8R1A+OjphYnNvbHV0ZUluZGV4KCp0aGlzKTsKKyAg
ICAgICAgcmV0dXJuIGFic29sdXRlSW5kZXhFbmQoKm1fY29kZSwgR1ApICsgQWJzb2x1dGVUbXBN
YXBwZXI8RlA+OjphYnNvbHV0ZUluZGV4KCp0aGlzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Q29kZSogbV9jb2RlOworfTsKKwogdGVtcGxhdGU8QmFuayB0aGVCYW5rPgogaW5saW5lIFRtcDo6
SW5kZXhlZDx0aGVCYW5rPiBUbXA6OmluZGV4ZWQoKSBjb25zdAogewpAQCAtMTM2LDcgKzE1OCwy
OSBAQCBpbmxpbmUgVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDx0aGVCYW5rPiBUCiAgICAgcmV0dXJu
IEFic29sdXRlbHlJbmRleGVkPHRoZUJhbms+KCp0aGlzKTsKIH0KIAotaW5saW5lIFRtcCBUbXA6
OnRtcEZvckFic29sdXRlSW5kZXgoQmFuayBiYW5rLCB1bnNpZ25lZCBpbmRleCkKK2lubGluZSBU
bXA6OkxpbmVhcmx5SW5kZXhlZCBUbXA6OmxpbmVhcmx5SW5kZXhlZChDb2RlJiBjb2RlKSBjb25z
dAoreworICAgIHJldHVybiBMaW5lYXJseUluZGV4ZWQoKnRoaXMsIGNvZGUpOworfQorCitBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIFRtcDo6aW5kZXhFbmQoQ29kZSYgY29kZSwgQmFuayBiYW5rKSBj
b25zdAoreworICAgIHJldHVybiBjb2RlLm51bVRtcHMoYmFuayk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdW5zaWduZWQgVG1wOjphYnNvbHV0ZUluZGV4RW5kKENvZGUmIGNvZGUsIEJhbmsgYmFuaykg
Y29uc3QKK3sKKyAgICBpZiAoYmFuayA9PSBHUCkKKyAgICAgICAgcmV0dXJuIEFic29sdXRlVG1w
TWFwcGVyPEdQPjo6YWJzb2x1dGVJbmRleChjb2RlLm51bVRtcHMoR1ApKTsKKyAgICByZXR1cm4g
QWJzb2x1dGVUbXBNYXBwZXI8RlA+OjphYnNvbHV0ZUluZGV4KGNvZGUubnVtVG1wcyhGUCkpOwor
fQorCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIFRtcDo6bGluZWFySW5kZXhFbmQoQ29kZSYgY29k
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gYWJzb2x1dGVJbmRleEVuZChjb2RlLCBHUCkgKyBhYnNv
bHV0ZUluZGV4RW5kKGNvZGUsIEZQKTsKK30KKworQUxXQVlTX0lOTElORSBUbXAgVG1wOjp0bXBG
b3JBYnNvbHV0ZUluZGV4KEJhbmsgYmFuaywgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgaWYgKGJh
bmsgPT0gR1ApCiAgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxHUD46OnRtcEZyb21B
YnNvbHV0ZUluZGV4KGluZGV4KTsKQEAgLTE0NCw2ICsxODgsMTQgQEAgaW5saW5lIFRtcCBUbXA6
OnRtcEZvckFic29sdXRlSW5kZXgoQmFuawogICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxG
UD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGluZGV4KTsKIH0KIAorQUxXQVlTX0lOTElORSBUbXAg
VG1wOjp0bXBGb3JMaW5lYXJJbmRleChDb2RlJiBjb2RlLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAg
ICB1bnNpZ25lZCBncEVuZCA9IGFic29sdXRlSW5kZXhFbmQoY29kZSwgR1ApOworICAgIGlmIChp
bmRleCA8IGdwRW5kKQorICAgICAgICByZXR1cm4gdG1wRm9yQWJzb2x1dGVJbmRleChHUCwgaW5k
ZXgpOworICAgIHJldHVybiB0bXBGb3JBYnNvbHV0ZUluZGV4KEZQLCBpbmRleCAtIGdwRW5kKTsK
K30KKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wTWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBNYXAuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcE1hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgorI2luY2x1ZGUg
PHd0Zi9JbmRleE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKKy8vIEFzIGFuIGFsdGVybmF0aXZlIHRvIHRoaXMsIHlvdSBjb3VsZCB1c2Ug
SW5kZXhNYXA8VG1wOjpMaW5lYXJseUluZGV4ZWQsIC4uLj4sIGJ1dCB0aGlzIHdvdWxkIGZhaWwK
Ky8vIGFzIHNvb24gYXMgeW91IGFkZGVkIGEgbmV3IEdQIHRtcC4KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWU+CitjbGFzcyBUbXBNYXAgeworcHVibGljOgorICAgIFRtcE1hcCgpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIFRtcE1hcChD
b2RlJiBjb2RlLCBjb25zdCBBcmdzJi4uLiBhcmdzKQorICAgICAgICA6IG1fZ3AoVG1wOjphYnNv
bHV0ZUluZGV4RW5kKGNvZGUsIEdQKSwgYXJncy4uLikKKyAgICAgICAgLCBtX2ZwKFRtcDo6YWJz
b2x1dGVJbmRleEVuZChjb2RlLCBGUCksIGFyZ3MuLi4pCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHZvaWQgcmVzaXplKENvZGUmIGNvZGUs
IGNvbnN0IEFyZ3MmLi4uIGFyZ3MpCisgICAgeworICAgICAgICBtX2dwLnJlc2l6ZShUbXA6OmFi
c29sdXRlSW5kZXhFbmQoY29kZSwgR1ApLCBhcmdzLi4uKTsKKyAgICAgICAgbV9mcC5yZXNpemUo
VG1wOjphYnNvbHV0ZUluZGV4RW5kKGNvZGUsIEZQKSwgYXJncy4uLik7CisgICAgfQorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBjbGVhcihjb25zdCBBcmdz
Ji4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgbV9ncC5jbGVhcihhcmdzLi4uKTsKKyAgICAgICAg
bV9mcC5jbGVhcihhcmdzLi4uKTsKKyAgICB9CisgICAgCisgICAgY29uc3QgVmFsdWUmIG9wZXJh
dG9yW10oVG1wIHRtcCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICh0bXAuaXNHUCgpKQorICAg
ICAgICAgICAgcmV0dXJuIG1fZ3BbdG1wXTsKKyAgICAgICAgcmV0dXJuIG1fZnBbdG1wXTsKKyAg
ICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShUbXAgdG1wKQorICAgIHsKKyAgICAgICAgaWYg
KHRtcC5pc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gbV9ncFt0bXBdOworICAgICAgICByZXR1
cm4gbV9mcFt0bXBdOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXNzZWRW
YWx1ZT4KKyAgICB2b2lkIGFwcGVuZChUbXAgdG1wLCBQYXNzZWRWYWx1ZSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgaWYgKHRtcC5pc0dQKCkpCisgICAgICAgICAgICBtX2dwLmFwcGVuZCh0bXAs
IHN0ZDo6Zm9yd2FyZDxQYXNzZWRWYWx1ZT4odmFsdWUpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9mcC5hcHBlbmQodG1wLCBzdGQ6OmZvcndhcmQ8UGFzc2VkVmFsdWU+KHZhbHVlKSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIEluZGV4TWFwPFRtcDo6QWJzb2x1dGVseUluZGV4PEdQ
PiwgVmFsdWU+IG1fZ3A7CisgICAgSW5kZXhNYXA8VG1wOjpBYnNvbHV0ZWx5SW5kZXg8RlA+LCBW
YWx1ZT4gbV9mcDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luZGV4TWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAkocmV2aXNpb24gMjE1MDU2
KQorKysgU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTAg
KzgxLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdmVjdG9yW0luZGV4S2V5VHlwZTxL
ZXk+OjppbmRleChrZXkpXTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgS2V5
JiBrZXksIFZhbHVlIHZhbHVlKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBhc3NlZFZhbHVlPgor
ICAgIHZvaWQgYXBwZW5kKGNvbnN0IEtleSYga2V5LCBQYXNzZWRWYWx1ZSYmIHZhbHVlKQogICAg
IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSW5kZXhLZXlUeXBlPEtleT46OmluZGV4KGtleSkg
PT0gbV92ZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgbV92ZWN0b3IuYXBwZW5kKHZhbHVlKTsKKyAg
ICAgICAgbV92ZWN0b3IuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxQYXNzZWRWYWx1ZT4odmFsdWUpKTsK
ICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9MaXZlbmVzcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xpdmVuZXNzLmgJKHJldmlzaW9uIDIxNTA1NikKKysr
IFNvdXJjZS9XVEYvd3RmL0xpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wgY29udGFpbnMoY29u
c3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nKSBjb25zdAogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBtX2xpdmVuZXNzLm1fd29ya3NldC5jb250YWlucyhBZGFw
dGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9saXZl
bmVzcy5tX3dvcmtzZXQuY29udGFpbnMobV9saXZlbmVzcy52YWx1ZVRvSW5kZXgodGhpbmcpKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlOgpAQCAtMjEwLDcgKzIxMCw3IEBAIHB1
YmxpYzoKIAogICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRo
aW5nJiB0aGluZykgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fbGl2ZW5l
c3MubV93b3Jrc2V0LmNvbnRhaW5zKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAg
ICAgICAgICAgcmV0dXJuIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmNvbnRhaW5zKG1fbGl2ZW5lc3Mu
dmFsdWVUb0luZGV4KHRoaW5nKSk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CkBAIC0yNTgs
NiArMjU4LDggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZvaWQgY29tcHV0ZSgpCiAgICAg
eworICAgICAgICBBZGFwdGVyOjpwcmVwYXJlVG9Db21wdXRlKCk7CisgICAgICAgIAogICAgICAg
ICAvLyBUaGUgbGl2ZUF0VGFpbCBvZiBlYWNoIGJsb2NrIGF1dG9tYXRpY2FsbHkgY29udGFpbnMg
dGhlIExhdGVVc2UncyBvZiB0aGUgdGVybWluYWwuCiAgICAgICAgIGZvciAodW5zaWduZWQgYmxv
Y2tJbmRleCA9IG1fY2ZnLm51bU5vZGVzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAg
IHR5cGVuYW1lIENGRzo6Tm9kZSBibG9jayA9IG1fY2ZnLm5vZGUoYmxvY2tJbmRleCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306437</attachid>
            <date>2017-04-06 16:50:27 -0700</date>
            <delta_ts>2017-04-06 17:09:33 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>43667</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1MDY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBA
CisyMDE3LTA0LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TGluZWFyIHNjYW4gc2hvdWxkIHJ1biBsaXZlbmVzcyBvbmx5IG9uY2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDU2OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWlyIGhhcyBhIGxvbmdz
dGFuZGluZyBkZXNpZ24gYnVnIHRoYXQgVG1wcyBmcm9tIGRpZmZlcmVudCBiYW5rcyBhcmUgaW5k
ZXhlZCBpbmRlcGVuZGVudGx5LiBUaGlzCisgICAgICAgIG1lYW5zIHRoYXQgYWxsIG9mIG91ciBh
bmFseXNlcyBvdmVyIFRtcHMgZG8gc2VwYXJhdGUgR1AgYW5kIEZQIHBhc3Nlcy4gVGhpcyBkb2Vz
IGhhdmUgc29tZQorICAgICAgICBtYXJnaW5hbCBiZW5lZml0cyAodGhlIHJlc3Qgb2YgdGhlIGFs
Z29yaXRobSBpcyBzcGVjaWFsaXplZCBmb3IgQmFuaykgYnV0IGl0J3MgcHJvYmFibHkgbmV0IGJh
ZC4KKyAgICAgICAgSG93ZXZlciwgSSBkb24ndCB3YW50IHRvIHRoaW5rIGFib3V0IHNvbHZpbmcg
dGhhdCBnZW5lcmFsIHByb2JsZW0uCisgICAgICAgIAorICAgICAgICBJbnN0ZWFkLCB0aGlzIGp1
c3QgbWFrZXMgbGluZWFyIHNjYW4gdXNlIGEgVW5pZmllZFRtcExpdmVuZXNzIHRoYXQgdXNlcyBh
IHNpbmdsZSAibGluZWFyIgorICAgICAgICBpbmRleGluZyBmb3IgR1AgYW5kIEZQLiBUaGlzIGxl
dHMgbWUgYXZvaWQgdGhlIG11Y2ggbGFyZ2VyIHJlZmFjdG9yaW5nICh3aGljaCB3b3VsZCBpbnZv
bHZlCisgICAgICAgIHN1YnN0YW50aWFsIGNoYW5nZXMgaW4gZ3JhcGggY29sb3JpbmcpIHdoaWxl
IGdldHRpbmcgdGhlIGJ1bGsgb2YgdGhlIGJlbmVmaXQgKGxpdmVuZXNzIHJ1bnMgb25jZSwKKyAg
ICAgICAgaW5zdGVhZCBvZiB0d2ljZSwgZm9yIGxpbmVhciBzY2FuKS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhIGxvdCBvZiBwbHVtYmluZyB0byBtYWtlIGl0IHBv
c3NpYmxlIGZvciBMaXZlbmVzczw+IHRvIHZpZXcgVG1wcyBhcyBoYXZpbmcKKyAgICAgICAgYSB1
bmlmaWVkIGluZGV4aW5nIHNjaGVtZS4gVG1wIGNhbGxzIHRoaXMgTGluZWFybHlJbmRleGVkICh0
byBtYXRjaCB0aGUgbmFtaW5nIGNvbnZlbnRpb24gb2YKKyAgICAgICAgQWJzb2x1dGVseUluZGV4
ZWQgYW5kIEluZGV4ZWQpLCB3aGlsZSBBaXJMaXZlbmVzcyBjYWxscyB0aGlzIFVuaWZpZWRUbXBM
aXZlbmVzcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSB+MTAlIHNwZWVkLXVwIGZvciB3
YXNtIC1PMSBjb21waWxlIHRpbWVzLiBJIHRoaW5rIHRoaXMgbWVhbnMgdGhhdCBsaW5lYXIgc2Nh
biBpcyBubworICAgICAgICBsb25nZXIgdGhlIGxvbmdlc3QgcG9sZSBpbiB0aGUgdGVudC4KKwor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYjMvQjNWYXJpYWJsZUxpdmVuZXNzLmg6CisgICAgICAgIChKU0M6OkIzOjpWYXJpYWJs
ZUxpdmVuZXNzQWRhcHRlcjo6cHJlcGFyZVRvQ29tcHV0ZSk6CisgICAgICAgICogYjMvYWlyL0Fp
ckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6YWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4pOgorICAgICAgICAqIGIzL2Fpci9BaXJD
b2RlLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZvckVhY2hUbXApOgorICAgICAg
ICAqIGIzL2Fpci9BaXJMaXZlbmVzcy5oOgorICAgICAgICAqIGIzL2Fpci9BaXJMaXZlbmVzc0Fk
YXB0ZXIuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3NBZGFwdGVyOjpBY3Rpb25z
OjpBY3Rpb25zKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3NBZGFwdGVyOjpMaXZl
bmVzc0FkYXB0ZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzc0FkYXB0ZXI6OmFk
YXB0ZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzc0FkYXB0ZXI6OnByZXBhcmVU
b0NvbXB1dGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzc0FkYXB0ZXI6OmFjdGlv
bnNBdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVuZXNzQWRhcHRlcjo6Zm9yRWFjaFVz
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVuZXNzQWRhcHRlcjo6Zm9yRWFjaERlZik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcExpdmVuZXNzQWRhcHRlcjo6bnVtSW5kaWNlcyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVuaWZpZWRUbXBMaXZlbmVzc0FkYXB0ZXI6OlVuaWZp
ZWRUbXBMaXZlbmVzc0FkYXB0ZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVbmlmaWVkVG1w
TGl2ZW5lc3NBZGFwdGVyOjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VW5p
ZmllZFRtcExpdmVuZXNzQWRhcHRlcjo6YWNjZXB0c0JhbmspOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpVbmlmaWVkVG1wTGl2ZW5lc3NBZGFwdGVyOjphY2NlcHRzUm9sZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlVuaWZpZWRUbXBMaXZlbmVzc0FkYXB0ZXI6OnZhbHVlVG9JbmRleCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlVuaWZpZWRUbXBMaXZlbmVzc0FkYXB0ZXI6OmluZGV4VG9W
YWx1ZSk6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzQ29uc3RyYWludHMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBiMy9haXIvQWlyUmVnTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6UmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYzo6TG9jYWxDYWxjKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyVG1wLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wLmg6CisgICAgICAgICogYjMv
YWlyL0FpclRtcElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpMaW5lYXJs
eUluZGV4ZWQ6OkxpbmVhcmx5SW5kZXhlZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
TGluZWFybHlJbmRleGVkOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6bGlu
ZWFybHlJbmRleGVkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppbmRleEVuZCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6YWJzb2x1dGVJbmRleEVuZCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlRtcDo6bGluZWFySW5kZXhFbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpUbXA6OnRtcEZvckFic29sdXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6
OnRtcEZvckxpbmVhckluZGV4KToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wTWFwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBNYXA6OlRtcE1hcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcE1hcDo6cmVzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wTWFw
OjpjbGVhcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcE1hcDo6b3BlcmF0b3JbXSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcE1hcDo6YXBwZW5kKToKKwogMjAxNy0wNC0wNiAgUnlh
biBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByMjE1MDQ2LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIxNTA2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDYg
QEAKIAkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTcz
QTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTcyNUZGMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdN
aW5pZmllZEdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAq
LzsgfTsKIAkJMEYxODI5NjkxRTkyRUU1NDAwNUIxRUE4IC8qIEFpckxpdmVuZXNzQWRhcHRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxODI5Njgx
RTkyRUU1MTAwNUIxRUE4IC8qIEFpckxpdmVuZXNzQWRhcHRlci5oICovOyB9OwotCQkwRjE4Mjk2
QjFFOTJGNkRDMDA1QjFFQTggLyogQWlyTGl2ZW5lc3NDb25zdHJhaW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxODI5NkExRTkyRjZEQTAwNUIx
RUE4IC8qIEFpckxpdmVuZXNzQ29uc3RyYWludHMuaCAqLzsgfTsKIAkJMEYxOEQzQ0YxQjU1QTZF
MDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE4RDNDRDFCNTVBNkUwMDAy
QzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEYx
OEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovOyB9
OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE5MENB
QTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgKi87IH07CkBA
IC00NTUsNiArNDU0LDcgQEAKIAkJMEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVl
UmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NUE2MjgyMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QUUyQzQxREY0RjI4MDAwNjZF
RkUxIC8qIFZNSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUI0QTMzMUM4NEYw
RDYwMEYxQjE3RSAvKiBTbG93UGF0aFJldHVyblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI0QTMyMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93
UGF0aFJldHVyblR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjVDRjk4MTFFOTZGMTdGMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MDFFOTZGMTdE
MDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi87IH07CiAJCTBGNUQwODVEMUI4Q0Y5OUQwMDExNDNC
NCAvKiBERkdOb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNUQwODVDMUI4Q0Y5OUQwMDExNDNCNCAvKiBERkdOb2RlT3JpZ2luLmNw
cCAqLzsgfTsKIAkJMEY1RUY5MUUxNjg3OEY3QTAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVFRjkxQjE2ODc4
Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCAqLzsgfTsKIAkJMEY1RUY5MUYxNjg3OEY3RDAw
M0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1RUY5MUMxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNjU5LDcgKzI2
NTksNiBAQAogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vblNsb3dQYXRocy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3MjVGRTFCNDg3MTlBMDBBQzNBNTUgLyogREZH
TWluaWZpZWRHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdNaW5pZmllZEdyYXBoLmNwcDsgcGF0aCA9IGRmZy9ERkdNaW5pZmllZEdyYXBoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxODI5NjgxRTkyRUU1MTAwNUIxRUE4IC8qIEFp
ckxpdmVuZXNzQWRhcHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJM
aXZlbmVzc0FkYXB0ZXIuaDsgcGF0aCA9IGIzL2Fpci9BaXJMaXZlbmVzc0FkYXB0ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYxODI5NkExRTkyRjZEQTAwNUIxRUE4IC8qIEFp
ckxpdmVuZXNzQ29uc3RyYWludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyTGl2ZW5lc3NDb25zdHJhaW50cy5oOyBwYXRoID0gYjMvYWlyL0FpckxpdmVuZXNzQ29uc3Ry
YWludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOEQzQ0QxQjU1QTZFMDAw
MkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwOyBwYXRoID0gZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHBhdGggPSBkZmcvREZHQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMTkwQ0FBMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFz
b24uY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTkxLDYgKzI5OTAsNyBAQAogCQkwRjVBNjI4MTE4
OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBGVExWYWx1ZVJhbmdlLmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVJh
bmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QTYyODIxODhDOThENDAw
NzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMVmFsdWVSYW5nZS5oOyBwYXRoID0gZnRsL0ZUTFZhbHVlUmFuZ2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QjRBMzIxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRo
UmV0dXJuVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG93UGF0aFJl
dHVyblR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1Q0Y5ODAxRTk2RjE3
RDAwQzE4NjkyIC8qIEFpclRtcE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBaXJUbXBNYXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBNYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY1RDA4NUMxQjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTm9kZU9yaWdpbi5j
cHA7IHBhdGggPSBkZmcvREZHTm9kZU9yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUVGh1bmtzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUMxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRUaHVua3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2MjMsNyArNTYyMyw2IEBACiAJCQkJMEZERjY3RDUxRDlE
QzQzRTAwMUI5ODI1IC8qIEFpcktpbmQuaCAqLywKIAkJCQkyNjg0RDQzNzFDMDAxNjFDMDA4MUQ2
NjMgLyogQWlyTGl2ZW5lc3MuaCAqLywKIAkJCQkwRjE4Mjk2ODFFOTJFRTUxMDA1QjFFQTggLyog
QWlyTGl2ZW5lc3NBZGFwdGVyLmggKi8sCi0JCQkJMEYxODI5NkExRTkyRjZEQTAwNUIxRUE4IC8q
IEFpckxpdmVuZXNzQ29uc3RyYWludHMuaCAqLywKIAkJCQkwRkUzNEMxNzFDNEIzOUFFMDAwM0E1
MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAgKi8sCiAJCQkJMEZFMzRDMTgxQzRCMzlB
RTAwMDNBNTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCAqLywKIAkJCQkwRjYxODMyNTFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcCAqLywKQEAgLTU2NTgs
NiArNTY1Nyw3IEBACiAJCQkJMEZFQzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAg
Ki8sCiAJCQkJMEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovLAogCQkJCTBG
RUM4NTZBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggKi8sCisJCQkJMEY1Q0Y5
ODAxRTk2RjE3RDAwQzE4NjkyIC8qIEFpclRtcE1hcC5oICovLAogCQkJCTBGOUMwM0Q0MUU5NDc2
RjAwMENEOTEyNSAvKiBBaXJUbXBTZXQuaCAqLywKIAkJCQkwRkUwRTRBQjFDMjRDOTRBMDAyRTE3
QjYgLyogQWlyVG1wV2lkdGguY3BwICovLAogCQkJCTBGRTBFNEFDMUMyNEM5NEEwMDJFMTdCNiAv
KiBBaXJUbXBXaWR0aC5oICovLApAQCAtODk4NSw3ICs4OTg1LDYgQEAKIAkJCQkyQTRCQjdGMzE4
QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcwMDg3NDIxN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMEYxODI5NkIxRTkyRjZEQzAwNUIxRUE4IC8qIEFpckxpdmVuZXNzQ29uc3Ry
YWludHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NTlFOTJEMUJEMTdGQTQwMDFBQTQxMyAvKiBq
c21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBK
U01vZHVsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlEOTcyMjc1MkRDNTQ0NTlC
OTEyNUI1MzkgLyogSlNNb2R1bGVMb2FkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtOTE4Niw2ICs5
MTg1LDcgQEAKIAkJCQkwRkJCNzNCODFERUYzQUFFMDAyQzAwOUUgLyogUHJldmVudENvbGxlY3Rp
b25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY4OTE2QjAxNTVGMjg2MzAwQ0IyQjlBIC8q
IFByaXZhdGVOYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUxMDAwRjVC
QTMgLyogUHJvZmlsZXJCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1Q0Y5ODExRTk2
RjE3RjAwQzE4NjkyIC8qIEFpclRtcE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5Qjkx
NjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYXJpYWJsZUxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFyaWFibGVMaXZlbmVzcy5oCShyZXZpc2lvbiAyMTUwNjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZUxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDYgKzQ3LDEwIEBAIHN0cnVjdCBWYXJpYWJsZUxpdmVuZXNzQWRhcHRlciB7CiAgICAgewog
ICAgIH0KICAgICAKKyAgICB2b2lkIHByZXBhcmVUb0NvbXB1dGUoKQorICAgIHsKKyAgICB9Cisg
ICAgCiAgICAgdW5zaWduZWQgbnVtSW5kaWNlcygpCiAgICAgewogICAgICAgICByZXR1cm4gcHJv
Yy52YXJpYWJsZXMoKS5zaXplKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2Fu
LmNwcAkocmV2aXNpb24gMjE1MDYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDYgKzM4LDcgQEAKICNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCiAjaW5jbHVkZSAiQWlyUmVn
TGl2ZW5lc3MuaCIKICNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyVG1w
TWFwLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAjaW5jbHVkZSA8d3RmL1JhbmdlLmg+
CiAKQEAgLTEwNSwxMyArMTA2LDEyIEBAIHN0cnVjdCBDbG9iYmVyIHsKICAgICBSZWdpc3RlclNl
dCByZWdzOwogfTsKIAotdGVtcGxhdGU8QmFuayBiYW5rPgogY2xhc3MgTGluZWFyU2NhbiB7CiBw
dWJsaWM6CiAgICAgTGluZWFyU2NhbihDb2RlJiBjb2RlKQogICAgICAgICA6IG1fY29kZShjb2Rl
KQogICAgICAgICAsIG1fc3RhcnRJbmRleChjb2RlLnNpemUoKSkKLSAgICAgICAgLCBtX21hcChj
b2RlLm51bVRtcHMoYmFuaykpCisgICAgICAgICwgbV9tYXAoY29kZSkKICAgICAgICAgLCBtX2lu
c2VydGlvblNldHMoY29kZS5zaXplKCkpCiAgICAgewogICAgIH0KQEAgLTEyNyw3ICsxMjcsMTEg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgIHBy
ZXBhcmVJbnRlcnZhbHMoKTsKLSAgICAgICAgICAgIGF0dGVtcHRTY2FuKCk7CisgICAgICAgICAg
ICBtX2RpZFNwaWxsID0gZmFsc2U7CisgICAgICAgICAgICBmb3JFYWNoQmFuaygKKyAgICAgICAg
ICAgICAgICBbJl0gKEJhbmsgYmFuaykgeworICAgICAgICAgICAgICAgICAgICBhdHRlbXB0U2Nh
bihiYW5rKTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmICghbV9kaWRTcGls
bCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGVtaXRTcGlsbENvZGUoKTsK
QEAgLTEzOSw4ICsxNDMsMTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGJ1aWxkUmVn
aXN0ZXJTZXQoKQogICAgIHsKLSAgICAgICAgbV9yZWdpc3RlcnMgPSBtX2NvZGUucmVnc0luUHJp
b3JpdHlPcmRlcihiYW5rKTsKLSAgICAgICAgbV9yZWdpc3RlclNldC5zZXRBbGwobV9yZWdpc3Rl
cnMpOworICAgICAgICBmb3JFYWNoQmFuaygKKyAgICAgICAgICAgIFsmXSAoQmFuayBiYW5rKSB7
CisgICAgICAgICAgICAgICAgbV9yZWdpc3RlcnNbYmFua10gPSBtX2NvZGUucmVnc0luUHJpb3Jp
dHlPcmRlcihiYW5rKTsKKyAgICAgICAgICAgICAgICBtX3JlZ2lzdGVyU2V0W2JhbmtdLnNldEFs
bChtX3JlZ2lzdGVyc1tiYW5rXSk7CisgICAgICAgICAgICAgICAgbV91bmlmaWVkUmVnaXN0ZXJT
ZXQubWVyZ2UobV9yZWdpc3RlclNldFtiYW5rXSk7CisgICAgICAgICAgICB9KTsKICAgICB9CiAK
ICAgICB2b2lkIGJ1aWxkSW5kaWNlcygpCkBAIC0xNzgsNyArMTg2LDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGJ1aWxkSW50ZXJ2YWxzKCkKICAgICB7Ci0gICAgICAgIFRtcExpdmVuZXNz
PGJhbms+IGxpdmVuZXNzKG1fY29kZSk7CisgICAgICAgIFVuaWZpZWRUbXBMaXZlbmVzcyBsaXZl
bmVzcyhtX2NvZGUpOwogICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fY29kZSkgewogICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZIZWFkID0gdGhpcy0+aW5kZXhP
ZkhlYWQoYmxvY2spOwpAQCAtMjAxLDExICsyMDksOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKICAgICAgICAgICAgICAgICBz
aXplX3QgaW5kZXhPZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyOwogICAgICAg
ICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKLSAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAm
IHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsgdG1wQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcEJhbmsg
IT0gYmFuaykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX21hcFt0bXBdLmludGVydmFsIHw9IGludGVydmFsKGluZGV4T2ZFYXJs
eSwgQXJnOjp0aW1pbmcocm9sZSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgIH0KQEAgLTIyMyw3ICsyMjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2LT5raW5kLm9wY29kZSA9PSBQYXRj
aCkKICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZSZWdzLm1lcmdlKHByZXYtPmV4dHJhQ2xv
YmJlcmVkUmVncygpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJldlJlZ3MuZmlsdGVyKG1fcmVn
aXN0ZXJTZXQpOworICAgICAgICAgICAgICAgICAgICBwcmV2UmVncy5maWx0ZXIobV91bmlmaWVk
UmVnaXN0ZXJTZXQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZSZWdzLmlzRW1wdHko
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xvYmJlcnMuYXBwZW5kKENsb2JiZXIoaW5k
ZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyIC0gMSwgcHJldlJlZ3MpKTsKICAgICAgICAgICAgICAg
ICB9CkBAIC0yNTYsMTAgKzI2MiwxMCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYg
KHZlcmJvc2UoKSkgewogICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJ2YWxzOlxuIik7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBtX2NvZGUubnVt
VG1wcyhiYW5rKTsgKyt0bXBJbmRleCkgewotICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBUbXA6
OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1fY29kZS5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkg
eworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0
bXBdLCAiXG4iKTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogICAgIH0KICAgICAK
QEAgLTI3NiwyMyArMjgyLDI1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzcGlsbEV2ZXJ5
dGhpbmcoKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRtcElu
ZGV4IDwgbV9jb2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgpCi0gICAgICAgICAgICBzcGls
bChUbXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KSk7CisgICAgICAgIG1fY29kZS5mb3JF
YWNoVG1wKAorICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAgc3Bp
bGwodG1wKTsKKyAgICAgICAgICAgIH0pOwogICAgIH0KICAgICAKICAgICB2b2lkIHByZXBhcmVJ
bnRlcnZhbHMoKQogICAgIHsKICAgICAgICAgbV90bXBzLnJlc2l6ZSgwKTsKICAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG1fY29kZS5udW1U
bXBzKGJhbmspOyArK3RtcEluZGV4KSB7Ci0gICAgICAgICAgICBUbXAgdG1wID0gVG1wOjp0bXBG
b3JJbmRleChiYW5rLCB0bXBJbmRleCk7Ci0gICAgICAgICAgICBUbXBEYXRhJiBkYXRhID0gbV9t
YXBbdG1wXTsKLSAgICAgICAgICAgIGlmIChkYXRhLnNwaWxsZWQpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRhdGEuYXNzaWduZWQgPSBSZWco
KTsKLSAgICAgICAgICAgIG1fdG1wcy5hcHBlbmQodG1wKTsKLSAgICAgICAgfQorICAgICAgICBt
X2NvZGUuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgeworICAgICAgICAg
ICAgICAgIFRtcERhdGEmIGRhdGEgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgICAgIGlmIChk
YXRhLnNwaWxsZWQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBkYXRhLmFzc2lnbmVkID0gUmVnKCk7CisgICAgICAgICAgICAg
ICAgbV90bXBzLmFwcGVuZCh0bXApOworICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAg
ICBzdGQ6OnNvcnQoCiAgICAgICAgICAgICBtX3RtcHMuYmVnaW4oKSwgbV90bXBzLmVuZCgpLApA
QCAtMzA2LDcgKzMxNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
VG1wIGFkZFNwaWxsVG1wV2l0aEludGVydmFsKEludGVydmFsIGludGVydmFsKQorICAgIFRtcCBh
ZGRTcGlsbFRtcFdpdGhJbnRlcnZhbChCYW5rIGJhbmssIEludGVydmFsIGludGVydmFsKQogICAg
IHsKICAgICAgICAgVG1wRGF0YSBkYXRhOwogICAgICAgICBkYXRhLmludGVydmFsID0gaW50ZXJ2
YWw7CkBAIC0zMTcsMTcgKzMyNSwxOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdG1wOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGF0dGVtcHRTY2FuKCkKKyAgICB2b2lkIGF0dGVtcHRTY2Fu
KEJhbmsgYmFuaykKICAgICB7CiAgICAgICAgIC8vIFRoaXMgaXMgbW9kZWxlZCBhZnRlciBMaW5l
YXJTY2FuUmVnaXN0ZXJBbGxvY2F0aW9uIGluIEZpZy4gMSBpbgogICAgICAgICAvLyBodHRwOi8v
ZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwLgogCi0gICAgICAgIG1fZGlkU3BpbGwg
PSBmYWxzZTsKICAgICAgICAgbV9hY3RpdmUuY2xlYXIoKTsKICAgICAgICAgbV9hY3RpdmVSZWdz
ID0gUmVnaXN0ZXJTZXQoKTsKICAgICAgICAgCiAgICAgICAgIHNpemVfdCBjbG9iYmVySW5kZXgg
PSAwOwogICAgICAgICBmb3IgKFRtcCYgdG1wIDogbV90bXBzKSB7CisgICAgICAgICAgICBpZiAo
dG1wLmJhbmsoKSAhPSBiYW5rKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgCiAgICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CiAgICAgICAgICAg
ICBzaXplX3QgaW5kZXggPSBlbnRyeS5pbnRlcnZhbC5iZWdpbigpOwogICAgICAgICAgICAgCkBA
IC0zODEsNyArMzkxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB3aGlsZSAoY2xvYmJl
ckluZGV4IDwgbV9jbG9iYmVycy5zaXplKCkgJiYgbV9jbG9iYmVyc1tjbG9iYmVySW5kZXhdLmlu
ZGV4IDwgaW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJJbmRleCsrOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHBvc3NpYmxlUmVncyA9IG1f
cmVnaXN0ZXJTZXQ7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcG9zc2libGVSZWdzID0g
bV9yZWdpc3RlclNldFtiYW5rXTsKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gY2xv
YmJlckluZGV4OyBpIDwgbV9jbG9iYmVycy5zaXplKCkgJiYgbV9jbG9iYmVyc1tpXS5pbmRleCA8
IGVudHJ5LmludGVydmFsLmVuZCgpOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxl
UmVncy5leGNsdWRlKG1fY2xvYmJlcnNbaV0ucmVncyk7CiAgICAgICAgICAgICAgICAgCkBAIC0z
OTMsOSArNDAzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIFBvc3Np
YmxlIHJlZ3M6ICIsIGVudHJ5LnBvc3NpYmxlUmVncywgIlxuIik7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIC8vIEZpbmQgYSBmcmVlIHJlZ2lzdGVyIHRoYXQgd2UgYXJlIGFsbG93ZWQgdG8g
dXNlLgotICAgICAgICAgICAgaWYgKG1fYWN0aXZlLnNpemUoKSAhPSBtX3JlZ2lzdGVycy5zaXpl
KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgIT0gbV9yZWdpc3RlcnNbYmFu
a10uc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBkaWRBc3NpZ24gPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVycykgeworICAgICAgICAgICAg
ICAgIGZvciAoUmVnIHJlZyA6IG1fcmVnaXN0ZXJzW2JhbmtdKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBDb3VsZCBkbyBwcmlvcml0eSBjb2xvcmluZyBoZXJlLgogICAgICAgICAg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcw
MzA0CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9hY3RpdmVSZWdzLmNvbnRhaW5zKHJlZykg
JiYgZW50cnkucG9zc2libGVSZWdzLmNvbnRhaW5zKHJlZykpIHsKQEAgLTQ4MSw4ICs0OTEsNiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmJhbmsoKSAhPSBiYW5rKQotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xv
dCogc3BpbGxlZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxlZDsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzcGlsbGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00
OTMsMTYgKzUwMSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIEZhbGwgYmFjayBvbiB0aGUgaGFyZCB3YXkuCiAgICAgICAgICAgICAgICAgaW5zdC5m
b3JFYWNoVG1wKAotICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUg
cm9sZSwgQmFuayB0bXBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICBbJl0gKFRt
cCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuayBiYW5rLCBXaWR0aCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBCYW5rICE9IGJhbmspCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAg
ICAgU3RhY2tTbG90KiBzcGlsbGVkID0gbV9tYXBbdG1wXS5zcGlsbGVkOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIE9wY29kZSBtb3ZlID0gYmFuayA9PSBHUCA/
IE1vdmUgOiBNb3ZlRG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gYWRkU3Bp
bGxUbXBXaXRoSW50ZXJ2YWwoaW50ZXJ2YWwoaW5kZXhPZkVhcmx5LCBBcmc6OnRpbWluZyhyb2xl
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gYWRkU3BpbGxUbXBXaXRoSW50ZXJ2
YWwoYmFuaywgaW50ZXJ2YWwoaW5kZXhPZkVhcmx5LCBBcmc6OnRpbWluZyhyb2xlKSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0gQXJnOjpTY3JhdGNoKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzQW55VXNlKHJvbGUpKQpAQCAtNTI0LDEwICs1MzAsMTAgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIGlmICh2ZXJib3NlKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkFib3V0IHRv
IGFsbG9jYXRlIHJlZ2lzdGVycy4gU3RhdGUgb2YgYWxsIHRtcHM6XG4iKTsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG1fY29kZS5udW1UbXBzKGJh
bmspOyArK3RtcEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgVG1wIHRtcCA9IFRtcDo6dG1wRm9y
SW5kZXgoYmFuaywgdG1wSW5kZXgpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0
bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9jb2RlLmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7CisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJc
biIpOworICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgZGF0YUxvZygiSVI6XG4iKTsK
ICAgICAgICAgICAgIGRhdGFMb2cobV9jb2RlKTsKICAgICAgICAgfQpAQCAtNTQwLDggKzU0Niw2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmJhbmsoKSAh
PSBiYW5rKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgUmVnIHJlZyA9IG1fbWFwW3Rt
cF0uYXNzaWduZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZykgewpAQCAtNTU1
LDEwICs1NTksMTEgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgQ29kZSYgbV9jb2RlOwot
ICAgIFZlY3RvcjxSZWc+IG1fcmVnaXN0ZXJzOwotICAgIFJlZ2lzdGVyU2V0IG1fcmVnaXN0ZXJT
ZXQ7CisgICAgVmVjdG9yPFJlZz4gbV9yZWdpc3RlcnNbbnVtQmFua3NdOworICAgIFJlZ2lzdGVy
U2V0IG1fcmVnaXN0ZXJTZXRbbnVtQmFua3NdOworICAgIFJlZ2lzdGVyU2V0IG1fdW5pZmllZFJl
Z2lzdGVyU2V0OwogICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBzaXplX3Q+IG1fc3RhcnRJbmRl
eDsKLSAgICBJbmRleE1hcDxUbXA6OkluZGV4ZWQ8YmFuaz4sIFRtcERhdGE+IG1fbWFwOworICAg
IFRtcE1hcDxUbXBEYXRhPiBtX21hcDsKICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUGhhc2VJ
bnNlcnRpb25TZXQ+IG1faW5zZXJ0aW9uU2V0czsKICAgICBWZWN0b3I8Q2xvYmJlcj4gbV9jbG9i
YmVyczsgLy8gQWZ0ZXIgd2UgYWxsb2NhdGUgdGhpcywgd2UgaGFwcGlseSBwb2ludCBwb2ludGVy
cyBpbnRvIGl0LgogICAgIFZlY3RvcjxUbXA+IG1fdG1wczsKQEAgLTU2NywxNSArNTcyLDE0IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2RpZFNwaWxsIHsgZmFsc2UgfTsKIH07CiAKLXRlbXBsYXRl
PEJhbmsgYmFuaz4KIHZvaWQgcnVuTGluZWFyU2NhbihDb2RlJiBjb2RlKQogewogICAgIGlmICh2
ZXJib3NlKCkpCi0gICAgICAgIGRhdGFMb2coIkFpciBiZWZvcmUgbGluZWFyIHNjYW4gZm9yICIs
IGJhbmssICI6XG4iLCBjb2RlKTsKLSAgICBMaW5lYXJTY2FuPGJhbms+IGxpbmVhclNjYW4oY29k
ZSk7CisgICAgICAgIGRhdGFMb2coIkFpciBiZWZvcmUgbGluZWFyIHNjYW46XG4iLCBjb2RlKTsK
KyAgICBMaW5lYXJTY2FuIGxpbmVhclNjYW4oY29kZSk7CiAgICAgbGluZWFyU2Nhbi5ydW4oKTsK
ICAgICBpZiAodmVyYm9zZSgpKQotICAgICAgICBkYXRhTG9nKCJBaXIgYWZ0ZXIgbGluZWFyIHNj
YW4gZm9yICIsIGJhbmssICI6XG4iLCBjb2RlKTsKKyAgICAgICAgZGF0YUxvZygiQWlyIGFmdGVy
IGxpbmVhciBzY2FuOlxuIiwgY29kZSk7CiB9CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQpA
QCAtNTg0LDggKzU4OCw3IEBAIHZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29k
ZSYKIHsKICAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlUmVnaXN0ZXJz
QnlMaW5lYXJTY2FuIik7CiAgICAgcGFkSW50ZXJmZXJlbmNlKGNvZGUpOwotICAgIHJ1bkxpbmVh
clNjYW48RlA+KGNvZGUpOwotICAgIHJ1bkxpbmVhclNjYW48R1A+KGNvZGUpOworICAgIHJ1bkxp
bmVhclNjYW4oY29kZSk7CiAgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoY29kZSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAyMTUw
NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTMwLDYgKzEzMCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CisgICAgdm9pZCBmb3JFYWNoVG1wKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGJhbmtJbmRleCA9IDA7IGJhbmtJbmRleCA8IG51bUJhbmtzOyArK2Jh
bmtJbmRleCkgeworICAgICAgICAgICAgQmFuayBiYW5rID0gc3RhdGljX2Nhc3Q8QmFuaz4oYmFu
a0luZGV4KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bVRtcHMgPSB0aGlzLT5udW1UbXBzKGJh
bmspOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVRtcHM7ICsraSkK
KyAgICAgICAgICAgICAgICBmdW5jKFRtcDo6dG1wRm9ySW5kZXgoYmFuaywgaSkpOworICAgICAg
ICB9CisgICAgfQogCiAgICAgdW5zaWduZWQgY2FsbEFyZ0FyZWFTaXplSW5CeXRlcygpIGNvbnN0
IHsgcmV0dXJuIG1fY2FsbEFyZ0FyZWFTaXplOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDIxNTA2MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NiArNTAsNyBAQCB1c2luZyBUbXBMaXZlbmVzcyA9IExpdmVuZXNzPFRtcExpdmVuZXNzCiAKIHR5
cGVkZWYgTGl2ZW5lc3M8VG1wTGl2ZW5lc3NBZGFwdGVyPEdQPj4gR1BMaXZlbmVzczsKIHR5cGVk
ZWYgTGl2ZW5lc3M8VG1wTGl2ZW5lc3NBZGFwdGVyPEZQPj4gRlBMaXZlbmVzczsKK3R5cGVkZWYg
TGl2ZW5lc3M8VW5pZmllZFRtcExpdmVuZXNzQWRhcHRlcj4gVW5pZmllZFRtcExpdmVuZXNzOwog
dHlwZWRlZiBMaXZlbmVzczxTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXI+IFN0YWNrU2xvdExpdmVu
ZXNzOwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzQWRhcHRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3NBZGFwdGVyLmgJKHJldmlzaW9u
IDIxNTA2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3NBZGFw
dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJBaXJDRkcu
aCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKLSNp
bmNsdWRlICJBaXJMaXZlbmVzc0NvbnN0cmFpbnRzLmgiCiAjaW5jbHVkZSAiQWlyU3RhY2tTbG90
LmgiCiAjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgogCkBAIC00MSwxMCArNDAsNTkgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRlcj4KIHN0cnVjdCBMaXZlbmVzc0FkYXB0ZXIgewogICAgIHR5
cGVkZWYgQWlyOjpDRkcgQ0ZHOwogICAgIAorICAgIHR5cGVkZWYgVmVjdG9yPHVuc2lnbmVkLCA0
PiBBY3Rpb25zTGlzdDsKKyAgICAKKyAgICBzdHJ1Y3QgQWN0aW9ucyB7CisgICAgICAgIEFjdGlv
bnMoKSB7IH0KKyAgICAgICAgCisgICAgICAgIEFjdGlvbnNMaXN0IHVzZTsKKyAgICAgICAgQWN0
aW9uc0xpc3QgZGVmOworICAgIH07CisgICAgCisgICAgdHlwZWRlZiBWZWN0b3I8QWN0aW9ucywg
MCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IEFjdGlvbnNGb3JCb3VuZGFyeTsKKyAgICAKICAgICBM
aXZlbmVzc0FkYXB0ZXIoQ29kZSYgY29kZSkKICAgICAgICAgOiBjb2RlKGNvZGUpCi0gICAgICAg
ICwgY29uc3RyYWludHMoY29kZSkKKyAgICAgICAgLCBtX2FjdGlvbnMoY29kZS5zaXplKCkpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBBZGFwdGVyJiBhZGFwdGVyKCkKKyAgICB7CisgICAgICAg
IHJldHVybiAqc3RhdGljX2Nhc3Q8QWRhcHRlcio+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHByZXBhcmVUb0NvbXB1dGUoKQogICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGNvZGUpIHsKKyAgICAgICAgICAgIEFjdGlvbnNGb3JCb3VuZGFyeSYgYWN0aW9uc0Zv
ckJvdW5kYXJ5ID0gbV9hY3Rpb25zW2Jsb2NrXTsKKyAgICAgICAgICAgIGFjdGlvbnNGb3JCb3Vu
ZGFyeS5yZXNpemUoYmxvY2stPnNpemUoKSArIDEpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsK
KyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAg
ICAgICAgICAgICAgaW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKKyAgICAg
ICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6
Um9sZSByb2xlLCBCYW5rIGJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIUFkYXB0ZXI6OmFjY2VwdHNCYW5rKGJhbmspIHx8ICFBZGFwdGVyOjphY2NlcHRzUm9sZShy
b2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYWRh
cHRlcigpLnZhbHVlVG9JbmRleCh0aGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlVc2Uocm9sZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWN0aW9uc0ZvckJvdW5kYXJ5W2luc3RJbmRleF0udXNlLmFw
cGVuZElmTm90Q29udGFpbnMoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFy
Zzo6aXNFYXJseURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25z
Rm9yQm91bmRhcnlbaW5zdEluZGV4XS5kZWYuYXBwZW5kSWZOb3RDb250YWlucyhpbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVVc2Uocm9sZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWN0aW9uc0ZvckJvdW5kYXJ5W2luc3RJbmRleCArIDFdLnVz
ZS5hcHBlbmRJZk5vdENvbnRhaW5zKGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rp
b25zRm9yQm91bmRhcnlbaW5zdEluZGV4ICsgMV0uZGVmLmFwcGVuZElmTm90Q29udGFpbnMoaW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBBY3Rpb25zJiBhY3Rpb25zQXQoQmFzaWNCbG9jayogYmxvY2ssIHVu
c2lnbmVkIGluc3RCb3VuZGFyeUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWN0aW9u
c1tibG9ja11baW5zdEJvdW5kYXJ5SW5kZXhdOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBi
bG9ja1NpemUoQmFzaWNCbG9jayogYmxvY2spCkBAIC01NSwxOSArMTAzLDE5IEBAIHN0cnVjdCBM
aXZlbmVzc0FkYXB0ZXIgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBm
b3JFYWNoVXNlKEJhc2ljQmxvY2sqIGJsb2NrLCBzaXplX3QgaW5zdEJvdW5kYXJ5SW5kZXgsIGNv
bnN0IEZ1bmMmIGZ1bmMpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDogY29u
c3RyYWludHMuYXQoYmxvY2ssIGluc3RCb3VuZGFyeUluZGV4KS51c2UpCisgICAgICAgIGZvciAo
dW5zaWduZWQgaW5kZXggOiBhY3Rpb25zQXQoYmxvY2ssIGluc3RCb3VuZGFyeUluZGV4KS51c2Up
CiAgICAgICAgICAgICBmdW5jKGluZGV4KTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hEZWYoQmFzaWNCbG9jayogYmxvY2ssIHNpemVf
dCBpbnN0Qm91bmRhcnlJbmRleCwgY29uc3QgRnVuYyYgZnVuYykKICAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggOiBjb25zdHJhaW50cy5hdChibG9jaywgaW5zdEJvdW5kYXJ5SW5k
ZXgpLmRlZikKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA6IGFjdGlvbnNBdChibG9jaywg
aW5zdEJvdW5kYXJ5SW5kZXgpLmRlZikKICAgICAgICAgICAgIGZ1bmMoaW5kZXgpOwogICAgIH0K
IAogICAgIENvZGUmIGNvZGU7Ci0gICAgTGl2ZW5lc3NDb25zdHJhaW50czxBZGFwdGVyPiBjb25z
dHJhaW50czsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQWN0aW9uc0ZvckJvdW5kYXJ5PiBt
X2FjdGlvbnM7CiB9OwogCiB0ZW1wbGF0ZTxCYW5rIGFkYXB0ZXJCYW5rLCBBcmc6OlRlbXBlcmF0
dXJlIG1pbmltdW1UZW1wZXJhdHVyZSA9IEFyZzo6Q29sZD4KQEAgLTg0LDggKzEzMiw3IEBAIHN0
cnVjdCBUbXBMaXZlbmVzc0FkYXB0ZXIgOiBMaXZlbmVzc0FkYXAKIAogICAgIHVuc2lnbmVkIG51
bUluZGljZXMoKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgbnVtVG1wcyA9IEJhc2U6OmNvZGUu
bnVtVG1wcyhhZGFwdGVyQmFuayk7Ci0gICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxh
ZGFwdGVyQmFuaz46OmFic29sdXRlSW5kZXgobnVtVG1wcyk7CisgICAgICAgIHJldHVybiBUbXA6
OmFic29sdXRlSW5kZXhFbmQoQmFzZTo6Y29kZSwgYWRhcHRlckJhbmspOwogICAgIH0KICAgICBz
dGF0aWMgYm9vbCBhY2NlcHRzQmFuayhCYW5rIGJhbmspIHsgcmV0dXJuIGJhbmsgPT0gYWRhcHRl
ckJhbms7IH0KICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzUm9sZShBcmc6OlJvbGUgcm9sZSkgeyBy
ZXR1cm4gQXJnOjp0ZW1wZXJhdHVyZShyb2xlKSA+PSBtaW5pbXVtVGVtcGVyYXR1cmU7IH0KQEAg
LTkzLDYgKzE0MCwyOSBAQCBzdHJ1Y3QgVG1wTGl2ZW5lc3NBZGFwdGVyIDogTGl2ZW5lc3NBZGFw
CiAgICAgc3RhdGljIFRtcCBpbmRleFRvVmFsdWUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIEFi
c29sdXRlVG1wTWFwcGVyPGFkYXB0ZXJCYW5rPjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaW5kZXgp
OyB9CiB9OwogCitzdHJ1Y3QgVW5pZmllZFRtcExpdmVuZXNzQWRhcHRlciA6IExpdmVuZXNzQWRh
cHRlcjxVbmlmaWVkVG1wTGl2ZW5lc3NBZGFwdGVyPiB7CisgICAgdHlwZWRlZiBMaXZlbmVzc0Fk
YXB0ZXI8VW5pZmllZFRtcExpdmVuZXNzQWRhcHRlcj4gQmFzZTsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3RleHByIGNvbnN0IGNoYXIqIG5hbWUgPSAiVW5pZmllZFRtcExpdmVuZXNzIjsKKworICAg
IHR5cGVkZWYgVG1wIFRoaW5nOworICAgIAorICAgIFVuaWZpZWRUbXBMaXZlbmVzc0FkYXB0ZXIo
Q29kZSYgY29kZSkKKyAgICAgICAgOiBCYXNlKGNvZGUpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBudW1JbmRpY2VzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBUbXA6OmxpbmVh
ckluZGV4RW5kKGNvZGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzQmFu
ayhCYW5rKSB7IHJldHVybiB0cnVlOyB9CisgICAgc3RhdGljIGJvb2wgYWNjZXB0c1JvbGUoQXJn
OjpSb2xlKSB7IHJldHVybiB0cnVlOyB9CisgICAgdW5zaWduZWQgdmFsdWVUb0luZGV4KFRtcCB0
bXApIHsgcmV0dXJuIHRtcC5saW5lYXJseUluZGV4ZWQoY29kZSkuaW5kZXgoKTsgfQorICAgIFRt
cCBpbmRleFRvVmFsdWUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIFRtcDo6dG1wRm9yTGluZWFy
SW5kZXgoY29kZSwgaW5kZXgpOyB9Cit9OworCiBzdHJ1Y3QgU3RhY2tTbG90TGl2ZW5lc3NBZGFw
dGVyIDogTGl2ZW5lc3NBZGFwdGVyPFN0YWNrU2xvdExpdmVuZXNzQWRhcHRlcj4gewogICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogbmFtZSA9ICJTdGFja1Nsb3RMaXZlbmVzcyI7CiAg
ICAgdHlwZWRlZiBTdGFja1Nsb3QqIFRoaW5nOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMaXZlbmVzc0NvbnN0cmFpbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzc0NvbnN0cmFpbnRzLmgJKHJldmlzaW9uIDIx
NTA2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3NDb25zdHJh
aW50cy5oCShub25leGlzdGVudCkKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEIz
X0pJVCkKLQotI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKLSNpbmNsdWRlICJBaXJDb2RlLmgi
Ci0jaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvSW5kZXhNYXAuaD4K
LQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdGVyPgotY2xhc3MgTGl2ZW5lc3NDb25zdHJhaW50cyB7Ci1wdWJs
aWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8dW5zaWduZWQsIDQ+IEFjdGlvbnNMaXN0OwotICAgIAot
ICAgIHN0cnVjdCBBY3Rpb25zIHsKLSAgICAgICAgQWN0aW9ucygpIHsgfQotICAgICAgICAKLSAg
ICAgICAgQWN0aW9uc0xpc3QgdXNlOwotICAgICAgICBBY3Rpb25zTGlzdCBkZWY7Ci0gICAgfTsK
LSAgICAKLSAgICB0eXBlZGVmIFZlY3RvcjxBY3Rpb25zLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxv
dz4gQWN0aW9uc0ZvckJvdW5kYXJ5OwotICAgIAotICAgIExpdmVuZXNzQ29uc3RyYWludHMoQ29k
ZSYgY29kZSkKLSAgICAgICAgOiBtX2NvZGUoY29kZSkKLSAgICAgICAgLCBtX2FjdGlvbnMoY29k
ZS5zaXplKCkpCi0gICAgewotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2Rl
KSB7Ci0gICAgICAgICAgICBBY3Rpb25zRm9yQm91bmRhcnkmIGFjdGlvbnNGb3JCb3VuZGFyeSA9
IG1fYWN0aW9uc1tibG9ja107Ci0gICAgICAgICAgICBhY3Rpb25zRm9yQm91bmRhcnkucmVzaXpl
KGJsb2NrLT5zaXplKCkgKyAxKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7Ci0gICAgICAgICAg
ICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwotICAgICAgICAgICAgICAg
IGluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCi0gICAgICAgICAgICAgICAg
ICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwg
QmFuayBiYW5rLCBXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBZGFwdGVy
OjphY2NlcHRzQmFuayhiYW5rKSB8fCAhQWRhcHRlcjo6YWNjZXB0c1JvbGUocm9sZSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEFkYXB0ZXI6OnZhbHVl
VG9JbmRleCh0aGluZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlVc2Uocm9sZSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWN0aW9uc0ZvckJvdW5kYXJ5W2luc3RJbmRleF0udXNlLmFwcGVuZElmTm90Q29u
dGFpbnMoaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURl
Zihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zRm9yQm91bmRhcnlb
aW5zdEluZGV4XS5kZWYuYXBwZW5kSWZOb3RDb250YWlucyhpbmRleCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVVc2Uocm9sZSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWN0aW9uc0ZvckJvdW5kYXJ5W2luc3RJbmRleCArIDFdLnVzZS5hcHBlbmRJZk5v
dENvbnRhaW5zKGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0
ZURlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zRm9yQm91bmRh
cnlbaW5zdEluZGV4ICsgMV0uZGVmLmFwcGVuZElmTm90Q29udGFpbnMoaW5kZXgpOwotICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICBBY3Rpb25zJiBhdChCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5zdEJvdW5kYXJ5
SW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9hY3Rpb25zW2Jsb2NrXVtpbnN0Qm91bmRh
cnlJbmRleF07Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBDb2RlJiBtX2NvZGU7Ci0gICAg
SW5kZXhNYXA8QmFzaWNCbG9jayosIEFjdGlvbnNGb3JCb3VuZGFyeT4gbV9hY3Rpb25zOwotfTsK
LQotfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgotCi0jZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVz
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2
ZW5lc3MuaAkocmV2aXNpb24gMjE1MDYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJSZWdMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxNSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIExvY2FsQ2Fs
YyhVbmlmaWVkVG1wTGl2ZW5lc3MmIGxpdmVuZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAg
ICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChUbXAg
dG1wIDogbGl2ZW5lc3MubGl2ZUF0VGFpbChibG9jaykpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIG1fd29ya3NldC5zZXQodG1wLnJlZygp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgY29uc3QgUmVn
aXN0ZXJTZXQmIGxpdmUoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV93
b3Jrc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2
aXNpb24gMjE1MDYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIHRlbXBsYXRlPD4gY29uc3QgY2hhciog
Y29uc3QgVG1wOjpJbmRleGUKIHRlbXBsYXRlPD4gY29uc3QgY2hhciogY29uc3QgVG1wOjpJbmRl
eGVkPEZQPjo6ZHVtcFByZWZpeCA9ICIlZnRtcCI7CiB0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNv
bnN0IFRtcDo6QWJzb2x1dGVseUluZGV4ZWQ8R1A+OjpkdW1wUHJlZml4ID0gIiVhYnMiOwogdGVt
cGxhdGU8PiBjb25zdCBjaGFyKiBjb25zdCBUbXA6OkFic29sdXRlbHlJbmRleGVkPEZQPjo6ZHVt
cFByZWZpeCA9ICIlZmFicyI7Citjb25zdCBjaGFyKiBjb25zdCBUbXA6OkxpbmVhcmx5SW5kZXhl
ZDo6ZHVtcFByZWZpeCA9ICIlbHRtcCI7CiAKIHZvaWQgVG1wOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJl
dmlzaW9uIDIxNTA2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAogY2xhc3MgQXJnOworY2xhc3MgQ29kZTsKIAogLy8g
QSBUbXAgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiBhIHJlZ2lzdGVyLiBJdCBjYW4gYmUgdXNlZCB0
byByZWZlciB0byBhbnkgR1BSIG9yIEZQUi4gSXQgY2FuIGFsc28KIC8vIGJlIHVzZWQgdG8gcmVm
ZXIgdG8gYW4gdW5hbGxvY2F0ZWQgcmVnaXN0ZXIgKGkuZS4gYSB0ZW1wb3JhcnkpLiBMaWtlIG1h
bnkgQWlyIGNsYXNzZXMsIHdlIHVzZQpAQCAtMTY1LDYgKzE2Niw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+IGNsYXNzIEluZGV4ZWQ7CiAgICAgdGVtcGxhdGU8QmFu
ayBiYW5rPiBjbGFzcyBBYnNvbHV0ZWx5SW5kZXhlZDsKKyAgICBjbGFzcyBMaW5lYXJseUluZGV4
ZWQ7CiAgICAgCiAgICAgdGVtcGxhdGU8QmFuayBiYW5rPgogICAgIEluZGV4ZWQ8YmFuaz4gaW5k
ZXhlZCgpIGNvbnN0OwpAQCAtMTcyLDYgKzE3NCwxMiBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
QmFuayBiYW5rPgogICAgIEFic29sdXRlbHlJbmRleGVkPGJhbms+IGFic29sdXRlbHlJbmRleGVk
KCkgY29uc3Q7CiAgICAgCisgICAgTGluZWFybHlJbmRleGVkIGxpbmVhcmx5SW5kZXhlZChDb2Rl
JikgY29uc3Q7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgaW5kZXhFbmQoQ29kZSYsIEJhbmspOwor
ICAgIHN0YXRpYyB1bnNpZ25lZCBhYnNvbHV0ZUluZGV4RW5kKENvZGUmLCBCYW5rKTsKKyAgICBz
dGF0aWMgdW5zaWduZWQgbGluZWFySW5kZXhFbmQoQ29kZSYpOworICAgIAogICAgIGJvb2wgaXNB
bGl2ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gISEqdGhpczsKQEAgLTIxNCw3ICsy
MjIsOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBUbXAgdG1wRm9yQWJzb2x1
dGVJbmRleChCYW5rLCB1bnNpZ25lZCk7Ci0KKyAgICAKKyAgICBzdGF0aWMgVG1wIHRtcEZvckxp
bmVhckluZGV4KENvZGUmLCB1bnNpZ25lZCk7CisgICAgCiBwcml2YXRlOgogICAgIHN0YXRpYyBp
bnQgZW5jb2RlR1AodW5zaWduZWQgaW5kZXgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJldmlzaW9uIDIxNTA2MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckFy
Zy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJUbXAuaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewpAQCAtMTI0LDYgKzEyNSwy
NyBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAorY2xhc3MgVG1wOjpMaW5lYXJseUluZGV4ZWQgOiBw
dWJsaWMgVG1wIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFBy
ZWZpeDsKKyAgICAKKyAgICBMaW5lYXJseUluZGV4ZWQoVG1wIHRtcCwgQ29kZSYgY29kZSkKKyAg
ICAgICAgOiBUbXAodG1wKQorICAgICAgICAsIG1fY29kZSgmY29kZSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgaW5kZXgoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxH
UD46OmFic29sdXRlSW5kZXgoKnRoaXMpOworICAgICAgICByZXR1cm4gYWJzb2x1dGVJbmRleEVu
ZCgqbV9jb2RlLCBHUCkgKyBBYnNvbHV0ZVRtcE1hcHBlcjxGUD46OmFic29sdXRlSW5kZXgoKnRo
aXMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDb2RlKiBtX2NvZGU7Cit9OworCiB0ZW1wbGF0
ZTxCYW5rIHRoZUJhbms+CiBpbmxpbmUgVG1wOjpJbmRleGVkPHRoZUJhbms+IFRtcDo6aW5kZXhl
ZCgpIGNvbnN0CiB7CkBAIC0xMzYsNyArMTU4LDI5IEBAIGlubGluZSBUbXA6OkFic29sdXRlbHlJ
bmRleGVkPHRoZUJhbms+IFQKICAgICByZXR1cm4gQWJzb2x1dGVseUluZGV4ZWQ8dGhlQmFuaz4o
KnRoaXMpOwogfQogCi1pbmxpbmUgVG1wIFRtcDo6dG1wRm9yQWJzb2x1dGVJbmRleChCYW5rIGJh
bmssIHVuc2lnbmVkIGluZGV4KQoraW5saW5lIFRtcDo6TGluZWFybHlJbmRleGVkIFRtcDo6bGlu
ZWFybHlJbmRleGVkKENvZGUmIGNvZGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIExpbmVhcmx5SW5k
ZXhlZCgqdGhpcywgY29kZSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgVG1wOjppbmRl
eEVuZChDb2RlJiBjb2RlLCBCYW5rIGJhbmspCit7CisgICAgcmV0dXJuIGNvZGUubnVtVG1wcyhi
YW5rKTsKK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBUbXA6OmFic29sdXRlSW5kZXhFbmQo
Q29kZSYgY29kZSwgQmFuayBiYW5rKQoreworICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICBy
ZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8R1A+OjphYnNvbHV0ZUluZGV4KGNvZGUubnVtVG1wcyhH
UCkpOworICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxGUD46OmFic29sdXRlSW5kZXgoY29k
ZS5udW1UbXBzKEZQKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgVG1wOjpsaW5lYXJJ
bmRleEVuZChDb2RlJiBjb2RlKQoreworICAgIHJldHVybiBhYnNvbHV0ZUluZGV4RW5kKGNvZGUs
IEdQKSArIGFic29sdXRlSW5kZXhFbmQoY29kZSwgRlApOworfQorCitBTFdBWVNfSU5MSU5FIFRt
cCBUbXA6OnRtcEZvckFic29sdXRlSW5kZXgoQmFuayBiYW5rLCB1bnNpZ25lZCBpbmRleCkKIHsK
ICAgICBpZiAoYmFuayA9PSBHUCkKICAgICAgICAgcmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPEdQ
Pjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaW5kZXgpOwpAQCAtMTQ0LDYgKzE4OCwxNCBAQCBpbmxp
bmUgVG1wIFRtcDo6dG1wRm9yQWJzb2x1dGVJbmRleChCYW5rCiAgICAgcmV0dXJuIEFic29sdXRl
VG1wTWFwcGVyPEZQPjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaW5kZXgpOwogfQogCitBTFdBWVNf
SU5MSU5FIFRtcCBUbXA6OnRtcEZvckxpbmVhckluZGV4KENvZGUmIGNvZGUsIHVuc2lnbmVkIGlu
ZGV4KQoreworICAgIHVuc2lnbmVkIGdwRW5kID0gYWJzb2x1dGVJbmRleEVuZChjb2RlLCBHUCk7
CisgICAgaWYgKGluZGV4IDwgZ3BFbmQpCisgICAgICAgIHJldHVybiB0bXBGb3JBYnNvbHV0ZUlu
ZGV4KEdQLCBpbmRleCk7CisgICAgcmV0dXJuIHRtcEZvckFic29sdXRlSW5kZXgoRlAsIGluZGV4
IC0gZ3BFbmQpOworfQorCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJUbXBNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clRtcE1hcC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVG1wTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgi
CisjaW5jbHVkZSA8d3RmL0luZGV4TWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gQXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhpcywgeW91
IGNvdWxkIHVzZSBJbmRleE1hcDxUbXA6OkxpbmVhcmx5SW5kZXhlZCwgLi4uPiwgYnV0IHRoaXMg
d291bGQgZmFpbAorLy8gYXMgc29vbiBhcyB5b3UgYWRkZWQgYSBuZXcgR1AgdG1wLgorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZT4KK2NsYXNzIFRtcE1hcCB7CitwdWJsaWM6CisgICAgVG1wTWFw
KCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgVG1wTWFwKENvZGUmIGNvZGUsIGNvbnN0IEFyZ3MmLi4uIGFyZ3MpCisgICAgICAgIDogbV9n
cChUbXA6OmFic29sdXRlSW5kZXhFbmQoY29kZSwgR1ApLCBhcmdzLi4uKQorICAgICAgICAsIG1f
ZnAoVG1wOjphYnNvbHV0ZUluZGV4RW5kKGNvZGUsIEZQKSwgYXJncy4uLikKKyAgICB7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCByZXNpemUo
Q29kZSYgY29kZSwgY29uc3QgQXJncyYuLi4gYXJncykKKyAgICB7CisgICAgICAgIG1fZ3AucmVz
aXplKFRtcDo6YWJzb2x1dGVJbmRleEVuZChjb2RlLCBHUCksIGFyZ3MuLi4pOworICAgICAgICBt
X2ZwLnJlc2l6ZShUbXA6OmFic29sdXRlSW5kZXhFbmQoY29kZSwgRlApLCBhcmdzLi4uKTsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICB2b2lkIGNsZWFy
KGNvbnN0IEFyZ3MmLi4uIGFyZ3MpCisgICAgeworICAgICAgICBtX2dwLmNsZWFyKGFyZ3MuLi4p
OworICAgICAgICBtX2ZwLmNsZWFyKGFyZ3MuLi4pOworICAgIH0KKyAgICAKKyAgICBjb25zdCBW
YWx1ZSYgb3BlcmF0b3JbXShUbXAgdG1wKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHRtcC5p
c0dQKCkpCisgICAgICAgICAgICByZXR1cm4gbV9ncFt0bXBdOworICAgICAgICByZXR1cm4gbV9m
cFt0bXBdOworICAgIH0KKworICAgIFZhbHVlJiBvcGVyYXRvcltdKFRtcCB0bXApCisgICAgewor
ICAgICAgICBpZiAodG1wLmlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBtX2dwW3RtcF07Cisg
ICAgICAgIHJldHVybiBtX2ZwW3RtcF07CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFBhc3NlZFZhbHVlPgorICAgIHZvaWQgYXBwZW5kKFRtcCB0bXAsIFBhc3NlZFZhbHVlJiYg
dmFsdWUpCisgICAgeworICAgICAgICBpZiAodG1wLmlzR1AoKSkKKyAgICAgICAgICAgIG1fZ3Au
YXBwZW5kKHRtcCwgc3RkOjpmb3J3YXJkPFBhc3NlZFZhbHVlPih2YWx1ZSkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2ZwLmFwcGVuZCh0bXAsIHN0ZDo6Zm9yd2FyZDxQYXNzZWRWYWx1
ZT4odmFsdWUpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8VG1wOjpBYnNvbHV0
ZWx5SW5kZXhlZDxHUD4sIFZhbHVlPiBtX2dwOworICAgIEluZGV4TWFwPFRtcDo6QWJzb2x1dGVs
eUluZGV4ZWQ8RlA+LCBWYWx1ZT4gbV9mcDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MTUwNjEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIxIEBACisyMDE3LTA0LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgTGluZWFyIHNjYW4gc2hvdWxkIHJ1biBsaXZlbmVzcyBvbmx5IG9uY2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDU2OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSGF2ZSBMaXZl
bmVzczw+IGNhbGwgQWRhcHRlcjo6cHJlcGFyZVRvQ29tcHV0ZSgpLCBzaW5jZSB0aGlzIG1ha2Vz
IGl0IGEgbG90IGVhc2llciB0byBpbXBsZW1lbnQKKyAgICAgICAgY29uc3RyYWludCBnZW5lcmF0
aW9uLCBzaW5jZSB0aGUgY29uc3RyYWludCBnZW5lcmF0b3Igbm93IGdldHMgdG8gcnVuIGFmdGVy
IHRoZSBBZGFwdGVyIGlzIGZ1bGx5CisgICAgICAgIGNvbnN0cnVjdGVkLgorICAgICAgICAKKyAg
ICAgICAgKiB3dGYvSW5kZXhNYXAuaDoKKyAgICAgICAgKFdURjo6SW5kZXhNYXA6OmFwcGVuZCk6
IEFsc28gbWFrZSB0aGlzIGEgYml0IG1vcmUgdmVyc2F0aWxlLgorICAgICAgICAqIHd0Zi9MaXZl
bmVzcy5oOgorICAgICAgICAoV1RGOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpJdGVyYWJsZTo6Y29u
dGFpbnMpOgorICAgICAgICAoV1RGOjpMaXZlbmVzczo6SXRlcmFibGU6OmNvbnRhaW5zKToKKyAg
ICAgICAgKFdURjo6TGl2ZW5lc3M6OmNvbXB1dGUpOgorCiAyMDE3LTA0LTA2ICBBbmRyZWFzIEts
aW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBLaWxsIGFueSBXZWJDb250ZW50IHBy
b2Nlc3MgdXNpbmcgb3ZlciAxNiBHQiBvZiBtZW1vcnkuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9J
bmRleE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4TWFwLmgJKHJldmlz
aW9uIDIxNTA2MSkKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4TWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgxLDEwICs4MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3ZlY3RvcltJbmRl
eEtleVR5cGU8S2V5Pjo6aW5kZXgoa2V5KV07CiAgICAgfQogICAgIAotICAgIHZvaWQgYXBwZW5k
KGNvbnN0IEtleSYga2V5LCBWYWx1ZSB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXNz
ZWRWYWx1ZT4KKyAgICB2b2lkIGFwcGVuZChjb25zdCBLZXkmIGtleSwgUGFzc2VkVmFsdWUmJiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEluZGV4S2V5VHlwZTxLZXk+Ojpp
bmRleChrZXkpID09IG1fdmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIG1fdmVjdG9yLmFwcGVuZCh2
YWx1ZSk7CisgICAgICAgIG1fdmVjdG9yLmFwcGVuZChzdGQ6OmZvcndhcmQ8UGFzc2VkVmFsdWU+
KHZhbHVlKSk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYvTGl2ZW5l
c3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9MaXZlbmVzcy5oCShyZXZpc2lvbiAy
MTUwNjEpCisrKyBTb3VyY2UvV1RGL3d0Zi9MaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBib29sIGNv
bnRhaW5zKGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZykgY29uc3QKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9saXZlbmVzcy5tX3dvcmtzZXQuY29u
dGFpbnMoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmNvbnRhaW5zKG1fbGl2ZW5lc3MudmFsdWVUb0luZGV4
KHRoaW5nKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZToKQEAgLTIxMCw3ICsy
MTAsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCB0eXBlbmFtZSBB
ZGFwdGVyOjpUaGluZyYgdGhpbmcpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBtX2xpdmVuZXNzLm1fd29ya3NldC5jb250YWlucyhBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhp
bmcpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2xpdmVuZXNzLm1fd29ya3NldC5jb250YWlucyht
X2xpdmVuZXNzLnZhbHVlVG9JbmRleCh0aGluZykpOwogICAgICAgICB9CiAKICAgICBwcml2YXRl
OgpAQCAtMjU4LDYgKzI1OCw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2b2lkIGNvbXB1
dGUoKQogICAgIHsKKyAgICAgICAgQWRhcHRlcjo6cHJlcGFyZVRvQ29tcHV0ZSgpOworICAgICAg
ICAKICAgICAgICAgLy8gVGhlIGxpdmVBdFRhaWwgb2YgZWFjaCBibG9jayBhdXRvbWF0aWNhbGx5
IGNvbnRhaW5zIHRoZSBMYXRlVXNlJ3Mgb2YgdGhlIHRlcm1pbmFsLgogICAgICAgICBmb3IgKHVu
c2lnbmVkIGJsb2NrSW5kZXggPSBtX2NmZy5udW1Ob2RlcygpOyBibG9ja0luZGV4LS07KSB7CiAg
ICAgICAgICAgICB0eXBlbmFtZSBDRkc6Ok5vZGUgYmxvY2sgPSBtX2NmZy5ub2RlKGJsb2NrSW5k
ZXgpOwo=
</data>
<flag name="review"
          id="327788"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>