<?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>129778</bug_id>
          
          <creation_ts>2014-03-05 21:55:52 -0800</creation_ts>
          <short_desc>GetById list caching should use something object-oriented rather than PolymorphicAccessStructureList</short_desc>
          <delta_ts>2014-08-25 21:12:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>129591</dependson>
    
    <dependson>130134</dependson>
          <blocked>129589</blocked>
    
    <blocked>129590</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>987559</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-05 21:55:52 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989167</commentid>
    <comment_count>1</comment_count>
      <attachid>226366</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-10 19:11:33 -0700</bug_when>
    <thetext>Created attachment 226366
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989175</commentid>
    <comment_count>2</comment_count>
      <attachid>226369</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-10 19:24:45 -0700</bug_when>
    <thetext>Created attachment 226369
it compiles

Not done yet though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989195</commentid>
    <comment_count>3</comment_count>
      <attachid>226376</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-10 20:07:59 -0700</bug_when>
    <thetext>Created attachment 226376
starting to work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989216</commentid>
    <comment_count>4</comment_count>
      <attachid>226382</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-10 21:21:16 -0700</bug_when>
    <thetext>Created attachment 226382
almost done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989271</commentid>
    <comment_count>5</comment_count>
      <attachid>226393</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-10 23:48:55 -0700</bug_when>
    <thetext>Created attachment 226393
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989273</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-10 23:51:42 -0700</bug_when>
    <thetext>Attachment 226393 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.h:104:  The parameter name &quot;stubInfo&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.h:51:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:41:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:42:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:43:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:44:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 6 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989420</commentid>
    <comment_count>7</comment_count>
      <attachid>226393</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-03-11 09:45:20 -0700</bug_when>
    <thetext>Comment on attachment 226393
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989523</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-11 20:43:53 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/165459</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989654</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-03-12 09:26:56 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Landed in http://trac.webkit.org/changeset/165459

It caused regression on ARM Thumb2 - https://bugs.webkit.org/show_bug.cgi?id=130134</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990378</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-03-14 03:27:47 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Landed in http://trac.webkit.org/changeset/165459
&gt; 
&gt; It caused regression on ARM Thumb2 - https://bugs.webkit.org/show_bug.cgi?id=130134

Same regression occured on 32 bit Apple Mac build too.
But https://bugs.webkit.org/show_bug.cgi?id=130203
fixed 94 failures from the 110 , only 16 failures remains.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031315</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-25 21:12:58 -0700</bug_when>
    <thetext>*** Bug 129590 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226366</attachid>
            <date>2014-03-10 19:11:33 -0700</date>
            <delta_ts>2014-03-10 19:24:45 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44740</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjQ5NzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjczLDYgKzI3Myw4IEBACiAJCTBGNDg1MzJBMTg3REZE
RUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJl
Y292ZXJ5T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZE
MENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdC
OUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5
cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwICov
OyB9OworCQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VE
NUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRGMjlERjE4QjZBRDFD
MDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2
QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNw
cCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjU1NDFCMTE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBv
aW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY1NTQxQUYxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCAqLzsgfTsKQEAg
LTE3NzYsNiArMTc3OCw4IEBACiAJCTBGNDg1MzI2MTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNv
dmVyeU9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExSZWNvdmVy
eU9wY29kZS5oOyBwYXRoID0gZnRsL0ZUTFJlY292ZXJ5T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUwMERE
MDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0Q0VENUQxOENFQTdBQjAwODAy
RkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4
ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NTQxQUYxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2lu
dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwZWNpYWxQb2lu
dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1NjksNyArNDU3Myw2IEBA
CiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNjUyOUZCMzExOEIyRDk5OTAwQzYxMTAy
IC8qIEJ5dGVjb2RlTGlzdC5qc29uICovLAogCQkJCTBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAv
KiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLywKIAkJCQkwRjgzMzVCNTE2MzlDMUUzMDAx
NDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovLAogCQkJCTBGNjM5NDUxMTVEMDcw
NTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwICovLApAQCAtNDU3Nyw2ICs0NTgwLDcgQEAK
IAkJCQlDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAq
LywKIAkJCQlDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmgg
Ki8sCiAJCQkJMEYyMUMyN0UxNEJFQUE4MDAwQURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMu
aCAqLywKKwkJCQk2NTI5RkIzMTE4QjJEOTk5MDBDNjExMDIgLyogQnl0ZWNvZGVMaXN0Lmpzb24g
Ki8sCiAJCQkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgKi8sCiAJCQkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5oICovLAogCQkJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8sCkBAIC00NjMzLDYgKzQ2MzcsOCBAQAog
CQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5oICovLAogCQkJCUE3MDQ0
N0U5MTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGluZXMuaCAqLywKIAkJCQkwRjM0QjE0
QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggKi8s
CisJCQkJMEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3Qu
Y3BwICovLAorCQkJCTBGNENFRDVEMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0LmggKi8sCiAJCQkJMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwICovLAogCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8q
IFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCkBAIC01MDgxLDYgKzUwODcsNyBAQAogCQkJCTBG
QzA5NzcxMTQ2OTNBRjUwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2N0Y1MyAvKiBE
RkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRDRUQ1RjE4
Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAwQzcyNTMyIC8qIERGR1BoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3QjE3OTczOEI4MDA5REY3NDQgLyogREZHUGxh
bi5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDk3LDYgKzY1MDQsNyBAQAogCQkJCTBGMEI4MzlDMTRC
Q0Y0NjMwMDg4NUI0RiAvKiBMTEludFRodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNF
RkFDRDE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0U1QUIzNzE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjRDRUQ1RTE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlk
TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERTEwN0VDN0U3MDA2NTA0NDYgLyog
TG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3MiAv
KiBMb3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QjcyM0IyMTJE
N0RBNDYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMTY0OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJMTEludEVu
dHJ5cG9pbnQuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKICNpbmNs
dWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCiAjaW5jbHVkZSAiUmVkdWNlV2hpdGVzcGFj
ZS5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKQEAgLTM0MSw4ICszNDIsNyBAQCB2b2lkIENvZGVC
bG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGJh
c2VTdHJ1Y3R1cmUgPSAwOwogICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1
cmUgPSAwOwogICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gMDsKLSAgICAgICAg
ICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogc3RydWN0dXJlTGlzdCA9IDA7Ci0g
ICAgICAgICAgICBpbnQgbGlzdFNpemUgPSAwOworICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdCogbGlzdCA9IDA7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoc3R1
YkluZm8uYWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGY6CkBAIC0zNTQsMTAgKzM1NCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNo
ZVN0YXR1cygKICAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRC
eUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKICAgICAgICAgICAgICAgICBjaGFp
biA9IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdDoKLSAg
ICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzZWxmX2xpc3QiKTsKLSAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsK
LSAgICAgICAgICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxp
c3RTaXplOworICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6CisgICAgICAg
ICAgICAgICAgb3V0LnByaW50ZigibGlzdCIpOworICAgICAgICAgICAgICAgIGxpc3QgPSBzdHVi
SW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJ1bnNl
dCIpOwpAQCAtMzgyLDE2ICszODEsMTYgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENh
Y2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGV4ZWMsIGNoYWluLCBp
ZGVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdHJ1
Y3R1cmVMaXN0KSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCBsaXN0ID0gJXA6IFsi
LCBzdHJ1Y3R1cmVMaXN0KTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxp
c3RTaXplOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChsaXN0KSB7CisgICAgICAgICAgICAgICAg
b3V0LnByaW50ZigiLCBsaXN0ID0gJXA6IFsiLCBsaXN0KTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwog
ICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIoIik7Ci0gICAgICAgICAgICAgICAgICAg
IGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIsIGV4ZWMsIHN0cnVjdHVyZUxpc3QtPmxpc3RbaV0u
YmFzZS5nZXQoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlTGlz
dC0+bGlzdFtpXS5jaGFpbi5nZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0
dXJlKG91dCwgImJhc2UiLCBleGVjLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC0+YXQoaSkuY2hhaW4oKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGR1bXBDaGFpbihvdXQsIGV4ZWMsIHN0cnVjdHVyZUxpc3QtPmxpc3RbaV0uY2hhaW4uZ2V0KCks
IGlkZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGV4ZWMsIGxp
c3QtPmF0KGkpLmNoYWluKCksIGlkZW50KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBvdXQucHJpbnRmKCIpIik7CiAgICAgICAgICAgICAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5o
IgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitHZXRCeUlkQWNjZXNz
OjpHZXRCeUlkQWNjZXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0
eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjaGFpbkNvdW50
KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX2NoYWluQ291bnQoY2hhaW5Db3VudCkKKyAg
ICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQorICAgICwgbV9jaGFpbih2bSwg
b3duZXIsIGNoYWluKQorICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkKK3sKK30KKwor
R2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0
aWFsU2xvd1BhdGggPQorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICAKKyAgICBH
ZXRCeUlkQWNjZXNzIHJlc3VsdDsKKyAgICAKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5
cGUpIHsKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKKyAgICAgICAgcmVzdWx0Lm1f
dHlwZSA9IFNpbXBsZTsKKyAgICAgICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJ
bmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHJlc3VsdC5t
X3N0dWJSb3V0aW5lID0gSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShp
bml0aWFsU2xvd1BhdGgpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBhY2Nl
c3NfZ2V0X2J5X2lkX2NoYWluOgorICAgICAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20o
c3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHJl
c3VsdC5tX2NoYWluLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluKTsKKyAg
ICAgICAgcmVzdWx0Lm1fY2hhaW5Db3VudCA9IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNvdW50
OworICAgICAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uaXNEaXJlY3QpIHsKKyAgICAg
ICAgICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGU7CisgICAgICAgICAgICByZXN1bHQubV9zdHVi
Um91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlh
bFNsb3dQYXRoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUg
PSBHZXR0ZXI7CisgICAgICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJJbmZvLnN0
dWJSb3V0aW5lOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZp
c2l0V2VhaygpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtl
ZChtX3N0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9j
aGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6UG9s
eW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAg
aWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgbV9saXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1
YkluZm8oc3R1YkluZm8pKTsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAg
aWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KQorICAgICAg
ICByZXR1cm4gc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0OworICAgIAorICAgIEFTU0VSVChz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgorICAgICAgICAgICB8
fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfY2hhaW4pOworICAgIAor
ICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0KHN0dWJJbmZvKTsKKyAgICAKKyAgICBzdHViSW5mby5pbml0R2V0QnlJZExpc3QocmVz
dWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Ojp+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpIHsgfQorCit2b2lkIFBvbHltb3JwaGljR2V0
QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCit7CisgICAg
QVNTRVJUKCFpc0Z1bGwoKSk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9w
dGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5yZXNpemUobV9saXN0LnNp
emUoKSArIDEpOworICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7Cit9CisKK2Jvb2wgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2l6ZSgpIDw9
IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJuIHNpemUoKSA9PSBQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZTU9SUEhJQ19M
SVNUX0NBQ0hFX1NJWkUgLSAxOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmRp
ZFNlbGZQYXRjaGluZygpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJZEFjY2Vzczo6U2ltcGxl
SW5saW5lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWsoKSBjb25zdAor
eworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAoIWF0
KGkpLnZpc2l0V2VhaygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
SklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKyNkZWZpbmUgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29k
ZU9yaWdpbi5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiT3Bjb2Rl
LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworc3RydWN0IFN0cnVjdHVyZVN0dWJJ
bmZvOworCitjbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3B1YmxpYzoKKyAgICBlbnVtIEFjY2Vzc1R5
cGUgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMg
dGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KKyAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBp
cyBhIHN0dWIuCisgICAgICAgIEdldHRlciwKKyAgICB9OworICAgIAorICAgIEdldEJ5SWRBY2Nl
c3MoKQorICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorICAgICAgICAsIG1fY2hhaW5Db3VudCgw
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgR2V0QnlJZEFjY2VzcygKKyAgICAgICAgVk0mLCBK
U0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3Ry
dWN0dXJlKiwKKyAgICAgICAgU3RydWN0dXJlQ2hhaW4qID0gMCwgdW5zaWduZWQgY2hhaW5Db3Vu
dCA9IDApOworICAgIAorICAgIH5HZXRCeUlkQWNjZXNzKCk7CisgICAgCisgICAgc3RhdGljIEdl
dEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7Cisg
ICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9
CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAor
ICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7
IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2No
YWluLmdldCgpOyB9CisgICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hhaW5Db3VudDsgfQorICAgIAorICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX3N0
dWJSb3V0aW5lLmdldCgpOworICAgIH0KKyAgICAKKyAgICBib29sIHZpc2l0V2VhaygpIGNvbnN0
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgQWNj
ZXNzVHlwZSBtX3R5cGU7CisgICAgdW5zaWduZWQgbV9jaGFpbkNvdW50OworICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVD
aGFpbj4gbV9jaGFpbjsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7
Cit9OworCitjbGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9y
cGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgorICAg
IC8vIHBsYWNlLgorICAgIHN0YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVj
dHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKKyAg
ICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNv
ZGUoKS5jb2RlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5
SWRBY2Nlc3MmKTsKKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xp
c3QuaXNFbXB0eSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlz
dC5zaXplKCk7IH0KKyAgICBib29sIGlzRnVsbCgpIGNvbnN0OworICAgIGJvb2wgaXNBbG1vc3RG
dWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1
bGwoKSB0cnVlLgorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIG9wZXJhdG9y
W10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9CisgICAgCisgICAgYm9v
bCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBvZiB0aGUgYWNjZXNzZXMgU2lt
cGxlSW5saW5lPworICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgVmVjdG9yPEdldEJ5SWRBY2Nl
c3MsIDI+IG1fbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5jcHAJKHJldmlzaW9uIDE2NDk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiB7CiAgICAg
c3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlz
dDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGlj
U3RydWN0dXJlcyA9IHUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGRl
bGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xp
c3Q6IHsKKyAgICAgICAgZGVsZXRlIHUuZ2V0QnlJZExpc3QubGlzdDsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKQEAgLTc0LDkgKzczLDgg
QEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgICAgICAgICAg
fHwgIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5
X2lkX3NlbGZfbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7
Ci0gICAgICAgIGlmICghcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT52aXNpdFdlYWsodS5nZXRCeUlk
U2VsZkxpc3QubGlzdFNpemUpKQorICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9saXN0OiB7Cisg
ICAgICAgIGlmICghdS5nZXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9u
IDE2NDk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMiArNDEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICNpZiBFTkFCTEUoSklUKQogCitjbGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OwogY2xh
c3MgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDsKIAogZW51bSBBY2Nlc3NUeXBlIHsKICAgICBhY2Nl
c3NfZ2V0X2J5X2lkX3NlbGYsCiAgICAgYWNjZXNzX2dldF9ieV9pZF9jaGFpbiwKLSAgICBhY2Nl
c3NfZ2V0X2J5X2lkX3NlbGZfbGlzdCwKKyAgICBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QsCiAgICAg
YWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbCwKICAgICBhY2Nlc3NfcHV0X2J5X2lk
X3RyYW5zaXRpb25fZGlyZWN0LAogICAgIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZSwKQEAgLTYw
LDcgKzYxLDcgQEAgaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5cGUgYQogICAg
IHN3aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgog
ICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlf
aWRfc2VsZl9saXN0OgorICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9saXN0OgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTUs
MTMgKzExNiwxMCBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICB1LmdldEJ5
SWRDaGFpbi5pc0RpcmVjdCA9IGlzRGlyZWN0OwogICAgIH0KIAotICAgIHZvaWQgaW5pdEdldEJ5
SWRTZWxmTGlzdChQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHN0cnVjdHVyZUxpc3Qs
IGludCBsaXN0U2l6ZSwgYm9vbCBkaWRTZWxmUGF0Y2hpbmcgPSBmYWxzZSkKKyAgICB2b2lkIGlu
aXRHZXRCeUlkTGlzdChQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0KQogICAgIHsKLSAgICAg
ICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OwotCi0gICAgICAgIHUu
Z2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3QgPSBzdHJ1Y3R1cmVMaXN0OwotICAgICAgICB1
LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSA9IGxpc3RTaXplOwotICAgICAgICB1LmdldEJ5SWRT
ZWxmTGlzdC5kaWRTZWxmUGF0Y2hpbmcgPSBkaWRTZWxmUGF0Y2hpbmc7CisgICAgICAgIGFjY2Vz
c1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q7CisgICAgICAgIHUuZ2V0QnlJZExpc3QubGlz
dCA9IGxpc3Q7CiAgICAgfQogCiAgICAgLy8gUHV0QnlJZCoKQEAgLTIzMiwxNCArMjMwLDggQEAg
c3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgOiAx
OwogICAgICAgICB9IGdldEJ5SWRDaGFpbjsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAg
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogc3RydWN0dXJlTGlzdDsKLSAgICAgICAg
ICAgIGludCBsaXN0U2l6ZSA6IDMxOwotICAgICAgICAgICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcg
OiAxOwotICAgICAgICB9IGdldEJ5SWRTZWxmTGlzdDsKLSAgICAgICAgc3RydWN0IHsKLSAgICAg
ICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogc3RydWN0dXJlTGlzdDsKLSAg
ICAgICAgICAgIGludCBsaXN0U2l6ZTsKLSAgICAgICAgfSBnZXRCeUlkUHJvdG9MaXN0OworICAg
ICAgICAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdDsKKyAgICAgICAgfSBnZXRCeUlk
TGlzdDsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3Ry
dWN0dXJlPiBwcmV2aW91c1N0cnVjdHVyZTsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8
U3RydWN0dXJlPiBzdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAJKHJldmlzaW9uIDE2NDk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJKSVRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCiAjaW5jbHVkZSAiUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRl
ICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKQEAgLTIxOSwxMyArMjIwLDExIEBAIHN0YXRp
YyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmUKICAgICBsaW5rUmVzdG9yZVNjcmF0
Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWls
dXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKIH0KIAot
ZW51bSBQcm90b0NoYWluR2VuZXJhdGlvblJlc3VsdCB7Ci0gICAgUHJvdG9DaGFpbkdlbmVyYXRp
b25GYWlsZWQsCi0gICAgUHJvdG9DaGFpbkdlbmVyYXRpb25TdWNjZWVkZWQKLX07Ci0KLXN0YXRp
YyBQcm90b0NoYWluR2VuZXJhdGlvblJlc3VsdCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHVi
KEV4ZWNTdGF0ZSosIGNvbnN0IFByb3BlcnR5U2xvdCYsIGNvbnN0IElkZW50aWZpZXImLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90LCBQcm9wZXJ0eU9mZnNldCwg
U3RydWN0dXJlKiwgQ29kZUxvY2F0aW9uTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsLCBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+JikgV0FSTl9VTlVTRURfUkVUVVJOOwotc3RhdGljIFByb3RvQ2hhaW5H
ZW5lcmF0aW9uUmVzdWx0IGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
IHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93
Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKK3N0YXRpYyB2
b2lkIGdlbmVyYXRlR2V0QnlJZFN0dWIoCisgICAgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwKKyAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNv
dW50LAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENv
ZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93
Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKIHsKICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CkBAIC0yMzUsOCArMjM0LDcgQEAgc3RhdGlj
IFByb3RvQ2hhaW5HZW5lcmF0aW9uUmVzdWx0IGdlbmVyYQogICAgIEdQUlJlZyByZXN1bHRHUFIg
PSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKTsKICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0
ZXJzKS5nZXRGcmVlR1BSKCk7CiAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHNjcmF0
Y2hHUFIgPT0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2ggJiYg
IXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQotICAgICAgICByZXR1cm4gUHJvdG9DaGFpbkdlbmVy
YXRpb25GYWlsZWQ7CisgICAgUkVMRUFTRV9BU1NFUlQoIW5lZWRUb1Jlc3RvcmVTY3JhdGNoIHx8
IHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKTsKICAgICAKICAgICBDQ2FsbEhlbHBlcnMgc3R1Ykpp
dCgmZXhlYy0+dm0oKSwgZXhlYy0+Y29kZUJsb2NrKCkpOwogICAgIGlmIChuZWVkVG9SZXN0b3Jl
U2NyYXRjaCkgewpAQCAtMjYxLDQxICsyNTksNDIgQEAgc3RhdGljIFByb3RvQ2hhaW5HZW5lcmF0
aW9uUmVzdWx0IGdlbmVyYQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJl
UHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykp
OwogCiAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7CiAgICAgSlNPYmplY3QqIHBy
b3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwg
KytpdCkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnBy
b3RvdHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgIFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1
cmUgPSBwcm90b09iamVjdC0+c3RydWN0dXJlKCk7Ci0gICAgICAgIGlmIChwcm90b1N0cnVjdHVy
ZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAg
ICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5h
bWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgIGFkZFN0cnVj
dHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90b1N0cnVj
dHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgIGZhaWx1cmVD
YXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Cisg
ICAgaWYgKGNoYWluKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNo
YWluLT5oZWFkKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytp
LCArK2l0KSB7CisgICAgICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1
cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHBy
b3RvU3RydWN0dXJlID0gcHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpOworICAgICAgICAgICAgaWYg
KHByb3RvU3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBv
aW50cygpKQorICAgICAgICAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQ
cm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7
CisgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgICAgICAgICAg
ICAgcHJvdG9PYmplY3QsIHByb3RvU3RydWN0dXJlLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHVi
Sml0LAorICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOworICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIGJvb2wgaXNBY2Nlc3NvciA9IHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCk7Ci0gICAgaWYgKGlzQWNjZXNzb3IpCi0gICAgICAgIHN0dWJKaXQu
bW92ZShiYXNlR1BSLCBzY3JhdGNoR1BSKTsKLQorICAgIAorICAgIEdQUlJlZyBiYXNlRm9yQWNj
ZXNzR1BSOworICAgIGlmIChjaGFpbikgeworICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
YmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7CisgICAgfSBlbHNlCisgICAgICAgIGJhc2VG
b3JBY2Nlc3NHUFIgPSBiYXNlR1BSOworICAgIAogICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZUN1
c3RvbSgpKSB7Ci0gICAgICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKSB7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KHByb3RvT2JqZWN0LT5sb2Nh
dGlvbkZvck9mZnNldChvZmZzZXQpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihwcm90b09iamVjdC0+bG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSksIHJlc3VsdEdQUik7Ci0g
ICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRH
UFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSks
IHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIocHJvdG9PYmplY3QtPmJ1dHRlcmZseUFk
ZHJlc3MoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKCFpc0lubGluZU9mZnNldChvZmZzZXQp
KSB7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUZvckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSByZXN1bHRHUFI7CisgICAgICAgIH0K
KyAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zm
c2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKLSNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICBzdHVi
Sml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0
dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRH
UFIpOworICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
Rm9yQWNjZXNzR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKSwgcmVzdWx0R1BSKTsK
KyNlbHNlCisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VGb3JBY2Nlc3NHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBUYWdPZmZzZXQp
LCByZXN1bHRUYWdHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsg
UGF5bG9hZE9mZnNldCksIHJlc3VsdEdQUik7CiAjZW5kaWYKLSAgICAgICAgfQogICAgIH0KIAog
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7CkBAIC0zMDQsMTQgKzMwMywx
NCBAQCBzdGF0aWMgUHJvdG9DaGFpbkdlbmVyYXRpb25SZXN1bHQgZ2VuZXJhCiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKICAgICBpZiAoaXNBY2Nlc3NvcikgewogICAg
ICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7Ci0gICAgICAgICAgICBzdHViSml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIG9wZXJhdGlvbkZ1bmN0aW9uID0gb3BlcmF0aW9uQ2FsbEdl
dHRlcjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEVuY29kZWRKU1ZhbHVlICgq
R2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7CisgICAgICAgICAgICBzdHViSml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7CiAjZWxz
ZQotICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7CisgICAgICAgICAgICBzdHViSml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7CiAjZW5kaWYKICAgICAg
ICAgICAgIG9wZXJhdGlvbkZ1bmN0aW9uID0gRnVuY3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIo
KSk7CiAgICAgICAgIH0KQEAgLTM1MSw3ICszNTAsNiBAQCBzdGF0aWMgUHJvdG9DaGFpbkdlbmVy
YXRpb25SZXN1bHQgZ2VuZXJhCiAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZl
ciwKICAgICAgICAgKCJQcm90b3R5cGUgY2hhaW4gYWNjZXNzIHN0dWIgZm9yICVzLCByZXR1cm4g
cG9pbnQgJXAiLAogICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0
YSgpLCBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIHJldHVybiBQcm90
b0NoYWluR2VuZXJhdGlvblN1Y2NlZWRlZDsKIH0KIAogc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRC
eUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pCkBAIC00NjMsMTAgKzQ2MSwxMiBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdl
dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFN0cnVjdHVy
ZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7
Ci0gICAgaWYgKGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc2xvdCwgcHJvcGVy
dHlOYW1lLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsCi0gICAgICAg
IHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2Fz
ZSksIHN0dWJJbmZvLnN0dWJSb3V0aW5lKSA9PSBQcm90b0NoYWluR2VuZXJhdGlvbkZhaWxlZCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGdlbmVyYXRlR2V0QnlJZFN0dWIoCisgICAgICAg
IGV4ZWMsIHNsb3QsIHByb3BlcnR5TmFtZSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3Vu
dCwgb2Zmc2V0LAorICAgICAgICBzdHJ1Y3R1cmUsCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSks
CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLAorICAgICAgICBzdHViSW5mby5zdHViUm91
dGluZSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7
CiAgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CkBAIC00ODUsNDQgKzQ4NSw2IEBAIHZvaWQgcmVw
YXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1YKICAgICAgICAgcmVwYXRjaENhbGwoZXhl
Yy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0
QnlJZCk7CiB9CiAKLXN0YXRpYyBib29sIGdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCgKLSAg
ICBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiYgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LCBpbnQmIGxpc3RJbmRleCwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCYgc2xvd0Nh
c2UpCi17Ci0gICAgc2xvd0Nhc2UgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBp
ZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOwotICAgICAg
ICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwg
MCwgZmFsc2UpOwotICAgICAgICBsaXN0SW5kZXggPSAwOwotICAgIH0gZWxzZSBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdl
ZFJvdXRpbmUoc2xvd0Nhc2UpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCksIHRydWUpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0
KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwgdHJ1ZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9
IDE7Ci0gICAgfSBlbHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlf
aWRfY2hhaW4pIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFzdHViSW5mby5zdHViUm91dGlu
ZSk7Ci0gICAgICAgIHNsb3dDYXNlID0gQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qg
PSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENo
YWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNo
YWluLmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5pc0RpcmVjdCwgc3R1YkluZm8udS5n
ZXRCeUlkQ2hhaW4uY291bnQpOwotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZS5jbGVhcigp
OwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCwgMSwgZmFsc2UpOwotICAgICAgICBsaXN0SW5kZXggPSAxOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dl
dF9ieV9pZF9zZWxmX2xpc3QpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBz
dHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0SW5k
ZXggPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nh
c2UgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlz
dEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgIH0KLSAgICAKLSAg
ICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKGxpc3RJbmRleCA8IFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyB2
b2lkIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9z
ZWxmX2xpc3QpOwpAQCAtNTUwLDE1OCArNTEyLDYgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRC
eUlETGlzdChFeGVjU3RhdAogICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxs
KCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CiAg
ICAgCi0gICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgaWYg
KCFzdHViSW5mby5wYXRjaC5yZWdpc3RlcnNGbHVzaGVkKSB7Ci0gICAgICAgICAgICAvLyBXZSBj
YW5ub3QgZG8gYXMgbXVjaCBpbmxpbmUgY2FjaGluZyBpZiB0aGUgcmVnaXN0ZXJzIHdlcmUgbm90
IGZsdXNoZWQgcHJpb3IgdG8gdGhpcyBHZXRCeUlkLiBJbiBwYXJ0aWN1bGFyLAotICAgICAgICAg
ICAgLy8gbm9uLVZhbHVlIGNhY2hlZCBwcm9wZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2FsbHMs
IHdoaWNoIHJlcXVpcmVzIHJlZ2lzdGVycyB0byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywKLSAg
ICAgICAgICAgIC8vIGlmIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkLCBkb24ndCBkbyBub24t
VmFsdWUgY2FjaGluZy4KLSAgICAgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgCi0gICAgICAg
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
OwotICAgICAgICBpbnQgbGlzdEluZGV4OwotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93
Q2FzZTsKLQotICAgICAgICBpZiAoIWdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCh2bSwgY29k
ZUJsb2NrLCBzdHViSW5mbywgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIHNs
b3dDYXNlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHN0
dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplKys7Ci0gICAgICAgIAotICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQ
Uik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpOwotI2VuZGlm
Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LnBhdGNoLnZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBUZW1wUmVnaXN0
ZXJTZXQoc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgICAg
ICAKLSAgICAgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAg
IAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVjdCA9IGJyYW5jaFN0cnVj
dHVyZShzdHViSml0LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIAotICAgICAgICAgICAgc3RydWN0dXJlKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFRoZSBzdHJhdGVneSB3ZSB1c2UgZm9yIHN0dWJzIGlzIGFzIGZvbGxvd3M6Ci0gICAg
ICAgIC8vIDEpIENhbGwgREZHIGhlbHBlciB0aGF0IGNhbGxzIHRoZSBnZXR0ZXIuCi0gICAgICAg
IC8vIDIpIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBleGNlcHRpb24sIGFuZCBpZiB0aGVyZSB3YXMs
IGNhbGwgeWV0IGFub3RoZXIKLSAgICAgICAgLy8gICAgaGVscGVyLgotICAgICAgICAKLSAgICAg
ICAgYm9vbCBpc0RpcmVjdCA9IGZhbHNlOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBv
cGVyYXRpb25DYWxsOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBoYW5kbGVyQ2FsbDsK
LSAgICAgICAgRnVuY3Rpb25QdHIgb3BlcmF0aW9uRnVuY3Rpb247Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZUdldHRlcigpIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgY29kZSBzaG91bGRuJ3QgYmUgYXNzdW1pbmcgdGhhdCB0aGUgdG9wIG9m
IHN0YWNrIGlzIHNldCB1cCBmb3IgSlNDCi0gICAgICAgICAgICAvLyBKSVQtc3R5bGUgQyBjYWxs
cywgc2luY2Ugd2UgbWF5IGJlIGN1cnJlbnRseSBvbiB0b3Agb2YgYW4gRlRMIGZyYW1lLgotICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTcx
MQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigp
KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VHUFIgIT0gc2NyYXRjaEdQUik7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7Ci0jZW5kaWYKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsK
LSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSwgc2NyYXRjaEdQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25D
YWxsR2V0dGVyOwotICAgICAgICAgICAgfSBlbHNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICAgICAgICAgIC8vIEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUq
LCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKTsKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShiYXNlR1BSLCBiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihpZGVudC5p
bXBsKCkpKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYmFzZUdQUiwgYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoaWRlbnQu
aW1wbCgpKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IEZ1
bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMg
Y2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQotICAgICAgICAgICAg
Ly8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZyb20uIEl0IGp1c3Qgc28gaGFwcGVucyB0byBiZSB0
aGUgcGxhY2UgdGhhdCB3ZSBhcmUgYXQKLSAgICAgICAgICAgIC8vIHJpZ2h0IG5vdyEKLSAgICAg
ICAgICAgIHN0dWJKaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKGV4ZWMtPmxvY2F0aW9uQXNSYXdCaXRzKCkpLAotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFj
azo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHMocmVz
dWx0R1BSLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgICAgICBzdWNjZXNzID0gc3R1
YkppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNo
ZWNrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50cyhD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7Ci0gICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICAg
ICAgc3R1YkppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKGJhc2VH
UFIgPT0gcmVzdWx0VGFnR1BSKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hl
ZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICAgICAgfQot
I2VuZGlmCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAg
ICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7Ci0jZWxz
ZQotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1
bHRUYWdHUFIpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSwgcmVzdWx0R1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAg
c3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICAgICAgaXNEaXJlY3QgPSB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0
LCBjb2RlQmxvY2spOwotICAgICAgICAKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayh3cm9uZ1N0
cnVjdCwgc2xvd0Nhc2UpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvRG9uZSkpOwotICAgICAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvbkZ1bmN0aW9uKTsKLSAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0
dWJSb3V0aW5lID0KLSAgICAgICAgICAgIGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICAg
ICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAotICAgICAgICAgICAgICAgICAgICBleGVjLT5jb2Rl
QmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICgiR2V0QnlJZCBwb2x5
bW9ycGhpYyBsaXN0IGFjY2VzcyBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJl
c3MoKSkpLAotICAgICAgICAgICAgICAgICp2bSwKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVHZXR0
ZXIoKSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpOwotICAgICAgICAKLSAgICAgICAgcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwot
ICAgICAgICAKLSAgICAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBzdHViUm91dGluZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Ci0gICAgfQotICAgIAotICAgIGlmIChiYXNl
VmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5
Q2FjaGluZygpCi0gICAgICAgIHx8IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmlz
RGljdGlvbmFyeSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCiAgICAgaWYgKCFzdHVi
SW5mby5wYXRjaC5yZWdpc3RlcnNGbHVzaGVkKSB7CiAgICAgICAgIC8vIFdlIGNhbm5vdCBkbyBh
cyBtdWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCBw
cmlvciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCiAgICAgICAgIC8vIG5vbi1WYWx1
ZSBjYWNoZWQgcHJvcGVydGllcyByZXF1aXJlIHBsYW50aW5nIGNhbGxzLCB3aGljaCByZXF1aXJl
cyByZWdpc3RlcnMgdG8gaGF2ZSBiZWVuIGZsdXNoZWQuIFRodXMsCkBAIC03MTAsMzQgKzUyMCwz
NSBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQcm90
b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2VWYWx1ZSwgc2xvdC5zbG90QmFzZSgp
LCBpZGVudCwgb2Zmc2V0KTsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgIFN0cnVjdHVyZUNo
YWluKiBwcm90b3R5cGVDaGFpbiA9IDA7CisgICAgc2l6ZV90IGNvdW50ID0gMDsKICAgICAKLSAg
ICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dDsKLSAgICBpbnQgbGlzdEluZGV4OwotICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlOwot
ICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc2xvd0Nhc2UpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0
Lmxpc3RTaXplKys7CisgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKKyAg
ICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkucHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nKCkKKyAgICAgICAgICAgIHx8IGJhc2VWYWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNo
YWluQWNjZXNzKAorICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNlKCks
IGlkZW50LCBvZmZzZXQpOworICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNo
YWluKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAKLSAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3Qq
IGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKHN0dWJJbmZvKTsKICAgICAKLSAg
ICBpZiAoZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzbG90LCBpZGVudCwgc3R1
YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsCisgICAgZ2Vu
ZXJhdGVHZXRCeUlkU3R1YigKKyAgICAgICAgZXhlYywgc2xvdCwgaWRlbnQsIHN0dWJJbmZvLCBw
cm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLAogICAgICAgICBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0RvbmUpLAotICAgICAgICBzbG93Q2FzZSwgc3R1YlJvdXRpbmUpID09IFByb3RvQ2hhaW5H
ZW5lcmF0aW9uRmFpbGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwgc3R1YlJvdXRpbmUpOwog
ICAgIAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUs
IHByb3RvdHlwZUNoYWluLCBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSwgY291bnQpOworICAgIGxp
c3QtPmFkZEFjY2VzcyhHZXRCeUlkQWNjZXNzKAorICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpID8gU2ltcGxlU3R1YiA6IEdl
dHRlciwKKyAgICAgICAgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQpKTsKICAgICAK
ICAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJSb3V0
aW5lLmdldCgpKTsKICAgICAKLSAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJ
U1RfQ0FDSEVfU0laRSAtIDEpOworICAgIHJldHVybiAhbGlzdC0+aXNGdWxsKCk7CiB9CiAKIHZv
aWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQpAQCAtMTI0Niw3ICsxMDU3LDcgQEAgc3RhdGlj
IGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBNb2dyaWZ5
IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCiAgICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBo
aWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Ci0gICAgICAgICAgICAKKwog
ICAgICAgICAgICAgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgICAgIGV4ZWMs
IGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwKICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226369</attachid>
            <date>2014-03-10 19:24:45 -0700</date>
            <delta_ts>2014-03-10 20:07:59 -0700</delta_ts>
            <desc>it compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>51195</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY1NDIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDE0LTAzLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2V0QnlJZCBsaXN0IGNhY2hpbmcgc2hvdWxkIHVzZSBzb21ldGhpbmcgb2JqZWN0LW9yaWVudGVk
