<?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>164791</bug_id>
          
          <creation_ts>2016-11-15 14:04:09 -0800</creation_ts>
          <short_desc>Rename CONCURRENT_JIT/ConcurrentJIT to CONCURRENT_JS/ConcurrentJS</short_desc>
          <delta_ts>2016-11-15 17:36:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>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>
          
          <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1251620</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-15 14:04:09 -0800</bug_when>
    <thetext>Both the concurrent GC and the concurrent JIT rely on concurrency support in fundamental JSC runtime components like JSValue.  So, the thing that guards it should be a &quot;feature&quot; called CONCURRENT_JS not CONCURRENT_JIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251626</commentid>
    <comment_count>1</comment_count>
      <attachid>294879</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-15 14:10:14 -0800</bug_when>
    <thetext>Created attachment 294879
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251629</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-15 14:13:03 -0800</bug_when>
    <thetext>Attachment 294879 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/LazyOperandValueProfile.h:158:  The parameter name &quot;key&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/LazyOperandValueProfile.h:172:  The parameter name &quot;holder&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/LazyOperandValueProfile.h:178:  The parameter name &quot;key&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:761:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 74 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>1251632</commentid>
    <comment_count>3</comment_count>
      <attachid>294879</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-11-15 14:16:50 -0800</bug_when>
    <thetext>Comment on attachment 294879
the patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251675</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-15 15:22:24 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/208761</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251742</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-15 17:36:12 -0800</bug_when>
    <thetext>Fixed a regression in https://trac.webkit.org/changeset/208777</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294879</attachid>
            <date>2016-11-15 14:10:14 -0800</date>
            <delta_ts>2016-11-15 14:16:50 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>156670</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NiBA
