<?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>230683</bug_id>
          
          <creation_ts>2021-09-23 04:11:36 -0700</creation_ts>
          <short_desc>Factor LegacyInlineFlowBox painting into a class</short_desc>
          <delta_ts>2021-09-23 07:13:20 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Antti Koivisto">koivisto</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1796448</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-23 04:11:36 -0700</bug_when>
    <thetext>Move code out of LegacyInlineFlowBox</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796450</commentid>
    <comment_count>1</comment_count>
      <attachid>439036</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-23 04:24:19 -0700</bug_when>
    <thetext>Created attachment 439036
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796451</commentid>
    <comment_count>2</comment_count>
      <attachid>439037</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-23 04:37:29 -0700</bug_when>
    <thetext>Created attachment 439037
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796480</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-23 07:12:03 -0700</bug_when>
    <thetext>Committed r282959 (242049@main): &lt;https://commits.webkit.org/242049@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 439037.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796481</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-23 07:13:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/83445936&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439036</attachid>
            <date>2021-09-23 04:24:19 -0700</date>
            <delta_ts>2021-09-23 04:37:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230683-20210923142417.patch</filename>
            <type>text/plain</type>
            <size>63946</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyOTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2Y4ZGJjYzhkZDhkNTkz
MTMwMzhkM2I1ZmZlNmVhMWFjMWZhOTFhYy4uYjY1MzRhODc0NmE3MTE3ZmRjNGYyMjc3N2RiMzgz
ODJlMWU2MjcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDIxLTA5LTIzICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgTGVnYWN5SW5s
aW5lRmxvd0JveCBwYWludGluZyBpbnRvIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDY4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbmxpbmVCb3hQYWludGVyLCBzaW1p
bGFyIHRvIFRleHRCb3hQYWludGVyLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVCb3hQYWludGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVC
b3hQYWludGVyOjpJbmxpbmVCb3hQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJv
eFBhaW50ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNsaXBSZWN0Rm9yTmluZVBpZWNl
SW1hZ2VTdHJpcCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3hQYWludGVyOjpwYWludE1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94UGFpbnRlcjo6cGFpbnREZWNvcmF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3hQYWludGVyOjpzdHlsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3hQYWludGVyOjpjb25zdHJhaW5Ub0xpbmVUb3BBbmRC
b3R0b21JZk5lZWRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3hQYWludGVy
OjpwYWludEZpbGxMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94UGFpbnRlcjo6
cGFpbnRGaWxsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94UGFpbnRlcjo6cGFp
bnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94UGFpbnRlcjo6cmVuZGVyZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94UGFpbnRlcjo6aXNIb3Jpem9udGFsIGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lJbmxpbmVGbG93Qm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lJbmxpbmVGbG93Qm94OjpwYWludEZpbGxMYXllcnMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lRmxvd0JveDo6cGFpbnRGaWxsTGF5ZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lRmxvd0JveDo6cGFpbnRCb3hTaGFkb3cp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lRmxvd0JveDo6Y29uc3Ry
YWluVG9MaW5lVG9wQW5kQm90dG9tSWZOZWVkZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y2xpcFJlY3RGb3JOaW5lUGllY2VJbWFnZVN0cmlwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lRmxvd0JveDo6cGFpbnRNYXNr
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Z2V0QmFja2dyb3VuZFJvdW5kZWRSZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpiYWNrZ3JvdW5k
Um91bmRlZFJlY3RBZGp1c3RlZEZvckJsZWVkQXZvaWRhbmNlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE1hc2tGb3JUZXh0RmlsbEJveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRl
bmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym94U2hhZG93
U2hvdWxkQmVBcHBsaWVkVG9CYWNrZ3JvdW5kIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmJveFNoYWRvd1Nob3VsZEJlQXBw
bGllZFRvQmFja2dyb3VuZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdl
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dy
b3VuZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorCiAy
MDIxLTA5LTIyICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAg
TWFrZSBTaGFyZWRCdWZmZXIgaW5oZXJpdCBmcm9tIFRocmVhZFNhZmVSZWZDb3VudGVkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDIxMzc5N2I3MDQxNjAyMTE0YmI5NWViMmFhMjRhZWNiYTNiZDM0NjQuLmZj
ZjEwMWQ3M2M4ZjhjYjdjZTlhY2ZiZDc2YjRmODgzMTg1NmNmM2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0yMjA3LDYgKzIyMDcsNyBAQCByZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcAogcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwCiByZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
LmNwcAogcmVuZGVyaW5nL0ltYWdlUXVhbGl0eUNvbnRyb2xsZXIuY3BwCityZW5kZXJpbmcvSW5s
aW5lQm94UGFpbnRlci5jcHAKIHJlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5jcHAKIHJlbmRlcmlu
Zy9MYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5jcHAKIHJlbmRlcmluZy9MYXllck92ZXJsYXBN
YXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggMWEzYmQwOGUwYjZjYWM3MTdjYTU0M2NiYmJiOWFhNTFkNThlMjAzMC4uMDAx
MTVkNjkxYzI0NTg4ZjE5OGVhOGYwNTc0MjdkYzkxMWYwZWIzMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTMzOSw2ICs1MzM5
LDcgQEAKIAkJRTRFOTRENjEyMkZGMTU4QTAwREQxOTFGIC8qIExlZ2FjeUxpbmVMYXlvdXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTFBQzc4MjJG
QUZENTAwMDE3Qjc1QiAvKiBMZWdhY3lMaW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRGMEJFMzEyNTcxMkY2RTAwOUU3NDMxIC8q
IENhcmV0UmVjdENvbXB1dGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNEYwQkUyRTI1NzEwQTc1MDA5RTc0MzEgLyogQ2FyZXRSZWN0Q29tcHV0
YXRpb24uaCAqLzsgfTsKIAkJRTRGMzhEMUIyNjI2RjEzQjAwN0IxMDY0IC8qIERlZmF1bHRSZXNv
dXJjZUxvYWRQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRGMzhEMTkyNjI2RjEzQjAwN0IxMDY0IC8qIERlZmF1bHRSZXNvdXJjZUxvYWRQ
cmlvcml0eS5oICovOyB9OworCQlFNEY4MTlDNjI2RkI0RUJGMDA5NEUxNjIgLyogSW5saW5lQm94
UGFpbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRGODE5QzUyNkZCNEVCRjAwOTRFMTYyIC8qIElubGluZUJveFBhaW50ZXIuaCAqLzsgfTsKIAkJ
RTRGOUVFRjMxNTZEQTAwNzAwRDIzRTdFIC8qIFN0eWxlU2hlZXRDb250ZW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRGOUVFRjExNTZEODRDNDAw
RDIzRTdFIC8qIFN0eWxlU2hlZXRDb250ZW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU1MDYyMDg0MjU0MDkxOUMwMEM0MzA5MSAvKiBDb250
YWN0c1JlcXVlc3REYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNTA2MjA4MzI1NDA5MTlCMDBDNDMwOTEgLyogQ29udGFjdHNSZXF1ZXN0RGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU1MTY2
OTkxMjBGRjk5MTgwMDlEMkMyNyAvKiBMaXN0QnV0dG9uQXJyb3dAMngucG5nIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNTE2Njk4RjIwRkY5OTE2MDA5
RDJDMjcgLyogTGlzdEJ1dHRvbkFycm93QDJ4LnBuZyAqLzsgfTsKQEAgLTE2NjA3LDYgKzE2NjA4
LDggQEAKIAkJRTRGMEJFMzAyNTcxMEE3NjAwOUU3NDMxIC8qIENhcmV0UmVjdENvbXB1dGF0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhcmV0UmVjdENvbXB1
dGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRGMzhEMTkyNjI2RjEz
QjAwN0IxMDY0IC8qIERlZmF1bHRSZXNvdXJjZUxvYWRQcmlvcml0eS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEZWZhdWx0UmVzb3VyY2VMb2FkUHJpb3JpdHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRGMzhEMUMyNjI2RjE0NDAwN0IxMDY0IC8qIERlZmF1
bHRSZXNvdXJjZUxvYWRQcmlvcml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZWZhdWx0UmVzb3VyY2VMb2FkUHJpb3JpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFNEY4MTlDMjI2RkI0RUFGMDA5NEUxNjIgLyogSW5saW5lQm94UGFpbnRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVCb3hQYWlu
dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRGODE5QzUyNkZCNEVCRjAw
OTRFMTYyIC8qIElubGluZUJveFBhaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5saW5lQm94UGFpbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NEY5RUVGMDE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlU2hlZXRDb250ZW50cy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBT
dHlsZVNoZWV0Q29udGVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5
bGVTaGVldENvbnRlbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RkI0QjM1
MjM5QkVCMTAwMDNDMzM2QSAvKiBMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5OTA1LDYgKzI5OTA4LDggQEAKIAkJCQk5MzA3
RjFENjBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5oICovLAogCQkJCUI1MUEyRjQw
MTdEN0Q1REEwMDcyNTE3QSAvKiBJbWFnZVF1YWxpdHlDb250cm9sbGVyLmNwcCAqLywKIAkJCQlC
NTFBMkYzRTE3RDdEM0E0MDA3MjUxN0EgLyogSW1hZ2VRdWFsaXR5Q29udHJvbGxlci5oICovLAor
CQkJCUU0RjgxOUMyMjZGQjRFQUYwMDk0RTE2MiAvKiBJbmxpbmVCb3hQYWludGVyLmNwcCAqLywK
KwkJCQlFNEY4MTlDNTI2RkI0RUJGMDA5NEUxNjIgLyogSW5saW5lQm94UGFpbnRlci5oICovLAog
CQkJCTkzMEM5MERDMTlDRjk2NTMwMEQ2QzIxQSAvKiBJbmxpbmVJdGVyYXRvci5jcHAgKi8sCiAJ
CQkJQkNFNzg5MTUxMTIwRDYwODAwNjBFQ0U1IC8qIElubGluZUl0ZXJhdG9yLmggKi8sCiAJCQkJ
MEZFQzEyMEIyMkJGMkNDNzAwNEU5RDM1IC8qIExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmNw
cCAqLywKQEAgLTMyODk5LDEwICszMjkwNCwxMiBAQAogCQkJCTUxRUVBQTc0MUJFRkZBQjEwMDIx
ODAwOCAvKiBJbmRleFZhbHVlRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzEzOEY4MUJG
MTI4QkIwMDBENUYwMSAvKiBJbmRleFZhbHVlU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
MDYzRjgzMUUyM0ZBODkwMDgxMkJFMyAvKiBJbml0RGF0YVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAq
LywKKwkJCQlFNEY4MTlDNjI2RkI0RUJGMDA5NEUxNjIgLyogSW5saW5lQm94UGFpbnRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTMwNTkyNjQxRTI3QTNBRDAwRDU3Qzk4IC8qIElubGluZUNsYXNz
aWNTY3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRTE5ODE3MjE3ODM5N0MwMDQ0NkYwOCAv
KiBJbmxpbmVDb250ZW50QnJlYWtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTExRkExQzgyNkYw
RjMwRjAwM0I4RjE2IC8qIElubGluZURhbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTE1MTNE
MDMyNkQ5ODFFODAwNEQzRkFBIC8qIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNkY5MTQyMTEyNTE1MjEzODAwNEU0RkVBIC8qIElubGluZURpc3BsYXlM
aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjdDQTNDQTIwOEMyQjJFMDAyRjI5QUIgLyogSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ3QzRENTdEMjY1MDhC
Q0IwMEM3QUIxRiAvKiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTZGRTYzNkU4MjY0Nzk2MjkwMEYwOTUxRSAvKiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTMyOTE2LDcgKzMyOTIzLDYgQEAKIAkJCQkxMUMzMjI3RDI2RDk1
OENFMDAzMjhGNEQgLyogSW5saW5lTGluZUJveEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTZGNkVFNzQzMjZENDRFRTMwMDM3NENEQSAvKiBJbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjI2RUI0ODIzNDAwNEE1MDA2OTA2RTIgLyogSW5saW5l
TGluZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTZGOTE0MjExMjUxNTIxMzgwMDRFNEZF
QSAvKiBJbmxpbmVEaXNwbGF5TGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZDM0Y5NDcyNTE2
NzU2NzAwQTQ5QkVBIC8qIElubGluZUxpbmVSdW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUY0NTc3
NUNFMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNkY0MERBODIyNTEzMDMzQTAwRUMwNEI3IC8qIElubGluZVJlY3QuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcwM2I3ZjdhM2M1NTlmNTViY2FkMmQwYmE5ZWZjNTU3ZGM1NzUzZWMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFpbnRlci5jcHAK
QEAgLTAsMCArMSwzNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIklubGluZUJveFBhaW50ZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
TGVnYWN5SW5saW5lRmxvd0JveC5oIgorI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1ZGUg
IlJlbmRlckJsb2NrRmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0lubGluZUJveFBhaW50ZXI6OklubGluZUJveFBhaW50ZXIoY29uc3QgTGVnYWN5
SW5saW5lRmxvd0JveCYgaW5saW5lQm94LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQorICAgIDogbV9pbmxpbmVCb3goaW5saW5lQm94KQorICAg
ICwgbV9wYWludEluZm8ocGFpbnRJbmZvKQorICAgICwgbV9wYWludE9mZnNldChwYWludE9mZnNl
dCkKKyAgICAsIG1fcmVuZGVyZXIobV9pbmxpbmVCb3gucmVuZGVyZXIoKSkKKyAgICAsIG1faXNG
aXJzdExpbmUobV9pbmxpbmVCb3guaXNGaXJzdExpbmUoKSkKKyAgICAsIG1faXNSb290SW5saW5l
Qm94KGlzPFJlbmRlckJsb2NrRmxvdz4obV9yZW5kZXJlcikpCisgICAgLCBtX2lzSG9yaXpvbnRh
bChtX2lubGluZUJveC5pc0hvcml6b250YWwoKSkKK3sKK30KKworSW5saW5lQm94UGFpbnRlcjo6
fklubGluZUJveFBhaW50ZXIoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgSW5saW5lQm94UGFpbnRlcjo6
cGFpbnQoKQoreworICAgIGlmIChtX3BhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpPdXRs
aW5lIHx8IG1fcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OlNlbGZPdXRsaW5lKSB7Cisg
ICAgICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6
OlZpc2libGUgfHwgIXJlbmRlcmVyKCkuaGFzT3V0bGluZSgpIHx8IG1faXNSb290SW5saW5lQm94
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8mIGlubGluZUZsb3cgPSBkb3du
Y2FzdDxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyKCkpOworICAgICAgICBSZW5kZXJCbG9jayogY29u
dGFpbmluZ0Jsb2NrID0gbnVsbHB0cjsKKworICAgICAgICBib29sIGNvbnRhaW5pbmdCbG9ja1Bh
aW50c0NvbnRpbnVhdGlvbk91dGxpbmUgPSBpbmxpbmVGbG93LmNvbnRpbnVhdGlvbigpIHx8IGlu
bGluZUZsb3cuaXNDb250aW51YXRpb24oKTsKKyAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9ja1Bh
aW50c0NvbnRpbnVhdGlvbk91dGxpbmUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NjkwLiBXZSBjdXJyZW50bHkg
ZG9uJ3QgcmVjb25uZWN0IGlubGluZSBjb250aW51YXRpb25zCisgICAgICAgICAgICAvLyBhZnRl
ciBhIGNoaWxkIHJlbW92YWwuIEFzIGEgcmVzdWx0LCB0aG9zZSBtZXJnZWQgaW5saW5lcyBkbyBu
b3QgZ2V0IHNlcGVyYXRlZCBhbmQgaGVuY2Ugbm90IGdldCBlbmNsb3NlZCBieQorICAgICAgICAg
ICAgLy8gYW5vbnltb3VzIGJsb2Nrcy4gSW4gdGhpcyBjYXNlLCBpdCBpcyBiZXR0ZXIgdG8gYmFp
bCBvdXQgYW5kIHBhaW50IGl0IG91cnNlbGYuCisgICAgICAgICAgICBSZW5kZXJCbG9jayogZW5j
bG9zaW5nQW5vbnltb3VzQmxvY2sgPSByZW5kZXJlcigpLmNvbnRhaW5pbmdCbG9jaygpOworICAg
ICAgICAgICAgaWYgKCFlbmNsb3NpbmdBbm9ueW1vdXNCbG9jay0+aXNBbm9ueW1vdXNCbG9jaygp
KQorICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9ja1BhaW50c0NvbnRpbnVhdGlvbk91dGxp
bmUgPSBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnRhaW5p
bmdCbG9jayA9IGVuY2xvc2luZ0Fub255bW91c0Jsb2NrLT5jb250YWluaW5nQmxvY2soKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8qIGJveCA9ICZyZW5kZXJlcigpOyBib3ggIT0gY29udGFp
bmluZ0Jsb2NrOyBib3ggPSAmYm94LT5wYXJlbnQoKS0+ZW5jbG9zaW5nQm94TW9kZWxPYmplY3Qo
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYm94LT5oYXNTZWxmUGFpbnRpbmdMYXllcigp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2tQYWludHNDb250aW51
YXRpb25PdXRsaW5lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChjb250YWluaW5nQmxvY2tQYWludHNDb250aW51YXRpb25P
dXRsaW5lKSB7CisgICAgICAgICAgICAvLyBBZGQgb3Vyc2VsdmVzIHRvIHRoZSBjb250YWluaW5n
IGJsb2NrIG9mIHRoZSBlbnRpcmUgY29udGludWF0aW9uIHNvIHRoYXQgaXQgY2FuCisgICAgICAg
ICAgICAvLyBwYWludCB1cyBhdG9taWNhbGx5LgorICAgICAgICAgICAgY29udGFpbmluZ0Jsb2Nr
LT5hZGRDb250aW51YXRpb25XaXRoT3V0bGluZShkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHJlbmRl
cmVyKCkuZWxlbWVudCgpLT5yZW5kZXJlcigpKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWlubGlu
ZUZsb3cuaXNDb250aW51YXRpb24oKSkKKyAgICAgICAgICAgIG1fcGFpbnRJbmZvLm91dGxpbmVP
YmplY3RzLT5hZGQoJmlubGluZUZsb3cpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChtX3BhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpNYXNrKSB7Cisg
ICAgICAgIHBhaW50TWFzaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcGFpbnRE
ZWNvcmF0aW9ucygpOworfQorCitzdGF0aWMgTGF5b3V0UmVjdCBjbGlwUmVjdEZvck5pbmVQaWVj
ZUltYWdlU3RyaXAoY29uc3QgTGVnYWN5SW5saW5lRmxvd0JveCogYm94LCBjb25zdCBOaW5lUGll
Y2VJbWFnZSYgaW1hZ2UsIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdCkKK3sKKyAgICBMYXlv
dXRSZWN0IGNsaXBSZWN0KHBhaW50UmVjdCk7CisgICAgYXV0byYgc3R5bGUgPSBib3gtPnJlbmRl
cmVyKCkuc3R5bGUoKTsKKyAgICBMYXlvdXRCb3hFeHRlbnQgb3V0c2V0cyA9IHN0eWxlLmltYWdl
T3V0c2V0cyhpbWFnZSk7CisgICAgaWYgKGJveC0+aXNIb3Jpem9udGFsKCkpIHsKKyAgICAgICAg
Y2xpcFJlY3Quc2V0WShwYWludFJlY3QueSgpIC0gb3V0c2V0cy50b3AoKSk7CisgICAgICAgIGNs
aXBSZWN0LnNldEhlaWdodChwYWludFJlY3QuaGVpZ2h0KCkgKyBvdXRzZXRzLnRvcCgpICsgb3V0
c2V0cy5ib3R0b20oKSk7CisgICAgICAgIGlmIChib3gtPmluY2x1ZGVMb2dpY2FsTGVmdEVkZ2Uo
KSkgeworICAgICAgICAgICAgY2xpcFJlY3Quc2V0WChwYWludFJlY3QueCgpIC0gb3V0c2V0cy5s
ZWZ0KCkpOworICAgICAgICAgICAgY2xpcFJlY3Quc2V0V2lkdGgocGFpbnRSZWN0LndpZHRoKCkg
KyBvdXRzZXRzLmxlZnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJveC0+aW5jbHVkZUxv
Z2ljYWxSaWdodEVkZ2UoKSkKKyAgICAgICAgICAgIGNsaXBSZWN0LnNldFdpZHRoKGNsaXBSZWN0
LndpZHRoKCkgKyBvdXRzZXRzLnJpZ2h0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNsaXBS
ZWN0LnNldFgocGFpbnRSZWN0LngoKSAtIG91dHNldHMubGVmdCgpKTsKKyAgICAgICAgY2xpcFJl
Y3Quc2V0V2lkdGgocGFpbnRSZWN0LndpZHRoKCkgKyBvdXRzZXRzLmxlZnQoKSArIG91dHNldHMu
cmlnaHQoKSk7CisgICAgICAgIGlmIChib3gtPmluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UoKSkgewor
ICAgICAgICAgICAgY2xpcFJlY3Quc2V0WShwYWludFJlY3QueSgpIC0gb3V0c2V0cy50b3AoKSk7
CisgICAgICAgICAgICBjbGlwUmVjdC5zZXRIZWlnaHQocGFpbnRSZWN0LmhlaWdodCgpICsgb3V0
c2V0cy50b3AoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJveC0+aW5jbHVkZUxvZ2ljYWxS
aWdodEVkZ2UoKSkKKyAgICAgICAgICAgIGNsaXBSZWN0LnNldEhlaWdodChjbGlwUmVjdC5oZWln
aHQoKSArIG91dHNldHMuYm90dG9tKCkpOworICAgIH0KKyAgICByZXR1cm4gY2xpcFJlY3Q7Cit9
CisKK3ZvaWQgSW5saW5lQm94UGFpbnRlcjo6cGFpbnRNYXNrKCkKK3sKKyAgICBpZiAoIW1fcGFp
bnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChyZW5kZXJlcigpKSB8fCByZW5kZXJlcigpLnN0
eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUgfHwgbV9wYWludEluZm8u
cGhhc2UgIT0gUGFpbnRQaGFzZTo6TWFzaykKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5b3V0
UmVjdCBmcmFtZVJlY3QobV9pbmxpbmVCb3guZnJhbWVSZWN0KCkpOworICAgIGNvbnN0cmFpblRv
TGluZVRvcEFuZEJvdHRvbUlmTmVlZGVkKGZyYW1lUmVjdCk7CisKKyAgICAvLyBNb3ZlIHgveSB0
byBvdXIgY29vcmRpbmF0ZXMuCisgICAgTGF5b3V0UmVjdCBsb2NhbFJlY3QoZnJhbWVSZWN0KTsK
KyAgICBtX2lubGluZUJveC5yb290KCkuYmxvY2tGbG93KCkuZmxpcEZvcldyaXRpbmdNb2RlKGxv
Y2FsUmVjdCk7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1fcGFpbnRP
ZmZzZXQgKyBsb2NhbFJlY3QubG9jYXRpb24oKTsKKworICAgIGNvbnN0IE5pbmVQaWVjZUltYWdl
JiBtYXNrTmluZVBpZWNlSW1hZ2UgPSByZW5kZXJlcigpLnN0eWxlKCkubWFza0JveEltYWdlKCk7
CisgICAgU3R5bGVJbWFnZSogbWFza0JveEltYWdlID0gcmVuZGVyZXIoKS5zdHlsZSgpLm1hc2tC
b3hJbWFnZSgpLmltYWdlKCk7CisKKyAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gcHVz
aCBhIHRyYW5zcGFyZW5jeSBsYXllciB0byByZW5kZXIgb3VyIG1hc2suCisgICAgYm9vbCBwdXNo
VHJhbnNwYXJlbmN5TGF5ZXIgPSBmYWxzZTsKKyAgICBib29sIGNvbXBvc2l0ZWRNYXNrID0gcmVu
ZGVyZXIoKS5oYXNMYXllcigpICYmIHJlbmRlcmVyKCkubGF5ZXIoKS0+aGFzQ29tcG9zaXRlZE1h
c2soKTsKKyAgICBib29sIGZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyA9IHJlbmRlcmVyKCkudmll
dygpLmZyYW1lVmlldygpLnBhaW50QmVoYXZpb3IoKS5jb250YWlucyhQYWludEJlaGF2aW9yOjpG
bGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wID0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXI7CisgICAgaWYgKCFjb21wb3NpdGVk
TWFzayB8fCBmbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpIHsKKyAgICAgICAgaWYgKChtYXNrQm94
SW1hZ2UgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLm1hc2tMYXllcnMoKS5oYXNJbWFnZSgpKSB8fCBy
ZW5kZXJlcigpLnN0eWxlKCkubWFza0xheWVycygpLm5leHQoKSkKKyAgICAgICAgICAgIHB1c2hU
cmFuc3BhcmVuY3lMYXllciA9IHRydWU7CisKKyAgICAgICAgY29tcG9zaXRlT3AgPSBDb21wb3Np
dGVPcGVyYXRvcjo6RGVzdGluYXRpb25JbjsKKyAgICAgICAgaWYgKHB1c2hUcmFuc3BhcmVuY3lM
YXllcikgeworICAgICAgICAgICAgbV9wYWludEluZm8uY29udGV4dCgpLnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7CisgICAgICAgICAgICBt
X3BhaW50SW5mby5jb250ZXh0KCkuYmVnaW5UcmFuc3BhcmVuY3lMYXllcigxLjBmKTsKKyAgICAg
ICAgICAgIGNvbXBvc2l0ZU9wID0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXI7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IExheW91dFJlY3QoYWRq
dXN0ZWRQYWludE9mZnNldCwgZnJhbWVSZWN0LnNpemUoKSk7CisKKyAgICBwYWludEZpbGxMYXll
cnMoQ29sb3IoKSwgcmVuZGVyZXIoKS5zdHlsZSgpLm1hc2tMYXllcnMoKSwgcGFpbnRSZWN0LCBj
b21wb3NpdGVPcCk7CisKKyAgICBib29sIGhhc0JveEltYWdlID0gbWFza0JveEltYWdlICYmIG1h
c2tCb3hJbWFnZS0+Y2FuUmVuZGVyKCZyZW5kZXJlcigpLCByZW5kZXJlcigpLnN0eWxlKCkuZWZm
ZWN0aXZlWm9vbSgpKTsKKyAgICBpZiAoIWhhc0JveEltYWdlIHx8ICFtYXNrQm94SW1hZ2UtPmlz
TG9hZGVkKCkpIHsKKyAgICAgICAgaWYgKHB1c2hUcmFuc3BhcmVuY3lMYXllcikKKyAgICAgICAg
ICAgIG1fcGFpbnRJbmZvLmNvbnRleHQoKS5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgICAg
ICByZXR1cm47IC8vIERvbid0IHBhaW50IGFueXRoaW5nIHdoaWxlIHdlIHdhaXQgZm9yIHRoZSBp
bWFnZSB0byBsb2FkLgorICAgIH0KKworICAgIC8vIFRoZSBzaW1wbGUgY2FzZSBpcyB3aGVyZSB3
ZSBhcmUgdGhlIG9ubHkgYm94IGZvciB0aGlzIG9iamVjdC4gSW4gdGhvc2UKKyAgICAvLyBjYXNl
cyBvbmx5IGEgc2luZ2xlIGNhbGwgdG8gZHJhdyBpcyByZXF1aXJlZC4KKyAgICBpZiAoIW1faW5s
aW5lQm94LnByZXZMaW5lQm94KCkgJiYgIW1faW5saW5lQm94Lm5leHRMaW5lQm94KCkpCisgICAg
ICAgIHJlbmRlcmVyKCkucGFpbnROaW5lUGllY2VJbWFnZShtX3BhaW50SW5mby5jb250ZXh0KCks
IExheW91dFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgZnJhbWVSZWN0LnNpemUoKSksIHJlbmRl
cmVyKCkuc3R5bGUoKSwgbWFza05pbmVQaWVjZUltYWdlLCBjb21wb3NpdGVPcCk7CisgICAgZWxz
ZSB7CisgICAgICAgIC8vIFdlIGhhdmUgYSBtYXNrIGltYWdlIHRoYXQgc3BhbnMgbXVsdGlwbGUg
bGluZXMuCisgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IF90eCBhbmQgX3R5IGJ5IHRoZSB3
aWR0aCBvZiBhbGwgcHJldmlvdXMgbGluZXMuCisgICAgICAgIExheW91dFVuaXQgbG9naWNhbE9m
ZnNldE9uTGluZTsKKyAgICAgICAgZm9yIChhdXRvKiBjdXJyID0gbV9pbmxpbmVCb3gucHJldkxp
bmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZMaW5lQm94KCkpCisgICAgICAgICAgICBs
b2dpY2FsT2Zmc2V0T25MaW5lICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOworICAgICAgICBMYXlv
dXRVbml0IHRvdGFsTG9naWNhbFdpZHRoID0gbG9naWNhbE9mZnNldE9uTGluZTsKKyAgICAgICAg
Zm9yIChhdXRvKiBjdXJyID0gJm1faW5saW5lQm94OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExp
bmVCb3goKSkKKyAgICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGN1cnItPmxvZ2ljYWxX
aWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IHN0cmlwWCA9IGFkanVzdGVkUGFpbnRPZmZzZXQu
eCgpIC0gKGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbE9mZnNldE9uTGluZSA6IDBfbHUpOworICAg
ICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IGFkanVzdGVkUGFpbnRPZmZzZXQueSgpIC0gKGlzSG9y
aXpvbnRhbCgpID8gMF9sdSA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOworICAgICAgICBMYXlvdXRV
bml0IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9naWNhbFdpZHRoIDogZnJh
bWVSZWN0LndpZHRoKCk7CisgICAgICAgIExheW91dFVuaXQgc3RyaXBIZWlnaHQgPSBpc0hvcml6
b250YWwoKSA/IGZyYW1lUmVjdC5oZWlnaHQoKSA6IHRvdGFsTG9naWNhbFdpZHRoOworCisgICAg
ICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBjbGlwUmVjdEZvck5pbmVQaWVjZUltYWdlU3RyaXAo
Jm1faW5saW5lQm94LCBtYXNrTmluZVBpZWNlSW1hZ2UsIHBhaW50UmVjdCk7CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihtX3BhaW50SW5mby5jb250ZXh0KCkp
OworICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuY2xpcChjbGlwUmVjdCk7CisgICAgICAg
IHJlbmRlcmVyKCkucGFpbnROaW5lUGllY2VJbWFnZShtX3BhaW50SW5mby5jb250ZXh0KCksIExh
eW91dFJlY3Qoc3RyaXBYLCBzdHJpcFksIHN0cmlwV2lkdGgsIHN0cmlwSGVpZ2h0KSwgcmVuZGVy
ZXIoKS5zdHlsZSgpLCBtYXNrTmluZVBpZWNlSW1hZ2UsIGNvbXBvc2l0ZU9wKTsKKyAgICB9CisK
KyAgICBpZiAocHVzaFRyYW5zcGFyZW5jeUxheWVyKQorICAgICAgICBtX3BhaW50SW5mby5jb250
ZXh0KCkuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKK30KKwordm9pZCBJbmxpbmVCb3hQYWludGVy
OjpwYWludERlY29yYXRpb25zKCkKK3sKKyAgICBpZiAoIW1fcGFpbnRJbmZvLnNob3VsZFBhaW50
V2l0aGluUm9vdChyZW5kZXJlcigpKSB8fCByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgp
ICE9IFZpc2liaWxpdHk6OlZpc2libGUgfHwgbV9wYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZTo6Rm9yZWdyb3VuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2lzUm9vdElubGlu
ZUJveCAmJiAhcmVuZGVyZXIoKS5oYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byYgc3R5bGUgPSB0aGlzLT5zdHlsZSgpOworICAgIC8vIFlvdSBj
YW4gdXNlIHA6OmZpcnN0LWxpbmUgdG8gc3BlY2lmeSBhIGJhY2tncm91bmQuIElmIHNvLCB0aGUg
cm9vdCBpbmxpbmUgYm94ZXMgZm9yCisgICAgLy8gYSBsaW5lIG1heSBhY3R1YWxseSBoYXZlIHRv
IHBhaW50IGEgYmFja2dyb3VuZC4KKyAgICBpZiAobV9pc1Jvb3RJbmxpbmVCb3ggJiYgKCFtX2lz
Rmlyc3RMaW5lIHx8ICZzdHlsZSA9PSAmcmVuZGVyZXIoKS5zdHlsZSgpKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgTGF5b3V0UmVjdCBmcmFtZVJlY3QobV9pbmxpbmVCb3guZnJhbWVSZWN0KCkp
OworICAgIGNvbnN0cmFpblRvTGluZVRvcEFuZEJvdHRvbUlmTmVlZGVkKGZyYW1lUmVjdCk7CisK
KyAgICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRpbmF0ZXMuCisgICAgTGF5b3V0UmVjdCBsb2Nh
bFJlY3QoZnJhbWVSZWN0KTsKKyAgICBtX2lubGluZUJveC5yb290KCkuYmxvY2tGbG93KCkuZmxp
cEZvcldyaXRpbmdNb2RlKGxvY2FsUmVjdCk7CisKKyAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBh
aW50b2Zmc2V0ID0gbV9wYWludE9mZnNldCArIGxvY2FsUmVjdC5sb2NhdGlvbigpOworICAgIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1fcGFpbnRJbmZvLmNvbnRleHQoKTsKKyAgICBMYXlv
dXRSZWN0IHBhaW50UmVjdCA9IExheW91dFJlY3QoYWRqdXN0ZWRQYWludG9mZnNldCwgZnJhbWVS
ZWN0LnNpemUoKSk7CisgICAgLy8gU2hhZG93IGNvbWVzIGZpcnN0IGFuZCBpcyBiZWhpbmQgdGhl
IGJhY2tncm91bmQgYW5kIGJvcmRlci4KKyAgICBpZiAoIXJlbmRlcmVyKCkuYm94U2hhZG93U2hv
dWxkQmVBcHBsaWVkVG9CYWNrZ3JvdW5kKGFkanVzdGVkUGFpbnRvZmZzZXQsIEJhY2tncm91bmRC
bGVlZE5vbmUsICZtX2lubGluZUJveCkpCisgICAgICAgIHBhaW50Qm94U2hhZG93KFNoYWRvd1N0
eWxlOjpOb3JtYWwsIHBhaW50UmVjdCk7CisKKyAgICBhdXRvIGNvbG9yID0gc3R5bGUudmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKKyAgICBhdXRvIGNv
bXBvc2l0ZU9wID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLmNvbXBvc2l0ZU9wZXJhdG9yRm9yQmFj
a2dyb3VuZENvbG9yKGNvbG9yLCByZW5kZXJlcigpKTsKKworICAgIGNvbG9yID0gc3R5bGUuY29s
b3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoY29sb3IpOworCisgICAgcGFpbnRGaWxsTGF5ZXJzKGNv
bG9yLCBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCksIHBhaW50UmVjdCwgY29tcG9zaXRlT3ApOwor
ICAgIHBhaW50Qm94U2hhZG93KFNoYWRvd1N0eWxlOjpJbnNldCwgcGFpbnRSZWN0KTsKKworICAg
IC8vIDpmaXJzdC1saW5lIGNhbm5vdCBiZSB1c2VkIHRvIHB1dCBib3JkZXJzIG9uIGEgbGluZS4g
QWx3YXlzIHBhaW50IGJvcmRlcnMgd2l0aCBvdXIKKyAgICAvLyBub24tZmlyc3QtbGluZSBzdHls
ZS4KKyAgICBpZiAobV9pc1Jvb3RJbmxpbmVCb3ggfHwgIXJlbmRlcmVyKCkuc3R5bGUoKS5oYXNW
aXNpYmxlQm9yZGVyRGVjb3JhdGlvbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBO
aW5lUGllY2VJbWFnZSYgYm9yZGVySW1hZ2UgPSByZW5kZXJlcigpLnN0eWxlKCkuYm9yZGVySW1h
Z2UoKTsKKyAgICBTdHlsZUltYWdlKiBib3JkZXJJbWFnZVNvdXJjZSA9IGJvcmRlckltYWdlLmlt
YWdlKCk7CisgICAgYm9vbCBoYXNCb3JkZXJJbWFnZSA9IGJvcmRlckltYWdlU291cmNlICYmIGJv
cmRlckltYWdlU291cmNlLT5jYW5SZW5kZXIoJnJlbmRlcmVyKCksIHN0eWxlLmVmZmVjdGl2ZVpv
b20oKSk7CisgICAgaWYgKGhhc0JvcmRlckltYWdlICYmICFib3JkZXJJbWFnZVNvdXJjZS0+aXNM
b2FkZWQoKSkKKyAgICAgICAgcmV0dXJuOyAvLyBEb24ndCBwYWludCBhbnl0aGluZyB3aGlsZSB3
ZSB3YWl0IGZvciB0aGUgaW1hZ2UgdG8gbG9hZC4KKworICAgIC8vIFRoZSBzaW1wbGUgY2FzZSBp
cyB3aGVyZSB3ZSBlaXRoZXIgaGF2ZSBubyBib3JkZXIgaW1hZ2Ugb3Igd2UgYXJlIHRoZSBvbmx5
IGJveCBmb3IgdGhpcyBvYmplY3QuIEluIHRob3NlCisgICAgLy8gY2FzZXMgb25seSBhIHNpbmds
ZSBjYWxsIHRvIGRyYXcgaXMgcmVxdWlyZWQuCisgICAgaWYgKCFoYXNCb3JkZXJJbWFnZSB8fCAo
IW1faW5saW5lQm94LnByZXZMaW5lQm94KCkgJiYgIW1faW5saW5lQm94Lm5leHRMaW5lQm94KCkp
KSB7CisgICAgICAgIHJlbmRlcmVyKCkucGFpbnRCb3JkZXIobV9wYWludEluZm8sIHBhaW50UmVj
dCwgc3R5bGUsIEJhY2tncm91bmRCbGVlZE5vbmUsIG1faW5saW5lQm94LmluY2x1ZGVMb2dpY2Fs
TGVmdEVkZ2UoKSwgbV9pbmxpbmVCb3guaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBoYXZlIGEgYm9yZGVyIGltYWdlIHRoYXQg
c3BhbnMgbXVsdGlwbGUgbGluZXMuCisgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdHggYW5kIHR5
IGJ5IHRoZSB3aWR0aCBvZiBhbGwgcHJldmlvdXMgbGluZXMuCisgICAgLy8gVGhpbmsgb2YgYm9y
ZGVyIGltYWdlIHBhaW50aW5nIG9uIGlubGluZXMgYXMgdGhvdWdoIHlvdSBoYWQgb25lIGxvbmcg
bGluZSwgYSBzaW5nbGUgY29udGludW91cworICAgIC8vIHN0cmlwLiBFdmVuIHRob3VnaCB0aGF0
IHN0cmlwIGhhcyBiZWVuIGJyb2tlbiB1cCBhY3Jvc3MgbXVsdGlwbGUgbGluZXMsIHlvdSBzdGls
bCBwYWludCBpdAorICAgIC8vIGFzIHRob3VnaCB5b3UgaGFkIG9uZSBzaW5nbGUgbGluZS4gVGhp
cyBtZWFucyBlYWNoIGxpbmUgaGFzIHRvIHBpY2sgdXAgdGhlIGltYWdlIHdoZXJlCisgICAgLy8g
dGhlIHByZXZpb3VzIGxpbmUgbGVmdCBvZmYuCisgICAgLy8gRklYTUU6IFdoYXQgdGhlIGhlY2sg
ZG8gd2UgZG8gd2l0aCBSVEwgaGVyZT8gVGhlIG1hdGggd2UncmUgdXNpbmcgaXMgb2J2aW91c2x5
IG5vdCByaWdodCwKKyAgICAvLyBidXQgaXQgaXNuJ3QgZXZlbiBjbGVhciBob3cgdGhpcyBzaG91
bGQgd29yayBhdCBhbGwuCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0T25MaW5lOworICAg
IGZvciAoYXV0byogY3VyciA9IG1faW5saW5lQm94LnByZXZMaW5lQm94KCk7IGN1cnI7IGN1cnIg
PSBjdXJyLT5wcmV2TGluZUJveCgpKQorICAgICAgICBsb2dpY2FsT2Zmc2V0T25MaW5lICs9IGN1
cnItPmxvZ2ljYWxXaWR0aCgpOworICAgIExheW91dFVuaXQgdG90YWxMb2dpY2FsV2lkdGggPSBs
b2dpY2FsT2Zmc2V0T25MaW5lOworICAgIGZvciAoYXV0byogY3VyciA9ICZtX2lubGluZUJveDsg
Y3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCisgICAgICAgIHRvdGFsTG9naWNhbFdp
ZHRoICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOworCisgICAgTGF5b3V0VW5pdCBzdHJpcFggPSBh
ZGp1c3RlZFBhaW50b2Zmc2V0LngoKSAtIChpc0hvcml6b250YWwoKSA/IGxvZ2ljYWxPZmZzZXRP
bkxpbmUgOiAwX2x1KTsKKyAgICBMYXlvdXRVbml0IHN0cmlwWSA9IGFkanVzdGVkUGFpbnRvZmZz
ZXQueSgpIC0gKGlzSG9yaXpvbnRhbCgpID8gMF9sdSA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOwor
ICAgIExheW91dFVuaXQgc3RyaXBXaWR0aCA9IGlzSG9yaXpvbnRhbCgpID8gdG90YWxMb2dpY2Fs
V2lkdGggOiBmcmFtZVJlY3Qud2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IHN0cmlwSGVpZ2h0ID0g
aXNIb3Jpem9udGFsKCkgPyBmcmFtZVJlY3QuaGVpZ2h0KCkgOiB0b3RhbExvZ2ljYWxXaWR0aDsK
KworICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBjbGlwUmVjdEZvck5pbmVQaWVjZUltYWdlU3Ry
aXAoJm1faW5saW5lQm94LCBib3JkZXJJbWFnZSwgcGFpbnRSZWN0KTsKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CisgICAgY29udGV4dC5jbGlwKGNs
aXBSZWN0KTsKKyAgICByZW5kZXJlcigpLnBhaW50Qm9yZGVyKG1fcGFpbnRJbmZvLCBMYXlvdXRS
ZWN0KHN0cmlwWCwgc3RyaXBZLCBzdHJpcFdpZHRoLCBzdHJpcEhlaWdodCksIHN0eWxlKTsKK30K
KworY29uc3QgUmVuZGVyU3R5bGUmIElubGluZUJveFBhaW50ZXI6OnN0eWxlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pc0ZpcnN0TGluZSA/IHJlbmRlcmVyKCkuZmlyc3RMaW5lU3R5bGUoKSA6
IHJlbmRlcmVyKCkuc3R5bGUoKTsKK30KKwordm9pZCBJbmxpbmVCb3hQYWludGVyOjpjb25zdHJh
aW5Ub0xpbmVUb3BBbmRCb3R0b21JZk5lZWRlZChMYXlvdXRSZWN0JiByZWN0KSBjb25zdAorewor
ICAgIGJvb2wgbm9RdWlya3NNb2RlID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLmluTm9RdWlya3NN
b2RlKCk7CisgICAgaWYgKG5vUXVpcmtzTW9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICht
X2lubGluZUJveC5oYXNUZXh0Q2hpbGRyZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICht
X2lubGluZUJveC5kZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkgJiYg
bV9pbmxpbmVCb3guaGFzVGV4dERlc2NlbmRhbnRzKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IExheW91dFVuaXQgbG9naWNhbFRvcCA9IGlzSG9yaXpvbnRhbCgpID8gcmVjdC55KCkgOiByZWN0
LngoKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBpc0hvcml6b250YWwoKSA/IHJl
Y3QuaGVpZ2h0KCkgOiByZWN0LndpZHRoKCk7CisKKyAgICBhdXRvIGxpbmUgPSBMYXlvdXRJbnRl
Z3JhdGlvbjo6TGluZUl0ZXJhdG9yKCZtX2lubGluZUJveC5yb290KCkpOworICAgIExheW91dFVu
aXQgYm90dG9tID0gc3RkOjptaW4obGluZS0+Ym90dG9tKCksIGxvZ2ljYWxUb3AgKyBsb2dpY2Fs
SGVpZ2h0KTsKKyAgICBsb2dpY2FsVG9wID0gc3RkOjptYXgobGluZS0+dG9wKCksIGxvZ2ljYWxU
b3ApOworICAgIGxvZ2ljYWxIZWlnaHQgPSBib3R0b20gLSBsb2dpY2FsVG9wOworICAgIGlmIChp
c0hvcml6b250YWwoKSkgeworICAgICAgICByZWN0LnNldFkobG9naWNhbFRvcCk7CisgICAgICAg
IHJlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJl
Y3Quc2V0WChsb2dpY2FsVG9wKTsKKyAgICAgICAgcmVjdC5zZXRXaWR0aChsb2dpY2FsSGVpZ2h0
KTsKKyAgICB9Cit9CisKK3ZvaWQgSW5saW5lQm94UGFpbnRlcjo6cGFpbnRGaWxsTGF5ZXJzKGNv
bnN0IENvbG9yJiBjb2xvciwgY29uc3QgRmlsbExheWVyJiBmaWxsTGF5ZXIsIGNvbnN0IExheW91
dFJlY3QmIHJlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIFZlY3Rvcjxjb25zdCBG
aWxsTGF5ZXIqLCA4PiBsYXllcnM7CisgICAgZm9yIChhdXRvKiBsYXllciA9ICZmaWxsTGF5ZXI7
IGxheWVyOyBsYXllciA9IGxheWVyLT5uZXh0KCkpCisgICAgICAgIGxheWVycy5hcHBlbmQobGF5
ZXIpOworICAgIGxheWVycy5yZXZlcnNlKCk7CisgICAgZm9yIChhdXRvKiBsYXllciA6IGxheWVy
cykKKyAgICAgICAgcGFpbnRGaWxsTGF5ZXIoY29sb3IsICpsYXllciwgcmVjdCwgb3ApOworfQor
Cit2b2lkIElubGluZUJveFBhaW50ZXI6OnBhaW50RmlsbExheWVyKGNvbnN0IENvbG9yJiBjb2xv
ciwgY29uc3QgRmlsbExheWVyJiBmaWxsTGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGF1dG8qIGltYWdlID0gZmlsbExheWVyLmltYWdl
KCk7CisgICAgYm9vbCBoYXNGaWxsSW1hZ2UgPSBpbWFnZSAmJiBpbWFnZS0+Y2FuUmVuZGVyKCZy
ZW5kZXJlcigpLCByZW5kZXJlcigpLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBpZiAo
KCFoYXNGaWxsSW1hZ2UgJiYgIXJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSkg
fHwgKCFtX2lubGluZUJveC5wcmV2TGluZUJveCgpICYmICFtX2lubGluZUJveC5uZXh0TGluZUJv
eCgpKSB8fCBtX2lzUm9vdElubGluZUJveCkgeworICAgICAgICByZW5kZXJlcigpLnBhaW50Rmls
bExheWVyRXh0ZW5kZWQobV9wYWludEluZm8sIGNvbG9yLCBmaWxsTGF5ZXIsIHJlY3QsIEJhY2tn
cm91bmRCbGVlZE5vbmUsICZtX2lubGluZUJveCwgcmVjdC5zaXplKCksIG9wKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKQorICAg
IGlmIChyZW5kZXJlcigpLnN0eWxlKCkuYm94RGVjb3JhdGlvbkJyZWFrKCkgPT0gQm94RGVjb3Jh
dGlvbkJyZWFrOjpDbG9uZSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIobV9wYWludEluZm8uY29udGV4dCgpKTsKKyAgICAgICAgbV9wYWludEluZm8uY29u
dGV4dCgpLmNsaXAoeyByZWN0LngoKSwgcmVjdC55KCksIExheW91dFVuaXQobV9pbmxpbmVCb3gu
d2lkdGgoKSksIExheW91dFVuaXQobV9pbmxpbmVCb3guaGVpZ2h0KCkpIH0pOworICAgICAgICBy
ZW5kZXJlcigpLnBhaW50RmlsbExheWVyRXh0ZW5kZWQobV9wYWludEluZm8sIGNvbG9yLCBmaWxs
TGF5ZXIsIHJlY3QsIEJhY2tncm91bmRCbGVlZE5vbmUsICZtX2lubGluZUJveCwgcmVjdC5zaXpl
KCksIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gV2UgaGF2
ZSBhIGZpbGwgaW1hZ2UgdGhhdCBzcGFucyBtdWx0aXBsZSBsaW5lcy4KKyAgICAvLyBXZSBuZWVk
IHRvIGFkanVzdCB0eCBhbmQgdHkgYnkgdGhlIHdpZHRoIG9mIGFsbCBwcmV2aW91cyBsaW5lcy4K
KyAgICAvLyBUaGluayBvZiBiYWNrZ3JvdW5kIHBhaW50aW5nIG9uIGlubGluZXMgYXMgdGhvdWdo
IHlvdSBoYWQgb25lIGxvbmcgbGluZSwgYSBzaW5nbGUgY29udGludW91cworICAgIC8vIHN0cmlw
LiBFdmVuIHRob3VnaCB0aGF0IHN0cmlwIGhhcyBiZWVuIGJyb2tlbiB1cCBhY3Jvc3MgbXVsdGlw
bGUgbGluZXMsIHlvdSBzdGlsbCBwYWludCBpdAorICAgIC8vIGFzIHRob3VnaCB5b3UgaGFkIG9u
ZSBzaW5nbGUgbGluZS4gVGhpcyBtZWFucyBlYWNoIGxpbmUgaGFzIHRvIHBpY2sgdXAgdGhlIGJh
Y2tncm91bmQgd2hlcmUKKyAgICAvLyB0aGUgcHJldmlvdXMgbGluZSBsZWZ0IG9mZi4KKyAgICBM
YXlvdXRVbml0IGxvZ2ljYWxPZmZzZXRPbkxpbmU7CisgICAgTGF5b3V0VW5pdCB0b3RhbExvZ2lj
YWxXaWR0aDsKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHRE
aXJlY3Rpb246OkxUUikgeworICAgICAgICBmb3IgKGF1dG8qIGN1cnIgPSBtX2lubGluZUJveC5w
cmV2TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkKKyAgICAgICAg
ICAgIGxvZ2ljYWxPZmZzZXRPbkxpbmUgKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7CisgICAgICAg
IHRvdGFsTG9naWNhbFdpZHRoID0gbG9naWNhbE9mZnNldE9uTGluZTsKKyAgICAgICAgZm9yIChh
dXRvKiBjdXJyID0gJm1faW5saW5lQm94OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3go
KSkKKyAgICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoYXV0byogY3VyciA9IG1faW5saW5lQm94Lm5l
eHRMaW5lQm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKQorICAgICAgICAg
ICAgbG9naWNhbE9mZnNldE9uTGluZSArPSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsKKyAgICAgICAg
dG90YWxMb2dpY2FsV2lkdGggPSBsb2dpY2FsT2Zmc2V0T25MaW5lOworICAgICAgICBmb3IgKGF1
dG8qIGN1cnIgPSAmbV9pbmxpbmVCb3g7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2TGluZUJveCgp
KQorICAgICAgICAgICAgdG90YWxMb2dpY2FsV2lkdGggKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7
CisgICAgfQorICAgIExheW91dFVuaXQgc3RyaXBYID0gcmVjdC54KCkgLSAoaXNIb3Jpem9udGFs
KCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogMF9sdSk7CisgICAgTGF5b3V0VW5pdCBzdHJpcFkg
PSByZWN0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IDBfbHUgOiBsb2dpY2FsT2Zmc2V0T25MaW5l
KTsKKyAgICBMYXlvdXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9n
aWNhbFdpZHRoIDogTGF5b3V0VW5pdChtX2lubGluZUJveC53aWR0aCgpKTsKKyAgICBMYXlvdXRV
bml0IHN0cmlwSGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyBMYXlvdXRVbml0KG1faW5saW5lQm94
LmhlaWdodCgpKSA6IHRvdGFsTG9naWNhbFdpZHRoOworCisgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKG1fcGFpbnRJbmZvLmNvbnRleHQoKSk7CisgICAgbV9wYWludElu
Zm8uY29udGV4dCgpLmNsaXAoeyByZWN0LngoKSwgcmVjdC55KCksIExheW91dFVuaXQobV9pbmxp
bmVCb3gud2lkdGgoKSksIExheW91dFVuaXQobV9pbmxpbmVCb3guaGVpZ2h0KCkpIH0pOworICAg
IHJlbmRlcmVyKCkucGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChtX3BhaW50SW5mbywgY29sb3IsIGZp
bGxMYXllciwgTGF5b3V0UmVjdChzdHJpcFgsIHN0cmlwWSwgc3RyaXBXaWR0aCwgc3RyaXBIZWln
aHQpLCBCYWNrZ3JvdW5kQmxlZWROb25lLCAmbV9pbmxpbmVCb3gsIHJlY3Quc2l6ZSgpLCBvcCk7
Cit9CisKK3ZvaWQgSW5saW5lQm94UGFpbnRlcjo6cGFpbnRCb3hTaGFkb3coU2hhZG93U3R5bGUg
c2hhZG93U3R5bGUsIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdCkKK3sKKyAgICBpZiAoKCFt
X2lubGluZUJveC5wcmV2TGluZUJveCgpICYmICFtX2lubGluZUJveC5uZXh0TGluZUJveCgpKSB8
fCBtX2lzUm9vdElubGluZUJveCkgeworICAgICAgICByZW5kZXJlcigpLnBhaW50Qm94U2hhZG93
KG1fcGFpbnRJbmZvLCBwYWludFJlY3QsIHN0eWxlKCksIHNoYWRvd1N0eWxlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBXZSBjYW4gZG8gYmV0dGVyIGhlcmUgaW4g
dGhlIG11bHRpLWxpbmUgY2FzZS4gV2Ugd2FudCB0byBwdXNoIGEgY2xpcCBzbyB0aGF0IHRoZSBz
aGFkb3cgZG9lc24ndAorICAgIC8vIHByb3RydWRlIGluY29ycmVjdGx5IGF0IHRoZSBlZGdlcywg
YW5kIHdlIHdhbnQgdG8gcG9zc2libHkgaW5jbHVkZSBzaGFkb3dzIGNhc3QgZnJvbSB0aGUgcHJl
dmlvdXMvZm9sbG93aW5nIGxpbmVzCisgICAgcmVuZGVyZXIoKS5wYWludEJveFNoYWRvdyhtX3Bh
aW50SW5mbywgcGFpbnRSZWN0LCBzdHlsZSgpLCBzaGFkb3dTdHlsZSwgbV9pbmxpbmVCb3guaW5j
bHVkZUxvZ2ljYWxMZWZ0RWRnZSgpLCBtX2lubGluZUJveC5pbmNsdWRlTG9naWNhbFJpZ2h0RWRn
ZSgpKTsKK30KKworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lQm94UGFpbnRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42ZTExYWZlMDhiYjFiNzhiNzZmZTI3NmJkMzMzNmNhNzU1ZjJlNDg2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBh
aW50ZXIuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1
ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRlICJTaGFkb3dEYXRhLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBGaWxsTGF5ZXI7CitjbGFzcyBMZWdhY3lJ
bmxpbmVGbG93Qm94OworY2xhc3MgUmVuZGVyQm94TW9kZWxPYmplY3Q7CitjbGFzcyBSZW5kZXJT
dHlsZTsKK3N0cnVjdCBQYWludEluZm87CisKK2NsYXNzIElubGluZUJveFBhaW50ZXIgeworcHVi
bGljOgorICAgIElubGluZUJveFBhaW50ZXIoY29uc3QgTGVnYWN5SW5saW5lRmxvd0JveCYsIFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCk7CisgICAgfklubGluZUJv
eFBhaW50ZXIoKTsKKworICAgIHZvaWQgcGFpbnQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHBh
aW50TWFzaygpOworICAgIHZvaWQgcGFpbnREZWNvcmF0aW9ucygpOworICAgIHZvaWQgcGFpbnRG
aWxsTGF5ZXJzKGNvbnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgTGF5b3V0UmVj
dCYgcGFpbnRSZWN0LCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdm9pZCBwYWludEZpbGxMYXll
cihjb25zdCBDb2xvciYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IExheW91dFJlY3QmIHBhaW50
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZvaWQgcGFpbnRCb3hTaGFkb3coU2hhZG93
U3R5bGUsIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdCk7CisKKyAgICB2b2lkIGNvbnN0cmFp
blRvTGluZVRvcEFuZEJvdHRvbUlmTmVlZGVkKExheW91dFJlY3QmKSBjb25zdDsKKworICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0OworICAgIC8vIEZJWE1FOiBNYWtlIFJlbmRl
ckJveE1vZGVsT2JqZWN0IGZ1bmN0aW9ucyBjb25zdC4KKyAgICBSZW5kZXJCb3hNb2RlbE9iamVj
dCYgcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PFJlbmRlckJveE1vZGVsT2Jq
ZWN0Jj4obV9yZW5kZXJlcik7IH0KKyAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNIb3Jpem9udGFsOyB9CisKKyAgICBjb25zdCBMZWdhY3lJbmxpbmVGbG93Qm94JiBt
X2lubGluZUJveDsKKyAgICBQYWludEluZm8mIG1fcGFpbnRJbmZvOworICAgIGNvbnN0IExheW91
dFBvaW50IG1fcGFpbnRPZmZzZXQ7CisgICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIG1f
cmVuZGVyZXI7CisgICAgY29uc3QgYm9vbCBtX2lzRmlyc3RMaW5lOworICAgIGNvbnN0IGJvb2wg
bV9pc1Jvb3RJbmxpbmVCb3g7CisgICAgY29uc3QgYm9vbCBtX2lzSG9yaXpvbnRhbDsKKworfTsK
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUZs
b3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3gu
Y3BwCmluZGV4IGViZjI2MDdiN2FmOWIzZTQ2NzE1YjZlZmJhMGJlZDExMjkyNzg3OTMuLjk1MTRm
ZDA3MTNhYmUyMmM4YzliODIzN2M1ZGZjYzc0MWM0NDE3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAK
ICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJJbmxpbmVCb3hQYWludGVyLmgi
CiAjaW5jbHVkZSAiTGVnYWN5RWxsaXBzaXNCb3guaCIKICNpbmNsdWRlICJMZWdhY3lJbmxpbmVU
ZXh0Qm94LmgiCiAjaW5jbHVkZSAiTGVnYWN5Um9vdElubGluZUJveC5oIgpAQCAtMTExMiw0NSAr
MTExMyw4IEBAIHZvaWQgTGVnYWN5SW5saW5lRmxvd0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6Q2hpbGRPdXRsaW5lcykgewotICAg
ICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6Ok91dGxpbmUgfHwgcGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2U6OlNlbGZPdXRsaW5lKSB7Ci0gICAgICAgICAgICAvLyBB
ZGQgb3Vyc2VsdmVzIHRvIHRoZSBwYWludCBpbmZvIHN0cnVjdCdzIGxpc3Qgb2YgaW5saW5lcyB0
aGF0IG5lZWQgdG8gcGFpbnQgdGhlaXIKLSAgICAgICAgICAgIC8vIG91dGxpbmVzLgotICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6
VmlzaWJsZSAmJiByZW5kZXJlcigpLmhhc091dGxpbmUoKSAmJiAhaXNSb290SW5saW5lQm94KCkp
IHsKLSAgICAgICAgICAgICAgICBSZW5kZXJJbmxpbmUmIGlubGluZUZsb3cgPSBkb3duY2FzdDxS
ZW5kZXJJbmxpbmU+KHJlbmRlcmVyKCkpOwotCi0gICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sq
IGNvbnRhaW5pbmdCbG9jayA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgYm9vbCBjb250YWlu
aW5nQmxvY2tQYWludHNDb250aW51YXRpb25PdXRsaW5lID0gaW5saW5lRmxvdy5jb250aW51YXRp
b24oKSB8fCBpbmxpbmVGbG93LmlzQ29udGludWF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGNvbnRhaW5pbmdCbG9ja1BhaW50c0NvbnRpbnVhdGlvbk91dGxpbmUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTQ2OTAuIFdlIGN1cnJlbnRseSBkb24ndCByZWNvbm5lY3QgaW5saW5lIGNvbnRpbnVh
dGlvbnMKLSAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgYSBjaGlsZCByZW1vdmFsLiBBcyBh
IHJlc3VsdCwgdGhvc2UgbWVyZ2VkIGlubGluZXMgZG8gbm90IGdldCBzZXBlcmF0ZWQgYW5kIGhl
bmNlIG5vdCBnZXQgZW5jbG9zZWQgYnkKLSAgICAgICAgICAgICAgICAgICAgLy8gYW5vbnltb3Vz
IGJsb2Nrcy4gSW4gdGhpcyBjYXNlLCBpdCBpcyBiZXR0ZXIgdG8gYmFpbCBvdXQgYW5kIHBhaW50
IGl0IG91cnNlbGYuCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBlbmNsb3NpbmdB
bm9ueW1vdXNCbG9jayA9IHJlbmRlcmVyKCkuY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghZW5jbG9zaW5nQW5vbnltb3VzQmxvY2stPmlzQW5vbnltb3VzQmxvY2so
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9ja1BhaW50c0NvbnRpbnVh
dGlvbk91dGxpbmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSBlbmNsb3NpbmdBbm9ueW1vdXNCbG9j
ay0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8q
IGJveCA9ICZyZW5kZXJlcigpOyBib3ggIT0gY29udGFpbmluZ0Jsb2NrOyBib3ggPSAmYm94LT5w
YXJlbnQoKS0+ZW5jbG9zaW5nQm94TW9kZWxPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChib3gtPmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrUGFpbnRzQ29udGludWF0aW9uT3V0
bGluZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoY29udGFpbmluZ0Jsb2NrUGFpbnRzQ29udGludWF0aW9uT3V0bGluZSkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBBZGQgb3Vyc2VsdmVzIHRvIHRoZSBjb250YWluaW5nIGJsb2NrIG9m
IHRoZSBlbnRpcmUgY29udGludWF0aW9uIHNvIHRoYXQgaXQgY2FuCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHBhaW50IHVzIGF0b21pY2FsbHkuCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5p
bmdCbG9jay0+YWRkQ29udGludWF0aW9uV2l0aE91dGxpbmUoZG93bmNhc3Q8UmVuZGVySW5saW5l
PihyZW5kZXJlcigpLmVsZW1lbnQoKS0+cmVuZGVyZXIoKSkpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIWlubGluZUZsb3cuaXNDb250aW51YXRpb24oKSkKLSAgICAgICAgICAgICAgICAg
ICAgcGFpbnRJbmZvLm91dGxpbmVPYmplY3RzLT5hZGQoJmlubGluZUZsb3cpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpN
YXNrKQotICAgICAgICAgICAgcGFpbnRNYXNrKHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFBhaW50IG91ciBiYWNrZ3JvdW5kLCBib3JkZXIg
YW5kIGJveC1zaGFkb3cuCi0gICAgICAgICAgICBwYWludEJveERlY29yYXRpb25zKHBhaW50SW5m
bywgcGFpbnRPZmZzZXQpOwotICAgICAgICB9CisgICAgICAgIElubGluZUJveFBhaW50ZXIgcGFp
bnRlcigqdGhpcywgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisgICAgICAgIHBhaW50ZXIucGFp
bnQoKTsKICAgICB9CiAKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6Ok1h
c2spCkBAIC0xMTcwLDE2ICsxMTM0LDYgQEAgdm9pZCBMZWdhY3lJbmxpbmVGbG93Qm94OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICB9
CiB9CiAKLXZvaWQgTGVnYWN5SW5saW5lRmxvd0JveDo6cGFpbnRGaWxsTGF5ZXJzKGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IEZpbGxMYXllciYg
ZmlsbExheWVyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCkK
LXsKLSAgICBWZWN0b3I8Y29uc3QgRmlsbExheWVyKiwgOD4gbGF5ZXJzOwotICAgIGZvciAoYXV0
byogbGF5ZXIgPSAmZmlsbExheWVyOyBsYXllcjsgbGF5ZXIgPSBsYXllci0+bmV4dCgpKQotICAg
ICAgICBsYXllcnMuYXBwZW5kKGxheWVyKTsKLSAgICBsYXllcnMucmV2ZXJzZSgpOwotICAgIGZv
ciAoYXV0byogbGF5ZXIgOiBsYXllcnMpCi0gICAgICAgIHBhaW50RmlsbExheWVyKHBhaW50SW5m
bywgY29sb3IsICpsYXllciwgcmVjdCwgb3ApOwotfQotCiBib29sIExlZ2FjeUlubGluZUZsb3dC
b3g6OmJveFNoYWRvd0NhbkJlQXBwbGllZFRvQmFja2dyb3VuZChjb25zdCBGaWxsTGF5ZXImIGxh
c3RCYWNrZ3JvdW5kTGF5ZXIpIGNvbnN0CiB7CiAgICAgLy8gVGhlIGNoZWNrcyBoZXJlIG1hdGNo
IGhvdyBwYWludEZpbGxMYXllcigpIGRlY2lkZXMgd2hldGhlciB0byBjbGlwIChpZiBpdCBkb2Vz
LCB0aGUgc2hhZG93CkBAIC0xMTg5LDI1NyArMTE0Myw2IEBAIGJvb2wgTGVnYWN5SW5saW5lRmxv
d0JveDo6Ym94U2hhZG93Q2FuQmVBcHBsaWVkVG9CYWNrZ3JvdW5kKGNvbnN0IEZpbGxMYXllciYg
bGFzCiAgICAgcmV0dXJuICghaGFzRmlsbEltYWdlICYmICFyZW5kZXJlcigpLnN0eWxlKCkuaGFz
Qm9yZGVyUmFkaXVzKCkpIHx8ICghcHJldkxpbmVCb3goKSAmJiAhbmV4dExpbmVCb3goKSkgfHwg
IXBhcmVudCgpOwogfQogCi12b2lkIExlZ2FjeUlubGluZUZsb3dCb3g6OnBhaW50RmlsbExheWVy
KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IEZp
bGxMYXllciYgZmlsbExheWVyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBDb21wb3NpdGVPcGVy
YXRvciBvcCkKLXsKLSAgICBhdXRvKiBpbWFnZSA9IGZpbGxMYXllci5pbWFnZSgpOwotICAgIGJv
b2wgaGFzRmlsbEltYWdlID0gaW1hZ2UgJiYgaW1hZ2UtPmNhblJlbmRlcigmcmVuZGVyZXIoKSwg
cmVuZGVyZXIoKS5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAgaWYgKCghaGFzRmlsbElt
YWdlICYmICFyZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFkaXVzKCkpIHx8ICghcHJldkxp
bmVCb3goKSAmJiAhbmV4dExpbmVCb3goKSkgfHwgIXBhcmVudCgpKQotICAgICAgICByZW5kZXJl
cigpLnBhaW50RmlsbExheWVyRXh0ZW5kZWQocGFpbnRJbmZvLCBjb2xvciwgZmlsbExheWVyLCBy
ZWN0LCBCYWNrZ3JvdW5kQmxlZWROb25lLCB0aGlzLCByZWN0LnNpemUoKSwgb3ApOwotI2lmIEVO
QUJMRShDU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspCi0gICAgZWxzZSBpZiAocmVuZGVyZXIoKS5z
dHlsZSgpLmJveERlY29yYXRpb25CcmVhaygpID09IEJveERlY29yYXRpb25CcmVhazo6Q2xvbmUp
IHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBhaW50SW5m
by5jb250ZXh0KCkpOwotICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmNsaXAoeyByZWN0Lngo
KSwgcmVjdC55KCksIExheW91dFVuaXQod2lkdGgoKSksIExheW91dFVuaXQoaGVpZ2h0KCkpIH0p
OwotICAgICAgICByZW5kZXJlcigpLnBhaW50RmlsbExheWVyRXh0ZW5kZWQocGFpbnRJbmZvLCBj
b2xvciwgZmlsbExheWVyLCByZWN0LCBCYWNrZ3JvdW5kQmxlZWROb25lLCB0aGlzLCByZWN0LnNp
emUoKSwgb3ApOwotICAgIH0KLSNlbmRpZgotICAgIGVsc2UgewotICAgICAgICAvLyBXZSBoYXZl
IGEgZmlsbCBpbWFnZSB0aGF0IHNwYW5zIG11bHRpcGxlIGxpbmVzLgotICAgICAgICAvLyBXZSBu
ZWVkIHRvIGFkanVzdCB0eCBhbmQgdHkgYnkgdGhlIHdpZHRoIG9mIGFsbCBwcmV2aW91cyBsaW5l
cy4KLSAgICAgICAgLy8gVGhpbmsgb2YgYmFja2dyb3VuZCBwYWludGluZyBvbiBpbmxpbmVzIGFz
IHRob3VnaCB5b3UgaGFkIG9uZSBsb25nIGxpbmUsIGEgc2luZ2xlIGNvbnRpbnVvdXMKLSAgICAg
ICAgLy8gc3RyaXAuIEV2ZW4gdGhvdWdoIHRoYXQgc3RyaXAgaGFzIGJlZW4gYnJva2VuIHVwIGFj
cm9zcyBtdWx0aXBsZSBsaW5lcywgeW91IHN0aWxsIHBhaW50IGl0Ci0gICAgICAgIC8vIGFzIHRo
b3VnaCB5b3UgaGFkIG9uZSBzaW5nbGUgbGluZS4gVGhpcyBtZWFucyBlYWNoIGxpbmUgaGFzIHRv
IHBpY2sgdXAgdGhlIGJhY2tncm91bmQgd2hlcmUKLSAgICAgICAgLy8gdGhlIHByZXZpb3VzIGxp
bmUgbGVmdCBvZmYuCi0gICAgICAgIExheW91dFVuaXQgbG9naWNhbE9mZnNldE9uTGluZTsKLSAg
ICAgICAgTGF5b3V0VW5pdCB0b3RhbExvZ2ljYWxXaWR0aDsKLSAgICAgICAgaWYgKHJlbmRlcmVy
KCkuc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKLSAgICAgICAg
ICAgIGZvciAoYXV0byogY3VyciA9IHByZXZMaW5lQm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5w
cmV2TGluZUJveCgpKQotICAgICAgICAgICAgICAgIGxvZ2ljYWxPZmZzZXRPbkxpbmUgKz0gY3Vy
ci0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCA9IGxvZ2lj
YWxPZmZzZXRPbkxpbmU7Ci0gICAgICAgICAgICBmb3IgKGF1dG8qIGN1cnIgPSB0aGlzOyBjdXJy
OyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKLSAgICAgICAgICAgICAgICB0b3RhbExvZ2lj
YWxXaWR0aCArPSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGZvciAoYXV0byogY3VyciA9IG5leHRMaW5lQm94KCk7IGN1cnI7IGN1cnIgPSBjdXJy
LT5uZXh0TGluZUJveCgpKQotICAgICAgICAgICAgICAgIGxvZ2ljYWxPZmZzZXRPbkxpbmUgKz0g
Y3Vyci0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCA9IGxv
Z2ljYWxPZmZzZXRPbkxpbmU7Ci0gICAgICAgICAgICBmb3IgKGF1dG8qIGN1cnIgPSB0aGlzOyBj
dXJyOyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkKLSAgICAgICAgICAgICAgICB0b3RhbExv
Z2ljYWxXaWR0aCArPSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgfQotICAgICAgICBM
YXlvdXRVbml0IHN0cmlwWCA9IHJlY3QueCgpIC0gKGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbE9m
ZnNldE9uTGluZSA6IDBfbHUpOwotICAgICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IHJlY3QueSgp
IC0gKGlzSG9yaXpvbnRhbCgpID8gMF9sdSA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOwotICAgICAg
ICBMYXlvdXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9naWNhbFdp
ZHRoIDogTGF5b3V0VW5pdCh3aWR0aCgpKTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcEhlaWdo
dCA9IGlzSG9yaXpvbnRhbCgpID8gTGF5b3V0VW5pdChoZWlnaHQoKSkgOiB0b3RhbExvZ2ljYWxX
aWR0aDsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFp
bnRJbmZvLmNvbnRleHQoKSk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuY2xpcCh7IHJl
Y3QueCgpLCByZWN0LnkoKSwgTGF5b3V0VW5pdCh3aWR0aCgpKSwgTGF5b3V0VW5pdChoZWlnaHQo
KSkgfSk7Ci0gICAgICAgIHJlbmRlcmVyKCkucGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChwYWludElu
Zm8sIGNvbG9yLCBmaWxsTGF5ZXIsIExheW91dFJlY3Qoc3RyaXBYLCBzdHJpcFksIHN0cmlwV2lk
dGgsIHN0cmlwSGVpZ2h0KSwgQmFja2dyb3VuZEJsZWVkTm9uZSwgdGhpcywgcmVjdC5zaXplKCks
IG9wKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGVnYWN5SW5saW5lRmxvd0JveDo6cGFpbnRCb3hTaGFk
b3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNoYWRv
d1N0eWxlIHNoYWRvd1N0eWxlLCBjb25zdCBMYXlvdXRSZWN0JiBwYWludFJlY3QpCi17Ci0gICAg
aWYgKCghcHJldkxpbmVCb3goKSAmJiAhbmV4dExpbmVCb3goKSkgfHwgIXBhcmVudCgpKQotICAg
ICAgICByZW5kZXJlcigpLnBhaW50Qm94U2hhZG93KGluZm8sIHBhaW50UmVjdCwgc3R5bGUsIHNo
YWRvd1N0eWxlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkbyBiZXR0
ZXIgaGVyZSBpbiB0aGUgbXVsdGktbGluZSBjYXNlLiBXZSB3YW50IHRvIHB1c2ggYSBjbGlwIHNv
IHRoYXQgdGhlIHNoYWRvdyBkb2Vzbid0Ci0gICAgICAgIC8vIHByb3RydWRlIGluY29ycmVjdGx5
IGF0IHRoZSBlZGdlcywgYW5kIHdlIHdhbnQgdG8gcG9zc2libHkgaW5jbHVkZSBzaGFkb3dzIGNh
c3QgZnJvbSB0aGUgcHJldmlvdXMvZm9sbG93aW5nIGxpbmVzCi0gICAgICAgIHJlbmRlcmVyKCku
cGFpbnRCb3hTaGFkb3coaW5mbywgcGFpbnRSZWN0LCBzdHlsZSwgc2hhZG93U3R5bGUsIGluY2x1
ZGVMb2dpY2FsTGVmdEVkZ2UoKSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UoKSk7Ci0gICAgfQot
fQotCi12b2lkIExlZ2FjeUlubGluZUZsb3dCb3g6OmNvbnN0cmFpblRvTGluZVRvcEFuZEJvdHRv
bUlmTmVlZGVkKExheW91dFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgYm9vbCBub1F1aXJrc01v
ZGUgPSByZW5kZXJlcigpLmRvY3VtZW50KCkuaW5Ob1F1aXJrc01vZGUoKTsKLSAgICBpZiAoIW5v
UXVpcmtzTW9kZSAmJiAhaGFzVGV4dENoaWxkcmVuKCkgJiYgIShkZXNjZW5kYW50c0hhdmVTYW1l
TGluZUhlaWdodEFuZEJhc2VsaW5lKCkgJiYgaGFzVGV4dERlc2NlbmRhbnRzKCkpKSB7Ci0gICAg
ICAgIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSByb290KCk7Ci0gICAgICAg
IExheW91dFVuaXQgbG9naWNhbFRvcCA9IGlzSG9yaXpvbnRhbCgpID8gcmVjdC55KCkgOiByZWN0
LngoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkg
PyByZWN0LmhlaWdodCgpIDogcmVjdC53aWR0aCgpOwotICAgICAgICBMYXlvdXRVbml0IGJvdHRv
bSA9IHN0ZDo6bWluKHJvb3RCb3gubGluZUJvdHRvbSgpLCBsb2dpY2FsVG9wICsgbG9naWNhbEhl
aWdodCk7Ci0gICAgICAgIGxvZ2ljYWxUb3AgPSBzdGQ6Om1heChyb290Qm94LmxpbmVUb3AoKSwg
bG9naWNhbFRvcCk7Ci0gICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBib3R0b20gLSBsb2dpY2FsVG9w
OwotICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkpIHsKLSAgICAgICAgICAgIHJlY3Quc2V0WShs
b2dpY2FsVG9wKTsKLSAgICAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVjdC5zZXRYKGxvZ2ljYWxUb3ApOwotICAg
ICAgICAgICAgcmVjdC5zZXRXaWR0aChsb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotc3RhdGljIExheW91dFJlY3QgY2xpcFJlY3RGb3JOaW5lUGllY2VJbWFnZVN0cmlwKExl
Z2FjeUlubGluZUZsb3dCb3gqIGJveCwgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGltYWdlLCBjb25z
dCBMYXlvdXRSZWN0JiBwYWludFJlY3QpCi17Ci0gICAgTGF5b3V0UmVjdCBjbGlwUmVjdChwYWlu
dFJlY3QpOwotICAgIGF1dG8mIHN0eWxlID0gYm94LT5yZW5kZXJlcigpLnN0eWxlKCk7Ci0gICAg
TGF5b3V0Qm94RXh0ZW50IG91dHNldHMgPSBzdHlsZS5pbWFnZU91dHNldHMoaW1hZ2UpOwotICAg
IGlmIChib3gtPmlzSG9yaXpvbnRhbCgpKSB7Ci0gICAgICAgIGNsaXBSZWN0LnNldFkocGFpbnRS
ZWN0LnkoKSAtIG91dHNldHMudG9wKCkpOwotICAgICAgICBjbGlwUmVjdC5zZXRIZWlnaHQocGFp
bnRSZWN0LmhlaWdodCgpICsgb3V0c2V0cy50b3AoKSArIG91dHNldHMuYm90dG9tKCkpOwotICAg
ICAgICBpZiAoYm94LT5pbmNsdWRlTG9naWNhbExlZnRFZGdlKCkpIHsKLSAgICAgICAgICAgIGNs
aXBSZWN0LnNldFgocGFpbnRSZWN0LngoKSAtIG91dHNldHMubGVmdCgpKTsKLSAgICAgICAgICAg
IGNsaXBSZWN0LnNldFdpZHRoKHBhaW50UmVjdC53aWR0aCgpICsgb3V0c2V0cy5sZWZ0KCkpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChib3gtPmluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKCkpCi0g
ICAgICAgICAgICBjbGlwUmVjdC5zZXRXaWR0aChjbGlwUmVjdC53aWR0aCgpICsgb3V0c2V0cy5y
aWdodCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjbGlwUmVjdC5zZXRYKHBhaW50UmVjdC54
KCkgLSBvdXRzZXRzLmxlZnQoKSk7Ci0gICAgICAgIGNsaXBSZWN0LnNldFdpZHRoKHBhaW50UmVj
dC53aWR0aCgpICsgb3V0c2V0cy5sZWZ0KCkgKyBvdXRzZXRzLnJpZ2h0KCkpOwotICAgICAgICBp
ZiAoYm94LT5pbmNsdWRlTG9naWNhbExlZnRFZGdlKCkpIHsKLSAgICAgICAgICAgIGNsaXBSZWN0
LnNldFkocGFpbnRSZWN0LnkoKSAtIG91dHNldHMudG9wKCkpOwotICAgICAgICAgICAgY2xpcFJl
Y3Quc2V0SGVpZ2h0KHBhaW50UmVjdC5oZWlnaHQoKSArIG91dHNldHMudG9wKCkpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChib3gtPmluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKCkpCi0gICAgICAg
ICAgICBjbGlwUmVjdC5zZXRIZWlnaHQoY2xpcFJlY3QuaGVpZ2h0KCkgKyBvdXRzZXRzLmJvdHRv
bSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNsaXBSZWN0OwotfQotCi12b2lkIExlZ2FjeUlubGlu
ZUZsb3dCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKLXsKLSAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQ
YWludFdpdGhpblJvb3QocmVuZGVyZXIoKSkgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxp
dHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlIHx8IHBhaW50SW5mby5waGFzZSAhPSBQYWludFBo
YXNlOjpGb3JlZ3JvdW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBZb3UgY2FuIHVzZSBw
OjpmaXJzdC1saW5lIHRvIHNwZWNpZnkgYSBiYWNrZ3JvdW5kLiBJZiBzbywgdGhlIHJvb3QgbGlu
ZSBib3hlcyBmb3IKLSAgICAvLyBhIGxpbmUgbWF5IGFjdHVhbGx5IGhhdmUgdG8gcGFpbnQgYSBi
YWNrZ3JvdW5kLgotICAgIGlmIChwYXJlbnQoKSAmJiAhcmVuZGVyZXIoKS5oYXNWaXNpYmxlQm94
RGVjb3JhdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBs
aW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAgICBpZiAoIXBhcmVudCgpICYmICghaXNG
aXJzdExpbmUoKSB8fCAmbGluZVN0eWxlID09ICZyZW5kZXJlcigpLnN0eWxlKCkpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBMYXlvdXRSZWN0IGZyYW1lUmVjdCh0aGlzLT5mcmFtZVJlY3QoKSk7
Ci0gICAgY29uc3RyYWluVG9MaW5lVG9wQW5kQm90dG9tSWZOZWVkZWQoZnJhbWVSZWN0KTsKLSAg
ICAKLSAgICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRpbmF0ZXMuCi0gICAgTGF5b3V0UmVjdCBs
b2NhbFJlY3QoZnJhbWVSZWN0KTsKLSAgICBmbGlwRm9yV3JpdGluZ01vZGUobG9jYWxSZWN0KTsK
LQotICAgIExheW91dFBvaW50IGFkanVzdGVkUGFpbnRvZmZzZXQgPSBwYWludE9mZnNldCArIGxv
Y2FsUmVjdC5sb2NhdGlvbigpOwotICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50
SW5mby5jb250ZXh0KCk7Ci0gICAgTGF5b3V0UmVjdCBwYWludFJlY3QgPSBMYXlvdXRSZWN0KGFk
anVzdGVkUGFpbnRvZmZzZXQsIGZyYW1lUmVjdC5zaXplKCkpOwotICAgIC8vIFNoYWRvdyBjb21l
cyBmaXJzdCBhbmQgaXMgYmVoaW5kIHRoZSBiYWNrZ3JvdW5kIGFuZCBib3JkZXIuCi0gICAgaWYg
KCFyZW5kZXJlcigpLmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChhZGp1c3Rl
ZFBhaW50b2Zmc2V0LCBCYWNrZ3JvdW5kQmxlZWROb25lLCB0aGlzKSkKLSAgICAgICAgcGFpbnRC
b3hTaGFkb3cocGFpbnRJbmZvLCBsaW5lU3R5bGUsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHBhaW50
UmVjdCk7Ci0KLSAgICBhdXRvIGNvbG9yID0gbGluZVN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7Ci0gICAgYXV0byBjb21wb3NpdGVPcCA9IHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5jb21wb3NpdGVPcGVyYXRvckZvckJhY2tncm91bmRDb2xvcihj
b2xvciwgcmVuZGVyZXIoKSk7Ci0KLSAgICBjb2xvciA9IGxpbmVTdHlsZS5jb2xvckJ5QXBwbHlp
bmdDb2xvckZpbHRlcihjb2xvcik7Ci0KLSAgICBwYWludEZpbGxMYXllcnMocGFpbnRJbmZvLCBj
b2xvciwgbGluZVN0eWxlLmJhY2tncm91bmRMYXllcnMoKSwgcGFpbnRSZWN0LCBjb21wb3NpdGVP
cCk7Ci0gICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLCBsaW5lU3R5bGUsIFNoYWRvd1N0eWxl
OjpJbnNldCwgcGFpbnRSZWN0KTsKLQotICAgIC8vIDpmaXJzdC1saW5lIGNhbm5vdCBiZSB1c2Vk
IHRvIHB1dCBib3JkZXJzIG9uIGEgbGluZS4gQWx3YXlzIHBhaW50IGJvcmRlcnMgd2l0aCBvdXIK
LSAgICAvLyBub24tZmlyc3QtbGluZSBzdHlsZS4KLSAgICBpZiAoIXBhcmVudCgpIHx8ICFyZW5k
ZXJlcigpLnN0eWxlKCkuaGFzVmlzaWJsZUJvcmRlckRlY29yYXRpb24oKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBib3JkZXJJbWFnZSA9IHJlbmRlcmVyKCku
c3R5bGUoKS5ib3JkZXJJbWFnZSgpOwotICAgIFN0eWxlSW1hZ2UqIGJvcmRlckltYWdlU291cmNl
ID0gYm9yZGVySW1hZ2UuaW1hZ2UoKTsKLSAgICBib29sIGhhc0JvcmRlckltYWdlID0gYm9yZGVy
SW1hZ2VTb3VyY2UgJiYgYm9yZGVySW1hZ2VTb3VyY2UtPmNhblJlbmRlcigmcmVuZGVyZXIoKSwg
bGluZVN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAgaWYgKGhhc0JvcmRlckltYWdlICYmICFi
b3JkZXJJbWFnZVNvdXJjZS0+aXNMb2FkZWQoKSkKLSAgICAgICAgcmV0dXJuOyAvLyBEb24ndCBw
YWludCBhbnl0aGluZyB3aGlsZSB3ZSB3YWl0IGZvciB0aGUgaW1hZ2UgdG8gbG9hZC4KLQotICAg
IC8vIFRoZSBzaW1wbGUgY2FzZSBpcyB3aGVyZSB3ZSBlaXRoZXIgaGF2ZSBubyBib3JkZXIgaW1h
Z2Ugb3Igd2UgYXJlIHRoZSBvbmx5IGJveCBmb3IgdGhpcyBvYmplY3QuIEluIHRob3NlCi0gICAg
Ly8gY2FzZXMgb25seSBhIHNpbmdsZSBjYWxsIHRvIGRyYXcgaXMgcmVxdWlyZWQuCi0gICAgaWYg
KCFoYXNCb3JkZXJJbWFnZSB8fCAoIXByZXZMaW5lQm94KCkgJiYgIW5leHRMaW5lQm94KCkpKQot
ICAgICAgICByZW5kZXJlcigpLnBhaW50Qm9yZGVyKHBhaW50SW5mbywgcGFpbnRSZWN0LCBsaW5l
U3R5bGUsIEJhY2tncm91bmRCbGVlZE5vbmUsIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UoKSwgaW5j
bHVkZUxvZ2ljYWxSaWdodEVkZ2UoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFdlIGhhdmUg
YSBib3JkZXIgaW1hZ2UgdGhhdCBzcGFucyBtdWx0aXBsZSBsaW5lcy4KLSAgICAgICAgLy8gV2Ug
bmVlZCB0byBhZGp1c3QgdHggYW5kIHR5IGJ5IHRoZSB3aWR0aCBvZiBhbGwgcHJldmlvdXMgbGlu
ZXMuCi0gICAgICAgIC8vIFRoaW5rIG9mIGJvcmRlciBpbWFnZSBwYWludGluZyBvbiBpbmxpbmVz
IGFzIHRob3VnaCB5b3UgaGFkIG9uZSBsb25nIGxpbmUsIGEgc2luZ2xlIGNvbnRpbnVvdXMKLSAg
ICAgICAgLy8gc3RyaXAuIEV2ZW4gdGhvdWdoIHRoYXQgc3RyaXAgaGFzIGJlZW4gYnJva2VuIHVw
IGFjcm9zcyBtdWx0aXBsZSBsaW5lcywgeW91IHN0aWxsIHBhaW50IGl0Ci0gICAgICAgIC8vIGFz
IHRob3VnaCB5b3UgaGFkIG9uZSBzaW5nbGUgbGluZS4gVGhpcyBtZWFucyBlYWNoIGxpbmUgaGFz
IHRvIHBpY2sgdXAgdGhlIGltYWdlIHdoZXJlCi0gICAgICAgIC8vIHRoZSBwcmV2aW91cyBsaW5l
IGxlZnQgb2ZmLgotICAgICAgICAvLyBGSVhNRTogV2hhdCB0aGUgaGVjayBkbyB3ZSBkbyB3aXRo
IFJUTCBoZXJlPyBUaGUgbWF0aCB3ZSdyZSB1c2luZyBpcyBvYnZpb3VzbHkgbm90IHJpZ2h0LAot
ICAgICAgICAvLyBidXQgaXQgaXNuJ3QgZXZlbiBjbGVhciBob3cgdGhpcyBzaG91bGQgd29yayBh
dCBhbGwuCi0gICAgICAgIExheW91dFVuaXQgbG9naWNhbE9mZnNldE9uTGluZTsKLSAgICAgICAg
Zm9yIChhdXRvKiBjdXJyID0gcHJldkxpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZM
aW5lQm94KCkpCi0gICAgICAgICAgICBsb2dpY2FsT2Zmc2V0T25MaW5lICs9IGN1cnItPmxvZ2lj
YWxXaWR0aCgpOwotICAgICAgICBMYXlvdXRVbml0IHRvdGFsTG9naWNhbFdpZHRoID0gbG9naWNh
bE9mZnNldE9uTGluZTsKLSAgICAgICAgZm9yIChhdXRvKiBjdXJyID0gdGhpczsgY3VycjsgY3Vy
ciA9IGN1cnItPm5leHRMaW5lQm94KCkpCi0gICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCAr
PSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFggPSBhZGp1
c3RlZFBhaW50b2Zmc2V0LngoKSAtIChpc0hvcml6b250YWwoKSA/IGxvZ2ljYWxPZmZzZXRPbkxp
bmUgOiAwX2x1KTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1c3RlZFBhaW50b2Zm
c2V0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IDBfbHUgOiBsb2dpY2FsT2Zmc2V0T25MaW5lKTsK
LSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFdpZHRoID0gaXNIb3Jpem9udGFsKCkgPyB0b3RhbExv
Z2ljYWxXaWR0aCA6IGZyYW1lUmVjdC53aWR0aCgpOwotICAgICAgICBMYXlvdXRVbml0IHN0cmlw
SGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyBmcmFtZVJlY3QuaGVpZ2h0KCkgOiB0b3RhbExvZ2lj
YWxXaWR0aDsKLQotICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gY2xpcFJlY3RGb3JOaW5l
UGllY2VJbWFnZVN0cmlwKHRoaXMsIGJvcmRlckltYWdlLCBwYWludFJlY3QpOwotICAgICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgICAgIGNv
bnRleHQuY2xpcChjbGlwUmVjdCk7Ci0gICAgICAgIHJlbmRlcmVyKCkucGFpbnRCb3JkZXIocGFp
bnRJbmZvLCBMYXlvdXRSZWN0KHN0cmlwWCwgc3RyaXBZLCBzdHJpcFdpZHRoLCBzdHJpcEhlaWdo
dCksIGxpbmVTdHlsZSk7Ci0gICAgfQotfQotCi12b2lkIExlZ2FjeUlubGluZUZsb3dCb3g6OnBh
aW50TWFzayhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0KQotewotICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChyZW5kZXJl
cigpKSB8fCByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZp
c2libGUgfHwgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6Ok1hc2spCi0gICAgICAgIHJl
dHVybjsKLQotICAgIExheW91dFJlY3QgZnJhbWVSZWN0KHRoaXMtPmZyYW1lUmVjdCgpKTsKLSAg
ICBjb25zdHJhaW5Ub0xpbmVUb3BBbmRCb3R0b21JZk5lZWRlZChmcmFtZVJlY3QpOwotICAgIAot
ICAgIC8vIE1vdmUgeC95IHRvIG91ciBjb29yZGluYXRlcy4KLSAgICBMYXlvdXRSZWN0IGxvY2Fs
UmVjdChmcmFtZVJlY3QpOwotICAgIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhbFJlY3QpOwotICAg
IExheW91dFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2FsUmVj
dC5sb2NhdGlvbigpOwotCi0gICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tOaW5lUGllY2VJ
bWFnZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS5tYXNrQm94SW1hZ2UoKTsKLSAgICBTdHlsZUltYWdl
KiBtYXNrQm94SW1hZ2UgPSByZW5kZXJlcigpLnN0eWxlKCkubWFza0JveEltYWdlKCkuaW1hZ2Uo
KTsKLQotICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBwdXNoIGEgdHJhbnNwYXJlbmN5
IGxheWVyIHRvIHJlbmRlciBvdXIgbWFzay4KLSAgICBib29sIHB1c2hUcmFuc3BhcmVuY3lMYXll
ciA9IGZhbHNlOwotICAgIGJvb2wgY29tcG9zaXRlZE1hc2sgPSByZW5kZXJlcigpLmhhc0xheWVy
KCkgJiYgcmVuZGVyZXIoKS5sYXllcigpLT5oYXNDb21wb3NpdGVkTWFzaygpOwotICAgIGJvb2wg
ZmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
cGFpbnRCZWhhdmlvcigpLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGlu
Z0xheWVycyk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AgPSBDb21wb3NpdGVP
cGVyYXRvcjo6U291cmNlT3ZlcjsKLSAgICBpZiAoIWNvbXBvc2l0ZWRNYXNrIHx8IGZsYXR0ZW5D
b21wb3NpdGluZ0xheWVycykgewotICAgICAgICBpZiAoKG1hc2tCb3hJbWFnZSAmJiByZW5kZXJl
cigpLnN0eWxlKCkubWFza0xheWVycygpLmhhc0ltYWdlKCkpIHx8IHJlbmRlcmVyKCkuc3R5bGUo
KS5tYXNrTGF5ZXJzKCkubmV4dCgpKQotICAgICAgICAgICAgcHVzaFRyYW5zcGFyZW5jeUxheWVy
ID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIGNvbXBvc2l0ZU9wID0gQ29tcG9zaXRlT3BlcmF0
b3I6OkRlc3RpbmF0aW9uSW47Ci0gICAgICAgIGlmIChwdXNoVHJhbnNwYXJlbmN5TGF5ZXIpIHsK
LSAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsKLSAgICAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0KCkuYmVnaW5UcmFuc3BhcmVuY3lMYXllcigxLjBmKTsKLSAgICAgICAgICAgIGNvbXBv
c2l0ZU9wID0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXI7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IExheW91dFJlY3QoYWRqdXN0ZWRQYWludE9m
ZnNldCwgZnJhbWVSZWN0LnNpemUoKSk7Ci0gICAgcGFpbnRGaWxsTGF5ZXJzKHBhaW50SW5mbywg
Q29sb3IoKSwgcmVuZGVyZXIoKS5zdHlsZSgpLm1hc2tMYXllcnMoKSwgcGFpbnRSZWN0LCBjb21w
b3NpdGVPcCk7Ci0gICAgCi0gICAgYm9vbCBoYXNCb3hJbWFnZSA9IG1hc2tCb3hJbWFnZSAmJiBt
YXNrQm94SW1hZ2UtPmNhblJlbmRlcigmcmVuZGVyZXIoKSwgcmVuZGVyZXIoKS5zdHlsZSgpLmVm
ZmVjdGl2ZVpvb20oKSk7Ci0gICAgaWYgKCFoYXNCb3hJbWFnZSB8fCAhbWFza0JveEltYWdlLT5p
c0xvYWRlZCgpKSB7Ci0gICAgICAgIGlmIChwdXNoVHJhbnNwYXJlbmN5TGF5ZXIpCi0gICAgICAg
ICAgICBwYWludEluZm8uY29udGV4dCgpLmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgICAg
IHJldHVybjsgLy8gRG9uJ3QgcGFpbnQgYW55dGhpbmcgd2hpbGUgd2Ugd2FpdCBmb3IgdGhlIGlt
YWdlIHRvIGxvYWQuCi0gICAgfQotCi0gICAgLy8gVGhlIHNpbXBsZSBjYXNlIGlzIHdoZXJlIHdl
IGFyZSB0aGUgb25seSBib3ggZm9yIHRoaXMgb2JqZWN0LiBJbiB0aG9zZQotICAgIC8vIGNhc2Vz
IG9ubHkgYSBzaW5nbGUgY2FsbCB0byBkcmF3IGlzIHJlcXVpcmVkLgotICAgIGlmICghcHJldkxp
bmVCb3goKSAmJiAhbmV4dExpbmVCb3goKSkKLSAgICAgICAgcmVuZGVyZXIoKS5wYWludE5pbmVQ
aWVjZUltYWdlKHBhaW50SW5mby5jb250ZXh0KCksIExheW91dFJlY3QoYWRqdXN0ZWRQYWludE9m
ZnNldCwgZnJhbWVSZWN0LnNpemUoKSksIHJlbmRlcmVyKCkuc3R5bGUoKSwgbWFza05pbmVQaWVj
ZUltYWdlLCBjb21wb3NpdGVPcCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgYSBt
YXNrIGltYWdlIHRoYXQgc3BhbnMgbXVsdGlwbGUgbGluZXMuCi0gICAgICAgIC8vIFdlIG5lZWQg
dG8gYWRqdXN0IF90eCBhbmQgX3R5IGJ5IHRoZSB3aWR0aCBvZiBhbGwgcHJldmlvdXMgbGluZXMu
Ci0gICAgICAgIExheW91dFVuaXQgbG9naWNhbE9mZnNldE9uTGluZTsKLSAgICAgICAgZm9yIChh
dXRvKiBjdXJyID0gcHJldkxpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZMaW5lQm94
KCkpCi0gICAgICAgICAgICBsb2dpY2FsT2Zmc2V0T25MaW5lICs9IGN1cnItPmxvZ2ljYWxXaWR0
aCgpOwotICAgICAgICBMYXlvdXRVbml0IHRvdGFsTG9naWNhbFdpZHRoID0gbG9naWNhbE9mZnNl
dE9uTGluZTsKLSAgICAgICAgZm9yIChhdXRvKiBjdXJyID0gdGhpczsgY3VycjsgY3VyciA9IGN1
cnItPm5leHRMaW5lQm94KCkpCi0gICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBjdXJy
LT5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFggPSBhZGp1c3RlZFBh
aW50T2Zmc2V0LngoKSAtIChpc0hvcml6b250YWwoKSA/IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiAw
X2x1KTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1c3RlZFBhaW50T2Zmc2V0Lnko
KSAtIChpc0hvcml6b250YWwoKSA/IDBfbHUgOiBsb2dpY2FsT2Zmc2V0T25MaW5lKTsKLSAgICAg
ICAgTGF5b3V0VW5pdCBzdHJpcFdpZHRoID0gaXNIb3Jpem9udGFsKCkgPyB0b3RhbExvZ2ljYWxX
aWR0aCA6IGZyYW1lUmVjdC53aWR0aCgpOwotICAgICAgICBMYXlvdXRVbml0IHN0cmlwSGVpZ2h0
ID0gaXNIb3Jpem9udGFsKCkgPyBmcmFtZVJlY3QuaGVpZ2h0KCkgOiB0b3RhbExvZ2ljYWxXaWR0
aDsKLQotICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gY2xpcFJlY3RGb3JOaW5lUGllY2VJ
bWFnZVN0cmlwKHRoaXMsIG1hc2tOaW5lUGllY2VJbWFnZSwgcGFpbnRSZWN0KTsKLSAgICAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBhaW50SW5mby5jb250ZXh0KCkp
OwotICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmNsaXAoY2xpcFJlY3QpOwotICAgICAgICBy
ZW5kZXJlcigpLnBhaW50TmluZVBpZWNlSW1hZ2UocGFpbnRJbmZvLmNvbnRleHQoKSwgTGF5b3V0
UmVjdChzdHJpcFgsIHN0cmlwWSwgc3RyaXBXaWR0aCwgc3RyaXBIZWlnaHQpLCByZW5kZXJlcigp
LnN0eWxlKCksIG1hc2tOaW5lUGllY2VJbWFnZSwgY29tcG9zaXRlT3ApOwotICAgIH0KLSAgICAK
LSAgICBpZiAocHVzaFRyYW5zcGFyZW5jeUxheWVyKQotICAgICAgICBwYWludEluZm8uY29udGV4
dCgpLmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci19Ci0KIExlZ2FjeUlubGluZUJveCogTGVnYWN5
SW5saW5lRmxvd0JveDo6Zmlyc3RMZWFmRGVzY2VuZGFudCgpIGNvbnN0CiB7CiAgICAgTGVnYWN5
SW5saW5lQm94KiBsZWFmID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGVnYWN5SW5saW5lRmxvd0JveC5oCmluZGV4IGNkNDFkMDFkMDYwYWIyN2ZmNTA2MThhZGY4MDAx
N2E0OWUzNmY4ZDMuLmRkODcwODU1NWNiZWRjNTM2N2M1YjczZWI1MTYxNzQzOTc4MWQ5NDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guaApAQCAt
MTE1LDExICsxMTUsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyVHJ1bmNhdGlvbigpIG92
ZXJyaWRlOwogCi0gICAgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGNvbnN0
IExheW91dFBvaW50Jik7Ci0gICAgdm9pZCBwYWludE1hc2soUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmKTsKLSAgICB2b2lkIHBhaW50RmlsbExheWVycyhjb25zdCBQYWludEluZm8mLCBj
b25zdCBDb2xvciYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IExheW91dFJlY3QmLCBDb21wb3Np
dGVPcGVyYXRvciA9IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyKTsKLSAgICB2b2lkIHBh
aW50RmlsbExheWVyKGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IENvbG9yJiwgY29uc3QgRmlsbExh
eWVyJiwgY29uc3QgTGF5b3V0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlT3Bl
cmF0b3I6OlNvdXJjZU92ZXIpOwotICAgIHZvaWQgcGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBTaGFkb3dTdHlsZSwgY29uc3QgTGF5b3V0UmVjdCYp
OwogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRV
bml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7CiAgICAgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0
b20sIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwogCkBAIC0zMDUsNyArMzAwLDYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGFkZFRleHRCb3hWaXN1YWxPdmVyZmxvdyhMZWdhY3lJbmxpbmVUZXh0Qm94
JiwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmLCBMYXlvdXRSZWN0JiBsb2dpY2Fs
VmlzdWFsT3ZlcmZsb3cpOwogICAgIHZvaWQgYWRkT3V0bGluZVZpc3VhbE92ZXJmbG93KExheW91
dFJlY3QmIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyk7CiAgICAgdm9pZCBhZGRSZXBsYWNlZENoaWxk
T3ZlcmZsb3coY29uc3QgTGVnYWN5SW5saW5lQm94KiwgTGF5b3V0UmVjdCYgbG9naWNhbExheW91
dE92ZXJmbG93LCBMYXlvdXRSZWN0JiBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cpOwotICAgIHZvaWQg
Y29uc3RyYWluVG9MaW5lVG9wQW5kQm90dG9tSWZOZWVkZWQoTGF5b3V0UmVjdCYpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSA6IDE7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApp
bmRleCA4ODhkZTMyODNmOTI2MmM1YmQyMGVmMjU5ODk2MGU0YTY4YzBlNzFmLi5jMTNjMGM2ZWUw
ZGViMTE0MjA3YTA1NTY1NDMzNjg1NDk3OTU2NGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTYyMSw3ICs2MjEsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlZENTU1BhZGRpbmcoY29uc3Qg
TGVuZ3RoJiBwYWRkaW5nKSBjb25zdAogICAgIHJldHVybiBtaW5pbXVtVmFsdWVGb3JMZW5ndGgo
cGFkZGluZywgdyk7CiB9CiAKLVJvdW5kZWRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpnZXRC
YWNrZ3JvdW5kUm91bmRlZFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgYm9yZGVyUmVjdCwgTGVnYWN5
SW5saW5lRmxvd0JveCogYm94LCBMYXlvdXRVbml0IGlubGluZUJveFdpZHRoLCBMYXlvdXRVbml0
IGlubGluZUJveEhlaWdodCwKK1JvdW5kZWRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpnZXRC
YWNrZ3JvdW5kUm91bmRlZFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgYm9yZGVyUmVjdCwgY29uc3Qg
TGVnYWN5SW5saW5lRmxvd0JveCogYm94LCBMYXlvdXRVbml0IGlubGluZUJveFdpZHRoLCBMYXlv
dXRVbml0IGlubGluZUJveEhlaWdodCwKICAgICBib29sIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2Us
IGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpIGNvbnN0CiB7CiAgICAgUm91bmRlZFJlY3Qg
Ym9yZGVyID0gc3R5bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9yKGJvcmRlclJlY3QsIGluY2x1ZGVM
b2dpY2FsTGVmdEVkZ2UsIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKTsKQEAgLTY4Miw3ICs2ODIs
NyBAQCBMYXlvdXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpib3JkZXJJbm5lclJlY3RBZGp1
c3RlZEZvckJsZWVkQXZvaWRhbmNlKGNvbnN0CiAgICAgcmV0dXJuIHNocmlua1JlY3RCeU9uZURl
dmljZVBpeGVsKGNvbnRleHQsIHJlY3QsIGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7
CiB9CiAKLVJvdW5kZWRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpiYWNrZ3JvdW5kUm91bmRl
ZFJlY3RBZGp1c3RlZEZvckJsZWVkQXZvaWRhbmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgYm9yZGVyUmVjdCwgQmFja2dyb3VuZEJsZWVkQXZvaWRh
bmNlIGJsZWVkQXZvaWRhbmNlLCBMZWdhY3lJbmxpbmVGbG93Qm94KiBib3gsIGNvbnN0IExheW91
dFNpemUmIGJveFNpemUsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRl
TG9naWNhbFJpZ2h0RWRnZSkgY29uc3QKK1JvdW5kZWRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0
OjpiYWNrZ3JvdW5kUm91bmRlZFJlY3RBZGp1c3RlZEZvckJsZWVkQXZvaWRhbmNlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgYm9yZGVyUmVjdCwgQmFj
a2dyb3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNlLCBjb25zdCBMZWdhY3lJbmxpbmVG
bG93Qm94KiBib3gsIGNvbnN0IExheW91dFNpemUmIGJveFNpemUsIGJvb2wgaW5jbHVkZUxvZ2lj
YWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSkgY29uc3QKIHsKICAgICBp
ZiAoYmxlZWRBdm9pZGFuY2UgPT0gQmFja2dyb3VuZEJsZWVkU2hyaW5rQmFja2dyb3VuZCkgewog
ICAgICAgICAvLyBXZSBzaHJpbmsgdGhlIHJlY3RhbmdsZSBieSBvbmUgZGV2aWNlIHBpeGVsIG9u
IGVhY2ggc2lkZSBiZWNhdXNlIHRoZSBibGVlZCBpcyBvbmUgcGl4ZWwgbWF4aW11bS4KQEAgLTcx
MCw3ICs3MTAsNyBAQCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
Y2hvb3NlSW50ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhpY3NDbwogICAgIHJldHVybiB2aWV3KCku
aW1hZ2VRdWFsaXR5Q29udHJvbGxlcigpLmNob29zZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRl
eHQsIHRoaXMsIGltYWdlLCBsYXllciwgc2l6ZSk7CiB9CiAKLXZvaWQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50TWFza0ZvclRleHRGaWxsQm94KEltYWdlQnVmZmVyKiBtYXNrSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgbWFza1JlY3QsIExlZ2FjeUlubGluZUZsb3dCb3gqIGJveCwgY29uc3Qg
TGF5b3V0UmVjdCYgc2Nyb2xsZWRQYWludFJlY3QpCit2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZlciogbWFza0ltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIG1hc2tSZWN0LCBjb25zdCBMZWdhY3lJbmxpbmVGbG93Qm94KiBib3gsIGNvbnN0
IExheW91dFJlY3QmIHNjcm9sbGVkUGFpbnRSZWN0KQogewogICAgIEdyYXBoaWNzQ29udGV4dCYg
bWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwogICAgIG1hc2tJbWFnZUNv
bnRleHQudHJhbnNsYXRlKC1tYXNrUmVjdC5sb2NhdGlvbigpKTsKQEAgLTcyMCw3ICs3MjAsNyBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE1hc2tGb3JUZXh0RmlsbEJveChJbWFn
ZUJ1ZmZlciogbWFza0ltYWdlLCBjb25zdAogICAgIFBhaW50SW5mbyBpbmZvKG1hc2tJbWFnZUNv
bnRleHQsIExheW91dFJlY3QgeyBtYXNrUmVjdCB9LCBQYWludFBoYXNlOjpUZXh0Q2xpcCwgUGFp
bnRCZWhhdmlvcjo6Rm9yY2VCbGFja1RleHQpOwogICAgIGlmIChib3gpIHsKICAgICAgICAgY29u
c3QgTGVnYWN5Um9vdElubGluZUJveCYgcm9vdEJveCA9IGJveC0+cm9vdCgpOwotICAgICAgICBi
b3gtPnBhaW50KGluZm8sIExheW91dFBvaW50KHNjcm9sbGVkUGFpbnRSZWN0LngoKSAtIGJveC0+
eCgpLCBzY3JvbGxlZFBhaW50UmVjdC55KCkgLSBib3gtPnkoKSksIHJvb3RCb3gubGluZVRvcCgp
LCByb290Qm94LmxpbmVCb3R0b20oKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8TGVnYWN5SW5saW5l
Rmxvd0JveCo+KGJveCktPnBhaW50KGluZm8sIExheW91dFBvaW50KHNjcm9sbGVkUGFpbnRSZWN0
LngoKSAtIGJveC0+eCgpLCBzY3JvbGxlZFBhaW50UmVjdC55KCkgLSBib3gtPnkoKSksIHJvb3RC
b3gubGluZVRvcCgpLCByb290Qm94LmxpbmVCb3R0b20oKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgTGF5b3V0U2l6ZSBsb2NhbE9mZnNldCA9IGlzPFJlbmRlckJveD4oKnRoaXMpID8gZG93bmNh
c3Q8UmVuZGVyQm94PigqdGhpcykubG9jYXRpb25PZmZzZXQoKSA6IExheW91dFNpemUoKTsKICAg
ICAgICAgcGFpbnQoaW5mbywgc2Nyb2xsZWRQYWludFJlY3QubG9jYXRpb24oKSAtIGxvY2FsT2Zm
c2V0KTsKQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZlciogbWFza0ltYWdlLCBjb25zdAogfQogCiB2
b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IEZpbGxMYXllciYg
YmdMYXllciwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwKLSAgICBCYWNrZ3JvdW5kQmxlZWRBdm9p
ZGFuY2UgYmxlZWRBdm9pZGFuY2UsIExlZ2FjeUlubGluZUZsb3dCb3gqIGJveCwgY29uc3QgTGF5
b3V0U2l6ZSYgYm94U2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIFJlbmRlckVsZW1lbnQqIGJh
Y2tncm91bmRPYmplY3QsIEJhc2VCYWNrZ3JvdW5kQ29sb3JVc2FnZSBiYXNlQmdDb2xvclVzYWdl
KQorICAgIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBibGVlZEF2b2lkYW5jZSwgY29uc3QgTGVn
YWN5SW5saW5lRmxvd0JveCogYm94LCBjb25zdCBMYXlvdXRTaXplJiBib3hTaXplLCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgUmVuZGVyRWxlbWVudCogYmFja2dyb3VuZE9iamVjdCwgQmFzZUJhY2tn
cm91bmRDb2xvclVzYWdlIGJhc2VCZ0NvbG9yVXNhZ2UpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQoKTsKIApAQCAtMjMyNiw3ICsyMzI2LDcgQEAg
Ym9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym9yZGVyT2JzY3VyZXNCYWNrZ3JvdW5kKCkgY29u
c3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym94
U2hhZG93U2hvdWxkQmVBcHBsaWVkVG9CYWNrZ3JvdW5kKGNvbnN0IExheW91dFBvaW50JiwgQmFj
a2dyb3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNlLCBMZWdhY3lJbmxpbmVGbG93Qm94
KiBpbmxpbmVGbG93Qm94KSBjb25zdAorYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym94U2hh
ZG93U2hvdWxkQmVBcHBsaWVkVG9CYWNrZ3JvdW5kKGNvbnN0IExheW91dFBvaW50JiwgQmFja2dy
b3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNlLCBjb25zdCBMZWdhY3lJbmxpbmVGbG93
Qm94KiBpbmxpbmVGbG93Qm94KSBjb25zdAogewogICAgIGlmIChibGVlZEF2b2lkYW5jZSAhPSBC
YWNrZ3JvdW5kQmxlZWROb25lKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCmluZGV4IGFhNjcxMjFlNjUz
NWVhMGU5MGMyMDc3MGRjMDU2MGI4M2I1NjA1ZDIuLmI0Y2M2NzFmNDdhMTYxZTAwMzQ1YzliM2M0
OGRkN2I0ZjY2NmM3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5oCkBAIC0yMTAsOSArMjEwLDkgQEAgcHVibGljOgogICAgIHZvaWQgcGFp
bnRCb3JkZXIoY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IFJlbmRl
clN0eWxlJiwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlID0gQmFja2dyb3VuZEJsZWVkTm9uZSwg
Ym9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlID0gdHJ1ZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJp
Z2h0RWRnZSA9IHRydWUpOwogICAgIGJvb2wgcGFpbnROaW5lUGllY2VJbWFnZShHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBOaW5l
UGllY2VJbWFnZSYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJj
ZU92ZXIpOwogICAgIHZvaWQgcGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UmVjdCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgU2hhZG93U3R5bGUsIGJvb2wgaW5jbHVk
ZUxvZ2ljYWxMZWZ0RWRnZSA9IHRydWUsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UgPSB0
cnVlKTsKLSAgICB2b2lkIHBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgQ29sb3ImLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBMYXlvdXRSZWN0JiwgQmFja2dy
b3VuZEJsZWVkQXZvaWRhbmNlLCBMZWdhY3lJbmxpbmVGbG93Qm94KiA9IG51bGxwdHIsIGNvbnN0
IExheW91dFNpemUmID0gTGF5b3V0U2l6ZSgpLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0
ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBSZW5kZXJFbGVtZW50KiBiYWNrZ3JvdW5kT2JqZWN0ID0g
bnVsbHB0ciwgQmFzZUJhY2tncm91bmRDb2xvclVzYWdlID0gQmFzZUJhY2tncm91bmRDb2xvclVz
ZSk7CisgICAgdm9pZCBwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgTGF5b3V0UmVjdCYsIEJhY2tncm91
bmRCbGVlZEF2b2lkYW5jZSwgY29uc3QgTGVnYWN5SW5saW5lRmxvd0JveCogID0gbnVsbHB0ciwg
Y29uc3QgTGF5b3V0U2l6ZSYgPSBMYXlvdXRTaXplKCksIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29t
cG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIFJlbmRlckVsZW1lbnQqIGJhY2tncm91bmRPYmpl
Y3QgPSBudWxscHRyLCBCYXNlQmFja2dyb3VuZENvbG9yVXNhZ2UgPSBCYXNlQmFja2dyb3VuZENv
bG9yVXNlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBib3hTaGFkb3dTaG91bGRCZUFwcGxpZWRUb0Jh
Y2tncm91bmQoY29uc3QgTGF5b3V0UG9pbnQmIGFic29sdXRlUGFpbnRQb3N0aW9uLCBCYWNrZ3Jv
dW5kQmxlZWRBdm9pZGFuY2UsIExlZ2FjeUlubGluZUZsb3dCb3gqID0gbnVsbHB0cikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChj
b25zdCBMYXlvdXRQb2ludCYgYWJzb2x1dGVQYWludFBvc3Rpb24sIEJhY2tncm91bmRCbGVlZEF2
b2lkYW5jZSwgY29uc3QgTGVnYWN5SW5saW5lRmxvd0JveCogID0gbnVsbHB0cikgY29uc3Q7CiAK
ICAgICAvLyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMgdG8gZGV0ZXJtaW5lIGxpbmUgaGVpZ2h0
IGFuZCBiYXNlbGluZSBwb3NpdGlvbi4KICAgICB2aXJ0dWFsIExheW91dFVuaXQgbGluZUhlaWdo
dChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQ
b3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0ID0gMDsKQEAgLTI1Niw3ICsyNTYsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdCwgUmVuZGVyRWxl
bWVudCogPSBudWxscHRyKSBjb25zdDsKICAgICBib29sIGJvcmRlck9ic2N1cmVzQmFja2dyb3Vu
ZEVkZ2UoY29uc3QgRmxvYXRTaXplJiBjb250ZXh0U2NhbGUpIGNvbnN0OwogICAgIGJvb2wgYm9y
ZGVyT2JzY3VyZXNCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0gICAgUm91bmRlZFJlY3QgYmFja2dyb3Vu
ZFJvdW5kZWRSZWN0QWRqdXN0ZWRGb3JCbGVlZEF2b2lkYW5jZShjb25zdCBHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlLCBMZWdhY3lJ
bmxpbmVGbG93Qm94KiwgY29uc3QgTGF5b3V0U2l6ZSYsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0
RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSkgY29uc3Q7CisgICAgUm91bmRlZFJl
Y3QgYmFja2dyb3VuZFJvdW5kZWRSZWN0QWRqdXN0ZWRGb3JCbGVlZEF2b2lkYW5jZShjb25zdCBH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgQmFja2dyb3VuZEJsZWVkQXZvaWRh
bmNlLCBjb25zdCBMZWdhY3lJbmxpbmVGbG93Qm94KiAsIGNvbnN0IExheW91dFNpemUmLCBib29s
IGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpIGNv
bnN0OwogICAgIExheW91dFJlY3QgYm9yZGVySW5uZXJSZWN0QWRqdXN0ZWRGb3JCbGVlZEF2b2lk
YW5jZShjb25zdCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgQmFja2dyb3Vu
ZEJsZWVkQXZvaWRhbmNlKSBjb25zdDsKIAogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGNob29z
ZUludGVycG9sYXRpb25RdWFsaXR5KEdyYXBoaWNzQ29udGV4dCYsIEltYWdlJiwgY29uc3Qgdm9p
ZCosIGNvbnN0IExheW91dFNpemUmKTsKQEAgLTMwNyw3ICszMDcsNyBAQCBwcml2YXRlOgogCiAg
ICAgTGF5b3V0U2l6ZSBjYWxjdWxhdGVGaWxsVGlsZVNpemUoY29uc3QgRmlsbExheWVyJiwgY29u
c3QgTGF5b3V0U2l6ZSYgc2NhbGVkUG9zaXRpb25pbmdBcmVhU2l6ZSkgY29uc3Q7CiAKLSAgICBS
b3VuZGVkUmVjdCBnZXRCYWNrZ3JvdW5kUm91bmRlZFJlY3QoY29uc3QgTGF5b3V0UmVjdCYsIExl
Z2FjeUlubGluZUZsb3dCb3gqLCBMYXlvdXRVbml0IGlubGluZUJveFdpZHRoLCBMYXlvdXRVbml0
IGlubGluZUJveEhlaWdodCwKKyAgICBSb3VuZGVkUmVjdCBnZXRCYWNrZ3JvdW5kUm91bmRlZFJl
Y3QoY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IExlZ2FjeUlubGluZUZsb3dCb3gqICwgTGF5b3V0
VW5pdCBpbmxpbmVCb3hXaWR0aCwgTGF5b3V0VW5pdCBpbmxpbmVCb3hIZWlnaHQsCiAgICAgICAg
IGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRn
ZSkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBmaXhlZEJhY2tncm91bmRQYWludHNJbkxvY2FsQ29v
cmRpbmF0ZXMoKSBjb25zdDsKQEAgLTMyNiw3ICszMjYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0Jiwg
Y29uc3QgUGF0aCYsIGNvbnN0IEJvcmRlckVkZ2VzJiwKICAgICAgICAgZmxvYXQgdGhpY2tuZXNz
LCBmbG9hdCBkcmF3VGhpY2tuZXNzLCBCb3hTaWRlLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAg
ICAgIENvbG9yLCBCb3JkZXJTdHlsZSwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlLCBib29sIGlu
Y2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpOwotICAg
IHZvaWQgcGFpbnRNYXNrRm9yVGV4dEZpbGxCb3goSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJl
Y3QmLCBMZWdhY3lJbmxpbmVGbG93Qm94KiwgY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZvaWQg
cGFpbnRNYXNrRm9yVGV4dEZpbGxCb3goSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBMZWdhY3lJbmxpbmVGbG93Qm94KiAsIGNvbnN0IExheW91dFJlY3QmKTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCmluZGV4IDQxNzZhNDE4NWNhNmUwODFiYzA1ZTVkMjI4MTdmNjBhNTljMGNmYTAuLmJlOTJj
YTAzMDhmNjNiNGY5YzI3NzQxYjI3ZGExNmQ5ODdhMDhmZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcApAQCAtNjkxLDcgKzY5MSw3IEBAIEltYWdlRHJhd1Jlc3Vs
dCBSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
RmxvYXRSZWN0CiAgICAgcmV0dXJuIGRyYXdSZXN1bHQ7CiB9CiAKLWJvb2wgUmVuZGVySW1hZ2U6
OmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBibGVlZEF2b2lkYW5jZSwgTGVn
YWN5SW5saW5lRmxvd0JveCopIGNvbnN0Citib29sIFJlbmRlckltYWdlOjpib3hTaGFkb3dTaG91
bGRCZUFwcGxpZWRUb0JhY2tncm91bmQoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBC
YWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRBdm9pZGFuY2UsIGNvbnN0IExlZ2FjeUlubGlu
ZUZsb3dCb3gqKSBjb25zdAogewogICAgIGlmICghUmVuZGVyQm94TW9kZWxPYmplY3Q6OmJveFNo
YWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChwYWludE9mZnNldCwgYmxlZWRBdm9pZGFu
Y2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5oCmluZGV4IDkxYmI0YmM5NmY2MDc3MDMwYWZiNDJhOWU1YzYxMWExMmQ5ZGRiYTQuLmYx
ZGYyMmJhYzBjOTJlYjBiNTYzMmNlMTk1MWJjYThhMjlkMTI3MzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5oCkBAIC0xMjEsNyArMTIxLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRy
aWNzJikgZmluYWw7CiAgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikg
ZmluYWw7CiAKLSAgICBib29sIGJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSwg
TGVnYWN5SW5saW5lRmxvd0JveCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgYm94U2hhZG93U2hv
dWxkQmVBcHBsaWVkVG9CYWNrZ3JvdW5kKGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwg
QmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlLCBjb25zdCBMZWdhY3lJbmxpbmVGbG93Qm94KikgY29u
c3QgZmluYWw7CiAKICAgICBJbnRTaXplIGltYWdlU2l6ZUZvckVycm9yKENhY2hlZEltYWdlKikg
Y29uc3Q7CiAgICAgdm9pZCByZXBhaW50T3JNYXJrRm9yTGF5b3V0KEltYWdlU2l6ZUNoYW5nZVR5
cGUsIGNvbnN0IEludFJlY3QqID0gbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuY3BwCmluZGV4IGJkNDI0YjJiYTJhNTBkNmVjMzAyMDE2NTg5MjU2
MmQzZDkwNWY1ZmMuLjVlNTBmODI4ZGJjZmViMmM1OGQyMmQ3OTk2ZTUxMTljYjJlNzdhODIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCkBAIC0xMzQ3
LDcgKzEzNDcsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRNYXNrKFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZgogICAgIHBhaW50TWFza0ltYWdl
cyhwYWludEluZm8sIHBhaW50UmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyVGFibGVDZWxsOjpib3hT
aGFkb3dTaG91bGRCZUFwcGxpZWRUb0JhY2tncm91bmQoY29uc3QgTGF5b3V0UG9pbnQmLCBCYWNr
Z3JvdW5kQmxlZWRBdm9pZGFuY2UsIExlZ2FjeUlubGluZUZsb3dCb3gqKSBjb25zdAorYm9vbCBS
ZW5kZXJUYWJsZUNlbGw6OmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChjb25z
dCBMYXlvdXRQb2ludCYsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSwgY29uc3QgTGVnYWN5SW5s
aW5lRmxvd0JveCopIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCmluZGV4IDQxYTgzYTJjODY4NGY0MTBlZGI2
ZDY1NWEyNTkwZTYyNGVhYzM1MWIuLjA2ZWY0ODQyN2EyODNmOWYzODkwZWI5ZGM2YTgzYWE0YWY5
MDNjOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNl
bGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKQEAg
LTE1MSw3ICsxNTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQ
YWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOwogICAgIHZvaWQgcGFpbnRN
YXNrKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jikgb3ZlcnJpZGU7CiAKLSAgICBib29s
IGJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSwgTGVnYWN5SW5saW5lRmxvd0Jv
eCopIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYm94U2hhZG93U2hvdWxkQmVBcHBsaWVkVG9C
YWNrZ3JvdW5kKGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgQmFja2dyb3VuZEJsZWVk
QXZvaWRhbmNlLCBjb25zdCBMZWdhY3lJbmxpbmVGbG93Qm94KikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Db250YWluZXIoUmVuZGVyRWxlbWVudCYsIGNvbnN0
IExheW91dFBvaW50JiwgYm9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQgPSAwKSBjb25zdCBvdmVy
cmlkZTsKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IGNvbXB1dGVWaXNpYmxlUmVjdElu
Q29udGFpbmVyKGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCkgY29uc3Qgb3ZlcnJpZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439037</attachid>
            <date>2021-09-23 04:37:29 -0700</date>
            <delta_ts>2021-09-23 07:12:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230683-20210923143727.patch</filename>
            <type>text/plain</type>
            <size>63742</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyOTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2Y4ZGJjYzhkZDhkNTkz