IHJhdGhlciB0aGFuIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5Nzc4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBbHNvIGRlZHVwbGlj
YXRlIHRoZSBHZXRCeUlkIGdldHRlciBjYWxsIGNhY2hpbmcuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVT
dGF0dXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAo
SlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6R2V0
QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6
On5HZXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVj
dHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKToK
KyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6UG9seW1vcnBoaWNHZXRCeUlk
TGlzdCk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20pOgorICAg
ICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNHZXRCeUlkTGlz
dCk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyk6Cisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzRnVsbCk6CisgICAgICAgIChK
U0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCk6CisgICAgICAgIChKU0M6
OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRjaGluZyk6CisgICAgICAgIChKU0M6
OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2Vhayk6CisgICAgICAgICogYnl0ZWNvZGUv
UG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFj
Y2Vzczo6R2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmlzU2V0
KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZEFjY2Vzczo6dHlwZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmNoYWluKToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZEFjY2Vzczo6Y2hhaW5Db3VudCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRB
Y2Nlc3M6OnN0dWJSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6ZG9lc0Nh
bGxzKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQ
YXRoVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNFbXB0
eSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnNpemUpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphdCk6CisgICAgICAgIChKU0M6OlBvbHlt
b3JwaGljR2V0QnlJZExpc3Q6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmRlcmVm
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMp
OgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6
OmlzR2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0
R2V0QnlJZExpc3QpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6
Z2VuZXJhdGVHZXRCeUlkU3R1Yik6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJRCk6Cisg
ICAgICAgIChKU0M6OnBhdGNoSnVtcFRvR2V0QnlJZFN0dWIpOgorICAgICAgICAoSlNDOjp0cnlC
dWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisK
IDIwMTQtMDMtMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXBhdGNoIHNob3VsZCBzYXZlIGFuZCByZXN0b3JlIGFsbCB1c2VkIHJlZ2lzdGVycyAtIG5vdCBq
dXN0IHRlbXAgb25lcyAtIHdoZW4gbWFraW5nIGEgY2FsbApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE2NDk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzMsNiArMjczLDggQEAKIAkJMEY0ODUzMkExODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292
ZXJ5T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ4NTMyNjE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBD
QUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJj
ZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVk
QXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjRDRUQ1RTE4
Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJG
RTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgKi87IH07CisJCTBGNENFRDVGMThDRUE3
QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyog
UG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3Rh
dGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjRGMjlFMDE4
QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURF
MThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NTU0MUIxMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU1NDFBRjE2MTNDMUZCMDBDRTNF
MjUgLyogU3BlY2lhbFBvaW50ZXIuY3BwICovOyB9OwpAQCAtMTc3Niw2ICsxNzc4LDggQEAKIAkJ
MEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFJlY292ZXJ5T3Bjb2RlLmg7IHBhdGggPSBmdGwv
RlRMUmVjb3ZlcnlPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNB
RjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNENFRDVDMThDRUE3QUIwMDgwMkZF
MCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOUREMThCNkFE
MUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRG
MjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9u
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1
NDFBRjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlY2lhbFBvaW50ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNDU2OSw3ICs0NTczLDYgQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAw
RjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKLQkJCQk2NTI5RkIzMTE4QjJEOTk5MDBDNjExMDIgLyogQnl0ZWNvZGVMaXN0Lmpzb24g
Ki8sCiAJCQkJMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2Zp
bGUuY3BwICovLAogCQkJCTBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggKi8sCiAJCQkJMEY2Mzk0NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJv
ZmlsZS5jcHAgKi8sCkBAIC00NTc3LDYgKzQ1ODAsNyBAQAogCQkJCUMyRkNBRTBDMTdBOUMyNEUw
MDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovLAogCQkJCUMyRkNBRTBEMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLywKIAkJCQkwRjIxQzI3RTE0QkVB
QTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovLAorCQkJCTY1MjlGQjMxMThC
MkQ5OTkwMEM2MTEwMiAvKiBCeXRlY29kZUxpc3QuanNvbiAqLywKIAkJCQlDMkZDQUUwRTE3QTlD
MjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLywKIAkJCQlDMkZD
QUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8sCiAJ
CQkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXMuaCAqLywKQEAgLTQ2MzMsNiArNDYzNyw4IEBACiAJCQkJMEYyQkRDMkIxNTFGREU4QjAw
Q0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8sCiAJCQkJQTcwNDQ3RTkxN0EwQkQ0NjAwRjU4OThFIC8q
IE9wZXJhbmRzSW5saW5lcy5oICovLAogCQkJCTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLywKKwkJCQkwRjRDRUQ1QzE4Q0VBN0FC
MDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgKi8sCisJCQkJMEY0Q0VENUQx
OENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLywKIAkJCQkwRjlG
QzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8sCiAJ
CQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAq
LywKIAkJCQkwRjk4MjA1RDE2QkZFMzdGMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNw
cCAqLywKQEAgLTUwODEsNiArNTA4Nyw3IEBACiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQy
IC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0
QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xk
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNENFRDVGMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFRTE3MTc4RTcz
MDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3OEE5NzdCMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmggaW4gSGVhZGVycyAqLywKQEAg
LTY0OTcsNiArNjUwNCw3IEBACiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50
VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUNEMTgwNUU3NTUwMDQ3MkNFNCAv
KiBMTFZNQVBJLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVBQjM3MTc5OUU0QjIwMEQyODMz
RCAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNENFRDVFMThD
RUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1hY2hp
bmVTdGFja01hcmtlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNjQ5NzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUg
Ikxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJ
ZExpc3QuaCIKICNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCiAjaW5jbHVkZSAiUmVwYXRj
aC5oIgpAQCAtMzQxLDggKzM0Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNo
ZVN0YXR1cygKICAgICAgICAgICAgIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IDA7CiAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgICAgICBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSAwOwotICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0ID0gMDsKLSAgICAgICAgICAgIGludCBsaXN0U2l6
ZSA9IDA7CisgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CiAg
ICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKQEAgLTM1NCwxMCArMzU0LDkg
QEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAg
ICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpOwogICAgICAgICAgICAgICAgIGNoYWluID0gc3R1YkluZm8udS5nZXRCeUlk
Q2hhaW4uY2hhaW4uZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OgotICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoInNlbGZfbGlzdCIpOwotICAgICAgICAgICAgICAgIHN0cnVjdHVyZUxpc3QgPSBzdHViSW5m
by51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgICAgIGxpc3RT
aXplID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemU7CisgICAgICAgICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJs
aXN0Iik7CisgICAgICAgICAgICAgICAgbGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlz
dDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgYWNjZXNzX3Vuc2V0
OgogICAgICAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7CkBAIC0zODIsMTYgKzM4MSwx
NiBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAg
ICAgICAgZHVtcENoYWluKG91dCwgZXhlYywgY2hhaW4sIGlkZW50KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZUxpc3QpIHsKLSAgICAgICAg
ICAgICAgICBvdXQucHJpbnRmKCIsIGxpc3QgPSAlcDogWyIsIHN0cnVjdHVyZUxpc3QpOwotICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgeworICAgICAg
ICAgICAgaWYgKGxpc3QpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsIGxpc3QgPSAl
cDogWyIsIGxpc3QpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
aXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7CiAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludGYoIigiKTsKLSAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJi
YXNlIiwgZXhlYywgc3RydWN0dXJlTGlzdC0+bGlzdFtpXS5iYXNlLmdldCgpLCBpZGVudCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLmNoYWluLmdldCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIsIGV4ZWMs
IGxpc3QtPmF0KGkpLnN0cnVjdHVyZSgpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChsaXN0LT5hdChpKS5jaGFpbigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgZXhlYywg
c3RydWN0dXJlTGlzdC0+bGlzdFtpXS5jaGFpbi5nZXQoKSwgaWRlbnQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZHVtcENoYWluKG91dCwgZXhlYywgbGlzdC0+YXQoaSkuY2hhaW4oKSwgaWRl
bnQpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoIikiKTsKICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNjQ5NzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDEwICsyNywxMSBAQAogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKIAog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU1Njb3BlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJ
bnRlcnByZXRlci5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMTY2LDEzICsxNjcsMTEgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yUwogICAgIGlmIChzdHViSW5mby0+cmVzZXRCeUdDKQogICAgICAgICByZXR1
cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKIAotICAgIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCogbGlzdCA9IDA7Ci0gICAgaW50IGxpc3RTaXplID0gMDsKLSAg
ICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3Qp
IHsKLSAgICAgICAgbGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVM
aXN0OwotICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmTGlzdC5saXN0
U2l6ZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoIWxpc3QtPmxpc3RbaV0uaXNEaXJlY3QpCisgICAgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdCogbGlzdCA9IDA7CisgICAgaWYgKHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfbGlzdCkgeworICAgICAgICBsaXN0ID0gc3R1YkluZm8tPnUuZ2V0QnlJZExp
c3QubGlzdDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBpZiAobGlzdC0+YXQoaSkuZG9lc0NhbGxzKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTWFrZXNDYWxscywgdHJ1ZSk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yMDYsMTggKzIwNSwxOCBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAK
LSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OiB7Ci0gICAgICAgIGZvciAoaW50
IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3RTaXplOyArK2xpc3RJbmRleCkgewotICAg
ICAgICAgICAgQVNTRVJUKGxpc3QtPmxpc3RbbGlzdEluZGV4XS5pc0RpcmVjdCk7CisgICAgY2Fz
ZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsaXN0SW5k
ZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbGlzdEluZGV4KSB7CisgICAgICAg
ICAgICBBU1NFUlQoIWxpc3QtPmF0KGxpc3RJbmRleCkuZG9lc0NhbGxzKCkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmxpc3RbbGlzdElu
ZGV4XS5iYXNlLmdldCgpOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0
LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+
dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKGxpc3QtPmxpc3RbbGlzdEluZGV4XS5jaGFpbi5nZXQoKSkgeworICAg
ICAgICAgICAgaWYgKGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW4oKSkgewogICAgICAgICAgICAg
ICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2Nr
LCBzdHJ1Y3R1cmUsIGxpc3QtPmxpc3RbbGlzdEluZGV4XS5jaGFpbi5nZXQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgbGlzdC0+bGlzdFtsaXN0SW5kZXhdLmNvdW50KSk7CisgICAgICAgICAgICAg
ICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFp
bigpLAorICAgICAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluQ291bnQo
KSkpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmNvbXB1dGVGb3JDaGFpbihwcm9maWxl
ZEJsb2NrLCB1aWQsIGNoYWluKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5j
bHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAorICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZSwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLCB1bnNpZ25lZCBjaGFpbkNvdW50KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX2No
YWluQ291bnQoY2hhaW5Db3VudCkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0
dXJlKQorICAgICwgbV9jaGFpbih2bSwgb3duZXIsIGNoYWluKQorICAgICwgbV9zdHViUm91dGlu
ZShzdHViUm91dGluZSkKK3sKK30KKworR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQor
eworfQorCitHZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGluaXRpYWxTbG93UGF0aCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOworICAg
IAorICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0OworICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8u
YWNjZXNzVHlwZSkgeworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgorICAgICAgICBy
ZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOworICAgICAgICByZXN1bHQubV9zdHJ1Y3R1cmUu
Y29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAg
ICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1h
bmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46CisgICAgICAgIHJlc3VsdC5tX3N0cnVj
dHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJl
KTsKKyAgICAgICAgcmVzdWx0Lm1fY2hhaW4uY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkQ2hh
aW4uY2hhaW4pOworICAgICAgICByZXN1bHQubV9jaGFpbkNvdW50ID0gc3R1YkluZm8udS5nZXRC
eUlkQ2hhaW4uY291bnQ7CisgICAgICAgIGlmIChzdHViSW5mby51LmdldEJ5SWRDaGFpbi5pc0Rp
cmVjdCkgeworICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZVN0dWI7CisgICAgICAg
ICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFu
YWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHJlc3VsdC5tX3R5cGUgPSBHZXR0ZXI7CisgICAgICAgICAgICByZXN1bHQubV9zdHViUm91
dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEdldEJ5SWRB
Y2Nlc3M6OnZpc2l0V2VhaygpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFw
Ojppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUG9seW1vcnBoaWNHZXRCeUlk
TGlzdDo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgbV9saXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3Ry
dWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdCog
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0
KQorICAgICAgICByZXR1cm4gc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0OworICAgIAorICAg
IEFTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgorICAg
ICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4p
OworICAgIAorICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KHN0dWJJbmZvKTsKKyAgICAKKyAgICBzdHViSW5mby5pbml0R2V0QnlJ
ZExpc3QocmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpIHsgfQorCit2b2lkIFBvbHlt
b3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3Mp
Cit7CisgICAgQVNTRVJUKCFpc0Z1bGwoKSk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJl
c2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5yZXNpemUo
bV9saXN0LnNpemUoKSArIDEpOworICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7Cit9CisKK2Jv
b2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
c2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJuIHNpemUo
KSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2l6ZSgpIDw9
IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OmRpZFNlbGZQYXRjaGluZygpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJZEFjY2Vz
czo6U2ltcGxlSW5saW5lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWso
KSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgeworICAgICAg
ICBpZiAoIWF0KGkpLnZpc2l0V2VhaygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBFTkFCTEUoSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKyNk
ZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5j
bHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVk
ZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworc3RydWN0IFN0cnVj
dHVyZVN0dWJJbmZvOworCitjbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3B1YmxpYzoKKyAgICBlbnVt
IEFjY2Vzc1R5cGUgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBTaW1wbGVJbmxpbmUsIC8v
IFRoaXMgaXMgdGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KKyAgICAgICAgU2ltcGxlU3R1Yiwg
Ly8gVGhpcyBpcyBhIHN0dWIuCisgICAgICAgIEdldHRlciwKKyAgICB9OworICAgIAorICAgIEdl
dEJ5SWRBY2Nlc3MoKQorICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorICAgICAgICAsIG1fY2hh
aW5Db3VudCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgR2V0QnlJZEFjY2VzcygKKyAgICAg
ICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiwgU3RydWN0dXJlKiwKKyAgICAgICAgU3RydWN0dXJlQ2hhaW4qID0gMCwgdW5zaWduZWQg
Y2hhaW5Db3VudCA9IDApOworICAgIAorICAgIH5HZXRCeUlkQWNjZXNzKCk7CisgICAgCisgICAg
c3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJ
bmZvJik7CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJ
bnZhbGlkOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsg
fQorICAgIAorICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQor
ICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1
cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJl
dHVybiBtX2NoYWluLmdldCgpOyB9CisgICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2hhaW5Db3VudDsgfQorICAgIAorICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91
dGluZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJl
dHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgIH0KKyAgICAKKyAgICBib29sIGRvZXNDYWxs
cygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXI7IH0KKyAgICAKKyAgICBib29sIHZp
c2l0V2VhaygpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7
CisgICAgCisgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgdW5zaWduZWQgbV9jaGFpbkNvdW50
OworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IG1fc3R1YlJvdXRpbmU7Cit9OworCitjbGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAvLyBFaXRoZXIgY3JlYXRl
cyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMg
YWxyZWFkeSBpbgorICAgIC8vIHBsYWNlLgorICAgIHN0YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgflBvbHltb3JwaGljR2V0
QnlJZExpc3QoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3VycmVudFNsb3dQ
YXRoVGFyZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0
dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkQWNj
ZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAgICBib29sIGlzRnVsbCgpIGNvbnN0OworICAg
IGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQg
d291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEdldEJ5SWRB
Y2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9
CisgICAgCisgICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBvZiB0
aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPworICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKCkgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAKKyAgICBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgVmVj
dG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJZExp
c3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDE2NDk3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3
LDE4ICsyNywxNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRl
ICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKICNpbmNs
dWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCiAKLQogbmFtZXNwYWNlIEpTQyB7CiAKICNp
ZiBFTkFCTEUoSklUKQogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogewogICAgIHN3
aXRjaCAoYWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3Q6
IHsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0
cnVjdHVyZXMgPSB1LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBkZWxl
dGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzOworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9saXN0
OiB7CisgICAgICAgIGRlbGV0ZSB1LmdldEJ5SWRMaXN0Lmxpc3Q7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6CkBAIC03NCw5ICs3Myw4IEBA
IGJvb2wgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICAgICAgICAgIHx8
ICFIZWFwOjppc01hcmtlZCh1LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9zZWxmX2xpc3Q6IHsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBw
b2x5bW9ycGhpY1N0cnVjdHVyZXMgPSB1LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0Owot
ICAgICAgICBpZiAoIXBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRXZWFrKHUuZ2V0QnlJZFNl
bGZMaXN0Lmxpc3RTaXplKSkKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogeworICAg
ICAgICBpZiAoIXUuZ2V0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAx
NjQ5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTIgKzQxLDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAjaWYgRU5BQkxFKEpJVCkKIAorY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDsKIGNsYXNz
IFBvbHltb3JwaGljUHV0QnlJZExpc3Q7CiAKIGVudW0gQWNjZXNzVHlwZSB7CiAgICAgYWNjZXNz
X2dldF9ieV9pZF9zZWxmLAogICAgIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4sCi0gICAgYWNjZXNz
X2dldF9ieV9pZF9zZWxmX2xpc3QsCisgICAgYWNjZXNzX2dldF9ieV9pZF9saXN0LAogICAgIGFj
Y2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwsCiAgICAgYWNjZXNzX3B1dF9ieV9pZF90
cmFuc2l0aW9uX2RpcmVjdCwKICAgICBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2UsCkBAIC02MCw3
ICs2MSw3IEBAIGlubGluZSBib29sIGlzR2V0QnlJZEFjY2VzcyhBY2Nlc3NUeXBlIGEKICAgICBz
d2l0Y2ggKGFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGZfbGlzdDoKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE1LDEz
ICsxMTYsMTAgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgdS5nZXRCeUlk
Q2hhaW4uaXNEaXJlY3QgPSBpc0RpcmVjdDsKICAgICB9CiAKLSAgICB2b2lkIGluaXRHZXRCeUlk
U2VsZkxpc3QoUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0LCBp
bnQgbGlzdFNpemUsIGJvb2wgZGlkU2VsZlBhdGNoaW5nID0gZmFsc2UpCisgICAgdm9pZCBpbml0
R2V0QnlJZExpc3QoUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCkKICAgICB7Ci0gICAgICAg
IGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdDsKLQotICAgICAgICB1Lmdl
dEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0ID0gc3RydWN0dXJlTGlzdDsKLSAgICAgICAgdS5n
ZXRCeUlkU2VsZkxpc3QubGlzdFNpemUgPSBsaXN0U2l6ZTsKLSAgICAgICAgdS5nZXRCeUlkU2Vs
Zkxpc3QuZGlkU2VsZlBhdGNoaW5nID0gZGlkU2VsZlBhdGNoaW5nOworICAgICAgICBhY2Nlc3NU
eXBlID0gYWNjZXNzX2dldF9ieV9pZF9saXN0OworICAgICAgICB1LmdldEJ5SWRMaXN0Lmxpc3Qg
PSBsaXN0OwogICAgIH0KIAogICAgIC8vIFB1dEJ5SWQqCkBAIC0yMzIsMTQgKzIzMCw4IEBAIHN0
cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgICAgICBib29sIGlzRGlyZWN0IDogMTsK
ICAgICAgICAgfSBnZXRCeUlkQ2hhaW47CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgICAg
ICBpbnQgbGlzdFNpemUgOiAzMTsKLSAgICAgICAgICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5nIDog
MTsKLSAgICAgICAgfSBnZXRCeUlkU2VsZkxpc3Q7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAg
ICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHN0cnVjdHVyZUxpc3Q7Ci0gICAg
ICAgICAgICBpbnQgbGlzdFNpemU7Ci0gICAgICAgIH0gZ2V0QnlJZFByb3RvTGlzdDsKKyAgICAg
ICAgICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7CisgICAgICAgIH0gZ2V0QnlJZExp
c3Q7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gcHJldmlvdXNTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0
cnVjdHVyZT4gc3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAxNjQ5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSklUSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlBvbHltb3Jw
aGljUHV0QnlJZExpc3QuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAi
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCkBAIC0yMTksMTMgKzIyMCwxMSBAQCBzdGF0aWMg
dm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlCiAgICAgbGlua1Jlc3RvcmVTY3JhdGNo
KHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVy
ZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKLWVu
dW0gUHJvdG9DaGFpbkdlbmVyYXRpb25SZXN1bHQgewotICAgIFByb3RvQ2hhaW5HZW5lcmF0aW9u
RmFpbGVkLAotICAgIFByb3RvQ2hhaW5HZW5lcmF0aW9uU3VjY2VlZGVkCi19OwotCi1zdGF0aWMg
UHJvdG9DaGFpbkdlbmVyYXRpb25SZXN1bHQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihF
eGVjU3RhdGUqLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBjb25zdCBJZGVudGlmaWVyJiwgU3RydWN0
dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVfdCwgUHJvcGVydHlPZmZzZXQsIFN0
cnVjdHVyZSosIENvZGVMb2NhdGlvbkxhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCwgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLXN0YXRpYyBQcm90b0NoYWluR2Vu
ZXJhdGlvblJlc3VsdCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBz
aXplX3QgY291bnQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCitzdGF0aWMgdm9p
ZCBnZW5lcmF0ZUdldEJ5SWRTdHViKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsCisgICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3Vu
dCwKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2Rl
TG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwpAQCAtMjM1LDggKzIzNCw3IEBAIHN0YXRpYyBQ
cm90b0NoYWluR2VuZXJhdGlvblJlc3VsdCBnZW5lcmEKICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7CiAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBUZW1wUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVy
cykuZ2V0RnJlZUdQUigpOwogICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBzY3JhdGNo
R1BSID09IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoICYmICFz
bG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIFByb3RvQ2hhaW5HZW5lcmF0
aW9uRmFpbGVkOworICAgIFJFTEVBU0VfQVNTRVJUKCFuZWVkVG9SZXN0b3JlU2NyYXRjaCB8fCBz
bG90LmlzQ2FjaGVhYmxlVmFsdWUoKSk7CiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQo
JmV4ZWMtPnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpKTsKICAgICBpZiAobmVlZFRvUmVzdG9yZVNj
cmF0Y2gpIHsKQEAgLTI2MSw0MSArMjU5LDQyIEBAIHN0YXRpYyBQcm90b0NoYWluR2VuZXJhdGlv
blJlc3VsdCBnZW5lcmEKICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVBy
b3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsK
IAogICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwogICAgIEpTT2JqZWN0KiBwcm90
b09iamVjdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsr
aXQpIHsKLSAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90
b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0dXJl
ID0gcHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpOwotICAgICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAg
ICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1l
LCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgICAgICBhZGRTdHJ1Y3R1
cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICBwcm90b09iamVjdCwgcHJvdG9TdHJ1Y3R1
cmUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICBmYWlsdXJlQ2Fz
ZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOworICAg
IGlmIChjaGFpbikgeworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFp
bi0+aGVhZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwg
KytpdCkgeworICAgICAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJl
LT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOworICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90
b1N0cnVjdHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIGlmIChw
cm90b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2lu
dHMoKSkKKyAgICAgICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJv
cGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwor
ICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAgICAgICAg
IHByb3RvT2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1Ykpp
dCwKKyAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICBib29sIGlzQWNjZXNzb3IgPSBzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkgfHwgc2xvdC5pc0Nh
Y2hlYWJsZUN1c3RvbSgpOwotICAgIGlmIChpc0FjY2Vzc29yKQotICAgICAgICBzdHViSml0Lm1v
dmUoYmFzZUdQUiwgc2NyYXRjaEdQUik7Ci0KKyAgICAKKyAgICBHUFJSZWcgYmFzZUZvckFjY2Vz
c0dQUjsKKyAgICBpZiAoY2hhaW4pIHsKKyAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0KSwgc2NyYXRjaEdQUik7CisgICAgICAgIGJh
c2VGb3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOworICAgIH0gZWxzZQorICAgICAgICBiYXNlRm9y
QWNjZXNzR1BSID0gYmFzZUdQUjsKKyAgICAKICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSkgewotICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkgewotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0LmxvYWQ2NChwcm90b09iamVjdC0+bG9jYXRp
b25Gb3JPZmZzZXQob2Zmc2V0KSwgcmVzdWx0R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
Ci0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
cHJvdG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkpLCByZXN1bHRHUFIpOwotICAg
ICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCBy
ZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKLSNlbmRpZgotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0LT5idXR0ZXJmbHlBZGRy
ZXNzKCksIHJlc3VsdEdQUik7CisgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkg
eworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VGb3JBY2Nlc3NHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gcmVzdWx0R1BSOworICAgICAgICB9Cisg
ICAgICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0LmxvYWQ2NChN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNl
dCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7Ci0jZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRl
cmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUZv
ckFjY2Vzc0dQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSksIHJlc3VsdEdQUik7Cisj
ZWxzZQorICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
Rm9yQWNjZXNzR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgVGFnT2Zmc2V0KSwg
cmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFBh
eWxvYWRPZmZzZXQpLCByZXN1bHRHUFIpOwogI2VuZGlmCi0gICAgICAgIH0KICAgICB9CiAKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsOwpAQCAtMzA0LDE0ICszMDMsMTQg
QEAgc3RhdGljIFByb3RvQ2hhaW5HZW5lcmF0aW9uUmVzdWx0IGdlbmVyYQogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7CiAgICAgaWYgKGlzQWNjZXNzb3IpIHsKICAgICAg
ICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkgewotICAgICAgICAgICAgc3R1YkppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIHJlc3Vs
dEdQUik7CiAgICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IG9wZXJhdGlvbkNhbGxHZXR0
ZXI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBFbmNvZGVkSlNWYWx1ZSAoKkdl
dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
ICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0KSwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOworICAgICAgICAgICAgc3R1YkppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOwogI2Vsc2UK
LSAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0KSwgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOworICAgICAgICAgICAgc3R1YkppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOwogI2VuZGlmCiAgICAgICAg
ICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkp
OwogICAgICAgICB9CkBAIC0zNTEsNyArMzUwLDYgQEAgc3RhdGljIFByb3RvQ2hhaW5HZW5lcmF0
aW9uUmVzdWx0IGdlbmVyYQogICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIs
CiAgICAgICAgICgiUHJvdG90eXBlIGNoYWluIGFjY2VzcyBzdHViIGZvciAlcywgcmV0dXJuIHBv
aW50ICVwIiwKICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEo
KSwgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICByZXR1cm4gUHJvdG9D
aGFpbkdlbmVyYXRpb25TdWNjZWVkZWQ7CiB9CiAKIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJ
RChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQpAQCAtNDYzLDEwICs0NjEsMTIgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRC
eUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBTdHJ1Y3R1cmVD
aGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwot
ICAgIGlmIChnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHNsb3QsIHByb3BlcnR5
TmFtZSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LAotICAgICAgICBz
dHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCi0gICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
LCBzdHViSW5mby5zdHViUm91dGluZSkgPT0gUHJvdG9DaGFpbkdlbmVyYXRpb25GYWlsZWQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBnZW5lcmF0ZUdldEJ5SWRTdHViKAorICAgICAgICBl
eGVjLCBzbG90LCBwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQs
IG9mZnNldCwKKyAgICAgICAgc3RydWN0dXJlLAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAor
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRp
bmUpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwog
ICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwpAQCAtNDg1LDQ5ICs0ODUsMTEgQEAgdm9pZCByZXBh
dGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgICAgICByZXBhdGNoQ2FsbChleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRC
eUlkKTsKIH0KIAotc3RhdGljIGJvb2wgZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KAotICAg
IFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqJiBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QsIGludCYgbGlzdEluZGV4LAotICAgIENvZGVMb2NhdGlvbkxhYmVsJiBzbG93Q2Fz
ZSkKLXsKLSAgICBzbG93Q2FzZSA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIAotICAgIGlm
IChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgICAg
IHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAw
LCBmYWxzZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9IDA7Ci0gICAgfSBlbHNlIGlmIChzdHViSW5m
by5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2Vk
Um91dGluZShzbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3Qo
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxLCB0cnVlKTsKLSAgICAgICAgbGlzdEluZGV4ID0g
MTsKLSAgICB9IGVsc2UgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9p
ZF9jaGFpbikgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghIXN0dWJJbmZvLnN0dWJSb3V0aW5l
KTsKLSAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9
IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hh
aW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hh
aW4uZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmlzRGlyZWN0LCBzdHViSW5mby51Lmdl
dEJ5SWRDaGFpbi5jb3VudCk7Ci0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNsZWFyKCk7
Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0LCAxLCBmYWxzZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9IDE7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX3NlbGZfbGlzdCk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0
dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGxpc3RJbmRl
eCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplOwotICAgICAgICBzbG93Q2Fz
ZSA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0
SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgfQotICAgIAotICAg
IGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQobGlzdEluZGV4IDwgUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIHZv
aWQgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUpCiB7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGZfbGlzdCk7CisgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nl
c3NfZ2V0X2J5X2lkX2xpc3QpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOwotICAgIGlmIChzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5kaWRTZWxmUGF0Y2hp
bmcpIHsKKyAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0LT5kaWRTZWxmUGF0Y2hp
bmcoKSkgewogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKICAgICAgICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCiAgICAgICAgICAgICAgICAgc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKQEAgLTU1MCwxNTggKzUxMiw2IEBAIHN0YXRp
YyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICBKU0NlbGwqIGJhc2VDZWxs
ID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNl
bGwtPnN0cnVjdHVyZSgpOwogICAgIAotICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlKSB7Ci0gICAgICAgIGlmICghc3R1YkluZm8ucGF0Y2gucmVnaXN0ZXJzRmx1c2hlZCkgewot
ICAgICAgICAgICAgLy8gV2UgY2Fubm90IGRvIGFzIG11Y2ggaW5saW5lIGNhY2hpbmcgaWYgdGhl
IHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkIHByaW9yIHRvIHRoaXMgR2V0QnlJZC4gSW4gcGFy
dGljdWxhciwKLSAgICAgICAgICAgIC8vIG5vbi1WYWx1ZSBjYWNoZWQgcHJvcGVydGllcyByZXF1
aXJlIHBsYW50aW5nIGNhbGxzLCB3aGljaCByZXF1aXJlcyByZWdpc3RlcnMgdG8gaGF2ZSBiZWVu
IGZsdXNoZWQuIFRodXMsCi0gICAgICAgICAgICAvLyBpZiByZWdpc3RlcnMgd2VyZSBub3QgZmx1
c2hlZCwgZG9uJ3QgZG8gbm9uLVZhbHVlIGNhY2hpbmcuCi0gICAgICAgICAgICBpZiAoIXNsb3Qu
aXNDYWNoZWFibGVWYWx1ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgIAotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdDsKLSAgICAgICAgaW50IGxpc3RJbmRleDsKLSAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2U7Ci0KLSAgICAgICAgaWYgKCFnZXRQb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3Qodm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdCwgbGlzdEluZGV4LCBzbG93Q2FzZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIAotICAgICAgICBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSsrOwot
ICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0
dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEdQ
UlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZh
bHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7Ci0gICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdl
dEZyZWVHUFIoKTsKLSAgICAgICAgCi0gICAgICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBj
b2RlQmxvY2spOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdT
dHJ1Y3QgPSBicmFuY2hTdHJ1Y3R1cmUoc3R1YkppdCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIHN0cnVjdHVy
ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgc3RyYXRlZ3kgd2UgdXNlIGZvciBzdHVicyBp
cyBhcyBmb2xsb3dzOgotICAgICAgICAvLyAxKSBDYWxsIERGRyBoZWxwZXIgdGhhdCBjYWxscyB0
aGUgZ2V0dGVyLgotICAgICAgICAvLyAyKSBDaGVjayBpZiB0aGVyZSB3YXMgYW4gZXhjZXB0aW9u
LCBhbmQgaWYgdGhlcmUgd2FzLCBjYWxsIHlldCBhbm90aGVyCi0gICAgICAgIC8vICAgIGhlbHBl
ci4KLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxzZTsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgaGFuZGxlckNhbGw7Ci0gICAgICAgIEZ1bmN0aW9uUHRyIG9wZXJhdGlvbkZ1bmN0aW9u
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOwotICAgICAgICAKLSAgICAg
ICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2hvdWxkbid0IGJlIGFzc3Vt
aW5nIHRoYXQgdGhlIHRvcCBvZiBzdGFjayBpcyBzZXQgdXAgZm9yIEpTQwotICAgICAgICAgICAg
Ly8gSklULXN0eWxlIEMgY2FsbHMsIHNpbmNlIHdlIG1heSBiZSBjdXJyZW50bHkgb24gdG9wIG9m
IGFuIEZUTCBmcmFtZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjU3MTEKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHNsb3Qu
aXNDYWNoZWFibGVHZXR0ZXIoKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChzY3JhdGNoR1BS
ICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlR1BSICE9IHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hl
ZE9mZnNldCgpKSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7Ci0jZWxzZQotICAg
ICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0
Y2hHUFIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSwgc2NyYXRjaEdQUik7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG9wZXJhdGlvbkZ1
bmN0aW9uID0gb3BlcmF0aW9uQ2FsbEdldHRlcjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICAvLyBFbmNvZGVkSlNWYWx1ZSAoKkdldFZh
bHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIHN0dWJK
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIGJhc2VHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgb3Bl
cmF0aW9uRnVuY3Rpb24gPSBGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUg
dGhhdCB3aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJl
ciB0aGUKLSAgICAgICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLiBJdCBqdXN0
IHNvIGhhcHBlbnMgdG8gYmUgdGhlIHBsYWNlIHRoYXQgd2UgYXJlIGF0Ci0gICAgICAgICAgICAv
LyByaWdodCBub3chCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlMzIoCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihleGVjLT5sb2NhdGlvbkFzUmF3Qml0cygp
KSwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgICAgICBzdHVi
Sml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFt
ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNh
bGwoKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgIHN0dWJK
aXQuc2V0dXBSZXN1bHRzKHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKLSNlbmRpZgotICAgICAg
ICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6
SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJK
aXQuc2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBzdHViSml0
LmNhbGwoKTsKLSAgICAgICAgICAgIHN0dWJKaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBzdHVi
Sml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAg
ICAgICAgICAgIGlmIChiYXNlR1BSID09IHJlc3VsdFRhZ0dQUikgewotICAgICAgICAgICAgICAg
ICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwotICAg
ICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRh
Z0dQUik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwot
ICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkp
LCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9C
YXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgICAg
IGlzRGlyZWN0ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCAmc3R1YkppdCwgY29kZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsod3JvbmdTdHJ1Y3QsIHNsb3dDYXNlKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICAgICAgaWYgKCFpc0RpcmVjdCkg
ewotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25G
dW5jdGlvbik7Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29r
dXBFeGNlcHRpb25IYW5kbGVyKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9Ci0gICAgICAgICAgICBjcmVhdGVKSVRTdHVi
Um91dGluZSgKLSAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFX0ZPUigKLSAgICAgICAgICAg
ICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgICAg
ICAgICAoIkdldEJ5SWQgcG9seW1vcnBoaWMgbGlzdCBhY2Nlc3MgZm9yICVzLCByZXR1cm4gcG9p
bnQgJXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxv
Y2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0Rv
bmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgICAgICAgICAqdm0sCi0gICAgICAg
ICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICBz
bG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKTsKLSAg
ICAgICAgCi0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhd
LnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1
Y3R1cmUsIGlzRGlyZWN0KTsKLSAgICAgICAgCi0gICAgICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0
dWIoY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwotICAgICAgICByZXR1
cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOwotICAgIH0K
LSAgICAKLSAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8o
KS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQotICAgICAgICB8fCBiYXNlVmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAogICAgIGlmICghc3R1YkluZm8ucGF0Y2gucmVnaXN0ZXJzRmx1c2hlZCkgewogICAgICAg
ICAvLyBXZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxpbmUgY2FjaGluZyBpZiB0aGUgcmVnaXN0ZXJz
IHdlcmUgbm90IGZsdXNoZWQgcHJpb3IgdG8gdGhpcyBHZXRCeUlkLiBJbiBwYXJ0aWN1bGFyLAog
ICAgICAgICAvLyBub24tVmFsdWUgY2FjaGVkIHByb3BlcnRpZXMgcmVxdWlyZSBwbGFudGluZyBj
YWxscywgd2hpY2ggcmVxdWlyZXMgcmVnaXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVzaGVkLiBUaHVz
LApAQCAtNzEwLDM0ICs1MjAsMzcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChF
eGVjU3RhdAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLQogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgc2l6ZV90IGNv
dW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlVmFs
dWUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQsIG9mZnNldCk7Ci0gICAgaWYgKGNvdW50ID09IElu
dmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RydWN0
dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVj
KTsKKyAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOworICAgIHNpemVfdCBj
b3VudCA9IDA7CiAgICAgCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgaW50IGxpc3RJbmRleDsKLSAgICBDb2RlTG9jYXRp
b25MYWJlbCBzbG93Q2FzZTsKLSAgICBpZiAoIWdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCh2
bSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5k
ZXgsIHNsb3dDYXNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzbG90LnNsb3RC
YXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpCisgICAgICAg
ICAgICB8fCBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGNvdW50ID0gbm9y
bWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcygKKyAgICAgICAgICAgIGV4ZWMsIGJh
c2VWYWx1ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKGNv
dW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CiAgICAgCi0gICAgc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7
CisgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJZExp
c3Q6OmZyb20oc3R1YkluZm8pOwogICAgIAogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1
YlJvdXRpbmU7Ci0gICAgCi0gICAgaWYgKGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhl
Yywgc2xvdCwgaWRlbnQsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwg
c3RydWN0dXJlLAorICAgIGdlbmVyYXRlR2V0QnlJZFN0dWIoCisgICAgICAgIGV4ZWMsIHNsb3Qs
IGlkZW50LCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVy
ZSwKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgc2xvd0Nhc2UsIHN0dWJSb3V0
aW5lKSA9PSBQcm90b0NoYWluR2VuZXJhdGlvbkZhaWxlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQo
KSksIHN0dWJSb3V0aW5lKTsKICAgICAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxp
c3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgc2xvdC5pc0NhY2hlYWJsZVZhbHVl
KCksIGNvdW50KTsKKyAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0QnlJZEFjY2VzcygKKyAgICAgICAg
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICBzbG90LmlzQ2FjaGVh
YmxlVmFsdWUoKSA/IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZVN0dWIgOiBHZXRCeUlkQWNjZXNzOjpH
ZXR0ZXIsCisgICAgICAgIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBj
b3VudCkpOwogICAgIAogICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHVi
SW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwogICAgIAotICAgIHJldHVybiBsaXN0SW5kZXggPCAo
UE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7CisgICAgcmV0dXJuICFsaXN0LT5pc0Z1
bGwoKTsKIH0KIAogdm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCkBAIC0xMjQ2LDcgKzEw
NTksNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhl
IHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KICAgICAgICAgICAgIGxp
c3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKLSAg
ICAgICAgICAgIAorCiAgICAgICAgICAgICBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAg
ICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBw
dXRLaW5kLAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226376</attachid>
            <date>2014-03-10 20:07:59 -0700</date>
            <delta_ts>2014-03-10 21:21:16 -0700</delta_ts>
            <desc>starting to work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>53038</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY1NDIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDE0LTAzLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2V0QnlJZCBsaXN0IGNhY2hpbmcgc2hvdWxkIHVzZSBzb21ldGhpbmcgb2JqZWN0LW9yaWVudGVk