QAorMjAxNi0xMS0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbmFtZSBDT05DVVJSRU5UX0pJVC9Db25jdXJyZW50SklUIHRvIENPTkNVUlJFTlRfSlMvQ29u
Y3VycmVudEpTCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjQ3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIEp1c3QgcmVuYW1pbmcuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5j
cHA6CisgICAgICAgIChKU0M6OkFycmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjpicmllZkRlc2NyaXB0aW9uKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlQcm9maWxlOjpicmllZkRlc2NyaXB0aW9uV2l0aG91dFVwZGF0aW5nKToK
KyAgICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQ
cm9maWxlOjpvYnNlcnZlZEFycmF5TW9kZXMpOgorICAgICAgICAoSlNDOjpBcnJheVByb2ZpbGU6
Om1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcyk6CisgICAgICAgIChKU0M6OkFycmF5UHJvZmls
ZTo6bWF5U3RvcmVUb0hvbGUpOgorICAgICAgICAoSlNDOjpBcnJheVByb2ZpbGU6Om91dE9mQm91
bmRzKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjp1c2VzT3JpZ2luYWxBcnJheVN0cnVj
dHVyZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAoSlNDOjpD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRXhpdFNpdGVEYXRhKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVGcm9tQ2FsbExpbmtJbmZvKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVERkdTdGF0dXNlcyk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaDoK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmR1bXBWYWx1ZVByb2ZpbGluZyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEFy
cmF5UHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmdldFN0dWJJbmZvTWFwKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpnZXRDYWxsTGlua0luZm9NYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldEJ5
VmFsSW5mb01hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkU3R1YkluZm8pOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEJ5VmFsSW5mbyk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6YWRkQ2FsbExpbmtJbmZvKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXNldEpJ
VERhdGEpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNocmlua1RvRml0KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmFkZEFycmF5UHJvZmlsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0T3JBZGRB
cnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rp
b25zQW5kQ291bnRMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxs
QXJyYXlQcmVkaWN0aW9ucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bmFtZUZvclJlZ2lz
dGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdyk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
c2V0SklUQ29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlUHJlZGlj
dGlvbkZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRGcmVx
dWVudEV4aXRTaXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNFeGl0U2l0ZSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGl2ZW5lc3NBbmFseXNpcyk6CisgICAgICAgICogYnl0
ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkV4aXRQcm9maWxl
OjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkV4aXRQcm9maWxlOjpoYXNFeGl0U2l0ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UXVlcnlhYmxlRXhpdFByb2ZpbGU6OmluaXRpYWxpemUpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmg6CisgICAgICAgIChKU0M6OkRGRzo6RXhp
dFByb2ZpbGU6Omhhc0V4aXRTaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVz
LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6aGFzRXhpdFNpdGUpOgorICAgICAg
ICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6R2V0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgorICAgICAgICAq
IGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9MYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6OkNvbXByZXNzZWRMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZUhvbGRlcjo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyk6CisgICAgICAgIChK
U0M6OkNvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlcjo6YWRkKToKKyAgICAg
ICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OmluaXRpYWxpemUpOgorICAg
ICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6cHJlZGljdGlvbik6Cisg
ICAgICAgICogYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKiBi
eXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZW1pdFJlcG9ydFZhbHVlKToKKyAgICAgICAg
KiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1
czo6aGFzRXhpdFNpdGUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAg
ICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNv
ZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUJhc2U6OmJyaWVm
RGVzY3JpcHRpb24pOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNlOjpjb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKToKKyAgICAgICAgKiBkZmcvREZH
QXJyYXlNb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjp3aXRoU3BlY3VsYXRp
b25Gcm9tUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjp3aXRoUHJvZmls
ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbik6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhp
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkp
OgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBp
bGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBo
YXNlOjphdHRlbXB0VG9NYWtlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZh
cik6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBmdGwv
RlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZU1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbik6CisgICAgICAgICogZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1hdGVyaWFsaXpl
T2JqZWN0SW5PU1IpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6Okhl
YXA6OmFkZFRvUmVtZW1iZXJlZFNldCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToKKyAgICAgICAgKiBqaXQvSklUSW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNob29zZUFycmF5TW9kZSk6CisgICAgICAgICog
aml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjp0cnlHZXRCeVZhbE9wdGltaXpl
KToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAqIGppdC9K
SVRXb3JrbGlzdC5jcHA6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIp
OgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyk6CisgICAgICAgICogaml0
L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpyZXBhdGNoR2V0QnlJRCk6CisgICAgICAgIChK
U0M6OnJlcGF0Y2hQdXRCeUlEKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OkxMSW50OjpzZXR1cEdldEJ5SWRQcm90b3R5cGVDYWNoZSk6CisgICAg
ICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxM
SW50OjpzZXRVcENhbGwpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1
ZW5jZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpCeXRlY29kZVNlcXVlbmNlOjpCeXRl
Y29kZVNlcXVlbmNlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNs
b3dQYXRocy5oOgorICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9T
Y29wZUdsb2JhbCk6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6dHJ5Q2FjaGVHZXRG
cm9tU2NvcGVHbG9iYWwpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0NvbmN1cnJlbnRKU0xvY2suaDogQ29waWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaC4KKyAg
ICAgICAgKEpTQzo6Q29uY3VycmVudEpTTG9ja2VyQmFzZTo6Q29uY3VycmVudEpTTG9ja2VyQmFz
ZSk6CisgICAgICAgIChKU0M6OkNvbmN1cnJlbnRKU0xvY2tlckJhc2U6On5Db25jdXJyZW50SlNM
b2NrZXJCYXNlKToKKyAgICAgICAgKEpTQzo6R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyOjpHQ1Nh
ZmVDb25jdXJyZW50SlNMb2NrZXIpOgorICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXI6On5HQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIpOgorICAgICAgICAoSlNDOjpDb25jdXJy
ZW50SlNMb2NrZXI6OkNvbmN1cnJlbnRKU0xvY2tlcik6CisgICAgICAgIChKU0M6OkNvbmN1cnJl
bnRKSVRMb2NrZXJCYXNlOjpDb25jdXJyZW50SklUTG9ja2VyQmFzZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvbmN1cnJlbnRKSVRMb2NrZXJCYXNlOjp+Q29uY3VycmVudEpJVExvY2tlckJh
c2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb25jdXJyZW50SklUTG9ja2VyQmFzZTo6dW5s
b2NrRWFybHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50SklUTG9j
a2VyOjpHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
R0NTYWZlQ29uY3VycmVudEpJVExvY2tlcjo6fkdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb25jdXJyZW50SklUTG9ja2VyOjpDb25jdXJyZW50SklU
TG9ja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5jcHA6Cisg
ICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6Y2FuV2F0Y2gpOgorICAgICAgICAoSlNDOjpJbmZl
cnJlZFR5cGU6OmFkZFdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6Ondp
bGxTdG9yZVZhbHVlU2xvdyk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6bWFrZVRvcFNs
b3cpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OnNldCk6CisgICAgICAgIChKU0M6Oklu
ZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVk
VHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwOgorICAgICAg
ICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
OkluZmVycmVkVHlwZVRhYmxlOjpnZXQpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJs
ZTo6d2lsbFN0b3JlVmFsdWUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJsZTo6bWFr
ZVRvcCk6CisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OkpTRW52aXJv
bm1lbnRSZWNvcmQ6OmhlYXBTbmFwc2hvdCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjphZGRHbG9iYWxWYXIpOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyk6CisgICAgICAg
ICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6OkpTTGV4
aWNhbEVudmlyb25tZW50OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0
ZW5pbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJu
YWwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmFic3Ry
YWN0QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6Y29sbGVjdENsb3N1cmVWYXJpYWJs
ZXNVbmRlclREWik6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluZFZhcmlh
YmxlSW5kZXgpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRW
YXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpoZWFw
U25hcHNob3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OnN5
bWJvbFRhYmxlR2V0KToKKyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXQpOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9w
dGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUv
UHJvZ3JhbUV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6
aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmNw
cDoKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6UmVnRXhw
OjptYXRjaENvbmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y29tcGlsZU1hdGNo
T25seSk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6ZGVsZXRlQ29kZSk6CisgICAgICAgICogcnVu
dGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29u
Y3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5z
aXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9u
ZUlmUGlubmVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjplbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0
Y2hwb2ludFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvcGVydHlS
ZXBsYWNlbWVudFdhdGNocG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAgKiBydW50aW1lL1N5
bWJvbFRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6bG9jYWxUb0VudHJ5KToKKyAgICAgICAgKEpT
Qzo6U3ltYm9sVGFibGU6OmVudHJ5Rm9yKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnBy
ZXBhcmVGb3JUeXBlUHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnVuaXF1
ZUlERm9yVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6dW5pcXVlSURGb3JP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6Z2xvYmFsVHlwZVNldEZvck9mZnNl
dCk6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpnbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUp
OgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL1R5
cGVTZXQuY3BwOgorICAgICAgICAoSlNDOjpUeXBlU2V0OjphZGRUeXBlSW5mb3JtYXRpb24pOgor
ICAgICAgICAoSlNDOjpUeXBlU2V0OjppbnZhbGlkYXRlQ2FjaGUpOgorICAgICAgICAqIHJ1bnRp
bWUvVHlwZVNldC5oOgorICAgICAgICAoSlNDOjpUeXBlU2V0OjpzdHJ1Y3R1cmVTZXQpOgorICAg
ICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiBydW50aW1lL1dyaXRlQmFycmllcklubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyQmFzZTxUPjo6c2V0KToKKyAgICAgICAg
KEpTQzo6V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPjo6c2V0KToKKyAgICAgICAgKiB5YXJyL1lh
cnJJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxlcjo6Y29t
cGlsZSk6CisgICAgICAgIChKU0M6OllhcnI6OmJ5dGVDb21waWxlKToKKyAgICAgICAgKiB5YXJy
L1lhcnJJbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlY29kZVBhdHRlcm46
OkJ5dGVjb2RlUGF0dGVybik6CisKIDIwMTYtMTEtMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KIAogICAgICAgICBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZGlzYWJsZSBjb25j
dXJyZW50IEdDIHRpbWVzbGljaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0Myw3ICs3NDMs
NyBAQAogCQkwRkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0M4MTcz
REE1MUUwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0U3MTc0ODMwQTIwMDdCM0MxQiAv
KiBERkdXb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICovOyB9
OwogCQkwRkRCMkNFODE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0U2MTc0ODMwQTIwMDdC
M0MxQiAvKiBERkdXb3JrbGlzdC5oICovOyB9OwotCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIg
LyogQ29uY3VycmVudEpJVExvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9j
ay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
REIyQ0VBMTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SlNMb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNFOTE3NDg5NkM3MDA3QjND
MUIgLyogQ29uY3VycmVudEpTTG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGRERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBERkdWYXJpYWJs
ZUFjY2Vzc0RhdGFEdW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wLmNwcCAqLzsgfTsKIAkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wLmggKi87IH07CiAJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QxMUQ5
QzYwODYwMDFCOTgyNSAvKiBCM0tpbmQuaCAqLzsgfTsKQEAgLTMxNTcsNyArMzE1Nyw3IEBACiAJ
CTBGREIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGVExWYWx1ZUZyb21CbG9jay5oOyBwYXRoID0gZnRsL0ZUTFZhbHVlRnJvbUJsb2Nr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0Mx
QiAvKiBERkdXb3JrbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdXb3JrbGlzdC5jcHA7IHBhdGggPSBkZmcvREZHV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xp
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3QuaDsgcGF0
aCA9IGRmZy9ERkdXb3JrbGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkRC
MkNFOTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudEpJVExvY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKU0xv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudEpTTG9jay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYg
LyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsgcGF0aCA9IGRmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcC5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZERjY3RDAxRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0tpbmQuY3BwOyBwYXRo
ID0gYjMvQjNLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxMTMsNyAr
NjExMyw3IEBACiAJCQkJQTdFNUEzQTYxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVz
dWx0LmggKi8sCiAJCQkJOTY5QTA5MjIwRUQxRTA5QzAwRjFGNjgxIC8qIENvbXBsZXRpb24uY3Bw
ICovLAogCQkJCUY1QkIyQkM1MDMwRjc3MjEwMUZDRkUxRCAvKiBDb21wbGV0aW9uLmggKi8sCi0J
CQkJMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggKi8sCisJ
CQkJMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKU0xvY2suaCAqLywKIAkJ
CQlBNUI2QTc0QzE4QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5jcHAgKi8sCiAJCQkJ
QTUzQ0UwODkxOEJDMjFDMzAwQkVERjc2IC8qIENvbnNvbGVDbGllbnQuaCAqLywKIAkJCQlBNTU3
MTRCQzFDRDgwNDhFMDAwNEQyQzYgLyogQ29uc29sZU9iamVjdC5jcHAgKi8sCkBAIC03ODc1LDcg
Kzc4NzUsNyBAQAogCQkJCUE3RTVBM0E4MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJl
c3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjQwRTE2RjVDRDAwQjM0NDYwIC8qIENv
bXBsZXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNkZDNzUxMTk2MTEwQTgwMEUxRDAyRCAv
KiBDb21wbGV4R2V0U3RhdHVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkRCMkNFQTE3NDg5NkM3
MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGREIy
Q0VBMTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SlNMb2NrLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1M0NFMDhBMThCQzIxQzMwMEJFREY3NiAvKiBDb25zb2xlQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
cnJheVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BcnJheVByb2ZpbGUuY3BwCShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQs
NyArOTQsNyBAQCB2b2lkIGR1bXBBcnJheU1vZGVzKFByaW50U3RyZWFtJiBvdXQsIEFyCiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgIkZsb2F0NjRBcnJheU1vZGUiKTsKIH0KIAotdm9pZCBBcnJh
eVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQordm9pZCBBcnJheVByb2ZpbGU6OmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwg
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgaWYgKCFtX2xhc3RTZWVuU3RydWN0dXJlSUQp
CiAgICAgICAgIHJldHVybjsKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEFycmF5UHJvZmlsZTo6
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0CiAgICAgbV9sYXN0U2VlblN0cnVjdHVyZUlEID0gMDsKIH0K
IAotdm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogbGFzdFNl
ZW5TdHJ1Y3R1cmUpCit2b2lkIEFycmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmUqIGxhc3RTZWVuU3RydWN0dXJlKQogewogICAgIG1fb2JzZXJ2ZWRBcnJheU1vZGVzIHw9IGFy
cmF5TW9kZUZyb21TdHJ1Y3R1cmUobGFzdFNlZW5TdHJ1Y3R1cmUpOwogICAgIApAQCAtMTIyLDEz
ICsxMjIsMTMgQEAgdm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdAogICAg
ICAgICBtX3VzZXNPcmlnaW5hbEFycmF5U3RydWN0dXJlcyA9IGZhbHNlOwogfQogCi1DU3RyaW5n
IEFycmF5UHJvZmlsZTo6YnJpZWZEZXNjcmlwdGlvbihjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQorQ1N0cmluZyBBcnJheVByb2ZpbGU6OmJy
aWVmRGVzY3JpcHRpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9j
ayogY29kZUJsb2NrKQogewogICAgIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNv
ZGVCbG9jayk7CiAgICAgcmV0dXJuIGJyaWVmRGVzY3JpcHRpb25XaXRob3V0VXBkYXRpbmcobG9j
a2VyKTsKIH0KIAotQ1N0cmluZyBBcnJheVByb2ZpbGU6OmJyaWVmRGVzY3JpcHRpb25XaXRob3V0
VXBkYXRpbmcoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpCitDU3RyaW5nIEFycmF5UHJvZmls
ZTo6YnJpZWZEZXNjcmlwdGlvbldpdGhvdXRVcGRhdGluZyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImKQogewogICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHJldmlzaW9uIDIwODc1
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkNvbmN1cnJlbnRKSVRMb2NrLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgogI2lu
Y2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlIDx3dGYv
U2VnbWVudGVkVmVjdG9yLmg+CkBAIC0yMTYsMTkgKzIxNiwxOSBAQCBwdWJsaWM6CiAgICAgICAg
IG1fbGFzdFNlZW5TdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZS0+aWQoKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYsIENvZGVCbG9jayopOwotICAgIHZvaWQgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqIGxhc3RTZWVuU3Ry
dWN0dXJlKTsKKyAgICB2b2lkIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqKTsKKyAgICB2b2lkIGNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqIGxh
c3RTZWVuU3RydWN0dXJlKTsKICAgICAKLSAgICBBcnJheU1vZGVzIG9ic2VydmVkQXJyYXlNb2Rl
cyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJikgY29uc3QgeyByZXR1cm4gbV9vYnNlcnZlZEFy
cmF5TW9kZXM7IH0KLSAgICBib29sIG1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcyhjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJikgY29uc3QgeyByZXR1cm4gbV9tYXlJbnRlcmNlcHRJbmRleGVk
QWNjZXNzZXM7IH0KKyAgICBBcnJheU1vZGVzIG9ic2VydmVkQXJyYXlNb2Rlcyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImKSBjb25zdCB7IHJldHVybiBtX29ic2VydmVkQXJyYXlNb2RlczsgfQor
ICAgIGJvb2wgbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYpIGNvbnN0IHsgcmV0dXJuIG1fbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzOyB9CiAg
ICAgCi0gICAgYm9vbCBtYXlTdG9yZVRvSG9sZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJikg
Y29uc3QgeyByZXR1cm4gbV9tYXlTdG9yZVRvSG9sZTsgfQotICAgIGJvb2wgb3V0T2ZCb3VuZHMo
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpIGNvbnN0IHsgcmV0dXJuIG1fb3V0T2ZCb3VuZHM7
IH0KKyAgICBib29sIG1heVN0b3JlVG9Ib2xlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIGNv
bnN0IHsgcmV0dXJuIG1fbWF5U3RvcmVUb0hvbGU7IH0KKyAgICBib29sIG91dE9mQm91bmRzKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIGNvbnN0IHsgcmV0dXJuIG1fb3V0T2ZCb3VuZHM7IH0K
ICAgICAKLSAgICBib29sIHVzZXNPcmlnaW5hbEFycmF5U3RydWN0dXJlcyhjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJikgY29uc3QgeyByZXR1cm4gbV91c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVy
ZXM7IH0KKyAgICBib29sIHVzZXNPcmlnaW5hbEFycmF5U3RydWN0dXJlcyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImKSBjb25zdCB7IHJldHVybiBtX3VzZXNPcmlnaW5hbEFycmF5U3RydWN0dXJl
czsgfQogICAgIAotICAgIENTdHJpbmcgYnJpZWZEZXNjcmlwdGlvbihjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiwgQ29kZUJsb2NrKik7Ci0gICAgQ1N0cmluZyBicmllZkRlc2NyaXB0aW9uV2l0
aG91dFVwZGF0aW5nKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKTsKKyAgICBDU3RyaW5nIGJy
aWVmRGVzY3JpcHRpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKik7Cisg
ICAgQ1N0cmluZyBicmllZkRlc2NyaXB0aW9uV2l0aG91dFVwZGF0aW5nKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYpOwogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuY3BwCShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw3ICs1Miw3IEBAIENhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1cyhKU1ZhbHVlIHYKICAg
ICBtX3ZhcmlhbnRzLmFwcGVuZChDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSkpOwogfQogCi1D
YWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKK0NhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
RnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHByb2ZpbGVkQmxvY2spOwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKQEAgLTgx
LDcgKzgxLDcgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcgogQ2Fs
bExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9N
YXAmIG1hcCkKIHsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2Nr
LT5tX2xvY2spOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+
bV9sb2NrKTsKICAgICAKICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CiAgICAgVU5V
U0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwpAQCAtMTAzLDcgKzEwMyw3IEBAIENhbGxMaW5rU3Rh
dHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm8KIH0KIAogQ2FsbExpbmtTdGF0dXM6OkV4aXRT
aXRlRGF0YSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YSgKLSAgICBjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tl
ciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewog
ICAgIEV4aXRTaXRlRGF0YSBleGl0U2l0ZURhdGE7CiAgICAgCkBAIC0xMjQsNyArMTI0LDcgQEAg
Q2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBDYWxsTGlua1N0YQogCiAjaWYgRU5BQkxFKEpJ
VCkKIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAotICAgIGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKKyAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbykKIHsKICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzLCBidXQgYW55dGltZSB3
ZSBoYXZlIHRvIGRlYnVnIHRoaXMgY29kZSwgaXQgYmVjb21lcyBpbmRpc3BlbnNhYmxlLgogICAg
IFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBDYWxsTGlu
a1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiB9CiAKIENhbGxMaW5rU3RhdHVzIENh
bGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygKLSAgICBjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCisgICAgY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgaWYg
KGNhbGxMaW5rSW5mby5jbGVhcmVkQnlHQygpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0
aCgpOwpAQCAtMjI4LDcgKzIyOCw3IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpj
b21wdXRlRnIKIH0KIAogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3Io
Ci0gICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLAorICAgIGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvLAogICAgIEV4aXRTaXRlRGF0YSBleGl0U2l0ZURhdGEpCiB7CiAgICAg
Q2FsbExpbmtTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZvcihsb2NrZXIsIHByb2ZpbGVkQmxvY2ss
IGNhbGxMaW5rSW5mbyk7CkBAIC0yNzcsMTMgKzI3NywxMyBAQCB2b2lkIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlREZHU3RhdHVzZXMoCiAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0Zvck9y
aWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsK
ICAgICAgICAgRXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0YTsKICAgICAgICAgewotICAgICAgICAg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY3VycmVudEJhc2VsaW5lLT5tX2xvY2spOwor
ICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjdXJyZW50QmFzZWxpbmUtPm1f
bG9jayk7CiAgICAgICAgICAgICBleGl0U2l0ZURhdGEgPSBjb21wdXRlRXhpdFNpdGVEYXRhKAog
ICAgICAgICAgICAgICAgIGxvY2tlciwgY3VycmVudEJhc2VsaW5lLCBjb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB7Ci0gICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihkZmdDb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGRmZ0NvZGVCbG9jay0+bV9sb2NrKTsKICAg
ICAgICAgICAgIG1hcC5hZGQoaW5mby5jb2RlT3JpZ2luKCksIGNvbXB1dGVGb3IobG9ja2VyLCBk
ZmdDb2RlQmxvY2ssIGluZm8sIGV4aXRTaXRlRGF0YSkpOwogICAgICAgICB9CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJ
KHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua1N0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAi
Q2FsbFZhcmlhbnQuaCIKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29kZVNw
ZWNpYWxpemF0aW9uS2luZC5oIgotI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCisjaW5j
bHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgogI2luY2x1ZGUgIkV4aXRpbmdKSVRUeXBlLmgiCiAj
aW5jbHVkZSAiSW50cmluc2ljLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgpAQCAtNzAsMTQg
KzcwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCB0YWtlc1Nsb3dQYXRoIHsgZmFsc2UgfTsK
ICAgICAgICAgYm9vbCBiYWRGdW5jdGlvbiB7IGZhbHNlIH07CiAgICAgfTsKLSAgICBzdGF0aWMg
RXhpdFNpdGVEYXRhIGNvbXB1dGVFeGl0U2l0ZURhdGEoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYsIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgIHN0YXRpYyBFeGl0
U2l0ZURhdGEgY29tcHV0ZUV4aXRTaXRlRGF0YShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBD
b2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAKICNpZiBFTkFCTEUoSklU
KQogICAgIC8vIENvbXB1dGVzIHRoZSBzdGF0dXMgYXNzdW1pbmcgdGhhdCB3ZSBuZXZlciB0b29r
IHNsb3cgcGF0aCBhbmQgbmV2ZXIgcHJldmlvdXNseQogICAgIC8vIGV4aXRlZC4KLSAgICBzdGF0
aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwg
Q29kZUJsb2NrKiwgQ2FsbExpbmtJbmZvJik7CisgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNv
bXB1dGVGb3IoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgQ2FsbExpbmtJ
bmZvJik7CiAgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGb3IoCi0gICAgICAgIGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqLCBDYWxsTGlua0luZm8mLCBFeGl0
U2l0ZURhdGEpOworICAgICAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sq
LCBDYWxsTGlua0luZm8mLCBFeGl0U2l0ZURhdGEpOwogI2VuZGlmCiAgICAgCiAgICAgdHlwZWRl
ZiBIYXNoTWFwPENvZGVPcmlnaW4sIENhbGxMaW5rU3RhdHVzLCBDb2RlT3JpZ2luQXBwcm94aW1h
dGVIYXNoPiBDb250ZXh0TWFwOwpAQCAtMTE4LDEwICsxMTgsMTAgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICB2b2lkIG1ha2VDbG9zdXJlQ2FsbCgpOwogICAgIAotICAgIHN0YXRpYyBDYWxsTGlu
a1N0YXR1cyBjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2Rl
QmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICBzdGF0aWMgQ2FsbExpbmtTdGF0
dXMgY29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sq
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICNpZiBFTkFCTEUoSklUKQogICAgIHN0YXRpYyBD
YWxsTGlua1N0YXR1cyBjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygKLSAgICAgICAgY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIENhbGxMaW5rSW5mbyYpOworICAgICAgICBjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBDYWxsTGlua0luZm8mKTsKICNlbmRpZgogICAgIAogICAgIENhbGxWYXJp
YW50TGlzdCBtX3ZhcmlhbnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzksNyArNjc5
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmJlZ2luRHVtcFByb2ZpbGluZyhQcmludAogCiB2b2lkIENv
ZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsaW5nKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3Ry
dWN0aW9uKiYgaXQsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpCiB7Ci0gICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CiAgICAgCiAgICAgKytpdDsKICAgICBDU3RyaW5nIGRlc2NyaXB0aW9uID0gaXQt
PnUucHJvZmlsZS0+YnJpZWZEZXNjcmlwdGlvbihsb2NrZXIpOwpAQCAtNjkxLDcgKzY5MSw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxpbmcoUHJpbnQKIAogdm9pZCBDb2RlQmxv
Y2s6OmR1bXBBcnJheVByb2ZpbGluZyhQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlv
biomIGl0LCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKQogewotICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xv
Y2spOwogICAgIAogICAgICsraXQ7CiAgICAgaWYgKCFpdC0+dS5hcnJheVByb2ZpbGUpCkBAIC0x
OTY0LDcgKzE5NjQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
CiAgICAgaWYgKFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrID0ganNEeW5hbWljQ2FzdDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2sqPih1bmxpbmtlZENvZGVCbG9jaykpIHsKICAgICAgICAgU3ltYm9sVGFibGUqIGNsb25l
ZFN5bWJvbFRhYmxlID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVj
dXRhYmxlKS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZSgpOwogICAgICAgICBpZiAobV92
bS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKGNsb25lZFN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjbG9uZWRTeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgIGNs
b25lZFN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwogICAgICAg
ICB9CiAgICAgICAgIHJlcGxhY2VDb25zdGFudCh1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2stPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCks
IGNsb25lZFN5bWJvbFRhYmxlKTsKQEAgLTIyMTksNyArMjIxOSw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgICAgICAgICAgICAgaW50IHN5bWJv
bFRhYmxlSW5kZXggPSBwY1s1XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgICAgIFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KHN5
bWJvbFRhYmxlSW5kZXgpKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSBpZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xv
Y2spOwogICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBzeW1ib2xUYWJsZS0+ZmluZChs
b2NrZXIsIGlkZW50LmltcGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9
IHN5bWJvbFRhYmxlLT5lbmQobG9ja2VyKSk7CiAgICAgICAgICAgICAgICAgICAgIGl0ZXItPnZh
bHVlLnByZXBhcmVUb1dhdGNoKCk7CkBAIC0yMjc1LDcgKzIyNzUsNyBAQCB2b2lkIENvZGVCbG9j
azo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAKICAgICAgICAgICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogaW1wbCA9IChvcC50eXBlID09IE1vZHVsZVZhcikgPyBvcC5pbXBvcnRlZE5hbWUu
Z2V0KCkgOiBpZGVudC5pbXBsKCk7CiAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbFRhYmxlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRh
YmxlLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICAvLyBJZiBvdXIg
cGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0
IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCiAgICAgICAgICAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwogICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlE
Rm9yVmFyaWFibGUobG9ja2VyLCBpbXBsLCB2bSk7CkBAIC0yMjg5LDcgKzIyODksNyBAQCB2b2lk
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgICAgICAgICAgaW50
IHN5bWJvbFRhYmxlSW5kZXggPSBwY1syXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQo
c3ltYm9sVGFibGVJbmRleCkpOwogICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50ID0gaWRlbnRpZmllcihwY1s0XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAg
ICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMgY3JlYXRlZCB3aGlsZSBwcm9m
aWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHByZXBhcmVkIGZvciBwcm9maWxp
bmcgeWV0LgogICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBzeW1ib2xUYWJsZS0+
dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwgdm0pOwogICAgICAgICAg
ICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlh
YmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCB2bSk7CkBAIC0yNDU3LDcgKzI0NTcsNyBAQCB2b2lk
IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uCiAgICAgICAgIGlmICghY29uc3Rh
bnQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
ID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJsZSo+KGNvbnN0YW50KSkgewogICAgICAgICAgICAg
ICAgIGlmIChoYXNUeXBlUHJvZmlsZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAg
ICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2Nr
ZXIpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjk3Myw3ICsyOTczLDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXI6OgogI2VuZGlmCiB9CiAKLXZvaWQgQ29kZUJs
b2NrOjpnZXRTdHViSW5mb01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3R1YkluZm9N
YXAmIHJlc3VsdCkKK3ZvaWQgQ29kZUJsb2NrOjpnZXRTdHViSW5mb01hcChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBTdHViSW5mb01hcCYgcmVzdWx0KQogewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpCkBAIC0yOTg1LDExICsyOTg1LDExIEBA
IHZvaWQgQ29kZUJsb2NrOjpnZXRTdHViSW5mb01hcChjb25zdCBDb24KIAogdm9pZCBDb2RlQmxv
Y2s6OmdldFN0dWJJbmZvTWFwKFN0dWJJbmZvTWFwJiByZXN1bHQpCiB7Ci0gICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CiAgICAgZ2V0U3R1YkluZm9NYXAobG9ja2VyLCByZXN1bHQpOwogfQogCi12b2lk
IENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
LCBDYWxsTGlua0luZm9NYXAmIHJlc3VsdCkKK3ZvaWQgQ29kZUJsb2NrOjpnZXRDYWxsTGlua0lu
Zm9NYXAoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ2FsbExpbmtJbmZvTWFwJiByZXN1bHQp
CiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkK
QEAgLTMwMDEsMTEgKzMwMDEsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb01h
cChjb25zdAogCiB2b2lkIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvTWFwKENhbGxMaW5rSW5m
b01hcCYgcmVzdWx0KQogewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIGdldENhbGxMaW5r
SW5mb01hcChsb2NrZXIsIHJlc3VsdCk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpnZXRCeVZhbElu
Zm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIEJ5VmFsSW5mb01hcCYgcmVzdWx0KQor
dm9pZCBDb2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBCeVZhbEluZm9NYXAmIHJlc3VsdCkKIHsKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChKSVRD
b2RlOjppc0pJVChqaXRUeXBlKCkpKSB7CkBAIC0zMDE5LDE0ICszMDE5LDE0IEBAIHZvaWQgQ29k
ZUJsb2NrOjpnZXRCeVZhbEluZm9NYXAoY29uc3QgQ28KIAogdm9pZCBDb2RlQmxvY2s6OmdldEJ5
VmFsSW5mb01hcChCeVZhbEluZm9NYXAmIHJlc3VsdCkKIHsKLSAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKICAgICBnZXRCeVZhbEluZm9NYXAobG9ja2VyLCByZXN1bHQpOwogfQogCiAjaWYgRU5BQkxF
KEpJVCkKIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSkKIHsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICByZXR1cm4gbV9z
dHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOwogfQogCkBAIC0zMDYxLDEzICszMDYxLDEzIEBAIFN0
cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW4KIAogQnlWYWxJbmZvKiBDb2Rl
QmxvY2s6OmFkZEJ5VmFsSW5mbygpCiB7Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgcmV0
dXJuIG1fYnlWYWxJbmZvcy5hZGQoKTsKIH0KIAogQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmFk
ZENhbGxMaW5rSW5mbygpCiB7Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2Nr
KTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgcmV0dXJuIG1f
Y2FsbExpbmtJbmZvcy5hZGQoKTsKIH0KIApAQCAtMzA4Myw3ICszMDgzLDcgQEAgQ2FsbExpbmtJ
bmZvKiBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mbwogdm9pZCBDb2RlQmxvY2s6OnJlc2V0SklU
RGF0YSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkp
OwotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAogICAgIC8vIFdlIGNhbiBjbGVhciB0aGVz
ZSBiZWNhdXNlIG5vIG90aGVyIHRocmVhZCB3aWxsIGhhdmUgcmVmZXJlbmNlcyB0byBhbnkgc3R1
YiBpbmZvcywgY2FsbAogICAgIC8vIGxpbmsgaW5mb3MsIG9yIGJ5IHZhbCBpbmZvcyBpZiB3ZSBk
b24ndCBoYXZlIEpJVCBjb2RlLiBBdHRlbXB0cyB0byBxdWVyeSB0aGVzZSBkYXRhCkBAIC0zMzEz
LDcgKzMzMTMsNyBAQCBib29sIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1CiAK
IHZvaWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCiB7Ci0g
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fbG9jayk7CiAKICAgICBtX3JhcmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9G
aXQoKTsKICAgICAKQEAgLTM5NzUsNyArMzk3NSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRS
ZW9wdGltaXplRnJvbUxvb3AKIH0KICNlbmRpZgogCi1BcnJheVByb2ZpbGUqIENvZGVCbG9jazo6
Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCkKK0FycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJyYXlQcm9maWxlcy5zaXplKCk7ICsraSkgewog
ICAgICAgICBpZiAobV9hcnJheVByb2ZpbGVzW2ldLmJ5dGVjb2RlT2Zmc2V0KCkgPT0gYnl0ZWNv
ZGVPZmZzZXQpCkBAIC0zOTg2LDExICszOTg2LDExIEBAIEFycmF5UHJvZmlsZSogQ29kZUJsb2Nr
OjpnZXRBcnJheVByb2ZpbGUKIAogQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJv
ZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKLSAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsK
ICAgICByZXR1cm4gZ2V0QXJyYXlQcm9maWxlKGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOwogfQog
Ci1BcnJheVByb2ZpbGUqIENvZGVCbG9jazo6YWRkQXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJl
bnRKSVRMb2NrZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0FycmF5UHJvZmlsZSogQ29k
ZUJsb2NrOjphZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAgbV9hcnJheVByb2ZpbGVzLmFwcGVuZChBcnJheVBy
b2ZpbGUoYnl0ZWNvZGVPZmZzZXQpKTsKICAgICByZXR1cm4gJm1fYXJyYXlQcm9maWxlcy5sYXN0
KCk7CkBAIC0zOTk4LDExICszOTk4LDExIEBAIEFycmF5UHJvZmlsZSogQ29kZUJsb2NrOjphZGRB
cnJheVByb2ZpbGUKIAogQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmFkZEFycmF5UHJvZmlsZSh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICBy
ZXR1cm4gYWRkQXJyYXlQcm9maWxlKGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOwogfQogCi1BcnJh
eVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0T3JBZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYgbG9ja2VyLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0FycmF5UHJvZmls
ZSogQ29kZUJsb2NrOjpnZXRPckFkZEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlciwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAgQXJyYXlQcm9maWxl
KiByZXN1bHQgPSBnZXRBcnJheVByb2ZpbGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7CiAgICAg
aWYgKHJlc3VsdCkKQEAgLTQwMTIsNyArNDAxMiw3IEBAIEFycmF5UHJvZmlsZSogQ29kZUJsb2Nr
OjpnZXRPckFkZEFycmF5UHIKIAogQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldE9yQWRkQXJy
YXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogewotICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xv
Y2spOwogICAgIHJldHVybiBnZXRPckFkZEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5dGVjb2RlT2Zm
c2V0KTsKIH0KIApAQCAtNDA0Miw3ICs0MDQyLDcgQEAgY29uc3QgSWRlbnRpZmllciYgQ29kZUJs
b2NrOjppZGVudGlmaWVyKAogCiB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNB
bmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKQogewotICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwogICAgIAogICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlcyA9IDA7CiAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyA9IDA7IC8vIElmIHRoaXMg
ZGl2aWRlZCBieSBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyBlcXVhbHMgbnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzKCkgdGhlbiB2YWx1ZSBwcm9maWxlcyBhcmUgZnVsbC4KQEAgLTQwNzQsNyAr
NDA3NCw3IEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmUKIAogdm9p
ZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKQogewotICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2xvY2spOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fYXJyYXlQcm9maWxlcy5z
aXplKCk7IGktLTspCiAgICAgICAgIG1fYXJyYXlQcm9maWxlc1tpXS5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyLCB0aGlzKTsKQEAgLTQyODQsNyArNDI4NCw3IEBAIFN0cmluZyBDb2Rl
QmxvY2s6Om5hbWVGb3JSZWdpc3RlcihWaXJ0dWEKICAgICAgICAgaWYgKG1fY29uc3RhbnRSZWdp
c3RlcnNbaV0uZ2V0KCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IGlmIChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0R5bmFtaWNDYXN0PFN5bWJvbFRhYmxl
Kj4obV9jb25zdGFudFJlZ2lzdGVyc1tpXS5nZXQoKSkpIHsKLSAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAg
IGF1dG8gZW5kID0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpOwogICAgICAgICAgICAgZm9yIChh
dXRvIHB0ciA9IHN5bWJvbFRhYmxlLT5iZWdpbihsb2NrZXIpOyBwdHIgIT0gZW5kOyArK3B0cikg
ewogICAgICAgICAgICAgICAgIGlmIChwdHItPnZhbHVlLnZhck9mZnNldCgpID09IFZhck9mZnNl
dCh2aXJ0dWFsUmVnaXN0ZXIpKSB7CkBAIC00NjM2LDcgKzQ2MzYsNyBAQCBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMmIENvZGVCbG9jazo6bGl2CiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcz4gYW5hbHlzaXMgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcz4odGhpcyk7CiAgICAgewotICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CiAgICAgICAgIGlmICghbV9saXZlbmVzc0FuYWx5c2lzKQogICAgICAgICAgICAgbV9s
aXZlbmVzc0FuYWx5c2lzID0gV1RGTW92ZShhbmFseXNpcyk7CiAgICAgICAgIHJldHVybiAqbV9s
aXZlbmVzc0FuYWx5c2lzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAjaW5j
bHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAiQ29t
cGFjdEpJVENvZGVNYXAuaCIKLSNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgorI2luY2x1
ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRl
ICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oIgpAQCAtMjM1LDEzICsyMzUsMTMgQEAgcHVibGljOgogCiAgICAgT3B0aW9uYWw8dW5zaWdu
ZWQ+IGJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCk7CiAKLSAg
ICB2b2lkIGdldFN0dWJJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHViSW5m
b01hcCYgcmVzdWx0KTsKKyAgICB2b2lkIGdldFN0dWJJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIFN0dWJJbmZvTWFwJiByZXN1bHQpOwogICAgIHZvaWQgZ2V0U3R1YkluZm9NYXAo
U3R1YkluZm9NYXAmIHJlc3VsdCk7CiAgICAgCi0gICAgdm9pZCBnZXRDYWxsTGlua0luZm9NYXAo
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KTsKKyAg
ICB2b2lkIGdldENhbGxMaW5rSW5mb01hcChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDYWxs
TGlua0luZm9NYXAmIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRDYWxsTGlua0luZm9NYXAoQ2FsbExp
bmtJbmZvTWFwJiByZXN1bHQpOwogCi0gICAgdm9pZCBnZXRCeVZhbEluZm9NYXAoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKKyAgICB2b2lkIGdldEJ5
VmFsSW5mb01hcChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm9NYXAmIHJlc3Vs
dCk7CiAgICAgdm9pZCBnZXRCeVZhbEluZm9NYXAoQnlWYWxJbmZvTWFwJiByZXN1bHQpOwogICAg
IAogI2lmIEVOQUJMRShKSVQpCkBAIC0zMjIsNyArMzIyLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgQVNTRVJUKGhlYXAoKS0+aXNEZWZlcnJlZCgpKTsKICAgICAgICAgaGVhcCgpLT5yZXBv
cnRFeHRyYU1lbW9yeUFsbG9jYXRlZChjb2RlLT5zaXplKCkpOwotICAgICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgaXMg
cHJvYmFibHkgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBsb2NrIHdpbGwgYWxzbyBkbyBzb21ldGhp
bmcgc2ltaWxhciwgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KICAgICAgICAgbV9qaXRD
b2RlID0gY29kZTsKICAgICB9CkBAIC00MTMsNyArNDEzLDcgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlcy5zaXpl
KCk7IH0KICAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZShpbnQgaW5kZXgpIHsgcmV0dXJu
ICZtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIFNwZWN1bGF0ZWRU
eXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiBsb2NrZXIsIGludCBieXRlY29kZU9mZnNldCkKKyAgICBTcGVjdWxhdGVk
VHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiBsb2NrZXIsIGludCBieXRlY29kZU9mZnNldCkKICAgICB7CiAgICAgICAg
IGlmIChWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSA9IHZhbHVlUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwpAQCAtNDU5LDExICs0NTksMTEgQEAg
cHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2ZpbGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9hcnJheVByb2ZpbGVzLnNpemUoKTsgfQogICAgIGNvbnN0IEFycmF5UHJvZmlsZVZl
Y3RvciYgYXJyYXlQcm9maWxlcygpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlczsgfQotICAgIEFy
cmF5UHJvZmlsZSogYWRkQXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgQXJyYXlQcm9maWxlKiBhZGRBcnJheVByb2Zp
bGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwog
ICAgIEFycmF5UHJvZmlsZSogYWRkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
KTsKLSAgICBBcnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SklU
TG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEFycmF5UHJvZmlsZSogZ2V0
QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0KTsKICAgICBBcnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCk7Ci0gICAgQXJyYXlQcm9maWxlKiBnZXRPckFkZEFycmF5UHJvZmlsZShjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEFy
cmF5UHJvZmlsZSogZ2V0T3JBZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIEFycmF5UHJvZmlsZSogZ2V0T3JBZGRB
cnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogCiAgICAgLy8gRXhjZXB0aW9u
IGhhbmRsaW5nIHN1cHBvcnQKQEAgLTQ5NywxNyArNDk3LDE3IEBAIHB1YmxpYzoKICAgICBib29s
IGFkZEZyZXF1ZW50RXhpdFNpdGUoY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkp
OwotICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIHJldHVybiBtX2V4aXRQ
cm9maWxlLmFkZChsb2NrZXIsIHRoaXMsIHNpdGUpOwogICAgIH0KIAotICAgIGJvb2wgaGFzRXhp
dFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBERkc6OkZyZXF1
ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0CisgICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImIGxvY2tlciwgY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRl
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUo
bG9ja2VyLCBzaXRlKTsKICAgICB9CiAgICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBERkc6OkZy
ZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0CiAgICAgewotICAgICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CiAgICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShsb2NrZXIsIHNpdGUpOwogICAg
IH0KIApAQCAtNTkxLDcgKzU5MSw3IEBAIHB1YmxpYzoKICAgICBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMmIGxpdmVuZXNzQW5hbHlzaXMoKQogICAgIHsKICAgICAgICAgewotICAgICAgICAgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgICAgIGlmICghIW1fbGl2ZW5lc3NB
bmFseXNpcykKICAgICAgICAgICAgICAgICByZXR1cm4gKm1fbGl2ZW5lc3NBbmFseXNpczsKICAg
ICAgICAgfQpAQCAtODM0LDcgKzgzNCw3IEBAIHB1YmxpYzoKICAgICAvLyBBbm90aGVyIGV4Y2Vw
dGlvbiB0byB0aGUgcnVsZXMgaXMgdGhhdCB0aGUgR0MgY2FuIGRvIHdoYXRldmVyIGl0IHdhbnRz
CiAgICAgLy8gd2l0aG91dCBob2xkaW5nIGFueSBsb2NrcywgYmVjYXVzZSB0aGUgR0MgaXMgZ3Vh
cmFudGVlZCB0byB3YWl0IHVudGlsIGFueQogICAgIC8vIGNvbmN1cnJlbnQgY29tcGlsYXRpb24g
dGhyZWFkcyBmaW5pc2ggd2hhdCB0aGV5J3JlIGRvaW5nLgotICAgIG11dGFibGUgQ29uY3VycmVu
dEpJVExvY2sgbV9sb2NrOworICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAK
ICAgICBBdG9taWM8Ym9vbD4gbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQ7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcAko
cmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4
aXRQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCB2b2lkIEZyZXF1
ZW50RXhpdFNpdGU6OmR1bXAoUHJpbnRTdHJlYW0mCiBFeGl0UHJvZmlsZTo6RXhpdFByb2ZpbGUo
KSB7IH0KIEV4aXRQcm9maWxlOjp+RXhpdFByb2ZpbGUoKSB7IH0KIAotYm9vbCBFeGl0UHJvZmls
ZTo6YWRkKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqIG93bmVyLCBjb25z
dCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQorYm9vbCBFeGl0UHJvZmlsZTo6YWRkKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogb3duZXIsIGNvbnN0IEZyZXF1ZW50RXhpdFNp
dGUmIHNpdGUpCiB7CiAgICAgQVNTRVJUKHNpdGUuaml0VHlwZSgpICE9IEV4aXRGcm9tQW55dGhp
bmcpOwogCkBAIC04NSw3ICs4NSw3IEBAIFZlY3RvcjxGcmVxdWVudEV4aXRTaXRlPiBFeGl0UHJv
ZmlsZTo6ZXgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIEV4aXRQcm9maWxlOjpoYXNF
eGl0U2l0ZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgY29uc3QgRnJlcXVlbnRFeGl0U2l0
ZSYgc2l0ZSkgY29uc3QKK2Jvb2wgRXhpdFByb2ZpbGU6Omhhc0V4aXRTaXRlKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2ZyZXF1ZW50RXhpdFNpdGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MDAsNyArMTAwLDcgQEAgYm9vbCBFeGl0UHJvZmlsZTo6aGFzRXhpdFNpdGUoY29uc3QgQ29uYwog
UXVlcnlhYmxlRXhpdFByb2ZpbGU6OlF1ZXJ5YWJsZUV4aXRQcm9maWxlKCkgeyB9CiBRdWVyeWFi
bGVFeGl0UHJvZmlsZTo6flF1ZXJ5YWJsZUV4aXRQcm9maWxlKCkgeyB9CiAKLXZvaWQgUXVlcnlh
YmxlRXhpdFByb2ZpbGU6OmluaXRpYWxpemUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIGNv
bnN0IEV4aXRQcm9maWxlJiBwcm9maWxlKQordm9pZCBRdWVyeWFibGVFeGl0UHJvZmlsZTo6aW5p
dGlhbGl6ZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25zdCBFeGl0UHJvZmlsZSYgcHJv
ZmlsZSkKIHsKICAgICBpZiAoIXByb2ZpbGUubV9mcmVxdWVudEV4aXRTaXRlcykKICAgICAgICAg
cmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9m
aWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4
aXRQcm9maWxlLmgJKHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBA
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgi
CisjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgogI2luY2x1ZGUgIkV4aXRLaW5kLmgiCiAj
aW5jbHVkZSAiRXhpdGluZ0pJVFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAt
MTYwLDcgKzE2MCw3IEBAIHB1YmxpYzoKICAgICAvLyBiZSBjYWxsZWQgYSBmaXhlZCBudW1iZXIg
b2YgdGltZXMgcGVyIHJlY29tcGlsYXRpb24uIFJlY29tcGlsYXRpb24gaXMKICAgICAvLyByYXJl
IHRvIGJlZ2luIHdpdGgsIGFuZCBpbXBsaWVzIGRvaW5nIE8obikgb3BlcmF0aW9ucyBvbiB0aGUg
Q29kZUJsb2NrCiAgICAgLy8gYW55d2F5LgotICAgIGJvb2wgYWRkKGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImLCBDb2RlQmxvY2sqIG93bmVyLCBjb25zdCBGcmVxdWVudEV4aXRTaXRlJik7Cisg
ICAgYm9vbCBhZGQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBvd25lciwg
Y29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYpOwogICAgIAogICAgIC8vIEdldCB0aGUgZnJlcXVlbnQg
ZXhpdCBzaXRlcyBmb3IgYSBieXRlY29kZSBpbmRleC4gVGhpcyBpcyBPKG4pLCBhbmQgaXMKICAg
ICAvLyBtZWFudCB0byBvbmx5IGJlIHVzZWQgZnJvbSBkZWJ1Z2dpbmcvcHJvZmlsaW5nIGNvZGUu
CkBAIC0xNzAsMTIgKzE3MCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gaW4gdGhlIGNvbXBpbGVyLiBJ
dCBzaG91bGQgYmUgc3RyaWN0bHkgY2hlYXBlciB0aGFuIGJ1aWxkaW5nIGEKICAgICAvLyBRdWVy
eWFibGVFeGl0UHJvZmlsZSwgaWYgeW91IHJlYWxseSBleHBlY3QgdGhpcyB0byBiZSBjYWxsZWQg
aW5mcmVxdWVudGx5CiAgICAgLy8gYW5kIHlvdSBiZWxpZXZlIHRoYXQgdGhlcmUgYXJlIGZldyBl
eGl0IHNpdGVzLgotICAgIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYsIGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmKSBjb25zdDsKLSAgICBib29sIGhhc0V4aXRTaXRl
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgRXhpdEtpbmQga2luZCkgY29uc3QK
KyAgICBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEZy
ZXF1ZW50RXhpdFNpdGUmKSBjb25zdDsKKyAgICBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBFeGl0S2luZCBraW5kKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIGhhc0V4aXRTaXRlKGxvY2tlciwgRnJlcXVlbnRFeGl0U2l0ZShraW5kKSk7CiAg
ICAgfQotICAgIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9j
a2VyLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBFeGl0S2luZCBraW5kKSBjb25zdAorICAgIGJv
b2wgaGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgsIEV4aXRLaW5kIGtpbmQpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gaGFzRXhpdFNpdGUobG9ja2VyLCBGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIGtp
bmQpKTsKICAgICB9CkBAIC0xOTEsNyArMTkxLDcgQEAgcHVibGljOgogICAgIFF1ZXJ5YWJsZUV4
aXRQcm9maWxlKCk7CiAgICAgflF1ZXJ5YWJsZUV4aXRQcm9maWxlKCk7CiAgICAgCi0gICAgdm9p
ZCBpbml0aWFsaXplKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBjb25zdCBFeGl0UHJvZmls
ZSYpOworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBjb25z
dCBFeGl0UHJvZmlsZSYpOwogCiAgICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBGcmVxdWVudEV4
aXRTaXRlJiBzaXRlKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDIwODc1NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjIsNyArNjIsNyBAQCBib29sIEdldEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQo
Y29uc3QgCiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLWJvb2wgR2V0QnlJZFN0YXR1czo6aGFz
RXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitib29sIEdldEJ5SWRTdGF0dXM6
Omhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgcmV0dXJuIHBy
b2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5
dGVjb2RlSW5kZXgsIEJhZENhY2hlKSkKICAgICAgICAgfHwgcHJvZmlsZWRCbG9jay0+aGFzRXhp
dFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ29u
c3RhbnRDYWNoZSkpOwpAQCAtMTA5LDcgKzEwOSw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZyb20KIAogR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3R1YkluZm9NYXAmIG1hcCwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKLSAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIAogICAgIEdldEJ5SWRTdGF0
dXMgcmVzdWx0OwogCkBAIC0xMzIsNyArMTMyLDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCi1HZXRCeUlkU3RhdHVz
IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CitHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKIHsKICAgICBHZXRCeUlkU3RhdHVzIHJlc3VsdCA9IEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAogICAgICAgICBs
b2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCB1aWQsCkBAIC0xNDYsNyArMTQ2LDcgQEAg
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogCiAjaWYgRU5BQkxFKEpJ
VCkKIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91
dEV4aXRTaXRlRmVlZGJhY2soCi0gICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2Vy
LCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwKKyAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxv
Y2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCiAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRl
RGF0YSBjYWxsRXhpdFNpdGVEYXRhKQogewogICAgIGlmICghc3R1YkluZm8gfHwgIXN0dWJJbmZv
LT5ldmVyQ29uc2lkZXJlZCkKQEAgLTI5OCwxNCArMjk4LDE0IEBAIEdldEJ5SWRTdGF0dXMgR2V0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICBpZiAoZGZnQmxvY2spIHsKICAgICAgICAgQ2Fs
bExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBleGl0U2l0ZURhdGE7CiAgICAgICAgIHsKLSAgICAg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7
CisgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1f
bG9jayk7CiAgICAgICAgICAgICBleGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUV4aXRTaXRlRGF0YSgKICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEdl
dEJ5SWRTdGF0dXMgcmVzdWx0OwogICAgICAgICB7Ci0gICAgICAgICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihkZmdCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoZGZnQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICByZXN1bHQgPSBj
b21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjaygKICAgICAgICAgICAgICAg
ICBsb2NrZXIsIGRmZ0Jsb2NrLCBkZmdNYXAuZ2V0KGNvZGVPcmlnaW4pLCB1aWQsIGV4aXRTaXRl
RGF0YSk7CiAgICAgICAgIH0KQEAgLTMxNCw3ICszMTQsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIAog
ICAgICAgICB7Ci0gICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihwcm9maWxl
ZEJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihw
cm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgaWYgKGhhc0V4aXRTaXRlKGxvY2tl
ciwgcHJvZmlsZWRCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKICAgICAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5oCShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNs
dWRlICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKLSNpbmNsdWRl
ICJDb25jdXJyZW50SklUTG9jay5oIgorI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKICNp
bmNsdWRlICJFeGl0aW5nSklUVHlwZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRWYXJpYW50LmgiCiAK
QEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1
dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBDb2RlQmxvY2sqIGRmZ0Jsb2NrLCBTdHVi
SW5mb01hcCYgYmFzZWxpbmVNYXAsIFN0dWJJbmZvTWFwJiBkZmdNYXAsIENvZGVPcmlnaW4sIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgc3RhdGlj
IEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9y
aWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMg
Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayog
YmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKICNlbmRpZgogCiAgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlOyB9CkBAIC0xMDIsMTEgKzEwMiwxMSBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRl
OgogI2lmIEVOQUJMRShERkdfSklUKQotICAgIHN0YXRpYyBib29sIGhhc0V4aXRTaXRlKGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
KTsKKyAgICBzdGF0aWMgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICNlbmRpZgogI2lmIEVOQUJM
RShKSVQpCiAgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91
dEV4aXRTaXRlRmVlZGJhY2soCi0gICAgICAgIGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBD
b2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwKKyAgICAgICAgY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyosCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5rU3Rh
dHVzOjpFeGl0U2l0ZURhdGEpOwogI2VuZGlmCiAgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29t
cHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9M
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAkocmV2aXNpb24gMjA4
NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlcjo6Q29tcHJlc3NlZExh
enlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyKCkgeyB9CiBDb21wcmVzc2VkTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVIb2xkZXI6On5Db21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xk
ZXIoKSB7IH0KIAotdm9pZCBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXI6
OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbnMoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9j
a2VyKQordm9pZCBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXI6OmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiB7
CiAgICAgaWYgKCFtX2RhdGEpCiAgICAgICAgIHJldHVybjsKQEAgLTQzLDcgKzQzLDcgQEAgdm9p
ZCBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIbwogfQogCiBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZSogQ29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyOjphZGQo
Ci0gICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIGNvbnN0IExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5JiBrZXkpCisgICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkmIGtleSkKIHsKICAgICBpZiAoIW1fZGF0YSkKICAgICAg
ICAgbV9kYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZTo6TGlz
dD4oKTsKQEAgLTYyLDcgKzYyLDcgQEAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6Okxh
enlPcGVyYQogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6On5MYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZVBhcnNlcigpIHsgfQogCiB2b2lkIExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2Vy
Ojppbml0aWFsaXplKAotICAgIGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb21wcmVzc2Vk
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXImIGhvbGRlcikKKyAgICBjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXImIGhv
bGRlcikKIHsKICAgICBBU1NFUlQobV9tYXAuaXNFbXB0eSgpKTsKICAgICAKQEAgLTg3LDcgKzg3
LDcgQEAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIExhenlPcGVyYW5kVmFsdQogfQogCiBTcGVj
dWxhdGVkVHlwZSBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6cHJlZGljdGlvbigKLSAg
ICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5JiBrZXkpIGNvbnN0CisgICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBs
b2NrZXIsIGNvbnN0IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5JiBrZXkpIGNvbnN0CiB7CiAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBnZXRJZlByZXNlbnQoa2V5KTsK
ICAgICBpZiAoIXByb2ZpbGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjA4NzU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgorI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xv
Y2suaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0
ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMTUyLDEwICsxNTIsMTAgQEAgcHVi
bGljOgogICAgIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlcigpOwogICAg
IH5Db21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXIoKTsKICAgICAKLSAgICB2
b2lkIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbnMoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYp
OworICAgIHZvaWQgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImKTsKICAgICAKICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogYWRkKAotICAgICAg
ICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgY29uc3QgTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVLZXkmIGtleSk7CisgICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IExh
enlPcGVyYW5kVmFsdWVQcm9maWxlS2V5JiBrZXkpOwogICAgIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI7CkBAIC0xNjksMTMgKzE2OSwx
MyBAQCBwdWJsaWM6CiAgICAgfkxhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyKCk7CiAgICAg
CiAgICAgdm9pZCBpbml0aWFsaXplKAotICAgICAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiwgQ29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyJiBob2xkZXIpOworICAg
ICAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVIb2xkZXImIGhvbGRlcik7CiAgICAgCiAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUqIGdldElmUHJlc2VudCgKICAgICAgICAgY29uc3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVL
ZXkmIGtleSkgY29uc3Q7CiAgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbigKLSAg
ICAgICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIGNvbnN0IExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5JiBrZXkpIGNvbnN0OworICAgICAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBjb25zdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSYga2V5KSBjb25zdDsKIHByaXZhdGU6
CiAgICAgSGFzaE1hcDxMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSwgTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUqPiBtX21hcDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3Bw
CShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDcgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjplbWl0UgogICAgIGNhc2Ug
TGF6eU9wZXJhbmQ6IHsKICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUu
bGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5k
Lm9wZXJhbmQpKTsKICAgICAgICAgCi0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CiAgICAgICAgICAgICB1LmxhenlPcGVy
YW5kLmNvZGVCbG9jay0+bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKCkuYWRkKGxvY2tlciwga2V5
KTsKICAgICAgICAgaml0LnN0b3JlVmFsdWUocmVncywgcHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQo
MCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBA
IGJvb2wgUHV0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCAKIH0KIAogI2lmIEVOQUJM
RShERkdfSklUKQotYm9vbCBQdXRCeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZShjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKK2Jvb2wgUHV0QnlJZFN0YXR1czo6aGFzRXhpdFNpdGUoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNp
dGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGUp
KQogICAgICAgICB8fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJl
cXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDb25zdGFudENhY2hlKSk7CkBAIC0xMTAs
NyArMTEwLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogCiBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQogewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxl
ZEJsb2NrLT5tX2xvY2spOwogICAgIAogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsK
ICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CkBAIC0xMzQsNyArMTM0LDcgQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogfQogCiAjaWYgRU5BQkxFKEpJ
VCkKLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKK1B1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJh
c2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIHJldHVybiBjb21wdXRlRm9y
U3R1YkluZm8oCiAgICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1YkluZm8sIHVpZCwK
QEAgLTE0Miw3ICsxNDIsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JTCiB9CiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
KAotICAgIGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCisgICAgY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLAogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5r
U3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKIHsKICAgICBpZiAoIXN0dWJJ
bmZvIHx8ICFzdHViSW5mby0+ZXZlckNvbnNpZGVyZWQpCkBAIC0yNjYsNyArMjY2LDcgQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIGlmIChkZmdCbG9jaykg
ewogICAgICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0YTsKICAg
ICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoYmFzZWxpbmVC
bG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoYmFz
ZWxpbmVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgIGlmIChoYXNFeGl0U2l0ZShsb2NrZXIs
IGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAgICBleGl0
U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YSgKQEAgLTI3NSw3
ICsyNzUsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAg
ICAgICAgICAKICAgICAgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7CiAgICAgICAgIHsKLSAgICAg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGRmZ0Jsb2NrLT5tX2xvY2spOworICAg
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihkZmdCbG9jay0+bV9sb2NrKTsKICAg
ICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKICAgICAgICAgICAgICAgICBs
b2NrZXIsIGRmZ0Jsb2NrLCBkZmdNYXAuZ2V0KGNvZGVPcmlnaW4pLCB1aWQsIGV4aXRTaXRlRGF0
YSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxv
Y2sqIGJhc2VsaW5lQmxvY2ssIENvZGVCbG9jayogZGZnQmxvY2ssIFN0dWJJbmZvTWFwJiBiYXNl
bGluZU1hcCwgU3R1YkluZm9NYXAmIGRmZ01hcCwgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCk7CiAKICNpZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNv
bXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiBi
YXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpOworICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5m
byhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAj
ZW5kaWYKICAgICAKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0K
QEAgLTk3LDExICs5NywxMSBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgogI2lmIEVOQUJMRShE
RkdfSklUKQotICAgIHN0YXRpYyBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICBzdGF0aWMg
Ym9vbCBoYXNFeGl0U2l0ZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICNlbmRpZgogI2lmIEVOQUJMRShKSVQpCiAgICAgc3Rh
dGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLAorICAgICAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCiAgICAg
ICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwogI2VuZGlmCiAgICAgc3RhdGljIFB1
dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQ6OmZpCiAgICAgICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15IG93biBk
ZW1pc2U6IHN0dWIgcmVzZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCiAgICAgICAgIC8vIFRo
YXQgd29ya3MsIGJlY2F1c2UgZGVsZXRpbmcgYSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0
aGUgc2V0J3MgbGlzdCwgYW5kCiAgICAgICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNhbCBm
b3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0IHRoZSBzZXQgY2hhbmdpbmcuCi0gICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1faG9sZGVyLmNvZGVCbG9jaygpLT5tX2xvY2spOwor
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faG9sZGVyLmNvZGVCbG9jaygpLT5t
X2xvY2spOwogICAgICAgICBtX2hvbGRlci5zdHViSW5mbygpLT5yZXNldChtX2hvbGRlci5jb2Rl
QmxvY2soKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyMDg3NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb25jdXJy
ZW50SklUTG9jay5oIgorI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKICNpbmNsdWRlICJI
ZWFwLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgi
CkBAIC0xMDYsNyArMTA2LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIENTdHJpbmcgYnJpZWZEZXNjcmlwdGlvbihj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIpCisgICAgQ1N0cmluZyBicmllZkRlc2Ny
aXB0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQogICAgIHsKICAgICAgICAg
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgIApAQCAtMTM0LDcgKzEz
NCw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAKICAgICAvLyBVcGRhdGVzIHRo
ZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJv
bSBhbnkgdGhyZWFkCiAgICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCi0gICAg
U3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImKQorICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUobV9idWNrZXRzW2ldKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDIwODc1NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
LUFycmF5TW9kZSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiBsb2NrZXIsIEFycmF5UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24s
IGJvb2wgbWFrZVNhZmUpCitBcnJheU1vZGUgQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIEFycmF5UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6
OkFjdGlvbiBhY3Rpb24sIGJvb2wgbWFrZVNhZmUpCiB7CiAgICAgQXJyYXk6OkNsYXNzIG5vbkFy
cmF5OwogICAgIGlmIChwcm9maWxlLT51c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXMobG9ja2Vy
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNp
b24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IEFycmF5TW9kZSh3b3JkKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIEFycmF5TW9kZSBmcm9t
T2JzZXJ2ZWQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIEFycmF5UHJvZmlsZSosIEFycmF5
OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOworICAgIHN0YXRpYyBBcnJheU1vZGUgZnJvbU9ic2Vy
dmVkKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEFycmF5UHJvZmlsZSosIEFycmF5OjpBY3Rp
b24sIGJvb2wgbWFrZVNhZmUpOwogICAgIAogICAgIEFycmF5TW9kZSB3aXRoU3BlY3VsYXRpb24o
QXJyYXk6OlNwZWN1bGF0aW9uIHNwZWN1bGF0aW9uKSBjb25zdAogICAgIHsKQEAgLTE4MCw3ICsx
ODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBBcnJheU1vZGUodHlwZSgpLCBhcnJheUNs
YXNzLCBzcGVjdWxhdGlvbigpLCBjb252ZXJzaW9uKCkpOwogICAgIH0KICAgICAKLSAgICBBcnJh
eU1vZGUgd2l0aFNwZWN1bGF0aW9uRnJvbVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYgbG9ja2VyLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIGJvb2wgbWFrZVNhZmUpIGNvbnN0Cisg
ICAgQXJyYXlNb2RlIHdpdGhTcGVjdWxhdGlvbkZyb21Qcm9maWxlKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYgbG9ja2VyLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIGJvb2wgbWFrZVNhZmUpIGNv
bnN0CiAgICAgewogICAgICAgICBBcnJheTo6U3BlY3VsYXRpb24gbXlTcGVjdWxhdGlvbjsKIApA
QCAtMTk0LDcgKzE5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHdpdGhTcGVjdWxhdGlv
bihteVNwZWN1bGF0aW9uKTsKICAgICB9CiAgICAgCi0gICAgQXJyYXlNb2RlIHdpdGhQcm9maWxl
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgQXJyYXlQcm9maWxlKiBwcm9maWxl
LCBib29sIG1ha2VTYWZlKSBjb25zdAorICAgIEFycmF5TW9kZSB3aXRoUHJvZmlsZShjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQXJyYXlQcm9maWxlKiBwcm9maWxlLCBib29sIG1h
a2VTYWZlKSBjb25zdAogICAgIHsKICAgICAgICAgQXJyYXk6OkNsYXNzIG15QXJyYXlDbGFzczsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNyArNDA3LDcgQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldExvY2FsKTsKICAg
ICAgICAgQVNTRVJUKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4ID09IG1fY3Vy
cmVudEluZGV4KTsKLSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
ICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBu
b2RlLT5sb2NhbCgpKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1faW5s
aW5lU3RhY2tUb3AtPm1fbGF6eU9wZXJhbmRzLnByZWRpY3Rpb24obG9ja2VyLCBrZXkpOwogICAg
ICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcmVkaWN0aW9uKTsKQEAg
LTg1Miw3ICs4NTIsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbjsKICAgICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICBwcmVkaWN0aW9uID0gbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVP
ZmZzZXQobG9ja2VyLCBieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCkBAIC04OTEsNyArODkx
LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4t
PmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBz
dGFjay0+bV9wcm9maWxlZEJsb2NrOwotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgIHJldHVybiBw
cm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQobG9j
a2VyLCBieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCkBAIC05MjgsNyArOTI4LDcgQEAgcHJp
dmF0ZToKICAgICAKICAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJv
ZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24pCiAgICAgewotICAgICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7
CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2spOwogICAg
ICAgICBib29sIG1ha2VTYWZlID0gcHJvZmlsZS0+b3V0T2ZCb3VuZHMobG9ja2VyKTsKICAgICAg
ICAgcmV0dXJuIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGxvY2tlciwgcHJvZmlsZSwgYWN0aW9u
LCBtYWtlU2FmZSk7CkBAIC0xODgzLDcgKzE4ODMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbmxpbmluZygKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cyByZWNl
aXZlZCBpbnNpZGUgdGhlIGNhbGxlZS4gQnV0IHRoYXQgcHJvYmFibHkgd29uJ3QgbWF0dGVyIGZv
ciBtb3N0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxscy4KICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjb2RlQmxvY2sgJiYgYXJndW1lbnQgPCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChWYWx1ZVByb2Zp
bGUqIHByb2ZpbGUgPSBjb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPnByZWRpY3QocHJv
ZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcikpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtNDI2MSw3ICs0MjYxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBnZXRCeUlkU3RhdHVz
OwogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IDA7CiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5t
X2xvY2spOwogICAgICAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9pbmxpbmVT
dGFja1RvcC0+bV9ieVZhbEluZm9zLmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCku
Ynl0ZWNvZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBieXRl
Y29kZSBpcyBub3QgY29tcGlsZWQgaW4gdGhlIGJhc2VsaW5lIEpJVCwgYnlWYWxJbmZvIGJlY29t
ZXMgbnVsbC4KICAgICAgICAgICAgICAgICAvLyBBdCB0aGF0IHRpbWUsIHRoZXJlIGlzIG5vIGlu
Zm9ybWF0aW9uLgpAQCAtNDMxOSw3ICs0MzE5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgICAgICAgICAg
ICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzOwogICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9s
b2NrKTsKICAgICAgICAgICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX2J5VmFsSW5mb3MuZ2V0KENvZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4o
KS5ieXRlY29kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRo
ZSBieXRlY29kZSBpcyBub3QgY29tcGlsZWQgaW4gdGhlIGJhc2VsaW5lIEpJVCwgYnlWYWxJbmZv
IGJlY29tZXMgbnVsbC4KICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVy
ZSBpcyBubyBpbmZvcm1hdGlvbi4KQEAgLTQ5NDUsNyArNDk0NSw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHdh
dGNocG9pbnRzID0gMDsKICAgICAgICAgICAgIHVpbnRwdHJfdCBvcGVyYW5kOwogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+
bV9sb2NrKTsKICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgICAgICAgICAgd2F0Y2hwb2lu
dHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0OwogICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHJlc29sdmVUeXBlICE9IFVucmVzb2x2ZWRQcm9wZXJ0eSAmJiByZXNvbHZl
VHlwZSAhPSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQpAQCAtNDk5
MSw3ICs0OTkxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldDsKICAgICAgICAgICAgICAgICBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0KiBzY29wZU9iamVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0Kj4oSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2spKTsKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHNjb3BlT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKHNjb3BlT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOwog
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc2NvcGVPYmplY3Qt
PnN5bWJvbFRhYmxlKCktPmdldChsb2NrZXIsIHVpZCk7CiAgICAgICAgICAgICAgICAgICAgIHdh
dGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgICAgICAgICAgICAg
IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CkBAIC01MTE0LDcgKzUxMTQsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBXYXRjaHBv
aW50U2V0KiB3YXRjaHBvaW50cyA9IG51bGxwdHI7CiAgICAgICAgICAgICB1aW50cHRyX3Qgb3Bl
cmFuZDsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAg
ICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIHx8IHJlc29sdmVUeXBlID09IExvY2FsQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50cyA9IGN1
cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQ7CiAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAocmVzb2x2ZVR5cGUgIT0gVW5yZXNvbHZlZFByb3BlcnR5ICYmIHJlc29sdmVUeXBlICE9
IFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpCkBAIC01NTUyLDcgKzU1
NTIsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgLCBt
X2NhbGxlcihieXRlQ29kZVBhcnNlci0+bV9pbmxpbmVTdGFja1RvcCkKIHsKICAgICB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX3Byb2ZpbGVkQmxvY2stPm1fbG9j
ayk7CiAgICAgICAgIG1fbGF6eU9wZXJhbmRzLmluaXRpYWxpemUobG9ja2VyLCBtX3Byb2ZpbGVk
QmxvY2stPmxhenlPcGVyYW5kVmFsdWVQcm9maWxlcygpKTsKICAgICAgICAgbV9leGl0UHJvZmls
ZS5pbml0aWFsaXplKGxvY2tlciwgcHJvZmlsZWRCbG9jay0+ZXhpdFByb2ZpbGUoKSk7CiAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNp
b24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0
IGNvbXBpbGVJbXBsKAogICAgICAgICBuZXcgUGxhbihjb2RlQmxvY2ssIHByb2ZpbGVkREZHQ29k
ZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpKTsK
ICAgICAKICAgICBwbGFuLT5jYWxsYmFjayA9IGNhbGxiYWNrOwotICAgIGlmIChPcHRpb25zOjp1
c2VDb25jdXJyZW50SklUKCkpIHsKKyAgICBpZiAoT3B0aW9uczo6dXNlQ29uY3VycmVudEpTKCkp
IHsKICAgICAgICAgV29ya2xpc3QmIHdvcmtsaXN0ID0gZW5zdXJlR2xvYmFsV29ya2xpc3RGb3Io
bW9kZSk7CiAgICAgICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMobW9kZSkpCiAgICAgICAg
ICAgICBkYXRhTG9nKCJEZWZlcnJpbmcgREZHIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ss
ICIgd2l0aCBxdWV1ZSBsZW5ndGggIiwgd29ya2xpc3QucXVldWVMZW5ndGgoKSwgIi5cbiIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZp
c2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTc3LDcgKzE1NzcsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgfSBlbHNlIGlmICh0eXBlU2V0LT5kb2VzVHlwZUNvbmZvcm1UbyhUeXBlT2JqZWN0KSkg
ewogICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7CiAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcih0eXBlU2V0LT5t
X2xvY2spOworICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHR5
cGVTZXQtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIHNldCA9IHR5cGVTZXQtPnN0cnVj
dHVyZVNldChsb2NrZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAo
IXNldC5pc0VtcHR5KCkpIHsKQEAgLTI2NTksNyArMjY1OSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBwcm9maWxlZEJsb2NrLT5nZXRBcnJheVByb2ZpbGUobm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2Rl
KEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKICAgICAgICAgaWYgKGFycmF5UHJvZmls
ZSkgewotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9j
ay0+bV9sb2NrKTsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmls
ZWRCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlciwgcHJvZmlsZWRCbG9jayk7CiAgICAgICAgICAgICBhcnJheU1v
ZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChsb2NrZXIsIGFycmF5UHJvZmlsZSwgQXJyYXk6
OlJlYWQsIGZhbHNlKTsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5
OjpVbnByb2ZpbGVkKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMjMsNyArMTMyMyw3IEBAIEpTVmFsdWUgR3JhcGg6
OnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcigKICAgICBKU1ZhbHVlIHZhbHVlOwogICAgIFdhdGNo
cG9pbnRTZXQqIHNldDsKICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAKICAgICAgICAgU3ltYm9sVGFibGVFbnRy
eSogZW50cnkgPSBzeW1ib2xUYWJsZS0+ZW50cnlGb3IobG9ja2VyLCBvZmZzZXQpOwogICAgICAg
ICBpZiAoIWVudHJ5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAy
MDg3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjUsNyArODY1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHdyaXRlcy5hZGQoQWN0aXZhdGlvblNjb3BlUExvYywgTGF6eU5vZGUo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbm9kZS0+Y2FzdE9wZXJhbmQ8U3ltYm9sVGFibGUq
PigpOwotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRh
YmxlLT5tX2xvY2spOworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgTGF6eU5vZGUgaW5pdGlhbFZh
bHVlKG1fZ3JhcGguZnJlZXplKG5vZGUtPmluaXRpYWxpemF0aW9uVmFsdWVGb3JBY3RpdmF0aW9u
KCkpKTsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHN5bWJvbFRhYmxlLT5iZWdp
bihsb2NrZXIpLCBlbmQgPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcik7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgd3JpdGVzLmFkZCgKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyAr
NDksNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKSA+PSAxKTsKICAgICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jaygpLT5tX2xvY2spOworICAgICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrKCktPm1fbG9jayk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0
PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CiAgICAgICAg
ICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gcHJvZmlsZWRCbG9jaygpLT52YWx1ZVBy
b2ZpbGVGb3JBcmd1bWVudChhcmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Mzg4
LDcgKzgzODgsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgp
KSB7CiAgICAgICAgICAgICAvLyBWYWxpZGF0ZSB0byBtYWtlIHN1cmUgZXZlcnkgc2xvdCBpbiB0
aGUgc2NvcGUgaGFzIG9uZSB2YWx1ZS4KLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKHRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcih0YWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgIGZvciAoYXV0byBpdGVyID0gdGFibGUt
PmJlZ2luKGxvY2tlciksIGVuZCA9IHRhYmxlLT5lbmQobG9ja2VyKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgewogICAgICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyAr
K2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBAIGV4dGVybiAiQyIg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKIAogICAgICAgICBpZiAodmFsaWRhdGlvbkVu
YWJsZWQoKSkgewogICAgICAgICAgICAgLy8gVmFsaWRhdGUgdG8gbWFrZSBzdXJlIGV2ZXJ5IHNs
b3QgaW4gdGhlIHNjb3BlIGhhcyBvbmUgdmFsdWUuCi0gICAgICAgICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcih0YWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIodGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICBmb3IgKGF1dG8gaXRlciA9
IHRhYmxlLT5iZWdpbihsb2NrZXIpLCBlbmQgPSB0YWJsZS0+ZW5kKGxvY2tlcik7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIHsKICAgICAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVz
KCkuc2l6ZSgpOyBpLS07KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
cmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk4Nyw3ICs5ODcsNyBAQCB2b2lkIEhlYXA6OmRlbGV0ZVVubWFy
a2VkQ29tcGlsZWRDb2RlKCkKIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpT
Q2VsbCogY2VsbCkKIHsKICAgICBBU1NFUlQoY2VsbCk7Ci0gICAgQVNTRVJUKCFPcHRpb25zOjp1
c2VDb25jdXJyZW50SklUKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgQVNTRVJU
KCFPcHRpb25zOjp1c2VDb25jdXJyZW50SlMoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsK
ICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKSB7CiAgICAgICAgIC8v
IER1cmluZyBhIGZ1bGwgY29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0
IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0CiAgICAgICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFu
aWZlc3QgYXMgYSBzdG9yZSB0byBhbiB1bm1hcmtlZCBibGFjayBvYmplY3QuIElmIHRoZSBvYmpl
Y3QgZ2V0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjA4NzU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MjUsNyArNTI1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21w
aQogICAgICAgICBiZWZvcmUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOwogICAg
IAogICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9jb2RlQmxvY2st
Pm1fbG9jayk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2st
Pm1fbG9jayk7CiAgICAgICAgIG1faW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmNsb25lKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjEsNyArMTAyMSw3IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBhcnJheVByb2ZpbGVTYXcoQXJyYXkKIAogaW5saW5lIEpJVEFycmF5TW9k
ZSBKSVQ6OmNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCiB7Ci0gICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKICAgICBwcm9maWxlLT5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBtX2NvZGVCbG9jayk7CiAgICAgQXJyYXlN
b2RlcyBhcnJheU1vZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKGxvY2tlcik7CiAg
ICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3VibGVTaGFwZSkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIw
ODc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYxMCw3ICs2MTAsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0
IHRyeVB1dEJ5VmFsT3B0CiAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0
QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpZiAoaml0QXJy
YXlNb2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFy
cmF5TW9kZSkgewogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+
Y29kZUJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
Y29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJy
YXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0
cnVjdHVyZSk7CiAKICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbCgmdm0sIGV4
ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CkBA
IC02MzgsNyArNjM4LDcgQEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlQdXRCeVZhbE9w
dAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICAgICAgICAg
ICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAg
ICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7
CiAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBieVZhbEluZm8tPmNhY2hlZElkID0gcHJvcGVydHlOYW1lOwogICAgICAgICAgICAgICAgIGlm
IChzdWJzY3JpcHQuaXNTeW1ib2woKSkKQEAgLTY5NCw3ICs2OTQsNyBAQCBzdGF0aWMgT3B0aW1p
emF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5CiAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBi
eVZhbEluZm8tPmFycmF5TW9kZSkgewogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIGJ5
VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBj
b2RlQmxvY2ssIHN0cnVjdHVyZSk7CiAKICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVEaXJl
Y3RQdXRCeVZhbCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIGFycmF5TW9kZSk7CkBAIC03MjAsNyArNzIwLDcgQEAgc3RhdGljIE9wdGltaXphdGlvblJl
c3VsdCB0cnlEaXJlY3RQdXRCeQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmNhY2hlZElkID0gcHJvcGVydHlOYW1lOwog
ICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSkKQEAgLTE3NDMsNyArMTc0
Myw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5R2V0QnlWYWxPcHQKICAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIHRoaXMgY2FzZSwgd2UgZ290IGFuIGludGVyZXN0aW5n
IGFycmF5IG1vZGUgd2UgZGlkIG5vdCBleHBlY3Qgd2hlbiB3ZSBjb21waWxlZC4KICAgICAgICAg
ICAgICAgICAvLyBMZXQncyB1cGRhdGUgdGhlIHByb2ZpbGUgdG8gZG8gYmV0dGVyIG5leHQgdGlt
ZS4KICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOwotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9j
ay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmls
ZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUp
OwogCiAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJnZtLCBleGVjLT5jb2Rl
QmxvY2soKSwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwpAQCAtMTc3MSw3
ICsxNzcxLDcgQEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlHZXRCeVZhbE9wdAogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICAgICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAg
ICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBieVZh
bEluZm8tPmNhY2hlZElkID0gcHJvcGVydHlOYW1lOwogICAgICAgICAgICAgICAgIGlmIChzdWJz
Y3JpcHQuaXNTeW1ib2woKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMy
NCw3ICsxMzI0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaAog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQo
YnlWYWxJbmZvLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHByb3BlcnR5TmFtZSwgZmFzdERvbmVDYXNl
LCBzbG93RG9uZUNhc2UsIHNsb3dDYXNlcyk7CiAKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fY29kZUJsb2NrLT5tX2xvY2spOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0s
ICp0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENv
ZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZv
LT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFzdERv
bmVDYXNlLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5i
YWRUeXBlSnVtcFRvRG9uZSkpOwpAQCAtMTQxNSw3ICsxNDE1LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaAogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4g
PSBlbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoYnlWYWxJbmZvLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNhc2VzLCBzbG93Q2FzZXMpOwogCi0gICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxvY2spOwogICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJl
bEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRj
aEJ1ZmZlci5saW5rKGRvbmVDYXNlcywgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zm
c2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5
LDcgKzIyOSw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJl
bnRKSVQoKSkgeworICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEpTKCkpIHsKICAgICAg
ICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2spOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2Nr
KiAKICAgICB9CiAgICAgCiAgICAgaWYgKGlzUGxhbm5lZCkgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChPcHRpb25zOjp1c2VDb25jdXJyZW50SlMoKSk7CiAgICAgICAgIC8vIFRoaXMgaXMgZXhwZW5z
aXZlLCBidXQgcHJvYmFibHkgZ29vZCBlbm91Z2guCiAgICAgICAgIGNvbXBsZXRlQWxsRm9yVk0o
KmNvZGVCbG9jay0+dm0oKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTksNyArMzE5LDcgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogdm9pZCByZXBhdGNoR2V0QnlJRChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBHZXRCeUlES2luZCBraW5kKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKLSAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihl
eGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOworICAgIEdDU2FmZUNv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+
dm0oKS5oZWFwKTsKICAgICAKICAgICBpZiAodHJ5Q2FjaGVHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1
ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywga2luZCkgPT0gR2l2ZVVwT25DYWNoZSkK
ICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHVi
SW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVu
Y3Rpb24oa2luZCkpOwpAQCAtNDczLDcgKzQ3Myw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZVB1dEJ5SUQKIHZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29w
ZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKKyAg
ICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xv
Y2ssIGV4ZWMtPnZtKCkuaGVhcCk7CiAgICAgCiAgICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVj
LCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0
S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxs
KGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHBy
b3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lv
biAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjcsNyArNjI3LDcgQEAgc3RhdGljIHZvaWQgc2V0dXBH
ZXRCeUlkUHJvdG90eXBlQ2FjaGUoRQogICAgIH0KICAgICBBU1NFUlQoKG9mZnNldCA9PSBpbnZh
bGlkT2Zmc2V0KSA9PSBzbG90LmlzVW5zZXQoKSk7CiAKLSAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jayk7CiAKICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpIHsKICAgICAg
ICAgcGNbMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZF91bnNldCk7
CkBAIC02NzUsNyArNjc1LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9i
eV9pZAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2Nr
KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAKICAgICAgICAgICAgICAgICBwY1s0
XS51LnN0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwogICAgICAgICAgICAgICAgIHBjWzVd
LnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CkBAIC03NDgsNyArNzQ4LDcgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAgICAgdm0uaGVh
cC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKLSAgICAgICAg
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
aywgdm0uaGVhcCk7CisgICAgICAgICAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0uaGVhcCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgJiYgc3RydWN0dXJlLT5wcmV2
aW91c0lEKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnByZXZpb3Vz
SUQoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CkBAIC0x
MzM1LDcgKzEzMzUsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVj
CiAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJbmZvKSB7CiAg
ICAgICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAK
LSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xv
Y2spOworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNhbGxlckNvZGVCbG9jay0+
bV9sb2NrKTsKICAgICAgICAgCiAgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmlzT25MaXN0KCkp
CiAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnJlbW92ZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1
ZW5jZS5jcHAJKHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw3IEBAIEJ5dGVjb2RlU2VxdWVuY2U6OkJ5dGVjb2RlU2VxdWVuY2UoQ29kZUIKICAgICBT
dHJpbmdQcmludFN0cmVhbSBvdXQ7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNvZGVCbG9jay0+bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKTsgKytpKSB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAg
IENTdHJpbmcgZGVzY3JpcHRpb24gPSBjb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50
KGkpLT5icmllZkRlc2NyaXB0aW9uKGxvY2tlcik7CiAgICAgICAgIGlmICghZGVzY3JpcHRpb24u
bGVuZ3RoKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjA4NzU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODI2LDcgKzgyNiw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9yZXNvbHZlX3Njb3BlKQogICAgICAgICBpZiAocmVzb2x2ZWRTY29wZS0+aXNHbG9iYWxPYmpl
Y3QoKSkgewogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2Fz
dDxKU0dsb2JhbE9iamVjdCo+KHJlc29sdmVkU2NvcGUpOwogICAgICAgICAgICAgaWYgKGdsb2Jh
bE9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKSB7Ci0gICAgICAgICAgICAgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAg
ICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+
bV9sb2NrKTsKICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gVW5yZXNvbHZlZFBy
b3BlcnR5KQogICAgICAgICAgICAgICAgICAgICBwY1s0XS51Lm9wZXJhbmQgPSBHbG9iYWxQcm9w
ZXJ0eTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC04MzYsNyArODM2LDcgQEAgU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSBpZiAocmVzb2x2ZWRTY29wZS0+aXNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSkgewog
ICAgICAgICAgICAgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQqIGdsb2JhbExleGljYWxFbnZp
cm9ubWVudCA9IGpzQ2FzdDxKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudCo+KHJlc29sdmVkU2Nv
cGUpOwotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJs
b2NrKCktPm1fbG9jayk7CisgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGV4
ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09
IFVucmVzb2x2ZWRQcm9wZXJ0eSkKICAgICAgICAgICAgICAgICBwY1s0XS51Lm9wZXJhbmQgPSBH
bG9iYWxMZXhpY2FsVmFyOwogICAgICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDIwODc1NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgaW5saW5lIHZvaWQgdHJ5Q2FjaGVQdXRUb1Nj
b3BlR2xvYmFsKAogICAgICAgICAgICAgUmVzb2x2ZVR5cGUgbmV3UmVzb2x2ZVR5cGUgPSByZXNv
bHZlVHlwZSA9PSBVbnJlc29sdmVkUHJvcGVydHkgPyBHbG9iYWxQcm9wZXJ0eSA6IEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczsKICAgICAgICAgICAgIHJlc29sdmVUeXBlID0g
bmV3UmVzb2x2ZVR5cGU7CiAgICAgICAgICAgICBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhnZXRQ
dXRJbmZvLnJlc29sdmVNb2RlKCksIG5ld1Jlc29sdmVUeXBlLCBnZXRQdXRJbmZvLmluaXRpYWxp
emF0aW9uTW9kZSgpKTsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
Y29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgcGNbNF0udS5vcGVyYW5kID0gZ2V0UHV0
SW5mby5vcGVyYW5kKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2NvcGUtPmlzR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50KCkpIHsKICAgICAgICAgICAgIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
KiBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNHbG9iYWxMZXhpY2FsRW52aXJv
bm1lbnQqPihzY29wZSk7CkBAIC0xMTQsNyArMTE0LDcgQEAgaW5saW5lIHZvaWQgdHJ5Q2FjaGVQ
dXRUb1Njb3BlR2xvYmFsKAogICAgICAgICAgICAgcGNbNF0udS5vcGVyYW5kID0gR2V0UHV0SW5m
byhnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIG5ld1Jlc29sdmVUeXBlLCBnZXRQdXRJbmZvLmlu
aXRpYWxpemF0aW9uTW9kZSgpKS5vcGVyYW5kKCk7CiAgICAgICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5IGVudHJ5ID0gZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpLT5nZXQo
aWRlbnQuaW1wbCgpKTsKICAgICAgICAgICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAg
ICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwor
ICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7
CiAgICAgICAgICAgICBwY1s1XS51LndhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0
KCk7CiAgICAgICAgICAgICBwY1s2XS51LnBvaW50ZXIgPSBzdGF0aWNfY2FzdDx2b2lkKj4oZ2xv
YmFsTGV4aWNhbEVudmlyb25tZW50LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLnNs
b3QoKSk7CiAgICAgICAgIH0KQEAgLTEzNCw3ICsxMzQsNyBAQCBpbmxpbmUgdm9pZCB0cnlDYWNo
ZVB1dFRvU2NvcGVHbG9iYWwoCiAgICAgICAgIAogICAgICAgICBzY29wZS0+c3RydWN0dXJlKCkt
PmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudChleGVjLT52bSgpLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKIAotICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jayk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOwogICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29kZUJsb2Nr
LCBzY29wZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNh
Y2hlZE9mZnNldCgpOwogICAgIH0KQEAgLTE1MCwxNCArMTUwLDE0IEBAIGlubGluZSB2b2lkIHRy
eUNhY2hlR2V0RnJvbVNjb3BlR2xvYmFsKAogICAgICAgICBpZiAoc2NvcGUtPmlzR2xvYmFsT2Jq
ZWN0KCkpIHsKICAgICAgICAgICAgIFJlc29sdmVUeXBlIG5ld1Jlc29sdmVUeXBlID0gcmVzb2x2
ZVR5cGUgPT0gVW5yZXNvbHZlZFByb3BlcnR5ID8gR2xvYmFsUHJvcGVydHkgOiBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M7CiAgICAgICAgICAgICByZXNvbHZlVHlwZSA9IG5l
d1Jlc29sdmVUeXBlOyAvLyBBbGxvdyBiZWxvdyBjYWNoaW5nIG1lY2hhbmlzbSB0byBraWNrIGlu
LgotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2Nr
KCktPm1fbG9jayk7CisgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGV4ZWMt
PmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAgICAgICAgICAgcGNbNF0udS5vcGVyYW5kID0gR2V0
UHV0SW5mbyhnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIG5ld1Jlc29sdmVUeXBlLCBnZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKS5vcGVyYW5kKCk7CiAgICAgICAgIH0gZWxzZSBpZiAo
c2NvcGUtPmlzR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpIHsKICAgICAgICAgICAgIEpTR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50KiBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgPSBqc0Nhc3Q8
SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQqPihzY29wZSk7CiAgICAgICAgICAgICBSZXNvbHZl
VHlwZSBuZXdSZXNvbHZlVHlwZSA9IHJlc29sdmVUeXBlID09IFVucmVzb2x2ZWRQcm9wZXJ0eSA/
IEdsb2JhbExleGljYWxWYXIgOiBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czsKICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCktPmdldChpZGVudC5pbXBsKCkpOwogICAgICAgICAgICAg
QVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgICAgICAg
ICBwY1s0XS51Lm9wZXJhbmQgPSBHZXRQdXRJbmZvKGdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwg
bmV3UmVzb2x2ZVR5cGUsIGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLm9wZXJhbmQo
KTsKICAgICAgICAgICAgIHBjWzVdLnUud2F0Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9pbnRT
ZXQoKTsKICAgICAgICAgICAgIHBjWzZdLnUucG9pbnRlciA9IHN0YXRpY19jYXN0PHZvaWQqPihn
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSku
c2xvdCgpKTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBpbmxpbmUgdm9pZCB0cnlDYWNoZUdldEZyb21T
Y29wZUdsb2JhbCgKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29k
ZUJsb2NrKCk7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNjb3BlLT5zdHJ1
Y3R1cmUodm0pOwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICBw
Y1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgICAgIHBjWzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAg
ICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJy
ZW50SklUTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbmN1cnJlbnRKSVRMb2NrLmgJKHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
MzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkRlZmVyR0MuaCIKLSNpbmNsdWRlIDx3
dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9Ob0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpCi10
eXBlZGVmIExvY2sgQ29uY3VycmVudEpJVExvY2s7Ci10eXBlZGVmIExvY2tIb2xkZXIgQ29uY3Vy
cmVudEpJVExvY2tlckltcGw7Ci0jZWxzZQotdHlwZWRlZiBOb0xvY2sgQ29uY3VycmVudEpJVExv
Y2s7Ci10eXBlZGVmIE5vTG9ja0xvY2tlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKLSNlbmRp
ZgotCi1jbGFzcyBDb25jdXJyZW50SklUTG9ja2VyQmFzZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ29uY3VycmVudEpJVExvY2tlckJhc2UpOwotcHVibGljOgotICAgIGV4cGxpY2l0IENv
bmN1cnJlbnRKSVRMb2NrZXJCYXNlKENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrYWJsZSkKLSAgICAg
ICAgOiBtX2xvY2tlcigmbG9ja2FibGUpCi0gICAgewotICAgIH0KLSAgICBleHBsaWNpdCBDb25j
dXJyZW50SklUTG9ja2VyQmFzZShDb25jdXJyZW50SklUTG9jayogbG9ja2FibGUpCi0gICAgICAg
IDogbV9sb2NrZXIobG9ja2FibGUpCi0gICAgewotICAgIH0KLQotICAgIGV4cGxpY2l0IENvbmN1
cnJlbnRKSVRMb2NrZXJCYXNlKE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKLSAgICAgICAgOiBtX2xv
Y2tlcihOb0xvY2tpbmdOZWNlc3NhcnkpCi0gICAgewotICAgIH0KLQotICAgIH5Db25jdXJyZW50
SklUTG9ja2VyQmFzZSgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIHVubG9ja0Vhcmx5
KCkKLSAgICB7Ci0gICAgICAgIG1fbG9ja2VyLnVubG9ja0Vhcmx5KCk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIENvbmN1cnJlbnRKSVRMb2NrZXJJbXBsIG1fbG9ja2VyOwotfTsKLQotY2xhc3Mg
R0NTYWZlQ29uY3VycmVudEpJVExvY2tlciA6IHB1YmxpYyBDb25jdXJyZW50SklUTG9ja2VyQmFz
ZSB7Ci1wdWJsaWM6Ci0gICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlcihDb25jdXJyZW50SklU
TG9jayYgbG9ja2FibGUsIEhlYXAmIGhlYXApCi0gICAgICAgIDogQ29uY3VycmVudEpJVExvY2tl
ckJhc2UobG9ja2FibGUpCi0gICAgICAgICwgbV9kZWZlckdDKGhlYXApCi0gICAgewotICAgIH0K
LQotICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIoQ29uY3VycmVudEpJVExvY2sqIGxvY2th
YmxlLCBIZWFwJiBoZWFwKQotICAgICAgICA6IENvbmN1cnJlbnRKSVRMb2NrZXJCYXNlKGxvY2th
YmxlKQotICAgICAgICAsIG1fZGVmZXJHQyhoZWFwKQotICAgIHsKLSAgICB9Ci0KLSAgICB+R0NT
YWZlQ29uY3VycmVudEpJVExvY2tlcigpCi0gICAgewotICAgICAgICAvLyBXZSBoYXZlIHRvIHVu
bG9jayBlYXJseSBkdWUgdG8gdGhlIGRlc3RydWN0aW9uIG9yZGVyIG9mIGJhc2UKLSAgICAgICAg
Ly8gdnMuIGRlcml2ZWQgY2xhc3Nlcy4gSWYgd2UgZGlkbid0LCB0aGVuIHdlIHdvdWxkIGRlc3Ry
b3kgdGhlIAotICAgICAgICAvLyBEZWZlckdDIG9iamVjdCBiZWZvcmUgdW5sb2NraW5nIHRoZSBs
b2NrIHdoaWNoIGNvdWxkIGNhdXNlIGEgR0MKLSAgICAgICAgLy8gYW5kIHJlc3VsdGluZyBkZWFk
bG9jay4KLSAgICAgICAgdW5sb2NrRWFybHkoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRGVm
ZXJHQyBtX2RlZmVyR0M7Ci19OwotCi1jbGFzcyBDb25jdXJyZW50SklUTG9ja2VyIDogcHVibGlj
IENvbmN1cnJlbnRKSVRMb2NrZXJCYXNlIHsKLXB1YmxpYzoKLSAgICBDb25jdXJyZW50SklUTG9j
a2VyKENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrYWJsZSkKLSAgICAgICAgOiBDb25jdXJyZW50SklU
TG9ja2VyQmFzZShsb2NrYWJsZSkKLSNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpICYmICFkZWZp
bmVkKE5ERUJVRykKLSAgICAgICAgLCBtX2Rpc2FsbG93R0MoSW5QbGFjZSkKLSNlbmRpZgotICAg
IHsKLSAgICB9Ci0KLSAgICBDb25jdXJyZW50SklUTG9ja2VyKENvbmN1cnJlbnRKSVRMb2NrKiBs
b2NrYWJsZSkKLSAgICAgICAgOiBDb25jdXJyZW50SklUTG9ja2VyQmFzZShsb2NrYWJsZSkKLSNp
ZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpICYmICFkZWZpbmVkKE5ERUJVRykKLSAgICAgICAgLCBt
X2Rpc2FsbG93R0MoSW5QbGFjZSkKLSNlbmRpZgotICAgIHsKLSAgICB9Ci0KLSAgICBDb25jdXJy
ZW50SklUTG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKLSAgICAgICAgOiBDb25jdXJyZW50
SklUTG9ja2VyQmFzZShOb0xvY2tpbmdOZWNlc3NhcnkpCi0jaWYgRU5BQkxFKENPTkNVUlJFTlRf
SklUKSAmJiAhZGVmaW5lZChOREVCVUcpCi0gICAgICAgICwgbV9kaXNhbGxvd0dDKE51bGxvcHQp
Ci0jZW5kaWYKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIoaW50
KSA9IGRlbGV0ZTsKLQotI2lmIEVOQUJMRShDT05DVVJSRU5UX0pJVCkgJiYgIWRlZmluZWQoTkRF
QlVHKQotcHJpdmF0ZToKLSAgICBPcHRpb25hbDxEaXNhbGxvd0dDPiBtX2Rpc2FsbG93R0M7Ci0j
ZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29uY3VycmVudEpTTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xvY2suaAkocmV2aXNpb24gMjA4NzU0KQko
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oOjIw
ODc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkRlZmVyR0MuaCIKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob0xvY2su
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBF
TkFCTEUoQ09OQ1VSUkVOVF9KSVQpCit0eXBlZGVmIExvY2sgQ29uY3VycmVudEpJVExvY2s7Cit0
eXBlZGVmIExvY2tIb2xkZXIgQ29uY3VycmVudEpJVExvY2tlckltcGw7CisjZWxzZQordHlwZWRl
ZiBOb0xvY2sgQ29uY3VycmVudEpJVExvY2s7Cit0eXBlZGVmIE5vTG9ja0xvY2tlciBDb25jdXJy
ZW50SklUTG9ja2VySW1wbDsKKyNlbmRpZgorCitjbGFzcyBDb25jdXJyZW50SklUTG9ja2VyQmFz
ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uY3VycmVudEpJVExvY2tlckJhc2UpOwor
cHVibGljOgorICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKSVRMb2NrZXJCYXNlKENvbmN1cnJlbnRK
SVRMb2NrJiBsb2NrYWJsZSkKKyAgICAgICAgOiBtX2xvY2tlcigmbG9ja2FibGUpCisgICAgewor
ICAgIH0KKyAgICBleHBsaWNpdCBDb25jdXJyZW50SklUTG9ja2VyQmFzZShDb25jdXJyZW50SklU
TG9jayogbG9ja2FibGUpCisgICAgICAgIDogbV9sb2NrZXIobG9ja2FibGUpCisgICAgeworICAg
IH0KKworICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKSVRMb2NrZXJCYXNlKE5vTG9ja2luZ05lY2Vz
c2FyeVRhZykKKyAgICAgICAgOiBtX2xvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnkpCisgICAgewor
ICAgIH0KKworICAgIH5Db25jdXJyZW50SklUTG9ja2VyQmFzZSgpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHVubG9ja0Vhcmx5KCkKKyAgICB7CisgICAgICAgIG1fbG9ja2VyLnVubG9j
a0Vhcmx5KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENvbmN1cnJlbnRKSVRMb2NrZXJJbXBs
IG1fbG9ja2VyOworfTsKKworY2xhc3MgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciA6IHB1Ymxp
YyBDb25jdXJyZW50SklUTG9ja2VyQmFzZSB7CitwdWJsaWM6CisgICAgR0NTYWZlQ29uY3VycmVu
dEpJVExvY2tlcihDb25jdXJyZW50SklUTG9jayYgbG9ja2FibGUsIEhlYXAmIGhlYXApCisgICAg
ICAgIDogQ29uY3VycmVudEpJVExvY2tlckJhc2UobG9ja2FibGUpCisgICAgICAgICwgbV9kZWZl
ckdDKGhlYXApCisgICAgeworICAgIH0KKworICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIo
Q29uY3VycmVudEpJVExvY2sqIGxvY2thYmxlLCBIZWFwJiBoZWFwKQorICAgICAgICA6IENvbmN1
cnJlbnRKSVRMb2NrZXJCYXNlKGxvY2thYmxlKQorICAgICAgICAsIG1fZGVmZXJHQyhoZWFwKQor
ICAgIHsKKyAgICB9CisKKyAgICB+R0NTYWZlQ29uY3VycmVudEpJVExvY2tlcigpCisgICAgewor
ICAgICAgICAvLyBXZSBoYXZlIHRvIHVubG9jayBlYXJseSBkdWUgdG8gdGhlIGRlc3RydWN0aW9u
IG9yZGVyIG9mIGJhc2UKKyAgICAgICAgLy8gdnMuIGRlcml2ZWQgY2xhc3Nlcy4gSWYgd2UgZGlk
bid0LCB0aGVuIHdlIHdvdWxkIGRlc3Ryb3kgdGhlIAorICAgICAgICAvLyBEZWZlckdDIG9iamVj
dCBiZWZvcmUgdW5sb2NraW5nIHRoZSBsb2NrIHdoaWNoIGNvdWxkIGNhdXNlIGEgR0MKKyAgICAg
ICAgLy8gYW5kIHJlc3VsdGluZyBkZWFkbG9jay4KKyAgICAgICAgdW5sb2NrRWFybHkoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgRGVmZXJHQyBtX2RlZmVyR0M7Cit9OworCitjbGFzcyBDb25j
dXJyZW50SklUTG9ja2VyIDogcHVibGljIENvbmN1cnJlbnRKSVRMb2NrZXJCYXNlIHsKK3B1Ymxp
YzoKKyAgICBDb25jdXJyZW50SklUTG9ja2VyKENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrYWJsZSkK
KyAgICAgICAgOiBDb25jdXJyZW50SklUTG9ja2VyQmFzZShsb2NrYWJsZSkKKyNpZiBFTkFCTEUo
Q09OQ1VSUkVOVF9KSVQpICYmICFkZWZpbmVkKE5ERUJVRykKKyAgICAgICAgLCBtX2Rpc2FsbG93
R0MoSW5QbGFjZSkKKyNlbmRpZgorICAgIHsKKyAgICB9CisKKyAgICBDb25jdXJyZW50SklUTG9j
a2VyKENvbmN1cnJlbnRKSVRMb2NrKiBsb2NrYWJsZSkKKyAgICAgICAgOiBDb25jdXJyZW50SklU
TG9ja2VyQmFzZShsb2NrYWJsZSkKKyNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpICYmICFkZWZp
bmVkKE5ERUJVRykKKyAgICAgICAgLCBtX2Rpc2FsbG93R0MoSW5QbGFjZSkKKyNlbmRpZgorICAg
IHsKKyAgICB9CisKKyAgICBDb25jdXJyZW50SklUTG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeVRh
ZykKKyAgICAgICAgOiBDb25jdXJyZW50SklUTG9ja2VyQmFzZShOb0xvY2tpbmdOZWNlc3Nhcnkp
CisjaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKSAmJiAhZGVmaW5lZChOREVCVUcpCisgICAgICAg
ICwgbV9kaXNhbGxvd0dDKE51bGxvcHQpCisjZW5kaWYKKyAgICB7CisgICAgfQorICAgIAorICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIoaW50KSA9IGRlbGV0ZTsKKworI2lmIEVOQUJMRShDT05DVVJS
RU5UX0pJVCkgJiYgIWRlZmluZWQoTkRFQlVHKQorcHJpdmF0ZToKKyAgICBPcHRpb25hbDxEaXNh
bGxvd0dDPiBtX2Rpc2FsbG93R0M7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpTTG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xv
Y2suaAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29uY3VycmVudEpTTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwzMiArMzIsMzIgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpCi10eXBlZGVmIExv
Y2sgQ29uY3VycmVudEpJVExvY2s7Ci10eXBlZGVmIExvY2tIb2xkZXIgQ29uY3VycmVudEpJVExv
Y2tlckltcGw7CisjaWYgRU5BQkxFKENPTkNVUlJFTlRfSlMpCit0eXBlZGVmIExvY2sgQ29uY3Vy
cmVudEpTTG9jazsKK3R5cGVkZWYgTG9ja0hvbGRlciBDb25jdXJyZW50SlNMb2NrZXJJbXBsOwog
I2Vsc2UKLXR5cGVkZWYgTm9Mb2NrIENvbmN1cnJlbnRKSVRMb2NrOwotdHlwZWRlZiBOb0xvY2tM
b2NrZXIgQ29uY3VycmVudEpJVExvY2tlckltcGw7Cit0eXBlZGVmIE5vTG9jayBDb25jdXJyZW50
SlNMb2NrOwordHlwZWRlZiBOb0xvY2tMb2NrZXIgQ29uY3VycmVudEpTTG9ja2VySW1wbDsKICNl
bmRpZgogCi1jbGFzcyBDb25jdXJyZW50SklUTG9ja2VyQmFzZSB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ29uY3VycmVudEpJVExvY2tlckJhc2UpOworY2xhc3MgQ29uY3VycmVudEpTTG9j
a2VyQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uY3VycmVudEpTTG9ja2VyQmFz
ZSk7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29uY3VycmVudEpJVExvY2tlckJhc2UoQ29uY3Vy
cmVudEpJVExvY2smIGxvY2thYmxlKQorICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKU0xvY2tlckJh
c2UoQ29uY3VycmVudEpTTG9jayYgbG9ja2FibGUpCiAgICAgICAgIDogbV9sb2NrZXIoJmxvY2th
YmxlKQogICAgIHsKICAgICB9Ci0gICAgZXhwbGljaXQgQ29uY3VycmVudEpJVExvY2tlckJhc2Uo
Q29uY3VycmVudEpJVExvY2sqIGxvY2thYmxlKQorICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKU0xv
Y2tlckJhc2UoQ29uY3VycmVudEpTTG9jayogbG9ja2FibGUpCiAgICAgICAgIDogbV9sb2NrZXIo
bG9ja2FibGUpCiAgICAgewogICAgIH0KIAotICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKSVRMb2Nr
ZXJCYXNlKE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKKyAgICBleHBsaWNpdCBDb25jdXJyZW50SlNM
b2NrZXJCYXNlKE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKICAgICAgICAgOiBtX2xvY2tlcihOb0xv
Y2tpbmdOZWNlc3NhcnkpCiAgICAgewogICAgIH0KIAotICAgIH5Db25jdXJyZW50SklUTG9ja2Vy
QmFzZSgpCisgICAgfkNvbmN1cnJlbnRKU0xvY2tlckJhc2UoKQogICAgIHsKICAgICB9CiAgICAg
CkBAIC02NywyNCArNjcsMjQgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb25j
dXJyZW50SklUTG9ja2VySW1wbCBtX2xvY2tlcjsKKyAgICBDb25jdXJyZW50SlNMb2NrZXJJbXBs
IG1fbG9ja2VyOwogfTsKIAotY2xhc3MgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciA6IHB1Ymxp
YyBDb25jdXJyZW50SklUTG9ja2VyQmFzZSB7CitjbGFzcyBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXIgOiBwdWJsaWMgQ29uY3VycmVudEpTTG9ja2VyQmFzZSB7CiBwdWJsaWM6Ci0gICAgR0NTYWZl
Q29uY3VycmVudEpJVExvY2tlcihDb25jdXJyZW50SklUTG9jayYgbG9ja2FibGUsIEhlYXAmIGhl
YXApCi0gICAgICAgIDogQ29uY3VycmVudEpJVExvY2tlckJhc2UobG9ja2FibGUpCisgICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyKENvbmN1cnJlbnRKU0xvY2smIGxvY2thYmxlLCBIZWFwJiBo
ZWFwKQorICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2UobG9ja2FibGUpCiAgICAgICAg
ICwgbV9kZWZlckdDKGhlYXApCiAgICAgewogICAgIH0KIAotICAgIEdDU2FmZUNvbmN1cnJlbnRK
SVRMb2NrZXIoQ29uY3VycmVudEpJVExvY2sqIGxvY2thYmxlLCBIZWFwJiBoZWFwKQotICAgICAg
ICA6IENvbmN1cnJlbnRKSVRMb2NrZXJCYXNlKGxvY2thYmxlKQorICAgIEdDU2FmZUNvbmN1cnJl
bnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2NrKiBsb2NrYWJsZSwgSGVhcCYgaGVhcCkKKyAgICAg
ICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQogICAgICAgICAsIG1fZGVmZXJH
QyhoZWFwKQogICAgIHsKICAgICB9CiAKLSAgICB+R0NTYWZlQ29uY3VycmVudEpJVExvY2tlcigp
CisgICAgfkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcigpCiAgICAgewogICAgICAgICAvLyBXZSBo
YXZlIHRvIHVubG9jayBlYXJseSBkdWUgdG8gdGhlIGRlc3RydWN0aW9uIG9yZGVyIG9mIGJhc2UK
ICAgICAgICAgLy8gdnMuIGRlcml2ZWQgY2xhc3Nlcy4gSWYgd2UgZGlkbid0LCB0aGVuIHdlIHdv
dWxkIGRlc3Ryb3kgdGhlIApAQCAtOTcsMzUgKzk3LDM1IEBAIHByaXZhdGU6CiAgICAgRGVmZXJH
QyBtX2RlZmVyR0M7CiB9OwogCi1jbGFzcyBDb25jdXJyZW50SklUTG9ja2VyIDogcHVibGljIENv
bmN1cnJlbnRKSVRMb2NrZXJCYXNlIHsKK2NsYXNzIENvbmN1cnJlbnRKU0xvY2tlciA6IHB1Ymxp
YyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIHsKIHB1YmxpYzoKLSAgICBDb25jdXJyZW50SklUTG9j
a2VyKENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrYWJsZSkKLSAgICAgICAgOiBDb25jdXJyZW50SklU
TG9ja2VyQmFzZShsb2NrYWJsZSkKLSNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpICYmICFkZWZp
bmVkKE5ERUJVRykKKyAgICBDb25jdXJyZW50SlNMb2NrZXIoQ29uY3VycmVudEpTTG9jayYgbG9j
a2FibGUpCisgICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZShsb2NrYWJsZSkKKyNpZiBF
TkFCTEUoQ09OQ1VSUkVOVF9KUykgJiYgIWRlZmluZWQoTkRFQlVHKQogICAgICAgICAsIG1fZGlz
YWxsb3dHQyhJblBsYWNlKQogI2VuZGlmCiAgICAgewogICAgIH0KIAotICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIoQ29uY3VycmVudEpJVExvY2sqIGxvY2thYmxlKQotICAgICAgICA6IENvbmN1cnJl
bnRKSVRMb2NrZXJCYXNlKGxvY2thYmxlKQotI2lmIEVOQUJMRShDT05DVVJSRU5UX0pJVCkgJiYg
IWRlZmluZWQoTkRFQlVHKQorICAgIENvbmN1cnJlbnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2Nr
KiBsb2NrYWJsZSkKKyAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQor
I2lmIEVOQUJMRShDT05DVVJSRU5UX0pTKSAmJiAhZGVmaW5lZChOREVCVUcpCiAgICAgICAgICwg
bV9kaXNhbGxvd0dDKEluUGxhY2UpCiAjZW5kaWYKICAgICB7CiAgICAgfQogCi0gICAgQ29uY3Vy
cmVudEpJVExvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnlUYWcpCi0gICAgICAgIDogQ29uY3VycmVu
dEpJVExvY2tlckJhc2UoTm9Mb2NraW5nTmVjZXNzYXJ5KQotI2lmIEVOQUJMRShDT05DVVJSRU5U
X0pJVCkgJiYgIWRlZmluZWQoTkRFQlVHKQorICAgIENvbmN1cnJlbnRKU0xvY2tlcihOb0xvY2tp
bmdOZWNlc3NhcnlUYWcpCisgICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZShOb0xvY2tp
bmdOZWNlc3NhcnkpCisjaWYgRU5BQkxFKENPTkNVUlJFTlRfSlMpICYmICFkZWZpbmVkKE5ERUJV
RykKICAgICAgICAgLCBtX2Rpc2FsbG93R0MoTnVsbG9wdCkKICNlbmRpZgogICAgIHsKICAgICB9
CiAgICAgCi0gICAgQ29uY3VycmVudEpJVExvY2tlcihpbnQpID0gZGVsZXRlOworICAgIENvbmN1
cnJlbnRKU0xvY2tlcihpbnQpID0gZGVsZXRlOwogCi0jaWYgRU5BQkxFKENPTkNVUlJFTlRfSklU
KSAmJiAhZGVmaW5lZChOREVCVUcpCisjaWYgRU5BQkxFKENPTkNVUlJFTlRfSlMpICYmICFkZWZp
bmVkKE5ERUJVRykKIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8RGlzYWxsb3dHQz4gbV9kaXNhbGxv
d0dDOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZmVycmVkVHlwZS5jcHAJKHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw3ICszNjYs
NyBAQCBJbmZlcnJlZFR5cGU6On5JbmZlcnJlZFR5cGUoKQogewogfQogCi1ib29sIEluZmVycmVk
VHlwZTo6Y2FuV2F0Y2goY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBE
ZXNjcmlwdG9yJiBleHBlY3RlZCkKK2Jvb2wgSW5mZXJyZWRUeXBlOjpjYW5XYXRjaChjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgY29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCiB7
CiAgICAgaWYgKGV4cGVjdGVkLmtpbmQoKSA9PSBUb3ApCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTM3NiwxMSArMzc2LDExIEBAIGJvb2wgSW5mZXJyZWRUeXBlOjpjYW5XYXRjaChjb25zdCBD
b25jdXIKIAogYm9vbCBJbmZlcnJlZFR5cGU6OmNhbldhdGNoKGNvbnN0IERlc2NyaXB0b3ImIGV4
cGVjdGVkKQogewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIHJldHVybiBjYW5XYXRjaChs
b2NrZXIsIGV4cGVjdGVkKTsKIH0KIAotdm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQo
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBXYXRjaHBvaW50KiB3YXRjaHBvaW50
KQordm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoZGVzY3JpcHRvcihsb2NrZXIpLmtpbmQoKSAhPSBUb3ApOwogCkBAIC0zODksNyArMzg5LDcg
QEAgdm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQoY29uc3QgQwogCiB2b2lkIEluZmVy
cmVkVHlwZTo6YWRkV2F0Y2hwb2ludChXYXRjaHBvaW50KiB3YXRjaHBvaW50KQogewotICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2xvY2spOwogICAgIGFkZFdhdGNocG9pbnQobG9ja2VyLCB3YXRjaHBvaW50KTsK
IH0KIApAQCAtNDA0LDcgKzQwNCw3IEBAIGJvb2wgSW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1
ZVNsb3coVk0KICAgICBEZXNjcmlwdG9yIG15VHlwZTsKICAgICBib29sIHJlc3VsdDsKICAgICB7
Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgb2xkVHlwZSA9IGRlc2Ny
aXB0b3IobG9ja2VyKTsKICAgICAgICAgbXlUeXBlID0gRGVzY3JpcHRvcjo6Zm9yVmFsdWUodmFs
dWUpOwogCkBAIC00MjcsNyArNDI3LDcgQEAgdm9pZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3BTbG93
KFZNJiB2bSwgUAogewogICAgIERlc2NyaXB0b3Igb2xkVHlwZTsKICAgICB7Ci0gICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgb2xkVHlwZSA9IGRlc2NyaXB0b3IobG9ja2Vy
KTsKICAgICAgICAgaWYgKCFzZXQobG9ja2VyLCB2bSwgVG9wKSkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTQzNywxMSArNDM3LDExIEBAIHZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xvdyhW
TSYgdm0sIFAKICAgICBtX3dhdGNocG9pbnRTZXQuZmlyZUFsbCh2bSwgZGV0YWlsKTsKIH0KIAot
Ym9vbCBJbmZlcnJlZFR5cGU6OnNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIs
IFZNJiB2bSwgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yKQorYm9vbCBJbmZlcnJlZFR5cGU6OnNl
dChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBEZXNjcmlwdG9yIG5l
d0Rlc2NyaXB0b3IpCiB7CiAgICAgLy8gV2Ugd2lsbCB0cmlnZ2VyIHdyaXRlIGJhcnJpZXJzIHdo
aWxlIGhvbGRpbmcgb3VyIGxvY2suIEN1cnJlbnRseSwgd3JpdGUgYmFycmllcnMgZG9uJ3QgR0Ms
IGJ1dCB0aGF0CiAgICAgLy8gY291bGQgY2hhbmdlLiBJZiBpdCBkb2VzLCB3ZSBkb24ndCB3YW50
IHRvIGRlYWRsb2NrLiBOb3RlIHRoYXQgd2UgY291bGQgaGF2ZSB1c2VkCi0gICAgLy8gR0NTYWZl
Q29uY3VycmVudEpJVExvY2tlciBpbiB0aGUgY2FsbGVyLCBidXQgdGhlIGNhbGxlciBpcyBvbiBh
IGZhc3QgcGF0aCBzbyBtYXliZSB0aGF0IHdvdWxkbid0IGJlCisgICAgLy8gR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyIGluIHRoZSBjYWxsZXIsIGJ1dCB0aGUgY2FsbGVyIGlzIG9uIGEgZmFzdCBw
YXRoIHNvIG1heWJlIHRoYXQgd291bGRuJ3QgYmUKICAgICAvLyBhIGdvb2QgaWRlYS4KICAgICBE
ZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCkBAIC01MDYsNyArNTA2LDcg
QEAgdm9pZCBJbmZlcnJlZFR5cGU6OnJlbW92ZVN0cnVjdHVyZSgpCiAgICAgRGVzY3JpcHRvciBv
bGREZXNjcmlwdG9yOwogICAgIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcjsKICAgICB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgb2xkRGVzY3JpcHRvciA9IGRlc2Ny
aXB0b3IobG9ja2VyKTsKICAgICAgICAgbmV3RGVzY3JpcHRvciA9IG9sZERlc2NyaXB0b3I7CiAg
ICAgICAgIG5ld0Rlc2NyaXB0b3IucmVtb3ZlU3RydWN0dXJlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMjA4NzU0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb25j
dXJyZW50SklUTG9jay5oIgorI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKICNpbmNsdWRl
ICJKU0NlbGwuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJQdXRCeUlk
RmxhZ3MuaCIKQEAgLTE3MywyNCArMTczLDI0IEBAIHB1YmxpYzoKICAgICAgICAgU3RydWN0dXJl
KiBtX3N0cnVjdHVyZTsKICAgICB9OwogCi0gICAgQ29uY3VycmVudEpJVExvY2smIGxvY2soKSBj
b25zdCB7IHJldHVybiBtX2xvY2s7IH0KKyAgICBDb25jdXJyZW50SlNMb2NrJiBsb2NrKCkgY29u
c3QgeyByZXR1cm4gbV9sb2NrOyB9CiAKICAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3JNYWluVGhy
ZWFkKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBEZXNjcmlwdG9yKG1fa2luZCwgbV9z
dHJ1Y3R1cmUgPyBtX3N0cnVjdHVyZS0+c3RydWN0dXJlKCkgOiBudWxscHRyKTsKICAgICB9CiAg
ICAgCi0gICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
KSBjb25zdAorICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcihjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3JNYWluVGhyZWFkKCk7
CiAgICAgfQogICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcigpIGNvbnN0CiAgICAgewotICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yKGxvY2tl
cik7CiAgICAgfQogICAgIAotICAgIEtpbmQga2luZChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiBsb2NrZXIpIGNvbnN0IHsgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKS5raW5kKCk7IH0KKyAg
ICBLaW5kIGtpbmQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpIGNvbnN0IHsgcmV0
dXJuIGRlc2NyaXB0b3IobG9ja2VyKS5raW5kKCk7IH0KIAogICAgIGJvb2wgaXNUb3AoKSBjb25z
dCB7IHJldHVybiBtX2tpbmQgPT0gVG9wOyB9CiAgICAgYm9vbCBpc1JlbGV2YW50KCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kICE9IFRvcDsgfQpAQCAtMjE0LDEwICsyMTQsMTAgQEAgcHVibGljOgog
CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGN1cnJlbnRseSBtYWtlcyBzZW5zZSB0byB3YXRj
aCB0aGlzIEluZmVycmVkVHlwZSBmb3IgdGhpcyBkZXNjcmlwdG9yLiBOb3RlIHRoYXQKICAgICAv
LyB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgVG9wLgotICAgIGJvb2wgY2FuV2F0
Y2goY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICBi
b29sIGNhbldhdGNoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IERlc2NyaXB0b3Im
KTsKICAgICBib29sIGNhbldhdGNoKGNvbnN0IERlc2NyaXB0b3ImKTsKICAgICAKLSAgICB2b2lk
IGFkZFdhdGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFdhdGNocG9pbnQqKTsK
KyAgICB2b2lkIGFkZFdhdGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgV2F0Y2hw
b2ludCopOwogICAgIHZvaWQgYWRkV2F0Y2hwb2ludChXYXRjaHBvaW50Kik7CiAKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKQEAgLTIzMSwxMSArMjMxLDExIEBAIHByaXZhdGU6
CiAKICAgICAvLyBIZWxwZXIgZm9yIHdpbGxTdG9yZVZhbHVlU2xvdygpIGFuZCBtYWtlVG9wU2xv
dygpLiBUaGlzIHJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgZmlyZSB0aGUKICAgICAvLyB3YXRj
aHBvaW50IHNldC4KLSAgICBib29sIHNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgVk0m
LCBEZXNjcmlwdG9yKTsKKyAgICBib29sIHNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBW
TSYsIERlc2NyaXB0b3IpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CiAKLSAg
ICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKKyAgICBtdXRhYmxlIENvbmN1cnJl
bnRKU0xvY2sgbV9sb2NrOwogICAgIAogICAgIEtpbmQgbV9raW5kIHsgQm90dG9tIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVU
YWJsZS5jcHAJKHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBA
QCB2b2lkIEluZmVycmVkVHlwZVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTCiB7CiAgICAgSW5mZXJy
ZWRUeXBlVGFibGUqIGluZmVycmVkVHlwZVRhYmxlID0ganNDYXN0PEluZmVycmVkVHlwZVRhYmxl
Kj4oY2VsbCk7CiAKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihpbmZlcnJlZFR5cGVU
YWJsZS0+bV9sb2NrKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGluZmVycmVkVHlw
ZVRhYmxlLT5tX2xvY2spOwogICAgIAogICAgIGZvciAoYXV0byYgZW50cnkgOiBpbmZlcnJlZFR5
cGVUYWJsZS0+bV90YWJsZSkgewogICAgICAgICBpZiAoIWVudHJ5LnZhbHVlKQpAQCAtNjYsNyAr
NjYsNyBAQCB2b2lkIEluZmVycmVkVHlwZVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgfQog
fQogCi1JbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCitJbmZlcnJlZFR5cGUqIEluZmVy
cmVkVHlwZVRhYmxlOjpnZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKIHsKICAgICBhdXRvIGl0ZXIgPSBtX3RhYmxlLmZpbmQodWlkKTsKICAgICBp
ZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKQEAgLTgzLDcgKzgzLDcg
QEAgSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KGNvbgogCiBJbmZlcnJlZFR5
cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKLSAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKICAgICByZXR1cm4gZ2V0KGxvY2tlciwgdWlkKTsKIH0KIApA
QCAtMTExLDcgKzExMSw3IEBAIGJvb2wgSW5mZXJyZWRUeXBlVGFibGU6OndpbGxTdG9yZVZhbHVl
KAogCiAgICAgVGFibGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0OwogICAgIHsKLSAgICAgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICByZXN1bHQgPSBtX3RhYmxlLmFkZChwcm9wZXJ0
eU5hbWUudWlkKCksIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+KCkpOwogICAgIH0KICAgICBp
ZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEluZmVycmVk
VHlwZVRhYmxlOjptYWtlVG9wKFZNJiB2bSwgCiAKICAgICBUYWJsZVR5cGU6OkFkZFJlc3VsdCBy
ZXN1bHQ7CiAgICAgewotICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIHJl
c3VsdCA9IG1fdGFibGUuYWRkKHByb3BlcnR5TmFtZS51aWQoKSwgV3JpdGVCYXJyaWVyPEluZmVy
cmVkVHlwZT4oKSk7CiAgICAgfQogICAgIGlmICghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFi
bGUuaAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5mZXJyZWRUeXBlVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTMgKzU1LDEzIEBAIHB1
YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2Nr
KCkgeyByZXR1cm4gbV9sb2NrOyB9CisgICAgQ29uY3VycmVudEpTTG9jayYgbG9jaygpIHsgcmV0
dXJuIG1fbG9jazsgfQogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV90YWJs
ZS5pc0VtcHR5KCk7IH0KIAogICAgIC8vIEdldCB0aGUgY3VycmVudCBpbmZlcnJlZCB0eXBlLiBS
ZXR1cm5zIG51bGxwdHIgZm9yIGJvdGggVG9wIGFuZCBCb3R0b20uIE51bGwgbWVhbnMgQm90dG9t
IGlmIHRoZQogICAgIC8vIG93bmluZyBTdHJ1Y3R1cmUgZG9lc24ndCBrbm93IGFib3V0IHRoZSBw
cm9wZXJ0eS4KLSAgICBJbmZlcnJlZFR5cGUqIGdldChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICBJbmZlcnJlZFR5cGUqIGdldChjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIEluZmVycmVkVHlwZSog
Z2V0KFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgSW5mZXJyZWRUeXBlKiBnZXQoUHJvcGVydHlO
YW1lKTsKIApAQCAtMTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBXZSBvbmx5IGdy
YWIgdGhpcyBsb2NrIHdoZW4gd2UncmUgZG9pbmcgbW9kaWZpY2F0aW9ucyBvbiB0aGUgbWFpbiB0
aHJlYWQsIG9yIHJlYWRzIG9uIHRoZSBjb21waWxlcgogICAgIC8vIHRocmVhZC4gVGhlIGNvbXBp
bGVyIHRocmVhZCBpcyBub3QgYWxsb3dlZCB0byBkbyBtb2RpZmljYXRpb25zLgotICAgIENvbmN1
cnJlbnRKSVRMb2NrIG1fbG9jazsKKyAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNFbnZpcm9ubWVudFJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHAJKHJldmlzaW9uIDIwODc1NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgSlNFbnZpcm9ubWVudFJlY29yZDo6
aGVhcFNuYXBzaG90KEoKICAgICBKU0Vudmlyb25tZW50UmVjb3JkKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTRW52aXJvbm1lbnRSZWNvcmQqPihjZWxsKTsKICAgICBCYXNlOjpoZWFwU25hcHNob3Qo
Y2VsbCwgYnVpbGRlcik7CiAKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcih0aGlzT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIodGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+bV9sb2NrKTsKICAgICBTeW1ib2xUYWJsZTo6
TWFwOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5lbmQobG9ja2Vy
KTsKICAgICBmb3IgKFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+
c3ltYm9sVGFibGUoKS0+YmVnaW4obG9ja2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
IFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdC0+dmFsdWU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lv
biAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2MCw3ICs5NjAsNyBAQCBib29sIEpTR2xvYmFsT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKCiAKIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmFkZEdsb2Jh
bFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKLSAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihzeW1ib2xUYWJsZSgpLT5tX2xvY2spOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoc3ltYm9sVGFibGUoKS0+bV9sb2NrKTsKICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gc3ltYm9sVGFibGUoKS0+Z2V0KGxvY2tlciwgaWRlbnQuaW1wbCgpKTsKICAgICBpZiAoIWVu
dHJ5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjgzLDcgKzEyODMsNyBAQCB2b2lk
IEpTR2xvYmFsT2JqZWN0OjphZGRTdGF0aWNHbG9iYWxzKEdsCiAgICAgICAgIFdhdGNocG9pbnRT
ZXQqIHdhdGNocG9pbnRTZXQgPSBudWxscHRyOwogICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiB2YXJpYWJsZSA9IG51bGxwdHI7CiAgICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlKCktPm1fbG9jayk7CisgICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlKCktPm1fbG9jayk7CiAgICAg
ICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBzeW1ib2xUYWJsZSgpLT50YWtlTmV4dFNjb3Bl
T2Zmc2V0KGxvY2tlcik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgPSBzdGFy
dE9mZnNldCArIGkpOwogICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShWYXJP
ZmZzZXQob2Zmc2V0KSwgZ2xvYmFsLmF0dHJpYnV0ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkocmV2
aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2Fs
RW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGUKICAgICBKU0xleGljYWxFbnZpcm9ubWVu
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KG9iamVjdCk7CiAK
ICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPnN5
bWJvbFRhYmxlKCktPm1fbG9jayk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
dGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+bV9sb2NrKTsKICAgICAgICAgU3ltYm9sVGFibGU6
Ok1hcDo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKGxvY2tl
cik7CiAgICAgICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0aGlzT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYgIW1v
ZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTU0
LDcgKzE1NTQsNyBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlCiAK
ICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJl
LT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CisgICAgICAg
ICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24o
dm0sIHByb3BlcnR5TmFtZSwgW10gKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5
T2Zmc2V0KSB7IH0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRT
dHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0KSk7CiAKQEAgLTMxODksNyArMzE4OSw3IEBAIHZv
aWQgSlNPYmplY3Q6OmNvbnZlcnRUb0RpY3Rpb25hcnkoVk0mIHYKICAgICAgICAgdm0sIFN0cnVj
dHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
JmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpKTsKIH0KIAotdm9pZCBKU09iamVjdDo6c2hpZnRCdXR0
ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVy
KQordm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3QgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6
ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpCiB7CiAgICAgLy8gVGhpcyBjb3VsZCBpbnRlcmxl
YXZlIHZpc2l0Q2hpbGRyZW4gYmVjYXVzZSBzb21lIG9sZCBzdHJ1Y3R1cmUgY291bGQgaGF2ZSBi
ZWVuIGEgbm9uCiAgICAgLy8gZGljdGlvbmFyeSBzdHJ1Y3R1cmUuIFdlIGhhdmUgdG8gYmUgY3Jh
enkgY2FyZWZ1bC4gQnV0LCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBiZSBob2xkaW5nCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIwODc1NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc1OCw3ICs3NTgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzdHJ1Y3R1cmUo
dm0pLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgdGhpcyk7CiAgICAgfQotICAgIHZv
aWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJ
VExvY2tlciYsIFZNJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRPZkxpbmVDYXBh
Y2l0eUFmdGVyKTsKKyAgICB2b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNp
emVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTY3LDcgKzE2Nyw3IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0
VHIKICAgICB1bnNpZ25lZCBvbGRPdXRPZkxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKICAgICBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRp
b24oCiAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCi0gICAgICAgIFsmXSAo
Y29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkg
eworICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkgewogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0eSkgewogICAgICAgICAgICAgICAgIGJ1dHRl
cmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZE91dE9mTGluZUNhcGFj
aXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CkBAIC0yNjYsNyArMjY2LDcgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgICAgICB1bnNpZ25lZCBvbGRPdXRPZkxpbmVD
YXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAgICAgb2Zmc2V0
ID0gc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAogICAgICAgICAgICAg
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywKLSAgICAgICAgICAgIFsmXSAoY29uc3QgR0NT
YWZlQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgeworICAgICAg
ICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpIHsKICAgICAgICAgICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMt
PmJ1dHRlcmZseSgpOwogICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgIT0gb2xkT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKICAgICAgICAgICAgICAgICAgICAg
YnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5l
Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMjA4NzU0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNT
dAogCiAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGxleGljYWxFbnZpcm9ubWVu
dC0+c3ltYm9sVGFibGUoKTsKICAgICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgYXV0byBp
dGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCBpZGVudC5pbXBsKCkpOwogICAgICAgICAg
ICAgaWYgKGl0ZXIgIT0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpKSB7CiAgICAgICAgICAgICAg
ICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKQEAgLTgzLDcgKzgzLDcg
QEAgc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNTdAogICAgICAgICAgICAg
ICAgIEpTTW9kdWxlUmVjb3JkKiBpbXBvcnRlZFJlY29yZCA9IHJlc29sdXRpb24ubW9kdWxlUmVj
b3JkOwogICAgICAgICAgICAgICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIGltcG9ydGVkRW52aXJv
bm1lbnQgPSBpbXBvcnRlZFJlY29yZC0+bW9kdWxlRW52aXJvbm1lbnQoKTsKICAgICAgICAgICAg
ICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBpbXBvcnRlZEVudmlyb25tZW50LT5zeW1i
b2xUYWJsZSgpOwotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5
bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgYXV0byBpdGVyID0g
c3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCByZXNvbHV0aW9uLmxvY2FsTmFtZS5pbXBsKCkpOwog
ICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2VyKSk7
CiAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsK
QEAgLTEwMSw3ICsxMDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoRXhl
Y1N0CiAgICAgaWYgKHNjb3BlLT5pc0dsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSB7CiAgICAg
ICAgIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KiBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQg
PSBqc0Nhc3Q8SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQqPihzY29wZSk7CiAgICAgICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGdsb2JhbExleGljYWxFbnZpcm9ubWVudC0+c3ltYm9s
VGFibGUoKTsKLSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUt
Pm1fbG9jayk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUt
Pm1fbG9jayk7CiAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxlLT5maW5kKGxvY2tlciwg
aWRlbnQuaW1wbCgpKTsKICAgICAgICAgaWYgKGl0ZXIgIT0gc3ltYm9sVGFibGUtPmVuZChsb2Nr
ZXIpKSB7CiAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnZhbHVl
OwpAQCAtMTM0LDcgKzEzNCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhF
eGVjU3QKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0ds
b2JhbE9iamVjdCo+KHNjb3BlKTsKICAgICAgICAgewogICAgICAgICAgICAgU3ltYm9sVGFibGUq
IHN5bWJvbFRhYmxlID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpOwotICAgICAgICAgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAg
ICAgICAgICAgYXV0byBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCBpZGVudC5pbXBs
KCkpOwogICAgICAgICAgICAgaWYgKGl0ZXIgIT0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpKSB7
CiAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsK
QEAgLTI3Nyw3ICsyNzcsNyBAQCB2b2lkIEpTU2NvcGU6OmNvbGxlY3RDbG9zdXJlVmFyaWFibGVz
VW5kCiAKICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PEpTU3ltYm9s
VGFibGVPYmplY3QqPihzY29wZSktPnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIEFTU0VSVChzeW1i
b2xUYWJsZS0+c2NvcGVUeXBlKCkgPT0gU3ltYm9sVGFibGU6OlNjb3BlVHlwZTo6TGV4aWNhbFNj
b3BlIHx8IHN5bWJvbFRhYmxlLT5zY29wZVR5cGUoKSA9PSBTeW1ib2xUYWJsZTo6U2NvcGVUeXBl
OjpDYXRjaFNjb3BlKTsKLSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUtPm1fbG9jayk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUtPm1fbG9jayk7CiAgICAgICAgIGZvciAoYXV0byBlbmQgPSBzeW1ib2xUYWJsZS0+ZW5k
KGxvY2tlciksIGl0ZXIgPSBzeW1ib2xUYWJsZS0+YmVnaW4obG9ja2VyKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikKICAgICAgICAgICAgIHJlc3VsdC5hZGQoaXRlci0+a2V5KTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNjb3BlT2Zmc2V0IEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmRWYXJpYWJsZUluZGV4KHZvaWQqIHZhcmlhYmxl
QWRkcmVzcykKIHsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX3ZhcmlhYmxlcy5zaXplKCk7IGktLTspIHsKICAgICAgICAgaWYgKCZtX3Zhcmlh
Ymxlc1tpXSAhPSB2YXJpYWJsZUFkZHJlc3MpCkBAIC00OSw3ICs0OSw3IEBAIFNjb3BlT2Zmc2V0
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmYKIAogU2NvcGVPZmZzZXQgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdDo6YWRkVmFyaWFibGVzKHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzVG9B
ZGQsIEpTVmFsdWUgaW5pdGlhbFZhbHVlKQogewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAg
IAogICAgIHNpemVfdCBvbGRTaXplID0gbV92YXJpYWJsZXMuc2l6ZSgpOwogICAgIG1fdmFyaWFi
bGVzLmdyb3cob2xkU2l6ZSArIG51bWJlck9mVmFyaWFibGVzVG9BZGQpOwpAQCAtNzUsNyArNzUs
NyBAQCB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmhlYXBTbmFwCiAgICAgSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0Kj4oY2VsbCk7CiAgICAgQmFzZTo6aGVhcFNuYXBzaG90KGNlbGwsIGJ1aWxkZXIp
OwogCi0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIodGhpc09iamVjdC0+c3ltYm9sVGFi
bGUoKS0+bV9sb2NrKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3Qt
PnN5bWJvbFRhYmxlKCktPm1fbG9jayk7CiAgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3Ig
ZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKGxvY2tlcik7CiAgICAgZm9yIChT
eW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkt
PmJlZ2luKGxvY2tlcik7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5OjpGYXN0IGVudHJ5ID0gaXQtPnZhbHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2
aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKKyNpbmNsdWRlICJD
b25jdXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU1N5
bWJvbFRhYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKQEAgLTk3LDcgKzk3
LDcgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICAKICAgICBTZWdtZW50ZWRWZWN0b3I8V3JpdGVC
YXJyaWVyPFVua25vd24+LCAxNj4gbV92YXJpYWJsZXM7Ci0gICAgQ29uY3VycmVudEpJVExvY2sg
bV9sb2NrOworICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRl
eAogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1i
b2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CiAgICAgewotICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcih0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOworICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPm1fbG9j
ayk7CiAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3Qt
PnN5bWJvbFRhYmxlKCktPmVuZChsb2NrZXIpOwogICAgICAgICBmb3IgKFN5bWJvbFRhYmxlOjpN
YXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4obG9ja2Vy
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoIShpdC0+dmFsdWUuZ2V0QXR0
cmlidXRlcygpICYgRG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygp
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcg
KzgxLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGVPYmpl
Y3RUeXBlKiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSAqb2JqZWN0LT5zeW1ib2xU
YWJsZSgpOwotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLm1fbG9j
ayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS5tX2xvY2spOwog
ICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKGxv
Y2tlciwgcHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5l
bmQobG9ja2VyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTAyLDcgKzEwMiw3IEBAIGlu
bGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCiB7CiAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9s
VGFibGUoKTsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS5tX2xv
Y2spOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUubV9sb2NrKTsK
ICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChs
b2NrZXIsIHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUu
ZW5kKGxvY2tlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyNCw3ICsxMjQsNyBAQCBp
bmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICBib29sJiBzbG90SXNXcml0ZWFibGUpCiB7
CiAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUoKTsK
LSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS5tX2xvY2spOworICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUubV9sb2NrKTsKICAgICBTeW1i
b2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChsb2NrZXIsIHBy
b3BlcnR5TmFtZS51aWQoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKGxvY2tl
cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NCw3ICsxNzQsNyBAQCBpbmxpbmUgYm9v
bCBzeW1ib2xUYWJsZVB1dChTeW1ib2xUYWJsZU9iCiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSA9ICpvYmplY3QtPnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGlzIHZlcnkgc3VzcGljaW91cy4gV2Ugc2hvdWxkbid0IG5lZWQgYSBHQy1zYWZlIGxvY2sgaGVy
ZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NDYwMQotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJs
ZS5tX2xvY2ssIHZtLmhlYXApOworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKHN5bWJvbFRhYmxlLm1fbG9jaywgdm0uaGVhcCk7CiAgICAgICAgIFN5bWJvbFRhYmxlOjpN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKGxvY2tlciwgcHJvcGVydHlOYW1l
LnVpZCgpKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKGxvY2tlcikpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw4ICszMTcsOCBA
QCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICNpZiAhRU5BQkxFKFlB
UlJfSklUKQogICAgIE9wdGlvbnM6OnVzZVJlZ0V4cEpJVCgpID0gZmFsc2U7CiAjZW5kaWYKLSNp
ZiAhRU5BQkxFKENPTkNVUlJFTlRfSklUKQotICAgIE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQo
KSA9IGZhbHNlOworI2lmICFFTkFCTEUoQ09OQ1VSUkVOVF9KUykKKyAgICBPcHRpb25zOjp1c2VD
b25jdXJyZW50SlMoKSA9IGZhbHNlOwogI2VuZGlmCiAjaWYgIUVOQUJMRShERkdfSklUKQogICAg
IE9wdGlvbnM6OnVzZURGR0pJVCgpID0gZmFsc2U7CkBAIC0zNzAsNyArMzcwLDcgQEAgc3RhdGlj
IHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAgICAgICAgIE9wdGlvbnM6OnRocmVz
aG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXAoKSA9IDIwOwogICAgICAgICBPcHRpb25zOjp0
aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb24oKSA9IDIwOwogICAgICAgICBPcHRpb25zOjptYXhp
bXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCgpID0gMTUwMDAwOwotICAgICAgICBPcHRpb25z
Ojp1c2VDb25jdXJyZW50SklUKCkgPSBmYWxzZTsKKyAgICAgICAgT3B0aW9uczo6dXNlQ29uY3Vy
cmVudEpTKCkgPSBmYWxzZTsKICAgICB9CiAgICAgaWYgKE9wdGlvbnM6OnVzZU1heGltYWxGbHVz
aEluc2VydGlvblBoYXNlKCkpIHsKICAgICAgICAgT3B0aW9uczo6dXNlT1NSRW50cnlUb0RGRygp
ID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShy
ZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIq
IG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIHVzZU9iamVjdEFsbG9jYXRpb25TaW5raW5nLCB0
cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGxvZ0V4ZWN1dGFibGVBbGxvY2F0
aW9uLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAotICAgIHYoYm9vbCwgdXNlQ29u
Y3VycmVudEpJVCwgdHJ1ZSwgTm9ybWFsLCAiYWxsb3dzIHRoZSBERkcgLyBGVEwgY29tcGlsYXRp
b24gaW4gdGhyZWFkcyBvdGhlciB0aGFuIHRoZSBleGVjdXRpbmcgSlMgdGhyZWFkIikgXAorICAg
IHYoYm9vbCwgdXNlQ29uY3VycmVudEpTLCB0cnVlLCBOb3JtYWwsICJhbGxvd3MgdGhlIERGRyAv
IEZUTCBjb21waWxhdGlvbiBpbiB0aHJlYWRzIG90aGVyIHRoYW4gdGhlIGV4ZWN1dGluZyBKUyB0
aHJlYWQiKSBcCiAgICAgdih1bnNpZ25lZCwgbnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMsIGNv
bXB1dGVOdW1iZXJPZldvcmtlclRocmVhZHMoMiwgMikgLSAxLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KHVuc2lnbmVkLCBudW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcywgY29tcHV0ZU51bWJl
ck9mV29ya2VyVGhyZWFkcyg4LCAyKSAtIDEsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoaW50
MzIsIHByaW9yaXR5RGVsdGFPZkRGR0NvbXBpbGVyVGhyZWFkcywgY29tcHV0ZVByaW9yaXR5RGVs
dGFPZldvcmtlclRocmVhZHMoLTEsIDApLCBOb3JtYWwsIG51bGxwdHIpIFwKQEAgLTQzMSw3ICs0
MzEsNyBAQCBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICB2KGVuYWJsZVBvbHltb3JwaGlj
Q2FsbElubGluaW5nLCB1c2VQb2x5bW9ycGhpY0NhbGxJbmxpbmluZywgU2FtZU9wdGlvbikgXAog
ICAgIHYoZW5hYmxlTW92SGludFJlbW92YWwsIHVzZU1vdkhpbnRSZW1vdmFsLCBTYW1lT3B0aW9u
KSBcCiAgICAgdihlbmFibGVPYmplY3RBbGxvY2F0aW9uU2lua2luZywgdXNlT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmcsIFNhbWVPcHRpb24pIFwKLSAgICB2KGVuYWJsZUNvbmN1cnJlbnRKSVQsIHVz
ZUNvbmN1cnJlbnRKSVQsIFNhbWVPcHRpb24pIFwKKyAgICB2KGVuYWJsZUNvbmN1cnJlbnRKUywg
dXNlQ29uY3VycmVudEpTLCBTYW1lT3B0aW9uKSBcCiAgICAgdihlbmFibGVQcm9maWxlciwgdXNl
UHJvZmlsZXIsIFNhbWVPcHRpb24pIFwKICAgICB2KGVuYWJsZUFyY2hpdGVjdHVyZVNwZWNpZmlj
T3B0aW1pemF0aW9ucywgdXNlQXJjaGl0ZWN0dXJlU3BlY2lmaWNPcHRpbWl6YXRpb25zLCBTYW1l
T3B0aW9uKSBcCiAgICAgdihlbmFibGVQb2x5dmFyaWFudENhbGxJbmxpbmluZywgdXNlUG9seXZh
cmlhbnRDYWxsSW5saW5pbmcsIFNhbWVPcHRpb24pIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDIw
ODc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIEpTT2JqZWN0KiBQcm9ncmFt
RXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUcKICAgICB7CiAgICAgICAgIEpTR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50KiBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQqPihnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlKCkpOwogICAgICAgICBT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJv
bFRhYmxlKCk7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxl
LT5tX2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxl
LT5tX2xvY2spOwogICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbGV4aWNhbERlY2xhcmF0aW9u
cykgewogICAgICAgICAgICAgaWYgKFVOTElLRUxZKGVudHJ5LnZhbHVlLmlzQ29uc3QoKSAmJiAh
dm0uZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKSAmJiAhaXNTdHJpY3RNb2Rl
KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbFRhYmxlLT5jb250YWlucyhsb2NrZXIs
IGVudHJ5LmtleS5nZXQoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cC5jcHAJKHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Miw3ICsyNjIsNyBAQCBSZWdFeHAq
IFJlZ0V4cDo6Y3JlYXRlKFZNJiB2bSwgY29uc3QgU3RyCiAKIHZvaWQgUmVnRXhwOjpjb21waWxl
KFZNKiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQogewotICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwogICAgIAogICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4obV9wYXR0ZXJuU3Ry
aW5nLCBtX2ZsYWdzLCAmbV9jb25zdHJ1Y3Rpb25FcnJvciwgdm0tPnN0YWNrTGltaXQoKSk7CiAg
ICAgaWYgKG1fY29uc3RydWN0aW9uRXJyb3IpIHsKQEAgLTMwNCw3ICszMDQsNyBAQCBpbnQgUmVn
RXhwOjptYXRjaChWTSYgdm0sIGNvbnN0IFN0cmluZyYgCiBib29sIFJlZ0V4cDo6bWF0Y2hDb25j
dXJyZW50bHkoCiAgICAgVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCBpbnQmIHBvc2l0aW9uLCBWZWN0b3I8aW50PiYgb3ZlY3RvcikKIHsKLSAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKIAogICAgIGlmICghaGFzQ29kZUZvcihzLmlzOEJpdCgpID8gWWFycjo6Q2hh
cjggOiBZYXJyOjpDaGFyMTYpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTUsNyArMzE1
LDcgQEAgYm9vbCBSZWdFeHA6Om1hdGNoQ29uY3VycmVudGx5KAogCiB2b2lkIFJlZ0V4cDo6Y29t
cGlsZU1hdGNoT25seShWTSogdm0sIFlhcnI6OllhcnJDaGFyU2l6ZSBjaGFyU2l6ZSkKIHsKLSAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAKICAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJu
KG1fcGF0dGVyblN0cmluZywgbV9mbGFncywgJm1fY29uc3RydWN0aW9uRXJyb3IsIHZtLT5zdGFj
a0xpbWl0KCkpOwogICAgIGlmIChtX2NvbnN0cnVjdGlvbkVycm9yKSB7CkBAIC0zNTYsNyArMzU2
LDcgQEAgTWF0Y2hSZXN1bHQgUmVnRXhwOjptYXRjaChWTSYgdm0sIGNvbnN0IAogCiBib29sIFJl
Z0V4cDo6bWF0Y2hDb25jdXJyZW50bHkoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCBNYXRjaFJlc3VsdCYgcmVzdWx0KQogewotICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xv
Y2spOwogCiAgICAgaWYgKCFoYXNNYXRjaE9ubHlDb2RlRm9yKHMuaXM4Qml0KCkgPyBZYXJyOjpD
aGFyOCA6IFlhcnI6OkNoYXIxNikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM2Nyw3ICsz
NjcsNyBAQCBib29sIFJlZ0V4cDo6bWF0Y2hDb25jdXJyZW50bHkoVk0mIHZtLCBjCiAKIHZvaWQg
UmVnRXhwOjpkZWxldGVDb2RlKCkKIHsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAKICAg
ICBpZiAoIWhhc0NvZGUoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwLmgJKHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKKyNpbmNs
dWRlICJDb25jdXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIk1hdGNoUmVzdWx0LmgiCiAjaW5jbHVkZSAiUmVnRXhwS2V5LmgiCkBAIC0x
NDIsNyArMTQyLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3J0TWF0Y2hDYWxsQ291bnQ7
CiAgICAgdW5zaWduZWQgbV9ydE1hdGNoRm91bmRDb3VudDsKICNlbmRpZgotICAgIENvbmN1cnJl
bnRKSVRMb2NrIG1fbG9jazsKKyAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKIAogI2lmIEVO
QUJMRShZQVJSX0pJVCkKICAgICBZYXJyOjpZYXJyQ29kZUJsb2NrIG1fcmVnRXhwSklUQ29kZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDcgKzMzNyw3IEBAIFByb3BlcnR5VGFibGUqIFN0
cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm8KICAgICAvLyBNdXN0IGhvbGQgdGhlIGxvY2sgb24gdGhp
cyBzdHJ1Y3R1cmUsIHNpbmNlIHdlIHdpbGwgYmUgbW9kaWZ5aW5nIHRoaXMgc3RydWN0dXJlJ3MK
ICAgICAvLyBwcm9wZXJ0eSBtYXAuIFdlIGRvbid0IHdhbnQgZ2V0Q29uY3VycmVudGx5KCkgdG8g
c2VlIHRoZSBwcm9wZXJ0eSBtYXAgaW4gYSBoYWxmLWJha2VkCiAgICAgLy8gc3RhdGUuCi0gICAg
R0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CiAgICAgaWYg
KHNldFByb3BlcnR5VGFibGUpCiAgICAgICAgIHRoaXMtPnNldFByb3BlcnR5VGFibGUodm0sIHRh
YmxlKTsKIApAQCAtMzgwLDcgKzM4MCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXQKIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlv
blRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0
JiBvZmZzZXQpCiB7Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5t
X2xvY2spOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5tX2xvY2sp
OwogICAgIHJldHVybiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1w
bChzdHJ1Y3R1cmUsIHVpZCwgYXR0cmlidXRlcywgb2Zmc2V0KTsKIH0KIApAQCAtNDc4LDcgKzQ3
OCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW4KIAogICAgIGNo
ZWNrT2Zmc2V0KHRyYW5zaXRpb24tPm1fb2Zmc2V0LCB0cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0
eSgpKTsKICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN0cnVjdHVy
ZS0+bV9sb2NrKTsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUt
Pm1fbG9jayk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0
cmFuc2l0aW9uKTsKICAgICB9CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5j
eSgpOwpAQCAtNTk3LDcgKzU5Nyw3IEBAIFByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6dGFrZVBy
b3BlcnR5VGEKICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgIGlmIChpc1Bpbm5lZFByb3BlcnR5
VGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQtPmNvcHkodm0sIHJlc3VsdC0+c2l6
ZSgpICsgMSk7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgc2V0UHJv
cGVydHlUYWJsZSh2bSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpA
QCAtNjY4LDcgKzY2OCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXQKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgdHJhbnNpdGlv
bi0+cGluKHZtLCB0cmFuc2l0aW9uLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKSk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2Nr
KTsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jayk7
CiAgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9u
KTsKICAgICB9CiAKQEAgLTcxOSw3ICs3MTksNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Zmxh
dHRlbkRpY3Rpb25hcnlTCiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIEFTU0VS
VChpc0RpY3Rpb25hcnkoKSk7CiAgICAgCi0gICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jaywgdm0uaGVhcCk7CiAKICAgICBzaXplX3QgYmVmb3JlT3V0T2ZMaW5lQ2FwYWNp
dHkgPSB0aGlzLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIGlmIChpc1VuY2FjaGVhYmxlRGlj
dGlvbmFyeSgpKSB7CkBAIC04MDMsNyArODAzLDcgQEAgV2F0Y2hwb2ludFNldCogU3RydWN0dXJl
OjplbnN1cmVQcm9wZXJ0eQogICAgIAogICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAgICAgICAg
YWxsb2NhdGVSYXJlRGF0YSh2bSk7Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9s
b2NrKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgU3RydWN0
dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEoKTsKICAgICBpZiAoIXJhcmVE
YXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMpIHsKICAgICAgICAgcmFyZURhdGEtPm1f
cmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0cyA9CkBAIC05NDMsMTIgKzk0MywxMiBAQCBWZWN0b3I8
UHJvcGVydHlNYXBFbnRyeT4gU3RydWN0dXJlOjpnZXRQCiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKIHsKLSAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
IFtdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsg
fSk7CisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBbXSAoY29u
c3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiB9CiAK
IFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CisgICAgcmV0dXJuIHJlbW92ZShw
cm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNl
dCkgeyB9KTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0
dXJlKFZNJiB2bSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQpAQCAtMTAyMyw3ICsxMDIzLDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZQogCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogICAgIAotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNPYmpl
Y3QtPm1fbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5t
X2xvY2spOwogICAgIAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2dsb2JhbE9i
amVjdCk7CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc09iamVjdCgpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDIwODc1NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgot
I2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9j
ay5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIkluZmVycmVkVHlwZVRh
YmxlLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgpAQCAtNTgxLDcgKzU4MSw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICBzdGF0aWMgdm9pZCBkdW1wQ29udGV4dEhlYWRlcihQcmludFN0cmVhbSYp
OwogICAgIAotICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9
CisgICAgQ29uY3VycmVudEpTTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQogICAgIAog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKQEAgLTc2MCw3ICs3NjAsNyBAQCBwcml2YXRlOgog
CiAgICAgdWludDhfdCBtX2lubGluZUNhcGFjaXR5OwogICAgIAotICAgIENvbmN1cnJlbnRKSVRM
b2NrIG1fbG9jazsKKyAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKICAgICAKICAgICB1aW50
MzJfdCBtX2JpdEZpZWxkOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMzLDcgKzIzMyw3IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6ZGlkUmVwbGFjZVByb3Bl
cnQKIAogaW5saW5lIFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6cHJvcGVydHlSZXBsYWNlbWVu
dFdhdGNocG9pbnRTZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewotICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwogICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CkBAIC0yOTAsNyArMjkwLDcgQEAgaW5saW5lIFBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJgogewogICAgIFByb3BlcnR5VGFibGUqIHRh
YmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7CiAKLSAgICBHQ1NhZmVDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKICAgICAKICAgICBzZXRQcm9wZXJ0eVRhYmxl
KHZtLCB0YWJsZSk7CiAgICAgCkBAIC0zMTUsNyArMzE1LDcgQEAgaW5saW5lIFByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6YWRkKFZNJgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIGlubGluZSBQ
cm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBjb25zdCBGdW5jJiBmdW5jKQogewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIAogICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgs
MTEgKzEwOCwxMSBAQCB2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzU3ltYm9sVGFibGUtPm1fcmFyZURhdGEtPm1fY29k
ZUJsb2NrKTsKICAgICAKICAgICAvLyBTYXZlIHNvbWUgbWVtb3J5LiBUaGlzIGlzIE8obikgdG8g
cmVidWlsZCBhbmQgd2UgZG8gc28gb24gdGhlIGZseS4KLSAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcih0aGlzU3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcih0aGlzU3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgdGhpc1N5bWJvbFRhYmxlLT5t
X2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9CiAKLWNvbnN0IFN5bWJvbFRhYmxlOjpMb2NhbFRv
RW50cnlWZWMmIFN5bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYpCitjb25zdCBTeW1ib2xUYWJsZTo6TG9jYWxUb0VudHJ5VmVjJiBTeW1ib2xUYWJsZTo6
bG9jYWxUb0VudHJ5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7CiAgICAgaWYgKFVOTElL
RUxZKCFtX2xvY2FsVG9FbnRyeSkpIHsKICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IDA7CkBAIC0x
MzMsNyArMTMzLDcgQEAgY29uc3QgU3ltYm9sVGFibGU6OkxvY2FsVG9FbnRyeVZlYyYgU3ltYgog
ICAgIHJldHVybiAqbV9sb2NhbFRvRW50cnk7CiB9CiAKLVN5bWJvbFRhYmxlRW50cnkqIFN5bWJv
bFRhYmxlOjplbnRyeUZvcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFNjb3Bl
T2Zmc2V0IG9mZnNldCkKK1N5bWJvbFRhYmxlRW50cnkqIFN5bWJvbFRhYmxlOjplbnRyeUZvcihj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgU2NvcGVPZmZzZXQgb2Zmc2V0KQogewog
ICAgIGF1dG8mIHRvRW50cnlWZWN0b3IgPSBsb2NhbFRvRW50cnkobG9ja2VyKTsKICAgICBpZiAo
b2Zmc2V0Lm9mZnNldCgpID49IHRvRW50cnlWZWN0b3Iuc2l6ZSgpKQpAQCAtMTkwLDcgKzE5MCw3
IEBAIFN5bWJvbFRhYmxlKiBTeW1ib2xUYWJsZTo6Y2xvbmVTY29wZVBhcnQKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi12b2lkIFN5bWJvbFRhYmxlOjpwcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJikKK3ZvaWQgU3ltYm9sVGFibGU6OnByZXBhcmVGb3JU
eXBlUHJvZmlsaW5nKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7CiAgICAgaWYgKG1fcmFy
ZURhdGEpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIFN5bWJvbFRh
YmxlOjpzZXRSYXJlRGF0YUNvZGVCbG9jayhDCiAgICAgbV9yYXJlRGF0YS0+bV9jb2RlQmxvY2su
c2V0KCpjb2RlQmxvY2stPnZtKCksIHRoaXMsIGNvZGVCbG9jayk7CiB9CiAKLUdsb2JhbFZhcmlh
YmxlSUQgU3ltYm9sVGFibGU6OnVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXksIFZNJiB2bSkKK0dsb2JhbFZhcmlhYmxl
SUQgU3ltYm9sVGFibGU6OnVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgVW5pcXVlZFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKG1fcmFyZURhdGEpOwogCkBAIC0yMzksNyArMjM5LDcgQEAgR2xvYmFsVmFyaWFibGVJRCBT
eW1ib2xUYWJsZTo6dW5pcXVlSURGbwogICAgIHJldHVybiBpZDsKIH0KIAotR2xvYmFsVmFyaWFi
bGVJRCBTeW1ib2xUYWJsZTo6dW5pcXVlSURGb3JPZmZzZXQoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYgbG9ja2VyLCBWYXJPZmZzZXQgb2Zmc2V0LCBWTSYgdm0pCitHbG9iYWxWYXJpYWJsZUlE
IFN5bWJvbFRhYmxlOjp1bmlxdWVJREZvck9mZnNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgVmFyT2Zmc2V0IG9mZnNldCwgVk0mIHZtKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KG1fcmFyZURhdGEpOwogCkBAIC0yNTEsNyArMjUxLDcgQEAgR2xvYmFsVmFyaWFibGVJRCBTeW1i
b2xUYWJsZTo6dW5pcXVlSURGbwogICAgIHJldHVybiB1bmlxdWVJREZvclZhcmlhYmxlKGxvY2tl
ciwgaXRlci0+dmFsdWUuZ2V0KCksIHZtKTsKIH0KIAotUmVmUHRyPFR5cGVTZXQ+IFN5bWJvbFRh
YmxlOjpnbG9iYWxUeXBlU2V0Rm9yT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxv
Y2tlciwgVmFyT2Zmc2V0IG9mZnNldCwgVk0mIHZtKQorUmVmUHRyPFR5cGVTZXQ+IFN5bWJvbFRh
YmxlOjpnbG9iYWxUeXBlU2V0Rm9yT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9j
a2VyLCBWYXJPZmZzZXQgb2Zmc2V0LCBWTSYgdm0pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9y
YXJlRGF0YSk7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQCBSZWZQdHI8VHlwZVNldD4gU3ltYm9sVGFi
bGU6Omdsb2JhbFR5cGVTCiAgICAgcmV0dXJuIGdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2Nr
ZXIsIGl0ZXItPnZhbHVlLmdldCgpLCB2bSk7CiB9CiAKLVJlZlB0cjxUeXBlU2V0PiBTeW1ib2xU
YWJsZTo6Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
IGxvY2tlciwgVW5pcXVlZFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKQorUmVmUHRyPFR5cGVTZXQ+
IFN5bWJvbFRhYmxlOjpnbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXksIFZNJiB2bSkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVChtX3JhcmVEYXRhKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2su
aCIKKyNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAiQ29uc3RhbnRNb2Rl
LmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkBA
IC00NjIsNjEgKzQ2Miw2MSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gWW91IG11c3QgaG9s
ZCB0aGUgbG9jayB1bnRpbCBhZnRlciB5b3UncmUgZG9uZSB3aXRoIHRoZSBpdGVyYXRvci4KLSAg
ICBNYXA6Oml0ZXJhdG9yIGZpbmQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFVuaXF1ZWRT
dHJpbmdJbXBsKiBrZXkpCisgICAgTWFwOjppdGVyYXRvciBmaW5kKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXkpCiAgICAgewogICAgICAgICByZXR1cm4g
bV9tYXAuZmluZChrZXkpOwogICAgIH0KICAgICAKLSAgICBNYXA6Oml0ZXJhdG9yIGZpbmQoY29u
c3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXkpCisg
ICAgTWFwOjppdGVyYXRvciBmaW5kKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFVu
aXF1ZWRTdHJpbmdJbXBsKiBrZXkpCiAgICAgewogICAgICAgICByZXR1cm4gbV9tYXAuZmluZChr
ZXkpOwogICAgIH0KICAgICAKLSAgICBTeW1ib2xUYWJsZUVudHJ5IGdldChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgVW5pcXVlZFN0cmluZ0ltcGwqIGtleSkKKyAgICBTeW1ib2xUYWJsZUVu
dHJ5IGdldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCoga2V5
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbWFwLmdldChrZXkpOwogICAgIH0KICAgICAKICAg
ICBTeW1ib2xUYWJsZUVudHJ5IGdldChVbmlxdWVkU3RyaW5nSW1wbCoga2V5KQogICAgIHsKLSAg
ICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICByZXR1cm4gZ2V0KGxvY2tlciwg
a2V5KTsKICAgICB9CiAgICAgCi0gICAgU3ltYm9sVGFibGVFbnRyeSBpbmxpbmVHZXQoY29uc3Qg
Q29uY3VycmVudEpJVExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXkpCisgICAgU3ltYm9s
VGFibGVFbnRyeSBpbmxpbmVHZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVW5pcXVlZFN0
cmluZ0ltcGwqIGtleSkKICAgICB7CiAgICAgICAgIHJldHVybiBtX21hcC5pbmxpbmVHZXQoa2V5
KTsKICAgICB9CiAgICAgCiAgICAgU3ltYm9sVGFibGVFbnRyeSBpbmxpbmVHZXQoVW5pcXVlZFN0
cmluZ0ltcGwqIGtleSkKICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAg
ICAgICAgcmV0dXJuIGlubGluZUdldChsb2NrZXIsIGtleSk7CiAgICAgfQogICAgIAotICAgIE1h
cDo6aXRlcmF0b3IgYmVnaW4oY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpCisgICAgTWFwOjpp
dGVyYXRvciBiZWdpbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fbWFwLmJlZ2luKCk7CiAgICAgfQogICAgIAotICAgIE1hcDo6aXRlcmF0b3IgZW5k
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKQorICAgIE1hcDo6aXRlcmF0b3IgZW5kKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICByZXR1cm4gbV9tYXAuZW5kKCk7
CiAgICAgfQogICAgIAotICAgIE1hcDo6aXRlcmF0b3IgZW5kKGNvbnN0IEdDU2FmZUNvbmN1cnJl
bnRKSVRMb2NrZXImKQorICAgIE1hcDo6aXRlcmF0b3IgZW5kKGNvbnN0IEdDU2FmZUNvbmN1cnJl
bnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICByZXR1cm4gbV9tYXAuZW5kKCk7CiAgICAgfQog
ICAgIAotICAgIHNpemVfdCBzaXplKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKSBjb25zdAor
ICAgIHNpemVfdCBzaXplKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9tYXAuc2l6ZSgpOwogICAgIH0KICAgICAKICAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0CiAgICAgewotICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAg
IHJldHVybiBzaXplKGxvY2tlcik7CiAgICAgfQogICAgIApAQCAtNTU1LDcgKzU1NSw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIFNjb3BlT2Zmc2V0KHNjb3BlU2l6ZSgpKTsKICAgICB9CiAg
ICAgCi0gICAgU2NvcGVPZmZzZXQgdGFrZU5leHRTY29wZU9mZnNldChjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJikKKyAgICBTY29wZU9mZnNldCB0YWtlTmV4dFNjb3BlT2Zmc2V0KGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBTY29wZU9mZnNldCByZXN1bHQgPSBu
ZXh0U2NvcGVPZmZzZXQoKTsKICAgICAgICAgbV9tYXhTY29wZU9mZnNldCA9IHJlc3VsdDsKQEAg
LTU2NCwxMiArNTY0LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICBTY29wZU9mZnNldCB0YWtlTmV4
dFNjb3BlT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAg
ICAgICAgcmV0dXJuIHRha2VOZXh0U2NvcGVPZmZzZXQobG9ja2VyKTsKICAgICB9CiAgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+Ci0gICAgdm9pZCBhZGQoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXksIEVudHJ5JiYgZW50cnkpCisgICAg
dm9pZCBhZGQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVW5pcXVlZFN0cmluZ0ltcGwqIGtl
eSwgRW50cnkmJiBlbnRyeSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2xvY2Fs
VG9FbnRyeSk7CiAgICAgICAgIGRpZFVzZVZhck9mZnNldChlbnRyeS52YXJPZmZzZXQoKSk7CkBA
IC01ODAsMTIgKzU4MCwxMiBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+
CiAgICAgdm9pZCBhZGQoVW5pcXVlZFN0cmluZ0ltcGwqIGtleSwgRW50cnkmJiBlbnRyeSkKICAg
ICB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgYWRkKGxvY2tlciwg
a2V5LCBzdGQ6OmZvcndhcmQ8RW50cnk+KGVudHJ5KSk7CiAgICAgfQogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEVudHJ5PgotICAgIHZvaWQgc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImLCBVbmlxdWVkU3RyaW5nSW1wbCoga2V5LCBFbnRyeSYmIGVudHJ5KQorICAgIHZvaWQgc2V0
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXksIEVudHJ5
JiYgZW50cnkpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9sb2NhbFRvRW50cnkp
OwogICAgICAgICBkaWRVc2VWYXJPZmZzZXQoZW50cnkudmFyT2Zmc2V0KCkpOwpAQCAtNTk1LDE4
ICs1OTUsMTggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgogICAgIHZv
aWQgc2V0KFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXksIEVudHJ5JiYgZW50cnkpCiAgICAgewotICAg
ICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIHNldChsb2NrZXIsIGtleSwgc3Rk
Ojpmb3J3YXJkPEVudHJ5PihlbnRyeSkpOwogICAgIH0KICAgICAKLSAgICBib29sIGNvbnRhaW5z
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCoga2V5KQorICAg
IGJvb2wgY29udGFpbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVW5pcXVlZFN0cmluZ0lt
cGwqIGtleSkKICAgICB7CiAgICAgICAgIHJldHVybiBtX21hcC5jb250YWlucyhrZXkpOwogICAg
IH0KICAgICAKICAgICBib29sIGNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXkpCiAgICAg
ewotICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIHJldHVybiBjb250YWlu
cyhsb2NrZXIsIGtleSk7CiAgICAgfQogICAgIApAQCAtNjUxLDEzICs2NTEsMTMgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIGNv
bnN0IExvY2FsVG9FbnRyeVZlYyYgbG9jYWxUb0VudHJ5KGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImKTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5KiBlbnRyeUZvcihjb25zdCBDb25jdXJyZW50SklU
TG9ja2VyJiwgU2NvcGVPZmZzZXQpOworICAgIGNvbnN0IExvY2FsVG9FbnRyeVZlYyYgbG9jYWxU
b0VudHJ5KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOworICAgIFN5bWJvbFRhYmxlRW50cnkq
IGVudHJ5Rm9yKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNjb3BlT2Zmc2V0KTsKICAgICAK
LSAgICBHbG9iYWxWYXJpYWJsZUlEIHVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXksIFZNJik7Ci0gICAgR2xvYmFsVmFy
aWFibGVJRCB1bmlxdWVJREZvck9mZnNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgVmFy
T2Zmc2V0LCBWTSYpOwotICAgIFJlZlB0cjxUeXBlU2V0PiBnbG9iYWxUeXBlU2V0Rm9yT2Zmc2V0
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBWYXJPZmZzZXQsIFZNJik7Ci0gICAgUmVmUHRy
PFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiwgVW5pcXVlZFN0cmluZ0ltcGwqIGtleSwgVk0mKTsKKyAgICBHbG9iYWxWYXJpYWJsZUlE
IHVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVW5pcXVlZFN0
cmluZ0ltcGwqIGtleSwgVk0mKTsKKyAgICBHbG9iYWxWYXJpYWJsZUlEIHVuaXF1ZUlERm9yT2Zm
c2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZhck9mZnNldCwgVk0mKTsKKyAgICBSZWZQ
dHI8VHlwZVNldD4gZ2xvYmFsVHlwZVNldEZvck9mZnNldChjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBWYXJPZmZzZXQsIFZNJik7CisgICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXRG
b3JWYXJpYWJsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCog
a2V5LCBWTSYpOwogCiAgICAgYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlc05vblN0cmljdEV2YWw7IH0KICAgICB2b2lkIHNldFVzZXNOb25TdHJpY3RFdmFsKGJv
b2wgdXNlc05vblN0cmljdEV2YWwpIHsgbV91c2VzTm9uU3RyaWN0RXZhbCA9IHVzZXNOb25TdHJp
Y3RFdmFsOyB9CkBAIC02NzcsNyArNjc3LDcgQEAgcHVibGljOgogCiAgICAgU3ltYm9sVGFibGUq
IGNsb25lU2NvcGVQYXJ0KFZNJik7CiAKLSAgICB2b2lkIHByZXBhcmVGb3JUeXBlUHJvZmlsaW5n
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKTsKKyAgICB2b2lkIHByZXBhcmVGb3JUeXBlUHJv
ZmlsaW5nKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwogCiAgICAgQ29kZUJsb2NrKiByYXJl
RGF0YUNvZGVCbG9jaygpOwogICAgIHZvaWQgc2V0UmFyZURhdGFDb2RlQmxvY2soQ29kZUJsb2Nr
Kik7CkBAIC03MTUsNyArNzE1LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9j
YWxUb0VudHJ5VmVjPiBtX2xvY2FsVG9FbnRyeTsKIAogcHVibGljOgotICAgIG11dGFibGUgQ29u
Y3VycmVudEpJVExvY2sgbV9sb2NrOworICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xv
Y2s7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVTZXQuY3BwCShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NyBAQCB2b2lkIFR5cGVTZXQ6OmFkZFR5cGVJbmZvcm1hdGlvbihSdW50aW1lCiAgICAgaWYgKHN0
cnVjdHVyZSAmJiBuZXdTaGFwZSAmJiAhcnVudGltZVR5cGVJc1ByaW1pdGl2ZSh0eXBlKSkgewog
ICAgICAgICBpZiAoIW1fc3RydWN0dXJlU2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpIHsKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsK
ICAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZVNldC5hZGQoc3RydWN0dXJlKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIC8vIE1ha2Ugb25lIG1vcmUgcGFzcyBtYWtpbmcgc3VyZSB0aGF0
OiAKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBUeXBlU2V0OjphZGRUeXBlSW5mb3JtYXRpb24oUnVu
dGltZQogCiB2b2lkIFR5cGVTZXQ6OmludmFsaWRhdGVDYWNoZSgpCiB7Ci0gICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CiAgICAgYXV0byBrZWVwTWFya2VkU3RydWN0dXJlc0ZpbHRlciA9IFtdIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9vbCB7IHJldHVybiBIZWFwOjppc01hcmtlZChzdHJ1Y3R1
cmUpOyB9OwogICAgIG1fc3RydWN0dXJlU2V0LmdlbmVyaWNGaWx0ZXIoa2VlcE1hcmtlZFN0cnVj
dHVyZXNGaWx0ZXIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVT
ZXQuaAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKKyNpbmNsdWRlICJDb25jdXJyZW50
SlNMb2NrLmgiCiAjaW5jbHVkZSAiUnVudGltZVR5cGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVT
ZXQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtOTcsOSArOTcsOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zZWVuVHlwZXMgPT0gVHlwZU5v
dGhpbmc7IH0KICAgICBib29sIGRvZXNUeXBlQ29uZm9ybVRvKFJ1bnRpbWVUeXBlTWFzayB0ZXN0
KSBjb25zdDsKICAgICBSdW50aW1lVHlwZU1hc2sgc2VlblR5cGVzKCkgY29uc3QgeyByZXR1cm4g
bV9zZWVuVHlwZXM7IH0KLSAgICBTdHJ1Y3R1cmVTZXQgc3RydWN0dXJlU2V0KGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQorICAgIFN0
cnVjdHVyZVNldCBzdHJ1Y3R1cmVTZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KIAotICAgIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9j
azsKKyAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKIHByaXZhdGU6CiAgICAgYm9vbCBtX2lz
T3ZlcmZsb3duOwogICAgIFJ1bnRpbWVUeXBlTWFzayBtX3NlZW5UeXBlczsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDYWxsRGF0YS5oIgotI2luY2x1ZGUgIkNvbmN1cnJl
bnRKSVRMb2NrLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgogI2luY2x1ZGUgIkNv
bnRyb2xGbG93UHJvZmlsZXIuaCIKICNpbmNsdWRlICJEYXRlSW5zdGFuY2VDYWNoZS5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCIKQEAgLTU1Nyw3ICs1NTcsNyBAQCBwdWJs
aWM6CiAgICAgUmVmUHRyPFR5cGVkQXJyYXlDb250cm9sbGVyPiBtX3R5cGVkQXJyYXlDb250cm9s
bGVyOwogICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENhY2hlOwogICAgIEJ1bXBQb2ludGVyQWxs
b2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9yOwotICAgIENvbmN1cnJlbnRKSVRMb2NrIG1fcmVnRXhw
QWxsb2NhdG9yTG9jazsKKyAgICBDb25jdXJyZW50SlNMb2NrIG1fcmVnRXhwQWxsb2NhdG9yTG9j
azsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNPd25Qcm9wZXJ0eUNhY2hlPiBtX2hhc093blBy
b3BlcnR5Q2FjaGU7CiAgICAgQUxXQVlTX0lOTElORSBIYXNPd25Qcm9wZXJ0eUNhY2hlKiBoYXNP
d25Qcm9wZXJ0eUNhY2hlKCkgeyByZXR1cm4gbV9oYXNPd25Qcm9wZXJ0eUNhY2hlLmdldCgpOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXJJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJy
aWVySW5saW5lcy5oCShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Xcml0ZUJhcnJpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBpbmxpbmUgdm9pZCBXcml0ZUJhcnJpZXJCYXNl
PFQ+OjpzZXQoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKIHsKICAgICBB
U1NFUlQodmFsdWUpOwotICAgIEFTU0VSVCghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpIHx8
ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIEFTU0VSVCghT3B0aW9uczo6dXNlQ29uY3Vy
cmVudEpTKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgdmFsaWRhdGVDZWxsKHZh
bHVlKTsKICAgICBzZXRFYXJseVZhbHVlKHZtLCBvd25lciwgdmFsdWUpOwogfQpAQCAtNTYsNyAr
NTYsNyBAQCBpbmxpbmUgdm9pZCBXcml0ZUJhcnJpZXJCYXNlPFQ+OjpzZXRFYXJsCiAKIGlubGlu
ZSB2b2lkIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj46OnNldChWTSYgdm0sIGNvbnN0IEpTQ2Vs
bCogb3duZXIsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKCFPcHRpb25zOjp1c2VDb25j
dXJyZW50SklUKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFPcHRp
b25zOjp1c2VDb25jdXJyZW50SlMoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBt
X3ZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKICAgICB2bS5oZWFwLndyaXRlQmFycmll
cihvd25lciwgdmFsdWUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJySW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg4
LDcgKzE1ODgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY3VycmVudEFsdGVybmF0aXZlSW5kZXgg
PSAwOwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZVBhdHRlcm4+IGNvbXBp
bGUoQnVtcFBvaW50ZXJBbGxvY2F0b3IqIGFsbG9jYXRvciwgQ29uY3VycmVudEpJVExvY2sqIGxv
Y2spCisgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlUGF0dGVybj4gY29tcGlsZShCdW1wUG9p
bnRlckFsbG9jYXRvciogYWxsb2NhdG9yLCBDb25jdXJyZW50SlNMb2NrKiBsb2NrKQogICAgIHsK
ICAgICAgICAgcmVnZXhCZWdpbihtX3BhdHRlcm4ubV9udW1TdWJwYXR0ZXJucywgbV9wYXR0ZXJu
Lm1fYm9keS0+bV9jYWxsRnJhbWVTaXplLCBtX3BhdHRlcm4ubV9ib2R5LT5tX2FsdGVybmF0aXZl
c1swXS0+b25jZVRocm91Z2goKSk7CiAgICAgICAgIGVtaXREaXNqdW5jdGlvbihtX3BhdHRlcm4u
bV9ib2R5KTsKQEAgLTIwNDIsNyArMjA0Miw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxCeXRlRGlzanVuY3Rpb24+PiBtX2FsbFBhcmVudGhlc2VzSW5mbzsKIH07CiAK
LXN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZVBhdHRlcm4+IGJ5dGVDb21waWxlKFlhcnJQYXR0ZXJu
JiBwYXR0ZXJuLCBCdW1wUG9pbnRlckFsbG9jYXRvciogYWxsb2NhdG9yLCBDb25jdXJyZW50SklU
TG9jayogbG9jaykKK3N0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZVBhdHRlcm4+IGJ5dGVDb21waWxl
KFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBCdW1wUG9pbnRlckFsbG9jYXRvciogYWxsb2NhdG9yLCBD
b25jdXJyZW50SlNMb2NrKiBsb2NrKQogewogICAgIHJldHVybiBCeXRlQ29tcGlsZXIocGF0dGVy
bikuY29tcGlsZShhbGxvY2F0b3IsIGxvY2spOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmgJKHJldmlzaW9uIDIwODc1NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ29uY3VycmVudEpJ
VExvY2suaCIKKyNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAiWWFyclBh
dHRlcm4uaCIKIAogbmFtZXNwYWNlIFdURiB7CkBAIC0zMzcsNyArMzM3LDcgQEAgcHVibGljOgog
c3RydWN0IEJ5dGVjb2RlUGF0dGVybiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgQnl0ZWNvZGVQYXR0ZXJuKHN0ZDo6dW5pcXVlX3B0cjxCeXRlRGlzanVuY3Rp
b24+IGJvZHksIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZURpc2p1bmN0aW9uPj4mIHBhcmVu
dGhlc2VzSW5mb1RvQWRvcHQsIFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBCdW1wUG9pbnRlckFsbG9j
YXRvciogYWxsb2NhdG9yLCBDb25jdXJyZW50SklUTG9jayogbG9jaykKKyAgICBCeXRlY29kZVBh
dHRlcm4oc3RkOjp1bmlxdWVfcHRyPEJ5dGVEaXNqdW5jdGlvbj4gYm9keSwgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxCeXRlRGlzanVuY3Rpb24+PiYgcGFyZW50aGVzZXNJbmZvVG9BZG9wdCwgWWFy
clBhdHRlcm4mIHBhdHRlcm4sIEJ1bXBQb2ludGVyQWxsb2NhdG9yKiBhbGxvY2F0b3IsIENvbmN1
cnJlbnRKU0xvY2sqIGxvY2spCiAgICAgICAgIDogbV9ib2R5KFdURk1vdmUoYm9keSkpCiAgICAg
ICAgICwgbV9mbGFncyhwYXR0ZXJuLm1fZmxhZ3MpCiAgICAgICAgICwgbV9hbGxvY2F0b3IoYWxs
b2NhdG9yKQpAQCAtMzcwLDcgKzM3MCw3IEBAIHB1YmxpYzoKICAgICAvLyBFYWNoIEJ5dGVjb2Rl
UGF0dGVybiBpcyBhc3NvY2lhdGVkIHdpdGggYSBSZWdFeHAsIGVhY2ggUmVnRXhwIGlzIGFzc29j
aWF0ZWQKICAgICAvLyB3aXRoIGEgVk0uICBDYWNoZSBhIHBvaW50ZXIgdG8gb3V0IFZNJ3MgbV9y
ZWdFeHBBbGxvY2F0b3IuCiAgICAgQnVtcFBvaW50ZXJBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOwot
ICAgIENvbmN1cnJlbnRKSVRMb2NrKiBtX2xvY2s7CisgICAgQ29uY3VycmVudEpTTG9jayogbV9s
b2NrOwogCiAgICAgQ2hhcmFjdGVyQ2xhc3MqIG5ld2xpbmVDaGFyYWN0ZXJDbGFzczsKICAgICBD
aGFyYWN0ZXJDbGFzcyogd29yZGNoYXJDaGFyYWN0ZXJDbGFzczsKQEAgLTM4MCw3ICszODAsNyBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2hhcmFjdGVyQ2xhc3M+PiBt
X3VzZXJDaGFyYWN0ZXJDbGFzc2VzOwogfTsKIAotSlNfRVhQT1JUX1BSSVZBVEUgc3RkOjp1bmlx
dWVfcHRyPEJ5dGVjb2RlUGF0dGVybj4gYnl0ZUNvbXBpbGUoWWFyclBhdHRlcm4mLCBCdW1wUG9p
bnRlckFsbG9jYXRvciosIENvbmN1cnJlbnRKSVRMb2NrKiA9IG51bGxwdHIpOworSlNfRVhQT1JU
X1BSSVZBVEUgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlUGF0dGVybj4gYnl0ZUNvbXBpbGUoWWFy
clBhdHRlcm4mLCBCdW1wUG9pbnRlckFsbG9jYXRvciosIENvbmN1cnJlbnRKU0xvY2sqID0gbnVs
bHB0cik7CiBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBpbnRlcnByZXQoQnl0ZWNvZGVQYXR0
ZXJuKiwgY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkKiBvdXRw
dXQpOwogdW5zaWduZWQgaW50ZXJwcmV0KEJ5dGVjb2RlUGF0dGVybiosIGNvbnN0IExDaGFyKiBp
bnB1dCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQqIG91dHB1dCk7
CiB1bnNpZ25lZCBpbnRlcnByZXQoQnl0ZWNvZGVQYXR0ZXJuKiwgY29uc3QgVUNoYXIqIGlucHV0
LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCogb3V0cHV0KTsKSW5k
ZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMDg3NTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE2LTExLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIENPTkNVUlJFTlRfSklUL0NvbmN1cnJlbnRKSVQg
dG8gQ09OQ1VSUkVOVF9KUy9Db25jdXJyZW50SlMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDc5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQm90aCB0aGUgY29uY3VycmVudCBHQyBhbmQg
dGhlIGNvbmN1cnJlbnQgSklUIHJlbHkgb24gY29uY3VycmVuY3kgc3VwcG9ydCBpbiBmdW5kYW1l
bnRhbAorICAgICAgICBKU0MgcnVudGltZSBjb21wb25lbnRzIGxpa2UgSlNWYWx1ZS4gU28sIHRo
ZSB0aGluZyB0aGF0IGd1YXJkcyBpdCBzaG91bGQgYmUgYSAiZmVhdHVyZSIKKyAgICAgICAgY2Fs
bGVkIENPTkNVUlJFTlRfSlMgbm90IENPTkNVUlJFTlRfSklULgorCisgICAgICAgICogd3RmL1Bs
YXRmb3JtLmg6CisKIDIwMTYtMTEtMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBUaGUgY29uY3VycmVudCBHQyBzaG91bGQgaGF2ZSBhIHRpbWVzbGljaW5nIGNv
bnRyb2xsZXIKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMjA4NzU0KQorKysgU291cmNlL1dU
Ri93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNzQ0LDEyICs3NDQsMTIgQEAKICNl
bmRpZgogI2VuZGlmCiAKLS8qIENvbmN1cnJlbnQgSklUIG9ubHkgd29ya3Mgb24gNjQtYml0IHBs
YXRmb3JtcyBiZWNhdXNlIGl0IHJlcXVpcmVzIHRoYXQKKy8qIENvbmN1cnJlbnQgSlMgb25seSB3
b3JrcyBvbiA2NC1iaXQgcGxhdGZvcm1zIGJlY2F1c2UgaXQgcmVxdWlyZXMgdGhhdAogICAgdmFs
dWVzIGdldCBzdG9yZWQgdG8gYXRvbWljYWxseS4gVGhpcyBpcyB0cml2aWFsbHkgdHJ1ZSBvbiA2
NC1iaXQgcGxhdGZvcm1zLAogICAgYnV0IG5vdCB0cnVlIGF0IGFsbCBvbiAzMi1iaXQgcGxhdGZv
cm1zIHdoZXJlIHZhbHVlcyBhcmUgY29tcG9zZWQgb2YgdHdvCiAgICBzZXBhcmF0ZSBzdWItdmFs
dWVzLiAqLwogI2lmIEVOQUJMRShERkdfSklUKSAmJiBVU0UoSlNWQUxVRTY0KQotI2RlZmluZSBF
TkFCTEVfQ09OQ1VSUkVOVF9KSVQgMQorI2RlZmluZSBFTkFCTEVfQ09OQ1VSUkVOVF9KUyAxCiAj
ZW5kaWYKIAogLyogVGhpcyBjb250cm9scyB3aGV0aGVyIEIzIGlzIGJ1aWx0LiBCMyBpcyBuZWVk
ZWQgZm9yIEZUTCBKSVQgYW5kIFdlYkFzc2VtYmx5ICovCg==
</data>
<flag name="review"
          id="317533"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>