<?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>165910</bug_id>
          
          <creation_ts>2016-12-15 12:18:54 -0800</creation_ts>
          <short_desc>Make the collector&apos;s fixpoint smart about scheduling work</short_desc>
          <delta_ts>2017-01-09 16:16:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>165911</dependson>
    
    <dependson>165963</dependson>
          <blocked>165909</blocked>
    
    <blocked>166828</blocked>
    
    <blocked>166827</blocked>
    
    <blocked>166831</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1260204</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-15 12:18:54 -0800</bug_when>
    <thetext>The GC currently scans a bunch of things in each fixpoint iteration.  It will sometimes do many fixpoint iterations.  I suspect that when it does have to perform multiple fixpoint iterations, it&apos;s because some specific part of the fixpoint is being very needy.  This implies that we can dramatically improve the fixpoint&apos;s performance using traditional fixpoint optimization tricks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260276</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-15 14:49:12 -0800</bug_when>
    <thetext>I&apos;m imagining that each of the phases of the weak fixpoint would be put into a SharedTask or some even smarter object, and then we&apos;d be able to write some scheduler that runs them in an order that reduces the average number of executions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264831</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-08 11:34:10 -0800</bug_when>
    <thetext>*** Bug 165963 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264832</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-08 11:36:33 -0800</bug_when>
    <thetext>I was originally thinking that in bug 165963, I would implement the infrastructure that&apos;s needed to intelligently schedule work and then in this bug I would use that infrastructure to get an optimization. I ended up doing both of those things in bug 165963.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264835</commentid>
    <comment_count>4</comment_count>
      <attachid>298310</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-08 11:54:29 -0800</bug_when>
    <thetext>Created attachment 298310
possible patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264854</commentid>
    <comment_count>5</comment_count>
      <attachid>298316</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-08 14:27:22 -0800</bug_when>
    <thetext>Created attachment 298316
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264855</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-08 14:29:15 -0800</bug_when>
    <thetext>Attachment 298316 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/MarkingConstraintSet.cpp:201:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:37:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:49:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:50:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:51:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:52:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:53:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 11 in 27 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>1264863</commentid>
    <comment_count>7</comment_count>
      <attachid>298320</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-08 15:32:38 -0800</bug_when>
    <thetext>Created attachment 298320
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264864</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-08 15:35:45 -0800</bug_when>
    <thetext>Attachment 298320 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/MarkingConstraintSet.cpp:201:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:37:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:49:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:50:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:51:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:52:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:53:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 11 in 27 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>1264865</commentid>
    <comment_count>9</comment_count>
      <attachid>298321</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-08 15:46:06 -0800</bug_when>
    <thetext>Created attachment 298321
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264867</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-08 15:48:54 -0800</bug_when>
    <thetext>Attachment 298321 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/MarkingConstraintSet.cpp:201:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:37:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:49:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:50:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:51:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:52:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:53:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 11 in 27 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>1265100</commentid>
    <comment_count>11</comment_count>
      <attachid>298321</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-01-09 12:57:06 -0800</bug_when>
    <thetext>Comment on attachment 298321
the patch

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

r=me with some minor comments.

&gt; Source/JavaScriptCore/heap/MarkingConstraintSet.cpp:124
&gt; +void MarkingConstraintSet::add(
&gt; +    std::unique_ptr&lt;MarkingConstraint&gt; constraint)

Nit, put this on one line.

&gt; Source/JavaScriptCore/heap/SpaceTimeMutatorScheduler.cpp:2
&gt; + * Copyright (C) 2016 Apple Inc. All rights reserved.

2017

&gt; Source/JavaScriptCore/heap/SpaceTimeMutatorScheduler.h:2
&gt; + * Copyright (C) 2016 Apple Inc. All rights reserved.

2017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265101</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-09 12:58:41 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 298321 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=298321&amp;action=review
&gt; 
&gt; r=me with some minor comments.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkingConstraintSet.cpp:124
&gt; &gt; +void MarkingConstraintSet::add(
&gt; &gt; +    std::unique_ptr&lt;MarkingConstraint&gt; constraint)
&gt; 
&gt; Nit, put this on one line.

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/SpaceTimeMutatorScheduler.cpp:2
&gt; &gt; + * Copyright (C) 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2017

You&apos;re commenting on the pseudofile that the patch is showing you.  In fact, SpaceTimeMutatorScheduler.cpp:2 is:

 * Copyright (C) 2016-2017 Apple Inc. All rights reserved.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/SpaceTimeMutatorScheduler.h:2
&gt; &gt; + * Copyright (C) 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2017

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265126</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-09 13:48:27 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/210521</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265194</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-09 16:16:31 -0800</bug_when>
    <thetext>Fixed cloop in https://trac.webkit.org/changeset/210530</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298310</attachid>
            <date>2017-01-08 11:54:29 -0800</date>
            <delta_ts>2017-01-08 14:27:22 -0800</delta_ts>
            <desc>possible patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>148733</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMiBA
QAorMjAxNy0wMS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgdGhlIGNvbGxlY3RvcidzIGZpeHBvaW50IHNtYXJ0IGFib3V0IHNjaGVkdWxpbmcgd29y
aworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1OTEw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgZXZlcnkgdGltZSB0aGUgR0Mgd291bGQgcnVuIGFueSBj
b25zdHJhaW50cyBpbiBtYXJrVG9GaXhwb2ludCwgaXQKKyAgICAgICAgd291bGQgcnVuIGFsbCBv
ZiB0aGUgY29uc3RyYWludHMuIEl0IHdvdWxkIGFsd2F5cyBydW4gdGhlbSBpbiB0aGUgc2FtZSBv
cmRlci4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggdG90YWxseSBjaGFuZ2VzIGhvdyB0
aGUgR0MgcnVucyBjb25zdHJhaW50cy4gVGhlIEdDIG5vdyBidWlsZHMgYQorICAgICAgICBNYXJr
aW5nQ29uc3RyYWludFNldCB3aGVuIGl0IGJvb3RzIHVwLCBhbmQgdGhpcyBjb250YWlucyBhbGwg
b2YgdGhlIGNvbnN0cmFpbnRzIGFzIHdlbGwgYXMKKyAgICAgICAgc29tZSBtZXRhLWRhdGEgYWJv
dXQgdGhlbS4gTm93LCBtYXJrVG9GaXhwb2ludCBqdXN0IGNhbGxzIGludG8gTWFya2luZ0NvbnN0
cmFpbnRTZXQgdG8KKyAgICAgICAgZXhlY3V0ZSBjb25zdHJhaW50cy4gQmVjYXVzZSBjb25zdHJh
aW50IGV4ZWN1dGlvbiBhbmQgc2NoZWR1bGluZyBuZWVkIHRvIGJlIGF3YXJlIG9mIGVhY2gKKyAg
ICAgICAgb3RoZXIsIEkgcmV3cm90ZSBtYXJrVG9GaXhwb2ludCBpbiBzdWNoIGEgd2F5IHRoYXQg
aXQncyBtb3JlIG9idmlvdXMgaG93IHRoZSBHQyBnb2VzCisgICAgICAgIGJldHdlZW4gY29uc3Ry
YWludCBzb2x2aW5nLCBtYXJraW5nIHdpdGggc3RvcHBlZCBtdXRhdG9yLCBhbmQgbWFya2luZyB3
aXRoIHJlc3VtZWQKKyAgICAgICAgbXV0YXRvci4gVGhpcyBhbHNvIGNoYW5nZXMgdGhlIHNjaGVk
dWxlciBBUEkgaW4gc3VjaCBhIHdheSB0aGF0IGEgc3luY2hyb25vdXMKKyAgICAgICAgc3RvcC10
aGUtd29ybGQgY29sbGVjdGlvbiBubyBsb25nZXIgbmVlZHMgdG8gZG8gZmFrZSBzdG9wL3Jlc3Vt
ZSAtIGluc3RlYWQgd2UganVzdCBzd2FwCisgICAgICAgIHRoZSBzcGFjZS10aW1lIHNjaGVkdWxl
ciBmb3IgdGhlIHN0b3AtdGhlLXdvcmxkIHNjaGVkdWxlci4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgaXMgYSBiaWcgc3RyZWFtbGluaW5nIG9mIHRoZSBHQy4gVGhpcyBpcyBhIHNwZWVkLXVwIGlu
IEdDLWhlYXZ5IHRlc3RzIGJlY2F1c2Ugd2UKKyAgICAgICAgbm93IGV4ZWN1dGUgbW9zdCBjb25z
dHJhaW50cyBleGFjdGx5IHR3aWNlIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgdG90YWwgZml4cG9p
bnQKKyAgICAgICAgaXRlcmF0aW9ucyB3ZSBkby4gTm93LCB3aGVuIHdlIHJ1biBvdXQgb2YgbWFy
a2luZyB3b3JrLCB0aGUgY29uc3RyYWludCBzb2x2ZXIgd2lsbCBqdXN0CisgICAgICAgIHJ1biB0
aGUgY29uc3RyYWludCB0aGF0IGlzIG1vc3QgbGlrZWx5IHRvIGdlbmVyYXRlIG5ldyB2aXNpdGlu
ZyB3b3JrLCBhbmQgaWYgaXQgZG9lcworICAgICAgICBnZW5lcmF0ZSB3b3JrLCB0aGVuIHRoZSBH
QyBub3cgZ29lcyBiYWNrIHRvIG1hcmtpbmcuIEJlZm9yZSwgaXQgd291bGQgcnVuICphbGwqCisg
ICAgICAgIGNvbnN0cmFpbnRzIGFuZCB0aGVuIGdvIGJhY2sgdG8gbWFya2luZy4gVGhlIGNvbnN0
cmFpbnQgc29sdmVyIGlzIGFybWVkIHdpdGggdGhyZWUKKyAgICAgICAgaW5mb3JtYXRpb24gc2ln
bmFscyB0aGF0IGl0IHVzZXMgdG8gc29ydCB0aGUgY29uc3RyYWludHMgaW4gb3JkZXIgb2YgZGVz
Y2VuZGluZyBsaWtlbGlob29kCisgICAgICAgIHRvIGdlbmVyYXRlIG5ldyBtYXJraW5nIHdvcmsu
IFRoZW4gaXQgcnVucyB0aGVtIGluIHRoYXQgb3JkZXIgdW50aWwgaXQgdGhlcmUgaXMgbmV3Cisg
ICAgICAgIG1hcmtpbmcgd29yay4gVGhlIHNpZ25hbHMgYXJlOgorICAgICAgICAKKyAgICAgICAg
MSkgV2hldGhlciB0aGUgY29uc3RyYWludCBpcyBncmV5ZWQgYnkgbWFya2luZyBvciBleGVjdXRp
b24uIEZvciBleGFtcGxlLCB3ZWFrIHJlZmVyZW5jZQorICAgICAgICAgICBjb25zdHJhaW50cyBh
cmUgZ3JleWVkIGJ5IG1hcmtpbmcgYmVjYXVzZSB0aGV5IGFyZSBtb3N0IGxpa2VseSB0byBoYXZl
IHNvbWV0aGluZyB0byBzYXkKKyAgICAgICAgICAgYWZ0ZXIgd2UndmUgZG9uZSBzb21lIG1hcmtp
bmcuIE9uIHRoZSBvdGhlciBoYW5kLCBjb25zZXJ2YXRpdmUgcm9vdHMgYXJlIGdyZXllZCBieQor
ICAgICAgICAgICBleGVjdXRpb24gYmVjYXVzZSB0aGV5IHdpbGwgZ2l2ZSBuZXcgaW5mb3JtYXRp
b24gYW55dGltZSB3ZSBsZXQgdGhlIG11dGF0b3IgcnVuLiBUaGUKKyAgICAgICAgICAgY29uc3Ry
YWludCBzb2x2ZXIgd2lsbCBvbmx5IHJ1biBHcmV5ZWRCeUV4ZWN1dGlvbiBjb25zdHJhaW50cyBh
cyByb290cyBhbmQgYWZ0ZXIgdGhlCisgICAgICAgICAgIEdyZXllZEJ5TWFya2luZyBjb25zdHJh
aW50cyBnbyBzaWxlbnQuIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGRvbid0IHRyeSB0byBzY2FuCisg
ICAgICAgICAgIGNvbnNlcnZhdGl2ZSByb290cyBldmVyeSB0aW1lIHdlIG5lZWQgdG8gcmUtcnVu
IHdlYWsgcmVmZXJlbmNlcyBhbmQgdmljZS12ZXJzYS4KKyAgICAgICAgCisgICAgICAgIDIpIEhv
dyBtdWNoIHZpc2l0aW5nIHdvcmsgd2FzIGNyZWF0ZWQgdGhlIGxhc3QgdGltZSB0aGUgY29uc3Ry
YWludCByYW4uIFRoZSBzb2x2ZXIKKyAgICAgICAgICAgcmVtZW1iZXJzIHRoZSBsYXN0VmlzaXRD
b3VudCwgYW5kIHVzZXMgaXQgdG8gcHJlZGljdCBob3cgbXVjaCB3b3JrIHRoZSBjb25zdHJhaW50
IHdpbGwKKyAgICAgICAgICAgZ2VuZXJhdGUgbmV4dCB0aW1lLiBJbiBwcmFjdGljZSB0aGlzIG1l
YW5zIHdlIHdpbGwga2VlcCByZS1ydW5uaW5nIHRoZSBvbmUgaW50ZXJlc3RpbmcKKyAgICAgICAg
ICAgY29uc3RyYWludCB1bnRpbCBpdCBzaHV0cyB1cC4KKyAgICAgICAgCisgICAgICAgIDMpIE9w
dGlvbmFsIHdvcmsgcHJlZGljdG9ycyBmb3Igc29tZSBjb25zdHJhaW50cy4gVGhlIGNvbnN0cmFp
bnQgdGhhdCBzaHVmZmxlcyB0aGUgbXV0YXRvcgorICAgICAgICAgICBtYXJrIHN0YWNrIGludG8g
dGhlIG1haW4gU2xvdFZpc2l0b3IncyBtdXRhdG9yIG1hcmsgc3RhY2sgYWx3YXlzIGtub3dzIGV4
YWN0bHkgaG93IG11Y2gKKyAgICAgICAgICAgd29yayBpdCB3aWxsIGNyZWF0ZS4KKyAgICAgICAg
CisgICAgICAgIFRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxsIGFsd2F5cyBydW4gYWxsIG9mIHRo
ZSBHcmV5ZWRCeUV4ZWN1dGlvbiBjb25zdHJhaW50cyBhdCBHQworICAgICAgICBzdGFydCwgc2lu
Y2UgdGhlc2UgZG91YmxlIGFzIHRoZSBHQydzIHJvb3RzLiBUaGUgY29uc3RyYWludCBzb2x2ZXIg
d2lsbCBhbHdheXMgcnVuIGFsbCBvZgorICAgICAgICB0aGUgR3JleWVkQnlNYXJraW5nIGNvbnN0
cmFpbnRzIHRoZSBmaXJzdCB0aW1lIHRoYXQgbWFya2luZyBzdGFsbHMuIE90aGVyIHRoYW4gdGhh
dCwgdGhlCisgICAgICAgIHNvbHZlciB3aWxsIGtlZXAgcnVubmluZyBjb25zdHJhaW50cywgc29y
dGVkIGFjY29yZGluZyB0byB0aGVpciBsaWtlbGlob29kIHRvIGNyZWF0ZSB3b3JrLAorICAgICAg
ICB1bnRpbCBlaXRoZXIgd29yayBpcyBjcmVhdGVkIG9yIHdlIHJ1biBvdXQgb2YgY29uc3RyYWlu
dHMgdG8gcnVuLiBHQyB0ZXJtaW5hdGlvbiBoYXBwZW5zCisgICAgICAgIHdoZW4gd2UgcnVuIG91
dCBvZiBjb25zdHJhaW50cyB0byBydW4uCisgICAgICAgIAorICAgICAgICBUaGlzIG5ldyBpbmZy
YXN0cnVjdHVyZSBtZWFucyB0aGF0IHdlIGhhdmUgYSBtdWNoIGJldHRlciBjaGFuY2Ugb2YgZGVh
bGluZyB3aXRoIHdvcnN0LWNhc2UKKyAgICAgICAgRE9NIHBhdGhvbG9naWVzLiBJZiB3ZSBjYW4g
aW50ZWxsaWdlbnRseSBmYWN0b3IgZGlmZmVyZW50IGV2aWwgRE9NIHRoaW5ncyBpbnRvIGRpZmZl
cmVudAorICAgICAgICBjb25zdHJhaW50cyB3aXRoIHRoZSByaWdodCB3b3JrIHByZWRpY3Rpb25z
IHRoZW4gdGhpcyBjb3VsZCByZWR1Y2UgdGhlIGNvc3Qgb2YgdGhvc2UgRE9NCisgICAgICAgIHRo
aW5ncyBieSBhIGZhY3RvciBvZiBOIHdoZXJlIE4gaXMgdGhlIG51bWJlciBvZiBmaXhwb2ludCBp
dGVyYXRpb25zIHRoZSBHQyB0eXBpY2FsbHkKKyAgICAgICAgZG9lcy4gTiBpcyB1c3VhbGx5IGFy
b3VuZCA1LTYgZXZlbiBmb3Igc2ltcGxlIGhlYXBzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6bWFy
a0NvZGVCbG9ja3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnJlbWVtYmVy
Q29kZUJsb2Nrcyk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1BsYW4uaDoKKyAgICAgICAg
KiBkZmcvREZHUGxhbklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6
aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6bWFya0NvZGVCbG9ja3MpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpyZW1lbWJlckNvZGVCbG9ja3MpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6IERlbGV0ZWQuCisgICAg
ICAgICogZGZnL0RGR1dvcmtsaXN0Lmg6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0SW5saW5l
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKToK
KyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyk6Cisg
ICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXQuY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tT
ZXQ6OndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyk6IERlbGV0ZWQuCisgICAgICAgICog
aGVhcC9Db2RlQmxvY2tTZXQuaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjppdGVyYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldElubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrU2V0OjppdGVyYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
U2V0OjppdGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3Bw
OgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXRlcmF0
ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpIZWFwOjpp
dGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3Mp
OgorICAgICAgICAoSlNDOjpIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkpOgorICAg
ICAgICAoSlNDOjpIZWFwOjptYXJrVG9GaXhwb2ludCk6CisgICAgICAgIChKU0M6OkhlYXA6OmVu
ZE1hcmtpbmcpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0SW5UaHJlYWQpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpzdG9wSWZOZWNlc3NhcnlTbG93KToKKyAgICAgICAgKEpTQzo6SGVhcDo6
YWNxdWlyZUFjY2Vzc1Nsb3cpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0SWZOZWNlc3Nh
cnlPckRlZmVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YnVpbGRDb25zdHJhaW50U2V0KToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6bm90aWZ5SXNTYWZlVG9Db2xsZWN0KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6UmVzdW1lVGhlV29ybGRTY29wZTo6UmVzdW1lVGhlV29ybGRTY29wZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGU6On5SZXN1bWVUaGVXb3Js
ZFNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6aGFydmVzdFdlYWtSZWZlcmVu
Y2VzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRDb25zZXJ2YXRpdmVSb290
cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdl
YWtSZWZlcmVuY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAg
KiBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50Ojp+TWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29u
c3RyYWludDo6cmVzZXRTdGF0cyk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpl
eGVjdXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpNYXJr
aW5nQ29uc3RyYWludDo6YWJicmV2aWF0ZWROYW1lKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0Nv
bnN0cmFpbnQ6Om5hbWUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6bGFzdFZp
c2l0Q291bnQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0
aW1hdGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnZvbGF0aWxpdHkpOgorICAgICAgICAq
IGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OkV4ZWN1dGlvbkNvbnRleHQpOgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlk
VmlzaXRTb21ldGhpbmcpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhl
Y3V0aW9uQ29udGV4dDo6c2hvdWxkVGltZU91dCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpkcmFpbik6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpkaWRFeGVjdXRlKToKKyAgICAgICAg
KEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmV4ZWN1dGUpOgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFpbnRTZXQp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6fk1hcmtpbmdDb25zdHJhaW50
U2V0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OnJlc2V0U3RhdHMpOgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKToKKyAgICAgICAgKEpTQzo6
TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVCb290c3RyYXApOgorICAgICAgICAoSlNDOjpN
YXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKToKKyAgICAgICAgKEpTQzo6
TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWR2YW5jaW5nKToKKyAgICAgICAgKEpT
Qzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwpOgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbCk6CisgICAgICAgICogaGVh
cC9NYXJraW5nQ29uc3RyYWludFNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0Nv
bnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250UmV0cmVhdGluZyk6CisgICAgICAgICogaGVhcC9NdXRh
dG9yU2NoZWR1bGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok11dGF0b3JTY2hlZHVsZXI6
Ok11dGF0b3JTY2hlZHVsZXIpOgorICAgICAgICAoSlNDOjpNdXRhdG9yU2NoZWR1bGVyOjp+TXV0
YXRvclNjaGVkdWxlcik6CisgICAgICAgIChKU0M6Ok11dGF0b3JTY2hlZHVsZXI6OmRpZFN0b3Ap
OgorICAgICAgICAoSlNDOjpNdXRhdG9yU2NoZWR1bGVyOjp3aWxsUmVzdW1lKToKKyAgICAgICAg
KEpTQzo6TXV0YXRvclNjaGVkdWxlcjo6ZGlkRXhlY3V0ZUNvbnN0cmFpbnRzKToKKyAgICAgICAg
KEpTQzo6TXV0YXRvclNjaGVkdWxlcjo6bG9nKToKKyAgICAgICAgKEpTQzo6TXV0YXRvclNjaGVk
dWxlcjo6c2hvdWxkU3RvcCk6CisgICAgICAgIChKU0M6Ok11dGF0b3JTY2hlZHVsZXI6OnNob3Vs
ZFJlc3VtZSk6CisgICAgICAgICogaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmg6IEFkZGVkLgorICAg
ICAgICAqIGhlYXAvT3BhcXVlUm9vdFNldC5oOgorICAgICAgICAoSlNDOjpPcGFxdWVSb290U2V0
OjphZGQpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6dmlzaXRBc0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlv
bik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpoYXNXb3JrKToKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjpkcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
YWRkT3BhcXVlUm9vdCk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6YWRkVG9WaXNpdENvdW50KToKKyAgICAgICAgKiBoZWFwL1NwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwLgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyOjpTbmFwc2hvdDo6U25hcHNob3QpOgorICAgICAgICAoSlNDOjpTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpTbmFwc2hvdDo6bm93KToKKyAgICAgICAgKEpTQzo6U3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6U25hcHNob3Q6OmJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xl
KToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6U3BhY2VUaW1lTXV0
YXRvclNjaGVkdWxlcik6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6
On5TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0
YXRvclNjaGVkdWxlcjo6c3RhdGUpOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyOjpiZWdpbkNvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyOjpkaWRTdG9wKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlcjo6d2lsbFJlc3VtZSk6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXI6OmRpZEV4ZWN1dGVDb25zdHJhaW50cyk6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXI6OnRpbWVUb1N0b3ApOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyOjp0aW1lVG9SZXN1bWUpOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyOjpsb2cpOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
OjplbmRDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
cjo6Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVJbXBsKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlcjo6Ynl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUpOgorICAgICAgICAo
SlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjptYXhIZWFkcm9vbSk6CisgICAgICAgIChK
U0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmhlYWRyb29tRnVsbG5lc3MpOgorICAgICAg
ICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjptdXRhdG9yVXRpbGl6YXRpb24pOgor
ICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpjb2xsZWN0b3JVdGlsaXph
dGlvbik6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmVsYXBzZWRJ
blBlcmlvZCk6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnBoYXNl
KToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6c2hvdWxkQmVSZXN1
bWVkKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0
TXV0YXRvclV0aWxpemF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lU2No
ZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjplbGFwc2VkSW5QZXJp
b2QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9u
OjpwaGFzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6RGVj
aXNpb246OnNob3VsZEJlUmVzdW1lZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNwYWNlVGlt
ZVNjaGVkdWxlcjo6RGVjaXNpb246OnRpbWVUb1Jlc3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRpbWVUb1N0b3ApOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6OlNwYWNlVGltZVNjaGVkdWxlcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6c25hcFBoYXNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpjdXJyZW50RGVjaXNpb24p
OiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIu
aC4KKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6b3BlcmF0b3Ig
Ym9vbCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyOjpTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIpOgorICAgICAg
ICAoSlNDOjpTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6On5TeW5jaHJv
bm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIpOgorICAgICAgICAoSlNDOjpTeW5jaHJv
bm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OnN0YXRlKToKKyAgICAgICAgKEpTQzo6
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjpiZWdpbkNvbGxlY3Rpb24p
OgorICAgICAgICAoSlNDOjpTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6
OnRpbWVUb1N0b3ApOgorICAgICAgICAoSlNDOjpTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXI6OnRpbWVUb1Jlc3VtZSk6CisgICAgICAgIChKU0M6OlN5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6ZW5kQ29sbGVjdGlvbik6CisgICAgICAgICogaGVh
cC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaDogQWRkZWQuCisgICAg
ICAgICogaGVhcC9WaXNpdGluZ1RpbWVvdXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlZpc2l0
aW5nVGltZW91dDo6VmlzaXRpbmdUaW1lb3V0KToKKyAgICAgICAgKEpTQzo6VmlzaXRpbmdUaW1l
b3V0Ojp2aXNpdENvdW50KToKKyAgICAgICAgKEpTQzo6VmlzaXRpbmdUaW1lb3V0OjpkaWRWaXNp
dFNvbWV0aGluZyk6CisgICAgICAgIChKU0M6OlZpc2l0aW5nVGltZW91dDo6c2hvdWxkVGltZU91
dCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisKIDIwMTctMDEtMDYgIFNhYW0gQmFy
YXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgc2xpY2UgaW50cmluc2lj
IHRvIHRoZSBERkcvRlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5Nyw2ICs0OTcsOCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAogICAgIGhlYXAvTWFya2VkQmxvY2su
Y3BwCiAgICAgaGVhcC9NYXJrZWRTcGFjZS5jcHAKKyAgICBoZWFwL01hcmtpbmdDb25zdHJhaW50
LmNwcAorICAgIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCiAgICAgaGVhcC9NdXRhdG9y
U3RhdGUuY3BwCiAgICAgaGVhcC9TbG90VmlzaXRvci5jcHAKICAgICBoZWFwL1NwYWNlVGltZVNj
aGVkdWxlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNywxMyBAQAogCQkw
RjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDMxNTM0Q0JBRDAw
MEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCAqLzsgfTsKIAkJMEYxRTNBNDcxNTM0Q0JC
OTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZH
RG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8q
IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuLmggKi87IH07CisJCTBGMUZCMzhFMUUxNzNBNjUwMEE5QkU1MCAvKiBT
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUw
IC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi87IH07CisJ
CTBGMUZCMzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11
dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKKwkJMEYxRkIzOTAxRTE3M0E2QjAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYxRkIzOEMxRTE3M0E2MjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuY3Bw
ICovOyB9OworCQkwRjFGQjM5MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5MjFF
MTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi87IH07CisJCTBGMUZCMzk2MUUx
QUY3RTEwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1Bs
YW5JbmxpbmVzLmggKi87IH07CisJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3Jr
bGlzdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLzsg
fTsKKwkJMEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk4MUUxRjY1
RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CiAJCTBGMUZFNTFDMTkyMkEz
QkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYy
MDE3N0YxRENBREMzMzAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc3RDFEQ0FEQzMwMDBFQTU5
NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCAqLzsgfTsKIAkJMEYyMDE3ODAxRENBREMzNTAwRUE1
OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyMDE3N0UxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGlu
Zy5oICovOyB9OwpAQCAtNDU1LDYgKzQ2MiwxMCBAQAogCQkwRjY0QjI3OTFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NEIyNzcxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCAqLzsgfTsK
IAkJMEY2NEIyN0ExQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYg
LyogQ2FsbEVkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY0RUFGMzFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NEVBRjIxQzRFQ0Qw
NjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCAqLzsgfTsKKwkJMEY2NjBFMzcxRTA1MTdCOTAw
MzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTMzMUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5n
Q29uc3RyYWludC5jcHAgKi87IH07CisJCTBGNjYwRTM4MUUwNTE3QkIwMDMxNDYyQyAvKiBNYXJr
aW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi87
IH07CisJCTBGNjYwRTM5MUUwNTE3QkYwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2MEUz
NTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwICovOyB9OworCQkw
RjY2MEUzQTFFMDUxN0MxMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM2MUUwNTE3Qjgw
MDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oICovOyB9OwogCQkwRjY2NENFODFEQTMw
NEVGMDBCMDBBMTEgLyogQ29kZUJsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjRDRTcxREEzMDRFRDAwQjAwQTExIC8qIENv
ZGVCbG9ja1NldElubGluZXMuaCAqLzsgfTsKIAkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8q
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NjZFQzExODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxC
eXRlY29kZUxpdmVuZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzUz
LDggKzc2NCw4IEBACiAJCTBGRERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFj
Y2Vzc0RhdGFEdW1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmNwcCAqLzsgfTsKIAkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmggKi87IH07CiAJCTBGREU4N0Y5MURGRDBDNzYwMDY0QzM5MCAvKiBDZWxsQ29udGFpbmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREU4
N0Y4MURGRDBDNkQwMDY0QzM5MCAvKiBDZWxsQ29udGFpbmVyLmNwcCAqLzsgfTsKLQkJMEZERTg3
RkMxREZFNkU1MTAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERTg3RkIxREZFNkU1MDAwNjRDMzkw
IC8qIFNwYWNlVGltZVNjaGVkdWxlci5oICovOyB9OwotCQkwRkRFODdGRDFERkU2RTU0MDA2NEMz
OTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGREU4N0ZBMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVT
Y2hlZHVsZXIuY3BwICovOyB9OworCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3BhY2VU
aW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZERTg3RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXIuaCAqLzsgfTsKKwkJMEZERTg3RkQxREZFNkU1NDAwNjRDMzkwIC8qIFNwYWNlVGlt
ZU11dGF0b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXIuY3BwICovOyB9OwogCQkwRkRGNjdEMjFEOUM2RDI3MDAxQjk4MjUgLyogQjNLaW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNjdE
MTFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmggKi87IH07CiAJCTBGREY2N0QzMUQ5QzZEMkEw
MDFCOTgyNSAvKiBCM0tpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZERjY3RDAxRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5jcHAgKi87IH07
CiAJCTBGREY2N0Q2MUQ5REM0NDAwMDFCOTgyNSAvKiBBaXJLaW5kLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0Q0MUQ5REM0M0UwMDFCOTgy
NSAvKiBBaXJLaW5kLmNwcCAqLzsgfTsKQEAgLTI1NTksNiArMjU3MCwxMyBAQAogCQkwRjFFM0E0
NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRG91YmxlRm9ybWF0U3RhdGUuaDsgcGF0aCA9IGRmZy9E
RkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFF
M0E1MDE1MzdDMkNCMDAwRjk0NTYgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRm
Zy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFu
Lmg7IHBhdGggPSBkZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAv
KiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZCMzhDMUUxNzNBNjIwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxhbklubGluZXMu
aDsgcGF0aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5lcy5oOyBwYXRo
ID0gZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMUZFNTFCMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYm9ydFJlYXNvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIwMTc3RDFEQ0FEQzMwMDBFQTU5NTAgLyogREZH
Rmxvd0luZGV4aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0Zsb3dJbmRleGluZy5jcHA7IHBhdGggPSBkZmcvREZHRmxvd0luZGV4aW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMDE3N0UxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zs
b3dJbmRleGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbG93SW5k
ZXhpbmcuaDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI4ODQsNiArMjkwMiwxMCBAQAogCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3ODFBNzk1
N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FsbEVkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEVBRjIxQzRF
Q0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlyQXJnSW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0FpckFyZ0lubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8q
IE1hcmtpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hcmtpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJr
aW5nQ29uc3RyYWludFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjYw
RTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjY2NENFNzFEQTMwNEVEMDBCMDBBMTEgLyogQ29kZUJsb2Nr
U2V0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tT
ZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjY2RUJFMTgzNTY2
RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkYxODM1NjZGOTAwRDAxN0Yx
IC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZ1bGxCeXRlY29kZUxpdmVuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0zMTkzLDggKzMyMTUsOCBAQAogCQkwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGFEdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJG
QjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBw
YXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZERTg3RjgxREZEMEM2RDAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2VsbENvbnRhaW5lci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGREU4N0ZBMURGRTZFNTAwMDY0QzM5MCAv
KiBTcGFjZVRpbWVTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3BhY2VUaW1lU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEZERTg3RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFjZVRpbWVTY2hlZHVsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZERjY3RDAxRDlD
NjA4NjAwMUI5ODI1IC8qIEIzS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0tpbmQuY3BwOyBwYXRoID0gYjMvQjNLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZERjY3RDExRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0tpbmQuaDsgcGF0aCA9IGIzL0IzS2luZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRGNjdENDFEOURDNDNFMDAxQjk4MjUg
LyogQWlyS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJL
aW5kLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTU3NTEsOCArNTc3MywxNCBAQAogCQkJCTE0RDJGM0Q4MTM5RjRCRTIwMDQ5MTAz
MSAvKiBNYXJrZWRTcGFjZS5jcHAgKi8sCiAJCQkJMTREMkYzRDkxMzlGNEJFMjAwNDkxMDMxIC8q
IE1hcmtlZFNwYWNlLmggKi8sCiAJCQkJMEY3QzVGQjkxRDg4OTUwNTAwNDRGNUUyIC8qIE1hcmtl
ZFNwYWNlSW5saW5lcy5oICovLAorCQkJCTBGNjYwRTMzMUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJr
aW5nQ29uc3RyYWludC5jcHAgKi8sCisJCQkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1h
cmtpbmdDb25zdHJhaW50LmggKi8sCisJCQkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1h
cmtpbmdDb25zdHJhaW50U2V0LmNwcCAqLywKKwkJCQkwRjY2MEUzNjFFMDUxN0I4MDAzMTQ2MkMg
LyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCAqLywKIAkJCQkxNDJENkYwRTEzNTM5QTQxMDBCMDJF
ODYgLyogTWFya1N0YWNrLmNwcCAqLywKIAkJCQkxNDJENkYwRjEzNTM5QTQxMDBCMDJFODYgLyog
TWFya1N0YWNrLmggKi8sCisJCQkJMEYxRkIzOEMxRTE3M0E2MjAwQTlCRTUwIC8qIE11dGF0b3JT
Y2hlZHVsZXIuY3BwICovLAorCQkJCTBGMUZCMzk4MUUxRjY1RjkwMEE5QkU1MCAvKiBNdXRhdG9y
U2NoZWR1bGVyLmggKi8sCiAJCQkJMEZBNzYyMDIxREI5MjQyMzAwQjdBMkZEIC8qIE11dGF0b3JT
dGF0ZS5jcHAgKi8sCiAJCQkJMEZBNzYyMDMxREI5MjQyMzAwQjdBMkZEIC8qIE11dGF0b3JTdGF0
ZS5oICovLAogCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0Lmgg
Ki8sCkBAIC01NzYxLDE0ICs1Nzg5LDE3IEBACiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4
IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyog
U2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZp
c2l0b3JJbmxpbmVzLmggKi8sCi0JCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNl
VGltZVNjaGVkdWxlci5jcHAgKi8sCi0JCQkJMEZERTg3RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNw
YWNlVGltZVNjaGVkdWxlci5oICovLAorCQkJCTBGREU4N0ZBMURGRTZFNTAwMDY0QzM5MCAvKiBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKKwkJCQkwRkRFODdGQjFERkU2RTUwMDA2
NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTBGN0NGOTUwMURD
MDI3RDcwMDk4Q0MxMiAvKiBTdG9wSWZOZWNlc3NhcnlUaW1lci5jcHAgKi8sCiAJCQkJMEY3Q0Y5
NTExREMwMjdENzAwOThDQzEyIC8qIFN0b3BJZk5lY2Vzc2FyeVRpbWVyLmggKi8sCiAJCQkJMTQy
RTMxMzIxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oICovLAogCQkJCTE0NTcyMjg1MTQzN0Ux
NDAwMDVGREUyNiAvKiBTdHJvbmdJbmxpbmVzLmggKi8sCisJCQkJMEYxRkIzOEExRTE3M0E2MjAw
QTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8s
CisJCQkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBU
aW55Qmxvb21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5j
b25kaXRpb25hbEZpbmFsaXplci5oICovLAorCQkJCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAv
KiBWaXNpdGluZ1RpbWVvdXQuaCAqLywKIAkJCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQgLyog
VmlzaXRSYWNlS2V5LmNwcCAqLywKIAkJCQkwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlz
aXRSYWNlS2V5LmggKi8sCiAJCQkJMUFDRjczNzYxNzFDQTZGQjAwQzlCQjFFIC8qIFdlYWsuY3Bw
ICovLApAQCAtNjk5NSw2ICs3MDI2LDcgQEAKIAkJCQkwRjJCOUNERjE5RDBCQTdEMDBCMUQxQjUg
LyogREZHUGhpQ2hpbGRyZW4uaCAqLywKIAkJCQlBNzhBOTc3MjE3OTczOEI4MDA5REY3NDQgLyog
REZHUGxhbi5jcHAgKi8sCiAJCQkJQTc4QTk3NzMxNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4u
aCAqLywKKwkJCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCAq
LywKIAkJCQlEQzAwMDM5MDE5RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJl
cml6ZS5oICovLAogCQkJCTBGQkUwRjZEMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9u
SW5qZWN0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZFMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCAqLywKQEAgLTcwODMsNiArNzExNSw3IEBACiAJ
CQkJMEZDOTdGM0MxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhh
c2UuaCAqLywKIAkJCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3Bw
ICovLAogCQkJCTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovLAor
CQkJCTBGMUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLywK
IAkJCSk7CiAJCQluYW1lID0gZGZnOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTc5
NDUsNiArNzk3OCw3IEBACiAJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZs
eUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkNBRTExMTdBOUMyNEUwMDM0QzczNSAv
KiBCeXRlY29kZUJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjFDMjdGMTRCRUFB
ODIwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjFGQjM5MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NjlBMDcyMzBFRDFDRTMzMDBGMUY2ODEgLyogQnl0ZWNvZGVHZW5lcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzMjhEQUU4MUQzOEQwMDUwMDFBMjUyOSAvKiBCeXRlY29kZUdl
bmVyYXRvcmlmaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyOERBRTkxRDM4RDAwNTAw
MUEyNTI5IC8qIEJ5dGVjb2RlR3JhcGguaCBpbiBIZWFkZXJzICovLApAQCAtODQ3OCw2ICs4NTEy
LDcgQEAKIAkJCQlBMUQ3OTMwMTFCNDM4NjRCMDA0NTE2RjUgLyogSW50bE51bWJlckZvcm1hdFBy
b3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyNTg0NkYxQjQ1QTM2MDAwQ0M3RjZDIC8q
IEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTJC
QkZGMjFCMDQ0QThCMDA2NjRCNjkgLyogSW50bE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzA4RUJFMjQxQ0U4RjM1ODAwNDUzMTQ2IC8qIEludGxPYmplY3RJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAxMTJCMkYgLyogSW50cmlu
c2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQk4QjlGNkQ1NjFENTkxMkZBMDAxQzczOUYgLyogSXRl
cmF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTYyLDcgKzg1OTcsOSBAQAogCQkJCTBG
MkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY2NjBFM0ExRTA1MTdDMTAwMzE0NjJDIC8qIE1hcmtpbmdDb25z
dHJhaW50U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCQTE3OTc2MDNEMDA5ODAyOEMg
LyogSlNGdW5jdGlvbklubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjYwRTM4MUUwNTE3
QkIwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBC
NzkxOUMxQzAyNEE0OTAwMjQ4MUUyIC8qIEpTR2VuZXJhdG9yRnVuY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjIxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODY3
NCw2ICs4NzExLDcgQEAKIAkJCQlBRDJGQ0JFQjFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIg
LyogSlNXaXRoU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZE
NzYwQSAvKiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzhGMUUxNzNB
NjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDJFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1dyYXBwZXJP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBK
dW1wVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0MTM5OTg1QTgwMEU1MzY1QSAv
KiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKQEAgLTg3MTksNiArODc1Nyw3IEBACiAJ
CQkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTMyQUIyNDQxRENENzVGNDAwRDc1MzNBIC8qIE1hY3JvQXNzZW1i
bGVySGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0Yw
IC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIzOTYxRTFB
RjdFMTAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTY4
QzYzNzFCOTBERTA0MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fz
c2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTAxLDcgKzg5NDAsNyBAQAogCQkJ
CUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQ
cm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZERTg3RkMxREZFNkU1MTAw
NjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZERTg3
RkMxREZFNkU1MTAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVl
TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAw
Q0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MzQsNiArODk3
Myw3IEBACiAJCQkJQkNDRjBEMDgwRUYwQUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzkwNDE0ODBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0
dXJlVHJhbnNpdGlvblRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRBMzhGQTFDOEUxM0RG
MDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5OTFF
MUY2NUZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NzA1QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NzA1QjQxQUUxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5OTZCNzMyNzFCREEwOEVGMDAzMzFCODQgLyogU3ltYm9sQ29uc3RydWN0b3Iu
bHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTk3NDMsNiArOTc4Myw3IEBACiAJCQkJQTdFNUEzQTcx
Nzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMUZCMzhFMUUxNzNBNjUwMEE5QkU1MCAvKiBTeW5jaHJv
bm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ2QjE2RDgxMkVCNUI1OTAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1QjZBNzREMThDNkRCQTYwMEYxMUU5MSAvKiBDb25zb2xlQ2xpZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDc5MTg5QjA1MTAwMDYzMzIzMSAvKiBDb25zb2xl
TWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk3NTgsNiArOTc5OSw3IEBACiAJCQkJMTQ3
RjM5QzQxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NjBFMzkxRTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtp
bmdDb25zdHJhaW50U2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3RUMwMkMw
MDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENE
REY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTVGQzg0QjMxRDFEREFEOTAwNkI1QzQ2IC8qIERlYnVnZ2VyTG9jYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0xMDM0Niw3ICsxMDM4OCw3IEBACiAJCQkJOTMzMDQwMkMwRTZBNzY0MDAwNzg2
RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ5M0FGQTE2RDBD
QUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ5
REMxNkIxMkVGMjkzRTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMEZERTg3RkQxREZFNkU1NDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkRFODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBDRDRDNDE1
RjZCNkJCMDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjU1NDFCMTE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBl
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAzNTYsNiArMTAzOTgsNyBAQAogCQkJCUE3MzBCNjEz
MTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3RydWN0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8qIFN0cmluZ0l0
ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMUZCMzkwMUUxNzNBNkIw
MEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5
REVDMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ0NjlERUQxMDdFQzdFNzAwNjUwNDQ2IC8qIFN0cmluZ1Byb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5MzM1RjI0RDEyRTY3NjVCMDAyQjU1NTMgLyogU3RyaW5nUmVjdXJzaW9u
Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDA3LDYgKzEwNDUwLDcgQEAKIAkJCQkw
RjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3OUVFMEJGRjFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZDNzM1MDFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NjBFMzcxRTA1MTdC
OTAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RTA1MDJDMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYyMEMyNTkxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjk1MkFBMjFERjc4NjBEMDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEwLDM2ICs2MTAsNiBAQCBDb21waWxhdGlvbktleSBQ
bGFuOjprZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCksIG1vZGUpOwogfQogCi12b2lkIFBsYW46Om1hcmtDb2RlQmxvY2tzKFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvcikKLXsKLSAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBDb21waWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2
YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3JtaW5nCi0gICAgLy8gYW4gZXhwbGlj
aXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZSB0aGF0
Ci0gICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUgdmlzaXRlZCBkdXJpbmcgR0MuCi0K
LSAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOwotICAgIHNsb3RW
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAg
aWYgKHByb2ZpbGVkREZHQ29kZUJsb2NrKQotICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChwcm9maWxlZERGR0NvZGVCbG9jayk7Ci19Ci0KLXZvaWQgUGxhbjo6cmVtZW1iZXJD
b2RlQmxvY2tzKFZNJiB2bSkKLXsKLSAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBDb21waWxhdGlvbiB3cml0ZXMgbG90cyBv
ZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3JtaW5nCi0gICAgLy8gYW4gZXhw
bGljaXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZSB0
aGF0Ci0gICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUgdmlzaXRlZCBkdXJpbmcgR0Mu
Ci0KLSAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgaWYgKHByb2ZpbGVkREZH
Q29kZUJsb2NrKQotICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVC
bG9jayk7Ci19Ci0KIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNzAsNyArNzAsOCBAQCBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
CiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAgCiAgICAgdm9pZCBtYXJrQ29kZUJsb2Nr
cyhTbG90VmlzaXRvciYpOwotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
Y29uc3QgRnVuYyYpOwogICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAgICAgdm9p
ZCBjYW5jZWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5Jbmxp
bmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJERkdQbGFuLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25z
dCBGdW5jJiBmdW5jKQoreworICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZh
bHVlcyB0byBhIENvZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKKyAgICAvLyBhbiBleHBsaWNp
dCBiYXJyaWVyLiBTbywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQK
KyAgICAvLyBhbGwgb3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KKwor
ICAgIGZ1bmMoY29kZUJsb2NrKTsKKyAgICBmdW5jKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7
CisgICAgaWYgKHByb2ZpbGVkREZHQ29kZUJsb2NrKQorICAgICAgICBmdW5jKHByb2ZpbGVkREZH
Q29kZUJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjEwNDMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1MSwyOCArMzUxLDYgQEAgdm9pZCBXb3JrbGlzdDo6Y29tcGxldGVBbGxQbGFuc0Zv
clZNKFZNJgogICAgIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKIH0KIAotdm9pZCBX
b3JrbGlzdDo6bWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
Ci17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Ci0gICAgZm9yIChQbGFuTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsr
aXRlcikgewotICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7Ci0gICAgICAg
IGlmIChwbGFuLT52bSAhPSAmdm0pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcGxh
bi0+bWFya0NvZGVCbG9ja3Moc2xvdFZpc2l0b3IpOwotICAgIH0KLX0KLQotdm9pZCBXb3JrbGlz
dDo6cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigq
bV9sb2NrKTsKLSAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2lu
KCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFBsYW4qIHBsYW4g
PSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5yZW1lbWJlckNvZGVCbG9ja3Modm0pOwot
ICAgIH0KLX0KLQogdm9pZCBXb3JrbGlzdDo6c3VzcGVuZEFsbFRocmVhZHMoKQogewogICAgIG1f
c3VzcGVuc2lvbkxvY2subG9jaygpOwpAQCAtNTY2LDIyICs1NDQsNiBAQCB2b2lkIGNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYgdm0pCiAgICAgfQogfQogCi12b2lkIG1hcmtDb2RlQmxvY2tzKFZN
JiB2bSwgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQotewotICAgIGZvciAodW5zaWduZWQgaSA9
IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgewotICAgICAgICBpZiAoREZHOjpXb3Jr
bGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkK
LSAgICAgICAgICAgIHdvcmtsaXN0LT5tYXJrQ29kZUJsb2Nrcyh2bSwgc2xvdFZpc2l0b3IpOwot
ICAgIH0KLX0KLQotdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQotewotICAgIGZvciAo
dW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgewotICAgICAgICBp
ZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRl
eE9yTnVsbChpKSkKLSAgICAgICAgICAgIHdvcmtsaXN0LT5yZW1lbWJlckNvZGVCbG9ja3Modm0p
OwotICAgIH0KLX0KLQogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiAKIHZvaWQgY29tcGxldGVB
bGxQbGFuc0ZvclZNKFZNJikKQEAgLTU5MiwxMCArNTU0LDYgQEAgdm9pZCBtYXJrQ29kZUJsb2Nr
cyhWTSYsIFNsb3RWaXNpdG9yJikKIHsKIH0KIAotdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0m
KQotewotfQotCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJl
dmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw4ICs1Nyw4IEBAIHB1YmxpYzoKICAgICAv
LyB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogICAgIHZvaWQgY29t
cGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKLSAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwg
U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZN
JiwgY29uc3QgRnVuYyYpOwogCiAgICAgdm9pZCB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVh
ZHkoVk0mKTsKICAgICBTdGF0ZSBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYsIENvbXBp
bGF0aW9uS2V5ID0gQ29tcGlsYXRpb25LZXkoKSk7CkBAIC0xNjgsNyArMTY4LDkgQEAgaW5saW5l
IFdvcmtsaXN0JiBleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZQogCiB2b2lkIGNvbXBsZXRlQWxsUGxh
bnNGb3JWTShWTSYpOwogdm9pZCBtYXJrQ29kZUJsb2NrcyhWTSYsIFNsb3RWaXNpdG9yJik7Ci12
b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
dm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZNJiwgY29uc3QgRnVuYyYpOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdElubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJERkdQbGFuSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR1dv
cmtsaXN0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworI2lmIEVOQUJM
RShERkdfSklUKQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBpdGVyYXRlQ29kZUJs
b2Nrc0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKKyAgICAgICAgaWYgKERGRzo6
V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwo
aSkpCisgICAgICAgICAgICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2bSwgZnVu
Yyk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBXb3JrbGlzdDo6
aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAg
TG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBp
dGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgewor
ICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGlmIChwbGFu
LT52bSAhPSAmdm0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcGxhbi0+aXRlcmF0
ZUNvZGVCbG9ja3NGb3JHQyhmdW5jKTsKKyAgICB9Cit9CisKKyNlbHNlIC8vIEVOQUJMRShERkdf
SklUKQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0Zv
ckdDKFZNJiwgY29uc3QgRnVuYyYpCit7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Miw4ICszMiw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgY29uc3QgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7Ci0KIENvZGVCbG9ja1NldDo6Q29kZUJsb2NrU2V0KCkKIHsKIH0KQEAgLTEx
NCwxNSArMTEyLDYgQEAgYm9vbCBDb2RlQmxvY2tTZXQ6OmNvbnRhaW5zKGNvbnN0IExvY2tIbwog
ICAgIHJldHVybiBtX29sZENvZGVCbG9ja3MuY29udGFpbnMoY29kZUJsb2NrKSB8fCBtX25ld0Nv
ZGVCbG9ja3MuY29udGFpbnMoY29kZUJsb2NrKSB8fCBtX2N1cnJlbnRseUV4ZWN1dGluZy5jb250
YWlucyhjb2RlQmxvY2spOwogfQogCi12b2lkIENvZGVCbG9ja1NldDo6d3JpdGVCYXJyaWVyQ3Vy
cmVudGx5RXhlY3V0aW5nKEhlYXAqIGhlYXApCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1f
bG9jayk7Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlJlbWVtYmVyaW5nICIs
IG1fY3VycmVudGx5RXhlY3V0aW5nLnNpemUoKSwgIiBjb2RlIGJsb2Nrcy5cbiIpOwotICAgIGZv
ciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykKLSAgICAgICAg
aGVhcC0+d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci19Ci0KIHZvaWQgQ29kZUJsb2NrU2V0Ojpj
bGVhckN1cnJlbnRseUV4ZWN1dGluZygpCiB7CiAgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuY2xl
YXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCShy
ZXZpc2lvbiAyMTA0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tT
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDEwICs2OSw2IEBAIHB1YmxpYzoKICAg
ICAvLyBieSB0aGlzIHNldCksIGFuZCB0aGF0IGhhdmUgbm90IGJlZW4gbWFya2VkLgogICAgIHZv
aWQgZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoQ29sbGVjdGlvblNjb3BlKTsKICAgICAK
LSAgICAvLyBBZGQgYWxsIGN1cnJlbnRseSBleGVjdXRpbmcgQ29kZUJsb2NrcyB0byB0aGUgcmVt
ZW1iZXJlZCBzZXQgdG8gYmUgCi0gICAgLy8gcmUtc2Nhbm5lZCBkdXJpbmcgdGhlIG5leHQgY29s
bGVjdGlvbi4KLSAgICB2b2lkIHdyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyhIZWFwKik7
Ci0KICAgICB2b2lkIGNsZWFyQ3VycmVudGx5RXhlY3V0aW5nKCk7CiAKICAgICBib29sIGNvbnRh
aW5zKGNvbnN0IExvY2tIb2xkZXImLCB2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spOwpAQCAtODEs
MjEgKzc3LDkgQEAgcHVibGljOgogICAgIC8vIFZpc2l0cyBlYWNoIENvZGVCbG9jayBpbiB0aGUg
aGVhcCB1bnRpbCB0aGUgdmlzaXRvciBmdW5jdGlvbiByZXR1cm5zIHRydWUKICAgICAvLyB0byBp
bmRpY2F0ZSB0aGF0IGl0IGlzIGRvbmUgaXRlcmF0aW5nLCBvciB1bnRpbCBldmVyeSBDb2RlQmxv
Y2sgaGFzIGJlZW4KICAgICAvLyB2aXNpdGVkLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgaXRlcmF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sg
OiBtX29sZENvZGVCbG9ja3MpIHsKLSAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29k
ZUJsb2NrKTsKLSAgICAgICAgICAgIGlmIChkb25lKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGZvciAoYXV0byYgY29kZUJsb2NrIDogbV9uZXdDb2RlQmxv
Y2tzKSB7Ci0gICAgICAgICAgICBib29sIGRvbmUgPSBmdW5jdG9yKGNvZGVCbG9jayk7Ci0gICAg
ICAgICAgICBpZiAoZG9uZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRlKGNvbnN0IEZ1
bmN0b3ImKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGl0ZXJh
dGVDdXJyZW50bHlFeGVjdXRpbmcoY29uc3QgRnVuY3RvciYpOwogICAgIAogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db2RlQmxvY2tTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29kZUJsb2NrU2V0SW5saW5lcy5oCShyZXZpc2lvbiAyMTA0MzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjAsNSArNjAsMzAgQEAgaW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKGNvbnN0IExv
YwogICAgIG1fY3VycmVudGx5RXhlY3V0aW5nLmFkZChjb2RlQmxvY2spOwogfQogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2tTZXQ6Oml0ZXJhdGUoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIGZv
ciAoYXV0byYgY29kZUJsb2NrIDogbV9vbGRDb2RlQmxvY2tzKSB7CisgICAgICAgIGJvb2wgZG9u
ZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsKKyAgICAgICAgaWYgKGRvbmUpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGZvciAoYXV0byYgY29kZUJsb2NrIDogbV9uZXdDb2Rl
QmxvY2tzKSB7CisgICAgICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsKKyAgICAg
ICAgaWYgKGRvbmUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgordm9pZCBDb2RlQmxvY2tTZXQ6Oml0ZXJhdGVDdXJyZW50bHlFeGVj
dXRpbmcoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigm
bV9sb2NrKTsKKyAgICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogbV9jdXJyZW50bHlFeGVj
dXRpbmcpCisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMTA0
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDksIDIwMTEs
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHly
aWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CkBAIC0yMiw5ICsyMiw5IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0
SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCi0jaW5jbHVkZSAiREZH
V29ya2xpc3QuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdElubGluZXMuaCIKICNpbmNsdWRlICJF
ZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVk
ZSAiRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtNDksMTIgKzQ5LDE0IEBACiAjaW5jbHVk
ZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5j
bHVkZSAiTWFya2VkU3BhY2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRT
ZXQuaCIKICNpbmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiU2Ft
cGxpbmdQcm9maWxlci5oIgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIKLSNpbmNsdWRlICJT
cGFjZVRpbWVTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
LmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5
VGltZXIuaCIKKyNpbmNsdWRlICJTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVs
ZXIuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJVbmxpbmtlZENv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIlZNLmgiCkBAIC05MSw0MSArOTMsNiBAQCBkb3VibGUgbWF4
UGF1c2VNUyhkb3VibGUgdGhpc1BhdXNlTVMpCiAgICAgcmV0dXJuIG1heFBhdXNlTVM7CiB9CiAK
LX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1jbGFzcyBIZWFwOjpSZXN1bWVUaGVXb3JsZFNj
b3BlIHsKLXB1YmxpYzoKLSAgICBSZXN1bWVUaGVXb3JsZFNjb3BlKEhlYXAmIGhlYXApCi0gICAg
ICAgIDogbV9oZWFwKGhlYXApCi0gICAgewotICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1
cnJlbnRHQygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAgICAgIGRvdWJsZSB0aGlzUGF1c2VNUyA9IChNb25v
dG9uaWNUaW1lOjpub3coKSAtIG1faGVhcC5tX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKTsKLSAg
ICAgICAgICAgIGRhdGFMb2coInA9IiwgdGhpc1BhdXNlTVMsICIgbXMgKG1heCAiLCBtYXhQYXVz
ZU1TKHRoaXNQYXVzZU1TKSwgIikuLi5dXG4iKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgbV9oZWFwLnJlc3VtZVRoZVdvcmxkKCk7Ci0gICAgfQotICAgIAotICAgIH5SZXN1bWVUaGVX
b3JsZFNjb3BlKCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdD
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBtX2hlYXAuc3RvcFRo
ZVdvcmxkKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAg
ICAgICAgIGRhdGFMb2coIltHQzogIik7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBIZWFw
JiBtX2hlYXA7Ci19OwotCi1uYW1lc3BhY2UgewotCiBzaXplX3QgbWluSGVhcFNpemUoSGVhcFR5
cGUgaGVhcFR5cGUsIHNpemVfdCByYW1TaXplKQogewogICAgIGlmIChoZWFwVHlwZSA9PSBMYXJn
ZUhlYXApIHsKQEAgLTMxNiwxMSArMjgzLDIwIEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICAsIG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKHN0ZDo6bWFrZV91
bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2so
c3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGVscGVyQ2xpZW50
KCZoZWFwSGVscGVyUG9vbCgpKQorICAgICwgbV9zY2hlZHVsZXIoc3RkOjptYWtlX3VuaXF1ZTxT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyPigqdGhpcykpCiAgICAgLCBtX3RocmVhZExvY2soQm94
PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVh
ZENvbmRpdGlvbjo6Y3JlYXRlKCkpCiB7CiAgICAgbV93b3JsZFN0YXRlLnN0b3JlKDApOwogICAg
IAorICAgIGlmIChPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKKyAgICAgICAgbV9zY2hlZHVs
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI+KCp0aGlzKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgLy8gV2Ugc2ltdWxhdGUgdHVybmluZyBvZmYgY29uY3VycmVu
dCBHQyBieSBtYWtpbmcgdGhlIHNjaGVkdWxlciBzYXkgdGhhdCB0aGUgd29ybGQKKyAgICAgICAg
Ly8gc2hvdWxkIGFsd2F5cyBiZSBzdG9wcGVkIHdoZW4gdGhlIGNvbGxlY3RvciBpcyBydW5uaW5n
LgorICAgICAgICBtX3NjaGVkdWxlciA9IHN0ZDo6bWFrZV91bmlxdWU8U3luY2hyb25vdXNTdG9w
VGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyPigpOworICAgIH0KKyAgICAKICAgICBpZiAoT3B0aW9u
czo6dmVyaWZ5SGVhcCgpKQogICAgICAgICBtX3ZlcmlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxI
ZWFwVmVyaWZpZXI+KHRoaXMsIE9wdGlvbnM6Om51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZl
cmlmaWNhdGlvbigpKTsKICAgICAKQEAgLTQ3OSwxMiArNDU1LDYgQEAgdm9pZCBIZWFwOjphZGRS
ZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcgogICAgIH0KIH0KIAotdm9pZCBIZWFwOjpoYXJ2ZXN0
V2Vha1JlZmVyZW5jZXMoKQotewotICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3Vy
cmVudCA9IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50
ID0gY3VycmVudC0+bmV4dCgpKQotICAgICAgICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2Vz
KCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKLX0KLQogdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXJzKCkKIHsKICAgICB3aGlsZSAobV91bmNvbmRpdGlvbmFsRmluYWxp
emVycy5oYXNOZXh0KCkpIHsKQEAgLTUxMSw2ICs0ODEsNDIgQEAgdm9pZCBIZWFwOjpjb21wbGV0
ZUFsbEpJVFBsYW5zKCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTSgqbV92bSk7CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdB
bmRDb21waWxpbmdDb2RlQmxvY2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgbV9jb2RlQmxv
Y2tzLT5pdGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKGZ1bmMpOworICAgIERGRzo6aXRlcmF0ZUNv
ZGVCbG9ja3NGb3JHQygqbV92bSwgZnVuYyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
Cit2b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91
dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5jJiBmdW5jKQoreworICAgIFZlY3RvcjxDb2RlQmxvY2sq
LCAyNTY+IGNvZGVCbG9ja3M7CisgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVC
bG9ja3MoCisgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAg
IGNvZGVCbG9ja3MuYXBwZW5kKGNvZGVCbG9jayk7CisgICAgICAgIH0pOworICAgIGZvciAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgOiBjb2RlQmxvY2tzKQorICAgICAgICBmdW5jKGNvZGVCbG9jayk7
Cit9CisKK3ZvaWQgSGVhcDo6YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCkKK3sKKyAgICBi
b29sIG9rID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIW1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNr
LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGF0YUxvZygiRkFUQUw6IFNoYXJlZCBjb2xsZWN0b3Ig
bWFyayBzdGFjayBub3QgZW1wdHkhIEl0IGhhcyAiLCBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFj
ay0+c2l6ZSgpLCAiIGVsZW1lbnRzLlxuIik7CisgICAgICAgIG9rID0gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIGlmICghbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZGF0YUxvZygiRkFUQUw6IFNoYXJlZCBtdXRhdG9yIG1hcmsgc3RhY2sgbm90IGVtcHR5
ISBJdCBoYXMgIiwgbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgZWxlbWVudHMu
XG4iKTsKKyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NF
UlQob2spOworfQorCiB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0VGlt
ZSkKIHsKICAgICBUaW1pbmdTY29wZSBtYXJrVG9GaXhwb2ludFRpbWluZ1Njb3BlKCp0aGlzLCAi
SGVhcDo6bWFya1RvRml4cG9pbnQiKTsKQEAgLTU2MCwxMzMgKzU2Niw3MCBAQCB2b2lkIEhlYXA6
Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0CiAgICAgU2xvdFZpc2l0b3ImIHNsb3RWaXNp
dG9yID0gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CiAgICAgc2xvdFZpc2l0b3IuZGlkU3RhcnRN
YXJraW5nKCk7CiAKLSAgICBTcGFjZVRpbWVTY2hlZHVsZXIgc2NoZWR1bGVyKCp0aGlzKTsKKyAg
ICBtX2NvbnN0cmFpbnRTZXQtPnJlc2V0U3RhdHMoKTsKKyAgICAKKyAgICBtX3NjaGVkdWxlci0+
YmVnaW5Db2xsZWN0aW9uKCk7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIG1f
c2NoZWR1bGVyLT5sb2coKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVCb290
c3RyYXAoc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIG1fc2No
ZWR1bGVyLT5kaWRFeGVjdXRlQ29uc3RyYWludHMoKTsKKworICAgIC8vIEFmdGVyIHRoaXMsIHdl
IHdpbGwgYWxtb3N0IGNlcnRhaW5seSBmYWxsIHRocm91Z2ggYWxsIG9mIHRoZSAic2xvdFZpc2l0
b3IuaXNFbXB0eSgpIgorICAgIC8vIGNoZWNrcyBiZWNhdXNlIGJvb3RzdHJhcCB3b3VsZCBoYXZl
IHB1dCB0aGluZ3MgaW50byB0aGUgdmlzaXRvci4gU28sIHdlIHNob3VsZCBmYWxsCisgICAgLy8g
dGhyb3VnaCB0byBkcmFpbmluZy4KICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlvbiA9
IDE7IDsgKytpdGVyYXRpb24pIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAg
ICAgICAgICBkYXRhTG9nKCJpIyIsIGl0ZXJhdGlvbiwgIiAiKTsKLSAgICAgICAgewotICAgICAg
ICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6
Om1hcmtUb0ZpeHBvaW50IGNvbnNlcnZhdGl2ZSBzY2FuIik7Ci0gICAgICAgICAgICBtX29iamVj
dFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7Ci0gICAgICAgICAgICBDb25zZXJ2
YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7Ci0gICAgICAgICAgICBTdXBlclNh
bXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgICAgICAgICBnYXRoZXJT
dGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIGdhdGhlckpTU3RhY2tS
b290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVy
Um9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVS
b290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAvLyBOb3cgd2UgdmlzaXQgcm9vdHMgdGhhdCBkb24ndCBnZXQgYmFycmllcmVkLCBzbyBlYWNo
IGZpeHBvaW50IGl0ZXJhdGlvbiBqdXN0IHJldmlzaXRzCi0gICAgICAgIC8vIGFsbCBvZiB0aGVt
LgotI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVy
ZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKLSNlbmRpZgotICAgICAgICAgICAgCi0gICAgICAg
IGlmIChtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2Nv
cGUpKQotICAgICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNl
cyhzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgZm9yIChhdXRvJiBwYWlyIDog
bV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZChwYWlyLmtleSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fbWFya0xpc3RTZXQg
JiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQotICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXI6Om1hcmtMaXN0cyhzbG90VmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOworICAgICAgICAKKyAg
ICAgICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWluYXRpb24oKSkgeworICAgICAgICAg
ICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAgICAgICAgICAgICAKLSAgICAgICAg
c2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwotICAgICAg
ICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpOwor
ICAgICAgICAgICAgYm9vbCBleGVjdXRlZEV2ZXJ5dGhpbmcgPQorICAgICAgICAgICAgICAgIG1f
Y29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNU
aW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgICAgIGlmIChleGVjdXRlZEV2ZXJ5dGhpbmcgJiYg
c2xvdFZpc2l0b3IuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0U2hhcmVkTWFy
a1N0YWNrc0VtcHR5KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RW
aXNpdG9yKTsKLSAgICAgICAgbV9oYW5kbGVTdGFjay52aXNpdChzbG90VmlzaXRvcik7Ci0KLSNp
ZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVy
KiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7Ci0gICAgICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwotICAg
ICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygp
OwotICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoc2xvdFZpc2l0b3IpOwotICAg
ICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAg
ICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBzbG90Vmlz
aXRvcik7CisgICAgICAgICAgICBtX3NjaGVkdWxlci0+ZGlkRXhlY3V0ZUNvbnN0cmFpbnRzKCk7
CiAgICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAg
IAotICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkpCi0gICAgICAgICAgICBtX3ZtLT50
eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtl
ZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7Ci0KLSAgICAgICAgc2xvdFZpc2l0b3IubWVyZ2VP
cGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNp
dG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKLSAgICAgICAgICAgIHBhcmFsbGVsVmlzaXRv
ci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7Ci0KLSAgICAgICAgbV9vYmplY3RTcGFj
ZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsKLSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVu
Y2VzKCk7Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0g
ICAgICAgIERGRzo6bWFya0NvZGVCbG9ja3MoKm1fdm0sIHNsb3RWaXNpdG9yKTsKLSAgICAgICAg
Ym9vbCBzaG91bGRUZXJtaW5hdGUgPSBzbG90VmlzaXRvci5pc0VtcHR5KCkgJiYgbV9tdXRhdG9y
TWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFBhcmFsbGVsTW9k
ZUVuYWJsZXIgZW5hYmxlcihzbG90VmlzaXRvcik7CisgICAgICAgICAgICBzbG90VmlzaXRvci5k
cmFpbkluUGFyYWxsZWwobV9zY2hlZHVsZXItPnRpbWVUb1Jlc3VtZSgpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKCFtX3NjaGVkdWxlci0+c2hvdWxkUmVzdW1lKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIG1fc2NoZWR1bGVyLT53aWxsUmVz
dW1lKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewotICAgICAg
ICAgICAgZGF0YUxvZyhzbG90VmlzaXRvci5jb2xsZWN0b3JNYXJrU3RhY2soKS5zaXplKCksICIr
IiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBzbG90VmlzaXRvci5tdXRhdG9yTWFya1N0
YWNrKCkuc2l6ZSgpLCAiLCBhPSIsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgLyAxMDI0LCAi
IGtiLCBiPSIsIG1fYmFycmllcnNFeGVjdXRlZCwgIiwgbXU9Iiwgc2NoZWR1bGVyLmN1cnJlbnRE
ZWNpc2lvbigpLnRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpLCAiICIpOworICAgICAgICAgICAg
ZG91YmxlIHRoaXNQYXVzZU1TID0gKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9zdG9wVGltZSku
bWlsbGlzZWNvbmRzKCk7CisgICAgICAgICAgICBkYXRhTG9nKCJwPSIsIHRoaXNQYXVzZU1TLCAi
IG1zIChtYXggIiwgbWF4UGF1c2VNUyh0aGlzUGF1c2VNUyksICIpLi4uXVxuIik7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhpcyB0byBjb25zZXJ2YXRp
dmVseSBlbnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tzIHRoYXQgYXJlCi0gICAg
ICAgIC8vIHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3ZSBuZWVkIHRvIGJlIHN1cmUgdG8g
ZG8gaXQgKmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2NrCi0gICAgICAgIC8vIHNvIHRoYXQg
d2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLiBBbHNvLCB0aGlz
IGhhcyB0byBoYXBwZW4gYWZ0ZXIgdGhlCi0gICAgICAgIC8vIGZpeHBvaW50IGNoZWNrIC0gb3Ro
ZXJ3aXNlIHdlIG1pZ2h0IGxvb3AgZm9yZXZlci4gSW5jaWRlbnRhbGx5LCB3ZSBhbHNvIHdhbnQg
dG8gZG8gdGhpcwotICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIEdDIHNvIHRoYXQgYW55dGhpbmcg
YXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBHQyBnZXRzIGJhcnJpZXJlZCBpbiB0aGUgbmV4dAotICAg
ICAgICAvLyBHQy4KLSAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlF
eGVjdXRpbmcodGhpcyk7Ci0gICAgICAgIERGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChzaG91bGRUZXJtaW5hdGUpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzIGFy
ZSBhY2Nlc3NlZCBieSB0aGUgY29sbGVjdG9yIHRocmVhZCAoaS5lLiB0aGlzIHRocmVhZCkKLSAg
ICAgICAgLy8gd2l0aG91dCBsb2Nrcy4gVGhhdCdzIHdoeSB3ZSBkb3VibGUtYnVmZmVyLgotICAg
ICAgICBtX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8oc2xvdFZpc2l0b3IubXV0YXRvck1h
cmtTdGFjaygpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdD
TG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBIYW5kbGVz
OlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICByZXN1bWVUaGVXb3JsZCgpOwogICAgICAgICAK
ICAgICAgICAgewotICAgICAgICAgICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhp
cywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IHRyYWNpbmciKTsKICAgICAgICAgICAgIFBhcmFsbGVs
TW9kZUVuYWJsZXIgZW5hYmxlcihzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VDb2xsZWN0b3JUaW1lc2xpY2luZygpKSB7Ci0gICAgICAgICAg
ICAgICAgc2NoZWR1bGVyLnNuYXBQaGFzZSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBkcmFpblJlc3VsdDsKLSAgICAg
ICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZGVjaXNpb24gPSBzY2hl
ZHVsZXIuY3VycmVudERlY2lzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZWNpc2lv
bi5zaG91bGRCZVJlc3VtZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRT
Y29wZSgqdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhaW5SZXN1bHQgPSBz
bG90VmlzaXRvci5kcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkoZGVjaXNpb24udGltZVRvU3RvcCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHJhaW5SZXN1bHQgPT0gU2xvdFZp
c2l0b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBzdG9wLiBCdXQgbWF5YmUgdGhlIHNj
aGVkdWxlciBkb2VzIG5vdCB3YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY29uZHMgc2NoZWR1bGVk
SWRsZSA9IGRlY2lzaW9uLnRpbWVUb1N0b3AoKSAtIE1vbm90b25pY1RpbWU6Om5vdygpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHRvdGFsbHkgdW5jbGVhciB3aGF0
IHRoZSB2YWx1ZSBvZiBjb2xsZWN0UGVybWl0dGVkSWRsZVJhdGlvCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSwgb3RoZXIgdGhhbiBpdCBzaG91bGQgYmUgZ3Jl
YXRlciB0aGFuIDAuIFlvdSBjb3VsZCBldmVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFyZ3VlIGZvciBpdCBiZWluZyBncmVhdGVyIHRoYW4gMS4gV2Ugc2hvdWxkIHR1bmUg
aXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwKHNjaGVkdWxlZElkbGUg
KiBPcHRpb25zOjpjb2xsZWN0b3JQZXJtaXR0ZWRJZGxlUmF0aW8oKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTZWNvbmRzIHdha2VVcExhdGVuY3kgPSBNb25vdG9uaWNUaW1lOjpub3coKSAtIGRl
Y2lzaW9uLnRpbWVUb1N0b3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2Fr
ZVVwTGF0ZW5jeSA+PSAxX21zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJ3dWwhPSIsIHdha2VVcExhdGVuY3kubWlsbGlzZWNvbmRzKCksICIgbXMgIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgZHJhaW5SZXN1bHQgPSBzbG90VmlzaXRvci5kcmFpbkluUGFyYWxs
ZWwoZGVjaXNpb24udGltZVRvUmVzdW1lKCkpOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKGRy
YWluUmVzdWx0ICE9IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIERpc2FibGluZyBjb2xsZWN0b3Ig
dGltZXNsaWNpbmcgaXMgbWVhbnQgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCi0gICAgICAgICAg
ICAgICAgLy8gLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUgdG8gbWF4aW1pemUgdGhlIG9wcG9y
dHVuaXR5IGZvciBoYXJtZnVsIHJhY2VzLgotICAgICAgICAgICAgICAgIFJlc3VtZVRoZVdvcmxk
U2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhpcyk7Ci0gICAgICAgICAgICAgICAgc2xvdFZp
c2l0b3IuZHJhaW5JblBhcmFsbGVsKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzbG90
VmlzaXRvci5kcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkobV9zY2hlZHVsZXItPnRpbWVUb1N0b3Ao
KSk7CiAgICAgICAgIH0KKworICAgICAgICBzdG9wVGhlV29ybGQoKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygiW0dDOiAiKTsK
KyAgICAgICAgCisgICAgICAgIG1fc2NoZWR1bGVyLT5kaWRTdG9wKCk7CisgICAgICAgIAorICAg
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIG1fc2NoZWR1bGVyLT5sb2co
KTsKICAgICB9CisgICAgCisgICAgbV9zY2hlZHVsZXItPmVuZENvbGxlY3Rpb24oKTsKIAogICAg
IHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOwpA
QCAtNjk0LDYgKzYzNywxMiBAQCB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0
YXJ0CiAgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogICAg
IH0KICAgICBtX2hlbHBlckNsaWVudC5maW5pc2goKTsKKworICAgIGl0ZXJhdGVFeGVjdXRpbmdB
bmRDb21waWxpbmdDb2RlQmxvY2tzKAorICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2Nr
KSB7CisgICAgICAgICAgICB3cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIAogICAgIHVwZGF0ZU9iamVjdENvdW50cyhnY1N0YXJ0VGltZSk7CiAgICAgZW5kTWFy
a2luZygpOwogfQpAQCAtNzMyLDI1ICs2ODEsNiBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygp
CiAgICAgbV9iYXJyaWVyc0V4ZWN1dGVkID0gMDsKIH0KIAotdm9pZCBIZWFwOjp2aXNpdENvbnNl
cnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKLXsKLSAgICBtX2NvbGxlY3Rv
clNsb3RWaXNpdG9yLT5hcHBlbmQocm9vdHMpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkg
PT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9v
dHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRD
b21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQotewotI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAg
ICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNl
cygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9
PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4i
LCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci0jZW5kaWYKLX0KLQogdm9pZCBIZWFwOjpyZW1v
dmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKQogewogI2lmIEVOQUJMRShERkdfSklUKQpA
QCAtODUwLDggKzc4MCw3IEBAIHZvaWQgSGVhcDo6ZW5kTWFya2luZygpCiAgICAgZm9yIChhdXRv
JiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQogICAgICAgICBwYXJh
bGxlbFZpc2l0b3ItPnJlc2V0KCk7CiAKLSAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZENvbGxl
Y3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZE11
dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSk7CisgICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0Vt
cHR5KCk7CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKICAgICAK
ICAgICBtX29iamVjdFNwYWNlLmVuZE1hcmtpbmcoKTsKQEAgLTExMzYsNyArMTA2NSw3IEBAIHZv
aWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAgICB3aWxsU3RhcnRDb2xsZWN0aW9u
KHNjb3BlKTsKICAgICBjb2xsZWN0SW1wbFRpbWluZ1Njb3BlLnNldFNjb3BlKCp0aGlzKTsKLSAg
ICAgICAgCisgICAgCiAgICAgZ2NTdGFydFRpbWUgPSBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpOwogICAgIGlmIChtX3ZlcmlmaWVyKSB7CiAgICAgICAgIC8vIFZlcmlmeSB0aGF0
IGxpdmUgb2JqZWN0cyBmcm9tIHRoZSBsYXN0IEdDIGN5Y2xlIGhhdmVuJ3QgYmVlbiBjb3JydXB0
ZWQgYnkKQEAgLTExNDYsMTEgKzEwNzUsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQo
KQogICAgICAgICBtX3ZlcmlmaWVyLT5pbml0aWFsaXplR0NDeWNsZSgpOwogICAgICAgICBtX3Zl
cmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpCZWZvcmVNYXJr
aW5nKTsKICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIHByZXBhcmVGb3JNYXJraW5nKCk7Ci0g
ICAgICAgIAorICAgIAogICAgIG1hcmtUb0ZpeHBvaW50KGdjU3RhcnRUaW1lKTsKLSAgICAgICAg
CisgICAgCiAgICAgaWYgKG1fdmVyaWZpZXIpIHsKICAgICAgICAgbV92ZXJpZmllci0+Z2F0aGVy
TGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKICAgICAgICAg
bV92ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBA
IC0xMTY2LDggKzEwOTUsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAgIGZp
bmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKICAgICByZW1vdmVEZWFkQ29tcGlsZXJX
b3JrbGlzdEVudHJpZXMoKTsKICAgICBub3RpZnlJbmNyZW1lbnRhbFN3ZWVwZXIoKTsKLSAgICAg
ICAgCi0gICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmcodGhp
cyk7CisgICAgCisgICAgbV9jb2RlQmxvY2tzLT5pdGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKAor
ICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAgICAgICAgICB3cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKKyAgICAgICAgfSk7CiAgICAgbV9jb2RlQmxvY2tzLT5jbGVhckN1
cnJlbnRseUV4ZWN1dGluZygpOwogICAgICAgICAKICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVG
b3JBbGxvY2F0aW9uKCk7CkBAIC0xMzU0LDYgKzEyODYsNyBAQCB2b2lkIEhlYXA6OnN0b3BJZk5l
Y2Vzc2FyeVNsb3coKQogICAgIAogICAgIGhhbmRsZUdDRGlkSklUKCk7CiAgICAgaGFuZGxlTmVl
ZEZpbmFsaXplKCk7CisgICAgbV9tdXRhdG9yRGlkUnVuID0gdHJ1ZTsKIH0KIAogYm9vbCBIZWFw
OjpzdG9wSWZOZWNlc3NhcnlTbG93KHVuc2lnbmVkIG9sZFN0YXRlKQpAQCAtMTM2Niw3ICsxMjk5
LDcgQEAgYm9vbCBIZWFwOjpzdG9wSWZOZWNlc3NhcnlTbG93KHVuc2lnbmVkIAogICAgICAgICAm
JiBoYW5kbGVOZWVkRmluYWxpemUob2xkU3RhdGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAKLSAgICBpZiAoIShvbGRTdGF0ZSAmIHNob3VsZFN0b3BCaXQpKSB7CisgICAgaWYgKCEob2xk
U3RhdGUgJiBzaG91bGRTdG9wQml0KSAmJiAhbV9zY2hlZHVsZXItPnNob3VsZFN0b3AoKSkgewog
ICAgICAgICBpZiAoIShvbGRTdGF0ZSAmIHN0b3BwZWRCaXQpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKG9sZFN0
YXRlLCBvbGRTdGF0ZSAmIH5zdG9wcGVkQml0KTsKQEAgLTE0MzksNiArMTM3Miw3IEBAIHZvaWQg
SGVhcDo6YWNxdWlyZUFjY2Vzc1Nsb3coKQogICAgICAgICBpZiAobV93b3JsZFN0YXRlLmNvbXBh
cmVFeGNoYW5nZVdlYWsob2xkU3RhdGUsIG5ld1N0YXRlKSkgewogICAgICAgICAgICAgaGFuZGxl
R0NEaWRKSVQoKTsKICAgICAgICAgICAgIGhhbmRsZU5lZWRGaW5hbGl6ZSgpOworICAgICAgICAg
ICAgbV9tdXRhdG9yRGlkUnVuID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0KQEAgLTIwNzUsMTAgKzIwMDksMTAgQEAgdm9pZCBIZWFwOjpyZXBvcnRFeHRlcm5h
bE1lbW9yeVZpc2l0ZWQocwogfQogI2VuZGlmCiAKLWJvb2wgSGVhcDo6Y29sbGVjdElmTmVjZXNz
YXJ5T3JEZWZlcihHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQordm9pZCBIZWFw
Ojpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQpCiB7CiAgICAgaWYgKCFjYW5Db2xsZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChkZWZlcnJhbENvbnRleHQpIHsKICAgICAg
ICAgZGVmZXJyYWxDb250ZXh0LT5tX3Nob3VsZEdDIHw9CkBAIC0yMDg3LDEzICsyMDIxLDEzIEBA
IGJvb2wgSGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihHQ0QKICAgICAgICAgc3RvcElm
TmVjZXNzYXJ5KCk7CiAgICAgCiAgICAgaWYgKCFzaG91bGRDb2xsZWN0SGV1cmlzdGljKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGRlZmVycmFs
Q29udGV4dCkKICAgICAgICAgZGVmZXJyYWxDb250ZXh0LT5tX3Nob3VsZEdDID0gdHJ1ZTsKICAg
ICBlbHNlCiAgICAgICAgIGNvbGxlY3RBc3luYygpOwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybjsKIH0KIAogdm9pZCBIZWFwOjpjb2xsZWN0QWNjb3JkaW5nVG9EZWZlckdDUHJvYmFiaWxp
dHkoKQpAQCAtMjE1OCw4ICsyMDkyLDE1NCBAQCB2b2lkIEhlYXA6OnNldFJ1bkxvb3AoQ0ZSdW5M
b29wUmVmIHJ1bkxvCiB9CiAjZW5kaWYgLy8gVVNFKENGKQogCit2b2lkIEhlYXA6OmJ1aWxkQ29u
c3RyYWludFNldCgpCit7CisgICAgbV9jb25zdHJhaW50U2V0ID0gc3RkOjptYWtlX3VuaXF1ZTxN
YXJraW5nQ29uc3RyYWludFNldD4oKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgK
KyAgICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKKyAgICAgICAgW3RoaXNdIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAg
ICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJh
aW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVw
YXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOworICAgICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMg
Y29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOworICAgICAgICAgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgICAgICAgICAgZ2F0aGVyU3RhY2tSb290cyhj
b25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2Vy
dmF0aXZlUm9vdHMpOworICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNl
cnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRp
dmVSb290cyk7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRC
eUV4ZWN1dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJN
c3IiLCAiTWlzYyBTbWFsbCBSb290cyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisjaWYgSlNDX09CSkNfQVBJX0VO
QUJMRUQKKyAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RW
aXNpdG9yKTsKKyNlbmRpZgorCisgICAgICAgICAgICBpZiAobV92bS0+c21hbGxTdHJpbmdzLm5l
ZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKKyAgICAgICAgICAgICAgICBtX3Zt
LT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMp
CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQocGFpci5rZXkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9tYXJrTGlzdFNldCAmJiBtX21hcmtM
aXN0U2V0LT5zaXplKCkpCisgICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1h
cmtMaXN0cyhzbG90VmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5leGNlcHRpb24oKSk7
CisgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhj
ZXB0aW9uKCkpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVk
QnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAi
U2giLCAiU3Ryb25nIEhhbmRsZXMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAgICAgbV9oYW5kbGVT
ZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIG1faGFuZGxl
U3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29u
c3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+
YWRkKAorICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisjaWYgRU5BQkxFKFNB
TVBMSU5HX1BST0ZJTEVSKQorICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBs
aW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOworICAgICAg
ICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMo
KTsKKyAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChzbG90VmlzaXRvcik7
CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRh
OlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShTQU1Q
TElOR19QUk9GSUxFUikKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fdm0tPnR5cGVQ
cm9maWxlcigpKQorICAgICAgICAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT52aXNp
dChzbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fdm0tPnNoYWRvd0No
aWNrZW4oKS52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAg
TWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkpzciIsICJKSVQgU3R1YiBSb3V0aW5lcyIsCisgICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91
dGluZXMoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWlu
dDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAor
ICAgICAgICAiV3MiLCAiV2VhayBTZXRzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgICAgIHNsb3RW
aXNpdG9yLm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgZm9yIChh
dXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICAg
ICAgICAgIHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyhzbG90
VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRC
eU1hcmtpbmcpOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAiV3Jo
IiwgIldlYWsgUmVmZXJlbmNlIEhhcnZlc3RlcnMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAgICAg
Zm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVmZXJlbmNlSGFy
dmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCisgICAg
ICAgICAgICAgICAgY3VycmVudC0+dmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7Cisg
ICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmcpOwor
ICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAg
ICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCisgICAgICAgICAg
ICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNl
cyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3NhcnkuCisgICAgICAgICAgICBERkc6Oml0ZXJh
dGVDb2RlQmxvY2tzRm9yR0MoCisgICAgICAgICAgICAgICAgKm1fdm0sCisgICAgICAgICAgICAg
ICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgICAgICAgICBzbG90
VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xv
Z2dpbmc6OlZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpc
biIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6
OkdyZXllZEJ5TWFya2luZyk7CisjZW5kaWYKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFk
ZCgKKyAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAgICAg
aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tz
KAorICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBp
ZiBpdCdzIGJsYWNrLgorICAgICAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY29k
ZUJsb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jZWxsU3RhdGUo
KSA9PSBDZWxsU3RhdGU6OlBvc3NpYmx5T2xkT3JCbGFjaykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNsb3RWaXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRC
eUV4ZWN1dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJN
bXMiLCAiTXV0YXRvciBNYXJrIFN0YWNrIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgICAgIC8vIElu
ZGljYXRlIHRvIHRoZSBmaXhwb2ludCB0aGF0IHdlIGludHJvZHVjZWQgd29yayEKKyAgICAgICAg
ICAgIHNpemVfdCBzaXplID0gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCk7CisgICAgICAgICAg
ICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIigi
LCBzaXplLCAiKSIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX211dGF0b3JNYXJrU3Rh
Y2stPnRyYW5zZmVyVG8oc2xvdFZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKKyAgICAgICAg
fSwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYpIC0+IGRvdWJsZSB7CisgICAgICAgICAg
ICByZXR1cm4gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCk7CisgICAgICAgIH0sCisgICAgICAg
IE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeUV4ZWN1dGlvbik7Cit9CisKIHZvaWQgSGVhcDo6
bm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkKIHsKKyAgICBidWlsZENvbnN0cmFpbnRTZXQoKTsKKyAg
ICAKICAgICBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6
OmNvbGxlY3RDb250aW51b3VzbHkoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDA5LCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKQEAgLTczLDggKzczLDEwIEBAIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBNYXJrU3RhY2tBcnJheTsKIGNsYXNzIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7CitjbGFzcyBNdXRh
dG9yU2NoZWR1bGVyOwogY2xhc3MgU2xvdFZpc2l0b3I7Ci1jbGFzcyBTcGFjZVRpbWVTY2hlZHVs
ZXI7CitjbGFzcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOwogY2xhc3MgU3RvcElmTmVjZXNz
YXJ5VGltZXI7CiBjbGFzcyBWTTsKIApAQCAtMjAzLDcgKzIwNSw3IEBAIHB1YmxpYzoKICAgICAv
LyBhbmQgdGhpcyB3aWxsIHdhaXQgZm9yIHRoYXQgYmFja2xvZyBiZWZvcmUgcnVubmluZyBpdHMg
R0MgYW5kIHJldHVybmluZy4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbGxlY3RTeW5j
KHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiA9IHN0ZDo6bnVsbG9wdCk7CiAgICAgCi0g
ICAgYm9vbCBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKEdDRGVmZXJyYWxDb250ZXh0KiA9IG51
bGxwdHIpOyAvLyBSZXR1cm5zIHRydWUgaWYgaXQgZGlkIGNvbGxlY3QuCisgICAgdm9pZCBjb2xs
ZWN0SWZOZWNlc3NhcnlPckRlZmVyKEdDRGVmZXJyYWxDb250ZXh0KiA9IG51bGxwdHIpOwogICAg
IHZvaWQgY29sbGVjdEFjY29yZGluZ1RvRGVmZXJHQ1Byb2JhYmlsaXR5KCk7CiAKICAgICB2b2lk
IGNvbXBsZXRlQWxsSklUUGxhbnMoKTsKQEAgLTM0MSw2ICszNDMsOSBAQCBwdWJsaWM6CiAgICAg
Ly8gYWxyZWFkeSBiZSBjYWxsZWQgZm9yIHlvdSBhdCB0aGUgcmlnaHQgdGltZXMuCiAgICAgdm9p
ZCBzdG9wSWZOZWNlc3NhcnkoKTsKICAgICAKKyAgICAvLyBGSVhNRQorICAgIHZvaWQgc3RvcElm
UmVxdWlyZWRCeVNjaGVkdWxlcigpOworICAgIAogICAgIC8vIFRoaXMgaXMgYSBtdWNoIHN0cm9u
Z2VyIGtpbmQgb2Ygc3RvcHBpbmcgb2YgdGhlIGNvbGxlY3RvciwgYW5kIGl0IG1heSByZXF1aXJl
IHdhaXRpbmcgZm9yIGEKICAgICAvLyB3aGlsZS4gVGhpcyBpcyBtZWFudCB0byBiZSBhIGxlZ2Fj
eSBBUEkgZm9yIGNsaWVudHMgb2YgY29sbGVjdEFsbEdhcmJhZ2UgdGhhdCBleHBlY3QgdGhhdCB0
aGVyZQogICAgIC8vIGlzIG5vIEdDIGJlZm9yZSBvciBhZnRlciB0aGF0IGZ1bmN0aW9uIGNhbGwu
IEFmdGVyIGNhbGxpbmcgdGhpcywgeW91IGFyZSBmcmVlIHRvIHN0YXJ0IEdDcwpAQCAtMzc2LDcg
KzM4MSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKICAg
ICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgZnJpZW5kIGNsYXNzIFNsb3RWaXNpdG9y
OwotICAgIGZyaWVuZCBjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXI7CisgICAgZnJpZW5kIGNsYXNz
IFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiAgICAgZnJpZW5kIGNsYXNzIEluY3JlbWVudGFs
U3dlZXBlcjsKICAgICBmcmllbmQgY2xhc3MgSGVhcFN0YXRpc3RpY3M7CiAgICAgZnJpZW5kIGNs
YXNzIFZNOwpAQCAtNDEzLDkgKzQxOCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9wVGhlV29y
bGQoKTsKICAgICB2b2lkIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgCi0gICAgY2xhc3MgUmVzdW1l
VGhlV29ybGRTY29wZTsKLSAgICBmcmllbmQgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29wZTsKLSAg
ICAKICAgICB2b2lkIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgdm9pZCByZXN1bWVUaGVNdXRhdG9y
KCk7CiAgICAgCkBAIC00NTUsNyArNDU3LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdhdGhlckpT
U3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1
ZmZlclJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBiZWdpbk1hcmtpbmcoKTsK
LSAgICB2b2lkIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAg
ICB2b2lkIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCBy
ZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKICAgICB2b2lkIHVwZGF0ZU9iamVj
dENvdW50cyhkb3VibGUgZ2NTdGFydFRpbWUpOwpAQCAtNDk4LDYgKzQ5OSwxNiBAQCBwcml2YXRl
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVyT3BhcXVlUm9vdFNsb3co
dm9pZCopOwogICAgIAogICAgIHZvaWQgc2V0TXV0YXRvclNob3VsZEJlRmVuY2VkKGJvb2wgdmFs
dWUpOworICAgIAorICAgIHZvaWQgYnVpbGRDb25zdHJhaW50U2V0KCk7CisgICAgCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxp
bmdDb2RlQmxvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgorICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICB2b2lkIGFzc2VydFNoYXJl
ZE1hcmtTdGFja3NFbXB0eSgpOwogCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAg
ICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwpAQCAtNTM0LDYgKzU0NSw4IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0
YWNrOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludFNldD4gbV9j
b25zdHJhaW50U2V0OwogCiAgICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5
IHBhcmFsbGVsIG1hcmtpbmcgdGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAg
IC8vIGVudW1lcmF0ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2Fj
aGUgc29tZSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGZyb20KQEAgLTYxNSw2ICs2MjgsOCBAQCBw
cml2YXRlOgogICAgIHNpemVfdCBtX2V4dGVybmFsTWVtb3J5U2l6ZSB7IDAgfTsKICNlbmRpZgog
ICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNdXRhdG9yU2NoZWR1bGVyPiBtX3NjaGVkdWxlcjsK
KyAgICAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvdWxkU3RvcEJpdCA9IDF1IDw8IDB1
OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzdG9wcGVkQml0ID0gMXUgPDwgMXU7CiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGhhc0FjY2Vzc0JpdCA9IDF1IDw8IDJ1OwpAQCAtNjMwLDYg
KzY0NSw3IEBAIHByaXZhdGU6CiAgICAgVGlja2V0IG1fbGFzdEdyYW50ZWRUaWNrZXQgeyAwIH07
CiAgICAgYm9vbCBtX3RocmVhZFNob3VsZFN0b3AgeyBmYWxzZSB9OwogICAgIGJvb2wgbV90aHJl
YWRJc1N0b3BwaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fbXV0YXRvckRpZFJ1biB7IHRydWUg
fTsKICAgICBCb3g8TG9jaz4gbV90aHJlYWRMb2NrOwogICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJl
YWRDb25kaXRpb24+IG1fdGhyZWFkQ29uZGl0aW9uOyAvLyBUaGUgbXV0YXRvciBtdXN0IG5vdCB3
YWl0IG9uIHRoaXMuIEl0IHdvdWxkIGNhdXNlIGEgZGVhZGxvY2suCiAgICAgUmVmUHRyPEF1dG9t
YXRpY1RocmVhZD4gbV90aHJlYWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ik1hcmtpbmdDb25zdHJhaW50LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCisgICAg
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9u
LAorICAgIFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKKyAgICA6IG1fYWJicmV2aWF0ZWROYW1lKGFi
YnJldmlhdGVkTmFtZSkKKyAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgICwgbV9leGVj
dXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQorICAgICwgbV92b2xhdGlsaXR5
KHZvbGF0aWxpdHkpCit7Cit9CisKK01hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWlu
dCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRl
RnVuY3Rpb24sCisgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3Jr
RXN0aW1hdGVGdW5jdGlvbiwKKyAgICBWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisgICAgOiBtX2Fi
YnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCisgICAgLCBtX25hbWUoV1RGTW92ZShuYW1l
KSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKKyAg
ICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbihXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRl
RnVuY3Rpb24pKQorICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxpdHkpCit7Cit9CisKK01hcmtp
bmdDb25zdHJhaW50Ojp+TWFya2luZ0NvbnN0cmFpbnQoKQoreworfQorCit2b2lkIE1hcmtpbmdD
b25zdHJhaW50OjpyZXNldFN0YXRzKCkKK3sKKyAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKK30K
Kwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwg
Ym9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRlZE5hbWUoKSk7
CisgICAgVmlzaXRpbmdUaW1lb3V0IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBkaWRWaXNpdFNv
bWV0aGluZywgdGltZW91dCk7CisgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvciwgdmlzaXRp
bmdUaW1lb3V0KTsKKyAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1lb3V0LnZpc2l0
Q291bnQodmlzaXRvcik7CisgICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1RpbWVvdXQu
ZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYv
TW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hcmtpbmdD
b25zdHJhaW50U2V0OworY2xhc3MgU2xvdFZpc2l0b3I7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJh
aW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBWb2xhdGlsaXR5IHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGludHJvZHVjZSBhIG5ldyBraW5kIG9mIHZvbGF0
aWxpdHkgY2FsbGVkIEdyZXllZEJ5UmVzdW1wdGlvbiwgd2hpY2gKKyAgICAgICAgLy8gd291bGQg
bWVhbiBydW5uaW5nIGFsbCBvZiB0aGUgdGltZXMgdGhhdCBHcmV5ZWRCeUV4ZWN1dGlvbiBydW5z
IGV4Y2VwdCBhcyBhIHJvb3QgaW4gYQorICAgICAgICAvLyBmdWxsIEdDLgorICAgICAgICAKKyAg
ICAgICAgLy8gVGhlIGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgcmVldmFsdWF0ZWQgYW55dGltZSB0
aGUgbXV0YXRvciBydW5zOiBzbyBhdCBHQyBzdGFydCBhbmQKKyAgICAgICAgLy8gd2hlbmV2ZXIg
dGhlIEdDIHJlc3VzcGVuZHMgYWZ0ZXIgYSByZXN1bXB0aW9uLiBUaGlzIGlzIGFsbW9zdCBhbHdh
eXMgc29tZXRoaW5nIHRoYXQKKyAgICAgICAgLy8geW91J2QgY2FsbCBhICJyb290IiBpbiBhIHRy
YWRpdGlvbmFsIEdDLgorICAgICAgICBHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgCisgICAg
ICAgIC8vIFRoZSBjb25zdHJhaW50IG5lZWRzIHRvIGJlIHJlZXZhbHVhdGVkIGFueSB0aW1lIGFu
eSBvYmplY3QgaXMgbWFya2VkIGFuZCBhbnl0aW1lIHRoZQorICAgICAgICAvLyBtdXRhdG9yIHJl
c3VtZXMuCisgICAgICAgIEdyZXllZEJ5TWFya2luZworICAgIH07CisgICAgCisgICAgTWFya2lu
Z0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpPiwKKyAgICAgICAgVm9sYXRpbGl0eSk7CisgICAgCisgICAgTWFya2luZ0NvbnN0
cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisg
ICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91
dCYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCisgICAgICAg
IFZvbGF0aWxpdHkpOworICAgIAorICAgIH5NYXJraW5nQ29uc3RyYWludCgpOworICAgIAorICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIGNv
bnN0IGNoYXIqIGFiYnJldmlhdGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWJicmV2aWF0ZWRO
YW1lLmRhdGEoKTsgfQorICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25h
bWUuZGF0YSgpOyB9CisgICAgCisgICAgdm9pZCByZXNldFN0YXRzKCk7CisgICAgCisgICAgc2l6
ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQor
ICAgIAorICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRo
aW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIAorICAgIGRvdWJsZSBxdWlja1dvcmtF
c3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgIGlmICghbV9xdWlj
a1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgfQorICAgIAor
ICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgeworICAg
ICAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3Ip
OworICAgIH0KKyAgICAKKyAgICBWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7IHJldHVy
biBtX3ZvbGF0aWxpdHk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE1hcmtp
bmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCisgICAgCisgICAgdW5z
aWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CisgICAgQ1N0cmluZyBtX2FiYnJldmlhdGVkTmFt
ZTsKKyAgICBDU3RyaW5nIG1fbmFtZTsKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKKyAg
ICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVu
Y3Rpb247CisgICAgVm9sYXRpbGl0eSBtX3ZvbGF0aWxpdHk7CisgICAgc2l6ZV90IG1fbGFzdFZp
c2l0Q291bnQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIK
KworI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNl
dDo6RXhlY3V0aW9uQ29udGV4dCB7CitwdWJsaWM6CisgICAgRXhlY3V0aW9uQ29udGV4dChNYXJr
aW5nQ29uc3RyYWludFNldCYgc2V0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGlt
ZSB0aW1lb3V0KQorICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgLCBtX3Zpc2l0b3Iodmlz
aXRvcikKKyAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fZGlkVmlzaXRTb21ldGhpbmc7CisgICAgfQorICAgIAorICAgIGJvb2wgc2hvdWxkVGltZU91
dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcoKSAmJiBo
YXNFbGFwc2VkKG1fdGltZW91dCk7CisgICAgfQorICAgIAorICAgIC8vIFJldHVybnMgZmFsc2Ug
aWYgaXQgdGltZXMgb3V0LgorICAgIGJvb2wgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQor
ICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiB1bmV4ZWN1dGVkKSB7CisgICAgICAg
ICAgICBleGVjdXRlKGluZGV4KTsKKyAgICAgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIoaW5kZXgp
OworICAgICAgICAgICAgaWYgKHNob3VsZFRpbWVPdXQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0
ZWQuZ2V0KGluZGV4KTsgfQorCisgICAgdm9pZCBleGVjdXRlKHNpemVfdCBpbmRleCkKKyAgICB7
CisgICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1fZGlkVmlz
aXRTb21ldGhpbmcsIG1fdGltZW91dCk7CisgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsK
KyAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0
OworICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOworICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGlu
ZyB7IGZhbHNlIH07Cit9OworCitNYXJraW5nQ29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFp
bnRTZXQoKQoreworfQorCitNYXJraW5nQ29uc3RyYWludFNldDo6fk1hcmtpbmdDb25zdHJhaW50
U2V0KCkKK3sKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6cmVzZXRTdGF0cygpCit7
CisgICAgbV91bmV4ZWN1dGVkUm9vdHMuY2xlYXJBbGwoKTsKKyAgICBtX3VuZXhlY3V0ZWRPdXRn
cm93dGhzLmNsZWFyQWxsKCk7CisgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9zZXQpIHsK
KyAgICAgICAgY29uc3RyYWludC0+cmVzZXRTdGF0cygpOworICAgICAgICBzd2l0Y2ggKGNvbnN0
cmFpbnQtPnZvbGF0aWxpdHkoKSkgeworICAgICAgICBjYXNlIE1hcmtpbmdDb25zdHJhaW50OjpH
cmV5ZWRCeUV4ZWN1dGlvbjoKKyAgICAgICAgICAgIG1fdW5leGVjdXRlZFJvb3RzLnNldChjb25z
dHJhaW50LT5pbmRleCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hcmtp
bmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmc6CisgICAgICAgICAgICBtX3VuZXhlY3V0ZWRP
dXRncm93dGhzLnNldChjb25zdHJhaW50LT5pbmRleCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCisg
ICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICBGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGZ1bmN0aW9uLAorICAg
IE1hcmtpbmdDb25zdHJhaW50OjpWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCit7CisgICAgYWRkKHN0
ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1l
KSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKK30KKwor
dm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWRO
YW1lLCBDU3RyaW5nIG5hbWUsCisgICAgRnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgRnVuY3Rpb248ZG91Ymxl
KFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCisgICAgTWFya2luZ0Nv
bnN0cmFpbnQ6OlZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3sKKyAgICBhZGQoc3RkOjptYWtlX3Vu
aXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3Zl
KG5hbWUpLCBXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3JrRXN0aW1h
dGVGdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNl
dDo6YWRkKAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4gY29uc3RyYWlu
dCkKK3sKKyAgICBjb25zdHJhaW50LT5tX2luZGV4ID0gbV9zZXQuc2l6ZSgpOworICAgIG1fb3Jk
ZXJlZC5hcHBlbmQoY29uc3RyYWludC5nZXQoKSk7CisgICAgaWYgKGNvbnN0cmFpbnQtPnZvbGF0
aWxpdHkoKSA9PSBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKQorICAgICAgICBt
X291dGdyb3d0aHMuYXBwZW5kKGNvbnN0cmFpbnQuZ2V0KCkpOworICAgIG1fc2V0LmFwcGVuZChX
VEZNb3ZlKGNvbnN0cmFpbnQpKTsKK30KKworYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUJvb3RzdHJhcChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0
KQoreworICAgIC8vIEJvb3RzdHJhcCBtZWFucyB0aGF0IHdlIGhhdmVuJ3QgZG9uZSBhbnkgb2Jq
ZWN0IHZpc2l0aW5nIHlldC4gVGhpcyBtZWFucyB0aGF0IHdlIHdhbnQgdG8KKyAgICAvLyBvbmx5
IGV4ZWN1dGUgcm9vdCBjb25zdHJhaW50cyAod2hpY2ggYWxzbyBoYXBwZW5zIHRvIGJlIHRob3Nl
IHRoYXQgd2Ugc2F5IGFyZSBncmV5ZWQgYnkKKyAgICAvLyByZXN1bXB0aW9uKSwgc2luY2UgdGhl
IG90aGVyIGNvbnN0cmFpbnRzIGFyZSBzdXBlciB1bmxpa2VseSB0byB0cmlnZ2VyIHdpdGhvdXQg
c29tZSBvYmplY3QKKyAgICAvLyB2aXNpdGluZy4gVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhl
IGNhbGxlciB3aWxsIGdvIHN0cmFpZ2h0IHRvIG9iamVjdCB2aXNpdGluZyBhZnRlcgorICAgIC8v
IHRoaXMuCisgICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0KCp0aGlzLCB2aXNp
dG9yLCB0aW1lb3V0KTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxv
ZygiYm9vdDoiKTsKKyAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91
bmV4ZWN1dGVkUm9vdHMpOworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRh
TG9nKCIgIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNU
aW1lIHRpbWVvdXQpCit7CisgICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBs
KHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBk
YXRhTG9nKCIgIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBNYXJraW5nQ29uc3Ry
YWludFNldDo6aXNXYXZlZnJvbnRBZHZhbmNpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogb3V0Z3Jvd3RoIDogbV9vdXRncm93dGhzKSB7Cisg
ICAgICAgIGlmIChvdXRncm93dGgtPndvcmtFc3RpbWF0ZSh2aXNpdG9yKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1
dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIAorICAgIGlmIChPcHRp
b25zOjpsb2dHQygpKQorICAgICAgICBkYXRhTG9nKCJjb252ZXJnZToiKTsKKworICAgIC8vIElm
IHRoZXJlIGFyZSBhbnkgY29uc3RyYWludHMgdGhhdCB3ZSBoYXZlIG5vdCBleGVjdXRlZCBhdCBh
bGwgZHVyaW5nIHRoaXMgY3ljbGUsIHRoZW4KKyAgICAvLyB3ZSBzaG91bGQgZXhlY3V0ZSB0aG9z
ZSBub3cuCisgICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3Rz
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFp
bihtX3VuZXhlY3V0ZWRPdXRncm93dGhzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIC8vIFdlIHdhbnQgdG8ga2VlcCBwcmVmZXJyaW5nIHRoZSBvdXRncm93dGggY29uc3RyYWlu
dHMgLSB0aGUgb25lcyB0aGF0IG5lZWQgdG8gYmUgZml4cG9pbnRlZAorICAgIC8vIGV2ZW4gaW4g
YSBzdG9wLXRoZS13b3JsZCBHQyAtIHVudGlsIHRoZXkgc3RvcCBwcm9kdWNpbmcuIFRoZXkgaGF2
ZSBhIHRlbmRlbmN5IHRvIGdvIHRvdGFsbHkKKyAgICAvLyBzaWxlbnQgYXQgc29tZSBwb2ludCBk
dXJpbmcgR0MsIGF0IHdoaWNoIHBvaW50IGl0IG1ha2VzIHNlbnNlIG5vdCB0byBydW4gdGhlbSBh
Z2FpbiB1bnRpbAorICAgIC8vIHRoZSBlbmQuIE91dGdyb3d0aHMgcHJvZHVjaW5nIG5ldyBpbmZv
cm1hdGlvbiBjb3JyZXNwb25kcyBhbG1vc3QgZXhhY3RseSB0byB0aGUgd2F2ZWZyb250CisgICAg
Ly8gYWR2YW5jaW5nOiBpdCB1c3VhbGx5IG1lYW5zIHRoYXQgd2UgYXJlIG1hcmtpbmcgb2JqZWN0
cyB0aGF0IHNob3VsZCBiZSBtYXJrZWQgYmFzZWQgb24KKyAgICAvLyBvdGhlciBvYmplY3RzIHRo
YXQgd2Ugd291bGQgaGF2ZSBtYXJrZWQgYW55d2F5LiBPbmNlIHRoZSB3YXZlZnJvbnQgaXMgbm8g
bG9uZ2VyIGFkdmFuY2luZywKKyAgICAvLyB3ZSB3YW50IHRvIHJ1biBtb3N0bHkgdGhlIHJvb3Qg
Y29uc3RyYWludHMgKGJhc2VkIG9uIHRoZWlyIHByZWRpY3Rpb25zIG9mIGhvdyBtdWNoIHdvcmsK
KyAgICAvLyB0aGV5IHdpbGwgaGF2ZSkgYmVjYXVzZSBhdCB0aGlzIHBvaW50IHdlIGFyZSBqdXN0
IHRyeWluZyB0byBvdXRwYWNlIHRoZSByZXRyZWF0aW5nCisgICAgLy8gd2F2ZWZyb250LgorICAg
IC8vCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gKGV4ZWN1dGVDb252ZXJnZW5jZUlt
cGwpIG9ubHkgcmV0dXJucyB0cnVlIGlmIGl0IHJ1bnMgYWxsCisgICAgLy8gY29uc3RyYWludHMu
IFNvLCBhbGwgd2UgYXJlIGNvbnRyb2xsaW5nIGFyZSB0aGUgaGV1cmlzdGljcyB0aGF0IHNheSB3
aGljaCBjb25zdHJhaW50cyB0bworICAgIC8vIHJ1biBmaXJzdC4gQ2hvb3NpbmcgdGhlIGNvbnN0
cmFpbnRzIHRoYXQgYXJlIHRoZSBtb3N0IGxpa2VseSB0byBwcm9kdWNlIG1lYW5zIHJ1bm5pbmcg
ZmV3ZXIKKyAgICAvLyBjb25zdHJhaW50cyBiZWZvcmUgcmV0dXJuaW5nLgorICAgIGJvb2wgaXNX
YXZlZnJvbnRBZHZhbmNpbmcgPSB0aGlzLT5pc1dhdmVmcm9udEFkdmFuY2luZyh2aXNpdG9yKTsK
KyAgICAKKyAgICBzdGQ6OnNvcnQoCisgICAgICAgIG1fb3JkZXJlZC5iZWdpbigpLCBtX29yZGVy
ZWQuZW5kKCksCisgICAgICAgIFsmXSAoTWFya2luZ0NvbnN0cmFpbnQqIGEsIE1hcmtpbmdDb25z
dHJhaW50KiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgIC8vIFJlbWVtYmVyOiByZXR1cm4gdHJ1
ZSBpZiBhIHNob3VsZCBjb21lIGJlZm9yZSBiLgorICAgICAgICAgICAgaWYgKGEtPnZvbGF0aWxp
dHkoKSAhPSBiLT52b2xhdGlsaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNXYXZlZnJv
bnRBZHZhbmNpbmcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLT52b2xhdGlsaXR5KCkg
PiBiLT52b2xhdGlsaXR5KCk7IC8vIEdyZXllZEJ5TWFya2luZyBzaG91bGQgY29tZSBiZWZvcmUg
R3JleWVkQnlFeGVjdXRpb24uCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYS0+dm9sYXRpbGl0eSgpIDwgYi0+dm9sYXRpbGl0eSgpOyAvLyBHcmV5ZWRC
eUV4ZWN1dGlvbiBzaG91bGQgY29tZSBiZWZvcmUgR3JleWVkQnlNYXJraW5nLgorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gYS0+d29ya0VzdGltYXRlKHZp
c2l0b3IpID4gYi0+d29ya0VzdGltYXRlKHZpc2l0b3IpOworICAgICAgICB9KTsKKyAgICAKKyAg
ICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50IDogbV9vcmRlcmVkKSB7CisgICAg
ICAgIHNpemVfdCBpID0gY29uc3RyYWludC0+aW5kZXgoKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChleGVjdXRpb25Db250ZXh0LmRpZEV4ZWN1dGUoaSkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKGkpOworICAgICAgICAKKyAgICAgICAg
Ly8gT25jZSB3ZSdyZSBpbiBjb252ZXJnZW5jZSwgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgdG8g
bGV0IHNvbWUgbWFya2luZyBoYXBwZW4gYW55dGltZQorICAgICAgICAvLyB3ZSBmaW5kIHdvcmsu
IE5vbmV0aGVsZXNzLCB3ZSBvbmx5IHdhbnQgY29uc3RyYWludHMgdG8gaW50ZXJydXB0IHRoZW1z
ZWx2ZXMgdXBvbgorICAgICAgICAvLyB0aW1lb3V0IC0gbm90IGp1c3QgYmVjYXVzZSB0aGV5IGZv
dW5kIHNvbWUgd29yay4KKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGV4ZWN1
dGUgYWxsIGNvbnN0cmFpbnRzIHVudGlsIHRpbWVvdXQ/IE5vdCBjbGVhciBpZiB0aGF0J3MKKyAg
ICAgICAgLy8gYmV0dGVyIG9yIHdvcnNlLiBNYXliZSBldmVuIGJldHRlciBpcyB0aGlzOgorICAg
ICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGVtcHR5LCBrZWVwIHJ1bm5pbmcuCisgICAgICAg
IC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgaGFzIGF0IGxlYXN0IE4gdGhpbmdzLCByZXR1cm4uCisg
ICAgICAgIC8vIC0gRWxzZSBydW4gdW50aWwgdGltZW91dC4KKyAgICAgICAgaWYgKGV4ZWN1dGlv
bkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFp
bnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgYm9vbCBkaWRW
aXNpdFNvbWV0aGluZyA9IGZhbHNlOworICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0
KQorICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5n
LCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkK
KyAgICAgICAgZGF0YUxvZygiICIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRl
IDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQgeworcHVibGljOgorICAgIE1hcmtp
bmdDb25zdHJhaW50U2V0KCk7CisgICAgfk1hcmtpbmdDb25zdHJhaW50U2V0KCk7CisgICAgCisg
ICAgdm9pZCByZXNldFN0YXRzKCk7CisgICAgCisgICAgdm9pZCBhZGQoCisgICAgICAgIENTdHJp
bmcgYWJicmV2aWF0ZWROYW1lLAorICAgICAgICBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKKyAgICAg
ICAgTWFya2luZ0NvbnN0cmFpbnQ6OlZvbGF0aWxpdHkpOworICAgIAorICAgIHZvaWQgYWRkKAor
ICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKKyAgICAgICAgQ1N0cmluZyBuYW1lLAor
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKT4sCisgICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAorICAgICAg
ICBNYXJraW5nQ29uc3RyYWludDo6Vm9sYXRpbGl0eSk7CisgICAgCisgICAgdm9pZCBhZGQoc3Rk
Ojp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7CisgICAgCisgICAgLy8gQXNzdW1pbmcg
dGhhdCB0aGUgbWFyayBzdGFja3MgYXJlIGFsbCBlbXB0eSwgdGhpcyB3aWxsIGdpdmUgeW91IGEg
Z3Vlc3MgYXMgdG8gd2hldGhlciBvcgorICAgIC8vIG5vdCB0aGUgd2F2ZWZyb250IGlzIGFkdmFu
Y2luZy4KKyAgICBib29sIGlzV2F2ZWZyb250QWR2YW5jaW5nKFNsb3RWaXNpdG9yJik7CisgICAg
Ym9vbCBpc1dhdmVmcm9udFJldHJlYXRpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcmV0dXJu
ICFpc1dhdmVmcm9udEFkdmFuY2luZyh2aXNpdG9yKTsgfQorICAgIAorICAgIC8vIEV4ZWN1dGVz
IG9ubHkgcm9vdHMuIFJldHVybnMgdHJ1ZSBpZiBhbGwgcm9vdHMgaGF2ZSBiZWVuIGV4ZWN1dGVk
LiBJdCdzIGV4cGVjdGVkCisgICAgLy8gdGhhdCB5b3UnbGwgZG8gc29tZSBkcmFpbmluZyBhZnRl
ciB0aGlzIGFuZCB0aGVuIHVzZSBleGVjdXRlQ29udmVyZ2VuY2UoKS4KKyAgICBib29sIGV4ZWN1
dGVCb290c3RyYXAoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9u
aWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYWxsIGNv
bnN0cmFpbnRzIHdlcmUgZXhlY3V0ZWQuIFRoaXMgYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5
CisgICAgLy8gdmlzaXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9tIHRoZXJlLgorICAgIGJvb2wg
ZXhlY3V0ZUNvbnZlcmdlbmNlKAorICAgICAgICBTbG90VmlzaXRvciYsCisgICAgICAgIE1vbm90
b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAg
IC8vIFNpbXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4K
KyAgICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKK3ByaXZhdGU6CisgICAg
Y2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgRXhlY3V0aW9uQ29udGV4
dDsKKyAgICAKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImLCBN
b25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIAorICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3Im
LCBNb25vdG9uaWNUaW1lLCBCaXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0
ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKKyAgICAKKyAgICBCaXRWZWN0b3IgbV91bmV4
ZWN1dGVkUm9vdHM7CisgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZE91dGdyb3d0aHM7CisgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4+IG1fc2V0OworICAgIFZl
Y3RvcjxNYXJraW5nQ29uc3RyYWludCo+IG1fb3JkZXJlZDsKKyAgICBWZWN0b3I8TWFya2luZ0Nv
bnN0cmFpbnQqPiBtX291dGdyb3d0aHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclNjaGVk
dWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTXV0YXRvclNjaGVkdWxlci5oIgorCisjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworTXV0YXRvclNjaGVkdWxlcjo6TXV0
YXRvclNjaGVkdWxlcigpCit7Cit9CisKK011dGF0b3JTY2hlZHVsZXI6On5NdXRhdG9yU2NoZWR1
bGVyKCkKK3sKK30KKwordm9pZCBNdXRhdG9yU2NoZWR1bGVyOjpkaWRTdG9wKCkKK3sKK30KKwor
dm9pZCBNdXRhdG9yU2NoZWR1bGVyOjp3aWxsUmVzdW1lKCkKK3sKK30KKwordm9pZCBNdXRhdG9y
U2NoZWR1bGVyOjpkaWRFeGVjdXRlQ29uc3RyYWludHMoKQoreworfQorCit2b2lkIE11dGF0b3JT
Y2hlZHVsZXI6OmxvZygpCit7Cit9CisKK2Jvb2wgTXV0YXRvclNjaGVkdWxlcjo6c2hvdWxkU3Rv
cCgpCit7CisgICAgcmV0dXJuIGhhc0VsYXBzZWQodGltZVRvU3RvcCgpKTsKK30KKworYm9vbCBN
dXRhdG9yU2NoZWR1bGVyOjpzaG91bGRSZXN1bWUoKQoreworICAgIHJldHVybiBoYXNFbGFwc2Vk
KHRpbWVUb1Jlc3VtZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclNjaGVkdWxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNdXRhdG9yU2NoZWR1bGVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNdXRhdG9yU2NoZWR1bGVyKTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgTm9y
bWFsLCAvLyBOb3QgY29sbGVjdGluZy4KKyAgICAgICAgU3RvcHBlZCwKKyAgICAgICAgUmVzdW1l
ZAorICAgIH07CisgICAgCisgICAgTXV0YXRvclNjaGVkdWxlcigpOworICAgIHZpcnR1YWwgfk11
dGF0b3JTY2hlZHVsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIFN0YXRlIHN0YXRlKCkgY29uc3Qg
PSAwOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbGxlY3Rpb24oKSA9IDA7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIGRpZFN0b3AoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlc3Vt
ZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlQ29uc3RyYWludHMoKTsKKyAgICAKKyAg
ICB2aXJ0dWFsIE1vbm90b25pY1RpbWUgdGltZVRvU3RvcCgpID0gMDsgLy8gQ2FsbCB3aGlsZSBy
ZXN1bWVkLCB0byBhc2sgd2hlbiB0byBzdG9wLgorICAgIHZpcnR1YWwgTW9ub3RvbmljVGltZSB0
aW1lVG9SZXN1bWUoKSA9IDA7IC8vIENhbGwgd2hpbGUgc3RvcHBlZCwgdG8gYXNrIHdoZW4gdG8g
cmVzdW1lLgorICAgIAorICAgIHZpcnR1YWwgdm9pZCBsb2coKTsKKyAgICAKKyAgICBib29sIHNo
b3VsZFN0b3AoKTsgLy8gQ2FsbCB3aGlsZSByZXN1bWVkLCB0byBhc2sgaWYgd2Ugc2hvdWxkIHN0
b3Agbm93LgorICAgIGJvb2wgc2hvdWxkUmVzdW1lKCk7IC8vIENhbGwgd2hpbGUgc3RvcHBlZCwg
dG8gYXNrIGlmIHdlIHNob3VsZCByZXN1bWUgbm93LgorICAgIAorICAgIHZpcnR1YWwgdm9pZCBl
bmRDb2xsZWN0aW9uKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKHJldmlzaW9uIDIxMDQz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01OSwxMSArNTksMTEgQEAgcHVibGljOgogICAgICAgICBtX2NvbnRhaW5zTGFzdFF1
ZXJpZWRSb290ID0gZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCBhZGQodm9pZCogcm9vdCkKKyAg
ICBib29sIGFkZCh2b2lkKiByb290KQogICAgIHsKICAgICAgICAgaWYgKHJvb3QgPT0gbV9sYXN0
UXVlcmllZFJvb3QpCiAgICAgICAgICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gdHJ1
ZTsKLSAgICAgICAgbV9yb290cy5hZGQocm9vdCk7CisgICAgICAgIHJldHVybiBtX3Jvb3RzLmFk
ZChyb290KS5pc05ld0VudHJ5OwogICAgIH0KIAogICAgIGludCBzaXplKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIx
MDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0Nyw2ICszNDcsMTEgQEAgcHJpdmF0ZToKICAgICBTbG90
VmlzaXRvciYgbV92aXNpdG9yOwogfTsKIAordm9pZCBTbG90VmlzaXRvcjo6dmlzaXRBc0NvbnN0
cmFpbnQoY29uc3QgSlNDZWxsKiBjZWxsKQoreworICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFj
ayA9IHRydWU7CisgICAgdmlzaXRDaGlsZHJlbihjZWxsKTsKK30KIAogQUxXQVlTX0lOTElORSB2
b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKQEAg
LTQ2MSw3ICs0NjYsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb25vdG9uaWNUaW1lIHRp
CiAgICAgCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3JpZ2h0VG9SdW4pOwogICAgIAot
ICAgIHdoaWxlICgoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpIHx8ICFtX211dGF0b3JTdGFj
ay5pc0VtcHR5KCkpICYmICFoYXNFbGFwc2VkKHRpbWVvdXQpKSB7CisgICAgd2hpbGUgKCFoYXNF
bGFwc2VkKHRpbWVvdXQpKSB7CiAgICAgICAgIHVwZGF0ZU11dGF0b3JJc1N0b3BwZWQobG9ja2Vy
KTsKICAgICAgICAgaWYgKCFtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgbV9jb2xsZWN0b3JTdGFjay5yZWZpbGwoKTsKQEAgLTQ3Niw3ICs0ODEsOCBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkcmFpbihNb25vdG9uaWNUaW1lIHRpCiAgICAgICAgICAgICBtX2lzVmlzaXRp
bmdNdXRhdG9yU3RhY2sgPSB0cnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRv
d24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9t
dXRhdG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKICAgICAgICAgICAg
ICAgICB2aXNpdENoaWxkcmVuKG1fbXV0YXRvclN0YWNrLnJlbW92ZUxhc3QoKSk7Ci0gICAgICAg
IH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9yaWdodFRv
UnVuLnNhZmVwb2ludCgpOwogICAgICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CiAgICAgfQpA
QCAtNDg2LDEyICs0OTIsMTggQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9ub3RvbmljVGlt
ZSB0aQogCiBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkKIHsKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgIHJldHVybiBpc0Vt
cHR5KCkgJiYgZGlkUmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpOworfQorCitib29sIFNsb3RWaXNp
dG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IExvY2tIb2xkZXImKQorewogICAgIHJldHVy
biAhbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKICAgICAgICAgJiYgbV9o
ZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKICAgICAgICAgJiYgbV9o
ZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOwogfQogCi1ib29sIFNsb3RW
aXNpdG9yOjpoYXNXb3JrKCkKK2Jvb2wgU2xvdFZpc2l0b3I6Omhhc1dvcmsoY29uc3QgTG9ja0hv
bGRlciYpCiB7CiAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2st
PmlzRW1wdHkoKQogICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+
aXNFbXB0eSgpOwpAQCAtNTE4LDEyICs1MzAsMTIgQEAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWlu
UmVzdWx0IFNsb3RWaXNpdAogICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1l
b3V0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6
VGltZWRPdXQ7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAo
ZGlkUmVhY2hUZXJtaW5hdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkaWRSZWFj
aFRlcm1pbmF0aW9uKGxvY2tlcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5t
X21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1dv
cmsoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1dvcmsobG9ja2VyKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbChtX2hl
YXAubV9tYXJraW5nTXV0ZXgsIHRpbWVvdXQpOwpAQCAtNTM0LDEzICs1NDYsMTMgQEAgU2xvdFZp
c2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAogICAgICAgICAgICAgICAgIGlmICho
YXNFbGFwc2VkKHRpbWVvdXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJh
aW5SZXN1bHQ6OlRpbWVkT3V0OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
IChkaWRSZWFjaFRlcm1pbmF0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKGRpZFJlYWNoVGVy
bWluYXRpb24obG9ja2VyKSkKICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0Nv
bmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogCiAgICAgICAgICAgICAgICAgbV9oZWFwLm1f
bWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbCgKICAgICAgICAgICAgICAgICAgICAg
bV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICBbdGhp
c10gewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1dvcmsoKQorICAgICAgICAg
ICAgICAgICAgICBbJl0geworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1dvcmso
bG9ja2VyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVs
TWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgIApAQCAtNTg5LDcgKzYwMSw3IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBT
bG90VmlzaXQKICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCiAgICAgICAgICAgICBy
ZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwogICAgICAgICAKLSAgICAgICAgaWYg
KGRpZFJlYWNoVGVybWluYXRpb24oKSkgeworICAgICAgICBpZiAoZGlkUmVhY2hUZXJtaW5hdGlv
bihsb2NrZXIpKSB7CiAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFi
bGUubm90aWZ5QWxsKCk7CiAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRv
bmU7CiAgICAgICAgIH0KQEAgLTYwNSwxMyArNjE3LDEzIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFk
ZE9wYXF1ZVJvb3Qodm9pZCogcm8KICAgICAKICAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01h
cmtlcnMoKSA9PSAxKSB7CiAgICAgICAgIC8vIFB1dCBkaXJlY3RseSBpbnRvIHRoZSBzaGFyZWQg
SGFzaFNldC4KLSAgICAgICAgbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOworICAgICAg
ICBtX3Zpc2l0Q291bnQgKz0gbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpLmlzTmV3RW50
cnk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gUHV0IGludG8gdGhlIGxvY2FsIHNl
dCwgYnV0IG1lcmdlIHdpdGggdGhlIHNoYXJlZCBvbmUgZXZlcnkgb25jZSBpbgogICAgIC8vIGEg
d2hpbGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2FsIHNldHMgZG9uJ3QgZ3JvdyB0b28gbGFy
Z2UuCiAgICAgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotICAgIG1fb3BhcXVlUm9v
dHMuYWRkKHJvb3QpOworICAgIG1fdmlzaXRDb3VudCArPSBtX29wYXF1ZVJvb3RzLmFkZChyb290
KTsKIH0KIAogYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHJvb3Qp
IGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJl
dmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw2ICsxMDMsOCBAQCBwdWJsaWM6
CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0
ZWQ7IH0KICAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3Vu
dDsgfQorICAgIAorICAgIHZvaWQgYWRkVG9WaXNpdENvdW50KHNpemVfdCB2YWx1ZSkgeyBtX3Zp
c2l0Q291bnQgKz0gdmFsdWU7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7CiAgICAgdm9pZCBkcmFp
bihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKQEAg
LTE1MSw2ICsxNTMsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZGlkUmFjZShKU0NlbGwqIGNlbGws
IGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24p
KTsgfQogICAgIHZvaWQgZGlkTm90UmFjZShjb25zdCBWaXNpdFJhY2VLZXkmKTsKICAgICB2b2lk
IGRpZE5vdFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkTm90UmFj
ZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KKyAgICAKKyAgICB2b2lkIHZpc2l0QXND
b25zdHJhaW50KGNvbnN0IEpTQ2VsbCopOworICAgIAorICAgIGJvb2wgZGlkUmVhY2hUZXJtaW5h
dGlvbigpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVy
OwpAQCAtMTgwLDggKzE4Niw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFs
bGVsKCk7CiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9t
LCBNYXJrU3RhY2tBcnJheSYgdG8pOwogICAgIAotICAgIGJvb2wgaGFzV29yaygpOwotICAgIGJv
b2wgZGlkUmVhY2hUZXJtaW5hdGlvbigpOworICAgIGJvb2wgaGFzV29yayhjb25zdCBMb2NrSG9s
ZGVyJik7CisgICAgYm9vbCBkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IExvY2tIb2xkZXImKTsK
IAogICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3RhY2s7CiAgICAgTWFya1N0YWNrQXJy
YXkgbV9tdXRhdG9yU3RhY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjEwNDMz
KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3Bw
OjIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTcGFjZVRpbWVTY2hlZHVsZXIuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2RvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lz
aW9uOjp0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdAoreworICAgIGRvdWJsZSBieXRl
c1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSA9CisgICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGUgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5n
OworICAgIAorICAgIGRvdWJsZSBtYXhIZWFkcm9vbSA9CisgICAgICAgIG1fc2NoZWR1bGVyLT5t
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOworICAgIAorICAgIGRvdWJsZSBoZWFkcm9v
bUZ1bGxuZXNzID0KKyAgICAgICAgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgLyBtYXhIZWFk
cm9vbTsKKyAgICAKKyAgICAvLyBoZWFkcm9vbUZ1bGxuZXNzIGNhbiBiZSBOYU4gYW5kIG90aGVy
IGludGVyZXN0aW5nIHRoaW5ncyBpZgorICAgIC8vIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVCZWdpbm5pbmcgaXMgemVyby4gV2Ugc2VlIHRoYXQgaW4gZGVidWcgdGVzdHMuIFRoaXMgY29k
ZQorICAgIC8vIGRlZmVuZHMgYWdhaW5zdCBhbGwgZmxvYXRpbmcgcG9pbnQgZHJhZ29ucy4KKyAg
ICAKKyAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzID49IDApKQorICAgICAgICBoZWFkcm9vbUZ1
bGxuZXNzID0gMDsKKyAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzIDw9IDEpKQorICAgICAgICBo
ZWFkcm9vbUZ1bGxuZXNzID0gMTsKKyAgICAKKyAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0aW9u
ID0gMSAtIGhlYWRyb29tRnVsbG5lc3M7CisgICAgCisgICAgLy8gU2NhbGUgdGhlIG11dGF0b3Ig
dXRpbGl6YXRpb24gaW50byB0aGUgcGVybWl0dGVkIHdpbmRvdy4KKyAgICBtdXRhdG9yVXRpbGl6
YXRpb24gPQorICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgKwor
ICAgICAgICBtdXRhdG9yVXRpbGl6YXRpb24gKiAoCisgICAgICAgICAgICBPcHRpb25zOjptYXhp
bXVtTXV0YXRvclV0aWxpemF0aW9uKCkgLQorICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11
dGF0b3JVdGlsaXphdGlvbigpKTsKKyAgICAKKyAgICByZXR1cm4gbXV0YXRvclV0aWxpemF0aW9u
OworfQorCitkb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0Q29sbGVj
dG9yVXRpbGl6YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiAxIC0gdGFyZ2V0TXV0YXRvclV0
aWxpemF0aW9uKCk7Cit9CisKK1NlY29uZHMgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6
ZWxhcHNlZEluUGVyaW9kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fbm93IC0gbV9zY2hlZHVs
ZXItPm1faW5pdGlhbFRpbWUpICUgbV9zY2hlZHVsZXItPm1fcGVyaW9kOworfQorCitkb3VibGUg
U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6cGhhc2UoKSBjb25zdAoreworICAgIHJldHVy
biBlbGFwc2VkSW5QZXJpb2QoKSAvIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKK30KKworYm9vbCBT
cGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpzaG91bGRCZVJlc3VtZWQoKSBjb25zdAorewor
ICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQorICAgICAgICBy
ZXR1cm4gcGhhc2UoKSA8PSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKKyAgICByZXR1cm4g
cGhhc2UoKSA+IHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCk7Cit9CisKK01vbm90b25pY1Rp
bWUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRvUmVzdW1lKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoIXNob3VsZEJlUmVzdW1lZCgpKTsKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVj
dG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKKyAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZElu
UGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7CisgICAgcmV0dXJuIG1fbm93IC0gZWxh
cHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRDb2xsZWN0b3JV
dGlsaXphdGlvbigpOworfQorCitNb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVj
aXNpb246OnRpbWVUb1N0b3AoKSBjb25zdAoreworICAgIEFTU0VSVChzaG91bGRCZVJlc3VtZWQo
KSk7CisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCisgICAg
ICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVy
aW9kICogdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7CisgICAgcmV0dXJuIG1fbm93IC0gZWxh
cHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Cit9CisKK1NwYWNlVGltZVNj
aGVkdWxlcjo6U3BhY2VUaW1lU2NoZWR1bGVyKEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVh
cCkKKyAgICAsIG1fcGVyaW9kKFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoT3B0aW9uczo6Y29u
Y3VycmVudEdDUGVyaW9kTVMoKSkpCisgICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVCZWdpbm5pbmcoaGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlKQorICAgICwgbV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kKAorICAgICAgICBPcHRpb25zOjpjb25jdXJyZW50
R0NNYXhIZWFkcm9vbSgpICoKKyAgICAgICAgc3RkOjptYXg8ZG91YmxlPihtX2J5dGVzQWxsb2Nh
dGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcsIGhlYXAubV9tYXhFZGVuU2l6ZSkpCit7CisgICAg
c25hcFBoYXNlKCk7Cit9CisKK3ZvaWQgU3BhY2VUaW1lU2NoZWR1bGVyOjpzbmFwUGhhc2UoKQor
eworICAgIG1faW5pdGlhbFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKworU3BhY2VU
aW1lU2NoZWR1bGVyOjpEZWNpc2lvbiBTcGFjZVRpbWVTY2hlZHVsZXI6OmN1cnJlbnREZWNpc2lv
bigpCit7CisgICAgRGVjaXNpb24gcmVzdWx0OworICAgIHJlc3VsdC5tX3NjaGVkdWxlciA9IHRo
aXM7CisgICAgcmVzdWx0Lm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSBtX2hlYXAubV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZTsKKyAgICByZXN1bHQubV9ub3cgPSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0
YXRvclNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIxMDQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0
LDEwNSArMjQsMTk1IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNw
YWNlVGltZVNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIu
aCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWRvdWJs
ZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24o
KSBjb25zdAorLy8gVGhlIHNjaGVkdWxlciB3aWxsIG9mdGVuIG1ha2UgZGVjaXNpb25zIGJhc2Vk
IG9uIHN0YXRlIHRoYXQgaXMgaW4gZmx1eC4gSXQgd2lsbCBiZSBmaW5lIHNvCisvLyBsb25nIGFz
IG11bHRpcGxlIHVzZXMgb2YgdGhlIHNhbWUgdmFsdWUgYWxsIHNlZSB0aGUgc2FtZSB2YWx1ZS4g
V2Ugd291bGRuJ3QgZ2V0IHRoaXMgZm9yIGZyZWUsCisvLyBzaW5jZSBvdXIgbmVlZCB0byBtb2R1
bGFyaXplIHRoZSBjYWxjdWxhdGlvbiByZXN1bHRzIGluIGEgdGVuZGVuY3kgdG8gYWNjZXNzIHRo
ZSBzYW1lIG11dGFibGUKKy8vIGZpZWxkIGluIEhlYXAgbXVsdGlwbGUgdGltZXMsIGFuZCB0byBh
Y2Nlc3MgdGhlIGN1cnJlbnQgdGltZSBtdWx0aXBsZSB0aW1lcy4KK2NsYXNzIFNwYWNlVGltZU11
dGF0b3JTY2hlZHVsZXI6OlNuYXBzaG90IHsKK3B1YmxpYzoKKyAgICBTbmFwc2hvdChTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyJiBzY2hlZHVsZXIpCisgICAgeworICAgICAgICBtX25vdyA9IE1v
bm90b25pY1RpbWU6Om5vdygpOworICAgICAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0g
c2NoZWR1bGVyLmJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlSW1wbCgpOworICAgIH0KKyAgICAKKyAg
ICBNb25vdG9uaWNUaW1lIG5vdygpIGNvbnN0IHsgcmV0dXJuIG1fbm93OyB9CisgICAgCisgICAg
ZG91YmxlIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBNb25vdG9uaWNUaW1lIG1f
bm93OworICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOworfTsKKworU3BhY2VU
aW1lTXV0YXRvclNjaGVkdWxlcjo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcihIZWFwJiBoZWFw
KQorICAgIDogbV9oZWFwKGhlYXApCisgICAgLCBtX3BlcmlvZChTZWNvbmRzOjpmcm9tTWlsbGlz
ZWNvbmRzKE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkpKQogewotICAgIGRvdWJsZSBi
eXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSA9Ci0gICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGUgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5u
aW5nOwotICAgIAotICAgIGRvdWJsZSBtYXhIZWFkcm9vbSA9Ci0gICAgICAgIG1fc2NoZWR1bGVy
LT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgLSBtX3NjaGVkdWxlci0+bV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwotICAgIAotICAgIGRvdWJsZSBoZWFk
cm9vbUZ1bGxuZXNzID0KLSAgICAgICAgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgLyBtYXhI
ZWFkcm9vbTsKLSAgICAKLSAgICAvLyBoZWFkcm9vbUZ1bGxuZXNzIGNhbiBiZSBOYU4gYW5kIG90
aGVyIGludGVyZXN0aW5nIHRoaW5ncyBpZgotICAgIC8vIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xl
QXRUaGVCZWdpbm5pbmcgaXMgemVyby4gV2Ugc2VlIHRoYXQgaW4gZGVidWcgdGVzdHMuIFRoaXMg
Y29kZQotICAgIC8vIGRlZmVuZHMgYWdhaW5zdCBhbGwgZmxvYXRpbmcgcG9pbnQgZHJhZ29ucy4K
LSAgICAKLSAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzID49IDApKQotICAgICAgICBoZWFkcm9v
bUZ1bGxuZXNzID0gMDsKLSAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzIDw9IDEpKQotICAgICAg
ICBoZWFkcm9vbUZ1bGxuZXNzID0gMTsKLSAgICAKLSAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0
aW9uID0gMSAtIGhlYWRyb29tRnVsbG5lc3M7Cit9CisKK1NwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXI6On5TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyKCkKK3sKK30KKworTXV0YXRvclNjaGVkdWxl
cjo6U3RhdGUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6c3RhdGUoKSBjb25zdAoreworICAg
IHJldHVybiBtX3N0YXRlOworfQorCit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmJl
Z2luQ29sbGVjdGlvbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBOb3JtYWwp
OworICAgIG1fc3RhdGUgPSBTdG9wcGVkOworICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CisKKyAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcg
PSBtX2hlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZTsKKyAgICBtX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlQXRUaGVFbmQgPSAKKyAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVh
ZHJvb20oKSAqCisgICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0FsbG9jYXRlZFRoaXND
eWNsZUF0VGhlQmVnaW5uaW5nLCBtX2hlYXAubV9tYXhFZGVuU2l6ZSk7Cit9CisKK3ZvaWQgU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6ZGlkU3RvcCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV9zdGF0ZSA9PSBTdG9wcGVkIHx8IG1fc3RhdGUgPT0gUmVzdW1lZCk7CisgICAgbV9zdGF0ZSA9
IFN0b3BwZWQ7Cit9CisKK3ZvaWQgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6d2lsbFJlc3Vt
ZSgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBTdG9wcGVkIHx8IG1fc3RhdGUg
PT0gUmVzdW1lZCk7CisgICAgbV9zdGF0ZSA9IFJlc3VtZWQ7Cit9CisKK3ZvaWQgU3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlcjo6ZGlkRXhlY3V0ZUNvbnN0cmFpbnRzKCkKK3sKKyAgICAvLyBJZiB3
ZSBleGVjdXRlIGNvbnN0cmFpbnRzLCB3ZSB3YW50IHRvIGZvcmdpdmUgdGhlIEdDIGZvciBhbGwg
b2YgdGhlIHRpbWUgaXQgaGFkIHN0b3BwZWQgdGhlCisgICAgLy8gd29ybGQgZm9yIGluIHRoaXMg
aW5jcmVtZW50LiBUaGlzIGhhY2sgaXMgZW1waXJpY2FsbHkgYmV0dGVyIHRoYW4gZXZlcnkgb3Ro
ZXIgaGV1cmlzdGljIEkKKyAgICAvLyB0cmllZCwgYmVjYXVzZSBpdCBqdXN0IG1lYW5zIHRoYXQg
dGhlIEdDIGlzIGhhcHB5IHRvIHBhdXNlIGZvciBsb25nZXIgd2hlbiBpdCdzIGRlYWxpbmcKKyAg
ICAvLyB3aXRoIHRoaW5ncyB0aGF0IGRvbid0IHBsYXkgd2VsbCB3aXRoIGNvbmN1cnJlbmN5Lgor
ICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Cit9CisKK01vbm90b25pY1Rp
bWUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6dGltZVRvU3RvcCgpCit7CisgICAgc3dpdGNo
IChtX3N0YXRlKSB7CisgICAgY2FzZSBOb3JtYWw6CisgICAgICAgIHJldHVybiBNb25vdG9uaWNU
aW1lOjppbmZpbml0eSgpOworICAgIGNhc2UgU3RvcHBlZDoKKyAgICAgICAgcmV0dXJuIE1vbm90
b25pY1RpbWU6Om5vdygpOworICAgIGNhc2UgUmVzdW1lZDogeworICAgICAgICBTbmFwc2hvdCBz
bmFwc2hvdCgqdGhpcyk7CisgICAgICAgIGlmICghc2hvdWxkQmVSZXN1bWVkKHNuYXBzaG90KSkK
KyAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdC5ub3coKTsKKyAgICAgICAgcmV0dXJuIHNuYXBz
aG90Lm5vdygpIC0gZWxhcHNlZEluUGVyaW9kKHNuYXBzaG90KSArIG1fcGVyaW9kOworICAgIH0g
fQogICAgIAotICAgIC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGludG8gdGhlIHBl
cm1pdHRlZCB3aW5kb3cuCi0gICAgbXV0YXRvclV0aWxpemF0aW9uID0KLSAgICAgICAgT3B0aW9u
czo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpICsKLSAgICAgICAgbXV0YXRvclV0aWxpemF0
aW9uICogKAotICAgICAgICAgICAgT3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigp
IC0KLSAgICAgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTW9ub3RvbmljVGlt
ZSgpOworfQorCitNb25vdG9uaWNUaW1lIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnRpbWVU
b1Jlc3VtZSgpCit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb3JtYWw6Cisg
ICAgY2FzZSBSZXN1bWVkOgorICAgICAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6bm93KCk7Cisg
ICAgY2FzZSBTdG9wcGVkOiB7CisgICAgICAgIFNuYXBzaG90IHNuYXBzaG90KCp0aGlzKTsKKyAg
ICAgICAgaWYgKHNob3VsZEJlUmVzdW1lZChzbmFwc2hvdCkpCisgICAgICAgICAgICByZXR1cm4g
c25hcHNob3Qubm93KCk7CisgICAgICAgIHJldHVybiBzbmFwc2hvdC5ub3coKSAtIGVsYXBzZWRJ
blBlcmlvZChzbmFwc2hvdCkgKyBtX3BlcmlvZCAqIGNvbGxlY3RvclV0aWxpemF0aW9uKHNuYXBz
aG90KTsKKyAgICB9IH0KICAgICAKLSAgICByZXR1cm4gbXV0YXRvclV0aWxpemF0aW9uOworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWUo
KTsKIH0KIAotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldENvbGxl
Y3RvclV0aWxpemF0aW9uKCkgY29uc3QKK3ZvaWQgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6
bG9nKCkKIHsKLSAgICByZXR1cm4gMSAtIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOworICAg
IEFTU0VSVChPcHRpb25zOjpsb2dHQygpKTsKKyAgICBTbmFwc2hvdCBzbmFwc2hvdCgqdGhpcyk7
CisgICAgZGF0YUxvZygKKyAgICAgICAgImE9IiwgZm9ybWF0KCIlLjBsZiIsIGJ5dGVzU2luY2VC
ZWdpbm5pbmdPZkN5Y2xlKHNuYXBzaG90KSAvIDEwMjQpLCAiIGtiICIsCisgICAgICAgICJoZj0i
LCBmb3JtYXQoIiUuM2xmIiwgaGVhZHJvb21GdWxsbmVzcyhzbmFwc2hvdCkpLCAiICIsCisgICAg
ICAgICJtdT0iLCBmb3JtYXQoIiUuM2xmIiwgbXV0YXRvclV0aWxpemF0aW9uKHNuYXBzaG90KSks
ICIgIik7CiB9CiAKLVNlY29uZHMgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6ZWxhcHNl
ZEluUGVyaW9kKCkgY29uc3QKK3ZvaWQgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6ZW5kQ29s
bGVjdGlvbigpCiB7Ci0gICAgcmV0dXJuIChtX25vdyAtIG1fc2NoZWR1bGVyLT5tX2luaXRpYWxU
aW1lKSAlIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKKyAgICBtX3N0YXRlID0gTm9ybWFsOworICAg
IG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiB9CiAKLWRvdWJsZSBTcGFjZVRp
bWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpwaGFzZSgpIGNvbnN0Citkb3VibGUgU3BhY2VUaW1lTXV0
YXRvclNjaGVkdWxlcjo6Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVJbXBsKCkKIHsKLSAgICByZXR1
cm4gZWxhcHNlZEluUGVyaW9kKCkgLyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7CisgICAgcmV0dXJu
IG1faGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOwogfQogCi1ib29sIFNwYWNlVGltZVNj
aGVkdWxlcjo6RGVjaXNpb246OnNob3VsZEJlUmVzdW1lZCgpIGNvbnN0Citkb3VibGUgU3BhY2VU
aW1lTXV0YXRvclNjaGVkdWxlcjo6Ynl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUoY29uc3QgU25h
cHNob3QmIHNuYXBzaG90KQogewotICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1
bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gcGhhc2UoKSA8PSB0YXJnZXRNdXRhdG9yVXRpbGl6
YXRpb24oKTsKLSAgICByZXR1cm4gcGhhc2UoKSA+IHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9u
KCk7CisgICAgcmV0dXJuIHNuYXBzaG90LmJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlKCkgLSBtX2J5
dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7CiB9CiAKLU1vbm90b25pY1RpbWUg
U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRvUmVzdW1lKCkgY29uc3QKK2RvdWJs
ZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjptYXhIZWFkcm9vbSgpCiB7Ci0gICAgQVNTRVJU
KCFzaG91bGRCZVJlc3VtZWQoKSk7Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJl
c3VtZUZpcnN0KCkpCi0gICAgICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsg
bV9zY2hlZHVsZXItPm1fcGVyaW9kOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlv
ZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24o
KTsKKyAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kIC0gbV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwogfQogCi1Nb25vdG9uaWNUaW1lIFNw
YWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRpbWVUb1N0b3AoKSBjb25zdAorZG91YmxlIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmhlYWRyb29tRnVsbG5lc3MoY29uc3QgU25hcHNob3Qm
IHNuYXBzaG90KQogewotICAgIEFTU0VSVChzaG91bGRCZVJlc3VtZWQoKSk7Ci0gICAgaWYgKE9w
dGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCi0gICAgICAgIHJldHVybiBtX25v
dyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0TXV0
YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkg
KyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7CisgICAgZG91YmxlIHJlc3VsdCA9IGJ5dGVzU2luY2VC
ZWdpbm5pbmdPZkN5Y2xlKHNuYXBzaG90KSAvIG1heEhlYWRyb29tKCk7CisKKyAgICAvLyBoZWFk
cm9vbUZ1bGxuZXNzIGNhbiBiZSBOYU4gYW5kIG90aGVyIGludGVyZXN0aW5nIHRoaW5ncyBpZgor
ICAgIC8vIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcgaXMgemVyby4gV2Ug
c2VlIHRoYXQgaW4gZGVidWcgdGVzdHMuIFRoaXMgY29kZQorICAgIC8vIGRlZmVuZHMgYWdhaW5z
dCBhbGwgZmxvYXRpbmcgcG9pbnQgZHJhZ29ucy4KKyAgICAKKyAgICBpZiAoIShyZXN1bHQgPj0g
MCkpCisgICAgICAgIHJlc3VsdCA9IDA7CisgICAgaWYgKCEocmVzdWx0IDw9IDEpKQorICAgICAg
ICByZXN1bHQgPSAxOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotU3BhY2VUaW1lU2NoZWR1
bGVyOjpTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYgaGVhcCkKLSAgICA6IG1faGVhcChoZWFwKQot
ICAgICwgbV9wZXJpb2QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhPcHRpb25zOjpjb25jdXJy
ZW50R0NQZXJpb2RNUygpKSkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJl
Z2lubmluZyhoZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUpCi0gICAgLCBtX2J5dGVzQWxs
b2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQoCi0gICAgICAgIE9wdGlvbnM6OmNvbmN1cnJlbnRHQ01h
eEhlYWRyb29tKCkgKgotICAgICAgICBzdGQ6Om1heDxkb3VibGU+KG1fYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGVBdFRoZUJlZ2lubmluZywgaGVhcC5tX21heEVkZW5TaXplKSkKK2RvdWJsZSBTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjptdXRhdG9yVXRpbGl6YXRpb24oY29uc3QgU25hcHNob3Qm
IHNuYXBzaG90KQogewotICAgIHNuYXBQaGFzZSgpOworICAgIGRvdWJsZSBtdXRhdG9yVXRpbGl6
YXRpb24gPSAxIC0gaGVhZHJvb21GdWxsbmVzcyhzbmFwc2hvdCk7CisgICAgCisgICAgLy8gU2Nh
bGUgdGhlIG11dGF0b3IgdXRpbGl6YXRpb24gaW50byB0aGUgcGVybWl0dGVkIHdpbmRvdy4KKyAg
ICBtdXRhdG9yVXRpbGl6YXRpb24gPQorICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0
aWxpemF0aW9uKCkgKworICAgICAgICBtdXRhdG9yVXRpbGl6YXRpb24gKiAoCisgICAgICAgICAg
ICBPcHRpb25zOjptYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgLQorICAgICAgICAgICAgT3B0
aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpKTsKKyAgICAKKyAgICByZXR1cm4gbXV0
YXRvclV0aWxpemF0aW9uOwogfQogCi12b2lkIFNwYWNlVGltZVNjaGVkdWxlcjo6c25hcFBoYXNl
KCkKK2RvdWJsZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpjb2xsZWN0b3JVdGlsaXphdGlv
bihjb25zdCBTbmFwc2hvdCYgc25hcHNob3QpCiB7Ci0gICAgbV9pbml0aWFsVGltZSA9IE1vbm90
b25pY1RpbWU6Om5vdygpOworICAgIHJldHVybiAxIC0gbXV0YXRvclV0aWxpemF0aW9uKHNuYXBz
aG90KTsKIH0KIAotU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbiBTcGFjZVRpbWVTY2hlZHVs
ZXI6OmN1cnJlbnREZWNpc2lvbigpCitTZWNvbmRzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6
OmVsYXBzZWRJblBlcmlvZChjb25zdCBTbmFwc2hvdCYgc25hcHNob3QpCiB7Ci0gICAgRGVjaXNp
b24gcmVzdWx0OwotICAgIHJlc3VsdC5tX3NjaGVkdWxlciA9IHRoaXM7Ci0gICAgcmVzdWx0Lm1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSBtX2hlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZTsKLSAgICByZXN1bHQubV9ub3cgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIHJldHVybiAoc25hcHNob3Qubm93KCkgLSBtX3N0YXJ0VGltZSkgJSBtX3Bl
cmlvZDsKK30KKworZG91YmxlIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnBoYXNlKGNvbnN0
IFNuYXBzaG90JiBzbmFwc2hvdCkKK3sKKyAgICByZXR1cm4gZWxhcHNlZEluUGVyaW9kKHNuYXBz
aG90KSAvIG1fcGVyaW9kOworfQorCitib29sIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnNo
b3VsZEJlUmVzdW1lZChjb25zdCBTbmFwc2hvdCYgc25hcHNob3QpCit7CisgICAgcmV0dXJuIHBo
YXNlKHNuYXBzaG90KSA+IGNvbGxlY3RvclV0aWxpemF0aW9uKHNuYXBzaG90KTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oCShyZXZpc2lvbiAyMTA0MzMpCShmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oOjIxMDQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL01v
bm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSGVhcDsKKworY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyIHsKK3B1YmxpYzoK
KyAgICBjbGFzcyBEZWNpc2lvbiB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3NjaGVkdWxlcjsgfQorICAgICAgICAKKyAg
ICAgICAgZG91YmxlIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpIGNvbnN0OworICAgICAgICBk
b3VibGUgdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKSBjb25zdDsKKyAgICAgICAgU2Vjb25k
cyBlbGFwc2VkSW5QZXJpb2QoKSBjb25zdDsKKyAgICAgICAgZG91YmxlIHBoYXNlKCkgY29uc3Q7
CisgICAgICAgIGJvb2wgc2hvdWxkQmVSZXN1bWVkKCkgY29uc3Q7CisgICAgICAgIE1vbm90b25p
Y1RpbWUgdGltZVRvUmVzdW1lKCkgY29uc3Q7CisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRv
U3RvcCgpIGNvbnN0OworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xh
c3MgU3BhY2VUaW1lU2NoZWR1bGVyOworCisgICAgICAgIFNwYWNlVGltZVNjaGVkdWxlciogbV9z
Y2hlZHVsZXIgeyBudWxscHRyIH07CisgICAgICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlIHsgMCB9OworICAgICAgICBNb25vdG9uaWNUaW1lIG1fbm93OworICAgIH07CisgICAg
CisgICAgLy8gQ29uc3RydWN0IHRoZSBzY2hlZHVsZXIgYXQgdGhlIHN0YXJ0IG9mIGEgR0MgY3lj
bGUuCisgICAgU3BhY2VUaW1lU2NoZWR1bGVyKEhlYXAmKTsKKyAgICAKKyAgICAvLyBGb3JjZXMg
dGhlIG5leHQgcGhhc2UgdG8gc3RhcnQgbm93LgorICAgIHZvaWQgc25hcFBoYXNlKCk7CisgICAg
CisgICAgLy8gUmV0dXJucyBhIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IHNjaGVkdWxpbmcgZGVj
aXNpb24sIHdoaWNoIHdpbGwgYmUgdmFsaWQgc28gbG9uZyBhcworICAgIC8vIFNwYWNlVGltZVNj
aGVkdWxlciBpcyBsaXZlIGFuZCB5b3UgaGF2ZW4ndCBjYWxsZWQgc25hcFBoYXNlKCkuCisgICAg
RGVjaXNpb24gY3VycmVudERlY2lzaW9uKCk7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBEZWNpc2lvbjsKKworICAgIEhlYXAmIG1faGVhcDsKKyAgICBTZWNvbmRzIG1fcGVyaW9k
OworICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7Cisg
ICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZDsKKyAgICBNb25vdG9u
aWNUaW1lIG1faW5pdGlhbFRpbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXIuaAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDUzICsyNSw2
MSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Cisj
aW5jbHVkZSAiTXV0YXRvclNjaGVkdWxlci5oIgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIZWFwOwogCi1jbGFzcyBTcGFjZVRpbWVTY2hlZHVs
ZXIgeworLy8gVGhlIEpTQyBjb25jdXJyZW50IEdDIHNvbWV0aW1lcyBzdG9wcyB0aGUgd29ybGQg
aW4gb3JkZXIgdG8gc3RheSBhaGVhZCBvZiBpdC4gVGhlc2UgZGVsaWJlcmF0ZSwKKy8vIHN5bnRo
ZXRpYyBwYXVzZXMgZW5zdXJlIHRoYXQgdGhlIEdDIHdvbid0IGhhdmUgdG8gZG8gb25lIGh1Z2Ug
cGF1c2UgaW4gb3JkZXIgdG8gY2F0Y2ggdXAgdG8gdGhlCisvLyByZXRyZWF0aW5nIHdhdmVmcm9u
dC4gVGhlIHNjaGVkdWxlciBpcyBjYWxsZWQgInNwYWNlLXRpbWUiIGJlY2F1c2UgaXQgbGlua3Mg
dGhlIGFtb3VudCBvZiB0aW1lCisvLyB0aGF0IHRoZSB3b3JsZCBpcyBwYXVzZWQgZm9yIHRvIHRo
ZSBhbW91bnQgb2Ygc3BhY2UgdGhhdCB0aGUgd29ybGQgYWxsb2NhdGVkIHNpbmNlIHRoZSBHQyBj
eWNsZQorLy8gYmVnYW4uCisKK2NsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIgOiBwdWJs
aWMgTXV0YXRvclNjaGVkdWxlciB7CiBwdWJsaWM6Ci0gICAgY2xhc3MgRGVjaXNpb24gewotICAg
IHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9zY2hlZHVsZXI7IH0KLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSB0YXJnZXRNdXRhdG9y
VXRpbGl6YXRpb24oKSBjb25zdDsKLSAgICAgICAgZG91YmxlIHRhcmdldENvbGxlY3RvclV0aWxp
emF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIFNlY29uZHMgZWxhcHNlZEluUGVyaW9kKCkgY29uc3Q7
Ci0gICAgICAgIGRvdWJsZSBwaGFzZSgpIGNvbnN0OwotICAgICAgICBib29sIHNob3VsZEJlUmVz
dW1lZCgpIGNvbnN0OwotICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIGNvbnN0
OwotICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBjb25zdDsKLSAgICAgICAgCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIFNwYWNlVGltZVNjaGVkdWxlcjsKLQot
ICAgICAgICBTcGFjZVRpbWVTY2hlZHVsZXIqIG1fc2NoZWR1bGVyIHsgbnVsbHB0ciB9OwotICAg
ICAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSB7IDAgfTsKLSAgICAgICAgTW9u
b3RvbmljVGltZSBtX25vdzsKLSAgICB9OwotICAgIAotICAgIC8vIENvbnN0cnVjdCB0aGUgc2No
ZWR1bGVyIGF0IHRoZSBzdGFydCBvZiBhIEdDIGN5Y2xlLgotICAgIFNwYWNlVGltZVNjaGVkdWxl
cihIZWFwJik7Ci0gICAgCi0gICAgLy8gRm9yY2VzIHRoZSBuZXh0IHBoYXNlIHRvIHN0YXJ0IG5v
dy4KLSAgICB2b2lkIHNuYXBQaGFzZSgpOwotICAgIAotICAgIC8vIFJldHVybnMgYSBzbmFwc2hv
dCBvZiB0aGUgY3VycmVudCBzY2hlZHVsaW5nIGRlY2lzaW9uLCB3aGljaCB3aWxsIGJlIHZhbGlk
IHNvIGxvbmcgYXMKLSAgICAvLyBTcGFjZVRpbWVTY2hlZHVsZXIgaXMgbGl2ZSBhbmQgeW91IGhh
dmVuJ3QgY2FsbGVkIHNuYXBQaGFzZSgpLgotICAgIERlY2lzaW9uIGN1cnJlbnREZWNpc2lvbigp
OworICAgIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIoSGVhcCYpOworICAgIH5TcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyKCk7CisgICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICAKKyAgICB2b2lkIGJlZ2luQ29sbGVjdGlvbigpIG92ZXJyaWRlOworICAgIAorICAg
IHZvaWQgZGlkU3RvcCgpIG92ZXJyaWRlOworICAgIHZvaWQgd2lsbFJlc3VtZSgpIG92ZXJyaWRl
OworICAgIHZvaWQgZGlkRXhlY3V0ZUNvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7CisgICAgCisgICAg
TW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgb3ZlcnJpZGU7CisgICAgTW9ub3RvbmljVGltZSB0
aW1lVG9SZXN1bWUoKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGxvZygpIG92ZXJyaWRlOwor
ICAgIAorICAgIHZvaWQgZW5kQ29sbGVjdGlvbigpIG92ZXJyaWRlOwogICAgIAogcHJpdmF0ZToK
LSAgICBmcmllbmQgY2xhc3MgRGVjaXNpb247Ci0KKyAgICBjbGFzcyBTbmFwc2hvdDsKKyAgICBm
cmllbmQgY2xhc3MgU25hcHNob3Q7CisgICAgCisgICAgZG91YmxlIGJ5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlSW1wbCgpOworICAgIAorICAgIGRvdWJsZSBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNs
ZShjb25zdCBTbmFwc2hvdCYpOworICAgIGRvdWJsZSBtYXhIZWFkcm9vbSgpOworICAgIGRvdWJs
ZSBoZWFkcm9vbUZ1bGxuZXNzKGNvbnN0IFNuYXBzaG90Jik7CisgICAgZG91YmxlIG11dGF0b3JV
dGlsaXphdGlvbihjb25zdCBTbmFwc2hvdCYpOworICAgIGRvdWJsZSBjb2xsZWN0b3JVdGlsaXph
dGlvbihjb25zdCBTbmFwc2hvdCYpOworICAgIFNlY29uZHMgZWxhcHNlZEluUGVyaW9kKGNvbnN0
IFNuYXBzaG90Jik7CisgICAgZG91YmxlIHBoYXNlKGNvbnN0IFNuYXBzaG90Jik7CisgICAgYm9v
bCBzaG91bGRCZVJlc3VtZWQoY29uc3QgU25hcHNob3QmKTsKKyAgICAKICAgICBIZWFwJiBtX2hl
YXA7CiAgICAgU2Vjb25kcyBtX3BlcmlvZDsKLSAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZUF0VGhlQmVnaW5uaW5nOwotICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5
Y2xlQXRUaGVFbmQ7Ci0gICAgTW9ub3RvbmljVGltZSBtX2luaXRpYWxUaW1lOworICAgIFN0YXRl
IG1fc3RhdGUgeyBOb3JtYWwgfTsKKyAgICAKKyAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZUF0VGhlQmVnaW5uaW5nIHsgMCB9OworICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlQXRUaGVFbmQgeyAwIH07CisgICAgTW9ub3RvbmljVGltZSBtX3N0YXJ0VGltZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAyMTA0MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwCShub25leGlz
dGVudCkKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNwYWNlVGltZVNj
aGVkdWxlci5oIgotCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldE11dGF0b3JVdGls
aXphdGlvbigpIGNvbnN0Ci17Ci0gICAgZG91YmxlIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xl
ID0KLSAgICAgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAtIG1fc2NoZWR1bGVyLT5tX2J5
dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7Ci0gICAgCi0gICAgZG91YmxlIG1h
eEhlYWRyb29tID0KLSAgICAgICAgbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGVBdFRoZUVuZCAtIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVC
ZWdpbm5pbmc7Ci0gICAgCi0gICAgZG91YmxlIGhlYWRyb29tRnVsbG5lc3MgPQotICAgICAgICBi
eXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSAvIG1heEhlYWRyb29tOwotICAgIAotICAgIC8vIGhl
YWRyb29tRnVsbG5lc3MgY2FuIGJlIE5hTiBhbmQgb3RoZXIgaW50ZXJlc3RpbmcgdGhpbmdzIGlm
Ci0gICAgLy8gYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6ZXJvLiBX
ZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0cy4gVGhpcyBjb2RlCi0gICAgLy8gZGVmZW5kcyBhZ2Fp
bnN0IGFsbCBmbG9hdGluZyBwb2ludCBkcmFnb25zLgotICAgIAotICAgIGlmICghKGhlYWRyb29t
RnVsbG5lc3MgPj0gMCkpCi0gICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAwOwotICAgIGlmICgh
KGhlYWRyb29tRnVsbG5lc3MgPD0gMSkpCi0gICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAxOwot
ICAgIAotICAgIGRvdWJsZSBtdXRhdG9yVXRpbGl6YXRpb24gPSAxIC0gaGVhZHJvb21GdWxsbmVz
czsKLSAgICAKLSAgICAvLyBTY2FsZSB0aGUgbXV0YXRvciB1dGlsaXphdGlvbiBpbnRvIHRoZSBw
ZXJtaXR0ZWQgd2luZG93LgotICAgIG11dGF0b3JVdGlsaXphdGlvbiA9Ci0gICAgICAgIE9wdGlv
bnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSArCi0gICAgICAgIG11dGF0b3JVdGlsaXph
dGlvbiAqICgKLSAgICAgICAgICAgIE9wdGlvbnM6Om1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24o
KSAtCi0gICAgICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkpOwot
ICAgIAotICAgIHJldHVybiBtdXRhdG9yVXRpbGl6YXRpb247Ci19Ci0KLWRvdWJsZSBTcGFjZVRp
bWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIDEgLSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKLX0KLQotU2Vj
b25kcyBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjplbGFwc2VkSW5QZXJpb2QoKSBjb25z
dAotewotICAgIHJldHVybiAobV9ub3cgLSBtX3NjaGVkdWxlci0+bV9pbml0aWFsVGltZSkgJSBt
X3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci19Ci0KLWRvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRl
Y2lzaW9uOjpwaGFzZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVsYXBzZWRJblBlcmlvZCgpIC8g
bV9zY2hlZHVsZXItPm1fcGVyaW9kOwotfQotCi1ib29sIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVj
aXNpb246OnNob3VsZEJlUmVzdW1lZCgpIGNvbnN0Ci17Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxl
Y3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCi0gICAgICAgIHJldHVybiBwaGFzZSgpIDw9IHRhcmdl
dE11dGF0b3JVdGlsaXphdGlvbigpOwotICAgIHJldHVybiBwaGFzZSgpID4gdGFyZ2V0Q29sbGVj
dG9yVXRpbGl6YXRpb24oKTsKLX0KLQotTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6
OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUoKSBjb25zdAotewotICAgIEFTU0VSVCghc2hvdWxkQmVS
ZXN1bWVkKCkpOwotICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgp
KQotICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVy
LT5tX3BlcmlvZDsKLSAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2No
ZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCk7Ci19Ci0KLU1v
bm90b25pY1RpbWUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRvU3RvcCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKHNob3VsZEJlUmVzdW1lZCgpKTsKLSAgICBpZiAoT3B0aW9uczo6
Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxh
cHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRNdXRhdG9yVXRp
bGl6YXRpb24oKTsKLSAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2No
ZWR1bGVyLT5tX3BlcmlvZDsKLX0KLQotU3BhY2VUaW1lU2NoZWR1bGVyOjpTcGFjZVRpbWVTY2hl
ZHVsZXIoSGVhcCYgaGVhcCkKLSAgICA6IG1faGVhcChoZWFwKQotICAgICwgbV9wZXJpb2QoU2Vj
b25kczo6ZnJvbU1pbGxpc2Vjb25kcyhPcHRpb25zOjpjb25jdXJyZW50R0NQZXJpb2RNUygpKSkK
LSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyhoZWFwLm1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUpCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVFbmQoCi0gICAgICAgIE9wdGlvbnM6OmNvbmN1cnJlbnRHQ01heEhlYWRyb29tKCkgKgotICAg
ICAgICBzdGQ6Om1heDxkb3VibGU+KG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lu
bmluZywgaGVhcC5tX21heEVkZW5TaXplKSkKLXsKLSAgICBzbmFwUGhhc2UoKTsKLX0KLQotdm9p
ZCBTcGFjZVRpbWVTY2hlZHVsZXI6OnNuYXBQaGFzZSgpCi17Ci0gICAgbV9pbml0aWFsVGltZSA9
IE1vbm90b25pY1RpbWU6Om5vdygpOwotfQotCi1TcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9u
IFNwYWNlVGltZVNjaGVkdWxlcjo6Y3VycmVudERlY2lzaW9uKCkKLXsKLSAgICBEZWNpc2lvbiBy
ZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fc2NoZWR1bGVyID0gdGhpczsKLSAgICByZXN1bHQubV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZSA9IG1faGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOwot
ICAgIHJlc3VsdC5tX25vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaAkocmV2aXNpb24gMjEwNDMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmgJKG5vbmV4aXN0
ZW50KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUu
aD4KLSNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
SGVhcDsKLQotY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyIHsKLXB1YmxpYzoKLSAgICBjbGFzcyBE
ZWNpc2lvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gISFtX3NjaGVkdWxlcjsgfQotICAgICAgICAKLSAgICAgICAgZG91Ymxl
IHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpIGNvbnN0OwotICAgICAgICBkb3VibGUgdGFyZ2V0
Q29sbGVjdG9yVXRpbGl6YXRpb24oKSBjb25zdDsKLSAgICAgICAgU2Vjb25kcyBlbGFwc2VkSW5Q
ZXJpb2QoKSBjb25zdDsKLSAgICAgICAgZG91YmxlIHBoYXNlKCkgY29uc3Q7Ci0gICAgICAgIGJv
b2wgc2hvdWxkQmVSZXN1bWVkKCkgY29uc3Q7Ci0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRv
UmVzdW1lKCkgY29uc3Q7Ci0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvU3RvcCgpIGNvbnN0
OwotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgU3BhY2VUaW1l
U2NoZWR1bGVyOwotCi0gICAgICAgIFNwYWNlVGltZVNjaGVkdWxlciogbV9zY2hlZHVsZXIgeyBu
dWxscHRyIH07Ci0gICAgICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIHsgMCB9
OwotICAgICAgICBNb25vdG9uaWNUaW1lIG1fbm93OwotICAgIH07Ci0gICAgCi0gICAgLy8gQ29u
c3RydWN0IHRoZSBzY2hlZHVsZXIgYXQgdGhlIHN0YXJ0IG9mIGEgR0MgY3ljbGUuCi0gICAgU3Bh
Y2VUaW1lU2NoZWR1bGVyKEhlYXAmKTsKLSAgICAKLSAgICAvLyBGb3JjZXMgdGhlIG5leHQgcGhh
c2UgdG8gc3RhcnQgbm93LgotICAgIHZvaWQgc25hcFBoYXNlKCk7Ci0gICAgCi0gICAgLy8gUmV0
dXJucyBhIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IHNjaGVkdWxpbmcgZGVjaXNpb24sIHdoaWNo
IHdpbGwgYmUgdmFsaWQgc28gbG9uZyBhcwotICAgIC8vIFNwYWNlVGltZVNjaGVkdWxlciBpcyBs
aXZlIGFuZCB5b3UgaGF2ZW4ndCBjYWxsZWQgc25hcFBoYXNlKCkuCi0gICAgRGVjaXNpb24gY3Vy
cmVudERlY2lzaW9uKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBEZWNpc2lv
bjsKLQotICAgIEhlYXAmIG1faGVhcDsKLSAgICBTZWNvbmRzIG1fcGVyaW9kOwotICAgIGRvdWJs
ZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7Ci0gICAgZG91YmxlIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZDsKLSAgICBNb25vdG9uaWNUaW1lIG1faW5p
dGlhbFRpbWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OlN5bmNo
cm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcigpCit7Cit9CisKK1N5bmNocm9ub3Vz
U3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6flN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0
YXRvclNjaGVkdWxlcigpCit7Cit9CisKK011dGF0b3JTY2hlZHVsZXI6OlN0YXRlIFN5bmNocm9u
b3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6c3RhdGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3N0YXRlOworfQorCit2b2lkIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlcjo6YmVnaW5Db2xsZWN0aW9uKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRl
ID09IE5vcm1hbCk7CisgICAgbV9zdGF0ZSA9IFN0b3BwZWQ7Cit9CisKK01vbm90b25pY1RpbWUg
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjp0aW1lVG9TdG9wKCkKK3sK
KyAgICByZXR1cm4gbV9zdGF0ZSA9PSBOb3JtYWwgPyBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
IDogTW9ub3RvbmljVGltZTo6bm93KCk7Cit9CisKK01vbm90b25pY1RpbWUgU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjp0aW1lVG9SZXN1bWUoKQoreworICAgIHJldHVy
biBtX3N0YXRlID09IE5vcm1hbCA/IE1vbm90b25pY1RpbWU6Om5vdygpIDogTW9ub3RvbmljVGlt
ZTo6aW5maW5pdHkoKTsKK30KKwordm9pZCBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXI6OmVuZENvbGxlY3Rpb24oKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUg
PT0gU3RvcHBlZCk7CisgICAgbV9zdGF0ZSA9IE5vcm1hbDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJNdXRhdG9yU2NoZWR1bGVyLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CisvLyBUaGUgSlNDIGNvbmN1cnJlbnQgR0MgcmVsaWVzIG9uIHN0b3BwaW5nIHRoZSB3b3JsZCB0
byBzdGF5IGFoZWFkIG9mIHRoZSByZXRyZWF0aW5nIHdhdmVmcm9udC4KKy8vIEl0IHNvIGhhcHBl
bnMgdGhhdCB0aGUgc2FtZSBBUEkgY2FuIGJlIHJldXNlZCB0byBpbXBsZW1lbnQgYSBub24tY29u
Y3VycmVudCBHQyBtb2RlLCB3aGljaCB3ZQorLy8gdXNlIG9uIHBsYXRmb3JtcyB0aGF0IGRvbid0
IHN1cHBvcnQgdGhlIEdDJ3MgYXRvbWljaXR5IHByb3RvY29scy4gVGhhdCBtZWFucyBhbnl0aGlu
ZyBvdGhlcgorLy8gdGhhbiBYODYtNjQgYW5kIEFSTTY0LiBUaGlzIHNjaGVkdWxlciBpcyBhIGRy
b3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBjb25jdXJyZW50IEdDJ3MKKy8vIFNwYWNlVGltZU11
dGF0b3JTY2hlZHVsZXIuIEl0IHRlbGxzIHRoZSBHQyB0byBuZXZlciByZXN1bWUgdGhlIHdvcmxk
IG9uY2UgdGhlIEdDIGN5Y2xlIGJlZ2lucy4KKworY2xhc3MgU3luY2hyb25vdXNTdG9wVGhlV29y
bGRNdXRhdG9yU2NoZWR1bGVyIDogcHVibGljIE11dGF0b3JTY2hlZHVsZXIgeworcHVibGljOgor
ICAgIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcigpOworICAgIH5TeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIoKTsKKyAgICAKKyAgICBTdGF0ZSBz
dGF0ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgYmVnaW5Db2xsZWN0aW9uKCkg
b3ZlcnJpZGU7CisgICAgCisgICAgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgb3ZlcnJpZGU7
CisgICAgTW9ub3RvbmljVGltZSB0aW1lVG9SZXN1bWUoKSBvdmVycmlkZTsKKyAgICAKKyAgICB2
b2lkIGVuZENvbGxlY3Rpb24oKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBTdGF0ZSBtX3N0
YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNsb3RW
aXNpdG9yLmgiCisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFZpc2l0aW5nVGltZW91dCB7CitwdWJsaWM6CisgICAgVmlzaXRpbmdUaW1l
b3V0KCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZpc2l0aW5nVGltZW91dChTbG90VmlzaXRv
ciYgdmlzaXRvciwgYm9vbCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0
KQorICAgICAgICA6IG1fZGlkVmlzaXRTb21ldGhpbmcoZGlkVmlzaXRTb21ldGhpbmcpCisgICAg
ICAgICwgbV92aXNpdENvdW50QmVmb3JlKHZpc2l0b3IudmlzaXRDb3VudCgpKQorICAgICAgICAs
IG1fdGltZW91dCh0aW1lb3V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHZpc2l0
Q291bnQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
dmlzaXRvci52aXNpdENvdW50KCkgLSBtX3Zpc2l0Q291bnRCZWZvcmU7CisgICAgfQorCisgICAg
Ym9vbCBkaWRWaXNpdFNvbWV0aGluZyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5nIHx8IHZpc2l0Q291bnQodmlzaXRv
cik7CisgICAgfQorICAgIAorICAgIGJvb2wgc2hvdWxkVGltZU91dChTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGluZyh2aXNp
dG9yKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9OworICAgIHNpemVfdCBtX3Zpc2l0
Q291bnRCZWZvcmUgeyAwIH07CisgICAgTW9ub3RvbmljVGltZSBtX3RpbWVvdXQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAkocmV2aXNpb24gMjEwNDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsOCArMjAyLDYgQEAgdHlwZWRlZiBj
b25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihkb3VibGUsIG1heGltdW1NdXRhdG9yVXRp
bGl6YXRpb24sIDAuNywgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIGNvbmN1cnJl
bnRHQ01heEhlYWRyb29tLCAxLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBj
b25jdXJyZW50R0NQZXJpb2RNUywgMiwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihib29sLCBj
b2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAotICAg
IHYoZG91YmxlLCBjb2xsZWN0b3JQZXJtaXR0ZWRJZGxlUmF0aW8sIDAsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgc2NyaWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KGRvdWJsZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgbGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmLCAxMDAwMDAs
IE5vcm1hbCwgbnVsbHB0cikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298316</attachid>
            <date>2017-01-08 14:27:22 -0800</date>
            <delta_ts>2017-01-08 15:32:38 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>151587</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0OSBA
QAorMjAxNy0wMS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgdGhlIGNvbGxlY3RvcidzIGZpeHBvaW50IHNtYXJ0IGFib3V0IHNjaGVkdWxpbmcgd29y
aworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1OTEw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgZXZlcnkgdGltZSB0aGUgR0Mgd291bGQgcnVuIGFueSBj
b25zdHJhaW50cyBpbiBtYXJrVG9GaXhwb2ludCwgaXQKKyAgICAgICAgd291bGQgcnVuIGFsbCBv
ZiB0aGUgY29uc3RyYWludHMuIEl0IHdvdWxkIGFsd2F5cyBydW4gdGhlbSBpbiB0aGUgc2FtZSBv
cmRlci4gVGhhdCBtZWFucworICAgICAgICB0aGF0IHNvIGxvbmcgYXMgYW55IG9uZSBjb25zdHJh
aW50IHdhcyBnZW5lcmF0aW5nIG5ldyB3b3JrLCB3ZSdkIHBheSB0aGUgcHJpY2Ugb2YgYWxsCisg
ICAgICAgIGNvbnN0cmFpbnRzLiBUaGlzIGlzIHVzdWFsbHkgT0sgYmVjYXVzZSBtb3N0IGNvbnN0
cmFpbnRzIGFyZSBjaGVhcCBidXQgaXQgYXJ0aWZpY2lhbGx5CisgICAgICAgIGluZmxhdGVzIHRo
ZSBjb3N0IG9mIHNsb3cgY29uc3RyYWludHMgLSBlc3BlY2lhbGx5IG9uZXMgdGhhdCBhcmUgZXhw
ZW5zaXZlIGJ1dCB1c3VhbGx5CisgICAgICAgIGdlbmVyYXRlIG5vIG5ldyB3b3JrLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBwYXRjaCByZWRvZXMgaG93IHRoZSBHQyBydW5zIGNvbnN0cmFpbnRz
IGJ5IGFwcGx5aW5nIGlkZWFzIGZyb20gZGF0YSBmbG93IGFuYWx5c2lzLgorICAgICAgICBUaGUg
R0Mgbm93IGJ1aWxkcyBhIE1hcmtpbmdDb25zdHJhaW50U2V0IHdoZW4gaXQgYm9vdHMgdXAsIGFu
ZCB0aGlzIGNvbnRhaW5zIGFsbCBvZiB0aGUKKyAgICAgICAgY29uc3RyYWludHMgYXMgd2VsbCBh
cyBzb21lIG1ldGEtZGF0YSBhYm91dCB0aGVtLiBOb3csIG1hcmtUb0ZpeHBvaW50IGp1c3QgY2Fs
bHMgaW50bworICAgICAgICBNYXJraW5nQ29uc3RyYWludFNldCB0byBleGVjdXRlIGNvbnN0cmFp
bnRzLiBCZWNhdXNlIGNvbnN0cmFpbnQgZXhlY3V0aW9uIGFuZCBzY2hlZHVsaW5nCisgICAgICAg
IG5lZWQgdG8gYmUgYXdhcmUgb2YgZWFjaCBvdGhlciwgSSByZXdyb3RlIG1hcmtUb0ZpeHBvaW50
IGluIHN1Y2ggYSB3YXkgdGhhdCBpdCdzIG1vcmUKKyAgICAgICAgb2J2aW91cyBob3cgdGhlIEdD
IGdvZXMgYmV0d2VlbiBjb25zdHJhaW50IHNvbHZpbmcsIG1hcmtpbmcgd2l0aCBzdG9wcGVkIG11
dGF0b3IsIGFuZAorICAgICAgICBtYXJraW5nIHdpdGggcmVzdW1lZCBtdXRhdG9yLiBUaGlzIGFs
c28gY2hhbmdlcyB0aGUgc2NoZWR1bGVyIEFQSSBpbiBzdWNoIGEgd2F5IHRoYXQgYQorICAgICAg
ICBzeW5jaHJvbm91cyBzdG9wLXRoZS13b3JsZCBjb2xsZWN0aW9uIG5vIGxvbmdlciBuZWVkcyB0
byBkbyBmYWtlIHN0b3AvcmVzdW1lIC0gaW5zdGVhZCB3ZQorICAgICAgICBqdXN0IHN3YXAgdGhl
IHNwYWNlLXRpbWUgc2NoZWR1bGVyIGZvciB0aGUgc3RvcC10aGUtd29ybGQgc2NoZWR1bGVyLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIGJpZyBzdHJlYW1saW5pbmcgb2YgdGhlIEdDLiBU
aGlzIGlzIGEgc3BlZWQtdXAgaW4gR0MtaGVhdnkgdGVzdHMgYmVjYXVzZSB3ZQorICAgICAgICBu
b3cgZXhlY3V0ZSBtb3N0IGNvbnN0cmFpbnRzIGV4YWN0bHkgdHdpY2UgcmVnYXJkbGVzcyBvZiBo
b3cgbWFueSB0b3RhbCBmaXhwb2ludAorICAgICAgICBpdGVyYXRpb25zIHdlIGRvLiBOb3csIHdo
ZW4gd2UgcnVuIG91dCBvZiBtYXJraW5nIHdvcmssIHRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxs
IGp1c3QKKyAgICAgICAgcnVuIHRoZSBjb25zdHJhaW50IHRoYXQgaXMgbW9zdCBsaWtlbHkgdG8g
Z2VuZXJhdGUgbmV3IHZpc2l0aW5nIHdvcmssIGFuZCBpZiBpdCBkb2VzCisgICAgICAgIGdlbmVy
YXRlIHdvcmssIHRoZW4gdGhlIEdDIG5vdyBnb2VzIGJhY2sgdG8gbWFya2luZy4gQmVmb3JlLCBp
dCB3b3VsZCBydW4gKmFsbCoKKyAgICAgICAgY29uc3RyYWludHMgYW5kIHRoZW4gZ28gYmFjayB0
byBtYXJraW5nLiBUaGUgY29uc3RyYWludCBzb2x2ZXIgaXMgYXJtZWQgd2l0aCB0aHJlZQorICAg
ICAgICBpbmZvcm1hdGlvbiBzaWduYWxzIHRoYXQgaXQgdXNlcyB0byBzb3J0IHRoZSBjb25zdHJh
aW50cyBpbiBvcmRlciBvZiBkZXNjZW5kaW5nIGxpa2VsaWhvb2QKKyAgICAgICAgdG8gZ2VuZXJh
dGUgbmV3IG1hcmtpbmcgd29yay4gVGhlbiBpdCBydW5zIHRoZW0gaW4gdGhhdCBvcmRlciB1bnRp
bCBpdCB0aGVyZSBpcyBuZXcKKyAgICAgICAgbWFya2luZyB3b3JrLiBUaGUgc2lnbmFscyBhcmU6
CisgICAgICAgIAorICAgICAgICAxKSBXaGV0aGVyIHRoZSBjb25zdHJhaW50IGlzIGdyZXllZCBi
eSBtYXJraW5nIG9yIGV4ZWN1dGlvbi4gV2UgY2FsbCB0aGlzIHRoZSB2b2xhdGlsaXR5CisgICAg
ICAgICAgIG9mIHRoZSBjb25zdHJhaW50LiBGb3IgZXhhbXBsZSwgd2VhayByZWZlcmVuY2UgY29u
c3RyYWludHMgaGF2ZSBHcmV5ZWRCeU1hcmtpbmcgYXMKKyAgICAgICAgICAgdGhlaXIgdm9sYXRp
bGl0eSBiZWNhdXNlIHRoZXkgYXJlIG1vc3QgbGlrZWx5IHRvIGhhdmUgc29tZXRoaW5nIHRvIHNh
eSBhZnRlciB3ZSd2ZSBkb25lCisgICAgICAgICAgIHNvbWUgbWFya2luZy4gT24gdGhlIG90aGVy
IGhhbmQsIGNvbnNlcnZhdGl2ZSByb290cyBoYXZlIEdyZXllZEJ5RXhlY3V0aW9uIGFzIHRoZWly
CisgICAgICAgICAgIHZvbGF0aWxpdHkgYmVjYXVzZSB0aGV5IHdpbGwgZ2l2ZSBuZXcgaW5mb3Jt
YXRpb24gYW55dGltZSB3ZSBsZXQgdGhlIG11dGF0b3IgcnVuLiBUaGUKKyAgICAgICAgICAgY29u
c3RyYWludCBzb2x2ZXIgd2lsbCBvbmx5IHJ1biBHcmV5ZWRCeUV4ZWN1dGlvbiBjb25zdHJhaW50
cyBhcyByb290cyBhbmQgYWZ0ZXIgdGhlCisgICAgICAgICAgIEdyZXllZEJ5TWFya2luZyBjb25z
dHJhaW50cyBnbyBzaWxlbnQuIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGRvbid0IHRyeSB0byBzY2Fu
CisgICAgICAgICAgIGNvbnNlcnZhdGl2ZSByb290cyBldmVyeSB0aW1lIHdlIG5lZWQgdG8gcmUt
cnVuIHdlYWsgcmVmZXJlbmNlcyBhbmQgdmljZS12ZXJzYS4KKyAgICAgICAgICAgCisgICAgICAg
ICAgIEFub3RoZXIgd2F5IHRvIGxvb2sgYXQgaXQgaXMgdGhhdCB0aGUgY29uc3RyYWludCBzb2x2
ZXIgdHJpZXMgdG8gcHJlZGljdCBpZiB0aGUKKyAgICAgICAgICAgd2F2ZWZyb250IGlzIGFkdmFu
Y2luZyBvciByZXRyZWF0aW5nLiBUaGUgd2F2ZWZyb250IGlzIGFsbW9zdCBjZXJ0YWlubHkgYWR2
YW5jaW5nIHNvCisgICAgICAgICAgIGxvbmcgYXMgdGhlIG1hcmsgc3RhY2tzIGFyZSBub24tZW1w
dHkgb3Igc28gbG9uZyBhcyBhdCBsZWFzdCBvbmUgb2YgdGhlIEdyZXllZEJ5TWFya2luZworICAg
ICAgICAgICBjb25zdHJhaW50cyBpcyBzdGlsbCBwcm9kdWNpbmcgd29yay4gT3RoZXJ3aXNlIHRo
ZSB3YXZlZnJvbnQgaXMgYWxtb3N0IGNlcnRhaW5seQorICAgICAgICAgICByZXRyZWF0aW5nLiBJ
dCdzIG1vc3QgcHJvZml0YWJsZSB0byBydW4gR3JleWVkQnlNYXJraW5nIGNvbnN0cmFpbnRzIHdo
ZW4gdGhlIHdhdmVmcm9udAorICAgICAgICAgICBpcyBhZHZhbmNpbmcsIGFuZCBtb3N0IHByb2Zp
dGFibGUgdG8gcnVuIEdyZXllZEJ5RXhlY3V0aW9uIGNvbnN0cmFpbnRzIHdoZW4gdGhlCisgICAg
ICAgICAgIHdhdmVmcm9udCBpcyByZXRyZWF0aW5nLgorICAgICAgICAgICAKKyAgICAgICAgICAg
V2UgdXNlIHRoZSBwcmVkaWN0ZWQgd2F2ZWZyb250IGRpcmVjdGlvbiBhbmQgdGhlIHZvbGF0aWxp
dHkgb2YgY29uc3RyYWludHMgYXMgYQorICAgICAgICAgICBmaXJzdC1vcmRlciBzaWduYWwgb2Yg
Y29uc3RyYWludCBwcm9maXRhYmlsaXR5LgorICAgICAgICAKKyAgICAgICAgMikgSG93IG11Y2gg
dmlzaXRpbmcgd29yayB3YXMgY3JlYXRlZCB0aGUgbGFzdCB0aW1lIHRoZSBjb25zdHJhaW50IHJh
bi4gVGhlIHNvbHZlcgorICAgICAgICAgICByZW1lbWJlcnMgdGhlIGxhc3RWaXNpdENvdW50LCBh
bmQgdXNlcyBpdCB0byBwcmVkaWN0IGhvdyBtdWNoIHdvcmsgdGhlIGNvbnN0cmFpbnQgd2lsbAor
ICAgICAgICAgICBnZW5lcmF0ZSBuZXh0IHRpbWUuIEluIHByYWN0aWNlIHRoaXMgbWVhbnMgd2Ug
d2lsbCBrZWVwIHJlLXJ1bm5pbmcgdGhlIG9uZSBpbnRlcmVzdGluZworICAgICAgICAgICBjb25z
dHJhaW50IHVudGlsIGl0IHNodXRzIHVwLgorICAgICAgICAKKyAgICAgICAgMykgT3B0aW9uYWwg
d29yayBwcmVkaWN0b3JzIGZvciBzb21lIGNvbnN0cmFpbnRzLiBUaGUgY29uc3RyYWludCB0aGF0
IHNodWZmbGVzIHRoZSBtdXRhdG9yCisgICAgICAgICAgIG1hcmsgc3RhY2sgaW50byB0aGUgbWFp
biBTbG90VmlzaXRvcidzIG11dGF0b3IgbWFyayBzdGFjayBhbHdheXMga25vd3MgZXhhY3RseSBo
b3cgbXVjaAorICAgICAgICAgICB3b3JrIGl0IHdpbGwgY3JlYXRlLgorICAgICAgICAgICAKKyAg
ICAgICAgICAgVGhlIHN1bSBvZiAoMikgYW5kICgzKSBhcmUgdXNlZCBhcyBhIHNlY29uZC1vcmRl
ciBzaWduYWwgb2YgY29uc3RyYWludCBwcm9maXRhYmlsaXR5LgorICAgICAgICAKKyAgICAgICAg
VGhlIGNvbnN0cmFpbnQgc29sdmVyIHdpbGwgYWx3YXlzIHJ1biBhbGwgb2YgdGhlIEdyZXllZEJ5
RXhlY3V0aW9uIGNvbnN0cmFpbnRzIGF0IEdDCisgICAgICAgIHN0YXJ0LCBzaW5jZSB0aGVzZSBk
b3VibGUgYXMgdGhlIEdDJ3Mgcm9vdHMuIFRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxsIGFsd2F5
cyBydW4gYWxsIG9mCisgICAgICAgIHRoZSBHcmV5ZWRCeU1hcmtpbmcgY29uc3RyYWludHMgdGhl
IGZpcnN0IHRpbWUgdGhhdCBtYXJraW5nIHN0YWxscy4gT3RoZXIgdGhhbiB0aGF0LCB0aGUKKyAg
ICAgICAgc29sdmVyIHdpbGwga2VlcCBydW5uaW5nIGNvbnN0cmFpbnRzLCBzb3J0ZWQgYWNjb3Jk
aW5nIHRvIHRoZWlyIGxpa2VsaWhvb2QgdG8gY3JlYXRlIHdvcmssCisgICAgICAgIHVudGlsIGVp
dGhlciB3b3JrIGlzIGNyZWF0ZWQgb3Igd2UgcnVuIG91dCBvZiBjb25zdHJhaW50cyB0byBydW4u
IEdDIHRlcm1pbmF0aW9uIGhhcHBlbnMKKyAgICAgICAgd2hlbiB3ZSBydW4gb3V0IG9mIGNvbnN0
cmFpbnRzIHRvIHJ1bi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbmV3IGluZnJhc3RydWN0dXJl
IG1lYW5zIHRoYXQgd2UgaGF2ZSBhIG11Y2ggYmV0dGVyIGNoYW5jZSBvZiBkZWFsaW5nIHdpdGgg
d29yc3QtY2FzZQorICAgICAgICBET00gcGF0aG9sb2dpZXMuIElmIHdlIGNhbiBpbnRlbGxpZ2Vu
dGx5IGZhY3RvciBkaWZmZXJlbnQgZXZpbCBET00gdGhpbmdzIGludG8gZGlmZmVyZW50CisgICAg
ICAgIGNvbnN0cmFpbnRzIHdpdGggdGhlIHJpZ2h0IHdvcmsgcHJlZGljdGlvbnMgdGhlbiB0aGlz
IGNvdWxkIHJlZHVjZSB0aGUgY29zdCBvZiB0aG9zZSBET00KKyAgICAgICAgdGhpbmdzIGJ5IGEg
ZmFjdG9yIG9mIE4gd2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIGZpeHBvaW50IGl0ZXJhdGlvbnMg
dGhlIEdDIHR5cGljYWxseQorICAgICAgICBkb2VzLiBOIGlzIHVzdWFsbHkgYXJvdW5kIDUtNiBl
dmVuIGZvciBzaW1wbGUgaGVhcHMuCisgICAgICAgIAorICAgICAgICBNeSBwZXJmIG1lYXN1cmVt
ZW50cyBzYXk6CisgICAgICAgIAorICAgICAgICBQTFQzOiAwLjAyJSBmYXN0ZXIgd2l0aCA1LjMl
IGNvbmZpZGVuY2UuCisgICAgICAgIEpldFN0cmVhbTogMC4xNSUgZmFzdGVyIHdpdGggMTclIGNv
bmZpZGVuY2UuCisgICAgICAgIFNwZWVkb21ldGVyOiAwLjU4JSBmYXN0ZXIgd2l0aCA4MiUgY29u
ZmlkZW5jZS4KKyAgICAgICAgCisgICAgICAgIEhlcmUgYXJlIHRoZSBkZXRhaWxzIGZyb20gSmV0
U3RyZWFtOgorICAgICAgICAKKyAgICAgICAgc3BsYXk6IDEuMDIxNzN4IGZhc3RlciB3aXRoIDAu
OTk2ODQxIGNvbmZpZGVuY2UKKyAgICAgICAgc3BsYXktbGF0ZW5jeTogMS4wNjE3eCBmYXN0ZXIg
d2l0aCAwLjk4NzQ2MiBjb25maWRlbmNlCisgICAgICAgIHRvd2Vycy5jOiAxLjAxODUyeCBmYXN0
ZXIgd2l0aCAwLjkyMTI4IGNvbmZpZGVuY2UKKyAgICAgICAgY3J5cHRvLW1kNTogMS4wNjA1OHgg
ZmFzdGVyIHdpdGggMC40ODIzNjMgY29uZmlkZW5jZQorICAgICAgICBzY29yZTogMS4wMDE1Mngg
ZmFzdGVyIHdpdGggMC4xNjg5MiBjb25maWRlbmNlCisgICAgICAgIAorICAgICAgICBJIHRoaW5r
IHRoYXQgU3BlZWRvbWV0ZXIgaXMgbGVnaXRpbWF0ZWx5IGJlbmVmaXRpbmcgZnJvbSB0aGlzIGNo
YW5nZSBiYXNlZCBvbiBsb29raW5nIGF0CisgICAgICAgIC0tbG9nR0M9dHJ1ZSBvdXRwdXQuIFdl
IGFyZSBub3cgc3BlbmRpbmcgbGVzcyB0aW1lIHJlZXhlY3V0aW5nIGV4cGVuc2l2ZSBjb25zdHJh
aW50cy4gSQorICAgICAgICB0aGluayB0aGF0IEpldFN0cmVhbS9zcGxheSBpcyBhbHNvIGJlbmVm
aXRpbmcsIGJlY2F1c2UgYWx0aG91Z2ggdGhlIGNvbnN0cmFpbnRzIGl0IHNlZXMKKyAgICAgICAg
YXJlIGNoZWFwLCBpdCBzcGVuZHMgMzAlIG9mIGl0cyB0aW1lIGluIEdDIHNvIGV2ZW4gc21hbGwg
aW1wcm92ZW1lbnRzIG1hdHRlci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om1hcmtDb2RlQmxvY2tz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3Mp
OiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgICogZGZnL0RGR1Bs
YW5JbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Oml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MpOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6V29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpXb3JrbGlzdDo6cmVtZW1iZXJDb2RlQmxvY2tzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpyZW1lbWJlckNvZGVCbG9ja3MpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9E
RkdXb3JrbGlzdC5oOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyk6CisgICAgICAgIChK
U0M6OkRGRzo6V29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MpOgorICAgICAgICAqIGhl
YXAvQ29kZUJsb2NrU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0Ojp3cml0ZUJh
cnJpZXJDdXJyZW50bHlFeGVjdXRpbmcpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvQ29kZUJs
b2NrU2V0Lmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6aXRlcmF0ZSk6IERlbGV0ZWQu
CisgICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9ja1NldDo6aXRlcmF0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6aXRlcmF0
ZUN1cnJlbnRseUV4ZWN1dGluZyk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdB
bmRDb21waWxpbmdDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXRlcmF0ZUV4ZWN1
dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6bWFya1RvRml4cG9pbnQpOgorICAgICAgICAoSlNDOjpIZWFwOjplbmRNYXJraW5nKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdEluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6c3RvcElmTmVjZXNzYXJ5U2xvdyk6CisgICAgICAgIChKU0M6OkhlYXA6OmFjcXVpcmVBY2Nl
c3NTbG93KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcik6
CisgICAgICAgIChKU0M6OkhlYXA6OmJ1aWxkQ29uc3RyYWludFNldCk6CisgICAgICAgIChKU0M6
OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OlJlc3Vt
ZVRoZVdvcmxkU2NvcGU6OlJlc3VtZVRoZVdvcmxkU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpIZWFwOjpSZXN1bWVUaGVXb3JsZFNjb3BlOjp+UmVzdW1lVGhlV29ybGRTY29wZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29uc2VydmF0aXZlUm9vdHMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNl
cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9NYXJr
aW5nQ29uc3RyYWludC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dDo6TWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6
fk1hcmtpbmdDb25zdHJhaW50KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnJl
c2V0U3RhdHMpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
TWFya2luZ0NvbnN0cmFpbnQ6OmluZGV4KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFp
bnQ6OmFiYnJldmlhdGVkTmFtZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpu
YW1lKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6Omxhc3RWaXNpdENvdW50KToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKToKKyAg
ICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZSk6CisgICAgICAgIChK
U0M6Ok1hcmtpbmdDb25zdHJhaW50Ojp2b2xhdGlsaXR5KToKKyAgICAgICAgKiBoZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJh
aW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmRpZFZpc2l0U29tZXRo
aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRl
eHQ6OnNob3VsZFRpbWVPdXQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6
RXhlY3V0aW9uQ29udGV4dDo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkRXhlY3V0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KToKKyAgICAgICAg
KEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6On5NYXJraW5nQ29uc3RyYWludFNldCk6CisgICAg
ICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpyZXNldFN0YXRzKToKKyAgICAgICAgKEpT
Qzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQm9vdHN0cmFwKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0Ojppc1dhdmVmcm9udEFkdmFuY2luZyk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0
Ojppc1dhdmVmcm9udFJldHJlYXRpbmcpOgorICAgICAgICAqIGhlYXAvTXV0YXRvclNjaGVkdWxl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNdXRhdG9yU2NoZWR1bGVyOjpNdXRhdG9yU2No
ZWR1bGVyKToKKyAgICAgICAgKEpTQzo6TXV0YXRvclNjaGVkdWxlcjo6fk11dGF0b3JTY2hlZHVs
ZXIpOgorICAgICAgICAoSlNDOjpNdXRhdG9yU2NoZWR1bGVyOjpkaWRTdG9wKToKKyAgICAgICAg
KEpTQzo6TXV0YXRvclNjaGVkdWxlcjo6d2lsbFJlc3VtZSk6CisgICAgICAgIChKU0M6Ok11dGF0
b3JTY2hlZHVsZXI6OmRpZEV4ZWN1dGVDb25zdHJhaW50cyk6CisgICAgICAgIChKU0M6Ok11dGF0
b3JTY2hlZHVsZXI6OmxvZyk6CisgICAgICAgIChKU0M6Ok11dGF0b3JTY2hlZHVsZXI6OnNob3Vs
ZFN0b3ApOgorICAgICAgICAoSlNDOjpNdXRhdG9yU2NoZWR1bGVyOjpzaG91bGRSZXN1bWUpOgor
ICAgICAgICAqIGhlYXAvTXV0YXRvclNjaGVkdWxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFw
L09wYXF1ZVJvb3RTZXQuaDoKKyAgICAgICAgKEpTQzo6T3BhcXVlUm9vdFNldDo6YWRkKToKKyAg
ICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OnZpc2l0QXNDb25zdHJhaW50KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24pOgorICAgICAg
ICAoSlNDOjpTbG90VmlzaXRvcjo6aGFzV29yayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjpkcmFpbkZyb21TaGFyZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5JblBh
cmFsbGVsUGFzc2l2ZWx5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJv
b3QpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6OmFkZFRvVmlzaXRDb3VudCk6CisgICAgICAgICogaGVhcC9TcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Bh
Y2VUaW1lU2NoZWR1bGVyLmNwcC4KKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlcjo6U25hcHNob3Q6OlNuYXBzaG90KToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlcjo6U25hcHNob3Q6Om5vdyk6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXI6OlNuYXBzaG90OjpieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSk6CisgICAgICAg
IChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXIpOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjp+U3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlcik6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXI6OnN0YXRlKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6YmVn
aW5Db2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6
ZGlkU3RvcCk6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OndpbGxS
ZXN1bWUpOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpkaWRFeGVj
dXRlQ29uc3RyYWludHMpOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
Ojp0aW1lVG9TdG9wKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6
dGltZVRvUmVzdW1lKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6
bG9nKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6ZW5kQ29sbGVj
dGlvbik6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmJ5dGVzQWxs
b2NhdGVkVGhpc0N5Y2xlSW1wbCk6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hl
ZHVsZXI6OmJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlKToKKyAgICAgICAgKEpTQzo6U3BhY2VU
aW1lTXV0YXRvclNjaGVkdWxlcjo6bWF4SGVhZHJvb20pOgorICAgICAgICAoSlNDOjpTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyOjpoZWFkcm9vbUZ1bGxuZXNzKToKKyAgICAgICAgKEpTQzo6U3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6bXV0YXRvclV0aWxpemF0aW9uKToKKyAgICAgICAgKEpT
Qzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6Y29sbGVjdG9yVXRpbGl6YXRpb24pOgorICAg
ICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjplbGFwc2VkSW5QZXJpb2QpOgor
ICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpwaGFzZSk6CisgICAgICAg
IChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnNob3VsZEJlUmVzdW1lZCk6CisgICAg
ICAgIChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldE11dGF0b3JVdGls
aXphdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6RGVj
aXNpb246OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6ZWxhcHNlZEluUGVyaW9kKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6cGhhc2UpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpzaG91
bGRCZVJlc3VtZWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6
OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTcGFjZVRp
bWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpTcGFjZVRpbWVTY2hlZHVsZXIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6OnNuYXBQaGFzZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6Y3VycmVudERlY2lzaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmguCisgICAgICAg
IChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246Om9wZXJhdG9yIGJvb2wpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBoZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGhl
YXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6U3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKToKKyAgICAgICAgKEpTQzo6U3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjp+U3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyKToKKyAgICAgICAgKEpTQzo6U3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyOjpzdGF0ZSk6CisgICAgICAgIChKU0M6OlN5bmNocm9ub3Vz
U3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6YmVnaW5Db2xsZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjp0aW1lVG9TdG9w
KToKKyAgICAgICAgKEpTQzo6U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
Ojp0aW1lVG9SZXN1bWUpOgorICAgICAgICAoSlNDOjpTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11
dGF0b3JTY2hlZHVsZXI6OmVuZENvbGxlY3Rpb24pOgorICAgICAgICAqIGhlYXAvU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAv
VmlzaXRpbmdUaW1lb3V0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpWaXNpdGluZ1RpbWVvdXQ6
OlZpc2l0aW5nVGltZW91dCk6CisgICAgICAgIChKU0M6OlZpc2l0aW5nVGltZW91dDo6dmlzaXRD
b3VudCk6CisgICAgICAgIChKU0M6OlZpc2l0aW5nVGltZW91dDo6ZGlkVmlzaXRTb21ldGhpbmcp
OgorICAgICAgICAoSlNDOjpWaXNpdGluZ1RpbWVvdXQ6OnNob3VsZFRpbWVPdXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE3LTAxLTA2ICBTYWFtIEJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIHNsaWNlIGludHJpbnNpYyB0byB0aGUgREZH
L0ZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjEw
NDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC00OTcsNiArNDk3LDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBo
ZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJsb2NrLmNwcAogICAgIGhl
YXAvTWFya2VkU3BhY2UuY3BwCisgICAgaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKKyAgICBo
ZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAogICAgIGhlYXAvTXV0YXRvclN0YXRlLmNwcAog
ICAgIGhlYXAvU2xvdFZpc2l0b3IuY3BwCiAgICAgaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3Bw
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjEwNDk2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsMTMgQEAKIAkJMEYxRTNBNDYxNTM0
Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQzMTUzNENCQUQwMDBGOTQ1NiAvKiBE
RkdBcmd1bWVudFBvc2l0aW9uLmggKi87IH07CiAJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAv
KiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1h
dFN0YXRlLmggKi87IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBERkdTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZl
UGxhbi5oICovOyB9OworCQkwRjFGQjM4RTFFMTczQTY1MDBBOUJFNTAgLyogU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJv
bm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwICovOyB9OworCQkwRjFGQjM4RjFF
MTczQTY3MDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4
QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1
bGVyLmggKi87IH07CisJCTBGMUZCMzkwMUUxNzNBNkIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1
bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzhDMUUxNzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLzsgfTsKKwkJ
MEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTIxRTE3N0E2RjAwQTlC
RTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovOyB9OworCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJF
NTAgLyogREZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5o
ICovOyB9OworCQkwRjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5
NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi87IH07CisJCTBGMUZC
Mzk5MUUxRjY1RkIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAg
LyogTXV0YXRvclNjaGVkdWxlci5oICovOyB9OwogCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUg
LyogQWJvcnRSZWFzb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMUZFNTFCMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjAxNzdGMURDQURD
MzMwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3N0QxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zs
b3dJbmRleGluZy5jcHAgKi87IH07CiAJCTBGMjAxNzgwMURDQURDMzUwMEVBNTk1MCAvKiBERkdG
bG93SW5kZXhpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjAxNzdFMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAqLzsgfTsK
QEAgLTQ1NSw2ICs0NjIsMTAgQEAKIAkJMEY2NEIyNzkxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxF
ZGdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi87IH07CiAJCTBGNjRCMjdB
MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2
NEVBRjMxQzRFQ0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5QiAv
KiBBaXJBcmdJbmxpbmVzLmggKi87IH07CisJCTBGNjYwRTM3MUUwNTE3QjkwMDMxNDYyQyAvKiBN
YXJraW5nQ29uc3RyYWludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQu
Y3BwICovOyB9OworCQkwRjY2MEUzODFFMDUxN0JCMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYw
RTM0MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovOyB9OworCQkwRjY2
MEUzOTFFMDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzUxRTA1MTdCNzAw
MzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAqLzsgfTsKKwkJMEY2NjBFM0ExRTA1
MTdDMTAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2MEUzNjFFMDUxN0I4MDAzMTQ2MkMgLyog
TWFya2luZ0NvbnN0cmFpbnRTZXQuaCAqLzsgfTsKIAkJMEY2NjRDRTgxREEzMDRFRjAwQjAwQTEx
IC8qIENvZGVCbG9ja1NldElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjY0Q0U3MURBMzA0RUQwMEIwMEExMSAvKiBDb2RlQmxvY2tTZXRJ
bmxpbmVzLmggKi87IH07CiAJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZl
bmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc1Myw4ICs3NjQsOCBA
QAogCQkwRkREQkZCNTE2NjZFRUQ4MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVt
cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRE
QkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi87
IH07CiAJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRE
QkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyB9
OwogCQkwRkRFODdGOTFERkQwQzc2MDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRFODdGODFERkQwQzZE
MDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi87IH07Ci0JCTBGREU4N0ZDMURGRTZFNTEw
MDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRp
bWVTY2hlZHVsZXIuaCAqLzsgfTsKLQkJMEZERTg3RkQxREZFNkU1NDAwNjRDMzkwIC8qIFNwYWNl
VGltZVNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNw
cCAqLzsgfTsKKwkJMEZERTg3RkMxREZFNkU1MTAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgg
Ki87IH07CisJCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGREU4N0ZBMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNw
cCAqLzsgfTsKIAkJMEZERjY3RDIxRDlDNkQyNzAwMUI5ODI1IC8qIEIzS2luZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDExRDlDNjA4NjAw
MUI5ODI1IC8qIEIzS2luZC5oICovOyB9OwogCQkwRkRGNjdEMzFEOUM2RDJBMDAxQjk4MjUgLyog
QjNLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGREY2N0QwMUQ5QzYwODYwMDFCOTgyNSAvKiBCM0tpbmQuY3BwICovOyB9OwogCQkwRkRGNjdE
NjFEOURDNDQwMDAxQjk4MjUgLyogQWlyS2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNjdENDFEOURDNDNFMDAxQjk4MjUgLyogQWlyS2lu
ZC5jcHAgKi87IH07CkBAIC0yNTU5LDYgKzI1NzAsMTMgQEAKIAkJMEYxRTNBNDQxNTM0Q0JBRDAw
MEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RvdWJsZUZvcm1hdFN0YXRlLmg7IHBhdGggPSBkZmcvREZHRG91YmxlRm9y
bWF0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNTAxNTM3QzJD
QjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHU2xvd1Bh
dGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNjUxNTNB
MjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBwYXRoID0g
ZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0
YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
dXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIz
OTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBWaXNpdGluZ1RpbWVvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1BsYW5JbmxpbmVzLmg7IHBhdGggPSBk
ZmcvREZHUGxhbklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIz
OTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdElubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdX
b3JrbGlzdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOTgx
RTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJvcnRSZWFzb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyMDE3N0QxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGlu
Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGbG93SW5kZXhp
bmcuY3BwOyBwYXRoID0gZGZnL0RGR0Zsb3dJbmRleGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjAxNzdFMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmg7IHBh
dGggPSBkZmcvREZHRmxvd0luZGV4aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yODg0LDYgKzI5MDIsMTAgQEAKIAkJMEY2NEIyNzcxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxF
ZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxFZGdlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2
IC8qIENhbGxFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxFZGdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5
QiAvKiBBaXJBcmdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckFyZ0lubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJBcmdJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjYwRTMzMUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5n
Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjYwRTM0MUUw
NTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0cmFp
bnRTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUzNjFFMDUxN0I4
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NjRDRTcxREEzMDRFRDAwQjAwQTExIC8qIENvZGVCbG9ja1NldElubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrU2V0SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEg
LyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzE5Myw4ICsz
MjE1LDggQEAKIAkJMEZEREJGQjIxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YUR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkIzMTY2NkVFRDUw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgcGF0aCA9IGRmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGREU4N0Y4MURGRDBDNkQwMDY0QzM5MCAvKiBDZWxsQ29udGFpbmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENlbGxDb250YWluZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1l
U2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYWNl
VGltZVNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGREU4N0ZC
MURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3BhY2VUaW1lU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGREU4N0ZBMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREY2N0QwMUQ5QzYwODYwMDFCOTgy
NSAvKiBCM0tpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNL
aW5kLmNwcDsgcGF0aCA9IGIzL0IzS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGREY2N0QxMUQ5QzYwODYwMDFCOTgyNSAvKiBCM0tpbmQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNLaW5kLmg7IHBhdGggPSBiMy9CM0tpbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZERjY3RDQxRDlEQzQzRTAwMUI5ODI1IC8qIEFpcktpbmQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyS2luZC5jcHA7IHBh
dGggPSBiMy9haXIvQWlyS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
NzUxLDggKzU3NzMsMTQgQEAKIAkJCQkxNEQyRjNEODEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2Vk
U3BhY2UuY3BwICovLAogCQkJCTE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFj
ZS5oICovLAogCQkJCTBGN0M1RkI5MUQ4ODk1MDUwMDQ0RjVFMiAvKiBNYXJrZWRTcGFjZUlubGlu
ZXMuaCAqLywKKwkJCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnQuY3BwICovLAorCQkJCTBGNjYwRTM0MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludC5oICovLAorCQkJCTBGNjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludFNldC5jcHAgKi8sCisJCQkJMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdD
b25zdHJhaW50U2V0LmggKi8sCiAJCQkJMTQyRDZGMEUxMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgKi8sCiAJCQkJMTQyRDZGMEYxMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtTdGFjay5o
ICovLAorCQkJCTBGMUZCMzhDMUUxNzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNw
cCAqLywKKwkJCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5o
ICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuY3BwICov
LAogCQkJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKIAkJ
CQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovLApAQCAtNTc2
MSwxNCArNTc4OSwxNyBAQAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90Vmlz
aXRvci5jcHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9y
LmggKi8sCiAJCQkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5l
cy5oICovLAotCQkJCTBGREU4N0ZBMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hlZHVs
ZXIuY3BwICovLAotCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hl
ZHVsZXIuaCAqLywKKwkJCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0
YXRvclNjaGVkdWxlci5jcHAgKi8sCisJCQkJMEZERTg3RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkwRjdDRjk1MDFEQzAyN0Q3MDA5OEND
MTIgLyogU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwICovLAogCQkJCTBGN0NGOTUxMURDMDI3RDcw
MDk4Q0MxMiAvKiBTdG9wSWZOZWNlc3NhcnlUaW1lci5oICovLAogCQkJCTE0MkUzMTMyMTM0RkYw
QTYwMEFGQURCNSAvKiBTdHJvbmcuaCAqLywKIAkJCQkxNDU3MjI4NTE0MzdFMTQwMDA1RkRFMjYg
LyogU3Ryb25nSW5saW5lcy5oICovLAorCQkJCTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBT
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwICovLAorCQkJCTBGMUZC
MzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmls
dGVyLmggKi8sCiAJCQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIuaCAqLywKKwkJCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdU
aW1lb3V0LmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtl
eS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5o
ICovLAogCQkJCTFBQ0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLywKQEAgLTY5
OTUsNiArNzAyNiw3IEBACiAJCQkJMEYyQjlDREYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNo
aWxkcmVuLmggKi8sCiAJCQkJQTc4QTk3NzIxNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3Bw
ICovLAogCQkJCUE3OEE5NzczMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmggKi8sCisJCQkJ
MEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi8sCiAJCQkJREMw
MDAzOTAxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLywK
IAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlLmggKi8sCkBAIC03MDgzLDYgKzcxMTUsNyBAQAogCQkJCTBGQzk3RjND
MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmggKi8sCiAJ
CQkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLywKIAkJCQkw
RkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCAqLywKKwkJCQkwRjFGQjM5
NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi8sCiAJCQkpOwogCQkJ
bmFtZSA9IGRmZzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC03OTQ1LDYgKzc5Nzgs
NyBAQAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVC
YXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RjE0QkVBQTgyMDBBREM2NEIg
LyogQnl0ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIzOTMxRTE3
N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5
QTA3MjMwRUQxQ0UzMzAwRjFGNjgxIC8qIEJ5dGVjb2RlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMzI4REFFODFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVHZW5lcmF0b3JpZmlj
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjhEQUU5MUQzOEQwMDUwMDFBMjUyOSAvKiBC
eXRlY29kZUdyYXBoLmggaW4gSGVhZGVycyAqLywKQEAgLTg0NzgsNiArODUxMiw3IEBACiAJCQkJ
QTFENzkzMDExQjQzODY0QjAwNDUxNkY1IC8qIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUExMjU4NDZGMUI0NUEzNjAwMENDN0Y2QyAvKiBJbnRsTnVtYmVy
Rm9ybWF0UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyQkJGRjIxQjA0NEE4
QjAwNjY0QjY5IC8qIEludGxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzk3MUUx
QUY3RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwOEVCRTI0MUNFOEYzNTgwMDQ1MzE0NiAvKiBJbnRsT2JqZWN0SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOEI5RjZENTYxRDU5MTJGQTAwMUM3MzlGIC8qIEl0ZXJhdGlvbktpbmQu
aCBpbiBIZWFkZXJzICovLApAQCAtODU2Miw3ICs4NTk3LDkgQEAKIAkJCQkwRjJCNjZFRjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NkYwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MUYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rpb24uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGNjYwRTNBMUUwNTE3QzEwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4QkExNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rp
b25JbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2MEUzODFFMDUxN0JCMDAzMTQ2MkMg
LyogTWFya2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTlDMUMwMjRB
NDkwMDI0ODFFMiAvKiBKU0dlbmVyYXRvckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTg2NzQsNiArODcxMSw3
IEBACiAJCQkJQUQyRkNCRUIxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MjU2NjIxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNj
b3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxOTE2N0JBQkVFMDA2RDc2MEEgLyogSlNX
cmFwcGVyTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM4RjFFMTczQTY3MDBBOUJFNTAg
LyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQyRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNXcmFwcGVyT2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzJGRkQ2NDEzOTk4NUE4MDBFNTM2NUEgLyogS2V5d29yZExv
b2t1cC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzE5LDYgKzg3NTcsNyBAQAogCQkJCTg2M0IyM0Uw
MEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzMkFCMjQ0MURDRDc1RjQwMEQ3NTMzQSAvKiBNYWNyb0Fzc2VtYmxlckhlbHBlcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2QzU2OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fz
c2VtYmxlck1JUFMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzk2MUUxQUY3RTEwMEE5QkU1
MCAvKiBERkdQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2OEM2MzcxQjkwREUw
NDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODYwMTYxRTQwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaCBpbiBIZWFkZXJzICovLApAQCAtODkwMSw3ICs4OTQwLDcgQEAKIAkJCQlCQzE4QzQ2MzBF
MTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNo
ZUl0ZW0uaCBpbiBIZWFkZXJzICovLAotCQkJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBT
cGFjZVRpbWVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGREU4N0ZDMURGRTZFNTEw
MDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkI3RjM5RTE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1
bmtKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU0MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBT
cGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTM0LDYgKzg5NzMsNyBAQAogCQkJ
CUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8q
IFN1cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIzOTkxRTFGNjVGQjAwQTlC
RTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUFDMUE2
RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUFFMUE2
RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTk2QjczMjcxQkRBMDhFRjAwMzMxQjg0IC8qIFN5bWJvbENvbnN0cnVjdG9yLmx1dC5oIGluIEhl
YWRlcnMgKi8sCkBAIC05NzQzLDYgKzk3ODMsNyBAQAogCQkJCUE3RTVBM0E3MTc5NzQzMkQwMEU4
OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
MjEwN0VDMzc2MDA0MjdBNDggLyogQ29tcGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjZGQzc1MDE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjFGQjM4RTFFMTczQTY1MDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NkIxNkQ4MTJF
QjVCNTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNUI2QTc0RDE4QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNUZEMDA3OTE4OUIwNTEwMDA2MzMyMzEgLyogQ29uc29sZU1lc3NhZ2UuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC05NzU4LDYgKzk3OTksNyBAQAogCQkJCTE0N0YzOUM0MTA3RUMz
NzYwMDQyN0E0OCAvKiBEYXRlQ29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlDNTEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGNjYwRTM5MUUwNTE3QkYwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWlu
dFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyog
RGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3
IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkM4NEIzMUQx
RERBRDkwMDZCNUM0NiAvKiBEZWJ1Z2dlckxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTAzNDYsNyArMTAzODgsNyBAQAogCQkJCTkzMzA0MDJDMEU2QTc2NDAwMDc4NkU2QSAvKiBTbWFs
bFN0cmluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhC
IC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0OURDMTZCMTJFRjI5
M0UwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hlZHVsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZERTg3RkQxREZFNkU1NDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQ0Q0QzQxNUY2QjZCQjAwMzJG
MUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NTQx
QjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTEwMzU2LDYgKzEwMzk4LDcgQEAKIAkJCQlBNzMwQjYxMzEyNTAwNjhGMDA5
RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0
NjlERUIxMDdFQzdFNzAwNjUwNDQ2IC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTcwRUMwRUM2MUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJdGVyYXRvclByb3Rv
dHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjFGQjM5MDFFMTczQTZCMDBBOUJFNTAgLyog
TXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFQzEwN0VDN0U3
MDA2NTA0NDYgLyogU3RyaW5nT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVE
MTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTMzNUYyNEQxMkU2NzY1QjAwMkI1NTUzIC8qIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0xMDQwNyw2ICsxMDQ1MCw3IEBACiAJCQkJMEYyNEU1NTgxN0Y3
NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlF
RTBCRkYxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY2QzczNTAxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJl
RGV0YWlsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjYwRTM3MUUwNTE3QjkwMDMxNDYyQyAv
KiBNYXJraW5nQ29uc3RyYWludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAyQzFBQTkw
OTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjBDMjU5
MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY5NTJBQTIxREY3ODYwRDAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24g
MjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTYxMCwzNiArNjEwLDYgQEAgQ29tcGlsYXRpb25LZXkgUGxhbjo6a2V5KCkK
ICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtb2Rl
KTsKIH0KIAotdm9pZCBQbGFuOjptYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0
b3IpCi17Ci0gICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEg
Q29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwotICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIu
IFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAotICAgIC8vIGFs
bCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgotCi0gICAgc2xvdFZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKLSAgICBzbG90VmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwotICAgIGlmIChwcm9maWxl
ZERGR0NvZGVCbG9jaykKLSAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQocHJv
ZmlsZWRERkdDb2RlQmxvY2spOwotfQotCi12b2lkIFBsYW46OnJlbWVtYmVyQ29kZUJsb2NrcyhW
TSYgdm0pCi17Ci0gICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRv
IGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwotICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJp
ZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAotICAgIC8v
IGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgotCi0gICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB2bS5oZWFwLndyaXRlQmFycmllcihj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwotICAgIGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykK
LSAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOwotfQot
CiB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDcgKzcw
LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIENvbXBp
bGF0aW9uS2V5IGtleSgpOwogICAgIAogICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMm
KTsKICAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CiAgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwogICAgIHZvaWQgY2FuY2VsKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiREZHUGxhbi5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+Cit2b2lkIFBsYW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoY29uc3QgRnVuYyYgZnVu
YykKK3sKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICAvLyBDb21waWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBD
b2RlQmxvY2sgd2l0aG91dCBwZXJmb3JtaW5nCisgICAgLy8gYW4gZXhwbGljaXQgYmFycmllci4g
U28sIHdlIG5lZWQgdG8gYmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZSB0aGF0CisgICAgLy8gYWxs
IG91ciBDb2RlQmxvY2tzIG11c3QgYmUgdmlzaXRlZCBkdXJpbmcgR0MuCisKKyAgICBmdW5jKGNv
ZGVCbG9jayk7CisgICAgZnVuYyhjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIGlmIChw
cm9maWxlZERGR0NvZGVCbG9jaykKKyAgICAgICAgZnVuYyhwcm9maWxlZERGR0NvZGVCbG9jayk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEs
MjggKzM1MSw2IEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYKICAg
ICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6Om1h
cmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQotewotICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAg
ICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwotICAgICAgICBpZiAocGxhbi0+
dm0gIT0gJnZtKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPm1hcmtDb2Rl
QmxvY2tzKHNsb3RWaXNpdG9yKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya2xpc3Q6OnJlbWVtYmVy
Q29kZUJsb2NrcyhWTSYgdm0pCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Ci0g
ICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9
IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFs
dWUuZ2V0KCk7Ci0gICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKHZtKTsKLSAgICB9Ci19Ci0K
IHZvaWQgV29ya2xpc3Q6OnN1c3BlbmRBbGxUaHJlYWRzKCkKIHsKICAgICBtX3N1c3BlbnNpb25M
b2NrLmxvY2soKTsKQEAgLTU2NiwyMiArNTQ0LDYgQEAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9y
Vk0oVk0mIHZtKQogICAgIH0KIH0KIAotdm9pZCBtYXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJl
ck9mV29ya2xpc3RzKCk7IGktLTspIHsKLSAgICAgICAgaWYgKERGRzo6V29ya2xpc3QqIHdvcmts
aXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCi0gICAgICAgICAg
ICB3b3JrbGlzdC0+bWFya0NvZGVCbG9ja3Modm0sIHNsb3RWaXNpdG9yKTsKLSAgICB9Ci19Ci0K
LXZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKLSAgICAgICAgaWYgKERGRzo6V29y
a2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkp
Ci0gICAgICAgICAgICB3b3JrbGlzdC0+cmVtZW1iZXJDb2RlQmxvY2tzKHZtKTsKLSAgICB9Ci19
Ci0KICNlbHNlIC8vIEVOQUJMRShERkdfSklUKQogCiB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JW
TShWTSYpCkBAIC01OTIsMTAgKzU1NCw2IEBAIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90
VmlzaXRvciYpCiB7CiB9CiAKLXZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJikKLXsKLX0KLQog
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShyZXZpc2lvbiAyMTA0
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTcsOCArNTcsOCBAQCBwdWJsaWM6CiAgICAgLy8gd29ya2xpc3Qt
PmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKICAgICB2b2lkIGNvbXBsZXRlQWxsUGxh
bnNGb3JWTShWTSYpOwogCi0gICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhWTSYsIFNsb3RWaXNpdG9y
Jik7Ci0gICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgorICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYsIGNvbnN0IEZ1
bmMmKTsKIAogICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KFZNJik7CiAg
ICAgU3RhdGUgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBDb21waWxhdGlvbktleSA9
IENvbXBpbGF0aW9uS2V5KCkpOwpAQCAtMTY4LDcgKzE2OCw5IEBAIGlubGluZSBXb3JrbGlzdCYg
ZXhpc3RpbmdXb3JrbGlzdEZvckluZGUKIAogdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0m
KTsKIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwotdm9pZCByZW1lbWJl
ckNvZGVCbG9ja3MoVk0mKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgaXRlcmF0
ZUNvZGVCbG9ja3NGb3JHQyhWTSYsIGNvbnN0IEZ1bmMmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3RJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiREZHUGxhbklubGluZXMuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhW
TSYgdm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpu
dW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CisgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3
b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQorICAgICAg
ICAgICAgd29ya2xpc3QtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modm0sIGZ1bmMpOworICAgIH0K
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgV29ya2xpc3Q6Oml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIExvY2tIb2xkZXIg
bG9ja2VyKCptX2xvY2spOworICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxh
bnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxh
biogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZt
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHBsYW4tPml0ZXJhdGVDb2RlQmxvY2tz
Rm9yR0MoZnVuYyk7CisgICAgfQorfQorCisjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKKwordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTSYsIGNv
bnN0IEZ1bmMmKQoreworfQorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29k
ZUJsb2NrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b2RlQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOCArMzIsNiBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwotCiBDb2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldCgpCiB7CiB9CkBAIC0xMTQsMTUgKzExMiw2
IEBAIGJvb2wgQ29kZUJsb2NrU2V0Ojpjb250YWlucyhjb25zdCBMb2NrSG8KICAgICByZXR1cm4g
bV9vbGRDb2RlQmxvY2tzLmNvbnRhaW5zKGNvZGVCbG9jaykgfHwgbV9uZXdDb2RlQmxvY2tzLmNv
bnRhaW5zKGNvZGVCbG9jaykgfHwgbV9jdXJyZW50bHlFeGVjdXRpbmcuY29udGFpbnMoY29kZUJs
b2NrKTsKIH0KIAotdm9pZCBDb2RlQmxvY2tTZXQ6OndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1
dGluZyhIZWFwKiBoZWFwKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwotICAg
IGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJSZW1lbWJlcmluZyAiLCBtX2N1cnJlbnRs
eUV4ZWN1dGluZy5zaXplKCksICIgY29kZSBibG9ja3MuXG4iKTsKLSAgICBmb3IgKENvZGVCbG9j
ayogY29kZUJsb2NrIDogbV9jdXJyZW50bHlFeGVjdXRpbmcpCi0gICAgICAgIGhlYXAtPndyaXRl
QmFycmllcihjb2RlQmxvY2spOwotfQotCiB2b2lkIENvZGVCbG9ja1NldDo6Y2xlYXJDdXJyZW50
bHlFeGVjdXRpbmcoKQogewogICAgIG1fY3VycmVudGx5RXhlY3V0aW5nLmNsZWFyKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkocmV2aXNpb24gMjEw
NDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02OSwxMCArNjksNiBAQCBwdWJsaWM6CiAgICAgLy8gYnkgdGhp
cyBzZXQpLCBhbmQgdGhhdCBoYXZlIG5vdCBiZWVuIG1hcmtlZC4KICAgICB2b2lkIGRlbGV0ZVVu
bWFya2VkQW5kVW5yZWZlcmVuY2VkKENvbGxlY3Rpb25TY29wZSk7CiAgICAgCi0gICAgLy8gQWRk
IGFsbCBjdXJyZW50bHkgZXhlY3V0aW5nIENvZGVCbG9ja3MgdG8gdGhlIHJlbWVtYmVyZWQgc2V0
IHRvIGJlIAotICAgIC8vIHJlLXNjYW5uZWQgZHVyaW5nIHRoZSBuZXh0IGNvbGxlY3Rpb24uCi0g
ICAgdm9pZCB3cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmcoSGVhcCopOwotCiAgICAgdm9p
ZCBjbGVhckN1cnJlbnRseUV4ZWN1dGluZygpOwogCiAgICAgYm9vbCBjb250YWlucyhjb25zdCBM
b2NrSG9sZGVyJiwgdm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKTsKQEAgLTgxLDIxICs3Nyw5IEBA
IHB1YmxpYzoKICAgICAvLyBWaXNpdHMgZWFjaCBDb2RlQmxvY2sgaW4gdGhlIGhlYXAgdW50aWwg
dGhlIHZpc2l0b3IgZnVuY3Rpb24gcmV0dXJucyB0cnVlCiAgICAgLy8gdG8gaW5kaWNhdGUgdGhh
dCBpdCBpcyBkb25lIGl0ZXJhdGluZywgb3IgdW50aWwgZXZlcnkgQ29kZUJsb2NrIGhhcyBiZWVu
CiAgICAgLy8gdmlzaXRlZC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGl0
ZXJhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGZvciAoYXV0byYgY29kZUJsb2NrIDogbV9vbGRDb2Rl
QmxvY2tzKSB7Ci0gICAgICAgICAgICBib29sIGRvbmUgPSBmdW5jdG9yKGNvZGVCbG9jayk7Ci0g
ICAgICAgICAgICBpZiAoZG9uZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBmb3IgKGF1dG8mIGNvZGVCbG9jayA6IG1fbmV3Q29kZUJsb2NrcykgewotICAg
ICAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOwotICAgICAgICAgICAgaWYg
KGRvbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZShjb25zdCBGdW5jdG9yJik7Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRlQ3VycmVudGx5
RXhlY3V0aW5nKGNvbnN0IEZ1bmN0b3ImKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2Nr
U2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
ZGVCbG9ja1NldElubGluZXMuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDUgKzYw
LDMwIEBAIGlubGluZSB2b2lkIENvZGVCbG9ja1NldDo6bWFyayhjb25zdCBMb2MKICAgICBtX2N1
cnJlbnRseUV4ZWN1dGluZy5hZGQoY29kZUJsb2NrKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KK3ZvaWQgQ29kZUJsb2NrU2V0OjppdGVyYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICBmb3IgKGF1dG8mIGNv
ZGVCbG9jayA6IG1fb2xkQ29kZUJsb2NrcykgeworICAgICAgICBib29sIGRvbmUgPSBmdW5jdG9y
KGNvZGVCbG9jayk7CisgICAgICAgIGlmIChkb25lKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBmb3IgKGF1dG8mIGNvZGVCbG9jayA6IG1fbmV3Q29kZUJsb2Nrcykgewor
ICAgICAgICBib29sIGRvbmUgPSBmdW5jdG9yKGNvZGVCbG9jayk7CisgICAgICAgIGlmIChkb25l
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KK3ZvaWQgQ29kZUJsb2NrU2V0OjppdGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7Cisg
ICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQorICAg
ICAgICBmdW5jdG9yKGNvZGVCbG9jayk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDkg
KzIyLDkgQEAKICNpbmNsdWRlICJIZWFwLmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNp
bmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXRJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKLSNpbmNsdWRlICJERkdXb3JrbGlzdC5o
IgorI2luY2x1ZGUgIkRGR1dvcmtsaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkVkZW5HQ0FjdGl2
aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJGdWxsR0NB
Y3Rpdml0eUNhbGxiYWNrLmgiCkBAIC00OSwxMiArNDksMTQgQEAKICNpbmNsdWRlICJKU0xvY2su
aCIKICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbmNsdWRlICJNYXJr
ZWRTcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgogI2lu
Y2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Byb2Zp
bGVyLmgiCiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5oIgotI2luY2x1ZGUgIlNwYWNlVGltZVNj
aGVkdWxlci5oIgorI2luY2x1ZGUgIlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCIKICNpbmNs
dWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJTdG9wSWZOZWNlc3NhcnlUaW1lci5oIgor
I2luY2x1ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIgogI2lu
Y2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiVk0uaCIKQEAgLTkxLDQxICs5Myw2IEBAIGRvdWJsZSBtYXhQYXVzZU1TKGRv
dWJsZSB0aGlzUGF1c2VNUykKICAgICByZXR1cm4gbWF4UGF1c2VNUzsKIH0KIAotfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCi0KLWNsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgewotcHVi
bGljOgotICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKLSAgICAgICAgOiBtX2hl
YXAoaGVhcCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkgewotICAgICAgICAgICAgZG91YmxlIHRoaXNQYXVzZU1TID0gKE1vbm90b25pY1RpbWU6
Om5vdygpIC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpOwotICAgICAgICAgICAg
ZGF0YUxvZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVModGhpc1Bh
dXNlTVMpLCAiKS4uLl1cbiIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2hlYXAu
cmVzdW1lVGhlV29ybGQoKTsKLSAgICB9Ci0gICAgCi0gICAgflJlc3VtZVRoZVdvcmxkU2NvcGUo
KQotICAgIHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgZGF0
YUxvZygiW0dDOiAiKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIEhlYXAmIG1faGVhcDsK
LX07Ci0KLW5hbWVzcGFjZSB7Ci0KIHNpemVfdCBtaW5IZWFwU2l6ZShIZWFwVHlwZSBoZWFwVHlw
ZSwgc2l6ZV90IHJhbVNpemUpCiB7CiAgICAgaWYgKGhlYXBUeXBlID09IExhcmdlSGVhcCkgewpA
QCAtMzE2LDExICsyODMsMjAgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBl
KQogICAgICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJr
U3RhY2tBcnJheT4oKSkKICAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2Vf
dW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxw
ZXJQb29sKCkpCisgICAgLCBtX3NjaGVkdWxlcihzdGQ6Om1ha2VfdW5pcXVlPFNwYWNlVGltZU11
dGF0b3JTY2hlZHVsZXI+KCp0aGlzKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNy
ZWF0ZSgpKQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9u
OjpjcmVhdGUoKSkKIHsKICAgICBtX3dvcmxkU3RhdGUuc3RvcmUoMCk7CiAgICAgCisgICAgaWYg
KE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAgICAgICBtX3NjaGVkdWxlciA9IHN0ZDo6
bWFrZV91bmlxdWU8U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcj4oKnRoaXMpOworICAgIGVsc2Ug
eworICAgICAgICAvLyBXZSBzaW11bGF0ZSB0dXJuaW5nIG9mZiBjb25jdXJyZW50IEdDIGJ5IG1h
a2luZyB0aGUgc2NoZWR1bGVyIHNheSB0aGF0IHRoZSB3b3JsZAorICAgICAgICAvLyBzaG91bGQg
YWx3YXlzIGJlIHN0b3BwZWQgd2hlbiB0aGUgY29sbGVjdG9yIGlzIHJ1bm5pbmcuCisgICAgICAg
IG1fc2NoZWR1bGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11
dGF0b3JTY2hlZHVsZXI+KCk7CisgICAgfQorICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJpZnlI
ZWFwKCkpCiAgICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmll
cj4odGhpcywgT3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9u
KCkpOwogICAgIApAQCAtNDc5LDEyICs0NTUsNiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShK
U0NlbGwqIGNlbGwsIEFyCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJl
bmNlcygpCi17Ci0gICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93
ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50
LT5uZXh0KCkpCi0gICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVj
dG9yU2xvdFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZp
bmFsaXplcnMoKQogewogICAgIHdoaWxlIChtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmhhc05l
eHQoKSkgewpAQCAtNTExLDYgKzQ4MSw0MiBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxh
bnMoKQogICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKCptX3ZtKTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGlu
Z0NvZGVCbG9ja3MoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBtX2NvZGVCbG9ja3MtPml0ZXJh
dGVDdXJyZW50bHlFeGVjdXRpbmcoZnVuYyk7CisgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0Zv
ckdDKCptX3ZtLCBmdW5jKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgSGVh
cDo6aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xv
Y2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgVmVjdG9yPENvZGVCbG9jayosIDI1Nj4gY29k
ZUJsb2NrczsKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAg
ICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgY29kZUJsb2Nr
cy5hcHBlbmQoY29kZUJsb2NrKTsKKyAgICAgICAgfSk7CisgICAgZm9yIChDb2RlQmxvY2sqIGNv
ZGVCbG9jayA6IGNvZGVCbG9ja3MpCisgICAgICAgIGZ1bmMoY29kZUJsb2NrKTsKK30KKwordm9p
ZCBIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKQoreworICAgIGJvb2wgb2sgPSB0
cnVlOworICAgIAorICAgIGlmICghbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHko
KSkgeworICAgICAgICBkYXRhTG9nKCJGQVRBTDogU2hhcmVkIGNvbGxlY3RvciBtYXJrIHN0YWNr
IG5vdCBlbXB0eSEgSXQgaGFzICIsIG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5zaXplKCks
ICIgZWxlbWVudHMuXG4iKTsKKyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
aWYgKCFtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkgeworICAgICAgICBkYXRh
TG9nKCJGQVRBTDogU2hhcmVkIG11dGF0b3IgbWFyayBzdGFjayBub3QgZW1wdHkhIEl0IGhhcyAi
LCBtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPnNpemUoKSwgIiBlbGVtZW50cy5cbiIpOworICAg
ICAgICBvayA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChvayk7Cit9
CisKIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKQogewogICAg
IFRpbWluZ1Njb3BlIG1hcmtUb0ZpeHBvaW50VGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJr
VG9GaXhwb2ludCIpOwpAQCAtNTYwLDEzMyArNTY2LDg0IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4
cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9j
b2xsZWN0b3JTbG90VmlzaXRvcjsKICAgICBzbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsK
IAotICAgIFNwYWNlVGltZVNjaGVkdWxlciBzY2hlZHVsZXIoKnRoaXMpOworICAgIG1fY29uc3Ry
YWludFNldC0+cmVzZXRTdGF0cygpOworICAgIAorICAgIG1fc2NoZWR1bGVyLT5iZWdpbkNvbGxl
Y3Rpb24oKTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgbV9zY2hlZHVsZXIt
PmxvZygpOworICAgIAorICAgIC8vIFdvbmRlcmluZyB3aGF0IG1fY29uc3RyYWludFNldC0+ZXhl
Y3V0ZVhZWiBkb2VzPyBJdCdzIHJ1bm5pbmcgdGhlIGNvbnN0cmFpbnRzIGNyZWF0ZWQgYnkKKyAg
ICAvLyBIZWFwOjpidWlsZENvbnN0cmFpbnRTZXQoKS4KKyAgICAKKyAgICBtX2NvbnN0cmFpbnRT
ZXQtPmV4ZWN1dGVCb290c3RyYXAoc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWU6OmluZmluaXR5
KCkpOworICAgIG1fc2NoZWR1bGVyLT5kaWRFeGVjdXRlQ29uc3RyYWludHMoKTsKKworICAgIC8v
IEFmdGVyIHRoaXMsIHdlIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBmYWxsIHRocm91Z2ggYWxsIG9m
IHRoZSAic2xvdFZpc2l0b3IuaXNFbXB0eSgpIgorICAgIC8vIGNoZWNrcyBiZWNhdXNlIGJvb3Rz
dHJhcCB3b3VsZCBoYXZlIHB1dCB0aGluZ3MgaW50byB0aGUgdmlzaXRvci4gU28sIHdlIHNob3Vs
ZCBmYWxsCisgICAgLy8gdGhyb3VnaCB0byBkcmFpbmluZy4KICAgICAKICAgICBmb3IgKHVuc2ln
bmVkIGl0ZXJhdGlvbiA9IDE7IDsgKytpdGVyYXRpb24pIHsKICAgICAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJpIyIsIGl0ZXJhdGlvbiwgIiAiKTsKLSAg
ICAgICAgewotICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29w
ZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IGNvbnNlcnZhdGl2ZSBzY2FuIik7Ci0gICAg
ICAgICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7Ci0gICAg
ICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7Ci0gICAg
ICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAg
ICAgICAgICBnYXRoZXJTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAg
IGdhdGhlckpTU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAgICBnYXRo
ZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgdmlz
aXRDb25zZXJ2YXRpdmVSb290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAvLyBOb3cgd2UgdmlzaXQgcm9vdHMgdGhhdCBkb24ndCBnZXQgYmFy
cmllcmVkLCBzbyBlYWNoIGZpeHBvaW50IGl0ZXJhdGlvbiBqdXN0IHJldmlzaXRzCi0gICAgICAg
IC8vIGFsbCBvZiB0aGVtLgotI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgICAgIHNjYW5F
eHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKLSNlbmRpZgotICAgICAg
ICAgICAgCi0gICAgICAgIGlmIChtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgq
bV9jb2xsZWN0aW9uU2NvcGUpKQotICAgICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0
U3Ryb25nUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgIAorICAgICAgICBpZiAoc2xv
dFZpc2l0b3IuZGlkUmVhY2hUZXJtaW5hdGlvbigpKSB7CisgICAgICAgICAgICBhc3NlcnRTaGFy
ZWRNYXJrU3RhY2tzRW1wdHkoKTsKICAgICAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHBh
aXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKHBhaXIua2V5KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUYWtlIG1fbXV0YXRv
ckRpZFJ1biBpbnRvIGFjY291bnQgd2hlbiBzY2hlZHVsaW5nIGNvbnN0cmFpbnRzLiBNb3N0IGxp
a2VseSwKKyAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdG8gZXhlY3V0ZSByb290IGNvbnN0
cmFpbnRzIGFnYWluIHVubGVzcyB0aGUgbXV0YXRvciBkaWQgcnVuLiBBdCBhCisgICAgICAgICAg
ICAvLyBtaW5pbXVtLCB3ZSBjb3VsZCB1c2UgdGhpcyBmb3Igd29yayBlc3RpbWF0ZXMgLSBidXQg
aXQncyBwcm9iYWJseSBtb3JlIHRoYW4ganVzdCBhbgorICAgICAgICAgICAgLy8gZXN0aW1hdGUu
CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY2ODI4CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fbWFya0xpc3RTZXQgJiYgbV9tYXJr
TGlzdFNldC0+c2l6ZSgpKQotICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtM
aXN0cyhzbG90VmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOworICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHdlIGNvdWxkIHRpbWVv
dXQuIFRoaXMgb25seSBjb21lcworICAgICAgICAgICAgLy8gaW50byBwbGF5IGlmIHdlJ3JlIGV4
ZWN1dGluZyBjb25zdHJhaW50cyBmb3IgdGhlIGZpcnN0IHRpbWUuIEJ1dCB0aGF0IHdpbGwgbWF0
dGVyCisgICAgICAgICAgICAvLyB3aGVuIHdlIGhhdmUgZGVlcCBzdGFja3Mgb3IgYSBsb3Qgb2Yg
RE9NIHN0dWZmLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NjgzMQogICAgICAgICAgICAgCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKG1fdm0tPmV4Y2VwdGlvbigpKTsKLSAgICAgICAgc2xvdFZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQobV92bS0+bGFzdEV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIGJvb2wg
ZXhlY3V0ZWRFdmVyeXRoaW5nID0KKyAgICAgICAgICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4
ZWN1dGVDb252ZXJnZW5jZShzbG90VmlzaXRvciwgTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7
CisgICAgICAgICAgICBpZiAoZXhlY3V0ZWRFdmVyeXRoaW5nICYmIHNsb3RWaXNpdG9yLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7Ci0gICAgICAg
IG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwotCi0jaWYgRU5BQkxFKFNBTVBMSU5H
X1BST0ZJTEVSKQotICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxl
ciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKLSAgICAgICAgICAgIHNhbXBsaW5n
UHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsKLSAgICAgICAgICAgIHNh
bXBsaW5nUHJvZmlsZXItPnZpc2l0KHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICAg
ICAgbV9zY2hlZHVsZXItPmRpZEV4ZWN1dGVDb25zdHJhaW50cygpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB7CisgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIo
c2xvdFZpc2l0b3IpOworICAgICAgICAgICAgc2xvdFZpc2l0b3IuZHJhaW5JblBhcmFsbGVsKG1f
c2NoZWR1bGVyLT50aW1lVG9SZXN1bWUoKSk7CiAgICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgIAotICAgICAgICBpZiAobV92bS0+dHlwZVByb2Zp
bGVyKCkpCi0gICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoc2xvdFZp
c2l0b3IpOwotICAgICAgICAgICAgICAgIAotICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCku
dmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIG1f
aml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7Ci0K
LSAgICAgICAgc2xvdFZpc2l0b3IubWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7Ci0gICAg
ICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykK
LSAgICAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5
KCk7Ci0KLSAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsK
LSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJX
b3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIERGRzo6bWFya0NvZGVCbG9ja3MoKm1f
dm0sIHNsb3RWaXNpdG9yKTsKLSAgICAgICAgYm9vbCBzaG91bGRUZXJtaW5hdGUgPSBzbG90Vmlz
aXRvci5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgICAg
IGlmICghbV9zY2hlZHVsZXItPnNob3VsZFJlc3VtZSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIAorICAgICAgICBtX3NjaGVkdWxlci0+d2lsbFJlc3VtZSgpOwogICAgICAgICAK
ICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coc2xv
dFZpc2l0b3IuY29sbGVjdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiKyIsIG1fbXV0YXRvck1hcmtT
dGFjay0+c2l6ZSgpICsgc2xvdFZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpLnNpemUoKSwgIiwg
YT0iLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC8gMTAyNCwgIiBrYiwgYj0iLCBtX2JhcnJp
ZXJzRXhlY3V0ZWQsICIsIG11PSIsIHNjaGVkdWxlci5jdXJyZW50RGVjaXNpb24oKS50YXJnZXRN
dXRhdG9yVXRpbGl6YXRpb24oKSwgIiAiKTsKKyAgICAgICAgICAgIGRvdWJsZSB0aGlzUGF1c2VN
UyA9IChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpOwor
ICAgICAgICAgICAgZGF0YUxvZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBh
dXNlTVModGhpc1BhdXNlTVMpLCAiKS4uLl1cbiIpOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQg
d2UgcmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQotICAgICAgICAvLyBydW5uaW5nIHJp
Z2h0IG5vdy4gSG93ZXZlciwgd2UgbmVlZCB0byBiZSBzdXJlIHRvIGRvIGl0ICphZnRlciogd2Ug
bWFyayB0aGUgY29kZSBibG9jawotICAgICAgICAvLyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUg
aWYgaXQgcmVhbGx5IG5lZWRzIGEgYmFycmllci4gQWxzbywgdGhpcyBoYXMgdG8gaGFwcGVuIGFm
dGVyIHRoZQotICAgICAgICAvLyBmaXhwb2ludCBjaGVjayAtIG90aGVyd2lzZSB3ZSBtaWdodCBs
b29wIGZvcmV2ZXIuIEluY2lkZW50YWxseSwgd2UgYWxzbyB3YW50IHRvIGRvIHRoaXMKLSAgICAg
ICAgLy8gYXQgdGhlIGVuZCBvZiBHQyBzbyB0aGF0IGFueXRoaW5nIGF0IHRoZSBlbmQgb2YgdGhl
IGxhc3QgR0MgZ2V0cyBiYXJyaWVyZWQgaW4gdGhlIG5leHQKLSAgICAgICAgLy8gR0MuCi0gICAg
ICAgIG1fY29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpOwot
ICAgICAgICBERkc6OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoc2hvdWxkVGVybWluYXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAg
ICAgICAvLyBUaGUgU2xvdFZpc2l0b3IncyBtYXJrIHN0YWNrcyBhcmUgYWNjZXNzZWQgYnkgdGhl
IGNvbGxlY3RvciB0aHJlYWQgKGkuZS4gdGhpcyB0aHJlYWQpCi0gICAgICAgIC8vIHdpdGhvdXQg
bG9ja3MuIFRoYXQncyB3aHkgd2UgZG91YmxlLWJ1ZmZlci4KLSAgICAgICAgbV9tdXRhdG9yTWFy
a1N0YWNrLT50cmFuc2ZlclRvKHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsIHNsb3RWaXNpdG9y
KTsKKyAgICAgICAgcmVzdW1lVGhlV29ybGQoKTsKICAgICAgICAgCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIFRpbWluZ1Njb3BlIHRyYWNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrVG9G
aXhwb2ludCB0cmFjaW5nIik7CiAgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJs
ZXIoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoT3B0aW9uczo6
dXNlQ29sbGVjdG9yVGltZXNsaWNpbmcoKSkgewotICAgICAgICAgICAgICAgIHNjaGVkdWxlci5z
bmFwUGhhc2UoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTbG90VmlzaXRv
cjo6U2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5SZXN1bHQ7Ci0gICAgICAgICAgICAgICAgZG8gewot
ICAgICAgICAgICAgICAgICAgICBhdXRvIGRlY2lzaW9uID0gc2NoZWR1bGVyLmN1cnJlbnREZWNp
c2lvbigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGVjaXNpb24uc2hvdWxkQmVSZXN1bWVk
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWluUmVzdWx0ID0gc2xvdFZpc2l0b3IuZHJhaW5J
blBhcmFsbGVsUGFzc2l2ZWx5KGRlY2lzaW9uLnRpbWVUb1N0b3AoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGRyYWluUmVzdWx0ID09IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFp
blJlc3VsdDo6RG9uZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0
aGlzIHBvaW50IHdlIHdpbGwgc3RvcC4gQnV0IG1heWJlIHRoZSBzY2hlZHVsZXIgZG9lcyBub3Qg
d2FudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGF0LgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTZWNvbmRzIHNjaGVkdWxlZElkbGUgPSBkZWNpc2lvbi50
aW1lVG9TdG9wKCkgLSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSXQncyB0b3RhbGx5IHVuY2xlYXIgd2hhdCB0aGUgdmFsdWUgb2YgY29s
bGVjdFBlcm1pdHRlZElkbGVSYXRpbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBzaG91bGQgYmUsIG90aGVyIHRoYW4gaXQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwLiBZb3Ug
Y291bGQgZXZlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmd1ZSBmb3Ig
aXQgYmVpbmcgZ3JlYXRlciB0aGFuIDEuIFdlIHNob3VsZCB0dW5lIGl0LgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzbGVlcChzY2hlZHVsZWRJZGxlICogT3B0aW9uczo6Y29sbGVj
dG9yUGVybWl0dGVkSWRsZVJhdGlvKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChP
cHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vjb25kcyB3
YWtlVXBMYXRlbmN5ID0gTW9ub3RvbmljVGltZTo6bm93KCkgLSBkZWNpc2lvbi50aW1lVG9TdG9w
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdha2VVcExhdGVuY3kgPj0gMV9t
cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygid3VsIT0iLCB3YWtl
VXBMYXRlbmN5Lm1pbGxpc2Vjb25kcygpLCAiIG1zICIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRyYWluUmVzdWx0ID0gc2xvdFZpc2l0b3IuZHJhaW5JblBhcmFsbGVsKGRlY2lzaW9uLnRpbWVU
b1Jlc3VtZSgpKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlIChkcmFpblJlc3VsdCAhPSBTbG90
VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmUpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAvLyBEaXNhYmxpbmcgY29sbGVjdG9yIHRpbWVzbGljaW5nIGlzIG1l
YW50IHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAotICAgICAgICAgICAgICAgIC8vIC0tY29sbGVj
dENvbnRpbnVvdXNseT10cnVlIHRvIG1heGltaXplIHRoZSBvcHBvcnR1bml0eSBmb3IgaGFybWZ1
bCByYWNlcy4KLSAgICAgICAgICAgICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHJlc3VtZVRoZVdv
cmxkU2NvcGUoKnRoaXMpOwotICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmRyYWluSW5QYXJh
bGxlbCgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc2xvdFZpc2l0b3IuZHJhaW5JblBh
cmFsbGVsUGFzc2l2ZWx5KG1fc2NoZWR1bGVyLT50aW1lVG9TdG9wKCkpOwogICAgICAgICB9CisK
KyAgICAgICAgc3RvcFRoZVdvcmxkKCk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIltHQzogIik7CisgICAgICAgIAorICAgICAg
ICBtX3NjaGVkdWxlci0+ZGlkU3RvcCgpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkpCisgICAgICAgICAgICBtX3NjaGVkdWxlci0+bG9nKCk7CiAgICAgfQorICAgIAor
ICAgIG1fc2NoZWR1bGVyLT5lbmRDb2xsZWN0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbWFya2luZ011dGV4KTsKQEAgLTY5NCw2ICs2NTEsMTIg
QEAgdm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydAogICAgICAgICBtX21h
cmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKICAgICB9CiAgICAgbV9oZWxwZXJD
bGllbnQuZmluaXNoKCk7CisKKyAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJs
b2NrcygKKyAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAg
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgICAgIH0pOworICAgICAgICAKICAgICB1cGRh
dGVPYmplY3RDb3VudHMoZ2NTdGFydFRpbWUpOwogICAgIGVuZE1hcmtpbmcoKTsKIH0KQEAgLTcz
MiwyNSArNjk1LDYgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgIG1fYmFycmllcnNF
eGVjdXRlZCA9IDA7CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYgcm9vdHMpCi17Ci0gICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+YXBw
ZW5kKHJvb3RzKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVy
Ym9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29uc2VydmF0aXZlIFJvb3RzOlxuIiwgKm1fY29sbGVj
dG9yU2xvdFZpc2l0b3IpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdl
YWtSZWZlcmVuY2VzKCkKLXsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3Rp
bmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJi
b3NlKQotICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwotI2VuZGlmCi19Ci0KIHZvaWQgSGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29y
a2xpc3RFbnRyaWVzKCkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTg1MCw4ICs3OTQsNyBA
QCB2b2lkIEhlYXA6OmVuZE1hcmtpbmcoKQogICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9y
IDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5yZXNl
dCgpOwogCi0gICAgUkVMRUFTRV9BU1NFUlQobV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlz
RW1wdHkoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5p
c0VtcHR5KCkpOworICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAgIG1fd2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7CiAgICAgCiAgICAgbV9vYmplY3RTcGFj
ZS5lbmRNYXJraW5nKCk7CkBAIC0xMTM2LDcgKzEwNzksNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJ
blRocmVhZCgpCiAgICAgCiAgICAgd2lsbFN0YXJ0Q29sbGVjdGlvbihzY29wZSk7CiAgICAgY29s
bGVjdEltcGxUaW1pbmdTY29wZS5zZXRTY29wZSgqdGhpcyk7Ci0gICAgICAgIAorICAgIAogICAg
IGdjU3RhcnRUaW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICAgICBp
ZiAobV92ZXJpZmllcikgewogICAgICAgICAvLyBWZXJpZnkgdGhhdCBsaXZlIG9iamVjdHMgZnJv
bSB0aGUgbGFzdCBHQyBjeWNsZSBoYXZlbid0IGJlZW4gY29ycnVwdGVkIGJ5CkBAIC0xMTQ2LDEx
ICsxMDg5LDExIEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAgICAgbV92ZXJp
Zmllci0+aW5pdGlhbGl6ZUdDQ3ljbGUoKTsKICAgICAgICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2
ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QmVmb3JlTWFya2luZyk7CiAgICAgfQotICAg
ICAgICAKKyAgICAKICAgICBwcmVwYXJlRm9yTWFya2luZygpOwotICAgICAgICAKKyAgICAKICAg
ICBtYXJrVG9GaXhwb2ludChnY1N0YXJ0VGltZSk7Ci0gICAgICAgIAorICAgIAogICAgIGlmICht
X3ZlcmlmaWVyKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhlYXBW
ZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CiAgICAgICAgIG1fdmVyaWZpZXItPnZlcmlm
eShIZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwpAQCAtMTE2Niw4ICsxMTA5LDEx
IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzKCk7CiAgICAgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7
CiAgICAgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7Ci0gICAgICAgIAotICAgIG1fY29kZUJs
b2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpOworICAgIAorICAgIG1f
Y29kZUJsb2Nrcy0+aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZygKKyAgICAgICAgWyZdIChDb2Rl
QmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7
CisgICAgICAgIH0pOwogICAgIG1fY29kZUJsb2Nrcy0+Y2xlYXJDdXJyZW50bHlFeGVjdXRpbmco
KTsKICAgICAgICAgCiAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQWxsb2NhdGlvbigpOwpA
QCAtMTM1NCw2ICsxMzAwLDcgQEAgdm9pZCBIZWFwOjpzdG9wSWZOZWNlc3NhcnlTbG93KCkKICAg
ICAKICAgICBoYW5kbGVHQ0RpZEpJVCgpOwogICAgIGhhbmRsZU5lZWRGaW5hbGl6ZSgpOworICAg
IG1fbXV0YXRvckRpZFJ1biA9IHRydWU7CiB9CiAKIGJvb2wgSGVhcDo6c3RvcElmTmVjZXNzYXJ5
U2xvdyh1bnNpZ25lZCBvbGRTdGF0ZSkKQEAgLTEzNjYsNyArMTMxMyw3IEBAIGJvb2wgSGVhcDo6
c3RvcElmTmVjZXNzYXJ5U2xvdyh1bnNpZ25lZCAKICAgICAgICAgJiYgaGFuZGxlTmVlZEZpbmFs
aXplKG9sZFN0YXRlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgaWYgKCEob2xk
U3RhdGUgJiBzaG91bGRTdG9wQml0KSkgeworICAgIGlmICghKG9sZFN0YXRlICYgc2hvdWxkU3Rv
cEJpdCkgJiYgIW1fc2NoZWR1bGVyLT5zaG91bGRTdG9wKCkpIHsKICAgICAgICAgaWYgKCEob2xk
U3RhdGUgJiBzdG9wcGVkQml0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
bV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhvbGRTdGF0ZSwgb2xkU3RhdGUgJiB+
c3RvcHBlZEJpdCk7CkBAIC0xNDM5LDYgKzEzODYsNyBAQCB2b2lkIEhlYXA6OmFjcXVpcmVBY2Nl
c3NTbG93KCkKICAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9s
ZFN0YXRlLCBuZXdTdGF0ZSkpIHsKICAgICAgICAgICAgIGhhbmRsZUdDRGlkSklUKCk7CiAgICAg
ICAgICAgICBoYW5kbGVOZWVkRmluYWxpemUoKTsKKyAgICAgICAgICAgIG1fbXV0YXRvckRpZFJ1
biA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDUy
LDMyICsyMDAwLDM1IEBAIHZvaWQgSGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHMK
IH0KICNlbmRpZgogCi1ib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NEZWZl
cnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKK3ZvaWQgSGVhcDo6Y29sbGVjdElmTmVjZXNz
YXJ5T3JEZWZlcihHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewogICAgIEFT
U0VSVCghRGlzYWxsb3dHQzo6aXNHQ0Rpc2FsbG93ZWRPbkN1cnJlbnRUaHJlYWQoKSk7CiAKICAg
ICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybjsKICAgICBpZiAobXV0YXRvclN0YXRlKCkgPT0gTXV0YXRvclN0YXRlOjpIZWxwaW5n
R0MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICghT3B0
aW9uczo6dXNlR0MoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgaWYgKG1heU5lZWRUb1N0b3AoKSkgewogICAgICAgICBpZiAoZGVmZXJyYWxDb250
ZXh0KQogICAgICAgICAgICAgZGVmZXJyYWxDb250ZXh0LT5tX3Nob3VsZEdDID0gdHJ1ZTsKICAg
ICAgICAgZWxzZSBpZiAoaXNEZWZlcnJlZCgpKQogICAgICAgICAgICAgbV9kaWREZWZlckdDV29y
ayA9IHRydWU7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzdG9w
SWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBpZiB0aGUgc2NoZWR1
bGVyIHdhbnRzIHVzIHRvIHN0b3AuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI3CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkpIHsKICAgICAgICAgaWYgKG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPD0gT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIDw9IG1fbWF4RWRlblNpemUp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKGRlZmVycmFsQ29udGV4dCkKQEAgLTIwODYsNyArMjAzNyw2IEBAIGJvb2wgSGVh
cDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihHQ0QKICAgICAgICAgbV9kaWREZWZlckdDV29y
ayA9IHRydWU7CiAgICAgZWxzZQogICAgICAgICBjb2xsZWN0QXN5bmMoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRl
ZFNsb3coKQpAQCAtMjE0MSw4ICsyMDkxLDE1NSBAQCB2b2lkIEhlYXA6OnNldFJ1bkxvb3AoQ0ZS
dW5Mb29wUmVmIHJ1bkxvCiB9CiAjZW5kaWYgLy8gVVNFKENGKQogCit2b2lkIEhlYXA6OmJ1aWxk
Q29uc3RyYWludFNldCgpCit7CisgICAgbV9jb25zdHJhaW50U2V0ID0gc3RkOjptYWtlX3VuaXF1
ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFk
ZCgKKyAgICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKKyAgICAgICAgW3RoaXNdIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAg
ICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJDb25z
dHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAgICAgbV9vYmplY3RTcGFjZS5w
cmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOworICAgICAgICAgICAgQ29uc2VydmF0aXZlUm9v
dHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOworICAgICAgICAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgICAgICAgICAgZ2F0aGVyU3RhY2tSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29u
c2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNv
bnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2
YXRpdmVSb290cyk7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5
ZWRCeUV4ZWN1dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAg
ICJNc3IiLCAiTWlzYyBTbWFsbCBSb290cyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisjaWYgSlNDX09CSkNfQVBJ
X0VOQUJMRUQKKyAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIHNs
b3RWaXNpdG9yKTsKKyNlbmRpZgorCisgICAgICAgICAgICBpZiAobV92bS0+c21hbGxTdHJpbmdz
Lm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKKyAgICAgICAgICAgICAgICBt
X3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1
ZXMpCisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQocGFpci5r
ZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9tYXJrTGlzdFNldCAmJiBtX21h
cmtMaXN0U2V0LT5zaXplKCkpCisgICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXI6
Om1hcmtMaXN0cyhzbG90VmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5leGNlcHRpb24o
KSk7CisgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0
RXhjZXB0aW9uKCkpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3Jl
eWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAg
ICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAgICAgbV9oYW5k
bGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIG1faGFu
ZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5n
Q29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNl
dC0+YWRkKAorICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisjaWYgRU5BQkxF
KFNBTVBMSU5HX1BST0ZJTEVSKQorICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNh
bXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOworICAg
ICAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFj
ZXMoKTsKKyAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChzbG90VmlzaXRv
cik7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpW
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBk
YXRhOlxuIiwgc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShT
QU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fdm0tPnR5
cGVQcm9maWxlcigpKQorICAgICAgICAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT52
aXNpdChzbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fdm0tPnNoYWRv
d0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKKyAgICAgICAgIkpzciIsICJKSVQgU3R1YiBSb3V0aW5lcyIsCisg
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1Rp
bWVvdXQmKSB7CisgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHVi
Um91dGluZXMoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3Ry
YWludDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAorICAgICAgICAiV3MiLCAiV2VhayBTZXRzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgICAgIHNs
b3RWaXNpdG9yLm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgZm9y
IChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAg
ICAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyhz
bG90VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5
ZWRCeU1hcmtpbmcpOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAgICAgICAi
V3JoIiwgIldlYWsgUmVmZXJlbmNlIEhhcnZlc3RlcnMiLAorICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAg
ICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVmZXJlbmNl
SGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCisg
ICAgICAgICAgICAgICAgY3VycmVudC0+dmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7
CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmcp
OworICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAor
ICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCisgICAgICAg
ICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJl
bmNlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3NhcnkuCisgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI5CisgICAgICAgICAgICBE
Rkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoCisgICAgICAgICAgICAgICAgKm1fdm0sCisgICAg
ICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgICAg
ICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdv
cmtsaXN0czpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0Nv
bnN0cmFpbnQ6OkdyZXllZEJ5TWFya2luZyk7CisjZW5kaWYKKyAgICAKKyAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKKyAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAorICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAg
ICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9s
ZGluZ0xvY2tzKAorICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFp
bnQgb25seSBpZiBpdCdzIGJsYWNrLgorICAgICAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNN
YXJrZWQoY29kZUJsb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5j
ZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6OlBvc3NpYmx5T2xkT3JCbGFjaykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNsb3RWaXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50
OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCisg
ICAgICAgICJNbXMiLCAiTXV0YXRvciBNYXJrIFN0YWNrIiwKKyAgICAgICAgW3RoaXNdIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAg
ICAgIC8vIEluZGljYXRlIHRvIHRoZSBmaXhwb2ludCB0aGF0IHdlIGludHJvZHVjZWQgd29yayEK
KyAgICAgICAgICAgIHNpemVfdCBzaXplID0gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCk7Cisg
ICAgICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgICAgIGRh
dGFMb2coIigiLCBzaXplLCAiKSIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX211dGF0
b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8oc2xvdFZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsK
KyAgICAgICAgfSwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYpIC0+IGRvdWJsZSB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCk7CisgICAgICAgIH0s
CisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeUV4ZWN1dGlvbik7Cit9CisKIHZv
aWQgSGVhcDo6bm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkKIHsKKyAgICBidWlsZENvbnN0cmFpbnRT
ZXQoKTsKKyAgICAKICAgICBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7CiAgICAgCiAgICAgaWYg
KE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3VzbHkoKSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3MywxMCBAQCBjbGFzcyBKU1ZhbHVl
OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTWFya1N0YWNrQXJyYXk7CiBj
bGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0Owor
Y2xhc3MgTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNzIFNsb3RWaXNpdG9yOwotY2xhc3MgU3BhY2VU
aW1lU2NoZWR1bGVyOworY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNzIFN0
b3BJZk5lY2Vzc2FyeVRpbWVyOwogY2xhc3MgVk07CiAKQEAgLTIwMSw3ICsyMDMsNyBAQCBwdWJs
aWM6CiAgICAgLy8gYW5kIHRoaXMgd2lsbCB3YWl0IGZvciB0aGF0IGJhY2tsb2cgYmVmb3JlIHJ1
bm5pbmcgaXRzIEdDIGFuZCByZXR1cm5pbmcuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBj
b2xsZWN0U3luYyhzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gPSBzdGQ6Om51bGxvcHQp
OwogICAgIAotICAgIGJvb2wgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihHQ0RlZmVycmFsQ29u
dGV4dCogPSBudWxscHRyKTsgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGRpZCBjb2xsZWN0LgorICAg
IHZvaWQgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihHQ0RlZmVycmFsQ29udGV4dCogPSBudWxs
cHRyKTsKIAogICAgIHZvaWQgY29tcGxldGVBbGxKSVRQbGFucygpOwogICAgIApAQCAtMzc1LDcg
KzM3Nyw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKICAg
ICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgZnJpZW5kIGNsYXNzIFNsb3RWaXNpdG9y
OwotICAgIGZyaWVuZCBjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXI7CisgICAgZnJpZW5kIGNsYXNz
IFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiAgICAgZnJpZW5kIGNsYXNzIEluY3JlbWVudGFs
U3dlZXBlcjsKICAgICBmcmllbmQgY2xhc3MgSGVhcFN0YXRpc3RpY3M7CiAgICAgZnJpZW5kIGNs
YXNzIFZNOwpAQCAtNDEyLDkgKzQxNCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9wVGhlV29y
bGQoKTsKICAgICB2b2lkIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgCi0gICAgY2xhc3MgUmVzdW1l
VGhlV29ybGRTY29wZTsKLSAgICBmcmllbmQgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29wZTsKLSAg
ICAKICAgICB2b2lkIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgdm9pZCByZXN1bWVUaGVNdXRhdG9y
KCk7CiAgICAgCkBAIC00NTQsNyArNDUzLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdhdGhlckpT
U3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1
ZmZlclJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBiZWdpbk1hcmtpbmcoKTsK
LSAgICB2b2lkIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAg
ICB2b2lkIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCBy
ZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKICAgICB2b2lkIHVwZGF0ZU9iamVj
dENvdW50cyhkb3VibGUgZ2NTdGFydFRpbWUpOwpAQCAtNDk4LDYgKzQ5NiwxNiBAQCBwcml2YXRl
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVyT3BhcXVlUm9vdFNsb3co
dm9pZCopOwogICAgIAogICAgIHZvaWQgc2V0TXV0YXRvclNob3VsZEJlRmVuY2VkKGJvb2wgdmFs
dWUpOworICAgIAorICAgIHZvaWQgYnVpbGRDb25zdHJhaW50U2V0KCk7CisgICAgCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxp
bmdDb2RlQmxvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgorICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICB2b2lkIGFzc2VydFNoYXJl
ZE1hcmtTdGFja3NFbXB0eSgpOwogCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAg
ICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwpAQCAtNTM0LDYgKzU0Miw4IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0
YWNrOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludFNldD4gbV9j
b25zdHJhaW50U2V0OwogCiAgICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5
IHBhcmFsbGVsIG1hcmtpbmcgdGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAg
IC8vIGVudW1lcmF0ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2Fj
aGUgc29tZSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGZyb20KQEAgLTYxNiw2ICs2MjYsOCBAQCBw
cml2YXRlOgogICAgIHNpemVfdCBtX2V4dGVybmFsTWVtb3J5U2l6ZSB7IDAgfTsKICNlbmRpZgog
ICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNdXRhdG9yU2NoZWR1bGVyPiBtX3NjaGVkdWxlcjsK
KyAgICAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvdWxkU3RvcEJpdCA9IDF1IDw8IDB1
OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzdG9wcGVkQml0ID0gMXUgPDwgMXU7CiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGhhc0FjY2Vzc0JpdCA9IDF1IDw8IDJ1OwpAQCAtNjMxLDYg
KzY0Myw3IEBAIHByaXZhdGU6CiAgICAgVGlja2V0IG1fbGFzdEdyYW50ZWRUaWNrZXQgeyAwIH07
CiAgICAgYm9vbCBtX3RocmVhZFNob3VsZFN0b3AgeyBmYWxzZSB9OwogICAgIGJvb2wgbV90aHJl
YWRJc1N0b3BwaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fbXV0YXRvckRpZFJ1biB7IHRydWUg
fTsKICAgICBCb3g8TG9jaz4gbV90aHJlYWRMb2NrOwogICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJl
YWRDb25kaXRpb24+IG1fdGhyZWFkQ29uZGl0aW9uOyAvLyBUaGUgbXV0YXRvciBtdXN0IG5vdCB3
YWl0IG9uIHRoaXMuIEl0IHdvdWxkIGNhdXNlIGEgZGVhZGxvY2suCiAgICAgUmVmUHRyPEF1dG9t
YXRpY1RocmVhZD4gbV90aHJlYWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ik1hcmtpbmdDb25zdHJhaW50LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCisgICAg
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9u
LAorICAgIFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKKyAgICA6IG1fYWJicmV2aWF0ZWROYW1lKGFi
YnJldmlhdGVkTmFtZSkKKyAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgICwgbV9leGVj
dXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQorICAgICwgbV92b2xhdGlsaXR5
KHZvbGF0aWxpdHkpCit7Cit9CisKK01hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWlu
dCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRl
RnVuY3Rpb24sCisgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3Jr
RXN0aW1hdGVGdW5jdGlvbiwKKyAgICBWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisgICAgOiBtX2Fi
YnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCisgICAgLCBtX25hbWUoV1RGTW92ZShuYW1l
KSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKKyAg
ICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbihXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRl
RnVuY3Rpb24pKQorICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxpdHkpCit7Cit9CisKK01hcmtp
bmdDb25zdHJhaW50Ojp+TWFya2luZ0NvbnN0cmFpbnQoKQoreworfQorCit2b2lkIE1hcmtpbmdD
b25zdHJhaW50OjpyZXNldFN0YXRzKCkKK3sKKyAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKK30K
Kwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwg
Ym9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRlZE5hbWUoKSk7
CisgICAgVmlzaXRpbmdUaW1lb3V0IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBkaWRWaXNpdFNv
bWV0aGluZywgdGltZW91dCk7CisgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvciwgdmlzaXRp
bmdUaW1lb3V0KTsKKyAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1lb3V0LnZpc2l0
Q291bnQodmlzaXRvcik7CisgICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1RpbWVvdXQu
ZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYv
TW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hcmtpbmdD
b25zdHJhaW50U2V0OworY2xhc3MgU2xvdFZpc2l0b3I7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJh
aW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBWb2xhdGlsaXR5IHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGludHJvZHVjZSBhIG5ldyBraW5kIG9mIHZvbGF0
aWxpdHkgY2FsbGVkIEdyZXllZEJ5UmVzdW1wdGlvbiwgd2hpY2gKKyAgICAgICAgLy8gd291bGQg
bWVhbiBydW5uaW5nIGFsbCBvZiB0aGUgdGltZXMgdGhhdCBHcmV5ZWRCeUV4ZWN1dGlvbiBydW5z
IGV4Y2VwdCBhcyBhIHJvb3QgaW4gYQorICAgICAgICAvLyBmdWxsIEdDLgorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODMwCisgICAgICAgIAor
ICAgICAgICAvLyBUaGUgY29uc3RyYWludCBuZWVkcyB0byBiZSByZWV2YWx1YXRlZCBhbnl0aW1l
IHRoZSBtdXRhdG9yIHJ1bnM6IHNvIGF0IEdDIHN0YXJ0IGFuZAorICAgICAgICAvLyB3aGVuZXZl
ciB0aGUgR0MgcmVzdXNwZW5kcyBhZnRlciBhIHJlc3VtcHRpb24uIFRoaXMgaXMgYWxtb3N0IGFs
d2F5cyBzb21ldGhpbmcgdGhhdAorICAgICAgICAvLyB5b3UnZCBjYWxsIGEgInJvb3QiIGluIGEg
dHJhZGl0aW9uYWwgR0MuCisgICAgICAgIEdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICAKKyAg
ICAgICAgLy8gVGhlIGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgcmVldmFsdWF0ZWQgYW55IHRpbWUg
YW55IG9iamVjdCBpcyBtYXJrZWQgYW5kIGFueXRpbWUgdGhlCisgICAgICAgIC8vIG11dGF0b3Ig
cmVzdW1lcy4KKyAgICAgICAgR3JleWVkQnlNYXJraW5nCisgICAgfTsKKyAgICAKKyAgICBNYXJr
aW5nQ29uc3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcg
bmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRp
bmdUaW1lb3V0Jik+LAorICAgICAgICBWb2xhdGlsaXR5KTsKKyAgICAKKyAgICBNYXJraW5nQ29u
c3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwK
KyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1l
b3V0Jik+LAorICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKKyAgICAg
ICAgVm9sYXRpbGl0eSk7CisgICAgCisgICAgfk1hcmtpbmdDb25zdHJhaW50KCk7CisgICAgCisg
ICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAg
Y29uc3QgY2hhciogYWJicmV2aWF0ZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hYmJyZXZpYXRl
ZE5hbWUuZGF0YSgpOyB9CisgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZS5kYXRhKCk7IH0KKyAgICAKKyAgICB2b2lkIHJlc2V0U3RhdHMoKTsKKyAgICAKKyAgICBz
aXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RWaXNpdENvdW50OyB9
CisgICAgCisgICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRTb21l
dGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgCisgICAgZG91YmxlIHF1aWNrV29y
a0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3F1
aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbih2aXNpdG9yKTsKKyAgICB9CisgICAg
CisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRv
cik7CisgICAgfQorICAgIAorICAgIFZvbGF0aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fdm9sYXRpbGl0eTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ7IC8vIFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KKyAgICAKKyAgICB1
bnNpZ25lZCBtX2luZGV4IHsgVUlOVF9NQVggfTsKKyAgICBDU3RyaW5nIG1fYWJicmV2aWF0ZWRO
YW1lOworICAgIENTdHJpbmcgbV9uYW1lOworICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRv
ciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYgdGltZW91dCk+IG1fZXhlY3V0ZUZ1bmN0aW9uOwor
ICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IG1fcXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbjsKKyAgICBWb2xhdGlsaXR5IG1fdm9sYXRpbGl0eTsKKyAgICBzaXplX3QgbV9sYXN0
VmlzaXRDb3VudCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5o
IgorCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpFeGVjdXRpb25Db250ZXh0IHsKK3B1YmxpYzoKKyAgICBFeGVjdXRpb25Db250ZXh0KE1h
cmtpbmdDb25zdHJhaW50U2V0JiBzZXQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNU
aW1lIHRpbWVvdXQpCisgICAgICAgIDogbV9zZXQoc2V0KQorICAgICAgICAsIG1fdmlzaXRvcih2
aXNpdG9yKQorICAgICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQorICAgIHsKKyAgICB9CisgICAg
CisgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9kaWRWaXNpdFNvbWV0aGluZzsKKyAgICB9CisgICAgCisgICAgYm9vbCBzaG91bGRUaW1l
T3V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGluZygpICYm
IGhhc0VsYXBzZWQobV90aW1lb3V0KTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyBmYWxz
ZSBpZiBpdCB0aW1lcyBvdXQuCisgICAgYm9vbCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQp
CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IHVuZXhlY3V0ZWQpIHsKKyAgICAg
ICAgICAgIGV4ZWN1dGUoaW5kZXgpOworICAgICAgICAgICAgdW5leGVjdXRlZC5jbGVhcihpbmRl
eCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGltZU91dCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBkaWRFeGVjdXRlKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9leGVj
dXRlZC5nZXQoaW5kZXgpOyB9CisKKyAgICB2b2lkIGV4ZWN1dGUoc2l6ZV90IGluZGV4KQorICAg
IHsKKyAgICAgICAgbV9zZXQubV9zZXRbaW5kZXhdLT5leGVjdXRlKG1fdmlzaXRvciwgbV9kaWRW
aXNpdFNvbWV0aGluZywgbV90aW1lb3V0KTsKKyAgICAgICAgbV9leGVjdXRlZC5zZXQoaW5kZXgp
OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQmIG1fc2V0
OworICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7CisgICAgTW9ub3RvbmljVGltZSBtX3RpbWVv
dXQ7CisgICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7CisgICAgYm9vbCBtX2RpZFZpc2l0U29tZXRo
aW5nIHsgZmFsc2UgfTsKK307CisKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3Ry
YWludFNldCgpCit7Cit9CisKK01hcmtpbmdDb25zdHJhaW50U2V0Ojp+TWFya2luZ0NvbnN0cmFp
bnRTZXQoKQoreworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpyZXNldFN0YXRzKCkK
K3sKKyAgICBtX3VuZXhlY3V0ZWRSb290cy5jbGVhckFsbCgpOworICAgIG1fdW5leGVjdXRlZE91
dGdyb3d0aHMuY2xlYXJBbGwoKTsKKyAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkg
eworICAgICAgICBjb25zdHJhaW50LT5yZXNldFN0YXRzKCk7CisgICAgICAgIHN3aXRjaCAoY29u
c3RyYWludC0+dm9sYXRpbGl0eSgpKSB7CisgICAgICAgIGNhc2UgTWFya2luZ0NvbnN0cmFpbnQ6
OkdyZXllZEJ5RXhlY3V0aW9uOgorICAgICAgICAgICAgbV91bmV4ZWN1dGVkUm9vdHMuc2V0KGNv
bnN0cmFpbnQtPmluZGV4KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFy
a2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5TWFya2luZzoKKyAgICAgICAgICAgIG1fdW5leGVjdXRl
ZE91dGdyb3d0aHMuc2V0KGNvbnN0cmFpbnQtPmluZGV4KCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgK
KyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIEZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZnVuY3Rpb24sCisg
ICAgTWFya2luZ0NvbnN0cmFpbnQ6OlZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3sKKyAgICBhZGQo
c3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5h
bWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworfQor
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICBGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICBGdW5jdGlvbjxkb3Vi
bGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwKKyAgICBNYXJraW5n
Q29uc3RyYWludDo6Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQoreworICAgIGFkZChzdGQ6Om1ha2Vf
dW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1v
dmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSwgV1RGTW92ZShxdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50
U2V0OjphZGQoCisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50PiBjb25zdHJh
aW50KQoreworICAgIGNvbnN0cmFpbnQtPm1faW5kZXggPSBtX3NldC5zaXplKCk7CisgICAgbV9v
cmRlcmVkLmFwcGVuZChjb25zdHJhaW50LmdldCgpKTsKKyAgICBpZiAoY29uc3RyYWludC0+dm9s
YXRpbGl0eSgpID09IE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmcpCisgICAgICAg
IG1fb3V0Z3Jvd3Rocy5hcHBlbmQoY29uc3RyYWludC5nZXQoKSk7CisgICAgbV9zZXQuYXBwZW5k
KFdURk1vdmUoY29uc3RyYWludCkpOworfQorCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojpl
eGVjdXRlQm9vdHN0cmFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpCit7CisgICAgLy8gQm9vdHN0cmFwIG1lYW5zIHRoYXQgd2UgaGF2ZW4ndCBkb25lIGFueSBv
YmplY3QgdmlzaXRpbmcgeWV0LiBUaGlzIG1lYW5zIHRoYXQgd2Ugd2FudCB0bworICAgIC8vIG9u
bHkgZXhlY3V0ZSByb290IGNvbnN0cmFpbnRzICh3aGljaCBhbHNvIGhhcHBlbnMgdG8gYmUgdGhv
c2UgdGhhdCB3ZSBzYXkgYXJlIGdyZXllZCBieQorICAgIC8vIHJlc3VtcHRpb24pLCBzaW5jZSB0
aGUgb3RoZXIgY29uc3RyYWludHMgYXJlIHN1cGVyIHVubGlrZWx5IHRvIHRyaWdnZXIgd2l0aG91
dCBzb21lIG9iamVjdAorICAgIC8vIHZpc2l0aW5nLiBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0
aGUgY2FsbGVyIHdpbGwgZ28gc3RyYWlnaHQgdG8gb2JqZWN0IHZpc2l0aW5nIGFmdGVyCisgICAg
Ly8gdGhpcy4KKyAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRoaXMsIHZp
c2l0b3IsIHRpbWVvdXQpOworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRh
TG9nKCJib290OiIpOworICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0aW9uQ29udGV4dC5kcmFpbiht
X3VuZXhlY3V0ZWRSb290cyk7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRh
dGFMb2coIiAiKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25p
Y1RpbWUgdGltZW91dCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUlt
cGwodmlzaXRvciwgdGltZW91dCk7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAg
IGRhdGFMb2coIiAiKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIE1hcmtpbmdDb25z
dHJhaW50U2V0Ojppc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBvdXRncm93dGggOiBtX291dGdyb3d0aHMpIHsK
KyAgICAgICAgaWYgKG91dGdyb3d0aC0+d29ya0VzdGltYXRlKHZpc2l0b3IpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBNYXJr
aW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlz
aXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQoreworICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhl
Y3V0aW9uQ29udGV4dCgqdGhpcywgdmlzaXRvciwgdGltZW91dCk7CisgICAgCisgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFMb2coImNvbnZlcmdlOiIpOworCisgICAgLy8g
SWYgdGhlcmUgYXJlIGFueSBjb25zdHJhaW50cyB0aGF0IHdlIGhhdmUgbm90IGV4ZWN1dGVkIGF0
IGFsbCBkdXJpbmcgdGhpcyBjeWNsZSwgdGhlbgorICAgIC8vIHdlIHNob3VsZCBleGVjdXRlIHRo
b3NlIG5vdy4KKyAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9v
dHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRy
YWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgLy8gV2Ugd2FudCB0byBrZWVwIHByZWZlcnJpbmcgdGhlIG91dGdyb3d0aCBjb25zdHJh
aW50cyAtIHRoZSBvbmVzIHRoYXQgbmVlZCB0byBiZSBmaXhwb2ludGVkCisgICAgLy8gZXZlbiBp
biBhIHN0b3AtdGhlLXdvcmxkIEdDIC0gdW50aWwgdGhleSBzdG9wIHByb2R1Y2luZy4gVGhleSBo
YXZlIGEgdGVuZGVuY3kgdG8gZ28gdG90YWxseQorICAgIC8vIHNpbGVudCBhdCBzb21lIHBvaW50
IGR1cmluZyBHQywgYXQgd2hpY2ggcG9pbnQgaXQgbWFrZXMgc2Vuc2Ugbm90IHRvIHJ1biB0aGVt
IGFnYWluIHVudGlsCisgICAgLy8gdGhlIGVuZC4gT3V0Z3Jvd3RocyBwcm9kdWNpbmcgbmV3IGlu
Zm9ybWF0aW9uIGNvcnJlc3BvbmRzIGFsbW9zdCBleGFjdGx5IHRvIHRoZSB3YXZlZnJvbnQKKyAg
ICAvLyBhZHZhbmNpbmc6IGl0IHVzdWFsbHkgbWVhbnMgdGhhdCB3ZSBhcmUgbWFya2luZyBvYmpl
Y3RzIHRoYXQgc2hvdWxkIGJlIG1hcmtlZCBiYXNlZCBvbgorICAgIC8vIG90aGVyIG9iamVjdHMg
dGhhdCB3ZSB3b3VsZCBoYXZlIG1hcmtlZCBhbnl3YXkuIE9uY2UgdGhlIHdhdmVmcm9udCBpcyBu
byBsb25nZXIgYWR2YW5jaW5nLAorICAgIC8vIHdlIHdhbnQgdG8gcnVuIG1vc3RseSB0aGUgcm9v
dCBjb25zdHJhaW50cyAoYmFzZWQgb24gdGhlaXIgcHJlZGljdGlvbnMgb2YgaG93IG11Y2ggd29y
aworICAgIC8vIHRoZXkgd2lsbCBoYXZlKSBiZWNhdXNlIGF0IHRoaXMgcG9pbnQgd2UgYXJlIGp1
c3QgdHJ5aW5nIHRvIG91dHBhY2UgdGhlIHJldHJlYXRpbmcKKyAgICAvLyB3YXZlZnJvbnQuCisg
ICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiAoZXhlY3V0ZUNvbnZlcmdlbmNl
SW1wbCkgb25seSByZXR1cm5zIHRydWUgaWYgaXQgcnVucyBhbGwKKyAgICAvLyBjb25zdHJhaW50
cy4gU28sIGFsbCB3ZSBhcmUgY29udHJvbGxpbmcgYXJlIHRoZSBoZXVyaXN0aWNzIHRoYXQgc2F5
IHdoaWNoIGNvbnN0cmFpbnRzIHRvCisgICAgLy8gcnVuIGZpcnN0LiBDaG9vc2luZyB0aGUgY29u
c3RyYWludHMgdGhhdCBhcmUgdGhlIG1vc3QgbGlrZWx5IHRvIHByb2R1Y2UgbWVhbnMgcnVubmlu
ZyBmZXdlcgorICAgIC8vIGNvbnN0cmFpbnRzIGJlZm9yZSByZXR1cm5pbmcuCisgICAgYm9vbCBp
c1dhdmVmcm9udEFkdmFuY2luZyA9IHRoaXMtPmlzV2F2ZWZyb250QWR2YW5jaW5nKHZpc2l0b3Ip
OworICAgIAorICAgIHN0ZDo6c29ydCgKKyAgICAgICAgbV9vcmRlcmVkLmJlZ2luKCksIG1fb3Jk
ZXJlZC5lbmQoKSwKKyAgICAgICAgWyZdIChNYXJraW5nQ29uc3RyYWludCogYSwgTWFya2luZ0Nv
bnN0cmFpbnQqIGIpIC0+IGJvb2wgeworICAgICAgICAgICAgLy8gUmVtZW1iZXI6IHJldHVybiB0
cnVlIGlmIGEgc2hvdWxkIGNvbWUgYmVmb3JlIGIuCisgICAgICAgICAgICBpZiAoYS0+dm9sYXRp
bGl0eSgpICE9IGItPnZvbGF0aWxpdHkoKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1dhdmVm
cm9udEFkdmFuY2luZykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxpdHko
KSA+IGItPnZvbGF0aWxpdHkoKTsgLy8gR3JleWVkQnlNYXJraW5nIHNob3VsZCBjb21lIGJlZm9y
ZSBHcmV5ZWRCeUV4ZWN1dGlvbi4KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBhLT52b2xhdGlsaXR5KCkgPCBiLT52b2xhdGlsaXR5KCk7IC8vIEdyZXll
ZEJ5RXhlY3V0aW9uIHNob3VsZCBjb21lIGJlZm9yZSBHcmV5ZWRCeU1hcmtpbmcuCisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBhLT53b3JrRXN0aW1hdGUo
dmlzaXRvcikgPiBiLT53b3JrRXN0aW1hdGUodmlzaXRvcik7CisgICAgICAgIH0pOworICAgIAor
ICAgIGZvciAoTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQgOiBtX29yZGVyZWQpIHsKKyAg
ICAgICAgc2l6ZV90IGkgPSBjb25zdHJhaW50LT5pbmRleCgpOworICAgICAgICAKKyAgICAgICAg
aWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkRXhlY3V0ZShpKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBleGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoaSk7CisgICAgICAgIAorICAgICAg
ICAvLyBPbmNlIHdlJ3JlIGluIGNvbnZlcmdlbmNlLCBpdCBtYWtlcyB0aGUgbW9zdCBzZW5zZSB0
byBsZXQgc29tZSBtYXJraW5nIGhhcHBlbiBhbnl0aW1lCisgICAgICAgIC8vIHdlIGZpbmQgd29y
ay4gTm9uZXRoZWxlc3MsIHdlIG9ubHkgd2FudCBjb25zdHJhaW50cyB0byBpbnRlcnJ1cHQgdGhl
bXNlbHZlcyB1cG9uCisgICAgICAgIC8vIHRpbWVvdXQgLSBub3QganVzdCBiZWNhdXNlIHRoZXkg
Zm91bmQgc29tZSB3b3JrLgorICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgZXhl
Y3V0ZSBhbGwgY29uc3RyYWludHMgdW50aWwgdGltZW91dD8gTm90IGNsZWFyIGlmIHRoYXQncwor
ICAgICAgICAvLyBiZXR0ZXIgb3Igd29yc2UuIE1heWJlIGV2ZW4gYmV0dGVyIGlzIHRoaXM6Cisg
ICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgZW1wdHksIGtlZXAgcnVubmluZy4KKyAgICAg
ICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBoYXMgYXQgbGVhc3QgTiB0aGluZ3MsIHJldHVybi4K
KyAgICAgICAgLy8gLSBFbHNlIHJ1biB1bnRpbCB0aW1lb3V0LgorICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODMyCisgICAgICAgIGlmIChleGVj
dXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGJvb2wg
ZGlkVmlzaXRTb21ldGhpbmcgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBt
X3NldCkKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0
aGluZywgTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkpCisgICAgICAgIGRhdGFMb2coIiAiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRT
ZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5j
bHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0IHsKK3B1YmxpYzoKKyAgICBN
YXJraW5nQ29uc3RyYWludFNldCgpOworICAgIH5NYXJraW5nQ29uc3RyYWludFNldCgpOworICAg
IAorICAgIHZvaWQgcmVzZXRTdGF0cygpOworICAgIAorICAgIHZvaWQgYWRkKAorICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKKyAgICAgICAgQ1N0cmluZyBuYW1lLAorICAgICAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCisg
ICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpWb2xhdGlsaXR5KTsKKyAgICAKKyAgICB2b2lkIGFk
ZCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCisgICAgICAgIENTdHJpbmcgbmFt
ZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0Jik+LAorICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKKyAg
ICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OlZvbGF0aWxpdHkpOworICAgIAorICAgIHZvaWQgYWRk
KHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4pOworICAgIAorICAgIC8vIEFzc3Vt
aW5nIHRoYXQgdGhlIG1hcmsgc3RhY2tzIGFyZSBhbGwgZW1wdHksIHRoaXMgd2lsbCBnaXZlIHlv
dSBhIGd1ZXNzIGFzIHRvIHdoZXRoZXIgb3IKKyAgICAvLyBub3QgdGhlIHdhdmVmcm9udCBpcyBh
ZHZhbmNpbmcuCisgICAgYm9vbCBpc1dhdmVmcm9udEFkdmFuY2luZyhTbG90VmlzaXRvciYpOwor
ICAgIGJvb2wgaXNXYXZlZnJvbnRSZXRyZWF0aW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJl
dHVybiAhaXNXYXZlZnJvbnRBZHZhbmNpbmcodmlzaXRvcik7IH0KKyAgICAKKyAgICAvLyBFeGVj
dXRlcyBvbmx5IHJvb3RzLiBSZXR1cm5zIHRydWUgaWYgYWxsIHJvb3RzIGhhdmUgYmVlbiBleGVj
dXRlZC4gSXQncyBleHBlY3RlZAorICAgIC8vIHRoYXQgeW91J2xsIGRvIHNvbWUgZHJhaW5pbmcg
YWZ0ZXIgdGhpcyBhbmQgdGhlbiB1c2UgZXhlY3V0ZUNvbnZlcmdlbmNlKCkuCisgICAgYm9vbCBl
eGVjdXRlQm9vdHN0cmFwKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9u
b3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFs
bCBjb25zdHJhaW50cyB3ZXJlIGV4ZWN1dGVkLiBUaGlzIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxy
YWVkeQorICAgIC8vIHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KKyAgICBi
b29sIGV4ZWN1dGVDb252ZXJnZW5jZSgKKyAgICAgICAgU2xvdFZpc2l0b3ImLAorICAgICAgICBN
b25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAK
KyAgICAvLyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdh
bnMuCisgICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CisgICAgCitwcml2YXRlOgor
ICAgIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNv
bnRleHQ7CisgICAgCisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9y
JiwgTW9ub3RvbmljVGltZSB0aW1lb3V0KTsKKyAgICAKKyAgICBib29sIGRyYWluKFNsb3RWaXNp
dG9yJiwgTW9ub3RvbmljVGltZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4
ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CisgICAgCisgICAgQml0VmVjdG9yIG1f
dW5leGVjdXRlZFJvb3RzOworICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRPdXRncm93dGhzOwor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKKyAg
ICBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiBtX29yZGVyZWQ7CisgICAgVmVjdG9yPE1hcmtp
bmdDb25zdHJhaW50Kj4gbV9vdXRncm93dGhzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JT
Y2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk11dGF0b3JTY2hlZHVsZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK011dGF0b3JTY2hlZHVsZXI6
Ok11dGF0b3JTY2hlZHVsZXIoKQoreworfQorCitNdXRhdG9yU2NoZWR1bGVyOjp+TXV0YXRvclNj
aGVkdWxlcigpCit7Cit9CisKK3ZvaWQgTXV0YXRvclNjaGVkdWxlcjo6ZGlkU3RvcCgpCit7Cit9
CisKK3ZvaWQgTXV0YXRvclNjaGVkdWxlcjo6d2lsbFJlc3VtZSgpCit7Cit9CisKK3ZvaWQgTXV0
YXRvclNjaGVkdWxlcjo6ZGlkRXhlY3V0ZUNvbnN0cmFpbnRzKCkKK3sKK30KKwordm9pZCBNdXRh
dG9yU2NoZWR1bGVyOjpsb2coKQoreworfQorCitib29sIE11dGF0b3JTY2hlZHVsZXI6OnNob3Vs
ZFN0b3AoKQoreworICAgIHJldHVybiBoYXNFbGFwc2VkKHRpbWVUb1N0b3AoKSk7Cit9CisKK2Jv
b2wgTXV0YXRvclNjaGVkdWxlcjo6c2hvdWxkUmVzdW1lKCkKK3sKKyAgICByZXR1cm4gaGFzRWxh
cHNlZCh0aW1lVG9SZXN1bWUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclNjaGVkdWxlci5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTXV0YXRvclNjaGVkdWxl
ciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTXV0YXRvclNjaGVkdWxlcik7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAg
IE5vcm1hbCwgLy8gTm90IGNvbGxlY3RpbmcuCisgICAgICAgIFN0b3BwZWQsCisgICAgICAgIFJl
c3VtZWQKKyAgICB9OworICAgIAorICAgIE11dGF0b3JTY2hlZHVsZXIoKTsKKyAgICB2aXJ0dWFs
IH5NdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgCisgICAgdmlydHVhbCBTdGF0ZSBzdGF0ZSgpIGNv
bnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db2xsZWN0aW9uKCkgPSAwOwor
ICAgIAorICAgIHZpcnR1YWwgdm9pZCBkaWRTdG9wKCk7CisgICAgdmlydHVhbCB2b2lkIHdpbGxS
ZXN1bWUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRXhlY3V0ZUNvbnN0cmFpbnRzKCk7CisgICAg
CisgICAgdmlydHVhbCBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSA9IDA7IC8vIENhbGwgd2hp
bGUgcmVzdW1lZCwgdG8gYXNrIHdoZW4gdG8gc3RvcC4KKyAgICB2aXJ0dWFsIE1vbm90b25pY1Rp
bWUgdGltZVRvUmVzdW1lKCkgPSAwOyAvLyBDYWxsIHdoaWxlIHN0b3BwZWQsIHRvIGFzayB3aGVu
IHRvIHJlc3VtZS4KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbG9nKCk7CisgICAgCisgICAgYm9v
bCBzaG91bGRTdG9wKCk7IC8vIENhbGwgd2hpbGUgcmVzdW1lZCwgdG8gYXNrIGlmIHdlIHNob3Vs
ZCBzdG9wIG5vdy4KKyAgICBib29sIHNob3VsZFJlc3VtZSgpOyAvLyBDYWxsIHdoaWxlIHN0b3Bw
ZWQsIHRvIGFzayBpZiB3ZSBzaG91bGQgcmVzdW1lIG5vdy4KKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgZW5kQ29sbGVjdGlvbigpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCShyZXZpc2lvbiAy
MTA0OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTksMTEgKzU5LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9jb250YWluc0xh
c3RRdWVyaWVkUm9vdCA9IGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgYWRkKHZvaWQqIHJvb3Qp
CisgICAgYm9vbCBhZGQodm9pZCogcm9vdCkKICAgICB7CiAgICAgICAgIGlmIChyb290ID09IG1f
bGFzdFF1ZXJpZWRSb290KQogICAgICAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9
IHRydWU7Ci0gICAgICAgIG1fcm9vdHMuYWRkKHJvb3QpOworICAgICAgICByZXR1cm4gbV9yb290
cy5hZGQocm9vdCkuaXNOZXdFbnRyeTsKICAgICB9CiAKICAgICBpbnQgc2l6ZSgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lv
biAyMTA0OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNDcsNiArMzQ3LDExIEBAIHByaXZhdGU6CiAgICAg
U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKIH07CiAKK3ZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0QXND
b25zdHJhaW50KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBtX2lzVmlzaXRpbmdNdXRhdG9y
U3RhY2sgPSB0cnVlOworICAgIHZpc2l0Q2hpbGRyZW4oY2VsbCk7Cit9CiAKIEFMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCiB7
CkBAIC00NjEsNyArNDY2LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9ub3RvbmljVGlt
ZSB0aQogICAgIAogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9yaWdodFRvUnVuKTsKICAg
ICAKLSAgICB3aGlsZSAoKCFtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSB8fCAhbV9tdXRhdG9y
U3RhY2suaXNFbXB0eSgpKSAmJiAhaGFzRWxhcHNlZCh0aW1lb3V0KSkgeworICAgIHdoaWxlICgh
aGFzRWxhcHNlZCh0aW1lb3V0KSkgewogICAgICAgICB1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKGxv
Y2tlcik7CiAgICAgICAgIGlmICghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIG1fY29sbGVjdG9yU3RhY2sucmVmaWxsKCk7CkBAIC00NzYsNyArNDgxLDggQEAgdm9p
ZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9ub3RvbmljVGltZSB0aQogICAgICAgICAgICAgbV9pc1Zp
c2l0aW5nTXV0YXRvclN0YWNrID0gdHJ1ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291
bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7
IG1fbXV0YXRvclN0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCiAgICAgICAg
ICAgICAgICAgdmlzaXRDaGlsZHJlbihtX211dGF0b3JTdGFjay5yZW1vdmVMYXN0KCkpOwotICAg
ICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG1fcmln
aHRUb1J1bi5zYWZlcG9pbnQoKTsKICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAg
IH0KQEAgLTQ4NiwxMiArNDkyLDE4IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25p
Y1RpbWUgdGkKIAogYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbigpCiB7Cisg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICByZXR1cm4g
aXNFbXB0eSgpICYmIGRpZFJlYWNoVGVybWluYXRpb24obG9ja2VyKTsKK30KKworYm9vbCBTbG90
VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBMb2NrSG9sZGVyJikKK3sKICAgICBy
ZXR1cm4gIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCiAgICAgICAgICYm
IG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgICYm
IG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKIH0KIAotYm9vbCBT
bG90VmlzaXRvcjo6aGFzV29yaygpCitib29sIFNsb3RWaXNpdG9yOjpoYXNXb3JrKGNvbnN0IExv
Y2tIb2xkZXImKQogewogICAgIHJldHVybiAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0
YWNrLT5pc0VtcHR5KCkKICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKTsKQEAgLTUxOCwxMiArNTMwLDEyIEBAIFNsb3RWaXNpdG9yOjpTaGFyZWRE
cmFpblJlc3VsdCBTbG90VmlzaXQKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQo
dGltZW91dCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1
bHQ6OlRpbWVkT3V0OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGRpZFJlYWNoVGVybWluYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZGlk
UmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2hl
YXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICho
YXNXb3JrKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNXb3JrKGxvY2tlcikpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwo
bV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0KTsKQEAgLTUzNCwxMyArNTQ2LDEzIEBAIFNs
b3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAgICAgICAgICAgICAgICBp
ZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJl
ZERyYWluUmVzdWx0OjpUaW1lZE91dDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoZGlkUmVhY2hUZXJtaW5hdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChkaWRSZWFj
aFRlcm1pbmF0aW9uKGxvY2tlcikpCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtp
bmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIAogICAgICAgICAgICAgICAgIG1faGVh
cC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwoCiAgICAgICAgICAgICAgICAg
ICAgIG1faGVhcC5tX21hcmtpbmdNdXRleCwgdGltZW91dCwKLSAgICAgICAgICAgICAgICAgICAg
W3RoaXNdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKCkKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNX
b3JrKGxvY2tlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJh
bGxlbE1hcmtlcnNTaG91bGRFeGl0OwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgICAgICAKQEAgLTU4OSw3ICs2MDEsNyBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1
bHQgU2xvdFZpc2l0CiAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQogICAgICAgICAg
ICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKICAgICAgICAgCi0gICAgICAg
IGlmIChkaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKKyAgICAgICAgaWYgKGRpZFJlYWNoVGVybWlu
YXRpb24obG9ja2VyKSkgewogICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZh
cmlhYmxlLm5vdGlmeUFsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0
OjpEb25lOwogICAgICAgICB9CkBAIC02MDUsMTMgKzYxNywxMyBAQCB2b2lkIFNsb3RWaXNpdG9y
OjphZGRPcGFxdWVSb290KHZvaWQqIHJvCiAgICAgCiAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9m
R0NNYXJrZXJzKCkgPT0gMSkgewogICAgICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hh
cmVkIEhhc2hTZXQuCi0gICAgICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KTsKKyAg
ICAgICAgbV92aXNpdENvdW50ICs9IG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KS5pc05l
d0VudHJ5OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIFB1dCBpbnRvIHRoZSBsb2Nh
bCBzZXQsIGJ1dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4KICAgICAv
LyBhIHdoaWxlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdyb3cgdG9v
IGxhcmdlLgogICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKLSAgICBtX29wYXF1
ZVJvb3RzLmFkZChyb290KTsKKyAgICBtX3Zpc2l0Q291bnQgKz0gbV9vcGFxdWVSb290cy5hZGQo
cm9vdCk7CiB9CiAKIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBy
b290KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDMsNiArMTAzLDggQEAgcHVi
bGljOgogCiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNW
aXNpdGVkOyB9CiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0
Q291bnQ7IH0KKyAgICAKKyAgICB2b2lkIGFkZFRvVmlzaXRDb3VudChzaXplX3QgdmFsdWUpIHsg
bV92aXNpdENvdW50ICs9IHZhbHVlOyB9CiAKICAgICB2b2lkIGRvbmF0ZSgpOwogICAgIHZvaWQg
ZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7
CkBAIC0xNTEsNiArMTUzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJhY2UoSlNDZWxsKiBj
ZWxsLCBjb25zdCBjaGFyKiByZWFzb24pIHsgZGlkUmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVh
c29uKSk7IH0KICAgICB2b2lkIGRpZE5vdFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5Jik7CiAgICAg
dm9pZCBkaWROb3RSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7IGRpZE5v
dFJhY2UoVmlzaXRSYWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9CisgICAgCisgICAgdm9pZCB2aXNp
dEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqKTsKKyAgICAKKyAgICBib29sIGRpZFJlYWNoVGVy
bWluYXRpb24oKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5h
YmxlcjsKQEAgLTE4MCw4ICsxODYsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZG9uYXRlS25vd25Q
YXJhbGxlbCgpOwogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbChNYXJrU3RhY2tBcnJheSYg
ZnJvbSwgTWFya1N0YWNrQXJyYXkmIHRvKTsKICAgICAKLSAgICBib29sIGhhc1dvcmsoKTsKLSAg
ICBib29sIGRpZFJlYWNoVGVybWluYXRpb24oKTsKKyAgICBib29sIGhhc1dvcmsoY29uc3QgTG9j
a0hvbGRlciYpOworICAgIGJvb2wgZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBMb2NrSG9sZGVy
Jik7CiAKICAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOwogICAgIE1hcmtTdGFj
a0FycmF5IG1fbXV0YXRvclN0YWNrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIx
MDQ5NikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVy
LmNwcDoyMTA0OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU3BhY2VUaW1lU2NoZWR1bGVyLmgiCisKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitkb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpE
ZWNpc2lvbjo6dGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3QKK3sKKyAgICBkb3VibGUg
Ynl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgPQorICAgICAgICBtX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lu
bmluZzsKKyAgICAKKyAgICBkb3VibGUgbWF4SGVhZHJvb20gPQorICAgICAgICBtX3NjaGVkdWxl
ci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kIC0gbV9zY2hlZHVsZXItPm1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKKyAgICAKKyAgICBkb3VibGUgaGVh
ZHJvb21GdWxsbmVzcyA9CisgICAgICAgIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlIC8gbWF4
SGVhZHJvb207CisgICAgCisgICAgLy8gaGVhZHJvb21GdWxsbmVzcyBjYW4gYmUgTmFOIGFuZCBv
dGhlciBpbnRlcmVzdGluZyB0aGluZ3MgaWYKKyAgICAvLyBieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8uIFdlIHNlZSB0aGF0IGluIGRlYnVnIHRlc3RzLiBUaGlz
IGNvZGUKKyAgICAvLyBkZWZlbmRzIGFnYWluc3QgYWxsIGZsb2F0aW5nIHBvaW50IGRyYWdvbnMu
CisgICAgCisgICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA+PSAwKSkKKyAgICAgICAgaGVhZHJv
b21GdWxsbmVzcyA9IDA7CisgICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA8PSAxKSkKKyAgICAg
ICAgaGVhZHJvb21GdWxsbmVzcyA9IDE7CisgICAgCisgICAgZG91YmxlIG11dGF0b3JVdGlsaXph
dGlvbiA9IDEgLSBoZWFkcm9vbUZ1bGxuZXNzOworICAgIAorICAgIC8vIFNjYWxlIHRoZSBtdXRh
dG9yIHV0aWxpemF0aW9uIGludG8gdGhlIHBlcm1pdHRlZCB3aW5kb3cuCisgICAgbXV0YXRvclV0
aWxpemF0aW9uID0KKyAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigp
ICsKKyAgICAgICAgbXV0YXRvclV0aWxpemF0aW9uICogKAorICAgICAgICAgICAgT3B0aW9uczo6
bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigpIC0KKyAgICAgICAgICAgIE9wdGlvbnM6Om1pbmlt
dW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7CisgICAgCisgICAgcmV0dXJuIG11dGF0b3JVdGlsaXph
dGlvbjsKK30KKworZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldENv
bGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMSAtIHRhcmdldE11dGF0
b3JVdGlsaXphdGlvbigpOworfQorCitTZWNvbmRzIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNp
b246OmVsYXBzZWRJblBlcmlvZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX25vdyAtIG1fc2No
ZWR1bGVyLT5tX2luaXRpYWxUaW1lKSAlIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKK30KKworZG91
YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnBoYXNlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZWxhcHNlZEluUGVyaW9kKCkgLyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Cit9CisKK2Jv
b2wgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6c2hvdWxkQmVSZXN1bWVkKCkgY29uc3QK
K3sKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKKyAgICAg
ICAgcmV0dXJuIHBoYXNlKCkgPD0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7CisgICAgcmV0
dXJuIHBoYXNlKCkgPiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOworfQorCitNb25vdG9u
aWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRpbWVUb1Jlc3VtZSgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFzaG91bGRCZVJlc3VtZWQoKSk7CisgICAgaWYgKE9wdGlvbnM6OmNv
bGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCisgICAgICAgIHJldHVybiBtX25vdyAtIGVsYXBz
ZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOworICAgIHJldHVybiBtX25vdyAt
IGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0Q29sbGVj
dG9yVXRpbGl6YXRpb24oKTsKK30KKworTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6
OkRlY2lzaW9uOjp0aW1lVG9TdG9wKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2hvdWxkQmVSZXN1
bWVkKCkpOworICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQor
ICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5t
X3BlcmlvZCAqIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOworICAgIHJldHVybiBtX25vdyAt
IGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOworfQorCitTcGFjZVRp
bWVTY2hlZHVsZXI6OlNwYWNlVGltZVNjaGVkdWxlcihIZWFwJiBoZWFwKQorICAgIDogbV9oZWFw
KGhlYXApCisgICAgLCBtX3BlcmlvZChTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6
OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkpKQorICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZUF0VGhlQmVnaW5uaW5nKGhlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSkKKyAgICAsIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCgKKyAgICAgICAgT3B0aW9uczo6Y29uY3Vy
cmVudEdDTWF4SGVhZHJvb20oKSAqCisgICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nLCBoZWFwLm1fbWF4RWRlblNpemUpKQorewor
ICAgIHNuYXBQaGFzZSgpOworfQorCit2b2lkIFNwYWNlVGltZVNjaGVkdWxlcjo6c25hcFBoYXNl
KCkKK3sKKyAgICBtX2luaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Cit9CisKK1Nw
YWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb24gU3BhY2VUaW1lU2NoZWR1bGVyOjpjdXJyZW50RGVj
aXNpb24oKQoreworICAgIERlY2lzaW9uIHJlc3VsdDsKKyAgICByZXN1bHQubV9zY2hlZHVsZXIg
PSB0aGlzOworICAgIHJlc3VsdC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gbV9oZWFwLm1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7CisgICAgcmVzdWx0Lm1fbm93ID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGlt
ZU11dGF0b3JTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNCwxMDUgKzI0LDE5NSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJTcGFjZVRpbWVTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1k
b3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0TXV0YXRvclV0aWxpemF0
aW9uKCkgY29uc3QKKy8vIFRoZSBzY2hlZHVsZXIgd2lsbCBvZnRlbiBtYWtlIGRlY2lzaW9ucyBi
YXNlZCBvbiBzdGF0ZSB0aGF0IGlzIGluIGZsdXguIEl0IHdpbGwgYmUgZmluZSBzbworLy8gbG9u
ZyBhcyBtdWx0aXBsZSB1c2VzIG9mIHRoZSBzYW1lIHZhbHVlIGFsbCBzZWUgdGhlIHNhbWUgdmFs
dWUuIFdlIHdvdWxkbid0IGdldCB0aGlzIGZvciBmcmVlLAorLy8gc2luY2Ugb3VyIG5lZWQgdG8g
bW9kdWxhcml6ZSB0aGUgY2FsY3VsYXRpb24gcmVzdWx0cyBpbiBhIHRlbmRlbmN5IHRvIGFjY2Vz
cyB0aGUgc2FtZSBtdXRhYmxlCisvLyBmaWVsZCBpbiBIZWFwIG11bHRpcGxlIHRpbWVzLCBhbmQg
dG8gYWNjZXNzIHRoZSBjdXJyZW50IHRpbWUgbXVsdGlwbGUgdGltZXMuCitjbGFzcyBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyOjpTbmFwc2hvdCB7CitwdWJsaWM6CisgICAgU25hcHNob3QoU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlciYgc2NoZWR1bGVyKQorICAgIHsKKyAgICAgICAgbV9ub3cg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZSA9IHNjaGVkdWxlci5ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUltcGwoKTsKKyAgICB9CisgICAg
CisgICAgTW9ub3RvbmljVGltZSBub3coKSBjb25zdCB7IHJldHVybiBtX25vdzsgfQorICAgIAor
ICAgIGRvdWJsZSBieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgTW9ub3RvbmljVGlt
ZSBtX25vdzsKKyAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZTsKK307CisKK1Nw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIoSGVhcCYg
aGVhcCkKKyAgICA6IG1faGVhcChoZWFwKQorICAgICwgbV9wZXJpb2QoU2Vjb25kczo6ZnJvbU1p
bGxpc2Vjb25kcyhPcHRpb25zOjpjb25jdXJyZW50R0NQZXJpb2RNUygpKSkKIHsKLSAgICBkb3Vi
bGUgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgPQotICAgICAgICBtX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJl
Z2lubmluZzsKLSAgICAKLSAgICBkb3VibGUgbWF4SGVhZHJvb20gPQotICAgICAgICBtX3NjaGVk
dWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kIC0gbV9zY2hlZHVsZXItPm1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICAKLSAgICBkb3VibGUg
aGVhZHJvb21GdWxsbmVzcyA9Ci0gICAgICAgIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlIC8g
bWF4SGVhZHJvb207Ci0gICAgCi0gICAgLy8gaGVhZHJvb21GdWxsbmVzcyBjYW4gYmUgTmFOIGFu
ZCBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MgaWYKLSAgICAvLyBieXRlc0FsbG9jYXRlZFRoaXND
eWNsZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8uIFdlIHNlZSB0aGF0IGluIGRlYnVnIHRlc3RzLiBU
aGlzIGNvZGUKLSAgICAvLyBkZWZlbmRzIGFnYWluc3QgYWxsIGZsb2F0aW5nIHBvaW50IGRyYWdv
bnMuCi0gICAgCi0gICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA+PSAwKSkKLSAgICAgICAgaGVh
ZHJvb21GdWxsbmVzcyA9IDA7Ci0gICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA8PSAxKSkKLSAg
ICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDE7Ci0gICAgCi0gICAgZG91YmxlIG11dGF0b3JVdGls
aXphdGlvbiA9IDEgLSBoZWFkcm9vbUZ1bGxuZXNzOworfQorCitTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyOjp+U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcigpCit7Cit9CisKK011dGF0b3JTY2hl
ZHVsZXI6OlN0YXRlIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnN0YXRlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKwordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
OjpiZWdpbkNvbGxlY3Rpb24oKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gTm9y
bWFsKTsKKyAgICBtX3N0YXRlID0gU3RvcHBlZDsKKyAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOworCisgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5u
aW5nID0gbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7CisgICAgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZUF0VGhlRW5kID0gCisgICAgICAgIE9wdGlvbnM6OmNvbmN1cnJlbnRHQ01h
eEhlYWRyb29tKCkgKgorICAgICAgICBzdGQ6Om1heDxkb3VibGU+KG1fYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGVBdFRoZUJlZ2lubmluZywgbV9oZWFwLm1fbWF4RWRlblNpemUpOworfQorCit2b2lk
IFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmRpZFN0b3AoKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKG1fc3RhdGUgPT0gU3RvcHBlZCB8fCBtX3N0YXRlID09IFJlc3VtZWQpOworICAgIG1fc3Rh
dGUgPSBTdG9wcGVkOworfQorCit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OndpbGxS
ZXN1bWUoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gU3RvcHBlZCB8fCBtX3N0
YXRlID09IFJlc3VtZWQpOworICAgIG1fc3RhdGUgPSBSZXN1bWVkOworfQorCit2b2lkIFNwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXI6OmRpZEV4ZWN1dGVDb25zdHJhaW50cygpCit7CisgICAgLy8g
SWYgd2UgZXhlY3V0ZSBjb25zdHJhaW50cywgd2Ugd2FudCB0byBmb3JnaXZlIHRoZSBHQyBmb3Ig
YWxsIG9mIHRoZSB0aW1lIGl0IGhhZCBzdG9wcGVkIHRoZQorICAgIC8vIHdvcmxkIGZvciBpbiB0
aGlzIGluY3JlbWVudC4gVGhpcyBoYWNrIGlzIGVtcGlyaWNhbGx5IGJldHRlciB0aGFuIGV2ZXJ5
IG90aGVyIGhldXJpc3RpYyBJCisgICAgLy8gdHJpZWQsIGJlY2F1c2UgaXQganVzdCBtZWFucyB0
aGF0IHRoZSBHQyBpcyBoYXBweSB0byBwYXVzZSBmb3IgbG9uZ2VyIHdoZW4gaXQncyBkZWFsaW5n
CisgICAgLy8gd2l0aCB0aGluZ3MgdGhhdCBkb24ndCBwbGF5IHdlbGwgd2l0aCBjb25jdXJyZW5j
eS4KKyAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworfQorCitNb25vdG9u
aWNUaW1lIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1N0b3AoKQoreworICAgIHN3
aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9ybWFsOgorICAgICAgICByZXR1cm4gTW9ub3Rv
bmljVGltZTo6aW5maW5pdHkoKTsKKyAgICBjYXNlIFN0b3BwZWQ6CisgICAgICAgIHJldHVybiBN
b25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBjYXNlIFJlc3VtZWQ6IHsKKyAgICAgICAgU25hcHNo
b3Qgc25hcHNob3QoKnRoaXMpOworICAgICAgICBpZiAoIXNob3VsZEJlUmVzdW1lZChzbmFwc2hv
dCkpCisgICAgICAgICAgICByZXR1cm4gc25hcHNob3Qubm93KCk7CisgICAgICAgIHJldHVybiBz
bmFwc2hvdC5ub3coKSAtIGVsYXBzZWRJblBlcmlvZChzbmFwc2hvdCkgKyBtX3BlcmlvZDsKKyAg
ICB9IH0KICAgICAKLSAgICAvLyBTY2FsZSB0aGUgbXV0YXRvciB1dGlsaXphdGlvbiBpbnRvIHRo
ZSBwZXJtaXR0ZWQgd2luZG93LgotICAgIG11dGF0b3JVdGlsaXphdGlvbiA9Ci0gICAgICAgIE9w
dGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSArCi0gICAgICAgIG11dGF0b3JVdGls
aXphdGlvbiAqICgKLSAgICAgICAgICAgIE9wdGlvbnM6Om1heGltdW1NdXRhdG9yVXRpbGl6YXRp
b24oKSAtCi0gICAgICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkp
OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE1vbm90b25p
Y1RpbWUoKTsKK30KKworTW9ub3RvbmljVGltZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjp0
aW1lVG9SZXN1bWUoKQoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9ybWFs
OgorICAgIGNhc2UgUmVzdW1lZDoKKyAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5vdygp
OworICAgIGNhc2UgU3RvcHBlZDogeworICAgICAgICBTbmFwc2hvdCBzbmFwc2hvdCgqdGhpcyk7
CisgICAgICAgIGlmIChzaG91bGRCZVJlc3VtZWQoc25hcHNob3QpKQorICAgICAgICAgICAgcmV0
dXJuIHNuYXBzaG90Lm5vdygpOworICAgICAgICByZXR1cm4gc25hcHNob3Qubm93KCkgLSBlbGFw
c2VkSW5QZXJpb2Qoc25hcHNob3QpICsgbV9wZXJpb2QgKiBjb2xsZWN0b3JVdGlsaXphdGlvbihz
bmFwc2hvdCk7CisgICAgfSB9CiAgICAgCi0gICAgcmV0dXJuIG11dGF0b3JVdGlsaXphdGlvbjsK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBNb25vdG9uaWNU
aW1lKCk7CiB9CiAKLWRvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0YXJnZXRD
b2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0Cit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXI6OmxvZygpCiB7Ci0gICAgcmV0dXJuIDEgLSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsK
KyAgICBBU1NFUlQoT3B0aW9uczo6bG9nR0MoKSk7CisgICAgU25hcHNob3Qgc25hcHNob3QoKnRo
aXMpOworICAgIGRhdGFMb2coCisgICAgICAgICJhPSIsIGZvcm1hdCgiJS4wbGYiLCBieXRlc1Np
bmNlQmVnaW5uaW5nT2ZDeWNsZShzbmFwc2hvdCkgLyAxMDI0KSwgIiBrYiAiLAorICAgICAgICAi
aGY9IiwgZm9ybWF0KCIlLjNsZiIsIGhlYWRyb29tRnVsbG5lc3Moc25hcHNob3QpKSwgIiAiLAor
ICAgICAgICAibXU9IiwgZm9ybWF0KCIlLjNsZiIsIG11dGF0b3JVdGlsaXphdGlvbihzbmFwc2hv
dCkpLCAiICIpOwogfQogCi1TZWNvbmRzIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OmVs
YXBzZWRJblBlcmlvZCgpIGNvbnN0Cit2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmVu
ZENvbGxlY3Rpb24oKQogewotICAgIHJldHVybiAobV9ub3cgLSBtX3NjaGVkdWxlci0+bV9pbml0
aWFsVGltZSkgJSBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7CisgICAgbV9zdGF0ZSA9IE5vcm1hbDsK
KyAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogfQogCi1kb3VibGUgU3Bh
Y2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6cGhhc2UoKSBjb25zdAorZG91YmxlIFNwYWNlVGlt
ZU11dGF0b3JTY2hlZHVsZXI6OmJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlSW1wbCgpCiB7Ci0gICAg
cmV0dXJuIGVsYXBzZWRJblBlcmlvZCgpIC8gbV9zY2hlZHVsZXItPm1fcGVyaW9kOworICAgIHJl
dHVybiBtX2hlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZTsKIH0KIAotYm9vbCBTcGFjZVRp
bWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpzaG91bGRCZVJlc3VtZWQoKSBjb25zdAorZG91YmxlIFNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlKGNvbnN0
IFNuYXBzaG90JiBzbmFwc2hvdCkKIHsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxk
UmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIHBoYXNlKCkgPD0gdGFyZ2V0TXV0YXRvclV0
aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIHBoYXNlKCkgPiB0YXJnZXRDb2xsZWN0b3JVdGlsaXph
dGlvbigpOworICAgIHJldHVybiBzbmFwc2hvdC5ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSgpIC0g
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwogfQogCi1Nb25vdG9uaWNU
aW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRpbWVUb1Jlc3VtZSgpIGNvbnN0Citk
b3VibGUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6bWF4SGVhZHJvb20oKQogewotICAgIEFT
U0VSVCghc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JTaG91
bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5QZXJpb2Qo
KSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKLSAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5Q
ZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldENvbGxlY3RvclV0aWxpemF0
aW9uKCk7CisgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCAtIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKIH0KIAotTW9ub3RvbmljVGlt
ZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKCkgY29uc3QKK2RvdWJs
ZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpoZWFkcm9vbUZ1bGxuZXNzKGNvbnN0IFNuYXBz
aG90JiBzbmFwc2hvdCkKIHsKLSAgICBBU1NFUlQoc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlm
IChPcHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4g
bV9ub3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdl
dE11dGF0b3JVdGlsaXphdGlvbigpOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlv
ZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOworICAgIGRvdWJsZSByZXN1bHQgPSBieXRlc1Np
bmNlQmVnaW5uaW5nT2ZDeWNsZShzbmFwc2hvdCkgLyBtYXhIZWFkcm9vbSgpOworCisgICAgLy8g
aGVhZHJvb21GdWxsbmVzcyBjYW4gYmUgTmFOIGFuZCBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3Mg
aWYKKyAgICAvLyBieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8u
IFdlIHNlZSB0aGF0IGluIGRlYnVnIHRlc3RzLiBUaGlzIGNvZGUKKyAgICAvLyBkZWZlbmRzIGFn
YWluc3QgYWxsIGZsb2F0aW5nIHBvaW50IGRyYWdvbnMuCisgICAgCisgICAgaWYgKCEocmVzdWx0
ID49IDApKQorICAgICAgICByZXN1bHQgPSAwOworICAgIGlmICghKHJlc3VsdCA8PSAxKSkKKyAg
ICAgICAgcmVzdWx0ID0gMTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVNwYWNlVGltZVNj
aGVkdWxlcjo6U3BhY2VUaW1lU2NoZWR1bGVyKEhlYXAmIGhlYXApCi0gICAgOiBtX2hlYXAoaGVh
cCkKLSAgICAsIG1fcGVyaW9kKFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoT3B0aW9uczo6Y29u
Y3VycmVudEdDUGVyaW9kTVMoKSkpCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVCZWdpbm5pbmcoaGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlKQotICAgICwgbV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kKAotICAgICAgICBPcHRpb25zOjpjb25jdXJyZW50
R0NNYXhIZWFkcm9vbSgpICoKLSAgICAgICAgc3RkOjptYXg8ZG91YmxlPihtX2J5dGVzQWxsb2Nh
dGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcsIGhlYXAubV9tYXhFZGVuU2l6ZSkpCitkb3VibGUg
U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6bXV0YXRvclV0aWxpemF0aW9uKGNvbnN0IFNuYXBz
aG90JiBzbmFwc2hvdCkKIHsKLSAgICBzbmFwUGhhc2UoKTsKKyAgICBkb3VibGUgbXV0YXRvclV0
aWxpemF0aW9uID0gMSAtIGhlYWRyb29tRnVsbG5lc3Moc25hcHNob3QpOworICAgIAorICAgIC8v
IFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGludG8gdGhlIHBlcm1pdHRlZCB3aW5kb3cu
CisgICAgbXV0YXRvclV0aWxpemF0aW9uID0KKyAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0
b3JVdGlsaXphdGlvbigpICsKKyAgICAgICAgbXV0YXRvclV0aWxpemF0aW9uICogKAorICAgICAg
ICAgICAgT3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigpIC0KKyAgICAgICAgICAg
IE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7CisgICAgCisgICAgcmV0dXJu
IG11dGF0b3JVdGlsaXphdGlvbjsKIH0KIAotdm9pZCBTcGFjZVRpbWVTY2hlZHVsZXI6OnNuYXBQ
aGFzZSgpCitkb3VibGUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6Y29sbGVjdG9yVXRpbGl6
YXRpb24oY29uc3QgU25hcHNob3QmIHNuYXBzaG90KQogewotICAgIG1faW5pdGlhbFRpbWUgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKKyAgICByZXR1cm4gMSAtIG11dGF0b3JVdGlsaXphdGlvbihz
bmFwc2hvdCk7CiB9CiAKLVNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb24gU3BhY2VUaW1lU2No
ZWR1bGVyOjpjdXJyZW50RGVjaXNpb24oKQorU2Vjb25kcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyOjplbGFwc2VkSW5QZXJpb2QoY29uc3QgU25hcHNob3QmIHNuYXBzaG90KQogewotICAgIERl
Y2lzaW9uIHJlc3VsdDsKLSAgICByZXN1bHQubV9zY2hlZHVsZXIgPSB0aGlzOwotICAgIHJlc3Vs
dC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGU7Ci0gICAgcmVzdWx0Lm1fbm93ID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gKHNuYXBzaG90Lm5vdygpIC0gbV9zdGFydFRpbWUpICUg
bV9wZXJpb2Q7Cit9CisKK2RvdWJsZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpwaGFzZShj
b25zdCBTbmFwc2hvdCYgc25hcHNob3QpCit7CisgICAgcmV0dXJuIGVsYXBzZWRJblBlcmlvZChz
bmFwc2hvdCkgLyBtX3BlcmlvZDsKK30KKworYm9vbCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
OjpzaG91bGRCZVJlc3VtZWQoY29uc3QgU25hcHNob3QmIHNuYXBzaG90KQoreworICAgIHJldHVy
biBwaGFzZShzbmFwc2hvdCkgPiBjb2xsZWN0b3JVdGlsaXphdGlvbihzbmFwc2hvdCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaAkocmV2aXNpb24gMjEwNDk2KQko
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaDoyMTA0
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEhlYXA7CisKK2NsYXNzIFNwYWNlVGltZVNjaGVkdWxlciB7CitwdWJs
aWM6CisgICAgY2xhc3MgRGVjaXNpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zY2hlZHVsZXI7IH0KKyAgICAgICAg
CisgICAgICAgIGRvdWJsZSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdDsKKyAgICAg
ICAgZG91YmxlIHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3Q7CisgICAgICAgIFNl
Y29uZHMgZWxhcHNlZEluUGVyaW9kKCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSBwaGFzZSgpIGNv
bnN0OworICAgICAgICBib29sIHNob3VsZEJlUmVzdW1lZCgpIGNvbnN0OworICAgICAgICBNb25v
dG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIGNvbnN0OworICAgICAgICBNb25vdG9uaWNUaW1lIHRp
bWVUb1N0b3AoKSBjb25zdDsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5k
IGNsYXNzIFNwYWNlVGltZVNjaGVkdWxlcjsKKworICAgICAgICBTcGFjZVRpbWVTY2hlZHVsZXIq
IG1fc2NoZWR1bGVyIHsgbnVsbHB0ciB9OworICAgICAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZSB7IDAgfTsKKyAgICAgICAgTW9ub3RvbmljVGltZSBtX25vdzsKKyAgICB9Owor
ICAgIAorICAgIC8vIENvbnN0cnVjdCB0aGUgc2NoZWR1bGVyIGF0IHRoZSBzdGFydCBvZiBhIEdD
IGN5Y2xlLgorICAgIFNwYWNlVGltZVNjaGVkdWxlcihIZWFwJik7CisgICAgCisgICAgLy8gRm9y
Y2VzIHRoZSBuZXh0IHBoYXNlIHRvIHN0YXJ0IG5vdy4KKyAgICB2b2lkIHNuYXBQaGFzZSgpOwor
ICAgIAorICAgIC8vIFJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzY2hlZHVsaW5n
IGRlY2lzaW9uLCB3aGljaCB3aWxsIGJlIHZhbGlkIHNvIGxvbmcgYXMKKyAgICAvLyBTcGFjZVRp
bWVTY2hlZHVsZXIgaXMgbGl2ZSBhbmQgeW91IGhhdmVuJ3QgY2FsbGVkIHNuYXBQaGFzZSgpLgor
ICAgIERlY2lzaW9uIGN1cnJlbnREZWNpc2lvbigpOworICAgIAorcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgRGVjaXNpb247CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgU2Vjb25kcyBtX3Bl
cmlvZDsKKyAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5n
OworICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQ7CisgICAgTW9u
b3RvbmljVGltZSBtX2luaXRpYWxUaW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyLmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw1MyAr
MjUsNjEgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5o
PgorI2luY2x1ZGUgIk11dGF0b3JTY2hlZHVsZXIuaCIKICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIAotY2xhc3MgU3BhY2VUaW1lU2No
ZWR1bGVyIHsKKy8vIFRoZSBKU0MgY29uY3VycmVudCBHQyBzb21ldGltZXMgc3RvcHMgdGhlIHdv
cmxkIGluIG9yZGVyIHRvIHN0YXkgYWhlYWQgb2YgaXQuIFRoZXNlIGRlbGliZXJhdGUsCisvLyBz
eW50aGV0aWMgcGF1c2VzIGVuc3VyZSB0aGF0IHRoZSBHQyB3b24ndCBoYXZlIHRvIGRvIG9uZSBo
dWdlIHBhdXNlIGluIG9yZGVyIHRvIGNhdGNoIHVwIHRvIHRoZQorLy8gcmV0cmVhdGluZyB3YXZl
ZnJvbnQuIFRoZSBzY2hlZHVsZXIgaXMgY2FsbGVkICJzcGFjZS10aW1lIiBiZWNhdXNlIGl0IGxp
bmtzIHRoZSBhbW91bnQgb2YgdGltZQorLy8gdGhhdCB0aGUgd29ybGQgaXMgcGF1c2VkIGZvciB0
byB0aGUgYW1vdW50IG9mIHNwYWNlIHRoYXQgdGhlIHdvcmxkIGFsbG9jYXRlZCBzaW5jZSB0aGUg
R0MgY3ljbGUKKy8vIGJlZ2FuLgorCitjbGFzcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyIDog
cHVibGljIE11dGF0b3JTY2hlZHVsZXIgewogcHVibGljOgotICAgIGNsYXNzIERlY2lzaW9uIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiAhIW1fc2NoZWR1bGVyOyB9Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgdGFyZ2V0TXV0
YXRvclV0aWxpemF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJsZSB0YXJnZXRDb2xsZWN0b3JV
dGlsaXphdGlvbigpIGNvbnN0OwotICAgICAgICBTZWNvbmRzIGVsYXBzZWRJblBlcmlvZCgpIGNv
bnN0OwotICAgICAgICBkb3VibGUgcGhhc2UoKSBjb25zdDsKLSAgICAgICAgYm9vbCBzaG91bGRC
ZVJlc3VtZWQoKSBjb25zdDsKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9SZXN1bWUoKSBj
b25zdDsKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgY29uc3Q7Ci0gICAgICAg
IAotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXI7
Ci0KLSAgICAgICAgU3BhY2VUaW1lU2NoZWR1bGVyKiBtX3NjaGVkdWxlciB7IG51bGxwdHIgfTsK
LSAgICAgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgeyAwIH07Ci0gICAgICAg
IE1vbm90b25pY1RpbWUgbV9ub3c7Ci0gICAgfTsKLSAgICAKLSAgICAvLyBDb25zdHJ1Y3QgdGhl
IHNjaGVkdWxlciBhdCB0aGUgc3RhcnQgb2YgYSBHQyBjeWNsZS4KLSAgICBTcGFjZVRpbWVTY2hl
ZHVsZXIoSGVhcCYpOwotICAgIAotICAgIC8vIEZvcmNlcyB0aGUgbmV4dCBwaGFzZSB0byBzdGFy
dCBub3cuCi0gICAgdm9pZCBzbmFwUGhhc2UoKTsKLSAgICAKLSAgICAvLyBSZXR1cm5zIGEgc25h
cHNob3Qgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGluZyBkZWNpc2lvbiwgd2hpY2ggd2lsbCBiZSB2
YWxpZCBzbyBsb25nIGFzCi0gICAgLy8gU3BhY2VUaW1lU2NoZWR1bGVyIGlzIGxpdmUgYW5kIHlv
dSBoYXZlbid0IGNhbGxlZCBzbmFwUGhhc2UoKS4KLSAgICBEZWNpc2lvbiBjdXJyZW50RGVjaXNp
b24oKTsKKyAgICBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyKEhlYXAmKTsKKyAgICB+U3BhY2VU
aW1lTXV0YXRvclNjaGVkdWxlcigpOworICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgCisgICAgdm9pZCBiZWdpbkNvbGxlY3Rpb24oKSBvdmVycmlkZTsKKyAgICAK
KyAgICB2b2lkIGRpZFN0b3AoKSBvdmVycmlkZTsKKyAgICB2b2lkIHdpbGxSZXN1bWUoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVDb25zdHJhaW50cygpIG92ZXJyaWRlOworICAgIAor
ICAgIE1vbm90b25pY1RpbWUgdGltZVRvU3RvcCgpIG92ZXJyaWRlOworICAgIE1vbm90b25pY1Rp
bWUgdGltZVRvUmVzdW1lKCkgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBsb2coKSBvdmVycmlk
ZTsKKyAgICAKKyAgICB2b2lkIGVuZENvbGxlY3Rpb24oKSBvdmVycmlkZTsKICAgICAKIHByaXZh
dGU6Ci0gICAgZnJpZW5kIGNsYXNzIERlY2lzaW9uOwotCisgICAgY2xhc3MgU25hcHNob3Q7Cisg
ICAgZnJpZW5kIGNsYXNzIFNuYXBzaG90OworICAgIAorICAgIGRvdWJsZSBieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZUltcGwoKTsKKyAgICAKKyAgICBkb3VibGUgYnl0ZXNTaW5jZUJlZ2lubmluZ09m
Q3ljbGUoY29uc3QgU25hcHNob3QmKTsKKyAgICBkb3VibGUgbWF4SGVhZHJvb20oKTsKKyAgICBk
b3VibGUgaGVhZHJvb21GdWxsbmVzcyhjb25zdCBTbmFwc2hvdCYpOworICAgIGRvdWJsZSBtdXRh
dG9yVXRpbGl6YXRpb24oY29uc3QgU25hcHNob3QmKTsKKyAgICBkb3VibGUgY29sbGVjdG9yVXRp
bGl6YXRpb24oY29uc3QgU25hcHNob3QmKTsKKyAgICBTZWNvbmRzIGVsYXBzZWRJblBlcmlvZChj
b25zdCBTbmFwc2hvdCYpOworICAgIGRvdWJsZSBwaGFzZShjb25zdCBTbmFwc2hvdCYpOworICAg
IGJvb2wgc2hvdWxkQmVSZXN1bWVkKGNvbnN0IFNuYXBzaG90Jik7CisgICAgCiAgICAgSGVhcCYg
bV9oZWFwOwogICAgIFNlY29uZHMgbV9wZXJpb2Q7Ci0gICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZUF0VGhlRW5kOwotICAgIE1vbm90b25pY1RpbWUgbV9pbml0aWFsVGltZTsKKyAgICBT
dGF0ZSBtX3N0YXRlIHsgTm9ybWFsIH07CisgICAgCisgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyB7IDAgfTsKKyAgICBkb3VibGUgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZUF0VGhlRW5kIHsgMCB9OworICAgIE1vbm90b25pY1RpbWUgbV9zdGFydFRp
bWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjEwNDk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTcGFjZVRp
bWVTY2hlZHVsZXIuaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWRvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0YXJnZXRNdXRhdG9y
VXRpbGl6YXRpb24oKSBjb25zdAotewotICAgIGRvdWJsZSBieXRlc1NpbmNlQmVnaW5uaW5nT2ZD
eWNsZSA9Ci0gICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgLSBtX3NjaGVkdWxlci0+
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwotICAgIAotICAgIGRvdWJs
ZSBtYXhIZWFkcm9vbSA9Ci0gICAgICAgIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlQXRUaGVFbmQgLSBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0
VGhlQmVnaW5uaW5nOwotICAgIAotICAgIGRvdWJsZSBoZWFkcm9vbUZ1bGxuZXNzID0KLSAgICAg
ICAgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgLyBtYXhIZWFkcm9vbTsKLSAgICAKLSAgICAv
LyBoZWFkcm9vbUZ1bGxuZXNzIGNhbiBiZSBOYU4gYW5kIG90aGVyIGludGVyZXN0aW5nIHRoaW5n
cyBpZgotICAgIC8vIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcgaXMgemVy
by4gV2Ugc2VlIHRoYXQgaW4gZGVidWcgdGVzdHMuIFRoaXMgY29kZQotICAgIC8vIGRlZmVuZHMg
YWdhaW5zdCBhbGwgZmxvYXRpbmcgcG9pbnQgZHJhZ29ucy4KLSAgICAKLSAgICBpZiAoIShoZWFk
cm9vbUZ1bGxuZXNzID49IDApKQotICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0gMDsKLSAgICBp
ZiAoIShoZWFkcm9vbUZ1bGxuZXNzIDw9IDEpKQotICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0g
MTsKLSAgICAKLSAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0aW9uID0gMSAtIGhlYWRyb29tRnVs
bG5lc3M7Ci0gICAgCi0gICAgLy8gU2NhbGUgdGhlIG11dGF0b3IgdXRpbGl6YXRpb24gaW50byB0
aGUgcGVybWl0dGVkIHdpbmRvdy4KLSAgICBtdXRhdG9yVXRpbGl6YXRpb24gPQotICAgICAgICBP
cHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgKwotICAgICAgICBtdXRhdG9yVXRp
bGl6YXRpb24gKiAoCi0gICAgICAgICAgICBPcHRpb25zOjptYXhpbXVtTXV0YXRvclV0aWxpemF0
aW9uKCkgLQotICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigp
KTsKLSAgICAKLSAgICByZXR1cm4gbXV0YXRvclV0aWxpemF0aW9uOwotfQotCi1kb3VibGUgU3Bh
Y2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKSBj
b25zdAotewotICAgIHJldHVybiAxIC0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Ci19Ci0K
LVNlY29uZHMgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6ZWxhcHNlZEluUGVyaW9kKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gKG1fbm93IC0gbV9zY2hlZHVsZXItPm1faW5pdGlhbFRpbWUp
ICUgbV9zY2hlZHVsZXItPm1fcGVyaW9kOwotfQotCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVy
OjpEZWNpc2lvbjo6cGhhc2UoKSBjb25zdAotewotICAgIHJldHVybiBlbGFwc2VkSW5QZXJpb2Qo
KSAvIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKLX0KLQotYm9vbCBTcGFjZVRpbWVTY2hlZHVsZXI6
OkRlY2lzaW9uOjpzaG91bGRCZVJlc3VtZWQoKSBjb25zdAotewotICAgIGlmIChPcHRpb25zOjpj
b2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gcGhhc2UoKSA8PSB0
YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKLSAgICByZXR1cm4gcGhhc2UoKSA+IHRhcmdldENv
bGxlY3RvclV0aWxpemF0aW9uKCk7Ci19Ci0KLU1vbm90b25pY1RpbWUgU3BhY2VUaW1lU2NoZWR1
bGVyOjpEZWNpc2lvbjo6dGltZVRvUmVzdW1lKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIXNob3Vs
ZEJlUmVzdW1lZCgpKTsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmly
c3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVk
dWxlci0+bV9wZXJpb2Q7Ci0gICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBt
X3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOwotfQot
Ci1Nb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRpbWVUb1N0b3Ao
KSBjb25zdAotewotICAgIEFTU0VSVChzaG91bGRCZVJlc3VtZWQoKSk7Ci0gICAgaWYgKE9wdGlv
bnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCi0gICAgICAgIHJldHVybiBtX25vdyAt
IGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0TXV0YXRv
clV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBt
X3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci19Ci0KLVNwYWNlVGltZVNjaGVkdWxlcjo6U3BhY2VUaW1l
U2NoZWR1bGVyKEhlYXAmIGhlYXApCi0gICAgOiBtX2hlYXAoaGVhcCkKLSAgICAsIG1fcGVyaW9k
KFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoT3B0aW9uczo6Y29uY3VycmVudEdDUGVyaW9kTVMo
KSkpCi0gICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcoaGVhcC5t
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlKQotICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZUF0VGhlRW5kKAotICAgICAgICBPcHRpb25zOjpjb25jdXJyZW50R0NNYXhIZWFkcm9vbSgpICoK
LSAgICAgICAgc3RkOjptYXg8ZG91YmxlPihtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVC
ZWdpbm5pbmcsIGhlYXAubV9tYXhFZGVuU2l6ZSkpCi17Ci0gICAgc25hcFBoYXNlKCk7Ci19Ci0K
LXZvaWQgU3BhY2VUaW1lU2NoZWR1bGVyOjpzbmFwUGhhc2UoKQotewotICAgIG1faW5pdGlhbFRp
bWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLX0KLQotU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNp
c2lvbiBTcGFjZVRpbWVTY2hlZHVsZXI6OmN1cnJlbnREZWNpc2lvbigpCi17Ci0gICAgRGVjaXNp
b24gcmVzdWx0OwotICAgIHJlc3VsdC5tX3NjaGVkdWxlciA9IHRoaXM7Ci0gICAgcmVzdWx0Lm1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSBtX2hlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZTsKLSAgICByZXN1bHQubV9ub3cgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmgJKHJldmlzaW9uIDIxMDQ5NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oCShub25l
eGlzdGVudCkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNU
aW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNs
YXNzIEhlYXA7Ci0KLWNsYXNzIFNwYWNlVGltZVNjaGVkdWxlciB7Ci1wdWJsaWM6Ci0gICAgY2xh
c3MgRGVjaXNpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zY2hlZHVsZXI7IH0KLSAgICAgICAgCi0gICAgICAgIGRv
dWJsZSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdDsKLSAgICAgICAgZG91YmxlIHRh
cmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIFNlY29uZHMgZWxhcHNl
ZEluUGVyaW9kKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJsZSBwaGFzZSgpIGNvbnN0OwotICAgICAg
ICBib29sIHNob3VsZEJlUmVzdW1lZCgpIGNvbnN0OwotICAgICAgICBNb25vdG9uaWNUaW1lIHRp
bWVUb1Jlc3VtZSgpIGNvbnN0OwotICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBj
b25zdDsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIFNwYWNl
VGltZVNjaGVkdWxlcjsKLQotICAgICAgICBTcGFjZVRpbWVTY2hlZHVsZXIqIG1fc2NoZWR1bGVy
IHsgbnVsbHB0ciB9OwotICAgICAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSB7
IDAgfTsKLSAgICAgICAgTW9ub3RvbmljVGltZSBtX25vdzsKLSAgICB9OwotICAgIAotICAgIC8v
IENvbnN0cnVjdCB0aGUgc2NoZWR1bGVyIGF0IHRoZSBzdGFydCBvZiBhIEdDIGN5Y2xlLgotICAg
IFNwYWNlVGltZVNjaGVkdWxlcihIZWFwJik7Ci0gICAgCi0gICAgLy8gRm9yY2VzIHRoZSBuZXh0
IHBoYXNlIHRvIHN0YXJ0IG5vdy4KLSAgICB2b2lkIHNuYXBQaGFzZSgpOwotICAgIAotICAgIC8v
IFJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzY2hlZHVsaW5nIGRlY2lzaW9uLCB3
aGljaCB3aWxsIGJlIHZhbGlkIHNvIGxvbmcgYXMKLSAgICAvLyBTcGFjZVRpbWVTY2hlZHVsZXIg
aXMgbGl2ZSBhbmQgeW91IGhhdmVuJ3QgY2FsbGVkIHNuYXBQaGFzZSgpLgotICAgIERlY2lzaW9u
IGN1cnJlbnREZWNpc2lvbigpOwotICAgIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRGVj
aXNpb247Ci0KLSAgICBIZWFwJiBtX2hlYXA7Ci0gICAgU2Vjb25kcyBtX3BlcmlvZDsKLSAgICBk
b3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOwotICAgIGRvdWJs
ZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQ7Ci0gICAgTW9ub3RvbmljVGltZSBt
X2luaXRpYWxUaW1lOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjpT
eW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIoKQoreworfQorCitTeW5jaHJv
bm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6On5TeW5jaHJvbm91c1N0b3BUaGVXb3Js
ZE11dGF0b3JTY2hlZHVsZXIoKQoreworfQorCitNdXRhdG9yU2NoZWR1bGVyOjpTdGF0ZSBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OnN0YXRlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zdGF0ZTsKK30KKwordm9pZCBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXI6OmJlZ2luQ29sbGVjdGlvbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9z
dGF0ZSA9PSBOb3JtYWwpOworICAgIG1fc3RhdGUgPSBTdG9wcGVkOworfQorCitNb25vdG9uaWNU
aW1lIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6dGltZVRvU3RvcCgp
Cit7CisgICAgcmV0dXJuIG1fc3RhdGUgPT0gTm9ybWFsID8gTW9ub3RvbmljVGltZTo6aW5maW5p
dHkoKSA6IE1vbm90b25pY1RpbWU6Om5vdygpOworfQorCitNb25vdG9uaWNUaW1lIFN5bmNocm9u
b3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6dGltZVRvUmVzdW1lKCkKK3sKKyAgICBy
ZXR1cm4gbV9zdGF0ZSA9PSBOb3JtYWwgPyBNb25vdG9uaWNUaW1lOjpub3coKSA6IE1vbm90b25p
Y1RpbWU6OmluZmluaXR5KCk7Cit9CisKK3ZvaWQgU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyOjplbmRDb2xsZWN0aW9uKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0
YXRlID09IFN0b3BwZWQpOworICAgIG1fc3RhdGUgPSBOb3JtYWw7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiTXV0YXRvclNjaGVkdWxlci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworLy8gVGhlIEpTQyBjb25jdXJyZW50IEdDIHJlbGllcyBvbiBzdG9wcGluZyB0aGUgd29y
bGQgdG8gc3RheSBhaGVhZCBvZiB0aGUgcmV0cmVhdGluZyB3YXZlZnJvbnQuCisvLyBJdCBzbyBo
YXBwZW5zIHRoYXQgdGhlIHNhbWUgQVBJIGNhbiBiZSByZXVzZWQgdG8gaW1wbGVtZW50IGEgbm9u
LWNvbmN1cnJlbnQgR0MgbW9kZSwgd2hpY2ggd2UKKy8vIHVzZSBvbiBwbGF0Zm9ybXMgdGhhdCBk
b24ndCBzdXBwb3J0IHRoZSBHQydzIGF0b21pY2l0eSBwcm90b2NvbHMuIFRoYXQgbWVhbnMgYW55
dGhpbmcgb3RoZXIKKy8vIHRoYW4gWDg2LTY0IGFuZCBBUk02NC4gVGhpcyBzY2hlZHVsZXIgaXMg
YSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgY29uY3VycmVudCBHQydzCisvLyBTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyLiBJdCB0ZWxscyB0aGUgR0MgdG8gbmV2ZXIgcmVzdW1lIHRoZSB3
b3JsZCBvbmNlIHRoZSBHQyBjeWNsZSBiZWdpbnMuCisKK2NsYXNzIFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlciA6IHB1YmxpYyBNdXRhdG9yU2NoZWR1bGVyIHsKK3B1Ymxp
YzoKKyAgICBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIoKTsKKyAgICB+
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgCisgICAgU3Rh
dGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGJlZ2luQ29sbGVjdGlv
bigpIG92ZXJyaWRlOworICAgIAorICAgIE1vbm90b25pY1RpbWUgdGltZVRvU3RvcCgpIG92ZXJy
aWRlOworICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lKCkgb3ZlcnJpZGU7CisgICAgCisg
ICAgdm9pZCBlbmRDb2xsZWN0aW9uKCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgU3RhdGUg
bV9zdGF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBWaXNpdGluZ1RpbWVvdXQgeworcHVibGljOgorICAgIFZpc2l0aW5n
VGltZW91dCgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWaXNpdGluZ1RpbWVvdXQoU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGlt
ZW91dCkKKyAgICAgICAgOiBtX2RpZFZpc2l0U29tZXRoaW5nKGRpZFZpc2l0U29tZXRoaW5nKQor
ICAgICAgICAsIG1fdmlzaXRDb3VudEJlZm9yZSh2aXNpdG9yLnZpc2l0Q291bnQoKSkKKyAgICAg
ICAgLCBtX3RpbWVvdXQodGltZW91dCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHNpemVfdCB2
aXNpdENvdW50KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZpc2l0b3IudmlzaXRDb3VudCgpIC0gbV92aXNpdENvdW50QmVmb3JlOworICAgIH0KKwor
ICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZyB8fCB2aXNpdENvdW50KHZp
c2l0b3IpOworICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZFRpbWVPdXQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmco
dmlzaXRvcikgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKKyAgICBzaXplX3QgbV92
aXNpdENvdW50QmVmb3JlIHsgMCB9OworICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDggKzIwMiw2IEBAIHR5cGVk
ZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoZG91YmxlLCBtYXhpbXVtTXV0YXRv
clV0aWxpemF0aW9uLCAwLjcsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBjb25j
dXJyZW50R0NNYXhIZWFkcm9vbSwgMS41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJs
ZSwgY29uY3VycmVudEdDUGVyaW9kTVMsIDIsIE5vcm1hbCwgbnVsbHB0cikgXAotICAgIHYoYm9v
bCwgY29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
LSAgICB2KGRvdWJsZSwgY29sbGVjdG9yUGVybWl0dGVkSWRsZVJhdGlvLCAwLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9uLCAxLjQsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIGxhcmdlQWxsb2NhdGlvbkN1dG9mZiwgMTAw
MDAwLCBOb3JtYWwsIG51bGxwdHIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298320</attachid>
            <date>2017-01-08 15:32:38 -0800</date>
            <delta_ts>2017-01-08 15:46:06 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>151819</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0OSBA
QAorMjAxNy0wMS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgdGhlIGNvbGxlY3RvcidzIGZpeHBvaW50IHNtYXJ0IGFib3V0IHNjaGVkdWxpbmcgd29y
aworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1OTEw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgZXZlcnkgdGltZSB0aGUgR0Mgd291bGQgcnVuIGFueSBj
b25zdHJhaW50cyBpbiBtYXJrVG9GaXhwb2ludCwgaXQKKyAgICAgICAgd291bGQgcnVuIGFsbCBv
ZiB0aGUgY29uc3RyYWludHMuIEl0IHdvdWxkIGFsd2F5cyBydW4gdGhlbSBpbiB0aGUgc2FtZSBv
cmRlci4gVGhhdCBtZWFucworICAgICAgICB0aGF0IHNvIGxvbmcgYXMgYW55IG9uZSBjb25zdHJh
aW50IHdhcyBnZW5lcmF0aW5nIG5ldyB3b3JrLCB3ZSdkIHBheSB0aGUgcHJpY2Ugb2YgYWxsCisg
ICAgICAgIGNvbnN0cmFpbnRzLiBUaGlzIGlzIHVzdWFsbHkgT0sgYmVjYXVzZSBtb3N0IGNvbnN0
cmFpbnRzIGFyZSBjaGVhcCBidXQgaXQgYXJ0aWZpY2lhbGx5CisgICAgICAgIGluZmxhdGVzIHRo
ZSBjb3N0IG9mIHNsb3cgY29uc3RyYWludHMgLSBlc3BlY2lhbGx5IG9uZXMgdGhhdCBhcmUgZXhw
ZW5zaXZlIGJ1dCB1c3VhbGx5CisgICAgICAgIGdlbmVyYXRlIG5vIG5ldyB3b3JrLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBwYXRjaCByZWRvZXMgaG93IHRoZSBHQyBydW5zIGNvbnN0cmFpbnRz
IGJ5IGFwcGx5aW5nIGlkZWFzIGZyb20gZGF0YSBmbG93IGFuYWx5c2lzLgorICAgICAgICBUaGUg
R0Mgbm93IGJ1aWxkcyBhIE1hcmtpbmdDb25zdHJhaW50U2V0IHdoZW4gaXQgYm9vdHMgdXAsIGFu
ZCB0aGlzIGNvbnRhaW5zIGFsbCBvZiB0aGUKKyAgICAgICAgY29uc3RyYWludHMgYXMgd2VsbCBh
cyBzb21lIG1ldGEtZGF0YSBhYm91dCB0aGVtLiBOb3csIG1hcmtUb0ZpeHBvaW50IGp1c3QgY2Fs
bHMgaW50bworICAgICAgICBNYXJraW5nQ29uc3RyYWludFNldCB0byBleGVjdXRlIGNvbnN0cmFp
bnRzLiBCZWNhdXNlIGNvbnN0cmFpbnQgZXhlY3V0aW9uIGFuZCBzY2hlZHVsaW5nCisgICAgICAg
IG5lZWQgdG8gYmUgYXdhcmUgb2YgZWFjaCBvdGhlciwgSSByZXdyb3RlIG1hcmtUb0ZpeHBvaW50
IGluIHN1Y2ggYSB3YXkgdGhhdCBpdCdzIG1vcmUKKyAgICAgICAgb2J2aW91cyBob3cgdGhlIEdD
IGdvZXMgYmV0d2VlbiBjb25zdHJhaW50IHNvbHZpbmcsIG1hcmtpbmcgd2l0aCBzdG9wcGVkIG11
dGF0b3IsIGFuZAorICAgICAgICBtYXJraW5nIHdpdGggcmVzdW1lZCBtdXRhdG9yLiBUaGlzIGFs
c28gY2hhbmdlcyB0aGUgc2NoZWR1bGVyIEFQSSBpbiBzdWNoIGEgd2F5IHRoYXQgYQorICAgICAg
ICBzeW5jaHJvbm91cyBzdG9wLXRoZS13b3JsZCBjb2xsZWN0aW9uIG5vIGxvbmdlciBuZWVkcyB0
byBkbyBmYWtlIHN0b3AvcmVzdW1lIC0gaW5zdGVhZCB3ZQorICAgICAgICBqdXN0IHN3YXAgdGhl
IHNwYWNlLXRpbWUgc2NoZWR1bGVyIGZvciB0aGUgc3RvcC10aGUtd29ybGQgc2NoZWR1bGVyLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIGJpZyBzdHJlYW1saW5pbmcgb2YgdGhlIEdDLiBU
aGlzIGlzIGEgc3BlZWQtdXAgaW4gR0MtaGVhdnkgdGVzdHMgYmVjYXVzZSB3ZQorICAgICAgICBu
b3cgZXhlY3V0ZSBtb3N0IGNvbnN0cmFpbnRzIGV4YWN0bHkgdHdpY2UgcmVnYXJkbGVzcyBvZiBo
b3cgbWFueSB0b3RhbCBmaXhwb2ludAorICAgICAgICBpdGVyYXRpb25zIHdlIGRvLiBOb3csIHdo
ZW4gd2UgcnVuIG91dCBvZiBtYXJraW5nIHdvcmssIHRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxs
IGp1c3QKKyAgICAgICAgcnVuIHRoZSBjb25zdHJhaW50IHRoYXQgaXMgbW9zdCBsaWtlbHkgdG8g
Z2VuZXJhdGUgbmV3IHZpc2l0aW5nIHdvcmssIGFuZCBpZiBpdCBkb2VzCisgICAgICAgIGdlbmVy
YXRlIHdvcmssIHRoZW4gdGhlIEdDIG5vdyBnb2VzIGJhY2sgdG8gbWFya2luZy4gQmVmb3JlLCBp
dCB3b3VsZCBydW4gKmFsbCoKKyAgICAgICAgY29uc3RyYWludHMgYW5kIHRoZW4gZ28gYmFjayB0
byBtYXJraW5nLiBUaGUgY29uc3RyYWludCBzb2x2ZXIgaXMgYXJtZWQgd2l0aCB0aHJlZQorICAg
ICAgICBpbmZvcm1hdGlvbiBzaWduYWxzIHRoYXQgaXQgdXNlcyB0byBzb3J0IHRoZSBjb25zdHJh
aW50cyBpbiBvcmRlciBvZiBkZXNjZW5kaW5nIGxpa2VsaWhvb2QKKyAgICAgICAgdG8gZ2VuZXJh
dGUgbmV3IG1hcmtpbmcgd29yay4gVGhlbiBpdCBydW5zIHRoZW0gaW4gdGhhdCBvcmRlciB1bnRp
bCBpdCB0aGVyZSBpcyBuZXcKKyAgICAgICAgbWFya2luZyB3b3JrLiBUaGUgc2lnbmFscyBhcmU6
CisgICAgICAgIAorICAgICAgICAxKSBXaGV0aGVyIHRoZSBjb25zdHJhaW50IGlzIGdyZXllZCBi
eSBtYXJraW5nIG9yIGV4ZWN1dGlvbi4gV2UgY2FsbCB0aGlzIHRoZSB2b2xhdGlsaXR5CisgICAg
ICAgICAgIG9mIHRoZSBjb25zdHJhaW50LiBGb3IgZXhhbXBsZSwgd2VhayByZWZlcmVuY2UgY29u
c3RyYWludHMgaGF2ZSBHcmV5ZWRCeU1hcmtpbmcgYXMKKyAgICAgICAgICAgdGhlaXIgdm9sYXRp
bGl0eSBiZWNhdXNlIHRoZXkgYXJlIG1vc3QgbGlrZWx5IHRvIGhhdmUgc29tZXRoaW5nIHRvIHNh
eSBhZnRlciB3ZSd2ZSBkb25lCisgICAgICAgICAgIHNvbWUgbWFya2luZy4gT24gdGhlIG90aGVy
IGhhbmQsIGNvbnNlcnZhdGl2ZSByb290cyBoYXZlIEdyZXllZEJ5RXhlY3V0aW9uIGFzIHRoZWly
CisgICAgICAgICAgIHZvbGF0aWxpdHkgYmVjYXVzZSB0aGV5IHdpbGwgZ2l2ZSBuZXcgaW5mb3Jt
YXRpb24gYW55dGltZSB3ZSBsZXQgdGhlIG11dGF0b3IgcnVuLiBUaGUKKyAgICAgICAgICAgY29u
c3RyYWludCBzb2x2ZXIgd2lsbCBvbmx5IHJ1biBHcmV5ZWRCeUV4ZWN1dGlvbiBjb25zdHJhaW50
cyBhcyByb290cyBhbmQgYWZ0ZXIgdGhlCisgICAgICAgICAgIEdyZXllZEJ5TWFya2luZyBjb25z
dHJhaW50cyBnbyBzaWxlbnQuIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGRvbid0IHRyeSB0byBzY2Fu
CisgICAgICAgICAgIGNvbnNlcnZhdGl2ZSByb290cyBldmVyeSB0aW1lIHdlIG5lZWQgdG8gcmUt
cnVuIHdlYWsgcmVmZXJlbmNlcyBhbmQgdmljZS12ZXJzYS4KKyAgICAgICAgICAgCisgICAgICAg
ICAgIEFub3RoZXIgd2F5IHRvIGxvb2sgYXQgaXQgaXMgdGhhdCB0aGUgY29uc3RyYWludCBzb2x2
ZXIgdHJpZXMgdG8gcHJlZGljdCBpZiB0aGUKKyAgICAgICAgICAgd2F2ZWZyb250IGlzIGFkdmFu
Y2luZyBvciByZXRyZWF0aW5nLiBUaGUgd2F2ZWZyb250IGlzIGFsbW9zdCBjZXJ0YWlubHkgYWR2
YW5jaW5nIHNvCisgICAgICAgICAgIGxvbmcgYXMgdGhlIG1hcmsgc3RhY2tzIGFyZSBub24tZW1w
dHkgb3Igc28gbG9uZyBhcyBhdCBsZWFzdCBvbmUgb2YgdGhlIEdyZXllZEJ5TWFya2luZworICAg
ICAgICAgICBjb25zdHJhaW50cyBpcyBzdGlsbCBwcm9kdWNpbmcgd29yay4gT3RoZXJ3aXNlIHRo
ZSB3YXZlZnJvbnQgaXMgYWxtb3N0IGNlcnRhaW5seQorICAgICAgICAgICByZXRyZWF0aW5nLiBJ
dCdzIG1vc3QgcHJvZml0YWJsZSB0byBydW4gR3JleWVkQnlNYXJraW5nIGNvbnN0cmFpbnRzIHdo
ZW4gdGhlIHdhdmVmcm9udAorICAgICAgICAgICBpcyBhZHZhbmNpbmcsIGFuZCBtb3N0IHByb2Zp
dGFibGUgdG8gcnVuIEdyZXllZEJ5RXhlY3V0aW9uIGNvbnN0cmFpbnRzIHdoZW4gdGhlCisgICAg
ICAgICAgIHdhdmVmcm9udCBpcyByZXRyZWF0aW5nLgorICAgICAgICAgICAKKyAgICAgICAgICAg
V2UgdXNlIHRoZSBwcmVkaWN0ZWQgd2F2ZWZyb250IGRpcmVjdGlvbiBhbmQgdGhlIHZvbGF0aWxp
dHkgb2YgY29uc3RyYWludHMgYXMgYQorICAgICAgICAgICBmaXJzdC1vcmRlciBzaWduYWwgb2Yg
Y29uc3RyYWludCBwcm9maXRhYmlsaXR5LgorICAgICAgICAKKyAgICAgICAgMikgSG93IG11Y2gg
dmlzaXRpbmcgd29yayB3YXMgY3JlYXRlZCB0aGUgbGFzdCB0aW1lIHRoZSBjb25zdHJhaW50IHJh
bi4gVGhlIHNvbHZlcgorICAgICAgICAgICByZW1lbWJlcnMgdGhlIGxhc3RWaXNpdENvdW50LCBh
bmQgdXNlcyBpdCB0byBwcmVkaWN0IGhvdyBtdWNoIHdvcmsgdGhlIGNvbnN0cmFpbnQgd2lsbAor
ICAgICAgICAgICBnZW5lcmF0ZSBuZXh0IHRpbWUuIEluIHByYWN0aWNlIHRoaXMgbWVhbnMgd2Ug
d2lsbCBrZWVwIHJlLXJ1bm5pbmcgdGhlIG9uZSBpbnRlcmVzdGluZworICAgICAgICAgICBjb25z
dHJhaW50IHVudGlsIGl0IHNodXRzIHVwLgorICAgICAgICAKKyAgICAgICAgMykgT3B0aW9uYWwg
d29yayBwcmVkaWN0b3JzIGZvciBzb21lIGNvbnN0cmFpbnRzLiBUaGUgY29uc3RyYWludCB0aGF0
IHNodWZmbGVzIHRoZSBtdXRhdG9yCisgICAgICAgICAgIG1hcmsgc3RhY2sgaW50byB0aGUgbWFp
biBTbG90VmlzaXRvcidzIG11dGF0b3IgbWFyayBzdGFjayBhbHdheXMga25vd3MgZXhhY3RseSBo
b3cgbXVjaAorICAgICAgICAgICB3b3JrIGl0IHdpbGwgY3JlYXRlLgorICAgICAgICAgICAKKyAg
ICAgICAgICAgVGhlIHN1bSBvZiAoMikgYW5kICgzKSBhcmUgdXNlZCBhcyBhIHNlY29uZC1vcmRl
ciBzaWduYWwgb2YgY29uc3RyYWludCBwcm9maXRhYmlsaXR5LgorICAgICAgICAKKyAgICAgICAg
VGhlIGNvbnN0cmFpbnQgc29sdmVyIHdpbGwgYWx3YXlzIHJ1biBhbGwgb2YgdGhlIEdyZXllZEJ5
RXhlY3V0aW9uIGNvbnN0cmFpbnRzIGF0IEdDCisgICAgICAgIHN0YXJ0LCBzaW5jZSB0aGVzZSBk
b3VibGUgYXMgdGhlIEdDJ3Mgcm9vdHMuIFRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxsIGFsd2F5
cyBydW4gYWxsIG9mCisgICAgICAgIHRoZSBHcmV5ZWRCeU1hcmtpbmcgY29uc3RyYWludHMgdGhl
IGZpcnN0IHRpbWUgdGhhdCBtYXJraW5nIHN0YWxscy4gT3RoZXIgdGhhbiB0aGF0LCB0aGUKKyAg
ICAgICAgc29sdmVyIHdpbGwga2VlcCBydW5uaW5nIGNvbnN0cmFpbnRzLCBzb3J0ZWQgYWNjb3Jk
aW5nIHRvIHRoZWlyIGxpa2VsaWhvb2QgdG8gY3JlYXRlIHdvcmssCisgICAgICAgIHVudGlsIGVp
dGhlciB3b3JrIGlzIGNyZWF0ZWQgb3Igd2UgcnVuIG91dCBvZiBjb25zdHJhaW50cyB0byBydW4u
IEdDIHRlcm1pbmF0aW9uIGhhcHBlbnMKKyAgICAgICAgd2hlbiB3ZSBydW4gb3V0IG9mIGNvbnN0
cmFpbnRzIHRvIHJ1bi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbmV3IGluZnJhc3RydWN0dXJl
IG1lYW5zIHRoYXQgd2UgaGF2ZSBhIG11Y2ggYmV0dGVyIGNoYW5jZSBvZiBkZWFsaW5nIHdpdGgg
d29yc3QtY2FzZQorICAgICAgICBET00gcGF0aG9sb2dpZXMuIElmIHdlIGNhbiBpbnRlbGxpZ2Vu
dGx5IGZhY3RvciBkaWZmZXJlbnQgZXZpbCBET00gdGhpbmdzIGludG8gZGlmZmVyZW50CisgICAg
ICAgIGNvbnN0cmFpbnRzIHdpdGggdGhlIHJpZ2h0IHdvcmsgcHJlZGljdGlvbnMgdGhlbiB0aGlz
IGNvdWxkIHJlZHVjZSB0aGUgY29zdCBvZiB0aG9zZSBET00KKyAgICAgICAgdGhpbmdzIGJ5IGEg
ZmFjdG9yIG9mIE4gd2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIGZpeHBvaW50IGl0ZXJhdGlvbnMg
dGhlIEdDIHR5cGljYWxseQorICAgICAgICBkb2VzLiBOIGlzIHVzdWFsbHkgYXJvdW5kIDUtNiBl
dmVuIGZvciBzaW1wbGUgaGVhcHMuCisgICAgICAgIAorICAgICAgICBNeSBwZXJmIG1lYXN1cmVt
ZW50cyBzYXk6CisgICAgICAgIAorICAgICAgICBQTFQzOiAwLjAyJSBmYXN0ZXIgd2l0aCA1LjMl
IGNvbmZpZGVuY2UuCisgICAgICAgIEpldFN0cmVhbTogMC4xNSUgZmFzdGVyIHdpdGggMTclIGNv
bmZpZGVuY2UuCisgICAgICAgIFNwZWVkb21ldGVyOiAwLjU4JSBmYXN0ZXIgd2l0aCA4MiUgY29u
ZmlkZW5jZS4KKyAgICAgICAgCisgICAgICAgIEhlcmUgYXJlIHRoZSBkZXRhaWxzIGZyb20gSmV0
U3RyZWFtOgorICAgICAgICAKKyAgICAgICAgc3BsYXk6IDEuMDIxNzN4IGZhc3RlciB3aXRoIDAu
OTk2ODQxIGNvbmZpZGVuY2UKKyAgICAgICAgc3BsYXktbGF0ZW5jeTogMS4wNjE3eCBmYXN0ZXIg
d2l0aCAwLjk4NzQ2MiBjb25maWRlbmNlCisgICAgICAgIHRvd2Vycy5jOiAxLjAxODUyeCBmYXN0
ZXIgd2l0aCAwLjkyMTI4IGNvbmZpZGVuY2UKKyAgICAgICAgY3J5cHRvLW1kNTogMS4wNjA1OHgg
ZmFzdGVyIHdpdGggMC40ODIzNjMgY29uZmlkZW5jZQorICAgICAgICBzY29yZTogMS4wMDE1Mngg
ZmFzdGVyIHdpdGggMC4xNjg5MiBjb25maWRlbmNlCisgICAgICAgIAorICAgICAgICBJIHRoaW5r
IHRoYXQgU3BlZWRvbWV0ZXIgaXMgbGVnaXRpbWF0ZWx5IGJlbmVmaXRpbmcgZnJvbSB0aGlzIGNo
YW5nZSBiYXNlZCBvbiBsb29raW5nIGF0CisgICAgICAgIC0tbG9nR0M9dHJ1ZSBvdXRwdXQuIFdl
IGFyZSBub3cgc3BlbmRpbmcgbGVzcyB0aW1lIHJlZXhlY3V0aW5nIGV4cGVuc2l2ZSBjb25zdHJh
aW50cy4gSQorICAgICAgICB0aGluayB0aGF0IEpldFN0cmVhbS9zcGxheSBpcyBhbHNvIGJlbmVm
aXRpbmcsIGJlY2F1c2UgYWx0aG91Z2ggdGhlIGNvbnN0cmFpbnRzIGl0IHNlZXMKKyAgICAgICAg
YXJlIGNoZWFwLCBpdCBzcGVuZHMgMzAlIG9mIGl0cyB0aW1lIGluIEdDIHNvIGV2ZW4gc21hbGwg
aW1wcm92ZW1lbnRzIG1hdHRlci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om1hcmtDb2RlQmxvY2tz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3Mp
OiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgICogZGZnL0RGR1Bs
YW5JbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Oml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MpOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6V29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpXb3JrbGlzdDo6cmVtZW1iZXJDb2RlQmxvY2tzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpyZW1lbWJlckNvZGVCbG9ja3MpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9E
RkdXb3JrbGlzdC5oOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyk6CisgICAgICAgIChK
U0M6OkRGRzo6V29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MpOgorICAgICAgICAqIGhl
YXAvQ29kZUJsb2NrU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0Ojp3cml0ZUJh
cnJpZXJDdXJyZW50bHlFeGVjdXRpbmcpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvQ29kZUJs
b2NrU2V0Lmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6aXRlcmF0ZSk6IERlbGV0ZWQu
CisgICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9ja1NldDo6aXRlcmF0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6aXRlcmF0
ZUN1cnJlbnRseUV4ZWN1dGluZyk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdB
bmRDb21waWxpbmdDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXRlcmF0ZUV4ZWN1
dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6bWFya1RvRml4cG9pbnQpOgorICAgICAgICAoSlNDOjpIZWFwOjplbmRNYXJraW5nKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdEluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6c3RvcElmTmVjZXNzYXJ5U2xvdyk6CisgICAgICAgIChKU0M6OkhlYXA6OmFjcXVpcmVBY2Nl
c3NTbG93KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcik6
CisgICAgICAgIChKU0M6OkhlYXA6OmJ1aWxkQ29uc3RyYWludFNldCk6CisgICAgICAgIChKU0M6
OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OlJlc3Vt
ZVRoZVdvcmxkU2NvcGU6OlJlc3VtZVRoZVdvcmxkU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpIZWFwOjpSZXN1bWVUaGVXb3JsZFNjb3BlOjp+UmVzdW1lVGhlV29ybGRTY29wZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29uc2VydmF0aXZlUm9vdHMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNl
cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9NYXJr
aW5nQ29uc3RyYWludC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dDo6TWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6
fk1hcmtpbmdDb25zdHJhaW50KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnJl
c2V0U3RhdHMpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
TWFya2luZ0NvbnN0cmFpbnQ6OmluZGV4KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFp
bnQ6OmFiYnJldmlhdGVkTmFtZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpu
YW1lKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6Omxhc3RWaXNpdENvdW50KToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKToKKyAg
ICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZSk6CisgICAgICAgIChK
U0M6Ok1hcmtpbmdDb25zdHJhaW50Ojp2b2xhdGlsaXR5KToKKyAgICAgICAgKiBoZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJh
aW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmRpZFZpc2l0U29tZXRo
aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRl
eHQ6OnNob3VsZFRpbWVPdXQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6
RXhlY3V0aW9uQ29udGV4dDo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkRXhlY3V0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KToKKyAgICAgICAg
KEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6On5NYXJraW5nQ29uc3RyYWludFNldCk6CisgICAg
ICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpyZXNldFN0YXRzKToKKyAgICAgICAgKEpT
Qzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQm9vdHN0cmFwKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0Ojppc1dhdmVmcm9udEFkdmFuY2luZyk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0
Ojppc1dhdmVmcm9udFJldHJlYXRpbmcpOgorICAgICAgICAqIGhlYXAvTXV0YXRvclNjaGVkdWxl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNdXRhdG9yU2NoZWR1bGVyOjpNdXRhdG9yU2No
ZWR1bGVyKToKKyAgICAgICAgKEpTQzo6TXV0YXRvclNjaGVkdWxlcjo6fk11dGF0b3JTY2hlZHVs
ZXIpOgorICAgICAgICAoSlNDOjpNdXRhdG9yU2NoZWR1bGVyOjpkaWRTdG9wKToKKyAgICAgICAg
KEpTQzo6TXV0YXRvclNjaGVkdWxlcjo6d2lsbFJlc3VtZSk6CisgICAgICAgIChKU0M6Ok11dGF0
b3JTY2hlZHVsZXI6OmRpZEV4ZWN1dGVDb25zdHJhaW50cyk6CisgICAgICAgIChKU0M6Ok11dGF0
b3JTY2hlZHVsZXI6OmxvZyk6CisgICAgICAgIChKU0M6Ok11dGF0b3JTY2hlZHVsZXI6OnNob3Vs
ZFN0b3ApOgorICAgICAgICAoSlNDOjpNdXRhdG9yU2NoZWR1bGVyOjpzaG91bGRSZXN1bWUpOgor
ICAgICAgICAqIGhlYXAvTXV0YXRvclNjaGVkdWxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFw
L09wYXF1ZVJvb3RTZXQuaDoKKyAgICAgICAgKEpTQzo6T3BhcXVlUm9vdFNldDo6YWRkKToKKyAg
ICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OnZpc2l0QXNDb25zdHJhaW50KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24pOgorICAgICAg
ICAoSlNDOjpTbG90VmlzaXRvcjo6aGFzV29yayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjpkcmFpbkZyb21TaGFyZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5JblBh
cmFsbGVsUGFzc2l2ZWx5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJv
b3QpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6OmFkZFRvVmlzaXRDb3VudCk6CisgICAgICAgICogaGVhcC9TcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Bh
Y2VUaW1lU2NoZWR1bGVyLmNwcC4KKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlcjo6U25hcHNob3Q6OlNuYXBzaG90KToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlcjo6U25hcHNob3Q6Om5vdyk6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXI6OlNuYXBzaG90OjpieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSk6CisgICAgICAg
IChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXIpOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjp+U3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlcik6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXI6OnN0YXRlKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6YmVn
aW5Db2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6
ZGlkU3RvcCk6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OndpbGxS
ZXN1bWUpOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpkaWRFeGVj
dXRlQ29uc3RyYWludHMpOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
Ojp0aW1lVG9TdG9wKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6
dGltZVRvUmVzdW1lKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6
bG9nKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6ZW5kQ29sbGVj
dGlvbik6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmJ5dGVzQWxs
b2NhdGVkVGhpc0N5Y2xlSW1wbCk6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hl
ZHVsZXI6OmJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlKToKKyAgICAgICAgKEpTQzo6U3BhY2VU
aW1lTXV0YXRvclNjaGVkdWxlcjo6bWF4SGVhZHJvb20pOgorICAgICAgICAoSlNDOjpTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyOjpoZWFkcm9vbUZ1bGxuZXNzKToKKyAgICAgICAgKEpTQzo6U3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6bXV0YXRvclV0aWxpemF0aW9uKToKKyAgICAgICAgKEpT
Qzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6Y29sbGVjdG9yVXRpbGl6YXRpb24pOgorICAg
ICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjplbGFwc2VkSW5QZXJpb2QpOgor
ICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpwaGFzZSk6CisgICAgICAg
IChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnNob3VsZEJlUmVzdW1lZCk6CisgICAg
ICAgIChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldE11dGF0b3JVdGls
aXphdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6RGVj
aXNpb246OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6ZWxhcHNlZEluUGVyaW9kKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6cGhhc2UpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpzaG91
bGRCZVJlc3VtZWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6
OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTcGFjZVRp
bWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpTcGFjZVRpbWVTY2hlZHVsZXIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6OnNuYXBQaGFzZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6Y3VycmVudERlY2lzaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmguCisgICAgICAg
IChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246Om9wZXJhdG9yIGJvb2wpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBoZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGhl
YXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6U3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKToKKyAgICAgICAgKEpTQzo6U3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjp+U3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyKToKKyAgICAgICAgKEpTQzo6U3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyOjpzdGF0ZSk6CisgICAgICAgIChKU0M6OlN5bmNocm9ub3Vz
U3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6YmVnaW5Db2xsZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjp0aW1lVG9TdG9w
KToKKyAgICAgICAgKEpTQzo6U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
Ojp0aW1lVG9SZXN1bWUpOgorICAgICAgICAoSlNDOjpTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11
dGF0b3JTY2hlZHVsZXI6OmVuZENvbGxlY3Rpb24pOgorICAgICAgICAqIGhlYXAvU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAv
VmlzaXRpbmdUaW1lb3V0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpWaXNpdGluZ1RpbWVvdXQ6
OlZpc2l0aW5nVGltZW91dCk6CisgICAgICAgIChKU0M6OlZpc2l0aW5nVGltZW91dDo6dmlzaXRD
b3VudCk6CisgICAgICAgIChKU0M6OlZpc2l0aW5nVGltZW91dDo6ZGlkVmlzaXRTb21ldGhpbmcp
OgorICAgICAgICAoSlNDOjpWaXNpdGluZ1RpbWVvdXQ6OnNob3VsZFRpbWVPdXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE3LTAxLTA2ICBTYWFtIEJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIHNsaWNlIGludHJpbnNpYyB0byB0aGUgREZH
L0ZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjEw
NDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC00OTcsMTAgKzQ5NywxNCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAg
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAogICAgIGhlYXAvTWFya2VkQmxvY2suY3BwCiAgICAg
aGVhcC9NYXJrZWRTcGFjZS5jcHAKKyAgICBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAorICAg
IGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCisgICAgaGVhcC9NdXRhdG9yU2NoZWR1bGVy
LmNwcAogICAgIGhlYXAvTXV0YXRvclN0YXRlLmNwcAogICAgIGhlYXAvU2xvdFZpc2l0b3IuY3Bw
Ci0gICAgaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwCisgICAgaGVhcC9TcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyLmNwcAogICAgIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCisgICAg
aGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiAgICAgaGVh
cC9WaXNpdFJhY2VLZXkuY3BwCiAgICAgaGVhcC9XZWFrLmNwcAogICAgIGhlYXAvV2Vha0Jsb2Nr
LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDQ5NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDEzIEBACiAJCTBGMUUzQTQ2
MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYg
LyogREZHQXJndW1lbnRQb3NpdGlvbi5oICovOyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0
NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVG
b3JtYXRTdGF0ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVy
U2F2ZVBsYW4uaCAqLzsgfTsKKwkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9u
b3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLzsgfTsKKwkJMEYxRkIz
OEYxRTE3M0E2NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
RkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5oICovOyB9OworCQkwRjFGQjM5MDFFMTczQTZCMDBBOUJFNTAgLyogTXV0YXRvclNj
aGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi87IH07
CisJCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgfTsKKwkJMEYxRkIzOTYxRTFBRjdFMTAw
QTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGlu
ZXMuaCAqLzsgfTsKKwkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
RkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovOyB9OworCQkw
RjFGQjM5OTFFMUY2NUZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTgxRTFGNjVGOTAwQTlC
RTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKIAkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4
N0M1IC8qIEFib3J0UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIwMTc3RjFE
Q0FEQzMzMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBE
RkdGbG93SW5kZXhpbmcuY3BwICovOyB9OwogCQkwRjIwMTc4MDFEQ0FEQzM1MDBFQTU5NTAgLyog
REZHRmxvd0luZGV4aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi87
IH07CkBAIC00NTUsNiArNDYyLDEwIEBACiAJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBD
YWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjY0
QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxs
RWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFF
OUIgLyogQWlyQXJnSW5saW5lcy5oICovOyB9OworCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMg
LyogTWFya2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJh
aW50LmNwcCAqLzsgfTsKKwkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtpbmdDb25z
dHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgfTsKKwkJ
MEY2NjBFMzkxRTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1MUUwNTE3
QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CisJCTBGNjYwRTNB
MUUwNTE3QzEwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi87IH07CiAJCTBGNjY0Q0U4MURBMzA0RUYwMEIw
MEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NENFNzFEQTMwNEVEMDBCMDBBMTEgLyogQ29kZUJsb2Nr
U2V0SW5saW5lcy5oICovOyB9OwogCQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NTMsOCArNzY0
LDggQEAKIAkJMEZEREJGQjUxNjY2RUVEODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEREJGQjIxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3Bw
ICovOyB9OwogCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NE
YXRhRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAq
LzsgfTsKIAkJMEZERTg3RjkxREZEMEM3NjAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERTg3RjgxREZE
MEM2RDAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwICovOyB9OwotCQkwRkRFODdGQzFERkU2
RTUxMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3Bh
Y2VUaW1lU2NoZWR1bGVyLmggKi87IH07Ci0JCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBT
cGFjZVRpbWVTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxl
ci5jcHAgKi87IH07CisJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5oICovOyB9OworCQkwRkRFODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5jcHAgKi87IH07CiAJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QxMUQ5QzYw
ODYwMDFCOTgyNSAvKiBCM0tpbmQuaCAqLzsgfTsKIAkJMEZERjY3RDMxRDlDNkQyQTAwMUI5ODI1
IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkRGNjdEMDFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmNwcCAqLzsgfTsKIAkJMEZE
RjY3RDYxRDlEQzQ0MDAwMUI5ODI1IC8qIEFpcktpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDQxRDlEQzQzRTAwMUI5ODI1IC8qIEFp
cktpbmQuY3BwICovOyB9OwpAQCAtMjU1OSw2ICsyNTcwLDEzIEBACiAJCTBGMUUzQTQ0MTUzNENC
QUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0RvdWJs
ZUZvcm1hdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTUwMTUz
N0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR1Ns
b3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTY1
MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgcGF0
aCA9IGRmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNo
cm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEMxRTE3M0E2MjAwQTlCRTUwIC8q
IE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRpbmdUaW1lb3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5oOyBwYXRo
ID0gZGZnL0RGR1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGggPSBkZmcv
REZHV29ya2xpc3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZC
Mzk4MUUxRjY1RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5k
ZXhpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0lu
ZGV4aW5nLmNwcDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4
aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5o
OyBwYXRoID0gZGZnL0RGR0Zsb3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjg4NCw2ICsyOTAyLDEwIEBACiAJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBD
YWxsRWRnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRn
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjc4MUE3OTU3QjIwMDZF
NEU2NiAvKiBDYWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxs
RWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0RUFGMjFDNEVDRDA2MDA2
MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBaXJBcmdJbmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2lu
Z0NvbnN0cmFpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFy
a2luZ0NvbnN0cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUz
NDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50
U2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25z
dHJhaW50U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjBFMzYxRTA1
MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNjY0Q0U3MURBMzA0RUQwMEIwMEExMSAvKiBDb2RlQmxvY2tTZXRJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1NldElubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkUxODM1NjZGOTAwRDAx
N0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxOTMs
OCArMzIxNSw4IEBACiAJCTBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFj
Y2Vzc0RhdGFEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNz
RGF0YUR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMzE2NjZF
RUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBk
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDZWxsQ29udGFpbmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNl
VGltZVNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
cGFjZVRpbWVTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkRF
ODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYWNlVGltZVNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0
YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZERTg3RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRGNjdEMDFEOUM2MDg2MDAx
Qjk4MjUgLyogQjNLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEIzS2luZC5jcHA7IHBhdGggPSBiMy9CM0tpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkRGNjdEMTFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzS2luZC5oOyBwYXRoID0gYjMvQjNLaW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREY2N0Q0MUQ5REM0M0UwMDFCOTgyNSAvKiBBaXJL
aW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpcktpbmQuY3Bw
OyBwYXRoID0gYjMvYWlyL0FpcktpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTc1MSw4ICs1NzczLDE0IEBACiAJCQkJMTREMkYzRDgxMzlGNEJFMjAwNDkxMDMxIC8qIE1h
cmtlZFNwYWNlLmNwcCAqLywKIAkJCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2Vk
U3BhY2UuaCAqLywKIAkJCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3BhY2VJ
bmxpbmVzLmggKi8sCisJCQkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25z
dHJhaW50LmNwcCAqLywKKwkJCQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0Nv
bnN0cmFpbnQuaCAqLywKKwkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0Nv
bnN0cmFpbnRTZXQuY3BwICovLAorCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJr
aW5nQ29uc3RyYWludFNldC5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBN
YXJrU3RhY2suY3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3Rh
Y2suaCAqLywKKwkJCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxl
ci5jcHAgKi8sCisJCQkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVs
ZXIuaCAqLywKIAkJCQkwRkE3NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNw
cCAqLywKIAkJCQkwRkE3NjIwMzFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8s
CiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKQEAg
LTU3NjEsMTQgKzU3ODksMTcgQEAKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xv
dFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90Vmlz
aXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklu
bGluZXMuaCAqLywKLQkJCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2No
ZWR1bGVyLmNwcCAqLywKLQkJCQkwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1l
U2NoZWR1bGVyLmggKi8sCisJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGlt
ZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLAorCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAv
KiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY3Q0Y5NTAxREMwMjdENzAw
OThDQzEyIC8qIFN0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcCAqLywKIAkJCQkwRjdDRjk1MTFEQzAy
N0Q3MDA5OENDMTIgLyogU3RvcElmTmVjZXNzYXJ5VGltZXIuaCAqLywKIAkJCQkxNDJFMzEzMjEz
NEZGMEE2MDBBRkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJMTQ1NzIyODUxNDM3RTE0MDAwNUZE
RTI2IC8qIFN0cm9uZ0lubGluZXMuaCAqLywKKwkJCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAg
LyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKKwkJCQkw
RjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9y
U2NoZWR1bGVyLmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9v
bUZpbHRlci5oICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlv
bmFsRmluYWxpemVyLmggKi8sCisJCQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0
aW5nVGltZW91dC5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJh
Y2VLZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VL
ZXkuaCAqLywKIAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBA
IC02OTk1LDYgKzcwMjYsNyBAQAogCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQ
aGlDaGlsZHJlbi5oICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFu
LmNwcCAqLywKIAkJCQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAor
CQkJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovLAogCQkJ
CURDMDAwMzkwMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgg
Ki8sCiAJCQkJMEZCRTBGNkQxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNkUxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZS5oICovLApAQCAtNzA4Myw2ICs3MTE1LDcgQEAKIAkJCQkwRkM5
N0YzQzE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oICov
LAogCQkJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8sCiAJ
CQkJMEZEQjJDRTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi8sCisJCQkJMEYx
RkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovLAogCQkJKTsK
IAkJCW5hbWUgPSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNzk0NSw2ICs3
OTc4LDcgQEAKIAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0YxNEJFQUE4MjAwQURD
NjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzkz
MUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk2OUEwNzIzMEVEMUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTMyOERBRTgxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlR2VuZXJhdG9y
aWZpY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1Mjkg
LyogQnl0ZWNvZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDc4LDYgKzg1MTIsNyBAQAog
CQkJCUExRDc5MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51
bWJlckZvcm1hdFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMkJCRkYyMUIw
NDRBOEIwMDY2NEI2OSAvKiBJbnRsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5
NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MDhFQkUyNDFDRThGMzU4MDA0NTMxNDYgLyogSW50bE9iamVjdElubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBp
biBIZWFkZXJzICovLAogCQkJCThCOUY2RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25L
aW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTg1NjIsNyArODU5Nyw5IEBACiAJCQkJMEYyQjY2RUYx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZGMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDFGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjY2MEUzQTFFMDUxN0MxMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1
bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0
NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5QzFD
MDI0QTQ5MDAyNDgxRTIgLyogSlNHZW5lcmF0b3JGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC04Njc0LDYgKzg3
MTEsNyBAQAogCQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5VGFi
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dp
dGhTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8q
IEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIzOEYxRTE3M0E2NzAwQTlC
RTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdv
cmRMb29rdXAuaCBpbiBIZWFkZXJzICovLApAQCAtODcxOSw2ICs4NzU3LDcgQEAKIAkJCQk4NjNC
MjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMzJBQjI0NDFEQ0Q3NUY0MDBENzUzM0EgLyogTWFjcm9Bc3NlbWJsZXJIZWxw
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFj
cm9Bc3NlbWJsZXJNSVBTLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NjFFMUFGN0UxMDBB
OUJFNTAgLyogREZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5
MERFMDQwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2MDE2MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVy
WDg2XzY0LmggaW4gSGVhZGVycyAqLywKQEAgLTg5MDEsNyArODk0MCw3IEBACiAJCQkJQkMxOEM0
NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAg
LyogU3BhY2VUaW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRFODdGQzFERkU2
RTUxMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXpl
ZFRodW5rSklULmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUg
LyogU3BlY2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODkzNCw2ICs4OTczLDcgQEAK
IAkJCQlCQ0NGMEQwODBFRjBBQUI5MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMx
OCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzk5MUUxRjY1RkIw
MEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFB
QzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFB
RTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk5NkI3MzI3MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBp
biBIZWFkZXJzICovLApAQCAtOTc0Myw2ICs5NzgzLDcgQEAKIAkJCQlBN0U1QTNBNzE3OTc0MzJE
MDBFODkzQzAgLyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5QzIxMDdFQzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY2RkM3NTAxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZCMTZE
ODEyRUI1QjU5MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTVGRDAwNzkxODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNzYWdl
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTc1OCw2ICs5Nzk5LDcgQEAKIAkJCQkxNDdGMzlDNDEw
N0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzUxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjY2MEUzOTFFMDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0
cmFpbnRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0Iy
IC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0
ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZDODRC
MzFEMUREQUQ5MDA2QjVDNDYgLyogRGVidWdnZXJMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTEwMzQ2LDcgKzEwMzg4LDcgQEAKIAkJCQk5MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyog
U21hbGxTdHJpbmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0
NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDlEQzE2QjEy
RUYyOTNFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQkwRkRFODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMENENEM0MTVGNkI2QkIw
MDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NTU0MUIxMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0xMDM1Niw2ICsxMDM5OCw3IEBACiAJCQkJQTczMEI2MTMxMjUwMDY4
RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDY5REVCMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxRkIzOTAxRTE3M0E2QjAwQTlCRTUw
IC8qIE11dGF0b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdF
QzdFNzAwNjUwNDQ2IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2
OURFRDEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzMzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2Vy
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA0MDcsNiArMTA0NTAsNyBAQAogCQkJCTBGMjRFNTU4
MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTc5RUUwQkZGMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2
MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMx
QUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIw
QzI1OTFBODAxM0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGOTUyQUEyMURGNzg2MEQwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlz
aW9uIDIxMDQ5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02MTAsMzYgKzYxMCw2IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46Omtl
eSgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwg
bW9kZSk7CiB9CiAKLXZvaWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yKQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0
byBhIENvZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJy
aWVyLiBTbywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAv
LyBhbGwgb3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHNs
b3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7Ci0gICAgc2xvdFZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJv
ZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
KHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLX0KLQotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9j
a3MoVk0mIHZtKQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVl
cyB0byBhIENvZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBi
YXJyaWVyLiBTbywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAg
ICAvLyBhbGwgb3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJp
ZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxv
Y2spCi0gICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsK
LX0KLQogdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3
ICs3MCw4IEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICBD
b21waWxhdGlvbktleSBrZXkoKTsKICAgICAKICAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFNsb3RW
aXNpdG9yJik7Ci0gICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBG
dW5jJik7CiAgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNl
bCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRGR1Bs
YW4uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgordm9pZCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMm
IGZ1bmMpCit7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRv
IGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJp
ZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8v
IGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgZnVu
Yyhjb2RlQmxvY2spOworICAgIGZ1bmMoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBp
ZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCisgICAgICAgIGZ1bmMocHJvZmlsZWRERkdDb2RlQmxv
Y2spOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUxLDI4ICszNTEsNiBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0m
CiAgICAgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogfQogCi12b2lkIFdvcmtsaXN0
OjptYXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKLXsKLSAg
ICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKHBs
YW4tPnZtICE9ICZ2bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5tYXJr
Q29kZUJsb2NrcyhzbG90VmlzaXRvcik7Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0OjpyZW1l
bWJlckNvZGVCbG9ja3MoVk0mIHZtKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2sp
OwotICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRl
ciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXIt
PnZhbHVlLmdldCgpOwotICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAgfQot
fQotCiB2b2lkIFdvcmtsaXN0OjpzdXNwZW5kQWxsVGhyZWFkcygpCiB7CiAgICAgbV9zdXNwZW5z
aW9uTG9jay5sb2NrKCk7CkBAIC01NjYsMjIgKzU0NCw2IEBAIHZvaWQgY29tcGxldGVBbGxQbGFu
c0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKLXZvaWQgbWFya0NvZGVCbG9ja3MoVk0mIHZtLCBT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpu
dW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3
b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAg
ICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90VmlzaXRvcik7Ci0gICAgfQot
fQotCi12b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6
OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxs
KGkpKQotICAgICAgICAgICAgd29ya2xpc3QtPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAg
fQotfQotCiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAogdm9pZCBjb21wbGV0ZUFsbFBsYW5z
Rm9yVk0oVk0mKQpAQCAtNTkyLDEwICs1NTQsNiBAQCB2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwg
U2xvdFZpc2l0b3ImKQogewogfQogCi12b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpCi17Ci19
Ci0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24g
MjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIC8vIHdvcmts
aXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0ZUFs
bFBsYW5zRm9yVk0oVk0mKTsKIAotICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90Vmlz
aXRvciYpOwotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25z
dCBGdW5jJik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYp
OwogICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25L
ZXkgPSBDb21waWxhdGlvbktleSgpKTsKQEAgLTE2OCw3ICsxNjgsOSBAQCBpbmxpbmUgV29ya2xp
c3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZN
KFZNJik7CiB2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKTsKLXZvaWQgcmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkRGR1BsYW5JbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3Qu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisjaWYgRU5BQkxFKERGR19K
SVQpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9y
R0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IERG
Rzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgeworICAgICAgICBpZiAoREZHOjpXb3JrbGlz
dCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKKyAg
ICAgICAgICAgIHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZtLCBmdW5jKTsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIFdvcmtsaXN0OjppdGVyYXRl
Q29kZUJsb2Nrc0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAg
IFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZtICE9
ICZ2bSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJs
b2Nrc0ZvckdDKGZ1bmMpOworICAgIH0KK30KKworI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0m
LCBjb25zdCBGdW5jJikKK3sKK30KKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMy
LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBm
YWxzZTsKLQogQ29kZUJsb2NrU2V0OjpDb2RlQmxvY2tTZXQoKQogewogfQpAQCAtMTE0LDE1ICsx
MTIsNiBAQCBib29sIENvZGVCbG9ja1NldDo6Y29udGFpbnMoY29uc3QgTG9ja0hvCiAgICAgcmV0
dXJuIG1fb2xkQ29kZUJsb2Nrcy5jb250YWlucyhjb2RlQmxvY2spIHx8IG1fbmV3Q29kZUJsb2Nr
cy5jb250YWlucyhjb2RlQmxvY2spIHx8IG1fY3VycmVudGx5RXhlY3V0aW5nLmNvbnRhaW5zKGNv
ZGVCbG9jayk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrU2V0Ojp3cml0ZUJhcnJpZXJDdXJyZW50bHlF
eGVjdXRpbmcoSGVhcCogaGVhcCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsK
LSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUmVtZW1iZXJpbmcgIiwgbV9jdXJy
ZW50bHlFeGVjdXRpbmcuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7Ci0gICAgZm9yIChDb2Rl
QmxvY2sqIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQotICAgICAgICBoZWFwLT53
cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLX0KLQogdm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyQ3Vy
cmVudGx5RXhlY3V0aW5nKCkKIHsKICAgICBtX2N1cnJlbnRseUV4ZWN1dGluZy5jbGVhcigpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9u
IDIxMDQ5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksMTAgKzY5LDYgQEAgcHVibGljOgogICAgIC8vIGJ5
IHRoaXMgc2V0KSwgYW5kIHRoYXQgaGF2ZSBub3QgYmVlbiBtYXJrZWQuCiAgICAgdm9pZCBkZWxl
dGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZChDb2xsZWN0aW9uU2NvcGUpOwogICAgIAotICAgIC8v
IEFkZCBhbGwgY3VycmVudGx5IGV4ZWN1dGluZyBDb2RlQmxvY2tzIHRvIHRoZSByZW1lbWJlcmVk
IHNldCB0byBiZSAKLSAgICAvLyByZS1zY2FubmVkIGR1cmluZyB0aGUgbmV4dCBjb2xsZWN0aW9u
LgotICAgIHZvaWQgd3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKEhlYXAqKTsKLQogICAg
IHZvaWQgY2xlYXJDdXJyZW50bHlFeGVjdXRpbmcoKTsKIAogICAgIGJvb2wgY29udGFpbnMoY29u
c3QgTG9ja0hvbGRlciYsIHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CkBAIC04MSwyMSArNzcs
OSBAQCBwdWJsaWM6CiAgICAgLy8gVmlzaXRzIGVhY2ggQ29kZUJsb2NrIGluIHRoZSBoZWFwIHVu
dGlsIHRoZSB2aXNpdG9yIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZQogICAgIC8vIHRvIGluZGljYXRl
IHRoYXQgaXQgaXMgZG9uZSBpdGVyYXRpbmcsIG9yIHVudGlsIGV2ZXJ5IENvZGVCbG9jayBoYXMg
YmVlbgogICAgIC8vIHZpc2l0ZWQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9p
ZCBpdGVyYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBmb3IgKGF1dG8mIGNvZGVCbG9jayA6IG1fb2xk
Q29kZUJsb2NrcykgewotICAgICAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2sp
OwotICAgICAgICAgICAgaWYgKGRvbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpIHsK
LSAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsKLSAgICAgICAgICAg
IGlmIChkb25lKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGl0ZXJhdGUoY29uc3QgRnVuY3RvciYp
OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZUN1cnJl
bnRseUV4ZWN1dGluZyhjb25zdCBGdW5jdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVC
bG9ja1NldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db2RlQmxvY2tTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw1
ICs2MCwzMCBAQCBpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsoY29uc3QgTG9jCiAgICAg
bV9jdXJyZW50bHlFeGVjdXRpbmcuYWRkKGNvZGVCbG9jayk7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZShjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZm9yIChhdXRv
JiBjb2RlQmxvY2sgOiBtX29sZENvZGVCbG9ja3MpIHsKKyAgICAgICAgYm9vbCBkb25lID0gZnVu
Y3Rvcihjb2RlQmxvY2spOworICAgICAgICBpZiAoZG9uZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3Mp
IHsKKyAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOworICAgICAgICBpZiAo
ZG9uZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZyhj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2sp
OworICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykK
KyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2spOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw5ICsyMiw5IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
Ci0jaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0SW5saW5l
cy5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCi0jaW5jbHVkZSAiREZHV29ya2xp
c3QuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdElubGluZXMuaCIKICNpbmNsdWRlICJFZGVuR0NB
Y3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRnVs
bEdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtNDksMTIgKzQ5LDE0IEBACiAjaW5jbHVkZSAiSlNM
b2NrLmgiCiAjaW5jbHVkZSAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5jbHVkZSAi
TWFya2VkU3BhY2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIK
ICNpbmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdQ
cm9maWxlci5oIgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIKLSNpbmNsdWRlICJTcGFjZVRp
bWVTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgiCiAj
aW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIu
aCIKKyNpbmNsdWRlICJTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCIK
ICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIlZNLmgiCkBAIC05MSw0MSArOTMsNiBAQCBkb3VibGUgbWF4UGF1c2VN
Uyhkb3VibGUgdGhpc1BhdXNlTVMpCiAgICAgcmV0dXJuIG1heFBhdXNlTVM7CiB9CiAKLX0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQotCi1jbGFzcyBIZWFwOjpSZXN1bWVUaGVXb3JsZFNjb3BlIHsK
LXB1YmxpYzoKLSAgICBSZXN1bWVUaGVXb3JsZFNjb3BlKEhlYXAmIGhlYXApCi0gICAgICAgIDog
bV9oZWFwKGhlYXApCi0gICAgewotICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRH
QygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkpIHsKLSAgICAgICAgICAgIGRvdWJsZSB0aGlzUGF1c2VNUyA9IChNb25vdG9uaWNU
aW1lOjpub3coKSAtIG1faGVhcC5tX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKTsKLSAgICAgICAg
ICAgIGRhdGFMb2coInA9IiwgdGhpc1BhdXNlTVMsICIgbXMgKG1heCAiLCBtYXhQYXVzZU1TKHRo
aXNQYXVzZU1TKSwgIikuLi5dXG4iKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9o
ZWFwLnJlc3VtZVRoZVdvcmxkKCk7Ci0gICAgfQotICAgIAotICAgIH5SZXN1bWVUaGVXb3JsZFNj
b3BlKCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBtX2hlYXAuc3RvcFRoZVdvcmxk
KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAg
IGRhdGFMb2coIltHQzogIik7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBIZWFwJiBtX2hl
YXA7Ci19OwotCi1uYW1lc3BhY2UgewotCiBzaXplX3QgbWluSGVhcFNpemUoSGVhcFR5cGUgaGVh
cFR5cGUsIHNpemVfdCByYW1TaXplKQogewogICAgIGlmIChoZWFwVHlwZSA9PSBMYXJnZUhlYXAp
IHsKQEAgLTMxNiwxMSArMjgzLDIwIEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFw
VHlwZSkKICAgICAsIG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKHN0ZDo6bWFrZV91bmlxdWU8
TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2soc3RkOjpt
YWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGVscGVyQ2xpZW50KCZoZWFw
SGVscGVyUG9vbCgpKQorICAgICwgbV9zY2hlZHVsZXIoc3RkOjptYWtlX3VuaXF1ZTxTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyPigqdGhpcykpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+
OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRp
dGlvbjo6Y3JlYXRlKCkpCiB7CiAgICAgbV93b3JsZFN0YXRlLnN0b3JlKDApOwogICAgIAorICAg
IGlmIChPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKKyAgICAgICAgbV9zY2hlZHVsZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI+KCp0aGlzKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgLy8gV2Ugc2ltdWxhdGUgdHVybmluZyBvZmYgY29uY3VycmVudCBHQyBi
eSBtYWtpbmcgdGhlIHNjaGVkdWxlciBzYXkgdGhhdCB0aGUgd29ybGQKKyAgICAgICAgLy8gc2hv
dWxkIGFsd2F5cyBiZSBzdG9wcGVkIHdoZW4gdGhlIGNvbGxlY3RvciBpcyBydW5uaW5nLgorICAg
ICAgICBtX3NjaGVkdWxlciA9IHN0ZDo6bWFrZV91bmlxdWU8U3luY2hyb25vdXNTdG9wVGhlV29y
bGRNdXRhdG9yU2NoZWR1bGVyPigpOworICAgIH0KKyAgICAKICAgICBpZiAoT3B0aW9uczo6dmVy
aWZ5SGVhcCgpKQogICAgICAgICBtX3ZlcmlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxIZWFwVmVy
aWZpZXI+KHRoaXMsIE9wdGlvbnM6Om51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNh
dGlvbigpKTsKICAgICAKQEAgLTQ3OSwxMiArNDU1LDYgQEAgdm9pZCBIZWFwOjphZGRSZWZlcmVu
Y2UoSlNDZWxsKiBjZWxsLCBBcgogICAgIH0KIH0KIAotdm9pZCBIZWFwOjpoYXJ2ZXN0V2Vha1Jl
ZmVyZW5jZXMoKQotewotICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9
IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dCgpKQotICAgICAgICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKCptX2Nv
bGxlY3RvclNsb3RWaXNpdG9yKTsKLX0KLQogdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzKCkKIHsKICAgICB3aGlsZSAobV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5o
YXNOZXh0KCkpIHsKQEAgLTUxMSw2ICs0ODEsNDIgQEAgdm9pZCBIZWFwOjpjb21wbGV0ZUFsbEpJ
VFBsYW5zKCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTSgqbV92bSk7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21w
aWxpbmdDb2RlQmxvY2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgbV9jb2RlQmxvY2tzLT5p
dGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKGZ1bmMpOworICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9j
a3NGb3JHQygqbV92bSwgZnVuYyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lk
IEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRp
bmdMb2Nrcyhjb25zdCBGdW5jJiBmdW5jKQoreworICAgIFZlY3RvcjxDb2RlQmxvY2sqLCAyNTY+
IGNvZGVCbG9ja3M7CisgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3Mo
CisgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIGNvZGVC
bG9ja3MuYXBwZW5kKGNvZGVCbG9jayk7CisgICAgICAgIH0pOworICAgIGZvciAoQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgOiBjb2RlQmxvY2tzKQorICAgICAgICBmdW5jKGNvZGVCbG9jayk7Cit9CisK
K3ZvaWQgSGVhcDo6YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCkKK3sKKyAgICBib29sIG9r
ID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIW1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgZGF0YUxvZygiRkFUQUw6IFNoYXJlZCBjb2xsZWN0b3IgbWFyayBz
dGFjayBub3QgZW1wdHkhIEl0IGhhcyAiLCBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+c2l6
ZSgpLCAiIGVsZW1lbnRzLlxuIik7CisgICAgICAgIG9rID0gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGlmICghbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ZGF0YUxvZygiRkFUQUw6IFNoYXJlZCBtdXRhdG9yIG1hcmsgc3RhY2sgbm90IGVtcHR5ISBJdCBo
YXMgIiwgbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgZWxlbWVudHMuXG4iKTsK
KyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQob2sp
OworfQorCiB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0VGltZSkKIHsK
ICAgICBUaW1pbmdTY29wZSBtYXJrVG9GaXhwb2ludFRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6
bWFya1RvRml4cG9pbnQiKTsKQEAgLTU2MCwxMzMgKzU2Niw4NCBAQCB2b2lkIEhlYXA6Om1hcmtU
b0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0CiAgICAgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yID0g
Km1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CiAgICAgc2xvdFZpc2l0b3IuZGlkU3RhcnRNYXJraW5n
KCk7CiAKLSAgICBTcGFjZVRpbWVTY2hlZHVsZXIgc2NoZWR1bGVyKCp0aGlzKTsKKyAgICBtX2Nv
bnN0cmFpbnRTZXQtPnJlc2V0U3RhdHMoKTsKKyAgICAKKyAgICBtX3NjaGVkdWxlci0+YmVnaW5D
b2xsZWN0aW9uKCk7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIG1fc2NoZWR1
bGVyLT5sb2coKTsKKyAgICAKKyAgICAvLyBXb25kZXJpbmcgd2hhdCBtX2NvbnN0cmFpbnRTZXQt
PmV4ZWN1dGVYWVogZG9lcz8gSXQncyBydW5uaW5nIHRoZSBjb25zdHJhaW50cyBjcmVhdGVkIGJ5
CisgICAgLy8gSGVhcDo6YnVpbGRDb25zdHJhaW50U2V0KCkuCisgICAgCisgICAgbV9jb25zdHJh
aW50U2V0LT5leGVjdXRlQm9vdHN0cmFwKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKKyAgICBtX3NjaGVkdWxlci0+ZGlkRXhlY3V0ZUNvbnN0cmFpbnRzKCk7CisKKyAg
ICAvLyBBZnRlciB0aGlzLCB3ZSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgZmFsbCB0aHJvdWdoIGFs
bCBvZiB0aGUgInNsb3RWaXNpdG9yLmlzRW1wdHkoKSIKKyAgICAvLyBjaGVja3MgYmVjYXVzZSBi
b290c3RyYXAgd291bGQgaGF2ZSBwdXQgdGhpbmdzIGludG8gdGhlIHZpc2l0b3IuIFNvLCB3ZSBz
aG91bGQgZmFsbAorICAgIC8vIHRocm91Z2ggdG8gZHJhaW5pbmcuCiAgICAgCiAgICAgZm9yICh1
bnNpZ25lZCBpdGVyYXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7CiAgICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpKQogICAgICAgICAgICAgZGF0YUxvZygiaSMiLCBpdGVyYXRpb24sICIgIik7
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5n
U2NvcGUoKnRoaXMsICJIZWFwOjptYXJrVG9GaXhwb2ludCBjb25zZXJ2YXRpdmUgc2NhbiIpOwot
ICAgICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwot
ICAgICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwot
ICAgICAgICAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwot
ICAgICAgICAgICAgZ2F0aGVyU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAg
ICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAg
Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAg
IHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgLy8gTm93IHdlIHZpc2l0IHJvb3RzIHRoYXQgZG9uJ3QgZ2V0
IGJhcnJpZXJlZCwgc28gZWFjaCBmaXhwb2ludCBpdGVyYXRpb24ganVzdCByZXZpc2l0cwotICAg
ICAgICAvLyBhbGwgb2YgdGhlbS4KLSNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgICAgICBz
Y2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRvcik7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIAotICAgICAgICBpZiAobV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0
ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKLSAgICAgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52
aXNpdFN0cm9uZ1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAKKyAgICAgICAgaWYg
KHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWluYXRpb24oKSkgeworICAgICAgICAgICAgYXNzZXJ0
U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgZm9yIChhdXRv
JiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgICAgICBzbG90VmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChwYWlyLmtleSk7CisgICAgICAgICAgICAvLyBGSVhNRTogVGFrZSBtX211
dGF0b3JEaWRSdW4gaW50byBhY2NvdW50IHdoZW4gc2NoZWR1bGluZyBjb25zdHJhaW50cy4gTW9z
dCBsaWtlbHksCisgICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRvIGV4ZWN1dGUgcm9vdCBj
b25zdHJhaW50cyBhZ2FpbiB1bmxlc3MgdGhlIG11dGF0b3IgZGlkIHJ1bi4gQXQgYQorICAgICAg
ICAgICAgLy8gbWluaW11bSwgd2UgY291bGQgdXNlIHRoaXMgZm9yIHdvcmsgZXN0aW1hdGVzIC0g
YnV0IGl0J3MgcHJvYmFibHkgbW9yZSB0aGFuIGp1c3QgYW4KKyAgICAgICAgICAgIC8vIGVzdGlt
YXRlLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NjgyOAogICAgICAgICAgICAgCi0gICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1f
bWFya0xpc3RTZXQtPnNpemUoKSkKLSAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjpt
YXJrTGlzdHMoc2xvdFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB3ZSBjb3VsZCB0
aW1lb3V0LiBUaGlzIG9ubHkgY29tZXMKKyAgICAgICAgICAgIC8vIGludG8gcGxheSBpZiB3ZSdy
ZSBleGVjdXRpbmcgY29uc3RyYWludHMgZm9yIHRoZSBmaXJzdCB0aW1lLiBCdXQgdGhhdCB3aWxs
IG1hdHRlcgorICAgICAgICAgICAgLy8gd2hlbiB3ZSBoYXZlIGRlZXAgc3RhY2tzIG9yIGEgbG90
IG9mIERPTSBzdHVmZi4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjY4MzEKICAgICAgICAgICAgIAotICAgICAgICBzbG90VmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5leGNlcHRpb24oKSk7Ci0gICAgICAgIHNsb3RWaXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRpb24oKSk7CisgICAgICAgICAgICBi
b29sIGV4ZWN1dGVkRXZlcnl0aGluZyA9CisgICAgICAgICAgICAgICAgbV9jb25zdHJhaW50U2V0
LT5leGVjdXRlQ29udmVyZ2VuY2Uoc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWU6OmluZmluaXR5
KCkpOworICAgICAgICAgICAgaWYgKGV4ZWN1dGVkRXZlcnl0aGluZyAmJiBzbG90VmlzaXRvci5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHko
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXMoc2xvdFZpc2l0b3IpOwotICAg
ICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKLQotI2lmIEVOQUJMRShTQU1Q
TElOR19QUk9GSUxFUikKLSAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJv
ZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKLSAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7Ci0gICAgICAgICAgICBzYW1w
bGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7Ci0gICAgICAgICAg
ICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgICAgIG1fc2NoZWR1bGVyLT5kaWRFeGVjdXRlQ29uc3RyYWludHMoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFi
bGVyKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxl
bChtX3NjaGVkdWxlci0+dGltZVRvUmVzdW1lKCkpOwogICAgICAgICB9Ci0jZW5kaWYgLy8gRU5B
QkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAKLSAgICAgICAgaWYgKG1fdm0tPnR5cGVQ
cm9maWxlcigpKQotICAgICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KHNs
b3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgbV92bS0+c2hhZG93Q2hpY2tl
bigpLnZpc2l0Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoc2xvdFZpc2l0b3Ip
OwotCi0gICAgICAgIHNsb3RWaXNpdG9yLm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwot
ICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRv
cnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vz
c2FyeSgpOwotCi0gICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyhzbG90VmlzaXRv
cik7Ci0gICAgICAgIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwotICAgICAgICB2aXNpdENvbXBp
bGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwotICAgICAgICBERkc6Om1hcmtDb2RlQmxvY2tz
KCptX3ZtLCBzbG90VmlzaXRvcik7Ci0gICAgICAgIGJvb2wgc2hvdWxkVGVybWluYXRlID0gc2xv
dFZpc2l0b3IuaXNFbXB0eSgpICYmIG1fbXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOworICAg
ICAgICBpZiAoIW1fc2NoZWR1bGVyLT5zaG91bGRSZXN1bWUoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAKKyAgICAgICAgbV9zY2hlZHVsZXItPndpbGxSZXN1bWUoKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgICAgICBkYXRhTG9n
KHNsb3RWaXNpdG9yLmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwgIisiLCBtX211dGF0b3JN
YXJrU3RhY2stPnNpemUoKSArIHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKS5zaXplKCks
ICIsIGE9IiwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAvIDEwMjQsICIga2IsIGI9IiwgbV9i
YXJyaWVyc0V4ZWN1dGVkLCAiLCBtdT0iLCBzY2hlZHVsZXIuY3VycmVudERlY2lzaW9uKCkudGFy
Z2V0TXV0YXRvclV0aWxpemF0aW9uKCksICIgIik7CisgICAgICAgICAgICBkb3VibGUgdGhpc1Bh
dXNlTVMgPSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29uZHMo
KTsKKyAgICAgICAgICAgIGRhdGFMb2coInA9IiwgdGhpc1BhdXNlTVMsICIgbXMgKG1heCAiLCBt
YXhQYXVzZU1TKHRoaXNQYXVzZU1TKSwgIikuLi5dXG4iKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVuc3VyZSB0
aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKLSAgICAgICAgLy8gcnVubmlu
ZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIq
IHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKLSAgICAgICAgLy8gc28gdGhhdCB3ZSBrbm93IGZvciBz
dXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28sIHRoaXMgaGFzIHRvIGhhcHBl
biBhZnRlciB0aGUKLSAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sgLSBvdGhlcndpc2Ugd2UgbWln
aHQgbG9vcCBmb3JldmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28gd2FudCB0byBkbyB0aGlzCi0g
ICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0aGluZyBhdCB0aGUgZW5kIG9m
IHRoZSBsYXN0IEdDIGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0Ci0gICAgICAgIC8vIEdDLgot
ICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0aGlz
KTsKLSAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwotICAgICAgICAKLSAg
ICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAK
LSAgICAgICAgLy8gVGhlIFNsb3RWaXNpdG9yJ3MgbWFyayBzdGFja3MgYXJlIGFjY2Vzc2VkIGJ5
IHRoZSBjb2xsZWN0b3IgdGhyZWFkIChpLmUuIHRoaXMgdGhyZWFkKQotICAgICAgICAvLyB3aXRo
b3V0IGxvY2tzLiBUaGF0J3Mgd2h5IHdlIGRvdWJsZS1idWZmZXIuCi0gICAgICAgIG1fbXV0YXRv
ck1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJi
b3NlKQotICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCBzbG90Vmlz
aXRvcik7CisgICAgICAgIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgICAgIAogICAgICAgICB7Ci0g
ICAgICAgICAgICBUaW1pbmdTY29wZSB0cmFjZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFy
a1RvRml4cG9pbnQgdHJhY2luZyIpOwogICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBl
bmFibGVyKHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OnVzZUNvbGxlY3RvclRpbWVzbGljaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBzY2hlZHVs
ZXIuc25hcFBoYXNlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU2xvdFZp
c2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0OwotICAgICAgICAgICAgICAgIGRv
IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkZWNpc2lvbiA9IHNjaGVkdWxlci5jdXJyZW50
RGVjaXNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2lzaW9uLnNob3VsZEJlUmVz
dW1lZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29wZSByZXN1bWVUaGVXb3JsZFNjb3BlKCp0aGlzKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFpblJlc3VsdCA9IHNsb3RWaXNpdG9yLmRy
YWluSW5QYXJhbGxlbFBhc3NpdmVseShkZWNpc2lvbi50aW1lVG9TdG9wKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChkcmFpblJlc3VsdCA9PSBTbG90VmlzaXRvcjo6U2hhcmVk
RHJhaW5SZXN1bHQ6OkRvbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QXQgdGhpcyBwb2ludCB3ZSB3aWxsIHN0b3AuIEJ1dCBtYXliZSB0aGUgc2NoZWR1bGVyIGRvZXMg
bm90IHdhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdC4KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vjb25kcyBzY2hlZHVsZWRJZGxlID0gZGVjaXNp
b24udGltZVRvU3RvcCgpIC0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEl0J3MgdG90YWxseSB1bmNsZWFyIHdoYXQgdGhlIHZhbHVlIG9m
IGNvbGxlY3RQZXJtaXR0ZWRJZGxlUmF0aW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gc2hvdWxkIGJlLCBvdGhlciB0aGFuIGl0IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMC4g
WW91IGNvdWxkIGV2ZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJndWUg
Zm9yIGl0IGJlaW5nIGdyZWF0ZXIgdGhhbiAxLiBXZSBzaG91bGQgdHVuZSBpdC4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoc2NoZWR1bGVkSWRsZSAqIE9wdGlvbnM6OmNv
bGxlY3RvclBlcm1pdHRlZElkbGVSYXRpbygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY29u
ZHMgd2FrZVVwTGF0ZW5jeSA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gZGVjaXNpb24udGltZVRv
U3RvcCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWtlVXBMYXRlbmN5ID49
IDFfbXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coInd1bCE9Iiwg
d2FrZVVwTGF0ZW5jeS5taWxsaXNlY29uZHMoKSwgIiBtcyAiKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkcmFpblJlc3VsdCA9IHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxlbChkZWNpc2lvbi50
aW1lVG9SZXN1bWUoKSk7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoZHJhaW5SZXN1bHQgIT0g
U2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25lKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgLy8gRGlzYWJsaW5nIGNvbGxlY3RvciB0aW1lc2xpY2luZyBp
cyBtZWFudCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKLSAgICAgICAgICAgICAgICAvLyAtLWNv
bGxlY3RDb250aW51b3VzbHk9dHJ1ZSB0byBtYXhpbWl6ZSB0aGUgb3Bwb3J0dW5pdHkgZm9yIGhh
cm1mdWwgcmFjZXMuCi0gICAgICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29wZSByZXN1bWVU
aGVXb3JsZFNjb3BlKCp0aGlzKTsKLSAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5kcmFpbklu
UGFyYWxsZWwoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmRyYWlu
SW5QYXJhbGxlbFBhc3NpdmVseShtX3NjaGVkdWxlci0+dGltZVRvU3RvcCgpKTsKICAgICAgICAg
fQorCisgICAgICAgIHN0b3BUaGVXb3JsZCgpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJbR0M6ICIpOworICAgICAgICAKKyAg
ICAgICAgbV9zY2hlZHVsZXItPmRpZFN0b3AoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpKQorICAgICAgICAgICAgbV9zY2hlZHVsZXItPmxvZygpOwogICAgIH0KKyAg
ICAKKyAgICBtX3NjaGVkdWxlci0+ZW5kQ29sbGVjdGlvbigpOwogCiAgICAgewogICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRleCk7CkBAIC02OTQsNiArNjUx
LDEyIEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICAgICAg
bV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAgICAgfQogICAgIG1faGVs
cGVyQ2xpZW50LmZpbmlzaCgpOworCisgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0Nv
ZGVCbG9ja3MoCisgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAg
ICAgIHdyaXRlQmFycmllcihjb2RlQmxvY2spOworICAgICAgICB9KTsKKyAgICAgICAgCiAgICAg
dXBkYXRlT2JqZWN0Q291bnRzKGdjU3RhcnRUaW1lKTsKICAgICBlbmRNYXJraW5nKCk7CiB9CkBA
IC03MzIsMjUgKzY5NSw2IEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5nKCkKICAgICBtX2JhcnJp
ZXJzRXhlY3V0ZWQgPSAwOwogfQogCi12b2lkIEhlYXA6OnZpc2l0Q29uc2VydmF0aXZlUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQotewotICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3It
PmFwcGVuZChyb290cyk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsICptX2Nv
bGxlY3RvclNsb3RWaXNpdG9yKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xp
c3RXZWFrUmVmZXJlbmNlcygpCi17Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAgICAgICBERkc6OmV4
aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKCptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6
VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKLSNlbmRpZgotfQotCiB2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxl
cldvcmtsaXN0RW50cmllcygpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC04NTAsOCArNzk0
LDcgQEAgdm9pZCBIZWFwOjplbmRNYXJraW5nKCkKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlz
aXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+
cmVzZXQoKTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNr
LT5pc0VtcHR5KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkTXV0YXRvck1hcmtTdGFj
ay0+aXNFbXB0eSgpKTsKKyAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKICAgICBt
X3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAgIG1fb2JqZWN0
U3BhY2UuZW5kTWFya2luZygpOwpAQCAtMTEzNiw3ICsxMDc5LDcgQEAgdm9pZCBIZWFwOjpjb2xs
ZWN0SW5UaHJlYWQoKQogICAgIAogICAgIHdpbGxTdGFydENvbGxlY3Rpb24oc2NvcGUpOwogICAg
IGNvbGxlY3RJbXBsVGltaW5nU2NvcGUuc2V0U2NvcGUoKnRoaXMpOwotICAgICAgICAKKyAgICAK
ICAgICBnY1N0YXJ0VGltZSA9IFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAg
ICAgaWYgKG1fdmVyaWZpZXIpIHsKICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgbGl2ZSBvYmplY3Rz
IGZyb20gdGhlIGxhc3QgR0MgY3ljbGUgaGF2ZW4ndCBiZWVuIGNvcnJ1cHRlZCBieQpAQCAtMTE0
NiwxMSArMTA4OSwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgICAgIG1f
dmVyaWZpZXItPmluaXRpYWxpemVHQ0N5Y2xlKCk7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhl
ckxpdmVPYmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZU1hcmtpbmcpOwogICAgIH0K
LSAgICAgICAgCisgICAgCiAgICAgcHJlcGFyZUZvck1hcmtpbmcoKTsKLSAgICAgICAgCisgICAg
CiAgICAgbWFya1RvRml4cG9pbnQoZ2NTdGFydFRpbWUpOwotICAgICAgICAKKyAgICAKICAgICBp
ZiAobV92ZXJpZmllcikgewogICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhI
ZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwogICAgICAgICBtX3ZlcmlmaWVyLT52
ZXJpZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTExNjYsOCArMTEw
OSwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgZmluYWxpemVVbmNvbmRp
dGlvbmFsRmluYWxpemVycygpOwogICAgIHJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmll
cygpOwogICAgIG5vdGlmeUluY3JlbWVudGFsU3dlZXBlcigpOwotICAgICAgICAKLSAgICBtX2Nv
ZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0aGlzKTsKKyAgICAKKyAg
ICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJyZW50bHlFeGVjdXRpbmcoCisgICAgICAgIFsmXSAo
Q29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIHdyaXRlQmFycmllcihjb2RlQmxv
Y2spOworICAgICAgICB9KTsKICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyQ3VycmVudGx5RXhlY3V0
aW5nKCk7CiAgICAgICAgIAogICAgIG1fb2JqZWN0U3BhY2UucHJlcGFyZUZvckFsbG9jYXRpb24o
KTsKQEAgLTEzNTQsNiArMTMwMCw3IEBAIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5U2xvdygp
CiAgICAgCiAgICAgaGFuZGxlR0NEaWRKSVQoKTsKICAgICBoYW5kbGVOZWVkRmluYWxpemUoKTsK
KyAgICBtX211dGF0b3JEaWRSdW4gPSB0cnVlOwogfQogCiBib29sIEhlYXA6OnN0b3BJZk5lY2Vz
c2FyeVNsb3codW5zaWduZWQgb2xkU3RhdGUpCkBAIC0xMzY2LDcgKzEzMTMsNyBAQCBib29sIEhl
YXA6OnN0b3BJZk5lY2Vzc2FyeVNsb3codW5zaWduZWQgCiAgICAgICAgICYmIGhhbmRsZU5lZWRG
aW5hbGl6ZShvbGRTdGF0ZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIGlmICgh
KG9sZFN0YXRlICYgc2hvdWxkU3RvcEJpdCkpIHsKKyAgICBpZiAoIShvbGRTdGF0ZSAmIHNob3Vs
ZFN0b3BCaXQpICYmICFtX3NjaGVkdWxlci0+c2hvdWxkU3RvcCgpKSB7CiAgICAgICAgIGlmICgh
KG9sZFN0YXRlICYgc3RvcHBlZEJpdCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VTdHJvbmcob2xkU3RhdGUsIG9sZFN0YXRl
ICYgfnN0b3BwZWRCaXQpOwpAQCAtMTQzOSw2ICsxMzg2LDcgQEAgdm9pZCBIZWFwOjphY3F1aXJl
QWNjZXNzU2xvdygpCiAgICAgICAgIGlmIChtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlV2Vh
ayhvbGRTdGF0ZSwgbmV3U3RhdGUpKSB7CiAgICAgICAgICAgICBoYW5kbGVHQ0RpZEpJVCgpOwog
ICAgICAgICAgICAgaGFuZGxlTmVlZEZpbmFsaXplKCk7CisgICAgICAgICAgICBtX211dGF0b3JE
aWRSdW4gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAt
MjA1MiwzMiArMjAwMCwzNSBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRl
ZChzCiB9CiAjZW5kaWYKIAotYm9vbCBIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKEdD
RGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit2b2lkIEhlYXA6OmNvbGxlY3RJZk5l
Y2Vzc2FyeU9yRGVmZXIoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAg
ICBBU1NFUlQoIURpc2FsbG93R0M6OmlzR0NEaXNhbGxvd2VkT25DdXJyZW50VGhyZWFkKCkpOwog
CiAgICAgaWYgKCFtX2lzU2FmZVRvQ29sbGVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm47CiAgICAgaWYgKG11dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6SGVs
cGluZ0dDKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybjsKICAgICBpZiAo
IU9wdGlvbnM6OnVzZUdDKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIGlmIChtYXlOZWVkVG9TdG9wKCkpIHsKICAgICAgICAgaWYgKGRlZmVycmFs
Q29udGV4dCkKICAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7
CiAgICAgICAgIGVsc2UgaWYgKGlzRGVmZXJyZWQoKSkKICAgICAgICAgICAgIG1fZGlkRGVmZXJH
Q1dvcmsgPSB0cnVlOwotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
c3RvcElmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgaWYgdGhlIHNj
aGVkdWxlciB3YW50cyB1cyB0byBzdG9wLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyNworICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpnY01heEhlYXBTaXplKCkpKSB7CiAgICAgICAgIGlm
IChtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIDw9IE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICB9IGVs
c2UgewogICAgICAgICBpZiAobV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA8PSBtX21heEVkZW5T
aXplKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChkZWZlcnJhbENvbnRleHQpCkBAIC0yMDg2LDcgKzIwMzcsNiBAQCBib29s
IEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NECiAgICAgICAgIG1fZGlkRGVmZXJH
Q1dvcmsgPSB0cnVlOwogICAgIGVsc2UKICAgICAgICAgY29sbGVjdEFzeW5jKCk7Ci0gICAgcmV0
dXJuIHRydWU7CiB9CiAKIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZO
ZWVkZWRTbG93KCkKQEAgLTIxNDEsOCArMjA5MSwxNTUgQEAgdm9pZCBIZWFwOjpzZXRSdW5Mb29w
KENGUnVuTG9vcFJlZiBydW5MbwogfQogI2VuZGlmIC8vIFVTRShDRikKIAordm9pZCBIZWFwOjpi
dWlsZENvbnN0cmFpbnRTZXQoKQoreworICAgIG1fY29uc3RyYWludFNldCA9IHN0ZDo6bWFrZV91
bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCk7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCisgICAgICAgICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7Cisg
ICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAi
Q29uc3RyYWludDogY29uc2VydmF0aXZlIHNjYW4iKTsKKyAgICAgICAgICAgIG1fb2JqZWN0U3Bh
Y2UucHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKKyAgICAgICAgICAgIENvbnNlcnZhdGl2
ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKKyAgICAgICAgICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICAgICAgICAgIGdhdGhlclN0YWNr
Um9vdHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jvb3Rz
KGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmQoY29u
c2VydmF0aXZlUm9vdHMpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6
R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAg
ICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECisgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3Zt
LCBzbG90VmlzaXRvcik7CisjZW5kaWYKKworICAgICAgICAgICAgaWYgKG1fdm0tPnNtYWxsU3Ry
aW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAgICAgICAg
ICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVk
VmFsdWVzKQorICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHBh
aXIua2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fbWFya0xpc3RTZXQgJiYg
bV9tYXJrTGlzdFNldC0+c2l6ZSgpKQorICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyOjptYXJrTGlzdHMoc2xvdFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0
aW9uKCkpOworICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+
bGFzdEV4Y2VwdGlvbigpKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6
OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAg
ICAgICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgICAgIG1f
aGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICBt
X2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFy
a2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKKyAgICAgICAgIkQiLCAiRGVidWdnZXIiLAorICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworI2lmIEVO
QUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVy
KiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAg
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsK
KyAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNr
VHJhY2VzKCk7CisgICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoc2xvdFZp
c2l0b3IpOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmls
ZXIgZGF0YTpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFC
TEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX3Zt
LT50eXBlUHJvZmlsZXIoKSkKKyAgICAgICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2co
KS0+dmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3ZtLT5z
aGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7CisgICAgICAgIH0sCisg
ICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgCisgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJKc3IiLCAiSklUIFN0dWIgUm91dGluZXMi
LAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRp
bmdUaW1lb3V0JikgeworICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2Vk
U3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0Nv
bnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKKyAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgICAg
ICBzbG90VmlzaXRvci5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAg
ICAgICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2Fy
eSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1Nl
dHMoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6
R3JleWVkQnlNYXJraW5nKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAg
ICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwKKyAgICAgICAgW3RoaXNdIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAg
ICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vha1JlZmVy
ZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgp
KQorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0
b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJr
aW5nKTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFk
ZCgKKyAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMiLAorICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQorICAg
ICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1Jl
ZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHVubmVjZXNzYXJ5LgorICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyOQorICAgICAgICAg
ICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKAorICAgICAgICAgICAgICAgICptX3ZtLAor
ICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkRG
RyBXb3JrbGlzdHM6XG4iLCBzbG90VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtp
bmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmcpOworI2VuZGlmCisgICAgCisgICAgbV9jb25z
dHJhaW50U2V0LT5hZGQoCisgICAgICAgICJDYiIsICJDb2RlQmxvY2tzIiwKKyAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsK
KyAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91
dEhvbGRpbmdMb2NrcygKKyAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2Nr
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMgYSBjb25z
dHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KKyAgICAgICAgICAgICAgICAgICAgaWYgKEhlYXA6
OmlzTWFya2VkKGNvZGVCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGVCbG9j
ay0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseU9sZE9yQmxhY2spCisgICAgICAg
ICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2sp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3Ry
YWludDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAorICAgICAgICAiTW1zIiwgIk11dGF0b3IgTWFyayBTdGFjayIsCisgICAgICAgIFt0aGlzXSAo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAg
ICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgZml4cG9pbnQgdGhhdCB3ZSBpbnRyb2R1Y2VkIHdv
cmshCisgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgp
OworICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIoIiwgc2l6ZSwgIikiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9t
dXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2so
KSk7CisgICAgICAgIH0sCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUg
eworICAgICAgICAgICAgcmV0dXJuIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpOworICAgICAg
ICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOworfQor
CiB2b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpCiB7CisgICAgYnVpbGRDb25zdHJh
aW50U2V0KCk7CisgICAgCiAgICAgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOwogICAgIAogICAg
IGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMsMTAgQEAgY2xhc3MgSlNW
YWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIE1hcmtTdGFja0FycmF5
OwogY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNl
dDsKK2NsYXNzIE11dGF0b3JTY2hlZHVsZXI7CiBjbGFzcyBTbG90VmlzaXRvcjsKLWNsYXNzIFNw
YWNlVGltZVNjaGVkdWxlcjsKK2NsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiBjbGFz
cyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFZNOwogCkBAIC0yMDEsNyArMjAzLDcgQEAg
cHVibGljOgogICAgIC8vIGFuZCB0aGlzIHdpbGwgd2FpdCBmb3IgdGhhdCBiYWNrbG9nIGJlZm9y
ZSBydW5uaW5nIGl0cyBHQyBhbmQgcmV0dXJuaW5nLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgY29sbGVjdFN5bmMoc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+ID0gc3RkOjpudWxs
b3B0KTsKICAgICAKLSAgICBib29sIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NEZWZlcnJh
bENvbnRleHQqID0gbnVsbHB0cik7IC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBkaWQgY29sbGVjdC4K
KyAgICB2b2lkIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NEZWZlcnJhbENvbnRleHQqID0g
bnVsbHB0cik7CiAKICAgICB2b2lkIGNvbXBsZXRlQWxsSklUUGxhbnMoKTsKICAgICAKQEAgLTM3
NSw3ICszNzcsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7
CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwogICAgIGZyaWVuZCBjbGFzcyBTbG90Vmlz
aXRvcjsKLSAgICBmcmllbmQgY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyOworICAgIGZyaWVuZCBj
bGFzcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOwogICAgIGZyaWVuZCBjbGFzcyBJbmNyZW1l
bnRhbFN3ZWVwZXI7CiAgICAgZnJpZW5kIGNsYXNzIEhlYXBTdGF0aXN0aWNzOwogICAgIGZyaWVu
ZCBjbGFzcyBWTTsKQEAgLTQxMiw5ICs0MTQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcFRo
ZVdvcmxkKCk7CiAgICAgdm9pZCByZXN1bWVUaGVXb3JsZCgpOwogICAgIAotICAgIGNsYXNzIFJl
c3VtZVRoZVdvcmxkU2NvcGU7Ci0gICAgZnJpZW5kIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7
Ci0gICAgCiAgICAgdm9pZCBzdG9wVGhlTXV0YXRvcigpOwogICAgIHZvaWQgcmVzdW1lVGhlTXV0
YXRvcigpOwogICAgIApAQCAtNDU0LDcgKzQ1Myw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnYXRo
ZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlclNjcmF0
Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgYmVnaW5NYXJraW5n
KCk7Ci0gICAgdm9pZCB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7
CiAgICAgdm9pZCB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZv
aWQgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgdm9pZCB1cGRhdGVP
YmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKTsKQEAgLTQ5OCw2ICs0OTYsMTYgQEAgcHJp
dmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllck9wYXF1ZVJvb3RT
bG93KHZvaWQqKTsKICAgICAKICAgICB2b2lkIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29s
IHZhbHVlKTsKKyAgICAKKyAgICB2b2lkIGJ1aWxkQ29uc3RyYWludFNldCgpOworICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29t
cGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBGdW5jJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tz
V2l0aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5jJik7CisgICAgCisgICAgdm9pZCBhc3NlcnRT
aGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7
CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTUzNCw2ICs1NDIsOCBAQCBwcml2YXRl
OgogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0b3JTbG90
VmlzaXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1h
cmtTdGFjazsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnRTZXQ+
IG1fY29uc3RyYWludFNldDsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNl
ZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8K
ICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVt
IGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC02MTYsNiArNjI2LDgg
QEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9leHRlcm5hbE1lbW9yeVNpemUgeyAwIH07CiAjZW5k
aWYKICAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TXV0YXRvclNjaGVkdWxlcj4gbV9zY2hlZHVs
ZXI7CisgICAgCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3VsZFN0b3BCaXQgPSAxdSA8
PCAwdTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3RvcHBlZEJpdCA9IDF1IDw8IDF1Owog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBoYXNBY2Nlc3NCaXQgPSAxdSA8PCAydTsKQEAgLTYz
MSw2ICs2NDMsNyBAQCBwcml2YXRlOgogICAgIFRpY2tldCBtX2xhc3RHcmFudGVkVGlja2V0IHsg
MCB9OwogICAgIGJvb2wgbV90aHJlYWRTaG91bGRTdG9wIHsgZmFsc2UgfTsKICAgICBib29sIG1f
dGhyZWFkSXNTdG9wcGluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX211dGF0b3JEaWRSdW4geyB0
cnVlIH07CiAgICAgQm94PExvY2s+IG1fdGhyZWFkTG9jazsKICAgICBSZWZQdHI8QXV0b21hdGlj
VGhyZWFkQ29uZGl0aW9uPiBtX3RocmVhZENvbmRpdGlvbjsgLy8gVGhlIG11dGF0b3IgbXVzdCBu
b3Qgd2FpdCBvbiB0aGlzLiBJdCB3b3VsZCBjYXVzZSBhIGRlYWRsb2NrLgogICAgIFJlZlB0cjxB
dXRvbWF0aWNUaHJlYWQ+IG1fdGhyZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJNYXJraW5nQ29uc3RyYWludC5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAor
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5j
dGlvbiwKKyAgICBWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisgICAgOiBtX2FiYnJldmlhdGVkTmFt
ZShhYmJyZXZpYXRlZE5hbWUpCisgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICAsIG1f
ZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fdm9sYXRp
bGl0eSh2b2xhdGlsaXR5KQoreworfQorCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0
cmFpbnQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhl
Y3V0ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24sCisgICAgVm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAgIDog
bV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQorICAgICwgbV9uYW1lKFdURk1vdmUo
bmFtZSkpCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikp
CisgICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQoreworfQorCitN
YXJraW5nQ29uc3RyYWludDo6fk1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30KKwordm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCit7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7
Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7Cisg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFMb2coYWJicmV2aWF0ZWROYW1l
KCkpOworICAgIFZpc2l0aW5nVGltZW91dCB2aXNpdGluZ1RpbWVvdXQodmlzaXRvciwgZGlkVmlz
aXRTb21ldGhpbmcsIHRpbWVvdXQpOworICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IsIHZp
c2l0aW5nVGltZW91dCk7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0aW5nVGltZW91dC52
aXNpdENvdW50KHZpc2l0b3IpOworICAgIGRpZFZpc2l0U29tZXRoaW5nID0gdmlzaXRpbmdUaW1l
b3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlZpc2l0aW5nVGltZW91dC5oIgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8
d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYXJr
aW5nQ29uc3RyYWludFNldDsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFzcyBNYXJraW5nQ29u
c3RyYWludCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gVm9sYXRpbGl0
eSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBpbnRyb2R1Y2UgYSBuZXcga2luZCBvZiB2
b2xhdGlsaXR5IGNhbGxlZCBHcmV5ZWRCeVJlc3VtcHRpb24sIHdoaWNoCisgICAgICAgIC8vIHdv
dWxkIG1lYW4gcnVubmluZyBhbGwgb2YgdGhlIHRpbWVzIHRoYXQgR3JleWVkQnlFeGVjdXRpb24g
cnVucyBleGNlcHQgYXMgYSByb290IGluIGEKKyAgICAgICAgLy8gZnVsbCBHQy4KKyAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgzMAorICAgICAg
ICAKKyAgICAgICAgLy8gVGhlIGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgcmVldmFsdWF0ZWQgYW55
dGltZSB0aGUgbXV0YXRvciBydW5zOiBzbyBhdCBHQyBzdGFydCBhbmQKKyAgICAgICAgLy8gd2hl
bmV2ZXIgdGhlIEdDIHJlc3VzcGVuZHMgYWZ0ZXIgYSByZXN1bXB0aW9uLiBUaGlzIGlzIGFsbW9z
dCBhbHdheXMgc29tZXRoaW5nIHRoYXQKKyAgICAgICAgLy8geW91J2QgY2FsbCBhICJyb290IiBp
biBhIHRyYWRpdGlvbmFsIEdDLgorICAgICAgICBHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAg
CisgICAgICAgIC8vIFRoZSBjb25zdHJhaW50IG5lZWRzIHRvIGJlIHJlZXZhbHVhdGVkIGFueSB0
aW1lIGFueSBvYmplY3QgaXMgbWFya2VkIGFuZCBhbnl0aW1lIHRoZQorICAgICAgICAvLyBtdXRh
dG9yIHJlc3VtZXMuCisgICAgICAgIEdyZXllZEJ5TWFya2luZworICAgIH07CisgICAgCisgICAg
TWFya2luZ0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3Ry
aW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZp
c2l0aW5nVGltZW91dCYpPiwKKyAgICAgICAgVm9sYXRpbGl0eSk7CisgICAgCisgICAgTWFya2lu
Z0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCisg
ICAgICAgIFZvbGF0aWxpdHkpOworICAgIAorICAgIH5NYXJraW5nQ29uc3RyYWludCgpOworICAg
IAorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAor
ICAgIGNvbnN0IGNoYXIqIGFiYnJldmlhdGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWJicmV2
aWF0ZWROYW1lLmRhdGEoKTsgfQorICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWUuZGF0YSgpOyB9CisgICAgCisgICAgdm9pZCByZXNldFN0YXRzKCk7CisgICAgCisg
ICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3Vu
dDsgfQorICAgIAorICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0
U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIAorICAgIGRvdWJsZSBxdWlj
a1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgIGlmICgh
bV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgfQor
ICAgIAorICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAg
eworICAgICAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZp
c2l0b3IpOworICAgIH0KKyAgICAKKyAgICBWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7
IHJldHVybiBtX3ZvbGF0aWxpdHk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCisgICAgCisg
ICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CisgICAgQ1N0cmluZyBtX2FiYnJldmlh
dGVkTmFtZTsKKyAgICBDU3RyaW5nIG1fbmFtZTsKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZp
c2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlv
bjsKKyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGlt
YXRlRnVuY3Rpb247CisgICAgVm9sYXRpbGl0eSBtX3ZvbGF0aWxpdHk7CisgICAgc2l6ZV90IG1f
bGFzdFZpc2l0Q291bnQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRT
ZXQuaCIKKworI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYXJraW5nQ29uc3Ry
YWludFNldDo6RXhlY3V0aW9uQ29udGV4dCB7CitwdWJsaWM6CisgICAgRXhlY3V0aW9uQ29udGV4
dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3Rv
bmljVGltZSB0aW1lb3V0KQorICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgLCBtX3Zpc2l0
b3IodmlzaXRvcikKKyAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmc7CisgICAgfQorICAgIAorICAgIGJvb2wgc2hvdWxk
VGltZU91dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmco
KSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7CisgICAgfQorICAgIAorICAgIC8vIFJldHVybnMg
ZmFsc2UgaWYgaXQgdGltZXMgb3V0LgorICAgIGJvb2wgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1
dGVkKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiB1bmV4ZWN1dGVkKSB7Cisg
ICAgICAgICAgICBleGVjdXRlKGluZGV4KTsKKyAgICAgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIo
aW5kZXgpOworICAgICAgICAgICAgaWYgKHNob3VsZFRpbWVPdXQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhlY3V0ZWQuZ2V0KGluZGV4KTsgfQorCisgICAgdm9pZCBleGVjdXRlKHNpemVfdCBpbmRleCkK
KyAgICB7CisgICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1f
ZGlkVmlzaXRTb21ldGhpbmcsIG1fdGltZW91dCk7CisgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGlu
ZGV4KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBt
X3NldDsKKyAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIE1vbm90b25pY1RpbWUgbV90
aW1lb3V0OworICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOworICAgIGJvb2wgbV9kaWRWaXNpdFNv
bWV0aGluZyB7IGZhbHNlIH07Cit9OworCitNYXJraW5nQ29uc3RyYWludFNldDo6TWFya2luZ0Nv
bnN0cmFpbnRTZXQoKQoreworfQorCitNYXJraW5nQ29uc3RyYWludFNldDo6fk1hcmtpbmdDb25z
dHJhaW50U2V0KCkKK3sKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6cmVzZXRTdGF0
cygpCit7CisgICAgbV91bmV4ZWN1dGVkUm9vdHMuY2xlYXJBbGwoKTsKKyAgICBtX3VuZXhlY3V0
ZWRPdXRncm93dGhzLmNsZWFyQWxsKCk7CisgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9z
ZXQpIHsKKyAgICAgICAgY29uc3RyYWludC0+cmVzZXRTdGF0cygpOworICAgICAgICBzd2l0Y2gg
KGNvbnN0cmFpbnQtPnZvbGF0aWxpdHkoKSkgeworICAgICAgICBjYXNlIE1hcmtpbmdDb25zdHJh
aW50OjpHcmV5ZWRCeUV4ZWN1dGlvbjoKKyAgICAgICAgICAgIG1fdW5leGVjdXRlZFJvb3RzLnNl
dChjb25zdHJhaW50LT5pbmRleCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmc6CisgICAgICAgICAgICBtX3VuZXhl
Y3V0ZWRPdXRncm93dGhzLnNldChjb25zdHJhaW50LT5pbmRleCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0Ojph
ZGQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICBGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGZ1bmN0aW9u
LAorICAgIE1hcmtpbmdDb25zdHJhaW50OjpWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCit7CisgICAg
YWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0
ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsK
K30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAorICAgIENTdHJpbmcgYWJicmV2
aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgRnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYs
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgRnVuY3Rpb248
ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCisgICAgTWFy
a2luZ0NvbnN0cmFpbnQ6OlZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3sKKyAgICBhZGQoc3RkOjpt
YWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBX
VEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3Jr
RXN0aW1hdGVGdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6YWRkKAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4gY29u
c3RyYWludCkKK3sKKyAgICBjb25zdHJhaW50LT5tX2luZGV4ID0gbV9zZXQuc2l6ZSgpOworICAg
IG1fb3JkZXJlZC5hcHBlbmQoY29uc3RyYWludC5nZXQoKSk7CisgICAgaWYgKGNvbnN0cmFpbnQt
PnZvbGF0aWxpdHkoKSA9PSBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKQorICAg
ICAgICBtX291dGdyb3d0aHMuYXBwZW5kKGNvbnN0cmFpbnQuZ2V0KCkpOworICAgIG1fc2V0LmFw
cGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKK30KKworYm9vbCBNYXJraW5nQ29uc3RyYWludFNl
dDo6ZXhlY3V0ZUJvb3RzdHJhcChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0
aW1lb3V0KQoreworICAgIC8vIEJvb3RzdHJhcCBtZWFucyB0aGF0IHdlIGhhdmVuJ3QgZG9uZSBh
bnkgb2JqZWN0IHZpc2l0aW5nIHlldC4gVGhpcyBtZWFucyB0aGF0IHdlIHdhbnQgdG8KKyAgICAv
LyBvbmx5IGV4ZWN1dGUgcm9vdCBjb25zdHJhaW50cyAod2hpY2ggYWxzbyBoYXBwZW5zIHRvIGJl
IHRob3NlIHRoYXQgd2Ugc2F5IGFyZSBncmV5ZWQgYnkKKyAgICAvLyByZXN1bXB0aW9uKSwgc2lu
Y2UgdGhlIG90aGVyIGNvbnN0cmFpbnRzIGFyZSBzdXBlciB1bmxpa2VseSB0byB0cmlnZ2VyIHdp
dGhvdXQgc29tZSBvYmplY3QKKyAgICAvLyB2aXNpdGluZy4gVGhlIGV4cGVjdGF0aW9uIGlzIHRo
YXQgdGhlIGNhbGxlciB3aWxsIGdvIHN0cmFpZ2h0IHRvIG9iamVjdCB2aXNpdGluZyBhZnRlcgor
ICAgIC8vIHRoaXMuCisgICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0KCp0aGlz
LCB2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAg
ZGF0YUxvZygiYm9vdDoiKTsKKyAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGlvbkNvbnRleHQuZHJh
aW4obV91bmV4ZWN1dGVkUm9vdHMpOworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAg
ICBkYXRhTG9nKCIgIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBNYXJraW5nQ29u
c3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25v
dG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2Vu
Y2VJbXBsKHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAg
ICAgICBkYXRhTG9nKCIgIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBNYXJraW5n
Q29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZHZhbmNpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogb3V0Z3Jvd3RoIDogbV9vdXRncm93dGhz
KSB7CisgICAgICAgIGlmIChvdXRncm93dGgtPndvcmtFc3RpbWF0ZSh2aXNpdG9yKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBFeGVjdXRpb25Db250ZXh0
IGV4ZWN1dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIAorICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRhTG9nKCJjb252ZXJnZToiKTsKKworICAg
IC8vIElmIHRoZXJlIGFyZSBhbnkgY29uc3RyYWludHMgdGhhdCB3ZSBoYXZlIG5vdCBleGVjdXRl
ZCBhdCBhbGwgZHVyaW5nIHRoaXMgY3ljbGUsIHRoZW4KKyAgICAvLyB3ZSBzaG91bGQgZXhlY3V0
ZSB0aG9zZSBub3cuCisgICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRl
ZFJvb3RzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZXhlY3V0aW9uQ29udGV4
dC5kcmFpbihtX3VuZXhlY3V0ZWRPdXRncm93dGhzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIC8vIFdlIHdhbnQgdG8ga2VlcCBwcmVmZXJyaW5nIHRoZSBvdXRncm93dGggY29u
c3RyYWludHMgLSB0aGUgb25lcyB0aGF0IG5lZWQgdG8gYmUgZml4cG9pbnRlZAorICAgIC8vIGV2
ZW4gaW4gYSBzdG9wLXRoZS13b3JsZCBHQyAtIHVudGlsIHRoZXkgc3RvcCBwcm9kdWNpbmcuIFRo
ZXkgaGF2ZSBhIHRlbmRlbmN5IHRvIGdvIHRvdGFsbHkKKyAgICAvLyBzaWxlbnQgYXQgc29tZSBw
b2ludCBkdXJpbmcgR0MsIGF0IHdoaWNoIHBvaW50IGl0IG1ha2VzIHNlbnNlIG5vdCB0byBydW4g
dGhlbSBhZ2FpbiB1bnRpbAorICAgIC8vIHRoZSBlbmQuIE91dGdyb3d0aHMgcHJvZHVjaW5nIG5l
dyBpbmZvcm1hdGlvbiBjb3JyZXNwb25kcyBhbG1vc3QgZXhhY3RseSB0byB0aGUgd2F2ZWZyb250
CisgICAgLy8gYWR2YW5jaW5nOiBpdCB1c3VhbGx5IG1lYW5zIHRoYXQgd2UgYXJlIG1hcmtpbmcg
b2JqZWN0cyB0aGF0IHNob3VsZCBiZSBtYXJrZWQgYmFzZWQgb24KKyAgICAvLyBvdGhlciBvYmpl
Y3RzIHRoYXQgd2Ugd291bGQgaGF2ZSBtYXJrZWQgYW55d2F5LiBPbmNlIHRoZSB3YXZlZnJvbnQg
aXMgbm8gbG9uZ2VyIGFkdmFuY2luZywKKyAgICAvLyB3ZSB3YW50IHRvIHJ1biBtb3N0bHkgdGhl
IHJvb3QgY29uc3RyYWludHMgKGJhc2VkIG9uIHRoZWlyIHByZWRpY3Rpb25zIG9mIGhvdyBtdWNo
IHdvcmsKKyAgICAvLyB0aGV5IHdpbGwgaGF2ZSkgYmVjYXVzZSBhdCB0aGlzIHBvaW50IHdlIGFy
ZSBqdXN0IHRyeWluZyB0byBvdXRwYWNlIHRoZSByZXRyZWF0aW5nCisgICAgLy8gd2F2ZWZyb250
LgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gKGV4ZWN1dGVDb252ZXJn
ZW5jZUltcGwpIG9ubHkgcmV0dXJucyB0cnVlIGlmIGl0IHJ1bnMgYWxsCisgICAgLy8gY29uc3Ry
YWludHMuIFNvLCBhbGwgd2UgYXJlIGNvbnRyb2xsaW5nIGFyZSB0aGUgaGV1cmlzdGljcyB0aGF0
IHNheSB3aGljaCBjb25zdHJhaW50cyB0bworICAgIC8vIHJ1biBmaXJzdC4gQ2hvb3NpbmcgdGhl
IGNvbnN0cmFpbnRzIHRoYXQgYXJlIHRoZSBtb3N0IGxpa2VseSB0byBwcm9kdWNlIG1lYW5zIHJ1
bm5pbmcgZmV3ZXIKKyAgICAvLyBjb25zdHJhaW50cyBiZWZvcmUgcmV0dXJuaW5nLgorICAgIGJv
b2wgaXNXYXZlZnJvbnRBZHZhbmNpbmcgPSB0aGlzLT5pc1dhdmVmcm9udEFkdmFuY2luZyh2aXNp
dG9yKTsKKyAgICAKKyAgICBzdGQ6OnNvcnQoCisgICAgICAgIG1fb3JkZXJlZC5iZWdpbigpLCBt
X29yZGVyZWQuZW5kKCksCisgICAgICAgIFsmXSAoTWFya2luZ0NvbnN0cmFpbnQqIGEsIE1hcmtp
bmdDb25zdHJhaW50KiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgIC8vIFJlbWVtYmVyOiByZXR1
cm4gdHJ1ZSBpZiBhIHNob3VsZCBjb21lIGJlZm9yZSBiLgorICAgICAgICAgICAgaWYgKGEtPnZv
bGF0aWxpdHkoKSAhPSBiLT52b2xhdGlsaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNX
YXZlZnJvbnRBZHZhbmNpbmcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLT52b2xhdGls
aXR5KCkgPiBiLT52b2xhdGlsaXR5KCk7IC8vIEdyZXllZEJ5TWFya2luZyBzaG91bGQgY29tZSBi
ZWZvcmUgR3JleWVkQnlFeGVjdXRpb24uCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYS0+dm9sYXRpbGl0eSgpIDwgYi0+dm9sYXRpbGl0eSgpOyAvLyBH
cmV5ZWRCeUV4ZWN1dGlvbiBzaG91bGQgY29tZSBiZWZvcmUgR3JleWVkQnlNYXJraW5nLgorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gYS0+d29ya0VzdGlt
YXRlKHZpc2l0b3IpID4gYi0+d29ya0VzdGltYXRlKHZpc2l0b3IpOworICAgICAgICB9KTsKKyAg
ICAKKyAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50IDogbV9vcmRlcmVkKSB7
CisgICAgICAgIHNpemVfdCBpID0gY29uc3RyYWludC0+aW5kZXgoKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZEV4ZWN1dGUoaSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKGkpOworICAgICAgICAKKyAg
ICAgICAgLy8gT25jZSB3ZSdyZSBpbiBjb252ZXJnZW5jZSwgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vu
c2UgdG8gbGV0IHNvbWUgbWFya2luZyBoYXBwZW4gYW55dGltZQorICAgICAgICAvLyB3ZSBmaW5k
IHdvcmsuIE5vbmV0aGVsZXNzLCB3ZSBvbmx5IHdhbnQgY29uc3RyYWludHMgdG8gaW50ZXJydXB0
IHRoZW1zZWx2ZXMgdXBvbgorICAgICAgICAvLyB0aW1lb3V0IC0gbm90IGp1c3QgYmVjYXVzZSB0
aGV5IGZvdW5kIHNvbWUgd29yay4KKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxk
IGV4ZWN1dGUgYWxsIGNvbnN0cmFpbnRzIHVudGlsIHRpbWVvdXQ/IE5vdCBjbGVhciBpZiB0aGF0
J3MKKyAgICAgICAgLy8gYmV0dGVyIG9yIHdvcnNlLiBNYXliZSBldmVuIGJldHRlciBpcyB0aGlz
OgorICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGVtcHR5LCBrZWVwIHJ1bm5pbmcuCisg
ICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgaGFzIGF0IGxlYXN0IE4gdGhpbmdzLCByZXR1
cm4uCisgICAgICAgIC8vIC0gRWxzZSBydW4gdW50aWwgdGltZW91dC4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgzMgorICAgICAgICBpZiAo
ZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYXJraW5n
Q29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBi
b29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBjb25zdHJhaW50
IDogbV9zZXQpCisgICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgZGlkVmlzaXRT
b21ldGhpbmcsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIGlmIChPcHRpb25zOjps
b2dHQygpKQorICAgICAgICBkYXRhTG9nKCIgIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgor
I2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldCB7CitwdWJsaWM6Cisg
ICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKKyAgICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsK
KyAgICAKKyAgICB2b2lkIHJlc2V0U3RhdHMoKTsKKyAgICAKKyAgICB2b2lkIGFkZCgKKyAgICAg
ICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCisgICAgICAgIENTdHJpbmcgbmFtZSwKKyAgICAg
ICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+
LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6Vm9sYXRpbGl0eSk7CisgICAgCisgICAgdm9p
ZCBhZGQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAorICAgICAgICBDU3RyaW5n
IG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0
aW5nVGltZW91dCYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4s
CisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpWb2xhdGlsaXR5KTsKKyAgICAKKyAgICB2b2lk
IGFkZChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKKyAgICAKKyAgICAvLyBB
c3N1bWluZyB0aGF0IHRoZSBtYXJrIHN0YWNrcyBhcmUgYWxsIGVtcHR5LCB0aGlzIHdpbGwgZ2l2
ZSB5b3UgYSBndWVzcyBhcyB0byB3aGV0aGVyIG9yCisgICAgLy8gbm90IHRoZSB3YXZlZnJvbnQg
aXMgYWR2YW5jaW5nLgorICAgIGJvb2wgaXNXYXZlZnJvbnRBZHZhbmNpbmcoU2xvdFZpc2l0b3Im
KTsKKyAgICBib29sIGlzV2F2ZWZyb250UmV0cmVhdGluZyhTbG90VmlzaXRvciYgdmlzaXRvcikg
eyByZXR1cm4gIWlzV2F2ZWZyb250QWR2YW5jaW5nKHZpc2l0b3IpOyB9CisgICAgCisgICAgLy8g
RXhlY3V0ZXMgb25seSByb290cy4gUmV0dXJucyB0cnVlIGlmIGFsbCByb290cyBoYXZlIGJlZW4g
ZXhlY3V0ZWQuIEl0J3MgZXhwZWN0ZWQKKyAgICAvLyB0aGF0IHlvdSdsbCBkbyBzb21lIGRyYWlu
aW5nIGFmdGVyIHRoaXMgYW5kIHRoZW4gdXNlIGV4ZWN1dGVDb252ZXJnZW5jZSgpLgorICAgIGJv
b2wgZXhlY3V0ZUJvb3RzdHJhcChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCA9
IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBhbGwgY29uc3RyYWludHMgd2VyZSBleGVjdXRlZC4gVGhpcyBhc3N1bWVzIHRoYXQgeW91J3Zl
IGFscmFlZHkKKyAgICAvLyB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCisg
ICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoCisgICAgICAgIFNsb3RWaXNpdG9yJiwKKyAgICAg
ICAgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7Cisg
ICAgCisgICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5h
bmlnYW5zLgorICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOworICAgIAorcHJpdmF0
ZToKKyAgICBjbGFzcyBFeGVjdXRpb25Db250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRp
b25Db250ZXh0OworICAgIAorICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90Vmlz
aXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgCisgICAgYm9vbCBkcmFpbihTbG90
VmlzaXRvciYsIE1vbm90b25pY1RpbWUsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9y
JiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOworICAgIAorICAgIEJpdFZlY3Rv
ciBtX3VuZXhlY3V0ZWRSb290czsKKyAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkT3V0Z3Jvd3Ro
czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pj4gbV9zZXQ7
CisgICAgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4gbV9vcmRlcmVkOworICAgIFZlY3RvcjxN
YXJraW5nQ29uc3RyYWludCo+IG1fb3V0Z3Jvd3RoczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1
bGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRh
dG9yU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJNdXRhdG9yU2NoZWR1bGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitNdXRhdG9yU2NoZWR1
bGVyOjpNdXRhdG9yU2NoZWR1bGVyKCkKK3sKK30KKworTXV0YXRvclNjaGVkdWxlcjo6fk11dGF0
b3JTY2hlZHVsZXIoKQoreworfQorCit2b2lkIE11dGF0b3JTY2hlZHVsZXI6OmRpZFN0b3AoKQor
eworfQorCit2b2lkIE11dGF0b3JTY2hlZHVsZXI6OndpbGxSZXN1bWUoKQoreworfQorCit2b2lk
IE11dGF0b3JTY2hlZHVsZXI6OmRpZEV4ZWN1dGVDb25zdHJhaW50cygpCit7Cit9CisKK3ZvaWQg
TXV0YXRvclNjaGVkdWxlcjo6bG9nKCkKK3sKK30KKworYm9vbCBNdXRhdG9yU2NoZWR1bGVyOjpz
aG91bGRTdG9wKCkKK3sKKyAgICByZXR1cm4gaGFzRWxhcHNlZCh0aW1lVG9TdG9wKCkpOworfQor
Citib29sIE11dGF0b3JTY2hlZHVsZXI6OnNob3VsZFJlc3VtZSgpCit7CisgICAgcmV0dXJuIGhh
c0VsYXBzZWQodGltZVRvUmVzdW1lKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclNjaGVkdWxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE11dGF0b3JTY2hl
ZHVsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE11dGF0b3JTY2hlZHVsZXIpOworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAg
ICAgICBOb3JtYWwsIC8vIE5vdCBjb2xsZWN0aW5nLgorICAgICAgICBTdG9wcGVkLAorICAgICAg
ICBSZXN1bWVkCisgICAgfTsKKyAgICAKKyAgICBNdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgdmly
dHVhbCB+TXV0YXRvclNjaGVkdWxlcigpOworICAgIAorICAgIHZpcnR1YWwgU3RhdGUgc3RhdGUo
KSBjb25zdCA9IDA7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29sbGVjdGlvbigpID0g
MDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcCgpOworICAgIHZpcnR1YWwgdm9pZCB3
aWxsUmVzdW1lKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4ZWN1dGVDb25zdHJhaW50cygpOwor
ICAgIAorICAgIHZpcnR1YWwgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgPSAwOyAvLyBDYWxs
IHdoaWxlIHJlc3VtZWQsIHRvIGFzayB3aGVuIHRvIHN0b3AuCisgICAgdmlydHVhbCBNb25vdG9u
aWNUaW1lIHRpbWVUb1Jlc3VtZSgpID0gMDsgLy8gQ2FsbCB3aGlsZSBzdG9wcGVkLCB0byBhc2sg
d2hlbiB0byByZXN1bWUuCisgICAgCisgICAgdmlydHVhbCB2b2lkIGxvZygpOworICAgIAorICAg
IGJvb2wgc2hvdWxkU3RvcCgpOyAvLyBDYWxsIHdoaWxlIHJlc3VtZWQsIHRvIGFzayBpZiB3ZSBz
aG91bGQgc3RvcCBub3cuCisgICAgYm9vbCBzaG91bGRSZXN1bWUoKTsgLy8gQ2FsbCB3aGlsZSBz
dG9wcGVkLCB0byBhc2sgaWYgd2Ugc2hvdWxkIHJlc3VtZSBub3cuCisgICAgCisgICAgdmlydHVh
bCB2b2lkIGVuZENvbGxlY3Rpb24oKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkocmV2aXNp
b24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU5LDExICs1OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fY29udGFp
bnNMYXN0UXVlcmllZFJvb3QgPSBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lkIGFkZCh2b2lkKiBy
b290KQorICAgIGJvb2wgYWRkKHZvaWQqIHJvb3QpCiAgICAgewogICAgICAgICBpZiAocm9vdCA9
PSBtX2xhc3RRdWVyaWVkUm9vdCkKICAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJv
b3QgPSB0cnVlOwotICAgICAgICBtX3Jvb3RzLmFkZChyb290KTsKKyAgICAgICAgcmV0dXJuIG1f
cm9vdHMuYWRkKHJvb3QpLmlzTmV3RW50cnk7CiAgICAgfQogCiAgICAgaW50IHNpemUoKSBjb25z
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2
aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQ3LDYgKzM0NywxMSBAQCBwcml2YXRlOgog
ICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7CiB9OwogCit2b2lkIFNsb3RWaXNpdG9yOjp2aXNp
dEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgbV9pc1Zpc2l0aW5nTXV0
YXRvclN0YWNrID0gdHJ1ZTsKKyAgICB2aXNpdENoaWxkcmVuKGNlbGwpOworfQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxs
KQogewpAQCAtNDYxLDcgKzQ2Niw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25p
Y1RpbWUgdGkKICAgICAKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcmlnaHRUb1J1bik7
CiAgICAgCi0gICAgd2hpbGUgKCghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgfHwgIW1fbXV0
YXRvclN0YWNrLmlzRW1wdHkoKSkgJiYgIWhhc0VsYXBzZWQodGltZW91dCkpIHsKKyAgICB3aGls
ZSAoIWhhc0VsYXBzZWQodGltZW91dCkpIHsKICAgICAgICAgdXBkYXRlTXV0YXRvcklzU3RvcHBl
ZChsb2NrZXIpOwogICAgICAgICBpZiAoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBtX2NvbGxlY3RvclN0YWNrLnJlZmlsbCgpOwpAQCAtNDc2LDcgKzQ4MSw4IEBA
IHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGkKICAgICAgICAgICAgIG1f
aXNWaXNpdGluZ011dGF0b3JTdGFjayA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5j
ZSgpOyBtX211dGF0b3JTdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQogICAg
ICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9tdXRhdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsK
LSAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBt
X3JpZ2h0VG9SdW4uc2FmZXBvaW50KCk7CiAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsK
ICAgICB9CkBAIC00ODYsMTIgKzQ5MiwxOCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb25v
dG9uaWNUaW1lIHRpCiAKIGJvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oKQog
eworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CisgICAgcmV0
dXJuIGlzRW1wdHkoKSAmJiBkaWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcik7Cit9CisKK2Jvb2wg
U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgTG9ja0hvbGRlciYpCit7CiAg
ICAgcmV0dXJuICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwogICAgICAg
ICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAg
ICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CiB9CiAKLWJv
b2wgU2xvdFZpc2l0b3I6Omhhc1dvcmsoKQorYm9vbCBTbG90VmlzaXRvcjo6aGFzV29yayhjb25z
dCBMb2NrSG9sZGVyJikKIHsKICAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1h
cmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFy
a1N0YWNrLT5pc0VtcHR5KCk7CkBAIC01MTgsMTIgKzUzMCwxMiBAQCBTbG90VmlzaXRvcjo6U2hh
cmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFw
c2VkKHRpbWVvdXQpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWlu
UmVzdWx0OjpUaW1lZE91dDsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChkaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGRpZFJlYWNoVGVybWluYXRpb24obG9ja2VyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
bV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzV29yaygpKQorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzV29yayhsb2NrZXIpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVu
dGlsKG1faGVhcC5tX21hcmtpbmdNdXRleCwgdGltZW91dCk7CkBAIC01MzQsMTMgKzU0NiwxMyBA
QCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0CiAgICAgICAgICAgICAg
ICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBT
aGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKGRpZFJlYWNoVGVybWluYXRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoZGlk
UmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpKQogICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9t
YXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAKICAgICAgICAgICAgICAgICBt
X2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKAogICAgICAgICAgICAg
ICAgICAgICBtX2hlYXAubV9tYXJraW5nTXV0ZXgsIHRpbWVvdXQsCi0gICAgICAgICAgICAgICAg
ICAgIFt0aGlzXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzV29yaygpCisg
ICAgICAgICAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
aGFzV29yayhsb2NrZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1f
cGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdDsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICAgCkBAIC01ODksNyArNjAxLDcgQEAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWlu
UmVzdWx0IFNsb3RWaXNpdAogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAg
ICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CiAgICAgICAgIAotICAg
ICAgICBpZiAoZGlkUmVhY2hUZXJtaW5hdGlvbigpKSB7CisgICAgICAgIGlmIChkaWRSZWFjaFRl
cm1pbmF0aW9uKGxvY2tlcikpIHsKICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRp
b25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJl
c3VsdDo6RG9uZTsKICAgICAgICAgfQpAQCAtNjA1LDEzICs2MTcsMTMgQEAgdm9pZCBTbG90Vmlz
aXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBybwogICAgIAogICAgIGlmIChPcHRpb25zOjpudW1i
ZXJPZkdDTWFya2VycygpID09IDEpIHsKICAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhl
IHNoYXJlZCBIYXNoU2V0LgotICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7
CisgICAgICAgIG1fdmlzaXRDb3VudCArPSBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCku
aXNOZXdFbnRyeTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBQdXQgaW50byB0aGUg
bG9jYWwgc2V0LCBidXQgbWVyZ2Ugd2l0aCB0aGUgc2hhcmVkIG9uZSBldmVyeSBvbmNlIGluCiAg
ICAgLy8gYSB3aGlsZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbG9jYWwgc2V0cyBkb24ndCBncm93
IHRvbyBsYXJnZS4KICAgICBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7Ci0gICAgbV9v
cGFxdWVSb290cy5hZGQocm9vdCk7CisgICAgbV92aXNpdENvdW50ICs9IG1fb3BhcXVlUm9vdHMu
YWRkKHJvb3QpOwogfQogCiBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9p
ZCogcm9vdCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAzLDYgKzEwMyw4IEBA
IHB1YmxpYzoKIAogICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVzVmlzaXRlZDsgfQogICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92
aXNpdENvdW50OyB9CisgICAgCisgICAgdm9pZCBhZGRUb1Zpc2l0Q291bnQoc2l6ZV90IHZhbHVl
KSB7IG1fdmlzaXRDb3VudCArPSB2YWx1ZTsgfQogCiAgICAgdm9pZCBkb25hdGUoKTsKICAgICB2
b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5
KCkpOwpAQCAtMTUxLDYgKzE1MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRSYWNlKEpTQ2Vs
bCogY2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGws
IHJlYXNvbikpOyB9CiAgICAgdm9pZCBkaWROb3RSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpOwog
ICAgIHZvaWQgZGlkTm90UmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBk
aWROb3RSYWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24pKTsgfQorICAgIAorICAgIHZvaWQg
dmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKik7CisgICAgCisgICAgYm9vbCBkaWRSZWFj
aFRlcm1pbmF0aW9uKCk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9k
ZUVuYWJsZXI7CkBAIC0xODAsOCArMTg2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRvbmF0ZUtu
b3duUGFyYWxsZWwoKTsKICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoTWFya1N0YWNrQXJy
YXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0byk7CiAgICAgCi0gICAgYm9vbCBoYXNXb3JrKCk7
Ci0gICAgYm9vbCBkaWRSZWFjaFRlcm1pbmF0aW9uKCk7CisgICAgYm9vbCBoYXNXb3JrKGNvbnN0
IExvY2tIb2xkZXImKTsKKyAgICBib29sIGRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgTG9ja0hv
bGRlciYpOwogCiAgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKICAgICBNYXJr
U3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCShyZXZpc2lv
biAyMTA0OTYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVk
dWxlci5jcHA6MjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNwYWNlVGltZVNjaGVkdWxlci5oIgorCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworZG91YmxlIFNwYWNlVGltZVNjaGVkdWxl
cjo6RGVjaXNpb246OnRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpIGNvbnN0Cit7CisgICAgZG91
YmxlIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlID0KKyAgICAgICAgbV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZSAtIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVC
ZWdpbm5pbmc7CisgICAgCisgICAgZG91YmxlIG1heEhlYWRyb29tID0KKyAgICAgICAgbV9zY2hl
ZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCAtIG1fc2NoZWR1bGVyLT5t
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7CisgICAgCisgICAgZG91Ymxl
IGhlYWRyb29tRnVsbG5lc3MgPQorICAgICAgICBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSAv
IG1heEhlYWRyb29tOworICAgIAorICAgIC8vIGhlYWRyb29tRnVsbG5lc3MgY2FuIGJlIE5hTiBh
bmQgb3RoZXIgaW50ZXJlc3RpbmcgdGhpbmdzIGlmCisgICAgLy8gYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0cy4g
VGhpcyBjb2RlCisgICAgLy8gZGVmZW5kcyBhZ2FpbnN0IGFsbCBmbG9hdGluZyBwb2ludCBkcmFn
b25zLgorICAgIAorICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPj0gMCkpCisgICAgICAgIGhl
YWRyb29tRnVsbG5lc3MgPSAwOworICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPD0gMSkpCisg
ICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAxOworICAgIAorICAgIGRvdWJsZSBtdXRhdG9yVXRp
bGl6YXRpb24gPSAxIC0gaGVhZHJvb21GdWxsbmVzczsKKyAgICAKKyAgICAvLyBTY2FsZSB0aGUg
bXV0YXRvciB1dGlsaXphdGlvbiBpbnRvIHRoZSBwZXJtaXR0ZWQgd2luZG93LgorICAgIG11dGF0
b3JVdGlsaXphdGlvbiA9CisgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRp
b24oKSArCisgICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiAqICgKKyAgICAgICAgICAgIE9wdGlv
bnM6Om1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSAtCisgICAgICAgICAgICBPcHRpb25zOjpt
aW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkpOworICAgIAorICAgIHJldHVybiBtdXRhdG9yVXRp
bGl6YXRpb247Cit9CisKK2RvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0YXJn
ZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDEgLSB0YXJnZXRN
dXRhdG9yVXRpbGl6YXRpb24oKTsKK30KKworU2Vjb25kcyBTcGFjZVRpbWVTY2hlZHVsZXI6OkRl
Y2lzaW9uOjplbGFwc2VkSW5QZXJpb2QoKSBjb25zdAoreworICAgIHJldHVybiAobV9ub3cgLSBt
X3NjaGVkdWxlci0+bV9pbml0aWFsVGltZSkgJSBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Cit9CisK
K2RvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpwaGFzZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGVsYXBzZWRJblBlcmlvZCgpIC8gbV9zY2hlZHVsZXItPm1fcGVyaW9kOworfQor
Citib29sIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnNob3VsZEJlUmVzdW1lZCgpIGNv
bnN0Cit7CisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCisg
ICAgICAgIHJldHVybiBwaGFzZSgpIDw9IHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOworICAg
IHJldHVybiBwaGFzZSgpID4gdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKK30KKworTW9u
b3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUoKSBj
b25zdAoreworICAgIEFTU0VSVCghc2hvdWxkQmVSZXN1bWVkKCkpOworICAgIGlmIChPcHRpb25z
Ojpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQorICAgICAgICByZXR1cm4gbV9ub3cgLSBl
bGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKKyAgICByZXR1cm4gbV9u
b3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldENv
bGxlY3RvclV0aWxpemF0aW9uKCk7Cit9CisKK01vbm90b25pY1RpbWUgU3BhY2VUaW1lU2NoZWR1
bGVyOjpEZWNpc2lvbjo6dGltZVRvU3RvcCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNob3VsZEJl
UmVzdW1lZCgpKTsKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3Qo
KSkKKyAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxl
ci0+bV9wZXJpb2QgKiB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKKyAgICByZXR1cm4gbV9u
b3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKK30KKworU3Bh
Y2VUaW1lU2NoZWR1bGVyOjpTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYgaGVhcCkKKyAgICA6IG1f
aGVhcChoZWFwKQorICAgICwgbV9wZXJpb2QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhPcHRp
b25zOjpjb25jdXJyZW50R0NQZXJpb2RNUygpKSkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGVBdFRoZUJlZ2lubmluZyhoZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUpCisgICAg
LCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQoCisgICAgICAgIE9wdGlvbnM6OmNv
bmN1cnJlbnRHQ01heEhlYWRyb29tKCkgKgorICAgICAgICBzdGQ6Om1heDxkb3VibGU+KG1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZywgaGVhcC5tX21heEVkZW5TaXplKSkK
K3sKKyAgICBzbmFwUGhhc2UoKTsKK30KKwordm9pZCBTcGFjZVRpbWVTY2hlZHVsZXI6OnNuYXBQ
aGFzZSgpCit7CisgICAgbV9pbml0aWFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworfQor
CitTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uIFNwYWNlVGltZVNjaGVkdWxlcjo6Y3VycmVu
dERlY2lzaW9uKCkKK3sKKyAgICBEZWNpc2lvbiByZXN1bHQ7CisgICAgcmVzdWx0Lm1fc2NoZWR1
bGVyID0gdGhpczsKKyAgICByZXN1bHQubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9IG1faGVh
cC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOworICAgIHJlc3VsdC5tX25vdyA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjQsMTA1ICsyNCwxOTUgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiU3BhY2VUaW1lU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5oIgogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IAotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldE11dGF0b3JVdGls
aXphdGlvbigpIGNvbnN0CisvLyBUaGUgc2NoZWR1bGVyIHdpbGwgb2Z0ZW4gbWFrZSBkZWNpc2lv
bnMgYmFzZWQgb24gc3RhdGUgdGhhdCBpcyBpbiBmbHV4LiBJdCB3aWxsIGJlIGZpbmUgc28KKy8v
IGxvbmcgYXMgbXVsdGlwbGUgdXNlcyBvZiB0aGUgc2FtZSB2YWx1ZSBhbGwgc2VlIHRoZSBzYW1l
IHZhbHVlLiBXZSB3b3VsZG4ndCBnZXQgdGhpcyBmb3IgZnJlZSwKKy8vIHNpbmNlIG91ciBuZWVk
IHRvIG1vZHVsYXJpemUgdGhlIGNhbGN1bGF0aW9uIHJlc3VsdHMgaW4gYSB0ZW5kZW5jeSB0byBh
Y2Nlc3MgdGhlIHNhbWUgbXV0YWJsZQorLy8gZmllbGQgaW4gSGVhcCBtdWx0aXBsZSB0aW1lcywg
YW5kIHRvIGFjY2VzcyB0aGUgY3VycmVudCB0aW1lIG11bHRpcGxlIHRpbWVzLgorY2xhc3MgU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6U25hcHNob3QgeworcHVibGljOgorICAgIFNuYXBzaG90
KFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXImIHNjaGVkdWxlcikKKyAgICB7CisgICAgICAgIG1f
bm93ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGUgPSBzY2hlZHVsZXIuYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVJbXBsKCk7CisgICAgfQor
ICAgIAorICAgIE1vbm90b25pY1RpbWUgbm93KCkgY29uc3QgeyByZXR1cm4gbV9ub3c7IH0KKyAg
ICAKKyAgICBkb3VibGUgYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOyB9CisgICAgCitwcml2YXRlOgorICAgIE1vbm90b25p
Y1RpbWUgbV9ub3c7CisgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7Cit9Owor
CitTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyKEhl
YXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKKyAgICAsIG1fcGVyaW9kKFNlY29uZHM6OmZy
b21NaWxsaXNlY29uZHMoT3B0aW9uczo6Y29uY3VycmVudEdDUGVyaW9kTVMoKSkpCiB7Ci0gICAg
ZG91YmxlIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlID0KLSAgICAgICAgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZSAtIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVCZWdpbm5pbmc7Ci0gICAgCi0gICAgZG91YmxlIG1heEhlYWRyb29tID0KLSAgICAgICAgbV9z
Y2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCAtIG1fc2NoZWR1bGVy
LT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7Ci0gICAgCi0gICAgZG91
YmxlIGhlYWRyb29tRnVsbG5lc3MgPQotICAgICAgICBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNs
ZSAvIG1heEhlYWRyb29tOwotICAgIAotICAgIC8vIGhlYWRyb29tRnVsbG5lc3MgY2FuIGJlIE5h
TiBhbmQgb3RoZXIgaW50ZXJlc3RpbmcgdGhpbmdzIGlmCi0gICAgLy8gYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0
cy4gVGhpcyBjb2RlCi0gICAgLy8gZGVmZW5kcyBhZ2FpbnN0IGFsbCBmbG9hdGluZyBwb2ludCBk
cmFnb25zLgotICAgIAotICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPj0gMCkpCi0gICAgICAg
IGhlYWRyb29tRnVsbG5lc3MgPSAwOwotICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPD0gMSkp
Ci0gICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAxOwotICAgIAotICAgIGRvdWJsZSBtdXRhdG9y
VXRpbGl6YXRpb24gPSAxIC0gaGVhZHJvb21GdWxsbmVzczsKK30KKworU3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlcjo6flNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIoKQoreworfQorCitNdXRhdG9y
U2NoZWR1bGVyOjpTdGF0ZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpzdGF0ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc3RhdGU7Cit9CisKK3ZvaWQgU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlcjo6YmVnaW5Db2xsZWN0aW9uKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09
IE5vcm1hbCk7CisgICAgbV9zdGF0ZSA9IFN0b3BwZWQ7CisgICAgbV9zdGFydFRpbWUgPSBNb25v
dG9uaWNUaW1lOjpub3coKTsKKworICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJl
Z2lubmluZyA9IG1faGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOworICAgIG1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCA9IAorICAgICAgICBPcHRpb25zOjpjb25jdXJyZW50
R0NNYXhIZWFkcm9vbSgpICoKKyAgICAgICAgc3RkOjptYXg8ZG91YmxlPihtX2J5dGVzQWxsb2Nh
dGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcsIG1faGVhcC5tX21heEVkZW5TaXplKTsKK30KKwor
dm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpkaWRTdG9wKCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChtX3N0YXRlID09IFN0b3BwZWQgfHwgbV9zdGF0ZSA9PSBSZXN1bWVkKTsKKyAgICBt
X3N0YXRlID0gU3RvcHBlZDsKK30KKwordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjp3
aWxsUmVzdW1lKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IFN0b3BwZWQgfHwg
bV9zdGF0ZSA9PSBSZXN1bWVkKTsKKyAgICBtX3N0YXRlID0gUmVzdW1lZDsKK30KKwordm9pZCBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpkaWRFeGVjdXRlQ29uc3RyYWludHMoKQoreworICAg
IC8vIElmIHdlIGV4ZWN1dGUgY29uc3RyYWludHMsIHdlIHdhbnQgdG8gZm9yZ2l2ZSB0aGUgR0Mg
Zm9yIGFsbCBvZiB0aGUgdGltZSBpdCBoYWQgc3RvcHBlZCB0aGUKKyAgICAvLyB3b3JsZCBmb3Ig
aW4gdGhpcyBpbmNyZW1lbnQuIFRoaXMgaGFjayBpcyBlbXBpcmljYWxseSBiZXR0ZXIgdGhhbiBl
dmVyeSBvdGhlciBoZXVyaXN0aWMgSQorICAgIC8vIHRyaWVkLCBiZWNhdXNlIGl0IGp1c3QgbWVh
bnMgdGhhdCB0aGUgR0MgaXMgaGFwcHkgdG8gcGF1c2UgZm9yIGxvbmdlciB3aGVuIGl0J3MgZGVh
bGluZworICAgIC8vIHdpdGggdGhpbmdzIHRoYXQgZG9uJ3QgcGxheSB3ZWxsIHdpdGggY29uY3Vy
cmVuY3kuCisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKworTW9u
b3RvbmljVGltZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjp0aW1lVG9TdG9wKCkKK3sKKyAg
ICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vcm1hbDoKKyAgICAgICAgcmV0dXJuIE1v
bm90b25pY1RpbWU6OmluZmluaXR5KCk7CisgICAgY2FzZSBTdG9wcGVkOgorICAgICAgICByZXR1
cm4gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgY2FzZSBSZXN1bWVkOiB7CisgICAgICAgIFNu
YXBzaG90IHNuYXBzaG90KCp0aGlzKTsKKyAgICAgICAgaWYgKCFzaG91bGRCZVJlc3VtZWQoc25h
cHNob3QpKQorICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90Lm5vdygpOworICAgICAgICByZXR1
cm4gc25hcHNob3Qubm93KCkgLSBlbGFwc2VkSW5QZXJpb2Qoc25hcHNob3QpICsgbV9wZXJpb2Q7
CisgICAgfSB9CiAgICAgCi0gICAgLy8gU2NhbGUgdGhlIG11dGF0b3IgdXRpbGl6YXRpb24gaW50
byB0aGUgcGVybWl0dGVkIHdpbmRvdy4KLSAgICBtdXRhdG9yVXRpbGl6YXRpb24gPQotICAgICAg
ICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgKwotICAgICAgICBtdXRhdG9y
VXRpbGl6YXRpb24gKiAoCi0gICAgICAgICAgICBPcHRpb25zOjptYXhpbXVtTXV0YXRvclV0aWxp
emF0aW9uKCkgLQotICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlv
bigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBNb25v
dG9uaWNUaW1lKCk7Cit9CisKK01vbm90b25pY1RpbWUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
cjo6dGltZVRvUmVzdW1lKCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5v
cm1hbDoKKyAgICBjYXNlIFJlc3VtZWQ6CisgICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpu
b3coKTsKKyAgICBjYXNlIFN0b3BwZWQ6IHsKKyAgICAgICAgU25hcHNob3Qgc25hcHNob3QoKnRo
aXMpOworICAgICAgICBpZiAoc2hvdWxkQmVSZXN1bWVkKHNuYXBzaG90KSkKKyAgICAgICAgICAg
IHJldHVybiBzbmFwc2hvdC5ub3coKTsKKyAgICAgICAgcmV0dXJuIHNuYXBzaG90Lm5vdygpIC0g
ZWxhcHNlZEluUGVyaW9kKHNuYXBzaG90KSArIG1fcGVyaW9kICogY29sbGVjdG9yVXRpbGl6YXRp
b24oc25hcHNob3QpOworICAgIH0gfQogICAgIAotICAgIHJldHVybiBtdXRhdG9yVXRpbGl6YXRp
b247CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTW9ub3Rv
bmljVGltZSgpOwogfQogCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFy
Z2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKSBjb25zdAordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyOjpsb2coKQogewotICAgIHJldHVybiAxIC0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9u
KCk7CisgICAgQVNTRVJUKE9wdGlvbnM6OmxvZ0dDKCkpOworICAgIFNuYXBzaG90IHNuYXBzaG90
KCp0aGlzKTsKKyAgICBkYXRhTG9nKAorICAgICAgICAiYT0iLCBmb3JtYXQoIiUuMGxmIiwgYnl0
ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUoc25hcHNob3QpIC8gMTAyNCksICIga2IgIiwKKyAgICAg
ICAgImhmPSIsIGZvcm1hdCgiJS4zbGYiLCBoZWFkcm9vbUZ1bGxuZXNzKHNuYXBzaG90KSksICIg
IiwKKyAgICAgICAgIm11PSIsIGZvcm1hdCgiJS4zbGYiLCBtdXRhdG9yVXRpbGl6YXRpb24oc25h
cHNob3QpKSwgIiAiKTsKIH0KIAotU2Vjb25kcyBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9u
OjplbGFwc2VkSW5QZXJpb2QoKSBjb25zdAordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
OjplbmRDb2xsZWN0aW9uKCkKIHsKLSAgICByZXR1cm4gKG1fbm93IC0gbV9zY2hlZHVsZXItPm1f
aW5pdGlhbFRpbWUpICUgbV9zY2hlZHVsZXItPm1fcGVyaW9kOworICAgIG1fc3RhdGUgPSBOb3Jt
YWw7CisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIH0KIAotZG91Ymxl
IFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnBoYXNlKCkgY29uc3QKK2RvdWJsZSBTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUltcGwoKQogewot
ICAgIHJldHVybiBlbGFwc2VkSW5QZXJpb2QoKSAvIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKKyAg
ICByZXR1cm4gbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7CiB9CiAKLWJvb2wgU3Bh
Y2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6c2hvdWxkQmVSZXN1bWVkKCkgY29uc3QKK2RvdWJs
ZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZShj
b25zdCBTbmFwc2hvdCYgc25hcHNob3QpCiB7Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNo
b3VsZFJlc3VtZUZpcnN0KCkpCi0gICAgICAgIHJldHVybiBwaGFzZSgpIDw9IHRhcmdldE11dGF0
b3JVdGlsaXphdGlvbigpOwotICAgIHJldHVybiBwaGFzZSgpID4gdGFyZ2V0Q29sbGVjdG9yVXRp
bGl6YXRpb24oKTsKKyAgICByZXR1cm4gc25hcHNob3QuYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUo
KSAtIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKIH0KIAotTW9ub3Rv
bmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUoKSBjb25z
dAorZG91YmxlIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6Om1heEhlYWRyb29tKCkKIHsKLSAg
ICBBU1NFUlQoIXNob3VsZEJlUmVzdW1lZCgpKTsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9y
U2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVy
aW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci0gICAgcmV0dXJuIG1fbm93IC0gZWxhcHNl
ZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRDb2xsZWN0b3JVdGls
aXphdGlvbigpOworICAgIHJldHVybiBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQg
LSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7CiB9CiAKLU1vbm90b25p
Y1RpbWUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRvU3RvcCgpIGNvbnN0Citk
b3VibGUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6aGVhZHJvb21GdWxsbmVzcyhjb25zdCBT
bmFwc2hvdCYgc25hcHNob3QpCiB7Ci0gICAgQVNTRVJUKHNob3VsZEJlUmVzdW1lZCgpKTsKLSAg
ICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0
dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0
YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKLSAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5Q
ZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKKyAgICBkb3VibGUgcmVzdWx0ID0gYnl0
ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUoc25hcHNob3QpIC8gbWF4SGVhZHJvb20oKTsKKworICAg
IC8vIGhlYWRyb29tRnVsbG5lc3MgY2FuIGJlIE5hTiBhbmQgb3RoZXIgaW50ZXJlc3RpbmcgdGhp
bmdzIGlmCisgICAgLy8gYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6
ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0cy4gVGhpcyBjb2RlCisgICAgLy8gZGVmZW5k
cyBhZ2FpbnN0IGFsbCBmbG9hdGluZyBwb2ludCBkcmFnb25zLgorICAgIAorICAgIGlmICghKHJl
c3VsdCA+PSAwKSkKKyAgICAgICAgcmVzdWx0ID0gMDsKKyAgICBpZiAoIShyZXN1bHQgPD0gMSkp
CisgICAgICAgIHJlc3VsdCA9IDE7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1TcGFjZVRp
bWVTY2hlZHVsZXI6OlNwYWNlVGltZVNjaGVkdWxlcihIZWFwJiBoZWFwKQotICAgIDogbV9oZWFw
KGhlYXApCi0gICAgLCBtX3BlcmlvZChTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6
OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkpKQotICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZUF0VGhlQmVnaW5uaW5nKGhlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSkKLSAgICAsIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCgKLSAgICAgICAgT3B0aW9uczo6Y29uY3Vy
cmVudEdDTWF4SGVhZHJvb20oKSAqCi0gICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nLCBoZWFwLm1fbWF4RWRlblNpemUpKQorZG91
YmxlIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6Om11dGF0b3JVdGlsaXphdGlvbihjb25zdCBT
bmFwc2hvdCYgc25hcHNob3QpCiB7Ci0gICAgc25hcFBoYXNlKCk7CisgICAgZG91YmxlIG11dGF0
b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFkcm9vbUZ1bGxuZXNzKHNuYXBzaG90KTsKKyAgICAKKyAg
ICAvLyBTY2FsZSB0aGUgbXV0YXRvciB1dGlsaXphdGlvbiBpbnRvIHRoZSBwZXJtaXR0ZWQgd2lu
ZG93LgorICAgIG11dGF0b3JVdGlsaXphdGlvbiA9CisgICAgICAgIE9wdGlvbnM6Om1pbmltdW1N
dXRhdG9yVXRpbGl6YXRpb24oKSArCisgICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiAqICgKKyAg
ICAgICAgICAgIE9wdGlvbnM6Om1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSAtCisgICAgICAg
ICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkpOworICAgIAorICAgIHJl
dHVybiBtdXRhdG9yVXRpbGl6YXRpb247CiB9CiAKLXZvaWQgU3BhY2VUaW1lU2NoZWR1bGVyOjpz
bmFwUGhhc2UoKQorZG91YmxlIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmNvbGxlY3RvclV0
aWxpemF0aW9uKGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCkKIHsKLSAgICBtX2luaXRpYWxUaW1l
ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgcmV0dXJuIDEgLSBtdXRhdG9yVXRpbGl6YXRp
b24oc25hcHNob3QpOwogfQogCi1TcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uIFNwYWNlVGlt
ZVNjaGVkdWxlcjo6Y3VycmVudERlY2lzaW9uKCkKK1NlY29uZHMgU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlcjo6ZWxhcHNlZEluUGVyaW9kKGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCkKIHsKLSAg
ICBEZWNpc2lvbiByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fc2NoZWR1bGVyID0gdGhpczsKLSAgICBy
ZXN1bHQubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9IG1faGVhcC5tX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlOwotICAgIHJlc3VsdC5tX25vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAg
IHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIChzbmFwc2hvdC5ub3coKSAtIG1fc3RhcnRUaW1l
KSAlIG1fcGVyaW9kOworfQorCitkb3VibGUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6cGhh
c2UoY29uc3QgU25hcHNob3QmIHNuYXBzaG90KQoreworICAgIHJldHVybiBlbGFwc2VkSW5QZXJp
b2Qoc25hcHNob3QpIC8gbV9wZXJpb2Q7Cit9CisKK2Jvb2wgU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlcjo6c2hvdWxkQmVSZXN1bWVkKGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCkKK3sKKyAgICBy
ZXR1cm4gcGhhc2Uoc25hcHNob3QpID4gY29sbGVjdG9yVXRpbGl6YXRpb24oc25hcHNob3QpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgJKHJldmlzaW9uIDIxMDQ5
NikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmg6
MjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworCitjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXIgewor
cHVibGljOgorICAgIGNsYXNzIERlY2lzaW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fc2NoZWR1bGVyOyB9CisgICAg
ICAgIAorICAgICAgICBkb3VibGUgdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3Q7Cisg
ICAgICAgIGRvdWJsZSB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0OworICAgICAg
ICBTZWNvbmRzIGVsYXBzZWRJblBlcmlvZCgpIGNvbnN0OworICAgICAgICBkb3VibGUgcGhhc2Uo
KSBjb25zdDsKKyAgICAgICAgYm9vbCBzaG91bGRCZVJlc3VtZWQoKSBjb25zdDsKKyAgICAgICAg
TW9ub3RvbmljVGltZSB0aW1lVG9SZXN1bWUoKSBjb25zdDsKKyAgICAgICAgTW9ub3RvbmljVGlt
ZSB0aW1lVG9TdG9wKCkgY29uc3Q7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGZy
aWVuZCBjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXI7CisKKyAgICAgICAgU3BhY2VUaW1lU2NoZWR1
bGVyKiBtX3NjaGVkdWxlciB7IG51bGxwdHIgfTsKKyAgICAgICAgZG91YmxlIG1fYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGUgeyAwIH07CisgICAgICAgIE1vbm90b25pY1RpbWUgbV9ub3c7CisgICAg
fTsKKyAgICAKKyAgICAvLyBDb25zdHJ1Y3QgdGhlIHNjaGVkdWxlciBhdCB0aGUgc3RhcnQgb2Yg
YSBHQyBjeWNsZS4KKyAgICBTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYpOworICAgIAorICAgIC8v
IEZvcmNlcyB0aGUgbmV4dCBwaGFzZSB0byBzdGFydCBub3cuCisgICAgdm9pZCBzbmFwUGhhc2Uo
KTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgc2NoZWR1
bGluZyBkZWNpc2lvbiwgd2hpY2ggd2lsbCBiZSB2YWxpZCBzbyBsb25nIGFzCisgICAgLy8gU3Bh
Y2VUaW1lU2NoZWR1bGVyIGlzIGxpdmUgYW5kIHlvdSBoYXZlbid0IGNhbGxlZCBzbmFwUGhhc2Uo
KS4KKyAgICBEZWNpc2lvbiBjdXJyZW50RGVjaXNpb24oKTsKKyAgICAKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIERlY2lzaW9uOworCisgICAgSGVhcCYgbV9oZWFwOworICAgIFNlY29uZHMg
bV9wZXJpb2Q7CisgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lu
bmluZzsKKyAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kOworICAg
IE1vbm90b25pY1RpbWUgbV9pbml0aWFsVGltZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlci5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUs
NTMgKzI1LDYxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL01vbm90b25pY1Rp
bWUuaD4KKyNpbmNsdWRlICJNdXRhdG9yU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSA8d3RmL1NlY29u
ZHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7CiAKLWNsYXNzIFNwYWNlVGlt
ZVNjaGVkdWxlciB7CisvLyBUaGUgSlNDIGNvbmN1cnJlbnQgR0Mgc29tZXRpbWVzIHN0b3BzIHRo
ZSB3b3JsZCBpbiBvcmRlciB0byBzdGF5IGFoZWFkIG9mIGl0LiBUaGVzZSBkZWxpYmVyYXRlLAor
Ly8gc3ludGhldGljIHBhdXNlcyBlbnN1cmUgdGhhdCB0aGUgR0Mgd29uJ3QgaGF2ZSB0byBkbyBv
bmUgaHVnZSBwYXVzZSBpbiBvcmRlciB0byBjYXRjaCB1cCB0byB0aGUKKy8vIHJldHJlYXRpbmcg
d2F2ZWZyb250LiBUaGUgc2NoZWR1bGVyIGlzIGNhbGxlZCAic3BhY2UtdGltZSIgYmVjYXVzZSBp
dCBsaW5rcyB0aGUgYW1vdW50IG9mIHRpbWUKKy8vIHRoYXQgdGhlIHdvcmxkIGlzIHBhdXNlZCBm
b3IgdG8gdGhlIGFtb3VudCBvZiBzcGFjZSB0aGF0IHRoZSB3b3JsZCBhbGxvY2F0ZWQgc2luY2Ug
dGhlIEdDIGN5Y2xlCisvLyBiZWdhbi4KKworY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ciA6IHB1YmxpYyBNdXRhdG9yU2NoZWR1bGVyIHsKIHB1YmxpYzoKLSAgICBjbGFzcyBEZWNpc2lv
biB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISFtX3NjaGVkdWxlcjsgfQotICAgICAgICAKLSAgICAgICAgZG91YmxlIHRhcmdl
dE11dGF0b3JVdGlsaXphdGlvbigpIGNvbnN0OwotICAgICAgICBkb3VibGUgdGFyZ2V0Q29sbGVj
dG9yVXRpbGl6YXRpb24oKSBjb25zdDsKLSAgICAgICAgU2Vjb25kcyBlbGFwc2VkSW5QZXJpb2Qo
KSBjb25zdDsKLSAgICAgICAgZG91YmxlIHBoYXNlKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgc2hv
dWxkQmVSZXN1bWVkKCkgY29uc3Q7Ci0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1l
KCkgY29uc3Q7Ci0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvU3RvcCgpIGNvbnN0OwotICAg
ICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgU3BhY2VUaW1lU2NoZWR1
bGVyOwotCi0gICAgICAgIFNwYWNlVGltZVNjaGVkdWxlciogbV9zY2hlZHVsZXIgeyBudWxscHRy
IH07Ci0gICAgICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIHsgMCB9OwotICAg
ICAgICBNb25vdG9uaWNUaW1lIG1fbm93OwotICAgIH07Ci0gICAgCi0gICAgLy8gQ29uc3RydWN0
IHRoZSBzY2hlZHVsZXIgYXQgdGhlIHN0YXJ0IG9mIGEgR0MgY3ljbGUuCi0gICAgU3BhY2VUaW1l
U2NoZWR1bGVyKEhlYXAmKTsKLSAgICAKLSAgICAvLyBGb3JjZXMgdGhlIG5leHQgcGhhc2UgdG8g
c3RhcnQgbm93LgotICAgIHZvaWQgc25hcFBoYXNlKCk7Ci0gICAgCi0gICAgLy8gUmV0dXJucyBh
IHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IHNjaGVkdWxpbmcgZGVjaXNpb24sIHdoaWNoIHdpbGwg
YmUgdmFsaWQgc28gbG9uZyBhcwotICAgIC8vIFNwYWNlVGltZVNjaGVkdWxlciBpcyBsaXZlIGFu
ZCB5b3UgaGF2ZW4ndCBjYWxsZWQgc25hcFBoYXNlKCkuCi0gICAgRGVjaXNpb24gY3VycmVudERl
Y2lzaW9uKCk7CisgICAgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcihIZWFwJik7CisgICAgflNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIoKTsKKyAgICAKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0
IG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgYmVnaW5Db2xsZWN0aW9uKCkgb3ZlcnJpZGU7Cisg
ICAgCisgICAgdm9pZCBkaWRTdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsUmVzdW1lKCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBkaWRFeGVjdXRlQ29uc3RyYWludHMoKSBvdmVycmlkZTsKKyAg
ICAKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBvdmVycmlkZTsKKyAgICBNb25vdG9u
aWNUaW1lIHRpbWVUb1Jlc3VtZSgpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgbG9nKCkgb3Zl
cnJpZGU7CisgICAgCisgICAgdm9pZCBlbmRDb2xsZWN0aW9uKCkgb3ZlcnJpZGU7CiAgICAgCiBw
cml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBEZWNpc2lvbjsKLQorICAgIGNsYXNzIFNuYXBzaG90
OworICAgIGZyaWVuZCBjbGFzcyBTbmFwc2hvdDsKKyAgICAKKyAgICBkb3VibGUgYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGVJbXBsKCk7CisgICAgCisgICAgZG91YmxlIGJ5dGVzU2luY2VCZWdpbm5p
bmdPZkN5Y2xlKGNvbnN0IFNuYXBzaG90Jik7CisgICAgZG91YmxlIG1heEhlYWRyb29tKCk7Cisg
ICAgZG91YmxlIGhlYWRyb29tRnVsbG5lc3MoY29uc3QgU25hcHNob3QmKTsKKyAgICBkb3VibGUg
bXV0YXRvclV0aWxpemF0aW9uKGNvbnN0IFNuYXBzaG90Jik7CisgICAgZG91YmxlIGNvbGxlY3Rv
clV0aWxpemF0aW9uKGNvbnN0IFNuYXBzaG90Jik7CisgICAgU2Vjb25kcyBlbGFwc2VkSW5QZXJp
b2QoY29uc3QgU25hcHNob3QmKTsKKyAgICBkb3VibGUgcGhhc2UoY29uc3QgU25hcHNob3QmKTsK
KyAgICBib29sIHNob3VsZEJlUmVzdW1lZChjb25zdCBTbmFwc2hvdCYpOworICAgIAogICAgIEhl
YXAmIG1faGVhcDsKICAgICBTZWNvbmRzIG1fcGVyaW9kOwotICAgIGRvdWJsZSBtX2J5dGVzQWxs
b2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7Ci0gICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGVBdFRoZUVuZDsKLSAgICBNb25vdG9uaWNUaW1lIG1faW5pdGlhbFRpbWU7Cisg
ICAgU3RhdGUgbV9zdGF0ZSB7IE5vcm1hbCB9OworICAgIAorICAgIGRvdWJsZSBtX2J5dGVzQWxs
b2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcgeyAwIH07CisgICAgZG91YmxlIG1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCB7IDAgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fc3Rh
cnRUaW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIxMDQ5
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwxMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3Bh
Y2VUaW1lU2NoZWR1bGVyLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0TXV0
YXRvclV0aWxpemF0aW9uKCkgY29uc3QKLXsKLSAgICBkb3VibGUgYnl0ZXNTaW5jZUJlZ2lubmlu
Z09mQ3ljbGUgPQotICAgICAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC0gbV9zY2hlZHVs
ZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICAKLSAgICBk
b3VibGUgbWF4SGVhZHJvb20gPQotICAgICAgICBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZUF0VGhlRW5kIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGVBdFRoZUJlZ2lubmluZzsKLSAgICAKLSAgICBkb3VibGUgaGVhZHJvb21GdWxsbmVzcyA9Ci0g
ICAgICAgIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlIC8gbWF4SGVhZHJvb207Ci0gICAgCi0g
ICAgLy8gaGVhZHJvb21GdWxsbmVzcyBjYW4gYmUgTmFOIGFuZCBvdGhlciBpbnRlcmVzdGluZyB0
aGluZ3MgaWYKLSAgICAvLyBieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlz
IHplcm8uIFdlIHNlZSB0aGF0IGluIGRlYnVnIHRlc3RzLiBUaGlzIGNvZGUKLSAgICAvLyBkZWZl
bmRzIGFnYWluc3QgYWxsIGZsb2F0aW5nIHBvaW50IGRyYWdvbnMuCi0gICAgCi0gICAgaWYgKCEo
aGVhZHJvb21GdWxsbmVzcyA+PSAwKSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDA7Ci0g
ICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA8PSAxKSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVz
cyA9IDE7Ci0gICAgCi0gICAgZG91YmxlIG11dGF0b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFkcm9v
bUZ1bGxuZXNzOwotICAgIAotICAgIC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGlu
dG8gdGhlIHBlcm1pdHRlZCB3aW5kb3cuCi0gICAgbXV0YXRvclV0aWxpemF0aW9uID0KLSAgICAg
ICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpICsKLSAgICAgICAgbXV0YXRv
clV0aWxpemF0aW9uICogKAotICAgICAgICAgICAgT3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGls
aXphdGlvbigpIC0KLSAgICAgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRp
b24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIG11dGF0b3JVdGlsaXphdGlvbjsKLX0KLQotZG91Ymxl
IFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMSAtIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwot
fQotCi1TZWNvbmRzIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OmVsYXBzZWRJblBlcmlv
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtX25vdyAtIG1fc2NoZWR1bGVyLT5tX2luaXRpYWxU
aW1lKSAlIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKLX0KLQotZG91YmxlIFNwYWNlVGltZVNjaGVk
dWxlcjo6RGVjaXNpb246OnBoYXNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxhcHNlZEluUGVy
aW9kKCkgLyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci19Ci0KLWJvb2wgU3BhY2VUaW1lU2NoZWR1
bGVyOjpEZWNpc2lvbjo6c2hvdWxkQmVSZXN1bWVkKCkgY29uc3QKLXsKLSAgICBpZiAoT3B0aW9u
czo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIHBoYXNlKCkg
PD0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIHBoYXNlKCkgPiB0YXJn
ZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOwotfQotCi1Nb25vdG9uaWNUaW1lIFNwYWNlVGltZVNj
aGVkdWxlcjo6RGVjaXNpb246OnRpbWVUb1Jlc3VtZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFz
aG91bGRCZVJlc3VtZWQoKSk7Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3Vt
ZUZpcnN0KCkpCi0gICAgICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9z
Y2hlZHVsZXItPm1fcGVyaW9kOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgp
ICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsK
LX0KLQotTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9T
dG9wKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlmIChP
cHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gbV9u
b3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldE11
dGF0b3JVdGlsaXphdGlvbigpOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgp
ICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOwotfQotCi1TcGFjZVRpbWVTY2hlZHVsZXI6OlNwYWNl
VGltZVNjaGVkdWxlcihIZWFwJiBoZWFwKQotICAgIDogbV9oZWFwKGhlYXApCi0gICAgLCBtX3Bl
cmlvZChTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1Blcmlv
ZE1TKCkpKQotICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKGhl
YXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGVBdFRoZUVuZCgKLSAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20o
KSAqCi0gICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0
VGhlQmVnaW5uaW5nLCBoZWFwLm1fbWF4RWRlblNpemUpKQotewotICAgIHNuYXBQaGFzZSgpOwot
fQotCi12b2lkIFNwYWNlVGltZVNjaGVkdWxlcjo6c25hcFBoYXNlKCkKLXsKLSAgICBtX2luaXRp
YWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci19Ci0KLVNwYWNlVGltZVNjaGVkdWxlcjo6
RGVjaXNpb24gU3BhY2VUaW1lU2NoZWR1bGVyOjpjdXJyZW50RGVjaXNpb24oKQotewotICAgIERl
Y2lzaW9uIHJlc3VsdDsKLSAgICByZXN1bHQubV9zY2hlZHVsZXIgPSB0aGlzOwotICAgIHJlc3Vs
dC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGU7Ci0gICAgcmVzdWx0Lm1fbm93ID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oCShyZXZpc2lvbiAyMTA0
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvTW9ub3Rv
bmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBIZWFwOwotCi1jbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXIgewotcHVibGljOgotICAg
IGNsYXNzIERlY2lzaW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fc2NoZWR1bGVyOyB9Ci0gICAgICAgIAotICAgICAg
ICBkb3VibGUgdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJs
ZSB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0OwotICAgICAgICBTZWNvbmRzIGVs
YXBzZWRJblBlcmlvZCgpIGNvbnN0OwotICAgICAgICBkb3VibGUgcGhhc2UoKSBjb25zdDsKLSAg
ICAgICAgYm9vbCBzaG91bGRCZVJlc3VtZWQoKSBjb25zdDsKLSAgICAgICAgTW9ub3RvbmljVGlt
ZSB0aW1lVG9SZXN1bWUoKSBjb25zdDsKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9w
KCkgY29uc3Q7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBT
cGFjZVRpbWVTY2hlZHVsZXI7Ci0KLSAgICAgICAgU3BhY2VUaW1lU2NoZWR1bGVyKiBtX3NjaGVk
dWxlciB7IG51bGxwdHIgfTsKLSAgICAgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGUgeyAwIH07Ci0gICAgICAgIE1vbm90b25pY1RpbWUgbV9ub3c7Ci0gICAgfTsKLSAgICAKLSAg
ICAvLyBDb25zdHJ1Y3QgdGhlIHNjaGVkdWxlciBhdCB0aGUgc3RhcnQgb2YgYSBHQyBjeWNsZS4K
LSAgICBTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYpOwotICAgIAotICAgIC8vIEZvcmNlcyB0aGUg
bmV4dCBwaGFzZSB0byBzdGFydCBub3cuCi0gICAgdm9pZCBzbmFwUGhhc2UoKTsKLSAgICAKLSAg
ICAvLyBSZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGluZyBkZWNpc2lv
biwgd2hpY2ggd2lsbCBiZSB2YWxpZCBzbyBsb25nIGFzCi0gICAgLy8gU3BhY2VUaW1lU2NoZWR1
bGVyIGlzIGxpdmUgYW5kIHlvdSBoYXZlbid0IGNhbGxlZCBzbmFwUGhhc2UoKS4KLSAgICBEZWNp
c2lvbiBjdXJyZW50RGVjaXNpb24oKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNz
IERlY2lzaW9uOwotCi0gICAgSGVhcCYgbV9oZWFwOwotICAgIFNlY29uZHMgbV9wZXJpb2Q7Ci0g
ICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICBk
b3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kOwotICAgIE1vbm90b25pY1Rp
bWUgbV9pbml0aWFsVGltZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNo
cm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9y
U2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxl
cjo6U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKCkKK3sKK30KKworU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjp+U3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyKCkKK3sKK30KKworTXV0YXRvclNjaGVkdWxlcjo6U3RhdGUg
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjpzdGF0ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc3RhdGU7Cit9CisKK3ZvaWQgU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyOjpiZWdpbkNvbGxlY3Rpb24oKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KG1fc3RhdGUgPT0gTm9ybWFsKTsKKyAgICBtX3N0YXRlID0gU3RvcHBlZDsKK30KKworTW9ub3Rv
bmljVGltZSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1N0
b3AoKQoreworICAgIHJldHVybiBtX3N0YXRlID09IE5vcm1hbCA/IE1vbm90b25pY1RpbWU6Omlu
ZmluaXR5KCkgOiBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKworTW9ub3RvbmljVGltZSBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1Jlc3VtZSgpCit7Cisg
ICAgcmV0dXJuIG1fc3RhdGUgPT0gTm9ybWFsID8gTW9ub3RvbmljVGltZTo6bm93KCkgOiBNb25v
dG9uaWNUaW1lOjppbmZpbml0eSgpOworfQorCit2b2lkIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlcjo6ZW5kQ29sbGVjdGlvbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV9zdGF0ZSA9PSBTdG9wcGVkKTsKKyAgICBtX3N0YXRlID0gTm9ybWFsOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk11dGF0b3JTY2hlZHVsZXIuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKKy8vIFRoZSBKU0MgY29uY3VycmVudCBHQyByZWxpZXMgb24gc3RvcHBpbmcgdGhl
IHdvcmxkIHRvIHN0YXkgYWhlYWQgb2YgdGhlIHJldHJlYXRpbmcgd2F2ZWZyb250LgorLy8gSXQg
c28gaGFwcGVucyB0aGF0IHRoZSBzYW1lIEFQSSBjYW4gYmUgcmV1c2VkIHRvIGltcGxlbWVudCBh
IG5vbi1jb25jdXJyZW50IEdDIG1vZGUsIHdoaWNoIHdlCisvLyB1c2Ugb24gcGxhdGZvcm1zIHRo
YXQgZG9uJ3Qgc3VwcG9ydCB0aGUgR0MncyBhdG9taWNpdHkgcHJvdG9jb2xzLiBUaGF0IG1lYW5z
IGFueXRoaW5nIG90aGVyCisvLyB0aGFuIFg4Ni02NCBhbmQgQVJNNjQuIFRoaXMgc2NoZWR1bGVy
IGlzIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIGNvbmN1cnJlbnQgR0MncworLy8gU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlci4gSXQgdGVsbHMgdGhlIEdDIHRvIG5ldmVyIHJlc3VtZSB0
aGUgd29ybGQgb25jZSB0aGUgR0MgY3ljbGUgYmVnaW5zLgorCitjbGFzcyBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIgOiBwdWJsaWMgTXV0YXRvclNjaGVkdWxlciB7Citw
dWJsaWM6CisgICAgU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKCk7Cisg
ICAgflN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcigpOworICAgIAorICAg
IFN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBiZWdpbkNvbGxl
Y3Rpb24oKSBvdmVycmlkZTsKKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBv
dmVycmlkZTsKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIG92ZXJyaWRlOworICAg
IAorICAgIHZvaWQgZW5kQ29sbGVjdGlvbigpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFN0
YXRlIG1fc3RhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgVmlzaXRpbmdUaW1lb3V0IHsKK3B1YmxpYzoKKyAgICBWaXNp
dGluZ1RpbWVvdXQoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmlzaXRpbmdUaW1lb3V0KFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBib29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1l
IHRpbWVvdXQpCisgICAgICAgIDogbV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0aGlu
ZykKKyAgICAgICAgLCBtX3Zpc2l0Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENvdW50KCkpCisg
ICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzaXpl
X3QgdmlzaXRDb3VudChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB2aXNpdG9yLnZpc2l0Q291bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9yZTsKKyAgICB9
CisKKyAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRDb3Vu
dCh2aXNpdG9yKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzaG91bGRUaW1lT3V0KFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRo
aW5nKHZpc2l0b3IpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07CisgICAgc2l6ZV90
IG1fdmlzaXRDb3VudEJlZm9yZSB7IDAgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw4ICsyMDIsNiBAQCB0
eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGRvdWJsZSwgbWF4aW11bU11
dGF0b3JVdGlsaXphdGlvbiwgMC43LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwg
Y29uY3VycmVudEdDTWF4SGVhZHJvb20sIDEuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihk
b3VibGUsIGNvbmN1cnJlbnRHQ1BlcmlvZE1TLCAyLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2
KGJvb2wsIGNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0LCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCi0gICAgdihkb3VibGUsIGNvbGxlY3RvclBlcm1pdHRlZElkbGVSYXRpbywgMCwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40LCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KHVuc2lnbmVkLCBsYXJnZUFsbG9jYXRpb25DdXRvZmYs
IDEwMDAwMCwgTm9ybWFsLCBudWxscHRyKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298321</attachid>
            <date>2017-01-08 15:46:06 -0800</date>
            <delta_ts>2017-01-09 12:57:06 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>151830</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0OSBA
QAorMjAxNy0wMS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgdGhlIGNvbGxlY3RvcidzIGZpeHBvaW50IHNtYXJ0IGFib3V0IHNjaGVkdWxpbmcgd29y
aworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1OTEw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBQcmlvciB0byB0aGlzIGNoYW5nZSwgZXZlcnkgdGltZSB0aGUgR0Mgd291bGQgcnVuIGFueSBj
b25zdHJhaW50cyBpbiBtYXJrVG9GaXhwb2ludCwgaXQKKyAgICAgICAgd291bGQgcnVuIGFsbCBv
ZiB0aGUgY29uc3RyYWludHMuIEl0IHdvdWxkIGFsd2F5cyBydW4gdGhlbSBpbiB0aGUgc2FtZSBv
cmRlci4gVGhhdCBtZWFucworICAgICAgICB0aGF0IHNvIGxvbmcgYXMgYW55IG9uZSBjb25zdHJh
aW50IHdhcyBnZW5lcmF0aW5nIG5ldyB3b3JrLCB3ZSdkIHBheSB0aGUgcHJpY2Ugb2YgYWxsCisg
ICAgICAgIGNvbnN0cmFpbnRzLiBUaGlzIGlzIHVzdWFsbHkgT0sgYmVjYXVzZSBtb3N0IGNvbnN0
cmFpbnRzIGFyZSBjaGVhcCBidXQgaXQgYXJ0aWZpY2lhbGx5CisgICAgICAgIGluZmxhdGVzIHRo
ZSBjb3N0IG9mIHNsb3cgY29uc3RyYWludHMgLSBlc3BlY2lhbGx5IG9uZXMgdGhhdCBhcmUgZXhw
ZW5zaXZlIGJ1dCB1c3VhbGx5CisgICAgICAgIGdlbmVyYXRlIG5vIG5ldyB3b3JrLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBwYXRjaCByZWRvZXMgaG93IHRoZSBHQyBydW5zIGNvbnN0cmFpbnRz
IGJ5IGFwcGx5aW5nIGlkZWFzIGZyb20gZGF0YSBmbG93IGFuYWx5c2lzLgorICAgICAgICBUaGUg
R0Mgbm93IGJ1aWxkcyBhIE1hcmtpbmdDb25zdHJhaW50U2V0IHdoZW4gaXQgYm9vdHMgdXAsIGFu
ZCB0aGlzIGNvbnRhaW5zIGFsbCBvZiB0aGUKKyAgICAgICAgY29uc3RyYWludHMgYXMgd2VsbCBh
cyBzb21lIG1ldGEtZGF0YSBhYm91dCB0aGVtLiBOb3csIG1hcmtUb0ZpeHBvaW50IGp1c3QgY2Fs
bHMgaW50bworICAgICAgICBNYXJraW5nQ29uc3RyYWludFNldCB0byBleGVjdXRlIGNvbnN0cmFp
bnRzLiBCZWNhdXNlIGNvbnN0cmFpbnQgZXhlY3V0aW9uIGFuZCBzY2hlZHVsaW5nCisgICAgICAg
IG5lZWQgdG8gYmUgYXdhcmUgb2YgZWFjaCBvdGhlciwgSSByZXdyb3RlIG1hcmtUb0ZpeHBvaW50
IGluIHN1Y2ggYSB3YXkgdGhhdCBpdCdzIG1vcmUKKyAgICAgICAgb2J2aW91cyBob3cgdGhlIEdD
IGdvZXMgYmV0d2VlbiBjb25zdHJhaW50IHNvbHZpbmcsIG1hcmtpbmcgd2l0aCBzdG9wcGVkIG11
dGF0b3IsIGFuZAorICAgICAgICBtYXJraW5nIHdpdGggcmVzdW1lZCBtdXRhdG9yLiBUaGlzIGFs
c28gY2hhbmdlcyB0aGUgc2NoZWR1bGVyIEFQSSBpbiBzdWNoIGEgd2F5IHRoYXQgYQorICAgICAg
ICBzeW5jaHJvbm91cyBzdG9wLXRoZS13b3JsZCBjb2xsZWN0aW9uIG5vIGxvbmdlciBuZWVkcyB0
byBkbyBmYWtlIHN0b3AvcmVzdW1lIC0gaW5zdGVhZCB3ZQorICAgICAgICBqdXN0IHN3YXAgdGhl
IHNwYWNlLXRpbWUgc2NoZWR1bGVyIGZvciB0aGUgc3RvcC10aGUtd29ybGQgc2NoZWR1bGVyLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIGJpZyBzdHJlYW1saW5pbmcgb2YgdGhlIEdDLiBU
aGlzIGlzIGEgc3BlZWQtdXAgaW4gR0MtaGVhdnkgdGVzdHMgYmVjYXVzZSB3ZQorICAgICAgICBu
b3cgZXhlY3V0ZSBtb3N0IGNvbnN0cmFpbnRzIGV4YWN0bHkgdHdpY2UgcmVnYXJkbGVzcyBvZiBo
b3cgbWFueSB0b3RhbCBmaXhwb2ludAorICAgICAgICBpdGVyYXRpb25zIHdlIGRvLiBOb3csIHdo
ZW4gd2UgcnVuIG91dCBvZiBtYXJraW5nIHdvcmssIHRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxs
IGp1c3QKKyAgICAgICAgcnVuIHRoZSBjb25zdHJhaW50IHRoYXQgaXMgbW9zdCBsaWtlbHkgdG8g
Z2VuZXJhdGUgbmV3IHZpc2l0aW5nIHdvcmssIGFuZCBpZiBpdCBkb2VzCisgICAgICAgIGdlbmVy
YXRlIHdvcmssIHRoZW4gdGhlIEdDIG5vdyBnb2VzIGJhY2sgdG8gbWFya2luZy4gQmVmb3JlLCBp
dCB3b3VsZCBydW4gKmFsbCoKKyAgICAgICAgY29uc3RyYWludHMgYW5kIHRoZW4gZ28gYmFjayB0
byBtYXJraW5nLiBUaGUgY29uc3RyYWludCBzb2x2ZXIgaXMgYXJtZWQgd2l0aCB0aHJlZQorICAg
ICAgICBpbmZvcm1hdGlvbiBzaWduYWxzIHRoYXQgaXQgdXNlcyB0byBzb3J0IHRoZSBjb25zdHJh
aW50cyBpbiBvcmRlciBvZiBkZXNjZW5kaW5nIGxpa2VsaWhvb2QKKyAgICAgICAgdG8gZ2VuZXJh
dGUgbmV3IG1hcmtpbmcgd29yay4gVGhlbiBpdCBydW5zIHRoZW0gaW4gdGhhdCBvcmRlciB1bnRp
bCBpdCB0aGVyZSBpcyBuZXcKKyAgICAgICAgbWFya2luZyB3b3JrLiBUaGUgc2lnbmFscyBhcmU6
CisgICAgICAgIAorICAgICAgICAxKSBXaGV0aGVyIHRoZSBjb25zdHJhaW50IGlzIGdyZXllZCBi
eSBtYXJraW5nIG9yIGV4ZWN1dGlvbi4gV2UgY2FsbCB0aGlzIHRoZSB2b2xhdGlsaXR5CisgICAg
ICAgICAgIG9mIHRoZSBjb25zdHJhaW50LiBGb3IgZXhhbXBsZSwgd2VhayByZWZlcmVuY2UgY29u
c3RyYWludHMgaGF2ZSBHcmV5ZWRCeU1hcmtpbmcgYXMKKyAgICAgICAgICAgdGhlaXIgdm9sYXRp
bGl0eSBiZWNhdXNlIHRoZXkgYXJlIG1vc3QgbGlrZWx5IHRvIGhhdmUgc29tZXRoaW5nIHRvIHNh
eSBhZnRlciB3ZSd2ZSBkb25lCisgICAgICAgICAgIHNvbWUgbWFya2luZy4gT24gdGhlIG90aGVy
IGhhbmQsIGNvbnNlcnZhdGl2ZSByb290cyBoYXZlIEdyZXllZEJ5RXhlY3V0aW9uIGFzIHRoZWly
CisgICAgICAgICAgIHZvbGF0aWxpdHkgYmVjYXVzZSB0aGV5IHdpbGwgZ2l2ZSBuZXcgaW5mb3Jt
YXRpb24gYW55dGltZSB3ZSBsZXQgdGhlIG11dGF0b3IgcnVuLiBUaGUKKyAgICAgICAgICAgY29u
c3RyYWludCBzb2x2ZXIgd2lsbCBvbmx5IHJ1biBHcmV5ZWRCeUV4ZWN1dGlvbiBjb25zdHJhaW50
cyBhcyByb290cyBhbmQgYWZ0ZXIgdGhlCisgICAgICAgICAgIEdyZXllZEJ5TWFya2luZyBjb25z
dHJhaW50cyBnbyBzaWxlbnQuIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGRvbid0IHRyeSB0byBzY2Fu
CisgICAgICAgICAgIGNvbnNlcnZhdGl2ZSByb290cyBldmVyeSB0aW1lIHdlIG5lZWQgdG8gcmUt
cnVuIHdlYWsgcmVmZXJlbmNlcyBhbmQgdmljZS12ZXJzYS4KKyAgICAgICAgICAgCisgICAgICAg
ICAgIEFub3RoZXIgd2F5IHRvIGxvb2sgYXQgaXQgaXMgdGhhdCB0aGUgY29uc3RyYWludCBzb2x2
ZXIgdHJpZXMgdG8gcHJlZGljdCBpZiB0aGUKKyAgICAgICAgICAgd2F2ZWZyb250IGlzIGFkdmFu
Y2luZyBvciByZXRyZWF0aW5nLiBUaGUgd2F2ZWZyb250IGlzIGFsbW9zdCBjZXJ0YWlubHkgYWR2
YW5jaW5nIHNvCisgICAgICAgICAgIGxvbmcgYXMgdGhlIG1hcmsgc3RhY2tzIGFyZSBub24tZW1w
dHkgb3Igc28gbG9uZyBhcyBhdCBsZWFzdCBvbmUgb2YgdGhlIEdyZXllZEJ5TWFya2luZworICAg
ICAgICAgICBjb25zdHJhaW50cyBpcyBzdGlsbCBwcm9kdWNpbmcgd29yay4gT3RoZXJ3aXNlIHRo
ZSB3YXZlZnJvbnQgaXMgYWxtb3N0IGNlcnRhaW5seQorICAgICAgICAgICByZXRyZWF0aW5nLiBJ
dCdzIG1vc3QgcHJvZml0YWJsZSB0byBydW4gR3JleWVkQnlNYXJraW5nIGNvbnN0cmFpbnRzIHdo
ZW4gdGhlIHdhdmVmcm9udAorICAgICAgICAgICBpcyBhZHZhbmNpbmcsIGFuZCBtb3N0IHByb2Zp
dGFibGUgdG8gcnVuIEdyZXllZEJ5RXhlY3V0aW9uIGNvbnN0cmFpbnRzIHdoZW4gdGhlCisgICAg
ICAgICAgIHdhdmVmcm9udCBpcyByZXRyZWF0aW5nLgorICAgICAgICAgICAKKyAgICAgICAgICAg
V2UgdXNlIHRoZSBwcmVkaWN0ZWQgd2F2ZWZyb250IGRpcmVjdGlvbiBhbmQgdGhlIHZvbGF0aWxp
dHkgb2YgY29uc3RyYWludHMgYXMgYQorICAgICAgICAgICBmaXJzdC1vcmRlciBzaWduYWwgb2Yg
Y29uc3RyYWludCBwcm9maXRhYmlsaXR5LgorICAgICAgICAKKyAgICAgICAgMikgSG93IG11Y2gg
dmlzaXRpbmcgd29yayB3YXMgY3JlYXRlZCB0aGUgbGFzdCB0aW1lIHRoZSBjb25zdHJhaW50IHJh
bi4gVGhlIHNvbHZlcgorICAgICAgICAgICByZW1lbWJlcnMgdGhlIGxhc3RWaXNpdENvdW50LCBh
bmQgdXNlcyBpdCB0byBwcmVkaWN0IGhvdyBtdWNoIHdvcmsgdGhlIGNvbnN0cmFpbnQgd2lsbAor
ICAgICAgICAgICBnZW5lcmF0ZSBuZXh0IHRpbWUuIEluIHByYWN0aWNlIHRoaXMgbWVhbnMgd2Ug
d2lsbCBrZWVwIHJlLXJ1bm5pbmcgdGhlIG9uZSBpbnRlcmVzdGluZworICAgICAgICAgICBjb25z
dHJhaW50IHVudGlsIGl0IHNodXRzIHVwLgorICAgICAgICAKKyAgICAgICAgMykgT3B0aW9uYWwg
d29yayBwcmVkaWN0b3JzIGZvciBzb21lIGNvbnN0cmFpbnRzLiBUaGUgY29uc3RyYWludCB0aGF0
IHNodWZmbGVzIHRoZSBtdXRhdG9yCisgICAgICAgICAgIG1hcmsgc3RhY2sgaW50byB0aGUgbWFp
biBTbG90VmlzaXRvcidzIG11dGF0b3IgbWFyayBzdGFjayBhbHdheXMga25vd3MgZXhhY3RseSBo
b3cgbXVjaAorICAgICAgICAgICB3b3JrIGl0IHdpbGwgY3JlYXRlLgorICAgICAgICAgICAKKyAg
ICAgICAgICAgVGhlIHN1bSBvZiAoMikgYW5kICgzKSBhcmUgdXNlZCBhcyBhIHNlY29uZC1vcmRl
ciBzaWduYWwgb2YgY29uc3RyYWludCBwcm9maXRhYmlsaXR5LgorICAgICAgICAKKyAgICAgICAg
VGhlIGNvbnN0cmFpbnQgc29sdmVyIHdpbGwgYWx3YXlzIHJ1biBhbGwgb2YgdGhlIEdyZXllZEJ5
RXhlY3V0aW9uIGNvbnN0cmFpbnRzIGF0IEdDCisgICAgICAgIHN0YXJ0LCBzaW5jZSB0aGVzZSBk
b3VibGUgYXMgdGhlIEdDJ3Mgcm9vdHMuIFRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxsIGFsd2F5
cyBydW4gYWxsIG9mCisgICAgICAgIHRoZSBHcmV5ZWRCeU1hcmtpbmcgY29uc3RyYWludHMgdGhl
IGZpcnN0IHRpbWUgdGhhdCBtYXJraW5nIHN0YWxscy4gT3RoZXIgdGhhbiB0aGF0LCB0aGUKKyAg
ICAgICAgc29sdmVyIHdpbGwga2VlcCBydW5uaW5nIGNvbnN0cmFpbnRzLCBzb3J0ZWQgYWNjb3Jk
aW5nIHRvIHRoZWlyIGxpa2VsaWhvb2QgdG8gY3JlYXRlIHdvcmssCisgICAgICAgIHVudGlsIGVp
dGhlciB3b3JrIGlzIGNyZWF0ZWQgb3Igd2UgcnVuIG91dCBvZiBjb25zdHJhaW50cyB0byBydW4u
IEdDIHRlcm1pbmF0aW9uIGhhcHBlbnMKKyAgICAgICAgd2hlbiB3ZSBydW4gb3V0IG9mIGNvbnN0
cmFpbnRzIHRvIHJ1bi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbmV3IGluZnJhc3RydWN0dXJl
IG1lYW5zIHRoYXQgd2UgaGF2ZSBhIG11Y2ggYmV0dGVyIGNoYW5jZSBvZiBkZWFsaW5nIHdpdGgg
d29yc3QtY2FzZQorICAgICAgICBET00gcGF0aG9sb2dpZXMuIElmIHdlIGNhbiBpbnRlbGxpZ2Vu
dGx5IGZhY3RvciBkaWZmZXJlbnQgZXZpbCBET00gdGhpbmdzIGludG8gZGlmZmVyZW50CisgICAg
ICAgIGNvbnN0cmFpbnRzIHdpdGggdGhlIHJpZ2h0IHdvcmsgcHJlZGljdGlvbnMgdGhlbiB0aGlz
IGNvdWxkIHJlZHVjZSB0aGUgY29zdCBvZiB0aG9zZSBET00KKyAgICAgICAgdGhpbmdzIGJ5IGEg
ZmFjdG9yIG9mIE4gd2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIGZpeHBvaW50IGl0ZXJhdGlvbnMg
dGhlIEdDIHR5cGljYWxseQorICAgICAgICBkb2VzLiBOIGlzIHVzdWFsbHkgYXJvdW5kIDUtNiBl
dmVuIGZvciBzaW1wbGUgaGVhcHMuCisgICAgICAgIAorICAgICAgICBNeSBwZXJmIG1lYXN1cmVt
ZW50cyBzYXk6CisgICAgICAgIAorICAgICAgICBQTFQzOiAwLjAyJSBmYXN0ZXIgd2l0aCA1LjMl
IGNvbmZpZGVuY2UuCisgICAgICAgIEpldFN0cmVhbTogMC4xNSUgZmFzdGVyIHdpdGggMTclIGNv
bmZpZGVuY2UuCisgICAgICAgIFNwZWVkb21ldGVyOiAwLjU4JSBmYXN0ZXIgd2l0aCA4MiUgY29u
ZmlkZW5jZS4KKyAgICAgICAgCisgICAgICAgIEhlcmUgYXJlIHRoZSBkZXRhaWxzIGZyb20gSmV0
U3RyZWFtOgorICAgICAgICAKKyAgICAgICAgc3BsYXk6IDEuMDIxNzN4IGZhc3RlciB3aXRoIDAu
OTk2ODQxIGNvbmZpZGVuY2UKKyAgICAgICAgc3BsYXktbGF0ZW5jeTogMS4wNjE3eCBmYXN0ZXIg
d2l0aCAwLjk4NzQ2MiBjb25maWRlbmNlCisgICAgICAgIHRvd2Vycy5jOiAxLjAxODUyeCBmYXN0
ZXIgd2l0aCAwLjkyMTI4IGNvbmZpZGVuY2UKKyAgICAgICAgY3J5cHRvLW1kNTogMS4wNjA1OHgg
ZmFzdGVyIHdpdGggMC40ODIzNjMgY29uZmlkZW5jZQorICAgICAgICBzY29yZTogMS4wMDE1Mngg
ZmFzdGVyIHdpdGggMC4xNjg5MiBjb25maWRlbmNlCisgICAgICAgIAorICAgICAgICBJIHRoaW5r
IHRoYXQgU3BlZWRvbWV0ZXIgaXMgbGVnaXRpbWF0ZWx5IGJlbmVmaXRpbmcgZnJvbSB0aGlzIGNo
YW5nZSBiYXNlZCBvbiBsb29raW5nIGF0CisgICAgICAgIC0tbG9nR0M9dHJ1ZSBvdXRwdXQuIFdl
IGFyZSBub3cgc3BlbmRpbmcgbGVzcyB0aW1lIHJlZXhlY3V0aW5nIGV4cGVuc2l2ZSBjb25zdHJh
aW50cy4gSQorICAgICAgICB0aGluayB0aGF0IEpldFN0cmVhbS9zcGxheSBpcyBhbHNvIGJlbmVm
aXRpbmcsIGJlY2F1c2UgYWx0aG91Z2ggdGhlIGNvbnN0cmFpbnRzIGl0IHNlZXMKKyAgICAgICAg
YXJlIGNoZWFwLCBpdCBzcGVuZHMgMzAlIG9mIGl0cyB0aW1lIGluIEdDIHNvIGV2ZW4gc21hbGwg
aW1wcm92ZW1lbnRzIG1hdHRlci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om1hcmtDb2RlQmxvY2tz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3Mp
OiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgICogZGZnL0RGR1Bs
YW5JbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Oml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0MpOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6V29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpXb3JrbGlzdDo6cmVtZW1iZXJDb2RlQmxvY2tzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpyZW1lbWJlckNvZGVCbG9ja3MpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9E
RkdXb3JrbGlzdC5oOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyk6CisgICAgICAgIChK
U0M6OkRGRzo6V29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MpOgorICAgICAgICAqIGhl
YXAvQ29kZUJsb2NrU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0Ojp3cml0ZUJh
cnJpZXJDdXJyZW50bHlFeGVjdXRpbmcpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvQ29kZUJs
b2NrU2V0Lmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6aXRlcmF0ZSk6IERlbGV0ZWQu
CisgICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9ja1NldDo6aXRlcmF0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6aXRlcmF0
ZUN1cnJlbnRseUV4ZWN1dGluZyk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdB
bmRDb21waWxpbmdDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXRlcmF0ZUV4ZWN1
dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6bWFya1RvRml4cG9pbnQpOgorICAgICAgICAoSlNDOjpIZWFwOjplbmRNYXJraW5nKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdEluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6c3RvcElmTmVjZXNzYXJ5U2xvdyk6CisgICAgICAgIChKU0M6OkhlYXA6OmFjcXVpcmVBY2Nl
c3NTbG93KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcik6
CisgICAgICAgIChKU0M6OkhlYXA6OmJ1aWxkQ29uc3RyYWludFNldCk6CisgICAgICAgIChKU0M6
OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OlJlc3Vt
ZVRoZVdvcmxkU2NvcGU6OlJlc3VtZVRoZVdvcmxkU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpIZWFwOjpSZXN1bWVUaGVXb3JsZFNjb3BlOjp+UmVzdW1lVGhlV29ybGRTY29wZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29uc2VydmF0aXZlUm9vdHMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNl
cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9NYXJr
aW5nQ29uc3RyYWludC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dDo6TWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6
fk1hcmtpbmdDb25zdHJhaW50KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnJl
c2V0U3RhdHMpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
TWFya2luZ0NvbnN0cmFpbnQ6OmluZGV4KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFp
bnQ6OmFiYnJldmlhdGVkTmFtZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpu
YW1lKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6Omxhc3RWaXNpdENvdW50KToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKToKKyAg
ICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZSk6CisgICAgICAgIChK
U0M6Ok1hcmtpbmdDb25zdHJhaW50Ojp2b2xhdGlsaXR5KToKKyAgICAgICAgKiBoZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJh
aW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmRpZFZpc2l0U29tZXRo
aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRl
eHQ6OnNob3VsZFRpbWVPdXQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6
RXhlY3V0aW9uQ29udGV4dDo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkRXhlY3V0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KToKKyAgICAgICAg
KEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6On5NYXJraW5nQ29uc3RyYWludFNldCk6CisgICAg
ICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpyZXNldFN0YXRzKToKKyAgICAgICAgKEpT
Qzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQm9vdHN0cmFwKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0Ojppc1dhdmVmcm9udEFkdmFuY2luZyk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0
Ojppc1dhdmVmcm9udFJldHJlYXRpbmcpOgorICAgICAgICAqIGhlYXAvTXV0YXRvclNjaGVkdWxl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNdXRhdG9yU2NoZWR1bGVyOjpNdXRhdG9yU2No
ZWR1bGVyKToKKyAgICAgICAgKEpTQzo6TXV0YXRvclNjaGVkdWxlcjo6fk11dGF0b3JTY2hlZHVs
ZXIpOgorICAgICAgICAoSlNDOjpNdXRhdG9yU2NoZWR1bGVyOjpkaWRTdG9wKToKKyAgICAgICAg
KEpTQzo6TXV0YXRvclNjaGVkdWxlcjo6d2lsbFJlc3VtZSk6CisgICAgICAgIChKU0M6Ok11dGF0
b3JTY2hlZHVsZXI6OmRpZEV4ZWN1dGVDb25zdHJhaW50cyk6CisgICAgICAgIChKU0M6Ok11dGF0
b3JTY2hlZHVsZXI6OmxvZyk6CisgICAgICAgIChKU0M6Ok11dGF0b3JTY2hlZHVsZXI6OnNob3Vs
ZFN0b3ApOgorICAgICAgICAoSlNDOjpNdXRhdG9yU2NoZWR1bGVyOjpzaG91bGRSZXN1bWUpOgor
ICAgICAgICAqIGhlYXAvTXV0YXRvclNjaGVkdWxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFw
L09wYXF1ZVJvb3RTZXQuaDoKKyAgICAgICAgKEpTQzo6T3BhcXVlUm9vdFNldDo6YWRkKToKKyAg
ICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OnZpc2l0QXNDb25zdHJhaW50KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24pOgorICAgICAg
ICAoSlNDOjpTbG90VmlzaXRvcjo6aGFzV29yayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjpkcmFpbkZyb21TaGFyZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5JblBh
cmFsbGVsUGFzc2l2ZWx5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJv
b3QpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6OmFkZFRvVmlzaXRDb3VudCk6CisgICAgICAgICogaGVhcC9TcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Bh
Y2VUaW1lU2NoZWR1bGVyLmNwcC4KKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlcjo6U25hcHNob3Q6OlNuYXBzaG90KToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlcjo6U25hcHNob3Q6Om5vdyk6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXI6OlNuYXBzaG90OjpieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSk6CisgICAgICAg
IChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXIpOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjp+U3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlcik6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXI6OnN0YXRlKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6YmVn
aW5Db2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6
ZGlkU3RvcCk6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OndpbGxS
ZXN1bWUpOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpkaWRFeGVj
dXRlQ29uc3RyYWludHMpOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
Ojp0aW1lVG9TdG9wKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6
dGltZVRvUmVzdW1lKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6
bG9nKToKKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6ZW5kQ29sbGVj
dGlvbik6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmJ5dGVzQWxs
b2NhdGVkVGhpc0N5Y2xlSW1wbCk6CisgICAgICAgIChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hl
ZHVsZXI6OmJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlKToKKyAgICAgICAgKEpTQzo6U3BhY2VU
aW1lTXV0YXRvclNjaGVkdWxlcjo6bWF4SGVhZHJvb20pOgorICAgICAgICAoSlNDOjpTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyOjpoZWFkcm9vbUZ1bGxuZXNzKToKKyAgICAgICAgKEpTQzo6U3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6bXV0YXRvclV0aWxpemF0aW9uKToKKyAgICAgICAgKEpT
Qzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6Y29sbGVjdG9yVXRpbGl6YXRpb24pOgorICAg
ICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjplbGFwc2VkSW5QZXJpb2QpOgor
ICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpwaGFzZSk6CisgICAgICAg
IChKU0M6OlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnNob3VsZEJlUmVzdW1lZCk6CisgICAg
ICAgIChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldE11dGF0b3JVdGls
aXphdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6RGVj
aXNpb246OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6ZWxhcHNlZEluUGVyaW9kKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6cGhhc2UpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpzaG91
bGRCZVJlc3VtZWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6
OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTcGFjZVRp
bWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpTcGFjZVRpbWVTY2hlZHVsZXIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6OnNuYXBQaGFzZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6Y3VycmVudERlY2lzaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmguCisgICAgICAg
IChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246Om9wZXJhdG9yIGJvb2wpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBoZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGhl
YXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6U3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKToKKyAgICAgICAgKEpTQzo6U3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjp+U3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyKToKKyAgICAgICAgKEpTQzo6U3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyOjpzdGF0ZSk6CisgICAgICAgIChKU0M6OlN5bmNocm9ub3Vz
U3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcjo6YmVnaW5Db2xsZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjp0aW1lVG9TdG9w
KToKKyAgICAgICAgKEpTQzo6U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
Ojp0aW1lVG9SZXN1bWUpOgorICAgICAgICAoSlNDOjpTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11
dGF0b3JTY2hlZHVsZXI6OmVuZENvbGxlY3Rpb24pOgorICAgICAgICAqIGhlYXAvU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAv
VmlzaXRpbmdUaW1lb3V0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpWaXNpdGluZ1RpbWVvdXQ6
OlZpc2l0aW5nVGltZW91dCk6CisgICAgICAgIChKU0M6OlZpc2l0aW5nVGltZW91dDo6dmlzaXRD
b3VudCk6CisgICAgICAgIChKU0M6OlZpc2l0aW5nVGltZW91dDo6ZGlkVmlzaXRTb21ldGhpbmcp
OgorICAgICAgICAoSlNDOjpWaXNpdGluZ1RpbWVvdXQ6OnNob3VsZFRpbWVPdXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE3LTAxLTA2ICBTYWFtIEJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIHNsaWNlIGludHJpbnNpYyB0byB0aGUgREZH
L0ZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjEw
NDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC00OTcsMTAgKzQ5NywxNCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAg
IGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAogICAgIGhlYXAvTWFya2VkQmxvY2suY3BwCiAgICAg
aGVhcC9NYXJrZWRTcGFjZS5jcHAKKyAgICBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAorICAg
IGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCisgICAgaGVhcC9NdXRhdG9yU2NoZWR1bGVy
LmNwcAogICAgIGhlYXAvTXV0YXRvclN0YXRlLmNwcAogICAgIGhlYXAvU2xvdFZpc2l0b3IuY3Bw
Ci0gICAgaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwCisgICAgaGVhcC9TcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyLmNwcAogICAgIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3BwCisgICAg
aGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwCiAgICAgaGVh
cC9WaXNpdFJhY2VLZXkuY3BwCiAgICAgaGVhcC9XZWFrLmNwcAogICAgIGhlYXAvV2Vha0Jsb2Nr
LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDQ5NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDEzIEBACiAJCTBGMUUzQTQ2
MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYg
LyogREZHQXJndW1lbnRQb3NpdGlvbi5oICovOyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0
NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVG
b3JtYXRTdGF0ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVy
U2F2ZVBsYW4uaCAqLzsgfTsKKwkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9u
b3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLzsgfTsKKwkJMEYxRkIz
OEYxRTE3M0E2NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
RkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5oICovOyB9OworCQkwRjFGQjM5MDFFMTczQTZCMDBBOUJFNTAgLyogTXV0YXRvclNj
aGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi87IH07
CisJCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgfTsKKwkJMEYxRkIzOTYxRTFBRjdFMTAw
QTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGlu
ZXMuaCAqLzsgfTsKKwkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
RkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovOyB9OworCQkw
RjFGQjM5OTFFMUY2NUZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTgxRTFGNjVGOTAwQTlC
RTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKIAkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4
N0M1IC8qIEFib3J0UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIwMTc3RjFE
Q0FEQzMzMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBE
RkdGbG93SW5kZXhpbmcuY3BwICovOyB9OwogCQkwRjIwMTc4MDFEQ0FEQzM1MDBFQTU5NTAgLyog
REZHRmxvd0luZGV4aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi87
IH07CkBAIC00NTUsNiArNDYyLDEwIEBACiAJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBD
YWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjY0
QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxs
RWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFF
OUIgLyogQWlyQXJnSW5saW5lcy5oICovOyB9OworCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2MkMg
LyogTWFya2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJh
aW50LmNwcCAqLzsgfTsKKwkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtpbmdDb25z
dHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgfTsKKwkJ
MEY2NjBFMzkxRTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1MUUwNTE3
QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CisJCTBGNjYwRTNB
MUUwNTE3QzEwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi87IH07CiAJCTBGNjY0Q0U4MURBMzA0RUYwMEIw
MEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NENFNzFEQTMwNEVEMDBCMDBBMTEgLyogQ29kZUJsb2Nr
U2V0SW5saW5lcy5oICovOyB9OwogCQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NTMsOCArNzY0
LDggQEAKIAkJMEZEREJGQjUxNjY2RUVEODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEREJGQjIxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3Bw
ICovOyB9OwogCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NE
YXRhRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAq
LzsgfTsKIAkJMEZERTg3RjkxREZEMEM3NjAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERTg3RjgxREZE
MEM2RDAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwICovOyB9OwotCQkwRkRFODdGQzFERkU2
RTUxMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3Bh
Y2VUaW1lU2NoZWR1bGVyLmggKi87IH07Ci0JCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBT
cGFjZVRpbWVTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxl
ci5jcHAgKi87IH07CisJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5oICovOyB9OworCQkwRkRFODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5jcHAgKi87IH07CiAJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QxMUQ5QzYw
ODYwMDFCOTgyNSAvKiBCM0tpbmQuaCAqLzsgfTsKIAkJMEZERjY3RDMxRDlDNkQyQTAwMUI5ODI1
IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkRGNjdEMDFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmNwcCAqLzsgfTsKIAkJMEZE
RjY3RDYxRDlEQzQ0MDAwMUI5ODI1IC8qIEFpcktpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDQxRDlEQzQzRTAwMUI5ODI1IC8qIEFp
cktpbmQuY3BwICovOyB9OwpAQCAtMjU1OSw2ICsyNTcwLDEzIEBACiAJCTBGMUUzQTQ0MTUzNENC
QUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0RvdWJs
ZUZvcm1hdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTUwMTUz
N0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR1Ns
b3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTY1
MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgcGF0
aCA9IGRmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNo
cm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRkIzOEMxRTE3M0E2MjAwQTlCRTUwIC8q
IE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRpbmdUaW1lb3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5oOyBwYXRo
ID0gZGZnL0RGR1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGggPSBkZmcv
REZHV29ya2xpc3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUZC
Mzk4MUUxRjY1RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5k
ZXhpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0lu
ZGV4aW5nLmNwcDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4
aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5o
OyBwYXRoID0gZGZnL0RGR0Zsb3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjg4NCw2ICsyOTAyLDEwIEBACiAJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBD
YWxsRWRnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRn
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjc4MUE3OTU3QjIwMDZF
NEU2NiAvKiBDYWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxs
RWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0RUFGMjFDNEVDRDA2MDA2
MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBaXJBcmdJbmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2lu
Z0NvbnN0cmFpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFy
a2luZ0NvbnN0cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2MEUz
NDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50
U2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25z
dHJhaW50U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjBFMzYxRTA1
MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNjY0Q0U3MURBMzA0RUQwMEIwMEExMSAvKiBDb2RlQmxvY2tTZXRJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1NldElubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkUxODM1NjZGOTAwRDAx
N0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxOTMs
OCArMzIxNSw4IEBACiAJCTBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFj
Y2Vzc0RhdGFEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNz
RGF0YUR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMzE2NjZF
RUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBk
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDZWxsQ29udGFpbmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNl
VGltZVNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
cGFjZVRpbWVTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkRF
ODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYWNlVGltZVNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0
YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZERTg3RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRGNjdEMDFEOUM2MDg2MDAx
Qjk4MjUgLyogQjNLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEIzS2luZC5jcHA7IHBhdGggPSBiMy9CM0tpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkRGNjdEMTFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzS2luZC5oOyBwYXRoID0gYjMvQjNLaW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREY2N0Q0MUQ5REM0M0UwMDFCOTgyNSAvKiBBaXJL
aW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpcktpbmQuY3Bw
OyBwYXRoID0gYjMvYWlyL0FpcktpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTc1MSw4ICs1NzczLDE0IEBACiAJCQkJMTREMkYzRDgxMzlGNEJFMjAwNDkxMDMxIC8qIE1h
cmtlZFNwYWNlLmNwcCAqLywKIAkJCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2Vk
U3BhY2UuaCAqLywKIAkJCQkwRjdDNUZCOTFEODg5NTA1MDA0NEY1RTIgLyogTWFya2VkU3BhY2VJ
bmxpbmVzLmggKi8sCisJCQkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25z
dHJhaW50LmNwcCAqLywKKwkJCQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0Nv
bnN0cmFpbnQuaCAqLywKKwkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0Nv
bnN0cmFpbnRTZXQuY3BwICovLAorCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJr
aW5nQ29uc3RyYWludFNldC5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBN
YXJrU3RhY2suY3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3Rh
Y2suaCAqLywKKwkJCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxl
ci5jcHAgKi8sCisJCQkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVs
ZXIuaCAqLywKIAkJCQkwRkE3NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNw
cCAqLywKIAkJCQkwRkE3NjIwMzFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8s
CiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKQEAg
LTU3NjEsMTQgKzU3ODksMTcgQEAKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xv
dFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90Vmlz
aXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklu
bGluZXMuaCAqLywKLQkJCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2No
ZWR1bGVyLmNwcCAqLywKLQkJCQkwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1l
U2NoZWR1bGVyLmggKi8sCisJCQkJMEZERTg3RkExREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGlt
ZU11dGF0b3JTY2hlZHVsZXIuY3BwICovLAorCQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAv
KiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEY3Q0Y5NTAxREMwMjdENzAw
OThDQzEyIC8qIFN0b3BJZk5lY2Vzc2FyeVRpbWVyLmNwcCAqLywKIAkJCQkwRjdDRjk1MTFEQzAy
N0Q3MDA5OENDMTIgLyogU3RvcElmTmVjZXNzYXJ5VGltZXIuaCAqLywKIAkJCQkxNDJFMzEzMjEz
NEZGMEE2MDBBRkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJMTQ1NzIyODUxNDM3RTE0MDAwNUZE
RTI2IC8qIFN0cm9uZ0lubGluZXMuaCAqLywKKwkJCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAg
LyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKKwkJCQkw
RjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9y
U2NoZWR1bGVyLmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9v
bUZpbHRlci5oICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlv
bmFsRmluYWxpemVyLmggKi8sCisJCQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0
aW5nVGltZW91dC5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJh
Y2VLZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VL
ZXkuaCAqLywKIAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBA
IC02OTk1LDYgKzcwMjYsNyBAQAogCQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQ
aGlDaGlsZHJlbi5oICovLAogCQkJCUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFu
LmNwcCAqLywKIAkJCQlBNzhBOTc3MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAor
CQkJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovLAogCQkJ
CURDMDAwMzkwMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgg
Ki8sCiAJCQkJMEZCRTBGNkQxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNkUxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZS5oICovLApAQCAtNzA4Myw2ICs3MTE1LDcgQEAKIAkJCQkwRkM5
N0YzQzE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oICov
LAogCQkJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8sCiAJ
CQkJMEZEQjJDRTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi8sCisJCQkJMEYx
RkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovLAogCQkJKTsK
IAkJCW5hbWUgPSBkZmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNzk0NSw2ICs3
OTc4LDcgQEAKIAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0YxNEJFQUE4MjAwQURD
NjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzkz
MUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk2OUEwNzIzMEVEMUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTMyOERBRTgxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlR2VuZXJhdG9y
aWZpY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1Mjkg
LyogQnl0ZWNvZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDc4LDYgKzg1MTIsNyBAQAog
CQkJCUExRDc5MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51
bWJlckZvcm1hdFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMkJCRkYyMUIw
NDRBOEIwMDY2NEI2OSAvKiBJbnRsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5
NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MDhFQkUyNDFDRThGMzU4MDA0NTMxNDYgLyogSW50bE9iamVjdElubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBp
biBIZWFkZXJzICovLAogCQkJCThCOUY2RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25L
aW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTg1NjIsNyArODU5Nyw5IEBACiAJCQkJMEYyQjY2RUYx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZGMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDFGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjY2MEUzQTFFMDUxN0MxMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1
bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0
NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5QzFD
MDI0QTQ5MDAyNDgxRTIgLyogSlNHZW5lcmF0b3JGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC04Njc0LDYgKzg3
MTEsNyBAQAogCQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5VGFi
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dp
dGhTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8q
IEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYxRkIzOEYxRTE3M0E2NzAwQTlC
RTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdv
cmRMb29rdXAuaCBpbiBIZWFkZXJzICovLApAQCAtODcxOSw2ICs4NzU3LDcgQEAKIAkJCQk4NjNC
MjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMzJBQjI0NDFEQ0Q3NUY0MDBENzUzM0EgLyogTWFjcm9Bc3NlbWJsZXJIZWxw
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFj
cm9Bc3NlbWJsZXJNSVBTLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFGQjM5NjFFMUFGN0UxMDBB
OUJFNTAgLyogREZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5
MERFMDQwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2MDE2MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVy
WDg2XzY0LmggaW4gSGVhZGVycyAqLywKQEAgLTg5MDEsNyArODk0MCw3IEBACiAJCQkJQkMxOEM0
NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAg
LyogU3BhY2VUaW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRFODdGQzFERkU2
RTUxMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXpl
ZFRodW5rSklULmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUg
LyogU3BlY2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODkzNCw2ICs4OTczLDcgQEAK
IAkJCQlCQ0NGMEQwODBFRjBBQUI5MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMx
OCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMUZCMzk5MUUxRjY1RkIw
MEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFB
QzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFB
RTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk5NkI3MzI3MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBp
biBIZWFkZXJzICovLApAQCAtOTc0Myw2ICs5NzgzLDcgQEAKIAkJCQlBN0U1QTNBNzE3OTc0MzJE
MDBFODkzQzAgLyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5QzIxMDdFQzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY2RkM3NTAxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEYxRkIzOEUxRTE3M0E2NTAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZCMTZE
ODEyRUI1QjU5MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTVGRDAwNzkxODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNzYWdl
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTc1OCw2ICs5Nzk5LDcgQEAKIAkJCQkxNDdGMzlDNDEw
N0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzUxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjY2MEUzOTFFMDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0
cmFpbnRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0Iy
IC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0
ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZDODRC
MzFEMUREQUQ5MDA2QjVDNDYgLyogRGVidWdnZXJMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTEwMzQ2LDcgKzEwMzg4LDcgQEAKIAkJCQk5MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyog
U21hbGxTdHJpbmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0
NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDlEQzE2QjEy
RUYyOTNFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQkwRkRFODdGRDFERkU2RTU0MDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVN
dXRhdG9yU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMENENEM0MTVGNkI2QkIw
MDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NTU0MUIxMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0xMDM1Niw2ICsxMDM5OCw3IEBACiAJCQkJQTczMEI2MTMxMjUwMDY4
RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDY5REVCMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxRkIzOTAxRTE3M0E2QjAwQTlCRTUw
IC8qIE11dGF0b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdF
QzdFNzAwNjUwNDQ2IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2
OURFRDEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzMzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2Vy
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA0MDcsNiArMTA0NTAsNyBAQAogCQkJCTBGMjRFNTU4
MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTc5RUUwQkZGMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY2MEUzNzFFMDUxN0I5MDAzMTQ2
MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMx
QUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIw
QzI1OTFBODAxM0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGOTUyQUEyMURGNzg2MEQwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlz
aW9uIDIxMDQ5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02MTAsMzYgKzYxMCw2IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46Omtl
eSgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwg
bW9kZSk7CiB9CiAKLXZvaWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yKQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0
byBhIENvZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJy
aWVyLiBTbywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAv
LyBhbGwgb3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIHNs
b3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jayk7Ci0gICAgc2xvdFZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJv
ZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
KHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKLX0KLQotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9j
a3MoVk0mIHZtKQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVl
cyB0byBhIENvZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKLSAgICAvLyBhbiBleHBsaWNpdCBi
YXJyaWVyLiBTbywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAg
ICAvLyBhbGwgb3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KLQotICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJp
ZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxv
Y2spCi0gICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsK
LX0KLQogdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3
ICs3MCw4IEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICBD
b21waWxhdGlvbktleSBrZXkoKTsKICAgICAKICAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFNsb3RW
aXNpdG9yJik7Ci0gICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCBG
dW5jJik7CiAgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNl
bCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRGR1Bs
YW4uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgordm9pZCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IEZ1bmMm
IGZ1bmMpCit7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRv
IGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJp
ZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8v
IGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgZnVu
Yyhjb2RlQmxvY2spOworICAgIGZ1bmMoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBp
ZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCisgICAgICAgIGZ1bmMocHJvZmlsZWRERkdDb2RlQmxv
Y2spOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUxLDI4ICszNTEsNiBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0m
CiAgICAgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogfQogCi12b2lkIFdvcmtsaXN0
OjptYXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKLXsKLSAg
ICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKHBs
YW4tPnZtICE9ICZ2bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5tYXJr
Q29kZUJsb2NrcyhzbG90VmlzaXRvcik7Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0OjpyZW1l
bWJlckNvZGVCbG9ja3MoVk0mIHZtKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2sp
OwotICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRl
ciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXIt
PnZhbHVlLmdldCgpOwotICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAgfQot
fQotCiB2b2lkIFdvcmtsaXN0OjpzdXNwZW5kQWxsVGhyZWFkcygpCiB7CiAgICAgbV9zdXNwZW5z
aW9uTG9jay5sb2NrKCk7CkBAIC01NjYsMjIgKzU0NCw2IEBAIHZvaWQgY29tcGxldGVBbGxQbGFu
c0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKLXZvaWQgbWFya0NvZGVCbG9ja3MoVk0mIHZtLCBT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpu
dW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3
b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAg
ICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90VmlzaXRvcik7Ci0gICAgfQot
fQotCi12b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6
OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxs
KGkpKQotICAgICAgICAgICAgd29ya2xpc3QtPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7Ci0gICAg
fQotfQotCiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAogdm9pZCBjb21wbGV0ZUFsbFBsYW5z
Rm9yVk0oVk0mKQpAQCAtNTkyLDEwICs1NTQsNiBAQCB2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwg
U2xvdFZpc2l0b3ImKQogewogfQogCi12b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpCi17Ci19
Ci0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24g
MjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIC8vIHdvcmts
aXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0ZUFs
bFBsYW5zRm9yVk0oVk0mKTsKIAotICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90Vmlz
aXRvciYpOwotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25z
dCBGdW5jJik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYp
OwogICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGlsYXRpb25L
ZXkgPSBDb21waWxhdGlvbktleSgpKTsKQEAgLTE2OCw3ICsxNjgsOSBAQCBpbmxpbmUgV29ya2xp
c3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZN
KFZNJik7CiB2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKTsKLXZvaWQgcmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0mLCBjb25zdCBGdW5jJik7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkRGR1BsYW5JbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3Qu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisjaWYgRU5BQkxFKERGR19K
SVQpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9y
R0MoVk0mIHZtLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IERG
Rzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgeworICAgICAgICBpZiAoREZHOjpXb3JrbGlz
dCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKKyAg
ICAgICAgICAgIHdvcmtsaXN0LT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZtLCBmdW5jKTsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIFdvcmtsaXN0OjppdGVyYXRl
Q29kZUJsb2Nrc0ZvckdDKFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAg
IFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZtICE9
ICZ2bSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwbGFuLT5pdGVyYXRlQ29kZUJs
b2Nrc0ZvckdDKGZ1bmMpOworICAgIH0KK30KKworI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0m
LCBjb25zdCBGdW5jJikKK3sKK30KKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMy
LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBm
YWxzZTsKLQogQ29kZUJsb2NrU2V0OjpDb2RlQmxvY2tTZXQoKQogewogfQpAQCAtMTE0LDE1ICsx
MTIsNiBAQCBib29sIENvZGVCbG9ja1NldDo6Y29udGFpbnMoY29uc3QgTG9ja0hvCiAgICAgcmV0
dXJuIG1fb2xkQ29kZUJsb2Nrcy5jb250YWlucyhjb2RlQmxvY2spIHx8IG1fbmV3Q29kZUJsb2Nr
cy5jb250YWlucyhjb2RlQmxvY2spIHx8IG1fY3VycmVudGx5RXhlY3V0aW5nLmNvbnRhaW5zKGNv
ZGVCbG9jayk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrU2V0Ojp3cml0ZUJhcnJpZXJDdXJyZW50bHlF
eGVjdXRpbmcoSGVhcCogaGVhcCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsK
LSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUmVtZW1iZXJpbmcgIiwgbV9jdXJy
ZW50bHlFeGVjdXRpbmcuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7Ci0gICAgZm9yIChDb2Rl
QmxvY2sqIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQotICAgICAgICBoZWFwLT53
cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLX0KLQogdm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyQ3Vy
cmVudGx5RXhlY3V0aW5nKCkKIHsKICAgICBtX2N1cnJlbnRseUV4ZWN1dGluZy5jbGVhcigpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9u
IDIxMDQ5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksMTAgKzY5LDYgQEAgcHVibGljOgogICAgIC8vIGJ5
IHRoaXMgc2V0KSwgYW5kIHRoYXQgaGF2ZSBub3QgYmVlbiBtYXJrZWQuCiAgICAgdm9pZCBkZWxl
dGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZChDb2xsZWN0aW9uU2NvcGUpOwogICAgIAotICAgIC8v
IEFkZCBhbGwgY3VycmVudGx5IGV4ZWN1dGluZyBDb2RlQmxvY2tzIHRvIHRoZSByZW1lbWJlcmVk
IHNldCB0byBiZSAKLSAgICAvLyByZS1zY2FubmVkIGR1cmluZyB0aGUgbmV4dCBjb2xsZWN0aW9u
LgotICAgIHZvaWQgd3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKEhlYXAqKTsKLQogICAg
IHZvaWQgY2xlYXJDdXJyZW50bHlFeGVjdXRpbmcoKTsKIAogICAgIGJvb2wgY29udGFpbnMoY29u
c3QgTG9ja0hvbGRlciYsIHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CkBAIC04MSwyMSArNzcs
OSBAQCBwdWJsaWM6CiAgICAgLy8gVmlzaXRzIGVhY2ggQ29kZUJsb2NrIGluIHRoZSBoZWFwIHVu
dGlsIHRoZSB2aXNpdG9yIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZQogICAgIC8vIHRvIGluZGljYXRl
IHRoYXQgaXQgaXMgZG9uZSBpdGVyYXRpbmcsIG9yIHVudGlsIGV2ZXJ5IENvZGVCbG9jayBoYXMg
YmVlbgogICAgIC8vIHZpc2l0ZWQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9p
ZCBpdGVyYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBmb3IgKGF1dG8mIGNvZGVCbG9jayA6IG1fb2xk
Q29kZUJsb2NrcykgewotICAgICAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2sp
OwotICAgICAgICAgICAgaWYgKGRvbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpIHsK
LSAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsKLSAgICAgICAgICAg
IGlmIChkb25lKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGl0ZXJhdGUoY29uc3QgRnVuY3RvciYp
OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZUN1cnJl
bnRseUV4ZWN1dGluZyhjb25zdCBGdW5jdG9yJik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVC
bG9ja1NldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db2RlQmxvY2tTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw1
ICs2MCwzMCBAQCBpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsoY29uc3QgTG9jCiAgICAg
bV9jdXJyZW50bHlFeGVjdXRpbmcuYWRkKGNvZGVCbG9jayk7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZShjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZm9yIChhdXRv
JiBjb2RlQmxvY2sgOiBtX29sZENvZGVCbG9ja3MpIHsKKyAgICAgICAgYm9vbCBkb25lID0gZnVu
Y3Rvcihjb2RlQmxvY2spOworICAgICAgICBpZiAoZG9uZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3Mp
IHsKKyAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOworICAgICAgICBpZiAo
ZG9uZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Cit2b2lkIENvZGVCbG9ja1NldDo6aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZyhj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2sp
OworICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykK
KyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2spOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw5ICsyMiw5IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
Ci0jaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0SW5saW5l
cy5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCi0jaW5jbHVkZSAiREZHV29ya2xp
c3QuaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdElubGluZXMuaCIKICNpbmNsdWRlICJFZGVuR0NB
Y3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRnVs
bEdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtNDksMTIgKzQ5LDE0IEBACiAjaW5jbHVkZSAiSlNM
b2NrLmgiCiAjaW5jbHVkZSAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5jbHVkZSAi
TWFya2VkU3BhY2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIK
ICNpbmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdQ
cm9maWxlci5oIgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIKLSNpbmNsdWRlICJTcGFjZVRp
bWVTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgiCiAj
aW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIu
aCIKKyNpbmNsdWRlICJTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCIK
ICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIlZNLmgiCkBAIC05MSw0MSArOTMsNiBAQCBkb3VibGUgbWF4UGF1c2VN
Uyhkb3VibGUgdGhpc1BhdXNlTVMpCiAgICAgcmV0dXJuIG1heFBhdXNlTVM7CiB9CiAKLX0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQotCi1jbGFzcyBIZWFwOjpSZXN1bWVUaGVXb3JsZFNjb3BlIHsK
LXB1YmxpYzoKLSAgICBSZXN1bWVUaGVXb3JsZFNjb3BlKEhlYXAmIGhlYXApCi0gICAgICAgIDog
bV9oZWFwKGhlYXApCi0gICAgewotICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRH
QygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkpIHsKLSAgICAgICAgICAgIGRvdWJsZSB0aGlzUGF1c2VNUyA9IChNb25vdG9uaWNU
aW1lOjpub3coKSAtIG1faGVhcC5tX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKTsKLSAgICAgICAg
ICAgIGRhdGFMb2coInA9IiwgdGhpc1BhdXNlTVMsICIgbXMgKG1heCAiLCBtYXhQYXVzZU1TKHRo
aXNQYXVzZU1TKSwgIikuLi5dXG4iKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9o
ZWFwLnJlc3VtZVRoZVdvcmxkKCk7Ci0gICAgfQotICAgIAotICAgIH5SZXN1bWVUaGVXb3JsZFNj
b3BlKCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBtX2hlYXAuc3RvcFRoZVdvcmxk
KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAg
IGRhdGFMb2coIltHQzogIik7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBIZWFwJiBtX2hl
YXA7Ci19OwotCi1uYW1lc3BhY2UgewotCiBzaXplX3QgbWluSGVhcFNpemUoSGVhcFR5cGUgaGVh
cFR5cGUsIHNpemVfdCByYW1TaXplKQogewogICAgIGlmIChoZWFwVHlwZSA9PSBMYXJnZUhlYXAp
IHsKQEAgLTMxNiwxMSArMjgzLDIwIEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFw
VHlwZSkKICAgICAsIG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKHN0ZDo6bWFrZV91bmlxdWU8
TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2soc3RkOjpt
YWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGVscGVyQ2xpZW50KCZoZWFw
SGVscGVyUG9vbCgpKQorICAgICwgbV9zY2hlZHVsZXIoc3RkOjptYWtlX3VuaXF1ZTxTcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyPigqdGhpcykpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+
OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRp
dGlvbjo6Y3JlYXRlKCkpCiB7CiAgICAgbV93b3JsZFN0YXRlLnN0b3JlKDApOwogICAgIAorICAg
IGlmIChPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKKyAgICAgICAgbV9zY2hlZHVsZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI+KCp0aGlzKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgLy8gV2Ugc2ltdWxhdGUgdHVybmluZyBvZmYgY29uY3VycmVudCBHQyBi
eSBtYWtpbmcgdGhlIHNjaGVkdWxlciBzYXkgdGhhdCB0aGUgd29ybGQKKyAgICAgICAgLy8gc2hv
dWxkIGFsd2F5cyBiZSBzdG9wcGVkIHdoZW4gdGhlIGNvbGxlY3RvciBpcyBydW5uaW5nLgorICAg
ICAgICBtX3NjaGVkdWxlciA9IHN0ZDo6bWFrZV91bmlxdWU8U3luY2hyb25vdXNTdG9wVGhlV29y
bGRNdXRhdG9yU2NoZWR1bGVyPigpOworICAgIH0KKyAgICAKICAgICBpZiAoT3B0aW9uczo6dmVy
aWZ5SGVhcCgpKQogICAgICAgICBtX3ZlcmlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxIZWFwVmVy
aWZpZXI+KHRoaXMsIE9wdGlvbnM6Om51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNh
dGlvbigpKTsKICAgICAKQEAgLTQ3OSwxMiArNDU1LDYgQEAgdm9pZCBIZWFwOjphZGRSZWZlcmVu
Y2UoSlNDZWxsKiBjZWxsLCBBcgogICAgIH0KIH0KIAotdm9pZCBIZWFwOjpoYXJ2ZXN0V2Vha1Jl
ZmVyZW5jZXMoKQotewotICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9
IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dCgpKQotICAgICAgICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKCptX2Nv
bGxlY3RvclNsb3RWaXNpdG9yKTsKLX0KLQogdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzKCkKIHsKICAgICB3aGlsZSAobV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5o
YXNOZXh0KCkpIHsKQEAgLTUxMSw2ICs0ODEsNDIgQEAgdm9pZCBIZWFwOjpjb21wbGV0ZUFsbEpJ
VFBsYW5zKCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTSgqbV92bSk7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21w
aWxpbmdDb2RlQmxvY2tzKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgbV9jb2RlQmxvY2tzLT5p
dGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKGZ1bmMpOworICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9j
a3NGb3JHQygqbV92bSwgZnVuYyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lk
IEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRp
bmdMb2Nrcyhjb25zdCBGdW5jJiBmdW5jKQoreworICAgIFZlY3RvcjxDb2RlQmxvY2sqLCAyNTY+
IGNvZGVCbG9ja3M7CisgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3Mo
CisgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIGNvZGVC
bG9ja3MuYXBwZW5kKGNvZGVCbG9jayk7CisgICAgICAgIH0pOworICAgIGZvciAoQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgOiBjb2RlQmxvY2tzKQorICAgICAgICBmdW5jKGNvZGVCbG9jayk7Cit9CisK
K3ZvaWQgSGVhcDo6YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCkKK3sKKyAgICBib29sIG9r
ID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIW1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgZGF0YUxvZygiRkFUQUw6IFNoYXJlZCBjb2xsZWN0b3IgbWFyayBz
dGFjayBub3QgZW1wdHkhIEl0IGhhcyAiLCBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+c2l6
ZSgpLCAiIGVsZW1lbnRzLlxuIik7CisgICAgICAgIG9rID0gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGlmICghbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ZGF0YUxvZygiRkFUQUw6IFNoYXJlZCBtdXRhdG9yIG1hcmsgc3RhY2sgbm90IGVtcHR5ISBJdCBo
YXMgIiwgbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5zaXplKCksICIgZWxlbWVudHMuXG4iKTsK
KyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQob2sp
OworfQorCiB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0VGltZSkKIHsK
ICAgICBUaW1pbmdTY29wZSBtYXJrVG9GaXhwb2ludFRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6
bWFya1RvRml4cG9pbnQiKTsKQEAgLTU2MCwxMzMgKzU2Niw4NCBAQCB2b2lkIEhlYXA6Om1hcmtU
b0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0CiAgICAgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yID0g
Km1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CiAgICAgc2xvdFZpc2l0b3IuZGlkU3RhcnRNYXJraW5n
KCk7CiAKLSAgICBTcGFjZVRpbWVTY2hlZHVsZXIgc2NoZWR1bGVyKCp0aGlzKTsKKyAgICBtX2Nv
bnN0cmFpbnRTZXQtPnJlc2V0U3RhdHMoKTsKKyAgICAKKyAgICBtX3NjaGVkdWxlci0+YmVnaW5D
b2xsZWN0aW9uKCk7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIG1fc2NoZWR1
bGVyLT5sb2coKTsKKyAgICAKKyAgICAvLyBXb25kZXJpbmcgd2hhdCBtX2NvbnN0cmFpbnRTZXQt
PmV4ZWN1dGVYWVogZG9lcz8gSXQncyBydW5uaW5nIHRoZSBjb25zdHJhaW50cyBjcmVhdGVkIGJ5
CisgICAgLy8gSGVhcDo6YnVpbGRDb25zdHJhaW50U2V0KCkuCisgICAgCisgICAgbV9jb25zdHJh
aW50U2V0LT5leGVjdXRlQm9vdHN0cmFwKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKKyAgICBtX3NjaGVkdWxlci0+ZGlkRXhlY3V0ZUNvbnN0cmFpbnRzKCk7CisKKyAg
ICAvLyBBZnRlciB0aGlzLCB3ZSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgZmFsbCB0aHJvdWdoIGFs
bCBvZiB0aGUgInNsb3RWaXNpdG9yLmlzRW1wdHkoKSIKKyAgICAvLyBjaGVja3MgYmVjYXVzZSBi
b290c3RyYXAgd291bGQgaGF2ZSBwdXQgdGhpbmdzIGludG8gdGhlIHZpc2l0b3IuIFNvLCB3ZSBz
aG91bGQgZmFsbAorICAgIC8vIHRocm91Z2ggdG8gZHJhaW5pbmcuCiAgICAgCiAgICAgZm9yICh1
bnNpZ25lZCBpdGVyYXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7CiAgICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpKQogICAgICAgICAgICAgZGF0YUxvZygiaSMiLCBpdGVyYXRpb24sICIgIik7
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5n
U2NvcGUoKnRoaXMsICJIZWFwOjptYXJrVG9GaXhwb2ludCBjb25zZXJ2YXRpdmUgc2NhbiIpOwot
ICAgICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwot
ICAgICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwot
ICAgICAgICAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwot
ICAgICAgICAgICAgZ2F0aGVyU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAg
ICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAg
Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAg
IHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgLy8gTm93IHdlIHZpc2l0IHJvb3RzIHRoYXQgZG9uJ3QgZ2V0
IGJhcnJpZXJlZCwgc28gZWFjaCBmaXhwb2ludCBpdGVyYXRpb24ganVzdCByZXZpc2l0cwotICAg
ICAgICAvLyBhbGwgb2YgdGhlbS4KLSNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgICAgICBz
Y2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRvcik7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIAotICAgICAgICBpZiAobV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0
ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKLSAgICAgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52
aXNpdFN0cm9uZ1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAKKyAgICAgICAgaWYg
KHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWluYXRpb24oKSkgeworICAgICAgICAgICAgYXNzZXJ0
U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgZm9yIChhdXRv
JiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgICAgICBzbG90VmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChwYWlyLmtleSk7CisgICAgICAgICAgICAvLyBGSVhNRTogVGFrZSBtX211
dGF0b3JEaWRSdW4gaW50byBhY2NvdW50IHdoZW4gc2NoZWR1bGluZyBjb25zdHJhaW50cy4gTW9z
dCBsaWtlbHksCisgICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRvIGV4ZWN1dGUgcm9vdCBj
b25zdHJhaW50cyBhZ2FpbiB1bmxlc3MgdGhlIG11dGF0b3IgZGlkIHJ1bi4gQXQgYQorICAgICAg
ICAgICAgLy8gbWluaW11bSwgd2UgY291bGQgdXNlIHRoaXMgZm9yIHdvcmsgZXN0aW1hdGVzIC0g
YnV0IGl0J3MgcHJvYmFibHkgbW9yZSB0aGFuIGp1c3QgYW4KKyAgICAgICAgICAgIC8vIGVzdGlt
YXRlLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NjgyOAogICAgICAgICAgICAgCi0gICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1f
bWFya0xpc3RTZXQtPnNpemUoKSkKLSAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjpt
YXJrTGlzdHMoc2xvdFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB3ZSBjb3VsZCB0
aW1lb3V0LiBUaGlzIG9ubHkgY29tZXMKKyAgICAgICAgICAgIC8vIGludG8gcGxheSBpZiB3ZSdy
ZSBleGVjdXRpbmcgY29uc3RyYWludHMgZm9yIHRoZSBmaXJzdCB0aW1lLiBCdXQgdGhhdCB3aWxs
IG1hdHRlcgorICAgICAgICAgICAgLy8gd2hlbiB3ZSBoYXZlIGRlZXAgc3RhY2tzIG9yIGEgbG90
IG9mIERPTSBzdHVmZi4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjY4MzEKICAgICAgICAgICAgIAotICAgICAgICBzbG90VmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5leGNlcHRpb24oKSk7Ci0gICAgICAgIHNsb3RWaXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRpb24oKSk7CisgICAgICAgICAgICBi
b29sIGV4ZWN1dGVkRXZlcnl0aGluZyA9CisgICAgICAgICAgICAgICAgbV9jb25zdHJhaW50U2V0
LT5leGVjdXRlQ29udmVyZ2VuY2Uoc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWU6OmluZmluaXR5
KCkpOworICAgICAgICAgICAgaWYgKGV4ZWN1dGVkRXZlcnl0aGluZyAmJiBzbG90VmlzaXRvci5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHko
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXMoc2xvdFZpc2l0b3IpOwotICAg
ICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKLQotI2lmIEVOQUJMRShTQU1Q
TElOR19QUk9GSUxFUikKLSAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJv
ZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKLSAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7Ci0gICAgICAgICAgICBzYW1w
bGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7Ci0gICAgICAgICAg
ICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgICAgIG1fc2NoZWR1bGVyLT5kaWRFeGVjdXRlQ29uc3RyYWludHMoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFi
bGVyKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxl
bChtX3NjaGVkdWxlci0+dGltZVRvUmVzdW1lKCkpOwogICAgICAgICB9Ci0jZW5kaWYgLy8gRU5B
QkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAKLSAgICAgICAgaWYgKG1fdm0tPnR5cGVQ
cm9maWxlcigpKQotICAgICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KHNs
b3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgbV92bS0+c2hhZG93Q2hpY2tl
bigpLnZpc2l0Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoc2xvdFZpc2l0b3Ip
OwotCi0gICAgICAgIHNsb3RWaXNpdG9yLm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwot
ICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRv
cnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vz
c2FyeSgpOwotCi0gICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyhzbG90VmlzaXRv
cik7Ci0gICAgICAgIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwotICAgICAgICB2aXNpdENvbXBp
bGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwotICAgICAgICBERkc6Om1hcmtDb2RlQmxvY2tz
KCptX3ZtLCBzbG90VmlzaXRvcik7Ci0gICAgICAgIGJvb2wgc2hvdWxkVGVybWluYXRlID0gc2xv
dFZpc2l0b3IuaXNFbXB0eSgpICYmIG1fbXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOworICAg
ICAgICBpZiAoIW1fc2NoZWR1bGVyLT5zaG91bGRSZXN1bWUoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAKKyAgICAgICAgbV9zY2hlZHVsZXItPndpbGxSZXN1bWUoKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgICAgICBkYXRhTG9n
KHNsb3RWaXNpdG9yLmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwgIisiLCBtX211dGF0b3JN
YXJrU3RhY2stPnNpemUoKSArIHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKS5zaXplKCks
ICIsIGE9IiwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAvIDEwMjQsICIga2IsIGI9IiwgbV9i
YXJyaWVyc0V4ZWN1dGVkLCAiLCBtdT0iLCBzY2hlZHVsZXIuY3VycmVudERlY2lzaW9uKCkudGFy
Z2V0TXV0YXRvclV0aWxpemF0aW9uKCksICIgIik7CisgICAgICAgICAgICBkb3VibGUgdGhpc1Bh
dXNlTVMgPSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29uZHMo
KTsKKyAgICAgICAgICAgIGRhdGFMb2coInA9IiwgdGhpc1BhdXNlTVMsICIgbXMgKG1heCAiLCBt
YXhQYXVzZU1TKHRoaXNQYXVzZU1TKSwgIikuLi5dXG4iKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVuc3VyZSB0
aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKLSAgICAgICAgLy8gcnVubmlu
ZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIq
IHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKLSAgICAgICAgLy8gc28gdGhhdCB3ZSBrbm93IGZvciBz
dXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28sIHRoaXMgaGFzIHRvIGhhcHBl
biBhZnRlciB0aGUKLSAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sgLSBvdGhlcndpc2Ugd2UgbWln
aHQgbG9vcCBmb3JldmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28gd2FudCB0byBkbyB0aGlzCi0g
ICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0aGluZyBhdCB0aGUgZW5kIG9m
IHRoZSBsYXN0IEdDIGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0Ci0gICAgICAgIC8vIEdDLgot
ICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0aGlz
KTsKLSAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwotICAgICAgICAKLSAg
ICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAK
LSAgICAgICAgLy8gVGhlIFNsb3RWaXNpdG9yJ3MgbWFyayBzdGFja3MgYXJlIGFjY2Vzc2VkIGJ5
IHRoZSBjb2xsZWN0b3IgdGhyZWFkIChpLmUuIHRoaXMgdGhyZWFkKQotICAgICAgICAvLyB3aXRo
b3V0IGxvY2tzLiBUaGF0J3Mgd2h5IHdlIGRvdWJsZS1idWZmZXIuCi0gICAgICAgIG1fbXV0YXRv
ck1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJi
b3NlKQotICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCBzbG90Vmlz
aXRvcik7CisgICAgICAgIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgICAgIAogICAgICAgICB7Ci0g
ICAgICAgICAgICBUaW1pbmdTY29wZSB0cmFjZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFy
a1RvRml4cG9pbnQgdHJhY2luZyIpOwogICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBl
bmFibGVyKHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OnVzZUNvbGxlY3RvclRpbWVzbGljaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBzY2hlZHVs
ZXIuc25hcFBoYXNlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU2xvdFZp
c2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0OwotICAgICAgICAgICAgICAgIGRv
IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkZWNpc2lvbiA9IHNjaGVkdWxlci5jdXJyZW50
RGVjaXNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2lzaW9uLnNob3VsZEJlUmVz
dW1lZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29wZSByZXN1bWVUaGVXb3JsZFNjb3BlKCp0aGlzKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFpblJlc3VsdCA9IHNsb3RWaXNpdG9yLmRy
YWluSW5QYXJhbGxlbFBhc3NpdmVseShkZWNpc2lvbi50aW1lVG9TdG9wKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChkcmFpblJlc3VsdCA9PSBTbG90VmlzaXRvcjo6U2hhcmVk
RHJhaW5SZXN1bHQ6OkRvbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QXQgdGhpcyBwb2ludCB3ZSB3aWxsIHN0b3AuIEJ1dCBtYXliZSB0aGUgc2NoZWR1bGVyIGRvZXMg
bm90IHdhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdC4KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vjb25kcyBzY2hlZHVsZWRJZGxlID0gZGVjaXNp
b24udGltZVRvU3RvcCgpIC0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEl0J3MgdG90YWxseSB1bmNsZWFyIHdoYXQgdGhlIHZhbHVlIG9m
IGNvbGxlY3RQZXJtaXR0ZWRJZGxlUmF0aW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gc2hvdWxkIGJlLCBvdGhlciB0aGFuIGl0IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMC4g
WW91IGNvdWxkIGV2ZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJndWUg
Zm9yIGl0IGJlaW5nIGdyZWF0ZXIgdGhhbiAxLiBXZSBzaG91bGQgdHVuZSBpdC4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoc2NoZWR1bGVkSWRsZSAqIE9wdGlvbnM6OmNv
bGxlY3RvclBlcm1pdHRlZElkbGVSYXRpbygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY29u
ZHMgd2FrZVVwTGF0ZW5jeSA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gZGVjaXNpb24udGltZVRv
U3RvcCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWtlVXBMYXRlbmN5ID49
IDFfbXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coInd1bCE9Iiwg
d2FrZVVwTGF0ZW5jeS5taWxsaXNlY29uZHMoKSwgIiBtcyAiKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkcmFpblJlc3VsdCA9IHNsb3RWaXNpdG9yLmRyYWluSW5QYXJhbGxlbChkZWNpc2lvbi50
aW1lVG9SZXN1bWUoKSk7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoZHJhaW5SZXN1bHQgIT0g
U2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25lKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgLy8gRGlzYWJsaW5nIGNvbGxlY3RvciB0aW1lc2xpY2luZyBp
cyBtZWFudCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKLSAgICAgICAgICAgICAgICAvLyAtLWNv
bGxlY3RDb250aW51b3VzbHk9dHJ1ZSB0byBtYXhpbWl6ZSB0aGUgb3Bwb3J0dW5pdHkgZm9yIGhh
cm1mdWwgcmFjZXMuCi0gICAgICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29wZSByZXN1bWVU
aGVXb3JsZFNjb3BlKCp0aGlzKTsKLSAgICAgICAgICAgICAgICBzbG90VmlzaXRvci5kcmFpbklu
UGFyYWxsZWwoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLmRyYWlu
SW5QYXJhbGxlbFBhc3NpdmVseShtX3NjaGVkdWxlci0+dGltZVRvU3RvcCgpKTsKICAgICAgICAg
fQorCisgICAgICAgIHN0b3BUaGVXb3JsZCgpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJbR0M6ICIpOworICAgICAgICAKKyAg
ICAgICAgbV9zY2hlZHVsZXItPmRpZFN0b3AoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpKQorICAgICAgICAgICAgbV9zY2hlZHVsZXItPmxvZygpOwogICAgIH0KKyAg
ICAKKyAgICBtX3NjaGVkdWxlci0+ZW5kQ29sbGVjdGlvbigpOwogCiAgICAgewogICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRleCk7CkBAIC02OTQsNiArNjUx
LDEyIEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICAgICAg
bV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAgICAgfQogICAgIG1faGVs
cGVyQ2xpZW50LmZpbmlzaCgpOworCisgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0Nv
ZGVCbG9ja3MoCisgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAg
ICAgIHdyaXRlQmFycmllcihjb2RlQmxvY2spOworICAgICAgICB9KTsKKyAgICAgICAgCiAgICAg
dXBkYXRlT2JqZWN0Q291bnRzKGdjU3RhcnRUaW1lKTsKICAgICBlbmRNYXJraW5nKCk7CiB9CkBA
IC03MzIsMjUgKzY5NSw2IEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5nKCkKICAgICBtX2JhcnJp
ZXJzRXhlY3V0ZWQgPSAwOwogfQogCi12b2lkIEhlYXA6OnZpc2l0Q29uc2VydmF0aXZlUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQotewotICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3It
PmFwcGVuZChyb290cyk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsICptX2Nv
bGxlY3RvclNsb3RWaXNpdG9yKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xp
c3RXZWFrUmVmZXJlbmNlcygpCi17Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAgICAgICBERkc6OmV4
aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKCptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6
VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKLSNlbmRpZgotfQotCiB2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxl
cldvcmtsaXN0RW50cmllcygpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC04NTAsOCArNzk0
LDcgQEAgdm9pZCBIZWFwOjplbmRNYXJraW5nKCkKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlz
aXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+
cmVzZXQoKTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNr
LT5pc0VtcHR5KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkTXV0YXRvck1hcmtTdGFj
ay0+aXNFbXB0eSgpKTsKKyAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKICAgICBt
X3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAgIG1fb2JqZWN0
U3BhY2UuZW5kTWFya2luZygpOwpAQCAtMTEzNiw3ICsxMDc5LDcgQEAgdm9pZCBIZWFwOjpjb2xs
ZWN0SW5UaHJlYWQoKQogICAgIAogICAgIHdpbGxTdGFydENvbGxlY3Rpb24oc2NvcGUpOwogICAg
IGNvbGxlY3RJbXBsVGltaW5nU2NvcGUuc2V0U2NvcGUoKnRoaXMpOwotICAgICAgICAKKyAgICAK
ICAgICBnY1N0YXJ0VGltZSA9IFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAg
ICAgaWYgKG1fdmVyaWZpZXIpIHsKICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgbGl2ZSBvYmplY3Rz
IGZyb20gdGhlIGxhc3QgR0MgY3ljbGUgaGF2ZW4ndCBiZWVuIGNvcnJ1cHRlZCBieQpAQCAtMTE0
NiwxMSArMTA4OSwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgICAgIG1f
dmVyaWZpZXItPmluaXRpYWxpemVHQ0N5Y2xlKCk7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhl
ckxpdmVPYmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZU1hcmtpbmcpOwogICAgIH0K
LSAgICAgICAgCisgICAgCiAgICAgcHJlcGFyZUZvck1hcmtpbmcoKTsKLSAgICAgICAgCisgICAg
CiAgICAgbWFya1RvRml4cG9pbnQoZ2NTdGFydFRpbWUpOwotICAgICAgICAKKyAgICAKICAgICBp
ZiAobV92ZXJpZmllcikgewogICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhI
ZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwogICAgICAgICBtX3ZlcmlmaWVyLT52
ZXJpZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTExNjYsOCArMTEw
OSwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgZmluYWxpemVVbmNvbmRp
dGlvbmFsRmluYWxpemVycygpOwogICAgIHJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmll
cygpOwogICAgIG5vdGlmeUluY3JlbWVudGFsU3dlZXBlcigpOwotICAgICAgICAKLSAgICBtX2Nv
ZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0aGlzKTsKKyAgICAKKyAg
ICBtX2NvZGVCbG9ja3MtPml0ZXJhdGVDdXJyZW50bHlFeGVjdXRpbmcoCisgICAgICAgIFsmXSAo
Q29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIHdyaXRlQmFycmllcihjb2RlQmxv
Y2spOworICAgICAgICB9KTsKICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyQ3VycmVudGx5RXhlY3V0
aW5nKCk7CiAgICAgICAgIAogICAgIG1fb2JqZWN0U3BhY2UucHJlcGFyZUZvckFsbG9jYXRpb24o
KTsKQEAgLTEzNTQsNiArMTMwMCw3IEBAIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5U2xvdygp
CiAgICAgCiAgICAgaGFuZGxlR0NEaWRKSVQoKTsKICAgICBoYW5kbGVOZWVkRmluYWxpemUoKTsK
KyAgICBtX211dGF0b3JEaWRSdW4gPSB0cnVlOwogfQogCiBib29sIEhlYXA6OnN0b3BJZk5lY2Vz
c2FyeVNsb3codW5zaWduZWQgb2xkU3RhdGUpCkBAIC0xMzY2LDcgKzEzMTMsNyBAQCBib29sIEhl
YXA6OnN0b3BJZk5lY2Vzc2FyeVNsb3codW5zaWduZWQgCiAgICAgICAgICYmIGhhbmRsZU5lZWRG
aW5hbGl6ZShvbGRTdGF0ZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIGlmICgh
KG9sZFN0YXRlICYgc2hvdWxkU3RvcEJpdCkpIHsKKyAgICBpZiAoIShvbGRTdGF0ZSAmIHNob3Vs
ZFN0b3BCaXQpICYmICFtX3NjaGVkdWxlci0+c2hvdWxkU3RvcCgpKSB7CiAgICAgICAgIGlmICgh
KG9sZFN0YXRlICYgc3RvcHBlZEJpdCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VTdHJvbmcob2xkU3RhdGUsIG9sZFN0YXRl
ICYgfnN0b3BwZWRCaXQpOwpAQCAtMTQzOSw2ICsxMzg2LDcgQEAgdm9pZCBIZWFwOjphY3F1aXJl
QWNjZXNzU2xvdygpCiAgICAgICAgIGlmIChtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlV2Vh
ayhvbGRTdGF0ZSwgbmV3U3RhdGUpKSB7CiAgICAgICAgICAgICBoYW5kbGVHQ0RpZEpJVCgpOwog
ICAgICAgICAgICAgaGFuZGxlTmVlZEZpbmFsaXplKCk7CisgICAgICAgICAgICBtX211dGF0b3JE
aWRSdW4gPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAt
MjA1MiwzMiArMjAwMCwzNSBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRl
ZChzCiB9CiAjZW5kaWYKIAotYm9vbCBIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKEdD
RGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit2b2lkIEhlYXA6OmNvbGxlY3RJZk5l
Y2Vzc2FyeU9yRGVmZXIoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKICAg
ICBBU1NFUlQoIURpc2FsbG93R0M6OmlzR0NEaXNhbGxvd2VkT25DdXJyZW50VGhyZWFkKCkpOwog
CiAgICAgaWYgKCFtX2lzU2FmZVRvQ29sbGVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm47CiAgICAgaWYgKG11dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6SGVs
cGluZ0dDKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybjsKICAgICBpZiAo
IU9wdGlvbnM6OnVzZUdDKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIGlmIChtYXlOZWVkVG9TdG9wKCkpIHsKICAgICAgICAgaWYgKGRlZmVycmFs
Q29udGV4dCkKICAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7
CiAgICAgICAgIGVsc2UgaWYgKGlzRGVmZXJyZWQoKSkKICAgICAgICAgICAgIG1fZGlkRGVmZXJH
Q1dvcmsgPSB0cnVlOwotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
c3RvcElmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgaWYgdGhlIHNj
aGVkdWxlciB3YW50cyB1cyB0byBzdG9wLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyNworICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpnY01heEhlYXBTaXplKCkpKSB7CiAgICAgICAgIGlm
IChtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIDw9IE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICB9IGVs
c2UgewogICAgICAgICBpZiAobV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA8PSBtX21heEVkZW5T
aXplKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChkZWZlcnJhbENvbnRleHQpCkBAIC0yMDg2LDcgKzIwMzcsNiBAQCBib29s
IEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NECiAgICAgICAgIG1fZGlkRGVmZXJH
Q1dvcmsgPSB0cnVlOwogICAgIGVsc2UKICAgICAgICAgY29sbGVjdEFzeW5jKCk7Ci0gICAgcmV0
dXJuIHRydWU7CiB9CiAKIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZO
ZWVkZWRTbG93KCkKQEAgLTIxNDEsOCArMjA5MSwxNTUgQEAgdm9pZCBIZWFwOjpzZXRSdW5Mb29w
KENGUnVuTG9vcFJlZiBydW5MbwogfQogI2VuZGlmIC8vIFVTRShDRikKIAordm9pZCBIZWFwOjpi
dWlsZENvbnN0cmFpbnRTZXQoKQoreworICAgIG1fY29uc3RyYWludFNldCA9IHN0ZDo6bWFrZV91
bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCk7CisgICAgCisgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCisgICAgICAgICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7Cisg
ICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAi
Q29uc3RyYWludDogY29uc2VydmF0aXZlIHNjYW4iKTsKKyAgICAgICAgICAgIG1fb2JqZWN0U3Bh
Y2UucHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKKyAgICAgICAgICAgIENvbnNlcnZhdGl2
ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKKyAgICAgICAgICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICAgICAgICAgIGdhdGhlclN0YWNr
Um9vdHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jvb3Rz
KGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmQoY29u
c2VydmF0aXZlUm9vdHMpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6
R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRkKAorICAg
ICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAorICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECisgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3Zt
LCBzbG90VmlzaXRvcik7CisjZW5kaWYKKworICAgICAgICAgICAgaWYgKG1fdm0tPnNtYWxsU3Ry
aW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAgICAgICAg
ICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVk
VmFsdWVzKQorICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHBh
aXIua2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fbWFya0xpc3RTZXQgJiYg
bV9tYXJrTGlzdFNldC0+c2l6ZSgpKQorICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyOjptYXJrTGlzdHMoc2xvdFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0
aW9uKCkpOworICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+
bGFzdEV4Y2VwdGlvbigpKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6
OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAg
ICAgICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgICAgIG1f
aGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7CisgICAgICAgICAgICBt
X2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFy
a2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKKyAgICAgICAgIkQiLCAiRGVidWdnZXIiLAorICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworI2lmIEVO
QUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVy
KiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAg
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsK
KyAgICAgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNr
VHJhY2VzKCk7CisgICAgICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoc2xvdFZp
c2l0b3IpOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmls
ZXIgZGF0YTpcbiIsIHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFC
TEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX3Zt
LT50eXBlUHJvZmlsZXIoKSkKKyAgICAgICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2co
KS0+dmlzaXQoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3ZtLT5z
aGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7CisgICAgICAgIH0sCisg
ICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgCisgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoCisgICAgICAgICJKc3IiLCAiSklUIFN0dWIgUm91dGluZXMi
LAorICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRp
bmdUaW1lb3V0JikgeworICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2Vk
U3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgTWFya2luZ0Nv
bnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKKyAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCisgICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgICAg
ICBzbG90VmlzaXRvci5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAg
ICAgICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2Fy
eSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1Nl
dHMoc2xvdFZpc2l0b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6
R3JleWVkQnlNYXJraW5nKTsKKyAgICAKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKKyAgICAg
ICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwKKyAgICAgICAgW3RoaXNdIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAg
ICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vha1JlZmVy
ZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgp
KQorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0
b3IpOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJr
aW5nKTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBtX2NvbnN0cmFpbnRTZXQtPmFk
ZCgKKyAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMiLAorICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQorICAg
ICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1Jl
ZmVyZW5jZXMoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHVubmVjZXNzYXJ5LgorICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyOQorICAgICAgICAg
ICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKAorICAgICAgICAgICAgICAgICptX3ZtLAor
ICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkRG
RyBXb3JrbGlzdHM6XG4iLCBzbG90VmlzaXRvcik7CisgICAgICAgIH0sCisgICAgICAgIE1hcmtp
bmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmcpOworI2VuZGlmCisgICAgCisgICAgbV9jb25z
dHJhaW50U2V0LT5hZGQoCisgICAgICAgICJDYiIsICJDb2RlQmxvY2tzIiwKKyAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsK
KyAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91
dEhvbGRpbmdMb2NrcygKKyAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2Nr
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMgYSBjb25z
dHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KKyAgICAgICAgICAgICAgICAgICAgaWYgKEhlYXA6
OmlzTWFya2VkKGNvZGVCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGVCbG9j
ay0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpQb3NzaWJseU9sZE9yQmxhY2spCisgICAgICAg
ICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2sp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9LAorICAgICAgICBNYXJraW5nQ29uc3Ry
YWludDo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIAorICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAorICAgICAgICAiTW1zIiwgIk11dGF0b3IgTWFyayBTdGFjayIsCisgICAgICAgIFt0aGlzXSAo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAg
ICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgZml4cG9pbnQgdGhhdCB3ZSBpbnRyb2R1Y2VkIHdv
cmshCisgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgp
OworICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIoIiwgc2l6ZSwgIikiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9t
dXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2so
KSk7CisgICAgICAgIH0sCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUg
eworICAgICAgICAgICAgcmV0dXJuIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpOworICAgICAg
ICB9LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOworfQor
CiB2b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpCiB7CisgICAgYnVpbGRDb25zdHJh
aW50U2V0KCk7CisgICAgCiAgICAgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOwogICAgIAogICAg
IGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMsMTAgQEAgY2xhc3MgSlNW
YWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIE1hcmtTdGFja0FycmF5
OwogY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNl
dDsKK2NsYXNzIE11dGF0b3JTY2hlZHVsZXI7CiBjbGFzcyBTbG90VmlzaXRvcjsKLWNsYXNzIFNw
YWNlVGltZVNjaGVkdWxlcjsKK2NsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiBjbGFz
cyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFZNOwogCkBAIC0yMDEsNyArMjAzLDcgQEAg
cHVibGljOgogICAgIC8vIGFuZCB0aGlzIHdpbGwgd2FpdCBmb3IgdGhhdCBiYWNrbG9nIGJlZm9y
ZSBydW5uaW5nIGl0cyBHQyBhbmQgcmV0dXJuaW5nLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgY29sbGVjdFN5bmMoc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+ID0gc3RkOjpudWxs
b3B0KTsKICAgICAKLSAgICBib29sIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NEZWZlcnJh
bENvbnRleHQqID0gbnVsbHB0cik7IC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBkaWQgY29sbGVjdC4K
KyAgICB2b2lkIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NEZWZlcnJhbENvbnRleHQqID0g
bnVsbHB0cik7CiAKICAgICB2b2lkIGNvbXBsZXRlQWxsSklUUGxhbnMoKTsKICAgICAKQEAgLTM3
NSw3ICszNzcsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7
CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwogICAgIGZyaWVuZCBjbGFzcyBTbG90Vmlz
aXRvcjsKLSAgICBmcmllbmQgY2xhc3MgU3BhY2VUaW1lU2NoZWR1bGVyOworICAgIGZyaWVuZCBj
bGFzcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOwogICAgIGZyaWVuZCBjbGFzcyBJbmNyZW1l
bnRhbFN3ZWVwZXI7CiAgICAgZnJpZW5kIGNsYXNzIEhlYXBTdGF0aXN0aWNzOwogICAgIGZyaWVu
ZCBjbGFzcyBWTTsKQEAgLTQxMiw5ICs0MTQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcFRo
ZVdvcmxkKCk7CiAgICAgdm9pZCByZXN1bWVUaGVXb3JsZCgpOwogICAgIAotICAgIGNsYXNzIFJl
c3VtZVRoZVdvcmxkU2NvcGU7Ci0gICAgZnJpZW5kIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7
Ci0gICAgCiAgICAgdm9pZCBzdG9wVGhlTXV0YXRvcigpOwogICAgIHZvaWQgcmVzdW1lVGhlTXV0
YXRvcigpOwogICAgIApAQCAtNDU0LDcgKzQ1Myw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnYXRo
ZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlclNjcmF0
Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgYmVnaW5NYXJraW5n
KCk7Ci0gICAgdm9pZCB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7
CiAgICAgdm9pZCB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZv
aWQgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgdm9pZCB1cGRhdGVP
YmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKTsKQEAgLTQ5OCw2ICs0OTYsMTYgQEAgcHJp
dmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlQmFycmllck9wYXF1ZVJvb3RT
bG93KHZvaWQqKTsKICAgICAKICAgICB2b2lkIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29s
IHZhbHVlKTsKKyAgICAKKyAgICB2b2lkIGJ1aWxkQ29uc3RyYWludFNldCgpOworICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29t
cGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBGdW5jJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KKyAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tz
V2l0aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5jJik7CisgICAgCisgICAgdm9pZCBhc3NlcnRT
aGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7
CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTUzNCw2ICs1NDIsOCBAQCBwcml2YXRl
OgogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0b3JTbG90
VmlzaXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1h
cmtTdGFjazsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnRTZXQ+
IG1fY29uc3RyYWludFNldDsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNl
ZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8K
ICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVt
IGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC02MTYsNiArNjI2LDgg
QEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9leHRlcm5hbE1lbW9yeVNpemUgeyAwIH07CiAjZW5k
aWYKICAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TXV0YXRvclNjaGVkdWxlcj4gbV9zY2hlZHVs
ZXI7CisgICAgCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3VsZFN0b3BCaXQgPSAxdSA8
PCAwdTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3RvcHBlZEJpdCA9IDF1IDw8IDF1Owog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBoYXNBY2Nlc3NCaXQgPSAxdSA8PCAydTsKQEAgLTYz
MSw2ICs2NDMsNyBAQCBwcml2YXRlOgogICAgIFRpY2tldCBtX2xhc3RHcmFudGVkVGlja2V0IHsg
MCB9OwogICAgIGJvb2wgbV90aHJlYWRTaG91bGRTdG9wIHsgZmFsc2UgfTsKICAgICBib29sIG1f
dGhyZWFkSXNTdG9wcGluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX211dGF0b3JEaWRSdW4geyB0
cnVlIH07CiAgICAgQm94PExvY2s+IG1fdGhyZWFkTG9jazsKICAgICBSZWZQdHI8QXV0b21hdGlj
VGhyZWFkQ29uZGl0aW9uPiBtX3RocmVhZENvbmRpdGlvbjsgLy8gVGhlIG11dGF0b3IgbXVzdCBu
b3Qgd2FpdCBvbiB0aGlzLiBJdCB3b3VsZCBjYXVzZSBhIGRlYWRsb2NrLgogICAgIFJlZlB0cjxB
dXRvbWF0aWNUaHJlYWQ+IG1fdGhyZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJNYXJraW5nQ29uc3RyYWludC5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAor
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5j
dGlvbiwKKyAgICBWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisgICAgOiBtX2FiYnJldmlhdGVkTmFt
ZShhYmJyZXZpYXRlZE5hbWUpCisgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICAsIG1f
ZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fdm9sYXRp
bGl0eSh2b2xhdGlsaXR5KQoreworfQorCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0
cmFpbnQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhl
Y3V0ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24sCisgICAgVm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAgIDog
bV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQorICAgICwgbV9uYW1lKFdURk1vdmUo
bmFtZSkpCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikp
CisgICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQoreworfQorCitN
YXJraW5nQ29uc3RyYWludDo6fk1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30KKwordm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCit7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7
Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7Cisg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFMb2coYWJicmV2aWF0ZWROYW1l
KCkpOworICAgIFZpc2l0aW5nVGltZW91dCB2aXNpdGluZ1RpbWVvdXQodmlzaXRvciwgZGlkVmlz
aXRTb21ldGhpbmcsIHRpbWVvdXQpOworICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IsIHZp
c2l0aW5nVGltZW91dCk7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0aW5nVGltZW91dC52
aXNpdENvdW50KHZpc2l0b3IpOworICAgIGRpZFZpc2l0U29tZXRoaW5nID0gdmlzaXRpbmdUaW1l
b3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlZpc2l0aW5nVGltZW91dC5oIgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8
d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYXJr
aW5nQ29uc3RyYWludFNldDsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFzcyBNYXJraW5nQ29u
c3RyYWludCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gVm9sYXRpbGl0
eSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBpbnRyb2R1Y2UgYSBuZXcga2luZCBvZiB2
b2xhdGlsaXR5IGNhbGxlZCBHcmV5ZWRCeVJlc3VtcHRpb24sIHdoaWNoCisgICAgICAgIC8vIHdv
dWxkIG1lYW4gcnVubmluZyBhbGwgb2YgdGhlIHRpbWVzIHRoYXQgR3JleWVkQnlFeGVjdXRpb24g
cnVucyBleGNlcHQgYXMgYSByb290IGluIGEKKyAgICAgICAgLy8gZnVsbCBHQy4KKyAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgzMAorICAgICAg
ICAKKyAgICAgICAgLy8gVGhlIGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgcmVldmFsdWF0ZWQgYW55
dGltZSB0aGUgbXV0YXRvciBydW5zOiBzbyBhdCBHQyBzdGFydCBhbmQKKyAgICAgICAgLy8gd2hl
bmV2ZXIgdGhlIEdDIHJlc3VzcGVuZHMgYWZ0ZXIgYSByZXN1bXB0aW9uLiBUaGlzIGlzIGFsbW9z
dCBhbHdheXMgc29tZXRoaW5nIHRoYXQKKyAgICAgICAgLy8geW91J2QgY2FsbCBhICJyb290IiBp
biBhIHRyYWRpdGlvbmFsIEdDLgorICAgICAgICBHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAg
CisgICAgICAgIC8vIFRoZSBjb25zdHJhaW50IG5lZWRzIHRvIGJlIHJlZXZhbHVhdGVkIGFueSB0
aW1lIGFueSBvYmplY3QgaXMgbWFya2VkIGFuZCBhbnl0aW1lIHRoZQorICAgICAgICAvLyBtdXRh
dG9yIHJlc3VtZXMuCisgICAgICAgIEdyZXllZEJ5TWFya2luZworICAgIH07CisgICAgCisgICAg
TWFya2luZ0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3Ry
aW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZp
c2l0aW5nVGltZW91dCYpPiwKKyAgICAgICAgVm9sYXRpbGl0eSk7CisgICAgCisgICAgTWFya2lu
Z0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCisg
ICAgICAgIFZvbGF0aWxpdHkpOworICAgIAorICAgIH5NYXJraW5nQ29uc3RyYWludCgpOworICAg
IAorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAor
ICAgIGNvbnN0IGNoYXIqIGFiYnJldmlhdGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWJicmV2
aWF0ZWROYW1lLmRhdGEoKTsgfQorICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWUuZGF0YSgpOyB9CisgICAgCisgICAgdm9pZCByZXNldFN0YXRzKCk7CisgICAgCisg
ICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3Vu
dDsgfQorICAgIAorICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0
U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIAorICAgIGRvdWJsZSBxdWlj
a1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgIGlmICgh
bV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgfQor
ICAgIAorICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAg
eworICAgICAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZp
c2l0b3IpOworICAgIH0KKyAgICAKKyAgICBWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7
IHJldHVybiBtX3ZvbGF0aWxpdHk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCisgICAgCisg
ICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CisgICAgQ1N0cmluZyBtX2FiYnJldmlh
dGVkTmFtZTsKKyAgICBDU3RyaW5nIG1fbmFtZTsKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZp
c2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlv
bjsKKyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGlt
YXRlRnVuY3Rpb247CisgICAgVm9sYXRpbGl0eSBtX3ZvbGF0aWxpdHk7CisgICAgc2l6ZV90IG1f
bGFzdFZpc2l0Q291bnQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRT
ZXQuaCIKKworI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYXJraW5nQ29uc3Ry
YWludFNldDo6RXhlY3V0aW9uQ29udGV4dCB7CitwdWJsaWM6CisgICAgRXhlY3V0aW9uQ29udGV4
dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3Rv
bmljVGltZSB0aW1lb3V0KQorICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgLCBtX3Zpc2l0
b3IodmlzaXRvcikKKyAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmc7CisgICAgfQorICAgIAorICAgIGJvb2wgc2hvdWxk
VGltZU91dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmco
KSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7CisgICAgfQorICAgIAorICAgIC8vIFJldHVybnMg
ZmFsc2UgaWYgaXQgdGltZXMgb3V0LgorICAgIGJvb2wgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1
dGVkKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiB1bmV4ZWN1dGVkKSB7Cisg
ICAgICAgICAgICBleGVjdXRlKGluZGV4KTsKKyAgICAgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIo
aW5kZXgpOworICAgICAgICAgICAgaWYgKHNob3VsZFRpbWVPdXQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhlY3V0ZWQuZ2V0KGluZGV4KTsgfQorCisgICAgdm9pZCBleGVjdXRlKHNpemVfdCBpbmRleCkK
KyAgICB7CisgICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1f
ZGlkVmlzaXRTb21ldGhpbmcsIG1fdGltZW91dCk7CisgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGlu
ZGV4KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBt
X3NldDsKKyAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOworICAgIE1vbm90b25pY1RpbWUgbV90
aW1lb3V0OworICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOworICAgIGJvb2wgbV9kaWRWaXNpdFNv
bWV0aGluZyB7IGZhbHNlIH07Cit9OworCitNYXJraW5nQ29uc3RyYWludFNldDo6TWFya2luZ0Nv
bnN0cmFpbnRTZXQoKQoreworfQorCitNYXJraW5nQ29uc3RyYWludFNldDo6fk1hcmtpbmdDb25z
dHJhaW50U2V0KCkKK3sKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6cmVzZXRTdGF0
cygpCit7CisgICAgbV91bmV4ZWN1dGVkUm9vdHMuY2xlYXJBbGwoKTsKKyAgICBtX3VuZXhlY3V0
ZWRPdXRncm93dGhzLmNsZWFyQWxsKCk7CisgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9z
ZXQpIHsKKyAgICAgICAgY29uc3RyYWludC0+cmVzZXRTdGF0cygpOworICAgICAgICBzd2l0Y2gg
KGNvbnN0cmFpbnQtPnZvbGF0aWxpdHkoKSkgeworICAgICAgICBjYXNlIE1hcmtpbmdDb25zdHJh
aW50OjpHcmV5ZWRCeUV4ZWN1dGlvbjoKKyAgICAgICAgICAgIG1fdW5leGVjdXRlZFJvb3RzLnNl
dChjb25zdHJhaW50LT5pbmRleCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeU1hcmtpbmc6CisgICAgICAgICAgICBtX3VuZXhl
Y3V0ZWRPdXRncm93dGhzLnNldChjb25zdHJhaW50LT5pbmRleCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0Ojph
ZGQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICBGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGZ1bmN0aW9u
LAorICAgIE1hcmtpbmdDb25zdHJhaW50OjpWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCit7CisgICAg
YWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0
ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsK
K30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAorICAgIENTdHJpbmcgYWJicmV2
aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgRnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYs
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgRnVuY3Rpb248
ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCisgICAgTWFy
a2luZ0NvbnN0cmFpbnQ6OlZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3sKKyAgICBhZGQoc3RkOjpt
YWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBX
VEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3Jr
RXN0aW1hdGVGdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6YWRkKAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4gY29u
c3RyYWludCkKK3sKKyAgICBjb25zdHJhaW50LT5tX2luZGV4ID0gbV9zZXQuc2l6ZSgpOworICAg
IG1fb3JkZXJlZC5hcHBlbmQoY29uc3RyYWludC5nZXQoKSk7CisgICAgaWYgKGNvbnN0cmFpbnQt
PnZvbGF0aWxpdHkoKSA9PSBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlNYXJraW5nKQorICAg
ICAgICBtX291dGdyb3d0aHMuYXBwZW5kKGNvbnN0cmFpbnQuZ2V0KCkpOworICAgIG1fc2V0LmFw
cGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKK30KKworYm9vbCBNYXJraW5nQ29uc3RyYWludFNl
dDo6ZXhlY3V0ZUJvb3RzdHJhcChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0
aW1lb3V0KQoreworICAgIC8vIEJvb3RzdHJhcCBtZWFucyB0aGF0IHdlIGhhdmVuJ3QgZG9uZSBh
bnkgb2JqZWN0IHZpc2l0aW5nIHlldC4gVGhpcyBtZWFucyB0aGF0IHdlIHdhbnQgdG8KKyAgICAv
LyBvbmx5IGV4ZWN1dGUgcm9vdCBjb25zdHJhaW50cyAod2hpY2ggYWxzbyBoYXBwZW5zIHRvIGJl
IHRob3NlIHRoYXQgd2Ugc2F5IGFyZSBncmV5ZWQgYnkKKyAgICAvLyByZXN1bXB0aW9uKSwgc2lu
Y2UgdGhlIG90aGVyIGNvbnN0cmFpbnRzIGFyZSBzdXBlciB1bmxpa2VseSB0byB0cmlnZ2VyIHdp
dGhvdXQgc29tZSBvYmplY3QKKyAgICAvLyB2aXNpdGluZy4gVGhlIGV4cGVjdGF0aW9uIGlzIHRo
YXQgdGhlIGNhbGxlciB3aWxsIGdvIHN0cmFpZ2h0IHRvIG9iamVjdCB2aXNpdGluZyBhZnRlcgor
ICAgIC8vIHRoaXMuCisgICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0KCp0aGlz
LCB2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAg
ZGF0YUxvZygiYm9vdDoiKTsKKyAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGlvbkNvbnRleHQuZHJh
aW4obV91bmV4ZWN1dGVkUm9vdHMpOworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAg
ICBkYXRhTG9nKCIgIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBNYXJraW5nQ29u
c3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25v
dG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2Vu
Y2VJbXBsKHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAg
ICAgICBkYXRhTG9nKCIgIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBNYXJraW5n
Q29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZHZhbmNpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogb3V0Z3Jvd3RoIDogbV9vdXRncm93dGhz
KSB7CisgICAgICAgIGlmIChvdXRncm93dGgtPndvcmtFc3RpbWF0ZSh2aXNpdG9yKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBFeGVjdXRpb25Db250ZXh0
IGV4ZWN1dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIAorICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRhTG9nKCJjb252ZXJnZToiKTsKKworICAg
IC8vIElmIHRoZXJlIGFyZSBhbnkgY29uc3RyYWludHMgdGhhdCB3ZSBoYXZlIG5vdCBleGVjdXRl
ZCBhdCBhbGwgZHVyaW5nIHRoaXMgY3ljbGUsIHRoZW4KKyAgICAvLyB3ZSBzaG91bGQgZXhlY3V0
ZSB0aG9zZSBub3cuCisgICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRl
ZFJvb3RzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZXhlY3V0aW9uQ29udGV4
dC5kcmFpbihtX3VuZXhlY3V0ZWRPdXRncm93dGhzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIC8vIFdlIHdhbnQgdG8ga2VlcCBwcmVmZXJyaW5nIHRoZSBvdXRncm93dGggY29u
c3RyYWludHMgLSB0aGUgb25lcyB0aGF0IG5lZWQgdG8gYmUgZml4cG9pbnRlZAorICAgIC8vIGV2
ZW4gaW4gYSBzdG9wLXRoZS13b3JsZCBHQyAtIHVudGlsIHRoZXkgc3RvcCBwcm9kdWNpbmcuIFRo
ZXkgaGF2ZSBhIHRlbmRlbmN5IHRvIGdvIHRvdGFsbHkKKyAgICAvLyBzaWxlbnQgYXQgc29tZSBw
b2ludCBkdXJpbmcgR0MsIGF0IHdoaWNoIHBvaW50IGl0IG1ha2VzIHNlbnNlIG5vdCB0byBydW4g
dGhlbSBhZ2FpbiB1bnRpbAorICAgIC8vIHRoZSBlbmQuIE91dGdyb3d0aHMgcHJvZHVjaW5nIG5l
dyBpbmZvcm1hdGlvbiBjb3JyZXNwb25kcyBhbG1vc3QgZXhhY3RseSB0byB0aGUgd2F2ZWZyb250
CisgICAgLy8gYWR2YW5jaW5nOiBpdCB1c3VhbGx5IG1lYW5zIHRoYXQgd2UgYXJlIG1hcmtpbmcg
b2JqZWN0cyB0aGF0IHNob3VsZCBiZSBtYXJrZWQgYmFzZWQgb24KKyAgICAvLyBvdGhlciBvYmpl
Y3RzIHRoYXQgd2Ugd291bGQgaGF2ZSBtYXJrZWQgYW55d2F5LiBPbmNlIHRoZSB3YXZlZnJvbnQg
aXMgbm8gbG9uZ2VyIGFkdmFuY2luZywKKyAgICAvLyB3ZSB3YW50IHRvIHJ1biBtb3N0bHkgdGhl
IHJvb3QgY29uc3RyYWludHMgKGJhc2VkIG9uIHRoZWlyIHByZWRpY3Rpb25zIG9mIGhvdyBtdWNo
IHdvcmsKKyAgICAvLyB0aGV5IHdpbGwgaGF2ZSkgYmVjYXVzZSBhdCB0aGlzIHBvaW50IHdlIGFy
ZSBqdXN0IHRyeWluZyB0byBvdXRwYWNlIHRoZSByZXRyZWF0aW5nCisgICAgLy8gd2F2ZWZyb250
LgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gKGV4ZWN1dGVDb252ZXJn
ZW5jZUltcGwpIG9ubHkgcmV0dXJucyB0cnVlIGlmIGl0IHJ1bnMgYWxsCisgICAgLy8gY29uc3Ry
YWludHMuIFNvLCBhbGwgd2UgYXJlIGNvbnRyb2xsaW5nIGFyZSB0aGUgaGV1cmlzdGljcyB0aGF0
IHNheSB3aGljaCBjb25zdHJhaW50cyB0bworICAgIC8vIHJ1biBmaXJzdC4gQ2hvb3NpbmcgdGhl
IGNvbnN0cmFpbnRzIHRoYXQgYXJlIHRoZSBtb3N0IGxpa2VseSB0byBwcm9kdWNlIG1lYW5zIHJ1
bm5pbmcgZmV3ZXIKKyAgICAvLyBjb25zdHJhaW50cyBiZWZvcmUgcmV0dXJuaW5nLgorICAgIGJv
b2wgaXNXYXZlZnJvbnRBZHZhbmNpbmcgPSB0aGlzLT5pc1dhdmVmcm9udEFkdmFuY2luZyh2aXNp
dG9yKTsKKyAgICAKKyAgICBzdGQ6OnNvcnQoCisgICAgICAgIG1fb3JkZXJlZC5iZWdpbigpLCBt
X29yZGVyZWQuZW5kKCksCisgICAgICAgIFsmXSAoTWFya2luZ0NvbnN0cmFpbnQqIGEsIE1hcmtp
bmdDb25zdHJhaW50KiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgIC8vIFJlbWVtYmVyOiByZXR1
cm4gdHJ1ZSBpZiBhIHNob3VsZCBjb21lIGJlZm9yZSBiLgorICAgICAgICAgICAgaWYgKGEtPnZv
bGF0aWxpdHkoKSAhPSBiLT52b2xhdGlsaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNX
YXZlZnJvbnRBZHZhbmNpbmcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLT52b2xhdGls
aXR5KCkgPiBiLT52b2xhdGlsaXR5KCk7IC8vIEdyZXllZEJ5TWFya2luZyBzaG91bGQgY29tZSBi
ZWZvcmUgR3JleWVkQnlFeGVjdXRpb24uCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYS0+dm9sYXRpbGl0eSgpIDwgYi0+dm9sYXRpbGl0eSgpOyAvLyBH
cmV5ZWRCeUV4ZWN1dGlvbiBzaG91bGQgY29tZSBiZWZvcmUgR3JleWVkQnlNYXJraW5nLgorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gYS0+d29ya0VzdGlt
YXRlKHZpc2l0b3IpID4gYi0+d29ya0VzdGltYXRlKHZpc2l0b3IpOworICAgICAgICB9KTsKKyAg
ICAKKyAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50IDogbV9vcmRlcmVkKSB7
CisgICAgICAgIHNpemVfdCBpID0gY29uc3RyYWludC0+aW5kZXgoKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZEV4ZWN1dGUoaSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKGkpOworICAgICAgICAKKyAg
ICAgICAgLy8gT25jZSB3ZSdyZSBpbiBjb252ZXJnZW5jZSwgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vu
c2UgdG8gbGV0IHNvbWUgbWFya2luZyBoYXBwZW4gYW55dGltZQorICAgICAgICAvLyB3ZSBmaW5k
IHdvcmsuIE5vbmV0aGVsZXNzLCB3ZSBvbmx5IHdhbnQgY29uc3RyYWludHMgdG8gaW50ZXJydXB0
IHRoZW1zZWx2ZXMgdXBvbgorICAgICAgICAvLyB0aW1lb3V0IC0gbm90IGp1c3QgYmVjYXVzZSB0
aGV5IGZvdW5kIHNvbWUgd29yay4KKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxk
IGV4ZWN1dGUgYWxsIGNvbnN0cmFpbnRzIHVudGlsIHRpbWVvdXQ/IE5vdCBjbGVhciBpZiB0aGF0
J3MKKyAgICAgICAgLy8gYmV0dGVyIG9yIHdvcnNlLiBNYXliZSBldmVuIGJldHRlciBpcyB0aGlz
OgorICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGVtcHR5LCBrZWVwIHJ1bm5pbmcuCisg
ICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgaGFzIGF0IGxlYXN0IE4gdGhpbmdzLCByZXR1
cm4uCisgICAgICAgIC8vIC0gRWxzZSBydW4gdW50aWwgdGltZW91dC4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgzMgorICAgICAgICBpZiAo
ZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYXJraW5n
Q29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBi
b29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBjb25zdHJhaW50
IDogbV9zZXQpCisgICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgZGlkVmlzaXRT
b21ldGhpbmcsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIGlmIChPcHRpb25zOjps
b2dHQygpKQorICAgICAgICBkYXRhTG9nKCIgIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgor
I2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldCB7CitwdWJsaWM6Cisg
ICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKKyAgICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsK
KyAgICAKKyAgICB2b2lkIHJlc2V0U3RhdHMoKTsKKyAgICAKKyAgICB2b2lkIGFkZCgKKyAgICAg
ICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCisgICAgICAgIENTdHJpbmcgbmFtZSwKKyAgICAg
ICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+
LAorICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6Vm9sYXRpbGl0eSk7CisgICAgCisgICAgdm9p
ZCBhZGQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAorICAgICAgICBDU3RyaW5n
IG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0
aW5nVGltZW91dCYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4s
CisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpWb2xhdGlsaXR5KTsKKyAgICAKKyAgICB2b2lk
IGFkZChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKKyAgICAKKyAgICAvLyBB
c3N1bWluZyB0aGF0IHRoZSBtYXJrIHN0YWNrcyBhcmUgYWxsIGVtcHR5LCB0aGlzIHdpbGwgZ2l2
ZSB5b3UgYSBndWVzcyBhcyB0byB3aGV0aGVyIG9yCisgICAgLy8gbm90IHRoZSB3YXZlZnJvbnQg
aXMgYWR2YW5jaW5nLgorICAgIGJvb2wgaXNXYXZlZnJvbnRBZHZhbmNpbmcoU2xvdFZpc2l0b3Im
KTsKKyAgICBib29sIGlzV2F2ZWZyb250UmV0cmVhdGluZyhTbG90VmlzaXRvciYgdmlzaXRvcikg
eyByZXR1cm4gIWlzV2F2ZWZyb250QWR2YW5jaW5nKHZpc2l0b3IpOyB9CisgICAgCisgICAgLy8g
RXhlY3V0ZXMgb25seSByb290cy4gUmV0dXJucyB0cnVlIGlmIGFsbCByb290cyBoYXZlIGJlZW4g
ZXhlY3V0ZWQuIEl0J3MgZXhwZWN0ZWQKKyAgICAvLyB0aGF0IHlvdSdsbCBkbyBzb21lIGRyYWlu
aW5nIGFmdGVyIHRoaXMgYW5kIHRoZW4gdXNlIGV4ZWN1dGVDb252ZXJnZW5jZSgpLgorICAgIGJv
b2wgZXhlY3V0ZUJvb3RzdHJhcChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCA9
IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBhbGwgY29uc3RyYWludHMgd2VyZSBleGVjdXRlZC4gVGhpcyBhc3N1bWVzIHRoYXQgeW91J3Zl
IGFscmFlZHkKKyAgICAvLyB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCisg
ICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoCisgICAgICAgIFNsb3RWaXNpdG9yJiwKKyAgICAg
ICAgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7Cisg
ICAgCisgICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5h
bmlnYW5zLgorICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOworICAgIAorcHJpdmF0
ZToKKyAgICBjbGFzcyBFeGVjdXRpb25Db250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRp
b25Db250ZXh0OworICAgIAorICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90Vmlz
aXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgCisgICAgYm9vbCBkcmFpbihTbG90
VmlzaXRvciYsIE1vbm90b25pY1RpbWUsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9y
JiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOworICAgIAorICAgIEJpdFZlY3Rv
ciBtX3VuZXhlY3V0ZWRSb290czsKKyAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkT3V0Z3Jvd3Ro
czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pj4gbV9zZXQ7
CisgICAgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4gbV9vcmRlcmVkOworICAgIFZlY3RvcjxN
YXJraW5nQ29uc3RyYWludCo+IG1fb3V0Z3Jvd3RoczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1
bGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRh
dG9yU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJNdXRhdG9yU2NoZWR1bGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitNdXRhdG9yU2NoZWR1
bGVyOjpNdXRhdG9yU2NoZWR1bGVyKCkKK3sKK30KKworTXV0YXRvclNjaGVkdWxlcjo6fk11dGF0
b3JTY2hlZHVsZXIoKQoreworfQorCit2b2lkIE11dGF0b3JTY2hlZHVsZXI6OmRpZFN0b3AoKQor
eworfQorCit2b2lkIE11dGF0b3JTY2hlZHVsZXI6OndpbGxSZXN1bWUoKQoreworfQorCit2b2lk
IE11dGF0b3JTY2hlZHVsZXI6OmRpZEV4ZWN1dGVDb25zdHJhaW50cygpCit7Cit9CisKK3ZvaWQg
TXV0YXRvclNjaGVkdWxlcjo6bG9nKCkKK3sKK30KKworYm9vbCBNdXRhdG9yU2NoZWR1bGVyOjpz
aG91bGRTdG9wKCkKK3sKKyAgICByZXR1cm4gaGFzRWxhcHNlZCh0aW1lVG9TdG9wKCkpOworfQor
Citib29sIE11dGF0b3JTY2hlZHVsZXI6OnNob3VsZFJlc3VtZSgpCit7CisgICAgcmV0dXJuIGhh
c0VsYXBzZWQodGltZVRvUmVzdW1lKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTXV0YXRvclNjaGVkdWxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTY2hlZHVsZXIuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU2NoZWR1bGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE11dGF0b3JTY2hl
ZHVsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE11dGF0b3JTY2hlZHVsZXIpOworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAg
ICAgICBOb3JtYWwsIC8vIE5vdCBjb2xsZWN0aW5nLgorICAgICAgICBTdG9wcGVkLAorICAgICAg
ICBSZXN1bWVkCisgICAgfTsKKyAgICAKKyAgICBNdXRhdG9yU2NoZWR1bGVyKCk7CisgICAgdmly
dHVhbCB+TXV0YXRvclNjaGVkdWxlcigpOworICAgIAorICAgIHZpcnR1YWwgU3RhdGUgc3RhdGUo
KSBjb25zdCA9IDA7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29sbGVjdGlvbigpID0g
MDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcCgpOworICAgIHZpcnR1YWwgdm9pZCB3
aWxsUmVzdW1lKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4ZWN1dGVDb25zdHJhaW50cygpOwor
ICAgIAorICAgIHZpcnR1YWwgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9wKCkgPSAwOyAvLyBDYWxs
IHdoaWxlIHJlc3VtZWQsIHRvIGFzayB3aGVuIHRvIHN0b3AuCisgICAgdmlydHVhbCBNb25vdG9u
aWNUaW1lIHRpbWVUb1Jlc3VtZSgpID0gMDsgLy8gQ2FsbCB3aGlsZSBzdG9wcGVkLCB0byBhc2sg
d2hlbiB0byByZXN1bWUuCisgICAgCisgICAgdmlydHVhbCB2b2lkIGxvZygpOworICAgIAorICAg
IGJvb2wgc2hvdWxkU3RvcCgpOyAvLyBDYWxsIHdoaWxlIHJlc3VtZWQsIHRvIGFzayBpZiB3ZSBz
aG91bGQgc3RvcCBub3cuCisgICAgYm9vbCBzaG91bGRSZXN1bWUoKTsgLy8gQ2FsbCB3aGlsZSBz
dG9wcGVkLCB0byBhc2sgaWYgd2Ugc2hvdWxkIHJlc3VtZSBub3cuCisgICAgCisgICAgdmlydHVh
bCB2b2lkIGVuZENvbGxlY3Rpb24oKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkocmV2aXNp
b24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU5LDExICs1OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fY29udGFp
bnNMYXN0UXVlcmllZFJvb3QgPSBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lkIGFkZCh2b2lkKiBy
b290KQorICAgIGJvb2wgYWRkKHZvaWQqIHJvb3QpCiAgICAgewogICAgICAgICBpZiAocm9vdCA9
PSBtX2xhc3RRdWVyaWVkUm9vdCkKICAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJv
b3QgPSB0cnVlOwotICAgICAgICBtX3Jvb3RzLmFkZChyb290KTsKKyAgICAgICAgcmV0dXJuIG1f
cm9vdHMuYWRkKHJvb3QpLmlzTmV3RW50cnk7CiAgICAgfQogCiAgICAgaW50IHNpemUoKSBjb25z
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2
aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQ3LDYgKzM0NywxMSBAQCBwcml2YXRlOgog
ICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7CiB9OwogCit2b2lkIFNsb3RWaXNpdG9yOjp2aXNp
dEFzQ29uc3RyYWludChjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgbV9pc1Zpc2l0aW5nTXV0
YXRvclN0YWNrID0gdHJ1ZTsKKyAgICB2aXNpdENoaWxkcmVuKGNlbGwpOworfQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxs
KQogewpAQCAtNDYxLDcgKzQ2Niw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25p
Y1RpbWUgdGkKICAgICAKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcmlnaHRUb1J1bik7
CiAgICAgCi0gICAgd2hpbGUgKCghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgfHwgIW1fbXV0
YXRvclN0YWNrLmlzRW1wdHkoKSkgJiYgIWhhc0VsYXBzZWQodGltZW91dCkpIHsKKyAgICB3aGls
ZSAoIWhhc0VsYXBzZWQodGltZW91dCkpIHsKICAgICAgICAgdXBkYXRlTXV0YXRvcklzU3RvcHBl
ZChsb2NrZXIpOwogICAgICAgICBpZiAoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBtX2NvbGxlY3RvclN0YWNrLnJlZmlsbCgpOwpAQCAtNDc2LDcgKzQ4MSw4IEBA
IHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGkKICAgICAgICAgICAgIG1f
aXNWaXNpdGluZ011dGF0b3JTdGFjayA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5j
ZSgpOyBtX211dGF0b3JTdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQogICAg
ICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9tdXRhdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsK
LSAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBt
X3JpZ2h0VG9SdW4uc2FmZXBvaW50KCk7CiAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsK
ICAgICB9CkBAIC00ODYsMTIgKzQ5MiwxOCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb25v
dG9uaWNUaW1lIHRpCiAKIGJvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oKQog
eworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CisgICAgcmV0
dXJuIGlzRW1wdHkoKSAmJiBkaWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcik7Cit9CisKK2Jvb2wg
U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgTG9ja0hvbGRlciYpCit7CiAg
ICAgcmV0dXJuICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwogICAgICAg
ICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAg
ICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CiB9CiAKLWJv
b2wgU2xvdFZpc2l0b3I6Omhhc1dvcmsoKQorYm9vbCBTbG90VmlzaXRvcjo6aGFzV29yayhjb25z
dCBMb2NrSG9sZGVyJikKIHsKICAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1h
cmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFy
a1N0YWNrLT5pc0VtcHR5KCk7CkBAIC01MTgsMTIgKzUzMCwxMiBAQCBTbG90VmlzaXRvcjo6U2hh
cmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFw
c2VkKHRpbWVvdXQpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWlu
UmVzdWx0OjpUaW1lZE91dDsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChkaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGRpZFJlYWNoVGVybWluYXRpb24obG9ja2VyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
bV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzV29yaygpKQorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzV29yayhsb2NrZXIpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVu
dGlsKG1faGVhcC5tX21hcmtpbmdNdXRleCwgdGltZW91dCk7CkBAIC01MzQsMTMgKzU0NiwxMyBA
QCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0CiAgICAgICAgICAgICAg
ICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBT
aGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKGRpZFJlYWNoVGVybWluYXRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoZGlk
UmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpKQogICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9t
YXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAKICAgICAgICAgICAgICAgICBt
X2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKAogICAgICAgICAgICAg
ICAgICAgICBtX2hlYXAubV9tYXJraW5nTXV0ZXgsIHRpbWVvdXQsCi0gICAgICAgICAgICAgICAg
ICAgIFt0aGlzXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzV29yaygpCisg
ICAgICAgICAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
aGFzV29yayhsb2NrZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1f
cGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdDsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICAgCkBAIC01ODksNyArNjAxLDcgQEAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWlu
UmVzdWx0IFNsb3RWaXNpdAogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAg
ICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CiAgICAgICAgIAotICAg
ICAgICBpZiAoZGlkUmVhY2hUZXJtaW5hdGlvbigpKSB7CisgICAgICAgIGlmIChkaWRSZWFjaFRl
cm1pbmF0aW9uKGxvY2tlcikpIHsKICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRp
b25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJl
c3VsdDo6RG9uZTsKICAgICAgICAgfQpAQCAtNjA1LDEzICs2MTcsMTMgQEAgdm9pZCBTbG90Vmlz
aXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBybwogICAgIAogICAgIGlmIChPcHRpb25zOjpudW1i
ZXJPZkdDTWFya2VycygpID09IDEpIHsKICAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhl
IHNoYXJlZCBIYXNoU2V0LgotICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7
CisgICAgICAgIG1fdmlzaXRDb3VudCArPSBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCku
aXNOZXdFbnRyeTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBQdXQgaW50byB0aGUg
bG9jYWwgc2V0LCBidXQgbWVyZ2Ugd2l0aCB0aGUgc2hhcmVkIG9uZSBldmVyeSBvbmNlIGluCiAg
ICAgLy8gYSB3aGlsZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbG9jYWwgc2V0cyBkb24ndCBncm93
IHRvbyBsYXJnZS4KICAgICBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7Ci0gICAgbV9v
cGFxdWVSb290cy5hZGQocm9vdCk7CisgICAgbV92aXNpdENvdW50ICs9IG1fb3BhcXVlUm9vdHMu
YWRkKHJvb3QpOwogfQogCiBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9p
ZCogcm9vdCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAzLDYgKzEwMyw4IEBA
IHB1YmxpYzoKIAogICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVzVmlzaXRlZDsgfQogICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92
aXNpdENvdW50OyB9CisgICAgCisgICAgdm9pZCBhZGRUb1Zpc2l0Q291bnQoc2l6ZV90IHZhbHVl
KSB7IG1fdmlzaXRDb3VudCArPSB2YWx1ZTsgfQogCiAgICAgdm9pZCBkb25hdGUoKTsKICAgICB2
b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5
KCkpOwpAQCAtMTUxLDYgKzE1MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRSYWNlKEpTQ2Vs
bCogY2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNlS2V5KGNlbGws
IHJlYXNvbikpOyB9CiAgICAgdm9pZCBkaWROb3RSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpOwog
ICAgIHZvaWQgZGlkTm90UmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBk
aWROb3RSYWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24pKTsgfQorICAgIAorICAgIHZvaWQg
dmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKik7CisgICAgCisgICAgYm9vbCBkaWRSZWFj
aFRlcm1pbmF0aW9uKCk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9k
ZUVuYWJsZXI7CkBAIC0xODAsOCArMTg2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRvbmF0ZUtu
b3duUGFyYWxsZWwoKTsKICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoTWFya1N0YWNrQXJy
YXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0byk7CiAgICAgCi0gICAgYm9vbCBoYXNXb3JrKCk7
Ci0gICAgYm9vbCBkaWRSZWFjaFRlcm1pbmF0aW9uKCk7CisgICAgYm9vbCBoYXNXb3JrKGNvbnN0
IExvY2tIb2xkZXImKTsKKyAgICBib29sIGRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgTG9ja0hv
bGRlciYpOwogCiAgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKICAgICBNYXJr
U3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCShyZXZpc2lv
biAyMTA0OTYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVk
dWxlci5jcHA6MjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNwYWNlVGltZVNjaGVkdWxlci5oIgorCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworZG91YmxlIFNwYWNlVGltZVNjaGVkdWxl
cjo6RGVjaXNpb246OnRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpIGNvbnN0Cit7CisgICAgZG91
YmxlIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlID0KKyAgICAgICAgbV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZSAtIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVC
ZWdpbm5pbmc7CisgICAgCisgICAgZG91YmxlIG1heEhlYWRyb29tID0KKyAgICAgICAgbV9zY2hl
ZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCAtIG1fc2NoZWR1bGVyLT5t
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7CisgICAgCisgICAgZG91Ymxl
IGhlYWRyb29tRnVsbG5lc3MgPQorICAgICAgICBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZSAv
IG1heEhlYWRyb29tOworICAgIAorICAgIC8vIGhlYWRyb29tRnVsbG5lc3MgY2FuIGJlIE5hTiBh
bmQgb3RoZXIgaW50ZXJlc3RpbmcgdGhpbmdzIGlmCisgICAgLy8gYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0cy4g
VGhpcyBjb2RlCisgICAgLy8gZGVmZW5kcyBhZ2FpbnN0IGFsbCBmbG9hdGluZyBwb2ludCBkcmFn
b25zLgorICAgIAorICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPj0gMCkpCisgICAgICAgIGhl
YWRyb29tRnVsbG5lc3MgPSAwOworICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPD0gMSkpCisg
ICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAxOworICAgIAorICAgIGRvdWJsZSBtdXRhdG9yVXRp
bGl6YXRpb24gPSAxIC0gaGVhZHJvb21GdWxsbmVzczsKKyAgICAKKyAgICAvLyBTY2FsZSB0aGUg
bXV0YXRvciB1dGlsaXphdGlvbiBpbnRvIHRoZSBwZXJtaXR0ZWQgd2luZG93LgorICAgIG11dGF0
b3JVdGlsaXphdGlvbiA9CisgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRp
b24oKSArCisgICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiAqICgKKyAgICAgICAgICAgIE9wdGlv
bnM6Om1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSAtCisgICAgICAgICAgICBPcHRpb25zOjpt
aW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkpOworICAgIAorICAgIHJldHVybiBtdXRhdG9yVXRp
bGl6YXRpb247Cit9CisKK2RvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0YXJn
ZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDEgLSB0YXJnZXRN
dXRhdG9yVXRpbGl6YXRpb24oKTsKK30KKworU2Vjb25kcyBTcGFjZVRpbWVTY2hlZHVsZXI6OkRl
Y2lzaW9uOjplbGFwc2VkSW5QZXJpb2QoKSBjb25zdAoreworICAgIHJldHVybiAobV9ub3cgLSBt
X3NjaGVkdWxlci0+bV9pbml0aWFsVGltZSkgJSBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Cit9CisK
K2RvdWJsZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpwaGFzZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGVsYXBzZWRJblBlcmlvZCgpIC8gbV9zY2hlZHVsZXItPm1fcGVyaW9kOworfQor
Citib29sIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnNob3VsZEJlUmVzdW1lZCgpIGNv
bnN0Cit7CisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCisg
ICAgICAgIHJldHVybiBwaGFzZSgpIDw9IHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOworICAg
IHJldHVybiBwaGFzZSgpID4gdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKK30KKworTW9u
b3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUoKSBj
b25zdAoreworICAgIEFTU0VSVCghc2hvdWxkQmVSZXN1bWVkKCkpOworICAgIGlmIChPcHRpb25z
Ojpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQorICAgICAgICByZXR1cm4gbV9ub3cgLSBl
bGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKKyAgICByZXR1cm4gbV9u
b3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldENv
bGxlY3RvclV0aWxpemF0aW9uKCk7Cit9CisKK01vbm90b25pY1RpbWUgU3BhY2VUaW1lU2NoZWR1
bGVyOjpEZWNpc2lvbjo6dGltZVRvU3RvcCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNob3VsZEJl
UmVzdW1lZCgpKTsKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3Qo
KSkKKyAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxl
ci0+bV9wZXJpb2QgKiB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKKyAgICByZXR1cm4gbV9u
b3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKK30KKworU3Bh
Y2VUaW1lU2NoZWR1bGVyOjpTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYgaGVhcCkKKyAgICA6IG1f
aGVhcChoZWFwKQorICAgICwgbV9wZXJpb2QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhPcHRp
b25zOjpjb25jdXJyZW50R0NQZXJpb2RNUygpKSkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGVBdFRoZUJlZ2lubmluZyhoZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUpCisgICAg
LCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQoCisgICAgICAgIE9wdGlvbnM6OmNv
bmN1cnJlbnRHQ01heEhlYWRyb29tKCkgKgorICAgICAgICBzdGQ6Om1heDxkb3VibGU+KG1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZywgaGVhcC5tX21heEVkZW5TaXplKSkK
K3sKKyAgICBzbmFwUGhhc2UoKTsKK30KKwordm9pZCBTcGFjZVRpbWVTY2hlZHVsZXI6OnNuYXBQ
aGFzZSgpCit7CisgICAgbV9pbml0aWFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworfQor
CitTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uIFNwYWNlVGltZVNjaGVkdWxlcjo6Y3VycmVu
dERlY2lzaW9uKCkKK3sKKyAgICBEZWNpc2lvbiByZXN1bHQ7CisgICAgcmVzdWx0Lm1fc2NoZWR1
bGVyID0gdGhpczsKKyAgICByZXN1bHQubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9IG1faGVh
cC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOworICAgIHJlc3VsdC5tX25vdyA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjQsMTA1ICsyNCwxOTUgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiU3BhY2VUaW1lU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5oIgogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IAotZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldE11dGF0b3JVdGls
aXphdGlvbigpIGNvbnN0CisvLyBUaGUgc2NoZWR1bGVyIHdpbGwgb2Z0ZW4gbWFrZSBkZWNpc2lv
bnMgYmFzZWQgb24gc3RhdGUgdGhhdCBpcyBpbiBmbHV4LiBJdCB3aWxsIGJlIGZpbmUgc28KKy8v
IGxvbmcgYXMgbXVsdGlwbGUgdXNlcyBvZiB0aGUgc2FtZSB2YWx1ZSBhbGwgc2VlIHRoZSBzYW1l
IHZhbHVlLiBXZSB3b3VsZG4ndCBnZXQgdGhpcyBmb3IgZnJlZSwKKy8vIHNpbmNlIG91ciBuZWVk
IHRvIG1vZHVsYXJpemUgdGhlIGNhbGN1bGF0aW9uIHJlc3VsdHMgaW4gYSB0ZW5kZW5jeSB0byBh
Y2Nlc3MgdGhlIHNhbWUgbXV0YWJsZQorLy8gZmllbGQgaW4gSGVhcCBtdWx0aXBsZSB0aW1lcywg
YW5kIHRvIGFjY2VzcyB0aGUgY3VycmVudCB0aW1lIG11bHRpcGxlIHRpbWVzLgorY2xhc3MgU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6U25hcHNob3QgeworcHVibGljOgorICAgIFNuYXBzaG90
KFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXImIHNjaGVkdWxlcikKKyAgICB7CisgICAgICAgIG1f
bm93ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGUgPSBzY2hlZHVsZXIuYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVJbXBsKCk7CisgICAgfQor
ICAgIAorICAgIE1vbm90b25pY1RpbWUgbm93KCkgY29uc3QgeyByZXR1cm4gbV9ub3c7IH0KKyAg
ICAKKyAgICBkb3VibGUgYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOyB9CisgICAgCitwcml2YXRlOgorICAgIE1vbm90b25p
Y1RpbWUgbV9ub3c7CisgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7Cit9Owor
CitTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyKEhl
YXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKKyAgICAsIG1fcGVyaW9kKFNlY29uZHM6OmZy
b21NaWxsaXNlY29uZHMoT3B0aW9uczo6Y29uY3VycmVudEdDUGVyaW9kTVMoKSkpCiB7Ci0gICAg
ZG91YmxlIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlID0KLSAgICAgICAgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZSAtIG1fc2NoZWR1bGVyLT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRU
aGVCZWdpbm5pbmc7Ci0gICAgCi0gICAgZG91YmxlIG1heEhlYWRyb29tID0KLSAgICAgICAgbV9z
Y2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCAtIG1fc2NoZWR1bGVy
LT5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7Ci0gICAgCi0gICAgZG91
YmxlIGhlYWRyb29tRnVsbG5lc3MgPQotICAgICAgICBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNs
ZSAvIG1heEhlYWRyb29tOwotICAgIAotICAgIC8vIGhlYWRyb29tRnVsbG5lc3MgY2FuIGJlIE5h
TiBhbmQgb3RoZXIgaW50ZXJlc3RpbmcgdGhpbmdzIGlmCi0gICAgLy8gYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0
cy4gVGhpcyBjb2RlCi0gICAgLy8gZGVmZW5kcyBhZ2FpbnN0IGFsbCBmbG9hdGluZyBwb2ludCBk
cmFnb25zLgotICAgIAotICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPj0gMCkpCi0gICAgICAg
IGhlYWRyb29tRnVsbG5lc3MgPSAwOwotICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPD0gMSkp
Ci0gICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAxOwotICAgIAotICAgIGRvdWJsZSBtdXRhdG9y
VXRpbGl6YXRpb24gPSAxIC0gaGVhZHJvb21GdWxsbmVzczsKK30KKworU3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlcjo6flNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIoKQoreworfQorCitNdXRhdG9y
U2NoZWR1bGVyOjpTdGF0ZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpzdGF0ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc3RhdGU7Cit9CisKK3ZvaWQgU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlcjo6YmVnaW5Db2xsZWN0aW9uKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09
IE5vcm1hbCk7CisgICAgbV9zdGF0ZSA9IFN0b3BwZWQ7CisgICAgbV9zdGFydFRpbWUgPSBNb25v
dG9uaWNUaW1lOjpub3coKTsKKworICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJl
Z2lubmluZyA9IG1faGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOworICAgIG1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCA9IAorICAgICAgICBPcHRpb25zOjpjb25jdXJyZW50
R0NNYXhIZWFkcm9vbSgpICoKKyAgICAgICAgc3RkOjptYXg8ZG91YmxlPihtX2J5dGVzQWxsb2Nh
dGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcsIG1faGVhcC5tX21heEVkZW5TaXplKTsKK30KKwor
dm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpkaWRTdG9wKCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChtX3N0YXRlID09IFN0b3BwZWQgfHwgbV9zdGF0ZSA9PSBSZXN1bWVkKTsKKyAgICBt
X3N0YXRlID0gU3RvcHBlZDsKK30KKwordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjp3
aWxsUmVzdW1lKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IFN0b3BwZWQgfHwg
bV9zdGF0ZSA9PSBSZXN1bWVkKTsKKyAgICBtX3N0YXRlID0gUmVzdW1lZDsKK30KKwordm9pZCBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpkaWRFeGVjdXRlQ29uc3RyYWludHMoKQoreworICAg
IC8vIElmIHdlIGV4ZWN1dGUgY29uc3RyYWludHMsIHdlIHdhbnQgdG8gZm9yZ2l2ZSB0aGUgR0Mg
Zm9yIGFsbCBvZiB0aGUgdGltZSBpdCBoYWQgc3RvcHBlZCB0aGUKKyAgICAvLyB3b3JsZCBmb3Ig
aW4gdGhpcyBpbmNyZW1lbnQuIFRoaXMgaGFjayBpcyBlbXBpcmljYWxseSBiZXR0ZXIgdGhhbiBl
dmVyeSBvdGhlciBoZXVyaXN0aWMgSQorICAgIC8vIHRyaWVkLCBiZWNhdXNlIGl0IGp1c3QgbWVh
bnMgdGhhdCB0aGUgR0MgaXMgaGFwcHkgdG8gcGF1c2UgZm9yIGxvbmdlciB3aGVuIGl0J3MgZGVh
bGluZworICAgIC8vIHdpdGggdGhpbmdzIHRoYXQgZG9uJ3QgcGxheSB3ZWxsIHdpdGggY29uY3Vy
cmVuY3kuCisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKworTW9u
b3RvbmljVGltZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjp0aW1lVG9TdG9wKCkKK3sKKyAg
ICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vcm1hbDoKKyAgICAgICAgcmV0dXJuIE1v
bm90b25pY1RpbWU6OmluZmluaXR5KCk7CisgICAgY2FzZSBTdG9wcGVkOgorICAgICAgICByZXR1
cm4gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgY2FzZSBSZXN1bWVkOiB7CisgICAgICAgIFNu
YXBzaG90IHNuYXBzaG90KCp0aGlzKTsKKyAgICAgICAgaWYgKCFzaG91bGRCZVJlc3VtZWQoc25h
cHNob3QpKQorICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90Lm5vdygpOworICAgICAgICByZXR1
cm4gc25hcHNob3Qubm93KCkgLSBlbGFwc2VkSW5QZXJpb2Qoc25hcHNob3QpICsgbV9wZXJpb2Q7
CisgICAgfSB9CiAgICAgCi0gICAgLy8gU2NhbGUgdGhlIG11dGF0b3IgdXRpbGl6YXRpb24gaW50
byB0aGUgcGVybWl0dGVkIHdpbmRvdy4KLSAgICBtdXRhdG9yVXRpbGl6YXRpb24gPQotICAgICAg
ICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgKwotICAgICAgICBtdXRhdG9y
VXRpbGl6YXRpb24gKiAoCi0gICAgICAgICAgICBPcHRpb25zOjptYXhpbXVtTXV0YXRvclV0aWxp
emF0aW9uKCkgLQotICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlv
bigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBNb25v
dG9uaWNUaW1lKCk7Cit9CisKK01vbm90b25pY1RpbWUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
cjo6dGltZVRvUmVzdW1lKCkKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5v
cm1hbDoKKyAgICBjYXNlIFJlc3VtZWQ6CisgICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpu
b3coKTsKKyAgICBjYXNlIFN0b3BwZWQ6IHsKKyAgICAgICAgU25hcHNob3Qgc25hcHNob3QoKnRo
aXMpOworICAgICAgICBpZiAoc2hvdWxkQmVSZXN1bWVkKHNuYXBzaG90KSkKKyAgICAgICAgICAg
IHJldHVybiBzbmFwc2hvdC5ub3coKTsKKyAgICAgICAgcmV0dXJuIHNuYXBzaG90Lm5vdygpIC0g
ZWxhcHNlZEluUGVyaW9kKHNuYXBzaG90KSArIG1fcGVyaW9kICogY29sbGVjdG9yVXRpbGl6YXRp
b24oc25hcHNob3QpOworICAgIH0gfQogICAgIAotICAgIHJldHVybiBtdXRhdG9yVXRpbGl6YXRp
b247CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTW9ub3Rv
bmljVGltZSgpOwogfQogCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFy
Z2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKSBjb25zdAordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyOjpsb2coKQogewotICAgIHJldHVybiAxIC0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9u
KCk7CisgICAgQVNTRVJUKE9wdGlvbnM6OmxvZ0dDKCkpOworICAgIFNuYXBzaG90IHNuYXBzaG90
KCp0aGlzKTsKKyAgICBkYXRhTG9nKAorICAgICAgICAiYT0iLCBmb3JtYXQoIiUuMGxmIiwgYnl0
ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUoc25hcHNob3QpIC8gMTAyNCksICIga2IgIiwKKyAgICAg
ICAgImhmPSIsIGZvcm1hdCgiJS4zbGYiLCBoZWFkcm9vbUZ1bGxuZXNzKHNuYXBzaG90KSksICIg
IiwKKyAgICAgICAgIm11PSIsIGZvcm1hdCgiJS4zbGYiLCBtdXRhdG9yVXRpbGl6YXRpb24oc25h
cHNob3QpKSwgIiAiKTsKIH0KIAotU2Vjb25kcyBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9u
OjplbGFwc2VkSW5QZXJpb2QoKSBjb25zdAordm9pZCBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
OjplbmRDb2xsZWN0aW9uKCkKIHsKLSAgICByZXR1cm4gKG1fbm93IC0gbV9zY2hlZHVsZXItPm1f
aW5pdGlhbFRpbWUpICUgbV9zY2hlZHVsZXItPm1fcGVyaW9kOworICAgIG1fc3RhdGUgPSBOb3Jt
YWw7CisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIH0KIAotZG91Ymxl
IFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnBoYXNlKCkgY29uc3QKK2RvdWJsZSBTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUltcGwoKQogewot
ICAgIHJldHVybiBlbGFwc2VkSW5QZXJpb2QoKSAvIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKKyAg
ICByZXR1cm4gbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7CiB9CiAKLWJvb2wgU3Bh
Y2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6c2hvdWxkQmVSZXN1bWVkKCkgY29uc3QKK2RvdWJs
ZSBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZShj
b25zdCBTbmFwc2hvdCYgc25hcHNob3QpCiB7Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNo
b3VsZFJlc3VtZUZpcnN0KCkpCi0gICAgICAgIHJldHVybiBwaGFzZSgpIDw9IHRhcmdldE11dGF0
b3JVdGlsaXphdGlvbigpOwotICAgIHJldHVybiBwaGFzZSgpID4gdGFyZ2V0Q29sbGVjdG9yVXRp
bGl6YXRpb24oKTsKKyAgICByZXR1cm4gc25hcHNob3QuYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUo
KSAtIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKIH0KIAotTW9ub3Rv
bmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUoKSBjb25z
dAorZG91YmxlIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6Om1heEhlYWRyb29tKCkKIHsKLSAg
ICBBU1NFUlQoIXNob3VsZEJlUmVzdW1lZCgpKTsKLSAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9y
U2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIG1fbm93IC0gZWxhcHNlZEluUGVy
aW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci0gICAgcmV0dXJuIG1fbm93IC0gZWxhcHNl
ZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0YXJnZXRDb2xsZWN0b3JVdGls
aXphdGlvbigpOworICAgIHJldHVybiBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQg
LSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7CiB9CiAKLU1vbm90b25p
Y1RpbWUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGltZVRvU3RvcCgpIGNvbnN0Citk
b3VibGUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6aGVhZHJvb21GdWxsbmVzcyhjb25zdCBT
bmFwc2hvdCYgc25hcHNob3QpCiB7Ci0gICAgQVNTRVJUKHNob3VsZEJlUmVzdW1lZCgpKTsKLSAg
ICBpZiAoT3B0aW9uczo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0
dXJuIG1fbm93IC0gZWxhcHNlZEluUGVyaW9kKCkgKyBtX3NjaGVkdWxlci0+bV9wZXJpb2QgKiB0
YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKLSAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2VkSW5Q
ZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKKyAgICBkb3VibGUgcmVzdWx0ID0gYnl0
ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUoc25hcHNob3QpIC8gbWF4SGVhZHJvb20oKTsKKworICAg
IC8vIGhlYWRyb29tRnVsbG5lc3MgY2FuIGJlIE5hTiBhbmQgb3RoZXIgaW50ZXJlc3RpbmcgdGhp
bmdzIGlmCisgICAgLy8gYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6
ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0cy4gVGhpcyBjb2RlCisgICAgLy8gZGVmZW5k
cyBhZ2FpbnN0IGFsbCBmbG9hdGluZyBwb2ludCBkcmFnb25zLgorICAgIAorICAgIGlmICghKHJl
c3VsdCA+PSAwKSkKKyAgICAgICAgcmVzdWx0ID0gMDsKKyAgICBpZiAoIShyZXN1bHQgPD0gMSkp
CisgICAgICAgIHJlc3VsdCA9IDE7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1TcGFjZVRp
bWVTY2hlZHVsZXI6OlNwYWNlVGltZVNjaGVkdWxlcihIZWFwJiBoZWFwKQotICAgIDogbV9oZWFw
KGhlYXApCi0gICAgLCBtX3BlcmlvZChTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6
OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkpKQotICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZUF0VGhlQmVnaW5uaW5nKGhlYXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSkKLSAgICAsIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCgKLSAgICAgICAgT3B0aW9uczo6Y29uY3Vy
cmVudEdDTWF4SGVhZHJvb20oKSAqCi0gICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nLCBoZWFwLm1fbWF4RWRlblNpemUpKQorZG91
YmxlIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6Om11dGF0b3JVdGlsaXphdGlvbihjb25zdCBT
bmFwc2hvdCYgc25hcHNob3QpCiB7Ci0gICAgc25hcFBoYXNlKCk7CisgICAgZG91YmxlIG11dGF0
b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFkcm9vbUZ1bGxuZXNzKHNuYXBzaG90KTsKKyAgICAKKyAg
ICAvLyBTY2FsZSB0aGUgbXV0YXRvciB1dGlsaXphdGlvbiBpbnRvIHRoZSBwZXJtaXR0ZWQgd2lu
ZG93LgorICAgIG11dGF0b3JVdGlsaXphdGlvbiA9CisgICAgICAgIE9wdGlvbnM6Om1pbmltdW1N
dXRhdG9yVXRpbGl6YXRpb24oKSArCisgICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiAqICgKKyAg
ICAgICAgICAgIE9wdGlvbnM6Om1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSAtCisgICAgICAg
ICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkpOworICAgIAorICAgIHJl
dHVybiBtdXRhdG9yVXRpbGl6YXRpb247CiB9CiAKLXZvaWQgU3BhY2VUaW1lU2NoZWR1bGVyOjpz
bmFwUGhhc2UoKQorZG91YmxlIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmNvbGxlY3RvclV0
aWxpemF0aW9uKGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCkKIHsKLSAgICBtX2luaXRpYWxUaW1l
ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgcmV0dXJuIDEgLSBtdXRhdG9yVXRpbGl6YXRp
b24oc25hcHNob3QpOwogfQogCi1TcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uIFNwYWNlVGlt
ZVNjaGVkdWxlcjo6Y3VycmVudERlY2lzaW9uKCkKK1NlY29uZHMgU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlcjo6ZWxhcHNlZEluUGVyaW9kKGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCkKIHsKLSAg
ICBEZWNpc2lvbiByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fc2NoZWR1bGVyID0gdGhpczsKLSAgICBy
ZXN1bHQubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9IG1faGVhcC5tX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlOwotICAgIHJlc3VsdC5tX25vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAg
IHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIChzbmFwc2hvdC5ub3coKSAtIG1fc3RhcnRUaW1l
KSAlIG1fcGVyaW9kOworfQorCitkb3VibGUgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6cGhh
c2UoY29uc3QgU25hcHNob3QmIHNuYXBzaG90KQoreworICAgIHJldHVybiBlbGFwc2VkSW5QZXJp
b2Qoc25hcHNob3QpIC8gbV9wZXJpb2Q7Cit9CisKK2Jvb2wgU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlcjo6c2hvdWxkQmVSZXN1bWVkKGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCkKK3sKKyAgICBy
ZXR1cm4gcGhhc2Uoc25hcHNob3QpID4gY29sbGVjdG9yVXRpbGl6YXRpb24oc25hcHNob3QpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgJKHJldmlzaW9uIDIxMDQ5
NikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmg6
MjEwNDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworCitjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXIgewor
cHVibGljOgorICAgIGNsYXNzIERlY2lzaW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fc2NoZWR1bGVyOyB9CisgICAg
ICAgIAorICAgICAgICBkb3VibGUgdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3Q7Cisg
ICAgICAgIGRvdWJsZSB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0OworICAgICAg
ICBTZWNvbmRzIGVsYXBzZWRJblBlcmlvZCgpIGNvbnN0OworICAgICAgICBkb3VibGUgcGhhc2Uo
KSBjb25zdDsKKyAgICAgICAgYm9vbCBzaG91bGRCZVJlc3VtZWQoKSBjb25zdDsKKyAgICAgICAg
TW9ub3RvbmljVGltZSB0aW1lVG9SZXN1bWUoKSBjb25zdDsKKyAgICAgICAgTW9ub3RvbmljVGlt
ZSB0aW1lVG9TdG9wKCkgY29uc3Q7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGZy
aWVuZCBjbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXI7CisKKyAgICAgICAgU3BhY2VUaW1lU2NoZWR1
bGVyKiBtX3NjaGVkdWxlciB7IG51bGxwdHIgfTsKKyAgICAgICAgZG91YmxlIG1fYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGUgeyAwIH07CisgICAgICAgIE1vbm90b25pY1RpbWUgbV9ub3c7CisgICAg
fTsKKyAgICAKKyAgICAvLyBDb25zdHJ1Y3QgdGhlIHNjaGVkdWxlciBhdCB0aGUgc3RhcnQgb2Yg
YSBHQyBjeWNsZS4KKyAgICBTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYpOworICAgIAorICAgIC8v
IEZvcmNlcyB0aGUgbmV4dCBwaGFzZSB0byBzdGFydCBub3cuCisgICAgdm9pZCBzbmFwUGhhc2Uo
KTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgc2NoZWR1
bGluZyBkZWNpc2lvbiwgd2hpY2ggd2lsbCBiZSB2YWxpZCBzbyBsb25nIGFzCisgICAgLy8gU3Bh
Y2VUaW1lU2NoZWR1bGVyIGlzIGxpdmUgYW5kIHlvdSBoYXZlbid0IGNhbGxlZCBzbmFwUGhhc2Uo
KS4KKyAgICBEZWNpc2lvbiBjdXJyZW50RGVjaXNpb24oKTsKKyAgICAKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIERlY2lzaW9uOworCisgICAgSGVhcCYgbV9oZWFwOworICAgIFNlY29uZHMg
bV9wZXJpb2Q7CisgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lu
bmluZzsKKyAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kOworICAg
IE1vbm90b25pY1RpbWUgbV9pbml0aWFsVGltZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1l
TXV0YXRvclNjaGVkdWxlci5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUs
NTMgKzI1LDYxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL01vbm90b25pY1Rp
bWUuaD4KKyNpbmNsdWRlICJNdXRhdG9yU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSA8d3RmL1NlY29u
ZHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7CiAKLWNsYXNzIFNwYWNlVGlt
ZVNjaGVkdWxlciB7CisvLyBUaGUgSlNDIGNvbmN1cnJlbnQgR0Mgc29tZXRpbWVzIHN0b3BzIHRo
ZSB3b3JsZCBpbiBvcmRlciB0byBzdGF5IGFoZWFkIG9mIGl0LiBUaGVzZSBkZWxpYmVyYXRlLAor
Ly8gc3ludGhldGljIHBhdXNlcyBlbnN1cmUgdGhhdCB0aGUgR0Mgd29uJ3QgaGF2ZSB0byBkbyBv
bmUgaHVnZSBwYXVzZSBpbiBvcmRlciB0byBjYXRjaCB1cCB0byB0aGUKKy8vIHJldHJlYXRpbmcg
d2F2ZWZyb250LiBUaGUgc2NoZWR1bGVyIGlzIGNhbGxlZCAic3BhY2UtdGltZSIgYmVjYXVzZSBp
dCBsaW5rcyB0aGUgYW1vdW50IG9mIHRpbWUKKy8vIHRoYXQgdGhlIHdvcmxkIGlzIHBhdXNlZCBm
b3IgdG8gdGhlIGFtb3VudCBvZiBzcGFjZSB0aGF0IHRoZSB3b3JsZCBhbGxvY2F0ZWQgc2luY2Ug
dGhlIEdDIGN5Y2xlCisvLyBiZWdhbi4KKworY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ciA6IHB1YmxpYyBNdXRhdG9yU2NoZWR1bGVyIHsKIHB1YmxpYzoKLSAgICBjbGFzcyBEZWNpc2lv
biB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISFtX3NjaGVkdWxlcjsgfQotICAgICAgICAKLSAgICAgICAgZG91YmxlIHRhcmdl
dE11dGF0b3JVdGlsaXphdGlvbigpIGNvbnN0OwotICAgICAgICBkb3VibGUgdGFyZ2V0Q29sbGVj
dG9yVXRpbGl6YXRpb24oKSBjb25zdDsKLSAgICAgICAgU2Vjb25kcyBlbGFwc2VkSW5QZXJpb2Qo
KSBjb25zdDsKLSAgICAgICAgZG91YmxlIHBoYXNlKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgc2hv
dWxkQmVSZXN1bWVkKCkgY29uc3Q7Ci0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1l
KCkgY29uc3Q7Ci0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvU3RvcCgpIGNvbnN0OwotICAg
ICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgU3BhY2VUaW1lU2NoZWR1
bGVyOwotCi0gICAgICAgIFNwYWNlVGltZVNjaGVkdWxlciogbV9zY2hlZHVsZXIgeyBudWxscHRy
IH07Ci0gICAgICAgIGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIHsgMCB9OwotICAg
ICAgICBNb25vdG9uaWNUaW1lIG1fbm93OwotICAgIH07Ci0gICAgCi0gICAgLy8gQ29uc3RydWN0
IHRoZSBzY2hlZHVsZXIgYXQgdGhlIHN0YXJ0IG9mIGEgR0MgY3ljbGUuCi0gICAgU3BhY2VUaW1l
U2NoZWR1bGVyKEhlYXAmKTsKLSAgICAKLSAgICAvLyBGb3JjZXMgdGhlIG5leHQgcGhhc2UgdG8g
c3RhcnQgbm93LgotICAgIHZvaWQgc25hcFBoYXNlKCk7Ci0gICAgCi0gICAgLy8gUmV0dXJucyBh
IHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IHNjaGVkdWxpbmcgZGVjaXNpb24sIHdoaWNoIHdpbGwg
YmUgdmFsaWQgc28gbG9uZyBhcwotICAgIC8vIFNwYWNlVGltZVNjaGVkdWxlciBpcyBsaXZlIGFu
ZCB5b3UgaGF2ZW4ndCBjYWxsZWQgc25hcFBoYXNlKCkuCi0gICAgRGVjaXNpb24gY3VycmVudERl
Y2lzaW9uKCk7CisgICAgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcihIZWFwJik7CisgICAgflNw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIoKTsKKyAgICAKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0
IG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgYmVnaW5Db2xsZWN0aW9uKCkgb3ZlcnJpZGU7Cisg
ICAgCisgICAgdm9pZCBkaWRTdG9wKCkgb3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsUmVzdW1lKCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBkaWRFeGVjdXRlQ29uc3RyYWludHMoKSBvdmVycmlkZTsKKyAg
ICAKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBvdmVycmlkZTsKKyAgICBNb25vdG9u
aWNUaW1lIHRpbWVUb1Jlc3VtZSgpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgbG9nKCkgb3Zl
cnJpZGU7CisgICAgCisgICAgdm9pZCBlbmRDb2xsZWN0aW9uKCkgb3ZlcnJpZGU7CiAgICAgCiBw
cml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBEZWNpc2lvbjsKLQorICAgIGNsYXNzIFNuYXBzaG90
OworICAgIGZyaWVuZCBjbGFzcyBTbmFwc2hvdDsKKyAgICAKKyAgICBkb3VibGUgYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGVJbXBsKCk7CisgICAgCisgICAgZG91YmxlIGJ5dGVzU2luY2VCZWdpbm5p
bmdPZkN5Y2xlKGNvbnN0IFNuYXBzaG90Jik7CisgICAgZG91YmxlIG1heEhlYWRyb29tKCk7Cisg
ICAgZG91YmxlIGhlYWRyb29tRnVsbG5lc3MoY29uc3QgU25hcHNob3QmKTsKKyAgICBkb3VibGUg
bXV0YXRvclV0aWxpemF0aW9uKGNvbnN0IFNuYXBzaG90Jik7CisgICAgZG91YmxlIGNvbGxlY3Rv
clV0aWxpemF0aW9uKGNvbnN0IFNuYXBzaG90Jik7CisgICAgU2Vjb25kcyBlbGFwc2VkSW5QZXJp
b2QoY29uc3QgU25hcHNob3QmKTsKKyAgICBkb3VibGUgcGhhc2UoY29uc3QgU25hcHNob3QmKTsK
KyAgICBib29sIHNob3VsZEJlUmVzdW1lZChjb25zdCBTbmFwc2hvdCYpOworICAgIAogICAgIEhl
YXAmIG1faGVhcDsKICAgICBTZWNvbmRzIG1fcGVyaW9kOwotICAgIGRvdWJsZSBtX2J5dGVzQWxs
b2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmc7Ci0gICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGVBdFRoZUVuZDsKLSAgICBNb25vdG9uaWNUaW1lIG1faW5pdGlhbFRpbWU7Cisg
ICAgU3RhdGUgbV9zdGF0ZSB7IE5vcm1hbCB9OworICAgIAorICAgIGRvdWJsZSBtX2J5dGVzQWxs
b2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcgeyAwIH07CisgICAgZG91YmxlIG1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCB7IDAgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fc3Rh
cnRUaW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIxMDQ5
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwxMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3Bh
Y2VUaW1lU2NoZWR1bGVyLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1kb3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0TXV0
YXRvclV0aWxpemF0aW9uKCkgY29uc3QKLXsKLSAgICBkb3VibGUgYnl0ZXNTaW5jZUJlZ2lubmlu
Z09mQ3ljbGUgPQotICAgICAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC0gbV9zY2hlZHVs
ZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICAKLSAgICBk
b3VibGUgbWF4SGVhZHJvb20gPQotICAgICAgICBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZUF0VGhlRW5kIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGVBdFRoZUJlZ2lubmluZzsKLSAgICAKLSAgICBkb3VibGUgaGVhZHJvb21GdWxsbmVzcyA9Ci0g
ICAgICAgIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlIC8gbWF4SGVhZHJvb207Ci0gICAgCi0g
ICAgLy8gaGVhZHJvb21GdWxsbmVzcyBjYW4gYmUgTmFOIGFuZCBvdGhlciBpbnRlcmVzdGluZyB0
aGluZ3MgaWYKLSAgICAvLyBieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlz
IHplcm8uIFdlIHNlZSB0aGF0IGluIGRlYnVnIHRlc3RzLiBUaGlzIGNvZGUKLSAgICAvLyBkZWZl
bmRzIGFnYWluc3QgYWxsIGZsb2F0aW5nIHBvaW50IGRyYWdvbnMuCi0gICAgCi0gICAgaWYgKCEo
aGVhZHJvb21GdWxsbmVzcyA+PSAwKSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDA7Ci0g
ICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA8PSAxKSkKLSAgICAgICAgaGVhZHJvb21GdWxsbmVz
cyA9IDE7Ci0gICAgCi0gICAgZG91YmxlIG11dGF0b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFkcm9v
bUZ1bGxuZXNzOwotICAgIAotICAgIC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGlu
dG8gdGhlIHBlcm1pdHRlZCB3aW5kb3cuCi0gICAgbXV0YXRvclV0aWxpemF0aW9uID0KLSAgICAg
ICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpICsKLSAgICAgICAgbXV0YXRv
clV0aWxpemF0aW9uICogKAotICAgICAgICAgICAgT3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGls
aXphdGlvbigpIC0KLSAgICAgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRp
b24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIG11dGF0b3JVdGlsaXphdGlvbjsKLX0KLQotZG91Ymxl
IFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMSAtIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwot
fQotCi1TZWNvbmRzIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OmVsYXBzZWRJblBlcmlv
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtX25vdyAtIG1fc2NoZWR1bGVyLT5tX2luaXRpYWxU
aW1lKSAlIG1fc2NoZWR1bGVyLT5tX3BlcmlvZDsKLX0KLQotZG91YmxlIFNwYWNlVGltZVNjaGVk
dWxlcjo6RGVjaXNpb246OnBoYXNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxhcHNlZEluUGVy
aW9kKCkgLyBtX3NjaGVkdWxlci0+bV9wZXJpb2Q7Ci19Ci0KLWJvb2wgU3BhY2VUaW1lU2NoZWR1
bGVyOjpEZWNpc2lvbjo6c2hvdWxkQmVSZXN1bWVkKCkgY29uc3QKLXsKLSAgICBpZiAoT3B0aW9u
czo6Y29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIHBoYXNlKCkg
PD0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgcmV0dXJuIHBoYXNlKCkgPiB0YXJn
ZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOwotfQotCi1Nb25vdG9uaWNUaW1lIFNwYWNlVGltZVNj
aGVkdWxlcjo6RGVjaXNpb246OnRpbWVUb1Jlc3VtZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFz
aG91bGRCZVJlc3VtZWQoKSk7Ci0gICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3Vt
ZUZpcnN0KCkpCi0gICAgICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9z
Y2hlZHVsZXItPm1fcGVyaW9kOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgp
ICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kICogdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsK
LX0KLQotTW9ub3RvbmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9T
dG9wKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2hvdWxkQmVSZXN1bWVkKCkpOwotICAgIGlmIChP
cHRpb25zOjpjb2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICByZXR1cm4gbV9u
b3cgLSBlbGFwc2VkSW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldE11
dGF0b3JVdGlsaXphdGlvbigpOwotICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgp
ICsgbV9zY2hlZHVsZXItPm1fcGVyaW9kOwotfQotCi1TcGFjZVRpbWVTY2hlZHVsZXI6OlNwYWNl
VGltZVNjaGVkdWxlcihIZWFwJiBoZWFwKQotICAgIDogbV9oZWFwKGhlYXApCi0gICAgLCBtX3Bl
cmlvZChTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1Blcmlv
ZE1TKCkpKQotICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKGhl
YXAubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSkKLSAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGVBdFRoZUVuZCgKLSAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20o
KSAqCi0gICAgICAgIHN0ZDo6bWF4PGRvdWJsZT4obV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0
VGhlQmVnaW5uaW5nLCBoZWFwLm1fbWF4RWRlblNpemUpKQotewotICAgIHNuYXBQaGFzZSgpOwot
fQotCi12b2lkIFNwYWNlVGltZVNjaGVkdWxlcjo6c25hcFBoYXNlKCkKLXsKLSAgICBtX2luaXRp
YWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci19Ci0KLVNwYWNlVGltZVNjaGVkdWxlcjo6
RGVjaXNpb24gU3BhY2VUaW1lU2NoZWR1bGVyOjpjdXJyZW50RGVjaXNpb24oKQotewotICAgIERl
Y2lzaW9uIHJlc3VsdDsKLSAgICByZXN1bHQubV9zY2hlZHVsZXIgPSB0aGlzOwotICAgIHJlc3Vs
dC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gbV9oZWFwLm1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGU7Ci0gICAgcmVzdWx0Lm1fbm93ID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5oCShyZXZpc2lvbiAyMTA0
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hlZHVsZXIuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvTW9ub3Rv
bmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBIZWFwOwotCi1jbGFzcyBTcGFjZVRpbWVTY2hlZHVsZXIgewotcHVibGljOgotICAg
IGNsYXNzIERlY2lzaW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fc2NoZWR1bGVyOyB9Ci0gICAgICAgIAotICAgICAg
ICBkb3VibGUgdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIGRvdWJs
ZSB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpIGNvbnN0OwotICAgICAgICBTZWNvbmRzIGVs
YXBzZWRJblBlcmlvZCgpIGNvbnN0OwotICAgICAgICBkb3VibGUgcGhhc2UoKSBjb25zdDsKLSAg
ICAgICAgYm9vbCBzaG91bGRCZVJlc3VtZWQoKSBjb25zdDsKLSAgICAgICAgTW9ub3RvbmljVGlt
ZSB0aW1lVG9SZXN1bWUoKSBjb25zdDsKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9TdG9w
KCkgY29uc3Q7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBT
cGFjZVRpbWVTY2hlZHVsZXI7Ci0KLSAgICAgICAgU3BhY2VUaW1lU2NoZWR1bGVyKiBtX3NjaGVk
dWxlciB7IG51bGxwdHIgfTsKLSAgICAgICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGUgeyAwIH07Ci0gICAgICAgIE1vbm90b25pY1RpbWUgbV9ub3c7Ci0gICAgfTsKLSAgICAKLSAg
ICAvLyBDb25zdHJ1Y3QgdGhlIHNjaGVkdWxlciBhdCB0aGUgc3RhcnQgb2YgYSBHQyBjeWNsZS4K
LSAgICBTcGFjZVRpbWVTY2hlZHVsZXIoSGVhcCYpOwotICAgIAotICAgIC8vIEZvcmNlcyB0aGUg
bmV4dCBwaGFzZSB0byBzdGFydCBub3cuCi0gICAgdm9pZCBzbmFwUGhhc2UoKTsKLSAgICAKLSAg
ICAvLyBSZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGluZyBkZWNpc2lv
biwgd2hpY2ggd2lsbCBiZSB2YWxpZCBzbyBsb25nIGFzCi0gICAgLy8gU3BhY2VUaW1lU2NoZWR1
bGVyIGlzIGxpdmUgYW5kIHlvdSBoYXZlbid0IGNhbGxlZCBzbmFwUGhhc2UoKS4KLSAgICBEZWNp
c2lvbiBjdXJyZW50RGVjaXNpb24oKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNz
IERlY2lzaW9uOwotCi0gICAgSGVhcCYgbV9oZWFwOwotICAgIFNlY29uZHMgbV9wZXJpb2Q7Ci0g
ICAgZG91YmxlIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKLSAgICBk
b3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kOwotICAgIE1vbm90b25pY1Rp
bWUgbV9pbml0aWFsVGltZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N5bmNo
cm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9y
U2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK1N5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxl
cjo6U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKCkKK3sKK30KKworU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjp+U3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyKCkKK3sKK30KKworTXV0YXRvclNjaGVkdWxlcjo6U3RhdGUg
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyOjpzdGF0ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc3RhdGU7Cit9CisKK3ZvaWQgU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyOjpiZWdpbkNvbGxlY3Rpb24oKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KG1fc3RhdGUgPT0gTm9ybWFsKTsKKyAgICBtX3N0YXRlID0gU3RvcHBlZDsKK30KKworTW9ub3Rv
bmljVGltZSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1N0
b3AoKQoreworICAgIHJldHVybiBtX3N0YXRlID09IE5vcm1hbCA/IE1vbm90b25pY1RpbWU6Omlu
ZmluaXR5KCkgOiBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKworTW9ub3RvbmljVGltZSBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1Jlc3VtZSgpCit7Cisg
ICAgcmV0dXJuIG1fc3RhdGUgPT0gTm9ybWFsID8gTW9ub3RvbmljVGltZTo6bm93KCkgOiBNb25v
dG9uaWNUaW1lOjppbmZpbml0eSgpOworfQorCit2b2lkIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlcjo6ZW5kQ29sbGVjdGlvbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV9zdGF0ZSA9PSBTdG9wcGVkKTsKKyAgICBtX3N0YXRlID0gTm9ybWFsOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk11dGF0b3JTY2hlZHVsZXIuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKKy8vIFRoZSBKU0MgY29uY3VycmVudCBHQyByZWxpZXMgb24gc3RvcHBpbmcgdGhl
IHdvcmxkIHRvIHN0YXkgYWhlYWQgb2YgdGhlIHJldHJlYXRpbmcgd2F2ZWZyb250LgorLy8gSXQg
c28gaGFwcGVucyB0aGF0IHRoZSBzYW1lIEFQSSBjYW4gYmUgcmV1c2VkIHRvIGltcGxlbWVudCBh
IG5vbi1jb25jdXJyZW50IEdDIG1vZGUsIHdoaWNoIHdlCisvLyB1c2Ugb24gcGxhdGZvcm1zIHRo
YXQgZG9uJ3Qgc3VwcG9ydCB0aGUgR0MncyBhdG9taWNpdHkgcHJvdG9jb2xzLiBUaGF0IG1lYW5z
IGFueXRoaW5nIG90aGVyCisvLyB0aGFuIFg4Ni02NCBhbmQgQVJNNjQuIFRoaXMgc2NoZWR1bGVy
IGlzIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIGNvbmN1cnJlbnQgR0MncworLy8gU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlci4gSXQgdGVsbHMgdGhlIEdDIHRvIG5ldmVyIHJlc3VtZSB0
aGUgd29ybGQgb25jZSB0aGUgR0MgY3ljbGUgYmVnaW5zLgorCitjbGFzcyBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIgOiBwdWJsaWMgTXV0YXRvclNjaGVkdWxlciB7Citw
dWJsaWM6CisgICAgU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyKCk7Cisg
ICAgflN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlcigpOworICAgIAorICAg
IFN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBiZWdpbkNvbGxl
Y3Rpb24oKSBvdmVycmlkZTsKKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0b3AoKSBv
dmVycmlkZTsKKyAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSgpIG92ZXJyaWRlOworICAg
IAorICAgIHZvaWQgZW5kQ29sbGVjdGlvbigpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFN0
YXRlIG1fc3RhdGUgeyBOb3JtYWwgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1l
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWaXNpdGluZ1RpbWVvdXQgeworcHVibGlj
OgorICAgIFZpc2l0aW5nVGltZW91dCgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWaXNpdGlu
Z1RpbWVvdXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcsIE1v
bm90b25pY1RpbWUgdGltZW91dCkKKyAgICAgICAgOiBtX2RpZFZpc2l0U29tZXRoaW5nKGRpZFZp
c2l0U29tZXRoaW5nKQorICAgICAgICAsIG1fdmlzaXRDb3VudEJlZm9yZSh2aXNpdG9yLnZpc2l0
Q291bnQoKSkKKyAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIHNpemVfdCB2aXNpdENvdW50KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDb3VudCgpIC0gbV92aXNpdENvdW50QmVm
b3JlOworICAgIH0KKworICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZyB8
fCB2aXNpdENvdW50KHZpc2l0b3IpOworICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZFRpbWVP
dXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGlk
VmlzaXRTb21ldGhpbmcodmlzaXRvcikgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOworICAgIH0K
KyAgICAKK3ByaXZhdGU6CisgICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsK
KyAgICBzaXplX3QgbV92aXNpdENvdW50QmVmb3JlIHsgMCB9OworICAgIE1vbm90b25pY1RpbWUg
bV90aW1lb3V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDgg
KzIwMiw2IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoZG91Ymxl
LCBtYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uLCAwLjcsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoZG91YmxlLCBjb25jdXJyZW50R0NNYXhIZWFkcm9vbSwgMS41LCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KGRvdWJsZSwgY29uY3VycmVudEdDUGVyaW9kTVMsIDIsIE5vcm1hbCwgbnVsbHB0
cikgXAotICAgIHYoYm9vbCwgY29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKLSAgICB2KGRvdWJsZSwgY29sbGVjdG9yUGVybWl0dGVkSWRsZVJhdGlv
LCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBm
YWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNz
aW9uLCAxLjQsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIGxhcmdlQWxsb2Nh
dGlvbkN1dG9mZiwgMTAwMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwK
</data>
<flag name="review"
          id="320509"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>