IHJhdGhlciB0aGFuIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5Nzc4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBbHNvIGRlZHVwbGlj
YXRlIHRoZSBHZXRCeUlkIGdldHRlciBjYWxsIGNhY2hpbmcuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVT
dGF0dXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAo
SlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6R2V0
QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6
On5HZXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVj
dHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKToK
KyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6UG9seW1vcnBoaWNHZXRCeUlk
TGlzdCk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20pOgorICAg
ICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNHZXRCeUlkTGlz
dCk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyk6Cisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzRnVsbCk6CisgICAgICAgIChK
U0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCk6CisgICAgICAgIChKU0M6
OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRjaGluZyk6CisgICAgICAgIChKU0M6
OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2Vhayk6CisgICAgICAgICogYnl0ZWNvZGUv
UG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFj
Y2Vzczo6R2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmlzU2V0
KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZEFjY2Vzczo6dHlwZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmNoYWluKToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZEFjY2Vzczo6Y2hhaW5Db3VudCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRB
Y2Nlc3M6OnN0dWJSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6ZG9lc0Nh
bGxzKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQ
YXRoVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNFbXB0
eSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnNpemUpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphdCk6CisgICAgICAgIChKU0M6OlBvbHlt
b3JwaGljR2V0QnlJZExpc3Q6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmRlcmVm
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMp
OgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6
OmlzR2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0
R2V0QnlJZExpc3QpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6
Z2VuZXJhdGVHZXRCeUlkU3R1Yik6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJRCk6Cisg
ICAgICAgIChKU0M6OnBhdGNoSnVtcFRvR2V0QnlJZFN0dWIpOgorICAgICAgICAoSlNDOjp0cnlC
dWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisK
IDIwMTQtMDMtMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXBhdGNoIHNob3VsZCBzYXZlIGFuZCByZXN0b3JlIGFsbCB1c2VkIHJlZ2lzdGVycyAtIG5vdCBq
dXN0IHRlbXAgb25lcyAtIHdoZW4gbWFraW5nIGEgY2FsbApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE2NDk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzMsNiArMjczLDggQEAKIAkJMEY0ODUzMkExODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292
ZXJ5T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ4NTMyNjE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBD
QUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJj
ZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVk
QXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjRDRUQ1RTE4
Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJG
RTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgKi87IH07CisJCTBGNENFRDVGMThDRUE3
QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyog
UG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3Rh
dGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjRGMjlFMDE4
QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURF
MThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NTU0MUIxMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU1NDFBRjE2MTNDMUZCMDBDRTNF
MjUgLyogU3BlY2lhbFBvaW50ZXIuY3BwICovOyB9OwpAQCAtMTc3Niw2ICsxNzc4LDggQEAKIAkJ
MEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFJlY292ZXJ5T3Bjb2RlLmg7IHBhdGggPSBmdGwv
RlRMUmVjb3ZlcnlPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNB
RjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNENFRDVDMThDRUE3QUIwMDgwMkZF
MCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOUREMThCNkFE
MUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRG
MjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9u
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1
NDFBRjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlY2lhbFBvaW50ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNDU2OSw3ICs0NTczLDYgQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAw
RjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKLQkJCQk2NTI5RkIzMTE4QjJEOTk5MDBDNjExMDIgLyogQnl0ZWNvZGVMaXN0Lmpzb24g
Ki8sCiAJCQkJMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2Zp
bGUuY3BwICovLAogCQkJCTBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggKi8sCiAJCQkJMEY2Mzk0NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJv
ZmlsZS5jcHAgKi8sCkBAIC00NTc3LDYgKzQ1ODAsNyBAQAogCQkJCUMyRkNBRTBDMTdBOUMyNEUw
MDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovLAogCQkJCUMyRkNBRTBEMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLywKIAkJCQkwRjIxQzI3RTE0QkVB
QTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovLAorCQkJCTY1MjlGQjMxMThC
MkQ5OTkwMEM2MTEwMiAvKiBCeXRlY29kZUxpc3QuanNvbiAqLywKIAkJCQlDMkZDQUUwRTE3QTlD
MjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLywKIAkJCQlDMkZD
QUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8sCiAJ
CQkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXMuaCAqLywKQEAgLTQ2MzMsNiArNDYzNyw4IEBACiAJCQkJMEYyQkRDMkIxNTFGREU4QjAw
Q0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8sCiAJCQkJQTcwNDQ3RTkxN0EwQkQ0NjAwRjU4OThFIC8q
IE9wZXJhbmRzSW5saW5lcy5oICovLAogCQkJCTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLywKKwkJCQkwRjRDRUQ1QzE4Q0VBN0FC
MDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgKi8sCisJCQkJMEY0Q0VENUQx
OENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLywKIAkJCQkwRjlG
QzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8sCiAJ
CQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAq
LywKIAkJCQkwRjk4MjA1RDE2QkZFMzdGMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNw
cCAqLywKQEAgLTUwODEsNiArNTA4Nyw3IEBACiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQy
IC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0
QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xk
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNENFRDVGMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFRTE3MTc4RTcz
MDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3OEE5NzdCMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmggaW4gSGVhZGVycyAqLywKQEAg
LTY0OTcsNiArNjUwNCw3IEBACiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50
VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUNEMTgwNUU3NTUwMDQ3MkNFNCAv
KiBMTFZNQVBJLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVBQjM3MTc5OUU0QjIwMEQyODMz
RCAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNENFRDVFMThD
RUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1hY2hp
bmVTdGFja01hcmtlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNjQ5NzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUg
Ikxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJ
ZExpc3QuaCIKICNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCiAjaW5jbHVkZSAiUmVwYXRj
aC5oIgpAQCAtMzQxLDggKzM0Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNo
ZVN0YXR1cygKICAgICAgICAgICAgIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IDA7CiAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgICAgICBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSAwOwotICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0ID0gMDsKLSAgICAgICAgICAgIGludCBsaXN0U2l6
ZSA9IDA7CisgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CiAg
ICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKQEAgLTM1NCwxMCArMzU0LDkg
QEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAg
ICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpOwogICAgICAgICAgICAgICAgIGNoYWluID0gc3R1YkluZm8udS5nZXRCeUlk
Q2hhaW4uY2hhaW4uZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OgotICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoInNlbGZfbGlzdCIpOwotICAgICAgICAgICAgICAgIHN0cnVjdHVyZUxpc3QgPSBzdHViSW5m
by51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgICAgIGxpc3RT
aXplID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemU7CisgICAgICAgICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJs
aXN0Iik7CisgICAgICAgICAgICAgICAgbGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlz
dDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgYWNjZXNzX3Vuc2V0
OgogICAgICAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7CkBAIC0zODIsMTYgKzM4MSwx
NiBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAg
ICAgICAgZHVtcENoYWluKG91dCwgZXhlYywgY2hhaW4sIGlkZW50KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZUxpc3QpIHsKLSAgICAgICAg
ICAgICAgICBvdXQucHJpbnRmKCIsIGxpc3QgPSAlcDogWyIsIHN0cnVjdHVyZUxpc3QpOwotICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgeworICAgICAg
ICAgICAgaWYgKGxpc3QpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsIGxpc3QgPSAl
cDogWyIsIGxpc3QpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
aXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7CiAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludGYoIigiKTsKLSAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJi
YXNlIiwgZXhlYywgc3RydWN0dXJlTGlzdC0+bGlzdFtpXS5iYXNlLmdldCgpLCBpZGVudCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVMaXN0LT5saXN0W2ldLmNoYWluLmdldCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIsIGV4ZWMs
IGxpc3QtPmF0KGkpLnN0cnVjdHVyZSgpLCBpZGVudCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChsaXN0LT5hdChpKS5jaGFpbigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgZXhlYywg
c3RydWN0dXJlTGlzdC0+bGlzdFtpXS5jaGFpbi5nZXQoKSwgaWRlbnQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZHVtcENoYWluKG91dCwgZXhlYywgbGlzdC0+YXQoaSkuY2hhaW4oKSwgaWRl
bnQpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoIikiKTsKICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNjQ5NzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDEwICsyNywxMSBAQAogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKIAog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU1Njb3BlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJ
bnRlcnByZXRlci5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMTY2LDEzICsxNjcsMTEgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yUwogICAgIGlmIChzdHViSW5mby0+cmVzZXRCeUdDKQogICAgICAgICByZXR1
cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKIAotICAgIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCogbGlzdCA9IDA7Ci0gICAgaW50IGxpc3RTaXplID0gMDsKLSAg
ICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3Qp
IHsKLSAgICAgICAgbGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVM
aXN0OwotICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmTGlzdC5saXN0
U2l6ZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoIWxpc3QtPmxpc3RbaV0uaXNEaXJlY3QpCisgICAgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdCogbGlzdCA9IDA7CisgICAgaWYgKHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfbGlzdCkgeworICAgICAgICBsaXN0ID0gc3R1YkluZm8tPnUuZ2V0QnlJZExp
c3QubGlzdDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBpZiAobGlzdC0+YXQoaSkuZG9lc0NhbGxzKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTWFrZXNDYWxscywgdHJ1ZSk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yMDYsMTggKzIwNSwxOCBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAK
LSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OiB7Ci0gICAgICAgIGZvciAoaW50
IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3RTaXplOyArK2xpc3RJbmRleCkgewotICAg
ICAgICAgICAgQVNTRVJUKGxpc3QtPmxpc3RbbGlzdEluZGV4XS5pc0RpcmVjdCk7CisgICAgY2Fz
ZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsaXN0SW5k
ZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbGlzdEluZGV4KSB7CisgICAgICAg
ICAgICBBU1NFUlQoIWxpc3QtPmF0KGxpc3RJbmRleCkuZG9lc0NhbGxzKCkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmxpc3RbbGlzdElu
ZGV4XS5iYXNlLmdldCgpOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0
LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+
dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKGxpc3QtPmxpc3RbbGlzdEluZGV4XS5jaGFpbi5nZXQoKSkgeworICAg
ICAgICAgICAgaWYgKGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW4oKSkgewogICAgICAgICAgICAg
ICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2Nr
LCBzdHJ1Y3R1cmUsIGxpc3QtPmxpc3RbbGlzdEluZGV4XS5jaGFpbi5nZXQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgbGlzdC0+bGlzdFtsaXN0SW5kZXhdLmNvdW50KSk7CisgICAgICAgICAgICAg
ICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFp
bigpLAorICAgICAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluQ291bnQo
KSkpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmNvbXB1dGVGb3JDaGFpbihwcm9maWxl
ZEJsb2NrLCB1aWQsIGNoYWluKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5j
bHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAorICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZSwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLCB1bnNpZ25lZCBjaGFpbkNvdW50KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX2No
YWluQ291bnQoY2hhaW5Db3VudCkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0
dXJlKQorICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkKK3sKKyAgICBpZiAoY2hhaW4p
CisgICAgICAgIG1fY2hhaW4uc2V0KHZtLCBvd25lciwgY2hhaW4pOworfQorCitHZXRCeUlkQWNj
ZXNzOjp+R2V0QnlJZEFjY2VzcygpCit7Cit9CisKK0dldEJ5SWRBY2Nlc3MgR2V0QnlJZEFjY2Vz
czo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0KKyAgICAgICAgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9TbG93Q2FzZSk7CisgICAgCisgICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7CisgICAg
CisgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBhY2Nlc3NfZ2V0
X2J5X2lkX3NlbGY6CisgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7CisgICAg
ICAgIHJlc3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJh
c2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0
dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoK
KyAgICAgICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZENo
YWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICByZXN1bHQubV9jaGFpbi5jb3B5RnJv
bShzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbik7CisgICAgICAgIHJlc3VsdC5tX2NoYWlu
Q291bnQgPSBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jb3VudDsKKyAgICAgICAgcmVzdWx0Lm1f
c3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKKyAgICAgICAgaWYgKHN0dWJJbmZv
LnUuZ2V0QnlJZENoYWluLmlzRGlyZWN0KQorICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFNp
bXBsZVN0dWI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBHZXR0
ZXI7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhaygpIGNvbnN0Cit7CisgICAgaWYg
KG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jaGFpbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9j
aGFpbi5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0g
YWNjZXNzX3Vuc2V0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9saXN0LmFwcGVuZChH
ZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKK30KKworUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0g
YWNjZXNzX2dldF9ieV9pZF9saXN0KQorICAgICAgICByZXR1cm4gc3R1YkluZm8udS5nZXRCeUlk
TGlzdC5saXN0OworICAgIAorICAgIEFTU0VSVCgKKyAgICAgICAgc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKKyAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluCisgICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX3Vuc2V0KTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBy
ZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgCisgICAg
c3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExpc3Qo
KSB7IH0KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmN1
cnJlbnRTbG93UGF0aFRhcmdldCgKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNv
bnN0Cit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UpOworICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5j
b2RlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0
IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIWlzRnVsbCgpKTsKKyAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRp
bWUuCisgICAgbV9saXN0LnJlc2l6ZShtX2xpc3Quc2l6ZSgpICsgMSk7CisgICAgbV9saXN0Lmxh
c3QoKSA9IGFjY2VzczsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwo
KSBjb25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9T
SVpFKTsKKyAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsK
K30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAor
eworICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAg
ICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Cit9CisK
K2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKGF0KGkp
LnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmUpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OnZpc2l0V2VhaygpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljR2V0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBvbHlt
b3JwaGljR2V0QnlJZExpc3RfaAorI2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKwor
I2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJPcGNvZGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUu
aCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBD
b2RlQmxvY2s7CitzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CisKK2NsYXNzIEdldEJ5SWRBY2Nl
c3MgeworcHVibGljOgorICAgIGVudW0gQWNjZXNzVHlwZSB7CisgICAgICAgIEludmFsaWQsCisg
ICAgICAgIFNpbXBsZUlubGluZSwgLy8gVGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNz
LgorICAgICAgICBTaW1wbGVTdHViLCAvLyBUaGlzIGlzIGEgc3R1Yi4KKyAgICAgICAgR2V0dGVy
LAorICAgIH07CisgICAgCisgICAgR2V0QnlJZEFjY2VzcygpCisgICAgICAgIDogbV90eXBlKElu
dmFsaWQpCisgICAgICAgICwgbV9jaGFpbkNvdW50KDApCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBHZXRCeUlkQWNjZXNzKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUs
IFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAorICAgICAgICBTdHJ1Y3R1
cmVDaGFpbiogPSAwLCB1bnNpZ25lZCBjaGFpbkNvdW50ID0gMCk7CisgICAgCisgICAgfkdldEJ5
SWRBY2Nlc3MoKTsKKyAgICAKKyAgICBzdGF0aWMgR2V0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJl
U3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29u
c3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgCisgICAgQWNjZXNzVHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAgIFN0cnVjdHVyZUNo
YWluKiBjaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7IH0KKyAgICB1bnNpZ25l
ZCBjaGFpbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jaGFpbkNvdW50OyB9CisgICAgCisgICAg
SklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdldHRl
cjsgfQorICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAKKyAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAg
ICB1bnNpZ25lZCBtX2NoYWluQ291bnQ7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9z
dHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOworICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKK307CisKK2NsYXNzIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIGdldCBsaXN0LCBvciBy
ZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IGluCisgICAgLy8gcGxhY2UuCisgICAgc3Rh
dGljIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJlU3R1YkluZm8mKTsKKyAg
ICAKKyAgICB+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpOworICAgIAorICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNz
Jik7CisgICAgCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1w
dHkoKTsgfQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgp
OyB9CisgICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKKyAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNv
bnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1
ZS4KKyAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVy
biBtX2xpc3RbaV07IH0KKyAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2ln
bmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQorICAgIAorICAgIGJvb2wgZGlkU2Vs
ZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNpbXBsZUlubGlu
ZT8KKyAgICAKKyAgICBib29sIHZpc2l0V2VhaygpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChT
dHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAyPiBt
X2xpc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQp
CisKKyNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShy
ZXZpc2lvbiAxNjQ5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxOCArMjcsMTcgQEAKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRl
ICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oIgogCi0KIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OmRlcmVmKCkKIHsKICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OiB7Ci0gICAgICAgIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5nZXRCeUlkU2Vs
Zkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgZGVsZXRlIHBvbHltb3JwaGljU3RydWN0dXJl
czsKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogeworICAgICAgICBkZWxldGUgdS5n
ZXRCeUlkTGlzdC5saXN0OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgYWNjZXNz
X3B1dF9ieV9pZF9saXN0OgpAQCAtNzQsOSArNzMsOCBAQCBib29sIFN0cnVjdHVyZVN0dWJJbmZv
Ojp2aXNpdFdlYWtSZWZlcmVuCiAgICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5nZXRC
eUlkQ2hhaW4uY2hhaW4uZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OiB7Ci0gICAgICAg
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzID0g
dS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgaWYgKCFwb2x5bW9ycGhp
Y1N0cnVjdHVyZXMtPnZpc2l0V2Vhayh1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSkpCisgICAg
Y2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKKyAgICAgICAgaWYgKCF1LmdldEJ5SWRMaXN0
Lmxpc3QtPnZpc2l0V2VhaygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBi
cmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTY0OTcwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDEyICs0MSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKK2Ns
YXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3Q7CiBjbGFzcyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
OwogCiBlbnVtIEFjY2Vzc1R5cGUgewogICAgIGFjY2Vzc19nZXRfYnlfaWRfc2VsZiwKICAgICBh
Y2Nlc3NfZ2V0X2J5X2lkX2NoYWluLAotICAgIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0LAor
ICAgIGFjY2Vzc19nZXRfYnlfaWRfbGlzdCwKICAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRp
b25fbm9ybWFsLAogICAgIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QsCiAgICAg
YWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlLApAQCAtNjAsNyArNjEsNyBAQCBpbmxpbmUgYm9vbCBp
c0dldEJ5SWRBY2Nlc3MoQWNjZXNzVHlwZSBhCiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CiAg
ICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X2NoYWluOgotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3Q6CisgICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNSwxMyArMTE2LDEwIEBAIHN0cnVjdCBTdHJ1
Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHUuZ2V0QnlJZENoYWluLmlzRGlyZWN0ID0gaXNEaXJl
Y3Q7CiAgICAgfQogCi0gICAgdm9pZCBpbml0R2V0QnlJZFNlbGZMaXN0KFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogc3RydWN0dXJlTGlzdCwgaW50IGxpc3RTaXplLCBib29sIGRpZFNl
bGZQYXRjaGluZyA9IGZhbHNlKQorICAgIHZvaWQgaW5pdEdldEJ5SWRMaXN0KFBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIGxpc3QpCiAgICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dl
dF9ieV9pZF9zZWxmX2xpc3Q7Ci0KLSAgICAgICAgdS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJl
TGlzdCA9IHN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIHUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXpl
ID0gbGlzdFNpemU7Ci0gICAgICAgIHUuZ2V0QnlJZFNlbGZMaXN0LmRpZFNlbGZQYXRjaGluZyA9
IGRpZFNlbGZQYXRjaGluZzsKKyAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRf
bGlzdDsKKyAgICAgICAgdS5nZXRCeUlkTGlzdC5saXN0ID0gbGlzdDsKICAgICB9CiAKICAgICAv
LyBQdXRCeUlkKgpAQCAtMjMyLDE0ICsyMzAsOCBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA6IDE7CiAgICAgICAgIH0gZ2V0QnlJZENoYWlu
OwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgaW50IGxpc3RTaXplIDogMzE7Ci0g
ICAgICAgICAgICBib29sIGRpZFNlbGZQYXRjaGluZyA6IDE7Ci0gICAgICAgIH0gZ2V0QnlJZFNl
bGZMaXN0OwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgaW50IGxpc3RTaXplOwot
ICAgICAgICB9IGdldEJ5SWRQcm90b0xpc3Q7CisgICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0KiBsaXN0OworICAgICAgICB9IGdldEJ5SWRMaXN0OwogICAgICAgICBzdHJ1Y3Qgewog
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByZXZpb3VzU3RydWN0dXJl
OwogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTY0OTcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGlj
R2V0QnlJZExpc3QuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCiAjaW5j
bHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIgpAQCAtMjE5LDEzICsyMjAsMTEgQEAgc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNo
KExpbmtCdWZmZQogICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25l
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCi1lbnVtIFByb3RvQ2hhaW5HZW5lcmF0aW9u
UmVzdWx0IHsKLSAgICBQcm90b0NoYWluR2VuZXJhdGlvbkZhaWxlZCwKLSAgICBQcm90b0NoYWlu
R2VuZXJhdGlvblN1Y2NlZWRlZAotfTsKLQotc3RhdGljIFByb3RvQ2hhaW5HZW5lcmF0aW9uUmVz
dWx0IGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhlY1N0YXRlKiwgY29uc3QgUHJvcGVy
dHlTbG90JiwgY29uc3QgSWRlbnRpZmllciYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJl
Q2hhaW4qLCBzaXplX3QsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBDb2RlTG9jYXRpb25M
YWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwsIFJlZlB0cjxKSVRTdHViUm91dGluZT4mKSBXQVJOX1VO
VVNFRF9SRVRVUk47Ci1zdGF0aWMgUHJvdG9DaGFpbkdlbmVyYXRpb25SZXN1bHQgZ2VuZXJhdGVQ
cm90b0NoYWluQWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNj
ZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4mIHN0dWJSb3V0aW5lKQorc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkU3R1YigK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
U3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsCisgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xh
YmVsLAorICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4mIHN0dWJSb3V0aW5lKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAg
IEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNl
R1BSKTsKQEAgLTIzNSw4ICsyMzQsNyBAQCBzdGF0aWMgUHJvdG9DaGFpbkdlbmVyYXRpb25SZXN1
bHQgZ2VuZXJhCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2gudmFsdWVHUFIpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lz
dGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKICAgICBi
b29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnOwot
ICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCAmJiAhc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkp
Ci0gICAgICAgIHJldHVybiBQcm90b0NoYWluR2VuZXJhdGlvbkZhaWxlZDsKKyAgICBSRUxFQVNF
X0FTU0VSVCghbmVlZFRvUmVzdG9yZVNjcmF0Y2ggfHwgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkp
OwogICAgIAogICAgIENDYWxsSGVscGVycyBzdHViSml0KCZleGVjLT52bSgpLCBleGVjLT5jb2Rl
QmxvY2soKSk7CiAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7CkBAIC0yNjEsNDEgKzI1
OSw0MiBAQCBzdGF0aWMgUHJvdG9DaGFpbkdlbmVyYXRpb25SZXN1bHQgZ2VuZXJhCiAgICAgICAg
IHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0
dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKICAgICBTdHJ1Y3R1cmUqIGN1cnJT
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0g
Y2hhaW4tPmhlYWQoKTsKICAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Ci0gICAgICAgIHByb3RvT2Jq
ZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsK
LSAgICAgICAgU3RydWN0dXJlKiBwcm90b1N0cnVjdHVyZSA9IHByb3RvT2JqZWN0LT5zdHJ1Y3R1
cmUoKTsKLSAgICAgICAgaWYgKHByb3RvU3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVBy
b3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hw
b2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2lu
dChjb2RlQmxvY2spKTsKLSAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAg
ICAgICAgICAgcHJvdG9PYmplY3QsIHByb3RvU3RydWN0dXJlLCBjb2RlQmxvY2ssIHN0dWJJbmZv
LCBzdHViSml0LAotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKKyAgICBpZiAoY2hhaW4pIHsKKyAgICAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKKyAgICAgICAgICAgIHBy
b3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4
ZWMpKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUgPSBwcm90b09iamVj
dC0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICBpZiAocHJvdG9TdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCisgICAgICAgICAgICAgICAg
dm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1
YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKKyAgICAgICAgICAgIGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICBwcm90b09iamVjdCwgcHJvdG9TdHJ1
Y3R1cmUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJKaXQsCisgICAgICAgICAgICAgICAgZmFp
bHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+
Z2V0KCk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgYm9vbCBpc0FjY2Vzc29yID0gc2xv
dC5pc0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKTsKLSAgICBp
ZiAoaXNBY2Nlc3NvcikKLSAgICAgICAgc3R1YkppdC5tb3ZlKGJhc2VHUFIsIHNjcmF0Y2hHUFIp
OwotCisgICAgCisgICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFI7CisgICAgaWYgKGNoYWluKSB7
CisgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90
b09iamVjdCksIHNjcmF0Y2hHUFIpOworICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRj
aEdQUjsKKyAgICB9IGVsc2UKKyAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VHUFI7Cisg
ICAgCiAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KG9mZnNldCkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
c3R1YkppdC5sb2FkNjQocHJvdG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCksIHJl
c3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgc3R1YkppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0LT5sb2NhdGlvbkZv
ck9mZnNldChvZmZzZXQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAg
ICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJl
c3VsdEdQUik7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihwcm90b09iamVjdC0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHRHUFIpOworICAg
ICAgICBpZiAoIWlzSW5saW5lT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgYmFzZUZvckFj
Y2Vzc0dQUiA9IHJlc3VsdEdQUjsKKyAgICAgICAgfQorICAgICAgICAKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
cmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAg
ICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
b2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwg
cmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9h
ZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VGb3JBY2Nlc3NHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKG9mZnNldCkpLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgc3R1YkppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwgb2Zmc2V0UmVs
YXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFRhZ09mZnNldCksIHJlc3VsdFRhZ0dQUik7CisgICAgICAg
IHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VGb3JBY2Nlc3NHUFIs
IG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVzdWx0R1BS
KTsKICNlbmRpZgotICAgICAgICB9CiAgICAgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
b3BlcmF0aW9uQ2FsbDsKQEAgLTMwNCwxNCArMzAzLDE0IEBAIHN0YXRpYyBQcm90b0NoYWluR2Vu
ZXJhdGlvblJlc3VsdCBnZW5lcmEKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBm
YWlsOwogICAgIGlmIChpc0FjY2Vzc29yKSB7CiAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxl
R2V0dGVyKCkpIHsKLSAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzdHViSml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgb3Bl
cmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25DYWxsR2V0dGVyOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVj
dCksIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFt
ZS5pbXBsKCkpKTsKKyAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKICNlbHNlCi0gICAgICAgICAgICBzdHViSml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihw
cm90b09iamVjdCksIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFt
ZS5pbXBsKCkpKTsKKyAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3Bl
cnR5TmFtZS5pbXBsKCkpKTsKICNlbmRpZgogICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24g
PSBGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKTsKICAgICAgICAgfQpAQCAtMzUxLDcg
KzM1MCw2IEBAIHN0YXRpYyBQcm90b0NoYWluR2VuZXJhdGlvblJlc3VsdCBnZW5lcmEKICAgICAg
ICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAogICAgICAgICAoIlByb3RvdHlwZSBj
aGFpbiBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICAgICB0
b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN1Y2Nlc3NMYWJlbC5leGVjdXRh
YmxlQWRkcmVzcygpKSk7Ci0gICAgcmV0dXJuIFByb3RvQ2hhaW5HZW5lcmF0aW9uU3VjY2VlZGVk
OwogfQogCiBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKQEAgLTQ2MywxMCAr
NDYxLDExIEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0g
c3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICBpZiAoZ2VuZXJhdGVQcm90b0No
YWluQWNjZXNzU3R1YihleGVjLCBzbG90LCBwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLCBwcm90b3R5
cGVDaGFpbiwgY291bnQsIG9mZnNldCwKLSAgICAgICAgc3RydWN0dXJlLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0Rv
bmUpLAotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUp
ID09IFByb3RvQ2hhaW5HZW5lcmF0aW9uRmFpbGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgZ2VuZXJhdGVHZXRCeUlkU3R1YigKKyAgICAgICAgZXhlYywgc2xvdCwgcHJvcGVydHlOYW1l
LCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwKKyAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSksCisg
ICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZl
ciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKQEAgLTQ4
NSw0OSArNDg0LDExIEBAIHZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1YK
ICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CiB9CiAKLXN0YXRpYyBib29sIGdldFBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdCgKLSAgICBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KiYgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBpbnQmIGxpc3RJbmRleCwKLSAgICBD
b2RlTG9jYXRpb25MYWJlbCYgc2xvd0Nhc2UpCi17Ci0gICAgc2xvd0Nhc2UgPSBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b1Nsb3dDYXNlKTsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3Nf
dW5zZXQpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsK
LSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCgpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCwgZmFsc2UpOwotICAgICAgICBsaXN0SW5kZXggPSAw
OwotICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGYpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsK
LSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIEpJVFN0dWJS
b3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoc2xvd0Nhc2UpLCBzdHViSW5mby51Lmdl
dEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwotICAgICAgICBzdHVi
SW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwgdHJ1
ZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9IDE7Ci0gICAgfSBlbHNlIGlmIChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoISFzdHViSW5mby5zdHViUm91dGluZSk7Ci0gICAgICAgIHNsb3dDYXNlID0gQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRp
bmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0
dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFp
bi5pc0RpcmVjdCwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY291bnQpOwotICAgICAgICBzdHVi
SW5mby5zdHViUm91dGluZS5jbGVhcigpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNl
bGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwgZmFsc2UpOwotICAgICAgICBsaXN0
SW5kZXggPSAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZv
LmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOwotICAgICAgICBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1
cmVMaXN0OwotICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5s
aXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJ
U1RfQ0FDSEVfU0laRSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyB2b2lkIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRp
bmUqIHN0dWJSb3V0aW5lKQogewotICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOworICAgIFJFTEVBU0VfQVNTRVJUKHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KTsKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICBpZiAoc3R1YkluZm8udS5nZXRC
eUlkU2VsZkxpc3QuZGlkU2VsZlBhdGNoaW5nKSB7CisgICAgaWYgKHN0dWJJbmZvLnUuZ2V0QnlJ
ZExpc3QubGlzdC0+ZGlkU2VsZlBhdGNoaW5nKCkpIHsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoCiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zm
c2V0KAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCkBA
IC01NTAsMTU4ICs1MTEsNiBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNT
dGF0CiAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKICAgICAKLSAgICBpZiAo
c2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAgICAgICBpZiAoIXN0dWJJbmZvLnBh
dGNoLnJlZ2lzdGVyc0ZsdXNoZWQpIHsKLSAgICAgICAgICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBt
dWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCBwcmlv
ciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCi0gICAgICAgICAgICAvLyBub24tVmFs
dWUgY2FjaGVkIHByb3BlcnRpZXMgcmVxdWlyZSBwbGFudGluZyBjYWxscywgd2hpY2ggcmVxdWly
ZXMgcmVnaXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVzaGVkLiBUaHVzLAotICAgICAgICAgICAgLy8g
aWYgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5n
LgotICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGlu
dCBsaXN0SW5kZXg7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlOwotCi0gICAg
ICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc2xvd0Nhc2UpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgc3R1YkluZm8udS5nZXRC
eUlkU2VsZkxpc3QubGlzdFNpemUrKzsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BS
ID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVH
UFIpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5m
by5wYXRjaC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgIAotICAgICAgICBD
Q2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0ID0gYnJhbmNoU3RydWN0dXJlKHN0dWJKaXQs
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIHN0
cmF0ZWd5IHdlIHVzZSBmb3Igc3R1YnMgaXMgYXMgZm9sbG93czoKLSAgICAgICAgLy8gMSkgQ2Fs
bCBERkcgaGVscGVyIHRoYXQgY2FsbHMgdGhlIGdldHRlci4KLSAgICAgICAgLy8gMikgQ2hlY2sg
aWYgdGhlcmUgd2FzIGFuIGV4Y2VwdGlvbiwgYW5kIGlmIHRoZXJlIHdhcywgY2FsbCB5ZXQgYW5v
dGhlcgotICAgICAgICAvLyAgICBoZWxwZXIuCi0gICAgICAgIAotICAgICAgICBib29sIGlzRGly
ZWN0ID0gZmFsc2U7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhhbmRsZXJDYWxsOwotICAgICAgICBGdW5j
dGlvblB0ciBvcGVyYXRpb25GdW5jdGlvbjsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c3VjY2VzczsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkg
fHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBjb2RlIHNob3VsZG4ndCBiZSBhc3N1bWluZyB0aGF0IHRoZSB0b3Agb2Ygc3RhY2sgaXMgc2V0
IHVwIGZvciBKU0MKLSAgICAgICAgICAgIC8vIEpJVC1zdHlsZSBDIGNhbGxzLCBzaW5jZSB3ZSBt
YXkgYmUgY3VycmVudGx5IG9uIHRvcCBvZiBhbiBGVEwgZnJhbWUuCi0gICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NzExCi0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoYmFzZUdQUiAhPSBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSks
IHNjcmF0Y2hHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwotI2Vsc2UKLSAgICAg
ICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3Jh
dGNoR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzdHVi
Sml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IG9wZXJhdGlvbkNhbGxHZXR0ZXI7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAg
Ly8gRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBz
bG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotICAgICAg
ICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIGJh
c2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOwotI2Vs
c2UKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShi
YXNlR1BSLCBiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihpZGVudC5pbXBsKCkpKTsKLSNl
bmRpZgotICAgICAgICAgICAgICAgIG9wZXJhdGlvbkZ1bmN0aW9uID0gRnVuY3Rpb25QdHIoc2xv
dC5jdXN0b21HZXR0ZXIoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUg
aW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCi0gICAgICAgICAgICAvLyBwbGFjZSB0aGF0
IHdlIG1hZGUgaXQgZnJvbS4gSXQganVzdCBzbyBoYXBwZW5zIHRvIGJlIHRoZSBwbGFjZSB0aGF0
IHdlIGFyZSBhdAotICAgICAgICAgICAgLy8gcmlnaHQgbm93IQotICAgICAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
ZXhlYy0+bG9jYXRpb25Bc1Jhd0JpdHMoKSksCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
Ojp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBv
cGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgICAgIHN0dWJKaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsK
LSNlbHNlCi0gICAgICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0cyhyZXN1bHRHUFIsIHJlc3Vs
dFRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0LmVtaXRFeGNl
cHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAg
ICAgIGhhbmRsZXJDYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgICAgICBzdHViSml0Lmp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBy
ZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoYmFzZUdQUiA9PSByZXN1bHRU
YWdHUFIpIHsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVz
dWx0VGFnR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
c3VsdEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9C
YXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0g
ICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1
bHRHUFIpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdWNjZXNzID0gc3R1
YkppdC5qdW1wKCk7Ci0gICAgICAgICAgICBpc0RpcmVjdCA9IHRydWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7
Ci0gICAgICAgIAotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHdyb25nU3RydWN0LCBzbG93Q2Fz
ZSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7
Ci0gICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
b3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uRnVuY3Rpb24pOwotICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlcik7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPQot
ICAgICAgICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgICAgICAgICAgRklOQUxJ
WkVfQ09ERV9GT1IoCi0gICAgICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRj
aEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgKCJHZXRCeUlkIHBvbHltb3JwaGljIGxpc3Qg
YWNjZXNzIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAg
ICAgICAgICAgICAgKnZtLAotICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksCi0gICAgICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3Qu
aXNDYWNoZWFibGVDdXN0b20oKSk7Ci0gICAgICAgIAotICAgICAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7Ci0gICAgICAgIAotICAg
ICAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJSb3V0
aW5lLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkUgLSAxKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkKLSAg
ICAgICAgfHwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKICAgICBpZiAoIXN0dWJJbmZvLnBhdGNoLnJl
Z2lzdGVyc0ZsdXNoZWQpIHsKICAgICAgICAgLy8gV2UgY2Fubm90IGRvIGFzIG11Y2ggaW5saW5l
IGNhY2hpbmcgaWYgdGhlIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkIHByaW9yIHRvIHRoaXMg
R2V0QnlJZC4gSW4gcGFydGljdWxhciwKICAgICAgICAgLy8gbm9uLVZhbHVlIGNhY2hlZCBwcm9w
ZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNoIHJlcXVpcmVzIHJlZ2lzdGVycyB0
byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywKQEAgLTcxMCwzNCArNTE5LDM4IEBAIHN0YXRpYyBi
b29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgCi0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hl
ZE9mZnNldCgpOwotICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9y
Q2hhaW5BY2Nlc3MoZXhlYywgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LCBvZmZz
ZXQpOwotICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVj
dHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlw
ZUNoYWluID0gMDsKKyAgICBzaXplX3QgY291bnQgPSAwOwogICAgIAotICAgIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAgIGludCBs
aXN0SW5kZXg7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2U7Ci0gICAgaWYgKCFnZXRQ
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qodm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBzbG93Q2FzZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICBp
ZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQ
cm9wZXJ0eUNhY2hpbmcoKQorICAgICAgICAgICAgfHwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nl
c3MoCisgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQs
IG9mZnNldCk7CisgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0
dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICB9CiAgICAgCi0gICAgc3R1YkluZm8udS5n
ZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CisgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCog
bGlzdCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1YkluZm8pOwogICAgIAogICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgCi0gICAgaWYgKGdlbmVy
YXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc2xvdCwgaWRlbnQsIHN0dWJJbmZvLCBwcm90
b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLAorICAgIGdlbmVyYXRlR2V0QnlJ
ZFN0dWIoCisgICAgICAgIGV4ZWMsIHNsb3QsIGlkZW50LCBzdHViSW5mbywgcHJvdG90eXBlQ2hh
aW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwK
LSAgICAgICAgc2xvd0Nhc2UsIHN0dWJSb3V0aW5lKSA9PSBQcm90b0NoYWluR2VuZXJhdGlvbkZh
aWxlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChs
aXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOwogICAg
IAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHBy
b3RvdHlwZUNoYWluLCBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSwgY291bnQpOworICAgIGxpc3Qt
PmFkZEFjY2VzcyhHZXRCeUlkQWNjZXNzKAorICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksCisgICAgICAgIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpID8gR2V0QnlJZEFj
Y2Vzczo6U2ltcGxlU3R1YiA6IEdldEJ5SWRBY2Nlc3M6OkdldHRlciwKKyAgICAgICAgc3R1YlJv
dXRpbmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50KSk7CiAgICAgCiAgICAgcGF0
Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQo
KSk7CiAgICAgCi0gICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hF
X1NJWkUgLSAxKTsKKyAgICByZXR1cm4gIWxpc3QtPmlzRnVsbCgpOwogfQogCiB2b2lkIGJ1aWxk
R2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKQEAgLTEyNDYsNyArMTA1OSw3IEBAIHN0YXRpYyBib29sIHRy
eUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8g
V2UncmUgbm93IGNvbW1pdHRlZCB0byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0
YS1kYXRhIGFjY29yZGluZ2x5LgogICAgICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJ
ZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotICAgICAgICAgICAgCisKICAgICAgICAg
ICAgIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFs
dWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCiAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wb2x5bW9ycGhpYy1wcm90b3R5cGUtYWNjZXNz
ZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9w
b2x5bW9ycGhpYy1wcm90b3R5cGUtYWNjZXNzZXMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3BvbHltb3JwaGljLXByb3RvdHlwZS1hY2Nlc3Nl
cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACitmdW5jdGlvbiBGb28oKSB7Cit9
CitGb28ucHJvdG90eXBlLmYgPSA0MjsKK0Zvby5wcm90b3R5cGUuZyA9IDQzOworRm9vLnByb3Rv
dHlwZS5oID0gNDQ7CitGb28ucHJvdG90eXBlLmkgPSA0NTsKK0Zvby5wcm90b3R5cGUuaiA9IDQ2
OworRm9vLnByb3RvdHlwZS5rID0gNDc7CisKK2Z1bmN0aW9uIEJhcigpIHsKK30KK0Jhci5wcm90
b3R5cGUuayA9IDIzOworQmFyLnByb3RvdHlwZS5mID0gMjQ7CisKK2Z1bmN0aW9uIGZvbyhvKSB7
CisgICAgcmV0dXJuIG8uZiArIG8uazsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28obmV3IEZvbygpKTsK
KyAgICBpZiAocmVzdWx0ICE9IDg5KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQg
Zm9yIEZvbzogIiArIHJlc3VsdDsKKyAgICByZXN1bHQgPSBmb28obmV3IEJhcigpKTsKKyAgICBp
ZiAocmVzdWx0ICE9IDQ3KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIEJh
cjogIiArIHJlc3VsdDsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3Mvc2ltcGxlLXByb3RvdHlwZS1hY2Nlc3Nlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbXBsZS1wcm90b3R5cGUtYWNjZXNzZXMuanMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbXBsZS1w
cm90b3R5cGUtYWNjZXNzZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBAQAorZnVu
Y3Rpb24gRm9vKCkgeworfQorRm9vLnByb3RvdHlwZS5mID0gNDI7CitGb28ucHJvdG90eXBlLmcg
PSA0MzsKK0Zvby5wcm90b3R5cGUuaCA9IDQ0OworRm9vLnByb3RvdHlwZS5pID0gNDU7CitGb28u
cHJvdG90eXBlLmogPSA0NjsKK0Zvby5wcm90b3R5cGUuayA9IDQ3OworCitmdW5jdGlvbiBmb28o
bykgeworICAgIHJldHVybiBvLmYgKyBvLms7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG5ldyBGb28o
KSk7CisgICAgaWYgKHJlc3VsdCAhPSA4OSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0IGZvciBGb286ICIgKyByZXN1bHQ7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226382</attachid>
            <date>2014-03-10 21:21:16 -0700</date>
            <delta_ts>2014-03-10 23:48:55 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55785</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY1NDI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDE0LTAzLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2V0QnlJZCBsaXN0IGNhY2hpbmcgc2hvdWxkIHVzZSBzb21ldGhpbmcgb2JqZWN0LW9yaWVudGVk
