<?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>110217</bug_id>
          
          <creation_ts>2013-02-19 06:49:56 -0800</creation_ts>
          <short_desc>[chromium] move most of the remaining mocks to TestRunner library</short_desc>
          <delta_ts>2013-02-20 06:11:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>jochen</reporter>
          <assigned_to>jochen</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>836342</commentid>
    <comment_count>0</comment_count>
    <who name="">jochen</who>
    <bug_when>2013-02-19 06:49:56 -0800</bug_when>
    <thetext>[chromium] move most of the remaining mocks to TestRunner library</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836343</commentid>
    <comment_count>1</comment_count>
      <attachid>189080</attachid>
    <who name="">jochen</who>
    <bug_when>2013-02-19 06:50:52 -0800</bug_when>
    <thetext>Created attachment 189080
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836345</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-19 06:54:45 -0800</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836421</commentid>
    <comment_count>3</comment_count>
      <attachid>189080</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-19 08:29:56 -0800</bug_when>
    <thetext>Comment on attachment 189080
Patch

Attachment 189080 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16628581

New failing tests:
fast/dom/Geolocation/position-string.html
fast/dom/Geolocation/cached-position-iframe.html
inspector/geolocation-error.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836464</commentid>
    <comment_count>4</comment_count>
    <who name="">jochen</who>
    <bug_when>2013-02-19 09:06:25 -0800</bug_when>
    <thetext>I guess I&apos;ll need to move the mocks to WebTestProxyBase instead of TestRunner.

Anyway, the public/ API changes will stay the same, can I already get a lgtm for that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836649</commentid>
    <comment_count>5</comment_count>
      <attachid>189080</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-19 12:12:21 -0800</bug_when>
    <thetext>Comment on attachment 189080
Patch

API changes LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837369</commentid>
    <comment_count>6</comment_count>
      <attachid>189289</attachid>
    <who name="">jochen</who>
    <bug_when>2013-02-20 05:22:21 -0800</bug_when>
    <thetext>Created attachment 189289
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837378</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-20 05:34:53 -0800</bug_when>
    <thetext>Attachment 189289 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/DumpRenderTree.gypi&apos;, u&apos;Tools/DumpRenderTree/chromium/MockWebSpeechInputController.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/MockWebSpeechInputController.h&apos;, u&apos;Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/MockWebSpeechInputController.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/MockWebSpeechRecognizer.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/MockWebSpeechRecognizer.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h&apos;, u&apos;Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/WebViewHost.cpp&apos;, u&apos;Tools/DumpRenderTree/chromium/WebViewHost.h&apos;]&quot; exit_code: 1
Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:65:  The parameter name &quot;proxy&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:66:  The parameter name &quot;proxy&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837379</commentid>
    <comment_count>8</comment_count>
      <attachid>189289</attachid>
    <who name="Nico Weber">thakis</who>
    <bug_when>2013-02-20 05:36:24 -0800</bug_when>
    <thetext>Comment on attachment 189289
Patch

Makes sense. I didn&apos;t look super closely since this is just moving existing code around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837380</commentid>
    <comment_count>9</comment_count>
      <attachid>189295</attachid>
    <who name="">jochen</who>
    <bug_when>2013-02-20 05:36:37 -0800</bug_when>
    <thetext>Created attachment 189295
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837382</commentid>
    <comment_count>10</comment_count>
      <attachid>189297</attachid>
    <who name="">jochen</who>
    <bug_when>2013-02-20 05:37:24 -0800</bug_when>
    <thetext>Created attachment 189297
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837401</commentid>
    <comment_count>11</comment_count>
      <attachid>189297</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-20 06:11:49 -0800</bug_when>
    <thetext>Comment on attachment 189297
Patch for landing

Clearing flags on attachment: 189297

Committed r143457: &lt;http://trac.webkit.org/changeset/143457&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837402</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-20 06:11:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189080</attachid>
            <date>2013-02-19 06:50:52 -0800</date>
            <delta_ts>2013-02-20 05:22:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110217-20130219154713.patch</filename>
            <type>text/plain</type>
            <size>92056</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMzE2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjdkZTgyNDE0MmQ4ZjliY2QyZDhjMWMwMTNjMTZhNWEy
OGEyYmNmNy4uNzNlNjY3NWMxYjU1NmQyMzkxYTBhMzkyOGZmYzZhZDk3NGI5ZTU3MiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
NSBAQAorMjAxMy0wMi0xOSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4K
KworICAgICAgICBbY2hyb21pdW1dIG1vdmUgbW9zdCBvZiB0aGUgcmVtYWluaW5nIG1vY2tzIHRv
IFRlc3RSdW5uZXIgbGlicmFyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEwMjE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2hpbGUgbW9zdCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0
aGVzZSBtb2NrcyBpcyBhbHNvCisgICAgICAgIGF2YWlsYWJsZSBpbiB0aGUgY29udGVudCBtb2R1
bGUsIHRoZXJlIGlzIG5vIHN0cmFpZ2h0IGZvcndhcmQgd2F5IHRvCisgICAgICAgIGluamVjdCB0
aGUgbW9jayByZXN1bHRzIHJlcXVpcmVkIGZvciBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3REZWxlZ2F0ZS5oOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RQcm94
eS5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQ
cm94eTo6Z2VvbG9jYXRpb25DbGllbnQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVz
dFByb3h5OjpzcGVlY2hJbnB1dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6
V2ViVGVzdFByb3h5OjpzcGVlY2hSZWNvZ25pemVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OldlYlRlc3RQcm94eTo6ZGV2aWNlT3JpZW50YXRpb25DbGllbnQpOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6V2ViVGVzdFByb3h5OjpyZXF1ZXN0UG9pbnRlckxvY2spOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5OjpyZXF1ZXN0UG9pbnRlclVubG9jayk6CisgICAgICAg
IChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHk6OmlzUG9pbnRlckxvY2tlZCk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaElu
cHV0Q29udHJvbGxlci5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcC4KKyAgICAgICAgKFdlYlRlc3RS
dW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJUZXN0UnVu
bmVyOjpNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjp+TW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoSW5wdXRDb250
cm9sbGVyOjpzZXREZWxlZ2F0ZSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3Bl
ZWNoSW5wdXRDb250cm9sbGVyOjphZGRNb2NrUmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAo
V2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6c2V0RHVtcFJlY3Qp
OgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6
Y2xlYXJSZXN1bHRzKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1
dENvbnRyb2xsZXI6OnN0YXJ0UmVjb2duaXRpb24pOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6Y2FuY2VsUmVjb2duaXRpb24pOgorICAgICAg
ICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6c3RvcFJlY29y
ZGluZyk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyOjpzcGVlY2hUYXNrRmlyZWQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNw
ZWVjaElucHV0Q29udHJvbGxlcjo6U3BlZWNoVGFzazo6U3BlZWNoVGFzayk6CisgICAgICAgIChX
ZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpTcGVlY2hUYXNrOjpz
dG9wKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXI6OlNwZWVjaFRhc2s6OnJ1bklmVmFsaWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaDogUmVu
YW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1
dENvbnRyb2xsZXIuaC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVy
KToKKyAgICAgICAgKE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIpOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6dGFza0xpc3QpOgorICAg
ICAgICAoU3BlZWNoVGFzayk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuY3BwOiBSZW5hbWVkIGZyb20gVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuY3BwLgor
ICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6Ok1vY2tXZWJT
cGVlY2hSZWNvZ25pemVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6On5Nb2NrV2ViU3BlZWNoUmVjb2du
aXplcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6
c2V0RGVsZWdhdGUpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29n
bml6ZXI6OnN0YXJ0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNv
Z25pemVyOjpzdG9wKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNv
Z25pemVyOjphYm9ydCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVj
b2duaXplcjo6YWRkTW9ja1Jlc3VsdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2Vi
U3BlZWNoUmVjb2duaXplcjo6c2V0RXJyb3IpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9j
a1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0YXJ0VGFza1F1ZXVlKToKKyAgICAgICAgKFdlYlRlc3RS
dW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpjbGVhclRhc2tRdWV1ZSk6CisgICAgICAg
IChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6U3RlcFRhc2s6OnJ1bklm
VmFsaWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmg6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5oLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAgICAoTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXIpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6
Ondhc0Fib3J0ZWQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29n
bml6ZXI6OmNsaWVudCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVj
b2duaXplcjo6aGFuZGxlKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hS
ZWNvZ25pemVyOjp0YXNrTGlzdCk6CisgICAgICAgIChUYXNrKToKKyAgICAgICAgKFdlYlRlc3RS
dW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrOjpUYXNrKToKKyAgICAgICAgKFdl
YlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrOjp+VGFzayk6CisgICAg
ICAgIChTdGVwVGFzayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVj
b2duaXplcjo6U3RlcFRhc2s6OlN0ZXBUYXNrKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYlRlc3RS
dW5uZXI6OlRlc3RSdW5uZXI6OnNldERlbGVnYXRlKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlRlc3RSdW5uZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6
Omdlb2xvY2F0aW9uQ2xpZW50KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6
Omdlb2xvY2F0aW9uQ2xpZW50TW9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OnNwZWVjaElucHV0Q29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpzcGVlY2hSZWNvZ25pemVyKToKKyAg
ICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmRldmljZU9yaWVudGF0aW9uQ2xpZW50
KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmRldmljZU9yaWVudGF0aW9u
Q2xpZW50TW9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpyZXF1ZXN0
UG9pbnRlckxvY2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6cmVxdWVz
dFBvaW50ZXJVbmxvY2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6aXNQ
b2ludGVyTG9ja2VkKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmRpZEFj
cXVpcmVQb2ludGVyTG9ja0ludGVybmFsKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RS
dW5uZXI6OmRpZE5vdEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKToKKyAgICAgICAgKFdlYlRl
c3RSdW5uZXI6OlRlc3RSdW5uZXI6OmRpZExvc2VQb2ludGVyTG9ja0ludGVybmFsKToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbik6
CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpudW1iZXJPZlBlbmRpbmdHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0
UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAoV2ViVGVzdFJ1bm5l
cjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24pOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWls
YWJsZUVycm9yKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmFkZE1vY2tT
cGVlY2hJbnB1dFJlc3VsdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpz
ZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0
UnVubmVyOjphZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IpOgorICAg
ICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6d2FzTW9ja1NwZWVjaFJlY29nbml0aW9u
QWJvcnRlZCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpkaWRBY3F1aXJl
UG9pbnRlckxvY2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6ZGlkTm90
QWNxdWlyZVBvaW50ZXJMb2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6
OmRpZExvc2VQb2ludGVyTG9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVy
OjpzZXRQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0UG9pbnRlckxvY2tXaWxsRmFpbFN5bmNocm9ub3Vz
bHkpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rl
c3RSdW5uZXIuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyKToK
KyAgICAgICAgKFRlc3RSdW5uZXIpOgorICAgICAgICAoSG9zdE1ldGhvZFRhc2spOgorICAgICAg
ICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6SG9zdE1ldGhvZFRhc2s6Okhvc3RNZXRob2RU
YXNrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6Okhvc3RNZXRob2RUYXNr
OjpydW5JZlZhbGlkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9XZWJUZXN0UHJveHkuY3BwOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVz
dFByb3h5QmFzZTo6Z2VvbG9jYXRpb25DbGllbnQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6
CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHlCYXNlOjpzcGVlY2hJbnB1dENv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5QmFzZTo6c3Bl
ZWNoUmVjb2duaXplcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHlCYXNl
OjpkZXZpY2VPcmllbnRhdGlvbkNsaWVudCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJU
ZXN0UHJveHlCYXNlOjpyZXF1ZXN0UG9pbnRlckxvY2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5l
cjo6V2ViVGVzdFByb3h5QmFzZTo6cmVxdWVzdFBvaW50ZXJVbmxvY2spOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5QmFzZTo6aXNQb2ludGVyTG9ja2VkKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHA6CisgICAgICAgIChXZWJW
aWV3SG9zdDo6cmVzZXQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZp
ZXdIb3N0Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlld0hvc3QpOgorCiAy
MDEzLTAyLTE3ICBBbmRyZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQuIEFkZGluZyBteXNlbGYgYXMgYSBjb21taXR0ZXIuCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQppbmRleCAwYjljZTM1MGVjMzk1YmJkZTA0OWRlMTNjYjI0
NjU3ZDIzZDVhOGRmLi4zZjcxZGExYzliZWRmMDIyZjFmM2YyYjMwMjRlM2ZhN2IzNWI3NDQxIDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKQEAgLTEyLDEwICsxMiw2
IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vTW9ja1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oJywK
ICAgICAgICAgICAgICdjaHJvbWl1bS9Nb2NrV2ViUHJlcmVuZGVyaW5nU3VwcG9ydC5jcHAnLAog
ICAgICAgICAgICAgJ2Nocm9taXVtL01vY2tXZWJQcmVyZW5kZXJpbmdTdXBwb3J0LmgnLAotICAg
ICAgICAgICAgJ2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwJywKLSAg
ICAgICAgICAgICdjaHJvbWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgnLAotICAg
ICAgICAgICAgJ2Nocm9taXVtL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmNwcCcsCi0gICAgICAg
ICAgICAnY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaCcsCiAgICAgICAgICAgICAn
Y2hyb21pdW0vVGFzay5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UYXNrLmNwcCcsCiAgICAg
ICAgICAgICAnY2hyb21pdW0vVGVzdEV2ZW50UHJpbnRlci5oJywKQEAgLTc1LDYgKzcxLDEwIEBA
CiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlJUQ0RUTUZTZW5k
ZXJIYW5kbGVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tX
ZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgnLAorICAgICAg
ICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXIuY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3Bl
ZWNoSW5wdXRDb250cm9sbGVyLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIv
c3JjL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaCcsCiAgICAgICAgICAgICAn
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTm90aWZpY2F0aW9uUHJlc2VudGVyLmgnLAogICAgICAg
ICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAn
LAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1NwZWxsQ2hlY2tDbGllbnQu
Y3BwJywKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJT
cGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDViNTc2YzdlNjM2YmJlNDFlNzc3MzljNGRlMjg3NjRiMmRkNTdjYWYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJUYXNrLmgiCi0j
aW5jbHVkZSAiV2ViU3BlZWNoSW5wdXRMaXN0ZW5lci5oIgotI2luY2x1ZGUgPHB1YmxpYy9XZWJD
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNp
ZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcg
bmFtZXNwYWNlIFdlYlRlc3RSdW5uZXI7Ci0KLVBhc3NPd25QdHI8TW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlcj4gTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6Y3JlYXRlKFdlYlNwZWVj
aElucHV0TGlzdGVuZXIqIGxpc3RlbmVyKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9j
a1dlYlNwZWVjaElucHV0Q29udHJvbGxlcihsaXN0ZW5lcikpOwotfQotCi12b2lkIE1vY2tXZWJT
cGVlY2hJbnB1dENvbnRyb2xsZXI6OmFkZE1vY2tSZWNvZ25pdGlvblJlc3VsdChjb25zdCBXZWJT
dHJpbmcmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIGNvbnN0IFdlYlN0cmluZyYgbGFuZ3Vh
Z2UpCi17Ci0gICAgV2ViU3BlZWNoSW5wdXRSZXN1bHQgcmVzOwotICAgIHJlcy5hc3NpZ24ocmVz
dWx0LCBjb25maWRlbmNlKTsKLQotICAgIGlmIChsYW5ndWFnZS5pc0VtcHR5KCkpCi0gICAgICAg
IG1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2UuYXBwZW5kKHJlcyk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIFN0cmluZyBsYW5nU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZS51dGY4KCku
ZGF0YSgpKTsKLSAgICAgICAgaWYgKCFtX3JlY29nbml0aW9uUmVzdWx0cy5jb250YWlucyhsYW5n
U3RyaW5nKSkKLSAgICAgICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLnNldChsYW5nU3RyaW5n
LCBWZWN0b3I8V2ViU3BlZWNoSW5wdXRSZXN1bHQ+KCkpOwotICAgICAgICBtX3JlY29nbml0aW9u
UmVzdWx0cy5maW5kKGxhbmdTdHJpbmcpLT52YWx1ZS5hcHBlbmQocmVzKTsKLSAgICB9Ci19Ci0K
LXZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6c2V0RHVtcFJlY3QoYm9vbCBkdW1w
UmVjdCkKLXsKLSAgICBtX2R1bXBSZWN0ID0gZHVtcFJlY3Q7Ci19Ci0KLXZvaWQgTW9ja1dlYlNw
ZWVjaElucHV0Q29udHJvbGxlcjo6Y2xlYXJSZXN1bHRzKCkKLXsKLSAgICBtX3Jlc3VsdHNGb3JF
bXB0eUxhbmd1YWdlLmNsZWFyKCk7Ci0gICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuY2xlYXIoKTsK
LSAgICBtX2R1bXBSZWN0ID0gZmFsc2U7Ci19Ci0KLWJvb2wgTW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlcjo6c3RhcnRSZWNvZ25pdGlvbihpbnQgcmVxdWVzdElkLCBjb25zdCBXZWJSZWN0JiBl
bGVtZW50UmVjdCwgY29uc3QgV2ViU3RyaW5nJiBsYW5ndWFnZSwgY29uc3QgV2ViU3RyaW5nJiBn
cmFtbWFyLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luKQotewotICAgIGlmIChtX3Nw
ZWVjaFRhc2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcmVxdWVzdElkID0gcmVx
dWVzdElkOwotICAgIG1fcmVxdWVzdFJlY3QgPSBlbGVtZW50UmVjdDsKLSAgICBtX3JlY29yZGlu
ZyA9IHRydWU7Ci0gICAgbV9sYW5ndWFnZSA9IFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2UudXRm
OCgpLmRhdGEoKSk7Ci0KLSAgICBtX3NwZWVjaFRhc2sgPSBuZXcgU3BlZWNoVGFzayh0aGlzKTsK
LSAgICBwb3N0VGFzayhtX3NwZWVjaFRhc2spOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6Y2FuY2VsUmVjb2duaXRpb24oaW50IHJl
cXVlc3RJZCkKLXsKLSAgICBpZiAobV9zcGVlY2hUYXNrKSB7Ci0gICAgICAgIEFTU0VSVChyZXF1
ZXN0SWQgPT0gbV9yZXF1ZXN0SWQpOwotCi0gICAgICAgIG1fc3BlZWNoVGFzay0+c3RvcCgpOwot
ICAgICAgICBtX3JlY29yZGluZyA9IGZhbHNlOwotICAgICAgICBtX2xpc3RlbmVyLT5kaWRDb21w
bGV0ZVJlY29nbml0aW9uKG1fcmVxdWVzdElkKTsKLSAgICAgICAgbV9yZXF1ZXN0SWQgPSAwOwot
ICAgIH0KLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpzdG9wUmVjb3Jk
aW5nKGludCByZXF1ZXN0SWQpCi17Ci0gICAgQVNTRVJUKHJlcXVlc3RJZCA9PSBtX3JlcXVlc3RJ
ZCk7Ci0gICAgaWYgKG1fc3BlZWNoVGFzayAmJiBtX3JlY29yZGluZykgewotICAgICAgICBtX3Nw
ZWVjaFRhc2stPnN0b3AoKTsKLSAgICAgICAgc3BlZWNoVGFza0ZpcmVkKCk7Ci0gICAgfQotfQot
Ci1Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyKFdlYlNwZWVjaElucHV0TGlzdGVuZXIqIGxpc3RlbmVyKQotICAgIDogbV9saXN0ZW5lcihs
aXN0ZW5lcikKLSAgICAsIG1fc3BlZWNoVGFzaygwKQotICAgICwgbV9yZWNvcmRpbmcoZmFsc2Up
Ci0gICAgLCBtX3JlcXVlc3RJZCgtMSkKLSAgICAsIG1fZHVtcFJlY3QoZmFsc2UpCi17Ci19Ci0K
LXN0YXRpYyBXZWJTcGVlY2hJbnB1dFJlc3VsdEFycmF5IG1ha2VSZWN0UmVzdWx0KGNvbnN0IFdl
YlJlY3QmIHJlY3QpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBzYjsKLSAgICBzYi5hcHBlbmQoU3Ry
aW5nOjpudW1iZXIocmVjdC54KSk7Ci0gICAgc2IuYXBwZW5kKCIsIik7Ci0gICAgc2IuYXBwZW5k
KFN0cmluZzo6bnVtYmVyKHJlY3QueSkpOwotICAgIHNiLmFwcGVuZCgiLCIpOwotICAgIHNiLmFw
cGVuZChTdHJpbmc6Om51bWJlcihyZWN0LndpZHRoKSk7Ci0gICAgc2IuYXBwZW5kKCIsIik7Ci0g
ICAgc2IuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHJlY3QuaGVpZ2h0KSk7Ci0KLSAgICBXZWJTcGVl
Y2hJbnB1dFJlc3VsdCByZXM7Ci0gICAgcmVzLmFzc2lnbihXZWJTdHJpbmcoc2IuY2hhcmFjdGVy
cygpLCBzYi5sZW5ndGgoKSksIDEuMCk7Ci0KLSAgICBXZWJTcGVlY2hJbnB1dFJlc3VsdEFycmF5
IHJlc3VsdHM7Ci0gICAgcmVzdWx0cy5hc3NpZ24oJnJlcywgMSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dHM7Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6c3BlZWNoVGFza0Zp
cmVkKCkKLXsKLSAgICBpZiAobV9yZWNvcmRpbmcpIHsKLSAgICAgICAgbV9yZWNvcmRpbmcgPSBm
YWxzZTsKLSAgICAgICAgbV9saXN0ZW5lci0+ZGlkQ29tcGxldGVSZWNvcmRpbmcobV9yZXF1ZXN0
SWQpOwotCi0gICAgICAgIG1fc3BlZWNoVGFzayA9IG5ldyBTcGVlY2hUYXNrKHRoaXMpOwotICAg
ICAgICBwb3N0VGFzayhtX3NwZWVjaFRhc2spOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJvb2wg
bm9SZXN1bHRzRm91bmQgPSBmYWxzZTsKLSAgICAgICAgLy8gV2UgdGFrZSBhIGNvcHkgb2YgdGhl
IHJlcXVlc3RJZCBoZXJlIHNvIHRoYXQgaWYgc2NyaXB0cyBkZXN0cm95ZWQgdGhlIGlucHV0IGVs
ZW1lbnQKLSAgICAgICAgLy8gaW5zaWRlIG9uZSBvZiB0aGUgY2FsbGJhY2tzIGJlbG93LCB3ZSds
bCBzdGlsbCBrbm93IHdoYXQgdGhpcyBzZXNzaW9uJ3MgcmVxdWVzdElkIHdhcy4KLSAgICAgICAg
aW50IHJlcXVlc3RJZCA9IG1fcmVxdWVzdElkOwotICAgICAgICBtX3JlcXVlc3RJZCA9IDA7Ci0K
LSAgICAgICAgaWYgKG1fZHVtcFJlY3QpIHsKLSAgICAgICAgICAgIG1fbGlzdGVuZXItPnNldFJl
Y29nbml0aW9uUmVzdWx0KHJlcXVlc3RJZCwgbWFrZVJlY3RSZXN1bHQobV9yZXF1ZXN0UmVjdCkp
OwotICAgICAgICB9IGVsc2UgaWYgKG1fbGFuZ3VhZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICAvLyBFbXB0eSBsYW5ndWFnZSBjYXNlIG11c3QgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5IHRvIGF2
b2lkIHByb2JsZW1zIHdpdGggSGFzaE1hcCBhbmQgZW1wdHkga2V5cy4KLSAgICAgICAgICAgIGlm
ICghbV9yZXN1bHRzRm9yRW1wdHlMYW5ndWFnZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
bV9saXN0ZW5lci0+c2V0UmVjb2duaXRpb25SZXN1bHQocmVxdWVzdElkLCBtX3Jlc3VsdHNGb3JF
bXB0eUxhbmd1YWdlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBub1Jlc3Vs
dHNGb3VuZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9yZWNv
Z25pdGlvblJlc3VsdHMuY29udGFpbnMobV9sYW5ndWFnZSkpCi0gICAgICAgICAgICAgICAgbV9s
aXN0ZW5lci0+c2V0UmVjb2duaXRpb25SZXN1bHQocmVxdWVzdElkLCBtX3JlY29nbml0aW9uUmVz
dWx0cy5nZXQobV9sYW5ndWFnZSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG5vUmVzdWx0c0ZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChub1Jlc3Vs
dHNGb3VuZCkgewotICAgICAgICAgICAgLy8gQ2FuJ3QgYXZvaWQgc2V0dGluZyBhIHJlc3VsdCBl
dmVuIGlmIG5vIHJlc3VsdCB3YXMgc2V0IGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UuCi0gICAgICAg
ICAgICAvLyBUaGlzIHdvdWxkIGF2b2lkIGdlbmVyYXRpbmcgdGhlIGV2ZW50cyB1c2VkIHRvIGNo
ZWNrIHRoZSByZXN1bHRzIGFuZCB0aGUgdGVzdCB3b3VsZCB0aW1lb3V0LgotICAgICAgICAgICAg
U3RyaW5nIGVycm9yKCJlcnJvcjogbm8gcmVzdWx0IGZvdW5kIGZvciBsYW5ndWFnZSAnIik7Ci0g
ICAgICAgICAgICBlcnJvci5hcHBlbmQobV9sYW5ndWFnZSk7Ci0gICAgICAgICAgICBlcnJvci5h
cHBlbmQoIiciKTsKLQotICAgICAgICAgICAgV2ViU3BlZWNoSW5wdXRSZXN1bHQgcmVzOwotICAg
ICAgICAgICAgcmVzLmFzc2lnbihXZWJTdHJpbmc6OmZyb21VVEY4KGVycm9yLnV0ZjgoKS5kYXRh
KCkpLCAxLjApOwotCi0gICAgICAgICAgICBWZWN0b3I8V2ViU3BlZWNoSW5wdXRSZXN1bHQ+IHJl
c3VsdHM7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXMpOwotCi0gICAgICAgICAgICBt
X2xpc3RlbmVyLT5zZXRSZWNvZ25pdGlvblJlc3VsdChyZXF1ZXN0SWQsIHJlc3VsdHMpOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi1Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpTcGVlY2hU
YXNrOjpTcGVlY2hUYXNrKE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIG1vY2spCi0gICAg
OiBXZWJNZXRob2RUYXNrPE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI+OjpXZWJNZXRob2RU
YXNrKG1vY2spCi17Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6U3Bl
ZWNoVGFzazo6c3RvcCgpCi17Ci0gICAgbV9vYmplY3QtPm1fc3BlZWNoVGFzayA9IDA7Ci0gICAg
Y2FuY2VsKCk7Ci0gICAgZGVsZXRlKHRoaXMpOwotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hJbnB1
dENvbnRyb2xsZXI6OlNwZWVjaFRhc2s6OnJ1bklmVmFsaWQoKQotewotICAgIG1fb2JqZWN0LT5t
X3NwZWVjaFRhc2sgPSAwOwotICAgIG1fb2JqZWN0LT5zcGVlY2hUYXNrRmlyZWQoKTsKLX0KLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9N
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGM5M2YwYmY2N2E1ZDVlZDBhZWEyMTJhZjRjNTU5ODljZmU3Y2NmOWEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxl
cl9oCi0jZGVmaW5lIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXJfaAotCi0jaWYgRU5BQkxF
KElOUFVUX1NQRUVDSCkKLQotI2luY2x1ZGUgIldlYlRhc2suaCIKLSNpbmNsdWRlICJXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJTcGVlY2hJbnB1dFJlc3VsdC5oIgot
I2luY2x1ZGUgPHB1YmxpYy9XZWJSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Y2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBXZWJTcGVlY2hJbnB1dExpc3RlbmVyOwot
Y2xhc3MgV2ViU3RyaW5nOwotfQotCi1jbGFzcyBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
IDogcHVibGljIFdlYktpdDo6V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyPiBjcmVhdGUo
V2ViS2l0OjpXZWJTcGVlY2hJbnB1dExpc3RlbmVyKik7Ci0KLSAgICB2b2lkIGFkZE1vY2tSZWNv
Z25pdGlvblJlc3VsdChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgcmVzdWx0LCBkb3VibGUgY29u
ZmlkZW5jZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGxhbmd1YWdlKTsKLSAgICB2b2lkIHNl
dER1bXBSZWN0KGJvb2wpOwotICAgIHZvaWQgY2xlYXJSZXN1bHRzKCk7Ci0KLSAgICAvLyBXZWJT
cGVlY2hJbnB1dENvbnRyb2xsZXIgaW1wbGVtZW50YXRpb246Ci0gICAgdmlydHVhbCBib29sIHN0
YXJ0UmVjb2duaXRpb24oaW50IHJlcXVlc3RJZCwgY29uc3QgV2ViS2l0OjpXZWJSZWN0JiBlbGVt
ZW50UmVjdCwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBXZWJLaXQ6
OldlYlN0cmluZyYgZ3JhbW1hciwgY29uc3QgV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbiYpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxSZWNvZ25pdGlvbihpbnQgcmVxdWVzdElk
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFJlY29yZGluZyhpbnQgcmVxdWVzdElk
KSBPVkVSUklERTsKLQotICAgIFdlYlRlc3RSdW5uZXI6OldlYlRhc2tMaXN0KiB0YXNrTGlzdCgp
IHsgcmV0dXJuICZtX3Rhc2tMaXN0OyB9Ci0KLXByaXZhdGU6Ci0gICAgTW9ja1dlYlNwZWVjaElu
cHV0Q29udHJvbGxlcihXZWJLaXQ6OldlYlNwZWVjaElucHV0TGlzdGVuZXIqKTsKLSAgICB2b2lk
IHNwZWVjaFRhc2tGaXJlZCgpOwotCi0gICAgY2xhc3MgU3BlZWNoVGFzayA6IHB1YmxpYyBXZWJU
ZXN0UnVubmVyOjpXZWJNZXRob2RUYXNrPE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI+IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIFNwZWVjaFRhc2soTW9ja1dlYlNwZWVjaElucHV0Q29udHJv
bGxlciopOwotICAgICAgICB2b2lkIHN0b3AoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgT1ZFUlJJREU7Ci0gICAgfTsKLQotICAgIFdlYktpdDo6
V2ViU3BlZWNoSW5wdXRMaXN0ZW5lciogbV9saXN0ZW5lcjsKLQotICAgIFdlYlRlc3RSdW5uZXI6
OldlYlRhc2tMaXN0IG1fdGFza0xpc3Q7Ci0gICAgU3BlZWNoVGFzayogbV9zcGVlY2hUYXNrOwot
Ci0gICAgYm9vbCBtX3JlY29yZGluZzsKLSAgICBpbnQgbV9yZXF1ZXN0SWQ7Ci0gICAgV2ViS2l0
OjpXZWJSZWN0IG1fcmVxdWVzdFJlY3Q7Ci0gICAgU3RyaW5nIG1fbGFuZ3VhZ2U7Ci0KLSAgICBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPFdlYktpdDo6V2ViU3BlZWNoSW5wdXRSZXN1bHQ+ID4gbV9y
ZWNvZ25pdGlvblJlc3VsdHM7Ci0gICAgVmVjdG9yPFdlYktpdDo6V2ViU3BlZWNoSW5wdXRSZXN1
bHQ+IG1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2U7Ci0gICAgYm9vbCBtX2R1bXBSZWN0OwotfTsK
LQotI2VuZGlmIC8vIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0KLSNlbmRpZiAvLyBNb2NrV2ViU3Bl
ZWNoSW5wdXRDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggM2MzNjBlMGNlMjk2NjliM2UwNzgxNmRiZjc5ZDdkNzY3ZTllZmRjNi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJNb2NrV2ViU3BlZWNoUmVjb2duaXplci5oIgotCi0jaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVD
SCkKLQotI2luY2x1ZGUgIlRhc2suaCIKLSNpbmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdC5oIgotI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQuaCIKLQotdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJUZXN0UnVubmVyOwotCi1uYW1l
c3BhY2UgewotCi0vLyBUYXNrIGNsYXNzIGZvciBjYWxsaW5nIGEgY2xpZW50IGZ1bmN0aW9uIHRo
YXQgZG9lcyBub3QgdGFrZSBhbnkgcGFyYW1ldGVycy4KLXR5cGVkZWYgdm9pZCAoV2ViU3BlZWNo
UmVjb2duaXplckNsaWVudDo6KkNsaWVudEZ1bmN0aW9uUG9pbnRlcikoY29uc3QgV2ViU3BlZWNo
UmVjb2duaXRpb25IYW5kbGUmKTsKLWNsYXNzIENsaWVudENhbGxUYXNrIDogcHVibGljIE1vY2tX
ZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrIHsKLXB1YmxpYzoKLSAgICBDbGllbnRDYWxsVGFzayhN
b2NrV2ViU3BlZWNoUmVjb2duaXplciogbW9jaywgQ2xpZW50RnVuY3Rpb25Qb2ludGVyIGZ1bmN0
aW9uKQotICAgICAgICA6IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrKG1vY2spCi0gICAg
ICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2
b2lkIHJ1bigpIE9WRVJSSURFIHsgKG1fcmVjb2duaXplci0+Y2xpZW50KCktPiptX2Z1bmN0aW9u
KShtX3JlY29nbml6ZXItPmhhbmRsZSgpKTsgfQotCi1wcml2YXRlOgotICAgIENsaWVudEZ1bmN0
aW9uUG9pbnRlciBtX2Z1bmN0aW9uOwotfTsKLQotLy8gVGFzayBmb3IgZGVsaXZlcmluZyBhIHJl
c3VsdCBldmVudC4KLWNsYXNzIFJlc3VsdFRhc2sgOiBwdWJsaWMgTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXI6OlRhc2sgewotcHVibGljOgotICAgIFJlc3VsdFRhc2soTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXIqIG1vY2ssIGNvbnN0IFdlYlN0cmluZyB0cmFuc2NyaXB0LCBmbG9hdCBjb25maWRlbmNl
KQotICAgICAgICA6IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrKG1vY2spCi0gICAgICAg
ICwgbV90cmFuc2NyaXB0KHRyYW5zY3JpcHQpCi0gICAgICAgICwgbV9jb25maWRlbmNlKGNvbmZp
ZGVuY2UpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBydW4oKSBPVkVSUklERQot
ICAgIHsKLSAgICAgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gdHJhbnNjcmlwdHMoc3RhdGljX2Nh
c3Q8c2l6ZV90PigxKSk7Ci0gICAgICAgIFdlYlZlY3RvcjxmbG9hdD4gY29uZmlkZW5jZXMoc3Rh
dGljX2Nhc3Q8c2l6ZV90PigxKSk7Ci0gICAgICAgIHRyYW5zY3JpcHRzWzBdID0gbV90cmFuc2Ny
aXB0OwotICAgICAgICBjb25maWRlbmNlc1swXSA9IG1fY29uZmlkZW5jZTsKLSAgICAgICAgV2Vi
VmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiBmaW5hbFJlc3VsdHMoc3RhdGljX2Nh
c3Q8c2l6ZV90PigxKSk7Ci0gICAgICAgIFdlYlZlY3RvcjxXZWJTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdD4gaW50ZXJpbVJlc3VsdHM7Ci0gICAgICAgIGZpbmFsUmVzdWx0c1swXS5hc3NpZ24odHJh
bnNjcmlwdHMsIGNvbmZpZGVuY2VzLCB0cnVlKTsKLQotICAgICAgICBtX3JlY29nbml6ZXItPmNs
aWVudCgpLT5kaWRSZWNlaXZlUmVzdWx0cyhtX3JlY29nbml6ZXItPmhhbmRsZSgpLCBmaW5hbFJl
c3VsdHMsIGludGVyaW1SZXN1bHRzKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViU3RyaW5n
IG1fdHJhbnNjcmlwdDsKLSAgICBmbG9hdCBtX2NvbmZpZGVuY2U7Ci19OwotCi0vLyBUYXNrIGZv
ciBkZWxpdmVyaW5nIGEgbm9tYXRjaCBldmVudC4KLWNsYXNzIE5vTWF0Y2hUYXNrIDogcHVibGlj
IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrIHsKLXB1YmxpYzoKLSAgICBOb01hdGNoVGFz
ayhNb2NrV2ViU3BlZWNoUmVjb2duaXplciogbW9jaykgOiBNb2NrV2ViU3BlZWNoUmVjb2duaXpl
cjo6VGFzayhtb2NrKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgT1ZFUlJJREUgeyBtX3Jl
Y29nbml6ZXItPmNsaWVudCgpLT5kaWRSZWNlaXZlTm9NYXRjaChtX3JlY29nbml6ZXItPmhhbmRs
ZSgpLCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCgpKTsgfQotfTsKLQotLy8gVGFzayBmb3Ig
ZGVsaXZlcmluZyBhbiBlcnJvciBldmVudC4KLWNsYXNzIEVycm9yVGFzayA6IHB1YmxpYyBNb2Nr
V2ViU3BlZWNoUmVjb2duaXplcjo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgRXJyb3JUYXNrKE1vY2tX
ZWJTcGVlY2hSZWNvZ25pemVyKiBtb2NrLCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpFcnJv
ckNvZGUgY29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQotICAgICAgICA6IE1vY2tXZWJT
cGVlY2hSZWNvZ25pemVyOjpUYXNrKG1vY2spCi0gICAgICAgICwgbV9jb2RlKGNvZGUpCi0gICAg
ICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBydW4oKSBPVkVSUklERSB7IG1fcmVjb2duaXplci0+Y2xpZW50KCktPmRpZFJlY2VpdmVFcnJv
cihtX3JlY29nbml6ZXItPmhhbmRsZSgpLCBtX21lc3NhZ2UsIG1fY29kZSk7IH0KLQotcHJpdmF0
ZToKLSAgICBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpFcnJvckNvZGUgbV9jb2RlOwotICAg
IFdlYlN0cmluZyBtX21lc3NhZ2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZQotCi1QYXNzT3duUHRy
PE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyPiBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6Y3JlYXRl
KCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKCkp
OwotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzdGFydChjb25zdCBXZWJTcGVl
Y2hSZWNvZ25pdGlvbkhhbmRsZSYgaGFuZGxlLCBjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblBh
cmFtcyYgcGFyYW1zLCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAg
bV93YXNBYm9ydGVkID0gZmFsc2U7Ci0gICAgbV9oYW5kbGUgPSBoYW5kbGU7Ci0gICAgbV9jbGll
bnQgPSBjbGllbnQ7Ci0KLSAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IENsaWVu
dENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydCkpKTsK
LSAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IENsaWVudENhbGxUYXNrKHRoaXMs
ICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydEF1ZGlvKSkpOwotICAgIG1fdGFz
a1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVj
aFJlY29nbml6ZXJDbGllbnQ6OmRpZFN0YXJ0U291bmQpKSk7Ci0KLSAgICBpZiAoIW1fbW9ja1Ry
YW5zY3JpcHRzLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQobV9tb2NrVHJhbnNjcmlwdHMu
c2l6ZSgpID09IG1fbW9ja0NvbmZpZGVuY2VzLnNpemUoKSk7Ci0KLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX21vY2tUcmFuc2NyaXB0cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IG1fdGFza1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgUmVzdWx0VGFzayh0aGlzLCBtX21vY2tU
cmFuc2NyaXB0c1tpXSwgbV9tb2NrQ29uZmlkZW5jZXNbaV0pKSk7Ci0KLSAgICAgICAgbV9tb2Nr
VHJhbnNjcmlwdHMuY2xlYXIoKTsKLSAgICAgICAgbV9tb2NrQ29uZmlkZW5jZXMuY2xlYXIoKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBOb01h
dGNoVGFzayh0aGlzKSkpOwotCi0gICAgbV90YXNrUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBD
bGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kU291
bmQpKSk7Ci0gICAgbV90YXNrUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBDbGllbnRDYWxsVGFz
ayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kQXVkaW8pKSk7Ci0gICAg
bV90YXNrUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2Vi
U3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kKSkpOwotCi0gICAgc3RhcnRUYXNrUXVldWUo
KTsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c3RvcChjb25zdCBXZWJTcGVl
Y2hSZWNvZ25pdGlvbkhhbmRsZSYgaGFuZGxlLCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KiBj
bGllbnQpCi17Ci0gICAgbV9oYW5kbGUgPSBoYW5kbGU7Ci0gICAgbV9jbGllbnQgPSBjbGllbnQ7
Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
fQotCi12b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjphYm9ydChjb25zdCBXZWJTcGVlY2hS
ZWNvZ25pdGlvbkhhbmRsZSYgaGFuZGxlLCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KiBjbGll
bnQpCi17Ci0gICAgbV9oYW5kbGUgPSBoYW5kbGU7Ci0gICAgbV9jbGllbnQgPSBjbGllbnQ7Ci0K
LSAgICBjbGVhclRhc2tRdWV1ZSgpOwotICAgIG1fd2FzQWJvcnRlZCA9IHRydWU7Ci0gICAgbV90
YXNrUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3Bl
ZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kKSkpOwotICAgIHN0YXJ0VGFza1F1ZXVlKCk7Ci19
Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmFkZE1vY2tSZXN1bHQoY29uc3QgV2Vi
U3RyaW5nJiB0cmFuc2NyaXB0LCBmbG9hdCBjb25maWRlbmNlKQotewotICAgIG1fbW9ja1RyYW5z
Y3JpcHRzLmFwcGVuZCh0cmFuc2NyaXB0KTsKLSAgICBtX21vY2tDb25maWRlbmNlcy5hcHBlbmQo
Y29uZmlkZW5jZSk7Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnNldEVycm9y
KGNvbnN0IFdlYlN0cmluZyYgZXJyb3IsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKLXsKLSAg
ICBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpFcnJvckNvZGUgY29kZTsKLSAgICBpZiAoZXJy
b3IgPT0gIk90aGVyRXJyb3IiKQotICAgICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNs
aWVudDo6T3RoZXJFcnJvcjsKLSAgICBlbHNlIGlmIChlcnJvciA9PSAiTm9TcGVlY2hFcnJvciIp
Ci0gICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpOb1NwZWVjaEVycm9y
OwotICAgIGVsc2UgaWYgKGVycm9yID09ICJBYm9ydGVkRXJyb3IiKQotICAgICAgICBjb2RlID0g
V2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6QWJvcnRlZEVycm9yOwotICAgIGVsc2UgaWYgKGVy
cm9yID09ICJBdWRpb0NhcHR1cmVFcnJvciIpCi0gICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNv
Z25pemVyQ2xpZW50OjpBdWRpb0NhcHR1cmVFcnJvcjsKLSAgICBlbHNlIGlmIChlcnJvciA9PSAi
TmV0d29ya0Vycm9yIikKLSAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6
Ok5ldHdvcmtFcnJvcjsKLSAgICBlbHNlIGlmIChlcnJvciA9PSAiTm90QWxsb3dlZEVycm9yIikK
LSAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Ok5vdEFsbG93ZWRFcnJv
cjsKLSAgICBlbHNlIGlmIChlcnJvciA9PSAiU2VydmljZU5vdEFsbG93ZWRFcnJvciIpCi0gICAg
ICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpTZXJ2aWNlTm90QWxsb3dlZEVy
cm9yOwotICAgIGVsc2UgaWYgKGVycm9yID09ICJCYWRHcmFtbWFyRXJyb3IiKQotICAgICAgICBj
b2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6QmFkR3JhbW1hckVycm9yOwotICAgIGVs
c2UgaWYgKGVycm9yID09ICJMYW5ndWFnZU5vdFN1cHBvcnRlZEVycm9yIikKLSAgICAgICAgY29k
ZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Okxhbmd1YWdlTm90U3VwcG9ydGVkRXJyb3I7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47Ci0KLSAgICBjbGVhclRhc2tRdWV1ZSgpOwotICAg
IG1fdGFza1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgRXJyb3JUYXNrKHRoaXMsIGNvZGUsIG1l
c3NhZ2UpKSk7Ci0gICAgbV90YXNrUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBDbGllbnRDYWxs
VGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kKSkpOwotICAgIHN0
YXJ0VGFza1F1ZXVlKCk7Ci19Ci0KLU1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpNb2NrV2ViU3Bl
ZWNoUmVjb2duaXplcigpCi0gICAgOiBtX3dhc0Fib3J0ZWQoZmFsc2UpCi0gICAgLCBtX3Rhc2tR
dWV1ZVJ1bm5pbmcoZmFsc2UpCi17Ci19Ci0KLU1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjp+TW9j
a1dlYlNwZWVjaFJlY29nbml6ZXIoKQotewotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25p
emVyOjpzdGFydFRhc2tRdWV1ZSgpCi17Ci0gICAgaWYgKG1fdGFza1F1ZXVlUnVubmluZykKLSAg
ICAgICAgcmV0dXJuOwotICAgIHBvc3RUYXNrKG5ldyBTdGVwVGFzayh0aGlzKSk7Ci0gICAgbV90
YXNrUXVldWVSdW5uaW5nID0gdHJ1ZTsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXpl
cjo6Y2xlYXJUYXNrUXVldWUoKQotewotICAgIG1fdGFza1F1ZXVlLmNsZWFyKCk7Ci0gICAgbV90
YXNrUXVldWVSdW5uaW5nID0gZmFsc2U7Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXI6OlN0ZXBUYXNrOjpydW5JZlZhbGlkKCkKLXsKLSAgICBpZiAobV9vYmplY3QtPm1fdGFza1F1
ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBtX29iamVjdC0+bV90YXNrUXVldWVSdW5uaW5nID0g
ZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBPd25QdHI8VGFzaz4gdGFzayA9
IG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZVswXS5yZWxlYXNlKCk7Ci0gICAgbV9vYmplY3QtPm1fdGFz
a1F1ZXVlLnJlbW92ZSgwKTsKLSAgICB0YXNrLT5ydW4oKTsKLQotICAgIGlmIChtX29iamVjdC0+
bV90YXNrUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZVJ1
bm5pbmcgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBvc3RUYXNrKG5l
dyBTdGVwVGFzayhtX29iamVjdCkpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNDUklQVEVEX1NQ
RUVDSCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJT
cGVlY2hSZWNvZ25pemVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2Vi
U3BlZWNoUmVjb2duaXplci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzY1MzRi
NGM2YzJiMjkzYjZkNDMwMDMxZmYwMmQzMjcwNDg5MjY1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBNb2NrV2ViU3BlZWNoUmVjb2duaXplcl9oCi0jZGVmaW5lIE1vY2tXZWJT
cGVlY2hSZWNvZ25pemVyX2gKLQotI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCi0KLSNpbmNs
dWRlICJXZWJTcGVlY2hSZWNvZ25pemVyLmgiCi0jaW5jbHVkZSAiV2ViVGFzay5oIgotI2luY2x1
ZGUgPHd0Zi9Db21waWxlci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlNwZWVjaFJl
Y29nbml0aW9uSGFuZGxlOwotY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXM7Ci1jbGFz
cyBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OwotfQotCi1jbGFzcyBNb2NrV2ViU3BlZWNoUmVj
b2duaXplciA6IHB1YmxpYyBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXIgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyPiBjcmVhdGUoKTsK
LSAgICB+TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIoKTsKLQotICAgIC8vIFdlYlNwZWVjaFJlY29n
bml6ZXIgaW1wbGVtZW50YXRpb246Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0KGNvbnN0IFdlYktp
dDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmLCBjb25zdCBXZWJLaXQ6OldlYlNwZWVjaFJl
Y29nbml0aW9uUGFyYW1zJiwgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KikgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3AoY29uc3QgV2ViS2l0OjpXZWJTcGVlY2hSZWNv
Z25pdGlvbkhhbmRsZSYsIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudCopIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBhYm9ydChjb25zdCBXZWJLaXQ6OldlYlNwZWVjaFJlY29n
bml0aW9uSGFuZGxlJiwgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KikgT1ZFUlJJ
REU7Ci0KLSAgICAvLyBNZXRob2RzIGFjY2Vzc2VkIGJ5IGxheW91dCB0ZXN0czoKLSAgICB2b2lk
IGFkZE1vY2tSZXN1bHQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHRyYW5zY3JpcHQsIGZsb2F0
IGNvbmZpZGVuY2UpOwotICAgIHZvaWQgc2V0RXJyb3IoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcm
IGVycm9yLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWVzc2FnZSk7Ci0gICAgYm9vbCB3YXNB
Ym9ydGVkKCkgY29uc3QgeyByZXR1cm4gbV93YXNBYm9ydGVkOyB9Ci0KLSAgICAvLyBNZXRob2Rz
IGFjY2Vzc2VkIGZyb20gVGFzayBvYmplY3RzOgotICAgIFdlYktpdDo6V2ViU3BlZWNoUmVjb2du
aXplckNsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KLSAgICBXZWJLaXQ6Oldl
YlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBoYW5kbGUoKSB7IHJldHVybiBtX2hhbmRsZTsgfQot
ICAgIFdlYlRlc3RSdW5uZXI6OldlYlRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rh
c2tMaXN0OyB9Ci0KLSAgICBjbGFzcyBUYXNrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFRhc2so
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIHJlY29nbml6ZXIpIDogbV9yZWNvZ25pemVyKHJlY29n
bml6ZXIpIHsgfQotICAgICAgICB2aXJ0dWFsIH5UYXNrKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBydW4oKSA9IDA7Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICBNb2NrV2ViU3BlZWNoUmVj
b2duaXplciogbV9yZWNvZ25pemVyOwotICAgIH07Ci0KLXByaXZhdGU6Ci0gICAgTW9ja1dlYlNw
ZWVjaFJlY29nbml6ZXIoKTsKLSAgICB2b2lkIHN0YXJ0VGFza1F1ZXVlKCk7Ci0gICAgdm9pZCBj
bGVhclRhc2tRdWV1ZSgpOwotCi0gICAgV2ViVGVzdFJ1bm5lcjo6V2ViVGFza0xpc3QgbV90YXNr
TGlzdDsKLSAgICBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlIG1faGFuZGxlOwot
ICAgIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogbV9jbGllbnQ7Ci0gICAgVmVj
dG9yPFdlYktpdDo6V2ViU3RyaW5nPiBtX21vY2tUcmFuc2NyaXB0czsKLSAgICBWZWN0b3I8Zmxv
YXQ+IG1fbW9ja0NvbmZpZGVuY2VzOwotICAgIGJvb2wgbV93YXNBYm9ydGVkOwotCi0gICAgLy8g
UXVldWUgb2YgdGFza3MgdG8gYmUgcnVuLgotICAgIFZlY3RvcjxPd25QdHI8VGFzaz4gPiBtX3Rh
c2tRdWV1ZTsKLSAgICBib29sIG1fdGFza1F1ZXVlUnVubmluZzsKLQotICAgIC8vIFRhc2sgZm9y
IHN0ZXBwaW5nIHRoZSBxdWV1ZS4KLSAgICBjbGFzcyBTdGVwVGFzayA6IHB1YmxpYyBXZWJUZXN0
UnVubmVyOjpXZWJNZXRob2RUYXNrPE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyPiB7Ci0gICAgcHVi
bGljOgotICAgICAgICBTdGVwVGFzayhNb2NrV2ViU3BlZWNoUmVjb2duaXplciogb2JqZWN0KSA6
IFdlYlRlc3RSdW5uZXI6OldlYk1ldGhvZFRhc2s8TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI+KG9i
amVjdCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgT1ZFUlJJREU7Ci0g
ICAgfTsKLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQotCi0jZW5kaWYg
Ly8gTW9ja1dlYlNwZWVjaFJlY29nbml6ZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdERlbGVnYXRlLmggYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0RGVsZWdh
dGUuaAppbmRleCAwNzc4ZWMxZmQ1ODI3Y2MxMWMyZDFlZWE0NTIzYjE2NGI3Y2I3YTczLi5kOTJi
ZmY2MDZmMmU0ZDA2ZTQ0MDE0NjZlNzg3MjYzN2NiMzQyYThmIDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0RGVsZWdhdGUu
aAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9X
ZWJUZXN0RGVsZWdhdGUuaApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPHN0cmluZz4KIAog
bmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJEZXZpY2VPcmllbnRhdGlvbjsKIGNsYXNzIFdl
YkdhbWVwYWRzOwogY2xhc3MgV2ViSGlzdG9yeUl0ZW07CiBzdHJ1Y3QgV2ViUmVjdDsKQEAgLTg0
LDIxICs4Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZXB0QWxsQ29va2ll
cyhib29sKSB7IH0KICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIHBhdGhUb0xvY2FsUmVzb3VyY2Uo
Y29uc3Qgc3RkOjpzdHJpbmcmIHJlc291cmNlKSB7IHJldHVybiBzdGQ6OnN0cmluZygpOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNldExvY2FsZShjb25zdCBzdGQ6OnN0cmluZyYpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZXREZXZpY2VPcmllbnRhdGlvbihXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0
aW9uJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEFjcXVpcmVQb2ludGVyTG9jaygpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBkaWROb3RBY3F1aXJlUG9pbnRlckxvY2soKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgZGlkTG9zZVBvaW50ZXJMb2NrKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBv
aW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luY2hyb25vdXNseSgpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNseSgpIHsgfQotICAgIHZpcnR1YWwg
aW50IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkgeyByZXR1
cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSwg
ZG91YmxlLCBkb3VibGUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoY29uc3Qgc3RkOjpzdHJpbmcmKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IHN0ZDo6c3RyaW5nJiwgZG91
YmxlLCBjb25zdCBzdGQ6OnN0cmluZyYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRNb2NrU3Bl
ZWNoSW5wdXREdW1wUmVjdChib29sKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkTW9ja1NwZWVj
aFJlY29nbml0aW9uUmVzdWx0KGNvbnN0IHN0ZDo6c3RyaW5nJiwgZG91YmxlKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IoY29uc3Qgc3RkOjpzdHJp
bmcmLCBjb25zdCBzdGQ6OnN0cmluZyYpIHsgfQotICAgIHZpcnR1YWwgYm9vbCB3YXNNb2NrU3Bl
ZWNoUmVjb2duaXRpb25BYm9ydGVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZv
aWQgdGVzdEZpbmlzaGVkKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHRlc3RUaW1lZE91dCgpIHsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc0JlaW5nRGVidWdnZWQoKSB7IHJldHVybiBmYWxzZTsgfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJs
aWMvV2ViVGVzdFByb3h5LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3B1YmxpYy9XZWJUZXN0UHJveHkuaAppbmRleCA1ZjgxYzMyMzYwNjYyZDJlNWNlNTk5YmY0
MmE2YzIyMjE4YmFkMjc2Li45ZGMxZjA5NTJhMGQzZWU0M2JlNmIxODQzYmY4N2Q0M2Y3MDQyMzdl
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1
YmxpYy9XZWJUZXN0UHJveHkuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UHJveHkuaApAQCAtNTEsMTQgKzUxLDE5IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogY2xhc3MgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDsKIGNsYXNzIFdlYkNh
Y2hlZFVSTFJlcXVlc3Q7CiBjbGFzcyBXZWJEYXRhU291cmNlOworY2xhc3MgV2ViRGV2aWNlT3Jp
ZW50YXRpb25DbGllbnQ7CiBjbGFzcyBXZWJEcmFnRGF0YTsKIGNsYXNzIFdlYkZyYW1lOworY2xh
c3MgV2ViR2VvbG9jYXRpb25DbGllbnQ7CiBjbGFzcyBXZWJJbWFnZTsKIGNsYXNzIFdlYk5vZGU7
CiBjbGFzcyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI7CiBjbGFzcyBXZWJQbHVnaW47CiBjbGFz
cyBXZWJSYW5nZTsKIGNsYXNzIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKK2NsYXNzIFdlYlNw
ZWVjaElucHV0Q29udHJvbGxlcjsKK2NsYXNzIFdlYlNwZWVjaElucHV0TGlzdGVuZXI7CitjbGFz
cyBXZWJTcGVlY2hSZWNvZ25pemVyOwogY2xhc3MgV2ViU3BlbGxDaGVja0NsaWVudDsKIGNsYXNz
IFdlYlN0cmluZzsKIGNsYXNzIFdlYlVSTDsKQEAgLTEzNyw2ICsxNDIsMTMgQEAgcHJvdGVjdGVk
OgogICAgIFdlYktpdDo6V2ViVXNlck1lZGlhQ2xpZW50KiB1c2VyTWVkaWFDbGllbnQoKTsKICAg
ICB2b2lkIHByaW50UGFnZShXZWJLaXQ6OldlYkZyYW1lKik7CiAgICAgV2ViS2l0OjpXZWJOb3Rp
ZmljYXRpb25QcmVzZW50ZXIqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpOworICAgIFdlYktpdDo6
V2ViR2VvbG9jYXRpb25DbGllbnQqIGdlb2xvY2F0aW9uQ2xpZW50KCk7CisgICAgV2ViS2l0OjpX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIHNwZWVjaElucHV0Q29udHJvbGxlcihXZWJLaXQ6Oldl
YlNwZWVjaElucHV0TGlzdGVuZXIqKTsKKyAgICBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXIq
IHNwZWVjaFJlY29nbml6ZXIoKTsKKyAgICBXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0aW9uQ2xp
ZW50KiBkZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpOworICAgIGJvb2wgcmVxdWVzdFBvaW50ZXJM
b2NrKCk7CisgICAgdm9pZCByZXF1ZXN0UG9pbnRlclVubG9jaygpOworICAgIGJvb2wgaXNQb2lu
dGVyTG9ja2VkKCk7CiAKICAgICB2b2lkIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2ViS2l0
OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViVVJMJiBmcm9tLCBjb25zdCBXZWJLaXQ6Oldl
YlVSTCYgdG8sIGRvdWJsZSBpbnRlcnZhbCwgZG91YmxlIGZpcmVfdGltZSk7CiAgICAgdm9pZCBk
aWRDYW5jZWxDbGllbnRSZWRpcmVjdChXZWJLaXQ6OldlYkZyYW1lKik7CkBAIC0zNTgsNiArMzcw
LDM0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBXZWJUZXN0UHJveHlCYXNlOjpu
b3RpZmljYXRpb25QcmVzZW50ZXIoKTsKICAgICB9CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYkdl
b2xvY2F0aW9uQ2xpZW50KiBnZW9sb2NhdGlvbkNsaWVudCgpCisgICAgeworICAgICAgICByZXR1
cm4gV2ViVGVzdFByb3h5QmFzZTo6Z2VvbG9jYXRpb25DbGllbnQoKTsKKyAgICB9CisgICAgdmly
dHVhbCBXZWJLaXQ6OldlYlNwZWVjaElucHV0Q29udHJvbGxlciogc3BlZWNoSW5wdXRDb250cm9s
bGVyKFdlYktpdDo6V2ViU3BlZWNoSW5wdXRMaXN0ZW5lciogbGlzdGVuZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gV2ViVGVzdFByb3h5QmFzZTo6c3BlZWNoSW5wdXRDb250cm9sbGVyKGxpc3Rl
bmVyKTsKKyAgICB9CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXIqIHNw
ZWVjaFJlY29nbml6ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYlRlc3RQcm94eUJhc2U6
OnNwZWVjaFJlY29nbml6ZXIoKTsKKyAgICB9CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYkRldmlj
ZU9yaWVudGF0aW9uQ2xpZW50KiBkZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpCisgICAgeworICAg
ICAgICByZXR1cm4gV2ViVGVzdFByb3h5QmFzZTo6ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKTsK
KyAgICB9CisgICAgdmlydHVhbCBib29sIHJlcXVlc3RQb2ludGVyTG9jaygpCisgICAgeworICAg
ICAgICByZXR1cm4gV2ViVGVzdFByb3h5QmFzZTo6cmVxdWVzdFBvaW50ZXJMb2NrKCk7CisgICAg
fQorICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UG9pbnRlclVubG9jaygpCisgICAgeworICAgICAg
ICBXZWJUZXN0UHJveHlCYXNlOjpyZXF1ZXN0UG9pbnRlclVubG9jaygpOworICAgIH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNQb2ludGVyTG9ja2VkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJU
ZXN0UHJveHlCYXNlOjppc1BvaW50ZXJMb2NrZWQoKTsKKyAgICB9CiAKICAgICAvLyBXZWJGcmFt
ZUNsaWVudCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1DbGll
bnRSZWRpcmVjdChXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJVUkwm
IGZyb20sIGNvbnN0IFdlYktpdDo6V2ViVVJMJiB0bywgZG91YmxlIGludGVydmFsLCBkb3VibGUg
ZmlyZVRpbWUpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hJbnB1dENvbnRy
b2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0ZGYzMmE4MmM3NGQ3NmRkMGNlMTYwNzQwYjJkZmFkOWIx
ZGU2YmQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcApAQCAtMCwwICsx
LDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNb2NrV2ViU3Bl
ZWNoSW5wdXRDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJXZWJTcGVlY2hJbnB1dExpc3RlbmVy
LmgiCisjaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRlLmgiCisjaW5jbHVkZSA8cHVibGljL1dlYkNT
dHJpbmcuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+CisKKyNpZiBFTkFCTEVfSU5Q
VVRfU1BFRUNICisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2Ugc3Rk
OworCituYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7CisKK25hbWVzcGFjZSB7CisKK1dlYlNwZWVj
aElucHV0UmVzdWx0QXJyYXkgbWFrZVJlY3RSZXN1bHQoY29uc3QgV2ViUmVjdCYgcmVjdCkKK3sK
KyAgICBjaGFyIGJ1ZmZlclsxMDBdOworICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl
ciksICIlZCwlZCwlZCwlZCIsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdo
dCk7CisKKyAgICBXZWJTcGVlY2hJbnB1dFJlc3VsdCByZXM7CisgICAgcmVzLmFzc2lnbihXZWJT
dHJpbmc6OmZyb21VVEY4KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpKSwgMS4wKTsK
KworICAgIFdlYlNwZWVjaElucHV0UmVzdWx0QXJyYXkgcmVzdWx0czsKKyAgICByZXN1bHRzLmFz
c2lnbigmcmVzLCAxKTsKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworfQorCitNb2NrV2ViU3Bl
ZWNoSW5wdXRDb250cm9sbGVyOjpNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKFdlYlNwZWVj
aElucHV0TGlzdGVuZXIqIGxpc3RlbmVyKQorICAgIDogbV9saXN0ZW5lcihsaXN0ZW5lcikKKyAg
ICAsIG1fc3BlZWNoVGFzaygwKQorICAgICwgbV9yZWNvcmRpbmcoZmFsc2UpCisgICAgLCBtX3Jl
cXVlc3RJZCgtMSkKKyAgICAsIG1fZHVtcFJlY3QoZmFsc2UpCisgICAgLCBtX2RlbGVnYXRlKDAp
Cit7Cit9CisKK01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6On5Nb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyKCkKK3sKK30KKwordm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
OjpzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKQoreworICAgIG1fZGVsZWdh
dGUgPSBkZWxlZ2F0ZTsKK30KKwordm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjph
ZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoY29uc3QgV2ViU3RyaW5nJiByZXN1bHQsIGRvdWJsZSBj
b25maWRlbmNlLCBjb25zdCBXZWJTdHJpbmcmIGxhbmd1YWdlKQoreworICAgIFdlYlNwZWVjaElu
cHV0UmVzdWx0IHJlczsKKyAgICByZXMuYXNzaWduKHJlc3VsdCwgY29uZmlkZW5jZSk7CisKKyAg
ICBpZiAobGFuZ3VhZ2UuaXNFbXB0eSgpKQorICAgICAgICBtX3Jlc3VsdHNGb3JFbXB0eUxhbmd1
YWdlLnB1c2hfYmFjayhyZXMpOworICAgIGVsc2UgeworICAgICAgICBzdHJpbmcgbGFuZ1N0cmlu
ZyA9IGxhbmd1YWdlLnV0ZjgoKTsKKyAgICAgICAgaWYgKG1fcmVjb2duaXRpb25SZXN1bHRzLmZp
bmQobGFuZ1N0cmluZykgPT0gbV9yZWNvZ25pdGlvblJlc3VsdHMuZW5kKCkpCisgICAgICAgICAg
ICBtX3JlY29nbml0aW9uUmVzdWx0c1tsYW5nU3RyaW5nXSA9IHZlY3RvcjxXZWJTcGVlY2hJbnB1
dFJlc3VsdD4oKTsKKyAgICAgICAgbV9yZWNvZ25pdGlvblJlc3VsdHNbbGFuZ1N0cmluZ10ucHVz
aF9iYWNrKHJlcyk7CisgICAgfQorfQorCit2b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXI6OnNldER1bXBSZWN0KGJvb2wgZHVtcFJlY3QpCit7CisgICAgbV9kdW1wUmVjdCA9IGR1bXBS
ZWN0OworfQorCit2b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmNsZWFyUmVzdWx0
cygpCit7CisgICAgbV9yZXN1bHRzRm9yRW1wdHlMYW5ndWFnZS5jbGVhcigpOworICAgIG1fcmVj
b2duaXRpb25SZXN1bHRzLmNsZWFyKCk7CisgICAgbV9kdW1wUmVjdCA9IGZhbHNlOworfQorCiti
b29sIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnN0YXJ0UmVjb2duaXRpb24oaW50IHJl
cXVlc3RJZCwgY29uc3QgV2ViUmVjdCYgZWxlbWVudFJlY3QsIGNvbnN0IFdlYlN0cmluZyYgbGFu
Z3VhZ2UsIGNvbnN0IFdlYlN0cmluZyYgZ3JhbW1hciwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4m
IG9yaWdpbikKK3sKKyAgICBpZiAobV9zcGVlY2hUYXNrKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtX3JlcXVlc3RJZCA9IHJlcXVlc3RJZDsKKyAgICBtX3JlcXVlc3RSZWN0ID0gZWxl
bWVudFJlY3Q7CisgICAgbV9yZWNvcmRpbmcgPSB0cnVlOworICAgIG1fbGFuZ3VhZ2UgPSBsYW5n
dWFnZS51dGY4KCk7CisKKyAgICBtX3NwZWVjaFRhc2sgPSBuZXcgU3BlZWNoVGFzayh0aGlzKTsK
KyAgICBtX2RlbGVnYXRlLT5wb3N0VGFzayhtX3NwZWVjaFRhc2spOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6Y2FuY2VsUmVjb2du
aXRpb24oaW50IHJlcXVlc3RJZCkKK3sKKyAgICBpZiAobV9zcGVlY2hUYXNrKSB7CisgICAgICAg
IFdFQktJVF9BU1NFUlQocmVxdWVzdElkID09IG1fcmVxdWVzdElkKTsKKworICAgICAgICBtX3Nw
ZWVjaFRhc2stPnN0b3AoKTsKKyAgICAgICAgbV9yZWNvcmRpbmcgPSBmYWxzZTsKKyAgICAgICAg
bV9saXN0ZW5lci0+ZGlkQ29tcGxldGVSZWNvZ25pdGlvbihtX3JlcXVlc3RJZCk7CisgICAgICAg
IG1fcmVxdWVzdElkID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlcjo6c3RvcFJlY29yZGluZyhpbnQgcmVxdWVzdElkKQoreworICAgIFdFQktJVF9BU1NF
UlQocmVxdWVzdElkID09IG1fcmVxdWVzdElkKTsKKyAgICBpZiAobV9zcGVlY2hUYXNrICYmIG1f
cmVjb3JkaW5nKSB7CisgICAgICAgIG1fc3BlZWNoVGFzay0+c3RvcCgpOworICAgICAgICBzcGVl
Y2hUYXNrRmlyZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJv
bGxlcjo6c3BlZWNoVGFza0ZpcmVkKCkKK3sKKyAgICBpZiAobV9yZWNvcmRpbmcpIHsKKyAgICAg
ICAgbV9yZWNvcmRpbmcgPSBmYWxzZTsKKyAgICAgICAgbV9saXN0ZW5lci0+ZGlkQ29tcGxldGVS
ZWNvcmRpbmcobV9yZXF1ZXN0SWQpOworCisgICAgICAgIG1fc3BlZWNoVGFzayA9IG5ldyBTcGVl
Y2hUYXNrKHRoaXMpOworICAgICAgICBtX2RlbGVnYXRlLT5wb3N0VGFzayhtX3NwZWVjaFRhc2sp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGJvb2wgbm9SZXN1bHRzRm91bmQgPSBmYWxzZTsKKyAg
ICAgICAgLy8gV2UgdGFrZSBhIGNvcHkgb2YgdGhlIHJlcXVlc3RJZCBoZXJlIHNvIHRoYXQgaWYg
c2NyaXB0cyBkZXN0cm95ZWQgdGhlIGlucHV0IGVsZW1lbnQKKyAgICAgICAgLy8gaW5zaWRlIG9u
ZSBvZiB0aGUgY2FsbGJhY2tzIGJlbG93LCB3ZSdsbCBzdGlsbCBrbm93IHdoYXQgdGhpcyBzZXNz
aW9uJ3MgcmVxdWVzdElkIHdhcy4KKyAgICAgICAgaW50IHJlcXVlc3RJZCA9IG1fcmVxdWVzdElk
OworICAgICAgICBtX3JlcXVlc3RJZCA9IDA7CisKKyAgICAgICAgaWYgKG1fZHVtcFJlY3QpIHsK
KyAgICAgICAgICAgIG1fbGlzdGVuZXItPnNldFJlY29nbml0aW9uUmVzdWx0KHJlcXVlc3RJZCwg
bWFrZVJlY3RSZXN1bHQobV9yZXF1ZXN0UmVjdCkpOworICAgICAgICB9IGVsc2UgaWYgKG1fbGFu
Z3VhZ2UuZW1wdHkoKSkgeworICAgICAgICAgICAgLy8gRW1wdHkgbGFuZ3VhZ2UgY2FzZSBtdXN0
IGJlIGhhbmRsZWQgc2VwYXJhdGVseSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIEhhc2hNYXAgYW5k
IGVtcHR5IGtleXMuCisgICAgICAgICAgICBpZiAoIW1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2Uu
ZW1wdHkoKSkKKyAgICAgICAgICAgICAgICBtX2xpc3RlbmVyLT5zZXRSZWNvZ25pdGlvblJlc3Vs
dChyZXF1ZXN0SWQsIG1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2UpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG5vUmVzdWx0c0ZvdW5kID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmIChtX3JlY29nbml0aW9uUmVzdWx0cy5maW5kKG1fbGFuZ3VhZ2Up
ICE9IG1fcmVjb2duaXRpb25SZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIG1fbGlzdGVu
ZXItPnNldFJlY29nbml0aW9uUmVzdWx0KHJlcXVlc3RJZCwgbV9yZWNvZ25pdGlvblJlc3VsdHNb
bV9sYW5ndWFnZV0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5vUmVzdWx0
c0ZvdW5kID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChub1Jlc3VsdHNGb3VuZCkg
eworICAgICAgICAgICAgLy8gQ2FuJ3QgYXZvaWQgc2V0dGluZyBhIHJlc3VsdCBldmVuIGlmIG5v
IHJlc3VsdCB3YXMgc2V0IGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UuCisgICAgICAgICAgICAvLyBU
aGlzIHdvdWxkIGF2b2lkIGdlbmVyYXRpbmcgdGhlIGV2ZW50cyB1c2VkIHRvIGNoZWNrIHRoZSBy
ZXN1bHRzIGFuZCB0aGUgdGVzdCB3b3VsZCB0aW1lb3V0LgorICAgICAgICAgICAgc3RyaW5nIGVy
cm9yKCJlcnJvcjogbm8gcmVzdWx0IGZvdW5kIGZvciBsYW5ndWFnZSAnIik7CisgICAgICAgICAg
ICBlcnJvci5hcHBlbmQobV9sYW5ndWFnZSk7CisgICAgICAgICAgICBlcnJvci5hcHBlbmQoIici
KTsKKworICAgICAgICAgICAgV2ViU3BlZWNoSW5wdXRSZXN1bHQgcmVzOworICAgICAgICAgICAg
cmVzLmFzc2lnbihXZWJTdHJpbmc6OmZyb21VVEY4KGVycm9yKSwgMS4wKTsKKworICAgICAgICAg
ICAgdmVjdG9yPFdlYlNwZWVjaElucHV0UmVzdWx0PiByZXN1bHRzOworICAgICAgICAgICAgcmVz
dWx0cy5wdXNoX2JhY2socmVzKTsKKworICAgICAgICAgICAgbV9saXN0ZW5lci0+c2V0UmVjb2du
aXRpb25SZXN1bHQocmVxdWVzdElkLCByZXN1bHRzKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6U3BlZWNoVGFzazo6U3BlZWNoVGFzayhNb2Nr
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKiBtb2NrKQorICAgIDogV2ViTWV0aG9kVGFzazxNb2Nr
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyPjo6V2ViTWV0aG9kVGFzayhtb2NrKQoreworfQorCit2
b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OlNwZWVjaFRhc2s6OnN0b3AoKQorewor
ICAgIG1fb2JqZWN0LT5tX3NwZWVjaFRhc2sgPSAwOworICAgIGNhbmNlbCgpOworICAgIGRlbGV0
ZSB0aGlzOworfQorCit2b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OlNwZWVjaFRh
c2s6OnJ1bklmVmFsaWQoKQoreworICAgIG1fb2JqZWN0LT5tX3NwZWVjaFRhc2sgPSAwOworICAg
IG1fb2JqZWN0LT5zcGVlY2hUYXNrRmlyZWQoKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJT
cGVlY2hJbnB1dENvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
NDAzNGUzNjdlYTQ2N2RlODRiNzdhODU1YTU4MzMxOWNiNTA5MmNlCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNw
ZWVjaElucHV0Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1v
Y2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXJfaAorI2RlZmluZSBNb2NrV2ViU3BlZWNoSW5wdXRD
b250cm9sbGVyX2gKKworI2luY2x1ZGUgIlRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJTcGVlY2hJbnB1dFJlc3VsdC5oIgor
I2luY2x1ZGUgIldlYlRhc2suaCIKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8cHVibGljL1dl
YlJlY3QuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK2NsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOworY2xhc3MgV2ViU3BlZWNoSW5w
dXRMaXN0ZW5lcjsKK2NsYXNzIFdlYlN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYlRlc3RSdW5u
ZXIgeworCitjbGFzcyBXZWJUZXN0RGVsZWdhdGU7CisKK2NsYXNzIE1vY2tXZWJTcGVlY2hJbnB1
dENvbnRyb2xsZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIgewor
cHVibGljOgorICAgIGV4cGxpY2l0IE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViS2l0
OjpXZWJTcGVlY2hJbnB1dExpc3RlbmVyKik7CisgICAgfk1vY2tXZWJTcGVlY2hJbnB1dENvbnRy
b2xsZXIoKTsKKworICAgIHZvaWQgYWRkTW9ja1JlY29nbml0aW9uUmVzdWx0KGNvbnN0IFdlYktp
dDo6V2ViU3RyaW5nJiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBjb25zdCBXZWJLaXQ6Oldl
YlN0cmluZyYgbGFuZ3VhZ2UpOworICAgIHZvaWQgc2V0RHVtcFJlY3QoYm9vbCk7CisgICAgdm9p
ZCBjbGVhclJlc3VsdHMoKTsKKyAgICB2b2lkIHNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSop
OworCisgICAgLy8gV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyIGltcGxlbWVudGF0aW9uOgorICAg
IHZpcnR1YWwgYm9vbCBzdGFydFJlY29nbml0aW9uKGludCByZXF1ZXN0SWQsIGNvbnN0IFdlYktp
dDo6V2ViUmVjdCYgZWxlbWVudFJlY3QsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBsYW5ndWFn
ZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGdyYW1tYXIsIGNvbnN0IFdlYktpdDo6V2ViU2Vj
dXJpdHlPcmlnaW4mKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUmVjb2duaXRp
b24oaW50IHJlcXVlc3RJZCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0b3BSZWNvcmRp
bmcoaW50IHJlcXVlc3RJZCkgT1ZFUlJJREU7CisKKyAgICBXZWJUYXNrTGlzdCogdGFza0xpc3Qo
KSB7IHJldHVybiAmbV90YXNrTGlzdDsgfQorCitwcml2YXRlOgorICAgIHZvaWQgc3BlZWNoVGFz
a0ZpcmVkKCk7CisKKyAgICBjbGFzcyBTcGVlY2hUYXNrIDogcHVibGljIFdlYk1ldGhvZFRhc2s8
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgU3Bl
ZWNoVGFzayhNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKik7CisgICAgICAgIHZvaWQgc3Rv
cCgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSBP
VkVSUklERTsKKyAgICB9OworCisgICAgV2ViS2l0OjpXZWJTcGVlY2hJbnB1dExpc3RlbmVyKiBt
X2xpc3RlbmVyOworCisgICAgV2ViVGFza0xpc3QgbV90YXNrTGlzdDsKKyAgICBTcGVlY2hUYXNr
KiBtX3NwZWVjaFRhc2s7CisKKyAgICBib29sIG1fcmVjb3JkaW5nOworICAgIGludCBtX3JlcXVl
c3RJZDsKKyAgICBXZWJLaXQ6OldlYlJlY3QgbV9yZXF1ZXN0UmVjdDsKKyAgICBzdGQ6OnN0cmlu
ZyBtX2xhbmd1YWdlOworCisgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPFdl
YktpdDo6V2ViU3BlZWNoSW5wdXRSZXN1bHQ+ID4gbV9yZWNvZ25pdGlvblJlc3VsdHM7CisgICAg
c3RkOjp2ZWN0b3I8V2ViS2l0OjpXZWJTcGVlY2hJbnB1dFJlc3VsdD4gbV9yZXN1bHRzRm9yRW1w
dHlMYW5ndWFnZTsKKyAgICBib29sIG1fZHVtcFJlY3Q7CisKKyAgICBXZWJUZXN0RGVsZWdhdGUq
IG1fZGVsZWdhdGU7Cit9OworCit9CisKKyNlbmRpZiAvLyBNb2NrV2ViU3BlZWNoSW5wdXRDb250
cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44NjYwODEyMTM4MmQ3OWE1NzY3MTQ1MTNjMjQyY2M0MGIxZTBlNDQ4Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmgi
CisKKyNpbmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oIgorI2luY2x1ZGUgIldl
YlNwZWVjaFJlY29nbml6ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJUZXN0RGVsZWdhdGUuaCIK
KwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVz
cGFjZSBXZWJUZXN0UnVubmVyIHsKKworbmFtZXNwYWNlIHsKKworLy8gVGFzayBjbGFzcyBmb3Ig
Y2FsbGluZyBhIGNsaWVudCBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IHRha2UgYW55IHBhcmFtZXRl
cnMuCit0eXBlZGVmIHZvaWQgKFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OipDbGllbnRGdW5j
dGlvblBvaW50ZXIpKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJik7CitjbGFzcyBD
bGllbnRDYWxsVGFzayA6IHB1YmxpYyBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6VGFzayB7Citw
dWJsaWM6CisgICAgQ2xpZW50Q2FsbFRhc2soTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG1vY2ss
IENsaWVudEZ1bmN0aW9uUG9pbnRlciBmdW5jdGlvbikKKyAgICAgICAgOiBNb2NrV2ViU3BlZWNo
UmVjb2duaXplcjo6VGFzayhtb2NrKQorICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBydW4oKSBPVkVSUklERSB7IChtX3JlY29n
bml6ZXItPmNsaWVudCgpLT4qbV9mdW5jdGlvbikobV9yZWNvZ25pemVyLT5oYW5kbGUoKSk7IH0K
KworcHJpdmF0ZToKKyAgICBDbGllbnRGdW5jdGlvblBvaW50ZXIgbV9mdW5jdGlvbjsKK307CisK
Ky8vIFRhc2sgZm9yIGRlbGl2ZXJpbmcgYSByZXN1bHQgZXZlbnQuCitjbGFzcyBSZXN1bHRUYXNr
IDogcHVibGljIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrIHsKK3B1YmxpYzoKKyAgICBS
ZXN1bHRUYXNrKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBtb2NrLCBjb25zdCBXZWJTdHJpbmcg
dHJhbnNjcmlwdCwgZmxvYXQgY29uZmlkZW5jZSkKKyAgICAgICAgOiBNb2NrV2ViU3BlZWNoUmVj
b2duaXplcjo6VGFzayhtb2NrKQorICAgICAgICAsIG1fdHJhbnNjcmlwdCh0cmFuc2NyaXB0KQor
ICAgICAgICAsIG1fY29uZmlkZW5jZShjb25maWRlbmNlKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgcnVuKCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIFdlYlZlY3RvcjxXZWJT
dHJpbmc+IHRyYW5zY3JpcHRzKHN0YXRpY19jYXN0PHNpemVfdD4oMSkpOworICAgICAgICBXZWJW
ZWN0b3I8ZmxvYXQ+IGNvbmZpZGVuY2VzKHN0YXRpY19jYXN0PHNpemVfdD4oMSkpOworICAgICAg
ICB0cmFuc2NyaXB0c1swXSA9IG1fdHJhbnNjcmlwdDsKKyAgICAgICAgY29uZmlkZW5jZXNbMF0g
PSBtX2NvbmZpZGVuY2U7CisgICAgICAgIFdlYlZlY3RvcjxXZWJTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdD4gZmluYWxSZXN1bHRzKHN0YXRpY19jYXN0PHNpemVfdD4oMSkpOworICAgICAgICBXZWJW
ZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IGludGVyaW1SZXN1bHRzOworICAgICAg
ICBmaW5hbFJlc3VsdHNbMF0uYXNzaWduKHRyYW5zY3JpcHRzLCBjb25maWRlbmNlcywgdHJ1ZSk7
CisKKyAgICAgICAgbV9yZWNvZ25pemVyLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3VsdHMobV9y
ZWNvZ25pemVyLT5oYW5kbGUoKSwgZmluYWxSZXN1bHRzLCBpbnRlcmltUmVzdWx0cyk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFdlYlN0cmluZyBtX3RyYW5zY3JpcHQ7CisgICAgZmxvYXQgbV9j
b25maWRlbmNlOworfTsKKworLy8gVGFzayBmb3IgZGVsaXZlcmluZyBhIG5vbWF0Y2ggZXZlbnQu
CitjbGFzcyBOb01hdGNoVGFzayA6IHB1YmxpYyBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6VGFz
ayB7CitwdWJsaWM6CisgICAgTm9NYXRjaFRhc2soTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG1v
Y2spIDogTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sobW9jaykgeyB9CisgICAgdmlydHVh
bCB2b2lkIHJ1bigpIE9WRVJSSURFIHsgbV9yZWNvZ25pemVyLT5jbGllbnQoKS0+ZGlkUmVjZWl2
ZU5vTWF0Y2gobV9yZWNvZ25pemVyLT5oYW5kbGUoKSwgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1
bHQoKSk7IH0KK307CisKKy8vIFRhc2sgZm9yIGRlbGl2ZXJpbmcgYW4gZXJyb3IgZXZlbnQuCitj
bGFzcyBFcnJvclRhc2sgOiBwdWJsaWMgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sgewor
cHVibGljOgorICAgIEVycm9yVGFzayhNb2NrV2ViU3BlZWNoUmVjb2duaXplciogbW9jaywgV2Vi
U3BlZWNoUmVjb2duaXplckNsaWVudDo6RXJyb3JDb2RlIGNvZGUsIGNvbnN0IFdlYlN0cmluZyYg
bWVzc2FnZSkKKyAgICAgICAgOiBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6VGFzayhtb2NrKQor
ICAgICAgICAsIG1fY29kZShjb2RlKQorICAgICAgICAsIG1fbWVzc2FnZShtZXNzYWdlKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgT1ZFUlJJREUgeyBtX3JlY29nbml6
ZXItPmNsaWVudCgpLT5kaWRSZWNlaXZlRXJyb3IobV9yZWNvZ25pemVyLT5oYW5kbGUoKSwgbV9t
ZXNzYWdlLCBtX2NvZGUpOyB9CisKK3ByaXZhdGU6CisgICAgV2ViU3BlZWNoUmVjb2duaXplckNs
aWVudDo6RXJyb3JDb2RlIG1fY29kZTsKKyAgICBXZWJTdHJpbmcgbV9tZXNzYWdlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UKKworTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6Ok1vY2tXZWJTcGVlY2hS
ZWNvZ25pemVyKCkKKyAgICA6IG1fd2FzQWJvcnRlZChmYWxzZSkKKyAgICAsIG1fdGFza1F1ZXVl
UnVubmluZyhmYWxzZSkKKyAgICAsIG1fZGVsZWdhdGUoMCkKK3sKK30KKworTW9ja1dlYlNwZWVj
aFJlY29nbml6ZXI6On5Nb2NrV2ViU3BlZWNoUmVjb2duaXplcigpCit7CisgICAgY2xlYXJUYXNr
UXVldWUoKTsKK30KKwordm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c2V0RGVsZWdhdGUo
V2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkKK3sKKyAgICBtX2RlbGVnYXRlID0gZGVsZWdhdGU7
Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0YXJ0KGNvbnN0IFdlYlNwZWVj
aFJlY29nbml0aW9uSGFuZGxlJiBoYW5kbGUsIGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUGFy
YW1zJiBwYXJhbXMsIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBt
X3dhc0Fib3J0ZWQgPSBmYWxzZTsKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAgICBtX2NsaWVu
dCA9IGNsaWVudDsKKworICAgIG1fdGFza1F1ZXVlLnB1c2hfYmFjayhuZXcgQ2xpZW50Q2FsbFRh
c2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZFN0YXJ0KSk7CisgICAgbV90
YXNrUXVldWUucHVzaF9iYWNrKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3BlZWNoUmVj
b2duaXplckNsaWVudDo6ZGlkU3RhcnRBdWRpbykpOworICAgIG1fdGFza1F1ZXVlLnB1c2hfYmFj
ayhuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRp
ZFN0YXJ0U291bmQpKTsKKworICAgIGlmICghbV9tb2NrVHJhbnNjcmlwdHMuZW1wdHkoKSkgewor
ICAgICAgICBXRUJLSVRfQVNTRVJUKG1fbW9ja1RyYW5zY3JpcHRzLnNpemUoKSA9PSBtX21vY2tD
b25maWRlbmNlcy5zaXplKCkpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9t
b2NrVHJhbnNjcmlwdHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX3Rhc2tRdWV1ZS5wdXNo
X2JhY2sobmV3IFJlc3VsdFRhc2sodGhpcywgbV9tb2NrVHJhbnNjcmlwdHNbaV0sIG1fbW9ja0Nv
bmZpZGVuY2VzW2ldKSk7CisKKyAgICAgICAgbV9tb2NrVHJhbnNjcmlwdHMuY2xlYXIoKTsKKyAg
ICAgICAgbV9tb2NrQ29uZmlkZW5jZXMuY2xlYXIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV90
YXNrUXVldWUucHVzaF9iYWNrKG5ldyBOb01hdGNoVGFzayh0aGlzKSk7CisKKyAgICBtX3Rhc2tR
dWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25p
emVyQ2xpZW50OjpkaWRFbmRTb3VuZCkpOworICAgIG1fdGFza1F1ZXVlLnB1c2hfYmFjayhuZXcg
Q2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZEVuZEF1
ZGlvKSk7CisgICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBDbGllbnRDYWxsVGFzayh0aGlz
LCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kKSk7CisKKyAgICBzdGFydFRhc2tR
dWV1ZSgpOworfQorCit2b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzdG9wKGNvbnN0IFdl
YlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBoYW5kbGUsIFdlYlNwZWVjaFJlY29nbml6ZXJDbGll
bnQqIGNsaWVudCkKK3sKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAgICBtX2NsaWVudCA9IGNs
aWVudDsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit2b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjphYm9ydChjb25z
dCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYgaGFuZGxlLCBXZWJTcGVlY2hSZWNvZ25pemVy
Q2xpZW50KiBjbGllbnQpCit7CisgICAgbV9oYW5kbGUgPSBoYW5kbGU7CisgICAgbV9jbGllbnQg
PSBjbGllbnQ7CisKKyAgICBjbGVhclRhc2tRdWV1ZSgpOworICAgIG1fd2FzQWJvcnRlZCA9IHRy
dWU7CisgICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAm
V2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kKSk7CisgICAgc3RhcnRUYXNrUXVldWUo
KTsKK30KKwordm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6YWRkTW9ja1Jlc3VsdChjb25z
dCBXZWJTdHJpbmcmIHRyYW5zY3JpcHQsIGZsb2F0IGNvbmZpZGVuY2UpCit7CisgICAgbV9tb2Nr
VHJhbnNjcmlwdHMucHVzaF9iYWNrKHRyYW5zY3JpcHQpOworICAgIG1fbW9ja0NvbmZpZGVuY2Vz
LnB1c2hfYmFjayhjb25maWRlbmNlKTsKK30KKwordm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXpl
cjo6c2V0RXJyb3IoY29uc3QgV2ViU3RyaW5nJiBlcnJvciwgY29uc3QgV2ViU3RyaW5nJiBtZXNz
YWdlKQoreworICAgIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OkVycm9yQ29kZSBjb2RlOwor
ICAgIGlmIChlcnJvciA9PSAiT3RoZXJFcnJvciIpCisgICAgICAgIGNvZGUgPSBXZWJTcGVlY2hS
ZWNvZ25pemVyQ2xpZW50OjpPdGhlckVycm9yOworICAgIGVsc2UgaWYgKGVycm9yID09ICJOb1Nw
ZWVjaEVycm9yIikKKyAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Ok5v
U3BlZWNoRXJyb3I7CisgICAgZWxzZSBpZiAoZXJyb3IgPT0gIkFib3J0ZWRFcnJvciIpCisgICAg
ICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpBYm9ydGVkRXJyb3I7CisgICAg
ZWxzZSBpZiAoZXJyb3IgPT0gIkF1ZGlvQ2FwdHVyZUVycm9yIikKKyAgICAgICAgY29kZSA9IFdl
YlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OkF1ZGlvQ2FwdHVyZUVycm9yOworICAgIGVsc2UgaWYg
KGVycm9yID09ICJOZXR3b3JrRXJyb3IiKQorICAgICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2du
aXplckNsaWVudDo6TmV0d29ya0Vycm9yOworICAgIGVsc2UgaWYgKGVycm9yID09ICJOb3RBbGxv
d2VkRXJyb3IiKQorICAgICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6Tm90
QWxsb3dlZEVycm9yOworICAgIGVsc2UgaWYgKGVycm9yID09ICJTZXJ2aWNlTm90QWxsb3dlZEVy
cm9yIikKKyAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OlNlcnZpY2VO
b3RBbGxvd2VkRXJyb3I7CisgICAgZWxzZSBpZiAoZXJyb3IgPT0gIkJhZEdyYW1tYXJFcnJvciIp
CisgICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpCYWRHcmFtbWFyRXJy
b3I7CisgICAgZWxzZSBpZiAoZXJyb3IgPT0gIkxhbmd1YWdlTm90U3VwcG9ydGVkRXJyb3IiKQor
ICAgICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6TGFuZ3VhZ2VOb3RTdXBw
b3J0ZWRFcnJvcjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybjsKKworICAgIGNsZWFyVGFza1F1
ZXVlKCk7CisgICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBFcnJvclRhc2sodGhpcywgY29k
ZSwgbWVzc2FnZSkpOworICAgIG1fdGFza1F1ZXVlLnB1c2hfYmFjayhuZXcgQ2xpZW50Q2FsbFRh
c2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZEVuZCkpOworICAgIHN0YXJ0
VGFza1F1ZXVlKCk7Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0YXJ0VGFz
a1F1ZXVlKCkKK3sKKyAgICBpZiAobV90YXNrUXVldWVSdW5uaW5nKQorICAgICAgICByZXR1cm47
CisgICAgbV9kZWxlZ2F0ZS0+cG9zdFRhc2sobmV3IFN0ZXBUYXNrKHRoaXMpKTsKKyAgICBtX3Rh
c2tRdWV1ZVJ1bm5pbmcgPSB0cnVlOworfQorCit2b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVy
OjpjbGVhclRhc2tRdWV1ZSgpCit7CisgICAgd2hpbGUgKCFtX3Rhc2tRdWV1ZS5lbXB0eSgpKSB7
CisgICAgICAgIGRlbGV0ZSBtX3Rhc2tRdWV1ZS5mcm9udCgpOworICAgICAgICBtX3Rhc2tRdWV1
ZS5wb3BfZnJvbnQoKTsKKyAgICB9CisgICAgbV90YXNrUXVldWVSdW5uaW5nID0gZmFsc2U7Cit9
CisKK3ZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlN0ZXBUYXNrOjpydW5JZlZhbGlkKCkK
K3sKKyAgICBpZiAobV9vYmplY3QtPm1fdGFza1F1ZXVlLmVtcHR5KCkpIHsKKyAgICAgICAgbV9v
YmplY3QtPm1fdGFza1F1ZXVlUnVubmluZyA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgVGFzayogdGFzayA9IG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZS5mcm9udCgpOworICAg
IG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZS5wb3BfZnJvbnQoKTsKKyAgICB0YXNrLT5ydW4oKTsKKyAg
ICBkZWxldGUgdGFzazsKKworICAgIGlmIChtX29iamVjdC0+bV90YXNrUXVldWUuZW1wdHkoKSkg
eworICAgICAgICBtX29iamVjdC0+bV90YXNrUXVldWVSdW5uaW5nID0gZmFsc2U7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX29iamVjdC0+bV9kZWxlZ2F0ZS0+cG9zdFRhc2sobmV3
IFN0ZXBUYXNrKG1fb2JqZWN0KSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmgg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3Bl
ZWNoUmVjb2duaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4OWJjMjZjMTczZDA5YjFiMWY1M2RlNGYzMTJj
MmJlNzkyYmJkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5oCkBAIC0wLDAgKzEs
MTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBNb2NrV2ViU3BlZWNoUmVjb2duaXplcl9oCisjZGVmaW5l
IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyX2gKKworI2luY2x1ZGUgIlRlc3RDb21tb24uaCIKKyNp
bmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pemVyLmgiCisjaW5jbHVkZSAiV2ViVGFzay5oIgorI2lu
Y2x1ZGUgPGRlcXVlPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIFdlYktpdCB7Citj
bGFzcyBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZTsKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml0
aW9uUGFyYW1zOworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDsKK30KKworbmFtZXNw
YWNlIFdlYlRlc3RSdW5uZXIgeworCitjbGFzcyBXZWJUZXN0RGVsZWdhdGU7CisKK2NsYXNzIE1v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyIDogcHVibGljIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXpl
ciB7CitwdWJsaWM6CisgICAgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIoKTsKKyAgICB+TW9ja1dl
YlNwZWVjaFJlY29nbml6ZXIoKTsKKworICAgIHZvaWQgc2V0RGVsZWdhdGUoV2ViVGVzdERlbGVn
YXRlKik7CisKKyAgICAvLyBXZWJTcGVlY2hSZWNvZ25pemVyIGltcGxlbWVudGF0aW9uOgorICAg
IHZpcnR1YWwgdm9pZCBzdGFydChjb25zdCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFu
ZGxlJiwgY29uc3QgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcyYsIFdlYktpdDo6
V2ViU3BlZWNoUmVjb2duaXplckNsaWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
dG9wKGNvbnN0IFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmLCBXZWJLaXQ6Oldl
YlNwZWVjaFJlY29nbml6ZXJDbGllbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJv
cnQoY29uc3QgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYsIFdlYktpdDo6V2Vi
U3BlZWNoUmVjb2duaXplckNsaWVudCopIE9WRVJSSURFOworCisgICAgLy8gTWV0aG9kcyBhY2Nl
c3NlZCBieSBsYXlvdXQgdGVzdHM6CisgICAgdm9pZCBhZGRNb2NrUmVzdWx0KGNvbnN0IFdlYktp
dDo6V2ViU3RyaW5nJiB0cmFuc2NyaXB0LCBmbG9hdCBjb25maWRlbmNlKTsKKyAgICB2b2lkIHNl
dEVycm9yKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBlcnJvciwgY29uc3QgV2ViS2l0OjpXZWJT
dHJpbmcmIG1lc3NhZ2UpOworICAgIGJvb2wgd2FzQWJvcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
d2FzQWJvcnRlZDsgfQorCisgICAgLy8gTWV0aG9kcyBhY2Nlc3NlZCBmcm9tIFRhc2sgb2JqZWN0
czoKKyAgICBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIGNsaWVudCgpIHsgcmV0
dXJuIG1fY2xpZW50OyB9CisgICAgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYg
aGFuZGxlKCkgeyByZXR1cm4gbV9oYW5kbGU7IH0KKyAgICBXZWJUYXNrTGlzdCogdGFza0xpc3Qo
KSB7IHJldHVybiAmbV90YXNrTGlzdDsgfQorCisgICAgY2xhc3MgVGFzayB7CisgICAgcHVibGlj
OgorICAgICAgICBUYXNrKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiByZWNvZ25pemVyKSA6IG1f
cmVjb2duaXplcihyZWNvZ25pemVyKSB7IH0KKyAgICAgICAgdmlydHVhbCB+VGFzaygpIHsgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgPSAwOworICAgIHByb3RlY3RlZDoKKyAgICAgICAg
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG1fcmVjb2duaXplcjsKKyAgICB9OworCitwcml2YXRl
OgorICAgIHZvaWQgc3RhcnRUYXNrUXVldWUoKTsKKyAgICB2b2lkIGNsZWFyVGFza1F1ZXVlKCk7
CisKKyAgICBXZWJUYXNrTGlzdCBtX3Rhc2tMaXN0OworICAgIFdlYktpdDo6V2ViU3BlZWNoUmVj
b2duaXRpb25IYW5kbGUgbV9oYW5kbGU7CisgICAgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVy
Q2xpZW50KiBtX2NsaWVudDsKKyAgICBzdGQ6OnZlY3RvcjxXZWJLaXQ6OldlYlN0cmluZz4gbV9t
b2NrVHJhbnNjcmlwdHM7CisgICAgc3RkOjp2ZWN0b3I8ZmxvYXQ+IG1fbW9ja0NvbmZpZGVuY2Vz
OworICAgIGJvb2wgbV93YXNBYm9ydGVkOworCisgICAgLy8gUXVldWUgb2YgdGFza3MgdG8gYmUg
cnVuLgorICAgIHN0ZDo6ZGVxdWU8VGFzayo+IG1fdGFza1F1ZXVlOworICAgIGJvb2wgbV90YXNr
UXVldWVSdW5uaW5nOworCisgICAgV2ViVGVzdERlbGVnYXRlKiBtX2RlbGVnYXRlOworCisgICAg
Ly8gVGFzayBmb3Igc3RlcHBpbmcgdGhlIHF1ZXVlLgorICAgIGNsYXNzIFN0ZXBUYXNrIDogcHVi
bGljIFdlYk1ldGhvZFRhc2s8TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI+IHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFN0ZXBUYXNrKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBvYmplY3QpIDogV2Vi
TWV0aG9kVGFzazxNb2NrV2ViU3BlZWNoUmVjb2duaXplcj4ob2JqZWN0KSB7IH0KKyAgICAgICAg
dmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSBPVkVSUklERTsKKyAgICB9OworfTsKKworfQorCisj
ZW5kaWYgLy8gTW9ja1dlYlNwZWVjaFJlY29nbml6ZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcApp
bmRleCBkNzllZDNmZTBjYWU3NTI2YWU3ZTRkMzMxMTkxMDE0MWNhMjkxOWU5Li5hZDNhMzM1Mzlm
MmI2Y2QxZmI4NGExOWY5OGQ3NTVhY2QzMTgwMjFiIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcApA
QCAtMzMsMTQgKzMzLDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFJ1
bm5lci5oIgogCisjaW5jbHVkZSAiTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIk1vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9u
UHJlc2VudGVyLmgiCiAjaW5jbHVkZSAiV2ViQmluZGluZ3MuaCIKICNpbmNsdWRlICJXZWJEYXRh
U291cmNlLmgiCiAjaW5jbHVkZSAiV2ViRGV2aWNlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJX
ZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suaCIKICNpbmNsdWRlICJXZWJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIldlYkVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJGaW5kT3B0aW9ucy5oIgog
I2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25DbGllbnRNb2Nr
LmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViUGVybWlzc2lv
bnMuaCIKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgpAQCAtMzM5LDYgKzM0MywxMiBAQCB2
b2lkIFRlc3RSdW5uZXI6OnNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCiAj
aWYgRU5BQkxFX05PVElGSUNBVElPTlMKICAgICBtX25vdGlmaWNhdGlvblByZXNlbnRlci0+c2V0
RGVsZWdhdGUoZGVsZWdhdGUpOwogI2VuZGlmCisjaWYgRU5BQkxFX0lOUFVUX1NQRUVDSAorICAg
IGlmIChtX3NwZWVjaElucHV0Q29udHJvbGxlci5nZXQoKSkKKyAgICAgICAgbV9zcGVlY2hJbnB1
dENvbnRyb2xsZXItPnNldERlbGVnYXRlKGRlbGVnYXRlKTsKKyNlbmRpZgorICAgIGlmIChtX3Nw
ZWVjaFJlY29nbml6ZXIuZ2V0KCkpCisgICAgICAgIG1fc3BlZWNoUmVjb2duaXplci0+c2V0RGVs
ZWdhdGUoZGVsZWdhdGUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdlYlZpZXcoV2ViVmll
dyogd2ViVmlldywgV2ViVGVzdFByb3h5QmFzZSogcHJveHkpCkBAIC00MjcsNiArNDM3LDE0IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXQoKQogI2lmIEVOQUJMRV9OT1RJRklDQVRJT05TCiAgICAg
bV9ub3RpZmljYXRpb25QcmVzZW50ZXItPnJlc2V0KCk7CiAjZW5kaWYKKyAgICBpZiAobV9nZW9s
b2NhdGlvbkNsaWVudC5nZXQoKSkKKyAgICAgICAgbV9nZW9sb2NhdGlvbkNsaWVudC0+cmVzZXRN
b2NrKCk7CisjaWYgRU5BQkxFX0lOUFVUX1NQRUVDSAorICAgIGlmIChtX3NwZWVjaElucHV0Q29u
dHJvbGxlci5nZXQoKSkKKyAgICAgICAgbV9zcGVlY2hJbnB1dENvbnRyb2xsZXItPmNsZWFyUmVz
dWx0cygpOworI2VuZGlmCisgICAgbV9wb2ludGVyTG9ja2VkID0gZmFsc2U7CisgICAgbV9wb2lu
dGVyTG9ja1BsYW5uZWRSZXN1bHQgPSBQb2ludGVyTG9ja1dpbGxTdWNjZWVkOwogCiAgICAgbV90
YXNrTGlzdC5yZXZva2VBbGwoKTsKICAgICBtX3dvcmtRdWV1ZS5yZXNldCgpOwpAQCAtNjgzLDYg
KzcwMSwxMDUgQEAgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBUZXN0UnVubmVyOjpub3RpZmlj
YXRpb25QcmVzZW50ZXIoKSBjb25zdAogfQogI2VuZGlmCiAKK1dlYkdlb2xvY2F0aW9uQ2xpZW50
KiBUZXN0UnVubmVyOjpnZW9sb2NhdGlvbkNsaWVudCgpCit7CisgICAgcmV0dXJuIGdlb2xvY2F0
aW9uQ2xpZW50TW9jaygpOworCit9CitXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2sqIFRlc3RSdW5u
ZXI6Omdlb2xvY2F0aW9uQ2xpZW50TW9jaygpCit7CisgICAgaWYgKCFtX2dlb2xvY2F0aW9uQ2xp
ZW50LmdldCgpKQorICAgICAgICBtX2dlb2xvY2F0aW9uQ2xpZW50LnJlc2V0KFdlYkdlb2xvY2F0
aW9uQ2xpZW50TW9jazo6Y3JlYXRlKCkpOworICAgIHJldHVybiBtX2dlb2xvY2F0aW9uQ2xpZW50
LmdldCgpOworfQorCisjaWYgRU5BQkxFX0lOUFVUX1NQRUVDSAorV2ViU3BlZWNoSW5wdXRDb250
cm9sbGVyKiBUZXN0UnVubmVyOjpzcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViU3BlZWNoSW5wdXRM
aXN0ZW5lciogbGlzdGVuZXIpCit7CisgICAgaWYgKCFtX3NwZWVjaElucHV0Q29udHJvbGxlci5n
ZXQoKSkgeworICAgICAgICBtX3NwZWVjaElucHV0Q29udHJvbGxlci5yZXNldChuZXcgTW9ja1dl
YlNwZWVjaElucHV0Q29udHJvbGxlcihsaXN0ZW5lcikpOworICAgICAgICBtX3NwZWVjaElucHV0
Q29udHJvbGxlci0+c2V0RGVsZWdhdGUobV9kZWxlZ2F0ZSk7CisgICAgfQorICAgIHJldHVybiBt
X3NwZWVjaElucHV0Q29udHJvbGxlci5nZXQoKTsKK30KKyNlbmRpZgorCitXZWJTcGVlY2hSZWNv
Z25pemVyKiBUZXN0UnVubmVyOjpzcGVlY2hSZWNvZ25pemVyKCkKK3sKKyAgICBpZiAoIW1fc3Bl
ZWNoUmVjb2duaXplci5nZXQoKSkgeworICAgICAgICBtX3NwZWVjaFJlY29nbml6ZXIucmVzZXQo
bmV3IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKCkpOworICAgICAgICBtX3NwZWVjaFJlY29nbml6
ZXItPnNldERlbGVnYXRlKG1fZGVsZWdhdGUpOworICAgIH0KKyAgICByZXR1cm4gbV9zcGVlY2hS
ZWNvZ25pemVyLmdldCgpOworfQorCitXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudCogVGVzdFJ1
bm5lcjo6ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKQoreworICAgIHJldHVybiBkZXZpY2VPcmll
bnRhdGlvbkNsaWVudE1vY2soKTsKK30KKworV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2Nr
KiBUZXN0UnVubmVyOjpkZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2soKQoreworICAgIGlmICgh
bV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudC5nZXQoKSkKKyAgICAgICAgbV9kZXZpY2VPcmllbnRh
dGlvbkNsaWVudC5yZXNldChXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2s6OmNyZWF0ZSgp
KTsKKyAgICByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudC5nZXQoKTsKK30KKworYm9v
bCBUZXN0UnVubmVyOjpyZXF1ZXN0UG9pbnRlckxvY2soKQoreworICAgIHN3aXRjaCAobV9wb2lu
dGVyTG9ja1BsYW5uZWRSZXN1bHQpIHsKKyAgICBjYXNlIFBvaW50ZXJMb2NrV2lsbFN1Y2NlZWQ6
CisgICAgICAgIG1fZGVsZWdhdGUtPnBvc3REZWxheWVkVGFzayhuZXcgSG9zdE1ldGhvZFRhc2so
dGhpcywgJlRlc3RSdW5uZXI6OmRpZEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKSwgMCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgUG9pbnRlckxvY2tXaWxsUmVzcG9uZEFzeW5j
OgorICAgICAgICBXRUJLSVRfQVNTRVJUKCFtX3BvaW50ZXJMb2NrZWQpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjYXNlIFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jOgorICAgICAgICBXRUJL
SVRfQVNTRVJUKCFtX3BvaW50ZXJMb2NrZWQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFRlc3RSdW5uZXI6OnJlcXVlc3RQb2ludGVy
VW5sb2NrKCkKK3sKKyAgICBtX2RlbGVnYXRlLT5wb3N0RGVsYXllZFRhc2sobmV3IEhvc3RNZXRo
b2RUYXNrKHRoaXMsICZUZXN0UnVubmVyOjpkaWRMb3NlUG9pbnRlckxvY2tJbnRlcm5hbCksIDAp
OworfQorCitib29sIFRlc3RSdW5uZXI6OmlzUG9pbnRlckxvY2tlZCgpCit7CisgICAgcmV0dXJu
IG1fcG9pbnRlckxvY2tlZDsKK30KKwordm9pZCBUZXN0UnVubmVyOjpkaWRBY3F1aXJlUG9pbnRl
ckxvY2tJbnRlcm5hbCgpCit7CisgICAgbV9wb2ludGVyTG9ja2VkID0gdHJ1ZTsKKyAgICBtX3dl
YlZpZXctPmRpZEFjcXVpcmVQb2ludGVyTG9jaygpOworCisgICAgLy8gUmVzZXQgcGxhbm5lZCBy
ZXN1bHQgdG8gZGVmYXVsdC4KKyAgICBtX3BvaW50ZXJMb2NrUGxhbm5lZFJlc3VsdCA9IFBvaW50
ZXJMb2NrV2lsbFN1Y2NlZWQ7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGlkTm90QWNxdWlyZVBv
aW50ZXJMb2NrSW50ZXJuYWwoKQoreworICAgIFdFQktJVF9BU1NFUlQoIW1fcG9pbnRlckxvY2tl
ZCk7CisgICAgbV9wb2ludGVyTG9ja2VkID0gZmFsc2U7CisgICAgbV93ZWJWaWV3LT5kaWROb3RB
Y3F1aXJlUG9pbnRlckxvY2soKTsKKworICAgIC8vIFJlc2V0IHBsYW5uZWQgcmVzdWx0IHRvIGRl
ZmF1bHQuCisgICAgbV9wb2ludGVyTG9ja1BsYW5uZWRSZXN1bHQgPSBQb2ludGVyTG9ja1dpbGxT
dWNjZWVkOworfQorCit2b2lkIFRlc3RSdW5uZXI6OmRpZExvc2VQb2ludGVyTG9ja0ludGVybmFs
KCkKK3sKKyAgICBib29sIHdhc0xvY2tlZCA9IG1fcG9pbnRlckxvY2tlZDsKKyAgICBtX3BvaW50
ZXJMb2NrZWQgPSBmYWxzZTsKKyAgICBpZiAod2FzTG9ja2VkKQorICAgICAgICBtX3dlYlZpZXct
PmRpZExvc2VQb2ludGVyTG9jaygpOworfQorCiB2b2lkIFRlc3RSdW5uZXI6OnNob3dEZXZUb29s
cygpCiB7CiAgICAgbV9kZWxlZ2F0ZS0+c2hvd0RldlRvb2xzKCk7CkBAIC0xNTExLDEwICsxNjI4
LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFYKICAgICBpZiAoYXJndW1lbnRzWzRdLnRvQm9v
bGVhbigpKQogICAgICAgICBvcmllbnRhdGlvbi5zZXRHYW1tYShhcmd1bWVudHNbNV0udG9Eb3Vi
bGUoKSk7CiAKLSAgICAvLyBOb3RlIHRoYXQgd2Ugb25seSBjYWxsIHNldE9yaWVudGF0aW9uIG9u
IHRoZSBtYWluIHBhZ2UncyBtb2NrIHNpbmNlIHRoaXMgaXMgYWxsIHRoYXQgdGhlCi0gICAgLy8g
dGVzdHMgcmVxdWlyZS4gSWYgbmVjZXNzYXJ5LCB3ZSBjb3VsZCBnZXQgYSBsaXN0IG9mIFdlYlZp
ZXdIb3N0cyBmcm9tIHRoZSBUZXN0U2hlbGwgYW5kCi0gICAgLy8gY2FsbCBzZXRPcmllbnRhdGlv
biBvbiBlYWNoIERldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay4KLSAgICBtX2RlbGVnYXRlLT5z
ZXREZXZpY2VPcmllbnRhdGlvbihvcmllbnRhdGlvbik7CisgICAgZGV2aWNlT3JpZW50YXRpb25D
bGllbnRNb2NrKCktPnNldE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKQEAgLTE3NTksNyArMTg3Myw3IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0UE9TSVhMb2NhbGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlCiAKIHZvaWQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICByZXN1bHQtPnNldChtX2RlbGVnYXRlLT5u
dW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpKTsKKyAgICByZXN1
bHQtPnNldChnZW9sb2NhdGlvbkNsaWVudE1vY2soKS0+bnVtYmVyT2ZQZW5kaW5nUGVybWlzc2lv
blJlcXVlc3RzKCkpOwogfQogCiAvLyBGSVhNRTogRm9yIGdyZWF0ZXIgdGVzdCBmbGV4aWJpbGl0
eSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gc2V0IGVhY2ggcGFnZSdzIGdlb2xvY2F0aW9uIG1vY2sg
aW5kaXZpZHVhbGx5LgpAQCAtMTc2OSw3ICsxODgzLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFYKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEg
fHwgIWFyZ3VtZW50c1swXS5pc0Jvb2woKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fZGVsZWdh
dGUtPnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwor
ICAgIGdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5zZXRQZXJtaXNzaW9uKGFyZ3VtZW50c1swXS50
b0Jvb2xlYW4oKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKQEAgLTE3NzcsNyArMTg5MSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwCiAgICAgcmVz
dWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAzIHx8ICFhcmd1bWVu
dHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50
c1syXS5pc051bWJlcigpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0TW9j
a0dlb2xvY2F0aW9uUG9zaXRpb24oYXJndW1lbnRzWzBdLnRvRG91YmxlKCksIGFyZ3VtZW50c1sx
XS50b0RvdWJsZSgpLCBhcmd1bWVudHNbMl0udG9Eb3VibGUoKSk7CisgICAgZ2VvbG9jYXRpb25D
bGllbnRNb2NrKCktPnNldFBvc2l0aW9uKGFyZ3VtZW50c1swXS50b0RvdWJsZSgpLCBhcmd1bWVu
dHNbMV0udG9Eb3VibGUoKSwgYXJndW1lbnRzWzJdLnRvRG91YmxlKCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpAQCAtMTc4
NSw3ICsxODk5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
blVuYXZhaWxhYmxlRXJyb3IoY29uc3QgQ3BwQXJndW1lbnRMaXMKICAgICByZXN1bHQtPnNldE51
bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxIHx8ICFhcmd1bWVudHNbMF0uaXNT
dHJpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fZGVsZWdhdGUtPnNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihhcmd1bWVudHNbMF0udG9TdHJpbmcoKSk7Cisg
ICAgZ2VvbG9jYXRpb25DbGllbnRNb2NrKCktPnNldFBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihX
ZWJTdHJpbmc6OmZyb21VVEY4KGFyZ3VtZW50c1swXS50b1N0cmluZygpKSk7CiB9CiAKICNpZiBF
TkFCTEVfTk9USUZJQ0FUSU9OUwpAQCAtMTgxNSw3ICsxOTI5LDEwIEBAIHZvaWQgVGVzdFJ1bm5l
cjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWCiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAzIHx8ICFhcmd1bWVudHNbMF0u
aXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1syXS5p
c1N0cmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RlbGVnYXRlLT5hZGRNb2NrU3Bl
ZWNoSW5wdXRSZXN1bHQoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCksIGFyZ3VtZW50c1sxXS50b0Rv
dWJsZSgpLCBhcmd1bWVudHNbMl0udG9TdHJpbmcoKSk7CisjaWYgRU5BQkxFX0lOUFVUX1NQRUVD
SAorICAgIFdFQktJVF9BU1NFUlQobV9zcGVlY2hJbnB1dENvbnRyb2xsZXIuZ2V0KCkpOworICAg
IG1fc3BlZWNoSW5wdXRDb250cm9sbGVyLT5hZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoV2ViU3Ry
aW5nOjpmcm9tVVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSksIGFyZ3VtZW50c1sxXS50b0Rv
dWJsZSgpLCBXZWJTdHJpbmc6OmZyb21VVEY4KGFyZ3VtZW50c1syXS50b1N0cmluZygpKSk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpAQCAt
MTgyNCw3ICsxOTQxLDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaElucHV0RHVt
cFJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwCiAgICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fZGVsZWdhdGUtPnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGFyZ3VtZW50
c1swXS50b0Jvb2xlYW4oKSk7CisjaWYgRU5BQkxFX0lOUFVUX1NQRUVDSAorICAgIFdFQktJVF9B
U1NFUlQobV9zcGVlY2hJbnB1dENvbnRyb2xsZXIuZ2V0KCkpOworICAgIG1fc3BlZWNoSW5wdXRD
b250cm9sbGVyLT5zZXREdW1wUmVjdChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOworI2VuZGlm
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCkBAIC0x
ODMzLDcgKzE5NTMsOCBAQCB2b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlv
blJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cwogICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sx
XS5pc051bWJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RlbGVnYXRlLT5hZGRNb2Nr
U3BlZWNoUmVjb2duaXRpb25SZXN1bHQoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCksIGFyZ3VtZW50
c1sxXS50b0RvdWJsZSgpKTsKKyAgICBXRUJLSVRfQVNTRVJUKG1fc3BlZWNoUmVjb2duaXplci5n
ZXQoKSk7CisgICAgbV9zcGVlY2hSZWNvZ25pemVyLT5hZGRNb2NrUmVzdWx0KFdlYlN0cmluZzo6
ZnJvbVVURjgoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpLCBhcmd1bWVudHNbMV0udG9Eb3VibGUo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3Io
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKQEAg
LTE4NDIsMTIgKzE5NjMsMTQgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoUmVjb2du
aXRpb25FcnJvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywKICAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1l
bnRzWzFdLmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGVsZWdhdGUtPnNl
dE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVycm9yKGFyZ3VtZW50c1swXS50b1N0cmluZygpLCBhcmd1
bWVudHNbMV0udG9TdHJpbmcoKSk7CisgICAgV0VCS0lUX0FTU0VSVChtX3NwZWVjaFJlY29nbml6
ZXIuZ2V0KCkpOworICAgIG1fc3BlZWNoUmVjb2duaXplci0+c2V0RXJyb3IoV2ViU3RyaW5nOjpm
cm9tVVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSksIFdlYlN0cmluZzo6ZnJvbVVURjgoYXJn
dW1lbnRzWzFdLnRvU3RyaW5nKCkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjp3YXNNb2NrU3Bl
ZWNoUmVjb2duaXRpb25BYm9ydGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKIHsKLSAgICByZXN1bHQtPnNldChtX2RlbGVnYXRlLT53YXNNb2NrU3BlZWNoUmVj
b2duaXRpb25BYm9ydGVkKCkpOworICAgIFdFQktJVF9BU1NFUlQobV9zcGVlY2hSZWNvZ25pemVy
LmdldCgpKTsKKyAgICByZXN1bHQtPnNldChtX3NwZWVjaFJlY29nbml6ZXItPndhc0Fib3J0ZWQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheShjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpAQCAtMjAyNSwzMSArMjE0OCwzMSBAQCB2
b2lkIFRlc3RSdW5uZXI6Om5vdEltcGxlbWVudGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKIAogdm9pZCBUZXN0UnVubmVyOjpkaWRBY3F1aXJlUG9pbnRlckxv
Y2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewotICAgIG1f
ZGVsZWdhdGUtPmRpZEFjcXVpcmVQb2ludGVyTG9jaygpOworICAgIGRpZEFjcXVpcmVQb2ludGVy
TG9ja0ludGVybmFsKCk7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6ZGlkTm90QWNxdWlyZVBvaW50ZXJMb2NrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICBtX2RlbGVnYXRlLT5kaWROb3RBY3F1aXJlUG9pbnRl
ckxvY2soKTsKKyAgICBkaWROb3RBY3F1aXJlUG9pbnRlckxvY2tJbnRlcm5hbCgpOwogICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpZExvc2VQb2ludGVyTG9j
ayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgbV9k
ZWxlZ2F0ZS0+ZGlkTG9zZVBvaW50ZXJMb2NrKCk7CisgICAgZGlkTG9zZVBvaW50ZXJMb2NrSW50
ZXJuYWwoKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmNocm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewotICAgIG1fZGVsZWdhdGUtPnNldFBvaW50ZXJM
b2NrV2lsbFJlc3BvbmRBc3luY2hyb25vdXNseSgpOworICAgIG1fcG9pbnRlckxvY2tQbGFubmVk
UmVzdWx0ID0gUG9pbnRlckxvY2tXaWxsUmVzcG9uZEFzeW5jOwogICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jaHJv
bm91c2x5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAg
ICBtX2RlbGVnYXRlLT5zZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNseSgpOworICAg
IG1fcG9pbnRlckxvY2tQbGFubmVkUmVzdWx0ID0gUG9pbnRlckxvY2tXaWxsRmFpbFN5bmM7CiAg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaAppbmRleCA0NjI3OTRh
ZjdkMzI5ZmI4NzA1NGY4YWRhNGExNzM3MDlhNzZiNDRlLi5hMmVjMjA0NjYzOTk1MmFhNzA3MDBj
NzhlOWFlZjBmMjk2YmQ2YTU2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oCkBAIC00NywxMyArNDcsMjIg
QEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJBcnJheUJ1ZmZlclZpZXc7CitjbGFz
cyBXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudDsKK2NsYXNzIFdlYkRldmljZU9yaWVudGF0aW9u
Q2xpZW50TW9jazsKK2NsYXNzIFdlYkdlb2xvY2F0aW9uQ2xpZW50OworY2xhc3MgV2ViR2VvbG9j
YXRpb25DbGllbnRNb2NrOwogY2xhc3MgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOwogY2xhc3Mg
V2ViUGVybWlzc2lvbkNsaWVudDsKK2NsYXNzIFdlYlNwZWVjaElucHV0Q29udHJvbGxlcjsKK2Ns
YXNzIFdlYlNwZWVjaElucHV0TGlzdGVuZXI7CitjbGFzcyBXZWJTcGVlY2hSZWNvZ25pemVyOwog
Y2xhc3MgV2ViVmlldzsKIH0KIAogbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewogCitjbGFzcyBN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOworY2xhc3MgTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXI7CiBjbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXI7CiBjbGFzcyBXZWJQZXJtaXNzaW9uczsK
IGNsYXNzIFdlYlRlc3REZWxlZ2F0ZTsKQEAgLTEyMiw2ICsxMzEsMTUgQEAgcHVibGljOgogI2lm
IEVOQUJMRV9OT1RJRklDQVRJT05TCiAgICAgV2ViS2l0OjpXZWJOb3RpZmljYXRpb25QcmVzZW50
ZXIqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpIGNvbnN0OwogI2VuZGlmCisgICAgV2ViS2l0OjpX
ZWJHZW9sb2NhdGlvbkNsaWVudCogZ2VvbG9jYXRpb25DbGllbnQoKTsKKyNpZiBFTkFCTEVfSU5Q
VVRfU1BFRUNICisgICAgV2ViS2l0OjpXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIHNwZWVjaElu
cHV0Q29udHJvbGxlcihXZWJLaXQ6OldlYlNwZWVjaElucHV0TGlzdGVuZXIqKTsKKyNlbmRpZgor
ICAgIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplciogc3BlZWNoUmVjb2duaXplcigpOworICAg
IFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQqIGRldmljZU9yaWVudGF0aW9uQ2xp
ZW50KCk7CisgICAgYm9vbCByZXF1ZXN0UG9pbnRlckxvY2soKTsKKyAgICB2b2lkIHJlcXVlc3RQ
b2ludGVyVW5sb2NrKCk7CisgICAgYm9vbCBpc1BvaW50ZXJMb2NrZWQoKTsKIAogICAgIC8vIEEg
c2luZ2xlIGl0ZW0gaW4gdGhlIHdvcmsgcXVldWUuCiAgICAgY2xhc3MgV29ya0l0ZW0gewpAQCAt
NTAyLDYgKzUyMCwyNiBAQCBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxp
ZCgpIHsgbV9vYmplY3QtPmNvbXBsZXRlTm90aWZ5RG9uZSh0cnVlKTsgfQogICAgIH07CiAKKyAg
ICBjbGFzcyBIb3N0TWV0aG9kVGFzayA6IHB1YmxpYyBXZWJNZXRob2RUYXNrPFRlc3RSdW5uZXI+
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgdm9pZCAoVGVzdFJ1bm5lcjo6KkNhbGxi
YWNrTWV0aG9kVHlwZSkoKTsKKyAgICAgICAgSG9zdE1ldGhvZFRhc2soVGVzdFJ1bm5lciogb2Jq
ZWN0LCBDYWxsYmFja01ldGhvZFR5cGUgY2FsbGJhY2spCisgICAgICAgICAgICA6IFdlYk1ldGhv
ZFRhc2s8VGVzdFJ1bm5lcj4ob2JqZWN0KQorICAgICAgICAgICAgLCBtX2NhbGxiYWNrKGNhbGxi
YWNrKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIHsg
KG1fb2JqZWN0LT4qbV9jYWxsYmFjaykoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2Fs
bGJhY2tNZXRob2RUeXBlIG1fY2FsbGJhY2s7CisgICAgfTsKKyAgICB2b2lkIGRpZEFjcXVpcmVQ
b2ludGVyTG9ja0ludGVybmFsKCk7CisgICAgdm9pZCBkaWROb3RBY3F1aXJlUG9pbnRlckxvY2tJ
bnRlcm5hbCgpOworICAgIHZvaWQgZGlkTG9zZVBvaW50ZXJMb2NrSW50ZXJuYWwoKTsKKworICAg
IFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKiBkZXZpY2VPcmllbnRhdGlv
bkNsaWVudE1vY2soKTsKKyAgICBXZWJLaXQ6OldlYkdlb2xvY2F0aW9uQ2xpZW50TW9jayogZ2Vv
bG9jYXRpb25DbGllbnRNb2NrKCk7CisKICAgICBib29sIGVsZW1lbnREb2VzQXV0b0NvbXBsZXRl
Rm9yRWxlbWVudFdpdGhJZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYpOwogICAgIGJvb2wgY3Bw
VmFyaWFudFRvQm9vbChjb25zdCBDcHBWYXJpYW50Jik7CiAgICAgaW50MzJfdCBjcHBWYXJpYW50
VG9JbnQzMihjb25zdCBDcHBWYXJpYW50Jik7CkBAIC02NzMsNiArNzExLDIxIEBAIHByaXZhdGU6
CiAjaWYgRU5BQkxFX05PVElGSUNBVElPTlMKICAgICBzdGQ6OmF1dG9fcHRyPE5vdGlmaWNhdGlv
blByZXNlbnRlcj4gbV9ub3RpZmljYXRpb25QcmVzZW50ZXI7CiAjZW5kaWYKKworICAgIHN0ZDo6
YXV0b19wdHI8V2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2s+IG1fZ2VvbG9jYXRpb25D
bGllbnQ7CisgICAgc3RkOjphdXRvX3B0cjxXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0aW9uQ2xp
ZW50TW9jaz4gbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudDsKKyAgICBzdGQ6OmF1dG9fcHRyPE1v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyPiBtX3NwZWVjaFJlY29nbml6ZXI7CisKKyNpZiBFTkFCTEVf
SU5QVVRfU1BFRUNICisgICAgc3RkOjphdXRvX3B0cjxNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyPiBtX3NwZWVjaElucHV0Q29udHJvbGxlcjsKKyNlbmRpZgorCisgICAgYm9vbCBtX3BvaW50
ZXJMb2NrZWQ7CisgICAgZW51bSB7CisgICAgICAgIFBvaW50ZXJMb2NrV2lsbFN1Y2NlZWQsCisg
ICAgICAgIFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luYywKKyAgICAgICAgUG9pbnRlckxvY2tX
aWxsRmFpbFN5bmMsCisgICAgfSBtX3BvaW50ZXJMb2NrUGxhbm5lZFJlc3VsdDsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1dlYlRlc3RQcm94eS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9XZWJUZXN0UHJveHkuY3BwCmluZGV4IDcwZDM5MjNiY2RhMTljYjJmMmZjZTE3MDUx
NTgwYWM1N2I4ZDYyZmMuLmNhNDRmNzcwNzQ0ZjA4Yjc0ZjJmNDE3MWQxMGE4ODYyMWZmMmViOWUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1dlYlRlc3RQcm94eS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvV2ViVGVzdFByb3h5LmNwcApAQCAtOTU0LDYgKzk1NCw0NiBAQCBXZWJOb3Rp
ZmljYXRpb25QcmVzZW50ZXIqIFdlYlRlc3RQcm94eUJhc2U6Om5vdGlmaWNhdGlvblByZXNlbnRl
cigpCiAjZW5kaWYKIH0KIAorV2ViR2VvbG9jYXRpb25DbGllbnQqIFdlYlRlc3RQcm94eUJhc2U6
Omdlb2xvY2F0aW9uQ2xpZW50KCkKK3sKKyAgICByZXR1cm4gbV90ZXN0SW50ZXJmYWNlcy0+dGVz
dFJ1bm5lcigpLT5nZW9sb2NhdGlvbkNsaWVudCgpOworfQorCitXZWJTcGVlY2hJbnB1dENvbnRy
b2xsZXIqIFdlYlRlc3RQcm94eUJhc2U6OnNwZWVjaElucHV0Q29udHJvbGxlcihXZWJTcGVlY2hJ
bnB1dExpc3RlbmVyKiBsaXN0ZW5lcikKK3sKKyNpZiBFTkFCTEVfSU5QVVRfU1BFRUNICisgICAg
cmV0dXJuIG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c3BlZWNoSW5wdXRDb250cm9s
bGVyKGxpc3RlbmVyKTsKKyNlbHNlCisgICAgV0VCS0lUX0FTU0VSVChsaXN0ZW5lcik7CisgICAg
cmV0dXJuIDA7CisjZW5kaWYKK30KKworV2ViU3BlZWNoUmVjb2duaXplciogV2ViVGVzdFByb3h5
QmFzZTo6c3BlZWNoUmVjb2duaXplcigpCit7CisgICAgcmV0dXJuIG1fdGVzdEludGVyZmFjZXMt
PnRlc3RSdW5uZXIoKS0+c3BlZWNoUmVjb2duaXplcigpOworfQorCitXZWJEZXZpY2VPcmllbnRh
dGlvbkNsaWVudCogV2ViVGVzdFByb3h5QmFzZTo6ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKQor
eworICAgIHJldHVybiBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPmRldmljZU9yaWVu
dGF0aW9uQ2xpZW50KCk7Cit9CisKK2Jvb2wgV2ViVGVzdFByb3h5QmFzZTo6cmVxdWVzdFBvaW50
ZXJMb2NrKCkKK3sKKyAgICByZXR1cm4gbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5y
ZXF1ZXN0UG9pbnRlckxvY2soKTsKK30KKwordm9pZCBXZWJUZXN0UHJveHlCYXNlOjpyZXF1ZXN0
UG9pbnRlclVubG9jaygpCit7CisgICAgbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5y
ZXF1ZXN0UG9pbnRlclVubG9jaygpOworfQorCitib29sIFdlYlRlc3RQcm94eUJhc2U6OmlzUG9p
bnRlckxvY2tlZCgpCit7CisgICAgcmV0dXJuIG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIo
KS0+aXNQb2ludGVyTG9ja2VkKCk7Cit9CisKIHZvaWQgV2ViVGVzdFByb3h5QmFzZTo6d2lsbFBl
cmZvcm1DbGllbnRSZWRpcmVjdChXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYlVSTCYsIGNvbnN0
IFdlYlVSTCYgdG8sIGRvdWJsZSwgZG91YmxlKQogewogICAgIGlmIChtX3Rlc3RJbnRlcmZhY2Vz
LT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IGM0Yzk2MmRi
ZjljNjNlODRhOGM0M2Q3NTE4MWU5NWNkZDhjMjcxYWMuLjg3ZmExMDYyYjUxZGMyZDg2OTRiOTRm
Yjc3ZjMxMjg4MzA2ZjAzYzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1dlYlZpZXdIb3N0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9X
ZWJWaWV3SG9zdC5jcHAKQEAgLTMyLDggKzMyLDYgQEAKICNpbmNsdWRlICJXZWJWaWV3SG9zdC5o
IgogCiAjaW5jbHVkZSAiRFJURGV2VG9vbHNBZ2VudC5oIgotI2luY2x1ZGUgIk1vY2tXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJNb2NrV2ViU3BlZWNoUmVjb2duaXplci5o
IgogI2luY2x1ZGUgIlRhc2suaCIKICNpbmNsdWRlICJUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJUZXN0U2hlbGwuaCIKQEAgLTQyLDExICs0MCw5IEBACiAjaW5jbHVkZSAi
V2ViQ29udGV4dE1lbnVEYXRhLmgiCiAjaW5jbHVkZSAiV2ViRE9NTWVzc2FnZUV2ZW50LmgiCiAj
aW5jbHVkZSAiV2ViRGF0YVNvdXJjZS5oIgotI2luY2x1ZGUgIldlYkRldmljZU9yaWVudGF0aW9u
Q2xpZW50TW9jay5oIgogI2luY2x1ZGUgIldlYkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiV2ViRWxl
bWVudC5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25D
bGllbnRNb2NrLmgiCiAjaW5jbHVkZSAiV2ViSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJXZWJL
aXQuaCIKICNpbmNsdWRlICJXZWJOb2RlLmgiCkBAIC0yNjksNDggKzI2NSw2IEBAIGludCBXZWJW
aWV3SG9zdDo6aGlzdG9yeUZvcndhcmRMaXN0Q291bnQoKQogICAgIHJldHVybiBuYXZpZ2F0aW9u
Q29udHJvbGxlcigpLT5lbnRyeUNvdW50KCkgLSBjdXJyZW50SW5kZXggLSAxOwogfQogCi1XZWJL
aXQ6OldlYkdlb2xvY2F0aW9uQ2xpZW50KiBXZWJWaWV3SG9zdDo6Z2VvbG9jYXRpb25DbGllbnQo
KQotewotICAgIHJldHVybiBnZW9sb2NhdGlvbkNsaWVudE1vY2soKTsKLX0KLQotV2ViS2l0OjpX
ZWJHZW9sb2NhdGlvbkNsaWVudE1vY2sqIFdlYlZpZXdIb3N0OjpnZW9sb2NhdGlvbkNsaWVudE1v
Y2soKQotewotICAgIGlmICghbV9nZW9sb2NhdGlvbkNsaWVudE1vY2spCi0gICAgICAgIG1fZ2Vv
bG9jYXRpb25DbGllbnRNb2NrID0gYWRvcHRQdHIoV2ViR2VvbG9jYXRpb25DbGllbnRNb2NrOjpj
cmVhdGUoKSk7Ci0gICAgcmV0dXJuIG1fZ2VvbG9jYXRpb25DbGllbnRNb2NrLmdldCgpOwotfQot
Ci0jaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLVdlYlNwZWVjaElucHV0Q29udHJvbGxlciogV2Vi
Vmlld0hvc3Q6OnNwZWVjaElucHV0Q29udHJvbGxlcihXZWJLaXQ6OldlYlNwZWVjaElucHV0TGlz
dGVuZXIqIGxpc3RlbmVyKQotewotICAgIGlmICghbV9zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2Nr
KQotICAgICAgICBtX3NwZWVjaElucHV0Q29udHJvbGxlck1vY2sgPSBNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyOjpjcmVhdGUobGlzdGVuZXIpOwotICAgIHJldHVybiBtX3NwZWVjaElucHV0
Q29udHJvbGxlck1vY2suZ2V0KCk7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTQ1JJUFRFRF9T
UEVFQ0gpCi1XZWJTcGVlY2hSZWNvZ25pemVyKiBXZWJWaWV3SG9zdDo6c3BlZWNoUmVjb2duaXpl
cigpCi17Ci0gICAgaWYgKCFtX21vY2tTcGVlY2hSZWNvZ25pemVyKQotICAgICAgICBtX21vY2tT
cGVlY2hSZWNvZ25pemVyID0gTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmNyZWF0ZSgpOwotICAg
IHJldHVybiBtX21vY2tTcGVlY2hSZWNvZ25pemVyLmdldCgpOwotfQotI2VuZGlmCi0KLVdlYkRl
dmljZU9yaWVudGF0aW9uQ2xpZW50TW9jayogV2ViVmlld0hvc3Q6OmRldmljZU9yaWVudGF0aW9u
Q2xpZW50TW9jaygpCi17Ci0gICAgaWYgKCFtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5n
ZXQoKSkKLSAgICAgICAgbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2sgPSBhZG9wdFB0cihX
ZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2s6OmNyZWF0ZSgpKTsKLSAgICByZXR1cm4gbV9k
ZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suZ2V0KCk7Ci19Ci0KLVdlYkRldmljZU9yaWVudGF0
aW9uQ2xpZW50KiBXZWJWaWV3SG9zdDo6ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKQotewotICAg
IHJldHVybiBkZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2soKTsKLX0KLQogLy8gV2ViV2lkZ2V0
Q2xpZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIHZvaWQgV2ViVmlld0hvc3Q6OmRpZEF1dG9SZXNpemUoY29uc3QgV2ViU2l6
ZSYgbmV3U2l6ZSkKQEAgLTM2Myw2MyArMzE3LDYgQEAgV2ViU2NyZWVuSW5mbyBXZWJWaWV3SG9z
dDo6c2NyZWVuSW5mbygpCiAgICAgcmV0dXJuIGluZm87CiB9CiAKLSNpZiBFTkFCTEUoUE9JTlRF
Ul9MT0NLKQotYm9vbCBXZWJWaWV3SG9zdDo6cmVxdWVzdFBvaW50ZXJMb2NrKCkKLXsKLSAgICBz
d2l0Y2ggKG1fcG9pbnRlckxvY2tQbGFubmVkUmVzdWx0KSB7Ci0gICAgY2FzZSBQb2ludGVyTG9j
a1dpbGxTdWNjZWVkOgotICAgICAgICBwb3N0RGVsYXllZFRhc2sobmV3IEhvc3RNZXRob2RUYXNr
KHRoaXMsICZXZWJWaWV3SG9zdDo6ZGlkQWNxdWlyZVBvaW50ZXJMb2NrKSwgMCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGNhc2UgUG9pbnRlckxvY2tXaWxsUmVzcG9uZEFzeW5jOgotICAg
ICAgICBBU1NFUlQoIW1fcG9pbnRlckxvY2tlZCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGNhc2UgUG9pbnRlckxvY2tXaWxsRmFpbFN5bmM6Ci0gICAgICAgIEFTU0VSVCghbV9wb2ludGVy
TG9ja2VkKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12
b2lkIFdlYlZpZXdIb3N0OjpyZXF1ZXN0UG9pbnRlclVubG9jaygpCi17Ci0gICAgcG9zdERlbGF5
ZWRUYXNrKG5ldyBIb3N0TWV0aG9kVGFzayh0aGlzLCAmV2ViVmlld0hvc3Q6OmRpZExvc2VQb2lu
dGVyTG9jayksIDApOwotfQotCi1ib29sIFdlYlZpZXdIb3N0Ojppc1BvaW50ZXJMb2NrZWQoKQot
ewotICAgIHJldHVybiBtX3BvaW50ZXJMb2NrZWQ7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmRp
ZEFjcXVpcmVQb2ludGVyTG9jaygpCi17Ci0gICAgbV9wb2ludGVyTG9ja2VkID0gdHJ1ZTsKLSAg
ICB3ZWJXaWRnZXQoKS0+ZGlkQWNxdWlyZVBvaW50ZXJMb2NrKCk7Ci0KLSAgICAvLyBSZXNldCBw
bGFubmVkIHJlc3VsdCB0byBkZWZhdWx0LgotICAgIG1fcG9pbnRlckxvY2tQbGFubmVkUmVzdWx0
ID0gUG9pbnRlckxvY2tXaWxsU3VjY2VlZDsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6ZGlkTm90
QWNxdWlyZVBvaW50ZXJMb2NrKCkKLXsKLSAgICBBU1NFUlQoIW1fcG9pbnRlckxvY2tlZCk7Ci0g
ICAgbV9wb2ludGVyTG9ja2VkID0gZmFsc2U7Ci0gICAgd2ViV2lkZ2V0KCktPmRpZE5vdEFjcXVp
cmVQb2ludGVyTG9jaygpOwotCi0gICAgLy8gUmVzZXQgcGxhbm5lZCByZXN1bHQgdG8gZGVmYXVs
dC4KLSAgICBtX3BvaW50ZXJMb2NrUGxhbm5lZFJlc3VsdCA9IFBvaW50ZXJMb2NrV2lsbFN1Y2Nl
ZWQ7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmRpZExvc2VQb2ludGVyTG9jaygpCi17Ci0gICAg
Ym9vbCB3YXNMb2NrZWQgPSBtX3BvaW50ZXJMb2NrZWQ7Ci0gICAgbV9wb2ludGVyTG9ja2VkID0g
ZmFsc2U7Ci0gICAgaWYgKHdhc0xvY2tlZCkKLSAgICAgICAgd2ViV2lkZ2V0KCktPmRpZExvc2VQ
b2ludGVyTG9jaygpOwotfQotI2VuZGlmCi0KIHZvaWQgV2ViVmlld0hvc3Q6OnNob3coV2ViTmF2
aWdhdGlvblBvbGljeSkKIHsKICAgICBtX2hhc1dpbmRvdyA9IHRydWU7CkBAIC03NjMsNzEgKzY2
MCw2IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnNldExvY2FsZShjb25zdCBzdGQ6OnN0cmluZyYgbG9j
YWxlKQogICAgIHNldGxvY2FsZShMQ19BTEwsIGxvY2FsZS5jX3N0cigpKTsKIH0KIAotdm9pZCBX
ZWJWaWV3SG9zdDo6c2V0RGV2aWNlT3JpZW50YXRpb24oV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRh
dGlvbiYgb3JpZW50YXRpb24pCi17Ci0gICAgZGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKCkt
PnNldE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKTsKLX0KLQotaW50IFdlYlZpZXdIb3N0OjpudW1i
ZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCi17Ci0gICAgVmVjdG9y
PFdlYlZpZXdIb3N0Kj4gd2luZG93TGlzdCA9IG1fc2hlbGwtPndpbmRvd0xpc3QoKTsKLSAgICBp
bnQgbnVtYmVyT2ZSZXF1ZXN0cyA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3aW5k
b3dMaXN0LnNpemUoKTsgaSsrKQotICAgICAgICBudW1iZXJPZlJlcXVlc3RzICs9IHdpbmRvd0xp
c3RbaV0tPmdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5udW1iZXJPZlBlbmRpbmdQZXJtaXNzaW9u
UmVxdWVzdHMoKTsKLSAgICByZXR1cm4gbnVtYmVyT2ZSZXF1ZXN0czsKLX0KLQotdm9pZCBXZWJW
aWV3SG9zdDo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3dlZCkKLXsKLSAgICBW
ZWN0b3I8V2ViVmlld0hvc3QqPiB3aW5kb3dMaXN0ID0gbV9zaGVsbC0+d2luZG93TGlzdCgpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXplKCk7IGkrKykKLSAgICAg
ICAgd2luZG93TGlzdFtpXS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCktPnNldFBlcm1pc3Npb24o
YWxsb3dlZCk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQot
ewotICAgIFZlY3RvcjxXZWJWaWV3SG9zdCo+IHdpbmRvd0xpc3QgPSBtX3NoZWxsLT53aW5kb3dM
aXN0KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3aW5kb3dMaXN0LnNpemUoKTsgaSsr
KQotICAgICAgICB3aW5kb3dMaXN0W2ldLT5nZW9sb2NhdGlvbkNsaWVudE1vY2soKS0+c2V0UG9z
aXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpOwotfQotCi12b2lkIFdlYlZpZXdI
b3N0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoY29uc3Qgc3Rk
OjpzdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgVmVjdG9yPFdlYlZpZXdIb3N0Kj4gd2luZG93TGlz
dCA9IG1fc2hlbGwtPndpbmRvd0xpc3QoKTsKLSAgICAvLyBGSVhNRTogQmVuamFtaW4KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHdpbmRvd0xpc3Quc2l6ZSgpOyBpKyspCi0gICAgICAgIHdp
bmRvd0xpc3RbaV0tPmdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5zZXRQb3NpdGlvblVuYXZhaWxh
YmxlRXJyb3IoV2ViU3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKSk7Ci19Ci0KLSNpZiBFTkFCTEUo
SU5QVVRfU1BFRUNIKQotdm9pZCBXZWJWaWV3SG9zdDo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0
KGNvbnN0IHN0ZDo6c3RyaW5nJiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBjb25zdCBzdGQ6
OnN0cmluZyYgbGFuZ3VhZ2UpCi17Ci0gICAgbV9zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrLT5h
ZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoV2ViU3RyaW5nOjpmcm9tVVRGOChyZXN1bHQpLCBjb25m
aWRlbmNlLCBXZWJTdHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlKSk7Ci19Ci0KLXZvaWQgV2ViVmll
d0hvc3Q6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wgZHVtcFJlY3QpCi17Ci0gICAg
bV9zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrLT5zZXREdW1wUmVjdChkdW1wUmVjdCk7Ci19Ci0j
ZW5kaWYKLQotI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCi12b2lkIFdlYlZpZXdIb3N0Ojph
ZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1bHQoY29uc3Qgc3RkOjpzdHJpbmcmIHRyYW5zY3Jp
cHQsIGRvdWJsZSBjb25maWRlbmNlKQotewotICAgIG1fbW9ja1NwZWVjaFJlY29nbml6ZXItPmFk
ZE1vY2tSZXN1bHQoV2ViU3RyaW5nOjpmcm9tVVRGOCh0cmFuc2NyaXB0KSwgY29uZmlkZW5jZSk7
Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVycm9yKGNv
bnN0IHN0ZDo6c3RyaW5nJiBlcnJvciwgY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgbV9tb2NrU3BlZWNoUmVjb2duaXplci0+c2V0RXJyb3IoV2ViU3RyaW5nOjpmcm9tVVRGOChl
cnJvciksIFdlYlN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSkpOwotfQotCi1ib29sIFdlYlZpZXdI
b3N0Ojp3YXNNb2NrU3BlZWNoUmVjb2duaXRpb25BYm9ydGVkKCkKLXsKLSAgICByZXR1cm4gbV9t
b2NrU3BlZWNoUmVjb2duaXplci0+d2FzQWJvcnRlZCgpOwotfQotI2VuZGlmCi0KIHZvaWQgV2Vi
Vmlld0hvc3Q6OnRlc3RGaW5pc2hlZCgpCiB7CiAgICAgbV9zaGVsbC0+dGVzdEZpbmlzaGVkKHRo
aXMpOwpAQCAtOTcxLDEwICs4MDMsNiBAQCB2b2lkIFdlYlZpZXdIb3N0OjpyZXNldCgpCiAgICAg
bV9sYXN0UGFnZUlkVXBkYXRlZCA9IC0xOwogICAgIG1faGFzV2luZG93ID0gZmFsc2U7CiAgICAg
bV9pbk1vZGFsTG9vcCA9IGZhbHNlOwotI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgbV9w
b2ludGVyTG9ja2VkID0gZmFsc2U7Ci0gICAgbV9wb2ludGVyTG9ja1BsYW5uZWRSZXN1bHQgPSBQ
b2ludGVyTG9ja1dpbGxTdWNjZWVkOwotI2VuZGlmCiAKICAgICBtX25hdmlnYXRpb25Db250cm9s
bGVyID0gYWRvcHRQdHIobmV3IFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcih0aGlzKSk7CiAKQEAg
LTk4MiwxNCArODEwLDYgQEAgdm9pZCBXZWJWaWV3SG9zdDo6cmVzZXQoKQogICAgIG1fZWRpdENv
bW1hbmROYW1lLmNsZWFyKCk7CiAgICAgbV9lZGl0Q29tbWFuZFZhbHVlLmNsZWFyKCk7CiAKLSAg
ICBpZiAobV9nZW9sb2NhdGlvbkNsaWVudE1vY2suZ2V0KCkpCi0gICAgICAgIG1fZ2VvbG9jYXRp
b25DbGllbnRNb2NrLT5yZXNldE1vY2soKTsKLQotI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0g
ICAgaWYgKG1fc3BlZWNoSW5wdXRDb250cm9sbGVyTW9jay5nZXQoKSkKLSAgICAgICAgbV9zcGVl
Y2hJbnB1dENvbnRyb2xsZXJNb2NrLT5jbGVhclJlc3VsdHMoKTsKLSNlbmRpZgotCiAgICAgbV9j
dXJyZW50Q3Vyc29yID0gV2ViQ3Vyc29ySW5mbygpOwogICAgIG1fd2luZG93UmVjdCA9IFdlYlJl
Y3QoKTsKICAgICAvLyBtX3Byb3h5IGlzIG5vdCBzZXQgd2hlbiByZXNldCgpIGlzIGludm9rZWQg
ZnJvbSB0aGUgY29uc3RydWN0b3IuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9XZWJWaWV3SG9zdC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2Vi
Vmlld0hvc3QuaAppbmRleCA0ZjljN2M5MjI0MDVmNTA0NmQxOTFlYmRiMGJjMDEyNTZkMWQzNjlk
Li5jMzE2MTA5NzJjMjA3NDIyOTYwZGE4ZjEyYTEwZDUwNzA5Zjg3ZTFmIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKQEAgLTQ0LDIyICs0NCwxMyBAQAog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAotY2xhc3MgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjsKLWNsYXNzIE1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyOwogY2xhc3MgU2tDYW52YXM7CiBjbGFzcyBUZXN0U2hlbGw7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogY2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJEZXZpY2VPcmllbnRhdGlv
bkNsaWVudDsKLWNsYXNzIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jazsKLWNsYXNzIFdl
Ykdlb2xvY2F0aW9uQ2xpZW50OwotY2xhc3MgV2ViR2VvbG9jYXRpb25DbGllbnRNb2NrOwotY2xh
c3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlTW9jazsKIGNsYXNzIFdlYlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTsKIGNsYXNzIFdlYlNoYXJlZFdvcmtlckNsaWVudDsKLWNsYXNzIFdlYlNwZWVjaElucHV0
Q29udHJvbGxlcjsKLWNsYXNzIFdlYlNwZWVjaElucHV0TGlzdGVuZXI7CiBjbGFzcyBXZWJVUkw7
CiBzdHJ1Y3QgV2ViUmVjdDsKIHN0cnVjdCBXZWJVUkxFcnJvcjsKQEAgLTkyLDE0ICs4Myw2IEBA
IGNsYXNzIFdlYlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVudCwgcHVibGlj
IFdlYktpdDo6V2ViRnJhbWVDbGllbnQsCiAKICAgICB2b2lkIGNsb3NlV2lkZ2V0KCk7CiAKLSNp
ZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotICAgIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIq
IHNwZWVjaElucHV0Q29udHJvbGxlck1vY2soKSB7IHJldHVybiBtX3NwZWVjaElucHV0Q29udHJv
bGxlck1vY2suZ2V0KCk7IH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkK
LSAgICBNb2NrV2ViU3BlZWNoUmVjb2duaXplciogbW9ja1NwZWVjaFJlY29nbml6ZXIoKSB7IHJl
dHVybiBtX21vY2tTcGVlY2hSZWNvZ25pemVyLmdldCgpOyB9Ci0jZW5kaWYKLQogICAgIC8vIFdl
YlRlc3REZWxlZ2F0ZS4KICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENvbW1hbmQoY29uc3Qgc3Rk
OjpzdHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyRWRpdENvbW1hbmQoKSBPVkVSUklERTsKQEAgLTEyNiwyNyArMTA5
LDYgQEAgY2xhc3MgV2ViVmlld0hvc3QgOiBwdWJsaWMgV2ViS2l0OjpXZWJWaWV3Q2xpZW50LCBw
dWJsaWMgV2ViS2l0OjpXZWJGcmFtZUNsaWVudCwKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZXB0
QWxsQ29va2llcyhib29sKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIHBhdGhU
b0xvY2FsUmVzb3VyY2UoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCkgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCB2b2lkIHNldExvY2FsZShjb25zdCBzdGQ6OnN0cmluZyYpIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCBzZXREZXZpY2VPcmllbnRhdGlvbihXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0
aW9uJikgT1ZFUlJJREU7Ci0jaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkQWNxdWlyZVBvaW50ZXJMb2NrKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZE5vdEFjcXVpcmVQb2ludGVyTG9jaygpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkaWRM
b3NlUG9pbnRlckxvY2soKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UG9pbnRlckxv
Y2tXaWxsUmVzcG9uZEFzeW5jaHJvbm91c2x5KCkgT1ZFUlJJREUgeyBtX3BvaW50ZXJMb2NrUGxh
bm5lZFJlc3VsdCA9IFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luYzsgfQotICAgIHZpcnR1YWwg
dm9pZCBzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNseSgpIE9WRVJSSURFIHsgbV9w
b2ludGVyTG9ja1BsYW5uZWRSZXN1bHQgPSBQb2ludGVyTG9ja1dpbGxGYWlsU3luYzsgfQotI2Vu
ZGlmCi0gICAgdmlydHVhbCBpbnQgbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdHMoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJt
aXNzaW9uKGJvb2wpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvbihkb3VibGUsIGRvdWJsZSwgZG91YmxlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKGNvbnN0IHN0
ZDo6c3RyaW5nJikgT1ZFUlJJREU7Ci0jaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLSAgICB2aXJ0
dWFsIHZvaWQgYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IHN0ZDo6c3RyaW5nJiwgZG91
YmxlLCBjb25zdCBzdGQ6OnN0cmluZyYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRN
b2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sKSBPVkVSUklERTsKLSNlbmRpZgotI2lmIEVOQUJM
RShTQ1JJUFRFRF9TUEVFQ0gpCi0gICAgdmlydHVhbCB2b2lkIGFkZE1vY2tTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdChjb25zdCBzdGQ6OnN0cmluZyYsIGRvdWJsZSkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVycm9yKGNvbnN0IHN0ZDo6c3RyaW5n
JiwgY29uc3Qgc3RkOjpzdHJpbmcmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgd2FzTW9j
a1NwZWVjaFJlY29nbml0aW9uQWJvcnRlZCgpIE9WRVJSSURFOwotI2VuZGlmCiAgICAgdmlydHVh
bCB2b2lkIHRlc3RGaW5pc2hlZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCB0ZXN0VGlt
ZWRPdXQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0RlYnVnZ2VkKCkgT1ZF
UlJJREU7CkBAIC0xOTMsMTQgKzE1NSw2IEBAIGNsYXNzIFdlYlZpZXdIb3N0IDogcHVibGljIFdl
YktpdDo6V2ViVmlld0NsaWVudCwgcHVibGljIFdlYktpdDo6V2ViRnJhbWVDbGllbnQsCiAgICAg
dmlydHVhbCB2b2lkIG5hdmlnYXRlQmFja0ZvcndhcmRTb29uKGludCBvZmZzZXQpOwogICAgIHZp
cnR1YWwgaW50IGhpc3RvcnlCYWNrTGlzdENvdW50KCk7CiAgICAgdmlydHVhbCBpbnQgaGlzdG9y
eUZvcndhcmRMaXN0Q291bnQoKTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViR2VvbG9jYXRpb25D
bGllbnQqIGdlb2xvY2F0aW9uQ2xpZW50KCk7Ci0jaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLSAg
ICB2aXJ0dWFsIFdlYktpdDo6V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKiBzcGVlY2hJbnB1dENv
bnRyb2xsZXIoV2ViS2l0OjpXZWJTcGVlY2hJbnB1dExpc3RlbmVyKik7Ci0jZW5kaWYKLSNpZiBF
TkFCTEUoU0NSSVBURURfU1BFRUNIKQotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTcGVlY2hSZWNv
Z25pemVyKiBzcGVlY2hSZWNvZ25pemVyKCkgT1ZFUlJJREU7Ci0jZW5kaWYKLSAgICB2aXJ0dWFs
IFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQqIGRldmljZU9yaWVudGF0aW9uQ2xp
ZW50KCkgT1ZFUlJJREU7CiAKICAgICAvLyBXZWJLaXQ6OldlYldpZGdldENsaWVudAogICAgIHZp
cnR1YWwgdm9pZCBkaWRBdXRvUmVzaXplKGNvbnN0IFdlYktpdDo6V2ViU2l6ZSYgbmV3U2l6ZSk7
CkBAIC0yMjAsMTEgKzE3NCw2IEBAIGNsYXNzIFdlYlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6
V2ViVmlld0NsaWVudCwgcHVibGljIFdlYktpdDo6V2ViRnJhbWVDbGllbnQsCiAgICAgdmlydHVh
bCBXZWJLaXQ6OldlYlJlY3Qgcm9vdFdpbmRvd1JlY3QoKTsKICAgICB2aXJ0dWFsIFdlYktpdDo6
V2ViUmVjdCB3aW5kb3dSZXNpemVyUmVjdCgpOwogICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTY3Jl
ZW5JbmZvIHNjcmVlbkluZm8oKTsKLSNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQotICAgIHZpcnR1
YWwgYm9vbCByZXF1ZXN0UG9pbnRlckxvY2soKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBv
aW50ZXJVbmxvY2soKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludGVyTG9ja2VkKCk7Ci0jZW5k
aWYKIAogICAgIC8vIFdlYktpdDo6V2ViRnJhbWVDbGllbnQKICAgICB2aXJ0dWFsIFdlYktpdDo6
V2ViUGx1Z2luKiBjcmVhdGVQbHVnaW4oV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6
V2ViUGx1Z2luUGFyYW1zJik7CkBAIC0yNTEsMTEgKzIwMCw2IEBAIGNsYXNzIFdlYlZpZXdIb3N0
IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVudCwgcHVibGljIFdlYktpdDo6V2ViRnJhbWVD
bGllbnQsCiAgICAgICAgIFdlYktpdDo6V2ViRnJhbWUqIHNvdXJjZUZyYW1lLCBXZWJLaXQ6Oldl
YkZyYW1lKiB0YXJnZXRGcmFtZSwgCiAgICAgICAgIFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW4g
dGFyZ2V0LCBXZWJLaXQ6OldlYkRPTU1lc3NhZ2VFdmVudCk7CiAKLSAgICBXZWJLaXQ6OldlYkRl
dmljZU9yaWVudGF0aW9uQ2xpZW50TW9jayogZGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKCk7
Ci0KLSAgICAvLyBHZW9sb2NhdGlvbiBjbGllbnQgbW9ja3MgZm9yIERSVFRlc3RSdW5uZXIKLSAg
ICBXZWJLaXQ6OldlYkdlb2xvY2F0aW9uQ2xpZW50TW9jayogZ2VvbG9jYXRpb25DbGllbnRNb2Nr
KCk7Ci0KICAgICAvLyBQZW5kaW5nIHRhc2sgbGlzdCwgTm90ZSB0YWh0IHRoZSBtZXRob2QgaXMg
cmVmZXJyZWQgZnJvbSBXZWJNZXRob2RUYXNrIGNsYXNzLgogICAgIFdlYlRlc3RSdW5uZXI6Oldl
YlRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rhc2tMaXN0OyB9CiAKQEAgLTMyNiwx
NyArMjcwLDYgQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxXZWJLaXQ6OldlYkNvbnRleHRNZW51
RGF0YT4gbV9sYXN0Q29udGV4dE1lbnVEYXRhOwogCi0gICAgLy8gR2VvbG9jYXRpb24KLSAgICBP
d25QdHI8V2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2s+IG1fZ2VvbG9jYXRpb25DbGll
bnRNb2NrOwotCi0gICAgT3duUHRyPFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRN
b2NrPiBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jazsKLSNpZiBFTkFCTEUoSU5QVVRfU1BF
RUNIKQotICAgIE93blB0cjxNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyPiBtX3NwZWVjaElu
cHV0Q29udHJvbGxlck1vY2s7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gp
Ci0gICAgT3duUHRyPE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyPiBtX21vY2tTcGVlY2hSZWNvZ25p
emVyOwotI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIE93blB0cjx3ZWJr
aXRfc3VwcG9ydDo6VGVzdE1lZGlhU3RyZWFtQ2xpZW50PiBtX3Rlc3RNZWRpYVN0cmVhbUNsaWVu
dDsKQEAgLTM0NywxNSArMjgwLDYgQEAgcHJpdmF0ZToKICAgICBXZWJUZXN0UnVubmVyOjpXZWJU
YXNrTGlzdCBtX3Rhc2tMaXN0OwogICAgIFZlY3RvcjxXZWJLaXQ6OldlYldpZGdldCo+IG1fcG9w
dXBtZW51czsKIAotI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgYm9vbCBtX3BvaW50ZXJM
b2NrZWQ7Ci0gICAgZW51bSB7Ci0gICAgICAgIFBvaW50ZXJMb2NrV2lsbFN1Y2NlZWQsCi0gICAg
ICAgIFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luYywKLSAgICAgICAgUG9pbnRlckxvY2tXaWxs
RmFpbFN5bmMKLSAgICB9IG1fcG9pbnRlckxvY2tQbGFubmVkUmVzdWx0OwotI2VuZGlmCi0KICAg
ICBPd25QdHI8V2ViS2l0OjpXZWJMYXllclRyZWVWaWV3PiBtX2xheWVyVHJlZVZpZXc7CiB9Owog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189289</attachid>
            <date>2013-02-20 05:22:21 -0800</date>
            <delta_ts>2013-02-20 05:36:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110217-20130220141842.patch</filename>
            <type>text/plain</type>
            <size>100351</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMzE2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjdkZTgyNDE0MmQ4ZjliY2QyZDhjMWMwMTNjMTZhNWEy
OGEyYmNmNy4uMjZlNTIxYzNjZjAwN2VhZDllZjg5ZjQ1YWU3YzRmODliNmVmNjhlZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
NyBAQAorMjAxMy0wMi0yMCAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4K
KworICAgICAgICBbY2hyb21pdW1dIG1vdmUgbW9zdCBvZiB0aGUgcmVtYWluaW5nIG1vY2tzIHRv
IFRlc3RSdW5uZXIgbGlicmFyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEwMjE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2hpbGUgbW9zdCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0
aGVzZSBtb2NrcyBpcyBhbHNvCisgICAgICAgIGF2YWlsYWJsZSBpbiB0aGUgY29udGVudCBtb2R1
bGUsIHRoZXJlIGlzIG5vIHN0cmFpZ2h0IGZvcndhcmQgd2F5IHRvCisgICAgICAgIGluamVjdCB0
aGUgbW9jayByZXN1bHRzIHJlcXVpcmVkIGZvciBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3REZWxlZ2F0ZS5oOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RQcm94
eS5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAg
ICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5OjpnZW9sb2NhdGlvbkNsaWVudCk6CisgICAg
ICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHk6OnNwZWVjaElucHV0Q29udHJvbGxlcik6
CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHk6OnNwZWVjaFJlY29nbml6ZXIp
OgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5OjpkZXZpY2VPcmllbnRhdGlv
bkNsaWVudCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHk6OnJlcXVlc3RQ
b2ludGVyTG9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHk6OnJlcXVl
c3RQb2ludGVyVW5sb2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eTo6
aXNQb2ludGVyTG9ja2VkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXIuY3BwLgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaElucHV0Q29udHJv
bGxlcjo6TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJUZXN0UnVu
bmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXI6On5Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5u
ZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnNldERlbGVnYXRlKToKKyAgICAgICAg
KFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmFkZE1vY2tSZWNv
Z25pdGlvblJlc3VsdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyOjpzZXREdW1wUmVjdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2Nr
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpjbGVhclJlc3VsdHMpOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6c3RhcnRSZWNvZ25pdGlvbik6
CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpj
YW5jZWxSZWNvZ25pdGlvbik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyOjpzdG9wUmVjb3JkaW5nKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnNwZWVjaFRhc2tGaXJlZCk6CisgICAgICAg
IChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpTcGVlY2hUYXNr
OjpTcGVlY2hUYXNrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1
dENvbnRyb2xsZXI6OlNwZWVjaFRhc2s6OnN0b3ApOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6U3BlZWNoVGFzazo6cnVuSWZWYWxpZCk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNw
ZWVjaElucHV0Q29udHJvbGxlci5oOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5oLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAgICAoTW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoSW5wdXRD
b250cm9sbGVyOjp0YXNrTGlzdCk6CisgICAgICAgIChTcGVlY2hUYXNrKToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoUmVjb2du
aXplci5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2Nr
V2ViU3BlZWNoUmVjb2duaXplci5jcHAuCisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2Vi
U3BlZWNoUmVjb2duaXplcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIpOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2du
aXplcjo6fk1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzZXREZWxlZ2F0ZSk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c3RhcnQpOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0b3ApOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmFib3J0KToKKyAgICAgICAgKFdlYlRl
c3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjphZGRNb2NrUmVzdWx0KToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzZXRFcnJvcik6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c3RhcnRUYXNr
UXVldWUpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6
OmNsZWFyVGFza1F1ZXVlKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hS
ZWNvZ25pemVyOjpTdGVwVGFzazo6cnVuSWZWYWxpZCk6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaDogUmVu
YW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hSZWNv
Z25pemVyLmguCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6Cisg
ICAgICAgIChNb2NrV2ViU3BlZWNoUmVjb2duaXplcik6CisgICAgICAgIChXZWJUZXN0UnVubmVy
OjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6d2FzQWJvcnRlZCk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6Y2xpZW50KToKKyAgICAgICAgKFdlYlRl
c3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpoYW5kbGUpOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnRhc2tMaXN0KToKKyAgICAgICAg
KFRhc2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6
OlRhc2s6OlRhc2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29n
bml6ZXI6OlRhc2s6On5UYXNrKToKKyAgICAgICAgKFN0ZXBUYXNrKToKKyAgICAgICAgKFdlYlRl
c3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpTdGVwVGFzazo6U3RlcFRhc2spOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRl
cmZhY2VzLmNwcDoKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RJbnRlcmZhY2VzOjpUZXN0
SW50ZXJmYWNlcyk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0SW50ZXJmYWNlczo6d2lu
ZG93T3BlbmVkKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAgICAoV2ViVGVzdFJ1
bm5lcjo6VGVzdEludGVyZmFjZXM6OndpbmRvd0Nsb3NlZCk6CisgICAgICAgIChXZWJUZXN0UnVu
bmVyOjpUZXN0SW50ZXJmYWNlczo6d2luZG93TGlzdCk6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMuaDoKKyAgICAgICAgKFRl
c3RJbnRlcmZhY2VzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5u
ZXI6OlRlc3RSdW5uZXIpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6cmVz
ZXQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6cmVxdWVzdFBvaW50ZXJM
b2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6
VGVzdFJ1bm5lcjo6cmVxdWVzdFBvaW50ZXJVbmxvY2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5l
cjo6VGVzdFJ1bm5lcjo6aXNQb2ludGVyTG9ja2VkKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlRlc3RSdW5uZXI6OmRpZEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKToKKyAgICAgICAgKFdl
YlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmRpZE5vdEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFs
KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmRpZExvc2VQb2ludGVyTG9j
a0ludGVybmFsKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OndpbmRvd0Nv
dW50KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OnNldE1vY2tEZXZpY2VP
cmllbnRhdGlvbik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpudW1iZXJP
ZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAo
V2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24pOgor
ICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb25VbmF2YWlsYWJsZUVycm9yKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5u
ZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpU
ZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdCk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpUZXN0UnVubmVyOjphZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1bHQpOgorICAg
ICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaFJlY29nbml0aW9u
RXJyb3IpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6d2FzTW9ja1NwZWVj
aFJlY29nbml0aW9uQWJvcnRlZCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVy
OjpkaWRBY3F1aXJlUG9pbnRlckxvY2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1
bm5lcjo6ZGlkTm90QWNxdWlyZVBvaW50ZXJMb2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlRlc3RSdW5uZXI6OmRpZExvc2VQb2ludGVyTG9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVy
OjpUZXN0UnVubmVyOjpzZXRQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmNocm9ub3VzbHkpOgor
ICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0UG9pbnRlckxvY2tXaWxsRmFp
bFN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAg
ICAoVGVzdFJ1bm5lcik6CisgICAgICAgIChIb3N0TWV0aG9kVGFzayk6CisgICAgICAgIChXZWJU
ZXN0UnVubmVyOjpUZXN0UnVubmVyOjpIb3N0TWV0aG9kVGFzazo6SG9zdE1ldGhvZFRhc2spOgor
ICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6SG9zdE1ldGhvZFRhc2s6OnJ1bklm
VmFsaWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1dlYlRlc3RQcm94eS5jcHA6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHlC
YXNlOjp+V2ViVGVzdFByb3h5QmFzZSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0
UHJveHlCYXNlOjpzZXRJbnRlcmZhY2VzKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRl
c3RQcm94eUJhc2U6OnNldERlbGVnYXRlKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRl
c3RQcm94eUJhc2U6OnJlc2V0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94
eUJhc2U6OmNhcHR1cmVUcmVlKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94
eUJhc2U6Omdlb2xvY2F0aW9uQ2xpZW50TW9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyKToK
KyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJhc2U6OmRldmljZU9yaWVudGF0
aW9uQ2xpZW50TW9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHlCYXNl
OjpzcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Oldl
YlRlc3RQcm94eUJhc2U6OnNwZWVjaFJlY29nbml6ZXJNb2NrKToKKyAgICAgICAgKFdlYlRlc3RS
dW5uZXI6OldlYlRlc3RQcm94eUJhc2U6Omdlb2xvY2F0aW9uQ2xpZW50KToKKyAgICAgICAgKFdl
YlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJhc2U6OnNwZWVjaElucHV0Q29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHlCYXNlOjpzcGVlY2hSZWNvZ25pemVy
KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJhc2U6OmRldmljZU9yaWVu
dGF0aW9uQ2xpZW50KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJhc2U6
OnJlcXVlc3RQb2ludGVyTG9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJv
eHlCYXNlOjpyZXF1ZXN0UG9pbnRlclVubG9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpX
ZWJUZXN0UHJveHlCYXNlOjppc1BvaW50ZXJMb2NrZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpyZXNl
dCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaDoKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3SG9zdCk6CisKIDIwMTMtMDItMTcgIEFu
ZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQWRk
aW5nIG15c2VsZiBhcyBhIGNvbW1pdHRlci4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZS5neXBpCmluZGV4IDBiOWNlMzUwZWMzOTViYmRlMDQ5ZGUxM2NiMjQ2NTdkMjNkNWE4ZGYu
LjNmNzFkYTFjOWJlZGYwMjJmMWYzZjJiMzAyNGUzZmE3YjM1Yjc0NDEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQpAQCAtMTIsMTAgKzEyLDYgQEAKICAgICAgICAg
ICAgICdjaHJvbWl1bS9Nb2NrV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgnLAogICAgICAgICAgICAg
J2Nocm9taXVtL01vY2tXZWJQcmVyZW5kZXJpbmdTdXBwb3J0LmNwcCcsCiAgICAgICAgICAgICAn
Y2hyb21pdW0vTW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnQuaCcsCi0gICAgICAgICAgICAnY2hy
b21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAnLAotICAgICAgICAgICAgJ2No
cm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCcsCi0gICAgICAgICAgICAnY2hy
b21pdW0vTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1
bS9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UYXNr
LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rhc2suY3BwJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9UZXN0RXZlbnRQcmludGVyLmgnLApAQCAtNzUsNiArNzEsMTAgQEAKICAgICAgICAgICAg
ICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRsZXIuaCcs
CiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlJUQ1BlZXJDb25u
ZWN0aW9uSGFuZGxlci5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L01vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCcsCisgICAgICAgICAgICAnY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAnLAorICAg
ICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hJbnB1dENvbnRy
b2xsZXIuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNw
ZWVjaFJlY29nbml6ZXIuY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvU3BlbGxDaGVja0NsaWVudC5jcHAnLApkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI1NzZj
N2U2MzZiYmU0MWU3NzczOWM0ZGUyODc2NGIyZGQ1N2NhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9N
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1vY2tXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIlRhc2suaCIKLSNpbmNsdWRlICJXZWJT
cGVlY2hJbnB1dExpc3RlbmVyLmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYkNTdHJpbmcuaD4KLSNp
bmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotI2lmIEVOQUJMRShJTlBV
VF9TUEVFQ0gpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2UgV2Vi
VGVzdFJ1bm5lcjsKLQotUGFzc093blB0cjxNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyPiBN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpjcmVhdGUoV2ViU3BlZWNoSW5wdXRMaXN0ZW5l
ciogbGlzdGVuZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyKGxpc3RlbmVyKSk7Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlcjo6YWRkTW9ja1JlY29nbml0aW9uUmVzdWx0KGNvbnN0IFdlYlN0cmluZyYgcmVzdWx0
LCBkb3VibGUgY29uZmlkZW5jZSwgY29uc3QgV2ViU3RyaW5nJiBsYW5ndWFnZSkKLXsKLSAgICBX
ZWJTcGVlY2hJbnB1dFJlc3VsdCByZXM7Ci0gICAgcmVzLmFzc2lnbihyZXN1bHQsIGNvbmZpZGVu
Y2UpOwotCi0gICAgaWYgKGxhbmd1YWdlLmlzRW1wdHkoKSkKLSAgICAgICAgbV9yZXN1bHRzRm9y
RW1wdHlMYW5ndWFnZS5hcHBlbmQocmVzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgU3RyaW5nIGxh
bmdTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICBpZiAoIW1fcmVjb2duaXRpb25SZXN1bHRzLmNvbnRhaW5zKGxhbmdTdHJpbmcpKQotICAg
ICAgICAgICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuc2V0KGxhbmdTdHJpbmcsIFZlY3RvcjxXZWJT
cGVlY2hJbnB1dFJlc3VsdD4oKSk7Ci0gICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLmZpbmQo
bGFuZ1N0cmluZyktPnZhbHVlLmFwcGVuZChyZXMpOwotICAgIH0KLX0KLQotdm9pZCBNb2NrV2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyOjpzZXREdW1wUmVjdChib29sIGR1bXBSZWN0KQotewotICAg
IG1fZHVtcFJlY3QgPSBkdW1wUmVjdDsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250
cm9sbGVyOjpjbGVhclJlc3VsdHMoKQotewotICAgIG1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2Uu
Y2xlYXIoKTsKLSAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5jbGVhcigpOwotICAgIG1fZHVtcFJl
Y3QgPSBmYWxzZTsKLX0KLQotYm9vbCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpzdGFy
dFJlY29nbml0aW9uKGludCByZXF1ZXN0SWQsIGNvbnN0IFdlYlJlY3QmIGVsZW1lbnRSZWN0LCBj
b25zdCBXZWJTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBXZWJTdHJpbmcmIGdyYW1tYXIsIGNvbnN0
IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgaWYgKG1fc3BlZWNoVGFzaykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7Ci0gICAg
bV9yZXF1ZXN0UmVjdCA9IGVsZW1lbnRSZWN0OwotICAgIG1fcmVjb3JkaW5nID0gdHJ1ZTsKLSAg
ICBtX2xhbmd1YWdlID0gU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsK
LQotICAgIG1fc3BlZWNoVGFzayA9IG5ldyBTcGVlY2hUYXNrKHRoaXMpOwotICAgIHBvc3RUYXNr
KG1fc3BlZWNoVGFzayk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNb2NrV2ViU3Bl
ZWNoSW5wdXRDb250cm9sbGVyOjpjYW5jZWxSZWNvZ25pdGlvbihpbnQgcmVxdWVzdElkKQotewot
ICAgIGlmIChtX3NwZWVjaFRhc2spIHsKLSAgICAgICAgQVNTRVJUKHJlcXVlc3RJZCA9PSBtX3Jl
cXVlc3RJZCk7Ci0KLSAgICAgICAgbV9zcGVlY2hUYXNrLT5zdG9wKCk7Ci0gICAgICAgIG1fcmVj
b3JkaW5nID0gZmFsc2U7Ci0gICAgICAgIG1fbGlzdGVuZXItPmRpZENvbXBsZXRlUmVjb2duaXRp
b24obV9yZXF1ZXN0SWQpOwotICAgICAgICBtX3JlcXVlc3RJZCA9IDA7Ci0gICAgfQotfQotCi12
b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnN0b3BSZWNvcmRpbmcoaW50IHJlcXVl
c3RJZCkKLXsKLSAgICBBU1NFUlQocmVxdWVzdElkID09IG1fcmVxdWVzdElkKTsKLSAgICBpZiAo
bV9zcGVlY2hUYXNrICYmIG1fcmVjb3JkaW5nKSB7Ci0gICAgICAgIG1fc3BlZWNoVGFzay0+c3Rv
cCgpOwotICAgICAgICBzcGVlY2hUYXNrRmlyZWQoKTsKLSAgICB9Ci19Ci0KLU1vY2tXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViU3BlZWNo
SW5wdXRMaXN0ZW5lciogbGlzdGVuZXIpCi0gICAgOiBtX2xpc3RlbmVyKGxpc3RlbmVyKQotICAg
ICwgbV9zcGVlY2hUYXNrKDApCi0gICAgLCBtX3JlY29yZGluZyhmYWxzZSkKLSAgICAsIG1fcmVx
dWVzdElkKC0xKQotICAgICwgbV9kdW1wUmVjdChmYWxzZSkKLXsKLX0KLQotc3RhdGljIFdlYlNw
ZWVjaElucHV0UmVzdWx0QXJyYXkgbWFrZVJlY3RSZXN1bHQoY29uc3QgV2ViUmVjdCYgcmVjdCkK
LXsKLSAgICBTdHJpbmdCdWlsZGVyIHNiOwotICAgIHNiLmFwcGVuZChTdHJpbmc6Om51bWJlcihy
ZWN0LngpKTsKLSAgICBzYi5hcHBlbmQoIiwiKTsKLSAgICBzYi5hcHBlbmQoU3RyaW5nOjpudW1i
ZXIocmVjdC55KSk7Ci0gICAgc2IuYXBwZW5kKCIsIik7Ci0gICAgc2IuYXBwZW5kKFN0cmluZzo6
bnVtYmVyKHJlY3Qud2lkdGgpKTsKLSAgICBzYi5hcHBlbmQoIiwiKTsKLSAgICBzYi5hcHBlbmQo
U3RyaW5nOjpudW1iZXIocmVjdC5oZWlnaHQpKTsKLQotICAgIFdlYlNwZWVjaElucHV0UmVzdWx0
IHJlczsKLSAgICByZXMuYXNzaWduKFdlYlN0cmluZyhzYi5jaGFyYWN0ZXJzKCksIHNiLmxlbmd0
aCgpKSwgMS4wKTsKLQotICAgIFdlYlNwZWVjaElucHV0UmVzdWx0QXJyYXkgcmVzdWx0czsKLSAg
ICByZXN1bHRzLmFzc2lnbigmcmVzLCAxKTsKLSAgICByZXR1cm4gcmVzdWx0czsKLX0KLQotdm9p
ZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpzcGVlY2hUYXNrRmlyZWQoKQotewotICAg
IGlmIChtX3JlY29yZGluZykgewotICAgICAgICBtX3JlY29yZGluZyA9IGZhbHNlOwotICAgICAg
ICBtX2xpc3RlbmVyLT5kaWRDb21wbGV0ZVJlY29yZGluZyhtX3JlcXVlc3RJZCk7Ci0KLSAgICAg
ICAgbV9zcGVlY2hUYXNrID0gbmV3IFNwZWVjaFRhc2sodGhpcyk7Ci0gICAgICAgIHBvc3RUYXNr
KG1fc3BlZWNoVGFzayk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYm9vbCBub1Jlc3VsdHNGb3Vu
ZCA9IGZhbHNlOwotICAgICAgICAvLyBXZSB0YWtlIGEgY29weSBvZiB0aGUgcmVxdWVzdElkIGhl
cmUgc28gdGhhdCBpZiBzY3JpcHRzIGRlc3Ryb3llZCB0aGUgaW5wdXQgZWxlbWVudAotICAgICAg
ICAvLyBpbnNpZGUgb25lIG9mIHRoZSBjYWxsYmFja3MgYmVsb3csIHdlJ2xsIHN0aWxsIGtub3cg
d2hhdCB0aGlzIHNlc3Npb24ncyByZXF1ZXN0SWQgd2FzLgotICAgICAgICBpbnQgcmVxdWVzdElk
ID0gbV9yZXF1ZXN0SWQ7Ci0gICAgICAgIG1fcmVxdWVzdElkID0gMDsKLQotICAgICAgICBpZiAo
bV9kdW1wUmVjdCkgewotICAgICAgICAgICAgbV9saXN0ZW5lci0+c2V0UmVjb2duaXRpb25SZXN1
bHQocmVxdWVzdElkLCBtYWtlUmVjdFJlc3VsdChtX3JlcXVlc3RSZWN0KSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAobV9sYW5ndWFnZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIEVtcHR5IGxh
bmd1YWdlIGNhc2UgbXVzdCBiZSBoYW5kbGVkIHNlcGFyYXRlbHkgdG8gYXZvaWQgcHJvYmxlbXMg
d2l0aCBIYXNoTWFwIGFuZCBlbXB0eSBrZXlzLgotICAgICAgICAgICAgaWYgKCFtX3Jlc3VsdHNG
b3JFbXB0eUxhbmd1YWdlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBtX2xpc3RlbmVyLT5z
ZXRSZWNvZ25pdGlvblJlc3VsdChyZXF1ZXN0SWQsIG1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2Up
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG5vUmVzdWx0c0ZvdW5kID0gdHJ1
ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX3JlY29nbml0aW9uUmVzdWx0
cy5jb250YWlucyhtX2xhbmd1YWdlKSkKLSAgICAgICAgICAgICAgICBtX2xpc3RlbmVyLT5zZXRS
ZWNvZ25pdGlvblJlc3VsdChyZXF1ZXN0SWQsIG1fcmVjb2duaXRpb25SZXN1bHRzLmdldChtX2xh
bmd1YWdlKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbm9SZXN1bHRzRm91
bmQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5vUmVzdWx0c0ZvdW5kKSB7Ci0g
ICAgICAgICAgICAvLyBDYW4ndCBhdm9pZCBzZXR0aW5nIGEgcmVzdWx0IGV2ZW4gaWYgbm8gcmVz
dWx0IHdhcyBzZXQgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZS4KLSAgICAgICAgICAgIC8vIFRoaXMg
d291bGQgYXZvaWQgZ2VuZXJhdGluZyB0aGUgZXZlbnRzIHVzZWQgdG8gY2hlY2sgdGhlIHJlc3Vs
dHMgYW5kIHRoZSB0ZXN0IHdvdWxkIHRpbWVvdXQuCi0gICAgICAgICAgICBTdHJpbmcgZXJyb3Io
ImVycm9yOiBubyByZXN1bHQgZm91bmQgZm9yIGxhbmd1YWdlICciKTsKLSAgICAgICAgICAgIGVy
cm9yLmFwcGVuZChtX2xhbmd1YWdlKTsKLSAgICAgICAgICAgIGVycm9yLmFwcGVuZCgiJyIpOwot
Ci0gICAgICAgICAgICBXZWJTcGVlY2hJbnB1dFJlc3VsdCByZXM7Ci0gICAgICAgICAgICByZXMu
YXNzaWduKFdlYlN0cmluZzo6ZnJvbVVURjgoZXJyb3IudXRmOCgpLmRhdGEoKSksIDEuMCk7Ci0K
LSAgICAgICAgICAgIFZlY3RvcjxXZWJTcGVlY2hJbnB1dFJlc3VsdD4gcmVzdWx0czsKLSAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlcyk7Ci0KLSAgICAgICAgICAgIG1fbGlzdGVuZXItPnNl
dFJlY29nbml0aW9uUmVzdWx0KHJlcXVlc3RJZCwgcmVzdWx0cyk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLU1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OlNwZWVjaFRhc2s6OlNwZWVjaFRh
c2soTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlciogbW9jaykKLSAgICA6IFdlYk1ldGhvZFRh
c2s8TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcj46OldlYk1ldGhvZFRhc2sobW9jaykKLXsK
LX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpTcGVlY2hUYXNrOjpzdG9w
KCkKLXsKLSAgICBtX29iamVjdC0+bV9zcGVlY2hUYXNrID0gMDsKLSAgICBjYW5jZWwoKTsKLSAg
ICBkZWxldGUodGhpcyk7Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6
U3BlZWNoVGFzazo6cnVuSWZWYWxpZCgpCi17Ci0gICAgbV9vYmplY3QtPm1fc3BlZWNoVGFzayA9
IDA7Ci0gICAgbV9vYmplY3QtPnNwZWVjaFRhc2tGaXJlZCgpOwotfQotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJ
bnB1dENvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkzZjBiZjY3
YTVkNWVkMGFlYTIxMmFmNGM1NTk4OWNmZTdjY2Y5YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2Nr
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyX2gKLSNkZWZpbmUg
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcl9oCi0KLSNpZiBFTkFCTEUoSU5QVVRfU1BFRUNI
KQotCi0jaW5jbHVkZSAiV2ViVGFzay5oIgotI2luY2x1ZGUgIldlYlNwZWVjaElucHV0Q29udHJv
bGxlci5oIgotI2luY2x1ZGUgIldlYlNwZWVjaElucHV0UmVzdWx0LmgiCi0jaW5jbHVkZSA8cHVi
bGljL1dlYlJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJTZWN1
cml0eU9yaWdpbjsKLWNsYXNzIFdlYlNwZWVjaElucHV0TGlzdGVuZXI7Ci1jbGFzcyBXZWJTdHJp
bmc7Ci19Ci0KLWNsYXNzIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIgOiBwdWJsaWMgV2Vi
S2l0OjpXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI+IGNyZWF0ZShXZWJLaXQ6OldlYlNw
ZWVjaElucHV0TGlzdGVuZXIqKTsKLQotICAgIHZvaWQgYWRkTW9ja1JlY29nbml0aW9uUmVzdWx0
KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBjb25z
dCBXZWJLaXQ6OldlYlN0cmluZyYgbGFuZ3VhZ2UpOwotICAgIHZvaWQgc2V0RHVtcFJlY3QoYm9v
bCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHMoKTsKLQotICAgIC8vIFdlYlNwZWVjaElucHV0Q29u
dHJvbGxlciBpbXBsZW1lbnRhdGlvbjoKLSAgICB2aXJ0dWFsIGJvb2wgc3RhcnRSZWNvZ25pdGlv
bihpbnQgcmVxdWVzdElkLCBjb25zdCBXZWJLaXQ6OldlYlJlY3QmIGVsZW1lbnRSZWN0LCBjb25z
dCBXZWJLaXQ6OldlYlN0cmluZyYgbGFuZ3VhZ2UsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBn
cmFtbWFyLCBjb25zdCBXZWJLaXQ6OldlYlNlY3VyaXR5T3JpZ2luJikgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIGNhbmNlbFJlY29nbml0aW9uKGludCByZXF1ZXN0SWQpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBzdG9wUmVjb3JkaW5nKGludCByZXF1ZXN0SWQpIE9WRVJSSURFOwot
Ci0gICAgV2ViVGVzdFJ1bm5lcjo6V2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1f
dGFza0xpc3Q7IH0KLQotcHJpdmF0ZToKLSAgICBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
KFdlYktpdDo6V2ViU3BlZWNoSW5wdXRMaXN0ZW5lciopOwotICAgIHZvaWQgc3BlZWNoVGFza0Zp
cmVkKCk7Ci0KLSAgICBjbGFzcyBTcGVlY2hUYXNrIDogcHVibGljIFdlYlRlc3RSdW5uZXI6Oldl
Yk1ldGhvZFRhc2s8TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcj4gewotICAgIHB1YmxpYzoK
LSAgICAgICAgU3BlZWNoVGFzayhNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKik7Ci0gICAg
ICAgIHZvaWQgc3RvcCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2b2lkIHJ1
bklmVmFsaWQoKSBPVkVSUklERTsKLSAgICB9OwotCi0gICAgV2ViS2l0OjpXZWJTcGVlY2hJbnB1
dExpc3RlbmVyKiBtX2xpc3RlbmVyOwotCi0gICAgV2ViVGVzdFJ1bm5lcjo6V2ViVGFza0xpc3Qg
bV90YXNrTGlzdDsKLSAgICBTcGVlY2hUYXNrKiBtX3NwZWVjaFRhc2s7Ci0KLSAgICBib29sIG1f
cmVjb3JkaW5nOwotICAgIGludCBtX3JlcXVlc3RJZDsKLSAgICBXZWJLaXQ6OldlYlJlY3QgbV9y
ZXF1ZXN0UmVjdDsKLSAgICBTdHJpbmcgbV9sYW5ndWFnZTsKLQotICAgIEhhc2hNYXA8U3RyaW5n
LCBWZWN0b3I8V2ViS2l0OjpXZWJTcGVlY2hJbnB1dFJlc3VsdD4gPiBtX3JlY29nbml0aW9uUmVz
dWx0czsKLSAgICBWZWN0b3I8V2ViS2l0OjpXZWJTcGVlY2hJbnB1dFJlc3VsdD4gbV9yZXN1bHRz
Rm9yRW1wdHlMYW5ndWFnZTsKLSAgICBib29sIG1fZHVtcFJlY3Q7Ci19OwotCi0jZW5kaWYgLy8g
RU5BQkxFKElOUFVUX1NQRUVDSCkKLQotI2VuZGlmIC8vIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRy
b2xsZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dl
YlNwZWVjaFJlY29nbml6ZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9j
a1dlYlNwZWVjaFJlY29nbml6ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
YzM2MGUwY2UyOTY2OWIzZTA3ODE2ZGJmNzlkN2Q3NjdlOWVmZGM2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyLmgiCi0KLSNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQotCi0jaW5jbHVk
ZSAiVGFzay5oIgotI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgiCi0jaW5j
bHVkZSAiV2ViU3BlZWNoUmVjb2duaXplckNsaWVudC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwotdXNpbmcgbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXI7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8v
IFRhc2sgY2xhc3MgZm9yIGNhbGxpbmcgYSBjbGllbnQgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCB0
YWtlIGFueSBwYXJhbWV0ZXJzLgotdHlwZWRlZiB2b2lkIChXZWJTcGVlY2hSZWNvZ25pemVyQ2xp
ZW50OjoqQ2xpZW50RnVuY3Rpb25Qb2ludGVyKShjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhh
bmRsZSYpOwotY2xhc3MgQ2xpZW50Q2FsbFRhc2sgOiBwdWJsaWMgTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXI6OlRhc2sgewotcHVibGljOgotICAgIENsaWVudENhbGxUYXNrKE1vY2tXZWJTcGVlY2hS
ZWNvZ25pemVyKiBtb2NrLCBDbGllbnRGdW5jdGlvblBvaW50ZXIgZnVuY3Rpb24pCi0gICAgICAg
IDogTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sobW9jaykKLSAgICAgICAgLCBtX2Z1bmN0
aW9uKGZ1bmN0aW9uKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgT1ZF
UlJJREUgeyAobV9yZWNvZ25pemVyLT5jbGllbnQoKS0+Km1fZnVuY3Rpb24pKG1fcmVjb2duaXpl
ci0+aGFuZGxlKCkpOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ2xpZW50RnVuY3Rpb25Qb2ludGVyIG1f
ZnVuY3Rpb247Ci19OwotCi0vLyBUYXNrIGZvciBkZWxpdmVyaW5nIGEgcmVzdWx0IGV2ZW50Lgot
Y2xhc3MgUmVzdWx0VGFzayA6IHB1YmxpYyBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6VGFzayB7
Ci1wdWJsaWM6Ci0gICAgUmVzdWx0VGFzayhNb2NrV2ViU3BlZWNoUmVjb2duaXplciogbW9jaywg
Y29uc3QgV2ViU3RyaW5nIHRyYW5zY3JpcHQsIGZsb2F0IGNvbmZpZGVuY2UpCi0gICAgICAgIDog
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sobW9jaykKLSAgICAgICAgLCBtX3RyYW5zY3Jp
cHQodHJhbnNjcmlwdCkKLSAgICAgICAgLCBtX2NvbmZpZGVuY2UoY29uZmlkZW5jZSkKLSAgICB7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1bigpIE9WRVJSSURFCi0gICAgewotICAgICAg
ICBXZWJWZWN0b3I8V2ViU3RyaW5nPiB0cmFuc2NyaXB0cyhzdGF0aWNfY2FzdDxzaXplX3Q+KDEp
KTsKLSAgICAgICAgV2ViVmVjdG9yPGZsb2F0PiBjb25maWRlbmNlcyhzdGF0aWNfY2FzdDxzaXpl
X3Q+KDEpKTsKLSAgICAgICAgdHJhbnNjcmlwdHNbMF0gPSBtX3RyYW5zY3JpcHQ7Ci0gICAgICAg
IGNvbmZpZGVuY2VzWzBdID0gbV9jb25maWRlbmNlOwotICAgICAgICBXZWJWZWN0b3I8V2ViU3Bl
ZWNoUmVjb2duaXRpb25SZXN1bHQ+IGZpbmFsUmVzdWx0cyhzdGF0aWNfY2FzdDxzaXplX3Q+KDEp
KTsKLSAgICAgICAgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiBpbnRlcmlt
UmVzdWx0czsKLSAgICAgICAgZmluYWxSZXN1bHRzWzBdLmFzc2lnbih0cmFuc2NyaXB0cywgY29u
ZmlkZW5jZXMsIHRydWUpOwotCi0gICAgICAgIG1fcmVjb2duaXplci0+Y2xpZW50KCktPmRpZFJl
Y2VpdmVSZXN1bHRzKG1fcmVjb2duaXplci0+aGFuZGxlKCksIGZpbmFsUmVzdWx0cywgaW50ZXJp
bVJlc3VsdHMpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBXZWJTdHJpbmcgbV90cmFuc2NyaXB0
OwotICAgIGZsb2F0IG1fY29uZmlkZW5jZTsKLX07Ci0KLS8vIFRhc2sgZm9yIGRlbGl2ZXJpbmcg
YSBub21hdGNoIGV2ZW50LgotY2xhc3MgTm9NYXRjaFRhc2sgOiBwdWJsaWMgTW9ja1dlYlNwZWVj
aFJlY29nbml6ZXI6OlRhc2sgewotcHVibGljOgotICAgIE5vTWF0Y2hUYXNrKE1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyKiBtb2NrKSA6IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrKG1vY2sp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBydW4oKSBPVkVSUklERSB7IG1fcmVjb2duaXplci0+Y2xp
ZW50KCktPmRpZFJlY2VpdmVOb01hdGNoKG1fcmVjb2duaXplci0+aGFuZGxlKCksIFdlYlNwZWVj
aFJlY29nbml0aW9uUmVzdWx0KCkpOyB9Ci19OwotCi0vLyBUYXNrIGZvciBkZWxpdmVyaW5nIGFu
IGVycm9yIGV2ZW50LgotY2xhc3MgRXJyb3JUYXNrIDogcHVibGljIE1vY2tXZWJTcGVlY2hSZWNv
Z25pemVyOjpUYXNrIHsKLXB1YmxpYzoKLSAgICBFcnJvclRhc2soTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXIqIG1vY2ssIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OkVycm9yQ29kZSBjb2RlLCBj
b25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCi0gICAgICAgIDogTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXI6OlRhc2sobW9jaykKLSAgICAgICAgLCBtX2NvZGUoY29kZSkKLSAgICAgICAgLCBtX21lc3Nh
Z2UobWVzc2FnZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1bigpIE9WRVJS
SURFIHsgbV9yZWNvZ25pemVyLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUVycm9yKG1fcmVjb2duaXpl
ci0+aGFuZGxlKCksIG1fbWVzc2FnZSwgbV9jb2RlKTsgfQotCi1wcml2YXRlOgotICAgIFdlYlNw
ZWVjaFJlY29nbml6ZXJDbGllbnQ6OkVycm9yQ29kZSBtX2NvZGU7Ci0gICAgV2ViU3RyaW5nIG1f
bWVzc2FnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLVBhc3NPd25QdHI8TW9ja1dlYlNwZWVj
aFJlY29nbml6ZXI+IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpjcmVhdGUoKQotewotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIoKSk7Ci19Ci0KLXZvaWQg
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0YXJ0KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9u
SGFuZGxlJiBoYW5kbGUsIGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zJiBwYXJhbXMs
IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBtX3dhc0Fib3J0ZWQg
PSBmYWxzZTsKLSAgICBtX2hhbmRsZSA9IGhhbmRsZTsKLSAgICBtX2NsaWVudCA9IGNsaWVudDsK
LQotICAgIG1fdGFza1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgQ2xpZW50Q2FsbFRhc2sodGhp
cywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZFN0YXJ0KSkpOwotICAgIG1fdGFza1F1
ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJl
Y29nbml6ZXJDbGllbnQ6OmRpZFN0YXJ0QXVkaW8pKSk7Ci0gICAgbV90YXNrUXVldWUuYXBwZW5k
KGFkb3B0UHRyKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNs
aWVudDo6ZGlkU3RhcnRTb3VuZCkpKTsKLQotICAgIGlmICghbV9tb2NrVHJhbnNjcmlwdHMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVChtX21vY2tUcmFuc2NyaXB0cy5zaXplKCkgPT0gbV9t
b2NrQ29uZmlkZW5jZXMuc2l6ZSgpKTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fbW9ja1RyYW5zY3JpcHRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV90YXNrUXVldWUu
YXBwZW5kKGFkb3B0UHRyKG5ldyBSZXN1bHRUYXNrKHRoaXMsIG1fbW9ja1RyYW5zY3JpcHRzW2ld
LCBtX21vY2tDb25maWRlbmNlc1tpXSkpKTsKLQotICAgICAgICBtX21vY2tUcmFuc2NyaXB0cy5j
bGVhcigpOwotICAgICAgICBtX21vY2tDb25maWRlbmNlcy5jbGVhcigpOwotICAgIH0gZWxzZQot
ICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IE5vTWF0Y2hUYXNrKHRoaXMp
KSk7Ci0KLSAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IENsaWVudENhbGxUYXNr
KHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmRTb3VuZCkpKTsKLSAgICBt
X3Rhc2tRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJT
cGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmRBdWRpbykpKTsKLSAgICBtX3Rhc2tRdWV1ZS5h
cHBlbmQoYWRvcHRQdHIobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25p
emVyQ2xpZW50OjpkaWRFbmQpKSk7Ci0KLSAgICBzdGFydFRhc2tRdWV1ZSgpOwotfQotCi12b2lk
IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzdG9wKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9u
SGFuZGxlJiBoYW5kbGUsIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAg
ICBtX2hhbmRsZSA9IGhhbmRsZTsKLSAgICBtX2NsaWVudCA9IGNsaWVudDsKLQotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgTW9j
a1dlYlNwZWVjaFJlY29nbml6ZXI6OmFib3J0KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFu
ZGxlJiBoYW5kbGUsIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBt
X2hhbmRsZSA9IGhhbmRsZTsKLSAgICBtX2NsaWVudCA9IGNsaWVudDsKLQotICAgIGNsZWFyVGFz
a1F1ZXVlKCk7Ci0gICAgbV93YXNBYm9ydGVkID0gdHJ1ZTsKLSAgICBtX3Rhc2tRdWV1ZS5hcHBl
bmQoYWRvcHRQdHIobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVy
Q2xpZW50OjpkaWRFbmQpKSk7Ci0gICAgc3RhcnRUYXNrUXVldWUoKTsKLX0KLQotdm9pZCBNb2Nr
V2ViU3BlZWNoUmVjb2duaXplcjo6YWRkTW9ja1Jlc3VsdChjb25zdCBXZWJTdHJpbmcmIHRyYW5z
Y3JpcHQsIGZsb2F0IGNvbmZpZGVuY2UpCi17Ci0gICAgbV9tb2NrVHJhbnNjcmlwdHMuYXBwZW5k
KHRyYW5zY3JpcHQpOwotICAgIG1fbW9ja0NvbmZpZGVuY2VzLmFwcGVuZChjb25maWRlbmNlKTsK
LX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c2V0RXJyb3IoY29uc3QgV2ViU3Ry
aW5nJiBlcnJvciwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQotewotICAgIFdlYlNwZWVjaFJl
Y29nbml6ZXJDbGllbnQ6OkVycm9yQ29kZSBjb2RlOwotICAgIGlmIChlcnJvciA9PSAiT3RoZXJF
cnJvciIpCi0gICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpPdGhlckVy
cm9yOwotICAgIGVsc2UgaWYgKGVycm9yID09ICJOb1NwZWVjaEVycm9yIikKLSAgICAgICAgY29k
ZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Ok5vU3BlZWNoRXJyb3I7Ci0gICAgZWxzZSBp
ZiAoZXJyb3IgPT0gIkFib3J0ZWRFcnJvciIpCi0gICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNv
Z25pemVyQ2xpZW50OjpBYm9ydGVkRXJyb3I7Ci0gICAgZWxzZSBpZiAoZXJyb3IgPT0gIkF1ZGlv
Q2FwdHVyZUVycm9yIikKLSAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6
OkF1ZGlvQ2FwdHVyZUVycm9yOwotICAgIGVsc2UgaWYgKGVycm9yID09ICJOZXR3b3JrRXJyb3Ii
KQotICAgICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6TmV0d29ya0Vycm9y
OwotICAgIGVsc2UgaWYgKGVycm9yID09ICJOb3RBbGxvd2VkRXJyb3IiKQotICAgICAgICBjb2Rl
ID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6Tm90QWxsb3dlZEVycm9yOwotICAgIGVsc2Ug
aWYgKGVycm9yID09ICJTZXJ2aWNlTm90QWxsb3dlZEVycm9yIikKLSAgICAgICAgY29kZSA9IFdl
YlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OlNlcnZpY2VOb3RBbGxvd2VkRXJyb3I7Ci0gICAgZWxz
ZSBpZiAoZXJyb3IgPT0gIkJhZEdyYW1tYXJFcnJvciIpCi0gICAgICAgIGNvZGUgPSBXZWJTcGVl
Y2hSZWNvZ25pemVyQ2xpZW50OjpCYWRHcmFtbWFyRXJyb3I7Ci0gICAgZWxzZSBpZiAoZXJyb3Ig
PT0gIkxhbmd1YWdlTm90U3VwcG9ydGVkRXJyb3IiKQotICAgICAgICBjb2RlID0gV2ViU3BlZWNo
UmVjb2duaXplckNsaWVudDo6TGFuZ3VhZ2VOb3RTdXBwb3J0ZWRFcnJvcjsKLSAgICBlbHNlCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNsZWFyVGFza1F1ZXVlKCk7Ci0gICAgbV90YXNrUXVldWUu
YXBwZW5kKGFkb3B0UHRyKG5ldyBFcnJvclRhc2sodGhpcywgY29kZSwgbWVzc2FnZSkpKTsKLSAg
ICBtX3Rhc2tRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZX
ZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmQpKSk7Ci0gICAgc3RhcnRUYXNrUXVldWUo
KTsKLX0KLQotTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVy
KCkKLSAgICA6IG1fd2FzQWJvcnRlZChmYWxzZSkKLSAgICAsIG1fdGFza1F1ZXVlUnVubmluZyhm
YWxzZSkKLXsKLX0KLQotTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6On5Nb2NrV2ViU3BlZWNoUmVj
b2duaXplcigpCi17Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0YXJ0VGFz
a1F1ZXVlKCkKLXsKLSAgICBpZiAobV90YXNrUXVldWVSdW5uaW5nKQotICAgICAgICByZXR1cm47
Ci0gICAgcG9zdFRhc2sobmV3IFN0ZXBUYXNrKHRoaXMpKTsKLSAgICBtX3Rhc2tRdWV1ZVJ1bm5p
bmcgPSB0cnVlOwotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpjbGVhclRhc2tR
dWV1ZSgpCi17Ci0gICAgbV90YXNrUXVldWUuY2xlYXIoKTsKLSAgICBtX3Rhc2tRdWV1ZVJ1bm5p
bmcgPSBmYWxzZTsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6U3RlcFRhc2s6
OnJ1bklmVmFsaWQoKQotewotICAgIGlmIChtX29iamVjdC0+bV90YXNrUXVldWUuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZVJ1bm5pbmcgPSBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIE93blB0cjxUYXNrPiB0YXNrID0gbV9vYmplY3QtPm1f
dGFza1F1ZXVlWzBdLnJlbGVhc2UoKTsKLSAgICBtX29iamVjdC0+bV90YXNrUXVldWUucmVtb3Zl
KDApOwotICAgIHRhc2stPnJ1bigpOwotCi0gICAgaWYgKG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgbV9vYmplY3QtPm1fdGFza1F1ZXVlUnVubmluZyA9IGZhbHNl
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9zdFRhc2sobmV3IFN0ZXBUYXNrKG1f
b2JqZWN0KSk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hSZWNvZ25p
emVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNjUzNGI0YzZjMmIyOTNiNmQ0
MzAwMzFmZjAyZDMyNzA0ODkyNjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJl
Y29nbml6ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyX2gKLSNkZWZpbmUgTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXJfaAotCi0jaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKLQotI2luY2x1ZGUgIldlYlNwZWVj
aFJlY29nbml6ZXIuaCIKLSNpbmNsdWRlICJXZWJUYXNrLmgiCi0jaW5jbHVkZSA8d3RmL0NvbXBp
bGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5k
bGU7Ci1jbGFzcyBXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtczsKLWNsYXNzIFdlYlNwZWVjaFJl
Y29nbml6ZXJDbGllbnQ7Ci19Ci0KLWNsYXNzIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyIDogcHVi
bGljIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI+IGNyZWF0ZSgpOwotICAgIH5Nb2NrV2Vi
U3BlZWNoUmVjb2duaXplcigpOwotCi0gICAgLy8gV2ViU3BlZWNoUmVjb2duaXplciBpbXBsZW1l
bnRhdGlvbjoKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoY29uc3QgV2ViS2l0OjpXZWJTcGVlY2hS
ZWNvZ25pdGlvbkhhbmRsZSYsIGNvbnN0IFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25QYXJh
bXMmLCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgc3RvcChjb25zdCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxl
JiwgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KikgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIGFib3J0KGNvbnN0IFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUm
LCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqKSBPVkVSUklERTsKLQotICAgIC8v
IE1ldGhvZHMgYWNjZXNzZWQgYnkgbGF5b3V0IHRlc3RzOgotICAgIHZvaWQgYWRkTW9ja1Jlc3Vs
dChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgdHJhbnNjcmlwdCwgZmxvYXQgY29uZmlkZW5jZSk7
Ci0gICAgdm9pZCBzZXRFcnJvcihjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZXJyb3IsIGNvbnN0
IFdlYktpdDo6V2ViU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBib29sIHdhc0Fib3J0ZWQoKSBjb25z
dCB7IHJldHVybiBtX3dhc0Fib3J0ZWQ7IH0KLQotICAgIC8vIE1ldGhvZHMgYWNjZXNzZWQgZnJv
bSBUYXNrIG9iamVjdHM6Ci0gICAgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KiBj
bGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQotICAgIFdlYktpdDo6V2ViU3BlZWNoUmVjb2du
aXRpb25IYW5kbGUmIGhhbmRsZSgpIHsgcmV0dXJuIG1faGFuZGxlOyB9Ci0gICAgV2ViVGVzdFJ1
bm5lcjo6V2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1fdGFza0xpc3Q7IH0KLQot
ICAgIGNsYXNzIFRhc2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgVGFzayhNb2NrV2ViU3BlZWNo
UmVjb2duaXplciogcmVjb2duaXplcikgOiBtX3JlY29nbml6ZXIocmVjb2duaXplcikgeyB9Ci0g
ICAgICAgIHZpcnR1YWwgflRhc2soKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJ1bigpID0g
MDsKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBtX3Jl
Y29nbml6ZXI7Ci0gICAgfTsKLQotcHJpdmF0ZToKLSAgICBNb2NrV2ViU3BlZWNoUmVjb2duaXpl
cigpOwotICAgIHZvaWQgc3RhcnRUYXNrUXVldWUoKTsKLSAgICB2b2lkIGNsZWFyVGFza1F1ZXVl
KCk7Ci0KLSAgICBXZWJUZXN0UnVubmVyOjpXZWJUYXNrTGlzdCBtX3Rhc2tMaXN0OwotICAgIFdl
YktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUgbV9oYW5kbGU7Ci0gICAgV2ViS2l0OjpX
ZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KiBtX2NsaWVudDsKLSAgICBWZWN0b3I8V2ViS2l0OjpX
ZWJTdHJpbmc+IG1fbW9ja1RyYW5zY3JpcHRzOwotICAgIFZlY3RvcjxmbG9hdD4gbV9tb2NrQ29u
ZmlkZW5jZXM7Ci0gICAgYm9vbCBtX3dhc0Fib3J0ZWQ7Ci0KLSAgICAvLyBRdWV1ZSBvZiB0YXNr
cyB0byBiZSBydW4uCi0gICAgVmVjdG9yPE93blB0cjxUYXNrPiA+IG1fdGFza1F1ZXVlOwotICAg
IGJvb2wgbV90YXNrUXVldWVSdW5uaW5nOwotCi0gICAgLy8gVGFzayBmb3Igc3RlcHBpbmcgdGhl
IHF1ZXVlLgotICAgIGNsYXNzIFN0ZXBUYXNrIDogcHVibGljIFdlYlRlc3RSdW5uZXI6OldlYk1l
dGhvZFRhc2s8TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IFN0ZXBUYXNrKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBvYmplY3QpIDogV2ViVGVzdFJ1bm5l
cjo6V2ViTWV0aG9kVGFzazxNb2NrV2ViU3BlZWNoUmVjb2duaXplcj4ob2JqZWN0KSB7IH0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSBPVkVSUklERTsKLSAgICB9OwotfTsKLQot
I2VuZGlmIC8vIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCi0KLSNlbmRpZiAvLyBNb2NrV2ViU3Bl
ZWNoUmVjb2duaXplcl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0RGVsZWdhdGUuaCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3REZWxlZ2F0ZS5oCmluZGV4IDA3
NzhlYzFmZDU4MjdjYzExYzJkMWVlYTQ1MjNiMTY0YjdjYjdhNzMuLjVkN2I4ZGE3NTU5MGVjZmY1
YzFmN2IzMDVkZDhiNzQxMDU3NTFhNmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3REZWxlZ2F0ZS5oCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3REZWxlZ2F0
ZS5oCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKLWNsYXNzIFdlYkRldmljZU9yaWVudGF0aW9uOwogY2xhc3MgV2ViR2FtZXBhZHM7CiBj
bGFzcyBXZWJIaXN0b3J5SXRlbTsKIHN0cnVjdCBXZWJSZWN0OwpAQCAtODQsMjggKzgzLDEyIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZXB0QWxsQ29va2llcyhib29sKSB7IH0K
ICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIHBhdGhUb0xvY2FsUmVzb3VyY2UoY29uc3Qgc3RkOjpz
dHJpbmcmIHJlc291cmNlKSB7IHJldHVybiBzdGQ6OnN0cmluZygpOyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldExvY2FsZShjb25zdCBzdGQ6OnN0cmluZyYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBz
ZXREZXZpY2VPcmllbnRhdGlvbihXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0aW9uJikgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZEFjcXVpcmVQb2ludGVyTG9jaygpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBkaWROb3RBY3F1aXJlUG9pbnRlckxvY2soKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlk
TG9zZVBvaW50ZXJMb2NrKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBvaW50ZXJMb2NrV2ls
bFJlc3BvbmRBc3luY2hyb25vdXNseSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQb2ludGVy
TG9ja1dpbGxGYWlsU3luY2hyb25vdXNseSgpIHsgfQotICAgIHZpcnR1YWwgaW50IG51bWJlck9m
UGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSwgZG91YmxlLCBkb3Vi
bGUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZh
aWxhYmxlRXJyb3IoY29uc3Qgc3RkOjpzdHJpbmcmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRk
TW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IHN0ZDo6c3RyaW5nJiwgZG91YmxlLCBjb25zdCBz
dGQ6OnN0cmluZyYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRNb2NrU3BlZWNoSW5wdXREdW1w
UmVjdChib29sKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkTW9ja1NwZWVjaFJlY29nbml0aW9u
UmVzdWx0KGNvbnN0IHN0ZDo6c3RyaW5nJiwgZG91YmxlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IoY29uc3Qgc3RkOjpzdHJpbmcmLCBjb25zdCBz
dGQ6OnN0cmluZyYpIHsgfQotICAgIHZpcnR1YWwgYm9vbCB3YXNNb2NrU3BlZWNoUmVjb2duaXRp
b25BYm9ydGVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgdGVzdEZpbmlz
aGVkKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHRlc3RUaW1lZE91dCgpIHsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc0JlaW5nRGVidWdnZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
aW50IGxheW91dFRlc3RUaW1lb3V0KCkgeyByZXR1cm4gMzAgKiAxMDAwOyB9CiAgICAgdmlydHVh
bCB2b2lkIGNsb3NlUmVtYWluaW5nV2luZG93cygpIHsgfQogICAgIHZpcnR1YWwgaW50IG5hdmln
YXRpb25FbnRyeUNvdW50KCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IHdpbmRvd0Nv
dW50KCkgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBnb1RvT2Zmc2V0KGludCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHJlbG9hZCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJM
Rm9yRnJhbWUoY29uc3QgV2ViS2l0OjpXZWJVUkwmLCBjb25zdCBzdGQ6OnN0cmluZyYpIHsgfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJs
aWMvV2ViVGVzdFByb3h5LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3B1YmxpYy9XZWJUZXN0UHJveHkuaAppbmRleCA1ZjgxYzMyMzYwNjYyZDJlNWNlNTk5YmY0
MmE2YzIyMjE4YmFkMjc2Li5jYjQwNjcyNTdkMmVmZWE2YmZlODU5ZTk4OTZlNWU4MWRhZmUyNDJi
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1
YmxpYy9XZWJUZXN0UHJveHkuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UHJveHkuaApAQCAtNTEsMTQgKzUxLDIxIEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogY2xhc3MgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDsKIGNsYXNzIFdlYkNh
Y2hlZFVSTFJlcXVlc3Q7CiBjbGFzcyBXZWJEYXRhU291cmNlOworY2xhc3MgV2ViRGV2aWNlT3Jp
ZW50YXRpb25DbGllbnQ7CitjbGFzcyBXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2s7CiBj
bGFzcyBXZWJEcmFnRGF0YTsKIGNsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViR2VvbG9jYXRpb25D
bGllbnQ7CitjbGFzcyBXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2s7CiBjbGFzcyBXZWJJbWFnZTsK
IGNsYXNzIFdlYk5vZGU7CiBjbGFzcyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI7CiBjbGFzcyBX
ZWJQbHVnaW47CiBjbGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTsKK2NsYXNzIFdlYlNwZWVjaElucHV0Q29udHJvbGxlcjsKK2NsYXNzIFdlYlNwZWVjaElucHV0
TGlzdGVuZXI7CitjbGFzcyBXZWJTcGVlY2hSZWNvZ25pemVyOwogY2xhc3MgV2ViU3BlbGxDaGVj
a0NsaWVudDsKIGNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdlYlVSTDsKQEAgLTc4LDYgKzg1LDgg
QEAgY2xhc3MgU2tDYW52YXM7CiAKIG5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKIAorY2xhc3Mg
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjsKK2NsYXNzIE1vY2tXZWJTcGVlY2hSZWNvZ25p
emVyOwogY2xhc3MgU3BlbGxDaGVja0NsaWVudDsKIGNsYXNzIFRlc3RJbnRlcmZhY2VzOwogY2xh
c3MgV2ViVGVzdERlbGVnYXRlOwpAQCAtOTksMTAgKzEwOCwxNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldExvZ0NvbnNvbGVPdXRwdXQoYm9vbCBlbmFibGVkKTsKIAorI2lmIFdFQlRFU1RSVU5O
RVJfSU1QTEVNRU5UQVRJT04KICAgICB2b2lkIGRpc3BsYXkoKTsKICAgICB2b2lkIGRpc3BsYXlJ
bnZhbGlkYXRlZFJlZ2lvbigpOwogICAgIHZvaWQgZGlzY2FyZEJhY2tpbmdTdG9yZSgpOwogCisg
ICAgV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2sqIGRldmljZU9yaWVudGF0
aW9uQ2xpZW50TW9jaygpOworICAgIFdlYktpdDo6V2ViR2VvbG9jYXRpb25DbGllbnRNb2NrKiBn
ZW9sb2NhdGlvbkNsaWVudE1vY2soKTsKKyAgICBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
KiBzcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrKCk7CisgICAgTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXIqIHNwZWVjaFJlY29nbml6ZXJNb2NrKCk7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFdl
YlRlc3RQcm94eUJhc2UoKTsKICAgICB+V2ViVGVzdFByb3h5QmFzZSgpOwpAQCAtMTM3LDYgKzE1
MywxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgV2ViS2l0OjpXZWJVc2VyTWVkaWFDbGllbnQqIHVzZXJN
ZWRpYUNsaWVudCgpOwogICAgIHZvaWQgcHJpbnRQYWdlKFdlYktpdDo6V2ViRnJhbWUqKTsKICAg
ICBXZWJLaXQ6OldlYk5vdGlmaWNhdGlvblByZXNlbnRlciogbm90aWZpY2F0aW9uUHJlc2VudGVy
KCk7CisgICAgV2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudCogZ2VvbG9jYXRpb25DbGllbnQo
KTsKKyAgICBXZWJLaXQ6OldlYlNwZWVjaElucHV0Q29udHJvbGxlciogc3BlZWNoSW5wdXRDb250
cm9sbGVyKFdlYktpdDo6V2ViU3BlZWNoSW5wdXRMaXN0ZW5lciopOworICAgIFdlYktpdDo6V2Vi
U3BlZWNoUmVjb2duaXplciogc3BlZWNoUmVjb2duaXplcigpOworICAgIFdlYktpdDo6V2ViRGV2
aWNlT3JpZW50YXRpb25DbGllbnQqIGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCk7CisgICAgYm9v
bCByZXF1ZXN0UG9pbnRlckxvY2soKTsKKyAgICB2b2lkIHJlcXVlc3RQb2ludGVyVW5sb2NrKCk7
CisgICAgYm9vbCBpc1BvaW50ZXJMb2NrZWQoKTsKIAogICAgIHZvaWQgd2lsbFBlcmZvcm1DbGll
bnRSZWRpcmVjdChXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJVUkwmIGZyb20s
IGNvbnN0IFdlYktpdDo6V2ViVVJMJiB0bywgZG91YmxlIGludGVydmFsLCBkb3VibGUgZmlyZV90
aW1lKTsKICAgICB2b2lkIGRpZENhbmNlbENsaWVudFJlZGlyZWN0KFdlYktpdDo6V2ViRnJhbWUq
KTsKQEAgLTE5Miw2ICsyMTUsMTIgQEAgcHJpdmF0ZToKICAgICBzdGQ6Om1hcDx1bnNpZ25lZCwg
c3RkOjpzdHJpbmc+IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwOwogCiAgICAgYm9vbCBtX2xvZ0Nv
bnNvbGVPdXRwdXQ7CisKKyAgICBzdGQ6OmF1dG9fcHRyPFdlYktpdDo6V2ViR2VvbG9jYXRpb25D
bGllbnRNb2NrPiBtX2dlb2xvY2F0aW9uQ2xpZW50OworICAgIHN0ZDo6YXV0b19wdHI8V2ViS2l0
OjpXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2s+IG1fZGV2aWNlT3JpZW50YXRpb25DbGll
bnQ7CisgICAgc3RkOjphdXRvX3B0cjxNb2NrV2ViU3BlZWNoUmVjb2duaXplcj4gbV9zcGVlY2hS
ZWNvZ25pemVyOworICAgIHN0ZDo6YXV0b19wdHI8TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxl
cj4gbV9zcGVlY2hJbnB1dENvbnRyb2xsZXI7CisKIHByaXZhdGU6CiAgICAgV2ViVGVzdFByb3h5
QmFzZShXZWJUZXN0UHJveHlCYXNlJik7CiAgICAgV2ViVGVzdFByb3h5QmFzZSYgb3BlcmF0b3I9
KGNvbnN0IFdlYlRlc3RQcm94eUJhc2UmKTsKQEAgLTM1OCw2ICszODcsMzQgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIFdlYlRlc3RQcm94eUJhc2U6Om5vdGlmaWNhdGlvblByZXNl
bnRlcigpOwogICAgIH0KKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViR2VvbG9jYXRpb25DbGllbnQq
IGdlb2xvY2F0aW9uQ2xpZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJUZXN0UHJveHlC
YXNlOjpnZW9sb2NhdGlvbkNsaWVudCgpOworICAgIH0KKyAgICB2aXJ0dWFsIFdlYktpdDo6V2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyKiBzcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViS2l0OjpXZWJT
cGVlY2hJbnB1dExpc3RlbmVyKiBsaXN0ZW5lcikKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJU
ZXN0UHJveHlCYXNlOjpzcGVlY2hJbnB1dENvbnRyb2xsZXIobGlzdGVuZXIpOworICAgIH0KKyAg
ICB2aXJ0dWFsIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplciogc3BlZWNoUmVjb2duaXplcigp
CisgICAgeworICAgICAgICByZXR1cm4gV2ViVGVzdFByb3h5QmFzZTo6c3BlZWNoUmVjb2duaXpl
cigpOworICAgIH0KKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb25DbGll
bnQqIGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJU
ZXN0UHJveHlCYXNlOjpkZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpOworICAgIH0KKyAgICB2aXJ0
dWFsIGJvb2wgcmVxdWVzdFBvaW50ZXJMb2NrKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJU
ZXN0UHJveHlCYXNlOjpyZXF1ZXN0UG9pbnRlckxvY2soKTsKKyAgICB9CisgICAgdmlydHVhbCB2
b2lkIHJlcXVlc3RQb2ludGVyVW5sb2NrKCkKKyAgICB7CisgICAgICAgIFdlYlRlc3RQcm94eUJh
c2U6OnJlcXVlc3RQb2ludGVyVW5sb2NrKCk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Bv
aW50ZXJMb2NrZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYlRlc3RQcm94eUJhc2U6Omlz
UG9pbnRlckxvY2tlZCgpOworICAgIH0KIAogICAgIC8vIFdlYkZyYW1lQ2xpZW50IGltcGxlbWVu
dGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdlYktp
dDo6V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYgZnJvbSwgY29uc3QgV2Vi
S2l0OjpXZWJVUkwmIHRvLCBkb3VibGUgaW50ZXJ2YWwsIGRvdWJsZSBmaXJlVGltZSkKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzRkZjMyYTgyYzc0ZDc2ZGQwY2UxNjA3NDBiMmRmYWQ5YjFkZTZiZAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01v
Y2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXIuaCIKKworI2luY2x1ZGUgIldlYlNwZWVjaElucHV0TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJX
ZWJUZXN0RGVsZWdhdGUuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KKworI2lmIEVOQUJMRV9JTlBVVF9TUEVFQ0gKKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBX
ZWJUZXN0UnVubmVyIHsKKworbmFtZXNwYWNlIHsKKworV2ViU3BlZWNoSW5wdXRSZXN1bHRBcnJh
eSBtYWtlUmVjdFJlc3VsdChjb25zdCBXZWJSZWN0JiByZWN0KQoreworICAgIGNoYXIgYnVmZmVy
WzEwMF07CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVkLCVkLCVkLCVk
IiwgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKKworICAgIFdlYlNw
ZWVjaElucHV0UmVzdWx0IHJlczsKKyAgICByZXMuYXNzaWduKFdlYlN0cmluZzo6ZnJvbVVURjgo
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlcikpLCAxLjApOworCisgICAgV2ViU3BlZWNo
SW5wdXRSZXN1bHRBcnJheSByZXN1bHRzOworICAgIHJlc3VsdHMuYXNzaWduKCZyZXMsIDEpOwor
ICAgIHJldHVybiByZXN1bHRzOworfQorCit9CisKK01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViU3BlZWNoSW5wdXRMaXN0ZW5lciog
bGlzdGVuZXIpCisgICAgOiBtX2xpc3RlbmVyKGxpc3RlbmVyKQorICAgICwgbV9zcGVlY2hUYXNr
KDApCisgICAgLCBtX3JlY29yZGluZyhmYWxzZSkKKyAgICAsIG1fcmVxdWVzdElkKC0xKQorICAg
ICwgbV9kdW1wUmVjdChmYWxzZSkKKyAgICAsIG1fZGVsZWdhdGUoMCkKK3sKK30KKworTW9ja1dl
YlNwZWVjaElucHV0Q29udHJvbGxlcjo6fk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIoKQor
eworfQorCit2b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnNldERlbGVnYXRlKFdl
YlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCit7CisgICAgbV9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwor
fQorCit2b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmFkZE1vY2tSZWNvZ25pdGlv
blJlc3VsdChjb25zdCBXZWJTdHJpbmcmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIGNvbnN0
IFdlYlN0cmluZyYgbGFuZ3VhZ2UpCit7CisgICAgV2ViU3BlZWNoSW5wdXRSZXN1bHQgcmVzOwor
ICAgIHJlcy5hc3NpZ24ocmVzdWx0LCBjb25maWRlbmNlKTsKKworICAgIGlmIChsYW5ndWFnZS5p
c0VtcHR5KCkpCisgICAgICAgIG1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2UucHVzaF9iYWNrKHJl
cyk7CisgICAgZWxzZSB7CisgICAgICAgIHN0cmluZyBsYW5nU3RyaW5nID0gbGFuZ3VhZ2UudXRm
OCgpOworICAgICAgICBpZiAobV9yZWNvZ25pdGlvblJlc3VsdHMuZmluZChsYW5nU3RyaW5nKSA9
PSBtX3JlY29nbml0aW9uUmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgIG1fcmVjb2duaXRpb25S
ZXN1bHRzW2xhbmdTdHJpbmddID0gdmVjdG9yPFdlYlNwZWVjaElucHV0UmVzdWx0PigpOworICAg
ICAgICBtX3JlY29nbml0aW9uUmVzdWx0c1tsYW5nU3RyaW5nXS5wdXNoX2JhY2socmVzKTsKKyAg
ICB9Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6c2V0RHVtcFJlY3Qo
Ym9vbCBkdW1wUmVjdCkKK3sKKyAgICBtX2R1bXBSZWN0ID0gZHVtcFJlY3Q7Cit9CisKK3ZvaWQg
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6Y2xlYXJSZXN1bHRzKCkKK3sKKyAgICBtX3Jl
c3VsdHNGb3JFbXB0eUxhbmd1YWdlLmNsZWFyKCk7CisgICAgbV9yZWNvZ25pdGlvblJlc3VsdHMu
Y2xlYXIoKTsKKyAgICBtX2R1bXBSZWN0ID0gZmFsc2U7Cit9CisKK2Jvb2wgTW9ja1dlYlNwZWVj
aElucHV0Q29udHJvbGxlcjo6c3RhcnRSZWNvZ25pdGlvbihpbnQgcmVxdWVzdElkLCBjb25zdCBX
ZWJSZWN0JiBlbGVtZW50UmVjdCwgY29uc3QgV2ViU3RyaW5nJiBsYW5ndWFnZSwgY29uc3QgV2Vi
U3RyaW5nJiBncmFtbWFyLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luKQoreworICAg
IGlmIChtX3NwZWVjaFRhc2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcmVxdWVz
dElkID0gcmVxdWVzdElkOworICAgIG1fcmVxdWVzdFJlY3QgPSBlbGVtZW50UmVjdDsKKyAgICBt
X3JlY29yZGluZyA9IHRydWU7CisgICAgbV9sYW5ndWFnZSA9IGxhbmd1YWdlLnV0ZjgoKTsKKwor
ICAgIG1fc3BlZWNoVGFzayA9IG5ldyBTcGVlY2hUYXNrKHRoaXMpOworICAgIG1fZGVsZWdhdGUt
PnBvc3RUYXNrKG1fc3BlZWNoVGFzayk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpjYW5jZWxSZWNvZ25pdGlvbihpbnQgcmVxdWVz
dElkKQoreworICAgIGlmIChtX3NwZWVjaFRhc2spIHsKKyAgICAgICAgV0VCS0lUX0FTU0VSVChy
ZXF1ZXN0SWQgPT0gbV9yZXF1ZXN0SWQpOworCisgICAgICAgIG1fc3BlZWNoVGFzay0+c3RvcCgp
OworICAgICAgICBtX3JlY29yZGluZyA9IGZhbHNlOworICAgICAgICBtX2xpc3RlbmVyLT5kaWRD
b21wbGV0ZVJlY29nbml0aW9uKG1fcmVxdWVzdElkKTsKKyAgICAgICAgbV9yZXF1ZXN0SWQgPSAw
OworICAgIH0KK30KKwordm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpzdG9wUmVj
b3JkaW5nKGludCByZXF1ZXN0SWQpCit7CisgICAgV0VCS0lUX0FTU0VSVChyZXF1ZXN0SWQgPT0g
bV9yZXF1ZXN0SWQpOworICAgIGlmIChtX3NwZWVjaFRhc2sgJiYgbV9yZWNvcmRpbmcpIHsKKyAg
ICAgICAgbV9zcGVlY2hUYXNrLT5zdG9wKCk7CisgICAgICAgIHNwZWVjaFRhc2tGaXJlZCgpOwor
ICAgIH0KK30KKwordm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpzcGVlY2hUYXNr
RmlyZWQoKQoreworICAgIGlmIChtX3JlY29yZGluZykgeworICAgICAgICBtX3JlY29yZGluZyA9
IGZhbHNlOworICAgICAgICBtX2xpc3RlbmVyLT5kaWRDb21wbGV0ZVJlY29yZGluZyhtX3JlcXVl
c3RJZCk7CisKKyAgICAgICAgbV9zcGVlY2hUYXNrID0gbmV3IFNwZWVjaFRhc2sodGhpcyk7Cisg
ICAgICAgIG1fZGVsZWdhdGUtPnBvc3RUYXNrKG1fc3BlZWNoVGFzayk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYm9vbCBub1Jlc3VsdHNGb3VuZCA9IGZhbHNlOworICAgICAgICAvLyBXZSB0YWtl
IGEgY29weSBvZiB0aGUgcmVxdWVzdElkIGhlcmUgc28gdGhhdCBpZiBzY3JpcHRzIGRlc3Ryb3ll
ZCB0aGUgaW5wdXQgZWxlbWVudAorICAgICAgICAvLyBpbnNpZGUgb25lIG9mIHRoZSBjYWxsYmFj
a3MgYmVsb3csIHdlJ2xsIHN0aWxsIGtub3cgd2hhdCB0aGlzIHNlc3Npb24ncyByZXF1ZXN0SWQg
d2FzLgorICAgICAgICBpbnQgcmVxdWVzdElkID0gbV9yZXF1ZXN0SWQ7CisgICAgICAgIG1fcmVx
dWVzdElkID0gMDsKKworICAgICAgICBpZiAobV9kdW1wUmVjdCkgeworICAgICAgICAgICAgbV9s
aXN0ZW5lci0+c2V0UmVjb2duaXRpb25SZXN1bHQocmVxdWVzdElkLCBtYWtlUmVjdFJlc3VsdCht
X3JlcXVlc3RSZWN0KSk7CisgICAgICAgIH0gZWxzZSBpZiAobV9sYW5ndWFnZS5lbXB0eSgpKSB7
CisgICAgICAgICAgICAvLyBFbXB0eSBsYW5ndWFnZSBjYXNlIG11c3QgYmUgaGFuZGxlZCBzZXBh
cmF0ZWx5IHRvIGF2b2lkIHByb2JsZW1zIHdpdGggSGFzaE1hcCBhbmQgZW1wdHkga2V5cy4KKyAg
ICAgICAgICAgIGlmICghbV9yZXN1bHRzRm9yRW1wdHlMYW5ndWFnZS5lbXB0eSgpKQorICAgICAg
ICAgICAgICAgIG1fbGlzdGVuZXItPnNldFJlY29nbml0aW9uUmVzdWx0KHJlcXVlc3RJZCwgbV9y
ZXN1bHRzRm9yRW1wdHlMYW5ndWFnZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbm9SZXN1bHRzRm91bmQgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKG1fcmVjb2duaXRpb25SZXN1bHRzLmZpbmQobV9sYW5ndWFnZSkgIT0gbV9yZWNvZ25pdGlv
blJlc3VsdHMuZW5kKCkpCisgICAgICAgICAgICAgICAgbV9saXN0ZW5lci0+c2V0UmVjb2duaXRp
b25SZXN1bHQocmVxdWVzdElkLCBtX3JlY29nbml0aW9uUmVzdWx0c1ttX2xhbmd1YWdlXSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbm9SZXN1bHRzRm91bmQgPSB0cnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vUmVzdWx0c0ZvdW5kKSB7CisgICAgICAgICAgICAv
LyBDYW4ndCBhdm9pZCBzZXR0aW5nIGEgcmVzdWx0IGV2ZW4gaWYgbm8gcmVzdWx0IHdhcyBzZXQg
Zm9yIHRoZSBnaXZlbiBsYW5ndWFnZS4KKyAgICAgICAgICAgIC8vIFRoaXMgd291bGQgYXZvaWQg
Z2VuZXJhdGluZyB0aGUgZXZlbnRzIHVzZWQgdG8gY2hlY2sgdGhlIHJlc3VsdHMgYW5kIHRoZSB0
ZXN0IHdvdWxkIHRpbWVvdXQuCisgICAgICAgICAgICBzdHJpbmcgZXJyb3IoImVycm9yOiBubyBy
ZXN1bHQgZm91bmQgZm9yIGxhbmd1YWdlICciKTsKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCht
X2xhbmd1YWdlKTsKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCgiJyIpOworCisgICAgICAgICAg
ICBXZWJTcGVlY2hJbnB1dFJlc3VsdCByZXM7CisgICAgICAgICAgICByZXMuYXNzaWduKFdlYlN0
cmluZzo6ZnJvbVVURjgoZXJyb3IpLCAxLjApOworCisgICAgICAgICAgICB2ZWN0b3I8V2ViU3Bl
ZWNoSW5wdXRSZXN1bHQ+IHJlc3VsdHM7CisgICAgICAgICAgICByZXN1bHRzLnB1c2hfYmFjayhy
ZXMpOworCisgICAgICAgICAgICBtX2xpc3RlbmVyLT5zZXRSZWNvZ25pdGlvblJlc3VsdChyZXF1
ZXN0SWQsIHJlc3VsdHMpOworICAgICAgICB9CisgICAgfQorfQorCitNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyOjpTcGVlY2hUYXNrOjpTcGVlY2hUYXNrKE1vY2tXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXIqIG1vY2spCisgICAgOiBXZWJNZXRob2RUYXNrPE1vY2tXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXI+OjpXZWJNZXRob2RUYXNrKG1vY2spCit7Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVj
aElucHV0Q29udHJvbGxlcjo6U3BlZWNoVGFzazo6c3RvcCgpCit7CisgICAgbV9vYmplY3QtPm1f
c3BlZWNoVGFzayA9IDA7CisgICAgY2FuY2VsKCk7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3Zv
aWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6U3BlZWNoVGFzazo6cnVuSWZWYWxpZCgp
Cit7CisgICAgbV9vYmplY3QtPm1fc3BlZWNoVGFzayA9IDA7CisgICAgbV9vYmplY3QtPnNwZWVj
aFRhc2tGaXJlZCgpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaElucHV0Q29udHJv
bGxlci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9j
a1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0MDM0ZTM2N2VhNDY3ZGU4
NGI3N2E4NTVhNTgzMzE5Y2I1MDkyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlcl9oCisjZGVmaW5lIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXJfaAorCisj
aW5jbHVkZSAiVGVzdENvbW1vbi5oIgorI2luY2x1ZGUgIldlYlNwZWVjaElucHV0Q29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIldlYlNwZWVjaElucHV0UmVzdWx0LmgiCisjaW5jbHVkZSAiV2ViVGFz
ay5oIgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViUmVjdC5oPgorI2luY2x1
ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xh
c3MgV2ViU2VjdXJpdHlPcmlnaW47CitjbGFzcyBXZWJTcGVlY2hJbnB1dExpc3RlbmVyOworY2xh
c3MgV2ViU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7CisKK2NsYXNzIFdl
YlRlc3REZWxlZ2F0ZTsKKworY2xhc3MgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlciA6IHB1
YmxpYyBXZWJLaXQ6OldlYlNwZWVjaElucHV0Q29udHJvbGxlciB7CitwdWJsaWM6CisgICAgZXhw
bGljaXQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcihXZWJLaXQ6OldlYlNwZWVjaElucHV0
TGlzdGVuZXIqKTsKKyAgICB+TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcigpOworCisgICAg
dm9pZCBhZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHJl
c3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBsYW5ndWFn
ZSk7CisgICAgdm9pZCBzZXREdW1wUmVjdChib29sKTsKKyAgICB2b2lkIGNsZWFyUmVzdWx0cygp
OworICAgIHZvaWQgc2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKik7CisKKyAgICAvLyBXZWJT
cGVlY2hJbnB1dENvbnRyb2xsZXIgaW1wbGVtZW50YXRpb246CisgICAgdmlydHVhbCBib29sIHN0
YXJ0UmVjb2duaXRpb24oaW50IHJlcXVlc3RJZCwgY29uc3QgV2ViS2l0OjpXZWJSZWN0JiBlbGVt
ZW50UmVjdCwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBXZWJLaXQ6
OldlYlN0cmluZyYgZ3JhbW1hciwgY29uc3QgV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbiYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxSZWNvZ25pdGlvbihpbnQgcmVxdWVzdElk
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFJlY29yZGluZyhpbnQgcmVxdWVzdElk
KSBPVkVSUklERTsKKworICAgIFdlYlRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rh
c2tMaXN0OyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBzcGVlY2hUYXNrRmlyZWQoKTsKKworICAg
IGNsYXNzIFNwZWVjaFRhc2sgOiBwdWJsaWMgV2ViTWV0aG9kVGFzazxNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyPiB7CisgICAgcHVibGljOgorICAgICAgICBTcGVlY2hUYXNrKE1vY2tXZWJT
cGVlY2hJbnB1dENvbnRyb2xsZXIqKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7CisKKyAgICBwcml2
YXRlOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIE9WRVJSSURFOworICAgIH07
CisKKyAgICBXZWJLaXQ6OldlYlNwZWVjaElucHV0TGlzdGVuZXIqIG1fbGlzdGVuZXI7CisKKyAg
ICBXZWJUYXNrTGlzdCBtX3Rhc2tMaXN0OworICAgIFNwZWVjaFRhc2sqIG1fc3BlZWNoVGFzazsK
KworICAgIGJvb2wgbV9yZWNvcmRpbmc7CisgICAgaW50IG1fcmVxdWVzdElkOworICAgIFdlYktp
dDo6V2ViUmVjdCBtX3JlcXVlc3RSZWN0OworICAgIHN0ZDo6c3RyaW5nIG1fbGFuZ3VhZ2U7CisK
KyAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8V2ViS2l0OjpXZWJTcGVlY2hJ
bnB1dFJlc3VsdD4gPiBtX3JlY29nbml0aW9uUmVzdWx0czsKKyAgICBzdGQ6OnZlY3RvcjxXZWJL
aXQ6OldlYlNwZWVjaElucHV0UmVzdWx0PiBtX3Jlc3VsdHNGb3JFbXB0eUxhbmd1YWdlOworICAg
IGJvb2wgbV9kdW1wUmVjdDsKKworICAgIFdlYlRlc3REZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKK307
CisKK30KKworI2VuZGlmIC8vIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXJfaApkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dl
YlNwZWVjaFJlY29nbml6ZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2NjA4
MTIxMzgyZDc5YTU3NjcxNDUxM2MyNDJjYzQwYjFlMGU0NDgKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNo
UmVjb2duaXplci5jcHAKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaCIKKworI2luY2x1ZGUgIldl
YlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoUmVjb2duaXpl
ckNsaWVudC5oIgorI2luY2x1ZGUgIldlYlRlc3REZWxlZ2F0ZS5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYlRlc3RSdW5u
ZXIgeworCituYW1lc3BhY2UgeworCisvLyBUYXNrIGNsYXNzIGZvciBjYWxsaW5nIGEgY2xpZW50
IGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgdGFrZSBhbnkgcGFyYW1ldGVycy4KK3R5cGVkZWYgdm9p
ZCAoV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6KkNsaWVudEZ1bmN0aW9uUG9pbnRlcikoY29u
c3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmKTsKK2NsYXNzIENsaWVudENhbGxUYXNrIDog
cHVibGljIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrIHsKK3B1YmxpYzoKKyAgICBDbGll
bnRDYWxsVGFzayhNb2NrV2ViU3BlZWNoUmVjb2duaXplciogbW9jaywgQ2xpZW50RnVuY3Rpb25Q
b2ludGVyIGZ1bmN0aW9uKQorICAgICAgICA6IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNr
KG1vY2spCisgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHJ1bigpIE9WRVJSSURFIHsgKG1fcmVjb2duaXplci0+Y2xpZW50KCkt
PiptX2Z1bmN0aW9uKShtX3JlY29nbml6ZXItPmhhbmRsZSgpKTsgfQorCitwcml2YXRlOgorICAg
IENsaWVudEZ1bmN0aW9uUG9pbnRlciBtX2Z1bmN0aW9uOworfTsKKworLy8gVGFzayBmb3IgZGVs
aXZlcmluZyBhIHJlc3VsdCBldmVudC4KK2NsYXNzIFJlc3VsdFRhc2sgOiBwdWJsaWMgTW9ja1dl
YlNwZWVjaFJlY29nbml6ZXI6OlRhc2sgeworcHVibGljOgorICAgIFJlc3VsdFRhc2soTW9ja1dl
YlNwZWVjaFJlY29nbml6ZXIqIG1vY2ssIGNvbnN0IFdlYlN0cmluZyB0cmFuc2NyaXB0LCBmbG9h
dCBjb25maWRlbmNlKQorICAgICAgICA6IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrKG1v
Y2spCisgICAgICAgICwgbV90cmFuc2NyaXB0KHRyYW5zY3JpcHQpCisgICAgICAgICwgbV9jb25m
aWRlbmNlKGNvbmZpZGVuY2UpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBydW4o
KSBPVkVSUklERQorICAgIHsKKyAgICAgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gdHJhbnNjcmlw
dHMoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSk7CisgICAgICAgIFdlYlZlY3RvcjxmbG9hdD4gY29u
ZmlkZW5jZXMoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSk7CisgICAgICAgIHRyYW5zY3JpcHRzWzBd
ID0gbV90cmFuc2NyaXB0OworICAgICAgICBjb25maWRlbmNlc1swXSA9IG1fY29uZmlkZW5jZTsK
KyAgICAgICAgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiBmaW5hbFJlc3Vs
dHMoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSk7CisgICAgICAgIFdlYlZlY3RvcjxXZWJTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdD4gaW50ZXJpbVJlc3VsdHM7CisgICAgICAgIGZpbmFsUmVzdWx0c1sw
XS5hc3NpZ24odHJhbnNjcmlwdHMsIGNvbmZpZGVuY2VzLCB0cnVlKTsKKworICAgICAgICBtX3Jl
Y29nbml6ZXItPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzdWx0cyhtX3JlY29nbml6ZXItPmhhbmRs
ZSgpLCBmaW5hbFJlc3VsdHMsIGludGVyaW1SZXN1bHRzKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgV2ViU3RyaW5nIG1fdHJhbnNjcmlwdDsKKyAgICBmbG9hdCBtX2NvbmZpZGVuY2U7Cit9Owor
CisvLyBUYXNrIGZvciBkZWxpdmVyaW5nIGEgbm9tYXRjaCBldmVudC4KK2NsYXNzIE5vTWF0Y2hU
YXNrIDogcHVibGljIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrIHsKK3B1YmxpYzoKKyAg
ICBOb01hdGNoVGFzayhNb2NrV2ViU3BlZWNoUmVjb2duaXplciogbW9jaykgOiBNb2NrV2ViU3Bl
ZWNoUmVjb2duaXplcjo6VGFzayhtb2NrKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgT1ZF
UlJJREUgeyBtX3JlY29nbml6ZXItPmNsaWVudCgpLT5kaWRSZWNlaXZlTm9NYXRjaChtX3JlY29n
bml6ZXItPmhhbmRsZSgpLCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCgpKTsgfQorfTsKKwor
Ly8gVGFzayBmb3IgZGVsaXZlcmluZyBhbiBlcnJvciBldmVudC4KK2NsYXNzIEVycm9yVGFzayA6
IHB1YmxpYyBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6VGFzayB7CitwdWJsaWM6CisgICAgRXJy
b3JUYXNrKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBtb2NrLCBXZWJTcGVlY2hSZWNvZ25pemVy
Q2xpZW50OjpFcnJvckNvZGUgY29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQorICAgICAg
ICA6IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrKG1vY2spCisgICAgICAgICwgbV9jb2Rl
KGNvZGUpCisgICAgICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBydW4oKSBPVkVSUklERSB7IG1fcmVjb2duaXplci0+Y2xpZW50KCktPmRp
ZFJlY2VpdmVFcnJvcihtX3JlY29nbml6ZXItPmhhbmRsZSgpLCBtX21lc3NhZ2UsIG1fY29kZSk7
IH0KKworcHJpdmF0ZToKKyAgICBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpFcnJvckNvZGUg
bV9jb2RlOworICAgIFdlYlN0cmluZyBtX21lc3NhZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZQor
CitNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIoKQorICAg
IDogbV93YXNBYm9ydGVkKGZhbHNlKQorICAgICwgbV90YXNrUXVldWVSdW5uaW5nKGZhbHNlKQor
ICAgICwgbV9kZWxlZ2F0ZSgwKQoreworfQorCitNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6fk1v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyKCkKK3sKKyAgICBjbGVhclRhc2tRdWV1ZSgpOworfQorCit2
b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUq
IGRlbGVnYXRlKQoreworICAgIG1fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKwordm9pZCBNb2Nr
V2ViU3BlZWNoUmVjb2duaXplcjo6c3RhcnQoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5k
bGUmIGhhbmRsZSwgY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXMmIHBhcmFtcywgV2Vi
U3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KQoreworICAgIG1fd2FzQWJvcnRlZCA9IGZh
bHNlOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1fY2xpZW50ID0gY2xpZW50OworCisg
ICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3Bl
ZWNoUmVjb2duaXplckNsaWVudDo6ZGlkU3RhcnQpKTsKKyAgICBtX3Rhc2tRdWV1ZS5wdXNoX2Jh
Y2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50Ojpk
aWRTdGFydEF1ZGlvKSk7CisgICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBDbGllbnRDYWxs
VGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkU3RhcnRTb3VuZCkpOwor
CisgICAgaWYgKCFtX21vY2tUcmFuc2NyaXB0cy5lbXB0eSgpKSB7CisgICAgICAgIFdFQktJVF9B
U1NFUlQobV9tb2NrVHJhbnNjcmlwdHMuc2l6ZSgpID09IG1fbW9ja0NvbmZpZGVuY2VzLnNpemUo
KSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21vY2tUcmFuc2NyaXB0cy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fdGFza1F1ZXVlLnB1c2hfYmFjayhuZXcgUmVzdWx0
VGFzayh0aGlzLCBtX21vY2tUcmFuc2NyaXB0c1tpXSwgbV9tb2NrQ29uZmlkZW5jZXNbaV0pKTsK
KworICAgICAgICBtX21vY2tUcmFuc2NyaXB0cy5jbGVhcigpOworICAgICAgICBtX21vY2tDb25m
aWRlbmNlcy5jbGVhcigpOworICAgIH0gZWxzZQorICAgICAgICBtX3Rhc2tRdWV1ZS5wdXNoX2Jh
Y2sobmV3IE5vTWF0Y2hUYXNrKHRoaXMpKTsKKworICAgIG1fdGFza1F1ZXVlLnB1c2hfYmFjayhu
ZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZEVu
ZFNvdW5kKSk7CisgICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBDbGllbnRDYWxsVGFzayh0
aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kQXVkaW8pKTsKKyAgICBtX3Rh
c2tRdWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNv
Z25pemVyQ2xpZW50OjpkaWRFbmQpKTsKKworICAgIHN0YXJ0VGFza1F1ZXVlKCk7Cit9CisKK3Zv
aWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0b3AoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRp
b25IYW5kbGUmIGhhbmRsZSwgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KQorewor
ICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1fY2xpZW50ID0gY2xpZW50OworCisgICAgLy8g
RklYTUU6IEltcGxlbWVudC4KKyAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmFib3J0KGNvbnN0IFdlYlNwZWVjaFJlY29n
bml0aW9uSGFuZGxlJiBoYW5kbGUsIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIGNsaWVudCkK
K3sKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKKworICAg
IGNsZWFyVGFza1F1ZXVlKCk7CisgICAgbV93YXNBYm9ydGVkID0gdHJ1ZTsKKyAgICBtX3Rhc2tR
dWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25p
emVyQ2xpZW50OjpkaWRFbmQpKTsKKyAgICBzdGFydFRhc2tRdWV1ZSgpOworfQorCit2b2lkIE1v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyOjphZGRNb2NrUmVzdWx0KGNvbnN0IFdlYlN0cmluZyYgdHJh
bnNjcmlwdCwgZmxvYXQgY29uZmlkZW5jZSkKK3sKKyAgICBtX21vY2tUcmFuc2NyaXB0cy5wdXNo
X2JhY2sodHJhbnNjcmlwdCk7CisgICAgbV9tb2NrQ29uZmlkZW5jZXMucHVzaF9iYWNrKGNvbmZp
ZGVuY2UpOworfQorCit2b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzZXRFcnJvcihjb25z
dCBXZWJTdHJpbmcmIGVycm9yLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgV2Vi
U3BlZWNoUmVjb2duaXplckNsaWVudDo6RXJyb3JDb2RlIGNvZGU7CisgICAgaWYgKGVycm9yID09
ICJPdGhlckVycm9yIikKKyAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6
Ok90aGVyRXJyb3I7CisgICAgZWxzZSBpZiAoZXJyb3IgPT0gIk5vU3BlZWNoRXJyb3IiKQorICAg
ICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6Tm9TcGVlY2hFcnJvcjsKKyAg
ICBlbHNlIGlmIChlcnJvciA9PSAiQWJvcnRlZEVycm9yIikKKyAgICAgICAgY29kZSA9IFdlYlNw
ZWVjaFJlY29nbml6ZXJDbGllbnQ6OkFib3J0ZWRFcnJvcjsKKyAgICBlbHNlIGlmIChlcnJvciA9
PSAiQXVkaW9DYXB0dXJlRXJyb3IiKQorICAgICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXpl
ckNsaWVudDo6QXVkaW9DYXB0dXJlRXJyb3I7CisgICAgZWxzZSBpZiAoZXJyb3IgPT0gIk5ldHdv
cmtFcnJvciIpCisgICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpOZXR3
b3JrRXJyb3I7CisgICAgZWxzZSBpZiAoZXJyb3IgPT0gIk5vdEFsbG93ZWRFcnJvciIpCisgICAg
ICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpOb3RBbGxvd2VkRXJyb3I7Cisg
ICAgZWxzZSBpZiAoZXJyb3IgPT0gIlNlcnZpY2VOb3RBbGxvd2VkRXJyb3IiKQorICAgICAgICBj
b2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6U2VydmljZU5vdEFsbG93ZWRFcnJvcjsK
KyAgICBlbHNlIGlmIChlcnJvciA9PSAiQmFkR3JhbW1hckVycm9yIikKKyAgICAgICAgY29kZSA9
IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OkJhZEdyYW1tYXJFcnJvcjsKKyAgICBlbHNlIGlm
IChlcnJvciA9PSAiTGFuZ3VhZ2VOb3RTdXBwb3J0ZWRFcnJvciIpCisgICAgICAgIGNvZGUgPSBX
ZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpMYW5ndWFnZU5vdFN1cHBvcnRlZEVycm9yOworICAg
IGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJUYXNrUXVldWUoKTsKKyAgICBtX3Rh
c2tRdWV1ZS5wdXNoX2JhY2sobmV3IEVycm9yVGFzayh0aGlzLCBjb2RlLCBtZXNzYWdlKSk7Cisg
ICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3Bl
ZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kKSk7CisgICAgc3RhcnRUYXNrUXVldWUoKTsKK30K
Kwordm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c3RhcnRUYXNrUXVldWUoKQoreworICAg
IGlmIChtX3Rhc2tRdWV1ZVJ1bm5pbmcpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RlbGVnYXRl
LT5wb3N0VGFzayhuZXcgU3RlcFRhc2sodGhpcykpOworICAgIG1fdGFza1F1ZXVlUnVubmluZyA9
IHRydWU7Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmNsZWFyVGFza1F1ZXVl
KCkKK3sKKyAgICB3aGlsZSAoIW1fdGFza1F1ZXVlLmVtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRl
IG1fdGFza1F1ZXVlLmZyb250KCk7CisgICAgICAgIG1fdGFza1F1ZXVlLnBvcF9mcm9udCgpOwor
ICAgIH0KKyAgICBtX3Rhc2tRdWV1ZVJ1bm5pbmcgPSBmYWxzZTsKK30KKwordm9pZCBNb2NrV2Vi
U3BlZWNoUmVjb2duaXplcjo6U3RlcFRhc2s6OnJ1bklmVmFsaWQoKQoreworICAgIGlmIChtX29i
amVjdC0+bV90YXNrUXVldWUuZW1wdHkoKSkgeworICAgICAgICBtX29iamVjdC0+bV90YXNrUXVl
dWVSdW5uaW5nID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBUYXNrKiB0
YXNrID0gbV9vYmplY3QtPm1fdGFza1F1ZXVlLmZyb250KCk7CisgICAgbV9vYmplY3QtPm1fdGFz
a1F1ZXVlLnBvcF9mcm9udCgpOworICAgIHRhc2stPnJ1bigpOworICAgIGRlbGV0ZSB0YXNrOwor
CisgICAgaWYgKG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZS5lbXB0eSgpKSB7CisgICAgICAgIG1fb2Jq
ZWN0LT5tX3Rhc2tRdWV1ZVJ1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fb2JqZWN0LT5tX2RlbGVnYXRlLT5wb3N0VGFzayhuZXcgU3RlcFRhc2sobV9vYmpl
Y3QpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjg5YmMyNmMxNzNkMDliMWIxZjUzZGU0ZjMxMmMyYmU3OTJiYmRlYgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
c3JjL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyX2gKKyNkZWZpbmUgTW9ja1dlYlNwZWVjaFJl
Y29nbml6ZXJfaAorCisjaW5jbHVkZSAiVGVzdENvbW1vbi5oIgorI2luY2x1ZGUgIldlYlNwZWVj
aFJlY29nbml6ZXIuaCIKKyNpbmNsdWRlICJXZWJUYXNrLmgiCisjaW5jbHVkZSA8ZGVxdWU+Cisj
aW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlNwZWVjaFJl
Y29nbml0aW9uSGFuZGxlOworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXM7CitjbGFz
cyBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OworfQorCituYW1lc3BhY2UgV2ViVGVzdFJ1bm5l
ciB7CisKK2NsYXNzIFdlYlRlc3REZWxlZ2F0ZTsKKworY2xhc3MgTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyIHsKK3B1YmxpYzoKKyAg
ICBNb2NrV2ViU3BlZWNoUmVjb2duaXplcigpOworICAgIH5Nb2NrV2ViU3BlZWNoUmVjb2duaXpl
cigpOworCisgICAgdm9pZCBzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqKTsKKworICAgIC8v
IFdlYlNwZWVjaFJlY29nbml6ZXIgaW1wbGVtZW50YXRpb246CisgICAgdmlydHVhbCB2b2lkIHN0
YXJ0KGNvbnN0IFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmLCBjb25zdCBXZWJL
aXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zJiwgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25p
emVyQ2xpZW50KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoY29uc3QgV2ViS2l0
OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYsIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXpl
ckNsaWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhYm9ydChjb25zdCBXZWJLaXQ6
OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiwgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVy
Q2xpZW50KikgT1ZFUlJJREU7CisKKyAgICAvLyBNZXRob2RzIGFjY2Vzc2VkIGJ5IGxheW91dCB0
ZXN0czoKKyAgICB2b2lkIGFkZE1vY2tSZXN1bHQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHRy
YW5zY3JpcHQsIGZsb2F0IGNvbmZpZGVuY2UpOworICAgIHZvaWQgc2V0RXJyb3IoY29uc3QgV2Vi
S2l0OjpXZWJTdHJpbmcmIGVycm9yLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWVzc2FnZSk7
CisgICAgYm9vbCB3YXNBYm9ydGVkKCkgY29uc3QgeyByZXR1cm4gbV93YXNBYm9ydGVkOyB9CisK
KyAgICAvLyBNZXRob2RzIGFjY2Vzc2VkIGZyb20gVGFzayBvYmplY3RzOgorICAgIFdlYktpdDo6
V2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0K
KyAgICBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBoYW5kbGUoKSB7IHJldHVy
biBtX2hhbmRsZTsgfQorICAgIFdlYlRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rh
c2tMaXN0OyB9CisKKyAgICBjbGFzcyBUYXNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRhc2so
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIHJlY29nbml6ZXIpIDogbV9yZWNvZ25pemVyKHJlY29n
bml6ZXIpIHsgfQorICAgICAgICB2aXJ0dWFsIH5UYXNrKCkgeyB9CisgICAgICAgIHZpcnR1YWwg
dm9pZCBydW4oKSA9IDA7CisgICAgcHJvdGVjdGVkOgorICAgICAgICBNb2NrV2ViU3BlZWNoUmVj
b2duaXplciogbV9yZWNvZ25pemVyOworICAgIH07CisKK3ByaXZhdGU6CisgICAgdm9pZCBzdGFy
dFRhc2tRdWV1ZSgpOworICAgIHZvaWQgY2xlYXJUYXNrUXVldWUoKTsKKworICAgIFdlYlRhc2tM
aXN0IG1fdGFza0xpc3Q7CisgICAgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSBt
X2hhbmRsZTsKKyAgICBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIG1fY2xpZW50
OworICAgIHN0ZDo6dmVjdG9yPFdlYktpdDo6V2ViU3RyaW5nPiBtX21vY2tUcmFuc2NyaXB0czsK
KyAgICBzdGQ6OnZlY3RvcjxmbG9hdD4gbV9tb2NrQ29uZmlkZW5jZXM7CisgICAgYm9vbCBtX3dh
c0Fib3J0ZWQ7CisKKyAgICAvLyBRdWV1ZSBvZiB0YXNrcyB0byBiZSBydW4uCisgICAgc3RkOjpk
ZXF1ZTxUYXNrKj4gbV90YXNrUXVldWU7CisgICAgYm9vbCBtX3Rhc2tRdWV1ZVJ1bm5pbmc7CisK
KyAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7CisKKyAgICAvLyBUYXNrIGZvciBzdGVw
cGluZyB0aGUgcXVldWUuCisgICAgY2xhc3MgU3RlcFRhc2sgOiBwdWJsaWMgV2ViTWV0aG9kVGFz
azxNb2NrV2ViU3BlZWNoUmVjb2duaXplcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgU3RlcFRh
c2soTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG9iamVjdCkgOiBXZWJNZXRob2RUYXNrPE1vY2tX
ZWJTcGVlY2hSZWNvZ25pemVyPihvYmplY3QpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcnVu
SWZWYWxpZCgpIE9WRVJSSURFOworICAgIH07Cit9OworCit9CisKKyNlbmRpZiAvLyBNb2NrV2Vi
U3BlZWNoUmVjb2duaXplcl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5jcHAKaW5kZXggMWIx
ZjliMGJhY2NmOTYzN2E3MjU4NTQyMDIyOTcwODkzNGQyNmY0NS4uZDI5N2UyZjY3NWRjNGZmMDBh
OTEwZTJhNTQzNjQ1NjQxNzI0N2I1NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmNwcApA
QCAtNTEsNyArNTEsNyBAQCBUZXN0SW50ZXJmYWNlczo6VGVzdEludGVyZmFjZXMoKQogICAgICwg
bV9ldmVudFNlbmRlcihuZXcgRXZlbnRTZW5kZXIoKSkKICAgICAsIG1fZ2FtZXBhZENvbnRyb2xs
ZXIobmV3IEdhbWVwYWRDb250cm9sbGVyKCkpCiAgICAgLCBtX3RleHRJbnB1dENvbnRyb2xsZXIo
bmV3IFRleHRJbnB1dENvbnRyb2xsZXIoKSkKLSAgICAsIG1fdGVzdFJ1bm5lcihuZXcgVGVzdFJ1
bm5lcigpKQorICAgICwgbV90ZXN0UnVubmVyKG5ldyBUZXN0UnVubmVyKHRoaXMpKQogICAgICwg
bV93ZWJWaWV3KDApCiAgICAgLCBtX2RlbGVnYXRlKDApCiB7CkBAIC0xMzMsNiArMTMzLDIxIEBA
IHZvaWQgVGVzdEludGVyZmFjZXM6OmNvbmZpZ3VyZUZvclRlc3RXaXRoVVJMKGNvbnN0IFdlYlVS
TCYgdGVzdFVSTCwgYm9vbCBnZW5lcmF0CiAgICAgICAgIG1fdGVzdFJ1bm5lci0+c2hvd0RldlRv
b2xzKCk7CiB9CiAKK3ZvaWQgVGVzdEludGVyZmFjZXM6OndpbmRvd09wZW5lZChXZWJUZXN0UHJv
eHlCYXNlKiBwcm94eSkKK3sKKyAgICBtX3dpbmRvd0xpc3QucHVzaF9iYWNrKHByb3h5KTsKK30K
Kwordm9pZCBUZXN0SW50ZXJmYWNlczo6d2luZG93Q2xvc2VkKFdlYlRlc3RQcm94eUJhc2UqIHBy
b3h5KQoreworICAgIHZlY3RvcjxXZWJUZXN0UHJveHlCYXNlKj46Oml0ZXJhdG9yIHBvcyA9IGZp
bmQobV93aW5kb3dMaXN0LmJlZ2luKCksIG1fd2luZG93TGlzdC5lbmQoKSwgcHJveHkpOworICAg
IGlmIChwb3MgPT0gbV93aW5kb3dMaXN0LmVuZCgpKSB7CisgICAgICAgIFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3dpbmRvd0xpc3Qu
ZXJhc2UocG9zKTsKK30KKwogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqIFRlc3RJbnRlcmZhY2Vz
OjphY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCiB7CiAgICAgcmV0dXJuIG1fYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuZ2V0KCk7CkBAIC0xNjMsNCArMTc4LDkgQEAgV2ViVGVzdFByb3h5QmFzZSog
VGVzdEludGVyZmFjZXM6OnByb3h5KCkKICAgICByZXR1cm4gbV9wcm94eTsKIH0KIAorY29uc3Qg
dmVjdG9yPFdlYlRlc3RQcm94eUJhc2UqPiYgVGVzdEludGVyZmFjZXM6OndpbmRvd0xpc3QoKQor
eworICAgIHJldHVybiBtX3dpbmRvd0xpc3Q7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmggYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNl
cy5oCmluZGV4IDlkMmU4YzMxNzMwYTQwMDZiNTdjMTIyY2Q2MzQyNjMwZmE4NGEyZWIuLmQ3NWJl
OTFmZDM2MGRlMDVlYjk5YWY5YzhkY2Y1MzhhMmM1YWE3NjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmgKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVy
ZmFjZXMuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBUZXN0SW50ZXJmYWNlc19oCiAKICNp
bmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dmVjdG9yPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IGNsYXNzIFdlYkZyYW1lOwpAQCAtNjEsMTMgKzYyLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFRlc3RJc1J1bm5pbmcoYm9vbCk7CiAgICAgdm9pZCBjb25maWd1cmVGb3JUZXN0V2l0aFVSTChj
b25zdCBXZWJLaXQ6OldlYlVSTCYsIGJvb2wgZ2VuZXJhdGVQaXhlbHMpOwogCisgICAgdm9pZCB3
aW5kb3dPcGVuZWQoV2ViVGVzdFByb3h5QmFzZSogcHJveHkpOworICAgIHZvaWQgd2luZG93Q2xv
c2VkKFdlYlRlc3RQcm94eUJhc2UqIHByb3h5KTsKKwogICAgIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyKiBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOwogICAgIEV2ZW50U2VuZGVyKiBldmVudFNl
bmRlcigpOwogICAgIFRlc3RSdW5uZXIqIHRlc3RSdW5uZXIoKTsKICAgICBXZWJLaXQ6OldlYlZp
ZXcqIHdlYlZpZXcoKTsKICAgICBXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKCk7CiAgICAgV2Vi
VGVzdFByb3h5QmFzZSogcHJveHkoKTsKLQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFdlYlRlc3RQ
cm94eUJhc2UqPiYgd2luZG93TGlzdCgpOwogCiBwcml2YXRlOgogICAgIHN0ZDo6YXV0b19wdHI8
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI+IG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI7CkBAIC03
OCw2ICs4Miw4IEBAIHByaXZhdGU6CiAgICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7CiAg
ICAgV2ViVGVzdERlbGVnYXRlKiBtX2RlbGVnYXRlOwogICAgIFdlYlRlc3RQcm94eUJhc2UqIG1f
cHJveHk7CisKKyAgICBzdGQ6OnZlY3RvcjxXZWJUZXN0UHJveHlCYXNlKj4gbV93aW5kb3dMaXN0
OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcAppbmRleCBkNzllZDNmZTBjYWU3NTI2YWU3
ZTRkMzMxMTkxMDE0MWNhMjkxOWU5Li4yYWI5YTMwODljM2IxMGFiOTEwMjgxZDE5YzYzZDQyMWNj
MDY5Y2E4IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcApAQCAtMzMsMTQgKzMzLDE5IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCisjaW5jbHVkZSAiTW9j
a1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hSZWNv
Z25pemVyLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCisjaW5jbHVkZSAi
VGVzdEludGVyZmFjZXMuaCIKICNpbmNsdWRlICJXZWJCaW5kaW5ncy5oIgogI2luY2x1ZGUgIldl
YkRhdGFTb3VyY2UuaCIKICNpbmNsdWRlICJXZWJEZXZpY2VPcmllbnRhdGlvbi5oIgorI2luY2x1
ZGUgIldlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5oIgogI2luY2x1ZGUgIldlYkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiV2ViRWxlbWVudC5oIgogI2luY2x1ZGUgIldlYkZpbmRPcHRpb25z
LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJHZW9sb2NhdGlvbkNsaWVu
dE1vY2suaCIKICNpbmNsdWRlICJXZWJJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJQZXJt
aXNzaW9ucy5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCkBAIC0xNDIsMTAgKzE0Nywx
MSBAQCB2b2lkIFRlc3RSdW5uZXI6OldvcmtRdWV1ZTo6YWRkV29yayhXb3JrSXRlbSogd29yaykK
IH0KIAogCi1UZXN0UnVubmVyOjpUZXN0UnVubmVyKCkKK1Rlc3RSdW5uZXI6OlRlc3RSdW5uZXIo
VGVzdEludGVyZmFjZXMqIGludGVyZmFjZXMpCiAgICAgOiBtX3Rlc3RJc1J1bm5pbmcoZmFsc2Up
CiAgICAgLCBtX2Nsb3NlUmVtYWluaW5nV2luZG93cyhmYWxzZSkKICAgICAsIG1fd29ya1F1ZXVl
KHRoaXMpCisgICAgLCBtX3Rlc3RJbnRlcmZhY2VzKGludGVyZmFjZXMpCiAgICAgLCBtX2RlbGVn
YXRlKDApCiAgICAgLCBtX3dlYlZpZXcoMCkKICAgICAsIG1fd2ViUGVybWlzc2lvbnMobmV3IFdl
YlBlcm1pc3Npb25zKQpAQCAtNDI3LDYgKzQzMyw4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXQo
KQogI2lmIEVOQUJMRV9OT1RJRklDQVRJT05TCiAgICAgbV9ub3RpZmljYXRpb25QcmVzZW50ZXIt
PnJlc2V0KCk7CiAjZW5kaWYKKyAgICBtX3BvaW50ZXJMb2NrZWQgPSBmYWxzZTsKKyAgICBtX3Bv
aW50ZXJMb2NrUGxhbm5lZFJlc3VsdCA9IFBvaW50ZXJMb2NrV2lsbFN1Y2NlZWQ7CiAKICAgICBt
X3Rhc2tMaXN0LnJldm9rZUFsbCgpOwogICAgIG1fd29ya1F1ZXVlLnJlc2V0KCk7CkBAIC02ODMs
NiArNjkxLDYxIEBAIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlciogVGVzdFJ1bm5lcjo6bm90aWZp
Y2F0aW9uUHJlc2VudGVyKCkgY29uc3QKIH0KICNlbmRpZgogCitib29sIFRlc3RSdW5uZXI6OnJl
cXVlc3RQb2ludGVyTG9jaygpCit7CisgICAgc3dpdGNoIChtX3BvaW50ZXJMb2NrUGxhbm5lZFJl
c3VsdCkgeworICAgIGNhc2UgUG9pbnRlckxvY2tXaWxsU3VjY2VlZDoKKyAgICAgICAgbV9kZWxl
Z2F0ZS0+cG9zdERlbGF5ZWRUYXNrKG5ldyBIb3N0TWV0aG9kVGFzayh0aGlzLCAmVGVzdFJ1bm5l
cjo6ZGlkQWNxdWlyZVBvaW50ZXJMb2NrSW50ZXJuYWwpLCAwKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgY2FzZSBQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmM6CisgICAgICAgIFdFQktJ
VF9BU1NFUlQoIW1fcG9pbnRlckxvY2tlZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNh
c2UgUG9pbnRlckxvY2tXaWxsRmFpbFN5bmM6CisgICAgICAgIFdFQktJVF9BU1NFUlQoIW1fcG9p
bnRlckxvY2tlZCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVxdWVzdFBvaW50ZXJVbmxvY2soKQoreworICAg
IG1fZGVsZWdhdGUtPnBvc3REZWxheWVkVGFzayhuZXcgSG9zdE1ldGhvZFRhc2sodGhpcywgJlRl
c3RSdW5uZXI6OmRpZExvc2VQb2ludGVyTG9ja0ludGVybmFsKSwgMCk7Cit9CisKK2Jvb2wgVGVz
dFJ1bm5lcjo6aXNQb2ludGVyTG9ja2VkKCkKK3sKKyAgICByZXR1cm4gbV9wb2ludGVyTG9ja2Vk
OworfQorCit2b2lkIFRlc3RSdW5uZXI6OmRpZEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKCkK
K3sKKyAgICBtX3BvaW50ZXJMb2NrZWQgPSB0cnVlOworICAgIG1fd2ViVmlldy0+ZGlkQWNxdWly
ZVBvaW50ZXJMb2NrKCk7CisKKyAgICAvLyBSZXNldCBwbGFubmVkIHJlc3VsdCB0byBkZWZhdWx0
LgorICAgIG1fcG9pbnRlckxvY2tQbGFubmVkUmVzdWx0ID0gUG9pbnRlckxvY2tXaWxsU3VjY2Vl
ZDsKK30KKwordm9pZCBUZXN0UnVubmVyOjpkaWROb3RBY3F1aXJlUG9pbnRlckxvY2tJbnRlcm5h
bCgpCit7CisgICAgV0VCS0lUX0FTU0VSVCghbV9wb2ludGVyTG9ja2VkKTsKKyAgICBtX3BvaW50
ZXJMb2NrZWQgPSBmYWxzZTsKKyAgICBtX3dlYlZpZXctPmRpZE5vdEFjcXVpcmVQb2ludGVyTG9j
aygpOworCisgICAgLy8gUmVzZXQgcGxhbm5lZCByZXN1bHQgdG8gZGVmYXVsdC4KKyAgICBtX3Bv
aW50ZXJMb2NrUGxhbm5lZFJlc3VsdCA9IFBvaW50ZXJMb2NrV2lsbFN1Y2NlZWQ7Cit9CisKK3Zv
aWQgVGVzdFJ1bm5lcjo6ZGlkTG9zZVBvaW50ZXJMb2NrSW50ZXJuYWwoKQoreworICAgIGJvb2wg
d2FzTG9ja2VkID0gbV9wb2ludGVyTG9ja2VkOworICAgIG1fcG9pbnRlckxvY2tlZCA9IGZhbHNl
OworICAgIGlmICh3YXNMb2NrZWQpCisgICAgICAgIG1fd2ViVmlldy0+ZGlkTG9zZVBvaW50ZXJM
b2NrKCk7Cit9CisKIHZvaWQgVGVzdFJ1bm5lcjo6c2hvd0RldlRvb2xzKCkKIHsKICAgICBtX2Rl
bGVnYXRlLT5zaG93RGV2VG9vbHMoKTsKQEAgLTg4MCw3ICs5NDMsNyBAQCB2b2lkIFRlc3RSdW5u
ZXI6OmxvY2F0aW9uQ2hhbmdlRG9uZSgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6d2luZG93Q291bnQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewotICAgIHJlc3Vs
dC0+c2V0KHN0YXRpY19jYXN0PGludD4obV9kZWxlZ2F0ZS0+d2luZG93Q291bnQoKSkpOworICAg
IHJlc3VsdC0+c2V0KHN0YXRpY19jYXN0PGludD4obV90ZXN0SW50ZXJmYWNlcy0+d2luZG93TGlz
dCgpLnNpemUoKSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldENsb3NlUmVtYWluaW5nV2lu
ZG93c1doZW5Db21wbGV0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQpAQCAtMTUxMSwxMCArMTU3NCwxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNl
dE1vY2tEZXZpY2VPcmllbnRhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVgogICAgIGlmIChhcmd1bWVudHNbNF0udG9Cb29sZWFuKCkpCiAgICAgICAgIG9yaWVudGF0
aW9uLnNldEdhbW1hKGFyZ3VtZW50c1s1XS50b0RvdWJsZSgpKTsKIAotICAgIC8vIE5vdGUgdGhh
dCB3ZSBvbmx5IGNhbGwgc2V0T3JpZW50YXRpb24gb24gdGhlIG1haW4gcGFnZSdzIG1vY2sgc2lu
Y2UgdGhpcyBpcyBhbGwgdGhhdCB0aGUKLSAgICAvLyB0ZXN0cyByZXF1aXJlLiBJZiBuZWNlc3Nh
cnksIHdlIGNvdWxkIGdldCBhIGxpc3Qgb2YgV2ViVmlld0hvc3RzIGZyb20gdGhlIFRlc3RTaGVs
bCBhbmQKKyAgICAvLyBOb3RlIHRoYXQgd2Ugb25seSBjYWxsIHNldE9yaWVudGF0aW9uIG9uIHRo
ZSBtYWluIHBhZ2UncyBtb2NrIHNpbmNlIHRoaXMKKyAgICAvLyB0ZXN0cyByZXF1aXJlLiBJZiBu
ZWNlc3NhcnksIHdlIGNvdWxkIGdldCBhIGxpc3Qgb2YgV2ViVmlld0hvc3RzIGZyb20gdGgKICAg
ICAvLyBjYWxsIHNldE9yaWVudGF0aW9uIG9uIGVhY2ggRGV2aWNlT3JpZW50YXRpb25DbGllbnRN
b2NrLgotICAgIG1fZGVsZWdhdGUtPnNldERldmljZU9yaWVudGF0aW9uKG9yaWVudGF0aW9uKTsK
KyAgICBtX3Byb3h5LT5kZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2soKS0+c2V0T3JpZW50YXRp
b24ob3JpZW50YXRpb24pOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0
RW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQpAQCAtMTc1OSw3ICsxODIyLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRQT1NJWExvY2Fs
ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmUKIAogdm9p
ZCBUZXN0UnVubmVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQog
ewotICAgIHJlc3VsdC0+c2V0KG1fZGVsZWdhdGUtPm51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RzKCkpOworICAgIHJlc3VsdC0+c2V0KG1fcHJveHktPmdlb2xvY2F0
aW9uQ2xpZW50TW9jaygpLT5udW1iZXJPZlBlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMoKSk7CiB9
CiAKIC8vIEZJWE1FOiBGb3IgZ3JlYXRlciB0ZXN0IGZsZXhpYmlsaXR5LCB3ZSBzaG91bGQgYmUg
YWJsZSB0byBzZXQgZWFjaCBwYWdlJ3MgZ2VvbG9jYXRpb24gbW9jayBpbmRpdmlkdWFsbHkuCkBA
IC0xNzY5LDcgKzE4MzIsOSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlz
c2lvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVgogICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBd
LmlzQm9vbCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0R2VvbG9jYXRp
b25QZXJtaXNzaW9uKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7CisgICAgY29uc3QgdmVjdG9y
PFdlYlRlc3RQcm94eUJhc2UqPiYgd2luZG93TGlzdCA9IG1fdGVzdEludGVyZmFjZXMtPndpbmRv
d0xpc3QoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXplKCk7
ICsraSkKKyAgICAgICAgd2luZG93TGlzdC5hdChpKS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCkt
PnNldFBlcm1pc3Npb24oYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpAQCAtMTc3Nyw3ICsxODQyLDkgQEAgdm9p
ZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3AKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA8IDMgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVu
dHNbMV0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzJdLmlzTnVtYmVyKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBtX2RlbGVnYXRlLT5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihhcmd1bWVu
dHNbMF0udG9Eb3VibGUoKSwgYXJndW1lbnRzWzFdLnRvRG91YmxlKCksIGFyZ3VtZW50c1syXS50
b0RvdWJsZSgpKTsKKyAgICBjb25zdCB2ZWN0b3I8V2ViVGVzdFByb3h5QmFzZSo+JiB3aW5kb3dM
aXN0ID0gbV90ZXN0SW50ZXJmYWNlcy0+d2luZG93TGlzdCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB3aW5kb3dMaXN0LnNpemUoKTsgKytpKQorICAgICAgICB3aW5kb3dMaXN0LmF0
KGkpLT5nZW9sb2NhdGlvbkNsaWVudE1vY2soKS0+c2V0UG9zaXRpb24oYXJndW1lbnRzWzBdLnRv
RG91YmxlKCksIGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpLCBhcmd1bWVudHNbMl0udG9Eb3VibGUo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2
YWlsYWJsZUVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCkBAIC0xNzg1LDcgKzE4NTIsOSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihjb25zdCBDcHBBcmd1bWVudExpcwog
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwg
IWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9kZWxlZ2F0
ZS0+c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKGFyZ3VtZW50c1sw
XS50b1N0cmluZygpKTsKKyAgICBjb25zdCB2ZWN0b3I8V2ViVGVzdFByb3h5QmFzZSo+JiB3aW5k
b3dMaXN0ID0gbV90ZXN0SW50ZXJmYWNlcy0+d2luZG93TGlzdCgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB3aW5kb3dMaXN0LnNpemUoKTsgKytpKQorICAgICAgICB3aW5kb3dMaXN0
LmF0KGkpLT5nZW9sb2NhdGlvbkNsaWVudE1vY2soKS0+c2V0UG9zaXRpb25VbmF2YWlsYWJsZUVy
cm9yKFdlYlN0cmluZzo6ZnJvbVVURjgoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKIH0KIAog
I2lmIEVOQUJMRV9OT1RJRklDQVRJT05TCkBAIC0xODE1LDcgKzE4ODQsOSBAQCB2b2lkIFRlc3RS
dW5uZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVgogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMyB8fCAhYXJndW1lbnRz
WzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNb
Ml0uaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kZWxlZ2F0ZS0+YWRkTW9j
a1NwZWVjaElucHV0UmVzdWx0KGFyZ3VtZW50c1swXS50b1N0cmluZygpLCBhcmd1bWVudHNbMV0u
dG9Eb3VibGUoKSwgYXJndW1lbnRzWzJdLnRvU3RyaW5nKCkpOworI2lmIEVOQUJMRV9JTlBVVF9T
UEVFQ0gKKyAgICBtX3Byb3h5LT5zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrKCktPmFkZE1vY2tS
ZWNvZ25pdGlvblJlc3VsdChXZWJTdHJpbmc6OmZyb21VVEY4KGFyZ3VtZW50c1swXS50b1N0cmlu
ZygpKSwgYXJndW1lbnRzWzFdLnRvRG91YmxlKCksIFdlYlN0cmluZzo6ZnJvbVVURjgoYXJndW1l
bnRzWzJdLnRvU3RyaW5nKCkpKTsKKyNlbmRpZgogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1v
Y2tTcGVlY2hJbnB1dER1bXBSZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCkBAIC0xODI0LDcgKzE4OTUsOSBAQCB2b2lkIFRlc3RSdW5uZXI6
OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcAogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlz
Qm9vbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RlbGVnYXRlLT5zZXRNb2NrU3BlZWNo
SW5wdXREdW1wUmVjdChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOworI2lmIEVOQUJMRV9JTlBV
VF9TUEVFQ0gKKyAgICBtX3Byb3h5LT5zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrKCktPnNldER1
bXBSZWN0KGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7CisjZW5kaWYKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjphZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKQEAgLTE4MzMsNyArMTkwNiw3IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzCiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8
ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fZGVsZWdhdGUtPmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlv
blJlc3VsdChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSwgYXJndW1lbnRzWzFdLnRvRG91YmxlKCkp
OworICAgIG1fcHJveHktPnNwZWVjaFJlY29nbml6ZXJNb2NrKCktPmFkZE1vY2tSZXN1bHQoV2Vi
U3RyaW5nOjpmcm9tVVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSksIGFyZ3VtZW50c1sxXS50
b0RvdWJsZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoUmVjb2duaXRp
b25FcnJvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQpAQCAtMTg0MiwxMiArMTkxNSwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tTcGVl
Y2hSZWNvZ25pdGlvbkVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLAogICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8
ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kZWxl
Z2F0ZS0+c2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IoYXJndW1lbnRzWzBdLnRvU3RyaW5n
KCksIGFyZ3VtZW50c1sxXS50b1N0cmluZygpKTsKKyAgICBtX3Byb3h5LT5zcGVlY2hSZWNvZ25p
emVyTW9jaygpLT5zZXRFcnJvcihXZWJTdHJpbmc6OmZyb21VVEY4KGFyZ3VtZW50c1swXS50b1N0
cmluZygpKSwgV2ViU3RyaW5nOjpmcm9tVVRGOChhcmd1bWVudHNbMV0udG9TdHJpbmcoKSkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6Ondhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewotICAgIHJlc3VsdC0+
c2V0KG1fZGVsZWdhdGUtPndhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoKSk7CisgICAg
cmVzdWx0LT5zZXQobV9wcm94eS0+c3BlZWNoUmVjb2duaXplck1vY2soKS0+d2FzQWJvcnRlZCgp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCkBAIC0yMDI1LDMxICsyMDk4LDMxIEBAIHZv
aWQgVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCogcmVzdWx0KQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpZEFjcXVpcmVQb2ludGVyTG9j
ayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgbV9k
ZWxlZ2F0ZS0+ZGlkQWNxdWlyZVBvaW50ZXJMb2NrKCk7CisgICAgZGlkQWNxdWlyZVBvaW50ZXJM
b2NrSW50ZXJuYWwoKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpkaWROb3RBY3F1aXJlUG9pbnRlckxvY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCogcmVzdWx0KQogewotICAgIG1fZGVsZWdhdGUtPmRpZE5vdEFjcXVpcmVQb2ludGVy
TG9jaygpOworICAgIGRpZE5vdEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKCk7CiAgICAgcmVz
dWx0LT5zZXROdWxsKCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlkTG9zZVBvaW50ZXJMb2Nr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICBtX2Rl
bGVnYXRlLT5kaWRMb3NlUG9pbnRlckxvY2soKTsKKyAgICBkaWRMb3NlUG9pbnRlckxvY2tJbnRl
cm5hbCgpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luY2hyb25vdXNseShjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0UG9pbnRlckxv
Y2tXaWxsUmVzcG9uZEFzeW5jaHJvbm91c2x5KCk7CisgICAgbV9wb2ludGVyTG9ja1BsYW5uZWRS
ZXN1bHQgPSBQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmM7CiAgICAgcmVzdWx0LT5zZXROdWxs
KCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UG9pbnRlckxvY2tXaWxsRmFpbFN5bmNocm9u
b3VzbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewotICAg
IG1fZGVsZWdhdGUtPnNldFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jaHJvbm91c2x5KCk7CisgICAg
bV9wb2ludGVyTG9ja1BsYW5uZWRSZXN1bHQgPSBQb2ludGVyTG9ja1dpbGxGYWlsU3luYzsKICAg
ICByZXN1bHQtPnNldE51bGwoKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oCmluZGV4IDQ2Mjc5NGFm
N2QzMjlmYjg3MDU0ZjhhZGE0YTE3MzcwOWE3NmI0NGUuLmZiNjVmMTdjZjA3ODcxYTA1MzljODU3
ZmFlNzQ3ODEyNjdkYjBkM2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmgKQEAgLTU1LDEzICs1NSwxNCBA
QCBjbGFzcyBXZWJWaWV3OwogbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewogCiBjbGFzcyBOb3Rp
ZmljYXRpb25QcmVzZW50ZXI7CitjbGFzcyBUZXN0SW50ZXJmYWNlczsKIGNsYXNzIFdlYlBlcm1p
c3Npb25zOwogY2xhc3MgV2ViVGVzdERlbGVnYXRlOwogY2xhc3MgV2ViVGVzdFByb3h5QmFzZTsK
IAogY2xhc3MgVGVzdFJ1bm5lciA6IHB1YmxpYyBXZWJUZXN0UnVubmVyLCBwdWJsaWMgQ3BwQm91
bmRDbGFzcyB7CiBwdWJsaWM6Ci0gICAgVGVzdFJ1bm5lcigpOworICAgIGV4cGxpY2l0IFRlc3RS
dW5uZXIoVGVzdEludGVyZmFjZXMqKTsKICAgICB2aXJ0dWFsIH5UZXN0UnVubmVyKCk7CiAKICAg
ICB2b2lkIHNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSopOwpAQCAtMTIyLDYgKzEyMyw5IEBA
IHB1YmxpYzoKICNpZiBFTkFCTEVfTk9USUZJQ0FUSU9OUwogICAgIFdlYktpdDo6V2ViTm90aWZp
Y2F0aW9uUHJlc2VudGVyKiBub3RpZmljYXRpb25QcmVzZW50ZXIoKSBjb25zdDsKICNlbmRpZgor
ICAgIGJvb2wgcmVxdWVzdFBvaW50ZXJMb2NrKCk7CisgICAgdm9pZCByZXF1ZXN0UG9pbnRlclVu
bG9jaygpOworICAgIGJvb2wgaXNQb2ludGVyTG9ja2VkKCk7CiAKICAgICAvLyBBIHNpbmdsZSBp
dGVtIGluIHRoZSB3b3JrIHF1ZXVlLgogICAgIGNsYXNzIFdvcmtJdGVtIHsKQEAgLTUwMiw2ICs1
MDYsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1f
b2JqZWN0LT5jb21wbGV0ZU5vdGlmeURvbmUodHJ1ZSk7IH0KICAgICB9OwogCisgICAgY2xhc3Mg
SG9zdE1ldGhvZFRhc2sgOiBwdWJsaWMgV2ViTWV0aG9kVGFzazxUZXN0UnVubmVyPiB7CisgICAg
cHVibGljOgorICAgICAgICB0eXBlZGVmIHZvaWQgKFRlc3RSdW5uZXI6OipDYWxsYmFja01ldGhv
ZFR5cGUpKCk7CisgICAgICAgIEhvc3RNZXRob2RUYXNrKFRlc3RSdW5uZXIqIG9iamVjdCwgQ2Fs
bGJhY2tNZXRob2RUeXBlIGNhbGxiYWNrKQorICAgICAgICAgICAgOiBXZWJNZXRob2RUYXNrPFRl
c3RSdW5uZXI+KG9iamVjdCkKKyAgICAgICAgICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAg
ICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IChtX29iamVj
dC0+Km1fY2FsbGJhY2spKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENhbGxiYWNrTWV0
aG9kVHlwZSBtX2NhbGxiYWNrOworICAgIH07CisgICAgdm9pZCBkaWRBY3F1aXJlUG9pbnRlckxv
Y2tJbnRlcm5hbCgpOworICAgIHZvaWQgZGlkTm90QWNxdWlyZVBvaW50ZXJMb2NrSW50ZXJuYWwo
KTsKKyAgICB2b2lkIGRpZExvc2VQb2ludGVyTG9ja0ludGVybmFsKCk7CisKICAgICBib29sIGVs
ZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChjb25zdCBXZWJLaXQ6OldlYlN0
cmluZyYpOwogICAgIGJvb2wgY3BwVmFyaWFudFRvQm9vbChjb25zdCBDcHBWYXJpYW50Jik7CiAg
ICAgaW50MzJfdCBjcHBWYXJpYW50VG9JbnQzMihjb25zdCBDcHBWYXJpYW50Jik7CkBAIC02NjAs
NiArNjgxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBVc2VkIGZvciB0ZXN0IHRpbWVvdXRzLgogICAg
IFdlYlRhc2tMaXN0IG1fdGFza0xpc3Q7CiAKKyAgICBUZXN0SW50ZXJmYWNlcyogbV90ZXN0SW50
ZXJmYWNlczsKICAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7CiAgICAgV2ViS2l0OjpX
ZWJWaWV3KiBtX3dlYlZpZXc7CiAgICAgV2ViVGVzdFByb3h5QmFzZSogbV9wcm94eTsKQEAgLTY3
Myw2ICs2OTUsMTMgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEVfTk9USUZJQ0FUSU9OUwogICAgIHN0
ZDo6YXV0b19wdHI8Tm90aWZpY2F0aW9uUHJlc2VudGVyPiBtX25vdGlmaWNhdGlvblByZXNlbnRl
cjsKICNlbmRpZgorCisgICAgYm9vbCBtX3BvaW50ZXJMb2NrZWQ7CisgICAgZW51bSB7CisgICAg
ICAgIFBvaW50ZXJMb2NrV2lsbFN1Y2NlZWQsCisgICAgICAgIFBvaW50ZXJMb2NrV2lsbFJlc3Bv
bmRBc3luYywKKyAgICAgICAgUG9pbnRlckxvY2tXaWxsRmFpbFN5bmMsCisgICAgfSBtX3BvaW50
ZXJMb2NrUGxhbm5lZFJlc3VsdDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RQcm94eS5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0UHJveHkuY3BwCmlu
ZGV4IDcwZDM5MjNiY2RhMTljYjJmMmZjZTE3MDUxNTgwYWM1N2I4ZDYyZmMuLmQ0NWIzMzcwMzhh
NTc3Mjg5YjYxZTc0NjRhZTc2ZGNjMDFiMmEyNjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RQcm94eS5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFByb3h5LmNw
cApAQCAtMzMsNiArMzMsOCBAQAogCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgiCisjaW5jbHVkZSAiTW9ja1dlYlNw
ZWVjaElucHV0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hSZWNvZ25pemVy
LmgiCiAjaW5jbHVkZSAiU3BlbGxDaGVja0NsaWVudC5oIgogI2luY2x1ZGUgIlRlc3RDb21tb24u
aCIKICNpbmNsdWRlICJUZXN0SW50ZXJmYWNlcy5oIgpAQCAtNDMsOSArNDUsMTEgQEAKICNpbmNs
dWRlICJXZWJDYWNoZWRVUkxSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV2ViQ29uc29sZU1lc3NhZ2Uu
aCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlLmgiCisjaW5jbHVkZSAiV2ViRGV2aWNlT3JpZW50
YXRpb25DbGllbnRNb2NrLmgiCiAjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRlICJX
ZWJFbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJHZW9sb2Nh
dGlvbkNsaWVudE1vY2suaCIKICNpbmNsdWRlICJXZWJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUg
IldlYk5vZGUuaCIKICNpbmNsdWRlICJXZWJQbHVnaW5QYXJhbXMuaCIKQEAgLTM5NiwxMCArNDAw
LDkgQEAgdm9pZCBkdW1wQmFja0ZvcndhcmRMaXN0KGNvbnN0IFdlYlZlY3RvcjxXZWJIaXN0b3J5
SXRlbT4mIGhpc3RvcnksIHNpemVfdCBjdXJyZW4KICAgICByZXN1bHQuYXBwZW5kKCI9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiB9CiAKLXN0cmlu
ZyBkdW1wQWxsQmFja0ZvcndhcmRMaXN0cyhXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKQorc3Ry
aW5nIGR1bXBBbGxCYWNrRm9yd2FyZExpc3RzKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUsIHVu
c2lnbmVkIHdpbmRvd0NvdW50KQogewogICAgIHN0cmluZyByZXN1bHQ7Ci0gICAgdW5zaWduZWQg
d2luZG93Q291bnQgPSBkZWxlZ2F0ZS0+d2luZG93Q291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgd2luZG93Q291bnQ7ICsraSkgewogICAgICAgICBzaXplX3QgY3VycmVudEVu
dHJ5SW5kZXggPSAwOwogICAgICAgICBXZWJWZWN0b3I8V2ViSGlzdG9yeUl0ZW0+IGhpc3Rvcnk7
CkBAIC00MjEsMTcgKzQyNCwyNSBAQCBXZWJUZXN0UHJveHlCYXNlOjpXZWJUZXN0UHJveHlCYXNl
KCkKIAogV2ViVGVzdFByb3h5QmFzZTo6fldlYlRlc3RQcm94eUJhc2UoKQogeworICAgIG1fdGVz
dEludGVyZmFjZXMtPndpbmRvd0Nsb3NlZCh0aGlzKTsKIH0KIAogdm9pZCBXZWJUZXN0UHJveHlC
YXNlOjpzZXRJbnRlcmZhY2VzKFdlYlRlc3RJbnRlcmZhY2VzKiBpbnRlcmZhY2VzKQogewogICAg
IG1fdGVzdEludGVyZmFjZXMgPSBpbnRlcmZhY2VzLT50ZXN0SW50ZXJmYWNlcygpOworICAgIG1f
dGVzdEludGVyZmFjZXMtPndpbmRvd09wZW5lZCh0aGlzKTsKIH0KIAogdm9pZCBXZWJUZXN0UHJv
eHlCYXNlOjpzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKQogewogICAgIG1f
ZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKICAgICBtX3NwZWxsY2hlY2stPnNldERlbGVnYXRlKGRlbGVn
YXRlKTsKKyNpZiBFTkFCTEVfSU5QVVRfU1BFRUNICisgICAgaWYgKG1fc3BlZWNoSW5wdXRDb250
cm9sbGVyLmdldCgpKQorICAgICAgICBtX3NwZWVjaElucHV0Q29udHJvbGxlci0+c2V0RGVsZWdh
dGUoZGVsZWdhdGUpOworI2VuZGlmCisgICAgaWYgKG1fc3BlZWNoUmVjb2duaXplci5nZXQoKSkK
KyAgICAgICAgbV9zcGVlY2hSZWNvZ25pemVyLT5zZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7CiB9CiAK
IHZvaWQgV2ViVGVzdFByb3h5QmFzZTo6cmVzZXQoKQpAQCAtNDQxLDYgKzQ1MiwxMiBAQCB2b2lk
IFdlYlRlc3RQcm94eUJhc2U6OnJlc2V0KCkKICAgICBtX2lzUGFpbnRpbmcgPSBmYWxzZTsKICAg
ICBtX3Jlc291cmNlSWRlbnRpZmllck1hcC5jbGVhcigpOwogICAgIG1fbG9nQ29uc29sZU91dHB1
dCA9IHRydWU7CisgICAgaWYgKG1fZ2VvbG9jYXRpb25DbGllbnQuZ2V0KCkpCisgICAgICAgIG1f
Z2VvbG9jYXRpb25DbGllbnQtPnJlc2V0TW9jaygpOworI2lmIEVOQUJMRV9JTlBVVF9TUEVFQ0gK
KyAgICBpZiAobV9zcGVlY2hJbnB1dENvbnRyb2xsZXIuZ2V0KCkpCisgICAgICAgIG1fc3BlZWNo
SW5wdXRDb250cm9sbGVyLT5jbGVhclJlc3VsdHMoKTsKKyNlbmRpZgogfQogCiBXZWJTcGVsbENo
ZWNrQ2xpZW50KiBXZWJUZXN0UHJveHlCYXNlOjpzcGVsbENoZWNrQ2xpZW50KCkgY29uc3QKQEAg
LTQ3MSw3ICs0ODgsNyBAQCBzdHJpbmcgV2ViVGVzdFByb3h5QmFzZTo6Y2FwdHVyZVRyZWUoYm9v
bCBkZWJ1Z1JlbmRlclRyZWUpCiAgICAgfQogCiAgICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEJhY2tGb3J3YXJkTGlzdCgpKQotICAgICAgICBkYXRhVXRm
OCArPSBkdW1wQWxsQmFja0ZvcndhcmRMaXN0cyhtX2RlbGVnYXRlKTsKKyAgICAgICAgZGF0YVV0
ZjggKz0gZHVtcEFsbEJhY2tGb3J3YXJkTGlzdHMobV9kZWxlZ2F0ZSwgbV90ZXN0SW50ZXJmYWNl
cy0+d2luZG93TGlzdCgpLnNpemUoKSk7CiAKICAgICByZXR1cm4gZGF0YVV0Zjg7CiB9CkBAIC02
MzQsNiArNjUxLDM3IEBAIHZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlzY2FyZEJhY2tpbmdTdG9y
ZSgpCiAgICAgbV9jYW52YXMucmVzZXQoKTsKIH0KIAorV2ViR2VvbG9jYXRpb25DbGllbnRNb2Nr
KiBXZWJUZXN0UHJveHlCYXNlOjpnZW9sb2NhdGlvbkNsaWVudE1vY2soKQoreworICAgIGlmICgh
bV9nZW9sb2NhdGlvbkNsaWVudC5nZXQoKSkKKyAgICAgICAgbV9nZW9sb2NhdGlvbkNsaWVudC5y
ZXNldChXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2s6OmNyZWF0ZSgpKTsKKyAgICByZXR1cm4gbV9n
ZW9sb2NhdGlvbkNsaWVudC5nZXQoKTsKK30KKworV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRN
b2NrKiBXZWJUZXN0UHJveHlCYXNlOjpkZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2soKQorewor
ICAgIGlmICghbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudC5nZXQoKSkKKyAgICAgICAgbV9kZXZp
Y2VPcmllbnRhdGlvbkNsaWVudC5yZXNldChXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2s6
OmNyZWF0ZSgpKTsKKyAgICByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudC5nZXQoKTsK
K30KKworI2lmIEVOQUJMRV9JTlBVVF9TUEVFQ0gKK01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXIqIFdlYlRlc3RQcm94eUJhc2U6OnNwZWVjaElucHV0Q29udHJvbGxlck1vY2soKQoreworICAg
IFdFQktJVF9BU1NFUlQobV9zcGVlY2hJbnB1dENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHJldHVy
biBtX3NwZWVjaElucHV0Q29udHJvbGxlci5nZXQoKTsKK30KKyNlbmRpZgorCitNb2NrV2ViU3Bl
ZWNoUmVjb2duaXplciogV2ViVGVzdFByb3h5QmFzZTo6c3BlZWNoUmVjb2duaXplck1vY2soKQor
eworICAgIGlmICghbV9zcGVlY2hSZWNvZ25pemVyLmdldCgpKSB7CisgICAgICAgIG1fc3BlZWNo
UmVjb2duaXplci5yZXNldChuZXcgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIoKSk7CisgICAgICAg
IG1fc3BlZWNoUmVjb2duaXplci0+c2V0RGVsZWdhdGUobV9kZWxlZ2F0ZSk7CisgICAgfQorICAg
IHJldHVybiBtX3NwZWVjaFJlY29nbml6ZXIuZ2V0KCk7Cit9CisKIHZvaWQgV2ViVGVzdFByb3h5
QmFzZTo6ZGlkSW52YWxpZGF0ZVJlY3QoY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsKICAgICAvLyBt
X3BhaW50UmVjdCA9IG1fcGFpbnRSZWN0IFUgcmVjdApAQCAtOTU0LDYgKzEwMDIsNTAgQEAgV2Vi
Tm90aWZpY2F0aW9uUHJlc2VudGVyKiBXZWJUZXN0UHJveHlCYXNlOjpub3RpZmljYXRpb25QcmVz
ZW50ZXIoKQogI2VuZGlmCiB9CiAKK1dlYkdlb2xvY2F0aW9uQ2xpZW50KiBXZWJUZXN0UHJveHlC
YXNlOjpnZW9sb2NhdGlvbkNsaWVudCgpCit7CisgICAgcmV0dXJuIGdlb2xvY2F0aW9uQ2xpZW50
TW9jaygpOworfQorCitXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIFdlYlRlc3RQcm94eUJhc2U6
OnNwZWVjaElucHV0Q29udHJvbGxlcihXZWJTcGVlY2hJbnB1dExpc3RlbmVyKiBsaXN0ZW5lcikK
K3sKKyNpZiBFTkFCTEVfSU5QVVRfU1BFRUNICisgICAgaWYgKCFtX3NwZWVjaElucHV0Q29udHJv
bGxlci5nZXQoKSkgeworICAgICAgICBtX3NwZWVjaElucHV0Q29udHJvbGxlci5yZXNldChuZXcg
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcihsaXN0ZW5lcikpOworICAgICAgICBtX3NwZWVj
aElucHV0Q29udHJvbGxlci0+c2V0RGVsZWdhdGUobV9kZWxlZ2F0ZSk7CisgICAgfQorICAgIHJl
dHVybiBtX3NwZWVjaElucHV0Q29udHJvbGxlci5nZXQoKTsKKyNlbHNlCisgICAgV0VCS0lUX0FT
U0VSVChsaXN0ZW5lcik7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworV2ViU3BlZWNoUmVj
b2duaXplciogV2ViVGVzdFByb3h5QmFzZTo6c3BlZWNoUmVjb2duaXplcigpCit7CisgICAgcmV0
dXJuIHNwZWVjaFJlY29nbml6ZXJNb2NrKCk7Cit9CisKK1dlYkRldmljZU9yaWVudGF0aW9uQ2xp
ZW50KiBXZWJUZXN0UHJveHlCYXNlOjpkZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpCit7CisgICAg
cmV0dXJuIGRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jaygpOworfQorCitib29sIFdlYlRlc3RQ
cm94eUJhc2U6OnJlcXVlc3RQb2ludGVyTG9jaygpCit7CisgICAgcmV0dXJuIG1fdGVzdEludGVy
ZmFjZXMtPnRlc3RSdW5uZXIoKS0+cmVxdWVzdFBvaW50ZXJMb2NrKCk7Cit9CisKK3ZvaWQgV2Vi
VGVzdFByb3h5QmFzZTo6cmVxdWVzdFBvaW50ZXJVbmxvY2soKQoreworICAgIG1fdGVzdEludGVy
ZmFjZXMtPnRlc3RSdW5uZXIoKS0+cmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKK30KKworYm9vbCBX
ZWJUZXN0UHJveHlCYXNlOjppc1BvaW50ZXJMb2NrZWQoKQoreworICAgIHJldHVybiBtX3Rlc3RJ
bnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPmlzUG9pbnRlckxvY2tlZCgpOworfQorCiB2b2lkIFdl
YlRlc3RQcm94eUJhc2U6OndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2ViRnJhbWUqIGZyYW1l
LCBjb25zdCBXZWJVUkwmLCBjb25zdCBXZWJVUkwmIHRvLCBkb3VibGUsIGRvdWJsZSkKIHsKICAg
ICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlZpZXdIb3N0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdI
b3N0LmNwcAppbmRleCBjNGM5NjJkYmY5YzYzZTg0YThjNDNkNzUxODFlOTVjZGQ4YzI3MWFjLi5i
NDM5NDgzNjU1MDE0ZjAxMjVhNTM5YWE3M2RkOWUxMTUyYzFkNzhhIDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCkBAIC0zMiw4ICszMiw2IEBACiAj
aW5jbHVkZSAiV2ViVmlld0hvc3QuaCIKIAogI2luY2x1ZGUgIkRSVERldlRvb2xzQWdlbnQuaCIK
LSNpbmNsdWRlICJNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiTW9j
a1dlYlNwZWVjaFJlY29nbml6ZXIuaCIKICNpbmNsdWRlICJUYXNrLmgiCiAjaW5jbHVkZSAiVGVz
dE5hdmlnYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCkBAIC00Miwx
MSArNDAsOSBAQAogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51RGF0YS5oIgogI2luY2x1ZGUgIldl
YkRPTU1lc3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIKLSNpbmNsdWRl
ICJXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suaCIKICNpbmNsdWRlICJXZWJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIldlYkVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2lu
Y2x1ZGUgIldlYkdlb2xvY2F0aW9uQ2xpZW50TW9jay5oIgogI2luY2x1ZGUgIldlYkhpc3RvcnlJ
dGVtLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAjaW5jbHVkZSAiV2ViTm9kZS5oIgpAQCAtMjY5
LDQ4ICsyNjUsNiBAQCBpbnQgV2ViVmlld0hvc3Q6Omhpc3RvcnlGb3J3YXJkTGlzdENvdW50KCkK
ICAgICByZXR1cm4gbmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+ZW50cnlDb3VudCgpIC0gY3VycmVu
dEluZGV4IC0gMTsKIH0KIAotV2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudCogV2ViVmlld0hv
c3Q6Omdlb2xvY2F0aW9uQ2xpZW50KCkKLXsKLSAgICByZXR1cm4gZ2VvbG9jYXRpb25DbGllbnRN
b2NrKCk7Ci19Ci0KLVdlYktpdDo6V2ViR2VvbG9jYXRpb25DbGllbnRNb2NrKiBXZWJWaWV3SG9z
dDo6Z2VvbG9jYXRpb25DbGllbnRNb2NrKCkKLXsKLSAgICBpZiAoIW1fZ2VvbG9jYXRpb25DbGll
bnRNb2NrKQotICAgICAgICBtX2dlb2xvY2F0aW9uQ2xpZW50TW9jayA9IGFkb3B0UHRyKFdlYkdl
b2xvY2F0aW9uQ2xpZW50TW9jazo6Y3JlYXRlKCkpOwotICAgIHJldHVybiBtX2dlb2xvY2F0aW9u
Q2xpZW50TW9jay5nZXQoKTsKLX0KLQotI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi1XZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXIqIFdlYlZpZXdIb3N0OjpzcGVlY2hJbnB1dENvbnRyb2xsZXIoV2Vi
S2l0OjpXZWJTcGVlY2hJbnB1dExpc3RlbmVyKiBsaXN0ZW5lcikKLXsKLSAgICBpZiAoIW1fc3Bl
ZWNoSW5wdXRDb250cm9sbGVyTW9jaykKLSAgICAgICAgbV9zcGVlY2hJbnB1dENvbnRyb2xsZXJN
b2NrID0gTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6Y3JlYXRlKGxpc3RlbmVyKTsKLSAg
ICByZXR1cm4gbV9zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrLmdldCgpOwotfQotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQotV2ViU3BlZWNoUmVjb2duaXplciogV2ViVmll
d0hvc3Q6OnNwZWVjaFJlY29nbml6ZXIoKQotewotICAgIGlmICghbV9tb2NrU3BlZWNoUmVjb2du
aXplcikKLSAgICAgICAgbV9tb2NrU3BlZWNoUmVjb2duaXplciA9IE1vY2tXZWJTcGVlY2hSZWNv
Z25pemVyOjpjcmVhdGUoKTsKLSAgICByZXR1cm4gbV9tb2NrU3BlZWNoUmVjb2duaXplci5nZXQo
KTsKLX0KLSNlbmRpZgotCi1XZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2sqIFdlYlZpZXdI
b3N0OjpkZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2soKQotewotICAgIGlmICghbV9kZXZpY2VP
cmllbnRhdGlvbkNsaWVudE1vY2suZ2V0KCkpCi0gICAgICAgIG1fZGV2aWNlT3JpZW50YXRpb25D
bGllbnRNb2NrID0gYWRvcHRQdHIoV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrOjpjcmVh
dGUoKSk7Ci0gICAgcmV0dXJuIG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmdldCgpOwot
fQotCi1XZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudCogV2ViVmlld0hvc3Q6OmRldmljZU9yaWVu
dGF0aW9uQ2xpZW50KCkKLXsKLSAgICByZXR1cm4gZGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2Nr
KCk7Ci19Ci0KIC8vIFdlYldpZGdldENsaWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIFdlYlZpZXdIb3N0OjpkaWRB
dXRvUmVzaXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCkBAIC0zNjMsNjMgKzMxNyw2IEBAIFdl
YlNjcmVlbkluZm8gV2ViVmlld0hvc3Q6OnNjcmVlbkluZm8oKQogICAgIHJldHVybiBpbmZvOwog
fQogCi0jaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKLWJvb2wgV2ViVmlld0hvc3Q6OnJlcXVlc3RQ
b2ludGVyTG9jaygpCi17Ci0gICAgc3dpdGNoIChtX3BvaW50ZXJMb2NrUGxhbm5lZFJlc3VsdCkg
ewotICAgIGNhc2UgUG9pbnRlckxvY2tXaWxsU3VjY2VlZDoKLSAgICAgICAgcG9zdERlbGF5ZWRU
YXNrKG5ldyBIb3N0TWV0aG9kVGFzayh0aGlzLCAmV2ViVmlld0hvc3Q6OmRpZEFjcXVpcmVQb2lu
dGVyTG9jayksIDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFBvaW50ZXJMb2Nr
V2lsbFJlc3BvbmRBc3luYzoKLSAgICAgICAgQVNTRVJUKCFtX3BvaW50ZXJMb2NrZWQpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jOgotICAg
ICAgICBBU1NFUlQoIW1fcG9pbnRlckxvY2tlZCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6cmVxdWVzdFBvaW50ZXJVbmxv
Y2soKQotewotICAgIHBvc3REZWxheWVkVGFzayhuZXcgSG9zdE1ldGhvZFRhc2sodGhpcywgJldl
YlZpZXdIb3N0OjpkaWRMb3NlUG9pbnRlckxvY2spLCAwKTsKLX0KLQotYm9vbCBXZWJWaWV3SG9z
dDo6aXNQb2ludGVyTG9ja2VkKCkKLXsKLSAgICByZXR1cm4gbV9wb2ludGVyTG9ja2VkOwotfQot
Ci12b2lkIFdlYlZpZXdIb3N0OjpkaWRBY3F1aXJlUG9pbnRlckxvY2soKQotewotICAgIG1fcG9p
bnRlckxvY2tlZCA9IHRydWU7Ci0gICAgd2ViV2lkZ2V0KCktPmRpZEFjcXVpcmVQb2ludGVyTG9j
aygpOwotCi0gICAgLy8gUmVzZXQgcGxhbm5lZCByZXN1bHQgdG8gZGVmYXVsdC4KLSAgICBtX3Bv
aW50ZXJMb2NrUGxhbm5lZFJlc3VsdCA9IFBvaW50ZXJMb2NrV2lsbFN1Y2NlZWQ7Ci19Ci0KLXZv
aWQgV2ViVmlld0hvc3Q6OmRpZE5vdEFjcXVpcmVQb2ludGVyTG9jaygpCi17Ci0gICAgQVNTRVJU
KCFtX3BvaW50ZXJMb2NrZWQpOwotICAgIG1fcG9pbnRlckxvY2tlZCA9IGZhbHNlOwotICAgIHdl
YldpZGdldCgpLT5kaWROb3RBY3F1aXJlUG9pbnRlckxvY2soKTsKLQotICAgIC8vIFJlc2V0IHBs
YW5uZWQgcmVzdWx0IHRvIGRlZmF1bHQuCi0gICAgbV9wb2ludGVyTG9ja1BsYW5uZWRSZXN1bHQg
PSBQb2ludGVyTG9ja1dpbGxTdWNjZWVkOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpkaWRMb3Nl
UG9pbnRlckxvY2soKQotewotICAgIGJvb2wgd2FzTG9ja2VkID0gbV9wb2ludGVyTG9ja2VkOwot
ICAgIG1fcG9pbnRlckxvY2tlZCA9IGZhbHNlOwotICAgIGlmICh3YXNMb2NrZWQpCi0gICAgICAg
IHdlYldpZGdldCgpLT5kaWRMb3NlUG9pbnRlckxvY2soKTsKLX0KLSNlbmRpZgotCiB2b2lkIFdl
YlZpZXdIb3N0OjpzaG93KFdlYk5hdmlnYXRpb25Qb2xpY3kpCiB7CiAgICAgbV9oYXNXaW5kb3cg
PSB0cnVlOwpAQCAtNzYzLDcxICs2NjAsNiBAQCB2b2lkIFdlYlZpZXdIb3N0OjpzZXRMb2NhbGUo
Y29uc3Qgc3RkOjpzdHJpbmcmIGxvY2FsZSkKICAgICBzZXRsb2NhbGUoTENfQUxMLCBsb2NhbGUu
Y19zdHIoKSk7CiB9CiAKLXZvaWQgV2ViVmlld0hvc3Q6OnNldERldmljZU9yaWVudGF0aW9uKFdl
YktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKQotewotICAgIGRldmljZU9y
aWVudGF0aW9uQ2xpZW50TW9jaygpLT5zZXRPcmllbnRhdGlvbihvcmllbnRhdGlvbik7Ci19Ci0K
LWludCBXZWJWaWV3SG9zdDo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdHMoKQotewotICAgIFZlY3RvcjxXZWJWaWV3SG9zdCo+IHdpbmRvd0xpc3QgPSBtX3NoZWxs
LT53aW5kb3dMaXN0KCk7Ci0gICAgaW50IG51bWJlck9mUmVxdWVzdHMgPSAwOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXplKCk7IGkrKykKLSAgICAgICAgbnVtYmVy
T2ZSZXF1ZXN0cyArPSB3aW5kb3dMaXN0W2ldLT5nZW9sb2NhdGlvbkNsaWVudE1vY2soKS0+bnVt
YmVyT2ZQZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzKCk7Ci0gICAgcmV0dXJuIG51bWJlck9mUmVx
dWVzdHM7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihi
b29sIGFsbG93ZWQpCi17Ci0gICAgVmVjdG9yPFdlYlZpZXdIb3N0Kj4gd2luZG93TGlzdCA9IG1f
c2hlbGwtPndpbmRvd0xpc3QoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdpbmRvd0xp
c3Quc2l6ZSgpOyBpKyspCi0gICAgICAgIHdpbmRvd0xpc3RbaV0tPmdlb2xvY2F0aW9uQ2xpZW50
TW9jaygpLT5zZXRQZXJtaXNzaW9uKGFsbG93ZWQpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0Ojpz
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1
ZGUsIGRvdWJsZSBhY2N1cmFjeSkKLXsKLSAgICBWZWN0b3I8V2ViVmlld0hvc3QqPiB3aW5kb3dM
aXN0ID0gbV9zaGVsbC0+d2luZG93TGlzdCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
d2luZG93TGlzdC5zaXplKCk7IGkrKykKLSAgICAgICAgd2luZG93TGlzdFtpXS0+Z2VvbG9jYXRp
b25DbGllbnRNb2NrKCktPnNldFBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5
KTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2
YWlsYWJsZUVycm9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKQotewotICAgIFZlY3RvcjxX
ZWJWaWV3SG9zdCo+IHdpbmRvd0xpc3QgPSBtX3NoZWxsLT53aW5kb3dMaXN0KCk7Ci0gICAgLy8g
RklYTUU6IEJlbmphbWluCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3aW5kb3dMaXN0LnNp
emUoKTsgaSsrKQotICAgICAgICB3aW5kb3dMaXN0W2ldLT5nZW9sb2NhdGlvbkNsaWVudE1vY2so
KS0+c2V0UG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdlYlN0cmluZzo6ZnJvbVVURjgobWVzc2Fn
ZSkpOwotfQotCi0jaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLXZvaWQgV2ViVmlld0hvc3Q6OmFk
ZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBzdGQ6OnN0cmluZyYgcmVzdWx0LCBkb3VibGUg
Y29uZmlkZW5jZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKQotewotICAgIG1fc3BlZWNo
SW5wdXRDb250cm9sbGVyTW9jay0+YWRkTW9ja1JlY29nbml0aW9uUmVzdWx0KFdlYlN0cmluZzo6
ZnJvbVVURjgocmVzdWx0KSwgY29uZmlkZW5jZSwgV2ViU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFn
ZSkpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChi
b29sIGR1bXBSZWN0KQotewotICAgIG1fc3BlZWNoSW5wdXRDb250cm9sbGVyTW9jay0+c2V0RHVt
cFJlY3QoZHVtcFJlY3QpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNI
KQotdm9pZCBXZWJWaWV3SG9zdDo6YWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KGNvbnN0
IHN0ZDo6c3RyaW5nJiB0cmFuc2NyaXB0LCBkb3VibGUgY29uZmlkZW5jZSkKLXsKLSAgICBtX21v
Y2tTcGVlY2hSZWNvZ25pemVyLT5hZGRNb2NrUmVzdWx0KFdlYlN0cmluZzo6ZnJvbVVURjgodHJh
bnNjcmlwdCksIGNvbmZpZGVuY2UpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpzZXRNb2NrU3Bl
ZWNoUmVjb2duaXRpb25FcnJvcihjb25zdCBzdGQ6OnN0cmluZyYgZXJyb3IsIGNvbnN0IHN0ZDo6
c3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fbW9ja1NwZWVjaFJlY29nbml6ZXItPnNldEVycm9y
KFdlYlN0cmluZzo6ZnJvbVVURjgoZXJyb3IpLCBXZWJTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2Up
KTsKLX0KLQotYm9vbCBXZWJWaWV3SG9zdDo6d2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRl
ZCgpCi17Ci0gICAgcmV0dXJuIG1fbW9ja1NwZWVjaFJlY29nbml6ZXItPndhc0Fib3J0ZWQoKTsK
LX0KLSNlbmRpZgotCiB2b2lkIFdlYlZpZXdIb3N0Ojp0ZXN0RmluaXNoZWQoKQogewogICAgIG1f
c2hlbGwtPnRlc3RGaW5pc2hlZCh0aGlzKTsKQEAgLTg1OCwxMSArNjkwLDYgQEAgaW50IFdlYlZp
ZXdIb3N0OjpuYXZpZ2F0aW9uRW50cnlDb3VudCgpCiAgICAgcmV0dXJuIG1fc2hlbGwtPm5hdmln
YXRpb25FbnRyeUNvdW50KCk7CiB9CiAKLWludCBXZWJWaWV3SG9zdDo6d2luZG93Q291bnQoKQot
ewotICAgIHJldHVybiBtX3NoZWxsLT53aW5kb3dDb3VudCgpOwotfQotCiB2b2lkIFdlYlZpZXdI
b3N0Ojpnb1RvT2Zmc2V0KGludCBvZmZzZXQpCiB7CiAgICAgbV9zaGVsbC0+Z29Ub09mZnNldChv
ZmZzZXQpOwpAQCAtOTcxLDEwICs3OTgsNiBAQCB2b2lkIFdlYlZpZXdIb3N0OjpyZXNldCgpCiAg
ICAgbV9sYXN0UGFnZUlkVXBkYXRlZCA9IC0xOwogICAgIG1faGFzV2luZG93ID0gZmFsc2U7CiAg
ICAgbV9pbk1vZGFsTG9vcCA9IGZhbHNlOwotI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAg
bV9wb2ludGVyTG9ja2VkID0gZmFsc2U7Ci0gICAgbV9wb2ludGVyTG9ja1BsYW5uZWRSZXN1bHQg
PSBQb2ludGVyTG9ja1dpbGxTdWNjZWVkOwotI2VuZGlmCiAKICAgICBtX25hdmlnYXRpb25Db250
cm9sbGVyID0gYWRvcHRQdHIobmV3IFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcih0aGlzKSk7CiAK
QEAgLTk4MiwxNCArODA1LDYgQEAgdm9pZCBXZWJWaWV3SG9zdDo6cmVzZXQoKQogICAgIG1fZWRp
dENvbW1hbmROYW1lLmNsZWFyKCk7CiAgICAgbV9lZGl0Q29tbWFuZFZhbHVlLmNsZWFyKCk7CiAK
LSAgICBpZiAobV9nZW9sb2NhdGlvbkNsaWVudE1vY2suZ2V0KCkpCi0gICAgICAgIG1fZ2VvbG9j
YXRpb25DbGllbnRNb2NrLT5yZXNldE1vY2soKTsKLQotI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gp
Ci0gICAgaWYgKG1fc3BlZWNoSW5wdXRDb250cm9sbGVyTW9jay5nZXQoKSkKLSAgICAgICAgbV9z
cGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrLT5jbGVhclJlc3VsdHMoKTsKLSNlbmRpZgotCiAgICAg
bV9jdXJyZW50Q3Vyc29yID0gV2ViQ3Vyc29ySW5mbygpOwogICAgIG1fd2luZG93UmVjdCA9IFdl
YlJlY3QoKTsKICAgICAvLyBtX3Byb3h5IGlzIG5vdCBzZXQgd2hlbiByZXNldCgpIGlzIGludm9r
ZWQgZnJvbSB0aGUgY29uc3RydWN0b3IuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViVmlld0hvc3QuaAppbmRleCA0ZjljN2M5MjI0MDVmNTA0NmQxOTFlYmRiMGJjMDEyNTZkMWQz
NjlkLi5hYmY2ZDYzZTQ2ZTgzZTExMmFkY2I5MjI5YzRiYjE1MzU4ZjdiMTI3IDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKQEAgLTQ0LDIyICs0NCwxMyBA
QAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAotY2xhc3MgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjsKLWNsYXNzIE1vY2tXZWJT
cGVlY2hSZWNvZ25pemVyOwogY2xhc3MgU2tDYW52YXM7CiBjbGFzcyBUZXN0U2hlbGw7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJEZXZpY2VPcmllbnRh
dGlvbkNsaWVudDsKLWNsYXNzIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jazsKLWNsYXNz
IFdlYkdlb2xvY2F0aW9uQ2xpZW50OwotY2xhc3MgV2ViR2VvbG9jYXRpb25DbGllbnRNb2NrOwot
Y2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlTW9jazsKIGNsYXNzIFdlYlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTsKIGNsYXNzIFdlYlNoYXJlZFdvcmtlckNsaWVudDsKLWNsYXNzIFdlYlNwZWVjaElu
cHV0Q29udHJvbGxlcjsKLWNsYXNzIFdlYlNwZWVjaElucHV0TGlzdGVuZXI7CiBjbGFzcyBXZWJV
Ukw7CiBzdHJ1Y3QgV2ViUmVjdDsKIHN0cnVjdCBXZWJVUkxFcnJvcjsKQEAgLTkyLDE0ICs4Myw2
IEBAIGNsYXNzIFdlYlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVudCwgcHVi
bGljIFdlYktpdDo6V2ViRnJhbWVDbGllbnQsCiAKICAgICB2b2lkIGNsb3NlV2lkZ2V0KCk7CiAK
LSNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotICAgIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXIqIHNwZWVjaElucHV0Q29udHJvbGxlck1vY2soKSB7IHJldHVybiBtX3NwZWVjaElucHV0Q29u
dHJvbGxlck1vY2suZ2V0KCk7IH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVD
SCkKLSAgICBNb2NrV2ViU3BlZWNoUmVjb2duaXplciogbW9ja1NwZWVjaFJlY29nbml6ZXIoKSB7
IHJldHVybiBtX21vY2tTcGVlY2hSZWNvZ25pemVyLmdldCgpOyB9Ci0jZW5kaWYKLQogICAgIC8v
IFdlYlRlc3REZWxlZ2F0ZS4KICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENvbW1hbmQoY29uc3Qg
c3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCB2b2lkIGNsZWFyRWRpdENvbW1hbmQoKSBPVkVSUklERTsKQEAgLTEyNiwzNCAr
MTA5LDEyIEBAIGNsYXNzIFdlYlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVu
dCwgcHVibGljIFdlYktpdDo6V2ViRnJhbWVDbGllbnQsCiAgICAgdmlydHVhbCB2b2lkIHNldEFj
Y2VwdEFsbENvb2tpZXMoYm9vbCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBzdGQ6OnN0cmluZyBw
YXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRMb2NhbGUoY29uc3Qgc3RkOjpzdHJpbmcmKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlT3JpZW50YXRpb24oV2ViS2l0OjpXZWJEZXZpY2VPcmll
bnRhdGlvbiYpIE9WRVJSSURFOwotI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgdmlydHVh
bCB2b2lkIGRpZEFjcXVpcmVQb2ludGVyTG9jaygpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBkaWROb3RBY3F1aXJlUG9pbnRlckxvY2soKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkTG9zZVBvaW50ZXJMb2NrKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBvaW50
ZXJMb2NrV2lsbFJlc3BvbmRBc3luY2hyb25vdXNseSgpIE9WRVJSSURFIHsgbV9wb2ludGVyTG9j
a1BsYW5uZWRSZXN1bHQgPSBQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmM7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0UG9pbnRlckxvY2tXaWxsRmFpbFN5bmNocm9ub3VzbHkoKSBPVkVSUklERSB7
IG1fcG9pbnRlckxvY2tQbGFubmVkUmVzdWx0ID0gUG9pbnRlckxvY2tXaWxsRmFpbFN5bmM7IH0K
LSNlbmRpZgotICAgIHZpcnR1YWwgaW50IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RzKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdlb2xvY2F0aW9u
UGVybWlzc2lvbihib29sKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TW9ja0dlb2xv
Y2F0aW9uUG9zaXRpb24oZG91YmxlLCBkb3VibGUsIGRvdWJsZSkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihjb25z
dCBzdGQ6OnN0cmluZyYpIE9WRVJSSURFOwotI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0gICAg
dmlydHVhbCB2b2lkIGFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBzdGQ6OnN0cmluZyYs
IGRvdWJsZSwgY29uc3Qgc3RkOjpzdHJpbmcmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoYm9vbCkgT1ZFUlJJREU7Ci0jZW5kaWYKLSNpZiBF
TkFCTEUoU0NSSVBURURfU1BFRUNIKQotICAgIHZpcnR1YWwgdm9pZCBhZGRNb2NrU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQoY29uc3Qgc3RkOjpzdHJpbmcmLCBkb3VibGUpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRNb2NrU3BlZWNoUmVjb2duaXRpb25FcnJvcihjb25zdCBzdGQ6OnN0
cmluZyYsIGNvbnN0IHN0ZDo6c3RyaW5nJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIHdh
c01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoKSBPVkVSUklERTsKLSNlbmRpZgogICAgIHZp
cnR1YWwgdm9pZCB0ZXN0RmluaXNoZWQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgdGVz
dFRpbWVkT3V0KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzQmVpbmdEZWJ1Z2dlZCgp
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgaW50IGxheW91dFRlc3RUaW1lb3V0KCkgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlUmVtYWluaW5nV2luZG93cygpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgaW50IG5hdmlnYXRpb25FbnRyeUNvdW50KCkgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBpbnQgd2luZG93Q291bnQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZ29Ub09mZnNl
dChpbnQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCByZWxvYWQoKSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFVSTEZvckZyYW1lKGNvbnN0IFdlYktpdDo6V2ViVVJMJiwgY29u
c3Qgc3RkOjpzdHJpbmcmIGZyYW1lTmFtZSkgT1ZFUlJJREU7CkBAIC0xOTMsMTQgKzE1NCw2IEBA
IGNsYXNzIFdlYlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVudCwgcHVibGlj
IFdlYktpdDo6V2ViRnJhbWVDbGllbnQsCiAgICAgdmlydHVhbCB2b2lkIG5hdmlnYXRlQmFja0Zv
cndhcmRTb29uKGludCBvZmZzZXQpOwogICAgIHZpcnR1YWwgaW50IGhpc3RvcnlCYWNrTGlzdENv
dW50KCk7CiAgICAgdmlydHVhbCBpbnQgaGlzdG9yeUZvcndhcmRMaXN0Q291bnQoKTsKLSAgICB2
aXJ0dWFsIFdlYktpdDo6V2ViR2VvbG9jYXRpb25DbGllbnQqIGdlb2xvY2F0aW9uQ2xpZW50KCk7
Ci0jaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyKiBzcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViS2l0OjpXZWJTcGVlY2hJ
bnB1dExpc3RlbmVyKik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQotICAg
IHZpcnR1YWwgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyKiBzcGVlY2hSZWNvZ25pemVyKCkg
T1ZFUlJJREU7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRp
b25DbGllbnQqIGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCkgT1ZFUlJJREU7CiAKICAgICAvLyBX
ZWJLaXQ6OldlYldpZGdldENsaWVudAogICAgIHZpcnR1YWwgdm9pZCBkaWRBdXRvUmVzaXplKGNv
bnN0IFdlYktpdDo6V2ViU2l6ZSYgbmV3U2l6ZSk7CkBAIC0yMjAsMTEgKzE3Myw2IEBAIGNsYXNz
IFdlYlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVudCwgcHVibGljIFdlYktp
dDo6V2ViRnJhbWVDbGllbnQsCiAgICAgdmlydHVhbCBXZWJLaXQ6OldlYlJlY3Qgcm9vdFdpbmRv
d1JlY3QoKTsKICAgICB2aXJ0dWFsIFdlYktpdDo6V2ViUmVjdCB3aW5kb3dSZXNpemVyUmVjdCgp
OwogICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTY3JlZW5JbmZvIHNjcmVlbkluZm8oKTsKLSNpZiBF
TkFCTEUoUE9JTlRFUl9MT0NLKQotICAgIHZpcnR1YWwgYm9vbCByZXF1ZXN0UG9pbnRlckxvY2so
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNQb2ludGVyTG9ja2VkKCk7Ci0jZW5kaWYKIAogICAgIC8vIFdlYktpdDo6V2ViRnJh
bWVDbGllbnQKICAgICB2aXJ0dWFsIFdlYktpdDo6V2ViUGx1Z2luKiBjcmVhdGVQbHVnaW4oV2Vi
S2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViUGx1Z2luUGFyYW1zJik7CkBAIC0yNTEs
MTEgKzE5OSw2IEBAIGNsYXNzIFdlYlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0Ns
aWVudCwgcHVibGljIFdlYktpdDo6V2ViRnJhbWVDbGllbnQsCiAgICAgICAgIFdlYktpdDo6V2Vi
RnJhbWUqIHNvdXJjZUZyYW1lLCBXZWJLaXQ6OldlYkZyYW1lKiB0YXJnZXRGcmFtZSwgCiAgICAg
ICAgIFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW4gdGFyZ2V0LCBXZWJLaXQ6OldlYkRPTU1lc3Nh
Z2VFdmVudCk7CiAKLSAgICBXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jayog
ZGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKCk7Ci0KLSAgICAvLyBHZW9sb2NhdGlvbiBjbGll
bnQgbW9ja3MgZm9yIERSVFRlc3RSdW5uZXIKLSAgICBXZWJLaXQ6OldlYkdlb2xvY2F0aW9uQ2xp
ZW50TW9jayogZ2VvbG9jYXRpb25DbGllbnRNb2NrKCk7Ci0KICAgICAvLyBQZW5kaW5nIHRhc2sg
bGlzdCwgTm90ZSB0YWh0IHRoZSBtZXRob2QgaXMgcmVmZXJyZWQgZnJvbSBXZWJNZXRob2RUYXNr
IGNsYXNzLgogICAgIFdlYlRlc3RSdW5uZXI6OldlYlRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0
dXJuICZtX3Rhc2tMaXN0OyB9CiAKQEAgLTMyNiwxNyArMjY5LDYgQEAgcHJpdmF0ZToKIAogICAg
IE93blB0cjxXZWJLaXQ6OldlYkNvbnRleHRNZW51RGF0YT4gbV9sYXN0Q29udGV4dE1lbnVEYXRh
OwogCi0gICAgLy8gR2VvbG9jYXRpb24KLSAgICBPd25QdHI8V2ViS2l0OjpXZWJHZW9sb2NhdGlv
bkNsaWVudE1vY2s+IG1fZ2VvbG9jYXRpb25DbGllbnRNb2NrOwotCi0gICAgT3duUHRyPFdlYktp
dDo6V2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrPiBtX2RldmljZU9yaWVudGF0aW9uQ2xp
ZW50TW9jazsKLSNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotICAgIE93blB0cjxNb2NrV2ViU3Bl
ZWNoSW5wdXRDb250cm9sbGVyPiBtX3NwZWVjaElucHV0Q29udHJvbGxlck1vY2s7Ci0jZW5kaWYK
LQotI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCi0gICAgT3duUHRyPE1vY2tXZWJTcGVlY2hS
ZWNvZ25pemVyPiBtX21vY2tTcGVlY2hSZWNvZ25pemVyOwotI2VuZGlmCiAKICNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQogICAgIE93blB0cjx3ZWJraXRfc3VwcG9ydDo6VGVzdE1lZGlhU3RyZWFt
Q2xpZW50PiBtX3Rlc3RNZWRpYVN0cmVhbUNsaWVudDsKQEAgLTM0NywxNSArMjc5LDYgQEAgcHJp
dmF0ZToKICAgICBXZWJUZXN0UnVubmVyOjpXZWJUYXNrTGlzdCBtX3Rhc2tMaXN0OwogICAgIFZl
Y3RvcjxXZWJLaXQ6OldlYldpZGdldCo+IG1fcG9wdXBtZW51czsKIAotI2lmIEVOQUJMRShQT0lO
VEVSX0xPQ0spCi0gICAgYm9vbCBtX3BvaW50ZXJMb2NrZWQ7Ci0gICAgZW51bSB7Ci0gICAgICAg
IFBvaW50ZXJMb2NrV2lsbFN1Y2NlZWQsCi0gICAgICAgIFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRB
c3luYywKLSAgICAgICAgUG9pbnRlckxvY2tXaWxsRmFpbFN5bmMKLSAgICB9IG1fcG9pbnRlckxv
Y2tQbGFubmVkUmVzdWx0OwotI2VuZGlmCi0KICAgICBPd25QdHI8V2ViS2l0OjpXZWJMYXllclRy
ZWVWaWV3PiBtX2xheWVyVHJlZVZpZXc7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189295</attachid>
            <date>2013-02-20 05:36:37 -0800</date>
            <delta_ts>2013-02-20 05:37:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110217-20130220143258.patch</filename>
            <type>text/plain</type>
            <size>100339</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMzE2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjdkZTgyNDE0MmQ4ZjliY2QyZDhjMWMwMTNjMTZhNWEy
OGEyYmNmNy4uMjZlNTIxYzNjZjAwN2VhZDllZjg5ZjQ1YWU3YzRmODliNmVmNjhlZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
NyBAQAorMjAxMy0wMi0yMCAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4K
KworICAgICAgICBbY2hyb21pdW1dIG1vdmUgbW9zdCBvZiB0aGUgcmVtYWluaW5nIG1vY2tzIHRv
IFRlc3RSdW5uZXIgbGlicmFyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEwMjE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2hpbGUgbW9zdCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0
aGVzZSBtb2NrcyBpcyBhbHNvCisgICAgICAgIGF2YWlsYWJsZSBpbiB0aGUgY29udGVudCBtb2R1
bGUsIHRoZXJlIGlzIG5vIHN0cmFpZ2h0IGZvcndhcmQgd2F5IHRvCisgICAgICAgIGluamVjdCB0
aGUgbW9jayByZXN1bHRzIHJlcXVpcmVkIGZvciBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3REZWxlZ2F0ZS5oOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RQcm94
eS5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAg
ICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5OjpnZW9sb2NhdGlvbkNsaWVudCk6CisgICAg
ICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHk6OnNwZWVjaElucHV0Q29udHJvbGxlcik6
CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHk6OnNwZWVjaFJlY29nbml6ZXIp
OgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5OjpkZXZpY2VPcmllbnRhdGlv
bkNsaWVudCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHk6OnJlcXVlc3RQ
b2ludGVyTG9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHk6OnJlcXVl
c3RQb2ludGVyVW5sb2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eTo6
aXNQb2ludGVyTG9ja2VkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXIuY3BwLgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaElucHV0Q29udHJv
bGxlcjo6TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJUZXN0UnVu
bmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXI6On5Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5u
ZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnNldERlbGVnYXRlKToKKyAgICAgICAg
KFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmFkZE1vY2tSZWNv
Z25pdGlvblJlc3VsdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyOjpzZXREdW1wUmVjdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2Nr
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpjbGVhclJlc3VsdHMpOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6c3RhcnRSZWNvZ25pdGlvbik6
CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpj
YW5jZWxSZWNvZ25pdGlvbik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyOjpzdG9wUmVjb3JkaW5nKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnNwZWVjaFRhc2tGaXJlZCk6CisgICAgICAg
IChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpTcGVlY2hUYXNr
OjpTcGVlY2hUYXNrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1
dENvbnRyb2xsZXI6OlNwZWVjaFRhc2s6OnN0b3ApOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6U3BlZWNoVGFzazo6cnVuSWZWYWxpZCk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNw
ZWVjaElucHV0Q29udHJvbGxlci5oOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5oLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAgICAoTW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoSW5wdXRD
b250cm9sbGVyOjp0YXNrTGlzdCk6CisgICAgICAgIChTcGVlY2hUYXNrKToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoUmVjb2du
aXplci5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2Nr
V2ViU3BlZWNoUmVjb2duaXplci5jcHAuCisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2Vi
U3BlZWNoUmVjb2duaXplcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIpOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2du
aXplcjo6fk1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzZXREZWxlZ2F0ZSk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c3RhcnQpOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0b3ApOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmFib3J0KToKKyAgICAgICAgKFdlYlRl
c3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjphZGRNb2NrUmVzdWx0KToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzZXRFcnJvcik6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c3RhcnRUYXNr
UXVldWUpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6
OmNsZWFyVGFza1F1ZXVlKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hS
ZWNvZ25pemVyOjpTdGVwVGFzazo6cnVuSWZWYWxpZCk6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaDogUmVu
YW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hSZWNv
Z25pemVyLmguCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6Cisg
ICAgICAgIChNb2NrV2ViU3BlZWNoUmVjb2duaXplcik6CisgICAgICAgIChXZWJUZXN0UnVubmVy
OjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6d2FzQWJvcnRlZCk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6Y2xpZW50KToKKyAgICAgICAgKFdlYlRl
c3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpoYW5kbGUpOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnRhc2tMaXN0KToKKyAgICAgICAg
KFRhc2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6
OlRhc2s6OlRhc2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29n
bml6ZXI6OlRhc2s6On5UYXNrKToKKyAgICAgICAgKFN0ZXBUYXNrKToKKyAgICAgICAgKFdlYlRl
c3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpTdGVwVGFzazo6U3RlcFRhc2spOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRl
cmZhY2VzLmNwcDoKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RJbnRlcmZhY2VzOjpUZXN0
SW50ZXJmYWNlcyk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0SW50ZXJmYWNlczo6d2lu
ZG93T3BlbmVkKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAgICAoV2ViVGVzdFJ1
bm5lcjo6VGVzdEludGVyZmFjZXM6OndpbmRvd0Nsb3NlZCk6CisgICAgICAgIChXZWJUZXN0UnVu
bmVyOjpUZXN0SW50ZXJmYWNlczo6d2luZG93TGlzdCk6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMuaDoKKyAgICAgICAgKFRl
c3RJbnRlcmZhY2VzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5u
ZXI6OlRlc3RSdW5uZXIpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6cmVz
ZXQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6cmVxdWVzdFBvaW50ZXJM
b2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6
VGVzdFJ1bm5lcjo6cmVxdWVzdFBvaW50ZXJVbmxvY2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5l
cjo6VGVzdFJ1bm5lcjo6aXNQb2ludGVyTG9ja2VkKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlRlc3RSdW5uZXI6OmRpZEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKToKKyAgICAgICAgKFdl
YlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmRpZE5vdEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFs
KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmRpZExvc2VQb2ludGVyTG9j
a0ludGVybmFsKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OndpbmRvd0Nv
dW50KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OnNldE1vY2tEZXZpY2VP
cmllbnRhdGlvbik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpudW1iZXJP
ZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAo
V2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24pOgor
ICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb25VbmF2YWlsYWJsZUVycm9yKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5u
ZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpU
ZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdCk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpUZXN0UnVubmVyOjphZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1bHQpOgorICAg
ICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaFJlY29nbml0aW9u
RXJyb3IpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6d2FzTW9ja1NwZWVj
aFJlY29nbml0aW9uQWJvcnRlZCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVy
OjpkaWRBY3F1aXJlUG9pbnRlckxvY2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1
bm5lcjo6ZGlkTm90QWNxdWlyZVBvaW50ZXJMb2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlRlc3RSdW5uZXI6OmRpZExvc2VQb2ludGVyTG9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVy
OjpUZXN0UnVubmVyOjpzZXRQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmNocm9ub3VzbHkpOgor
ICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0UG9pbnRlckxvY2tXaWxsRmFp
bFN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAg
ICAoVGVzdFJ1bm5lcik6CisgICAgICAgIChIb3N0TWV0aG9kVGFzayk6CisgICAgICAgIChXZWJU
ZXN0UnVubmVyOjpUZXN0UnVubmVyOjpIb3N0TWV0aG9kVGFzazo6SG9zdE1ldGhvZFRhc2spOgor
ICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6SG9zdE1ldGhvZFRhc2s6OnJ1bklm
VmFsaWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1dlYlRlc3RQcm94eS5jcHA6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHlC
YXNlOjp+V2ViVGVzdFByb3h5QmFzZSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0
UHJveHlCYXNlOjpzZXRJbnRlcmZhY2VzKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRl
c3RQcm94eUJhc2U6OnNldERlbGVnYXRlKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRl
c3RQcm94eUJhc2U6OnJlc2V0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94
eUJhc2U6OmNhcHR1cmVUcmVlKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94
eUJhc2U6Omdlb2xvY2F0aW9uQ2xpZW50TW9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyKToK
KyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJhc2U6OmRldmljZU9yaWVudGF0
aW9uQ2xpZW50TW9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHlCYXNl
OjpzcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Oldl
YlRlc3RQcm94eUJhc2U6OnNwZWVjaFJlY29nbml6ZXJNb2NrKToKKyAgICAgICAgKFdlYlRlc3RS
dW5uZXI6OldlYlRlc3RQcm94eUJhc2U6Omdlb2xvY2F0aW9uQ2xpZW50KToKKyAgICAgICAgKFdl
YlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJhc2U6OnNwZWVjaElucHV0Q29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHlCYXNlOjpzcGVlY2hSZWNvZ25pemVy
KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJhc2U6OmRldmljZU9yaWVu
dGF0aW9uQ2xpZW50KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJhc2U6
OnJlcXVlc3RQb2ludGVyTG9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJv
eHlCYXNlOjpyZXF1ZXN0UG9pbnRlclVubG9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpX
ZWJUZXN0UHJveHlCYXNlOjppc1BvaW50ZXJMb2NrZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpyZXNl
dCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaDoKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3SG9zdCk6CisKIDIwMTMtMDItMTcgIEFu
ZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQWRk
aW5nIG15c2VsZiBhcyBhIGNvbW1pdHRlci4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZS5neXBpCmluZGV4IDBiOWNlMzUwZWMzOTViYmRlMDQ5ZGUxM2NiMjQ2NTdkMjNkNWE4ZGYu
LjNmNzFkYTFjOWJlZGYwMjJmMWYzZjJiMzAyNGUzZmE3YjM1Yjc0NDEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQpAQCAtMTIsMTAgKzEyLDYgQEAKICAgICAgICAg
ICAgICdjaHJvbWl1bS9Nb2NrV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgnLAogICAgICAgICAgICAg
J2Nocm9taXVtL01vY2tXZWJQcmVyZW5kZXJpbmdTdXBwb3J0LmNwcCcsCiAgICAgICAgICAgICAn
Y2hyb21pdW0vTW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnQuaCcsCi0gICAgICAgICAgICAnY2hy
b21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAnLAotICAgICAgICAgICAgJ2No
cm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCcsCi0gICAgICAgICAgICAnY2hy
b21pdW0vTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1
bS9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UYXNr
LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rhc2suY3BwJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9UZXN0RXZlbnRQcmludGVyLmgnLApAQCAtNzUsNiArNzEsMTAgQEAKICAgICAgICAgICAg
ICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRsZXIuaCcs
CiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlJUQ1BlZXJDb25u
ZWN0aW9uSGFuZGxlci5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L01vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCcsCisgICAgICAgICAgICAnY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAnLAorICAg
ICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hJbnB1dENvbnRy
b2xsZXIuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNw
ZWVjaFJlY29nbml6ZXIuY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvU3BlbGxDaGVja0NsaWVudC5jcHAnLApkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI1NzZj
N2U2MzZiYmU0MWU3NzczOWM0ZGUyODc2NGIyZGQ1N2NhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9N
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1vY2tXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIlRhc2suaCIKLSNpbmNsdWRlICJXZWJT
cGVlY2hJbnB1dExpc3RlbmVyLmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYkNTdHJpbmcuaD4KLSNp
bmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotI2lmIEVOQUJMRShJTlBV
VF9TUEVFQ0gpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2UgV2Vi
VGVzdFJ1bm5lcjsKLQotUGFzc093blB0cjxNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyPiBN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpjcmVhdGUoV2ViU3BlZWNoSW5wdXRMaXN0ZW5l
ciogbGlzdGVuZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyKGxpc3RlbmVyKSk7Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlcjo6YWRkTW9ja1JlY29nbml0aW9uUmVzdWx0KGNvbnN0IFdlYlN0cmluZyYgcmVzdWx0
LCBkb3VibGUgY29uZmlkZW5jZSwgY29uc3QgV2ViU3RyaW5nJiBsYW5ndWFnZSkKLXsKLSAgICBX
ZWJTcGVlY2hJbnB1dFJlc3VsdCByZXM7Ci0gICAgcmVzLmFzc2lnbihyZXN1bHQsIGNvbmZpZGVu
Y2UpOwotCi0gICAgaWYgKGxhbmd1YWdlLmlzRW1wdHkoKSkKLSAgICAgICAgbV9yZXN1bHRzRm9y
RW1wdHlMYW5ndWFnZS5hcHBlbmQocmVzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgU3RyaW5nIGxh
bmdTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICBpZiAoIW1fcmVjb2duaXRpb25SZXN1bHRzLmNvbnRhaW5zKGxhbmdTdHJpbmcpKQotICAg
ICAgICAgICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuc2V0KGxhbmdTdHJpbmcsIFZlY3RvcjxXZWJT
cGVlY2hJbnB1dFJlc3VsdD4oKSk7Ci0gICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLmZpbmQo
bGFuZ1N0cmluZyktPnZhbHVlLmFwcGVuZChyZXMpOwotICAgIH0KLX0KLQotdm9pZCBNb2NrV2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyOjpzZXREdW1wUmVjdChib29sIGR1bXBSZWN0KQotewotICAg
IG1fZHVtcFJlY3QgPSBkdW1wUmVjdDsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250
cm9sbGVyOjpjbGVhclJlc3VsdHMoKQotewotICAgIG1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2Uu
Y2xlYXIoKTsKLSAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5jbGVhcigpOwotICAgIG1fZHVtcFJl
Y3QgPSBmYWxzZTsKLX0KLQotYm9vbCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpzdGFy
dFJlY29nbml0aW9uKGludCByZXF1ZXN0SWQsIGNvbnN0IFdlYlJlY3QmIGVsZW1lbnRSZWN0LCBj
b25zdCBXZWJTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBXZWJTdHJpbmcmIGdyYW1tYXIsIGNvbnN0
IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgaWYgKG1fc3BlZWNoVGFzaykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7Ci0gICAg
bV9yZXF1ZXN0UmVjdCA9IGVsZW1lbnRSZWN0OwotICAgIG1fcmVjb3JkaW5nID0gdHJ1ZTsKLSAg
ICBtX2xhbmd1YWdlID0gU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsK
LQotICAgIG1fc3BlZWNoVGFzayA9IG5ldyBTcGVlY2hUYXNrKHRoaXMpOwotICAgIHBvc3RUYXNr
KG1fc3BlZWNoVGFzayk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNb2NrV2ViU3Bl
ZWNoSW5wdXRDb250cm9sbGVyOjpjYW5jZWxSZWNvZ25pdGlvbihpbnQgcmVxdWVzdElkKQotewot
ICAgIGlmIChtX3NwZWVjaFRhc2spIHsKLSAgICAgICAgQVNTRVJUKHJlcXVlc3RJZCA9PSBtX3Jl
cXVlc3RJZCk7Ci0KLSAgICAgICAgbV9zcGVlY2hUYXNrLT5zdG9wKCk7Ci0gICAgICAgIG1fcmVj
b3JkaW5nID0gZmFsc2U7Ci0gICAgICAgIG1fbGlzdGVuZXItPmRpZENvbXBsZXRlUmVjb2duaXRp
b24obV9yZXF1ZXN0SWQpOwotICAgICAgICBtX3JlcXVlc3RJZCA9IDA7Ci0gICAgfQotfQotCi12
b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnN0b3BSZWNvcmRpbmcoaW50IHJlcXVl
c3RJZCkKLXsKLSAgICBBU1NFUlQocmVxdWVzdElkID09IG1fcmVxdWVzdElkKTsKLSAgICBpZiAo
bV9zcGVlY2hUYXNrICYmIG1fcmVjb3JkaW5nKSB7Ci0gICAgICAgIG1fc3BlZWNoVGFzay0+c3Rv
cCgpOwotICAgICAgICBzcGVlY2hUYXNrRmlyZWQoKTsKLSAgICB9Ci19Ci0KLU1vY2tXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViU3BlZWNo
SW5wdXRMaXN0ZW5lciogbGlzdGVuZXIpCi0gICAgOiBtX2xpc3RlbmVyKGxpc3RlbmVyKQotICAg
ICwgbV9zcGVlY2hUYXNrKDApCi0gICAgLCBtX3JlY29yZGluZyhmYWxzZSkKLSAgICAsIG1fcmVx
dWVzdElkKC0xKQotICAgICwgbV9kdW1wUmVjdChmYWxzZSkKLXsKLX0KLQotc3RhdGljIFdlYlNw
ZWVjaElucHV0UmVzdWx0QXJyYXkgbWFrZVJlY3RSZXN1bHQoY29uc3QgV2ViUmVjdCYgcmVjdCkK
LXsKLSAgICBTdHJpbmdCdWlsZGVyIHNiOwotICAgIHNiLmFwcGVuZChTdHJpbmc6Om51bWJlcihy
ZWN0LngpKTsKLSAgICBzYi5hcHBlbmQoIiwiKTsKLSAgICBzYi5hcHBlbmQoU3RyaW5nOjpudW1i
ZXIocmVjdC55KSk7Ci0gICAgc2IuYXBwZW5kKCIsIik7Ci0gICAgc2IuYXBwZW5kKFN0cmluZzo6
bnVtYmVyKHJlY3Qud2lkdGgpKTsKLSAgICBzYi5hcHBlbmQoIiwiKTsKLSAgICBzYi5hcHBlbmQo
U3RyaW5nOjpudW1iZXIocmVjdC5oZWlnaHQpKTsKLQotICAgIFdlYlNwZWVjaElucHV0UmVzdWx0
IHJlczsKLSAgICByZXMuYXNzaWduKFdlYlN0cmluZyhzYi5jaGFyYWN0ZXJzKCksIHNiLmxlbmd0
aCgpKSwgMS4wKTsKLQotICAgIFdlYlNwZWVjaElucHV0UmVzdWx0QXJyYXkgcmVzdWx0czsKLSAg
ICByZXN1bHRzLmFzc2lnbigmcmVzLCAxKTsKLSAgICByZXR1cm4gcmVzdWx0czsKLX0KLQotdm9p
ZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpzcGVlY2hUYXNrRmlyZWQoKQotewotICAg
IGlmIChtX3JlY29yZGluZykgewotICAgICAgICBtX3JlY29yZGluZyA9IGZhbHNlOwotICAgICAg
ICBtX2xpc3RlbmVyLT5kaWRDb21wbGV0ZVJlY29yZGluZyhtX3JlcXVlc3RJZCk7Ci0KLSAgICAg
ICAgbV9zcGVlY2hUYXNrID0gbmV3IFNwZWVjaFRhc2sodGhpcyk7Ci0gICAgICAgIHBvc3RUYXNr
KG1fc3BlZWNoVGFzayk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYm9vbCBub1Jlc3VsdHNGb3Vu
ZCA9IGZhbHNlOwotICAgICAgICAvLyBXZSB0YWtlIGEgY29weSBvZiB0aGUgcmVxdWVzdElkIGhl
cmUgc28gdGhhdCBpZiBzY3JpcHRzIGRlc3Ryb3llZCB0aGUgaW5wdXQgZWxlbWVudAotICAgICAg
ICAvLyBpbnNpZGUgb25lIG9mIHRoZSBjYWxsYmFja3MgYmVsb3csIHdlJ2xsIHN0aWxsIGtub3cg
d2hhdCB0aGlzIHNlc3Npb24ncyByZXF1ZXN0SWQgd2FzLgotICAgICAgICBpbnQgcmVxdWVzdElk
ID0gbV9yZXF1ZXN0SWQ7Ci0gICAgICAgIG1fcmVxdWVzdElkID0gMDsKLQotICAgICAgICBpZiAo
bV9kdW1wUmVjdCkgewotICAgICAgICAgICAgbV9saXN0ZW5lci0+c2V0UmVjb2duaXRpb25SZXN1
bHQocmVxdWVzdElkLCBtYWtlUmVjdFJlc3VsdChtX3JlcXVlc3RSZWN0KSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAobV9sYW5ndWFnZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIEVtcHR5IGxh
bmd1YWdlIGNhc2UgbXVzdCBiZSBoYW5kbGVkIHNlcGFyYXRlbHkgdG8gYXZvaWQgcHJvYmxlbXMg
d2l0aCBIYXNoTWFwIGFuZCBlbXB0eSBrZXlzLgotICAgICAgICAgICAgaWYgKCFtX3Jlc3VsdHNG
b3JFbXB0eUxhbmd1YWdlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBtX2xpc3RlbmVyLT5z
ZXRSZWNvZ25pdGlvblJlc3VsdChyZXF1ZXN0SWQsIG1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2Up
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG5vUmVzdWx0c0ZvdW5kID0gdHJ1
ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX3JlY29nbml0aW9uUmVzdWx0
cy5jb250YWlucyhtX2xhbmd1YWdlKSkKLSAgICAgICAgICAgICAgICBtX2xpc3RlbmVyLT5zZXRS
ZWNvZ25pdGlvblJlc3VsdChyZXF1ZXN0SWQsIG1fcmVjb2duaXRpb25SZXN1bHRzLmdldChtX2xh
bmd1YWdlKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbm9SZXN1bHRzRm91
bmQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5vUmVzdWx0c0ZvdW5kKSB7Ci0g
ICAgICAgICAgICAvLyBDYW4ndCBhdm9pZCBzZXR0aW5nIGEgcmVzdWx0IGV2ZW4gaWYgbm8gcmVz
dWx0IHdhcyBzZXQgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZS4KLSAgICAgICAgICAgIC8vIFRoaXMg
d291bGQgYXZvaWQgZ2VuZXJhdGluZyB0aGUgZXZlbnRzIHVzZWQgdG8gY2hlY2sgdGhlIHJlc3Vs
dHMgYW5kIHRoZSB0ZXN0IHdvdWxkIHRpbWVvdXQuCi0gICAgICAgICAgICBTdHJpbmcgZXJyb3Io
ImVycm9yOiBubyByZXN1bHQgZm91bmQgZm9yIGxhbmd1YWdlICciKTsKLSAgICAgICAgICAgIGVy
cm9yLmFwcGVuZChtX2xhbmd1YWdlKTsKLSAgICAgICAgICAgIGVycm9yLmFwcGVuZCgiJyIpOwot
Ci0gICAgICAgICAgICBXZWJTcGVlY2hJbnB1dFJlc3VsdCByZXM7Ci0gICAgICAgICAgICByZXMu
YXNzaWduKFdlYlN0cmluZzo6ZnJvbVVURjgoZXJyb3IudXRmOCgpLmRhdGEoKSksIDEuMCk7Ci0K
LSAgICAgICAgICAgIFZlY3RvcjxXZWJTcGVlY2hJbnB1dFJlc3VsdD4gcmVzdWx0czsKLSAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlcyk7Ci0KLSAgICAgICAgICAgIG1fbGlzdGVuZXItPnNl
dFJlY29nbml0aW9uUmVzdWx0KHJlcXVlc3RJZCwgcmVzdWx0cyk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLU1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OlNwZWVjaFRhc2s6OlNwZWVjaFRh
c2soTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlciogbW9jaykKLSAgICA6IFdlYk1ldGhvZFRh
c2s8TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcj46OldlYk1ldGhvZFRhc2sobW9jaykKLXsK
LX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpTcGVlY2hUYXNrOjpzdG9w
KCkKLXsKLSAgICBtX29iamVjdC0+bV9zcGVlY2hUYXNrID0gMDsKLSAgICBjYW5jZWwoKTsKLSAg
ICBkZWxldGUodGhpcyk7Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6
U3BlZWNoVGFzazo6cnVuSWZWYWxpZCgpCi17Ci0gICAgbV9vYmplY3QtPm1fc3BlZWNoVGFzayA9
IDA7Ci0gICAgbV9vYmplY3QtPnNwZWVjaFRhc2tGaXJlZCgpOwotfQotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJ
bnB1dENvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkzZjBiZjY3
YTVkNWVkMGFlYTIxMmFmNGM1NTk4OWNmZTdjY2Y5YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2Nr
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyX2gKLSNkZWZpbmUg
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcl9oCi0KLSNpZiBFTkFCTEUoSU5QVVRfU1BFRUNI
KQotCi0jaW5jbHVkZSAiV2ViVGFzay5oIgotI2luY2x1ZGUgIldlYlNwZWVjaElucHV0Q29udHJv
bGxlci5oIgotI2luY2x1ZGUgIldlYlNwZWVjaElucHV0UmVzdWx0LmgiCi0jaW5jbHVkZSA8cHVi
bGljL1dlYlJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJTZWN1
cml0eU9yaWdpbjsKLWNsYXNzIFdlYlNwZWVjaElucHV0TGlzdGVuZXI7Ci1jbGFzcyBXZWJTdHJp
bmc7Ci19Ci0KLWNsYXNzIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIgOiBwdWJsaWMgV2Vi
S2l0OjpXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI+IGNyZWF0ZShXZWJLaXQ6OldlYlNw
ZWVjaElucHV0TGlzdGVuZXIqKTsKLQotICAgIHZvaWQgYWRkTW9ja1JlY29nbml0aW9uUmVzdWx0
KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBjb25z
dCBXZWJLaXQ6OldlYlN0cmluZyYgbGFuZ3VhZ2UpOwotICAgIHZvaWQgc2V0RHVtcFJlY3QoYm9v
bCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHMoKTsKLQotICAgIC8vIFdlYlNwZWVjaElucHV0Q29u
dHJvbGxlciBpbXBsZW1lbnRhdGlvbjoKLSAgICB2aXJ0dWFsIGJvb2wgc3RhcnRSZWNvZ25pdGlv
bihpbnQgcmVxdWVzdElkLCBjb25zdCBXZWJLaXQ6OldlYlJlY3QmIGVsZW1lbnRSZWN0LCBjb25z
dCBXZWJLaXQ6OldlYlN0cmluZyYgbGFuZ3VhZ2UsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBn
cmFtbWFyLCBjb25zdCBXZWJLaXQ6OldlYlNlY3VyaXR5T3JpZ2luJikgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIGNhbmNlbFJlY29nbml0aW9uKGludCByZXF1ZXN0SWQpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBzdG9wUmVjb3JkaW5nKGludCByZXF1ZXN0SWQpIE9WRVJSSURFOwot
Ci0gICAgV2ViVGVzdFJ1bm5lcjo6V2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1f
dGFza0xpc3Q7IH0KLQotcHJpdmF0ZToKLSAgICBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
KFdlYktpdDo6V2ViU3BlZWNoSW5wdXRMaXN0ZW5lciopOwotICAgIHZvaWQgc3BlZWNoVGFza0Zp
cmVkKCk7Ci0KLSAgICBjbGFzcyBTcGVlY2hUYXNrIDogcHVibGljIFdlYlRlc3RSdW5uZXI6Oldl
Yk1ldGhvZFRhc2s8TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcj4gewotICAgIHB1YmxpYzoK
LSAgICAgICAgU3BlZWNoVGFzayhNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKik7Ci0gICAg
ICAgIHZvaWQgc3RvcCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2b2lkIHJ1
bklmVmFsaWQoKSBPVkVSUklERTsKLSAgICB9OwotCi0gICAgV2ViS2l0OjpXZWJTcGVlY2hJbnB1
dExpc3RlbmVyKiBtX2xpc3RlbmVyOwotCi0gICAgV2ViVGVzdFJ1bm5lcjo6V2ViVGFza0xpc3Qg
bV90YXNrTGlzdDsKLSAgICBTcGVlY2hUYXNrKiBtX3NwZWVjaFRhc2s7Ci0KLSAgICBib29sIG1f
cmVjb3JkaW5nOwotICAgIGludCBtX3JlcXVlc3RJZDsKLSAgICBXZWJLaXQ6OldlYlJlY3QgbV9y
ZXF1ZXN0UmVjdDsKLSAgICBTdHJpbmcgbV9sYW5ndWFnZTsKLQotICAgIEhhc2hNYXA8U3RyaW5n
LCBWZWN0b3I8V2ViS2l0OjpXZWJTcGVlY2hJbnB1dFJlc3VsdD4gPiBtX3JlY29nbml0aW9uUmVz
dWx0czsKLSAgICBWZWN0b3I8V2ViS2l0OjpXZWJTcGVlY2hJbnB1dFJlc3VsdD4gbV9yZXN1bHRz
Rm9yRW1wdHlMYW5ndWFnZTsKLSAgICBib29sIG1fZHVtcFJlY3Q7Ci19OwotCi0jZW5kaWYgLy8g
RU5BQkxFKElOUFVUX1NQRUVDSCkKLQotI2VuZGlmIC8vIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRy
b2xsZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dl
YlNwZWVjaFJlY29nbml6ZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9j
a1dlYlNwZWVjaFJlY29nbml6ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
YzM2MGUwY2UyOTY2OWIzZTA3ODE2ZGJmNzlkN2Q3NjdlOWVmZGM2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyLmgiCi0KLSNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQotCi0jaW5jbHVk
ZSAiVGFzay5oIgotI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgiCi0jaW5j
bHVkZSAiV2ViU3BlZWNoUmVjb2duaXplckNsaWVudC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwotdXNpbmcgbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXI7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8v
IFRhc2sgY2xhc3MgZm9yIGNhbGxpbmcgYSBjbGllbnQgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCB0
YWtlIGFueSBwYXJhbWV0ZXJzLgotdHlwZWRlZiB2b2lkIChXZWJTcGVlY2hSZWNvZ25pemVyQ2xp
ZW50OjoqQ2xpZW50RnVuY3Rpb25Qb2ludGVyKShjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhh
bmRsZSYpOwotY2xhc3MgQ2xpZW50Q2FsbFRhc2sgOiBwdWJsaWMgTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXI6OlRhc2sgewotcHVibGljOgotICAgIENsaWVudENhbGxUYXNrKE1vY2tXZWJTcGVlY2hS
ZWNvZ25pemVyKiBtb2NrLCBDbGllbnRGdW5jdGlvblBvaW50ZXIgZnVuY3Rpb24pCi0gICAgICAg
IDogTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sobW9jaykKLSAgICAgICAgLCBtX2Z1bmN0
aW9uKGZ1bmN0aW9uKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgT1ZF
UlJJREUgeyAobV9yZWNvZ25pemVyLT5jbGllbnQoKS0+Km1fZnVuY3Rpb24pKG1fcmVjb2duaXpl
ci0+aGFuZGxlKCkpOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ2xpZW50RnVuY3Rpb25Qb2ludGVyIG1f
ZnVuY3Rpb247Ci19OwotCi0vLyBUYXNrIGZvciBkZWxpdmVyaW5nIGEgcmVzdWx0IGV2ZW50Lgot
Y2xhc3MgUmVzdWx0VGFzayA6IHB1YmxpYyBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6VGFzayB7
Ci1wdWJsaWM6Ci0gICAgUmVzdWx0VGFzayhNb2NrV2ViU3BlZWNoUmVjb2duaXplciogbW9jaywg
Y29uc3QgV2ViU3RyaW5nIHRyYW5zY3JpcHQsIGZsb2F0IGNvbmZpZGVuY2UpCi0gICAgICAgIDog
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sobW9jaykKLSAgICAgICAgLCBtX3RyYW5zY3Jp
cHQodHJhbnNjcmlwdCkKLSAgICAgICAgLCBtX2NvbmZpZGVuY2UoY29uZmlkZW5jZSkKLSAgICB7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1bigpIE9WRVJSSURFCi0gICAgewotICAgICAg
ICBXZWJWZWN0b3I8V2ViU3RyaW5nPiB0cmFuc2NyaXB0cyhzdGF0aWNfY2FzdDxzaXplX3Q+KDEp
KTsKLSAgICAgICAgV2ViVmVjdG9yPGZsb2F0PiBjb25maWRlbmNlcyhzdGF0aWNfY2FzdDxzaXpl
X3Q+KDEpKTsKLSAgICAgICAgdHJhbnNjcmlwdHNbMF0gPSBtX3RyYW5zY3JpcHQ7Ci0gICAgICAg
IGNvbmZpZGVuY2VzWzBdID0gbV9jb25maWRlbmNlOwotICAgICAgICBXZWJWZWN0b3I8V2ViU3Bl
ZWNoUmVjb2duaXRpb25SZXN1bHQ+IGZpbmFsUmVzdWx0cyhzdGF0aWNfY2FzdDxzaXplX3Q+KDEp
KTsKLSAgICAgICAgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiBpbnRlcmlt
UmVzdWx0czsKLSAgICAgICAgZmluYWxSZXN1bHRzWzBdLmFzc2lnbih0cmFuc2NyaXB0cywgY29u
ZmlkZW5jZXMsIHRydWUpOwotCi0gICAgICAgIG1fcmVjb2duaXplci0+Y2xpZW50KCktPmRpZFJl
Y2VpdmVSZXN1bHRzKG1fcmVjb2duaXplci0+aGFuZGxlKCksIGZpbmFsUmVzdWx0cywgaW50ZXJp
bVJlc3VsdHMpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBXZWJTdHJpbmcgbV90cmFuc2NyaXB0
OwotICAgIGZsb2F0IG1fY29uZmlkZW5jZTsKLX07Ci0KLS8vIFRhc2sgZm9yIGRlbGl2ZXJpbmcg
YSBub21hdGNoIGV2ZW50LgotY2xhc3MgTm9NYXRjaFRhc2sgOiBwdWJsaWMgTW9ja1dlYlNwZWVj
aFJlY29nbml6ZXI6OlRhc2sgewotcHVibGljOgotICAgIE5vTWF0Y2hUYXNrKE1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyKiBtb2NrKSA6IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrKG1vY2sp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBydW4oKSBPVkVSUklERSB7IG1fcmVjb2duaXplci0+Y2xp
ZW50KCktPmRpZFJlY2VpdmVOb01hdGNoKG1fcmVjb2duaXplci0+aGFuZGxlKCksIFdlYlNwZWVj
aFJlY29nbml0aW9uUmVzdWx0KCkpOyB9Ci19OwotCi0vLyBUYXNrIGZvciBkZWxpdmVyaW5nIGFu
IGVycm9yIGV2ZW50LgotY2xhc3MgRXJyb3JUYXNrIDogcHVibGljIE1vY2tXZWJTcGVlY2hSZWNv
Z25pemVyOjpUYXNrIHsKLXB1YmxpYzoKLSAgICBFcnJvclRhc2soTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXIqIG1vY2ssIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OkVycm9yQ29kZSBjb2RlLCBj
b25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCi0gICAgICAgIDogTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXI6OlRhc2sobW9jaykKLSAgICAgICAgLCBtX2NvZGUoY29kZSkKLSAgICAgICAgLCBtX21lc3Nh
Z2UobWVzc2FnZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1bigpIE9WRVJS
SURFIHsgbV9yZWNvZ25pemVyLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUVycm9yKG1fcmVjb2duaXpl
ci0+aGFuZGxlKCksIG1fbWVzc2FnZSwgbV9jb2RlKTsgfQotCi1wcml2YXRlOgotICAgIFdlYlNw
ZWVjaFJlY29nbml6ZXJDbGllbnQ6OkVycm9yQ29kZSBtX2NvZGU7Ci0gICAgV2ViU3RyaW5nIG1f
bWVzc2FnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLVBhc3NPd25QdHI8TW9ja1dlYlNwZWVj
aFJlY29nbml6ZXI+IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpjcmVhdGUoKQotewotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIoKSk7Ci19Ci0KLXZvaWQg
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0YXJ0KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9u
SGFuZGxlJiBoYW5kbGUsIGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zJiBwYXJhbXMs
IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBtX3dhc0Fib3J0ZWQg
PSBmYWxzZTsKLSAgICBtX2hhbmRsZSA9IGhhbmRsZTsKLSAgICBtX2NsaWVudCA9IGNsaWVudDsK
LQotICAgIG1fdGFza1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgQ2xpZW50Q2FsbFRhc2sodGhp
cywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZFN0YXJ0KSkpOwotICAgIG1fdGFza1F1
ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJl
Y29nbml6ZXJDbGllbnQ6OmRpZFN0YXJ0QXVkaW8pKSk7Ci0gICAgbV90YXNrUXVldWUuYXBwZW5k
KGFkb3B0UHRyKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNs
aWVudDo6ZGlkU3RhcnRTb3VuZCkpKTsKLQotICAgIGlmICghbV9tb2NrVHJhbnNjcmlwdHMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVChtX21vY2tUcmFuc2NyaXB0cy5zaXplKCkgPT0gbV9t
b2NrQ29uZmlkZW5jZXMuc2l6ZSgpKTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fbW9ja1RyYW5zY3JpcHRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV90YXNrUXVldWUu
YXBwZW5kKGFkb3B0UHRyKG5ldyBSZXN1bHRUYXNrKHRoaXMsIG1fbW9ja1RyYW5zY3JpcHRzW2ld
LCBtX21vY2tDb25maWRlbmNlc1tpXSkpKTsKLQotICAgICAgICBtX21vY2tUcmFuc2NyaXB0cy5j
bGVhcigpOwotICAgICAgICBtX21vY2tDb25maWRlbmNlcy5jbGVhcigpOwotICAgIH0gZWxzZQot
ICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IE5vTWF0Y2hUYXNrKHRoaXMp
KSk7Ci0KLSAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IENsaWVudENhbGxUYXNr
KHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmRTb3VuZCkpKTsKLSAgICBt
X3Rhc2tRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJT
cGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmRBdWRpbykpKTsKLSAgICBtX3Rhc2tRdWV1ZS5h
cHBlbmQoYWRvcHRQdHIobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25p
emVyQ2xpZW50OjpkaWRFbmQpKSk7Ci0KLSAgICBzdGFydFRhc2tRdWV1ZSgpOwotfQotCi12b2lk
IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzdG9wKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9u
SGFuZGxlJiBoYW5kbGUsIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAg
ICBtX2hhbmRsZSA9IGhhbmRsZTsKLSAgICBtX2NsaWVudCA9IGNsaWVudDsKLQotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgTW9j
a1dlYlNwZWVjaFJlY29nbml6ZXI6OmFib3J0KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFu
ZGxlJiBoYW5kbGUsIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBt
X2hhbmRsZSA9IGhhbmRsZTsKLSAgICBtX2NsaWVudCA9IGNsaWVudDsKLQotICAgIGNsZWFyVGFz
a1F1ZXVlKCk7Ci0gICAgbV93YXNBYm9ydGVkID0gdHJ1ZTsKLSAgICBtX3Rhc2tRdWV1ZS5hcHBl
bmQoYWRvcHRQdHIobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVy
Q2xpZW50OjpkaWRFbmQpKSk7Ci0gICAgc3RhcnRUYXNrUXVldWUoKTsKLX0KLQotdm9pZCBNb2Nr
V2ViU3BlZWNoUmVjb2duaXplcjo6YWRkTW9ja1Jlc3VsdChjb25zdCBXZWJTdHJpbmcmIHRyYW5z
Y3JpcHQsIGZsb2F0IGNvbmZpZGVuY2UpCi17Ci0gICAgbV9tb2NrVHJhbnNjcmlwdHMuYXBwZW5k
KHRyYW5zY3JpcHQpOwotICAgIG1fbW9ja0NvbmZpZGVuY2VzLmFwcGVuZChjb25maWRlbmNlKTsK
LX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c2V0RXJyb3IoY29uc3QgV2ViU3Ry
aW5nJiBlcnJvciwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQotewotICAgIFdlYlNwZWVjaFJl
Y29nbml6ZXJDbGllbnQ6OkVycm9yQ29kZSBjb2RlOwotICAgIGlmIChlcnJvciA9PSAiT3RoZXJF
cnJvciIpCi0gICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpPdGhlckVy
cm9yOwotICAgIGVsc2UgaWYgKGVycm9yID09ICJOb1NwZWVjaEVycm9yIikKLSAgICAgICAgY29k
ZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Ok5vU3BlZWNoRXJyb3I7Ci0gICAgZWxzZSBp
ZiAoZXJyb3IgPT0gIkFib3J0ZWRFcnJvciIpCi0gICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNv
Z25pemVyQ2xpZW50OjpBYm9ydGVkRXJyb3I7Ci0gICAgZWxzZSBpZiAoZXJyb3IgPT0gIkF1ZGlv
Q2FwdHVyZUVycm9yIikKLSAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6
OkF1ZGlvQ2FwdHVyZUVycm9yOwotICAgIGVsc2UgaWYgKGVycm9yID09ICJOZXR3b3JrRXJyb3Ii
KQotICAgICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6TmV0d29ya0Vycm9y
OwotICAgIGVsc2UgaWYgKGVycm9yID09ICJOb3RBbGxvd2VkRXJyb3IiKQotICAgICAgICBjb2Rl
ID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6Tm90QWxsb3dlZEVycm9yOwotICAgIGVsc2Ug
aWYgKGVycm9yID09ICJTZXJ2aWNlTm90QWxsb3dlZEVycm9yIikKLSAgICAgICAgY29kZSA9IFdl
YlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OlNlcnZpY2VOb3RBbGxvd2VkRXJyb3I7Ci0gICAgZWxz
ZSBpZiAoZXJyb3IgPT0gIkJhZEdyYW1tYXJFcnJvciIpCi0gICAgICAgIGNvZGUgPSBXZWJTcGVl
Y2hSZWNvZ25pemVyQ2xpZW50OjpCYWRHcmFtbWFyRXJyb3I7Ci0gICAgZWxzZSBpZiAoZXJyb3Ig
PT0gIkxhbmd1YWdlTm90U3VwcG9ydGVkRXJyb3IiKQotICAgICAgICBjb2RlID0gV2ViU3BlZWNo
UmVjb2duaXplckNsaWVudDo6TGFuZ3VhZ2VOb3RTdXBwb3J0ZWRFcnJvcjsKLSAgICBlbHNlCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNsZWFyVGFza1F1ZXVlKCk7Ci0gICAgbV90YXNrUXVldWUu
YXBwZW5kKGFkb3B0UHRyKG5ldyBFcnJvclRhc2sodGhpcywgY29kZSwgbWVzc2FnZSkpKTsKLSAg
ICBtX3Rhc2tRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZX
ZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmQpKSk7Ci0gICAgc3RhcnRUYXNrUXVldWUo
KTsKLX0KLQotTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVy
KCkKLSAgICA6IG1fd2FzQWJvcnRlZChmYWxzZSkKLSAgICAsIG1fdGFza1F1ZXVlUnVubmluZyhm
YWxzZSkKLXsKLX0KLQotTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6On5Nb2NrV2ViU3BlZWNoUmVj
b2duaXplcigpCi17Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0YXJ0VGFz
a1F1ZXVlKCkKLXsKLSAgICBpZiAobV90YXNrUXVldWVSdW5uaW5nKQotICAgICAgICByZXR1cm47
Ci0gICAgcG9zdFRhc2sobmV3IFN0ZXBUYXNrKHRoaXMpKTsKLSAgICBtX3Rhc2tRdWV1ZVJ1bm5p
bmcgPSB0cnVlOwotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpjbGVhclRhc2tR
dWV1ZSgpCi17Ci0gICAgbV90YXNrUXVldWUuY2xlYXIoKTsKLSAgICBtX3Rhc2tRdWV1ZVJ1bm5p
bmcgPSBmYWxzZTsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6U3RlcFRhc2s6
OnJ1bklmVmFsaWQoKQotewotICAgIGlmIChtX29iamVjdC0+bV90YXNrUXVldWUuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZVJ1bm5pbmcgPSBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIE93blB0cjxUYXNrPiB0YXNrID0gbV9vYmplY3QtPm1f
dGFza1F1ZXVlWzBdLnJlbGVhc2UoKTsKLSAgICBtX29iamVjdC0+bV90YXNrUXVldWUucmVtb3Zl
KDApOwotICAgIHRhc2stPnJ1bigpOwotCi0gICAgaWYgKG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgbV9vYmplY3QtPm1fdGFza1F1ZXVlUnVubmluZyA9IGZhbHNl
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9zdFRhc2sobmV3IFN0ZXBUYXNrKG1f
b2JqZWN0KSk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hSZWNvZ25p
emVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNjUzNGI0YzZjMmIyOTNiNmQ0
MzAwMzFmZjAyZDMyNzA0ODkyNjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJl
Y29nbml6ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyX2gKLSNkZWZpbmUgTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXJfaAotCi0jaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKLQotI2luY2x1ZGUgIldlYlNwZWVj
aFJlY29nbml6ZXIuaCIKLSNpbmNsdWRlICJXZWJUYXNrLmgiCi0jaW5jbHVkZSA8d3RmL0NvbXBp
bGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5k
bGU7Ci1jbGFzcyBXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtczsKLWNsYXNzIFdlYlNwZWVjaFJl
Y29nbml6ZXJDbGllbnQ7Ci19Ci0KLWNsYXNzIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyIDogcHVi
bGljIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI+IGNyZWF0ZSgpOwotICAgIH5Nb2NrV2Vi
U3BlZWNoUmVjb2duaXplcigpOwotCi0gICAgLy8gV2ViU3BlZWNoUmVjb2duaXplciBpbXBsZW1l
bnRhdGlvbjoKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoY29uc3QgV2ViS2l0OjpXZWJTcGVlY2hS
ZWNvZ25pdGlvbkhhbmRsZSYsIGNvbnN0IFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25QYXJh
bXMmLCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgc3RvcChjb25zdCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxl
JiwgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KikgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIGFib3J0KGNvbnN0IFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUm
LCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqKSBPVkVSUklERTsKLQotICAgIC8v
IE1ldGhvZHMgYWNjZXNzZWQgYnkgbGF5b3V0IHRlc3RzOgotICAgIHZvaWQgYWRkTW9ja1Jlc3Vs
dChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgdHJhbnNjcmlwdCwgZmxvYXQgY29uZmlkZW5jZSk7
Ci0gICAgdm9pZCBzZXRFcnJvcihjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZXJyb3IsIGNvbnN0
IFdlYktpdDo6V2ViU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBib29sIHdhc0Fib3J0ZWQoKSBjb25z
dCB7IHJldHVybiBtX3dhc0Fib3J0ZWQ7IH0KLQotICAgIC8vIE1ldGhvZHMgYWNjZXNzZWQgZnJv
bSBUYXNrIG9iamVjdHM6Ci0gICAgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KiBj
bGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQotICAgIFdlYktpdDo6V2ViU3BlZWNoUmVjb2du
aXRpb25IYW5kbGUmIGhhbmRsZSgpIHsgcmV0dXJuIG1faGFuZGxlOyB9Ci0gICAgV2ViVGVzdFJ1
bm5lcjo6V2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1fdGFza0xpc3Q7IH0KLQot
ICAgIGNsYXNzIFRhc2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgVGFzayhNb2NrV2ViU3BlZWNo
UmVjb2duaXplciogcmVjb2duaXplcikgOiBtX3JlY29nbml6ZXIocmVjb2duaXplcikgeyB9Ci0g
ICAgICAgIHZpcnR1YWwgflRhc2soKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJ1bigpID0g
MDsKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBtX3Jl
Y29nbml6ZXI7Ci0gICAgfTsKLQotcHJpdmF0ZToKLSAgICBNb2NrV2ViU3BlZWNoUmVjb2duaXpl
cigpOwotICAgIHZvaWQgc3RhcnRUYXNrUXVldWUoKTsKLSAgICB2b2lkIGNsZWFyVGFza1F1ZXVl
KCk7Ci0KLSAgICBXZWJUZXN0UnVubmVyOjpXZWJUYXNrTGlzdCBtX3Rhc2tMaXN0OwotICAgIFdl
YktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUgbV9oYW5kbGU7Ci0gICAgV2ViS2l0OjpX
ZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KiBtX2NsaWVudDsKLSAgICBWZWN0b3I8V2ViS2l0OjpX
ZWJTdHJpbmc+IG1fbW9ja1RyYW5zY3JpcHRzOwotICAgIFZlY3RvcjxmbG9hdD4gbV9tb2NrQ29u
ZmlkZW5jZXM7Ci0gICAgYm9vbCBtX3dhc0Fib3J0ZWQ7Ci0KLSAgICAvLyBRdWV1ZSBvZiB0YXNr
cyB0byBiZSBydW4uCi0gICAgVmVjdG9yPE93blB0cjxUYXNrPiA+IG1fdGFza1F1ZXVlOwotICAg
IGJvb2wgbV90YXNrUXVldWVSdW5uaW5nOwotCi0gICAgLy8gVGFzayBmb3Igc3RlcHBpbmcgdGhl
IHF1ZXVlLgotICAgIGNsYXNzIFN0ZXBUYXNrIDogcHVibGljIFdlYlRlc3RSdW5uZXI6OldlYk1l
dGhvZFRhc2s8TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IFN0ZXBUYXNrKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBvYmplY3QpIDogV2ViVGVzdFJ1bm5l
cjo6V2ViTWV0aG9kVGFzazxNb2NrV2ViU3BlZWNoUmVjb2duaXplcj4ob2JqZWN0KSB7IH0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSBPVkVSUklERTsKLSAgICB9OwotfTsKLQot
I2VuZGlmIC8vIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCi0KLSNlbmRpZiAvLyBNb2NrV2ViU3Bl
ZWNoUmVjb2duaXplcl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0RGVsZWdhdGUuaCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3REZWxlZ2F0ZS5oCmluZGV4IDA3
NzhlYzFmZDU4MjdjYzExYzJkMWVlYTQ1MjNiMTY0YjdjYjdhNzMuLjVkN2I4ZGE3NTU5MGVjZmY1
YzFmN2IzMDVkZDhiNzQxMDU3NTFhNmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3REZWxlZ2F0ZS5oCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3REZWxlZ2F0
ZS5oCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKLWNsYXNzIFdlYkRldmljZU9yaWVudGF0aW9uOwogY2xhc3MgV2ViR2FtZXBhZHM7CiBj
bGFzcyBXZWJIaXN0b3J5SXRlbTsKIHN0cnVjdCBXZWJSZWN0OwpAQCAtODQsMjggKzgzLDEyIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZXB0QWxsQ29va2llcyhib29sKSB7IH0K
ICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIHBhdGhUb0xvY2FsUmVzb3VyY2UoY29uc3Qgc3RkOjpz
dHJpbmcmIHJlc291cmNlKSB7IHJldHVybiBzdGQ6OnN0cmluZygpOyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldExvY2FsZShjb25zdCBzdGQ6OnN0cmluZyYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBz
ZXREZXZpY2VPcmllbnRhdGlvbihXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0aW9uJikgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZEFjcXVpcmVQb2ludGVyTG9jaygpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBkaWROb3RBY3F1aXJlUG9pbnRlckxvY2soKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlk
TG9zZVBvaW50ZXJMb2NrKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBvaW50ZXJMb2NrV2ls
bFJlc3BvbmRBc3luY2hyb25vdXNseSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQb2ludGVy
TG9ja1dpbGxGYWlsU3luY2hyb25vdXNseSgpIHsgfQotICAgIHZpcnR1YWwgaW50IG51bWJlck9m
UGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSwgZG91YmxlLCBkb3Vi
bGUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZh
aWxhYmxlRXJyb3IoY29uc3Qgc3RkOjpzdHJpbmcmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRk
TW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IHN0ZDo6c3RyaW5nJiwgZG91YmxlLCBjb25zdCBz
dGQ6OnN0cmluZyYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRNb2NrU3BlZWNoSW5wdXREdW1w
UmVjdChib29sKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkTW9ja1NwZWVjaFJlY29nbml0aW9u
UmVzdWx0KGNvbnN0IHN0ZDo6c3RyaW5nJiwgZG91YmxlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IoY29uc3Qgc3RkOjpzdHJpbmcmLCBjb25zdCBz
dGQ6OnN0cmluZyYpIHsgfQotICAgIHZpcnR1YWwgYm9vbCB3YXNNb2NrU3BlZWNoUmVjb2duaXRp
b25BYm9ydGVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgdGVzdEZpbmlz
aGVkKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHRlc3RUaW1lZE91dCgpIHsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc0JlaW5nRGVidWdnZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
aW50IGxheW91dFRlc3RUaW1lb3V0KCkgeyByZXR1cm4gMzAgKiAxMDAwOyB9CiAgICAgdmlydHVh
bCB2b2lkIGNsb3NlUmVtYWluaW5nV2luZG93cygpIHsgfQogICAgIHZpcnR1YWwgaW50IG5hdmln
YXRpb25FbnRyeUNvdW50KCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IHdpbmRvd0Nv
dW50KCkgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBnb1RvT2Zmc2V0KGludCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHJlbG9hZCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJM
Rm9yRnJhbWUoY29uc3QgV2ViS2l0OjpXZWJVUkwmLCBjb25zdCBzdGQ6OnN0cmluZyYpIHsgfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJs
aWMvV2ViVGVzdFByb3h5LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3B1YmxpYy9XZWJUZXN0UHJveHkuaAppbmRleCA1ZjgxYzMyMzYwNjYyZDJlNWNlNTk5YmY0
MmE2YzIyMjE4YmFkMjc2Li5jYjQwNjcyNTdkMmVmZWE2YmZlODU5ZTk4OTZlNWU4MWRhZmUyNDJi
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1
YmxpYy9XZWJUZXN0UHJveHkuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UHJveHkuaApAQCAtNTEsMTQgKzUxLDIxIEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogY2xhc3MgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDsKIGNsYXNzIFdlYkNh
Y2hlZFVSTFJlcXVlc3Q7CiBjbGFzcyBXZWJEYXRhU291cmNlOworY2xhc3MgV2ViRGV2aWNlT3Jp
ZW50YXRpb25DbGllbnQ7CitjbGFzcyBXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2s7CiBj
bGFzcyBXZWJEcmFnRGF0YTsKIGNsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViR2VvbG9jYXRpb25D
bGllbnQ7CitjbGFzcyBXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2s7CiBjbGFzcyBXZWJJbWFnZTsK
IGNsYXNzIFdlYk5vZGU7CiBjbGFzcyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI7CiBjbGFzcyBX
ZWJQbHVnaW47CiBjbGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTsKK2NsYXNzIFdlYlNwZWVjaElucHV0Q29udHJvbGxlcjsKK2NsYXNzIFdlYlNwZWVjaElucHV0
TGlzdGVuZXI7CitjbGFzcyBXZWJTcGVlY2hSZWNvZ25pemVyOwogY2xhc3MgV2ViU3BlbGxDaGVj
a0NsaWVudDsKIGNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdlYlVSTDsKQEAgLTc4LDYgKzg1LDgg
QEAgY2xhc3MgU2tDYW52YXM7CiAKIG5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKIAorY2xhc3Mg
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjsKK2NsYXNzIE1vY2tXZWJTcGVlY2hSZWNvZ25p
emVyOwogY2xhc3MgU3BlbGxDaGVja0NsaWVudDsKIGNsYXNzIFRlc3RJbnRlcmZhY2VzOwogY2xh
c3MgV2ViVGVzdERlbGVnYXRlOwpAQCAtOTksMTAgKzEwOCwxNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldExvZ0NvbnNvbGVPdXRwdXQoYm9vbCBlbmFibGVkKTsKIAorI2lmIFdFQlRFU1RSVU5O
RVJfSU1QTEVNRU5UQVRJT04KICAgICB2b2lkIGRpc3BsYXkoKTsKICAgICB2b2lkIGRpc3BsYXlJ
bnZhbGlkYXRlZFJlZ2lvbigpOwogICAgIHZvaWQgZGlzY2FyZEJhY2tpbmdTdG9yZSgpOwogCisg
ICAgV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2sqIGRldmljZU9yaWVudGF0
aW9uQ2xpZW50TW9jaygpOworICAgIFdlYktpdDo6V2ViR2VvbG9jYXRpb25DbGllbnRNb2NrKiBn
ZW9sb2NhdGlvbkNsaWVudE1vY2soKTsKKyAgICBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
KiBzcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrKCk7CisgICAgTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXIqIHNwZWVjaFJlY29nbml6ZXJNb2NrKCk7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFdl
YlRlc3RQcm94eUJhc2UoKTsKICAgICB+V2ViVGVzdFByb3h5QmFzZSgpOwpAQCAtMTM3LDYgKzE1
MywxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgV2ViS2l0OjpXZWJVc2VyTWVkaWFDbGllbnQqIHVzZXJN
ZWRpYUNsaWVudCgpOwogICAgIHZvaWQgcHJpbnRQYWdlKFdlYktpdDo6V2ViRnJhbWUqKTsKICAg
ICBXZWJLaXQ6OldlYk5vdGlmaWNhdGlvblByZXNlbnRlciogbm90aWZpY2F0aW9uUHJlc2VudGVy
KCk7CisgICAgV2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudCogZ2VvbG9jYXRpb25DbGllbnQo
KTsKKyAgICBXZWJLaXQ6OldlYlNwZWVjaElucHV0Q29udHJvbGxlciogc3BlZWNoSW5wdXRDb250
cm9sbGVyKFdlYktpdDo6V2ViU3BlZWNoSW5wdXRMaXN0ZW5lciopOworICAgIFdlYktpdDo6V2Vi
U3BlZWNoUmVjb2duaXplciogc3BlZWNoUmVjb2duaXplcigpOworICAgIFdlYktpdDo6V2ViRGV2
aWNlT3JpZW50YXRpb25DbGllbnQqIGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCk7CisgICAgYm9v
bCByZXF1ZXN0UG9pbnRlckxvY2soKTsKKyAgICB2b2lkIHJlcXVlc3RQb2ludGVyVW5sb2NrKCk7
CisgICAgYm9vbCBpc1BvaW50ZXJMb2NrZWQoKTsKIAogICAgIHZvaWQgd2lsbFBlcmZvcm1DbGll
bnRSZWRpcmVjdChXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJVUkwmIGZyb20s
IGNvbnN0IFdlYktpdDo6V2ViVVJMJiB0bywgZG91YmxlIGludGVydmFsLCBkb3VibGUgZmlyZV90
aW1lKTsKICAgICB2b2lkIGRpZENhbmNlbENsaWVudFJlZGlyZWN0KFdlYktpdDo6V2ViRnJhbWUq
KTsKQEAgLTE5Miw2ICsyMTUsMTIgQEAgcHJpdmF0ZToKICAgICBzdGQ6Om1hcDx1bnNpZ25lZCwg
c3RkOjpzdHJpbmc+IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwOwogCiAgICAgYm9vbCBtX2xvZ0Nv
bnNvbGVPdXRwdXQ7CisKKyAgICBzdGQ6OmF1dG9fcHRyPFdlYktpdDo6V2ViR2VvbG9jYXRpb25D
bGllbnRNb2NrPiBtX2dlb2xvY2F0aW9uQ2xpZW50OworICAgIHN0ZDo6YXV0b19wdHI8V2ViS2l0
OjpXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2s+IG1fZGV2aWNlT3JpZW50YXRpb25DbGll
bnQ7CisgICAgc3RkOjphdXRvX3B0cjxNb2NrV2ViU3BlZWNoUmVjb2duaXplcj4gbV9zcGVlY2hS
ZWNvZ25pemVyOworICAgIHN0ZDo6YXV0b19wdHI8TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxl
cj4gbV9zcGVlY2hJbnB1dENvbnRyb2xsZXI7CisKIHByaXZhdGU6CiAgICAgV2ViVGVzdFByb3h5
QmFzZShXZWJUZXN0UHJveHlCYXNlJik7CiAgICAgV2ViVGVzdFByb3h5QmFzZSYgb3BlcmF0b3I9
KGNvbnN0IFdlYlRlc3RQcm94eUJhc2UmKTsKQEAgLTM1OCw2ICszODcsMzQgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIFdlYlRlc3RQcm94eUJhc2U6Om5vdGlmaWNhdGlvblByZXNl
bnRlcigpOwogICAgIH0KKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViR2VvbG9jYXRpb25DbGllbnQq
IGdlb2xvY2F0aW9uQ2xpZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJUZXN0UHJveHlC
YXNlOjpnZW9sb2NhdGlvbkNsaWVudCgpOworICAgIH0KKyAgICB2aXJ0dWFsIFdlYktpdDo6V2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyKiBzcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViS2l0OjpXZWJT
cGVlY2hJbnB1dExpc3RlbmVyKiBsaXN0ZW5lcikKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJU
ZXN0UHJveHlCYXNlOjpzcGVlY2hJbnB1dENvbnRyb2xsZXIobGlzdGVuZXIpOworICAgIH0KKyAg
ICB2aXJ0dWFsIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplciogc3BlZWNoUmVjb2duaXplcigp
CisgICAgeworICAgICAgICByZXR1cm4gV2ViVGVzdFByb3h5QmFzZTo6c3BlZWNoUmVjb2duaXpl
cigpOworICAgIH0KKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb25DbGll
bnQqIGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJU
ZXN0UHJveHlCYXNlOjpkZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpOworICAgIH0KKyAgICB2aXJ0
dWFsIGJvb2wgcmVxdWVzdFBvaW50ZXJMb2NrKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJU
ZXN0UHJveHlCYXNlOjpyZXF1ZXN0UG9pbnRlckxvY2soKTsKKyAgICB9CisgICAgdmlydHVhbCB2
b2lkIHJlcXVlc3RQb2ludGVyVW5sb2NrKCkKKyAgICB7CisgICAgICAgIFdlYlRlc3RQcm94eUJh
c2U6OnJlcXVlc3RQb2ludGVyVW5sb2NrKCk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Bv
aW50ZXJMb2NrZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYlRlc3RQcm94eUJhc2U6Omlz
UG9pbnRlckxvY2tlZCgpOworICAgIH0KIAogICAgIC8vIFdlYkZyYW1lQ2xpZW50IGltcGxlbWVu
dGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdlYktp
dDo6V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYgZnJvbSwgY29uc3QgV2Vi
S2l0OjpXZWJVUkwmIHRvLCBkb3VibGUgaW50ZXJ2YWwsIGRvdWJsZSBmaXJlVGltZSkKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzRkZjMyYTgyYzc0ZDc2ZGQwY2UxNjA3NDBiMmRmYWQ5YjFkZTZiZAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01v
Y2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXIuaCIKKworI2luY2x1ZGUgIldlYlNwZWVjaElucHV0TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJX
ZWJUZXN0RGVsZWdhdGUuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KKworI2lmIEVOQUJMRV9JTlBVVF9TUEVFQ0gKKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBX
ZWJUZXN0UnVubmVyIHsKKworbmFtZXNwYWNlIHsKKworV2ViU3BlZWNoSW5wdXRSZXN1bHRBcnJh
eSBtYWtlUmVjdFJlc3VsdChjb25zdCBXZWJSZWN0JiByZWN0KQoreworICAgIGNoYXIgYnVmZmVy
WzEwMF07CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVkLCVkLCVkLCVk
IiwgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKKworICAgIFdlYlNw
ZWVjaElucHV0UmVzdWx0IHJlczsKKyAgICByZXMuYXNzaWduKFdlYlN0cmluZzo6ZnJvbVVURjgo
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlcikpLCAxLjApOworCisgICAgV2ViU3BlZWNo
SW5wdXRSZXN1bHRBcnJheSByZXN1bHRzOworICAgIHJlc3VsdHMuYXNzaWduKCZyZXMsIDEpOwor
ICAgIHJldHVybiByZXN1bHRzOworfQorCit9CisKK01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViU3BlZWNoSW5wdXRMaXN0ZW5lciog
bGlzdGVuZXIpCisgICAgOiBtX2xpc3RlbmVyKGxpc3RlbmVyKQorICAgICwgbV9zcGVlY2hUYXNr
KDApCisgICAgLCBtX3JlY29yZGluZyhmYWxzZSkKKyAgICAsIG1fcmVxdWVzdElkKC0xKQorICAg
ICwgbV9kdW1wUmVjdChmYWxzZSkKKyAgICAsIG1fZGVsZWdhdGUoMCkKK3sKK30KKworTW9ja1dl
YlNwZWVjaElucHV0Q29udHJvbGxlcjo6fk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIoKQor
eworfQorCit2b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnNldERlbGVnYXRlKFdl
YlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCit7CisgICAgbV9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwor
fQorCit2b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmFkZE1vY2tSZWNvZ25pdGlv
blJlc3VsdChjb25zdCBXZWJTdHJpbmcmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIGNvbnN0
IFdlYlN0cmluZyYgbGFuZ3VhZ2UpCit7CisgICAgV2ViU3BlZWNoSW5wdXRSZXN1bHQgcmVzOwor
ICAgIHJlcy5hc3NpZ24ocmVzdWx0LCBjb25maWRlbmNlKTsKKworICAgIGlmIChsYW5ndWFnZS5p
c0VtcHR5KCkpCisgICAgICAgIG1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2UucHVzaF9iYWNrKHJl
cyk7CisgICAgZWxzZSB7CisgICAgICAgIHN0cmluZyBsYW5nU3RyaW5nID0gbGFuZ3VhZ2UudXRm
OCgpOworICAgICAgICBpZiAobV9yZWNvZ25pdGlvblJlc3VsdHMuZmluZChsYW5nU3RyaW5nKSA9
PSBtX3JlY29nbml0aW9uUmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgIG1fcmVjb2duaXRpb25S
ZXN1bHRzW2xhbmdTdHJpbmddID0gdmVjdG9yPFdlYlNwZWVjaElucHV0UmVzdWx0PigpOworICAg
ICAgICBtX3JlY29nbml0aW9uUmVzdWx0c1tsYW5nU3RyaW5nXS5wdXNoX2JhY2socmVzKTsKKyAg
ICB9Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6c2V0RHVtcFJlY3Qo
Ym9vbCBkdW1wUmVjdCkKK3sKKyAgICBtX2R1bXBSZWN0ID0gZHVtcFJlY3Q7Cit9CisKK3ZvaWQg
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6Y2xlYXJSZXN1bHRzKCkKK3sKKyAgICBtX3Jl
c3VsdHNGb3JFbXB0eUxhbmd1YWdlLmNsZWFyKCk7CisgICAgbV9yZWNvZ25pdGlvblJlc3VsdHMu
Y2xlYXIoKTsKKyAgICBtX2R1bXBSZWN0ID0gZmFsc2U7Cit9CisKK2Jvb2wgTW9ja1dlYlNwZWVj
aElucHV0Q29udHJvbGxlcjo6c3RhcnRSZWNvZ25pdGlvbihpbnQgcmVxdWVzdElkLCBjb25zdCBX
ZWJSZWN0JiBlbGVtZW50UmVjdCwgY29uc3QgV2ViU3RyaW5nJiBsYW5ndWFnZSwgY29uc3QgV2Vi
U3RyaW5nJiBncmFtbWFyLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luKQoreworICAg
IGlmIChtX3NwZWVjaFRhc2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcmVxdWVz
dElkID0gcmVxdWVzdElkOworICAgIG1fcmVxdWVzdFJlY3QgPSBlbGVtZW50UmVjdDsKKyAgICBt
X3JlY29yZGluZyA9IHRydWU7CisgICAgbV9sYW5ndWFnZSA9IGxhbmd1YWdlLnV0ZjgoKTsKKwor
ICAgIG1fc3BlZWNoVGFzayA9IG5ldyBTcGVlY2hUYXNrKHRoaXMpOworICAgIG1fZGVsZWdhdGUt
PnBvc3RUYXNrKG1fc3BlZWNoVGFzayk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpjYW5jZWxSZWNvZ25pdGlvbihpbnQgcmVxdWVz
dElkKQoreworICAgIGlmIChtX3NwZWVjaFRhc2spIHsKKyAgICAgICAgV0VCS0lUX0FTU0VSVChy
ZXF1ZXN0SWQgPT0gbV9yZXF1ZXN0SWQpOworCisgICAgICAgIG1fc3BlZWNoVGFzay0+c3RvcCgp
OworICAgICAgICBtX3JlY29yZGluZyA9IGZhbHNlOworICAgICAgICBtX2xpc3RlbmVyLT5kaWRD
b21wbGV0ZVJlY29nbml0aW9uKG1fcmVxdWVzdElkKTsKKyAgICAgICAgbV9yZXF1ZXN0SWQgPSAw
OworICAgIH0KK30KKwordm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpzdG9wUmVj
b3JkaW5nKGludCByZXF1ZXN0SWQpCit7CisgICAgV0VCS0lUX0FTU0VSVChyZXF1ZXN0SWQgPT0g
bV9yZXF1ZXN0SWQpOworICAgIGlmIChtX3NwZWVjaFRhc2sgJiYgbV9yZWNvcmRpbmcpIHsKKyAg
ICAgICAgbV9zcGVlY2hUYXNrLT5zdG9wKCk7CisgICAgICAgIHNwZWVjaFRhc2tGaXJlZCgpOwor
ICAgIH0KK30KKwordm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpzcGVlY2hUYXNr
RmlyZWQoKQoreworICAgIGlmIChtX3JlY29yZGluZykgeworICAgICAgICBtX3JlY29yZGluZyA9
IGZhbHNlOworICAgICAgICBtX2xpc3RlbmVyLT5kaWRDb21wbGV0ZVJlY29yZGluZyhtX3JlcXVl
c3RJZCk7CisKKyAgICAgICAgbV9zcGVlY2hUYXNrID0gbmV3IFNwZWVjaFRhc2sodGhpcyk7Cisg
ICAgICAgIG1fZGVsZWdhdGUtPnBvc3RUYXNrKG1fc3BlZWNoVGFzayk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYm9vbCBub1Jlc3VsdHNGb3VuZCA9IGZhbHNlOworICAgICAgICAvLyBXZSB0YWtl
IGEgY29weSBvZiB0aGUgcmVxdWVzdElkIGhlcmUgc28gdGhhdCBpZiBzY3JpcHRzIGRlc3Ryb3ll
ZCB0aGUgaW5wdXQgZWxlbWVudAorICAgICAgICAvLyBpbnNpZGUgb25lIG9mIHRoZSBjYWxsYmFj
a3MgYmVsb3csIHdlJ2xsIHN0aWxsIGtub3cgd2hhdCB0aGlzIHNlc3Npb24ncyByZXF1ZXN0SWQg
d2FzLgorICAgICAgICBpbnQgcmVxdWVzdElkID0gbV9yZXF1ZXN0SWQ7CisgICAgICAgIG1fcmVx
dWVzdElkID0gMDsKKworICAgICAgICBpZiAobV9kdW1wUmVjdCkgeworICAgICAgICAgICAgbV9s
aXN0ZW5lci0+c2V0UmVjb2duaXRpb25SZXN1bHQocmVxdWVzdElkLCBtYWtlUmVjdFJlc3VsdCht
X3JlcXVlc3RSZWN0KSk7CisgICAgICAgIH0gZWxzZSBpZiAobV9sYW5ndWFnZS5lbXB0eSgpKSB7
CisgICAgICAgICAgICAvLyBFbXB0eSBsYW5ndWFnZSBjYXNlIG11c3QgYmUgaGFuZGxlZCBzZXBh
cmF0ZWx5IHRvIGF2b2lkIHByb2JsZW1zIHdpdGggSGFzaE1hcCBhbmQgZW1wdHkga2V5cy4KKyAg
ICAgICAgICAgIGlmICghbV9yZXN1bHRzRm9yRW1wdHlMYW5ndWFnZS5lbXB0eSgpKQorICAgICAg
ICAgICAgICAgIG1fbGlzdGVuZXItPnNldFJlY29nbml0aW9uUmVzdWx0KHJlcXVlc3RJZCwgbV9y
ZXN1bHRzRm9yRW1wdHlMYW5ndWFnZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbm9SZXN1bHRzRm91bmQgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKG1fcmVjb2duaXRpb25SZXN1bHRzLmZpbmQobV9sYW5ndWFnZSkgIT0gbV9yZWNvZ25pdGlv
blJlc3VsdHMuZW5kKCkpCisgICAgICAgICAgICAgICAgbV9saXN0ZW5lci0+c2V0UmVjb2duaXRp
b25SZXN1bHQocmVxdWVzdElkLCBtX3JlY29nbml0aW9uUmVzdWx0c1ttX2xhbmd1YWdlXSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbm9SZXN1bHRzRm91bmQgPSB0cnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vUmVzdWx0c0ZvdW5kKSB7CisgICAgICAgICAgICAv
LyBDYW4ndCBhdm9pZCBzZXR0aW5nIGEgcmVzdWx0IGV2ZW4gaWYgbm8gcmVzdWx0IHdhcyBzZXQg
Zm9yIHRoZSBnaXZlbiBsYW5ndWFnZS4KKyAgICAgICAgICAgIC8vIFRoaXMgd291bGQgYXZvaWQg
Z2VuZXJhdGluZyB0aGUgZXZlbnRzIHVzZWQgdG8gY2hlY2sgdGhlIHJlc3VsdHMgYW5kIHRoZSB0
ZXN0IHdvdWxkIHRpbWVvdXQuCisgICAgICAgICAgICBzdHJpbmcgZXJyb3IoImVycm9yOiBubyBy
ZXN1bHQgZm91bmQgZm9yIGxhbmd1YWdlICciKTsKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCht
X2xhbmd1YWdlKTsKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCgiJyIpOworCisgICAgICAgICAg
ICBXZWJTcGVlY2hJbnB1dFJlc3VsdCByZXM7CisgICAgICAgICAgICByZXMuYXNzaWduKFdlYlN0
cmluZzo6ZnJvbVVURjgoZXJyb3IpLCAxLjApOworCisgICAgICAgICAgICB2ZWN0b3I8V2ViU3Bl
ZWNoSW5wdXRSZXN1bHQ+IHJlc3VsdHM7CisgICAgICAgICAgICByZXN1bHRzLnB1c2hfYmFjayhy
ZXMpOworCisgICAgICAgICAgICBtX2xpc3RlbmVyLT5zZXRSZWNvZ25pdGlvblJlc3VsdChyZXF1
ZXN0SWQsIHJlc3VsdHMpOworICAgICAgICB9CisgICAgfQorfQorCitNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyOjpTcGVlY2hUYXNrOjpTcGVlY2hUYXNrKE1vY2tXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXIqIG1vY2spCisgICAgOiBXZWJNZXRob2RUYXNrPE1vY2tXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXI+OjpXZWJNZXRob2RUYXNrKG1vY2spCit7Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVj
aElucHV0Q29udHJvbGxlcjo6U3BlZWNoVGFzazo6c3RvcCgpCit7CisgICAgbV9vYmplY3QtPm1f
c3BlZWNoVGFzayA9IDA7CisgICAgY2FuY2VsKCk7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3Zv
aWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6U3BlZWNoVGFzazo6cnVuSWZWYWxpZCgp
Cit7CisgICAgbV9vYmplY3QtPm1fc3BlZWNoVGFzayA9IDA7CisgICAgbV9vYmplY3QtPnNwZWVj
aFRhc2tGaXJlZCgpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaElucHV0Q29udHJv
bGxlci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9j
a1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0MDM0ZTM2N2VhNDY3ZGU4
NGI3N2E4NTVhNTgzMzE5Y2I1MDkyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlcl9oCisjZGVmaW5lIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXJfaAorCisj
aW5jbHVkZSAiVGVzdENvbW1vbi5oIgorI2luY2x1ZGUgIldlYlNwZWVjaElucHV0Q29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIldlYlNwZWVjaElucHV0UmVzdWx0LmgiCisjaW5jbHVkZSAiV2ViVGFz
ay5oIgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViUmVjdC5oPgorI2luY2x1
ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xh
c3MgV2ViU2VjdXJpdHlPcmlnaW47CitjbGFzcyBXZWJTcGVlY2hJbnB1dExpc3RlbmVyOworY2xh
c3MgV2ViU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7CisKK2NsYXNzIFdl
YlRlc3REZWxlZ2F0ZTsKKworY2xhc3MgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlciA6IHB1
YmxpYyBXZWJLaXQ6OldlYlNwZWVjaElucHV0Q29udHJvbGxlciB7CitwdWJsaWM6CisgICAgZXhw
bGljaXQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcihXZWJLaXQ6OldlYlNwZWVjaElucHV0
TGlzdGVuZXIqKTsKKyAgICB+TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcigpOworCisgICAg
dm9pZCBhZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHJl
c3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBsYW5ndWFn
ZSk7CisgICAgdm9pZCBzZXREdW1wUmVjdChib29sKTsKKyAgICB2b2lkIGNsZWFyUmVzdWx0cygp
OworICAgIHZvaWQgc2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKik7CisKKyAgICAvLyBXZWJT
cGVlY2hJbnB1dENvbnRyb2xsZXIgaW1wbGVtZW50YXRpb246CisgICAgdmlydHVhbCBib29sIHN0
YXJ0UmVjb2duaXRpb24oaW50IHJlcXVlc3RJZCwgY29uc3QgV2ViS2l0OjpXZWJSZWN0JiBlbGVt
ZW50UmVjdCwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBXZWJLaXQ6
OldlYlN0cmluZyYgZ3JhbW1hciwgY29uc3QgV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbiYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxSZWNvZ25pdGlvbihpbnQgcmVxdWVzdElk
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFJlY29yZGluZyhpbnQgcmVxdWVzdElk
KSBPVkVSUklERTsKKworICAgIFdlYlRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rh
c2tMaXN0OyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBzcGVlY2hUYXNrRmlyZWQoKTsKKworICAg
IGNsYXNzIFNwZWVjaFRhc2sgOiBwdWJsaWMgV2ViTWV0aG9kVGFzazxNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyPiB7CisgICAgcHVibGljOgorICAgICAgICBTcGVlY2hUYXNrKE1vY2tXZWJT
cGVlY2hJbnB1dENvbnRyb2xsZXIqKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7CisKKyAgICBwcml2
YXRlOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIE9WRVJSSURFOworICAgIH07
CisKKyAgICBXZWJLaXQ6OldlYlNwZWVjaElucHV0TGlzdGVuZXIqIG1fbGlzdGVuZXI7CisKKyAg
ICBXZWJUYXNrTGlzdCBtX3Rhc2tMaXN0OworICAgIFNwZWVjaFRhc2sqIG1fc3BlZWNoVGFzazsK
KworICAgIGJvb2wgbV9yZWNvcmRpbmc7CisgICAgaW50IG1fcmVxdWVzdElkOworICAgIFdlYktp
dDo6V2ViUmVjdCBtX3JlcXVlc3RSZWN0OworICAgIHN0ZDo6c3RyaW5nIG1fbGFuZ3VhZ2U7CisK
KyAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8V2ViS2l0OjpXZWJTcGVlY2hJ
bnB1dFJlc3VsdD4gPiBtX3JlY29nbml0aW9uUmVzdWx0czsKKyAgICBzdGQ6OnZlY3RvcjxXZWJL
aXQ6OldlYlNwZWVjaElucHV0UmVzdWx0PiBtX3Jlc3VsdHNGb3JFbXB0eUxhbmd1YWdlOworICAg
IGJvb2wgbV9kdW1wUmVjdDsKKworICAgIFdlYlRlc3REZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKK307
CisKK30KKworI2VuZGlmIC8vIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXJfaApkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dl
YlNwZWVjaFJlY29nbml6ZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2NjA4
MTIxMzgyZDc5YTU3NjcxNDUxM2MyNDJjYzQwYjFlMGU0NDgKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNo
UmVjb2duaXplci5jcHAKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaCIKKworI2luY2x1ZGUgIldl
YlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoUmVjb2duaXpl
ckNsaWVudC5oIgorI2luY2x1ZGUgIldlYlRlc3REZWxlZ2F0ZS5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYlRlc3RSdW5u
ZXIgeworCituYW1lc3BhY2UgeworCisvLyBUYXNrIGNsYXNzIGZvciBjYWxsaW5nIGEgY2xpZW50
IGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgdGFrZSBhbnkgcGFyYW1ldGVycy4KK3R5cGVkZWYgdm9p
ZCAoV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6KkNsaWVudEZ1bmN0aW9uUG9pbnRlcikoY29u
c3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmKTsKK2NsYXNzIENsaWVudENhbGxUYXNrIDog
cHVibGljIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrIHsKK3B1YmxpYzoKKyAgICBDbGll
bnRDYWxsVGFzayhNb2NrV2ViU3BlZWNoUmVjb2duaXplciogbW9jaywgQ2xpZW50RnVuY3Rpb25Q
b2ludGVyIGZ1bmN0aW9uKQorICAgICAgICA6IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNr
KG1vY2spCisgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHJ1bigpIE9WRVJSSURFIHsgKG1fcmVjb2duaXplci0+Y2xpZW50KCkt
PiptX2Z1bmN0aW9uKShtX3JlY29nbml6ZXItPmhhbmRsZSgpKTsgfQorCitwcml2YXRlOgorICAg
IENsaWVudEZ1bmN0aW9uUG9pbnRlciBtX2Z1bmN0aW9uOworfTsKKworLy8gVGFzayBmb3IgZGVs
aXZlcmluZyBhIHJlc3VsdCBldmVudC4KK2NsYXNzIFJlc3VsdFRhc2sgOiBwdWJsaWMgTW9ja1dl
YlNwZWVjaFJlY29nbml6ZXI6OlRhc2sgeworcHVibGljOgorICAgIFJlc3VsdFRhc2soTW9ja1dl
YlNwZWVjaFJlY29nbml6ZXIqIG1vY2ssIGNvbnN0IFdlYlN0cmluZyB0cmFuc2NyaXB0LCBmbG9h
dCBjb25maWRlbmNlKQorICAgICAgICA6IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrKG1v
Y2spCisgICAgICAgICwgbV90cmFuc2NyaXB0KHRyYW5zY3JpcHQpCisgICAgICAgICwgbV9jb25m
aWRlbmNlKGNvbmZpZGVuY2UpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBydW4o
KSBPVkVSUklERQorICAgIHsKKyAgICAgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gdHJhbnNjcmlw
dHMoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSk7CisgICAgICAgIFdlYlZlY3RvcjxmbG9hdD4gY29u
ZmlkZW5jZXMoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSk7CisgICAgICAgIHRyYW5zY3JpcHRzWzBd
ID0gbV90cmFuc2NyaXB0OworICAgICAgICBjb25maWRlbmNlc1swXSA9IG1fY29uZmlkZW5jZTsK
KyAgICAgICAgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiBmaW5hbFJlc3Vs
dHMoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSk7CisgICAgICAgIFdlYlZlY3RvcjxXZWJTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdD4gaW50ZXJpbVJlc3VsdHM7CisgICAgICAgIGZpbmFsUmVzdWx0c1sw
XS5hc3NpZ24odHJhbnNjcmlwdHMsIGNvbmZpZGVuY2VzLCB0cnVlKTsKKworICAgICAgICBtX3Jl
Y29nbml6ZXItPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzdWx0cyhtX3JlY29nbml6ZXItPmhhbmRs
ZSgpLCBmaW5hbFJlc3VsdHMsIGludGVyaW1SZXN1bHRzKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgV2ViU3RyaW5nIG1fdHJhbnNjcmlwdDsKKyAgICBmbG9hdCBtX2NvbmZpZGVuY2U7Cit9Owor
CisvLyBUYXNrIGZvciBkZWxpdmVyaW5nIGEgbm9tYXRjaCBldmVudC4KK2NsYXNzIE5vTWF0Y2hU
YXNrIDogcHVibGljIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrIHsKK3B1YmxpYzoKKyAg
ICBOb01hdGNoVGFzayhNb2NrV2ViU3BlZWNoUmVjb2duaXplciogbW9jaykgOiBNb2NrV2ViU3Bl
ZWNoUmVjb2duaXplcjo6VGFzayhtb2NrKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgT1ZF
UlJJREUgeyBtX3JlY29nbml6ZXItPmNsaWVudCgpLT5kaWRSZWNlaXZlTm9NYXRjaChtX3JlY29n
bml6ZXItPmhhbmRsZSgpLCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCgpKTsgfQorfTsKKwor
Ly8gVGFzayBmb3IgZGVsaXZlcmluZyBhbiBlcnJvciBldmVudC4KK2NsYXNzIEVycm9yVGFzayA6
IHB1YmxpYyBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6VGFzayB7CitwdWJsaWM6CisgICAgRXJy
b3JUYXNrKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBtb2NrLCBXZWJTcGVlY2hSZWNvZ25pemVy
Q2xpZW50OjpFcnJvckNvZGUgY29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQorICAgICAg
ICA6IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrKG1vY2spCisgICAgICAgICwgbV9jb2Rl
KGNvZGUpCisgICAgICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBydW4oKSBPVkVSUklERSB7IG1fcmVjb2duaXplci0+Y2xpZW50KCktPmRp
ZFJlY2VpdmVFcnJvcihtX3JlY29nbml6ZXItPmhhbmRsZSgpLCBtX21lc3NhZ2UsIG1fY29kZSk7
IH0KKworcHJpdmF0ZToKKyAgICBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpFcnJvckNvZGUg
bV9jb2RlOworICAgIFdlYlN0cmluZyBtX21lc3NhZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZQor
CitNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIoKQorICAg
IDogbV93YXNBYm9ydGVkKGZhbHNlKQorICAgICwgbV90YXNrUXVldWVSdW5uaW5nKGZhbHNlKQor
ICAgICwgbV9kZWxlZ2F0ZSgwKQoreworfQorCitNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6fk1v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyKCkKK3sKKyAgICBjbGVhclRhc2tRdWV1ZSgpOworfQorCit2
b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUq
IGRlbGVnYXRlKQoreworICAgIG1fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKwordm9pZCBNb2Nr
V2ViU3BlZWNoUmVjb2duaXplcjo6c3RhcnQoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5k
bGUmIGhhbmRsZSwgY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXMmIHBhcmFtcywgV2Vi
U3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KQoreworICAgIG1fd2FzQWJvcnRlZCA9IGZh
bHNlOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1fY2xpZW50ID0gY2xpZW50OworCisg
ICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3Bl
ZWNoUmVjb2duaXplckNsaWVudDo6ZGlkU3RhcnQpKTsKKyAgICBtX3Rhc2tRdWV1ZS5wdXNoX2Jh
Y2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50Ojpk
aWRTdGFydEF1ZGlvKSk7CisgICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBDbGllbnRDYWxs
VGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkU3RhcnRTb3VuZCkpOwor
CisgICAgaWYgKCFtX21vY2tUcmFuc2NyaXB0cy5lbXB0eSgpKSB7CisgICAgICAgIFdFQktJVF9B
U1NFUlQobV9tb2NrVHJhbnNjcmlwdHMuc2l6ZSgpID09IG1fbW9ja0NvbmZpZGVuY2VzLnNpemUo
KSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21vY2tUcmFuc2NyaXB0cy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fdGFza1F1ZXVlLnB1c2hfYmFjayhuZXcgUmVzdWx0
VGFzayh0aGlzLCBtX21vY2tUcmFuc2NyaXB0c1tpXSwgbV9tb2NrQ29uZmlkZW5jZXNbaV0pKTsK
KworICAgICAgICBtX21vY2tUcmFuc2NyaXB0cy5jbGVhcigpOworICAgICAgICBtX21vY2tDb25m
aWRlbmNlcy5jbGVhcigpOworICAgIH0gZWxzZQorICAgICAgICBtX3Rhc2tRdWV1ZS5wdXNoX2Jh
Y2sobmV3IE5vTWF0Y2hUYXNrKHRoaXMpKTsKKworICAgIG1fdGFza1F1ZXVlLnB1c2hfYmFjayhu
ZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZEVu
ZFNvdW5kKSk7CisgICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBDbGllbnRDYWxsVGFzayh0
aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kQXVkaW8pKTsKKyAgICBtX3Rh
c2tRdWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNv
Z25pemVyQ2xpZW50OjpkaWRFbmQpKTsKKworICAgIHN0YXJ0VGFza1F1ZXVlKCk7Cit9CisKK3Zv
aWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0b3AoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRp
b25IYW5kbGUmIGhhbmRsZSwgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KQorewor
ICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1fY2xpZW50ID0gY2xpZW50OworCisgICAgLy8g
RklYTUU6IEltcGxlbWVudC4KKyAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmFib3J0KGNvbnN0IFdlYlNwZWVjaFJlY29n
bml0aW9uSGFuZGxlJiBoYW5kbGUsIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIGNsaWVudCkK
K3sKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKKworICAg
IGNsZWFyVGFza1F1ZXVlKCk7CisgICAgbV93YXNBYm9ydGVkID0gdHJ1ZTsKKyAgICBtX3Rhc2tR
dWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25p
emVyQ2xpZW50OjpkaWRFbmQpKTsKKyAgICBzdGFydFRhc2tRdWV1ZSgpOworfQorCit2b2lkIE1v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyOjphZGRNb2NrUmVzdWx0KGNvbnN0IFdlYlN0cmluZyYgdHJh
bnNjcmlwdCwgZmxvYXQgY29uZmlkZW5jZSkKK3sKKyAgICBtX21vY2tUcmFuc2NyaXB0cy5wdXNo
X2JhY2sodHJhbnNjcmlwdCk7CisgICAgbV9tb2NrQ29uZmlkZW5jZXMucHVzaF9iYWNrKGNvbmZp
ZGVuY2UpOworfQorCit2b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzZXRFcnJvcihjb25z
dCBXZWJTdHJpbmcmIGVycm9yLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgV2Vi
U3BlZWNoUmVjb2duaXplckNsaWVudDo6RXJyb3JDb2RlIGNvZGU7CisgICAgaWYgKGVycm9yID09
ICJPdGhlckVycm9yIikKKyAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6
Ok90aGVyRXJyb3I7CisgICAgZWxzZSBpZiAoZXJyb3IgPT0gIk5vU3BlZWNoRXJyb3IiKQorICAg
ICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6Tm9TcGVlY2hFcnJvcjsKKyAg
ICBlbHNlIGlmIChlcnJvciA9PSAiQWJvcnRlZEVycm9yIikKKyAgICAgICAgY29kZSA9IFdlYlNw
ZWVjaFJlY29nbml6ZXJDbGllbnQ6OkFib3J0ZWRFcnJvcjsKKyAgICBlbHNlIGlmIChlcnJvciA9
PSAiQXVkaW9DYXB0dXJlRXJyb3IiKQorICAgICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXpl
ckNsaWVudDo6QXVkaW9DYXB0dXJlRXJyb3I7CisgICAgZWxzZSBpZiAoZXJyb3IgPT0gIk5ldHdv
cmtFcnJvciIpCisgICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpOZXR3
b3JrRXJyb3I7CisgICAgZWxzZSBpZiAoZXJyb3IgPT0gIk5vdEFsbG93ZWRFcnJvciIpCisgICAg
ICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpOb3RBbGxvd2VkRXJyb3I7Cisg
ICAgZWxzZSBpZiAoZXJyb3IgPT0gIlNlcnZpY2VOb3RBbGxvd2VkRXJyb3IiKQorICAgICAgICBj
b2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6U2VydmljZU5vdEFsbG93ZWRFcnJvcjsK
KyAgICBlbHNlIGlmIChlcnJvciA9PSAiQmFkR3JhbW1hckVycm9yIikKKyAgICAgICAgY29kZSA9
IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OkJhZEdyYW1tYXJFcnJvcjsKKyAgICBlbHNlIGlm
IChlcnJvciA9PSAiTGFuZ3VhZ2VOb3RTdXBwb3J0ZWRFcnJvciIpCisgICAgICAgIGNvZGUgPSBX
ZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpMYW5ndWFnZU5vdFN1cHBvcnRlZEVycm9yOworICAg
IGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJUYXNrUXVldWUoKTsKKyAgICBtX3Rh
c2tRdWV1ZS5wdXNoX2JhY2sobmV3IEVycm9yVGFzayh0aGlzLCBjb2RlLCBtZXNzYWdlKSk7Cisg
ICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3Bl
ZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kKSk7CisgICAgc3RhcnRUYXNrUXVldWUoKTsKK30K
Kwordm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c3RhcnRUYXNrUXVldWUoKQoreworICAg
IGlmIChtX3Rhc2tRdWV1ZVJ1bm5pbmcpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RlbGVnYXRl
LT5wb3N0VGFzayhuZXcgU3RlcFRhc2sodGhpcykpOworICAgIG1fdGFza1F1ZXVlUnVubmluZyA9
IHRydWU7Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmNsZWFyVGFza1F1ZXVl
KCkKK3sKKyAgICB3aGlsZSAoIW1fdGFza1F1ZXVlLmVtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRl
IG1fdGFza1F1ZXVlLmZyb250KCk7CisgICAgICAgIG1fdGFza1F1ZXVlLnBvcF9mcm9udCgpOwor
ICAgIH0KKyAgICBtX3Rhc2tRdWV1ZVJ1bm5pbmcgPSBmYWxzZTsKK30KKwordm9pZCBNb2NrV2Vi
U3BlZWNoUmVjb2duaXplcjo6U3RlcFRhc2s6OnJ1bklmVmFsaWQoKQoreworICAgIGlmIChtX29i
amVjdC0+bV90YXNrUXVldWUuZW1wdHkoKSkgeworICAgICAgICBtX29iamVjdC0+bV90YXNrUXVl
dWVSdW5uaW5nID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBUYXNrKiB0
YXNrID0gbV9vYmplY3QtPm1fdGFza1F1ZXVlLmZyb250KCk7CisgICAgbV9vYmplY3QtPm1fdGFz
a1F1ZXVlLnBvcF9mcm9udCgpOworICAgIHRhc2stPnJ1bigpOworICAgIGRlbGV0ZSB0YXNrOwor
CisgICAgaWYgKG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZS5lbXB0eSgpKSB7CisgICAgICAgIG1fb2Jq
ZWN0LT5tX3Rhc2tRdWV1ZVJ1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fb2JqZWN0LT5tX2RlbGVnYXRlLT5wb3N0VGFzayhuZXcgU3RlcFRhc2sobV9vYmpl
Y3QpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjg5YmMyNmMxNzNkMDliMWIxZjUzZGU0ZjMxMmMyYmU3OTJiYmRlYgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
c3JjL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyX2gKKyNkZWZpbmUgTW9ja1dlYlNwZWVjaFJl
Y29nbml6ZXJfaAorCisjaW5jbHVkZSAiVGVzdENvbW1vbi5oIgorI2luY2x1ZGUgIldlYlNwZWVj
aFJlY29nbml6ZXIuaCIKKyNpbmNsdWRlICJXZWJUYXNrLmgiCisjaW5jbHVkZSA8ZGVxdWU+Cisj
aW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlNwZWVjaFJl
Y29nbml0aW9uSGFuZGxlOworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXM7CitjbGFz
cyBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OworfQorCituYW1lc3BhY2UgV2ViVGVzdFJ1bm5l
ciB7CisKK2NsYXNzIFdlYlRlc3REZWxlZ2F0ZTsKKworY2xhc3MgTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyIHsKK3B1YmxpYzoKKyAg
ICBNb2NrV2ViU3BlZWNoUmVjb2duaXplcigpOworICAgIH5Nb2NrV2ViU3BlZWNoUmVjb2duaXpl
cigpOworCisgICAgdm9pZCBzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqKTsKKworICAgIC8v
IFdlYlNwZWVjaFJlY29nbml6ZXIgaW1wbGVtZW50YXRpb246CisgICAgdmlydHVhbCB2b2lkIHN0
YXJ0KGNvbnN0IFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmLCBjb25zdCBXZWJL
aXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zJiwgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25p
emVyQ2xpZW50KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoY29uc3QgV2ViS2l0
OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYsIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXpl
ckNsaWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhYm9ydChjb25zdCBXZWJLaXQ6
OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiwgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVy
Q2xpZW50KikgT1ZFUlJJREU7CisKKyAgICAvLyBNZXRob2RzIGFjY2Vzc2VkIGJ5IGxheW91dCB0
ZXN0czoKKyAgICB2b2lkIGFkZE1vY2tSZXN1bHQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHRy
YW5zY3JpcHQsIGZsb2F0IGNvbmZpZGVuY2UpOworICAgIHZvaWQgc2V0RXJyb3IoY29uc3QgV2Vi
S2l0OjpXZWJTdHJpbmcmIGVycm9yLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWVzc2FnZSk7
CisgICAgYm9vbCB3YXNBYm9ydGVkKCkgY29uc3QgeyByZXR1cm4gbV93YXNBYm9ydGVkOyB9CisK
KyAgICAvLyBNZXRob2RzIGFjY2Vzc2VkIGZyb20gVGFzayBvYmplY3RzOgorICAgIFdlYktpdDo6
V2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0K
KyAgICBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBoYW5kbGUoKSB7IHJldHVy
biBtX2hhbmRsZTsgfQorICAgIFdlYlRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rh
c2tMaXN0OyB9CisKKyAgICBjbGFzcyBUYXNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRhc2so
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIHJlY29nbml6ZXIpIDogbV9yZWNvZ25pemVyKHJlY29n
bml6ZXIpIHsgfQorICAgICAgICB2aXJ0dWFsIH5UYXNrKCkgeyB9CisgICAgICAgIHZpcnR1YWwg
dm9pZCBydW4oKSA9IDA7CisgICAgcHJvdGVjdGVkOgorICAgICAgICBNb2NrV2ViU3BlZWNoUmVj
b2duaXplciogbV9yZWNvZ25pemVyOworICAgIH07CisKK3ByaXZhdGU6CisgICAgdm9pZCBzdGFy
dFRhc2tRdWV1ZSgpOworICAgIHZvaWQgY2xlYXJUYXNrUXVldWUoKTsKKworICAgIFdlYlRhc2tM
aXN0IG1fdGFza0xpc3Q7CisgICAgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSBt
X2hhbmRsZTsKKyAgICBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIG1fY2xpZW50
OworICAgIHN0ZDo6dmVjdG9yPFdlYktpdDo6V2ViU3RyaW5nPiBtX21vY2tUcmFuc2NyaXB0czsK
KyAgICBzdGQ6OnZlY3RvcjxmbG9hdD4gbV9tb2NrQ29uZmlkZW5jZXM7CisgICAgYm9vbCBtX3dh
c0Fib3J0ZWQ7CisKKyAgICAvLyBRdWV1ZSBvZiB0YXNrcyB0byBiZSBydW4uCisgICAgc3RkOjpk
ZXF1ZTxUYXNrKj4gbV90YXNrUXVldWU7CisgICAgYm9vbCBtX3Rhc2tRdWV1ZVJ1bm5pbmc7CisK
KyAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7CisKKyAgICAvLyBUYXNrIGZvciBzdGVw
cGluZyB0aGUgcXVldWUuCisgICAgY2xhc3MgU3RlcFRhc2sgOiBwdWJsaWMgV2ViTWV0aG9kVGFz
azxNb2NrV2ViU3BlZWNoUmVjb2duaXplcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgU3RlcFRh
c2soTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG9iamVjdCkgOiBXZWJNZXRob2RUYXNrPE1vY2tX
ZWJTcGVlY2hSZWNvZ25pemVyPihvYmplY3QpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcnVu
SWZWYWxpZCgpIE9WRVJSSURFOworICAgIH07Cit9OworCit9CisKKyNlbmRpZiAvLyBNb2NrV2Vi
U3BlZWNoUmVjb2duaXplcl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5jcHAKaW5kZXggMWIx
ZjliMGJhY2NmOTYzN2E3MjU4NTQyMDIyOTcwODkzNGQyNmY0NS4uZDI5N2UyZjY3NWRjNGZmMDBh
OTEwZTJhNTQzNjQ1NjQxNzI0N2I1NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmNwcApA
QCAtNTEsNyArNTEsNyBAQCBUZXN0SW50ZXJmYWNlczo6VGVzdEludGVyZmFjZXMoKQogICAgICwg
bV9ldmVudFNlbmRlcihuZXcgRXZlbnRTZW5kZXIoKSkKICAgICAsIG1fZ2FtZXBhZENvbnRyb2xs
ZXIobmV3IEdhbWVwYWRDb250cm9sbGVyKCkpCiAgICAgLCBtX3RleHRJbnB1dENvbnRyb2xsZXIo
bmV3IFRleHRJbnB1dENvbnRyb2xsZXIoKSkKLSAgICAsIG1fdGVzdFJ1bm5lcihuZXcgVGVzdFJ1
bm5lcigpKQorICAgICwgbV90ZXN0UnVubmVyKG5ldyBUZXN0UnVubmVyKHRoaXMpKQogICAgICwg
bV93ZWJWaWV3KDApCiAgICAgLCBtX2RlbGVnYXRlKDApCiB7CkBAIC0xMzMsNiArMTMzLDIxIEBA
IHZvaWQgVGVzdEludGVyZmFjZXM6OmNvbmZpZ3VyZUZvclRlc3RXaXRoVVJMKGNvbnN0IFdlYlVS
TCYgdGVzdFVSTCwgYm9vbCBnZW5lcmF0CiAgICAgICAgIG1fdGVzdFJ1bm5lci0+c2hvd0RldlRv
b2xzKCk7CiB9CiAKK3ZvaWQgVGVzdEludGVyZmFjZXM6OndpbmRvd09wZW5lZChXZWJUZXN0UHJv
eHlCYXNlKiBwcm94eSkKK3sKKyAgICBtX3dpbmRvd0xpc3QucHVzaF9iYWNrKHByb3h5KTsKK30K
Kwordm9pZCBUZXN0SW50ZXJmYWNlczo6d2luZG93Q2xvc2VkKFdlYlRlc3RQcm94eUJhc2UqIHBy
b3h5KQoreworICAgIHZlY3RvcjxXZWJUZXN0UHJveHlCYXNlKj46Oml0ZXJhdG9yIHBvcyA9IGZp
bmQobV93aW5kb3dMaXN0LmJlZ2luKCksIG1fd2luZG93TGlzdC5lbmQoKSwgcHJveHkpOworICAg
IGlmIChwb3MgPT0gbV93aW5kb3dMaXN0LmVuZCgpKSB7CisgICAgICAgIFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3dpbmRvd0xpc3Qu
ZXJhc2UocG9zKTsKK30KKwogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqIFRlc3RJbnRlcmZhY2Vz
OjphY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCiB7CiAgICAgcmV0dXJuIG1fYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuZ2V0KCk7CkBAIC0xNjMsNCArMTc4LDkgQEAgV2ViVGVzdFByb3h5QmFzZSog
VGVzdEludGVyZmFjZXM6OnByb3h5KCkKICAgICByZXR1cm4gbV9wcm94eTsKIH0KIAorY29uc3Qg
dmVjdG9yPFdlYlRlc3RQcm94eUJhc2UqPiYgVGVzdEludGVyZmFjZXM6OndpbmRvd0xpc3QoKQor
eworICAgIHJldHVybiBtX3dpbmRvd0xpc3Q7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmggYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNl
cy5oCmluZGV4IDlkMmU4YzMxNzMwYTQwMDZiNTdjMTIyY2Q2MzQyNjMwZmE4NGEyZWIuLmI2YjMw
MWE3OTBjMzRkYzEyODhhMDViZWU5ZTM2NGVhYmNmZTEyOWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmgKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVy
ZmFjZXMuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBUZXN0SW50ZXJmYWNlc19oCiAKICNp
bmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dmVjdG9yPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IGNsYXNzIFdlYkZyYW1lOwpAQCAtNjEsMTMgKzYyLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFRlc3RJc1J1bm5pbmcoYm9vbCk7CiAgICAgdm9pZCBjb25maWd1cmVGb3JUZXN0V2l0aFVSTChj
b25zdCBXZWJLaXQ6OldlYlVSTCYsIGJvb2wgZ2VuZXJhdGVQaXhlbHMpOwogCisgICAgdm9pZCB3
aW5kb3dPcGVuZWQoV2ViVGVzdFByb3h5QmFzZSopOworICAgIHZvaWQgd2luZG93Q2xvc2VkKFdl
YlRlc3RQcm94eUJhc2UqKTsKKwogICAgIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcigpOwogICAgIEV2ZW50U2VuZGVyKiBldmVudFNlbmRlcigpOwogICAg
IFRlc3RSdW5uZXIqIHRlc3RSdW5uZXIoKTsKICAgICBXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXco
KTsKICAgICBXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKCk7CiAgICAgV2ViVGVzdFByb3h5QmFz
ZSogcHJveHkoKTsKLQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFdlYlRlc3RQcm94eUJhc2UqPiYg
d2luZG93TGlzdCgpOwogCiBwcml2YXRlOgogICAgIHN0ZDo6YXV0b19wdHI8QWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI+IG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI7CkBAIC03OCw2ICs4Miw4IEBA
IHByaXZhdGU6CiAgICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7CiAgICAgV2ViVGVzdERl
bGVnYXRlKiBtX2RlbGVnYXRlOwogICAgIFdlYlRlc3RQcm94eUJhc2UqIG1fcHJveHk7CisKKyAg
ICBzdGQ6OnZlY3RvcjxXZWJUZXN0UHJveHlCYXNlKj4gbV93aW5kb3dMaXN0OwogfTsKIAogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
VGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L3NyYy9UZXN0UnVubmVyLmNwcAppbmRleCBkNzllZDNmZTBjYWU3NTI2YWU3ZTRkMzMxMTkxMDE0
MWNhMjkxOWU5Li4yYWI5YTMwODljM2IxMGFiOTEwMjgxZDE5YzYzZDQyMWNjMDY5Y2E4IDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0
UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L3NyYy9UZXN0UnVubmVyLmNwcApAQCAtMzMsMTQgKzMzLDE5IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCisjaW5jbHVkZSAiTW9ja1dlYlNwZWVjaElu
cHV0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmgiCiAj
aW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCisjaW5jbHVkZSAiVGVzdEludGVyZmFj
ZXMuaCIKICNpbmNsdWRlICJXZWJCaW5kaW5ncy5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2Uu
aCIKICNpbmNsdWRlICJXZWJEZXZpY2VPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUgIldlYkRldmlj
ZU9yaWVudGF0aW9uQ2xpZW50TW9jay5oIgogI2luY2x1ZGUgIldlYkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiV2ViRWxlbWVudC5oIgogI2luY2x1ZGUgIldlYkZpbmRPcHRpb25zLmgiCiAjaW5jbHVk
ZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2suaCIKICNp
bmNsdWRlICJXZWJJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJQZXJtaXNzaW9ucy5oIgog
I2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCkBAIC0xNDIsMTAgKzE0NywxMSBAQCB2b2lkIFRl
c3RSdW5uZXI6OldvcmtRdWV1ZTo6YWRkV29yayhXb3JrSXRlbSogd29yaykKIH0KIAogCi1UZXN0
UnVubmVyOjpUZXN0UnVubmVyKCkKK1Rlc3RSdW5uZXI6OlRlc3RSdW5uZXIoVGVzdEludGVyZmFj
ZXMqIGludGVyZmFjZXMpCiAgICAgOiBtX3Rlc3RJc1J1bm5pbmcoZmFsc2UpCiAgICAgLCBtX2Ns
b3NlUmVtYWluaW5nV2luZG93cyhmYWxzZSkKICAgICAsIG1fd29ya1F1ZXVlKHRoaXMpCisgICAg
LCBtX3Rlc3RJbnRlcmZhY2VzKGludGVyZmFjZXMpCiAgICAgLCBtX2RlbGVnYXRlKDApCiAgICAg
LCBtX3dlYlZpZXcoMCkKICAgICAsIG1fd2ViUGVybWlzc2lvbnMobmV3IFdlYlBlcm1pc3Npb25z
KQpAQCAtNDI3LDYgKzQzMyw4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXQoKQogI2lmIEVOQUJM
RV9OT1RJRklDQVRJT05TCiAgICAgbV9ub3RpZmljYXRpb25QcmVzZW50ZXItPnJlc2V0KCk7CiAj
ZW5kaWYKKyAgICBtX3BvaW50ZXJMb2NrZWQgPSBmYWxzZTsKKyAgICBtX3BvaW50ZXJMb2NrUGxh
bm5lZFJlc3VsdCA9IFBvaW50ZXJMb2NrV2lsbFN1Y2NlZWQ7CiAKICAgICBtX3Rhc2tMaXN0LnJl
dm9rZUFsbCgpOwogICAgIG1fd29ya1F1ZXVlLnJlc2V0KCk7CkBAIC02ODMsNiArNjkxLDYxIEBA
IFdlYk5vdGlmaWNhdGlvblByZXNlbnRlciogVGVzdFJ1bm5lcjo6bm90aWZpY2F0aW9uUHJlc2Vu
dGVyKCkgY29uc3QKIH0KICNlbmRpZgogCitib29sIFRlc3RSdW5uZXI6OnJlcXVlc3RQb2ludGVy
TG9jaygpCit7CisgICAgc3dpdGNoIChtX3BvaW50ZXJMb2NrUGxhbm5lZFJlc3VsdCkgeworICAg
IGNhc2UgUG9pbnRlckxvY2tXaWxsU3VjY2VlZDoKKyAgICAgICAgbV9kZWxlZ2F0ZS0+cG9zdERl
bGF5ZWRUYXNrKG5ldyBIb3N0TWV0aG9kVGFzayh0aGlzLCAmVGVzdFJ1bm5lcjo6ZGlkQWNxdWly
ZVBvaW50ZXJMb2NrSW50ZXJuYWwpLCAwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2Fz
ZSBQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmM6CisgICAgICAgIFdFQktJVF9BU1NFUlQoIW1f
cG9pbnRlckxvY2tlZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgUG9pbnRlckxv
Y2tXaWxsRmFpbFN5bmM6CisgICAgICAgIFdFQktJVF9BU1NFUlQoIW1fcG9pbnRlckxvY2tlZCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBXRUJLSVRfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3Zv
aWQgVGVzdFJ1bm5lcjo6cmVxdWVzdFBvaW50ZXJVbmxvY2soKQoreworICAgIG1fZGVsZWdhdGUt
PnBvc3REZWxheWVkVGFzayhuZXcgSG9zdE1ldGhvZFRhc2sodGhpcywgJlRlc3RSdW5uZXI6OmRp
ZExvc2VQb2ludGVyTG9ja0ludGVybmFsKSwgMCk7Cit9CisKK2Jvb2wgVGVzdFJ1bm5lcjo6aXNQ
b2ludGVyTG9ja2VkKCkKK3sKKyAgICByZXR1cm4gbV9wb2ludGVyTG9ja2VkOworfQorCit2b2lk
IFRlc3RSdW5uZXI6OmRpZEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKCkKK3sKKyAgICBtX3Bv
aW50ZXJMb2NrZWQgPSB0cnVlOworICAgIG1fd2ViVmlldy0+ZGlkQWNxdWlyZVBvaW50ZXJMb2Nr
KCk7CisKKyAgICAvLyBSZXNldCBwbGFubmVkIHJlc3VsdCB0byBkZWZhdWx0LgorICAgIG1fcG9p
bnRlckxvY2tQbGFubmVkUmVzdWx0ID0gUG9pbnRlckxvY2tXaWxsU3VjY2VlZDsKK30KKwordm9p
ZCBUZXN0UnVubmVyOjpkaWROb3RBY3F1aXJlUG9pbnRlckxvY2tJbnRlcm5hbCgpCit7CisgICAg
V0VCS0lUX0FTU0VSVCghbV9wb2ludGVyTG9ja2VkKTsKKyAgICBtX3BvaW50ZXJMb2NrZWQgPSBm
YWxzZTsKKyAgICBtX3dlYlZpZXctPmRpZE5vdEFjcXVpcmVQb2ludGVyTG9jaygpOworCisgICAg
Ly8gUmVzZXQgcGxhbm5lZCByZXN1bHQgdG8gZGVmYXVsdC4KKyAgICBtX3BvaW50ZXJMb2NrUGxh
bm5lZFJlc3VsdCA9IFBvaW50ZXJMb2NrV2lsbFN1Y2NlZWQ7Cit9CisKK3ZvaWQgVGVzdFJ1bm5l
cjo6ZGlkTG9zZVBvaW50ZXJMb2NrSW50ZXJuYWwoKQoreworICAgIGJvb2wgd2FzTG9ja2VkID0g
bV9wb2ludGVyTG9ja2VkOworICAgIG1fcG9pbnRlckxvY2tlZCA9IGZhbHNlOworICAgIGlmICh3
YXNMb2NrZWQpCisgICAgICAgIG1fd2ViVmlldy0+ZGlkTG9zZVBvaW50ZXJMb2NrKCk7Cit9CisK
IHZvaWQgVGVzdFJ1bm5lcjo6c2hvd0RldlRvb2xzKCkKIHsKICAgICBtX2RlbGVnYXRlLT5zaG93
RGV2VG9vbHMoKTsKQEAgLTg4MCw3ICs5NDMsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OmxvY2F0aW9u
Q2hhbmdlRG9uZSgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6d2luZG93Q291bnQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewotICAgIHJlc3VsdC0+c2V0KHN0YXRp
Y19jYXN0PGludD4obV9kZWxlZ2F0ZS0+d2luZG93Q291bnQoKSkpOworICAgIHJlc3VsdC0+c2V0
KHN0YXRpY19jYXN0PGludD4obV90ZXN0SW50ZXJmYWNlcy0+d2luZG93TGlzdCgpLnNpemUoKSkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21w
bGV0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQpAQCAtMTUxMSwxMCArMTU3NCwxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tEZXZpY2VP
cmllbnRhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVgogICAgIGlm
IChhcmd1bWVudHNbNF0udG9Cb29sZWFuKCkpCiAgICAgICAgIG9yaWVudGF0aW9uLnNldEdhbW1h
KGFyZ3VtZW50c1s1XS50b0RvdWJsZSgpKTsKIAotICAgIC8vIE5vdGUgdGhhdCB3ZSBvbmx5IGNh
bGwgc2V0T3JpZW50YXRpb24gb24gdGhlIG1haW4gcGFnZSdzIG1vY2sgc2luY2UgdGhpcyBpcyBh
bGwgdGhhdCB0aGUKLSAgICAvLyB0ZXN0cyByZXF1aXJlLiBJZiBuZWNlc3NhcnksIHdlIGNvdWxk
IGdldCBhIGxpc3Qgb2YgV2ViVmlld0hvc3RzIGZyb20gdGhlIFRlc3RTaGVsbCBhbmQKKyAgICAv
LyBOb3RlIHRoYXQgd2Ugb25seSBjYWxsIHNldE9yaWVudGF0aW9uIG9uIHRoZSBtYWluIHBhZ2Un
cyBtb2NrIHNpbmNlIHRoaXMKKyAgICAvLyB0ZXN0cyByZXF1aXJlLiBJZiBuZWNlc3NhcnksIHdl
IGNvdWxkIGdldCBhIGxpc3Qgb2YgV2ViVmlld0hvc3RzIGZyb20gdGgKICAgICAvLyBjYWxsIHNl
dE9yaWVudGF0aW9uIG9uIGVhY2ggRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLgotICAgIG1f
ZGVsZWdhdGUtPnNldERldmljZU9yaWVudGF0aW9uKG9yaWVudGF0aW9uKTsKKyAgICBtX3Byb3h5
LT5kZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2soKS0+c2V0T3JpZW50YXRpb24ob3JpZW50YXRp
b24pOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpAQCAtMTc1
OSw3ICsxODIyLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRQT1NJWExvY2FsZShjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmUKIAogdm9pZCBUZXN0UnVubmVy
OjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewotICAgIHJlc3Vs
dC0+c2V0KG1fZGVsZWdhdGUtPm51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RzKCkpOworICAgIHJlc3VsdC0+c2V0KG1fcHJveHktPmdlb2xvY2F0aW9uQ2xpZW50TW9j
aygpLT5udW1iZXJPZlBlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMoKSk7CiB9CiAKIC8vIEZJWE1F
OiBGb3IgZ3JlYXRlciB0ZXN0IGZsZXhpYmlsaXR5LCB3ZSBzaG91bGQgYmUgYWJsZSB0byBzZXQg
ZWFjaCBwYWdlJ3MgZ2VvbG9jYXRpb24gbW9jayBpbmRpdmlkdWFsbHkuCkBAIC0xNzY5LDcgKzE4
MzIsOSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVgogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwog
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzQm9vbCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7CisgICAgY29uc3QgdmVjdG9yPFdlYlRlc3RQcm94
eUJhc2UqPiYgd2luZG93TGlzdCA9IG1fdGVzdEludGVyZmFjZXMtPndpbmRvd0xpc3QoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXplKCk7ICsraSkKKyAgICAg
ICAgd2luZG93TGlzdC5hdChpKS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCktPnNldFBlcm1pc3Np
b24oYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQpAQCAtMTc3Nyw3ICsxODQyLDkgQEAgdm9pZCBUZXN0UnVubmVy
OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3AKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA8IDMgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1i
ZXIoKSB8fCAhYXJndW1lbnRzWzJdLmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBt
X2RlbGVnYXRlLT5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihhcmd1bWVudHNbMF0udG9Eb3Vi
bGUoKSwgYXJndW1lbnRzWzFdLnRvRG91YmxlKCksIGFyZ3VtZW50c1syXS50b0RvdWJsZSgpKTsK
KyAgICBjb25zdCB2ZWN0b3I8V2ViVGVzdFByb3h5QmFzZSo+JiB3aW5kb3dMaXN0ID0gbV90ZXN0
SW50ZXJmYWNlcy0+d2luZG93TGlzdCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3
aW5kb3dMaXN0LnNpemUoKTsgKytpKQorICAgICAgICB3aW5kb3dMaXN0LmF0KGkpLT5nZW9sb2Nh
dGlvbkNsaWVudE1vY2soKS0+c2V0UG9zaXRpb24oYXJndW1lbnRzWzBdLnRvRG91YmxlKCksIGFy
Z3VtZW50c1sxXS50b0RvdWJsZSgpLCBhcmd1bWVudHNbMl0udG9Eb3VibGUoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9y
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCkBA
IC0xNzg1LDcgKzE4NTIsOSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBv
c2l0aW9uVW5hdmFpbGFibGVFcnJvcihjb25zdCBDcHBBcmd1bWVudExpcwogICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1sw
XS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKGFyZ3VtZW50c1swXS50b1N0cmluZygp
KTsKKyAgICBjb25zdCB2ZWN0b3I8V2ViVGVzdFByb3h5QmFzZSo+JiB3aW5kb3dMaXN0ID0gbV90
ZXN0SW50ZXJmYWNlcy0+d2luZG93TGlzdCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB3aW5kb3dMaXN0LnNpemUoKTsgKytpKQorICAgICAgICB3aW5kb3dMaXN0LmF0KGkpLT5nZW9s
b2NhdGlvbkNsaWVudE1vY2soKS0+c2V0UG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdlYlN0cmlu
Zzo6ZnJvbVVURjgoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKIH0KIAogI2lmIEVOQUJMRV9O
T1RJRklDQVRJT05TCkBAIC0xODE1LDcgKzE4ODQsOSBAQCB2b2lkIFRlc3RSdW5uZXI6OmFkZE1v
Y2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VgogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMyB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5n
KCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0uaXNTdHJpbmco
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kZWxlZ2F0ZS0+YWRkTW9ja1NwZWVjaElucHV0
UmVzdWx0KGFyZ3VtZW50c1swXS50b1N0cmluZygpLCBhcmd1bWVudHNbMV0udG9Eb3VibGUoKSwg
YXJndW1lbnRzWzJdLnRvU3RyaW5nKCkpOworI2lmIEVOQUJMRV9JTlBVVF9TUEVFQ0gKKyAgICBt
X3Byb3h5LT5zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrKCktPmFkZE1vY2tSZWNvZ25pdGlvblJl
c3VsdChXZWJTdHJpbmc6OmZyb21VVEY4KGFyZ3VtZW50c1swXS50b1N0cmluZygpKSwgYXJndW1l
bnRzWzFdLnRvRG91YmxlKCksIFdlYlN0cmluZzo6ZnJvbVVURjgoYXJndW1lbnRzWzJdLnRvU3Ry
aW5nKCkpKTsKKyNlbmRpZgogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tTcGVlY2hJbnB1
dER1bXBSZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCkBAIC0xODI0LDcgKzE4OTUsOSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tTcGVl
Y2hJbnB1dER1bXBSZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcAogICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzQm9vbCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX2RlbGVnYXRlLT5zZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVj
dChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOworI2lmIEVOQUJMRV9JTlBVVF9TUEVFQ0gKKyAg
ICBtX3Byb3h5LT5zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrKCktPnNldER1bXBSZWN0KGFyZ3Vt
ZW50c1swXS50b0Jvb2xlYW4oKSk7CisjZW5kaWYKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRN
b2NrU3BlZWNoUmVjb2duaXRpb25SZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKQEAgLTE4MzMsNyArMTkwNiw3IEBAIHZvaWQgVGVzdFJ1
bm5lcjo6YWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzCiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNb
MF0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fZGVsZWdhdGUtPmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdChhcmd1
bWVudHNbMF0udG9TdHJpbmcoKSwgYXJndW1lbnRzWzFdLnRvRG91YmxlKCkpOworICAgIG1fcHJv
eHktPnNwZWVjaFJlY29nbml6ZXJNb2NrKCktPmFkZE1vY2tSZXN1bHQoV2ViU3RyaW5nOjpmcm9t
VVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSksIGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoUmVjb2duaXRpb25FcnJvcihjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpAQCAtMTg0
MiwxMiArMTkxNSwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tTcGVlY2hSZWNvZ25pdGlv
bkVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLAogICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNb
MV0uaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kZWxlZ2F0ZS0+c2V0TW9j
a1NwZWVjaFJlY29nbml0aW9uRXJyb3IoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCksIGFyZ3VtZW50
c1sxXS50b1N0cmluZygpKTsKKyAgICBtX3Byb3h5LT5zcGVlY2hSZWNvZ25pemVyTW9jaygpLT5z
ZXRFcnJvcihXZWJTdHJpbmc6OmZyb21VVEY4KGFyZ3VtZW50c1swXS50b1N0cmluZygpKSwgV2Vi
U3RyaW5nOjpmcm9tVVRGOChhcmd1bWVudHNbMV0udG9TdHJpbmcoKSkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6Ondhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewotICAgIHJlc3VsdC0+c2V0KG1fZGVsZWdh
dGUtPndhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoKSk7CisgICAgcmVzdWx0LT5zZXQo
bV9wcm94eS0+c3BlZWNoUmVjb2duaXplck1vY2soKS0+d2FzQWJvcnRlZCgpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpkaXNwbGF5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCkBAIC0yMDI1LDMxICsyMDk4LDMxIEBAIHZvaWQgVGVzdFJ1bm5l
cjo6bm90SW1wbGVtZW50ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpZEFjcXVpcmVQb2ludGVyTG9jayhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgbV9kZWxlZ2F0ZS0+ZGlk
QWNxdWlyZVBvaW50ZXJMb2NrKCk7CisgICAgZGlkQWNxdWlyZVBvaW50ZXJMb2NrSW50ZXJuYWwo
KTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaWROb3RB
Y3F1aXJlUG9pbnRlckxvY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQogewotICAgIG1fZGVsZWdhdGUtPmRpZE5vdEFjcXVpcmVQb2ludGVyTG9jaygpOworICAg
IGRpZE5vdEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKCk7CiAgICAgcmVzdWx0LT5zZXROdWxs
KCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlkTG9zZVBvaW50ZXJMb2NrKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICBtX2RlbGVnYXRlLT5kaWRM
b3NlUG9pbnRlckxvY2soKTsKKyAgICBkaWRMb3NlUG9pbnRlckxvY2tJbnRlcm5hbCgpOwogICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBvaW50ZXJMb2Nr
V2lsbFJlc3BvbmRBc3luY2hyb25vdXNseShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCiB7Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0UG9pbnRlckxvY2tXaWxsUmVzcG9u
ZEFzeW5jaHJvbm91c2x5KCk7CisgICAgbV9wb2ludGVyTG9ja1BsYW5uZWRSZXN1bHQgPSBQb2lu
dGVyTG9ja1dpbGxSZXNwb25kQXN5bmM7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0UG9pbnRlckxvY2tXaWxsRmFpbFN5bmNocm9ub3VzbHkoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewotICAgIG1fZGVsZWdhdGUt
PnNldFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jaHJvbm91c2x5KCk7CisgICAgbV9wb2ludGVyTG9j
a1BsYW5uZWRSZXN1bHQgPSBQb2ludGVyTG9ja1dpbGxGYWlsU3luYzsKICAgICByZXN1bHQtPnNl
dE51bGwoKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oCmluZGV4IDQ2Mjc5NGFmN2QzMjlmYjg3MDU0
ZjhhZGE0YTE3MzcwOWE3NmI0NGUuLmZiNjVmMTdjZjA3ODcxYTA1MzljODU3ZmFlNzQ3ODEyNjdk
YjBkM2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmgKQEAgLTU1LDEzICs1NSwxNCBAQCBjbGFzcyBXZWJW
aWV3OwogbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewogCiBjbGFzcyBOb3RpZmljYXRpb25QcmVz
ZW50ZXI7CitjbGFzcyBUZXN0SW50ZXJmYWNlczsKIGNsYXNzIFdlYlBlcm1pc3Npb25zOwogY2xh
c3MgV2ViVGVzdERlbGVnYXRlOwogY2xhc3MgV2ViVGVzdFByb3h5QmFzZTsKIAogY2xhc3MgVGVz
dFJ1bm5lciA6IHB1YmxpYyBXZWJUZXN0UnVubmVyLCBwdWJsaWMgQ3BwQm91bmRDbGFzcyB7CiBw
dWJsaWM6Ci0gICAgVGVzdFJ1bm5lcigpOworICAgIGV4cGxpY2l0IFRlc3RSdW5uZXIoVGVzdElu
dGVyZmFjZXMqKTsKICAgICB2aXJ0dWFsIH5UZXN0UnVubmVyKCk7CiAKICAgICB2b2lkIHNldERl
bGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSopOwpAQCAtMTIyLDYgKzEyMyw5IEBAIHB1YmxpYzoKICNp
ZiBFTkFCTEVfTk9USUZJQ0FUSU9OUwogICAgIFdlYktpdDo6V2ViTm90aWZpY2F0aW9uUHJlc2Vu
dGVyKiBub3RpZmljYXRpb25QcmVzZW50ZXIoKSBjb25zdDsKICNlbmRpZgorICAgIGJvb2wgcmVx
dWVzdFBvaW50ZXJMb2NrKCk7CisgICAgdm9pZCByZXF1ZXN0UG9pbnRlclVubG9jaygpOworICAg
IGJvb2wgaXNQb2ludGVyTG9ja2VkKCk7CiAKICAgICAvLyBBIHNpbmdsZSBpdGVtIGluIHRoZSB3
b3JrIHF1ZXVlLgogICAgIGNsYXNzIFdvcmtJdGVtIHsKQEAgLTUwMiw2ICs1MDYsMjMgQEAgcHJp
dmF0ZToKICAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1fb2JqZWN0LT5jb21w
bGV0ZU5vdGlmeURvbmUodHJ1ZSk7IH0KICAgICB9OwogCisgICAgY2xhc3MgSG9zdE1ldGhvZFRh
c2sgOiBwdWJsaWMgV2ViTWV0aG9kVGFzazxUZXN0UnVubmVyPiB7CisgICAgcHVibGljOgorICAg
ICAgICB0eXBlZGVmIHZvaWQgKFRlc3RSdW5uZXI6OipDYWxsYmFja01ldGhvZFR5cGUpKCk7Cisg
ICAgICAgIEhvc3RNZXRob2RUYXNrKFRlc3RSdW5uZXIqIG9iamVjdCwgQ2FsbGJhY2tNZXRob2RU
eXBlIGNhbGxiYWNrKQorICAgICAgICAgICAgOiBXZWJNZXRob2RUYXNrPFRlc3RSdW5uZXI+KG9i
amVjdCkKKyAgICAgICAgICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICAgICAgeyB9CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IChtX29iamVjdC0+Km1fY2FsbGJh
Y2spKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENhbGxiYWNrTWV0aG9kVHlwZSBtX2Nh
bGxiYWNrOworICAgIH07CisgICAgdm9pZCBkaWRBY3F1aXJlUG9pbnRlckxvY2tJbnRlcm5hbCgp
OworICAgIHZvaWQgZGlkTm90QWNxdWlyZVBvaW50ZXJMb2NrSW50ZXJuYWwoKTsKKyAgICB2b2lk
IGRpZExvc2VQb2ludGVyTG9ja0ludGVybmFsKCk7CisKICAgICBib29sIGVsZW1lbnREb2VzQXV0
b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYpOwogICAg
IGJvb2wgY3BwVmFyaWFudFRvQm9vbChjb25zdCBDcHBWYXJpYW50Jik7CiAgICAgaW50MzJfdCBj
cHBWYXJpYW50VG9JbnQzMihjb25zdCBDcHBWYXJpYW50Jik7CkBAIC02NjAsNiArNjgxLDcgQEAg
cHJpdmF0ZToKICAgICAvLyBVc2VkIGZvciB0ZXN0IHRpbWVvdXRzLgogICAgIFdlYlRhc2tMaXN0
IG1fdGFza0xpc3Q7CiAKKyAgICBUZXN0SW50ZXJmYWNlcyogbV90ZXN0SW50ZXJmYWNlczsKICAg
ICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7CiAgICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dl
YlZpZXc7CiAgICAgV2ViVGVzdFByb3h5QmFzZSogbV9wcm94eTsKQEAgLTY3Myw2ICs2OTUsMTMg
QEAgcHJpdmF0ZToKICNpZiBFTkFCTEVfTk9USUZJQ0FUSU9OUwogICAgIHN0ZDo6YXV0b19wdHI8
Tm90aWZpY2F0aW9uUHJlc2VudGVyPiBtX25vdGlmaWNhdGlvblByZXNlbnRlcjsKICNlbmRpZgor
CisgICAgYm9vbCBtX3BvaW50ZXJMb2NrZWQ7CisgICAgZW51bSB7CisgICAgICAgIFBvaW50ZXJM
b2NrV2lsbFN1Y2NlZWQsCisgICAgICAgIFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luYywKKyAg
ICAgICAgUG9pbnRlckxvY2tXaWxsRmFpbFN5bmMsCisgICAgfSBtX3BvaW50ZXJMb2NrUGxhbm5l
ZFJlc3VsdDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RQcm94eS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0UHJveHkuY3BwCmluZGV4IDcwZDM5MjNi
Y2RhMTljYjJmMmZjZTE3MDUxNTgwYWM1N2I4ZDYyZmMuLmQ0NWIzMzcwMzhhNTc3Mjg5YjYxZTc0
NjRhZTc2ZGNjMDFiMmEyNjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RQcm94eS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFByb3h5LmNwcApAQCAtMzMsNiAr
MzMsOCBAQAogCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgiCisjaW5jbHVkZSAiTW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmgiCiAjaW5jbHVk
ZSAiU3BlbGxDaGVja0NsaWVudC5oIgogI2luY2x1ZGUgIlRlc3RDb21tb24uaCIKICNpbmNsdWRl
ICJUZXN0SW50ZXJmYWNlcy5oIgpAQCAtNDMsOSArNDUsMTEgQEAKICNpbmNsdWRlICJXZWJDYWNo
ZWRVUkxSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV2ViQ29uc29sZU1lc3NhZ2UuaCIKICNpbmNsdWRl
ICJXZWJEYXRhU291cmNlLmgiCisjaW5jbHVkZSAiV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRN
b2NrLmgiCiAjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRlICJXZWJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJHZW9sb2NhdGlvbkNsaWVudE1v
Y2suaCIKICNpbmNsdWRlICJXZWJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIldlYk5vZGUuaCIK
ICNpbmNsdWRlICJXZWJQbHVnaW5QYXJhbXMuaCIKQEAgLTM5NiwxMCArNDAwLDkgQEAgdm9pZCBk
dW1wQmFja0ZvcndhcmRMaXN0KGNvbnN0IFdlYlZlY3RvcjxXZWJIaXN0b3J5SXRlbT4mIGhpc3Rv
cnksIHNpemVfdCBjdXJyZW4KICAgICByZXN1bHQuYXBwZW5kKCI9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiB9CiAKLXN0cmluZyBkdW1wQWxsQmFj
a0ZvcndhcmRMaXN0cyhXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKQorc3RyaW5nIGR1bXBBbGxC
YWNrRm9yd2FyZExpc3RzKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUsIHVuc2lnbmVkIHdpbmRv
d0NvdW50KQogewogICAgIHN0cmluZyByZXN1bHQ7Ci0gICAgdW5zaWduZWQgd2luZG93Q291bnQg
PSBkZWxlZ2F0ZS0+d2luZG93Q291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
d2luZG93Q291bnQ7ICsraSkgewogICAgICAgICBzaXplX3QgY3VycmVudEVudHJ5SW5kZXggPSAw
OwogICAgICAgICBXZWJWZWN0b3I8V2ViSGlzdG9yeUl0ZW0+IGhpc3Rvcnk7CkBAIC00MjEsMTcg
KzQyNCwyNSBAQCBXZWJUZXN0UHJveHlCYXNlOjpXZWJUZXN0UHJveHlCYXNlKCkKIAogV2ViVGVz
dFByb3h5QmFzZTo6fldlYlRlc3RQcm94eUJhc2UoKQogeworICAgIG1fdGVzdEludGVyZmFjZXMt
PndpbmRvd0Nsb3NlZCh0aGlzKTsKIH0KIAogdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpzZXRJbnRl
cmZhY2VzKFdlYlRlc3RJbnRlcmZhY2VzKiBpbnRlcmZhY2VzKQogewogICAgIG1fdGVzdEludGVy
ZmFjZXMgPSBpbnRlcmZhY2VzLT50ZXN0SW50ZXJmYWNlcygpOworICAgIG1fdGVzdEludGVyZmFj
ZXMtPndpbmRvd09wZW5lZCh0aGlzKTsKIH0KIAogdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpzZXRE
ZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKQogewogICAgIG1fZGVsZWdhdGUgPSBk
ZWxlZ2F0ZTsKICAgICBtX3NwZWxsY2hlY2stPnNldERlbGVnYXRlKGRlbGVnYXRlKTsKKyNpZiBF
TkFCTEVfSU5QVVRfU1BFRUNICisgICAgaWYgKG1fc3BlZWNoSW5wdXRDb250cm9sbGVyLmdldCgp
KQorICAgICAgICBtX3NwZWVjaElucHV0Q29udHJvbGxlci0+c2V0RGVsZWdhdGUoZGVsZWdhdGUp
OworI2VuZGlmCisgICAgaWYgKG1fc3BlZWNoUmVjb2duaXplci5nZXQoKSkKKyAgICAgICAgbV9z
cGVlY2hSZWNvZ25pemVyLT5zZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7CiB9CiAKIHZvaWQgV2ViVGVz
dFByb3h5QmFzZTo6cmVzZXQoKQpAQCAtNDQxLDYgKzQ1MiwxMiBAQCB2b2lkIFdlYlRlc3RQcm94
eUJhc2U6OnJlc2V0KCkKICAgICBtX2lzUGFpbnRpbmcgPSBmYWxzZTsKICAgICBtX3Jlc291cmNl
SWRlbnRpZmllck1hcC5jbGVhcigpOwogICAgIG1fbG9nQ29uc29sZU91dHB1dCA9IHRydWU7Cisg
ICAgaWYgKG1fZ2VvbG9jYXRpb25DbGllbnQuZ2V0KCkpCisgICAgICAgIG1fZ2VvbG9jYXRpb25D
bGllbnQtPnJlc2V0TW9jaygpOworI2lmIEVOQUJMRV9JTlBVVF9TUEVFQ0gKKyAgICBpZiAobV9z
cGVlY2hJbnB1dENvbnRyb2xsZXIuZ2V0KCkpCisgICAgICAgIG1fc3BlZWNoSW5wdXRDb250cm9s
bGVyLT5jbGVhclJlc3VsdHMoKTsKKyNlbmRpZgogfQogCiBXZWJTcGVsbENoZWNrQ2xpZW50KiBX
ZWJUZXN0UHJveHlCYXNlOjpzcGVsbENoZWNrQ2xpZW50KCkgY29uc3QKQEAgLTQ3MSw3ICs0ODgs
NyBAQCBzdHJpbmcgV2ViVGVzdFByb3h5QmFzZTo6Y2FwdHVyZVRyZWUoYm9vbCBkZWJ1Z1JlbmRl
clRyZWUpCiAgICAgfQogCiAgICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEJhY2tGb3J3YXJkTGlzdCgpKQotICAgICAgICBkYXRhVXRmOCArPSBkdW1wQWxs
QmFja0ZvcndhcmRMaXN0cyhtX2RlbGVnYXRlKTsKKyAgICAgICAgZGF0YVV0ZjggKz0gZHVtcEFs
bEJhY2tGb3J3YXJkTGlzdHMobV9kZWxlZ2F0ZSwgbV90ZXN0SW50ZXJmYWNlcy0+d2luZG93TGlz
dCgpLnNpemUoKSk7CiAKICAgICByZXR1cm4gZGF0YVV0Zjg7CiB9CkBAIC02MzQsNiArNjUxLDM3
IEBAIHZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlzY2FyZEJhY2tpbmdTdG9yZSgpCiAgICAgbV9j
YW52YXMucmVzZXQoKTsKIH0KIAorV2ViR2VvbG9jYXRpb25DbGllbnRNb2NrKiBXZWJUZXN0UHJv
eHlCYXNlOjpnZW9sb2NhdGlvbkNsaWVudE1vY2soKQoreworICAgIGlmICghbV9nZW9sb2NhdGlv
bkNsaWVudC5nZXQoKSkKKyAgICAgICAgbV9nZW9sb2NhdGlvbkNsaWVudC5yZXNldChXZWJHZW9s
b2NhdGlvbkNsaWVudE1vY2s6OmNyZWF0ZSgpKTsKKyAgICByZXR1cm4gbV9nZW9sb2NhdGlvbkNs
aWVudC5nZXQoKTsKK30KKworV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKiBXZWJUZXN0
UHJveHlCYXNlOjpkZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2soKQoreworICAgIGlmICghbV9k
ZXZpY2VPcmllbnRhdGlvbkNsaWVudC5nZXQoKSkKKyAgICAgICAgbV9kZXZpY2VPcmllbnRhdGlv
bkNsaWVudC5yZXNldChXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2s6OmNyZWF0ZSgpKTsK
KyAgICByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudC5nZXQoKTsKK30KKworI2lmIEVO
QUJMRV9JTlBVVF9TUEVFQ0gKK01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIFdlYlRlc3RQ
cm94eUJhc2U6OnNwZWVjaElucHV0Q29udHJvbGxlck1vY2soKQoreworICAgIFdFQktJVF9BU1NF
UlQobV9zcGVlY2hJbnB1dENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHJldHVybiBtX3NwZWVjaElu
cHV0Q29udHJvbGxlci5nZXQoKTsKK30KKyNlbmRpZgorCitNb2NrV2ViU3BlZWNoUmVjb2duaXpl
ciogV2ViVGVzdFByb3h5QmFzZTo6c3BlZWNoUmVjb2duaXplck1vY2soKQoreworICAgIGlmICgh
bV9zcGVlY2hSZWNvZ25pemVyLmdldCgpKSB7CisgICAgICAgIG1fc3BlZWNoUmVjb2duaXplci5y
ZXNldChuZXcgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIoKSk7CisgICAgICAgIG1fc3BlZWNoUmVj
b2duaXplci0+c2V0RGVsZWdhdGUobV9kZWxlZ2F0ZSk7CisgICAgfQorICAgIHJldHVybiBtX3Nw
ZWVjaFJlY29nbml6ZXIuZ2V0KCk7Cit9CisKIHZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlkSW52
YWxpZGF0ZVJlY3QoY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsKICAgICAvLyBtX3BhaW50UmVjdCA9
IG1fcGFpbnRSZWN0IFUgcmVjdApAQCAtOTU0LDYgKzEwMDIsNTAgQEAgV2ViTm90aWZpY2F0aW9u
UHJlc2VudGVyKiBXZWJUZXN0UHJveHlCYXNlOjpub3RpZmljYXRpb25QcmVzZW50ZXIoKQogI2Vu
ZGlmCiB9CiAKK1dlYkdlb2xvY2F0aW9uQ2xpZW50KiBXZWJUZXN0UHJveHlCYXNlOjpnZW9sb2Nh
dGlvbkNsaWVudCgpCit7CisgICAgcmV0dXJuIGdlb2xvY2F0aW9uQ2xpZW50TW9jaygpOworfQor
CitXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIFdlYlRlc3RQcm94eUJhc2U6OnNwZWVjaElucHV0
Q29udHJvbGxlcihXZWJTcGVlY2hJbnB1dExpc3RlbmVyKiBsaXN0ZW5lcikKK3sKKyNpZiBFTkFC
TEVfSU5QVVRfU1BFRUNICisgICAgaWYgKCFtX3NwZWVjaElucHV0Q29udHJvbGxlci5nZXQoKSkg
eworICAgICAgICBtX3NwZWVjaElucHV0Q29udHJvbGxlci5yZXNldChuZXcgTW9ja1dlYlNwZWVj
aElucHV0Q29udHJvbGxlcihsaXN0ZW5lcikpOworICAgICAgICBtX3NwZWVjaElucHV0Q29udHJv
bGxlci0+c2V0RGVsZWdhdGUobV9kZWxlZ2F0ZSk7CisgICAgfQorICAgIHJldHVybiBtX3NwZWVj
aElucHV0Q29udHJvbGxlci5nZXQoKTsKKyNlbHNlCisgICAgV0VCS0lUX0FTU0VSVChsaXN0ZW5l
cik7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworV2ViU3BlZWNoUmVjb2duaXplciogV2Vi
VGVzdFByb3h5QmFzZTo6c3BlZWNoUmVjb2duaXplcigpCit7CisgICAgcmV0dXJuIHNwZWVjaFJl
Y29nbml6ZXJNb2NrKCk7Cit9CisKK1dlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50KiBXZWJUZXN0
UHJveHlCYXNlOjpkZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpCit7CisgICAgcmV0dXJuIGRldmlj
ZU9yaWVudGF0aW9uQ2xpZW50TW9jaygpOworfQorCitib29sIFdlYlRlc3RQcm94eUJhc2U6OnJl
cXVlc3RQb2ludGVyTG9jaygpCit7CisgICAgcmV0dXJuIG1fdGVzdEludGVyZmFjZXMtPnRlc3RS
dW5uZXIoKS0+cmVxdWVzdFBvaW50ZXJMb2NrKCk7Cit9CisKK3ZvaWQgV2ViVGVzdFByb3h5QmFz
ZTo6cmVxdWVzdFBvaW50ZXJVbmxvY2soKQoreworICAgIG1fdGVzdEludGVyZmFjZXMtPnRlc3RS
dW5uZXIoKS0+cmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKK30KKworYm9vbCBXZWJUZXN0UHJveHlC
YXNlOjppc1BvaW50ZXJMb2NrZWQoKQoreworICAgIHJldHVybiBtX3Rlc3RJbnRlcmZhY2VzLT50
ZXN0UnVubmVyKCktPmlzUG9pbnRlckxvY2tlZCgpOworfQorCiB2b2lkIFdlYlRlc3RQcm94eUJh
c2U6OndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJV
UkwmLCBjb25zdCBXZWJVUkwmIHRvLCBkb3VibGUsIGRvdWJsZSkKIHsKICAgICBpZiAobV90ZXN0
SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkp
IHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAppbmRl
eCBjNGM5NjJkYmY5YzYzZTg0YThjNDNkNzUxODFlOTVjZGQ4YzI3MWFjLi5iNDM5NDgzNjU1MDE0
ZjAxMjVhNTM5YWE3M2RkOWUxMTUyYzFkNzhhIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCkBAIC0zMiw4ICszMiw2IEBACiAjaW5jbHVkZSAiV2Vi
Vmlld0hvc3QuaCIKIAogI2luY2x1ZGUgIkRSVERldlRvb2xzQWdlbnQuaCIKLSNpbmNsdWRlICJN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiTW9ja1dlYlNwZWVjaFJl
Y29nbml6ZXIuaCIKICNpbmNsdWRlICJUYXNrLmgiCiAjaW5jbHVkZSAiVGVzdE5hdmlnYXRpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCkBAIC00MiwxMSArNDAsOSBAQAog
I2luY2x1ZGUgIldlYkNvbnRleHRNZW51RGF0YS5oIgogI2luY2x1ZGUgIldlYkRPTU1lc3NhZ2VF
dmVudC5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIKLSNpbmNsdWRlICJXZWJEZXZpY2VP
cmllbnRhdGlvbkNsaWVudE1vY2suaCIKICNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIldlYkVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1ZGUgIldlYkdl
b2xvY2F0aW9uQ2xpZW50TW9jay5oIgogI2luY2x1ZGUgIldlYkhpc3RvcnlJdGVtLmgiCiAjaW5j
bHVkZSAiV2ViS2l0LmgiCiAjaW5jbHVkZSAiV2ViTm9kZS5oIgpAQCAtMjY5LDQ4ICsyNjUsNiBA
QCBpbnQgV2ViVmlld0hvc3Q6Omhpc3RvcnlGb3J3YXJkTGlzdENvdW50KCkKICAgICByZXR1cm4g
bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+ZW50cnlDb3VudCgpIC0gY3VycmVudEluZGV4IC0gMTsK
IH0KIAotV2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudCogV2ViVmlld0hvc3Q6Omdlb2xvY2F0
aW9uQ2xpZW50KCkKLXsKLSAgICByZXR1cm4gZ2VvbG9jYXRpb25DbGllbnRNb2NrKCk7Ci19Ci0K
LVdlYktpdDo6V2ViR2VvbG9jYXRpb25DbGllbnRNb2NrKiBXZWJWaWV3SG9zdDo6Z2VvbG9jYXRp
b25DbGllbnRNb2NrKCkKLXsKLSAgICBpZiAoIW1fZ2VvbG9jYXRpb25DbGllbnRNb2NrKQotICAg
ICAgICBtX2dlb2xvY2F0aW9uQ2xpZW50TW9jayA9IGFkb3B0UHRyKFdlYkdlb2xvY2F0aW9uQ2xp
ZW50TW9jazo6Y3JlYXRlKCkpOwotICAgIHJldHVybiBtX2dlb2xvY2F0aW9uQ2xpZW50TW9jay5n
ZXQoKTsKLX0KLQotI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi1XZWJTcGVlY2hJbnB1dENvbnRy
b2xsZXIqIFdlYlZpZXdIb3N0OjpzcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViS2l0OjpXZWJTcGVl
Y2hJbnB1dExpc3RlbmVyKiBsaXN0ZW5lcikKLXsKLSAgICBpZiAoIW1fc3BlZWNoSW5wdXRDb250
cm9sbGVyTW9jaykKLSAgICAgICAgbV9zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrID0gTW9ja1dl
YlNwZWVjaElucHV0Q29udHJvbGxlcjo6Y3JlYXRlKGxpc3RlbmVyKTsKLSAgICByZXR1cm4gbV9z
cGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrLmdldCgpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUo
U0NSSVBURURfU1BFRUNIKQotV2ViU3BlZWNoUmVjb2duaXplciogV2ViVmlld0hvc3Q6OnNwZWVj
aFJlY29nbml6ZXIoKQotewotICAgIGlmICghbV9tb2NrU3BlZWNoUmVjb2duaXplcikKLSAgICAg
ICAgbV9tb2NrU3BlZWNoUmVjb2duaXplciA9IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpjcmVh
dGUoKTsKLSAgICByZXR1cm4gbV9tb2NrU3BlZWNoUmVjb2duaXplci5nZXQoKTsKLX0KLSNlbmRp
ZgotCi1XZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2sqIFdlYlZpZXdIb3N0OjpkZXZpY2VP
cmllbnRhdGlvbkNsaWVudE1vY2soKQotewotICAgIGlmICghbV9kZXZpY2VPcmllbnRhdGlvbkNs
aWVudE1vY2suZ2V0KCkpCi0gICAgICAgIG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrID0g
YWRvcHRQdHIoV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrOjpjcmVhdGUoKSk7Ci0gICAg
cmV0dXJuIG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmdldCgpOwotfQotCi1XZWJEZXZp
Y2VPcmllbnRhdGlvbkNsaWVudCogV2ViVmlld0hvc3Q6OmRldmljZU9yaWVudGF0aW9uQ2xpZW50
KCkKLXsKLSAgICByZXR1cm4gZGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKCk7Ci19Ci0KIC8v
IFdlYldpZGdldENsaWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIFdlYlZpZXdIb3N0OjpkaWRBdXRvUmVzaXplKGNv
bnN0IFdlYlNpemUmIG5ld1NpemUpCkBAIC0zNjMsNjMgKzMxNyw2IEBAIFdlYlNjcmVlbkluZm8g
V2ViVmlld0hvc3Q6OnNjcmVlbkluZm8oKQogICAgIHJldHVybiBpbmZvOwogfQogCi0jaWYgRU5B
QkxFKFBPSU5URVJfTE9DSykKLWJvb2wgV2ViVmlld0hvc3Q6OnJlcXVlc3RQb2ludGVyTG9jaygp
Ci17Ci0gICAgc3dpdGNoIChtX3BvaW50ZXJMb2NrUGxhbm5lZFJlc3VsdCkgewotICAgIGNhc2Ug
UG9pbnRlckxvY2tXaWxsU3VjY2VlZDoKLSAgICAgICAgcG9zdERlbGF5ZWRUYXNrKG5ldyBIb3N0
TWV0aG9kVGFzayh0aGlzLCAmV2ViVmlld0hvc3Q6OmRpZEFjcXVpcmVQb2ludGVyTG9jayksIDAp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRB
c3luYzoKLSAgICAgICAgQVNTRVJUKCFtX3BvaW50ZXJMb2NrZWQpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBjYXNlIFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jOgotICAgICAgICBBU1NFUlQo
IW1fcG9pbnRlckxvY2tlZCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6cmVxdWVzdFBvaW50ZXJVbmxvY2soKQotewotICAg
IHBvc3REZWxheWVkVGFzayhuZXcgSG9zdE1ldGhvZFRhc2sodGhpcywgJldlYlZpZXdIb3N0Ojpk
aWRMb3NlUG9pbnRlckxvY2spLCAwKTsKLX0KLQotYm9vbCBXZWJWaWV3SG9zdDo6aXNQb2ludGVy
TG9ja2VkKCkKLXsKLSAgICByZXR1cm4gbV9wb2ludGVyTG9ja2VkOwotfQotCi12b2lkIFdlYlZp
ZXdIb3N0OjpkaWRBY3F1aXJlUG9pbnRlckxvY2soKQotewotICAgIG1fcG9pbnRlckxvY2tlZCA9
IHRydWU7Ci0gICAgd2ViV2lkZ2V0KCktPmRpZEFjcXVpcmVQb2ludGVyTG9jaygpOwotCi0gICAg
Ly8gUmVzZXQgcGxhbm5lZCByZXN1bHQgdG8gZGVmYXVsdC4KLSAgICBtX3BvaW50ZXJMb2NrUGxh
bm5lZFJlc3VsdCA9IFBvaW50ZXJMb2NrV2lsbFN1Y2NlZWQ7Ci19Ci0KLXZvaWQgV2ViVmlld0hv
c3Q6OmRpZE5vdEFjcXVpcmVQb2ludGVyTG9jaygpCi17Ci0gICAgQVNTRVJUKCFtX3BvaW50ZXJM
b2NrZWQpOwotICAgIG1fcG9pbnRlckxvY2tlZCA9IGZhbHNlOwotICAgIHdlYldpZGdldCgpLT5k
aWROb3RBY3F1aXJlUG9pbnRlckxvY2soKTsKLQotICAgIC8vIFJlc2V0IHBsYW5uZWQgcmVzdWx0
IHRvIGRlZmF1bHQuCi0gICAgbV9wb2ludGVyTG9ja1BsYW5uZWRSZXN1bHQgPSBQb2ludGVyTG9j
a1dpbGxTdWNjZWVkOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpkaWRMb3NlUG9pbnRlckxvY2so
KQotewotICAgIGJvb2wgd2FzTG9ja2VkID0gbV9wb2ludGVyTG9ja2VkOwotICAgIG1fcG9pbnRl
ckxvY2tlZCA9IGZhbHNlOwotICAgIGlmICh3YXNMb2NrZWQpCi0gICAgICAgIHdlYldpZGdldCgp
LT5kaWRMb3NlUG9pbnRlckxvY2soKTsKLX0KLSNlbmRpZgotCiB2b2lkIFdlYlZpZXdIb3N0Ojpz
aG93KFdlYk5hdmlnYXRpb25Qb2xpY3kpCiB7CiAgICAgbV9oYXNXaW5kb3cgPSB0cnVlOwpAQCAt
NzYzLDcxICs2NjAsNiBAQCB2b2lkIFdlYlZpZXdIb3N0OjpzZXRMb2NhbGUoY29uc3Qgc3RkOjpz
dHJpbmcmIGxvY2FsZSkKICAgICBzZXRsb2NhbGUoTENfQUxMLCBsb2NhbGUuY19zdHIoKSk7CiB9
CiAKLXZvaWQgV2ViVmlld0hvc3Q6OnNldERldmljZU9yaWVudGF0aW9uKFdlYktpdDo6V2ViRGV2
aWNlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKQotewotICAgIGRldmljZU9yaWVudGF0aW9uQ2xp
ZW50TW9jaygpLT5zZXRPcmllbnRhdGlvbihvcmllbnRhdGlvbik7Ci19Ci0KLWludCBXZWJWaWV3
SG9zdDo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQotewot
ICAgIFZlY3RvcjxXZWJWaWV3SG9zdCo+IHdpbmRvd0xpc3QgPSBtX3NoZWxsLT53aW5kb3dMaXN0
KCk7Ci0gICAgaW50IG51bWJlck9mUmVxdWVzdHMgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgd2luZG93TGlzdC5zaXplKCk7IGkrKykKLSAgICAgICAgbnVtYmVyT2ZSZXF1ZXN0cyAr
PSB3aW5kb3dMaXN0W2ldLT5nZW9sb2NhdGlvbkNsaWVudE1vY2soKS0+bnVtYmVyT2ZQZW5kaW5n
UGVybWlzc2lvblJlcXVlc3RzKCk7Ci0gICAgcmV0dXJuIG51bWJlck9mUmVxdWVzdHM7Ci19Ci0K
LXZvaWQgV2ViVmlld0hvc3Q6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93ZWQp
Ci17Ci0gICAgVmVjdG9yPFdlYlZpZXdIb3N0Kj4gd2luZG93TGlzdCA9IG1fc2hlbGwtPndpbmRv
d0xpc3QoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdpbmRvd0xpc3Quc2l6ZSgpOyBp
KyspCi0gICAgICAgIHdpbmRvd0xpc3RbaV0tPmdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5zZXRQ
ZXJtaXNzaW9uKGFsbG93ZWQpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpzZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBh
Y2N1cmFjeSkKLXsKLSAgICBWZWN0b3I8V2ViVmlld0hvc3QqPiB3aW5kb3dMaXN0ID0gbV9zaGVs
bC0+d2luZG93TGlzdCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2luZG93TGlzdC5z
aXplKCk7IGkrKykKLSAgICAgICAgd2luZG93TGlzdFtpXS0+Z2VvbG9jYXRpb25DbGllbnRNb2Nr
KCktPnNldFBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5KTsKLX0KLQotdm9p
ZCBXZWJWaWV3SG9zdDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9y
KGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKQotewotICAgIFZlY3RvcjxXZWJWaWV3SG9zdCo+
IHdpbmRvd0xpc3QgPSBtX3NoZWxsLT53aW5kb3dMaXN0KCk7Ci0gICAgLy8gRklYTUU6IEJlbmph
bWluCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3aW5kb3dMaXN0LnNpemUoKTsgaSsrKQot
ICAgICAgICB3aW5kb3dMaXN0W2ldLT5nZW9sb2NhdGlvbkNsaWVudE1vY2soKS0+c2V0UG9zaXRp
b25VbmF2YWlsYWJsZUVycm9yKFdlYlN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSkpOwotfQotCi0j
aWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLXZvaWQgV2ViVmlld0hvc3Q6OmFkZE1vY2tTcGVlY2hJ
bnB1dFJlc3VsdChjb25zdCBzdGQ6OnN0cmluZyYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwg
Y29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKQotewotICAgIG1fc3BlZWNoSW5wdXRDb250cm9s
bGVyTW9jay0+YWRkTW9ja1JlY29nbml0aW9uUmVzdWx0KFdlYlN0cmluZzo6ZnJvbVVURjgocmVz
dWx0KSwgY29uZmlkZW5jZSwgV2ViU3RyaW5nOjpmcm9tVVRGOChsYW5ndWFnZSkpOwotfQotCi12
b2lkIFdlYlZpZXdIb3N0OjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sIGR1bXBSZWN0
KQotewotICAgIG1fc3BlZWNoSW5wdXRDb250cm9sbGVyTW9jay0+c2V0RHVtcFJlY3QoZHVtcFJl
Y3QpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQotdm9pZCBXZWJW
aWV3SG9zdDo6YWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KGNvbnN0IHN0ZDo6c3RyaW5n
JiB0cmFuc2NyaXB0LCBkb3VibGUgY29uZmlkZW5jZSkKLXsKLSAgICBtX21vY2tTcGVlY2hSZWNv
Z25pemVyLT5hZGRNb2NrUmVzdWx0KFdlYlN0cmluZzo6ZnJvbVVURjgodHJhbnNjcmlwdCksIGNv
bmZpZGVuY2UpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpzZXRNb2NrU3BlZWNoUmVjb2duaXRp
b25FcnJvcihjb25zdCBzdGQ6OnN0cmluZyYgZXJyb3IsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNz
YWdlKQotewotICAgIG1fbW9ja1NwZWVjaFJlY29nbml6ZXItPnNldEVycm9yKFdlYlN0cmluZzo6
ZnJvbVVURjgoZXJyb3IpLCBXZWJTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpKTsKLX0KLQotYm9v
bCBXZWJWaWV3SG9zdDo6d2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRlZCgpCi17Ci0gICAg
cmV0dXJuIG1fbW9ja1NwZWVjaFJlY29nbml6ZXItPndhc0Fib3J0ZWQoKTsKLX0KLSNlbmRpZgot
CiB2b2lkIFdlYlZpZXdIb3N0Ojp0ZXN0RmluaXNoZWQoKQogewogICAgIG1fc2hlbGwtPnRlc3RG
aW5pc2hlZCh0aGlzKTsKQEAgLTg1OCwxMSArNjkwLDYgQEAgaW50IFdlYlZpZXdIb3N0OjpuYXZp
Z2F0aW9uRW50cnlDb3VudCgpCiAgICAgcmV0dXJuIG1fc2hlbGwtPm5hdmlnYXRpb25FbnRyeUNv
dW50KCk7CiB9CiAKLWludCBXZWJWaWV3SG9zdDo6d2luZG93Q291bnQoKQotewotICAgIHJldHVy
biBtX3NoZWxsLT53aW5kb3dDb3VudCgpOwotfQotCiB2b2lkIFdlYlZpZXdIb3N0Ojpnb1RvT2Zm
c2V0KGludCBvZmZzZXQpCiB7CiAgICAgbV9zaGVsbC0+Z29Ub09mZnNldChvZmZzZXQpOwpAQCAt
OTcxLDEwICs3OTgsNiBAQCB2b2lkIFdlYlZpZXdIb3N0OjpyZXNldCgpCiAgICAgbV9sYXN0UGFn
ZUlkVXBkYXRlZCA9IC0xOwogICAgIG1faGFzV2luZG93ID0gZmFsc2U7CiAgICAgbV9pbk1vZGFs
TG9vcCA9IGZhbHNlOwotI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgbV9wb2ludGVyTG9j
a2VkID0gZmFsc2U7Ci0gICAgbV9wb2ludGVyTG9ja1BsYW5uZWRSZXN1bHQgPSBQb2ludGVyTG9j
a1dpbGxTdWNjZWVkOwotI2VuZGlmCiAKICAgICBtX25hdmlnYXRpb25Db250cm9sbGVyID0gYWRv
cHRQdHIobmV3IFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcih0aGlzKSk7CiAKQEAgLTk4MiwxNCAr
ODA1LDYgQEAgdm9pZCBXZWJWaWV3SG9zdDo6cmVzZXQoKQogICAgIG1fZWRpdENvbW1hbmROYW1l
LmNsZWFyKCk7CiAgICAgbV9lZGl0Q29tbWFuZFZhbHVlLmNsZWFyKCk7CiAKLSAgICBpZiAobV9n
ZW9sb2NhdGlvbkNsaWVudE1vY2suZ2V0KCkpCi0gICAgICAgIG1fZ2VvbG9jYXRpb25DbGllbnRN
b2NrLT5yZXNldE1vY2soKTsKLQotI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0gICAgaWYgKG1f
c3BlZWNoSW5wdXRDb250cm9sbGVyTW9jay5nZXQoKSkKLSAgICAgICAgbV9zcGVlY2hJbnB1dENv
bnRyb2xsZXJNb2NrLT5jbGVhclJlc3VsdHMoKTsKLSNlbmRpZgotCiAgICAgbV9jdXJyZW50Q3Vy
c29yID0gV2ViQ3Vyc29ySW5mbygpOwogICAgIG1fd2luZG93UmVjdCA9IFdlYlJlY3QoKTsKICAg
ICAvLyBtX3Byb3h5IGlzIG5vdCBzZXQgd2hlbiByZXNldCgpIGlzIGludm9rZWQgZnJvbSB0aGUg
Y29uc3RydWN0b3IuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9X
ZWJWaWV3SG9zdC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3Qu
aAppbmRleCA0ZjljN2M5MjI0MDVmNTA0NmQxOTFlYmRiMGJjMDEyNTZkMWQzNjlkLi5hYmY2ZDYz
ZTQ2ZTgzZTExMmFkY2I5MjI5YzRiYjE1MzU4ZjdiMTI3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKQEAgLTQ0LDIyICs0NCwxMyBAQAogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotY2xhc3Mg
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjsKLWNsYXNzIE1vY2tXZWJTcGVlY2hSZWNvZ25p
emVyOwogY2xhc3MgU2tDYW52YXM7CiBjbGFzcyBUZXN0U2hlbGw7CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogY2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudDsK
LWNsYXNzIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jazsKLWNsYXNzIFdlYkdlb2xvY2F0
aW9uQ2xpZW50OwotY2xhc3MgV2ViR2VvbG9jYXRpb25DbGllbnRNb2NrOwotY2xhc3MgV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlTW9jazsKIGNsYXNzIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIGNs
YXNzIFdlYlNoYXJlZFdvcmtlckNsaWVudDsKLWNsYXNzIFdlYlNwZWVjaElucHV0Q29udHJvbGxl
cjsKLWNsYXNzIFdlYlNwZWVjaElucHV0TGlzdGVuZXI7CiBjbGFzcyBXZWJVUkw7CiBzdHJ1Y3Qg
V2ViUmVjdDsKIHN0cnVjdCBXZWJVUkxFcnJvcjsKQEAgLTkyLDE0ICs4Myw2IEBAIGNsYXNzIFdl
YlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVudCwgcHVibGljIFdlYktpdDo6
V2ViRnJhbWVDbGllbnQsCiAKICAgICB2b2lkIGNsb3NlV2lkZ2V0KCk7CiAKLSNpZiBFTkFCTEUo
SU5QVVRfU1BFRUNIKQotICAgIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIHNwZWVjaElu
cHV0Q29udHJvbGxlck1vY2soKSB7IHJldHVybiBtX3NwZWVjaElucHV0Q29udHJvbGxlck1vY2su
Z2V0KCk7IH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKLSAgICBNb2Nr
V2ViU3BlZWNoUmVjb2duaXplciogbW9ja1NwZWVjaFJlY29nbml6ZXIoKSB7IHJldHVybiBtX21v
Y2tTcGVlY2hSZWNvZ25pemVyLmdldCgpOyB9Ci0jZW5kaWYKLQogICAgIC8vIFdlYlRlc3REZWxl
Z2F0ZS4KICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENvbW1hbmQoY29uc3Qgc3RkOjpzdHJpbmcm
IG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2
b2lkIGNsZWFyRWRpdENvbW1hbmQoKSBPVkVSUklERTsKQEAgLTEyNiwzNCArMTA5LDEyIEBAIGNs
YXNzIFdlYlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVudCwgcHVibGljIFdl
YktpdDo6V2ViRnJhbWVDbGllbnQsCiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VwdEFsbENvb2tp
ZXMoYm9vbCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBzdGQ6OnN0cmluZyBwYXRoVG9Mb2NhbFJl
c291cmNlKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRMb2NhbGUoY29uc3Qgc3RkOjpzdHJpbmcmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0RGV2aWNlT3JpZW50YXRpb24oV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvbiYpIE9W
RVJSSURFOwotI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgdmlydHVhbCB2b2lkIGRpZEFj
cXVpcmVQb2ludGVyTG9jaygpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkaWROb3RBY3F1
aXJlUG9pbnRlckxvY2soKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTG9zZVBvaW50
ZXJMb2NrKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBvaW50ZXJMb2NrV2lsbFJl
c3BvbmRBc3luY2hyb25vdXNseSgpIE9WRVJSSURFIHsgbV9wb2ludGVyTG9ja1BsYW5uZWRSZXN1
bHQgPSBQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
UG9pbnRlckxvY2tXaWxsRmFpbFN5bmNocm9ub3VzbHkoKSBPVkVSUklERSB7IG1fcG9pbnRlckxv
Y2tQbGFubmVkUmVzdWx0ID0gUG9pbnRlckxvY2tXaWxsRmFpbFN5bmM7IH0KLSNlbmRpZgotICAg
IHZpcnR1YWwgaW50IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3Rz
KCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihi
b29sKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24oZG91YmxlLCBkb3VibGUsIGRvdWJsZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihjb25zdCBzdGQ6OnN0cmlu
ZyYpIE9WRVJSSURFOwotI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0gICAgdmlydHVhbCB2b2lk
IGFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBzdGQ6OnN0cmluZyYsIGRvdWJsZSwgY29u
c3Qgc3RkOjpzdHJpbmcmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TW9ja1NwZWVj
aElucHV0RHVtcFJlY3QoYm9vbCkgT1ZFUlJJREU7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU0NSSVBU
RURfU1BFRUNIKQotICAgIHZpcnR1YWwgdm9pZCBhZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1
bHQoY29uc3Qgc3RkOjpzdHJpbmcmLCBkb3VibGUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRNb2NrU3BlZWNoUmVjb2duaXRpb25FcnJvcihjb25zdCBzdGQ6OnN0cmluZyYsIGNvbnN0
IHN0ZDo6c3RyaW5nJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIHdhc01vY2tTcGVlY2hS
ZWNvZ25pdGlvbkFib3J0ZWQoKSBPVkVSUklERTsKLSNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCB0
ZXN0RmluaXNoZWQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgdGVzdFRpbWVkT3V0KCkg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzQmVpbmdEZWJ1Z2dlZCgpIE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgaW50IGxheW91dFRlc3RUaW1lb3V0KCkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIGNsb3NlUmVtYWluaW5nV2luZG93cygpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgaW50
IG5hdmlnYXRpb25FbnRyeUNvdW50KCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgd2luZG93
Q291bnQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZ29Ub09mZnNldChpbnQpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgdm9pZCByZWxvYWQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgbG9hZFVSTEZvckZyYW1lKGNvbnN0IFdlYktpdDo6V2ViVVJMJiwgY29uc3Qgc3RkOjpzdHJp
bmcmIGZyYW1lTmFtZSkgT1ZFUlJJREU7CkBAIC0xOTMsMTQgKzE1NCw2IEBAIGNsYXNzIFdlYlZp
ZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVudCwgcHVibGljIFdlYktpdDo6V2Vi
RnJhbWVDbGllbnQsCiAgICAgdmlydHVhbCB2b2lkIG5hdmlnYXRlQmFja0ZvcndhcmRTb29uKGlu
dCBvZmZzZXQpOwogICAgIHZpcnR1YWwgaW50IGhpc3RvcnlCYWNrTGlzdENvdW50KCk7CiAgICAg
dmlydHVhbCBpbnQgaGlzdG9yeUZvcndhcmRMaXN0Q291bnQoKTsKLSAgICB2aXJ0dWFsIFdlYktp
dDo6V2ViR2VvbG9jYXRpb25DbGllbnQqIGdlb2xvY2F0aW9uQ2xpZW50KCk7Ci0jaWYgRU5BQkxF
KElOUFVUX1NQRUVDSCkKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyKiBzcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViS2l0OjpXZWJTcGVlY2hJbnB1dExpc3RlbmVy
Kik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQotICAgIHZpcnR1YWwgV2Vi
S2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyKiBzcGVlY2hSZWNvZ25pemVyKCkgT1ZFUlJJREU7Ci0j
ZW5kaWYKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQqIGRl
dmljZU9yaWVudGF0aW9uQ2xpZW50KCkgT1ZFUlJJREU7CiAKICAgICAvLyBXZWJLaXQ6OldlYldp
ZGdldENsaWVudAogICAgIHZpcnR1YWwgdm9pZCBkaWRBdXRvUmVzaXplKGNvbnN0IFdlYktpdDo6
V2ViU2l6ZSYgbmV3U2l6ZSk7CkBAIC0yMjAsMTEgKzE3Myw2IEBAIGNsYXNzIFdlYlZpZXdIb3N0
IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVudCwgcHVibGljIFdlYktpdDo6V2ViRnJhbWVD
bGllbnQsCiAgICAgdmlydHVhbCBXZWJLaXQ6OldlYlJlY3Qgcm9vdFdpbmRvd1JlY3QoKTsKICAg
ICB2aXJ0dWFsIFdlYktpdDo6V2ViUmVjdCB3aW5kb3dSZXNpemVyUmVjdCgpOwogICAgIHZpcnR1
YWwgV2ViS2l0OjpXZWJTY3JlZW5JbmZvIHNjcmVlbkluZm8oKTsKLSNpZiBFTkFCTEUoUE9JTlRF
Ul9MT0NLKQotICAgIHZpcnR1YWwgYm9vbCByZXF1ZXN0UG9pbnRlckxvY2soKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQb2lu
dGVyTG9ja2VkKCk7Ci0jZW5kaWYKIAogICAgIC8vIFdlYktpdDo6V2ViRnJhbWVDbGllbnQKICAg
ICB2aXJ0dWFsIFdlYktpdDo6V2ViUGx1Z2luKiBjcmVhdGVQbHVnaW4oV2ViS2l0OjpXZWJGcmFt
ZSosIGNvbnN0IFdlYktpdDo6V2ViUGx1Z2luUGFyYW1zJik7CkBAIC0yNTEsMTEgKzE5OSw2IEBA
IGNsYXNzIFdlYlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVudCwgcHVibGlj
IFdlYktpdDo6V2ViRnJhbWVDbGllbnQsCiAgICAgICAgIFdlYktpdDo6V2ViRnJhbWUqIHNvdXJj
ZUZyYW1lLCBXZWJLaXQ6OldlYkZyYW1lKiB0YXJnZXRGcmFtZSwgCiAgICAgICAgIFdlYktpdDo6
V2ViU2VjdXJpdHlPcmlnaW4gdGFyZ2V0LCBXZWJLaXQ6OldlYkRPTU1lc3NhZ2VFdmVudCk7CiAK
LSAgICBXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jayogZGV2aWNlT3JpZW50
YXRpb25DbGllbnRNb2NrKCk7Ci0KLSAgICAvLyBHZW9sb2NhdGlvbiBjbGllbnQgbW9ja3MgZm9y
IERSVFRlc3RSdW5uZXIKLSAgICBXZWJLaXQ6OldlYkdlb2xvY2F0aW9uQ2xpZW50TW9jayogZ2Vv
bG9jYXRpb25DbGllbnRNb2NrKCk7Ci0KICAgICAvLyBQZW5kaW5nIHRhc2sgbGlzdCwgTm90ZSB0
YWh0IHRoZSBtZXRob2QgaXMgcmVmZXJyZWQgZnJvbSBXZWJNZXRob2RUYXNrIGNsYXNzLgogICAg
IFdlYlRlc3RSdW5uZXI6OldlYlRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rhc2tM
aXN0OyB9CiAKQEAgLTMyNiwxNyArMjY5LDYgQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxXZWJL
aXQ6OldlYkNvbnRleHRNZW51RGF0YT4gbV9sYXN0Q29udGV4dE1lbnVEYXRhOwogCi0gICAgLy8g
R2VvbG9jYXRpb24KLSAgICBPd25QdHI8V2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2s+
IG1fZ2VvbG9jYXRpb25DbGllbnRNb2NrOwotCi0gICAgT3duUHRyPFdlYktpdDo6V2ViRGV2aWNl
T3JpZW50YXRpb25DbGllbnRNb2NrPiBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jazsKLSNp
ZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotICAgIE93blB0cjxNb2NrV2ViU3BlZWNoSW5wdXRDb250
cm9sbGVyPiBtX3NwZWVjaElucHV0Q29udHJvbGxlck1vY2s7Ci0jZW5kaWYKLQotI2lmIEVOQUJM
RShTQ1JJUFRFRF9TUEVFQ0gpCi0gICAgT3duUHRyPE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyPiBt
X21vY2tTcGVlY2hSZWNvZ25pemVyOwotI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQogICAgIE93blB0cjx3ZWJraXRfc3VwcG9ydDo6VGVzdE1lZGlhU3RyZWFtQ2xpZW50PiBtX3Rl
c3RNZWRpYVN0cmVhbUNsaWVudDsKQEAgLTM0NywxNSArMjc5LDYgQEAgcHJpdmF0ZToKICAgICBX
ZWJUZXN0UnVubmVyOjpXZWJUYXNrTGlzdCBtX3Rhc2tMaXN0OwogICAgIFZlY3RvcjxXZWJLaXQ6
OldlYldpZGdldCo+IG1fcG9wdXBtZW51czsKIAotI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0g
ICAgYm9vbCBtX3BvaW50ZXJMb2NrZWQ7Ci0gICAgZW51bSB7Ci0gICAgICAgIFBvaW50ZXJMb2Nr
V2lsbFN1Y2NlZWQsCi0gICAgICAgIFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luYywKLSAgICAg
ICAgUG9pbnRlckxvY2tXaWxsRmFpbFN5bmMKLSAgICB9IG1fcG9pbnRlckxvY2tQbGFubmVkUmVz
dWx0OwotI2VuZGlmCi0KICAgICBPd25QdHI8V2ViS2l0OjpXZWJMYXllclRyZWVWaWV3PiBtX2xh
eWVyVHJlZVZpZXc7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189297</attachid>
            <date>2013-02-20 05:37:24 -0800</date>
            <delta_ts>2013-02-20 06:11:49 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-110217-20130220143345.patch</filename>
            <type>text/plain</type>
            <size>100335</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMzE2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjdkZTgyNDE0MmQ4ZjliY2QyZDhjMWMwMTNjMTZhNWEy
OGEyYmNmNy4uNGE5M2UxMmQ3ODhjOWQ0MzFiODkzYTQ2ODhiNWU4YzE2YzE5NzM2MCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
NyBAQAorMjAxMy0wMi0yMCAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4K
KworICAgICAgICBbY2hyb21pdW1dIG1vdmUgbW9zdCBvZiB0aGUgcmVtYWluaW5nIG1vY2tzIHRv
IFRlc3RSdW5uZXIgbGlicmFyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEwMjE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTmljbyBXZWJlci4KKwor
ICAgICAgICBXaGlsZSBtb3N0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoZXNl
IG1vY2tzIGlzIGFsc28KKyAgICAgICAgYXZhaWxhYmxlIGluIHRoZSBjb250ZW50IG1vZHVsZSwg
dGhlcmUgaXMgbm8gc3RyYWlnaHQgZm9yd2FyZCB3YXkgdG8KKyAgICAgICAgaW5qZWN0IHRoZSBt
b2NrIHJlc3VsdHMgcmVxdWlyZWQgZm9yIGxheW91dCB0ZXN0cy4KKworICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdERlbGVnYXRlLmg6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5Lmg6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6CisgICAgICAgIChX
ZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHk6Omdlb2xvY2F0aW9uQ2xpZW50KToKKyAgICAgICAg
KFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eTo6c3BlZWNoSW5wdXRDb250cm9sbGVyKToKKyAg
ICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eTo6c3BlZWNoUmVjb2duaXplcik6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHk6OmRldmljZU9yaWVudGF0aW9uQ2xp
ZW50KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eTo6cmVxdWVzdFBvaW50
ZXJMb2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eTo6cmVxdWVzdFBv
aW50ZXJVbmxvY2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5Ojppc1Bv
aW50ZXJMb2NrZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwOiBSZW5hbWVkIGZyb20gVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5j
cHAuCisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
OjpNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIp
OgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6
fk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6c2V0RGVsZWdhdGUpOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6YWRkTW9ja1JlY29nbml0
aW9uUmVzdWx0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXI6OnNldER1bXBSZWN0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJT
cGVlY2hJbnB1dENvbnRyb2xsZXI6OmNsZWFyUmVzdWx0cyk6CisgICAgICAgIChXZWJUZXN0UnVu
bmVyOjpNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpzdGFydFJlY29nbml0aW9uKToKKyAg
ICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmNhbmNl
bFJlY29nbml0aW9uKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1
dENvbnRyb2xsZXI6OnN0b3BSZWNvcmRpbmcpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9j
a1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6c3BlZWNoVGFza0ZpcmVkKToKKyAgICAgICAgKFdl
YlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OlNwZWVjaFRhc2s6OlNw
ZWVjaFRhc2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlcjo6U3BlZWNoVGFzazo6c3RvcCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2Nr
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpTcGVlY2hUYXNrOjpydW5JZlZhbGlkKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyLmg6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmguCisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViVGVzdFJ1bm5lcik6CisgICAgICAgIChNb2NrV2ViU3BlZWNoSW5wdXRDb250
cm9sbGVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hJbnB1dENvbnRy
b2xsZXI6OnRhc2tMaXN0KToKKyAgICAgICAgKFNwZWVjaFRhc2spOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hSZWNvZ25pemVy
LmNwcDogUmVuYW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJT
cGVlY2hSZWNvZ25pemVyLmNwcC4KKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcik6CisgICAgICAgIChXZWJUZXN0
UnVubmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVy
Ojp+TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9j
a1dlYlNwZWVjaFJlY29nbml6ZXI6OnNldERlbGVnYXRlKToKKyAgICAgICAgKFdlYlRlc3RSdW5u
ZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzdGFydCk6CisgICAgICAgIChXZWJUZXN0UnVu
bmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c3RvcCk6CisgICAgICAgIChXZWJUZXN0UnVu
bmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6YWJvcnQpOgorICAgICAgICAoV2ViVGVzdFJ1
bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmFkZE1vY2tSZXN1bHQpOgorICAgICAgICAo
V2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnNldEVycm9yKToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzdGFydFRhc2tRdWV1
ZSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6Y2xl
YXJUYXNrUXVldWUpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29n
bml6ZXI6OlN0ZXBUYXNrOjpydW5JZlZhbGlkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5oOiBSZW5hbWVk
IGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXIuaC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAg
ICAgKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6Ok1v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyOjp3YXNBYm9ydGVkKToKKyAgICAgICAgKFdlYlRlc3RSdW5u
ZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpjbGllbnQpOgorICAgICAgICAoV2ViVGVzdFJ1
bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmhhbmRsZSk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6dGFza0xpc3QpOgorICAgICAgICAoVGFz
ayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6VGFz
azo6VGFzayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXpl
cjo6VGFzazo6flRhc2spOgorICAgICAgICAoU3RlcFRhc2spOgorICAgICAgICAoV2ViVGVzdFJ1
bm5lcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlN0ZXBUYXNrOjpTdGVwVGFzayk6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFj
ZXMuY3BwOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdEludGVyZmFjZXM6OlRlc3RJbnRl
cmZhY2VzKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RJbnRlcmZhY2VzOjp3aW5kb3dP
cGVuZWQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJUZXN0UnVubmVy
OjpUZXN0SW50ZXJmYWNlczo6d2luZG93Q2xvc2VkKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlRlc3RJbnRlcmZhY2VzOjp3aW5kb3dMaXN0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5oOgorICAgICAgICAoVGVzdElu
dGVyZmFjZXMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
c3JjL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6
VGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpyZXNldCk6
CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpyZXF1ZXN0UG9pbnRlckxvY2sp
OgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0
UnVubmVyOjpyZXF1ZXN0UG9pbnRlclVubG9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpU
ZXN0UnVubmVyOjppc1BvaW50ZXJMb2NrZWQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVz
dFJ1bm5lcjo6ZGlkQWNxdWlyZVBvaW50ZXJMb2NrSW50ZXJuYWwpOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6VGVzdFJ1bm5lcjo6ZGlkTm90QWNxdWlyZVBvaW50ZXJMb2NrSW50ZXJuYWwpOgor
ICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6ZGlkTG9zZVBvaW50ZXJMb2NrSW50
ZXJuYWwpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6d2luZG93Q291bnQp
OgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0RldmljZU9yaWVu
dGF0aW9uKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6Om51bWJlck9mUGVu
ZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKToKKyAgICAgICAgKFdlYlRlc3RSdW5u
ZXI6OlRlc3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbik6CisgICAgICAgIChXZWJU
ZXN0UnVubmVyOjpUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6CisgICAg
ICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
blVuYXZhaWxhYmxlRXJyb3IpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6
YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RS
dW5uZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KToKKyAgICAgICAgKFdlYlRlc3RSdW5u
ZXI6OlRlc3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAg
IChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoUmVjb2duaXRpb25FcnJv
cik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjp3YXNNb2NrU3BlZWNoUmVj
b2duaXRpb25BYm9ydGVkKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmRp
ZEFjcXVpcmVQb2ludGVyTG9jayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVy
OjpkaWROb3RBY3F1aXJlUG9pbnRlckxvY2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVz
dFJ1bm5lcjo6ZGlkTG9zZVBvaW50ZXJMb2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRl
c3RSdW5uZXI6OnNldFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luY2hyb25vdXNseSk6CisgICAg
ICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3lu
Y2hyb25vdXNseSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvVGVzdFJ1bm5lci5oOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6CisgICAgICAgIChU
ZXN0UnVubmVyKToKKyAgICAgICAgKEhvc3RNZXRob2RUYXNrKToKKyAgICAgICAgKFdlYlRlc3RS
dW5uZXI6OlRlc3RSdW5uZXI6Okhvc3RNZXRob2RUYXNrOjpIb3N0TWV0aG9kVGFzayk6CisgICAg
ICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpIb3N0TWV0aG9kVGFzazo6cnVuSWZWYWxp
ZCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2Vi
VGVzdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJhc2U6
On5XZWJUZXN0UHJveHlCYXNlKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94
eUJhc2U6OnNldEludGVyZmFjZXMpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFBy
b3h5QmFzZTo6c2V0RGVsZWdhdGUpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFBy
b3h5QmFzZTo6cmVzZXQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5QmFz
ZTo6Y2FwdHVyZVRyZWUpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5QmFz
ZTo6Z2VvbG9jYXRpb25DbGllbnRNb2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAg
ICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5QmFzZTo6ZGV2aWNlT3JpZW50YXRpb25D
bGllbnRNb2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJhc2U6OnNw
ZWVjaElucHV0Q29udHJvbGxlck1vY2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVz
dFByb3h5QmFzZTo6c3BlZWNoUmVjb2duaXplck1vY2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5l
cjo6V2ViVGVzdFByb3h5QmFzZTo6Z2VvbG9jYXRpb25DbGllbnQpOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6V2ViVGVzdFByb3h5QmFzZTo6c3BlZWNoSW5wdXRDb250cm9sbGVyKToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJhc2U6OnNwZWVjaFJlY29nbml6ZXIpOgor
ICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5QmFzZTo6ZGV2aWNlT3JpZW50YXRp
b25DbGllbnQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5QmFzZTo6cmVx
dWVzdFBvaW50ZXJMb2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJh
c2U6OnJlcXVlc3RQb2ludGVyVW5sb2NrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRl
c3RQcm94eUJhc2U6OmlzUG9pbnRlckxvY2tlZCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViVmlld0hvc3QuY3BwOgorICAgICAgICAoV2ViVmlld0hvc3Q6OnJlc2V0KToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZpZXdIb3N0KToKKwogMjAxMy0wMi0xNyAgQW5kcmVp
IEJ1Y3VyICA8YWJ1Y3VyQGFkb2JlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGRpbmcg
bXlzZWxmIGFzIGEgY29tbWl0dGVyLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
RHVtcFJlbmRlclRyZWUuZ3lwaSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
Lmd5cGkKaW5kZXggMGI5Y2UzNTBlYzM5NWJiZGUwNDlkZTEzY2IyNDY1N2QyM2Q1YThkZi4uM2Y3
MWRhMWM5YmVkZjAyMmYxZjNmMmIzMDI0ZTNmYTdiMzViNzQ0MSAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCkBAIC0xMiwxMCArMTIsNiBAQAogICAgICAgICAgICAg
J2Nocm9taXVtL01vY2tXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCcsCiAgICAgICAgICAgICAnY2hy
b21pdW0vTW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnQuY3BwJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9Nb2NrV2ViUHJlcmVuZGVyaW5nU3VwcG9ydC5oJywKLSAgICAgICAgICAgICdjaHJvbWl1
bS9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcCcsCi0gICAgICAgICAgICAnY2hyb21p
dW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5oJywKLSAgICAgICAgICAgICdjaHJvbWl1
bS9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL01v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rhc2suaCcs
CiAgICAgICAgICAgICAnY2hyb21pdW0vVGFzay5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVt
L1Rlc3RFdmVudFByaW50ZXIuaCcsCkBAIC03NSw2ICs3MSwxMCBAQAogICAgICAgICAgICAgJ2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJSVENEVE1GU2VuZGVySGFuZGxlci5oJywKICAg
ICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDUGVlckNvbm5lY3Rp
b25IYW5kbGVyLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9j
a1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcCcsCisgICAgICAg
ICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxl
ci5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNo
UmVjb2duaXplci5jcHAnLAorICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL05vdGlmaWNhdGlvblByZXNlbnRlci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9TcGVsbENoZWNrQ2xpZW50LmNwcCcsCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hJbnB1
dENvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjU3NmM3ZTYz
NmJiZTQxZTc3NzM5YzRkZTI4NzY0YjJkZDU3Y2FmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTW9ja1dlYlNwZWVjaElu
cHV0Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiVGFzay5oIgotI2luY2x1ZGUgIldlYlNwZWVj
aElucHV0TGlzdGVuZXIuaCIKLSNpbmNsdWRlIDxwdWJsaWMvV2ViQ1N0cmluZy5oPgotI2luY2x1
ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi0jaWYgRU5BQkxFKElOUFVUX1NQ
RUVDSCkKLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJUZXN0
UnVubmVyOwotCi1QYXNzT3duUHRyPE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI+IE1vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmNyZWF0ZShXZWJTcGVlY2hJbnB1dExpc3RlbmVyKiBs
aXN0ZW5lcikKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXIobGlzdGVuZXIpKTsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyOjphZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoY29uc3QgV2ViU3RyaW5nJiByZXN1bHQsIGRv
dWJsZSBjb25maWRlbmNlLCBjb25zdCBXZWJTdHJpbmcmIGxhbmd1YWdlKQotewotICAgIFdlYlNw
ZWVjaElucHV0UmVzdWx0IHJlczsKLSAgICByZXMuYXNzaWduKHJlc3VsdCwgY29uZmlkZW5jZSk7
Ci0KLSAgICBpZiAobGFuZ3VhZ2UuaXNFbXB0eSgpKQotICAgICAgICBtX3Jlc3VsdHNGb3JFbXB0
eUxhbmd1YWdlLmFwcGVuZChyZXMpOwotICAgIGVsc2UgewotICAgICAgICBTdHJpbmcgbGFuZ1N0
cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
IGlmICghbV9yZWNvZ25pdGlvblJlc3VsdHMuY29udGFpbnMobGFuZ1N0cmluZykpCi0gICAgICAg
ICAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5zZXQobGFuZ1N0cmluZywgVmVjdG9yPFdlYlNwZWVj
aElucHV0UmVzdWx0PigpKTsKLSAgICAgICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuZmluZChsYW5n
U3RyaW5nKS0+dmFsdWUuYXBwZW5kKHJlcyk7Ci0gICAgfQotfQotCi12b2lkIE1vY2tXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXI6OnNldER1bXBSZWN0KGJvb2wgZHVtcFJlY3QpCi17Ci0gICAgbV9k
dW1wUmVjdCA9IGR1bXBSZWN0OwotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXI6OmNsZWFyUmVzdWx0cygpCi17Ci0gICAgbV9yZXN1bHRzRm9yRW1wdHlMYW5ndWFnZS5jbGVh
cigpOwotICAgIG1fcmVjb2duaXRpb25SZXN1bHRzLmNsZWFyKCk7Ci0gICAgbV9kdW1wUmVjdCA9
IGZhbHNlOwotfQotCi1ib29sIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnN0YXJ0UmVj
b2duaXRpb24oaW50IHJlcXVlc3RJZCwgY29uc3QgV2ViUmVjdCYgZWxlbWVudFJlY3QsIGNvbnN0
IFdlYlN0cmluZyYgbGFuZ3VhZ2UsIGNvbnN0IFdlYlN0cmluZyYgZ3JhbW1hciwgY29uc3QgV2Vi
U2VjdXJpdHlPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBpZiAobV9zcGVlY2hUYXNrKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3JlcXVlc3RJZCA9IHJlcXVlc3RJZDsKLSAgICBtX3Jl
cXVlc3RSZWN0ID0gZWxlbWVudFJlY3Q7Ci0gICAgbV9yZWNvcmRpbmcgPSB0cnVlOwotICAgIG1f
bGFuZ3VhZ2UgPSBTdHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOwotCi0g
ICAgbV9zcGVlY2hUYXNrID0gbmV3IFNwZWVjaFRhc2sodGhpcyk7Ci0gICAgcG9zdFRhc2sobV9z
cGVlY2hUYXNrKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hJ
bnB1dENvbnRyb2xsZXI6OmNhbmNlbFJlY29nbml0aW9uKGludCByZXF1ZXN0SWQpCi17Ci0gICAg
aWYgKG1fc3BlZWNoVGFzaykgewotICAgICAgICBBU1NFUlQocmVxdWVzdElkID09IG1fcmVxdWVz
dElkKTsKLQotICAgICAgICBtX3NwZWVjaFRhc2stPnN0b3AoKTsKLSAgICAgICAgbV9yZWNvcmRp
bmcgPSBmYWxzZTsKLSAgICAgICAgbV9saXN0ZW5lci0+ZGlkQ29tcGxldGVSZWNvZ25pdGlvbiht
X3JlcXVlc3RJZCk7Ci0gICAgICAgIG1fcmVxdWVzdElkID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQg
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6c3RvcFJlY29yZGluZyhpbnQgcmVxdWVzdElk
KQotewotICAgIEFTU0VSVChyZXF1ZXN0SWQgPT0gbV9yZXF1ZXN0SWQpOwotICAgIGlmIChtX3Nw
ZWVjaFRhc2sgJiYgbV9yZWNvcmRpbmcpIHsKLSAgICAgICAgbV9zcGVlY2hUYXNrLT5zdG9wKCk7
Ci0gICAgICAgIHNwZWVjaFRhc2tGaXJlZCgpOwotICAgIH0KLX0KLQotTW9ja1dlYlNwZWVjaElu
cHV0Q29udHJvbGxlcjo6TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcihXZWJTcGVlY2hJbnB1
dExpc3RlbmVyKiBsaXN0ZW5lcikKLSAgICA6IG1fbGlzdGVuZXIobGlzdGVuZXIpCi0gICAgLCBt
X3NwZWVjaFRhc2soMCkKLSAgICAsIG1fcmVjb3JkaW5nKGZhbHNlKQotICAgICwgbV9yZXF1ZXN0
SWQoLTEpCi0gICAgLCBtX2R1bXBSZWN0KGZhbHNlKQotewotfQotCi1zdGF0aWMgV2ViU3BlZWNo
SW5wdXRSZXN1bHRBcnJheSBtYWtlUmVjdFJlc3VsdChjb25zdCBXZWJSZWN0JiByZWN0KQotewot
ICAgIFN0cmluZ0J1aWxkZXIgc2I7Ci0gICAgc2IuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHJlY3Qu
eCkpOwotICAgIHNiLmFwcGVuZCgiLCIpOwotICAgIHNiLmFwcGVuZChTdHJpbmc6Om51bWJlcihy
ZWN0LnkpKTsKLSAgICBzYi5hcHBlbmQoIiwiKTsKLSAgICBzYi5hcHBlbmQoU3RyaW5nOjpudW1i
ZXIocmVjdC53aWR0aCkpOwotICAgIHNiLmFwcGVuZCgiLCIpOwotICAgIHNiLmFwcGVuZChTdHJp
bmc6Om51bWJlcihyZWN0LmhlaWdodCkpOwotCi0gICAgV2ViU3BlZWNoSW5wdXRSZXN1bHQgcmVz
OwotICAgIHJlcy5hc3NpZ24oV2ViU3RyaW5nKHNiLmNoYXJhY3RlcnMoKSwgc2IubGVuZ3RoKCkp
LCAxLjApOwotCi0gICAgV2ViU3BlZWNoSW5wdXRSZXN1bHRBcnJheSByZXN1bHRzOwotICAgIHJl
c3VsdHMuYXNzaWduKCZyZXMsIDEpOwotICAgIHJldHVybiByZXN1bHRzOwotfQotCi12b2lkIE1v
Y2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnNwZWVjaFRhc2tGaXJlZCgpCi17Ci0gICAgaWYg
KG1fcmVjb3JkaW5nKSB7Ci0gICAgICAgIG1fcmVjb3JkaW5nID0gZmFsc2U7Ci0gICAgICAgIG1f
bGlzdGVuZXItPmRpZENvbXBsZXRlUmVjb3JkaW5nKG1fcmVxdWVzdElkKTsKLQotICAgICAgICBt
X3NwZWVjaFRhc2sgPSBuZXcgU3BlZWNoVGFzayh0aGlzKTsKLSAgICAgICAgcG9zdFRhc2sobV9z
cGVlY2hUYXNrKTsKLSAgICB9IGVsc2UgewotICAgICAgICBib29sIG5vUmVzdWx0c0ZvdW5kID0g
ZmFsc2U7Ci0gICAgICAgIC8vIFdlIHRha2UgYSBjb3B5IG9mIHRoZSByZXF1ZXN0SWQgaGVyZSBz
byB0aGF0IGlmIHNjcmlwdHMgZGVzdHJveWVkIHRoZSBpbnB1dCBlbGVtZW50Ci0gICAgICAgIC8v
IGluc2lkZSBvbmUgb2YgdGhlIGNhbGxiYWNrcyBiZWxvdywgd2UnbGwgc3RpbGwga25vdyB3aGF0
IHRoaXMgc2Vzc2lvbidzIHJlcXVlc3RJZCB3YXMuCi0gICAgICAgIGludCByZXF1ZXN0SWQgPSBt
X3JlcXVlc3RJZDsKLSAgICAgICAgbV9yZXF1ZXN0SWQgPSAwOwotCi0gICAgICAgIGlmIChtX2R1
bXBSZWN0KSB7Ci0gICAgICAgICAgICBtX2xpc3RlbmVyLT5zZXRSZWNvZ25pdGlvblJlc3VsdChy
ZXF1ZXN0SWQsIG1ha2VSZWN0UmVzdWx0KG1fcmVxdWVzdFJlY3QpKTsKLSAgICAgICAgfSBlbHNl
IGlmIChtX2xhbmd1YWdlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gRW1wdHkgbGFuZ3Vh
Z2UgY2FzZSBtdXN0IGJlIGhhbmRsZWQgc2VwYXJhdGVseSB0byBhdm9pZCBwcm9ibGVtcyB3aXRo
IEhhc2hNYXAgYW5kIGVtcHR5IGtleXMuCi0gICAgICAgICAgICBpZiAoIW1fcmVzdWx0c0ZvckVt
cHR5TGFuZ3VhZ2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1fbGlzdGVuZXItPnNldFJl
Y29nbml0aW9uUmVzdWx0KHJlcXVlc3RJZCwgbV9yZXN1bHRzRm9yRW1wdHlMYW5ndWFnZSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbm9SZXN1bHRzRm91bmQgPSB0cnVlOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1fcmVjb2duaXRpb25SZXN1bHRzLmNv
bnRhaW5zKG1fbGFuZ3VhZ2UpKQotICAgICAgICAgICAgICAgIG1fbGlzdGVuZXItPnNldFJlY29n
bml0aW9uUmVzdWx0KHJlcXVlc3RJZCwgbV9yZWNvZ25pdGlvblJlc3VsdHMuZ2V0KG1fbGFuZ3Vh
Z2UpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBub1Jlc3VsdHNGb3VuZCA9
IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobm9SZXN1bHRzRm91bmQpIHsKLSAgICAg
ICAgICAgIC8vIENhbid0IGF2b2lkIHNldHRpbmcgYSByZXN1bHQgZXZlbiBpZiBubyByZXN1bHQg
d2FzIHNldCBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlLgotICAgICAgICAgICAgLy8gVGhpcyB3b3Vs
ZCBhdm9pZCBnZW5lcmF0aW5nIHRoZSBldmVudHMgdXNlZCB0byBjaGVjayB0aGUgcmVzdWx0cyBh
bmQgdGhlIHRlc3Qgd291bGQgdGltZW91dC4KLSAgICAgICAgICAgIFN0cmluZyBlcnJvcigiZXJy
b3I6IG5vIHJlc3VsdCBmb3VuZCBmb3IgbGFuZ3VhZ2UgJyIpOwotICAgICAgICAgICAgZXJyb3Iu
YXBwZW5kKG1fbGFuZ3VhZ2UpOwotICAgICAgICAgICAgZXJyb3IuYXBwZW5kKCInIik7Ci0KLSAg
ICAgICAgICAgIFdlYlNwZWVjaElucHV0UmVzdWx0IHJlczsKLSAgICAgICAgICAgIHJlcy5hc3Np
Z24oV2ViU3RyaW5nOjpmcm9tVVRGOChlcnJvci51dGY4KCkuZGF0YSgpKSwgMS4wKTsKLQotICAg
ICAgICAgICAgVmVjdG9yPFdlYlNwZWVjaElucHV0UmVzdWx0PiByZXN1bHRzOwotICAgICAgICAg
ICAgcmVzdWx0cy5hcHBlbmQocmVzKTsKLQotICAgICAgICAgICAgbV9saXN0ZW5lci0+c2V0UmVj
b2duaXRpb25SZXN1bHQocmVxdWVzdElkLCByZXN1bHRzKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6U3BlZWNoVGFzazo6U3BlZWNoVGFzayhN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKiBtb2NrKQotICAgIDogV2ViTWV0aG9kVGFzazxN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyPjo6V2ViTWV0aG9kVGFzayhtb2NrKQotewotfQot
Ci12b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OlNwZWVjaFRhc2s6OnN0b3AoKQot
ewotICAgIG1fb2JqZWN0LT5tX3NwZWVjaFRhc2sgPSAwOwotICAgIGNhbmNlbCgpOwotICAgIGRl
bGV0ZSh0aGlzKTsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpTcGVl
Y2hUYXNrOjpydW5JZlZhbGlkKCkKLXsKLSAgICBtX29iamVjdC0+bV9zcGVlY2hUYXNrID0gMDsK
LSAgICBtX29iamVjdC0+c3BlZWNoVGFza0ZpcmVkKCk7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0Q29udHJv
bGxlci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTNmMGJmNjdhNWQ1
ZWQwYWVhMjEyYWY0YzU1OTg5Y2ZlN2NjZjlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJT
cGVlY2hJbnB1dENvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXJfaAotI2RlZmluZSBNb2Nr
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyX2gKLQotI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0K
LSNpbmNsdWRlICJXZWJUYXNrLmgiCi0jaW5jbHVkZSAiV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSAiV2ViU3BlZWNoSW5wdXRSZXN1bHQuaCIKLSNpbmNsdWRlIDxwdWJsaWMv
V2ViUmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlNlY3VyaXR5
T3JpZ2luOwotY2xhc3MgV2ViU3BlZWNoSW5wdXRMaXN0ZW5lcjsKLWNsYXNzIFdlYlN0cmluZzsK
LX0KLQotY2xhc3MgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlciA6IHB1YmxpYyBXZWJLaXQ6
OldlYlNwZWVjaElucHV0Q29udHJvbGxlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcj4gY3JlYXRlKFdlYktpdDo6V2ViU3BlZWNo
SW5wdXRMaXN0ZW5lciopOwotCi0gICAgdm9pZCBhZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoY29u
c3QgV2ViS2l0OjpXZWJTdHJpbmcmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIGNvbnN0IFdl
YktpdDo6V2ViU3RyaW5nJiBsYW5ndWFnZSk7Ci0gICAgdm9pZCBzZXREdW1wUmVjdChib29sKTsK
LSAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwotCi0gICAgLy8gV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyIGltcGxlbWVudGF0aW9uOgotICAgIHZpcnR1YWwgYm9vbCBzdGFydFJlY29nbml0aW9uKGlu
dCByZXF1ZXN0SWQsIGNvbnN0IFdlYktpdDo6V2ViUmVjdCYgZWxlbWVudFJlY3QsIGNvbnN0IFdl
YktpdDo6V2ViU3RyaW5nJiBsYW5ndWFnZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGdyYW1t
YXIsIGNvbnN0IFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW4mKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgY2FuY2VsUmVjb2duaXRpb24oaW50IHJlcXVlc3RJZCkgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIHN0b3BSZWNvcmRpbmcoaW50IHJlcXVlc3RJZCkgT1ZFUlJJREU7Ci0KLSAg
ICBXZWJUZXN0UnVubmVyOjpXZWJUYXNrTGlzdCogdGFza0xpc3QoKSB7IHJldHVybiAmbV90YXNr
TGlzdDsgfQotCi1wcml2YXRlOgotICAgIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIoV2Vi
S2l0OjpXZWJTcGVlY2hJbnB1dExpc3RlbmVyKik7Ci0gICAgdm9pZCBzcGVlY2hUYXNrRmlyZWQo
KTsKLQotICAgIGNsYXNzIFNwZWVjaFRhc2sgOiBwdWJsaWMgV2ViVGVzdFJ1bm5lcjo6V2ViTWV0
aG9kVGFzazxNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyPiB7Ci0gICAgcHVibGljOgotICAg
ICAgICBTcGVlY2hUYXNrKE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqKTsKLSAgICAgICAg
dm9pZCBzdG9wKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuSWZW
YWxpZCgpIE9WRVJSSURFOwotICAgIH07Ci0KLSAgICBXZWJLaXQ6OldlYlNwZWVjaElucHV0TGlz
dGVuZXIqIG1fbGlzdGVuZXI7Ci0KLSAgICBXZWJUZXN0UnVubmVyOjpXZWJUYXNrTGlzdCBtX3Rh
c2tMaXN0OwotICAgIFNwZWVjaFRhc2sqIG1fc3BlZWNoVGFzazsKLQotICAgIGJvb2wgbV9yZWNv
cmRpbmc7Ci0gICAgaW50IG1fcmVxdWVzdElkOwotICAgIFdlYktpdDo6V2ViUmVjdCBtX3JlcXVl
c3RSZWN0OwotICAgIFN0cmluZyBtX2xhbmd1YWdlOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFZl
Y3RvcjxXZWJLaXQ6OldlYlNwZWVjaElucHV0UmVzdWx0PiA+IG1fcmVjb2duaXRpb25SZXN1bHRz
OwotICAgIFZlY3RvcjxXZWJLaXQ6OldlYlNwZWVjaElucHV0UmVzdWx0PiBtX3Jlc3VsdHNGb3JF
bXB0eUxhbmd1YWdlOwotICAgIGJvb2wgbV9kdW1wUmVjdDsKLX07Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5QVVRfU1BFRUNIKQotCi0jZW5kaWYgLy8gTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxl
cl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3Bl
ZWNoUmVjb2duaXplci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2Vi
U3BlZWNoUmVjb2duaXplci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMzYw
ZTBjZTI5NjY5YjNlMDc4MTZkYmY3OWQ3ZDc2N2U5ZWZkYzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTW9ja1dlYlNwZWVjaFJl
Y29nbml6ZXIuaCIKLQotI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCi0KLSNpbmNsdWRlICJU
YXNrLmgiCi0jaW5jbHVkZSAiV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIKLSNpbmNsdWRl
ICJXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
Ci11c2luZyBuYW1lc3BhY2UgV2ViVGVzdFJ1bm5lcjsKLQotbmFtZXNwYWNlIHsKLQotLy8gVGFz
ayBjbGFzcyBmb3IgY2FsbGluZyBhIGNsaWVudCBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IHRha2Ug
YW55IHBhcmFtZXRlcnMuCi10eXBlZGVmIHZvaWQgKFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6
OipDbGllbnRGdW5jdGlvblBvaW50ZXIpKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxl
Jik7Ci1jbGFzcyBDbGllbnRDYWxsVGFzayA6IHB1YmxpYyBNb2NrV2ViU3BlZWNoUmVjb2duaXpl
cjo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgQ2xpZW50Q2FsbFRhc2soTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXIqIG1vY2ssIENsaWVudEZ1bmN0aW9uUG9pbnRlciBmdW5jdGlvbikKLSAgICAgICAgOiBN
b2NrV2ViU3BlZWNoUmVjb2duaXplcjo6VGFzayhtb2NrKQotICAgICAgICAsIG1fZnVuY3Rpb24o
ZnVuY3Rpb24pCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBydW4oKSBPVkVSUklE
RSB7IChtX3JlY29nbml6ZXItPmNsaWVudCgpLT4qbV9mdW5jdGlvbikobV9yZWNvZ25pemVyLT5o
YW5kbGUoKSk7IH0KLQotcHJpdmF0ZToKLSAgICBDbGllbnRGdW5jdGlvblBvaW50ZXIgbV9mdW5j
dGlvbjsKLX07Ci0KLS8vIFRhc2sgZm9yIGRlbGl2ZXJpbmcgYSByZXN1bHQgZXZlbnQuCi1jbGFz
cyBSZXN1bHRUYXNrIDogcHVibGljIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrIHsKLXB1
YmxpYzoKLSAgICBSZXN1bHRUYXNrKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBtb2NrLCBjb25z
dCBXZWJTdHJpbmcgdHJhbnNjcmlwdCwgZmxvYXQgY29uZmlkZW5jZSkKLSAgICAgICAgOiBNb2Nr
V2ViU3BlZWNoUmVjb2duaXplcjo6VGFzayhtb2NrKQotICAgICAgICAsIG1fdHJhbnNjcmlwdCh0
cmFuc2NyaXB0KQotICAgICAgICAsIG1fY29uZmlkZW5jZShjb25maWRlbmNlKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIFdl
YlZlY3RvcjxXZWJTdHJpbmc+IHRyYW5zY3JpcHRzKHN0YXRpY19jYXN0PHNpemVfdD4oMSkpOwot
ICAgICAgICBXZWJWZWN0b3I8ZmxvYXQ+IGNvbmZpZGVuY2VzKHN0YXRpY19jYXN0PHNpemVfdD4o
MSkpOwotICAgICAgICB0cmFuc2NyaXB0c1swXSA9IG1fdHJhbnNjcmlwdDsKLSAgICAgICAgY29u
ZmlkZW5jZXNbMF0gPSBtX2NvbmZpZGVuY2U7Ci0gICAgICAgIFdlYlZlY3RvcjxXZWJTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdD4gZmluYWxSZXN1bHRzKHN0YXRpY19jYXN0PHNpemVfdD4oMSkpOwot
ICAgICAgICBXZWJWZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IGludGVyaW1SZXN1
bHRzOwotICAgICAgICBmaW5hbFJlc3VsdHNbMF0uYXNzaWduKHRyYW5zY3JpcHRzLCBjb25maWRl
bmNlcywgdHJ1ZSk7Ci0KLSAgICAgICAgbV9yZWNvZ25pemVyLT5jbGllbnQoKS0+ZGlkUmVjZWl2
ZVJlc3VsdHMobV9yZWNvZ25pemVyLT5oYW5kbGUoKSwgZmluYWxSZXN1bHRzLCBpbnRlcmltUmVz
dWx0cyk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFdlYlN0cmluZyBtX3RyYW5zY3JpcHQ7Ci0g
ICAgZmxvYXQgbV9jb25maWRlbmNlOwotfTsKLQotLy8gVGFzayBmb3IgZGVsaXZlcmluZyBhIG5v
bWF0Y2ggZXZlbnQuCi1jbGFzcyBOb01hdGNoVGFzayA6IHB1YmxpYyBNb2NrV2ViU3BlZWNoUmVj
b2duaXplcjo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgTm9NYXRjaFRhc2soTW9ja1dlYlNwZWVjaFJl
Y29nbml6ZXIqIG1vY2spIDogTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sobW9jaykgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHJ1bigpIE9WRVJSSURFIHsgbV9yZWNvZ25pemVyLT5jbGllbnQo
KS0+ZGlkUmVjZWl2ZU5vTWF0Y2gobV9yZWNvZ25pemVyLT5oYW5kbGUoKSwgV2ViU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQoKSk7IH0KLX07Ci0KLS8vIFRhc2sgZm9yIGRlbGl2ZXJpbmcgYW4gZXJy
b3IgZXZlbnQuCi1jbGFzcyBFcnJvclRhc2sgOiBwdWJsaWMgTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXI6OlRhc2sgewotcHVibGljOgotICAgIEVycm9yVGFzayhNb2NrV2ViU3BlZWNoUmVjb2duaXpl
ciogbW9jaywgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6RXJyb3JDb2RlIGNvZGUsIGNvbnN0
IFdlYlN0cmluZyYgbWVzc2FnZSkKLSAgICAgICAgOiBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6
VGFzayhtb2NrKQotICAgICAgICAsIG1fY29kZShjb2RlKQotICAgICAgICAsIG1fbWVzc2FnZSht
ZXNzYWdlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgT1ZFUlJJREUg
eyBtX3JlY29nbml6ZXItPmNsaWVudCgpLT5kaWRSZWNlaXZlRXJyb3IobV9yZWNvZ25pemVyLT5o
YW5kbGUoKSwgbV9tZXNzYWdlLCBtX2NvZGUpOyB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViU3BlZWNo
UmVjb2duaXplckNsaWVudDo6RXJyb3JDb2RlIG1fY29kZTsKLSAgICBXZWJTdHJpbmcgbV9tZXNz
YWdlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UKLQotUGFzc093blB0cjxNb2NrV2ViU3BlZWNoUmVj
b2duaXplcj4gTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBNb2NrV2ViU3BlZWNoUmVjb2duaXplcigpKTsKLX0KLQotdm9pZCBNb2Nr
V2ViU3BlZWNoUmVjb2duaXplcjo6c3RhcnQoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5k
bGUmIGhhbmRsZSwgY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXMmIHBhcmFtcywgV2Vi
U3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KQotewotICAgIG1fd2FzQWJvcnRlZCA9IGZh
bHNlOwotICAgIG1faGFuZGxlID0gaGFuZGxlOwotICAgIG1fY2xpZW50ID0gY2xpZW50OwotCi0g
ICAgbV90YXNrUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAm
V2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkU3RhcnQpKSk7Ci0gICAgbV90YXNrUXVldWUu
YXBwZW5kKGFkb3B0UHRyKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2du
aXplckNsaWVudDo6ZGlkU3RhcnRBdWRpbykpKTsKLSAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoYWRv
cHRQdHIobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50
OjpkaWRTdGFydFNvdW5kKSkpOwotCi0gICAgaWYgKCFtX21vY2tUcmFuc2NyaXB0cy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fbW9ja1RyYW5zY3JpcHRzLnNpemUoKSA9PSBtX21vY2tD
b25maWRlbmNlcy5zaXplKCkpOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9t
b2NrVHJhbnNjcmlwdHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBl
bmQoYWRvcHRQdHIobmV3IFJlc3VsdFRhc2sodGhpcywgbV9tb2NrVHJhbnNjcmlwdHNbaV0sIG1f
bW9ja0NvbmZpZGVuY2VzW2ldKSkpOwotCi0gICAgICAgIG1fbW9ja1RyYW5zY3JpcHRzLmNsZWFy
KCk7Ci0gICAgICAgIG1fbW9ja0NvbmZpZGVuY2VzLmNsZWFyKCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIG1fdGFza1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgTm9NYXRjaFRhc2sodGhpcykpKTsK
LQotICAgIG1fdGFza1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgQ2xpZW50Q2FsbFRhc2sodGhp
cywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZEVuZFNvdW5kKSkpOwotICAgIG1fdGFz
a1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVj
aFJlY29nbml6ZXJDbGllbnQ6OmRpZEVuZEF1ZGlvKSkpOwotICAgIG1fdGFza1F1ZXVlLmFwcGVu
ZChhZG9wdFB0cihuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJD
bGllbnQ6OmRpZEVuZCkpKTsKLQotICAgIHN0YXJ0VGFza1F1ZXVlKCk7Ci19Ci0KLXZvaWQgTW9j
a1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0b3AoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5k
bGUmIGhhbmRsZSwgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KQotewotICAgIG1f
aGFuZGxlID0gaGFuZGxlOwotICAgIG1fY2xpZW50ID0gY2xpZW50OwotCi0gICAgLy8gRklYTUU6
IEltcGxlbWVudC4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBNb2NrV2Vi
U3BlZWNoUmVjb2duaXplcjo6YWJvcnQoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUm
IGhhbmRsZSwgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KQotewotICAgIG1faGFu
ZGxlID0gaGFuZGxlOwotICAgIG1fY2xpZW50ID0gY2xpZW50OwotCi0gICAgY2xlYXJUYXNrUXVl
dWUoKTsKLSAgICBtX3dhc0Fib3J0ZWQgPSB0cnVlOwotICAgIG1fdGFza1F1ZXVlLmFwcGVuZChh
ZG9wdFB0cihuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGll
bnQ6OmRpZEVuZCkpKTsKLSAgICBzdGFydFRhc2tRdWV1ZSgpOwotfQotCi12b2lkIE1vY2tXZWJT
cGVlY2hSZWNvZ25pemVyOjphZGRNb2NrUmVzdWx0KGNvbnN0IFdlYlN0cmluZyYgdHJhbnNjcmlw
dCwgZmxvYXQgY29uZmlkZW5jZSkKLXsKLSAgICBtX21vY2tUcmFuc2NyaXB0cy5hcHBlbmQodHJh
bnNjcmlwdCk7Ci0gICAgbV9tb2NrQ29uZmlkZW5jZXMuYXBwZW5kKGNvbmZpZGVuY2UpOwotfQot
Ci12b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzZXRFcnJvcihjb25zdCBXZWJTdHJpbmcm
IGVycm9yLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgV2ViU3BlZWNoUmVjb2du
aXplckNsaWVudDo6RXJyb3JDb2RlIGNvZGU7Ci0gICAgaWYgKGVycm9yID09ICJPdGhlckVycm9y
IikKLSAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Ok90aGVyRXJyb3I7
Ci0gICAgZWxzZSBpZiAoZXJyb3IgPT0gIk5vU3BlZWNoRXJyb3IiKQotICAgICAgICBjb2RlID0g
V2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6Tm9TcGVlY2hFcnJvcjsKLSAgICBlbHNlIGlmIChl
cnJvciA9PSAiQWJvcnRlZEVycm9yIikKLSAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6
ZXJDbGllbnQ6OkFib3J0ZWRFcnJvcjsKLSAgICBlbHNlIGlmIChlcnJvciA9PSAiQXVkaW9DYXB0
dXJlRXJyb3IiKQotICAgICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6QXVk
aW9DYXB0dXJlRXJyb3I7Ci0gICAgZWxzZSBpZiAoZXJyb3IgPT0gIk5ldHdvcmtFcnJvciIpCi0g
ICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpOZXR3b3JrRXJyb3I7Ci0g
ICAgZWxzZSBpZiAoZXJyb3IgPT0gIk5vdEFsbG93ZWRFcnJvciIpCi0gICAgICAgIGNvZGUgPSBX
ZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpOb3RBbGxvd2VkRXJyb3I7Ci0gICAgZWxzZSBpZiAo
ZXJyb3IgPT0gIlNlcnZpY2VOb3RBbGxvd2VkRXJyb3IiKQotICAgICAgICBjb2RlID0gV2ViU3Bl
ZWNoUmVjb2duaXplckNsaWVudDo6U2VydmljZU5vdEFsbG93ZWRFcnJvcjsKLSAgICBlbHNlIGlm
IChlcnJvciA9PSAiQmFkR3JhbW1hckVycm9yIikKLSAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJl
Y29nbml6ZXJDbGllbnQ6OkJhZEdyYW1tYXJFcnJvcjsKLSAgICBlbHNlIGlmIChlcnJvciA9PSAi
TGFuZ3VhZ2VOb3RTdXBwb3J0ZWRFcnJvciIpCi0gICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNv
Z25pemVyQ2xpZW50OjpMYW5ndWFnZU5vdFN1cHBvcnRlZEVycm9yOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY2xlYXJUYXNrUXVldWUoKTsKLSAgICBtX3Rhc2tRdWV1ZS5hcHBl
bmQoYWRvcHRQdHIobmV3IEVycm9yVGFzayh0aGlzLCBjb2RlLCBtZXNzYWdlKSkpOwotICAgIG1f
dGFza1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNw
ZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZEVuZCkpKTsKLSAgICBzdGFydFRhc2tRdWV1ZSgpOwot
fQotCi1Nb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIoKQot
ICAgIDogbV93YXNBYm9ydGVkKGZhbHNlKQotICAgICwgbV90YXNrUXVldWVSdW5uaW5nKGZhbHNl
KQotewotfQotCi1Nb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6fk1vY2tXZWJTcGVlY2hSZWNvZ25p
emVyKCkKLXsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c3RhcnRUYXNrUXVl
dWUoKQotewotICAgIGlmIChtX3Rhc2tRdWV1ZVJ1bm5pbmcpCi0gICAgICAgIHJldHVybjsKLSAg
ICBwb3N0VGFzayhuZXcgU3RlcFRhc2sodGhpcykpOwotICAgIG1fdGFza1F1ZXVlUnVubmluZyA9
IHRydWU7Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmNsZWFyVGFza1F1ZXVl
KCkKLXsKLSAgICBtX3Rhc2tRdWV1ZS5jbGVhcigpOwotICAgIG1fdGFza1F1ZXVlUnVubmluZyA9
IGZhbHNlOwotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpTdGVwVGFzazo6cnVu
SWZWYWxpZCgpCi17Ci0gICAgaWYgKG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgbV9vYmplY3QtPm1fdGFza1F1ZXVlUnVubmluZyA9IGZhbHNlOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgT3duUHRyPFRhc2s+IHRhc2sgPSBtX29iamVjdC0+bV90YXNr
UXVldWVbMF0ucmVsZWFzZSgpOwotICAgIG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZS5yZW1vdmUoMCk7
Ci0gICAgdGFzay0+cnVuKCk7Ci0KLSAgICBpZiAobV9vYmplY3QtPm1fdGFza1F1ZXVlLmlzRW1w
dHkoKSkgewotICAgICAgICBtX29iamVjdC0+bV90YXNrUXVldWVSdW5uaW5nID0gZmFsc2U7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwb3N0VGFzayhuZXcgU3RlcFRhc2sobV9vYmpl
Y3QpKTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5o
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM2NTM0YjRjNmMyYjI5M2I2ZDQzMDAz
MWZmMDJkMzI3MDQ4OTI2NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoUmVjb2du
aXplci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTW9j
a1dlYlNwZWVjaFJlY29nbml6ZXJfaAotI2RlZmluZSBNb2NrV2ViU3BlZWNoUmVjb2duaXplcl9o
Ci0KLSNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQotCi0jaW5jbHVkZSAiV2ViU3BlZWNoUmVj
b2duaXplci5oIgotI2luY2x1ZGUgIldlYlRhc2suaCIKLSNpbmNsdWRlIDx3dGYvQ29tcGlsZXIu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZTsK
LWNsYXNzIFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zOwotY2xhc3MgV2ViU3BlZWNoUmVjb2du
aXplckNsaWVudDsKLX0KLQotY2xhc3MgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIgOiBwdWJsaWMg
V2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxNb2NrV2ViU3BlZWNoUmVjb2duaXplcj4gY3JlYXRlKCk7Ci0gICAgfk1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyKCk7Ci0KLSAgICAvLyBXZWJTcGVlY2hSZWNvZ25pemVyIGltcGxlbWVudGF0
aW9uOgotICAgIHZpcnR1YWwgdm9pZCBzdGFydChjb25zdCBXZWJLaXQ6OldlYlNwZWVjaFJlY29n
bml0aW9uSGFuZGxlJiwgY29uc3QgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcyYs
IFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudCopIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBzdG9wKGNvbnN0IFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmLCBX
ZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgYWJvcnQoY29uc3QgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYsIFdl
YktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudCopIE9WRVJSSURFOwotCi0gICAgLy8gTWV0
aG9kcyBhY2Nlc3NlZCBieSBsYXlvdXQgdGVzdHM6Ci0gICAgdm9pZCBhZGRNb2NrUmVzdWx0KGNv
bnN0IFdlYktpdDo6V2ViU3RyaW5nJiB0cmFuc2NyaXB0LCBmbG9hdCBjb25maWRlbmNlKTsKLSAg
ICB2b2lkIHNldEVycm9yKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBlcnJvciwgY29uc3QgV2Vi
S2l0OjpXZWJTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgd2FzQWJvcnRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fd2FzQWJvcnRlZDsgfQotCi0gICAgLy8gTWV0aG9kcyBhY2Nlc3NlZCBmcm9tIFRh
c2sgb2JqZWN0czoKLSAgICBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIGNsaWVu
dCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9Ci0gICAgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlv
bkhhbmRsZSYgaGFuZGxlKCkgeyByZXR1cm4gbV9oYW5kbGU7IH0KLSAgICBXZWJUZXN0UnVubmVy
OjpXZWJUYXNrTGlzdCogdGFza0xpc3QoKSB7IHJldHVybiAmbV90YXNrTGlzdDsgfQotCi0gICAg
Y2xhc3MgVGFzayB7Ci0gICAgcHVibGljOgotICAgICAgICBUYXNrKE1vY2tXZWJTcGVlY2hSZWNv
Z25pemVyKiByZWNvZ25pemVyKSA6IG1fcmVjb2duaXplcihyZWNvZ25pemVyKSB7IH0KLSAgICAg
ICAgdmlydHVhbCB+VGFzaygpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgPSAwOwot
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG1fcmVjb2du
aXplcjsKLSAgICB9OwotCi1wcml2YXRlOgotICAgIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKCk7
Ci0gICAgdm9pZCBzdGFydFRhc2tRdWV1ZSgpOwotICAgIHZvaWQgY2xlYXJUYXNrUXVldWUoKTsK
LQotICAgIFdlYlRlc3RSdW5uZXI6OldlYlRhc2tMaXN0IG1fdGFza0xpc3Q7Ci0gICAgV2ViS2l0
OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSBtX2hhbmRsZTsKLSAgICBXZWJLaXQ6OldlYlNw
ZWVjaFJlY29nbml6ZXJDbGllbnQqIG1fY2xpZW50OwotICAgIFZlY3RvcjxXZWJLaXQ6OldlYlN0
cmluZz4gbV9tb2NrVHJhbnNjcmlwdHM7Ci0gICAgVmVjdG9yPGZsb2F0PiBtX21vY2tDb25maWRl
bmNlczsKLSAgICBib29sIG1fd2FzQWJvcnRlZDsKLQotICAgIC8vIFF1ZXVlIG9mIHRhc2tzIHRv
IGJlIHJ1bi4KLSAgICBWZWN0b3I8T3duUHRyPFRhc2s+ID4gbV90YXNrUXVldWU7Ci0gICAgYm9v
bCBtX3Rhc2tRdWV1ZVJ1bm5pbmc7Ci0KLSAgICAvLyBUYXNrIGZvciBzdGVwcGluZyB0aGUgcXVl
dWUuCi0gICAgY2xhc3MgU3RlcFRhc2sgOiBwdWJsaWMgV2ViVGVzdFJ1bm5lcjo6V2ViTWV0aG9k
VGFzazxNb2NrV2ViU3BlZWNoUmVjb2duaXplcj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgU3Rl
cFRhc2soTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG9iamVjdCkgOiBXZWJUZXN0UnVubmVyOjpX
ZWJNZXRob2RUYXNrPE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyPihvYmplY3QpIHsgfQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIE9WRVJSSURFOwotICAgIH07Ci19OwotCi0jZW5k
aWYgLy8gRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKLQotI2VuZGlmIC8vIE1vY2tXZWJTcGVlY2hS
ZWNvZ25pemVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvcHVibGljL1dlYlRlc3REZWxlZ2F0ZS5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdERlbGVnYXRlLmgKaW5kZXggMDc3OGVj
MWZkNTgyN2NjMTFjMmQxZWVhNDUyM2IxNjRiN2NiN2E3My4uNWQ3YjhkYTc1NTkwZWNmZjVjMWY3
YjMwNWRkOGI3NDEwNTc1MWE2ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdERlbGVnYXRlLmgKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdERlbGVnYXRlLmgK
QEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewotY2xhc3MgV2ViRGV2aWNlT3JpZW50YXRpb247CiBjbGFzcyBXZWJHYW1lcGFkczsKIGNsYXNz
IFdlYkhpc3RvcnlJdGVtOwogc3RydWN0IFdlYlJlY3Q7CkBAIC04NCwyOCArODMsMTIgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlcHRBbGxDb29raWVzKGJvb2wpIHsgfQogICAg
IHZpcnR1YWwgc3RkOjpzdHJpbmcgcGF0aFRvTG9jYWxSZXNvdXJjZShjb25zdCBzdGQ6OnN0cmlu
ZyYgcmVzb3VyY2UpIHsgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0TG9jYWxlKGNvbnN0IHN0ZDo6c3RyaW5nJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldERl
dmljZU9yaWVudGF0aW9uKFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb24mKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgZGlkQWNxdWlyZVBvaW50ZXJMb2NrKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGRpZE5vdEFjcXVpcmVQb2ludGVyTG9jaygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRMb3Nl
UG9pbnRlckxvY2soKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UG9pbnRlckxvY2tXaWxsUmVz
cG9uZEFzeW5jaHJvbm91c2x5KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBvaW50ZXJMb2Nr
V2lsbEZhaWxTeW5jaHJvbm91c2x5KCkgeyB9Ci0gICAgdmlydHVhbCBpbnQgbnVtYmVyT2ZQZW5k
aW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKSB7IHJldHVybiAwOyB9Ci0gICAgdmly
dHVhbCB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlLCBkb3VibGUsIGRvdWJsZSkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFi
bGVFcnJvcihjb25zdCBzdGQ6OnN0cmluZyYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBhZGRNb2Nr
U3BlZWNoSW5wdXRSZXN1bHQoY29uc3Qgc3RkOjpzdHJpbmcmLCBkb3VibGUsIGNvbnN0IHN0ZDo6
c3RyaW5nJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0
KGJvb2wpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBhZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1
bHQoY29uc3Qgc3RkOjpzdHJpbmcmLCBkb3VibGUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRN
b2NrU3BlZWNoUmVjb2duaXRpb25FcnJvcihjb25zdCBzdGQ6OnN0cmluZyYsIGNvbnN0IHN0ZDo6
c3RyaW5nJikgeyB9Ci0gICAgdmlydHVhbCBib29sIHdhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFi
b3J0ZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCB0ZXN0RmluaXNoZWQo
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdGVzdFRpbWVkT3V0KCkgeyB9CiAgICAgdmlydHVhbCBi
b29sIGlzQmVpbmdEZWJ1Z2dlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBpbnQg
bGF5b3V0VGVzdFRpbWVvdXQoKSB7IHJldHVybiAzMCAqIDEwMDA7IH0KICAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VSZW1haW5pbmdXaW5kb3dzKCkgeyB9CiAgICAgdmlydHVhbCBpbnQgbmF2aWdhdGlv
bkVudHJ5Q291bnQoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBpbnQgd2luZG93Q291bnQo
KSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIGdvVG9PZmZzZXQoaW50KSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgcmVsb2FkKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGxvYWRVUkxGb3JG
cmFtZShjb25zdCBXZWJLaXQ6OldlYlVSTCYsIGNvbnN0IHN0ZDo6c3RyaW5nJikgeyB9CmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9X
ZWJUZXN0UHJveHkuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
cHVibGljL1dlYlRlc3RQcm94eS5oCmluZGV4IDVmODFjMzIzNjA2NjJkMmU1Y2U1OTliZjQyYTZj
MjIyMThiYWQyNzYuLmNiNDA2NzI1N2QyZWZlYTZiZmU4NTllOTg5NmU1ZTgxZGFmZTI0MmIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGlj
L1dlYlRlc3RQcm94eS5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvcHVibGljL1dlYlRlc3RQcm94eS5oCkBAIC01MSwxNCArNTEsMjEgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiBjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3MgV2ViQ2FjaGVk
VVJMUmVxdWVzdDsKIGNsYXNzIFdlYkRhdGFTb3VyY2U7CitjbGFzcyBXZWJEZXZpY2VPcmllbnRh
dGlvbkNsaWVudDsKK2NsYXNzIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jazsKIGNsYXNz
IFdlYkRyYWdEYXRhOwogY2xhc3MgV2ViRnJhbWU7CitjbGFzcyBXZWJHZW9sb2NhdGlvbkNsaWVu
dDsKK2NsYXNzIFdlYkdlb2xvY2F0aW9uQ2xpZW50TW9jazsKIGNsYXNzIFdlYkltYWdlOwogY2xh
c3MgV2ViTm9kZTsKIGNsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsKIGNsYXNzIFdlYlBs
dWdpbjsKIGNsYXNzIFdlYlJhbmdlOwogY2xhc3MgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlOwor
Y2xhc3MgV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOworY2xhc3MgV2ViU3BlZWNoSW5wdXRMaXN0
ZW5lcjsKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml6ZXI7CiBjbGFzcyBXZWJTcGVsbENoZWNrQ2xp
ZW50OwogY2xhc3MgV2ViU3RyaW5nOwogY2xhc3MgV2ViVVJMOwpAQCAtNzgsNiArODUsOCBAQCBj
bGFzcyBTa0NhbnZhczsKIAogbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewogCitjbGFzcyBNb2Nr
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOworY2xhc3MgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI7
CiBjbGFzcyBTcGVsbENoZWNrQ2xpZW50OwogY2xhc3MgVGVzdEludGVyZmFjZXM7CiBjbGFzcyBX
ZWJUZXN0RGVsZWdhdGU7CkBAIC05OSwxMCArMTA4LDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0TG9nQ29uc29sZU91dHB1dChib29sIGVuYWJsZWQpOwogCisjaWYgV0VCVEVTVFJVTk5FUl9J
TVBMRU1FTlRBVElPTgogICAgIHZvaWQgZGlzcGxheSgpOwogICAgIHZvaWQgZGlzcGxheUludmFs
aWRhdGVkUmVnaW9uKCk7CiAgICAgdm9pZCBkaXNjYXJkQmFja2luZ1N0b3JlKCk7CiAKKyAgICBX
ZWJLaXQ6OldlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jayogZGV2aWNlT3JpZW50YXRpb25D
bGllbnRNb2NrKCk7CisgICAgV2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2sqIGdlb2xv
Y2F0aW9uQ2xpZW50TW9jaygpOworICAgIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIHNw
ZWVjaElucHV0Q29udHJvbGxlck1vY2soKTsKKyAgICBNb2NrV2ViU3BlZWNoUmVjb2duaXplciog
c3BlZWNoUmVjb2duaXplck1vY2soKTsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgV2ViVGVz
dFByb3h5QmFzZSgpOwogICAgIH5XZWJUZXN0UHJveHlCYXNlKCk7CkBAIC0xMzcsNiArMTUzLDEz
IEBAIHByb3RlY3RlZDoKICAgICBXZWJLaXQ6OldlYlVzZXJNZWRpYUNsaWVudCogdXNlck1lZGlh
Q2xpZW50KCk7CiAgICAgdm9pZCBwcmludFBhZ2UoV2ViS2l0OjpXZWJGcmFtZSopOwogICAgIFdl
YktpdDo6V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBub3RpZmljYXRpb25QcmVzZW50ZXIoKTsK
KyAgICBXZWJLaXQ6OldlYkdlb2xvY2F0aW9uQ2xpZW50KiBnZW9sb2NhdGlvbkNsaWVudCgpOwor
ICAgIFdlYktpdDo6V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKiBzcGVlY2hJbnB1dENvbnRyb2xs
ZXIoV2ViS2l0OjpXZWJTcGVlY2hJbnB1dExpc3RlbmVyKik7CisgICAgV2ViS2l0OjpXZWJTcGVl
Y2hSZWNvZ25pemVyKiBzcGVlY2hSZWNvZ25pemVyKCk7CisgICAgV2ViS2l0OjpXZWJEZXZpY2VP
cmllbnRhdGlvbkNsaWVudCogZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKTsKKyAgICBib29sIHJl
cXVlc3RQb2ludGVyTG9jaygpOworICAgIHZvaWQgcmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKKyAg
ICBib29sIGlzUG9pbnRlckxvY2tlZCgpOwogCiAgICAgdm9pZCB3aWxsUGVyZm9ybUNsaWVudFJl
ZGlyZWN0KFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYgZnJvbSwgY29u
c3QgV2ViS2l0OjpXZWJVUkwmIHRvLCBkb3VibGUgaW50ZXJ2YWwsIGRvdWJsZSBmaXJlX3RpbWUp
OwogICAgIHZvaWQgZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoV2ViS2l0OjpXZWJGcmFtZSopOwpA
QCAtMTkyLDYgKzIxNSwxMiBAQCBwcml2YXRlOgogICAgIHN0ZDo6bWFwPHVuc2lnbmVkLCBzdGQ6
OnN0cmluZz4gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXA7CiAKICAgICBib29sIG1fbG9nQ29uc29s
ZU91dHB1dDsKKworICAgIHN0ZDo6YXV0b19wdHI8V2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVu
dE1vY2s+IG1fZ2VvbG9jYXRpb25DbGllbnQ7CisgICAgc3RkOjphdXRvX3B0cjxXZWJLaXQ6Oldl
YkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jaz4gbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudDsK
KyAgICBzdGQ6OmF1dG9fcHRyPE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyPiBtX3NwZWVjaFJlY29n
bml6ZXI7CisgICAgc3RkOjphdXRvX3B0cjxNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyPiBt
X3NwZWVjaElucHV0Q29udHJvbGxlcjsKKwogcHJpdmF0ZToKICAgICBXZWJUZXN0UHJveHlCYXNl
KFdlYlRlc3RQcm94eUJhc2UmKTsKICAgICBXZWJUZXN0UHJveHlCYXNlJiBvcGVyYXRvcj0oY29u
c3QgV2ViVGVzdFByb3h5QmFzZSYpOwpAQCAtMzU4LDYgKzM4NywzNCBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICByZXR1cm4gV2ViVGVzdFByb3h5QmFzZTo6bm90aWZpY2F0aW9uUHJlc2VudGVy
KCk7CiAgICAgfQorICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudCogZ2Vv
bG9jYXRpb25DbGllbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYlRlc3RQcm94eUJhc2U6
Omdlb2xvY2F0aW9uQ2xpZW50KCk7CisgICAgfQorICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXIqIHNwZWVjaElucHV0Q29udHJvbGxlcihXZWJLaXQ6OldlYlNwZWVj
aElucHV0TGlzdGVuZXIqIGxpc3RlbmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYlRlc3RQ
cm94eUJhc2U6OnNwZWVjaElucHV0Q29udHJvbGxlcihsaXN0ZW5lcik7CisgICAgfQorICAgIHZp
cnR1YWwgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyKiBzcGVlY2hSZWNvZ25pemVyKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBXZWJUZXN0UHJveHlCYXNlOjpzcGVlY2hSZWNvZ25pemVyKCk7
CisgICAgfQorICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudCog
ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYlRlc3RQ
cm94eUJhc2U6OmRldmljZU9yaWVudGF0aW9uQ2xpZW50KCk7CisgICAgfQorICAgIHZpcnR1YWwg
Ym9vbCByZXF1ZXN0UG9pbnRlckxvY2soKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYlRlc3RQ
cm94eUJhc2U6OnJlcXVlc3RQb2ludGVyTG9jaygpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdFBvaW50ZXJVbmxvY2soKQorICAgIHsKKyAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6
cmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKKyAgICB9CisgICAgdmlydHVhbCBib29sIGlzUG9pbnRl
ckxvY2tlZCgpCisgICAgeworICAgICAgICByZXR1cm4gV2ViVGVzdFByb3h5QmFzZTo6aXNQb2lu
dGVyTG9ja2VkKCk7CisgICAgfQogCiAgICAgLy8gV2ViRnJhbWVDbGllbnQgaW1wbGVtZW50YXRp
b24uCiAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2ViS2l0OjpX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYktpdDo6V2ViVVJMJiBmcm9tLCBjb25zdCBXZWJLaXQ6
OldlYlVSTCYgdG8sIGRvdWJsZSBpbnRlcnZhbCwgZG91YmxlIGZpcmVUaW1lKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNw
ZWVjaElucHV0Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jNGRmMzJhODJjNzRkNzZkZDBjZTE2MDc0MGIyZGZhZDliMWRlNmJkCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dl
YlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5o
IgorCisjaW5jbHVkZSAiV2ViU3BlZWNoSW5wdXRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIldlYlRl
c3REZWxlZ2F0ZS5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDU3RyaW5nLmg+CisjaW5jbHVkZSA8
cHVibGljL1dlYlZlY3Rvci5oPgorCisjaWYgRU5BQkxFX0lOUFVUX1NQRUVDSAorCit1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYlRl
c3RSdW5uZXIgeworCituYW1lc3BhY2UgeworCitXZWJTcGVlY2hJbnB1dFJlc3VsdEFycmF5IG1h
a2VSZWN0UmVzdWx0KGNvbnN0IFdlYlJlY3QmIHJlY3QpCit7CisgICAgY2hhciBidWZmZXJbMTAw
XTsKKyAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQsJWQsJWQsJWQiLCBy
ZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworCisgICAgV2ViU3BlZWNo
SW5wdXRSZXN1bHQgcmVzOworICAgIHJlcy5hc3NpZ24oV2ViU3RyaW5nOjpmcm9tVVRGOChzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSksIDEuMCk7CisKKyAgICBXZWJTcGVlY2hJbnB1
dFJlc3VsdEFycmF5IHJlc3VsdHM7CisgICAgcmVzdWx0cy5hc3NpZ24oJnJlcywgMSk7CisgICAg
cmV0dXJuIHJlc3VsdHM7Cit9CisKK30KKworTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcihXZWJTcGVlY2hJbnB1dExpc3RlbmVyKiBsaXN0
ZW5lcikKKyAgICA6IG1fbGlzdGVuZXIobGlzdGVuZXIpCisgICAgLCBtX3NwZWVjaFRhc2soMCkK
KyAgICAsIG1fcmVjb3JkaW5nKGZhbHNlKQorICAgICwgbV9yZXF1ZXN0SWQoLTEpCisgICAgLCBt
X2R1bXBSZWN0KGZhbHNlKQorICAgICwgbV9kZWxlZ2F0ZSgwKQoreworfQorCitNb2NrV2ViU3Bl
ZWNoSW5wdXRDb250cm9sbGVyOjp+TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcigpCit7Cit9
CisKK3ZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6c2V0RGVsZWdhdGUoV2ViVGVz
dERlbGVnYXRlKiBkZWxlZ2F0ZSkKK3sKKyAgICBtX2RlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisK
K3ZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6YWRkTW9ja1JlY29nbml0aW9uUmVz
dWx0KGNvbnN0IFdlYlN0cmluZyYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgY29uc3QgV2Vi
U3RyaW5nJiBsYW5ndWFnZSkKK3sKKyAgICBXZWJTcGVlY2hJbnB1dFJlc3VsdCByZXM7CisgICAg
cmVzLmFzc2lnbihyZXN1bHQsIGNvbmZpZGVuY2UpOworCisgICAgaWYgKGxhbmd1YWdlLmlzRW1w
dHkoKSkKKyAgICAgICAgbV9yZXN1bHRzRm9yRW1wdHlMYW5ndWFnZS5wdXNoX2JhY2socmVzKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgc3RyaW5nIGxhbmdTdHJpbmcgPSBsYW5ndWFnZS51dGY4KCk7
CisgICAgICAgIGlmIChtX3JlY29nbml0aW9uUmVzdWx0cy5maW5kKGxhbmdTdHJpbmcpID09IG1f
cmVjb2duaXRpb25SZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgbV9yZWNvZ25pdGlvblJlc3Vs
dHNbbGFuZ1N0cmluZ10gPSB2ZWN0b3I8V2ViU3BlZWNoSW5wdXRSZXN1bHQ+KCk7CisgICAgICAg
IG1fcmVjb2duaXRpb25SZXN1bHRzW2xhbmdTdHJpbmddLnB1c2hfYmFjayhyZXMpOworICAgIH0K
K30KKwordm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpzZXREdW1wUmVjdChib29s
IGR1bXBSZWN0KQoreworICAgIG1fZHVtcFJlY3QgPSBkdW1wUmVjdDsKK30KKwordm9pZCBNb2Nr
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpjbGVhclJlc3VsdHMoKQoreworICAgIG1fcmVzdWx0
c0ZvckVtcHR5TGFuZ3VhZ2UuY2xlYXIoKTsKKyAgICBtX3JlY29nbml0aW9uUmVzdWx0cy5jbGVh
cigpOworICAgIG1fZHVtcFJlY3QgPSBmYWxzZTsKK30KKworYm9vbCBNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyOjpzdGFydFJlY29nbml0aW9uKGludCByZXF1ZXN0SWQsIGNvbnN0IFdlYlJl
Y3QmIGVsZW1lbnRSZWN0LCBjb25zdCBXZWJTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBXZWJTdHJp
bmcmIGdyYW1tYXIsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4pCit7CisgICAgaWYg
KG1fc3BlZWNoVGFzaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9yZXF1ZXN0SWQg
PSByZXF1ZXN0SWQ7CisgICAgbV9yZXF1ZXN0UmVjdCA9IGVsZW1lbnRSZWN0OworICAgIG1fcmVj
b3JkaW5nID0gdHJ1ZTsKKyAgICBtX2xhbmd1YWdlID0gbGFuZ3VhZ2UudXRmOCgpOworCisgICAg
bV9zcGVlY2hUYXNrID0gbmV3IFNwZWVjaFRhc2sodGhpcyk7CisgICAgbV9kZWxlZ2F0ZS0+cG9z
dFRhc2sobV9zcGVlY2hUYXNrKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmNhbmNlbFJlY29nbml0aW9uKGludCByZXF1ZXN0SWQp
Cit7CisgICAgaWYgKG1fc3BlZWNoVGFzaykgeworICAgICAgICBXRUJLSVRfQVNTRVJUKHJlcXVl
c3RJZCA9PSBtX3JlcXVlc3RJZCk7CisKKyAgICAgICAgbV9zcGVlY2hUYXNrLT5zdG9wKCk7Cisg
ICAgICAgIG1fcmVjb3JkaW5nID0gZmFsc2U7CisgICAgICAgIG1fbGlzdGVuZXItPmRpZENvbXBs
ZXRlUmVjb2duaXRpb24obV9yZXF1ZXN0SWQpOworICAgICAgICBtX3JlcXVlc3RJZCA9IDA7Cisg
ICAgfQorfQorCit2b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnN0b3BSZWNvcmRp
bmcoaW50IHJlcXVlc3RJZCkKK3sKKyAgICBXRUJLSVRfQVNTRVJUKHJlcXVlc3RJZCA9PSBtX3Jl
cXVlc3RJZCk7CisgICAgaWYgKG1fc3BlZWNoVGFzayAmJiBtX3JlY29yZGluZykgeworICAgICAg
ICBtX3NwZWVjaFRhc2stPnN0b3AoKTsKKyAgICAgICAgc3BlZWNoVGFza0ZpcmVkKCk7CisgICAg
fQorfQorCit2b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnNwZWVjaFRhc2tGaXJl
ZCgpCit7CisgICAgaWYgKG1fcmVjb3JkaW5nKSB7CisgICAgICAgIG1fcmVjb3JkaW5nID0gZmFs
c2U7CisgICAgICAgIG1fbGlzdGVuZXItPmRpZENvbXBsZXRlUmVjb3JkaW5nKG1fcmVxdWVzdElk
KTsKKworICAgICAgICBtX3NwZWVjaFRhc2sgPSBuZXcgU3BlZWNoVGFzayh0aGlzKTsKKyAgICAg
ICAgbV9kZWxlZ2F0ZS0+cG9zdFRhc2sobV9zcGVlY2hUYXNrKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBib29sIG5vUmVzdWx0c0ZvdW5kID0gZmFsc2U7CisgICAgICAgIC8vIFdlIHRha2UgYSBj
b3B5IG9mIHRoZSByZXF1ZXN0SWQgaGVyZSBzbyB0aGF0IGlmIHNjcmlwdHMgZGVzdHJveWVkIHRo
ZSBpbnB1dCBlbGVtZW50CisgICAgICAgIC8vIGluc2lkZSBvbmUgb2YgdGhlIGNhbGxiYWNrcyBi
ZWxvdywgd2UnbGwgc3RpbGwga25vdyB3aGF0IHRoaXMgc2Vzc2lvbidzIHJlcXVlc3RJZCB3YXMu
CisgICAgICAgIGludCByZXF1ZXN0SWQgPSBtX3JlcXVlc3RJZDsKKyAgICAgICAgbV9yZXF1ZXN0
SWQgPSAwOworCisgICAgICAgIGlmIChtX2R1bXBSZWN0KSB7CisgICAgICAgICAgICBtX2xpc3Rl
bmVyLT5zZXRSZWNvZ25pdGlvblJlc3VsdChyZXF1ZXN0SWQsIG1ha2VSZWN0UmVzdWx0KG1fcmVx
dWVzdFJlY3QpKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX2xhbmd1YWdlLmVtcHR5KCkpIHsKKyAg
ICAgICAgICAgIC8vIEVtcHR5IGxhbmd1YWdlIGNhc2UgbXVzdCBiZSBoYW5kbGVkIHNlcGFyYXRl
bHkgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBIYXNoTWFwIGFuZCBlbXB0eSBrZXlzLgorICAgICAg
ICAgICAgaWYgKCFtX3Jlc3VsdHNGb3JFbXB0eUxhbmd1YWdlLmVtcHR5KCkpCisgICAgICAgICAg
ICAgICAgbV9saXN0ZW5lci0+c2V0UmVjb2duaXRpb25SZXN1bHQocmVxdWVzdElkLCBtX3Jlc3Vs
dHNGb3JFbXB0eUxhbmd1YWdlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBu
b1Jlc3VsdHNGb3VuZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
bV9yZWNvZ25pdGlvblJlc3VsdHMuZmluZChtX2xhbmd1YWdlKSAhPSBtX3JlY29nbml0aW9uUmVz
dWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICBtX2xpc3RlbmVyLT5zZXRSZWNvZ25pdGlvblJl
c3VsdChyZXF1ZXN0SWQsIG1fcmVjb2duaXRpb25SZXN1bHRzW21fbGFuZ3VhZ2VdKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub1Jlc3VsdHNGb3VuZCA9IHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobm9SZXN1bHRzRm91bmQpIHsKKyAgICAgICAgICAgIC8vIENh
bid0IGF2b2lkIHNldHRpbmcgYSByZXN1bHQgZXZlbiBpZiBubyByZXN1bHQgd2FzIHNldCBmb3Ig
dGhlIGdpdmVuIGxhbmd1YWdlLgorICAgICAgICAgICAgLy8gVGhpcyB3b3VsZCBhdm9pZCBnZW5l
cmF0aW5nIHRoZSBldmVudHMgdXNlZCB0byBjaGVjayB0aGUgcmVzdWx0cyBhbmQgdGhlIHRlc3Qg
d291bGQgdGltZW91dC4KKyAgICAgICAgICAgIHN0cmluZyBlcnJvcigiZXJyb3I6IG5vIHJlc3Vs
dCBmb3VuZCBmb3IgbGFuZ3VhZ2UgJyIpOworICAgICAgICAgICAgZXJyb3IuYXBwZW5kKG1fbGFu
Z3VhZ2UpOworICAgICAgICAgICAgZXJyb3IuYXBwZW5kKCInIik7CisKKyAgICAgICAgICAgIFdl
YlNwZWVjaElucHV0UmVzdWx0IHJlczsKKyAgICAgICAgICAgIHJlcy5hc3NpZ24oV2ViU3RyaW5n
Ojpmcm9tVVRGOChlcnJvciksIDEuMCk7CisKKyAgICAgICAgICAgIHZlY3RvcjxXZWJTcGVlY2hJ
bnB1dFJlc3VsdD4gcmVzdWx0czsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaF9iYWNrKHJlcyk7
CisKKyAgICAgICAgICAgIG1fbGlzdGVuZXItPnNldFJlY29nbml0aW9uUmVzdWx0KHJlcXVlc3RJ
ZCwgcmVzdWx0cyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK01vY2tXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXI6OlNwZWVjaFRhc2s6OlNwZWVjaFRhc2soTW9ja1dlYlNwZWVjaElucHV0Q29udHJv
bGxlciogbW9jaykKKyAgICA6IFdlYk1ldGhvZFRhc2s8TW9ja1dlYlNwZWVjaElucHV0Q29udHJv
bGxlcj46OldlYk1ldGhvZFRhc2sobW9jaykKK3sKK30KKwordm9pZCBNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyOjpTcGVlY2hUYXNrOjpzdG9wKCkKK3sKKyAgICBtX29iamVjdC0+bV9zcGVl
Y2hUYXNrID0gMDsKKyAgICBjYW5jZWwoKTsKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpTcGVlY2hUYXNrOjpydW5JZlZhbGlkKCkKK3sK
KyAgICBtX29iamVjdC0+bV9zcGVlY2hUYXNrID0gMDsKKyAgICBtX29iamVjdC0+c3BlZWNoVGFz
a0ZpcmVkKCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODQwMzRlMzY3ZWE0NjdkZTg0Yjc3
YTg1NWE1ODMzMTljYjUwOTJjZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIu
aApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNb2NrV2ViU3BlZWNoSW5wdXRDb250
cm9sbGVyX2gKKyNkZWZpbmUgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcl9oCisKKyNpbmNs
dWRlICJUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiV2ViU3BlZWNoSW5wdXRSZXN1bHQuaCIKKyNpbmNsdWRlICJXZWJUYXNrLmgi
CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJSZWN0Lmg+CisjaW5jbHVkZSA8
c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBX
ZWJTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFdlYlNwZWVjaElucHV0TGlzdGVuZXI7CitjbGFzcyBX
ZWJTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKKworY2xhc3MgV2ViVGVz
dERlbGVnYXRlOworCitjbGFzcyBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyIDogcHVibGlj
IFdlYktpdDo6V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKFdlYktpdDo6V2ViU3BlZWNoSW5wdXRMaXN0
ZW5lciopOworICAgIH5Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKCk7CisKKyAgICB2b2lk
IGFkZE1vY2tSZWNvZ25pdGlvblJlc3VsdChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgcmVzdWx0
LCBkb3VibGUgY29uZmlkZW5jZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGxhbmd1YWdlKTsK
KyAgICB2b2lkIHNldER1bXBSZWN0KGJvb2wpOworICAgIHZvaWQgY2xlYXJSZXN1bHRzKCk7Cisg
ICAgdm9pZCBzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqKTsKKworICAgIC8vIFdlYlNwZWVj
aElucHV0Q29udHJvbGxlciBpbXBsZW1lbnRhdGlvbjoKKyAgICB2aXJ0dWFsIGJvb2wgc3RhcnRS
ZWNvZ25pdGlvbihpbnQgcmVxdWVzdElkLCBjb25zdCBXZWJLaXQ6OldlYlJlY3QmIGVsZW1lbnRS
ZWN0LCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbGFuZ3VhZ2UsIGNvbnN0IFdlYktpdDo6V2Vi
U3RyaW5nJiBncmFtbWFyLCBjb25zdCBXZWJLaXQ6OldlYlNlY3VyaXR5T3JpZ2luJikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbFJlY29nbml0aW9uKGludCByZXF1ZXN0SWQpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdG9wUmVjb3JkaW5nKGludCByZXF1ZXN0SWQpIE9W
RVJSSURFOworCisgICAgV2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1fdGFza0xp
c3Q7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHNwZWVjaFRhc2tGaXJlZCgpOworCisgICAgY2xh
c3MgU3BlZWNoVGFzayA6IHB1YmxpYyBXZWJNZXRob2RUYXNrPE1vY2tXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNwZWVjaFRhc2soTW9ja1dlYlNwZWVj
aElucHV0Q29udHJvbGxlciopOworICAgICAgICB2b2lkIHN0b3AoKTsKKworICAgIHByaXZhdGU6
CisgICAgICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgT1ZFUlJJREU7CisgICAgfTsKKwor
ICAgIFdlYktpdDo6V2ViU3BlZWNoSW5wdXRMaXN0ZW5lciogbV9saXN0ZW5lcjsKKworICAgIFdl
YlRhc2tMaXN0IG1fdGFza0xpc3Q7CisgICAgU3BlZWNoVGFzayogbV9zcGVlY2hUYXNrOworCisg
ICAgYm9vbCBtX3JlY29yZGluZzsKKyAgICBpbnQgbV9yZXF1ZXN0SWQ7CisgICAgV2ViS2l0OjpX
ZWJSZWN0IG1fcmVxdWVzdFJlY3Q7CisgICAgc3RkOjpzdHJpbmcgbV9sYW5ndWFnZTsKKworICAg
IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxXZWJLaXQ6OldlYlNwZWVjaElucHV0
UmVzdWx0PiA+IG1fcmVjb2duaXRpb25SZXN1bHRzOworICAgIHN0ZDo6dmVjdG9yPFdlYktpdDo6
V2ViU3BlZWNoSW5wdXRSZXN1bHQ+IG1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2U7CisgICAgYm9v
bCBtX2R1bXBSZWN0OworCisgICAgV2ViVGVzdERlbGVnYXRlKiBtX2RlbGVnYXRlOworfTsKKwor
fQorCisjZW5kaWYgLy8gTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcl9oCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3Bl
ZWNoUmVjb2duaXplci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODY2MDgxMjEz
ODJkNzlhNTc2NzE0NTEzYzI0MmNjNDBiMWUwZTQ0OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hSZWNv
Z25pemVyLmNwcApAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJNb2NrV2ViU3BlZWNoUmVjb2duaXplci5oIgorCisjaW5jbHVkZSAiV2ViU3Bl
ZWNoUmVjb2duaXRpb25SZXN1bHQuaCIKKyNpbmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pemVyQ2xp
ZW50LmgiCisjaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7
CisKK25hbWVzcGFjZSB7CisKKy8vIFRhc2sgY2xhc3MgZm9yIGNhbGxpbmcgYSBjbGllbnQgZnVu
Y3Rpb24gdGhhdCBkb2VzIG5vdCB0YWtlIGFueSBwYXJhbWV0ZXJzLgordHlwZWRlZiB2b2lkIChX
ZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjoqQ2xpZW50RnVuY3Rpb25Qb2ludGVyKShjb25zdCBX
ZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYpOworY2xhc3MgQ2xpZW50Q2FsbFRhc2sgOiBwdWJs
aWMgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sgeworcHVibGljOgorICAgIENsaWVudENh
bGxUYXNrKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBtb2NrLCBDbGllbnRGdW5jdGlvblBvaW50
ZXIgZnVuY3Rpb24pCisgICAgICAgIDogTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sobW9j
aykKKyAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgcnVuKCkgT1ZFUlJJREUgeyAobV9yZWNvZ25pemVyLT5jbGllbnQoKS0+Km1f
ZnVuY3Rpb24pKG1fcmVjb2duaXplci0+aGFuZGxlKCkpOyB9CisKK3ByaXZhdGU6CisgICAgQ2xp
ZW50RnVuY3Rpb25Qb2ludGVyIG1fZnVuY3Rpb247Cit9OworCisvLyBUYXNrIGZvciBkZWxpdmVy
aW5nIGEgcmVzdWx0IGV2ZW50LgorY2xhc3MgUmVzdWx0VGFzayA6IHB1YmxpYyBNb2NrV2ViU3Bl
ZWNoUmVjb2duaXplcjo6VGFzayB7CitwdWJsaWM6CisgICAgUmVzdWx0VGFzayhNb2NrV2ViU3Bl
ZWNoUmVjb2duaXplciogbW9jaywgY29uc3QgV2ViU3RyaW5nIHRyYW5zY3JpcHQsIGZsb2F0IGNv
bmZpZGVuY2UpCisgICAgICAgIDogTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sobW9jaykK
KyAgICAgICAgLCBtX3RyYW5zY3JpcHQodHJhbnNjcmlwdCkKKyAgICAgICAgLCBtX2NvbmZpZGVu
Y2UoY29uZmlkZW5jZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJ1bigpIE9W
RVJSSURFCisgICAgeworICAgICAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiB0cmFuc2NyaXB0cyhz
dGF0aWNfY2FzdDxzaXplX3Q+KDEpKTsKKyAgICAgICAgV2ViVmVjdG9yPGZsb2F0PiBjb25maWRl
bmNlcyhzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKTsKKyAgICAgICAgdHJhbnNjcmlwdHNbMF0gPSBt
X3RyYW5zY3JpcHQ7CisgICAgICAgIGNvbmZpZGVuY2VzWzBdID0gbV9jb25maWRlbmNlOworICAg
ICAgICBXZWJWZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IGZpbmFsUmVzdWx0cyhz
dGF0aWNfY2FzdDxzaXplX3Q+KDEpKTsKKyAgICAgICAgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29n
bml0aW9uUmVzdWx0PiBpbnRlcmltUmVzdWx0czsKKyAgICAgICAgZmluYWxSZXN1bHRzWzBdLmFz
c2lnbih0cmFuc2NyaXB0cywgY29uZmlkZW5jZXMsIHRydWUpOworCisgICAgICAgIG1fcmVjb2du
aXplci0+Y2xpZW50KCktPmRpZFJlY2VpdmVSZXN1bHRzKG1fcmVjb2duaXplci0+aGFuZGxlKCks
IGZpbmFsUmVzdWx0cywgaW50ZXJpbVJlc3VsdHMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBX
ZWJTdHJpbmcgbV90cmFuc2NyaXB0OworICAgIGZsb2F0IG1fY29uZmlkZW5jZTsKK307CisKKy8v
IFRhc2sgZm9yIGRlbGl2ZXJpbmcgYSBub21hdGNoIGV2ZW50LgorY2xhc3MgTm9NYXRjaFRhc2sg
OiBwdWJsaWMgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sgeworcHVibGljOgorICAgIE5v
TWF0Y2hUYXNrKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBtb2NrKSA6IE1vY2tXZWJTcGVlY2hS
ZWNvZ25pemVyOjpUYXNrKG1vY2spIHsgfQorICAgIHZpcnR1YWwgdm9pZCBydW4oKSBPVkVSUklE
RSB7IG1fcmVjb2duaXplci0+Y2xpZW50KCktPmRpZFJlY2VpdmVOb01hdGNoKG1fcmVjb2duaXpl
ci0+aGFuZGxlKCksIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0KCkpOyB9Cit9OworCisvLyBU
YXNrIGZvciBkZWxpdmVyaW5nIGFuIGVycm9yIGV2ZW50LgorY2xhc3MgRXJyb3JUYXNrIDogcHVi
bGljIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrIHsKK3B1YmxpYzoKKyAgICBFcnJvclRh
c2soTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG1vY2ssIFdlYlNwZWVjaFJlY29nbml6ZXJDbGll
bnQ6OkVycm9yQ29kZSBjb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCisgICAgICAgIDog
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sobW9jaykKKyAgICAgICAgLCBtX2NvZGUoY29k
ZSkKKyAgICAgICAgLCBtX21lc3NhZ2UobWVzc2FnZSkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIHJ1bigpIE9WRVJSSURFIHsgbV9yZWNvZ25pemVyLT5jbGllbnQoKS0+ZGlkUmVj
ZWl2ZUVycm9yKG1fcmVjb2duaXplci0+aGFuZGxlKCksIG1fbWVzc2FnZSwgbV9jb2RlKTsgfQor
Citwcml2YXRlOgorICAgIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OkVycm9yQ29kZSBtX2Nv
ZGU7CisgICAgV2ViU3RyaW5nIG1fbWVzc2FnZTsKK307CisKK30gLy8gbmFtZXNwYWNlCisKK01v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcigpCisgICAgOiBt
X3dhc0Fib3J0ZWQoZmFsc2UpCisgICAgLCBtX3Rhc2tRdWV1ZVJ1bm5pbmcoZmFsc2UpCisgICAg
LCBtX2RlbGVnYXRlKDApCit7Cit9CisKK01vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjp+TW9ja1dl
YlNwZWVjaFJlY29nbml6ZXIoKQoreworICAgIGNsZWFyVGFza1F1ZXVlKCk7Cit9CisKK3ZvaWQg
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSogZGVs
ZWdhdGUpCit7CisgICAgbV9kZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQorCit2b2lkIE1vY2tXZWJT
cGVlY2hSZWNvZ25pemVyOjpzdGFydChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYg
aGFuZGxlLCBjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcyYgcGFyYW1zLCBXZWJTcGVl
Y2hSZWNvZ25pemVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV93YXNBYm9ydGVkID0gZmFsc2U7
CisgICAgbV9oYW5kbGUgPSBoYW5kbGU7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisKKyAgICBt
X3Rhc2tRdWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hS
ZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydCkpOworICAgIG1fdGFza1F1ZXVlLnB1c2hfYmFjayhu
ZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZFN0
YXJ0QXVkaW8pKTsKKyAgICBtX3Rhc2tRdWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNr
KHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydFNvdW5kKSk7CisKKyAg
ICBpZiAoIW1fbW9ja1RyYW5zY3JpcHRzLmVtcHR5KCkpIHsKKyAgICAgICAgV0VCS0lUX0FTU0VS
VChtX21vY2tUcmFuc2NyaXB0cy5zaXplKCkgPT0gbV9tb2NrQ29uZmlkZW5jZXMuc2l6ZSgpKTsK
KworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbW9ja1RyYW5zY3JpcHRzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBSZXN1bHRUYXNr
KHRoaXMsIG1fbW9ja1RyYW5zY3JpcHRzW2ldLCBtX21vY2tDb25maWRlbmNlc1tpXSkpOworCisg
ICAgICAgIG1fbW9ja1RyYW5zY3JpcHRzLmNsZWFyKCk7CisgICAgICAgIG1fbW9ja0NvbmZpZGVu
Y2VzLmNsZWFyKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fdGFza1F1ZXVlLnB1c2hfYmFjayhu
ZXcgTm9NYXRjaFRhc2sodGhpcykpOworCisgICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBD
bGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kU291
bmQpKTsKKyAgICBtX3Rhc2tRdWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMs
ICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmRBdWRpbykpOworICAgIG1fdGFza1F1
ZXVlLnB1c2hfYmFjayhuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6
ZXJDbGllbnQ6OmRpZEVuZCkpOworCisgICAgc3RhcnRUYXNrUXVldWUoKTsKK30KKwordm9pZCBN
b2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c3RvcChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhh
bmRsZSYgaGFuZGxlLCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KiBjbGllbnQpCit7CisgICAg
bV9oYW5kbGUgPSBoYW5kbGU7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50LgorICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9p
ZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6YWJvcnQoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRp
b25IYW5kbGUmIGhhbmRsZSwgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KQorewor
ICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1fY2xpZW50ID0gY2xpZW50OworCisgICAgY2xl
YXJUYXNrUXVldWUoKTsKKyAgICBtX3dhc0Fib3J0ZWQgPSB0cnVlOworICAgIG1fdGFza1F1ZXVl
LnB1c2hfYmFjayhuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJD
bGllbnQ6OmRpZEVuZCkpOworICAgIHN0YXJ0VGFza1F1ZXVlKCk7Cit9CisKK3ZvaWQgTW9ja1dl
YlNwZWVjaFJlY29nbml6ZXI6OmFkZE1vY2tSZXN1bHQoY29uc3QgV2ViU3RyaW5nJiB0cmFuc2Ny
aXB0LCBmbG9hdCBjb25maWRlbmNlKQoreworICAgIG1fbW9ja1RyYW5zY3JpcHRzLnB1c2hfYmFj
ayh0cmFuc2NyaXB0KTsKKyAgICBtX21vY2tDb25maWRlbmNlcy5wdXNoX2JhY2soY29uZmlkZW5j
ZSk7Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnNldEVycm9yKGNvbnN0IFdl
YlN0cmluZyYgZXJyb3IsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBXZWJTcGVl
Y2hSZWNvZ25pemVyQ2xpZW50OjpFcnJvckNvZGUgY29kZTsKKyAgICBpZiAoZXJyb3IgPT0gIk90
aGVyRXJyb3IiKQorICAgICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6T3Ro
ZXJFcnJvcjsKKyAgICBlbHNlIGlmIChlcnJvciA9PSAiTm9TcGVlY2hFcnJvciIpCisgICAgICAg
IGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpOb1NwZWVjaEVycm9yOworICAgIGVs
c2UgaWYgKGVycm9yID09ICJBYm9ydGVkRXJyb3IiKQorICAgICAgICBjb2RlID0gV2ViU3BlZWNo
UmVjb2duaXplckNsaWVudDo6QWJvcnRlZEVycm9yOworICAgIGVsc2UgaWYgKGVycm9yID09ICJB
dWRpb0NhcHR1cmVFcnJvciIpCisgICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xp
ZW50OjpBdWRpb0NhcHR1cmVFcnJvcjsKKyAgICBlbHNlIGlmIChlcnJvciA9PSAiTmV0d29ya0Vy
cm9yIikKKyAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Ok5ldHdvcmtF
cnJvcjsKKyAgICBlbHNlIGlmIChlcnJvciA9PSAiTm90QWxsb3dlZEVycm9yIikKKyAgICAgICAg
Y29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Ok5vdEFsbG93ZWRFcnJvcjsKKyAgICBl
bHNlIGlmIChlcnJvciA9PSAiU2VydmljZU5vdEFsbG93ZWRFcnJvciIpCisgICAgICAgIGNvZGUg
PSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpTZXJ2aWNlTm90QWxsb3dlZEVycm9yOworICAg
IGVsc2UgaWYgKGVycm9yID09ICJCYWRHcmFtbWFyRXJyb3IiKQorICAgICAgICBjb2RlID0gV2Vi
U3BlZWNoUmVjb2duaXplckNsaWVudDo6QmFkR3JhbW1hckVycm9yOworICAgIGVsc2UgaWYgKGVy
cm9yID09ICJMYW5ndWFnZU5vdFN1cHBvcnRlZEVycm9yIikKKyAgICAgICAgY29kZSA9IFdlYlNw
ZWVjaFJlY29nbml6ZXJDbGllbnQ6Okxhbmd1YWdlTm90U3VwcG9ydGVkRXJyb3I7CisgICAgZWxz
ZQorICAgICAgICByZXR1cm47CisKKyAgICBjbGVhclRhc2tRdWV1ZSgpOworICAgIG1fdGFza1F1
ZXVlLnB1c2hfYmFjayhuZXcgRXJyb3JUYXNrKHRoaXMsIGNvZGUsIG1lc3NhZ2UpKTsKKyAgICBt
X3Rhc2tRdWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hS
ZWNvZ25pemVyQ2xpZW50OjpkaWRFbmQpKTsKKyAgICBzdGFydFRhc2tRdWV1ZSgpOworfQorCit2
b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzdGFydFRhc2tRdWV1ZSgpCit7CisgICAgaWYg
KG1fdGFza1F1ZXVlUnVubmluZykKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGVsZWdhdGUtPnBv
c3RUYXNrKG5ldyBTdGVwVGFzayh0aGlzKSk7CisgICAgbV90YXNrUXVldWVSdW5uaW5nID0gdHJ1
ZTsKK30KKwordm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6Y2xlYXJUYXNrUXVldWUoKQor
eworICAgIHdoaWxlICghbV90YXNrUXVldWUuZW1wdHkoKSkgeworICAgICAgICBkZWxldGUgbV90
YXNrUXVldWUuZnJvbnQoKTsKKyAgICAgICAgbV90YXNrUXVldWUucG9wX2Zyb250KCk7CisgICAg
fQorICAgIG1fdGFza1F1ZXVlUnVubmluZyA9IGZhbHNlOworfQorCit2b2lkIE1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyOjpTdGVwVGFzazo6cnVuSWZWYWxpZCgpCit7CisgICAgaWYgKG1fb2JqZWN0
LT5tX3Rhc2tRdWV1ZS5lbXB0eSgpKSB7CisgICAgICAgIG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZVJ1
bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFRhc2sqIHRhc2sg
PSBtX29iamVjdC0+bV90YXNrUXVldWUuZnJvbnQoKTsKKyAgICBtX29iamVjdC0+bV90YXNrUXVl
dWUucG9wX2Zyb250KCk7CisgICAgdGFzay0+cnVuKCk7CisgICAgZGVsZXRlIHRhc2s7CisKKyAg
ICBpZiAobV9vYmplY3QtPm1fdGFza1F1ZXVlLmVtcHR5KCkpIHsKKyAgICAgICAgbV9vYmplY3Qt
Pm1fdGFza1F1ZXVlUnVubmluZyA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9vYmplY3QtPm1fZGVsZWdhdGUtPnBvc3RUYXNrKG5ldyBTdGVwVGFzayhtX29iamVjdCkp
OworfQorCit9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5oIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42ODliYzI2YzE3M2QwOWIxYjFmNTNkZTRmMzEyYzJiZTc5MmJiZGViCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXJfaAorI2RlZmluZSBNb2NrV2ViU3BlZWNoUmVjb2du
aXplcl9oCisKKyNpbmNsdWRlICJUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoUmVj
b2duaXplci5oIgorI2luY2x1ZGUgIldlYlRhc2suaCIKKyNpbmNsdWRlIDxkZXF1ZT4KKyNpbmNs
dWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViU3BlZWNoUmVjb2du
aXRpb25IYW5kbGU7CitjbGFzcyBXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtczsKK2NsYXNzIFdl
YlNwZWVjaFJlY29nbml6ZXJDbGllbnQ7Cit9CisKK25hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsK
KworY2xhc3MgV2ViVGVzdERlbGVnYXRlOworCitjbGFzcyBNb2NrV2ViU3BlZWNoUmVjb2duaXpl
ciA6IHB1YmxpYyBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXIgeworcHVibGljOgorICAgIE1v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyKCk7CisgICAgfk1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKCk7
CisKKyAgICB2b2lkIHNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSopOworCisgICAgLy8gV2Vi
U3BlZWNoUmVjb2duaXplciBpbXBsZW1lbnRhdGlvbjoKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQo
Y29uc3QgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYsIGNvbnN0IFdlYktpdDo6
V2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXMmLCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJD
bGllbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcChjb25zdCBXZWJLaXQ6Oldl
YlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiwgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xp
ZW50KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFib3J0KGNvbnN0IFdlYktpdDo6V2Vi
U3BlZWNoUmVjb2duaXRpb25IYW5kbGUmLCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGll
bnQqKSBPVkVSUklERTsKKworICAgIC8vIE1ldGhvZHMgYWNjZXNzZWQgYnkgbGF5b3V0IHRlc3Rz
OgorICAgIHZvaWQgYWRkTW9ja1Jlc3VsdChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgdHJhbnNj
cmlwdCwgZmxvYXQgY29uZmlkZW5jZSk7CisgICAgdm9pZCBzZXRFcnJvcihjb25zdCBXZWJLaXQ6
OldlYlN0cmluZyYgZXJyb3IsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtZXNzYWdlKTsKKyAg
ICBib29sIHdhc0Fib3J0ZWQoKSBjb25zdCB7IHJldHVybiBtX3dhc0Fib3J0ZWQ7IH0KKworICAg
IC8vIE1ldGhvZHMgYWNjZXNzZWQgZnJvbSBUYXNrIG9iamVjdHM6CisgICAgV2ViS2l0OjpXZWJT
cGVlY2hSZWNvZ25pemVyQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQorICAg
IFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIGhhbmRsZSgpIHsgcmV0dXJuIG1f
aGFuZGxlOyB9CisgICAgV2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1fdGFza0xp
c3Q7IH0KKworICAgIGNsYXNzIFRhc2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhNb2Nr
V2ViU3BlZWNoUmVjb2duaXplciogcmVjb2duaXplcikgOiBtX3JlY29nbml6ZXIocmVjb2duaXpl
cikgeyB9CisgICAgICAgIHZpcnR1YWwgflRhc2soKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lk
IHJ1bigpID0gMDsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIE1vY2tXZWJTcGVlY2hSZWNvZ25p
emVyKiBtX3JlY29nbml6ZXI7CisgICAgfTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHN0YXJ0VGFz
a1F1ZXVlKCk7CisgICAgdm9pZCBjbGVhclRhc2tRdWV1ZSgpOworCisgICAgV2ViVGFza0xpc3Qg
bV90YXNrTGlzdDsKKyAgICBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlIG1faGFu
ZGxlOworICAgIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogbV9jbGllbnQ7Cisg
ICAgc3RkOjp2ZWN0b3I8V2ViS2l0OjpXZWJTdHJpbmc+IG1fbW9ja1RyYW5zY3JpcHRzOworICAg
IHN0ZDo6dmVjdG9yPGZsb2F0PiBtX21vY2tDb25maWRlbmNlczsKKyAgICBib29sIG1fd2FzQWJv
cnRlZDsKKworICAgIC8vIFF1ZXVlIG9mIHRhc2tzIHRvIGJlIHJ1bi4KKyAgICBzdGQ6OmRlcXVl
PFRhc2sqPiBtX3Rhc2tRdWV1ZTsKKyAgICBib29sIG1fdGFza1F1ZXVlUnVubmluZzsKKworICAg
IFdlYlRlc3REZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKKworICAgIC8vIFRhc2sgZm9yIHN0ZXBwaW5n
IHRoZSBxdWV1ZS4KKyAgICBjbGFzcyBTdGVwVGFzayA6IHB1YmxpYyBXZWJNZXRob2RUYXNrPE1v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyPiB7CisgICAgcHVibGljOgorICAgICAgICBTdGVwVGFzayhN
b2NrV2ViU3BlZWNoUmVjb2duaXplciogb2JqZWN0KSA6IFdlYk1ldGhvZFRhc2s8TW9ja1dlYlNw
ZWVjaFJlY29nbml6ZXI+KG9iamVjdCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBydW5JZlZh
bGlkKCkgT1ZFUlJJREU7CisgICAgfTsKK307CisKK30KKworI2VuZGlmIC8vIE1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmNwcAppbmRleCAxYjFmOWIw
YmFjY2Y5NjM3YTcyNTg1NDIwMjI5NzA4OTM0ZDI2ZjQ1Li5kMjk3ZTJmNjc1ZGM0ZmYwMGE5MTBl
MmE1NDM2NDU2NDE3MjQ3YjU0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMuY3BwCkBAIC01
MSw3ICs1MSw3IEBAIFRlc3RJbnRlcmZhY2VzOjpUZXN0SW50ZXJmYWNlcygpCiAgICAgLCBtX2V2
ZW50U2VuZGVyKG5ldyBFdmVudFNlbmRlcigpKQogICAgICwgbV9nYW1lcGFkQ29udHJvbGxlcihu
ZXcgR2FtZXBhZENvbnRyb2xsZXIoKSkKICAgICAsIG1fdGV4dElucHV0Q29udHJvbGxlcihuZXcg
VGV4dElucHV0Q29udHJvbGxlcigpKQotICAgICwgbV90ZXN0UnVubmVyKG5ldyBUZXN0UnVubmVy
KCkpCisgICAgLCBtX3Rlc3RSdW5uZXIobmV3IFRlc3RSdW5uZXIodGhpcykpCiAgICAgLCBtX3dl
YlZpZXcoMCkKICAgICAsIG1fZGVsZWdhdGUoMCkKIHsKQEAgLTEzMyw2ICsxMzMsMjEgQEAgdm9p
ZCBUZXN0SW50ZXJmYWNlczo6Y29uZmlndXJlRm9yVGVzdFdpdGhVUkwoY29uc3QgV2ViVVJMJiB0
ZXN0VVJMLCBib29sIGdlbmVyYXQKICAgICAgICAgbV90ZXN0UnVubmVyLT5zaG93RGV2VG9vbHMo
KTsKIH0KIAordm9pZCBUZXN0SW50ZXJmYWNlczo6d2luZG93T3BlbmVkKFdlYlRlc3RQcm94eUJh
c2UqIHByb3h5KQoreworICAgIG1fd2luZG93TGlzdC5wdXNoX2JhY2socHJveHkpOworfQorCit2
b2lkIFRlc3RJbnRlcmZhY2VzOjp3aW5kb3dDbG9zZWQoV2ViVGVzdFByb3h5QmFzZSogcHJveHkp
Cit7CisgICAgdmVjdG9yPFdlYlRlc3RQcm94eUJhc2UqPjo6aXRlcmF0b3IgcG9zID0gZmluZCht
X3dpbmRvd0xpc3QuYmVnaW4oKSwgbV93aW5kb3dMaXN0LmVuZCgpLCBwcm94eSk7CisgICAgaWYg
KHBvcyA9PSBtX3dpbmRvd0xpc3QuZW5kKCkpIHsKKyAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fd2luZG93TGlzdC5lcmFz
ZShwb3MpOworfQorCiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciogVGVzdEludGVyZmFjZXM6OmFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyKCkKIHsKICAgICByZXR1cm4gbV9hY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5nZXQoKTsKQEAgLTE2Myw0ICsxNzgsOSBAQCBXZWJUZXN0UHJveHlCYXNlKiBUZXN0
SW50ZXJmYWNlczo6cHJveHkoKQogICAgIHJldHVybiBtX3Byb3h5OwogfQogCitjb25zdCB2ZWN0
b3I8V2ViVGVzdFByb3h5QmFzZSo+JiBUZXN0SW50ZXJmYWNlczo6d2luZG93TGlzdCgpCit7Cisg
ICAgcmV0dXJuIG1fd2luZG93TGlzdDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMuaCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmgK
aW5kZXggOWQyZThjMzE3MzBhNDAwNmI1N2MxMjJjZDYzNDI2MzBmYTg0YTJlYi4uYjZiMzAxYTc5
MGMzNGRjMTI4OGEwNWJlZTllMzY0ZWFiY2ZlMTI5ZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMuaAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNl
cy5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIFRlc3RJbnRlcmZhY2VzX2gKIAogI2luY2x1
ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xh
c3MgV2ViRnJhbWU7CkBAIC02MSwxMyArNjIsMTYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGVz
dElzUnVubmluZyhib29sKTsKICAgICB2b2lkIGNvbmZpZ3VyZUZvclRlc3RXaXRoVVJMKGNvbnN0
IFdlYktpdDo6V2ViVVJMJiwgYm9vbCBnZW5lcmF0ZVBpeGVscyk7CiAKKyAgICB2b2lkIHdpbmRv
d09wZW5lZChXZWJUZXN0UHJveHlCYXNlKik7CisgICAgdm9pZCB3aW5kb3dDbG9zZWQoV2ViVGVz
dFByb3h5QmFzZSopOworCiAgICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqIGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyKCk7CiAgICAgRXZlbnRTZW5kZXIqIGV2ZW50U2VuZGVyKCk7CiAgICAgVGVz
dFJ1bm5lciogdGVzdFJ1bm5lcigpOwogICAgIFdlYktpdDo6V2ViVmlldyogd2ViVmlldygpOwog
ICAgIFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUoKTsKICAgICBXZWJUZXN0UHJveHlCYXNlKiBw
cm94eSgpOwotCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8V2ViVGVzdFByb3h5QmFzZSo+JiB3aW5k
b3dMaXN0KCk7CiAKIHByaXZhdGU6CiAgICAgc3RkOjphdXRvX3B0cjxBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcj4gbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjsKQEAgLTc4LDYgKzgyLDggQEAgcHJp
dmF0ZToKICAgICBXZWJLaXQ6OldlYlZpZXcqIG1fd2ViVmlldzsKICAgICBXZWJUZXN0RGVsZWdh
dGUqIG1fZGVsZWdhdGU7CiAgICAgV2ViVGVzdFByb3h5QmFzZSogbV9wcm94eTsKKworICAgIHN0
ZDo6dmVjdG9yPFdlYlRlc3RQcm94eUJhc2UqPiBtX3dpbmRvd0xpc3Q7CiB9OwogCiB9CmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0
UnVubmVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1Rlc3RSdW5uZXIuY3BwCmluZGV4IGQ3OWVkM2ZlMGNhZTc1MjZhZTdlNGQzMzExOTEwMTQxY2Ey
OTE5ZTkuLjJhYjlhMzA4OWMzYjEwYWI5MTAyODFkMTljNjNkNDIxY2MwNjljYTggMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5u
ZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1Rlc3RSdW5uZXIuY3BwCkBAIC0zMywxNCArMzMsMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAKKyNpbmNsdWRlICJNb2NrV2ViU3BlZWNoSW5wdXRD
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaCIKICNpbmNs
dWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKKyNpbmNsdWRlICJUZXN0SW50ZXJmYWNlcy5o
IgogI2luY2x1ZGUgIldlYkJpbmRpbmdzLmgiCiAjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZS5oIgog
I2luY2x1ZGUgIldlYkRldmljZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiV2ViRGV2aWNlT3Jp
ZW50YXRpb25DbGllbnRNb2NrLmgiCiAjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJXZWJFbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIKICNpbmNsdWRlICJX
ZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uQ2xpZW50TW9jay5oIgogI2luY2x1
ZGUgIldlYklucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIldlYlBlcm1pc3Npb25zLmgiCiAjaW5j
bHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKQEAgLTE0MiwxMCArMTQ3LDExIEBAIHZvaWQgVGVzdFJ1
bm5lcjo6V29ya1F1ZXVlOjphZGRXb3JrKFdvcmtJdGVtKiB3b3JrKQogfQogCiAKLVRlc3RSdW5u
ZXI6OlRlc3RSdW5uZXIoKQorVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcihUZXN0SW50ZXJmYWNlcyog
aW50ZXJmYWNlcykKICAgICA6IG1fdGVzdElzUnVubmluZyhmYWxzZSkKICAgICAsIG1fY2xvc2VS
ZW1haW5pbmdXaW5kb3dzKGZhbHNlKQogICAgICwgbV93b3JrUXVldWUodGhpcykKKyAgICAsIG1f
dGVzdEludGVyZmFjZXMoaW50ZXJmYWNlcykKICAgICAsIG1fZGVsZWdhdGUoMCkKICAgICAsIG1f
d2ViVmlldygwKQogICAgICwgbV93ZWJQZXJtaXNzaW9ucyhuZXcgV2ViUGVybWlzc2lvbnMpCkBA
IC00MjcsNiArNDMzLDggQEAgdm9pZCBUZXN0UnVubmVyOjpyZXNldCgpCiAjaWYgRU5BQkxFX05P
VElGSUNBVElPTlMKICAgICBtX25vdGlmaWNhdGlvblByZXNlbnRlci0+cmVzZXQoKTsKICNlbmRp
ZgorICAgIG1fcG9pbnRlckxvY2tlZCA9IGZhbHNlOworICAgIG1fcG9pbnRlckxvY2tQbGFubmVk
UmVzdWx0ID0gUG9pbnRlckxvY2tXaWxsU3VjY2VlZDsKIAogICAgIG1fdGFza0xpc3QucmV2b2tl
QWxsKCk7CiAgICAgbV93b3JrUXVldWUucmVzZXQoKTsKQEAgLTY4Myw2ICs2OTEsNjEgQEAgV2Vi
Tm90aWZpY2F0aW9uUHJlc2VudGVyKiBUZXN0UnVubmVyOjpub3RpZmljYXRpb25QcmVzZW50ZXIo
KSBjb25zdAogfQogI2VuZGlmCiAKK2Jvb2wgVGVzdFJ1bm5lcjo6cmVxdWVzdFBvaW50ZXJMb2Nr
KCkKK3sKKyAgICBzd2l0Y2ggKG1fcG9pbnRlckxvY2tQbGFubmVkUmVzdWx0KSB7CisgICAgY2Fz
ZSBQb2ludGVyTG9ja1dpbGxTdWNjZWVkOgorICAgICAgICBtX2RlbGVnYXRlLT5wb3N0RGVsYXll
ZFRhc2sobmV3IEhvc3RNZXRob2RUYXNrKHRoaXMsICZUZXN0UnVubmVyOjpkaWRBY3F1aXJlUG9p
bnRlckxvY2tJbnRlcm5hbCksIDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFBv
aW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luYzoKKyAgICAgICAgV0VCS0lUX0FTU0VSVCghbV9wb2lu
dGVyTG9ja2VkKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBQb2ludGVyTG9ja1dp
bGxGYWlsU3luYzoKKyAgICAgICAgV0VCS0lUX0FTU0VSVCghbV9wb2ludGVyTG9ja2VkKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBU
ZXN0UnVubmVyOjpyZXF1ZXN0UG9pbnRlclVubG9jaygpCit7CisgICAgbV9kZWxlZ2F0ZS0+cG9z
dERlbGF5ZWRUYXNrKG5ldyBIb3N0TWV0aG9kVGFzayh0aGlzLCAmVGVzdFJ1bm5lcjo6ZGlkTG9z
ZVBvaW50ZXJMb2NrSW50ZXJuYWwpLCAwKTsKK30KKworYm9vbCBUZXN0UnVubmVyOjppc1BvaW50
ZXJMb2NrZWQoKQoreworICAgIHJldHVybiBtX3BvaW50ZXJMb2NrZWQ7Cit9CisKK3ZvaWQgVGVz
dFJ1bm5lcjo6ZGlkQWNxdWlyZVBvaW50ZXJMb2NrSW50ZXJuYWwoKQoreworICAgIG1fcG9pbnRl
ckxvY2tlZCA9IHRydWU7CisgICAgbV93ZWJWaWV3LT5kaWRBY3F1aXJlUG9pbnRlckxvY2soKTsK
KworICAgIC8vIFJlc2V0IHBsYW5uZWQgcmVzdWx0IHRvIGRlZmF1bHQuCisgICAgbV9wb2ludGVy
TG9ja1BsYW5uZWRSZXN1bHQgPSBQb2ludGVyTG9ja1dpbGxTdWNjZWVkOworfQorCit2b2lkIFRl
c3RSdW5uZXI6OmRpZE5vdEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKCkKK3sKKyAgICBXRUJL
SVRfQVNTRVJUKCFtX3BvaW50ZXJMb2NrZWQpOworICAgIG1fcG9pbnRlckxvY2tlZCA9IGZhbHNl
OworICAgIG1fd2ViVmlldy0+ZGlkTm90QWNxdWlyZVBvaW50ZXJMb2NrKCk7CisKKyAgICAvLyBS
ZXNldCBwbGFubmVkIHJlc3VsdCB0byBkZWZhdWx0LgorICAgIG1fcG9pbnRlckxvY2tQbGFubmVk
UmVzdWx0ID0gUG9pbnRlckxvY2tXaWxsU3VjY2VlZDsKK30KKwordm9pZCBUZXN0UnVubmVyOjpk
aWRMb3NlUG9pbnRlckxvY2tJbnRlcm5hbCgpCit7CisgICAgYm9vbCB3YXNMb2NrZWQgPSBtX3Bv
aW50ZXJMb2NrZWQ7CisgICAgbV9wb2ludGVyTG9ja2VkID0gZmFsc2U7CisgICAgaWYgKHdhc0xv
Y2tlZCkKKyAgICAgICAgbV93ZWJWaWV3LT5kaWRMb3NlUG9pbnRlckxvY2soKTsKK30KKwogdm9p
ZCBUZXN0UnVubmVyOjpzaG93RGV2VG9vbHMoKQogewogICAgIG1fZGVsZWdhdGUtPnNob3dEZXZU
b29scygpOwpAQCAtODgwLDcgKzk0Myw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6bG9jYXRpb25DaGFu
Z2VEb25lKCkKIAogdm9pZCBUZXN0UnVubmVyOjp3aW5kb3dDb3VudChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0LT5zZXQoc3RhdGljX2Nh
c3Q8aW50PihtX2RlbGVnYXRlLT53aW5kb3dDb3VudCgpKSk7CisgICAgcmVzdWx0LT5zZXQoc3Rh
dGljX2Nhc3Q8aW50PihtX3Rlc3RJbnRlcmZhY2VzLT53aW5kb3dMaXN0KCkuc2l6ZSgpKSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRl
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCkBA
IC0xNTExLDEwICsxNTc0LDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0RldmljZU9yaWVu
dGF0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWCiAgICAgaWYgKGFy
Z3VtZW50c1s0XS50b0Jvb2xlYW4oKSkKICAgICAgICAgb3JpZW50YXRpb24uc2V0R2FtbWEoYXJn
dW1lbnRzWzVdLnRvRG91YmxlKCkpOwogCi0gICAgLy8gTm90ZSB0aGF0IHdlIG9ubHkgY2FsbCBz
ZXRPcmllbnRhdGlvbiBvbiB0aGUgbWFpbiBwYWdlJ3MgbW9jayBzaW5jZSB0aGlzIGlzIGFsbCB0
aGF0IHRoZQotICAgIC8vIHRlc3RzIHJlcXVpcmUuIElmIG5lY2Vzc2FyeSwgd2UgY291bGQgZ2V0
IGEgbGlzdCBvZiBXZWJWaWV3SG9zdHMgZnJvbSB0aGUgVGVzdFNoZWxsIGFuZAorICAgIC8vIE5v
dGUgdGhhdCB3ZSBvbmx5IGNhbGwgc2V0T3JpZW50YXRpb24gb24gdGhlIG1haW4gcGFnZSdzIG1v
Y2sgc2luY2UgdGhpcworICAgIC8vIHRlc3RzIHJlcXVpcmUuIElmIG5lY2Vzc2FyeSwgd2UgY291
bGQgZ2V0IGEgbGlzdCBvZiBXZWJWaWV3SG9zdHMgZnJvbSB0aAogICAgIC8vIGNhbGwgc2V0T3Jp
ZW50YXRpb24gb24gZWFjaCBEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suCi0gICAgbV9kZWxl
Z2F0ZS0+c2V0RGV2aWNlT3JpZW50YXRpb24ob3JpZW50YXRpb24pOworICAgIG1fcHJveHktPmRl
dmljZU9yaWVudGF0aW9uQ2xpZW50TW9jaygpLT5zZXRPcmllbnRhdGlvbihvcmllbnRhdGlvbik7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCkBAIC0xNzU5LDcg
KzE4MjIsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFBPU0lYTG9jYWxlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZQogCiB2b2lkIFRlc3RSdW5uZXI6Om51
bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0LT5z
ZXQobV9kZWxlZ2F0ZS0+bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dHMoKSk7CisgICAgcmVzdWx0LT5zZXQobV9wcm94eS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCkt
Pm51bWJlck9mUGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cygpKTsKIH0KIAogLy8gRklYTUU6IEZv
ciBncmVhdGVyIHRlc3QgZmxleGliaWxpdHksIHdlIHNob3VsZCBiZSBhYmxlIHRvIHNldCBlYWNo
IHBhZ2UncyBnZW9sb2NhdGlvbiBtb2NrIGluZGl2aWR1YWxseS4KQEAgLTE3NjksNyArMTgzMiw5
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX2RlbGVnYXRlLT5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYXJn
dW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKKyAgICBjb25zdCB2ZWN0b3I8V2ViVGVzdFByb3h5QmFz
ZSo+JiB3aW5kb3dMaXN0ID0gbV90ZXN0SW50ZXJmYWNlcy0+d2luZG93TGlzdCgpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB3aW5kb3dMaXN0LnNpemUoKTsgKytpKQorICAgICAgICB3
aW5kb3dMaXN0LmF0KGkpLT5nZW9sb2NhdGlvbkNsaWVudE1vY2soKS0+c2V0UGVybWlzc2lvbihh
cmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCkBAIC0xNzc3LDcgKzE4NDIsOSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcAogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwg
MyB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigp
IHx8ICFhcmd1bWVudHNbMl0uaXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fZGVs
ZWdhdGUtPnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGFyZ3VtZW50c1swXS50b0RvdWJsZSgp
LCBhcmd1bWVudHNbMV0udG9Eb3VibGUoKSwgYXJndW1lbnRzWzJdLnRvRG91YmxlKCkpOworICAg
IGNvbnN0IHZlY3RvcjxXZWJUZXN0UHJveHlCYXNlKj4mIHdpbmRvd0xpc3QgPSBtX3Rlc3RJbnRl
cmZhY2VzLT53aW5kb3dMaXN0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdpbmRv
d0xpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIHdpbmRvd0xpc3QuYXQoaSktPmdlb2xvY2F0aW9u
Q2xpZW50TW9jaygpLT5zZXRQb3NpdGlvbihhcmd1bWVudHNbMF0udG9Eb3VibGUoKSwgYXJndW1l
bnRzWzFdLnRvRG91YmxlKCksIGFyZ3VtZW50c1syXS50b0RvdWJsZSgpKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKQEAgLTE3
ODUsNyArMTg1Miw5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b25VbmF2YWlsYWJsZUVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzCiAgICAgcmVzdWx0LT5zZXRO
dWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMSB8fCAhYXJndW1lbnRzWzBdLmlz
U3RyaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2RlbGVnYXRlLT5zZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpOwor
ICAgIGNvbnN0IHZlY3RvcjxXZWJUZXN0UHJveHlCYXNlKj4mIHdpbmRvd0xpc3QgPSBtX3Rlc3RJ
bnRlcmZhY2VzLT53aW5kb3dMaXN0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdp
bmRvd0xpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIHdpbmRvd0xpc3QuYXQoaSktPmdlb2xvY2F0
aW9uQ2xpZW50TW9jaygpLT5zZXRQb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV2ViU3RyaW5nOjpm
cm9tVVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkpOwogfQogCiAjaWYgRU5BQkxFX05PVElG
SUNBVElPTlMKQEAgLTE4MTUsNyArMTg4NCw5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja1Nw
ZWVjaElucHV0UmVzdWx0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWCiAg
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAzIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8
fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1syXS5pc1N0cmluZygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2RlbGVnYXRlLT5hZGRNb2NrU3BlZWNoSW5wdXRSZXN1
bHQoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCksIGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpLCBhcmd1
bWVudHNbMl0udG9TdHJpbmcoKSk7CisjaWYgRU5BQkxFX0lOUFVUX1NQRUVDSAorICAgIG1fcHJv
eHktPnNwZWVjaElucHV0Q29udHJvbGxlck1vY2soKS0+YWRkTW9ja1JlY29nbml0aW9uUmVzdWx0
KFdlYlN0cmluZzo6ZnJvbVVURjgoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpLCBhcmd1bWVudHNb
MV0udG9Eb3VibGUoKSwgV2ViU3RyaW5nOjpmcm9tVVRGOChhcmd1bWVudHNbMl0udG9TdHJpbmco
KSkpOworI2VuZGlmCiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaElucHV0RHVt
cFJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKQEAgLTE4MjQsNyArMTg5NSw5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaElu
cHV0RHVtcFJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwCiAgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fZGVsZWdhdGUtPnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGFy
Z3VtZW50c1swXS50b0Jvb2xlYW4oKSk7CisjaWYgRU5BQkxFX0lOUFVUX1NQRUVDSAorICAgIG1f
cHJveHktPnNwZWVjaElucHV0Q29udHJvbGxlck1vY2soKS0+c2V0RHVtcFJlY3QoYXJndW1lbnRz
WzBdLnRvQm9vbGVhbigpKTsKKyNlbmRpZgogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQpAQCAtMTgzMyw3ICsxOTA2LDcgQEAgdm9pZCBUZXN0UnVubmVy
OjphZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5p
c1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9kZWxlZ2F0ZS0+YWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KGFyZ3VtZW50
c1swXS50b1N0cmluZygpLCBhcmd1bWVudHNbMV0udG9Eb3VibGUoKSk7CisgICAgbV9wcm94eS0+
c3BlZWNoUmVjb2duaXplck1vY2soKS0+YWRkTW9ja1Jlc3VsdChXZWJTdHJpbmc6OmZyb21VVEY4
KGFyZ3VtZW50c1swXS50b1N0cmluZygpKSwgYXJndW1lbnRzWzFdLnRvRG91YmxlKCkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVycm9yKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCkBAIC0xODQyLDEy
ICsxOTE1LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJy
b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsCiAgICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgIT0gMiB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5p
c1N0cmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RlbGVnYXRlLT5zZXRNb2NrU3Bl
ZWNoUmVjb2duaXRpb25FcnJvcihhcmd1bWVudHNbMF0udG9TdHJpbmcoKSwgYXJndW1lbnRzWzFd
LnRvU3RyaW5nKCkpOworICAgIG1fcHJveHktPnNwZWVjaFJlY29nbml6ZXJNb2NrKCktPnNldEVy
cm9yKFdlYlN0cmluZzo6ZnJvbVVURjgoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpLCBXZWJTdHJp
bmc6OmZyb21VVEY4KGFyZ3VtZW50c1sxXS50b1N0cmluZygpKSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6d2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRlZChjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0LT5zZXQobV9kZWxlZ2F0ZS0+
d2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRlZCgpKTsKKyAgICByZXN1bHQtPnNldChtX3By
b3h5LT5zcGVlY2hSZWNvZ25pemVyTW9jaygpLT53YXNBYm9ydGVkKCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OmRpc3BsYXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKQEAgLTIwMjUsMzEgKzIwOTgsMzEgQEAgdm9pZCBUZXN0UnVubmVyOjpu
b3RJbXBsZW1lbnRlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlkQWNxdWlyZVBvaW50ZXJMb2NrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICBtX2RlbGVnYXRlLT5kaWRBY3F1
aXJlUG9pbnRlckxvY2soKTsKKyAgICBkaWRBY3F1aXJlUG9pbnRlckxvY2tJbnRlcm5hbCgpOwog
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpZE5vdEFjcXVp
cmVQb2ludGVyTG9jayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
CiB7Ci0gICAgbV9kZWxlZ2F0ZS0+ZGlkTm90QWNxdWlyZVBvaW50ZXJMb2NrKCk7CisgICAgZGlk
Tm90QWNxdWlyZVBvaW50ZXJMb2NrSW50ZXJuYWwoKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaWRMb3NlUG9pbnRlckxvY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewotICAgIG1fZGVsZWdhdGUtPmRpZExvc2VQ
b2ludGVyTG9jaygpOworICAgIGRpZExvc2VQb2ludGVyTG9ja0ludGVybmFsKCk7CiAgICAgcmVz
dWx0LT5zZXROdWxsKCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UG9pbnRlckxvY2tXaWxs
UmVzcG9uZEFzeW5jaHJvbm91c2x5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKIHsKLSAgICBtX2RlbGVnYXRlLT5zZXRQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5
bmNocm9ub3VzbHkoKTsKKyAgICBtX3BvaW50ZXJMb2NrUGxhbm5lZFJlc3VsdCA9IFBvaW50ZXJM
b2NrV2lsbFJlc3BvbmRBc3luYzsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNseShjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0
UG9pbnRlckxvY2tXaWxsRmFpbFN5bmNocm9ub3VzbHkoKTsKKyAgICBtX3BvaW50ZXJMb2NrUGxh
bm5lZFJlc3VsdCA9IFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jOwogICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9UZXN0UnVubmVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmgKaW5kZXggNDYyNzk0YWY3ZDMyOWZiODcwNTRmOGFk
YTRhMTczNzA5YTc2YjQ0ZS4uZmI2NWYxN2NmMDc4NzFhMDUzOWM4NTdmYWU3NDc4MTI2N2RiMGQz
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL1Rlc3RSdW5uZXIuaApAQCAtNTUsMTMgKzU1LDE0IEBAIGNsYXNzIFdlYlZpZXc7
CiBuYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7CiAKIGNsYXNzIE5vdGlmaWNhdGlvblByZXNlbnRl
cjsKK2NsYXNzIFRlc3RJbnRlcmZhY2VzOwogY2xhc3MgV2ViUGVybWlzc2lvbnM7CiBjbGFzcyBX
ZWJUZXN0RGVsZWdhdGU7CiBjbGFzcyBXZWJUZXN0UHJveHlCYXNlOwogCiBjbGFzcyBUZXN0UnVu
bmVyIDogcHVibGljIFdlYlRlc3RSdW5uZXIsIHB1YmxpYyBDcHBCb3VuZENsYXNzIHsKIHB1Ymxp
YzoKLSAgICBUZXN0UnVubmVyKCk7CisgICAgZXhwbGljaXQgVGVzdFJ1bm5lcihUZXN0SW50ZXJm
YWNlcyopOwogICAgIHZpcnR1YWwgflRlc3RSdW5uZXIoKTsKIAogICAgIHZvaWQgc2V0RGVsZWdh
dGUoV2ViVGVzdERlbGVnYXRlKik7CkBAIC0xMjIsNiArMTIzLDkgQEAgcHVibGljOgogI2lmIEVO
QUJMRV9OT1RJRklDQVRJT05TCiAgICAgV2ViS2l0OjpXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIq
IG5vdGlmaWNhdGlvblByZXNlbnRlcigpIGNvbnN0OwogI2VuZGlmCisgICAgYm9vbCByZXF1ZXN0
UG9pbnRlckxvY2soKTsKKyAgICB2b2lkIHJlcXVlc3RQb2ludGVyVW5sb2NrKCk7CisgICAgYm9v
bCBpc1BvaW50ZXJMb2NrZWQoKTsKIAogICAgIC8vIEEgc2luZ2xlIGl0ZW0gaW4gdGhlIHdvcmsg
cXVldWUuCiAgICAgY2xhc3MgV29ya0l0ZW0gewpAQCAtNTAyLDYgKzUwNiwyMyBAQCBwcml2YXRl
OgogICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIHsgbV9vYmplY3QtPmNvbXBsZXRl
Tm90aWZ5RG9uZSh0cnVlKTsgfQogICAgIH07CiAKKyAgICBjbGFzcyBIb3N0TWV0aG9kVGFzayA6
IHB1YmxpYyBXZWJNZXRob2RUYXNrPFRlc3RSdW5uZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHR5cGVkZWYgdm9pZCAoVGVzdFJ1bm5lcjo6KkNhbGxiYWNrTWV0aG9kVHlwZSkoKTsKKyAgICAg
ICAgSG9zdE1ldGhvZFRhc2soVGVzdFJ1bm5lciogb2JqZWN0LCBDYWxsYmFja01ldGhvZFR5cGUg
Y2FsbGJhY2spCisgICAgICAgICAgICA6IFdlYk1ldGhvZFRhc2s8VGVzdFJ1bm5lcj4ob2JqZWN0
KQorICAgICAgICAgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgICAgICB7IH0KKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIHsgKG1fb2JqZWN0LT4qbV9jYWxsYmFjayko
KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2FsbGJhY2tNZXRob2RUeXBlIG1fY2FsbGJh
Y2s7CisgICAgfTsKKyAgICB2b2lkIGRpZEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKCk7Cisg
ICAgdm9pZCBkaWROb3RBY3F1aXJlUG9pbnRlckxvY2tJbnRlcm5hbCgpOworICAgIHZvaWQgZGlk
TG9zZVBvaW50ZXJMb2NrSW50ZXJuYWwoKTsKKwogICAgIGJvb2wgZWxlbWVudERvZXNBdXRvQ29t
cGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJik7CiAgICAgYm9v
bCBjcHBWYXJpYW50VG9Cb29sKGNvbnN0IENwcFZhcmlhbnQmKTsKICAgICBpbnQzMl90IGNwcFZh
cmlhbnRUb0ludDMyKGNvbnN0IENwcFZhcmlhbnQmKTsKQEAgLTY2MCw2ICs2ODEsNyBAQCBwcml2
YXRlOgogICAgIC8vIFVzZWQgZm9yIHRlc3QgdGltZW91dHMuCiAgICAgV2ViVGFza0xpc3QgbV90
YXNrTGlzdDsKIAorICAgIFRlc3RJbnRlcmZhY2VzKiBtX3Rlc3RJbnRlcmZhY2VzOwogICAgIFdl
YlRlc3REZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKICAgICBXZWJLaXQ6OldlYlZpZXcqIG1fd2ViVmll
dzsKICAgICBXZWJUZXN0UHJveHlCYXNlKiBtX3Byb3h5OwpAQCAtNjczLDYgKzY5NSwxMyBAQCBw
cml2YXRlOgogI2lmIEVOQUJMRV9OT1RJRklDQVRJT05TCiAgICAgc3RkOjphdXRvX3B0cjxOb3Rp
ZmljYXRpb25QcmVzZW50ZXI+IG1fbm90aWZpY2F0aW9uUHJlc2VudGVyOwogI2VuZGlmCisKKyAg
ICBib29sIG1fcG9pbnRlckxvY2tlZDsKKyAgICBlbnVtIHsKKyAgICAgICAgUG9pbnRlckxvY2tX
aWxsU3VjY2VlZCwKKyAgICAgICAgUG9pbnRlckxvY2tXaWxsUmVzcG9uZEFzeW5jLAorICAgICAg
ICBQb2ludGVyTG9ja1dpbGxGYWlsU3luYywKKyAgICB9IG1fcG9pbnRlckxvY2tQbGFubmVkUmVz
dWx0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvV2ViVGVzdFByb3h5LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RQcm94eS5jcHAKaW5kZXggNzBkMzkyM2JjZGEx
OWNiMmYyZmNlMTcwNTE1ODBhYzU3YjhkNjJmYy4uZDQ1YjMzNzAzOGE1NzcyODliNjFlNzQ2NGFl
NzZkY2MwMWIyYTI2NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvV2ViVGVzdFByb3h5LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0UHJveHkuY3BwCkBAIC0zMyw2ICszMyw4
IEBACiAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiRXZlbnRTZW5kZXIuaCIKKyNpbmNsdWRlICJNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaCIKICNpbmNsdWRlICJT
cGVsbENoZWNrQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIlRl
c3RJbnRlcmZhY2VzLmgiCkBAIC00Myw5ICs0NSwxMSBAQAogI2luY2x1ZGUgIldlYkNhY2hlZFVS
TFJlcXVlc3QuaCIKICNpbmNsdWRlICJXZWJDb25zb2xlTWVzc2FnZS5oIgogI2luY2x1ZGUgIldl
YkRhdGFTb3VyY2UuaCIKKyNpbmNsdWRlICJXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2su
aCIKICNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgogI2luY2x1ZGUgIldlYkVsZW1lbnQuaCIKICNp
bmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uQ2xpZW50TW9jay5o
IgogI2luY2x1ZGUgIldlYkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiV2ViTm9kZS5oIgogI2lu
Y2x1ZGUgIldlYlBsdWdpblBhcmFtcy5oIgpAQCAtMzk2LDEwICs0MDAsOSBAQCB2b2lkIGR1bXBC
YWNrRm9yd2FyZExpc3QoY29uc3QgV2ViVmVjdG9yPFdlYkhpc3RvcnlJdGVtPiYgaGlzdG9yeSwg
c2l6ZV90IGN1cnJlbgogICAgIHJlc3VsdC5hcHBlbmQoIj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKIH0KIAotc3RyaW5nIGR1bXBBbGxCYWNrRm9y
d2FyZExpc3RzKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCitzdHJpbmcgZHVtcEFsbEJhY2tG
b3J3YXJkTGlzdHMoV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSwgdW5zaWduZWQgd2luZG93Q291
bnQpCiB7CiAgICAgc3RyaW5nIHJlc3VsdDsKLSAgICB1bnNpZ25lZCB3aW5kb3dDb3VudCA9IGRl
bGVnYXRlLT53aW5kb3dDb3VudCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3aW5k
b3dDb3VudDsgKytpKSB7CiAgICAgICAgIHNpemVfdCBjdXJyZW50RW50cnlJbmRleCA9IDA7CiAg
ICAgICAgIFdlYlZlY3RvcjxXZWJIaXN0b3J5SXRlbT4gaGlzdG9yeTsKQEAgLTQyMSwxNyArNDI0
LDI1IEBAIFdlYlRlc3RQcm94eUJhc2U6OldlYlRlc3RQcm94eUJhc2UoKQogCiBXZWJUZXN0UHJv
eHlCYXNlOjp+V2ViVGVzdFByb3h5QmFzZSgpCiB7CisgICAgbV90ZXN0SW50ZXJmYWNlcy0+d2lu
ZG93Q2xvc2VkKHRoaXMpOwogfQogCiB2b2lkIFdlYlRlc3RQcm94eUJhc2U6OnNldEludGVyZmFj
ZXMoV2ViVGVzdEludGVyZmFjZXMqIGludGVyZmFjZXMpCiB7CiAgICAgbV90ZXN0SW50ZXJmYWNl
cyA9IGludGVyZmFjZXMtPnRlc3RJbnRlcmZhY2VzKCk7CisgICAgbV90ZXN0SW50ZXJmYWNlcy0+
d2luZG93T3BlbmVkKHRoaXMpOwogfQogCiB2b2lkIFdlYlRlc3RQcm94eUJhc2U6OnNldERlbGVn
YXRlKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCiB7CiAgICAgbV9kZWxlZ2F0ZSA9IGRlbGVn
YXRlOwogICAgIG1fc3BlbGxjaGVjay0+c2V0RGVsZWdhdGUoZGVsZWdhdGUpOworI2lmIEVOQUJM
RV9JTlBVVF9TUEVFQ0gKKyAgICBpZiAobV9zcGVlY2hJbnB1dENvbnRyb2xsZXIuZ2V0KCkpCisg
ICAgICAgIG1fc3BlZWNoSW5wdXRDb250cm9sbGVyLT5zZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7Cisj
ZW5kaWYKKyAgICBpZiAobV9zcGVlY2hSZWNvZ25pemVyLmdldCgpKQorICAgICAgICBtX3NwZWVj
aFJlY29nbml6ZXItPnNldERlbGVnYXRlKGRlbGVnYXRlKTsKIH0KIAogdm9pZCBXZWJUZXN0UHJv
eHlCYXNlOjpyZXNldCgpCkBAIC00NDEsNiArNDUyLDEyIEBAIHZvaWQgV2ViVGVzdFByb3h5QmFz
ZTo6cmVzZXQoKQogICAgIG1faXNQYWludGluZyA9IGZhbHNlOwogICAgIG1fcmVzb3VyY2VJZGVu
dGlmaWVyTWFwLmNsZWFyKCk7CiAgICAgbV9sb2dDb25zb2xlT3V0cHV0ID0gdHJ1ZTsKKyAgICBp
ZiAobV9nZW9sb2NhdGlvbkNsaWVudC5nZXQoKSkKKyAgICAgICAgbV9nZW9sb2NhdGlvbkNsaWVu
dC0+cmVzZXRNb2NrKCk7CisjaWYgRU5BQkxFX0lOUFVUX1NQRUVDSAorICAgIGlmIChtX3NwZWVj
aElucHV0Q29udHJvbGxlci5nZXQoKSkKKyAgICAgICAgbV9zcGVlY2hJbnB1dENvbnRyb2xsZXIt
PmNsZWFyUmVzdWx0cygpOworI2VuZGlmCiB9CiAKIFdlYlNwZWxsQ2hlY2tDbGllbnQqIFdlYlRl
c3RQcm94eUJhc2U6OnNwZWxsQ2hlY2tDbGllbnQoKSBjb25zdApAQCAtNDcxLDcgKzQ4OCw3IEBA
IHN0cmluZyBXZWJUZXN0UHJveHlCYXNlOjpjYXB0dXJlVHJlZShib29sIGRlYnVnUmVuZGVyVHJl
ZSkKICAgICB9CiAKICAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wQmFja0ZvcndhcmRMaXN0KCkpCi0gICAgICAgIGRhdGFVdGY4ICs9IGR1bXBBbGxCYWNr
Rm9yd2FyZExpc3RzKG1fZGVsZWdhdGUpOworICAgICAgICBkYXRhVXRmOCArPSBkdW1wQWxsQmFj
a0ZvcndhcmRMaXN0cyhtX2RlbGVnYXRlLCBtX3Rlc3RJbnRlcmZhY2VzLT53aW5kb3dMaXN0KCku
c2l6ZSgpKTsKIAogICAgIHJldHVybiBkYXRhVXRmODsKIH0KQEAgLTYzNCw2ICs2NTEsMzcgQEAg
dm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaXNjYXJkQmFja2luZ1N0b3JlKCkKICAgICBtX2NhbnZh
cy5yZXNldCgpOwogfQogCitXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2sqIFdlYlRlc3RQcm94eUJh
c2U6Omdlb2xvY2F0aW9uQ2xpZW50TW9jaygpCit7CisgICAgaWYgKCFtX2dlb2xvY2F0aW9uQ2xp
ZW50LmdldCgpKQorICAgICAgICBtX2dlb2xvY2F0aW9uQ2xpZW50LnJlc2V0KFdlYkdlb2xvY2F0
aW9uQ2xpZW50TW9jazo6Y3JlYXRlKCkpOworICAgIHJldHVybiBtX2dlb2xvY2F0aW9uQ2xpZW50
LmdldCgpOworfQorCitXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2sqIFdlYlRlc3RQcm94
eUJhc2U6OmRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jaygpCit7CisgICAgaWYgKCFtX2Rldmlj
ZU9yaWVudGF0aW9uQ2xpZW50LmdldCgpKQorICAgICAgICBtX2RldmljZU9yaWVudGF0aW9uQ2xp
ZW50LnJlc2V0KFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jazo6Y3JlYXRlKCkpOworICAg
IHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50LmdldCgpOworfQorCisjaWYgRU5BQkxF
X0lOUFVUX1NQRUVDSAorTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlciogV2ViVGVzdFByb3h5
QmFzZTo6c3BlZWNoSW5wdXRDb250cm9sbGVyTW9jaygpCit7CisgICAgV0VCS0lUX0FTU0VSVCht
X3NwZWVjaElucHV0Q29udHJvbGxlci5nZXQoKSk7CisgICAgcmV0dXJuIG1fc3BlZWNoSW5wdXRD
b250cm9sbGVyLmdldCgpOworfQorI2VuZGlmCisKK01vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBX
ZWJUZXN0UHJveHlCYXNlOjpzcGVlY2hSZWNvZ25pemVyTW9jaygpCit7CisgICAgaWYgKCFtX3Nw
ZWVjaFJlY29nbml6ZXIuZ2V0KCkpIHsKKyAgICAgICAgbV9zcGVlY2hSZWNvZ25pemVyLnJlc2V0
KG5ldyBNb2NrV2ViU3BlZWNoUmVjb2duaXplcigpKTsKKyAgICAgICAgbV9zcGVlY2hSZWNvZ25p
emVyLT5zZXREZWxlZ2F0ZShtX2RlbGVnYXRlKTsKKyAgICB9CisgICAgcmV0dXJuIG1fc3BlZWNo
UmVjb2duaXplci5nZXQoKTsKK30KKwogdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRJbnZhbGlk
YXRlUmVjdChjb25zdCBXZWJSZWN0JiByZWN0KQogewogICAgIC8vIG1fcGFpbnRSZWN0ID0gbV9w
YWludFJlY3QgVSByZWN0CkBAIC05NTQsNiArMTAwMiw1MCBAQCBXZWJOb3RpZmljYXRpb25QcmVz
ZW50ZXIqIFdlYlRlc3RQcm94eUJhc2U6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpCiAjZW5kaWYK
IH0KIAorV2ViR2VvbG9jYXRpb25DbGllbnQqIFdlYlRlc3RQcm94eUJhc2U6Omdlb2xvY2F0aW9u
Q2xpZW50KCkKK3sKKyAgICByZXR1cm4gZ2VvbG9jYXRpb25DbGllbnRNb2NrKCk7Cit9CisKK1dl
YlNwZWVjaElucHV0Q29udHJvbGxlciogV2ViVGVzdFByb3h5QmFzZTo6c3BlZWNoSW5wdXRDb250
cm9sbGVyKFdlYlNwZWVjaElucHV0TGlzdGVuZXIqIGxpc3RlbmVyKQoreworI2lmIEVOQUJMRV9J
TlBVVF9TUEVFQ0gKKyAgICBpZiAoIW1fc3BlZWNoSW5wdXRDb250cm9sbGVyLmdldCgpKSB7Cisg
ICAgICAgIG1fc3BlZWNoSW5wdXRDb250cm9sbGVyLnJlc2V0KG5ldyBNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyKGxpc3RlbmVyKSk7CisgICAgICAgIG1fc3BlZWNoSW5wdXRDb250cm9sbGVy
LT5zZXREZWxlZ2F0ZShtX2RlbGVnYXRlKTsKKyAgICB9CisgICAgcmV0dXJuIG1fc3BlZWNoSW5w
dXRDb250cm9sbGVyLmdldCgpOworI2Vsc2UKKyAgICBXRUJLSVRfQVNTRVJUKGxpc3RlbmVyKTsK
KyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCitXZWJTcGVlY2hSZWNvZ25pemVyKiBXZWJUZXN0
UHJveHlCYXNlOjpzcGVlY2hSZWNvZ25pemVyKCkKK3sKKyAgICByZXR1cm4gc3BlZWNoUmVjb2du
aXplck1vY2soKTsKK30KKworV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQqIFdlYlRlc3RQcm94
eUJhc2U6OmRldmljZU9yaWVudGF0aW9uQ2xpZW50KCkKK3sKKyAgICByZXR1cm4gZGV2aWNlT3Jp
ZW50YXRpb25DbGllbnRNb2NrKCk7Cit9CisKK2Jvb2wgV2ViVGVzdFByb3h5QmFzZTo6cmVxdWVz
dFBvaW50ZXJMb2NrKCkKK3sKKyAgICByZXR1cm4gbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5l
cigpLT5yZXF1ZXN0UG9pbnRlckxvY2soKTsKK30KKwordm9pZCBXZWJUZXN0UHJveHlCYXNlOjpy
ZXF1ZXN0UG9pbnRlclVubG9jaygpCit7CisgICAgbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5l
cigpLT5yZXF1ZXN0UG9pbnRlclVubG9jaygpOworfQorCitib29sIFdlYlRlc3RQcm94eUJhc2U6
OmlzUG9pbnRlckxvY2tlZCgpCit7CisgICAgcmV0dXJuIG1fdGVzdEludGVyZmFjZXMtPnRlc3RS
dW5uZXIoKS0+aXNQb2ludGVyTG9ja2VkKCk7Cit9CisKIHZvaWQgV2ViVGVzdFByb3h5QmFzZTo6
d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYlVSTCYs
IGNvbnN0IFdlYlVSTCYgdG8sIGRvdWJsZSwgZG91YmxlKQogewogICAgIGlmIChtX3Rlc3RJbnRl
cmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IGM0
Yzk2MmRiZjljNjNlODRhOGM0M2Q3NTE4MWU5NWNkZDhjMjcxYWMuLmI0Mzk0ODM2NTUwMTRmMDEy
NWE1MzlhYTczZGQ5ZTExNTJjMWQ3OGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9XZWJWaWV3SG9zdC5jcHAKQEAgLTMyLDggKzMyLDYgQEAKICNpbmNsdWRlICJXZWJWaWV3
SG9zdC5oIgogCiAjaW5jbHVkZSAiRFJURGV2VG9vbHNBZ2VudC5oIgotI2luY2x1ZGUgIk1vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJNb2NrV2ViU3BlZWNoUmVjb2du
aXplci5oIgogI2luY2x1ZGUgIlRhc2suaCIKICNpbmNsdWRlICJUZXN0TmF2aWdhdGlvbkNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJUZXN0U2hlbGwuaCIKQEAgLTQyLDExICs0MCw5IEBACiAjaW5j
bHVkZSAiV2ViQ29udGV4dE1lbnVEYXRhLmgiCiAjaW5jbHVkZSAiV2ViRE9NTWVzc2FnZUV2ZW50
LmgiCiAjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZS5oIgotI2luY2x1ZGUgIldlYkRldmljZU9yaWVu
dGF0aW9uQ2xpZW50TW9jay5oIgogI2luY2x1ZGUgIldlYkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
V2ViRWxlbWVudC5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViR2VvbG9j
YXRpb25DbGllbnRNb2NrLmgiCiAjaW5jbHVkZSAiV2ViSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRl
ICJXZWJLaXQuaCIKICNpbmNsdWRlICJXZWJOb2RlLmgiCkBAIC0yNjksNDggKzI2NSw2IEBAIGlu
dCBXZWJWaWV3SG9zdDo6aGlzdG9yeUZvcndhcmRMaXN0Q291bnQoKQogICAgIHJldHVybiBuYXZp
Z2F0aW9uQ29udHJvbGxlcigpLT5lbnRyeUNvdW50KCkgLSBjdXJyZW50SW5kZXggLSAxOwogfQog
Ci1XZWJLaXQ6OldlYkdlb2xvY2F0aW9uQ2xpZW50KiBXZWJWaWV3SG9zdDo6Z2VvbG9jYXRpb25D
bGllbnQoKQotewotICAgIHJldHVybiBnZW9sb2NhdGlvbkNsaWVudE1vY2soKTsKLX0KLQotV2Vi
S2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2sqIFdlYlZpZXdIb3N0OjpnZW9sb2NhdGlvbkNs
aWVudE1vY2soKQotewotICAgIGlmICghbV9nZW9sb2NhdGlvbkNsaWVudE1vY2spCi0gICAgICAg
IG1fZ2VvbG9jYXRpb25DbGllbnRNb2NrID0gYWRvcHRQdHIoV2ViR2VvbG9jYXRpb25DbGllbnRN
b2NrOjpjcmVhdGUoKSk7Ci0gICAgcmV0dXJuIG1fZ2VvbG9jYXRpb25DbGllbnRNb2NrLmdldCgp
OwotfQotCi0jaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLVdlYlNwZWVjaElucHV0Q29udHJvbGxl
ciogV2ViVmlld0hvc3Q6OnNwZWVjaElucHV0Q29udHJvbGxlcihXZWJLaXQ6OldlYlNwZWVjaElu
cHV0TGlzdGVuZXIqIGxpc3RlbmVyKQotewotICAgIGlmICghbV9zcGVlY2hJbnB1dENvbnRyb2xs
ZXJNb2NrKQotICAgICAgICBtX3NwZWVjaElucHV0Q29udHJvbGxlck1vY2sgPSBNb2NrV2ViU3Bl
ZWNoSW5wdXRDb250cm9sbGVyOjpjcmVhdGUobGlzdGVuZXIpOwotICAgIHJldHVybiBtX3NwZWVj
aElucHV0Q29udHJvbGxlck1vY2suZ2V0KCk7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTQ1JJ
UFRFRF9TUEVFQ0gpCi1XZWJTcGVlY2hSZWNvZ25pemVyKiBXZWJWaWV3SG9zdDo6c3BlZWNoUmVj
b2duaXplcigpCi17Ci0gICAgaWYgKCFtX21vY2tTcGVlY2hSZWNvZ25pemVyKQotICAgICAgICBt
X21vY2tTcGVlY2hSZWNvZ25pemVyID0gTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmNyZWF0ZSgp
OwotICAgIHJldHVybiBtX21vY2tTcGVlY2hSZWNvZ25pemVyLmdldCgpOwotfQotI2VuZGlmCi0K
LVdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jayogV2ViVmlld0hvc3Q6OmRldmljZU9yaWVu
dGF0aW9uQ2xpZW50TW9jaygpCi17Ci0gICAgaWYgKCFtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50
TW9jay5nZXQoKSkKLSAgICAgICAgbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2sgPSBhZG9w
dFB0cihXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2s6OmNyZWF0ZSgpKTsKLSAgICByZXR1
cm4gbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suZ2V0KCk7Ci19Ci0KLVdlYkRldmljZU9y
aWVudGF0aW9uQ2xpZW50KiBXZWJWaWV3SG9zdDo6ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKQot
ewotICAgIHJldHVybiBkZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2soKTsKLX0KLQogLy8gV2Vi
V2lkZ2V0Q2xpZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgV2ViVmlld0hvc3Q6OmRpZEF1dG9SZXNpemUoY29uc3Qg
V2ViU2l6ZSYgbmV3U2l6ZSkKQEAgLTM2Myw2MyArMzE3LDYgQEAgV2ViU2NyZWVuSW5mbyBXZWJW
aWV3SG9zdDo6c2NyZWVuSW5mbygpCiAgICAgcmV0dXJuIGluZm87CiB9CiAKLSNpZiBFTkFCTEUo
UE9JTlRFUl9MT0NLKQotYm9vbCBXZWJWaWV3SG9zdDo6cmVxdWVzdFBvaW50ZXJMb2NrKCkKLXsK
LSAgICBzd2l0Y2ggKG1fcG9pbnRlckxvY2tQbGFubmVkUmVzdWx0KSB7Ci0gICAgY2FzZSBQb2lu
dGVyTG9ja1dpbGxTdWNjZWVkOgotICAgICAgICBwb3N0RGVsYXllZFRhc2sobmV3IEhvc3RNZXRo
b2RUYXNrKHRoaXMsICZXZWJWaWV3SG9zdDo6ZGlkQWNxdWlyZVBvaW50ZXJMb2NrKSwgMCk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgUG9pbnRlckxvY2tXaWxsUmVzcG9uZEFzeW5j
OgotICAgICAgICBBU1NFUlQoIW1fcG9pbnRlckxvY2tlZCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGNhc2UgUG9pbnRlckxvY2tXaWxsRmFpbFN5bmM6Ci0gICAgICAgIEFTU0VSVCghbV9w
b2ludGVyTG9ja2VkKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi12b2lkIFdlYlZpZXdIb3N0OjpyZXF1ZXN0UG9pbnRlclVubG9jaygpCi17Ci0gICAgcG9z
dERlbGF5ZWRUYXNrKG5ldyBIb3N0TWV0aG9kVGFzayh0aGlzLCAmV2ViVmlld0hvc3Q6OmRpZExv
c2VQb2ludGVyTG9jayksIDApOwotfQotCi1ib29sIFdlYlZpZXdIb3N0Ojppc1BvaW50ZXJMb2Nr
ZWQoKQotewotICAgIHJldHVybiBtX3BvaW50ZXJMb2NrZWQ7Ci19Ci0KLXZvaWQgV2ViVmlld0hv
c3Q6OmRpZEFjcXVpcmVQb2ludGVyTG9jaygpCi17Ci0gICAgbV9wb2ludGVyTG9ja2VkID0gdHJ1
ZTsKLSAgICB3ZWJXaWRnZXQoKS0+ZGlkQWNxdWlyZVBvaW50ZXJMb2NrKCk7Ci0KLSAgICAvLyBS
ZXNldCBwbGFubmVkIHJlc3VsdCB0byBkZWZhdWx0LgotICAgIG1fcG9pbnRlckxvY2tQbGFubmVk
UmVzdWx0ID0gUG9pbnRlckxvY2tXaWxsU3VjY2VlZDsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6
ZGlkTm90QWNxdWlyZVBvaW50ZXJMb2NrKCkKLXsKLSAgICBBU1NFUlQoIW1fcG9pbnRlckxvY2tl
ZCk7Ci0gICAgbV9wb2ludGVyTG9ja2VkID0gZmFsc2U7Ci0gICAgd2ViV2lkZ2V0KCktPmRpZE5v
dEFjcXVpcmVQb2ludGVyTG9jaygpOwotCi0gICAgLy8gUmVzZXQgcGxhbm5lZCByZXN1bHQgdG8g
ZGVmYXVsdC4KLSAgICBtX3BvaW50ZXJMb2NrUGxhbm5lZFJlc3VsdCA9IFBvaW50ZXJMb2NrV2ls
bFN1Y2NlZWQ7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmRpZExvc2VQb2ludGVyTG9jaygpCi17
Ci0gICAgYm9vbCB3YXNMb2NrZWQgPSBtX3BvaW50ZXJMb2NrZWQ7Ci0gICAgbV9wb2ludGVyTG9j
a2VkID0gZmFsc2U7Ci0gICAgaWYgKHdhc0xvY2tlZCkKLSAgICAgICAgd2ViV2lkZ2V0KCktPmRp
ZExvc2VQb2ludGVyTG9jaygpOwotfQotI2VuZGlmCi0KIHZvaWQgV2ViVmlld0hvc3Q6OnNob3co
V2ViTmF2aWdhdGlvblBvbGljeSkKIHsKICAgICBtX2hhc1dpbmRvdyA9IHRydWU7CkBAIC03NjMs
NzEgKzY2MCw2IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnNldExvY2FsZShjb25zdCBzdGQ6OnN0cmlu
ZyYgbG9jYWxlKQogICAgIHNldGxvY2FsZShMQ19BTEwsIGxvY2FsZS5jX3N0cigpKTsKIH0KIAot
dm9pZCBXZWJWaWV3SG9zdDo6c2V0RGV2aWNlT3JpZW50YXRpb24oV2ViS2l0OjpXZWJEZXZpY2VP
cmllbnRhdGlvbiYgb3JpZW50YXRpb24pCi17Ci0gICAgZGV2aWNlT3JpZW50YXRpb25DbGllbnRN
b2NrKCktPnNldE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKTsKLX0KLQotaW50IFdlYlZpZXdIb3N0
OjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCi17Ci0gICAg
VmVjdG9yPFdlYlZpZXdIb3N0Kj4gd2luZG93TGlzdCA9IG1fc2hlbGwtPndpbmRvd0xpc3QoKTsK
LSAgICBpbnQgbnVtYmVyT2ZSZXF1ZXN0cyA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB3aW5kb3dMaXN0LnNpemUoKTsgaSsrKQotICAgICAgICBudW1iZXJPZlJlcXVlc3RzICs9IHdp
bmRvd0xpc3RbaV0tPmdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5udW1iZXJPZlBlbmRpbmdQZXJt
aXNzaW9uUmVxdWVzdHMoKTsKLSAgICByZXR1cm4gbnVtYmVyT2ZSZXF1ZXN0czsKLX0KLQotdm9p
ZCBXZWJWaWV3SG9zdDo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3dlZCkKLXsK
LSAgICBWZWN0b3I8V2ViVmlld0hvc3QqPiB3aW5kb3dMaXN0ID0gbV9zaGVsbC0+d2luZG93TGlz
dCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXplKCk7IGkrKykK
LSAgICAgICAgd2luZG93TGlzdFtpXS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCktPnNldFBlcm1p
c3Npb24oYWxsb3dlZCk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3Vy
YWN5KQotewotICAgIFZlY3RvcjxXZWJWaWV3SG9zdCo+IHdpbmRvd0xpc3QgPSBtX3NoZWxsLT53
aW5kb3dMaXN0KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3aW5kb3dMaXN0LnNpemUo
KTsgaSsrKQotICAgICAgICB3aW5kb3dMaXN0W2ldLT5nZW9sb2NhdGlvbkNsaWVudE1vY2soKS0+
c2V0UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpOwotfQotCi12b2lkIFdl
YlZpZXdIb3N0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoY29u
c3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgVmVjdG9yPFdlYlZpZXdIb3N0Kj4gd2lu
ZG93TGlzdCA9IG1fc2hlbGwtPndpbmRvd0xpc3QoKTsKLSAgICAvLyBGSVhNRTogQmVuamFtaW4K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdpbmRvd0xpc3Quc2l6ZSgpOyBpKyspCi0gICAg
ICAgIHdpbmRvd0xpc3RbaV0tPmdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5zZXRQb3NpdGlvblVu
YXZhaWxhYmxlRXJyb3IoV2ViU3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKSk7Ci19Ci0KLSNpZiBF
TkFCTEUoSU5QVVRfU1BFRUNIKQotdm9pZCBXZWJWaWV3SG9zdDo6YWRkTW9ja1NwZWVjaElucHV0
UmVzdWx0KGNvbnN0IHN0ZDo6c3RyaW5nJiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBjb25z
dCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpCi17Ci0gICAgbV9zcGVlY2hJbnB1dENvbnRyb2xsZXJN
b2NrLT5hZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoV2ViU3RyaW5nOjpmcm9tVVRGOChyZXN1bHQp
LCBjb25maWRlbmNlLCBXZWJTdHJpbmc6OmZyb21VVEY4KGxhbmd1YWdlKSk7Ci19Ci0KLXZvaWQg
V2ViVmlld0hvc3Q6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wgZHVtcFJlY3QpCi17
Ci0gICAgbV9zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrLT5zZXREdW1wUmVjdChkdW1wUmVjdCk7
Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCi12b2lkIFdlYlZpZXdI
b3N0OjphZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1bHQoY29uc3Qgc3RkOjpzdHJpbmcmIHRy
YW5zY3JpcHQsIGRvdWJsZSBjb25maWRlbmNlKQotewotICAgIG1fbW9ja1NwZWVjaFJlY29nbml6
ZXItPmFkZE1vY2tSZXN1bHQoV2ViU3RyaW5nOjpmcm9tVVRGOCh0cmFuc2NyaXB0KSwgY29uZmlk
ZW5jZSk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVy
cm9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBlcnJvciwgY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2Up
Ci17Ci0gICAgbV9tb2NrU3BlZWNoUmVjb2duaXplci0+c2V0RXJyb3IoV2ViU3RyaW5nOjpmcm9t
VVRGOChlcnJvciksIFdlYlN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSkpOwotfQotCi1ib29sIFdl
YlZpZXdIb3N0Ojp3YXNNb2NrU3BlZWNoUmVjb2duaXRpb25BYm9ydGVkKCkKLXsKLSAgICByZXR1
cm4gbV9tb2NrU3BlZWNoUmVjb2duaXplci0+d2FzQWJvcnRlZCgpOwotfQotI2VuZGlmCi0KIHZv
aWQgV2ViVmlld0hvc3Q6OnRlc3RGaW5pc2hlZCgpCiB7CiAgICAgbV9zaGVsbC0+dGVzdEZpbmlz
aGVkKHRoaXMpOwpAQCAtODU4LDExICs2OTAsNiBAQCBpbnQgV2ViVmlld0hvc3Q6Om5hdmlnYXRp
b25FbnRyeUNvdW50KCkKICAgICByZXR1cm4gbV9zaGVsbC0+bmF2aWdhdGlvbkVudHJ5Q291bnQo
KTsKIH0KIAotaW50IFdlYlZpZXdIb3N0Ojp3aW5kb3dDb3VudCgpCi17Ci0gICAgcmV0dXJuIG1f
c2hlbGwtPndpbmRvd0NvdW50KCk7Ci19Ci0KIHZvaWQgV2ViVmlld0hvc3Q6OmdvVG9PZmZzZXQo
aW50IG9mZnNldCkKIHsKICAgICBtX3NoZWxsLT5nb1RvT2Zmc2V0KG9mZnNldCk7CkBAIC05NzEs
MTAgKzc5OCw2IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnJlc2V0KCkKICAgICBtX2xhc3RQYWdlSWRV
cGRhdGVkID0gLTE7CiAgICAgbV9oYXNXaW5kb3cgPSBmYWxzZTsKICAgICBtX2luTW9kYWxMb29w
ID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKLSAgICBtX3BvaW50ZXJMb2NrZWQg
PSBmYWxzZTsKLSAgICBtX3BvaW50ZXJMb2NrUGxhbm5lZFJlc3VsdCA9IFBvaW50ZXJMb2NrV2ls
bFN1Y2NlZWQ7Ci0jZW5kaWYKIAogICAgIG1fbmF2aWdhdGlvbkNvbnRyb2xsZXIgPSBhZG9wdFB0
cihuZXcgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyKHRoaXMpKTsKIApAQCAtOTgyLDE0ICs4MDUs
NiBAQCB2b2lkIFdlYlZpZXdIb3N0OjpyZXNldCgpCiAgICAgbV9lZGl0Q29tbWFuZE5hbWUuY2xl
YXIoKTsKICAgICBtX2VkaXRDb21tYW5kVmFsdWUuY2xlYXIoKTsKIAotICAgIGlmIChtX2dlb2xv
Y2F0aW9uQ2xpZW50TW9jay5nZXQoKSkKLSAgICAgICAgbV9nZW9sb2NhdGlvbkNsaWVudE1vY2st
PnJlc2V0TW9jaygpOwotCi0jaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLSAgICBpZiAobV9zcGVl
Y2hJbnB1dENvbnRyb2xsZXJNb2NrLmdldCgpKQotICAgICAgICBtX3NwZWVjaElucHV0Q29udHJv
bGxlck1vY2stPmNsZWFyUmVzdWx0cygpOwotI2VuZGlmCi0KICAgICBtX2N1cnJlbnRDdXJzb3Ig
PSBXZWJDdXJzb3JJbmZvKCk7CiAgICAgbV93aW5kb3dSZWN0ID0gV2ViUmVjdCgpOwogICAgIC8v
IG1fcHJveHkgaXMgbm90IHNldCB3aGVuIHJlc2V0KCkgaXMgaW52b2tlZCBmcm9tIHRoZSBjb25z
dHJ1Y3Rvci4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZp
ZXdIb3N0LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCmlu
ZGV4IDRmOWM3YzkyMjQwNWY1MDQ2ZDE5MWViZGIwYmMwMTI1NmQxZDM2OWQuLmFiZjZkNjNlNDZl
ODNlMTEyYWRjYjkyMjljNGJiMTUzNThmN2IxMjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViVmlld0hvc3QuaApAQCAtNDQsMjIgKzQ0LDEzIEBACiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1jbGFzcyBNb2Nr
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOwotY2xhc3MgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI7
CiBjbGFzcyBTa0NhbnZhczsKIGNsYXNzIFRlc3RTaGVsbDsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiBjbGFzcyBXZWJGcmFtZTsKLWNsYXNzIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50OwotY2xh
c3MgV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrOwotY2xhc3MgV2ViR2VvbG9jYXRpb25D
bGllbnQ7Ci1jbGFzcyBXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2s7Ci1jbGFzcyBXZWJHZW9sb2Nh
dGlvblNlcnZpY2VNb2NrOwogY2xhc3MgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogY2xhc3Mg
V2ViU2hhcmVkV29ya2VyQ2xpZW50OwotY2xhc3MgV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOwot
Y2xhc3MgV2ViU3BlZWNoSW5wdXRMaXN0ZW5lcjsKIGNsYXNzIFdlYlVSTDsKIHN0cnVjdCBXZWJS
ZWN0Owogc3RydWN0IFdlYlVSTEVycm9yOwpAQCAtOTIsMTQgKzgzLDYgQEAgY2xhc3MgV2ViVmll
d0hvc3QgOiBwdWJsaWMgV2ViS2l0OjpXZWJWaWV3Q2xpZW50LCBwdWJsaWMgV2ViS2l0OjpXZWJG
cmFtZUNsaWVudCwKIAogICAgIHZvaWQgY2xvc2VXaWRnZXQoKTsKIAotI2lmIEVOQUJMRShJTlBV
VF9TUEVFQ0gpCi0gICAgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlciogc3BlZWNoSW5wdXRD
b250cm9sbGVyTW9jaygpIHsgcmV0dXJuIG1fc3BlZWNoSW5wdXRDb250cm9sbGVyTW9jay5nZXQo
KTsgfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQotICAgIE1vY2tXZWJT
cGVlY2hSZWNvZ25pemVyKiBtb2NrU3BlZWNoUmVjb2duaXplcigpIHsgcmV0dXJuIG1fbW9ja1Nw
ZWVjaFJlY29nbml6ZXIuZ2V0KCk7IH0KLSNlbmRpZgotCiAgICAgLy8gV2ViVGVzdERlbGVnYXRl
LgogICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29tbWFuZChjb25zdCBzdGQ6OnN0cmluZyYgbmFt
ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJFZGl0Q29tbWFuZCgpIE9WRVJSSURFOwpAQCAtMTI2LDM0ICsxMDksMTIgQEAgY2xhc3Mg
V2ViVmlld0hvc3QgOiBwdWJsaWMgV2ViS2l0OjpXZWJWaWV3Q2xpZW50LCBwdWJsaWMgV2ViS2l0
OjpXZWJGcmFtZUNsaWVudCwKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZXB0QWxsQ29va2llcyhi
b29sKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIHBhdGhUb0xvY2FsUmVzb3Vy
Y2UoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNl
dExvY2FsZShjb25zdCBzdGQ6OnN0cmluZyYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXREZXZpY2VPcmllbnRhdGlvbihXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0aW9uJikgT1ZFUlJJ
REU7Ci0jaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQWNxdWly
ZVBvaW50ZXJMb2NrKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE5vdEFjcXVpcmVQ
b2ludGVyTG9jaygpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkaWRMb3NlUG9pbnRlckxv
Y2soKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UG9pbnRlckxvY2tXaWxsUmVzcG9u
ZEFzeW5jaHJvbm91c2x5KCkgT1ZFUlJJREUgeyBtX3BvaW50ZXJMb2NrUGxhbm5lZFJlc3VsdCA9
IFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luYzsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQb2lu
dGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNseSgpIE9WRVJSSURFIHsgbV9wb2ludGVyTG9ja1Bs
YW5uZWRSZXN1bHQgPSBQb2ludGVyTG9ja1dpbGxGYWlsU3luYzsgfQotI2VuZGlmCi0gICAgdmly
dHVhbCBpbnQgbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihk
b3VibGUsIGRvdWJsZSwgZG91YmxlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TW9j
a0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKGNvbnN0IHN0ZDo6c3RyaW5nJikg
T1ZFUlJJREU7Ci0jaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLSAgICB2aXJ0dWFsIHZvaWQgYWRk
TW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IHN0ZDo6c3RyaW5nJiwgZG91YmxlLCBjb25zdCBz
dGQ6OnN0cmluZyYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNb2NrU3BlZWNoSW5w
dXREdW1wUmVjdChib29sKSBPVkVSUklERTsKLSNlbmRpZgotI2lmIEVOQUJMRShTQ1JJUFRFRF9T
UEVFQ0gpCi0gICAgdmlydHVhbCB2b2lkIGFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdChj
b25zdCBzdGQ6OnN0cmluZyYsIGRvdWJsZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVycm9yKGNvbnN0IHN0ZDo6c3RyaW5nJiwgY29uc3Qgc3Rk
OjpzdHJpbmcmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgd2FzTW9ja1NwZWVjaFJlY29n
bml0aW9uQWJvcnRlZCgpIE9WRVJSSURFOwotI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHRlc3RG
aW5pc2hlZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCB0ZXN0VGltZWRPdXQoKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0RlYnVnZ2VkKCkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCBpbnQgbGF5b3V0VGVzdFRpbWVvdXQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VSZW1haW5pbmdXaW5kb3dzKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBpbnQgbmF2
aWdhdGlvbkVudHJ5Q291bnQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCB3aW5kb3dDb3Vu
dCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBnb1RvT2Zmc2V0KGludCkgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCB2b2lkIHJlbG9hZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBs
b2FkVVJMRm9yRnJhbWUoY29uc3QgV2ViS2l0OjpXZWJVUkwmLCBjb25zdCBzdGQ6OnN0cmluZyYg
ZnJhbWVOYW1lKSBPVkVSUklERTsKQEAgLTE5MywxNCArMTU0LDYgQEAgY2xhc3MgV2ViVmlld0hv
c3QgOiBwdWJsaWMgV2ViS2l0OjpXZWJWaWV3Q2xpZW50LCBwdWJsaWMgV2ViS2l0OjpXZWJGcmFt
ZUNsaWVudCwKICAgICB2aXJ0dWFsIHZvaWQgbmF2aWdhdGVCYWNrRm9yd2FyZFNvb24oaW50IG9m
ZnNldCk7CiAgICAgdmlydHVhbCBpbnQgaGlzdG9yeUJhY2tMaXN0Q291bnQoKTsKICAgICB2aXJ0
dWFsIGludCBoaXN0b3J5Rm9yd2FyZExpc3RDb3VudCgpOwotICAgIHZpcnR1YWwgV2ViS2l0OjpX
ZWJHZW9sb2NhdGlvbkNsaWVudCogZ2VvbG9jYXRpb25DbGllbnQoKTsKLSNpZiBFTkFCTEUoSU5Q
VVRfU1BFRUNIKQotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIq
IHNwZWVjaElucHV0Q29udHJvbGxlcihXZWJLaXQ6OldlYlNwZWVjaElucHV0TGlzdGVuZXIqKTsK
LSNlbmRpZgotI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCi0gICAgdmlydHVhbCBXZWJLaXQ6
OldlYlNwZWVjaFJlY29nbml6ZXIqIHNwZWVjaFJlY29nbml6ZXIoKSBPVkVSUklERTsKLSNlbmRp
ZgotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudCogZGV2aWNl
T3JpZW50YXRpb25DbGllbnQoKSBPVkVSUklERTsKIAogICAgIC8vIFdlYktpdDo6V2ViV2lkZ2V0
Q2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGRpZEF1dG9SZXNpemUoY29uc3QgV2ViS2l0OjpXZWJT
aXplJiBuZXdTaXplKTsKQEAgLTIyMCwxMSArMTczLDYgQEAgY2xhc3MgV2ViVmlld0hvc3QgOiBw
dWJsaWMgV2ViS2l0OjpXZWJWaWV3Q2xpZW50LCBwdWJsaWMgV2ViS2l0OjpXZWJGcmFtZUNsaWVu
dCwKICAgICB2aXJ0dWFsIFdlYktpdDo6V2ViUmVjdCByb290V2luZG93UmVjdCgpOwogICAgIHZp
cnR1YWwgV2ViS2l0OjpXZWJSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCk7CiAgICAgdmlydHVhbCBX
ZWJLaXQ6OldlYlNjcmVlbkluZm8gc2NyZWVuSW5mbygpOwotI2lmIEVOQUJMRShQT0lOVEVSX0xP
Q0spCi0gICAgdmlydHVhbCBib29sIHJlcXVlc3RQb2ludGVyTG9jaygpOwotICAgIHZpcnR1YWwg
dm9pZCByZXF1ZXN0UG9pbnRlclVubG9jaygpOwotICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50ZXJM
b2NrZWQoKTsKLSNlbmRpZgogCiAgICAgLy8gV2ViS2l0OjpXZWJGcmFtZUNsaWVudAogICAgIHZp
cnR1YWwgV2ViS2l0OjpXZWJQbHVnaW4qIGNyZWF0ZVBsdWdpbihXZWJLaXQ6OldlYkZyYW1lKiwg
Y29uc3QgV2ViS2l0OjpXZWJQbHVnaW5QYXJhbXMmKTsKQEAgLTI1MSwxMSArMTk5LDYgQEAgY2xh
c3MgV2ViVmlld0hvc3QgOiBwdWJsaWMgV2ViS2l0OjpXZWJWaWV3Q2xpZW50LCBwdWJsaWMgV2Vi
S2l0OjpXZWJGcmFtZUNsaWVudCwKICAgICAgICAgV2ViS2l0OjpXZWJGcmFtZSogc291cmNlRnJh
bWUsIFdlYktpdDo6V2ViRnJhbWUqIHRhcmdldEZyYW1lLCAKICAgICAgICAgV2ViS2l0OjpXZWJT
ZWN1cml0eU9yaWdpbiB0YXJnZXQsIFdlYktpdDo6V2ViRE9NTWVzc2FnZUV2ZW50KTsKIAotICAg
IFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKiBkZXZpY2VPcmllbnRhdGlv
bkNsaWVudE1vY2soKTsKLQotICAgIC8vIEdlb2xvY2F0aW9uIGNsaWVudCBtb2NrcyBmb3IgRFJU
VGVzdFJ1bm5lcgotICAgIFdlYktpdDo6V2ViR2VvbG9jYXRpb25DbGllbnRNb2NrKiBnZW9sb2Nh
dGlvbkNsaWVudE1vY2soKTsKLQogICAgIC8vIFBlbmRpbmcgdGFzayBsaXN0LCBOb3RlIHRhaHQg
dGhlIG1ldGhvZCBpcyByZWZlcnJlZCBmcm9tIFdlYk1ldGhvZFRhc2sgY2xhc3MuCiAgICAgV2Vi
VGVzdFJ1bm5lcjo6V2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1fdGFza0xpc3Q7
IH0KIApAQCAtMzI2LDE3ICsyNjksNiBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPFdlYktpdDo6
V2ViQ29udGV4dE1lbnVEYXRhPiBtX2xhc3RDb250ZXh0TWVudURhdGE7CiAKLSAgICAvLyBHZW9s
b2NhdGlvbgotICAgIE93blB0cjxXZWJLaXQ6OldlYkdlb2xvY2F0aW9uQ2xpZW50TW9jaz4gbV9n
ZW9sb2NhdGlvbkNsaWVudE1vY2s7Ci0KLSAgICBPd25QdHI8V2ViS2l0OjpXZWJEZXZpY2VPcmll
bnRhdGlvbkNsaWVudE1vY2s+IG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrOwotI2lmIEVO
QUJMRShJTlBVVF9TUEVFQ0gpCi0gICAgT3duUHRyPE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXI+IG1fc3BlZWNoSW5wdXRDb250cm9sbGVyTW9jazsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFND
UklQVEVEX1NQRUVDSCkKLSAgICBPd25QdHI8TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI+IG1fbW9j
a1NwZWVjaFJlY29nbml6ZXI7Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAg
ICAgT3duUHRyPHdlYmtpdF9zdXBwb3J0OjpUZXN0TWVkaWFTdHJlYW1DbGllbnQ+IG1fdGVzdE1l
ZGlhU3RyZWFtQ2xpZW50OwpAQCAtMzQ3LDE1ICsyNzksNiBAQCBwcml2YXRlOgogICAgIFdlYlRl
c3RSdW5uZXI6OldlYlRhc2tMaXN0IG1fdGFza0xpc3Q7CiAgICAgVmVjdG9yPFdlYktpdDo6V2Vi
V2lkZ2V0Kj4gbV9wb3B1cG1lbnVzOwogCi0jaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKLSAgICBi
b29sIG1fcG9pbnRlckxvY2tlZDsKLSAgICBlbnVtIHsKLSAgICAgICAgUG9pbnRlckxvY2tXaWxs
U3VjY2VlZCwKLSAgICAgICAgUG9pbnRlckxvY2tXaWxsUmVzcG9uZEFzeW5jLAotICAgICAgICBQ
b2ludGVyTG9ja1dpbGxGYWlsU3luYwotICAgIH0gbV9wb2ludGVyTG9ja1BsYW5uZWRSZXN1bHQ7
Ci0jZW5kaWYKLQogICAgIE93blB0cjxXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc+IG1fbGF5ZXJU
cmVlVmlldzsKIH07CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>