MTMwMzhkM2I1ZmZlNmVhMWFjMWZhOTFhYy4uYjY1MzRhODc0NmE3MTE3ZmRjNGYyMjc3N2RiMzgz
ODJlMWU2MjcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDIxLTA5LTIzICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgTGVnYWN5SW5s
aW5lRmxvd0JveCBwYWludGluZyBpbnRvIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDY4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbmxpbmVCb3hQYWludGVyLCBzaW1p
bGFyIHRvIFRleHRCb3hQYWludGVyLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVCb3hQYWludGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVC
b3hQYWludGVyOjpJbmxpbmVCb3hQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJv
eFBhaW50ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNsaXBSZWN0Rm9yTmluZVBpZWNl
SW1hZ2VTdHJpcCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3hQYWludGVyOjpwYWludE1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94UGFpbnRlcjo6cGFpbnREZWNvcmF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3hQYWludGVyOjpzdHlsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3hQYWludGVyOjpjb25zdHJhaW5Ub0xpbmVUb3BBbmRC
b3R0b21JZk5lZWRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3hQYWludGVy
OjpwYWludEZpbGxMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94UGFpbnRlcjo6
cGFpbnRGaWxsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94UGFpbnRlcjo6cGFp
bnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94UGFpbnRlcjo6cmVuZGVyZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94UGFpbnRlcjo6aXNIb3Jpem9udGFsIGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lJbmxpbmVGbG93Qm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lJbmxpbmVGbG93Qm94OjpwYWludEZpbGxMYXllcnMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lRmxvd0JveDo6cGFpbnRGaWxsTGF5ZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lRmxvd0JveDo6cGFpbnRCb3hTaGFkb3cp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lRmxvd0JveDo6Y29uc3Ry
YWluVG9MaW5lVG9wQW5kQm90dG9tSWZOZWVkZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y2xpcFJlY3RGb3JOaW5lUGllY2VJbWFnZVN0cmlwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lRmxvd0JveDo6cGFpbnRNYXNr
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Z2V0QmFja2dyb3VuZFJvdW5kZWRSZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpiYWNrZ3JvdW5k
Um91bmRlZFJlY3RBZGp1c3RlZEZvckJsZWVkQXZvaWRhbmNlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE1hc2tGb3JUZXh0RmlsbEJveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRl
bmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym94U2hhZG93
U2hvdWxkQmVBcHBsaWVkVG9CYWNrZ3JvdW5kIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmJveFNoYWRvd1Nob3VsZEJlQXBw
bGllZFRvQmFja2dyb3VuZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdl
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dy
b3VuZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorCiAy
MDIxLTA5LTIyICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAg
TWFrZSBTaGFyZWRCdWZmZXIgaW5oZXJpdCBmcm9tIFRocmVhZFNhZmVSZWZDb3VudGVkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDIxMzc5N2I3MDQxNjAyMTE0YmI5NWViMmFhMjRhZWNiYTNiZDM0NjQuLmZj
ZjEwMWQ3M2M4ZjhjYjdjZTlhY2ZiZDc2YjRmODgzMTg1NmNmM2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0yMjA3LDYgKzIyMDcsNyBAQCByZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcAogcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwCiByZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
LmNwcAogcmVuZGVyaW5nL0ltYWdlUXVhbGl0eUNvbnRyb2xsZXIuY3BwCityZW5kZXJpbmcvSW5s
aW5lQm94UGFpbnRlci5jcHAKIHJlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5jcHAKIHJlbmRlcmlu
Zy9MYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5jcHAKIHJlbmRlcmluZy9MYXllck92ZXJsYXBN
YXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggMWEzYmQwOGUwYjZjYWM3MTdjYTU0M2NiYmJiOWFhNTFkNThlMjAzMC4uMDAx
MTVkNjkxYzI0NTg4ZjE5OGVhOGYwNTc0MjdkYzkxMWYwZWIzMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTMzOSw2ICs1MzM5
LDcgQEAKIAkJRTRFOTRENjEyMkZGMTU4QTAwREQxOTFGIC8qIExlZ2FjeUxpbmVMYXlvdXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTFBQzc4MjJG
QUZENTAwMDE3Qjc1QiAvKiBMZWdhY3lMaW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRGMEJFMzEyNTcxMkY2RTAwOUU3NDMxIC8q
IENhcmV0UmVjdENvbXB1dGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNEYwQkUyRTI1NzEwQTc1MDA5RTc0MzEgLyogQ2FyZXRSZWN0Q29tcHV0
YXRpb24uaCAqLzsgfTsKIAkJRTRGMzhEMUIyNjI2RjEzQjAwN0IxMDY0IC8qIERlZmF1bHRSZXNv
dXJjZUxvYWRQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRGMzhEMTkyNjI2RjEzQjAwN0IxMDY0IC8qIERlZmF1bHRSZXNvdXJjZUxvYWRQ
cmlvcml0eS5oICovOyB9OworCQlFNEY4MTlDNjI2RkI0RUJGMDA5NEUxNjIgLyogSW5saW5lQm94
UGFpbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRGODE5QzUyNkZCNEVCRjAwOTRFMTYyIC8qIElubGluZUJveFBhaW50ZXIuaCAqLzsgfTsKIAkJ
RTRGOUVFRjMxNTZEQTAwNzAwRDIzRTdFIC8qIFN0eWxlU2hlZXRDb250ZW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRGOUVFRjExNTZEODRDNDAw
RDIzRTdFIC8qIFN0eWxlU2hlZXRDb250ZW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU1MDYyMDg0MjU0MDkxOUMwMEM0MzA5MSAvKiBDb250
YWN0c1JlcXVlc3REYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNTA2MjA4MzI1NDA5MTlCMDBDNDMwOTEgLyogQ29udGFjdHNSZXF1ZXN0RGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU1MTY2
OTkxMjBGRjk5MTgwMDlEMkMyNyAvKiBMaXN0QnV0dG9uQXJyb3dAMngucG5nIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNTE2Njk4RjIwRkY5OTE2MDA5
RDJDMjcgLyogTGlzdEJ1dHRvbkFycm93QDJ4LnBuZyAqLzsgfTsKQEAgLTE2NjA3LDYgKzE2NjA4
LDggQEAKIAkJRTRGMEJFMzAyNTcxMEE3NjAwOUU3NDMxIC8qIENhcmV0UmVjdENvbXB1dGF0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhcmV0UmVjdENvbXB1
dGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRGMzhEMTkyNjI2RjEz
QjAwN0IxMDY0IC8qIERlZmF1bHRSZXNvdXJjZUxvYWRQcmlvcml0eS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEZWZhdWx0UmVzb3VyY2VMb2FkUHJpb3JpdHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRGMzhEMUMyNjI2RjE0NDAwN0IxMDY0IC8qIERlZmF1
bHRSZXNvdXJjZUxvYWRQcmlvcml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZWZhdWx0UmVzb3VyY2VMb2FkUHJpb3JpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFNEY4MTlDMjI2RkI0RUFGMDA5NEUxNjIgLyogSW5saW5lQm94UGFpbnRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVCb3hQYWlu
dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRGODE5QzUyNkZCNEVCRjAw
OTRFMTYyIC8qIElubGluZUJveFBhaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5saW5lQm94UGFpbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NEY5RUVGMDE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlU2hlZXRDb250ZW50cy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBT
dHlsZVNoZWV0Q29udGVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5
bGVTaGVldENvbnRlbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RkI0QjM1
MjM5QkVCMTAwMDNDMzM2QSAvKiBMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5OTA1LDYgKzI5OTA4LDggQEAKIAkJCQk5MzA3
RjFENjBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5oICovLAogCQkJCUI1MUEyRjQw
MTdEN0Q1REEwMDcyNTE3QSAvKiBJbWFnZVF1YWxpdHlDb250cm9sbGVyLmNwcCAqLywKIAkJCQlC
NTFBMkYzRTE3RDdEM0E0MDA3MjUxN0EgLyogSW1hZ2VRdWFsaXR5Q29udHJvbGxlci5oICovLAor
CQkJCUU0RjgxOUMyMjZGQjRFQUYwMDk0RTE2MiAvKiBJbmxpbmVCb3hQYWludGVyLmNwcCAqLywK
KwkJCQlFNEY4MTlDNTI2RkI0RUJGMDA5NEUxNjIgLyogSW5saW5lQm94UGFpbnRlci5oICovLAog
CQkJCTkzMEM5MERDMTlDRjk2NTMwMEQ2QzIxQSAvKiBJbmxpbmVJdGVyYXRvci5jcHAgKi8sCiAJ
CQkJQkNFNzg5MTUxMTIwRDYwODAwNjBFQ0U1IC8qIElubGluZUl0ZXJhdG9yLmggKi8sCiAJCQkJ
MEZFQzEyMEIyMkJGMkNDNzAwNEU5RDM1IC8qIExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmNw
cCAqLywKQEAgLTMyODk5LDEwICszMjkwNCwxMiBAQAogCQkJCTUxRUVBQTc0MUJFRkZBQjEwMDIx
ODAwOCAvKiBJbmRleFZhbHVlRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzEzOEY4MUJG
MTI4QkIwMDBENUYwMSAvKiBJbmRleFZhbHVlU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
MDYzRjgzMUUyM0ZBODkwMDgxMkJFMyAvKiBJbml0RGF0YVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAq
LywKKwkJCQlFNEY4MTlDNjI2RkI0RUJGMDA5NEUxNjIgLyogSW5saW5lQm94UGFpbnRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTMwNTkyNjQxRTI3QTNBRDAwRDU3Qzk4IC8qIElubGluZUNsYXNz
aWNTY3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRTE5ODE3MjE3ODM5N0MwMDQ0NkYwOCAv
KiBJbmxpbmVDb250ZW50QnJlYWtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTExRkExQzgyNkYw
RjMwRjAwM0I4RjE2IC8qIElubGluZURhbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTE1MTNE
MDMyNkQ5ODFFODAwNEQzRkFBIC8qIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNkY5MTQyMTEyNTE1MjEzODAwNEU0RkVBIC8qIElubGluZURpc3BsYXlM
aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjdDQTNDQTIwOEMyQjJFMDAyRjI5QUIgLyogSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ3QzRENTdEMjY1MDhC
Q0IwMEM3QUIxRiAvKiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTZGRTYzNkU4MjY0Nzk2MjkwMEYwOTUxRSAvKiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTMyOTE2LDcgKzMyOTIzLDYgQEAKIAkJCQkxMUMzMjI3RDI2RDk1
OENFMDAzMjhGNEQgLyogSW5saW5lTGluZUJveEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTZGNkVFNzQzMjZENDRFRTMwMDM3NENEQSAvKiBJbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjI2RUI0ODIzNDAwNEE1MDA2OTA2RTIgLyogSW5saW5l
TGluZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTZGOTE0MjExMjUxNTIxMzgwMDRFNEZF
QSAvKiBJbmxpbmVEaXNwbGF5TGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZDM0Y5NDcyNTE2
NzU2NzAwQTQ5QkVBIC8qIElubGluZUxpbmVSdW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUY0NTc3
NUNFMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNkY0MERBODIyNTEzMDMzQTAwRUMwNEI3IC8qIElubGluZVJlY3QuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ3YmRmNzVjOTA3MjJlYzM2OTIyOTMwZWE0NDU2MzI5MDljZmZkZTEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFpbnRlci5jcHAK
QEAgLTAsMCArMSwzNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIklubGluZUJveFBhaW50ZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkxlZ2FjeUlubGluZUZsb3dCb3guaCIKKyNpbmNsdWRlICJQYWludEluZm8u
aCIKKyNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKKyNpbmNsdWRlICJSZW5kZXJJbmxpbmUu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitJbmxpbmVCb3hQYWludGVyOjpJbmxpbmVCb3hQYWludGVy
KGNvbnN0IExlZ2FjeUlubGluZUZsb3dCb3gmIGlubGluZUJveCwgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKKyAgICA6IG1faW5saW5lQm94KGlu
bGluZUJveCkKKyAgICAsIG1fcGFpbnRJbmZvKHBhaW50SW5mbykKKyAgICAsIG1fcGFpbnRPZmZz
ZXQocGFpbnRPZmZzZXQpCisgICAgLCBtX3JlbmRlcmVyKG1faW5saW5lQm94LnJlbmRlcmVyKCkp
CisgICAgLCBtX2lzRmlyc3RMaW5lKG1faW5saW5lQm94LmlzRmlyc3RMaW5lKCkpCisgICAgLCBt
X2lzUm9vdElubGluZUJveChpczxSZW5kZXJCbG9ja0Zsb3c+KG1fcmVuZGVyZXIpKQorICAgICwg
bV9pc0hvcml6b250YWwobV9pbmxpbmVCb3guaXNIb3Jpem9udGFsKCkpCit7Cit9CisKK0lubGlu
ZUJveFBhaW50ZXI6On5JbmxpbmVCb3hQYWludGVyKCkgPSBkZWZhdWx0OworCit2b2lkIElubGlu
ZUJveFBhaW50ZXI6OnBhaW50KCkKK3sKKyAgICBpZiAobV9wYWludEluZm8ucGhhc2UgPT0gUGFp
bnRQaGFzZTo6T3V0bGluZSB8fCBtX3BhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpTZWxm
T3V0bGluZSkgeworICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSAh
PSBWaXNpYmlsaXR5OjpWaXNpYmxlIHx8ICFyZW5kZXJlcigpLmhhc091dGxpbmUoKSB8fCBtX2lz
Um9vdElubGluZUJveCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvJiBpbmxp
bmVGbG93ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihyZW5kZXJlcigpKTsKKyAgICAgICAgUmVu
ZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IG51bGxwdHI7CisKKyAgICAgICAgYm9vbCBjb250
YWluaW5nQmxvY2tQYWludHNDb250aW51YXRpb25PdXRsaW5lID0gaW5saW5lRmxvdy5jb250aW51
YXRpb24oKSB8fCBpbmxpbmVGbG93LmlzQ29udGludWF0aW9uKCk7CisgICAgICAgIGlmIChjb250
YWluaW5nQmxvY2tQYWludHNDb250aW51YXRpb25PdXRsaW5lKSB7CisgICAgICAgICAgICAvLyBG
SVhNRTogU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY5MC4g
V2UgY3VycmVudGx5IGRvbid0IHJlY29ubmVjdCBpbmxpbmUgY29udGludWF0aW9ucworICAgICAg
ICAgICAgLy8gYWZ0ZXIgYSBjaGlsZCByZW1vdmFsLiBBcyBhIHJlc3VsdCwgdGhvc2UgbWVyZ2Vk
IGlubGluZXMgZG8gbm90IGdldCBzZXBlcmF0ZWQgYW5kIGhlbmNlIG5vdCBnZXQgZW5jbG9zZWQg
YnkKKyAgICAgICAgICAgIC8vIGFub255bW91cyBibG9ja3MuIEluIHRoaXMgY2FzZSwgaXQgaXMg
YmV0dGVyIHRvIGJhaWwgb3V0IGFuZCBwYWludCBpdCBvdXJzZWxmLgorICAgICAgICAgICAgUmVu
ZGVyQmxvY2sqIGVuY2xvc2luZ0Fub255bW91c0Jsb2NrID0gcmVuZGVyZXIoKS5jb250YWluaW5n
QmxvY2soKTsKKyAgICAgICAgICAgIGlmICghZW5jbG9zaW5nQW5vbnltb3VzQmxvY2stPmlzQW5v
bnltb3VzQmxvY2soKSkKKyAgICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2tQYWludHNDb250
aW51YXRpb25PdXRsaW5lID0gZmFsc2U7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBjb250YWluaW5nQmxvY2sgPSBlbmNsb3NpbmdBbm9ueW1vdXNCbG9jay0+Y29udGFpbmlu
Z0Jsb2NrKCk7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBib3ggPSAmcmVuZGVyZXIoKTsg
Ym94ICE9IGNvbnRhaW5pbmdCbG9jazsgYm94ID0gJmJveC0+cGFyZW50KCktPmVuY2xvc2luZ0Jv
eE1vZGVsT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJveC0+aGFzU2VsZlBh
aW50aW5nTGF5ZXIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2Nr
UGFpbnRzQ29udGludWF0aW9uT3V0bGluZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrUGFpbnRz
Q29udGludWF0aW9uT3V0bGluZSkgeworICAgICAgICAgICAgLy8gQWRkIG91cnNlbHZlcyB0byB0
aGUgY29udGFpbmluZyBibG9jayBvZiB0aGUgZW50aXJlIGNvbnRpbnVhdGlvbiBzbyB0aGF0IGl0
IGNhbgorICAgICAgICAgICAgLy8gcGFpbnQgdXMgYXRvbWljYWxseS4KKyAgICAgICAgICAgIGNv
bnRhaW5pbmdCbG9jay0+YWRkQ29udGludWF0aW9uV2l0aE91dGxpbmUoZG93bmNhc3Q8UmVuZGVy
SW5saW5lPihyZW5kZXJlcigpLmVsZW1lbnQoKS0+cmVuZGVyZXIoKSkpOworICAgICAgICB9IGVs
c2UgaWYgKCFpbmxpbmVGbG93LmlzQ29udGludWF0aW9uKCkpCisgICAgICAgICAgICBtX3BhaW50
SW5mby5vdXRsaW5lT2JqZWN0cy0+YWRkKCZpbmxpbmVGbG93KTsKKworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKG1fcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6Ok1hc2sp
IHsKKyAgICAgICAgcGFpbnRNYXNrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBw
YWludERlY29yYXRpb25zKCk7Cit9CisKK3N0YXRpYyBMYXlvdXRSZWN0IGNsaXBSZWN0Rm9yTmlu
ZVBpZWNlSW1hZ2VTdHJpcChjb25zdCBMZWdhY3lJbmxpbmVGbG93Qm94KiBib3gsIGNvbnN0IE5p
bmVQaWVjZUltYWdlJiBpbWFnZSwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnRSZWN0KQoreworICAg
IExheW91dFJlY3QgY2xpcFJlY3QocGFpbnRSZWN0KTsKKyAgICBhdXRvJiBzdHlsZSA9IGJveC0+
cmVuZGVyZXIoKS5zdHlsZSgpOworICAgIExheW91dEJveEV4dGVudCBvdXRzZXRzID0gc3R5bGUu
aW1hZ2VPdXRzZXRzKGltYWdlKTsKKyAgICBpZiAoYm94LT5pc0hvcml6b250YWwoKSkgeworICAg
ICAgICBjbGlwUmVjdC5zZXRZKHBhaW50UmVjdC55KCkgLSBvdXRzZXRzLnRvcCgpKTsKKyAgICAg
ICAgY2xpcFJlY3Quc2V0SGVpZ2h0KHBhaW50UmVjdC5oZWlnaHQoKSArIG91dHNldHMudG9wKCkg
KyBvdXRzZXRzLmJvdHRvbSgpKTsKKyAgICAgICAgaWYgKGJveC0+aW5jbHVkZUxvZ2ljYWxMZWZ0
RWRnZSgpKSB7CisgICAgICAgICAgICBjbGlwUmVjdC5zZXRYKHBhaW50UmVjdC54KCkgLSBvdXRz
ZXRzLmxlZnQoKSk7CisgICAgICAgICAgICBjbGlwUmVjdC5zZXRXaWR0aChwYWludFJlY3Qud2lk
dGgoKSArIG91dHNldHMubGVmdCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYm94LT5pbmNs
dWRlTG9naWNhbFJpZ2h0RWRnZSgpKQorICAgICAgICAgICAgY2xpcFJlY3Quc2V0V2lkdGgoY2xp
cFJlY3Qud2lkdGgoKSArIG91dHNldHMucmlnaHQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Y2xpcFJlY3Quc2V0WChwYWludFJlY3QueCgpIC0gb3V0c2V0cy5sZWZ0KCkpOworICAgICAgICBj
bGlwUmVjdC5zZXRXaWR0aChwYWludFJlY3Qud2lkdGgoKSArIG91dHNldHMubGVmdCgpICsgb3V0
c2V0cy5yaWdodCgpKTsKKyAgICAgICAgaWYgKGJveC0+aW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSgp
KSB7CisgICAgICAgICAgICBjbGlwUmVjdC5zZXRZKHBhaW50UmVjdC55KCkgLSBvdXRzZXRzLnRv
cCgpKTsKKyAgICAgICAgICAgIGNsaXBSZWN0LnNldEhlaWdodChwYWludFJlY3QuaGVpZ2h0KCkg
KyBvdXRzZXRzLnRvcCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYm94LT5pbmNsdWRlTG9n
aWNhbFJpZ2h0RWRnZSgpKQorICAgICAgICAgICAgY2xpcFJlY3Quc2V0SGVpZ2h0KGNsaXBSZWN0
LmhlaWdodCgpICsgb3V0c2V0cy5ib3R0b20oKSk7CisgICAgfQorICAgIHJldHVybiBjbGlwUmVj
dDsKK30KKwordm9pZCBJbmxpbmVCb3hQYWludGVyOjpwYWludE1hc2soKQoreworICAgIGlmICgh
bV9wYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJlbmRlcmVyKCkpIHx8IHJlbmRlcmVy
KCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6VmlzaWJsZSB8fCBtX3BhaW50
SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpNYXNrKQorICAgICAgICByZXR1cm47CisKKyAgICBM
YXlvdXRSZWN0IGZyYW1lUmVjdChtX2lubGluZUJveC5mcmFtZVJlY3QoKSk7CisgICAgY29uc3Ry
YWluVG9MaW5lVG9wQW5kQm90dG9tSWZOZWVkZWQoZnJhbWVSZWN0KTsKKworICAgIC8vIE1vdmUg
eC95IHRvIG91ciBjb29yZGluYXRlcy4KKyAgICBMYXlvdXRSZWN0IGxvY2FsUmVjdChmcmFtZVJl
Y3QpOworICAgIG1faW5saW5lQm94LnJvb3QoKS5ibG9ja0Zsb3coKS5mbGlwRm9yV3JpdGluZ01v
ZGUobG9jYWxSZWN0KTsKKyAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9w
YWludE9mZnNldCArIGxvY2FsUmVjdC5sb2NhdGlvbigpOworCisgICAgY29uc3QgTmluZVBpZWNl
SW1hZ2UmIG1hc2tOaW5lUGllY2VJbWFnZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS5tYXNrQm94SW1h
Z2UoKTsKKyAgICBTdHlsZUltYWdlKiBtYXNrQm94SW1hZ2UgPSByZW5kZXJlcigpLnN0eWxlKCku
bWFza0JveEltYWdlKCkuaW1hZ2UoKTsKKworICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0
byBwdXNoIGEgdHJhbnNwYXJlbmN5IGxheWVyIHRvIHJlbmRlciBvdXIgbWFzay4KKyAgICBib29s
IHB1c2hUcmFuc3BhcmVuY3lMYXllciA9IGZhbHNlOworICAgIGJvb2wgY29tcG9zaXRlZE1hc2sg
PSByZW5kZXJlcigpLmhhc0xheWVyKCkgJiYgcmVuZGVyZXIoKS5sYXllcigpLT5oYXNDb21wb3Np
dGVkTWFzaygpOworICAgIGJvb2wgZmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzID0gcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkucGFpbnRCZWhhdmlvcigpLmNvbnRhaW5zKFBhaW50QmVoYXZp
b3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3AgPSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlcjsKKyAgICBpZiAoIWNvbXBv
c2l0ZWRNYXNrIHx8IGZsYXR0ZW5Db21wb3NpdGluZ0xheWVycykgeworICAgICAgICBpZiAoKG1h
c2tCb3hJbWFnZSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFza0xheWVycygpLmhhc0ltYWdlKCkp
IHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5tYXNrTGF5ZXJzKCkubmV4dCgpKQorICAgICAgICAgICAg
cHVzaFRyYW5zcGFyZW5jeUxheWVyID0gdHJ1ZTsKKworICAgICAgICBjb21wb3NpdGVPcCA9IENv
bXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluOworICAgICAgICBpZiAocHVzaFRyYW5zcGFy
ZW5jeUxheWVyKSB7CisgICAgICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsKKyAgICAgICAg
ICAgIG1fcGFpbnRJbmZvLmNvbnRleHQoKS5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEuMGYpOwor
ICAgICAgICAgICAgY29tcG9zaXRlT3AgPSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlcjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIExheW91dFJlY3QgcGFpbnRSZWN0ID0gTGF5b3V0UmVj
dChhZGp1c3RlZFBhaW50T2Zmc2V0LCBmcmFtZVJlY3Quc2l6ZSgpKTsKKworICAgIHBhaW50Rmls
bExheWVycyhDb2xvcigpLCByZW5kZXJlcigpLnN0eWxlKCkubWFza0xheWVycygpLCBwYWludFJl
Y3QsIGNvbXBvc2l0ZU9wKTsKKworICAgIGJvb2wgaGFzQm94SW1hZ2UgPSBtYXNrQm94SW1hZ2Ug
JiYgbWFza0JveEltYWdlLT5jYW5SZW5kZXIoJnJlbmRlcmVyKCksIHJlbmRlcmVyKCkuc3R5bGUo
KS5lZmZlY3RpdmVab29tKCkpOworICAgIGlmICghaGFzQm94SW1hZ2UgfHwgIW1hc2tCb3hJbWFn
ZS0+aXNMb2FkZWQoKSkgeworICAgICAgICBpZiAocHVzaFRyYW5zcGFyZW5jeUxheWVyKQorICAg
ICAgICAgICAgbV9wYWludEluZm8uY29udGV4dCgpLmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Cisg
ICAgICAgIHJldHVybjsgLy8gRG9uJ3QgcGFpbnQgYW55dGhpbmcgd2hpbGUgd2Ugd2FpdCBmb3Ig
dGhlIGltYWdlIHRvIGxvYWQuCisgICAgfQorCisgICAgYm9vbCBoYXNTaW5nbGVMaW5lID0gIW1f
aW5saW5lQm94LnByZXZMaW5lQm94KCkgJiYgIW1faW5saW5lQm94Lm5leHRMaW5lQm94KCk7Cisg
ICAgaWYgKGhhc1NpbmdsZUxpbmUpCisgICAgICAgIHJlbmRlcmVyKCkucGFpbnROaW5lUGllY2VJ
bWFnZShtX3BhaW50SW5mby5jb250ZXh0KCksIExheW91dFJlY3QoYWRqdXN0ZWRQYWludE9mZnNl
dCwgZnJhbWVSZWN0LnNpemUoKSksIHJlbmRlcmVyKCkuc3R5bGUoKSwgbWFza05pbmVQaWVjZUlt
YWdlLCBjb21wb3NpdGVPcCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFdlIGhhdmUgYSBtYXNr
IGltYWdlIHRoYXQgc3BhbnMgbXVsdGlwbGUgbGluZXMuCisgICAgICAgIC8vIFdlIG5lZWQgdG8g
YWRqdXN0IF90eCBhbmQgX3R5IGJ5IHRoZSB3aWR0aCBvZiBhbGwgcHJldmlvdXMgbGluZXMuCisg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbE9mZnNldE9uTGluZTsKKyAgICAgICAgZm9yIChhdXRv
KiBjdXJyID0gbV9pbmxpbmVCb3gucHJldkxpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPnBy
ZXZMaW5lQm94KCkpCisgICAgICAgICAgICBsb2dpY2FsT2Zmc2V0T25MaW5lICs9IGN1cnItPmxv
Z2ljYWxXaWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IHRvdGFsTG9naWNhbFdpZHRoID0gbG9n
aWNhbE9mZnNldE9uTGluZTsKKyAgICAgICAgZm9yIChhdXRvKiBjdXJyID0gJm1faW5saW5lQm94
OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKKyAgICAgICAgICAgIHRvdGFsTG9n
aWNhbFdpZHRoICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IHN0
cmlwWCA9IGFkanVzdGVkUGFpbnRPZmZzZXQueCgpIC0gKGlzSG9yaXpvbnRhbCgpID8gbG9naWNh
bE9mZnNldE9uTGluZSA6IDBfbHUpOworICAgICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IGFkanVz
dGVkUGFpbnRPZmZzZXQueSgpIC0gKGlzSG9yaXpvbnRhbCgpID8gMF9sdSA6IGxvZ2ljYWxPZmZz
ZXRPbkxpbmUpOworICAgICAgICBMYXlvdXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwo
KSA/IHRvdGFsTG9naWNhbFdpZHRoIDogZnJhbWVSZWN0LndpZHRoKCk7CisgICAgICAgIExheW91
dFVuaXQgc3RyaXBIZWlnaHQgPSBpc0hvcml6b250YWwoKSA/IGZyYW1lUmVjdC5oZWlnaHQoKSA6
IHRvdGFsTG9naWNhbFdpZHRoOworCisgICAgICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBjbGlw
UmVjdEZvck5pbmVQaWVjZUltYWdlU3RyaXAoJm1faW5saW5lQm94LCBtYXNrTmluZVBpZWNlSW1h
Z2UsIHBhaW50UmVjdCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihtX3BhaW50SW5mby5jb250ZXh0KCkpOworICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0
KCkuY2xpcChjbGlwUmVjdCk7CisgICAgICAgIHJlbmRlcmVyKCkucGFpbnROaW5lUGllY2VJbWFn
ZShtX3BhaW50SW5mby5jb250ZXh0KCksIExheW91dFJlY3Qoc3RyaXBYLCBzdHJpcFksIHN0cmlw
V2lkdGgsIHN0cmlwSGVpZ2h0KSwgcmVuZGVyZXIoKS5zdHlsZSgpLCBtYXNrTmluZVBpZWNlSW1h
Z2UsIGNvbXBvc2l0ZU9wKTsKKyAgICB9CisKKyAgICBpZiAocHVzaFRyYW5zcGFyZW5jeUxheWVy
KQorICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
K30KKwordm9pZCBJbmxpbmVCb3hQYWludGVyOjpwYWludERlY29yYXRpb25zKCkKK3sKKyAgICBp
ZiAoIW1fcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChyZW5kZXJlcigpKSB8fCByZW5k
ZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUgfHwgbV9w
YWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFtX2lzUm9vdElubGluZUJveCAmJiAhcmVuZGVyZXIoKS5oYXNWaXNpYmxl
Qm94RGVjb3JhdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgc3R5bGUgPSB0
aGlzLT5zdHlsZSgpOworICAgIC8vIFlvdSBjYW4gdXNlIHA6OmZpcnN0LWxpbmUgdG8gc3BlY2lm
eSBhIGJhY2tncm91bmQuIElmIHNvLCB0aGUgcm9vdCBpbmxpbmUgYm94ZXMgZm9yCisgICAgLy8g
YSBsaW5lIG1heSBhY3R1YWxseSBoYXZlIHRvIHBhaW50IGEgYmFja2dyb3VuZC4KKyAgICBpZiAo
bV9pc1Jvb3RJbmxpbmVCb3ggJiYgKCFtX2lzRmlyc3RMaW5lIHx8ICZzdHlsZSA9PSAmcmVuZGVy
ZXIoKS5zdHlsZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5b3V0UmVjdCBmcmFtZVJl
Y3QobV9pbmxpbmVCb3guZnJhbWVSZWN0KCkpOworICAgIGNvbnN0cmFpblRvTGluZVRvcEFuZEJv
dHRvbUlmTmVlZGVkKGZyYW1lUmVjdCk7CisKKyAgICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRp
bmF0ZXMuCisgICAgTGF5b3V0UmVjdCBsb2NhbFJlY3QoZnJhbWVSZWN0KTsKKyAgICBtX2lubGlu
ZUJveC5yb290KCkuYmxvY2tGbG93KCkuZmxpcEZvcldyaXRpbmdNb2RlKGxvY2FsUmVjdCk7CisK
KyAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBhaW50b2Zmc2V0ID0gbV9wYWludE9mZnNldCArIGxv
Y2FsUmVjdC5sb2NhdGlvbigpOworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1fcGFp
bnRJbmZvLmNvbnRleHQoKTsKKyAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IExheW91dFJlY3Qo
YWRqdXN0ZWRQYWludG9mZnNldCwgZnJhbWVSZWN0LnNpemUoKSk7CisgICAgLy8gU2hhZG93IGNv
bWVzIGZpcnN0IGFuZCBpcyBiZWhpbmQgdGhlIGJhY2tncm91bmQgYW5kIGJvcmRlci4KKyAgICBp
ZiAoIXJlbmRlcmVyKCkuYm94U2hhZG93U2hvdWxkQmVBcHBsaWVkVG9CYWNrZ3JvdW5kKGFkanVz
dGVkUGFpbnRvZmZzZXQsIEJhY2tncm91bmRCbGVlZE5vbmUsICZtX2lubGluZUJveCkpCisgICAg
ICAgIHBhaW50Qm94U2hhZG93KFNoYWRvd1N0eWxlOjpOb3JtYWwsIHBhaW50UmVjdCk7CisKKyAg
ICBhdXRvIGNvbG9yID0gc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKTsKKyAgICBhdXRvIGNvbXBvc2l0ZU9wID0gcmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmNvbXBvc2l0ZU9wZXJhdG9yRm9yQmFja2dyb3VuZENvbG9yKGNvbG9yLCByZW5kZXJlcigp
KTsKKworICAgIGNvbG9yID0gc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoY29sb3Ip
OworCisgICAgcGFpbnRGaWxsTGF5ZXJzKGNvbG9yLCBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCks
IHBhaW50UmVjdCwgY29tcG9zaXRlT3ApOworICAgIHBhaW50Qm94U2hhZG93KFNoYWRvd1N0eWxl
OjpJbnNldCwgcGFpbnRSZWN0KTsKKworICAgIC8vIDpmaXJzdC1saW5lIGNhbm5vdCBiZSB1c2Vk
IHRvIHB1dCBib3JkZXJzIG9uIGEgbGluZS4gQWx3YXlzIHBhaW50IGJvcmRlcnMgd2l0aCBvdXIK
KyAgICAvLyBub24tZmlyc3QtbGluZSBzdHlsZS4KKyAgICBpZiAobV9pc1Jvb3RJbmxpbmVCb3gg
fHwgIXJlbmRlcmVyKCkuc3R5bGUoKS5oYXNWaXNpYmxlQm9yZGVyRGVjb3JhdGlvbigpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYgYm9yZGVySW1hZ2UgPSBy
ZW5kZXJlcigpLnN0eWxlKCkuYm9yZGVySW1hZ2UoKTsKKyAgICBTdHlsZUltYWdlKiBib3JkZXJJ
bWFnZVNvdXJjZSA9IGJvcmRlckltYWdlLmltYWdlKCk7CisgICAgYm9vbCBoYXNCb3JkZXJJbWFn
ZSA9IGJvcmRlckltYWdlU291cmNlICYmIGJvcmRlckltYWdlU291cmNlLT5jYW5SZW5kZXIoJnJl
bmRlcmVyKCksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CisgICAgaWYgKGhhc0JvcmRlckltYWdl
ICYmICFib3JkZXJJbWFnZVNvdXJjZS0+aXNMb2FkZWQoKSkKKyAgICAgICAgcmV0dXJuOyAvLyBE
b24ndCBwYWludCBhbnl0aGluZyB3aGlsZSB3ZSB3YWl0IGZvciB0aGUgaW1hZ2UgdG8gbG9hZC4K
KworICAgIGJvb2wgaGFzU2luZ2xlTGluZSA9ICFtX2lubGluZUJveC5wcmV2TGluZUJveCgpICYm
ICFtX2lubGluZUJveC5uZXh0TGluZUJveCgpOworICAgIGlmICghaGFzQm9yZGVySW1hZ2UgfHwg
aGFzU2luZ2xlTGluZSkgeworICAgICAgICByZW5kZXJlcigpLnBhaW50Qm9yZGVyKG1fcGFpbnRJ
bmZvLCBwYWludFJlY3QsIHN0eWxlLCBCYWNrZ3JvdW5kQmxlZWROb25lLCBtX2lubGluZUJveC5p
bmNsdWRlTG9naWNhbExlZnRFZGdlKCksIG1faW5saW5lQm94LmluY2x1ZGVMb2dpY2FsUmlnaHRF
ZGdlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgaGF2ZSBhIGJvcmRl
ciBpbWFnZSB0aGF0IHNwYW5zIG11bHRpcGxlIGxpbmVzLgorICAgIC8vIFdlIG5lZWQgdG8gYWRq
dXN0IHR4IGFuZCB0eSBieSB0aGUgd2lkdGggb2YgYWxsIHByZXZpb3VzIGxpbmVzLgorICAgIC8v
IFRoaW5rIG9mIGJvcmRlciBpbWFnZSBwYWludGluZyBvbiBpbmxpbmVzIGFzIHRob3VnaCB5b3Ug
aGFkIG9uZSBsb25nIGxpbmUsIGEgc2luZ2xlIGNvbnRpbnVvdXMKKyAgICAvLyBzdHJpcC4gRXZl
biB0aG91Z2ggdGhhdCBzdHJpcCBoYXMgYmVlbiBicm9rZW4gdXAgYWNyb3NzIG11bHRpcGxlIGxp
bmVzLCB5b3Ugc3RpbGwgcGFpbnQgaXQKKyAgICAvLyBhcyB0aG91Z2ggeW91IGhhZCBvbmUgc2lu
Z2xlIGxpbmUuIFRoaXMgbWVhbnMgZWFjaCBsaW5lIGhhcyB0byBwaWNrIHVwIHRoZSBpbWFnZSB3
aGVyZQorICAgIC8vIHRoZSBwcmV2aW91cyBsaW5lIGxlZnQgb2ZmLgorICAgIC8vIEZJWE1FOiBX
aGF0IHRoZSBoZWNrIGRvIHdlIGRvIHdpdGggUlRMIGhlcmU/IFRoZSBtYXRoIHdlJ3JlIHVzaW5n
IGlzIG9idmlvdXNseSBub3QgcmlnaHQsCisgICAgLy8gYnV0IGl0IGlzbid0IGV2ZW4gY2xlYXIg
aG93IHRoaXMgc2hvdWxkIHdvcmsgYXQgYWxsLgorICAgIExheW91dFVuaXQgbG9naWNhbE9mZnNl
dE9uTGluZTsKKyAgICBmb3IgKGF1dG8qIGN1cnIgPSBtX2lubGluZUJveC5wcmV2TGluZUJveCgp
OyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkKKyAgICAgICAgbG9naWNhbE9mZnNl
dE9uTGluZSArPSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IHRvdGFsTG9n
aWNhbFdpZHRoID0gbG9naWNhbE9mZnNldE9uTGluZTsKKyAgICBmb3IgKGF1dG8qIGN1cnIgPSAm
bV9pbmxpbmVCb3g7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKQorICAgICAgICB0
b3RhbExvZ2ljYWxXaWR0aCArPSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsKKworICAgIExheW91dFVu
aXQgc3RyaXBYID0gYWRqdXN0ZWRQYWludG9mZnNldC54KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBs
b2dpY2FsT2Zmc2V0T25MaW5lIDogMF9sdSk7CisgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1
c3RlZFBhaW50b2Zmc2V0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IDBfbHUgOiBsb2dpY2FsT2Zm
c2V0T25MaW5lKTsKKyAgICBMYXlvdXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwoKSA/
IHRvdGFsTG9naWNhbFdpZHRoIDogZnJhbWVSZWN0LndpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBz
dHJpcEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gZnJhbWVSZWN0LmhlaWdodCgpIDogdG90YWxM
b2dpY2FsV2lkdGg7CisKKyAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gY2xpcFJlY3RGb3JOaW5l
UGllY2VJbWFnZVN0cmlwKCZtX2lubGluZUJveCwgYm9yZGVySW1hZ2UsIHBhaW50UmVjdCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOworICAgIGNv
bnRleHQuY2xpcChjbGlwUmVjdCk7CisgICAgcmVuZGVyZXIoKS5wYWludEJvcmRlcihtX3BhaW50
SW5mbywgTGF5b3V0UmVjdChzdHJpcFgsIHN0cmlwWSwgc3RyaXBXaWR0aCwgc3RyaXBIZWlnaHQp
LCBzdHlsZSk7Cit9CisKK3ZvaWQgSW5saW5lQm94UGFpbnRlcjo6cGFpbnRGaWxsTGF5ZXJzKGNv
bnN0IENvbG9yJiBjb2xvciwgY29uc3QgRmlsbExheWVyJiBmaWxsTGF5ZXIsIGNvbnN0IExheW91
dFJlY3QmIHJlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIFZlY3Rvcjxjb25zdCBG
aWxsTGF5ZXIqLCA4PiBsYXllcnM7CisgICAgZm9yIChhdXRvKiBsYXllciA9ICZmaWxsTGF5ZXI7
IGxheWVyOyBsYXllciA9IGxheWVyLT5uZXh0KCkpCisgICAgICAgIGxheWVycy5hcHBlbmQobGF5
ZXIpOworICAgIGxheWVycy5yZXZlcnNlKCk7CisgICAgZm9yIChhdXRvKiBsYXllciA6IGxheWVy
cykKKyAgICAgICAgcGFpbnRGaWxsTGF5ZXIoY29sb3IsICpsYXllciwgcmVjdCwgb3ApOworfQor
Cit2b2lkIElubGluZUJveFBhaW50ZXI6OnBhaW50RmlsbExheWVyKGNvbnN0IENvbG9yJiBjb2xv
ciwgY29uc3QgRmlsbExheWVyJiBmaWxsTGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGF1dG8qIGltYWdlID0gZmlsbExheWVyLmltYWdl
KCk7CisgICAgYm9vbCBoYXNGaWxsSW1hZ2UgPSBpbWFnZSAmJiBpbWFnZS0+Y2FuUmVuZGVyKCZy
ZW5kZXJlcigpLCByZW5kZXJlcigpLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBib29s
IGhhc0ZpbGxJbWFnZU9yQm9yZGVyUmFkaW91cyA9IGhhc0ZpbGxJbWFnZSB8fCByZW5kZXJlcigp
LnN0eWxlKCkuaGFzQm9yZGVyUmFkaXVzKCk7CisgICAgYm9vbCBoYXNTaW5nbGVMaW5lID0gIW1f
aW5saW5lQm94LnByZXZMaW5lQm94KCkgJiYgIW1faW5saW5lQm94Lm5leHRMaW5lQm94KCk7CisK
KyAgICBpZiAoIWhhc0ZpbGxJbWFnZU9yQm9yZGVyUmFkaW91cyB8fCBoYXNTaW5nbGVMaW5lIHx8
IG1faXNSb290SW5saW5lQm94KSB7CisgICAgICAgIHJlbmRlcmVyKCkucGFpbnRGaWxsTGF5ZXJF
eHRlbmRlZChtX3BhaW50SW5mbywgY29sb3IsIGZpbGxMYXllciwgcmVjdCwgQmFja2dyb3VuZEJs
ZWVkTm9uZSwgJm1faW5saW5lQm94LCByZWN0LnNpemUoKSwgb3ApOworICAgICAgICByZXR1cm47
CisgICAgfQorCisjaWYgRU5BQkxFKENTU19CT1hfREVDT1JBVElPTl9CUkVBSykKKyAgICBpZiAo
cmVuZGVyZXIoKS5zdHlsZSgpLmJveERlY29yYXRpb25CcmVhaygpID09IEJveERlY29yYXRpb25C
cmVhazo6Q2xvbmUpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKG1fcGFpbnRJbmZvLmNvbnRleHQoKSk7CisgICAgICAgIG1fcGFpbnRJbmZvLmNvbnRleHQo
KS5jbGlwKHsgcmVjdC54KCksIHJlY3QueSgpLCBMYXlvdXRVbml0KG1faW5saW5lQm94LndpZHRo
KCkpLCBMYXlvdXRVbml0KG1faW5saW5lQm94LmhlaWdodCgpKSB9KTsKKyAgICAgICAgcmVuZGVy
ZXIoKS5wYWludEZpbGxMYXllckV4dGVuZGVkKG1fcGFpbnRJbmZvLCBjb2xvciwgZmlsbExheWVy
LCByZWN0LCBCYWNrZ3JvdW5kQmxlZWROb25lLCAmbV9pbmxpbmVCb3gsIHJlY3Quc2l6ZSgpLCBv
cCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIFdlIGhhdmUgYSBm
aWxsIGltYWdlIHRoYXQgc3BhbnMgbXVsdGlwbGUgbGluZXMuCisgICAgLy8gV2UgbmVlZCB0byBh
ZGp1c3QgdHggYW5kIHR5IGJ5IHRoZSB3aWR0aCBvZiBhbGwgcHJldmlvdXMgbGluZXMuCisgICAg
Ly8gVGhpbmsgb2YgYmFja2dyb3VuZCBwYWludGluZyBvbiBpbmxpbmVzIGFzIHRob3VnaCB5b3Ug
aGFkIG9uZSBsb25nIGxpbmUsIGEgc2luZ2xlIGNvbnRpbnVvdXMKKyAgICAvLyBzdHJpcC4gRXZl
biB0aG91Z2ggdGhhdCBzdHJpcCBoYXMgYmVlbiBicm9rZW4gdXAgYWNyb3NzIG11bHRpcGxlIGxp
bmVzLCB5b3Ugc3RpbGwgcGFpbnQgaXQKKyAgICAvLyBhcyB0aG91Z2ggeW91IGhhZCBvbmUgc2lu
Z2xlIGxpbmUuIFRoaXMgbWVhbnMgZWFjaCBsaW5lIGhhcyB0byBwaWNrIHVwIHRoZSBiYWNrZ3Jv
dW5kIHdoZXJlCisgICAgLy8gdGhlIHByZXZpb3VzIGxpbmUgbGVmdCBvZmYuCisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsT2Zmc2V0T25MaW5lOworICAgIExheW91dFVuaXQgdG90YWxMb2dpY2FsV2lk
dGg7CisgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0
aW9uOjpMVFIpIHsKKyAgICAgICAgZm9yIChhdXRvKiBjdXJyID0gbV9pbmxpbmVCb3gucHJldkxp
bmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZMaW5lQm94KCkpCisgICAgICAgICAgICBs
b2dpY2FsT2Zmc2V0T25MaW5lICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOworICAgICAgICB0b3Rh
bExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxPZmZzZXRPbkxpbmU7CisgICAgICAgIGZvciAoYXV0byog
Y3VyciA9ICZtX2lubGluZUJveDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCisg
ICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBmb3IgKGF1dG8qIGN1cnIgPSBtX2lubGluZUJveC5uZXh0TGlu
ZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKKyAgICAgICAgICAgIGxv
Z2ljYWxPZmZzZXRPbkxpbmUgKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7CisgICAgICAgIHRvdGFs
TG9naWNhbFdpZHRoID0gbG9naWNhbE9mZnNldE9uTGluZTsKKyAgICAgICAgZm9yIChhdXRvKiBj
dXJyID0gJm1faW5saW5lQm94OyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkKKyAg
ICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOworICAg
IH0KKyAgICBMYXlvdXRVbml0IHN0cmlwWCA9IHJlY3QueCgpIC0gKGlzSG9yaXpvbnRhbCgpID8g
bG9naWNhbE9mZnNldE9uTGluZSA6IDBfbHUpOworICAgIExheW91dFVuaXQgc3RyaXBZID0gcmVj
dC55KCkgLSAoaXNIb3Jpem9udGFsKCkgPyAwX2x1IDogbG9naWNhbE9mZnNldE9uTGluZSk7Cisg
ICAgTGF5b3V0VW5pdCBzdHJpcFdpZHRoID0gaXNIb3Jpem9udGFsKCkgPyB0b3RhbExvZ2ljYWxX
aWR0aCA6IExheW91dFVuaXQobV9pbmxpbmVCb3gud2lkdGgoKSk7CisgICAgTGF5b3V0VW5pdCBz
dHJpcEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gTGF5b3V0VW5pdChtX2lubGluZUJveC5oZWln
aHQoKSkgOiB0b3RhbExvZ2ljYWxXaWR0aDsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcihtX3BhaW50SW5mby5jb250ZXh0KCkpOworICAgIG1fcGFpbnRJbmZvLmNv
bnRleHQoKS5jbGlwKHsgcmVjdC54KCksIHJlY3QueSgpLCBMYXlvdXRVbml0KG1faW5saW5lQm94
LndpZHRoKCkpLCBMYXlvdXRVbml0KG1faW5saW5lQm94LmhlaWdodCgpKSB9KTsKKyAgICByZW5k
ZXJlcigpLnBhaW50RmlsbExheWVyRXh0ZW5kZWQobV9wYWludEluZm8sIGNvbG9yLCBmaWxsTGF5
ZXIsIExheW91dFJlY3Qoc3RyaXBYLCBzdHJpcFksIHN0cmlwV2lkdGgsIHN0cmlwSGVpZ2h0KSwg
QmFja2dyb3VuZEJsZWVkTm9uZSwgJm1faW5saW5lQm94LCByZWN0LnNpemUoKSwgb3ApOworfQor
Cit2b2lkIElubGluZUJveFBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFNoYWRvd1N0eWxlIHNoYWRv
d1N0eWxlLCBjb25zdCBMYXlvdXRSZWN0JiBwYWludFJlY3QpCit7CisgICAgYm9vbCBoYXNTaW5n
bGVMaW5lID0gIW1faW5saW5lQm94LnByZXZMaW5lQm94KCkgJiYgIW1faW5saW5lQm94Lm5leHRM
aW5lQm94KCk7CisgICAgaWYgKGhhc1NpbmdsZUxpbmUgfHwgbV9pc1Jvb3RJbmxpbmVCb3gpIHsK
KyAgICAgICAgcmVuZGVyZXIoKS5wYWludEJveFNoYWRvdyhtX3BhaW50SW5mbywgcGFpbnRSZWN0
LCBzdHlsZSgpLCBzaGFkb3dTdHlsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBGSVhNRTogV2UgY2FuIGRvIGJldHRlciBoZXJlIGluIHRoZSBtdWx0aS1saW5lIGNhc2UuIFdl
IHdhbnQgdG8gcHVzaCBhIGNsaXAgc28gdGhhdCB0aGUgc2hhZG93IGRvZXNuJ3QKKyAgICAvLyBw
cm90cnVkZSBpbmNvcnJlY3RseSBhdCB0aGUgZWRnZXMsIGFuZCB3ZSB3YW50IHRvIHBvc3NpYmx5
IGluY2x1ZGUgc2hhZG93cyBjYXN0IGZyb20gdGhlIHByZXZpb3VzL2ZvbGxvd2luZyBsaW5lcwor
ICAgIHJlbmRlcmVyKCkucGFpbnRCb3hTaGFkb3cobV9wYWludEluZm8sIHBhaW50UmVjdCwgc3R5
bGUoKSwgc2hhZG93U3R5bGUsIG1faW5saW5lQm94LmluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UoKSwg
bV9pbmxpbmVCb3guaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UoKSk7Cit9CisKK3ZvaWQgSW5saW5l
Qm94UGFpbnRlcjo6Y29uc3RyYWluVG9MaW5lVG9wQW5kQm90dG9tSWZOZWVkZWQoTGF5b3V0UmVj
dCYgcmVjdCkgY29uc3QKK3sKKyAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLmluTm9RdWly
a3NNb2RlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9pbmxpbmVCb3guaGFzVGV4dENo
aWxkcmVuKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9pbmxpbmVCb3guZGVzY2VuZGFu
dHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpICYmIG1faW5saW5lQm94Lmhhc1RleHRE
ZXNjZW5kYW50cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxU
b3AgPSBpc0hvcml6b250YWwoKSA/IHJlY3QueSgpIDogcmVjdC54KCk7CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyByZWN0LmhlaWdodCgpIDogcmVjdC53
aWR0aCgpOworCisgICAgTGF5b3V0VW5pdCBib3R0b20gPSBzdGQ6Om1pbihtX2lubGluZUJveC5y
b290KCkubGluZUJvdHRvbSgpLCBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCk7CisgICAgbG9n
aWNhbFRvcCA9IHN0ZDo6bWF4KG1faW5saW5lQm94LnJvb3QoKS5saW5lVG9wKCksIGxvZ2ljYWxU
b3ApOworICAgIGxvZ2ljYWxIZWlnaHQgPSBib3R0b20gLSBsb2dpY2FsVG9wOworICAgIGlmIChp
c0hvcml6b250YWwoKSkgeworICAgICAgICByZWN0LnNldFkobG9naWNhbFRvcCk7CisgICAgICAg
IHJlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJl
Y3Quc2V0WChsb2dpY2FsVG9wKTsKKyAgICAgICAgcmVjdC5zZXRXaWR0aChsb2dpY2FsSGVpZ2h0
KTsKKyAgICB9Cit9CisKK2NvbnN0IFJlbmRlclN0eWxlJiBJbmxpbmVCb3hQYWludGVyOjpzdHls
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faXNGaXJzdExpbmUgPyByZW5kZXJlcigpLmZpcnN0
TGluZVN0eWxlKCkgOiByZW5kZXJlcigpLnN0eWxlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lQm94UGFpbnRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyY2YyYTUyMzYwYmQ1
ZjBhNTU0NzNkOTg2N2Q2ZDY4ODgwOTczOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFpbnRlci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIlNo
YWRvd0RhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNz
IEZpbGxMYXllcjsKK2NsYXNzIExlZ2FjeUlubGluZUZsb3dCb3g7CitjbGFzcyBSZW5kZXJCb3hN
b2RlbE9iamVjdDsKK2NsYXNzIFJlbmRlclN0eWxlOworc3RydWN0IFBhaW50SW5mbzsKKworY2xh
c3MgSW5saW5lQm94UGFpbnRlciB7CitwdWJsaWM6CisgICAgSW5saW5lQm94UGFpbnRlcihjb25z
dCBMZWdhY3lJbmxpbmVGbG93Qm94JiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0KTsKKyAgICB+SW5saW5lQm94UGFpbnRlcigpOworCisgICAgdm9pZCBwYWludCgp
OworCitwcml2YXRlOgorICAgIHZvaWQgcGFpbnRNYXNrKCk7CisgICAgdm9pZCBwYWludERlY29y
YXRpb25zKCk7CisgICAgdm9pZCBwYWludEZpbGxMYXllcnMoY29uc3QgQ29sb3ImLCBjb25zdCBG
aWxsTGF5ZXImLCBjb25zdCBMYXlvdXRSZWN0JiBwYWludFJlY3QsIENvbXBvc2l0ZU9wZXJhdG9y
KTsKKyAgICB2b2lkIHBhaW50RmlsbExheWVyKGNvbnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVy
JiwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnRSZWN0LCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAg
dm9pZCBwYWludEJveFNoYWRvdyhTaGFkb3dTdHlsZSwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnRS
ZWN0KTsKKworICAgIHZvaWQgY29uc3RyYWluVG9MaW5lVG9wQW5kQm90dG9tSWZOZWVkZWQoTGF5
b3V0UmVjdCYpIGNvbnN0OworCisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3Q7
CisgICAgLy8gRklYTUU6IE1ha2UgUmVuZGVyQm94TW9kZWxPYmplY3QgZnVuY3Rpb25zIGNvbnN0
LgorICAgIFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3QmPihtX3JlbmRlcmVyKTsgfQorICAgIGJvb2wg
aXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWw7IH0KKworICAgIGNv
bnN0IExlZ2FjeUlubGluZUZsb3dCb3gmIG1faW5saW5lQm94OworICAgIFBhaW50SW5mbyYgbV9w
YWludEluZm87CisgICAgY29uc3QgTGF5b3V0UG9pbnQgbV9wYWludE9mZnNldDsKKyAgICBjb25z
dCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgbV9yZW5kZXJlcjsKKyAgICBjb25zdCBib29sIG1faXNG
aXJzdExpbmU7CisgICAgY29uc3QgYm9vbCBtX2lzUm9vdElubGluZUJveDsKKyAgICBjb25zdCBi
b29sIG1faXNIb3Jpem9udGFsOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwCmluZGV4IGViZjI2MDdiN2FmOWIzZTQ2NzE1YjZl
ZmJhMGJlZDExMjkyNzg3OTMuLjk1MTRmZDA3MTNhYmUyMmM4YzliODIzN2M1ZGZjYzc0MWM0NDE3
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93
Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0Jv
eC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNs
dWRlICJJbmxpbmVCb3hQYWludGVyLmgiCiAjaW5jbHVkZSAiTGVnYWN5RWxsaXBzaXNCb3guaCIK
ICNpbmNsdWRlICJMZWdhY3lJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTGVnYWN5Um9vdElu
bGluZUJveC5oIgpAQCAtMTExMiw0NSArMTExMyw4IEBAIHZvaWQgTGVnYWN5SW5saW5lRmxvd0Jv
eDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZTo6Q2hpbGRPdXRsaW5lcykgewotICAgICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2U6Ok91dGxpbmUgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OlNlbGZPdXRs
aW5lKSB7Ci0gICAgICAgICAgICAvLyBBZGQgb3Vyc2VsdmVzIHRvIHRoZSBwYWludCBpbmZvIHN0
cnVjdCdzIGxpc3Qgb2YgaW5saW5lcyB0aGF0IG5lZWQgdG8gcGFpbnQgdGhlaXIKLSAgICAgICAg
ICAgIC8vIG91dGxpbmVzLgotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS52aXNp
YmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiByZW5kZXJlcigpLmhhc091dGxpbmUo
KSAmJiAhaXNSb290SW5saW5lQm94KCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJJbmxpbmUm
IGlubGluZUZsb3cgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyKCkpOwotCi0gICAg
ICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICAgICAgYm9vbCBjb250YWluaW5nQmxvY2tQYWludHNDb250aW51YXRpb25PdXRsaW5l
ID0gaW5saW5lRmxvdy5jb250aW51YXRpb24oKSB8fCBpbmxpbmVGbG93LmlzQ29udGludWF0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9ja1BhaW50c0NvbnRpbnVhdGlv
bk91dGxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ2OTAuIFdlIGN1cnJlbnRseSBkb24ndCBy
ZWNvbm5lY3QgaW5saW5lIGNvbnRpbnVhdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgLy8gYWZ0
ZXIgYSBjaGlsZCByZW1vdmFsLiBBcyBhIHJlc3VsdCwgdGhvc2UgbWVyZ2VkIGlubGluZXMgZG8g
bm90IGdldCBzZXBlcmF0ZWQgYW5kIGhlbmNlIG5vdCBnZXQgZW5jbG9zZWQgYnkKLSAgICAgICAg
ICAgICAgICAgICAgLy8gYW5vbnltb3VzIGJsb2Nrcy4gSW4gdGhpcyBjYXNlLCBpdCBpcyBiZXR0
ZXIgdG8gYmFpbCBvdXQgYW5kIHBhaW50IGl0IG91cnNlbGYuCi0gICAgICAgICAgICAgICAgICAg
IFJlbmRlckJsb2NrKiBlbmNsb3NpbmdBbm9ueW1vdXNCbG9jayA9IHJlbmRlcmVyKCkuY29udGFp
bmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZW5jbG9zaW5nQW5vbnltb3Vz
QmxvY2stPmlzQW5vbnltb3VzQmxvY2soKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRh
aW5pbmdCbG9ja1BhaW50c0NvbnRpbnVhdGlvbk91dGxpbmUgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sg
PSBlbmNsb3NpbmdBbm9ueW1vdXNCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8qIGJveCA9ICZyZW5kZXJlcigpOyBib3ggIT0gY29udGFp
bmluZ0Jsb2NrOyBib3ggPSAmYm94LT5wYXJlbnQoKS0+ZW5jbG9zaW5nQm94TW9kZWxPYmplY3Qo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib3gtPmhhc1NlbGZQYWludGlu
Z0xheWVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ0Js
b2NrUGFpbnRzQ29udGludWF0aW9uT3V0bGluZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrUGFpbnRzQ29udGlu
dWF0aW9uT3V0bGluZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBBZGQgb3Vyc2VsdmVzIHRv
IHRoZSBjb250YWluaW5nIGJsb2NrIG9mIHRoZSBlbnRpcmUgY29udGludWF0aW9uIHNvIHRoYXQg
aXQgY2FuCi0gICAgICAgICAgICAgICAgICAgIC8vIHBhaW50IHVzIGF0b21pY2FsbHkuCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jay0+YWRkQ29udGludWF0aW9uV2l0aE91dGxp
bmUoZG93bmNhc3Q8UmVuZGVySW5saW5lPihyZW5kZXJlcigpLmVsZW1lbnQoKS0+cmVuZGVyZXIo
KSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlubGluZUZsb3cuaXNDb250aW51YXRp
b24oKSkKLSAgICAgICAgICAgICAgICAgICAgcGFpbnRJbmZvLm91dGxpbmVPYmplY3RzLT5hZGQo
JmlubGluZUZsb3cpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlOjpNYXNrKQotICAgICAgICAgICAgcGFpbnRNYXNrKHBhaW50
SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFBhaW50
IG91ciBiYWNrZ3JvdW5kLCBib3JkZXIgYW5kIGJveC1zaGFkb3cuCi0gICAgICAgICAgICBwYWlu
dEJveERlY29yYXRpb25zKHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICB9CisgICAg
ICAgIElubGluZUJveFBhaW50ZXIgcGFpbnRlcigqdGhpcywgcGFpbnRJbmZvLCBwYWludE9mZnNl
dCk7CisgICAgICAgIHBhaW50ZXIucGFpbnQoKTsKICAgICB9CiAKICAgICBpZiAocGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2U6Ok1hc2spCkBAIC0xMTcwLDE2ICsxMTM0LDYgQEAgdm9pZCBM
ZWdhY3lJbmxpbmVGbG93Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2YKICAgICB9CiB9CiAKLXZvaWQgTGVnYWN5SW5saW5lRmxvd0JveDo6
cGFpbnRGaWxsTGF5ZXJzKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBDb2xvciYg
Y29sb3IsIGNvbnN0IEZpbGxMYXllciYgZmlsbExheWVyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0
LCBDb21wb3NpdGVPcGVyYXRvciBvcCkKLXsKLSAgICBWZWN0b3I8Y29uc3QgRmlsbExheWVyKiwg
OD4gbGF5ZXJzOwotICAgIGZvciAoYXV0byogbGF5ZXIgPSAmZmlsbExheWVyOyBsYXllcjsgbGF5
ZXIgPSBsYXllci0+bmV4dCgpKQotICAgICAgICBsYXllcnMuYXBwZW5kKGxheWVyKTsKLSAgICBs
YXllcnMucmV2ZXJzZSgpOwotICAgIGZvciAoYXV0byogbGF5ZXIgOiBsYXllcnMpCi0gICAgICAg
IHBhaW50RmlsbExheWVyKHBhaW50SW5mbywgY29sb3IsICpsYXllciwgcmVjdCwgb3ApOwotfQot
CiBib29sIExlZ2FjeUlubGluZUZsb3dCb3g6OmJveFNoYWRvd0NhbkJlQXBwbGllZFRvQmFja2dy
b3VuZChjb25zdCBGaWxsTGF5ZXImIGxhc3RCYWNrZ3JvdW5kTGF5ZXIpIGNvbnN0CiB7CiAgICAg
Ly8gVGhlIGNoZWNrcyBoZXJlIG1hdGNoIGhvdyBwYWludEZpbGxMYXllcigpIGRlY2lkZXMgd2hl
dGhlciB0byBjbGlwIChpZiBpdCBkb2VzLCB0aGUgc2hhZG93CkBAIC0xMTg5LDI1NyArMTE0Myw2
IEBAIGJvb2wgTGVnYWN5SW5saW5lRmxvd0JveDo6Ym94U2hhZG93Q2FuQmVBcHBsaWVkVG9CYWNr
Z3JvdW5kKGNvbnN0IEZpbGxMYXllciYgbGFzCiAgICAgcmV0dXJuICghaGFzRmlsbEltYWdlICYm
ICFyZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFkaXVzKCkpIHx8ICghcHJldkxpbmVCb3go
KSAmJiAhbmV4dExpbmVCb3goKSkgfHwgIXBhcmVudCgpOwogfQogCi12b2lkIExlZ2FjeUlubGlu
ZUZsb3dCb3g6OnBhaW50RmlsbExheWVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBDb2xvciYgY29sb3IsIGNvbnN0IEZpbGxMYXllciYgZmlsbExheWVyLCBjb25zdCBMYXlvdXRS
ZWN0JiByZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCkKLXsKLSAgICBhdXRvKiBpbWFnZSA9IGZp
bGxMYXllci5pbWFnZSgpOwotICAgIGJvb2wgaGFzRmlsbEltYWdlID0gaW1hZ2UgJiYgaW1hZ2Ut
PmNhblJlbmRlcigmcmVuZGVyZXIoKSwgcmVuZGVyZXIoKS5zdHlsZSgpLmVmZmVjdGl2ZVpvb20o
KSk7Ci0gICAgaWYgKCghaGFzRmlsbEltYWdlICYmICFyZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9y
ZGVyUmFkaXVzKCkpIHx8ICghcHJldkxpbmVCb3goKSAmJiAhbmV4dExpbmVCb3goKSkgfHwgIXBh
cmVudCgpKQotICAgICAgICByZW5kZXJlcigpLnBhaW50RmlsbExheWVyRXh0ZW5kZWQocGFpbnRJ
bmZvLCBjb2xvciwgZmlsbExheWVyLCByZWN0LCBCYWNrZ3JvdW5kQmxlZWROb25lLCB0aGlzLCBy
ZWN0LnNpemUoKSwgb3ApOwotI2lmIEVOQUJMRShDU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspCi0g
ICAgZWxzZSBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmJveERlY29yYXRpb25CcmVhaygpID09IEJv
eERlY29yYXRpb25CcmVhazo6Q2xvbmUpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKHBhaW50SW5mby5jb250ZXh0KCkpOwotICAgICAgICBwYWludEluZm8u
Y29udGV4dCgpLmNsaXAoeyByZWN0LngoKSwgcmVjdC55KCksIExheW91dFVuaXQod2lkdGgoKSks
IExheW91dFVuaXQoaGVpZ2h0KCkpIH0pOwotICAgICAgICByZW5kZXJlcigpLnBhaW50RmlsbExh
eWVyRXh0ZW5kZWQocGFpbnRJbmZvLCBjb2xvciwgZmlsbExheWVyLCByZWN0LCBCYWNrZ3JvdW5k
QmxlZWROb25lLCB0aGlzLCByZWN0LnNpemUoKSwgb3ApOwotICAgIH0KLSNlbmRpZgotICAgIGVs
c2UgewotICAgICAgICAvLyBXZSBoYXZlIGEgZmlsbCBpbWFnZSB0aGF0IHNwYW5zIG11bHRpcGxl
IGxpbmVzLgotICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0eCBhbmQgdHkgYnkgdGhlIHdp
ZHRoIG9mIGFsbCBwcmV2aW91cyBsaW5lcy4KLSAgICAgICAgLy8gVGhpbmsgb2YgYmFja2dyb3Vu
ZCBwYWludGluZyBvbiBpbmxpbmVzIGFzIHRob3VnaCB5b3UgaGFkIG9uZSBsb25nIGxpbmUsIGEg
c2luZ2xlIGNvbnRpbnVvdXMKLSAgICAgICAgLy8gc3RyaXAuIEV2ZW4gdGhvdWdoIHRoYXQgc3Ry
aXAgaGFzIGJlZW4gYnJva2VuIHVwIGFjcm9zcyBtdWx0aXBsZSBsaW5lcywgeW91IHN0aWxsIHBh
aW50IGl0Ci0gICAgICAgIC8vIGFzIHRob3VnaCB5b3UgaGFkIG9uZSBzaW5nbGUgbGluZS4gVGhp
cyBtZWFucyBlYWNoIGxpbmUgaGFzIHRvIHBpY2sgdXAgdGhlIGJhY2tncm91bmQgd2hlcmUKLSAg
ICAgICAgLy8gdGhlIHByZXZpb3VzIGxpbmUgbGVmdCBvZmYuCi0gICAgICAgIExheW91dFVuaXQg
bG9naWNhbE9mZnNldE9uTGluZTsKLSAgICAgICAgTGF5b3V0VW5pdCB0b3RhbExvZ2ljYWxXaWR0
aDsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGly
ZWN0aW9uOjpMVFIpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byogY3VyciA9IHByZXZMaW5lQm94
KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2TGluZUJveCgpKQotICAgICAgICAgICAgICAgIGxv
Z2ljYWxPZmZzZXRPbkxpbmUgKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICB0
b3RhbExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxPZmZzZXRPbkxpbmU7Ci0gICAgICAgICAgICBmb3Ig
KGF1dG8qIGN1cnIgPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKLSAg
ICAgICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoYXV0byogY3VyciA9IG5leHRMaW5l
Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKQotICAgICAgICAgICAgICAg
IGxvZ2ljYWxPZmZzZXRPbkxpbmUgKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAg
ICB0b3RhbExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxPZmZzZXRPbkxpbmU7Ci0gICAgICAgICAgICBm
b3IgKGF1dG8qIGN1cnIgPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkK
LSAgICAgICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBjdXJyLT5sb2dpY2FsV2lkdGgo
KTsKLSAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IHN0cmlwWCA9IHJlY3QueCgpIC0gKGlz
SG9yaXpvbnRhbCgpID8gbG9naWNhbE9mZnNldE9uTGluZSA6IDBfbHUpOwotICAgICAgICBMYXlv
dXRVbml0IHN0cmlwWSA9IHJlY3QueSgpIC0gKGlzSG9yaXpvbnRhbCgpID8gMF9sdSA6IGxvZ2lj
YWxPZmZzZXRPbkxpbmUpOwotICAgICAgICBMYXlvdXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6
b250YWwoKSA/IHRvdGFsTG9naWNhbFdpZHRoIDogTGF5b3V0VW5pdCh3aWR0aCgpKTsKLSAgICAg
ICAgTGF5b3V0VW5pdCBzdHJpcEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gTGF5b3V0VW5pdCho
ZWlnaHQoKSkgOiB0b3RhbExvZ2ljYWxXaWR0aDsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRJbmZvLmNvbnRleHQoKSk7Ci0gICAgICAgIHBhaW50
SW5mby5jb250ZXh0KCkuY2xpcCh7IHJlY3QueCgpLCByZWN0LnkoKSwgTGF5b3V0VW5pdCh3aWR0
aCgpKSwgTGF5b3V0VW5pdChoZWlnaHQoKSkgfSk7Ci0gICAgICAgIHJlbmRlcmVyKCkucGFpbnRG
aWxsTGF5ZXJFeHRlbmRlZChwYWludEluZm8sIGNvbG9yLCBmaWxsTGF5ZXIsIExheW91dFJlY3Qo
c3RyaXBYLCBzdHJpcFksIHN0cmlwV2lkdGgsIHN0cmlwSGVpZ2h0KSwgQmFja2dyb3VuZEJsZWVk
Tm9uZSwgdGhpcywgcmVjdC5zaXplKCksIG9wKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGVnYWN5SW5s
aW5lRmxvd0JveDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlLCBjb25zdCBMYXlvdXRS
ZWN0JiBwYWludFJlY3QpCi17Ci0gICAgaWYgKCghcHJldkxpbmVCb3goKSAmJiAhbmV4dExpbmVC
b3goKSkgfHwgIXBhcmVudCgpKQotICAgICAgICByZW5kZXJlcigpLnBhaW50Qm94U2hhZG93KGlu
Zm8sIHBhaW50UmVjdCwgc3R5bGUsIHNoYWRvd1N0eWxlKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
Ly8gRklYTUU6IFdlIGNhbiBkbyBiZXR0ZXIgaGVyZSBpbiB0aGUgbXVsdGktbGluZSBjYXNlLiBX
ZSB3YW50IHRvIHB1c2ggYSBjbGlwIHNvIHRoYXQgdGhlIHNoYWRvdyBkb2Vzbid0Ci0gICAgICAg
IC8vIHByb3RydWRlIGluY29ycmVjdGx5IGF0IHRoZSBlZGdlcywgYW5kIHdlIHdhbnQgdG8gcG9z
c2libHkgaW5jbHVkZSBzaGFkb3dzIGNhc3QgZnJvbSB0aGUgcHJldmlvdXMvZm9sbG93aW5nIGxp
bmVzCi0gICAgICAgIHJlbmRlcmVyKCkucGFpbnRCb3hTaGFkb3coaW5mbywgcGFpbnRSZWN0LCBz
dHlsZSwgc2hhZG93U3R5bGUsIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UoKSwgaW5jbHVkZUxvZ2lj
YWxSaWdodEVkZ2UoKSk7Ci0gICAgfQotfQotCi12b2lkIExlZ2FjeUlubGluZUZsb3dCb3g6OmNv
bnN0cmFpblRvTGluZVRvcEFuZEJvdHRvbUlmTmVlZGVkKExheW91dFJlY3QmIHJlY3QpIGNvbnN0
Ci17Ci0gICAgYm9vbCBub1F1aXJrc01vZGUgPSByZW5kZXJlcigpLmRvY3VtZW50KCkuaW5Ob1F1
aXJrc01vZGUoKTsKLSAgICBpZiAoIW5vUXVpcmtzTW9kZSAmJiAhaGFzVGV4dENoaWxkcmVuKCkg
JiYgIShkZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkgJiYgaGFzVGV4
dERlc2NlbmRhbnRzKCkpKSB7Ci0gICAgICAgIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gmIHJv
b3RCb3ggPSByb290KCk7Ci0gICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9IGlzSG9yaXpv
bnRhbCgpID8gcmVjdC55KCkgOiByZWN0LngoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyByZWN0LmhlaWdodCgpIDogcmVjdC53aWR0aCgpOwot
ICAgICAgICBMYXlvdXRVbml0IGJvdHRvbSA9IHN0ZDo6bWluKHJvb3RCb3gubGluZUJvdHRvbSgp
LCBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCk7Ci0gICAgICAgIGxvZ2ljYWxUb3AgPSBzdGQ6
Om1heChyb290Qm94LmxpbmVUb3AoKSwgbG9naWNhbFRvcCk7Ci0gICAgICAgIGxvZ2ljYWxIZWln
aHQgPSBib3R0b20gLSBsb2dpY2FsVG9wOwotICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkpIHsK
LSAgICAgICAgICAgIHJlY3Quc2V0WShsb2dpY2FsVG9wKTsKLSAgICAgICAgICAgIHJlY3Quc2V0
SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVj
dC5zZXRYKGxvZ2ljYWxUb3ApOwotICAgICAgICAgICAgcmVjdC5zZXRXaWR0aChsb2dpY2FsSGVp
Z2h0KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIExheW91dFJlY3QgY2xpcFJlY3RG
b3JOaW5lUGllY2VJbWFnZVN0cmlwKExlZ2FjeUlubGluZUZsb3dCb3gqIGJveCwgY29uc3QgTmlu
ZVBpZWNlSW1hZ2UmIGltYWdlLCBjb25zdCBMYXlvdXRSZWN0JiBwYWludFJlY3QpCi17Ci0gICAg
TGF5b3V0UmVjdCBjbGlwUmVjdChwYWludFJlY3QpOwotICAgIGF1dG8mIHN0eWxlID0gYm94LT5y
ZW5kZXJlcigpLnN0eWxlKCk7Ci0gICAgTGF5b3V0Qm94RXh0ZW50IG91dHNldHMgPSBzdHlsZS5p
bWFnZU91dHNldHMoaW1hZ2UpOwotICAgIGlmIChib3gtPmlzSG9yaXpvbnRhbCgpKSB7Ci0gICAg
ICAgIGNsaXBSZWN0LnNldFkocGFpbnRSZWN0LnkoKSAtIG91dHNldHMudG9wKCkpOwotICAgICAg
ICBjbGlwUmVjdC5zZXRIZWlnaHQocGFpbnRSZWN0LmhlaWdodCgpICsgb3V0c2V0cy50b3AoKSAr
IG91dHNldHMuYm90dG9tKCkpOwotICAgICAgICBpZiAoYm94LT5pbmNsdWRlTG9naWNhbExlZnRF
ZGdlKCkpIHsKLSAgICAgICAgICAgIGNsaXBSZWN0LnNldFgocGFpbnRSZWN0LngoKSAtIG91dHNl
dHMubGVmdCgpKTsKLSAgICAgICAgICAgIGNsaXBSZWN0LnNldFdpZHRoKHBhaW50UmVjdC53aWR0
aCgpICsgb3V0c2V0cy5sZWZ0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChib3gtPmluY2x1
ZGVMb2dpY2FsUmlnaHRFZGdlKCkpCi0gICAgICAgICAgICBjbGlwUmVjdC5zZXRXaWR0aChjbGlw
UmVjdC53aWR0aCgpICsgb3V0c2V0cy5yaWdodCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBj
bGlwUmVjdC5zZXRYKHBhaW50UmVjdC54KCkgLSBvdXRzZXRzLmxlZnQoKSk7Ci0gICAgICAgIGNs
aXBSZWN0LnNldFdpZHRoKHBhaW50UmVjdC53aWR0aCgpICsgb3V0c2V0cy5sZWZ0KCkgKyBvdXRz
ZXRzLnJpZ2h0KCkpOwotICAgICAgICBpZiAoYm94LT5pbmNsdWRlTG9naWNhbExlZnRFZGdlKCkp
IHsKLSAgICAgICAgICAgIGNsaXBSZWN0LnNldFkocGFpbnRSZWN0LnkoKSAtIG91dHNldHMudG9w
KCkpOwotICAgICAgICAgICAgY2xpcFJlY3Quc2V0SGVpZ2h0KHBhaW50UmVjdC5oZWlnaHQoKSAr
IG91dHNldHMudG9wKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChib3gtPmluY2x1ZGVMb2dp
Y2FsUmlnaHRFZGdlKCkpCi0gICAgICAgICAgICBjbGlwUmVjdC5zZXRIZWlnaHQoY2xpcFJlY3Qu
aGVpZ2h0KCkgKyBvdXRzZXRzLmJvdHRvbSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNsaXBSZWN0
OwotfQotCi12b2lkIExlZ2FjeUlubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKLXsKLSAg
ICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QocmVuZGVyZXIoKSkgfHwgcmVu
ZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlIHx8IHBh
aW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBZb3UgY2FuIHVzZSBwOjpmaXJzdC1saW5lIHRvIHNwZWNpZnkgYSBiYWNrZ3Jv
dW5kLiBJZiBzbywgdGhlIHJvb3QgbGluZSBib3hlcyBmb3IKLSAgICAvLyBhIGxpbmUgbWF5IGFj
dHVhbGx5IGhhdmUgdG8gcGFpbnQgYSBiYWNrZ3JvdW5kLgotICAgIGlmIChwYXJlbnQoKSAmJiAh
cmVuZGVyZXIoKS5oYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAg
ICBpZiAoIXBhcmVudCgpICYmICghaXNGaXJzdExpbmUoKSB8fCAmbGluZVN0eWxlID09ICZyZW5k
ZXJlcigpLnN0eWxlKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlvdXRSZWN0IGZyYW1l
UmVjdCh0aGlzLT5mcmFtZVJlY3QoKSk7Ci0gICAgY29uc3RyYWluVG9MaW5lVG9wQW5kQm90dG9t
SWZOZWVkZWQoZnJhbWVSZWN0KTsKLSAgICAKLSAgICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRp
bmF0ZXMuCi0gICAgTGF5b3V0UmVjdCBsb2NhbFJlY3QoZnJhbWVSZWN0KTsKLSAgICBmbGlwRm9y
V3JpdGluZ01vZGUobG9jYWxSZWN0KTsKLQotICAgIExheW91dFBvaW50IGFkanVzdGVkUGFpbnRv
ZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2FsUmVjdC5sb2NhdGlvbigpOwotICAgIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgTGF5b3V0UmVjdCBw
YWludFJlY3QgPSBMYXlvdXRSZWN0KGFkanVzdGVkUGFpbnRvZmZzZXQsIGZyYW1lUmVjdC5zaXpl
KCkpOwotICAgIC8vIFNoYWRvdyBjb21lcyBmaXJzdCBhbmQgaXMgYmVoaW5kIHRoZSBiYWNrZ3Jv
dW5kIGFuZCBib3JkZXIuCi0gICAgaWYgKCFyZW5kZXJlcigpLmJveFNoYWRvd1Nob3VsZEJlQXBw
bGllZFRvQmFja2dyb3VuZChhZGp1c3RlZFBhaW50b2Zmc2V0LCBCYWNrZ3JvdW5kQmxlZWROb25l
LCB0aGlzKSkKLSAgICAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLCBsaW5lU3R5bGUsIFNo
YWRvd1N0eWxlOjpOb3JtYWwsIHBhaW50UmVjdCk7Ci0KLSAgICBhdXRvIGNvbG9yID0gbGluZVN0
eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7Ci0g
ICAgYXV0byBjb21wb3NpdGVPcCA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5jb21wb3NpdGVPcGVy
YXRvckZvckJhY2tncm91bmRDb2xvcihjb2xvciwgcmVuZGVyZXIoKSk7Ci0KLSAgICBjb2xvciA9
IGxpbmVTdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihjb2xvcik7Ci0KLSAgICBwYWlu
dEZpbGxMYXllcnMocGFpbnRJbmZvLCBjb2xvciwgbGluZVN0eWxlLmJhY2tncm91bmRMYXllcnMo
KSwgcGFpbnRSZWN0LCBjb21wb3NpdGVPcCk7Ci0gICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZv
LCBsaW5lU3R5bGUsIFNoYWRvd1N0eWxlOjpJbnNldCwgcGFpbnRSZWN0KTsKLQotICAgIC8vIDpm
aXJzdC1saW5lIGNhbm5vdCBiZSB1c2VkIHRvIHB1dCBib3JkZXJzIG9uIGEgbGluZS4gQWx3YXlz
IHBhaW50IGJvcmRlcnMgd2l0aCBvdXIKLSAgICAvLyBub24tZmlyc3QtbGluZSBzdHlsZS4KLSAg
ICBpZiAoIXBhcmVudCgpIHx8ICFyZW5kZXJlcigpLnN0eWxlKCkuaGFzVmlzaWJsZUJvcmRlckRl
Y29yYXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBi
b3JkZXJJbWFnZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS5ib3JkZXJJbWFnZSgpOwotICAgIFN0eWxl
SW1hZ2UqIGJvcmRlckltYWdlU291cmNlID0gYm9yZGVySW1hZ2UuaW1hZ2UoKTsKLSAgICBib29s
IGhhc0JvcmRlckltYWdlID0gYm9yZGVySW1hZ2VTb3VyY2UgJiYgYm9yZGVySW1hZ2VTb3VyY2Ut
PmNhblJlbmRlcigmcmVuZGVyZXIoKSwgbGluZVN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAg
aWYgKGhhc0JvcmRlckltYWdlICYmICFib3JkZXJJbWFnZVNvdXJjZS0+aXNMb2FkZWQoKSkKLSAg
ICAgICAgcmV0dXJuOyAvLyBEb24ndCBwYWludCBhbnl0aGluZyB3aGlsZSB3ZSB3YWl0IGZvciB0
aGUgaW1hZ2UgdG8gbG9hZC4KLQotICAgIC8vIFRoZSBzaW1wbGUgY2FzZSBpcyB3aGVyZSB3ZSBl
aXRoZXIgaGF2ZSBubyBib3JkZXIgaW1hZ2Ugb3Igd2UgYXJlIHRoZSBvbmx5IGJveCBmb3IgdGhp
cyBvYmplY3QuIEluIHRob3NlCi0gICAgLy8gY2FzZXMgb25seSBhIHNpbmdsZSBjYWxsIHRvIGRy
YXcgaXMgcmVxdWlyZWQuCi0gICAgaWYgKCFoYXNCb3JkZXJJbWFnZSB8fCAoIXByZXZMaW5lQm94
KCkgJiYgIW5leHRMaW5lQm94KCkpKQotICAgICAgICByZW5kZXJlcigpLnBhaW50Qm9yZGVyKHBh
aW50SW5mbywgcGFpbnRSZWN0LCBsaW5lU3R5bGUsIEJhY2tncm91bmRCbGVlZE5vbmUsIGluY2x1
ZGVMb2dpY2FsTGVmdEVkZ2UoKSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UoKSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgYSBib3JkZXIgaW1hZ2UgdGhhdCBzcGFucyBtdWx0aXBs
ZSBsaW5lcy4KLSAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdHggYW5kIHR5IGJ5IHRoZSB3
aWR0aCBvZiBhbGwgcHJldmlvdXMgbGluZXMuCi0gICAgICAgIC8vIFRoaW5rIG9mIGJvcmRlciBp
bWFnZSBwYWludGluZyBvbiBpbmxpbmVzIGFzIHRob3VnaCB5b3UgaGFkIG9uZSBsb25nIGxpbmUs
IGEgc2luZ2xlIGNvbnRpbnVvdXMKLSAgICAgICAgLy8gc3RyaXAuIEV2ZW4gdGhvdWdoIHRoYXQg
c3RyaXAgaGFzIGJlZW4gYnJva2VuIHVwIGFjcm9zcyBtdWx0aXBsZSBsaW5lcywgeW91IHN0aWxs
IHBhaW50IGl0Ci0gICAgICAgIC8vIGFzIHRob3VnaCB5b3UgaGFkIG9uZSBzaW5nbGUgbGluZS4g
VGhpcyBtZWFucyBlYWNoIGxpbmUgaGFzIHRvIHBpY2sgdXAgdGhlIGltYWdlIHdoZXJlCi0gICAg
ICAgIC8vIHRoZSBwcmV2aW91cyBsaW5lIGxlZnQgb2ZmLgotICAgICAgICAvLyBGSVhNRTogV2hh
dCB0aGUgaGVjayBkbyB3ZSBkbyB3aXRoIFJUTCBoZXJlPyBUaGUgbWF0aCB3ZSdyZSB1c2luZyBp
cyBvYnZpb3VzbHkgbm90IHJpZ2h0LAotICAgICAgICAvLyBidXQgaXQgaXNuJ3QgZXZlbiBjbGVh
ciBob3cgdGhpcyBzaG91bGQgd29yayBhdCBhbGwuCi0gICAgICAgIExheW91dFVuaXQgbG9naWNh
bE9mZnNldE9uTGluZTsKLSAgICAgICAgZm9yIChhdXRvKiBjdXJyID0gcHJldkxpbmVCb3goKTsg
Y3VycjsgY3VyciA9IGN1cnItPnByZXZMaW5lQm94KCkpCi0gICAgICAgICAgICBsb2dpY2FsT2Zm
c2V0T25MaW5lICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOwotICAgICAgICBMYXlvdXRVbml0IHRv
dGFsTG9naWNhbFdpZHRoID0gbG9naWNhbE9mZnNldE9uTGluZTsKLSAgICAgICAgZm9yIChhdXRv
KiBjdXJyID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCi0gICAgICAg
ICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAg
TGF5b3V0VW5pdCBzdHJpcFggPSBhZGp1c3RlZFBhaW50b2Zmc2V0LngoKSAtIChpc0hvcml6b250
YWwoKSA/IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiAwX2x1KTsKLSAgICAgICAgTGF5b3V0VW5pdCBz
dHJpcFkgPSBhZGp1c3RlZFBhaW50b2Zmc2V0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IDBfbHUg
OiBsb2dpY2FsT2Zmc2V0T25MaW5lKTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFdpZHRoID0g
aXNIb3Jpem9udGFsKCkgPyB0b3RhbExvZ2ljYWxXaWR0aCA6IGZyYW1lUmVjdC53aWR0aCgpOwot
ICAgICAgICBMYXlvdXRVbml0IHN0cmlwSGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyBmcmFtZVJl
Y3QuaGVpZ2h0KCkgOiB0b3RhbExvZ2ljYWxXaWR0aDsKLQotICAgICAgICBMYXlvdXRSZWN0IGNs
aXBSZWN0ID0gY2xpcFJlY3RGb3JOaW5lUGllY2VJbWFnZVN0cmlwKHRoaXMsIGJvcmRlckltYWdl
LCBwYWludFJlY3QpOwotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoY29udGV4dCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcChjbGlwUmVjdCk7Ci0gICAgICAgIHJl
bmRlcmVyKCkucGFpbnRCb3JkZXIocGFpbnRJbmZvLCBMYXlvdXRSZWN0KHN0cmlwWCwgc3RyaXBZ
LCBzdHJpcFdpZHRoLCBzdHJpcEhlaWdodCksIGxpbmVTdHlsZSk7Ci0gICAgfQotfQotCi12b2lk
IExlZ2FjeUlubGluZUZsb3dCb3g6OnBhaW50TWFzayhQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAgIGlmICghcGFpbnRJbmZvLnNob3Vs
ZFBhaW50V2l0aGluUm9vdChyZW5kZXJlcigpKSB8fCByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJp
bGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUgfHwgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50
UGhhc2U6Ok1hc2spCi0gICAgICAgIHJldHVybjsKLQotICAgIExheW91dFJlY3QgZnJhbWVSZWN0
KHRoaXMtPmZyYW1lUmVjdCgpKTsKLSAgICBjb25zdHJhaW5Ub0xpbmVUb3BBbmRCb3R0b21JZk5l
ZWRlZChmcmFtZVJlY3QpOwotICAgIAotICAgIC8vIE1vdmUgeC95IHRvIG91ciBjb29yZGluYXRl
cy4KLSAgICBMYXlvdXRSZWN0IGxvY2FsUmVjdChmcmFtZVJlY3QpOwotICAgIGZsaXBGb3JXcml0
aW5nTW9kZShsb2NhbFJlY3QpOwotICAgIExheW91dFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQg
PSBwYWludE9mZnNldCArIGxvY2FsUmVjdC5sb2NhdGlvbigpOwotCi0gICAgY29uc3QgTmluZVBp
ZWNlSW1hZ2UmIG1hc2tOaW5lUGllY2VJbWFnZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS5tYXNrQm94
SW1hZ2UoKTsKLSAgICBTdHlsZUltYWdlKiBtYXNrQm94SW1hZ2UgPSByZW5kZXJlcigpLnN0eWxl
KCkubWFza0JveEltYWdlKCkuaW1hZ2UoKTsKLQotICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgbmVl
ZCB0byBwdXNoIGEgdHJhbnNwYXJlbmN5IGxheWVyIHRvIHJlbmRlciBvdXIgbWFzay4KLSAgICBi
b29sIHB1c2hUcmFuc3BhcmVuY3lMYXllciA9IGZhbHNlOwotICAgIGJvb2wgY29tcG9zaXRlZE1h
c2sgPSByZW5kZXJlcigpLmhhc0xheWVyKCkgJiYgcmVuZGVyZXIoKS5sYXllcigpLT5oYXNDb21w
b3NpdGVkTWFzaygpOwotICAgIGJvb2wgZmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzID0gcmVuZGVy
ZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucGFpbnRCZWhhdmlvcigpLmNvbnRhaW5zKFBhaW50QmVo
YXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3AgPSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlcjsKLSAgICBpZiAoIWNv
bXBvc2l0ZWRNYXNrIHx8IGZsYXR0ZW5Db21wb3NpdGluZ0xheWVycykgewotICAgICAgICBpZiAo
KG1hc2tCb3hJbWFnZSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFza0xheWVycygpLmhhc0ltYWdl
KCkpIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5tYXNrTGF5ZXJzKCkubmV4dCgpKQotICAgICAgICAg
ICAgcHVzaFRyYW5zcGFyZW5jeUxheWVyID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIGNvbXBv
c2l0ZU9wID0gQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW47Ci0gICAgICAgIGlmIChw
dXNoVHJhbnNwYXJlbmN5TGF5ZXIpIHsKLSAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCku
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsK
LSAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuYmVnaW5UcmFuc3BhcmVuY3lMYXllcigx
LjBmKTsKLSAgICAgICAgICAgIGNvbXBvc2l0ZU9wID0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJj
ZU92ZXI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IExh
eW91dFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgZnJhbWVSZWN0LnNpemUoKSk7Ci0gICAgcGFp
bnRGaWxsTGF5ZXJzKHBhaW50SW5mbywgQ29sb3IoKSwgcmVuZGVyZXIoKS5zdHlsZSgpLm1hc2tM
YXllcnMoKSwgcGFpbnRSZWN0LCBjb21wb3NpdGVPcCk7Ci0gICAgCi0gICAgYm9vbCBoYXNCb3hJ
bWFnZSA9IG1hc2tCb3hJbWFnZSAmJiBtYXNrQm94SW1hZ2UtPmNhblJlbmRlcigmcmVuZGVyZXIo
KSwgcmVuZGVyZXIoKS5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAgaWYgKCFoYXNCb3hJ
bWFnZSB8fCAhbWFza0JveEltYWdlLT5pc0xvYWRlZCgpKSB7Ci0gICAgICAgIGlmIChwdXNoVHJh
bnNwYXJlbmN5TGF5ZXIpCi0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmVuZFRyYW5z
cGFyZW5jeUxheWVyKCk7Ci0gICAgICAgIHJldHVybjsgLy8gRG9uJ3QgcGFpbnQgYW55dGhpbmcg
d2hpbGUgd2Ugd2FpdCBmb3IgdGhlIGltYWdlIHRvIGxvYWQuCi0gICAgfQotCi0gICAgLy8gVGhl
IHNpbXBsZSBjYXNlIGlzIHdoZXJlIHdlIGFyZSB0aGUgb25seSBib3ggZm9yIHRoaXMgb2JqZWN0
LiBJbiB0aG9zZQotICAgIC8vIGNhc2VzIG9ubHkgYSBzaW5nbGUgY2FsbCB0byBkcmF3IGlzIHJl
cXVpcmVkLgotICAgIGlmICghcHJldkxpbmVCb3goKSAmJiAhbmV4dExpbmVCb3goKSkKLSAgICAg
ICAgcmVuZGVyZXIoKS5wYWludE5pbmVQaWVjZUltYWdlKHBhaW50SW5mby5jb250ZXh0KCksIExh
eW91dFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgZnJhbWVSZWN0LnNpemUoKSksIHJlbmRlcmVy
KCkuc3R5bGUoKSwgbWFza05pbmVQaWVjZUltYWdlLCBjb21wb3NpdGVPcCk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIC8vIFdlIGhhdmUgYSBtYXNrIGltYWdlIHRoYXQgc3BhbnMgbXVsdGlwbGUgbGlu
ZXMuCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IF90eCBhbmQgX3R5IGJ5IHRoZSB3aWR0
aCBvZiBhbGwgcHJldmlvdXMgbGluZXMuCi0gICAgICAgIExheW91dFVuaXQgbG9naWNhbE9mZnNl
dE9uTGluZTsKLSAgICAgICAgZm9yIChhdXRvKiBjdXJyID0gcHJldkxpbmVCb3goKTsgY3Vycjsg
Y3VyciA9IGN1cnItPnByZXZMaW5lQm94KCkpCi0gICAgICAgICAgICBsb2dpY2FsT2Zmc2V0T25M
aW5lICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOwotICAgICAgICBMYXlvdXRVbml0IHRvdGFsTG9n
aWNhbFdpZHRoID0gbG9naWNhbE9mZnNldE9uTGluZTsKLSAgICAgICAgZm9yIChhdXRvKiBjdXJy
ID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCi0gICAgICAgICAgICB0
b3RhbExvZ2ljYWxXaWR0aCArPSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgTGF5b3V0
VW5pdCBzdHJpcFggPSBhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAtIChpc0hvcml6b250YWwoKSA/
IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiAwX2x1KTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkg
PSBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IDBfbHUgOiBsb2dp
Y2FsT2Zmc2V0T25MaW5lKTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFdpZHRoID0gaXNIb3Jp
em9udGFsKCkgPyB0b3RhbExvZ2ljYWxXaWR0aCA6IGZyYW1lUmVjdC53aWR0aCgpOwotICAgICAg
ICBMYXlvdXRVbml0IHN0cmlwSGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyBmcmFtZVJlY3QuaGVp
Z2h0KCkgOiB0b3RhbExvZ2ljYWxXaWR0aDsKLQotICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0
ID0gY2xpcFJlY3RGb3JOaW5lUGllY2VJbWFnZVN0cmlwKHRoaXMsIG1hc2tOaW5lUGllY2VJbWFn
ZSwgcGFpbnRSZWN0KTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKHBhaW50SW5mby5jb250ZXh0KCkpOwotICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmNs
aXAoY2xpcFJlY3QpOwotICAgICAgICByZW5kZXJlcigpLnBhaW50TmluZVBpZWNlSW1hZ2UocGFp
bnRJbmZvLmNvbnRleHQoKSwgTGF5b3V0UmVjdChzdHJpcFgsIHN0cmlwWSwgc3RyaXBXaWR0aCwg
c3RyaXBIZWlnaHQpLCByZW5kZXJlcigpLnN0eWxlKCksIG1hc2tOaW5lUGllY2VJbWFnZSwgY29t
cG9zaXRlT3ApOwotICAgIH0KLSAgICAKLSAgICBpZiAocHVzaFRyYW5zcGFyZW5jeUxheWVyKQot
ICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci19Ci0K
IExlZ2FjeUlubGluZUJveCogTGVnYWN5SW5saW5lRmxvd0JveDo6Zmlyc3RMZWFmRGVzY2VuZGFu
dCgpIGNvbnN0CiB7CiAgICAgTGVnYWN5SW5saW5lQm94KiBsZWFmID0gbnVsbHB0cjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5oCmluZGV4IGNkNDFk
MDFkMDYwYWIyN2ZmNTA2MThhZGY4MDAxN2E0OWUzNmY4ZDMuLmRkODcwODU1NWNiZWRjNTM2N2M1
YjczZWI1MTYxNzQzOTc4MWQ5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MZWdhY3lJbmxpbmVGbG93Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUlubGluZUZsb3dCb3guaApAQCAtMTE1LDExICsxMTUsNiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNsZWFyVHJ1bmNhdGlvbigpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBwYWludEJveERlY29y
YXRpb25zKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdm9pZCBwYWludE1h
c2soUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2b2lkIHBhaW50RmlsbExh
eWVycyhjb25zdCBQYWludEluZm8mLCBjb25zdCBDb2xvciYsIGNvbnN0IEZpbGxMYXllciYsIGNv
bnN0IExheW91dFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZU9wZXJhdG9yOjpT
b3VyY2VPdmVyKTsKLSAgICB2b2lkIHBhaW50RmlsbExheWVyKGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgTGF5b3V0UmVjdCYsIENvbXBvc2l0
ZU9wZXJhdG9yID0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIpOwotICAgIHZvaWQgcGFp
bnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBTaGFkb3dT
dHlsZSwgY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRv
bSkgb3ZlcnJpZGU7CiAgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5l
VG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwogCkBA
IC0zMDUsNyArMzAwLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFRleHRCb3hWaXN1YWxPdmVy
ZmxvdyhMZWdhY3lJbmxpbmVUZXh0Qm94JiwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNN
YXAmLCBMYXlvdXRSZWN0JiBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cpOwogICAgIHZvaWQgYWRkT3V0
bGluZVZpc3VhbE92ZXJmbG93KExheW91dFJlY3QmIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyk7CiAg
ICAgdm9pZCBhZGRSZXBsYWNlZENoaWxkT3ZlcmZsb3coY29uc3QgTGVnYWN5SW5saW5lQm94Kiwg
TGF5b3V0UmVjdCYgbG9naWNhbExheW91dE92ZXJmbG93LCBMYXlvdXRSZWN0JiBsb2dpY2FsVmlz
dWFsT3ZlcmZsb3cpOwotICAgIHZvaWQgY29uc3RyYWluVG9MaW5lVG9wQW5kQm90dG9tSWZOZWVk
ZWQoTGF5b3V0UmVjdCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5jbHVk
ZUxvZ2ljYWxMZWZ0RWRnZSA6IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA4ODhkZTMyODNmOTI2MmM1YmQyMGVmMjU5ODk2
MGU0YTY4YzBlNzFmLi5jMTNjMGM2ZWUwZGViMTE0MjA3YTA1NTY1NDMzNjg1NDk3OTU2NGMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAKQEAgLTYyMSw3ICs2MjEsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpj
b21wdXRlZENTU1BhZGRpbmcoY29uc3QgTGVuZ3RoJiBwYWRkaW5nKSBjb25zdAogICAgIHJldHVy
biBtaW5pbXVtVmFsdWVGb3JMZW5ndGgocGFkZGluZywgdyk7CiB9CiAKLVJvdW5kZWRSZWN0IFJl
bmRlckJveE1vZGVsT2JqZWN0OjpnZXRCYWNrZ3JvdW5kUm91bmRlZFJlY3QoY29uc3QgTGF5b3V0
UmVjdCYgYm9yZGVyUmVjdCwgTGVnYWN5SW5saW5lRmxvd0JveCogYm94LCBMYXlvdXRVbml0IGlu
bGluZUJveFdpZHRoLCBMYXlvdXRVbml0IGlubGluZUJveEhlaWdodCwKK1JvdW5kZWRSZWN0IFJl
bmRlckJveE1vZGVsT2JqZWN0OjpnZXRCYWNrZ3JvdW5kUm91bmRlZFJlY3QoY29uc3QgTGF5b3V0
UmVjdCYgYm9yZGVyUmVjdCwgY29uc3QgTGVnYWN5SW5saW5lRmxvd0JveCogYm94LCBMYXlvdXRV
bml0IGlubGluZUJveFdpZHRoLCBMYXlvdXRVbml0IGlubGluZUJveEhlaWdodCwKICAgICBib29s
IGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpIGNv
bnN0CiB7CiAgICAgUm91bmRlZFJlY3QgYm9yZGVyID0gc3R5bGUoKS5nZXRSb3VuZGVkQm9yZGVy
Rm9yKGJvcmRlclJlY3QsIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGluY2x1ZGVMb2dpY2FsUmln
aHRFZGdlKTsKQEAgLTY4Miw3ICs2ODIsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckJveE1vZGVsT2Jq
ZWN0Ojpib3JkZXJJbm5lclJlY3RBZGp1c3RlZEZvckJsZWVkQXZvaWRhbmNlKGNvbnN0CiAgICAg
cmV0dXJuIHNocmlua1JlY3RCeU9uZURldmljZVBpeGVsKGNvbnRleHQsIHJlY3QsIGRvY3VtZW50
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiB9CiAKLVJvdW5kZWRSZWN0IFJlbmRlckJveE1vZGVs
T2JqZWN0OjpiYWNrZ3JvdW5kUm91bmRlZFJlY3RBZGp1c3RlZEZvckJsZWVkQXZvaWRhbmNlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgYm9yZGVyUmVj
dCwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNlLCBMZWdhY3lJbmxpbmVG
bG93Qm94KiBib3gsIGNvbnN0IExheW91dFNpemUmIGJveFNpemUsIGJvb2wgaW5jbHVkZUxvZ2lj
YWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSkgY29uc3QKK1JvdW5kZWRS
ZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpiYWNrZ3JvdW5kUm91bmRlZFJlY3RBZGp1c3RlZEZv
ckJsZWVkQXZvaWRhbmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
b3V0UmVjdCYgYm9yZGVyUmVjdCwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRh
bmNlLCBjb25zdCBMZWdhY3lJbmxpbmVGbG93Qm94KiBib3gsIGNvbnN0IExheW91dFNpemUmIGJv
eFNpemUsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJp
Z2h0RWRnZSkgY29uc3QKIHsKICAgICBpZiAoYmxlZWRBdm9pZGFuY2UgPT0gQmFja2dyb3VuZEJs
ZWVkU2hyaW5rQmFja2dyb3VuZCkgewogICAgICAgICAvLyBXZSBzaHJpbmsgdGhlIHJlY3Rhbmds
ZSBieSBvbmUgZGV2aWNlIHBpeGVsIG9uIGVhY2ggc2lkZSBiZWNhdXNlIHRoZSBibGVlZCBpcyBv
bmUgcGl4ZWwgbWF4aW11bS4KQEAgLTcxMCw3ICs3MTAsNyBAQCBJbnRlcnBvbGF0aW9uUXVhbGl0
eSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2hvb3NlSW50ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhp
Y3NDbwogICAgIHJldHVybiB2aWV3KCkuaW1hZ2VRdWFsaXR5Q29udHJvbGxlcigpLmNob29zZUlu
dGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQsIHRoaXMsIGltYWdlLCBsYXllciwgc2l6ZSk7CiB9
CiAKLXZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TWFza0ZvclRleHRGaWxsQm94KElt
YWdlQnVmZmVyKiBtYXNrSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgbWFza1JlY3QsIExlZ2FjeUlu
bGluZUZsb3dCb3gqIGJveCwgY29uc3QgTGF5b3V0UmVjdCYgc2Nyb2xsZWRQYWludFJlY3QpCit2
b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1
ZmZlciogbWFza0ltYWdlLCBjb25zdCBGbG9hdFJlY3QmIG1hc2tSZWN0LCBjb25zdCBMZWdhY3lJ
bmxpbmVGbG93Qm94KiBib3gsIGNvbnN0IExheW91dFJlY3QmIHNjcm9sbGVkUGFpbnRSZWN0KQog
ewogICAgIEdyYXBoaWNzQ29udGV4dCYgbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29u
dGV4dCgpOwogICAgIG1hc2tJbWFnZUNvbnRleHQudHJhbnNsYXRlKC1tYXNrUmVjdC5sb2NhdGlv
bigpKTsKQEAgLTcyMCw3ICs3MjAsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZlciogbWFza0ltYWdlLCBjb25zdAogICAgIFBh
aW50SW5mbyBpbmZvKG1hc2tJbWFnZUNvbnRleHQsIExheW91dFJlY3QgeyBtYXNrUmVjdCB9LCBQ
YWludFBoYXNlOjpUZXh0Q2xpcCwgUGFpbnRCZWhhdmlvcjo6Rm9yY2VCbGFja1RleHQpOwogICAg
IGlmIChib3gpIHsKICAgICAgICAgY29uc3QgTGVnYWN5Um9vdElubGluZUJveCYgcm9vdEJveCA9
IGJveC0+cm9vdCgpOwotICAgICAgICBib3gtPnBhaW50KGluZm8sIExheW91dFBvaW50KHNjcm9s
bGVkUGFpbnRSZWN0LngoKSAtIGJveC0+eCgpLCBzY3JvbGxlZFBhaW50UmVjdC55KCkgLSBib3gt
PnkoKSksIHJvb3RCb3gubGluZVRvcCgpLCByb290Qm94LmxpbmVCb3R0b20oKSk7CisgICAgICAg
IGNvbnN0X2Nhc3Q8TGVnYWN5SW5saW5lRmxvd0JveCo+KGJveCktPnBhaW50KGluZm8sIExheW91
dFBvaW50KHNjcm9sbGVkUGFpbnRSZWN0LngoKSAtIGJveC0+eCgpLCBzY3JvbGxlZFBhaW50UmVj
dC55KCkgLSBib3gtPnkoKSksIHJvb3RCb3gubGluZVRvcCgpLCByb290Qm94LmxpbmVCb3R0b20o
KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgTGF5b3V0U2l6ZSBsb2NhbE9mZnNldCA9IGlzPFJl
bmRlckJveD4oKnRoaXMpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqdGhpcykubG9jYXRpb25PZmZz
ZXQoKSA6IExheW91dFNpemUoKTsKICAgICAgICAgcGFpbnQoaW5mbywgc2Nyb2xsZWRQYWludFJl
Y3QubG9jYXRpb24oKSAtIGxvY2FsT2Zmc2V0KTsKQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZlciog
bWFza0ltYWdlLCBjb25zdAogfQogCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZp
bGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBDb2xvciYg
Y29sb3IsIGNvbnN0IEZpbGxMYXllciYgYmdMYXllciwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwK
LSAgICBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRBdm9pZGFuY2UsIExlZ2FjeUlubGlu
ZUZsb3dCb3gqIGJveCwgY29uc3QgTGF5b3V0U2l6ZSYgYm94U2l6ZSwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIFJlbmRlckVsZW1lbnQqIGJhY2tncm91bmRPYmplY3QsIEJhc2VCYWNrZ3JvdW5kQ29s
b3JVc2FnZSBiYXNlQmdDb2xvclVzYWdlKQorICAgIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBi
bGVlZEF2b2lkYW5jZSwgY29uc3QgTGVnYWN5SW5saW5lRmxvd0JveCogYm94LCBjb25zdCBMYXlv
dXRTaXplJiBib3hTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgUmVuZGVyRWxlbWVudCogYmFj
a2dyb3VuZE9iamVjdCwgQmFzZUJhY2tncm91bmRDb2xvclVzYWdlIGJhc2VCZ0NvbG9yVXNhZ2Up
CiB7CiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQoKTsK
IApAQCAtMjMyNiw3ICsyMzI2LDcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym9yZGVy
T2JzY3VyZXNCYWNrZ3JvdW5kKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym94U2hhZG93U2hvdWxkQmVBcHBsaWVkVG9CYWNrZ3JvdW5k
KGNvbnN0IExheW91dFBvaW50JiwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRh
bmNlLCBMZWdhY3lJbmxpbmVGbG93Qm94KiBpbmxpbmVGbG93Qm94KSBjb25zdAorYm9vbCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6Ym94U2hhZG93U2hvdWxkQmVBcHBsaWVkVG9CYWNrZ3JvdW5kKGNv
bnN0IExheW91dFBvaW50JiwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNl
LCBjb25zdCBMZWdhY3lJbmxpbmVGbG93Qm94KiBpbmxpbmVGbG93Qm94KSBjb25zdAogewogICAg
IGlmIChibGVlZEF2b2lkYW5jZSAhPSBCYWNrZ3JvdW5kQmxlZWROb25lKQogICAgICAgICByZXR1
cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5oCmluZGV4IGFhNjcxMjFlNjUzNWVhMGU5MGMyMDc3MGRjMDU2MGI4M2I1NjA1ZDIuLmI0
Y2M2NzFmNDdhMTYxZTAwMzQ1YzliM2M0OGRkN2I0ZjY2NmM3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCkBAIC0yMTAsOSArMjEwLDkg
QEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRCb3JkZXIoY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UmVjdCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNl
ID0gQmFja2dyb3VuZEJsZWVkTm9uZSwgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlID0gdHJ1
ZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSA9IHRydWUpOwogICAgIGJvb2wgcGFpbnRO
aW5lUGllY2VJbWFnZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBOaW5lUGllY2VJbWFnZSYsIENvbXBvc2l0ZU9wZXJhdG9yID0g
Q29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIpOwogICAgIHZvaWQgcGFpbnRCb3hTaGFkb3co
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IFJlbmRlclN0eWxlJiwg
U2hhZG93U3R5bGUsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSA9IHRydWUsIGJvb2wgaW5j
bHVkZUxvZ2ljYWxSaWdodEVkZ2UgPSB0cnVlKTsKLSAgICB2b2lkIHBhaW50RmlsbExheWVyRXh0
ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgQ29sb3ImLCBjb25zdCBGaWxsTGF5ZXImLCBj
b25zdCBMYXlvdXRSZWN0JiwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlLCBMZWdhY3lJbmxpbmVG
bG93Qm94KiA9IG51bGxwdHIsIGNvbnN0IExheW91dFNpemUmID0gTGF5b3V0U2l6ZSgpLCBDb21w
b3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBSZW5kZXJFbGVt
ZW50KiBiYWNrZ3JvdW5kT2JqZWN0ID0gbnVsbHB0ciwgQmFzZUJhY2tncm91bmRDb2xvclVzYWdl
ID0gQmFzZUJhY2tncm91bmRDb2xvclVzZSk7CisgICAgdm9pZCBwYWludEZpbGxMYXllckV4dGVu
ZGVkKGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVyJiwgY29u
c3QgTGF5b3V0UmVjdCYsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSwgY29uc3QgTGVnYWN5SW5s
aW5lRmxvd0JveCogID0gbnVsbHB0ciwgY29uc3QgTGF5b3V0U2l6ZSYgPSBMYXlvdXRTaXplKCks
IENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIFJlbmRl
ckVsZW1lbnQqIGJhY2tncm91bmRPYmplY3QgPSBudWxscHRyLCBCYXNlQmFja2dyb3VuZENvbG9y
VXNhZ2UgPSBCYXNlQmFja2dyb3VuZENvbG9yVXNlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBib3hT
aGFkb3dTaG91bGRCZUFwcGxpZWRUb0JhY2tncm91bmQoY29uc3QgTGF5b3V0UG9pbnQmIGFic29s
dXRlUGFpbnRQb3N0aW9uLCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UsIExlZ2FjeUlubGluZUZs
b3dCb3gqID0gbnVsbHB0cikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGJveFNoYWRvd1Nob3Vs
ZEJlQXBwbGllZFRvQmFja2dyb3VuZChjb25zdCBMYXlvdXRQb2ludCYgYWJzb2x1dGVQYWludFBv
c3Rpb24sIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSwgY29uc3QgTGVnYWN5SW5saW5lRmxvd0Jv
eCogID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICAvLyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMg
dG8gZGV0ZXJtaW5lIGxpbmUgaGVpZ2h0IGFuZCBiYXNlbGluZSBwb3NpdGlvbi4KICAgICB2aXJ0
dWFsIExheW91dFVuaXQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1v
ZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0ID0g
MDsKQEAgLTI1Niw3ICsyNTYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGNvbnN0IExheW91dFJl
Y3QmIHBhaW50UmVjdCwgUmVuZGVyRWxlbWVudCogPSBudWxscHRyKSBjb25zdDsKICAgICBib29s
IGJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVkZ2UoY29uc3QgRmxvYXRTaXplJiBjb250ZXh0U2Nh
bGUpIGNvbnN0OwogICAgIGJvb2wgYm9yZGVyT2JzY3VyZXNCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0g
ICAgUm91bmRlZFJlY3QgYmFja2dyb3VuZFJvdW5kZWRSZWN0QWRqdXN0ZWRGb3JCbGVlZEF2b2lk
YW5jZShjb25zdCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgQmFja2dyb3Vu
ZEJsZWVkQXZvaWRhbmNlLCBMZWdhY3lJbmxpbmVGbG93Qm94KiwgY29uc3QgTGF5b3V0U2l6ZSYs
IGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRn
ZSkgY29uc3Q7CisgICAgUm91bmRlZFJlY3QgYmFja2dyb3VuZFJvdW5kZWRSZWN0QWRqdXN0ZWRG
b3JCbGVlZEF2b2lkYW5jZShjb25zdCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0
JiwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlLCBjb25zdCBMZWdhY3lJbmxpbmVGbG93Qm94KiAs
IGNvbnN0IExheW91dFNpemUmLCBib29sIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5j
bHVkZUxvZ2ljYWxSaWdodEVkZ2UpIGNvbnN0OwogICAgIExheW91dFJlY3QgYm9yZGVySW5uZXJS
ZWN0QWRqdXN0ZWRGb3JCbGVlZEF2b2lkYW5jZShjb25zdCBHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBMYXlvdXRSZWN0JiwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlKSBjb25zdDsKIAogICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IGNob29zZUludGVycG9sYXRpb25RdWFsaXR5KEdyYXBoaWNzQ29u
dGV4dCYsIEltYWdlJiwgY29uc3Qgdm9pZCosIGNvbnN0IExheW91dFNpemUmKTsKQEAgLTMwNyw3
ICszMDcsNyBAQCBwcml2YXRlOgogCiAgICAgTGF5b3V0U2l6ZSBjYWxjdWxhdGVGaWxsVGlsZVNp
emUoY29uc3QgRmlsbExheWVyJiwgY29uc3QgTGF5b3V0U2l6ZSYgc2NhbGVkUG9zaXRpb25pbmdB
cmVhU2l6ZSkgY29uc3Q7CiAKLSAgICBSb3VuZGVkUmVjdCBnZXRCYWNrZ3JvdW5kUm91bmRlZFJl
Y3QoY29uc3QgTGF5b3V0UmVjdCYsIExlZ2FjeUlubGluZUZsb3dCb3gqLCBMYXlvdXRVbml0IGlu
bGluZUJveFdpZHRoLCBMYXlvdXRVbml0IGlubGluZUJveEhlaWdodCwKKyAgICBSb3VuZGVkUmVj
dCBnZXRCYWNrZ3JvdW5kUm91bmRlZFJlY3QoY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IExlZ2Fj
eUlubGluZUZsb3dCb3gqICwgTGF5b3V0VW5pdCBpbmxpbmVCb3hXaWR0aCwgTGF5b3V0VW5pdCBp
bmxpbmVCb3hIZWlnaHQsCiAgICAgICAgIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9v
bCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBmaXhlZEJh
Y2tncm91bmRQYWludHNJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKQEAgLTMyNiw3ICszMjYs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgUGF0aCYsIGNvbnN0IEJvcmRlckVkZ2VzJiwK
ICAgICAgICAgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBkcmF3VGhpY2tuZXNzLCBCb3hTaWRlLCBj
b25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIENvbG9yLCBCb3JkZXJTdHlsZSwgQmFja2dyb3Vu
ZEJsZWVkQXZvaWRhbmNlLCBib29sIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5jbHVk
ZUxvZ2ljYWxSaWdodEVkZ2UpOwotICAgIHZvaWQgcGFpbnRNYXNrRm9yVGV4dEZpbGxCb3goSW1h
Z2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBMZWdhY3lJbmxpbmVGbG93Qm94KiwgY29uc3Qg
TGF5b3V0UmVjdCYpOworICAgIHZvaWQgcGFpbnRNYXNrRm9yVGV4dEZpbGxCb3goSW1hZ2VCdWZm
ZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBMZWdhY3lJbmxpbmVGbG93Qm94KiAsIGNvbnN0
IExheW91dFJlY3QmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4IDQxNzZhNDE4NWNhNmUwODFiYzA1ZTVk
MjI4MTdmNjBhNTljMGNmYTAuLmJlOTJjYTAzMDhmNjNiNGY5YzI3NzQxYjI3ZGExNmQ5ODdhMDhm
ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcApAQCAtNjkxLDcg
KzY5MSw3IEBAIEltYWdlRHJhd1Jlc3VsdCBSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0CiAgICAgcmV0dXJuIGRyYXdSZXN1bHQ7
CiB9CiAKLWJvb2wgUmVuZGVySW1hZ2U6OmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dy
b3VuZChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIEJhY2tncm91bmRCbGVlZEF2b2lk
YW5jZSBibGVlZEF2b2lkYW5jZSwgTGVnYWN5SW5saW5lRmxvd0JveCopIGNvbnN0Citib29sIFJl
bmRlckltYWdlOjpib3hTaGFkb3dTaG91bGRCZUFwcGxpZWRUb0JhY2tncm91bmQoY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRBdm9p
ZGFuY2UsIGNvbnN0IExlZ2FjeUlubGluZUZsb3dCb3gqKSBjb25zdAogewogICAgIGlmICghUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChw
YWludE9mZnNldCwgYmxlZWRBdm9pZGFuY2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCmluZGV4IDkxYmI0YmM5NmY2MDc3MDMwYWZi
NDJhOWU1YzYxMWExMmQ5ZGRiYTQuLmYxZGYyMmJhYzBjOTJlYjBiNTYzMmNlMTk1MWJjYThhMjlk
MTI3MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCkBAIC0xMjEsNyAr
MTIxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNl
JiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikgZmluYWw7CiAgICAgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgZmluYWw7CiAKLSAgICBib29sIGJveFNoYWRvd1Nob3Vs
ZEJlQXBwbGllZFRvQmFja2dyb3VuZChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIEJh
Y2tncm91bmRCbGVlZEF2b2lkYW5jZSwgTGVnYWN5SW5saW5lRmxvd0JveCopIGNvbnN0IGZpbmFs
OworICAgIGJvb2wgYm94U2hhZG93U2hvdWxkQmVBcHBsaWVkVG9CYWNrZ3JvdW5kKGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlLCBjb25zdCBM
ZWdhY3lJbmxpbmVGbG93Qm94KikgY29uc3QgZmluYWw7CiAKICAgICBJbnRTaXplIGltYWdlU2l6
ZUZvckVycm9yKENhY2hlZEltYWdlKikgY29uc3Q7CiAgICAgdm9pZCByZXBhaW50T3JNYXJrRm9y
TGF5b3V0KEltYWdlU2l6ZUNoYW5nZVR5cGUsIGNvbnN0IEludFJlY3QqID0gbnVsbHB0cik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCmluZGV4IGJkNDI0
YjJiYTJhNTBkNmVjMzAyMDE2NTg5MjU2MmQzZDkwNWY1ZmMuLjVlNTBmODI4ZGJjZmViMmM1OGQy
MmQ3OTk2ZTUxMTljYjJlNzdhODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuY3BwCkBAIC0xMzQ3LDcgKzEzNDcsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2Vs
bDo6cGFpbnRNYXNrKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZgogICAgIHBhaW50TWFza0ltYWdlcyhwYWludEluZm8sIHBhaW50UmVjdCk7CiB9CiAKLWJv
b2wgUmVuZGVyVGFibGVDZWxsOjpib3hTaGFkb3dTaG91bGRCZUFwcGxpZWRUb0JhY2tncm91bmQo
Y29uc3QgTGF5b3V0UG9pbnQmLCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UsIExlZ2FjeUlubGlu
ZUZsb3dCb3gqKSBjb25zdAorYm9vbCBSZW5kZXJUYWJsZUNlbGw6OmJveFNoYWRvd1Nob3VsZEJl
QXBwbGllZFRvQmFja2dyb3VuZChjb25zdCBMYXlvdXRQb2ludCYsIEJhY2tncm91bmRCbGVlZEF2
b2lkYW5jZSwgY29uc3QgTGVnYWN5SW5saW5lRmxvd0JveCopIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCmlu
ZGV4IDQxYTgzYTJjODY4NGY0MTBlZGI2ZDY1NWEyNTkwZTYyNGVhYzM1MWIuLjA2ZWY0ODQyN2Ey
ODNmOWYzODkwZWI5ZGM2YTgzYWE0YWY5MDNjOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmgKQEAgLTE1MSw3ICsxNTEsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92
ZXJyaWRlOwogICAgIHZvaWQgcGFpbnRNYXNrKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
Jikgb3ZlcnJpZGU7CiAKLSAgICBib29sIGJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dy
b3VuZChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIEJhY2tncm91bmRCbGVlZEF2b2lk
YW5jZSwgTGVnYWN5SW5saW5lRmxvd0JveCopIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYm94
U2hhZG93U2hvdWxkQmVBcHBsaWVkVG9CYWNrZ3JvdW5kKGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlLCBjb25zdCBMZWdhY3lJbmxpbmVGbG93
Qm94KikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Db250YWlu
ZXIoUmVuZGVyRWxlbWVudCYsIGNvbnN0IExheW91dFBvaW50JiwgYm9vbCogb2Zmc2V0RGVwZW5k
c09uUG9pbnQgPSAwKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFJl
Y3Q+IGNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IExheW91dFJlY3QmLCBjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCkg
Y29uc3Qgb3ZlcnJpZGU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>