IHJhdGhlciB0aGFuIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5Nzc4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBbHNvIGRlZHVwbGlj
YXRlIHRoZSBHZXRCeUlkIGdldHRlciBjYWxsIGNhY2hpbmcuIEFsc28gYWRkIHNvbWUgc21hbGwg
dGVzdHMgZm9yCisgICAgICAgIGdldCBzdHVicy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cyk6
CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6Okdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNj
ZXNzOjpHZXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6fkdldEJ5
SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1
YkluZm8pOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWspOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KToK
KyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbSk6CisgICAgICAgIChK
U0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0
KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKToKKyAgICAgICAgKEpT
Qzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKToKKyAgICAgICAgKEpTQzo6
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKToKKyAgICAgICAgKEpTQzo6
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKToKKyAgICAgICAgKiBieXRlY29kZS9Q
b2x5bW9ycGhpY0dldEJ5SWRMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNj
ZXNzOjpHZXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6aXNTZXQp
OgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpvcGVyYXRvciEpOgorICAgICAgICAoSlND
OjpHZXRCeUlkQWNjZXNzOjp0eXBlKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6Y2hhaW4pOgorICAgICAgICAo
SlNDOjpHZXRCeUlkQWNjZXNzOjpjaGFpbkNvdW50KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFj
Y2Vzczo6c3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpkb2VzQ2Fs
bHMpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0VtcHR5KToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6c2l6ZSk6CisgICAgICAgIChKU0M6
OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmF0KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNH
ZXRCeUlkTGlzdDo6b3BlcmF0b3JbXSk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAg
ICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6aXNHZXRC
eUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlk
TGlzdCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0
ZUdldEJ5SWRTdHViKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAg
KEpTQzo6cGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yik6CisgICAgICAgIChKU0M6OnRyeUJ1aWxkR2V0
QnlJRExpc3QpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAg
KiB0ZXN0cy9zdHJlc3MvZ2V0dGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAg
ICgubyk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3BvbHltb3JwaGljLXByb3RvdHlwZS1hY2Nl
c3Nlcy5qczogQWRkZWQuCisgICAgICAgIChGb28pOgorICAgICAgICAoQmFyKToKKyAgICAgICAg
KGZvbyk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3Byb3RvdHlwZS1nZXR0ZXIuanM6IEFkZGVk
LgorICAgICAgICAoRm9vKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICogdGVzdHMvc3RyZXNz
L3NpbXBsZS1wcm90b3R5cGUtYWNjZXNzZXMuanM6IEFkZGVkLgorICAgICAgICAoRm9vKToKKyAg
ICAgICAgKGZvbyk6CisKIDIwMTQtMDMtMTAgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIENyYXNoIG9uIGEgc3RhY2sgb3ZlcmZsb3cgb24gMzItYml0IHg4NiBpbiBo
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvbm8tb25tZXNzYWdlLWluLXN5
bmMtb3AuaHRtbC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
NjQ5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjczLDYgKzI3Myw4IEBACiAJCTBG
NDg1MzJBMTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0ODUzMjYxODdERkRFQzAwODNC
Njg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVBy
b3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJ
CTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAw
REQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwICovOyB9OworCQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBo
aWNHZXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRG
MjlERjE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1h
dGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjU1NDFCMTE2MTNDMUZCMDBDRTNFMjUg
LyogU3BlY2lhbFBvaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1NTQxQUYxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNw
cCAqLzsgfTsKQEAgLTE3NzYsNiArMTc3OCw4IEBACiAJCTBGNDg1MzI2MTg3REZERUMwMDgzQjY4
NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGVExSZWNvdmVyeU9wY29kZS5oOyBwYXRoID0gZnRsL0ZUTFJlY292ZXJ5T3Bjb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBT
b3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
b3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERC
MTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlk
TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0Q0VENUQx
OENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGlj
RXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3Bw
OyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8q
IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNl
Lmg7IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NTQxQUYxNjEzQzFGQjAwQ0UzRTI1IC8q
IFNwZWNpYWxQb2ludGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNwZWNpYWxQb2ludGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1Njks
NyArNDU3Myw2IEBACiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNjUyOUZCMzExOEIy
RDk5OTAwQzYxMTAyIC8qIEJ5dGVjb2RlTGlzdC5qc29uICovLAogCQkJCTBGODMzNUI0MTYzOUMx
RTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLywKIAkJCQkwRjgzMzVC
NTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovLAogCQkJCTBG
NjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwICovLApAQCAtNDU3Nyw2
ICs0NTgwLDcgQEAKIAkJCQlDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNp
Y0Jsb2NrLmNwcCAqLywKIAkJCQlDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVC
YXNpY0Jsb2NrLmggKi8sCiAJCQkJMEYyMUMyN0UxNEJFQUE4MDAwQURDNjRCIC8qIEJ5dGVjb2Rl
Q29udmVudGlvbnMuaCAqLywKKwkJCQk2NTI5RkIzMTE4QjJEOTk5MDBDNjExMDIgLyogQnl0ZWNv
ZGVMaXN0Lmpzb24gKi8sCiAJCQkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcy5jcHAgKi8sCiAJCQkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8q
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oICovLAogCQkJCTBGNjY2RUJFMTgzNTY2RjkwMEQw
MTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8sCkBAIC00NjMzLDYg
KzQ2MzcsOCBAQAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5oICov
LAogCQkJCUE3MDQ0N0U5MTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGluZXMuaCAqLywK
IAkJCQkwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0LmggKi8sCisJCQkJMEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGlj
R2V0QnlJZExpc3QuY3BwICovLAorCQkJCTBGNENFRDVEMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUwIC8q
IFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovLAogCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1
MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3
RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCkBAIC01MDgxLDYgKzUwODcs
NyBAQAogCQkJCTBGQzA5NzcxMTQ2OTNBRjUwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEzQjYw
MDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQ
cmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAwQzcyNTMy
IC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3QjE3OTczOEI4MDA5REY3
NDQgLyogREZHUGxhbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDk3LDYgKzY1MDQsNyBAQAogCQkJ
CTBGMEI4MzlDMTRCQ0Y0NjMwMDg4NUI0RiAvKiBMTEludFRodW5rcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkNFRkFDRDE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0U1QUIzNzE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjRDRUQ1RTE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERTEwN0VDN0U3
MDA2NTA0NDYgLyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MENDMTRCQkIx
N0EwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0QjcyM0IyMTJEN0RBNDYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTY0OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNs
dWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExp
c3QuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCiAjaW5jbHVkZSAiUmVk
dWNlV2hpdGVzcGFjZS5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKQEAgLTM0MSw4ICszNDIsNyBA
QCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSAwOwogICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90
b3R5cGVTdHJ1Y3R1cmUgPSAwOwogICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0g
MDsKLSAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogc3RydWN0dXJl
TGlzdCA9IDA7Ci0gICAgICAgICAgICBpbnQgbGlzdFNpemUgPSAwOworICAgICAgICAgICAgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IDA7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3NlbGY6CkBAIC0zNTQsMTAgKzM1NCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmlu
dEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1
YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKICAgICAgICAg
ICAgICAgICBjaGFpbiA9IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGZfbGlzdDoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzZWxmX2xpc3QiKTsKLSAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3Ry
dWN0dXJlTGlzdDsKLSAgICAgICAgICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJ
ZFNlbGZMaXN0Lmxpc3RTaXplOworICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xp
c3Q6CisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigibGlzdCIpOworICAgICAgICAgICAgICAg
IGxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCJ1bnNldCIpOwpAQCAtMzgyLDE2ICszODEsMTYgQEAgdm9pZCBDb2RlQmxvY2s6OnBy
aW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGV4
ZWMsIGNoYWluLCBpZGVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChzdHJ1Y3R1cmVMaXN0KSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCBs
aXN0ID0gJXA6IFsiLCBzdHJ1Y3R1cmVMaXN0KTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChsaXN0KSB7CisgICAg
ICAgICAgICAgICAgb3V0LnByaW50ZigiLCBsaXN0ID0gJXA6IFsiLCBsaXN0KTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnRmKCIsICIpOwogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIoIik7Ci0gICAgICAg
ICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIsIGV4ZWMsIHN0cnVjdHVyZUxp
c3QtPmxpc3RbaV0uYmFzZS5nZXQoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
c3RydWN0dXJlTGlzdC0+bGlzdFtpXS5jaGFpbi5nZXQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBkdW1wU3RydWN0dXJlKG91dCwgImJhc2UiLCBleGVjLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUo
KSwgaWRlbnQpOworICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC0+YXQoaSkuY2hhaW4oKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGV4ZWMsIHN0cnVjdHVyZUxpc3QtPmxpc3RbaV0u
Y2hhaW4uZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBDaGFpbihv
dXQsIGV4ZWMsIGxpc3QtPmF0KGkpLmNoYWluKCksIGlkZW50KTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIpIik7CiAgICAgICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmNwcAkocmV2aXNpb24gMTY0OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsMTEg
QEAKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTY29wZS5oIgogI2luY2x1ZGUg
IkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgogI2lu
Y2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE2NiwxMyArMTY3
LDExIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICBpZiAo
c3R1YkluZm8tPnJlc2V0QnlHQykKICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCwgdHJ1ZSk7CiAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGxp
c3QgPSAwOwotICAgIGludCBsaXN0U2l6ZSA9IDA7Ci0gICAgaWYgKHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0KSB7Ci0gICAgICAgIGxpc3QgPSBzdHVi
SW5mby0+dS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgbGlzdFNpemUg
PSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemU7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKCFsaXN0LT5saXN0
W2ldLmlzRGlyZWN0KQorICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSAwOworICAg
IGlmIChzdHViSW5mby0+YWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpIHsKKyAg
ICAgICAgbGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRMaXN0Lmxpc3Q7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYg
KGxpc3QtPmF0KGkpLmRvZXNDYWxscygpKQogICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlk
U3RhdHVzKE1ha2VzQ2FsbHMsIHRydWUpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjA2LDE4ICsy
MDUsMTggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5
X2lkX3NlbGZfbGlzdDogewotICAgICAgICBmb3IgKGludCBsaXN0SW5kZXggPSAwOyBsaXN0SW5k
ZXggPCBsaXN0U2l6ZTsgKytsaXN0SW5kZXgpIHsKLSAgICAgICAgICAgIEFTU0VSVChsaXN0LT5s
aXN0W2xpc3RJbmRleF0uaXNEaXJlY3QpOworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9saXN0
OiB7CisgICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlz
dC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgeworICAgICAgICAgICAgQVNTRVJUKCFsaXN0LT5hdChs
aXN0SW5kZXgpLmRvZXNDYWxscygpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0LT5saXN0W2xpc3RJbmRleF0uYmFzZS5nZXQoKTsKKyAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbGlzdC0+YXQobGlzdEluZGV4KS5zdHJ1Y3R1
cmUoKTsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zvcklt
cHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCwgdHJ1ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChsaXN0LT5s
aXN0W2xpc3RJbmRleF0uY2hhaW4uZ2V0KCkpIHsKKyAgICAgICAgICAgIGlmIChsaXN0LT5hdChs
aXN0SW5kZXgpLmNoYWluKCkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbj4gY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigK
LSAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgc3RydWN0dXJlLCBsaXN0LT5saXN0
W2xpc3RJbmRleF0uY2hhaW4uZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgIGxpc3QtPmxpc3Rb
bGlzdEluZGV4XS5jb3VudCkpOworICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBz
dHJ1Y3R1cmUsIGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW4oKSwKKyAgICAgICAgICAgICAgICAg
ICAgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbkNvdW50KCkpKTsKICAgICAgICAgICAgICAgICBp
ZiAoIXJlc3VsdC5jb21wdXRlRm9yQ2hhaW4ocHJvZmlsZWRCbG9jaywgdWlkLCBjaGFpbikpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIHRy
dWUpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorCisjaWYgRU5BQkxFKEpJ
VCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRl
ICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKworR2V0QnlJZEFjY2Vz
czo6R2V0QnlJZEFjY2VzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUg
dHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5zaWduZWQgY2hhaW5Db3Vu
dCkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9jaGFpbkNvdW50KGNoYWluQ291bnQpCisg
ICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fc3R1YlJvdXRp
bmUoc3R1YlJvdXRpbmUpCit7CisgICAgaWYgKGNoYWluKQorICAgICAgICBtX2NoYWluLnNldCh2
bSwgb3duZXIsIGNoYWluKTsKK30KKworR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQor
eworfQorCitHZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGluaXRpYWxTbG93UGF0aCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOworICAg
IAorICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0OworICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8u
YWNjZXNzVHlwZSkgeworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgorICAgICAgICBy
ZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOworICAgICAgICByZXN1bHQubV9zdHJ1Y3R1cmUu
Y29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAg
ICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1h
bmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46CisgICAgICAgIHJlc3VsdC5tX3N0cnVj
dHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJl
KTsKKyAgICAgICAgcmVzdWx0Lm1fY2hhaW4uY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkQ2hh
aW4uY2hhaW4pOworICAgICAgICByZXN1bHQubV9jaGFpbkNvdW50ID0gc3R1YkluZm8udS5nZXRC
eUlkQ2hhaW4uY291bnQ7CisgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YkluZm8u
c3R1YlJvdXRpbmU7CisgICAgICAgIGlmIChzdHViSW5mby51LmdldEJ5SWRDaGFpbi5pc0RpcmVj
dCkKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVTdHViOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXN1bHQubV90eXBlID0gR2V0dGVyOworICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBHZXRCeUlkQWNj
ZXNzOjp2aXNpdFdlYWsoKSBjb25zdAoreworICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6
aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExp
c3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQor
eworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIG1fbGlzdC5hcHBlbmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVj
dHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3QqIFBv
bHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQor
eworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkK
KyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKKyAgICAKKyAgICBB
U1NFUlQoCisgICAgICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9z
ZWxmCisgICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9j
aGFpbgorICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7Cisg
ICAgCisgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGlj
R2V0QnlJZExpc3Qoc3R1YkluZm8pOworICAgIAorICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlz
dChyZXN1bHQpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1BvbHltb3JwaGljR2V0
QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9CisKK01hY3JvQXNzZW1ibGVy
Q29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCisg
ICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAoreworICAgIGlmIChpc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICByZXR1cm4gbV9s
aXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOworfQorCit2b2lkIFBvbHlt
b3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3Mp
Cit7CisgICAgQVNTRVJUKCFpc0Z1bGwoKSk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJl
c2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5yZXNpemUo
bV9saXN0LnNpemUoKSArIDEpOworICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7Cit9CisKK2Jv
b2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
c2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJuIHNpemUo
KSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2l6ZSgpIDw9
IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OmRpZFNlbGZQYXRjaGluZygpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJZEFjY2Vz
czo6U2ltcGxlSW5saW5lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWso
KSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgeworICAgICAg
ICBpZiAoIWF0KGkpLnZpc2l0V2VhaygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBFTkFCTEUoSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKyNk
ZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5j
bHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVk
ZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworc3RydWN0IFN0cnVj
dHVyZVN0dWJJbmZvOworCitjbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3B1YmxpYzoKKyAgICBlbnVt
IEFjY2Vzc1R5cGUgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBTaW1wbGVJbmxpbmUsIC8v
IFRoaXMgaXMgdGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KKyAgICAgICAgU2ltcGxlU3R1Yiwg
Ly8gVGhpcyBpcyBhIHN0dWIuCisgICAgICAgIEdldHRlciwKKyAgICB9OworICAgIAorICAgIEdl
dEJ5SWRBY2Nlc3MoKQorICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorICAgICAgICAsIG1fY2hh
aW5Db3VudCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgR2V0QnlJZEFjY2VzcygKKyAgICAg
ICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiwgU3RydWN0dXJlKiwKKyAgICAgICAgU3RydWN0dXJlQ2hhaW4qID0gMCwgdW5zaWduZWQg
Y2hhaW5Db3VudCA9IDApOworICAgIAorICAgIH5HZXRCeUlkQWNjZXNzKCk7CisgICAgCisgICAg
c3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJ
bmZvJik7CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJ
bnZhbGlkOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsg
fQorICAgIAorICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQor
ICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1
cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJl
dHVybiBtX2NoYWluLmdldCgpOyB9CisgICAgdW5zaWduZWQgY2hhaW5Db3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2hhaW5Db3VudDsgfQorICAgIAorICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91
dGluZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJl
dHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgIH0KKyAgICAKKyAgICBib29sIGRvZXNDYWxs
cygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXI7IH0KKyAgICAKKyAgICBib29sIHZp
c2l0V2VhaygpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7
CisgICAgCisgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgdW5zaWduZWQgbV9jaGFpbkNvdW50
OworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IG1fc3R1YlJvdXRpbmU7Cit9OworCitjbGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAvLyBFaXRoZXIgY3JlYXRl
cyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMg
YWxyZWFkeSBpbgorICAgIC8vIHBsYWNlLgorICAgIHN0YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgflBvbHltb3JwaGljR2V0
QnlJZExpc3QoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3VycmVudFNsb3dQ
YXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3Q7CisgICAgCisgICAg
dm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYpOworICAgIAorICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0KKyAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAgIGJvb2wgaXNGdWxsKCkg
Y29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcg
YW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCisgICAgY29uc3QgR2V0QnlJZEFj
Y2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9CisgICAgY29u
c3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBt
X2xpc3RbaV07IH0KKyAgICAKKyAgICBib29sIGRpZFNlbGZQYXRjaGluZygpIGNvbnN0OyAvLyBB
cmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxpbmU/CisgICAgCisgICAgYm9vbCB2aXNp
dFdlYWsoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwor
ICAgIAorICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAg
ICAKKyAgICBWZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9saXN0OworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gUG9seW1vcnBo
aWNHZXRCeUlkTGlzdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTY0OTcwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjcsMTggKzI3LDE3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIK
IAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKIAotCiBuYW1lc3BhY2Ug
SlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigp
CiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGZfbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBv
bHltb3JwaGljU3RydWN0dXJlcyA9IHUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7Ci0g
ICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgY2FzZSBhY2Nlc3NfZ2V0
X2J5X2lkX2xpc3Q6IHsKKyAgICAgICAgZGVsZXRlIHUuZ2V0QnlJZExpc3QubGlzdDsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKQEAgLTc0
LDkgKzczLDggQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAg
ICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nl
c3NfZ2V0X2J5X2lkX3NlbGZfbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVj
dHVyZUxpc3Q7Ci0gICAgICAgIGlmICghcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT52aXNpdFdlYWso
dS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemUpKQorICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9s
aXN0OiB7CisgICAgICAgIGlmICghdS5nZXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJ
KHJldmlzaW9uIDE2NDk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMiArNDEsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQogCitjbGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0OwogY2xhc3MgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDsKIAogZW51bSBBY2Nlc3NUeXBlIHsK
ICAgICBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYsCiAgICAgYWNjZXNzX2dldF9ieV9pZF9jaGFpbiwK
LSAgICBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdCwKKyAgICBhY2Nlc3NfZ2V0X2J5X2lkX2xp
c3QsCiAgICAgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbCwKICAgICBhY2Nlc3Nf
cHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0LAogICAgIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFj
ZSwKQEAgLTYwLDcgKzYxLDcgQEAgaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5
cGUgYQogICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKLSAgICBjYXNlIGFjY2Vz
c19nZXRfYnlfaWRfc2VsZl9saXN0OgorICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9saXN0Ogog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xMTUsMTMgKzExNiwxMCBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAg
ICB1LmdldEJ5SWRDaGFpbi5pc0RpcmVjdCA9IGlzRGlyZWN0OwogICAgIH0KIAotICAgIHZvaWQg
aW5pdEdldEJ5SWRTZWxmTGlzdChQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHN0cnVj
dHVyZUxpc3QsIGludCBsaXN0U2l6ZSwgYm9vbCBkaWRTZWxmUGF0Y2hpbmcgPSBmYWxzZSkKKyAg
ICB2b2lkIGluaXRHZXRCeUlkTGlzdChQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0KQogICAg
IHsKLSAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OwotCi0g
ICAgICAgIHUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3QgPSBzdHJ1Y3R1cmVMaXN0Owot
ICAgICAgICB1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSA9IGxpc3RTaXplOwotICAgICAgICB1
LmdldEJ5SWRTZWxmTGlzdC5kaWRTZWxmUGF0Y2hpbmcgPSBkaWRTZWxmUGF0Y2hpbmc7CisgICAg
ICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q7CisgICAgICAgIHUuZ2V0QnlJ
ZExpc3QubGlzdCA9IGxpc3Q7CiAgICAgfQogCiAgICAgLy8gUHV0QnlJZCoKQEAgLTIzMiwxNCAr
MjMwLDggQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIGJvb2wgaXNE
aXJlY3QgOiAxOwogICAgICAgICB9IGdldEJ5SWRDaGFpbjsKICAgICAgICAgc3RydWN0IHsKLSAg
ICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogc3RydWN0dXJlTGlzdDsK
LSAgICAgICAgICAgIGludCBsaXN0U2l6ZSA6IDMxOwotICAgICAgICAgICAgYm9vbCBkaWRTZWxm
UGF0Y2hpbmcgOiAxOwotICAgICAgICB9IGdldEJ5SWRTZWxmTGlzdDsKLSAgICAgICAgc3RydWN0
IHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogc3RydWN0dXJl
TGlzdDsKLSAgICAgICAgICAgIGludCBsaXN0U2l6ZTsKLSAgICAgICAgfSBnZXRCeUlkUHJvdG9M
aXN0OworICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdDsKKyAgICAgICAg
fSBnZXRCeUlkTGlzdDsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFycmll
ckJhc2U8U3RydWN0dXJlPiBwcmV2aW91c1N0cnVjdHVyZTsKICAgICAgICAgICAgIFdyaXRlQmFy
cmllckJhc2U8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE2NDk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCiAjaW5jbHVk
ZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIK
ICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKQEAgLTIxOSwxMyArMjIwLDEx
IEBAIHN0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmUKICAgICBsaW5rUmVz
dG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBm
YWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
KTsKIH0KIAotZW51bSBQcm90b0NoYWluR2VuZXJhdGlvblJlc3VsdCB7Ci0gICAgUHJvdG9DaGFp
bkdlbmVyYXRpb25GYWlsZWQsCi0gICAgUHJvdG9DaGFpbkdlbmVyYXRpb25TdWNjZWVkZWQKLX07
Ci0KLXN0YXRpYyBQcm90b0NoYWluR2VuZXJhdGlvblJlc3VsdCBnZW5lcmF0ZVByb3RvQ2hhaW5B
Y2Nlc3NTdHViKEV4ZWNTdGF0ZSosIGNvbnN0IFByb3BlcnR5U2xvdCYsIGNvbnN0IElkZW50aWZp
ZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90LCBQcm9wZXJ0
eU9mZnNldCwgU3RydWN0dXJlKiwgQ29kZUxvY2F0aW9uTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVs
LCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JikgV0FSTl9VTlVTRURfUkVUVVJOOwotc3RhdGljIFBy
b3RvQ2hhaW5HZW5lcmF0aW9uUmVzdWx0IGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25M
YWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkK
K3N0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZFN0dWIoCisgICAgRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwK
KyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwg
c2l6ZV90IGNvdW50LAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwKKyAgICBDb2RlTG9jYXRpb25M
YWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CkBAIC0yMzUsOCArMjM0LDcg
QEAgc3RhdGljIFByb3RvQ2hhaW5HZW5lcmF0aW9uUmVzdWx0IGdlbmVyYQogICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKTsK
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC51
c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CiAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRj
aCA9IHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNj
cmF0Y2ggJiYgIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQotICAgICAgICByZXR1cm4gUHJvdG9D
aGFpbkdlbmVyYXRpb25GYWlsZWQ7CisgICAgUkVMRUFTRV9BU1NFUlQoIW5lZWRUb1Jlc3RvcmVT
Y3JhdGNoIHx8IHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKTsKICAgICAKICAgICBDQ2FsbEhlbHBl
cnMgc3R1YkppdCgmZXhlYy0+dm0oKSwgZXhlYy0+Y29kZUJsb2NrKCkpOwogICAgIGlmIChuZWVk
VG9SZXN0b3JlU2NyYXRjaCkgewpAQCAtMjYxLDQxICsyNTksNTEgQEAgc3RhdGljIFByb3RvQ2hh
aW5HZW5lcmF0aW9uUmVzdWx0IGdlbmVyYQogICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50
Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNv
ZGVCbG9jaykpOwogCiAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwot
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7CiAgICAgSlNP
YmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291
bnQ7ICsraSwgKytpdCkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1
Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgIFN0cnVjdHVyZSogcHJv
dG9TdHJ1Y3R1cmUgPSBwcm90b09iamVjdC0+c3RydWN0dXJlKCk7Ci0gICAgICAgIGlmIChwcm90
b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMo
KSkKLSAgICAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgICAg
IGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgIHByb3RvT2JqZWN0LCBw
cm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAg
IGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+
Z2V0KCk7CisgICAgaWYgKGNoYWluKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
KiBpdCA9IGNoYWluLT5oZWFkKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b3VudDsgKytpLCArK2l0KSB7CisgICAgICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1
cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7CisgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHByb3RvU3RydWN0dXJlID0gcHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpOworICAgICAg
ICAgICAgaWYgKHByb3RvU3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5Rmly
ZXNXYXRjaHBvaW50cygpKQorICAgICAgICAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRG
b3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29k
ZUJsb2NrKSk7CisgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAg
ICAgICAgICAgICAgcHJvdG9PYmplY3QsIHByb3RvU3RydWN0dXJlLCBjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBzdHViSml0LAorICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOworICAgICAgICB9CiAgICAg
fQogICAgIAogICAgIGJvb2wgaXNBY2Nlc3NvciA9IHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8
fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7Ci0gICAgaWYgKGlzQWNjZXNzb3IpCi0gICAgICAg
IHN0dWJKaXQubW92ZShiYXNlR1BSLCBzY3JhdGNoR1BSKTsKLQorICAgIAorICAgIEdQUlJlZyBi
YXNlRm9yQWNjZXNzR1BSOworICAgIGlmIChjaGFpbikgeworICAgICAgICBzdHViSml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7CisgICAgfSBlbHNlCisgICAg
ICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBiYXNlR1BSOworICAgIAorICAgIEdQUlJlZyBsb2FkZWRW
YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkpIHsKLSAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpIHsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQocHJvdG9PYmplY3QtPmxvY2F0aW9u
Rm9yT2Zmc2V0KG9mZnNldCksIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHBy
b3RvT2JqZWN0LT5sb2NhdGlvbkZvck9mZnNldChvZmZzZXQpKSwgcmVzdWx0R1BSKTsKLSAgICAg
ICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVz
dWx0VGFnR1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YnV0dGVyZmx5QWRkcmVz
cygpLCByZXN1bHRHUFIpOworICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisg
ICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHJlc3VsdEdQUjsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSBzY3JhdGNoR1BSOworICAgICAgICAKKyAgICAgICAg
R1BSUmVnIHN0b3JhZ2VHUFI7CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQor
ICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGJhc2VGb3JBY2Nlc3NHUFI7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VGb3JBY2Nlc3NHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGxvYWRlZFZhbHVl
R1BSKTsKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKKyAgICAgICAg
fQorICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3R1YkppdC5sb2Fk
NjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShv
ZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOwotI2Vs
aWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5C
dXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpLCBsb2FkZWRWYWx1ZUdQUik7
CisjZWxzZQorICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgVGFnT2Zmc2V0KSwgcmVz
dWx0VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFBheWxvYWRPZmZz
ZXQpLCBsb2FkZWRWYWx1ZUdQUik7CiAjZW5kaWYKLSAgICAgICAgfQogICAgIH0KIAogICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7CkBAIC0zMDQsMTQgKzMxMiwxNCBAQCBz
dGF0aWMgUHJvdG9DaGFpbkdlbmVyYXRpb25SZXN1bHQgZ2VuZXJhCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKICAgICBpZiAoaXNBY2Nlc3NvcikgewogICAgICAgICBp
ZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7Ci0gICAgICAgICAgICBzdHViSml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgbG9hZGVkVmFs
dWVHUFIpOwogICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25DYWxsR2V0
dGVyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRW5jb2RlZEpTVmFsdWUgKCpH
ZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
ICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihwcm90b09iamVjdCksIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAgICAgICAgIHN0dWJKaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKICNlbHNl
Ci0gICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdCksIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAgICAgICAgIHN0dWJKaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKICNlbmRpZgogICAgICAg
ICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigp
KTsKICAgICAgICAgfQpAQCAtMzQ5LDkgKzM1Nyw4IEBAIHN0YXRpYyBQcm90b0NoYWluR2VuZXJh
dGlvblJlc3VsdCBnZW5lcmEKICAgICAKICAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVf
Rk9SX1NUVUIoCiAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAg
ICAgKCJQcm90b3R5cGUgY2hhaW4gYWNjZXNzIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAi
LAorICAgICAgICAoIkdldCBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCiAg
ICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN1Y2Nlc3NM
YWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgcmV0dXJuIFByb3RvQ2hhaW5HZW5lcmF0
aW9uU3VjY2VlZGVkOwogfQogCiBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
QEAgLTQ2MywxMCArNDcwLDExIEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3Rh
dGUqIGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3Rv
dHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICBpZiAoZ2Vu
ZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzbG90LCBwcm9wZXJ0eU5hbWUsIHN0dWJJ
bmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwKLSAgICAgICAgc3RydWN0dXJlLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8u
c3R1YlJvdXRpbmUpID09IFByb3RvQ2hhaW5HZW5lcmF0aW9uRmFpbGVkKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZ2VuZXJhdGVHZXRCeUlkU3R1YigKKyAgICAgICAgZXhlYywgc2xvdCwg
cHJvcGVydHlOYW1lLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0
cnVjdHVyZSwKKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKKyAgICAgICAgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9T
bG93Q2FzZSksCisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKICAgICAKICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICByZXBsYWNlV2l0aEp1bXAo
cmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKTsKQEAgLTQ4NSw0OSArNDkzLDExIEBAIHZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRl
KiBleGVjLCBKU1YKICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CiB9CiAKLXN0YXRpYyBi
b29sIGdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCgKLSAgICBWTSogdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiYgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBpbnQmIGxpc3RJ
bmRleCwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCYgc2xvd0Nhc2UpCi17Ci0gICAgc2xvd0Nhc2Ug
PSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfdW5zZXQpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0
dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJ
ZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCwgZmFsc2UpOwotICAgICAgICBs
aXN0SW5kZXggPSAwOwotICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nl
c3NfZ2V0X2J5X2lkX3NlbGYpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0
dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoc2xvd0Nhc2UpLCBz
dHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwot
ICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdCwgMSwgdHJ1ZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9IDE7Ci0gICAgfSBlbHNlIGlmIChz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoISFzdHViSW5mby5zdHViUm91dGluZSk7Ci0gICAgICAgIHNsb3dDYXNl
ID0gQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkp
OwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1Yklu
Zm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCBzdHViSW5mby51
LmdldEJ5SWRDaGFpbi5pc0RpcmVjdCwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY291bnQpOwot
ICAgICAgICBzdHViSW5mby5zdHViUm91dGluZS5jbGVhcigpOwotICAgICAgICBzdHViSW5mby5p
bml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwgZmFsc2UpOwot
ICAgICAgICBsaXN0SW5kZXggPSAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOwot
ICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxm
TGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmdldEJ5
SWRTZWxmTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJl
bChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAobGlzdEluZGV4ID09IFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyB2b2lkIHBhdGNoSnVtcFRvR2V0QnlJ
ZFN0dWIoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
SklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQogewotICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJ
bmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOworICAgIFJFTEVB
U0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KTsK
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICBpZiAoc3R1
YkluZm8udS5nZXRCeUlkU2VsZkxpc3QuZGlkU2VsZlBhdGNoaW5nKSB7CisgICAgaWYgKHN0dWJJ
bmZvLnUuZ2V0QnlJZExpc3QubGlzdC0+ZGlkU2VsZlBhdGNoaW5nKCkpIHsKICAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoCiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvSnVtcCksCkBAIC01NTAsMTU4ICs1MjAsNiBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5
SURMaXN0KEV4ZWNTdGF0CiAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwo
KTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKICAg
ICAKLSAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAgICAgICBpZiAo
IXN0dWJJbmZvLnBhdGNoLnJlZ2lzdGVyc0ZsdXNoZWQpIHsKLSAgICAgICAgICAgIC8vIFdlIGNh
bm5vdCBkbyBhcyBtdWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBub3Qg
Zmx1c2hlZCBwcmlvciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCi0gICAgICAgICAg
ICAvLyBub24tVmFsdWUgY2FjaGVkIHByb3BlcnRpZXMgcmVxdWlyZSBwbGFudGluZyBjYWxscywg
d2hpY2ggcmVxdWlyZXMgcmVnaXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVzaGVkLiBUaHVzLAotICAg
ICAgICAgICAgLy8gaWYgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1W
YWx1ZSBjYWNoaW5nLgotICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7
Ci0gICAgICAgIGludCBsaXN0SW5kZXg7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dD
YXNlOwotCi0gICAgICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KHZtLCBjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc2xv
d0Nhc2UpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgc3R1
YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemUrKzsKLSAgICAgICAgCi0gICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BS
KTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYK
LSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2gudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3Rl
clNldChzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAg
IAotICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAg
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0ID0gYnJhbmNoU3RydWN0
dXJlKHN0dWJKaXQsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpOwotICAgICAgICAKLSAgICAg
ICAgLy8gVGhlIHN0cmF0ZWd5IHdlIHVzZSBmb3Igc3R1YnMgaXMgYXMgZm9sbG93czoKLSAgICAg
ICAgLy8gMSkgQ2FsbCBERkcgaGVscGVyIHRoYXQgY2FsbHMgdGhlIGdldHRlci4KLSAgICAgICAg
Ly8gMikgQ2hlY2sgaWYgdGhlcmUgd2FzIGFuIGV4Y2VwdGlvbiwgYW5kIGlmIHRoZXJlIHdhcywg
Y2FsbCB5ZXQgYW5vdGhlcgotICAgICAgICAvLyAgICBoZWxwZXIuCi0gICAgICAgIAotICAgICAg
ICBib29sIGlzRGlyZWN0ID0gZmFsc2U7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9w
ZXJhdGlvbkNhbGw7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhhbmRsZXJDYWxsOwot
ICAgICAgICBGdW5jdGlvblB0ciBvcGVyYXRpb25GdW5jdGlvbjsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbG90LmlzQ2FjaGVh
YmxlR2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogVGhpcyBjb2RlIHNob3VsZG4ndCBiZSBhc3N1bWluZyB0aGF0IHRoZSB0b3Agb2Yg
c3RhY2sgaXMgc2V0IHVwIGZvciBKU0MKLSAgICAgICAgICAgIC8vIEpJVC1zdHlsZSBDIGNhbGxz
LCBzaW5jZSB3ZSBtYXkgYmUgY3VycmVudGx5IG9uIHRvcCBvZiBhbiBGVEwgZnJhbWUuCi0gICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NzEx
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZUdQUiAhPSBzY3JhdGNoR1BSKTsKLSAgICAgICAg
ICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hl
ZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAg
ICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwot
I2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IG9wZXJhdGlvbkNh
bGxHZXR0ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgICAgICAgICAgLy8gRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGJhc2VHUFIsIGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGlkZW50Lmlt
cGwoKSkpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShiYXNlR1BSLCBiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihpZGVudC5p
bXBsKCkpKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIG9wZXJhdGlvbkZ1bmN0aW9uID0gRnVu
Y3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBj
YWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCi0gICAgICAgICAgICAv
LyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4gSXQganVzdCBzbyBoYXBwZW5zIHRvIGJlIHRo
ZSBwbGFjZSB0aGF0IHdlIGFyZSBhdAotICAgICAgICAgICAgLy8gcmlnaHQgbm93IQotICAgICAg
ICAgICAgc3R1YkppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoZXhlYy0+bG9jYXRpb25Bc1Jhd0JpdHMoKSksCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNr
OjpBcmd1bWVudENvdW50KSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
cmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0cyhyZXN1
bHRHUFIsIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHVi
Sml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hl
Y2spOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKLSAgICAgICAgICAgIGhhbmRsZXJDYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgICAg
ICBzdHViSml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoYmFzZUdQ
UiA9PSByZXN1bHRUYWdHUFIpIHsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgICAgICB9Ci0j
ZW5kaWYKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAg
ICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNl
dFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKLSNlbHNl
Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
cmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3Vs
dFRhZ0dQUik7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNl
dCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBz
dWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgICAgICBpc0RpcmVjdCA9IHRydWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQs
IGNvZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHdyb25nU3Ry
dWN0LCBzbG93Q2FzZSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9Eb25lKSk7Ci0gICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uRnVuY3Rpb24pOwotICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlcik7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1
YlJvdXRpbmUgPQotICAgICAgICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgICAg
ICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVC
bG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgKCJHZXRCeUlkIHBvbHlt
b3JwaGljIGxpc3QgYWNjZXNzIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVz
cygpKSksCi0gICAgICAgICAgICAgICAgKnZtLAotICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZUdldHRl
cigpIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSk7Ci0gICAgICAgIAotICAgICAgICBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7Ci0g
ICAgICAgIAotICAgICAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGJhc2VW
YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlD
YWNoaW5nKCkKLSAgICAgICAgfHwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNE
aWN0aW9uYXJ5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKICAgICBpZiAoIXN0dWJJ
bmZvLnBhdGNoLnJlZ2lzdGVyc0ZsdXNoZWQpIHsKICAgICAgICAgLy8gV2UgY2Fubm90IGRvIGFz
IG11Y2ggaW5saW5lIGNhY2hpbmcgaWYgdGhlIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkIHBy
aW9yIHRvIHRoaXMgR2V0QnlJZC4gSW4gcGFydGljdWxhciwKICAgICAgICAgLy8gbm9uLVZhbHVl
IGNhY2hlZCBwcm9wZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNoIHJlcXVpcmVz
IHJlZ2lzdGVycyB0byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywKQEAgLTcxMCwzNCArNTI4LDM4
IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3Rv
dHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNlKCks
IGlkZW50LCBvZmZzZXQpOwotICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVD
aGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgU3RydWN0dXJlQ2hh
aW4qIHByb3RvdHlwZUNoYWluID0gMDsKKyAgICBzaXplX3QgY291bnQgPSAwOwogICAgIAotICAg
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
OwotICAgIGludCBsaXN0SW5kZXg7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2U7Ci0g
ICAgaWYgKCFnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qodm0sIGNvZGVCbG9jaywgc3R1Yklu
Zm8sIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBzbG93Q2FzZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkg
eworICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8o
KS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQorICAgICAgICAgICAgfHwgYmFzZVZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWlu
Rm9yQ2hhaW5BY2Nlc3MoCisgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJh
c2UoKSwgaWRlbnQsIG9mZnNldCk7CisgICAgICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90
eXBlQ2hhaW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHByb3RvdHlwZUNo
YWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICB9CiAgICAgCi0gICAg
c3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CisgICAgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1YkluZm8p
OwogICAgIAogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgCi0g
ICAgaWYgKGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc2xvdCwgaWRlbnQsIHN0
dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLAorICAgIGdl
bmVyYXRlR2V0QnlJZFN0dWIoCisgICAgICAgIGV4ZWMsIHNsb3QsIGlkZW50LCBzdHViSW5mbywg
cHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwKICAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9Eb25lKSwKLSAgICAgICAgc2xvd0Nhc2UsIHN0dWJSb3V0aW5lKSA9PSBQcm90b0NoYWlu
R2VuZXJhdGlvbkZhaWxlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJv
dXRpbmUpOwogICAgIAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5k
ZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBz
dHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSwgY291bnQp
OworICAgIGxpc3QtPmFkZEFjY2VzcyhHZXRCeUlkQWNjZXNzKAorICAgICAgICAqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgp
ID8gR2V0QnlJZEFjY2Vzczo6U2ltcGxlU3R1YiA6IEdldEJ5SWRBY2Nlc3M6OkdldHRlciwKKyAg
ICAgICAgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50KSk7CiAg
ICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHVi
Um91dGluZS5nZXQoKSk7CiAgICAgCi0gICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJ
Q19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsKKyAgICByZXR1cm4gIWxpc3QtPmlzRnVsbCgpOwogfQog
CiB2b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKQEAgLTEyNDYsNyArMTA2OCw3IEBAIHN0
YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9n
cmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5LgogICAgICAgICAgICAgbGlzdCA9IFBvbHlt
b3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotICAgICAgICAgICAg
CisKICAgICAgICAgICAgIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgICAgICAgICBl
eGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCiAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXR0ZXIuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXR0ZXIuanMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dldHRlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitmdW5jdGlvbiBmb28obykgeworICAg
IHJldHVybiBvLmYgKyBvLmsgKiAxMDAwOworfQorCitub0lubGluZShmb28pOworCitmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgdmFyIG8gPSB7Z186IDV9OworICAgIG8uX19k
ZWZpbmVHZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gNDIgKyB0aGlzLmdfOyB9KTsK
KyAgICBvLl9fZGVmaW5lR2V0dGVyX18oImciLCBmdW5jdGlvbigpIHsgcmV0dXJuIDQzICsgdGhp
cy5nXzsgfSk7CisgICAgby5fX2RlZmluZUdldHRlcl9fKCJoIiwgZnVuY3Rpb24oKSB7IHJldHVy
biA0NCArIHRoaXMuZ187IH0pOworICAgIG8uX19kZWZpbmVHZXR0ZXJfXygiaSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gNDUgKyB0aGlzLmdfOyB9KTsKKyAgICBvLl9fZGVmaW5lR2V0dGVyX18oImoi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIDQ2ICsgdGhpcy5nXzsgfSk7CisgICAgby5fX2RlZmluZUdl
dHRlcl9fKCJrIiwgZnVuY3Rpb24oKSB7IHJldHVybiA0NyArIHRoaXMuZ187IH0pOworICAgIHZh
ciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPSAoNDIgKyA1KSArIDEwMDAgKiAo
NDcgKyA1KSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owor
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wb2x5bW9ycGhpYy1w
cm90b3R5cGUtYWNjZXNzZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9wb2x5bW9ycGhpYy1wcm90b3R5cGUtYWNjZXNzZXMuanMJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3BvbHltb3JwaGljLXBy
b3RvdHlwZS1hY2Nlc3Nlcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACitmdW5j
dGlvbiBGb28oKSB7Cit9CitGb28ucHJvdG90eXBlLmYgPSA0MjsKK0Zvby5wcm90b3R5cGUuZyA9
IDQzOworRm9vLnByb3RvdHlwZS5oID0gNDQ7CitGb28ucHJvdG90eXBlLmkgPSA0NTsKK0Zvby5w
cm90b3R5cGUuaiA9IDQ2OworRm9vLnByb3RvdHlwZS5rID0gNDc7CisKK2Z1bmN0aW9uIEJhcigp
IHsKK30KK0Jhci5wcm90b3R5cGUuayA9IDIzOworQmFyLnByb3RvdHlwZS5mID0gMjQ7CisKK2Z1
bmN0aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZiArIG8uazsKK30KKworbm9JbmxpbmUoZm9v
KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBm
b28obmV3IEZvbygpKTsKKyAgICBpZiAocmVzdWx0ICE9IDg5KQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQgZm9yIEZvbzogIiArIHJlc3VsdDsKKyAgICByZXN1bHQgPSBmb28obmV3
IEJhcigpKTsKKyAgICBpZiAocmVzdWx0ICE9IDQ3KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQgZm9yIEJhcjogIiArIHJlc3VsdDsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvcHJvdG90eXBlLWdldHRlci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3RvdHlwZS1nZXR0ZXIuanMJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3RvdHlwZS1n
ZXR0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMSBAQAorZnVuY3Rpb24gRm9vKGcp
IHsKKyAgICB0aGlzLmdfID0gZzsKK30KK0Zvby5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygi
ZiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5nXyArIDMyOyB9KTsKK0Zvby5wcm90b3R5cGUu
X19kZWZpbmVHZXR0ZXJfXygiZyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5nXyArIDMzOyB9
KTsKK0Zvby5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygiaCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gdGhpcy5nXyArIDM0OyB9KTsKK0Zvby5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygiaSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5nXyArIDM1OyB9KTsKK0Zvby5wcm90b3R5cGUuX19k
ZWZpbmVHZXR0ZXJfXygiaiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5nXyArIDM2OyB9KTsK
K0Zvby5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygiayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
dGhpcy5nXyArIDM3OyB9KTsKKworZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mICsg
by5rICogMTAwMDsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28obmV3IEZvbyg1KSk7CisgICAgaWYgKHJl
c3VsdCAhPSAoMzIgKyA1KSArICgzNyArIDUpICogMTAwMCkKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9zaW1wbGUtcHJvdG90eXBlLWFjY2Vzc2VzLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2ltcGxlLXByb3RvdHlwZS1hY2Nl
c3Nlcy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3Mvc2ltcGxlLXByb3RvdHlwZS1hY2Nlc3Nlcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIwIEBACitmdW5jdGlvbiBGb28oKSB7Cit9CitGb28ucHJvdG90eXBlLmYgPSA0MjsKK0Zvby5w
cm90b3R5cGUuZyA9IDQzOworRm9vLnByb3RvdHlwZS5oID0gNDQ7CitGb28ucHJvdG90eXBlLmkg
PSA0NTsKK0Zvby5wcm90b3R5cGUuaiA9IDQ2OworRm9vLnByb3RvdHlwZS5rID0gNDc7CisKK2Z1
bmN0aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZiArIG8uazsKK30KKworbm9JbmxpbmUoZm9v
KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBm
b28obmV3IEZvbygpKTsKKyAgICBpZiAocmVzdWx0ICE9IDg5KQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQgZm9yIEZvbzogIiArIHJlc3VsdDsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226393</attachid>
            <date>2014-03-10 23:48:55 -0700</date>
            <delta_ts>2014-03-11 09:45:19 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59981</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY1NDMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBA
CisyMDE0LTAzLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2V0QnlJZCBsaXN0IGNhY2hpbmcgc2hvdWxkIHVzZSBzb21ldGhpbmcgb2JqZWN0LW9yaWVudGVk
IHJhdGhlciB0aGFuIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5Nzc4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBbHNvIGRlZHVwbGlj
YXRlIHRoZSBHZXRCeUlkIGdldHRlciBjYWxsIGNhY2hpbmcuIEFsc28gYWRkIHNvbWUgc21hbGwg
dGVzdHMgZm9yCisgICAgICAgIGdldCBzdHVicy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY2hh
bmdlIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBjb2RlIGludm9sdmVkIGluIEdldEJ5SWQgYWNjZXNz
IGNhY2hpbmcgYW5kIGl0CisgICAgICAgIGNyZWF0ZXMgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY2Fu
IHNlcnZlIGFzIGFuIGVsZWdhbnQgc2NhZmZvbGQgZm9yIGludHJvZHVjaW5nIG90aGVyCisgICAg
ICAgIGtpbmRzIG9mIGNhY2hlcyBvciBpbXByb3ZpbmcgY3VycmVudCBjYWNoaW5nIHN0eWxlcy4g
SXQgd2lsbCBkZWZpbml0ZWx5IG1ha2UgZ2V0dGVyCisgICAgICAgIHBlcmZvcm1hbmNlIGltcHJv
dmVtZW50cyBlYXNpZXIgdG8gaW1wbGVtZW50LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVz
KToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9Q
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRB
Y2Nlc3M6OkdldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp+R2V0
QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnZpc2l0V2Vhayk6CisgICAg
ICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3Qp
OgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKToKKyAgICAgICAg
KEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExpc3QpOgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJn
ZXQpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRBY2Nlc3MpOgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwpOgorICAgICAgICAo
SlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwpOgorICAgICAgICAoSlND
OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcpOgorICAgICAgICAoSlND
OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWspOgorICAgICAgICAqIGJ5dGVjb2Rl
L1BvbHltb3JwaGljR2V0QnlJZExpc3QuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRB
Y2Nlc3M6OkdldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjppc1Nl
dCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6Om9wZXJhdG9yISk6CisgICAgICAgIChK
U0M6OkdldEJ5SWRBY2Nlc3M6OnR5cGUpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpz
dHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpjaGFpbik6CisgICAgICAg
IChKU0M6OkdldEJ5SWRBY2Nlc3M6OmNoYWluQ291bnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlk
QWNjZXNzOjpzdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmRvZXND
YWxscyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzRW1wdHkpOgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpzaXplKToKKyAgICAgICAgKEpT
Qzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YXQpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0OjpvcGVyYXRvcltdKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAg
ICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAoSlNDOjppc0dl
dEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5
SWRMaXN0KToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmdlbmVy
YXRlR2V0QnlJZFN0dWIpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAg
ICAoSlNDOjpwYXRjaEp1bXBUb0dldEJ5SWRTdHViKToKKyAgICAgICAgKEpTQzo6dHJ5QnVpbGRH
ZXRCeUlETGlzdCk6CisgICAgICAgIChKU0M6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAgICAg
ICAqIHRlc3RzL3N0cmVzcy9nZXR0ZXIuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAg
ICAgKC5vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcG9seW1vcnBoaWMtcHJvdG90eXBlLWFj
Y2Vzc2VzLmpzOiBBZGRlZC4KKyAgICAgICAgKEZvbyk6CisgICAgICAgIChCYXIpOgorICAgICAg
ICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcHJvdG90eXBlLWdldHRlci5qczogQWRk
ZWQuCisgICAgICAgIChGb28pOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3Mvc2ltcGxlLXByb3RvdHlwZS1hY2Nlc3Nlcy5qczogQWRkZWQuCisgICAgICAgIChGb28pOgor
ICAgICAgICAoZm9vKToKKwogMjAxNC0wMy0xMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9A
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0eXBvIGluIEVYQ0xVREVEX1NPVVJDRV9GSUxFX05B
TUVTX2lwaG9uZW9zLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMTY1NDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCiAgICAgYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKICAgICBieXRlY29kZS9PcGNvZGUuY3Bw
CisgICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKICAgICBieXRlY29kZS9Q
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAogICAgIGJ5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0
cy5jcHAKICAgICBieXRlY29kZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShy
ZXZpc2lvbiAxNjU0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTc1LDYgKzE3NSw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cmVjaXNlSnVtcFRhcmdldHMuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvagkocmV2aXNpb24gMTY1NDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMzMzLDYgKzMzMyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wY29kZS5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljUHV0QnlJZExp
c3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJvZmlsZWRD
b2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCIgLz4KQEAgLTg2MCw2ICs4
NjEsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcT3Bjb2RlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPcGVy
YW5kcy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBo
aWNHZXRCeUlkTGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByZWNpc2VKdW1wVGFyZ2V0cy5oIiAv
PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2NTQzMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNiArMjczLDggQEAKIAkJMEY0ODUzMkExODdE
RkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ4NTMyNjE4N0RGREVDMDA4M0I2ODcgLyogRlRM
UmVjb3ZlcnlPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0Qjk0REMx
N0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyog
VHlwZWRBcnJheUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjRDRUQ1RTE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAg
Ki87IH07CisJCTBGNENFRDVGMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRD
RUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEYyOURGMThCNkFE
MUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERDE4
QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
Y3BwICovOyB9OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVj
dXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNTU0MUIxMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFs
UG9pbnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjU1NDFBRjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuY3BwICovOyB9OwpA
QCAtMTc4OCw2ICsxNzkwLDggQEAKIAkJMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJl
Y292ZXJ5T3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFJlY292
ZXJ5T3Bjb2RlLmg7IHBhdGggPSBmdGwvRlRMUmVjb3ZlcnlPcGNvZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3Zp
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3Zp
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAw
REQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNENFRDVDMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGljR2V0QnlJZExp
c3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRDRUQ1RDE4Q0VBN0FCMDA4
MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNEYyOUREMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHBhdGggPSBk
ZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGlj
RXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgcGF0aCA9
IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjU1NDFBRjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBv
aW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlY2lhbFBv
aW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDYwMCw3ICs0NjA0LDYg
QEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk2NTI5RkIzMTE4QjJEOTk5MDBDNjEx
MDIgLyogQnl0ZWNvZGVMaXN0Lmpzb24gKi8sCiAJCQkJMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1
IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwICovLAogCQkJCTBGODMzNUI1MTYzOUMxRTMw
MDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8sCiAJCQkJMEY2Mzk0NTExNUQw
NzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi8sCkBAIC00NjA4LDYgKzQ2MTEsNyBA
QAogCQkJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3Bw
ICovLAogCQkJCUMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2su
aCAqLywKIAkJCQkwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9u
cy5oICovLAorCQkJCTY1MjlGQjMxMThCMkQ5OTkwMEM2MTEwMiAvKiBCeXRlY29kZUxpc3QuanNv
biAqLywKIAkJCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzLmNwcCAqLywKIAkJCQlDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzLmggKi8sCiAJCQkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLywKQEAgLTQ2NjQsNiArNDY2OCw4IEBA
CiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8sCiAJCQkJQTcw
NDQ3RTkxN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oICovLAogCQkJCTBGMzRC
MTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAq
LywKKwkJCQkwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5jcHAgKi8sCisJCQkJMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCAqLywKIAkJCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5jcHAgKi8sCiAJCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBv
bHltb3JwaGljUHV0QnlJZExpc3QuaCAqLywKIAkJCQkwRjk4MjA1RDE2QkZFMzdGMDAyNDBEMDIg
LyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCAqLywKQEAgLTUxMTUsNiArNTEyMSw3IEBACiAJCQkJ
MEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8q
IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNENFRDVG
MThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzdCMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQ
bGFuLmggaW4gSGVhZGVycyAqLywKQEAgLTY1NTAsNiArNjU1Nyw3IEBACiAJCQkJMEYwQjgzOUMx
NEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
Q0VGQUNEMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RTVBQjM3MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGNENFRDVFMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAv
KiBMb29rdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcy
IC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCNzIzQjIx
MkQ3REE0NjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNjU0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIkxMSW50
RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgogI2lu
Y2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKICNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNw
YWNlLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgpAQCAtMzQxLDggKzM0Miw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgICAgIFN0cnVjdHVyZSog
YmFzZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVj
dHVyZSA9IDA7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSAwOwotICAgICAg
ICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0ID0gMDsK
LSAgICAgICAgICAgIGludCBsaXN0U2l6ZSA9IDA7CisgICAgICAgICAgICBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0KiBsaXN0ID0gMDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChz
dHViSW5mby5hY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRf
c2VsZjoKQEAgLTM1NCwxMCArMzU0LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENh
Y2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51Lmdl
dEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwogICAgICAgICAgICAgICAgIGNo
YWluID0gc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0Ogot
ICAgICAgICAgICAgICAgIG91dC5wcmludGYoInNlbGZfbGlzdCIpOwotICAgICAgICAgICAgICAg
IHN0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0
OwotICAgICAgICAgICAgICAgIGxpc3RTaXplID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Qu
bGlzdFNpemU7CisgICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnRmKCJsaXN0Iik7CisgICAgICAgICAgICAgICAgbGlzdCA9IHN0
dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgogICAgICAgICAgICAgICAgIG91dC5wcmludGYoInVu
c2V0Iik7CkBAIC0zODIsMTYgKzM4MSwxNiBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlk
Q2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgZXhlYywgY2hhaW4s
IGlkZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0
cnVjdHVyZUxpc3QpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsIGxpc3QgPSAlcDog
WyIsIHN0cnVjdHVyZUxpc3QpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGlzdFNpemU7ICsraSkgeworICAgICAgICAgICAgaWYgKGxpc3QpIHsKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnRmKCIsIGxpc3QgPSAlcDogWyIsIGxpc3QpOworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7
CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIigiKTsKLSAgICAgICAgICAgICAgICAg
ICAgZHVtcFN0cnVjdHVyZShvdXQsICJiYXNlIiwgZXhlYywgc3RydWN0dXJlTGlzdC0+bGlzdFtp
XS5iYXNlLmdldCgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVM
aXN0LT5saXN0W2ldLmNoYWluLmdldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1
Y3R1cmUob3V0LCAiYmFzZSIsIGV4ZWMsIGxpc3QtPmF0KGkpLnN0cnVjdHVyZSgpLCBpZGVudCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LT5hdChpKS5jaGFpbigpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZHVtcENoYWluKG91dCwgZXhlYywgc3RydWN0dXJlTGlzdC0+bGlzdFtpXS5jaGFpbi5nZXQo
KSwgaWRlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgZXhlYywg
bGlzdC0+YXQoaSkuY2hhaW4oKSwgaWRlbnQpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludGYoIikiKTsKICAgICAgICAgICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3Bw
CShyZXZpc2lvbiAxNjU0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMSBAQAogI2luY2x1
ZGUgIkdldEJ5SWRTdGF0dXMuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1Njb3BlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRh
LmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCiAjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTc0LDEzICsxNzUsMTEgQEAgR2V0
QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgIGlmIChzdHViSW5mby0+
cmVzZXRCeUdDKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0
cnVlKTsKIAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogbGlzdCA9IDA7Ci0g
ICAgaW50IGxpc3RTaXplID0gMDsKLSAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNj
ZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpIHsKLSAgICAgICAgbGlzdCA9IHN0dWJJbmZvLT51Lmdl
dEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZv
LT51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBsaXN0U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIWxpc3QtPmxpc3RbaV0uaXNEaXJl
Y3QpCisgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IDA7CisgICAgaWYgKHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkgeworICAgICAgICBsaXN0
ID0gc3R1YkluZm8tPnUuZ2V0QnlJZExpc3QubGlzdDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAobGlzdC0+YXQo
aSkuZG9lc0NhbGxzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTWFr
ZXNDYWxscywgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTQsMTggKzIxMywxOCBAQCBH
ZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9s
aXN0OiB7Ci0gICAgICAgIGZvciAoaW50IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3RT
aXplOyArK2xpc3RJbmRleCkgewotICAgICAgICAgICAgQVNTRVJUKGxpc3QtPmxpc3RbbGlzdElu
ZGV4XS5pc0RpcmVjdCk7CisgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7
ICsrbGlzdEluZGV4KSB7CisgICAgICAgICAgICBBU1NFUlQoIWxpc3QtPmF0KGxpc3RJbmRleCku
ZG9lc0NhbGxzKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGxpc3QtPmxpc3RbbGlzdEluZGV4XS5iYXNlLmdldCgpOworICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOwogICAg
ICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVy
dHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
LCB0cnVlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGxpc3QtPmxpc3RbbGlzdElu
ZGV4XS5jaGFpbi5nZXQoKSkgeworICAgICAgICAgICAgaWYgKGxpc3QtPmF0KGxpc3RJbmRleCku
Y2hhaW4oKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
PiBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAotICAgICAgICAg
ICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBzdHJ1Y3R1cmUsIGxpc3QtPmxpc3RbbGlzdEluZGV4
XS5jaGFpbi5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgbGlzdC0+bGlzdFtsaXN0SW5kZXhd
LmNvdW50KSk7CisgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwg
bGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbigpLAorICAgICAgICAgICAgICAgICAgICBsaXN0LT5h
dChsaXN0SW5kZXgpLmNoYWluQ291bnQoKSkpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0
LmNvbXB1dGVGb3JDaGFpbihwcm9maWxlZEJsb2NrLCB1aWQsIGNoYWluKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRp
bmUsCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgdW5z
aWduZWQgY2hhaW5Db3VudCkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9jaGFpbkNvdW50
KGNoYWluQ291bnQpCisgICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKKyAg
ICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCit7CisgICAgaWYgKGNoYWluKQorICAgICAg
ICBtX2NoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKK30KKworR2V0QnlJZEFjY2Vzczo6fkdl
dEJ5SWRBY2Nlc3MoKQoreworfQorCitHZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21T
dHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCA9CisgICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpOworICAgIAorICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0OworICAgIAorICAgIHN3
aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgeworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9z
ZWxmOgorICAgICAgICByZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOworICAgICAgICByZXN1
bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGlu
ZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46CisgICAgICAg
IHJlc3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNl
T2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0Lm1fY2hhaW4uY29weUZyb20oc3R1Yklu
Zm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4pOworICAgICAgICByZXN1bHQubV9jaGFpbkNvdW50ID0g
c3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY291bnQ7CisgICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0
aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CisgICAgICAgIGlmIChzdHViSW5mby51LmdldEJ5
SWRDaGFpbi5pc0RpcmVjdCkKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVTdHVi
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQubV90eXBlID0gR2V0dGVyOworICAg
ICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Ym9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoKSBjb25zdAoreworICAgIGlmIChtX3N0cnVj
dHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG1fY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1BvbHlt
b3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191
bnNldCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fbGlzdC5hcHBlbmQoR2V0QnlJZEFj
Y2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Cit9CisKK1BvbHltb3JwaGlj
R2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19n
ZXRfYnlfaWRfbGlzdCkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlz
dDsKKyAgICAKKyAgICBBU1NFUlQoCisgICAgICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNj
ZXNzX2dldF9ieV9pZF9zZWxmCisgICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNj
ZXNzX2dldF9ieV9pZF9jaGFpbgorICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc191bnNldCk7CisgICAgCisgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0ID0g
bmV3IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1YkluZm8pOworICAgIAorICAgIHN0dWJJbmZv
LmluaXRHZXRCeUlkTGlzdChyZXN1bHQpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K1BvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9CisK
K01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xv
d1BhdGhUYXJnZXQoCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAorewor
ICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsK
KyAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOwor
fQorCit2b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlk
QWNjZXNzJiBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFpc0Z1bGwoKSk7CisgICAgLy8gTWFrZSBz
dXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgorICAg
IG1fbGlzdC5yZXNpemUobV9saXN0LnNpemUoKSArIDEpOworICAgIG1fbGlzdC5sYXN0KCkgPSBh
Y2Nlc3M7Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Cisg
ICAgcmV0dXJuIHNpemUoKSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7Cit9CisKK2Jv
b2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJu
IHNpemUoKSA+PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxOworfQorCitib29sIFBv
bHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRjaGluZygpIGNvbnN0Cit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChhdChpKS50eXBlKCkg
PT0gR2V0QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Ojp2aXNpdFdlYWsoKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsg
aS0tOykgeworICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2VhaygpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0X2gKKyNkZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKKyNpZiBFTkFC
TEUoSklUKQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCisjaW5jbHVkZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2Nr
Oworc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOworCitjbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3B1
YmxpYzoKKyAgICBlbnVtIEFjY2Vzc1R5cGUgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBT
aW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMgdGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KKyAgICAg
ICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBpcyBhIHN0dWIuCisgICAgICAgIEdldHRlciwKKyAgICB9
OworICAgIAorICAgIEdldEJ5SWRBY2Nlc3MoKQorICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQor
ICAgICAgICAsIG1fY2hhaW5Db3VudCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgR2V0QnlJ
ZEFjY2VzcygKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKKyAgICAgICAgU3RydWN0dXJlQ2hhaW4q
ID0gMCwgdW5zaWduZWQgY2hhaW5Db3VudCA9IDApOworICAgIAorICAgIH5HZXRCeUlkQWNjZXNz
KCk7CisgICAgCisgICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4oKSBjb25zdCB7IHJldHVybiBtX2NoYWluLmdldCgpOyB9CisgICAgdW5zaWduZWQgY2hhaW5D
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhaW5Db3VudDsgfQorICAgIAorICAgIEpJVFN0dWJS
b3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQo
KSk7CisgICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgIH0KKyAgICAKKyAg
ICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXI7IH0KKyAg
ICAKKyAgICBib29sIHZpc2l0V2VhaygpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgdW5zaWdu
ZWQgbV9jaGFpbkNvdW50OworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJl
OworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKKyAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7Cit9OworCitjbGFzcyBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAv
LyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0
aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgorICAgIC8vIHBsYWNlLgorICAgIHN0YXRpYyBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAg
flBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29u
c3Q7CisgICAgCisgICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYpOworICAg
IAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0K
KyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAg
IGJvb2wgaXNGdWxsKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8g
VHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCisgICAg
Y29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0
W2ldOyB9CisgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KKyAgICAKKyAgICBib29sIGRpZFNlbGZQYXRjaGlu
ZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxpbmU/CisgICAg
CisgICAgYm9vbCB2aXNpdFdlYWsoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgQ29kZUJsb2NrOworICAgIAorICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJl
U3R1YkluZm8mKTsKKyAgICAKKyAgICBWZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9saXN0Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5k
aWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24g
MTY1NDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTggKzI3LDE3IEBACiAjaW5jbHVkZSAiU3RydWN0
dXJlU3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIK
IAotCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjpkZXJlZigpCiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuZ2V0QnlJZFNlbGZMaXN0LnN0
cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAg
Y2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKKyAgICAgICAgZGVsZXRlIHUuZ2V0QnlJZExp
c3QubGlzdDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfbGlzdDoKQEAgLTc0LDkgKzczLDggQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRX
ZWFrUmVmZXJlbgogICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWlu
LmNoYWluLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdDogewotICAgICAgICBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuZ2V0QnlJ
ZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGlmICghcG9seW1vcnBoaWNTdHJ1Y3R1
cmVzLT52aXNpdFdlYWsodS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemUpKQorICAgIGNhc2UgYWNj
ZXNzX2dldF9ieV9pZF9saXN0OiB7CisgICAgICAgIGlmICghdS5nZXRCeUlkTGlzdC5saXN0LT52
aXNpdFdlYWsoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE2NTQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMiAr
NDIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQogCitjbGFzcyBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0OwogY2xhc3MgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDsKIAogZW51
bSBBY2Nlc3NUeXBlIHsKICAgICBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYsCiAgICAgYWNjZXNzX2dl
dF9ieV9pZF9jaGFpbiwKLSAgICBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdCwKKyAgICBhY2Nl
c3NfZ2V0X2J5X2lkX2xpc3QsCiAgICAgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1h
bCwKICAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0LAogICAgIGFjY2Vzc19w
dXRfYnlfaWRfcmVwbGFjZSwKQEAgLTYxLDcgKzYyLDcgQEAgaW5saW5lIGJvb2wgaXNHZXRCeUlk
QWNjZXNzKEFjY2Vzc1R5cGUgYQogICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2Ug
YWNjZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoK
LSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OgorICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9saXN0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xMTYsMTMgKzExNywxMCBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1
YkluZm8gewogICAgICAgICB1LmdldEJ5SWRDaGFpbi5pc0RpcmVjdCA9IGlzRGlyZWN0OwogICAg
IH0KIAotICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmTGlzdChQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QqIHN0cnVjdHVyZUxpc3QsIGludCBsaXN0U2l6ZSwgYm9vbCBkaWRTZWxmUGF0Y2hp
bmcgPSBmYWxzZSkKKyAgICB2b2lkIGluaXRHZXRCeUlkTGlzdChQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KiBsaXN0KQogICAgIHsKLSAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRf
c2VsZl9saXN0OwotCi0gICAgICAgIHUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3QgPSBz
dHJ1Y3R1cmVMaXN0OwotICAgICAgICB1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSA9IGxpc3RT
aXplOwotICAgICAgICB1LmdldEJ5SWRTZWxmTGlzdC5kaWRTZWxmUGF0Y2hpbmcgPSBkaWRTZWxm
UGF0Y2hpbmc7CisgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q7Cisg
ICAgICAgIHUuZ2V0QnlJZExpc3QubGlzdCA9IGxpc3Q7CiAgICAgfQogCiAgICAgLy8gUHV0QnlJ
ZCoKQEAgLTIzMywxNCArMjMxLDggQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAg
ICAgICAgIGJvb2wgaXNEaXJlY3QgOiAxOwogICAgICAgICB9IGdldEJ5SWRDaGFpbjsKICAgICAg
ICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCog
c3RydWN0dXJlTGlzdDsKLSAgICAgICAgICAgIGludCBsaXN0U2l6ZSA6IDMxOwotICAgICAgICAg
ICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcgOiAxOwotICAgICAgICB9IGdldEJ5SWRTZWxmTGlzdDsK
LSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdCogc3RydWN0dXJlTGlzdDsKLSAgICAgICAgICAgIGludCBsaXN0U2l6ZTsKLSAgICAgICAg
fSBnZXRCeUlkUHJvdG9MaXN0OworICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCog
bGlzdDsKKyAgICAgICAgfSBnZXRCeUlkTGlzdDsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBwcmV2aW91c1N0cnVjdHVyZTsKICAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE2NTQzMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDcgQEAKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlJl
cGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKQEAg
LTIxOSwxMyArMjIwLDExIEBAIHN0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVm
ZmUKICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpKTsKIH0KIAotZW51bSBQcm90b0NoYWluR2VuZXJhdGlvblJlc3VsdCB7
Ci0gICAgUHJvdG9DaGFpbkdlbmVyYXRpb25GYWlsZWQsCi0gICAgUHJvdG9DaGFpbkdlbmVyYXRp
b25TdWNjZWVkZWQKLX07Ci0KLXN0YXRpYyBQcm90b0NoYWluR2VuZXJhdGlvblJlc3VsdCBnZW5l
cmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSosIGNvbnN0IFByb3BlcnR5U2xvdCYs
IGNvbnN0IElkZW50aWZpZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZUNoYWluKiwg
c2l6ZV90LCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgQ29kZUxvY2F0aW9uTGFiZWwsIENv
ZGVMb2NhdGlvbkxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JikgV0FSTl9VTlVTRURfUkVU
VVJOOwotc3RhdGljIFByb3RvQ2hhaW5HZW5lcmF0aW9uUmVzdWx0IGdlbmVyYXRlUHJvdG9DaGFp
bkFjY2Vzc1N0dWIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVs
LCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
JiBzdHViUm91dGluZSkKK3N0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZFN0dWIoCisgICAgRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVy
ZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
JiBzdHViUm91dGluZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBHUFJSZWcg
YmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CkBA
IC0yMzUsOCArMjM0LDcgQEAgc3RhdGljIFByb3RvQ2hhaW5HZW5lcmF0aW9uUmVzdWx0IGdlbmVy
YQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBh
dGNoLnZhbHVlR1BSKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChz
dHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CiAgICAgYm9vbCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAo
bmVlZFRvUmVzdG9yZVNjcmF0Y2ggJiYgIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQotICAgICAg
ICByZXR1cm4gUHJvdG9DaGFpbkdlbmVyYXRpb25GYWlsZWQ7CisgICAgUkVMRUFTRV9BU1NFUlQo
IW5lZWRUb1Jlc3RvcmVTY3JhdGNoIHx8IHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKTsKICAgICAK
ICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCgmZXhlYy0+dm0oKSwgZXhlYy0+Y29kZUJsb2NrKCkp
OwogICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewpAQCAtMjYxLDQxICsyNTksNTEgQEAg
c3RhdGljIFByb3RvQ2hhaW5HZW5lcmF0aW9uUmVzdWx0IGdlbmVyYQogICAgICAgICB2bS0+cmVn
aXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5h
ZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCiAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJl
ID0gc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5o
ZWFkKCk7CiAgICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICBwcm90b09iamVjdCA9IGFz
T2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAg
IFN0cnVjdHVyZSogcHJvdG9TdHJ1Y3R1cmUgPSBwcm90b09iamVjdC0+c3RydWN0dXJlKCk7Ci0g
ICAgICAgIGlmIChwcm90b1N0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZp
cmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJ
bXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJs
b2NrKSk7Ci0gICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAg
IHByb3RvT2JqZWN0LCBwcm90b1N0cnVjdHVyZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3R1Ykpp
dCwKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgIGN1cnJT
dHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7CisgICAgaWYgKGNoYWluKSB7CisgICAgICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7CisgICAgICAgICAgICBwcm90b09iamVj
dCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7Cisg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvU3RydWN0dXJlID0gcHJvdG9PYmplY3QtPnN0cnVj
dHVyZSgpOworICAgICAgICAgICAgaWYgKHByb3RvU3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0lt
cHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAgICAgICAgICAgICAgIHZtLT5yZWdp
c3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFk
ZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CisgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0
aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgcHJvdG9PYmplY3QsIHByb3RvU3RydWN0dXJlLCBj
b2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LAorICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNl
cywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwor
ICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNBY2Nlc3NvciA9IHNsb3QuaXNDYWNo
ZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7Ci0gICAgaWYgKGlzQWNj
ZXNzb3IpCi0gICAgICAgIHN0dWJKaXQubW92ZShiYXNlR1BSLCBzY3JhdGNoR1BSKTsKLQorICAg
IAorICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSOworICAgIGlmIChjaGFpbikgeworICAgICAg
ICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3Qp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7Cisg
ICAgfSBlbHNlCisgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBiYXNlR1BSOworICAgIAorICAg
IEdQUlJlZyBsb2FkZWRWYWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgaWYgKCFzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkp
IHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQocHJvdG9P
YmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCksIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0LT5sb2NhdGlvbkZvck9mZnNldChvZmZzZXQpKSwgcmVz
dWx0R1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+
YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHRHUFIpOworICAgICAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZVZhbHVlKCkpCisgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHJlc3VsdEdQUjsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSBzY3JhdGNoR1BSOworICAg
ICAgICAKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CisgICAgICAgIGlmIChpc0lubGluZU9m
ZnNldChvZmZzZXQpKQorICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGJhc2VGb3JBY2Nlc3NHUFI7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VGb3JBY2Nlc3NHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1
ZUdQUjsKKyAgICAgICAgfQorICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAg
ICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZz
ZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCBy
ZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIHN0dWJKaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJm
bHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsK
LSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpLCBs
b2FkZWRWYWx1ZUdQUik7CisjZWxzZQorICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsg
VGFnT2Zmc2V0KSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0
KSArIFBheWxvYWRPZmZzZXQpLCBsb2FkZWRWYWx1ZUdQUik7CiAjZW5kaWYKLSAgICAgICAgfQog
ICAgIH0KIAogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7CkBAIC0zMDQs
MTQgKzMxMiwxNCBAQCBzdGF0aWMgUHJvdG9DaGFpbkdlbmVyYXRpb25SZXN1bHQgZ2VuZXJhCiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKICAgICBpZiAoaXNBY2Nlc3Nv
cikgewogICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7Ci0gICAgICAgICAg
ICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFz
ZUdQUiwgbG9hZGVkVmFsdWVHUFIpOwogICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBv
cGVyYXRpb25DYWxsR2V0dGVyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRW5j
b2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBzbG90QmFz
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdCksIHNjcmF0Y2hHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAg
ICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NH
UFIsIGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5p
bXBsKCkpKTsKICNlbHNlCi0gICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdCksIHNjcmF0
Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAg
ICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NH
UFIsIGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsK
ICNlbmRpZgogICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBGdW5jdGlvblB0cihzbG90
LmN1c3RvbUdldHRlcigpKTsKICAgICAgICAgfQpAQCAtMzQ5LDkgKzM1Nyw4IEBAIHN0YXRpYyBQ
cm90b0NoYWluR2VuZXJhdGlvblJlc3VsdCBnZW5lcmEKICAgICAKICAgICBzdHViUm91dGluZSA9
IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRj
aEJ1ZmZlciwKLSAgICAgICAgKCJQcm90b3R5cGUgY2hhaW4gYWNjZXNzIHN0dWIgZm9yICVzLCBy
ZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAoIkdldCBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVy
biBwb2ludCAlcCIsCiAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5k
YXRhKCksIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgcmV0dXJuIFBy
b3RvQ2hhaW5HZW5lcmF0aW9uU3VjY2VlZGVkOwogfQogCiBzdGF0aWMgYm9vbCB0cnlDYWNoZUdl
dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKQEAgLTQ2MywxMCArNDcwLDExIEBAIHN0YXRpYyBib29sIHRyeUNhY2hl
R2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgU3RydWN0
dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVj
KTsKLSAgICBpZiAoZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzbG90LCBwcm9w
ZXJ0eU5hbWUsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwKLSAgICAg
ICAgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUpID09IFByb3RvQ2hhaW5HZW5lcmF0aW9uRmFpbGVk
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZ2VuZXJhdGVHZXRCeUlkU3R1YigKKyAgICAg
ICAgZXhlYywgc2xvdCwgcHJvcGVydHlOYW1lLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNv
dW50LCBvZmZzZXQsIHN0cnVjdHVyZSwKKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKKyAgICAg
ICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSksCisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsK
ICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICBy
ZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0
aW5lLT5jb2RlKCkuY29kZSgpKTsKQEAgLTQ4NSw0OSArNDkzLDExIEBAIHZvaWQgcmVwYXRjaEdl
dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1YKICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29k
ZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7
CiB9CiAKLXN0YXRpYyBib29sIGdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCgKLSAgICBWTSog
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0g
ICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiYgcG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LCBpbnQmIGxpc3RJbmRleCwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCYgc2xvd0Nhc2UpCi17
Ci0gICAgc2xvd0Nhc2UgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBpZiAoc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOwotICAgICAgICBzdHVi
SW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCwgZmFs
c2UpOwotICAgICAgICBsaXN0SW5kZXggPSAwOwotICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRp
bmUoc2xvd0Nhc2UpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCksIHRydWUpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdCwgMSwgdHJ1ZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9IDE7Ci0g
ICAgfSBlbHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hh
aW4pIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFzdHViSW5mby5zdHViUm91dGluZSk7Ci0g
ICAgICAgIHNsb3dDYXNlID0gQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdl
dCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5pc0RpcmVjdCwgc3R1YkluZm8udS5nZXRCeUlk
Q2hhaW4uY291bnQpOwotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZS5jbGVhcigpOwotICAg
ICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dCwgMSwgZmFsc2UpOwotICAgICAgICBsaXN0SW5kZXggPSAxOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9p
ZF9zZWxmX2xpc3QpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5m
by51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0SW5kZXggPSBz
dHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nhc2UgPSBD
b2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4
IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAo
bGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKGxpc3RJbmRleCA8IFBPTFlNT1JQSElD
X0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyB2b2lkIHBh
dGNoSnVtcFRvR2V0QnlJZFN0dWIoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQogewotICAgIFJFTEVB
U0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xp
c3QpOworICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dl
dF9ieV9pZF9saXN0KTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKLSAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QuZGlkU2VsZlBhdGNoaW5nKSB7
CisgICAgaWYgKHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdC0+ZGlkU2VsZlBhdGNoaW5nKCkp
IHsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCiAgICAgICAgICAgICBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgIHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCkBAIC01NTAsMTU4ICs1MjAsNiBAQCBzdGF0aWMgYm9v
bCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJh
c2VWYWx1ZS5hc0NlbGwoKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5z
dHJ1Y3R1cmUoKTsKICAgICAKLSAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkg
ewotICAgICAgICBpZiAoc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKSB7
Ci0gICAgICAgICAgICAvLyBXZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxpbmUgY2FjaGluZyBpZiB0
aGUgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQgcHJpb3IgdG8gdGhpcyBHZXRCeUlkLiBJbiBw
YXJ0aWN1bGFyLAotICAgICAgICAgICAgLy8gbm9uLVZhbHVlIGNhY2hlZCBwcm9wZXJ0aWVzIHJl
cXVpcmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNoIHJlcXVpcmVzIHJlZ2lzdGVycyB0byBoYXZlIGJl
ZW4gZmx1c2hlZC4gVGh1cywKLSAgICAgICAgICAgIC8vIGlmIHJlZ2lzdGVycyB3ZXJlIG5vdCBm
bHVzaGVkLCBkb24ndCBkbyBub24tVmFsdWUgY2FjaGluZy4KLSAgICAgICAgICAgIGlmICghc2xv
dC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgCi0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAgICAgICBpbnQgbGlzdEluZGV4OwotICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZTsKLQotICAgICAgICBpZiAoIWdldFBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdCh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0LCBsaXN0SW5kZXgsIHNsb3dDYXNlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplKys7
Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAg
R1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
dmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBUZW1wUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyku
Z2V0RnJlZUdQUigpOwotICAgICAgICAKLSAgICAgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0s
IGNvZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9u
Z1N0cnVjdCA9IGJyYW5jaFN0cnVjdHVyZShzdHViSml0LAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAotICAgICAgICAgICAgc3RydWN0
dXJlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBzdHJhdGVneSB3ZSB1c2UgZm9yIHN0dWJz
IGlzIGFzIGZvbGxvd3M6Ci0gICAgICAgIC8vIDEpIENhbGwgREZHIGhlbHBlciB0aGF0IGNhbGxz
IHRoZSBnZXR0ZXIuCi0gICAgICAgIC8vIDIpIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBleGNlcHRp
b24sIGFuZCBpZiB0aGVyZSB3YXMsIGNhbGwgeWV0IGFub3RoZXIKLSAgICAgICAgLy8gICAgaGVs
cGVyLgotICAgICAgICAKLSAgICAgICAgYm9vbCBpc0RpcmVjdCA9IGZhbHNlOwotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBoYW5kbGVyQ2FsbDsKLSAgICAgICAgRnVuY3Rpb25QdHIgb3BlcmF0aW9uRnVuY3Rp
b247Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBzaG91bGRuJ3QgYmUgYXNz
dW1pbmcgdGhhdCB0aGUgdG9wIG9mIHN0YWNrIGlzIHNldCB1cCBmb3IgSlNDCi0gICAgICAgICAg
ICAvLyBKSVQtc3R5bGUgQyBjYWxscywgc2luY2Ugd2UgbWF5IGJlIGN1cnJlbnRseSBvbiB0b3Ag
b2YgYW4gRlRMIGZyYW1lLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNTcxMQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2xv
dC5pc0NhY2hlYWJsZUdldHRlcigpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VHUFIgIT0g
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICAgICAg
c3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVs
YXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2Ny
YXRjaEdQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZl
VG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7Ci0jZW5kaWYKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYmFzZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9u
RnVuY3Rpb24gPSBvcGVyYXRpb25DYWxsR2V0dGVyOwotICAgICAgICAgICAgfSBlbHNlIHsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIC8vIEVuY29kZWRKU1ZhbHVlICgqR2V0
VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihpZGVudC5pbXBsKCkpKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc3R1
YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgYmFzZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBv
cGVyYXRpb25GdW5jdGlvbiA9IEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3Vy
ZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVt
YmVyIHRoZQotICAgICAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZyb20uIEl0IGp1
c3Qgc28gaGFwcGVucyB0byBiZSB0aGUgcGxhY2UgdGhhdCB3ZSBhcmUgYXQKLSAgICAgICAgICAg
IC8vIHJpZ2h0IG5vdyEKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmUzMigKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4ZWMtPmxvY2F0aW9uQXNSYXdCaXRz
KCkpLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgICAgIHN0
dWJKaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZy
YW1lKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQu
Y2FsbCgpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAgc3R1
YkppdC5zZXR1cFJlc3VsdHMocmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0gICAg
ICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJz
OjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1
YkppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IHN0dWJK
aXQuY2FsbCgpOwotICAgICAgICAgICAgc3R1YkppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAg
ICAgICAgICAgICAgaWYgKGJhc2VHUFIgPT0gcmVzdWx0VGFnR1BSKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9m
ZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0
VGFnR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxh
dGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7
Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgp
KSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVU
b0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKLSNlbmRpZgotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICAg
ICAgaXNEaXJlY3QgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdm0sICZzdHViSml0LCBjb2RlQmxvY2spOwotICAgICAgICAKLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluayh3cm9uZ1N0cnVjdCwgc2xvd0Nhc2UpOwotICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgICAgICBpZiAoIWlzRGlyZWN0
KSB7Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlv
bkZ1bmN0aW9uKTsKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0KLSAgICAgICAgICAgIGNyZWF0ZUpJVFN0
dWJSb3V0aW5lKAotICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAotICAgICAgICAg
ICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAg
ICAgICAgICgiR2V0QnlJZCBwb2x5bW9ycGhpYyBsaXN0IGFjY2VzcyBmb3IgJXMsIHJldHVybiBw
b2ludCAlcCIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVC
bG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
RG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAgICAgICAgICp2bSwKLSAgICAg
ICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAg
IHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpOwot
ICAgICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRl
eF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0
cnVjdHVyZSwgaXNEaXJlY3QpOwotICAgICAgICAKLSAgICAgICAgcGF0Y2hKdW1wVG9HZXRCeUlk
U3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7Ci0gICAgICAgIHJl
dHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Ci0gICAg
fQotICAgIAotICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5m
bygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpCi0gICAgICAgIHx8IGJhc2VWYWx1ZS5hc0Nl
bGwoKS0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCiAgICAgaWYgKHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBOZWVkVG9TcGlsbCkg
ewogICAgICAgICAvLyBXZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxpbmUgY2FjaGluZyBpZiB0aGUg
cmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQgcHJpb3IgdG8gdGhpcyBHZXRCeUlkLiBJbiBwYXJ0
aWN1bGFyLAogICAgICAgICAvLyBub24tVmFsdWUgY2FjaGVkIHByb3BlcnRpZXMgcmVxdWlyZSBw
bGFudGluZyBjYWxscywgd2hpY2ggcmVxdWlyZXMgcmVnaXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVz
aGVkLiBUaHVzLApAQCAtNzEwLDM0ICs1MjgsNDIgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRC
eUlETGlzdChFeGVjU3RhdAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAK
LQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAg
c2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVj
LCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQsIG9mZnNldCk7Ci0gICAgaWYgKGNv
dW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVD
aGFpbihleGVjKTsKKyAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSAwOworICAg
IHNpemVfdCBjb3VudCA9IDA7CiAgICAgCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgaW50IGxpc3RJbmRleDsKLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZTsKLSAgICBpZiAoIWdldFBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
LCBsaXN0SW5kZXgsIHNsb3dDYXNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChz
bG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgIGlmIChiYXNlVmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygp
CisgICAgICAgICAgICB8fCBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pc0RpY3Rp
b25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGNv
dW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcygKKyAgICAgICAgICAg
IGV4ZWMsIGJhc2VWYWx1ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKKyAgICAg
ICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNo
YWluKGV4ZWMpOworICAgIH0KICAgICAKLSAgICBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3Qu
bGlzdFNpemUrKzsKKyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gUG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6ZnJvbShzdHViSW5mbyk7CisgICAgaWYgKGxpc3QtPmlzRnVsbCgpKSB7
CisgICAgICAgIC8vIFdlIG5lZWQgdGhpcyBleHRyYSBjaGVjayBiZWNhdXNlIG9mIHJlY3Vyc2lv
bi4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAKICAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIAotICAgIGlmIChnZW5lcmF0ZVByb3RvQ2hhaW5B
Y2Nlc3NTdHViKGV4ZWMsIHNsb3QsIGlkZW50LCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNv
dW50LCBvZmZzZXQsIHN0cnVjdHVyZSwKKyAgICBnZW5lcmF0ZUdldEJ5SWRTdHViKAorICAgICAg
ICBleGVjLCBzbG90LCBpZGVudCwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zm
c2V0LCBzdHJ1Y3R1cmUsCiAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCi0gICAgICAgIHNsb3dD
YXNlLCBzdHViUm91dGluZSkgPT0gUHJvdG9DaGFpbkdlbmVyYXRpb25GYWlsZWQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNs
b3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKICAgICAKLSAgICBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwg
c2xvdC5pc0NhY2hlYWJsZVZhbHVlKCksIGNvdW50KTsKKyAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0
QnlJZEFjY2VzcygKKyAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAor
ICAgICAgICBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSA/IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZVN0
dWIgOiBHZXRCeUlkQWNjZXNzOjpHZXR0ZXIsCisgICAgICAgIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1
cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCkpOwogICAgIAogICAgIHBhdGNoSnVtcFRvR2V0QnlJ
ZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwogICAgIAotICAg
IHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Cisg
ICAgcmV0dXJuICFsaXN0LT5pc0Z1bGwoKTsKIH0KIAogdm9pZCBidWlsZEdldEJ5SURMaXN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCkBAIC0xMjYzLDkgKzEwODksMTEgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlk
TGlzdChFeGVjU3RhdAogICAgICAgICAgICAgCiAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiog
cHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRo
ZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCiAgICAgICAgICAgICBs
aXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Cisg
ICAgICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNpb24uCiAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1v
Z3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KICAgICAgICAgICAgIGVtaXRQdXRUcmFu
c2l0aW9uU3R1YigKICAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFt
ZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBv
bGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLApAQCAtMTI3OCw5ICsxMTA2LDExIEBAIHN0YXRp
YyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICAgICAg
b2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAogICAgICAgICAgICAgICAg
ICAgICBzdHViUm91dGluZSkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2Un
cmUgbm93IGNvbW1pdHRlZCB0byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1k
YXRhIGFjY29yZGluZ2x5LgogICAgICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExp
c3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOworICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVs
bCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUg
dG8gcmVjdXJzaW9uLgogICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSdyZSBub3cgY29t
bWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3Jk
aW5nbHkuCiAgICAgICAgICAgICBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgICAgICAgICAgICAg
ZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAog
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVu
dFNsb3dQYXRoVGFyZ2V0KCkpLCBzdHViUm91dGluZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2dldHRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2dldHRlci5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0dGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTggQEAKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZiArIG8uayAqIDEw
MDA7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kp
IHsKKyAgICB2YXIgbyA9IHtnXzogNX07CisgICAgby5fX2RlZmluZUdldHRlcl9fKCJmIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiA0MiArIHRoaXMuZ187IH0pOworICAgIG8uX19kZWZpbmVHZXR0ZXJf
XygiZyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gNDMgKyB0aGlzLmdfOyB9KTsKKyAgICBvLl9fZGVm
aW5lR2V0dGVyX18oImgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIDQ0ICsgdGhpcy5nXzsgfSk7Cisg
ICAgby5fX2RlZmluZUdldHRlcl9fKCJpIiwgZnVuY3Rpb24oKSB7IHJldHVybiA0NSArIHRoaXMu
Z187IH0pOworICAgIG8uX19kZWZpbmVHZXR0ZXJfXygiaiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
NDYgKyB0aGlzLmdfOyB9KTsKKyAgICBvLl9fZGVmaW5lR2V0dGVyX18oImsiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIDQ3ICsgdGhpcy5nXzsgfSk7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAg
ICBpZiAocmVzdWx0ICE9ICg0MiArIDUpICsgMTAwMCAqICg0NyArIDUpKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3BvbHltb3JwaGljLXByb3RvdHlwZS1hY2Nlc3Nlcy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3BvbHltb3Jw
aGljLXByb3RvdHlwZS1hY2Nlc3Nlcy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvcG9seW1vcnBoaWMtcHJvdG90eXBlLWFjY2Vzc2VzLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjggQEAKK2Z1bmN0aW9uIEZvbygpIHsKK30KK0Zvby5w
cm90b3R5cGUuZiA9IDQyOworRm9vLnByb3RvdHlwZS5nID0gNDM7CitGb28ucHJvdG90eXBlLmgg
PSA0NDsKK0Zvby5wcm90b3R5cGUuaSA9IDQ1OworRm9vLnByb3RvdHlwZS5qID0gNDY7CitGb28u
cHJvdG90eXBlLmsgPSA0NzsKKworZnVuY3Rpb24gQmFyKCkgeworfQorQmFyLnByb3RvdHlwZS5r
ID0gMjM7CitCYXIucHJvdG90eXBlLmYgPSAyNDsKKworZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBy
ZXR1cm4gby5mICsgby5rOworfQorCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhuZXcgRm9vKCkpOworICAgIGlm
IChyZXN1bHQgIT0gODkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3IgRm9v
OiAiICsgcmVzdWx0OworICAgIHJlc3VsdCA9IGZvbyhuZXcgQmFyKCkpOworICAgIGlmIChyZXN1
bHQgIT0gNDcpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3IgQmFyOiAiICsg
cmVzdWx0OworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm90
b3R5cGUtZ2V0dGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcHJvdG90eXBlLWdldHRlci5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJvdG90eXBlLWdldHRlci5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIxIEBACitmdW5jdGlvbiBGb28oZykgeworICAgIHRoaXMuZ18gPSBnOwor
fQorRm9vLnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKCJmIiwgZnVuY3Rpb24oKSB7IHJldHVy
biB0aGlzLmdfICsgMzI7IH0pOworRm9vLnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKCJnIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmdfICsgMzM7IH0pOworRm9vLnByb3RvdHlwZS5fX2Rl
ZmluZUdldHRlcl9fKCJoIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmdfICsgMzQ7IH0pOwor
Rm9vLnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKCJpIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0
aGlzLmdfICsgMzU7IH0pOworRm9vLnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKCJqIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiB0aGlzLmdfICsgMzY7IH0pOworRm9vLnByb3RvdHlwZS5fX2RlZmlu
ZUdldHRlcl9fKCJrIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmdfICsgMzc7IH0pOworCitm
dW5jdGlvbiBmb28obykgeworICAgIHJldHVybiBvLmYgKyBvLmsgKiAxMDAwOworfQorCitub0lu
bGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgdmFyIHJl
c3VsdCA9IGZvbyhuZXcgRm9vKDUpKTsKKyAgICBpZiAocmVzdWx0ICE9ICgzMiArIDUpICsgKDM3
ICsgNSkgKiAxMDAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1
bHQ7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbXBsZS1w
cm90b3R5cGUtYWNjZXNzZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9zaW1wbGUtcHJvdG90eXBlLWFjY2Vzc2VzLmpzCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW1wbGUtcHJvdG90eXBlLWFj
Y2Vzc2VzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAgQEAKK2Z1bmN0aW9uIEZvbygp
IHsKK30KK0Zvby5wcm90b3R5cGUuZiA9IDQyOworRm9vLnByb3RvdHlwZS5nID0gNDM7CitGb28u
cHJvdG90eXBlLmggPSA0NDsKK0Zvby5wcm90b3R5cGUuaSA9IDQ1OworRm9vLnByb3RvdHlwZS5q
ID0gNDY7CitGb28ucHJvdG90eXBlLmsgPSA0NzsKKworZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBy
ZXR1cm4gby5mICsgby5rOworfQorCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhuZXcgRm9vKCkpOworICAgIGlm
IChyZXN1bHQgIT0gODkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3IgRm9v
OiAiICsgcmVzdWx0OworfQo=
</data>
<flag name="review"
          id="250622"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>