<?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>225617</bug_id>
          
          <creation_ts>2021-05-10 14:43:53 -0700</creation_ts>
          <short_desc>Add support to collect stats on cumulative LinkBuffer linked sizes based on profiles.</short_desc>
          <delta_ts>2021-05-10 16:25:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1758653</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-10 14:43:53 -0700</bug_when>
    <thetext>This is used for VM development and tuning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758673</commentid>
    <comment_count>1</comment_count>
      <attachid>428210</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-10 15:05:01 -0700</bug_when>
    <thetext>Created attachment 428210
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758676</commentid>
    <comment_count>2</comment_count>
      <attachid>428210</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-10 15:11:03 -0700</bug_when>
    <thetext>Comment on attachment 428210
proposed patch.

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

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        1. Specify --dumpLinkBufferStats as an argument to the jsc shell.

maybe a JSC option too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758677</commentid>
    <comment_count>3</comment_count>
      <attachid>428210</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-10 15:11:39 -0700</bug_when>
    <thetext>Comment on attachment 428210
proposed patch.

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

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        2. Call $vm.dumpLinkBufferStats() from your JS script.

maybe have it return a string?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758679</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-10 15:15:03 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #2)
&gt; Comment on attachment 428210 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428210&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:9
&gt; &gt; +        1. Specify --dumpLinkBufferStats as an argument to the jsc shell.
&gt; 
&gt; maybe a JSC option too?

A JSC option doesn&apos;t make sense to me because it doesn&apos;t say anything about when we should be dumping the stats.  So, I&apos;ll leave this out for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758696</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-10 15:42:49 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #3)
&gt; Comment on attachment 428210 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428210&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:10
&gt; &gt; +        2. Call $vm.dumpLinkBufferStats() from your JS script.
&gt; 
&gt; maybe have it return a string?

I&apos;ll change $vm.dumpLinkBufferStats() to $vm.linkBufferStats() and have it return the stats as a string instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758703</commentid>
    <comment_count>6</comment_count>
      <attachid>428215</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-10 16:09:46 -0700</bug_when>
    <thetext>Created attachment 428215
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758704</commentid>
    <comment_count>7</comment_count>
      <attachid>428216</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-10 16:13:45 -0700</bug_when>
    <thetext>Created attachment 428216
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758708</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-10 16:22:20 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r277305: &lt;http://trac.webkit.org/r277305&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758709</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-10 16:23:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/77794461&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428210</attachid>
            <date>2021-05-10 15:05:01 -0700</date>
            <delta_ts>2021-05-10 16:09:46 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-225617.patch</filename>
            <type>text/plain</type>
            <size>59438</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3Mjk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMCBA
QAorMjAyMS0wNS0xMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIHN1cHBvcnQgdG8gY29sbGVjdCBzdGF0cyBvbiBjdW11bGF0aXZlIExpbmtCdWZmZXIgbGlu
a2VkIHNpemVzIGJhc2VkIG9uIHByb2ZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NjE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIDIgd2F5cyB0byBkdW1wIHRoZSBzdGF0czoK
KyAgICAgICAgMS4gU3BlY2lmeSAtLWR1bXBMaW5rQnVmZmVyU3RhdHMgYXMgYW4gYXJndW1lbnQg
dG8gdGhlIGpzYyBzaGVsbC4KKyAgICAgICAgMi4gQ2FsbCAkdm0uZHVtcExpbmtCdWZmZXJTdGF0
cygpIGZyb20geW91ciBKUyBzY3JpcHQuCisKKyAgICAgICAgSGVyZSdzIGFuIGV4YW1wbGUgb2Yg
d2hhdCB0aGUgZHVtcCBsb29rcyBsaWtlOgorCisgICAgICAgICAgICBDdW1tdWxhdGl2ZSBMaW5r
QnVmZmVyIHByb2ZpbGUgc2l6ZXM6CisgICAgICAgICAgICAgICAgICAgICAgIEJhc2VsaW5lSklU
OiA3OTQ4MDMyMCAoNzUuNzk4MzQwIE1CKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERGRzogMzYxMDg2NzIgKDM0LjQzNTkxMyBNQikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVGh1bms6IDIyNDk1MzYwICgyMS40NTMyNDcgTUIpCisgICAgICAgICAgICAgICAgICAgICAg
IElubGluZUNhY2hlOiAxOTUzODUyMSAoMTguNjMzMzg2IE1CKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZUTDogNTE4NjI0MCAoNC45NDU5ODQgTUIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXYXNtOiAxOTk4MjcyICgxLjkwNTcwMSBNQikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFlhcnJKSVQ6IDEzMzEwNzIgKDEuMjY5NDA5IE1CKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENTU0pJVDogMAorICAgICAgICAgICAgICAgICAgICAgVW5jYXRlZ29y
aXplZDogMAorCisgICAgICAgIFRoZSBzdGF0cyBhcmUgY3VycmVudGx5IGdyb3VwZWQgaW50byBz
b21lIGNvYXJzZSBwcm9maWxlcy4gIElmIG5lZWRlZCwgd2UgY2FuCisgICAgICAgIGJyZWFrIHRo
ZXNlIGRvd24gaW50byBtb3JlIGZpbmUgZ3JhaW4gcHJvZmlsZXMgbGF0ZXIuCisKKyAgICAgICAg
KiBhc3NlbWJsZXIvTGlua0J1ZmZlci5jcHA6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OnBl
cmZvcm1GaW5hbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpkdW1wUHJvZmls
ZVN0YXRpc3RpY3MpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAg
IChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OmxpbmtDb2RlSW5saW5lKToKKyAgICAgICAgKEpT
Qzo6SW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpy
ZWdlbmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAg
KiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFeGl0R2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFbnRyeVRodW5rR2VuZXJh
dG9yKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExhenlTbG93UGF0aC5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6TGF6eVNsb3dQYXRoOjpnZW5lcmF0ZSk6CisgICAgICAgICogZnRsL0ZUTExpbmsu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0
Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAg
KiBmdGwvRlRMVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpnZW5lcmljR2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpzbG93UGF0aENhbGxUaHVua0dl
bmVyYXRvcik6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpqaXRXcml0ZVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlV2l0aG91dExpbmtpbmcpOgorICAgICAgICAqIGpp
dC9KSVRNYXRoSUMuaDoKKyAgICAgICAgKEpTQzo6SklUTWF0aElDOjpnZW5lcmF0ZU91dE9mTGlu
ZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQ
cm9wZXJ0eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKiBqaXQv
UmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OmZpbmFsaXplKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoK
KyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Omxp
bmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxU
aHVua0Zvcik6CisgICAgICAgIChKU0M6Om5hdGl2ZUZvckdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OmFyaXR5Rml4dXBHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjp1bnJlYWNoYWJsZUdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OnN0cmluZ0dldEJ5VmFsR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6Ym91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3IpOgorICAgICAgICAqIGpzYy5jcHA6Cisg
ICAgICAgIChDb21tYW5kTGluZTo6cGFyc2VBcmd1bWVudHMpOgorICAgICAgICAoanNjbWFpbik6
CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6
Z2VuZXJhdGVUaHVua1dpdGhKdW1wVG8pOgorICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJhdGVU
aHVua1dpdGhKdW1wVG9Qcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmF0ZVRo
dW5rV2l0aEp1bXBUb0xMSW50UmV0dXJuUG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0
SG9zdENhbGxSZXR1cm5WYWx1ZVRodW5rKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmNyZWF0ZUpT
R2F0ZVRodW5rKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmNyZWF0ZVdhc21HYXRlVGh1bmspOgor
ICAgICAgICAoSlNDOjpMTEludDo6Y3JlYXRlVGFpbENhbGxHYXRlKToKKyAgICAgICAgKEpTQzo6
TExJbnQ6Omxvb3BPU1JFbnRyeUdhdGVUaHVuayk6CisgICAgICAgIChKU0M6OkxMSW50OjplbnRy
eU9TUkVudHJ5R2F0ZVRodW5rKToKKyAgICAgICAgKEpTQzo6TExJbnQ6Ondhc21PU1JFbnRyeUdh
dGVUaHVuayk6CisgICAgICAgIChKU0M6OkxMSW50OjpleGNlcHRpb25IYW5kbGVyR2F0ZVRodW5r
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnJldHVybkZyb21MTEludEdhdGVUaHVuayk6CisgICAg
ICAgIChKU0M6OkxMSW50Ojp0YWdHYXRlVGh1bmspOgorICAgICAgICAoSlNDOjpMTEludDo6dW50
YWdHYXRlVGh1bmspOgorICAgICAgICAoSlNDOjpMTEludDo6aml0Q2FnZVB0clRodW5rKToKKyAg
ICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjp3b3JrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6ZGlkQ29tcGxldGVD
b21waWxhdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtQmluZGluZy5jcHA6CisgICAgICAgIChK
U0M6Oldhc206Ondhc21Ub1dhc20pOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50UGxhbi5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkxMSW50UGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbik6
CisgICAgICAgICogd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6T01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21P
TUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAgICAg
ICogd2FzbS9XYXNtVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dGhyb3dFeGNlcHRp
b25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6dGhyb3dTdGFj
a092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRy
aWdnZXJPTUdFbnRyeVRpZXJVcFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiB3YXNtL2pzL1dh
c21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5
RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQu
Y3BwOgorCiAyMDIxLTA1LTA4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZW1vdmUgY2FsbHMgdG8gdGhlIFN0cmluZzo6dG9JbnQgZmFtaWx5IG9mIGZ1bmN0aW9u
cyBmcm9tIEphdmFTY3JpcHRDb3JlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24g
Mjc3Mjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzMSw2ICs0MzEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX3RyZWF0V2F0Y2hkb2dFeGNl
cHRpb25Bc1N1Y2Nlc3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9hbHdheXNEdW1wVW5jYXVnaHRF
eGNlcHRpb24geyBmYWxzZSB9OwogICAgIGJvb2wgbV9kdW1wTWVtb3J5Rm9vdHByaW50IHsgZmFs
c2UgfTsKKyAgICBib29sIG1fZHVtcExpbmtCdWZmZXJTdGF0cyB7IGZhbHNlIH07CiAgICAgYm9v
bCBtX2R1bXBTYW1wbGluZ1Byb2ZpbGVyRGF0YSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2VuYWJs
ZVJlbW90ZURlYnVnZ2luZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2NhbkJsb2NrSXNGYWxzZSB7
IGZhbHNlIH07CkBAIC0zMzYwLDYgKzMzNjEsMTEgQEAgdm9pZCBDb21tYW5kTGluZTo6cGFyc2VB
cmd1bWVudHMoaW50IGFyZwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAorICAg
ICAgICBpZiAoIXN0cmNtcChhcmcsICItLWR1bXBMaW5rQnVmZmVyU3RhdHMiKSkgeworICAgICAg
ICAgICAgbV9kdW1wTGlua0J1ZmZlclN0YXRzID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGV4Y2VwdGlvblN0
ckxlbmd0aCA9IHN0cmxlbigiLS1leGNlcHRpb249Iik7CiAgICAgICAgIGlmICghc3RybmNtcChh
cmcsICItLWV4Y2VwdGlvbj0iLCBleGNlcHRpb25TdHJMZW5ndGgpKSB7CiAgICAgICAgICAgICBt
X3VuY2F1Z2h0RXhjZXB0aW9uTmFtZSA9IFN0cmluZyhhcmcgKyBleGNlcHRpb25TdHJMZW5ndGgp
OwpAQCAtMzYyMCw2ICszNjI2LDkgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQogICAgICAgICBwcmludGYoIk1lbW9yeSBGb290cHJpbnQ6XG4gICAgQ3VycmVudCBGb290cHJp
bnQ6ICUiIFBSSXU2NCAiXG4gICAgUGVhayBGb290cHJpbnQ6ICUiIFBSSXU2NCAiXG4iLCBmb290
cHJpbnQuY3VycmVudCwgZm9vdHByaW50LnBlYWspOwogICAgIH0KIAorICAgIGlmIChtYWluQ29t
bWFuZExpbmUtPm1fZHVtcExpbmtCdWZmZXJTdGF0cykKKyAgICAgICAgTGlua0J1ZmZlcjo6ZHVt
cFByb2ZpbGVTdGF0aXN0aWNzKCk7CisKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlz
aW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw2ICs0MCw4IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitzaXplX3QgTGlua0J1ZmZlcjo6c19wcm9maWxlQ3VtbXVsYXRpdmVMaW5rZWRTaXplc1tM
aW5rQnVmZmVyOjpudW1iZXJPZlByb2ZpbGVzXTsKKwogYm9vbCBzaG91bGREdW1wRGlzYXNzZW1i
bHlGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1
bXBERkdEaXNhc3NlbWJseSgpKQpAQCAtNDc3LDYgKzQ3OSw3IEBAIHZvaWQgTGlua0J1ZmZlcjo6
cGVyZm9ybUZpbmFsaXphdGlvbigpCiAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwogI2VuZGlmCiAg
ICAgCisgICAgc19wcm9maWxlQ3VtbXVsYXRpdmVMaW5rZWRTaXplc1tzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9wcm9maWxlKV0gKz0gbV9zaXplOwogICAgIE1hY3JvQXNzZW1ibGVyOjpjYWNoZUZs
dXNoKGNvZGUoKSwgbV9zaXplKTsKIH0KIApAQCAtNTI3LDYgKzUzMCw1OCBAQCB2b2lkIExpbmtC
dWZmZXI6OmR1bXBDb2RlKHZvaWQqIGNvZGUsIHNpCiB9CiAjZW5kaWYKIAordm9pZCBMaW5rQnVm
ZmVyOjpkdW1wUHJvZmlsZVN0YXRpc3RpY3MoKQoreworICAgIHN0cnVjdCBTdGF0IHsKKyAgICAg
ICAgUHJvZmlsZSBwcm9maWxlOworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICB9OworCisgICAg
U3RhdCBzb3J0ZWRTdGF0c1tudW1iZXJPZlByb2ZpbGVzXTsKKworI2RlZmluZSBSRVRVUk5fTElO
S0JVRkZFUl9QUk9GSUxFX05BTUUobmFtZSkgY2FzZSBQcm9maWxlOjpuYW1lOiByZXR1cm4gI25h
bWU7CisgICAgYXV0byBuYW1lID0gW10gKFByb2ZpbGUgcHJvZmlsZSkgLT4gY29uc3QgY2hhciog
eworICAgICAgICBzd2l0Y2ggKHByb2ZpbGUpIHsKKyAgICAgICAgICAgIEZPUl9FQUNIX0xJTktC
VUZGRVJfUFJPRklMRShSRVRVUk5fTElOS0JVRkZFUl9QUk9GSUxFX05BTUUpCisgICAgICAgIH0K
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OworI3VuZGVmIFJF
VFVSTl9MSU5LQlVGRkVSX1BST0ZJTEVfTkFNRQorCisgICAgYXV0byBkdW1wU3RhdCA9IFsmXSAo
Y29uc3QgU3RhdCYgc3RhdCkgeworICAgICAgICBjaGFyIGZvcm1hdHRlZE5hbWVbMjFdOworICAg
ICAgICBzbnByaW50Zihmb3JtYXR0ZWROYW1lLCAyMCwgIiUyMHMiLCBuYW1lKHN0YXQucHJvZmls
ZSkpOworCisgICAgICAgIGNvbnN0IGNoYXIqIGxhcmdlclVuaXQgPSBudWxscHRyOworICAgICAg
ICBkb3VibGUgc2l6ZUluTGFyZ2VyVW5pdCA9IHN0YXQuc2l6ZTsKKyAgICAgICAgaWYgKHN0YXQu
c2l6ZSA+IDEgKiBNQikgeworICAgICAgICAgICAgbGFyZ2VyVW5pdCA9ICJNQiI7CisgICAgICAg
ICAgICBzaXplSW5MYXJnZXJVbml0ID0gc2l6ZUluTGFyZ2VyVW5pdCAvIE1COworICAgICAgICB9
IGVsc2UgaWYgKHN0YXQuc2l6ZSA+IDEgKiBLQikgeworICAgICAgICAgICAgbGFyZ2VyVW5pdCA9
ICJLQiI7CisgICAgICAgICAgICBzaXplSW5MYXJnZXJVbml0ID0gc2l6ZUluTGFyZ2VyVW5pdCAv
IEtCOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxhcmdlclVuaXQpCisgICAgICAgICAgICBk
YXRhTG9nTG4oIiAgIiwgZm9ybWF0dGVkTmFtZSwgIjogIiwgc3RhdC5zaXplLCAiICgiLCBzaXpl
SW5MYXJnZXJVbml0LCAiICIsIGxhcmdlclVuaXQsICIpIik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGRhdGFMb2dMbigiICAiLCBmb3JtYXR0ZWROYW1lLCAiOiAiLCBzdGF0LnNpemUpOwor
ICAgIH07CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZQcm9maWxlczsg
KytpKSB7CisgICAgICAgIHNvcnRlZFN0YXRzW2ldLnByb2ZpbGUgPSBzdGF0aWNfY2FzdDxQcm9m
aWxlPihpKTsKKyAgICAgICAgc29ydGVkU3RhdHNbaV0uc2l6ZSA9IHNfcHJvZmlsZUN1bW11bGF0
aXZlTGlua2VkU2l6ZXNbaV07CisgICAgfQorICAgIHN0ZDo6c29ydCgmc29ydGVkU3RhdHNbMF0s
ICZzb3J0ZWRTdGF0c1tudW1iZXJPZlByb2ZpbGVzXSwKKyAgICAgICAgW10gKFN0YXQmIGEsIFN0
YXQmIGIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIGEuc2l6ZSA+IGIuc2l6ZTsKKyAg
ICAgICAgfSk7CisKKyAgICBkYXRhTG9nTG4oIkN1bW11bGF0aXZlIExpbmtCdWZmZXIgcHJvZmls
ZSBzaXplczoiKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZQcm9maWxl
czsgKytpKQorICAgICAgICBkdW1wU3RhdChzb3J0ZWRTdGF0c1tpXSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyNzcyODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTgzLDI0ICs4Myw0OCBAQCBjbGFzcyBMaW5rQnVmZmVyIHsKICNlbmRpZgog
CiBwdWJsaWM6Ci0gICAgTGlua0J1ZmZlcihNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIs
IHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkKQorCisjZGVmaW5lIEZPUl9FQUNIX0xJTktCVUZGRVJfUFJPRklMRSh2
KSBcCisgICAgdihCYXNlbGluZUpJVCkgXAorICAgIHYoREZHKSBcCisgICAgdihGVEwpIFwKKyAg
ICB2KElubGluZUNhY2hlKSBcCisgICAgdihUaHVuaykgXAorICAgIHYoV2FzbSkgXAorICAgIHYo
WWFyckpJVCkgXAorICAgIHYoQ1NTSklUKSBcCisgICAgdihVbmNhdGVnb3JpemVkKQorCisjZGVm
aW5lIERFQ0xBUkVfTElOS0JVRkZFUl9QUk9GSUxFKG5hbWUpIG5hbWUsCisgICAgZW51bSBjbGFz
cyBQcm9maWxlIHsKKyAgICAgICAgRk9SX0VBQ0hfTElOS0JVRkZFUl9QUk9GSUxFKERFQ0xBUkVf
TElOS0JVRkZFUl9QUk9GSUxFKQorICAgIH07CisjdW5kZWYgREVDTEFSRV9MSU5LQlVGRkVSX1BS
T0ZJTEUKKworI2RlZmluZSBDT1VOVF9MSU5LQlVGRkVSX1BST0ZJTEUobmFtZSkgKyAxCisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlByb2ZpbGVzID0gRk9SX0VBQ0hfTElO
S0JVRkZFUl9QUk9GSUxFKENPVU5UX0xJTktCVUZGRVJfUFJPRklMRSk7CisjdW5kZWYgQ09VTlRf
TElOS0JVRkZFUl9QUk9GSUxFCisKKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBtYWNy
b0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIFByb2ZpbGUgcHJvZmlsZSA9IFByb2ZpbGU6OlVu
Y2F0ZWdvcml6ZWQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9u
TXVzdFN1Y2NlZWQpCiAgICAgICAgIDogbV9zaXplKDApCiAgICAgICAgICwgbV9kaWRBbGxvY2F0
ZShmYWxzZSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCiAj
ZW5kaWYKKyAgICAgICAgLCBtX3Byb2ZpbGUocHJvZmlsZSkKICAgICB7CiAgICAgICAgIFVOVVNF
RF9QQVJBTShvd25lclVJRCk7CiAgICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCBlZmZv
cnQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgTGlua0J1ZmZlcihN
YWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+
IGNvZGUsIHNpemVfdCBzaXplLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBKSVRDb21w
aWxhdGlvbk11c3RTdWNjZWVkLCBib29sIHNob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0aW9uID0g
dHJ1ZSkKKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gY29kZSwgc2l6ZV90IHNpemUsIFByb2ZpbGUgcHJvZmls
ZSA9IFByb2ZpbGU6OlVuY2F0ZWdvcml6ZWQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCA9
IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGJvb2wgc2hvdWxkUGVyZm9ybUJyYW5jaENvbXBh
Y3Rpb24gPSB0cnVlKQogICAgICAgICA6IG1fc2l6ZShzaXplKQogICAgICAgICAsIG1fZGlkQWxs
b2NhdGUoZmFsc2UpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fY29tcGxldGVkKGZhbHNl
KQogI2VuZGlmCisgICAgICAgICwgbV9wcm9maWxlKHByb2ZpbGUpCiAgICAgICAgICwgbV9jb2Rl
KGNvZGUudGVtcGxhdGUgcmV0YWdnZWQ8TGlua0J1ZmZlclB0clRhZz4oKSkKICAgICB7CiAjaWYg
RU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQpAQCAtMjk4LDYgKzMyMiw4IEBAIHB1YmxpYzoKICAg
ICBib29sIHdhc0FscmVhZHlEaXNhc3NlbWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FscmVhZHlE
aXNhc3NlbWJsZWQ7IH0KICAgICB2b2lkIGRpZEFscmVhZHlEaXNhc3NlbWJsZSgpIHsgbV9hbHJl
YWR5RGlzYXNzZW1ibGVkID0gdHJ1ZTsgfQogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgZHVtcFByb2ZpbGVTdGF0aXN0aWNzKCk7CisKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgQ29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBmaW5hbGl6ZUNvZGVXaXRob3V0RGlz
YXNzZW1ibHlJbXBsKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZVJlZjxMaW5rQnVmZmVy
UHRyVGFnPiBmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXBsKGJvb2wgZHVtcERpc2Fzc2Vt
Ymx5LCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMywgNCk7
CkBAIC0zNTUsNyArMzgxLDcgQEAgcHJpdmF0ZToKICNpZiBEVU1QX0NPREUKICAgICBzdGF0aWMg
dm9pZCBkdW1wQ29kZSh2b2lkKiBjb2RlLCBzaXplX3QpOwogI2VuZGlmCi0gICAgCisKICAgICBS
ZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwogICAgIHNp
emVfdCBtX3NpemU7CiAjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQpAQCAtMzczLDggKzM5
OSwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0p1bXBJc2xhbmQgeyBmYWxzZSB9OwogI2Vu
ZGlmCiAgICAgYm9vbCBtX2FscmVhZHlEaXNhc3NlbWJsZWQgeyBmYWxzZSB9OworICAgIFByb2Zp
bGUgbV9wcm9maWxlIHsgUHJvZmlsZTo6VW5jYXRlZ29yaXplZCB9OwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPiBtX2NvZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rhc2tzOworCisgICAgc3RhdGlj
IHNpemVfdCBzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZFNpemVzW251bWJlck9mUHJvZmlsZXNd
OwogfTsKIAogI2lmIE9TKExJTlVYKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTU0LDcgKzE1NCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgbGlua0NvZGVJbmxp
bmUKIHsKICAgICBpZiAoaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgPD0gc3R1
YkluZm8uaW5saW5lU2l6ZSgpKSB7CiAgICAgICAgIGJvb2wgbmVlZHNCcmFuY2hDb21wYWN0aW9u
ID0gdHJ1ZTsKLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1YkluZm8uc3Rh
cnQsIHN0dWJJbmZvLmlubGluZVNpemUoKSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbmVl
ZHNCcmFuY2hDb21wYWN0aW9uKTsKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwg
c3R1YkluZm8uc3RhcnQsIHN0dWJJbmZvLmlubGluZVNpemUoKSwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29t
cGFjdGlvbik7CiAgICAgICAgIEFTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7CiAgICAgICAg
IGZ1bmN0aW9uKGxpbmtCdWZmZXIpOwogICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
IE5vUHRyVGFnLCAiSW5saW5lQWNjZXNzVHlwZTogJyVzJyIsIG5hbWUpOwpAQCAtMzg3LDcgKzM4
Nyw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKFN0cnUKIAogICAgIC8v
IFdlIGRvbid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBq
dW1waW5nIGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICBib29sIG5lZWRzQnJhbmNoQ29t
cGFjdGlvbiA9IGZhbHNlOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJJbmZv
LnN0YXJ0LCBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgSklUQ29tcGlsYXRp
b25NdXN0U3VjY2VlZCwgbmVlZHNCcmFuY2hDb21wYWN0aW9uKTsKKyAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoaml0LCBzdHViSW5mby5zdGFydCwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNv
ZGVTaXplKCksIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlLCBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOwogICAgIFJFTEVBU0VfQVNTRVJU
KGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgdGFyZ2V0
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MzQsNyArNzM0LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzcwog
ICAgICAgICBjYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmcgPSBzdGF0ZS5jYWxsU2l0
ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmcoKTsKICAgICB9CiAKLSAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJ
bmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAobGlua0J1ZmZlci5k
aWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIGlmIChQb2x5bW9ycGhpY0FjY2Vzc0ludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiRGlkIGZhaWwgdG8gYWxsb2NhdGUu
XG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGUoKQogICAgIG1fc3BlY3VsYXRpdmUtPmNyZWF0ZU9TUkVudHJpZXMo
KTsKICAgICBzZXRFbmRPZkNvZGUoKTsKIAotICAgIGF1dG8gbGlua0J1ZmZlciA9IG1ha2VVbmlx
dWU8TGlua0J1ZmZlcj4oKnRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwp
OworICAgIGF1dG8gbGlua0J1ZmZlciA9IG1ha2VVbmlxdWU8TGlua0J1ZmZlcj4oKnRoaXMsIG1f
Y29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpERkcsIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CiAgICAgaWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAg
bV9ncmFwaC5tX3BsYW4uc2V0RmluYWxpemVyKG1ha2VVbmlxdWU8RmFpbGVkRmluYWxpemVyPiht
X2dyYXBoLm1fcGxhbikpOwogICAgICAgICByZXR1cm47CkBAIC00OTEsNyArNDkxLDcgQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICBzZXRFbmRPZkNvZGUoKTsKIAog
ICAgIC8vID09PSBMaW5rID09PQotICAgIGF1dG8gbGlua0J1ZmZlciA9IG1ha2VVbmlxdWU8TGlu
a0J1ZmZlcj4oKnRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAg
IGF1dG8gbGlua0J1ZmZlciA9IG1ha2VVbmlxdWU8TGlua0J1ZmZlcj4oKnRoaXMsIG1fY29kZUJs
b2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpERkcsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAg
ICAgaWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbV9ncmFw
aC5tX3BsYW4uc2V0RmluYWxpemVyKG1ha2VVbmlxdWU8RmFpbGVkRmluYWxpemVyPihtX2dyYXBo
Lm1fcGxhbikpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDMsNyArMjAzLDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBpbAogCiAgICAgICAgIE9T
UkV4aXQ6OmNvbXBpbGVFeGl0KGppdCwgdm0sIGV4aXQsIG9wZXJhbmRzLCByZWNvdmVyeSk7CiAK
LSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7CisgICAgICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBjb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2Zp
bGU6OlRodW5rKTsKICAgICAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKAogICAg
ICAgICAgICAgc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigp
IHx8IE9wdGlvbnM6OnZlcmJvc2VERkdPU1JFeGl0KCksCiAgICAgICAgICAgICBwYXRjaEJ1ZmZl
ciwgT1NSRXhpdFB0clRhZywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1
bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5jcHAJKHJldmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDcgKzg5LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcwogCiAgICAgaml0LmZhckp1bXAoTWFjcm9Bc3Nl
bWJsZXI6OkFic29sdXRlQWRkcmVzcygmdm0ub3NyRXhpdEp1bXBEZXN0aW5hdGlvbiksIE9TUkV4
aXRQdHJUYWcpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVO
S19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmso
ZnVuY3Rpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNvbXBp
bGVPU1JFeGl0KSk7CiAKQEAgLTEzNCw3ICsxMzQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IG9zCiAKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkRGRyBPU1IgZW50cnkg
dGh1bmsiKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENv
bXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQgY29tcGls
ZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIpKTsKICAgICAgICAgfSk7CiAKLSAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29k
ZUxpbmtCdWZmZXIgPSBtYWtlVW5pcXVlPExpbmtCdWZmZXI+KGppdCwgY29kZUJsb2NrLCBKSVRD
b21waWxhdGlvbkNhbkZhaWwpOworICAgIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZl
ciA9IG1ha2VVbmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxvY2ssIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OkZUTCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKIAogICAgIGlmIChzdGF0ZS5maW5h
bGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAg
c3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgTGF6eVNsb3dQYXRoOjpnZW5lcmF0ZShDb2RlQmxvY2sq
IGMKIAogICAgIG1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOwogCi0gICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsK
KyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OkZUTCwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CiAgICAgbGlua0J1ZmZlci5s
aW5rKHBhcmFtcy5kb25lSnVtcHMsIG1fZG9uZSk7CiAgICAgaWYgKG1fZXhjZXB0aW9uVGFyZ2V0
KQogICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0aW9uSnVtcHMsIG1fZXhjZXB0aW9uVGFy
Z2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24g
Mjc3Mjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAg
ICAgICAgICBqaXQudW50YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAgICAgICAgICBtYWluUGF0aEp1
bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgbGlua0J1ZmZlciA9IG1ha2VV
bmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
CisgICAgICAgICAgICBsaW5rQnVmZmVyID0gbWFrZVVuaXF1ZTxMaW5rQnVmZmVyPihqaXQsIGNv
ZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RlRMLCBKSVRDb21waWxhdGlvbkNhbkZhaWwp
OwogICAgICAgICAgICAgaWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAg
ICAgICAgICAgICAgICBzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CkBAIC0xOTMsNyArMTkzLDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkK
ICAgICAgICAgaml0LnVudGFnUmV0dXJuQWRkcmVzcygpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgbWFpblBhdGhKdW1wID0gaml0Lmp1bXAoKTsKICAgICAgICAgCi0gICAgICAgIGxpbmtC
dWZmZXIgPSBtYWtlVW5pcXVlPExpbmtCdWZmZXI+KGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOworICAgICAgICBsaW5rQnVmZmVyID0gbWFrZVVuaXF1ZTxMaW5rQnVmZmVy
PihqaXQsIGNvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RlRMLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOwogICAgICAgICBpZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkg
ewogICAgICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MDYsNyAr
NTA2LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogICAgIHJl
aWZ5SW5saW5lZENhbGxGcmFtZXMoaml0LCBleGl0KTsKICAgICBhZGp1c3RBbmRKdW1wVG9UYXJn
ZXQodm0sIGppdCwgZXhpdCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IGNvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIGNvZGVCbG9jaywg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIGV4aXQubV9jb2RlID0gRklOQUxJWkVf
Q09ERV9JRigKICAgICAgICAgc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6dmVy
Ym9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VGVExPU1JFeGl0KCksCiAgICAgICAgIHBhdGNo
QnVmZmVyLCBPU1JFeGl0UHRyVGFnLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VGh1bmtzLmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI0LDcgKzEyNCw3IEBAIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHIKICNlbmRpZgogICAgIGppdC5yZXQo
KTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmdW5jdGlvbkNh
bGwsIGdlbmVyYXRpb25GdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIiVzIiwg
bmFtZSk7CiB9CkBAIC0yMzEsNyArMjMxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbAogICAgIAogICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIGtleS5jYWxsVGFyZ2V0KCkpOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkZUTCBzbG93IHBhdGgg
Y2FsbCB0aHVuayBmb3IgJXMiLCB0b0NTdHJpbmcoa2V5KS5kYXRhKCkpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShy
ZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNyArMjMzLDcgQEAgc3RhdGljIEFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUgogICAgIGppdC5yZXQoKTsKIAogICAgIGF1
dG8gc3R1YkJhc2VDb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJU
YWc+KHRhZ0NvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4oc3R1YkJhc2UpKTsKLSAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoaml0LCBzdHViQmFzZUNvZGVQdHIsIHN0dWJTaXplKTsKKyAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoaml0LCBzdHViQmFzZUNvZGVQdHIsIHN0dWJTaXplLCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgLy8gV2UgZG9uJ3QgdXNlIEZJTkFMSVpFX0NPREUo
KSBmb3IgdHdvIHJlYXNvbnMuCiAgICAgLy8gVGhlIGZpcnN0IGlzIHRoYXQgd2UgZG9uJ3Qgd2Fu
dCB0aGUgd3JpdGVhYmxlIGFkZHJlc3MsIGFzIGRpc2Fzc2VtYmxlZCBpbnN0cnVjdGlvbnMsCiAg
ICAgLy8gdG8gYXBwZWFyIGluIHRoZSBjb25zb2xlIG9yIGFueXdoZXJlIGluIG1lbW9yeSwgdmlh
IHRoZSBQcmludFN0cmVhbSBidWZmZXIuCkBAIC02NDQsNyArNjQ0LDcgQEAgcHJpdmF0ZToKIAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKICAgICAgICAgICAgICAgICBhdXRv
IGp1bXAgPSBqaXQuanVtcCgpOwotICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cihqaXQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4oY3VycmVudElzbGFuZCksIGlz
bGFuZFNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPE5vUHRyVGFnPihjdXJyZW50SXNsYW5kKSwgaXNsYW5kU2l6ZUluQnl0ZXMsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBmYWxzZSk7CiAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOwogCiAg
ICAgICAgICAgICAgICAgLy8gV2UgdXNlIHRoaXMgdG8gYXBwZWFzZSB0aGUgYXNzZXJ0aW9uIHRo
YXQgd2UncmUgbm90IGZpbmFsaXppbmcgb24gYSBjb21waWxlciB0aHJlYWQuIEluIHRoaXMgc2l0
dWF0aW9uLCBpdCdzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAy
NzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg0Miw3ICs4NDIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJ
VENvbXBpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVm
ZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBt
X2NvZGVCbG9jaywgZWZmb3J0KSk7CisgICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRy
PExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOwogCiAgICAgTW9ub3RvbmljVGltZSBh
ZnRlciB7IH07CiAgICAgaWYgKFVOTElLRUxZKGNvbXB1dGVDb21waWxlVGltZXMoKSkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkocmV2aXNpb24gMjc3Mjg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTI4LDcgKzEyOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQg
YSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5nIGludG8gdGhl
IG1pZGRsZSBvZiBhbiBJQy4KICAgICAgICAgICAgIGJvb2wgbmVlZHNCcmFuY2hDb21wYWN0aW9u
ID0gZmFsc2U7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXQubV9hc3NlbWJsZXIuYnVm
ZmVyKCkuY29kZVNpemUoKSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KE1hY3JvQXNzZW1ibGVyOjpk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIobV9pbmxpbmVTdGFydCwgbV9pbmxpbmVFbmQpKSk7Ci0g
ICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBtX2lubGluZVN0YXJ0LCBqaXQu
bV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2Vl
ZCwgbmVlZHNCcmFuY2hDb21wYWN0aW9uKTsKKyAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcihqaXQsIG1faW5saW5lU3RhcnQsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6
ZSgpLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25NdXN0
U3VjY2VlZCwgbmVlZHNCcmFuY2hDb21wYWN0aW9uKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhq
dW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4obV9jb2RlLmNvZGUo
KSkpOwogICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIkpJ
VE1hdGhJQzogbGlua2luZyBjb25zdGFudCBqdW1wIHRvIG91dCBvZiBsaW5lIHN0dWIiKTsKQEAg
LTE1Niw3ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkSW5saW5l
KSB7CiAgICAgICAgICAgICAgICAgYXV0byBqdW1wVG9Eb25lID0gaml0Lmp1bXAoKTsKIAotICAg
ICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
aml0LCBjb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAgICAgICAgIGlmICghbGlua0J1ZmZlci5kaWRGYWls
VG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhnZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcywgc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRG9uZSwgZG9uZUxvY2F0aW9u
KCkpOwpAQCAtMTk2LDcgKzE5Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICBlbmRKdW1wTGlzdC5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICAgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKKyAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9j
aywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CiAgICAgICAgICAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg3
LDcgKzExODcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jayk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OklubGluZUNhY2hlKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUs
IGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzMyw3ICsx
NDMzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDAp
OwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBt
X2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwogICAgIAogICAg
IHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHJldmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTc5LDcgKzE1NzksNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDCiAgICAgCiAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2Rl
QmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhi
YWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKICAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7CiAgICAgcGF0Y2hCdWZmZXIu
bGluayhkb25lLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwpAQCAtMTYxOCw3ICsxNjE4LDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaQogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgZ2VuID0gZW1pdFB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKGJ5dGVjb2RlLCBw
cm9wZXJ0eU5hbWUsIGRvbmVDYXNlcywgc2xvd0Nhc2VzKTsKIAogICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRo
aXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7CiAgICAg
cGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwog
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZUNhc2VzLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwog
ICAgIGlmICghbV9leGNlcHRpb25DaGVja3MuZW1wdHkoKSkKQEAgLTE2NTYsNyArMTY1Niw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2gKICAgICBKSVRQdXRCeUlk
R2VuZXJhdG9yIGdlbiA9IGVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChieXRlY29kZSwgcHV0S2lu
ZCwgcHJvcGVydHlOYW1lLCBkb25lQ2FzZXMsIHNsb3dDYXNlcyk7CiAKICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwog
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVDYXNlcywgYnlWYWxJbmZvLT5kb25lVGFyZ2V0
KTsKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTg1LDcgKzE1
ODUsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqCiAgICAgc3R1
YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CiAg
ICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKICAgICAgICAg
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihzdHViSml0LCBvd25lciwgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJKaXQsIG93bmVyLCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsK
ICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICBsaW5r
VmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtK
SVQuaAkocmV2aXNpb24gMjc3Mjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVj
aWFsaXplZFRodW5rSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTUsNyArMTU1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGZpbmFsaXplKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRh
Zz4gZmFsbGJhY2ssIGNvbnN0IGNoYXIqIHRodW5rS2luZCkKICAgICAgICAgewotICAgICAgICAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAg
ICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlu
a0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayht
X2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oZmFsbGJhY2spKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxzLnNpemUoKTsgaSsr
KQogICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5maXJzdCwgbV9j
YWxsc1tpXS5zZWNvbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsNyArNzUs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRoCiAgICAgaml0LmNh
bGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBqaXQuanVtcFRv
RXhjZXB0aW9uSGFuZGxlcih2bSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiVGhyb3cgZXhjZXB0aW9uIGZy
b20gY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIApAQCAtMTQ1LDcgKzE0NSw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGkKIAogICAgIHNsb3dQYXRoRm9yKGpp
dCwgdm0sIG9wZXJhdGlvbkxpbmtDYWxsKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJMaW5rIGNhbGwgc2xv
dyBwYXRoIHRodW5rIik7CiB9CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpCiAKICAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVy
YXRpb25MaW5rUG9seW1vcnBoaWNDYWxsKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJMaW5rIHBvbHltb3Jw
aGljIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CiB9CiAKQEAgLTIzNSw3ICsyMzUsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUCiAgICAgLy8gSGVyZSB3ZSBkb24n
dCBrbm93IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRoLgogICAgIHNs
b3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvblZpcnR1YWxDYWxsKTsKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpJVFN0
dWJSb3V0aW5lUHRyVGFnLAogICAgICAgICAiVmlydHVhbCAlcyBzbG93IHBhdGggdGh1bmsiLApA
QCAtMzU3LDcgKzM1Nyw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHIKIAogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcs
ICIlcyAlcyVzIHRyYW1wb2xpbmUiLCB0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0aW9u
VHlwZTo6SlNGdW5jdGlvbiA/ICJuYXRpdmUiIDogImludGVybmFsIiwgZW50cnlUeXBlID09IEVu
dGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MgPyAiVGFpbCBXaXRoIFNhdmVkIFRhZ3MgIiA6IGVudHJ5
VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzID8gIlRhaWwgV2l0aG91dCBTYXZl
ZCBUYWdzICIgOiAiIiwgdG9DU3RyaW5nKGtpbmQpLmRhdGEoKSk7CiB9CiAKQEAgLTUzNiw3ICs1
MzYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyCiAgICAgaml0
LnJldCgpOwogI2VuZGlmIC8vIEVuZCBvZiBVU0UoSlNWQUxVRTMyXzY0KSBzZWN0aW9uLgogCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgImZpeHVwIGFyaXR5Iik7CiB9CiAKQEAgLTU0Niw3ICs1NDYsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHVuCiAKICAgICBqaXQuYnJlYWtwb2lu
dCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgInVucmVhY2hhYmxlIHRodW5rIik7CiB9CiAKQEAgLTU5Nyw3
ICs1OTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0CiAgICAg
aml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigwKSwgc3RyaW5nR1BSKTsKICAg
ICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpOwog
fQogCkBAIC0xMjc0LDcgKzEyNzQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGJvCiAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgp
OwogICAgIAotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7
CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2Fs
bFdpdGhvdXRTYXZlZFRhZ3Modm0pKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCiAgICAg
ICAgIGxpbmtCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJv
dW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAJKHJldmlzaW9uIDI3NzI4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8dGFnPiBn
ZW5lcmEKICAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cih0YXJnZXQp
LCBzY3JhdGNoKTsKICAgICBqaXQuZmFySnVtcChzY3JhdGNoLCBPcGVyYXRpb25QdHJUYWcpOwog
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCB0
YWcsICJMTEludCAlcyB0aHVuayIsIHRodW5rS2luZCk7CiB9CiAKQEAgLTExNSw3ICsxMTUsNyBA
QCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2VuZXJhCiAgICAgaml0Lm1vdmUo
SlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIodGFyZ2V0KSwgc2NyYXRjaCk7CiAgICAgaml0
LmZhckp1bXAoc2NyYXRjaCwgT3BlcmF0aW9uUHRyVGFnKTsKIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGFnLCAiTExJbnQgJXMganVtcCB0
byBwcm9sb2d1ZSB0aHVuayIsIHRodW5rS2luZCk7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2VuZXJhCiAgICAgSlNJbnRlcmZhY2VK
SVQgaml0OwogICAgIGFzc2VydElzVGFnZ2VkV2l0aDxPcGVyYXRpb25QdHJUYWc+KHRhcmdldCk7
CiAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhcmdldCksIE9w
ZXJhdGlvblB0clRhZyk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCB0YWcsICJMTEludCAlcyByZXR1cm4gcG9pbnQgdGh1bmsiLCB0aHVua0tp
bmQpOwogfQogCkBAIC0yNDcsNyArMjQ3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+IGdldAogICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAg
ICAgaml0LnJldCgpOwogCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQpOworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgICAgIGNvZGVSZWYu
Y29uc3RydWN0KEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsICJMTElu
dDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZSB0aHVuayIpKTsKICAgICB9KTsKICAgICByZXR1cm4g
Y29kZVJlZjsKQEAgLTM1Nyw3ICszNTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZl
VG9KSVRHYXRlUHRyCiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHBv
aW50ZXIpLCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDMs
IE9wZXJhdGlvblB0clRhZyk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50ICVzIGNhbGwg
Z2F0ZSB0aHVuayIsIG5hbWUpOwogfQogCkBAIC0zNjksNyArMzY5LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0cgogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgR1BSSW5mbzo6d2FzbVNjcmF0Y2hHUFIxKTsKICAgICBq
aXQuZmFySnVtcChHUFJJbmZvOjp3YXNtU2NyYXRjaEdQUjEsIE9wZXJhdGlvblB0clRhZyk7CiAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50ICVzIHdhc20gY2FsbCBnYXRlIHRodW5rIiwgbmFt
ZSk7CiB9CiAKQEAgLTM4MSw3ICszODEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZl
VG9KSVRHYXRlUHRyCiAgICAgaml0LnZhbGlkYXRlVW50YWdnZWRQdHIoQVJNNjRSZWdpc3RlcnM6
OmxyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwogICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJl
Z1QwLCB0YWcpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVO
S19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTEludCB0YWlsIGNhbGwgZ2F0ZSB0
aHVuayIpOwogfQogCkBAIC0zOTQsNyArMzk0LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5h
dGl2ZVRvSklUR2F0ZVB0cgogCiAgICAgICAgIGppdC5mYXJKdW1wKEdQUkluZm86OmFyZ3VtZW50
R1BSMCwgSlNFbnRyeVB0clRhZyk7CiAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICAgICAg
Y29kZVJlZi5jb25zdHJ1Y3QoRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRH
YXRlUHRyVGFnLCAibG9vcCBPU1IgZW50cnkgdGh1bmsiKSk7CiAgICAgfSk7CiAgICAgcmV0dXJu
IGNvZGVSZWY7CkBAIC00MTAsNyArNDEwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2
ZVRvSklUR2F0ZVB0cgogICAgICAgICBqaXQudW50YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAgICAg
IGppdC5mYXJKdW1wKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNFbnRyeVB0clRhZyk7CiAKLSAg
ICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAg
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnLCAiZW50cnkgT1NSIGVudHJ5
IHRodW5rIikpOwogICAgIH0pOwogICAgIHJldHVybiBjb2RlUmVmOwpAQCAtNDI2LDcgKzQyNiw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHIKICAgICAgICAgaml0
LnVudGFnUmV0dXJuQWRkcmVzcygpOwogICAgICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjp3YXNt
U2NyYXRjaEdQUjAsIFdhc21FbnRyeVB0clRhZyk7CiAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsK
ICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0
aXZlVG9KSVRHYXRlUHRyVGFnLCAid2FzbSBPU1IgZW50cnkgdGh1bmsiKSk7CiAgICAgfSk7CiAg
ICAgcmV0dXJuIGNvZGVSZWY7CkBAIC00NDEsNyArNDQxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPE5hdGl2ZVRvSklUR2F0ZVB0cgogCiAgICAgICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJl
Z1QwLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwog
ICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRp
dmVUb0pJVEdhdGVQdHJUYWcsICJleGNlcHRpb24gaGFuZGxlciB0aHVuayIpKTsKICAgICB9KTsK
ICAgICByZXR1cm4gY29kZVJlZjsKQEAgLTQ1Niw3ICs0NTYsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyCiAKICAgICAgICAgaml0LnJldCgpOwogCi0gICAgICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpUaHVuayk7CiAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgInJldHVybkZyb21MTEludCB0aHVu
ayIpKTsKICAgICB9KTsKICAgICByZXR1cm4gY29kZVJlZjsKQEAgLTQ3Miw3ICs0NzIsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyCiAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBHUFJJbmZvOjpyZWdUMyk7CiAgICAg
aml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDMsIE9wZXJhdGlvblB0clRhZyk7CiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpU
aHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklU
R2F0ZVB0clRhZywgInRhZyB0aHVuayIpOwogfQogCkBAIC00ODcsNyArNDg3LDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0cgogICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5m
YXJKdW1wKEdQUkluZm86OnJlZ1QzLCBPcGVyYXRpb25QdHJUYWcpOwogCi0gICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmsp
OwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQ
dHJUYWcsICJ1bnRhZyB0aHVuayIpOwogfQogCkBAIC01MDIsNyArNTAyLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0cgogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VL
ZXksIFsmXSB7CiAgICAgICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgICAgIEpTQ19KSVRfQ0FH
RV9DT01QSUxFX0lNUEwoaml0KTsKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCk7CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICAgICAgY29k
ZVJlZi5jb25zdHJ1Y3QoRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRl
UHRyVGFnLCAiaml0Q2FnZVB0ciB0aHVuayIpKTsKICAgICB9KTsKICAgICByZXR1cm4gY29kZVJl
ZjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJl
dmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU09OT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlBh
cnNlci5oIgogI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgpAQCAtMTkyNCw2ICsxOTI1LDcgQEAg
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpbwogc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25FZGVuR0MpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25HQ1N3ZWVwQXN5bmNocm9ub3VzbHkpOwogc3RhdGljIEpTQ19E
RUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25EdW1wU3Vic3BhY2VIYXNoZXMpOworc3RhdGlj
IEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25EdW1wTGlua0J1ZmZlclN0YXRzKTsK
IHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uQ2FsbEZyYW1lKTsKIHN0
YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uQ29kZUJsb2NrRm9yRnJhbWUp
Owogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Db2RlQmxvY2tGb3Ip
OwpAQCAtMjMwMyw2ICsyMzA1LDE1IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bkR1bXBTdWIKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQog
CisvLyBEdW1wcyB0aGUgTGlua0J1ZmZlciBwcm9maWxlIHN0YXRpc3RpY3MuCisvLyBVc2FnZTog
JHZtLmR1bXBMaW5rQnVmZmVyU3RhdHMoKQorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uRHVtcExpbmtCdWZmZXJTdGF0cywgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikpCit7
CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBMaW5rQnVmZmVyOjpk
dW1wUHJvZmlsZVN0YXRpc3RpY3MoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworfQorCiAvLyBHZXRzIGEgSlNEb2xsYXJWTUNhbGxGcmFtZSBmb3IgYSBzcGVj
aWZpZWQgZnJhbWUgaW5kZXguCiAvLyBVc2FnZTogdmFyIGNhbGxGcmFtZSA9ICR2bS5jYWxsRnJh
bWUoMCkgLy8gZnJhbWUgMCBpcyB0aGUgdG9wIGZyYW1lLgogLy8gVXNhZ2U6IHZhciBjYWxsRnJh
bWUgPSAkdm0uY2FsbEZyYW1lKCkgLy8gaW1wbGllcyBmcmFtZSAwIGkuZS4gY3VycmVudCBmcmFt
ZS4KQEAgLTM2MTYsNiArMzYyNyw3IEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQogICAgIGFkZEZ1bmN0aW9uKHZtLCAiZ2NTd2VlcEFzeW5jaHJvbm91c2x5IiwgZnVu
Y3Rpb25HQ1N3ZWVwQXN5bmNocm9ub3VzbHksIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiZWRl
bkdDIiwgZnVuY3Rpb25FZGVuR0MsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiZHVtcFN1YnNw
YWNlSGFzaGVzIiwgZnVuY3Rpb25EdW1wU3Vic3BhY2VIYXNoZXMsIDApOworICAgIGFkZEZ1bmN0
aW9uKHZtLCAiZHVtcExpbmtCdWZmZXJTdGF0cyIsIGZ1bmN0aW9uRHVtcExpbmtCdWZmZXJTdGF0
cywgMCk7CiAKICAgICBhZGRGdW5jdGlvbih2bSwgImNhbGxGcmFtZSIsIGZ1bmN0aW9uQ2FsbEZy
YW1lLCAxKTsKICAgICBhZGRGdW5jdGlvbih2bSwgImNvZGVCbG9ja0ZvciIsIGZ1bmN0aW9uQ29k
ZUJsb2NrRm9yLCAxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5jcHAJKHJldmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lk
IEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRpZXJVcENvdW50PiB0aWVyVXAgPSBtYWtlVW5pcXVlPFRpZXJVcENvdW50PigpOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBmdW5jdGlvbiA9IGNvbXBpbGVGdW5jdGlv
bihtX2Z1bmN0aW9uSW5kZXgsIGNvbnRleHQsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB0aWVy
VXAuZ2V0KCkpOwogCi0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRy
eXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6V2FzbSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAoVU5M
SUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgewogICAgICAgICBCYXNlOjpm
YWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9y
eSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKG1f
ZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjIwLDcgKzIyMCw3IEBAIHZv
aWQgQkJRUGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbihjb24KICAgICAgICAgY29uc3QgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSW5k
ZXhTcGFjZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7
CiAgICAgICAgIHsKLSAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53
YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAg
ICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwg
bnVsbHB0ciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6V2FzbSwgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpKSB7CiAgICAgICAgICAgICAgICAgQmFzZTo6ZmFpbChsb2NrZXIsIG1ha2VTdHJpbmcoIk91
dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51
bWJlcihmdW5jdGlvbkluZGV4KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIzMiw3
ICsyMzIsNyBAQCB2b2lkIEJCUVBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24oY29uCiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoY29uc3QgYXV0byYgZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1
bmN0aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChmdW5jdGlvbklu
ZGV4KSkgewotICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0LmVtYmVk
ZGVyRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAg
ICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRK
SVQsIG51bGxwdHIsIExpbmtCdWZmZXI6OlByb2ZpbGU6Oldhc20sIEpJVENvbXBpbGF0aW9uQ2Fu
RmFpbCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxv
Y2F0ZSgpKSkgewogICAgICAgICAgICAgICAgIEJhc2U6OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5n
KCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gZW50cnlwb2ludCBhdCBpbmRl
eCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAJ
KHJldmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5k
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDcgKzc3LDcgQEAgRXhwZWN0ZWQ8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogICAgIGppdC5sb2FkUHRyKHNjcmF0Y2gsIHNjcmF0
Y2gpOwogICAgIGppdC5mYXJKdW1wKHNjcmF0Y2gsIFdhc21FbnRyeVB0clRhZyk7CiAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwog
ICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCShy
ZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQ
bGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBMTEludFBsYW46OmRp
ZENvbXBsZXRlQ29tcGlsYXRpb24oYwogICAgICAgICAgICAganVtcHNbaV0gPSBqaXQuanVtcCgp
OwogICAgICAgICB9CiAKLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6Oldhc20s
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVy
LmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgICAgICBCYXNlOjpmYWlsKGxvY2tlciwg
Ik91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBpbiBXYXNtIExMSW50IGVudHJ5IHRodW5rcyIpOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgTExJbnRQbGFuOjpk
aWRDb21wbGV0ZUNvbXBpbGF0aW9uKGMKICAgICAgICAgICAgIE1lbW9yeU1vZGUgbW9kZSA9IE1l
bW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOwogICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+IGZ1bmN0aW9uID0gY3JlYXRlSlNUb1dhc21XcmFwcGVyKGppdCwgc2ln
bmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi5nZXQoKSwgbW9kZSwgZnVuY3Rpb25JbmRleCk7CiAKLSAgICAgICAgICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CisgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyLCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpXYXNtLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKICAgICAg
ICAgICAgICAgICBCYXNlOjpmYWlsKGxvY2tlciwgbWFrZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFi
bGUgbWVtb3J5IGluIGZ1bmN0aW9uIGVudHJ5cG9pbnQgYXQgaW5kZXggIiwgU3RyaW5nOjpudW1i
ZXIoZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFu
LmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Myw3ICs4Myw3IEBA
IHZvaWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW8KICAgICB9CiAKICAgICBF
bnRyeXBvaW50IG9tZ0VudHJ5cG9pbnQ7Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250
ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwor
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVs
bHB0ciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6V2FzbSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsK
ICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgewogICAg
ICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcoIk91dCBvZiBleGVj
dXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmlu
Zzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAkocmV2aXNpb24gMjc3Mjg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODAsNyArODAsNyBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25F
ZmZvcnQpCiAgICAgfQogCiAgICAgRW50cnlwb2ludCBvbWdFbnRyeXBvaW50OwotICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQu
d2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIsIExpbmtCdWZmZXI6OlByb2ZpbGU6Oldhc20sIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkpIHsKICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBt
YWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2hpbGUgdGllcmluZyB1cCBmdW5j
dGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5kZXgpKSk7CiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3Mu
Y3BwCShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRoCiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIGppdC5icmVha3BvaW50
KCk7IC8vIFdlIHNob3VsZCBub3QgcmVhY2ggdGhpcy4KIAotICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgbGlu
a0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
V2FzbVRvSlNFeGNlcHRpb24pKTsKICAgICByZXR1cm4gRklOQUxJWkVfV0FTTV9DT0RFKGxpbmtC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiVGhyb3cgZXhjZXB0aW9uIGZyb20gV2FzbSIpOwogfQpA
QCAtNjcsNyArNjcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRo
CiAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc3RhY2tTcGFjZSks
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PHVpbnQzMl90PihFeGNlcHRpb25UeXBlOjpTdGFja092ZXJmbG93KSksIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CiAgICAgYXV0byBqdW1wVG9FeGNlcHRpb25IYW5kbGVyID0gaml0Lmp1
bXAoKTsKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwor
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6VGh1bmspOwogICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRpb25I
YW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0
b24oKS5zdHViKGxvY2tlciwgdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfV0FTTV9DT0RFKGxpbmtCdWZmZXIsIEpJVFRo
dW5rUHRyVGFnLCAiVGhyb3cgc3RhY2sgb3ZlcmZsb3cgZnJvbSBXYXNtIik7CiB9CkBAIC05Myw3
ICs5Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHIKIAogICAg
IGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKLSAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmsp
OwogICAgIHJldHVybiBGSU5BTElaRV9XQVNNX0NPREUobGlua0J1ZmZlciwgSklUVGh1bmtQdHJU
YWcsICJUcmlnZ2VyIE9NRyBlbnRyeSB0aWVyIHVwIik7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAJKHJldmlzaW9uIDI3NzI4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDE3LDcgKzQxNyw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxX
YXNtRW50cnkKICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpUaHVuaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAoVU5MSUtFTFkocGF0
Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjc3Mjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0MzAsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViCiAjZW5kaWYKICAgICBhdXRvIGp1bXBU
b0hvc3RDYWxsVGh1bmsgPSBqaXQuanVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KGppdCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoaml0LCBudWxscHRyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNtLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0Fs
bG9jYXRlKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHJldmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTY1LDcgKzM5
NjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgICAg
IG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAKLSAgICAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKCp0aGlzLCBSRUdFWFBfQ09ERV9JRCwgSklUQ29tcGlsYXRpb25DYW5G
YWlsKTsKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp0aGlzLCBSRUdFWFBfQ09ERV9J
RCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6WWFyckpJVCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsK
ICAgICAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICAg
ICAgY29kZUJsb2NrLnNldEZhbGxCYWNrV2l0aEZhaWx1cmVSZWFzb24oSklURmFpbHVyZVJlYXNv
bjo6RXhlY3V0YWJsZU1lbW9yeUFsbG9jYXRpb25GYWlsdXJlKTsKICAgICAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIxLTA1LTEwICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCB0byBjb2xs
ZWN0IHN0YXRzIG9uIGN1bXVsYXRpdmUgTGlua0J1ZmZlciBsaW5rZWQgc2l6ZXMgYmFzZWQgb24g
cHJvZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjU2MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Y29tcGlsZSk6CisKIDIwMjEtMDUt
MTAgIEFuZHJlcyBHb256YWxleiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAgICAgICAgIEZp
eCBmb3IgYXNzZXJ0IGNyYXNoIGluIEFYT2JqZWN0Q2FjaGU6OnZpc2libGVQb3NpdGlvbkZvclRl
eHRNYXJrZXJEYXRhLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBp
bGVyLmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVj
dG9yQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDcxLDcgKzE0NzEsNyBAQCBpbmxpbmUgU2VsZWN0
b3JDb21waWxhdGlvblN0YXR1cyBTZWxlY3RvCiAgICAgICAgIHJldHVybiBTZWxlY3RvckNvbXBp
bGF0aW9uU3RhdHVzOjpDYW5ub3RDb21waWxlOwogICAgIH0KIAotICAgIEpTQzo6TGlua0J1ZmZl
ciBsaW5rQnVmZmVyKG1fYXNzZW1ibGVyLCBDU1NfQ09ERV9JRCwgSlNDOjpKSVRDb21waWxhdGlv
bkNhbkZhaWwpOworICAgIEpTQzo6TGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fYXNzZW1ibGVyLCBD
U1NfQ09ERV9JRCwgSlNDOjpMaW5rQnVmZmVyOjpQcm9maWxlOjpDU1NKSVQsIEpTQzo6SklUQ29t
cGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAoIWxpbmtCdWZmZXIuaXNWYWxpZCgpKSB7CiAgICAg
ICAgIC8vIFRoaXMgY291bGQgYmUgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6Tm90Q29tcGls
ZWQgYnV0IHRoYXQgd291bGQgY2F1c2UgdXMgdG8gcmUtZW50ZXIKICAgICAgICAgLy8gdGhlIENT
UyBKSVQgZXZlcnkgdGltZSB3ZSBldmFsdWF0ZSB0aGF0IHNlbGVjdG9yLgo=
</data>
<flag name="review"
          id="449068"
          type_id="1"
          status="+"
          setter="saam"
    />
    <flag name="commit-queue"
          id="449072"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428215</attachid>
            <date>2021-05-10 16:09:46 -0700</date>
            <delta_ts>2021-05-10 16:25:33 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-225617.patch</filename>
            <type>text/plain</type>
            <size>59902</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3MzAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMiBA
QAorMjAyMS0wNS0xMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIHN1cHBvcnQgdG8gY29sbGVjdCBzdGF0cyBvbiBjdW11bGF0aXZlIExpbmtCdWZmZXIgbGlu
a2VkIHNpemVzIGJhc2VkIG9uIHByb2ZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NjE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBC
YXJhdGkuCisKKyAgICAgICAgVGhlcmUgYXJlIDIgd2F5cyB0byBkdW1wIHRoZSBzdGF0czoKKyAg
ICAgICAgMS4gU3BlY2lmeSAtLWR1bXBMaW5rQnVmZmVyU3RhdHMgYXMgYW4gYXJndW1lbnQgdG8g
dGhlIGpzYyBzaGVsbC4KKyAgICAgICAgMi4gQ2FsbCAkdm0uZHVtcExpbmtCdWZmZXJTdGF0cygp
IGZyb20geW91ciBKUyBzY3JpcHQgdG8gZ2V0IHRoZSBzdGF0cyBhcyBhIHN0cmluZy4KKyAgICAg
ICAgICAgZS5nLgorICAgICAgICAgICAgICAgICR2bS5wcmludCgkdm0uZHVtcExpbmtCdWZmZXJT
dGF0cygpKTsKKworICAgICAgICBIZXJlJ3MgYW4gZXhhbXBsZSBvZiB3aGF0IHRoZSBkdW1wIGxv
b2tzIGxpa2U6CisKKyAgICAgICAgICAgIEN1bW11bGF0aXZlIExpbmtCdWZmZXIgcHJvZmlsZSBz
aXplczoKKyAgICAgICAgICAgICAgICAgICAgICAgQmFzZWxpbmVKSVQ6IDc5NDgwMzIwICg3NS43
OTgzNDAgTUIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHOiAzNjEwODY3MiAo
MzQuNDM1OTEzIE1CKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHVuazogMjI0OTUz
NjAgKDIxLjQ1MzI0NyBNQikKKyAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FjaGU6IDE5
NTM4NTIxICgxOC42MzMzODYgTUIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRM
OiA1MTg2MjQwICg0Ljk0NTk4NCBNQikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdh
c206IDE5OTgyNzIgKDEuOTA1NzAxIE1CKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgWWFy
ckpJVDogMTMzMTA3MiAoMS4yNjk0MDkgTUIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTSklUOiAwCisgICAgICAgICAgICAgICAgICAgICBVbmNhdGVnb3JpemVkOiAwCisKKyAgICAg
ICAgVGhlIHN0YXRzIGFyZSBjdXJyZW50bHkgZ3JvdXBlZCBpbnRvIHNvbWUgY29hcnNlIHByb2Zp
bGVzLiAgSWYgbmVlZGVkLCB3ZSBjYW4KKyAgICAgICAgYnJlYWsgdGhlc2UgZG93biBpbnRvIG1v
cmUgZmluZSBncmFpbiBwcm9maWxlcyBsYXRlci4KKworICAgICAgICAqIGFzc2VtYmxlci9MaW5r
QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlv
bik6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmR1bXBQcm9maWxlU3RhdGlzdGljcyk6Cisg
ICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZl
cjo6TGlua0J1ZmZlcik6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6bGlua0NvZGVJbmxpbmUpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxl
RnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIGRmZy9ERkdUaHVua3Mu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpERkc6Om9zckVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAq
IGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAg
ICAgKiBmdGwvRlRMTGF6eVNsb3dQYXRoLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xv
d1BhdGg6OmdlbmVyYXRlKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGZ0bC9GVExUaHVua3Mu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OmdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpGVEw6OnNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OmppdFdyaXRl
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyk6CisgICAgICAgICogaml0L0pJVE1hdGhJQy5oOgor
ICAgICAgICAoSlNDOjpKSVRNYXRoSUM6OmdlbmVyYXRlT3V0T2ZMaW5lKToKKyAgICAgICAgKiBq
aXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAg
ICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZh
dGVDb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0
UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAg
ICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbCk6CisgICAgICAgICogaml0L1NwZWNpYWxp
emVkVGh1bmtKSVQuaDoKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6ZmluYWxp
emUpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjp0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjps
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2Fs
bFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yKToKKyAgICAg
ICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6YXJpdHlGaXh1cEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnVucmVhY2hhYmxlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nR2V0QnlWYWxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpib3VuZEZ1bmN0
aW9uQ2FsbEdlbmVyYXRvcik6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKENvbW1hbmRM
aW5lOjpwYXJzZUFyZ3VtZW50cyk6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBsbGlu
dC9MTEludFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmF0ZVRodW5rV2l0
aEp1bXBUbyk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmF0ZVRodW5rV2l0aEp1bXBUb1By
b2xvZ3VlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvTExJ
bnRSZXR1cm5Qb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZh
bHVlVGh1bmspOgorICAgICAgICAoSlNDOjpMTEludDo6Y3JlYXRlSlNHYXRlVGh1bmspOgorICAg
ICAgICAoSlNDOjpMTEludDo6Y3JlYXRlV2FzbUdhdGVUaHVuayk6CisgICAgICAgIChKU0M6OkxM
SW50OjpjcmVhdGVUYWlsQ2FsbEdhdGUpOgorICAgICAgICAoSlNDOjpMTEludDo6bG9vcE9TUkVu
dHJ5R2F0ZVRodW5rKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmVudHJ5T1NSRW50cnlHYXRlVGh1
bmspOgorICAgICAgICAoSlNDOjpMTEludDo6d2FzbU9TUkVudHJ5R2F0ZVRodW5rKToKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OmV4Y2VwdGlvbkhhbmRsZXJHYXRlVGh1bmspOgorICAgICAgICAoSlND
OjpMTEludDo6cmV0dXJuRnJvbUxMSW50R2F0ZVRodW5rKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OnRhZ0dhdGVUaHVuayk6CisgICAgICAgIChKU0M6OkxMSW50Ojp1bnRhZ0dhdGVUaHVuayk6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpqaXRDYWdlUHRyVGh1bmspOgorICAgICAgICAqIHRvb2xzL0pT
RG9sbGFyVk0uY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgor
ICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogd2Fz
bS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAg
ICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRv
V2FzbSk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKiB3YXNt
L1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdGb3JP
U1JFbnRyeVBsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21UaHVu
a3MuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjp0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJpZ2dlck9NR0VudHJ5VGll
clVwVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjp3YXNtVG9KUyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxs
RW50cnlwb2ludFNsb3cpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisKIDIwMjEtMDUt
MDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBjYWxs
cyB0byB0aGUgU3RyaW5nOjp0b0ludCBmYW1pbHkgb2YgZnVuY3Rpb25zIGZyb20gSmF2YVNjcmlw
dENvcmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMxLDYgKzQzMSw3
IEBAIHB1YmxpYzoKICAgICBib29sIG1fdHJlYXRXYXRjaGRvZ0V4Y2VwdGlvbkFzU3VjY2VzcyB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2Fsd2F5c0R1bXBVbmNhdWdodEV4Y2VwdGlvbiB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2R1bXBNZW1vcnlGb290cHJpbnQgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9kdW1wTGlua0J1ZmZlclN0YXRzIHsgZmFsc2UgfTsKICAgICBib29sIG1fZHVtcFNhbXBsaW5n
UHJvZmlsZXJEYXRhIHsgZmFsc2UgfTsKICAgICBib29sIG1fZW5hYmxlUmVtb3RlRGVidWdnaW5n
IHsgZmFsc2UgfTsKICAgICBib29sIG1fY2FuQmxvY2tJc0ZhbHNlIHsgZmFsc2UgfTsKQEAgLTMz
NjAsNiArMzM2MSwxMSBAQCB2b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJn
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCisgICAgICAgIGlmICghc3RyY21w
KGFyZywgIi0tZHVtcExpbmtCdWZmZXJTdGF0cyIpKSB7CisgICAgICAgICAgICBtX2R1bXBMaW5r
QnVmZmVyU3RhdHMgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwog
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZXhjZXB0aW9uU3RyTGVuZ3RoID0gc3RybGVu
KCItLWV4Y2VwdGlvbj0iKTsKICAgICAgICAgaWYgKCFzdHJuY21wKGFyZywgIi0tZXhjZXB0aW9u
PSIsIGV4Y2VwdGlvblN0ckxlbmd0aCkpIHsKICAgICAgICAgICAgIG1fdW5jYXVnaHRFeGNlcHRp
b25OYW1lID0gU3RyaW5nKGFyZyArIGV4Y2VwdGlvblN0ckxlbmd0aCk7CkBAIC0zNjIwLDYgKzM2
MjYsMTEgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICBwcmlu
dGYoIk1lbW9yeSBGb290cHJpbnQ6XG4gICAgQ3VycmVudCBGb290cHJpbnQ6ICUiIFBSSXU2NCAi
XG4gICAgUGVhayBGb290cHJpbnQ6ICUiIFBSSXU2NCAiXG4iLCBmb290cHJpbnQuY3VycmVudCwg
Zm9vdHByaW50LnBlYWspOwogICAgIH0KIAorI2lmIEVOQUJMRShBU1NFTUJMRVIpCisgICAgaWYg
KG1haW5Db21tYW5kTGluZS0+bV9kdW1wTGlua0J1ZmZlclN0YXRzKQorICAgICAgICBMaW5rQnVm
ZmVyOjpkdW1wUHJvZmlsZVN0YXRpc3RpY3MoKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtC
dWZmZXIuY3BwCShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiArNDAsOCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorc2l6ZV90IExpbmtCdWZmZXI6OnNfcHJvZmlsZUN1bW11bGF0
aXZlTGlua2VkU2l6ZXNbTGlua0J1ZmZlcjo6bnVtYmVyT2ZQcm9maWxlc107CisKIGJvb2wgc2hv
dWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGlmIChj
b2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgp
KSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkKQEAgLTQ3Nyw2ICs0NzksNyBAQCB2
b2lkIExpbmtCdWZmZXI6OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogICAgIG1fY29tcGxldGVkID0g
dHJ1ZTsKICNlbmRpZgogICAgIAorICAgIHNfcHJvZmlsZUN1bW11bGF0aXZlTGlua2VkU2l6ZXNb
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fcHJvZmlsZSldICs9IG1fc2l6ZTsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6Y2FjaGVGbHVzaChjb2RlKCksIG1fc2l6ZSk7CiB9CiAKQEAgLTUyNyw2ICs1MzAs
NTkgQEAgdm9pZCBMaW5rQnVmZmVyOjpkdW1wQ29kZSh2b2lkKiBjb2RlLCBzaQogfQogI2VuZGlm
CiAKK3ZvaWQgTGlua0J1ZmZlcjo6ZHVtcFByb2ZpbGVTdGF0aXN0aWNzKE9wdGlvbmFsPFByaW50
U3RyZWFtKj4gb3V0U3RyZWFtKQoreworICAgIHN0cnVjdCBTdGF0IHsKKyAgICAgICAgUHJvZmls
ZSBwcm9maWxlOworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICB9OworCisgICAgU3RhdCBzb3J0
ZWRTdGF0c1tudW1iZXJPZlByb2ZpbGVzXTsKKyAgICBQcmludFN0cmVhbSYgb3V0ID0gb3V0U3Ry
ZWFtID8gKm91dFN0cmVhbS52YWx1ZSgpIDogV1RGOjpkYXRhRmlsZSgpOworCisjZGVmaW5lIFJF
VFVSTl9MSU5LQlVGRkVSX1BST0ZJTEVfTkFNRShuYW1lKSBjYXNlIFByb2ZpbGU6Om5hbWU6IHJl
dHVybiAjbmFtZTsKKyAgICBhdXRvIG5hbWUgPSBbXSAoUHJvZmlsZSBwcm9maWxlKSAtPiBjb25z
dCBjaGFyKiB7CisgICAgICAgIHN3aXRjaCAocHJvZmlsZSkgeworICAgICAgICAgICAgRk9SX0VB
Q0hfTElOS0JVRkZFUl9QUk9GSUxFKFJFVFVSTl9MSU5LQlVGRkVSX1BST0ZJTEVfTkFNRSkKKyAg
ICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07Cisj
dW5kZWYgUkVUVVJOX0xJTktCVUZGRVJfUFJPRklMRV9OQU1FCisKKyAgICBhdXRvIGR1bXBTdGF0
ID0gWyZdIChjb25zdCBTdGF0JiBzdGF0KSB7CisgICAgICAgIGNoYXIgZm9ybWF0dGVkTmFtZVsy
MV07CisgICAgICAgIHNucHJpbnRmKGZvcm1hdHRlZE5hbWUsIDIxLCAiJTIwcyIsIG5hbWUoc3Rh
dC5wcm9maWxlKSk7CisKKyAgICAgICAgY29uc3QgY2hhciogbGFyZ2VyVW5pdCA9IG51bGxwdHI7
CisgICAgICAgIGRvdWJsZSBzaXplSW5MYXJnZXJVbml0ID0gc3RhdC5zaXplOworICAgICAgICBp
ZiAoc3RhdC5zaXplID4gMSAqIE1CKSB7CisgICAgICAgICAgICBsYXJnZXJVbml0ID0gIk1CIjsK
KyAgICAgICAgICAgIHNpemVJbkxhcmdlclVuaXQgPSBzaXplSW5MYXJnZXJVbml0IC8gTUI7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc3RhdC5zaXplID4gMSAqIEtCKSB7CisgICAgICAgICAgICBsYXJn
ZXJVbml0ID0gIktCIjsKKyAgICAgICAgICAgIHNpemVJbkxhcmdlclVuaXQgPSBzaXplSW5MYXJn
ZXJVbml0IC8gS0I7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGFyZ2VyVW5pdCkKKyAgICAg
ICAgICAgIG91dC5wcmludGxuKCIgICIsIGZvcm1hdHRlZE5hbWUsICI6ICIsIHN0YXQuc2l6ZSwg
IiAoIiwgc2l6ZUluTGFyZ2VyVW5pdCwgIiAiLCBsYXJnZXJVbml0LCAiKSIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBvdXQucHJpbnRsbigiICAiLCBmb3JtYXR0ZWROYW1lLCAiOiAiLCBz
dGF0LnNpemUpOworICAgIH07CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVy
T2ZQcm9maWxlczsgKytpKSB7CisgICAgICAgIHNvcnRlZFN0YXRzW2ldLnByb2ZpbGUgPSBzdGF0
aWNfY2FzdDxQcm9maWxlPihpKTsKKyAgICAgICAgc29ydGVkU3RhdHNbaV0uc2l6ZSA9IHNfcHJv
ZmlsZUN1bW11bGF0aXZlTGlua2VkU2l6ZXNbaV07CisgICAgfQorICAgIHN0ZDo6c29ydCgmc29y
dGVkU3RhdHNbMF0sICZzb3J0ZWRTdGF0c1tudW1iZXJPZlByb2ZpbGVzXSwKKyAgICAgICAgW10g
KFN0YXQmIGEsIFN0YXQmIGIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIGEuc2l6ZSA+
IGIuc2l6ZTsKKyAgICAgICAgfSk7CisKKyAgICBvdXQucHJpbnRsbigiQ3VtbXVsYXRpdmUgTGlu
a0J1ZmZlciBwcm9maWxlIHNpemVzOiIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZlByb2ZpbGVzOyArK2kpCisgICAgICAgIGR1bXBTdGF0KHNvcnRlZFN0YXRzW2ldKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJl
dmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPHd0Zi9E
YXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTgzLDI0ICs4NCw0OCBAQCBjbGFzcyBMaW5rQnVmZmVyIHsKICNlbmRpZgogCiBwdWJs
aWM6Ci0gICAgTGlua0J1ZmZlcihNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIsIHZvaWQq
IG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBKSVRDb21waWxhdGlvbk11
c3RTdWNjZWVkKQorCisjZGVmaW5lIEZPUl9FQUNIX0xJTktCVUZGRVJfUFJPRklMRSh2KSBcCisg
ICAgdihCYXNlbGluZUpJVCkgXAorICAgIHYoREZHKSBcCisgICAgdihGVEwpIFwKKyAgICB2KElu
bGluZUNhY2hlKSBcCisgICAgdihUaHVuaykgXAorICAgIHYoV2FzbSkgXAorICAgIHYoWWFyckpJ
VCkgXAorICAgIHYoQ1NTSklUKSBcCisgICAgdihVbmNhdGVnb3JpemVkKQorCisjZGVmaW5lIERF
Q0xBUkVfTElOS0JVRkZFUl9QUk9GSUxFKG5hbWUpIG5hbWUsCisgICAgZW51bSBjbGFzcyBQcm9m
aWxlIHsKKyAgICAgICAgRk9SX0VBQ0hfTElOS0JVRkZFUl9QUk9GSUxFKERFQ0xBUkVfTElOS0JV
RkZFUl9QUk9GSUxFKQorICAgIH07CisjdW5kZWYgREVDTEFSRV9MSU5LQlVGRkVSX1BST0ZJTEUK
KworI2RlZmluZSBDT1VOVF9MSU5LQlVGRkVSX1BST0ZJTEUobmFtZSkgKyAxCisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlByb2ZpbGVzID0gRk9SX0VBQ0hfTElOS0JVRkZF
Ul9QUk9GSUxFKENPVU5UX0xJTktCVUZGRVJfUFJPRklMRSk7CisjdW5kZWYgQ09VTlRfTElOS0JV
RkZFUl9QUk9GSUxFCisKKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2Vt
Ymxlciwgdm9pZCogb3duZXJVSUQsIFByb2ZpbGUgcHJvZmlsZSA9IFByb2ZpbGU6OlVuY2F0ZWdv
cml6ZWQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1
Y2NlZWQpCiAgICAgICAgIDogbV9zaXplKDApCiAgICAgICAgICwgbV9kaWRBbGxvY2F0ZShmYWxz
ZSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCiAjZW5kaWYK
KyAgICAgICAgLCBtX3Byb2ZpbGUocHJvZmlsZSkKICAgICB7CiAgICAgICAgIFVOVVNFRF9QQVJB
TShvd25lclVJRCk7CiAgICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCBlZmZvcnQpOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgTGlua0J1ZmZlcihNYWNyb0Fz
c2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGNvZGUs
IHNpemVfdCBzaXplLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkLCBib29sIHNob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0aW9uID0gdHJ1ZSkK
KyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz4gY29kZSwgc2l6ZV90IHNpemUsIFByb2ZpbGUgcHJvZmlsZSA9IFBy
b2ZpbGU6OlVuY2F0ZWdvcml6ZWQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCA9IEpJVENv
bXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGJvb2wgc2hvdWxkUGVyZm9ybUJyYW5jaENvbXBhY3Rpb24g
PSB0cnVlKQogICAgICAgICA6IG1fc2l6ZShzaXplKQogICAgICAgICAsIG1fZGlkQWxsb2NhdGUo
ZmFsc2UpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fY29tcGxldGVkKGZhbHNlKQogI2Vu
ZGlmCisgICAgICAgICwgbV9wcm9maWxlKHByb2ZpbGUpCiAgICAgICAgICwgbV9jb2RlKGNvZGUu
dGVtcGxhdGUgcmV0YWdnZWQ8TGlua0J1ZmZlclB0clRhZz4oKSkKICAgICB7CiAjaWYgRU5BQkxF
KEJSQU5DSF9DT01QQUNUSU9OKQpAQCAtMjk4LDYgKzMyMyw4IEBAIHB1YmxpYzoKICAgICBib29s
IHdhc0FscmVhZHlEaXNhc3NlbWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FscmVhZHlEaXNhc3Nl
bWJsZWQ7IH0KICAgICB2b2lkIGRpZEFscmVhZHlEaXNhc3NlbWJsZSgpIHsgbV9hbHJlYWR5RGlz
YXNzZW1ibGVkID0gdHJ1ZTsgfQogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
ZHVtcFByb2ZpbGVTdGF0aXN0aWNzKE9wdGlvbmFsPFByaW50U3RyZWFtKj4gPSBXVEY6Om51bGxv
cHQpOworCiBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVSZWY8TGlua0J1ZmZl
clB0clRhZz4gZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5SW1wbCgpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIENvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gZmluYWxpemVDb2RlV2l0aERp
c2Fzc2VtYmx5SW1wbChib29sIGR1bXBEaXNhc3NlbWJseSwgY29uc3QgY2hhciogZm9ybWF0LCAu
Li4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDMsIDQpOwpAQCAtMzU1LDcgKzM4Miw3IEBAIHByaXZh
dGU6CiAjaWYgRFVNUF9DT0RFCiAgICAgc3RhdGljIHZvaWQgZHVtcENvZGUodm9pZCogY29kZSwg
c2l6ZV90KTsKICNlbmRpZgotICAgIAorCiAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+IG1fZXhlY3V0YWJsZU1lbW9yeTsKICAgICBzaXplX3QgbV9zaXplOwogI2lmIEVOQUJMRShC
UkFOQ0hfQ09NUEFDVElPTikKQEAgLTM3Myw4ICs0MDAsMTEgQEAgcHJpdmF0ZToKICAgICBib29s
IG1faXNKdW1wSXNsYW5kIHsgZmFsc2UgfTsKICNlbmRpZgogICAgIGJvb2wgbV9hbHJlYWR5RGlz
YXNzZW1ibGVkIHsgZmFsc2UgfTsKKyAgICBQcm9maWxlIG1fcHJvZmlsZSB7IFByb2ZpbGU6OlVu
Y2F0ZWdvcml6ZWQgfTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRh
Zz4gbV9jb2RlOwogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXIm
KT4+PiBtX2xpbmtUYXNrczsKKworICAgIHN0YXRpYyBzaXplX3Qgc19wcm9maWxlQ3VtbXVsYXRp
dmVMaW5rZWRTaXplc1tudW1iZXJPZlByb2ZpbGVzXTsKIH07CiAKICNpZiBPUyhMSU5VWCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5s
aW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NCw3ICsxNTQsNyBAQCBBTFdBWVNf
SU5MSU5FIHN0YXRpYyBib29sIGxpbmtDb2RlSW5saW5lCiB7CiAgICAgaWYgKGppdC5tX2Fzc2Vt
Ymxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIDw9IHN0dWJJbmZvLmlubGluZVNpemUoKSkgewogICAg
ICAgICBib29sIG5lZWRzQnJhbmNoQ29tcGFjdGlvbiA9IHRydWU7Ci0gICAgICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJJbmZvLnN0YXJ0LCBzdHViSW5mby5pbmxpbmVTaXplKCks
IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7CisgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJJbmZvLnN0YXJ0LCBzdHViSW5mby5p
bmxpbmVTaXplKCksIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlLCBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOwogICAgICAgICBBU1NFUlQo
bGlua0J1ZmZlci5pc1ZhbGlkKCkpOwogICAgICAgICBmdW5jdGlvbihsaW5rQnVmZmVyKTsKICAg
ICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIklubGluZUFjY2Vzc1R5
cGU6ICclcyciLCBuYW1lKTsKQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6
cmV3aXJlU3R1YkFzSnVtcChTdHJ1CiAKICAgICAvLyBXZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQg
aGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUganVtcGluZyBpbnRvIHRoZSBtaWRkbGUgb2Yg
YW4gSUMuCiAgICAgYm9vbCBuZWVkc0JyYW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKLSAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoaml0LCBzdHViSW5mby5zdGFydCwgaml0Lm1fYXNzZW1ibGVyLmJ1
ZmZlcigpLmNvZGVTaXplKCksIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNo
Q29tcGFjdGlvbik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1YkluZm8uc3Rh
cnQsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbmVlZHNCcmFuY2hD
b21wYWN0aW9uKTsKICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7CiAg
ICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIHRhcmdldCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNp
b24gMjc3Mjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM0LDcgKzczNCw3IEBAIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICAgICAgY2FsbFNpdGVJbmRleEZvckV4
Y2VwdGlvbkhhbmRsaW5nID0gc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5n
KCk7CiAgICAgfQogCi0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNv
ZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7CiAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAg
ICAgICBpZiAoUG9seW1vcnBoaWNBY2Nlc3NJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAg
IGRhdGFMb2coIkRpZCBmYWlsIHRvIGFsbG9jYXRlLlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKCkKICAgICBt
X3NwZWN1bGF0aXZlLT5jcmVhdGVPU1JFbnRyaWVzKCk7CiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAK
LSAgICBhdXRvIGxpbmtCdWZmZXIgPSBtYWtlVW5pcXVlPExpbmtCdWZmZXI+KCp0aGlzLCBtX2Nv
ZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBhdXRvIGxpbmtCdWZmZXIgPSBt
YWtlVW5pcXVlPExpbmtCdWZmZXI+KCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6REZHLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChsaW5rQnVmZmVyLT5k
aWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnNldEZpbmFsaXpl
cihtYWtlVW5pcXVlPEZhaWxlZEZpbmFsaXplcj4obV9ncmFwaC5tX3BsYW4pKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNDkxLDcgKzQ5MSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5j
dGlvbigpCiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAKICAgICAvLyA9PT0gTGluayA9PT0KLSAgICBh
dXRvIGxpbmtCdWZmZXIgPSBtYWtlVW5pcXVlPExpbmtCdWZmZXI+KCp0aGlzLCBtX2NvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBhdXRvIGxpbmtCdWZmZXIgPSBtYWtlVW5p
cXVlPExpbmtCdWZmZXI+KCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
REZHLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChsaW5rQnVmZmVyLT5kaWRGYWls
VG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnNldEZpbmFsaXplcihtYWtl
VW5pcXVlPEZhaWxlZEZpbmFsaXplcj4obV9ncmFwaC5tX3BsYW4pKTsKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lv
biAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjAzLDcgKzIwMyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Db21waWwKIAogICAgICAgICBPU1JFeGl0Ojpjb21waWxlRXhpdChqaXQsIHZt
LCBleGl0LCBvcGVyYW5kcywgcmVjb3ZlcnkpOwogCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBjb2RlQmxvY2spOworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgICAgIGV4aXQu
bV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgICAgIHNob3VsZER1bXBEaXNhc3Nl
bWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZHT1NS
RXhpdCgpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsIE9TUkV4aXRQdHJUYWcsCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAyNzcyODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC04OSw3ICs4OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
b3MKIAogICAgIGppdC5mYXJKdW1wKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnZt
Lm9zckV4aXRKdW1wRGVzdGluYXRpb24pLCBPU1JFeGl0UHRyVGFnKTsKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Db21waWxlT1NSRXhpdCkpOwogCkBAIC0xMzQsNyAr
MTM0LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcwogCiAgICAg
aml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OlRodW5rKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsICJERkcgT1NSIGVudHJ5IHRodW5rIik7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6
OlJlCiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7CiAgICAgICAgIH0p
OwogCi0gICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyID0gbWFrZVVuaXF1ZTxM
aW5rQnVmZmVyPihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBz
dGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIgPSBtYWtlVW5pcXVlPExpbmtCdWZmZXI+
KGppdCwgY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpGVEwsIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7CiAKICAgICBpZiAoc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5k
aWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0
cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRo
LmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
YXp5U2xvd1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIExh
enlTbG93UGF0aDo6Z2VuZXJhdGUoQ29kZUJsb2NrKiBjCiAKICAgICBtX2dlbmVyYXRvci0+cnVu
KGppdCwgcGFyYW1zKTsKIAotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KGppdCwgY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpGVEwsIEpJVENvbXBpbGF0aW9u
TXVzdFN1Y2NlZWQpOwogICAgIGxpbmtCdWZmZXIubGluayhwYXJhbXMuZG9uZUp1bXBzLCBtX2Rv
bmUpOwogICAgIGlmIChtX2V4Y2VwdGlvblRhcmdldCkKICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGV4Y2VwdGlvbkp1bXBzLCBtX2V4Y2VwdGlvblRhcmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBA
QCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgaml0LnVudGFnUmV0dXJuQWRk
cmVzcygpOwogICAgICAgICAgICAgbWFpblBhdGhKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CiAK
LSAgICAgICAgICAgIGxpbmtCdWZmZXIgPSBtYWtlVW5pcXVlPExpbmtCdWZmZXI+KGppdCwgY29k
ZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICAgICAgbGlua0J1ZmZlciA9
IG1ha2VVbmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2Zp
bGU6OkZUTCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgIGlmIChsaW5rQnVm
ZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgICAgICAgICAgc3RhdGUuYWxsb2Nh
dGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTkzLDcgKzE5
Myw3IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIGppdC51bnRhZ1JldHVybkFk
ZHJlc3MoKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG1haW5QYXRoSnVtcCA9IGppdC5q
dW1wKCk7CiAgICAgICAgIAotICAgICAgICBsaW5rQnVmZmVyID0gbWFrZVVuaXF1ZTxMaW5rQnVm
ZmVyPihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgbGlu
a0J1ZmZlciA9IG1ha2VVbmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxvY2ssIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OkZUTCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgaWYgKGxp
bmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgICAgIHN0YXRlLmFsbG9j
YXRpb25GYWlsZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24g
Mjc3Mjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTA2LDcgKzUwNiw3IEBAIHN0YXRpYyB2b2lkIGNvbXBp
bGVTdHViKFZNJiB2bSwgdW5zaWduZWQKICAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGppdCwg
ZXhpdCk7CiAgICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KHZtLCBqaXQsIGV4aXQpOwogICAgIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBjb2RlQmxvY2spOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBjb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKICAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAgIHNob3VsZER1
bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJi
b3NlRlRMT1NSRXhpdCgpLAogICAgICAgICBwYXRjaEJ1ZmZlciwgT1NSRXhpdFB0clRhZywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDI3NzI4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyCiAjZW5kaWYKICAgICBqaXQucmV0KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwog
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBnZW5lcmF0aW9uRnVuY3Rpb24ucmV0
YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICIlcyIsIG5hbWUpOwogfQpAQCAtMjMxLDcgKzIzMSw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2wKICAgICAKICAgICBq
aXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBr
ZXkuY2FsbFRhcmdldCgpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsICJGVEwgc2xvdyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3Ry
aW5nKGtleSkuZGF0YSgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
Q29kZVIKICAgICBqaXQucmV0KCk7CiAKICAgICBhdXRvIHN0dWJCYXNlQ29kZVB0ciA9IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPih0YWdDb2RlUHRyPExpbmtCdWZmZXJQ
dHJUYWc+KHN0dWJCYXNlKSk7Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1YkJh
c2VDb2RlUHRyLCBzdHViU2l6ZSk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1
YkJhc2VDb2RlUHRyLCBzdHViU2l6ZSwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAg
IC8vIFdlIGRvbid0IHVzZSBGSU5BTElaRV9DT0RFKCkgZm9yIHR3byByZWFzb25zLgogICAgIC8v
IFRoZSBmaXJzdCBpcyB0aGF0IHdlIGRvbid0IHdhbnQgdGhlIHdyaXRlYWJsZSBhZGRyZXNzLCBh
cyBkaXNhc3NlbWJsZWQgaW5zdHJ1Y3Rpb25zLAogICAgIC8vIHRvIGFwcGVhciBpbiB0aGUgY29u
c29sZSBvciBhbnl3aGVyZSBpbiBtZW1vcnksIHZpYSB0aGUgUHJpbnRTdHJlYW0gYnVmZmVyLgpA
QCAtNjQ0LDcgKzY0NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlciBqaXQ7CiAgICAgICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKLSAgICAg
ICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8Tm9QdHJUYWc+KGN1cnJlbnRJc2xhbmQpLCBpc2xhbmRTaXplSW5CeXRlcywgSklUQ29tcGls
YXRpb25NdXN0U3VjY2VlZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcihqaXQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4oY3VycmVudElzbGFu
ZCksIGlzbGFuZFNpemVJbkJ5dGVzLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuaywgSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCwgZmFsc2UpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIHVzZSB0
aGlzIHRvIGFwcGVhc2UgdGhlIGFzc2VydGlvbiB0aGF0IHdlJ3JlIG5vdCBmaW5hbGl6aW5nIG9u
IGEgY29tcGlsZXIgdGhyZWFkLiBJbiB0aGlzIHNpdHVhdGlvbiwgaXQncwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDIsNyArODQyLDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0
Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5r
QnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIGVmZm9ydCkpOworICAg
IG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZl
cigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBl
ZmZvcnQpKTsKIAogICAgIE1vbm90b25pY1RpbWUgYWZ0ZXIgeyB9OwogICAgIGlmIChVTkxJS0VM
WShjb21wdXRlQ29tcGlsZVRpbWVzKCkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE1hdGhJQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUTWF0aElDLmgJKHJldmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUTWF0aElDLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5v
Ym9keSBzaG91bGQgYmUganVtcGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAg
ICAgICBib29sIG5lZWRzQnJhbmNoQ29tcGFjdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgPD0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKG1f
aW5saW5lU3RhcnQsIG1faW5saW5lRW5kKSkpOwotICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKGppdCwgbV9pbmxpbmVTdGFydCwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVT
aXplKCksIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7
CisgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBtX2lubGluZVN0YXJ0LCBq
aXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFj
dGlvbik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7
CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KG1fY29kZS5jb2RlKCkpKTsKICAgICAgICAgICAgIEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsICJKSVRNYXRoSUM6IGxpbmtpbmcgY29uc3RhbnQg
anVtcCB0byBvdXQgb2YgbGluZSBzdHViIik7CkBAIC0xNTYsNyArMTU2LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgaWYgKGdlbmVyYXRlZElubGluZSkgewogICAgICAgICAgICAgICAgIGF1dG8g
anVtcFRvRG9uZSA9IGppdC5qdW1wKCk7CiAKLSAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAg
ICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZUJsb2NrLCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAg
ICAgICAgICBpZiAoIWxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZ2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMs
IHNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGp1bXBUb0RvbmUsIGRvbmVMb2NhdGlvbigpKTsKQEAgLTE5Niw3ICsxOTYsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgZW5kSnVtcExpc3Qu
YXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
aml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6Oklu
bGluZUNhY2hlLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAgICAgaWYgKGxpbmtC
dWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJl
dmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4Nyw3ICsxMTg3LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRo
aXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7CiAgICAg
CiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRh
cmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJl
dmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MzMsNyArMTQzMyw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jayk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OklubGluZUNhY2hlKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUs
IGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzcyODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU3OSw3ICsxNTc5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlWYWwoY29uc3QgQwogICAgIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5l
Q2FjaGUpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgYnlWYWxJbmZvLT5zbG93UGF0
aFRhcmdldCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xv
d1BhdGhUYXJnZXQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5kb25l
VGFyZ2V0KTsKQEAgLTE2MTgsNyArMTYxOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dFByaXZhdGVOYW1lV2kKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRQdXRQcml2
YXRlTmFtZVdpdGhDYWNoZWRJZChieXRlY29kZSwgcHJvcGVydHlOYW1lLCBkb25lQ2FzZXMsIHNs
b3dDYXNlcyk7CiAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5t
X2xvY2spOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Vz
LCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVD
YXNlcywgYnlWYWxJbmZvLT5kb25lVGFyZ2V0KTsKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tz
LmVtcHR5KCkpCkBAIC0xNjU2LDcgKzE2NTYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0UHV0QnlW
YWxXaXRoQ2FjaGVkSWQoYnl0ZWNvZGUsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNhc2Vz
LCBzbG93Q2FzZXMpOwogCiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9j
ay0+bV9sb2NrKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9j
ayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtC
dWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dD
YXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhk
b25lQ2FzZXMsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7CiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNo
ZWNrcy5lbXB0eSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShy
ZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTU4NSw3ICsxNTg1LDcgQEAgdm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKEpTR2xvYmFsT2JqZWN0KgogICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBz
bG93ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoc3R1YkppdCwgb3duZXIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihzdHViSml0LCBvd25lciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5l
Q2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZh
aWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwg
Y2FsbExpbmtJbmZvKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDI3NzI4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTU1LDcgKzE1NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmaW5hbGl6ZShNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGZhbGxiYWNrLCBjb25zdCBjaGFyKiB0
aHVua0tpbmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnRoaXMsIEdMT0JBTF9USFVOS19JRCk7CisgICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsK
ICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUVGh1bmtQdHJUYWc+KGZhbGxiYWNrKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2FsbHNbaV0uc2Vjb25kKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9u
IDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiB0aAogICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CiAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7
CiB9CiAKQEAgLTE0NSw3ICsxNDUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGxpCiAKICAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2FsbCk7
CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAiTGluayBjYWxsIHNsb3cgcGF0aCB0aHVuayIpOwogfQogCkBAIC0x
NTcsNyArMTU3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaQog
CiAgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbCk7
CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAiTGluayBwb2x5bW9ycGhpYyBjYWxsIHNsb3cgcGF0aCB0aHVuayIp
OwogfQogCkBAIC0yMzUsNyArMjM1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJS
b3V0aW5lUHRyVAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2ZXJ0
IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KICAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRp
b25WaXJ0dWFsQ2FsbCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAg
IlZpcnR1YWwgJXMgc2xvdyBwYXRoIHRodW5rIiwKQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyCiAKICAgICBqaXQuanVtcFRvRXhjZXB0
aW9uSGFuZGxlcih2bSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiJXMgJXMlcyB0cmFtcG9saW5lIiwgdGh1
bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24gPyAibmF0aXZl
IiA6ICJpbnRlcm5hbCIsIGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzID8g
IlRhaWwgV2l0aCBTYXZlZCBUYWdzICIgOiBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aG91
dFNhdmVkVGFncyA/ICJUYWlsIFdpdGhvdXQgU2F2ZWQgVGFncyAiIDogIiIsIHRvQ1N0cmluZyhr
aW5kKS5kYXRhKCkpOwogfQogCkBAIC01MzYsNyArNTM2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBhcgogICAgIGppdC5yZXQoKTsKICNlbmRpZiAvLyBFbmQgb2Yg
VVNFKEpTVkFMVUUzMl82NCkgc2VjdGlvbi4KIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJmaXh1cCBhcml0eSIp
OwogfQogCkBAIC01NDYsNyArNTQ2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiB1bgogCiAgICAgaml0LmJyZWFrcG9pbnQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJ1bnJl
YWNoYWJsZSB0aHVuayIpOwogfQogCkBAIC01OTcsNyArNTk3LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzdAogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpU
cnVzdGVkSW1tMzIoMCksIHN0cmluZ0dQUik7CiAgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1
bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgIlN0cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsKIH0KIApAQCAtMTI3NCw3ICsxMjc0LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBibwogICAgIGppdC5lbWl0RnVu
Y3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAg
IGxpbmtCdWZmZXIubGluayhub0NvZGUsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFn
Pih2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKHZtKSkpOwog
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAogICAgICAgICBsaW5rQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciBib3VuZCBmdW5jdGlvbiBjYWxscyB3aXRoIG5v
IGFyZ3VtZW50cyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1
bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuY3BwCShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgsNyArODgsNyBAQCBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2VuZXJhCiAgICAgaml0Lm1vdmUoSlNJbnRl
cmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIodGFyZ2V0KSwgc2NyYXRjaCk7CiAgICAgaml0LmZhckp1
bXAoc2NyYXRjaCwgT3BlcmF0aW9uUHRyVGFnKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGFnLCAiTExJbnQgJXMgdGh1bmsiLCB0aHVu
a0tpbmQpOwogfQogCkBAIC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjx0YWc+IGdlbmVyYQogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1t
UHRyKHRhcmdldCksIHNjcmF0Y2gpOwogICAgIGppdC5mYXJKdW1wKHNjcmF0Y2gsIE9wZXJhdGlv
blB0clRhZyk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIHRhZywgIkxMSW50ICVzIGp1bXAgdG8gcHJvbG9ndWUgdGh1bmsiLCB0aHVua0tp
bmQpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjx0YWc+IGdlbmVyYQogICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAgICBhc3NlcnRJc1RhZ2dl
ZFdpdGg8T3BlcmF0aW9uUHRyVGFnPih0YXJnZXQpOwogICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cih0YXJnZXQpLCBPcGVyYXRpb25QdHJUYWcpOwotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRo
dW5rKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGFnLCAiTExJbnQg
JXMgcmV0dXJuIHBvaW50IHRodW5rIiwgdGh1bmtLaW5kKTsKIH0KIApAQCAtMjQ3LDcgKzI0Nyw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXQKICAgICAgICAgaml0
LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgIGppdC5yZXQoKTsKIAotICAgICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOwogICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWUg
dGh1bmsiKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIGNvZGVSZWY7CkBAIC0zNTcsNyArMzU3LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0cgogICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgR1BSSW5mbzo6cmVnVDMpOwog
ICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1QzLCBPcGVyYXRpb25QdHJUYWcpOwogCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVU
b0pJVEdhdGVQdHJUYWcsICJMTEludCAlcyBjYWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKIH0KIApA
QCAtMzY5LDcgKzM2OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQ
dHIKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQ
UkluZm86Ondhc21TY3JhdGNoR1BSMSk7CiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6d2FzbVNj
cmF0Y2hHUFIxLCBPcGVyYXRpb25QdHJUYWcpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTElu
dCAlcyB3YXNtIGNhbGwgZ2F0ZSB0aHVuayIsIG5hbWUpOwogfQogCkBAIC0zODEsNyArMzgxLDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0cgogICAgIGppdC52YWxp
ZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjpsciwgR1BSSW5mbzo6YXJndW1lbnRHUFIy
KTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMCwgdGFnKTsKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRl
UHRyVGFnLCAiTExJbnQgdGFpbCBjYWxsIGdhdGUgdGh1bmsiKTsKIH0KIApAQCAtMzk0LDcgKzM5
NCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHIKIAogICAgICAg
ICBqaXQuZmFySnVtcChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTRW50cnlQdHJUYWcpOwogCi0g
ICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAg
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgImxvb3AgT1NSIGVudHJ5
IHRodW5rIikpOwogICAgIH0pOwogICAgIHJldHVybiBjb2RlUmVmOwpAQCAtNDEwLDcgKzQxMCw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHIKICAgICAgICAgaml0
LnVudGFnUmV0dXJuQWRkcmVzcygpOwogICAgICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjphcmd1
bWVudEdQUjAsIEpTRW50cnlQdHJUYWcpOwogCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAg
ICAgIGNvZGVSZWYuY29uc3RydWN0KEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRv
SklUR2F0ZVB0clRhZywgImVudHJ5IE9TUiBlbnRyeSB0aHVuayIpKTsKICAgICB9KTsKICAgICBy
ZXR1cm4gY29kZVJlZjsKQEAgLTQyNiw3ICs0MjYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
TmF0aXZlVG9KSVRHYXRlUHRyCiAgICAgICAgIGppdC51bnRhZ1JldHVybkFkZHJlc3MoKTsKICAg
ICAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6d2FzbVNjcmF0Y2hHUFIwLCBXYXNtRW50cnlQdHJU
YWcpOwogCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0
KEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIndhc20g
T1NSIGVudHJ5IHRodW5rIikpOwogICAgIH0pOwogICAgIHJldHVybiBjb2RlUmVmOwpAQCAtNDQx
LDcgKzQ0MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHIKIAog
ICAgICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMCwgRXhjZXB0aW9uSGFuZGxlclB0clRh
Zyk7CiAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCk7CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3Qo
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnLCAiZXhjZXB0
aW9uIGhhbmRsZXIgdGh1bmsiKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIGNvZGVSZWY7CkBAIC00
NTYsNyArNDU2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0cgog
CiAgICAgICAgIGppdC5yZXQoKTsKIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgICAgICBj
b2RlUmVmLmNvbnN0cnVjdChGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcsICJyZXR1cm5Gcm9tTExJbnQgdGh1bmsiKSk7CiAgICAgfSk7CiAgICAgcmV0dXJu
IGNvZGVSZWY7CkBAIC00NzIsNyArNDcyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2
ZVRvSklUR2F0ZVB0cgogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihw
b2ludGVyKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1Qz
LCBPcGVyYXRpb25QdHJUYWcpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJ0YWcgdGh1bmsiKTsK
IH0KIApAQCAtNDg3LDcgKzQ4Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJ
VEdhdGVQdHIKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRl
ciksIEdQUkluZm86OnJlZ1QzKTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMywgT3Bl
cmF0aW9uUHRyVGFnKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnLCAidW50YWcgdGh1bmsiKTsKIH0K
IApAQCAtNTAyLDcgKzUwMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdh
dGVQdHIKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbJl0gewogICAgICAgICBDQ2FsbEhl
bHBlcnMgaml0OwogICAgICAgICBKU0NfSklUX0NBR0VfQ09NUElMRV9JTVBMKGppdCk7Ci0gICAg
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpUaHVuayk7CiAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgImppdENhZ2VQdHIgdGh1bmsi
KSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIGNvZGVSZWY7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPTk9iamVj
dC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2lu
Y2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQcm9iZUNv
bnRleHQuaCIKQEAgLTE5MzcsNiArMTkzOCw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW8KIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9u
RHVtcENlbGwpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25JbmRl
eGluZ01vZGUpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jbmxp
bmVDYXBhY2l0eSk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkxp
bmtCdWZmZXJTdGF0cyk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
blZhbHVlKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uR2V0UElE
KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSGF2ZUFCYWRUaW1l
KTsKQEAgLTI1MzYsNiArMjUzOCwyMCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25JbmxpbmVDCiAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOwogfQogCisvLyBEdW1w
cyB0aGUgTGlua0J1ZmZlciBwcm9maWxlIHN0YXRpc3RpY3MgYXMgYSBzdHJpbmcuCisvLyBVc2Fn
ZTogJHZtLnByaW50KCR2bS5saW5rQnVmZmVyU3RhdHMoKSkKK0pTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbkxpbmtCdWZmZXJTdGF0cywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
CisjaWYgRU5BQkxFKEFTU0VNQkxFUikKKyAgICBXVEY6OlN0cmluZ1ByaW50U3RyZWFtIHN0cmVh
bTsKKyAgICBMaW5rQnVmZmVyOjpkdW1wUHJvZmlsZVN0YXRpc3RpY3MoJnN0cmVhbSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhnbG9iYWxPYmplY3QtPnZtKCksIHN0cmVh
bS50b1N0cmluZygpKSk7CisjZWxzZQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisjZW5kaWYKK30KKwogLy8gR2V0cyB0aGUgZGF0YUxvZyBkdW1wIG9mIGEgZ2l2
ZW4gSlMgdmFsdWUgYXMgYSBzdHJpbmcuCiAvLyBVc2FnZTogJHZtLnByaW50KCJ2YWx1ZSA9ICIg
KyAkdm0udmFsdWUoanNWYWx1ZSkpCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25W
YWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KSkKQEAgLTM2MzMsNiArMzY0OSw3IEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQogCiAgICAgYWRkRnVuY3Rpb24odm0sICJpbmRleGluZ01vZGUiLCBmdW5jdGlvbklu
ZGV4aW5nTW9kZSwgMSk7CiAgICAgYWRkRnVuY3Rpb24odm0sICJpbmxpbmVDYXBhY2l0eSIsIGZ1
bmN0aW9uSW5saW5lQ2FwYWNpdHksIDEpOworICAgIGFkZEZ1bmN0aW9uKHZtLCAibGlua0J1ZmZl
clN0YXRzIiwgZnVuY3Rpb25MaW5rQnVmZmVyU3RhdHMsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZt
LCAidmFsdWUiLCBmdW5jdGlvblZhbHVlLCAxKTsKICAgICBhZGRGdW5jdGlvbih2bSwgImdldHBp
ZCIsIGZ1bmN0aW9uR2V0UElELCAwKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJCUVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAxLDcgKzEw
MSw3IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmYKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+IHRpZXJVcCA9IG1ha2VVbmlxdWU8VGllclVwQ291bnQ+
KCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGZ1bmN0aW9uID0gY29t
cGlsZUZ1bmN0aW9uKG1fZnVuY3Rpb25JbmRleCwgY29udGV4dCwgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIHRpZXJVcC5nZXQoKSk7CiAKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRl
eHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Cisg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxs
cHRyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNtLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwog
ICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAg
ICAgIEJhc2U6OmZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZygiT3V0IG9mIGV4ZWN1
dGFibGUgbWVtb3J5IHdoaWxlIHRpZXJpbmcgdXAgZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5n
OjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1cm47CkBAIC0yMjAsNyAr
MjIwLDcgQEAgdm9pZCBCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKGNvbgogICAgICAg
ICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwogICAgICAgICBBU1NFUlQo
ZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25JbmRleFNw
YWNlU2l6ZSgpKTsKICAgICAgICAgewotICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRy
eXBvaW50SklULCBudWxscHRyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNtLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkpIHsKICAgICAgICAgICAgICAgICBCYXNlOjpmYWlsKGxvY2tlciwgbWFr
ZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IGluIGZ1bmN0aW9uIGF0IGluZGV4ICIs
IFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgQkJRUGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlv
bihjb24KICAgICAgICAgfQogCiAgICAgICAgIGlmIChjb25zdCBhdXRvJiBlbWJlZGRlclRvV2Fz
bUludGVybmFsRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0
KGZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNv
bnRleHQuZW1iZWRkZXJFbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0LmVtYmVkZGVy
RW50cnlwb2ludEpJVCwgbnVsbHB0ciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6V2FzbSwgSklUQ29t
cGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRp
ZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAgQmFzZTo6ZmFpbChsb2NrZXIs
IG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBpbiBmdW5jdGlvbiBlbnRyeXBv
aW50IGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJp
bmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
aW5kaW5nLmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsNyArNzcsNyBAQCBFeHBl
Y3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAgICAgaml0LmxvYWRQdHIoc2Ny
YXRjaCwgc2NyYXRjaCk7CiAgICAgaml0LmZhckp1bXAoc2NyYXRjaCwgV2FzbUVudHJ5UHRyVGFn
KTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmssIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7CiAgICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9m
TWVtb3J5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxh
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50
UGxhbi5jcHAJKHJldmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21MTEludFBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIExM
SW50UGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbihjCiAgICAgICAgICAgICBqdW1wc1tpXSA9
IGppdC5qdW1wKCk7CiAgICAgICAgIH0KIAotICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6V2FzbSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgaWYgKFVOTElLRUxZ
KGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKICAgICAgICAgICAgIEJhc2U6OmZh
aWwobG9ja2VyLCAiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IGluIFdhc20gTExJbnQgZW50cnkg
dGh1bmtzIik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBM
TEludFBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24oYwogICAgICAgICAgICAgTWVtb3J5TW9k
ZSBtb2RlID0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc7CiAgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gZnVuY3Rpb24gPSBjcmVhdGVKU1RvV2FzbVdyYXBw
ZXIoaml0LCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5k
ZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtb2RlLCBmdW5jdGlvbkluZGV4KTsKIAot
ICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0ciwgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKKyAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51
bGxwdHIsIExpbmtCdWZmZXI6OlByb2ZpbGU6Oldhc20sIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgp
KSkgewogICAgICAgICAgICAgICAgIEJhc2U6OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQg
b2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gZW50cnlwb2ludCBhdCBpbmRleCAiLCBT
dHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JP
U1JFbnRyeVBsYW4uY3BwCShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgz
LDcgKzgzLDcgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpbwogICAg
IH0KIAogICAgIEVudHJ5cG9pbnQgb21nRW50cnlwb2ludDsKLSAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBv
aW50SklULCBudWxscHRyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpXYXNtLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOwogICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpKSB7CiAgICAgICAgIEJhc2U6OmZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZygi
T3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxlIHRpZXJpbmcgdXAgZnVuY3Rpb24gYXQgaW5k
ZXggIiwgU3RyaW5nOjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCShyZXZp
c2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgT01HUGxhbjo6d29yayhD
b21waWxhdGlvbkVmZm9ydCkKICAgICB9CiAKICAgICBFbnRyeXBvaW50IG9tZ0VudHJ5cG9pbnQ7
Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBu
dWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6V2FzbSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAoVU5MSUtFTFkobGlua0J1
ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgewogICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2Nr
KG1fbG9jayksIG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVy
aW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRl
eCkpKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRodW5rcy5jcHAJKHJldmlzaW9uIDI3NzI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGgKICAgICBqaXQuZmFySnVtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgaml0
LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hvdWxkIG5vdCByZWFjaCB0aGlzLgogCi0gICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbikpOwogICAgIHJldHVybiBGSU5BTElaRV9XQVNN
X0NPREUobGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJUaHJvdyBleGNlcHRpb24gZnJvbSBX
YXNtIik7CiB9CkBAIC02Nyw3ICs2Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdGgKICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1z
dGFja1NwYWNlKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cp
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICBhdXRvIGp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIgPSBqaXQuanVtcCgpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVu
a3M6OnNpbmdsZXRvbigpLnN0dWIobG9ja2VyLCB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9XQVNNX0NPREUobGlua0J1
ZmZlciwgSklUVGh1bmtQdHJUYWcsICJUaHJvdyBzdGFjayBvdmVyZmxvdyBmcm9tIFdhc20iKTsK
IH0KQEAgLTkzLDcgKzkzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB0cgogCiAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwot
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX1dBU01fQ09ERShsaW5rQnVmZmVyLCBK
SVRUaHVua1B0clRhZywgIlRyaWdnZXIgT01HIGVudHJ5IHRpZXIgdXAiKTsKIH0KICNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAkocmV2aXNp
b24gMjc3Mjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MTcsNyArNDE3LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPFdhc21FbnRyeQogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OlRodW5rLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChV
TkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwCShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcgKzQzMCw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWIKICNlbmRpZgogICAg
IGF1dG8ganVtcFRvSG9zdENhbGxUaHVuayA9IGppdC5qdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoaml0LCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIsIExpbmtCdWZmZXI6OlByb2ZpbGU6Oldh
c20sIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIu
ZGlkRmFpbFRvQWxsb2NhdGUoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gMjc3Mjg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5NjUsNyArMzk2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQog
ICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKIAotICAg
ICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnRoaXMsIFJFR0VYUF9DT0RFX0lELCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOworICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnRoaXMsIFJF
R0VYUF9DT0RFX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpZYXJySklULCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOwogICAgICAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7
CiAgICAgICAgICAgICBjb2RlQmxvY2suc2V0RmFsbEJhY2tXaXRoRmFpbHVyZVJlYXNvbihKSVRG
YWlsdXJlUmVhc29uOjpFeGVjdXRhYmxlTWVtb3J5QWxsb2NhdGlvbkZhaWx1cmUpOwogICAgICAg
ICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3Mjg2KQorKysgU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEt
MDUtMTAgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBw
b3J0IHRvIGNvbGxlY3Qgc3RhdHMgb24gY3VtdWxhdGl2ZSBMaW5rQnVmZmVyIGxpbmtlZCBzaXpl
cyBiYXNlZCBvbiBwcm9maWxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNTYxNworCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgor
CisgICAgICAgICogY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpjb21waWxlKToKKwog
MjAyMS0wNS0xMCAgQW5kcmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CiAKICAg
ICAgICAgRml4IGZvciBhc3NlcnQgY3Jhc2ggaW4gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvc2l0
aW9uRm9yVGV4dE1hcmtlckRhdGEuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0
b3JDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVj
dG9yQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyNzcyODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Nq
aXQvU2VsZWN0b3JDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0NzEsNyArMTQ3MSw3IEBAIGlubGlu
ZSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIFNlbGVjdG8KICAgICAgICAgcmV0dXJuIFNlbGVj
dG9yQ29tcGlsYXRpb25TdGF0dXM6OkNhbm5vdENvbXBpbGU7CiAgICAgfQogCi0gICAgSlNDOjpM
aW5rQnVmZmVyIGxpbmtCdWZmZXIobV9hc3NlbWJsZXIsIENTU19DT0RFX0lELCBKU0M6OkpJVENv
bXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgSlNDOjpMaW5rQnVmZmVyIGxpbmtCdWZmZXIobV9hc3Nl
bWJsZXIsIENTU19DT0RFX0lELCBKU0M6OkxpbmtCdWZmZXI6OlByb2ZpbGU6OkNTU0pJVCwgSlND
OjpKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmICghbGlua0J1ZmZlci5pc1ZhbGlkKCkp
IHsKICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpO
b3RDb21waWxlZCBidXQgdGhhdCB3b3VsZCBjYXVzZSB1cyB0byByZS1lbnRlcgogICAgICAgICAv
LyB0aGUgQ1NTIEpJVCBldmVyeSB0aW1lIHdlIGV2YWx1YXRlIHRoYXQgc2VsZWN0b3IuCg==
</data>
<flag name="commit-queue"
          id="449084"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428216</attachid>
            <date>2021-05-10 16:13:45 -0700</date>
            <delta_ts>2021-05-10 16:13:45 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-225617.patch</filename>
            <type>text/plain</type>
            <size>59920</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3MzAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMiBA
QAorMjAyMS0wNS0xMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIHN1cHBvcnQgdG8gY29sbGVjdCBzdGF0cyBvbiBjdW11bGF0aXZlIExpbmtCdWZmZXIgbGlu
a2VkIHNpemVzIGJhc2VkIG9uIHByb2ZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NjE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBC
YXJhdGkuCisKKyAgICAgICAgVGhlcmUgYXJlIDIgd2F5cyB0byBkdW1wIHRoZSBzdGF0czoKKyAg
ICAgICAgMS4gU3BlY2lmeSAtLWR1bXBMaW5rQnVmZmVyU3RhdHMgYXMgYW4gYXJndW1lbnQgdG8g
dGhlIGpzYyBzaGVsbC4KKyAgICAgICAgMi4gQ2FsbCAkdm0uZHVtcExpbmtCdWZmZXJTdGF0cygp
IGZyb20geW91ciBKUyBzY3JpcHQgdG8gZ2V0IHRoZSBzdGF0cyBhcyBhIHN0cmluZy4KKyAgICAg
ICAgICAgZS5nLgorICAgICAgICAgICAgICAgICR2bS5wcmludCgkdm0uZHVtcExpbmtCdWZmZXJT
dGF0cygpKTsKKworICAgICAgICBIZXJlJ3MgYW4gZXhhbXBsZSBvZiB3aGF0IHRoZSBkdW1wIGxv
b2tzIGxpa2U6CisKKyAgICAgICAgICAgIEN1bW11bGF0aXZlIExpbmtCdWZmZXIgcHJvZmlsZSBz
aXplczoKKyAgICAgICAgICAgICAgICAgICAgICAgQmFzZWxpbmVKSVQ6IDc5NDgwMzIwICg3NS43
OTgzNDAgTUIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHOiAzNjEwODY3MiAo
MzQuNDM1OTEzIE1CKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHVuazogMjI0OTUz
NjAgKDIxLjQ1MzI0NyBNQikKKyAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FjaGU6IDE5
NTM4NTIxICgxOC42MzMzODYgTUIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRM
OiA1MTg2MjQwICg0Ljk0NTk4NCBNQikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdh
c206IDE5OTgyNzIgKDEuOTA1NzAxIE1CKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgWWFy
ckpJVDogMTMzMTA3MiAoMS4yNjk0MDkgTUIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTSklUOiAwCisgICAgICAgICAgICAgICAgICAgICBVbmNhdGVnb3JpemVkOiAwCisKKyAgICAg
ICAgVGhlIHN0YXRzIGFyZSBjdXJyZW50bHkgZ3JvdXBlZCBpbnRvIHNvbWUgY29hcnNlIHByb2Zp
bGVzLiAgSWYgbmVlZGVkLCB3ZSBjYW4KKyAgICAgICAgYnJlYWsgdGhlc2UgZG93biBpbnRvIG1v
cmUgZmluZSBncmFpbiBwcm9maWxlcyBsYXRlci4KKworICAgICAgICAqIGFzc2VtYmxlci9MaW5r
QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlv
bik6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmR1bXBQcm9maWxlU3RhdGlzdGljcyk6Cisg
ICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZl
cjo6TGlua0J1ZmZlcik6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6bGlua0NvZGVJbmxpbmUpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxl
RnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIGRmZy9ERkdUaHVua3Mu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpERkc6Om9zckVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAq
IGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAg
ICAgKiBmdGwvRlRMTGF6eVNsb3dQYXRoLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xv
d1BhdGg6OmdlbmVyYXRlKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGZ0bC9GVExUaHVua3Mu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OmdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpGVEw6OnNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OmppdFdyaXRl
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyk6CisgICAgICAgICogaml0L0pJVE1hdGhJQy5oOgor
ICAgICAgICAoSlNDOjpKSVRNYXRoSUM6OmdlbmVyYXRlT3V0T2ZMaW5lKToKKyAgICAgICAgKiBq
aXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAg
ICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZh
dGVDb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0
UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAg
ICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbCk6CisgICAgICAgICogaml0L1NwZWNpYWxp
emVkVGh1bmtKSVQuaDoKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6ZmluYWxp
emUpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjp0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjps
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2Fs
bFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yKToKKyAgICAg
ICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6YXJpdHlGaXh1cEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnVucmVhY2hhYmxlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nR2V0QnlWYWxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpib3VuZEZ1bmN0
aW9uQ2FsbEdlbmVyYXRvcik6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKENvbW1hbmRM
aW5lOjpwYXJzZUFyZ3VtZW50cyk6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBsbGlu
dC9MTEludFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmF0ZVRodW5rV2l0
aEp1bXBUbyk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmF0ZVRodW5rV2l0aEp1bXBUb1By
b2xvZ3VlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvTExJ
bnRSZXR1cm5Qb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZh
bHVlVGh1bmspOgorICAgICAgICAoSlNDOjpMTEludDo6Y3JlYXRlSlNHYXRlVGh1bmspOgorICAg
ICAgICAoSlNDOjpMTEludDo6Y3JlYXRlV2FzbUdhdGVUaHVuayk6CisgICAgICAgIChKU0M6OkxM
SW50OjpjcmVhdGVUYWlsQ2FsbEdhdGUpOgorICAgICAgICAoSlNDOjpMTEludDo6bG9vcE9TUkVu
dHJ5R2F0ZVRodW5rKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmVudHJ5T1NSRW50cnlHYXRlVGh1
bmspOgorICAgICAgICAoSlNDOjpMTEludDo6d2FzbU9TUkVudHJ5R2F0ZVRodW5rKToKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OmV4Y2VwdGlvbkhhbmRsZXJHYXRlVGh1bmspOgorICAgICAgICAoSlND
OjpMTEludDo6cmV0dXJuRnJvbUxMSW50R2F0ZVRodW5rKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OnRhZ0dhdGVUaHVuayk6CisgICAgICAgIChKU0M6OkxMSW50Ojp1bnRhZ0dhdGVUaHVuayk6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpqaXRDYWdlUHRyVGh1bmspOgorICAgICAgICAqIHRvb2xzL0pT
RG9sbGFyVk0uY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgor
ICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogd2Fz
bS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAg
ICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRv
V2FzbSk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKiB3YXNt
L1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdGb3JP
U1JFbnRyeVBsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21UaHVu
a3MuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjp0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJpZ2dlck9NR0VudHJ5VGll
clVwVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjp3YXNtVG9KUyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxs
RW50cnlwb2ludFNsb3cpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisKIDIwMjEtMDUt
MDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBjYWxs
cyB0byB0aGUgU3RyaW5nOjp0b0ludCBmYW1pbHkgb2YgZnVuY3Rpb25zIGZyb20gSmF2YVNjcmlw
dENvcmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyNzczMDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMxLDYgKzQzMSw3
IEBAIHB1YmxpYzoKICAgICBib29sIG1fdHJlYXRXYXRjaGRvZ0V4Y2VwdGlvbkFzU3VjY2VzcyB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2Fsd2F5c0R1bXBVbmNhdWdodEV4Y2VwdGlvbiB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2R1bXBNZW1vcnlGb290cHJpbnQgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9kdW1wTGlua0J1ZmZlclN0YXRzIHsgZmFsc2UgfTsKICAgICBib29sIG1fZHVtcFNhbXBsaW5n
UHJvZmlsZXJEYXRhIHsgZmFsc2UgfTsKICAgICBib29sIG1fZW5hYmxlUmVtb3RlRGVidWdnaW5n
IHsgZmFsc2UgfTsKICAgICBib29sIG1fY2FuQmxvY2tJc0ZhbHNlIHsgZmFsc2UgfTsKQEAgLTMz
NjAsNiArMzM2MSwxMSBAQCB2b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJn
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCisgICAgICAgIGlmICghc3RyY21w
KGFyZywgIi0tZHVtcExpbmtCdWZmZXJTdGF0cyIpKSB7CisgICAgICAgICAgICBtX2R1bXBMaW5r
QnVmZmVyU3RhdHMgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwog
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZXhjZXB0aW9uU3RyTGVuZ3RoID0gc3RybGVu
KCItLWV4Y2VwdGlvbj0iKTsKICAgICAgICAgaWYgKCFzdHJuY21wKGFyZywgIi0tZXhjZXB0aW9u
PSIsIGV4Y2VwdGlvblN0ckxlbmd0aCkpIHsKICAgICAgICAgICAgIG1fdW5jYXVnaHRFeGNlcHRp
b25OYW1lID0gU3RyaW5nKGFyZyArIGV4Y2VwdGlvblN0ckxlbmd0aCk7CkBAIC0zNjIwLDYgKzM2
MjYsMTEgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICBwcmlu
dGYoIk1lbW9yeSBGb290cHJpbnQ6XG4gICAgQ3VycmVudCBGb290cHJpbnQ6ICUiIFBSSXU2NCAi
XG4gICAgUGVhayBGb290cHJpbnQ6ICUiIFBSSXU2NCAiXG4iLCBmb290cHJpbnQuY3VycmVudCwg
Zm9vdHByaW50LnBlYWspOwogICAgIH0KIAorI2lmIEVOQUJMRShBU1NFTUJMRVIpCisgICAgaWYg
KG1haW5Db21tYW5kTGluZS0+bV9kdW1wTGlua0J1ZmZlclN0YXRzKQorICAgICAgICBMaW5rQnVm
ZmVyOjpkdW1wUHJvZmlsZVN0YXRpc3RpY3MoKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtC
dWZmZXIuY3BwCShyZXZpc2lvbiAyNzczMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiArNDAsOCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorc2l6ZV90IExpbmtCdWZmZXI6OnNfcHJvZmlsZUN1bW11bGF0
aXZlTGlua2VkU2l6ZXNbTGlua0J1ZmZlcjo6bnVtYmVyT2ZQcm9maWxlc107CisKIGJvb2wgc2hv
dWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGlmIChj
b2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgp
KSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkKQEAgLTQ3Nyw2ICs0NzksNyBAQCB2
b2lkIExpbmtCdWZmZXI6OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogICAgIG1fY29tcGxldGVkID0g
dHJ1ZTsKICNlbmRpZgogICAgIAorICAgIHNfcHJvZmlsZUN1bW11bGF0aXZlTGlua2VkU2l6ZXNb
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fcHJvZmlsZSldICs9IG1fc2l6ZTsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6Y2FjaGVGbHVzaChjb2RlKCksIG1fc2l6ZSk7CiB9CiAKQEAgLTUyNyw2ICs1MzAs
NTkgQEAgdm9pZCBMaW5rQnVmZmVyOjpkdW1wQ29kZSh2b2lkKiBjb2RlLCBzaQogfQogI2VuZGlm
CiAKK3ZvaWQgTGlua0J1ZmZlcjo6ZHVtcFByb2ZpbGVTdGF0aXN0aWNzKE9wdGlvbmFsPFByaW50
U3RyZWFtKj4gb3V0U3RyZWFtKQoreworICAgIHN0cnVjdCBTdGF0IHsKKyAgICAgICAgUHJvZmls
ZSBwcm9maWxlOworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICB9OworCisgICAgU3RhdCBzb3J0
ZWRTdGF0c1tudW1iZXJPZlByb2ZpbGVzXTsKKyAgICBQcmludFN0cmVhbSYgb3V0ID0gb3V0U3Ry
ZWFtID8gKm91dFN0cmVhbS52YWx1ZSgpIDogV1RGOjpkYXRhRmlsZSgpOworCisjZGVmaW5lIFJF
VFVSTl9MSU5LQlVGRkVSX1BST0ZJTEVfTkFNRShuYW1lKSBjYXNlIFByb2ZpbGU6Om5hbWU6IHJl
dHVybiAjbmFtZTsKKyAgICBhdXRvIG5hbWUgPSBbXSAoUHJvZmlsZSBwcm9maWxlKSAtPiBjb25z
dCBjaGFyKiB7CisgICAgICAgIHN3aXRjaCAocHJvZmlsZSkgeworICAgICAgICAgICAgRk9SX0VB
Q0hfTElOS0JVRkZFUl9QUk9GSUxFKFJFVFVSTl9MSU5LQlVGRkVSX1BST0ZJTEVfTkFNRSkKKyAg
ICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07Cisj
dW5kZWYgUkVUVVJOX0xJTktCVUZGRVJfUFJPRklMRV9OQU1FCisKKyAgICBhdXRvIGR1bXBTdGF0
ID0gWyZdIChjb25zdCBTdGF0JiBzdGF0KSB7CisgICAgICAgIGNoYXIgZm9ybWF0dGVkTmFtZVsy
MV07CisgICAgICAgIHNucHJpbnRmKGZvcm1hdHRlZE5hbWUsIDIxLCAiJTIwcyIsIG5hbWUoc3Rh
dC5wcm9maWxlKSk7CisKKyAgICAgICAgY29uc3QgY2hhciogbGFyZ2VyVW5pdCA9IG51bGxwdHI7
CisgICAgICAgIGRvdWJsZSBzaXplSW5MYXJnZXJVbml0ID0gc3RhdC5zaXplOworICAgICAgICBp
ZiAoc3RhdC5zaXplID4gMSAqIE1CKSB7CisgICAgICAgICAgICBsYXJnZXJVbml0ID0gIk1CIjsK
KyAgICAgICAgICAgIHNpemVJbkxhcmdlclVuaXQgPSBzaXplSW5MYXJnZXJVbml0IC8gTUI7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc3RhdC5zaXplID4gMSAqIEtCKSB7CisgICAgICAgICAgICBsYXJn
ZXJVbml0ID0gIktCIjsKKyAgICAgICAgICAgIHNpemVJbkxhcmdlclVuaXQgPSBzaXplSW5MYXJn
ZXJVbml0IC8gS0I7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGFyZ2VyVW5pdCkKKyAgICAg
ICAgICAgIG91dC5wcmludGxuKCIgICIsIGZvcm1hdHRlZE5hbWUsICI6ICIsIHN0YXQuc2l6ZSwg
IiAoIiwgc2l6ZUluTGFyZ2VyVW5pdCwgIiAiLCBsYXJnZXJVbml0LCAiKSIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBvdXQucHJpbnRsbigiICAiLCBmb3JtYXR0ZWROYW1lLCAiOiAiLCBz
dGF0LnNpemUpOworICAgIH07CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVy
T2ZQcm9maWxlczsgKytpKSB7CisgICAgICAgIHNvcnRlZFN0YXRzW2ldLnByb2ZpbGUgPSBzdGF0
aWNfY2FzdDxQcm9maWxlPihpKTsKKyAgICAgICAgc29ydGVkU3RhdHNbaV0uc2l6ZSA9IHNfcHJv
ZmlsZUN1bW11bGF0aXZlTGlua2VkU2l6ZXNbaV07CisgICAgfQorICAgIHN0ZDo6c29ydCgmc29y
dGVkU3RhdHNbMF0sICZzb3J0ZWRTdGF0c1tudW1iZXJPZlByb2ZpbGVzXSwKKyAgICAgICAgW10g
KFN0YXQmIGEsIFN0YXQmIGIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIGEuc2l6ZSA+
IGIuc2l6ZTsKKyAgICAgICAgfSk7CisKKyAgICBvdXQucHJpbnRsbigiQ3VtbXVsYXRpdmUgTGlu
a0J1ZmZlciBwcm9maWxlIHNpemVzOiIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZlByb2ZpbGVzOyArK2kpCisgICAgICAgIGR1bXBTdGF0KHNvcnRlZFN0YXRzW2ldKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJl
dmlzaW9uIDI3NzMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPHd0Zi9E
YXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTgzLDI0ICs4NCw0OCBAQCBjbGFzcyBMaW5rQnVmZmVyIHsKICNlbmRpZgogCiBwdWJs
aWM6Ci0gICAgTGlua0J1ZmZlcihNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIsIHZvaWQq
IG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBKSVRDb21waWxhdGlvbk11
c3RTdWNjZWVkKQorCisjZGVmaW5lIEZPUl9FQUNIX0xJTktCVUZGRVJfUFJPRklMRSh2KSBcCisg
ICAgdihCYXNlbGluZUpJVCkgXAorICAgIHYoREZHKSBcCisgICAgdihGVEwpIFwKKyAgICB2KElu
bGluZUNhY2hlKSBcCisgICAgdihUaHVuaykgXAorICAgIHYoV2FzbSkgXAorICAgIHYoWWFyckpJ
VCkgXAorICAgIHYoQ1NTSklUKSBcCisgICAgdihVbmNhdGVnb3JpemVkKQorCisjZGVmaW5lIERF
Q0xBUkVfTElOS0JVRkZFUl9QUk9GSUxFKG5hbWUpIG5hbWUsCisgICAgZW51bSBjbGFzcyBQcm9m
aWxlIHsKKyAgICAgICAgRk9SX0VBQ0hfTElOS0JVRkZFUl9QUk9GSUxFKERFQ0xBUkVfTElOS0JV
RkZFUl9QUk9GSUxFKQorICAgIH07CisjdW5kZWYgREVDTEFSRV9MSU5LQlVGRkVSX1BST0ZJTEUK
KworI2RlZmluZSBDT1VOVF9MSU5LQlVGRkVSX1BST0ZJTEUobmFtZSkgKyAxCisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlByb2ZpbGVzID0gRk9SX0VBQ0hfTElOS0JVRkZF
Ul9QUk9GSUxFKENPVU5UX0xJTktCVUZGRVJfUFJPRklMRSk7CisjdW5kZWYgQ09VTlRfTElOS0JV
RkZFUl9QUk9GSUxFCisKKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2Vt
Ymxlciwgdm9pZCogb3duZXJVSUQsIFByb2ZpbGUgcHJvZmlsZSA9IFByb2ZpbGU6OlVuY2F0ZWdv
cml6ZWQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1
Y2NlZWQpCiAgICAgICAgIDogbV9zaXplKDApCiAgICAgICAgICwgbV9kaWRBbGxvY2F0ZShmYWxz
ZSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCiAjZW5kaWYK
KyAgICAgICAgLCBtX3Byb2ZpbGUocHJvZmlsZSkKICAgICB7CiAgICAgICAgIFVOVVNFRF9QQVJB
TShvd25lclVJRCk7CiAgICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCBlZmZvcnQpOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgTGlua0J1ZmZlcihNYWNyb0Fz
c2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGNvZGUs
IHNpemVfdCBzaXplLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkLCBib29sIHNob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0aW9uID0gdHJ1ZSkK
KyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz4gY29kZSwgc2l6ZV90IHNpemUsIFByb2ZpbGUgcHJvZmlsZSA9IFBy
b2ZpbGU6OlVuY2F0ZWdvcml6ZWQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCA9IEpJVENv
bXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGJvb2wgc2hvdWxkUGVyZm9ybUJyYW5jaENvbXBhY3Rpb24g
PSB0cnVlKQogICAgICAgICA6IG1fc2l6ZShzaXplKQogICAgICAgICAsIG1fZGlkQWxsb2NhdGUo
ZmFsc2UpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fY29tcGxldGVkKGZhbHNlKQogI2Vu
ZGlmCisgICAgICAgICwgbV9wcm9maWxlKHByb2ZpbGUpCiAgICAgICAgICwgbV9jb2RlKGNvZGUu
dGVtcGxhdGUgcmV0YWdnZWQ8TGlua0J1ZmZlclB0clRhZz4oKSkKICAgICB7CiAjaWYgRU5BQkxF
KEJSQU5DSF9DT01QQUNUSU9OKQpAQCAtMjk4LDYgKzMyMyw4IEBAIHB1YmxpYzoKICAgICBib29s
IHdhc0FscmVhZHlEaXNhc3NlbWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FscmVhZHlEaXNhc3Nl
bWJsZWQ7IH0KICAgICB2b2lkIGRpZEFscmVhZHlEaXNhc3NlbWJsZSgpIHsgbV9hbHJlYWR5RGlz
YXNzZW1ibGVkID0gdHJ1ZTsgfQogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
ZHVtcFByb2ZpbGVTdGF0aXN0aWNzKE9wdGlvbmFsPFByaW50U3RyZWFtKj4gPSBXVEY6Om51bGxv
cHQpOworCiBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVSZWY8TGlua0J1ZmZl
clB0clRhZz4gZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5SW1wbCgpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIENvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gZmluYWxpemVDb2RlV2l0aERp
c2Fzc2VtYmx5SW1wbChib29sIGR1bXBEaXNhc3NlbWJseSwgY29uc3QgY2hhciogZm9ybWF0LCAu
Li4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDMsIDQpOwpAQCAtMzU1LDcgKzM4Miw3IEBAIHByaXZh
dGU6CiAjaWYgRFVNUF9DT0RFCiAgICAgc3RhdGljIHZvaWQgZHVtcENvZGUodm9pZCogY29kZSwg
c2l6ZV90KTsKICNlbmRpZgotICAgIAorCiAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+IG1fZXhlY3V0YWJsZU1lbW9yeTsKICAgICBzaXplX3QgbV9zaXplOwogI2lmIEVOQUJMRShC
UkFOQ0hfQ09NUEFDVElPTikKQEAgLTM3Myw4ICs0MDAsMTEgQEAgcHJpdmF0ZToKICAgICBib29s
IG1faXNKdW1wSXNsYW5kIHsgZmFsc2UgfTsKICNlbmRpZgogICAgIGJvb2wgbV9hbHJlYWR5RGlz
YXNzZW1ibGVkIHsgZmFsc2UgfTsKKyAgICBQcm9maWxlIG1fcHJvZmlsZSB7IFByb2ZpbGU6OlVu
Y2F0ZWdvcml6ZWQgfTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRh
Zz4gbV9jb2RlOwogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXIm
KT4+PiBtX2xpbmtUYXNrczsKKworICAgIHN0YXRpYyBzaXplX3Qgc19wcm9maWxlQ3VtbXVsYXRp
dmVMaW5rZWRTaXplc1tudW1iZXJPZlByb2ZpbGVzXTsKIH07CiAKICNpZiBPUyhMSU5VWCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAyNzczMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5s
aW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NCw3ICsxNTQsNyBAQCBBTFdBWVNf
SU5MSU5FIHN0YXRpYyBib29sIGxpbmtDb2RlSW5saW5lCiB7CiAgICAgaWYgKGppdC5tX2Fzc2Vt
Ymxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIDw9IHN0dWJJbmZvLmlubGluZVNpemUoKSkgewogICAg
ICAgICBib29sIG5lZWRzQnJhbmNoQ29tcGFjdGlvbiA9IHRydWU7Ci0gICAgICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJJbmZvLnN0YXJ0LCBzdHViSW5mby5pbmxpbmVTaXplKCks
IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7CisgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJJbmZvLnN0YXJ0LCBzdHViSW5mby5p
bmxpbmVTaXplKCksIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlLCBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkLCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOwogICAgICAgICBBU1NFUlQo
bGlua0J1ZmZlci5pc1ZhbGlkKCkpOwogICAgICAgICBmdW5jdGlvbihsaW5rQnVmZmVyKTsKICAg
ICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIklubGluZUFjY2Vzc1R5
cGU6ICclcyciLCBuYW1lKTsKQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6
cmV3aXJlU3R1YkFzSnVtcChTdHJ1CiAKICAgICAvLyBXZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQg
aGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUganVtcGluZyBpbnRvIHRoZSBtaWRkbGUgb2Yg
YW4gSUMuCiAgICAgYm9vbCBuZWVkc0JyYW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKLSAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoaml0LCBzdHViSW5mby5zdGFydCwgaml0Lm1fYXNzZW1ibGVyLmJ1
ZmZlcigpLmNvZGVTaXplKCksIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNo
Q29tcGFjdGlvbik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1YkluZm8uc3Rh
cnQsIGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbmVlZHNCcmFuY2hD
b21wYWN0aW9uKTsKICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7CiAg
ICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIHRhcmdldCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNp
b24gMjc3MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM0LDcgKzczNCw3IEBAIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICAgICAgY2FsbFNpdGVJbmRleEZvckV4
Y2VwdGlvbkhhbmRsaW5nID0gc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5n
KCk7CiAgICAgfQogCi0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNv
ZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7CiAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAg
ICAgICBpZiAoUG9seW1vcnBoaWNBY2Nlc3NJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAg
IGRhdGFMb2coIkRpZCBmYWlsIHRvIGFsbG9jYXRlLlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjc3MzAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKCkKICAgICBt
X3NwZWN1bGF0aXZlLT5jcmVhdGVPU1JFbnRyaWVzKCk7CiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAK
LSAgICBhdXRvIGxpbmtCdWZmZXIgPSBtYWtlVW5pcXVlPExpbmtCdWZmZXI+KCp0aGlzLCBtX2Nv
ZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBhdXRvIGxpbmtCdWZmZXIgPSBt
YWtlVW5pcXVlPExpbmtCdWZmZXI+KCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6REZHLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChsaW5rQnVmZmVyLT5k
aWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnNldEZpbmFsaXpl
cihtYWtlVW5pcXVlPEZhaWxlZEZpbmFsaXplcj4obV9ncmFwaC5tX3BsYW4pKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNDkxLDcgKzQ5MSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5j
dGlvbigpCiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAKICAgICAvLyA9PT0gTGluayA9PT0KLSAgICBh
dXRvIGxpbmtCdWZmZXIgPSBtYWtlVW5pcXVlPExpbmtCdWZmZXI+KCp0aGlzLCBtX2NvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBhdXRvIGxpbmtCdWZmZXIgPSBtYWtlVW5p
cXVlPExpbmtCdWZmZXI+KCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
REZHLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChsaW5rQnVmZmVyLT5kaWRGYWls
VG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnNldEZpbmFsaXplcihtYWtl
VW5pcXVlPEZhaWxlZEZpbmFsaXplcj4obV9ncmFwaC5tX3BsYW4pKTsKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lv
biAyNzczMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjAzLDcgKzIwMyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Db21waWwKIAogICAgICAgICBPU1JFeGl0Ojpjb21waWxlRXhpdChqaXQsIHZt
LCBleGl0LCBvcGVyYW5kcywgcmVjb3ZlcnkpOwogCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBjb2RlQmxvY2spOworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgICAgIGV4aXQu
bV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgICAgIHNob3VsZER1bXBEaXNhc3Nl
bWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZHT1NS
RXhpdCgpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsIE9TUkV4aXRQdHJUYWcsCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAyNzczMDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC04OSw3ICs4OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
b3MKIAogICAgIGppdC5mYXJKdW1wKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnZt
Lm9zckV4aXRKdW1wRGVzdGluYXRpb24pLCBPU1JFeGl0UHRyVGFnKTsKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Db21waWxlT1NSRXhpdCkpOwogCkBAIC0xMzQsNyAr
MTM0LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcwogCiAgICAg
aml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OlRodW5rKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsICJERkcgT1NSIGVudHJ5IHRodW5rIik7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjc3MzAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6
OlJlCiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7CiAgICAgICAgIH0p
OwogCi0gICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyID0gbWFrZVVuaXF1ZTxM
aW5rQnVmZmVyPihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBz
dGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIgPSBtYWtlVW5pcXVlPExpbmtCdWZmZXI+
KGppdCwgY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpGVEwsIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7CiAKICAgICBpZiAoc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5k
aWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0
cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRo
LmNwcAkocmV2aXNpb24gMjc3MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
YXp5U2xvd1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIExh
enlTbG93UGF0aDo6Z2VuZXJhdGUoQ29kZUJsb2NrKiBjCiAKICAgICBtX2dlbmVyYXRvci0+cnVu
KGppdCwgcGFyYW1zKTsKIAotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KGppdCwgY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpGVEwsIEpJVENvbXBpbGF0aW9u
TXVzdFN1Y2NlZWQpOwogICAgIGxpbmtCdWZmZXIubGluayhwYXJhbXMuZG9uZUp1bXBzLCBtX2Rv
bmUpOwogICAgIGlmIChtX2V4Y2VwdGlvblRhcmdldCkKICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGV4Y2VwdGlvbkp1bXBzLCBtX2V4Y2VwdGlvblRhcmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDI3NzMwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBA
QCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgaml0LnVudGFnUmV0dXJuQWRk
cmVzcygpOwogICAgICAgICAgICAgbWFpblBhdGhKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CiAK
LSAgICAgICAgICAgIGxpbmtCdWZmZXIgPSBtYWtlVW5pcXVlPExpbmtCdWZmZXI+KGppdCwgY29k
ZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICAgICAgbGlua0J1ZmZlciA9
IG1ha2VVbmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2Zp
bGU6OkZUTCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgIGlmIChsaW5rQnVm
ZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgICAgICAgICAgc3RhdGUuYWxsb2Nh
dGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTkzLDcgKzE5
Myw3IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIGppdC51bnRhZ1JldHVybkFk
ZHJlc3MoKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG1haW5QYXRoSnVtcCA9IGppdC5q
dW1wKCk7CiAgICAgICAgIAotICAgICAgICBsaW5rQnVmZmVyID0gbWFrZVVuaXF1ZTxMaW5rQnVm
ZmVyPihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgbGlu
a0J1ZmZlciA9IG1ha2VVbmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxvY2ssIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OkZUTCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgaWYgKGxp
bmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgICAgIHN0YXRlLmFsbG9j
YXRpb25GYWlsZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24g
Mjc3MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTA2LDcgKzUwNiw3IEBAIHN0YXRpYyB2b2lkIGNvbXBp
bGVTdHViKFZNJiB2bSwgdW5zaWduZWQKICAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGppdCwg
ZXhpdCk7CiAgICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KHZtLCBqaXQsIGV4aXQpOwogICAgIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBjb2RlQmxvY2spOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBjb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKICAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAgIHNob3VsZER1
bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJi
b3NlRlRMT1NSRXhpdCgpLAogICAgICAgICBwYXRjaEJ1ZmZlciwgT1NSRXhpdFB0clRhZywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDI3NzMw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyCiAjZW5kaWYKICAgICBqaXQucmV0KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwog
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBnZW5lcmF0aW9uRnVuY3Rpb24ucmV0
YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICIlcyIsIG5hbWUpOwogfQpAQCAtMjMxLDcgKzIzMSw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2wKICAgICAKICAgICBq
aXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBr
ZXkuY2FsbFRhcmdldCgpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsICJGVEwgc2xvdyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3Ry
aW5nKGtleSkuZGF0YSgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjc3MzAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
Q29kZVIKICAgICBqaXQucmV0KCk7CiAKICAgICBhdXRvIHN0dWJCYXNlQ29kZVB0ciA9IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPih0YWdDb2RlUHRyPExpbmtCdWZmZXJQ
dHJUYWc+KHN0dWJCYXNlKSk7Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1YkJh
c2VDb2RlUHRyLCBzdHViU2l6ZSk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1
YkJhc2VDb2RlUHRyLCBzdHViU2l6ZSwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAg
IC8vIFdlIGRvbid0IHVzZSBGSU5BTElaRV9DT0RFKCkgZm9yIHR3byByZWFzb25zLgogICAgIC8v
IFRoZSBmaXJzdCBpcyB0aGF0IHdlIGRvbid0IHdhbnQgdGhlIHdyaXRlYWJsZSBhZGRyZXNzLCBh
cyBkaXNhc3NlbWJsZWQgaW5zdHJ1Y3Rpb25zLAogICAgIC8vIHRvIGFwcGVhciBpbiB0aGUgY29u
c29sZSBvciBhbnl3aGVyZSBpbiBtZW1vcnksIHZpYSB0aGUgUHJpbnRTdHJlYW0gYnVmZmVyLgpA
QCAtNjQ0LDcgKzY0NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlciBqaXQ7CiAgICAgICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKLSAgICAg
ICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8Tm9QdHJUYWc+KGN1cnJlbnRJc2xhbmQpLCBpc2xhbmRTaXplSW5CeXRlcywgSklUQ29tcGls
YXRpb25NdXN0U3VjY2VlZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcihqaXQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4oY3VycmVudElzbGFu
ZCksIGlzbGFuZFNpemVJbkJ5dGVzLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuaywgSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCwgZmFsc2UpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIHVzZSB0
aGlzIHRvIGFwcGVhc2UgdGhlIGFzc2VydGlvbiB0aGF0IHdlJ3JlIG5vdCBmaW5hbGl6aW5nIG9u
IGEgY29tcGlsZXIgdGhyZWFkLiBJbiB0aGlzIHNpdHVhdGlvbiwgaXQncwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjc3MzAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDIsNyArODQyLDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0
Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5r
QnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIGVmZm9ydCkpOworICAg
IG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZl
cigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBl
ZmZvcnQpKTsKIAogICAgIE1vbm90b25pY1RpbWUgYWZ0ZXIgeyB9OwogICAgIGlmIChVTkxJS0VM
WShjb21wdXRlQ29tcGlsZVRpbWVzKCkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE1hdGhJQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUTWF0aElDLmgJKHJldmlzaW9uIDI3NzMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUTWF0aElDLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5v
Ym9keSBzaG91bGQgYmUganVtcGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAg
ICAgICBib29sIG5lZWRzQnJhbmNoQ29tcGFjdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCkgPD0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKG1f
aW5saW5lU3RhcnQsIG1faW5saW5lRW5kKSkpOwotICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKGppdCwgbV9pbmxpbmVTdGFydCwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVT
aXplKCksIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7
CisgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBtX2lubGluZVN0YXJ0LCBq
aXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFj
dGlvbik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7
CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KG1fY29kZS5jb2RlKCkpKTsKICAgICAgICAgICAgIEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsICJKSVRNYXRoSUM6IGxpbmtpbmcgY29uc3RhbnQg
anVtcCB0byBvdXQgb2YgbGluZSBzdHViIik7CkBAIC0xNTYsNyArMTU2LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgaWYgKGdlbmVyYXRlZElubGluZSkgewogICAgICAgICAgICAgICAgIGF1dG8g
anVtcFRvRG9uZSA9IGppdC5qdW1wKCk7CiAKLSAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAg
ICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZUJsb2NrLCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAg
ICAgICAgICBpZiAoIWxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZ2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMs
IHNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGp1bXBUb0RvbmUsIGRvbmVMb2NhdGlvbigpKTsKQEAgLTE5Niw3ICsxOTYsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgZW5kSnVtcExpc3Qu
YXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
aml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6Oklu
bGluZUNhY2hlLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAgICAgaWYgKGxpbmtC
dWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJl
dmlzaW9uIDI3NzMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4Nyw3ICsxMTg3LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRo
aXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7CiAgICAg
CiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRh
cmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJl
dmlzaW9uIDI3NzMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MzMsNyArMTQzMyw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jayk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OklubGluZUNhY2hlKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUs
IGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzczMDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU3OSw3ICsxNTc5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlWYWwoY29uc3QgQwogICAgIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5l
Q2FjaGUpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgYnlWYWxJbmZvLT5zbG93UGF0
aFRhcmdldCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xv
d1BhdGhUYXJnZXQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5kb25l
VGFyZ2V0KTsKQEAgLTE2MTgsNyArMTYxOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dFByaXZhdGVOYW1lV2kKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRQdXRQcml2
YXRlTmFtZVdpdGhDYWNoZWRJZChieXRlY29kZSwgcHJvcGVydHlOYW1lLCBkb25lQ2FzZXMsIHNs
b3dDYXNlcyk7CiAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5t
X2xvY2spOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Vz
LCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVD
YXNlcywgYnlWYWxJbmZvLT5kb25lVGFyZ2V0KTsKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tz
LmVtcHR5KCkpCkBAIC0xNjU2LDcgKzE2NTYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0UHV0QnlW
YWxXaXRoQ2FjaGVkSWQoYnl0ZWNvZGUsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNhc2Vz
LCBzbG93Q2FzZXMpOwogCiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9j
ay0+bV9sb2NrKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9j
ayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtC
dWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dD
YXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhk
b25lQ2FzZXMsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7CiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNo
ZWNrcy5lbXB0eSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShy
ZXZpc2lvbiAyNzczMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTU4NSw3ICsxNTg1LDcgQEAgdm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKEpTR2xvYmFsT2JqZWN0KgogICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBz
bG93ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoc3R1YkppdCwgb3duZXIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihzdHViSml0LCBvd25lciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5l
Q2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZh
aWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwg
Y2FsbExpbmtJbmZvKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDI3NzMwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTU1LDcgKzE1NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBmaW5hbGl6ZShNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGZhbGxiYWNrLCBjb25zdCBjaGFyKiB0
aHVua0tpbmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnRoaXMsIEdMT0JBTF9USFVOS19JRCk7CisgICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsK
ICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUVGh1bmtQdHJUYWc+KGZhbGxiYWNrKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2FsbHNbaV0uc2Vjb25kKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9u
IDI3NzMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiB0aAogICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CiAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7
CiB9CiAKQEAgLTE0NSw3ICsxNDUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGxpCiAKICAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2FsbCk7
CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAiTGluayBjYWxsIHNsb3cgcGF0aCB0aHVuayIpOwogfQogCkBAIC0x
NTcsNyArMTU3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaQog
CiAgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbCk7
CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAiTGluayBwb2x5bW9ycGhpYyBjYWxsIHNsb3cgcGF0aCB0aHVuayIp
OwogfQogCkBAIC0yMzUsNyArMjM1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJS
b3V0aW5lUHRyVAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2ZXJ0
IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KICAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRp
b25WaXJ0dWFsQ2FsbCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAg
IlZpcnR1YWwgJXMgc2xvdyBwYXRoIHRodW5rIiwKQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyCiAKICAgICBqaXQuanVtcFRvRXhjZXB0
aW9uSGFuZGxlcih2bSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiJXMgJXMlcyB0cmFtcG9saW5lIiwgdGh1
bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24gPyAibmF0aXZl
IiA6ICJpbnRlcm5hbCIsIGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzID8g
IlRhaWwgV2l0aCBTYXZlZCBUYWdzICIgOiBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aG91
dFNhdmVkVGFncyA/ICJUYWlsIFdpdGhvdXQgU2F2ZWQgVGFncyAiIDogIiIsIHRvQ1N0cmluZyhr
aW5kKS5kYXRhKCkpOwogfQogCkBAIC01MzYsNyArNTM2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBhcgogICAgIGppdC5yZXQoKTsKICNlbmRpZiAvLyBFbmQgb2Yg
VVNFKEpTVkFMVUUzMl82NCkgc2VjdGlvbi4KIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJmaXh1cCBhcml0eSIp
OwogfQogCkBAIC01NDYsNyArNTQ2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiB1bgogCiAgICAgaml0LmJyZWFrcG9pbnQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJ1bnJl
YWNoYWJsZSB0aHVuayIpOwogfQogCkBAIC01OTcsNyArNTk3LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzdAogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpU
cnVzdGVkSW1tMzIoMCksIHN0cmluZ0dQUik7CiAgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1
bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgIlN0cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsKIH0KIApAQCAtMTI3NCw3ICsxMjc0LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBibwogICAgIGppdC5lbWl0RnVu
Y3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAg
IGxpbmtCdWZmZXIubGluayhub0NvZGUsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFn
Pih2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKHZtKSkpOwog
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAogICAgICAgICBsaW5rQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciBib3VuZCBmdW5jdGlvbiBjYWxscyB3aXRoIG5v
IGFyZ3VtZW50cyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1
bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuY3BwCShyZXZpc2lvbiAyNzczMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgsNyArODgsNyBAQCBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPHRhZz4gZ2VuZXJhCiAgICAgaml0Lm1vdmUoSlNJbnRl
cmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIodGFyZ2V0KSwgc2NyYXRjaCk7CiAgICAgaml0LmZhckp1
bXAoc2NyYXRjaCwgT3BlcmF0aW9uUHRyVGFnKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGFnLCAiTExJbnQgJXMgdGh1bmsiLCB0aHVu
a0tpbmQpOwogfQogCkBAIC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjx0YWc+IGdlbmVyYQogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1t
UHRyKHRhcmdldCksIHNjcmF0Y2gpOwogICAgIGppdC5mYXJKdW1wKHNjcmF0Y2gsIE9wZXJhdGlv
blB0clRhZyk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIHRhZywgIkxMSW50ICVzIGp1bXAgdG8gcHJvbG9ndWUgdGh1bmsiLCB0aHVua0tp
bmQpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjx0YWc+IGdlbmVyYQogICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAgICBhc3NlcnRJc1RhZ2dl
ZFdpdGg8T3BlcmF0aW9uUHRyVGFnPih0YXJnZXQpOwogICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cih0YXJnZXQpLCBPcGVyYXRpb25QdHJUYWcpOwotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRo
dW5rKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGFnLCAiTExJbnQg
JXMgcmV0dXJuIHBvaW50IHRodW5rIiwgdGh1bmtLaW5kKTsKIH0KIApAQCAtMjQ3LDcgKzI0Nyw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXQKICAgICAgICAgaml0
LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgIGppdC5yZXQoKTsKIAotICAgICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOwogICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWUg
dGh1bmsiKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIGNvZGVSZWY7CkBAIC0zNTcsNyArMzU3LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0cgogICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgR1BSSW5mbzo6cmVnVDMpOwog
ICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1QzLCBPcGVyYXRpb25QdHJUYWcpOwogCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVU
b0pJVEdhdGVQdHJUYWcsICJMTEludCAlcyBjYWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKIH0KIApA
QCAtMzY5LDcgKzM2OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQ
dHIKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQ
UkluZm86Ondhc21TY3JhdGNoR1BSMSk7CiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6d2FzbVNj
cmF0Y2hHUFIxLCBPcGVyYXRpb25QdHJUYWcpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTElu
dCAlcyB3YXNtIGNhbGwgZ2F0ZSB0aHVuayIsIG5hbWUpOwogfQogCkBAIC0zODEsNyArMzgxLDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0cgogICAgIGppdC52YWxp
ZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjpsciwgR1BSSW5mbzo6YXJndW1lbnRHUFIy
KTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMCwgdGFnKTsKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRl
UHRyVGFnLCAiTExJbnQgdGFpbCBjYWxsIGdhdGUgdGh1bmsiKTsKIH0KIApAQCAtMzk0LDcgKzM5
NCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHIKIAogICAgICAg
ICBqaXQuZmFySnVtcChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTRW50cnlQdHJUYWcpOwogCi0g
ICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAg
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgImxvb3AgT1NSIGVudHJ5
IHRodW5rIikpOwogICAgIH0pOwogICAgIHJldHVybiBjb2RlUmVmOwpAQCAtNDEwLDcgKzQxMCw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHIKICAgICAgICAgaml0
LnVudGFnUmV0dXJuQWRkcmVzcygpOwogICAgICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjphcmd1
bWVudEdQUjAsIEpTRW50cnlQdHJUYWcpOwogCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAg
ICAgIGNvZGVSZWYuY29uc3RydWN0KEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRv
SklUR2F0ZVB0clRhZywgImVudHJ5IE9TUiBlbnRyeSB0aHVuayIpKTsKICAgICB9KTsKICAgICBy
ZXR1cm4gY29kZVJlZjsKQEAgLTQyNiw3ICs0MjYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
TmF0aXZlVG9KSVRHYXRlUHRyCiAgICAgICAgIGppdC51bnRhZ1JldHVybkFkZHJlc3MoKTsKICAg
ICAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6d2FzbVNjcmF0Y2hHUFIwLCBXYXNtRW50cnlQdHJU
YWcpOwogCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0
KEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIndhc20g
T1NSIGVudHJ5IHRodW5rIikpOwogICAgIH0pOwogICAgIHJldHVybiBjb2RlUmVmOwpAQCAtNDQx
LDcgKzQ0MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHIKIAog
ICAgICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMCwgRXhjZXB0aW9uSGFuZGxlclB0clRh
Zyk7CiAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCk7CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3Qo
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnLCAiZXhjZXB0
aW9uIGhhbmRsZXIgdGh1bmsiKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIGNvZGVSZWY7CkBAIC00
NTYsNyArNDU2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0cgog
CiAgICAgICAgIGppdC5yZXQoKTsKIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgICAgICBj
b2RlUmVmLmNvbnN0cnVjdChGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcsICJyZXR1cm5Gcm9tTExJbnQgdGh1bmsiKSk7CiAgICAgfSk7CiAgICAgcmV0dXJu
IGNvZGVSZWY7CkBAIC00NzIsNyArNDcyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2
ZVRvSklUR2F0ZVB0cgogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihw
b2ludGVyKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1Qz
LCBPcGVyYXRpb25QdHJUYWcpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJ0YWcgdGh1bmsiKTsK
IH0KIApAQCAtNDg3LDcgKzQ4Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJ
VEdhdGVQdHIKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRl
ciksIEdQUkluZm86OnJlZ1QzKTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMywgT3Bl
cmF0aW9uUHRyVGFnKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnLCAidW50YWcgdGh1bmsiKTsKIH0K
IApAQCAtNTAyLDcgKzUwMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdh
dGVQdHIKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbJl0gewogICAgICAgICBDQ2FsbEhl
bHBlcnMgaml0OwogICAgICAgICBKU0NfSklUX0NBR0VfQ09NUElMRV9JTVBMKGppdCk7Ci0gICAg
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpUaHVuayk7CiAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgImppdENhZ2VQdHIgdGh1bmsi
KSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIGNvZGVSZWY7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyNzczMDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPTk9iamVj
dC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2lu
Y2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQcm9iZUNv
bnRleHQuaCIKQEAgLTE5MzcsNiArMTkzOCw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW8KIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9u
RHVtcENlbGwpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25JbmRl
eGluZ01vZGUpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jbmxp
bmVDYXBhY2l0eSk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkxp
bmtCdWZmZXJTdGF0cyk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
blZhbHVlKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uR2V0UElE
KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSGF2ZUFCYWRUaW1l
KTsKQEAgLTI1MzYsNiArMjUzOCwyMSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25JbmxpbmVDCiAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOwogfQogCisvLyBEdW1w
cyB0aGUgTGlua0J1ZmZlciBwcm9maWxlIHN0YXRpc3RpY3MgYXMgYSBzdHJpbmcuCisvLyBVc2Fn
ZTogJHZtLnByaW50KCR2bS5saW5rQnVmZmVyU3RhdHMoKSkKK0pTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbkxpbmtCdWZmZXJTdGF0cywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
CisjaWYgRU5BQkxFKEFTU0VNQkxFUikKKyAgICBXVEY6OlN0cmluZ1ByaW50U3RyZWFtIHN0cmVh
bTsKKyAgICBMaW5rQnVmZmVyOjpkdW1wUHJvZmlsZVN0YXRpc3RpY3MoJnN0cmVhbSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhnbG9iYWxPYmplY3QtPnZtKCksIHN0cmVh
bS50b1N0cmluZygpKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisjZW5kaWYKK30KKwog
Ly8gR2V0cyB0aGUgZGF0YUxvZyBkdW1wIG9mIGEgZ2l2ZW4gSlMgdmFsdWUgYXMgYSBzdHJpbmcu
CiAvLyBVc2FnZTogJHZtLnByaW50KCJ2YWx1ZSA9ICIgKyAkdm0udmFsdWUoanNWYWx1ZSkpCiBK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25WYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKQEAgLTM2MzMsNiArMzY1MCw3IEBA
IHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogCiAgICAgYWRkRnVuY3Rp
b24odm0sICJpbmRleGluZ01vZGUiLCBmdW5jdGlvbkluZGV4aW5nTW9kZSwgMSk7CiAgICAgYWRk
RnVuY3Rpb24odm0sICJpbmxpbmVDYXBhY2l0eSIsIGZ1bmN0aW9uSW5saW5lQ2FwYWNpdHksIDEp
OworICAgIGFkZEZ1bmN0aW9uKHZtLCAibGlua0J1ZmZlclN0YXRzIiwgZnVuY3Rpb25MaW5rQnVm
ZmVyU3RhdHMsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAidmFsdWUiLCBmdW5jdGlvblZhbHVl
LCAxKTsKICAgICBhZGRGdW5jdGlvbih2bSwgImdldHBpZCIsIGZ1bmN0aW9uR2V0UElELCAwKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2
aXNpb24gMjc3MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgQkJRUGxhbjo6d29y
ayhDb21waWxhdGlvbkVmZm9ydCBlZmYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+
IHRpZXJVcCA9IG1ha2VVbmlxdWU8VGllclVwQ291bnQ+KCk7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3Rpb24+IGZ1bmN0aW9uID0gY29tcGlsZUZ1bmN0aW9uKG1fZnVuY3Rpb25J
bmRleCwgY29udGV4dCwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIHRpZXJVcC5nZXQoKSk7CiAK
LSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51
bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpXYXNtLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChVTkxJS0VMWShsaW5rQnVm
ZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgIEJhc2U6OmZhaWwoaG9sZExvY2so
bV9sb2NrKSwgbWFrZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxlIHRpZXJp
bmcgdXAgZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIobV9mdW5jdGlvbkluZGV4
KSkpOwogICAgICAgICByZXR1cm47CkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBCQlFQbGFuOjpk
aWRDb21wbGV0ZUNvbXBpbGF0aW9uKGNvbgogICAgICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0
RnVuY3Rpb25Db3VudCgpOwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKICAgICAgICAgewot
ICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50
SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpXYXNtLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKICAgICAg
ICAgICAgICAgICBCYXNlOjpmYWlsKGxvY2tlciwgbWFrZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFi
bGUgbWVtb3J5IGluIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9u
SW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjMyLDcgKzIzMiw3IEBAIHZv
aWQgQkJRUGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbihjb24KICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChjb25zdCBhdXRvJiBlbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb24gPSBtX2Vt
YmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAg
ICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50
SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCwgbnVsbHB0ciwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6V2FzbSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAg
ICAgICAgICAgICAgICAgQmFzZTo6ZmFpbChsb2NrZXIsIG1ha2VTdHJpbmcoIk91dCBvZiBleGVj
dXRhYmxlIG1lbW9yeSBpbiBmdW5jdGlvbiBlbnRyeXBvaW50IGF0IGluZGV4ICIsIFN0cmluZzo6
bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkocmV2aXNpb24gMjc3
MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNzcsNyArNzcsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8V2FzbUVudHJ5CiAgICAgaml0LmxvYWRQdHIoc2NyYXRjaCwgc2NyYXRjaCk7CiAgICAgaml0
LmZhckp1bXAoc2NyYXRjaCwgV2FzbUVudHJ5UHRyVGFnKTsKIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6VGh1bmssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKFVOTElL
RUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQogICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAJKHJldmlzaW9uIDI3NzMw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIExMSW50UGxhbjo6ZGlkQ29tcGxldGVDb21w
aWxhdGlvbihjCiAgICAgICAgICAgICBqdW1wc1tpXSA9IGppdC5qdW1wKCk7CiAgICAgICAgIH0K
IAotICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6V2FzbSwgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxs
b2NhdGUoKSkpIHsKICAgICAgICAgICAgIEJhc2U6OmZhaWwobG9ja2VyLCAiT3V0IG9mIGV4ZWN1
dGFibGUgbWVtb3J5IGluIFdhc20gTExJbnQgZW50cnkgdGh1bmtzIik7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBMTEludFBsYW46OmRpZENvbXBsZXRlQ29t
cGlsYXRpb24oYwogICAgICAgICAgICAgTWVtb3J5TW9kZSBtb2RlID0gTWVtb3J5TW9kZTo6Qm91
bmRzQ2hlY2tpbmc7CiAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
bj4gZnVuY3Rpb24gPSBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoaml0LCBzaWduYXR1cmUsICZtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9u
LmdldCgpLCBtb2RlLCBmdW5jdGlvbkluZGV4KTsKIAotICAgICAgICAgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKGppdCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIsIExpbmtCdWZmZXI6OlByb2Zp
bGU6Oldhc20sIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgewogICAgICAgICAgICAgICAgIEJh
c2U6OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4g
ZnVuY3Rpb24gZW50cnlwb2ludCBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbklu
ZGV4KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCShyZXZpc2lv
biAyNzczMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50
cnlQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBPTUdGb3JP
U1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpbwogICAgIH0KIAogICAgIEVudHJ5cG9pbnQgb21n
RW50cnlwb2ludDsKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5
cG9pbnRKSVQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpXYXNtLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChVTkxJ
S0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgIEJhc2U6OmZh
aWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5
IHdoaWxlIHRpZXJpbmcgdXAgZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIobV9m
dW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCShyZXZpc2lvbiAyNzczMDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
MCw3ICs4MCw3IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICB9
CiAKICAgICBFbnRyeXBvaW50IG9tZ0VudHJ5cG9pbnQ7Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2lu
dEpJVCwgbnVsbHB0ciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6V2FzbSwgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgp
KSkgewogICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcoIk91
dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4
ICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgcmV0dXJuOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAJKHJldmlzaW9u
IDI3NzMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gdGgKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
RXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgaml0LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hv
dWxkIG5vdCByZWFjaCB0aGlzLgogCi0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICBsaW5rQnVmZmVyLmxpbmso
Y2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25XYXNtVG9KU0V4Y2Vw
dGlvbikpOwogICAgIHJldHVybiBGSU5BTElaRV9XQVNNX0NPREUobGlua0J1ZmZlciwgSklUVGh1
bmtQdHJUYWcsICJUaHJvdyBleGNlcHRpb24gZnJvbSBXYXNtIik7CiB9CkBAIC02Nyw3ICs2Nyw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGgKICAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zdGFja1NwYWNlKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKICAgICBhdXRvIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIgPSBqaXQuanVtcCgpOwotICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpU
aHVuayk7CiAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIsIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIobG9j
a2VyLCB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAg
IHJldHVybiBGSU5BTElaRV9XQVNNX0NPREUobGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJU
aHJvdyBzdGFjayBvdmVyZmxvdyBmcm9tIFdhc20iKTsKIH0KQEAgLTkzLDcgKzkzLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0cgogCiAgICAgaml0LmVtaXRGdW5j
dGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJu
IEZJTkFMSVpFX1dBU01fQ09ERShsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlRyaWdnZXIg
T01HIGVudHJ5IHRpZXIgdXAiKTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAkocmV2aXNpb24gMjc3MzAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTcs
NyArNDE3LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogICAg
ICAgICB9KTsKICAgICB9CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdG
YWlsdXJlOjpPdXRPZk1lbW9yeSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzczMDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBXZWIKICNlbmRpZgogICAgIGF1dG8ganVtcFRvSG9zdENhbGxUaHVu
ayA9IGppdC5qdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRy
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IG51bGxwdHIsIExpbmtCdWZmZXI6OlByb2ZpbGU6Oldhc20sIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CiAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJySklULmNwcAkocmV2aXNpb24gMjc3MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NjUsNyArMzk2NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKIAotICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoKnRoaXMsIFJFR0VYUF9DT0RFX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnRoaXMsIFJFR0VYUF9DT0RFX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpZYXJySklULCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICBpZiAo
bGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2su
c2V0RmFsbEJhY2tXaXRoRmFpbHVyZVJlYXNvbihKSVRGYWlsdXJlUmVhc29uOjpFeGVjdXRhYmxl
TWVtb3J5QWxsb2NhdGlvbkZhaWx1cmUpOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjc3MzAzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMTAgIE1hcmsgTGFtICA8bWFyay5s
YW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IHRvIGNvbGxlY3Qgc3RhdHMgb24g
Y3VtdWxhdGl2ZSBMaW5rQnVmZmVyIGxpbmtlZCBzaXplcyBiYXNlZCBvbiBwcm9maWxlcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTYxNworCisg
ICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgICogY3Nzaml0L1NlbGVj
dG9yQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yOjpjb21waWxlKToKKwogMjAyMS0wNS0xMCAgS2F0ZSBDaGVuZXkg
IDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KIAogICAgICAgICBQcmVmbGlnaHQgcmVxdWVz
dHMgbm90IHByb3Blcmx5IGF0dHJpYnV0ZWQgYXMgYXBwLWJvdW5kCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyNzczMDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0NzEs
NyArMTQ3MSw3IEBAIGlubGluZSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIFNlbGVjdG8KICAg
ICAgICAgcmV0dXJuIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OkNhbm5vdENvbXBpbGU7CiAg
ICAgfQogCi0gICAgSlNDOjpMaW5rQnVmZmVyIGxpbmtCdWZmZXIobV9hc3NlbWJsZXIsIENTU19D
T0RFX0lELCBKU0M6OkpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgSlNDOjpMaW5rQnVmZmVy
IGxpbmtCdWZmZXIobV9hc3NlbWJsZXIsIENTU19DT0RFX0lELCBKU0M6OkxpbmtCdWZmZXI6OlBy
b2ZpbGU6OkNTU0pJVCwgSlNDOjpKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmICghbGlu
a0J1ZmZlci5pc1ZhbGlkKCkpIHsKICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBTZWxlY3RvckNv
bXBpbGF0aW9uU3RhdHVzOjpOb3RDb21waWxlZCBidXQgdGhhdCB3b3VsZCBjYXVzZSB1cyB0byBy
ZS1lbnRlcgogICAgICAgICAvLyB0aGUgQ1NTIEpJVCBldmVyeSB0aW1lIHdlIGV2YWx1YXRlIHRo
YXQgc2VsZWN0b3IuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>